diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..4054f4999fd --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +target/ +bin/ +.settings/ +.classpath +.project +.idea/ +*.iml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000000..c807decf5bf --- /dev/null +++ b/.travis.yml @@ -0,0 +1,29 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# This file allows PDFBox to be built with Travis CI https://travis-ci.org/ + +language: java + +jdk: + - oraclejdk8 + - openjdk7 + - openjdk11 + +before_install: + - sudo apt-get update -qq + - sudo apt-get install -qq fonts-liberation diff --git a/KEYS b/KEYS new file mode 100644 index 00000000000..5bd38ae9514 --- /dev/null +++ b/KEYS @@ -0,0 +1,197 @@ +(instructions copied from forrest's KEYS file) + +This file contains the PGP keys of various developers. +Please don't use them for email unless you have to. Their main +purpose is code signing. + +Users: pgp < KEYS +Developers: + pgp -kxa and append it to this file. + (pgpk -ll && pgpk -xa ) >> this file. + (gpg --list-sigs + && gpg --armor --export ) >> this file. + +---------------------------------------------------------------- +pub 1024D/A355A63E 2006-09-19 +uid Jukka Zitting +sig 3 A355A63E 2006-09-19 Jukka Zitting +sig 3 A355A63E 2006-09-19 Jukka Zitting +sig E04F9A89 2006-10-13 Roy T. Fielding +sig AB821FBC 2006-10-14 Andrew McIntyre +sig 9992ADFC 2006-10-17 Jeff McAdams (General purpose key) +sig 5F7898A9 2006-10-17 William Glass-Husain +sig 08C975E5 2006-10-18 Jim Jagielski +sig BB550746 2006-10-23 J. Daniel Kulp +sig 9BCFCE2F 2006-10-24 Garrett Rooney +sig BFD0307C 2006-10-25 J Aaron Farr +sig 2C5E4EC0 2006-10-28 Henri Yandell (For signing ASF releases) +sig D872E270 2006-10-30 Bozhong Lin +sig 3 669C4AB5 2006-10-16 Cezar Cristian Andrei +sig 665E0760 2006-12-15 Afkham Azeez (WSO2 Email) +sig 329D80D2 2006-12-16 Sanka Samaranayake (Oxygenating The Web Service Platform) +sig E41EDC7E 2006-12-17 Carsten Ziegeler +sig 9C85222B 2007-05-14 Henning Schmiedehausen +sig A29640C4 2008-01-07 Tobias Bocanegra +sig 164DF122 2008-01-08 Marcel Reutegger +sig 015AFC8A 2008-01-08 Bertrand Delacretaz +sig E6E295F4 2008-01-09 Stefan Guggisberg +sig 13BE2497 2008-11-12 Janne Jalkanen +sub 2048g/2542C54A 2006-09-19 +sig A355A63E 2006-09-19 Jukka Zitting + +pub 1024D/8A26D9A6 2006-01-25 +uid Jukka Zitting +sig E04F9A89 2006-02-07 Roy T. Fielding +sig 3 8A26D9A6 2006-02-02 Jukka Zitting +uid Jukka Zitting +sig 3 8A26D9A6 2006-01-25 Jukka Zitting +sig E04F9A89 2006-02-07 Roy T. Fielding +uid Jukka Zitting +sig E04F9A89 2006-02-07 Roy T. Fielding +sig 3 8A26D9A6 2006-02-02 Jukka Zitting +uid Jukka Zitting +sig E04F9A89 2006-02-07 Roy T. Fielding +sig 3 8A26D9A6 2006-02-02 Jukka Zitting +sub 2048g/41181707 2006-01-25 +sig 8A26D9A6 2006-01-25 Jukka Zitting + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.9 (GNU/Linux) + +mQGiBEUQYOcRBADsCu4zTVaB4TOhV7NyTvHhG1bqN+3Va5t4vpGQJg4M4U0Yu0ut +4bCZP8I6rlXGj+TqDKVUx9kfGpIKX6Kw2TvZUYbHIDWh3UhQO1hD4xy4b8rOak1w +3vDAMYA5L/jsZshNHp++aTgmvSoXGS5S1xsjrbrOics6iTtHXMV9TCRelwCgkwGj +WHzPJnlSj0z4jAlRG4ZubAkD/3LOfrXtti1oirfDTnBZcxhvldyCT2yiE3LRe8N2 +ijmtNO6fl2fqXSWuP0L125ytlOvww1r6Gd8sVXiVwt2oKZVQ+A5028BbHa0u4e3y +54nA21OBKLCC/hJvyOkPf9/kZk6S7fV+Tour/auixX4WqUg+siMRe/EwHw6bQDD/ +1OK8A/4rVPPCDTLvcQbT+B3z0IEfryMkivJMu7dEoENDXDK7N5KginugnCpJd+g9 +GbYgTYI2YPNB6A2eaR4lH8yQCMyDXC5+bGL+1NL3SP1qR4JE//nUcbx+iMTYR5uX +kwmaGMXRl7z47OgtaWM/dVipNuNaqkD9WkuMGb4rdSNHrI+amrQgSnVra2EgWml0 +dGluZyA8anVra2FAYXBhY2hlLm9yZz6IXgQTEQIAHgUCRRBg5wIbAwYLCQgHAwID +FQIDAxYCAQIeAQIXgAAKCRCnMFKco1WmPjMkAKCDzBKvBWCxE+NWc98LsnvMRXxy +1gCdFNXW4qAnNrjwJeNZa9YqUy1e9+6IXgQTEQIAHgUCRRBg5wIbAwYLCQgHAwID +FQIDAxYCAQIeAQIXgAAKCRCnMFKco1WmPjMkAJ9orvc5AMXyquJ3LTMw4ZZpfu2p +cgCeNCIzVWrUnsm8fwq6QCZ2E0zC0aWIRgQQEQIABgUCRS8wYAAKCRBbloAQ4E+a +ia2JAJ9JQKm04OY7mmePtbo3X3duAIJ2+ACdGjapH2csm0eN0ASY8LmZfbQ+2x+I +RgQQEQIABgUCRTCZoQAKCRAN8HRdq4IfvC7dAJ0TbVWoLCMFJlJJEIgI+7SdIUXP +FACgoNoQqRE1ddJwlvShuAr/TGkPWFWIRgQQEQIABgUCRTQd3AAKCRBeRSbOmZKt +/N55AKDi8FaRU4mZE6Y1UeI4tedJjQuiyQCgyPQ4TNh1kQVAobJOaKfH5oOaq9SI +RgQQEQIABgUCRTQwXwAKCRCZLEP9X3iYqZFSAJ4t6A3DaBAH38U2894lcxF4i89Z +owCdGLGJemsJYJ0tG35klJ6LgptPJCGIRgQQEQIABgUCRTZPigAKCRCLOmAfCMl1 +5XQnAKDbXvf1/Ikkwk/Mm2gU/Oww3nenDQCeMXbNLANP61ZQVbiq2ptLprB9GIyI +RgQQEQIABgUCRTzy9gAKCRCryO45u1UHRokqAKCSnWGzdBc7rUA8Hk+dSnotxAAk +CACghNdwrn9yZOj9PkaC5AZHooTApbiIRgQQEQIABgUCRT4RZQAKCRDJHbjam8/O +L25YAJ9PvcRqiI28JTR+2nPklshBIl4RPQCg4RVhfHfYYhrnp/PTPvsXwLwbmCiI +RgQQEQIABgUCRT61ywAKCRBr4o6uv9AwfCzwAJ9B0LfpHiNiEcu4fiKwYRkrq23W +2QCfQMXeANfjrLF5rOLBTlybG/iFVoOIRgQQEQIABgUCRUKpkgAKCRASQbyHLF5O +wHbRAJ4kAkT2/s9+jxnQaYGxvGdhAWAv8wCghnhoDt5wEVO9g5B354EeQtBkgQKI +RgQQEQIABgUCRUWYPwAKCRCXe/3Q2HLicG8SAJ9MsVvqPH2GtW9z6JGYwd72dL6q +awCgulT1Osiy3BMvsS3GFLeojlxu1XaIRgQTEQIABgUCRTQR+QAKCRB4voXZZpxK +ta2vAJ9LnSiN1u4vEI8gMfqSE45w+8laKgCfSFhq6NE6E+6pLWRjb/vaMxG34bKI +RgQQEQIABgUCRYKMPAAKCRBK4siHZl4HYEhpAJ9E5g6gYEoB1o9eFreeeHEfJr2+ +SgCgt0rvIcRJt33Ya34WXjW2ec7ZYnGIRgQQEQIABgUCRYQagwAKCRD8d3QRMp2A +0kLOAJ9zBUwMNkOQq5Zi5XymM8z3lkKE0ACdEqTWfzT30T7Gqcqam7rlnvjMlk2I +RgQQEQIABgUCRYWMRQAKCRATLknU5B7cflKmAKCQp7dA9URTfyZeATsuuu1zrkMO +7ACfRg4Ygus7DlFZpa8tDGTqCBkZByiIcQQQEQIAMQUCRkjN6CocSGVubmluZyBT +Y2htaWVkZWhhdXNlbiA8aHBzQGludGVybWV0YS5kZT4ACgkQMoZOQZyFIiuU5ACf +TfCWT2kwScYYl42+uhwXK8oUcQMAningCO/sTpoHOxSXI1PvlNXOFGXHiEYEEBEC +AAYFAkeCU0sACgkQt77A+aKWQMT23ACg5VhjGk+hQE/8cbtOcP/beYifmDoAoKg8 +Z0wTsAM0F1n0zC6Tw6R4Uxr4iEYEEBECAAYFAkeDTjsACgkQJcokaxZN8SKcFwCe +L9r7auMRfqkJe6kQurBDHxKkfdIAn0f59skUr1c4ROQxIYGriVccuYbYiEYEEBEC +AAYFAkeDfocACgkQN/aP9QFa/IpS1ACg17I4LugvvlVkDMQ3Kcg58Lhsh1YAnAul +tscDLKdOeLQnLQZeGa81ZH/ViEYEEBECAAYFAkeEsQ8ACgkQQzCX5ubilfRIFQCg +iBKQzThxFLrIPANmZayZTQmp/aoAoLww0p4ASkVLey73mM8cAkS7DPtSiEYEEBEC +AAYFAkkbRE8ACgkQBpgbnBO+JJeKFgCglDNtIXyqA1flzHSFH/4cFZWCuT8AoK7w +gJomFYTSWTnTN1Nhj/dtmLwNuQINBEUQYQMQCACkfsPxWTFYmAfnMI7sjWbYhMF/ +ym78xwwK+kIdHuqBCnjK8sGJD4BeRtA9E+fE7y9A2VIvvA4N9gj2EoOSiLmkU2XO +EEj2K96FSt93He4wiOjBmT5QwGFqIfg+lrOTDcVXsmEqbSsD1Vfkee6MaZmNbKYT +7JVEmFH13LRdCj5vjr3VV7wJ70vuPSPwHMJwLACFM60QrEGeKifjoouCvRxoNrz0 +LUcbxAkKpCs34dFt+PTtmzgeMmXYK4ljqqX9/UaUbElhlPQXF8iy3TV0B00WmkPw +knUj49gStZ2CSbWtAOQBlcQ3uvC2KEePoDQQSquzWiCRfPJezTl8m6tS0jn/AAUT +B/0eq/QnmTLNIDeZWFLNJjWk6F6JU/qlZYoKxnrEsz3Q9Z6QAewQ2+8XSa2gAA5L +odgqiDmoMcmZ7uOvXTB1qXKdJ+AIMLO3WqbZ29e8STr2Pu+ouaoCQoSKv//Vdo+U +YrEDcRiOXhTwfF2o6HD8UClZGYmdx7Op4T5H64Piky6CLsMudVr3SGU+9E1h8G61 +ddLynt2G6IJrl5s/FyW9xboX+Z/pkPANK6GR108O7s4Pfp5uaIPpEcnCx+f+47Pi +xEbmiBg2qIHk46Qo7nMFXO2ByZZzcALM0JvKSKcOY0ecBp6I9ZHfFOnxnA1rQEMs +YFflFSxSE/nueFCvSJ+WW5uyiEkEGBECAAkFAkUQYQMCGwwACgkQpzBSnKNVpj6l +WACeMtA8UqDpB2tSJhgJBpy1zYbH06UAn2vnHhk+T9mBMOTPjgR9lLrdsnYgmQGi +BEPX7qwRBADv4frloYBGMrl0hNmb/rSIZs1uhLLedlFQUzJenQwxF4AcEw1/E19t +ZEujUQ+xReuID5GtDkdgz97ng4RXciA94yWHbdzAQ2yrptrVlm86D9dBpLkulOmD +B+N+Af9QL9AXoumh8wrapxmqZusiWBPG7GAykRRAHGaM1uGDDW8K3wCg10L03VeR +iMLBrlHlPXKBgk3p5AkD/iToMACHxFkVqPiqdV8wzZ55UVcRhFs7DKFLOkhTD8Gz +pdEq0vQcjdcPCv416oVHl6aBJbPv4LRvr+QL0r3AGYkMA7DoVMeDdE8zhDpEQY6O +SwNcTaqVh8rwakEDnUotlD3sr9MRTM52p1//Br7sVN975/BzARssySnxlGPoEWbB +A/4wcNamgX32HO4bobw6ihvN1rpnv+5jWEdmn5z8Vs+gBw5JZ8TBDjzY6qaCSWm1 +WxR2MbMKyjBOUMz4ZKwU6NDQiAx1SSBt9nLQWzFH1rarLIlub0/t/BgrwvlG+mrj +2eCHmX2rOznjGn5LSSIh2wMp541IW+H8LZ+6VCRXU5BVfbQgSnVra2EgWml0dGlu +ZyA8anVra2FAYXBhY2hlLm9yZz6IXgQTEQIAHgUCQ9furAIbAwYLCQgHAwIDFQID +AxYCAQIeAQIXgAAKCRBQY085iibZpnqCAJ4mUoIbsJDupMRDAstpKpU4jJbpSQCb +BgxZOuWP4MIWh3DGd3h4amBHXAqIRgQQEQIABgUCQ+kYCwAKCRBbloAQ4E+aif6/ +AJ9VkS0C4Y+A9QM6ipM1gNBiD2vzMgCfdcw8DbrXM7wTGpdZtce/DPDDIxi0HUp1 +a2thIFppdHRpbmcgPGp6QHl1a2F0YW4uZmk+iEYEEBECAAYFAkPpGAsACgkQW5aA +EOBPmokNuACfQCalEIeWAtXxqNJEZP7g6YPfBX4AoIyyVBDqR9qx5grIRjqcCxoI +H371iF4EExECAB4FAkPh/ccCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQUGNP +OYom2aYi8wCghp5jm61u8Bw6kBzPuYK0wETqpecAoMXbnk73Q08oiMEKU5GApSjy +GA6htCJKdWtrYSBaaXR0aW5nIDxqdWtrYUB6aXR0aW5nLm5hbWU+iEYEEBECAAYF +AkPpGAsACgkQW5aAEOBPmokySQCcDibY+sjQ7aDlnxp9X4bH6UEJwooAn2NES998 +YD0+tZopNCqojUdC1aOEiF4EExECAB4FAkPh/d4CGwMGCwkIBwMCAxUCAwMWAgEC +HgECF4AACgkQUGNPOYom2abmKACgtFe4Bd8mC/0kdtgXc2DV5/H+YIgAoNCj7z6t +qXHgk21cDwFhofwZiHCQtCdKdWtrYSBaaXR0aW5nIDxqdWtrYS56aXR0aW5nQGdt +YWlsLmNvbT6IRgQQEQIABgUCQ+kYBAAKCRBbloAQ4E+aiTKqAJ9+rxRiqiqcsKTn +oTrniTuJnkvp0QCfZin7+L+c9i8fkWJb5eJwH3x31VeIXgQTEQIAHgUCQ+H98QIb +AwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRBQY085iibZprkFAJsHHKDsw6V8TCYA +JCPE/Z/i8EzlRQCgrMwVJvjyS2f6CIeQubs5WEftLPa5Ag0EQ9futhAIAIMMTPyg +b+n4YUZsnWkuiNpvNIPMSC+H4fJq3ULtep7onp5RMchpKG00x6eCIZsxUjj9j21f +zaG4unCOQeSflKOITyNv44++av7IqqrOvEPQ3P06MQvftJQd+zEWFmgb2vTcNlLV +KUqE0XbbCmv+6vs39Kc0KXu9KE212aEWwkTVjcN2YIXF1M1NYN54aY0Jllqks7pB +J1Jb+r4TQ+/cRxrcAYuBpaDGkwTTjXqA8kIgOyhPzEX8KxMVYSOiodRXmvE9sSut +6w+TG6w9g/lA0ndOZA0IibBcuWGEtpWB0FkiAle2GOHgJYv0mCsKeMlbF09RZslO +9ON2ylNpSuCGc+cAAwUH/0Rgs1UediftXR67m2McsxoaG4kTAE68RpBeCTz1vagf +39H/bRgx3EJJXevMB7jZMQ/L1yZ6V6RHnpxHNQbJ7nLZ81hN+wta0CGoABli/Fw9 +AqHKaYKV/GyG2iyasjF+m95Q0WGQtMD7pH7WaSSRiIu1+ODeXOuogPS/skqf4kFk +ix00BnTMyR/y0+DVikdA5Yg2B10uX1hoqsbED9Je2ayuD/kTOpWVjCSBMXxfkKf8 +8kQKbaGC+BdvqS5yyENynsBb7y/cDWcqWJ4ZwyJg1R/ViLs13gKVVgqKGQhx+XTT +NhxQmxXovTGxUIoaeKYd+rLjJhfSisL5GzBaO8w9KfqISQQYEQIACQUCQ9futgIb +DAAKCRBQY085iibZpqrBAJ4zaHExnAo2aySmuWEwaD0FyFqLnQCeLT3492SZKNa9 +il4FbuRPUfzlq7w= +=BLUS +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/1DFDBF44 2009-03-26 +uid Andreas Lehmkuehler (CODE SIGNING KEY) +sig 3 1DFDBF44 2009-03-26 Andreas Lehmkuehler (CODE SIGNING KEY) +sig A355A63E 2009-03-26 Jukka Zitting +sub 2048g/78CB2E94 2009-03-26 +sig 1DFDBF44 2009-03-26 Andreas Lehmkuehler (CODE SIGNING KEY) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.9 (GNU/Linux) + +mQGiBEnLv1QRBADZ+0Q51lxGD4IZo+eWVdll64J/jxSrFDiCPB6vDcYh5Z/6bzXs +6gvGsNBtN6tVES7zKNDhMftREZsQ1Jdj2SD4Kel9NMtZvtkRIYyVosxSJPS3kavw +DwH4MjmssEOuvEf04ZwESVS9IE3lFdTIbEJQg+BXeIE1V4GA2rmFNJ8OTwCg1EEk +Z/07/zEqSFwhHaytYDCIxYED/2R87nHhQcNlQz47BEy0ohCETVlZx+zQyi2AXP14 +cV+DO064JNRHFb1iTcYyNwNFjH8gDe1V+ZmGi6O2VxuTxNncoydj5kgUiCOfjeOX +IdgX6+ygs7LmYkOrdyvahy83rbGEojgMKbsiZzCEewBISen1lhwndeLsGpm5to3d +gw7UBACbHs3PZjmggtwU131a66fowq8lFr8+6jPvJWAJ15HBLhYtNRPTT4exvXVa +JPBbXPMSYcwAfS5cyP6WfbsxFFuWyGF3TcvGxLEqEg0HmQ2THYzAXmv7XNDbxI/X +L+g9DSfq37+uOdRY10PlfGS3N/5XwfN98N8ZOqHDg0sgoKLxRLQ5QW5kcmVhcyBM +ZWhta3VlaGxlciAoQ09ERSBTSUdOSU5HIEtFWSkgPGxlaG1pQGFwYWNoZS5vcmc+ +iGAEExECACAFAknLv1QCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRB6PJ/i +Hf2/RICPAKDJpHDJYOoylrZb0xp1nIL5KBLgEQCaAo8PiLHvuSdXoOS75nSC0QyS +I0SIRgQQEQIABgUCScvCfgAKCRCnMFKco1WmPlHoAJ4+Me+varQzIhX2F9TDy1ZV +Cv8s8wCcDnxGvF9/nHsA8LcQuKGHsgLYkDC5Ag0EScu/VBAIAIYkT4qggB8tJeDs +GWQ6Uioge+vyYieHtmclXo6bomem6Ijx7AfxCn8pxBxQSXg6ZtFNH9U9MpXwzOGf +4PQqjcEzpH/uh5OPFxcvTK+LB+4q6fAIXe2QqKm331vnAkSNmpWILaDfaq0Ee2Ra +rH4EexnLrc5Dx0453TUhyaiseochk6OQE1Q3mwRhbC8N6TMRqg8fKSrrwIB1Aev1 +Jl8ER94Iwwx/FY2Tskd5mAGu0XIbo68BWL/0uZ6yuZ5iEEiYU4sM0iJcentIiH7I +1vXESV32fwMQifnQbMGedp9maiETjOngdSrXGLFg8+JlqFHxBl+CaDZeb4f5SDd3 +p6tAy4MAAwYH/Aqdy9gBYdcAo9mF2GwXQGCyICbPPNLs99GtDEI9si4gKYZ9c7De +58C7accH6o/l23c+vYaqvBt5THYytqjLqBhMufuaxggAhLzh7QxoiZ+OJh3AmH+f +M9PgR44StpQ1FjgNGkU/5LfueRCYTB0bAtuffWVJ4ec/LiOyXTYqKbdaZ423mb8z +LTcoc2kD99YJfRXEP9vuzpl6m7eiRbH9VLzZggFqAiharp7tUs0QrgHLXrYV5fkW +s9K0wOrYl24As66K+euSPJHysQTazA7wTsQSk9I2oFxxk6FxPAmW6OuLTMbFF/3z +8y8T110d4OrjQocwrK/w3poOkhGcZUS9yZGISQQYEQIACQUCScu/VAIbDAAKCRB6 +PJ/iHf2/RDyaAKClT3jgC4Ax/jvbeDzYLIAJyn9TsACfZ0j7AVahWBh6PGpvSGOW +4Lo6rZY= +=VzWZ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/LICENSE.txt b/LICENSE.txt index d6456956733..2f72615e111 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -200,3 +200,145 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +EXTERNAL COMPONENTS + +Apache PDFBox includes a number of components with separate copyright notices +and license terms. Your use of these components is subject to the terms and +conditions of the following licenses. + +Contributions made to the original PDFBox and FontBox projects: + + Copyright (c) 2002-2007, www.pdfbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of pdfbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Adobe Font Metrics (AFM) for PDF Core 14 Fonts + + 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. + +CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads) + + Copyright 1990-2009 Adobe Systems Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + +PaDaF PDF/A preflight (http://sourceforge.net/projects/padaf) + + Copyright 2010 Atos Worldline SAS + + Licensed by Atos Worldline SAS under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + Atos Worldline SAS licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +OSXAdapter + + Version: 2.0 + + Disclaimer: IMPORTANT: This Apple software is supplied to you by + Apple Inc. ("Apple") in consideration of your agreement to the + following terms, and your use, installation, modification or + redistribution of this Apple software constitutes acceptance of these + terms. If you do not agree with these terms, please do not use, + install, modify or redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under Apple's copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. + may be used to endorse or promote products derived from the Apple + Software without specific prior written permission from Apple. Except + as expressly stated in this notice, no other rights or licenses, express + or implied, are granted by Apple herein, including but not limited to + any patent rights that may be infringed by your derivative works or by + other works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Copyright (C) 2003-2007 Apple, Inc., All Rights Reserved diff --git a/LIMITATIONS.txt b/LIMITATIONS.txt deleted file mode 100644 index e4dfe51db3e..00000000000 --- a/LIMITATIONS.txt +++ /dev/null @@ -1,13 +0,0 @@ -Known Limitations and Problems ---------------------------------------- -1. You get text like "G38G43G36G51G5" instead of what you expect when you are - extracting text. This is because the characters are a meaningless internal - encoding that point to glyphs that are embedded in the PDF document. The - only way to access the text is to use OCR. This may be a future - enhancement. - -2. You get an error message like "java.io.IOException: Can't handle font width" - this MIGHT be due to the fact that you don't have the Resources directory - in your classpath. The easiest solution is to simply include the - PDFBox-x.x.x.jar in your classpath. - diff --git a/NOTICE.txt b/NOTICE.txt index 8cd5262487e..4da75301eaf 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,5 +1,22 @@ Apache PDFBox -Copyright 2008 The Apache Software Foundation +Copyright 2014 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). + +Based on source code originally developed in the PDFBox and +FontBox projects. + +Copyright (c) 2002-2007, www.pdfbox.org + +Based on source code originally developed in the PaDaF project. +Copyright (c) 2010 Atos Worldline SAS + +Includes the Adobe Glyph List +Copyright 1997, 1998, 2002, 2007, 2010 Adobe Systems Incorporated. + +Includes the Zapf Dingbats Glyph List +Copyright 2002, 2010 Adobe Systems Incorporated. + +Includes OSXAdapter +Copyright (C) 2003-2007 Apple, Inc., All Rights Reserved diff --git a/README.md b/README.md new file mode 100644 index 00000000000..191da1caeb5 --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +Apache PDFBox +=================================================== + +The Apache PDFBox library is an open source Java tool for working with PDF +documents. This project allows creation of new PDF documents, manipulation +of existing documents and the ability to extract content from documents. +PDFBox also includes several command line utilities. PDFBox is published +under the Apache License, Version 2.0. + +PDFBox is a project of the Apache Software Foundation . + +Binary Downloads +---------------- + +You can download binary versions for releases currently under development or older +releases from our [Download Page](http://pdfbox.apache.org/download.cgi). + +Build +----- + +You need Java 7 (or higher) and Maven 3 to +build PDFBox. The recommended build command is: + + mvn clean install + +The default build will compile the Java sources and package the binary +classes into jar packages. See the Maven documentation for all the +other available build options. + +Contribute +---------- + +There are various ways to help us improve PDFBox. + +- look at the [Issue Tracker](https://issues.apache.org/jira/browse/PDFBOX) to help us fix bugs. +- answer questions on our [Users Mailing List](http://pdfbox.apache.org/mailinglists.html "Subscribe to Mailing List"). +- help us enhance the [Examples](https://svn.apache.org/repos/asf/pdfbox/trunk/examples/) +- help us to enhance the [PDFBox Documentation](https://git-wip-us.apache.org/repos/asf/pdfbox-docs) +or on [GitHub](https://github.com/apache/pdfbox-docs). + +Support +------- + +**Please follow the guidelines at our [Support Page](http://pdfbox.apache.org/support.html).** + +If you have questions about how to use PDFBox do ask on the +[Users Mailing List](/mailinglists.html "Subscribe to Mailing List"). +This will get you help from the entire community. + +The PDFBox examples and the test code in the sources will also provide additional information. + +And there are additional resources available on sites such as +[Stack Overflow](http://stackoverflow.com/search?q=pdfbox "Stack Overflow"). + +If you are sure you have found a bug the please report the issue in our +[Issue Tracker](https://issues.apache.org/jira/browse/PDFBOX). + +Known Limitations and Problems +------------------------------ + +See the issue tracker at https://issues.apache.org/jira/browse/PDFBOX for +the full list of known issues and requested features. Some of the more +commont issues are: + +1. You get text like "G38G43G36G51G5" instead of what you expect when you are + extracting text. This is because the characters are a meaningless internal + encoding that point to glyphs that are embedded in the PDF document. The + only way to access the text is to use OCR. This may be a future + enhancement. + +2. You get an error message like "java.io.IOException: Can't handle font width" + this MIGHT be due to the fact that you don't have the + org/apache/pdfbox/resources directory in your classpath. The easiest + solution is to simply include the apache-pdfbox-x.x.x.jar in your classpath. + +3. You get text that has the correct characters, but in the wrong + order. This mght be because you have not enabled sorting. The text + in PDF files is stored in chunks and the chunks do not need to be stored + in the order that they are displayed on a page. By default, PDFBox does + not sort the text. + +License (see also LICENSE.txt) +------------------------------ + +Collective work: Copyright 2015 The Apache Software Foundation. + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Export control +-------------- + +This distribution includes cryptographic software. The country in which +you currently reside may have restrictions on the import, possession, use, +and/or re-export to another country, of encryption software. BEFORE using +any encryption software, please check your country's laws, regulations and +policies concerning the import, possession, or use, and re-export of +encryption software, to see if this is permitted. See + for more information. + +The U.S. Government Department of Commerce, Bureau of Industry and +Security (BIS), has classified this software as Export Commodity Control +Number (ECCN) 5D002.C.1, which includes information security software using +or performing cryptographic functions with asymmetric algorithms. The form +and manner of this Apache Software Foundation distribution makes it eligible +for export under the License Exception ENC Technology Software Unrestricted +(TSU) exception (see the BIS Export Administration Regulations, Section +740.13) for both object code and source code. + +The following provides more details on the included cryptographic software: + +**Apache PDFBox uses the Java Cryptography Architecture (JCA) and the +Bouncy Castle libraries for handling encryption in PDF documents.** diff --git a/README.txt b/README.txt deleted file mode 100644 index a6deaf82002..00000000000 --- a/README.txt +++ /dev/null @@ -1,40 +0,0 @@ -=================================================== -Apache PDFBox -=================================================== - -PDFBox is an open source Java library for working with PDF documents. - -Disclaimer -========== - -Apache PDFBox is an effort undergoing incubation at The Apache Software -Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is -required of all newly accepted projects until a further review indicates -that the infrastructure, communications, and decision making process have -stabilized in a manner consistent with other successful ASF projects. While -incubation status is not necessarily a reflection of the completeness or -stability of the code, it does indicate that the project has yet to be fully -endorsed by the ASF. - -See http://incubator.apache.org/projects/pdfbox.html for the current -incubation status of the Apache PDFBox project. - -License (see also LICENSE.txt) -============================== - -Collective work: Copyright 2008 The Apache Software Foundation. - -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt new file mode 100644 index 00000000000..45b977cdc15 --- /dev/null +++ b/RELEASE-NOTES.txt @@ -0,0 +1,55 @@ +Release Notes -- Apache PDFBox -- Version 3.0.0 + +Introduction +------------ + +The Apache PDFBox library is an open source Java tool for working with PDF documents. + +This is the third release candidate for the upcoming major release 2.0.0 of PDFBox. +This release contains a lot of improvements, fixes and refactorings. The API is +supposed to be stable, but we can't guarantee that there won't be any last changes +to it before providing the final release candidate. + +For more details on these changes and all the other fixes and improvements +included in this release, please refer to the following issues on the +PDFBox issue tracker at https://issues.apache.org/jira/browse/PDFBOX. + +Bug + +[PDFBOX-XXXX] - TODO + + +Release Contents +---------------- + +This release consists of a single source archive packaged as a zip file. +The archive can be unpacked with the jar tool from your JDK installation. +See the README.txt file for instructions on how to build this release. + +The source archive is accompanied by SHA512 checksums and a PGP signature +that you can use to verify the authenticity of your download. +he public key used for the PGP signature can be found at +https://www.apache.org/dist/pdfbox/KEYS. + +About Apache PDFBox +------------------- + +Apache PDFBox is an open source Java library for working with PDF documents. +This project allows creation of new PDF documents, manipulation of existing +documents and the ability to extract content from documents. Apache PDFBox +also includes several command line utilities. Apache PDFBox is published +under the Apache License, Version 2.0. + +For more information, visit http://pdfbox.apache.org/ + +About The Apache Software Foundation +------------------------------------ + +Established in 1999, The Apache Software Foundation provides organizational, +legal, and financial support for more than 100 freely-available, +collaboratively-developed Open Source projects. The pragmatic Apache License +enables individual and commercial users to easily deploy Apache software; +the Foundation's intellectual property framework limits the legal exposure +of its 2,500+ contributors. + +For more information, visit http://www.apache.org/ diff --git a/Resources/PDFBox_External_Fonts.properties b/Resources/PDFBox_External_Fonts.properties deleted file mode 100644 index d0472b6bcfa..00000000000 --- a/Resources/PDFBox_External_Fonts.properties +++ /dev/null @@ -1,4 +0,0 @@ -Arial-BoldItalicMT=Resources/ttf/Arial-BoldItalicMT.ttf -Arial-BoldMT=Resources/ttf/Arial-BoldMT.ttf -ArialMT=Resources/ttf/ArialMT.ttf -UNKNOWN_FONT=Resources/ttf/ArialMT.ttf diff --git a/Resources/PDFTextStripper.properties b/Resources/PDFTextStripper.properties deleted file mode 100644 index 4594a99af53..00000000000 --- a/Resources/PDFTextStripper.properties +++ /dev/null @@ -1,77 +0,0 @@ -# this Table is a correspondance Map of the PDF stream operators with concretes class of the -# OperatorProcessor abstract class for the stategy pattern used in the -# org.pdfbox.util.PDFStreamEngine class. -# To change the behaviour of the system, remplace the class name by a new class name. -#b org.pdfbox.util.operator.NotImplemented //close fill stroke -#B org.pdfbox.util.operator.NotImplemented //fill stroke -#b* org.pdfbox.util.operator.NotImplemented//close eofill stroke -#B* org.pdfbox.util.operator.NotImplemented //eofill stroke -#BDC org.pdfbox.util.operator.NotImplemented //begin marked content property list -#BI org.pdfbox.util.operator.NotImplemented //begin image -#BMC org.pdfbox.util.operator.NotImplemented //begin marked content -BT=org.pdfbox.util.operator.BeginText -#BX org.pdfbox.util.operator.NotImplemented //begin compatibility section -#c org.pdfbox.util.operator.NotImplemented //curveto -cm=org.pdfbox.util.operator.Concatenate -#CS=org.pdfbox.util.operator.SetStrokingColorSpace -#cs org.pdfbox.util.operator.NotImplemented //nonstroking colorspace -#d org.pdfbox.util.operator.NotImplemented //line dash pattern -#d0 org.pdfbox.util.operator.NotImplemented //set char width in type 3 font -#d1 org.pdfbox.util.operator.NotImplemented //set glyph width and bounding box in type 3 font -Do=org.pdfbox.util.operator.Invoke -#DP org.pdfbox.util.operator.NotImplemented //defined marked content point -#El org.pdfbox.util.operator.NotImplemented //end image -#EMC org.pdfbox.util.operator.NotImplemented //end marked content -ET=org.pdfbox.util.operator.EndText -#EX org.pdfbox.util.operator.NotImplemented //end compatibility section -#f org.pdfbox.util.operator.NotImplemented //fill -#F org.pdfbox.util.operator.NotImplemented //fill -#f* org.pdfbox.util.operator.NotImplemented //eofill -#G org.pdfbox.util.operator.NotImplemented //setgray -#g org.pdfbox.util.operator.NotImplemented //setgray -gs=org.pdfbox.util.operator.SetGraphicsStateParameters -#h org.pdfbox.util.operator.NotImplemented //closepath -#i org.pdfbox.util.operator.NotImplemented //set flatness -#ID org.pdfbox.util.operator.NotImplemented //begin inline image data -#j org.pdfbox.util.operator.NotImplemented //Set line join style -#J org.pdfbox.util.operator.NotImplemented //Set line cap style -#K org.pdfbox.util.operator.NotImplemented //CMYK color -#k org.pdfbox.util.operator.NotImplemented //CMYK color -#l org.pdfbox.util.operator.NotImplemented //lineto -#m org.pdfbox.util.operator.NotImplemented //moveto -#M org.pdfbox.util.operator.NotImplemented //set miter limit -#MP org.pdfbox.util.operator.NotImplemented//define marked content point -#n org.pdfbox.util.operator.NotImplemented //end path without filling or stroking -q=org.pdfbox.util.operator.GSave -Q=org.pdfbox.util.operator.GRestore -#re org.pdfbox.util.operator.NotImplemented //append rectangle -#RG org.pdfbox.util.operator.NotImplemented //RGB color -#rg org.pdfbox.util.operator.NotImplemented //RGB color -#ri org.pdfbox.util.operator.NotImplemented //color rendering intent -#s org.pdfbox.util.operator.NotImplemented //closepath stroke -#S org.pdfbox.util.operator.NotImplemented //stroke -#SC org.pdfbox.util.operator.NotImplemented //set color -#sc org.pdfbox.util.operator.NotImplemented //set color -#SCN org.pdfbox.util.operator.NotImplemented //set color ICC -#scn org.pdfbox.util.operator.NotImplemented //set color ICC -#sh org.pdfbox.util.operator.NotImplemented //shade fill -T*=org.pdfbox.util.operator.NextLine -Tc=org.pdfbox.util.operator.SetCharSpacing -Td=org.pdfbox.util.operator.MoveText -TD=org.pdfbox.util.operator.MoveTextSetLeading -Tf=org.pdfbox.util.operator.SetTextFont -Tj=org.pdfbox.util.operator.ShowText -TJ=org.pdfbox.util.operator.ShowTextGlyph -TL=org.pdfbox.util.operator.SetTextLeading -Tm=org.pdfbox.util.operator.SetMatrix -Tr=org.pdfbox.util.operator.SetTextRenderingMode -Ts=org.pdfbox.util.operator.SetTextRise -Tw=org.pdfbox.util.operator.SetWordSpacing -Tz=org.pdfbox.util.operator.SetHorizontalTextScaling -#v=org.pdfbox.util.operator.NotImplemented //curveto -w=org.pdfbox.util.operator.SetLineWidth -#W org.pdfbox.util.operator.NotImplemented //clip -#W*=org.pdfbox.util.operator.NotImplemented //eoclip -#y=org.pdfbox.util.operator.NotImplemented //curveto -\'=org.pdfbox.util.operator.MoveAndShow -\"=org.pdfbox.util.operator.SetMoveAndShow diff --git a/Resources/PageDrawer.properties b/Resources/PageDrawer.properties deleted file mode 100644 index 10f93bd12b2..00000000000 --- a/Resources/PageDrawer.properties +++ /dev/null @@ -1,77 +0,0 @@ -# this Table is a correspondance Map of the PDF stream operators with concretes class of the -# OperatorProcessor abstract class for the stategy pattern used in the -# org.pdfbox.util.PDFStreamEngine class. -# To change the behaviour of the system, remplace the class name by a new class name. -b=org.pdfbox.util.operator.pagedrawer.CloseFillNonZeroAndStrokePath -B=org.pdfbox.util.operator.pagedrawer.FillNonZeroAndStrokePath -#b* org.pdfbox.util.operator.NotImplemented -#B* org.pdfbox.util.operator.NotImplemented -#BDC org.pdfbox.util.operator.NotImplemented -BI=org.pdfbox.util.operator.pagedrawer.BeginInlineImage -#BMC org.pdfbox.util.operator.NotImplemented -BT=org.pdfbox.util.operator.BeginText -#BX org.pdfbox.util.operator.NotImplemented -c=org.pdfbox.util.operator.pagedrawer.CurveTo -cm=org.pdfbox.util.operator.Concatenate -CS=org.pdfbox.util.operator.SetStrokingColorSpace -cs=org.pdfbox.util.operator.SetNonStrokingColorSpace -d=org.pdfbox.util.operator.SetLineDashPattern -#d0 org.pdfbox.util.operator.NotImplemented -#d1 org.pdfbox.util.operator.NotImplemented -Do=org.pdfbox.util.operator.pagedrawer.Invoke -#DP org.pdfbox.util.operator.NotImplemented -#El org.pdfbox.util.operator.NotImplemented -#EMC org.pdfbox.util.operator.NotImplemented -ET=org.pdfbox.util.operator.EndText -#EX org.pdfbox.util.operator.NotImplemented -f=org.pdfbox.util.operator.pagedrawer.FillNonZeroRule -F=org.pdfbox.util.operator.pagedrawer.FillNonZeroRule -f*=org.pdfbox.util.operator.pagedrawer.FillEvenOddRule -G=org.pdfbox.util.operator.SetStrokingGrayColor -g=org.pdfbox.util.operator.SetNonStrokingGrayColor -gs=org.pdfbox.util.operator.SetGraphicsStateParameters -h=org.pdfbox.util.operator.pagedrawer.ClosePath -#i org.pdfbox.util.operator.NotImplemented -#ID org.pdfbox.util.operator.NotImplemented -#j org.pdfbox.util.operator.NotImplemented -#J org.pdfbox.util.operator.NotImplemented -K=org.pdfbox.util.operator.SetStrokingCMYKColor -k=org.pdfbox.util.operator.SetNonStrokingCMYKColor -l=org.pdfbox.util.operator.pagedrawer.LineTo -m=org.pdfbox.util.operator.pagedrawer.MoveTo -#M org.pdfbox.util.operator.NotImplemented -#MP org.pdfbox.util.operator.NotImplemented -n=org.pdfbox.util.operator.pagedrawer.EndPath -q=org.pdfbox.util.operator.GSave -Q=org.pdfbox.util.operator.GRestore -re=org.pdfbox.util.operator.pagedrawer.AppendRectangleToPath -RG=org.pdfbox.util.operator.SetStrokingRGBColor -rg=org.pdfbox.util.operator.SetNonStrokingRGBColor -#ri org.pdfbox.util.operator.NotImplemented -s=org.pdfbox.util.operator.CloseAndStrokePath -S=org.pdfbox.util.operator.pagedrawer.StrokePath -#SC org.pdfbox.util.operator.NotImplemented -#sc org.pdfbox.util.operator.NotImplemented -#SCN org.pdfbox.util.operator.NotImplemented -#scn org.pdfbox.util.operator.NotImplemented -#sh org.pdfbox.util.operator.NotImplemented -T*=org.pdfbox.util.operator.NextLine -Tc=org.pdfbox.util.operator.SetCharSpacing -Td=org.pdfbox.util.operator.MoveText -TD=org.pdfbox.util.operator.MoveTextSetLeading -Tf=org.pdfbox.util.operator.SetTextFont -Tj=org.pdfbox.util.operator.ShowText -TJ=org.pdfbox.util.operator.ShowTextGlyph -TL=org.pdfbox.util.operator.SetTextLeading -Tm=org.pdfbox.util.operator.SetMatrix -Tr=org.pdfbox.util.operator.SetTextRenderingMode -Ts=org.pdfbox.util.operator.SetTextRise -Tw=org.pdfbox.util.operator.SetWordSpacing -Tz=org.pdfbox.util.operator.SetHorizontalTextScaling -v=org.pdfbox.util.operator.pagedrawer.CurveToReplicateInitialPoint -w=org.pdfbox.util.operator.pagedrawer.SetLineWidth -#W org.pdfbox.util.operator.NotImplemented -#W* org.pdfbox.util.operator.NotImplemented -y=org.pdfbox.util.operator.pagedrawer.CurveToReplicateFinalPoint -\'=org.pdfbox.util.operator.MoveAndShow -\"=org.pdfbox.util.operator.SetMoveAndShow diff --git a/Resources/cmap/00_ReadMe.pdf b/Resources/cmap/00_ReadMe.pdf deleted file mode 100644 index de4db524213..00000000000 Binary files a/Resources/cmap/00_ReadMe.pdf and /dev/null differ diff --git a/Resources/cmap/78-EUC-H b/Resources/cmap/78-EUC-H deleted file mode 100644 index 4bbbbffed9d..00000000000 --- a/Resources/cmap/78-EUC-H +++ /dev/null @@ -1,708 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (78-EUC-H) -%%Title: (78-EUC-H Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /78-EUC-H def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25347] def - -/WMode 0 def - -3 begincodespacerange - <00> <80> - <8EA0> <8EDF> - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 231 -endnotdefrange - -100 begincidrange -<20> <7e> 231 -<8ea0> <8edf> 326 - 633 - 727 - 780 - 790 - 816 - 842 - 925 - 1011 - 1035 - 1059 - 1092 - 1125 - 7633 - 1127 - 8266 - 1134 - 7961 - 7330 - 1144 - 7634 - 1152 - 7635 - 1203 - 7636 - 1208 - 7637 - 1217 - 1219 - 7638 - 1229 - 7639 - 1240 - 7640 - 1244 - 7642 - 1248 - 7643 - 1253 - 7644 - 1294 - 1313 - 7645 - 7369 - 7646 - 1323 - 7647 - 1377 - 7648 - 1403 - 7649 - 1406 - 1407 - 7650 - 1409 - 6497 - 1441 - 5023 - 1448 - 7651 - 1476 - 7652 - 1482 - 7653 - 1490 - 5937 - 1493 - 7654 - 1497 - 1501 - 7655 - 5490 - 1536 - 7656 - 1546 - 6688 - 1551 - 7657 - 1570 - 1595 - 7658 - 1606 - 7659 - 1627 - 1689 - 7660 - 1691 - 7661 - 1699 - 7474 - 1727 - 7662 - 1736 - 7663 - 1766 - 7664 - 1773 - 7665 - 1780 -endcidrange - -100 begincidrange - 7666 - 1782 - 1783 - 7667 - 1787 - 7668 - 1806 - 7669 - 1820 - 7670 - 1829 - 7671 - 1833 - 7672 - 1836 - 7181 - 1842 - 7673 - 1851 - 7674 - 1864 - 7675 - 1872 - 7676 - 1877 - 7677 - 1897 - 7678 - 1910 - 1971 - 7679 - 1982 - 7680 - 1994 - 7681 - 2005 - 5853 - 2031 - 7682 - 2048 - 7683 - 2055 - 7684 - 2060 - 2065 - 7685 - 2116 - 7686 - 2136 - 7687 - 2149 - 2159 - 7688 - 2166 - 7689 - 2169 - 7690 - 2171 - 7691 - 2184 - 2253 - 7693 - 6441 - 2294 - 7694 - 2308 - 7695 - 2315 - 2347 - 7697 - 2358 - 7698 - 2369 - 7699 - 2424 - 7701 - 2430 - 2441 - 7703 - 2446 - 7704 - 2460 - 7705 - 2472 - 7706 - 2494 - 7707 - 2504 - 7708 - 2509 - 2535 - 7709 - 2545 - 7710 - 2592 - 7711 - 2599 - 7712 - 2608 - 2629 -endcidrange - -100 begincidrange - 7713 - 2631 - 7714 - 2663 - 7715 - 2699 - 7716 - 2711 - 7718 - 2719 - 2723 - 7720 - 6766 - 2731 - 7721 - 2748 - 7722 - 2767 - 7723 - 2770 - 7724 - 2786 - 7725 - 2796 - 2817 - 7726 - 2846 - 7727 - 2862 - 7728 - 2877 - 7729 - 2884 - 7730 - 2896 - 7731 - 2903 - 7733 - 2910 - 2911 - 7734 - 2918 - 7735 - 2921 - 7737 - 2925 - 7739 - 2940 - 7740 - 2991 - 7741 - 2996 - 7742 - 3003 - 3005 - 7743 - 3034 - 7744 - 3045 - 7745 - 3047 - 7746 - 3050 - 7747 - 3052 - 8267 - 3057 - 4533 - 3064 - 3099 - 7748 - 3101 - 7749 - 3106 - 7750 - 3113 - 7751 - 3121 - 7752 - 3130 - 7753 - 3139 - 7754 - 3142 - 7755 - 3149 - 5855 - 3154 - 7757 - 3167 - 5200 - 3177 - 5430 - 3182 - 7758 - 3187 - 3193 - 7759 - 3223 - 7760 -endcidrange - -100 begincidrange - 3227 - 7761 - 3246 - 7763 - 3253 - 7765 - 3258 - 7766 - 3264 - 7768 - 3267 - 6893 - 3279 - 3287 - 7769 - 3296 - 7770 - 3312 - 7771 - 3342 - 7772 - 6537 - 7773 - 3360 - 7774 - 3364 - 3381 - 7775 - 3385 - 7776 - 3395 - 7777 - 3397 - 7778 - 3433 - 7779 - 3447 - 7780 - 3466 - 3475 - 7781 - 3478 - 7783 - 5179 - 3491 - 7784 - 3493 - 7785 - 3496 - 7786 - 3507 - 7787 - 3521 - 7788 - 3524 - 3569 - 7789 - 3604 - 7790 - 3614 - 7791 - 3627 - 7792 - 3658 - 3663 - 7793 - 3665 - 7794 - 3672 - 7795 - 3706 - 7475 - 3737 - 7796 - 3743 - 7980 - 4143 - 3752 - 3757 - 7797 - 3802 - 7798 - 3814 - 7799 - 3820 - 7800 - 3823 - 6453 - 7801 - 3847 - 7802 - 3849 - 7803 - 3851 - 7804 - 3869 - 7805 - 3899 - 7806 - 3903 -endcidrange - -100 begincidrange - 7476 - 3909 - 7807 - 3924 - 3945 - 7808 - 3988 - 7809 - 4036 - 7811 - 4040 - 7812 - 4056 - 6007 - 4061 - 7813 - 4064 - 4090 - 3751 - 4144 - 4184 - 7814 - 4213 - 7815 - 4223 - 7816 - 4227 - 7817 - 4229 - 4278 - 4372 - 7818 - 4388 - 7819 - 4398 - 7821 - 4434 - 7822 - 4447 - 4466 - 7823 - 4502 - 3063 - 4534 - 4560 - 7824 - 4589 - 7825 - 4627 - 4654 - 7826 - 4656 - 4748 - 4842 - 7828 - 4846 - 4936 - 7829 - 5000 - 7830 - 5012 - 1447 - 5024 - 5030 - 7831 - 5055 - 7832 - 5075 - 5124 - 7833 - 5161 - 7834 - 5166 - 3490 - 5180 - 7835 - 5199 - 3176 - 5201 - 7836 - 5208 - 5218 - 5312 - 5406 - 3181 - 5431 - 7837 - 5454 - 1535 - 5491 - 5500 - 5594 - 7839 - 5600 - 7840 - 5657 - 7477 - 5680 - 5688 - 7841 -endcidrange - -100 begincidrange - 5699 - 7842 - 5705 - 5782 - 7844 - 5793 - 2030 - 5854 - 3153 - 5856 - 7845 - 5861 - 5876 - 7846 - 5918 - 7847 - 5928 - 1492 - 5938 - 5970 - 7848 - 5995 - 4060 - 6008 - 7849 - 6038 - 7850 - 6048 - 6064 - 7851 - 6089 - 7852 - 6091 - 7853 - 6102 - 6158 - 7854 - 6196 - 6252 - 7855 - 6320 - 7856 - 6325 - 7857 - 6334 - 6346 - 7858 - 6366 - 7859 - 6373 - 7860 - 6430 - 6440 - 2293 - 6442 - 3845 - 6454 - 1440 - 6498 - 6534 - 3358 - 6538 - 7862 - 6541 - 7863 - 6563 - 7864 - 6613 - 6628 - 7865 - 6646 - 1550 - 6689 - 7866 - 6698 - 7867 - 6714 - 6722 - 2730 - 6767 - 7868 - 6795 - 7869 - 6806 - 6816 - 7870 - 6862 - 7871 - 6892 - 7872 - 6894 - 6910 - 7873 - 6919 - 7874 - 6939 - 7875 - 6965 - 7004 - 7098 -endcidrange - -25 begincidrange - 7878 - 7135 - 7879 - 7147 - 7880 - 7153 - 1841 - 7881 - 7183 - 7192 - 7286 - 7882 - 7299 - 7883 - 7314 - 1143 - 7884 - 7332 - 1321 - 7370 - 7380 - 7885 - 7429 - 7886 - 7473 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78-EUC-V b/Resources/cmap/78-EUC-V deleted file mode 100644 index 256403419ed..00000000000 --- a/Resources/cmap/78-EUC-V +++ /dev/null @@ -1,86 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (78-EUC-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (78-EUC-H) -%%BeginResource: CMap (78-EUC-V) -%%Title: (78-EUC-V Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/78-EUC-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /78-EUC-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25355] def - -/WMode 1 def - -27 begincidrange - 7887 - 7889 - 7891 - 7894 - 7899 - 7917 - 7918 - 7919 - 7920 - 7921 - 7922 - 7923 - 7924 - 7925 - 7926 - 7927 - 7928 - 7929 - 7930 - 7931 - 7932 - 7933 - 7934 - 7935 - 7936 - 7937 - 7938 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78-H b/Resources/cmap/78-H deleted file mode 100644 index f171e6e2f23..00000000000 --- a/Resources/cmap/78-H +++ /dev/null @@ -1,700 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (78-H) -%%Title: (78-H Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /78-H def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25345] def - -/WMode 0 def - -1 begincodespacerange - <2121> <7E7E> -endcodespacerange - -100 begincidrange -<2121> <217e> 633 -<2221> <222e> 727 -<2330> <2339> 780 -<2341> <235a> 790 -<2361> <237a> 816 -<2421> <2473> 842 -<2521> <2576> 925 -<2621> <2638> 1011 -<2641> <2658> 1035 -<2721> <2741> 1059 -<2751> <2771> 1092 -<3021> <3021> 1125 -<3022> <3022> 7633 -<3023> <3028> 1127 -<3029> <3029> 8266 -<302a> <3031> 1134 -<3032> <3032> 7961 -<3033> <3033> 7330 -<3034> <303a> 1144 -<303b> <303b> 7634 -<303c> <306d> 1152 -<306e> <306e> 7635 -<306f> <3072> 1203 -<3073> <3073> 7636 -<3074> <307b> 1208 -<307c> <307c> 7637 -<307d> <307e> 1217 -<3121> <3129> 1219 -<312a> <312a> 7638 -<312b> <3134> 1229 -<3135> <3135> 7639 -<3136> <3138> 1240 -<3139> <3139> 7640 -<313a> <313c> 1244 -<313d> <313d> 7642 -<313e> <3141> 1248 -<3142> <3142> 7643 -<3143> <316a> 1253 -<316b> <316b> 7644 -<316c> <317e> 1294 -<3221> <3227> 1313 -<3228> <3228> 7645 -<3229> <3229> 7369 -<322a> <322a> 7646 -<322b> <325f> 1323 -<3260> <3260> 7647 -<3261> <3279> 1377 -<327a> <327a> 7648 -<327b> <327c> 1403 -<327d> <327d> 7649 -<327e> <327e> 1406 -<3321> <3321> 1407 -<3322> <3322> 7650 -<3323> <3341> 1409 -<3342> <3342> 6497 -<3343> <3348> 1441 -<3349> <3349> 5023 -<334a> <3364> 1448 -<3365> <3365> 7651 -<3366> <336a> 1476 -<336b> <336b> 7652 -<336c> <3372> 1482 -<3373> <3373> 7653 -<3374> <3375> 1490 -<3376> <3376> 5937 -<3377> <3379> 1493 -<337a> <337a> 7654 -<337b> <337e> 1497 -<3421> <3441> 1501 -<3442> <3442> 7655 -<3443> <3443> 5490 -<3444> <344c> 1536 -<344d> <344d> 7656 -<344e> <3451> 1546 -<3452> <3452> 6688 -<3453> <3464> 1551 -<3465> <3465> 7657 -<3466> <347e> 1570 -<3521> <352a> 1595 -<352b> <352b> 7658 -<352c> <353f> 1606 -<3540> <3540> 7659 -<3541> <357e> 1627 -<3621> <3621> 1689 -<3622> <3622> 7660 -<3623> <3629> 1691 -<362a> <362a> 7661 -<362b> <3645> 1699 -<3646> <3646> 7474 -<3647> <364e> 1727 -<364f> <364f> 7662 -<3650> <366c> 1736 -<366d> <366d> 7663 -<366e> <3673> 1766 -<3674> <3674> 7664 -<3675> <367a> 1773 -<367b> <367b> 7665 -<367c> <367c> 1780 -<367d> <367d> 7666 -<367e> <367e> 1782 -endcidrange - -100 begincidrange -<3721> <3723> 1783 -<3724> <3724> 7667 -<3725> <3736> 1787 -<3737> <3737> 7668 -<3738> <3744> 1806 -<3745> <3745> 7669 -<3746> <374d> 1820 -<374e> <374e> 7670 -<374f> <3751> 1829 -<3752> <3752> 7671 -<3753> <3754> 1833 -<3755> <3755> 7672 -<3756> <375a> 1836 -<375b> <375b> 7181 -<375c> <3763> 1842 -<3764> <3764> 7673 -<3765> <3770> 1851 -<3771> <3771> 7674 -<3772> <3778> 1864 -<3779> <3779> 7675 -<377a> <377d> 1872 -<377e> <377e> 7676 -<3821> <3833> 1877 -<3834> <3834> 7677 -<3835> <3840> 1897 -<3841> <3841> 7678 -<3842> <387e> 1910 -<3921> <392a> 1971 -<392b> <392b> 7679 -<392c> <3936> 1982 -<3937> <3937> 7680 -<3938> <3941> 1994 -<3942> <3942> 7681 -<3943> <395b> 2005 -<395c> <395c> 5853 -<395d> <396c> 2031 -<396d> <396d> 7682 -<396e> <3973> 2048 -<3974> <3974> 7683 -<3975> <3978> 2055 -<3979> <3979> 7684 -<397a> <397e> 2060 -<3a21> <3a52> 2065 -<3a53> <3a53> 7685 -<3a54> <3a66> 2116 -<3a67> <3a67> 7686 -<3a68> <3a73> 2136 -<3a74> <3a74> 7687 -<3a75> <3a7e> 2149 -<3b21> <3b26> 2159 -<3b27> <3b27> 7688 -<3b28> <3b29> 2166 -<3b2a> <3b2a> 7689 -<3b2b> <3b2b> 2169 -<3b2c> <3b2c> 7690 -<3b2d> <3b38> 2171 -<3b39> <3b39> 7691 -<3b3a> <3b7e> 2184 -<3c21> <3c47> 2253 -<3c48> <3c48> 7693 -<3c49> <3c49> 6441 -<3c4a> <3c56> 2294 -<3c57> <3c57> 7694 -<3c58> <3c5c> 2308 -<3c5d> <3c5e> 7695 -<3c5f> <3c7e> 2315 -<3d21> <3d2a> 2347 -<3d2b> <3d2b> 7697 -<3d2c> <3d35> 2358 -<3d36> <3d36> 7698 -<3d37> <3d6b> 2369 -<3d6c> <3d6d> 7699 -<3d6e> <3d71> 2424 -<3d72> <3d73> 7701 -<3d74> <3d7e> 2430 -<3e21> <3e24> 2441 -<3e25> <3e25> 7703 -<3e26> <3e32> 2446 -<3e33> <3e33> 7704 -<3e34> <3e3e> 2460 -<3e3f> <3e3f> 7705 -<3e40> <3e54> 2472 -<3e55> <3e55> 7706 -<3e56> <3e5e> 2494 -<3e5f> <3e5f> 7707 -<3e60> <3e63> 2504 -<3e64> <3e64> 7708 -<3e65> <3e7e> 2509 -<3f21> <3f29> 2535 -<3f2a> <3f2a> 7709 -<3f2b> <3f58> 2545 -<3f59> <3f59> 7710 -<3f5a> <3f5f> 2592 -<3f60> <3f60> 7711 -<3f61> <3f68> 2599 -<3f69> <3f69> 7712 -<3f6a> <3f7e> 2608 -<4021> <4021> 2629 -<4022> <4022> 7713 -<4023> <4041> 2631 -endcidrange - -100 begincidrange -<4042> <4042> 7714 -<4043> <4065> 2663 -<4066> <4066> 7715 -<4067> <4070> 2699 -<4071> <4072> 7716 -<4073> <4078> 2711 -<4079> <407a> 7718 -<407b> <407e> 2719 -<4121> <4126> 2723 -<4127> <4127> 7720 -<4128> <4128> 6766 -<4129> <4138> 2731 -<4139> <4139> 7721 -<413a> <414b> 2748 -<414c> <414c> 7722 -<414d> <414e> 2767 -<414f> <414f> 7723 -<4150> <415e> 2770 -<415f> <415f> 7724 -<4160> <4168> 2786 -<4169> <4169> 7725 -<416a> <417e> 2796 -<4221> <423c> 2817 -<423d> <423d> 7726 -<423e> <424c> 2846 -<424d> <424d> 7727 -<424e> <425b> 2862 -<425c> <425c> 7728 -<425d> <4262> 2877 -<4263> <4263> 7729 -<4264> <426e> 2884 -<426f> <426f> 7730 -<4270> <4274> 2896 -<4275> <4276> 7731 -<4277> <427c> 2903 -<427d> <427d> 7733 -<427e> <427e> 2910 -<4321> <4326> 2911 -<4327> <4327> 7734 -<4328> <4328> 2918 -<4329> <432a> 7735 -<432b> <432c> 2921 -<432d> <432e> 7737 -<432f> <433c> 2925 -<433d> <433d> 7739 -<433e> <436f> 2940 -<4370> <4370> 7740 -<4371> <4374> 2991 -<4375> <4375> 7741 -<4376> <437b> 2996 -<437c> <437c> 7742 -<437d> <437e> 3003 -<4421> <443c> 3005 -<443d> <443d> 7743 -<443e> <4447> 3034 -<4448> <4448> 7744 -<4449> <4449> 3045 -<444a> <444a> 7745 -<444b> <444c> 3047 -<444d> <444d> 7746 -<444e> <444e> 3050 -<444f> <444f> 7747 -<4450> <4453> 3052 -<4454> <4454> 8267 -<4455> <445a> 3057 -<445b> <445b> 4533 -<445c> <447e> 3064 -<4521> <4521> 3099 -<4522> <4522> 7748 -<4523> <4526> 3101 -<4527> <4527> 7749 -<4528> <452d> 3106 -<452e> <452e> 7750 -<452f> <4535> 3113 -<4536> <4536> 7751 -<4537> <453e> 3121 -<453f> <453f> 7752 -<4540> <4547> 3130 -<4548> <4548> 7753 -<4549> <454a> 3139 -<454b> <454b> 7754 -<454c> <4550> 3142 -<4551> <4552> 7755 -<4553> <4556> 3149 -<4557> <4557> 5855 -<4558> <4563> 3154 -<4564> <4564> 7757 -<4565> <456d> 3167 -<456e> <456e> 5200 -<456f> <4572> 3177 -<4573> <4573> 5430 -<4574> <4577> 3182 -<4578> <4578> 7758 -<4579> <457e> 3187 -<4621> <463d> 3193 -<463e> <463e> 7759 -<463f> <4641> 3223 -<4642> <4642> 7760 -<4643> <4653> 3227 -<4654> <4655> 7761 -endcidrange - -100 begincidrange -<4656> <465a> 3246 -<465b> <465c> 7763 -<465d> <4660> 3253 -<4661> <4661> 7765 -<4662> <4665> 3258 -<4666> <4667> 7766 -<4668> <4669> 3264 -<466a> <466a> 7768 -<466b> <4675> 3267 -<4676> <4676> 6893 -<4677> <467e> 3279 -<4721> <4728> 3287 -<4729> <4729> 7769 -<472a> <4738> 3296 -<4739> <4739> 7770 -<473a> <4756> 3312 -<4757> <4757> 7771 -<4758> <4766> 3342 -<4767> <4767> 7772 -<4768> <4768> 6537 -<4769> <4769> 7773 -<476a> <476c> 3360 -<476d> <476d> 7774 -<476e> <477e> 3364 -<4821> <4823> 3381 -<4824> <4824> 7775 -<4825> <482d> 3385 -<482e> <482e> 7776 -<482f> <482f> 3395 -<4830> <4830> 7777 -<4831> <4853> 3397 -<4854> <4854> 7778 -<4855> <4861> 3433 -<4862> <4862> 7779 -<4863> <4874> 3447 -<4875> <4875> 7780 -<4876> <487e> 3466 -<4921> <4921> 3475 -<4922> <4923> 7781 -<4924> <492e> 3478 -<492f> <492f> 7783 -<4930> <4930> 5179 -<4931> <4931> 3491 -<4932> <4932> 7784 -<4933> <4934> 3493 -<4935> <4935> 7785 -<4936> <493f> 3496 -<4940> <4940> 7786 -<4941> <494d> 3507 -<494e> <494e> 7787 -<494f> <4950> 3521 -<4951> <4951> 7788 -<4952> <497e> 3524 -<4a21> <4a42> 3569 -<4a43> <4a43> 7789 -<4a44> <4a4c> 3604 -<4a4d> <4a4d> 7790 -<4a4e> <4a59> 3614 -<4a5a> <4a5a> 7791 -<4a5b> <4a78> 3627 -<4a79> <4a79> 7792 -<4a7a> <4a7e> 3658 -<4b21> <4b21> 3663 -<4b22> <4b22> 7793 -<4b23> <4b28> 3665 -<4b29> <4b29> 7794 -<4b2a> <4b4a> 3672 -<4b4b> <4b4b> 7795 -<4b4c> <4b69> 3706 -<4b6a> <4b6a> 7475 -<4b6b> <4b6f> 3737 -<4b70> <4b70> 7796 -<4b71> <4b77> 3743 -<4b78> <4b78> 7980 -<4b79> <4b79> 4143 -<4b7a> <4b7e> 3752 -<4c21> <4c4c> 3757 -<4c4d> <4c4d> 7797 -<4c4e> <4c58> 3802 -<4c59> <4c59> 7798 -<4c5a> <4c5e> 3814 -<4c5f> <4c5f> 7799 -<4c60> <4c61> 3820 -<4c62> <4c62> 7800 -<4c63> <4c78> 3823 -<4c79> <4c79> 6453 -<4c7a> <4c7a> 7801 -<4c7b> <4c7b> 3847 -<4c7c> <4c7c> 7802 -<4c7d> <4c7d> 3849 -<4c7e> <4c7e> 7803 -<4d21> <4d31> 3851 -<4d32> <4d32> 7804 -<4d33> <4d4f> 3869 -<4d50> <4d50> 7805 -<4d51> <4d53> 3899 -<4d54> <4d54> 7806 -<4d55> <4d59> 3903 -<4d5a> <4d5a> 7476 -<4d5b> <4d68> 3909 -endcidrange - -100 begincidrange -<4d69> <4d69> 7807 -<4d6a> <4d7e> 3924 -<4e21> <4e4a> 3945 -<4e4b> <4e4b> 7808 -<4e4c> <4e79> 3988 -<4e7a> <4e7b> 7809 -<4e7c> <4e7e> 4036 -<4f21> <4f21> 7811 -<4f22> <4f30> 4040 -<4f31> <4f31> 7812 -<4f32> <4f35> 4056 -<4f36> <4f36> 6007 -<4f37> <4f38> 4061 -<4f39> <4f39> 7813 -<4f3a> <4f53> 4064 -<5021> <5055> 4090 -<5056> <5056> 3751 -<5057> <507e> 4144 -<5121> <513c> 4184 -<513d> <513d> 7814 -<513e> <5146> 4213 -<5147> <5147> 7815 -<5148> <514a> 4223 -<514b> <514b> 7816 -<514c> <514c> 4227 -<514d> <514d> 7817 -<514e> <517e> 4229 -<5221> <527e> 4278 -<5321> <532f> 4372 -<5330> <5330> 7818 -<5331> <5339> 4388 -<533a> <533a> 7819 -<533b> <535d> 4398 -<535e> <535e> 7821 -<535f> <536a> 4434 -<536b> <536b> 7822 -<536c> <537e> 4447 -<5421> <5443> 4466 -<5444> <5444> 7823 -<5445> <5463> 4502 -<5464> <5464> 3063 -<5465> <547e> 4534 -<5521> <553c> 4560 -<553d> <553d> 7824 -<553e> <5562> 4589 -<5563> <5563> 7825 -<5564> <557e> 4627 -<5621> <5621> 4654 -<5622> <5622> 7826 -<5623> <567e> 4656 -<5721> <577e> 4748 -<5821> <5823> 4842 -<5824> <5824> 7828 -<5825> <587e> 4846 -<5921> <595f> 4936 -<5960> <5960> 7829 -<5961> <596b> 5000 -<596c> <596c> 7830 -<596d> <5977> 5012 -<5978> <5978> 1447 -<5979> <597e> 5024 -<5a21> <5a38> 5030 -<5a39> <5a39> 7831 -<5a3a> <5a4c> 5055 -<5a4d> <5a4d> 7832 -<5a4e> <5a7e> 5075 -<5b21> <5b44> 5124 -<5b45> <5b45> 7833 -<5b46> <5b49> 5161 -<5b4a> <5b4a> 7834 -<5b4b> <5b57> 5166 -<5b58> <5b58> 3490 -<5b59> <5b6a> 5180 -<5b6b> <5b6b> 7835 -<5b6c> <5b6c> 5199 -<5b6d> <5b6d> 3176 -<5b6e> <5b73> 5201 -<5b74> <5b74> 7836 -<5b75> <5b7e> 5208 -<5c21> <5c7e> 5218 -<5d21> <5d7e> 5312 -<5e21> <5e38> 5406 -<5e39> <5e39> 3181 -<5e3a> <5e4f> 5431 -<5e50> <5e50> 7837 -<5e51> <5e74> 5454 -<5e75> <5e75> 1535 -<5e76> <5e7e> 5491 -<5f21> <5f7e> 5500 -<6021> <6025> 5594 -<6026> <6026> 7839 -<6027> <605e> 5600 -<605f> <605f> 7840 -<6060> <6075> 5657 -<6076> <6076> 7477 -<6077> <607e> 5680 -<6121> <612a> 5688 -<612b> <612b> 7841 -<612c> <612f> 5699 -<6130> <6131> 7842 -endcidrange - -100 begincidrange -<6132> <617e> 5705 -<6221> <622a> 5782 -<622b> <622b> 7844 -<622c> <6267> 5793 -<6268> <6268> 2030 -<6269> <6269> 5854 -<626a> <626a> 3153 -<626b> <626e> 5856 -<626f> <626f> 7845 -<6270> <627e> 5861 -<6321> <6349> 5876 -<634a> <634a> 7846 -<634b> <6353> 5918 -<6354> <6354> 7847 -<6355> <635d> 5928 -<635e> <635e> 1492 -<635f> <637e> 5938 -<6421> <6438> 5970 -<6439> <6439> 7848 -<643a> <6445> 5995 -<6446> <6446> 4060 -<6447> <6463> 6008 -<6464> <6464> 7849 -<6465> <646d> 6038 -<646e> <646e> 7850 -<646f> <647e> 6048 -<6521> <6538> 6064 -<6539> <6539> 7851 -<653a> <653a> 6089 -<653b> <653b> 7852 -<653c> <6545> 6091 -<6546> <6546> 7853 -<6547> <657e> 6102 -<6621> <6645> 6158 -<6646> <6646> 7854 -<6647> <667e> 6196 -<6721> <6763> 6252 -<6764> <6764> 7855 -<6765> <6768> 6320 -<6769> <6769> 7856 -<676a> <6771> 6325 -<6772> <6772> 7857 -<6773> <677e> 6334 -<6821> <6833> 6346 -<6834> <6834> 7858 -<6835> <683a> 6366 -<683b> <683b> 7859 -<683c> <6873> 6373 -<6874> <6874> 7860 -<6875> <687e> 6430 -<6921> <6921> 6440 -<6922> <6922> 2293 -<6923> <692d> 6442 -<692e> <692e> 3845 -<692f> <6959> 6454 -<695a> <695a> 1440 -<695b> <697e> 6498 -<6a21> <6a23> 6534 -<6a24> <6a24> 3358 -<6a25> <6a26> 6538 -<6a27> <6a27> 7862 -<6a28> <6a3c> 6541 -<6a3d> <6a3d> 7863 -<6a3e> <6a6e> 6563 -<6a6f> <6a6f> 7864 -<6a70> <6a7e> 6613 -<6b21> <6b31> 6628 -<6b32> <6b32> 7865 -<6b33> <6b5c> 6646 -<6b5d> <6b5d> 1550 -<6b5e> <6b65> 6689 -<6b66> <6b66> 7866 -<6b67> <6b75> 6698 -<6b76> <6b76> 7867 -<6b77> <6b7e> 6714 -<6c21> <6c4c> 6722 -<6c4d> <6c4d> 2730 -<6c4e> <6c68> 6767 -<6c69> <6c69> 7868 -<6c6a> <6c73> 6795 -<6c74> <6c74> 7869 -<6c75> <6c7e> 6806 -<6d21> <6d4d> 6816 -<6d4e> <6d4e> 7870 -<6d4f> <6d6b> 6862 -<6d6c> <6d6c> 7871 -<6d6d> <6d6d> 6892 -<6d6e> <6d6e> 7872 -<6d6f> <6d7e> 6894 -<6e21> <6e28> 6910 -<6e29> <6e29> 7873 -<6e2a> <6e3c> 6919 -<6e3d> <6e3d> 7874 -<6e3e> <6e56> 6939 -<6e57> <6e57> 7875 -<6e58> <6e7e> 6965 -<6f21> <6f7e> 7004 -<7021> <7044> 7098 -<7045> <7045> 7878 -<7046> <7050> 7135 -endcidrange - -23 begincidrange -<7051> <7051> 7879 -<7052> <7056> 7147 -<7057> <7057> 7880 -<7058> <7073> 7153 -<7074> <7074> 1841 -<7075> <7075> 7881 -<7076> <707e> 7183 -<7121> <717e> 7192 -<7221> <722c> 7286 -<722d> <722d> 7882 -<722e> <723b> 7299 -<723c> <723c> 7883 -<723d> <724c> 7314 -<724d> <724d> 1143 -<724e> <724e> 7884 -<724f> <7273> 7332 -<7274> <7274> 1321 -<7275> <727e> 7370 -<7321> <7350> 7380 -<7351> <7351> 7885 -<7352> <737c> 7429 -<737d> <737d> 7886 -<737e> <737e> 7473 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78-RKSJ-H b/Resources/cmap/78-RKSJ-H deleted file mode 100644 index bdfa403ae35..00000000000 --- a/Resources/cmap/78-RKSJ-H +++ /dev/null @@ -1,710 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (78-RKSJ-H) -%%Title: (78-RKSJ-H Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /78-RKSJ-H def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25346] def - -/WMode 0 def - -4 begincodespacerange - <00> <80> - <8140> <9FFC> - - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 231 -endnotdefrange - -100 begincidrange -<20> <7e> 231 -<8140> <817e> 633 -<8180> <81ac> 696 -<824f> <8258> 780 -<8260> <8279> 790 -<8281> <829a> 816 -<829f> <82f1> 842 -<8340> <837e> 925 -<8380> <8396> 988 -<839f> <83b6> 1011 -<83bf> <83d6> 1035 -<8440> <8460> 1059 -<8470> <847e> 1092 -<8480> <8491> 1107 -<889f> <889f> 1125 -<88a0> <88a0> 7633 -<88a1> <88a6> 1127 -<88a7> <88a7> 8266 -<88a8> <88af> 1134 -<88b0> <88b0> 7961 -<88b1> <88b1> 7330 -<88b2> <88b8> 1144 -<88b9> <88b9> 7634 -<88ba> <88eb> 1152 -<88ec> <88ec> 7635 -<88ed> <88f0> 1203 -<88f1> <88f1> 7636 -<88f2> <88f9> 1208 -<88fa> <88fa> 7637 -<88fb> <88fc> 1217 -<8940> <8948> 1219 -<8949> <8949> 7638 -<894a> <8953> 1229 -<8954> <8954> 7639 -<8955> <8957> 1240 -<8958> <8958> 7640 -<8959> <895b> 1244 -<895c> <895c> 7642 -<895d> <8960> 1248 -<8961> <8961> 7643 -<8962> <897e> 1253 -<8980> <898a> 1282 -<898b> <898b> 7644 -<898c> <89a5> 1294 -<89a6> <89a6> 7645 -<89a7> <89a7> 7369 -<89a8> <89a8> 7646 -<89a9> <89dd> 1323 -<89de> <89de> 7647 -<89df> <89f7> 1377 -<89f8> <89f8> 7648 -<89f9> <89fa> 1403 -<89fb> <89fb> 7649 -<89fc> <89fc> 1406 -<8a40> <8a40> 1407 -<8a41> <8a41> 7650 -<8a42> <8a60> 1409 -<8a61> <8a61> 6497 -<8a62> <8a67> 1441 -<8a68> <8a68> 5023 -<8a69> <8a7e> 1448 -<8a80> <8a84> 1470 -<8a85> <8a85> 7651 -<8a86> <8a8a> 1476 -<8a8b> <8a8b> 7652 -<8a8c> <8a92> 1482 -<8a93> <8a93> 7653 -<8a94> <8a95> 1490 -<8a96> <8a96> 5937 -<8a97> <8a99> 1493 -<8a9a> <8a9a> 7654 -<8a9b> <8abf> 1497 -<8ac0> <8ac0> 7655 -<8ac1> <8ac1> 5490 -<8ac2> <8aca> 1536 -<8acb> <8acb> 7656 -<8acc> <8acf> 1546 -<8ad0> <8ad0> 6688 -<8ad1> <8ae2> 1551 -<8ae3> <8ae3> 7657 -<8ae4> <8afc> 1570 -<8b40> <8b49> 1595 -<8b4a> <8b4a> 7658 -<8b4b> <8b5e> 1606 -<8b5f> <8b5f> 7659 -<8b60> <8b7e> 1627 -<8b80> <8b9f> 1658 -<8ba0> <8ba0> 7660 -<8ba1> <8ba7> 1691 -<8ba8> <8ba8> 7661 -<8ba9> <8bc3> 1699 -<8bc4> <8bc4> 7474 -<8bc5> <8bcc> 1727 -<8bcd> <8bcd> 7662 -<8bce> <8bea> 1736 -<8beb> <8beb> 7663 -<8bec> <8bf1> 1766 -<8bf2> <8bf2> 7664 -<8bf3> <8bf8> 1773 -<8bf9> <8bf9> 7665 -endcidrange - -100 begincidrange -<8bfa> <8bfa> 1780 -<8bfb> <8bfb> 7666 -<8bfc> <8bfc> 1782 -<8c40> <8c42> 1783 -<8c43> <8c43> 7667 -<8c44> <8c55> 1787 -<8c56> <8c56> 7668 -<8c57> <8c63> 1806 -<8c64> <8c64> 7669 -<8c65> <8c6c> 1820 -<8c6d> <8c6d> 7670 -<8c6e> <8c70> 1829 -<8c71> <8c71> 7671 -<8c72> <8c73> 1833 -<8c74> <8c74> 7672 -<8c75> <8c79> 1836 -<8c7a> <8c7a> 7181 -<8c7b> <8c7e> 1842 -<8c80> <8c83> 1846 -<8c84> <8c84> 7673 -<8c85> <8c90> 1851 -<8c91> <8c91> 7674 -<8c92> <8c98> 1864 -<8c99> <8c99> 7675 -<8c9a> <8c9d> 1872 -<8c9e> <8c9e> 7676 -<8c9f> <8cb1> 1877 -<8cb2> <8cb2> 7677 -<8cb3> <8cbe> 1897 -<8cbf> <8cbf> 7678 -<8cc0> <8cfc> 1910 -<8d40> <8d49> 1971 -<8d4a> <8d4a> 7679 -<8d4b> <8d55> 1982 -<8d56> <8d56> 7680 -<8d57> <8d60> 1994 -<8d61> <8d61> 7681 -<8d62> <8d7a> 2005 -<8d7b> <8d7b> 5853 -<8d7c> <8d7e> 2031 -<8d80> <8d8c> 2034 -<8d8d> <8d8d> 7682 -<8d8e> <8d93> 2048 -<8d94> <8d94> 7683 -<8d95> <8d98> 2055 -<8d99> <8d99> 7684 -<8d9a> <8dd0> 2060 -<8dd1> <8dd1> 7685 -<8dd2> <8de4> 2116 -<8de5> <8de5> 7686 -<8de6> <8df1> 2136 -<8df2> <8df2> 7687 -<8df3> <8dfc> 2149 -<8e40> <8e45> 2159 -<8e46> <8e46> 7688 -<8e47> <8e48> 2166 -<8e49> <8e49> 7689 -<8e4a> <8e4a> 2169 -<8e4b> <8e4b> 7690 -<8e4c> <8e57> 2171 -<8e58> <8e58> 7691 -<8e59> <8e7e> 2184 -<8e80> <8ec5> 2222 -<8ec6> <8ec6> 7693 -<8ec7> <8ec7> 6441 -<8ec8> <8ed4> 2294 -<8ed5> <8ed5> 7694 -<8ed6> <8eda> 2308 -<8edb> <8edc> 7695 -<8edd> <8efc> 2315 -<8f40> <8f49> 2347 -<8f4a> <8f4a> 7697 -<8f4b> <8f54> 2358 -<8f55> <8f55> 7698 -<8f56> <8f7e> 2369 -<8f80> <8f8b> 2410 -<8f8c> <8f8d> 7699 -<8f8e> <8f91> 2424 -<8f92> <8f93> 7701 -<8f94> <8fa2> 2430 -<8fa3> <8fa3> 7703 -<8fa4> <8fb0> 2446 -<8fb1> <8fb1> 7704 -<8fb2> <8fbc> 2460 -<8fbd> <8fbd> 7705 -<8fbe> <8fd2> 2472 -<8fd3> <8fd3> 7706 -<8fd4> <8fdc> 2494 -<8fdd> <8fdd> 7707 -<8fde> <8fe1> 2504 -<8fe2> <8fe2> 7708 -<8fe3> <8ffc> 2509 -<9040> <9048> 2535 -<9049> <9049> 7709 -<904a> <9077> 2545 -<9078> <9078> 7710 -<9079> <907e> 2592 -<9080> <9080> 7711 -<9081> <9088> 2599 -<9089> <9089> 7712 -endcidrange - -100 begincidrange -<908a> <909f> 2608 -<90a0> <90a0> 7713 -<90a1> <90bf> 2631 -<90c0> <90c0> 7714 -<90c1> <90e3> 2663 -<90e4> <90e4> 7715 -<90e5> <90ee> 2699 -<90ef> <90f0> 7716 -<90f1> <90f6> 2711 -<90f7> <90f8> 7718 -<90f9> <90fc> 2719 -<9140> <9145> 2723 -<9146> <9146> 7720 -<9147> <9147> 6766 -<9148> <9157> 2731 -<9158> <9158> 7721 -<9159> <916a> 2748 -<916b> <916b> 7722 -<916c> <916d> 2767 -<916e> <916e> 7723 -<916f> <917d> 2770 -<917e> <917e> 7724 -<9180> <9188> 2786 -<9189> <9189> 7725 -<918a> <91ba> 2796 -<91bb> <91bb> 7726 -<91bc> <91ca> 2846 -<91cb> <91cb> 7727 -<91cc> <91d9> 2862 -<91da> <91da> 7728 -<91db> <91e0> 2877 -<91e1> <91e1> 7729 -<91e2> <91ec> 2884 -<91ed> <91ed> 7730 -<91ee> <91f2> 2896 -<91f3> <91f4> 7731 -<91f5> <91fa> 2903 -<91fb> <91fb> 7733 -<91fc> <91fc> 2910 -<9240> <9245> 2911 -<9246> <9246> 7734 -<9247> <9247> 2918 -<9248> <9249> 7735 -<924a> <924b> 2921 -<924c> <924d> 7737 -<924e> <925b> 2925 -<925c> <925c> 7739 -<925d> <927e> 2940 -<9280> <928f> 2974 -<9290> <9290> 7740 -<9291> <9294> 2991 -<9295> <9295> 7741 -<9296> <929b> 2996 -<929c> <929c> 7742 -<929d> <92ba> 3003 -<92bb> <92bb> 7743 -<92bc> <92c5> 3034 -<92c6> <92c6> 7744 -<92c7> <92c7> 3045 -<92c8> <92c8> 7745 -<92c9> <92ca> 3047 -<92cb> <92cb> 7746 -<92cc> <92cc> 3050 -<92cd> <92cd> 7747 -<92ce> <92d1> 3052 -<92d2> <92d2> 8267 -<92d3> <92d8> 3057 -<92d9> <92d9> 4533 -<92da> <92fc> 3064 -<9340> <9340> 3099 -<9341> <9341> 7748 -<9342> <9345> 3101 -<9346> <9346> 7749 -<9347> <934c> 3106 -<934d> <934d> 7750 -<934e> <9354> 3113 -<9355> <9355> 7751 -<9356> <935d> 3121 -<935e> <935e> 7752 -<935f> <9366> 3130 -<9367> <9367> 7753 -<9368> <9369> 3139 -<936a> <936a> 7754 -<936b> <936f> 3142 -<9370> <9371> 7755 -<9372> <9375> 3149 -<9376> <9376> 5855 -<9377> <937e> 3154 -<9380> <9383> 3162 -<9384> <9384> 7757 -<9385> <938d> 3167 -<938e> <938e> 5200 -<938f> <9392> 3177 -<9393> <9393> 5430 -<9394> <9397> 3182 -<9398> <9398> 7758 -<9399> <93bb> 3187 -<93bc> <93bc> 7759 -<93bd> <93bf> 3223 -<93c0> <93c0> 7760 -endcidrange - -100 begincidrange -<93c1> <93d1> 3227 -<93d2> <93d3> 7761 -<93d4> <93d8> 3246 -<93d9> <93da> 7763 -<93db> <93de> 3253 -<93df> <93df> 7765 -<93e0> <93e3> 3258 -<93e4> <93e5> 7766 -<93e6> <93e7> 3264 -<93e8> <93e8> 7768 -<93e9> <93f3> 3267 -<93f4> <93f4> 6893 -<93f5> <93fc> 3279 -<9440> <9447> 3287 -<9448> <9448> 7769 -<9449> <9457> 3296 -<9458> <9458> 7770 -<9459> <9475> 3312 -<9476> <9476> 7771 -<9477> <947e> 3342 -<9480> <9486> 3350 -<9487> <9487> 7772 -<9488> <9488> 6537 -<9489> <9489> 7773 -<948a> <948c> 3360 -<948d> <948d> 7774 -<948e> <94a1> 3364 -<94a2> <94a2> 7775 -<94a3> <94ab> 3385 -<94ac> <94ac> 7776 -<94ad> <94ad> 3395 -<94ae> <94ae> 7777 -<94af> <94d1> 3397 -<94d2> <94d2> 7778 -<94d3> <94df> 3433 -<94e0> <94e0> 7779 -<94e1> <94f2> 3447 -<94f3> <94f3> 7780 -<94f4> <94fc> 3466 -<9540> <9540> 3475 -<9541> <9542> 7781 -<9543> <954d> 3478 -<954e> <954e> 7783 -<954f> <954f> 5179 -<9550> <9550> 3491 -<9551> <9551> 7784 -<9552> <9553> 3493 -<9554> <9554> 7785 -<9555> <955e> 3496 -<955f> <955f> 7786 -<9560> <956c> 3507 -<956d> <956d> 7787 -<956e> <956f> 3521 -<9570> <9570> 7788 -<9571> <957e> 3524 -<9580> <95c0> 3538 -<95c1> <95c1> 7789 -<95c2> <95ca> 3604 -<95cb> <95cb> 7790 -<95cc> <95d7> 3614 -<95d8> <95d8> 7791 -<95d9> <95f6> 3627 -<95f7> <95f7> 7792 -<95f8> <95fc> 3658 -<9640> <9640> 3663 -<9641> <9641> 7793 -<9642> <9647> 3665 -<9648> <9648> 7794 -<9649> <9669> 3672 -<966a> <966a> 7795 -<966b> <967e> 3706 -<9680> <9689> 3726 -<968a> <968a> 7475 -<968b> <968f> 3737 -<9690> <9690> 7796 -<9691> <9697> 3743 -<9698> <9698> 7980 -<9699> <9699> 4143 -<969a> <96ca> 3752 -<96cb> <96cb> 7797 -<96cc> <96d6> 3802 -<96d7> <96d7> 7798 -<96d8> <96dc> 3814 -<96dd> <96dd> 7799 -<96de> <96df> 3820 -<96e0> <96e0> 7800 -<96e1> <96f6> 3823 -<96f7> <96f7> 6453 -<96f8> <96f8> 7801 -<96f9> <96f9> 3847 -<96fa> <96fa> 7802 -<96fb> <96fb> 3849 -<96fc> <96fc> 7803 -<9740> <9750> 3851 -<9751> <9751> 7804 -<9752> <976e> 3869 -<976f> <976f> 7805 -<9770> <9772> 3899 -<9773> <9773> 7806 -<9774> <9778> 3903 -endcidrange - -100 begincidrange -<9779> <9779> 7476 -<977a> <977e> 3909 -<9780> <9788> 3914 -<9789> <9789> 7807 -<978a> <97c8> 3924 -<97c9> <97c9> 7808 -<97ca> <97f7> 3988 -<97f8> <97f9> 7809 -<97fa> <97fc> 4036 -<9840> <9840> 7811 -<9841> <984f> 4040 -<9850> <9850> 7812 -<9851> <9854> 4056 -<9855> <9855> 6007 -<9856> <9857> 4061 -<9858> <9858> 7813 -<9859> <9872> 4064 -<989f> <98d3> 4090 -<98d4> <98d4> 3751 -<98d5> <98fc> 4144 -<9940> <995b> 4184 -<995c> <995c> 7814 -<995d> <9965> 4213 -<9966> <9966> 7815 -<9967> <9969> 4223 -<996a> <996a> 7816 -<996b> <996b> 4227 -<996c> <996c> 7817 -<996d> <997e> 4229 -<9980> <99fc> 4247 -<9a40> <9a4e> 4372 -<9a4f> <9a4f> 7818 -<9a50> <9a58> 4388 -<9a59> <9a59> 7819 -<9a5a> <9a7c> 4398 -<9a7d> <9a7d> 7821 -<9a7e> <9a7e> 4434 -<9a80> <9a8a> 4435 -<9a8b> <9a8b> 7822 -<9a8c> <9ac1> 4447 -<9ac2> <9ac2> 7823 -<9ac3> <9ae1> 4502 -<9ae2> <9ae2> 3063 -<9ae3> <9afc> 4534 -<9b40> <9b5b> 4560 -<9b5c> <9b5c> 7824 -<9b5d> <9b7e> 4589 -<9b80> <9b82> 4623 -<9b83> <9b83> 7825 -<9b84> <9b9f> 4627 -<9ba0> <9ba0> 7826 -<9ba1> <9bfc> 4656 -<9c40> <9c7e> 4748 -<9c80> <9ca1> 4811 -<9ca2> <9ca2> 7828 -<9ca3> <9cfc> 4846 -<9d40> <9d7e> 4936 -<9d80> <9d80> 7829 -<9d81> <9d8b> 5000 -<9d8c> <9d8c> 7830 -<9d8d> <9d97> 5012 -<9d98> <9d98> 1447 -<9d99> <9db6> 5024 -<9db7> <9db7> 7831 -<9db8> <9dca> 5055 -<9dcb> <9dcb> 7832 -<9dcc> <9dfc> 5075 -<9e40> <9e63> 5124 -<9e64> <9e64> 7833 -<9e65> <9e68> 5161 -<9e69> <9e69> 7834 -<9e6a> <9e76> 5166 -<9e77> <9e77> 3490 -<9e78> <9e7e> 5180 -<9e80> <9e8a> 5187 -<9e8b> <9e8b> 7835 -<9e8c> <9e8c> 5199 -<9e8d> <9e8d> 3176 -<9e8e> <9e93> 5201 -<9e94> <9e94> 7836 -<9e95> <9efc> 5208 -<9f40> <9f7e> 5312 -<9f80> <9fb6> 5375 -<9fb7> <9fb7> 3181 -<9fb8> <9fcd> 5431 -<9fce> <9fce> 7837 -<9fcf> <9ff2> 5454 -<9ff3> <9ff3> 1535 -<9ff4> <9ffc> 5491 - 326 - 5500 - 5563 - 7839 - 5600 - 7840 - 5657 - 7477 - 5680 - 5688 - 7841 -endcidrange - -100 begincidrange - 5699 - 7842 - 5705 - 5751 - 7844 - 5793 - 2030 - 5854 - 3153 - 5856 - 7845 - 5861 - 5876 - 7846 - 5918 - 7847 - 5928 - 1492 - 5938 - 5939 - 7848 - 5995 - 4060 - 6008 - 7849 - 6038 - 7850 - 6048 - 6064 - 7851 - 6089 - 7852 - 6091 - 7853 - 6102 - 6127 - 7854 - 6196 - 6252 - 6315 - 7855 - 6320 - 7856 - 6325 - 7857 - 6334 - 7858 - 6366 - 7859 - 6373 - 7860 - 6430 - 6440 - 2293 - 6442 - 3845 - 6454 - 1440 - 6498 - 6503 - 3358 - 6538 - 7862 - 6541 - 7863 - 6563 - 7864 - 6613 - 6628 - 7865 - 6646 - 1550 - 6689 - 6691 - 7866 - 6698 - 7867 - 6714 - 2730 - 6767 - 7868 - 6795 - 7869 - 6806 - 6816 - 7870 - 6862 - 6879 - 7871 - 6892 - 7872 - 6894 - 7873 - 6919 - 7874 - 6939 - 7875 - 6965 - 7004 - 7067 -endcidrange - -26 begincidrange - 7878 - 7135 - 7879 - 7147 - 7880 - 7153 - 1841 - 7881 - 7183 - 7192 - 7255 - 7882 - 7299 - 7883 - 7314 - 1143 - 7884 - 7332 - 1321 - 7370 - 7380 - 7885 - 7429 - 7443 - 7886 - 7473 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78-RKSJ-V b/Resources/cmap/78-RKSJ-V deleted file mode 100644 index d497361276b..00000000000 --- a/Resources/cmap/78-RKSJ-V +++ /dev/null @@ -1,86 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (78-RKSJ-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (78-RKSJ-H) -%%BeginResource: CMap (78-RKSJ-V) -%%Title: (78-RKSJ-V Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/78-RKSJ-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /78-RKSJ-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25354] def - -/WMode 1 def - -27 begincidrange -<8141> <8142> 7887 -<8150> <8151> 7889 -<815b> <815d> 7891 -<8160> <8164> 7894 -<8169> <817a> 7899 -<8181> <8181> 7917 -<829f> <829f> 7918 -<82a1> <82a1> 7919 -<82a3> <82a3> 7920 -<82a5> <82a5> 7921 -<82a7> <82a7> 7922 -<82c1> <82c1> 7923 -<82e1> <82e1> 7924 -<82e3> <82e3> 7925 -<82e5> <82e5> 7926 -<82ec> <82ec> 7927 -<8340> <8340> 7928 -<8342> <8342> 7929 -<8344> <8344> 7930 -<8346> <8346> 7931 -<8348> <8348> 7932 -<8362> <8362> 7933 -<8383> <8383> 7934 -<8385> <8385> 7935 -<8387> <8387> 7936 -<838e> <838e> 7937 -<8395> <8396> 7938 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78-V b/Resources/cmap/78-V deleted file mode 100644 index 349219c92be..00000000000 --- a/Resources/cmap/78-V +++ /dev/null @@ -1,86 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (78-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (78-H) -%%BeginResource: CMap (78-V) -%%Title: (78-V Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/78-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /78-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25353] def - -/WMode 1 def - -27 begincidrange -<2122> <2123> 7887 -<2131> <2132> 7889 -<213c> <213e> 7891 -<2141> <2145> 7894 -<214a> <215b> 7899 -<2161> <2161> 7917 -<2421> <2421> 7918 -<2423> <2423> 7919 -<2425> <2425> 7920 -<2427> <2427> 7921 -<2429> <2429> 7922 -<2443> <2443> 7923 -<2463> <2463> 7924 -<2465> <2465> 7925 -<2467> <2467> 7926 -<246e> <246e> 7927 -<2521> <2521> 7928 -<2523> <2523> 7929 -<2525> <2525> 7930 -<2527> <2527> 7931 -<2529> <2529> 7932 -<2543> <2543> 7933 -<2563> <2563> 7934 -<2565> <2565> 7935 -<2567> <2567> 7936 -<256e> <256e> 7937 -<2575> <2576> 7938 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78ms-RKSJ-H b/Resources/cmap/78ms-RKSJ-H deleted file mode 100644 index 43bf48384ed..00000000000 --- a/Resources/cmap/78ms-RKSJ-H +++ /dev/null @@ -1,800 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (78ms-RKSJ-H) -%%Title: (78ms-RKSJ-H Adobe Japan1 2) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 2 def -end def - -/CMapName /78ms-RKSJ-H def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25441] def - -/WMode 0 def - -4 begincodespacerange - <00> <80> - <8140> <9FFC> - - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 231 -endnotdefrange - -100 begincidrange -<20> <7d> 231 -<7e> <7e> 631 -<8140> <817e> 633 -<8180> <81ac> 696 -<81b8> <81bf> 741 -<81c8> <81ce> 749 -<81da> <81e8> 756 -<81f0> <81f7> 771 -<81fc> <81fc> 779 -<824f> <8258> 780 -<8260> <8279> 790 -<8281> <829a> 816 -<829f> <82f1> 842 -<8340> <837e> 925 -<8380> <8396> 988 -<839f> <83b6> 1011 -<83bf> <83d6> 1035 -<8440> <8460> 1059 -<8470> <847e> 1092 -<8480> <8491> 1107 -<849f> <849f> 7479 -<84a0> <84a0> 7481 -<84a1> <84a1> 7491 -<84a2> <84a2> 7495 -<84a3> <84a3> 7503 -<84a4> <84a4> 7499 -<84a5> <84a5> 7507 -<84a6> <84a6> 7523 -<84a7> <84a7> 7515 -<84a8> <84a8> 7531 -<84a9> <84a9> 7539 -<84aa> <84aa> 7480 -<84ab> <84ab> 7482 -<84ac> <84ac> 7494 -<84ad> <84ad> 7498 -<84ae> <84ae> 7506 -<84af> <84af> 7502 -<84b0> <84b0> 7514 -<84b1> <84b1> 7530 -<84b2> <84b2> 7522 -<84b3> <84b3> 7538 -<84b4> <84b4> 7554 -<84b5> <84b5> 7511 -<84b6> <84b6> 7526 -<84b7> <84b7> 7519 -<84b8> <84b8> 7534 -<84b9> <84b9> 7542 -<84ba> <84ba> 7508 -<84bb> <84bb> 7527 -<84bc> <84bc> 7516 -<84bd> <84bd> 7535 -<84be> <84be> 7545 -<8740> <875d> 7555 -<875f> <8760> 7585 -<8761> <8761> 8038 -<8762> <8762> 7588 -<8763> <8763> 8040 -<8764> <8764> 7590 -<8765> <8765> 8042 -<8766> <8767> 7592 -<8768> <8768> 8044 -<8769> <876a> 7595 -<876b> <876b> 8043 -<876c> <876d> 7598 -<876e> <876e> 8047 -<876f> <8775> 7601 -<877e> <877e> 8323 -<8780> <8783> 7608 -<8784> <8784> 8055 -<8785> <878f> 7613 -<8790> <8790> 762 -<8791> <8791> 761 -<8792> <8792> 769 -<8793> <8799> 7624 -<879a> <879a> 768 -<879b> <879c> 7631 -<889f> <889f> 1125 -<88a0> <88a0> 7633 -<88a1> <88a6> 1127 -<88a7> <88a7> 8266 -<88a8> <88af> 1134 -<88b0> <88b0> 7961 -<88b1> <88b1> 7330 -<88b2> <88b8> 1144 -<88b9> <88b9> 7634 -<88ba> <88eb> 1152 -<88ec> <88ec> 7635 -<88ed> <88f0> 1203 -<88f1> <88f1> 7636 -<88f2> <88f9> 1208 -<88fa> <88fa> 7637 -<88fb> <88fc> 1217 -<8940> <8948> 1219 -<8949> <8949> 7638 -<894a> <8953> 1229 -<8954> <8954> 7639 -<8955> <8957> 1240 -<8958> <8958> 7640 -<8959> <895b> 1244 -<895c> <895c> 7642 -endcidrange - -100 begincidrange -<895d> <8960> 1248 -<8961> <8961> 7643 -<8962> <897e> 1253 -<8980> <898a> 1282 -<898b> <898b> 7644 -<898c> <89a5> 1294 -<89a6> <89a6> 7645 -<89a7> <89a7> 7369 -<89a8> <89a8> 7646 -<89a9> <89dd> 1323 -<89de> <89de> 7647 -<89df> <89f7> 1377 -<89f8> <89f8> 7648 -<89f9> <89fa> 1403 -<89fb> <89fb> 7649 -<89fc> <89fc> 1406 -<8a40> <8a40> 1407 -<8a41> <8a41> 7650 -<8a42> <8a60> 1409 -<8a61> <8a61> 6497 -<8a62> <8a67> 1441 -<8a68> <8a68> 5023 -<8a69> <8a7e> 1448 -<8a80> <8a84> 1470 -<8a85> <8a85> 7651 -<8a86> <8a8a> 1476 -<8a8b> <8a8b> 7652 -<8a8c> <8a92> 1482 -<8a93> <8a93> 7653 -<8a94> <8a95> 1490 -<8a96> <8a96> 5937 -<8a97> <8a99> 1493 -<8a9a> <8a9a> 7654 -<8a9b> <8abf> 1497 -<8ac0> <8ac0> 7655 -<8ac1> <8ac1> 5490 -<8ac2> <8aca> 1536 -<8acb> <8acb> 7656 -<8acc> <8acf> 1546 -<8ad0> <8ad0> 6688 -<8ad1> <8ae2> 1551 -<8ae3> <8ae3> 7657 -<8ae4> <8afc> 1570 -<8b40> <8b49> 1595 -<8b4a> <8b4a> 7658 -<8b4b> <8b5e> 1606 -<8b5f> <8b5f> 7659 -<8b60> <8b7e> 1627 -<8b80> <8b9f> 1658 -<8ba0> <8ba0> 7660 -<8ba1> <8ba7> 1691 -<8ba8> <8ba8> 7661 -<8ba9> <8bc3> 1699 -<8bc4> <8bc4> 7474 -<8bc5> <8bcc> 1727 -<8bcd> <8bcd> 7662 -<8bce> <8bea> 1736 -<8beb> <8beb> 7663 -<8bec> <8bf1> 1766 -<8bf2> <8bf2> 7664 -<8bf3> <8bf8> 1773 -<8bf9> <8bf9> 7665 -<8bfa> <8bfa> 1780 -<8bfb> <8bfb> 7666 -<8bfc> <8bfc> 1782 -<8c40> <8c42> 1783 -<8c43> <8c43> 7667 -<8c44> <8c55> 1787 -<8c56> <8c56> 7668 -<8c57> <8c63> 1806 -<8c64> <8c64> 7669 -<8c65> <8c6c> 1820 -<8c6d> <8c6d> 7670 -<8c6e> <8c70> 1829 -<8c71> <8c71> 7671 -<8c72> <8c73> 1833 -<8c74> <8c74> 7672 -<8c75> <8c79> 1836 -<8c7a> <8c7a> 7181 -<8c7b> <8c7e> 1842 -<8c80> <8c83> 1846 -<8c84> <8c84> 7673 -<8c85> <8c90> 1851 -<8c91> <8c91> 7674 -<8c92> <8c98> 1864 -<8c99> <8c99> 7675 -<8c9a> <8c9d> 1872 -<8c9e> <8c9e> 7676 -<8c9f> <8cb1> 1877 -<8cb2> <8cb2> 7677 -<8cb3> <8cbe> 1897 -<8cbf> <8cbf> 7678 -<8cc0> <8cfc> 1910 -<8d40> <8d49> 1971 -<8d4a> <8d4a> 7679 -<8d4b> <8d55> 1982 -<8d56> <8d56> 7680 -<8d57> <8d60> 1994 -<8d61> <8d61> 7681 -<8d62> <8d7a> 2005 -endcidrange - -100 begincidrange -<8d7b> <8d7b> 5853 -<8d7c> <8d7e> 2031 -<8d80> <8d8c> 2034 -<8d8d> <8d8d> 7682 -<8d8e> <8d93> 2048 -<8d94> <8d94> 7683 -<8d95> <8d98> 2055 -<8d99> <8d99> 7684 -<8d9a> <8dd0> 2060 -<8dd1> <8dd1> 7685 -<8dd2> <8de4> 2116 -<8de5> <8de5> 7686 -<8de6> <8df1> 2136 -<8df2> <8df2> 7687 -<8df3> <8dfc> 2149 -<8e40> <8e45> 2159 -<8e46> <8e46> 7688 -<8e47> <8e48> 2166 -<8e49> <8e49> 7689 -<8e4a> <8e4a> 2169 -<8e4b> <8e4b> 7690 -<8e4c> <8e57> 2171 -<8e58> <8e58> 7691 -<8e59> <8e7e> 2184 -<8e80> <8ec5> 2222 -<8ec6> <8ec6> 7693 -<8ec7> <8ec7> 6441 -<8ec8> <8ed4> 2294 -<8ed5> <8ed5> 7694 -<8ed6> <8eda> 2308 -<8edb> <8edc> 7695 -<8edd> <8efc> 2315 -<8f40> <8f49> 2347 -<8f4a> <8f4a> 7697 -<8f4b> <8f54> 2358 -<8f55> <8f55> 7698 -<8f56> <8f7e> 2369 -<8f80> <8f8b> 2410 -<8f8c> <8f8d> 7699 -<8f8e> <8f91> 2424 -<8f92> <8f93> 7701 -<8f94> <8fa2> 2430 -<8fa3> <8fa3> 7703 -<8fa4> <8fb0> 2446 -<8fb1> <8fb1> 7704 -<8fb2> <8fbc> 2460 -<8fbd> <8fbd> 7705 -<8fbe> <8fd2> 2472 -<8fd3> <8fd3> 7706 -<8fd4> <8fdc> 2494 -<8fdd> <8fdd> 7707 -<8fde> <8fe1> 2504 -<8fe2> <8fe2> 7708 -<8fe3> <8ffc> 2509 -<9040> <9048> 2535 -<9049> <9049> 7709 -<904a> <9077> 2545 -<9078> <9078> 7710 -<9079> <907e> 2592 -<9080> <9080> 7711 -<9081> <9088> 2599 -<9089> <9089> 7712 -<908a> <909f> 2608 -<90a0> <90a0> 7713 -<90a1> <90bf> 2631 -<90c0> <90c0> 7714 -<90c1> <90e3> 2663 -<90e4> <90e4> 7715 -<90e5> <90ee> 2699 -<90ef> <90f0> 7716 -<90f1> <90f6> 2711 -<90f7> <90f8> 7718 -<90f9> <90fc> 2719 -<9140> <9145> 2723 -<9146> <9146> 7720 -<9147> <9147> 6766 -<9148> <9157> 2731 -<9158> <9158> 7721 -<9159> <916a> 2748 -<916b> <916b> 7722 -<916c> <916d> 2767 -<916e> <916e> 7723 -<916f> <917d> 2770 -<917e> <917e> 7724 -<9180> <9188> 2786 -<9189> <9189> 7725 -<918a> <91ba> 2796 -<91bb> <91bb> 7726 -<91bc> <91ca> 2846 -<91cb> <91cb> 7727 -<91cc> <91d9> 2862 -<91da> <91da> 7728 -<91db> <91e0> 2877 -<91e1> <91e1> 7729 -<91e2> <91ec> 2884 -<91ed> <91ed> 7730 -<91ee> <91f2> 2896 -<91f3> <91f4> 7731 -<91f5> <91fa> 2903 -<91fb> <91fb> 7733 -endcidrange - -100 begincidrange -<91fc> <91fc> 2910 -<9240> <9245> 2911 -<9246> <9246> 7734 -<9247> <9247> 2918 -<9248> <9249> 7735 -<924a> <924b> 2921 -<924c> <924d> 7737 -<924e> <925b> 2925 -<925c> <925c> 7739 -<925d> <927e> 2940 -<9280> <928f> 2974 -<9290> <9290> 7740 -<9291> <9294> 2991 -<9295> <9295> 7741 -<9296> <929b> 2996 -<929c> <929c> 7742 -<929d> <92ba> 3003 -<92bb> <92bb> 7743 -<92bc> <92c5> 3034 -<92c6> <92c6> 7744 -<92c7> <92c7> 3045 -<92c8> <92c8> 7745 -<92c9> <92ca> 3047 -<92cb> <92cb> 7746 -<92cc> <92cc> 3050 -<92cd> <92cd> 7747 -<92ce> <92d1> 3052 -<92d2> <92d2> 8267 -<92d3> <92d8> 3057 -<92d9> <92d9> 4533 -<92da> <92fc> 3064 -<9340> <9340> 3099 -<9341> <9341> 7748 -<9342> <9345> 3101 -<9346> <9346> 7749 -<9347> <934c> 3106 -<934d> <934d> 7750 -<934e> <9354> 3113 -<9355> <9355> 7751 -<9356> <935d> 3121 -<935e> <935e> 7752 -<935f> <9366> 3130 -<9367> <9367> 7753 -<9368> <9369> 3139 -<936a> <936a> 7754 -<936b> <936f> 3142 -<9370> <9371> 7755 -<9372> <9375> 3149 -<9376> <9376> 5855 -<9377> <937e> 3154 -<9380> <9383> 3162 -<9384> <9384> 7757 -<9385> <938d> 3167 -<938e> <938e> 5200 -<938f> <9392> 3177 -<9393> <9393> 5430 -<9394> <9397> 3182 -<9398> <9398> 7758 -<9399> <93bb> 3187 -<93bc> <93bc> 7759 -<93bd> <93bf> 3223 -<93c0> <93c0> 7760 -<93c1> <93d1> 3227 -<93d2> <93d3> 7761 -<93d4> <93d8> 3246 -<93d9> <93da> 7763 -<93db> <93de> 3253 -<93df> <93df> 7765 -<93e0> <93e3> 3258 -<93e4> <93e5> 7766 -<93e6> <93e7> 3264 -<93e8> <93e8> 7768 -<93e9> <93f3> 3267 -<93f4> <93f4> 6893 -<93f5> <93fc> 3279 -<9440> <9447> 3287 -<9448> <9448> 7769 -<9449> <9457> 3296 -<9458> <9458> 7770 -<9459> <9475> 3312 -<9476> <9476> 7771 -<9477> <947e> 3342 -<9480> <9486> 3350 -<9487> <9487> 7772 -<9488> <9488> 6537 -<9489> <9489> 7773 -<948a> <948c> 3360 -<948d> <948d> 7774 -<948e> <94a1> 3364 -<94a2> <94a2> 7775 -<94a3> <94ab> 3385 -<94ac> <94ac> 7776 -<94ad> <94ad> 3395 -<94ae> <94ae> 7777 -<94af> <94d1> 3397 -<94d2> <94d2> 7778 -<94d3> <94df> 3433 -<94e0> <94e0> 7779 -<94e1> <94f2> 3447 -<94f3> <94f3> 7780 -endcidrange - -100 begincidrange -<94f4> <94fc> 3466 -<9540> <9540> 3475 -<9541> <9542> 7781 -<9543> <954d> 3478 -<954e> <954e> 7783 -<954f> <954f> 5179 -<9550> <9550> 3491 -<9551> <9551> 7784 -<9552> <9553> 3493 -<9554> <9554> 7785 -<9555> <955e> 3496 -<955f> <955f> 7786 -<9560> <956c> 3507 -<956d> <956d> 7787 -<956e> <956f> 3521 -<9570> <9570> 7788 -<9571> <957e> 3524 -<9580> <95c0> 3538 -<95c1> <95c1> 7789 -<95c2> <95ca> 3604 -<95cb> <95cb> 7790 -<95cc> <95d7> 3614 -<95d8> <95d8> 7791 -<95d9> <95f6> 3627 -<95f7> <95f7> 7792 -<95f8> <95fc> 3658 -<9640> <9640> 3663 -<9641> <9641> 7793 -<9642> <9647> 3665 -<9648> <9648> 7794 -<9649> <9669> 3672 -<966a> <966a> 7795 -<966b> <967e> 3706 -<9680> <9689> 3726 -<968a> <968a> 7475 -<968b> <968f> 3737 -<9690> <9690> 7796 -<9691> <9697> 3743 -<9698> <9698> 7980 -<9699> <9699> 4143 -<969a> <96ca> 3752 -<96cb> <96cb> 7797 -<96cc> <96d6> 3802 -<96d7> <96d7> 7798 -<96d8> <96dc> 3814 -<96dd> <96dd> 7799 -<96de> <96df> 3820 -<96e0> <96e0> 7800 -<96e1> <96f6> 3823 -<96f7> <96f7> 6453 -<96f8> <96f8> 7801 -<96f9> <96f9> 3847 -<96fa> <96fa> 7802 -<96fb> <96fb> 3849 -<96fc> <96fc> 7803 -<9740> <9750> 3851 -<9751> <9751> 7804 -<9752> <976e> 3869 -<976f> <976f> 7805 -<9770> <9772> 3899 -<9773> <9773> 7806 -<9774> <9778> 3903 -<9779> <9779> 7476 -<977a> <977e> 3909 -<9780> <9788> 3914 -<9789> <9789> 7807 -<978a> <97c8> 3924 -<97c9> <97c9> 7808 -<97ca> <97f7> 3988 -<97f8> <97f9> 7809 -<97fa> <97fc> 4036 -<9840> <9840> 7811 -<9841> <984f> 4040 -<9850> <9850> 7812 -<9851> <9854> 4056 -<9855> <9855> 6007 -<9856> <9857> 4061 -<9858> <9858> 7813 -<9859> <9872> 4064 -<989f> <98d3> 4090 -<98d4> <98d4> 3751 -<98d5> <98fc> 4144 -<9940> <995b> 4184 -<995c> <995c> 7814 -<995d> <9965> 4213 -<9966> <9966> 7815 -<9967> <9969> 4223 -<996a> <996a> 7816 -<996b> <996b> 4227 -<996c> <996c> 7817 -<996d> <997e> 4229 -<9980> <99fc> 4247 -<9a40> <9a4e> 4372 -<9a4f> <9a4f> 7818 -<9a50> <9a58> 4388 -<9a59> <9a59> 7819 -<9a5a> <9a7c> 4398 -<9a7d> <9a7d> 7821 -<9a7e> <9a7e> 4434 -<9a80> <9a8a> 4435 -endcidrange - -100 begincidrange -<9a8b> <9a8b> 7822 -<9a8c> <9ac1> 4447 -<9ac2> <9ac2> 7823 -<9ac3> <9ae1> 4502 -<9ae2> <9ae2> 3063 -<9ae3> <9afc> 4534 -<9b40> <9b5b> 4560 -<9b5c> <9b5c> 7824 -<9b5d> <9b7e> 4589 -<9b80> <9b82> 4623 -<9b83> <9b83> 7825 -<9b84> <9b9f> 4627 -<9ba0> <9ba0> 7826 -<9ba1> <9bfc> 4656 -<9c40> <9c7e> 4748 -<9c80> <9ca1> 4811 -<9ca2> <9ca2> 7828 -<9ca3> <9cfc> 4846 -<9d40> <9d7e> 4936 -<9d80> <9d80> 7829 -<9d81> <9d8b> 5000 -<9d8c> <9d8c> 7830 -<9d8d> <9d97> 5012 -<9d98> <9d98> 1447 -<9d99> <9db6> 5024 -<9db7> <9db7> 7831 -<9db8> <9dca> 5055 -<9dcb> <9dcb> 7832 -<9dcc> <9dfc> 5075 -<9e40> <9e63> 5124 -<9e64> <9e64> 7833 -<9e65> <9e68> 5161 -<9e69> <9e69> 7834 -<9e6a> <9e76> 5166 -<9e77> <9e77> 3490 -<9e78> <9e7e> 5180 -<9e80> <9e8a> 5187 -<9e8b> <9e8b> 7835 -<9e8c> <9e8c> 5199 -<9e8d> <9e8d> 3176 -<9e8e> <9e93> 5201 -<9e94> <9e94> 7836 -<9e95> <9efc> 5208 -<9f40> <9f7e> 5312 -<9f80> <9fb6> 5375 -<9fb7> <9fb7> 3181 -<9fb8> <9fcd> 5431 -<9fce> <9fce> 7837 -<9fcf> <9ff2> 5454 -<9ff3> <9ff3> 1535 -<9ff4> <9ffc> 5491 - 326 - 5500 - 5563 - 7839 - 5600 - 7840 - 5657 - 7477 - 5680 - 5688 - 7841 - 5699 - 7842 - 5705 - 5751 - 7844 - 5793 - 2030 - 5854 - 3153 - 5856 - 7845 - 5861 - 5876 - 7846 - 5918 - 7847 - 5928 - 1492 - 5938 - 5939 - 7848 - 5995 - 4060 - 6008 - 7849 - 6038 - 7850 - 6048 - 6064 - 7851 - 6089 - 7852 - 6091 - 7853 - 6102 - 6127 - 7854 - 6196 -endcidrange - -100 begincidrange - 6252 - 6315 - 7855 - 6320 - 7856 - 6325 - 7857 - 6334 - 7858 - 6366 - 7859 - 6373 - 7860 - 6430 - 6440 - 2293 - 6442 - 3845 - 6454 - 1440 - 6498 - 6503 - 3358 - 6538 - 7862 - 6541 - 7863 - 6563 - 7864 - 6613 - 6628 - 7865 - 6646 - 1550 - 6689 - 6691 - 7866 - 6698 - 7867 - 6714 - 2730 - 6767 - 7868 - 6795 - 7869 - 6806 - 6816 - 7870 - 6862 - 6879 - 7871 - 6892 - 7872 - 6894 - 7873 - 6919 - 7874 - 6939 - 7875 - 6965 - 7004 - 7067 - 7878 - 7135 - 7879 - 7147 - 7880 - 7153 - 1841 - 7881 - 7183 - 7192 - 7255 - 7882 - 7299 - 7883 - 7314 - 1143 - 7884 - 7332 - 1321 - 7370 - 7380 - 7885 - 7429 - 7443 - 7886 - 7473 - 8284 - 8359 - 8422 - 1993 - 8474 - 8546 - 8609 - 8092 - 751 - 8005 - 8092 - 7575 -endcidrange - -13 begincidrange - 751 - 8005 - 7618 - 7610 - 8055 - 768 - 8359 - 8394 - 1993 - 8474 - 8518 - 8581 - 8706 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/78ms-RKSJ-V b/Resources/cmap/78ms-RKSJ-V deleted file mode 100644 index ee1f4170f60..00000000000 --- a/Resources/cmap/78ms-RKSJ-V +++ /dev/null @@ -1,137 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (78ms-RKSJ-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (78ms-RKSJ-H) -%%BeginResource: CMap (78ms-RKSJ-V) -%%Title: (78ms-RKSJ-V Adobe Japan1 2) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/78ms-RKSJ-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 2 def -end def - -/CMapName /78ms-RKSJ-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25442] def - -/WMode 1 def - -78 begincidrange -<8141> <8142> 7887 -<8143> <8143> 8268 -<8144> <8144> 8274 -<8150> <8151> 7889 -<815b> <815d> 7891 -<8160> <8164> 7894 -<8169> <817a> 7899 -<8181> <8181> 7917 -<81a8> <81a8> 739 -<81a9> <81a9> 738 -<81aa> <81ab> 736 -<81ac> <81ac> 8270 -<829f> <829f> 7918 -<82a1> <82a1> 7919 -<82a3> <82a3> 7920 -<82a5> <82a5> 7921 -<82a7> <82a7> 7922 -<82c1> <82c1> 7923 -<82e1> <82e1> 7924 -<82e3> <82e3> 7925 -<82e5> <82e5> 7926 -<82ec> <82ec> 7927 -<8340> <8340> 7928 -<8342> <8342> 7929 -<8344> <8344> 7930 -<8346> <8346> 7931 -<8348> <8348> 7932 -<8362> <8362> 7933 -<8383> <8383> 7934 -<8385> <8385> 7935 -<8387> <8387> 7936 -<838e> <838e> 7937 -<8395> <8396> 7938 -<849f> <849f> 7481 -<84a0> <84a0> 7479 -<84a1> <84a1> 7495 -<84a2> <84a2> 7503 -<84a3> <84a3> 7499 -<84a4> <84a4> 7491 -<84a5> <84a5> 7523 -<84a6> <84a6> 7515 -<84a7> <84a7> 7531 -<84a8> <84a8> 7507 -<84a9> <84a9> 7539 -<84aa> <84aa> 7482 -<84ab> <84ab> 7480 -<84ac> <84ac> 7498 -<84ad> <84ad> 7506 -<84ae> <84ae> 7502 -<84af> <84af> 7494 -<84b0> <84b0> 7530 -<84b1> <84b1> 7522 -<84b2> <84b2> 7538 -<84b3> <84b3> 7514 -<84b4> <84b4> 7554 -<84b5> <84b5> 7526 -<84b6> <84b6> 7519 -<84b7> <84b7> 7534 -<84b8> <84b8> 7511 -<84b9> <84b9> 7545 -<84ba> <84ba> 7527 -<84bb> <84bb> 7516 -<84bc> <84bc> 7535 -<84bd> <84bd> 7508 -<84be> <84be> 7542 -<875f> <8760> 7940 -<8761> <8761> 8329 -<8762> <8762> 7943 -<8763> <8763> 8339 -<8764> <8764> 7945 -<8765> <8765> 8338 -<8766> <8767> 7947 -<8768> <8768> 8344 -<8769> <876a> 7950 -<876b> <876b> 8348 -<876c> <876d> 7953 -<876e> <876e> 8349 -<8780> <8781> 7956 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/83pv-RKSJ-H b/Resources/cmap/83pv-RKSJ-H deleted file mode 100644 index e4e955b3904..00000000000 --- a/Resources/cmap/83pv-RKSJ-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (83pv-RKSJ-H) %%Title: (83pv-RKSJ-H Adobe Japan1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 1 def end def /CMapName /83pv-RKSJ-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 0 def /XUID [1 10 25324] def /WMode 0 def 5 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <80> <80> 97 <8140> <817e> 633 <8180> <81ac> 696 <81b8> <81bf> 741 <81c8> <81ce> 749 <81da> <81e8> 756 <81f0> <81f7> 771 <81fc> <81fc> 779 <824f> <8258> 780 <8260> <8279> 790 <8281> <829a> 816 <829f> <82f1> 842 <8340> <837e> 925 <8380> <8396> 988 <839f> <83b6> 1011 <83bf> <83d6> 1035 <8440> <8460> 1059 <8470> <847e> 1092 <8480> <8491> 1107 <849f> <849f> 7479 <84a0> <84a0> 7481 <84a1> <84a1> 7491 <84a2> <84a2> 7495 <84a3> <84a3> 7503 <84a4> <84a4> 7499 <84a5> <84a5> 7507 <84a6> <84a6> 7523 <84a7> <84a7> 7515 <84a8> <84a8> 7531 <84a9> <84a9> 7539 <84aa> <84aa> 7480 <84ab> <84ab> 7482 <84ac> <84ac> 7494 <84ad> <84ad> 7498 <84ae> <84ae> 7506 <84af> <84af> 7502 <84b0> <84b0> 7514 <84b1> <84b1> 7530 <84b2> <84b2> 7522 <84b3> <84b3> 7538 <84b4> <84b4> 7554 <84b5> <84b5> 7511 <84b6> <84b6> 7526 <84b7> <84b7> 7519 <84b8> <84b8> 7534 <84b9> <84b9> 7542 <84ba> <84ba> 7508 <84bb> <84bb> 7527 <84bc> <84bc> 7516 <84bd> <84bd> 7535 <84be> <84be> 7545 <8540> <857e> 232 <8580> <8580> 390 <8581> <859e> 296 <859f> <85dd> 327 <85de> <85fc> 391 <8640> <867e> 422 <8680> <8691> 485 <8692> <8692> 295 <8693> <869e> 503 <86a2> <86ed> 7479 <8740> <875d> 7555 <875f> <8775> 7585 <8780> <878f> 7608 <8790> <8790> 762 <8791> <8791> 761 <8792> <8792> 769 <8793> <8799> 7624 <879a> <879a> 768 <879b> <879c> 7631 <889f> <88fc> 1125 <8940> <897e> 1219 <8980> <89fc> 1282 <8a40> <8a7e> 1407 <8a80> <8afc> 1470 <8b40> <8b7e> 1595 <8b80> <8bfc> 1658 <8c40> <8c7e> 1783 <8c80> <8cfc> 1846 <8d40> <8d7e> 1971 <8d80> <8dfc> 2034 <8e40> <8e7e> 2159 <8e80> <8efc> 2222 <8f40> <8f7e> 2347 <8f80> <8ffc> 2410 <9040> <907e> 2535 <9080> <90fc> 2598 <9140> <917e> 2723 <9180> <91fc> 2786 <9240> <927e> 2911 <9280> <92fc> 2974 <9340> <937e> 3099 <9380> <93fc> 3162 <9440> <947e> 3287 <9480> <94fc> 3350 <9540> <957e> 3475 <9580> <95fc> 3538 <9640> <967e> 3663 <9680> <96fc> 3726 endcidrange 100 begincidrange <9740> <977e> 3851 <9780> <97fc> 3914 <9840> <9872> 4039 <989f> <98fc> 4090 <9940> <997e> 4184 <9980> <99fc> 4247 <9a40> <9a7e> 4372 <9a80> <9afc> 4435 <9b40> <9b7e> 4560 <9b80> <9bfc> 4623 <9c40> <9c7e> 4748 <9c80> <9cfc> 4811 <9d40> <9d7e> 4936 <9d80> <9dfc> 4999 <9e40> <9e7e> 5124 <9e80> <9efc> 5187 <9f40> <9f7e> 5312 <9f80> <9ffc> 5375 326 5500 5563 5688 5751 5876 5939 6064 6127 6252 6315 6440 6503 6628 6691 6816 6879 7004 7067 7192 7255 7380 7443 8284 633 7887 636 7889 651 7891 663 7894 670 7899 692 696 7917 698 741 749 756 771 779 780 790 816 7918 843 7919 845 7920 847 7921 849 7922 851 7923 877 7924 909 7925 911 7926 913 7927 920 7928 926 7929 928 7930 930 7931 932 7932 934 7933 960 988 7934 992 7935 endcidrange 22 begincidrange 994 7936 996 7937 1003 7938 1011 1035 7555 7940 7601 7956 7610 762 761 769 7624 768 7631 152 228 124 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90ms-RKSJ-H b/Resources/cmap/90ms-RKSJ-H deleted file mode 100644 index 06e216bfc95..00000000000 --- a/Resources/cmap/90ms-RKSJ-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (90ms-RKSJ-H) %%Title: (90ms-RKSJ-H Adobe Japan1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 2 def end def /CMapName /90ms-RKSJ-H def /CMapVersion 11.001 def /CMapType 1 def /UIDOffset 950 def /XUID [1 10 25343] def /WMode 0 def 4 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 1 beginnotdefrange <00> <1f> 231 endnotdefrange 100 begincidrange <20> <7d> 231 <7e> <7e> 631 <8140> <817e> 633 <8180> <81ac> 696 <81b8> <81bf> 741 <81c8> <81ce> 749 <81da> <81e8> 756 <81f0> <81f7> 771 <81fc> <81fc> 779 <824f> <8258> 780 <8260> <8279> 790 <8281> <829a> 816 <829f> <82f1> 842 <8340> <837e> 925 <8380> <8396> 988 <839f> <83b6> 1011 <83bf> <83d6> 1035 <8440> <8460> 1059 <8470> <847e> 1092 <8480> <8491> 1107 <849f> <849f> 7479 <84a0> <84a0> 7481 <84a1> <84a1> 7491 <84a2> <84a2> 7495 <84a3> <84a3> 7503 <84a4> <84a4> 7499 <84a5> <84a5> 7507 <84a6> <84a6> 7523 <84a7> <84a7> 7515 <84a8> <84a8> 7531 <84a9> <84a9> 7539 <84aa> <84aa> 7480 <84ab> <84ab> 7482 <84ac> <84ac> 7494 <84ad> <84ad> 7498 <84ae> <84ae> 7506 <84af> <84af> 7502 <84b0> <84b0> 7514 <84b1> <84b1> 7530 <84b2> <84b2> 7522 <84b3> <84b3> 7538 <84b4> <84b4> 7554 <84b5> <84b5> 7511 <84b6> <84b6> 7526 <84b7> <84b7> 7519 <84b8> <84b8> 7534 <84b9> <84b9> 7542 <84ba> <84ba> 7508 <84bb> <84bb> 7527 <84bc> <84bc> 7516 <84bd> <84bd> 7535 <84be> <84be> 7545 <8740> <875d> 7555 <875f> <8760> 7585 <8761> <8761> 8038 <8762> <8762> 7588 <8763> <8763> 8040 <8764> <8764> 7590 <8765> <8765> 8042 <8766> <8767> 7592 <8768> <8768> 8044 <8769> <876a> 7595 <876b> <876b> 8043 <876c> <876d> 7598 <876e> <876e> 8047 <876f> <8775> 7601 <877e> <877e> 8323 <8780> <8783> 7608 <8784> <8784> 8055 <8785> <878f> 7613 <8790> <8790> 762 <8791> <8791> 761 <8792> <8792> 769 <8793> <8799> 7624 <879a> <879a> 768 <879b> <879c> 7631 <889f> <88fc> 1125 <8940> <897e> 1219 <8980> <89fc> 1282 <8a40> <8a7e> 1407 <8a80> <8afc> 1470 <8b40> <8b7e> 1595 <8b80> <8bfc> 1658 <8c40> <8c7e> 1783 <8c80> <8cfc> 1846 <8d40> <8d7e> 1971 <8d80> <8dfc> 2034 <8e40> <8e7e> 2159 <8e80> <8efc> 2222 <8f40> <8f7e> 2347 <8f80> <8ffc> 2410 <9040> <907e> 2535 <9080> <90fc> 2598 <9140> <917e> 2723 <9180> <91fc> 2786 <9240> <927e> 2911 <9280> <92fc> 2974 <9340> <937e> 3099 <9380> <93fc> 3162 <9440> <947e> 3287 endcidrange 71 begincidrange <9480> <94fc> 3350 <9540> <957e> 3475 <9580> <95fc> 3538 <9640> <967e> 3663 <9680> <96fc> 3726 <9740> <977e> 3851 <9780> <97fc> 3914 <9840> <9872> 4039 <989f> <98fc> 4090 <9940> <997e> 4184 <9980> <99fc> 4247 <9a40> <9a7e> 4372 <9a80> <9afc> 4435 <9b40> <9b7e> 4560 <9b80> <9bfc> 4623 <9c40> <9c7e> 4748 <9c80> <9cfc> 4811 <9d40> <9d7e> 4936 <9d80> <9dfc> 4999 <9e40> <9e7e> 5124 <9e80> <9efc> 5187 <9f40> <9f7e> 5312 <9f80> <9ffc> 5375 326 5500 5563 5688 5751 5876 5939 6064 6127 6252 6315 6440 6503 6628 6691 6816 6879 7004 7067 7192 7255 7380 7443 8284 8359 8422 1993 8474 8546 8609 8092 751 8005 8092 7575 751 8005 7618 7610 8055 768 8359 8394 1993 8474 8518 8581 8706 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90ms-RKSJ-UCS2 b/Resources/cmap/90ms-RKSJ-UCS2 deleted file mode 100644 index 3e45ad326d5..00000000000 --- a/Resources/cmap/90ms-RKSJ-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (90ms-RKSJ-UCS2) %%Title: (90ms-RKSJ-UCS2) %%Version: 12.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (90ms_RKSJ_UCS2) def /Supplement 2 def end def /CMapName /90ms-RKSJ-UCS2 def /CMapVersion 12.000 def /CMapType 1 def /WMode 0 def 5 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 100 beginbfchar <80> <20AC> <8143> <8144> <8145> <30FB> <8148> <8149> <814C> <00B4> <814D> <814E> <00A8> <814F> <8150> <203E> <8151> <8156> <3003> <8157> <4EDD> <815B> <30FC> <815C> <2015> <815D> <2010> <815E> <815F> <8160> <8161> <2016> <8162> <8163> <2026> <8164> <2025> <816D> <816E> <816F> <8170> <817B> <817C> <817D> <00B1> <817E> <00D7> <8180> <00F7> <8181> <8182> <2260> <8183> <8184> <8187> <221E> <8188> <2234> <8189> <2642> <818A> <2640> <818B> <00B0> <818E> <2103> <818F> <8190> <8193> <8194> <8195> <8196> <8197> <8198> <00A7> <8199> <2606> <819A> <2605> <819B> <25CB> <819C> <25CF> <819D> <25CE> <819E> <25C7> <819F> <25C6> <81A0> <25A1> <81A1> <25A0> <81A2> <25B3> <81A3> <25B2> <81A4> <25BD> <81A5> <25BC> <81A6> <203B> <81A7> <3012> <81A8> <2192> <81AB> <2193> <81AC> <3013> <81B8> <2208> <81B9> <220B> <81BE> <222A> <81BF> <2229> <81CA> <81CB> <21D2> <81CC> <21D4> <81CD> <2200> <81CE> <2203> <81DA> <2220> <81DB> <22A5> <81DC> <2312> <81DD> <2202> <81DE> <2207> <81DF> <2261> <81E0> <2252> <81E3> <221A> <81E4> <223D> <81E5> <221D> <81E6> <2235> <81F0> <212B> <81F1> <2030> <81F2> <266F> <81F3> <266D> <81F4> <266A> <81F7> <00B6> <81FC> <25EF> <8446> <0401> <8476> <0451> <849F> <2500> endbfchar 100 beginbfchar <84A0> <2502> <84A1> <250C> <84A2> <2510> <84A3> <2518> <84A4> <2514> <84A5> <251C> <84A6> <252C> <84A7> <2524> <84A8> <2534> <84A9> <253C> <84AA> <2501> <84AB> <2503> <84AC> <250F> <84AD> <2513> <84AE> <251B> <84AF> <2517> <84B0> <2523> <84B1> <2533> <84B2> <252B> <84B3> <253B> <84B4> <254B> <84B5> <2520> <84B6> <252F> <84B7> <2528> <84B8> <2537> <84B9> <253F> <84BA> <251D> <84BB> <2530> <84BC> <2525> <84BD> <2538> <84BE> <2542> <875F> <3349> <8760> <3314> <8761> <3322> <8762> <334D> <8763> <3318> <8764> <3327> <8765> <3303> <8766> <3336> <8767> <3351> <8768> <3357> <8769> <330D> <876A> <3326> <876B> <3323> <876C> <332B> <876D> <334A> <876E> <333B> <8774> <33C4> <8775> <33A1> <877E> <337B> <8780> <301D> <8781> <301F> <8782> <2116> <8783> <33CD> <8784> <2121> <878C> <3239> <878D> <337E> <878E> <337D> <878F> <337C> <8790> <2252> <8791> <2261> <8792> <222B> <8793> <222E> <8794> <2211> <8795> <221A> <8796> <22A5> <8797> <2220> <8798> <221F> <8799> <22BF> <879A> <2235> <889F> <4E9C> <88A0> <5516> <88A1> <5A03> <88A2> <963F> <88A3> <54C0> <88A4> <611B> <88A5> <6328> <88A6> <59F6> <88A7> <9022> <88A8> <8475> <88A9> <831C> <88AA> <7A50> <88AB> <60AA> <88AC> <63E1> <88AD> <6E25> <88AE> <65ED> <88AF> <8466> <88B0> <82A6> <88B1> <9BF5> <88B2> <6893> <88B3> <5727> <88B4> <65A1> <88B5> <6271> <88B6> <5B9B> <88B7> <59D0> <88B8> <867B> <88B9> <98F4> <88BA> <7D62> <88BB> <7DBE> <88BC> <9B8E> endbfchar 100 beginbfchar <88BD> <6216> <88BE> <7C9F> <88BF> <88B7> <88C0> <5B89> <88C1> <5EB5> <88C2> <6309> <88C3> <6697> <88C4> <6848> <88C5> <95C7> <88C6> <978D> <88C7> <674F> <88C8> <4EE5> <88C9> <4F0A> <88CA> <4F4D> <88CB> <4F9D> <88CC> <5049> <88CD> <56F2> <88CE> <5937> <88CF> <59D4> <88D0> <5A01> <88D1> <5C09> <88D2> <60DF> <88D3> <610F> <88D4> <6170> <88D5> <6613> <88D6> <6905> <88D7> <70BA> <88D8> <754F> <88D9> <7570> <88DA> <79FB> <88DB> <7DAD> <88DC> <7DEF> <88DD> <80C3> <88DE> <840E> <88DF> <8863> <88E0> <8B02> <88E1> <9055> <88E2> <907A> <88E3> <533B> <88E4> <4E95> <88E5> <4EA5> <88E6> <57DF> <88E7> <80B2> <88E8> <90C1> <88E9> <78EF> <88EA> <4E00> <88EB> <58F1> <88EC> <6EA2> <88ED> <9038> <88EE> <7A32> <88EF> <8328> <88F0> <828B> <88F1> <9C2F> <88F2> <5141> <88F3> <5370> <88F4> <54BD> <88F5> <54E1> <88F6> <56E0> <88F7> <59FB> <88F8> <5F15> <88F9> <98F2> <88FA> <6DEB> <88FB> <80E4> <88FC> <852D> <8940> <9662> <8941> <9670> <8942> <96A0> <8943> <97FB> <8944> <540B> <8945> <53F3> <8946> <5B87> <8947> <70CF> <8948> <7FBD> <8949> <8FC2> <894A> <96E8> <894B> <536F> <894C> <9D5C> <894D> <7ABA> <894E> <4E11> <894F> <7893> <8950> <81FC> <8951> <6E26> <8952> <5618> <8953> <5504> <8954> <6B1D> <8955> <851A> <8956> <9C3B> <8957> <59E5> <8958> <53A9> <8959> <6D66> <895A> <74DC> <895B> <958F> <895C> <5642> <895D> <4E91> <895E> <904B> <895F> <96F2> <8960> <834F> <8961> <990C> <8962> <53E1> <8963> <55B6> endbfchar 100 beginbfchar <8964> <5B30> <8965> <5F71> <8966> <6620> <8967> <66F3> <8968> <6804> <8969> <6C38> <896A> <6CF3> <896B> <6D29> <896C> <745B> <896D> <76C8> <896E> <7A4E> <896F> <9834> <8970> <82F1> <8971> <885B> <8972> <8A60> <8973> <92ED> <8974> <6DB2> <8975> <75AB> <8976> <76CA> <8977> <99C5> <8978> <60A6> <8979> <8B01> <897A> <8D8A> <897B> <95B2> <897C> <698E> <897D> <53AD> <897E> <5186> <8980> <5712> <8981> <5830> <8982> <5944> <8983> <5BB4> <8984> <5EF6> <8985> <6028> <8986> <63A9> <8987> <63F4> <8988> <6CBF> <8989> <6F14> <898A> <708E> <898B> <7114> <898C> <7159> <898D> <71D5> <898E> <733F> <898F> <7E01> <8990> <8276> <8991> <82D1> <8992> <8597> <8993> <9060> <8994> <925B> <8995> <9D1B> <8996> <5869> <8997> <65BC> <8998> <6C5A> <8999> <7525> <899A> <51F9> <899B> <592E> <899C> <5965> <899D> <5F80> <899E> <5FDC> <899F> <62BC> <89A0> <65FA> <89A1> <6A2A> <89A2> <6B27> <89A3> <6BB4> <89A4> <738B> <89A5> <7FC1> <89A6> <8956> <89A7> <9D2C> <89A8> <9D0E> <89A9> <9EC4> <89AA> <5CA1> <89AB> <6C96> <89AC> <837B> <89AD> <5104> <89AE> <5C4B> <89AF> <61B6> <89B0> <81C6> <89B1> <6876> <89B2> <7261> <89B3> <4E59> <89B4> <4FFA> <89B5> <5378> <89B6> <6069> <89B7> <6E29> <89B8> <7A4F> <89B9> <97F3> <89BA> <4E0B> <89BB> <5316> <89BC> <4EEE> <89BD> <4F55> <89BE> <4F3D> <89BF> <4FA1> <89C0> <4F73> <89C1> <52A0> <89C2> <53EF> <89C3> <5609> <89C4> <590F> <89C5> <5AC1> <89C6> <5BB6> <89C7> <5BE1> <89C8> <79D1> endbfchar 100 beginbfchar <89C9> <6687> <89CA> <679C> <89CB> <67B6> <89CC> <6B4C> <89CD> <6CB3> <89CE> <706B> <89CF> <73C2> <89D0> <798D> <89D1> <79BE> <89D2> <7A3C> <89D3> <7B87> <89D4> <82B1> <89D5> <82DB> <89D6> <8304> <89D7> <8377> <89D8> <83EF> <89D9> <83D3> <89DA> <8766> <89DB> <8AB2> <89DC> <5629> <89DD> <8CA8> <89DE> <8FE6> <89DF> <904E> <89E0> <971E> <89E1> <868A> <89E2> <4FC4> <89E3> <5CE8> <89E4> <6211> <89E5> <7259> <89E6> <753B> <89E7> <81E5> <89E8> <82BD> <89E9> <86FE> <89EA> <8CC0> <89EB> <96C5> <89EC> <9913> <89ED> <99D5> <89EE> <4ECB> <89EF> <4F1A> <89F0> <89E3> <89F1> <56DE> <89F2> <584A> <89F3> <58CA> <89F4> <5EFB> <89F5> <5FEB> <89F6> <602A> <89F7> <6094> <89F8> <6062> <89F9> <61D0> <89FA> <6212> <89FB> <62D0> <89FC> <6539> <8A40> <9B41> <8A41> <6666> <8A42> <68B0> <8A43> <6D77> <8A44> <7070> <8A45> <754C> <8A46> <7686> <8A47> <7D75> <8A48> <82A5> <8A49> <87F9> <8A4A> <958B> <8A4B> <968E> <8A4C> <8C9D> <8A4D> <51F1> <8A4E> <52BE> <8A4F> <5916> <8A50> <54B3> <8A51> <5BB3> <8A52> <5D16> <8A53> <6168> <8A54> <6982> <8A55> <6DAF> <8A56> <788D> <8A57> <84CB> <8A58> <8857> <8A59> <8A72> <8A5A> <93A7> <8A5B> <9AB8> <8A5C> <6D6C> <8A5D> <99A8> <8A5E> <86D9> <8A5F> <57A3> <8A60> <67FF> <8A61> <86CE> <8A62> <920E> <8A63> <5283> <8A64> <5687> <8A65> <5404> <8A66> <5ED3> <8A67> <62E1> <8A68> <64B9> <8A69> <683C> <8A6A> <6838> <8A6B> <6BBB> <8A6C> <7372> <8A6D> <78BA> <8A6E> <7A6B> <8A6F> <899A> endbfchar 100 beginbfchar <8A70> <89D2> <8A71> <8D6B> <8A72> <8F03> <8A73> <90ED> <8A74> <95A3> <8A75> <9694> <8A76> <9769> <8A77> <5B66> <8A78> <5CB3> <8A79> <697D> <8A7C> <639B> <8A7D> <7B20> <8A7E> <6A2B> <8A80> <6A7F> <8A81> <68B6> <8A82> <9C0D> <8A83> <6F5F> <8A84> <5272> <8A85> <559D> <8A86> <6070> <8A87> <62EC> <8A88> <6D3B> <8A89> <6E07> <8A8A> <6ED1> <8A8B> <845B> <8A8C> <8910> <8A8D> <8F44> <8A8E> <4E14> <8A8F> <9C39> <8A90> <53F6> <8A91> <691B> <8A92> <6A3A> <8A93> <9784> <8A94> <682A> <8A95> <515C> <8A96> <7AC3> <8A97> <84B2> <8A98> <91DC> <8A99> <938C> <8A9A> <565B> <8A9B> <9D28> <8A9C> <6822> <8A9D> <8305> <8A9E> <8431> <8A9F> <7CA5> <8AA0> <5208> <8AA1> <82C5> <8AA2> <74E6> <8AA3> <4E7E> <8AA4> <4F83> <8AA5> <51A0> <8AA6> <5BD2> <8AA7> <520A> <8AA8> <52D8> <8AA9> <52E7> <8AAA> <5DFB> <8AAB> <559A> <8AAC> <582A> <8AAD> <59E6> <8AAE> <5B8C> <8AAF> <5B98> <8AB0> <5BDB> <8AB1> <5E72> <8AB2> <5E79> <8AB3> <60A3> <8AB4> <611F> <8AB5> <6163> <8AB6> <61BE> <8AB7> <63DB> <8AB8> <6562> <8AB9> <67D1> <8ABA> <6853> <8ABB> <68FA> <8ABC> <6B3E> <8ABD> <6B53> <8ABE> <6C57> <8ABF> <6F22> <8AC0> <6F97> <8AC1> <6F45> <8AC2> <74B0> <8AC3> <7518> <8AC4> <76E3> <8AC5> <770B> <8AC6> <7AFF> <8AC7> <7BA1> <8AC8> <7C21> <8AC9> <7DE9> <8ACA> <7F36> <8ACB> <7FF0> <8ACC> <809D> <8ACD> <8266> <8ACE> <839E> <8ACF> <89B3> <8AD0> <8ACC> <8AD1> <8CAB> <8AD2> <9084> <8AD3> <9451> <8AD4> <9593> <8AD5> <9591> <8AD6> <95A2> endbfchar 100 beginbfchar <8AD7> <9665> <8AD8> <97D3> <8AD9> <9928> <8ADA> <8218> <8ADB> <4E38> <8ADC> <542B> <8ADD> <5CB8> <8ADE> <5DCC> <8ADF> <73A9> <8AE0> <764C> <8AE1> <773C> <8AE2> <5CA9> <8AE3> <7FEB> <8AE4> <8D0B> <8AE5> <96C1> <8AE6> <9811> <8AE7> <9854> <8AE8> <9858> <8AE9> <4F01> <8AEA> <4F0E> <8AEB> <5371> <8AEC> <559C> <8AED> <5668> <8AEE> <57FA> <8AEF> <5947> <8AF0> <5B09> <8AF1> <5BC4> <8AF2> <5C90> <8AF3> <5E0C> <8AF4> <5E7E> <8AF5> <5FCC> <8AF6> <63EE> <8AF7> <673A> <8AF8> <65D7> <8AF9> <65E2> <8AFA> <671F> <8AFB> <68CB> <8AFC> <68C4> <8B40> <6A5F> <8B41> <5E30> <8B42> <6BC5> <8B43> <6C17> <8B44> <6C7D> <8B45> <757F> <8B46> <7948> <8B47> <5B63> <8B48> <7A00> <8B49> <7D00> <8B4A> <5FBD> <8B4B> <898F> <8B4C> <8A18> <8B4D> <8CB4> <8B4E> <8D77> <8B4F> <8ECC> <8B50> <8F1D> <8B51> <98E2> <8B52> <9A0E> <8B53> <9B3C> <8B54> <4E80> <8B55> <507D> <8B56> <5100> <8B57> <5993> <8B58> <5B9C> <8B59> <622F> <8B5A> <6280> <8B5B> <64EC> <8B5C> <6B3A> <8B5D> <72A0> <8B5E> <7591> <8B5F> <7947> <8B60> <7FA9> <8B61> <87FB> <8B62> <8ABC> <8B63> <8B70> <8B64> <63AC> <8B65> <83CA> <8B66> <97A0> <8B67> <5409> <8B68> <5403> <8B69> <55AB> <8B6A> <6854> <8B6B> <6A58> <8B6C> <8A70> <8B6D> <7827> <8B6E> <6775> <8B6F> <9ECD> <8B70> <5374> <8B71> <5BA2> <8B72> <811A> <8B73> <8650> <8B74> <9006> <8B75> <4E18> <8B76> <4E45> <8B77> <4EC7> <8B78> <4F11> <8B79> <53CA> <8B7A> <5438> <8B7B> <5BAE> <8B7C> <5F13> <8B7D> <6025> endbfchar 100 beginbfchar <8B7E> <6551> <8B80> <673D> <8B81> <6C42> <8B82> <6C72> <8B83> <6CE3> <8B84> <7078> <8B85> <7403> <8B86> <7A76> <8B87> <7AAE> <8B88> <7B08> <8B89> <7D1A> <8B8A> <7CFE> <8B8B> <7D66> <8B8C> <65E7> <8B8D> <725B> <8B8E> <53BB> <8B8F> <5C45> <8B90> <5DE8> <8B91> <62D2> <8B92> <62E0> <8B93> <6319> <8B94> <6E20> <8B95> <865A> <8B96> <8A31> <8B97> <8DDD> <8B98> <92F8> <8B99> <6F01> <8B9A> <79A6> <8B9B> <9B5A> <8B9C> <4EA8> <8B9F> <4F9B> <8BA0> <4FA0> <8BA1> <50D1> <8BA2> <5147> <8BA3> <7AF6> <8BA4> <5171> <8BA5> <51F6> <8BA6> <5354> <8BA7> <5321> <8BA8> <537F> <8BA9> <53EB> <8BAA> <55AC> <8BAB> <5883> <8BAC> <5CE1> <8BAD> <5F37> <8BAE> <5F4A> <8BAF> <602F> <8BB0> <6050> <8BB1> <606D> <8BB2> <631F> <8BB3> <6559> <8BB4> <6A4B> <8BB5> <6CC1> <8BB6> <72C2> <8BB7> <72ED> <8BB8> <77EF> <8BB9> <80F8> <8BBA> <8105> <8BBB> <8208> <8BBC> <854E> <8BBD> <90F7> <8BBE> <93E1> <8BBF> <97FF> <8BC0> <9957> <8BC1> <9A5A> <8BC2> <4EF0> <8BC3> <51DD> <8BC4> <5C2D> <8BC5> <6681> <8BC6> <696D> <8BC7> <5C40> <8BC8> <66F2> <8BC9> <6975> <8BCA> <7389> <8BCB> <6850> <8BCC> <7C81> <8BCD> <50C5> <8BCE> <52E4> <8BCF> <5747> <8BD0> <5DFE> <8BD1> <9326> <8BD2> <65A4> <8BD3> <6B23> <8BD4> <6B3D> <8BD5> <7434> <8BD6> <7981> <8BD7> <79BD> <8BD8> <7B4B> <8BD9> <7DCA> <8BDA> <82B9> <8BDB> <83CC> <8BDC> <887F> <8BDD> <895F> <8BDE> <8B39> <8BDF> <8FD1> <8BE0> <91D1> <8BE1> <541F> <8BE2> <9280> <8BE3> <4E5D> <8BE4> <5036> endbfchar 100 beginbfchar <8BE5> <53E5> <8BE6> <533A> <8BE7> <72D7> <8BE8> <7396> <8BE9> <77E9> <8BEA> <82E6> <8BEB> <8EAF> <8BEC> <99C6> <8BED> <99C8> <8BEE> <99D2> <8BEF> <5177> <8BF0> <611A> <8BF1> <865E> <8BF2> <55B0> <8BF3> <7A7A> <8BF4> <5076> <8BF5> <5BD3> <8BF6> <9047> <8BF7> <9685> <8BF8> <4E32> <8BF9> <6ADB> <8BFA> <91E7> <8BFB> <5C51> <8BFC> <5C48> <8C40> <6398> <8C41> <7A9F> <8C42> <6C93> <8C43> <9774> <8C44> <8F61> <8C45> <7AAA> <8C46> <718A> <8C47> <9688> <8C48> <7C82> <8C49> <6817> <8C4A> <7E70> <8C4B> <6851> <8C4C> <936C> <8C4D> <52F2> <8C4E> <541B> <8C4F> <85AB> <8C50> <8A13> <8C51> <7FA4> <8C52> <8ECD> <8C53> <90E1> <8C54> <5366> <8C55> <8888> <8C56> <7941> <8C57> <4FC2> <8C58> <50BE> <8C59> <5211> <8C5A> <5144> <8C5B> <5553> <8C5C> <572D> <8C5D> <73EA> <8C5E> <578B> <8C5F> <5951> <8C60> <5F62> <8C61> <5F84> <8C62> <6075> <8C63> <6176> <8C64> <6167> <8C65> <61A9> <8C66> <63B2> <8C67> <643A> <8C68> <656C> <8C69> <666F> <8C6A> <6842> <8C6B> <6E13> <8C6C> <7566> <8C6D> <7A3D> <8C6E> <7CFB> <8C6F> <7D4C> <8C70> <7D99> <8C71> <7E4B> <8C72> <7F6B> <8C73> <830E> <8C74> <834A> <8C75> <86CD> <8C76> <8A08> <8C77> <8A63> <8C78> <8B66> <8C79> <8EFD> <8C7A> <981A> <8C7B> <9D8F> <8C7C> <82B8> <8C7D> <8FCE> <8C7E> <9BE8> <8C80> <5287> <8C81> <621F> <8C82> <6483> <8C83> <6FC0> <8C84> <9699> <8C85> <6841> <8C86> <5091> <8C87> <6B20> <8C88> <6C7A> <8C89> <6F54> <8C8A> <7A74> <8C8B> <7D50> <8C8C> <8840> endbfchar 100 beginbfchar <8C8D> <8A23> <8C8E> <6708> <8C8F> <4EF6> <8C90> <5039> <8C91> <5026> <8C92> <5065> <8C93> <517C> <8C94> <5238> <8C95> <5263> <8C96> <55A7> <8C97> <570F> <8C98> <5805> <8C99> <5ACC> <8C9A> <5EFA> <8C9B> <61B2> <8C9C> <61F8> <8C9D> <62F3> <8C9E> <6372> <8C9F> <691C> <8CA0> <6A29> <8CA1> <727D> <8CA2> <72AC> <8CA3> <732E> <8CA4> <7814> <8CA5> <786F> <8CA6> <7D79> <8CA7> <770C> <8CA8> <80A9> <8CA9> <898B> <8CAA> <8B19> <8CAB> <8CE2> <8CAC> <8ED2> <8CAD> <9063> <8CAE> <9375> <8CAF> <967A> <8CB0> <9855> <8CB1> <9A13> <8CB2> <9E78> <8CB3> <5143> <8CB4> <539F> <8CB5> <53B3> <8CB6> <5E7B> <8CB7> <5F26> <8CB8> <6E1B> <8CB9> <6E90> <8CBA> <7384> <8CBB> <73FE> <8CBC> <7D43> <8CBD> <8237> <8CBE> <8A00> <8CBF> <8AFA> <8CC0> <9650> <8CC1> <4E4E> <8CC2> <500B> <8CC3> <53E4> <8CC4> <547C> <8CC5> <56FA> <8CC6> <59D1> <8CC7> <5B64> <8CC8> <5DF1> <8CC9> <5EAB> <8CCA> <5F27> <8CCB> <6238> <8CCC> <6545> <8CCD> <67AF> <8CCE> <6E56> <8CCF> <72D0> <8CD0> <7CCA> <8CD1> <88B4> <8CD2> <80A1> <8CD3> <80E1> <8CD4> <83F0> <8CD5> <864E> <8CD6> <8A87> <8CD7> <8DE8> <8CD8> <9237> <8CD9> <96C7> <8CDA> <9867> <8CDB> <9F13> <8CDC> <4E94> <8CDD> <4E92> <8CDE> <4F0D> <8CDF> <5348> <8CE0> <5449> <8CE1> <543E> <8CE2> <5A2F> <8CE3> <5F8C> <8CE4> <5FA1> <8CE5> <609F> <8CE6> <68A7> <8CE7> <6A8E> <8CE8> <745A> <8CE9> <7881> <8CEA> <8A9E> <8CEB> <8AA4> <8CEC> <8B77> <8CED> <9190> <8CEE> <4E5E> <8CEF> <9BC9> <8CF0> <4EA4> endbfchar 100 beginbfchar <8CF1> <4F7C> <8CF2> <4FAF> <8CF3> <5019> <8CF4> <5016> <8CF5> <5149> <8CF6> <516C> <8CF7> <529F> <8CF8> <52B9> <8CF9> <52FE> <8CFA> <539A> <8CFB> <53E3> <8CFC> <5411> <8D40> <540E> <8D41> <5589> <8D42> <5751> <8D43> <57A2> <8D44> <597D> <8D45> <5B54> <8D46> <5B5D> <8D47> <5B8F> <8D48> <5DE5> <8D49> <5DE7> <8D4A> <5DF7> <8D4B> <5E78> <8D4C> <5E83> <8D4D> <5E9A> <8D4E> <5EB7> <8D4F> <5F18> <8D50> <6052> <8D51> <614C> <8D52> <6297> <8D53> <62D8> <8D54> <63A7> <8D55> <653B> <8D56> <6602> <8D57> <6643> <8D58> <66F4> <8D59> <676D> <8D5A> <6821> <8D5B> <6897> <8D5C> <69CB> <8D5D> <6C5F> <8D5E> <6D2A> <8D5F> <6D69> <8D60> <6E2F> <8D61> <6E9D> <8D62> <7532> <8D63> <7687> <8D64> <786C> <8D65> <7A3F> <8D66> <7CE0> <8D67> <7D05> <8D68> <7D18> <8D69> <7D5E> <8D6A> <7DB1> <8D6B> <8015> <8D6C> <8003> <8D6D> <80AF> <8D6E> <80B1> <8D6F> <8154> <8D70> <818F> <8D71> <822A> <8D72> <8352> <8D73> <884C> <8D74> <8861> <8D75> <8B1B> <8D76> <8CA2> <8D77> <8CFC> <8D78> <90CA> <8D79> <9175> <8D7A> <9271> <8D7B> <783F> <8D7C> <92FC> <8D7D> <95A4> <8D7E> <964D> <8D80> <9805> <8D81> <9999> <8D82> <9AD8> <8D83> <9D3B> <8D84> <525B> <8D85> <52AB> <8D86> <53F7> <8D87> <5408> <8D88> <58D5> <8D89> <62F7> <8D8A> <6FE0> <8D8B> <8C6A> <8D8C> <8F5F> <8D8D> <9EB9> <8D8E> <514B> <8D8F> <523B> <8D90> <544A> <8D91> <56FD> <8D92> <7A40> <8D93> <9177> <8D94> <9D60> <8D95> <9ED2> <8D96> <7344> <8D97> <6F09> <8D98> <8170> endbfchar 100 beginbfchar <8D99> <7511> <8D9A> <5FFD> <8D9B> <60DA> <8D9C> <9AA8> <8D9D> <72DB> <8D9E> <8FBC> <8D9F> <6B64> <8DA0> <9803> <8DA1> <4ECA> <8DA2> <56F0> <8DA3> <5764> <8DA4> <58BE> <8DA5> <5A5A> <8DA6> <6068> <8DA7> <61C7> <8DA8> <660F> <8DA9> <6606> <8DAA> <6839> <8DAB> <68B1> <8DAC> <6DF7> <8DAD> <75D5> <8DAE> <7D3A> <8DAF> <826E> <8DB0> <9B42> <8DB1> <4E9B> <8DB2> <4F50> <8DB3> <53C9> <8DB4> <5506> <8DB5> <5D6F> <8DB6> <5DE6> <8DB7> <5DEE> <8DB8> <67FB> <8DB9> <6C99> <8DBA> <7473> <8DBB> <7802> <8DBC> <8A50> <8DBD> <9396> <8DBE> <88DF> <8DBF> <5750> <8DC0> <5EA7> <8DC1> <632B> <8DC2> <50B5> <8DC3> <50AC> <8DC4> <518D> <8DC5> <6700> <8DC6> <54C9> <8DC7> <585E> <8DC8> <59BB> <8DC9> <5BB0> <8DCA> <5F69> <8DCB> <624D> <8DCC> <63A1> <8DCD> <683D> <8DCE> <6B73> <8DCF> <6E08> <8DD0> <707D> <8DD1> <91C7> <8DD2> <7280> <8DD3> <7815> <8DD4> <7826> <8DD5> <796D> <8DD6> <658E> <8DD7> <7D30> <8DD8> <83DC> <8DD9> <88C1> <8DDA> <8F09> <8DDB> <969B> <8DDC> <5264> <8DDD> <5728> <8DDE> <6750> <8DDF> <7F6A> <8DE0> <8CA1> <8DE1> <51B4> <8DE2> <5742> <8DE3> <962A> <8DE4> <583A> <8DE5> <698A> <8DE6> <80B4> <8DE7> <54B2> <8DE8> <5D0E> <8DE9> <57FC> <8DEA> <7895> <8DEB> <9DFA> <8DEC> <4F5C> <8DED> <524A> <8DEE> <548B> <8DEF> <643E> <8DF0> <6628> <8DF1> <6714> <8DF2> <67F5> <8DF3> <7A84> <8DF4> <7B56> <8DF5> <7D22> <8DF6> <932F> <8DF7> <685C> <8DF8> <9BAD> <8DF9> <7B39> <8DFA> <5319> <8DFB> <518A> <8DFC> <5237> endbfchar 100 beginbfchar <8E40> <5BDF> <8E41> <62F6> <8E42> <64AE> <8E43> <64E6> <8E44> <672D> <8E45> <6BBA> <8E46> <85A9> <8E47> <96D1> <8E48> <7690> <8E49> <9BD6> <8E4A> <634C> <8E4B> <9306> <8E4C> <9BAB> <8E4D> <76BF> <8E4E> <6652> <8E4F> <4E09> <8E50> <5098> <8E51> <53C2> <8E52> <5C71> <8E53> <60E8> <8E54> <6492> <8E55> <6563> <8E56> <685F> <8E57> <71E6> <8E58> <73CA> <8E59> <7523> <8E5A> <7B97> <8E5B> <7E82> <8E5C> <8695> <8E5D> <8B83> <8E5E> <8CDB> <8E5F> <9178> <8E60> <9910> <8E61> <65AC> <8E62> <66AB> <8E63> <6B8B> <8E64> <4ED5> <8E65> <4ED4> <8E66> <4F3A> <8E67> <4F7F> <8E68> <523A> <8E69> <53F8> <8E6A> <53F2> <8E6B> <55E3> <8E6C> <56DB> <8E6D> <58EB> <8E6E> <59CB> <8E6F> <59C9> <8E70> <59FF> <8E71> <5B50> <8E72> <5C4D> <8E73> <5E02> <8E74> <5E2B> <8E75> <5FD7> <8E76> <601D> <8E77> <6307> <8E78> <652F> <8E79> <5B5C> <8E7A> <65AF> <8E7B> <65BD> <8E7C> <65E8> <8E7D> <679D> <8E7E> <6B62> <8E80> <6B7B> <8E81> <6C0F> <8E82> <7345> <8E83> <7949> <8E84> <79C1> <8E85> <7CF8> <8E86> <7D19> <8E87> <7D2B> <8E88> <80A2> <8E89> <8102> <8E8A> <81F3> <8E8B> <8996> <8E8C> <8A5E> <8E8D> <8A69> <8E8E> <8A66> <8E8F> <8A8C> <8E90> <8AEE> <8E91> <8CC7> <8E92> <8CDC> <8E93> <96CC> <8E94> <98FC> <8E95> <6B6F> <8E96> <4E8B> <8E97> <4F3C> <8E98> <4F8D> <8E99> <5150> <8E9A> <5B57> <8E9B> <5BFA> <8E9C> <6148> <8E9D> <6301> <8E9E> <6642> <8E9F> <6B21> <8EA0> <6ECB> <8EA1> <6CBB> <8EA2> <723E> <8EA3> <74BD> <8EA4> <75D4> endbfchar 100 beginbfchar <8EA5> <78C1> <8EA6> <793A> <8EA7> <800C> <8EA8> <8033> <8EA9> <81EA> <8EAA> <8494> <8EAB> <8F9E> <8EAC> <6C50> <8EAD> <9E7F> <8EAE> <5F0F> <8EAF> <8B58> <8EB0> <9D2B> <8EB1> <7AFA> <8EB2> <8EF8> <8EB3> <5B8D> <8EB4> <96EB> <8EB5> <4E03> <8EB6> <53F1> <8EB7> <57F7> <8EB8> <5931> <8EB9> <5AC9> <8EBA> <5BA4> <8EBB> <6089> <8EBC> <6E7F> <8EBD> <6F06> <8EBE> <75BE> <8EBF> <8CEA> <8EC0> <5B9F> <8EC1> <8500> <8EC2> <7BE0> <8EC3> <5072> <8EC4> <67F4> <8EC5> <829D> <8EC6> <5C61> <8EC7> <854A> <8EC8> <7E1E> <8EC9> <820E> <8ECA> <5199> <8ECB> <5C04> <8ECC> <6368> <8ECD> <8D66> <8ECE> <659C> <8ECF> <716E> <8ED0> <793E> <8ED1> <7D17> <8ED2> <8005> <8ED3> <8B1D> <8ED4> <8ECA> <8ED5> <906E> <8ED6> <86C7> <8ED7> <90AA> <8ED8> <501F> <8ED9> <52FA> <8EDA> <5C3A> <8EDB> <6753> <8EDC> <707C> <8EDD> <7235> <8EDE> <914C> <8EDF> <91C8> <8EE0> <932B> <8EE1> <82E5> <8EE2> <5BC2> <8EE3> <5F31> <8EE4> <60F9> <8EE5> <4E3B> <8EE6> <53D6> <8EE7> <5B88> <8EE8> <624B> <8EE9> <6731> <8EEA> <6B8A> <8EEB> <72E9> <8EEC> <73E0> <8EED> <7A2E> <8EEE> <816B> <8EEF> <8DA3> <8EF0> <9152> <8EF1> <9996> <8EF2> <5112> <8EF3> <53D7> <8EF4> <546A> <8EF5> <5BFF> <8EF6> <6388> <8EF7> <6A39> <8EF8> <7DAC> <8EF9> <9700> <8EFA> <56DA> <8EFB> <53CE> <8EFC> <5468> <8F40> <5B97> <8F41> <5C31> <8F42> <5DDE> <8F43> <4FEE> <8F44> <6101> <8F45> <62FE> <8F46> <6D32> <8F47> <79C0> <8F48> <79CB> <8F49> <7D42> <8F4A> <7E4D> <8F4B> <7FD2> endbfchar 100 beginbfchar <8F4C> <81ED> <8F4D> <821F> <8F4E> <8490> <8F4F> <8846> <8F50> <8972> <8F51> <8B90> <8F52> <8E74> <8F53> <8F2F> <8F54> <9031> <8F55> <914B> <8F56> <916C> <8F57> <96C6> <8F58> <919C> <8F59> <4EC0> <8F5A> <4F4F> <8F5B> <5145> <8F5C> <5341> <8F5D> <5F93> <8F5E> <620E> <8F5F> <67D4> <8F60> <6C41> <8F61> <6E0B> <8F62> <7363> <8F63> <7E26> <8F64> <91CD> <8F65> <9283> <8F66> <53D4> <8F67> <5919> <8F68> <5BBF> <8F69> <6DD1> <8F6A> <795D> <8F6B> <7E2E> <8F6C> <7C9B> <8F6D> <587E> <8F6E> <719F> <8F6F> <51FA> <8F70> <8853> <8F71> <8FF0> <8F72> <4FCA> <8F73> <5CFB> <8F74> <6625> <8F75> <77AC> <8F76> <7AE3> <8F77> <821C> <8F78> <99FF> <8F79> <51C6> <8F7A> <5FAA> <8F7B> <65EC> <8F7C> <696F> <8F7D> <6B89> <8F7E> <6DF3> <8F80> <6E96> <8F81> <6F64> <8F82> <76FE> <8F83> <7D14> <8F84> <5DE1> <8F85> <9075> <8F86> <9187> <8F87> <9806> <8F88> <51E6> <8F89> <521D> <8F8A> <6240> <8F8B> <6691> <8F8C> <66D9> <8F8D> <6E1A> <8F8E> <5EB6> <8F8F> <7DD2> <8F90> <7F72> <8F91> <66F8> <8F92> <85AF> <8F93> <85F7> <8F94> <8AF8> <8F95> <52A9> <8F96> <53D9> <8F97> <5973> <8F98> <5E8F> <8F99> <5F90> <8F9A> <6055> <8F9B> <92E4> <8F9C> <9664> <8F9D> <50B7> <8F9E> <511F> <8F9F> <52DD> <8FA0> <5320> <8FA1> <5347> <8FA2> <53EC> <8FA3> <54E8> <8FA4> <5546> <8FA5> <5531> <8FA6> <5617> <8FA7> <5968> <8FA8> <59BE> <8FA9> <5A3C> <8FAA> <5BB5> <8FAB> <5C06> <8FAC> <5C0F> <8FAD> <5C11> <8FAE> <5C1A> <8FAF> <5E84> <8FB0> <5E8A> endbfchar 100 beginbfchar <8FB1> <5EE0> <8FB2> <5F70> <8FB3> <627F> <8FB4> <6284> <8FB5> <62DB> <8FB6> <638C> <8FB7> <6377> <8FB8> <6607> <8FB9> <660C> <8FBA> <662D> <8FBB> <6676> <8FBC> <677E> <8FBD> <68A2> <8FBE> <6A1F> <8FBF> <6A35> <8FC0> <6CBC> <8FC1> <6D88> <8FC2> <6E09> <8FC3> <6E58> <8FC4> <713C> <8FC5> <7126> <8FC6> <7167> <8FC7> <75C7> <8FC8> <7701> <8FC9> <785D> <8FCA> <7901> <8FCB> <7965> <8FCC> <79F0> <8FCD> <7AE0> <8FCE> <7B11> <8FCF> <7CA7> <8FD0> <7D39> <8FD1> <8096> <8FD2> <83D6> <8FD3> <848B> <8FD4> <8549> <8FD5> <885D> <8FD6> <88F3> <8FD7> <8A1F> <8FD8> <8A3C> <8FD9> <8A54> <8FDA> <8A73> <8FDB> <8C61> <8FDC> <8CDE> <8FDD> <91A4> <8FDE> <9266> <8FDF> <937E> <8FE0> <9418> <8FE1> <969C> <8FE2> <9798> <8FE3> <4E0A> <8FE4> <4E08> <8FE5> <4E1E> <8FE6> <4E57> <8FE7> <5197> <8FE8> <5270> <8FE9> <57CE> <8FEA> <5834> <8FEB> <58CC> <8FEC> <5B22> <8FED> <5E38> <8FEE> <60C5> <8FEF> <64FE> <8FF0> <6761> <8FF1> <6756> <8FF2> <6D44> <8FF3> <72B6> <8FF4> <7573> <8FF5> <7A63> <8FF6> <84B8> <8FF7> <8B72> <8FF8> <91B8> <8FF9> <9320> <8FFA> <5631> <8FFB> <57F4> <8FFC> <98FE> <9040> <62ED> <9041> <690D> <9042> <6B96> <9043> <71ED> <9044> <7E54> <9045> <8077> <9046> <8272> <9047> <89E6> <9048> <98DF> <9049> <8755> <904A> <8FB1> <904B> <5C3B> <904C> <4F38> <904D> <4FE1> <904E> <4FB5> <904F> <5507> <9050> <5A20> <9051> <5BDD> <9052> <5BE9> <9053> <5FC3> <9054> <614E> <9055> <632F> <9056> <65B0> <9057> <664B> endbfchar 100 beginbfchar <9058> <68EE> <9059> <699B> <905A> <6D78> <905B> <6DF1> <905C> <7533> <905D> <75B9> <905E> <771F> <905F> <795E> <9060> <79E6> <9061> <7D33> <9062> <81E3> <9063> <82AF> <9064> <85AA> <9065> <89AA> <9066> <8A3A> <9067> <8EAB> <9068> <8F9B> <9069> <9032> <906A> <91DD> <906B> <9707> <906C> <4EBA> <906D> <4EC1> <906E> <5203> <906F> <5875> <9070> <58EC> <9071> <5C0B> <9072> <751A> <9073> <5C3D> <9074> <814E> <9075> <8A0A> <9076> <8FC5> <9077> <9663> <9078> <976D> <9079> <7B25> <907A> <8ACF> <907B> <9808> <907C> <9162> <907D> <56F3> <907E> <53A8> <9080> <9017> <9081> <5439> <9082> <5782> <9083> <5E25> <9084> <63A8> <9085> <6C34> <9086> <708A> <9087> <7761> <9088> <7C8B> <9089> <7FE0> <908A> <8870> <908B> <9042> <908C> <9154> <908D> <9310> <908E> <9318> <908F> <968F> <9090> <745E> <9091> <9AC4> <9092> <5D07> <9093> <5D69> <9094> <6570> <9095> <67A2> <9096> <8DA8> <9097> <96DB> <9098> <636E> <9099> <6749> <909A> <6919> <909B> <83C5> <909C> <9817> <909D> <96C0> <909E> <88FE> <909F> <6F84> <90A0> <647A> <90A1> <5BF8> <90A2> <4E16> <90A3> <702C> <90A4> <755D> <90A5> <662F> <90A6> <51C4> <90A7> <5236> <90A8> <52E2> <90A9> <59D3> <90AA> <5F81> <90AB> <6027> <90AC> <6210> <90AD> <653F> <90AE> <6574> <90AF> <661F> <90B0> <6674> <90B1> <68F2> <90B2> <6816> <90B3> <6B63> <90B4> <6E05> <90B5> <7272> <90B6> <751F> <90B7> <76DB> <90B8> <7CBE> <90B9> <8056> <90BA> <58F0> <90BB> <88FD> <90BC> <897F> endbfchar 100 beginbfchar <90BD> <8AA0> <90BE> <8A93> <90BF> <8ACB> <90C0> <901D> <90C1> <9192> <90C2> <9752> <90C3> <9759> <90C4> <6589> <90C5> <7A0E> <90C6> <8106> <90C7> <96BB> <90C8> <5E2D> <90C9> <60DC> <90CA> <621A> <90CB> <65A5> <90CC> <6614> <90CD> <6790> <90CE> <77F3> <90CF> <7A4D> <90D0> <7C4D> <90D1> <7E3E> <90D2> <810A> <90D3> <8CAC> <90D4> <8D64> <90D5> <8DE1> <90D6> <8E5F> <90D7> <78A9> <90D8> <5207> <90D9> <62D9> <90DA> <63A5> <90DB> <6442> <90DC> <6298> <90DD> <8A2D> <90DE> <7A83> <90DF> <7BC0> <90E0> <8AAC> <90E1> <96EA> <90E2> <7D76> <90E3> <820C> <90E4> <8749> <90E5> <4ED9> <90E6> <5148> <90E7> <5343> <90E8> <5360> <90E9> <5BA3> <90EA> <5C02> <90EB> <5C16> <90EC> <5DDD> <90ED> <6226> <90EE> <6247> <90EF> <64B0> <90F0> <6813> <90F1> <6834> <90F2> <6CC9> <90F3> <6D45> <90F4> <6D17> <90F5> <67D3> <90F6> <6F5C> <90F7> <714E> <90F8> <717D> <90F9> <65CB> <90FA> <7A7F> <90FB> <7BAD> <90FC> <7DDA> <9140> <7E4A> <9141> <7FA8> <9142> <817A> <9143> <821B> <9144> <8239> <9145> <85A6> <9146> <8A6E> <9147> <8CCE> <9148> <8DF5> <9149> <9078> <914A> <9077> <914B> <92AD> <914C> <9291> <914D> <9583> <914E> <9BAE> <914F> <524D> <9150> <5584> <9151> <6F38> <9152> <7136> <9153> <5168> <9154> <7985> <9155> <7E55> <9156> <81B3> <9157> <7CCE> <9158> <564C> <9159> <5851> <915A> <5CA8> <915B> <63AA> <915C> <66FE> <915D> <66FD> <915E> <695A> <915F> <72D9> <9160> <758F> <9161> <758E> <9162> <790E> <9163> <7956> endbfchar 100 beginbfchar <9164> <79DF> <9165> <7C97> <9166> <7D20> <9167> <7D44> <9168> <8607> <9169> <8A34> <916A> <963B> <916B> <9061> <916C> <9F20> <916D> <50E7> <916E> <5275> <916F> <53CC> <9170> <53E2> <9171> <5009> <9172> <55AA> <9173> <58EE> <9174> <594F> <9175> <723D> <9176> <5B8B> <9177> <5C64> <9178> <531D> <9179> <60E3> <917A> <60F3> <917B> <635C> <917C> <6383> <917D> <633F> <917E> <63BB> <9180> <64CD> <9181> <65E9> <9182> <66F9> <9183> <5DE3> <9184> <69CD> <9185> <69FD> <9186> <6F15> <9187> <71E5> <9188> <4E89> <9189> <75E9> <918A> <76F8> <918B> <7A93> <918C> <7CDF> <918D> <7DCF> <918E> <7D9C> <918F> <8061> <9190> <8349> <9191> <8358> <9192> <846C> <9193> <84BC> <9194> <85FB> <9195> <88C5> <9196> <8D70> <9197> <9001> <9198> <906D> <9199> <9397> <919A> <971C> <919B> <9A12> <919C> <50CF> <919D> <5897> <919E> <618E> <919F> <81D3> <91A0> <8535> <91A1> <8D08> <91A2> <9020> <91A3> <4FC3> <91A4> <5074> <91A5> <5247> <91A6> <5373> <91A7> <606F> <91A8> <6349> <91A9> <675F> <91AA> <6E2C> <91AB> <8DB3> <91AC> <901F> <91AD> <4FD7> <91AE> <5C5E> <91AF> <8CCA> <91B0> <65CF> <91B1> <7D9A> <91B2> <5352> <91B3> <8896> <91B4> <5176> <91B5> <63C3> <91B6> <5B58> <91B7> <5B6B> <91B8> <5C0A> <91B9> <640D> <91BA> <6751> <91BB> <905C> <91BC> <4ED6> <91BD> <591A> <91BE> <592A> <91BF> <6C70> <91C0> <8A51> <91C1> <553E> <91C2> <5815> <91C3> <59A5> <91C4> <60F0> <91C5> <6253> <91C6> <67C1> <91C7> <8235> <91C8> <6955> endbfchar 100 beginbfchar <91C9> <9640> <91CA> <99C4> <91CB> <9A28> <91CC> <4F53> <91CD> <5806> <91CE> <5BFE> <91CF> <8010> <91D0> <5CB1> <91D1> <5E2F> <91D2> <5F85> <91D3> <6020> <91D4> <614B> <91D5> <6234> <91D6> <66FF> <91D7> <6CF0> <91D8> <6EDE> <91D9> <80CE> <91DA> <817F> <91DB> <82D4> <91DC> <888B> <91DD> <8CB8> <91DE> <9000> <91DF> <902E> <91E0> <968A> <91E1> <9EDB> <91E2> <9BDB> <91E3> <4EE3> <91E4> <53F0> <91E5> <5927> <91E6> <7B2C> <91E7> <918D> <91E8> <984C> <91E9> <9DF9> <91EA> <6EDD> <91EB> <7027> <91EC> <5353> <91ED> <5544> <91EE> <5B85> <91EF> <6258> <91F0> <629E> <91F1> <62D3> <91F2> <6CA2> <91F3> <6FEF> <91F4> <7422> <91F5> <8A17> <91F6> <9438> <91F7> <6FC1> <91F8> <8AFE> <91F9> <8338> <91FA> <51E7> <91FB> <86F8> <91FC> <53EA> <9240> <53E9> <9241> <4F46> <9242> <9054> <9243> <8FB0> <9244> <596A> <9245> <8131> <9246> <5DFD> <9247> <7AEA> <9248> <8FBF> <9249> <68DA> <924A> <8C37> <924B> <72F8> <924C> <9C48> <924D> <6A3D> <924E> <8AB0> <924F> <4E39> <9250> <5358> <9251> <5606> <9252> <5766> <9253> <62C5> <9254> <63A2> <9255> <65E6> <9256> <6B4E> <9257> <6DE1> <9258> <6E5B> <9259> <70AD> <925A> <77ED> <925B> <7AEF> <925C> <7BAA> <925D> <7DBB> <925E> <803D> <925F> <80C6> <9260> <86CB> <9261> <8A95> <9262> <935B> <9263> <56E3> <9264> <58C7> <9265> <5F3E> <9266> <65AD> <9267> <6696> <9268> <6A80> <9269> <6BB5> <926A> <7537> <926B> <8AC7> <926C> <5024> <926D> <77E5> <926E> <5730> <926F> <5F1B> endbfchar 100 beginbfchar <9270> <6065> <9271> <667A> <9272> <6C60> <9273> <75F4> <9274> <7A1A> <9275> <7F6E> <9276> <81F4> <9277> <8718> <9278> <9045> <9279> <99B3> <927A> <7BC9> <927B> <755C> <927C> <7AF9> <927D> <7B51> <927E> <84C4> <9280> <9010> <9281> <79E9> <9282> <7A92> <9283> <8336> <9284> <5AE1> <9285> <7740> <9286> <4E2D> <9287> <4EF2> <9288> <5B99> <9289> <5FE0> <928A> <62BD> <928B> <663C> <928C> <67F1> <928D> <6CE8> <928E> <866B> <928F> <8877> <9290> <8A3B> <9291> <914E> <9292> <92F3> <9293> <99D0> <9294> <6A17> <9295> <7026> <9296> <732A> <9297> <82E7> <9298> <8457> <9299> <8CAF> <929A> <4E01> <929B> <5146> <929C> <51CB> <929D> <558B> <929E> <5BF5> <929F> <5E16> <92A0> <5E33> <92A1> <5E81> <92A2> <5F14> <92A3> <5F35> <92A4> <5F6B> <92A5> <5FB4> <92A6> <61F2> <92A7> <6311> <92A8> <66A2> <92A9> <671D> <92AA> <6F6E> <92AB> <7252> <92AC> <753A> <92AD> <773A> <92AE> <8074> <92AF> <8139> <92B0> <8178> <92B1> <8776> <92B2> <8ABF> <92B3> <8ADC> <92B4> <8D85> <92B5> <8DF3> <92B6> <929A> <92B7> <9577> <92B8> <9802> <92B9> <9CE5> <92BA> <52C5> <92BB> <6357> <92BC> <76F4> <92BD> <6715> <92BE> <6C88> <92BF> <73CD> <92C0> <8CC3> <92C1> <93AE> <92C2> <9673> <92C3> <6D25> <92C4> <589C> <92C5> <690E> <92C6> <69CC> <92C7> <8FFD> <92C8> <939A> <92C9> <75DB> <92CA> <901A> <92CB> <585A> <92CC> <6802> <92CD> <63B4> <92CE> <69FB> <92CF> <4F43> <92D0> <6F2C> <92D1> <67D8> <92D2> <8FBB> <92D3> <8526> <92D4> <7DB4> endbfchar 100 beginbfchar <92D5> <9354> <92D6> <693F> <92D7> <6F70> <92D8> <576A> <92D9> <58F7> <92DA> <5B2C> <92DB> <7D2C> <92DC> <722A> <92DD> <540A> <92DE> <91E3> <92DF> <9DB4> <92E0> <4EAD> <92E1> <4F4E> <92E2> <505C> <92E3> <5075> <92E4> <5243> <92E5> <8C9E> <92E6> <5448> <92E7> <5824> <92E8> <5B9A> <92E9> <5E1D> <92EA> <5E95> <92EB> <5EAD> <92EC> <5EF7> <92ED> <5F1F> <92EE> <608C> <92EF> <62B5> <92F0> <633A> <92F1> <63D0> <92F2> <68AF> <92F3> <6C40> <92F4> <7887> <92F5> <798E> <92F6> <7A0B> <92F7> <7DE0> <92F8> <8247> <92F9> <8A02> <92FA> <8AE6> <92FB> <8E44> <92FC> <9013> <9340> <90B8> <9341> <912D> <9342> <91D8> <9343> <9F0E> <9344> <6CE5> <9345> <6458> <9346> <64E2> <9347> <6575> <9348> <6EF4> <9349> <7684> <934A> <7B1B> <934B> <9069> <934C> <93D1> <934D> <6EBA> <934E> <54F2> <934F> <5FB9> <9350> <64A4> <9351> <8F4D> <9352> <8FED> <9353> <9244> <9354> <5178> <9355> <586B> <9356> <5929> <9357> <5C55> <9358> <5E97> <9359> <6DFB> <935A> <7E8F> <935B> <751C> <935C> <8CBC> <935D> <8EE2> <935E> <985B> <935F> <70B9> <9360> <4F1D> <9361> <6BBF> <9362> <6FB1> <9363> <7530> <9364> <96FB> <9365> <514E> <9366> <5410> <9367> <5835> <9368> <5857> <9369> <59AC> <936A> <5C60> <936B> <5F92> <936C> <6597> <936D> <675C> <936E> <6E21> <936F> <767B> <9370> <83DF> <9371> <8CED> <9372> <9014> <9373> <90FD> <9374> <934D> <9375> <7825> <9376> <783A> <9377> <52AA> <9378> <5EA6> <9379> <571F> <937A> <5974> <937B> <6012> endbfchar 100 beginbfchar <937C> <5012> <937D> <515A> <937E> <51AC> <9380> <51CD> <9381> <5200> <9382> <5510> <9383> <5854> <9384> <5858> <9385> <5957> <9386> <5B95> <9387> <5CF6> <9388> <5D8B> <9389> <60BC> <938A> <6295> <938B> <642D> <938C> <6771> <938D> <6843> <938E> <68BC> <938F> <68DF> <9390> <76D7> <9391> <6DD8> <9392> <6E6F> <9393> <6D9B> <9394> <706F> <9395> <71C8> <9396> <5F53> <9397> <75D8> <9398> <7977> <9399> <7B49> <939A> <7B54> <939B> <7B52> <939C> <7CD6> <939D> <7D71> <939E> <5230> <939F> <8463> <93A0> <8569> <93A1> <85E4> <93A2> <8A0E> <93A3> <8B04> <93A4> <8C46> <93A5> <8E0F> <93A6> <9003> <93A7> <900F> <93A8> <9419> <93A9> <9676> <93AA> <982D> <93AB> <9A30> <93AC> <95D8> <93AD> <50CD> <93AE> <52D5> <93AF> <540C> <93B0> <5802> <93B1> <5C0E> <93B2> <61A7> <93B3> <649E> <93B4> <6D1E> <93B5> <77B3> <93B6> <7AE5> <93B7> <80F4> <93B8> <8404> <93B9> <9053> <93BA> <9285> <93BB> <5CE0> <93BC> <9D07> <93BD> <533F> <93BE> <5F97> <93BF> <5FB3> <93C0> <6D9C> <93C1> <7279> <93C2> <7763> <93C3> <79BF> <93C4> <7BE4> <93C5> <6BD2> <93C6> <72EC> <93C7> <8AAD> <93C8> <6803> <93C9> <6A61> <93CA> <51F8> <93CB> <7A81> <93CC> <6934> <93CD> <5C4A> <93CE> <9CF6> <93CF> <82EB> <93D0> <5BC5> <93D1> <9149> <93D2> <701E> <93D3> <5678> <93D4> <5C6F> <93D5> <60C7> <93D6> <6566> <93D7> <6C8C> <93D8> <8C5A> <93D9> <9041> <93DA> <9813> <93DB> <5451> <93DC> <66C7> <93DD> <920D> <93DE> <5948> <93DF> <90A3> <93E0> <5185> endbfchar 100 beginbfchar <93E1> <4E4D> <93E2> <51EA> <93E3> <8599> <93E4> <8B0E> <93E5> <7058> <93E6> <637A> <93E7> <934B> <93E8> <6962> <93E9> <99B4> <93EA> <7E04> <93EB> <7577> <93EC> <5357> <93ED> <6960> <93EE> <8EDF> <93EF> <96E3> <93F0> <6C5D> <93F1> <4E8C> <93F2> <5C3C> <93F3> <5F10> <93F4> <8FE9> <93F5> <5302> <93F6> <8CD1> <93F7> <8089> <93F8> <8679> <93F9> <5EFF> <93FA> <65E5> <93FB> <4E73> <93FC> <5165> <9440> <5982> <9441> <5C3F> <9442> <97EE> <9443> <4EFB> <9444> <598A> <9445> <5FCD> <9446> <8A8D> <9447> <6FE1> <9448> <79B0> <9449> <7962> <944A> <5BE7> <944B> <8471> <944C> <732B> <944D> <71B1> <944E> <5E74> <944F> <5FF5> <9450> <637B> <9451> <649A> <9452> <71C3> <9453> <7C98> <9454> <4E43> <9455> <5EFC> <9456> <4E4B> <9457> <57DC> <9458> <56A2> <9459> <60A9> <945A> <6FC3> <945B> <7D0D> <945C> <80FD> <945D> <8133> <945E> <81BF> <945F> <8FB2> <9460> <8997> <9461> <86A4> <9462> <5DF4> <9463> <628A> <9464> <64AD> <9465> <8987> <9466> <6777> <9467> <6CE2> <9468> <6D3E> <9469> <7436> <946A> <7834> <946B> <5A46> <946C> <7F75> <946D> <82AD> <946E> <99AC> <946F> <4FF3> <9470> <5EC3> <9471> <62DD> <9472> <6392> <9473> <6557> <9474> <676F> <9475> <76C3> <9476> <724C> <9477> <80CC> <9478> <80BA> <9479> <8F29> <947A> <914D> <947B> <500D> <947C> <57F9> <947D> <5A92> <947E> <6885> <9480> <6973> <9481> <7164> <9482> <72FD> <9483> <8CB7> <9484> <58F2> <9485> <8CE0> <9486> <966A> <9487> <9019> <9488> <877F> endbfchar 100 beginbfchar <9489> <79E4> <948A> <77E7> <948B> <8429> <948C> <4F2F> <948D> <5265> <948E> <535A> <948F> <62CD> <9490> <67CF> <9491> <6CCA> <9492> <767D> <9493> <7B94> <9494> <7C95> <9495> <8236> <9496> <8584> <9497> <8FEB> <9498> <66DD> <9499> <6F20> <949A> <7206> <949B> <7E1B> <949C> <83AB> <949D> <99C1> <949E> <9EA6> <949F> <51FD> <94A0> <7BB1> <94A1> <7872> <94A2> <7BB8> <94A3> <8087> <94A4> <7B48> <94A5> <6AE8> <94A6> <5E61> <94A7> <808C> <94A8> <7551> <94A9> <7560> <94AA> <516B> <94AB> <9262> <94AC> <6E8C> <94AD> <767A> <94AE> <9197> <94AF> <9AEA> <94B0> <4F10> <94B1> <7F70> <94B2> <629C> <94B3> <7B4F> <94B4> <95A5> <94B5> <9CE9> <94B6> <567A> <94B7> <5859> <94B8> <86E4> <94B9> <96BC> <94BA> <4F34> <94BB> <5224> <94BC> <534A> <94BD> <53CD> <94BE> <53DB> <94BF> <5E06> <94C0> <642C> <94C1> <6591> <94C2> <677F> <94C3> <6C3E> <94C4> <6C4E> <94C5> <7248> <94C6> <72AF> <94C7> <73ED> <94C8> <7554> <94C9> <7E41> <94CA> <822C> <94CB> <85E9> <94CC> <8CA9> <94CD> <7BC4> <94CE> <91C6> <94CF> <7169> <94D0> <9812> <94D1> <98EF> <94D2> <633D> <94D3> <6669> <94D4> <756A> <94D5> <76E4> <94D6> <78D0> <94D7> <8543> <94D8> <86EE> <94D9> <532A> <94DA> <5351> <94DB> <5426> <94DC> <5983> <94DD> <5E87> <94DE> <5F7C> <94DF> <60B2> <94E0> <6249> <94E1> <6279> <94E2> <62AB> <94E3> <6590> <94E4> <6BD4> <94E5> <6CCC> <94E6> <75B2> <94E7> <76AE> <94E8> <7891> <94E9> <79D8> <94EA> <7DCB> <94EB> <7F77> <94EC> <80A5> endbfchar 100 beginbfchar <94ED> <88AB> <94EE> <8AB9> <94EF> <8CBB> <94F0> <907F> <94F1> <975E> <94F2> <98DB> <94F3> <6A0B> <94F4> <7C38> <94F5> <5099> <94F6> <5C3E> <94F7> <5FAE> <94F8> <6787> <94F9> <6BD8> <94FA> <7435> <94FB> <7709> <94FC> <7F8E> <9540> <9F3B> <9541> <67CA> <9542> <7A17> <9543> <5339> <9544> <758B> <9545> <9AED> <9546> <5F66> <9547> <819D> <9548> <83F1> <9549> <8098> <954A> <5F3C> <954B> <5FC5> <954C> <7562> <954D> <7B46> <954E> <903C> <954F> <6867> <9550> <59EB> <9551> <5A9B> <9552> <7D10> <9553> <767E> <9554> <8B2C> <9555> <4FF5> <9556> <5F6A> <9557> <6A19> <9558> <6C37> <9559> <6F02> <955A> <74E2> <955B> <7968> <955C> <8868> <955D> <8A55> <955E> <8C79> <955F> <5EDF> <9560> <63CF> <9561> <75C5> <9562> <79D2> <9563> <82D7> <9564> <9328> <9565> <92F2> <9566> <849C> <9567> <86ED> <9568> <9C2D> <9569> <54C1> <956A> <5F6C> <956B> <658C> <956C> <6D5C> <956D> <7015> <956E> <8CA7> <956F> <8CD3> <9570> <983B> <9571> <654F> <9572> <74F6> <9573> <4E0D> <9574> <4ED8> <9575> <57E0> <9576> <592B> <9577> <5A66> <9578> <5BCC> <9579> <51A8> <957A> <5E03> <957B> <5E9C> <957C> <6016> <957D> <6276> <957E> <6577> <9580> <65A7> <9581> <666E> <9582> <6D6E> <9583> <7236> <9584> <7B26> <9585> <8150> <9586> <819A> <9587> <8299> <9588> <8B5C> <9589> <8CA0> <958A> <8CE6> <958B> <8D74> <958C> <961C> <958D> <9644> <958E> <4FAE> <958F> <64AB> <9590> <6B66> <9591> <821E> <9592> <8461> <9593> <856A> <9594> <90E8> endbfchar 100 beginbfchar <9595> <5C01> <9596> <6953> <9597> <98A8> <9598> <847A> <9599> <8557> <959A> <4F0F> <959B> <526F> <959C> <5FA9> <959D> <5E45> <959E> <670D> <959F> <798F> <95A0> <8179> <95A1> <8907> <95A2> <8986> <95A3> <6DF5> <95A4> <5F17> <95A5> <6255> <95A6> <6CB8> <95A7> <4ECF> <95A8> <7269> <95A9> <9B92> <95AA> <5206> <95AB> <543B> <95AC> <5674> <95AD> <58B3> <95AE> <61A4> <95AF> <626E> <95B0> <711A> <95B1> <596E> <95B2> <7C89> <95B3> <7CDE> <95B4> <7D1B> <95B5> <96F0> <95B6> <6587> <95B7> <805E> <95B8> <4E19> <95B9> <4F75> <95BA> <5175> <95BB> <5840> <95BC> <5E63> <95BD> <5E73> <95BE> <5F0A> <95BF> <67C4> <95C0> <4E26> <95C1> <853D> <95C2> <9589> <95C3> <965B> <95C4> <7C73> <95C5> <9801> <95C6> <50FB> <95C7> <58C1> <95C8> <7656> <95C9> <78A7> <95CA> <5225> <95CB> <77A5> <95CC> <8511> <95CD> <7B86> <95CE> <504F> <95CF> <5909> <95D0> <7247> <95D1> <7BC7> <95D2> <7DE8> <95D3> <8FBA> <95D4> <8FD4> <95D5> <904D> <95D6> <4FBF> <95D7> <52C9> <95D8> <5A29> <95D9> <5F01> <95DA> <97AD> <95DB> <4FDD> <95DC> <8217> <95DD> <92EA> <95DE> <5703> <95DF> <6355> <95E0> <6B69> <95E1> <752B> <95E2> <88DC> <95E3> <8F14> <95E4> <7A42> <95E5> <52DF> <95E6> <5893> <95E7> <6155> <95E8> <620A> <95E9> <66AE> <95EA> <6BCD> <95EB> <7C3F> <95EC> <83E9> <95ED> <5023> <95EE> <4FF8> <95EF> <5305> <95F0> <5446> <95F1> <5831> <95F2> <5949> <95F3> <5B9D> <95F4> <5CF0> <95F5> <5CEF> <95F6> <5D29> <95F7> <5E96> <95F8> <62B1> endbfchar 100 beginbfchar <95F9> <6367> <95FA> <653E> <95FB> <65B9> <95FC> <670B> <9640> <6CD5> <9641> <6CE1> <9642> <70F9> <9643> <7832> <9644> <7E2B> <9645> <80DE> <9646> <82B3> <9647> <840C> <9648> <84EC> <9649> <8702> <964A> <8912> <964B> <8A2A> <964C> <8C4A> <964D> <90A6> <964E> <92D2> <964F> <98FD> <9650> <9CF3> <9651> <9D6C> <9652> <4E4F> <9653> <4EA1> <9654> <508D> <9655> <5256> <9656> <574A> <9657> <59A8> <9658> <5E3D> <965B> <623F> <965C> <66B4> <965D> <671B> <965E> <67D0> <965F> <68D2> <9660> <5192> <9661> <7D21> <9662> <80AA> <9663> <81A8> <9664> <8B00> <9665> <8C8C> <9666> <8CBF> <9667> <927E> <9668> <9632> <9669> <5420> <966A> <982C> <966B> <5317> <966C> <50D5> <966D> <535C> <966E> <58A8> <966F> <64B2> <9670> <6734> <9671> <7267> <9672> <7766> <9673> <7A46> <9674> <91E6> <9675> <52C3> <9676> <6CA1> <9677> <6B86> <9678> <5800> <9679> <5E4C> <967A> <5954> <967B> <672C> <967C> <7FFB> <967D> <51E1> <967E> <76C6> <9680> <6469> <9681> <78E8> <9682> <9B54> <9683> <9EBB> <9684> <57CB> <9685> <59B9> <9686> <6627> <9687> <679A> <9688> <6BCE> <9689> <54E9> <968A> <69D9> <968B> <5E55> <968C> <819C> <968D> <6795> <968E> <9BAA> <968F> <67FE> <9690> <9C52> <9691> <685D> <9692> <4EA6> <9693> <4FE3> <9694> <53C8> <9695> <62B9> <9696> <672B> <9697> <6CAB> <9698> <8FC4> <9699> <4FAD> <969A> <7E6D> <969B> <9EBF> <969C> <4E07> <969D> <6162> <969E> <6E80> <969F> <6F2B> <96A0> <8513> <96A1> <5473> <96A2> <672A> endbfchar 100 beginbfchar <96A3> <9B45> <96A4> <5DF3> <96A5> <7B95> <96A6> <5CAC> <96A7> <5BC6> <96A8> <871C> <96A9> <6E4A> <96AA> <84D1> <96AB> <7A14> <96AC> <8108> <96AD> <5999> <96AE> <7C8D> <96AF> <6C11> <96B0> <7720> <96B1> <52D9> <96B2> <5922> <96B3> <7121> <96B4> <725F> <96B5> <77DB> <96B6> <9727> <96B7> <9D61> <96B8> <690B> <96B9> <5A7F> <96BA> <5A18> <96BB> <51A5> <96BC> <540D> <96BD> <547D> <96BE> <660E> <96BF> <76DF> <96C0> <8FF7> <96C1> <9298> <96C2> <9CF4> <96C3> <59EA> <96C4> <725D> <96C5> <6EC5> <96C6> <514D> <96C7> <68C9> <96C8> <7DBF> <96C9> <7DEC> <96CA> <9762> <96CB> <9EBA> <96CC> <6478> <96CD> <6A21> <96CE> <8302> <96CF> <5984> <96D0> <5B5F> <96D1> <6BDB> <96D2> <731B> <96D3> <76F2> <96D4> <7DB2> <96D5> <8017> <96D6> <8499> <96D7> <5132> <96D8> <6728> <96D9> <9ED9> <96DA> <76EE> <96DB> <6762> <96DC> <52FF> <96DD> <9905> <96DE> <5C24> <96DF> <623B> <96E0> <7C7E> <96E1> <8CB0> <96E2> <554F> <96E3> <60B6> <96E4> <7D0B> <96E5> <9580> <96E6> <5301> <96E7> <4E5F> <96E8> <51B6> <96E9> <591C> <96EA> <723A> <96EB> <8036> <96EC> <91CE> <96ED> <5F25> <96EE> <77E2> <96EF> <5384> <96F0> <5F79> <96F1> <7D04> <96F2> <85AC> <96F3> <8A33> <96F4> <8E8D> <96F5> <9756> <96F6> <67F3> <96F7> <85AE> <96F8> <9453> <96F9> <6109> <96FA> <6108> <96FB> <6CB9> <96FC> <7652> <9740> <8AED> <9741> <8F38> <9742> <552F> <9743> <4F51> <9744> <512A> <9745> <52C7> <9746> <53CB> <9747> <5BA5> <9748> <5E7D> <9749> <60A0> endbfchar 100 beginbfchar <974A> <6182> <974B> <63D6> <974C> <6709> <974D> <67DA> <974E> <6E67> <974F> <6D8C> <9752> <7531> <9753> <7950> <9754> <88D5> <9755> <8A98> <9756> <904A> <9757> <9091> <9758> <90F5> <9759> <96C4> <975A> <878D> <975B> <5915> <975C> <4E88> <975D> <4F59> <975E> <4E0E> <975F> <8A89> <9760> <8F3F> <9761> <9810> <9762> <50AD> <9763> <5E7C> <9764> <5996> <9765> <5BB9> <9766> <5EB8> <9767> <63DA> <9768> <63FA> <9769> <64C1> <976A> <66DC> <976B> <694A> <976C> <69D8> <976D> <6D0B> <976E> <6EB6> <976F> <7194> <9770> <7528> <9771> <7AAF> <9772> <7F8A> <9773> <8000> <9774> <8449> <9775> <84C9> <9776> <8981> <9777> <8B21> <9778> <8E0A> <9779> <9065> <977A> <967D> <977B> <990A> <977C> <617E> <977D> <6291> <977E> <6B32> <9780> <6C83> <9781> <6D74> <9782> <7FCC> <9783> <7FFC> <9784> <6DC0> <9785> <7F85> <9786> <87BA> <9787> <88F8> <9788> <6765> <9789> <83B1> <978A> <983C> <978B> <96F7> <978C> <6D1B> <978D> <7D61> <978E> <843D> <978F> <916A> <9790> <4E71> <9791> <5375> <9792> <5D50> <9793> <6B04> <9794> <6FEB> <9795> <85CD> <9796> <862D> <9797> <89A7> <9798> <5229> <9799> <540F> <979A> <5C65> <979B> <674E> <979C> <68A8> <979D> <7406> <979E> <7483> <979F> <75E2> <97A0> <88CF> <97A1> <88E1> <97A2> <91CC> <97A3> <96E2> <97A4> <9678> <97A5> <5F8B> <97A6> <7387> <97A7> <7ACB> <97A8> <844E> <97A9> <63A0> <97AA> <7565> <97AB> <5289> <97AC> <6D41> <97AD> <6E9C> <97AE> <7409> <97AF> <7559> <97B0> <786B> endbfchar 100 beginbfchar <97B1> <7C92> <97B2> <9686> <97B3> <7ADC> <97B4> <9F8D> <97B5> <4FB6> <97B6> <616E> <97B7> <65C5> <97B8> <865C> <97B9> <4E86> <97BA> <4EAE> <97BB> <50DA> <97BC> <4E21> <97BD> <51CC> <97BE> <5BEE> <97BF> <6599> <97C0> <6881> <97C1> <6DBC> <97C2> <731F> <97C3> <7642> <97C4> <77AD> <97C5> <7A1C> <97C6> <7CE7> <97C7> <826F> <97C8> <8AD2> <97C9> <907C> <97CA> <91CF> <97CB> <9675> <97CC> <9818> <97CD> <529B> <97CE> <7DD1> <97CF> <502B> <97D0> <5398> <97D1> <6797> <97D2> <6DCB> <97D3> <71D0> <97D4> <7433> <97D5> <81E8> <97D6> <8F2A> <97D7> <96A3> <97D8> <9C57> <97D9> <9E9F> <97DA> <7460> <97DB> <5841> <97DC> <6D99> <97DD> <7D2F> <97DE> <985E> <97DF> <4EE4> <97E0> <4F36> <97E1> <4F8B> <97E2> <51B7> <97E3> <52B1> <97E4> <5DBA> <97E5> <601C> <97E6> <73B2> <97E7> <793C> <97E8> <82D3> <97E9> <9234> <97EA> <96B7> <97EB> <96F6> <97EC> <970A> <97ED> <9E97> <97EE> <9F62> <97EF> <66A6> <97F0> <6B74> <97F1> <5217> <97F2> <52A3> <97F3> <70C8> <97F4> <88C2> <97F5> <5EC9> <97F6> <604B> <97F7> <6190> <97F8> <6F23> <97F9> <7149> <97FA> <7C3E> <97FB> <7DF4> <97FC> <806F> <9840> <84EE> <9841> <9023> <9842> <932C> <9843> <5442> <9844> <9B6F> <9845> <6AD3> <9846> <7089> <9847> <8CC2> <9848> <8DEF> <9849> <9732> <984A> <52B4> <984B> <5A41> <984C> <5ECA> <984D> <5F04> <984E> <6717> <984F> <697C> <9850> <6994> <9851> <6D6A> <9852> <6F0F> <9853> <7262> <9854> <72FC> <9855> <7BED> <9856> <8001> <9857> <807E> endbfchar 100 beginbfchar <9858> <874B> <9859> <90CE> <985A> <516D> <985B> <9E93> <985C> <7984> <985D> <808B> <985E> <9332> <985F> <8AD6> <9860> <502D> <9861> <548C> <9862> <8A71> <9863> <6B6A> <9864> <8CC4> <9865> <8107> <9866> <60D1> <9867> <67A0> <9868> <9DF2> <9869> <4E99> <986A> <4E98> <986B> <9C10> <986C> <8A6B> <986D> <85C1> <986E> <8568> <986F> <6900> <9870> <6E7E> <9871> <7897> <9872> <8155> <989F> <5F0C> <98A0> <4E10> <98A1> <4E15> <98A2> <4E2A> <98A3> <4E31> <98A4> <4E36> <98A5> <4E3C> <98A6> <4E3F> <98A7> <4E42> <98A8> <4E56> <98A9> <4E58> <98AA> <4E82> <98AB> <4E85> <98AC> <8C6B> <98AD> <4E8A> <98AE> <8212> <98AF> <5F0D> <98B0> <4E8E> <98B4> <4EA2> <98B5> <4EB0> <98B6> <4EB3> <98B7> <4EB6> <98B8> <4ECE> <98B9> <4ECD> <98BA> <4EC4> <98BB> <4EC6> <98BC> <4EC2> <98BD> <4ED7> <98BE> <4EDE> <98BF> <4EED> <98C0> <4EDF> <98C1> <4EF7> <98C2> <4F09> <98C3> <4F5A> <98C4> <4F30> <98C5> <4F5B> <98C6> <4F5D> <98C7> <4F57> <98C8> <4F47> <98C9> <4F76> <98CA> <4F88> <98CB> <4F8F> <98CC> <4F98> <98CD> <4F7B> <98CE> <4F69> <98CF> <4F70> <98D0> <4F91> <98D1> <4F6F> <98D2> <4F86> <98D3> <4F96> <98D4> <5118> <98D5> <4FD4> <98D6> <4FDF> <98D7> <4FCE> <98D8> <4FD8> <98D9> <4FDB> <98DA> <4FD1> <98DB> <4FDA> <98DC> <4FD0> <98DF> <501A> <98E0> <5028> <98E1> <5014> <98E2> <502A> <98E3> <5025> <98E4> <5005> <98E5> <4F1C> <98E6> <4FF6> <98E7> <5021> <98E8> <5029> <98E9> <502C> <98EA> <4FFE> <98EB> <4FEF> <98EC> <5011> endbfchar 100 beginbfchar <98ED> <5006> <98EE> <5043> <98EF> <5047> <98F0> <6703> <98F1> <5055> <98F2> <5050> <98F3> <5048> <98F4> <505A> <98F5> <5056> <98F6> <506C> <98F7> <5078> <98F8> <5080> <98F9> <509A> <98FA> <5085> <98FB> <50B4> <98FC> <50B2> <9942> <50B3> <9943> <50C2> <9944> <50D6> <9945> <50DE> <9946> <50E5> <9947> <50ED> <9948> <50E3> <9949> <50EE> <994A> <50F9> <994B> <50F5> <994C> <5109> <994F> <5116> <9950> <5115> <9951> <5114> <9952> <511A> <9953> <5121> <9954> <513A> <9955> <5137> <9956> <513C> <9957> <513B> <995A> <5152> <995B> <514C> <995C> <5154> <995D> <5162> <995E> <7AF8> <9961> <516E> <9962> <5180> <9963> <5182> <9964> <56D8> <9965> <518C> <9966> <5189> <9967> <518F> <9968> <5191> <9969> <5193> <996C> <51A4> <996D> <51A6> <996E> <51A2> <9972> <51B3> <9975> <51B0> <9976> <51B5> <9977> <51BD> <9978> <51C5> <9979> <51C9> <997A> <51DB> <997B> <51E0> <997C> <8655> <997D> <51E9> <997E> <51ED> <9980> <51F0> <9981> <51F5> <9982> <51FE> <9983> <5204> <9984> <520B> <9985> <5214> <9986> <520E> <9987> <5227> <9988> <522A> <9989> <522E> <998A> <5233> <998B> <5239> <998C> <524F> <998D> <5244> <9990> <525E> <9991> <5254> <9992> <526A> <9993> <5274> <9994> <5269> <9995> <5273> <9996> <527F> <9997> <527D> <9998> <528D> <9999> <5294> <999A> <5292> <999B> <5271> <999C> <5288> <999D> <5291> <999E> <8FA8> <999F> <8FA7> <99A2> <52BC> <99A3> <52B5> <99A4> <52C1> <99A5> <52CD> <99A6> <52D7> <99A7> <52DE> endbfchar 100 beginbfchar <99A8> <52E3> <99A9> <52E6> <99AA> <98ED> <99AB> <52E0> <99AC> <52F3> <99AD> <52F5> <99B0> <5306> <99B1> <5308> <99B2> <7538> <99B3> <530D> <99B4> <5310> <99B5> <530F> <99B6> <5315> <99B7> <531A> <99B8> <5323> <99B9> <532F> <99BA> <5331> <99BB> <5333> <99BC> <5338> <99BD> <5340> <99BE> <5346> <99BF> <5345> <99C0> <4E17> <99C1> <5349> <99C2> <534D> <99C3> <51D6> <99C4> <535E> <99C5> <5369> <99C6> <536E> <99C7> <5918> <99C8> <537B> <99C9> <5377> <99CA> <5382> <99CB> <5396> <99CC> <53A0> <99CD> <53A6> <99CE> <53A5> <99CF> <53AE> <99D0> <53B0> <99D1> <53B6> <99D2> <53C3> <99D3> <7C12> <99D4> <96D9> <99D5> <53DF> <99D6> <66FC> <99D7> <71EE> <99D8> <53EE> <99D9> <53E8> <99DA> <53ED> <99DB> <53FA> <99DC> <5401> <99DD> <543D> <99DE> <5440> <99E1> <543C> <99E2> <542E> <99E3> <5436> <99E4> <5429> <99E5> <541D> <99E6> <544E> <99E7> <548F> <99E8> <5475> <99E9> <548E> <99EA> <545F> <99EB> <5471> <99EC> <5477> <99ED> <5470> <99EE> <5492> <99EF> <547B> <99F0> <5480> <99F1> <5476> <99F2> <5484> <99F3> <5490> <99F4> <5486> <99F5> <54C7> <99F6> <54A2> <99F7> <54B8> <99F8> <54A5> <99F9> <54AC> <99FA> <54C4> <99FB> <54C8> <99FC> <54A8> <9A40> <54AB> <9A41> <54C2> <9A42> <54A4> <9A43> <54BE> <9A44> <54BC> <9A45> <54D8> <9A48> <550F> <9A49> <5514> <9A4A> <54FD> <9A4B> <54EE> <9A4C> <54ED> <9A4D> <54FA> <9A4E> <54E2> <9A4F> <5539> <9A50> <5540> <9A51> <5563> <9A52> <554C> <9A53> <552E> <9A54> <555C> endbfchar 100 beginbfchar <9A55> <5545> <9A58> <5538> <9A59> <5533> <9A5A> <555D> <9A5B> <5599> <9A5C> <5580> <9A5D> <54AF> <9A5E> <558A> <9A5F> <559F> <9A60> <557B> <9A61> <557E> <9A62> <5598> <9A63> <559E> <9A64> <55AE> <9A65> <557C> <9A66> <5583> <9A67> <55A9> <9A68> <5587> <9A69> <55A8> <9A6A> <55DA> <9A6B> <55C5> <9A6C> <55DF> <9A6D> <55C4> <9A6E> <55DC> <9A6F> <55E4> <9A70> <55D4> <9A71> <5614> <9A72> <55F7> <9A73> <5616> <9A74> <55FE> <9A75> <55FD> <9A76> <561B> <9A77> <55F9> <9A78> <564E> <9A79> <5650> <9A7A> <71DF> <9A7B> <5634> <9A7C> <5636> <9A7D> <5632> <9A7E> <5638> <9A80> <566B> <9A81> <5664> <9A82> <562F> <9A83> <566C> <9A84> <566A> <9A85> <5686> <9A86> <5680> <9A87> <568A> <9A88> <56A0> <9A89> <5694> <9A8A> <568F> <9A8B> <56A5> <9A8C> <56AE> <9A8D> <56B6> <9A8E> <56B4> <9A8F> <56C2> <9A90> <56BC> <9A91> <56C1> <9A92> <56C3> <9A93> <56C0> <9A94> <56C8> <9A95> <56CE> <9A96> <56D1> <9A97> <56D3> <9A98> <56D7> <9A99> <56EE> <9A9A> <56F9> <9A9B> <5700> <9A9C> <56FF> <9A9D> <5704> <9A9E> <5709> <9A9F> <5708> <9AA0> <570B> <9AA1> <570D> <9AA2> <5713> <9AA3> <5718> <9AA4> <5716> <9AA5> <55C7> <9AA6> <571C> <9AA7> <5726> <9AAA> <574E> <9AAB> <573B> <9AAC> <5740> <9AAD> <574F> <9AAE> <5769> <9AAF> <57C0> <9AB0> <5788> <9AB1> <5761> <9AB2> <577F> <9AB3> <5789> <9AB4> <5793> <9AB5> <57A0> <9AB6> <57B3> <9AB7> <57A4> <9AB8> <57AA> <9AB9> <57B0> <9ABA> <57C3> <9ABB> <57C6> <9ABC> <57D4> <9ABF> <580A> endbfchar 100 beginbfchar <9AC0> <57D6> <9AC1> <57E3> <9AC2> <580B> <9AC3> <5819> <9AC4> <581D> <9AC5> <5872> <9AC6> <5821> <9AC7> <5862> <9AC8> <584B> <9AC9> <5870> <9ACA> <6BC0> <9ACB> <5852> <9ACC> <583D> <9ACD> <5879> <9ACE> <5885> <9ACF> <58B9> <9AD0> <589F> <9AD1> <58AB> <9AD2> <58BA> <9AD3> <58DE> <9AD4> <58BB> <9AD5> <58B8> <9AD6> <58AE> <9AD7> <58C5> <9AD8> <58D3> <9AD9> <58D1> <9ADA> <58D7> <9ADB> <58D9> <9ADC> <58D8> <9ADD> <58E5> <9ADE> <58DC> <9ADF> <58E4> <9AE0> <58DF> <9AE1> <58EF> <9AE2> <58FA> <9AE3> <58F9> <9AE7> <5902> <9AE8> <590A> <9AE9> <5910> <9AEA> <591B> <9AEB> <68A6> <9AEC> <5925> <9AEF> <5932> <9AF0> <5938> <9AF1> <593E> <9AF2> <7AD2> <9AF3> <5955> <9AF4> <5950> <9AF5> <594E> <9AF6> <595A> <9AF7> <5958> <9AF8> <5962> <9AF9> <5960> <9AFA> <5967> <9AFB> <596C> <9AFC> <5969> <9B40> <5978> <9B41> <5981> <9B42> <599D> <9B43> <4F5E> <9B44> <4FAB> <9B45> <59A3> <9B46> <59B2> <9B47> <59C6> <9B48> <59E8> <9B49> <59DC> <9B4A> <598D> <9B4D> <5A25> <9B4E> <5A1F> <9B4F> <5A11> <9B50> <5A1C> <9B51> <5A09> <9B52> <5A1A> <9B53> <5A40> <9B54> <5A6C> <9B55> <5A49> <9B58> <5A62> <9B59> <5A6A> <9B5A> <5A9A> <9B5B> <5ABC> <9B5C> <5ABE> <9B5D> <5ACB> <9B5E> <5AC2> <9B5F> <5ABD> <9B60> <5AE3> <9B61> <5AD7> <9B62> <5AE6> <9B63> <5AE9> <9B64> <5AD6> <9B67> <5B0C> <9B68> <5B0B> <9B69> <5B16> <9B6A> <5B32> <9B6B> <5AD0> <9B6C> <5B2A> <9B6D> <5B36> <9B6E> <5B3E> <9B6F> <5B43> <9B70> <5B45> <9B71> <5B40> endbfchar 100 beginbfchar <9B72> <5B51> <9B73> <5B55> <9B76> <5B65> <9B77> <5B69> <9B78> <5B70> <9B79> <5B73> <9B7A> <5B75> <9B7B> <5B78> <9B7C> <6588> <9B7D> <5B7A> <9B7E> <5B80> <9B80> <5B83> <9B81> <5BA6> <9B82> <5BB8> <9B83> <5BC3> <9B84> <5BC7> <9B85> <5BC9> <9B86> <5BD4> <9B87> <5BD0> <9B88> <5BE4> <9B89> <5BE6> <9B8A> <5BE2> <9B8B> <5BDE> <9B8C> <5BE5> <9B8D> <5BEB> <9B8E> <5BF0> <9B8F> <5BF6> <9B90> <5BF3> <9B91> <5C05> <9B94> <5C0D> <9B95> <5C13> <9B96> <5C20> <9B97> <5C22> <9B98> <5C28> <9B9B> <5C41> <9B9C> <5C46> <9B9D> <5C4E> <9B9E> <5C53> <9B9F> <5C50> <9BA0> <5C4F> <9BA1> <5B71> <9BA2> <5C6C> <9BA3> <5C6E> <9BA4> <4E62> <9BA5> <5C76> <9BA6> <5C79> <9BA7> <5C8C> <9BA8> <5C91> <9BA9> <5C94> <9BAA> <599B> <9BAB> <5CAB> <9BAC> <5CBB> <9BAD> <5CB6> <9BAE> <5CBC> <9BAF> <5CB7> <9BB0> <5CC5> <9BB1> <5CBE> <9BB2> <5CC7> <9BB3> <5CD9> <9BB4> <5CE9> <9BB5> <5CFD> <9BB6> <5CFA> <9BB7> <5CED> <9BB8> <5D8C> <9BB9> <5CEA> <9BBA> <5D0B> <9BBB> <5D15> <9BBC> <5D17> <9BBD> <5D5C> <9BBE> <5D1F> <9BBF> <5D1B> <9BC0> <5D11> <9BC1> <5D14> <9BC2> <5D22> <9BC3> <5D1A> <9BC4> <5D19> <9BC5> <5D18> <9BC6> <5D4C> <9BC7> <5D52> <9BC8> <5D4E> <9BC9> <5D4B> <9BCA> <5D6C> <9BCB> <5D73> <9BCC> <5D76> <9BCD> <5D87> <9BCE> <5D84> <9BCF> <5D82> <9BD0> <5DA2> <9BD1> <5D9D> <9BD2> <5DAC> <9BD3> <5DAE> <9BD4> <5DBD> <9BD5> <5D90> <9BD6> <5DB7> <9BD7> <5DBC> <9BD8> <5DC9> <9BD9> <5DCD> <9BDA> <5DD3> <9BDB> <5DD2> <9BDC> <5DD6> endbfchar 100 beginbfchar <9BDD> <5DDB> <9BDE> <5DEB> <9BDF> <5DF2> <9BE0> <5DF5> <9BE1> <5E0B> <9BE2> <5E1A> <9BE3> <5E19> <9BE4> <5E11> <9BE5> <5E1B> <9BE8> <5E44> <9BE9> <5E43> <9BEA> <5E40> <9BEB> <5E4E> <9BEC> <5E57> <9BED> <5E54> <9BEE> <5E5F> <9BEF> <5E62> <9BF0> <5E64> <9BF1> <5E47> <9BF4> <5E7A> <9BF5> <9EBC> <9BF6> <5E7F> <9BF7> <5EA0> <9BFA> <5EC8> <9BFB> <5ED0> <9BFC> <5ECF> <9C40> <5ED6> <9C41> <5EE3> <9C42> <5EDD> <9C45> <5EE2> <9C46> <5EE1> <9C49> <5EEC> <9C4A> <5EF1> <9C4B> <5EF3> <9C4C> <5EF0> <9C4D> <5EF4> <9C4E> <5EF8> <9C4F> <5EFE> <9C50> <5F03> <9C51> <5F09> <9C52> <5F5D> <9C53> <5F5C> <9C54> <5F0B> <9C55> <5F11> <9C56> <5F16> <9C57> <5F29> <9C58> <5F2D> <9C59> <5F38> <9C5A> <5F41> <9C5B> <5F48> <9C5C> <5F4C> <9C5D> <5F4E> <9C5E> <5F2F> <9C5F> <5F51> <9C62> <5F59> <9C63> <5F61> <9C64> <5F6D> <9C65> <5F73> <9C66> <5F77> <9C67> <5F83> <9C68> <5F82> <9C69> <5F7F> <9C6A> <5F8A> <9C6B> <5F88> <9C6C> <5F91> <9C6D> <5F87> <9C6E> <5F9E> <9C6F> <5F99> <9C70> <5F98> <9C71> <5FA0> <9C72> <5FA8> <9C73> <5FAD> <9C74> <5FBC> <9C75> <5FD6> <9C76> <5FFB> <9C77> <5FE4> <9C78> <5FF8> <9C79> <5FF1> <9C7A> <5FDD> <9C7B> <60B3> <9C7C> <5FFF> <9C7D> <6021> <9C7E> <6060> <9C80> <6019> <9C81> <6010> <9C82> <6029> <9C83> <600E> <9C84> <6031> <9C85> <601B> <9C86> <6015> <9C87> <602B> <9C88> <6026> <9C89> <600F> <9C8A> <603A> <9C8B> <605A> <9C8C> <6041> <9C8D> <606A> <9C8E> <6077> <9C8F> <605F> <9C90> <604A> endbfchar 100 beginbfchar <9C91> <6046> <9C92> <604D> <9C93> <6063> <9C94> <6043> <9C95> <6064> <9C96> <6042> <9C97> <606C> <9C98> <606B> <9C99> <6059> <9C9A> <6081> <9C9B> <608D> <9C9C> <60E7> <9C9D> <6083> <9C9E> <609A> <9C9F> <6084> <9CA0> <609B> <9CA3> <6092> <9CA4> <60A7> <9CA5> <608B> <9CA6> <60E1> <9CA7> <60B8> <9CA8> <60E0> <9CA9> <60D3> <9CAA> <60B4> <9CAB> <5FF0> <9CAC> <60BD> <9CAD> <60C6> <9CAE> <60B5> <9CAF> <60D8> <9CB0> <614D> <9CB1> <6115> <9CB2> <6106> <9CB5> <6100> <9CB6> <60F4> <9CB7> <60FA> <9CB8> <6103> <9CB9> <6121> <9CBA> <60FB> <9CBB> <60F1> <9CBE> <6147> <9CBF> <613E> <9CC0> <6128> <9CC1> <6127> <9CC2> <614A> <9CC3> <613F> <9CC4> <613C> <9CC5> <612C> <9CC6> <6134> <9CC7> <613D> <9CC8> <6142> <9CC9> <6144> <9CCA> <6173> <9CCB> <6177> <9CCF> <616B> <9CD0> <6174> <9CD1> <616F> <9CD2> <6165> <9CD3> <6171> <9CD4> <615F> <9CD5> <615D> <9CD6> <6153> <9CD7> <6175> <9CD8> <6199> <9CD9> <6196> <9CDA> <6187> <9CDB> <61AC> <9CDC> <6194> <9CDD> <619A> <9CDE> <618A> <9CDF> <6191> <9CE0> <61AB> <9CE1> <61AE> <9CE2> <61CC> <9CE3> <61CA> <9CE4> <61C9> <9CE5> <61F7> <9CE6> <61C8> <9CE7> <61C3> <9CE8> <61C6> <9CE9> <61BA> <9CEA> <61CB> <9CEB> <7F79> <9CEC> <61CD> <9CED> <61E6> <9CEE> <61E3> <9CEF> <61F6> <9CF0> <61FA> <9CF1> <61F4> <9CF2> <61FF> <9CF3> <61FD> <9CF4> <61FC> <9CF5> <61FE> <9CF6> <6200> <9CF9> <620D> <9CFA> <620C> <9CFB> <6214> <9CFC> <621B> <9D40> <621E> <9D41> <6221> <9D42> <622A> endbfchar 100 beginbfchar <9D43> <622E> <9D44> <6230> <9D47> <6241> <9D48> <624E> <9D49> <625E> <9D4A> <6263> <9D4B> <625B> <9D4C> <6260> <9D4D> <6268> <9D4E> <627C> <9D4F> <6282> <9D50> <6289> <9D51> <627E> <9D54> <6296> <9D55> <62D4> <9D56> <6283> <9D57> <6294> <9D58> <62D7> <9D59> <62D1> <9D5A> <62BB> <9D5B> <62CF> <9D5C> <62FF> <9D5D> <62C6> <9D5E> <64D4> <9D5F> <62C8> <9D60> <62DC> <9D61> <62CC> <9D62> <62CA> <9D63> <62C2> <9D64> <62C7> <9D65> <629B> <9D66> <62C9> <9D67> <630C> <9D68> <62EE> <9D69> <62F1> <9D6A> <6327> <9D6B> <6302> <9D6C> <6308> <9D6D> <62EF> <9D6E> <62F5> <9D6F> <6350> <9D70> <633E> <9D71> <634D> <9D72> <641C> <9D73> <634F> <9D74> <6396> <9D75> <638E> <9D76> <6380> <9D77> <63AB> <9D78> <6376> <9D79> <63A3> <9D7A> <638F> <9D7B> <6389> <9D7C> <639F> <9D7D> <63B5> <9D7E> <636B> <9D80> <6369> <9D81> <63BE> <9D82> <63E9> <9D83> <63C0> <9D84> <63C6> <9D85> <63E3> <9D86> <63C9> <9D87> <63D2> <9D88> <63F6> <9D89> <63C4> <9D8A> <6416> <9D8B> <6434> <9D8C> <6406> <9D8D> <6413> <9D8E> <6426> <9D8F> <6436> <9D90> <651D> <9D91> <6417> <9D92> <6428> <9D93> <640F> <9D94> <6467> <9D95> <646F> <9D96> <6476> <9D97> <644E> <9D98> <652A> <9D99> <6495> <9D9A> <6493> <9D9B> <64A5> <9D9C> <64A9> <9D9D> <6488> <9D9E> <64BC> <9D9F> <64DA> <9DA0> <64D2> <9DA1> <64C5> <9DA2> <64C7> <9DA3> <64BB> <9DA4> <64D8> <9DA5> <64C2> <9DA6> <64F1> <9DA7> <64E7> <9DA8> <8209> <9DAB> <62AC> <9DAC> <64E3> <9DAD> <64EF> endbfchar 100 beginbfchar <9DAE> <652C> <9DAF> <64F6> <9DB0> <64F4> <9DB1> <64F2> <9DB2> <64FA> <9DB3> <6500> <9DB4> <64FD> <9DB5> <6518> <9DB6> <651C> <9DB7> <6505> <9DB8> <6524> <9DB9> <6523> <9DBA> <652B> <9DBD> <6537> <9DBE> <6536> <9DBF> <6538> <9DC0> <754B> <9DC1> <6548> <9DC2> <6556> <9DC3> <6555> <9DC4> <654D> <9DC5> <6558> <9DC6> <655E> <9DC7> <655D> <9DC8> <6572> <9DC9> <6578> <9DCC> <8B8A> <9DCD> <659B> <9DCE> <659F> <9DCF> <65AB> <9DD0> <65B7> <9DD1> <65C3> <9DD2> <65C6> <9DD3> <65C1> <9DD4> <65C4> <9DD5> <65CC> <9DD6> <65D2> <9DD7> <65DB> <9DD8> <65D9> <9DDB> <65F1> <9DDC> <6772> <9DDD> <660A> <9DDE> <6603> <9DDF> <65FB> <9DE0> <6773> <9DE3> <6634> <9DE4> <661C> <9DE5> <664F> <9DE6> <6644> <9DE7> <6649> <9DE8> <6641> <9DE9> <665E> <9DEA> <665D> <9DEB> <6664> <9DEE> <665F> <9DEF> <6662> <9DF0> <6670> <9DF1> <6683> <9DF2> <6688> <9DF3> <668E> <9DF4> <6689> <9DF5> <6684> <9DF6> <6698> <9DF7> <669D> <9DF8> <66C1> <9DF9> <66B9> <9DFA> <66C9> <9DFB> <66BE> <9DFC> <66BC> <9E40> <66C4> <9E41> <66B8> <9E42> <66D6> <9E43> <66DA> <9E44> <66E0> <9E45> <663F> <9E46> <66E6> <9E47> <66E9> <9E48> <66F0> <9E49> <66F5> <9E4A> <66F7> <9E4B> <670F> <9E4C> <6716> <9E4D> <671E> <9E50> <9738> <9E51> <672E> <9E52> <673F> <9E53> <6736> <9E54> <6741> <9E55> <6738> <9E56> <6737> <9E57> <6746> <9E58> <675E> <9E59> <6760> <9E5A> <6759> <9E5D> <6789> <9E5E> <6770> <9E5F> <67A9> <9E60> <677C> <9E61> <676A> <9E62> <678C> endbfchar 100 beginbfchar <9E63> <678B> <9E64> <67A6> <9E65> <67A1> <9E66> <6785> <9E67> <67B7> <9E68> <67EF> <9E69> <67B4> <9E6A> <67EC> <9E6B> <67B3> <9E6C> <67E9> <9E6D> <67B8> <9E6E> <67E4> <9E6F> <67DE> <9E70> <67DD> <9E71> <67E2> <9E72> <67EE> <9E73> <67B9> <9E74> <67CE> <9E75> <67C6> <9E76> <67E7> <9E77> <6A9C> <9E78> <681E> <9E79> <6846> <9E7A> <6829> <9E7B> <6840> <9E7C> <684D> <9E7D> <6832> <9E7E> <684E> <9E80> <68B3> <9E81> <682B> <9E82> <6859> <9E83> <6863> <9E84> <6877> <9E85> <687F> <9E86> <689F> <9E87> <688F> <9E88> <68AD> <9E89> <6894> <9E8A> <689D> <9E8B> <689B> <9E8C> <6883> <9E8D> <6AAE> <9E8E> <68B9> <9E8F> <6874> <9E90> <68B5> <9E91> <68A0> <9E92> <68BA> <9E93> <690F> <9E94> <688D> <9E95> <687E> <9E96> <6901> <9E97> <68CA> <9E98> <6908> <9E99> <68D8> <9E9A> <6922> <9E9B> <6926> <9E9C> <68E1> <9E9D> <690C> <9E9E> <68CD> <9E9F> <68D4> <9EA0> <68E7> <9EA1> <68D5> <9EA2> <6936> <9EA3> <6912> <9EA4> <6904> <9EA5> <68D7> <9EA6> <68E3> <9EA7> <6925> <9EA8> <68F9> <9EA9> <68E0> <9EAA> <68EF> <9EAB> <6928> <9EAC> <692A> <9EAD> <691A> <9EAE> <6923> <9EAF> <6921> <9EB0> <68C6> <9EB1> <6979> <9EB2> <6977> <9EB3> <695C> <9EB4> <6978> <9EB5> <696B> <9EB6> <6954> <9EB7> <697E> <9EB8> <696E> <9EB9> <6939> <9EBA> <6974> <9EBB> <693D> <9EBC> <6959> <9EBD> <6930> <9EBE> <6961> <9EBF> <695E> <9EC0> <695D> <9EC1> <6981> <9EC2> <696A> <9EC3> <69B2> <9EC4> <69AE> <9EC5> <69D0> <9EC6> <69BF> <9EC7> <69C1> endbfchar 100 beginbfchar <9EC8> <69D3> <9EC9> <69BE> <9ECA> <69CE> <9ECB> <5BE8> <9ECC> <69CA> <9ECD> <69DD> <9ECE> <69BB> <9ECF> <69C3> <9ED0> <69A7> <9ED1> <6A2E> <9ED2> <6991> <9ED3> <69A0> <9ED4> <699C> <9ED5> <6995> <9ED6> <69B4> <9ED7> <69DE> <9ED8> <69E8> <9ED9> <6A02> <9EDA> <6A1B> <9EDB> <69FF> <9EDC> <6B0A> <9EDD> <69F9> <9EDE> <69F2> <9EDF> <69E7> <9EE0> <6A05> <9EE1> <69B1> <9EE2> <6A1E> <9EE3> <69ED> <9EE4> <6A14> <9EE5> <69EB> <9EE6> <6A0A> <9EE7> <6A12> <9EE8> <6AC1> <9EE9> <6A23> <9EEA> <6A13> <9EEB> <6A44> <9EEC> <6A0C> <9EED> <6A72> <9EEE> <6A36> <9EEF> <6A78> <9EF0> <6A47> <9EF1> <6A62> <9EF2> <6A59> <9EF3> <6A66> <9EF4> <6A48> <9EF5> <6A38> <9EF6> <6A22> <9EF7> <6A90> <9EF8> <6A8D> <9EF9> <6AA0> <9EFA> <6A84> <9F40> <6A97> <9F41> <8617> <9F42> <6ABB> <9F43> <6AC3> <9F44> <6AC2> <9F45> <6AB8> <9F46> <6AB3> <9F47> <6AAC> <9F48> <6ADE> <9F49> <6AD1> <9F4A> <6ADF> <9F4B> <6AAA> <9F4C> <6ADA> <9F4D> <6AEA> <9F4E> <6AFB> <9F4F> <6B05> <9F50> <8616> <9F51> <6AFA> <9F52> <6B12> <9F53> <6B16> <9F54> <9B31> <9F55> <6B1F> <9F56> <6B38> <9F57> <6B37> <9F58> <76DC> <9F59> <6B39> <9F5A> <98EE> <9F5B> <6B47> <9F5C> <6B43> <9F5D> <6B49> <9F5E> <6B50> <9F5F> <6B59> <9F60> <6B54> <9F61> <6B5B> <9F62> <6B5F> <9F63> <6B61> <9F68> <6B84> <9F69> <6B83> <9F6A> <6B8D> <9F6B> <6B98> <9F6C> <6B95> <9F6D> <6B9E> <9F6E> <6BA4> <9F71> <6BAF> <9F72> <6BB2> <9F73> <6BB1> <9F74> <6BB3> <9F75> <6BB7> <9F76> <6BBC> endbfchar 100 beginbfchar <9F77> <6BC6> <9F78> <6BCB> <9F79> <6BD3> <9F7A> <6BDF> <9F7B> <6BEC> <9F7C> <6BEB> <9F7D> <6BF3> <9F7E> <6BEF> <9F80> <9EBE> <9F81> <6C08> <9F84> <6C1B> <9F85> <6C24> <9F86> <6C23> <9F87> <6C5E> <9F88> <6C55> <9F89> <6C62> <9F8A> <6C6A> <9F8B> <6C82> <9F8C> <6C8D> <9F8D> <6C9A> <9F8E> <6C81> <9F8F> <6C9B> <9F90> <6C7E> <9F91> <6C68> <9F92> <6C73> <9F93> <6C92> <9F94> <6C90> <9F95> <6CC4> <9F96> <6CF1> <9F97> <6CD3> <9F98> <6CBD> <9F99> <6CD7> <9F9A> <6CC5> <9F9B> <6CDD> <9F9C> <6CAE> <9F9D> <6CB1> <9F9E> <6CBE> <9F9F> <6CBA> <9FA0> <6CDB> <9FA1> <6CEF> <9FA2> <6CD9> <9FA3> <6CEA> <9FA4> <6D1F> <9FA5> <884D> <9FA6> <6D36> <9FA7> <6D2B> <9FA8> <6D3D> <9FA9> <6D38> <9FAA> <6D19> <9FAB> <6D35> <9FAC> <6D33> <9FAD> <6D12> <9FAE> <6D0C> <9FAF> <6D63> <9FB0> <6D93> <9FB1> <6D64> <9FB2> <6D5A> <9FB3> <6D79> <9FB4> <6D59> <9FB5> <6D8E> <9FB6> <6D95> <9FB7> <6FE4> <9FB8> <6D85> <9FB9> <6DF9> <9FBA> <6E15> <9FBB> <6E0A> <9FBC> <6DB5> <9FBD> <6DC7> <9FBE> <6DE6> <9FBF> <6DB8> <9FC0> <6DC6> <9FC1> <6DEC> <9FC2> <6DDE> <9FC3> <6DCC> <9FC4> <6DE8> <9FC5> <6DD2> <9FC6> <6DC5> <9FC7> <6DFA> <9FC8> <6DD9> <9FC9> <6DE4> <9FCA> <6DD5> <9FCB> <6DEA> <9FCC> <6DEE> <9FCD> <6E2D> <9FCE> <6E6E> <9FCF> <6E2E> <9FD0> <6E19> <9FD1> <6E72> <9FD2> <6E5F> <9FD3> <6E3E> <9FD4> <6E23> <9FD5> <6E6B> <9FD6> <6E2B> <9FD7> <6E76> <9FD8> <6E4D> <9FD9> <6E1F> <9FDA> <6E43> <9FDB> <6E3A> <9FDC> <6E4E> <9FDD> <6E24> endbfchar 100 beginbfchar <9FDE> <6EFF> <9FDF> <6E1D> <9FE0> <6E38> <9FE1> <6E82> <9FE2> <6EAA> <9FE3> <6E98> <9FE4> <6EC9> <9FE5> <6EB7> <9FE6> <6ED3> <9FE7> <6EBD> <9FE8> <6EAF> <9FE9> <6EC4> <9FEA> <6EB2> <9FED> <6E8F> <9FEE> <6EA5> <9FEF> <6EC2> <9FF0> <6E9F> <9FF1> <6F41> <9FF2> <6F11> <9FF3> <704C> <9FF4> <6EEC> <9FF5> <6EF8> <9FF6> <6EFE> <9FF7> <6F3F> <9FF8> <6EF2> <9FF9> <6F31> <9FFA> <6EEF> <9FFB> <6F32> <9FFC> <6ECC> <6F3E> <6F13> <6EF7> <6F86> <6F7A> <6F78> <6F81> <6F80> <6F6F> <6F5B> <6FF3> <6F6D> <6F82> <6F7C> <6F58> <6F8E> <6F91> <6FC2> <6F66> <6FB3> <6FA3> <6FA1> <6FA4> <6FB9> <6FC6> <6FAA> <6FDF> <6FD5> <6FEC> <6FD4> <6FD8> <6FF1> <6FEE> <6FDB> <7009> <700B> <6FFA> <7011> <7001> <700F> <6FFE> <701B> <701A> <6F74> <701D> <7018> <701F> <7030> <703E> <7032> <7051> <7063> <7099> <7092> <70AF> <70F1> <70AC> <70B8> <70B3> <70AE> <70DF> <70CB> <70DD> <70D9> <7109> <70FD> <711C> <7119> <7165> <7155> <7188> endbfchar 100 beginbfchar <7166> <7162> <714C> <7156> <716C> <718F> <71FB> <7184> <7195> <71A8> <71AC> <71D7> <71B9> <71BE> <71D2> <71C9> <71D4> <71CE> <71E0> <71EC> <71E7> <71F5> <71FC> <71F9> <71FF> <720D> <7210> <721B> <7228> <722D> <722C> <7230> <7232> <7246> <724B> <7258> <7274> <727E> <7282> <7281> <7287> <7292> <7296> <72A2> <72A7> <72B9> <72B2> <72C3> <72C6> <72C4> <72CE> <72D2> <72E2> <72F9> <72F7> <500F> <7317> <730A> <731C> <7316> <731D> <7334> <732F> <7329> <7325> <733E> <9ED8> <7357> <736A> <7368> <7370> <7378> <7375> <737B> <737A> <73C8> <73B3> <73CE> <73BB> <73C0> <73E5> <73EE> <73DE> <74A2> <7405> <746F> <7425> <73F8> <7432> <743A> <7455> <743F> <745F> <7459> <7441> <745C> <7469> <7470> <7463> <746A> endbfchar 100 beginbfchar <7476> <747E> <748B> <749E> <74A7> <74CA> <74CF> <74D4> <73F1> <74E0> <74E3> <74E7> <74E9> <74EE> <74F2> <74F8> <74F7> <7504> <7503> <7505> <750C> <750E> <750D> <7515> <7513> <751E> <7526> <752C> <753C> <7544> <754D> <754A> <7549> <755B> <7546> <755A> <7569> <7564> <7567> <756B> <756D> <7578> <7576> <7574> <758A> <7589> <7582> <7594> <759A> <759D> <75A5> <75A3> <75C2> <75B3> <75C3> <75B5> <75BD> <75B8> <75BC> <75B1> <75CD> <75CA> <75D2> <75D9> <75E3> <75DE> <75FC> <7601> <75F0> <75FA> <760B> <760D> <7609> <761F> <7627> <7624> <7634> <7630> <763B> <7646> <765C> <7658> <7667> <766C> <7670> <7672> <7676> <7678> <767C> <7680> <7683> <7688> <768B> <768E> <7696> <7693> <76B0> <76B4> <76C2> <76CD> endbfchar 100 beginbfchar <76D6> <76D2> <76DE> <76E1> <76E5> <76E7> <76EA> <862F> <76FB> <7708> <7707> <7704> <7729> <7724> <771E> <771B> <7747> <775A> <7768> <776B> <775B> <7765> <777F> <777E> <7779> <778E> <778B> <7791> <77A0> <779E> <77B0> <77B6> <77B9> <77BF> <77BB> <77C7> <77CD> <77D7> <77DA> <77DC> <77E3> <77EE> <77FC> <780C> <7812> <7926> <7820> <792A> <7845> <788E> <7874> <7886> <787C> <789A> <788C> <78A3> <78B5> <78AA> <78AF> <78D1> <78C6> <78CB> <78D4> <78BE> <78BC> <78C5> <78CA> <78EC> <78E7> <78DA> <78FD> <78F4> <7907> <7912> <7911> <7919> <792C> <792B> <7940> <7960> <7957> <795F> <795A> <7955> <7953> <797A> <797F> <798A> <799D> <79A7> <9F4B> <79AA> <79AE> <79B3> <79C9> <79D5> <79E7> <79EC> <79E1> <79E3> endbfchar 100 beginbfchar <7A08> <7A0D> <7A20> <7A1F> <7980> <7A31> <7A3B> <7A3E> <7A37> <7A43> <7A57> <7A49> <7A69> <9F9D> <7A70> <7A79> <7A7D> <7A88> <7A97> <7A95> <7A98> <7A96> <7AA9> <7AC8> <7AB0> <7AB6> <7AC5> <7AC4> <7ABF> <9083> <7AC7> <7ACA> <7ACD> <7ACF> <7AD5> <7AD3> <7ADD> <7AE6> <7AED> <7AF0> <7B02> <7B0F> <7B0A> <7B06> <7B33> <7B1E> <7B35> <7B28> <7B36> <7B50> <7B7A> <7B04> <7B4D> <7B0B> <7B4C> <7B45> <7B75> <7B65> <7B74> <7B67> <7B6C> <7B6E> <7B9D> <7B98> <7B9F> <7B8D> <7B9C> <7B9A> <7B8B> <7B92> <7B8F> <7B5D> <7B99> <7BCB> <7BC1> <7BCC> <7BCF> <7BB4> <7BC6> <7BDD> <7BE9> <7C11> <7C14> <7BE6> <7BE5> <7C60> <7C00> <7C07> <7C13> <7BF3> <7BF7> <7C17> <7C0D> <7BF6> <7C23> <7C27> <7C2A> <7C1F> <7C37> <7C2B> endbfchar 100 beginbfchar <7C3D> <7C4C> <7C43> <7C54> <7C4F> <7C40> <7C50> <7C58> <7C5F> <7C64> <7C56> <7C65> <7C6C> <7C75> <7C83> <7C90> <7CA4> <7CAD> <7CA2> <7CAB> <7CA1> <7CA8> <7CB3> <7CB2> <7CB1> <7CAE> <7CB9> <7CBD> <7CC0> <7CC5> <7CC2> <7CD8> <7CD2> <7CDC> <7CE2> <9B3B> <7CEF> <7CF2> <7CF4> <7CF6> <7CFA> <7D06> <7D02> <7D1C> <7D15> <7D0A> <7D45> <7D4B> <7D2E> <7D32> <7D3F> <7D35> <7D46> <7D73> <7D56> <7D4E> <7D72> <7D68> <7D6E> <7D4F> <7D63> <7D93> <7D89> <7D5B> <7D8F> <7D7D> <7D9B> <7DBA> <7DAE> <7DA3> <7DB5> <7DC7> <7DBD> <7DAB> <7E3D> <7DA2> <7DAF> <7DDC> <7DB8> <7D9F> <7DB0> <7DD8> <7DDD> <7DE4> <7DDE> <7DFB> <7DF2> <7DE1> <7E05> <7E0A> <7E23> <7E21> <7E12> <7E31> <7E1F> <7E09> <7E0B> <7E22> <7E46> <7E66> endbfchar 100 beginbfchar <7E3B> <7E35> <7E39> <7E43> <7E37> <7E32> <7E3A> <7E67> <7E5D> <7E56> <7E5E> <7E79> <7E6A> <7E69> <7E7C> <7E7B> <7E83> <7DD5> <7E7D> <8FAE> <7E7F> <7E8C> <7E92> <7E90> <7E96> <7E8E> <7F38> <7F3A> <7F45> <7F55> <7F54> <7F58> <7F67> <7F78> <7F82> <7F86> <7F83> <7F88> <7F87> <7F8C> <7F94> <7F9E> <7F9D> <7F9A> <7FA3> <7FAF> <7FB2> <7FB9> <7FAE> <7FB6> <7FB8> <8B71> <7FCA> <7FD5> <7FD4> <7FE1> <7FE6> <7FE9> <7FF3> <7FF9> <98DC> <8006> <8004> <800B> <8012> <801C> <8021> <8028> <803F> <803B> <804A> <8046> <8052> <8058> <805A> <805F> <8062> <8068> <8073> <8072> <8070> <8076> <8079> <807D> <807F> <8084> <8086> <8085> <809B> <8093> <809A> <80AD> <5190> <80AC> <80DB> <80E5> <80D9> <80DD> <80C4> <80DA> endbfchar 100 beginbfchar <80D6> <8109> <80EF> <80F1> <811B> <8129> <8123> <812F> <814B> <968B> <8146> <813E> <8153> <8151> <80FC> <8171> <816E> <8174> <8183> <8188> <818A> <8180> <8182> <81A0> <8195> <81A4> <81A3> <815F> <8193> <81A9> <81B0> <81B5> <81BE> <81B8> <81BD> <81C0> <81C2> <81BA> <81C9> <81CD> <81D1> <81D9> <81D8> <81C8> <81DA> <81E7> <81FE> <8205> <8207> <820A> <820D> <8210> <8216> <8229> <822B> <8238> <8233> <8240> <8259> <8258> <825D> <825A> <825F> <8264> <8262> <8268> <822E> <8271> <827E> <828D> <8292> <82AB> <829F> <82BB> <82AC> <82E1> <82E3> <82DF> <82D2> <82F4> <82F3> <82FA> <8393> <8303> <82FB> <82F9> <82DE> <8306> <82DC> <8309> <82D9> <8335> <8334> <8316> <8332> <8331> <8340> <8339> <8350> <8345> endbfchar 100 beginbfchar <832F> <832B> <8385> <839A> <83AA> <839F> <83A2> <8396> <8323> <838E> <8387> <838A> <837C> <83B5> <8373> <8375> <83A0> <8389> <83A8> <83F4> <8413> <83EB> <83CE> <83FD> <8403> <83D8> <840B> <83C1> <83F7> <8407> <83E0> <83F2> <840D> <8422> <8420> <83BD> <8438> <8506> <83FB> <846D> <842A> <843C> <855A> <8484> <8477> <846B> <84AD> <846E> <8482> <8469> <8446> <842C> <846F> <8479> <8435> <84CA> <8462> <84B9> <84BF> <849F> <84D9> <84CD> <84BB> <84DA> <84D0> <84C1> <84C6> <84D6> <84A1> <8521> <84FF> <84F4> <852C> <851F> <8515> <8514> <84FC> <8540> <8563> <8558> <8548> <8541> <8602> <854B> <8555> <8580> <85A4> <8588> <8591> <858A> <85A8> <856D> <8594> <859B> <85EA> <8587> <859C> <8577> <857E> <8590> endbfchar 100 beginbfchar <85C9> <85BA> <85CF> <85B9> <85D0> <85D5> <85DD> <85E5> <85DC> <85F9> <860A> <8613> <860B> <85FE> <85FA> <8606> <8622> <861A> <8630> <863F> <864D> <4E55> <8654> <865F> <8667> <8671> <8693> <86A3> <86B6> <86AF> <86C4> <86C6> <86B0> <86C9> <8823> <86AB> <86D4> <86DE> <86E9> <86EC> <86DF> <86DB> <86EF> <8712> <8706> <8708> <8700> <8703> <86FB> <8711> <8709> <870D> <86F9> <870A> <8734> <873F> <8737> <873B> <8725> <8729> <871A> <8760> <875F> <8778> <874C> <874E> <8774> <8757> <8768> <876E> <8759> <8753> <8763> <876A> <8805> <87A2> <879F> <8782> <87AF> <87CB> <87BD> <87C0> <87D0> <96D6> <87AB> <87C4> <87B3> <87C7> <87C6> <87BB> <87EF> <87F2> <87E0> <880F> <880D> <87FE> <880E> <87D2> <8811> <8816> endbfchar 100 beginbfchar <8815> <8822> <8821> <8831> <8836> <8839> <8827> <883B> <8844> <8842> <8852> <8859> <885E> <8862> <886B> <8881> <887E> <889E> <8875> <887D> <88B5> <8872> <8882> <8897> <8892> <88AE> <8899> <88A2> <888D> <88A4> <88B0> <88BF> <88B1> <88D4> <88DD> <88F9> <8902> <88FC> <88F4> <88E8> <88F2> <8904> <890C> <890A> <8913> <8943> <891E> <8925> <8941> <8944> <893B> <8936> <8938> <894C> <891D> <8960> <895E> <8966> <8964> <896D> <896A> <896F> <8974> <8977> <897E> <8983> <8988> <898A> <8993> <8998> <89A1> <89A9> <89A6> <89AC> <89AF> <89B2> <89BA> <89BD> <89DA> <89E7> <89F4> <89F8> <8A03> <8A16> <8A10> <8A0C> <8A1B> <8A1D> <8A25> <8A36> <8A41> <8A5B> <8A52> <8A46> <8A48> <8A7C> <8A6D> <8A6C> <8A62> <8A85> endbfchar 100 beginbfchar <8A82> <8A84> <8AA8> <8AA1> <8A91> <8A9A> <8AA3> <8AC4> <8ACD> <8AC2> <8ADA> <8AEB> <8AF3> <8AE7> <8AE4> <8AF1> <8B14> <8AE0> <8AE2> <8AF7> <8ADE> <8ADB> <8B0C> <8B07> <8B1A> <8AE1> <8B16> <8B10> <8B17> <8B20> <8B33> <97AB> <8B26> <8B2B> <8B3E> <8B28> <8B41> <8B4C> <8B4F> <8B4E> <8B49> <8B56> <8B5B> <8B5A> <8B6B> <8B5F> <8B6C> <8B6F> <8B74> <8B7D> <8B80> <8B8C> <8B8E> <8B96> <8C3A> <8C41> <8C3F> <8C48> <8C4C> <8C4E> <8C50> <8C55> <8C62> <8C6C> <8C78> <8C7A> <8C82> <8C89> <8C85> <8C8A> <8C94> <8C7C> <8C98> <621D> <8CAD> <8CAA> <8CBD> <8CAE> <8CB6> <8CC8> <8CC1> <8CE4> <8CE3> <8CDA> <8CFD> <8D0A> <8D07> <8D0F> <8D0D> <8D10> <9F4E> <8D13> <8CCD> <8D14> <8D16> <8D67> <8D6D> <8D71> <8D73> <8D81> endbfchar 100 beginbfchar <8D99> <8DC2> <8DBE> <8DBA> <8DCF> <8DDA> <8DD6> <8DCC> <8DDB> <8DCB> <8DDF> <8DE3> <8DFC> <8DFF> <8E10> <8E1F> <8E42> <8E35> <8E30> <8E34> <8E4A> <8E47> <8E49> <8E4C> <8E50> <8E48> <8E59> <8E64> <8E60> <8E2A> <8E63> <8E55> <8E76> <8E72> <8E7C> <8E81> <8E87> <8E85> <8E84> <8E8B> <8E8A> <8E93> <8E91> <8E94> <8E99> <8EAA> <8EA1> <8EAC> <8EB0> <8EC6> <8EB1> <8EBE> <8EC5> <8EC8> <8ECB> <8EDB> <8EE3> <8EFC> <8EFB> <8EEB> <8EFE> <8F0A> <8F05> <8F15> <8F12> <8F19> <8F13> <8F1C> <8F1F> <8F1B> <8F0C> <8F26> <8F33> <8F3B> <8F39> <8F45> <8F42> <8F3E> <8F4C> <8F49> <8F46> <8F4E> <8F57> <8F5C> <8F9C> <8F9F> <8FA3> <8FAD> <8FAF> <8FB7> <8FDA> <8FE5> <8FE2> <8FEA> <8FEF> <9087> <8FF4> <9005> <9011> <9015> endbfchar 100 beginbfchar <9021> <900D> <901E> <9016> <900B> <9027> <9036> <9035> <9039> <8FF8> <900E> <9049> <903E> <9056> <9058> <905E> <9068> <906F> <9076> <96A8> <9072> <9082> <907D> <9081> <9080> <908A> <9089> <908F> <90A8> <90AF> <90B1> <90B5> <90E2> <90E4> <6248> <90DB> <9102> <9112> <9119> <9132> <9130> <914A> <9156> <9158> <9163> <9165> <9169> <9173> <9172> <918B> <9189> <9182> <91A2> <91AB> <91AF> <91AA> <91B5> <91B4> <91BA> <91C9> <91CB> <91D0> <91D6> <91DF> <91E1> <91DB> <91FC> <921E> <91FF> <9214> <922C> <9215> <9211> <925E> <9257> <9245> <9249> <9264> <9248> <9295> <923F> <924B> <9250> <929C> <9296> <9293> <929B> <925A> <92CF> <92B9> <92B7> <92E9> <930F> <92FA> <9344> <932E> <9319> <9322> <931A> <9323> endbfchar 100 beginbfchar <933A> <9335> <933B> <935C> <9360> <937C> <936E> <9356> <93B0> <9394> <93B9> <93E8> <93E5> <93D8> <93C3> <93DD> <93D0> <93C8> <93E4> <941A> <9414> <9413> <9403> <9407> <9410> <9436> <942B> <9435> <9421> <943A> <9441> <9452> <9444> <945B> <9460> <9462> <945E> <946A> <9229> <9470> <9475> <9477> <947D> <945A> <947C> <947E> <9481> <947F> <9582> <9587> <958A> <9594> <9596> <95A0> <95A8> <95A7> <95AD> <95BC> <95BB> <95B9> <95BE> <95CA> <6FF6> <95C3> <95CD> <95CC> <95D5> <95D4> <95D6> <95DC> <95E1> <95E5> <95E2> <9621> <9628> <9642> <964C> <964F> <964B> <9677> <965C> <965E> <965D> <965F> <9666> <9672> <966C> <968D> <9698> <9695> <9697> <96AA> <96A7> <96B0> <96B4> <96B6> <96CE> <96CB> <96C9> <96CD> endbfchar 100 beginbfchar <894D> <96DC> <970D> <96D5> <96F9> <9704> <9706> <9708> <9713> <970E> <9711> <970F> <9716> <9719> <9724> <972A> <9730> <9739> <9744> <9746> <9748> <9742> <9749> <975C> <9760> <9764> <9766> <9768> <52D2> <976B> <9771> <9779> <9785> <977C> <9781> <977A> <9786> <978B> <979C> <97A8> <97A6> <97A3> <97C3> <97C6> <97C8> <97CB> <97DC> <97ED> <9F4F> <97F2> <7ADF> <97F6> <97F5> <980F> <980C> <9838> <9824> <9821> <9837> <983D> <9846> <984F> <984B> <986B> <9871> <9874> <9873> <98AA> <98AF> <98B1> <98B6> <98C4> <98C3> <98C6> <98E9> <98EB> <9903> <9909> <9912> <9914> <9918> <9921> <9924> <9920> <992C> <992E> <9942> <9949> <9945> <9950> <994B> <994C> <9955> <99A5> <99BC> <99DF> <99DB> <99DD> <99D8> <99D1> endbfchar 100 beginbfchar <99FB> <99F8> <9A01> <9A0F> <9A05> <99E2> <9A19> <9A2B> <9A37> <9A45> <9A42> <9A40> <9A43> <9A3E> <9A55> <9A4D> <9A5B> <9A57> <9A5F> <9A62> <9A65> <9A64> <9A69> <9A6B> <9A6A> <9AAD> <9AB0> <9ABC> <9AC0> <9ACF> <9AD1> <9AE6> <9AEF> <9AEB> <9AEE> <9AF4> <9AF1> <9AF7> <9AFB> <9B06> <9B18> <9B1A> <9B1F> <9B25> <9B32> <9B44> <9B43> <9B4F> <9B51> <9B58> <9B74> <9B93> <9B83> <9B91> <9BA8> <9BB4> <9BC0> <9BCA> <9BB9> <9BC6> <9BCF> <9BE3> <9BE2> <9BE4> <9BD4> <9BE1> <9C3A> <9BF2> <9BF1> <9BF0> <9C15> <9C14> <9C09> <9C13> <9C0C> <9C06> <9C08> <9C12> <9C0A> <9C04> <9C2E> <9C1B> <9C25> <9C24> <9C21> <9C30> <9C47> <9C32> <9C46> <9C3E> <9C5A> <9C60> <9C67> <9C76> <9C78> <9CE7> <9CEC> <9CF0> <9D09> <9D08> endbfchar 100 beginbfchar <9CEB> <9D03> <9D06> <9D2A> <9D26> <9DAF> <9D23> <9D1F> <9D44> <9D15> <9D12> <9D41> <9D3F> <9D3E> <9D46> <9D48> <9D64> <9D51> <9D50> <9D59> <9D72> <9D89> <9D87> <9DAB> <9D6F> <9D7A> <9D9A> <9DA4> <9DA9> <9DB2> <9DC4> <9DC1> <9DBB> <9DB8> <9DBA> <9DC6> <9DCF> <9DC2> <9DD9> <9DD3> <9DF8> <9DE6> <9DED> <9DEF> <9DFD> <9E1E> <9E75> <9E79> <9E7D> <9E81> <9E88> <9E92> <9E95> <9E91> <9E9D> <9EA5> <9EA9> <9EB8> <9EAA> <9EAD> <9761> <9ECC> <9ED4> <9EDC> <9EDE> <9EDD> <9EE0> <9EE5> <9EE8> <9EEF> <9EF4> <9EF9> <76B7> <9F15> <9F21> <9F2C> <9F3E> <9F4A> <9F52> <9F54> <9F63> <9F6C> <9F6A> <9F77> <9F72> <9F76> <9F95> <9F9C> <9FA0> <582F> <69C7> <9059> <7464> <51DC> <7199> <7E8A> <891C> <9348> <9288> <84DC> endbfchar 100 beginbfchar <4FC9> <70BB> <6631> <68C8> <92F9> <66FB> <5F45> <4E28> <4EE1> <4EFC> <4F00> <4F03> <4F39> <4F56> <4F92> <4F8A> <4F9A> <4F94> <4FCD> <5040> <5022> <4FFF> <501E> <5046> <5070> <5042> <5094> <50F4> <50D8> <514A> <5164> <519D> <51BE> <51EC> <5215> <529C> <52A6> <52C0> <52DB> <5300> <5307> <5324> <5372> <5393> <53B2> <53DD> <549C> <548A> <54A9> <54FF> <5586> <5759> <5765> <57AC> <57C8> <57C7> <589E> <58B2> <590B> <5953> <595B> <595D> <5963> <59A4> <59BA> <5B56> <5BC0> <752F> <5BD8> <5BEC> <5C1E> <5CA6> <5CBA> <5CF5> <5D27> <5D53> <5D42> <5D6D> <5DD0> <5F21> <5F34> <5F67> <5FB7> <5FDE> <605D> <6085> <608A> <60DE> <60D5> <6120> <60F2> <6111> <6137> <6130> <6198> <6213> endbfchar 100 beginbfchar <62A6> <63F5> <6460> <649D> <64CE> <654E> <6600> <6615> <663B> <6609> <662E> <661E> <6624> <6665> <6657> <6659> <6673> <6699> <66A0> <66B2> <66BF> <66FA> <670E> <6766> <67BB> <6852> <67C0> <6801> <6844> <68CF> <6968> <6998> <69E2> <6A30> <6A6B> <6A46> <6A73> <6A7E> <6AE2> <6AE4> <6BD6> <6C3F> <6C5C> <6C86> <6C6F> <6CDA> <6D04> <6D87> <6D6F> <6D96> <6DAC> <6DCF> <6DF8> <6DF2> <6DFC> <6E39> <6E5C> <6E27> <6E3C> <6EBF> <6F88> <6FB5> <6FF5> <7005> <7007> <7028> <7085> <70AB> <710F> <7104> <715C> <71C1> <71FE> <72B1> <72BE> <7324> <7377> <73BD> <73C9> <73D6> <73E3> <73D2> <7407> <73F5> <7426> <742A> <7429> <742E> <7462> <7489> <749F> <7501> <756F> <7682> endbfchar 100 beginbfchar <769C> <769E> <769B> <76A6> <7746> <52AF> <7821> <784E> <7864> <787A> <7930> <7994> <799B> <7AD1> <7AE7> <7AEB> <7B9E> <7D48> <7D5C> <7DB7> <7DA0> <7DD6> <7E52> <7F47> <7FA1> <8301> <8362> <837F> <83C7> <83F6> <8448> <84B4> <8553> <8559> <856B> <85B0> <8807> <88F5> <8A12> <8A37> <8A79> <8AA7> <8ABE> <8ADF> <8AF6> <8B53> <8B7F> <8CF0> <8CF4> <8D12> <8D76> <8ECF> <9067> <90DE> <9115> <9127> <91DA> <91D7> <91DE> <9206> <9210> <920A> <923A> <9240> <923C> <924E> <9259> <9251> <9239> <9267> <92A7> <92E7> <92D7> <92D9> <92D0> <92D5> <92E0> <92D3> <9325> <9321> <92FB> <931E> <92FF> <931D> <9302> <9370> <9357> <93A4> <93C6> endbfchar 100 beginbfchar <93DE> <93F8> <9431> <9445> <9448> <9592> <969D> <96AF> <9733> <973B> <9743> <974D> <974F> <9751> <9755> <9857> <9865> <9927> <999E> <9A4E> <9AD9> <9ADC> <9B75> <9B72> <9B8F> <9BB1> <9BBB> <9C00> <9D70> <9D6B> <9E19> <9ED1> <3231> <2116> <2121> <2235> <7E8A> <891C> <9348> <9288> <84DC> <4FC9> <70BB> <6631> <68C8> <92F9> <66FB> <5F45> <4E28> <4EE1> <4EFC> <4F00> <4F03> <4F39> <4F56> <4F92> <4F8A> <4F9A> <4F94> <4FCD> <5040> <5022> <4FFF> <501E> <5046> <5070> <5042> <5094> <50F4> <50D8> <514A> <5164> <519D> <51BE> <51EC> <5215> <529C> <52A6> <52C0> <52DB> <5300> <5307> <5324> <5372> <5393> <53B2> <53DD> endbfchar 100 beginbfchar <549C> <548A> <54A9> <54FF> <5586> <5759> <5765> <57AC> <57C8> <57C7> <589E> <58B2> <590B> <5953> <595B> <595D> <5963> <59A4> <59BA> <5B56> <5BC0> <752F> <5BD8> <5BEC> <5C1E> <5CA6> <5CBA> <5CF5> <5D27> <5D53> <5D42> <5D6D> <5DD0> <5F21> <5F34> <5F67> <5FB7> <5FDE> <605D> <6085> <608A> <60DE> <60D5> <6120> <60F2> <6111> <6137> <6130> <6198> <6213> <62A6> <63F5> <6460> <649D> <64CE> <654E> <6600> <6615> <663B> <6609> <662E> <661E> <6624> <6665> <6657> <6659> <6673> <6699> <66A0> <66B2> <66BF> <66FA> <670E> <6766> <67BB> <6852> <67C0> <6801> <6844> <68CF> <6968> <6998> <69E2> <6A30> <6A6B> <6A46> <6A73> <6A7E> <6AE2> <6AE4> <6BD6> <6C3F> <6C5C> <6C86> <6C6F> endbfchar 100 beginbfchar <6CDA> <6D04> <6D87> <6D6F> <6D96> <6DAC> <6DCF> <6DF8> <6DF2> <6DFC> <6E39> <6E5C> <6E27> <6E3C> <6EBF> <6F88> <6FB5> <6FF5> <7005> <7007> <7028> <7085> <70AB> <710F> <7104> <715C> <71C1> <71FE> <72B1> <72BE> <7324> <7377> <73BD> <73C9> <73D6> <73E3> <73D2> <7407> <73F5> <7426> <742A> <7429> <742E> <7462> <7489> <749F> <7501> <756F> <7682> <769C> <769E> <769B> <76A6> <7746> <52AF> <7821> <784E> <7864> <787A> <7930> <7994> <799B> <7AD1> <7AE7> <7AEB> <7B9E> <7D48> <7D5C> <7DB7> <7DA0> <7DD6> <7E52> <7F47> <7FA1> <8301> <8362> <837F> <83C7> <83F6> <8448> <84B4> <8553> <8559> <856B> <85B0> <8807> <88F5> <8A12> <8A37> <8A79> <8AA7> endbfchar 88 beginbfchar <8ABE> <8ADF> <8AF6> <8B53> <8B7F> <8CF0> <8CF4> <8D12> <8D76> <8ECF> <9067> <90DE> <9115> <9127> <91DA> <91D7> <91DE> <9206> <9210> <920A> <923A> <9240> <923C> <924E> <9259> <9251> <9239> <9267> <92A7> <92E7> <92D7> <92D9> <92D0> <92D5> <92E0> <92D3> <9325> <9321> <92FB> <931E> <92FF> <931D> <9302> <9370> <9357> <93A4> <93C6> <93DE> <93F8> <9431> <9445> <9448> <9592> <969D> <96AF> <9733> <973B> <9743> <974D> <974F> <9751> <9755> <9857> <9865> <9927> <999E> <9A4E> <9AD9> <9ADC> <9B75> <9B72> <9B8F> <9BB1> <9BBB> <9C00> <9D70> <9D6B> <9E19> <9ED1> endbfchar 100 beginbfrange <00> <7F> <0000> <8140> <8142> <3000> <8146> <8147> <814A> <814B> <309B> <8152> <8153> <30FD> <8154> <8155> <309D> <8158> <815A> <3005> <8165> <8166> <2018> <8167> <8168> <201C> <8169> <816A> <816B> <816C> <3014> <8171> <817A> <3008> <8185> <8186> <2266> <818C> <818D> <2032> <8191> <8192> <81A9> <81AA> <2190> <81BA> <81BB> <2286> <81BC> <81BD> <2282> <81C8> <81C9> <2227> <81E1> <81E2> <226A> <81E7> <81E8> <222B> <81F5> <81F6> <2020> <824F> <8258> <8260> <8279> <8281> <829A> <829F> <82F1> <3041> <8340> <837E> <30A1> <8380> <8396> <30E0> <839F> <83AF> <0391> <83B0> <83B6> <03A3> <83BF> <83CF> <03B1> <83D0> <83D6> <03C3> <8440> <8445> <0410> <8447> <8460> <0416> <8470> <8475> <0430> <8477> <847E> <0436> <8480> <8491> <043E> <8740> <8753> <2460> <8754> <875D> <2160> <876F> <8771> <339C> <8772> <8773> <338E> <8785> <8789> <32A4> <878A> <878B> <3231> <879B> <879C> <2229> <8A7A> <8A7B> <984D> <8B9D> <8B9E> <4EAB> <9659> <965A> <5FD8> <9750> <9751> <7336> <98B1> <98B3> <4E9E> <98DD> <98DE> <4FE4> <9940> <9941> <50C9> <994D> <994E> <5101> <9958> <9959> <513F> <995F> <9960> <5169> <996A> <996B> <5195> <996F> <9971> <51A9> <9973> <9974> <51B1> <998E> <998F> <524B> <99A0> <99A1> <52AC> <99AE> <99AF> <52F8> <99DF> <99E0> <542C> <9A46> <9A47> <54E5> <9A56> <9A57> <5556> <9AA8> <9AA9> <5737> <9ABD> <9ABE> <57D2> <9AE4> <9AE6> <58FB> <9AED> <9AEE> <592C> <9B4B> <9B4C> <59D9> <9B56> <9B57> <5A35> <9B65> <9B66> <5AFA> <9B74> <9B75> <5B5A> <9B92> <9B93> <5C07> <9B99> <9B9A> <5C38> <9BE6> <9BE7> <5E36> <9BF2> <9BF3> <5E75> <9BF8> <9BF9> <5EC1> <9C43> <9C44> <5EDA> <9C47> <9C48> <5EE8> <9C60> <9C61> <5F56> <9CA1> <9CA2> <6096> <9CB3> <9CB4> <60F6> <9CBC> <9CBD> <610D> <9CCC> <9CCE> <6158> <9CF7> <9CF8> <6208> <9D45> <9D46> <6232> <9D52> <9D53> <6292> <9DA9> <9DAA> <64E0> <9DBB> <9DBC> <6534> <9DCA> <9DCB> <6582> <9DD9> <9DDA> <65E0> <9DE1> <9DE2> <6635> <9DEC> <9DED> <6667> <9E4E> <9E4F> <6726> <9E5B> <9E5C> <6763> <9EFB> <9EFC> <6AA2> <9F64> <9F65> <6B78> <9F66> <9F67> <6B7F> <9F6F> <9F70> <6BAA> endbfrange 100 beginbfrange <9F82> <9F83> <6C13> <9FEB> <9FEC> <6ED4> <723B> <723F> <72E0> <734E> <74F0> <7586> <75FE> <75F2> <7620> <7647> <7661> <7668> <7699> <76B8> <7725> <7737> <77BC> <79B9> <7A18> <7A61> <7AD9> <7AE1> <7B18> <7B70> <7E59> <7E88> <7E93> <7E9B> <7F4C> <7F50> <7F5F> <7F68> <7FC5> <8018> <8165> <81DF> <81FA> <8201> <826A> <8277> <8317> <8517> <86A9> <868B> <87F6> <88C3> <88D8> <892A> <89BF> <89DC> <8AA5> <8B92> <8B99> <8C8D> <8CB2> <8CFA> <8D04> <8DEA> <8E08> <8E1D> <8F62> <8FF9> <904F> <91C0> <91F5> <93AC> <93D6> <9598> <962E> <96B1> <96B8> <973D> <978F> <97B3> <986F> <991D> <993D> <9951> <9997> <99AD> <99ED> <99F1> <9AD3> <9ADE> <9AE2> <9B22> <9B27> <9B2E> <9B4D> <9B96> <9B9F> <9BD1> <9D5D> <9E1A> <9E8B> <9ECE> <9EF6> <9EFB> endbfrange 45 beginbfrange <9F07> <9F5F> <9F66> <5DB8> <7146> <91ED> <91E4> <9277> <2170> <2170> <2160> <5DB8> <7146> <91ED> <91E4> <9277> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90ms-RKSJ-V b/Resources/cmap/90ms-RKSJ-V deleted file mode 100644 index 7aba69bcb9f..00000000000 --- a/Resources/cmap/90ms-RKSJ-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (90ms-RKSJ-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (90ms-RKSJ-H) %%BeginResource: CMap (90ms-RKSJ-V) %%Title: (90ms-RKSJ-V Adobe Japan1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /90ms-RKSJ-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 2 def end def /CMapName /90ms-RKSJ-V def /CMapVersion 11.001 def /CMapType 1 def /UIDOffset 1020 def /XUID [1 10 25344] def /WMode 1 def 78 begincidrange <8141> <8142> 7887 <8143> <8143> 8268 <8144> <8144> 8274 <8150> <8151> 7889 <815b> <815d> 7891 <8160> <8164> 7894 <8169> <817a> 7899 <8181> <8181> 7917 <81a8> <81a8> 739 <81a9> <81a9> 738 <81aa> <81ab> 736 <81ac> <81ac> 8270 <829f> <829f> 7918 <82a1> <82a1> 7919 <82a3> <82a3> 7920 <82a5> <82a5> 7921 <82a7> <82a7> 7922 <82c1> <82c1> 7923 <82e1> <82e1> 7924 <82e3> <82e3> 7925 <82e5> <82e5> 7926 <82ec> <82ec> 7927 <8340> <8340> 7928 <8342> <8342> 7929 <8344> <8344> 7930 <8346> <8346> 7931 <8348> <8348> 7932 <8362> <8362> 7933 <8383> <8383> 7934 <8385> <8385> 7935 <8387> <8387> 7936 <838e> <838e> 7937 <8395> <8396> 7938 <849f> <849f> 7481 <84a0> <84a0> 7479 <84a1> <84a1> 7495 <84a2> <84a2> 7503 <84a3> <84a3> 7499 <84a4> <84a4> 7491 <84a5> <84a5> 7523 <84a6> <84a6> 7515 <84a7> <84a7> 7531 <84a8> <84a8> 7507 <84a9> <84a9> 7539 <84aa> <84aa> 7482 <84ab> <84ab> 7480 <84ac> <84ac> 7498 <84ad> <84ad> 7506 <84ae> <84ae> 7502 <84af> <84af> 7494 <84b0> <84b0> 7530 <84b1> <84b1> 7522 <84b2> <84b2> 7538 <84b3> <84b3> 7514 <84b4> <84b4> 7554 <84b5> <84b5> 7526 <84b6> <84b6> 7519 <84b7> <84b7> 7534 <84b8> <84b8> 7511 <84b9> <84b9> 7545 <84ba> <84ba> 7527 <84bb> <84bb> 7516 <84bc> <84bc> 7535 <84bd> <84bd> 7508 <84be> <84be> 7542 <875f> <8760> 7940 <8761> <8761> 8329 <8762> <8762> 7943 <8763> <8763> 8339 <8764> <8764> 7945 <8765> <8765> 8338 <8766> <8767> 7947 <8768> <8768> 8344 <8769> <876a> 7950 <876b> <876b> 8348 <876c> <876d> 7953 <876e> <876e> 8349 <8780> <8781> 7956 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90msp-RKSJ-H b/Resources/cmap/90msp-RKSJ-H deleted file mode 100644 index 2e02095ec8c..00000000000 --- a/Resources/cmap/90msp-RKSJ-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (90msp-RKSJ-H) %%Title: (90msp-RKSJ-H Adobe Japan1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 2 def end def /CMapName /90msp-RKSJ-H def /CMapVersion 11.001 def /CMapType 1 def /XUID [1 10 25445] def /WMode 0 def 4 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <8140> <817e> 633 <8180> <81ac> 696 <81b8> <81bf> 741 <81c8> <81ce> 749 <81da> <81e8> 756 <81f0> <81f7> 771 <81fc> <81fc> 779 <824f> <8258> 780 <8260> <8279> 790 <8281> <829a> 816 <829f> <82f1> 842 <8340> <837e> 925 <8380> <8396> 988 <839f> <83b6> 1011 <83bf> <83d6> 1035 <8440> <8460> 1059 <8470> <847e> 1092 <8480> <8491> 1107 <849f> <849f> 7479 <84a0> <84a0> 7481 <84a1> <84a1> 7491 <84a2> <84a2> 7495 <84a3> <84a3> 7503 <84a4> <84a4> 7499 <84a5> <84a5> 7507 <84a6> <84a6> 7523 <84a7> <84a7> 7515 <84a8> <84a8> 7531 <84a9> <84a9> 7539 <84aa> <84aa> 7480 <84ab> <84ab> 7482 <84ac> <84ac> 7494 <84ad> <84ad> 7498 <84ae> <84ae> 7506 <84af> <84af> 7502 <84b0> <84b0> 7514 <84b1> <84b1> 7530 <84b2> <84b2> 7522 <84b3> <84b3> 7538 <84b4> <84b4> 7554 <84b5> <84b5> 7511 <84b6> <84b6> 7526 <84b7> <84b7> 7519 <84b8> <84b8> 7534 <84b9> <84b9> 7542 <84ba> <84ba> 7508 <84bb> <84bb> 7527 <84bc> <84bc> 7516 <84bd> <84bd> 7535 <84be> <84be> 7545 <8740> <875d> 7555 <875f> <8760> 7585 <8761> <8761> 8038 <8762> <8762> 7588 <8763> <8763> 8040 <8764> <8764> 7590 <8765> <8765> 8042 <8766> <8767> 7592 <8768> <8768> 8044 <8769> <876a> 7595 <876b> <876b> 8043 <876c> <876d> 7598 <876e> <876e> 8047 <876f> <8775> 7601 <877e> <877e> 8323 <8780> <8783> 7608 <8784> <8784> 8055 <8785> <878f> 7613 <8790> <8790> 762 <8791> <8791> 761 <8792> <8792> 769 <8793> <8799> 7624 <879a> <879a> 768 <879b> <879c> 7631 <889f> <88fc> 1125 <8940> <897e> 1219 <8980> <89fc> 1282 <8a40> <8a7e> 1407 <8a80> <8afc> 1470 <8b40> <8b7e> 1595 <8b80> <8bfc> 1658 <8c40> <8c7e> 1783 <8c80> <8cfc> 1846 <8d40> <8d7e> 1971 <8d80> <8dfc> 2034 <8e40> <8e7e> 2159 <8e80> <8efc> 2222 <8f40> <8f7e> 2347 <8f80> <8ffc> 2410 <9040> <907e> 2535 <9080> <90fc> 2598 <9140> <917e> 2723 <9180> <91fc> 2786 <9240> <927e> 2911 <9280> <92fc> 2974 <9340> <937e> 3099 <9380> <93fc> 3162 <9440> <947e> 3287 <9480> <94fc> 3350 endcidrange 70 begincidrange <9540> <957e> 3475 <9580> <95fc> 3538 <9640> <967e> 3663 <9680> <96fc> 3726 <9740> <977e> 3851 <9780> <97fc> 3914 <9840> <9872> 4039 <989f> <98fc> 4090 <9940> <997e> 4184 <9980> <99fc> 4247 <9a40> <9a7e> 4372 <9a80> <9afc> 4435 <9b40> <9b7e> 4560 <9b80> <9bfc> 4623 <9c40> <9c7e> 4748 <9c80> <9cfc> 4811 <9d40> <9d7e> 4936 <9d80> <9dfc> 4999 <9e40> <9e7e> 5124 <9e80> <9efc> 5187 <9f40> <9f7e> 5312 <9f80> <9ffc> 5375 326 5500 5563 5688 5751 5876 5939 6064 6127 6252 6315 6440 6503 6628 6691 6816 6879 7004 7067 7192 7255 7380 7443 8284 8359 8422 1993 8474 8546 8609 8092 751 8005 8092 7575 751 8005 7618 7610 8055 768 8359 8394 1993 8474 8518 8581 8706 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90msp-RKSJ-V b/Resources/cmap/90msp-RKSJ-V deleted file mode 100644 index ad598aaf481..00000000000 --- a/Resources/cmap/90msp-RKSJ-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (90msp-RKSJ-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (90msp-RKSJ-H) %%BeginResource: CMap (90msp-RKSJ-V) %%Title: (90msp-RKSJ-V Adobe Japan1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /90msp-RKSJ-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 2 def end def /CMapName /90msp-RKSJ-V def /CMapVersion 11.001 def /CMapType 1 def /XUID [1 10 25446] def /WMode 1 def 78 begincidrange <8141> <8142> 7887 <8143> <8143> 8268 <8144> <8144> 8274 <8150> <8151> 7889 <815b> <815d> 7891 <8160> <8164> 7894 <8169> <817a> 7899 <8181> <8181> 7917 <81a8> <81a8> 739 <81a9> <81a9> 738 <81aa> <81ab> 736 <81ac> <81ac> 8270 <829f> <829f> 7918 <82a1> <82a1> 7919 <82a3> <82a3> 7920 <82a5> <82a5> 7921 <82a7> <82a7> 7922 <82c1> <82c1> 7923 <82e1> <82e1> 7924 <82e3> <82e3> 7925 <82e5> <82e5> 7926 <82ec> <82ec> 7927 <8340> <8340> 7928 <8342> <8342> 7929 <8344> <8344> 7930 <8346> <8346> 7931 <8348> <8348> 7932 <8362> <8362> 7933 <8383> <8383> 7934 <8385> <8385> 7935 <8387> <8387> 7936 <838e> <838e> 7937 <8395> <8396> 7938 <849f> <849f> 7481 <84a0> <84a0> 7479 <84a1> <84a1> 7495 <84a2> <84a2> 7503 <84a3> <84a3> 7499 <84a4> <84a4> 7491 <84a5> <84a5> 7523 <84a6> <84a6> 7515 <84a7> <84a7> 7531 <84a8> <84a8> 7507 <84a9> <84a9> 7539 <84aa> <84aa> 7482 <84ab> <84ab> 7480 <84ac> <84ac> 7498 <84ad> <84ad> 7506 <84ae> <84ae> 7502 <84af> <84af> 7494 <84b0> <84b0> 7530 <84b1> <84b1> 7522 <84b2> <84b2> 7538 <84b3> <84b3> 7514 <84b4> <84b4> 7554 <84b5> <84b5> 7526 <84b6> <84b6> 7519 <84b7> <84b7> 7534 <84b8> <84b8> 7511 <84b9> <84b9> 7545 <84ba> <84ba> 7527 <84bb> <84bb> 7516 <84bc> <84bc> 7535 <84bd> <84bd> 7508 <84be> <84be> 7542 <875f> <8760> 7940 <8761> <8761> 8329 <8762> <8762> 7943 <8763> <8763> 8339 <8764> <8764> 7945 <8765> <8765> 8338 <8766> <8767> 7947 <8768> <8768> 8344 <8769> <876a> 7950 <876b> <876b> 8348 <876c> <876d> 7953 <876e> <876e> 8349 <8780> <8781> 7956 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90pv-RKSJ-H b/Resources/cmap/90pv-RKSJ-H deleted file mode 100644 index 0edce803a46..00000000000 --- a/Resources/cmap/90pv-RKSJ-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (90pv-RKSJ-H) %%Title: (90pv-RKSJ-H Adobe Japan1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 1 def end def /CMapName /90pv-RKSJ-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 870 def /XUID [1 10 25341] def /WMode 0 def 5 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <80> <80> 97 <8140> <817e> 633 <8180> <81ac> 696 <81b8> <81bf> 741 <81c8> <81ce> 749 <81da> <81e8> 756 <81f0> <81f7> 771 <81fc> <81fc> 779 <824f> <8258> 780 <8260> <8279> 790 <8281> <829a> 816 <829f> <82f1> 842 <8340> <837e> 925 <8380> <8396> 988 <839f> <83b6> 1011 <83bf> <83d6> 1035 <8440> <8460> 1059 <8470> <847e> 1092 <8480> <8491> 1107 <849f> <849f> 7479 <84a0> <84a0> 7481 <84a1> <84a1> 7491 <84a2> <84a2> 7495 <84a3> <84a3> 7503 <84a4> <84a4> 7499 <84a5> <84a5> 7507 <84a6> <84a6> 7523 <84a7> <84a7> 7515 <84a8> <84a8> 7531 <84a9> <84a9> 7539 <84aa> <84aa> 7480 <84ab> <84ab> 7482 <84ac> <84ac> 7494 <84ad> <84ad> 7498 <84ae> <84ae> 7506 <84af> <84af> 7502 <84b0> <84b0> 7514 <84b1> <84b1> 7530 <84b2> <84b2> 7522 <84b3> <84b3> 7538 <84b4> <84b4> 7554 <84b5> <84b5> 7511 <84b6> <84b6> 7526 <84b7> <84b7> 7519 <84b8> <84b8> 7534 <84b9> <84b9> 7542 <84ba> <84ba> 7508 <84bb> <84bb> 7527 <84bc> <84bc> 7516 <84bd> <84bd> 7535 <84be> <84be> 7545 <8540> <8553> 7555 <855e> <8571> 8071 <857c> <857e> 8286 <8580> <8585> 8289 <8591> <859a> 8061 <859f> <85a8> 7575 <85a9> <85aa> 8225 <85ab> <85ad> 8295 <85b3> <85bc> 8092 <85bd> <85c1> 8298 <85db> <85f4> 8112 <8640> <8640> 7601 <8641> <8641> 8186 <8642> <8642> 7602 <8643> <8643> 8020 <8644> <8644> 8022 <8645> <8645> 8303 <8646> <8646> 7607 <8647> <8647> 8023 <8648> <8648> 7603 <8649> <8649> 8021 <864a> <864a> 7604 <864b> <864b> 8304 <864c> <864d> 7605 <864e> <864e> 8037 <864f> <8655> 8024 <8656> <8656> 8305 <8657> <8657> 8036 <8658> <8659> 8034 <865a> <865c> 8031 <865d> <865d> 8306 <869b> <869d> 7610 <869e> <869e> 8307 <869f> <869f> 8018 <86a0> <86a1> 8016 <86a2> <86a2> 8019 <86a3> <86a3> 8211 <86a4> <86a4> 8213 <86a5> <86a5> 8212 <86a6> <86a6> 8214 <86b3> <86b3> 8058 <86b4> <86b4> 8056 <86b5> <86b5> 8308 <86c7> <86ca> 8219 <86cb> <86ce> 8309 <86cf> <86cf> 8014 <86d0> <86d0> 8013 <86d1> <86d1> 8012 endcidrange 100 begincidrange <86d2> <86d2> 8011 <86d3> <86d6> 8206 <8740> <8746> 8197 <8747> <8747> 8150 <8748> <8748> 8204 <8749> <8749> 8145 <874a> <874a> 8138 <874b> <874b> 7620 <874c> <874c> 8151 <874d> <874d> 7618 <874e> <874e> 8146 <874f> <874f> 8141 <8750> <8750> 7619 <8751> <8751> 8149 <8752> <8752> 8147 <8753> <8753> 8143 <8754> <8754> 8148 <8755> <8755> 8144 <8756> <8757> 8139 <8758> <8758> 8142 <8791> <8792> 8317 <8793> <8797> 7613 <8798> <8798> 8154 <8799> <8799> 8165 <879a> <879a> 8319 <879b> <879b> 8158 <879c> <879c> 8191 <879d> <879d> 8320 <879e> <879e> 8223 <879f> <879f> 7585 <87a0> <87a0> 8038 <87a1> <87a1> 7588 <87a2> <87a2> 7586 <87a3> <87a3> 8039 <87a4> <87a4> 8183 <87a5> <87a6> 8327 <87a7> <87a7> 8042 <87a8> <87a8> 7592 <87a9> <87aa> 8040 <87ab> <87ab> 7590 <87ac> <87ac> 7593 <87ad> <87ad> 7599 <87ae> <87ae> 8046 <87af> <87af> 8044 <87b0> <87b0> 7595 <87b1> <87b1> 8045 <87b2> <87b2> 8043 <87b3> <87b3> 7596 <87b4> <87b4> 8047 <87b5> <87b5> 7598 <87bd> <87bd> 8048 <87be> <87bf> 8051 <87c0> <87c1> 8049 <87e5> <87e7> 7621 <87e8> <87e8> 8323 <87fa> <87fa> 8054 <87fb> <87fc> 8321 <8840> <8840> 7624 <8841> <8842> 7629 <8854> <8855> 7608 <8868> <8868> 7958 <886a> <886d> 8313 <889f> <88fc> 1125 <8940> <897e> 1219 <8980> <89fc> 1282 <8a40> <8a7e> 1407 <8a80> <8afc> 1470 <8b40> <8b7e> 1595 <8b80> <8bfc> 1658 <8c40> <8c7e> 1783 <8c80> <8cfc> 1846 <8d40> <8d7e> 1971 <8d80> <8dfc> 2034 <8e40> <8e7e> 2159 <8e80> <8efc> 2222 <8f40> <8f7e> 2347 <8f80> <8ffc> 2410 <9040> <907e> 2535 <9080> <90fc> 2598 <9140> <917e> 2723 <9180> <91fc> 2786 <9240> <927e> 2911 <9280> <92fc> 2974 <9340> <937e> 3099 <9380> <93fc> 3162 <9440> <947e> 3287 <9480> <94fc> 3350 <9540> <957e> 3475 <9580> <95fc> 3538 <9640> <967e> 3663 <9680> <96fc> 3726 <9740> <977e> 3851 <9780> <97fc> 3914 <9840> <9872> 4039 <989f> <98fc> 4090 <9940> <997e> 4184 <9980> <99fc> 4247 <9a40> <9a7e> 4372 <9a80> <9afc> 4435 <9b40> <9b7e> 4560 endcidrange 63 begincidrange <9b80> <9bfc> 4623 <9c40> <9c7e> 4748 <9c80> <9cfc> 4811 <9d40> <9d7e> 4936 <9d80> <9dfc> 4999 <9e40> <9e7e> 5124 <9e80> <9efc> 5187 <9f40> <9f7e> 5312 <9f80> <9ffc> 5375 326 5500 5563 5688 5751 5876 5939 6064 6127 6252 6315 6440 6503 6628 6691 6816 6879 7004 7067 7192 7255 7380 7443 8284 7887 7889 7891 7894 7899 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 152 228 124 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90pv-RKSJ-UCS2 b/Resources/cmap/90pv-RKSJ-UCS2 deleted file mode 100644 index 55a2f996355..00000000000 --- a/Resources/cmap/90pv-RKSJ-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (90pv-RKSJ-UCS2C) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (90pv-RKSJ-UCS2C) %%BeginResource: CMap (90pv-RKSJ-UCS2) %%Title: (90pv-RKSJ-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /90pv-RKSJ-UCS2C usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (90pv_RKSJ_UCS2) def /Supplement 2 def end def /CMapName /90pv-RKSJ-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 18 beginbfrange <8591> <8591> <85ab> <85ab> <85ac> <85ac> <85ad> <85ad> <85bf> <85bf> <85c0> <85c0> <85c1> <85c1> <865d> <865d> <869e> <869e> <86d4> <86d4> <21e6f87a> <86d5> <86d5> <21e7f87a> <86d6> <86d6> <21e9f87a> <86ce> <86ce> <8791> <8791> <592720dd> <8792> <8792> <5c0f20dd> <879d> <879d> <63a720dd> <87fb> <87fb> <87fc> <87fc> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90pv-RKSJ-UCS2C b/Resources/cmap/90pv-RKSJ-UCS2C deleted file mode 100644 index 11fb957c3a0..00000000000 --- a/Resources/cmap/90pv-RKSJ-UCS2C +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (90pv-RKSJ-UCS2C) %%Title: (90pv-RKSJ-UCS2C) %%Version: 12.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (90pv_RKSJ_UCS2C) def /Supplement 2 def end def /CMapName /90pv-RKSJ-UCS2C def /CMapVersion 12.000 def /CMapType 1 def /WMode 0 def 5 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 100 beginbfchar <5C> <00A5> <80> <005C> <00A0> <00A9> <2122> <2026> <8143> <8144> <8145> <30FB> <8148> <8149> <814C> <00B4> <814D> <814E> <00A8> <814F> <8150> <203E> <8151> <8156> <3003> <8157> <4EDD> <815B> <30FC> <815C> <2015> <815D> <2010> <815E> <815F> <8160> <301C> <8161> <2016> <8162> <8163> <2026> <8164> <2025> <816D> <816E> <816F> <8170> <817B> <817C> <2212> <817D> <00B1> <817E> <00D7> <8180> <00F7> <8181> <8182> <2260> <8183> <8184> <8187> <221E> <8188> <2234> <8189> <2642> <818A> <2640> <818B> <00B0> <818E> <2103> <818F> <8190> <8193> <8194> <8195> <8196> <8197> <8198> <00A7> <8199> <2606> <819A> <2605> <819B> <25CB> <819C> <25CF> <819D> <25CE> <819E> <25C7> <819F> <25C6> <81A0> <25A1> <81A1> <25A0> <81A2> <25B3> <81A3> <25B2> <81A4> <25BD> <81A5> <25BC> <81A6> <203B> <81A7> <3012> <81A8> <2192> <81AB> <2193> <81AC> <3013> <81B8> <2208> <81B9> <220B> <81BE> <222A> <81BF> <2229> <81CA> <00AC> <81CB> <21D2> <81CC> <21D4> <81CD> <2200> <81CE> <2203> <81DA> <2220> <81DB> <22A5> <81DC> <2312> <81DD> <2202> <81DE> <2207> <81DF> <2261> <81E0> <2252> <81E3> <221A> <81E4> <223D> <81E5> <221D> <81E6> <2235> <81F0> <212B> <81F1> <2030> <81F2> <266F> <81F3> <266D> <81F4> <266A> <81F7> <00B6> endbfchar 100 beginbfchar <81FC> <25EF> <8446> <0401> <8476> <0451> <849F> <2500> <84A0> <2502> <84A1> <250C> <84A2> <2510> <84A3> <2518> <84A4> <2514> <84A5> <251C> <84A6> <252C> <84A7> <2524> <84A8> <2534> <84A9> <253C> <84AA> <2501> <84AB> <2503> <84AC> <250F> <84AD> <2513> <84AE> <251B> <84AF> <2517> <84B0> <2523> <84B1> <2533> <84B2> <252B> <84B3> <253B> <84B4> <254B> <84B5> <2520> <84B6> <252F> <84B7> <2528> <84B8> <2537> <84B9> <253F> <84BA> <251D> <84BB> <2530> <84BC> <2525> <84BD> <2538> <84BE> <2542> <8640> <339C> <8641> <339F> <8642> <339D> <8643> <33A0> <8644> <33A4> <8645> <217F> <8646> <33A1> <8647> <33A5> <8648> <339E> <8649> <33A2> <864A> <338E> <864B> <210A> <864C> <338F> <864D> <33C4> <8650> <2113> <8651> <3398> <8652> <33B3> <8653> <33B2> <8654> <33B1> <8655> <33B0> <8656> <2109> <8657> <33D4> <8658> <33CB> <8659> <3390> <869B> <2116> <869C> <33CD> <869D> <2121> <869F> <2664> <86A0> <2667> <86A3> <2660> <86A4> <2663> <86B3> <3020> <86B4> <260E> <86B5> <3004> <86C7> <261E> <86CA> <261F> <86CB> <21C6> <86CF> <21E8> <86D2> <21E9> <86D3> <27A1> <86D6> <21E9> <8740> <3230> <8747> <3240> <8748> <3237> <874D> <3231> <874E> <323E> <874F> <3234> <8750> <3232> <8751> <323B> <8752> <3236> <8753> <3233> <8754> <3235> <8757> <323F> <8758> <3238> <8799> <3296> <879A> <329D> <879B> <3298> <879C> <329E> <879E> <3299> <879F> <3349> <87A0> <3322> <87A1> <334D> <87A2> <3314> <87A3> <3316> <87A4> <3305> endbfchar 100 beginbfchar <87A5> <3333> <87A6> <334E> <87A7> <3303> <87A8> <3336> <87A9> <3318> <87AA> <3315> <87AB> <3327> <87AC> <3351> <87AD> <334A> <87AE> <3339> <87AF> <3357> <87B0> <330D> <87B1> <3342> <87B2> <3323> <87B3> <3326> <87B4> <333B> <87B5> <332B> <87BD> <3300> <87BE> <331E> <87BF> <332A> <87C0> <3331> <87C1> <3347> <87E5> <337E> <87E6> <337D> <87E7> <337C> <87E8> <337B> <87FA> <337F> <8840> <222E> <8841> <221F> <8842> <22BF> <8854> <301D> <8855> <301F> <8868> <3094> <889F> <4E9C> <88A0> <5516> <88A1> <5A03> <88A2> <963F> <88A3> <54C0> <88A4> <611B> <88A5> <6328> <88A6> <59F6> <88A7> <9022> <88A8> <8475> <88A9> <831C> <88AA> <7A50> <88AB> <60AA> <88AC> <63E1> <88AD> <6E25> <88AE> <65ED> <88AF> <8466> <88B0> <82A6> <88B1> <9BF5> <88B2> <6893> <88B3> <5727> <88B4> <65A1> <88B5> <6271> <88B6> <5B9B> <88B7> <59D0> <88B8> <867B> <88B9> <98F4> <88BA> <7D62> <88BB> <7DBE> <88BC> <9B8E> <88BD> <6216> <88BE> <7C9F> <88BF> <88B7> <88C0> <5B89> <88C1> <5EB5> <88C2> <6309> <88C3> <6697> <88C4> <6848> <88C5> <95C7> <88C6> <978D> <88C7> <674F> <88C8> <4EE5> <88C9> <4F0A> <88CA> <4F4D> <88CB> <4F9D> <88CC> <5049> <88CD> <56F2> <88CE> <5937> <88CF> <59D4> <88D0> <5A01> <88D1> <5C09> <88D2> <60DF> <88D3> <610F> <88D4> <6170> <88D5> <6613> <88D6> <6905> <88D7> <70BA> <88D8> <754F> <88D9> <7570> <88DA> <79FB> <88DB> <7DAD> <88DC> <7DEF> <88DD> <80C3> <88DE> <840E> <88DF> <8863> <88E0> <8B02> <88E1> <9055> endbfchar 100 beginbfchar <88E2> <907A> <88E3> <533B> <88E4> <4E95> <88E5> <4EA5> <88E6> <57DF> <88E7> <80B2> <88E8> <90C1> <88E9> <78EF> <88EA> <4E00> <88EB> <58F1> <88EC> <6EA2> <88ED> <9038> <88EE> <7A32> <88EF> <8328> <88F0> <828B> <88F1> <9C2F> <88F2> <5141> <88F3> <5370> <88F4> <54BD> <88F5> <54E1> <88F6> <56E0> <88F7> <59FB> <88F8> <5F15> <88F9> <98F2> <88FA> <6DEB> <88FB> <80E4> <88FC> <852D> <8940> <9662> <8941> <9670> <8942> <96A0> <8943> <97FB> <8944> <540B> <8945> <53F3> <8946> <5B87> <8947> <70CF> <8948> <7FBD> <8949> <8FC2> <894A> <96E8> <894B> <536F> <894C> <9D5C> <894D> <7ABA> <894E> <4E11> <894F> <7893> <8950> <81FC> <8951> <6E26> <8952> <5618> <8953> <5504> <8954> <6B1D> <8955> <851A> <8956> <9C3B> <8957> <59E5> <8958> <53A9> <8959> <6D66> <895A> <74DC> <895B> <958F> <895C> <5642> <895D> <4E91> <895E> <904B> <895F> <96F2> <8960> <834F> <8961> <990C> <8962> <53E1> <8963> <55B6> <8964> <5B30> <8965> <5F71> <8966> <6620> <8967> <66F3> <8968> <6804> <8969> <6C38> <896A> <6CF3> <896B> <6D29> <896C> <745B> <896D> <76C8> <896E> <7A4E> <896F> <9834> <8970> <82F1> <8971> <885B> <8972> <8A60> <8973> <92ED> <8974> <6DB2> <8975> <75AB> <8976> <76CA> <8977> <99C5> <8978> <60A6> <8979> <8B01> <897A> <8D8A> <897B> <95B2> <897C> <698E> <897D> <53AD> <897E> <5186> <8980> <5712> <8981> <5830> <8982> <5944> <8983> <5BB4> <8984> <5EF6> <8985> <6028> <8986> <63A9> <8987> <63F4> <8988> <6CBF> <8989> <6F14> endbfchar 100 beginbfchar <898A> <708E> <898B> <7114> <898C> <7159> <898D> <71D5> <898E> <733F> <898F> <7E01> <8990> <8276> <8991> <82D1> <8992> <8597> <8993> <9060> <8994> <925B> <8995> <9D1B> <8996> <5869> <8997> <65BC> <8998> <6C5A> <8999> <7525> <899A> <51F9> <899B> <592E> <899C> <5965> <899D> <5F80> <899E> <5FDC> <899F> <62BC> <89A0> <65FA> <89A1> <6A2A> <89A2> <6B27> <89A3> <6BB4> <89A4> <738B> <89A5> <7FC1> <89A6> <8956> <89A7> <9D2C> <89A8> <9D0E> <89A9> <9EC4> <89AA> <5CA1> <89AB> <6C96> <89AC> <837B> <89AD> <5104> <89AE> <5C4B> <89AF> <61B6> <89B0> <81C6> <89B1> <6876> <89B2> <7261> <89B3> <4E59> <89B4> <4FFA> <89B5> <5378> <89B6> <6069> <89B7> <6E29> <89B8> <7A4F> <89B9> <97F3> <89BA> <4E0B> <89BB> <5316> <89BC> <4EEE> <89BD> <4F55> <89BE> <4F3D> <89BF> <4FA1> <89C0> <4F73> <89C1> <52A0> <89C2> <53EF> <89C3> <5609> <89C4> <590F> <89C5> <5AC1> <89C6> <5BB6> <89C7> <5BE1> <89C8> <79D1> <89C9> <6687> <89CA> <679C> <89CB> <67B6> <89CC> <6B4C> <89CD> <6CB3> <89CE> <706B> <89CF> <73C2> <89D0> <798D> <89D1> <79BE> <89D2> <7A3C> <89D3> <7B87> <89D4> <82B1> <89D5> <82DB> <89D6> <8304> <89D7> <8377> <89D8> <83EF> <89D9> <83D3> <89DA> <8766> <89DB> <8AB2> <89DC> <5629> <89DD> <8CA8> <89DE> <8FE6> <89DF> <904E> <89E0> <971E> <89E1> <868A> <89E2> <4FC4> <89E3> <5CE8> <89E4> <6211> <89E5> <7259> <89E6> <753B> <89E7> <81E5> <89E8> <82BD> <89E9> <86FE> <89EA> <8CC0> <89EB> <96C5> <89EC> <9913> <89ED> <99D5> endbfchar 100 beginbfchar <89EE> <4ECB> <89EF> <4F1A> <89F0> <89E3> <89F1> <56DE> <89F2> <584A> <89F3> <58CA> <89F4> <5EFB> <89F5> <5FEB> <89F6> <602A> <89F7> <6094> <89F8> <6062> <89F9> <61D0> <89FA> <6212> <89FB> <62D0> <89FC> <6539> <8A40> <9B41> <8A41> <6666> <8A42> <68B0> <8A43> <6D77> <8A44> <7070> <8A45> <754C> <8A46> <7686> <8A47> <7D75> <8A48> <82A5> <8A49> <87F9> <8A4A> <958B> <8A4B> <968E> <8A4C> <8C9D> <8A4D> <51F1> <8A4E> <52BE> <8A4F> <5916> <8A50> <54B3> <8A51> <5BB3> <8A52> <5D16> <8A53> <6168> <8A54> <6982> <8A55> <6DAF> <8A56> <788D> <8A57> <84CB> <8A58> <8857> <8A59> <8A72> <8A5A> <93A7> <8A5B> <9AB8> <8A5C> <6D6C> <8A5D> <99A8> <8A5E> <86D9> <8A5F> <57A3> <8A60> <67FF> <8A61> <86CE> <8A62> <920E> <8A63> <5283> <8A64> <5687> <8A65> <5404> <8A66> <5ED3> <8A67> <62E1> <8A68> <64B9> <8A69> <683C> <8A6A> <6838> <8A6B> <6BBB> <8A6C> <7372> <8A6D> <78BA> <8A6E> <7A6B> <8A6F> <899A> <8A70> <89D2> <8A71> <8D6B> <8A72> <8F03> <8A73> <90ED> <8A74> <95A3> <8A75> <9694> <8A76> <9769> <8A77> <5B66> <8A78> <5CB3> <8A79> <697D> <8A7C> <639B> <8A7D> <7B20> <8A7E> <6A2B> <8A80> <6A7F> <8A81> <68B6> <8A82> <9C0D> <8A83> <6F5F> <8A84> <5272> <8A85> <559D> <8A86> <6070> <8A87> <62EC> <8A88> <6D3B> <8A89> <6E07> <8A8A> <6ED1> <8A8B> <845B> <8A8C> <8910> <8A8D> <8F44> <8A8E> <4E14> <8A8F> <9C39> <8A90> <53F6> <8A91> <691B> <8A92> <6A3A> <8A93> <9784> <8A94> <682A> <8A95> <515C> <8A96> <7AC3> <8A97> <84B2> endbfchar 100 beginbfchar <8A98> <91DC> <8A99> <938C> <8A9A> <565B> <8A9B> <9D28> <8A9C> <6822> <8A9D> <8305> <8A9E> <8431> <8A9F> <7CA5> <8AA0> <5208> <8AA1> <82C5> <8AA2> <74E6> <8AA3> <4E7E> <8AA4> <4F83> <8AA5> <51A0> <8AA6> <5BD2> <8AA7> <520A> <8AA8> <52D8> <8AA9> <52E7> <8AAA> <5DFB> <8AAB> <559A> <8AAC> <582A> <8AAD> <59E6> <8AAE> <5B8C> <8AAF> <5B98> <8AB0> <5BDB> <8AB1> <5E72> <8AB2> <5E79> <8AB3> <60A3> <8AB4> <611F> <8AB5> <6163> <8AB6> <61BE> <8AB7> <63DB> <8AB8> <6562> <8AB9> <67D1> <8ABA> <6853> <8ABB> <68FA> <8ABC> <6B3E> <8ABD> <6B53> <8ABE> <6C57> <8ABF> <6F22> <8AC0> <6F97> <8AC1> <6F45> <8AC2> <74B0> <8AC3> <7518> <8AC4> <76E3> <8AC5> <770B> <8AC6> <7AFF> <8AC7> <7BA1> <8AC8> <7C21> <8AC9> <7DE9> <8ACA> <7F36> <8ACB> <7FF0> <8ACC> <809D> <8ACD> <8266> <8ACE> <839E> <8ACF> <89B3> <8AD0> <8ACC> <8AD1> <8CAB> <8AD2> <9084> <8AD3> <9451> <8AD4> <9593> <8AD5> <9591> <8AD6> <95A2> <8AD7> <9665> <8AD8> <97D3> <8AD9> <9928> <8ADA> <8218> <8ADB> <4E38> <8ADC> <542B> <8ADD> <5CB8> <8ADE> <5DCC> <8ADF> <73A9> <8AE0> <764C> <8AE1> <773C> <8AE2> <5CA9> <8AE3> <7FEB> <8AE4> <8D0B> <8AE5> <96C1> <8AE6> <9811> <8AE7> <9854> <8AE8> <9858> <8AE9> <4F01> <8AEA> <4F0E> <8AEB> <5371> <8AEC> <559C> <8AED> <5668> <8AEE> <57FA> <8AEF> <5947> <8AF0> <5B09> <8AF1> <5BC4> <8AF2> <5C90> <8AF3> <5E0C> <8AF4> <5E7E> <8AF5> <5FCC> <8AF6> <63EE> <8AF7> <673A> <8AF8> <65D7> <8AF9> <65E2> <8AFA> <671F> <8AFB> <68CB> endbfchar 100 beginbfchar <8AFC> <68C4> <8B40> <6A5F> <8B41> <5E30> <8B42> <6BC5> <8B43> <6C17> <8B44> <6C7D> <8B45> <757F> <8B46> <7948> <8B47> <5B63> <8B48> <7A00> <8B49> <7D00> <8B4A> <5FBD> <8B4B> <898F> <8B4C> <8A18> <8B4D> <8CB4> <8B4E> <8D77> <8B4F> <8ECC> <8B50> <8F1D> <8B51> <98E2> <8B52> <9A0E> <8B53> <9B3C> <8B54> <4E80> <8B55> <507D> <8B56> <5100> <8B57> <5993> <8B58> <5B9C> <8B59> <622F> <8B5A> <6280> <8B5B> <64EC> <8B5C> <6B3A> <8B5D> <72A0> <8B5E> <7591> <8B5F> <7947> <8B60> <7FA9> <8B61> <87FB> <8B62> <8ABC> <8B63> <8B70> <8B64> <63AC> <8B65> <83CA> <8B66> <97A0> <8B67> <5409> <8B68> <5403> <8B69> <55AB> <8B6A> <6854> <8B6B> <6A58> <8B6C> <8A70> <8B6D> <7827> <8B6E> <6775> <8B6F> <9ECD> <8B70> <5374> <8B71> <5BA2> <8B72> <811A> <8B73> <8650> <8B74> <9006> <8B75> <4E18> <8B76> <4E45> <8B77> <4EC7> <8B78> <4F11> <8B79> <53CA> <8B7A> <5438> <8B7B> <5BAE> <8B7C> <5F13> <8B7D> <6025> <8B7E> <6551> <8B80> <673D> <8B81> <6C42> <8B82> <6C72> <8B83> <6CE3> <8B84> <7078> <8B85> <7403> <8B86> <7A76> <8B87> <7AAE> <8B88> <7B08> <8B89> <7D1A> <8B8A> <7CFE> <8B8B> <7D66> <8B8C> <65E7> <8B8D> <725B> <8B8E> <53BB> <8B8F> <5C45> <8B90> <5DE8> <8B91> <62D2> <8B92> <62E0> <8B93> <6319> <8B94> <6E20> <8B95> <865A> <8B96> <8A31> <8B97> <8DDD> <8B98> <92F8> <8B99> <6F01> <8B9A> <79A6> <8B9B> <9B5A> <8B9C> <4EA8> <8B9F> <4F9B> <8BA0> <4FA0> <8BA1> <50D1> <8BA2> <5147> <8BA3> <7AF6> <8BA4> <5171> <8BA5> <51F6> endbfchar 100 beginbfchar <8BA6> <5354> <8BA7> <5321> <8BA8> <537F> <8BA9> <53EB> <8BAA> <55AC> <8BAB> <5883> <8BAC> <5CE1> <8BAD> <5F37> <8BAE> <5F4A> <8BAF> <602F> <8BB0> <6050> <8BB1> <606D> <8BB2> <631F> <8BB3> <6559> <8BB4> <6A4B> <8BB5> <6CC1> <8BB6> <72C2> <8BB7> <72ED> <8BB8> <77EF> <8BB9> <80F8> <8BBA> <8105> <8BBB> <8208> <8BBC> <854E> <8BBD> <90F7> <8BBE> <93E1> <8BBF> <97FF> <8BC0> <9957> <8BC1> <9A5A> <8BC2> <4EF0> <8BC3> <51DD> <8BC4> <5C2D> <8BC5> <6681> <8BC6> <696D> <8BC7> <5C40> <8BC8> <66F2> <8BC9> <6975> <8BCA> <7389> <8BCB> <6850> <8BCC> <7C81> <8BCD> <50C5> <8BCE> <52E4> <8BCF> <5747> <8BD0> <5DFE> <8BD1> <9326> <8BD2> <65A4> <8BD3> <6B23> <8BD4> <6B3D> <8BD5> <7434> <8BD6> <7981> <8BD7> <79BD> <8BD8> <7B4B> <8BD9> <7DCA> <8BDA> <82B9> <8BDB> <83CC> <8BDC> <887F> <8BDD> <895F> <8BDE> <8B39> <8BDF> <8FD1> <8BE0> <91D1> <8BE1> <541F> <8BE2> <9280> <8BE3> <4E5D> <8BE4> <5036> <8BE5> <53E5> <8BE6> <533A> <8BE7> <72D7> <8BE8> <7396> <8BE9> <77E9> <8BEA> <82E6> <8BEB> <8EAF> <8BEC> <99C6> <8BED> <99C8> <8BEE> <99D2> <8BEF> <5177> <8BF0> <611A> <8BF1> <865E> <8BF2> <55B0> <8BF3> <7A7A> <8BF4> <5076> <8BF5> <5BD3> <8BF6> <9047> <8BF7> <9685> <8BF8> <4E32> <8BF9> <6ADB> <8BFA> <91E7> <8BFB> <5C51> <8BFC> <5C48> <8C40> <6398> <8C41> <7A9F> <8C42> <6C93> <8C43> <9774> <8C44> <8F61> <8C45> <7AAA> <8C46> <718A> <8C47> <9688> <8C48> <7C82> <8C49> <6817> <8C4A> <7E70> <8C4B> <6851> <8C4C> <936C> endbfchar 100 beginbfchar <8C4D> <52F2> <8C4E> <541B> <8C4F> <85AB> <8C50> <8A13> <8C51> <7FA4> <8C52> <8ECD> <8C53> <90E1> <8C54> <5366> <8C55> <8888> <8C56> <7941> <8C57> <4FC2> <8C58> <50BE> <8C59> <5211> <8C5A> <5144> <8C5B> <5553> <8C5C> <572D> <8C5D> <73EA> <8C5E> <578B> <8C5F> <5951> <8C60> <5F62> <8C61> <5F84> <8C62> <6075> <8C63> <6176> <8C64> <6167> <8C65> <61A9> <8C66> <63B2> <8C67> <643A> <8C68> <656C> <8C69> <666F> <8C6A> <6842> <8C6B> <6E13> <8C6C> <7566> <8C6D> <7A3D> <8C6E> <7CFB> <8C6F> <7D4C> <8C70> <7D99> <8C71> <7E4B> <8C72> <7F6B> <8C73> <830E> <8C74> <834A> <8C75> <86CD> <8C76> <8A08> <8C77> <8A63> <8C78> <8B66> <8C79> <8EFD> <8C7A> <981A> <8C7B> <9D8F> <8C7C> <82B8> <8C7D> <8FCE> <8C7E> <9BE8> <8C80> <5287> <8C81> <621F> <8C82> <6483> <8C83> <6FC0> <8C84> <9699> <8C85> <6841> <8C86> <5091> <8C87> <6B20> <8C88> <6C7A> <8C89> <6F54> <8C8A> <7A74> <8C8B> <7D50> <8C8C> <8840> <8C8D> <8A23> <8C8E> <6708> <8C8F> <4EF6> <8C90> <5039> <8C91> <5026> <8C92> <5065> <8C93> <517C> <8C94> <5238> <8C95> <5263> <8C96> <55A7> <8C97> <570F> <8C98> <5805> <8C99> <5ACC> <8C9A> <5EFA> <8C9B> <61B2> <8C9C> <61F8> <8C9D> <62F3> <8C9E> <6372> <8C9F> <691C> <8CA0> <6A29> <8CA1> <727D> <8CA2> <72AC> <8CA3> <732E> <8CA4> <7814> <8CA5> <786F> <8CA6> <7D79> <8CA7> <770C> <8CA8> <80A9> <8CA9> <898B> <8CAA> <8B19> <8CAB> <8CE2> <8CAC> <8ED2> <8CAD> <9063> <8CAE> <9375> <8CAF> <967A> <8CB0> <9855> <8CB1> <9A13> endbfchar 100 beginbfchar <8CB2> <9E78> <8CB3> <5143> <8CB4> <539F> <8CB5> <53B3> <8CB6> <5E7B> <8CB7> <5F26> <8CB8> <6E1B> <8CB9> <6E90> <8CBA> <7384> <8CBB> <73FE> <8CBC> <7D43> <8CBD> <8237> <8CBE> <8A00> <8CBF> <8AFA> <8CC0> <9650> <8CC1> <4E4E> <8CC2> <500B> <8CC3> <53E4> <8CC4> <547C> <8CC5> <56FA> <8CC6> <59D1> <8CC7> <5B64> <8CC8> <5DF1> <8CC9> <5EAB> <8CCA> <5F27> <8CCB> <6238> <8CCC> <6545> <8CCD> <67AF> <8CCE> <6E56> <8CCF> <72D0> <8CD0> <7CCA> <8CD1> <88B4> <8CD2> <80A1> <8CD3> <80E1> <8CD4> <83F0> <8CD5> <864E> <8CD6> <8A87> <8CD7> <8DE8> <8CD8> <9237> <8CD9> <96C7> <8CDA> <9867> <8CDB> <9F13> <8CDC> <4E94> <8CDD> <4E92> <8CDE> <4F0D> <8CDF> <5348> <8CE0> <5449> <8CE1> <543E> <8CE2> <5A2F> <8CE3> <5F8C> <8CE4> <5FA1> <8CE5> <609F> <8CE6> <68A7> <8CE7> <6A8E> <8CE8> <745A> <8CE9> <7881> <8CEA> <8A9E> <8CEB> <8AA4> <8CEC> <8B77> <8CED> <9190> <8CEE> <4E5E> <8CEF> <9BC9> <8CF0> <4EA4> <8CF1> <4F7C> <8CF2> <4FAF> <8CF3> <5019> <8CF4> <5016> <8CF5> <5149> <8CF6> <516C> <8CF7> <529F> <8CF8> <52B9> <8CF9> <52FE> <8CFA> <539A> <8CFB> <53E3> <8CFC> <5411> <8D40> <540E> <8D41> <5589> <8D42> <5751> <8D43> <57A2> <8D44> <597D> <8D45> <5B54> <8D46> <5B5D> <8D47> <5B8F> <8D48> <5DE5> <8D49> <5DE7> <8D4A> <5DF7> <8D4B> <5E78> <8D4C> <5E83> <8D4D> <5E9A> <8D4E> <5EB7> <8D4F> <5F18> <8D50> <6052> <8D51> <614C> <8D52> <6297> <8D53> <62D8> <8D54> <63A7> <8D55> <653B> <8D56> <6602> <8D57> <6643> <8D58> <66F4> endbfchar 100 beginbfchar <8D59> <676D> <8D5A> <6821> <8D5B> <6897> <8D5C> <69CB> <8D5D> <6C5F> <8D5E> <6D2A> <8D5F> <6D69> <8D60> <6E2F> <8D61> <6E9D> <8D62> <7532> <8D63> <7687> <8D64> <786C> <8D65> <7A3F> <8D66> <7CE0> <8D67> <7D05> <8D68> <7D18> <8D69> <7D5E> <8D6A> <7DB1> <8D6B> <8015> <8D6C> <8003> <8D6D> <80AF> <8D6E> <80B1> <8D6F> <8154> <8D70> <818F> <8D71> <822A> <8D72> <8352> <8D73> <884C> <8D74> <8861> <8D75> <8B1B> <8D76> <8CA2> <8D77> <8CFC> <8D78> <90CA> <8D79> <9175> <8D7A> <9271> <8D7B> <783F> <8D7C> <92FC> <8D7D> <95A4> <8D7E> <964D> <8D80> <9805> <8D81> <9999> <8D82> <9AD8> <8D83> <9D3B> <8D84> <525B> <8D85> <52AB> <8D86> <53F7> <8D87> <5408> <8D88> <58D5> <8D89> <62F7> <8D8A> <6FE0> <8D8B> <8C6A> <8D8C> <8F5F> <8D8D> <9EB9> <8D8E> <514B> <8D8F> <523B> <8D90> <544A> <8D91> <56FD> <8D92> <7A40> <8D93> <9177> <8D94> <9D60> <8D95> <9ED2> <8D96> <7344> <8D97> <6F09> <8D98> <8170> <8D99> <7511> <8D9A> <5FFD> <8D9B> <60DA> <8D9C> <9AA8> <8D9D> <72DB> <8D9E> <8FBC> <8D9F> <6B64> <8DA0> <9803> <8DA1> <4ECA> <8DA2> <56F0> <8DA3> <5764> <8DA4> <58BE> <8DA5> <5A5A> <8DA6> <6068> <8DA7> <61C7> <8DA8> <660F> <8DA9> <6606> <8DAA> <6839> <8DAB> <68B1> <8DAC> <6DF7> <8DAD> <75D5> <8DAE> <7D3A> <8DAF> <826E> <8DB0> <9B42> <8DB1> <4E9B> <8DB2> <4F50> <8DB3> <53C9> <8DB4> <5506> <8DB5> <5D6F> <8DB6> <5DE6> <8DB7> <5DEE> <8DB8> <67FB> <8DB9> <6C99> <8DBA> <7473> <8DBB> <7802> <8DBC> <8A50> <8DBD> <9396> endbfchar 100 beginbfchar <8DBE> <88DF> <8DBF> <5750> <8DC0> <5EA7> <8DC1> <632B> <8DC2> <50B5> <8DC3> <50AC> <8DC4> <518D> <8DC5> <6700> <8DC6> <54C9> <8DC7> <585E> <8DC8> <59BB> <8DC9> <5BB0> <8DCA> <5F69> <8DCB> <624D> <8DCC> <63A1> <8DCD> <683D> <8DCE> <6B73> <8DCF> <6E08> <8DD0> <707D> <8DD1> <91C7> <8DD2> <7280> <8DD3> <7815> <8DD4> <7826> <8DD5> <796D> <8DD6> <658E> <8DD7> <7D30> <8DD8> <83DC> <8DD9> <88C1> <8DDA> <8F09> <8DDB> <969B> <8DDC> <5264> <8DDD> <5728> <8DDE> <6750> <8DDF> <7F6A> <8DE0> <8CA1> <8DE1> <51B4> <8DE2> <5742> <8DE3> <962A> <8DE4> <583A> <8DE5> <698A> <8DE6> <80B4> <8DE7> <54B2> <8DE8> <5D0E> <8DE9> <57FC> <8DEA> <7895> <8DEB> <9DFA> <8DEC> <4F5C> <8DED> <524A> <8DEE> <548B> <8DEF> <643E> <8DF0> <6628> <8DF1> <6714> <8DF2> <67F5> <8DF3> <7A84> <8DF4> <7B56> <8DF5> <7D22> <8DF6> <932F> <8DF7> <685C> <8DF8> <9BAD> <8DF9> <7B39> <8DFA> <5319> <8DFB> <518A> <8DFC> <5237> <8E40> <5BDF> <8E41> <62F6> <8E42> <64AE> <8E43> <64E6> <8E44> <672D> <8E45> <6BBA> <8E46> <85A9> <8E47> <96D1> <8E48> <7690> <8E49> <9BD6> <8E4A> <634C> <8E4B> <9306> <8E4C> <9BAB> <8E4D> <76BF> <8E4E> <6652> <8E4F> <4E09> <8E50> <5098> <8E51> <53C2> <8E52> <5C71> <8E53> <60E8> <8E54> <6492> <8E55> <6563> <8E56> <685F> <8E57> <71E6> <8E58> <73CA> <8E59> <7523> <8E5A> <7B97> <8E5B> <7E82> <8E5C> <8695> <8E5D> <8B83> <8E5E> <8CDB> <8E5F> <9178> <8E60> <9910> <8E61> <65AC> <8E62> <66AB> <8E63> <6B8B> <8E64> <4ED5> endbfchar 100 beginbfchar <8E65> <4ED4> <8E66> <4F3A> <8E67> <4F7F> <8E68> <523A> <8E69> <53F8> <8E6A> <53F2> <8E6B> <55E3> <8E6C> <56DB> <8E6D> <58EB> <8E6E> <59CB> <8E6F> <59C9> <8E70> <59FF> <8E71> <5B50> <8E72> <5C4D> <8E73> <5E02> <8E74> <5E2B> <8E75> <5FD7> <8E76> <601D> <8E77> <6307> <8E78> <652F> <8E79> <5B5C> <8E7A> <65AF> <8E7B> <65BD> <8E7C> <65E8> <8E7D> <679D> <8E7E> <6B62> <8E80> <6B7B> <8E81> <6C0F> <8E82> <7345> <8E83> <7949> <8E84> <79C1> <8E85> <7CF8> <8E86> <7D19> <8E87> <7D2B> <8E88> <80A2> <8E89> <8102> <8E8A> <81F3> <8E8B> <8996> <8E8C> <8A5E> <8E8D> <8A69> <8E8E> <8A66> <8E8F> <8A8C> <8E90> <8AEE> <8E91> <8CC7> <8E92> <8CDC> <8E93> <96CC> <8E94> <98FC> <8E95> <6B6F> <8E96> <4E8B> <8E97> <4F3C> <8E98> <4F8D> <8E99> <5150> <8E9A> <5B57> <8E9B> <5BFA> <8E9C> <6148> <8E9D> <6301> <8E9E> <6642> <8E9F> <6B21> <8EA0> <6ECB> <8EA1> <6CBB> <8EA2> <723E> <8EA3> <74BD> <8EA4> <75D4> <8EA5> <78C1> <8EA6> <793A> <8EA7> <800C> <8EA8> <8033> <8EA9> <81EA> <8EAA> <8494> <8EAB> <8F9E> <8EAC> <6C50> <8EAD> <9E7F> <8EAE> <5F0F> <8EAF> <8B58> <8EB0> <9D2B> <8EB1> <7AFA> <8EB2> <8EF8> <8EB3> <5B8D> <8EB4> <96EB> <8EB5> <4E03> <8EB6> <53F1> <8EB7> <57F7> <8EB8> <5931> <8EB9> <5AC9> <8EBA> <5BA4> <8EBB> <6089> <8EBC> <6E7F> <8EBD> <6F06> <8EBE> <75BE> <8EBF> <8CEA> <8EC0> <5B9F> <8EC1> <8500> <8EC2> <7BE0> <8EC3> <5072> <8EC4> <67F4> <8EC5> <829D> <8EC6> <5C61> <8EC7> <854A> <8EC8> <7E1E> <8EC9> <820E> endbfchar 100 beginbfchar <8ECA> <5199> <8ECB> <5C04> <8ECC> <6368> <8ECD> <8D66> <8ECE> <659C> <8ECF> <716E> <8ED0> <793E> <8ED1> <7D17> <8ED2> <8005> <8ED3> <8B1D> <8ED4> <8ECA> <8ED5> <906E> <8ED6> <86C7> <8ED7> <90AA> <8ED8> <501F> <8ED9> <52FA> <8EDA> <5C3A> <8EDB> <6753> <8EDC> <707C> <8EDD> <7235> <8EDE> <914C> <8EDF> <91C8> <8EE0> <932B> <8EE1> <82E5> <8EE2> <5BC2> <8EE3> <5F31> <8EE4> <60F9> <8EE5> <4E3B> <8EE6> <53D6> <8EE7> <5B88> <8EE8> <624B> <8EE9> <6731> <8EEA> <6B8A> <8EEB> <72E9> <8EEC> <73E0> <8EED> <7A2E> <8EEE> <816B> <8EEF> <8DA3> <8EF0> <9152> <8EF1> <9996> <8EF2> <5112> <8EF3> <53D7> <8EF4> <546A> <8EF5> <5BFF> <8EF6> <6388> <8EF7> <6A39> <8EF8> <7DAC> <8EF9> <9700> <8EFA> <56DA> <8EFB> <53CE> <8EFC> <5468> <8F40> <5B97> <8F41> <5C31> <8F42> <5DDE> <8F43> <4FEE> <8F44> <6101> <8F45> <62FE> <8F46> <6D32> <8F47> <79C0> <8F48> <79CB> <8F49> <7D42> <8F4A> <7E4D> <8F4B> <7FD2> <8F4C> <81ED> <8F4D> <821F> <8F4E> <8490> <8F4F> <8846> <8F50> <8972> <8F51> <8B90> <8F52> <8E74> <8F53> <8F2F> <8F54> <9031> <8F55> <914B> <8F56> <916C> <8F57> <96C6> <8F58> <919C> <8F59> <4EC0> <8F5A> <4F4F> <8F5B> <5145> <8F5C> <5341> <8F5D> <5F93> <8F5E> <620E> <8F5F> <67D4> <8F60> <6C41> <8F61> <6E0B> <8F62> <7363> <8F63> <7E26> <8F64> <91CD> <8F65> <9283> <8F66> <53D4> <8F67> <5919> <8F68> <5BBF> <8F69> <6DD1> <8F6A> <795D> <8F6B> <7E2E> <8F6C> <7C9B> <8F6D> <587E> <8F6E> <719F> <8F6F> <51FA> <8F70> <8853> endbfchar 100 beginbfchar <8F71> <8FF0> <8F72> <4FCA> <8F73> <5CFB> <8F74> <6625> <8F75> <77AC> <8F76> <7AE3> <8F77> <821C> <8F78> <99FF> <8F79> <51C6> <8F7A> <5FAA> <8F7B> <65EC> <8F7C> <696F> <8F7D> <6B89> <8F7E> <6DF3> <8F80> <6E96> <8F81> <6F64> <8F82> <76FE> <8F83> <7D14> <8F84> <5DE1> <8F85> <9075> <8F86> <9187> <8F87> <9806> <8F88> <51E6> <8F89> <521D> <8F8A> <6240> <8F8B> <6691> <8F8C> <66D9> <8F8D> <6E1A> <8F8E> <5EB6> <8F8F> <7DD2> <8F90> <7F72> <8F91> <66F8> <8F92> <85AF> <8F93> <85F7> <8F94> <8AF8> <8F95> <52A9> <8F96> <53D9> <8F97> <5973> <8F98> <5E8F> <8F99> <5F90> <8F9A> <6055> <8F9B> <92E4> <8F9C> <9664> <8F9D> <50B7> <8F9E> <511F> <8F9F> <52DD> <8FA0> <5320> <8FA1> <5347> <8FA2> <53EC> <8FA3> <54E8> <8FA4> <5546> <8FA5> <5531> <8FA6> <5617> <8FA7> <5968> <8FA8> <59BE> <8FA9> <5A3C> <8FAA> <5BB5> <8FAB> <5C06> <8FAC> <5C0F> <8FAD> <5C11> <8FAE> <5C1A> <8FAF> <5E84> <8FB0> <5E8A> <8FB1> <5EE0> <8FB2> <5F70> <8FB3> <627F> <8FB4> <6284> <8FB5> <62DB> <8FB6> <638C> <8FB7> <6377> <8FB8> <6607> <8FB9> <660C> <8FBA> <662D> <8FBB> <6676> <8FBC> <677E> <8FBD> <68A2> <8FBE> <6A1F> <8FBF> <6A35> <8FC0> <6CBC> <8FC1> <6D88> <8FC2> <6E09> <8FC3> <6E58> <8FC4> <713C> <8FC5> <7126> <8FC6> <7167> <8FC7> <75C7> <8FC8> <7701> <8FC9> <785D> <8FCA> <7901> <8FCB> <7965> <8FCC> <79F0> <8FCD> <7AE0> <8FCE> <7B11> <8FCF> <7CA7> <8FD0> <7D39> <8FD1> <8096> <8FD2> <83D6> <8FD3> <848B> <8FD4> <8549> <8FD5> <885D> endbfchar 100 beginbfchar <8FD6> <88F3> <8FD7> <8A1F> <8FD8> <8A3C> <8FD9> <8A54> <8FDA> <8A73> <8FDB> <8C61> <8FDC> <8CDE> <8FDD> <91A4> <8FDE> <9266> <8FDF> <937E> <8FE0> <9418> <8FE1> <969C> <8FE2> <9798> <8FE3> <4E0A> <8FE4> <4E08> <8FE5> <4E1E> <8FE6> <4E57> <8FE7> <5197> <8FE8> <5270> <8FE9> <57CE> <8FEA> <5834> <8FEB> <58CC> <8FEC> <5B22> <8FED> <5E38> <8FEE> <60C5> <8FEF> <64FE> <8FF0> <6761> <8FF1> <6756> <8FF2> <6D44> <8FF3> <72B6> <8FF4> <7573> <8FF5> <7A63> <8FF6> <84B8> <8FF7> <8B72> <8FF8> <91B8> <8FF9> <9320> <8FFA> <5631> <8FFB> <57F4> <8FFC> <98FE> <9040> <62ED> <9041> <690D> <9042> <6B96> <9043> <71ED> <9044> <7E54> <9045> <8077> <9046> <8272> <9047> <89E6> <9048> <98DF> <9049> <8755> <904A> <8FB1> <904B> <5C3B> <904C> <4F38> <904D> <4FE1> <904E> <4FB5> <904F> <5507> <9050> <5A20> <9051> <5BDD> <9052> <5BE9> <9053> <5FC3> <9054> <614E> <9055> <632F> <9056> <65B0> <9057> <664B> <9058> <68EE> <9059> <699B> <905A> <6D78> <905B> <6DF1> <905C> <7533> <905D> <75B9> <905E> <771F> <905F> <795E> <9060> <79E6> <9061> <7D33> <9062> <81E3> <9063> <82AF> <9064> <85AA> <9065> <89AA> <9066> <8A3A> <9067> <8EAB> <9068> <8F9B> <9069> <9032> <906A> <91DD> <906B> <9707> <906C> <4EBA> <906D> <4EC1> <906E> <5203> <906F> <5875> <9070> <58EC> <9071> <5C0B> <9072> <751A> <9073> <5C3D> <9074> <814E> <9075> <8A0A> <9076> <8FC5> <9077> <9663> <9078> <976D> <9079> <7B25> <907A> <8ACF> <907B> <9808> <907C> <9162> endbfchar 100 beginbfchar <907D> <56F3> <907E> <53A8> <9080> <9017> <9081> <5439> <9082> <5782> <9083> <5E25> <9084> <63A8> <9085> <6C34> <9086> <708A> <9087> <7761> <9088> <7C8B> <9089> <7FE0> <908A> <8870> <908B> <9042> <908C> <9154> <908D> <9310> <908E> <9318> <908F> <968F> <9090> <745E> <9091> <9AC4> <9092> <5D07> <9093> <5D69> <9094> <6570> <9095> <67A2> <9096> <8DA8> <9097> <96DB> <9098> <636E> <9099> <6749> <909A> <6919> <909B> <83C5> <909C> <9817> <909D> <96C0> <909E> <88FE> <909F> <6F84> <90A0> <647A> <90A1> <5BF8> <90A2> <4E16> <90A3> <702C> <90A4> <755D> <90A5> <662F> <90A6> <51C4> <90A7> <5236> <90A8> <52E2> <90A9> <59D3> <90AA> <5F81> <90AB> <6027> <90AC> <6210> <90AD> <653F> <90AE> <6574> <90AF> <661F> <90B0> <6674> <90B1> <68F2> <90B2> <6816> <90B3> <6B63> <90B4> <6E05> <90B5> <7272> <90B6> <751F> <90B7> <76DB> <90B8> <7CBE> <90B9> <8056> <90BA> <58F0> <90BB> <88FD> <90BC> <897F> <90BD> <8AA0> <90BE> <8A93> <90BF> <8ACB> <90C0> <901D> <90C1> <9192> <90C2> <9752> <90C3> <9759> <90C4> <6589> <90C5> <7A0E> <90C6> <8106> <90C7> <96BB> <90C8> <5E2D> <90C9> <60DC> <90CA> <621A> <90CB> <65A5> <90CC> <6614> <90CD> <6790> <90CE> <77F3> <90CF> <7A4D> <90D0> <7C4D> <90D1> <7E3E> <90D2> <810A> <90D3> <8CAC> <90D4> <8D64> <90D5> <8DE1> <90D6> <8E5F> <90D7> <78A9> <90D8> <5207> <90D9> <62D9> <90DA> <63A5> <90DB> <6442> <90DC> <6298> <90DD> <8A2D> <90DE> <7A83> <90DF> <7BC0> <90E0> <8AAC> <90E1> <96EA> endbfchar 100 beginbfchar <90E2> <7D76> <90E3> <820C> <90E4> <8749> <90E5> <4ED9> <90E6> <5148> <90E7> <5343> <90E8> <5360> <90E9> <5BA3> <90EA> <5C02> <90EB> <5C16> <90EC> <5DDD> <90ED> <6226> <90EE> <6247> <90EF> <64B0> <90F0> <6813> <90F1> <6834> <90F2> <6CC9> <90F3> <6D45> <90F4> <6D17> <90F5> <67D3> <90F6> <6F5C> <90F7> <714E> <90F8> <717D> <90F9> <65CB> <90FA> <7A7F> <90FB> <7BAD> <90FC> <7DDA> <9140> <7E4A> <9141> <7FA8> <9142> <817A> <9143> <821B> <9144> <8239> <9145> <85A6> <9146> <8A6E> <9147> <8CCE> <9148> <8DF5> <9149> <9078> <914A> <9077> <914B> <92AD> <914C> <9291> <914D> <9583> <914E> <9BAE> <914F> <524D> <9150> <5584> <9151> <6F38> <9152> <7136> <9153> <5168> <9154> <7985> <9155> <7E55> <9156> <81B3> <9157> <7CCE> <9158> <564C> <9159> <5851> <915A> <5CA8> <915B> <63AA> <915C> <66FE> <915D> <66FD> <915E> <695A> <915F> <72D9> <9160> <758F> <9161> <758E> <9162> <790E> <9163> <7956> <9164> <79DF> <9165> <7C97> <9166> <7D20> <9167> <7D44> <9168> <8607> <9169> <8A34> <916A> <963B> <916B> <9061> <916C> <9F20> <916D> <50E7> <916E> <5275> <916F> <53CC> <9170> <53E2> <9171> <5009> <9172> <55AA> <9173> <58EE> <9174> <594F> <9175> <723D> <9176> <5B8B> <9177> <5C64> <9178> <531D> <9179> <60E3> <917A> <60F3> <917B> <635C> <917C> <6383> <917D> <633F> <917E> <63BB> <9180> <64CD> <9181> <65E9> <9182> <66F9> <9183> <5DE3> <9184> <69CD> <9185> <69FD> <9186> <6F15> <9187> <71E5> <9188> <4E89> <9189> <75E9> endbfchar 100 beginbfchar <918A> <76F8> <918B> <7A93> <918C> <7CDF> <918D> <7DCF> <918E> <7D9C> <918F> <8061> <9190> <8349> <9191> <8358> <9192> <846C> <9193> <84BC> <9194> <85FB> <9195> <88C5> <9196> <8D70> <9197> <9001> <9198> <906D> <9199> <9397> <919A> <971C> <919B> <9A12> <919C> <50CF> <919D> <5897> <919E> <618E> <919F> <81D3> <91A0> <8535> <91A1> <8D08> <91A2> <9020> <91A3> <4FC3> <91A4> <5074> <91A5> <5247> <91A6> <5373> <91A7> <606F> <91A8> <6349> <91A9> <675F> <91AA> <6E2C> <91AB> <8DB3> <91AC> <901F> <91AD> <4FD7> <91AE> <5C5E> <91AF> <8CCA> <91B0> <65CF> <91B1> <7D9A> <91B2> <5352> <91B3> <8896> <91B4> <5176> <91B5> <63C3> <91B6> <5B58> <91B7> <5B6B> <91B8> <5C0A> <91B9> <640D> <91BA> <6751> <91BB> <905C> <91BC> <4ED6> <91BD> <591A> <91BE> <592A> <91BF> <6C70> <91C0> <8A51> <91C1> <553E> <91C2> <5815> <91C3> <59A5> <91C4> <60F0> <91C5> <6253> <91C6> <67C1> <91C7> <8235> <91C8> <6955> <91C9> <9640> <91CA> <99C4> <91CB> <9A28> <91CC> <4F53> <91CD> <5806> <91CE> <5BFE> <91CF> <8010> <91D0> <5CB1> <91D1> <5E2F> <91D2> <5F85> <91D3> <6020> <91D4> <614B> <91D5> <6234> <91D6> <66FF> <91D7> <6CF0> <91D8> <6EDE> <91D9> <80CE> <91DA> <817F> <91DB> <82D4> <91DC> <888B> <91DD> <8CB8> <91DE> <9000> <91DF> <902E> <91E0> <968A> <91E1> <9EDB> <91E2> <9BDB> <91E3> <4EE3> <91E4> <53F0> <91E5> <5927> <91E6> <7B2C> <91E7> <918D> <91E8> <984C> <91E9> <9DF9> <91EA> <6EDD> <91EB> <7027> <91EC> <5353> <91ED> <5544> endbfchar 100 beginbfchar <91EE> <5B85> <91EF> <6258> <91F0> <629E> <91F1> <62D3> <91F2> <6CA2> <91F3> <6FEF> <91F4> <7422> <91F5> <8A17> <91F6> <9438> <91F7> <6FC1> <91F8> <8AFE> <91F9> <8338> <91FA> <51E7> <91FB> <86F8> <91FC> <53EA> <9240> <53E9> <9241> <4F46> <9242> <9054> <9243> <8FB0> <9244> <596A> <9245> <8131> <9246> <5DFD> <9247> <7AEA> <9248> <8FBF> <9249> <68DA> <924A> <8C37> <924B> <72F8> <924C> <9C48> <924D> <6A3D> <924E> <8AB0> <924F> <4E39> <9250> <5358> <9251> <5606> <9252> <5766> <9253> <62C5> <9254> <63A2> <9255> <65E6> <9256> <6B4E> <9257> <6DE1> <9258> <6E5B> <9259> <70AD> <925A> <77ED> <925B> <7AEF> <925C> <7BAA> <925D> <7DBB> <925E> <803D> <925F> <80C6> <9260> <86CB> <9261> <8A95> <9262> <935B> <9263> <56E3> <9264> <58C7> <9265> <5F3E> <9266> <65AD> <9267> <6696> <9268> <6A80> <9269> <6BB5> <926A> <7537> <926B> <8AC7> <926C> <5024> <926D> <77E5> <926E> <5730> <926F> <5F1B> <9270> <6065> <9271> <667A> <9272> <6C60> <9273> <75F4> <9274> <7A1A> <9275> <7F6E> <9276> <81F4> <9277> <8718> <9278> <9045> <9279> <99B3> <927A> <7BC9> <927B> <755C> <927C> <7AF9> <927D> <7B51> <927E> <84C4> <9280> <9010> <9281> <79E9> <9282> <7A92> <9283> <8336> <9284> <5AE1> <9285> <7740> <9286> <4E2D> <9287> <4EF2> <9288> <5B99> <9289> <5FE0> <928A> <62BD> <928B> <663C> <928C> <67F1> <928D> <6CE8> <928E> <866B> <928F> <8877> <9290> <8A3B> <9291> <914E> <9292> <92F3> <9293> <99D0> <9294> <6A17> <9295> <7026> endbfchar 100 beginbfchar <9296> <732A> <9297> <82E7> <9298> <8457> <9299> <8CAF> <929A> <4E01> <929B> <5146> <929C> <51CB> <929D> <558B> <929E> <5BF5> <929F> <5E16> <92A0> <5E33> <92A1> <5E81> <92A2> <5F14> <92A3> <5F35> <92A4> <5F6B> <92A5> <5FB4> <92A6> <61F2> <92A7> <6311> <92A8> <66A2> <92A9> <671D> <92AA> <6F6E> <92AB> <7252> <92AC> <753A> <92AD> <773A> <92AE> <8074> <92AF> <8139> <92B0> <8178> <92B1> <8776> <92B2> <8ABF> <92B3> <8ADC> <92B4> <8D85> <92B5> <8DF3> <92B6> <929A> <92B7> <9577> <92B8> <9802> <92B9> <9CE5> <92BA> <52C5> <92BB> <6357> <92BC> <76F4> <92BD> <6715> <92BE> <6C88> <92BF> <73CD> <92C0> <8CC3> <92C1> <93AE> <92C2> <9673> <92C3> <6D25> <92C4> <589C> <92C5> <690E> <92C6> <69CC> <92C7> <8FFD> <92C8> <939A> <92C9> <75DB> <92CA> <901A> <92CB> <585A> <92CC> <6802> <92CD> <63B4> <92CE> <69FB> <92CF> <4F43> <92D0> <6F2C> <92D1> <67D8> <92D2> <8FBB> <92D3> <8526> <92D4> <7DB4> <92D5> <9354> <92D6> <693F> <92D7> <6F70> <92D8> <576A> <92D9> <58F7> <92DA> <5B2C> <92DB> <7D2C> <92DC> <722A> <92DD> <540A> <92DE> <91E3> <92DF> <9DB4> <92E0> <4EAD> <92E1> <4F4E> <92E2> <505C> <92E3> <5075> <92E4> <5243> <92E5> <8C9E> <92E6> <5448> <92E7> <5824> <92E8> <5B9A> <92E9> <5E1D> <92EA> <5E95> <92EB> <5EAD> <92EC> <5EF7> <92ED> <5F1F> <92EE> <608C> <92EF> <62B5> <92F0> <633A> <92F1> <63D0> <92F2> <68AF> <92F3> <6C40> <92F4> <7887> <92F5> <798E> <92F6> <7A0B> <92F7> <7DE0> <92F8> <8247> <92F9> <8A02> endbfchar 100 beginbfchar <92FA> <8AE6> <92FB> <8E44> <92FC> <9013> <9340> <90B8> <9341> <912D> <9342> <91D8> <9343> <9F0E> <9344> <6CE5> <9345> <6458> <9346> <64E2> <9347> <6575> <9348> <6EF4> <9349> <7684> <934A> <7B1B> <934B> <9069> <934C> <93D1> <934D> <6EBA> <934E> <54F2> <934F> <5FB9> <9350> <64A4> <9351> <8F4D> <9352> <8FED> <9353> <9244> <9354> <5178> <9355> <586B> <9356> <5929> <9357> <5C55> <9358> <5E97> <9359> <6DFB> <935A> <7E8F> <935B> <751C> <935C> <8CBC> <935D> <8EE2> <935E> <985B> <935F> <70B9> <9360> <4F1D> <9361> <6BBF> <9362> <6FB1> <9363> <7530> <9364> <96FB> <9365> <514E> <9366> <5410> <9367> <5835> <9368> <5857> <9369> <59AC> <936A> <5C60> <936B> <5F92> <936C> <6597> <936D> <675C> <936E> <6E21> <936F> <767B> <9370> <83DF> <9371> <8CED> <9372> <9014> <9373> <90FD> <9374> <934D> <9375> <7825> <9376> <783A> <9377> <52AA> <9378> <5EA6> <9379> <571F> <937A> <5974> <937B> <6012> <937C> <5012> <937D> <515A> <937E> <51AC> <9380> <51CD> <9381> <5200> <9382> <5510> <9383> <5854> <9384> <5858> <9385> <5957> <9386> <5B95> <9387> <5CF6> <9388> <5D8B> <9389> <60BC> <938A> <6295> <938B> <642D> <938C> <6771> <938D> <6843> <938E> <68BC> <938F> <68DF> <9390> <76D7> <9391> <6DD8> <9392> <6E6F> <9393> <6D9B> <9394> <706F> <9395> <71C8> <9396> <5F53> <9397> <75D8> <9398> <7977> <9399> <7B49> <939A> <7B54> <939B> <7B52> <939C> <7CD6> <939D> <7D71> <939E> <5230> <939F> <8463> <93A0> <8569> <93A1> <85E4> endbfchar 100 beginbfchar <93A2> <8A0E> <93A3> <8B04> <93A4> <8C46> <93A5> <8E0F> <93A6> <9003> <93A7> <900F> <93A8> <9419> <93A9> <9676> <93AA> <982D> <93AB> <9A30> <93AC> <95D8> <93AD> <50CD> <93AE> <52D5> <93AF> <540C> <93B0> <5802> <93B1> <5C0E> <93B2> <61A7> <93B3> <649E> <93B4> <6D1E> <93B5> <77B3> <93B6> <7AE5> <93B7> <80F4> <93B8> <8404> <93B9> <9053> <93BA> <9285> <93BB> <5CE0> <93BC> <9D07> <93BD> <533F> <93BE> <5F97> <93BF> <5FB3> <93C0> <6D9C> <93C1> <7279> <93C2> <7763> <93C3> <79BF> <93C4> <7BE4> <93C5> <6BD2> <93C6> <72EC> <93C7> <8AAD> <93C8> <6803> <93C9> <6A61> <93CA> <51F8> <93CB> <7A81> <93CC> <6934> <93CD> <5C4A> <93CE> <9CF6> <93CF> <82EB> <93D0> <5BC5> <93D1> <9149> <93D2> <701E> <93D3> <5678> <93D4> <5C6F> <93D5> <60C7> <93D6> <6566> <93D7> <6C8C> <93D8> <8C5A> <93D9> <9041> <93DA> <9813> <93DB> <5451> <93DC> <66C7> <93DD> <920D> <93DE> <5948> <93DF> <90A3> <93E0> <5185> <93E1> <4E4D> <93E2> <51EA> <93E3> <8599> <93E4> <8B0E> <93E5> <7058> <93E6> <637A> <93E7> <934B> <93E8> <6962> <93E9> <99B4> <93EA> <7E04> <93EB> <7577> <93EC> <5357> <93ED> <6960> <93EE> <8EDF> <93EF> <96E3> <93F0> <6C5D> <93F1> <4E8C> <93F2> <5C3C> <93F3> <5F10> <93F4> <8FE9> <93F5> <5302> <93F6> <8CD1> <93F7> <8089> <93F8> <8679> <93F9> <5EFF> <93FA> <65E5> <93FB> <4E73> <93FC> <5165> <9440> <5982> <9441> <5C3F> <9442> <97EE> <9443> <4EFB> <9444> <598A> <9445> <5FCD> <9446> <8A8D> <9447> <6FE1> <9448> <79B0> endbfchar 100 beginbfchar <9449> <7962> <944A> <5BE7> <944B> <8471> <944C> <732B> <944D> <71B1> <944E> <5E74> <944F> <5FF5> <9450> <637B> <9451> <649A> <9452> <71C3> <9453> <7C98> <9454> <4E43> <9455> <5EFC> <9456> <4E4B> <9457> <57DC> <9458> <56A2> <9459> <60A9> <945A> <6FC3> <945B> <7D0D> <945C> <80FD> <945D> <8133> <945E> <81BF> <945F> <8FB2> <9460> <8997> <9461> <86A4> <9462> <5DF4> <9463> <628A> <9464> <64AD> <9465> <8987> <9466> <6777> <9467> <6CE2> <9468> <6D3E> <9469> <7436> <946A> <7834> <946B> <5A46> <946C> <7F75> <946D> <82AD> <946E> <99AC> <946F> <4FF3> <9470> <5EC3> <9471> <62DD> <9472> <6392> <9473> <6557> <9474> <676F> <9475> <76C3> <9476> <724C> <9477> <80CC> <9478> <80BA> <9479> <8F29> <947A> <914D> <947B> <500D> <947C> <57F9> <947D> <5A92> <947E> <6885> <9480> <6973> <9481> <7164> <9482> <72FD> <9483> <8CB7> <9484> <58F2> <9485> <8CE0> <9486> <966A> <9487> <9019> <9488> <877F> <9489> <79E4> <948A> <77E7> <948B> <8429> <948C> <4F2F> <948D> <5265> <948E> <535A> <948F> <62CD> <9490> <67CF> <9491> <6CCA> <9492> <767D> <9493> <7B94> <9494> <7C95> <9495> <8236> <9496> <8584> <9497> <8FEB> <9498> <66DD> <9499> <6F20> <949A> <7206> <949B> <7E1B> <949C> <83AB> <949D> <99C1> <949E> <9EA6> <949F> <51FD> <94A0> <7BB1> <94A1> <7872> <94A2> <7BB8> <94A3> <8087> <94A4> <7B48> <94A5> <6AE8> <94A6> <5E61> <94A7> <808C> <94A8> <7551> <94A9> <7560> <94AA> <516B> <94AB> <9262> <94AC> <6E8C> <94AD> <767A> endbfchar 100 beginbfchar <94AE> <9197> <94AF> <9AEA> <94B0> <4F10> <94B1> <7F70> <94B2> <629C> <94B3> <7B4F> <94B4> <95A5> <94B5> <9CE9> <94B6> <567A> <94B7> <5859> <94B8> <86E4> <94B9> <96BC> <94BA> <4F34> <94BB> <5224> <94BC> <534A> <94BD> <53CD> <94BE> <53DB> <94BF> <5E06> <94C0> <642C> <94C1> <6591> <94C2> <677F> <94C3> <6C3E> <94C4> <6C4E> <94C5> <7248> <94C6> <72AF> <94C7> <73ED> <94C8> <7554> <94C9> <7E41> <94CA> <822C> <94CB> <85E9> <94CC> <8CA9> <94CD> <7BC4> <94CE> <91C6> <94CF> <7169> <94D0> <9812> <94D1> <98EF> <94D2> <633D> <94D3> <6669> <94D4> <756A> <94D5> <76E4> <94D6> <78D0> <94D7> <8543> <94D8> <86EE> <94D9> <532A> <94DA> <5351> <94DB> <5426> <94DC> <5983> <94DD> <5E87> <94DE> <5F7C> <94DF> <60B2> <94E0> <6249> <94E1> <6279> <94E2> <62AB> <94E3> <6590> <94E4> <6BD4> <94E5> <6CCC> <94E6> <75B2> <94E7> <76AE> <94E8> <7891> <94E9> <79D8> <94EA> <7DCB> <94EB> <7F77> <94EC> <80A5> <94ED> <88AB> <94EE> <8AB9> <94EF> <8CBB> <94F0> <907F> <94F1> <975E> <94F2> <98DB> <94F3> <6A0B> <94F4> <7C38> <94F5> <5099> <94F6> <5C3E> <94F7> <5FAE> <94F8> <6787> <94F9> <6BD8> <94FA> <7435> <94FB> <7709> <94FC> <7F8E> <9540> <9F3B> <9541> <67CA> <9542> <7A17> <9543> <5339> <9544> <758B> <9545> <9AED> <9546> <5F66> <9547> <819D> <9548> <83F1> <9549> <8098> <954A> <5F3C> <954B> <5FC5> <954C> <7562> <954D> <7B46> <954E> <903C> <954F> <6867> <9550> <59EB> <9551> <5A9B> <9552> <7D10> <9553> <767E> <9554> <8B2C> endbfchar 100 beginbfchar <9555> <4FF5> <9556> <5F6A> <9557> <6A19> <9558> <6C37> <9559> <6F02> <955A> <74E2> <955B> <7968> <955C> <8868> <955D> <8A55> <955E> <8C79> <955F> <5EDF> <9560> <63CF> <9561> <75C5> <9562> <79D2> <9563> <82D7> <9564> <9328> <9565> <92F2> <9566> <849C> <9567> <86ED> <9568> <9C2D> <9569> <54C1> <956A> <5F6C> <956B> <658C> <956C> <6D5C> <956D> <7015> <956E> <8CA7> <956F> <8CD3> <9570> <983B> <9571> <654F> <9572> <74F6> <9573> <4E0D> <9574> <4ED8> <9575> <57E0> <9576> <592B> <9577> <5A66> <9578> <5BCC> <9579> <51A8> <957A> <5E03> <957B> <5E9C> <957C> <6016> <957D> <6276> <957E> <6577> <9580> <65A7> <9581> <666E> <9582> <6D6E> <9583> <7236> <9584> <7B26> <9585> <8150> <9586> <819A> <9587> <8299> <9588> <8B5C> <9589> <8CA0> <958A> <8CE6> <958B> <8D74> <958C> <961C> <958D> <9644> <958E> <4FAE> <958F> <64AB> <9590> <6B66> <9591> <821E> <9592> <8461> <9593> <856A> <9594> <90E8> <9595> <5C01> <9596> <6953> <9597> <98A8> <9598> <847A> <9599> <8557> <959A> <4F0F> <959B> <526F> <959C> <5FA9> <959D> <5E45> <959E> <670D> <959F> <798F> <95A0> <8179> <95A1> <8907> <95A2> <8986> <95A3> <6DF5> <95A4> <5F17> <95A5> <6255> <95A6> <6CB8> <95A7> <4ECF> <95A8> <7269> <95A9> <9B92> <95AA> <5206> <95AB> <543B> <95AC> <5674> <95AD> <58B3> <95AE> <61A4> <95AF> <626E> <95B0> <711A> <95B1> <596E> <95B2> <7C89> <95B3> <7CDE> <95B4> <7D1B> <95B5> <96F0> <95B6> <6587> <95B7> <805E> <95B8> <4E19> <95B9> <4F75> endbfchar 100 beginbfchar <95BA> <5175> <95BB> <5840> <95BC> <5E63> <95BD> <5E73> <95BE> <5F0A> <95BF> <67C4> <95C0> <4E26> <95C1> <853D> <95C2> <9589> <95C3> <965B> <95C4> <7C73> <95C5> <9801> <95C6> <50FB> <95C7> <58C1> <95C8> <7656> <95C9> <78A7> <95CA> <5225> <95CB> <77A5> <95CC> <8511> <95CD> <7B86> <95CE> <504F> <95CF> <5909> <95D0> <7247> <95D1> <7BC7> <95D2> <7DE8> <95D3> <8FBA> <95D4> <8FD4> <95D5> <904D> <95D6> <4FBF> <95D7> <52C9> <95D8> <5A29> <95D9> <5F01> <95DA> <97AD> <95DB> <4FDD> <95DC> <8217> <95DD> <92EA> <95DE> <5703> <95DF> <6355> <95E0> <6B69> <95E1> <752B> <95E2> <88DC> <95E3> <8F14> <95E4> <7A42> <95E5> <52DF> <95E6> <5893> <95E7> <6155> <95E8> <620A> <95E9> <66AE> <95EA> <6BCD> <95EB> <7C3F> <95EC> <83E9> <95ED> <5023> <95EE> <4FF8> <95EF> <5305> <95F0> <5446> <95F1> <5831> <95F2> <5949> <95F3> <5B9D> <95F4> <5CF0> <95F5> <5CEF> <95F6> <5D29> <95F7> <5E96> <95F8> <62B1> <95F9> <6367> <95FA> <653E> <95FB> <65B9> <95FC> <670B> <9640> <6CD5> <9641> <6CE1> <9642> <70F9> <9643> <7832> <9644> <7E2B> <9645> <80DE> <9646> <82B3> <9647> <840C> <9648> <84EC> <9649> <8702> <964A> <8912> <964B> <8A2A> <964C> <8C4A> <964D> <90A6> <964E> <92D2> <964F> <98FD> <9650> <9CF3> <9651> <9D6C> <9652> <4E4F> <9653> <4EA1> <9654> <508D> <9655> <5256> <9656> <574A> <9657> <59A8> <9658> <5E3D> <965B> <623F> <965C> <66B4> <965D> <671B> <965E> <67D0> <965F> <68D2> <9660> <5192> <9661> <7D21> <9662> <80AA> endbfchar 100 beginbfchar <9663> <81A8> <9664> <8B00> <9665> <8C8C> <9666> <8CBF> <9667> <927E> <9668> <9632> <9669> <5420> <966A> <982C> <966B> <5317> <966C> <50D5> <966D> <535C> <966E> <58A8> <966F> <64B2> <9670> <6734> <9671> <7267> <9672> <7766> <9673> <7A46> <9674> <91E6> <9675> <52C3> <9676> <6CA1> <9677> <6B86> <9678> <5800> <9679> <5E4C> <967A> <5954> <967B> <672C> <967C> <7FFB> <967D> <51E1> <967E> <76C6> <9680> <6469> <9681> <78E8> <9682> <9B54> <9683> <9EBB> <9684> <57CB> <9685> <59B9> <9686> <6627> <9687> <679A> <9688> <6BCE> <9689> <54E9> <968A> <69D9> <968B> <5E55> <968C> <819C> <968D> <6795> <968E> <9BAA> <968F> <67FE> <9690> <9C52> <9691> <685D> <9692> <4EA6> <9693> <4FE3> <9694> <53C8> <9695> <62B9> <9696> <672B> <9697> <6CAB> <9698> <8FC4> <9699> <4FAD> <969A> <7E6D> <969B> <9EBF> <969C> <4E07> <969D> <6162> <969E> <6E80> <969F> <6F2B> <96A0> <8513> <96A1> <5473> <96A2> <672A> <96A3> <9B45> <96A4> <5DF3> <96A5> <7B95> <96A6> <5CAC> <96A7> <5BC6> <96A8> <871C> <96A9> <6E4A> <96AA> <84D1> <96AB> <7A14> <96AC> <8108> <96AD> <5999> <96AE> <7C8D> <96AF> <6C11> <96B0> <7720> <96B1> <52D9> <96B2> <5922> <96B3> <7121> <96B4> <725F> <96B5> <77DB> <96B6> <9727> <96B7> <9D61> <96B8> <690B> <96B9> <5A7F> <96BA> <5A18> <96BB> <51A5> <96BC> <540D> <96BD> <547D> <96BE> <660E> <96BF> <76DF> <96C0> <8FF7> <96C1> <9298> <96C2> <9CF4> <96C3> <59EA> <96C4> <725D> <96C5> <6EC5> <96C6> <514D> <96C7> <68C9> endbfchar 100 beginbfchar <96C8> <7DBF> <96C9> <7DEC> <96CA> <9762> <96CB> <9EBA> <96CC> <6478> <96CD> <6A21> <96CE> <8302> <96CF> <5984> <96D0> <5B5F> <96D1> <6BDB> <96D2> <731B> <96D3> <76F2> <96D4> <7DB2> <96D5> <8017> <96D6> <8499> <96D7> <5132> <96D8> <6728> <96D9> <9ED9> <96DA> <76EE> <96DB> <6762> <96DC> <52FF> <96DD> <9905> <96DE> <5C24> <96DF> <623B> <96E0> <7C7E> <96E1> <8CB0> <96E2> <554F> <96E3> <60B6> <96E4> <7D0B> <96E5> <9580> <96E6> <5301> <96E7> <4E5F> <96E8> <51B6> <96E9> <591C> <96EA> <723A> <96EB> <8036> <96EC> <91CE> <96ED> <5F25> <96EE> <77E2> <96EF> <5384> <96F0> <5F79> <96F1> <7D04> <96F2> <85AC> <96F3> <8A33> <96F4> <8E8D> <96F5> <9756> <96F6> <67F3> <96F7> <85AE> <96F8> <9453> <96F9> <6109> <96FA> <6108> <96FB> <6CB9> <96FC> <7652> <9740> <8AED> <9741> <8F38> <9742> <552F> <9743> <4F51> <9744> <512A> <9745> <52C7> <9746> <53CB> <9747> <5BA5> <9748> <5E7D> <9749> <60A0> <974A> <6182> <974B> <63D6> <974C> <6709> <974D> <67DA> <974E> <6E67> <974F> <6D8C> <9752> <7531> <9753> <7950> <9754> <88D5> <9755> <8A98> <9756> <904A> <9757> <9091> <9758> <90F5> <9759> <96C4> <975A> <878D> <975B> <5915> <975C> <4E88> <975D> <4F59> <975E> <4E0E> <975F> <8A89> <9760> <8F3F> <9761> <9810> <9762> <50AD> <9763> <5E7C> <9764> <5996> <9765> <5BB9> <9766> <5EB8> <9767> <63DA> <9768> <63FA> <9769> <64C1> <976A> <66DC> <976B> <694A> <976C> <69D8> <976D> <6D0B> <976E> <6EB6> <976F> <7194> <9770> <7528> endbfchar 100 beginbfchar <9771> <7AAF> <9772> <7F8A> <9773> <8000> <9774> <8449> <9775> <84C9> <9776> <8981> <9777> <8B21> <9778> <8E0A> <9779> <9065> <977A> <967D> <977B> <990A> <977C> <617E> <977D> <6291> <977E> <6B32> <9780> <6C83> <9781> <6D74> <9782> <7FCC> <9783> <7FFC> <9784> <6DC0> <9785> <7F85> <9786> <87BA> <9787> <88F8> <9788> <6765> <9789> <83B1> <978A> <983C> <978B> <96F7> <978C> <6D1B> <978D> <7D61> <978E> <843D> <978F> <916A> <9790> <4E71> <9791> <5375> <9792> <5D50> <9793> <6B04> <9794> <6FEB> <9795> <85CD> <9796> <862D> <9797> <89A7> <9798> <5229> <9799> <540F> <979A> <5C65> <979B> <674E> <979C> <68A8> <979D> <7406> <979E> <7483> <979F> <75E2> <97A0> <88CF> <97A1> <88E1> <97A2> <91CC> <97A3> <96E2> <97A4> <9678> <97A5> <5F8B> <97A6> <7387> <97A7> <7ACB> <97A8> <844E> <97A9> <63A0> <97AA> <7565> <97AB> <5289> <97AC> <6D41> <97AD> <6E9C> <97AE> <7409> <97AF> <7559> <97B0> <786B> <97B1> <7C92> <97B2> <9686> <97B3> <7ADC> <97B4> <9F8D> <97B5> <4FB6> <97B6> <616E> <97B7> <65C5> <97B8> <865C> <97B9> <4E86> <97BA> <4EAE> <97BB> <50DA> <97BC> <4E21> <97BD> <51CC> <97BE> <5BEE> <97BF> <6599> <97C0> <6881> <97C1> <6DBC> <97C2> <731F> <97C3> <7642> <97C4> <77AD> <97C5> <7A1C> <97C6> <7CE7> <97C7> <826F> <97C8> <8AD2> <97C9> <907C> <97CA> <91CF> <97CB> <9675> <97CC> <9818> <97CD> <529B> <97CE> <7DD1> <97CF> <502B> <97D0> <5398> <97D1> <6797> <97D2> <6DCB> <97D3> <71D0> <97D4> <7433> <97D5> <81E8> endbfchar 100 beginbfchar <97D6> <8F2A> <97D7> <96A3> <97D8> <9C57> <97D9> <9E9F> <97DA> <7460> <97DB> <5841> <97DC> <6D99> <97DD> <7D2F> <97DE> <985E> <97DF> <4EE4> <97E0> <4F36> <97E1> <4F8B> <97E2> <51B7> <97E3> <52B1> <97E4> <5DBA> <97E5> <601C> <97E6> <73B2> <97E7> <793C> <97E8> <82D3> <97E9> <9234> <97EA> <96B7> <97EB> <96F6> <97EC> <970A> <97ED> <9E97> <97EE> <9F62> <97EF> <66A6> <97F0> <6B74> <97F1> <5217> <97F2> <52A3> <97F3> <70C8> <97F4> <88C2> <97F5> <5EC9> <97F6> <604B> <97F7> <6190> <97F8> <6F23> <97F9> <7149> <97FA> <7C3E> <97FB> <7DF4> <97FC> <806F> <9840> <84EE> <9841> <9023> <9842> <932C> <9843> <5442> <9844> <9B6F> <9845> <6AD3> <9846> <7089> <9847> <8CC2> <9848> <8DEF> <9849> <9732> <984A> <52B4> <984B> <5A41> <984C> <5ECA> <984D> <5F04> <984E> <6717> <984F> <697C> <9850> <6994> <9851> <6D6A> <9852> <6F0F> <9853> <7262> <9854> <72FC> <9855> <7BED> <9856> <8001> <9857> <807E> <9858> <874B> <9859> <90CE> <985A> <516D> <985B> <9E93> <985C> <7984> <985D> <808B> <985E> <9332> <985F> <8AD6> <9860> <502D> <9861> <548C> <9862> <8A71> <9863> <6B6A> <9864> <8CC4> <9865> <8107> <9866> <60D1> <9867> <67A0> <9868> <9DF2> <9869> <4E99> <986A> <4E98> <986B> <9C10> <986C> <8A6B> <986D> <85C1> <986E> <8568> <986F> <6900> <9870> <6E7E> <9871> <7897> <9872> <8155> <989F> <5F0C> <98A0> <4E10> <98A1> <4E15> <98A2> <4E2A> <98A3> <4E31> <98A4> <4E36> <98A5> <4E3C> <98A6> <4E3F> <98A7> <4E42> <98A8> <4E56> endbfchar 100 beginbfchar <98A9> <4E58> <98AA> <4E82> <98AB> <4E85> <98AC> <8C6B> <98AD> <4E8A> <98AE> <8212> <98AF> <5F0D> <98B0> <4E8E> <98B4> <4EA2> <98B5> <4EB0> <98B6> <4EB3> <98B7> <4EB6> <98B8> <4ECE> <98B9> <4ECD> <98BA> <4EC4> <98BB> <4EC6> <98BC> <4EC2> <98BD> <4ED7> <98BE> <4EDE> <98BF> <4EED> <98C0> <4EDF> <98C1> <4EF7> <98C2> <4F09> <98C3> <4F5A> <98C4> <4F30> <98C5> <4F5B> <98C6> <4F5D> <98C7> <4F57> <98C8> <4F47> <98C9> <4F76> <98CA> <4F88> <98CB> <4F8F> <98CC> <4F98> <98CD> <4F7B> <98CE> <4F69> <98CF> <4F70> <98D0> <4F91> <98D1> <4F6F> <98D2> <4F86> <98D3> <4F96> <98D4> <5118> <98D5> <4FD4> <98D6> <4FDF> <98D7> <4FCE> <98D8> <4FD8> <98D9> <4FDB> <98DA> <4FD1> <98DB> <4FDA> <98DC> <4FD0> <98DF> <501A> <98E0> <5028> <98E1> <5014> <98E2> <502A> <98E3> <5025> <98E4> <5005> <98E5> <4F1C> <98E6> <4FF6> <98E7> <5021> <98E8> <5029> <98E9> <502C> <98EA> <4FFE> <98EB> <4FEF> <98EC> <5011> <98ED> <5006> <98EE> <5043> <98EF> <5047> <98F0> <6703> <98F1> <5055> <98F2> <5050> <98F3> <5048> <98F4> <505A> <98F5> <5056> <98F6> <506C> <98F7> <5078> <98F8> <5080> <98F9> <509A> <98FA> <5085> <98FB> <50B4> <98FC> <50B2> <9942> <50B3> <9943> <50C2> <9944> <50D6> <9945> <50DE> <9946> <50E5> <9947> <50ED> <9948> <50E3> <9949> <50EE> <994A> <50F9> <994B> <50F5> <994C> <5109> <994F> <5116> <9950> <5115> <9951> <5114> <9952> <511A> <9953> <5121> <9954> <513A> <9955> <5137> <9956> <513C> <9957> <513B> <995A> <5152> endbfchar 100 beginbfchar <995B> <514C> <995C> <5154> <995D> <5162> <995E> <7AF8> <9961> <516E> <9962> <5180> <9963> <5182> <9964> <56D8> <9965> <518C> <9966> <5189> <9967> <518F> <9968> <5191> <9969> <5193> <996C> <51A4> <996D> <51A6> <996E> <51A2> <9972> <51B3> <9975> <51B0> <9976> <51B5> <9977> <51BD> <9978> <51C5> <9979> <51C9> <997A> <51DB> <997B> <51E0> <997C> <8655> <997D> <51E9> <997E> <51ED> <9980> <51F0> <9981> <51F5> <9982> <51FE> <9983> <5204> <9984> <520B> <9985> <5214> <9986> <520E> <9987> <5227> <9988> <522A> <9989> <522E> <998A> <5233> <998B> <5239> <998C> <524F> <998D> <5244> <9990> <525E> <9991> <5254> <9992> <526A> <9993> <5274> <9994> <5269> <9995> <5273> <9996> <527F> <9997> <527D> <9998> <528D> <9999> <5294> <999A> <5292> <999B> <5271> <999C> <5288> <999D> <5291> <999E> <8FA8> <999F> <8FA7> <99A2> <52BC> <99A3> <52B5> <99A4> <52C1> <99A5> <52CD> <99A6> <52D7> <99A7> <52DE> <99A8> <52E3> <99A9> <52E6> <99AA> <98ED> <99AB> <52E0> <99AC> <52F3> <99AD> <52F5> <99B0> <5306> <99B1> <5308> <99B2> <7538> <99B3> <530D> <99B4> <5310> <99B5> <530F> <99B6> <5315> <99B7> <531A> <99B8> <5323> <99B9> <532F> <99BA> <5331> <99BB> <5333> <99BC> <5338> <99BD> <5340> <99BE> <5346> <99BF> <5345> <99C0> <4E17> <99C1> <5349> <99C2> <534D> <99C3> <51D6> <99C4> <535E> <99C5> <5369> <99C6> <536E> <99C7> <5918> <99C8> <537B> <99C9> <5377> <99CA> <5382> <99CB> <5396> <99CC> <53A0> <99CD> <53A6> <99CE> <53A5> endbfchar 100 beginbfchar <99CF> <53AE> <99D0> <53B0> <99D1> <53B6> <99D2> <53C3> <99D3> <7C12> <99D4> <96D9> <99D5> <53DF> <99D6> <66FC> <99D7> <71EE> <99D8> <53EE> <99D9> <53E8> <99DA> <53ED> <99DB> <53FA> <99DC> <5401> <99DD> <543D> <99DE> <5440> <99E1> <543C> <99E2> <542E> <99E3> <5436> <99E4> <5429> <99E5> <541D> <99E6> <544E> <99E7> <548F> <99E8> <5475> <99E9> <548E> <99EA> <545F> <99EB> <5471> <99EC> <5477> <99ED> <5470> <99EE> <5492> <99EF> <547B> <99F0> <5480> <99F1> <5476> <99F2> <5484> <99F3> <5490> <99F4> <5486> <99F5> <54C7> <99F6> <54A2> <99F7> <54B8> <99F8> <54A5> <99F9> <54AC> <99FA> <54C4> <99FB> <54C8> <99FC> <54A8> <9A40> <54AB> <9A41> <54C2> <9A42> <54A4> <9A43> <54BE> <9A44> <54BC> <9A45> <54D8> <9A48> <550F> <9A49> <5514> <9A4A> <54FD> <9A4B> <54EE> <9A4C> <54ED> <9A4D> <54FA> <9A4E> <54E2> <9A4F> <5539> <9A50> <5540> <9A51> <5563> <9A52> <554C> <9A53> <552E> <9A54> <555C> <9A55> <5545> <9A58> <5538> <9A59> <5533> <9A5A> <555D> <9A5B> <5599> <9A5C> <5580> <9A5D> <54AF> <9A5E> <558A> <9A5F> <559F> <9A60> <557B> <9A61> <557E> <9A62> <5598> <9A63> <559E> <9A64> <55AE> <9A65> <557C> <9A66> <5583> <9A67> <55A9> <9A68> <5587> <9A69> <55A8> <9A6A> <55DA> <9A6B> <55C5> <9A6C> <55DF> <9A6D> <55C4> <9A6E> <55DC> <9A6F> <55E4> <9A70> <55D4> <9A71> <5614> <9A72> <55F7> <9A73> <5616> <9A74> <55FE> <9A75> <55FD> <9A76> <561B> <9A77> <55F9> <9A78> <564E> <9A79> <5650> <9A7A> <71DF> <9A7B> <5634> endbfchar 100 beginbfchar <9A7C> <5636> <9A7D> <5632> <9A7E> <5638> <9A80> <566B> <9A81> <5664> <9A82> <562F> <9A83> <566C> <9A84> <566A> <9A85> <5686> <9A86> <5680> <9A87> <568A> <9A88> <56A0> <9A89> <5694> <9A8A> <568F> <9A8B> <56A5> <9A8C> <56AE> <9A8D> <56B6> <9A8E> <56B4> <9A8F> <56C2> <9A90> <56BC> <9A91> <56C1> <9A92> <56C3> <9A93> <56C0> <9A94> <56C8> <9A95> <56CE> <9A96> <56D1> <9A97> <56D3> <9A98> <56D7> <9A99> <56EE> <9A9A> <56F9> <9A9B> <5700> <9A9C> <56FF> <9A9D> <5704> <9A9E> <5709> <9A9F> <5708> <9AA0> <570B> <9AA1> <570D> <9AA2> <5713> <9AA3> <5718> <9AA4> <5716> <9AA5> <55C7> <9AA6> <571C> <9AA7> <5726> <9AAA> <574E> <9AAB> <573B> <9AAC> <5740> <9AAD> <574F> <9AAE> <5769> <9AAF> <57C0> <9AB0> <5788> <9AB1> <5761> <9AB2> <577F> <9AB3> <5789> <9AB4> <5793> <9AB5> <57A0> <9AB6> <57B3> <9AB7> <57A4> <9AB8> <57AA> <9AB9> <57B0> <9ABA> <57C3> <9ABB> <57C6> <9ABC> <57D4> <9ABF> <580A> <9AC0> <57D6> <9AC1> <57E3> <9AC2> <580B> <9AC3> <5819> <9AC4> <581D> <9AC5> <5872> <9AC6> <5821> <9AC7> <5862> <9AC8> <584B> <9AC9> <5870> <9ACA> <6BC0> <9ACB> <5852> <9ACC> <583D> <9ACD> <5879> <9ACE> <5885> <9ACF> <58B9> <9AD0> <589F> <9AD1> <58AB> <9AD2> <58BA> <9AD3> <58DE> <9AD4> <58BB> <9AD5> <58B8> <9AD6> <58AE> <9AD7> <58C5> <9AD8> <58D3> <9AD9> <58D1> <9ADA> <58D7> <9ADB> <58D9> <9ADC> <58D8> <9ADD> <58E5> <9ADE> <58DC> <9ADF> <58E4> <9AE0> <58DF> <9AE1> <58EF> <9AE2> <58FA> <9AE3> <58F9> <9AE7> <5902> endbfchar 100 beginbfchar <9AE8> <590A> <9AE9> <5910> <9AEA> <591B> <9AEB> <68A6> <9AEC> <5925> <9AEF> <5932> <9AF0> <5938> <9AF1> <593E> <9AF2> <7AD2> <9AF3> <5955> <9AF4> <5950> <9AF5> <594E> <9AF6> <595A> <9AF7> <5958> <9AF8> <5962> <9AF9> <5960> <9AFA> <5967> <9AFB> <596C> <9AFC> <5969> <9B40> <5978> <9B41> <5981> <9B42> <599D> <9B43> <4F5E> <9B44> <4FAB> <9B45> <59A3> <9B46> <59B2> <9B47> <59C6> <9B48> <59E8> <9B49> <59DC> <9B4A> <598D> <9B4D> <5A25> <9B4E> <5A1F> <9B4F> <5A11> <9B50> <5A1C> <9B51> <5A09> <9B52> <5A1A> <9B53> <5A40> <9B54> <5A6C> <9B55> <5A49> <9B58> <5A62> <9B59> <5A6A> <9B5A> <5A9A> <9B5B> <5ABC> <9B5C> <5ABE> <9B5D> <5ACB> <9B5E> <5AC2> <9B5F> <5ABD> <9B60> <5AE3> <9B61> <5AD7> <9B62> <5AE6> <9B63> <5AE9> <9B64> <5AD6> <9B67> <5B0C> <9B68> <5B0B> <9B69> <5B16> <9B6A> <5B32> <9B6B> <5AD0> <9B6C> <5B2A> <9B6D> <5B36> <9B6E> <5B3E> <9B6F> <5B43> <9B70> <5B45> <9B71> <5B40> <9B72> <5B51> <9B73> <5B55> <9B76> <5B65> <9B77> <5B69> <9B78> <5B70> <9B79> <5B73> <9B7A> <5B75> <9B7B> <5B78> <9B7C> <6588> <9B7D> <5B7A> <9B7E> <5B80> <9B80> <5B83> <9B81> <5BA6> <9B82> <5BB8> <9B83> <5BC3> <9B84> <5BC7> <9B85> <5BC9> <9B86> <5BD4> <9B87> <5BD0> <9B88> <5BE4> <9B89> <5BE6> <9B8A> <5BE2> <9B8B> <5BDE> <9B8C> <5BE5> <9B8D> <5BEB> <9B8E> <5BF0> <9B8F> <5BF6> <9B90> <5BF3> <9B91> <5C05> <9B94> <5C0D> <9B95> <5C13> <9B96> <5C20> <9B97> <5C22> <9B98> <5C28> <9B9B> <5C41> <9B9C> <5C46> <9B9D> <5C4E> endbfchar 100 beginbfchar <9B9E> <5C53> <9B9F> <5C50> <9BA0> <5C4F> <9BA1> <5B71> <9BA2> <5C6C> <9BA3> <5C6E> <9BA4> <4E62> <9BA5> <5C76> <9BA6> <5C79> <9BA7> <5C8C> <9BA8> <5C91> <9BA9> <5C94> <9BAA> <599B> <9BAB> <5CAB> <9BAC> <5CBB> <9BAD> <5CB6> <9BAE> <5CBC> <9BAF> <5CB7> <9BB0> <5CC5> <9BB1> <5CBE> <9BB2> <5CC7> <9BB3> <5CD9> <9BB4> <5CE9> <9BB5> <5CFD> <9BB6> <5CFA> <9BB7> <5CED> <9BB8> <5D8C> <9BB9> <5CEA> <9BBA> <5D0B> <9BBB> <5D15> <9BBC> <5D17> <9BBD> <5D5C> <9BBE> <5D1F> <9BBF> <5D1B> <9BC0> <5D11> <9BC1> <5D14> <9BC2> <5D22> <9BC3> <5D1A> <9BC4> <5D19> <9BC5> <5D18> <9BC6> <5D4C> <9BC7> <5D52> <9BC8> <5D4E> <9BC9> <5D4B> <9BCA> <5D6C> <9BCB> <5D73> <9BCC> <5D76> <9BCD> <5D87> <9BCE> <5D84> <9BCF> <5D82> <9BD0> <5DA2> <9BD1> <5D9D> <9BD2> <5DAC> <9BD3> <5DAE> <9BD4> <5DBD> <9BD5> <5D90> <9BD6> <5DB7> <9BD7> <5DBC> <9BD8> <5DC9> <9BD9> <5DCD> <9BDA> <5DD3> <9BDB> <5DD2> <9BDC> <5DD6> <9BDD> <5DDB> <9BDE> <5DEB> <9BDF> <5DF2> <9BE0> <5DF5> <9BE1> <5E0B> <9BE2> <5E1A> <9BE3> <5E19> <9BE4> <5E11> <9BE5> <5E1B> <9BE8> <5E44> <9BE9> <5E43> <9BEA> <5E40> <9BEB> <5E4E> <9BEC> <5E57> <9BED> <5E54> <9BEE> <5E5F> <9BEF> <5E62> <9BF0> <5E64> <9BF1> <5E47> <9BF4> <5E7A> <9BF5> <9EBC> <9BF6> <5E7F> <9BF7> <5EA0> <9BFA> <5EC8> <9BFB> <5ED0> <9BFC> <5ECF> <9C40> <5ED6> <9C41> <5EE3> <9C42> <5EDD> <9C45> <5EE2> <9C46> <5EE1> <9C49> <5EEC> <9C4A> <5EF1> <9C4B> <5EF3> <9C4C> <5EF0> <9C4D> <5EF4> <9C4E> <5EF8> endbfchar 100 beginbfchar <9C4F> <5EFE> <9C50> <5F03> <9C51> <5F09> <9C52> <5F5D> <9C53> <5F5C> <9C54> <5F0B> <9C55> <5F11> <9C56> <5F16> <9C57> <5F29> <9C58> <5F2D> <9C59> <5F38> <9C5A> <5F41> <9C5B> <5F48> <9C5C> <5F4C> <9C5D> <5F4E> <9C5E> <5F2F> <9C5F> <5F51> <9C62> <5F59> <9C63> <5F61> <9C64> <5F6D> <9C65> <5F73> <9C66> <5F77> <9C67> <5F83> <9C68> <5F82> <9C69> <5F7F> <9C6A> <5F8A> <9C6B> <5F88> <9C6C> <5F91> <9C6D> <5F87> <9C6E> <5F9E> <9C6F> <5F99> <9C70> <5F98> <9C71> <5FA0> <9C72> <5FA8> <9C73> <5FAD> <9C74> <5FBC> <9C75> <5FD6> <9C76> <5FFB> <9C77> <5FE4> <9C78> <5FF8> <9C79> <5FF1> <9C7A> <5FDD> <9C7B> <60B3> <9C7C> <5FFF> <9C7D> <6021> <9C7E> <6060> <9C80> <6019> <9C81> <6010> <9C82> <6029> <9C83> <600E> <9C84> <6031> <9C85> <601B> <9C86> <6015> <9C87> <602B> <9C88> <6026> <9C89> <600F> <9C8A> <603A> <9C8B> <605A> <9C8C> <6041> <9C8D> <606A> <9C8E> <6077> <9C8F> <605F> <9C90> <604A> <9C91> <6046> <9C92> <604D> <9C93> <6063> <9C94> <6043> <9C95> <6064> <9C96> <6042> <9C97> <606C> <9C98> <606B> <9C99> <6059> <9C9A> <6081> <9C9B> <608D> <9C9C> <60E7> <9C9D> <6083> <9C9E> <609A> <9C9F> <6084> <9CA0> <609B> <9CA3> <6092> <9CA4> <60A7> <9CA5> <608B> <9CA6> <60E1> <9CA7> <60B8> <9CA8> <60E0> <9CA9> <60D3> <9CAA> <60B4> <9CAB> <5FF0> <9CAC> <60BD> <9CAD> <60C6> <9CAE> <60B5> <9CAF> <60D8> <9CB0> <614D> <9CB1> <6115> <9CB2> <6106> <9CB5> <6100> <9CB6> <60F4> <9CB7> <60FA> <9CB8> <6103> <9CB9> <6121> endbfchar 100 beginbfchar <9CBA> <60FB> <9CBB> <60F1> <9CBE> <6147> <9CBF> <613E> <9CC0> <6128> <9CC1> <6127> <9CC2> <614A> <9CC3> <613F> <9CC4> <613C> <9CC5> <612C> <9CC6> <6134> <9CC7> <613D> <9CC8> <6142> <9CC9> <6144> <9CCA> <6173> <9CCB> <6177> <9CCF> <616B> <9CD0> <6174> <9CD1> <616F> <9CD2> <6165> <9CD3> <6171> <9CD4> <615F> <9CD5> <615D> <9CD6> <6153> <9CD7> <6175> <9CD8> <6199> <9CD9> <6196> <9CDA> <6187> <9CDB> <61AC> <9CDC> <6194> <9CDD> <619A> <9CDE> <618A> <9CDF> <6191> <9CE0> <61AB> <9CE1> <61AE> <9CE2> <61CC> <9CE3> <61CA> <9CE4> <61C9> <9CE5> <61F7> <9CE6> <61C8> <9CE7> <61C3> <9CE8> <61C6> <9CE9> <61BA> <9CEA> <61CB> <9CEB> <7F79> <9CEC> <61CD> <9CED> <61E6> <9CEE> <61E3> <9CEF> <61F6> <9CF0> <61FA> <9CF1> <61F4> <9CF2> <61FF> <9CF3> <61FD> <9CF4> <61FC> <9CF5> <61FE> <9CF6> <6200> <9CF9> <620D> <9CFA> <620C> <9CFB> <6214> <9CFC> <621B> <9D40> <621E> <9D41> <6221> <9D42> <622A> <9D43> <622E> <9D44> <6230> <9D47> <6241> <9D48> <624E> <9D49> <625E> <9D4A> <6263> <9D4B> <625B> <9D4C> <6260> <9D4D> <6268> <9D4E> <627C> <9D4F> <6282> <9D50> <6289> <9D51> <627E> <9D54> <6296> <9D55> <62D4> <9D56> <6283> <9D57> <6294> <9D58> <62D7> <9D59> <62D1> <9D5A> <62BB> <9D5B> <62CF> <9D5C> <62FF> <9D5D> <62C6> <9D5E> <64D4> <9D5F> <62C8> <9D60> <62DC> <9D61> <62CC> <9D62> <62CA> <9D63> <62C2> <9D64> <62C7> <9D65> <629B> <9D66> <62C9> <9D67> <630C> <9D68> <62EE> <9D69> <62F1> <9D6A> <6327> <9D6B> <6302> endbfchar 100 beginbfchar <9D6C> <6308> <9D6D> <62EF> <9D6E> <62F5> <9D6F> <6350> <9D70> <633E> <9D71> <634D> <9D72> <641C> <9D73> <634F> <9D74> <6396> <9D75> <638E> <9D76> <6380> <9D77> <63AB> <9D78> <6376> <9D79> <63A3> <9D7A> <638F> <9D7B> <6389> <9D7C> <639F> <9D7D> <63B5> <9D7E> <636B> <9D80> <6369> <9D81> <63BE> <9D82> <63E9> <9D83> <63C0> <9D84> <63C6> <9D85> <63E3> <9D86> <63C9> <9D87> <63D2> <9D88> <63F6> <9D89> <63C4> <9D8A> <6416> <9D8B> <6434> <9D8C> <6406> <9D8D> <6413> <9D8E> <6426> <9D8F> <6436> <9D90> <651D> <9D91> <6417> <9D92> <6428> <9D93> <640F> <9D94> <6467> <9D95> <646F> <9D96> <6476> <9D97> <644E> <9D98> <652A> <9D99> <6495> <9D9A> <6493> <9D9B> <64A5> <9D9C> <64A9> <9D9D> <6488> <9D9E> <64BC> <9D9F> <64DA> <9DA0> <64D2> <9DA1> <64C5> <9DA2> <64C7> <9DA3> <64BB> <9DA4> <64D8> <9DA5> <64C2> <9DA6> <64F1> <9DA7> <64E7> <9DA8> <8209> <9DAB> <62AC> <9DAC> <64E3> <9DAD> <64EF> <9DAE> <652C> <9DAF> <64F6> <9DB0> <64F4> <9DB1> <64F2> <9DB2> <64FA> <9DB3> <6500> <9DB4> <64FD> <9DB5> <6518> <9DB6> <651C> <9DB7> <6505> <9DB8> <6524> <9DB9> <6523> <9DBA> <652B> <9DBD> <6537> <9DBE> <6536> <9DBF> <6538> <9DC0> <754B> <9DC1> <6548> <9DC2> <6556> <9DC3> <6555> <9DC4> <654D> <9DC5> <6558> <9DC6> <655E> <9DC7> <655D> <9DC8> <6572> <9DC9> <6578> <9DCC> <8B8A> <9DCD> <659B> <9DCE> <659F> <9DCF> <65AB> <9DD0> <65B7> <9DD1> <65C3> <9DD2> <65C6> <9DD3> <65C1> <9DD4> <65C4> <9DD5> <65CC> <9DD6> <65D2> endbfchar 100 beginbfchar <9DD7> <65DB> <9DD8> <65D9> <9DDB> <65F1> <9DDC> <6772> <9DDD> <660A> <9DDE> <6603> <9DDF> <65FB> <9DE0> <6773> <9DE3> <6634> <9DE4> <661C> <9DE5> <664F> <9DE6> <6644> <9DE7> <6649> <9DE8> <6641> <9DE9> <665E> <9DEA> <665D> <9DEB> <6664> <9DEE> <665F> <9DEF> <6662> <9DF0> <6670> <9DF1> <6683> <9DF2> <6688> <9DF3> <668E> <9DF4> <6689> <9DF5> <6684> <9DF6> <6698> <9DF7> <669D> <9DF8> <66C1> <9DF9> <66B9> <9DFA> <66C9> <9DFB> <66BE> <9DFC> <66BC> <9E40> <66C4> <9E41> <66B8> <9E42> <66D6> <9E43> <66DA> <9E44> <66E0> <9E45> <663F> <9E46> <66E6> <9E47> <66E9> <9E48> <66F0> <9E49> <66F5> <9E4A> <66F7> <9E4B> <670F> <9E4C> <6716> <9E4D> <671E> <9E50> <9738> <9E51> <672E> <9E52> <673F> <9E53> <6736> <9E54> <6741> <9E55> <6738> <9E56> <6737> <9E57> <6746> <9E58> <675E> <9E59> <6760> <9E5A> <6759> <9E5D> <6789> <9E5E> <6770> <9E5F> <67A9> <9E60> <677C> <9E61> <676A> <9E62> <678C> <9E63> <678B> <9E64> <67A6> <9E65> <67A1> <9E66> <6785> <9E67> <67B7> <9E68> <67EF> <9E69> <67B4> <9E6A> <67EC> <9E6B> <67B3> <9E6C> <67E9> <9E6D> <67B8> <9E6E> <67E4> <9E6F> <67DE> <9E70> <67DD> <9E71> <67E2> <9E72> <67EE> <9E73> <67B9> <9E74> <67CE> <9E75> <67C6> <9E76> <67E7> <9E77> <6A9C> <9E78> <681E> <9E79> <6846> <9E7A> <6829> <9E7B> <6840> <9E7C> <684D> <9E7D> <6832> <9E7E> <684E> <9E80> <68B3> <9E81> <682B> <9E82> <6859> <9E83> <6863> <9E84> <6877> <9E85> <687F> <9E86> <689F> <9E87> <688F> <9E88> <68AD> endbfchar 100 beginbfchar <9E89> <6894> <9E8A> <689D> <9E8B> <689B> <9E8C> <6883> <9E8D> <6AAE> <9E8E> <68B9> <9E8F> <6874> <9E90> <68B5> <9E91> <68A0> <9E92> <68BA> <9E93> <690F> <9E94> <688D> <9E95> <687E> <9E96> <6901> <9E97> <68CA> <9E98> <6908> <9E99> <68D8> <9E9A> <6922> <9E9B> <6926> <9E9C> <68E1> <9E9D> <690C> <9E9E> <68CD> <9E9F> <68D4> <9EA0> <68E7> <9EA1> <68D5> <9EA2> <6936> <9EA3> <6912> <9EA4> <6904> <9EA5> <68D7> <9EA6> <68E3> <9EA7> <6925> <9EA8> <68F9> <9EA9> <68E0> <9EAA> <68EF> <9EAB> <6928> <9EAC> <692A> <9EAD> <691A> <9EAE> <6923> <9EAF> <6921> <9EB0> <68C6> <9EB1> <6979> <9EB2> <6977> <9EB3> <695C> <9EB4> <6978> <9EB5> <696B> <9EB6> <6954> <9EB7> <697E> <9EB8> <696E> <9EB9> <6939> <9EBA> <6974> <9EBB> <693D> <9EBC> <6959> <9EBD> <6930> <9EBE> <6961> <9EBF> <695E> <9EC0> <695D> <9EC1> <6981> <9EC2> <696A> <9EC3> <69B2> <9EC4> <69AE> <9EC5> <69D0> <9EC6> <69BF> <9EC7> <69C1> <9EC8> <69D3> <9EC9> <69BE> <9ECA> <69CE> <9ECB> <5BE8> <9ECC> <69CA> <9ECD> <69DD> <9ECE> <69BB> <9ECF> <69C3> <9ED0> <69A7> <9ED1> <6A2E> <9ED2> <6991> <9ED3> <69A0> <9ED4> <699C> <9ED5> <6995> <9ED6> <69B4> <9ED7> <69DE> <9ED8> <69E8> <9ED9> <6A02> <9EDA> <6A1B> <9EDB> <69FF> <9EDC> <6B0A> <9EDD> <69F9> <9EDE> <69F2> <9EDF> <69E7> <9EE0> <6A05> <9EE1> <69B1> <9EE2> <6A1E> <9EE3> <69ED> <9EE4> <6A14> <9EE5> <69EB> <9EE6> <6A0A> <9EE7> <6A12> <9EE8> <6AC1> <9EE9> <6A23> <9EEA> <6A13> <9EEB> <6A44> <9EEC> <6A0C> endbfchar 100 beginbfchar <9EED> <6A72> <9EEE> <6A36> <9EEF> <6A78> <9EF0> <6A47> <9EF1> <6A62> <9EF2> <6A59> <9EF3> <6A66> <9EF4> <6A48> <9EF5> <6A38> <9EF6> <6A22> <9EF7> <6A90> <9EF8> <6A8D> <9EF9> <6AA0> <9EFA> <6A84> <9F40> <6A97> <9F41> <8617> <9F42> <6ABB> <9F43> <6AC3> <9F44> <6AC2> <9F45> <6AB8> <9F46> <6AB3> <9F47> <6AAC> <9F48> <6ADE> <9F49> <6AD1> <9F4A> <6ADF> <9F4B> <6AAA> <9F4C> <6ADA> <9F4D> <6AEA> <9F4E> <6AFB> <9F4F> <6B05> <9F50> <8616> <9F51> <6AFA> <9F52> <6B12> <9F53> <6B16> <9F54> <9B31> <9F55> <6B1F> <9F56> <6B38> <9F57> <6B37> <9F58> <76DC> <9F59> <6B39> <9F5A> <98EE> <9F5B> <6B47> <9F5C> <6B43> <9F5D> <6B49> <9F5E> <6B50> <9F5F> <6B59> <9F60> <6B54> <9F61> <6B5B> <9F62> <6B5F> <9F63> <6B61> <9F68> <6B84> <9F69> <6B83> <9F6A> <6B8D> <9F6B> <6B98> <9F6C> <6B95> <9F6D> <6B9E> <9F6E> <6BA4> <9F71> <6BAF> <9F72> <6BB2> <9F73> <6BB1> <9F74> <6BB3> <9F75> <6BB7> <9F76> <6BBC> <9F77> <6BC6> <9F78> <6BCB> <9F79> <6BD3> <9F7A> <6BDF> <9F7B> <6BEC> <9F7C> <6BEB> <9F7D> <6BF3> <9F7E> <6BEF> <9F80> <9EBE> <9F81> <6C08> <9F84> <6C1B> <9F85> <6C24> <9F86> <6C23> <9F87> <6C5E> <9F88> <6C55> <9F89> <6C62> <9F8A> <6C6A> <9F8B> <6C82> <9F8C> <6C8D> <9F8D> <6C9A> <9F8E> <6C81> <9F8F> <6C9B> <9F90> <6C7E> <9F91> <6C68> <9F92> <6C73> <9F93> <6C92> <9F94> <6C90> <9F95> <6CC4> <9F96> <6CF1> <9F97> <6CD3> <9F98> <6CBD> <9F99> <6CD7> <9F9A> <6CC5> <9F9B> <6CDD> <9F9C> <6CAE> <9F9D> <6CB1> <9F9E> <6CBE> endbfchar 100 beginbfchar <9F9F> <6CBA> <9FA0> <6CDB> <9FA1> <6CEF> <9FA2> <6CD9> <9FA3> <6CEA> <9FA4> <6D1F> <9FA5> <884D> <9FA6> <6D36> <9FA7> <6D2B> <9FA8> <6D3D> <9FA9> <6D38> <9FAA> <6D19> <9FAB> <6D35> <9FAC> <6D33> <9FAD> <6D12> <9FAE> <6D0C> <9FAF> <6D63> <9FB0> <6D93> <9FB1> <6D64> <9FB2> <6D5A> <9FB3> <6D79> <9FB4> <6D59> <9FB5> <6D8E> <9FB6> <6D95> <9FB7> <6FE4> <9FB8> <6D85> <9FB9> <6DF9> <9FBA> <6E15> <9FBB> <6E0A> <9FBC> <6DB5> <9FBD> <6DC7> <9FBE> <6DE6> <9FBF> <6DB8> <9FC0> <6DC6> <9FC1> <6DEC> <9FC2> <6DDE> <9FC3> <6DCC> <9FC4> <6DE8> <9FC5> <6DD2> <9FC6> <6DC5> <9FC7> <6DFA> <9FC8> <6DD9> <9FC9> <6DE4> <9FCA> <6DD5> <9FCB> <6DEA> <9FCC> <6DEE> <9FCD> <6E2D> <9FCE> <6E6E> <9FCF> <6E2E> <9FD0> <6E19> <9FD1> <6E72> <9FD2> <6E5F> <9FD3> <6E3E> <9FD4> <6E23> <9FD5> <6E6B> <9FD6> <6E2B> <9FD7> <6E76> <9FD8> <6E4D> <9FD9> <6E1F> <9FDA> <6E43> <9FDB> <6E3A> <9FDC> <6E4E> <9FDD> <6E24> <9FDE> <6EFF> <9FDF> <6E1D> <9FE0> <6E38> <9FE1> <6E82> <9FE2> <6EAA> <9FE3> <6E98> <9FE4> <6EC9> <9FE5> <6EB7> <9FE6> <6ED3> <9FE7> <6EBD> <9FE8> <6EAF> <9FE9> <6EC4> <9FEA> <6EB2> <9FED> <6E8F> <9FEE> <6EA5> <9FEF> <6EC2> <9FF0> <6E9F> <9FF1> <6F41> <9FF2> <6F11> <9FF3> <704C> <9FF4> <6EEC> <9FF5> <6EF8> <9FF6> <6EFE> <9FF7> <6F3F> <9FF8> <6EF2> <9FF9> <6F31> <9FFA> <6EEF> <9FFB> <6F32> <9FFC> <6ECC> <6F3E> <6F13> <6EF7> <6F86> <6F7A> <6F78> <6F81> <6F80> endbfchar 100 beginbfchar <6F6F> <6F5B> <6FF3> <6F6D> <6F82> <6F7C> <6F58> <6F8E> <6F91> <6FC2> <6F66> <6FB3> <6FA3> <6FA1> <6FA4> <6FB9> <6FC6> <6FAA> <6FDF> <6FD5> <6FEC> <6FD4> <6FD8> <6FF1> <6FEE> <6FDB> <7009> <700B> <6FFA> <7011> <7001> <700F> <6FFE> <701B> <701A> <6F74> <701D> <7018> <701F> <7030> <703E> <7032> <7051> <7063> <7099> <7092> <70AF> <70F1> <70AC> <70B8> <70B3> <70AE> <70DF> <70CB> <70DD> <70D9> <7109> <70FD> <711C> <7119> <7165> <7155> <7188> <7166> <7162> <714C> <7156> <716C> <718F> <71FB> <7184> <7195> <71A8> <71AC> <71D7> <71B9> <71BE> <71D2> <71C9> <71D4> <71CE> <71E0> <71EC> <71E7> <71F5> <71FC> <71F9> <71FF> <720D> <7210> <721B> <7228> <722D> <722C> <7230> <7232> <7246> <724B> <7258> <7274> endbfchar 100 beginbfchar <727E> <7282> <7281> <7287> <7292> <7296> <72A2> <72A7> <72B9> <72B2> <72C3> <72C6> <72C4> <72CE> <72D2> <72E2> <72F9> <72F7> <500F> <7317> <730A> <731C> <7316> <731D> <7334> <732F> <7329> <7325> <733E> <9ED8> <7357> <736A> <7368> <7370> <7378> <7375> <737B> <737A> <73C8> <73B3> <73CE> <73BB> <73C0> <73E5> <73EE> <73DE> <74A2> <7405> <746F> <7425> <73F8> <7432> <743A> <7455> <743F> <745F> <7459> <7441> <745C> <7469> <7470> <7463> <746A> <7476> <747E> <748B> <749E> <74A7> <74CA> <74CF> <74D4> <73F1> <74E0> <74E3> <74E7> <74E9> <74EE> <74F2> <74F8> <74F7> <7504> <7503> <7505> <750C> <750E> <750D> <7515> <7513> <751E> <7526> <752C> <753C> <7544> <754D> <754A> <7549> <755B> <7546> <755A> <7569> endbfchar 100 beginbfchar <7564> <7567> <756B> <756D> <7578> <7576> <7574> <758A> <7589> <7582> <7594> <759A> <759D> <75A5> <75A3> <75C2> <75B3> <75C3> <75B5> <75BD> <75B8> <75BC> <75B1> <75CD> <75CA> <75D2> <75D9> <75E3> <75DE> <75FC> <7601> <75F0> <75FA> <760B> <760D> <7609> <761F> <7627> <7624> <7634> <7630> <763B> <7646> <765C> <7658> <7667> <766C> <7670> <7672> <7676> <7678> <767C> <7680> <7683> <7688> <768B> <768E> <7696> <7693> <76B0> <76B4> <76C2> <76CD> <76D6> <76D2> <76DE> <76E1> <76E5> <76E7> <76EA> <862F> <76FB> <7708> <7707> <7704> <7729> <7724> <771E> <771B> <7747> <775A> <7768> <776B> <775B> <7765> <777F> <777E> <7779> <778E> <778B> <7791> <77A0> <779E> <77B0> <77B6> <77B9> <77BF> <77BB> <77C7> <77CD> endbfchar 100 beginbfchar <77D7> <77DA> <77DC> <77E3> <77EE> <77FC> <780C> <7812> <7926> <7820> <792A> <7845> <788E> <7874> <7886> <787C> <789A> <788C> <78A3> <78B5> <78AA> <78AF> <78D1> <78C6> <78CB> <78D4> <78BE> <78BC> <78C5> <78CA> <78EC> <78E7> <78DA> <78FD> <78F4> <7907> <7912> <7911> <7919> <792C> <792B> <7940> <7960> <7957> <795F> <795A> <7955> <7953> <797A> <797F> <798A> <799D> <79A7> <9F4B> <79AA> <79AE> <79B3> <79C9> <79D5> <79E7> <79EC> <79E1> <79E3> <7A08> <7A0D> <7A20> <7A1F> <7980> <7A31> <7A3B> <7A3E> <7A37> <7A43> <7A57> <7A49> <7A69> <9F9D> <7A70> <7A79> <7A7D> <7A88> <7A97> <7A95> <7A98> <7A96> <7AA9> <7AC8> <7AB0> <7AB6> <7AC5> <7AC4> <7ABF> <9083> <7AC7> <7ACA> <7ACD> <7ACF> <7AD5> <7AD3> <7ADD> endbfchar 100 beginbfchar <7AE6> <7AED> <7AF0> <7B02> <7B0F> <7B0A> <7B06> <7B33> <7B1E> <7B35> <7B28> <7B36> <7B50> <7B7A> <7B04> <7B4D> <7B0B> <7B4C> <7B45> <7B75> <7B65> <7B74> <7B67> <7B6C> <7B6E> <7B9D> <7B98> <7B9F> <7B8D> <7B9C> <7B9A> <7B8B> <7B92> <7B8F> <7B5D> <7B99> <7BCB> <7BC1> <7BCC> <7BCF> <7BB4> <7BC6> <7BDD> <7BE9> <7C11> <7C14> <7BE6> <7BE5> <7C60> <7C00> <7C07> <7C13> <7BF3> <7BF7> <7C17> <7C0D> <7BF6> <7C23> <7C27> <7C2A> <7C1F> <7C37> <7C2B> <7C3D> <7C4C> <7C43> <7C54> <7C4F> <7C40> <7C50> <7C58> <7C5F> <7C64> <7C56> <7C65> <7C6C> <7C75> <7C83> <7C90> <7CA4> <7CAD> <7CA2> <7CAB> <7CA1> <7CA8> <7CB3> <7CB2> <7CB1> <7CAE> <7CB9> <7CBD> <7CC0> <7CC5> <7CC2> <7CD8> <7CD2> <7CDC> <7CE2> <9B3B> <7CEF> endbfchar 100 beginbfchar <7CF2> <7CF4> <7CF6> <7CFA> <7D06> <7D02> <7D1C> <7D15> <7D0A> <7D45> <7D4B> <7D2E> <7D32> <7D3F> <7D35> <7D46> <7D73> <7D56> <7D4E> <7D72> <7D68> <7D6E> <7D4F> <7D63> <7D93> <7D89> <7D5B> <7D8F> <7D7D> <7D9B> <7DBA> <7DAE> <7DA3> <7DB5> <7DC7> <7DBD> <7DAB> <7E3D> <7DA2> <7DAF> <7DDC> <7DB8> <7D9F> <7DB0> <7DD8> <7DDD> <7DE4> <7DDE> <7DFB> <7DF2> <7DE1> <7E05> <7E0A> <7E23> <7E21> <7E12> <7E31> <7E1F> <7E09> <7E0B> <7E22> <7E46> <7E66> <7E3B> <7E35> <7E39> <7E43> <7E37> <7E32> <7E3A> <7E67> <7E5D> <7E56> <7E5E> <7E79> <7E6A> <7E69> <7E7C> <7E7B> <7E83> <7DD5> <7E7D> <8FAE> <7E7F> <7E8C> <7E92> <7E90> <7E96> <7E8E> <7F38> <7F3A> <7F45> <7F55> <7F54> <7F58> <7F67> <7F78> <7F82> <7F86> <7F83> endbfchar 100 beginbfchar <7F88> <7F87> <7F8C> <7F94> <7F9E> <7F9D> <7F9A> <7FA3> <7FAF> <7FB2> <7FB9> <7FAE> <7FB6> <7FB8> <8B71> <7FCA> <7FD5> <7FD4> <7FE1> <7FE6> <7FE9> <7FF3> <7FF9> <98DC> <8006> <8004> <800B> <8012> <801C> <8021> <8028> <803F> <803B> <804A> <8046> <8052> <8058> <805A> <805F> <8062> <8068> <8073> <8072> <8070> <8076> <8079> <807D> <807F> <8084> <8086> <8085> <809B> <8093> <809A> <80AD> <5190> <80AC> <80DB> <80E5> <80D9> <80DD> <80C4> <80DA> <80D6> <8109> <80EF> <80F1> <811B> <8129> <8123> <812F> <814B> <968B> <8146> <813E> <8153> <8151> <80FC> <8171> <816E> <8174> <8183> <8188> <818A> <8180> <8182> <81A0> <8195> <81A4> <81A3> <815F> <8193> <81A9> <81B0> <81B5> <81BE> <81B8> <81BD> <81C0> <81C2> endbfchar 100 beginbfchar <81BA> <81C9> <81CD> <81D1> <81D9> <81D8> <81C8> <81DA> <81E7> <81FE> <8205> <8207> <820A> <820D> <8210> <8216> <8229> <822B> <8238> <8233> <8240> <8259> <8258> <825D> <825A> <825F> <8264> <8262> <8268> <822E> <8271> <827E> <828D> <8292> <82AB> <829F> <82BB> <82AC> <82E1> <82E3> <82DF> <82D2> <82F4> <82F3> <82FA> <8393> <8303> <82FB> <82F9> <82DE> <8306> <82DC> <8309> <82D9> <8335> <8334> <8316> <8332> <8331> <8340> <8339> <8350> <8345> <832F> <832B> <8385> <839A> <83AA> <839F> <83A2> <8396> <8323> <838E> <8387> <838A> <837C> <83B5> <8373> <8375> <83A0> <8389> <83A8> <83F4> <8413> <83EB> <83CE> <83FD> <8403> <83D8> <840B> <83C1> <83F7> <8407> <83E0> <83F2> <840D> <8422> <8420> <83BD> <8438> endbfchar 100 beginbfchar <8506> <83FB> <846D> <842A> <843C> <855A> <8484> <8477> <846B> <84AD> <846E> <8482> <8469> <8446> <842C> <846F> <8479> <8435> <84CA> <8462> <84B9> <84BF> <849F> <84D9> <84CD> <84BB> <84DA> <84D0> <84C1> <84C6> <84D6> <84A1> <8521> <84FF> <84F4> <852C> <851F> <8515> <8514> <84FC> <8540> <8563> <8558> <8548> <8541> <8602> <854B> <8555> <8580> <85A4> <8588> <8591> <858A> <85A8> <856D> <8594> <859B> <85EA> <8587> <859C> <8577> <857E> <8590> <85C9> <85BA> <85CF> <85B9> <85D0> <85D5> <85DD> <85E5> <85DC> <85F9> <860A> <8613> <860B> <85FE> <85FA> <8606> <8622> <861A> <8630> <863F> <864D> <4E55> <8654> <865F> <8667> <8671> <8693> <86A3> <86B6> <86AF> <86C4> <86C6> <86B0> <86C9> <8823> <86AB> <86D4> endbfchar 100 beginbfchar <86DE> <86E9> <86EC> <86DF> <86DB> <86EF> <8712> <8706> <8708> <8700> <8703> <86FB> <8711> <8709> <870D> <86F9> <870A> <8734> <873F> <8737> <873B> <8725> <8729> <871A> <8760> <875F> <8778> <874C> <874E> <8774> <8757> <8768> <876E> <8759> <8753> <8763> <876A> <8805> <87A2> <879F> <8782> <87AF> <87CB> <87BD> <87C0> <87D0> <96D6> <87AB> <87C4> <87B3> <87C7> <87C6> <87BB> <87EF> <87F2> <87E0> <880F> <880D> <87FE> <880E> <87D2> <8811> <8816> <8815> <8822> <8821> <8831> <8836> <8839> <8827> <883B> <8844> <8842> <8852> <8859> <885E> <8862> <886B> <8881> <887E> <889E> <8875> <887D> <88B5> <8872> <8882> <8897> <8892> <88AE> <8899> <88A2> <888D> <88A4> <88B0> <88BF> <88B1> <88D4> <88DD> <88F9> <8902> endbfchar 100 beginbfchar <88FC> <88F4> <88E8> <88F2> <8904> <890C> <890A> <8913> <8943> <891E> <8925> <8941> <8944> <893B> <8936> <8938> <894C> <891D> <8960> <895E> <8966> <8964> <896D> <896A> <896F> <8974> <8977> <897E> <8983> <8988> <898A> <8993> <8998> <89A1> <89A9> <89A6> <89AC> <89AF> <89B2> <89BA> <89BD> <89DA> <89E7> <89F4> <89F8> <8A03> <8A16> <8A10> <8A0C> <8A1B> <8A1D> <8A25> <8A36> <8A41> <8A5B> <8A52> <8A46> <8A48> <8A7C> <8A6D> <8A6C> <8A62> <8A85> <8A82> <8A84> <8AA8> <8AA1> <8A91> <8A9A> <8AA3> <8AC4> <8ACD> <8AC2> <8ADA> <8AEB> <8AF3> <8AE7> <8AE4> <8AF1> <8B14> <8AE0> <8AE2> <8AF7> <8ADE> <8ADB> <8B0C> <8B07> <8B1A> <8AE1> <8B16> <8B10> <8B17> <8B20> <8B33> <97AB> <8B26> <8B2B> <8B3E> <8B28> <8B41> endbfchar 100 beginbfchar <8B4C> <8B4F> <8B4E> <8B49> <8B56> <8B5B> <8B5A> <8B6B> <8B5F> <8B6C> <8B6F> <8B74> <8B7D> <8B80> <8B8C> <8B8E> <8B96> <8C3A> <8C41> <8C3F> <8C48> <8C4C> <8C4E> <8C50> <8C55> <8C62> <8C6C> <8C78> <8C7A> <8C82> <8C89> <8C85> <8C8A> <8C94> <8C7C> <8C98> <621D> <8CAD> <8CAA> <8CBD> <8CAE> <8CB6> <8CC8> <8CC1> <8CE4> <8CE3> <8CDA> <8CFD> <8D0A> <8D07> <8D0F> <8D0D> <8D10> <9F4E> <8D13> <8CCD> <8D14> <8D16> <8D67> <8D6D> <8D71> <8D73> <8D81> <8D99> <8DC2> <8DBE> <8DBA> <8DCF> <8DDA> <8DD6> <8DCC> <8DDB> <8DCB> <8DDF> <8DE3> <8DFC> <8DFF> <8E10> <8E1F> <8E42> <8E35> <8E30> <8E34> <8E4A> <8E47> <8E49> <8E4C> <8E50> <8E48> <8E59> <8E64> <8E60> <8E2A> <8E63> <8E55> <8E76> <8E72> <8E7C> <8E81> <8E87> endbfchar 100 beginbfchar <8E85> <8E84> <8E8B> <8E8A> <8E93> <8E91> <8E94> <8E99> <8EAA> <8EA1> <8EAC> <8EB0> <8EC6> <8EB1> <8EBE> <8EC5> <8EC8> <8ECB> <8EDB> <8EE3> <8EFC> <8EFB> <8EEB> <8EFE> <8F0A> <8F05> <8F15> <8F12> <8F19> <8F13> <8F1C> <8F1F> <8F1B> <8F0C> <8F26> <8F33> <8F3B> <8F39> <8F45> <8F42> <8F3E> <8F4C> <8F49> <8F46> <8F4E> <8F57> <8F5C> <8F9C> <8F9F> <8FA3> <8FAD> <8FAF> <8FB7> <8FDA> <8FE5> <8FE2> <8FEA> <8FEF> <9087> <8FF4> <9005> <9011> <9015> <9021> <900D> <901E> <9016> <900B> <9027> <9036> <9035> <9039> <8FF8> <900E> <9049> <903E> <9056> <9058> <905E> <9068> <906F> <9076> <96A8> <9072> <9082> <907D> <9081> <9080> <908A> <9089> <908F> <90A8> <90AF> <90B1> <90B5> <90E2> <90E4> <6248> <90DB> <9102> endbfchar 100 beginbfchar <9112> <9119> <9132> <9130> <914A> <9156> <9158> <9163> <9165> <9169> <9173> <9172> <918B> <9189> <9182> <91A2> <91AB> <91AF> <91AA> <91B5> <91B4> <91BA> <91C9> <91CB> <91D0> <91D6> <91DF> <91E1> <91DB> <91FC> <921E> <91FF> <9214> <922C> <9215> <9211> <925E> <9257> <9245> <9249> <9264> <9248> <9295> <923F> <924B> <9250> <929C> <9296> <9293> <929B> <925A> <92CF> <92B9> <92B7> <92E9> <930F> <92FA> <9344> <932E> <9319> <9322> <931A> <9323> <933A> <9335> <933B> <935C> <9360> <937C> <936E> <9356> <93B0> <9394> <93B9> <93E8> <93E5> <93D8> <93C3> <93DD> <93D0> <93C8> <93E4> <941A> <9414> <9413> <9403> <9407> <9410> <9436> <942B> <9435> <9421> <943A> <9441> <9452> <9444> <945B> <9460> <9462> <945E> endbfchar 100 beginbfchar <946A> <9229> <9470> <9475> <9477> <947D> <945A> <947C> <947E> <9481> <947F> <9582> <9587> <958A> <9594> <9596> <95A0> <95A8> <95A7> <95AD> <95BC> <95BB> <95B9> <95BE> <95CA> <6FF6> <95C3> <95CD> <95CC> <95D5> <95D4> <95D6> <95DC> <95E1> <95E5> <95E2> <9621> <9628> <9642> <964C> <964F> <964B> <9677> <965C> <965E> <965D> <965F> <9666> <9672> <966C> <968D> <9698> <9695> <9697> <96AA> <96A7> <96B0> <96B4> <96B6> <96CE> <96CB> <96C9> <96CD> <894D> <96DC> <970D> <96D5> <96F9> <9704> <9706> <9708> <9713> <970E> <9711> <970F> <9716> <9719> <9724> <972A> <9730> <9739> <9744> <9746> <9748> <9742> <9749> <975C> <9760> <9764> <9766> <9768> <52D2> <976B> <9771> <9779> <9785> <977C> <9781> <977A> <9786> endbfchar 100 beginbfchar <978B> <979C> <97A8> <97A6> <97A3> <97C3> <97C6> <97C8> <97CB> <97DC> <97ED> <9F4F> <97F2> <7ADF> <97F6> <97F5> <980F> <980C> <9838> <9824> <9821> <9837> <983D> <9846> <984F> <984B> <986B> <9871> <9874> <9873> <98AA> <98AF> <98B1> <98B6> <98C4> <98C3> <98C6> <98E9> <98EB> <9903> <9909> <9912> <9914> <9918> <9921> <9924> <9920> <992C> <992E> <9942> <9949> <9945> <9950> <994B> <994C> <9955> <99A5> <99BC> <99DF> <99DB> <99DD> <99D8> <99D1> <99FB> <99F8> <9A01> <9A0F> <9A05> <99E2> <9A19> <9A2B> <9A37> <9A45> <9A42> <9A40> <9A43> <9A3E> <9A55> <9A4D> <9A5B> <9A57> <9A5F> <9A62> <9A65> <9A64> <9A69> <9A6B> <9A6A> <9AAD> <9AB0> <9ABC> <9AC0> <9ACF> <9AD1> <9AE6> <9AEF> <9AEB> <9AEE> <9AF4> <9AF1> endbfchar 100 beginbfchar <9AF7> <9AFB> <9B06> <9B18> <9B1A> <9B1F> <9B25> <9B32> <9B44> <9B43> <9B4F> <9B51> <9B58> <9B74> <9B93> <9B83> <9B91> <9BA8> <9BB4> <9BC0> <9BCA> <9BB9> <9BC6> <9BCF> <9BE3> <9BE2> <9BE4> <9BD4> <9BE1> <9C3A> <9BF2> <9BF1> <9BF0> <9C15> <9C14> <9C09> <9C13> <9C0C> <9C06> <9C08> <9C12> <9C0A> <9C04> <9C2E> <9C1B> <9C25> <9C24> <9C21> <9C30> <9C47> <9C32> <9C46> <9C3E> <9C5A> <9C60> <9C67> <9C76> <9C78> <9CE7> <9CEC> <9CF0> <9D09> <9D08> <9CEB> <9D03> <9D06> <9D2A> <9D26> <9DAF> <9D23> <9D1F> <9D44> <9D15> <9D12> <9D41> <9D3F> <9D3E> <9D46> <9D48> <9D64> <9D51> <9D50> <9D59> <9D72> <9D89> <9D87> <9DAB> <9D6F> <9D7A> <9D9A> <9DA4> <9DA9> <9DB2> <9DC4> <9DC1> <9DBB> <9DB8> <9DBA> <9DC6> <9DCF> endbfchar 91 beginbfchar <9DC2> <9DD9> <9DD3> <9DF8> <9DE6> <9DED> <9DEF> <9DFD> <9E1E> <9E75> <9E79> <9E7D> <9E81> <9E88> <9E92> <9E95> <9E91> <9E9D> <9EA5> <9EA9> <9EB8> <9EAA> <9EAD> <9761> <9ECC> <9ED4> <9EDC> <9EDE> <9EDD> <9EE0> <9EE5> <9EE8> <9EEF> <9EF4> <9EF9> <76B7> <9F15> <9F21> <9F2C> <9F3E> <9F4A> <9F52> <9F54> <9F63> <9F6C> <9F6A> <9F77> <9F72> <9F76> <9F95> <9F9C> <9FA0> <582F> <69C7> <9059> <7464> <51DC> <7199> <203E> <30FC> <2010> <301C> <2016> <22EF> <3041> <3043> <3045> <3047> <3049> <3063> <3083> <3085> <3087> <308E> <30A1> <30A3> <30A5> <30A7> <30A9> <30C3> <30E3> <30E5> <30E7> <30EE> endbfchar 100 beginbfrange <00> <5B> <0000> <5D> <7F> <005D> <8140> <8142> <3000> <8146> <8147> <814A> <814B> <309B> <8152> <8153> <30FD> <8154> <8155> <309D> <8158> <815A> <3005> <8165> <8166> <2018> <8167> <8168> <201C> <8169> <816A> <816B> <816C> <3014> <8171> <817A> <3008> <8185> <8186> <2266> <818C> <818D> <2032> <8191> <8192> <00A2> <81A9> <81AA> <2190> <81BA> <81BB> <2286> <81BC> <81BD> <2282> <81C8> <81C9> <2227> <81E1> <81E2> <226A> <81E7> <81E8> <222B> <81F5> <81F6> <2020> <824F> <8258> <8260> <8279> <8281> <829A> <829F> <82F1> <3041> <8340> <837E> <30A1> <8380> <8396> <30E0> <839F> <83AF> <0391> <83B0> <83B6> <03A3> <83BF> <83CF> <03B1> <83D0> <83D6> <03C3> <8440> <8445> <0410> <8447> <8460> <0416> <8470> <8475> <0430> <8477> <847E> <0436> <8480> <8491> <043E> <8540> <8553> <2460> <855E> <8571> <2474> <857C> <857E> <2776> <8580> <8585> <2779> <8592> <859A> <2488> <859F> <85AA> <2160> <85B3> <85BE> <2170> <85DB> <85F4> <249C> <864E> <864F> <3396> <865A> <865C> <3385> <86A1> <86A2> <2661> <86A5> <86A6> <2665> <86C8> <86C9> <261C> <86CC> <86CD> <21C4> <86D0> <86D1> <21E6> <86D4> <86D5> <21E6> <8741> <8746> <322A> <8749> <874A> <3242> <874B> <874C> <3239> <8755> <8756> <323C> <8793> <8798> <32A4> <886A> <886D> <30F7> <8A7A> <8A7B> <984D> <8B9D> <8B9E> <4EAB> <9659> <965A> <5FD8> <9750> <9751> <7336> <98B1> <98B3> <4E9E> <98DD> <98DE> <4FE4> <9940> <9941> <50C9> <994D> <994E> <5101> <9958> <9959> <513F> <995F> <9960> <5169> <996A> <996B> <5195> <996F> <9971> <51A9> <9973> <9974> <51B1> <998E> <998F> <524B> <99A0> <99A1> <52AC> <99AE> <99AF> <52F8> <99DF> <99E0> <542C> <9A46> <9A47> <54E5> <9A56> <9A57> <5556> <9AA8> <9AA9> <5737> <9ABD> <9ABE> <57D2> <9AE4> <9AE6> <58FB> <9AED> <9AEE> <592C> <9B4B> <9B4C> <59D9> <9B56> <9B57> <5A35> <9B65> <9B66> <5AFA> <9B74> <9B75> <5B5A> <9B92> <9B93> <5C07> <9B99> <9B9A> <5C38> <9BE6> <9BE7> <5E36> <9BF2> <9BF3> <5E75> <9BF8> <9BF9> <5EC1> <9C43> <9C44> <5EDA> <9C47> <9C48> <5EE8> <9C60> <9C61> <5F56> <9CA1> <9CA2> <6096> <9CB3> <9CB4> <60F6> <9CBC> <9CBD> <610D> <9CCC> <9CCE> <6158> endbfrange 100 beginbfrange <9CF7> <9CF8> <6208> <9D45> <9D46> <6232> <9D52> <9D53> <6292> <9DA9> <9DAA> <64E0> <9DBB> <9DBC> <6534> <9DCA> <9DCB> <6582> <9DD9> <9DDA> <65E0> <9DE1> <9DE2> <6635> <9DEC> <9DED> <6667> <9E4E> <9E4F> <6726> <9E5B> <9E5C> <6763> <9EFB> <9EFC> <6AA2> <9F64> <9F65> <6B78> <9F66> <9F67> <6B7F> <9F6F> <9F70> <6BAA> <9F82> <9F83> <6C13> <9FEB> <9FEC> <6ED4> <723B> <723F> <72E0> <734E> <74F0> <7586> <75FE> <75F2> <7620> <7647> <7661> <7668> <7699> <76B8> <7725> <7737> <77BC> <79B9> <7A18> <7A61> <7AD9> <7AE1> <7B18> <7B70> <7E59> <7E88> <7E93> <7E9B> <7F4C> <7F50> <7F5F> <7F68> <7FC5> <8018> <8165> <81DF> <81FA> <8201> <826A> <8277> <8317> <8517> <86A9> <868B> <87F6> <88C3> <88D8> <892A> <89BF> <89DC> <8AA5> <8B92> <8B99> <8C8D> <8CB2> <8CFA> <8D04> <8DEA> <8E08> <8E1D> <8F62> <8FF9> <904F> <91C0> <91F5> <93AC> <93D6> <9598> <962E> <96B1> <96B8> <973D> <978F> <97B3> <986F> <991D> <993D> <9951> <9997> <99AD> <99ED> <99F1> <9AD3> endbfrange 27 beginbfrange <9ADE> <9AE2> <9B22> <9B27> <9B2E> <9B4D> <9B96> <9B9F> <9BD1> <9D5D> <9E1A> <9E8B> <9ECE> <9EF6> <9EFB> <9F07> <9F5F> <9F66> <3001> <30F5> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/90pv-RKSJ-V b/Resources/cmap/90pv-RKSJ-V deleted file mode 100644 index a3eb897bd68..00000000000 --- a/Resources/cmap/90pv-RKSJ-V +++ /dev/null @@ -1,111 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (90pv-RKSJ-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (90pv-RKSJ-H) -%%BeginResource: CMap (90pv-RKSJ-V) -%%Title: (90pv-RKSJ-V Adobe Japan1 1) -%%Version: 10.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/90pv-RKSJ-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 1 def -end def - -/CMapName /90pv-RKSJ-V def -/CMapVersion 10.001 def -/CMapType 1 def - -/UIDOffset 940 def -/XUID [1 10 25342] def - -/WMode 1 def - -51 begincidrange -<8141> <8142> 7887 -<8150> <8151> 7889 -<815b> <815d> 7891 -<8160> <8164> 7894 -<8169> <817a> 7899 -<8181> <8181> 7917 -<829f> <829f> 7918 -<82a1> <82a1> 7919 -<82a3> <82a3> 7920 -<82a5> <82a5> 7921 -<82a7> <82a7> 7922 -<82c1> <82c1> 7923 -<82e1> <82e1> 7924 -<82e3> <82e3> 7925 -<82e5> <82e5> 7926 -<82ec> <82ec> 7927 -<8340> <8340> 7928 -<8342> <8342> 7929 -<8344> <8344> 7930 -<8346> <8346> 7931 -<8348> <8348> 7932 -<8362> <8362> 7933 -<8383> <8383> 7934 -<8385> <8385> 7935 -<8387> <8387> 7936 -<838e> <838e> 7937 -<8395> <8396> 7938 -<879f> <879f> 7940 -<87a0> <87a0> 8329 -<87a1> <87a1> 7943 -<87a2> <87a2> 7941 -<87a3> <87a3> 8330 -<87a4> <87a5> 8333 -<87a6> <87a7> 8337 -<87a8> <87a8> 7947 -<87a9> <87aa> 8339 -<87ab> <87ab> 7945 -<87ac> <87ac> 7948 -<87ad> <87ad> 7954 -<87ae> <87af> 8343 -<87b0> <87b0> 7950 -<87b1> <87b2> 8347 -<87b3> <87b3> 7951 -<87b4> <87b4> 8349 -<87b5> <87b5> 7953 -<87bd> <87bd> 8350 -<87be> <87be> 8353 -<87bf> <87bf> 8356 -<87c0> <87c0> 8358 -<87c1> <87c1> 8357 -<87fa> <87fc> 8324 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Add-H b/Resources/cmap/Add-H deleted file mode 100644 index 318166da191..00000000000 --- a/Resources/cmap/Add-H +++ /dev/null @@ -1,709 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Add-H) -%%Title: (Add-H Adobe Japan1 1) -%%Version: 5.008 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 1 def -end def - -/CMapName /Add-H def -/CMapVersion 5.008 def -/CMapType 1 def - -/UIDOffset 580 def -/XUID [1 10 25325] def - -/WMode 0 def - -1 begincodespacerange - <2121> <7E7E> -endcodespacerange - -100 begincidrange -<2121> <217e> 633 -<2221> <222e> 727 -<223a> <2241> 741 -<224a> <2250> 749 -<225c> <226a> 756 -<2272> <2279> 771 -<227e> <227e> 779 -<2330> <2339> 780 -<2341> <235a> 790 -<2361> <237a> 816 -<2421> <2473> 842 -<2474> <2476> 7958 -<2521> <2576> 925 -<2621> <2638> 1011 -<2641> <2658> 1035 -<2721> <2741> 1059 -<2751> <2771> 1092 -<2821> <2821> 7479 -<2822> <2822> 7481 -<2823> <2823> 7491 -<2824> <2824> 7495 -<2825> <2825> 7503 -<2826> <2826> 7499 -<2827> <2827> 7507 -<2828> <2828> 7523 -<2829> <2829> 7515 -<282a> <282a> 7531 -<282b> <282b> 7539 -<282c> <282c> 7480 -<282d> <282d> 7482 -<282e> <282e> 7494 -<282f> <282f> 7498 -<2830> <2830> 7506 -<2831> <2831> 7502 -<2832> <2832> 7514 -<2833> <2833> 7530 -<2834> <2834> 7522 -<2835> <2835> 7538 -<2836> <2836> 7554 -<2837> <2837> 7511 -<2838> <2838> 7526 -<2839> <2839> 7519 -<283a> <283a> 7534 -<283b> <283b> 7542 -<283c> <283c> 7508 -<283d> <283d> 7527 -<283e> <283e> 7516 -<283f> <283f> 7535 -<2840> <2840> 7545 -<3021> <3021> 1125 -<3022> <3022> 7633 -<3023> <3031> 1127 -<3032> <3032> 7961 -<3033> <303a> 1143 -<303b> <303b> 7634 -<303c> <306d> 1152 -<306e> <306e> 7635 -<306f> <3070> 1203 -<3071> <3071> 7962 -<3072> <3072> 1206 -<3073> <3073> 7636 -<3074> <307b> 1208 -<307c> <307c> 7637 -<307d> <307e> 1217 -<3121> <3129> 1219 -<312a> <312a> 7638 -<312b> <3132> 1229 -<3133> <3133> 7963 -<3134> <3134> 1238 -<3135> <3135> 7639 -<3136> <3138> 1240 -<3139> <3139> 7964 -<313a> <313c> 1244 -<313d> <313d> 7642 -<313e> <3141> 1248 -<3142> <3142> 7643 -<3143> <316a> 1253 -<316b> <316b> 7644 -<316c> <317e> 1294 -<3221> <3227> 1313 -<3228> <3228> 7645 -<3229> <3229> 1321 -<322a> <322a> 7646 -<322b> <325f> 1323 -<3260> <3260> 7647 -<3261> <3266> 1377 -<3267> <3267> 7965 -<3268> <3279> 1384 -<327a> <327a> 7648 -<327b> <327e> 1403 -<3321> <3321> 1407 -<3322> <3322> 7650 -<3323> <336a> 1409 -<336b> <336b> 7652 -<336c> <3372> 1482 -<3373> <3373> 7653 -<3374> <3379> 1490 -<337a> <337a> 7654 -<337b> <337e> 1497 -<3421> <3441> 1501 -endcidrange - -100 begincidrange -<3442> <3442> 7655 -<3443> <344c> 1535 -<344d> <344d> 7656 -<344e> <3464> 1546 -<3465> <3465> 7657 -<3466> <347e> 1570 -<3521> <352a> 1595 -<352b> <352b> 7658 -<352c> <353f> 1606 -<3540> <3540> 7659 -<3541> <3561> 1627 -<3562> <3562> 7966 -<3563> <3567> 1661 -<3568> <3568> 7967 -<3569> <357e> 1667 -<3621> <3621> 1689 -<3622> <3622> 7660 -<3623> <3629> 1691 -<362a> <362a> 7661 -<362b> <3641> 1699 -<3642> <3642> 7968 -<3643> <364e> 1723 -<364f> <364f> 7662 -<3650> <366c> 1736 -<366d> <366d> 7663 -<366e> <3673> 1766 -<3674> <3674> 7664 -<3675> <367a> 1773 -<367b> <367b> 7665 -<367c> <367c> 1780 -<367d> <367d> 7666 -<367e> <367e> 1782 -<3721> <3736> 1783 -<3737> <3737> 7668 -<3738> <3751> 1806 -<3752> <3752> 7671 -<3753> <3770> 1833 -<3771> <3771> 7674 -<3772> <377c> 1864 -<377d> <377d> 7969 -<377e> <377e> 7676 -<3821> <3833> 1877 -<3834> <3834> 7677 -<3835> <3840> 1897 -<3841> <3841> 7678 -<3842> <387e> 1910 -<3921> <392a> 1971 -<392b> <392b> 7679 -<392c> <396c> 1982 -<396d> <396d> 7682 -<396e> <3973> 2048 -<3974> <3974> 7683 -<3975> <3978> 2055 -<3979> <3979> 7684 -<397a> <397e> 2060 -<3a21> <3a52> 2065 -<3a53> <3a53> 7685 -<3a54> <3a66> 2116 -<3a67> <3a67> 7686 -<3a68> <3a73> 2136 -<3a74> <3a74> 7687 -<3a75> <3a7e> 2149 -<3b21> <3b26> 2159 -<3b27> <3b27> 7688 -<3b28> <3b29> 2166 -<3b2a> <3b2a> 7689 -<3b2b> <3b2b> 2169 -<3b2c> <3b2c> 7690 -<3b2d> <3b38> 2171 -<3b39> <3b39> 7691 -<3b3a> <3b40> 2184 -<3b41> <3b41> 7970 -<3b42> <3b7e> 2192 -<3c21> <3c47> 2253 -<3c48> <3c48> 7693 -<3c49> <3c5c> 2293 -<3c5d> <3c5e> 7695 -<3c5f> <3c7e> 2315 -<3d21> <3d2a> 2347 -<3d2b> <3d2b> 7697 -<3d2c> <3d35> 2358 -<3d36> <3d36> 7698 -<3d37> <3d6b> 2369 -<3d6c> <3d6c> 7699 -<3d6d> <3d71> 2423 -<3d72> <3d73> 7701 -<3d74> <3d7e> 2430 -<3e21> <3e24> 2441 -<3e25> <3e25> 7703 -<3e26> <3e32> 2446 -<3e33> <3e33> 7704 -<3e34> <3e54> 2460 -<3e55> <3e55> 7706 -<3e56> <3e5e> 2494 -<3e5f> <3e5f> 7707 -<3e60> <3e63> 2504 -<3e64> <3e64> 7708 -<3e65> <3e7e> 2509 -<3f21> <3f29> 2535 -<3f2a> <3f2a> 7709 -endcidrange - -100 begincidrange -<3f2b> <3f58> 2545 -<3f59> <3f59> 7971 -<3f5a> <3f5f> 2592 -<3f60> <3f60> 7711 -<3f61> <3f7e> 2599 -<4021> <4021> 2629 -<4022> <4022> 7713 -<4023> <4065> 2631 -<4066> <4066> 7715 -<4067> <4070> 2699 -<4071> <4071> 7716 -<4072> <4078> 2710 -<4079> <4079> 7718 -<407a> <407a> 7972 -<407b> <407b> 2719 -<407c> <407d> 7973 -<407e> <407e> 2722 -<4121> <4126> 2723 -<4127> <4127> 7720 -<4128> <4138> 2730 -<4139> <4139> 7721 -<413a> <414b> 2748 -<414c> <414c> 7722 -<414d> <414e> 2767 -<414f> <414f> 7723 -<4150> <415e> 2770 -<415f> <415f> 7724 -<4160> <4168> 2786 -<4169> <4169> 7725 -<416a> <417e> 2796 -<4221> <4236> 2817 -<4237> <4237> 7975 -<4238> <423c> 2840 -<423d> <423d> 7726 -<423e> <424c> 2846 -<424d> <424d> 7727 -<424e> <425b> 2862 -<425c> <425c> 7728 -<425d> <4262> 2877 -<4263> <4263> 7729 -<4264> <426e> 2884 -<426f> <426f> 7730 -<4270> <427c> 2896 -<427d> <427d> 7733 -<427e> <427e> 2910 -<4321> <4326> 2911 -<4327> <4327> 7734 -<4328> <4328> 2918 -<4329> <4329> 7735 -<432a> <432c> 2920 -<432d> <432e> 7737 -<432f> <433c> 2925 -<433d> <433d> 7739 -<433e> <436f> 2940 -<4370> <4370> 7740 -<4371> <4374> 2991 -<4375> <4375> 7741 -<4376> <437b> 2996 -<437c> <437c> 7742 -<437d> <437e> 3003 -<4421> <443c> 3005 -<443d> <443d> 7743 -<443e> <4447> 3034 -<4448> <4448> 7744 -<4449> <4449> 3045 -<444a> <444a> 7745 -<444b> <444e> 3047 -<444f> <444f> 7747 -<4450> <447e> 3052 -<4521> <4521> 3099 -<4522> <4522> 7748 -<4523> <4526> 3101 -<4527> <4527> 7749 -<4528> <452d> 3106 -<452e> <452e> 7750 -<452f> <4535> 3113 -<4536> <4536> 7751 -<4537> <453e> 3121 -<453f> <453f> 7752 -<4540> <4547> 3130 -<4548> <4548> 7753 -<4549> <454a> 3139 -<454b> <454b> 7754 -<454c> <4550> 3142 -<4551> <4551> 7976 -<4552> <4552> 7756 -<4553> <4563> 3149 -<4564> <4564> 7757 -<4565> <4577> 3167 -<4578> <4578> 7758 -<4579> <457e> 3187 -<4621> <4641> 3193 -<4642> <4642> 7760 -<4643> <4653> 3227 -<4654> <4654> 7761 -<4655> <465a> 3245 -<465b> <465b> 7763 -<465c> <4665> 3252 -<4666> <4667> 7766 -<4668> <4669> 3264 -endcidrange - -100 begincidrange -<466a> <466a> 7768 -<466b> <4675> 3267 -<4676> <4676> 7872 -<4677> <467e> 3279 -<4721> <4728> 3287 -<4729> <4729> 7769 -<472a> <472a> 7977 -<472b> <4738> 3297 -<4739> <4739> 7770 -<473a> <4756> 3312 -<4757> <4757> 7771 -<4758> <4766> 3342 -<4767> <4767> 7772 -<4768> <4768> 3358 -<4769> <4769> 7773 -<476a> <476c> 3360 -<476d> <476d> 7774 -<476e> <477e> 3364 -<4821> <4823> 3381 -<4824> <4824> 7775 -<4825> <482d> 3385 -<482e> <482e> 7776 -<482f> <482f> 3395 -<4830> <4830> 7777 -<4831> <483f> 3397 -<4840> <4840> 7978 -<4841> <4853> 3413 -<4854> <4854> 7778 -<4855> <4874> 3433 -<4875> <4875> 7780 -<4876> <487e> 3466 -<4921> <4921> 3475 -<4922> <4923> 7781 -<4924> <492e> 3478 -<492f> <492f> 7783 -<4930> <4931> 3490 -<4932> <4932> 7784 -<4933> <4934> 3493 -<4935> <4935> 7785 -<4936> <493f> 3496 -<4940> <4940> 7786 -<4941> <494d> 3507 -<494e> <494e> 7787 -<494f> <497e> 3521 -<4a21> <4a42> 3569 -<4a43> <4a43> 7789 -<4a44> <4a4c> 3604 -<4a4d> <4a4d> 7790 -<4a4e> <4a52> 3614 -<4a53> <4a53> 7979 -<4a54> <4a59> 3620 -<4a5a> <4a5a> 7791 -<4a5b> <4a78> 3627 -<4a79> <4a79> 7792 -<4a7a> <4a7e> 3658 -<4b21> <4b28> 3663 -<4b29> <4b29> 7794 -<4b2a> <4b4a> 3672 -<4b4b> <4b4b> 7795 -<4b4c> <4b6f> 3706 -<4b70> <4b70> 7796 -<4b71> <4b77> 3743 -<4b78> <4b78> 7980 -<4b79> <4b7e> 3751 -<4c21> <4c4c> 3757 -<4c4d> <4c4d> 7797 -<4c4e> <4c58> 3802 -<4c59> <4c59> 7798 -<4c5a> <4c5e> 3814 -<4c5f> <4c5f> 7799 -<4c60> <4c61> 3820 -<4c62> <4c62> 7800 -<4c63> <4c79> 3823 -<4c7a> <4c7a> 7801 -<4c7b> <4c7b> 3847 -<4c7c> <4c7c> 7802 -<4c7d> <4c7e> 3849 -<4d21> <4d31> 3851 -<4d32> <4d32> 7804 -<4d33> <4d4f> 3869 -<4d50> <4d50> 7805 -<4d51> <4d53> 3899 -<4d54> <4d54> 7806 -<4d55> <4d68> 3903 -<4d69> <4d69> 7807 -<4d6a> <4d7e> 3924 -<4e21> <4e79> 3945 -<4e7a> <4e7b> 7809 -<4e7c> <4e7c> 7981 -<4e7d> <4e7e> 4037 -<4f21> <4f21> 7811 -<4f22> <4f30> 4040 -<4f31> <4f31> 7812 -<4f32> <4f38> 4056 -<4f39> <4f39> 7813 -<4f3a> <4f53> 4064 -<5021> <507e> 4090 -<5121> <5121> 4184 -<5122> <5122> 7982 -<5123> <513c> 4186 -endcidrange - -100 begincidrange -<513d> <513d> 7814 -<513e> <514c> 4213 -<514d> <514d> 7817 -<514e> <517e> 4229 -<5221> <5237> 4278 -<5238> <5238> 7983 -<5239> <527e> 4302 -<5321> <532f> 4372 -<5330> <5330> 7818 -<5331> <5339> 4388 -<533a> <533a> 7819 -<533b> <5347> 4398 -<5348> <5348> 7984 -<5349> <535d> 4412 -<535e> <535e> 7821 -<535f> <536a> 4434 -<536b> <536b> 7822 -<536c> <536c> 7985 -<536d> <537e> 4448 -<5421> <5443> 4466 -<5444> <5444> 7823 -<5445> <5445> 7986 -<5446> <546b> 4503 -<546c> <546c> 7987 -<546d> <547e> 4542 -<5521> <553c> 4560 -<553d> <553d> 7824 -<553e> <5562> 4589 -<5563> <5563> 7825 -<5564> <5577> 4627 -<5578> <5578> 7988 -<5579> <557e> 4648 -<5621> <5621> 4654 -<5622> <5622> 7826 -<5623> <567c> 4656 -<567d> <567e> 7989 -<5721> <577e> 4748 -<5821> <5823> 4842 -<5824> <5824> 7828 -<5825> <587e> 4846 -<5921> <5927> 4936 -<5928> <5928> 7991 -<5929> <595f> 4944 -<5960> <5960> 7829 -<5961> <596b> 5000 -<596c> <596c> 7830 -<596d> <597e> 5012 -<5a21> <5a38> 5030 -<5a39> <5a39> 7831 -<5a3a> <5a79> 5055 -<5a7a> <5a7a> 7992 -<5a7b> <5a7e> 5120 -<5b21> <5b44> 5124 -<5b45> <5b45> 7833 -<5b46> <5b6a> 5161 -<5b6b> <5b6b> 7835 -<5b6c> <5b7e> 5199 -<5c21> <5c7e> 5218 -<5d21> <5d60> 5312 -<5d61> <5d61> 7993 -<5d62> <5d7e> 5377 -<5e21> <5e4f> 5406 -<5e50> <5e50> 7837 -<5e51> <5e55> 5454 -<5e56> <5e56> 7994 -<5e57> <5e75> 5460 -<5e76> <5e76> 7995 -<5e77> <5e7e> 5492 -<5f21> <5f72> 5500 -<5f73> <5f73> 7838 -<5f74> <5f7e> 5583 -<6021> <6025> 5594 -<6026> <6026> 7839 -<6027> <605e> 5600 -<605f> <605f> 7840 -<6060> <607e> 5657 -<6121> <612a> 5688 -<612b> <612b> 7841 -<612c> <617e> 5699 -<6221> <626e> 5782 -<626f> <626f> 7845 -<6270> <627e> 5861 -<6321> <6349> 5876 -<634a> <634a> 7846 -<634b> <6353> 5918 -<6354> <6354> 7847 -<6355> <6358> 5928 -<6359> <6359> 7996 -<635a> <637e> 5933 -<6421> <6438> 5970 -<6439> <6439> 7848 -<643a> <643f> 5995 -<6440> <6440> 7997 -<6441> <6463> 6002 -<6464> <6464> 7849 -<6465> <646d> 6038 -<646e> <646e> 7850 -<646f> <647e> 6048 -<6521> <6538> 6064 -<6539> <6539> 7851 -endcidrange - -100 begincidrange -<653a> <653a> 6089 -<653b> <653b> 7852 -<653c> <6545> 6091 -<6546> <6546> 7853 -<6547> <657e> 6102 -<6621> <6648> 6158 -<6649> <6649> 7998 -<664a> <667e> 6199 -<6721> <6763> 6252 -<6764> <6764> 7855 -<6765> <6768> 6320 -<6769> <6769> 7856 -<676a> <6771> 6325 -<6772> <6772> 7857 -<6773> <677e> 6334 -<6821> <683a> 6346 -<683b> <683b> 7859 -<683c> <684c> 6373 -<684d> <684d> 7999 -<684e> <687e> 6391 -<6921> <697d> 6440 -<697e> <697e> 8000 -<6a21> <6a3b> 6534 -<6a3c> <6a3d> 8001 -<6a3e> <6a6e> 6563 -<6a6f> <6a6f> 7864 -<6a70> <6a7e> 6613 -<6b21> <6b31> 6628 -<6b32> <6b32> 7865 -<6b33> <6b65> 6646 -<6b66> <6b66> 7866 -<6b67> <6b7e> 6698 -<6c21> <6c68> 6722 -<6c69> <6c69> 7868 -<6c6a> <6c7e> 6795 -<6d21> <6d4d> 6816 -<6d4e> <6d4e> 7870 -<6d4f> <6d7e> 6862 -<6e21> <6e28> 6910 -<6e29> <6e29> 7873 -<6e2a> <6e3c> 6919 -<6e3d> <6e3d> 7874 -<6e3e> <6e7e> 6939 -<6f21> <6f7e> 7004 -<7021> <7050> 7098 -<7051> <7051> 7879 -<7052> <707e> 7147 -<7121> <7158> 7192 -<7159> <7159> 8003 -<715a> <717e> 7249 -<7221> <722c> 7286 -<722d> <722d> 7882 -<722e> <723b> 7299 -<723c> <723c> 7883 -<723d> <724d> 7314 -<724e> <724e> 7884 -<724f> <727e> 7332 -<7321> <7350> 7380 -<7351> <7351> 7885 -<7352> <7352> 8004 -<7353> <737c> 7430 -<737d> <737d> 7886 -<737e> <737e> 7473 -<7421> <7424> 7474 -<7425> <7426> 8284 -<7721> <7723> 8005 -<7727> <7727> 8008 -<7728> <7728> 768 -<7729> <7729> 762 -<772a> <772a> 761 -<772e> <7738> 8009 -<773c> <773e> 7601 -<773f> <773f> 8020 -<7740> <7740> 7607 -<7741> <7743> 8021 -<7744> <7746> 7604 -<7747> <7750> 8024 -<7751> <7751> 771 -<7752> <7752> 8034 -<7753> <7753> 772 -<7754> <7755> 8035 -<7757> <7757> 8037 -<7759> <7759> 7588 -<775a> <775a> 7585 -<775b> <775b> 8038 -<775c> <775c> 7586 -<775d> <775f> 8039 -<7760> <7760> 7590 -<7761> <7761> 8042 -<7762> <7762> 7592 -<7763> <7763> 7596 -<7764> <7764> 8043 -<7765> <7765> 7598 -<7766> <7766> 7595 -<7767> <7768> 8044 -<7769> <7769> 7599 -<776a> <7770> 8046 -<7774> <7779> 8053 -<777a> <777a> 7610 -<777b> <777b> 8059 -endcidrange - -31 begincidrange -<777e> <777e> 8060 -<7829> <7832> 8061 -<7834> <7847> 8071 -<7849> <785c> 7555 -<785d> <785d> 8091 -<785e> <7867> 7575 -<786b> <787e> 8092 -<7921> <793a> 8112 -<7945> <7945> 7958 -<7949> <794a> 8138 -<794b> <794b> 7620 -<794c> <794e> 8140 -<794f> <794f> 7619 -<7950> <7954> 8143 -<7955> <7955> 7618 -<7956> <7959> 8148 -<795d> <796a> 8152 -<796f> <797e> 8166 -<7d21> <7d22> 7887 -<7d23> <7d23> 8268 -<7d24> <7d24> 8274 -<7d25> <7d2e> 7889 -<7d2f> <7d2f> 8282 -<7d30> <7d30> 8275 -<7d31> <7d31> 8280 -<7d32> <7d32> 8277 -<7d33> <7d44> 7899 -<7d45> <7d5a> 7918 -<7d5b> <7d5c> 8264 -<7d6d> <7d70> 736 -<7d71> <7d74> 8182 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Add-RKSJ-H b/Resources/cmap/Add-RKSJ-H deleted file mode 100644 index 80c102b9c15..00000000000 --- a/Resources/cmap/Add-RKSJ-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Add-RKSJ-H) %%Title: (Add-RKSJ-H Adobe Japan1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 1 def end def /CMapName /Add-RKSJ-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 140 def /XUID [1 10 25326] def /WMode 0 def 4 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 1 beginnotdefrange <00> <1f> 231 endnotdefrange 100 begincidrange <20> <7e> 231 <8140> <817e> 633 <8180> <81ac> 696 <81b8> <81bf> 741 <81c8> <81ce> 749 <81da> <81e8> 756 <81f0> <81f7> 771 <81fc> <81fc> 779 <824f> <8258> 780 <8260> <8279> 790 <8281> <829a> 816 <829f> <82f1> 842 <82f2> <82f4> 7958 <8340> <837e> 925 <8380> <8396> 988 <839f> <83b6> 1011 <83bf> <83d6> 1035 <8440> <8460> 1059 <8470> <847e> 1092 <8480> <8491> 1107 <849f> <849f> 7479 <84a0> <84a0> 7481 <84a1> <84a1> 7491 <84a2> <84a2> 7495 <84a3> <84a3> 7503 <84a4> <84a4> 7499 <84a5> <84a5> 7507 <84a6> <84a6> 7523 <84a7> <84a7> 7515 <84a8> <84a8> 7531 <84a9> <84a9> 7539 <84aa> <84aa> 7480 <84ab> <84ab> 7482 <84ac> <84ac> 7494 <84ad> <84ad> 7498 <84ae> <84ae> 7506 <84af> <84af> 7502 <84b0> <84b0> 7514 <84b1> <84b1> 7530 <84b2> <84b2> 7522 <84b3> <84b3> 7538 <84b4> <84b4> 7554 <84b5> <84b5> 7511 <84b6> <84b6> 7526 <84b7> <84b7> 7519 <84b8> <84b8> 7534 <84b9> <84b9> 7542 <84ba> <84ba> 7508 <84bb> <84bb> 7527 <84bc> <84bc> 7516 <84bd> <84bd> 7535 <84be> <84be> 7545 <889f> <889f> 1125 <88a0> <88a0> 7633 <88a1> <88af> 1127 <88b0> <88b0> 7961 <88b1> <88b8> 1143 <88b9> <88b9> 7634 <88ba> <88eb> 1152 <88ec> <88ec> 7635 <88ed> <88ee> 1203 <88ef> <88ef> 7962 <88f0> <88f0> 1206 <88f1> <88f1> 7636 <88f2> <88f9> 1208 <88fa> <88fa> 7637 <88fb> <88fc> 1217 <8940> <8948> 1219 <8949> <8949> 7638 <894a> <8951> 1229 <8952> <8952> 7963 <8953> <8953> 1238 <8954> <8954> 7639 <8955> <8957> 1240 <8958> <8958> 7964 <8959> <895b> 1244 <895c> <895c> 7642 <895d> <8960> 1248 <8961> <8961> 7643 <8962> <897e> 1253 <8980> <898a> 1282 <898b> <898b> 7644 <898c> <89a5> 1294 <89a6> <89a6> 7645 <89a7> <89a7> 1321 <89a8> <89a8> 7646 <89a9> <89dd> 1323 <89de> <89de> 7647 <89df> <89e4> 1377 <89e5> <89e5> 7965 <89e6> <89f7> 1384 <89f8> <89f8> 7648 <89f9> <89fc> 1403 <8a40> <8a40> 1407 <8a41> <8a41> 7650 <8a42> <8a7e> 1409 <8a80> <8a8a> 1470 <8a8b> <8a8b> 7652 <8a8c> <8a92> 1482 <8a93> <8a93> 7653 endcidrange 100 begincidrange <8a94> <8a99> 1490 <8a9a> <8a9a> 7654 <8a9b> <8abf> 1497 <8ac0> <8ac0> 7655 <8ac1> <8aca> 1535 <8acb> <8acb> 7656 <8acc> <8ae2> 1546 <8ae3> <8ae3> 7657 <8ae4> <8afc> 1570 <8b40> <8b49> 1595 <8b4a> <8b4a> 7658 <8b4b> <8b5e> 1606 <8b5f> <8b5f> 7659 <8b60> <8b7e> 1627 <8b80> <8b81> 1658 <8b82> <8b82> 7966 <8b83> <8b87> 1661 <8b88> <8b88> 7967 <8b89> <8b9f> 1667 <8ba0> <8ba0> 7660 <8ba1> <8ba7> 1691 <8ba8> <8ba8> 7661 <8ba9> <8bbf> 1699 <8bc0> <8bc0> 7968 <8bc1> <8bcc> 1723 <8bcd> <8bcd> 7662 <8bce> <8bea> 1736 <8beb> <8beb> 7663 <8bec> <8bf1> 1766 <8bf2> <8bf2> 7664 <8bf3> <8bf8> 1773 <8bf9> <8bf9> 7665 <8bfa> <8bfa> 1780 <8bfb> <8bfb> 7666 <8bfc> <8bfc> 1782 <8c40> <8c55> 1783 <8c56> <8c56> 7668 <8c57> <8c70> 1806 <8c71> <8c71> 7671 <8c72> <8c7e> 1833 <8c80> <8c90> 1846 <8c91> <8c91> 7674 <8c92> <8c9c> 1864 <8c9d> <8c9d> 7969 <8c9e> <8c9e> 7676 <8c9f> <8cb1> 1877 <8cb2> <8cb2> 7677 <8cb3> <8cbe> 1897 <8cbf> <8cbf> 7678 <8cc0> <8cfc> 1910 <8d40> <8d49> 1971 <8d4a> <8d4a> 7679 <8d4b> <8d7e> 1982 <8d80> <8d8c> 2034 <8d8d> <8d8d> 7682 <8d8e> <8d93> 2048 <8d94> <8d94> 7683 <8d95> <8d98> 2055 <8d99> <8d99> 7684 <8d9a> <8dd0> 2060 <8dd1> <8dd1> 7685 <8dd2> <8de4> 2116 <8de5> <8de5> 7686 <8de6> <8df1> 2136 <8df2> <8df2> 7687 <8df3> <8dfc> 2149 <8e40> <8e45> 2159 <8e46> <8e46> 7688 <8e47> <8e48> 2166 <8e49> <8e49> 7689 <8e4a> <8e4a> 2169 <8e4b> <8e4b> 7690 <8e4c> <8e57> 2171 <8e58> <8e58> 7691 <8e59> <8e5f> 2184 <8e60> <8e60> 7970 <8e61> <8e7e> 2192 <8e80> <8ec5> 2222 <8ec6> <8ec6> 7693 <8ec7> <8eda> 2293 <8edb> <8edc> 7695 <8edd> <8efc> 2315 <8f40> <8f49> 2347 <8f4a> <8f4a> 7697 <8f4b> <8f54> 2358 <8f55> <8f55> 7698 <8f56> <8f7e> 2369 <8f80> <8f8b> 2410 <8f8c> <8f8c> 7699 <8f8d> <8f91> 2423 <8f92> <8f93> 7701 <8f94> <8fa2> 2430 <8fa3> <8fa3> 7703 <8fa4> <8fb0> 2446 <8fb1> <8fb1> 7704 <8fb2> <8fd2> 2460 <8fd3> <8fd3> 7706 <8fd4> <8fdc> 2494 <8fdd> <8fdd> 7707 <8fde> <8fe1> 2504 endcidrange 100 begincidrange <8fe2> <8fe2> 7708 <8fe3> <8ffc> 2509 <9040> <9048> 2535 <9049> <9049> 7709 <904a> <9077> 2545 <9078> <9078> 7971 <9079> <907e> 2592 <9080> <9080> 7711 <9081> <909f> 2599 <90a0> <90a0> 7713 <90a1> <90e3> 2631 <90e4> <90e4> 7715 <90e5> <90ee> 2699 <90ef> <90ef> 7716 <90f0> <90f6> 2710 <90f7> <90f7> 7718 <90f8> <90f8> 7972 <90f9> <90f9> 2719 <90fa> <90fb> 7973 <90fc> <90fc> 2722 <9140> <9145> 2723 <9146> <9146> 7720 <9147> <9157> 2730 <9158> <9158> 7721 <9159> <916a> 2748 <916b> <916b> 7722 <916c> <916d> 2767 <916e> <916e> 7723 <916f> <917d> 2770 <917e> <917e> 7724 <9180> <9188> 2786 <9189> <9189> 7725 <918a> <91b4> 2796 <91b5> <91b5> 7975 <91b6> <91ba> 2840 <91bb> <91bb> 7726 <91bc> <91ca> 2846 <91cb> <91cb> 7727 <91cc> <91d9> 2862 <91da> <91da> 7728 <91db> <91e0> 2877 <91e1> <91e1> 7729 <91e2> <91ec> 2884 <91ed> <91ed> 7730 <91ee> <91fa> 2896 <91fb> <91fb> 7733 <91fc> <91fc> 2910 <9240> <9245> 2911 <9246> <9246> 7734 <9247> <9247> 2918 <9248> <9248> 7735 <9249> <924b> 2920 <924c> <924d> 7737 <924e> <925b> 2925 <925c> <925c> 7739 <925d> <927e> 2940 <9280> <928f> 2974 <9290> <9290> 7740 <9291> <9294> 2991 <9295> <9295> 7741 <9296> <929b> 2996 <929c> <929c> 7742 <929d> <92ba> 3003 <92bb> <92bb> 7743 <92bc> <92c5> 3034 <92c6> <92c6> 7744 <92c7> <92c7> 3045 <92c8> <92c8> 7745 <92c9> <92cc> 3047 <92cd> <92cd> 7747 <92ce> <92fc> 3052 <9340> <9340> 3099 <9341> <9341> 7748 <9342> <9345> 3101 <9346> <9346> 7749 <9347> <934c> 3106 <934d> <934d> 7750 <934e> <9354> 3113 <9355> <9355> 7751 <9356> <935d> 3121 <935e> <935e> 7752 <935f> <9366> 3130 <9367> <9367> 7753 <9368> <9369> 3139 <936a> <936a> 7754 <936b> <936f> 3142 <9370> <9370> 7976 <9371> <9371> 7756 <9372> <937e> 3149 <9380> <9383> 3162 <9384> <9384> 7757 <9385> <9397> 3167 <9398> <9398> 7758 <9399> <93bf> 3187 <93c0> <93c0> 7760 <93c1> <93d1> 3227 <93d2> <93d2> 7761 <93d3> <93d8> 3245 <93d9> <93d9> 7763 <93da> <93e3> 3252 endcidrange 100 begincidrange <93e4> <93e5> 7766 <93e6> <93e7> 3264 <93e8> <93e8> 7768 <93e9> <93f3> 3267 <93f4> <93f4> 7872 <93f5> <93fc> 3279 <9440> <9447> 3287 <9448> <9448> 7769 <9449> <9449> 7977 <944a> <9457> 3297 <9458> <9458> 7770 <9459> <9475> 3312 <9476> <9476> 7771 <9477> <947e> 3342 <9480> <9486> 3350 <9487> <9487> 7772 <9488> <9488> 3358 <9489> <9489> 7773 <948a> <948c> 3360 <948d> <948d> 7774 <948e> <94a1> 3364 <94a2> <94a2> 7775 <94a3> <94ab> 3385 <94ac> <94ac> 7776 <94ad> <94ad> 3395 <94ae> <94ae> 7777 <94af> <94bd> 3397 <94be> <94be> 7978 <94bf> <94d1> 3413 <94d2> <94d2> 7778 <94d3> <94f2> 3433 <94f3> <94f3> 7780 <94f4> <94fc> 3466 <9540> <9540> 3475 <9541> <9542> 7781 <9543> <954d> 3478 <954e> <954e> 7783 <954f> <9550> 3490 <9551> <9551> 7784 <9552> <9553> 3493 <9554> <9554> 7785 <9555> <955e> 3496 <955f> <955f> 7786 <9560> <956c> 3507 <956d> <956d> 7787 <956e> <957e> 3521 <9580> <95c0> 3538 <95c1> <95c1> 7789 <95c2> <95ca> 3604 <95cb> <95cb> 7790 <95cc> <95d0> 3614 <95d1> <95d1> 7979 <95d2> <95d7> 3620 <95d8> <95d8> 7791 <95d9> <95f6> 3627 <95f7> <95f7> 7792 <95f8> <95fc> 3658 <9640> <9647> 3663 <9648> <9648> 7794 <9649> <9669> 3672 <966a> <966a> 7795 <966b> <967e> 3706 <9680> <968f> 3726 <9690> <9690> 7796 <9691> <9697> 3743 <9698> <9698> 7980 <9699> <96ca> 3751 <96cb> <96cb> 7797 <96cc> <96d6> 3802 <96d7> <96d7> 7798 <96d8> <96dc> 3814 <96dd> <96dd> 7799 <96de> <96df> 3820 <96e0> <96e0> 7800 <96e1> <96f7> 3823 <96f8> <96f8> 7801 <96f9> <96f9> 3847 <96fa> <96fa> 7802 <96fb> <96fc> 3849 <9740> <9750> 3851 <9751> <9751> 7804 <9752> <976e> 3869 <976f> <976f> 7805 <9770> <9772> 3899 <9773> <9773> 7806 <9774> <977e> 3903 <9780> <9788> 3914 <9789> <9789> 7807 <978a> <97f7> 3924 <97f8> <97f9> 7809 <97fa> <97fa> 7981 <97fb> <97fc> 4037 <9840> <9840> 7811 <9841> <984f> 4040 <9850> <9850> 7812 <9851> <9857> 4056 <9858> <9858> 7813 <9859> <9872> 4064 <989f> <98fc> 4090 <9940> <9940> 4184 endcidrange 100 begincidrange <9941> <9941> 7982 <9942> <995b> 4186 <995c> <995c> 7814 <995d> <996b> 4213 <996c> <996c> 7817 <996d> <997e> 4229 <9980> <99b5> 4247 <99b6> <99b6> 7983 <99b7> <99fc> 4302 <9a40> <9a4e> 4372 <9a4f> <9a4f> 7818 <9a50> <9a58> 4388 <9a59> <9a59> 7819 <9a5a> <9a66> 4398 <9a67> <9a67> 7984 <9a68> <9a7c> 4412 <9a7d> <9a7d> 7821 <9a7e> <9a7e> 4434 <9a80> <9a8a> 4435 <9a8b> <9a8b> 7822 <9a8c> <9a8c> 7985 <9a8d> <9ac1> 4448 <9ac2> <9ac2> 7823 <9ac3> <9ac3> 7986 <9ac4> <9ae9> 4503 <9aea> <9aea> 7987 <9aeb> <9afc> 4542 <9b40> <9b5b> 4560 <9b5c> <9b5c> 7824 <9b5d> <9b7e> 4589 <9b80> <9b82> 4623 <9b83> <9b83> 7825 <9b84> <9b97> 4627 <9b98> <9b98> 7988 <9b99> <9b9f> 4648 <9ba0> <9ba0> 7826 <9ba1> <9bfa> 4656 <9bfb> <9bfc> 7989 <9c40> <9c7e> 4748 <9c80> <9ca1> 4811 <9ca2> <9ca2> 7828 <9ca3> <9cfc> 4846 <9d40> <9d46> 4936 <9d47> <9d47> 7991 <9d48> <9d7e> 4944 <9d80> <9d80> 7829 <9d81> <9d8b> 5000 <9d8c> <9d8c> 7830 <9d8d> <9db6> 5012 <9db7> <9db7> 7831 <9db8> <9df7> 5055 <9df8> <9df8> 7992 <9df9> <9dfc> 5120 <9e40> <9e63> 5124 <9e64> <9e64> 7833 <9e65> <9e7e> 5161 <9e80> <9e8a> 5187 <9e8b> <9e8b> 7835 <9e8c> <9efc> 5199 <9f40> <9f7e> 5312 <9f80> <9f80> 5375 <9f81> <9f81> 7993 <9f82> <9fcd> 5377 <9fce> <9fce> 7837 <9fcf> <9fd3> 5454 <9fd4> <9fd4> 7994 <9fd5> <9ff3> 5460 <9ff4> <9ff4> 7995 <9ff5> <9ffc> 5492 326 5500 5563 7838 5583 7839 5600 7840 5657 5688 7841 5699 5751 7845 5861 5876 7846 5918 7847 5928 7996 5933 5939 7848 5995 7997 6002 7849 6038 7850 6048 endcidrange 100 begincidrange 6064 7851 6089 7852 6091 7853 6102 6127 7998 6199 6252 6315 7855 6320 7856 6325 7857 6334 7859 6373 7999 6391 6440 6503 8000 6534 8001 6563 7864 6613 6628 7865 6646 6691 7866 6698 7868 6795 6816 7870 6862 6879 7873 6919 7874 6939 7004 7067 7879 7147 7192 8003 7249 7255 7882 7299 7883 7314 7884 7332 7380 7885 8004 7430 7443 7886 7473 8284 8005 8008 768 762 761 8009 7601 8020 7607 8021 7604 8024 771 8034 772 8035 8037 7588 7585 8038 7586 8039 7590 8042 7592 7596 8043 7598 7595 8044 7599 8046 endcidrange 35 begincidrange 8053 7610 8059 8060 8061 8071 7555 8091 7575 8092 8112 7958 8138 7620 8140 7619 8143 7618 8148 8152 8155 8166 7887 8268 8274 7889 8282 8275 8280 8277 7899 7918 8264 736 8182 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Add-RKSJ-V b/Resources/cmap/Add-RKSJ-V deleted file mode 100644 index 144a7307080..00000000000 --- a/Resources/cmap/Add-RKSJ-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (Add-RKSJ-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (Add-RKSJ-H) %%BeginResource: CMap (Add-RKSJ-V) %%Title: (Add-RKSJ-V Adobe Japan1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /Add-RKSJ-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 1 def end def /CMapName /Add-RKSJ-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 780 def /XUID [1 10 25327] def /WMode 1 def 57 begincidrange <8141> <8142> 7887 <8143> <8143> 8268 <8144> <8144> 8274 <8150> <8151> 7889 <815b> <815d> 7891 <8160> <8164> 7894 <8165> <8165> 8282 <8166> <8166> 8275 <8167> <8167> 8280 <8168> <8168> 8277 <8169> <817a> 7899 <829f> <829f> 7918 <82a1> <82a1> 7919 <82a3> <82a3> 7920 <82a5> <82a5> 7921 <82a7> <82a7> 7922 <82c1> <82c1> 7923 <82e1> <82e1> 7924 <82e3> <82e3> 7925 <82e5> <82e5> 7926 <82ec> <82ec> 7927 <82f3> <82f4> 8264 <8340> <8340> 7928 <8342> <8342> 7929 <8344> <8344> 7930 <8346> <8346> 7931 <8348> <8348> 7932 <8362> <8362> 7933 <8383> <8383> 7934 <8385> <8385> 7935 <8387> <8387> 7936 <838e> <838e> 7937 <8395> <8396> 7938 7943 7940 8329 7941 8330 8339 7945 8338 7947 7951 8348 7953 7950 8344 8347 7954 8343 8349 8358 8357 8353 8356 8324 8333 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Add-V b/Resources/cmap/Add-V deleted file mode 100644 index 6b56ee4c94c..00000000000 --- a/Resources/cmap/Add-V +++ /dev/null @@ -1,117 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (Add-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (Add-H) -%%BeginResource: CMap (Add-V) -%%Title: (Add-V Adobe Japan1 1) -%%Version: 5.008 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/Add-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 1 def -end def - -/CMapName /Add-V def -/CMapVersion 5.008 def -/CMapType 1 def - -/UIDOffset 790 def -/XUID [1 10 25328] def - -/WMode 1 def - -57 begincidrange -<2122> <2123> 7887 -<2124> <2124> 8268 -<2125> <2125> 8274 -<2131> <2132> 7889 -<213c> <213e> 7891 -<2141> <2145> 7894 -<2146> <2146> 8282 -<2147> <2147> 8275 -<2148> <2148> 8280 -<2149> <2149> 8277 -<214a> <215b> 7899 -<2421> <2421> 7918 -<2423> <2423> 7919 -<2425> <2425> 7920 -<2427> <2427> 7921 -<2429> <2429> 7922 -<2443> <2443> 7923 -<2463> <2463> 7924 -<2465> <2465> 7925 -<2467> <2467> 7926 -<246e> <246e> 7927 -<2475> <2476> 8264 -<2521> <2521> 7928 -<2523> <2523> 7929 -<2525> <2525> 7930 -<2527> <2527> 7931 -<2529> <2529> 7932 -<2543> <2543> 7933 -<2563> <2563> 7934 -<2565> <2565> 7935 -<2567> <2567> 7936 -<256e> <256e> 7937 -<2575> <2576> 7938 -<7759> <7759> 7943 -<775a> <775a> 7940 -<775b> <775b> 8329 -<775c> <775c> 7941 -<775d> <775d> 8330 -<775e> <775f> 8339 -<7760> <7760> 7945 -<7761> <7761> 8338 -<7762> <7762> 7947 -<7763> <7763> 7951 -<7764> <7764> 8348 -<7765> <7765> 7953 -<7766> <7766> 7950 -<7767> <7767> 8344 -<7768> <7768> 8347 -<7769> <7769> 7954 -<776a> <776a> 8343 -<776b> <776c> 8349 -<776d> <776d> 8358 -<776e> <776e> 8357 -<776f> <776f> 8353 -<7770> <7770> 8356 -<7775> <7775> 8324 -<7d72> <7d72> 8333 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-CNS1-3 b/Resources/cmap/Adobe-CNS1-3 deleted file mode 100644 index d6d7676e4f8..00000000000 --- a/Resources/cmap/Adobe-CNS1-3 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Identity) %%Title: (Identity Adobe CNS1 3) %%Version: 1.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 3 def end def /CMapName /Adobe-CNS1-3 def /CMapVersion 1.000 def /CMapType 1 def /XUID [1 10 25587] def /WMode 0 def /CIDCount 18846 def 1 begincodespacerange <0000> <49FF> endcodespacerange 74 begincidrange <0000> <00ff> 0 <0100> <01ff> 256 <0200> <02ff> 512 <0300> <03ff> 768 <0400> <04ff> 1024 <0500> <05ff> 1280 <0600> <06ff> 1536 <0700> <07ff> 1792 <0800> <08ff> 2048 <0900> <09ff> 2304 <0a00> <0aff> 2560 <0b00> <0bff> 2816 <0c00> <0cff> 3072 <0d00> <0dff> 3328 <0e00> <0eff> 3584 <0f00> <0fff> 3840 <1000> <10ff> 4096 <1100> <11ff> 4352 <1200> <12ff> 4608 <1300> <13ff> 4864 <1400> <14ff> 5120 <1500> <15ff> 5376 <1600> <16ff> 5632 <1700> <17ff> 5888 <1800> <18ff> 6144 <1900> <19ff> 6400 <1a00> <1aff> 6656 <1b00> <1bff> 6912 <1c00> <1cff> 7168 <1d00> <1dff> 7424 <1e00> <1eff> 7680 <1f00> <1fff> 7936 <2000> <20ff> 8192 <2100> <21ff> 8448 <2200> <22ff> 8704 <2300> <23ff> 8960 <2400> <24ff> 9216 <2500> <25ff> 9472 <2600> <26ff> 9728 <2700> <27ff> 9984 <2800> <28ff> 10240 <2900> <29ff> 10496 <2a00> <2aff> 10752 <2b00> <2bff> 11008 <2c00> <2cff> 11264 <2d00> <2dff> 11520 <2e00> <2eff> 11776 <2f00> <2fff> 12032 <3000> <30ff> 12288 <3100> <31ff> 12544 <3200> <32ff> 12800 <3300> <33ff> 13056 <3400> <34ff> 13312 <3500> <35ff> 13568 <3600> <36ff> 13824 <3700> <37ff> 14080 <3800> <38ff> 14336 <3900> <39ff> 14592 <3a00> <3aff> 14848 <3b00> <3bff> 15104 <3c00> <3cff> 15360 <3d00> <3dff> 15616 <3e00> <3eff> 15872 <3f00> <3fff> 16128 <4000> <40ff> 16384 <4100> <41ff> 16640 <4200> <42ff> 16896 <4300> <43ff> 17152 <4400> <44ff> 17408 <4500> <45ff> 17664 <4600> <46ff> 17920 <4700> <47ff> 18176 <4800> <48ff> 18432 <4900> <499d> 18688 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-CNS1-B5pc b/Resources/cmap/Adobe-CNS1-B5pc deleted file mode 100644 index 80e0d095740..00000000000 --- a/Resources/cmap/Adobe-CNS1-B5pc +++ /dev/null @@ -1,368 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-CNS1-B5pc) -%%Title: (Adobe-CNS1-B5pc Adobe B5pc 0) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_CNS1_B5pc) def -/Supplement 0 def -end def - -/CMapName /Adobe-CNS1-B5pc def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -1 beginbfrange -<0000> <0000> <20> -endbfrange - -% Adobe-CNS1 -% B5pc (Macintosh) -100 beginbfrange -<0001> <005F> <20> -<0060> <0062> -<0063> <007B> -<0080> <00A1> -<00A2> <00F6> -<00F7> <00F7> -<00F8> <00F8> -<00F9> <00FF> -<0100> <013E> -<013F> <019C> -<019D> <01DB> -<01DC> <01F6> -<01F7> <01F9> -<0232> <0252> -<0253> <0291> -<0292> <02EF> -<02F0> <02FF> -<0300> <032E> -<032F> <038C> -<038D> <03CB> -<03CC> <03FF> -<0400> <0429> -<042A> <0468> -<0469> <04C6> -<04C7> <04FF> -<0500> <0505> -<0506> <0563> -<0564> <05A2> -<05A3> <05FF> -<0600> <0600> -<0601> <063F> -<0640> <069D> -<069E> <06DC> -<06DD> <06FF> -<0700> <073A> -<073B> <0779> -<077A> <07D6> -<07D7> <07FF> -<0800> <0815> -<0816> <0873> -<0874> <08B2> -<08B3> <08FF> -<0900> <0910> -<0911> <094F> -<0950> <097E> -<097F> <097F> -<0980> <09AE> -<09AF> <09ED> -<09EE> <09FF> -<0A00> <0A4B> -<0A4C> <0A8A> -<0A8B> <0AE8> -<0AE9> <0AFF> -<0B00> <0B27> -<0B28> <0B85> -<0B86> <0BC4> -<0BC5> <0BFF> -<0C00> <0C22> -<0C23> <0C61> -<0C62> <0CBF> -<0CC0> <0CFE> -<0CFF> <0CFF> -<0D00> <0D5C> -<0D5D> <0D9B> -<0D9C> <0DF9> -<0DFA> <0DFF> -<0E00> <0E38> -<0E39> <0E96> -<0E97> <0ED5> -<0ED6> <0EFF> -<0F00> <0F33> -<0F34> <0F72> -<0F73> <0FD0> -<0FD1> <0FFF> -<1000> <100F> -<1010> <106D> -<106E> <10AC> -<10AD> <10D3> -<10D4> <10D4> -<10D5> <10FF> -<1100> <110B> -<110C> <114A> -<114B> <11A8> -<11A9> <11E7> -<11E8> <11FF> -<1200> <1245> -<1246> <1257> -<1258> <1283> -<1284> <12E1> -<12E2> <12FF> -<1300> <1320> -<1321> <137E> -<137F> <13BD> -<13BE> <13FF> -<1400> <141B> -<141C> <145A> -<145B> <1464> -<1465> <1465> -<1466> <14B9> -<14BA> <14F8> -endbfrange -100 beginbfrange -<14F9> <14FF> -<1500> <1522> -<1523> <1555> -<1556> <1576> -<1577> <1577> -<1578> <1595> -<1596> <15AD> -<15AE> <15AE> -<15AF> <15AF> -<15B0> <15F3> -<15F4> <15FF> -<1600> <1609> -<160A> <1631> -<1632> <168F> -<1690> <16CE> -<16CF> <16FF> -<1700> <172C> -<172D> <176B> -<176C> <1775> -<1776> <1796> -<1797> <1797> -<1798> <17AA> -<17AB> <17C7> -<17C8> <17F5> -<17F6> <17F6> -<17F7> <17FF> -<1800> <1808> -<1809> <1847> -<1848> <189D> -<189E> <18A4> -<18A5> <18E3> -<18E4> <18FF> -<1900> <1941> -<1942> <1980> -<1981> <19DE> -<19DF> <19FF> -<1A00> <1A1D> -<1A1E> <1A7B> -<1A7C> <1ABA> -<1ABB> <1AFF> -<1B00> <1B18> -<1B19> <1B57> -<1B58> <1BB5> -<1BB6> <1BF4> -<1BF5> <1BFF> -<1C00> <1C52> -<1C53> <1C91> -<1C92> <1CEF> -<1CF0> <1CFF> -<1D00> <1D2E> -<1D2F> <1D8C> -<1D8D> <1DCB> -<1DCC> <1DFF> -<1E00> <1E29> -<1E2A> <1E68> -<1E69> <1EC6> -<1EC7> <1EFF> -<1F00> <1F05> -<1F06> <1F63> -<1F64> <1FA2> -<1FA3> <1FCD> -<1FCE> <1FCE> -<1FCF> <1FFF> -<2000> <2000> -<2001> <203A> -<203B> <203E> -<203F> <209C> -<209D> <20DB> -<20DC> <20FF> -<2100> <2139> -<213A> <2178> -<2179> <21D6> -<21D7> <21FF> -<2200> <2215> -<2216> <2253> -<2254> <2254> -<2255> <2273> -<2274> <22B2> -<22B3> <22B8> -<22B9> <22B9> -<22BA> <22FF> -<2300> <2311> -<2312> <2350> -<2351> <23AE> -<23AF> <23ED> -<23EE> <23FF> -<2400> <2448> -<2449> <244A> -<244B> <2489> -<248A> <24E7> -<24E8> <24FF> -<2500> <2526> -<2527> <2584> -<2585> <25C3> -<25C4> <25FF> -<2600> <2621> -<2622> <2660> -<2661> <26BE> -<26BF> <26FD> -<26FE> <26FF> -endbfrange -97 beginbfrange -<2700> <275B> -<275C> <279A> -<279B> <27F8> -<27F9> <27FF> -<2800> <2837> -<2838> <2895> -<2896> <28D4> -<28D5> <28FF> -<2900> <2932> -<2933> <2971> -<2972> <29CF> -<29D0> <29FF> -<2A00> <2A0E> -<2A0F> <2A6C> -<2A6D> <2AAB> -<2AAC> <2AAD> -<2AAE> <2AAE> -<2AAF> <2AFF> -<2B00> <2B0A> -<2B0B> <2B40> -<2B41> <2B41> -<2B42> <2B4A> -<2B4B> <2BA8> -<2BA9> <2BE7> -<2BE8> <2BFF> -<2C00> <2C45> -<2C46> <2C60> -<2C61> <2C61> -<2C62> <2C85> -<2C86> <2CD5> -<2CD6> <2CE2> -<2CE3> <2CFF> -<2D00> <2D21> -<2D22> <2D5E> -<2D5F> <2D7E> -<2D7F> <2DBD> -<2DBE> <2DC6> -<2DC7> <2DC7> -<2DC8> <2DFF> -<2E00> <2E1C> -<2E1D> <2E5B> -<2E5C> <2EA5> -<2EA6> <2EB8> -<2EB9> <2EF7> -<2EF8> <2EFF> -<2F00> <2F55> -<2F56> <2F6B> -<2F6C> <2F93> -<2F94> <2FBD> -<2FBE> <2FF0> -<2FF1> <2FFF> -<3000> <3013> -<3014> <3014> -<3015> <301C> -<301D> <302F> -<3030> <308D> -<308E> <30B5> -<30B6> <30CB> -<30CC> <30ED> -<30EE> <30EE> -<30EF> <30FF> -<3100> <312A> -<312B> <315F> -<3160> <3160> -<3161> <316A> -<316B> <31C8> -<31C9> <31EE> -<31EF> <31EF> -<31F0> <31FF> -<3200> <3208> -<3209> <321C> -<321D> <3263> -<3264> <3264> -<3265> <3266> -<3267> <32A5> -<32A6> <32FF> -<3300> <3303> -<3304> <3326> -<3327> <3341> -<3342> <339F> -<33A0> <33DE> -<33DF> <33FF> -<3400> <343C> -<343D> <347B> -<347C> <34D9> -<34DA> <34FF> -<3500> <3510> -<3511> <3511> -<3512> <3519> -<351A> <353C> -<353D> <353D> -<353E> <3548> -<3549> <3549> -<354A> <354D> -<354E> <354E> -<354F> <354F> -<35AF> <35B2> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-CNS1-H-CID b/Resources/cmap/Adobe-CNS1-H-CID deleted file mode 100644 index 0b6d673c7df..00000000000 --- a/Resources/cmap/Adobe-CNS1-H-CID +++ /dev/null @@ -1,91 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-CNS1-H-CID) -%%Title: (Adobe-CNS1-H-CID Adobe CNS1 0) -%%Version: 2.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Adobe_CNS1_H_CID) def - /Supplement 0 def -end def - -/CMapName /Adobe-CNS1-H-CID def -/CMapVersion 2.000 def -/CMapType 1 def - -/UIDOffset 0 def - -/WMode 0 def - -1 begincodespacerange - <0000> -endcodespacerange - -% Map all CIDs to font 0 - for Supplement 0 -0 usefont -1 begincidrange -<0000> 0 -endcidrange - -% Map CIDs 1 thru 95 to Ascii codes 0x20 - 0x7F in fontID 1. -1 usefont -1 beginbfrange -<0001> <005F> <20> -endbfrange - -% Map CIDs 14099 - 17407 to fontID 2 for Supplement 1. -2 usefont -2 begincidrange -<3713> <37FF> 14099 -<3800> <43FF> 14336 -endcidrange - -% Map CIDs 17408 to 17600 to fontID 3 for Supplement 2. -3 usefont -1 begincidrange -<4400> <44C0> 17408 -endcidrange - -% Map CIDs 17601 to fontID 4 for Supplement 3. -% Also map CIDs upto 65535 to this fontID. -4 usefont -2 begincidrange -<44C1> <44FF> 17601 -<4500> 17664 -endcidrange - - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-CNS1-H-Host b/Resources/cmap/Adobe-CNS1-H-Host deleted file mode 100644 index 494dcce2224..00000000000 --- a/Resources/cmap/Adobe-CNS1-H-Host +++ /dev/null @@ -1,390 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-CNS1-H-Host) -%%Title: (Adobe-CNS1-H-Host Adobe ETen-B5 0) -%%Version: 4.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_CNS1_H_Host) def -/Supplement 0 def -end def - -/CMapName /Adobe-CNS1-H-Host def - -/CMapVersion 4.000 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -4 usefont -% Subset Fonts -1 begincidrange -<0000> 0 -endcidrange - -1 usefont % Prop Roman -1 beginbfrange -<0001> <005F> <20> -endbfrange - -2 usefont % Halfwidth Roman -1 beginbfrange -<3550> <35AE> <20> -endbfrange - -0 usefont % Windows TrueType -97 beginbfrange -<0063> <007B> -<0080> <00A1> -<00A2> <00F6> -<00F7> <00F7> -<00F8> <00F8> -<00F9> <00FF> -<0100> <0103> -<0105> <013E> -<013F> <019C> -<019D> <01DB> -<01DC> <01F6> -<01F7> <01F9> -<0253> <0291> -<0292> <02EF> -<02F0> <02FF> -<0300> <032E> -<032F> <038C> -<038D> <03CB> -<03CC> <03FF> -<0400> <0429> -<042A> <0468> -<0469> <04C6> -<04C7> <04FF> -<0500> <0505> -<0506> <0563> -<0564> <05A2> -<05A3> <05FF> -<0600> <0600> -<0601> <063F> -<0640> <069D> -<069E> <06DC> -<06DD> <06FF> -<0700> <073A> -<073B> <0779> -<077A> <07D6> -<07D7> <07FF> -<0800> <0815> -<0816> <0873> -<0874> <08B2> -<08B3> <08FF> -<0900> <0910> -<0911> <094F> -<0950> <097E> -<097F> <097F> -<0980> <09AE> -<09AF> <09ED> -<09EE> <09FF> -<0A00> <0A4B> -<0A4C> <0A8A> -<0A8B> <0AE8> -<0AE9> <0AFF> -<0B00> <0B27> -<0B28> <0B85> -<0B86> <0BC4> -<0BC5> <0BFF> -<0C00> <0C22> -<0C23> <0C61> -<0C62> <0CBF> -<0CC0> <0CFE> -<0CFF> <0CFF> -<0D00> <0D5C> -<0D5D> <0D9B> -<0D9C> <0DF9> -<0DFA> <0DFF> -<0E00> <0E38> -<0E39> <0E96> -<0E97> <0ED5> -<0ED6> <0EFF> -<0F00> <0F33> -<0F34> <0F72> -<0F73> <0FD0> -<0FD1> <0FFF> -<1000> <100F> -<1010> <106D> -<106E> <10AC> -<10AD> <10D3> -<10D4> <10D4> -<10D5> <10FF> -<1100> <110B> -<110C> <114A> -<114B> <11A8> -<11A9> <11E7> -<11E8> <11FF> -<1200> <1245> -<1246> <1257> -<1258> <1283> -<1284> <12E1> -<12E2> <12FF> -<1300> <1320> -<1321> <137E> -<137F> <13BD> -<13BE> <13FF> -<1400> <141B> -<141C> <145A> -<145B> <1464> -<1465> <1465> -<1466> <14B9> -endbfrange -99 beginbfrange -<14BA> <14F8> -<14F9> <14FF> -<1500> <1522> -<1523> <1555> -<1556> <1576> -<1577> <1577> -<1578> <1595> -<1596> <15AD> -<15AE> <15AE> -<15AF> <15AF> -<15B0> <15F3> -<15F4> <15FF> -<1600> <1609> -<160A> <1631> -<1632> <168F> -<1690> <16CE> -<16CF> <16FF> -<1700> <172C> -<172D> <176B> -<176C> <1775> -<1776> <1793> -<1794> <1796> -<1797> <1797> -<1798> <17AA> -<17AB> <17C7> -<17C8> <17F5> -<17F6> <17F6> -<17F7> <17FF> -<1800> <1808> -<1809> <1847> -<1848> <189D> -<189E> <18A4> -<18A5> <18E3> -<18E4> <18FF> -<1900> <1941> -<1942> <1980> -<1981> <19DE> -<19DF> <19FF> -<1A00> <1A1D> -<1A1E> <1A7B> -<1A7C> <1ABA> -<1ABB> <1AFF> -<1B00> <1B18> -<1B19> <1B57> -<1B58> <1BB5> -<1BB6> <1BF4> -<1BF5> <1BFF> -<1C00> <1C52> -<1C53> <1C91> -<1C92> <1CEF> -<1CF0> <1CFF> -<1D00> <1D2E> -<1D2F> <1D8C> -<1D8D> <1DCB> -<1DCC> <1DFF> -<1E00> <1E29> -<1E2A> <1E68> -<1E69> <1EC6> -<1EC7> <1EFF> -<1F00> <1F05> -<1F06> <1F63> -<1F64> <1FA2> -<1FA3> <1FCD> -<1FCE> <1FCE> -<1FCF> <1FFF> -<2000> <2000> -<2001> <203A> -<203B> <203E> -<203F> <209C> -<209D> <20DB> -<20DC> <20FF> -<2100> <2139> -<213A> <2178> -<2179> <21D6> -<21D7> <21FF> -<2200> <2215> -<2216> <2253> -<2254> <2254> -<2255> <2273> -<2274> <22B2> -<22B3> <22B8> -<22B9> <22B9> -<22BA> <22FF> -<2300> <2311> -<2312> <2350> -<2351> <23AE> -<23AF> <23ED> -<23EE> <23FF> -<2400> <2448> -<2449> <244A> -<244B> <2489> -<248A> <24E7> -<24E8> <24FF> -<2500> <2526> -<2527> <2584> -<2585> <25C3> -<25C4> <25FF> -<2600> <2621> -<2622> <2660> -endbfrange -98 beginbfrange -<2661> <26BE> -<26BF> <26FD> -<26FE> <26FF> -<2700> <275B> -<275C> <279A> -<279B> <27F8> -<27F9> <27FF> -<2800> <2837> -<2838> <2895> -<2896> <28D4> -<28D5> <28FF> -<2900> <2932> -<2933> <2971> -<2972> <29CF> -<29D0> <29FF> -<2A00> <2A0E> -<2A0F> <2A6C> -<2A6D> <2AAB> -<2AAC> <2AAD> -<2AAE> <2AAE> -<2AAF> <2AFF> -<2B00> <2B0A> -<2B0B> <2B40> -<2B41> <2B41> -<2B42> <2B4A> -<2B4B> <2BA8> -<2BA9> <2BE7> -<2BE8> <2BFF> -<2C00> <2C45> -<2C46> <2C60> -<2C61> <2C61> -<2C62> <2C85> -<2C86> <2CD5> -<2CD6> <2CE2> -<2CE3> <2CFF> -<2D00> <2D21> -<2D22> <2D5E> -<2D5F> <2D7E> -<2D7F> <2DBD> -<2DBE> <2DC6> -<2DC7> <2DC7> -<2DC8> <2DFF> -<2E00> <2E1C> -<2E1D> <2E5B> -<2E5C> <2EA5> -<2EA6> <2EB8> -<2EB9> <2EF7> -<2EF8> <2EFF> -<2F00> <2F55> -<2F56> <2F6B> -<2F6C> <2F93> -<2F94> <2FBD> -<2FBE> <2FF0> -<2FF1> <2FFF> -<3000> <3013> -<3014> <3014> -<3015> <301C> -<301D> <302F> -<3030> <308D> -<308E> <30B5> -<30B6> <30CB> -<30CC> <30ED> -<30EE> <30EE> -<30EF> <30FF> -<3100> <312A> -<312B> <315F> -<3160> <3160> -<3161> <316A> -<316B> <31C8> -<31C9> <31EE> -<31EF> <31EF> -<31F0> <31FF> -<3200> <3208> -<3209> <321C> -<321D> <3263> -<3264> <3264> -<3265> <3266> -<3267> <32A5> -<32A6> <32FF> -<3300> <3303> -<3304> <3326> -<3327> <3341> -<3342> <339F> -<33A0> <33DE> -<33DF> <33FF> -<3400> <343C> -<343D> <347B> -<347C> <34D9> -<34DA> <34FF> -<3500> <3510> -<3511> <3511> -<3512> <3519> -<351A> <353C> -<353D> <353D> -<353E> <3548> -<3549> <3549> -<354A> <354D> -<35AF> <35B2> -endbfrange - -3 usefont % Vertical Fonts -12 beginbfrange -<0082> <0083> -<0086> <0087> -<008A> <008B> -<008E> <008F> -<0092> <0093> -<0096> <0097> -<009A> <009B> -<009E> <009F> -<354E> <354E> -<354F> <354F> -<35AF> <35AF> -<35B1> <35B1> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-CNS1-H-Mac b/Resources/cmap/Adobe-CNS1-H-Mac deleted file mode 100644 index 4516a705c40..00000000000 --- a/Resources/cmap/Adobe-CNS1-H-Mac +++ /dev/null @@ -1,366 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-CNS1-H-Mac) -%%Title: (Adobe-CNS1-H-Mac Adobe B5pc 0) -%%Version: 1.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_CNS1_H_Mac) def -/Supplement 0 def -end def - -/CMapName /Adobe-CNS1-H-Mac def - -/CMapVersion 1.000 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -2 usefont % Subset Font -1 begincidrange -<0000> 0 -endcidrange - -1 usefont % Prop Roman -1 beginbfrange -<0001> <005F> <20> -endbfrange - -0 usefont % Host Font -100 beginbfrange -<0063> <007B> -<0080> <00A1> -<00A2> <00F6> -<00F7> <00F7> -<00F8> <00F8> -<00F9> <00FF> -<0100> <013E> -<013F> <019C> -<019D> <01DB> -<01DC> <01F6> -<01F7> <01F9> -<0253> <0291> -<0292> <02EF> -<02F0> <02FF> -<0300> <032E> -<032F> <038C> -<038D> <03CB> -<03CC> <03FF> -<0400> <0429> -<042A> <0468> -<0469> <04C6> -<04C7> <04FF> -<0500> <0505> -<0506> <0563> -<0564> <05A2> -<05A3> <05FF> -<0600> <0600> -<0601> <063F> -<0640> <069D> -<069E> <06DC> -<06DD> <06FF> -<0700> <073A> -<073B> <0779> -<077A> <07D6> -<07D7> <07FF> -<0800> <0815> -<0816> <0873> -<0874> <08B2> -<08B3> <08FF> -<0900> <0910> -<0911> <094F> -<0950> <097E> -<097F> <097F> -<0980> <09AE> -<09AF> <09ED> -<09EE> <09FF> -<0A00> <0A4B> -<0A4C> <0A8A> -<0A8B> <0AE8> -<0AE9> <0AFF> -<0B00> <0B27> -<0B28> <0B85> -<0B86> <0BC4> -<0BC5> <0BFF> -<0C00> <0C22> -<0C23> <0C61> -<0C62> <0CBF> -<0CC0> <0CFE> -<0CFF> <0CFF> -<0D00> <0D5C> -<0D5D> <0D9B> -<0D9C> <0DF9> -<0DFA> <0DFF> -<0E00> <0E38> -<0E39> <0E96> -<0E97> <0ED5> -<0ED6> <0EFF> -<0F00> <0F33> -<0F34> <0F72> -<0F73> <0FD0> -<0FD1> <0FFF> -<1000> <100F> -<1010> <106D> -<106E> <10AC> -<10AD> <10D3> -<10D4> <10D4> -<10D5> <10FF> -<1100> <110B> -<110C> <114A> -<114B> <11A8> -<11A9> <11E7> -<11E8> <11FF> -<1200> <1245> -<1246> <1257> -<1258> <1283> -<1284> <12E1> -<12E2> <12FF> -<1300> <1320> -<1321> <137E> -<137F> <13BD> -<13BE> <13FF> -<1400> <141B> -<141C> <145A> -<145B> <1464> -<1465> <1465> -<1466> <14B9> -<14BA> <14F8> -<14F9> <14FF> -<1500> <1522> -<1523> <1555> -endbfrange -100 beginbfrange -<1556> <1576> -<1577> <1577> -<1578> <1595> -<1596> <15AD> -<15AE> <15AE> -<15AF> <15AF> -<15B0> <15F3> -<15F4> <15FF> -<1600> <1609> -<160A> <1631> -<1632> <168F> -<1690> <16CE> -<16CF> <16FF> -<1700> <172C> -<172D> <176B> -<176C> <1775> -<1776> <1796> -<1797> <1797> -<1798> <17AA> -<17AB> <17C7> -<17C8> <17F5> -<17F6> <17F6> -<17F7> <17FF> -<1800> <1808> -<1809> <1847> -<1848> <189D> -<189E> <18A4> -<18A5> <18E3> -<18E4> <18FF> -<1900> <1941> -<1942> <1980> -<1981> <19DE> -<19DF> <19FF> -<1A00> <1A1D> -<1A1E> <1A7B> -<1A7C> <1ABA> -<1ABB> <1AFF> -<1B00> <1B18> -<1B19> <1B57> -<1B58> <1BB5> -<1BB6> <1BF4> -<1BF5> <1BFF> -<1C00> <1C52> -<1C53> <1C91> -<1C92> <1CEF> -<1CF0> <1CFF> -<1D00> <1D2E> -<1D2F> <1D8C> -<1D8D> <1DCB> -<1DCC> <1DFF> -<1E00> <1E29> -<1E2A> <1E68> -<1E69> <1EC6> -<1EC7> <1EFF> -<1F00> <1F05> -<1F06> <1F63> -<1F64> <1FA2> -<1FA3> <1FCD> -<1FCE> <1FCE> -<1FCF> <1FFF> -<2000> <2000> -<2001> <203A> -<203B> <203E> -<203F> <209C> -<209D> <20DB> -<20DC> <20FF> -<2100> <2139> -<213A> <2178> -<2179> <21D6> -<21D7> <21FF> -<2200> <2215> -<2216> <2253> -<2254> <2254> -<2255> <2273> -<2274> <22B2> -<22B3> <22B8> -<22B9> <22B9> -<22BA> <22FF> -<2300> <2311> -<2312> <2350> -<2351> <23AE> -<23AF> <23ED> -<23EE> <23FF> -<2400> <2448> -<2449> <244A> -<244B> <2489> -<248A> <24E7> -<24E8> <24FF> -<2500> <2526> -<2527> <2584> -<2585> <25C3> -<25C4> <25FF> -<2600> <2621> -<2622> <2660> -<2661> <26BE> -<26BF> <26FD> -<26FE> <26FF> -<2700> <275B> -<275C> <279A> -<279B> <27F8> -endbfrange -92 beginbfrange -<27F9> <27FF> -<2800> <2837> -<2838> <2895> -<2896> <28D4> -<28D5> <28FF> -<2900> <2932> -<2933> <2971> -<2972> <29CF> -<29D0> <29FF> -<2A00> <2A0E> -<2A0F> <2A6C> -<2A6D> <2AAB> -<2AAC> <2AAD> -<2AAE> <2AAE> -<2AAF> <2AFF> -<2B00> <2B0A> -<2B0B> <2B40> -<2B41> <2B41> -<2B42> <2B4A> -<2B4B> <2BA8> -<2BA9> <2BE7> -<2BE8> <2BFF> -<2C00> <2C45> -<2C46> <2C60> -<2C61> <2C61> -<2C62> <2C85> -<2C86> <2CD5> -<2CD6> <2CE2> -<2CE3> <2CFF> -<2D00> <2D21> -<2D22> <2D5E> -<2D5F> <2D7E> -<2D7F> <2DBD> -<2DBE> <2DC6> -<2DC7> <2DC7> -<2DC8> <2DFF> -<2E00> <2E1C> -<2E1D> <2E5B> -<2E5C> <2EA5> -<2EA6> <2EB8> -<2EB9> <2EF7> -<2EF8> <2EFF> -<2F00> <2F55> -<2F56> <2F6B> -<2F6C> <2F93> -<2F94> <2FBD> -<2FBE> <2FF0> -<2FF1> <2FFF> -<3000> <3013> -<3014> <3014> -<3015> <301C> -<301D> <302F> -<3030> <308D> -<308E> <30B5> -<30B6> <30CB> -<30CC> <30ED> -<30EE> <30EE> -<30EF> <30FF> -<3100> <312A> -<312B> <315F> -<3160> <3160> -<3161> <316A> -<316B> <31C8> -<31C9> <31EE> -<31EF> <31EF> -<31F0> <31FF> -<3200> <3208> -<3209> <321C> -<321D> <3263> -<3264> <3264> -<3265> <3266> -<3267> <32A5> -<32A6> <32FF> -<3300> <3303> -<3304> <3326> -<3327> <3341> -<3342> <339F> -<33A0> <33DE> -<33DF> <33FF> -<3400> <343C> -<343D> <347B> -<347C> <34D9> -<34DA> <34FF> -<3500> <3510> -<3511> <3511> -<3512> <3519> -<351A> <353C> -<353D> <353D> -<353E> <3548> -<3549> <3549> -<354A> <354D> -<35AF> <35B2> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-CNS1-UCS2 b/Resources/cmap/Adobe-CNS1-UCS2 deleted file mode 100644 index 2185acc54d3..00000000000 --- a/Resources/cmap/Adobe-CNS1-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Adobe-CNS1-UCS2) %%Title: (Adobe-CNS1-UCS2 Adobe CNS1 3) %%Version: 12.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2001 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Adobe_CNS1_UCS2) def /Supplement 3 def end def /CMapName /Adobe-CNS1-UCS2 def /CMapVersion 12.001 def /CMapType 1 def /XUID [1 10 25335 1212] def /WMode 0 def 1 begincodespacerange <0000> endcodespacerange 100 beginbfchar <0000> <0060> <00A9> <0061> <2122> <0062> <2026> <0063> <3000> <0064> <0067> <0068> <2027> <0069> <006A> <006B> <006C> <006D> <006E> <22EF> <006F> <2025> <0073> <00B7> <0078> <0079> <2013> <007A> <007B> <2014> <0084> <0085> <00AC> <2035> <00AD> <2032> <00AE> <00AF> <00B0> <00B1> <203B> <00B2> <00A7> <00B3> <3003> <00B4> <25CB> <00B5> <25CF> <00B6> <25B3> <00B7> <25B2> <00B8> <25CE> <00B9> <2606> <00BA> <2605> <00BB> <25C7> <00BC> <25C6> <00BD> <25A1> <00BE> <25A0> <00BF> <25BD> <00C0> <25BC> <00C1> <32A3> <00C2> <2105> <00C3> <203E> <00C4> <203E> <00C5> <00C6> <00D0> <00D1> <00D2> <00D7> <00D3> <00F7> <00D4> <00B1> <00D5> <221A> <00D6> <00D7> <00D8> <00DB> <2260> <00DC> <221E> <00DD> <2252> <00DE> <2261> <00E4> <223C> <00E7> <22A5> <00E8> <2220> <00E9> <221F> <00EA> <22BF> <00EB> <33D2> <00EC> <33D1> <00ED> <222B> <00EE> <222E> <00EF> <2235> <00F0> <2234> <00F1> <2640> <00F2> <2642> <00F3> <2295> <00F4> <2609> <00F5> <2191> <00F6> <2193> <00F7> <2192> <00F8> <2190> <00FB> <2199> <00FC> <2198> <00FD> <2225> <00FE> <2223> <00FF> <0100> <0101> <0102> <0103> <0104> <00A5> <0105> <3012> <0108> <0109> <010A> <2103> <010B> <2109> <010F> <33D5> <0113> <33CE> <0114> <33A1> <0117> <33C4> endbfchar 100 beginbfchar <0118> <00B0> <0119> <5159> <011A> <515B> <011B> <515E> <011C> <515D> <011D> <5161> <011E> <5163> <011F> <55E7> <0120> <74E9> <0121> <7CCE> <012A> <258F> <012B> <258E> <012C> <258D> <012D> <258C> <012E> <258B> <012F> <258A> <0130> <2589> <0131> <253C> <0132> <2534> <0133> <252C> <0134> <2524> <0135> <251C> <0136> <2594> <0137> <2500> <0138> <2502> <0139> <2595> <013A> <250C> <013B> <2510> <013C> <2514> <013D> <2518> <0140> <2570> <0141> <256F> <0142> <2550> <0143> <255E> <0144> <256A> <0145> <2561> <0148> <25E5> <0149> <25E4> <016A> <5341> <01F6> <02D9> <01F7> <02CA> <01F8> <02C7> <01F9> <02CB> <0218> <4E28> <0219> <4E36> <021A> <4E3F> <021B> <4E85> <021C> <4EA0> <021D> <5182> <021E> <5196> <021F> <51AB> <0220> <52F9> <0221> <5338> <0222> <5369> <0223> <53B6> <0224> <5902> <0225> <5B80> <0226> <5DDB> <0227> <5E7A> <0228> <5E7F> <0229> <5EF4> <022A> <5F50> <022B> <5F61> <022C> <6534> <022D> <65E0> <022E> <7592> <022F> <7676> <0230> <8FB5> <0231> <96B6> <0252> <2421> <0253> <4E00> <0254> <4E59> <0255> <4E01> <0256> <4E03> <0257> <4E43> <0258> <4E5D> <0259> <4E86> <025A> <4E8C> <025B> <4EBA> <025C> <513F> <025D> <5165> <025E> <516B> <025F> <51E0> <0262> <529B> <0263> <5315> <0264> <5341> <0265> <535C> <0266> <53C8> <0267> <4E09> <0268> <4E0B> <0269> <4E08> <026A> <4E0A> <026B> <4E2B> <026C> <4E38> <026D> <51E1> <026E> <4E45> <026F> <4E48> <0270> <4E5F> <0271> <4E5E> <0272> <4E8E> endbfchar 100 beginbfchar <0273> <4EA1> <0274> <5140> <0275> <5203> <0276> <52FA> <0277> <5343> <0278> <53C9> <0279> <53E3> <027A> <571F> <027B> <58EB> <027C> <5915> <027D> <5927> <027E> <5973> <0281> <5B53> <0282> <5BF8> <0283> <5C0F> <0284> <5C22> <0285> <5C38> <0286> <5C71> <0287> <5DDD> <0288> <5DE5> <028C> <5DFE> <028D> <5E72> <028E> <5EFE> <028F> <5F0B> <0290> <5F13> <0291> <624D> <0292> <4E11> <0293> <4E10> <0294> <4E0D> <0295> <4E2D> <0296> <4E30> <0297> <4E39> <0298> <4E4B> <0299> <5C39> <029A> <4E88> <029B> <4E91> <029C> <4E95> <029D> <4E92> <029E> <4E94> <029F> <4EA2> <02A0> <4EC1> <02A1> <4EC0> <02A2> <4EC3> <02A5> <4ECD> <02A8> <4EC4> <02A9> <5143> <02AA> <5141> <02AB> <5167> <02AE> <516C> <02AF> <5197> <02B0> <51F6> <02B4> <52FB> <02B7> <5316> <02B8> <5339> <02B9> <5348> <02BA> <5347> <02BB> <5345> <02BC> <535E> <02BD> <5384> <02BE> <53CB> <02BF> <53CA> <02C0> <53CD> <02C1> <58EC> <02C2> <5929> <02C3> <592B> <02C4> <592A> <02C5> <592D> <02C6> <5B54> <02C7> <5C11> <02C8> <5C24> <02C9> <5C3A> <02CA> <5C6F> <02CB> <5DF4> <02CC> <5E7B> <02CD> <5EFF> <02D0> <5FC3> <02D1> <6208> <02D2> <6236> <02D3> <624B> <02D4> <624E> <02D5> <652F> <02D6> <6587> <02D7> <6597> <02D8> <65A4> <02D9> <65B9> <02DA> <65E5> <02DB> <66F0> <02DC> <6708> <02DD> <6728> <02DE> <6B20> <02DF> <6B62> <02E0> <6B79> <02E1> <6BCB> <02E2> <6BD4> <02E3> <6BDB> <02E4> <6C0F> <02E5> <6C34> <02E6> <706B> <02E7> <722A> <02E8> <7236> endbfchar 100 beginbfchar <02E9> <723B> <02EA> <7247> <02EB> <7259> <02EC> <725B> <02ED> <72AC> <02EE> <738B> <02EF> <4E19> <02F0> <4E16> <02F1> <4E15> <02F2> <4E14> <02F3> <4E18> <02F4> <4E3B> <02F5> <4E4D> <02F6> <4E4F> <02F7> <4E4E> <02F8> <4EE5> <02F9> <4ED8> <0300> <4ED9> <0301> <4EDE> <0302> <5145> <0303> <5144> <0306> <51AC> <0309> <51F8> <030A> <520A> <030B> <52A0> <030C> <529F> <030F> <5317> <0310> <531D> <0311> <4EDF> <0312> <534A> <0313> <5349> <0314> <5361> <0315> <5360> <0316> <536F> <0317> <536E> <0318> <53BB> <0319> <53EF> <031A> <53E4> <031B> <53F3> <031C> <53EC> <031D> <53EE> <031E> <53E9> <031F> <53E8> <0320> <53FC> <0321> <53F8> <0322> <53F5> <0323> <53EB> <0324> <53E6> <0325> <53EA> <0326> <53F2> <0327> <53F1> <0328> <53F0> <0329> <53E5> <032A> <53ED> <032B> <53FB> <032C> <56DB> <032D> <56DA> <032E> <5916> <032F> <592E> <0330> <5931> <0331> <5974> <0332> <5976> <0333> <5B55> <0334> <5B83> <0335> <5C3C> <0336> <5DE8> <0337> <5DE7> <0338> <5DE6> <033B> <5E73> <033C> <5E7C> <033D> <5F01> <033E> <5F18> <033F> <5F17> <0340> <5FC5> <0341> <620A> <0344> <6252> <0345> <6251> <0346> <65A5> <0347> <65E6> <0348> <672E> <0349> <672C> <034C> <672D> <034D> <6B63> <034E> <6BCD> <034F> <6C11> <0350> <6C10> <0351> <6C38> <0352> <6C41> <0353> <6C40> <0354> <6C3E> <0355> <72AF> <0356> <7384> <0357> <7389> <0358> <74DC> <0359> <74E6> <035A> <7518> <035B> <751F> <0362> <758B> <0363> <767D> <0364> <76AE> endbfchar 100 beginbfchar <0365> <76BF> <0366> <76EE> <0367> <77DB> <0368> <77E2> <0369> <77F3> <036A> <793A> <036B> <79BE> <036C> <7A74> <036D> <7ACB> <0372> <4E69> <0373> <4E99> <0374> <4EA4> <0375> <4EA6> <0376> <4EA5> <0377> <4EFF> <0378> <4F09> <0379> <4F19> <037A> <4F0A> <037B> <4F15> <037C> <4F0D> <037F> <4F0F> <0380> <4EF2> <0381> <4EF6> <0382> <4EFB> <0383> <4EF0> <0384> <4EF3> <0385> <4EFD> <0386> <4F01> <0387> <4F0B> <0388> <5149> <0389> <5147> <038A> <5146> <038B> <5148> <038C> <5168> <038D> <5171> <038E> <518D> <038F> <51B0> <0390> <5217> <0393> <520E> <0394> <5216> <0395> <52A3> <0396> <5308> <0397> <5321> <0398> <5320> <039B> <5409> <039C> <540F> <039D> <540C> <039E> <540A> <039F> <5410> <03A0> <5401> <03A1> <540B> <03A2> <5404> <03A3> <5411> <03A4> <540D> <03A5> <5408> <03A6> <5403> <03A7> <540E> <03A8> <5406> <03A9> <5412> <03AA> <56E0> <03AB> <56DE> <03AC> <56DD> <03AD> <5733> <03AE> <5730> <03AF> <5728> <03B0> <572D> <03B1> <572C> <03B2> <572F> <03B3> <5729> <03B8> <5984> <03B9> <5978> <03BA> <5983> <03BB> <597D> <03BC> <5979> <03BD> <5982> <03BE> <5981> <03C3> <5B85> <03C4> <5B89> <03C5> <5BFA> <03C6> <5C16> <03C7> <5C79> <03C8> <5DDE> <03C9> <5E06> <03CA> <5E76> <03CB> <5E74> <03CC> <5F0F> <03CD> <5F1B> <03CE> <5FD9> <03CF> <5FD6> <03D0> <620E> <03D3> <6210> <03D4> <6263> <03D5> <625B> <03D6> <6258> <03D7> <6536> <03D8> <65E9> <03D9> <65E8> <03DE> <6709> <03DF> <673D> <03E0> <6734> endbfchar 100 beginbfchar <03E1> <6731> <03E2> <6735> <03E3> <6B21> <03E4> <6B64> <03E5> <6B7B> <03E6> <6C16> <03E7> <6C5D> <03E8> <6C57> <03E9> <6C59> <03EC> <6C50> <03ED> <6C55> <03EE> <6C61> <03EF> <6C5B> <03F2> <7070> <03F3> <725F> <03F4> <725D> <03F5> <767E> <03F6> <7AF9> <03F7> <7C73> <03F8> <7CF8> <03F9> <7F36> <03FA> <7F8A> <03FB> <7FBD> <03FC> <8001> <03FD> <8003> <03FE> <800C> <03FF> <8012> <0400> <8033> <0401> <807F> <0402> <8089> <0405> <81E3> <0406> <81EA> <0407> <81F3> <0408> <81FC> <0409> <820C> <040A> <821B> <040B> <821F> <040C> <826E> <040D> <8272> <040E> <827E> <040F> <866B> <0410> <8840> <0411> <884C> <0412> <8863> <0413> <897F> <0414> <9621> <0415> <4E32> <0416> <4EA8> <0417> <4F4D> <0418> <4F4F> <0419> <4F47> <041A> <4F57> <041B> <4F5E> <041C> <4F34> <041D> <4F5B> <041E> <4F55> <041F> <4F30> <0422> <4F3D> <0423> <4F3A> <0424> <4F38> <0425> <4F43> <0426> <4F54> <0427> <4F3C> <0428> <4F46> <0429> <4F63> <042A> <4F5C> <042B> <4F60> <042C> <4F2F> <042D> <4F4E> <042E> <4F36> <042F> <4F59> <0430> <4F5D> <0431> <4F48> <0432> <4F5A> <0433> <514C> <0434> <514B> <0435> <514D> <0436> <5175> <0439> <5225> <043A> <5224> <043D> <5228> <043E> <52AB> <0441> <52AC> <0442> <5323> <0443> <5373> <0444> <5375> <0445> <541D> <0446> <542D> <0447> <541E> <0448> <543E> <0449> <5426> <044A> <544E> <044B> <5427> <044C> <5446> <044D> <5443> <044E> <5433> <044F> <5448> <0450> <5442> <0451> <541B> <0452> <5429> endbfchar 100 beginbfchar <0453> <544A> <0454> <5439> <0455> <543B> <0456> <5438> <0457> <542E> <045A> <5420> <045B> <543C> <045C> <5440> <045D> <5431> <045E> <542B> <045F> <541F> <0460> <542C> <0461> <56EA> <0462> <56F0> <0463> <56E4> <0464> <56EB> <0465> <574A> <0466> <5751> <0467> <5740> <0468> <574D> <0469> <5747> <046A> <574E> <046B> <573E> <046C> <5750> <046D> <574F> <046E> <573B> <046F> <58EF> <0470> <593E> <0471> <599D> <0472> <5992> <0473> <59A8> <0474> <599E> <0475> <59A3> <0476> <5999> <0477> <5996> <0478> <598D> <0479> <59A4> <047A> <5993> <047B> <598A> <047C> <59A5> <047D> <5B5D> <047E> <5B5C> <0481> <5B8C> <0482> <5B8B> <0483> <5B8F> <0484> <5C2C> <0487> <5C3F> <0488> <5C3E> <048B> <5C94> <048C> <5C8C> <048D> <5DEB> <048E> <5E0C> <048F> <5E8F> <0490> <5E87> <0491> <5E8A> <0492> <5EF7> <0493> <5F04> <0494> <5F1F> <0495> <5F64> <0496> <5F62> <0497> <5F77> <0498> <5F79> <0499> <5FD8> <049A> <5FCC> <049B> <5FD7> <049C> <5FCD> <049D> <5FF1> <049E> <5FEB> <049F> <5FF8> <04A0> <5FEA> <04A1> <6212> <04A2> <6211> <04A3> <6284> <04A4> <6297> <04A5> <6296> <04A6> <6280> <04A7> <6276> <04A8> <6289> <04A9> <626D> <04AA> <628A> <04AB> <627C> <04AC> <627E> <04AD> <6279> <04AE> <6273> <04AF> <6292> <04B0> <626F> <04B1> <6298> <04B2> <626E> <04B3> <6295> <04B4> <6293> <04B5> <6291> <04B6> <6286> <04B7> <6539> <04B8> <653B> <04B9> <6538> <04BA> <65F1> <04BB> <66F4> <04BC> <675F> <04C1> <675C> <04C2> <6756> endbfchar 100 beginbfchar <04C3> <675E> <04C4> <6749> <04C5> <6746> <04C6> <6760> <04C7> <6753> <04C8> <6757> <04C9> <6B65> <04CA> <6BCF> <04CB> <6C42> <04CC> <6C5E> <04CD> <6C99> <04CE> <6C81> <04D1> <6C85> <04D2> <6C9B> <04D3> <6C6A> <04D4> <6C7A> <04D5> <6C90> <04D6> <6C70> <04D7> <6C8C> <04D8> <6C68> <04D9> <6C96> <04DA> <6C92> <04DB> <6C7D> <04DC> <6C83> <04DD> <6C72> <04DE> <6C7E> <04DF> <6C74> <04E0> <6C86> <04E1> <6C76> <04E2> <6C8D> <04E3> <6C94> <04E4> <6C98> <04E5> <6C82> <04E6> <7076> <04E9> <7078> <04EA> <7262> <04EB> <7261> <04EC> <7260> <04ED> <72C4> <04EE> <72C2> <04EF> <7396> <04F0> <752C> <04F1> <752B> <04F4> <7682> <04F5> <76EF> <04F6> <77E3> <04F7> <79C1> <04F8> <79C0> <04F9> <79BF> <04FA> <7A76> <04FB> <7CFB> <04FC> <7F55> <04FD> <8096> <04FE> <8093> <04FF> <809D> <0500> <8098> <0501> <809B> <0502> <809A> <0503> <80B2> <0504> <826F> <0505> <8292> <0506> <828B> <0507> <828D> <0508> <898B> <0509> <89D2> <050A> <8A00> <050B> <8C37> <050C> <8C46> <050D> <8C55> <050E> <8C9D> <050F> <8D64> <0510> <8D70> <0511> <8DB3> <0512> <8EAB> <0513> <8ECA> <0514> <8F9B> <0515> <8FB0> <0516> <8FC2> <0517> <8FC6> <0518> <8FC5> <0519> <8FC4> <051A> <5DE1> <051B> <9091> <051C> <90A2> <051D> <90AA> <051E> <90A6> <051F> <90A3> <0520> <9149> <0521> <91C6> <0522> <91CC> <0523> <9632> <0524> <962E> <0525> <9631> <0526> <962A> <0527> <962C> <0528> <4E26> <0529> <4E56> <052A> <4E73> <052B> <4E8B> <052C> <4E9B> endbfchar 100 beginbfchar <052D> <4E9E> <0530> <4F6F> <0531> <4F9D> <0532> <4F8D> <0533> <4F73> <0534> <4F7F> <0535> <4F6C> <0536> <4F9B> <0537> <4F8B> <0538> <4F86> <0539> <4F83> <053A> <4F70> <053B> <4F75> <053C> <4F88> <053D> <4F69> <053E> <4F7B> <053F> <4F96> <0540> <4F7E> <0541> <4F8F> <0542> <4F91> <0543> <4F7A> <0544> <5154> <0545> <5152> <0546> <5155> <0547> <5169> <0548> <5177> <0549> <5176> <054A> <5178> <054B> <51BD> <054C> <51FD> <054D> <523B> <054E> <5238> <054F> <5237> <0550> <523A> <0551> <5230> <0552> <522E> <0553> <5236> <0554> <5241> <0555> <52BE> <0556> <52BB> <0557> <5352> <0558> <5354> <0559> <5353> <055A> <5351> <055B> <5366> <055F> <53D6> <0560> <53D4> <0561> <53D7> <0562> <5473> <0563> <5475> <0564> <5496> <0565> <5478> <0566> <5495> <0567> <5480> <0568> <547B> <0569> <5477> <056A> <5484> <056B> <5492> <056C> <5486> <056D> <547C> <056E> <5490> <056F> <5471> <0570> <5476> <0571> <548C> <0572> <549A> <0573> <5462> <0574> <5468> <0575> <548B> <0576> <547D> <0577> <548E> <0578> <56FA> <0579> <5783> <057A> <5777> <057B> <576A> <057C> <5769> <057D> <5761> <057E> <5766> <057F> <5764> <0580> <577C> <0581> <591C> <0582> <5949> <0585> <5944> <0586> <5954> <0587> <59BE> <0588> <59BB> <0589> <59D4> <058A> <59B9> <058B> <59AE> <058C> <59D1> <058D> <59C6> <058E> <59D0> <058F> <59CD> <0590> <59CB> <0591> <59D3> <0592> <59CA> <0593> <59AF> <0594> <59B3> <0595> <59D2> <0596> <59C5> <0597> <5B5F> endbfchar 100 beginbfchar <0598> <5B64> <0599> <5B63> <059A> <5B97> <059B> <5B9A> <059C> <5B98> <059D> <5B9C> <059E> <5B99> <059F> <5B9B> <05A0> <5C1A> <05A1> <5C48> <05A4> <5CB7> <05A5> <5CA1> <05A6> <5CB8> <05A7> <5CA9> <05A8> <5CAB> <05A9> <5CB1> <05AA> <5CB3> <05AB> <5E18> <05AC> <5E1A> <05AD> <5E16> <05AE> <5E15> <05AF> <5E1B> <05B0> <5E11> <05B1> <5E78> <05B2> <5E9A> <05B3> <5E97> <05B4> <5E9C> <05B7> <5EF6> <05BA> <5F29> <05BD> <5F7F> <05BE> <5F7C> <05BF> <5FDD> <05C0> <5FE0> <05C1> <5FFD> <05C2> <5FF5> <05C3> <5FFF> <05C4> <600F> <05C5> <6014> <05C6> <602F> <05C7> <6035> <05C8> <6016> <05C9> <602A> <05CA> <6015> <05CB> <6021> <05CC> <6027> <05CD> <6029> <05CE> <602B> <05CF> <601B> <05D0> <6216> <05D1> <6215> <05D2> <623F> <05D3> <623E> <05D4> <6240> <05D5> <627F> <05D6> <62C9> <05D7> <62CC> <05D8> <62C4> <05D9> <62BF> <05DA> <62C2> <05DB> <62B9> <05DC> <62D2> <05DD> <62DB> <05DE> <62AB> <05E1> <62CB> <05E2> <62C8> <05E3> <62A8> <05E4> <62BD> <05E5> <62BC> <05E6> <62D0> <05E7> <62D9> <05E8> <62C7> <05E9> <62CD> <05EA> <62B5> <05EB> <62DA> <05EC> <62B1> <05ED> <62D8> <05F0> <62C6> <05F1> <62AC> <05F2> <62CE> <05F3> <653E> <05F4> <65A7> <05F5> <65BC> <05F6> <65FA> <05F7> <6614> <05F8> <6613> <05F9> <660C> <05FA> <6606> <05FB> <6602> <05FC> <660E> <05FD> <6600> <05FE> <660F> <05FF> <6615> <0600> <660A> <0601> <6607> <0602> <670D> <0603> <670B> <0604> <676D> <0605> <678B> <0606> <6795> <0607> <6771> endbfchar 100 beginbfchar <0608> <679C> <0609> <6773> <060A> <6777> <060B> <6787> <060C> <679D> <060D> <6797> <0610> <677F> <0611> <6789> <0612> <677E> <0613> <6790> <0614> <6775> <0615> <679A> <0616> <6793> <0617> <677C> <0618> <676A> <0619> <6772> <061A> <6B23> <061D> <6B7F> <061E> <6C13> <061F> <6C1B> <0620> <6CE3> <0621> <6CE8> <0622> <6CF3> <0623> <6CB1> <0624> <6CCC> <0625> <6CE5> <0626> <6CB3> <0629> <6CBC> <062A> <6CE2> <062B> <6CAB> <062C> <6CD5> <062D> <6CD3> <062E> <6CB8> <062F> <6CC4> <0630> <6CB9> <0631> <6CC1> <0632> <6CAE> <0633> <6CD7> <0634> <6CC5> <0635> <6CF1> <0636> <6CBF> <0637> <6CBB> <0638> <6CE1> <0639> <6CDB> <063A> <6CCA> <063B> <6CAC> <063C> <6CEF> <063D> <6CDC> <063E> <6CD6> <063F> <6CE0> <0640> <7095> <0641> <708E> <0642> <7092> <0643> <708A> <0644> <7099> <0647> <7238> <0648> <7248> <0649> <7267> <064A> <7269> <064B> <72C0> <064C> <72CE> <064D> <72D9> <064E> <72D7> <064F> <72D0> <0650> <73A9> <0651> <73A8> <0652> <739F> <0653> <73AB> <0654> <73A5> <0655> <753D> <0656> <759D> <0659> <7684> <065A> <76C2> <065B> <76F2> <065C> <76F4> <065D> <77E5> <065E> <77FD> <065F> <793E> <0662> <79C9> <0663> <79C8> <0664> <7A7A> <0665> <7A79> <0666> <7AFA> <0667> <7CFE> <0668> <7F54> <0669> <7F8C> <066A> <7F8B> <066B> <8005> <066C> <80BA> <066D> <80A5> <066E> <80A2> <066F> <80B1> <0670> <80A1> <0671> <80AB> <0672> <80A9> <0673> <80B4> <0674> <80AA> <0675> <80AF> <0676> <81E5> <0677> <81FE> endbfchar 100 beginbfchar <0678> <820D> <0679> <82B3> <067A> <829D> <067B> <8299> <067C> <82AD> <067D> <82BD> <067E> <829F> <067F> <82B9> <0680> <82B1> <0681> <82AC> <0682> <82A5> <0683> <82AF> <0684> <82B8> <0685> <82A3> <0686> <82B0> <0687> <82BE> <0688> <82B7> <0689> <864E> <068A> <8671> <068B> <521D> <068C> <8868> <068D> <8ECB> <068E> <8FCE> <068F> <8FD4> <0690> <8FD1> <0691> <90B5> <0692> <90B8> <0693> <90B1> <0694> <90B6> <0695> <91C7> <0696> <91D1> <0697> <9577> <0698> <9580> <0699> <961C> <069A> <9640> <069B> <963F> <069C> <963B> <069D> <9644> <069E> <9642> <069F> <96B9> <06A0> <96E8> <06A1> <9752> <06A2> <975E> <06A3> <4E9F> <06A6> <4FE1> <06A7> <4FB5> <06A8> <4FAF> <06A9> <4FBF> <06AA> <4FE0> <06AB> <4FD1> <06AC> <4FCF> <06AD> <4FDD> <06AE> <4FC3> <06AF> <4FB6> <06B0> <4FD8> <06B1> <4FDF> <06B2> <4FCA> <06B3> <4FD7> <06B4> <4FAE> <06B5> <4FD0> <06B6> <4FC4> <06B7> <4FC2> <06B8> <4FDA> <06B9> <4FCE> <06BA> <4FDE> <06BB> <4FB7> <06BC> <5157> <06BD> <5192> <06BE> <5191> <06BF> <51A0> <06C0> <524E> <06C1> <5243> <06C2> <524A> <06C3> <524D> <06C4> <524C> <06C5> <524B> <06C6> <5247> <06C7> <52C7> <06C8> <52C9> <06C9> <52C3> <06CA> <52C1> <06CB> <530D> <06CC> <5357> <06CD> <537B> <06CE> <539A> <06CF> <53DB> <06D0> <54AC> <06D1> <54C0> <06D2> <54A8> <06D3> <54CE> <06D4> <54C9> <06D5> <54B8> <06D6> <54A6> <06D7> <54B3> <06D8> <54C7> <06D9> <54C2> <06DA> <54BD> <06DB> <54AA> <06DC> <54C1> <06DD> <54C4> endbfchar 100 beginbfchar <06DE> <54C8> <06DF> <54AF> <06E0> <54AB> <06E1> <54B1> <06E2> <54BB> <06E3> <54A9> <06E4> <54A7> <06E5> <54BF> <06E6> <56FF> <06E7> <5782> <06E8> <578B> <06E9> <57A0> <06EA> <57A3> <06EB> <57A2> <06EC> <57CE> <06ED> <57AE> <06EE> <5793> <06EF> <5955> <06F0> <5951> <06F1> <594F> <06F2> <594E> <06F3> <5950> <06F4> <59DC> <06F5> <59D8> <06F6> <59FF> <06F7> <59E3> <06F8> <59E8> <06F9> <5A03> <06FA> <59E5> <06FB> <59EA> <06FC> <59DA> <06FD> <59E6> <06FE> <5A01> <06FF> <59FB> <0700> <5B69> <0701> <5BA3> <0702> <5BA6> <0703> <5BA4> <0704> <5BA2> <0705> <5BA5> <0706> <5C01> <0709> <5C4D> <070A> <5C4B> <070B> <5CD9> <070C> <5CD2> <070D> <5DF7> <070E> <5E1D> <070F> <5E25> <0710> <5E1F> <0711> <5E7D> <0712> <5EA0> <0713> <5EA6> <0714> <5EFA> <0715> <5F08> <0716> <5F2D> <0717> <5F65> <0718> <5F88> <0719> <5F85> <071C> <5F87> <071D> <5F8C> <071E> <5F89> <071F> <6012> <0720> <601D> <0721> <6020> <0722> <6025> <0723> <600E> <0724> <6028> <0725> <604D> <0726> <6070> <0727> <6068> <0728> <6062> <0729> <6046> <072A> <6043> <072B> <606C> <072C> <606B> <072D> <606A> <072E> <6064> <072F> <6241> <0730> <62DC> <0731> <6316> <0732> <6309> <0733> <62FC> <0734> <62ED> <0735> <6301> <0736> <62EE> <0737> <62FD> <0738> <6307> <0739> <62F1> <073A> <62F7> <073B> <62EF> <073C> <62EC> <073D> <62FE> <073E> <62F4> <073F> <6311> <0740> <6302> <0741> <653F> <0742> <6545> <0743> <65AB> <0744> <65BD> <0745> <65E2> endbfchar 100 beginbfchar <0746> <6625> <0747> <662D> <0748> <6620> <0749> <6627> <074A> <662F> <074B> <661F> <074C> <6628> <074D> <6631> <074E> <6624> <074F> <66F7> <0750> <67FF> <0751> <67D3> <0752> <67F1> <0753> <67D4> <0754> <67D0> <0755> <67EC> <0756> <67B6> <0757> <67AF> <0758> <67F5> <0759> <67E9> <075A> <67EF> <075B> <67C4> <075C> <67D1> <075D> <67B4> <075E> <67DA> <075F> <67E5> <0760> <67B8> <0761> <67CF> <0762> <67DE> <0763> <67F3> <0764> <67B0> <0765> <67D9> <0766> <67E2> <0767> <67DD> <0768> <67D2> <0769> <6B6A> <076A> <6B83> <076B> <6B86> <076C> <6BB5> <076D> <6BD2> <076E> <6BD7> <076F> <6C1F> <0770> <6CC9> <0771> <6D0B> <0772> <6D32> <0773> <6D2A> <0774> <6D41> <0775> <6D25> <0776> <6D0C> <0777> <6D31> <0778> <6D1E> <0779> <6D17> <077A> <6D3B> <077D> <6D36> <077E> <6D1B> <077F> <6CF5> <0780> <6D39> <0781> <6D27> <0782> <6D38> <0783> <6D29> <0784> <6D2E> <0785> <6D35> <0786> <6D0E> <0787> <6D2B> <0788> <70AB> <0789> <70BA> <078A> <70B3> <078B> <70AC> <078C> <70AF> <078D> <70AD> <078E> <70B8> <078F> <70AE> <0790> <70A4> <0791> <7230> <0792> <7272> <0793> <726F> <0794> <7274> <0795> <72E9> <0798> <73B7> <0799> <73CA> <079A> <73BB> <079B> <73B2> <079C> <73CD> <079D> <73C0> <079E> <73B3> <079F> <751A> <07A0> <752D> <07A1> <754F> <07A2> <754C> <07A3> <754E> <07A4> <754B> <07A5> <75AB> <07AA> <7678> <07AE> <76C8> <07AF> <76C6> <07B0> <76C3> <07B1> <76C5> <07B2> <7701> <07B3> <76F9> <07B4> <76F8> endbfchar 100 beginbfchar <07B5> <7709> <07B6> <770B> <07B7> <76FE> <07B8> <76FC> <07B9> <7707> <07BA> <77DC> <07BB> <7802> <07BC> <7814> <07BF> <7946> <07C0> <7949> <07C1> <7948> <07C2> <7947> <07C7> <79CB> <07C8> <7A7F> <07C9> <7A81> <07CA> <7AFF> <07CB> <7AFD> <07CC> <7C7D> <07CD> <7D02> <07CE> <7D05> <07CF> <7D00> <07D0> <7D09> <07D1> <7D07> <07D2> <7D04> <07D3> <7D06> <07D4> <7F38> <07D5> <7F8E> <07D6> <7FBF> <07D7> <8010> <07D8> <800D> <07D9> <8011> <07DA> <8036> <07DB> <80D6> <07DC> <80E5> <07DD> <80DA> <07E0> <80CC> <07E1> <80E1> <07E2> <80DB> <07E3> <80CE> <07E4> <80DE> <07E5> <80E4> <07E6> <80DD> <07E7> <81F4> <07E8> <8222> <07E9> <82E7> <07EA> <8303> <07EB> <8305> <07EC> <82E3> <07ED> <82DB> <07EE> <82E6> <07EF> <8304> <07F0> <82E5> <07F1> <8302> <07F2> <8309> <07F3> <82D2> <07F4> <82D7> <07F5> <82F1> <07F6> <8301> <07F7> <82DC> <07F8> <82D4> <07F9> <82D1> <07FA> <82DE> <07FB> <82D3> <07FC> <82DF> <07FD> <82EF> <07FE> <8306> <07FF> <8650> <0800> <8679> <0801> <867B> <0802> <867A> <0803> <884D> <0804> <886B> <0805> <8981> <0806> <89D4> <0807> <8A08> <080A> <8C9E> <080B> <8CA0> <080C> <8D74> <080D> <8D73> <080E> <8DB4> <080F> <8ECD> <0810> <8ECC> <0811> <8FF0> <0812> <8FE6> <0813> <8FE2> <0814> <8FEA> <0815> <8FE5> <0816> <8FED> <0817> <8FEB> <0818> <8FE4> <0819> <8FE8> <081A> <90CA> <081B> <90CE> <081C> <90C1> <081D> <90C3> <081E> <914B> <081F> <914A> <0820> <91CD> <0821> <9582> <0822> <9650> endbfchar 100 beginbfchar <0826> <9762> <0827> <9769> <0828> <97CB> <0829> <97ED> <082A> <97F3> <082B> <9801> <082C> <98A8> <082D> <98DB> <082E> <98DF> <082F> <9996> <0830> <9999> <0831> <4E58> <0832> <4EB3> <0835> <5023> <0836> <4FEF> <0837> <5026> <0838> <5025> <0839> <4FF8> <083A> <5029> <083B> <5016> <083C> <5006> <083D> <503C> <083E> <501F> <083F> <501A> <0840> <5012> <0841> <5011> <0842> <4FFA> <0843> <5000> <0844> <5014> <0845> <5028> <0846> <4FF1> <0847> <5021> <0848> <500B> <0849> <5019> <084A> <5018> <084B> <4FF3> <084C> <4FEE> <084D> <502D> <084E> <502A> <084F> <4FFE> <0850> <502B> <0851> <5009> <0852> <517C> <0855> <51A2> <0856> <51CD> <0857> <51CC> <0858> <51C6> <0859> <51CB> <085A> <5256> <085B> <525C> <085C> <5254> <085D> <525B> <085E> <525D> <085F> <532A> <0860> <537F> <0861> <539F> <0862> <539D> <0863> <53DF> <0864> <54E8> <0865> <5510> <0866> <5501> <0867> <5537> <0868> <54FC> <0869> <54E5> <086A> <54F2> <086B> <5506> <086C> <54FA> <086D> <5514> <086E> <54E9> <086F> <54ED> <0870> <54E1> <0871> <5509> <0872> <54EE> <0873> <54EA> <0874> <54E6> <0875> <5527> <0876> <5507> <0877> <54FD> <0878> <550F> <087B> <57C2> <087C> <57D4> <087D> <57CB> <087E> <57C3> <087F> <5809> <0880> <590F> <0883> <595A> <0884> <5A11> <0885> <5A18> <0886> <5A1C> <0887> <5A1F> <0888> <5A1B> <0889> <5A13> <088A> <59EC> <088B> <5A20> <088C> <5A23> <088D> <5A29> <088E> <5A25> <088F> <5A0C> <0890> <5A09> <0891> <5B6B> endbfchar 100 beginbfchar <0892> <5C58> <0893> <5BB0> <0894> <5BB3> <0895> <5BB6> <0896> <5BB4> <0897> <5BAE> <0898> <5BB5> <0899> <5BB9> <089A> <5BB8> <089B> <5C04> <089C> <5C51> <089D> <5C55> <089E> <5C50> <089F> <5CED> <08A0> <5CFD> <08A1> <5CFB> <08A2> <5CEA> <08A3> <5CE8> <08A4> <5CF0> <08A5> <5CF6> <08A6> <5D01> <08A7> <5CF4> <08A8> <5DEE> <08A9> <5E2D> <08AA> <5E2B> <08AB> <5EAB> <08AC> <5EAD> <08AD> <5EA7> <08AE> <5F31> <08AF> <5F92> <08B0> <5F91> <08B1> <5F90> <08B2> <6059> <08B3> <6063> <08B4> <6065> <08B5> <6050> <08B6> <6055> <08B7> <606D> <08B8> <6069> <08B9> <606F> <08BA> <6084> <08BB> <609F> <08BC> <609A> <08BD> <608D> <08BE> <6094> <08BF> <608C> <08C0> <6085> <08C1> <6096> <08C2> <6247> <08C3> <62F3> <08C4> <6308> <08C5> <62FF> <08C6> <634E> <08C7> <633E> <08C8> <632F> <08C9> <6355> <08CA> <6342> <08CB> <6346> <08CC> <634F> <08CD> <6349> <08CE> <633A> <08CF> <6350> <08D0> <633D> <08D3> <6328> <08D4> <634D> <08D5> <634C> <08D8> <6599> <08D9> <65C1> <08DA> <65C5> <08DB> <6642> <08DC> <6649> <08DD> <664F> <08DE> <6643> <08DF> <6652> <08E0> <664C> <08E1> <6645> <08E2> <6641> <08E3> <66F8> <08E6> <6717> <08E7> <6821> <08E8> <6838> <08E9> <6848> <08EA> <6846> <08EB> <6853> <08EC> <6839> <08ED> <6842> <08EE> <6854> <08EF> <6829> <08F0> <68B3> <08F1> <6817> <08F2> <684C> <08F3> <6851> <08F4> <683D> <08F5> <67F4> <08F6> <6850> <08F7> <6840> <08F8> <683C> <08F9> <6843> <08FA> <682A> <08FB> <6845> endbfchar 100 beginbfchar <08FC> <6813> <08FD> <6818> <08FE> <6841> <08FF> <6B8A> <0900> <6B89> <0901> <6BB7> <0902> <6C23> <0905> <6C26> <0906> <6C24> <0907> <6CF0> <0908> <6D6A> <0909> <6D95> <090A> <6D88> <090B> <6D87> <090C> <6D66> <090D> <6D78> <090E> <6D77> <090F> <6D59> <0910> <6D93> <0911> <6D6C> <0912> <6D89> <0913> <6D6E> <0914> <6D5A> <0915> <6D74> <0916> <6D69> <0917> <6D8C> <0918> <6D8A> <0919> <6D79> <091A> <6D85> <091B> <6D65> <091C> <6D94> <091D> <70CA> <091E> <70D8> <091F> <70E4> <0920> <70D9> <0921> <70C8> <0922> <70CF> <0923> <7239> <0924> <7279> <0925> <72FC> <0926> <72F9> <0927> <72FD> <0928> <72F8> <0929> <72F7> <092A> <7386> <092B> <73ED> <092C> <7409> <092D> <73EE> <092E> <73E0> <092F> <73EA> <0930> <73DE> <0931> <7554> <0932> <755D> <0933> <755C> <0934> <755A> <0935> <7559> <0936> <75BE> <0937> <75C5> <0938> <75C7> <093B> <75BD> <093C> <75BC> <093D> <75B9> <093E> <75C2> <093F> <75B8> <0940> <768B> <0941> <76B0> <0942> <76CA> <0945> <7729> <0948> <7728> <0949> <77E9> <094A> <7830> <094B> <7827> <094C> <7838> <094D> <781D> <094E> <7834> <094F> <7837> <0950> <7825> <0951> <782D> <0952> <7820> <0953> <781F> <0954> <7832> <0955> <7955> <0956> <7950> <0957> <7960> <0958> <795F> <0959> <7956> <095A> <795E> <095B> <795D> <095C> <7957> <095D> <795A> <095E> <79E4> <095F> <79E3> <0960> <79E7> <0961> <79DF> <0962> <79E6> <0963> <79E9> <0964> <79D8> <0965> <7A84> <0966> <7A88> <0967> <7AD9> endbfchar 100 beginbfchar <0968> <7B06> <0969> <7B11> <096A> <7C89> <096B> <7D21> <096C> <7D17> <096D> <7D0B> <096E> <7D0A> <096F> <7D20> <0970> <7D22> <0971> <7D14> <0972> <7D10> <0973> <7D15> <0974> <7D1A> <0975> <7D1C> <0976> <7D0D> <0977> <7D19> <0978> <7D1B> <0979> <7F3A> <097A> <7F5F> <097B> <7F94> <097C> <7FC5> <097D> <7FC1> <097E> <8006> <097F> <8004> <0980> <8018> <0981> <8015> <0982> <8019> <0983> <8017> <0984> <803D> <0985> <803F> <0986> <80F1> <0987> <8102> <0988> <80F0> <0989> <8105> <098A> <80ED> <098B> <80F4> <098C> <8106> <098D> <80F8> <098E> <80F3> <098F> <8108> <0990> <80FD> <0991> <810A> <0992> <80FC> <0993> <80EF> <0994> <81ED> <0995> <81EC> <0996> <8200> <0997> <8210> <099A> <8228> <099B> <822C> <099C> <82BB> <099D> <832B> <099E> <8352> <099F> <8354> <09A0> <834A> <09A1> <8338> <09A2> <8350> <09A3> <8349> <09A4> <8335> <09A5> <8334> <09A6> <834F> <09A7> <8332> <09A8> <8339> <09A9> <8336> <09AA> <8317> <09AB> <8340> <09AC> <8331> <09AD> <8328> <09AE> <8343> <09AF> <8654> <09B0> <868A> <09B1> <86AA> <09B2> <8693> <09B3> <86A4> <09B4> <86A9> <09B5> <868C> <09B6> <86A3> <09B7> <869C> <09B8> <8870> <09B9> <8877> <09BC> <887D> <09BD> <8879> <09BE> <8A18> <09BF> <8A10> <09C0> <8A0E> <09C1> <8A0C> <09C2> <8A15> <09C3> <8A0A> <09C4> <8A17> <09C5> <8A13> <09C6> <8A16> <09C7> <8A0F> <09C8> <8A11> <09C9> <8C48> <09CA> <8C7A> <09CB> <8C79> <09CE> <8D77> <09CF> <8EAC> <09D0> <8ED2> <09D1> <8ED4> endbfchar 100 beginbfchar <09D2> <8ECF> <09D3> <8FB1> <09D4> <9001> <09D5> <9006> <09D6> <8FF7> <09D7> <9000> <09D8> <8FFA> <09D9> <8FF4> <09DA> <9003> <09DB> <8FFD> <09DC> <9005> <09DD> <8FF8> <09DE> <9095> <09DF> <90E1> <09E0> <90DD> <09E1> <90E2> <09E2> <9152> <09E3> <914D> <09E4> <914C> <09E5> <91D8> <09E6> <91DD> <09E7> <91D7> <09E8> <91DC> <09E9> <91D9> <09EA> <9583> <09ED> <9661> <09EE> <965B> <09EF> <965D> <09F0> <9664> <09F1> <9658> <09F2> <965E> <09F3> <96BB> <09F4> <98E2> <09F5> <99AC> <09F6> <9AA8> <09F7> <9AD8> <09F8> <9B25> <09F9> <9B32> <09FA> <9B3C> <09FB> <4E7E> <09FC> <507A> <09FD> <507D> <09FE> <505C> <09FF> <5047> <0A00> <5043> <0A01> <504C> <0A02> <505A> <0A03> <5049> <0A04> <5065> <0A05> <5076> <0A06> <504E> <0A07> <5055> <0A08> <5075> <0A09> <5074> <0A0A> <5077> <0A0B> <504F> <0A0C> <500F> <0A0D> <506F> <0A0E> <506D> <0A0F> <515C> <0A10> <5195> <0A11> <51F0> <0A12> <526A> <0A13> <526F> <0A14> <52D2> <0A15> <52D9> <0A16> <52D8> <0A17> <52D5> <0A18> <5310> <0A19> <530F> <0A1A> <5319> <0A1D> <533E> <0A1E> <53C3> <0A1F> <66FC> <0A20> <5546> <0A21> <556A> <0A22> <5566> <0A23> <5544> <0A24> <555E> <0A25> <5561> <0A26> <5543> <0A27> <554A> <0A28> <5531> <0A29> <5556> <0A2A> <554F> <0A2B> <5555> <0A2C> <552F> <0A2D> <5564> <0A2E> <5538> <0A2F> <552E> <0A30> <555C> <0A31> <552C> <0A32> <5563> <0A33> <5533> <0A34> <5541> <0A35> <5557> <0A36> <5708> <0A37> <570B> <0A38> <5709> <0A39> <57DF> endbfchar 100 beginbfchar <0A3A> <5805> <0A3B> <580A> <0A3C> <5806> <0A3D> <57E0> <0A3E> <57E4> <0A3F> <57FA> <0A40> <5802> <0A41> <5835> <0A42> <57F7> <0A43> <57F9> <0A44> <5920> <0A45> <5962> <0A46> <5A36> <0A47> <5A41> <0A48> <5A49> <0A49> <5A66> <0A4A> <5A6A> <0A4B> <5A40> <0A4C> <5A3C> <0A4D> <5A62> <0A4E> <5A5A> <0A4F> <5A46> <0A50> <5A4A> <0A51> <5B70> <0A52> <5BC7> <0A53> <5BC5> <0A54> <5BC4> <0A55> <5BC2> <0A56> <5BBF> <0A57> <5BC6> <0A58> <5C09> <0A59> <5C08> <0A5A> <5C07> <0A5B> <5C60> <0A5E> <5D07> <0A5F> <5D06> <0A60> <5D0E> <0A61> <5D1B> <0A62> <5D16> <0A63> <5D22> <0A64> <5D11> <0A65> <5D29> <0A66> <5D14> <0A67> <5D19> <0A68> <5D24> <0A69> <5D27> <0A6A> <5D17> <0A6B> <5DE2> <0A6C> <5E38> <0A6D> <5E36> <0A6E> <5E33> <0A6F> <5E37> <0A72> <5EB6> <0A73> <5EB5> <0A74> <5EBE> <0A75> <5F35> <0A76> <5F37> <0A77> <5F57> <0A78> <5F6C> <0A79> <5F69> <0A7A> <5F6B> <0A7B> <5F97> <0A7C> <5F99> <0A7D> <5F9E> <0A7E> <5F98> <0A7F> <5FA1> <0A80> <5FA0> <0A81> <5F9C> <0A82> <607F> <0A83> <60A3> <0A84> <6089> <0A85> <60A0> <0A86> <60A8> <0A87> <60CB> <0A88> <60B4> <0A89> <60E6> <0A8A> <60BD> <0A8B> <60C5> <0A8C> <60BB> <0A8D> <60B5> <0A8E> <60DC> <0A8F> <60BC> <0A90> <60D8> <0A91> <60D5> <0A92> <60C6> <0A93> <60DF> <0A94> <60B8> <0A95> <60DA> <0A96> <60C7> <0A99> <6248> <0A9A> <63A0> <0A9B> <63A7> <0A9C> <6372> <0A9D> <6396> <0A9E> <63A2> <0A9F> <63A5> <0AA0> <6377> <0AA1> <6367> <0AA2> <6398> <0AA3> <63AA> endbfchar 100 beginbfchar <0AA4> <6371> <0AA5> <63A9> <0AA6> <6389> <0AA7> <6383> <0AA8> <639B> <0AA9> <636B> <0AAA> <63A8> <0AAB> <6384> <0AAC> <6388> <0AAD> <6399> <0AAE> <63A1> <0AAF> <63AC> <0AB0> <6392> <0AB1> <638F> <0AB2> <6380> <0AB3> <637B> <0AB4> <6369> <0AB5> <6368> <0AB6> <637A> <0AB7> <655D> <0AB8> <6556> <0AB9> <6551> <0ABA> <6559> <0ABB> <6557> <0ABC> <555F> <0ABD> <654F> <0ABE> <6558> <0ABF> <6555> <0AC0> <6554> <0AC1> <659C> <0AC2> <659B> <0AC3> <65AC> <0AC4> <65CF> <0AC7> <65CE> <0AC8> <665D> <0AC9> <665A> <0ACA> <6664> <0ACB> <6668> <0ACC> <6666> <0ACD> <665E> <0ACE> <66F9> <0ACF> <52D7> <0AD0> <671B> <0AD1> <6881> <0AD2> <68AF> <0AD3> <68A2> <0AD4> <6893> <0AD5> <68B5> <0AD6> <687F> <0AD7> <6876> <0AD8> <68B1> <0AD9> <68A7> <0ADA> <6897> <0ADB> <68B0> <0ADC> <6883> <0ADD> <68C4> <0ADE> <68AD> <0ADF> <6886> <0AE0> <6885> <0AE1> <6894> <0AE2> <689D> <0AE3> <68A8> <0AE4> <689F> <0AE5> <68A1> <0AE6> <6882> <0AE7> <6B32> <0AE8> <6BBA> <0AEB> <6C2B> <0AEC> <6D8E> <0AED> <6DBC> <0AEE> <6DF3> <0AEF> <6DD9> <0AF0> <6DB2> <0AF1> <6DE1> <0AF2> <6DCC> <0AF3> <6DE4> <0AF4> <6DFB> <0AF5> <6DFA> <0AF6> <6E05> <0AF7> <6DC7> <0AF8> <6DCB> <0AF9> <6DAF> <0AFA> <6DD1> <0AFB> <6DAE> <0AFC> <6DDE> <0AFD> <6DF9> <0AFE> <6DB8> <0AFF> <6DF7> <0B00> <6DF5> <0B01> <6DC5> <0B02> <6DD2> <0B03> <6E1A> <0B04> <6DB5> <0B05> <6DDA> <0B06> <6DEB> <0B07> <6DD8> <0B08> <6DEA> <0B09> <6DF1> <0B0A> <6DEE> <0B0B> <6DE8> endbfchar 100 beginbfchar <0B0C> <6DC6> <0B0D> <6DC4> <0B0E> <6DAA> <0B0F> <6DEC> <0B10> <6DBF> <0B11> <6DE6> <0B12> <70F9> <0B15> <70FD> <0B16> <70EF> <0B17> <723D> <0B18> <727D> <0B19> <7281> <0B1A> <731C> <0B1B> <731B> <0B1C> <7316> <0B1D> <7313> <0B1E> <7319> <0B1F> <7387> <0B20> <7405> <0B21> <740A> <0B22> <7403> <0B23> <7406> <0B24> <73FE> <0B25> <740D> <0B26> <74E0> <0B29> <751C> <0B2A> <7522> <0B2D> <7562> <0B2E> <7570> <0B2F> <758F> <0B32> <75B5> <0B33> <75CA> <0B34> <75CD> <0B35> <768E> <0B36> <76D4> <0B37> <76D2> <0B38> <76DB> <0B39> <7737> <0B3A> <773E> <0B3B> <773C> <0B3C> <7736> <0B3D> <7738> <0B3E> <773A> <0B3F> <786B> <0B40> <7843> <0B41> <784E> <0B42> <7965> <0B43> <7968> <0B44> <796D> <0B45> <79FB> <0B46> <7A92> <0B47> <7A95> <0B48> <7B20> <0B49> <7B28> <0B4A> <7B1B> <0B4B> <7B2C> <0B4C> <7B26> <0B4D> <7B19> <0B4E> <7B1E> <0B4F> <7B2E> <0B50> <7C92> <0B51> <7C97> <0B52> <7C95> <0B53> <7D46> <0B54> <7D43> <0B55> <7D71> <0B56> <7D2E> <0B57> <7D39> <0B58> <7D3C> <0B59> <7D40> <0B5A> <7D30> <0B5B> <7D33> <0B5C> <7D44> <0B5D> <7D2F> <0B5E> <7D42> <0B5F> <7D32> <0B60> <7D31> <0B61> <7F3D> <0B62> <7F9E> <0B63> <7F9A> <0B64> <7FCC> <0B65> <7FCE> <0B66> <7FD2> <0B67> <801C> <0B68> <804A> <0B69> <8046> <0B6A> <812F> <0B6B> <8116> <0B6C> <8123> <0B6D> <812B> <0B6E> <8129> <0B6F> <8130> <0B70> <8124> <0B71> <8202> <0B72> <8235> <0B73> <8237> <0B74> <8236> <0B75> <8239> <0B76> <838E> <0B77> <839E> endbfchar 100 beginbfchar <0B78> <8398> <0B79> <8378> <0B7A> <83A2> <0B7B> <8396> <0B7C> <83BD> <0B7D> <83AB> <0B7E> <8392> <0B7F> <838A> <0B80> <8393> <0B81> <8389> <0B82> <83A0> <0B83> <8377> <0B86> <8386> <0B87> <83A7> <0B88> <8655> <0B89> <5F6A> <0B8A> <86C7> <0B8B> <86C0> <0B8C> <86B6> <0B8D> <86C4> <0B8E> <86B5> <0B8F> <86C6> <0B90> <86CB> <0B91> <86B1> <0B92> <86AF> <0B93> <86C9> <0B94> <8853> <0B95> <889E> <0B96> <8888> <0B97> <88AB> <0B98> <8892> <0B99> <8896> <0B9A> <888D> <0B9B> <888B> <0B9C> <8993> <0B9D> <898F> <0B9E> <8A2A> <0B9F> <8A1D> <0BA0> <8A23> <0BA1> <8A25> <0BA2> <8A31> <0BA3> <8A2D> <0BA4> <8A1F> <0BA5> <8A1B> <0BA6> <8A22> <0BA7> <8C49> <0BA8> <8C5A> <0BA9> <8CA9> <0BAA> <8CAC> <0BAB> <8CAB> <0BAC> <8CA8> <0BAD> <8CAA> <0BAE> <8CA7> <0BAF> <8D67> <0BB0> <8D66> <0BB1> <8DBE> <0BB2> <8DBA> <0BB3> <8EDB> <0BB4> <8EDF> <0BB5> <9019> <0BB6> <900D> <0BB7> <901A> <0BB8> <9017> <0BB9> <9023> <0BBA> <901F> <0BBB> <901D> <0BBC> <9010> <0BBD> <9015> <0BBE> <901E> <0BBF> <9020> <0BC0> <900F> <0BC1> <9022> <0BC2> <9016> <0BC3> <901B> <0BC4> <9014> <0BC5> <90E8> <0BC6> <90ED> <0BC7> <90FD> <0BC8> <9157> <0BC9> <91CE> <0BCA> <91F5> <0BCB> <91E6> <0BCC> <91E3> <0BCD> <91E7> <0BCE> <91ED> <0BCF> <91E9> <0BD0> <9589> <0BD1> <966A> <0BD2> <9675> <0BD3> <9673> <0BD4> <9678> <0BD5> <9670> <0BD6> <9674> <0BD9> <966C> <0BDA> <96C0> <0BDB> <96EA> <0BDC> <96E9> <0BDD> <7AE0> <0BDE> <7ADF> <0BE1> <9B5A> endbfchar 100 beginbfchar <0BE2> <9CE5> <0BE3> <9E75> <0BE4> <9E7F> <0BE5> <9EA5> <0BE6> <9EBB> <0BE7> <50A2> <0BE8> <508D> <0BE9> <5085> <0BEA> <5099> <0BEB> <5091> <0BEC> <5080> <0BED> <5096> <0BEE> <5098> <0BEF> <509A> <0BF0> <6700> <0BF1> <51F1> <0BF2> <5272> <0BF5> <5269> <0BF6> <52DE> <0BF7> <52DD> <0BF8> <52DB> <0BF9> <535A> <0BFA> <53A5> <0BFB> <557B> <0BFC> <5580> <0BFD> <55A7> <0BFE> <557C> <0BFF> <558A> <0C00> <559D> <0C01> <5598> <0C02> <5582> <0C03> <559C> <0C04> <55AA> <0C05> <5594> <0C06> <5587> <0C07> <558B> <0C08> <5583> <0C09> <55B3> <0C0A> <55AE> <0C0B> <559F> <0C0C> <553E> <0C0D> <55B2> <0C0E> <559A> <0C0F> <55BB> <0C10> <55AC> <0C11> <55B1> <0C12> <557E> <0C13> <5589> <0C14> <55AB> <0C15> <5599> <0C16> <570D> <0C17> <582F> <0C18> <582A> <0C19> <5834> <0C1A> <5824> <0C1D> <5821> <0C1E> <581D> <0C1F> <5820> <0C22> <5960> <0C23> <5A77> <0C24> <5A9A> <0C25> <5A7F> <0C26> <5A92> <0C27> <5A9B> <0C28> <5AA7> <0C29> <5B73> <0C2A> <5B71> <0C2B> <5BD2> <0C2C> <5BCC> <0C2D> <5BD3> <0C2E> <5BD0> <0C31> <5C31> <0C32> <5D4C> <0C33> <5D50> <0C34> <5D34> <0C35> <5D47> <0C36> <5DFD> <0C37> <5E45> <0C38> <5E3D> <0C39> <5E40> <0C3A> <5E43> <0C3B> <5E7E> <0C3C> <5ECA> <0C3F> <5EC4> <0C40> <5F3C> <0C41> <5F6D> <0C44> <5FA8> <0C45> <60D1> <0C46> <60E1> <0C47> <60B2> <0C48> <60B6> <0C49> <60E0> <0C4A> <611C> <0C4B> <6123> <0C4C> <60FA> <0C4D> <6115> <0C4E> <60F0> <0C4F> <60FB> <0C50> <60F4> <0C51> <6168> endbfchar 100 beginbfchar <0C52> <60F1> <0C53> <610E> <0C54> <60F6> <0C55> <6109> <0C56> <6100> <0C57> <6112> <0C58> <621F> <0C59> <6249> <0C5A> <63A3> <0C5B> <638C> <0C5C> <63CF> <0C5D> <63C0> <0C5E> <63E9> <0C5F> <63C9> <0C60> <63C6> <0C61> <63CD> <0C62> <63D2> <0C63> <63E3> <0C64> <63D0> <0C65> <63E1> <0C66> <63D6> <0C69> <6376> <0C6A> <63F4> <0C6B> <63EA> <0C6C> <63DB> <0C6D> <6452> <0C6E> <63DA> <0C6F> <63F9> <0C70> <655E> <0C71> <6566> <0C74> <6591> <0C75> <6590> <0C76> <65AF> <0C77> <666E> <0C78> <6670> <0C79> <6674> <0C7A> <6676> <0C7B> <666F> <0C7C> <6691> <0C7D> <667A> <0C7E> <667E> <0C7F> <6677> <0C82> <671F> <0C83> <671D> <0C84> <68FA> <0C85> <68D5> <0C86> <68E0> <0C87> <68D8> <0C88> <68D7> <0C89> <6905> <0C8A> <68DF> <0C8B> <68F5> <0C8C> <68EE> <0C8D> <68E7> <0C8E> <68F9> <0C8F> <68D2> <0C90> <68F2> <0C91> <68E3> <0C92> <68CB> <0C93> <68CD> <0C94> <690D> <0C95> <6912> <0C96> <690E> <0C97> <68C9> <0C98> <68DA> <0C99> <696E> <0C9A> <68FB> <0C9B> <6B3E> <0C9C> <6B3A> <0C9D> <6B3D> <0C9E> <6B98> <0C9F> <6B96> <0CA0> <6BBC> <0CA1> <6BEF> <0CA4> <6C2C> <0CA5> <6E2F> <0CA6> <6E38> <0CA7> <6E54> <0CA8> <6E21> <0CA9> <6E32> <0CAA> <6E67> <0CAB> <6E4A> <0CAC> <6E20> <0CAD> <6E25> <0CAE> <6E23> <0CAF> <6E1B> <0CB0> <6E5B> <0CB1> <6E58> <0CB2> <6E24> <0CB3> <6E56> <0CB4> <6E6E> <0CB5> <6E2D> <0CB6> <6E26> <0CB7> <6E6F> <0CB8> <6E34> <0CB9> <6E4D> <0CBA> <6E3A> <0CBB> <6E2C> <0CBC> <6E43> <0CBD> <6E1D> endbfchar 100 beginbfchar <0CBE> <6E3E> <0CBF> <6ECB> <0CC0> <6E89> <0CC1> <6E19> <0CC2> <6E4E> <0CC3> <6E63> <0CC4> <6E44> <0CC5> <6E72> <0CC6> <6E69> <0CC7> <6E5F> <0CCA> <7126> <0CCB> <7130> <0CCC> <7121> <0CCD> <7136> <0CCE> <716E> <0CCF> <711C> <0CD0> <724C> <0CD1> <7284> <0CD2> <7280> <0CD3> <7336> <0CD4> <7325> <0CD5> <7334> <0CD6> <7329> <0CD7> <743A> <0CD8> <742A> <0CD9> <7433> <0CDA> <7422> <0CDB> <7425> <0CDE> <7434> <0CDF> <742F> <0CE0> <741B> <0CE1> <7426> <0CE2> <7428> <0CE5> <756B> <0CE6> <756A> <0CE7> <75E2> <0CE8> <75DB> <0CE9> <75E3> <0CEA> <75D9> <0CEB> <75D8> <0CEC> <75DE> <0CED> <75E0> <0CF0> <7696> <0CF1> <7693> <0CF2> <76B4> <0CF3> <76DC> <0CF4> <774F> <0CF5> <77ED> <0CF6> <785D> <0CF7> <786C> <0CF8> <786F> <0CF9> <7A0D> <0CFA> <7A08> <0CFB> <7A0B> <0CFC> <7A05> <0CFD> <7A00> <0CFE> <7A98> <0CFF> <7A97> <0D00> <7A96> <0D01> <7AE5> <0D02> <7AE3> <0D03> <7B49> <0D04> <7B56> <0D05> <7B46> <0D06> <7B50> <0D07> <7B52> <0D08> <7B54> <0D09> <7B4D> <0D0A> <7B4B> <0D0B> <7B4F> <0D0C> <7B51> <0D0D> <7C9F> <0D0E> <7CA5> <0D0F> <7D5E> <0D10> <7D50> <0D11> <7D68> <0D12> <7D55> <0D13> <7D2B> <0D14> <7D6E> <0D15> <7D72> <0D16> <7D61> <0D17> <7D66> <0D18> <7D62> <0D19> <7D70> <0D1A> <7D73> <0D1B> <5584> <0D1E> <800B> <0D1F> <8052> <0D20> <8085> <0D21> <8155> <0D22> <8154> <0D23> <814B> <0D24> <8151> <0D25> <814E> <0D26> <8139> <0D27> <8146> <0D28> <813E> <0D29> <814C> <0D2A> <8153> <0D2B> <8174> endbfchar 100 beginbfchar <0D2C> <8212> <0D2D> <821C> <0D2E> <83E9> <0D2F> <8403> <0D30> <83F8> <0D31> <840D> <0D32> <83E0> <0D33> <83C5> <0D34> <840B> <0D35> <83C1> <0D36> <83EF> <0D37> <83F1> <0D38> <83F4> <0D39> <8457> <0D3A> <840A> <0D3B> <83F0> <0D3C> <840C> <0D3D> <83CC> <0D3E> <83FD> <0D3F> <83F2> <0D40> <83CA> <0D41> <8438> <0D42> <840E> <0D43> <8404> <0D44> <83DC> <0D45> <8407> <0D46> <83D4> <0D47> <83DF> <0D48> <865B> <0D49> <86DF> <0D4A> <86D9> <0D4B> <86ED> <0D4C> <86D4> <0D4D> <86DB> <0D4E> <86E4> <0D4F> <86D0> <0D50> <86DE> <0D51> <8857> <0D54> <88B1> <0D55> <8983> <0D56> <8996> <0D57> <8A3B> <0D58> <8A60> <0D59> <8A55> <0D5A> <8A5E> <0D5B> <8A3C> <0D5C> <8A41> <0D5D> <8A54> <0D5E> <8A5B> <0D5F> <8A50> <0D60> <8A46> <0D61> <8A34> <0D62> <8A3A> <0D63> <8A36> <0D64> <8A56> <0D65> <8C61> <0D66> <8C82> <0D67> <8CAF> <0D68> <8CBC> <0D69> <8CB3> <0D6A> <8CBD> <0D6B> <8CC1> <0D6C> <8CBB> <0D6D> <8CC0> <0D6E> <8CB4> <0D6F> <8CB7> <0D70> <8CB6> <0D71> <8CBF> <0D72> <8CB8> <0D73> <8D8A> <0D74> <8D85> <0D75> <8D81> <0D76> <8DCE> <0D77> <8DDD> <0D78> <8DCB> <0D79> <8DDA> <0D7A> <8DD1> <0D7B> <8DCC> <0D7C> <8DDB> <0D7D> <8DC6> <0D7E> <8EFB> <0D7F> <8EF8> <0D80> <8EFC> <0D81> <8F9C> <0D82> <902E> <0D83> <9035> <0D84> <9031> <0D85> <9038> <0D86> <9032> <0D87> <9036> <0D88> <9102> <0D89> <90F5> <0D8A> <9109> <0D8B> <90FE> <0D8C> <9163> <0D8D> <9165> <0D8E> <91CF> <0D91> <9223> <0D92> <9209> <0D93> <921E> endbfchar 100 beginbfchar <0D94> <920D> <0D95> <9210> <0D96> <9207> <0D97> <9211> <0D98> <9594> <0D99> <958F> <0D9A> <958B> <0D9B> <9591> <0D9C> <9593> <0D9D> <9592> <0D9E> <958E> <0D9F> <968A> <0DA0> <968E> <0DA1> <968B> <0DA2> <967D> <0DA5> <968D> <0DA6> <9672> <0DA7> <9684> <0DA8> <96C1> <0DA9> <96C5> <0DAA> <96C4> <0DAD> <96EF> <0DAE> <96F2> <0DAF> <97CC> <0DB2> <9808> <0DB3> <98E7> <0DB4> <98EA> <0DB5> <98EF> <0DB6> <98E9> <0DB7> <98F2> <0DB8> <98ED> <0DB9> <99AE> <0DBA> <99AD> <0DBB> <9EC3> <0DBC> <9ECD> <0DBD> <9ED1> <0DBE> <4E82> <0DBF> <50AD> <0DC0> <50B5> <0DC3> <50C5> <0DC4> <50BE> <0DC5> <50AC> <0DC6> <50B7> <0DC7> <50BB> <0DC8> <50AF> <0DC9> <50C7> <0DCA> <527F> <0DCB> <5277> <0DCC> <527D> <0DCD> <52DF> <0DCE> <52E6> <0DCF> <52E4> <0DD2> <532F> <0DD3> <55DF> <0DD4> <55E8> <0DD5> <55D3> <0DD6> <55E6> <0DD7> <55CE> <0DD8> <55DC> <0DD9> <55C7> <0DDA> <55D1> <0DDD> <55EF> <0DDE> <55DA> <0DDF> <55E1> <0DE2> <55E5> <0DE3> <55C9> <0DE6> <585E> <0DE7> <5851> <0DE8> <5858> <0DE9> <5857> <0DEA> <585A> <0DEB> <5854> <0DEC> <586B> <0DED> <584C> <0DEE> <586D> <0DEF> <584A> <0DF0> <5862> <0DF1> <5852> <0DF2> <584B> <0DF3> <5967> <0DF4> <5AC1> <0DF5> <5AC9> <0DF6> <5ACC> <0DF7> <5ABE> <0DF8> <5ABD> <0DF9> <5ABC> <0DFA> <5AB3> <0DFB> <5AC2> <0DFC> <5AB2> <0DFD> <5D69> <0DFE> <5D6F> <0DFF> <5E4C> <0E00> <5E79> <0E01> <5EC9> <0E02> <5EC8> <0E03> <5F12> <0E04> <5F59> <0E05> <5FAC> <0E06> <5FAE> <0E07> <611A> endbfchar 100 beginbfchar <0E08> <610F> <0E09> <6148> <0E0A> <611F> <0E0B> <60F3> <0E0C> <611B> <0E0D> <60F9> <0E0E> <6101> <0E0F> <6108> <0E10> <614E> <0E11> <614C> <0E12> <6144> <0E13> <614D> <0E14> <613E> <0E15> <6134> <0E16> <6127> <0E17> <610D> <0E18> <6106> <0E19> <6137> <0E1C> <6413> <0E1D> <643E> <0E1E> <641E> <0E1F> <642A> <0E20> <642D> <0E21> <643D> <0E22> <642C> <0E23> <640F> <0E24> <641C> <0E25> <6414> <0E26> <640D> <0E27> <6436> <0E2A> <6406> <0E2B> <656C> <0E2C> <659F> <0E2D> <65B0> <0E2E> <6697> <0E2F> <6689> <0E32> <6696> <0E33> <6684> <0E34> <6698> <0E35> <668D> <0E36> <6703> <0E37> <6994> <0E38> <696D> <0E39> <695A> <0E3A> <6977> <0E3B> <6960> <0E3C> <6954> <0E3D> <6975> <0E3E> <6930> <0E3F> <6982> <0E40> <694A> <0E41> <6968> <0E42> <696B> <0E43> <695E> <0E44> <6953> <0E45> <6979> <0E46> <6986> <0E47> <695D> <0E48> <6963> <0E49> <695B> <0E4A> <6B47> <0E4B> <6B72> <0E4C> <6BC0> <0E4D> <6BBF> <0E4E> <6BD3> <0E4F> <6BFD> <0E50> <6EA2> <0E51> <6EAF> <0E52> <6ED3> <0E53> <6EB6> <0E54> <6EC2> <0E55> <6E90> <0E56> <6E9D> <0E57> <6EC7> <0E58> <6EC5> <0E59> <6EA5> <0E5A> <6E98> <0E5B> <6EBC> <0E5C> <6EBA> <0E5D> <6EAB> <0E5E> <6ED1> <0E5F> <6E96> <0E60> <6E9C> <0E61> <6EC4> <0E62> <6ED4> <0E63> <6EAA> <0E64> <6EA7> <0E65> <6EB4> <0E66> <714E> <0E67> <7159> <0E68> <7169> <0E69> <7164> <0E6A> <7149> <0E6B> <7167> <0E6C> <715C> <0E6D> <716C> <0E6E> <7166> <0E6F> <714C> <0E70> <7165> <0E71> <715E> endbfchar 100 beginbfchar <0E72> <7146> <0E73> <7168> <0E74> <7156> <0E75> <723A> <0E76> <7252> <0E77> <7337> <0E78> <7345> <0E79> <733F> <0E7A> <733E> <0E7B> <746F> <0E7C> <745A> <0E7D> <7455> <0E7E> <745F> <0E7F> <745E> <0E80> <7441> <0E81> <743F> <0E82> <7459> <0E85> <7576> <0E86> <7578> <0E87> <7600> <0E88> <75F0> <0E89> <7601> <0E8A> <75F2> <0E8B> <75F1> <0E8C> <75FA> <0E8D> <75FF> <0E8E> <75F4> <0E8F> <75F3> <0E92> <775B> <0E93> <776B> <0E94> <7766> <0E95> <775E> <0E96> <7763> <0E97> <7779> <0E98> <776A> <0E99> <776C> <0E9A> <775C> <0E9B> <7765> <0E9C> <7768> <0E9D> <7762> <0E9E> <77EE> <0E9F> <788E> <0EA0> <78B0> <0EA3> <788C> <0EA4> <7889> <0EA5> <787C> <0EA6> <7891> <0EA7> <7893> <0EA8> <787F> <0EA9> <797A> <0EAA> <797F> <0EAB> <7981> <0EAC> <842C> <0EAD> <79BD> <0EAE> <7A1C> <0EAF> <7A1A> <0EB0> <7A20> <0EB1> <7A14> <0EB2> <7A1F> <0EB3> <7A1E> <0EB6> <7B77> <0EB7> <7BC0> <0EB8> <7B60> <0EB9> <7B6E> <0EBA> <7B67> <0EBB> <7CB1> <0EBC> <7CB3> <0EBD> <7CB5> <0EBE> <7D93> <0EBF> <7D79> <0EC0> <7D91> <0EC1> <7D81> <0EC2> <7D8F> <0EC3> <7D5B> <0EC4> <7F6E> <0EC7> <7F72> <0EC8> <7FA9> <0EC9> <7FA8> <0ECA> <7FA4> <0ECB> <8056> <0ECC> <8058> <0ECD> <8086> <0ECE> <8084> <0ECF> <8171> <0ED0> <8170> <0ED1> <8178> <0ED2> <8165> <0ED3> <816E> <0ED4> <8173> <0ED5> <816B> <0ED8> <8166> <0ED9> <8205> <0EDA> <8247> <0EDB> <8482> <0EDC> <8477> <0EDD> <843D> <0EDE> <8431> <0EDF> <8475> <0EE0> <8466> <0EE1> <846B> endbfchar 100 beginbfchar <0EE2> <8449> <0EE3> <846C> <0EE4> <845B> <0EE5> <843C> <0EE6> <8435> <0EE7> <8461> <0EE8> <8463> <0EE9> <8469> <0EEA> <846D> <0EEB> <8446> <0EEC> <865E> <0EED> <865C> <0EEE> <865F> <0EEF> <86F9> <0EF0> <8713> <0EF1> <8708> <0EF2> <8707> <0EF3> <8700> <0EF4> <86FE> <0EF5> <86FB> <0EF8> <8706> <0EF9> <870A> <0EFA> <8859> <0EFB> <88DF> <0EFC> <88D4> <0EFD> <88D9> <0EFE> <88DC> <0EFF> <88D8> <0F00> <88DD> <0F01> <88E1> <0F02> <88CA> <0F03> <88D5> <0F04> <88D2> <0F05> <899C> <0F06> <89E3> <0F07> <8A6B> <0F0A> <8A66> <0F0B> <8A69> <0F0C> <8A70> <0F0D> <8A87> <0F0E> <8A7C> <0F0F> <8A63> <0F10> <8AA0> <0F11> <8A71> <0F12> <8A85> <0F13> <8A6D> <0F14> <8A62> <0F15> <8A6E> <0F16> <8A6C> <0F17> <8A79> <0F18> <8A7B> <0F19> <8A3E> <0F1A> <8A68> <0F1B> <8C62> <0F1C> <8C8A> <0F1D> <8C89> <0F1E> <8CCA> <0F21> <8CC4> <0F22> <8CB2> <0F23> <8CC3> <0F24> <8CC2> <0F25> <8CC5> <0F26> <8DE1> <0F27> <8DDF> <0F28> <8DE8> <0F29> <8DEF> <0F2A> <8DF3> <0F2B> <8DFA> <0F2C> <8DEA> <0F2D> <8DE4> <0F2E> <8DE6> <0F2F> <8EB2> <0F30> <8F03> <0F31> <8F09> <0F32> <8EFE> <0F33> <8F0A> <0F34> <8F9F> <0F35> <8FB2> <0F36> <904B> <0F37> <904A> <0F38> <9053> <0F39> <9042> <0F3A> <9054> <0F3B> <903C> <0F3C> <9055> <0F3D> <9050> <0F3E> <9047> <0F3F> <904F> <0F40> <904E> <0F41> <904D> <0F42> <9051> <0F43> <903E> <0F44> <9041> <0F45> <9112> <0F46> <9117> <0F47> <916C> <0F48> <916A> <0F49> <9169> <0F4A> <91C9> <0F4B> <9237> endbfchar 100 beginbfchar <0F4C> <9257> <0F4D> <9238> <0F4E> <923D> <0F4F> <9240> <0F50> <923E> <0F51> <925B> <0F52> <924B> <0F53> <9264> <0F54> <9251> <0F55> <9234> <0F56> <9249> <0F57> <924D> <0F58> <9245> <0F59> <9239> <0F5A> <923F> <0F5B> <925A> <0F5C> <9598> <0F5D> <9698> <0F60> <96CD> <0F61> <96CB> <0F64> <96F7> <0F65> <96FB> <0F66> <96F9> <0F67> <96F6> <0F68> <9756> <0F69> <9774> <0F6A> <9776> <0F6D> <9813> <0F6E> <980A> <0F6F> <9812> <0F70> <980C> <0F71> <98FC> <0F72> <98F4> <0F75> <99B3> <0F76> <99B1> <0F77> <99B4> <0F78> <9AE1> <0F79> <9CE9> <0F7A> <9E82> <0F7B> <9F0E> <0F7C> <9F13> <0F7D> <9F20> <0F7E> <50E7> <0F7F> <50EE> <0F80> <50E5> <0F81> <50D6> <0F82> <50ED> <0F83> <50DA> <0F84> <50D5> <0F85> <50CF> <0F86> <50D1> <0F87> <50F1> <0F88> <50CE> <0F89> <50E9> <0F8A> <5162> <0F8B> <51F3> <0F8C> <5283> <0F8D> <5282> <0F8E> <5331> <0F8F> <53AD> <0F90> <55FE> <0F91> <5600> <0F92> <561B> <0F93> <5617> <0F94> <55FD> <0F95> <5614> <0F96> <5606> <0F97> <5609> <0F9A> <55F7> <0F9B> <5616> <0F9C> <561F> <0F9D> <5608> <0F9E> <5610> <0F9F> <55F6> <0FA0> <5718> <0FA1> <5716> <0FA2> <5875> <0FA3> <587E> <0FA4> <5883> <0FA5> <5893> <0FA6> <588A> <0FA7> <5879> <0FA8> <5885> <0FA9> <587D> <0FAA> <58FD> <0FAB> <5925> <0FAC> <5922> <0FAD> <5924> <0FAE> <596A> <0FAF> <5969> <0FB0> <5AE1> <0FB1> <5AE6> <0FB2> <5AE9> <0FB3> <5AD7> <0FB4> <5AD6> <0FB5> <5AD8> <0FB6> <5AE3> <0FB7> <5B75> <0FB8> <5BDE> <0FB9> <5BE7> endbfchar 100 beginbfchar <0FBA> <5BE1> <0FBD> <5BE8> <0FBE> <5BE2> <0FBF> <5BE4> <0FC0> <5BDF> <0FC1> <5C0D> <0FC2> <5C62> <0FC3> <5D84> <0FC4> <5D87> <0FC5> <5E5B> <0FC6> <5E63> <0FC7> <5E55> <0FC8> <5E57> <0FC9> <5E54> <0FCA> <5ED3> <0FCB> <5ED6> <0FCC> <5F0A> <0FCD> <5F46> <0FCE> <5F70> <0FCF> <5FB9> <0FD0> <6147> <0FD1> <613F> <0FD2> <614B> <0FD3> <6177> <0FD6> <615F> <0FD7> <615A> <0FD8> <6158> <0FD9> <6175> <0FDA> <622A> <0FDB> <6487> <0FDC> <6458> <0FDD> <6454> <0FDE> <64A4> <0FDF> <6478> <0FE0> <645F> <0FE1> <647A> <0FE2> <6451> <0FE3> <6467> <0FE4> <6434> <0FE5> <646D> <0FE6> <647B> <0FE7> <6572> <0FE8> <65A1> <0FE9> <65D7> <0FEA> <65D6> <0FEB> <66A2> <0FEC> <66A8> <0FED> <669D> <0FEE> <699C> <0FEF> <69A8> <0FF0> <6995> <0FF1> <69C1> <0FF2> <69AE> <0FF3> <69D3> <0FF4> <69CB> <0FF5> <699B> <0FF6> <69B7> <0FF7> <69BB> <0FF8> <69AB> <0FF9> <69B4> <0FFA> <69D0> <0FFB> <69CD> <0FFC> <69AD> <0FFD> <69CC> <0FFE> <69A6> <0FFF> <69C3> <1000> <69A3> <1001> <6B49> <1002> <6B4C> <1003> <6C33> <1004> <6F33> <1005> <6F14> <1006> <6EFE> <1007> <6F13> <1008> <6EF4> <1009> <6F29> <100A> <6F3E> <100B> <6F20> <100C> <6F2C> <100D> <6F0F> <100E> <6F02> <100F> <6F22> <1010> <6EFF> <1011> <6EEF> <1012> <6F06> <1013> <6F31> <1014> <6F38> <1015> <6F32> <1016> <6F23> <1017> <6F15> <1018> <6F2B> <1019> <6F2F> <101A> <6F88> <101B> <6F2A> <101C> <6EEC> <101D> <6F01> <101E> <6EF2> <101F> <6ECC> <1020> <6EF7> <1021> <7194> endbfchar 100 beginbfchar <1022> <7199> <1023> <717D> <1024> <718A> <1025> <7184> <1026> <7192> <1027> <723E> <1028> <7292> <1029> <7296> <102A> <7344> <102B> <7350> <102C> <7464> <102D> <7463> <102E> <746A> <102F> <7470> <1030> <746D> <1031> <7504> <1032> <7591> <1033> <7627> <1034> <760D> <1035> <760B> <1036> <7609> <1037> <7613> <1038> <76E1> <1039> <76E3> <103A> <7784> <103B> <777D> <103C> <777F> <103D> <7761> <103E> <78C1> <103F> <789F> <1040> <78A7> <1041> <78B3> <1042> <78A9> <1043> <78A3> <1046> <798D> <1047> <7A2E> <1048> <7A31> <1049> <7AAA> <104A> <7AA9> <104B> <7AED> <104C> <7AEF> <104D> <7BA1> <104E> <7B95> <104F> <7B8B> <1050> <7B75> <1051> <7B97> <1052> <7B9D> <1053> <7B94> <1054> <7B8F> <1055> <7BB8> <1056> <7B87> <1057> <7B84> <1058> <7CB9> <105B> <7DBB> <105C> <7DB0> <105D> <7D9C> <1060> <7DA0> <1061> <7DCA> <1062> <7DB4> <1063> <7DB2> <1064> <7DB1> <1065> <7DBA> <1066> <7DA2> <1067> <7DBF> <1068> <7DB5> <1069> <7DB8> <106A> <7DAD> <106B> <7DD2> <106C> <7DC7> <106D> <7DAC> <106E> <7F70> <1071> <7FDF> <1072> <805E> <1073> <805A> <1074> <8087> <1075> <8150> <1076> <8180> <1077> <818F> <1078> <8188> <1079> <818A> <107A> <817F> <107B> <8182> <107C> <81E7> <107D> <81FA> <107E> <8207> <107F> <8214> <1080> <821E> <1081> <824B> <1082> <84C9> <1083> <84BF> <1084> <84C6> <1085> <84C4> <1086> <8499> <1087> <849E> <1088> <84B2> <1089> <849C> <108A> <84CB> <108B> <84B8> <108C> <84C0> <108D> <84D3> endbfchar 100 beginbfchar <108E> <8490> <108F> <84BC> <1090> <84D1> <1091> <84CA> <1092> <873F> <1093> <871C> <1094> <873B> <1095> <8722> <1096> <8725> <1097> <8734> <1098> <8718> <1099> <8755> <109A> <8737> <109B> <8729> <109C> <88F3> <109D> <8902> <109E> <88F4> <109F> <88F9> <10A0> <88F8> <10A1> <88FD> <10A2> <88E8> <10A3> <891A> <10A4> <88EF> <10A5> <8AA6> <10A6> <8A8C> <10A7> <8A9E> <10A8> <8AA3> <10A9> <8A8D> <10AA> <8AA1> <10AB> <8A93> <10AC> <8AA4> <10AD> <8AAA> <10AE> <8AA5> <10AF> <8AA8> <10B0> <8A98> <10B1> <8A91> <10B2> <8A9A> <10B3> <8AA7> <10B4> <8C6A> <10B5> <8C8D> <10B6> <8C8C> <10B7> <8CD3> <10BA> <8D6B> <10BB> <8D99> <10BC> <8D95> <10BD> <8DFC> <10BE> <8F14> <10BF> <8F12> <10C0> <8F15> <10C1> <8F13> <10C2> <8FA3> <10C3> <9060> <10C4> <9058> <10C5> <905C> <10C6> <9063> <10C7> <9059> <10C8> <905E> <10C9> <9062> <10CA> <905D> <10CB> <905B> <10CC> <9119> <10CD> <9118> <10CE> <911E> <10CF> <9175> <10D0> <9178> <10D1> <9177> <10D2> <9174> <10D3> <9278> <10D4> <92AC> <10D5> <9280> <10D6> <9285> <10D7> <9298> <10D8> <9296> <10D9> <927B> <10DA> <9293> <10DB> <929C> <10DC> <92A8> <10DD> <927C> <10DE> <9291> <10DF> <95A1> <10E2> <95A3> <10E3> <95A5> <10E4> <95A4> <10E5> <9699> <10E6> <969C> <10E7> <969B> <10E8> <96CC> <10E9> <96D2> <10EA> <9700> <10EB> <977C> <10EC> <9785> <10ED> <97F6> <10F0> <98AF> <10F1> <98B1> <10F2> <9903> <10F3> <9905> <10F4> <990C> <10F5> <9909> <10F6> <99C1> <10F9> <9AE6> endbfchar 100 beginbfchar <10FC> <9CF4> <10FD> <9CF6> <10FE> <9CF3> <10FF> <9EBC> <1100> <9F3B> <1101> <9F4A> <1102> <5104> <1103> <5100> <1104> <50FB> <1105> <50F5> <1106> <50F9> <1107> <5102> <110A> <5105> <110B> <51DC> <110F> <528D> <1110> <528A> <1111> <52F0> <1112> <53B2> <1113> <562E> <1114> <563B> <1115> <5639> <1116> <5632> <1117> <563F> <1118> <5634> <1119> <5629> <111A> <5653> <111B> <564E> <111C> <5657> <111D> <5674> <111E> <5636> <1121> <5880> <1122> <589F> <1123> <589E> <1124> <58B3> <1125> <589C> <1126> <58AE> <1127> <58A9> <1128> <58A6> <1129> <596D> <112A> <5B09> <112B> <5AFB> <112C> <5B0B> <112D> <5AF5> <112E> <5B0C> <112F> <5B08> <1130> <5BEE> <1131> <5BEC> <1132> <5BE9> <1133> <5BEB> <1136> <5D9D> <1137> <5D94> <1138> <5E62> <1139> <5E5F> <113A> <5E61> <113B> <5EE2> <113C> <5EDA> <113D> <5EDF> <113E> <5EDD> <113F> <5EE3> <1140> <5EE0> <1141> <5F48> <1142> <5F71> <1143> <5FB7> <1144> <5FB5> <1145> <6176> <1146> <6167> <1147> <616E> <1148> <615D> <1149> <6155> <114A> <6182> <114B> <617C> <114C> <6170> <114D> <616B> <114E> <617E> <114F> <61A7> <1150> <6190> <1151> <61AB> <1152> <618E> <1153> <61AC> <1154> <619A> <1155> <61A4> <1156> <6194> <1157> <61AE> <1158> <622E> <1159> <6469> <115A> <646F> <115B> <6479> <115C> <649E> <115D> <64B2> <115E> <6488> <115F> <6490> <1160> <64B0> <1161> <64A5> <1162> <6493> <1163> <6495> <1164> <64A9> <1165> <6492> <1166> <64AE> <1167> <64AD> <1168> <64AB> endbfchar 100 beginbfchar <1169> <649A> <116A> <64AC> <116B> <6499> <116C> <64A2> <116D> <64B3> <116E> <6575> <1171> <66AE> <1172> <66AB> <1173> <66B4> <1174> <66B1> <1175> <6A23> <1176> <6A1F> <1177> <69E8> <1178> <6A01> <1179> <6A1E> <117A> <6A19> <117B> <69FD> <117C> <6A21> <117D> <6A13> <117E> <6A0A> <117F> <69F3> <1180> <6A02> <1181> <6A05> <1182> <69ED> <1183> <6A11> <1184> <6B50> <1185> <6B4E> <1186> <6BA4> <1189> <6F3F> <118A> <6F7C> <118B> <6F84> <118C> <6F51> <118D> <6F66> <118E> <6F54> <118F> <6F86> <1190> <6F6D> <1191> <6F5B> <1192> <6F78> <1193> <6F6E> <1194> <6F8E> <1195> <6F7A> <1196> <6F70> <1197> <6F64> <1198> <6F97> <1199> <6F58> <119A> <6ED5> <119B> <6F6F> <119C> <6F60> <119D> <6F5F> <119E> <719F> <119F> <71AC> <11A0> <71B1> <11A1> <71A8> <11A2> <7256> <11A3> <729B> <11A4> <734E> <11A5> <7357> <11A6> <7469> <11A7> <748B> <11A8> <7483> <11A9> <747E> <11AA> <7480> <11AB> <757F> <11AC> <7620> <11AD> <7629> <11AE> <761F> <11AF> <7624> <11B0> <7626> <11B3> <769A> <11B4> <76BA> <11B5> <76E4> <11B6> <778E> <11B7> <7787> <11B8> <778C> <11B9> <7791> <11BA> <778B> <11BB> <78CB> <11BC> <78C5> <11BD> <78BA> <11BE> <78CA> <11BF> <78BE> <11C0> <78D5> <11C1> <78BC> <11C2> <78D0> <11C3> <7A3F> <11C4> <7A3C> <11C5> <7A40> <11C6> <7A3D> <11C7> <7A37> <11C8> <7A3B> <11C9> <7AAF> <11CA> <7AAE> <11CB> <7BAD> <11CC> <7BB1> <11CD> <7BC4> <11CE> <7BB4> <11D1> <7BC1> <11D2> <7BA0> <11D3> <7BCC> <11D4> <7CCA> endbfchar 100 beginbfchar <11D5> <7DE0> <11D6> <7DF4> <11D7> <7DEF> <11D8> <7DFB> <11D9> <7DD8> <11DA> <7DEC> <11DB> <7DDD> <11DC> <7DE8> <11DD> <7DE3> <11DE> <7DDA> <11DF> <7DDE> <11E0> <7DE9> <11E1> <7D9E> <11E2> <7DD9> <11E3> <7DF2> <11E4> <7DF9> <11E5> <7F75> <11E6> <7F77> <11E7> <7FAF> <11E8> <7FE9> <11E9> <8026> <11ED> <81A0> <11EE> <819A> <11EF> <8198> <11F0> <8517> <11F1> <853D> <11F2> <851A> <11F3> <84EE> <11F6> <8513> <11F7> <8511> <11F8> <8523> <11F9> <8521> <11FA> <8514> <11FB> <84EC> <11FC> <8525> <11FD> <84FF> <11FE> <8506> <11FF> <8782> <1200> <8774> <1201> <8776> <1202> <8760> <1203> <8766> <1204> <8778> <1205> <8768> <1206> <8759> <1207> <8757> <1208> <874C> <1209> <8753> <120A> <885B> <120B> <885D> <120C> <8910> <120D> <8907> <1210> <8915> <1211> <890A> <1212> <8ABC> <1213> <8AD2> <1214> <8AC7> <1215> <8AC4> <1216> <8A95> <1217> <8ACB> <1218> <8AF8> <1219> <8AB2> <121A> <8AC9> <121B> <8AC2> <121C> <8ABF> <121D> <8AB0> <121E> <8AD6> <121F> <8ACD> <1220> <8AB6> <1221> <8AB9> <1222> <8ADB> <1223> <8C4C> <1224> <8C4E> <1225> <8C6C> <1226> <8CE0> <1227> <8CDE> <1228> <8CE6> <1229> <8CE4> <122E> <8CDC> <122F> <8CEA> <1230> <8CE1> <1231> <8D6D> <1232> <8D9F> <1233> <8DA3> <1234> <8E2B> <1235> <8E10> <1236> <8E1D> <1237> <8E22> <1238> <8E0F> <1239> <8E29> <123A> <8E1F> <123B> <8E21> <123C> <8E1E> <123D> <8EBA> <123E> <8F1D> <123F> <8F1B> <1240> <8F1F> <1241> <8F29> <1242> <8F26> <1243> <8F2A> endbfchar 100 beginbfchar <1244> <8F1C> <1245> <8F1E> <1246> <8F25> <1247> <9069> <1248> <906E> <1249> <9068> <124A> <906D> <124B> <9077> <124C> <9130> <124D> <912D> <124E> <9127> <124F> <9131> <1250> <9187> <1251> <9189> <1252> <918B> <1253> <9183> <1254> <92C5> <1255> <92BB> <1256> <92B7> <1257> <92EA> <1258> <92E4> <1259> <92C1> <125A> <92B3> <125B> <92BC> <125C> <92D2> <125D> <92C7> <125E> <92F0> <125F> <92B2> <1260> <95AD> <1261> <95B1> <1262> <9704> <1265> <9709> <1266> <9760> <1267> <978D> <1268> <978B> <1269> <978F> <126A> <9821> <126B> <982B> <126C> <981C> <126D> <98B3> <126E> <990A> <126F> <9913> <1270> <9912> <1271> <9918> <1272> <99DD> <1273> <99D0> <1274> <99DF> <1275> <99DB> <1276> <99D1> <1277> <99D5> <1278> <99D2> <1279> <99D9> <127A> <9AB7> <127D> <9B27> <127E> <9B45> <127F> <9B44> <1280> <9B77> <1281> <9B6F> <1282> <9D06> <1283> <9D09> <1284> <9D03> <1285> <9EA9> <1286> <9EBE> <1287> <9ECE> <1288> <58A8> <1289> <9F52> <128A> <5112> <128B> <5118> <128C> <5114> <128D> <5110> <128E> <5115> <128F> <5180> <1290> <51AA> <1291> <51DD> <1292> <5291> <1293> <5293> <1294> <52F3> <1295> <5659> <1296> <566B> <1297> <5679> <1298> <5669> <1299> <5664> <129A> <5678> <129B> <566A> <129C> <5668> <129D> <5665> <129E> <5671> <129F> <566F> <12A0> <566C> <12A1> <5662> <12A2> <5676> <12A3> <58C1> <12A4> <58BE> <12A5> <58C7> <12A6> <58C5> <12A7> <596E> <12A8> <5B1D> <12A9> <5B34> <12AA> <5B78> <12AB> <5BF0> endbfchar 100 beginbfchar <12AC> <5C0E> <12AD> <5F4A> <12AE> <61B2> <12AF> <6191> <12B0> <61A9> <12B1> <618A> <12B2> <61CD> <12B3> <61B6> <12B4> <61BE> <12B5> <61CA> <12B6> <61C8> <12B7> <6230> <12B8> <64C5> <12B9> <64C1> <12BA> <64CB> <12BD> <64DA> <12BE> <64C4> <12BF> <64C7> <12C0> <64C2> <12C1> <64CD> <12C2> <64BF> <12C3> <64D2> <12C4> <64D4> <12C5> <64BE> <12C6> <6574> <12C7> <66C6> <12C8> <66C9> <12C9> <66B9> <12CA> <66C4> <12CB> <66C7> <12CC> <66B8> <12CD> <6A3D> <12CE> <6A38> <12CF> <6A3A> <12D0> <6A59> <12D1> <6A6B> <12D2> <6A58> <12D3> <6A39> <12D4> <6A44> <12D5> <6A62> <12D6> <6A61> <12D7> <6A4B> <12D8> <6A47> <12D9> <6A35> <12DA> <6A5F> <12DB> <6A48> <12DC> <6B59> <12DD> <6B77> <12DE> <6C05> <12DF> <6FC2> <12E0> <6FB1> <12E1> <6FA1> <12E2> <6FC3> <12E3> <6FA4> <12E4> <6FC1> <12E5> <6FA7> <12E6> <6FB3> <12E7> <6FC0> <12E8> <6FB9> <12E9> <6FB6> <12EA> <6FA6> <12EB> <6FA0> <12EC> <6FB4> <12ED> <71BE> <12EE> <71C9> <12EF> <71D0> <12F0> <71D2> <12F1> <71C8> <12F2> <71D5> <12F3> <71B9> <12F4> <71CE> <12F5> <71D9> <12F6> <71DC> <12F9> <7368> <12FA> <749C> <12FB> <74A3> <12FC> <7498> <12FD> <749F> <12FE> <749E> <12FF> <74E2> <1302> <7634> <1303> <7638> <1304> <763A> <1305> <76E7> <1306> <76E5> <1307> <77A0> <130A> <77A5> <130B> <78E8> <130C> <78DA> <130D> <78EC> <130E> <78E7> <130F> <79A6> <1312> <7A46> <1313> <7A4C> <1314> <7A4B> <1315> <7ABA> <1316> <7BD9> <1317> <7C11> <1318> <7BC9> <1319> <7BE4> endbfchar 100 beginbfchar <131A> <7BDB> <131B> <7BE1> <131C> <7BE9> <131D> <7BE6> <1320> <7E0A> <1321> <7E11> <1322> <7E08> <1323> <7E1B> <1324> <7E23> <1325> <7E1E> <1326> <7E1D> <1327> <7E09> <1328> <7E10> <1329> <7F79> <132A> <7FB2> <132D> <7FEE> <132E> <8028> <132F> <81B3> <1330> <81A9> <1331> <81A8> <1332> <81FB> <1333> <8208> <1336> <854A> <1337> <8559> <1338> <8548> <133B> <8543> <133C> <8549> <133D> <856D> <133E> <856A> <133F> <855E> <1340> <8783> <1341> <879F> <1342> <879E> <1343> <87A2> <1344> <878D> <1345> <8861> <1346> <892A> <1347> <8932> <1348> <8925> <1349> <892B> <134A> <8921> <134B> <89AA> <134C> <89A6> <134D> <8AE6> <134E> <8AFA> <134F> <8AEB> <1350> <8AF1> <1351> <8B00> <1352> <8ADC> <1353> <8AE7> <1354> <8AEE> <1355> <8AFE> <1358> <8AF7> <1359> <8AED> <135A> <8AF3> <135B> <8AF6> <135C> <8AFC> <135D> <8C6B> <135E> <8C6D> <135F> <8C93> <1360> <8CF4> <1361> <8E44> <1362> <8E31> <1363> <8E34> <1364> <8E42> <1365> <8E39> <1366> <8E35> <1367> <8F3B> <1368> <8F2F> <1369> <8F38> <136A> <8F33> <136B> <8FA8> <136C> <8FA6> <136D> <9075> <136E> <9074> <136F> <9078> <1370> <9072> <1371> <907C> <1372> <907A> <1373> <9134> <1374> <9192> <1375> <9320> <1376> <9336> <1377> <92F8> <1378> <9333> <1379> <932F> <137A> <9322> <137B> <92FC> <137C> <932B> <137D> <9304> <137E> <931A> <137F> <9310> <1380> <9326> <1381> <9321> <1382> <9315> <1383> <932E> <1384> <9319> <1385> <95BB> <1388> <96AA> <1389> <96D5> endbfchar 100 beginbfchar <138A> <970E> <138B> <9711> <138C> <9716> <138D> <970D> <138E> <9713> <138F> <970F> <1392> <9766> <1393> <9798> <1394> <9830> <1395> <9838> <1396> <983B> <1397> <9837> <1398> <982D> <1399> <9839> <139A> <9824> <139B> <9910> <139C> <9928> <139D> <991E> <139E> <991B> <139F> <9921> <13A0> <991A> <13A1> <99ED> <13A2> <99E2> <13A3> <99F1> <13A4> <9AB8> <13A5> <9ABC> <13A6> <9AFB> <13A7> <9AED> <13A8> <9B28> <13A9> <9B91> <13AA> <9D15> <13AB> <9D23> <13AC> <9D26> <13AD> <9D28> <13AE> <9D12> <13AF> <9D1B> <13B0> <9ED8> <13B1> <9ED4> <13B2> <9F8D> <13B3> <9F9C> <13B4> <512A> <13B5> <511F> <13B6> <5121> <13B7> <5132> <13B8> <52F5> <13B9> <568E> <13BA> <5680> <13BB> <5690> <13BC> <5685> <13BD> <5687> <13BE> <568F> <13BF> <58D5> <13C0> <58D3> <13C1> <58D1> <13C2> <58CE> <13C3> <5B30> <13C4> <5B2A> <13C5> <5B24> <13C6> <5B7A> <13C7> <5C37> <13C8> <5C68> <13C9> <5DBC> <13CA> <5DBA> <13CB> <5DBD> <13CC> <5DB8> <13CD> <5E6B> <13CE> <5F4C> <13CF> <5FBD> <13D0> <61C9> <13D1> <61C2> <13D2> <61C7> <13D3> <61E6> <13D4> <61CB> <13D5> <6232> <13D6> <6234> <13D7> <64CE> <13D8> <64CA> <13D9> <64D8> <13DA> <64E0> <13DB> <64F0> <13DC> <64E6> <13DD> <64EC> <13DE> <64F1> <13DF> <64E2> <13E0> <64ED> <13E3> <66D9> <13E4> <66D6> <13E5> <6A80> <13E6> <6A94> <13E7> <6A84> <13E8> <6AA2> <13E9> <6A9C> <13EA> <6ADB> <13EB> <6AA3> <13EC> <6A7E> <13ED> <6A97> <13EE> <6A90> <13EF> <6AA0> <13F0> <6B5C> <13F1> <6BAE> endbfchar 100 beginbfchar <13F2> <6BDA> <13F3> <6C08> <13F4> <6FD8> <13F5> <6FF1> <13F8> <6FDB> <13F9> <6FE4> <13FA> <6FEB> <13FB> <6FEF> <13FC> <6F80> <13FD> <6FEC> <13FE> <6FE1> <13FF> <6FE9> <1400> <6FD5> <1401> <6FEE> <1402> <6FF0> <1403> <71E7> <1404> <71DF> <1405> <71EE> <1406> <71E6> <1407> <71E5> <1408> <71ED> <1409> <71EC> <140A> <71F4> <140B> <71E0> <140C> <7235> <140D> <7246> <140E> <7370> <140F> <7372> <1410> <74A9> <1411> <74B0> <1412> <74A6> <1413> <74A8> <1414> <7646> <1415> <7642> <1416> <764C> <1417> <76EA> <1418> <77B3> <1419> <77AA> <141A> <77B0> <141B> <77AC> <141C> <77A7> <141D> <77AD> <141E> <77EF> <141F> <78F7> <1420> <78FA> <1421> <78F4> <1422> <78EF> <1423> <7901> <1424> <79A7> <1425> <79AA> <1426> <7A57> <1427> <7ABF> <1428> <7C07> <1429> <7C0D> <142A> <7BFE> <142B> <7BF7> <142C> <7C0C> <142D> <7BE0> <142E> <7CE0> <142F> <7CDC> <1430> <7CDE> <1431> <7CE2> <1432> <7CDF> <1433> <7CD9> <1434> <7CDD> <1435> <7E2E> <1436> <7E3E> <1437> <7E46> <1438> <7E37> <1439> <7E32> <143A> <7E43> <143B> <7E2B> <143C> <7E3D> <143D> <7E31> <143E> <7E45> <143F> <7E41> <1440> <7E34> <1441> <7E39> <1442> <7E48> <1443> <7E35> <1444> <7E3F> <1445> <7E2F> <1446> <7F44> <1447> <7FF3> <1448> <7FFC> <144B> <8070> <144C> <806F> <144D> <8073> <144E> <81C6> <144F> <81C3> <1450> <81BA> <1451> <81C2> <1452> <81C0> <1453> <81BF> <1454> <81BD> <1455> <81C9> <1456> <81BE> <1457> <81E8> <1458> <8209> <1459> <8271> endbfchar 100 beginbfchar <145A> <85AA> <145B> <8584> <145C> <857E> <145D> <859C> <145E> <8591> <145F> <8594> <1460> <85AF> <1461> <859B> <1462> <8587> <1463> <85A8> <1464> <858A> <1465> <85A6> <1466> <8667> <1467> <87C0> <1468> <87D1> <1469> <87B3> <146A> <87D2> <146B> <87C6> <146C> <87AB> <146D> <87BB> <146E> <87BA> <146F> <87C8> <1470> <87CB> <1471> <893B> <1472> <8936> <1473> <8944> <1474> <8938> <1475> <893D> <1476> <89AC> <1477> <8B0E> <1478> <8B17> <1479> <8B19> <147A> <8B1B> <147B> <8B0A> <147C> <8B20> <147D> <8B1D> <147E> <8B04> <147F> <8B10> <1480> <8C41> <1481> <8C3F> <1482> <8C73> <1483> <8CFA> <1484> <8CFD> <1485> <8CFC> <1486> <8CF8> <1487> <8CFB> <1488> <8DA8> <1489> <8E49> <148A> <8E4B> <148B> <8E48> <148C> <8E4A> <148D> <8F44> <148E> <8F3E> <148F> <8F42> <1490> <8F45> <1491> <8F3F> <1492> <907F> <1493> <907D> <1494> <9084> <1497> <9080> <1498> <9139> <1499> <91A3> <149A> <919E> <149B> <919C> <149C> <934D> <149D> <9382> <149E> <9328> <149F> <9375> <14A0> <934A> <14A1> <9365> <14A2> <934B> <14A3> <9318> <14A4> <937E> <14A5> <936C> <14A6> <935B> <14A7> <9370> <14A8> <935A> <14A9> <9354> <14AD> <95C8> <14AE> <95C6> <14AF> <96B1> <14B0> <96B8> <14B1> <96D6> <14B2> <971C> <14B3> <971E> <14B4> <97A0> <14B5> <97D3> <14B6> <9846> <14B7> <98B6> <14B8> <9935> <14B9> <9A01> <14BA> <99FF> <14BB> <9BAE> <14BC> <9BAB> <14BD> <9BAA> <14BE> <9BAD> <14BF> <9D3B> <14C0> <9D3F> <14C1> <9E8B> <14C2> <9ECF> endbfchar 100 beginbfchar <14C3> <9EDE> <14C6> <9EDB> <14C7> <9F3E> <14C8> <9F4B> <14C9> <53E2> <14CA> <5695> <14CB> <56AE> <14CC> <58D9> <14CD> <58D8> <14CE> <5B38> <14CF> <5F5D> <14D0> <61E3> <14D1> <6233> <14D2> <64F4> <14D3> <64F2> <14D4> <64FE> <14D5> <6506> <14D8> <64F7> <14D9> <65B7> <14DA> <66DC> <14DB> <6726> <14DC> <6AB3> <14DD> <6AAC> <14DE> <6AC3> <14DF> <6ABB> <14E0> <6AB8> <14E1> <6AC2> <14E4> <6B5F> <14E5> <6B78> <14E6> <6BAF> <14E7> <7009> <14E8> <700B> <14E9> <6FFE> <14EA> <7006> <14EB> <6FFA> <14EC> <7011> <14ED> <700F> <14F0> <71FE> <14F1> <71F8> <14F2> <7377> <14F3> <7375> <14F4> <74A7> <14F5> <74BF> <14F6> <7515> <14F7> <7656> <14F8> <7658> <14F9> <7652> <14FA> <77BD> <14FB> <77BF> <14FE> <790E> <14FF> <79AE> <1502> <7A60> <1505> <7C2B> <1506> <7C27> <1507> <7C2A> <1508> <7C1E> <1509> <7C23> <150A> <7C21> <150B> <7CE7> <150E> <7E5E> <150F> <7E5A> <1510> <7E61> <1511> <7E52> <1512> <7E59> <1513> <7F48> <1514> <7FF9> <1515> <7FFB> <1516> <8077> <1517> <8076> <1518> <81CD> <1519> <81CF> <151A> <820A> <151B> <85CF> <151C> <85A9> <151D> <85CD> <151E> <85D0> <151F> <85C9> <1520> <85B0> <1521> <85BA> <1522> <85B9> <1523> <87EF> <1524> <87EC> <1525> <87F2> <1526> <87E0> <1527> <8986> <1528> <89B2> <1529> <89F4> <152A> <8B28> <152B> <8B39> <152C> <8B2C> <152D> <8B2B> <152E> <8C50> <152F> <8D05> <1530> <8E59> <1531> <8E63> <1532> <8E66> <1533> <8E64> <1534> <8E5F> <1535> <8E55> <1536> <8EC0> endbfchar 100 beginbfchar <1537> <8F49> <1538> <8F4D> <1539> <9087> <153A> <9083> <153B> <9088> <153E> <91D0> <153F> <9394> <1540> <938A> <1541> <9396> <1542> <93A2> <1543> <93B3> <1544> <93AE> <1545> <93AC> <1546> <93B0> <1547> <9398> <1548> <939A> <1549> <9397> <154A> <95D4> <154B> <95D6> <154C> <95D0> <154D> <95D5> <154E> <96E2> <154F> <96DC> <1550> <96D9> <1551> <96DB> <1552> <96DE> <1553> <9724> <1554> <97A3> <1555> <97A6> <1556> <97AD> <1557> <97F9> <1558> <984D> <1559> <984F> <155A> <984C> <155B> <984E> <155C> <9853> <155D> <98BA> <1560> <993D> <1561> <992E> <1562> <99A5> <1563> <9A0E> <1564> <9AC1> <1565> <9B03> <1566> <9B06> <1567> <9B4F> <1568> <9B4E> <1569> <9B4D> <156A> <9BCA> <156B> <9BC9> <156C> <9BFD> <156D> <9BC8> <156E> <9BC0> <156F> <9D51> <1570> <9D5D> <1571> <9D60> <1572> <9EE0> <1573> <9F15> <1574> <9F2C> <1575> <5133> <1576> <56A5> <1577> <56A8> <157A> <58E2> <157B> <5BF5> <157C> <9F90> <157D> <5EEC> <157E> <61F2> <157F> <61F7> <1580> <61F6> <1581> <61F5> <1582> <6500> <1583> <650F> <1584> <66E0> <1585> <66DD> <1586> <6AE5> <1587> <6ADD> <1588> <6ADA> <1589> <6AD3> <158A> <701B> <158B> <701F> <158C> <7028> <158D> <701A> <158E> <701D> <158F> <7015> <1590> <7018> <1591> <7206> <1592> <720D> <1593> <7258> <1594> <72A2> <1595> <7378> <1596> <737A> <1597> <74BD> <1598> <74CA> <1599> <74E3> <159A> <7587> <159B> <7586> <159C> <765F> <159D> <7661> <159E> <77C7> <159F> <7919> <15A0> <79B1> endbfchar 100 beginbfchar <15A1> <7A6B> <15A2> <7A69> <15A5> <7C38> <15A6> <7C3D> <15A7> <7C37> <15A8> <7C40> <15A9> <7E6B> <15AA> <7E6D> <15AB> <7E79> <15AE> <7E73> <15AF> <7F85> <15B0> <7FB6> <15B1> <7FB9> <15B2> <7FB8> <15B3> <81D8> <15B4> <85E9> <15B5> <85DD> <15B6> <85EA> <15B7> <85D5> <15BA> <85F7> <15BB> <87FB> <15BC> <8805> <15BD> <880D> <15BE> <87F9> <15BF> <87FE> <15C0> <8960> <15C1> <895F> <15C2> <8956> <15C3> <895E> <15C4> <8B41> <15C5> <8B5C> <15C6> <8B58> <15C7> <8B49> <15C8> <8B5A> <15CB> <8B46> <15CC> <8B59> <15CD> <8D08> <15CE> <8D0A> <15CF> <8E7C> <15D0> <8E72> <15D1> <8E87> <15D2> <8E76> <15D3> <8E6C> <15D4> <8E7A> <15D5> <8E74> <15D6> <8F54> <15D7> <8F4E> <15D8> <8FAD> <15DB> <91B1> <15DC> <91AE> <15DD> <93E1> <15DE> <93D1> <15DF> <93DF> <15E0> <93C3> <15E1> <93C8> <15E4> <93D6> <15E5> <93E2> <15E6> <93CD> <15E7> <93D8> <15E8> <93E4> <15E9> <93D7> <15EA> <93E8> <15EB> <95DC> <15EC> <96B4> <15ED> <96E3> <15EE> <972A> <15EF> <9727> <15F0> <9761> <15F1> <97DC> <15F2> <97FB> <15F3> <985E> <15F4> <9858> <15F5> <985B> <15F6> <98BC> <15F7> <9945> <15F8> <9949> <15F9> <9A16> <15FA> <9A19> <15FB> <9B0D> <15FC> <9BE8> <15FD> <9BE7> <15FE> <9BD6> <15FF> <9BDB> <1600> <9D89> <1601> <9D61> <1602> <9D72> <1603> <9D6A> <1604> <9D6C> <1605> <9E92> <1606> <9E97> <1607> <9E93> <1608> <9EB4> <1609> <52F8> <160A> <56B7> <160B> <56B6> <160C> <56B4> <160D> <56BC> <160E> <58E4> <160F> <5B40> <1610> <5B43> endbfchar 100 beginbfchar <1611> <5B7D> <1612> <5BF6> <1613> <5DC9> <1614> <61F8> <1615> <61FA> <1616> <6518> <1617> <6514> <1618> <6519> <1619> <66E6> <161A> <6727> <161B> <6AEC> <161C> <703E> <161D> <7030> <161E> <7032> <161F> <7210> <1620> <737B> <1621> <74CF> <1622> <7662> <1623> <7665> <1624> <7926> <1625> <792A> <1626> <792C> <1627> <792B> <1628> <7AC7> <1629> <7AF6> <162A> <7C4C> <162B> <7C43> <162C> <7C4D> <162F> <8FAE> <1630> <7E7D> <1631> <7E7C> <1632> <7E82> <1633> <7F4C> <1634> <8000> <1635> <81DA> <1636> <8266> <1637> <85FB> <1638> <85F9> <1639> <8611> <163A> <85FA> <163B> <8606> <163C> <860B> <163D> <8607> <163E> <860A> <1641> <8964> <1642> <89BA> <1643> <89F8> <1644> <8B70> <1645> <8B6C> <1646> <8B66> <1647> <8B6F> <1648> <8B5F> <1649> <8B6B> <164A> <8D0F> <164B> <8D0D> <164C> <8E89> <164D> <8E81> <164E> <8E85> <164F> <8E82> <1650> <91B4> <1651> <91CB> <1652> <9418> <1653> <9403> <1654> <93FD> <1655> <95E1> <1656> <9730> <1657> <98C4> <1658> <9952> <1659> <9951> <165A> <99A8> <165B> <9A2B> <165C> <9A30> <165D> <9A37> <165E> <9A35> <165F> <9C13> <1660> <9C0D> <1661> <9E79> <1662> <9EB5> <1663> <9EE8> <1664> <9F2F> <1665> <9F5F> <1666> <9F63> <1667> <9F61> <166A> <56C1> <166B> <56C0> <166C> <56C2> <166D> <5914> <166E> <5C6C> <166F> <5DCD> <1670> <61FC> <1671> <61FE> <1672> <651D> <1673> <651C> <1674> <6595> <1675> <66E9> <1676> <6AFB> <1677> <6B04> <1678> <6AFA> <1679> <6BB2> <167A> <704C> endbfchar 100 beginbfchar <167B> <721B> <167C> <72A7> <167D> <74D6> <167E> <74D4> <167F> <7669> <1680> <77D3> <1681> <7C50> <1682> <7E8F> <1683> <7E8C> <1684> <7FBC> <1685> <8617> <1686> <862D> <1687> <861A> <1688> <8823> <1689> <8822> <168A> <8821> <168B> <881F> <168C> <896A> <168D> <896C> <168E> <89BD> <168F> <8B74> <1690> <8B77> <1691> <8B7D> <1692> <8D13> <1693> <8E8A> <1694> <8E8D> <1695> <8E8B> <1696> <8F5F> <1697> <8FAF> <1698> <91BA> <1699> <942E> <169A> <9433> <169B> <9435> <169C> <943A> <169D> <9438> <169E> <9432> <169F> <942B> <16A0> <95E2> <16A3> <9732> <16A4> <97FF> <16A5> <9867> <16A6> <9865> <16A7> <9957> <16A8> <9A45> <16A9> <9A43> <16AA> <9A40> <16AB> <9A3E> <16AC> <9ACF> <16AD> <9B54> <16AE> <9B51> <16AF> <9C2D> <16B0> <9C25> <16B1> <9DAF> <16B2> <9DB4> <16B3> <9DC2> <16B4> <9DB8> <16B5> <9E9D> <16B6> <9EEF> <16B7> <9F19> <16B8> <9F5C> <16BB> <513C> <16BC> <513B> <16BD> <56C8> <16BE> <56CA> <16BF> <56C9> <16C0> <5B7F> <16C1> <5DD4> <16C2> <5DD2> <16C3> <5F4E> <16C4> <61FF> <16C5> <6524> <16C6> <6B0A> <16C7> <6B61> <16C8> <7051> <16C9> <7058> <16CA> <7380> <16CB> <74E4> <16CC> <758A> <16CD> <766E> <16CE> <766C> <16CF> <79B3> <16D0> <7C60> <16D1> <7C5F> <16D2> <807E> <16D3> <807D> <16D4> <81DF> <16D5> <8972> <16D6> <896F> <16D7> <89FC> <16D8> <8B80> <16DB> <8E91> <16DC> <8E93> <16DD> <8F61> <16DE> <9148> <16DF> <9444> <16E4> <97C3> <16E5> <97C1> <16E6> <986B> <16E7> <9955> <16E8> <9A55> endbfchar 100 beginbfchar <16E9> <9A4D> <16EA> <9AD2> <16EB> <9B1A> <16EC> <9C49> <16ED> <9C31> <16EE> <9C3E> <16EF> <9C3B> <16F0> <9DD3> <16F1> <9DD7> <16F2> <9F34> <16F3> <9F6C> <16F4> <9F6A> <16F5> <9F94> <16F6> <56CC> <16F7> <5DD6> <16F8> <6200> <16F9> <6523> <16FA> <652B> <16FB> <652A> <16FC> <66EC> <16FD> <6B10> <16FE> <74DA> <16FF> <7ACA> <1700> <7C64> <1701> <7C63> <1702> <7C65> <1703> <7E93> <1704> <7E96> <1705> <7E94> <1706> <81E2> <1707> <8638> <1708> <863F> <1709> <8831> <170A> <8B8A> <170B> <9090> <170C> <908F> <170D> <9463> <170E> <9460> <170F> <9464> <1710> <9768> <1711> <986F> <1712> <995C> <1715> <9A57> <1718> <9AD1> <1719> <9C54> <171A> <9C57> <171B> <9C56> <171C> <9DE5> <171D> <9E9F> <171E> <9EF4> <171F> <56D1> <1720> <58E9> <1721> <652C> <1722> <705E> <1725> <77D7> <1726> <7F50> <1727> <7F88> <1728> <8836> <1729> <8839> <172A> <8862> <172B> <8B93> <172C> <8B92> <172D> <8B96> <172E> <8277> <172F> <8D1B> <1730> <91C0> <1731> <946A> <1732> <9742> <1733> <9748> <1734> <9744> <1735> <97C6> <1736> <9870> <1737> <9A5F> <1738> <9B22> <1739> <9B58> <173A> <9C5F> <173F> <9F07> <1740> <9F77> <1741> <9F72> <1742> <5EF3> <1743> <6B16> <1744> <7063> <1745> <7C6C> <1746> <7C6E> <1747> <883B> <1748> <89C0> <1749> <8EA1> <174A> <91C1> <174B> <9472> <174C> <9470> <174D> <9871> <174E> <995E> <174F> <9AD6> <1750> <9B23> <1751> <9ECC> <1752> <7064> <1753> <77DA> <1754> <8B9A> <1755> <9477> <1756> <97C9> endbfchar 100 beginbfchar <1757> <9A62> <1758> <9A65> <1759> <7E9C> <175A> <8B9C> <175B> <8EAA> <175C> <91C5> <175F> <947C> <1762> <9EF7> <1763> <8C54> <1764> <947F> <1765> <9E1A> <1766> <7228> <1767> <9A6A> <1768> <9B31> <1769> <9E1B> <176A> <9E1E> <176B> <7C72> <176C> <4E42> <176D> <4E5C> <176E> <51F5> <176F> <531A> <1770> <5382> <1771> <4E07> <1772> <4E0C> <1773> <4E47> <1774> <4E8D> <1775> <56D7> <1776> <5C6E> <1777> <5F73> <1778> <4E0F> <1779> <5187> <177A> <4E0E> <177B> <4E2E> <177C> <4E93> <177D> <4EC2> <177E> <4EC9> <177F> <4EC8> <1780> <5198> <1781> <52FC> <1782> <536C> <1783> <53B9> <1784> <5720> <1785> <5903> <1786> <592C> <1787> <5C10> <1788> <5DFF> <1789> <65E1> <178A> <6BB3> <178B> <6BCC> <178C> <6C14> <178D> <723F> <178E> <4E31> <178F> <4E3C> <1790> <4EE8> <1791> <4EDC> <1792> <4EE9> <1793> <4EE1> <1794> <4EDD> <1795> <4EDA> <1796> <520C> <1797> <5209> <1798> <531C> <1799> <534C> <179C> <5917> <179D> <592F> <179E> <5B81> <179F> <5B84> <17A0> <5C12> <17A1> <5C3B> <17A2> <5C74> <17A3> <5C73> <17A4> <5E04> <17A5> <5E80> <17A6> <5E82> <17A7> <5FC9> <17A8> <6209> <17A9> <6250> <17AA> <6C15> <17AB> <6C36> <17AC> <6C43> <17AD> <6C3F> <17AE> <6C3B> <17AF> <72AE> <17B0> <72B0> <17B1> <738A> <17B2> <79B8> <17B3> <808A> <17B4> <961E> <17B5> <4F0E> <17B6> <4F18> <17B7> <4F2C> <17B8> <4EF5> <17B9> <4F14> <17BA> <4EF1> <17BB> <4F00> <17BC> <4EF7> <17BD> <4F08> <17BE> <4F1D> <17BF> <4F02> <17C0> <4F05> endbfchar 100 beginbfchar <17C1> <4F22> <17C2> <4F13> <17C3> <4F04> <17C4> <4EF4> <17C5> <4F12> <17C6> <51B1> <17C7> <5213> <17C8> <5210> <17C9> <52A6> <17CA> <5322> <17CB> <531F> <17CC> <534D> <17CD> <538A> <17CE> <5407> <17CF> <56E1> <17D0> <56DF> <17D1> <572E> <17D2> <572A> <17D3> <5734> <17D4> <593C> <17D5> <5980> <17D6> <597C> <17D7> <5985> <17D8> <597B> <17D9> <597E> <17DA> <5977> <17DB> <597F> <17DC> <5B56> <17DD> <5C15> <17DE> <5C25> <17DF> <5C7C> <17E2> <5C7E> <17E3> <5DDF> <17E4> <5E75> <17E5> <5E84> <17E6> <5F02> <17E7> <5F1A> <17E8> <5F74> <17E9> <5FD5> <17EA> <5FD4> <17EB> <5FCF> <17EC> <625C> <17ED> <625E> <17EE> <6264> <17EF> <6261> <17F0> <6266> <17F1> <6262> <17F2> <6259> <17F3> <6260> <17F4> <625A> <17F5> <6265> <17F6> <6537> <17F7> <65EF> <17F8> <65EE> <17F9> <673E> <17FA> <6739> <17FB> <6738> <17FC> <673B> <17FD> <673A> <17FE> <673F> <17FF> <673C> <1800> <6733> <1801> <6C18> <1802> <6C46> <1803> <6C52> <1804> <6C5C> <1805> <6C4F> <1806> <6C4A> <1807> <6C54> <180A> <7071> <180B> <725E> <180E> <738E> <180F> <752A> <1810> <767F> <1811> <7A75> <1812> <7F51> <1813> <8278> <1814> <827C> <1815> <8280> <1816> <827D> <1817> <827F> <1818> <864D> <1819> <897E> <181A> <9099> <181D> <909B> <181E> <9094> <181F> <9622> <1820> <9624> <1821> <9620> <1822> <9623> <1823> <4F56> <1824> <4F3B> <1825> <4F62> <1826> <4F49> <1827> <4F53> <1828> <4F64> <1829> <4F3E> <182A> <4F67> <182B> <4F52> <182C> <4F5F> endbfchar 100 beginbfchar <182D> <4F41> <182E> <4F58> <182F> <4F2D> <1830> <4F33> <1831> <4F3F> <1832> <4F61> <1833> <518F> <1834> <51B9> <1835> <521C> <1836> <521E> <1837> <5221> <183A> <5309> <183B> <5363> <183C> <5372> <183F> <5430> <1840> <5437> <1841> <542A> <1842> <5454> <1843> <5445> <1844> <5419> <1845> <541C> <1846> <5425> <1847> <5418> <1848> <543D> <1849> <544F> <184A> <5441> <184B> <5428> <184C> <5424> <184D> <5447> <184E> <56EE> <184F> <56E7> <1850> <56E5> <1851> <5741> <1852> <5745> <1853> <574C> <1854> <5749> <1855> <574B> <1856> <5752> <1857> <5906> <1858> <5940> <1859> <59A6> <185A> <5998> <185B> <59A0> <185C> <5997> <185D> <598E> <185E> <59A2> <185F> <5990> <1860> <598F> <1861> <59A7> <1862> <59A1> <1863> <5B8E> <1864> <5B92> <1865> <5C28> <1866> <5C2A> <1867> <5C8D> <1868> <5C8F> <1869> <5C88> <186A> <5C8B> <186B> <5C89> <186C> <5C92> <186D> <5C8A> <186E> <5C86> <186F> <5C93> <1870> <5C95> <1871> <5DE0> <1872> <5E0A> <1873> <5E0E> <1874> <5E8B> <1875> <5E89> <1876> <5E8C> <1877> <5E88> <1878> <5E8D> <1879> <5F05> <187A> <5F1D> <187B> <5F78> <187C> <5F76> <187D> <5FD2> <187E> <5FD1> <187F> <5FD0> <1880> <5FED> <1881> <5FE8> <1882> <5FEE> <1883> <5FF3> <1884> <5FE1> <1885> <5FE4> <1886> <5FE3> <1887> <5FFA> <1888> <5FEF> <1889> <5FF7> <188A> <5FFB> <188B> <6000> <188C> <5FF4> <188D> <623A> <188E> <6283> <188F> <628C> <1892> <6294> <1893> <6287> <1894> <6271> <1895> <627B> <1896> <627A> endbfchar 100 beginbfchar <1897> <6270> <1898> <6281> <1899> <6288> <189A> <6277> <189B> <627D> <189C> <6272> <189D> <6274> <189E> <65F0> <189F> <65F4> <18A0> <65F3> <18A1> <65F2> <18A2> <65F5> <18A3> <6745> <18A4> <6747> <18A5> <6759> <18A6> <6755> <18A7> <674C> <18A8> <6748> <18A9> <675D> <18AA> <674D> <18AB> <675A> <18AC> <674B> <18AD> <6BD0> <18B0> <6C78> <18B1> <6C67> <18B2> <6C6B> <18B3> <6C84> <18B4> <6C8B> <18B5> <6C8F> <18B6> <6C71> <18B7> <6C6F> <18B8> <6C69> <18B9> <6C9A> <18BA> <6C6D> <18BB> <6C87> <18BC> <6C95> <18BD> <6C9C> <18BE> <6C66> <18BF> <6C73> <18C0> <6C65> <18C1> <6C7B> <18C2> <6C8E> <18C3> <7074> <18C4> <707A> <18C5> <7263> <18C6> <72BF> <18C7> <72BD> <18C8> <72C3> <18C9> <72C6> <18CA> <72C1> <18CB> <72BA> <18CC> <72C5> <18CD> <7395> <18CE> <7397> <18D1> <7392> <18D2> <753A> <18D3> <7539> <18D6> <7681> <18D7> <793D> <18D8> <8034> <18D9> <8095> <18DA> <8099> <18DB> <8090> <18DC> <8092> <18DD> <809C> <18DE> <8290> <18DF> <828F> <18E0> <8285> <18E1> <828E> <18E2> <8291> <18E3> <8293> <18E4> <828A> <18E7> <8C78> <18E8> <8FC9> <18E9> <8FBF> <18EA> <909F> <18EB> <90A1> <18EC> <90A5> <18ED> <909E> <18EE> <90A7> <18EF> <90A0> <18F0> <9630> <18F1> <9628> <18F2> <962F> <18F3> <962D> <18F4> <4E33> <18F5> <4F98> <18F6> <4F7C> <18F7> <4F85> <18F8> <4F7D> <18F9> <4F80> <18FA> <4F87> <18FB> <4F76> <18FC> <4F74> <18FD> <4F89> <18FE> <4F84> <18FF> <4F77> <1900> <4F4C> <1901> <4F97> <1902> <4F6A> endbfchar 100 beginbfchar <1903> <4F9A> <1904> <4F79> <1905> <4F81> <1906> <4F78> <1907> <4F90> <1908> <4F9C> <1909> <4F94> <190A> <4F9E> <190B> <4F92> <190C> <4F82> <190D> <4F95> <190E> <4F6B> <190F> <4F6E> <1910> <519E> <1911> <51BC> <1912> <51BE> <1913> <5235> <1916> <5246> <1917> <5231> <1918> <52BC> <191B> <533C> <191C> <5392> <191D> <5394> <191E> <5487> <191F> <547F> <1920> <5481> <1921> <5491> <1922> <5482> <1923> <5488> <1924> <546B> <1925> <547A> <1926> <547E> <1927> <5465> <1928> <546C> <1929> <5474> <192A> <5466> <192B> <548D> <192C> <546F> <192D> <5461> <192E> <5460> <192F> <5498> <1930> <5463> <1931> <5467> <1932> <5464> <1933> <56F7> <1934> <56F9> <1935> <576F> <1936> <5772> <1937> <576D> <1938> <576B> <1939> <5771> <193A> <5770> <193B> <5776> <193C> <5780> <193D> <5775> <193E> <577B> <1941> <5762> <1942> <5768> <1943> <577D> <1944> <590C> <1945> <5945> <1946> <59B5> <1947> <59BA> <1948> <59CF> <1949> <59CE> <194A> <59B2> <194B> <59CC> <194C> <59C1> <194D> <59B6> <194E> <59BC> <194F> <59C3> <1950> <59D6> <1951> <59B1> <1952> <59BD> <1953> <59C0> <1954> <59C8> <1955> <59B4> <1956> <59C7> <1957> <5B62> <1958> <5B65> <1959> <5B93> <195A> <5B95> <195B> <5C44> <195C> <5C47> <195D> <5CAE> <195E> <5CA4> <195F> <5CA0> <1960> <5CB5> <1961> <5CAF> <1962> <5CA8> <1963> <5CAC> <1964> <5C9F> <1965> <5CA3> <1966> <5CAD> <1967> <5CA2> <1968> <5CAA> <1969> <5CA7> <196A> <5C9D> <196B> <5CA5> <196C> <5CB6> endbfchar 100 beginbfchar <196D> <5CB0> <196E> <5CA6> <196F> <5E17> <1970> <5E14> <1971> <5E19> <1972> <5F28> <1976> <5F54> <1977> <5F82> <1978> <5F7E> <1979> <5F7D> <197A> <5FDE> <197B> <5FE5> <197C> <602D> <197D> <6026> <197E> <6019> <197F> <6032> <1980> <600B> <1981> <6034> <1982> <600A> <1983> <6017> <1984> <6033> <1985> <601A> <1986> <601E> <1987> <602C> <1988> <6022> <1989> <600D> <198A> <6010> <198B> <602E> <198C> <6013> <198D> <6011> <198E> <600C> <198F> <6009> <1990> <601C> <1991> <6214> <1992> <623D> <1993> <62AD> <1994> <62B4> <1995> <62D1> <1996> <62BE> <1997> <62AA> <1998> <62B6> <1999> <62CA> <199A> <62AE> <199B> <62B3> <199C> <62AF> <199D> <62BB> <199E> <62A9> <199F> <62B0> <19A0> <62B8> <19A1> <653D> <19A2> <65A8> <19A3> <65BB> <19A4> <6609> <19A5> <65FC> <19A6> <6604> <19A7> <6612> <19A8> <6608> <19A9> <65FB> <19AA> <6603> <19AB> <660B> <19AC> <660D> <19AD> <6605> <19AE> <65FD> <19AF> <6611> <19B0> <6610> <19B1> <66F6> <19B2> <670A> <19B3> <6785> <19B4> <676C> <19B5> <678E> <19B6> <6792> <19B7> <6776> <19B8> <677B> <19B9> <6798> <19BA> <6786> <19BB> <6784> <19BC> <6774> <19BD> <678D> <19BE> <678C> <19BF> <677A> <19C0> <679F> <19C1> <6791> <19C2> <6799> <19C3> <6783> <19C4> <677D> <19C5> <6781> <19C8> <6794> <19C9> <6B25> <19CA> <6B80> <19CB> <6B7E> <19CC> <6BDE> <19CD> <6C1D> <19CE> <6C93> <19CF> <6CEC> <19D0> <6CEB> <19D1> <6CEE> <19D2> <6CD9> <19D3> <6CB6> <19D4> <6CD4> <19D5> <6CAD> endbfchar 100 beginbfchar <19D6> <6CE7> <19D7> <6CB7> <19D8> <6CD0> <19D9> <6CC2> <19DA> <6CBA> <19DB> <6CC3> <19DC> <6CC6> <19DD> <6CED> <19DE> <6CF2> <19DF> <6CD2> <19E0> <6CDD> <19E1> <6CB4> <19E2> <6C8A> <19E3> <6C9D> <19E4> <6C80> <19E5> <6CDE> <19E6> <6CC0> <19E7> <6D30> <19E8> <6CCD> <19E9> <6CC7> <19EA> <6CB0> <19EB> <6CF9> <19EC> <6CCF> <19ED> <6CE9> <19EE> <6CD1> <19EF> <7094> <19F0> <7098> <19F1> <7085> <19F2> <7093> <19F3> <7086> <19F4> <7084> <19F5> <7091> <19F6> <7096> <19F7> <7082> <19F8> <709A> <19F9> <7083> <19FA> <726A> <19FB> <72D6> <19FC> <72CB> <19FD> <72D8> <19FE> <72C9> <19FF> <72DC> <1A00> <72D2> <1A01> <72D4> <1A02> <72DA> <1A03> <72CC> <1A04> <72D1> <1A05> <73A4> <1A06> <73A1> <1A07> <73AD> <1A08> <73A6> <1A09> <73A2> <1A0A> <73A0> <1A0B> <73AC> <1A0C> <739D> <1A0D> <74DD> <1A0E> <74E8> <1A11> <753E> <1A12> <758C> <1A13> <7598> <1A14> <76AF> <1A15> <76F3> <1A16> <76F1> <1A17> <76F0> <1A18> <76F5> <1A19> <77F8> <1A1A> <77FC> <1A1B> <77F9> <1A1C> <77FB> <1A1D> <77FA> <1A1E> <77F7> <1A1F> <7942> <1A20> <793F> <1A21> <79C5> <1A22> <7A78> <1A23> <7A7B> <1A24> <7AFB> <1A25> <7C75> <1A26> <7CFD> <1A27> <8035> <1A28> <808F> <1A29> <80AE> <1A2A> <80A3> <1A2B> <80B8> <1A2C> <80B5> <1A2D> <80AD> <1A2E> <8220> <1A2F> <82A0> <1A30> <82C0> <1A31> <82AB> <1A32> <829A> <1A33> <8298> <1A34> <829B> <1A35> <82B5> <1A36> <82A7> <1A37> <82AE> <1A38> <82BC> <1A39> <829E> <1A3A> <82BA> <1A3B> <82B4> endbfchar 100 beginbfchar <1A3C> <82A8> <1A3D> <82A1> <1A3E> <82A9> <1A3F> <82C2> <1A40> <82A4> <1A41> <82C3> <1A42> <82B6> <1A43> <82A2> <1A44> <8670> <1A45> <866F> <1A48> <8C56> <1A49> <8FD2> <1A4A> <8FCB> <1A4B> <8FD3> <1A4C> <8FCD> <1A4D> <8FD6> <1A4E> <8FD5> <1A4F> <8FD7> <1A50> <90B2> <1A51> <90B4> <1A52> <90AF> <1A53> <90B3> <1A54> <90B0> <1A55> <9639> <1A56> <963D> <1A57> <963C> <1A58> <963A> <1A59> <9643> <1A5A> <4FCD> <1A5B> <4FC5> <1A5C> <4FD3> <1A5D> <4FB2> <1A5E> <4FC9> <1A5F> <4FCB> <1A60> <4FC1> <1A61> <4FD4> <1A62> <4FDC> <1A63> <4FD9> <1A64> <4FBB> <1A65> <4FB3> <1A66> <4FDB> <1A67> <4FC7> <1A68> <4FD6> <1A69> <4FBA> <1A6A> <4FC0> <1A6B> <4FB9> <1A6C> <4FEC> <1A6D> <5244> <1A6E> <5249> <1A6F> <52C0> <1A70> <52C2> <1A71> <533D> <1A72> <537C> <1A73> <5397> <1A74> <5396> <1A75> <5399> <1A76> <5398> <1A77> <54BA> <1A78> <54A1> <1A79> <54AD> <1A7A> <54A5> <1A7B> <54CF> <1A7C> <54C3> <1A7D> <830D> <1A7E> <54B7> <1A7F> <54AE> <1A80> <54D6> <1A81> <54B6> <1A84> <54A0> <1A85> <5470> <1A86> <54BC> <1A87> <54A2> <1A88> <54BE> <1A89> <5472> <1A8A> <54DE> <1A8B> <54B0> <1A8C> <57B5> <1A8F> <57A4> <1A90> <578C> <1A91> <5797> <1A92> <579D> <1A93> <579B> <1A94> <5794> <1A95> <5798> <1A96> <578F> <1A97> <5799> <1A98> <57A5> <1A99> <579A> <1A9A> <5795> <1A9B> <58F4> <1A9C> <590D> <1A9D> <5953> <1A9E> <59E1> <1A9F> <59DE> <1AA0> <59EE> <1AA1> <5A00> <1AA2> <59F1> <1AA3> <59DD> <1AA4> <59FA> <1AA5> <59FD> endbfchar 100 beginbfchar <1AA6> <59FC> <1AA7> <59F6> <1AA8> <59E4> <1AA9> <59F2> <1AAA> <59F7> <1AAB> <59DB> <1AAC> <59E9> <1AAD> <59F3> <1AAE> <59F5> <1AAF> <59E0> <1AB0> <59FE> <1AB1> <59F4> <1AB2> <59ED> <1AB3> <5BA8> <1AB4> <5C4C> <1AB5> <5CD0> <1AB6> <5CD8> <1AB7> <5CCC> <1AB8> <5CD7> <1AB9> <5CCB> <1ABA> <5CDB> <1ABB> <5CDE> <1ABC> <5CDA> <1ABD> <5CC9> <1ABE> <5CC7> <1ABF> <5CCA> <1AC0> <5CD6> <1AC3> <5CCF> <1AC4> <5CC8> <1AC5> <5CC6> <1AC6> <5CCE> <1AC7> <5CDF> <1AC8> <5CF8> <1AC9> <5DF9> <1ACD> <5E20> <1ACE> <5E24> <1ACF> <5EB0> <1AD0> <5EA4> <1AD1> <5EA2> <1AD2> <5E9B> <1AD3> <5EA3> <1AD4> <5EA5> <1AD5> <5F07> <1AD6> <5F2E> <1AD7> <5F56> <1AD8> <5F86> <1AD9> <6037> <1ADA> <6039> <1ADB> <6054> <1ADC> <6072> <1ADD> <605E> <1ADE> <6045> <1ADF> <6053> <1AE0> <6047> <1AE1> <6049> <1AE2> <605B> <1AE3> <604C> <1AE4> <6040> <1AE5> <6042> <1AE6> <605F> <1AE7> <6024> <1AE8> <6044> <1AE9> <6058> <1AEA> <6066> <1AEB> <606E> <1AEE> <62CF> <1AEF> <630D> <1AF0> <630B> <1AF1> <62F5> <1AF2> <630E> <1AF3> <6303> <1AF4> <62EB> <1AF5> <62F9> <1AF6> <630F> <1AF7> <630C> <1AF8> <62F8> <1AF9> <62F6> <1AFA> <6300> <1AFD> <62FA> <1AFE> <6315> <1AFF> <62FB> <1B00> <62F0> <1B01> <6541> <1B02> <6543> <1B03> <65AA> <1B04> <65BF> <1B05> <6636> <1B06> <6621> <1B07> <6632> <1B08> <6635> <1B09> <661C> <1B0A> <6626> <1B0B> <6622> <1B0C> <6633> <1B0D> <662B> <1B0E> <663A> <1B0F> <661D> <1B10> <6634> <1B11> <6639> <1B12> <662E> endbfchar 100 beginbfchar <1B15> <67C1> <1B16> <67F2> <1B17> <67C8> <1B18> <67BA> <1B19> <67DC> <1B1A> <67BB> <1B1B> <67F8> <1B1C> <67D8> <1B1D> <67C0> <1B1E> <67B7> <1B1F> <67C5> <1B20> <67EB> <1B21> <67E4> <1B22> <67DF> <1B23> <67B5> <1B24> <67CD> <1B25> <67B3> <1B26> <67F7> <1B27> <67F6> <1B28> <67EE> <1B29> <67E3> <1B2A> <67C2> <1B2B> <67B9> <1B2C> <67CE> <1B2D> <67E7> <1B2E> <67F0> <1B2F> <67B2> <1B30> <67FC> <1B31> <67C6> <1B32> <67ED> <1B33> <67CC> <1B34> <67AE> <1B35> <67E6> <1B36> <67DB> <1B37> <67FA> <1B3A> <67C3> <1B3B> <67EA> <1B3C> <67CB> <1B3D> <6B28> <1B3E> <6B82> <1B3F> <6B84> <1B40> <6BB6> <1B41> <6BD6> <1B42> <6BD8> <1B43> <6BE0> <1B46> <6D28> <1B47> <6D34> <1B48> <6D2D> <1B49> <6D1F> <1B4A> <6D3C> <1B4B> <6D3F> <1B4C> <6D12> <1B4D> <6D0A> <1B4E> <6CDA> <1B4F> <6D33> <1B50> <6D04> <1B51> <6D19> <1B52> <6D3A> <1B53> <6D1A> <1B54> <6D11> <1B55> <6D00> <1B56> <6D1D> <1B57> <6D42> <1B58> <6D01> <1B59> <6D18> <1B5A> <6D37> <1B5B> <6D03> <1B5C> <6D0F> <1B5D> <6D40> <1B5E> <6D07> <1B5F> <6D20> <1B60> <6D2C> <1B61> <6D08> <1B62> <6D22> <1B63> <6D09> <1B64> <6D10> <1B65> <70B7> <1B66> <709F> <1B67> <70BE> <1B68> <70B1> <1B69> <70B0> <1B6A> <70A1> <1B6D> <70A9> <1B6E> <7241> <1B71> <726C> <1B72> <7270> <1B73> <7273> <1B74> <726E> <1B75> <72CA> <1B76> <72E4> <1B77> <72E8> <1B78> <72EB> <1B79> <72DF> <1B7A> <72EA> <1B7B> <72E6> <1B7C> <72E3> <1B7D> <7385> <1B7E> <73CC> <1B7F> <73C2> <1B80> <73C8> endbfchar 100 beginbfchar <1B81> <73C5> <1B82> <73B9> <1B83> <73B6> <1B84> <73B5> <1B85> <73B4> <1B86> <73EB> <1B87> <73BF> <1B88> <73C7> <1B89> <73BE> <1B8A> <73C3> <1B8B> <73C6> <1B8C> <73B8> <1B8D> <73CB> <1B8E> <74EC> <1B8F> <74EE> <1B90> <752E> <1B93> <75A7> <1B94> <75AA> <1B95> <7679> <1B96> <76C4> <1B97> <7708> <1B9B> <770A> <1B9C> <76F7> <1B9D> <76FB> <1B9E> <76FA> <1BA1> <7806> <1BA4> <7805> <1BA5> <7810> <1BA6> <780F> <1BA7> <780E> <1BA8> <7809> <1BA9> <7803> <1BAA> <7813> <1BAB> <794A> <1BAC> <794C> <1BAD> <794B> <1BAE> <7945> <1BAF> <7944> <1BB0> <79D5> <1BB1> <79CD> <1BB2> <79CF> <1BB3> <79D6> <1BB4> <79CE> <1BB5> <7A80> <1BB6> <7A7E> <1BB7> <7AD1> <1BBA> <7C7A> <1BC0> <7D03> <1BC1> <7D08> <1BC2> <7D01> <1BC3> <7F58> <1BC4> <7F91> <1BC5> <7F8D> <1BC6> <7FBE> <1BC7> <8007> <1BCA> <8014> <1BCB> <8037> <1BCC> <80D8> <1BCD> <80C7> <1BCE> <80E0> <1BCF> <80D1> <1BD0> <80C8> <1BD1> <80C2> <1BD2> <80D0> <1BD3> <80C5> <1BD4> <80E3> <1BD5> <80D9> <1BD6> <80DC> <1BD7> <80CA> <1BD8> <80D5> <1BD9> <80C9> <1BDA> <80CF> <1BDB> <80D7> <1BDC> <80E6> <1BDD> <80CD> <1BDE> <81FF> <1BDF> <8221> <1BE0> <8294> <1BE1> <82D9> <1BE2> <82FE> <1BE3> <82F9> <1BE4> <8307> <1BE5> <82E8> <1BE6> <8300> <1BE7> <82D5> <1BE8> <833A> <1BE9> <82EB> <1BEA> <82D6> <1BEB> <82F4> <1BEC> <82EC> <1BED> <82E1> <1BEE> <82F2> <1BEF> <82F5> <1BF0> <830C> <1BF1> <82FB> <1BF2> <82F6> <1BF3> <82F0> <1BF4> <82EA> <1BF5> <82E4> <1BF6> <82E0> endbfchar 100 beginbfchar <1BF7> <82FA> <1BF8> <82F3> <1BF9> <82ED> <1BFA> <8677> <1BFB> <8674> <1BFC> <867C> <1BFD> <8673> <1BFE> <8841> <1BFF> <884E> <1C00> <8867> <1C01> <886A> <1C02> <8869> <1C03> <89D3> <1C04> <8A04> <1C05> <8A07> <1C06> <8D72> <1C07> <8FE3> <1C08> <8FE1> <1C09> <8FEE> <1C0A> <8FE0> <1C0B> <90F1> <1C0C> <90BD> <1C0D> <90BF> <1C0E> <90D5> <1C0F> <90C5> <1C10> <90BE> <1C11> <90C7> <1C12> <90CB> <1C13> <90C8> <1C14> <91D4> <1C15> <91D3> <1C16> <9654> <1C17> <964F> <1C18> <9651> <1C19> <9653> <1C1A> <964A> <1C1B> <964E> <1C1C> <501E> <1C1D> <5005> <1C1E> <5007> <1C1F> <5013> <1C20> <5022> <1C21> <5030> <1C22> <501B> <1C23> <4FF5> <1C24> <4FF4> <1C25> <5033> <1C26> <5037> <1C27> <502C> <1C2A> <5017> <1C2B> <501C> <1C2C> <5020> <1C2D> <5027> <1C2E> <5035> <1C2F> <502F> <1C30> <5031> <1C31> <500E> <1C32> <515A> <1C33> <5194> <1C34> <5193> <1C35> <51CA> <1C38> <51C8> <1C39> <51CE> <1C3A> <5261> <1C3B> <525A> <1C3C> <5252> <1C3F> <5255> <1C40> <5262> <1C41> <52CD> <1C42> <530E> <1C43> <539E> <1C44> <5526> <1C45> <54E2> <1C46> <5517> <1C47> <5512> <1C48> <54E7> <1C49> <54F3> <1C4A> <54E4> <1C4B> <551A> <1C4C> <54FF> <1C4D> <5504> <1C4E> <5508> <1C4F> <54EB> <1C50> <5511> <1C51> <5505> <1C52> <54F1> <1C53> <550A> <1C54> <54FB> <1C57> <54E0> <1C58> <550E> <1C59> <5503> <1C5A> <550B> <1C5D> <57CC> <1C5E> <5832> <1C5F> <57D5> <1C60> <57D2> <1C61> <57BA> <1C62> <57C6> <1C63> <57BD> <1C64> <57BC> endbfchar 100 beginbfchar <1C65> <57B8> <1C66> <57B6> <1C67> <57BF> <1C68> <57C7> <1C69> <57D0> <1C6A> <57B9> <1C6B> <57C1> <1C6C> <590E> <1C6D> <594A> <1C6E> <5A19> <1C6F> <5A16> <1C72> <5A15> <1C73> <5A0F> <1C74> <5A17> <1C75> <5A0A> <1C76> <5A1E> <1C77> <5A33> <1C78> <5B6C> <1C79> <5BA7> <1C7A> <5BAD> <1C7B> <5BAC> <1C7C> <5C03> <1C7D> <5C56> <1C7E> <5C54> <1C7F> <5CEC> <1C80> <5CFF> <1C81> <5CEE> <1C82> <5CF1> <1C83> <5CF7> <1C84> <5D00> <1C85> <5CF9> <1C86> <5E29> <1C87> <5E28> <1C88> <5EA8> <1C89> <5EAE> <1C8A> <5EAA> <1C8B> <5EAC> <1C8C> <5F33> <1C8D> <5F30> <1C8E> <5F67> <1C8F> <605D> <1C90> <605A> <1C91> <6067> <1C92> <6041> <1C93> <60A2> <1C94> <6088> <1C95> <6080> <1C96> <6092> <1C97> <6081> <1C98> <609D> <1C99> <6083> <1C9A> <6095> <1C9B> <609B> <1C9C> <6097> <1C9D> <6087> <1C9E> <609C> <1C9F> <608E> <1CA0> <6219> <1CA1> <6246> <1CA2> <62F2> <1CA3> <6310> <1CA4> <6356> <1CA5> <632C> <1CA8> <6336> <1CA9> <6343> <1CAA> <63E4> <1CAB> <6339> <1CAC> <634B> <1CAD> <634A> <1CAE> <633C> <1CAF> <6329> <1CB0> <6341> <1CB1> <6334> <1CB2> <6358> <1CB3> <6354> <1CB4> <6359> <1CB5> <632D> <1CB6> <6347> <1CB7> <6333> <1CB8> <635A> <1CB9> <6351> <1CBA> <6338> <1CBB> <6357> <1CBC> <6340> <1CBD> <6348> <1CBE> <654A> <1CBF> <6546> <1CC0> <65C6> <1CC3> <65C2> <1CC4> <664A> <1CC5> <665F> <1CC6> <6647> <1CC7> <6651> <1CCA> <681F> <1CCB> <681A> <1CCC> <6849> <1CCF> <683B> <1CD0> <684B> <1CD1> <684F> <1CD2> <6816> endbfchar 100 beginbfchar <1CD3> <6831> <1CD4> <681C> <1CD5> <6835> <1CD6> <682B> <1CD7> <682D> <1CD8> <682F> <1CD9> <684E> <1CDA> <6844> <1CDB> <6834> <1CDC> <681D> <1CDD> <6812> <1CDE> <6814> <1CDF> <6826> <1CE0> <6828> <1CE1> <682E> <1CE2> <684D> <1CE3> <683A> <1CE4> <6825> <1CE5> <6820> <1CE6> <6B2C> <1CE7> <6B2F> <1CE8> <6B2D> <1CE9> <6B31> <1CEA> <6B34> <1CEB> <6B6D> <1CEC> <8082> <1CED> <6B88> <1CEE> <6BE6> <1CEF> <6BE4> <1CF0> <6BE8> <1CF1> <6BE3> <1CF2> <6BE2> <1CF3> <6BE7> <1CF4> <6C25> <1CF5> <6D7A> <1CF8> <6D76> <1CF9> <6D0D> <1CFA> <6D61> <1CFB> <6D92> <1CFC> <6D58> <1CFD> <6D62> <1CFE> <6D6D> <1CFF> <6D6F> <1D00> <6D91> <1D01> <6D8D> <1D02> <6DEF> <1D03> <6D7F> <1D04> <6D86> <1D05> <6D5E> <1D06> <6D67> <1D07> <6D60> <1D08> <6D97> <1D09> <6D70> <1D0A> <6D7C> <1D0B> <6D5F> <1D0C> <6D82> <1D0D> <6D98> <1D0E> <6D2F> <1D0F> <6D68> <1D10> <6D8B> <1D11> <6D7E> <1D12> <6D80> <1D13> <6D84> <1D14> <6D16> <1D15> <6D83> <1D16> <6D7B> <1D17> <6D7D> <1D18> <6D75> <1D19> <6D90> <1D1A> <70DC> <1D1B> <70D3> <1D1C> <70D1> <1D1D> <70DD> <1D1E> <70CB> <1D1F> <7F39> <1D20> <70E2> <1D21> <70D7> <1D22> <70D2> <1D23> <70DE> <1D24> <70E0> <1D25> <70D4> <1D26> <70CD> <1D2A> <70DA> <1D2B> <70CE> <1D2C> <70E1> <1D2D> <7242> <1D2E> <7278> <1D2F> <7277> <1D30> <7276> <1D31> <7300> <1D32> <72FA> <1D33> <72F4> <1D34> <72FE> <1D35> <72F6> <1D36> <72F3> <1D37> <72FB> <1D38> <7301> <1D39> <73D3> <1D3A> <73D9> <1D3B> <73E5> endbfchar 100 beginbfchar <1D3C> <73D6> <1D3D> <73BC> <1D3E> <73E7> <1D3F> <73E3> <1D40> <73E9> <1D41> <73DC> <1D42> <73D2> <1D43> <73DB> <1D44> <73D4> <1D45> <73DD> <1D46> <73DA> <1D49> <73E8> <1D4E> <7521> <1D4F> <755B> <1D50> <755F> <1D51> <75B0> <1D52> <75C1> <1D53> <75BB> <1D54> <75C4> <1D55> <75C0> <1D56> <75BF> <1D57> <75B6> <1D58> <75BA> <1D59> <768A> <1D5A> <76C9> <1D5B> <771D> <1D5C> <771B> <1D5D> <7710> <1D5E> <7713> <1D5F> <7712> <1D60> <7723> <1D61> <7711> <1D62> <7715> <1D65> <7722> <1D66> <7727> <1D67> <7823> <1D68> <782C> <1D69> <7822> <1D6A> <7835> <1D6B> <782F> <1D6C> <7828> <1D6D> <782E> <1D6E> <782B> <1D6F> <7821> <1D70> <7829> <1D71> <7833> <1D72> <782A> <1D73> <7831> <1D74> <7954> <1D75> <795B> <1D76> <794F> <1D77> <795C> <1D78> <7953> <1D79> <7952> <1D7A> <7951> <1D7D> <79E0> <1D7E> <79EE> <1D7F> <79ED> <1D80> <79EA> <1D81> <79DC> <1D82> <79DE> <1D83> <79DD> <1D84> <7A86> <1D85> <7A89> <1D86> <7A85> <1D89> <7A8A> <1D8A> <7A87> <1D8B> <7AD8> <1D8C> <7B10> <1D8D> <7B04> <1D8E> <7B13> <1D8F> <7B05> <1D90> <7B0F> <1D91> <7B08> <1D92> <7B0A> <1D93> <7B0E> <1D94> <7B09> <1D95> <7B12> <1D96> <7C84> <1D97> <7C91> <1D98> <7C8A> <1D99> <7C8C> <1D9A> <7C88> <1D9B> <7C8D> <1D9C> <7C85> <1D9D> <7D1E> <1D9E> <7D1D> <1D9F> <7D11> <1DA0> <7D0E> <1DA1> <7D18> <1DA2> <7D16> <1DA3> <7D13> <1DA4> <7D1F> <1DA5> <7D12> <1DA6> <7D0F> <1DA7> <7D0C> <1DA8> <7F5C> <1DA9> <7F61> <1DAA> <7F5E> <1DAB> <7F60> endbfchar 100 beginbfchar <1DAC> <7F5D> <1DAD> <7F5B> <1DAE> <7F96> <1DAF> <7F92> <1DB0> <7FC3> <1DB1> <7FC2> <1DB2> <7FC0> <1DB3> <8016> <1DB4> <803E> <1DB5> <8039> <1DB6> <80FA> <1DB7> <80F2> <1DB8> <80F9> <1DB9> <80F5> <1DBA> <8101> <1DBB> <80FB> <1DBC> <8100> <1DBD> <8201> <1DBE> <822F> <1DBF> <8225> <1DC0> <8333> <1DC1> <832D> <1DC2> <8344> <1DC3> <8319> <1DC4> <8351> <1DC5> <8325> <1DC6> <8356> <1DC7> <833F> <1DC8> <8341> <1DC9> <8326> <1DCA> <831C> <1DCB> <8322> <1DCC> <8342> <1DCD> <834E> <1DCE> <831B> <1DCF> <832A> <1DD0> <8308> <1DD1> <833C> <1DD2> <834D> <1DD3> <8316> <1DD4> <8324> <1DD5> <8320> <1DD6> <8337> <1DD7> <832F> <1DD8> <8329> <1DD9> <8347> <1DDA> <8345> <1DDB> <834C> <1DDC> <8353> <1DDD> <831E> <1DDE> <832C> <1DDF> <834B> <1DE0> <8327> <1DE1> <8348> <1DE2> <8653> <1DE3> <8652> <1DE4> <86A2> <1DE5> <86A8> <1DE6> <8696> <1DE7> <868D> <1DE8> <8691> <1DE9> <869E> <1DEA> <8687> <1DEB> <8697> <1DEC> <8686> <1DED> <868B> <1DEE> <869A> <1DEF> <8685> <1DF0> <86A5> <1DF1> <8699> <1DF2> <86A1> <1DF3> <86A7> <1DF4> <8695> <1DF5> <8698> <1DF6> <868E> <1DF7> <869D> <1DF8> <8690> <1DF9> <8694> <1DFC> <886D> <1DFF> <8872> <1E00> <8880> <1E01> <8871> <1E02> <887F> <1E03> <886F> <1E04> <8883> <1E05> <887E> <1E06> <8874> <1E07> <887C> <1E08> <8A12> <1E09> <8C47> <1E0A> <8C57> <1E0B> <8C7B> <1E0C> <8CA4> <1E0D> <8CA3> <1E0E> <8D76> <1E0F> <8D78> <1E10> <8DB5> <1E11> <8DB7> <1E12> <8DB6> <1E13> <8ED1> endbfchar 100 beginbfchar <1E14> <8ED3> <1E15> <8FFE> <1E16> <8FF5> <1E17> <9002> <1E18> <8FFF> <1E19> <8FFB> <1E1A> <9004> <1E1B> <8FFC> <1E1C> <8FF6> <1E1D> <90D6> <1E1E> <90E0> <1E21> <90E3> <1E22> <90DF> <1E23> <90E5> <1E24> <90D8> <1E25> <90DB> <1E26> <90D7> <1E27> <90DC> <1E28> <90E4> <1E29> <9150> <1E2C> <91D5> <1E2D> <91E2> <1E2E> <91DA> <1E2F> <965C> <1E30> <965F> <1E31> <96BC> <1E32> <98E3> <1E33> <9ADF> <1E34> <9B2F> <1E35> <4E7F> <1E36> <5070> <1E37> <506A> <1E38> <5061> <1E39> <505E> <1E3A> <5060> <1E3B> <5053> <1E3C> <504B> <1E3D> <505D> <1E3E> <5072> <1E3F> <5048> <1E40> <504D> <1E41> <5041> <1E42> <505B> <1E43> <504A> <1E44> <5062> <1E45> <5015> <1E46> <5045> <1E47> <505F> <1E48> <5069> <1E49> <506B> <1E4C> <5046> <1E4D> <5040> <1E4E> <506E> <1E4F> <5073> <1E50> <5057> <1E51> <5051> <1E52> <51D0> <1E53> <526B> <1E54> <526D> <1E55> <526C> <1E56> <526E> <1E57> <52D6> <1E58> <52D3> <1E59> <532D> <1E5A> <539C> <1E5D> <553C> <1E5E> <554D> <1E5F> <5550> <1E60> <5534> <1E61> <552A> <1E62> <5551> <1E63> <5562> <1E64> <5536> <1E65> <5535> <1E66> <5530> <1E67> <5552> <1E68> <5545> <1E69> <550C> <1E6A> <5532> <1E6B> <5565> <1E6C> <554E> <1E6D> <5539> <1E6E> <5548> <1E6F> <552D> <1E70> <553B> <1E71> <5540> <1E72> <554B> <1E73> <570A> <1E74> <5707> <1E75> <57FB> <1E76> <5814> <1E77> <57E2> <1E78> <57F6> <1E79> <57DC> <1E7A> <57F4> <1E7B> <5800> <1E7C> <57ED> <1E7D> <57FD> <1E7E> <5808> <1E7F> <57F8> endbfchar 100 beginbfchar <1E80> <580B> <1E81> <57F3> <1E82> <57CF> <1E83> <5807> <1E84> <57EE> <1E85> <57E3> <1E86> <57F2> <1E87> <57E5> <1E88> <57EC> <1E89> <57E1> <1E8A> <580E> <1E8B> <57FC> <1E8C> <5810> <1E8D> <57E7> <1E8E> <5801> <1E8F> <580C> <1E90> <57F1> <1E91> <57E9> <1E92> <57F0> <1E93> <580D> <1E94> <5804> <1E95> <595C> <1E96> <5A60> <1E97> <5A58> <1E98> <5A55> <1E99> <5A67> <1E9A> <5A5E> <1E9B> <5A38> <1E9C> <5A35> <1E9D> <5A6D> <1E9E> <5A50> <1E9F> <5A5F> <1EA0> <5A65> <1EA1> <5A6C> <1EA2> <5A53> <1EA3> <5A64> <1EA4> <5A57> <1EA5> <5A43> <1EA6> <5A5D> <1EA7> <5A52> <1EA8> <5A44> <1EA9> <5A5B> <1EAA> <5A48> <1EAB> <5A8E> <1EAC> <5A3E> <1EAD> <5A4D> <1EAE> <5A39> <1EAF> <5A4C> <1EB0> <5A70> <1EB1> <5A69> <1EB2> <5A47> <1EB3> <5A51> <1EB4> <5A56> <1EB5> <5A42> <1EB6> <5A5C> <1EB7> <5B72> <1EB8> <5B6E> <1EB9> <5BC1> <1EBA> <5BC0> <1EBB> <5C59> <1EBC> <5D1E> <1EBD> <5D0B> <1EBE> <5D1D> <1EBF> <5D1A> <1EC0> <5D20> <1EC1> <5D0C> <1EC2> <5D28> <1EC3> <5D0D> <1EC4> <5D26> <1EC5> <5D25> <1EC6> <5D0F> <1EC7> <5D30> <1EC8> <5D12> <1EC9> <5D23> <1ECA> <5D1F> <1ECB> <5D2E> <1ECC> <5E3E> <1ECD> <5E34> <1ECE> <5EB1> <1ECF> <5EB4> <1ED0> <5EB9> <1ED3> <5F36> <1ED4> <5F38> <1ED5> <5F9B> <1ED6> <5F96> <1ED7> <5F9F> <1ED8> <608A> <1ED9> <6090> <1EDA> <6086> <1EDB> <60BE> <1EDC> <60B0> <1EDD> <60BA> <1EE0> <60CF> <1EE1> <60E4> <1EE2> <60D9> <1EE3> <60DD> <1EE4> <60C8> <1EE5> <60B1> <1EE6> <60DB> <1EE7> <60B7> endbfchar 100 beginbfchar <1EE8> <60CA> <1EE9> <60BF> <1EEA> <60C3> <1EEB> <60CD> <1EEC> <60C0> <1EED> <6332> <1EEE> <6365> <1EEF> <638A> <1EF0> <6382> <1EF1> <637D> <1EF2> <63BD> <1EF3> <639E> <1EF4> <63AD> <1EF5> <639D> <1EF6> <6397> <1EF7> <63AB> <1EF8> <638E> <1EF9> <636F> <1EFA> <6387> <1EFB> <6390> <1EFC> <636E> <1EFD> <63AF> <1EFE> <6375> <1EFF> <639C> <1F00> <636D> <1F01> <63AE> <1F02> <637C> <1F03> <63A4> <1F04> <633B> <1F05> <639F> <1F06> <6378> <1F07> <6385> <1F08> <6381> <1F09> <6391> <1F0A> <638D> <1F0B> <6370> <1F0C> <6553> <1F0D> <65CD> <1F0E> <6665> <1F0F> <6661> <1F10> <665B> <1F11> <6659> <1F12> <665C> <1F13> <6662> <1F14> <6718> <1F15> <6879> <1F16> <6887> <1F17> <6890> <1F18> <689C> <1F1B> <68AE> <1F1C> <68AB> <1F1D> <6956> <1F1E> <686F> <1F1F> <68A3> <1F20> <68AC> <1F21> <68A9> <1F22> <6875> <1F23> <6874> <1F24> <68B2> <1F25> <688F> <1F26> <6877> <1F27> <6892> <1F28> <687C> <1F29> <686B> <1F2A> <6872> <1F2B> <68AA> <1F2C> <6880> <1F2D> <6871> <1F2E> <687E> <1F2F> <689B> <1F30> <6896> <1F31> <688B> <1F32> <68A0> <1F33> <6889> <1F34> <68A4> <1F35> <6878> <1F36> <687B> <1F37> <6891> <1F38> <688C> <1F39> <688A> <1F3A> <687D> <1F3B> <6B36> <1F3C> <6B33> <1F3F> <6B91> <1F40> <6B8F> <1F43> <6B8C> <1F44> <6C2A> <1F45> <6DC0> <1F46> <6DAB> <1F47> <6DB4> <1F48> <6DB3> <1F49> <6E74> <1F4A> <6DAC> <1F4B> <6DE9> <1F4C> <6DE2> <1F4D> <6DB7> <1F4E> <6DF6> <1F4F> <6DD4> <1F50> <6E00> <1F51> <6DC8> endbfchar 100 beginbfchar <1F52> <6DE0> <1F53> <6DDF> <1F54> <6DD6> <1F55> <6DBE> <1F56> <6DE5> <1F59> <6DDB> <1F5A> <6DF4> <1F5B> <6DCA> <1F5C> <6DBD> <1F5D> <6DED> <1F5E> <6DF0> <1F5F> <6DBA> <1F60> <6DD5> <1F61> <6DC2> <1F62> <6DCF> <1F63> <6DC9> <1F64> <6DD0> <1F65> <6DF2> <1F66> <6DD3> <1F67> <6DFD> <1F68> <6DD7> <1F69> <6DCD> <1F6A> <6DE3> <1F6B> <6DBB> <1F6C> <70FA> <1F6D> <710D> <1F6E> <70F7> <1F6F> <7117> <1F70> <70F4> <1F71> <710C> <1F72> <70F0> <1F73> <7104> <1F74> <70F3> <1F75> <7110> <1F76> <70FC> <1F77> <70FF> <1F78> <7106> <1F79> <7113> <1F7A> <7100> <1F7B> <70F8> <1F7C> <70F6> <1F7D> <710B> <1F7E> <7102> <1F7F> <710E> <1F80> <727E> <1F83> <727F> <1F84> <731D> <1F85> <7317> <1F86> <7307> <1F87> <7311> <1F88> <7318> <1F89> <730A> <1F8A> <7308> <1F8B> <72FF> <1F8C> <730F> <1F8D> <731E> <1F8E> <7388> <1F8F> <73F6> <1F90> <73F8> <1F91> <73F5> <1F92> <7404> <1F93> <7401> <1F94> <73FD> <1F95> <7407> <1F96> <7400> <1F97> <73FA> <1F98> <73FC> <1F99> <73FF> <1F9A> <740C> <1F9B> <740B> <1F9C> <73F4> <1F9D> <7408> <1F9E> <7564> <1F9F> <7563> <1FA0> <75CE> <1FA1> <75D2> <1FA2> <75CF> <1FA5> <75D1> <1FA6> <75D0> <1FA7> <768F> <1FA8> <7689> <1FA9> <76D3> <1FAA> <7739> <1FAB> <772F> <1FAC> <772D> <1FAF> <7734> <1FB0> <7733> <1FB1> <773D> <1FB2> <7725> <1FB3> <773B> <1FB4> <7735> <1FB5> <7848> <1FB6> <7852> <1FB7> <7849> <1FB8> <784D> <1FB9> <784A> <1FBA> <784C> <1FBB> <7826> <1FBC> <7845> <1FBD> <7850> endbfchar 100 beginbfchar <1FBE> <7964> <1FBF> <7967> <1FC2> <7963> <1FC3> <796B> <1FC4> <7961> <1FC5> <79BB> <1FC6> <79FA> <1FC7> <79F8> <1FCA> <7A8F> <1FCB> <7A94> <1FCC> <7A90> <1FCD> <7B35> <1FCE> <7B3B> <1FCF> <7B34> <1FD0> <7B25> <1FD1> <7B30> <1FD2> <7B22> <1FD3> <7B24> <1FD4> <7B33> <1FD5> <7B18> <1FD6> <7B2A> <1FD7> <7B1D> <1FD8> <7B31> <1FD9> <7B2B> <1FDA> <7B2D> <1FDB> <7B2F> <1FDC> <7B32> <1FDD> <7B38> <1FDE> <7B1A> <1FDF> <7B23> <1FE0> <7C94> <1FE1> <7C98> <1FE2> <7C96> <1FE3> <7CA3> <1FE4> <7D35> <1FE5> <7D3D> <1FE6> <7D38> <1FE7> <7D36> <1FE8> <7D3A> <1FE9> <7D45> <1FEA> <7D2C> <1FEB> <7D29> <1FEC> <7D41> <1FED> <7D47> <1FF0> <7D4A> <1FF1> <7D3B> <1FF2> <7D28> <1FF3> <7F63> <1FF4> <7F95> <1FF7> <7F9B> <1FFA> <7FCD> <1FFD> <7FC7> <1FFE> <7FCF> <1FFF> <7FC9> <2000> <801F> <2001> <801E> <2002> <801B> <2003> <8047> <2004> <8043> <2005> <8048> <2006> <8118> <2007> <8125> <2008> <8119> <2009> <811B> <200A> <812D> <200B> <811F> <200C> <812C> <200D> <811E> <200E> <8121> <200F> <8115> <2010> <8127> <2011> <811D> <2012> <8122> <2013> <8211> <2014> <8238> <2015> <8233> <2016> <823A> <2017> <8234> <2018> <8232> <2019> <8274> <201A> <8390> <201B> <83A3> <201C> <83A8> <201D> <838D> <201E> <837A> <201F> <8373> <2020> <83A4> <2021> <8374> <2022> <838F> <2023> <8381> <2024> <8395> <2025> <8399> <2026> <8375> <2027> <8394> <2028> <83A9> <2029> <837D> <202A> <8383> <202B> <838C> <202C> <839D> <202D> <839B> endbfchar 100 beginbfchar <202E> <83AA> <202F> <838B> <2030> <837E> <2031> <83A5> <2032> <83AF> <2033> <8388> <2034> <8397> <2035> <83B0> <2036> <837F> <2037> <83A6> <2038> <8387> <2039> <83AE> <203A> <8376> <203B> <8659> <203C> <8656> <203D> <86BF> <203E> <86B7> <203F> <86C2> <2040> <86C1> <2041> <86C5> <2042> <86BA> <2043> <86B0> <2044> <86C8> <2045> <86B9> <2046> <86B3> <2047> <86B8> <2048> <86CC> <2049> <86B4> <204C> <86C3> <204F> <8852> <2050> <8889> <2051> <8895> <2052> <88A8> <2053> <88A2> <2054> <88AA> <2055> <889A> <2056> <8891> <2057> <88A1> <2058> <889F> <2059> <8898> <205A> <88A7> <205B> <8899> <205C> <889B> <205D> <8897> <205E> <88A4> <205F> <88AC> <2060> <888C> <2061> <8893> <2062> <888E> <2063> <8982> <2064> <89D6> <2065> <89D9> <2066> <89D5> <2067> <8A30> <2068> <8A27> <2069> <8A2C> <206A> <8A1E> <206B> <8C39> <206C> <8C3B> <206F> <8C7D> <2070> <8CA5> <2071> <8D7D> <2072> <8D7B> <2073> <8D79> <2074> <8DBC> <2075> <8DC2> <2076> <8DB9> <2077> <8DBF> <2078> <8DC1> <2079> <8ED8> <207A> <8EDE> <207B> <8EDD> <207C> <8EDC> <207D> <8ED7> <2080> <9024> <2081> <900B> <2082> <9011> <2083> <901C> <2084> <900C> <2085> <9021> <2086> <90EF> <2087> <90EA> <2088> <90F0> <2089> <90F4> <208C> <90D4> <208F> <90E9> <2090> <9156> <2091> <9158> <2092> <915A> <2093> <9153> <2094> <9155> <2095> <91EC> <2096> <91F4> <2097> <91F1> <2098> <91F3> <2099> <91F8> <209A> <91E4> <209B> <91F9> <209E> <91F7> <209F> <91E8> endbfchar 100 beginbfchar <20A0> <91EE> <20A1> <957A> <20A2> <9586> <20A3> <9588> <20A4> <967C> <20A5> <966D> <20A6> <966B> <20A7> <9671> <20A8> <966F> <20A9> <96BF> <20AA> <976A> <20AB> <9804> <20AC> <98E5> <20AD> <9997> <20AE> <509B> <20AF> <5095> <20B0> <5094> <20B1> <509E> <20B2> <508B> <20B3> <50A3> <20B4> <5083> <20B5> <508C> <20B6> <508E> <20B7> <509D> <20B8> <5068> <20B9> <509C> <20BA> <5092> <20BB> <5082> <20BC> <5087> <20BD> <515F> <20BE> <51D4> <20BF> <5312> <20C0> <5311> <20C1> <53A4> <20C2> <53A7> <20C3> <5591> <20C4> <55A8> <20C5> <55A5> <20C6> <55AD> <20C7> <5577> <20C8> <5645> <20C9> <55A2> <20CA> <5593> <20CB> <5588> <20CC> <558F> <20CD> <55B5> <20CE> <5581> <20CF> <55A3> <20D0> <5592> <20D1> <55A4> <20D2> <557D> <20D3> <558C> <20D4> <55A6> <20D5> <557F> <20D6> <5595> <20D7> <55A1> <20D8> <558E> <20D9> <570C> <20DA> <5829> <20DB> <5837> <20DC> <5819> <20DD> <581E> <20DE> <5827> <20DF> <5823> <20E0> <5828> <20E1> <57F5> <20E2> <5848> <20E3> <5825> <20E4> <581C> <20E5> <581B> <20E6> <5833> <20E7> <583F> <20E8> <5836> <20E9> <582E> <20EA> <5839> <20EB> <5838> <20EC> <582D> <20ED> <582C> <20EE> <583B> <20EF> <5961> <20F0> <5AAF> <20F1> <5A94> <20F2> <5A9F> <20F3> <5A7A> <20F4> <5AA2> <20F5> <5A9E> <20F6> <5A78> <20F7> <5AA6> <20F8> <5A7C> <20F9> <5AA5> <20FA> <5AAC> <20FB> <5A95> <20FC> <5AAE> <20FD> <5A37> <20FE> <5A84> <20FF> <5A8A> <2100> <5A97> <2101> <5A83> <2102> <5A8B> <2103> <5AA9> endbfchar 100 beginbfchar <2104> <5A7B> <2105> <5A7D> <2106> <5A8C> <2107> <5A9C> <2108> <5A8F> <2109> <5A93> <210A> <5A9D> <210B> <5BEA> <210C> <5BCD> <210D> <5BCB> <210E> <5BD4> <210F> <5BD1> <2110> <5BCA> <2111> <5BCE> <2112> <5C0C> <2113> <5C30> <2114> <5D37> <2115> <5D43> <2116> <5D6B> <2117> <5D41> <2118> <5D4B> <2119> <5D3F> <211A> <5D35> <211B> <5D51> <211C> <5D4E> <211D> <5D55> <211E> <5D33> <211F> <5D3A> <2120> <5D52> <2121> <5D3D> <2122> <5D31> <2123> <5D59> <2124> <5D42> <2125> <5D39> <2126> <5D49> <2127> <5D38> <2128> <5D3C> <2129> <5D32> <212A> <5D36> <212B> <5D40> <212C> <5D45> <212D> <5E44> <212E> <5E41> <212F> <5F58> <2130> <5FA6> <2131> <5FA5> <2132> <5FAB> <2133> <60C9> <2134> <60B9> <2135> <60CC> <2136> <60E2> <2137> <60CE> <2138> <60C4> <2139> <6114> <213A> <60F2> <213B> <610A> <213C> <6116> <213D> <6105> <213E> <60F5> <213F> <6113> <2140> <60F8> <2141> <60FC> <2142> <60FE> <2143> <60C1> <2144> <6103> <2145> <6118> <2146> <611D> <2147> <6110> <2148> <60FF> <2149> <6104> <214A> <610B> <214B> <624A> <214C> <6394> <214D> <63B1> <214E> <63B0> <214F> <63CE> <2150> <63E5> <2151> <63E8> <2152> <63EF> <2153> <63C3> <2154> <649D> <2155> <63F3> <2156> <63CA> <2157> <63E0> <2158> <63F6> <2159> <63D5> <215A> <63F2> <215B> <63F5> <215C> <6461> <215D> <63DF> <215E> <63BE> <215F> <63DD> <2160> <63DC> <2161> <63C4> <2162> <63D8> <2163> <63D3> <2164> <63C2> <2165> <63C7> <2166> <63CC> <2167> <63CB> endbfchar 100 beginbfchar <2168> <63C8> <2169> <63F0> <216A> <63D7> <216B> <63D9> <216C> <6532> <216D> <6567> <216E> <656A> <216F> <6564> <2170> <655C> <2171> <6568> <2172> <6565> <2173> <658C> <2176> <65AE> <2177> <65D0> <2178> <65D2> <2179> <667C> <217A> <666C> <217B> <667B> <217C> <6680> <217D> <6671> <217E> <6679> <217F> <666A> <2180> <6672> <2181> <6701> <2182> <690C> <2183> <68D3> <2184> <6904> <2185> <68DC> <2186> <692A> <2187> <68EC> <2188> <68EA> <2189> <68F1> <218A> <690F> <218B> <68D6> <218C> <68F7> <218D> <68EB> <218E> <68E4> <218F> <68F6> <2190> <6913> <2191> <6910> <2192> <68F3> <2193> <68E1> <2194> <6907> <2195> <68CC> <2196> <6908> <2197> <6970> <2198> <68B4> <2199> <6911> <219A> <68EF> <219B> <68C6> <219C> <6914> <219D> <68F8> <219E> <68D0> <219F> <68FD> <21A0> <68FC> <21A1> <68E8> <21A2> <690B> <21A3> <690A> <21A4> <6917> <21A5> <68CE> <21A6> <68C8> <21A9> <68E6> <21AA> <68F4> <21AB> <68D1> <21AC> <6906> <21AD> <68D4> <21AE> <68E9> <21AF> <6915> <21B0> <6925> <21B1> <68C7> <21B2> <6B39> <21B3> <6B3B> <21B4> <6B3F> <21B5> <6B3C> <21B6> <6B94> <21B7> <6B97> <21B8> <6B99> <21B9> <6B95> <21BA> <6BBD> <21BB> <6BF0> <21BE> <6C30> <21BF> <6DFC> <21C2> <6E1F> <21C3> <6E49> <21C4> <6E88> <21C7> <6E45> <21C8> <6E62> <21C9> <6E2B> <21CA> <6E3F> <21CB> <6E41> <21CC> <6E5D> <21CD> <6E73> <21CE> <6E1C> <21CF> <6E33> <21D0> <6E4B> <21D1> <6E40> <21D2> <6E51> <21D3> <6E3B> <21D4> <6E03> <21D5> <6E2E> endbfchar 100 beginbfchar <21D6> <6E5E> <21D7> <6E68> <21D8> <6E5C> <21D9> <6E61> <21DA> <6E31> <21DB> <6E28> <21DC> <6E60> <21DD> <6E71> <21DE> <6E6B> <21DF> <6E39> <21E0> <6E22> <21E1> <6E30> <21E2> <6E53> <21E3> <6E65> <21E4> <6E27> <21E5> <6E78> <21E6> <6E64> <21E7> <6E77> <21E8> <6E55> <21E9> <6E79> <21EA> <6E52> <21EB> <6E66> <21EE> <6E5A> <21EF> <7120> <21F0> <711E> <21F1> <712F> <21F2> <70FB> <21F3> <712E> <21F4> <7131> <21F5> <7123> <21F6> <7125> <21F7> <7122> <21F8> <7132> <21F9> <711F> <21FA> <7128> <21FB> <713A> <21FC> <711B> <21FD> <724B> <21FE> <725A> <21FF> <7288> <2200> <7289> <2201> <7286> <2202> <7285> <2203> <728B> <2204> <7312> <2205> <730B> <2206> <7330> <2207> <7322> <2208> <7331> <2209> <7333> <220A> <7327> <220B> <7332> <220C> <732D> <220D> <7326> <220E> <7323> <220F> <7335> <2210> <730C> <2211> <742E> <2212> <742C> <2213> <7430> <2214> <742B> <2215> <7416> <2216> <741A> <2217> <7421> <2218> <742D> <2219> <7431> <221A> <7424> <221B> <7423> <221C> <741D> <221D> <7429> <221E> <7420> <221F> <7432> <2220> <74FB> <2221> <752F> <2222> <756F> <2223> <756C> <2224> <75E7> <2225> <75DA> <2226> <75E1> <2227> <75E6> <2228> <75DD> <2229> <75DF> <222A> <75E4> <222B> <75D7> <222C> <7695> <222D> <7692> <222E> <76DA> <2231> <7744> <2232> <774D> <2233> <7745> <2234> <774A> <2235> <774E> <2238> <77DE> <2239> <77EC> <223A> <7860> <223D> <785C> <223E> <786D> <223F> <7871> <2240> <786A> <2241> <786E> endbfchar 100 beginbfchar <2242> <7870> <2243> <7869> <2244> <7868> <2245> <785E> <2246> <7862> <2247> <7974> <2248> <7973> <2249> <7972> <224A> <7970> <224B> <7A02> <224C> <7A0A> <224D> <7A03> <224E> <7A0C> <224F> <7A04> <2250> <7A99> <2251> <7AE6> <2252> <7AE4> <2253> <7B4A> <2254> <7B47> <2255> <7B44> <2256> <7B48> <2257> <7B4C> <2258> <7B4E> <2259> <7B40> <225A> <7B58> <225B> <7B45> <225C> <7CA2> <225D> <7C9E> <225E> <7CA8> <225F> <7CA1> <2260> <7D58> <2261> <7D6F> <2262> <7D63> <2263> <7D53> <2264> <7D56> <2265> <7D67> <2266> <7D6A> <2267> <7D4F> <2268> <7D6D> <2269> <7D5C> <226A> <7D6B> <226B> <7D52> <226C> <7D54> <226D> <7D69> <226E> <7D51> <226F> <7D5F> <2270> <7D4E> <2275> <7FA2> <2278> <7FD7> <2279> <8051> <227C> <80FE> <227D> <80D4> <227E> <8143> <227F> <814A> <2280> <8152> <2281> <814F> <2282> <8147> <2283> <813D> <2284> <814D> <2285> <813A> <2286> <81E6> <2287> <81EE> <228B> <8204> <228E> <823F> <228F> <8275> <2290> <833B> <2291> <83CF> <2292> <83F9> <2293> <8423> <2294> <83C0> <2295> <83E8> <2296> <8412> <2297> <83E7> <2298> <83E4> <2299> <83FC> <229A> <83F6> <229B> <8410> <229C> <83C6> <229D> <83C8> <229E> <83EB> <229F> <83E3> <22A0> <83BF> <22A1> <8401> <22A2> <83DD> <22A3> <83E5> <22A4> <83D8> <22A5> <83FF> <22A6> <83E1> <22A7> <83CB> <22A8> <83CE> <22A9> <83D6> <22AA> <83F5> <22AB> <83C9> <22AC> <8409> <22AD> <840F> <22AE> <83DE> <22AF> <8411> <22B0> <8406> <22B1> <83C2> <22B2> <83F3> endbfchar 100 beginbfchar <22B3> <83D5> <22B4> <83FA> <22B5> <83C7> <22B6> <83D1> <22B7> <83EA> <22B8> <8413> <22B9> <839A> <22BA> <83C3> <22BB> <83EC> <22BC> <83EE> <22BD> <83C4> <22BE> <83FB> <22BF> <83D7> <22C0> <83E2> <22C1> <841B> <22C2> <83DB> <22C3> <83FE> <22C4> <86D8> <22C5> <86E2> <22C6> <86E6> <22C7> <86D3> <22C8> <86E3> <22C9> <86DA> <22CA> <86EA> <22CB> <86DD> <22CC> <86EB> <22CD> <86DC> <22CE> <86EC> <22CF> <86E9> <22D0> <86D7> <22D1> <86E8> <22D2> <86D1> <22D3> <8848> <22D4> <8856> <22D5> <8855> <22D6> <88BA> <22D7> <88D7> <22D8> <88B9> <22D9> <88B8> <22DA> <88C0> <22DB> <88BE> <22DC> <88B6> <22DD> <88BC> <22DE> <88B7> <22DF> <88BD> <22E0> <88B2> <22E1> <8901> <22E2> <88C9> <22E3> <8995> <22E4> <8998> <22E5> <8997> <22E6> <89DD> <22E9> <8A4E> <22EA> <8A4D> <22EB> <8A39> <22EC> <8A59> <22ED> <8A40> <22F2> <8A52> <22F3> <8A48> <22F4> <8A51> <22F5> <8A4A> <22F6> <8A4C> <22F7> <8A4F> <22F8> <8C5F> <22F9> <8C81> <22FA> <8C80> <22FB> <8CBA> <22FC> <8CBE> <22FD> <8CB0> <22FE> <8CB9> <22FF> <8CB5> <2300> <8D84> <2301> <8D80> <2302> <8D89> <2303> <8DD8> <2304> <8DD3> <2305> <8DCD> <2306> <8DC7> <2307> <8DD6> <2308> <8DDC> <2309> <8DCF> <230A> <8DD5> <230B> <8DD9> <230C> <8DC8> <230D> <8DD7> <230E> <8DC5> <230F> <8EEF> <2310> <8EF7> <2311> <8EFA> <2312> <8EF9> <2313> <8EE6> <2314> <8EEE> <2315> <8EE5> <2316> <8EF5> <2319> <8EF6> <231A> <8EEB> <231B> <8EF1> <231C> <8EEC> <231D> <8EF4> <231E> <8EE9> endbfchar 100 beginbfchar <231F> <902D> <2320> <9034> <2321> <902F> <2322> <9106> <2323> <912C> <2324> <9104> <2325> <90FF> <2326> <90FC> <2327> <9108> <2328> <90F9> <2329> <90FB> <232A> <9101> <232B> <9100> <232C> <9107> <232D> <9105> <232E> <9103> <232F> <9161> <2330> <9164> <2331> <915F> <2332> <9162> <2333> <9160> <2334> <9201> <2335> <920A> <2336> <9225> <2337> <9203> <2338> <921A> <2339> <9226> <233A> <920F> <233B> <920C> <233C> <9200> <233D> <9212> <233E> <91FF> <233F> <91FD> <2340> <9206> <2341> <9204> <2342> <9227> <2343> <9202> <2344> <921C> <2345> <9224> <2346> <9219> <2347> <9217> <2348> <9205> <2349> <9216> <234A> <957B> <234B> <958D> <234C> <958C> <234D> <9590> <234E> <9687> <234F> <967E> <2352> <9683> <2353> <9680> <2354> <96C2> <2355> <96C8> <2356> <96C3> <2357> <96F1> <2358> <96F0> <2359> <976C> <235A> <9770> <235B> <976E> <235C> <9807> <235D> <98A9> <235E> <98EB> <235F> <9CE6> <2360> <9EF9> <2363> <4EB6> <2364> <50BD> <2365> <50BF> <2366> <50C6> <2367> <50AE> <2368> <50C4> <2369> <50CA> <236A> <50B4> <236B> <50C8> <236C> <50C2> <236D> <50B0> <236E> <50C1> <236F> <50BA> <2370> <50B1> <2371> <50CB> <2372> <50C9> <2373> <50B6> <2374> <50B8> <2375> <51D7> <2376> <527A> <2377> <5278> <237A> <55C3> <237B> <55DB> <237C> <55CC> <237D> <55D0> <237E> <55CB> <237F> <55CA> <2380> <55DD> <2381> <55C0> <2382> <55D4> <2383> <55C4> <2384> <55E9> <2385> <55BF> <2386> <55D2> <2387> <558D> <2388> <55CF> endbfchar 100 beginbfchar <2389> <55D5> <238A> <55E2> <238B> <55D6> <238C> <55C8> <238D> <55F2> <238E> <55CD> <238F> <55D9> <2390> <55C2> <2391> <5714> <2392> <5853> <2393> <5868> <2394> <5864> <2395> <584F> <2396> <584D> <2397> <5849> <2398> <586F> <2399> <5855> <239A> <584E> <239B> <585D> <239C> <5859> <239D> <5865> <239E> <585B> <239F> <583D> <23A0> <5863> <23A1> <5871> <23A2> <58FC> <23A3> <5AC7> <23A4> <5AC4> <23A5> <5ACB> <23A6> <5ABA> <23A7> <5AB8> <23A8> <5AB1> <23A9> <5AB5> <23AA> <5AB0> <23AB> <5ABF> <23AC> <5AC8> <23AD> <5ABB> <23AE> <5AC6> <23AF> <5AB7> <23B0> <5AC0> <23B1> <5ACA> <23B2> <5AB4> <23B3> <5AB6> <23B4> <5ACD> <23B5> <5AB9> <23B6> <5A90> <23B7> <5BD6> <23BA> <5C1F> <23BB> <5C33> <23BC> <5D71> <23BD> <5D63> <23BE> <5D4A> <23BF> <5D65> <23C0> <5D72> <23C1> <5D6C> <23C2> <5D5E> <23C3> <5D68> <23C4> <5D67> <23C5> <5D62> <23C6> <5DF0> <23C7> <5E4F> <23C8> <5E4E> <23C9> <5E4A> <23CA> <5E4D> <23CB> <5E4B> <23CC> <5EC5> <23CD> <5ECC> <23CE> <5EC6> <23CF> <5ECB> <23D0> <5EC7> <23D1> <5F40> <23D2> <5FAF> <23D3> <5FAD> <23D4> <60F7> <23D7> <612B> <23D8> <6145> <23D9> <6136> <23DA> <6132> <23DB> <612E> <23DC> <6146> <23DD> <612F> <23DE> <614F> <23DF> <6129> <23E0> <6140> <23E1> <6220> <23E2> <9168> <23E3> <6223> <23E4> <6225> <23E5> <6224> <23E6> <63C5> <23E7> <63F1> <23E8> <63EB> <23E9> <6410> <23EA> <6412> <23EB> <6409> <23EC> <6420> <23ED> <6424> <23EE> <6433> <23EF> <6443> <23F0> <641F> endbfchar 100 beginbfchar <23F1> <6415> <23F2> <6418> <23F3> <6439> <23F4> <6437> <23F7> <640C> <23F8> <6426> <23F9> <6430> <23FA> <6428> <23FB> <6441> <23FC> <6435> <23FD> <642F> <23FE> <640A> <23FF> <641A> <2400> <6440> <2401> <6425> <2402> <6427> <2403> <640B> <2404> <63E7> <2405> <641B> <2406> <642E> <2407> <6421> <2408> <640E> <2409> <656F> <240A> <6592> <240B> <65D3> <240C> <6686> <240D> <668C> <240E> <6695> <240F> <6690> <2410> <668B> <2411> <668A> <2412> <6699> <2413> <6694> <2414> <6678> <2415> <6720> <2416> <6966> <2417> <695F> <2418> <6938> <2419> <694E> <241A> <6962> <241B> <6971> <241C> <693F> <241D> <6945> <241E> <696A> <241F> <6939> <2420> <6942> <2421> <6957> <2422> <6959> <2423> <697A> <2426> <6935> <2427> <696C> <2428> <6933> <2429> <693D> <242A> <6965> <242B> <68F0> <242C> <6978> <242D> <6934> <242E> <6969> <242F> <6940> <2430> <696F> <2431> <6944> <2432> <6976> <2433> <6958> <2434> <6941> <2435> <6974> <2436> <694C> <2437> <693B> <2438> <694B> <2439> <6937> <243A> <695C> <243B> <694F> <243C> <6951> <243D> <6932> <243E> <6952> <243F> <692F> <2440> <697B> <2441> <693C> <2442> <6B46> <2443> <6B45> <2444> <6B43> <2445> <6B42> <2446> <6B48> <2447> <6B41> <2448> <6B9B> <244B> <6BF9> <244E> <6E9B> <244F> <6ED6> <2450> <6EC8> <2451> <6E8F> <2452> <6EC0> <2453> <6E9F> <2456> <6EA0> <2457> <6EB1> <2458> <6EB9> <2459> <6EC6> <245A> <6ED2> <245B> <6EBD> <245C> <6EC1> <245D> <6E9E> <245E> <6EC9> endbfchar 100 beginbfchar <245F> <6EB7> <2460> <6EB0> <2461> <6ECD> <2462> <6EA6> <2463> <6ECF> <2464> <6EB2> <2465> <6EBE> <2466> <6EC3> <2467> <6EDC> <2468> <6ED8> <2469> <6E99> <246A> <6E92> <246B> <6E8E> <246C> <6E8D> <246D> <6EA4> <246E> <6EA1> <246F> <6EBF> <2470> <6EB3> <2471> <6ED0> <2472> <6ECA> <2473> <6E97> <2474> <6EAE> <2475> <6EA3> <2476> <7147> <2477> <7154> <2478> <7152> <2479> <7163> <247A> <7160> <247B> <7141> <247C> <715D> <247D> <7162> <247E> <7172> <247F> <7178> <2480> <716A> <2481> <7161> <2482> <7142> <2483> <7158> <2484> <7143> <2485> <714B> <2486> <7170> <2487> <715F> <2488> <7150> <2489> <7153> <248A> <7144> <248B> <714D> <248C> <715A> <248D> <724F> <248E> <728D> <248F> <728C> <2490> <7291> <2491> <7290> <2492> <728E> <2493> <733C> <2494> <7342> <2495> <733B> <2496> <733A> <2497> <7340> <2498> <734A> <2499> <7349> <249A> <7444> <249D> <7452> <249E> <7451> <249F> <7457> <24A0> <7440> <24A3> <744E> <24A4> <7442> <24A5> <7446> <24A6> <744D> <24A7> <7454> <24A8> <74E1> <24A9> <74FF> <24AA> <74FE> <24AB> <74FD> <24AC> <751D> <24AD> <7579> <24AE> <7577> <24AF> <6983> <24B0> <75EF> <24B1> <760F> <24B2> <7603> <24B3> <75F7> <24B4> <75FE> <24B5> <75FC> <24B6> <75F9> <24B7> <75F8> <24B8> <7610> <24B9> <75FB> <24BA> <75F6> <24BB> <75ED> <24BC> <75F5> <24BD> <75FD> <24BE> <7699> <24BF> <76B5> <24C0> <76DD> <24C1> <7755> <24C4> <7752> <24C5> <7756> <24C6> <775A> <24C7> <7769> <24C8> <7767> endbfchar 100 beginbfchar <24C9> <7754> <24CA> <7759> <24CB> <776D> <24CC> <77E0> <24CD> <7887> <24CE> <789A> <24CF> <7894> <24D0> <788F> <24D1> <7884> <24D2> <7895> <24D5> <78A1> <24D6> <7883> <24D7> <7879> <24D8> <7899> <24D9> <7880> <24DA> <7896> <24DB> <787B> <24DC> <797C> <24DD> <7982> <24DE> <797D> <24DF> <7979> <24E0> <7A11> <24E3> <7A12> <24E4> <7A17> <24E5> <7A15> <24E6> <7A22> <24E7> <7A13> <24E8> <7A1B> <24E9> <7A10> <24EA> <7AA3> <24EB> <7AA2> <24EC> <7A9E> <24ED> <7AEB> <24EE> <7B66> <24EF> <7B64> <24F0> <7B6D> <24F1> <7B74> <24F2> <7B69> <24F3> <7B72> <24F4> <7B65> <24F5> <7B73> <24F6> <7B71> <24F7> <7B70> <24F8> <7B61> <24F9> <7B78> <24FA> <7B76> <24FB> <7B63> <24FC> <7CB2> <24FD> <7CB4> <24FE> <7CAF> <24FF> <7D88> <2500> <7D86> <2501> <7D80> <2502> <7D8D> <2503> <7D7F> <2504> <7D85> <2505> <7D7A> <2506> <7D8E> <2507> <7D7B> <2508> <7D83> <2509> <7D7C> <250A> <7D8C> <250B> <7D94> <250C> <7D84> <250D> <7D7D> <250E> <7D92> <250F> <7F6D> <2510> <7F6B> <2513> <7F6C> <2514> <7FA6> <2515> <7FA5> <2516> <7FA7> <2519> <8021> <251A> <8164> <251B> <8160> <251C> <8177> <251D> <815C> <251E> <8169> <251F> <815B> <2520> <8162> <2521> <8172> <2522> <6721> <2523> <815E> <2524> <8176> <2525> <8167> <2526> <816F> <2527> <8144> <2528> <8161> <2529> <821D> <252A> <8249> <252B> <8244> <252C> <8240> <252D> <8242> <252E> <8245> <252F> <84F1> <2530> <843F> <2531> <8456> <2532> <8476> <2533> <8479> <2534> <848F> endbfchar 100 beginbfchar <2535> <848D> <2536> <8465> <2537> <8451> <2538> <8440> <2539> <8486> <253A> <8467> <253B> <8430> <253C> <844D> <253D> <847D> <253E> <845A> <253F> <8459> <2540> <8474> <2541> <8473> <2542> <845D> <2543> <8507> <2544> <845E> <2545> <8437> <2546> <843A> <2547> <8434> <2548> <847A> <2549> <8443> <254A> <8478> <254B> <8432> <254C> <8445> <254D> <8429> <254E> <83D9> <254F> <844B> <2550> <842F> <2551> <8442> <2552> <842D> <2553> <845F> <2554> <8470> <2555> <8439> <2556> <844E> <2557> <844C> <2558> <8452> <2559> <846F> <255A> <84C5> <255B> <848E> <255C> <843B> <255D> <8447> <255E> <8436> <255F> <8433> <2560> <8468> <2561> <847E> <2562> <8444> <2563> <842B> <2564> <8460> <2565> <8454> <2566> <846E> <2567> <8450> <2568> <870B> <2569> <8704> <256A> <86F7> <256B> <870C> <256C> <86FA> <256D> <86D6> <256E> <86F5> <256F> <874D> <2570> <86F8> <2571> <870E> <2572> <8709> <2573> <8701> <2574> <86F6> <2575> <870D> <2576> <8705> <2577> <88D6> <2578> <88CB> <257B> <88DE> <257C> <88DB> <257D> <88DA> <257E> <88CC> <257F> <88D0> <2580> <8985> <2581> <899B> <2582> <89DF> <2583> <89E5> <2584> <89E4> <2585> <89E1> <2586> <89E0> <2587> <89E2> <2588> <89DC> <2589> <89E6> <258A> <8A76> <258B> <8A86> <258C> <8A7F> <258D> <8A61> <258E> <8A3F> <258F> <8A77> <2590> <8A82> <2591> <8A84> <2592> <8A75> <2593> <8A83> <2594> <8A81> <2595> <8A74> <2596> <8A7A> <2597> <8C3C> <2598> <8C4B> <2599> <8C4A> <259A> <8C65> endbfchar 100 beginbfchar <259B> <8C64> <259C> <8C66> <259D> <8C86> <25A0> <8CCC> <25A3> <8D91> <25A4> <8D8C> <25A7> <8D8D> <25AA> <8D90> <25AB> <8D92> <25AC> <8DF0> <25AD> <8DE0> <25AE> <8DEC> <25AF> <8DF1> <25B0> <8DEE> <25B1> <8DD0> <25B2> <8DE9> <25B3> <8DE3> <25B4> <8DE2> <25B5> <8DE7> <25B6> <8DF2> <25B7> <8DEB> <25B8> <8DF4> <25B9> <8F06> <25BA> <8EFF> <25BB> <8F01> <25BC> <8F00> <25BD> <8F05> <25C0> <8F02> <25C1> <8F0B> <25C2> <9052> <25C3> <903F> <25C4> <9044> <25C5> <9049> <25C6> <903D> <25C7> <9110> <25C8> <910D> <25C9> <910F> <25CA> <9111> <25CB> <9116> <25CC> <9114> <25CD> <910B> <25CE> <910E> <25D1> <9248> <25D2> <9252> <25D3> <9230> <25D4> <923A> <25D5> <9266> <25D6> <9233> <25D7> <9265> <25D8> <925E> <25D9> <9283> <25DA> <922E> <25DB> <924A> <25DC> <9246> <25DD> <926D> <25DE> <926C> <25DF> <924F> <25E0> <9260> <25E1> <9267> <25E2> <926F> <25E3> <9236> <25E4> <9261> <25E5> <9270> <25E6> <9231> <25E7> <9254> <25E8> <9263> <25E9> <9250> <25EA> <9272> <25EB> <924E> <25EC> <9253> <25ED> <924C> <25EE> <9256> <25EF> <9232> <25F0> <959F> <25F1> <959C> <25F2> <959E> <25F3> <959B> <25F6> <9691> <25F7> <9697> <25F8> <96CE> <25F9> <96FA> <25FA> <96FD> <25FB> <96F8> <25FC> <96F5> <25FD> <9773> <2600> <9772> <2601> <980F> <2604> <98AC> <2605> <98F6> <2606> <98F9> <2607> <99AF> <2608> <99B2> <2609> <99B0> <260A> <99B5> <260B> <9AAD> <260C> <9AAB> <260D> <9B5B> <260E> <9CEA> <260F> <9CED> <2610> <9CE7> endbfchar 100 beginbfchar <2611> <9E80> <2612> <9EFD> <2613> <50E6> <2614> <50D4> <2615> <50D7> <2616> <50E8> <2617> <50F3> <2618> <50DB> <2619> <50EA> <261A> <50DD> <261B> <50E4> <261C> <50D3> <261D> <50EC> <261E> <50F0> <261F> <50EF> <2620> <50E3> <2621> <50E0> <2622> <51D8> <2625> <52E9> <2626> <52EB> <2627> <5330> <2628> <53AC> <2629> <5627> <262A> <5615> <262B> <560C> <262C> <5612> <262D> <55FC> <262E> <560F> <262F> <561C> <2630> <5601> <2631> <5613> <2632> <5602> <2633> <55FA> <2634> <561D> <2635> <5604> <2636> <55FF> <2637> <55F9> <2638> <5889> <2639> <587C> <263A> <5890> <263B> <5898> <263C> <5886> <263D> <5881> <263E> <587F> <263F> <5874> <2640> <588B> <2641> <587A> <2642> <5887> <2643> <5891> <2644> <588E> <2645> <5876> <2646> <5882> <2647> <5888> <2648> <587B> <2649> <5894> <264A> <588F> <264B> <58FE> <264C> <596B> <264D> <5ADC> <264E> <5AEE> <264F> <5AE5> <2650> <5AD5> <2651> <5AEA> <2652> <5ADA> <2653> <5AED> <2654> <5AEB> <2655> <5AF3> <2656> <5AE2> <2657> <5AE0> <2658> <5ADB> <2659> <5AEC> <265A> <5ADE> <265B> <5ADD> <265C> <5AD9> <265D> <5AE8> <265E> <5ADF> <265F> <5B77> <2660> <5BE0> <2661> <5BE3> <2662> <5C63> <2663> <5D82> <2664> <5D80> <2665> <5D7D> <2666> <5D86> <2667> <5D7A> <2668> <5D81> <2669> <5D77> <266A> <5D8A> <266B> <5D89> <266C> <5D88> <266D> <5D7E> <266E> <5D7C> <266F> <5D8D> <2670> <5D79> <2671> <5D7F> <2674> <5E53> <2675> <5ED8> <2676> <5ED1> <2677> <5ED7> <2678> <5ECE> endbfchar 100 beginbfchar <2679> <5EDC> <267A> <5ED5> <267B> <5ED9> <267C> <5ED2> <267D> <5ED4> <267E> <5F44> <267F> <5F43> <2680> <5F6F> <2681> <5FB6> <2682> <612C> <2683> <6128> <2684> <6141> <2685> <615E> <2686> <6171> <2687> <6173> <268A> <6172> <268B> <616C> <268C> <6180> <268D> <6174> <268E> <6154> <268F> <617A> <2690> <615B> <2691> <6165> <2692> <613B> <2693> <616A> <2694> <6161> <2695> <6156> <2696> <6229> <2697> <6227> <2698> <622B> <2699> <642B> <269A> <644D> <269B> <645B> <269C> <645D> <269D> <6474> <269E> <6476> <26A1> <647D> <26A2> <6475> <26A3> <6466> <26A4> <64A6> <26A5> <644E> <26A6> <6482> <26A7> <645E> <26A8> <645C> <26A9> <644B> <26AA> <6453> <26AB> <6460> <26AC> <6450> <26AD> <647F> <26AE> <643F> <26AF> <646C> <26B0> <646B> <26B1> <6459> <26B2> <6465> <26B3> <6477> <26B4> <6573> <26B5> <65A0> <26B6> <66A1> <26B7> <66A0> <26B8> <669F> <26B9> <6705> <26BA> <6704> <26BB> <6722> <26BC> <69B1> <26BD> <69B6> <26BE> <69C9> <26BF> <69A0> <26C0> <69CE> <26C1> <6996> <26C2> <69B0> <26C3> <69AC> <26C4> <69BC> <26C5> <6991> <26C6> <6999> <26C7> <698E> <26C8> <69A7> <26C9> <698D> <26CA> <69A9> <26CB> <69BE> <26CC> <69AF> <26CD> <69BF> <26CE> <69C4> <26CF> <69BD> <26D0> <69A4> <26D1> <69D4> <26D2> <69B9> <26D3> <69CA> <26D4> <699A> <26D5> <69CF> <26D6> <69B3> <26D7> <6993> <26D8> <69AA> <26D9> <69A1> <26DA> <699E> <26DB> <69D9> <26DC> <6997> <26DD> <6990> <26DE> <69C2> <26DF> <69B5> <26E0> <69A5> endbfchar 100 beginbfchar <26E1> <69C6> <26E2> <6B4A> <26E3> <6B4D> <26E4> <6B4B> <26EA> <6BFE> <26EB> <6ECE> <26EC> <6EF5> <26ED> <6EF1> <26EE> <6F03> <26EF> <6F25> <26F0> <6EF8> <26F1> <6F37> <26F2> <6EFB> <26F3> <6F2E> <26F4> <6F09> <26F5> <6F4E> <26F8> <6F27> <26F9> <6F18> <26FA> <6F3B> <26FB> <6F12> <26FC> <6EED> <26FD> <6F0A> <26FE> <6F36> <26FF> <6F73> <2700> <6EF9> <2701> <6EEE> <2702> <6F2D> <2703> <6F40> <2704> <6F30> <2705> <6F3C> <2706> <6F35> <2707> <6EEB> <2708> <6F07> <2709> <6F0E> <270A> <6F43> <270B> <6F05> <270C> <6EFD> <270D> <6EF6> <270E> <6F39> <270F> <6F1C> <2710> <6EFC> <2711> <6F3A> <2712> <6F1F> <2713> <6F0D> <2714> <6F1E> <2715> <6F08> <2716> <6F21> <2717> <7187> <2718> <7190> <2719> <7189> <271A> <7180> <271B> <7185> <271C> <7182> <271D> <718F> <271E> <717B> <271F> <7186> <2720> <7181> <2721> <7197> <2722> <7244> <2723> <7253> <2724> <7297> <2725> <7295> <2726> <7293> <2727> <7343> <2728> <734D> <2729> <7351> <272A> <734C> <272B> <7462> <272C> <7473> <272D> <7471> <272E> <7475> <272F> <7472> <2730> <7467> <2731> <746E> <2732> <7500> <2735> <757D> <2736> <7590> <2737> <7616> <2738> <7608> <2739> <760C> <273A> <7615> <273B> <7611> <273C> <760A> <273D> <7614> <273E> <76B8> <273F> <7781> <2740> <777C> <2741> <7785> <2742> <7782> <2743> <776E> <2744> <7780> <2745> <776F> <2746> <777E> <2747> <7783> <2748> <78B2> <2749> <78AA> <274A> <78B4> <274B> <78AD> <274C> <78A8> <274D> <787E> endbfchar 100 beginbfchar <274E> <78AB> <274F> <789E> <2750> <78A5> <2751> <78A0> <2752> <78AC> <2753> <78A2> <2754> <78A4> <2755> <7998> <2758> <7996> <2759> <7995> <275A> <7994> <275B> <7993> <275C> <7997> <275D> <7988> <275E> <7992> <275F> <7990> <2760> <7A2B> <2761> <7A4A> <2762> <7A30> <2763> <7A2F> <2764> <7A28> <2765> <7A26> <2766> <7AA8> <2769> <7AEE> <276A> <7B88> <276B> <7B9C> <276C> <7B8A> <276D> <7B91> <276E> <7B90> <276F> <7B96> <2770> <7B8D> <2771> <7B8C> <2772> <7B9B> <2773> <7B8E> <2774> <7B85> <2775> <7B98> <2776> <5284> <2777> <7B99> <2778> <7BA4> <2779> <7B82> <277A> <7CBB> <277B> <7CBF> <277C> <7CBC> <277D> <7CBA> <277E> <7DA7> <277F> <7DB7> <2780> <7DC2> <2781> <7DA3> <2782> <7DAA> <2783> <7DC1> <2784> <7DC0> <2785> <7DC5> <2786> <7D9D> <2787> <7DCE> <2788> <7DC4> <2789> <7DC6> <278C> <7DAF> <278D> <7DB9> <278E> <7D96> <278F> <7DBC> <2790> <7D9F> <2791> <7DA6> <2792> <7DAE> <2793> <7DA9> <2794> <7DA1> <2795> <7DC9> <2796> <7F73> <2799> <7FE5> <279A> <7FDE> <279B> <8024> <279C> <805D> <279D> <805C> <279E> <8189> <279F> <8186> <27A0> <8183> <27A1> <8187> <27A2> <818D> <27A3> <818C> <27A4> <818B> <27A5> <8215> <27A6> <8497> <27A7> <84A4> <27A8> <84A1> <27A9> <849F> <27AA> <84BA> <27AB> <84CE> <27AC> <84C2> <27AD> <84AC> <27AE> <84AE> <27AF> <84AB> <27B0> <84B9> <27B1> <84B4> <27B2> <84C1> <27B3> <84CD> <27B4> <84AA> <27B5> <849A> <27B6> <84B1> <27B7> <84D0> <27B8> <849D> <27B9> <84A7> endbfchar 100 beginbfchar <27BA> <84BB> <27BB> <84A2> <27BC> <8494> <27BD> <84C7> <27BE> <84CC> <27BF> <849B> <27C0> <84A9> <27C1> <84AF> <27C2> <84A8> <27C3> <84D6> <27C4> <8498> <27C5> <84B6> <27C6> <84CF> <27C7> <84A0> <27C8> <84D7> <27C9> <84D4> <27CA> <84D2> <27CB> <84DB> <27CC> <84B0> <27CD> <8491> <27CE> <8661> <27CF> <8733> <27D0> <8723> <27D1> <8728> <27D2> <876B> <27D3> <8740> <27D4> <872E> <27D5> <871E> <27D6> <8721> <27D7> <8719> <27D8> <871B> <27D9> <8743> <27DA> <872C> <27DB> <8741> <27DC> <873E> <27DD> <8746> <27DE> <8720> <27DF> <8732> <27E0> <872A> <27E1> <872D> <27E2> <873C> <27E3> <8712> <27E4> <873A> <27E5> <8731> <27E6> <8735> <27E7> <8742> <27EA> <8738> <27EB> <8724> <27EC> <871A> <27ED> <8730> <27EE> <8711> <27EF> <88F7> <27F0> <88E7> <27F3> <88FA> <27F4> <88FE> <27F5> <88EE> <27F6> <88FC> <27F7> <88F6> <27F8> <88FB> <27F9> <88F0> <27FA> <88EC> <27FB> <88EB> <27FC> <899D> <27FD> <89A1> <27FE> <899F> <27FF> <899E> <2800> <89E9> <2801> <89EB> <2802> <89E8> <2803> <8AAB> <2804> <8A99> <2805> <8A8B> <2806> <8A92> <2807> <8A8F> <2808> <8A96> <2809> <8C3D> <280C> <8CD5> <280D> <8CCF> <280E> <8CD7> <280F> <8D96> <2810> <8E09> <2811> <8E02> <2812> <8DFF> <2813> <8E0D> <2814> <8DFD> <2815> <8E0A> <2816> <8E03> <2817> <8E07> <2818> <8E06> <2819> <8E05> <281A> <8DFE> <281B> <8E00> <281C> <8E04> <281F> <8F0E> <2820> <8F0D> <2821> <9123> <2822> <911C> <2823> <9120> <2824> <9122> <2825> <911F> endbfchar 100 beginbfchar <2826> <911D> <2827> <911A> <2828> <9124> <2829> <9121> <282A> <911B> <282B> <917A> <282C> <9172> <282D> <9179> <282E> <9173> <282F> <92A5> <2830> <92A4> <2831> <9276> <2832> <929B> <2833> <927A> <2834> <92A0> <2835> <9294> <2836> <92AA> <2837> <928D> <2838> <92A6> <2839> <929A> <283A> <92AB> <283B> <9279> <283C> <9297> <283D> <927F> <283E> <92A3> <283F> <92EE> <2840> <928E> <2841> <9282> <2842> <9295> <2843> <92A2> <2844> <927D> <2845> <9288> <2846> <92A1> <2847> <928A> <2848> <9286> <2849> <928C> <284A> <9299> <284B> <92A7> <284C> <927E> <284D> <9287> <284E> <92A9> <284F> <929D> <2850> <928B> <2851> <922D> <2852> <969E> <2853> <96A1> <2854> <96FF> <2855> <9758> <2856> <977D> <2857> <977A> <2858> <977E> <2859> <9783> <285A> <9780> <285B> <9782> <285C> <977B> <285D> <9784> <285E> <9781> <285F> <977F> <2860> <97CE> <2861> <97CD> <2862> <9816> <2865> <9902> <2866> <9900> <2867> <9907> <2868> <999D> <2869> <999C> <286A> <99C3> <286B> <99B9> <286C> <99BB> <286D> <99BA> <286E> <99C2> <286F> <99BD> <2870> <99C7> <2871> <9AB1> <2872> <9AE3> <2873> <9AE7> <2878> <9B5F> <287B> <9CF5> <287C> <9EA7> <287D> <50FF> <287E> <5103> <287F> <5130> <2880> <50F8> <2883> <50F6> <2884> <50FE> <2887> <50FD> <2888> <510A> <288B> <52F1> <288C> <52EF> <288D> <5648> <288E> <5642> <288F> <564C> <2890> <5635> <2891> <5641> <2892> <564A> <2893> <5649> <2894> <5646> <2895> <5658> <2896> <565A> <2897> <5640> endbfchar 100 beginbfchar <2898> <5633> <2899> <563D> <289A> <562C> <289B> <563E> <289C> <5638> <289D> <562A> <289E> <563A> <289F> <571A> <28A0> <58AB> <28A1> <589D> <28A2> <58B1> <28A3> <58A0> <28A4> <58A3> <28A5> <58AF> <28A6> <58AC> <28A7> <58A5> <28A8> <58A1> <28A9> <58FF> <28AA> <5AFF> <28AB> <5AF4> <28AC> <5AFD> <28AD> <5AF7> <28AE> <5AF6> <28AF> <5B03> <28B0> <5AF8> <28B1> <5B02> <28B2> <5AF9> <28B3> <5B01> <28B4> <5B07> <28B5> <5B05> <28B6> <5B0F> <28B7> <5C67> <28B8> <5D99> <28B9> <5D97> <28BA> <5D9F> <28BB> <5D92> <28BC> <5DA2> <28BD> <5D93> <28BE> <5D95> <28BF> <5DA0> <28C0> <5D9C> <28C1> <5DA1> <28C2> <5D9A> <28C3> <5D9E> <28C4> <5E69> <28C5> <5E5D> <28C6> <5E60> <28C7> <5E5C> <28C8> <7DF3> <28C9> <5EDB> <28CA> <5EDE> <28CB> <5EE1> <28CC> <5F49> <28CD> <5FB2> <28CE> <618B> <28CF> <6183> <28D0> <6179> <28D1> <61B1> <28D2> <61B0> <28D3> <61A2> <28D4> <6189> <28D5> <619B> <28D6> <6193> <28D7> <61AF> <28D8> <61AD> <28D9> <619F> <28DA> <6192> <28DB> <61AA> <28DC> <61A1> <28DD> <618D> <28DE> <6166> <28DF> <61B3> <28E0> <622D> <28E1> <646E> <28E2> <6470> <28E3> <6496> <28E4> <64A0> <28E5> <6485> <28E6> <6497> <28E7> <649C> <28E8> <648F> <28E9> <648B> <28EA> <648A> <28EB> <648C> <28EC> <64A3> <28ED> <649F> <28EE> <6468> <28EF> <64B1> <28F0> <6498> <28F1> <6576> <28F2> <657A> <28F3> <6579> <28F4> <657B> <28F7> <66B5> <28F8> <66B0> <28F9> <66A9> <28FA> <66B2> <28FB> <66B7> <28FC> <66AA> <28FD> <66AF> endbfchar 100 beginbfchar <28FE> <6A00> <28FF> <6A06> <2900> <6A17> <2901> <69E5> <2902> <69F8> <2903> <6A15> <2904> <69F1> <2905> <69E4> <2906> <6A20> <2907> <69FF> <2908> <69EC> <2909> <69E2> <290A> <6A1B> <290B> <6A1D> <290C> <69FE> <290D> <6A27> <290E> <69F2> <290F> <69EE> <2910> <6A14> <2911> <69F7> <2912> <69E7> <2913> <6A40> <2914> <6A08> <2915> <69E6> <2916> <69FB> <2917> <6A0D> <2918> <69FC> <2919> <69EB> <291A> <6A09> <291B> <6A04> <291C> <6A18> <291D> <6A25> <291E> <6A0F> <291F> <69F6> <2920> <6A26> <2921> <6A07> <2922> <69F4> <2923> <6A16> <2924> <6B51> <2925> <6BA5> <2926> <6BA3> <2927> <6BA2> <2928> <6BA6> <2929> <6C01> <292A> <6C00> <292B> <6BFF> <292C> <6C02> <292D> <6F41> <292E> <6F26> <292F> <6F7E> <2930> <6F87> <2931> <6FC6> <2932> <6F92> <2933> <6F8D> <2934> <6F89> <2935> <6F8C> <2936> <6F62> <2937> <6F4F> <2938> <6F85> <2939> <6F5A> <293A> <6F96> <293B> <6F76> <293C> <6F6C> <293D> <6F82> <293E> <6F55> <293F> <6F72> <2940> <6F52> <2941> <6F50> <2942> <6F57> <2943> <6F94> <2944> <6F93> <2945> <6F5D> <2946> <6F00> <2947> <6F61> <2948> <6F6B> <2949> <6F7D> <294A> <6F67> <294B> <6F90> <294C> <6F53> <294D> <6F8B> <294E> <6F69> <294F> <6F7F> <2950> <6F95> <2951> <6F63> <2952> <6F77> <2953> <6F6A> <2954> <6F7B> <2955> <71B2> <2956> <71AF> <2957> <719B> <2958> <71B0> <2959> <71A0> <295A> <719A> <295B> <71A9> <295C> <71B5> <295D> <719D> <295E> <71A5> <295F> <719E> <2960> <71A4> <2961> <71A1> endbfchar 100 beginbfchar <2962> <71AA> <2963> <719C> <2964> <71A7> <2965> <71B3> <2966> <7298> <2967> <729A> <2968> <7358> <2969> <7352> <296D> <735D> <296E> <735B> <296F> <7361> <2970> <735A> <2971> <7359> <2972> <7362> <2973> <7487> <2976> <7486> <2977> <7481> <2978> <747D> <2979> <7485> <297A> <7488> <297B> <747C> <297C> <7479> <297D> <7508> <297E> <7507> <297F> <757E> <2980> <7625> <2981> <761E> <2982> <7619> <2983> <761D> <2984> <761C> <2985> <7623> <2986> <761A> <2987> <7628> <2988> <761B> <298C> <769B> <298D> <778D> <298E> <778F> <298F> <7789> <2990> <7788> <2991> <78CD> <2992> <78BB> <2993> <78CF> <2994> <78CC> <2995> <78D1> <2996> <78CE> <2997> <78D4> <2998> <78C8> <299B> <78C9> <299C> <799A> <299D> <79A1> <299E> <79A0> <299F> <799C> <29A0> <79A2> <29A1> <799B> <29A2> <6B76> <29A3> <7A39> <29A4> <7AB2> <29A5> <7AB4> <29A6> <7AB3> <29A7> <7BB7> <29A8> <7BCB> <29A9> <7BBE> <29AA> <7BAC> <29AB> <7BCE> <29AC> <7BAF> <29AD> <7BB9> <29AE> <7BCA> <29AF> <7BB5> <29B0> <7CC5> <29B1> <7CC8> <29B2> <7CCC> <29B3> <7CCB> <29B4> <7DF7> <29B5> <7DDB> <29B6> <7DEA> <29B7> <7DE7> <29B8> <7DD7> <29B9> <7DE1> <29BA> <7E03> <29BB> <7DFA> <29BC> <7DE6> <29BD> <7DF6> <29BE> <7DF1> <29BF> <7DF0> <29C0> <7DEE> <29C1> <7DDF> <29C2> <7F76> <29C3> <7FAC> <29C4> <7FB0> <29C5> <7FAD> <29C6> <7FED> <29C7> <7FEB> <29C8> <7FEA> <29C9> <7FEC> <29CA> <7FE6> <29CB> <7FE8> <29CC> <8064> <29CD> <8067> <29CE> <81A3> <29CF> <819F> endbfchar 100 beginbfchar <29D0> <819E> <29D1> <8195> <29D2> <81A2> <29D3> <8199> <29D4> <8197> <29D5> <8216> <29D6> <824F> <29D7> <8253> <29D8> <8252> <29D9> <8250> <29DA> <824E> <29DB> <8251> <29DC> <8524> <29DD> <853B> <29DE> <850F> <29DF> <8500> <29E0> <8529> <29E1> <850E> <29E2> <8509> <29E3> <850D> <29E4> <851F> <29E5> <850A> <29E6> <8527> <29E7> <851C> <29E8> <84FB> <29E9> <852B> <29EA> <84FA> <29EB> <8508> <29EC> <850C> <29ED> <84F4> <29EE> <852A> <29EF> <84F2> <29F0> <8515> <29F1> <84F7> <29F2> <84EB> <29F3> <84F3> <29F4> <84FC> <29F5> <8512> <29F6> <84EA> <29F7> <84E9> <29F8> <8516> <29F9> <84FE> <29FA> <8528> <29FB> <851D> <29FC> <852E> <29FD> <8502> <29FE> <84FD> <29FF> <851E> <2A00> <84F6> <2A01> <8531> <2A02> <8526> <2A05> <84F0> <2A06> <84EF> <2A07> <84F9> <2A08> <8518> <2A09> <8520> <2A0A> <8530> <2A0B> <850B> <2A0C> <8519> <2A0D> <852F> <2A0E> <8662> <2A0F> <8756> <2A12> <8777> <2A13> <87E1> <2A14> <8773> <2A15> <8758> <2A16> <8754> <2A17> <875B> <2A18> <8752> <2A19> <8761> <2A1A> <875A> <2A1B> <8751> <2A1C> <875E> <2A1D> <876D> <2A1E> <876A> <2A1F> <8750> <2A20> <874E> <2A21> <875F> <2A22> <875D> <2A23> <876F> <2A24> <876C> <2A25> <877A> <2A26> <876E> <2A27> <875C> <2A28> <8765> <2A29> <874F> <2A2A> <877B> <2A2B> <8775> <2A2C> <8762> <2A2D> <8767> <2A2E> <8769> <2A2F> <885A> <2A30> <8905> <2A31> <890C> <2A32> <8914> <2A33> <890B> <2A37> <8906> <2A38> <8916> <2A39> <8911> <2A3A> <890E> endbfchar 100 beginbfchar <2A3B> <8909> <2A3C> <89A2> <2A3D> <89A4> <2A3E> <89A3> <2A3F> <89ED> <2A40> <89F0> <2A41> <89EC> <2A42> <8ACF> <2A43> <8AC6> <2A44> <8AB8> <2A45> <8AD3> <2A46> <8AD1> <2A49> <8ABB> <2A4A> <8AD7> <2A4B> <8ABE> <2A4C> <8AC0> <2A4D> <8AC5> <2A4E> <8AD8> <2A4F> <8AC3> <2A50> <8ABA> <2A51> <8ABD> <2A52> <8AD9> <2A53> <8C3E> <2A54> <8C4D> <2A55> <8C8F> <2A56> <8CE5> <2A57> <8CDF> <2A58> <8CD9> <2A59> <8CE8> <2A5A> <8CDA> <2A5B> <8CDD> <2A5C> <8CE7> <2A5D> <8DA0> <2A5E> <8D9C> <2A5F> <8DA1> <2A60> <8D9B> <2A61> <8E20> <2A62> <8E23> <2A63> <8E25> <2A64> <8E24> <2A65> <8E2E> <2A66> <8E15> <2A67> <8E1B> <2A68> <8E16> <2A69> <8E11> <2A6A> <8E19> <2A6D> <8E14> <2A6E> <8E12> <2A6F> <8E18> <2A70> <8E13> <2A71> <8E1C> <2A72> <8E17> <2A73> <8E1A> <2A74> <8F2C> <2A75> <8F24> <2A76> <8F18> <2A77> <8F1A> <2A78> <8F20> <2A79> <8F23> <2A7C> <9073> <2A7D> <9070> <2A7E> <906F> <2A7F> <9067> <2A80> <906B> <2A81> <912F> <2A82> <912B> <2A85> <9132> <2A86> <9126> <2A87> <912E> <2A8A> <918A> <2A8D> <9184> <2A8E> <9180> <2A8F> <92D0> <2A92> <92C0> <2A93> <92D9> <2A94> <92B6> <2A95> <92CF> <2A96> <92F1> <2A97> <92DF> <2A98> <92D8> <2A99> <92E9> <2A9A> <92D7> <2A9B> <92DD> <2A9C> <92CC> <2A9D> <92EF> <2A9E> <92C2> <2A9F> <92E8> <2AA0> <92CA> <2AA1> <92C8> <2AA2> <92CE> <2AA3> <92E6> <2AA4> <92CD> <2AA5> <92D5> <2AA6> <92C9> <2AA7> <92E0> <2AA8> <92DE> <2AA9> <92E7> <2AAA> <92D1> <2AAB> <92D3> <2AAC> <92B5> endbfchar 100 beginbfchar <2AAD> <92E1> <2AAE> <9325> <2AAF> <92C6> <2AB0> <92B4> <2AB1> <957C> <2AB2> <95AC> <2AB3> <95AB> <2AB4> <95AE> <2AB5> <95B0> <2AB6> <96A4> <2AB7> <96A2> <2AB8> <96D3> <2AB9> <9705> <2ABA> <9708> <2ABB> <9702> <2ABC> <975A> <2ABD> <978A> <2ABE> <978E> <2ABF> <9788> <2AC0> <97D0> <2AC1> <97CF> <2AC2> <981E> <2AC3> <981D> <2AC4> <9826> <2AC5> <9829> <2AC6> <9828> <2AC7> <9820> <2AC8> <981B> <2AC9> <9827> <2ACA> <98B2> <2ACB> <9908> <2ACC> <98FA> <2ACD> <9911> <2ACE> <9914> <2AD1> <9915> <2AD2> <99DC> <2AD3> <99CD> <2AD4> <99CF> <2AD7> <99CE> <2AD8> <99C9> <2AD9> <99D6> <2ADA> <99D8> <2ADB> <99CB> <2ADC> <99D7> <2ADD> <99CC> <2ADE> <9AB3> <2ADF> <9AEC> <2AE0> <9AEB> <2AE1> <9AF3> <2AE2> <9AF2> <2AE3> <9AF1> <2AE4> <9B46> <2AE5> <9B43> <2AE6> <9B67> <2AE7> <9B74> <2AE8> <9B71> <2AE9> <9B66> <2AEA> <9B76> <2AEB> <9B75> <2AEC> <9B70> <2AED> <9B68> <2AEE> <9B64> <2AEF> <9B6C> <2AF0> <9CFC> <2AF1> <9CFA> <2AF2> <9CFD> <2AF3> <9CFF> <2AF4> <9CF7> <2AF5> <9D07> <2AF6> <9D00> <2AF7> <9CF9> <2AF8> <9CFB> <2AF9> <9D08> <2AFA> <9D05> <2AFB> <9D04> <2AFC> <9E83> <2AFD> <9ED3> <2B00> <511C> <2B01> <5113> <2B02> <5117> <2B03> <511A> <2B04> <5111> <2B05> <51DE> <2B06> <5334> <2B07> <53E1> <2B08> <5670> <2B09> <5660> <2B0A> <566E> <2B0B> <5673> <2B0C> <5666> <2B0D> <5663> <2B0E> <566D> <2B0F> <5672> <2B10> <565E> <2B11> <5677> <2B12> <571C> <2B13> <571B> <2B14> <58C8> <2B15> <58BD> <2B16> <58C9> endbfchar 100 beginbfchar <2B17> <58BF> <2B18> <58BA> <2B19> <58C2> <2B1A> <58BC> <2B1B> <58C6> <2B1C> <5B17> <2B1D> <5B19> <2B1E> <5B1B> <2B1F> <5B21> <2B20> <5B14> <2B21> <5B13> <2B22> <5B10> <2B23> <5B16> <2B24> <5B28> <2B25> <5B1A> <2B26> <5B20> <2B27> <5B1E> <2B28> <5BEF> <2B29> <5DAC> <2B2A> <5DB1> <2B2B> <5DA9> <2B2C> <5DA7> <2B2D> <5DB5> <2B2E> <5DB0> <2B2F> <5DAE> <2B30> <5DAA> <2B31> <5DA8> <2B32> <5DB2> <2B33> <5DAD> <2B34> <5DAF> <2B35> <5DB4> <2B38> <5E66> <2B39> <5E6F> <2B3A> <5EE9> <2B3B> <5EE7> <2B3C> <5EE6> <2B3D> <5EE8> <2B3E> <5EE5> <2B3F> <5F4B> <2B40> <5FBC> <2B41> <5FBB> <2B42> <619D> <2B43> <61A8> <2B44> <6196> <2B45> <61C5> <2B46> <61B4> <2B47> <61C6> <2B48> <61C1> <2B49> <61CC> <2B4A> <61BA> <2B4B> <61BF> <2B4C> <61B8> <2B4D> <618C> <2B4E> <64D7> <2B4F> <64D6> <2B50> <64D0> <2B51> <64CF> <2B52> <64C9> <2B53> <64BD> <2B54> <6489> <2B55> <64C3> <2B56> <64DB> <2B57> <64F3> <2B58> <64D9> <2B59> <6533> <2B5A> <657F> <2B5B> <657C> <2B5C> <65A2> <2B5D> <66C8> <2B5E> <66BE> <2B5F> <66C0> <2B62> <66CF> <2B63> <66BD> <2B64> <66BB> <2B65> <66BA> <2B66> <66CC> <2B67> <6723> <2B68> <6A34> <2B69> <6A66> <2B6A> <6A49> <2B6B> <6A67> <2B6C> <6A32> <2B6D> <6A68> <2B6E> <6A3E> <2B6F> <6A5D> <2B70> <6A6D> <2B71> <6A76> <2B72> <6A5B> <2B73> <6A51> <2B74> <6A28> <2B75> <6A5A> <2B76> <6A3B> <2B77> <6A3F> <2B78> <6A41> <2B79> <6A6A> <2B7A> <6A64> <2B7B> <6A50> <2B7C> <6A4F> <2B7D> <6A54> <2B7E> <6A6F> endbfchar 100 beginbfchar <2B7F> <6A69> <2B80> <6A60> <2B81> <6A3C> <2B82> <6A5E> <2B83> <6A56> <2B84> <6A55> <2B87> <6A46> <2B88> <6B55> <2B89> <6B54> <2B8A> <6B56> <2B8B> <6BA7> <2B8E> <6BC8> <2B8F> <6BC7> <2B90> <6C04> <2B91> <6C03> <2B92> <6C06> <2B93> <6FAD> <2B94> <6FCB> <2B95> <6FA3> <2B96> <6FC7> <2B97> <6FBC> <2B98> <6FCE> <2B99> <6FC8> <2B9A> <6F5E> <2B9B> <6FC4> <2B9C> <6FBD> <2B9D> <6F9E> <2B9E> <6FCA> <2B9F> <6FA8> <2BA0> <7004> <2BA1> <6FA5> <2BA2> <6FAE> <2BA3> <6FBA> <2BA4> <6FAC> <2BA5> <6FAA> <2BA6> <6FCF> <2BA7> <6FBF> <2BA8> <6FB8> <2BA9> <6FA2> <2BAA> <6FC9> <2BAB> <6FAB> <2BAC> <6FCD> <2BAD> <6FAF> <2BAE> <6FB2> <2BAF> <6FB0> <2BB0> <71C5> <2BB1> <71C2> <2BB2> <71BF> <2BB3> <71B8> <2BB4> <71D6> <2BB7> <71CB> <2BB8> <71D4> <2BB9> <71CA> <2BBA> <71C7> <2BBB> <71CF> <2BBC> <71BD> <2BBD> <71D8> <2BBE> <71BC> <2BBF> <71C6> <2BC4> <7369> <2BC7> <736C> <2BC8> <7365> <2BC9> <736B> <2BCA> <736A> <2BCB> <747F> <2BCC> <749A> <2BCD> <74A0> <2BCE> <7494> <2BCF> <7492> <2BD0> <7495> <2BD1> <74A1> <2BD2> <750B> <2BD3> <7580> <2BD4> <762F> <2BD5> <762D> <2BD6> <7631> <2BD7> <763D> <2BD8> <7633> <2BD9> <763C> <2BDA> <7635> <2BDB> <7632> <2BDC> <7630> <2BDD> <76BB> <2BDE> <76E6> <2BDF> <779A> <2BE0> <779D> <2BE1> <77A1> <2BE2> <779C> <2BE3> <779B> <2BE6> <7795> <2BE7> <7799> <2BE8> <7797> <2BE9> <78DD> <2BEA> <78E9> <2BEB> <78E5> <2BEC> <78EA> <2BED> <78DE> <2BEE> <78E3> <2BEF> <78DB> <2BF2> <78ED> endbfchar 100 beginbfchar <2BF5> <79A4> <2BF6> <7A44> <2BF7> <7A48> <2BF8> <7A47> <2BF9> <7AB6> <2BFA> <7AB8> <2BFB> <7AB5> <2BFC> <7AB1> <2BFD> <7AB7> <2BFE> <7BDE> <2BFF> <7BE3> <2C00> <7BE7> <2C01> <7BDD> <2C02> <7BD5> <2C03> <7BE5> <2C04> <7BDA> <2C05> <7BE8> <2C06> <7BF9> <2C07> <7BD4> <2C08> <7BEA> <2C09> <7BE2> <2C0A> <7BDC> <2C0B> <7BEB> <2C0C> <7BD8> <2C0D> <7BDF> <2C0E> <7CD2> <2C0F> <7CD4> <2C10> <7CD7> <2C13> <7E12> <2C14> <7E21> <2C15> <7E17> <2C16> <7E0C> <2C19> <7E13> <2C1A> <7E0E> <2C1B> <7E1C> <2C1C> <7E15> <2C1D> <7E1A> <2C1E> <7E22> <2C1F> <7E0B> <2C20> <7E0F> <2C21> <7E16> <2C22> <7E0D> <2C23> <7E14> <2C24> <7E25> <2C25> <7E24> <2C26> <7F43> <2C29> <7F7A> <2C2A> <7FB1> <2C2B> <7FEF> <2C2C> <802A> <2C2D> <8029> <2C2E> <806C> <2C2F> <81B1> <2C30> <81A6> <2C31> <81AE> <2C32> <81B9> <2C33> <81B5> <2C34> <81AB> <2C35> <81B0> <2C36> <81AC> <2C37> <81B4> <2C38> <81B2> <2C39> <81B7> <2C3A> <81A7> <2C3B> <81F2> <2C3F> <8556> <2C40> <8545> <2C41> <856B> <2C42> <854D> <2C43> <8553> <2C44> <8561> <2C45> <8558> <2C46> <8540> <2C47> <8546> <2C48> <8564> <2C49> <8541> <2C4A> <8562> <2C4B> <8544> <2C4C> <8551> <2C4D> <8547> <2C4E> <8563> <2C4F> <853E> <2C50> <855B> <2C51> <8571> <2C52> <854E> <2C53> <856E> <2C54> <8575> <2C55> <8555> <2C56> <8567> <2C57> <8560> <2C58> <858C> <2C59> <8566> <2C5A> <855D> <2C5B> <8554> <2C5C> <8565> <2C5D> <856C> <2C5E> <8663> <2C5F> <8665> <2C60> <8664> <2C61> <87A4> endbfchar 100 beginbfchar <2C62> <879B> <2C63> <878F> <2C64> <8797> <2C65> <8793> <2C66> <8792> <2C67> <8788> <2C68> <8781> <2C69> <8796> <2C6A> <8798> <2C6B> <8779> <2C6C> <8787> <2C6D> <87A3> <2C6E> <8785> <2C71> <879D> <2C72> <8784> <2C73> <8794> <2C74> <879C> <2C75> <879A> <2C76> <8789> <2C77> <891E> <2C78> <8926> <2C79> <8930> <2C7C> <8927> <2C7D> <8931> <2C7E> <8922> <2C7F> <8929> <2C80> <8923> <2C81> <892F> <2C82> <892C> <2C83> <891F> <2C84> <89F1> <2C85> <8AE0> <2C86> <8AE2> <2C87> <8AF2> <2C8A> <8ADD> <2C8B> <8B14> <2C8C> <8AE4> <2C8D> <8ADF> <2C8E> <8AF0> <2C8F> <8AC8> <2C90> <8ADE> <2C91> <8AE1> <2C92> <8AE8> <2C93> <8AFF> <2C94> <8AEF> <2C95> <8AFB> <2C98> <8C90> <2C99> <8CF5> <2C9A> <8CEE> <2C9B> <8CF1> <2C9C> <8CF0> <2C9D> <8CF3> <2C9E> <8D6C> <2C9F> <8D6E> <2CA0> <8DA5> <2CA1> <8DA7> <2CA2> <8E33> <2CA3> <8E3E> <2CA4> <8E38> <2CA5> <8E40> <2CA6> <8E45> <2CA7> <8E36> <2CAA> <8E41> <2CAB> <8E30> <2CAC> <8E3F> <2CAD> <8EBD> <2CAE> <8F36> <2CAF> <8F2E> <2CB0> <8F35> <2CB1> <8F32> <2CB2> <8F39> <2CB3> <8F37> <2CB4> <8F34> <2CB5> <9076> <2CB6> <9079> <2CB7> <907B> <2CB8> <9086> <2CB9> <90FA> <2CBA> <9133> <2CBD> <9193> <2CC0> <918D> <2CC1> <918F> <2CC2> <9327> <2CC3> <931E> <2CC4> <9308> <2CC5> <931F> <2CC6> <9306> <2CC7> <930F> <2CC8> <937A> <2CC9> <9338> <2CCA> <933C> <2CCB> <931B> <2CCC> <9323> <2CCD> <9312> <2CCE> <9301> <2CCF> <9346> <2CD0> <932D> <2CD1> <930E> <2CD2> <930D> <2CD3> <92CB> endbfchar 100 beginbfchar <2CD4> <931D> <2CD5> <92FA> <2CD6> <9313> <2CD7> <92F9> <2CD8> <92F7> <2CD9> <9334> <2CDA> <9302> <2CDB> <9324> <2CDC> <92FF> <2CDD> <9329> <2CDE> <9339> <2CDF> <9335> <2CE0> <932A> <2CE1> <9314> <2CE2> <930C> <2CE3> <930B> <2CE4> <92FE> <2CE5> <9309> <2CE6> <9300> <2CE7> <92FB> <2CE8> <9316> <2CE9> <95BC> <2CEA> <95CD> <2CEB> <95BE> <2CEE> <95B6> <2CEF> <95BF> <2CF0> <95B5> <2CF1> <95BD> <2CF2> <96A9> <2CF3> <96D4> <2CF4> <970B> <2CF5> <9712> <2CF6> <9710> <2CF7> <9799> <2CF8> <9797> <2CF9> <9794> <2CFA> <97F0> <2CFB> <97F8> <2CFC> <9835> <2CFD> <982F> <2CFE> <9832> <2CFF> <9924> <2D00> <991F> <2D01> <9927> <2D02> <9929> <2D03> <999E> <2D04> <99EE> <2D05> <99EC> <2D06> <99E5> <2D07> <99E4> <2D08> <99F0> <2D09> <99E3> <2D0A> <99EA> <2D0B> <99E9> <2D0C> <99E7> <2D0D> <9AB9> <2D0E> <9ABF> <2D0F> <9AB4> <2D10> <9ABB> <2D11> <9AF6> <2D12> <9AFA> <2D13> <9AF9> <2D14> <9AF7> <2D15> <9B33> <2D16> <9B80> <2D17> <9B85> <2D18> <9B87> <2D19> <9B7C> <2D1A> <9B7E> <2D1B> <9B7B> <2D1C> <9B82> <2D1D> <9B93> <2D1E> <9B92> <2D1F> <9B90> <2D20> <9B7A> <2D21> <9B95> <2D22> <9B7D> <2D23> <9B88> <2D24> <9D25> <2D25> <9D17> <2D26> <9D20> <2D27> <9D1E> <2D28> <9D14> <2D29> <9D29> <2D2A> <9D1D> <2D2B> <9D18> <2D2C> <9D22> <2D2D> <9D10> <2D2E> <9D19> <2D2F> <9D1F> <2D30> <9E88> <2D33> <9EAE> <2D34> <9EAD> <2D37> <9EFA> <2D38> <9F12> <2D39> <9F3D> <2D3A> <5126> <2D3B> <5125> <2D3C> <5122> <2D3D> <5124> endbfchar 100 beginbfchar <2D3E> <5120> <2D3F> <5129> <2D40> <52F4> <2D41> <5693> <2D44> <5686> <2D45> <5684> <2D46> <5683> <2D47> <567E> <2D48> <5682> <2D49> <567F> <2D4A> <5681> <2D4B> <58D6> <2D4C> <58D4> <2D4D> <58CF> <2D4E> <58D2> <2D4F> <5B2D> <2D50> <5B25> <2D51> <5B32> <2D52> <5B23> <2D53> <5B2C> <2D54> <5B27> <2D55> <5B26> <2D56> <5B2F> <2D57> <5B2E> <2D58> <5B7B> <2D5B> <5DB7> <2D5C> <5E6C> <2D5D> <5E6A> <2D5E> <5FBE> <2D5F> <61C3> <2D60> <61B5> <2D61> <61BC> <2D62> <61E7> <2D63> <61E0> <2D64> <61E5> <2D65> <61E4> <2D66> <61E8> <2D67> <61DE> <2D68> <64EF> <2D69> <64E9> <2D6A> <64E3> <2D6B> <64EB> <2D6C> <64E4> <2D6D> <64E8> <2D6E> <6581> <2D6F> <6580> <2D70> <65B6> <2D71> <65DA> <2D72> <66D2> <2D73> <6A8D> <2D74> <6A96> <2D75> <6A81> <2D76> <6AA5> <2D77> <6A89> <2D78> <6A9F> <2D79> <6A9B> <2D7A> <6AA1> <2D7B> <6A9E> <2D7C> <6A87> <2D7D> <6A93> <2D7E> <6A8E> <2D7F> <6A95> <2D80> <6A83> <2D81> <6AA8> <2D82> <6AA4> <2D83> <6A91> <2D84> <6A7F> <2D85> <6AA6> <2D86> <6A9A> <2D87> <6A85> <2D88> <6A8C> <2D89> <6A92> <2D8A> <6B5B> <2D8B> <6BAD> <2D8C> <6C09> <2D8D> <6FCC> <2D8E> <6FA9> <2D8F> <6FF4> <2D90> <6FD4> <2D91> <6FE3> <2D92> <6FDC> <2D93> <6FED> <2D94> <6FE7> <2D95> <6FE6> <2D96> <6FDE> <2D97> <6FF2> <2D98> <6FDD> <2D99> <6FE2> <2D9A> <6FE8> <2D9B> <71E1> <2D9C> <71F1> <2D9D> <71E8> <2D9E> <71F2> <2D9F> <71E4> <2DA0> <71F0> <2DA1> <71E2> <2DA2> <7373> <2DA5> <7497> <2DA6> <74B2> <2DA7> <74AB> endbfchar 100 beginbfchar <2DA8> <7490> <2DA9> <74AA> <2DAA> <74AD> <2DAB> <74B1> <2DAC> <74A5> <2DAD> <74AF> <2DB1> <750F> <2DB2> <7584> <2DB3> <7643> <2DB6> <7647> <2DB7> <76A4> <2DB8> <76E9> <2DB9> <77B5> <2DBA> <77AB> <2DBB> <77B2> <2DBC> <77B7> <2DBD> <77B6> <2DBE> <77B4> <2DBF> <77B1> <2DC0> <77A8> <2DC1> <77F0> <2DC2> <78F3> <2DC3> <78FD> <2DC4> <7902> <2DC7> <78FF> <2DC8> <78F2> <2DC9> <7905> <2DCA> <78F9> <2DCB> <78FE> <2DCC> <7904> <2DCD> <79AB> <2DCE> <79A8> <2DCF> <7A5C> <2DD0> <7A5B> <2DD1> <7A56> <2DD2> <7A58> <2DD3> <7A54> <2DD4> <7A5A> <2DD5> <7ABE> <2DD8> <7C05> <2DD9> <7C0F> <2DDA> <7BF2> <2DDB> <7C00> <2DDC> <7BFF> <2DDD> <7BFB> <2DDE> <7C0E> <2DDF> <7BF4> <2DE0> <7C0B> <2DE1> <7BF3> <2DE2> <7C02> <2DE3> <7C09> <2DE4> <7C03> <2DE5> <7C01> <2DE6> <7BF8> <2DE7> <7BFD> <2DE8> <7C06> <2DEB> <7C10> <2DEC> <7C0A> <2DED> <7CE8> <2DEE> <7E2D> <2DEF> <7E3C> <2DF0> <7E42> <2DF1> <7E33> <2DF2> <9848> <2DF3> <7E38> <2DF4> <7E2A> <2DF5> <7E49> <2DF6> <7E40> <2DF7> <7E47> <2DF8> <7E29> <2DF9> <7E4C> <2DFA> <7E30> <2DFB> <7E3B> <2DFC> <7E36> <2DFD> <7E44> <2DFE> <7E3A> <2DFF> <7F45> <2E00> <7F7F> <2E01> <7F7E> <2E02> <7F7D> <2E03> <7FF4> <2E04> <7FF2> <2E05> <802C> <2E06> <81BB> <2E07> <81C4> <2E08> <81CC> <2E09> <81CA> <2E0A> <81C5> <2E0B> <81C7> <2E0C> <81BC> <2E0D> <81E9> <2E0E> <825B> <2E0F> <825A> <2E10> <825C> <2E11> <8583> <2E12> <8580> <2E13> <858F> <2E14> <85A7> <2E15> <8595> <2E16> <85A0> endbfchar 100 beginbfchar <2E17> <858B> <2E18> <85A3> <2E19> <857B> <2E1A> <85A4> <2E1B> <859A> <2E1C> <859E> <2E1D> <8577> <2E1E> <857C> <2E1F> <8589> <2E20> <85A1> <2E21> <857A> <2E22> <8578> <2E23> <8557> <2E24> <858E> <2E25> <8596> <2E26> <8586> <2E27> <858D> <2E28> <8599> <2E29> <859D> <2E2A> <8581> <2E2B> <85A2> <2E2C> <8582> <2E2D> <8588> <2E2E> <8585> <2E2F> <8579> <2E30> <8576> <2E31> <8598> <2E32> <8590> <2E33> <859F> <2E34> <8668> <2E35> <87BE> <2E36> <87AA> <2E37> <87AD> <2E38> <87C5> <2E39> <87B0> <2E3A> <87AC> <2E3B> <87B9> <2E3C> <87B5> <2E3D> <87BC> <2E3E> <87AE> <2E3F> <87C9> <2E40> <87C3> <2E41> <87C2> <2E42> <87CC> <2E43> <87B7> <2E44> <87AF> <2E45> <87C4> <2E46> <87CA> <2E47> <87B4> <2E48> <87B6> <2E49> <87BF> <2E4A> <87B8> <2E4B> <87BD> <2E4C> <87DE> <2E4D> <87B2> <2E4E> <8935> <2E4F> <8933> <2E50> <893C> <2E51> <893E> <2E52> <8941> <2E53> <8952> <2E54> <8937> <2E55> <8942> <2E56> <89AD> <2E57> <89AF> <2E58> <89AE> <2E5B> <8B1E> <2E5C> <8B18> <2E5D> <8B16> <2E5E> <8B11> <2E5F> <8B05> <2E60> <8B0B> <2E61> <8B22> <2E62> <8B0F> <2E63> <8B12> <2E64> <8B15> <2E65> <8B07> <2E66> <8B0D> <2E67> <8B08> <2E68> <8B06> <2E69> <8B1C> <2E6A> <8B13> <2E6B> <8B1A> <2E6C> <8C4F> <2E6D> <8C70> <2E6E> <8C72> <2E6F> <8C71> <2E70> <8C6F> <2E71> <8C95> <2E72> <8C94> <2E73> <8CF9> <2E74> <8D6F> <2E75> <8E4E> <2E76> <8E4D> <2E77> <8E53> <2E78> <8E50> <2E79> <8E4C> <2E7A> <8E47> <2E7B> <8F43> <2E7C> <8F40> endbfchar 100 beginbfchar <2E7D> <9085> <2E7E> <907E> <2E7F> <9138> <2E80> <919A> <2E81> <91A2> <2E82> <919B> <2E83> <9199> <2E84> <919F> <2E85> <91A1> <2E86> <919D> <2E87> <91A0> <2E88> <93A1> <2E89> <9383> <2E8A> <93AF> <2E8B> <9364> <2E8C> <9356> <2E8D> <9347> <2E8E> <937C> <2E8F> <9358> <2E90> <935C> <2E91> <9376> <2E92> <9349> <2E95> <9360> <2E96> <936D> <2E97> <938F> <2E98> <934C> <2E99> <936A> <2E9A> <9379> <2E9B> <9357> <2E9C> <9355> <2E9D> <9352> <2E9E> <934F> <2E9F> <9371> <2EA0> <9377> <2EA1> <937B> <2EA2> <9361> <2EA3> <935E> <2EA4> <9363> <2EA5> <9367> <2EA6> <934E> <2EA7> <9359> <2EA8> <95C7> <2EA9> <95C0> <2EAA> <95C9> <2EAB> <95C3> <2EAC> <95C5> <2EAD> <95B7> <2EAE> <96AE> <2EAF> <96B0> <2EB0> <96AC> <2EB1> <9720> <2EB2> <971F> <2EB3> <9718> <2EB4> <971D> <2EB5> <9719> <2EB6> <979A> <2EB7> <97A1> <2EB8> <979C> <2EB9> <979E> <2EBA> <979D> <2EBB> <97D5> <2EBC> <97D4> <2EBD> <97F1> <2EBE> <9841> <2EBF> <9844> <2EC0> <984A> <2EC1> <9849> <2EC2> <9845> <2EC3> <9843> <2EC4> <9925> <2EC7> <992A> <2EC8> <9933> <2EC9> <9932> <2ECA> <992F> <2ECB> <992D> <2ECC> <9931> <2ECD> <9930> <2ECE> <9998> <2ECF> <99A3> <2ED0> <99A1> <2ED1> <9A02> <2ED2> <99FA> <2ED3> <99F4> <2ED4> <99F7> <2ED5> <99F9> <2ED6> <99F8> <2ED7> <99F6> <2ED8> <99FB> <2EDB> <99FC> <2EDC> <9A03> <2EDD> <9ABE> <2EDE> <9AFE> <2EDF> <9AFD> <2EE0> <9B01> <2EE1> <9AFC> <2EE2> <9B48> <2EE3> <9B9A> <2EE4> <9BA8> <2EE5> <9B9E> <2EE6> <9B9B> endbfchar 100 beginbfchar <2EE7> <9BA6> <2EE8> <9BA1> <2EE9> <9BA5> <2EEA> <9BA4> <2EEB> <9B86> <2EEC> <9BA2> <2EED> <9BA0> <2EEE> <9BAF> <2EEF> <9D33> <2EF0> <9D41> <2EF1> <9D67> <2EF2> <9D36> <2EF5> <9D31> <2EF6> <9D38> <2EF7> <9D30> <2EF8> <9D45> <2EFB> <9D3E> <2EFC> <9D37> <2EFD> <9D40> <2EFE> <9D3D> <2EFF> <7FF5> <2F00> <9D2D> <2F01> <9E8A> <2F02> <9E89> <2F03> <9E8D> <2F04> <9EB0> <2F05> <9EC8> <2F06> <9EDA> <2F07> <9EFB> <2F08> <9EFF> <2F09> <9F24> <2F0A> <9F23> <2F0B> <9F22> <2F0C> <9F54> <2F0D> <9FA0> <2F0E> <5131> <2F11> <5698> <2F12> <569C> <2F13> <5697> <2F14> <569A> <2F15> <569D> <2F16> <5699> <2F17> <5970> <2F18> <5B3C> <2F1B> <5DC0> <2F1E> <61D8> <2F1F> <61DF> <2F22> <61F1> <2F23> <61EA> <2F24> <61F0> <2F25> <61EB> <2F26> <61D6> <2F27> <61E9> <2F28> <64FF> <2F29> <6504> <2F2A> <64FD> <2F2B> <64F8> <2F2C> <6501> <2F2D> <6503> <2F2E> <64FC> <2F2F> <6594> <2F30> <65DB> <2F33> <66D8> <2F34> <6AC5> <2F35> <6AB9> <2F36> <6ABD> <2F37> <6AE1> <2F38> <6AC6> <2F39> <6ABA> <2F3C> <6AC7> <2F3D> <6AB4> <2F3E> <6AAD> <2F3F> <6B5E> <2F40> <6BC9> <2F41> <6C0B> <2F42> <7007> <2F45> <7001> <2F46> <7005> <2F47> <7014> <2F48> <700E> <2F4B> <6FFB> <2F4C> <7026> <2F4D> <6FFC> <2F4E> <6FF7> <2F4F> <700A> <2F50> <7201> <2F51> <71FF> <2F52> <71F9> <2F53> <7203> <2F54> <71FD> <2F55> <7376> <2F56> <74B8> <2F57> <74C0> <2F58> <74B5> <2F59> <74C1> <2F5A> <74BE> <2F5B> <74B6> <2F5C> <74BB> <2F5D> <74C2> <2F5E> <7514> endbfchar 100 beginbfchar <2F5F> <7513> <2F60> <765C> <2F61> <7664> <2F62> <7659> <2F63> <7650> <2F64> <7653> <2F65> <7657> <2F66> <765A> <2F67> <76A6> <2F68> <76BD> <2F69> <76EC> <2F6A> <77C2> <2F6B> <77BA> <2F6C> <790C> <2F6F> <7909> <2F70> <7910> <2F71> <7912> <2F72> <7911> <2F73> <79AD> <2F74> <79AC> <2F75> <7A5F> <2F76> <7C1C> <2F77> <7C29> <2F78> <7C19> <2F79> <7C20> <2F7A> <7C1F> <2F7B> <7C2D> <2F7C> <7C1D> <2F7D> <7C26> <2F7E> <7C28> <2F7F> <7C22> <2F80> <7C25> <2F81> <7C30> <2F82> <7E5C> <2F83> <7E50> <2F84> <7E56> <2F85> <7E63> <2F86> <7E58> <2F87> <7E62> <2F88> <7E5F> <2F89> <7E51> <2F8A> <7E60> <2F8B> <7E57> <2F8C> <7E53> <2F8D> <7FB5> <2F8E> <7FB3> <2F91> <8075> <2F94> <81D0> <2F95> <825F> <2F96> <825E> <2F97> <85B4> <2F98> <85C6> <2F99> <85C0> <2F9A> <85C3> <2F9B> <85C2> <2F9C> <85B3> <2F9D> <85B5> <2F9E> <85BD> <2F9F> <85C7> <2FA0> <85C4> <2FA1> <85BF> <2FA2> <85CB> <2FA3> <85CE> <2FA4> <85C8> <2FA5> <85C5> <2FA6> <85B1> <2FA7> <85B6> <2FA8> <85D2> <2FA9> <8624> <2FAA> <85B8> <2FAB> <85B7> <2FAC> <85BE> <2FAD> <8669> <2FAE> <87E7> <2FAF> <87E6> <2FB0> <87E2> <2FB1> <87DB> <2FB2> <87EB> <2FB3> <87EA> <2FB4> <87E5> <2FB5> <87DF> <2FB6> <87F3> <2FB7> <87E4> <2FB8> <87D4> <2FB9> <87DC> <2FBA> <87D3> <2FBB> <87ED> <2FBC> <87D8> <2FBD> <87E3> <2FBE> <87D7> <2FBF> <87D9> <2FC0> <8801> <2FC1> <87F4> <2FC2> <87E8> <2FC3> <87DD> <2FC4> <8953> <2FC5> <894B> <2FC6> <894F> <2FC7> <894C> <2FC8> <8946> endbfchar 100 beginbfchar <2FCB> <8949> <2FCC> <8B2A> <2FCD> <8B27> <2FCE> <8B23> <2FCF> <8B33> <2FD0> <8B30> <2FD1> <8B35> <2FD2> <8B47> <2FD3> <8B2F> <2FD4> <8B3C> <2FD5> <8B3E> <2FD6> <8B31> <2FD7> <8B25> <2FD8> <8B37> <2FD9> <8B26> <2FDA> <8B36> <2FDB> <8B2E> <2FDC> <8B24> <2FDD> <8B3B> <2FDE> <8B3D> <2FDF> <8B3A> <2FE0> <8C42> <2FE1> <8C75> <2FE2> <8C99> <2FE3> <8C98> <2FE4> <8C97> <2FE5> <8CFE> <2FE6> <8D04> <2FE7> <8D02> <2FE8> <8D00> <2FE9> <8E5C> <2FEA> <8E62> <2FEB> <8E60> <2FEC> <8E57> <2FED> <8E56> <2FEE> <8E5E> <2FEF> <8E65> <2FF0> <8E67> <2FF1> <8E5B> <2FF2> <8E5A> <2FF3> <8E61> <2FF4> <8E5D> <2FF5> <8E69> <2FF6> <8E54> <2FFA> <8F4B> <2FFB> <9128> <2FFE> <913E> <2FFF> <91A8> <3000> <91A5> <3001> <91A7> <3002> <91AF> <3003> <91AA> <3004> <93B5> <3005> <938C> <3006> <9392> <3007> <93B7> <3008> <939B> <3009> <939D> <300A> <9389> <300B> <93A7> <300C> <938E> <300D> <93AA> <300E> <939E> <300F> <93A6> <3010> <9395> <3011> <9388> <3012> <9399> <3013> <939F> <3014> <9380> <3015> <938D> <3016> <93B1> <3017> <9391> <3018> <93B2> <3019> <93A4> <301A> <93A8> <301B> <93B4> <301C> <93A3> <301F> <95D1> <3020> <96B3> <3021> <96D7> <3022> <96DA> <3023> <5DC2> <3024> <96DF> <3025> <96D8> <3026> <96DD> <3027> <9723> <3028> <9722> <3029> <9725> <302A> <97AC> <302B> <97AE> <302C> <97A8> <302D> <97AB> <302E> <97A4> <302F> <97AA> <3030> <97A2> <3031> <97A5> <3032> <97D7> <3033> <97D9> <3034> <97D6> <3035> <97D8> endbfchar 100 beginbfchar <3036> <97FA> <303A> <98B8> <303B> <9941> <303C> <993C> <303D> <993A> <303E> <9A0F> <303F> <9A0B> <3040> <9A09> <3041> <9A0D> <3042> <9A04> <3043> <9A11> <3044> <9A0A> <3045> <9A05> <3046> <9A07> <3047> <9A06> <3048> <9AC0> <3049> <9ADC> <304A> <9B08> <304D> <9B29> <304E> <9B35> <304F> <9B4A> <3050> <9B4C> <3051> <9B4B> <3052> <9BC7> <3053> <9BC6> <3054> <9BC3> <3055> <9BBF> <3056> <9BC1> <3057> <9BB5> <3058> <9BB8> <3059> <9BD3> <305A> <9BB6> <305B> <9BC4> <305C> <9BB9> <305D> <9BBD> <305E> <9D5C> <305F> <9D53> <3060> <9D4F> <3061> <9D4A> <3062> <9D5B> <3063> <9D4B> <3064> <9D59> <3065> <9D56> <3066> <9D4C> <3067> <9D57> <3068> <9D52> <3069> <9D54> <306A> <9D5F> <306B> <9D58> <306C> <9D5A> <306D> <9E8E> <306E> <9E8C> <306F> <9EDF> <3070> <9F01> <3071> <9F00> <3072> <9F16> <3073> <9F25> <3074> <9F2B> <3075> <9F2A> <3076> <9F29> <3077> <9F28> <3078> <9F4C> <3079> <9F55> <307C> <5296> <307D> <52F7> <307E> <53B4> <307F> <56AB> <3080> <56AD> <3083> <56AA> <3084> <56AC> <3085> <58DA> <3086> <58DD> <3087> <58DB> <3088> <5912> <308C> <5DC3> <308D> <5E70> <308E> <5FBF> <308F> <61FB> <3090> <6507> <3091> <6510> <3092> <650D> <3093> <6509> <3094> <650C> <3095> <650E> <3096> <6584> <3097> <65DE> <3098> <65DD> <3099> <66DE> <309A> <6AE7> <309B> <6AE0> <309C> <6ACC> <309D> <6AD1> <309E> <6AD9> <309F> <6ACB> <30A0> <6ADF> <30A1> <6ADC> <30A2> <6AD0> <30A3> <6AEB> <30A4> <6ACF> <30A5> <6ACD> endbfchar 100 beginbfchar <30A6> <6ADE> <30A7> <6B60> <30A8> <6BB0> <30A9> <6C0C> <30AA> <7019> <30AB> <7027> <30AC> <7020> <30AD> <7016> <30AE> <702B> <30B2> <7029> <30B3> <7017> <30B4> <7024> <30B5> <701C> <30B6> <720C> <30B7> <720A> <30B8> <7207> <30B9> <7202> <30BA> <7205> <30BD> <72A4> <30BE> <72A3> <30BF> <72A1> <30C0> <74CB> <30C1> <74C5> <30C2> <74B7> <30C3> <74C3> <30C4> <7516> <30C5> <7660> <30C8> <77C4> <30C9> <77F1> <30CA> <791D> <30CB> <791B> <30CC> <7921> <30CD> <791C> <30CE> <7917> <30CF> <791E> <30D0> <79B0> <30D3> <7C33> <30D4> <7C3C> <30D5> <7C39> <30D6> <7C2C> <30D7> <7C3B> <30D8> <7CEC> <30D9> <7CEA> <30DA> <7E76> <30DB> <7E75> <30DC> <7E78> <30DD> <7E70> <30DE> <7E77> <30DF> <7E6F> <30E0> <7E7A> <30E1> <7E72> <30E2> <7E74> <30E3> <7E68> <30E4> <7F4B> <30E5> <7F4A> <30E6> <7F83> <30E7> <7F86> <30E8> <7FB7> <30EB> <8078> <30EC> <81D7> <30ED> <81D5> <30EE> <820B> <30EF> <8264> <30F0> <8261> <30F1> <8263> <30F2> <85EB> <30F3> <85F1> <30F4> <85ED> <30F5> <85D9> <30F6> <85E1> <30F7> <85E8> <30F8> <85DA> <30F9> <85D7> <30FA> <85EC> <30FB> <85F2> <30FC> <85F8> <30FD> <85D8> <30FE> <85DF> <30FF> <85E3> <3100> <85DC> <3101> <85D1> <3102> <85F0> <3103> <85E6> <3104> <85EF> <3105> <85DE> <3106> <85E2> <3107> <8800> <3108> <87FA> <3109> <8803> <310C> <8809> <310D> <880C> <310E> <880B> <310F> <8806> <3110> <87FC> <3111> <8808> <3112> <87FF> <3113> <880A> <3114> <8802> <3115> <8962> <3118> <8957> endbfchar 100 beginbfchar <3119> <8961> <311A> <895C> <311B> <8958> <311C> <895D> <311D> <8959> <311E> <8988> <311F> <89B7> <3120> <89B6> <3121> <89F6> <3122> <8B50> <3123> <8B48> <3124> <8B4A> <3125> <8B40> <3126> <8B53> <3127> <8B56> <3128> <8B54> <3129> <8B4B> <312A> <8B55> <312B> <8B51> <312C> <8B42> <312D> <8B52> <312E> <8B57> <312F> <8C43> <3130> <8C77> <3131> <8C76> <3132> <8C9A> <3135> <8D09> <3136> <8DAC> <3137> <8DAA> <3138> <8DAD> <3139> <8DAB> <313A> <8E6D> <313B> <8E78> <313C> <8E73> <313D> <8E6A> <313E> <8E6F> <313F> <8E7B> <3140> <8EC2> <3141> <8F52> <3142> <8F51> <3145> <8F53> <3146> <8FB4> <3147> <9140> <3148> <913F> <3149> <91B0> <314A> <91AD> <314B> <93DE> <314C> <93C7> <314D> <93CF> <314E> <93C2> <314F> <93DA> <3150> <93D0> <3151> <93F9> <3152> <93EC> <3153> <93CC> <3154> <93D9> <3155> <93A9> <3156> <93E6> <3157> <93CA> <3158> <93D4> <3159> <93EE> <315A> <93E3> <315B> <93D5> <315C> <93C4> <315D> <93CE> <315E> <93C0> <315F> <93D2> <3160> <93A5> <3161> <93E7> <3162> <957D> <3165> <96E1> <3166> <9729> <3169> <9728> <316A> <9726> <316B> <97B3> <316C> <97B7> <316D> <97B6> <3171> <985C> <3172> <9859> <3173> <985D> <3174> <9857> <3175> <98BF> <3176> <98BD> <3177> <98BB> <3178> <98BE> <3179> <9948> <317A> <9947> <317B> <9943> <317E> <9A1A> <317F> <9A15> <3180> <9A25> <3181> <9A1D> <3182> <9A24> <3183> <9A1B> <3184> <9A22> <3185> <9A20> <3186> <9A27> <3187> <9A23> <3188> <9A1E> <3189> <9A1C> endbfchar 100 beginbfchar <318A> <9A14> <318B> <9AC2> <318C> <9B0B> <318D> <9B0A> <318E> <9B0E> <318F> <9B0C> <3190> <9B37> <3193> <9BE0> <3194> <9BDE> <3195> <9BE4> <3196> <9BE6> <3197> <9BE2> <3198> <9BF0> <3199> <9BD4> <319A> <9BD7> <319B> <9BEC> <319C> <9BDC> <319D> <9BD9> <319E> <9BE5> <319F> <9BD5> <31A0> <9BE1> <31A1> <9BDA> <31A2> <9D77> <31A3> <9D81> <31A4> <9D8A> <31A5> <9D84> <31A6> <9D88> <31A7> <9D71> <31A8> <9D80> <31A9> <9D78> <31AA> <9D86> <31AD> <9D7D> <31AE> <9D6B> <31B1> <9D70> <31B2> <9D69> <31B3> <9D85> <31B4> <9D73> <31B5> <9D7B> <31B6> <9D82> <31B7> <9D6F> <31B8> <9D79> <31B9> <9D7F> <31BA> <9D87> <31BB> <9D68> <31BC> <9E94> <31BD> <9E91> <31BE> <9EC0> <31BF> <9EFC> <31C0> <9F2D> <31C3> <9F4D> <31C7> <5337> <31C8> <56B2> <31C9> <56B5> <31CA> <56B3> <31CB> <58E3> <31CC> <5B45> <31D3> <61F9> <31D4> <6517> <31D5> <6516> <31D6> <6515> <31D7> <6513> <31D8> <65DF> <31D9> <66E8> <31DC> <6AF3> <31DD> <6AF0> <31DE> <6AEA> <31DF> <6AE8> <31E0> <6AF9> <31E1> <6AF1> <31E4> <703C> <31E5> <7035> <31E6> <702F> <31E7> <7037> <31E8> <7034> <31E9> <7031> <31EA> <7042> <31EB> <7038> <31EC> <703F> <31ED> <703A> <31EE> <7039> <31EF> <702A> <31F0> <7040> <31F1> <703B> <31F2> <7033> <31F3> <7041> <31F6> <72A8> <31F7> <737D> <31F8> <737C> <31F9> <74BA> <31FA> <76AB> <31FB> <76AA> <31FC> <76BE> <31FD> <76ED> <31FE> <77CC> <31FF> <77CE> <3200> <77CF> <3201> <77CD> <3202> <77F2> <3203> <7925> <3204> <7923> endbfchar 100 beginbfchar <3207> <7924> <3208> <7929> <3209> <79B2> <320A> <7A6E> <320D> <7AF7> <320E> <7C49> <320F> <7C48> <3210> <7C4A> <3211> <7C47> <3212> <7C45> <3213> <7CEE> <3214> <7E7B> <3215> <7E7E> <3216> <7E81> <3217> <7E80> <3218> <7FBA> <3219> <7FFF> <321A> <8079> <321B> <81DB> <321C> <81D9> <321F> <8622> <3220> <85FF> <3221> <8601> <3222> <85FE> <3223> <861B> <3224> <8600> <3225> <85F6> <3226> <8604> <3227> <8609> <3228> <8605> <3229> <860C> <322A> <85FD> <322B> <8819> <322E> <8817> <322F> <8813> <3230> <8816> <3231> <8963> <3232> <8966> <3233> <89B9> <3234> <89F7> <3235> <8B60> <3236> <8B6A> <3237> <8B5D> <3238> <8B68> <3239> <8B63> <323A> <8B65> <323B> <8B67> <323C> <8B6D> <323D> <8DAE> <323E> <8E86> <323F> <8E88> <3240> <8E84> <3241> <8F59> <3244> <8F55> <3245> <8F58> <3246> <8F5A> <3247> <908D> <3248> <9143> <3249> <9141> <324A> <91B7> <324B> <91B5> <324E> <940B> <324F> <9413> <3250> <93FB> <3251> <9420> <3252> <940F> <3253> <9414> <3254> <93FE> <3255> <9415> <3256> <9410> <3257> <9428> <3258> <9419> <3259> <940D> <325A> <93F5> <325B> <9400> <325C> <93F7> <325D> <9407> <325E> <940E> <325F> <9416> <3260> <9412> <3261> <93FA> <3262> <9409> <3263> <93F8> <3264> <943C> <3265> <940A> <3266> <93FF> <3267> <93FC> <3268> <940C> <3269> <93F6> <326A> <9411> <326B> <9406> <326C> <95DE> <326D> <95E0> <326E> <95DF> <3271> <97B9> <3272> <97BB> <3275> <9860> <3278> <985F> <327B> <9950> <327C> <994E> endbfchar 100 beginbfchar <327D> <9959> <327E> <994C> <327F> <994B> <3280> <9953> <3281> <9A32> <3282> <9A34> <3283> <9A31> <3284> <9A2C> <3285> <9A2A> <3286> <9A36> <3287> <9A29> <3288> <9A2E> <3289> <9A38> <328A> <9A2D> <328B> <9AC7> <328C> <9ACA> <328D> <9AC6> <328E> <9B10> <328F> <9B12> <3290> <9B11> <3291> <9C0B> <3292> <9C08> <3293> <9BF7> <3294> <9C05> <3295> <9C12> <3296> <9BF8> <3297> <9C40> <3298> <9C07> <3299> <9C0E> <329A> <9C06> <329B> <9C17> <329C> <9C14> <329D> <9C09> <329E> <9D9F> <329F> <9D99> <32A0> <9DA4> <32A1> <9D9D> <32A2> <9D92> <32A3> <9D98> <32A4> <9D90> <32A5> <9D9B> <32A6> <9DA0> <32A7> <9D94> <32A8> <9D9C> <32A9> <9DAA> <32AA> <9D97> <32AB> <9DA1> <32AC> <9D9A> <32AD> <9DA2> <32AE> <9DA8> <32AF> <9D9E> <32B0> <9DA3> <32B1> <9DBF> <32B2> <9DA9> <32B3> <9D96> <32B6> <9E99> <32B7> <9E9B> <32B8> <9E9A> <32B9> <9EE5> <32BA> <9EE4> <32BB> <9EE7> <32BC> <9EE6> <32BD> <9F30> <32BE> <9F2E> <32BF> <9F5B> <32C0> <9F60> <32C1> <9F5E> <32C2> <9F5D> <32C3> <9F59> <32C4> <9F91> <32C5> <513A> <32C6> <5139> <32C7> <5298> <32C8> <5297> <32C9> <56C3> <32CC> <5B48> <32CD> <5B47> <32CE> <5DCB> <32CF> <5DCF> <32D0> <5EF1> <32D1> <61FD> <32D2> <651B> <32D3> <6B02> <32D4> <6AFC> <32D5> <6B03> <32D6> <6AF8> <32D7> <6B00> <32DA> <704A> <32DF> <721D> <32E0> <721A> <32E1> <7219> <32E2> <737E> <32E3> <7517> <32E4> <766A> <32E5> <77D0> <32E6> <792D> <32E7> <7931> <32E8> <792F> <32E9> <7C54> <32EA> <7C53> endbfchar 100 beginbfchar <32EB> <7CF2> <32EC> <7E8A> <32EF> <7E8B> <32F0> <7E86> <32F1> <7E8D> <32F2> <7F4D> <32F3> <7FBB> <32F4> <8030> <32F5> <81DD> <32F6> <8618> <32F7> <862A> <32F8> <8626> <32F9> <861F> <32FA> <8623> <32FB> <861C> <32FC> <8619> <32FD> <8627> <32FE> <862E> <32FF> <8621> <3300> <8620> <3301> <8629> <3302> <861E> <3303> <8625> <3304> <8829> <3305> <881D> <3306> <881B> <3307> <8820> <3308> <8824> <3309> <881C> <330A> <882B> <330B> <884A> <330C> <896D> <330D> <8969> <330E> <896E> <330F> <896B> <3310> <89FA> <3311> <8B79> <3312> <8B78> <3313> <8B45> <3316> <8D10> <3317> <8D14> <3318> <8DAF> <3319> <8E8E> <331A> <8E8C> <331B> <8F5E> <331C> <8F5B> <331D> <8F5D> <331E> <9146> <3321> <91B9> <3322> <943F> <3323> <943B> <3324> <9436> <3325> <9429> <3326> <943D> <3327> <9430> <3328> <9439> <3329> <942A> <332A> <9437> <332B> <942C> <332C> <9440> <332D> <9431> <332E> <95E5> <332F> <95E4> <3330> <95E3> <3331> <9735> <3332> <973A> <3333> <97BF> <3334> <97E1> <3335> <9864> <3336> <98C9> <3337> <98C6> <3338> <98C0> <3339> <9958> <333A> <9956> <333B> <9A39> <333C> <9A3D> <333D> <9A46> <333E> <9A44> <333F> <9A42> <3340> <9A41> <3341> <9A3A> <3342> <9A3F> <3343> <9ACD> <3344> <9B15> <3347> <9B16> <3348> <9B3A> <3349> <9B52> <334A> <9C2B> <334B> <9C1D> <334C> <9C1C> <334D> <9C2C> <334E> <9C23> <3351> <9C24> <3352> <9C21> <3353> <9DB7> <3354> <9DB6> <3355> <9DBC> <3356> <9DC1> <3357> <9DC7> <3358> <9DCA> endbfchar 100 beginbfchar <3359> <9DCF> <335A> <9DBE> <335B> <9DC5> <335C> <9DC3> <335D> <9DBB> <335E> <9DB5> <335F> <9DCE> <3362> <9DAC> <3363> <9DC8> <3364> <9DB1> <3365> <9DAD> <3366> <9DCC> <3367> <9DB3> <3368> <9DCD> <3369> <9DB2> <336A> <9E7A> <336B> <9E9C> <336C> <9EEB> <336D> <9EEE> <336E> <9EED> <336F> <9F1B> <3370> <9F18> <3371> <9F1A> <3372> <9F31> <3373> <9F4E> <3374> <9F65> <3375> <9F64> <3376> <9F92> <3377> <4EB9> <3378> <56C6> <3379> <56C5> <337A> <56CB> <337B> <5971> <337E> <5DD5> <337F> <5DD1> <3380> <5EF2> <3381> <6521> <3382> <6520> <3383> <6526> <3384> <6522> <3385> <6B0B> <3388> <6C0D> <338C> <7052> <338F> <72A9> <3390> <737F> <3391> <74D8> <3392> <74D5> <3393> <74D9> <3394> <74D7> <3395> <766D> <3396> <76AD> <3397> <7935> <3398> <79B4> <339B> <7C57> <339C> <7C5C> <339D> <7C59> <339E> <7C5B> <339F> <7C5A> <33A0> <7CF4> <33A1> <7CF1> <33A2> <7E91> <33A3> <7F4F> <33A4> <7F87> <33A5> <81DE> <33A6> <826B> <33A9> <8633> <33AA> <862C> <33AB> <8632> <33AC> <8636> <33AD> <882C> <33AE> <8828> <33AF> <8826> <33B0> <882A> <33B1> <8825> <33B2> <8971> <33B3> <89BF> <33B4> <89BE> <33B5> <89FB> <33B6> <8B7E> <33B7> <8B84> <33B8> <8B82> <33B9> <8B86> <33BA> <8B85> <33BB> <8B7F> <33BC> <8D15> <33BD> <8E95> <33BE> <8E94> <33BF> <8E9A> <33C0> <8E92> <33C1> <8E90> <33C4> <8F60> <33C5> <8F62> <33C6> <9147> <33C7> <944C> <33C8> <9450> <33CB> <944F> <33CC> <9447> <33CD> <9445> <33D0> <9446> <33D1> <973F> endbfchar 100 beginbfchar <33D2> <97E3> <33D3> <986A> <33D4> <9869> <33D5> <98CB> <33D6> <9954> <33D7> <995B> <33D8> <9A4E> <33DB> <9A4C> <33DC> <9A4F> <33DD> <9A48> <33DE> <9A4A> <33DF> <9A49> <33E0> <9A52> <33E1> <9A50> <33E2> <9AD0> <33E3> <9B19> <33E4> <9B2B> <33E5> <9B3B> <33E6> <9B56> <33E7> <9B55> <33E8> <9C46> <33E9> <9C48> <33EA> <9C3F> <33EB> <9C44> <33EC> <9C39> <33ED> <9C33> <33EE> <9C41> <33EF> <9C3C> <33F0> <9C37> <33F1> <9C34> <33F2> <9C32> <33F3> <9C3D> <33F4> <9C36> <33F5> <9DDB> <33F6> <9DD2> <33F7> <9DDE> <33F8> <9DDA> <33F9> <9DCB> <33FA> <9DD0> <33FB> <9DDC> <33FC> <9DD1> <33FD> <9DDF> <33FE> <9DE9> <33FF> <9DD9> <3400> <9DD8> <3401> <9DD6> <3402> <9DF5> <3403> <9DD5> <3404> <9DDD> <3405> <9EB6> <3406> <9EF0> <3407> <9F35> <3408> <9F33> <3409> <9F32> <340A> <9F42> <340B> <9F6B> <340C> <9F95> <340D> <9FA2> <340E> <513D> <340F> <5299> <3410> <58E8> <3411> <58E7> <3412> <5972> <3413> <5B4D> <3414> <5DD8> <3415> <882F> <3416> <5F4F> <3417> <6201> <341A> <6529> <341B> <6525> <341C> <6596> <341D> <66EB> <3420> <6B0F> <3421> <6BCA> <3422> <705B> <3423> <705A> <3424> <7222> <3425> <7382> <3426> <7381> <3427> <7383> <3428> <7670> <3429> <77D4> <342A> <7C67> <342B> <7C66> <342C> <7E95> <342D> <826C> <342E> <863A> <342F> <8640> <3430> <8639> <3431> <863C> <3432> <8631> <3433> <863B> <3434> <863E> <3435> <8830> <3436> <8832> <3437> <882E> <3438> <8833> <3439> <8976> <343A> <8974> <343B> <8973> endbfchar 100 beginbfchar <343C> <89FE> <343D> <8B8C> <343E> <8B8E> <343F> <8B8B> <3440> <8B88> <3441> <8C45> <3442> <8D19> <3443> <8E98> <3444> <8F64> <3445> <8F63> <3446> <91BC> <3447> <9462> <3448> <9455> <3449> <945D> <344A> <9457> <344B> <945E> <344E> <9800> <344F> <9A56> <3450> <9A59> <3454> <9C52> <3455> <9C58> <3456> <9C50> <3457> <9C4A> <3458> <9C4D> <3459> <9C4B> <345A> <9C55> <345B> <9C59> <345C> <9C4C> <345D> <9C4E> <345E> <9DFB> <345F> <9DF7> <3460> <9DEF> <3461> <9DE3> <3462> <9DEB> <3463> <9DF8> <3464> <9DE4> <3465> <9DF6> <3466> <9DE1> <3467> <9DEE> <3468> <9DE6> <3469> <9DF2> <346A> <9DF0> <346B> <9DE2> <346C> <9DEC> <346D> <9DF4> <346E> <9DF3> <346F> <9DE8> <3470> <9DED> <3471> <9EC2> <3472> <9ED0> <3475> <9F06> <3476> <9F1C> <3477> <9F38> <3478> <9F37> <3479> <9F36> <347A> <9F43> <347B> <9F4F> <347C> <9F71> <347D> <9F70> <3480> <56D3> <3481> <56CD> <3482> <5B4E> <3483> <5C6D> <3484> <652D> <3487> <6B13> <3488> <705F> <3489> <7061> <348A> <705D> <348B> <7060> <348C> <7223> <348D> <74DB> <348E> <74E5> <348F> <77D5> <3490> <7938> <3491> <79B7> <3492> <79B6> <3493> <7C6A> <3494> <7E97> <3495> <7F89> <3496> <826D> <3497> <8643> <3498> <8838> <3499> <8837> <349A> <8835> <349B> <884B> <34A1> <8E9D> <34A2> <91BE> <34A3> <91BD> <34A4> <91C2> <34A5> <946B> <34A8> <96E5> <34A9> <9746> <34AA> <9743> <34AB> <9747> <34AC> <97C7> <34AD> <97E5> <34AE> <9A5E> <34AF> <9AD5> <34B0> <9B59> <34B1> <9C63> endbfchar 100 beginbfchar <34B2> <9C67> <34B3> <9C66> <34B4> <9C62> <34B5> <9C5E> <34B6> <9C60> <34B7> <9E02> <34B8> <9DFE> <34B9> <9E07> <34BA> <9E03> <34BB> <9E06> <34BC> <9E05> <34BF> <9E09> <34C0> <9DFF> <34C1> <9DFD> <34C2> <9E04> <34C3> <9EA0> <34C4> <9F1E> <34C5> <9F46> <34C9> <56D4> <34CA> <652E> <34CB> <65B8> <34CE> <6B17> <34CF> <6B1A> <34D0> <7062> <34D1> <7226> <34D2> <72AA> <34D5> <7939> <34D6> <7C69> <34D7> <7C6B> <34D8> <7CF6> <34D9> <7E9A> <34DA> <7E98> <34DB> <7E9B> <34DC> <7E99> <34E4> <897C> <34E5> <897B> <34E6> <89FF> <34E9> <8EA5> <34EA> <8EA4> <34EB> <8EA3> <34EC> <946E> <34ED> <946D> <34EE> <946F> <34EF> <9471> <34F0> <9473> <34F1> <9749> <34F2> <9872> <34F3> <995F> <34F4> <9C68> <34F5> <9C6E> <34F6> <9C6D> <34F7> <9E0B> <34F8> <9E0D> <34F9> <9E10> <34FA> <9E0F> <34FB> <9E12> <34FC> <9E11> <34FD> <9EA1> <34FE> <9EF5> <34FF> <9F09> <3500> <9F47> <3501> <9F78> <3502> <9F7B> <3503> <9F7A> <3504> <9F79> <3505> <571E> <3506> <7066> <3507> <7C6F> <3508> <883C> <3509> <8DB2> <350A> <8EA6> <350B> <91C3> <350C> <9474> <350D> <9478> <350E> <9476> <350F> <9475> <3510> <9A60> <3511> <9B2E> <3512> <9C74> <3513> <9C73> <3514> <9C71> <3515> <9C75> <3516> <9E14> <3517> <9E13> <3518> <9EF6> <3519> <9F0A> <351A> <9FA4> <351B> <7068> <351C> <7065> <351D> <7CF7> <351E> <866A> <351F> <883E> <3520> <883D> <3521> <883F> <3522> <8B9E> <3523> <8C9C> <3524> <8EA9> <3525> <8EC9> <3526> <974B> <3529> <98CC> endbfchar 100 beginbfchar <352A> <9961> <352B> <99AB> <352C> <9A64> <352F> <9B24> <3530> <9E15> <3531> <9E17> <3532> <9F48> <3533> <6207> <3534> <6B1E> <3535> <7227> <3536> <864C> <3537> <8EA8> <3538> <9482> <353B> <9A69> <353C> <9A68> <353D> <9E19> <353E> <864B> <353F> <8B9F> <3540> <9483> <3541> <9C79> <3542> <9EB7> <3543> <7675> <3544> <9A6B> <3545> <9C7A> <3546> <9E1D> <3549> <7229> <354A> <9EA4> <354B> <9F7E> <354C> <9F49> <354D> <9F98> <354E> <22EF> <354F> <223C> <35AF> <35B0> <35B1> <35B2> <35B3> <0308> <35B4> <35BD> <30FC> <35BE> <35BF> <35C0> <273D> <3670> <0401> <3691> <0451> <36AC> <21E7> <36AF> <4E41> <36B0> <36B1> <4E5A> <36B2> <36B3> <5202> <36B6> <5188> <36E1> <00AC> <36E2> <36E3> <36E4> <36E5> <3231> <36E6> <2116> <36E7> <2121> <36E8> <7881> <36E9> <92B9> <36EA> <88CF> <36EB> <58BB> <36EC> <6052> <36ED> <7CA7> <36EE> <5AFA> <36EF> <2554> <36F0> <2566> <36F1> <2557> <36F2> <2560> <36F3> <256C> <36F4> <2563> <36F5> <255A> <36F6> <2569> <36F7> <255D> <36F8> <2552> <36F9> <2564> <36FA> <2555> <36FE> <2558> <36FF> <2567> <3700> <255B> <3701> <2553> <3702> <2565> <3703> <2556> <3704> <255F> <3705> <256B> <3706> <2562> <3707> <2559> <3708> <2568> <3709> <255C> <370A> <2551> <3710> <2593> <372B> <372C> <57BE> <372D> <372E> <713E> <372F> <3730> <69A2> <3731> <3732> <5B74> <3733> <7A49> endbfchar 100 beginbfchar <3736> <7A65> <3737> <7A7D> <3738> <3739> <7ABB> <373A> <7AB0> <373D> <71D1> <373E> <373F> <41CA> <3740> <7ADA> <3741> <7ADD> <3742> <7AEA> <3743> <41EF> <3744> <54B2> <3745> <3746> <7B0B> <3747> <7B55> <3748> <7B29> <374B> <7BA2> <374C> <7B6F> <374D> <839C> <3750> <7BD0> <3751> <8421> <3752> <7B92> <3754> <3756> <8492> <3757> <7BFA> <3759> <7C35> <375A> <375B> <7C44> <375C> <7C83> <375D> <375E> <7CA6> <375F> <3760> <7CC9> <3761> <7CC7> <3762> <7CE6> <3764> <7CF3> <3765> <7CF5> <3766> <7E67> <3767> <451D> <3768> <3769> <7D5D> <376A> <376B> <7D89> <376C> <7DAB> <376D> <7135> <376E> <7DB3> <3772> <7DE4> <3773> <3D13> <3774> <7DF5> <3775> <3776> <7DE5> <3777> <377B> <7E6E> <377D> <432B> <377E> <946C> <377F> <7E27> <3782> <7F47> <3783> <7936> <3784> <3785> <99E1> <3786> <7F97> <3787> <3788> <7FA3> <378B> <455C> <378C> <378D> <378E> <7FFA> <378F> <3791> <8008> <3792> <801D> <3794> <802F> <3799> <8061> <379A> <379B> <4989> <379F> <6725> <37A0> <80A7> <37A1> <37A2> <8107> <37A3> <811A> <37A4> <58B0> <37A5> <37A6> <6C7F> <37A7> <37A8> <64E7> <37A9> <37AA> <8218> <37AB> <37AC> <6A53> <37AF> <447A> <37B0> <8229> <37B3> <4FF9> <37B4> <37B5> <84E2> <37B6> <8362> <37BC> <82AA> <37BD> <691B> <37BE> <37BF> <41DB> <37C0> <854B> endbfchar 100 beginbfchar <37C1> <82D0> <37C2> <831A> <37C5> <36C1> <37C8> <827B> <37C9> <82E2> <37CA> <8318> <37D0> <3DBF> <37D1> <831D> <37D2> <55EC> <37D3> <8385> <37D4> <450B> <37D5> <37D6> <83AC> <37D8> <83D3> <37D9> <37DA> <6A57> <37DB> <855A> <37DC> <3496> <37DD> <37DE> <8458> <37DF> <37E0> <8471> <37E1> <3DD3> <37E2> <44E4> <37E3> <6AA7> <37E4> <844A> <37E5> <7958> <37EA> <84DE> <37EC> <8391> <37ED> <44A0> <37EE> <8493> <37EF> <84E4> <37F0> <37F1> <4240> <37F2> <37F3> <4543> <37F4> <8534> <37F5> <5AF2> <37F7> <4527> <37F8> <8573> <37F9> <4516> <37FA> <67BF> <37FB> <8616> <37FE> <85C1> <37FF> <3800> <8602> <3804> <456A> <3805> <8628> <3806> <3648> <3807> <3808> <53F7> <3809> <380A> <867E> <380C> <380D> <87EE> <380E> <380F> <87B1> <3810> <87DA> <3811> <880F> <3812> <5661> <3813> <866C> <3814> <6856> <3815> <460F> <381B> <885E> <381C> <889C> <381D> <465B> <3820> <88C5> <3821> <3822> <8987> <3826> <89A7> <3827> <89BC> <3828> <3829> <89E7> <382C> <8A9C> <382D> <7793> <382E> <91FE> <382F> <8A90> <3830> <3831> <7AE9> <3832> <3833> <4713> <3834> <3835> <717C> <3836> <8B0C> <3837> <8B1F> <383A> <8B3F> <383C> <8B4D> <383D> <8AA9> <383E> <383F> <8B90> <3840> <8B9B> <3841> <8AAF> <3842> <3843> <4615> <3844> <884F> <3845> <8C9B> <3849> <3725> <384A> <384B> <8CD6> <384E> <8D12> endbfchar 100 beginbfchar <384F> <8D03> <3850> <3851> <8CDB> <3852> <705C> <3853> <8D11> <3854> <3ED0> <3856> <8DA9> <385A> <3B7C> <385D> <7AE7> <385E> <8EAD> <385F> <8EB6> <3860> <8EC3> <3861> <92D4> <3862> <8F19> <3863> <8F2D> <3866> <8FA5> <3867> <9303> <386A> <8FB3> <386F> <5EF8> <3870> <3871> <8FF9> <3873> <3874> <3980> <3875> <3876> <9037> <3879> <9061> <387C> <90A8> <387D> <387E> <90C4> <387F> <3880> <90AE> <3882> <9167> <3883> <91A9> <3884> <91C4> <3885> <7CAC> <3888> <920E> <3889> <6C9F> <388A> <9241> <388B> <9262> <388C> <3892> <932C> <3893> <936B> <3896> <5AC3> <3899> <4965> <389A> <9244> <389E> <9373> <389F> <945B> <38A0> <8EBC> <38A1> <9585> <38A2> <95A6> <38A3> <9426> <38A4> <95A0> <38A5> <6FF6> <38A6> <42B9> <38AA> <49DF> <38AB> <6C1C> <38AC> <967B> <38AD> <9696> <38AE> <416C> <38AF> <96A3> <38B0> <38B1> <61DA> <38B2> <96B6> <38B3> <78F5> <38B4> <38B5> <96BD> <38B6> <53CC> <38B7> <49A1> <38C0> <9731> <38C1> <8642> <38C2> <9736> <38C3> <4A0F> <38C4> <453D> <38C5> <4585> <38C6> <38C7> <7075> <38C8> <5B41> <38C9> <971B> <38CB> <38CC> <9757> <38CD> <5B4A> <38CE> <38CF> <975F> <38D0> <9425> <38D1> <50D0> <38D4> <9789> <38D5> <979F> <38D6> <97B1> <38D7> <97BE> <38D8> <97C0> <38D9> <97D2> <38DA> <97E0> <38DB> <38DC> <97EE> <38DD> <741C> <38DE> <38E0> <97F5> <38E3> <4AD1> <38E4> <9834> <38E5> <9833> endbfchar 100 beginbfchar <38E6> <984B> <38E7> <9866> <38E8> <3B0E> <38E9> <38EA> <3D51> <38EE> <98CA> <38EF> <98B7> <38F0> <98C8> <38F1> <98C7> <38F2> <4AFF> <38F5> <55B0> <38F6> <98E1> <38F7> <98E6> <38F8> <98EC> <38F9> <9378> <38FA> <9939> <38FB> <38FC> <4B72> <38FF> <99F5> <3900> <9A0C> <3901> <9A3B> <3902> <9A10> <3903> <9A58> <3904> <3905> <36C4> <3908> <9AE0> <3909> <9AE2> <390A> <390B> <9AF4> <390C> <4C0E> <390D> <9B14> <390E> <9B2D> <390F> <3910> <5034> <3911> <9B34> <3912> <38C3> <3913> <3914> <9B50> <3915> <9B40> <3916> <3917> <5A45> <3918> <3919> <9B8E> <391A> <9C02> <391B> <9BFF> <391C> <9C0C> <391D> <391E> <9DD4> <3925> <9D7E> <3926> <9D83> <3927> <3928> <9E0E> <3929> <9DC4> <392E> <9D39> <3931> <9E90> <3932> <9E95> <3933> <9E9E> <3934> <9EA2> <3935> <4D34> <3936> <9EAA> <3937> <9EAF> <3938> <3939> <9EC1> <393A> <3B60> <393B> <39E5> <393C> <3D1D> <393D> <4F32> <393E> <37BE> <393F> <3940> <9F02> <3941> <9F08> <3942> <4B96> <3943> <9424> <3944> <3945> <9F17> <3947> <9F39> <3948> <569F> <3949> <568A> <394A> <9F45> <394B> <99B8> <394C> <394D> <97F2> <394E> <847F> <3950> <9F69> <3951> <7ADC> <3952> <9F8E> <3953> <7216> <3954> <4BBE> <3957> <7177> <395B> <739E> <395E> <799F> <3961> <9369> <3962> <93F3> <3963> <3964> <92EC> <3965> <9381> <3966> <93CB> <3969> <7217> <396A> <3EEB> <396B> <7772> endbfchar 100 beginbfchar <396C> <7A43> <396D> <70D0> <3970> <717E> <3971> <3972> <70A3> <3975> <3EC7> <3979> <3722> <397C> <36E1> <3980> <3723> <3981> <3982> <575B> <3988> <8503> <3989> <398B> <8455> <3992> <44F4> <3996> <67F9> <3997> <3733> <3998> <3C15> <3999> <3DE7> <399A> <586C> <399B> <399C> <6810> <399D> <4057> <39A3> <54CB> <39A4> <569E> <39A5> <39A6> <5692> <39AB> <39AC> <939C> <39AD> <4EF8> <39AE> <512B> <39AF> <3819> <39B0> <39B1> <4EBC> <39B2> <39B4> <4F4B> <39B5> <4F8A> <39B6> <39B7> <5A68> <39BA> <3999> <39BD> <3435> <39BE> <4F29> <39C2> <8ADA> <39C3> <39C4> <4E98> <39C5> <50CD> <39C6> <510D> <39C7> <4FA2> <39C8> <4F03> <39CB> <4F42> <39CC> <502E> <39CD> <506C> <39CE> <5081> <39CF> <4FCC> <39D0> <4FE5> <39D1> <5058> <39D2> <50FC> <39D3> <6E76> <39D7> <6D72> <39DA> <51A8> <39DB> <51C3> <39DC> <39DD> <44DD> <39E1> <8D7A> <39E4> <5259> <39E5> <52A4> <39E6> <39E7> <52E1> <39E9> <467A> <39EA> <718C> <39EF> <69D1> <39F0> <39F2> <3EDE> <39F3> <7499> <39F4> <7414> <39F5> <7456> <39F6> <7398> <39F7> <4B8E> <39FA> <53D0> <39FB> <3584> <39FC> <720F> <39FD> <39FE> <55B4> <39FF> <3A00> <54CD> <3A01> <3A02> <571D> <3A03> <925D> <3A04> <96F4> <3A05> <57DD> <3A06> <578D> <3A07> <577F> <3A08> <363E> <3A09> <58CB> <3A0A> <5A99> <3A0F> <5A2C> <3A10> <59B8> <3A11> <5A7E> <3A12> <5ACF> <3A13> <5A12> endbfchar 100 beginbfchar <3A18> <36F5> <3A19> <6D05> <3A1A> <7443> <3A1B> <5A21> <3A1C> <3A1D> <5A81> <3A20> <93E0> <3A21> <748C> <3A22> <3A23> <7105> <3A24> <4972> <3A25> <9408> <3A26> <3A27> <93BD> <3A28> <37A0> <3A29> <5C1E> <3A2A> <5C9E> <3A2B> <5E5E> <3A2C> <5E48> <3A30> <5ECD> <3A31> <5B4F> <3A34> <3701> <3A35> <3A36> <36DD> <3A37> <3A38> <36D3> <3A39> <812A> <3A3E> <5F0C> <3A3F> <5F0E> <3A42> <5A6B> <3A43> <3A44> <5B44> <3A45> <3A46> <8860> <3A47> <607E> <3A4A> <5FDB> <3A4B> <3EB8> <3A50> <61C0> <3A54> <6199> <3A55> <6198> <3A56> <6075> <3A5B> <6471> <3A5E> <3A29> <3A63> <6337> <3A64> <64B6> <3A65> <6331> <3A66> <63D1> <3A69> <62A4> <3A6A> <3A6B> <643B> <3A6C> <656B> <3A6D> <6972> <3A6E> <3BF4> <3A73> <550D> <3A77> <66CE> <3A7A> <3AE0> <3A81> <78EE> <3A85> <3464> <3A89> <668E> <3A8A> <3A8B> <666B> <3A8C> <4B93> <3A8D> <6630> <3A90> <6663> <3A93> <661E> <3A94> <3A95> <38D1> <3A98> <3B99> <3A9B> <74D0> <3A9C> <3B96> <3A9D> <3A9E> <68B6> <3AA0> <3BC4> <3AA1> <6ABE> <3AA4> <6A33> <3AA5> <6A52> <3AA6> <6AC9> <3AA7> <6B05> <3AA8> <3AA9> <6511> <3AAA> <6898> <3AAB> <6A4C> <3AAC> <3BD7> <3AAD> <6A7A> <3AAE> <6B57> <3AB1> <93A0> <3AB2> <92F2> <3AB5> <9289> <3AB8> <9467> <3AB9> <6DA5> <3ABA> <6F0B> <3ABC> <3ABD> <3D8F> <3ABE> <6E04> <3ABF> <3AC0> <5A3D> <3AC1> <6E0A> <3AC2> <5847> <3AC3> <6D24> <3AC4> <7842> endbfchar 100 beginbfchar <3AC5> <713B> <3AC8> <70F1> <3AC9> <7250> <3ACA> <7287> <3ACB> <7294> <3ACE> <5179> <3AD1> <747A> <3AD7> <3F06> <3AD8> <3EB1> <3ADC> <60A7> <3ADD> <3EF3> <3ADE> <74CC> <3ADF> <743C> <3AE0> <9387> <3AE1> <7437> <3AE2> <449F> <3AE3> <3AE4> <4551> <3AE5> <7583> <3AE6> <3F63> <3AE9> <3F58> <3AEA> <7555> <3AEB> <7673> <3AEC> <3AEE> <7468> <3AF2> <3AFB> <3AF3> <3DCD> <3AF4> <3AF5> <3EFF> <3AF8> <91FA> <3AF9> <5732> <3AFA> <9342> <3AFD> <50DF> <3B00> <7778> <3B01> <3B04> <777B> <3B07> <3A5E> <3B08> <3B09> <7438> <3B0A> <749B> <3B0B> <3EBF> <3B0E> <40C8> <3B11> <9307> <3B12> <3B13> <781E> <3B14> <788D> <3B15> <7888> <3B16> <78D2> <3B17> <73D0> <3B18> <7959> <3B1B> <410E> <3B1E> <79A5> <3B1F> <6A2D> <3B20> <3B21> <7A3A> <3B22> <79F4> <3B23> <416E> <3B24> <3B25> <4132> <3B26> <9235> <3B27> <79F1> <3B2D> <3597> <3B2E> <556B> <3B2F> <3570> <3B30> <36AA> <3B33> <7AE2> <3B34> <5A59> <3B38> <5A0D> <3B39> <3B3A> <78F0> <3B3B> <5A2A> <3B3C> <3B3D> <7AFE> <3B3E> <41F9> <3B3F> <7C5D> <3B40> <7C6D> <3B41> <4211> <3B45> <7CCD> <3B48> <7C8E> <3B49> <7C7C> <3B4A> <7CAE> <3B4B> <6AB2> <3B4C> <7DDC> <3B4D> <7E07> <3B4E> <7DD3> <3B4F> <7F4E> <3B53> <7D97> <3B54> <3B55> <426A> <3B58> <67D6> <3B5B> <57C4> <3B5E> <7FDD> <3B5F> <7B27> <3B63> <7B0C> <3B64> <3B65> <99E6> <3B66> <8645> <3B67> <9A63> <3B68> <6A1C> <3B69> endbfchar 100 beginbfchar <3B6C> <9A1F> <3B6D> <3B71> <44EA> <3B72> <8137> <3B73> <4402> <3B74> <80C6> <3B75> <8109> <3B76> <8142> <3B77> <3B78> <98C3> <3B79> <3B7A> <8262> <3B7B> <8265> <3B7C> <3B7D> <8453> <3B7E> <3B7F> <8610> <3B80> <3B81> <5A86> <3B82> <417F> <3B83> <3B84> <5B2B> <3B85> <3B86> <5AE4> <3B87> <3B88> <86A0> <3B8B> <882D> <3B8C> <3B8D> <5A02> <3B8E> <886E> <3B8F> <4F45> <3B90> <8887> <3B91> <88BF> <3B92> <88E6> <3B93> <8965> <3B94> <894D> <3B95> <3B96> <8954> <3B9D> <3EAD> <3B9E> <84A3> <3B9F> <46F5> <3BA0> <46CF> <3BA1> <37F2> <3BA2> <8A3D> <3BA3> <8A1C> <3BA4> <3BA5> <5F4D> <3BA6> <922B> <3BA7> <3BA8> <65D4> <3BA9> <7129> <3BAA> <70C4> <3BAB> <3BAC> <9D6D> <3BAD> <8C9F> <3BAE> <8CE9> <3BAF> <3BB0> <599A> <3BB1> <77C3> <3BB2> <59F0> <3BB3> <36D4> <3BB4> <8E2A> <3BB5> <8EA7> <3BB6> <3BB7> <8F30> <3BB8> <8F4A> <3BB9> <42F4> <3BBA> <6C58> <3BBB> <6FBB> <3BBC> <3BBD> <489B> <3BBE> <6F79> <3BBF> <6E8B> <3BC0> <3BC1> <9BE9> <3BC2> <36B5> <3BC3> <3BC4> <90BB> <3BC6> <5571> <3BC7> <4906> <3BC8> <91BB> <3BC9> <9404> <3BCA> <3BCB> <4062> <3BCC> <3BCD> <9427> <3BD0> <84E5> <3BD1> <8A2B> <3BD2> <9599> <3BD3> <95A7> <3BD4> <9597> <3BD5> <9596> <3BD6> <3BD7> <7445> <3BD8> <3EC2> <3BDC> <3EE7> <3BDD> <3BDE> <968F> <3BE2> <3ECC> <3BE6> <7412> endbfchar 100 beginbfchar <3BE7> <746B> <3BE8> <3EFC> <3BE9> <9741> <3BEA> <3BEB> <6847> <3BEC> <4A1D> <3BF0> <9368> <3BF5> <92BA> <3BF6> <5B11> <3BF7> <8B69> <3BF8> <493C> <3BF9> <73F9> <3BFA> <3BFB> <979B> <3BFD> <9938> <3BFE> <3BFF> <5DC1> <3C02> <981F> <3C03> <3C04> <92F6> <3C05> <3C06> <91E5> <3C07> <44C0> <3C0B> <98DC> <3C0C> <3C0D> <3F00> <3C0E> <922A> <3C0F> <4925> <3C10> <8414> <3C11> <993B> <3C12> <994D> <3C13> <3C14> <3DFD> <3C16> <4B6F> <3C17> <99AA> <3C18> <9A5C> <3C1B> <6A8F> <3C1C> <9A21> <3C1D> <5AFE> <3C1E> <9A2F> <3C1F> <3C20> <4B90> <3C21> <3C22> <99BC> <3C23> <4BBD> <3C24> <4B97> <3C25> <937D> <3C26> <5872> <3C27> <3C28> <5822> <3C2B> <7844> <3C2E> <68C5> <3C2F> <3D7D> <3C30> <9458> <3C31> <3927> <3C32> <6150> <3C35> <6107> <3C36> <9C4F> <3C37> <9C53> <3C38> <9C7B> <3C39> <9C35> <3C3A> <9C10> <3C3B> <9B7F> <3C3C> <9BCF> <3C3D> <3C3E> <9B9F> <3C41> <9D21> <3C42> <4CAE> <3C43> <3C44> <9E18> <3C45> <4CB0> <3C46> <9D0C> <3C4B> <9DA5> <3C4C> <84BD> <3C50> <85FC> <3C51> <4533> <3C55> <8420> <3C56> <85EE> <3C5A> <79E2> <3C5D> <3C5E> <3D62> <3C5F> <93DB> <3C60> <92BE> <3C61> <9348> <3C62> <3C63> <78B9> <3C64> <9277> <3C65> <944D> <3C66> <4FE4> <3C67> <3440> <3C68> <9064> <3C69> <3C6A> <783D> <3C6B> <7854> <3C6C> <78B6> <3C6D> <784B> <3C71> <369A> <3C72> <4F72> <3C73> <6FDA> <3C74> <6FD9> endbfchar 100 beginbfchar <3C76> <701E> <3C77> <5414> <3C78> <3C79> <57BB> <3C7A> <58F3> <3C7B> <578A> <3C7C> <9D16> <3C7D> <57D7> <3C7E> <7134> <3C7F> <34AF> <3C80> <3C81> <71EB> <3C87> <610C> <3C88> <5ACE> <3C89> <5A0B> <3C8A> <42BC> <3C8B> <3C8C> <372C> <3C8D> <4B7B> <3C8E> <3C8F> <93BB> <3C90> <93B8> <3C93> <8472> <3C99> <5994> <3C9C> <7DA8> <3CA2> <92E5> <3CA3> <73E2> <3CA4> <3EE9> <3CA5> <74B4> <3CA8> <3EE1> <3CA9> <3CAA> <6AD8> <3CAB> <73F3> <3CAC> <73FB> <3CAD> <3ED6> <3CB5> <7448> <3CB6> <3CB7> <70A5> <3CB8> <3CB9> <9284> <3CBA> <73E6> <3CBB> <935F> <3CBC> <3CBD> <9331> <3CC0> <9386> <3CC3> <4935> <3CC4> <3CC5> <716B> <3CC8> <56A4> <3CCC> <5502> <3CCD> <79C4> <3CCE> <3CCF> <7DFE> <3CD3> <452E> <3CD4> <9401> <3CD5> <370A> <3CD8> <59B0> <3CDC> <5AA1> <3CDD> <36E2> <3CDE> <3CDF> <36B0> <3CE0> <925F> <3CE1> <5A79> <3CE4> <9374> <3CE5> <3CCD> <3CE6> <3CE7> <4A96> <3CE8> <398A> <3CE9> <50F4> <3CEA> <3D69> <3CEB> <3D4C> <3CEC> <3CED> <7175> <3CEE> <42FB> <3CEF> <3CF0> <6E0F> <3CF1> <3CF2> <44EB> <3CF3> <6D57> <3CF4> <3CF5> <7067> <3CF6> <6CAF> <3CF7> <3CD6> <3CFA> <6E02> <3CFB> <6F0C> <3CFC> <3D6F> <3CFD> <3CFE> <7551> <3CFF> <36BC> <3D00> <34C8> <3D01> <4680> <3D02> <3EDA> <3D03> <4871> <3D04> <59C4> <3D05> <926E> <3D06> <493E> <3D07> <8F41> <3D0A> <5812> <3D0B> <57C8> <3D0C> <36D6> endbfchar 100 beginbfchar <3D0D> <3D0E> <70FE> <3D14> <68B9> <3D15> <6967> <3D1E> <6A1A> <3D21> <843E> <3D22> <44DF> <3D23> <44CE> <3D2A> <833D> <3D2B> <3D2C> <83ED> <3D30> <5989> <3D31> <5A82> <3D32> <3D33> <5A61> <3D34> <5A71> <3D37> <372D> <3D38> <59EF> <3D39> <3D3A> <36C7> <3D3B> <718E> <3D3C> <9390> <3D3D> <669A> <3D3E> <3D3F> <5A6E> <3D40> <5A2B> <3D41> <3D42> <6A2B> <3D47> <711D> <3D4A> <4FB0> <3D4B> <3D4C> <5CC2> <3D50> <6A0C> <3D54> <7133> <3D55> <3D56> <3DA5> <3D57> <6CDF> <3D58> <3D59> <59EB> <3D5A> <5F5C> <3D5B> <3D5C> <7CD3> <3D5D> <3D5E> <3D5F> <3D60> <906C> <3D61> <81F6> <3D62> <770C> <3D63> <6CA2> <3D64> <56FD> <3D65> <5869> <3D66> <6761> <3D67> <5C5E> <3D68> <58F2> <3D69> <70B9> <3D6A> <6803> <3D6D> <4E21> <3D6E> <7B39> <3D6F> <3DCC> <3D70> <732A> <3D71> <7560> <3D72> <583A> <3D73> <82A6> <3D74> <698A> <3D75> <60E3> <3D76> <4EEE> <3D77> <99C4> <3D78> <9EBF> <3D79> <5301> <3D7A> <67A0> <3D7B> <60E8> <3D7C> <51B4> <3D7D> <7A83> <3D7E> <9C3A> <3D7F> <7AC8> <3D80> <691A> <3D81> <59AC> <3D82> <5840> <3D83> <546A> <3D84> <60E7> <3D85> <567A> <3D86> <6955> <3D87> <9C2F> <3D88> <87A5> <3D89> <5C20> <3D8A> <5E0B> <3D8B> <671E> <3D8C> <84AD> <3D8D> <8B81> <3D8E> <4E78> <3D8F> <62C3> <3D90> <6855> <3D92> <82FD> <3D93> <89A5> <3D94> <8FA0> <3D95> <97B8> <3D96> <9847> <3D97> <9ABD> <3D98> <5FB1> <3D99> <6648> endbfchar 100 beginbfchar <3D9A> <66BF> <3D9B> <3D9D> <3DA0> <3DA1> <670E> <3DA2> <6918> <3DA7> <48D0> <3DA8> <4AB8> <3DA9> <3DAA> <3DAD> <51D2> <3DAE> <3DAF> <599F> <3DB0> <3DB1> <3BBE> <3DB2> <3DB3> <399B> <3DB6> <3762> <3DB7> <3DB8> <8B5E> <3DB9> <3DBB> <7209> <3DBC> <3DBD> <3DBE> <8EDA> <3DBF> <528F> <3DC0> <7171> <3DC3> <55BC> <3DC4> <3DC5> <3473> <3DC6> <3DC7> <4718> <3DC8> <3DC9> <5066> <3DCA> <34FB> <3DCB> <3DCD> <477C> <3DCE> <3DCF> <3DD1> <3DD2> <9056> <3DD3> <3DD4> <8B62> <3DD5> <5D5B> <3DD6> <3DD8> <3DD9> <8AEA> <3DDA> <3DDB> <3DDC> <4BC0> <3DDD> <3DDE> <9465> <3DDF> <3DE0> <6195> <3DE1> <5A27> <3DE2> <3DE4> <3DE5> <4E6A> <3DE6> <3DE7> <9656> <3DE8> <6D8F> <3DE9> <3DEA> <8977> <3DEB> <3DED> <7B42> <3DF1> <7A45> <3DF2> <9A26> <3DF3> <365F> <3DF6> <7983> <3DF7> <5D2C> <3DF8> <3DFA> <46D0> <3DFB> <753B> <3DFC> <8865> <3DFD> <58B6> <3DFE> <371C> <3DFF> <3E00> <3C54> <3E01> <9281> <3E02> <3E03> <9330> <3E04> <3E05> <6C39> <3E06> <3E07> <8827> <3E08> <88F5> <3E0C> <6EB8> <3E0F> <39A4> <3E12> <453F> <3E13> <66B6> <3E16> <8943> <3E17> <40DF> <3E18> <3E19> <39A1> <3E1D> <71AD> <3E1E> <8366> <3E1F> <3E21> <4CB7> <3E24> <3E25> <7B43> endbfchar 100 beginbfchar <3E26> <797E> <3E27> <6FB5> <3E28> <3E29> <6A03> <3E2A> <3E2B> <53A2> <3E2C> <3E2D> <93BF> <3E2E> <6836> <3E2F> <975D> <3E30> <3E34> <5D85> <3E35> <3E36> <5715> <3E37> <9823> <3E38> <3E39> <5DAB> <3E3A> <3E3B> <65BE> <3E3C> <69D5> <3E3D> <53D2> <3E40> <3C11> <3E41> <6736> <3E42> <3E43> <35CA> <3E44> <48FA> <3E46> <7808> <3E47> <9255> <3E48> <43F2> <3E49> <43DF> <3E4A> <59F8> <3E4C> <568B> <3E4D> <3E4E> <9012> <3E4F> <55C1> <3E50> <4509> <3E51> <7E7F> <3E52> <6F56> <3E53> <6AB1> <3E54> <34E4> <3E55> <3E56> <373A> <3E58> <3E59> <3E5A> <3DEB> <3E5B> <3E5C> <3E5D> <56BF> <3E5E> <8E0E> <3E5F> <5B6D> <3E60> <63DE> <3E62> <6530> <3E63> <562D> <3E64> <541A> <3E65> <3E66> <4C7D> <3E67> <5622> <3E68> <561E> <3E69> <7F49> <3E6A> <5975> <3E6B> <3E6C> <8770> <3E6D> <8117> <3E6E> <9D5E> <3E6F> <8D18> <3E70> <763B> <3E71> <9C45> <3E72> <764E> <3E73> <77B9> <3E74> <9345> <3E75> <5432> <3E76> <8148> <3E77> <82F7> <3E78> <5625> <3E79> <8132> <3E7A> <8418> <3E7B> <80BD> <3E7C> <55EA> <3E7D> <7962> <3E7E> <5643> <3E7F> <5416> <3E80> <3E81> <35CE> <3E82> <5605> <3E83> <55F1> <3E84> <66F1> <3E85> <3E86> <362D> <3E87> <7534> <3E88> <55F0> <3E89> <55BA> <3E8A> <5497> <3E8B> <5572> <3E8E> <5ED0> <3E92> <9EAB> <3E93> <7D5A> <3E95> <3E96> <629D> <3E97> <976D> <3E98> <5494> endbfchar 100 beginbfchar <3E99> <8CCD> <3E9A> <71F6> <3E9B> <9176> <3E9C> <63FC> <3E9D> <63B9> <3E9E> <63FE> <3E9F> <5569> <3EA0> <3EA1> <9C72> <3EA2> <3EA3> <519A> <3EA4> <34DF> <3EA5> <3EA6> <51A7> <3EA7> <544D> <3EA8> <551E> <3EA9> <5513> <3EAA> <7666> <3EAB> <8E2D> <3EAC> <3EAD> <75B1> <3EAE> <80B6> <3EAF> <8804> <3EB1> <88C7> <3EB2> <81B6> <3EB3> <841C> <3EB4> <44EC> <3EB5> <7304> <3EB6> <830B> <3EB7> <567B> <3EB8> <9170> <3EB9> <9208> <3EBA> <3EBB> <7266> <3EBC> <474E> <3EBD> <3EBE> <40FA> <3EBF> <9C5D> <3EC0> <651F> <3EC1> <48F3> <3EC5> <3EC7> <3EC8> <71A3> <3EC9> <7E8E> <3ECA> <9D50> <3ECB> <3577> <3ECC> <6CB2> <3ECD> <5367> <3ECE> <39DC> <3ECF> <3ED0> <822D> <3ED1> <544B> <3ED3> <3A52> <3ED4> <7374> <3ED5> <3ED6> <4D09> <3ED7> <9BED> <3ED9> <4C5B> <3EDA> <3EDB> <845C> <3EDC> <3EDD> <632E> <3EDE> <7D25> <3EDF> <3A2A> <3EE0> <9008> <3EE1> <52CC> <3EE2> <3E74> <3EE3> <367A> <3EE4> <45E9> <3EE5> <3EE6> <7640> <3EE7> <5AF0> <3EE8> <3EE9> <787A> <3EEA> <47B6> <3EEB> <58A7> <3EEC> <40BF> <3EED> <567C> <3EEE> <9B8B> <3EEF> <5D74> <3EF0> <7654> <3EF1> <3EF2> <9E85> <3EF3> <4CE1> <3EF5> <37FB> <3EF6> <6119> <3EF7> <3EF9> <565D> <3EFA> <3EFB> <5234> <3EFC> <35AD> <3EFE> <9D7C> <3EFF> <7C56> <3F00> <9B39> <3F01> <57DE> <3F02> <5C53> <3F03> <64D3> <3F06> <86AD> <3F07> <3F08> endbfchar 100 beginbfchar <3F0A> <51FE> <3F0B> <3F0C> <5D8E> <3F0D> <9703> <3F0E> <3F0F> <9E81> <3F10> <904C> <3F11> <7B1F> <3F12> <9B02> <3F13> <5CD1> <3F14> <7BA3> <3F15> <6268> <3F16> <6335> <3F17> <9AFF> <3F18> <7BCF> <3F19> <9B2A> <3F1A> <7C7E> <3F1C> <7C42> <3F1D> <7C86> <3F1E> <9C15> <3F1F> <7BFC> <3F20> <9B09> <3F23> <9F5A> <3F24> <5573> <3F25> <5BC3> <3F26> <4FFD> <3F27> <9E98> <3F28> <4FF2> <3F29> <5260> <3F2A> <52D1> <3F2B> <5767> <3F2C> <5056> <3F2D> <59B7> <3F2E> <5E12> <3F2F> <97C8> <3F30> <9DAB> <3F31> <8F5C> <3F32> <5469> <3F33> <97B4> <3F34> <9940> <3F35> <97BA> <3F36> <532C> <3F37> <6130> <3F38> <692C> <3F39> <53DA> <3F3A> <9C0A> <3F3B> <9D02> <3F3C> <4C3B> <3F3D> <9641> <3F3E> <6980> <3F3F> <50A6> <3F40> <7546> <3F41> <3F42> <99DA> <3F43> <5273> <3F45> <9159> <3F46> <9681> <3F47> <915C> <3F49> <9151> <3F4A> <3F4B> <637F> <3F4C> <6ACA> <3F4D> <5611> <3F4E> <918E> <3F4F> <757A> <3F50> <6285> <3F51> <734F> <3F52> <7C70> <3F53> <3F55> <76D6> <3F56> <9B9D> <3F57> <4E2A> <3F58> <3F59> <83BE> <3F5A> <8842> <3F5C> <5C4A> <3F5D> <69C0> <3F60> <521F> <3F61> <5DF5> <3F62> <4ECE> <3F63> <6C31> <3F64> <3F65> <4F39> <3F66> <549C> <3F68> <529A> <3F69> <8D82> <3F6A> <35FE> <3F6C> <35F3> <3F6E> <6B52> <3F6F> <917C> <3F70> <9FA5> <3F71> <9B97> <3F72> <982E> <3F73> <98B4> <3F74> <9ABA> <3F75> <9EA8> <3F76> <9E84> <3F77> <7B14> <3F79> <6BFA> <3F7A> <8818> endbfchar 100 beginbfchar <3F7B> <7F78> <3F7D> <5620> <3F7E> <3F7F> <8E77> <3F80> <9F53> <3F82> <8DD4> <3F83> <8E4F> <3F84> <9E1C> <3F85> <8E01> <3F86> <6282> <3F87> <3F88> <8E28> <3F89> <8E75> <3F8A> <7AD3> <3F8B> <7A3E> <3F8C> <78D8> <3F8D> <6CEA> <3F8E> <8A67> <3F8F> <7607> <3F90> <9F26> <3F91> <6CCE> <3F92> <87D6> <3F93> <75C3> <3F94> <3F95> <7853> <3F96> <8D0C> <3F97> <72E2> <3F98> <7371> <3F99> <8B2D> <3F9A> <7302> <3F9B> <74F1> <3F9C> <8CEB> <3F9D> <3F9E> <862F> <3F9F> <5FBA> <3FA0> <88A0> <3FA1> <44B7> <3FA3> <3FA5> <8A7E> <3FA6> <3FA8> <60FD> <3FA9> <7667> <3FAA> <9AD7> <3FAB> <9D44> <3FAC> <936E> <3FAD> <9B8F> <3FAE> <87F5> <3FB1> <8CF7> <3FB2> <732C> <3FB3> <9721> <3FB4> <9BB0> <3FB5> <35D6> <3FB6> <72B2> <3FB7> <4C07> <3FB8> <7C51> <3FB9> <994A> <3FBA> <6159> <3FBB> <4C04> <3FBC> <9E96> <3FBD> <617D> <3FBF> <575F> <3FC0> <616F> <3FC1> <62A6> <3FC2> <6239> <3FC4> <3A5C> <3FC5> <61E2> <3FC6> <53AA> <3FC7> <6364> <3FC8> <6802> <3FC9> <35D2> <3FCA> <5D57> <3FCB> <8FDA> <3FCC> <3FCE> <50D9> <3FCF> <7906> <3FD0> <5332> <3FD1> <9638> <3FD2> <3FD3> <4065> <3FD5> <77FE> <3FD7> <7CC2> <3FD8> <3FD9> <7CDA> <3FDA> <7A2D> <3FDB> <8066> <3FDC> <8063> <3FDD> <7D4D> <3FDE> <7505> <3FDF> <74F2> <3FE0> <8994> <3FE1> <821A> <3FE2> <670C> <3FE3> <8062> <3FE4> <3FE5> <805B> <3FE6> <74F0> <3FE7> <8103> <3FE8> <7724> <3FE9> <8989> <3FEA> endbfchar 100 beginbfchar <3FEB> <7553> <3FEC> <87A9> <3FED> <87CE> <3FEE> <81C8> <3FEF> <878C> <3FF0> <8A49> <3FF1> <8CAD> <3FF2> <8B43> <3FF3> <772B> <3FF4> <74F8> <3FF5> <84DA> <3FF6> <69B2> <3FF7> <8DA6> <3FF9> <89A9> <3FFB> <6DB9> <3FFC> <87C1> <3FFD> <3FFE> <74E7> <3FFF> <3DDB> <4000> <7176> <4001> <60A4> <4002> <619C> <4003> <3CD1> <4005> <6077> <4007> <7F71> <4009> <60E9> <400A> <4B7E> <400B> <400C> <92DB> <400F> <854C> <4010> <42B5> <4011> <73EF> <4012> <51B5> <4013> <3649> <4016> <9344> <4017> <4018> <82EE> <4019> <401A> <783C> <401B> <6744> <401C> <62DF> <4022> <4FAB> <4023> <4024> <5008> <402B> <402C> <5FA4> <402F> <6EDB> <4030> <4032> <5101> <4033> <347A> <4034> <510E> <4035> <986C> <4036> <3743> <4037> <8416> <403A> <5160> <403B> <403C> <516A> <4044> <5B82> <4045> <877D> <4048> <51B2> <4049> <51B8> <404A> <9D34> <404B> <51C9> <404C> <51CF> <404D> <51D1> <404E> <3CDC> <404F> <51D3> <4050> <4051> <51B3> <4054> <51ED> <4055> <83CD> <4056> <693E> <4057> <4058> <5F7B> <4059> <520B> <405A> <5226> <405B> <523C> <405C> <52B5> <405D> <5257> <405E> <5294> <405F> <52B9> <4060> <52C5> <4061> <7C15> <4062> <8542> <4063> <52E0> <4064> <860D> <4065> <4067> <4068> <5549> <4069> <6ED9> <406D> <5333> <406F> <4070> <6CCB> <4071> <4072> <681B> <4073> <73D5> <4074> <604A> <4075> <3EAA> <4076> <38CC> <4077> endbfchar 100 beginbfchar <4078> <71DD> <4079> <44A2> <407A> <536D> <407B> <5374> <407C> <407D> <537E> <4081> <77E6> <4082> <5393> <4083> <4084> <53A0> <4085> <53AB> <4086> <53AE> <4087> <73A7> <4088> <4089> <3F59> <408A> <739C> <408B> <53C1> <408C> <53C5> <408D> <6C49> <408E> <4E49> <408F> <57FE> <4090> <53D9> <4091> <3AAB> <4092> <4093> <53E0> <4096> <53F6> <4097> <4098> <5413> <4099> <7079> <409A> <552B> <409B> <6657> <409C> <6D5B> <409D> <546D> <40A0> <555D> <40A1> <548F> <40A2> <54A4> <40A3> <47A6> <40A6> <3DB4> <40AA> <5547> <40AB> <4CED> <40AC> <542F> <40AD> <7417> <40AE> <5586> <40AF> <55A9> <40B3> <4552> <40B4> <40B5> <66B3> <40B6> <40B7> <5637> <40B8> <66CD> <40B9> <40BA> <66A4> <40BC> <564D> <40BD> <564F> <40BE> <78F1> <40BF> <56F1> <40C0> <9787> <40C1> <53FE> <40C2> <5700> <40C3> <56EF> <40C4> <56ED> <40C5> <40C6> <3623> <40C7> <40C8> <5746> <40C9> <40CA> <6C6E> <40CB> <708B> <40CC> <5742> <40CD> <36B1> <40CE> <40CF> <57E6> <40D0> <40D1> <5803> <40D4> <5826> <40D5> <40D7> <58AA> <40D8> <3561> <40D9> <58E0> <40DA> <58DC> <40DB> <40DC> <58FB> <40DD> <5BFF> <40DE> <5743> <40E1> <93D3> <40E2> <35A1> <40E3> <591F> <40E4> <68A6> <40E5> <36C3> <40E6> <6E59> <40E7> <40E8> <5A24> <40EA> <40EB> <8505> <40EC> <59C9> <40F1> <59D9> <40F5> <6D71> <40F8> <59F9> <40F9> <40FA> <5AAB> endbfchar 100 beginbfchar <40FB> <5A63> <40FC> <36E6> <40FD> <40FF> <3708> <4100> <5A96> <4101> <7465> <4102> <5AD3> <4105> <4106> <3732> <4107> <4108> <5E83> <4109> <52D0> <410A> <5B76> <410B> <6588> <410C> <5B7C> <410D> <410E> <4004> <410F> <485D> <4110> <4111> <5BD5> <4115> <5BF3> <4116> <5B9D> <4117> <4D10> <4118> <5C05> <4119> <411A> <5C13> <411B> <73CE> <411C> <5C14> <411F> <5C49> <4120> <48DD> <4121> <5C85> <4122> <5CE9> <4123> <5CEF> <4124> <5D8B> <4127> <5D10> <4128> <5D18> <4129> <5D46> <412A> <412B> <5CBA> <412C> <5DD7> <412D> <82FC> <412E> <382D> <4132> <8287> <4133> <3836> <4134> <3BC2> <4135> <5E2E> <4136> <6A8A> <4138> <5E7A> <413B> <53A6> <413C> <4EB7> <413E> <53A8> <413F> <4140> <5E09> <4141> <5EF4> <4142> <4143> <5EF9> <4144> <5EFB> <4145> <38A0> <4146> <5EFC> <4147> <683E> <4148> <941B> <4149> <5F0D> <414C> <3ADE> <414D> <414E> <5F3A> <4151> <4152> <5F63> <4153> <4154> <5F72> <4155> <9340> <4156> <4157> <5FA7> <4158> <5DB6> <4159> <3D5F> <415E> <91D6> <4161> <6031> <4162> <6685> <4163> <3963> <4164> <3DC7> <4165> <3639> <4166> <5790> <4167> <4168> <7971> <4169> <3E40> <416A> <609E> <4170> <74A4> <4171> <50E1> <4172> <5AA0> <4173> <6164> <4174> <6142> <4177> <6181> <4178> <51F4> <4179> <417A> <6187> <417B> <5BAA> <417E> <61D3> <4181> <61D0> <4182> <3932> <4185> <6023> <4186> <615C> endbfchar 100 beginbfchar <4187> <651E> <4188> <638B> <4189> <418A> <62C5> <418B> <418C> <62D5> <418D> <418E> <636C> <418F> <4190> <3A17> <4191> <6438> <4192> <63F8> <4195> <6F8A> <4196> <4198> <4199> <64E1> <419A> <64E5> <419B> <947B> <419C> <3A66> <419D> <643A> <419E> <3A57> <419F> <654D> <41A0> <6F16> <41A3> <6585> <41A4> <656D> <41A5> <655F> <41A7> <65B5> <41A8> <41A9> <4B37> <41AA> <65D1> <41AB> <40D8> <41AC> <41AD> <65E0> <41AE> <65E3> <41AF> <5FDF> <41B0> <41B1> <6618> <41B4> <6644> <41B7> <664B> <41B8> <41B9> <6667> <41BA> <41BB> <6673> <41C1> <77C5> <41C2> <41C3> <99A4> <41C4> <6702> <41C7> <69FA> <41C8> <41CA> <6767> <41CB> <6762> <41CE> <67D7> <41CF> <44E9> <41D0> <6822> <41D1> <6E50> <41D2> <923C> <41D3> <6801> <41D6> <685D> <41D7> <41D8> <69E1> <41D9> <6A0B> <41DA> <41DB> <6973> <41DC> <68C3> <41DD> <41DE> <6901> <41DF> <6900> <41E0> <3A01> <41E1> <41E2> <3B80> <41E3> <67AC> <41E4> <6961> <41E5> <41E6> <42FC> <41E7> <6936> <41E8> <6998> <41E9> <3BA1> <41EA> <41EB> <8363> <41EC> <5090> <41ED> <69F9> <41F0> <6A45> <41F1> <41F2> <6A9D> <41F3> <3BF3> <41F4> <67B1> <41F5> <6AC8> <41F6> <41F7> <3C0D> <41F8> <6B1D> <41F9> <41FA> <60DE> <41FB> <6B35> <41FC> <6B74> <41FD> <41FE> <6EB5> <41FF> <4201> <4202> <3740> <4203> <5421> endbfchar 100 beginbfchar <4204> <4205> <6BE1> <4206> <4207> <6BDC> <4208> <6C37> <420C> <6C5A> <420D> <8226> <420E> <6C79> <420F> <4210> <44C5> <4216> <36E5> <4217> <3CEB> <4218> <4219> <9B83> <421C> <7F8F> <421D> <6837> <4221> <6D96> <4222> <6D5C> <4223> <6E7C> <4224> <6F04> <4228> <8533> <4229> <422A> <51C7> <422D> <842E> <422E> <4230> <4231> <7453> <4232> <4233> <79CC> <4234> <6E4F> <4235> <5A91> <4236> <4237> <6FF8> <4238> <370D> <4239> <6F9D> <423A> <423B> <6EFA> <423E> <4555> <423F> <93F0> <4240> <6F44> <4241> <6F5C> <4242> <3D4E> <4243> <6F74> <4244> <4245> <3D3B> <4246> <6F9F> <4247> <4248> <6FD3> <424F> <51DF> <4254> <704B> <4255> <707E> <4256> <70A7> <4258> <70CC> <425B> <70DF> <425C> <4104> <425D> <3DE8> <425E> <71B4> <425F> <7196> <4260> <4261> <712B> <4262> <7145> <4263> <5A88> <4264> <714A> <4266> <4267> <714F> <4268> <9362> <4269> <426A> <712C> <426E> <71BA> <426F> <4270> <70BD> <4271> <720E> <4272> <9442> <4273> <7215> <4274> <5911> <4275> <9443> <4276> <7224> <4277> <9341> <4278> <4279> <722E> <427A> <7240> <427B> <427C> <68BD> <427D> <7255> <427E> <7257> <427F> <3E55> <4280> <4281> <680D> <4282> <6F3D> <4283> <7282> <4285> <732B> <4288> <48ED> <4289> <428A> <7328> <428B> <732E> <428C> <73CF> <428D> <73AA> <4290> <73C9> <4291> <7449> <4295> <6623> endbfchar 100 beginbfchar <4296> <36C5> <429A> <73F7> <429B> <7415> <429C> <6903> <429D> <429E> <7439> <429F> <3ED7> <42A1> <42A2> <7460> <42A3> <42A4> <7447> <42A5> <73E4> <42A6> <7476> <42A7> <83B9> <42A8> <746C> <42A9> <7474> <42AA> <93F1> <42AB> <6A2C> <42AC> <7482> <42AD> <4953> <42B2> <5B46> <42B5> <74C8> <42B6> <42B7> <750E> <42B8> <751E> <42BB> <5BD7> <42BC> <42BD> <9385> <42BE> <754D> <42BF> <754A> <42C0> <7567> <42C1> <756E> <42C2> <42C3> <3F04> <42C4> <42C5> <758E> <42C6> <745D> <42C7> <759E> <42C8> <75B4> <42C9> <7602> <42CA> <762C> <42CB> <7651> <42CC> <764F> <42CD> <766F> <42CE> <7676> <42CF> <42D0> <7690> <42D1> <81EF> <42D2> <37F8> <42D5> <76A1> <42D6> <76A5> <42D7> <76B7> <42D8> <76CC> <42D9> <42DA> <8462> <42DE> <771E> <42DF> <7726> <42E0> <7740> <42E1> <64AF> <42E2> <42E3> <7758> <42E4> <42E5> <77AF> <42E9> <77F4> <42EB> <68CA> <42EC> <78AF> <42ED> <78C7> <42EE> <78D3> <42EF> <96A5> <42F0> <792E> <42F1> <42F2> <78D7> <42F3> <7934> <42F4> <78B1> <42F5> <42F6> <8FB8> <42F7> <8884> <42F8> <42F9> <7986> <42FA> <8900> <42FB> <6902> <42FC> <7980> <42FD> <42FE> <799D> <42FF> <4300> <793C> <4301> <79A9> <4302> <6E2A> <4303> <4304> <3EA8> <4305> <79C6> <4306> <4307> <79D4> <4309> <5525> <430E> <5590> <430F> <4310> <39EC> <4311> <4312> <8E46> <4316> endbfchar 100 beginbfchar <4317> <777A> <4318> <4319> <3A34> <431A> <47D5> <431E> <64DD> <4323> <648D> <4324> <8E7E> <4325> <432F> <47F4> <4332> <9AB2> <4333> <3A67> <4334> <4335> <3FED> <4336> <3506> <433A> <433B> <9D6E> <433C> <9815> <433E> <43D9> <4340> <64B4> <4341> <54E3> <4343> <4345> <39FB> <434A> <64EA> <434D> <8E68> <4352> <480B> <4353> <4354> <3FFA> <4355> <5873> <4356> <435D> <5579> <435F> <43BA> <4361> <4AB4> <4364> <81AA> <4365> <98F5> <4366> <4367> <6379> <4368> <39FE> <4369> <436A> <8DC0> <436B> <56A1> <436C> <647C> <436D> <3E43> <4376> <3992> <4377> <3A06> <4378> <4379> <3578> <4380> <34BC> <4381> <6C3D> <4382> <438E> <438F> <3A18> <4390> <4391> <4395> <95AA> <4397> <4398> <7140> <439A> <5156> <439C> <5088> <439E> <3493> <439F> <5186> <43A0> <5E42> <43A1> <5205> <43A2> <5227> <43A3> <5279> <43A5> <3553> <43A6> <53C2> <43A7> <535F> <43A9> <553F> <43AB> <55D8> <43AC> <35DD> <43AD> <5621> <43AF> <5654> <43B0> <43B2> <43B4> <43B7> <37B9> <43B8> <5CC1> <43B9> <5D15> <43BA> <5D56> <43BB> <3838> <43BC> <4E81> <43BD> <5EBD> <43BE> <3914> <43BF> <61B9> <43C0> <6290> <43C1> <6318> <43C2> <645A> <43C3> <6491> <43C4> <816D> <43C5> <8184> <43C6> <8193> <43C7> <6800> <43C8> <3BBC> <43C9> <728F> <43CA> <72CD> <43CC> <7339> <43CD> <7542> <43CE> <75DC> <43CF> <3FC0> <43D0> endbfchar 100 beginbfchar <43D1> <3FD7> <43D4> <43D5> <40A8> <43D6> <7839> <43D7> <4103> <43D8> <7A91> <43D9> <7C1B> <43DA> <7CED> <43DB> <7F93> <43DC> <7FAE> <43DE> <82FF> <43DF> <585F> <43E0> <86B2> <43E2> <878B> <43E3> <8947> <43E5> <8A29> <43E7> <8E71> <43E8> <43E9> <8EB0> <43EB> <915E> <43EC> <918C> <43ED> <990E> <43EE> <991C> <43F1> <9B81> <43F2> <9DC0> <43F3> <9D93> <43F4> <9EAC> <43F5> <4D91> <43F8> <9E7B> <43F9> <7089> <43FA> <7348> <43FC> <7999> <43FD> <8FB7> <43FF> <9942> <445F> <00A9> <4460> <2122> <4461> <2026> <44C1> <20AC> <44C2> <20AC> <44C3> <2110> <44C4> <20AC> <44C5> <20AC> <44C8> <2E80> <44DF> <4E28> <44E0> <5902> <44E3> <9751> <44E4> <44E5> <4E5B> <44E6> <4EBB> <44E7> <353E> <44E8> <5C23> <44E9> <5F51> <44EA> <5FC4> <44EB> <38FA> <44EC> <624C> <44ED> <6535> <44EE> <6B7A> <44EF> <6C35> <44F0> <6C3A> <44F1> <706C> <44F2> <722B> <44F3> <4E2C> <44F4> <72AD> <44F5> <44F6> <7F52> <44F7> <793B> <44F8> <7CF9> <44F9> <7F53> <44FA> <44FB> <34C1> <44FC> <44FD> <8002> <44FE> <8080> <44FF> <4500> <4501> <535D> <4502> <8864> <4503> <89C1> <4504> <4505> <8BA0> <4506> <8D1D> <4507> <9485> <4508> <9578> <4509> <957F> <450A> <95E8> <450B> <450C> <97E6> <450D> <9875> <450E> <98CE> <450F> <98DE> <4510> <9963> <4511> <4512> <9C7C> <4513> <9E1F> <4514> <9EC4> <4515> <6B6F> <4516> <9F9C> <4517> <4E37> <4518> <4519> <961D> endbfchar 100 beginbfchar <451A> <6237> <451B> <94A2> <451C> <2E84> <4520> <2E8A> <4523> <2E95> <4524> <2E9C> <4525> <2EA5> <4526> <2EA7> <4527> <2EAA> <4528> <2EAC> <4529> <2EAE> <452A> <2EB6> <452B> <2EBC> <452C> <2EBE> <452D> <2ECA> <4530> <2ECF> <4533> <2EDE> <4536> <650A> <4537> <4E3D> <4538> <6EDD> <4539> <9D4E> <453A> <91DF> <453B> <453C> <4F1A> <453D> <4F28> <453E> <4FA8> <453F> <5174> <4540> <519C> <4541> <51E4> <4542> <52A1> <4543> <52A8> <4544> <533B> <4545> <534E> <4546> <53D1> <4547> <53D8> <4548> <56E2> <4549> <58F0> <454A> <5904> <454B> <5907> <454C> <5932> <454D> <5934> <454E> <5B66> <4551> <5C9A> <4552> <5E86> <4553> <603B> <4554> <6589> <4555> <67FE> <4556> <6804> <4557> <6865> <4558> <6D4E> <4559> <70BC> <455A> <7535> <455B> <7EA4> <455C> <7EAC> <455D> <7EBA> <455E> <7EC7> <455F> <7ECF> <4560> <7EDF> <4561> <7F06> <4562> <7F37> <4563> <827A> <4564> <82CF> <4565> <836F> <4566> <89C6> <4567> <8BBE> <4568> <8BE2> <456B> <8F6E> <456C> <7411> <456D> <7CFC> <456E> <7DCD> <456F> <6946> <4570> <7AC9> <4571> <78B8> <4572> <80BC> <4573> <8D0B> <4574> <80F6> <4575> <4576> <809F> <4577> <9EC7> <4578> <4CCD> <4579> <9DC9> <457A> <9E0C> <457B> <4C3E> <457E> <9E0A> <457F> <4580> <35C1> <4581> <6E9A> <4582> <823E> <4583> <7519> <4584> <4911> <4585> <9A6C> <4586> <9A8F> <4587> <9F99> <4588> <7987> <458D> <4E24> <458E> <4E80> <458F> <4E87> <4590> <4EBF> <4591> <4EEB> <4592> <4F37> endbfchar 100 beginbfchar <4593> <344C> <4594> <4FBD> <4595> <3E48> <4596> <5003> <4597> <347D> <4598> <34A5> <4599> <5905> <459A> <51DB> <459B> <51FC> <459C> <4E89> <459D> <5290> <459E> <5327> <459F> <35C7> <45A0> <53A9> <45A1> <3551> <45A2> <53B0> <45A3> <5423> <45A4> <356D> <45A5> <3572> <45A6> <3681> <45A7> <5493> <45A8> <54A3> <45A9> <54B4> <45AA> <54B9> <45AB> <54D0> <45AC> <54EF> <45AD> <5518> <45AE> <5523> <45AF> <5528> <45B0> <3598> <45B1> <35A5> <45B2> <35BF> <45B3> <55D7> <45B4> <35C5> <45B5> <45B6> <4053> <45B7> <45B8> <45B9> <45BA> <45BB> <45BC> <45BD> <45BE> <45BF> <45C0> <40BB> <45C1> <45C2> <5652> <45C3> <45C4> <45C8> <35FB> <45CD> <3F93> <45D7> <3FF9> <45D8> <45D9> <6432> <45DE> <45DF> <45E0> <45E1> <45E2> <54CC> <45E3> <82C4> <45E4> <55B9> <45E5> <45E6> <9C26> <45E7> <9AB6> <45E8> <45E9> <80EC> <45EA> <5C1C> <45EB> <45EC> <8134> <45ED> <3797> <45EE> <45EF> <91B6> <45F4> <45F5> <3609> <45F6> <45F7> <56AF> <4603> <5A54> <4608> <579C> <460F> <3703> <4618> <5899> <4619> <5268> <461A> <361A> <461B> <461C> <7BB2> <461D> <5B68> <461E> <4800> <461F> <4B2C> <4620> <9F27> <4621> <49E7> <4622> <9C1F> <4623> <9B8D> <4626> <55FB> <4627> <35F2> <4628> <5689> <4629> <5D3E> <462A> <5D48> <462B> <3DFC> <462C> <380F> <462D> <5DA4> endbfchar 100 beginbfchar <462E> <5DB9> <462F> <3820> <4630> <5F25> <4631> <5F83> <4632> <3908> <4633> <393F> <4634> <394D> <4635> <60D7> <4636> <613D> <4637> <5CE5> <4638> <3989> <4639> <61B7> <463A> <61CF> <463B> <39B8> <463C> <622C> <463D> <62E5> <463E> <39F8> <463F> <56B1> <4640> <3A03> <4641> <63E2> <4642> <63FB> <4643> <6407> <4644> <3A4B> <4645> <64C0> <4646> <9F9F> <4647> <3A97> <4648> <6586> <4649> <3ABD> <464A> <65FF> <464B> <6653> <464C> <3AF2> <464D> <6692> <464E> <3B22> <464F> <6716> <4650> <3B42> <4651> <67A4> <4652> <3B58> <4653> <684A> <4654> <6884> <4655> <3B72> <4656> <3B71> <4657> <3B7B> <4658> <6909> <4659> <6943> <465A> <725C> <465B> <6964> <465C> <699F> <465D> <6985> <465E> <69D6> <465F> <3BDD> <4660> <6A65> <4661> <6A74> <4662> <6A71> <4663> <6A82> <4664> <3BEC> <4665> <6A99> <4666> <3BF2> <4667> <6AAB> <4668> <6AB5> <4669> <6AD4> <466A> <6AF6> <466B> <6B81> <466C> <6BC1> <466D> <6BEA> <466E> <6C75> <466F> <6CAA> <4670> <3CCB> <4671> <6D02> <4672> <6D06> <4673> <6D26> <4674> <6D81> <4675> <3CEF> <4676> <6DA4> <4677> <6DB1> <4678> <6E15> <4679> <6E18> <467A> <6E29> <467B> <6E86> <467C> <467D> <6EBB> <467E> <6EE2> <467F> <6EDA> <4680> <9F7F> <4683> <6F24> <4684> <6F34> <4685> <3D46> <4686> <4687> <6F81> <4688> <6FBE> <4689> <3D6A> <468A> <3D75> <468B> <71B7> <468C> <5C99> <468D> <3D8A> <468E> <702C> <468F> <3D91> <4690> <7050> <4691> <7054> <4692> <706F> <4693> <707F> endbfchar 100 beginbfchar <4694> <4695> <43C1> <4696> <35F1> <4697> <4698> <364E> <4699> <3DAD> <469A> <469B> <667D> <469C> <7C74> <469D> <748D> <469E> <7E92> <469F> <4503> <46A0> <46A1> <46A2> <46A3> <347E> <46A4> <46A5> <46A6> <46A7> <8771> <46A8> <63C1> <46A9> <7777> <46AA> <898A> <46AB> <46AC> <8B4C> <46AD> <46AE> <492A> <46B2> <3AF0> <46B3> <708F> <46B4> <46B5> <46B6> <46B7> <6888> <46B8> <46B9> <9366> <46BA> <93C6> <46BB> <46BD> <928F> <46BE> <8614> <46BF> <46C0> <4190> <46C1> <678F> <46C2> <681E> <46C3> <3863> <46C4> <46C5> <3B19> <46C6> <8496> <46C7> <46C8> <39E2> <46C9> <8480> <46CA> <436E> <46CB> <9771> <46CC> <999B> <46CD> <492D> <46CE> <6F17> <46CF> <46D0> <70A6> <46D1> <46D2> <7E65> <46D3> <5D2F> <46D4> <3DF3> <46D7> <7DA4> <46D8> <8426> <46D9> <5485> <46DA> <46DB> <46DC> <577E> <46DF> <3FE5> <46E2> <7003> <46E3> <46E4> <5D70> <46E5> <738F> <46E8> <4FC8> <46E9> <7FE7> <46EA> <7310> <46EB> <7338> <46EC> <7341> <46ED> <3EA9> <46EE> <71F5> <46EF> <46F0> <73E1> <46F1> <3ECA> <46F2> <3ED1> <46F3> <7419> <46F6> <3EE2> <46F7> <3EF0> <46F8> <3EF4> <46F9> <3EFA> <46FA> <74D3> <46FB> <3F0E> <46FC> <3F53> <46FD> <756D> <46FE> <7572> <46FF> <758D> <4700> <3F7C> <4701> <75C8> <4702> <764D> <4703> <7674> <4704> <3FDC> <4705> <767A> endbfchar 100 beginbfchar <4706> <7188> <4707> <5623> <4708> <8980> <4709> <401D> <470A> <7743> <470B> <4039> <470C> <4045> <470D> <35DB> <470E> <7798> <470F> <406A> <4710> <406F> <4711> <77BE> <4712> <77CB> <4713> <7818> <4714> <781C> <4715> <7847> <4716> <7851> <4717> <7866> <4718> <8448> <4719> <471A> <7933> <471B> <7932> <471C> <4109> <471D> <7991> <471E> <7A06> <471F> <4167> <4720> <41B2> <4721> <7ABC> <4722> <8279> <4723> <41C4> <4724> <7ACF> <4725> <7ADB> <4726> <41CF> <4727> <7B62> <4728> <7B6C> <4729> <7B7B> <472A> <7C12> <472B> <4260> <472C> <427A> <472D> <7C7B> <472E> <7C9C> <472F> <428C> <4730> <7CB8> <4731> <4294> <4732> <8F93> <4733> <70C0> <4734> <4735> <7DCF> <4736> <7DD4> <4737> <7DD0> <4738> <7DFD> <4739> <7FB4> <473A> <729F> <473B> <4397> <473C> <8020> <473D> <8025> <473E> <802E> <473F> <8031> <4740> <8054> <4741> <57B4> <4742> <70A0> <4743> <80B7> <4744> <80E9> <4745> <43ED> <4746> <810C> <4747> <810E> <4748> <8112> <4749> <8114> <474A> <4401> <474B> <3B39> <474C> <8156> <474F> <4413> <4750> <817C> <4751> <4425> <4752> <442D> <4753> <81A5> <4754> <57EF> <4755> <81C1> <4756> <81E4> <4757> <8254> <4758> <448F> <4759> <8276> <475A> <82CA> <475B> <82D8> <475C> <44B0> <475D> <8357> <475E> <9669> <475F> <8405> <4760> <70F5> <4761> <8464> <4762> <8488> <4763> <4504> <4764> <84BE> <4765> <84E1> <4766> <84F8> <4767> <8510> <4768> <8538> <4769> <8552> <476A> <453B> <476D> <85E0> endbfchar 100 beginbfchar <476E> <4577> <476F> <8672> <4770> <8692> <4771> <86EF> <4772> <9645> <4773> <4606> <4774> <4617> <4775> <88AE> <4776> <88FF> <4777> <8924> <4778> <8991> <4779> <477A> <8A38> <477B> <8A94> <477C> <8AB4> <477D> <8C51> <477E> <8CD4> <477F> <8CF2> <4780> <8D1C> <4781> <4798> <4782> <8DC3> <4783> <47ED> <4784> <8E3A> <4785> <5754> <4786> <55F5> <4787> <4837> <4788> <8ECE> <4789> <8EE2> <478A> <8EE4> <478B> <8EED> <478C> <8EF2> <478D> <8FC1> <478E> <8FCA> <478F> <8FCC> <4790> <9033> <4791> <48AD> <4792> <98E0> <4793> <9213> <4794> <491E> <4795> <9228> <4796> <9258> <4797> <926B> <4798> <92B1> <4799> <92AE> <479A> <92BF> <479B> <92E3> <479C> <92EB> <479F> <92FD> <47A0> <9343> <47A1> <9384> <47A2> <93AD> <47A3> <4945> <47A4> <4951> <47A5> <9417> <47A6> <941D> <47A7> <942D> <47A8> <943E> <47A9> <496A> <47AA> <9454> <47AB> <9479> <47AC> <952D> <47AD> <95A2> <47AE> <49A7> <47AF> <95F4> <47B0> <9633> <47B1> <49E5> <47B2> <4A24> <47B3> <9740> <47B4> <4A35> <47B5> <97B2> <47B6> <97C2> <47B7> <4AE4> <47B8> <98B9> <47B9> <4B19> <47BA> <98F1> <47BB> <5844> <47BC> <9919> <47BD> <9937> <47BE> <995D> <47BF> <9962> <47C0> <4B70> <47C1> <99C5> <47C2> <4B9D> <47C3> <9A3C> <47C4> <9B0F> <47C5> <9B69> <47C6> <9BDD> <47C7> <9BF1> <47C8> <9BF4> <47C9> <4C6D> <47CA> <9C20> <47CB> <376F> <47CC> <47CD> <9D49> <47CE> <9EFE> <47CF> <5650> <47D0> <9DBD> <47D1> <9DFC> <47D2> <94F6> <47D3> <8FB6> endbfchar 100 beginbfchar <47D4> <9EB1> <47D5> <9EBD> <47D6> <9EC6> <47D7> <94DC> <47D8> <9EE2> <47D9> <9EF1> <47DA> <9EF8> <47DB> <9F44> <47DF> <94C3> <47E0> <47E1> <94C1> <47E6> <5757> <47E7> <7173> <47ED> <549E> <47F3> <4800> <4806> <3647> <4807> <480A> <5364> <4812> <70BB> <481D> <7198> <481E> <481F> <69E9> <4820> <36C8> <482A> <482B> <482C> <482D> <4840> <58B5> <4841> <4844> <484B> <5788> <484C> <484D> <4851> <4852> <5965> <4853> <4854> <4855> <573F> <485A> <485B> <485F> <4860> <4864> <57A1> <4865> <7151> <4866> <4867> <486A> <486B> <486C> <486F> <56B9> <4870> <4871> <3618> <4874> <4875> <4876> <4877> <4878> <4879> <487C> <487D> <487E> <4883> <4884> <4885> <949F> <4886> <4887> <36B9> <488A> <56D6> <488B> <4890> <4891> <4892> <4893> <4897> <489F> <63E6> <48A0> <48A1> <48A2> <48A6> <48AB> <3DF7> <48AE> <8FD0> <48AF> <48BB> <7E9F> <48BE> <4CA4> <48BF> <9547> <48C0> <48C1> <71A2> <48C2> <48C3> <48C4> <4D9C> <48C5> <48C6> <8FBE> <48C7> <8FBA> <48C8> <48C9> <8FB9> <48CA> <48CB> <4EEA> <48CC> <48CD> <8E80> <48CE> endbfchar 100 beginbfchar <48D1> <48D2> <48D5> <4E9A> <48D6> <48D7> <48DC> <48DD> <48DE> <3DC6> <48DF> <48E0> <4E1C> <48E4> <48E5> <55DE> <48E6> <8786> <48E7> <48E8> <48E9> <5B90> <48EA> <48F1> <48F5> <48F6> <48F7> <48F8> <48FB> <48FC> <48FD> <4E1A> <48FE> <4E04> <48FF> <5B0D> <4900> <36AC> <4901> <537D> <4902> <36A5> <4903> <589A> <4904> <4905> <57AA> <4908> <490D> <4912> <4913> <4914> <57A7> <4915> <4916> <4917> <4918> <491B> <9C1B> <491C> <491D> <3E06> <491E> <491F> <4920> <4921> <4922> <577A> <4923> <54DA> <4924> <717A> <4925> <4926> <4927> <4928> <4929> <492A> <492B> <492C> <492D> <492E> <3635> <492F> <4930> <5220> <4940> <4562> <4941> <5B1F> <4942> <4943> <9F50> <4944> <9EA6> <4945> <4946> <51E2> <4947> <5342> <4948> <66AD> <4949> <585C> <494A> <5553> <494B> <3D85> <494C> <6160> <494D> <48AE> <494E> <97BD> <494F> <4950> <60B3> <4951> <8424> <4952> <9814> <4953> <4954> <4955> <4956> <3B2B> <4957> <3D32> <4958> <4959> <7081> <495A> <5C9C> <495B> <495C> <3730> <4961> <0100> <4962> <00C1> <4963> <01CD> <4964> <00C0> <4965> <0112> <4966> <00C9> <4967> <011A> endbfchar 52 beginbfchar <4968> <00C8> <4969> <014C> <496A> <00D3> <496B> <01D1> <496C> <00D2> <496D> <496E> <1EBE> <496F> <4970> <1EC0> <4971> <00CA> <4972> <0101> <4973> <00E1> <4974> <01CE> <4975> <00E0> <4976> <0251> <4977> <0113> <4978> <00E9> <4979> <011B> <497A> <00E8> <497B> <012B> <497C> <00ED> <497D> <01D0> <497E> <00EC> <497F> <014D> <4980> <00F3> <4981> <01D2> <4982> <00F2> <4983> <016B> <4984> <00FA> <4985> <01D4> <4986> <00F9> <4987> <01D6> <4988> <01D8> <4989> <01DA> <498A> <01DC> <498B> <00FC> <498C> <498D> <1EBF> <498E> <498F> <1EC1> <4990> <00EA> <4991> <0261> <4992> <0283> <4993> <0250> <4994> <025B> <4995> <0254> <4996> <0275> <4997> <0153> <4998> <00F8> <4999> <014B> <499A> <028A> <499B> <026A> endbfchar 100 beginbfrange <0001> <005F> <0020> <0065> <0066> <3001> <0070> <0072> <0074> <0077> <0080> <0081> <0082> <0083> <0086> <0087> <0088> <0089> <3014> <008A> <008B> <008C> <008D> <3010> <008E> <008F> <0090> <0091> <300A> <0092> <0093> <0094> <0095> <3008> <0096> <0097> <0098> <0099> <300C> <009A> <009B> <009C> <009D> <300E> <009E> <009F> <00A0> <00A5> <00A6> <00A7> <2018> <00A8> <00A9> <201C> <00AA> <00AB> <301D> <00C7> <00C8> <00C9> <00CA> <00CB> <00CC> <00CD> <00CF> <00D9> <00DA> <2266> <00DF> <00E3> <00E5> <00E6> <2229> <00F9> <00FA> <2196> <0106> <0107> <00A2> <010C> <010E> <0110> <0112> <339C> <0115> <0116> <338E> <0122> <0129> <2581> <013E> <013F> <256D> <0146> <0147> <25E2> <014A> <014C> <2571> <014D> <0156> <0157> <0160> <2160> <0161> <0169> <3021> <016B> <016C> <5344> <016D> <0186> <0187> <01A0> <01A1> <01B1> <0391> <01B2> <01B8> <03A3> <01B9> <01C9> <03B1> <01CA> <01D0> <03C3> <01D1> <01F5> <3105> <01FA> <01FF> <2460> <0200> <0203> <2466> <0204> <020D> <2474> <020E> <0217> <2170> <0232> <0251> <2400> <0260> <0261> <5200> <027F> <0280> <5B50> <0289> <028B> <5DF1> <02A3> <02A4> <4EC6> <02A6> <02A7> <4ECA> <02AC> <02AD> <516D> <02B1> <02B3> <5206> <02B5> <02B6> <52FE> <02CE> <02CF> <5F14> <02FA> <02FD> <4ED4> <02FE> <02FF> <4EE3> <0304> <0305> <5189> <0307> <0308> <51F9> <030D> <030E> <5305> <0339> <033A> <5E02> <0342> <0343> <6253> <034A> <034B> <672A> <035C> <035D> <7528> <035E> <0361> <7530> <036E> <036F> <4E1E> <0370> <0371> <4E52> <037D> <037E> <4F10> <0391> <0392> <5211> <0399> <039A> <5370> <03B4> <03B5> <5919> <03B6> <03B7> <5937> <03BF> <03C0> <5B57> <03C1> <03C2> <5B87> <03D1> <03D2> <620C> <03DA> <03DB> <65EC> <03DC> <03DD> <66F2> <03EA> <03EB> <6C5F> <03F0> <03F1> <6C4D> <0403> <0404> <808B> <0420> <0421> <4F50> <0437> <0438> <51B6> <043B> <043C> <5229> <043F> <0440> <52A9> <0458> <0459> <5435> <047F> <0480> <5B5A> <0485> <0486> <5C40> <0489> <048A> <5C90> <04BD> <04C0> <674E> <04CF> <04D0> <6C88> <04E7> <04E8> <707C> endbfrange 100 beginbfrange <04F2> <04F3> <7537> <052E> <052F> <4EAB> <055C> <055E> <5377> <0583> <0584> <5947> <05A2> <05A3> <5C45> <05B5> <05B6> <5E95> <05B8> <05B9> <5F26> <05BB> <05BC> <5F80> <05DF> <05E0> <62D3> <05EE> <05EF> <62D6> <060E> <060F> <676F> <061B> <061C> <6B66> <0627> <0628> <6CBD> <0645> <0646> <722C> <0657> <0658> <7599> <0660> <0661> <7940> <06A4> <06A5> <4EAD> <0707> <0708> <5C4E> <071A> <071B> <5F8A> <077B> <077C> <6D3D> <0796> <0797> <72E0> <07A6> <07A7> <75A4> <07A8> <07A9> <75A2> <07AB> <07AD> <7686> <07BD> <07BE> <780C> <07C3> <07C4> <79B9> <07C5> <07C6> <79D1> <07DE> <07DF> <80C3> <0808> <0809> <8A02> <0823> <0825> <964B> <0833> <0834> <500C> <0853> <0854> <51A4> <0879> <087A> <5703> <0881> <0882> <5957> <08D1> <08D2> <632A> <08D6> <08D7> <6548> <08E4> <08E5> <6714> <0903> <0904> <6C27> <0939> <093A> <75B2> <0943> <0944> <76CD> <0946> <0947> <771F> <0998> <0999> <822A> <09BA> <09BB> <8881> <09CC> <09CD> <8CA1> <09EB> <09EC> <9662> <0A1B> <0A1C> <533F> <0A5C> <0A5D> <5C5C> <0A70> <0A71> <5EB7> <0A97> <0A98> <621A> <0AC5> <0AC6> <65CB> <0AE9> <0AEA> <6BEB> <0B13> <0B14> <7109> <0B27> <0B28> <74F6> <0B2B> <0B2C> <7565> <0B30> <0B31> <75D4> <0B84> <0B85> <837B> <0BD7> <0BD8> <9676> <0BDF> <0BE0> <9802> <0BF3> <0BF4> <5274> <0C1B> <0C1C> <5830> <0C20> <0C21> <58F9> <0C2F> <0C30> <5C0A> <0C3D> <0C3E> <5EC1> <0C42> <0C43> <5FA9> <0C67> <0C68> <63ED> <0C72> <0C73> <6562> <0C80> <0C81> <66FE> <0CA2> <0CA3> <6C2E> <0CC8> <0CC9> <7119> <0CDC> <0CDD> <7435> <0CE3> <0CE4> <7525> <0CEE> <0CEF> <767B> <0D1C> <0D1D> <7FD4> <0D52> <0D53> <88C1> <0D8F> <0D90> <9214> <0DA3> <0DA4> <9685> <0DAB> <0DAC> <96C6> <0DB0> <0DB1> <9805> <0DC1> <0DC2> <50B2> <0DD0> <0DD1> <52E2> <0DDB> <0DDC> <55E3> <0DE0> <0DE1> <55C5> <0DE4> <0DE5> <5712> <0E1A> <0E1B> <6221> <0E28> <0E29> <6416> <0E30> <0E31> <6687> <0E83> <0E84> <745B> <0E90> <0E91> <76DE> <0EA1> <0EA2> <7897> <0EB4> <0EB5> <7A9F> <0EC5> <0EC6> <7F69> <0ED6> <0ED7> <8179> <0EF6> <0EF7> <8702> <0F08> <0F09> <8A72> <0F1F> <0F20> <8CC7> <0F5E> <0F5F> <9694> <0F62> <0F63> <96C9> <0F6B> <0F6C> <9810> <0F73> <0F74> <98FD> <0F98> <0F99> <560D> endbfrange 100 beginbfrange <0FBB> <0FBC> <5BE5> <0FD4> <0FD5> <6162> <1044> <1045> <798E> <1059> <105A> <7CBD> <105E> <105F> <7DBD> <106F> <1070> <7FE0> <10B8> <10B9> <8CD1> <10E0> <10E1> <95A8> <10EE> <10EF> <9817> <10F7> <10F8> <9AAF> <10FA> <10FB> <9B41> <1108> <1109> <5108> <110C> <110E> <5287> <111F> <1120> <562F> <1134> <1135> <5C64> <116F> <1170> <6577> <1187> <1188> <6BC5> <11B1> <11B2> <7621> <11CF> <11D0> <7BC6> <11EA> <11EC> <819B> <11F4> <11F5> <852C> <120E> <120F> <8912> <122A> <122B> <8CEC> <122C> <122D> <8CE2> <1263> <1264> <9706> <127B> <127C> <9AEE> <12BB> <12BC> <64BB> <12F7> <12F8> <71C3> <1300> <1301> <750C> <1308> <1309> <779E> <1310> <1311> <7A4D> <131E> <131F> <7CD5> <132B> <132C> <7FF0> <1334> <1335> <8258> <1339> <133A> <8568> <1356> <1357> <8B01> <1386> <1387> <96A7> <1390> <1391> <975B> <13E1> <13E2> <6582> <13F6> <13F7> <6FDF> <1449> <144A> <8071> <1495> <1496> <9081> <14AA> <14AC> <95CA> <14C4> <14C5> <9EDC> <14D6> <14D7> <64FA> <14E2> <14E3> <6AAE> <14EE> <14EF> <71FB> <14FC> <14FD> <77BB> <1500> <1501> <7A61> <1503> <1504> <7AC4> <150C> <150D> <7E54> <153C> <153D> <91AB> <155E> <155F> <993E> <1578> <1579> <58DE> <15A3> <15A4> <7C3E> <15AC> <15AD> <7E69> <15B8> <15B9> <85E4> <15C9> <15CA> <8B4E> <15D9> <15DA> <908A> <15E2> <15E3> <93DC> <162D> <162E> <7CEF> <163F> <1640> <8814> <1668> <1669> <5137> <16A1> <16A2> <9738> <16B9> <16BA> <9F66> <16D9> <16DA> <8D16> <16E0> <16E1> <9451> <16E2> <16E3> <973D> <1713> <1714> <9A5A> <1716> <1717> <9AD3> <1723> <1724> <7671> <173B> <173C> <9DF9> <173D> <173E> <9E7C> <175D> <175E> <947D> <1760> <1761> <9C77> <179A> <179B> <5722> <17E0> <17E1> <5C7A> <1808> <1809> <6C4B> <180C> <180D> <72B4> <181B> <181C> <9097> <1838> <1839> <52AD> <183D> <183E> <538E> <1890> <1891> <628E> <18AE> <18AF> <6C19> <18CF> <18D0> <7393> <18D4> <18D5> <7594> <18E5> <18E6> <8283> <1914> <1915> <5232> <1919> <191A> <530A> <193F> <1940> <5773> <1973> <1975> <5F22> <19C6> <19C7> <6778> <1A0F> <1A10> <753F> <1A46> <1A47> <866D> <1A82> <1A83> <54C5> <1A8D> <1A8E> <579E> <1AC1> <1AC2> <5CD3> <1ACA> <1ACC> <5E21> <1AEC> <1AED> <6242> <1AFB> <1AFC> <6313> endbfrange 100 beginbfrange <1B13> <1B14> <670F> <1B38> <1B39> <67C9> <1B44> <1B45> <6C20> <1B6B> <1B6C> <70B4> <1B6F> <1B70> <7249> <1B91> <1B92> <7547> <1B98> <1B9A> <7703> <1B9F> <1BA0> <77E7> <1BA2> <1BA3> <7811> <1BB8> <1BB9> <7B00> <1BBB> <1BBC> <7C78> <1BBD> <1BBF> <7C7F> <1BC8> <1BC9> <800E> <1C28> <1C29> <4FF6> <1C36> <1C37> <51C4> <1C3D> <1C3E> <525E> <1C55> <1C56> <54F7> <1C5B> <1C5C> <5701> <1C70> <1C71> <5A2D> <1CA6> <1CA7> <6344> <1CC1> <1CC2> <65C3> <1CC8> <1CC9> <6712> <1CCD> <1CCE> <6832> <1CF6> <1CF7> <6D63> <1D27> <1D29> <70C5> <1D47> <1D48> <73D7> <1D4A> <1D4B> <74DE> <1D4C> <1D4D> <74F4> <1D63> <1D64> <7719> <1D7B> <1D7C> <79EB> <1D87> <1D88> <7A8B> <1DFA> <1DFB> <8843> <1DFD> <1DFE> <8875> <1E1F> <1E20> <90D9> <1E2A> <1E2B> <914E> <1E4A> <1E4B> <5063> <1E5B> <1E5C> <5575> <1ED1> <1ED2> <5EB2> <1EDE> <1EDF> <60D3> <1F19> <1F1A> <686D> <1F3D> <1F3E> <6B37> <1F41> <1F42> <6B8D> <1F57> <1F58> <6DDC> <1F81> <1F82> <727B> <1FA3> <1FA4> <75CB> <1FAD> <1FAE> <7731> <1FC0> <1FC1> <7969> <1FC8> <1FC9> <79F6> <1FEE> <1FEF> <7D3E> <1FF5> <1FF6> <7F9C> <1FF8> <1FF9> <7FCA> <1FFB> <1FFC> <7FD0> <204A> <204B> <86BB> <204D> <204E> <86BD> <206D> <206E> <8C5C> <207E> <207F> <8EE0> <208A> <208B> <90F2> <208D> <208E> <90EB> <209C> <209D> <91EA> <2174> <2175> <659D> <21A7> <21A8> <68DD> <21BC> <21BD> <6BF2> <21C0> <21C1> <6E46> <21C5> <21C6> <6E3C> <21EC> <21ED> <6E35> <222F> <2230> <7746> <2236> <2237> <774B> <223B> <223C> <7864> <2271> <2272> <7F3E> <2273> <2274> <7F65> <2276> <2277> <7FA0> <227A> <227B> <804F> <2288> <228A> <81F7> <228C> <228D> <823C> <22E7> <22E8> <89DA> <22EE> <22EF> <8A57> <22F0> <22F1> <8A44> <2317> <2318> <8EE7> <2350> <2351> <9688> <2361> <2362> <4E83> <2378> <2379> <527B> <23B8> <23B9> <5BD8> <23D5> <23D6> <6149> <23F5> <23F6> <6422> <2424> <2425> <6948> <2449> <244A> <6BFB> <244C> <244D> <6BF7> <2454> <2455> <6E93> <249B> <249C> <744A> <24A1> <24A2> <744F> <24C2> <24C3> <775F> <24D3> <24D4> <7885> <24E1> <24E2> <7A18> <2511> <2512> <7F67> <2517> <2518> <7FDB> <2579> <257A> <88CD> <259E> <259F> <8C84> <25A1> <25A2> <8D68> <25A5> <25A6> <8D8E> <25A8> <25A9> <8D93> endbfrange 100 beginbfrange <25BE> <25BF> <8F07> <25CF> <25D0> <916E> <25F4> <25F5> <9692> <25FE> <25FF> <9777> <2602> <2603> <980D> <2623> <2624> <5280> <2672> <2673> <5E58> <2688> <2689> <6152> <269F> <26A0> <6472> <26E5> <26E7> <6B9E> <26E8> <26E9> <6BC3> <26F6> <26F7> <6F19> <2733> <2734> <7502> <2756> <2757> <798A> <2767> <2768> <7AAB> <278A> <278B> <7DCB> <2797> <2798> <7FE2> <27E8> <27E9> <8726> <27F1> <27F2> <88F1> <280A> <280B> <8C68> <281D> <281E> <8F10> <2863> <2864> <98AD> <2874> <2875> <9B3E> <2876> <2877> <9B60> <2879> <287A> <9CF1> <2881> <2882> <5106> <2885> <2886> <510B> <2889> <288A> <528B> <28F5> <28F6> <65B2> <296A> <296C> <735E> <2974> <2975> <7489> <2989> <298B> <769C> <2999> <299A> <78C3> <2A03> <2A04> <84E7> <2A10> <2A11> <8763> <2A34> <2A36> <8917> <2A47> <2A48> <8AD4> <2A6B> <2A6C> <8E26> <2A7A> <2A7B> <8F16> <2A83> <2A84> <9129> <2A88> <2A89> <9185> <2A8B> <2A8C> <9181> <2A90> <2A91> <92C3> <2ACF> <2AD0> <9916> <2AD5> <2AD6> <99D3> <2AFE> <2AFF> <9F0F> <2B36> <2B37> <5E67> <2B60> <2B61> <66CA> <2B85> <2B86> <6A4D> <2B8C> <2B8D> <6BAA> <2BB5> <2BB6> <71C0> <2BC0> <2BC1> <71DA> <2BC2> <2BC3> <729D> <2BC5> <2BC6> <7366> <2BE4> <2BE5> <77A2> <2BF0> <2BF1> <78E1> <2BF3> <2BF4> <78DF> <2C11> <2C12> <7CD0> <2C17> <2C18> <7E1F> <2C27> <2C28> <7F7B> <2C3C> <2C3E> <8255> <2C6F> <2C70> <8790> <2C7A> <2C7B> <892D> <2C88> <2C89> <8AF4> <2C96> <2C97> <8C91> <2CA8> <2CA9> <8E3C> <2CBB> <2CBC> <9135> <2CBE> <2CBF> <9190> <2CEC> <2CED> <95B9> <2D31> <2D32> <9E86> <2D35> <2D36> <9ED5> <2D42> <2D43> <568C> <2D59> <2D5A> <5BF1> <2DA3> <2DA4> <736E> <2DAE> <2DB0> <7510> <2DB4> <2DB5> <7648> <2DC5> <2DC6> <78FB> <2DD6> <2DD7> <7AC0> <2DE9> <2DEA> <7BF0> <2E59> <2E5A> <89F2> <2E93> <2E94> <9350> <2EC5> <2EC6> <992B> <2ED9> <2EDA> <99FD> <2EF3> <2EF4> <9D2E> <2EF9> <2EFA> <9D42> <2F0F> <2F10> <512D> <2F19> <2F1A> <5C69> <2F1C> <2F1D> <5E6D> <2F20> <2F21> <61ED> <2F31> <2F32> <66DA> <2F3A> <2F3B> <6AB6> <2F43> <2F44> <700C> <2F49> <2F4A> <6FFF> <2F6D> <2F6E> <7913> <2F8F> <2F90> <7FF7> <2F92> <2F93> <81D1> <2FC9> <2FCA> <8950> <2FF7> <2FF9> <8F46> <2FFC> <2FFD> <913A> <301D> <301E> <95D2> endbfrange 100 beginbfrange <3037> <3039> <9850> <304B> <304C> <9B04> <307A> <307B> <5134> <3081> <3082> <56A6> <3089> <308B> <5B3D> <30AF> <30B1> <7021> <30BB> <30BC> <72A5> <30C6> <30C7> <77C9> <30D1> <30D2> <7A67> <30E9> <30EA> <7FFD> <310A> <310B> <87F6> <3116> <3117> <895A> <3133> <3134> <8D06> <3143> <3144> <8F4F> <3163> <3164> <95DA> <3167> <3168> <972B> <316E> <3170> <97DD> <317C> <317D> <99A6> <3191> <3192> <9BEA> <31AB> <31AC> <9D8B> <31AF> <31B0> <9D74> <31C1> <31C2> <9F40> <31C4> <31C6> <9F56> <31CD> <31CE> <5DC6> <31CF> <31D0> <5EEE> <31D1> <31D2> <5FC0> <31DA> <31DB> <66E3> <31E2> <31E3> <6AEE> <31F4> <31F5> <7213> <3205> <3206> <7927> <320B> <320C> <7A6C> <321D> <321E> <8268> <322C> <322D> <8810> <3242> <3243> <8F56> <324C> <324D> <91B2> <326F> <3270> <972E> <3273> <3274> <97FD> <3276> <3277> <9862> <3279> <327A> <98C1> <32B4> <32B5> <9DA6> <32CA> <32CB> <56BD> <32D8> <32D9> <7043> <32DB> <32DC> <7048> <32DD> <32DE> <7045> <32ED> <32EE> <7E87> <3314> <3315> <8B7A> <331F> <3320> <9144> <3345> <3346> <9B17> <334F> <3350> <9C28> <3360> <3361> <9DB9> <337C> <337D> <5B4B> <3386> <3387> <6B08> <3389> <338B> <7055> <338D> <338E> <721E> <3399> <339A> <7A70> <33A7> <33A8> <8634> <33C2> <33C3> <8E96> <33C9> <33CA> <944A> <33CE> <33CF> <9448> <33D9> <33DA> <9A53> <3418> <3419> <6203> <341E> <341F> <6B11> <344C> <344D> <97C4> <3451> <3453> <9B1E> <3473> <3474> <9EF2> <347E> <347F> <9F6E> <3485> <3486> <66ED> <349C> <349D> <8B94> <349E> <34A0> <8E9E> <34A6> <34A7> <9468> <34BD> <34BE> <9E00> <34C6> <34C8> <9F74> <34CC> <34CD> <6B18> <34D3> <34D4> <77D8> <34DD> <34DE> <81E0> <34DF> <34E1> <8646> <34E2> <34E3> <8979> <34E7> <34E8> <8B98> <3527> <3528> <9873> <352D> <352E> <9A66> <3539> <353A> <9480> <3547> <3548> <7069> <3550> <35AE> <0020> <35B5> <35B6> <30FD> <35B7> <35B8> <309D> <35BA> <35BC> <3005> <35C1> <35FF> <3041> <3600> <3613> <3080> <3614> <3669> <30A1> <366A> <366F> <0410> <3671> <3690> <0416> <3692> <36AB> <0436> <36AD> <36AE> <21B8> <36B4> <36B5> <36B7> <36B8> <3734> <3735> <373B> <373C> <7AC2> <3749> <374A> <374E> <374F> <3770> <3771> endbfrange 100 beginbfrange <3779> <377A> <3780> <3781> <7F40> <3789> <378A> <3795> <3796> <3797> <3798> <803B> <379C> <379E> <37AD> <37AE> <37B1> <37B2> <37B8> <37BB> <37C3> <37C4> <37C6> <37C7> <37CB> <37CF> <37E7> <37E9> <37FC> <37FD> <3801> <3803> <3816> <3817> <8845> <3818> <381A> <381E> <381F> <88B4> <382A> <382B> <3838> <3839> <3846> <3848> <384C> <384D> <3857> <3859> <385B> <385C> <3864> <3865> <3868> <3869> <386C> <386E> <3877> <3878> <387A> <387B> <3886> <3887> <388D> <3891> <3894> <3895> <3897> <3898> <389B> <389D> <38A7> <38A9> <38B8> <38BF> <38D2> <38D3> <38E1> <38E2> <38EB> <38ED> <38F3> <38F4> <38FD> <38FE> <3906> <3907> <391F> <3924> <392A> <392D> <392F> <3930> <3955> <3956> <3958> <395A> <395C> <395D> <395F> <3960> <3967> <3968> <396E> <396F> <3973> <3974> <3976> <3978> <397A> <397B> <397D> <397F> <3983> <3987> <398C> <3991> <3993> <3995> <399E> <39A2> <39A7> <39A9> <39B8> <39B9> <39BB> <39BC> <39BF> <39C1> <39C9> <39CA> <39D4> <39D6> <39D8> <39D9> <39DE> <39E0> <39E2> <39E3> <39EB> <39EE> <39F8> <39F9> <3A0B> <3A0E> <3A14> <3A17> <3A1E> <3A1F> <3A2D> <3A2F> <3A32> <3A33> <3A3A> <3A3D> <3A40> <3A41> <3A48> <3A49> <3A4C> <3A4F> <3A51> <3A53> <3A57> <3A5A> <3A5C> <3A5D> <3A5F> <3A62> <3A67> <3A68> <3A6F> <3A72> <3A74> <3A76> <3A78> <3A79> <3A7B> <3A80> <3A82> <3A84> <3A86> <3A88> <3A8E> <3A8F> <3A91> <3A92> <3A96> <3A97> <3A99> <3A9A> <3AA2> <3AA3> <3AAF> <3AB0> <3AB3> <3AB4> <3AB6> <3AB7> <3AC6> <3AC7> <3ACC> <3ACD> endbfrange 100 beginbfrange <3ACF> <3AD0> <3AD2> <3AD6> <3AD9> <3ADB> <3AE7> <3AE8> <3AEF> <3AF1> <3AF6> <3AF7> <3AFB> <3AFC> <3AFE> <3AFF> <3B02> <3B03> <770E> <3B05> <3B06> <3B0C> <3B0D> <3B0F> <3B10> <3B19> <3B1A> <3B28> <3B2C> <3B31> <3B32> <3B35> <3B37> <3B42> <3B44> <3B46> <3B47> <3B50> <3B52> <3B56> <3B57> <3B59> <3B5A> <3B5C> <3B5D> <3B60> <3B62> <3B6A> <3B6B> <3B6F> <3B70> <3B89> <3B8A> <3B97> <3B9C> <3BCE> <3BCF> <3BD9> <3BDB> <3BDF> <3BE1> <3BE3> <3BE5> <3BED> <3BEE> <3BF1> <3BF4> <3C00> <3C01> <3C08> <3C0A> <3C19> <3C1A> <3C29> <3C2A> <3C2C> <3C2D> <3C33> <3C34> <3C3F> <3C40> <3C47> <3C4A> <3C4D> <3C4F> <3C52> <3C54> <3C57> <3C59> <3C5B> <3C5C> <3C6E> <3C70> <3C82> <3C83> <3C85> <3C86> <3C91> <3C92> <3C94> <3C98> <3C9A> <3C9B> <3C9D> <3CA1> <3CA6> <3CA7> <3CAE> <3CB4> <3CBE> <3CBF> <3CC1> <3CC2> <3CC6> <3CC7> <3CC9> <3CCB> <3CD0> <3CD2> <3CD6> <3CD7> <3CD9> <3CDB> <3CE2> <3CE3> <3CF8> <3CF9> <3D08> <3D09> <3D0F> <3D13> <3D16> <3D1D> <3D1F> <3D20> <3D24> <3D27> <3D2D> <3D2F> <3D35> <3D36> <3D43> <3D46> <3D48> <3D49> <3D4D> <3D4F> <3D51> <3D52> <3D6B> <3D6C> <8FBB> <3DA3> <3DA4> <3DA5> <3DA6> <3DAB> <3DAC> <3DB4> <3DB5> <3DC1> <3DC2> <3DEE> <3DEF> <3DF4> <3DF5> <3E09> <3E0B> <3E0D> <3E0E> <3E14> <3E15> <3E1A> <3E1C> <3E22> <3E23> <3E31> <3E33> <3E3E> <3E3F> <3E8C> <3E8D> <3E8F> <3E91> <3EC2> <3EC3> <3F04> <3F05> <400D> <400E> <4014> <4015> <401D> <4021> <4025> <4029> <402D> <402E> <4038> <4039> <403D> <4043> endbfrange 100 beginbfrange <4046> <4047> <406A> <406C> <407F> <4080> <4094> <4095> <409E> <409F> <40A4> <40A5> <40A7> <40A9> <40B1> <40B2> <40D2> <40D3> <40DF> <40E0> <40ED> <40F0> <40F2> <40F4> <40F6> <40F7> <4103> <4104> <4112> <4114> <411D> <411E> <4125> <4126> <412F> <4131> <4139> <413A> <414A> <414B> <414F> <4150> <415A> <415D> <415F> <4160> <416D> <416F> <4175> <4176> <417C> <417D> <417F> <4180> <4183> <4184> <4193> <4194> <41A1> <41A2> <41B2> <41B3> <41B5> <41B6> <41BD> <41C0> <41C5> <41C6> <41CC> <41CD> <41D4> <41D5> <41EE> <41EF> <4209> <420B> <4211> <4215> <421A> <421B> <421E> <4220> <4225> <4227> <423C> <423D> <4249> <424E> <4250> <4253> <4259> <425A> <70D5> <426B> <426D> <4286> <4287> <428E> <428F> <4292> <4294> <4297> <4299> <42AE> <42B1> <42B3> <42B4> <42B9> <42BA> <42D3> <42D4> <42DB> <42DD> <42E6> <42E8> <430B> <430D> <4313> <4314> <431B> <431D> <431F> <4321> <4327> <432A> <432C> <432E> <4330> <4331> <4337> <4338> <4347> <4349> <434B> <434C> <434F> <4350> <4358> <435B> <4362> <4363> <436F> <4371> <4374> <4375> <437A> <437B> <437E> <437F> <4385> <438B> <438C> <438D> <4392> <4394> <4400> <445E> <0020> <4462> <44C0> <0020> <44C6> <44C7> <309B> <44C9> <44DE> <44E1> <44E2> <451D> <451F> <2E86> <4521> <4522> <2E8C> <452E> <452F> <2ECC> <4531> <4532> <2ED6> <4534> <4535> <454F> <4550> <5B9E> <4569> <456A> <8F66> <457C> <457D> <4589> <458C> <45C5> <45C7> <45C9> <45CC> <45CE> <45D1> <45D2> <45D6> <45DA> <45DB> <45DC> <45DD> <45F0> <45F3> <45F8> <45FF> <4600> <4602> endbfrange 79 beginbfrange <4604> <4607> <4609> <460E> <4610> <4617> <4624> <4625> <4681> <4682> <6EE8> <46AF> <46B1> <46D5> <46D6> <46DD> <46DE> <46E0> <46E1> <46E6> <46E7> <46F4> <46F5> <741E> <474D> <474E> <8159> <476B> <476C> <856F> <479D> <479E> <92F3> <47DC> <47DE> <47E2> <47E5> <47E8> <47EA> <47EB> <47EC> <47EE> <47F2> <47F4> <47F9> <47FA> <47FF> <4801> <4803> <4804> <4805> <4808> <4809> <480B> <480D> <480E> <4811> <4813> <481A> <481B> <481C> <4821> <4826> <4827> <4829> <482E> <483B> <483C> <483D> <483E> <483F> <4842> <4843> <4845> <4846> <4847> <4848> <4849> <484A> <484E> <4850> <4856> <4857> <4858> <4859> <485C> <485E> <4861> <4863> <4868> <4869> <486D> <486E> <4872> <4873> <487A> <487B> <487F> <4880> <4881> <4882> <4888> <4889> <488C> <488F> <4894> <4896> <4898> <489C> <489D> <489E> <48A3> <48A5> <48A7> <48A8> <48A9> <48AA> <48AC> <48AD> <48B0> <48BA> <48BC> <48BD> <48CF> <48D0> <48D3> <48D4> <48D8> <48D9> <48DA> <48DB> <48E1> <48E3> <48EB> <48F0> <48F2> <48F4> <48F9> <48FA> <4906> <4907> <4909> <490A> <490B> <490C> <490E> <490F> <4910> <4911> <4919> <491A> <4931> <4936> <4937> <4939> <493A> <493F> <495D> <495E> <495F> <4960> <499C> <499D> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-GB1-4 b/Resources/cmap/Adobe-GB1-4 deleted file mode 100644 index b761ba74bee..00000000000 --- a/Resources/cmap/Adobe-GB1-4 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Identity) %%Title: (Identity Adobe GB1 4) %%Version: 1.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 4 def end def /CMapName /Adobe-GB1-4 def /CMapVersion 1.001 def /CMapType 1 def /XUID [1 10 25458] def /WMode 0 def /CIDCount 29064 def 1 begincodespacerange <0000> <71FF> endcodespacerange 100 begincidrange <0000> <00ff> 0 <0100> <01ff> 256 <0200> <02ff> 512 <0300> <03ff> 768 <0400> <04ff> 1024 <0500> <05ff> 1280 <0600> <06ff> 1536 <0700> <07ff> 1792 <0800> <08ff> 2048 <0900> <09ff> 2304 <0a00> <0aff> 2560 <0b00> <0bff> 2816 <0c00> <0cff> 3072 <0d00> <0dff> 3328 <0e00> <0eff> 3584 <0f00> <0fff> 3840 <1000> <10ff> 4096 <1100> <11ff> 4352 <1200> <12ff> 4608 <1300> <13ff> 4864 <1400> <14ff> 5120 <1500> <15ff> 5376 <1600> <16ff> 5632 <1700> <17ff> 5888 <1800> <18ff> 6144 <1900> <19ff> 6400 <1a00> <1aff> 6656 <1b00> <1bff> 6912 <1c00> <1cff> 7168 <1d00> <1dff> 7424 <1e00> <1eff> 7680 <1f00> <1fff> 7936 <2000> <20ff> 8192 <2100> <21ff> 8448 <2200> <22ff> 8704 <2300> <23ff> 8960 <2400> <24ff> 9216 <2500> <25ff> 9472 <2600> <26ff> 9728 <2700> <27ff> 9984 <2800> <28ff> 10240 <2900> <29ff> 10496 <2a00> <2aff> 10752 <2b00> <2bff> 11008 <2c00> <2cff> 11264 <2d00> <2dff> 11520 <2e00> <2eff> 11776 <2f00> <2fff> 12032 <3000> <30ff> 12288 <3100> <31ff> 12544 <3200> <32ff> 12800 <3300> <33ff> 13056 <3400> <34ff> 13312 <3500> <35ff> 13568 <3600> <36ff> 13824 <3700> <37ff> 14080 <3800> <38ff> 14336 <3900> <39ff> 14592 <3a00> <3aff> 14848 <3b00> <3bff> 15104 <3c00> <3cff> 15360 <3d00> <3dff> 15616 <3e00> <3eff> 15872 <3f00> <3fff> 16128 <4000> <40ff> 16384 <4100> <41ff> 16640 <4200> <42ff> 16896 <4300> <43ff> 17152 <4400> <44ff> 17408 <4500> <45ff> 17664 <4600> <46ff> 17920 <4700> <47ff> 18176 <4800> <48ff> 18432 <4900> <49ff> 18688 <4a00> <4aff> 18944 <4b00> <4bff> 19200 <4c00> <4cff> 19456 <4d00> <4dff> 19712 <4e00> <4eff> 19968 <4f00> <4fff> 20224 <5000> <50ff> 20480 <5100> <51ff> 20736 <5200> <52ff> 20992 <5300> <53ff> 21248 <5400> <54ff> 21504 <5500> <55ff> 21760 <5600> <56ff> 22016 <5700> <57ff> 22272 <5800> <58ff> 22528 <5900> <59ff> 22784 <5a00> <5aff> 23040 <5b00> <5bff> 23296 <5c00> <5cff> 23552 <5d00> <5dff> 23808 <5e00> <5eff> 24064 <5f00> <5fff> 24320 <6000> <60ff> 24576 <6100> <61ff> 24832 <6200> <62ff> 25088 <6300> <63ff> 25344 endcidrange 14 begincidrange <6400> <64ff> 25600 <6500> <65ff> 25856 <6600> <66ff> 26112 <6700> <67ff> 26368 <6800> <68ff> 26624 <6900> <69ff> 26880 <6a00> <6aff> 27136 <6b00> <6bff> 27392 <6c00> <6cff> 27648 <6d00> <6dff> 27904 <6e00> <6eff> 28160 <6f00> <6fff> 28416 <7000> <70ff> 28672 <7100> <7187> 28928 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-GB1-GBK-EUC b/Resources/cmap/Adobe-GB1-GBK-EUC deleted file mode 100644 index 66a532d3961..00000000000 --- a/Resources/cmap/Adobe-GB1-GBK-EUC +++ /dev/null @@ -1,4333 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-GB1-GBK-EUC) -%%Title: (Adobe-GB1-GBK-EUC Adobe GBK-EUC 2) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_GB1_GBK_EUC) def -/Supplement 2 def -end def - -/CMapName /Adobe-GB1-GBK-EUC def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -1 beginbfrange -<0000> <0000> <20> -endbfrange - -% Adobe-GB1-2 -% GBK-EUC (Windows) -100 beginbfrange -<0001> <005F> <20> -<0060> <00BD> -<00BE> <00EF> -<00F0> <00F9> -<00FA> <00FF> -<0100> <0105> -<0106> <0163> -<0164> <01B6> -<01B7> <01FF> -<0200> <020C> -<020D> <0224> -<0225> <0259> -<025A> <027A> -<027B> <029B> -<029C> <02BB> -<02BC> <02E1> -<02E2> <02FF> -<0300> <032D> -<032E> <038B> <21> -<038C> <03AB> -<03AC> <03FF> -<0400> <0409> -<040A> <0467> -<0468> <04C5> -<04C6> <04FF> -<0500> <0523> -<0524> <0581> -<0582> <05DF> -<05E0> <05FF> -<0600> <063D> -<063E> <069B> -<069C> <06F9> -<06FA> <06FF> -<0700> <0757> -<0758> <07B5> -<07B6> <07FF> -<0800> <0813> -<0814> <0871> -<0872> <08CF> -<08D0> <08FF> -<0900> <092D> -<092E> <098B> -<098C> <09E9> -<09EA> <09FF> -<0A00> <0A47> -<0A48> <0AA5> -<0AA6> <0AFF> -<0B00> <0B03> -<0B04> <0B61> -<0B62> <0BBF> -<0BC0> <0BFF> -<0C00> <0C1D> -<0C1E> <0C7B> -<0C7C> <0CD9> -<0CDA> <0CFF> -<0D00> <0D37> -<0D38> <0D95> -<0D96> <0DF3> -<0DF4> <0DFF> -<0E00> <0E51> -<0E52> <0EAF> -<0EB0> <0EFF> -<0F00> <0F0D> -<0F0E> <0F6B> -<0F6C> <0FC9> -<0FCA> <0FFF> -<1000> <1027> -<1028> <1085> -<1086> <10E3> -<10E4> <10FF> -<1100> <1141> -<1142> <119F> -<11A0> <11FD> -<11FE> <11FF> -<1200> <1256> -<1257> <12B4> -<12B5> <12FF> -<1300> <1312> -<1313> <1370> -<1371> <13CE> -<13CF> <13FF> -<1400> <142C> -<142D> <148A> -<148B> <14E8> -<14E9> <14FF> -<1500> <1546> -<1547> <15A4> -<15A5> <15FF> -<1600> <1602> -<1603> <1660> -<1661> <16BE> -<16BF> <16FF> -<1700> <171C> -<171D> <177A> -<177B> <17D8> -<17D9> <17FF> -<1800> <1836> -<1837> <1894> -<1895> <18F2> -<18F3> <18FF> -endbfrange - -100 beginbfrange -<1900> <1950> -<1951> <19AE> -<19AF> <19FF> -<1A00> <1A0C> -<1A0D> <1A6A> -<1A6B> <1AC8> -<1AC9> <1AFF> -<1B00> <1B26> -<1B27> <1B84> -<1B85> <1BE2> -<1BE3> <1BFF> -<1C00> <1C40> -<1C41> <1C9E> -<1C9F> <1CFC> -<1CFD> <1CFF> -<1D00> <1D5A> -<1D5B> <1DB8> -<1DB9> <1DFF> -<1E00> <1E16> -<1E17> <1E17> -<1E18> <1E19> -<1E1A> <1E1A> -<1E1B> <1E1B> -<1E1C> <1E1C> -<1E1D> <1E1D> -<1E1E> <1E1E> -<1E1F> <1E1F> -<1E24> <1E24> <20> -<1E25> <1E25> -<1E26> <1E26> -<1E27> <1E27> -<1E28> <1E28> <90DB> -<1E29> <1E29> -<1E2A> <1E2A> -<1E2B> <1E2B> <89CE> -<1E2C> <1E2C> -<1E2D> <1E2D> <945B> -<1E2E> <1E2E> <94A1> -<1E2F> <1E2F> -<1E30> <1E30> -<1E31> <1E31> -<1E32> <1E32> <8ECD> -<1E33> <1E33> -<1E34> <1E34> -<1E35> <1E35> -<1E36> <1E36> -<1E37> <1E37> <8C9A> -<1E38> <1E38> <88F3> -<1E39> <1E39> -<1E3A> <1E3A> -<1E3B> <1E3B> -<1E3C> <1E3C> -<1E3D> <1E3D> -<1E3E> <1E3E> <82E4> -<1E3F> <1E3F> <9176> -<1E40> <1E40> -<1E41> <1E41> -<1E42> <1E42> -<1E43> <1E43> <94C0> -<1E44> <1E44> <8EC5> -<1E45> <1E45> -<1E46> <1E46> -<1E47> <1E47> -<1E48> <1E48> -<1E49> <1E49> -<1E4A> <1E4A> -<1E4B> <1E4B> -<1E4C> <1E4C> <98CB> -<1E4D> <1E4D> -<1E4E> <1E4E> -<1E4F> <1E4F> <9E6C> -<1E50> <1E50> <9E49> -<1E51> <1E51> -<1E52> <1E52> <9450> -<1E53> <1E53> -<1E54> <1E54> <93DC> -<1E55> <1E55> -<1E56> <1E56> -<1E57> <1E57> -<1E58> <1E58> -<1E59> <1E59> -<1E5A> <1E5A> <85A2> -<1E5B> <1E5B> -<1E5C> <1E5C> <9A88> -<1E5D> <1E5D> <914D> -<1E5E> <1E5E> <914B> -<1E5F> <1E5F> -<1E60> <1E60> -<1E61> <1E61> -<1E62> <1E62> <827D> -<1E63> <1E63> <9CE6> -<1E64> <1E64> <858B> -<1E65> <1E65> <82C8> -<1E66> <1E66> <9C79> -<1E67> <1E67> <8CD3> -<1E68> <1E68> -<1E69> <1E69> <9476> -<1E6A> <1E6A> <93BD> -<1E6B> <1E6B> -<1E6C> <1E6C> -endbfrange - -100 beginbfrange -<1E6D> <1E6D> -<1E6E> <1E6E> -<1E6F> <1E6F> -<1E70> <1E70> -<1E71> <1E71> -<1E72> <1E72> -<1E73> <1E73> <88F6> -<1E74> <1E74> <874C> -<1E75> <1E75> -<1E76> <1E76> <8394> -<1E77> <1E77> -<1E78> <1E78> <8F53> -<1E79> <1E79> <95B3> -<1E7A> <1E7A> -<1E7B> <1E7B> -<1E7C> <1E7C> <8FD8> -<1E7D> <1E7D> <896D> -<1E7E> <1E7E> -<1E7F> <1E7F> -<1E80> <1E80> -<1E81> <1E81> <91CD> -<1E82> <1E82> -<1E83> <1E83> -<1E84> <1E84> -<1E85> <1E85> -<1E86> <1E86> -<1E87> <1E87> <9FEB> -<1E88> <1E88> -<1E89> <1E89> -<1E8A> <1E8A> <8C99> -<1E8B> <1E8B> -<1E8C> <1E8C> -<1E8D> <1E8D> -<1E8E> <1E8E> -<1E8F> <1E8F> -<1E90> <1E90> -<1E91> <1E91> -<1E92> <1E92> -<1E93> <1E93> <83A6> -<1E94> <1E94> -<1E95> <1E95> -<1E96> <1E96> <82F7> -<1E97> <1E97> -<1E98> <1E98> -<1E99> <1E99> <8493> -<1E9A> <1E9A> -<1E9B> <1E9B> -<1E9C> <1E9C> -<1E9D> <1E9D> -<1E9E> <1E9E> -<1E9F> <1E9F> -<1EA0> <1EA0> -<1EA1> <1EA1> <8FC4> -<1EA2> <1EA2> <85B2> -<1EA3> <1EA3> -<1EA4> <1EA4> -<1EA5> <1EA5> -<1EA6> <1EA6> -<1EA7> <1EA7> <8EA7> -<1EA8> <1EA8> -<1EA9> <1EA9> <93FA> -<1EAA> <1EAA> <86CE> -<1EAB> <1EAB> -<1EAC> <1EAC> <93DB> -<1EAD> <1EAD> -<1EAE> <1EAE> <9184> -<1EAF> <1EAF> -<1EB0> <1EB0> <8F97> -<1EB1> <1EB1> -<1EB2> <1EB2> <93F5> -<1EB3> <1EB3> -<1EB4> <1EB4> -<1EB5> <1EB5> <996E> -<1EB6> <1EB6> <9376> -<1EB7> <1EB7> <8D75> -<1EB8> <1EB8> -<1EB9> <1EB9> <8CA7> -<1EBA> <1EBA> <9FF4> -<1EBB> <1EBB> -<1EBC> <1EBC> <94B3> -<1EBD> <1EBD> <9CEC> -<1EBE> <1EBE> -<1EBF> <1EBF> -<1EC0> <1EC0> -<1EC1> <1EC1> -<1EC2> <1EC2> <897C> -<1EC3> <1EC3> -<1EC4> <1EC4> <9DD5> -<1EC5> <1EC5> -<1EC6> <1EC6> -<1EC7> <1EC7> -<1EC8> <1EC8> -<1EC9> <1EC9> -<1ECA> <1ECA> -<1ECB> <1ECB> -<1ECC> <1ECC> <967C> -<1ECD> <1ECD> <84D3> -<1ECE> <1ECE> <979D> -<1ECF> <1ECF> <83F6> -<1ED0> <1ED0> -endbfrange - -100 beginbfrange -<1ED1> <1ED1> -<1ED2> <1ED2> -<1ED3> <1ED3> -<1ED4> <1ED4> -<1ED5> <1ED5> -<1ED6> <1ED6> -<1ED7> <1ED7> <94E0> -<1ED8> <1ED8> -<1ED9> <1ED9> -<1EDA> <1EDA> <8CA6> -<1EDB> <1EDB> <878D> -<1EDC> <1EDC> -<1EDD> <1EDD> -<1EDE> <1EDE> <8A5A> -<1EDF> <1EDF> <8999> -<1EE0> <1EE0> -<1EE1> <1EE1> -<1EE2> <1EE2> -<1EE3> <1EE3> <90BA> -<1EE4> <1EE4> -<1EE5> <1EE5> <83BA> -<1EE6> <1EE6> -<1EE7> <1EE7> -<1EE8> <1EE8> -<1EE9> <1EE9> -<1EEA> <1EEA> -<1EEB> <1EEB> -<1EEC> <1EEC> -<1EED> <1EED> -<1EEE> <1EEE> <9FA9> -<1EEF> <1EEF> -<1EF0> <1EF0> -<1EF1> <1EF1> -<1EF2> <1EF2> -<1EF3> <1EF3> -<1EF4> <1EF4> -<1EF5> <1EF5> -<1EF6> <1EF6> <8F55> -<1EF7> <1EF7> -<1EF8> <1EF8> -<1EF9> <1EF9> <899E> -<1EFA> <1EFA> <8A5E> -<1EFB> <1EFB> <918D> -<1EFC> <1EFC> -<1EFD> <1EFD> -<1EFE> <1EFE> <97F7> -<1EFF> <1EFF> -<1F00> <1F00> -<1F01> <1F01> -<1F02> <1F02> -<1F03> <1F03> -<1F04> <1F04> -<1F05> <1F05> -<1F06> <1F06> -<1F07> <1F07> -<1F08> <1F08> <93E1> -<1F09> <1F09> -<1F0A> <1F0A> -<1F0B> <1F0B> <8FCD> -<1F0C> <1F0C> -<1F0D> <1F0D> -<1F0E> <1F0E> <8B44> -<1F0F> <1F0F> -<1F10> <1F10> -<1F11> <1F11> -<1F12> <1F12> -<1F13> <1F13> <8ED6> -<1F14> <1F14> -<1F15> <1F15> -<1F16> <1F16> <8CF9> -<1F17> <1F17> <8482> -<1F18> <1F18> -<1F19> <1F19> -<1F1A> <1F1A> <8D8F> -<1F1B> <1F1B> -<1F1C> <1F1C> <9452> -<1F1D> <1F1D> -<1F1E> <1F1E> -<1F1F> <1F1F> -<1F20> <1F20> <8280> -<1F21> <1F21> -<1F22> <1F22> -<1F23> <1F23> -<1F24> <1F24> -<1F25> <1F25> -<1F26> <1F26> <9CCF> -<1F27> <1F27> <988B> -<1F28> <1F28> -<1F29> <1F29> -<1F2A> <1F2A> -<1F2B> <1F2B> <848E> -<1F2C> <1F2C> -<1F2D> <1F2D> -<1F2E> <1F2E> -<1F2F> <1F2F> <9154> -<1F30> <1F30> -<1F31> <1F31> <8F56> -<1F32> <1F32> -<1F33> <1F33> <9A77> -<1F34> <1F34> -endbfrange - -100 beginbfrange -<1F35> <1F35> -<1F36> <1F36> -<1F37> <1F37> -<1F38> <1F38> <9999> -<1F39> <1F39> -<1F3A> <1F3A> <84A3> -<1F3B> <1F3B> -<1F3C> <1F3C> -<1F3D> <1F3D> <87F8> -<1F3E> <1F3E> -<1F3F> <1F3F> -<1F40> <1F40> -<1F41> <1F41> <9D68> -<1F42> <1F42> -<1F43> <1F43> -<1F44> <1F44> -<1F45> <1F45> -<1F46> <1F46> -<1F47> <1F47> -<1F48> <1F48> -<1F49> <1F49> <89D8> -<1F4A> <1F4A> -<1F4B> <1F4B> <9CFB> -<1F4C> <1F4C> <8757> -<1F4D> <1F4D> -<1F4E> <1F4E> -<1F4F> <1F4F> <849D> -<1F50> <1F50> -<1F51> <1F51> <91D1> -<1F52> <1F52> <89C4> -<1F53> <1F53> <9A67> -<1F54> <1F54> -<1F55> <1F55> -<1F56> <1F56> -<1F57> <1F57> -<1F58> <1F58> <935D> -<1F59> <1F59> -<1F5A> <1F5A> -<1F5B> <1F5B> -<1F5C> <1F5C> <95FE> -<1F5D> <1F5D> -<1F5E> <1F5E> <8552> -<1F5F> <1F5F> -<1F60> <1F60> -<1F61> <1F61> -<1F62> <1F62> -<1F63> <1F63> <9C86> -<1F64> <1F64> -<1F65> <1F65> -<1F66> <1F66> -<1F67> <1F67> <93F4> -<1F68> <1F68> <9943> -<1F69> <1F69> -<1F6A> <1F6A> -<1F6B> <1F6B> -<1F6C> <1F6C> -<1F6D> <1F6D> -<1F6E> <1F6E> -<1F6F> <1F6F> <984F> -<1F70> <1F70> -<1F71> <1F71> -<1F72> <1F72> <9444> -<1F73> <1F73> <8ED7> -<1F74> <1F74> -<1F75> <1F75> <84A9> -<1F76> <1F76> <9DFA> -<1F77> <1F77> -<1F78> <1F78> -<1F79> <1F79> -<1F7A> <1F7A> -<1F7B> <1F7B> -<1F7C> <1F7C> <8A41> -<1F7D> <1F7D> -<1F7E> <1F7E> -<1F7F> <1F7F> -<1F80> <1F80> -<1F81> <1F81> <8372> -<1F82> <1F82> -<1F83> <1F83> <9A9E> -<1F84> <1F84> -<1F85> <1F85> <88D4> -<1F86> <1F86> -<1F87> <1F87> -<1F88> <1F88> -<1F89> <1F89> -<1F8A> <1F8A> -<1F8B> <1F8B> <997A> -<1F8C> <1F8C> -<1F8D> <1F8D> <92FE> -<1F8E> <1F8E> <93EC> -<1F8F> <1F8F> -<1F90> <1F90> <8380> -<1F91> <1F91> -<1F92> <1F92> <9991> -<1F93> <1F93> -<1F94> <1F94> -<1F95> <1F95> -<1F96> <1F96> -<1F97> <1F97> -<1F98> <1F98> -endbfrange - -100 beginbfrange -<1F99> <1F99> <84A6> -<1F9A> <1F9A> -<1F9B> <1F9B> <9D75> -<1F9C> <1F9C> <9E52> -<1F9D> <1F9D> <9DBE> -<1F9E> <1F9E> <8CA2> -<1F9F> <1F9F> <9D7B> -<1FA0> <1FA0> -<1FA1> <1FA1> <98AA> -<1FA2> <1FA2> <8A5C> -<1FA3> <1FA3> -<1FA4> <1FA4> -<1FA5> <1FA5> -<1FA6> <1FA6> <9DB2> -<1FA7> <1FA7> -<1FA8> <1FA8> <8BC9> -<1FA9> <1FA9> <9487> -<1FAA> <1FAA> -<1FAB> <1FAB> -<1FAC> <1FAC> <8365> -<1FAD> <1FAD> -<1FAE> <1FAE> -<1FAF> <1FAF> -<1FB0> <1FB0> -<1FB1> <1FB1> -<1FB2> <1FB2> -<1FB3> <1FB3> -<1FB4> <1FB4> <9D8D> -<1FB5> <1FB5> -<1FB6> <1FB6> -<1FB7> <1FB7> -<1FB8> <1FB8> -<1FB9> <1FB9> <8348> -<1FBA> <1FBA> -<1FBB> <1FBB> -<1FBC> <1FBC> -<1FBD> <1FBD> -<1FBE> <1FBE> <84C5> -<1FBF> <1FBF> -<1FC0> <1FC0> -<1FC1> <1FC1> -<1FC2> <1FC2> -<1FC3> <1FC3> -<1FC4> <1FC4> -<1FC5> <1FC5> <8FBD> -<1FC6> <1FC6> -<1FC7> <1FC7> -<1FC8> <1FC8> -<1FC9> <1FC9> -<1FCA> <1FCA> -<1FCB> <1FCB> -<1FCC> <1FCC> <93FE> -<1FCD> <1FCD> -<1FCE> <1FCE> <91D6> -<1FCF> <1FCF> <84A1> -<1FD0> <1FD0> -<1FD1> <1FD1> -<1FD2> <1FD2> -<1FD3> <1FD3> -<1FD4> <1FD4> -<1FD5> <1FD5> -<1FD6> <1FD6> -<1FD7> <1FD7> -<1FD8> <1FD8> -<1FD9> <1FD9> <8450> -<1FDA> <1FDA> -<1FDB> <1FDB> <9AA3> -<1FDC> <1FDC> -<1FDD> <1FDD> <89A8> -<1FDE> <1FDE> <91A9> -<1FDF> <1FDF> <93B8> -<1FE0> <1FE0> <8EEC> -<1FE1> <1FE1> -<1FE2> <1FE2> -<1FE3> <1FE3> <894B> -<1FE4> <1FE4> <837E> -<1FE5> <1FE5> <8C92> -<1FE6> <1FE6> -<1FE7> <1FE7> <95E7> -<1FE8> <1FE8> -<1FE9> <1FE9> <8E68> -<1FEA> <1FEA> -<1FEB> <1FEB> -<1FEC> <1FEC> <9DA2> -<1FED> <1FED> <9455> -<1FEE> <1FEE> -<1FEF> <1FEF> -<1FF0> <1FF0> -<1FF1> <1FF1> -<1FF2> <1FF2> <81ED> -<1FF3> <1FF3> -<1FF4> <1FF4> -<1FF5> <1FF5> <99DA> -<1FF6> <1FF6> <9472> -<1FF7> <1FF7> -<1FF8> <1FF8> -<1FF9> <1FF9> -<1FFA> <1FFA> <9E91> -<1FFB> <1FFB> -<1FFC> <1FFC> <9488> -endbfrange - -100 beginbfrange -<1FFD> <1FFD> -<1FFE> <1FFE> <91D0> -<1FFF> <1FFF> -<2000> <2000> -<2001> <2001> <9E45> -<2002> <2002> <93C6> -<2003> <2003> <84DA> -<2004> <2004> <9DB3> -<2005> <2005> <98B7> -<2006> <2006> -<2007> <2007> <89BE> -<2008> <2008> -<2009> <2009> -<200A> <200A> -<200B> <200B> <9EA6> -<200C> <200C> -<200D> <200D> -<200E> <200E> -<200F> <200F> -<2010> <2010> <8596> -<2011> <2011> <84EE> -<2012> <2012> -<2013> <2013> <9A76> -<2014> <2014> <9E72> -<2015> <2015> -<2016> <2016> <827A> -<2017> <2017> -<2018> <2018> -<2019> <2019> -<201A> <201A> -<201B> <201B> <917A> -<201C> <201C> <9D69> -<201D> <201D> -<201E> <201E> <94BF> -<201F> <201F> -<2020> <2020> -<2021> <2021> <91D9> -<2022> <2022> <9F92> -<2023> <2023> -<2024> <2024> -<2025> <2025> <83C9> -<2026> <2026> -<2027> <2027> -<2028> <2028> -<2029> <2029> -<202A> <202A> -<202B> <202B> -<202C> <202C> -<202D> <202D> -<202E> <202E> -<202F> <202F> -<2030> <2030> -<2031> <2031> -<2032> <2032> -<2033> <2033> <8E58> -<2034> <2034> -<2035> <2035> -<2036> <2036> <84A2> -<2037> <2037> -<2038> <2038> -<2039> <2039> <87B5> -<203A> <203A> -<203B> <203B> <89C5> -<203C> <203C> <946E> -<203D> <203D> -<203E> <203E> <98C7> -<203F> <203F> <8AE4> -<2040> <2040> <93A7> -<2041> <2041> -<2042> <2042> -<2043> <2043> -<2044> <2044> -<2045> <2045> <8F5D> -<2046> <2046> -<2047> <2047> <93EF> -<2048> <2048> <9D46> -<2049> <2049> -<204A> <204A> -<204B> <204B> -<204C> <204C> -<204D> <204D> -<204E> <204E> -<204F> <204F> -<2050> <2050> <8CD2> -<2051> <2051> -<2052> <2052> <915D> -<2053> <2053> <9E56> -<2054> <2054> -<2055> <2055> <8E6E> -<2056> <2056> <9481> -<2057> <2057> <8C5C> -<2058> <2058> <9EB4> -<2059> <2059> <8179> -<205A> <205A> <92E0> -<205B> <205B> -<205C> <205C> <8290> -<205D> <205D> <81F6> -<205E> <205E> <9C53> -<205F> <205F> -<2060> <2060> -endbfrange - -100 beginbfrange -<2061> <2061> -<2062> <2062> -<2063> <2063> -<2064> <2064> -<2065> <2065> -<2066> <2066> -<2067> <2067> -<2068> <2068> -<2069> <2069> <8B8C> -<206A> <206A> -<206B> <206B> -<206C> <206C> -<206D> <206D> -<206E> <206E> -<206F> <206F> <86E1> -<2070> <2070> -<2071> <2071> -<2072> <2072> -<2073> <2073> -<2074> <2074> -<2075> <2075> -<2076> <2076> -<2077> <2077> <9D4D> -<2078> <2078> -<2079> <2079> -<207A> <207A> -<207B> <207B> -<207C> <207C> -<207D> <207D> -<207E> <207E> <909E> -<207F> <207F> <8283> -<2080> <2080> -<2081> <2081> <89F4> -<2082> <2082> -<2083> <2083> <8F9B> -<2084> <2084> -<2085> <2085> -<2086> <2086> -<2087> <2087> <8F52> -<2088> <2088> <9CE7> -<2089> <2089> <9191> -<208A> <208A> -<208B> <208B> -<208C> <208C> -<208D> <208D> -<208E> <208E> -<208F> <208F> -<2090> <2090> -<2091> <2091> -<2092> <2092> -<2093> <2093> <93CF> -<2094> <2094> -<2095> <2095> <90C0> -<2096> <2096> -<2097> <2097> -<2098> <2098> <944D> -<2099> <2099> -<209A> <209A> <9466> -<209B> <209B> -<209C> <209C> -<209D> <209D> -<209E> <209E> <87A7> -<209F> <209F> -<20A0> <20A0> -<20A1> <20A1> <998E> -<20A2> <20A2> -<20A3> <20A3> <8C8E> -<20A4> <20A4> <9451> -<20A5> <20A5> <9DF4> -<20A6> <20A6> -<20A7> <20A7> -<20A8> <20A8> -<20A9> <20A9> <9DE2> -<20AA> <20AA> -<20AB> <20AB> -<20AC> <20AC> -<20AD> <20AD> <9A57> -<20AE> <20AE> -<20AF> <20AF> <9AAA> -<20B0> <20B0> <8749> -<20B1> <20B1> <9D61> -<20B2> <20B2> -<20B3> <20B3> -<20B4> <20B4> -<20B5> <20B5> <878A> -<20B6> <20B6> -<20B7> <20B7> -<20B8> <20B8> -<20B9> <20B9> -<20BA> <20BA> -<20BB> <20BB> -<20BC> <20BC> <917B> -<20BD> <20BD> -<20BE> <20BE> <9D8A> -<20BF> <20BF> -<20C0> <20C0> <93E4> -<20C1> <20C1> -<20C2> <20C2> <8357> -<20C3> <20C3> <98E3> -<20C4> <20C4> -endbfrange - -100 beginbfrange -<20C5> <20C5> -<20C6> <20C6> -<20C7> <20C7> -<20C8> <20C8> -<20C9> <20C9> <8699> -<20CA> <20CA> <9AE2> -<20CB> <20CB> -<20CC> <20CC> -<20CD> <20CD> -<20CE> <20CE> -<20CF> <20CF> -<20D0> <20D0> -<20D1> <20D1> -<20D2> <20D2> -<20D3> <20D3> -<20D4> <20D4> <9C5C> -<20D5> <20D5> -<20D6> <20D6> <8971> -<20D7> <20D7> <988C> -<20D8> <20D8> <86DC> -<20D9> <20D9> <89A6> -<20DA> <20DA> -<20DB> <20DB> <938C> -<20DC> <20DC> -<20DD> <20DD> <98F2> -<20DE> <20DE> <86CC> -<20DF> <20DF> <8353> -<20E0> <20E0> -<20E1> <20E1> -<20E2> <20E2> -<20E3> <20E3> <9A4A> -<20E4> <20E4> -<20E5> <20E5> <8C8B> -<20E6> <20E6> -<20E7> <20E7> <9AE4> -<20E8> <20E8> <8341> -<20E9> <20E9> -<20EA> <20EA> -<20EB> <20EB> <9163> -<20EC> <20EC> -<20ED> <20ED> -<20EE> <20EE> -<20EF> <20EF> <855E> -<20F0> <20F0> -<20F1> <20F1> -<20F2> <20F2> -<20F3> <20F3> -<20F4> <20F4> <99E0> -<20F5> <20F5> <84F1> -<20F6> <20F6> -<20F7> <20F7> -<20F8> <20F8> -<20F9> <20F9> -<20FA> <20FA> <945F> -<20FB> <20FB> -<20FC> <20FC> <9FE1> -<20FD> <20FD> -<20FE> <20FE> -<20FF> <20FF> -<2100> <2100> <9873> -<2101> <2101> -<2102> <2102> -<2103> <2103> -<2104> <2104> -<2105> <2105> <9D99> -<2106> <2106> <9EA2> -<2107> <2107> -<2108> <2108> -<2109> <2109> -<210A> <210A> <82E3> -<210B> <210B> <86CA> -<210C> <210C> -<210D> <210D> <92DF> -<210E> <210E> <9DAD> -<210F> <210F> <9AA2> -<2110> <2110> -<2111> <2111> -<2112> <2112> <95F1> -<2113> <2113> -<2114> <2114> -<2115> <2115> -<2116> <2116> -<2117> <2117> <82FB> -<2118> <2118> -<2119> <2119> <9FFD> -<211A> <211A> -<211B> <211B> -<211C> <211C> <92CE> -<211D> <211D> <947A> -<211E> <211E> <91D8> -<211F> <211F> -<2120> <2120> -<2121> <2121> <8C8F> -<2122> <2122> <8BF0> -<2123> <2123> -<2124> <2124> <9D42> -<2125> <2125> -<2126> <2126> -<2127> <2127> <84D9> -<2128> <2128> -endbfrange - -100 beginbfrange -<2129> <2129> <8E9F> -<212A> <212A> -<212B> <212B> <9DF1> -<212C> <212C> -<212D> <212D> <9572> -<212E> <212E> -<212F> <212F> <8C8D> -<2130> <2130> -<2131> <2131> -<2132> <2132> <84DD> -<2133> <2133> -<2134> <2134> -<2135> <2135> -<2136> <2136> -<2137> <2137> -<2138> <2138> <89DB> -<2139> <2139> -<213A> <213A> <98D0> -<213B> <213B> -<213C> <213C> <95F8> -<213D> <213D> -<213E> <213E> <8CD9> -<213F> <213F> -<2140> <2140> <98E4> -<2141> <2141> -<2142> <2142> <94B5> -<2143> <2143> <8E9B> -<2144> <2144> -<2145> <2145> -<2146> <2146> -<2147> <2147> -<2148> <2148> -<2149> <2149> -<214A> <214A> -<214B> <214B> -<214C> <214C> -<214D> <214D> -<214E> <214E> <915A> -<214F> <214F> -<2150> <2150> -<2151> <2151> -<2152> <2152> <945C> -<2153> <2153> -<2154> <2154> -<2155> <2155> -<2156> <2156> -<2157> <2157> -<2158> <2158> -<2159> <2159> <9A71> -<215A> <215A> <8C4F> -<215B> <215B> <9370> -<215C> <215C> -<215D> <215D> -<215E> <215E> -<215F> <215F> -<2160> <2160> <93E9> -<2161> <2161> -<2162> <2162> <9142> -<2163> <2163> <9482> -<2164> <2164> -<2165> <2165> -<2166> <2166> <9EA9> -<2167> <2167> <89AF> -<2168> <2168> -<2169> <2169> -<216A> <216A> <8740> -<216B> <216B> <9CAB> -<216C> <216C> -<216D> <216D> <9DFD> -<216E> <216E> -<216F> <216F> -<2170> <2170> -<2171> <2171> -<2172> <2172> -<2173> <2173> -<2174> <2174> -<2175> <2175> <976C> -<2176> <2176> -<2177> <2177> -<2178> <2178> <8F64> -<2179> <2179> -<217A> <217A> <9F4E> -<217B> <217B> -<217C> <217C> -<217D> <217D> -<217E> <217E> <8844> -<217F> <217F> <8954> -<2180> <2180> <8846> -<2181> <2181> -<2182> <2182> -<2183> <2183> -<2184> <2184> -<2185> <2185> <9945> -<2186> <2186> -<2187> <2187> -<2188> <2188> <8F9D> -<2189> <2189> <9EB3> -<218A> <218A> -<218B> <218B> -<218C> <218C> -endbfrange - -100 beginbfrange -<218D> <218D> -<218E> <218E> -<218F> <218F> <87FA> -<2190> <2190> -<2191> <2191> <9E48> -<2192> <2192> -<2193> <2193> -<2194> <2194> <82A5> -<2195> <2195> <835E> -<2196> <2196> -<2197> <2197> -<2198> <2198> -<2199> <2199> -<219A> <219A> -<219B> <219B> -<219C> <219C> <8696> -<219D> <219D> <93EB> -<219E> <219E> -<219F> <219F> <9C75> -<21A0> <21A0> -<21A1> <21A1> <86E8> -<21A2> <21A2> -<21A3> <21A3> <9EF5> -<21A4> <21A4> -<21A5> <21A5> <9F6F> -<21A6> <21A6> -<21A7> <21A7> <895D> -<21A8> <21A8> -<21A9> <21A9> <84D5> -<21AA> <21AA> -<21AB> <21AB> -<21AC> <21AC> -<21AD> <21AD> -<21AE> <21AE> -<21AF> <21AF> -<21B0> <21B0> <91F2> -<21B1> <21B1> -<21B2> <21B2> -<21B3> <21B3> -<21B4> <21B4> <8D7B> -<21B5> <21B5> <8262> -<21B6> <21B6> -<21B7> <21B7> <8798> -<21B8> <21B8> -<21B9> <21B9> -<21BA> <21BA> -<21BB> <21BB> -<21BC> <21BC> -<21BD> <21BD> -<21BE> <21BE> -<21BF> <21BF> -<21C0> <21C0> -<21C1> <21C1> -<21C2> <21C2> -<21C3> <21C3> -<21C4> <21C4> <9197> -<21C5> <21C5> -<21C6> <21C6> -<21C7> <21C7> -<21C8> <21C8> -<21C9> <21C9> -<21CA> <21CA> -<21CB> <21CB> -<21CC> <21CC> <87CC> -<21CD> <21CD> -<21CE> <21CE> <95D4> -<21CF> <21CF> <875B> -<21D0> <21D0> <8566> -<21D1> <21D1> <92B6> -<21D2> <21D2> -<21D3> <21D3> -<21D4> <21D4> <8C91> -<21D5> <21D5> <9E61> -<21D6> <21D6> -<21D7> <21D7> -<21D8> <21D8> -<21D9> <21D9> -<21DA> <21DA> -<21DB> <21DB> -<21DC> <21DC> -<21DD> <21DD> -<21DE> <21DE> -<21DF> <21DF> -<21E0> <21E0> -<21E1> <21E1> <91D2> -<21E2> <21E2> -<21E3> <21E3> -<21E4> <21E4> -<21E5> <21E5> <8C57> -<21E6> <21E6> <84D7> -<21E7> <21E7> -<21E8> <21E8> <8CA4> -<21E9> <21E9> -<21EA> <21EA> -<21EB> <21EB> -<21EC> <21EC> -<21ED> <21ED> <89BA> -<21EE> <21EE> -<21EF> <21EF> -<21F0> <21F0> <86A1> -endbfrange - -100 beginbfrange -<21F1> <21F1> <8186> -<21F2> <21F2> -<21F3> <21F3> -<21F4> <21F4> -<21F5> <21F5> <87C0> -<21F6> <21F6> -<21F7> <21F7> -<21F8> <21F8> -<21F9> <21F9> <8592> -<21FA> <21FA> -<21FB> <21FB> -<21FC> <21FC> -<21FD> <21FD> -<21FE> <21FE> <97EE> -<21FF> <21FF> <9350> -<2200> <2200> -<2201> <2201> -<2202> <2202> -<2203> <2203> -<2204> <2204> <98D3> -<2205> <2205> <88F2> -<2206> <2206> -<2207> <2207> -<2208> <2208> -<2209> <2209> -<220A> <220A> <9849> -<220B> <220B> -<220C> <220C> -<220D> <220D> -<220E> <220E> -<220F> <220F> -<2210> <2210> <8378> -<2211> <2211> -<2212> <2212> -<2213> <2213> <837C> -<2214> <2214> <919B> -<2215> <2215> -<2216> <2216> -<2217> <2217> -<2218> <2218> -<2219> <2219> -<221A> <221A> -<221B> <221B> -<221C> <221C> -<221D> <221D> -<221E> <221E> -<221F> <221F> -<2220> <2220> <99D1> -<2221> <2221> <8BEB> -<2222> <2222> -<2223> <2223> <91AA> -<2224> <2224> -<2225> <2225> -<2226> <2226> -<2227> <2227> -<2228> <2228> <9FC9> -<2229> <2229> -<222A> <222A> -<222B> <222B> -<222C> <222C> <86D1> -<222D> <222D> <93ED> -<222E> <222E> <82F2> -<222F> <222F> -<2230> <2230> -<2231> <2231> <839E> -<2232> <2232> <916E> -<2233> <2233> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<2237> <2237> -<2238> <2238> -<2239> <2239> -<223A> <223A> <9D4F> -<223B> <223B> -<223C> <223C> <8E5A> -<223D> <223D> -<223E> <223E> -<223F> <223F> -<2240> <2240> -<2241> <2241> -<2242> <2242> -<2243> <2243> -<2244> <2244> <9C59> -<2245> <2245> -<2246> <2246> <8840> -<2247> <2247> <8654> -<2248> <2248> <8841> -<2249> <2249> -<224A> <224A> -<224B> <224B> -<224C> <224C> -<224D> <224D> -<224E> <224E> -<224F> <224F> -<2250> <2250> -<2251> <2251> -<2252> <2252> -<2253> <2253> -<2254> <2254> -endbfrange - -100 beginbfrange -<2255> <2255> -<2256> <2256> <959E> -<2257> <2257> -<2258> <2258> -<2259> <2259> <9480> -<225A> <225A> <95BA> -<225B> <225B> -<225C> <225C> -<225D> <225D> -<225E> <225E> -<225F> <225F> <9797> -<2260> <2260> -<2261> <2261> -<2262> <2262> <93F1> -<2263> <2263> <8474> -<2264> <2264> <9DC9> -<2265> <2265> -<2266> <2266> -<2267> <2267> -<2268> <2268> -<2269> <2269> -<226A> <226A> -<226B> <226B> -<226C> <226C> <82F9> -<226D> <226D> <9AD6> -<226E> <226E> -<226F> <226F> <94D8> -<2270> <2270> -<2271> <2271> <8DE4> -<2272> <2272> <97A3> -<2273> <2273> <91F0> -<2274> <2274> -<2275> <2275> <8F88> -<2276> <2276> <9D71> -<2277> <2277> <8EA4> -<2278> <2278> -<2279> <2279> -<227A> <227A> -<227B> <227B> -<227C> <227C> -<227D> <227D> -<227E> <227E> -<227F> <227F> -<2280> <2280> -<2281> <2281> <82C9> -<2282> <2282> -<2283> <2283> -<2284> <2284> -<2285> <2285> <8EAC> -<2286> <2286> -<2287> <2287> -<2288> <2288> -<2289> <2289> -<228A> <228A> -<228B> <228B> <88CC> -<228C> <228C> -<228D> <228D> -<228E> <228E> <93B4> -<228F> <228F> <9453> -<2290> <2290> <8EC3> -<2291> <2291> -<2292> <2292> <9CFE> -<2293> <2293> -<2294> <2294> -<2295> <2295> -<2296> <2296> -<2297> <2297> -<2298> <2298> -<2299> <2299> -<229A> <229A> -<229B> <229B> <9583> -<229C> <229C> -<229D> <229D> -<229E> <229E> -<229F> <229F> -<22A0> <22A0> -<22A1> <22A1> <87DA> -<22A2> <22A2> -<22A3> <22A3> -<22A4> <22A4> -<22A5> <22A5> -<22A6> <22A6> <8CA3> -<22A7> <22A7> -<22A8> <22A8> -<22A9> <22A9> -<22AA> <22AA> <98B6> -<22AB> <22AB> -<22AC> <22AC> -<22AD> <22AD> <8A79> -<22AE> <22AE> <89D1> -<22AF> <22AF> -<22B0> <22B0> -<22B1> <22B1> -<22B2> <22B2> <898B> -<22B3> <22B3> -<22B4> <22B4> -<22B5> <22B5> <9CCA> -<22B6> <22B6> <9DE1> -<22B7> <22B7> -<22B8> <22B8> <9D6E> -endbfrange - -100 beginbfrange -<22B9> <22B9> -<22BA> <22BA> -<22BB> <22BB> -<22BC> <22BC> -<22BD> <22BD> -<22BE> <22BE> -<22BF> <22BF> -<22C0> <22C0> <86DD> -<22C1> <22C1> <8587> -<22C2> <22C2> <8598> -<22C3> <22C3> -<22C4> <22C4> -<22C5> <22C5> <8551> -<22C6> <22C6> <8554> -<22C7> <22C7> -<22C8> <22C8> <8471> -<22C9> <22C9> <84A5> -<22CA> <22CA> <8492> -<22CB> <22CB> <82F8> -<22CC> <22CC> <8274> -<22CD> <22CD> <82E1> -<22CE> <22CE> <838A> -<22CF> <22CF> <837A> -<22D0> <22D0> <8389> -<22D1> <22D1> <83B0> -<22D2> <22D2> <83AB> -<22D3> <22D3> <8366> -<22D4> <22D4> <8345> -<22D5> <22D5> <83AF> -<22D6> <22D6> <8386> -<22D7> <22D7> <83AE> -<22D8> <22D8> <834C> -<22D9> <22D9> -<22DA> <22DA> -<22DB> <22DB> <87CF> -<22DC> <22DC> -<22DD> <22DD> -<22DE> <22DE> -<22DF> <22DF> -<22E0> <22E0> -<22E1> <22E1> -<22E2> <22E2> -<22E3> <22E3> -<22E4> <22E4> -<22E5> <22E5> -<22E6> <22E6> -<22E7> <22E7> -<22E8> <22E8> -<22E9> <22E9> -<22EA> <22EA> -<22EB> <22EB> -<22EC> <22EC> -<22ED> <22ED> -<22EE> <22EE> -<22EF> <22EF> -<22F0> <22F0> -<22F1> <22F1> -<22F2> <22F2> -<22F3> <22F3> -<22F4> <22F4> -<22F5> <22F5> -<22F6> <22F6> -<22F7> <22F7> -<22F8> <22F8> -<22F9> <22FA> -<22FB> <22FB> -<22FC> <22FC> -<22FD> <22FD> -<22FE> <22FE> -<22FF> <22FF> -<2300> <2300> -<2301> <2301> -<2302> <2302> -<2303> <2303> -<2304> <2304> -<2305> <2305> -<2306> <2306> -<2307> <2307> -<2308> <2308> -<2309> <2309> -<230A> <230A> -<230B> <230B> -<230C> <230C> -<230D> <230D> -<230E> <230E> -<230F> <230F> -<2310> <2310> -<2311> <2311> -<2312> <2312> -<2313> <2313> -<2314> <2314> -<2315> <2315> -<2316> <2316> -<2317> <2317> -<2318> <2318> -<2319> <2319> -<231A> <231A> -<231B> <231B> -<231C> <231C> -<231D> <231D> -endbfrange - -100 beginbfrange -<231E> <231E> -<231F> <231F> -<2320> <2320> -<2321> <2321> -<2322> <2322> -<2323> <2323> <84EA> -<2324> <2324> <8E80> -<2325> <2325> <88D7> -<2326> <2326> <89BF> -<2327> <2327> <89C8> -<2328> <2328> <89C6> -<2329> <2329> <89C0> -<232A> <232A> <88BA> -<232B> <232B> <894E> -<232C> <232C> <88DF> -<232D> <232D> <8950> -<232E> <232E> <88E5> -<232F> <232F> <895F> -<2330> <2330> -<2331> <2331> -<2332> <2332> -<2333> <2333> -<2334> <2334> -<2335> <2335> -<2336> <2336> -<2337> <2337> -<2338> <2338> -<2339> <2339> <894C> -<233A> <233A> <9FA6> -<233B> <233B> -<233C> <233C> -<233D> <233D> -<233E> <233E> -<233F> <233F> -<2340> <2340> -<2341> <2341> <9CEE> -<2342> <2342> -<2343> <2343> -<2344> <2344> -<2345> <2345> -<2346> <2346> -<2347> <2347> -<2348> <2348> -<2349> <2349> -<234A> <234A> -<234B> <234B> -<234C> <234C> -<234D> <234D> -<234E> <234E> -<234F> <234F> -<2350> <2350> -<2351> <2351> -<2352> <2352> -<2353> <2353> -<2354> <2354> -<2355> <2355> -<2356> <2356> -<2357> <2357> -<2358> <2358> -<2359> <2359> -<235A> <235A> -<235B> <235B> <8A59> -<235C> <235C> <8CC0> -<235D> <235D> <92D0> -<235E> <235E> <93BB> -<235F> <235F> <93D7> -<2360> <2360> <939D> -<2361> <2361> <93A5> -<2362> <2362> <93E5> -<2363> <2363> <9464> -<2364> <2364> <9474> -<2365> <2365> <9458> -<2366> <2366> <945D> -<2367> <2367> <9478> -<2368> <2368> <875C> -<2369> <2369> <8760> -<236A> <236A> <87D2> -<236B> <236B> <87B3> -<236C> <236C> <8668> -<236D> <236D> <864A> -<236E> <236E> <8793> -<236F> <236F> <877A> -<2370> <2370> <877D> -<2371> <2371> <875E> -<2372> <2372> <86F4> -<2373> <2373> <8782> -<2374> <2374> <8788> -<2375> <2375> <879D> -<2376> <2376> <8781> -<2377> <2377> <874F> -<2378> <2378> <875A> -<2379> <2379> <86EE> -<237A> <237A> <874B> -<237B> <237B> <87CA> -<237C> <237C> <8744> -<237D> <237D> <87BF> -<237E> <237E> <87CB> -<237F> <237F> <8786> -<2380> <2380> -<2381> <2381> <87C2> -endbfrange - -100 beginbfrange -<2382> <2382> <87A3> -<2383> <2383> <87F7> -<2384> <2384> <8EAE> -<2385> <2385> <8ECE> -<2386> <2386> <8EBE> -<2387> <2387> <8EBD> -<2388> <2388> <8DE7> -<2389> <2389> <8D73> -<238A> <238A> <8DB9> -<238B> <238B> <8D9E> -<238C> <238C> <8E46> -<238D> <238D> <8DFE> -<238E> <238E> <8DF7> -<238F> <238F> <8D88> -<2390> <2390> <8E56> -<2391> <2391> <8DE2> -<2392> <2392> <8E70> -<2393> <2393> <8FC6> -<2394> <2394> -<2395> <2395> -<2396> <2396> -<2397> <2397> -<2398> <2398> -<2399> <2399> -<239A> <239A> -<239B> <239B> -<239C> <239C> -<239D> <239D> -<239E> <239E> -<239F> <23A0> -<23A1> <23A1> -<23A2> <23A2> -<23A3> <23A3> -<23A4> <23A4> -<23A5> <23A5> -<23A6> <23A6> -<23A7> <23A7> -<23A8> <23A8> -<23A9> <23AA> -<23AB> <23AB> -<23AC> <23AC> -<23AD> <23AD> -<23AE> <23AE> <8F54> -<23AF> <23AF> -<23B0> <23B0> <91D4> -<23B1> <23B1> <9193> -<23B2> <23B2> <9159> -<23B3> <23B3> <90F7> -<23B4> <23B4> <909D> -<23B5> <23B5> <90ED> -<23B6> <23B6> <91AB> -<23B7> <23B7> <9151> -<23B8> <23B8> <91C3> -<23B9> <23B9> <90C5> -<23BA> <23BA> <90F0> -<23BB> <23BB> <90C1> -<23BC> <23BC> <9161> -<23BD> <23BD> <90DC> -<23BE> <23BE> <917C> -<23BF> <23BF> -<23C0> <23C0> -<23C1> <23C1> -<23C2> <23C2> -<23C3> <23C3> -<23C4> <23C4> -<23C5> <23C5> -<23C6> <23C6> -<23C7> <23C7> -<23C8> <23C8> -<23C9> <23C9> -<23CA> <23CA> -<23CB> <23CB> -<23CC> <23CC> -<23CD> <23CD> -<23CE> <23CE> -<23CF> <23CF> -<23D0> <23D0> -<23D1> <23D1> -<23D2> <23D2> -<23D3> <23D3> -<23D4> <23D4> -<23D5> <23D5> -<23D6> <23D6> <9E96> -<23D7> <23D7> <9D91> -<23D8> <23D8> <9E7B> -<23D9> <23D9> <9E6F> -<23DA> <23DA> <9E54> -<23DB> <23DB> <9BDC> -<23DC> <23DC> <9BD1> -<23DD> <23DD> <9C9D> -<23DE> <23DE> <9DD2> -<23DF> <23DF> <9E67> -<23E0> <23E0> <9D47> -<23E1> <23E1> <9DA1> -<23E2> <23E2> <9C5A> -<23E3> <23E3> <9DAC> -<23E4> <23E4> <9E5E> -<23E5> <23E5> <9DC6> -<23E6> <23E6> <9E63> -<23E7> <23E7> <9EB7> -endbfrange - -100 beginbfrange -<23E8> <23E8> <9E97> -<23E9> <23E9> <9E5D> -<23EA> <23EA> <9DA7> -<23EB> <23EB> <9E75> -<23EC> <23EC> <9E74> -<23ED> <23ED> <9E87> -<23EE> <23EE> <9E7C> -<23EF> <23EF> <9EAE> -<23F0> <23F0> -<23F1> <23F1> -<23F2> <23F2> -<23F3> <23F3> -<23F4> <23F4> <8CD5> -<23F5> <23F5> <8F86> -<23F6> <23F6> <8BB3> -<23F7> <23F7> <8B9E> -<23F8> <23F8> <8BBE> -<23F9> <23F9> <8B49> -<23FA> <23FA> <8BC6> -<23FB> <23FB> <8C44> -<23FC> <23FC> <8B7A> -<23FD> <23FD> <8BB9> -<23FE> <23FE> <8BC8> -<23FF> <23FF> <8BDC> -<2400> <2400> <8BE5> -<2401> <2401> <8BD4> -<2402> <2402> -<2403> <2403> -<2404> <2404> -<2405> <2405> -<2406> <2406> -<2407> <2407> -<2408> <2408> -<2409> <2409> -<240A> <240A> -<240B> <240B> -<240C> <240C> -<240D> <240D> -<240E> <240E> -<240F> <240F> -<2410> <2410> -<2411> <2411> -<2412> <2412> -<2413> <2413> -<2414> <2414> -<2415> <2415> -<2416> <2417> -<2418> <2418> -<2419> <2419> -<241A> <241A> -<241B> <241B> -<241C> <241C> -<241D> <241D> -<241E> <241F> -<2420> <2420> -<2421> <2421> -<2422> <2422> -<2423> <2423> -<2424> <2424> -<2425> <2425> -<2426> <2426> -<2427> <2427> -<2428> <2428> -<2429> <2429> -<242A> <242A> -<242B> <242B> -<242C> <242C> -<242D> <242D> -<242E> <242E> -<242F> <242F> -<2430> <2430> -<2431> <2431> -<2432> <2432> -<2433> <2433> -<2434> <2434> -<2435> <2435> -<2436> <2436> -<2437> <2437> -<2438> <2438> -<2439> <2439> -<243A> <243A> -<243B> <243B> -<243C> <243C> -<243D> <243D> -<243E> <243E> -<243F> <243F> -<2440> <2440> -<2441> <2441> -<2442> <2442> -<2443> <2443> -<2444> <2444> -<2445> <2445> -<2446> <2446> -<2447> <2447> -<2448> <2448> -<2449> <2449> -<244A> <244A> -<244B> <244B> -<244C> <244C> -<244D> <244D> -endbfrange - -100 beginbfrange -<244E> <244E> -<244F> <244F> -<2450> <2450> -<2451> <2451> -<2452> <2452> -<2453> <2453> -<2454> <2454> -<2455> <2455> -<2456> <2456> -<2457> <2457> -<2458> <2458> -<2459> <2459> -<245A> <245A> -<245B> <245B> -<245C> <245C> -<245D> <245D> -<245E> <245E> -<245F> <245F> -<2460> <2460> -<2461> <2461> -<2462> <2462> -<2463> <2463> -<2464> <2464> -<2465> <2465> -<2466> <2466> -<2467> <2467> -<2468> <2468> <9871> -<2469> <2469> <99C0> -<246A> <246A> <9767> -<246B> <246B> <9796> -<246C> <246C> <98BA> -<246D> <246D> <976E> -<246E> <246E> <99B1> -<246F> <246F> <99C9> -<2470> <2470> <99BE> -<2471> <2471> <99B5> -<2472> <2472> <9966> -<2473> <2473> <97BF> -<2474> <2474> <98EF> -<2475> <2475> <9845> -<2476> <2476> <9881> -<2477> <2477> <98E5> -<2478> <2478> <9975> -<2479> <2479> <99E8> -<247A> <247A> <99F4> -<247B> <247B> <99B3> -<247C> <247C> <98A0> -<247D> <247D> <99E5> -<247E> <247E> <99EC> -<247F> <247F> <99C2> -<2480> <2480> <99B0> -<2481> <2481> <99CE> -<2482> <2482> <9989> -<2483> <2483> <99BD> -<2484> <2484> <997B> -<2485> <2485> <99A9> -<2486> <2486> <99B4> -<2487> <2487> <9A91> -<2488> <2488> <9A8C> -<2489> <2489> <9A9A> -<248A> <248A> <9A97> -<248B> <248B> <9A9B> -<248C> <248C> -<248D> <248D> -<248E> <248E> -<248F> <248F> -<2490> <2490> -<2491> <2491> -<2492> <2492> -<2493> <2493> -<2494> <2494> -<2495> <2495> -<2496> <2496> -<2497> <2497> -<2498> <2498> -<2499> <2499> -<249A> <249A> -<249B> <249B> -<249C> <249C> -<249D> <249E> -<249F> <249F> -<24A0> <24A0> -<24A1> <24A1> -<24A2> <24A2> -<24A3> <24A3> <91E2> -<24A4> <24A4> <91EA> -<24A5> <24A5> -<24A6> <24A6> <95D2> -<24A7> <24A7> <95CF> -<24A8> <24A8> <959F> -<24A9> <24A9> <95E1> -<24AA> <24AA> -<24AB> <24AB> -<24AC> <24AC> -<24AD> <24AD> -<24AE> <24AE> -<24AF> <24AF> -<24B0> <24B0> -<24B1> <24B1> -<24B2> <24B2> -endbfrange - -100 beginbfrange -<24B3> <24B3> -<24B4> <24B4> -<24B5> <24B5> -<24B6> <24B6> -<24B7> <24B7> -<24B8> <24B8> -<24B9> <24B9> -<24BA> <24BA> -<24BB> <24BB> -<24BC> <24BC> -<24BD> <24BD> -<24BE> <24BE> -<24BF> <24BF> -<24C0> <24C0> <9AD0> -<24C1> <24C1> <9ADA> -<24C2> <24C2> <9AE5> -<24C3> <24C3> -<24C4> <24C4> <9656> -<24C5> <24C5> -<24C6> <24C6> -<24C7> <24C7> -<24C8> <24C8> -<24C9> <24C9> -<24CA> <24CA> -<24CB> <24CB> <9A65> -<24CC> <24CD> -<24CE> <24CE> -<24CF> <24CF> -<24D0> <24D0> -<24D1> <24D1> -<24D2> <24D2> -<24D3> <24D3> -<24D4> <24D4> <94CC> -<24D5> <24D5> <9FAC> -<24D6> <24D6> <9F98> -<24D7> <24D7> <9FCD> -<24D8> <24D8> <9FEE> -<24D9> <24D9> -<24DA> <24DA> -<24DB> <24DB> -<24DC> <24DC> -<24DD> <24DD> -<24DE> <24DE> <91BB> -<24DF> <24DF> <9155> -<24E0> <24E0> <91BF> -<24E1> <24E1> <91DF> -<24E2> <24E2> <9DCD> -<24E3> <24E3> -<24E4> <24E4> -<24E5> <24E5> -<24E6> <24E6> -<24E7> <24E7> -<24E8> <24E8> -<24E9> <24E9> -<24EA> <24EA> -<24EB> <24EB> -<24EC> <24EC> -<24ED> <24ED> -<24EE> <24EE> -<24EF> <24EF> -<24F0> <24F0> -<24F1> <24F1> -<24F2> <24F2> -<24F3> <24F5> -<24F6> <24F6> -<24F7> <24F7> -<24F8> <24F8> -<24F9> <24F9> -<24FA> <24FA> -<24FB> <24FB> -<24FC> <24FC> -<24FD> <24FD> -<24FE> <24FE> -<24FF> <24FF> -<2500> <2500> -<2501> <2501> -<2502> <2502> -<2503> <2503> -<2504> <2504> -<2505> <2505> -<2506> <2506> -<2507> <2507> -<2508> <2508> -<2509> <2509> -<250A> <250A> -<250B> <250B> -<250C> <250C> -<250D> <250D> -<250E> <250E> -<250F> <250F> -<2510> <2510> -<2511> <2512> -<2513> <2513> -<2514> <2514> -<2515> <2515> -<2516> <2516> -<2517> <2517> -<2518> <2518> -<2519> <2519> -<251A> <251A> -endbfrange - -100 beginbfrange -<251B> <251B> -<251C> <251C> -<251D> <251D> -<251E> <251E> -<251F> <251F> -<2520> <2520> -<2521> <2521> -<2522> <2522> -<2523> <2523> -<2524> <2524> -<2525> <2525> -<2526> <2526> -<2527> <2527> -<2528> <2528> -<2529> <2529> -<252A> <252A> -<252B> <252B> -<252C> <252C> -<252D> <252D> -<252E> <252E> -<252F> <252F> -<2530> <2530> -<2531> <2531> -<2532> <2532> -<2533> <2533> -<2534> <2534> -<2535> <2535> -<2536> <2536> -<2537> <2537> -<2538> <2538> -<2539> <2539> -<253A> <253A> -<253B> <253B> -<253C> <253C> -<253D> <253D> -<253E> <253E> -<253F> <253F> -<2540> <2540> -<2541> <2542> -<2543> <2543> -<2544> <2544> -<2545> <2545> -<2546> <2546> -<2547> <2547> -<2548> <2548> -<2549> <2549> -<254A> <254A> -<254B> <254B> -<254C> <254C> -<254D> <254D> -<254E> <254E> -<254F> <2550> -<2551> <2551> -<2552> <2552> -<2553> <2553> -<2554> <2554> -<2555> <2555> -<2556> <2556> -<2557> <2557> -<2558> <2558> -<2559> <2559> -<255A> <255A> -<255B> <255B> -<255C> <255C> -<255D> <255D> -<255E> <255E> -<255F> <255F> -<2560> <2560> -<2561> <2561> -<2562> <2562> -<2563> <2563> -<2564> <2564> -<2565> <2565> -<2566> <2566> -<2567> <2567> -<2568> <2569> -<256A> <256A> -<256B> <256B> -<256C> <256C> -<256D> <256D> -<256E> <256E> -<256F> <256F> -<2570> <2570> -<2571> <2571> -<2572> <2572> -<2573> <2573> -<2574> <2574> -<2575> <2575> -<2576> <2576> -<2577> <2577> -<2578> <2578> -<2579> <2579> -<257A> <257A> -<257B> <257B> -<257C> <257C> -<257D> <257D> -<257E> <257E> -<257F> <257F> -<2580> <2580> -<2581> <2581> -endbfrange - -100 beginbfrange -<2582> <2582> -<2583> <2583> -<2584> <2584> -<2585> <2585> -<2586> <2586> -<2587> <2587> -<2588> <2588> -<2589> <2589> -<258A> <258A> -<258B> <258B> -<258C> <258C> -<258D> <258D> -<258E> <258E> -<258F> <258F> -<2590> <2590> -<2591> <2591> -<2592> <2592> -<2593> <2593> -<2594> <2594> -<2595> <2595> -<2596> <2596> -<2597> <2597> -<2598> <2598> -<2599> <2599> -<259A> <259A> -<259B> <259B> -<259C> <259C> -<259D> <259D> -<259E> <259E> -<259F> <259F> -<25A0> <25A0> -<25A1> <25A1> -<25A2> <25A2> -<25A3> <25A3> -<25A4> <25A4> -<25A5> <25A5> -<25A6> <25A6> -<25A7> <25A7> -<25A8> <25A8> -<25A9> <25A9> -<25AA> <25AA> -<25AB> <25AB> -<25AC> <25AC> -<25AD> <25AD> -<25AE> <25AE> -<25AF> <25B0> -<25B1> <25B1> -<25B2> <25B2> -<25B3> <25B3> -<25B4> <25B5> -<25B6> <25B6> -<25B7> <25B7> -<25B8> <25B8> -<25B9> <25B9> -<25BA> <25BA> -<25BB> <25BB> -<25BC> <25BC> -<25BD> <25BD> -<25BE> <25BE> -<25BF> <25BF> -<25C0> <25C0> -<25C1> <25C1> -<25C2> <25C2> -<25C3> <25C3> -<25C4> <25C4> -<25C5> <25C5> -<25C6> <25C6> -<25C7> <25C7> -<25C8> <25C8> -<25C9> <25C9> -<25CA> <25CA> <9D7D> -<25CB> <25CB> -<25CC> <25CC> -<25CD> <25CD> -<25CE> <25CE> -<25CF> <25CF> -<25D0> <25D0> -<25D1> <25D1> -<25D2> <25D2> -<25D3> <25D3> -<25D4> <25D4> -<25D5> <25D5> -<25D6> <25D6> -<25D7> <25D7> -<25D8> <25D8> -<25D9> <25D9> -<25DA> <25DA> -<25DB> <25DB> -<25DC> <25DC> -<25DD> <25DD> -<25DE> <25DE> -<25DF> <25DF> -<25E0> <25E0> -<25E1> <25E1> -<25E2> <25E2> -<25E3> <25E3> -<25E4> <25E4> -<25E5> <25E5> -<25E6> <25E6> -<25E7> <25E7> -endbfrange - -100 beginbfrange -<25E8> <25E8> -<25E9> <25E9> -<25EA> <25EA> -<25EB> <25EB> -<25EC> <25EC> -<25ED> <25ED> -<25EE> <25EE> -<25EF> <25EF> -<25F0> <25F0> -<25F1> <25F1> -<25F2> <25F2> -<25F3> <25F3> -<25F4> <25F4> -<25F5> <25F5> -<25F6> <25F6> -<25F7> <25F7> -<25F8> <25F8> -<25F9> <25F9> -<25FA> <25FA> -<25FB> <25FB> -<25FC> <25FC> -<25FD> <25FD> -<25FE> <25FE> -<25FF> <25FF> -<2600> <2600> -<2601> <2601> -<2602> <2602> -<2603> <2603> -<2604> <2604> -<2605> <2605> -<2606> <2606> -<2607> <2607> -<2608> <2608> -<2609> <2609> -<260A> <260A> -<260B> <260B> -<260C> <260C> -<260D> <260D> -<260E> <260E> -<260F> <260F> -<2610> <2610> -<2611> <2611> -<2612> <2612> -<2613> <2613> -<2614> <2614> -<2615> <2615> -<2616> <2616> -<2617> <2617> -<2618> <2619> -<261A> <261A> -<261B> <261B> -<261C> <261C> -<261D> <261D> -<261E> <261E> -<261F> <261F> -<2620> <2620> -<2621> <2621> -<2622> <2622> -<2623> <2623> -<2624> <2624> -<2625> <2625> -<2626> <2626> -<2627> <2627> -<2628> <2628> -<2629> <2629> -<262A> <262A> -<262B> <262B> -<262C> <262C> -<262D> <262D> -<262E> <262E> -<262F> <262F> -<2630> <2630> -<2631> <2631> -<2632> <2632> -<2633> <2633> -<2634> <2634> -<2635> <2635> -<2636> <2636> -<2637> <2637> -<2638> <2638> -<2639> <2639> -<263A> <263A> -<263B> <263C> -<263D> <263D> -<263E> <263E> -<263F> <263F> -<2640> <2640> -<2641> <2641> -<2642> <2642> -<2643> <2643> -<2644> <2644> -<2645> <2645> -<2646> <2646> -<2647> <2647> -<2648> <2648> -<2649> <2649> -<264A> <264A> -<264B> <264B> -<264C> <264C> -<264D> <264D> -endbfrange - -100 beginbfrange -<264E> <264E> -<264F> <264F> -<2650> <2650> -<2651> <2651> -<2652> <2652> -<2653> <2653> -<2654> <2654> -<2655> <2655> -<2656> <2656> -<2657> <2657> -<2658> <2658> -<2659> <2659> -<265A> <265A> -<265B> <265B> -<265C> <265C> -<265D> <265D> -<265E> <265E> -<265F> <265F> -<2660> <2660> -<2661> <2661> -<2662> <2662> -<2663> <2663> -<2664> <2664> -<2665> <2665> -<2666> <2666> -<2667> <2667> -<2668> <2668> -<2669> <2669> -<266A> <266A> -<266B> <266B> -<266C> <266C> -<266D> <266D> -<266E> <266E> <8F95> -<266F> <266F> -<2670> <2670> -<2671> <2671> -<2672> <2672> <878E> -<2673> <2673> -<2674> <2674> <8766> -<2675> <2675> -<2676> <2676> -<2677> <2677> -<2678> <2678> -<2679> <2679> -<267A> <267A> -<267B> <267B> -<267C> <267C> <8FA1> -<267D> <267D> -<267E> <267E> -<267F> <267F> <82ED> -<2680> <2680> -<2681> <2681> <838D> -<2682> <2682> <92D4> -<2683> <2683> <8477> -<2684> <2684> -<2685> <2685> -<2686> <2686> <95D1> -<2687> <2687> -<2688> <2688> -<2689> <2689> <87D3> -<268A> <268A> -<268B> <268B> <9DF7> -<268C> <268C> <91BA> -<268D> <268D> -<268E> <268E> <9E85> -<268F> <268F> -<2690> <2690> -<2691> <2691> -<2692> <2692> -<2693> <2693> -<2694> <2694> -<2695> <2695> -<2696> <2696> -<2697> <2697> <87D5> -<2698> <2698> -<2699> <2699> <9985> -<269A> <269A> -<269B> <269B> -<269C> <269C> <8253> -<269D> <269D> -<269E> <269E> -<269F> <269F> <87BB> -<26A0> <26A0> -<26A1> <26A1> -<26A2> <26A2> -<26A3> <26A3> -<26A4> <26A4> -<26A5> <26A5> -<26A6> <26A6> -<26A7> <26A7> -<26A8> <26A8> -<26A9> <26B2> -<26B3> <26F1> -<26F2> <26FF> -<2700> <2707> -<2708> <271F> -<2720> <2721> -<2722> <2722> -<2723> <2741> -<2742> <2757> -endbfrange - -100 beginbfrange -<2758> <2790> <8140> -<2791> <2795> <817A> -<2796> <279B> <8180> -<279C> <27FF> <8187> -<2800> <2801> <81EB> -<2802> <2809> <81EE> -<280A> <2811> <81F7> -<2812> <2824> <8240> -<2825> <2832> <8254> -<2833> <2843> <8263> -<2844> <2848> <8275> -<2849> <284A> <827B> -<284B> <284B> <827E> -<284C> <284D> <8281> -<284E> <2859> <8284> -<285A> <286D> <8291> -<286E> <288F> <82A6> -<2890> <28A6> <82CA> -<28A7> <28A7> <82E2> -<28A8> <28AF> <82E5> -<28B0> <28B3> <82EE> -<28B4> <28B7> <82F3> -<28B8> <28B8> <82FA> -<28B9> <28BB> <82FC> -<28BC> <28BC> <8340> -<28BD> <28BF> <8342> -<28C0> <28C1> <8346> -<28C2> <28C4> <8349> -<28C5> <28CA> <834D> -<28CB> <28CD> <8354> -<28CE> <28D3> <8358> -<28D4> <28D9> <835F> -<28DA> <28E4> <8367> -<28E5> <28E9> <8373> -<28EA> <28EA> <8379> -<28EB> <28EB> <837B> -<28EC> <28EC> <837D> -<28ED> <28F1> <8381> -<28F2> <28F3> <8387> -<28F4> <28F5> <838B> -<28F6> <28FB> <838E> -<28FC> <28FF> <8395> -<2900> <2904> <8399> -<2905> <290B> <839F> -<290C> <290F> <83A7> -<2910> <2911> <83AC> -<2912> <291A> <83B1> -<291B> <2928> <83BB> -<2929> <2954> <83CA> -<2955> <295C> <83F7> -<295D> <296C> <8440> -<296D> <298C> <8451> -<298D> <298E> <8472> -<298F> <2990> <8475> -<2991> <2997> <8478> -<2998> <2999> <8480> -<299A> <29A4> <8483> -<29A5> <29A7> <848F> -<29A8> <29B0> <8494> -<29B1> <29B3> <849E> -<29B4> <29B4> <84A4> -<29B5> <29B6> <84A7> -<29B7> <29D1> <84AA> -<29D2> <29DE> <84C6> -<29DF> <29DF> <84D4> -<29E0> <29E0> <84D6> -<29E1> <29E1> <84D8> -<29E2> <29E3> <84DB> -<29E4> <29EF> <84DE> -<29F0> <29F2> <84EB> -<29F3> <29F4> <84EF> -<29F5> <29FF> <84F2> -<2A00> <2A01> <84FD> -<2A02> <2A12> <8540> -<2A13> <2A13> <8553> -<2A14> <2A1C> <8555> -<2A1D> <2A23> <855F> -<2A24> <2A3B> <8567> -<2A3C> <2A42> <8580> -<2A43> <2A45> <8588> -<2A46> <2A4B> <858C> -<2A4C> <2A4E> <8593> -<2A4F> <2A4F> <8597> -<2A50> <2A58> <8599> -<2A59> <2A67> <85A3> -<2A68> <2AB3> <85B3> -<2AB4> <2ABD> <8640> -<2ABE> <2AC6> <864B> -<2AC7> <2AD9> <8655> -<2ADA> <2AEF> <8669> -<2AF0> <2AFF> <8680> -<2B00> <2B05> <8690> -<2B06> <2B07> <8697> -<2B08> <2B0E> <869A> -<2B0F> <2B36> <86A2> -<2B37> <2B37> <86CB> -<2B38> <2B38> <86CD> -<2B39> <2B3A> <86CF> -<2B3B> <2B44> <86D2> -<2B45> <2B47> <86DE> -endbfrange - -100 beginbfrange -<2B48> <2B4D> <86E2> -<2B4E> <2B52> <86E9> -<2B53> <2B57> <86EF> -<2B58> <2B61> <86F5> -<2B62> <2B64> <8741> -<2B65> <2B68> <8745> -<2B69> <2B69> <874A> -<2B6A> <2B6B> <874D> -<2B6C> <2B72> <8750> -<2B73> <2B74> <8758> -<2B75> <2B75> <875D> -<2B76> <2B76> <875F> -<2B77> <2B7B> <8761> -<2B7C> <2B8E> <8767> -<2B8F> <2B90> <877B> -<2B91> <2B91> <877E> -<2B92> <2B92> <8780> -<2B93> <2B95> <8783> -<2B96> <2B96> <8787> -<2B97> <2B97> <8789> -<2B98> <2B99> <878B> -<2B9A> <2B9D> <878F> -<2B9E> <2BA1> <8794> -<2BA2> <2BA5> <8799> -<2BA6> <2BAA> <879E> -<2BAB> <2BAD> <87A4> -<2BAE> <2BB8> <87A8> -<2BB9> <2BB9> <87B4> -<2BBA> <2BBE> <87B6> -<2BBF> <2BC1> <87BC> -<2BC2> <2BC2> <87C1> -<2BC3> <2BC9> <87C3> -<2BCA> <2BCB> <87CD> -<2BCC> <2BCD> <87D0> -<2BCE> <2BCE> <87D4> -<2BCF> <2BD2> <87D6> -<2BD3> <2BEE> <87DB> -<2BEF> <2BEF> <87F9> -<2BF0> <2BF3> <87FB> -<2BF4> <2BF5> <8842> -<2BF6> <2BF6> <8845> -<2BF7> <2BFF> <8847> -<2C00> <2C2E> <8850> -<2C2F> <2C68> <8880> -<2C69> <2C79> <88BB> -<2C7A> <2C80> <88CD> -<2C81> <2C82> <88D5> -<2C83> <2C89> <88D8> -<2C8A> <2C8E> <88E0> -<2C8F> <2C9A> <88E6> -<2C9B> <2C9C> <88F4> -<2C9D> <2CA4> <88F7> -<2CA5> <2CAF> <8940> -<2CB0> <2CB0> <894D> -<2CB1> <2CB1> <894F> -<2CB2> <2CB4> <8951> -<2CB5> <2CBC> <8955> -<2CBD> <2CBD> <895E> -<2CBE> <2CCA> <8960> -<2CCB> <2CCD> <896E> -<2CCE> <2CD7> <8972> -<2CD8> <2CD9> <897D> -<2CDA> <2CE4> <8980> -<2CE5> <2CF1> <898C> -<2CF2> <2CF5> <899A> -<2CF6> <2CFC> <899F> -<2CFD> <2CFD> <89A7> -<2CFE> <2CFF> <89A9> -<2D00> <2D03> <89AB> -<2D04> <2D0D> <89B0> -<2D0E> <2D10> <89BB> -<2D11> <2D13> <89C1> -<2D14> <2D14> <89C7> -<2D15> <2D19> <89C9> -<2D1A> <2D1B> <89CF> -<2D1C> <2D21> <89D2> -<2D22> <2D23> <89D9> -<2D24> <2D3B> <89DC> -<2D3C> <2D45> <89F5> -<2D46> <2D46> <8A40> -<2D47> <2D5D> <8A42> -<2D5E> <2D5E> <8A5B> -<2D5F> <2D5F> <8A5D> -<2D60> <2D79> <8A5F> -<2D7A> <2D7E> <8A7A> -<2D7F> <2DE2> <8A80> -<2DE3> <2DFC> <8AE5> -<2DFD> <2DFF> <8B40> -<2E00> <2E00> <8B43> -<2E01> <2E04> <8B45> -<2E05> <2E34> <8B4A> -<2E35> <2E38> <8B7B> -<2E39> <2E44> <8B80> -<2E45> <2E55> <8B8D> -<2E56> <2E69> <8B9F> -<2E6A> <2E6E> <8BB4> -<2E6F> <2E72> <8BBA> -<2E73> <2E79> <8BBF> -<2E7A> <2E7A> <8BC7> -<2E7B> <2E84> <8BCA> -endbfrange - -100 beginbfrange -<2E85> <2E8B> <8BD5> -<2E8C> <2E93> <8BDD> -<2E94> <2E98> <8BE6> -<2E99> <2E9C> <8BEC> -<2E9D> <2EAA> <8BF1> -<2EAB> <2EAE> <8C40> -<2EAF> <2EB8> <8C45> -<2EB9> <2EBF> <8C50> -<2EC0> <2EC3> <8C58> -<2EC4> <2EE5> <8C5D> -<2EE6> <2EF0> <8C80> -<2EF1> <2EF1> <8C8C> -<2EF2> <2EF2> <8C90> -<2EF3> <2EF8> <8C93> -<2EF9> <2EFF> <8C9B> -<2F00> <2F00> <8CA5> -<2F01> <2F18> <8CA8> -<2F19> <2F29> <8CC1> -<2F2A> <2F2A> <8CD4> -<2F2B> <2F2D> <8CD6> -<2F2E> <2F4C> <8CDA> -<2F4D> <2F51> <8CFA> -<2F52> <2F84> <8D40> -<2F85> <2F85> <8D74> -<2F86> <2F8A> <8D76> -<2F8B> <2F8D> <8D7C> -<2F8E> <2F95> <8D80> -<2F96> <2F9B> <8D89> -<2F9C> <2FA9> <8D90> -<2FAA> <2FC3> <8D9F> -<2FC4> <2FEB> <8DBA> -<2FEC> <2FEC> <8DE3> -<2FED> <2FEE> <8DE5> -<2FEF> <2FFD> <8DE8> -<2FFE> <2FFF> <8DF8> -<3000> <3003> <8DFA> -<3004> <3009> <8E40> -<300A> <3018> <8E47> -<3019> <3019> <8E57> -<301A> <301A> <8E59> -<301B> <3027> <8E5B> -<3028> <302C> <8E69> -<302D> <302D> <8E6F> -<302E> <303B> <8E71> -<303C> <3055> <8E81> -<3056> <3058> <8E9C> -<3059> <305C> <8EA0> -<305D> <305E> <8EA5> -<305F> <3062> <8EA8> -<3063> <3063> <8EAD> -<3064> <3071> <8EAF> -<3072> <3075> <8EBF> -<3076> <3076> <8EC4> -<3077> <307D> <8EC6> -<307E> <3084> <8ECF> -<3085> <3098> <8ED8> -<3099> <30AA> <8EED> -<30AB> <30BC> <8F40> -<30BD> <30C2> <8F57> -<30C3> <30C8> <8F5E> -<30C9> <30E2> <8F65> -<30E3> <30E8> <8F80> -<30E9> <30E9> <8F87> -<30EA> <30F5> <8F89> -<30F6> <30F6> <8F96> -<30F7> <30F9> <8F98> -<30FA> <30FA> <8F9C> -<30FB> <30FD> <8F9E> -<30FE> <30FF> <8FA2> -<3100> <3118> <8FA4> -<3119> <311E> <8FBE> -<311F> <311F> <8FC5> -<3120> <3125> <8FC7> -<3126> <312F> <8FCE> -<3130> <3155> <8FD9> -<3156> <3194> <9040> -<3195> <31B1> <9080> -<31B2> <31CC> <909F> -<31CD> <31D1> <90BB> -<31D2> <31D4> <90C2> -<31D5> <31E9> <90C6> -<31EA> <31F9> <90DD> -<31FA> <31FB> <90EE> -<31FC> <31FF> <90F1> -<3200> <3201> <90F5> -<3202> <3208> <90F8> -<3209> <320A> <9140> -<320B> <3212> <9143> -<3213> <3213> <914C> -<3214> <3216> <914E> -<3217> <3218> <9152> -<3219> <321B> <9156> -<321C> <321D> <915B> -<321E> <3220> <915E> -<3221> <3221> <9162> -<3222> <322B> <9164> -<322C> <3232> <916F> -<3233> <3235> <9177> -<3236> <3237> <917D> -<3238> <323B> <9180> -endbfrange - -100 beginbfrange -<323C> <3243> <9185> -<3244> <3246> <918E> -<3247> <3247> <9192> -<3248> <324A> <9194> -<324B> <324D> <9198> -<324E> <325A> <919C> -<325B> <3268> <91AC> -<3269> <326B> <91BC> -<326C> <326E> <91C0> -<326F> <3277> <91C4> -<3278> <3279> <91CE> -<327A> <327A> <91D3> -<327B> <327B> <91D5> -<327C> <327C> <91D7> -<327D> <3281> <91DA> -<3282> <3283> <91E0> -<3284> <328A> <91E3> -<328B> <328F> <91EB> -<3290> <3290> <91F1> -<3291> <329C> <91F3> -<329D> <32DB> <9240> -<32DC> <32FF> <9280> -<3300> <3311> <92A4> -<3312> <3328> <92B7> -<3329> <3329> <92CF> -<332A> <332C> <92D1> -<332D> <3336> <92D5> -<3337> <3353> <92E1> -<3354> <3363> <9340> -<3364> <336F> <9351> -<3370> <3381> <935E> -<3382> <3386> <9371> -<3387> <338E> <9377> -<338F> <339A> <9380> -<339B> <33AA> <938D> -<33AB> <33B1> <939E> -<33B2> <33B2> <93A6> -<33B3> <33BE> <93A8> -<33BF> <33C1> <93B5> -<33C2> <33C3> <93B9> -<33C4> <33C4> <93BC> -<33C5> <33CC> <93BE> -<33CD> <33D4> <93C7> -<33D5> <33DB> <93D0> -<33DC> <33DE> <93D8> -<33DF> <33E2> <93DD> -<33E3> <33E4> <93E2> -<33E5> <33E7> <93E6> -<33E8> <33E8> <93EA> -<33E9> <33E9> <93EE> -<33EA> <33EA> <93F0> -<33EB> <33EC> <93F2> -<33ED> <33F0> <93F6> -<33F1> <33F3> <93FB> -<33F4> <33F7> <9440> -<33F8> <33FF> <9445> -<3400> <3401> <944E> -<3402> <3402> <9454> -<3403> <3404> <9456> -<3405> <3406> <9459> -<3407> <3407> <945E> -<3408> <340B> <9460> -<340C> <340C> <9465> -<340D> <3413> <9467> -<3414> <3416> <946F> -<3417> <3417> <9473> -<3418> <3418> <9475> -<3419> <3419> <9477> -<341A> <341A> <9479> -<341B> <341E> <947B> -<341F> <3422> <9483> -<3423> <343A> <9489> -<343B> <344B> <94A2> -<344C> <344C> <94B4> -<344D> <3455> <94B6> -<3456> <3460> <94C1> -<3461> <346B> <94CD> -<346C> <3472> <94D9> -<3473> <3490> <94E1> -<3491> <34C2> <9540> -<34C3> <34CE> <9573> -<34CF> <34D1> <9580> -<34D2> <34EB> <9584> -<34EC> <34FE> <95A0> -<34FF> <34FF> <95B4> -<3500> <3504> <95B5> -<3505> <3518> <95BB> -<3519> <3519> <95D0> -<351A> <351A> <95D3> -<351B> <3526> <95D5> -<3527> <352B> <95E2> -<352C> <3534> <95E8> -<3535> <353A> <95F2> -<353B> <353F> <95F9> -<3540> <3555> <9640> -<3556> <357A> <9657> -<357B> <357C> <967D> -<357D> <35FB> <9680> -<35FC> <35FF> <9740> -<3600> <3622> <9744> -endbfrange - -100 beginbfrange -<3623> <3626> <9768> -<3627> <3627> <976D> -<3628> <3637> <976F> -<3638> <364D> <9780> -<364E> <3652> <9798> -<3653> <3657> <979E> -<3658> <3672> <97A4> -<3673> <36A0> <97C0> -<36A1> <36A8> <97EF> -<36A9> <36AF> <97F8> -<36B0> <36B4> <9840> -<36B5> <36B7> <9846> -<36B8> <36BC> <984A> -<36BD> <36DD> <9850> -<36DE> <36DE> <9872> -<36DF> <36E9> <9874> -<36EA> <36EA> <9880> -<36EB> <36F3> <9882> -<36F4> <36FF> <988D> -<3700> <3706> <9899> -<3707> <370F> <98A1> -<3710> <371A> <98AB> -<371B> <371C> <98B8> -<371D> <3728> <98BB> -<3729> <372B> <98C8> -<372C> <372F> <98CC> -<3730> <3731> <98D1> -<3732> <3740> <98D4> -<3741> <3749> <98E6> -<374A> <374B> <98F0> -<374C> <3757> <98F3> -<3758> <375A> <9940> -<375B> <375B> <9944> -<375C> <377B> <9946> -<377C> <3782> <9967> -<3783> <3788> <996F> -<3789> <378C> <9976> -<378D> <378F> <997C> -<3790> <3794> <9980> -<3795> <3797> <9986> -<3798> <379B> <998A> -<379C> <379D> <998F> -<379E> <37A4> <9992> -<37A5> <37B3> <999A> -<37B4> <37B9> <99AA> -<37BA> <37BA> <99B2> -<37BB> <37C1> <99B6> -<37C2> <37C2> <99BF> -<37C3> <37C3> <99C1> -<37C4> <37C9> <99C3> -<37CA> <37CD> <99CA> -<37CE> <37CF> <99CF> -<37D0> <37D7> <99D2> -<37D8> <37DC> <99DB> -<37DD> <37E0> <99E1> -<37E1> <37E2> <99E6> -<37E3> <37E5> <99E9> -<37E6> <37EC> <99ED> -<37ED> <37F6> <99F5> -<37F7> <37FF> <9A40> -<3800> <3800> <9A49> -<3801> <380C> <9A4B> -<380D> <3819> <9A58> -<381A> <381A> <9A66> -<381B> <3823> <9A68> -<3824> <3827> <9A72> -<3828> <382E> <9A78> -<382F> <3836> <9A80> -<3837> <3839> <9A89> -<383A> <383D> <9A8D> -<383E> <3842> <9A92> -<3843> <3844> <9A98> -<3845> <3846> <9A9C> -<3847> <3849> <9A9F> -<384A> <384F> <9AA4> -<3850> <3874> <9AAB> -<3875> <3879> <9AD1> -<387A> <387C> <9AD7> -<387D> <3883> <9ADB> -<3884> <3884> <9AE3> -<3885> <389D> <9AE6> -<389E> <38DC> <9B40> -<38DD> <38FF> <9B80> -<3900> <392D> <9BA3> -<392E> <3937> <9BD2> -<3938> <3959> <9BDD> -<395A> <396C> <9C40> -<396D> <3971> <9C54> -<3972> <3972> <9C5B> -<3973> <398A> <9C5D> -<398B> <398D> <9C76> -<398E> <3992> <9C7A> -<3993> <3998> <9C80> -<3999> <39AE> <9C87> -<39AF> <39BB> <9C9E> -<39BC> <39D9> <9CAC> -<39DA> <39DD> <9CCB> -<39DE> <39F3> <9CD0> -<39F4> <39F7> <9CE8> -<39F8> <39F8> <9CED> -endbfrange - -100 beginbfrange -<39F9> <39FF> <9CEF> -<3A00> <3A04> <9CF6> -<3A05> <3A06> <9CFC> -<3A07> <3A08> <9D40> -<3A09> <3A0B> <9D43> -<3A0C> <3A10> <9D48> -<3A11> <3A11> <9D4E> -<3A12> <3A22> <9D50> -<3A23> <3A28> <9D62> -<3A29> <3A2C> <9D6A> -<3A2D> <3A2E> <9D6F> -<3A2F> <3A31> <9D72> -<3A32> <3A36> <9D76> -<3A37> <3A37> <9D7C> -<3A38> <3A38> <9D7E> -<3A39> <3A42> <9D80> -<3A43> <3A44> <9D8B> -<3A45> <3A47> <9D8E> -<3A48> <3A4E> <9D92> -<3A4F> <3A55> <9D9A> -<3A56> <3A59> <9DA3> -<3A5A> <3A5D> <9DA8> -<3A5E> <3A61> <9DAE> -<3A62> <3A6B> <9DB4> -<3A6C> <3A72> <9DBF> -<3A73> <3A74> <9DC7> -<3A75> <3A77> <9DCA> -<3A78> <3A7B> <9DCE> -<3A7C> <3A7D> <9DD3> -<3A7E> <3A88> <9DD6> -<3A89> <3A96> <9DE3> -<3A97> <3A98> <9DF2> -<3A99> <3A9A> <9DF5> -<3A9B> <3A9C> <9DF8> -<3A9D> <3A9E> <9DFB> -<3A9F> <3A9F> <9DFE> -<3AA0> <3AA4> <9E40> -<3AA5> <3AA6> <9E46> -<3AA7> <3AAE> <9E4A> -<3AAF> <3AAF> <9E53> -<3AB0> <3AB0> <9E55> -<3AB1> <3AB6> <9E57> -<3AB7> <3AB8> <9E5F> -<3AB9> <3AB9> <9E62> -<3ABA> <3ABC> <9E64> -<3ABD> <3AC0> <9E68> -<3AC1> <3AC2> <9E6D> -<3AC3> <3AC4> <9E70> -<3AC5> <3AC5> <9E73> -<3AC6> <3ACA> <9E76> -<3ACB> <3ACC> <9E7D> -<3ACD> <3AD1> <9E80> -<3AD2> <3AD2> <9E86> -<3AD3> <3ADB> <9E88> -<3ADC> <3ADF> <9E92> -<3AE0> <3AE9> <9E98> -<3AEA> <3AEC> <9EA3> -<3AED> <3AEE> <9EA7> -<3AEF> <3AF2> <9EAA> -<3AF3> <3AF6> <9EAF> -<3AF7> <3AF8> <9EB5> -<3AF9> <3AFF> <9EB8> -<3B00> <3B35> <9EBF> -<3B36> <3B3E> <9EF6> -<3B3F> <3B4C> <9F40> -<3B4D> <3B6C> <9F4F> -<3B6D> <3B7B> <9F70> -<3B7C> <3B8D> <9F80> -<3B8E> <3B92> <9F93> -<3B93> <3B9F> <9F99> -<3BA0> <3BA1> <9FA7> -<3BA2> <3BA3> <9FAA> -<3BA4> <3BBF> <9FAD> -<3BC0> <3BC2> <9FCA> -<3BC3> <3BD5> <9FCE> -<3BD6> <3BDE> <9FE2> -<3BDF> <3BE0> <9FEC> -<3BE1> <3BE5> <9FEF> -<3BE6> <3BED> <9FF5> -<3BEE> <3BEE> <9FFE> -<3BEF> <3BF1> -<3BF2> <3BF3> -<3BF4> <3BF5> -<3BF6> <3BF9> -<3BFA> <3BFE> -<3BFF> <3BFF> -<3C00> <3C03> -<3C04> <3C09> -<3C0A> <3C0A> -<3C0B> <3C17> -<3C18> <3C19> -<3C1A> <3C23> -<3C24> <3C33> -<3C34> <3C35> -<3C36> <3C36> -<3C37> <3C48> -<3C49> <3C5D> -<3C5E> <3C6B> -<3C6C> <3C75> -<3C76> <3C79> -endbfrange - -100 beginbfrange -<3C7A> <3C88> -<3C89> <3C98> -<3C99> <3CA5> -<3CA6> <3CC7> -<3CC8> <3CC8> -<3CC9> <3CCB> -<3CCC> <3CCD> -<3CCE> <3CD0> -<3CD1> <3CEA> -<3CEB> <3CEB> -<3CEC> <3CEC> -<3CED> <3CED> -<3CEE> <3CEF> -<3CF0> <3CF0> -<3CF1> <3CF1> -<3CF2> <3CF3> -<3CF4> <3CFF> -<3D00> <3D24> -<3D25> <3D45> -<3D46> <3D4B> -<3D4C> <3D75> -<3D76> <3D7F> -<3D80> <3D81> -<3D82> <3D8E> -<3D8F> <3D93> -<3D94> <3D9F> -<3DA0> <3DA8> -<3DA9> <3DBC> -<3DBD> <3DBE> -<3DBF> <3DC4> -<3DC5> <3DCF> -<3DD0> <3DD9> -<3DDA> <3DDB> -<3DDC> <3DDF> -<3DE0> <3DE2> -<3DE3> <3DE7> -<3DE8> <3DF6> -<3DF7> <3DFF> -<3E00> <3E0A> -<3E0B> <3E17> -<3E18> <3E33> -<3E34> <3E37> -<3E38> <3E3C> -<3E3D> <3E44> -<3E45> <3E4F> -<3E50> <3E73> -<3E74> <3E89> -<3E8A> <3E8C> -<3E8D> <3E8E> -<3E8F> <3E98> -<3E99> <3E99> -<3E9A> <3EA3> -<3EA4> <3EA5> -<3EA6> <3EA6> -<3EA7> <3EA7> -<3EA8> <3EA8> -<3EA9> <3EB2> -<3EB3> <3EB6> -<3EB7> <3EB8> -<3EB9> <3EB9> -<3EBA> <3EBA> -<3EBB> <3EBB> -<3EBC> <3EC2> -<3EC3> <3ED2> -<3ED3> <3ED3> -<3ED4> <3EEA> -<3EEB> <3EEB> -<3EEC> <3EF2> -<3EF3> <3EFD> -<3EFE> <3EFE> -<3EFF> <3EFF> -<3F00> <3F00> -<3F01> <3F2C> -<3F2D> <3F43> -<3F44> <3F4C> -<3F4D> <3F4D> -<3F4E> <3F72> -<3F73> <3F77> -<3F78> <3F7D> -<3F7E> <3F87> -<3F88> <3F8F> -<3F90> <3F9F> -<3FA0> <3FA5> -<3FA6> <3FA8> -<3FA9> <3FD4> -<3FD5> <3FE2> -<3FE3> <3FEA> -<3FEB> <3FED> -<3FEE> <3FEE> -<3FEF> <3FFF> -<4000> <4000> -<4001> <4014> -<4015> <4017> -<4018> <401C> -<401D> <401D> -<401E> <4030> -<4031> <4038> -<4039> <403B> -<403C> <4040> -<4041> <4049> -endbfrange - -100 beginbfrange -<404A> <4056> -<4057> <4057> -<4058> <4060> -<4061> <406A> -<406B> <406D> -<406E> <4071> -<4072> <408E> -<408F> <40AA> -<40AB> <40AD> -<40AE> <40BF> -<40C0> <40C1> -<40C2> <40C4> -<40C5> <40C5> -<40C6> <40E7> -<40E8> <40FF> -<4100> <4108> -<4109> <4116> -<4117> <4118> -<4119> <411F> -<4120> <4129> -<412A> <4139> -<413A> <413F> -<4140> <4140> -<4141> <415E> -<415F> <4161> -<4162> <4162> -<4163> <4168> -<4169> <416B> -<416C> <4173> -<4174> <4174> -<4175> <4175> -<4176> <418B> -<418C> <4192> -<4193> <4194> -<4195> <41B2> -<41B3> <41C2> -<41C3> <41D2> -<41D3> <41EB> -<41EC> <41EE> -<41EF> <41FF> -<4200> <420B> -<420C> <420D> -<420E> <420F> -<4210> <4210> -<4211> <4221> -<4222> <4223> -<4224> <4229> -<422A> <4232> -<4233> <423B> -<423C> <4245> -<4246> <4249> -<424A> <424A> -<424B> <424B> -<424C> <424F> -<4250> <425F> -<4260> <4260> -<4261> <4268> -<4269> <4276> -<4277> <4278> -<4279> <427B> -<427C> <427F> -<4280> <4280> -<4281> <4281> -<4282> <4284> -<4285> <4294> -<4295> <42B5> -<42B6> <42C7> -<42C8> <42CD> -<42CE> <42D3> -<42D4> <42D4> -<42D5> <42D5> -<42D6> <42D6> -<42D7> <42D7> -<42D8> <42DA> -<42DB> <42DB> -<42DC> <42DC> -<42DD> <42DD> -<42DE> <42DE> -<42DF> <42E0> -<42E1> <42E2> -<42E3> <42E3> -<42E4> <42E4> -<42E5> <42E7> -<42E8> <42F1> -<42F2> <42F4> -<42F5> <42F6> -<42F7> <42F7> -<42F8> <42F9> -<42FA> <42FA> -<42FB> <42FB> -<42FC> <42FC> -<42FD> <42FF> -<4300> <4303> -<4304> <4304> -<4305> <4310> -<4311> <4312> -<4313> <4315> -<4316> <4316> -<4317> <431D> -<431E> <431F> -endbfrange - -100 beginbfrange -<4320> <4320> -<4321> <4327> -<4328> <4328> -<4329> <432A> -<432B> <432B> -<432C> <4330> -<4331> <4333> -<4334> <4338> -<4339> <433B> -<433C> <433C> -<433D> <433F> -<4340> <4345> -<4346> <4346> -<4347> <4349> -<434A> <434A> -<434B> <434E> -<434F> <4350> -<4351> <4352> -<4353> <4357> -<4358> <4358> -<4359> <435A> -<435B> <435D> -<435E> <435E> -<435F> <435F> -<4360> <4361> -<4362> <4362> -<4363> <4364> -<4365> <4366> -<4367> <4367> -<4368> <4368> -<4369> <4369> -<436A> <436B> -<436C> <436C> -<436D> <4378> -<4379> <437C> -<437D> <4385> -<4386> <4386> -<4387> <4389> -<438A> <438C> -<438D> <438F> -<4390> <4390> -<4391> <4392> -<4393> <4393> -<4394> <4394> -<4395> <4396> -<4397> <439B> -<439C> <43A5> -<43A6> <43A6> -<43A7> <43AA> -<43AB> <43AD> -<43AE> <43B0> -<43B1> <43B6> -<43B7> <43B7> -<43B8> <43B9> -<43BA> <43BE> -<43BF> <43C0> -<43C1> <43C8> -<43C9> <43C9> -<43CA> <43CA> -<43CB> <43CB> -<43CC> <43CE> -<43CF> <43CF> -<43D0> <43D0> -<43D1> <43D2> -<43D3> <43D4> -<43D5> <43EF> -<43F0> <43F0> -<43F1> <43F3> -<43F4> <43FF> -<4400> <4403> -<4404> <4406> -<4407> <4410> -<4411> <4411> -<4412> <4423> -<4424> <4425> -<4426> <442B> -<442C> <4440> -<4441> <444B> -<444C> <4459> -<445A> <446F> -<4470> <4470> -<4471> <4485> -<4486> <4486> -<4487> <448A> -<448B> <4498> -<4499> <4499> -<449A> <449A> -<449B> <449D> -<449E> <449F> -<44A0> <44D6> -<44D7> <44D9> -<44DA> <44DD> -<44DE> <44F3> -<44F4> <44F8> -<44F9> <44FF> -<4500> <4501> -<4502> <4503> -<4504> <450A> -<450B> <450D> -<450E> <450F> -endbfrange - -100 beginbfrange -<4510> <4516> -<4517> <4529> -<452A> <452B> -<452C> <452F> -<4530> <4530> -<4531> <453F> -<4540> <4543> -<4544> <4544> -<4545> <4545> -<4546> <4549> -<454A> <454D> -<454E> <454E> -<454F> <4552> -<4553> <4557> -<4558> <4563> -<4564> <4566> -<4567> <457E> -<457F> <4591> -<4592> <4599> -<459A> <459A> -<459B> <459C> -<459D> <459D> -<459E> <459F> -<45A0> <45A1> -<45A2> <45BC> -<45BD> <45CA> -<45CB> <45D6> -<45D7> <45F7> -<45F8> <45FF> -<4600> <461D> -<461E> <4625> -<4626> <462B> -<462C> <462F> -<4630> <4632> -<4633> <4653> -<4654> <4654> -<4655> <4661> -<4662> <4663> -<4664> <4676> -<4677> <467D> -<467E> <468C> -<468D> <4693> -<4694> <469D> -<469E> <469E> -<469F> <46A2> -<46A3> <46A5> -<46A6> <46A8> -<46A9> <46B7> -<46B8> <46D4> -<46D5> <46D5> -<46D6> <46DB> -<46DC> <46E2> -<46E3> <46F1> -<46F2> <46FC> -<46FD> <46FF> -<4700> <4700> -<4701> <470E> -<470F> <4715> -<4716> <4717> -<4718> <4719> -<471A> <471D> -<471E> <4729> -<472A> <472C> -<472D> <4730> -<4731> <4733> -<4734> <4734> -<4735> <4735> -<4736> <473C> -<473D> <4740> -<4741> <4742> -<4743> <4749> -<474A> <474F> -<4750> <4752> -<4753> <4753> -<4754> <4754> -<4755> <4757> -<4758> <4759> -<475A> <4761> -<4762> <4766> -<4767> <4767> -<4768> <4771> -<4772> <4781> -<4782> <4783> -<4784> <478A> -<478B> <4790> -<4791> <4793> -<4794> <479C> -<479D> <479D> -<479E> <479F> -<47A0> <47A6> -<47A7> <47A9> -<47AA> <47B5> -<47B6> <47B8> -<47B9> <47BB> -<47BC> <47C3> -<47C4> <47CE> -<47CF> <47D1> -<47D2> <47D2> -<47D3> <47E0> -<47E1> <47E5> -endbfrange - -100 beginbfrange -<47E6> <47E6> -<47E7> <47EC> -<47ED> <47EF> -<47F0> <47FF> -<4800> <482E> -<482F> <483E> -<483F> <4845> -<4846> <484D> -<484E> <4874> -<4875> <487E> -<487F> <488A> -<488B> <488B> -<488C> <4890> -<4891> <48A3> -<48A4> <48A5> -<48A6> <48A7> -<48A8> <48B5> -<48B6> <48BB> -<48BC> <48BD> -<48BE> <48C0> -<48C1> <48CF> -<48D0> <48D5> -<48D6> <48D6> -<48D7> <48D8> -<48D9> <48DB> -<48DC> <48DD> -<48DE> <48DE> -<48DF> <48E5> -<48E6> <48ED> -<48EE> <48F6> -<48F7> <48F7> -<48F8> <48FF> -<4900> <4904> -<4905> <4907> -<4908> <490A> -<490B> <4910> -<4911> <4913> -<4914> <4919> -<491A> <491D> -<491E> <491E> -<491F> <492C> -<492D> <492D> -<492E> <494E> -<494F> <4963> -<4964> <4966> -<4967> <496D> -<496E> <497F> -<4980> <4986> -<4987> <4987> -<4988> <49A4> -<49A5> <49A6> -<49A7> <49A8> -<49A9> <49B1> -<49B2> <49BF> -<49C0> <49C5> -<49C6> <49C8> -<49C9> <49CC> -<49CD> <49CD> -<49CE> <49CF> -<49D0> <49D1> -<49D2> <49DA> -<49DB> <49E4> -<49E5> <49E7> -<49E8> <49EA> -<49EB> <49EC> -<49ED> <49ED> -<49EE> <49F5> -<49F6> <49F9> -<49FA> <49FC> -<49FD> <49FD> -<49FE> <49FF> -<4A00> <4A01> -<4A02> <4A05> -<4A06> <4A07> -<4A08> <4A09> -<4A0A> <4A0A> -<4A0B> <4A23> -<4A24> <4A24> -<4A25> <4A25> -<4A26> <4A27> -<4A28> <4A2C> -<4A2D> <4A2F> -<4A30> <4A30> -<4A31> <4A31> -<4A32> <4A32> -<4A33> <4A33> -<4A34> <4A35> -<4A36> <4A36> -<4A37> <4A37> -<4A38> <4A39> -<4A3A> <4A3A> -<4A3B> <4A3B> -<4A3C> <4A3E> -<4A3F> <4A3F> -<4A40> <4A43> -<4A44> <4A45> -<4A46> <4A48> -<4A49> <4A4A> -<4A4B> <4A4B> -<4A4C> <4A4E> -endbfrange - -100 beginbfrange -<4A4F> <4A53> -<4A54> <4A57> -<4A58> <4A5D> -<4A5E> <4A5E> -<4A5F> <4A5F> -<4A60> <4A60> -<4A61> <4A62> -<4A63> <4A64> -<4A65> <4A66> -<4A67> <4A68> -<4A69> <4A6A> -<4A6B> <4A6C> -<4A6D> <4A6D> -<4A6E> <4A6E> -<4A6F> <4A6F> -<4A70> <4A74> -<4A75> <4A76> -<4A77> <4A77> -<4A78> <4A7A> -<4A7B> <4A7D> -<4A7E> <4A80> -<4A81> <4A81> -<4A82> <4A83> -<4A84> <4A84> -<4A85> <4A87> -<4A88> <4A88> -<4A89> <4A89> -<4A8A> <4A8A> -<4A8B> <4A8D> -<4A8E> <4A90> -<4A91> <4A91> -<4A92> <4A94> -<4A95> <4A96> -<4A97> <4A98> -<4A99> <4A9A> -<4A9B> <4A9C> -<4A9D> <4A9D> -<4A9E> <4A9F> -<4AA0> <4AA0> -<4AA1> <4AA1> -<4AA2> <4AA2> -<4AA3> <4AA3> -<4AA4> <4AA4> -<4AA5> <4AA7> -<4AA8> <4AAA> -<4AAB> <4AAB> -<4AAC> <4AAE> -<4AAF> <4AAF> -<4AB0> <4AB0> -<4AB1> <4AB3> -<4AB4> <4AB4> -<4AB5> <4AB6> -<4AB7> <4AB7> -<4AB8> <4AB9> -<4ABA> <4ABA> -<4ABB> <4ABB> -<4ABC> <4ABC> -<4ABD> <4ABD> -<4ABE> <4ABE> -<4ABF> <4AC1> -<4AC2> <4AC4> -<4AC5> <4AC5> -<4AC6> <4AC8> -<4AC9> <4AC9> -<4ACA> <4ACA> -<4ACB> <4ACB> -<4ACC> <4ACE> -<4ACF> <4AD0> -<4AD1> <4AD3> -<4AD4> <4AD5> -<4AD6> <4ADA> -<4ADB> <4ADF> -<4AE0> <4AE3> -<4AE4> <4AEA> -<4AEB> <4AED> -<4AEE> <4AF1> -<4AF2> <4AF7> -<4AF8> <4AF8> -<4AF9> <4AF9> -<4AFA> <4AFF> -<4B00> <4B06> -<4B07> <4B08> -<4B09> <4B0B> -<4B0C> <4B0D> -<4B0E> <4B12> -<4B13> <4B14> -<4B15> <4B1A> -<4B1B> <4B1D> -<4B1E> <4B20> -<4B21> <4B23> -<4B24> <4B24> -<4B25> <4B29> -<4B2A> <4B2A> -<4B2B> <4B33> -<4B34> <4B40> -<4B41> <4B45> -<4B46> <4B70> -<4B71> <4B80> -<4B81> <4B81> -<4B82> <4B85> -endbfrange - -100 beginbfrange -<4B86> <4B86> -<4B87> <4B87> -<4B88> <4B88> -<4B89> <4B89> -<4B8A> <4B8A> -<4B8B> <4B8B> -<4B8C> <4B8C> -<4B8D> <4B8D> -<4B8E> <4B93> -<4B94> <4B94> -<4B95> <4B98> -<4B99> <4B99> -<4B9A> <4B9A> -<4B9B> <4B9B> -<4B9C> <4B9C> -<4B9D> <4B9E> -<4B9F> <4BA4> -<4BA5> <4BA9> -<4BAA> <4BAE> -<4BAF> <4BB0> -<4BB1> <4BB1> -<4BB2> <4BB2> -<4BB3> <4BB3> -<4BB4> <4BB8> -<4BB9> <4BBC> -<4BBD> <4BE0> -<4BE1> <4BE3> -<4BE4> <4BEA> -<4BEB> <4BEF> -<4BF0> <4BF7> -<4BF8> <4BFF> -<4C00> <4C09> -<4C0A> <4C29> -<4C2A> <4C40> -<4C41> <4C46> -<4C47> <4C4A> -<4C4B> <4C50> -<4C51> <4C5C> -<4C5D> <4C64> -<4C65> <4C69> -<4C6A> <4C72> -<4C73> <4C73> -<4C74> <4C74> -<4C75> <4C79> -<4C7A> <4C7D> -<4C7E> <4C80> -<4C81> <4C83> -<4C84> <4C93> -<4C94> <4C95> -<4C96> <4C9C> -<4C9D> <4C9F> -<4CA0> <4CA0> -<4CA1> <4CA6> -<4CA7> <4CA9> -<4CAA> <4CAD> -<4CAE> <4CB3> -<4CB4> <4CB9> -<4CBA> <4CBE> -<4CBF> <4CBF> -<4CC0> <4CC3> -<4CC4> <4CC4> -<4CC5> <4CC5> -<4CC6> <4CC6> -<4CC7> <4CCD> -<4CCE> <4CCE> -<4CCF> <4CD3> -<4CD4> <4CD7> -<4CD8> <4CD8> -<4CD9> <4CDA> -<4CDB> <4CDE> -<4CDF> <4CE1> -<4CE2> <4CE5> -<4CE6> <4CE7> -<4CE8> <4CE9> -<4CEA> <4CEB> -<4CEC> <4CEC> -<4CED> <4CEE> -<4CEF> <4CF1> -<4CF2> <4CF6> -<4CF7> <4CFF> -<4D00> <4D00> -<4D01> <4D01> -<4D02> <4D02> -<4D03> <4D0D> -<4D0E> <4D10> -<4D11> <4D1C> -<4D1D> <4D2E> -<4D2F> <4D3A> -<4D3B> <4D3B> -<4D3C> <4D3C> -<4D3D> <4D46> -<4D47> <4D54> -<4D55> <4D55> -<4D56> <4D58> -<4D59> <4D59> -<4D5A> <4D5A> -<4D5B> <4D5E> -<4D5F> <4D64> -<4D65> <4D66> -<4D67> <4D67> -endbfrange - -100 beginbfrange -<4D68> <4D68> -<4D69> <4D69> -<4D6A> <4D6B> -<4D6C> <4D6C> -<4D6D> <4D6F> -<4D70> <4D85> -<4D86> <4D95> -<4D96> <4DA1> -<4DA2> <4DAC> -<4DAD> <4DAE> -<4DAF> <4DB6> -<4DB7> <4DB7> -<4DB8> <4DB8> -<4DB9> <4DBD> -<4DBE> <4DC4> -<4DC5> <4DC9> -<4DCA> <4DCA> -<4DCB> <4DCB> -<4DCC> <4DCC> -<4DCD> <4DCE> -<4DCF> <4DD7> -<4DD8> <4DD9> -<4DDA> <4DFA> -<4DFB> <4DFD> -<4DFE> <4DFF> -<4E00> <4E08> -<4E09> <4E11> -<4E12> <4E15> -<4E16> <4E16> -<4E17> <4E17> -<4E18> <4E19> -<4E1A> <4E1A> -<4E1B> <4E1B> -<4E1C> <4E1D> -<4E1E> <4E22> -<4E23> <4E23> -<4E24> <4E24> -<4E25> <4E25> -<4E26> <4E30> -<4E31> <4E31> -<4E32> <4E32> -<4E33> <4E37> -<4E38> <4E39> -<4E3A> <4E3C> -<4E3D> <4E3F> -<4E40> <4E40> -<4E41> <4E42> -<4E43> <4E4A> -<4E4B> <4E4E> -<4E4F> <4E4F> -<4E50> <4E55> -<4E56> <4E56> -<4E57> <4E58> -<4E59> <4E5A> -<4E5B> <4E5C> -<4E5D> <4E60> -<4E61> <4E62> -<4E63> <4E65> -<4E66> <4E68> -<4E69> <4E6B> -<4E6C> <4E6C> -<4E6D> <4E6E> -<4E6F> <4E70> -<4E71> <4E73> -<4E74> <4E76> -<4E77> <4E7B> -<4E7C> <4E84> -<4E85> <4E85> -<4E86> <4E88> -<4E89> <4E8A> -<4E8B> <4E8B> -<4E8C> <4E95> -<4E96> <4E96> -<4E97> <4E98> -<4E99> <4E99> -<4E9A> <4E9A> -<4E9B> <4E9B> -<4E9C> <4E9E> -<4E9F> <4EA0> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA3> <4EA5> -<4EA6> <4EAA> -<4EAB> <4EAB> -<4EAC> <4EAC> -<4EAD> <4EB0> -<4EB1> <4EB1> -<4EB2> <4EB2> -<4EB3> <4EB3> -<4EB4> <4EB6> -<4EB7> <4EB8> -<4EB9> <4EBA> -<4EBB> <4EC4> -<4EC5> <4EC5> -<4EC6> <4EC8> -<4EC9> <4EC9> -<4ECA> <4ECA> -<4ECB> <4ECC> -<4ECD> <4ED0> -<4ED1> <4ED1> -endbfrange - -100 beginbfrange -<4ED2> <4ED4> -<4ED5> <4ED8> -<4ED9> <4EDC> -<4EDD> <4EDD> -<4EDE> <4EE3> -<4EE4> <4EE4> -<4EE5> <4EE6> -<4EE7> <4EE8> -<4EE9> <4EEB> -<4EEC> <4EEC> -<4EED> <4EEF> -<4EF0> <4EF0> -<4EF1> <4EF2> -<4EF3> <4EF4> -<4EF5> <4EF6> -<4EF7> <4EF8> -<4EF9> <4EF9> -<4EFA> <4EFF> -<4F00> <4F00> -<4F01> <4F02> -<4F03> <4F04> -<4F05> <4F05> -<4F06> <4F06> -<4F07> <4F0C> -<4F0D> <4F0F> -<4F10> <4F11> -<4F12> <4F19> -<4F1A> <4F1C> -<4F1D> <4F1D> -<4F1E> <4F20> -<4F21> <4F24> -<4F25> <4F27> -<4F28> <4F2A> -<4F2B> <4F2D> -<4F2E> <4F2E> -<4F2F> <4F30> -<4F31> <4F32> -<4F33> <4F3C> -<4F3D> <4F3D> -<4F3E> <4F46> -<4F47> <4F48> -<4F49> <4F49> -<4F4A> <4F4A> -<4F4B> <4F4B> -<4F4C> <4F4C> -<4F4D> <4F4E> -<4F4F> <4F4F> -<4F50> <4F51> -<4F52> <4F57> -<4F58> <4F5A> -<4F5B> <4F5D> -<4F5E> <4F5F> -<4F60> <4F62> -<4F63> <4F66> -<4F67> <4F69> -<4F6A> <4F6A> -<4F6B> <4F6B> -<4F6C> <4F6E> -<4F6F> <4F7A> -<4F7B> <4F7B> -<4F7C> <4F7C> -<4F7D> <4F85> -<4F86> <4F8C> -<4F8D> <4F8E> -<4F8F> <4F90> -<4F91> <4F91> -<4F92> <4F94> -<4F95> <4F97> -<4F98> <4F99> -<4F9A> <4F9E> -<4F9F> <4FA3> -<4FA4> <4FA6> -<4FA7> <4FA7> -<4FA8> <4FA9> -<4FAA> <4FAA> -<4FAB> <4FAD> -<4FAE> <4FB1> -<4FB2> <4FB6> -<4FB7> <4FB7> -<4FB8> <4FBC> -<4FBD> <4FBD> -<4FBE> <4FC8> -<4FC9> <4FCA> -<4FCB> <4FCB> -<4FCC> <4FD1> -<4FD2> <4FD3> -<4FD4> <4FD4> -<4FD5> <4FD8> -<4FD9> <4FD9> -<4FDA> <4FDB> -<4FDC> <4FEC> -<4FED> <4FF8> -<4FF9> <4FFF> -<5000> <5000> -<5001> <5002> -<5003> <5004> -<5005> <5005> -<5006> <5006> -<5007> <5007> -<5008> <5008> -endbfrange - -100 beginbfrange -<5009> <500B> -<500C> <5013> -<5014> <5014> -<5015> <5016> -<5017> <5017> -<5018> <501B> -<501C> <501E> -<501F> <5020> -<5021> <5021> -<5022> <5024> -<5025> <5026> -<5027> <5027> -<5028> <5028> -<5029> <502B> -<502C> <502E> -<502F> <5033> -<5034> <5034> -<5035> <5036> -<5037> <5038> -<5039> <505D> -<505E> <5060> -<5061> <5062> -<5063> <5068> -<5069> <5069> -<506A> <506D> -<506E> <5076> -<5077> <5077> -<5078> <507A> -<507B> <507C> -<507D> <5086> -<5087> <5087> -<5088> <508C> -<508D> <508D> -<508E> <508F> -<5090> <5090> -<5091> <509A> -<509B> <509C> -<509D> <509D> -<509E> <50A1> -<50A2> <50A6> -<50A7> <50AB> -<50AC> <50AF> -<50B0> <50C5> -<50C6> <50CB> -<50CC> <50DA> -<50DB> <50DD> -<50DE> <50DE> -<50DF> <50E1> -<50E2> <50EE> -<50EF> <50F5> -<50F6> <50FD> -<50FE> <50FF> -<5100> <5113> -<5114> <511D> -<511E> <5123> -<5124> <5134> -<5135> <5139> -<513A> <513B> -<513C> <513D> -<513E> <513E> -<513F> <5144> -<5145> <5149> -<514A> <514B> -<514C> <514C> -<514D> <5151> -<5152> <5162> -<5163> <5163> -<5164> <5164> -<5165> <5165> -<5166> <5166> -<5167> <5167> -<5168> <516A> -<516B> <516D> -<516E> <5171> -<5172> <5173> -<5174> <5174> -<5175> <517A> -<517B> <517C> -<517D> <5182> -<5183> <5184> -<5185> <5185> -<5186> <518D> -<518E> <5192> -<5193> <5196> -<5197> <5199> -<519A> <519A> -<519B> <519C> -<519D> <519F> -<51A0> <51A1> -<51A2> <51A2> -<51A3> <51A5> -<51A6> <51A7> -<51A8> <51A8> -<51A9> <51AE> -<51AF> <51B3> -<51B4> <51B4> -<51B5> <51B5> -<51B6> <51B7> -<51B8> <51BC> -<51BD> <51C3> -endbfrange - -100 beginbfrange -<51C4> <51C4> -<51C5> <51C5> -<51C6> <51CF> -<51D0> <51D1> -<51D2> <51D2> -<51D3> <51D4> -<51D5> <51D6> -<51D7> <51D7> -<51D8> <51D8> -<51D9> <51DA> -<51DB> <51DB> -<51DC> <51E2> -<51E3> <51E6> -<51E7> <51E7> -<51E8> <51E9> -<51EA> <51EA> -<51EB> <51EB> -<51EC> <51ED> -<51EE> <51F1> -<51F2> <51F3> -<51F4> <51F5> -<51F6> <51F7> -<51F8> <51FD> -<51FE> <51FF> -<5200> <5206> -<5207> <5209> -<520A> <520D> -<520E> <520E> -<520F> <5211> -<5212> <5212> -<5213> <5214> -<5215> <5218> -<5219> <521A> -<521B> <521E> -<521F> <521F> -<5220> <5222> -<5223> <522C> -<522D> <523E> -<523F> <5240> -<5241> <5241> -<5242> <524D> -<524E> <525B> -<525C> <525C> -<525D> <525E> -<525F> <525F> -<5260> <5260> -<5261> <5261> -<5262> <5262> -<5263> <526C> -<526D> <526F> -<5270> <5277> -<5278> <527C> -<527D> <527D> -<527E> <5280> -<5281> <5287> -<5288> <528D> -<528E> <528F> -<5290> <52A0> -<52A1> <52A1> -<52A2> <52A2> -<52A3> <52A7> -<52A8> <52AC> -<52AD> <52AD> -<52AE> <52B1> -<52B2> <52B3> -<52B4> <52B4> -<52B5> <52B9> -<52BA> <52BA> -<52BB> <52BC> -<52BD> <52BF> -<52C0> <52C1> -<52C2> <52C2> -<52C3> <52C6> -<52C7> <52D6> -<52D7> <52E8> -<52E9> <52E9> -<52EA> <52EE> -<52EF> <52FA> -<52FB> <52FF> -<5300> <530D> -<530E> <5312> -<5313> <531C> -<531D> <5322> -<5323> <5323> -<5324> <5324> -<5325> <5325> -<5326> <5329> -<532A> <532A> -<532B> <533A> -<533B> <5340> -<5341> <5341> -<5342> <5355> -<5356> <5359> -<535A> <535B> -<535C> <535F> -<5360> <5364> -<5365> <5365> -<5366> <536F> -<5370> <5370> -<5371> <5377> -endbfrange - -100 beginbfrange -<5378> <5379> -<537A> <5384> -<5385> <5385> -<5386> <5391> -<5392> <5396> -<5397> <539B> -<539C> <539C> -<539D> <53A5> -<53A6> <53A6> -<53A7> <53AA> -<53AB> <53AB> -<53AC> <53AE> -<53AF> <53AF> -<53B0> <53B1> -<53B2> <53B2> -<53B3> <53B6> -<53B7> <53B9> -<53BA> <53C1> -<53C2> <53C2> -<53C3> <53CA> -<53CB> <53CD> -<53CE> <53CF> -<53D0> <53D0> -<53D1> <53D7> -<53D8> <53DC> -<53DD> <53DE> -<53DF> <53DF> -<53E0> <53E1> -<53E2> <53E4> -<53E5> <53E7> -<53E8> <53E8> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53ED> -<53EE> <53F3> -<53F4> <53F5> -<53F6> <53FD> -<53FE> <53FE> -<53FF> <53FF> -<5400> <5403> -<5404> <5404> -<5405> <540B> -<540C> <5410> -<5411> <541A> -<541B> <541B> -<541C> <543C> -<543D> <543E> -<543F> <5441> -<5442> <5443> -<5444> <5449> -<544A> <544A> -<544B> <5459> -<545A> <545A> -<545B> <5465> -<5466> <546A> -<546B> <546B> -<546C> <546C> -<546D> <546E> -<546F> <546F> -<5470> <5471> -<5472> <5472> -<5473> <5478> -<5479> <5482> -<5483> <5485> -<5486> <5487> -<5488> <5495> -<5496> <549D> -<549E> <549F> -<54A0> <54A7> -<54A8> <54A8> -<54A9> <54AA> -<54AB> <54AC> -<54AD> <54BB> -<54BC> <54C0> -<54C1> <54C1> -<54C2> <54CA> -<54CB> <54CE> -<54CF> <54CF> -<54D0> <54D7> -<54D8> <54D9> -<54DA> <54DC> -<54DD> <54E1> -<54E2> <54E5> -<54E6> <54EB> -<54EC> <54EE> -<54EF> <54EF> -<54F0> <54F0> -<54F1> <54FE> -<54FF> <54FF> -<5500> <5501> -<5502> <5502> -<5503> <5509> -<550A> <550C> -<550D> <5514> -<5515> <5516> -<5517> <551A> -<551B> <5522> -<5523> <552B> -<552C> <5533> -endbfrange - -43 beginbfrange -<5534> <5537> -<5538> <5538> -<5539> <5551> -<5552> <5554> -<5555> <5555> -<5556> <5556> -<5557> <5566> -<5567> <5571> -<5572> <5573> -<5574> <5574> -<5575> <5578> -<5579> <557C> -<557D> <558C> -<558D> <5594> -<5595> <5598> -<5599> <559E> -<559F> <559F> -<55A0> <55A1> -<55A2> <55A3> -<55A4> <55A9> -<55AA> <55AC> -<55AD> <55B2> -<55B3> <55C8> -<55C9> <55DA> -<55DB> <55DD> -<55DE> <55DE> -<55DF> <55E2> -<55E3> <55E4> -<55E5> <55E6> -<55E7> <55E7> -<55E8> <55E9> -<55EA> <55EC> -<55ED> <55ED> -<55EE> <55F2> -<55F3> <55F6> -<55F7> <55F7> -<55F8> <55FF> -<5600> <5601> -<5602> <5604> -<5605> <5607> -<5608> <560F> -<5610> <564D> -<564E> <566E> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-GB1-GBpc-EUC b/Resources/cmap/Adobe-GB1-GBpc-EUC deleted file mode 100644 index 0a218ec0fb9..00000000000 --- a/Resources/cmap/Adobe-GB1-GBpc-EUC +++ /dev/null @@ -1,197 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-GB1-GBpc-EUC) -%%Title: (Adobe-GB1-GBpc-EUC Adobe GBpc-EUC 2) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_GB1_GBpc_EUC) def -/Supplement 2 def -end def - -/CMapName /Adobe-GB1-GBpc-EUC def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -1 beginbfrange -<0000> <0000> <20> -endbfrange - -% Adobe-GB1-2 -% GBpc-EUC (Macintosh) -100 beginbfrange -<0001> <005F> <20> -<0060> <00BD> -<00BE> <00EF> -<00F0> <00F9> -<00FA> <00FF> -<0100> <0105> -<0106> <0163> -<0164> <01B6> -<01B7> <01FF> -<0200> <020C> -<020D> <0224> -<0225> <0259> -<025A> <027A> -<027B> <029B> -<029C> <02BB> -<02BC> <02E1> -<02E2> <02FF> -<0300> <032D> -<032E> <038B> -<038C> <03AB> -<03AC> <03FF> -<0400> <0409> -<040A> <0467> -<0468> <04C5> -<04C6> <04FF> -<0500> <0523> -<0524> <0581> -<0582> <05DF> -<05E0> <05FF> -<0600> <063D> -<063E> <069B> -<069C> <06F9> -<06FA> <06FF> -<0700> <0757> -<0758> <07B5> -<07B6> <07FF> -<0800> <0813> -<0814> <0871> -<0872> <08CF> -<08D0> <08FF> -<0900> <092D> -<092E> <098B> -<098C> <09E9> -<09EA> <09FF> -<0A00> <0A47> -<0A48> <0AA5> -<0AA6> <0AFF> -<0B00> <0B03> -<0B04> <0B61> -<0B62> <0BBF> -<0BC0> <0BFF> -<0C00> <0C1D> -<0C1E> <0C7B> -<0C7C> <0CD9> -<0CDA> <0CFF> -<0D00> <0D37> -<0D38> <0D95> -<0D96> <0DF3> -<0DF4> <0DFF> -<0E00> <0E51> -<0E52> <0EAF> -<0EB0> <0EFF> -<0F00> <0F0D> -<0F0E> <0F6B> -<0F6C> <0FC9> -<0FCA> <0FFF> -<1000> <1027> -<1028> <1085> -<1086> <10E3> -<10E4> <10FF> -<1100> <1141> -<1142> <119F> -<11A0> <11FD> -<11FE> <11FF> -<1200> <1256> -<1257> <12B4> -<12B5> <12FF> -<1300> <1312> -<1313> <1370> -<1371> <13CE> -<13CF> <13FF> -<1400> <142C> -<142D> <148A> -<148B> <14E8> -<14E9> <14FF> -<1500> <1546> -<1547> <15A4> -<15A5> <15FF> -<1600> <1602> -<1603> <1660> -<1661> <16BE> -<16BF> <16FF> -<1700> <171C> -<171D> <177A> -<177B> <17D8> -<17D9> <17FF> -<1800> <1836> -<1837> <1894> -<1895> <18F2> -<18F3> <18FF> -endbfrange -28 beginbfrange -<1900> <1950> -<1951> <19AE> -<19AF> <19FF> -<1A00> <1A0C> -<1A0D> <1A6A> -<1A6B> <1AC8> -<1AC9> <1AFF> -<1B00> <1B26> -<1B27> <1B84> -<1B85> <1BE2> -<1BE3> <1BFF> -<1C00> <1C40> -<1C41> <1C9E> -<1C9F> <1CFC> -<1CFD> <1CFF> -<1D00> <1D5A> -<1D5B> <1DB8> -<1DB9> <1DFF> -<1E00> <1E16> -<1E18> <1E19> -<1E1A> <1E1A> -<1E1B> <1E1B> -<1E1C> <1E1C> -<1E1D> <1E1D> -<1E1E> <1E1E> -<1E1F> <1E1F> -<1E20> <1E20> <80> -<1E21> <1E23> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-GB1-H-CID b/Resources/cmap/Adobe-GB1-H-CID deleted file mode 100644 index ddcea86c47d..00000000000 --- a/Resources/cmap/Adobe-GB1-H-CID +++ /dev/null @@ -1,94 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-GB1-H-CID) -%%Title: (Adobe-GB1-H-CID Adobe GB1 0) -%%Version: 2.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Adobe_GB1_H_CID) def - /Supplement 0 def -end def - -/CMapName /Adobe-GB1-H-CID def -/CMapVersion 2.000 def -/CMapType 1 def - -/UIDOffset 0 def - -/WMode 0 def - -1 begincodespacerange - <0000> -endcodespacerange - -0 usefont -1 begincidrange -<0000> 0 -endcidrange - -% Map CIDs 1 thru 95 to Ascii codes 0x20 - 0x7F in fontID 1. -1 usefont -1 beginbfrange -<0001> <005F> <20> -endbfrange - -% Map CIDs 7717 - 9896 to fontID 2 for Supplement 1 -2 usefont -4 begincidrange -<1E25> <1EFF> 7717 -<1F00> <1FFF> 7936 -<2000> <25FF> 8192 -<2600> <26A8> 9728 -endcidrange - -% Map CIDs 9897 - 22126 to fontID 3 for Supplement 2 -3 usefont -3 begincidrange -<26A9> <26FF> 9897 -<2700> <55FF> 9984 -<5600> <566E> 22016 -endcidrange - -% Map CIDs 22127 - 22352 to fontID 4 for Supplement 3 -% Also map CIDS upto 65535 to this fontID for any future supplements. -4 usefont -2 begincidrange -<566F> <56FF> 22127 -<5700> 22272 -endcidrange - - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-GB1-H-Host b/Resources/cmap/Adobe-GB1-H-Host deleted file mode 100644 index b4d60a235bf..00000000000 --- a/Resources/cmap/Adobe-GB1-H-Host +++ /dev/null @@ -1,4358 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-GB1-H-Host) -%%Title: (Adobe-GB1-H-Host Adobe GBK-EUC 2) -%%Version: 4.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_GB1_H_Host) def -/Supplement 2 def -end def - -/CMapName /Adobe-GB1-H-Host def - -/CMapVersion 4.000 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -4 usefont % Subset Fonts -1 begincidrange -<0000> 0 -endcidrange - -1 usefont % Prop Roman -1 beginbfrange -<0001> <005F> <20> -endbfrange - -2 usefont % Halfwidth Roman -3 beginbfrange -<032E> <0330> <21> -<0332> <038A> <25> -<1E24> <1E24> <20> -endbfrange - -0 usefont % Windows TrueType Font -100 beginbfrange -<0060> <00BD> -<00BE> <00EF> -<00F0> <00F9> -<00FA> <00FF> -<0100> <0105> -<0106> <0163> -<0164> <01B6> -<01B7> <01FF> -<0200> <020C> -<020D> <0224> -<0225> <023C> -<0259> <0259> -<025A> <027A> -<027B> <029B> -<029C> <02BB> -<02BC> <02E0> -<02E2> <02FF> -<0300> <032D> -<03AC> <03FF> -<0400> <0409> -<040A> <0467> -<0468> <04C5> -<04C6> <04FF> -<0500> <0523> -<0524> <0581> -<0582> <05DF> -<05E0> <05FF> -<0600> <063D> -<063E> <069B> -<069C> <06F9> -<06FA> <06FF> -<0700> <0757> -<0758> <07B5> -<07B6> <07FF> -<0800> <0813> -<0814> <0871> -<0872> <08CF> -<08D0> <08FF> -<0900> <092D> -<092E> <098B> -<098C> <09E9> -<09EA> <09FF> -<0A00> <0A47> -<0A48> <0AA5> -<0AA6> <0AFF> -<0B00> <0B03> -<0B04> <0B61> -<0B62> <0BBF> -<0BC0> <0BFF> -<0C00> <0C1D> -<0C1E> <0C7B> -<0C7C> <0CD9> -<0CDA> <0CFF> -<0D00> <0D37> -<0D38> <0D95> -<0D96> <0DF3> -<0DF4> <0DFF> -<0E00> <0E51> -<0E52> <0EAF> -<0EB0> <0EFF> -<0F00> <0F0D> -<0F0E> <0F6B> -<0F6C> <0FC9> -<0FCA> <0FFF> -<1000> <1027> -<1028> <1085> -<1086> <10E3> -<10E4> <10FF> -<1100> <1141> -<1142> <119F> -<11A0> <11FD> -<11FE> <11FF> -<1200> <1256> -<1257> <12B4> -<12B5> <12FF> -<1300> <1312> -<1313> <1370> -<1371> <13CE> -<13CF> <13FF> -<1400> <142C> -<142D> <148A> -<148B> <14E8> -<14E9> <14FF> -<1500> <1546> -<1547> <15A4> -<15A5> <15FF> -<1600> <1602> -<1603> <1660> -<1661> <16BE> -<16BF> <16FF> -<1700> <171C> -<171D> <177A> -<177B> <17D8> -<17D9> <17FF> -<1800> <1836> -<1837> <1894> -<1895> <18F2> -<18F3> <18FF> -<1900> <1950> -<1951> <19AE> -endbfrange - -100 beginbfrange -<19AF> <19FF> -<1A00> <1A0C> -<1A0D> <1A6A> -<1A6B> <1AC8> -<1AC9> <1AFF> -<1B00> <1B26> -<1B27> <1B84> -<1B85> <1BE2> -<1BE3> <1BFF> -<1C00> <1C40> -<1C41> <1C9E> -<1C9F> <1CFC> -<1CFD> <1CFF> -<1D00> <1D5A> -<1D5B> <1DB8> -<1DB9> <1DFF> -<1E00> <1E16> -<1E17> <1E17> -<1E25> <1E25> -<1E26> <1E26> -<1E27> <1E27> -<1E28> <1E28> <90DB> -<1E29> <1E29> -<1E2A> <1E2A> -<1E2B> <1E2B> <89CE> -<1E2C> <1E2C> -<1E2D> <1E2D> <945B> -<1E2E> <1E2E> <94A1> -<1E2F> <1E2F> -<1E30> <1E30> -<1E31> <1E31> -<1E32> <1E32> <8ECD> -<1E33> <1E33> -<1E34> <1E34> -<1E35> <1E35> -<1E36> <1E36> -<1E37> <1E37> <8C9A> -<1E38> <1E38> <88F3> -<1E39> <1E39> -<1E3A> <1E3A> -<1E3B> <1E3B> -<1E3C> <1E3C> -<1E3D> <1E3D> -<1E3E> <1E3E> <82E4> -<1E3F> <1E3F> <9176> -<1E40> <1E40> -<1E41> <1E41> -<1E42> <1E42> -<1E43> <1E43> <94C0> -<1E44> <1E44> <8EC5> -<1E45> <1E45> -<1E46> <1E46> -<1E47> <1E47> -<1E48> <1E48> -<1E49> <1E49> -<1E4A> <1E4A> -<1E4B> <1E4B> -<1E4C> <1E4C> <98CB> -<1E4D> <1E4D> -<1E4E> <1E4E> -<1E4F> <1E4F> <9E6C> -<1E50> <1E50> <9E49> -<1E51> <1E51> -<1E52> <1E52> <9450> -<1E53> <1E53> -<1E54> <1E54> <93DC> -<1E55> <1E55> -<1E56> <1E56> -<1E57> <1E57> -<1E58> <1E58> -<1E59> <1E59> -<1E5A> <1E5A> <85A2> -<1E5B> <1E5B> -<1E5C> <1E5C> <9A88> -<1E5D> <1E5D> <914D> -<1E5E> <1E5E> <914B> -<1E5F> <1E5F> -<1E60> <1E60> -<1E61> <1E61> -<1E62> <1E62> <827D> -<1E63> <1E63> <9CE6> -<1E64> <1E64> <858B> -<1E65> <1E65> <82C8> -<1E66> <1E66> <9C79> -<1E67> <1E67> <8CD3> -<1E68> <1E68> -<1E69> <1E69> <9476> -<1E6A> <1E6A> <93BD> -<1E6B> <1E6B> -<1E6C> <1E6C> -<1E6D> <1E6D> -<1E6E> <1E6E> -<1E6F> <1E6F> -<1E70> <1E70> -<1E71> <1E71> -<1E72> <1E72> -<1E73> <1E73> <88F6> -<1E74> <1E74> <874C> -<1E75> <1E75> -<1E76> <1E76> <8394> -endbfrange - -100 beginbfrange -<1E77> <1E77> -<1E78> <1E78> <8F53> -<1E79> <1E79> <95B3> -<1E7A> <1E7A> -<1E7B> <1E7B> -<1E7C> <1E7C> <8FD8> -<1E7D> <1E7D> <896D> -<1E7E> <1E7E> -<1E7F> <1E7F> -<1E80> <1E80> -<1E81> <1E81> <91CD> -<1E82> <1E82> -<1E83> <1E83> -<1E84> <1E84> -<1E85> <1E85> -<1E86> <1E86> -<1E87> <1E87> <9FEB> -<1E88> <1E88> -<1E89> <1E89> -<1E8A> <1E8A> <8C99> -<1E8B> <1E8B> -<1E8C> <1E8C> -<1E8D> <1E8D> -<1E8E> <1E8E> -<1E8F> <1E8F> -<1E90> <1E90> -<1E91> <1E91> -<1E92> <1E92> -<1E93> <1E93> <83A6> -<1E94> <1E94> -<1E95> <1E95> -<1E96> <1E96> <82F7> -<1E97> <1E97> -<1E98> <1E98> -<1E99> <1E99> <8493> -<1E9A> <1E9A> -<1E9B> <1E9B> -<1E9C> <1E9C> -<1E9D> <1E9D> -<1E9E> <1E9E> -<1E9F> <1E9F> -<1EA0> <1EA0> -<1EA1> <1EA1> <8FC4> -<1EA2> <1EA2> <85B2> -<1EA3> <1EA3> -<1EA4> <1EA4> -<1EA5> <1EA5> -<1EA6> <1EA6> -<1EA7> <1EA7> <8EA7> -<1EA8> <1EA8> -<1EA9> <1EA9> <93FA> -<1EAA> <1EAA> <86CE> -<1EAB> <1EAB> -<1EAC> <1EAC> <93DB> -<1EAD> <1EAD> -<1EAE> <1EAE> <9184> -<1EAF> <1EAF> -<1EB0> <1EB0> <8F97> -<1EB1> <1EB1> -<1EB2> <1EB2> <93F5> -<1EB3> <1EB3> -<1EB4> <1EB4> -<1EB5> <1EB5> <996E> -<1EB6> <1EB6> <9376> -<1EB7> <1EB7> <8D75> -<1EB8> <1EB8> -<1EB9> <1EB9> <8CA7> -<1EBA> <1EBA> <9FF4> -<1EBB> <1EBB> -<1EBC> <1EBC> <94B3> -<1EBD> <1EBD> <9CEC> -<1EBE> <1EBE> -<1EBF> <1EBF> -<1EC0> <1EC0> -<1EC1> <1EC1> -<1EC2> <1EC2> <897C> -<1EC3> <1EC3> -<1EC4> <1EC4> <9DD5> -<1EC5> <1EC5> -<1EC6> <1EC6> -<1EC7> <1EC7> -<1EC8> <1EC8> -<1EC9> <1EC9> -<1ECA> <1ECA> -<1ECB> <1ECB> -<1ECC> <1ECC> <967C> -<1ECD> <1ECD> <84D3> -<1ECE> <1ECE> <979D> -<1ECF> <1ECF> <83F6> -<1ED0> <1ED0> -<1ED1> <1ED1> -<1ED2> <1ED2> -<1ED3> <1ED3> -<1ED4> <1ED4> -<1ED5> <1ED5> -<1ED6> <1ED6> -<1ED7> <1ED7> <94E0> -<1ED8> <1ED8> -<1ED9> <1ED9> -<1EDA> <1EDA> <8CA6> -endbfrange - -100 beginbfrange -<1EDB> <1EDB> <878D> -<1EDC> <1EDC> -<1EDD> <1EDD> -<1EDE> <1EDE> <8A5A> -<1EDF> <1EDF> <8999> -<1EE0> <1EE0> -<1EE1> <1EE1> -<1EE2> <1EE2> -<1EE3> <1EE3> <90BA> -<1EE4> <1EE4> -<1EE5> <1EE5> <83BA> -<1EE6> <1EE6> -<1EE7> <1EE7> -<1EE8> <1EE8> -<1EE9> <1EE9> -<1EEA> <1EEA> -<1EEB> <1EEB> -<1EEC> <1EEC> -<1EED> <1EED> -<1EEE> <1EEE> <9FA9> -<1EEF> <1EEF> -<1EF0> <1EF0> -<1EF1> <1EF1> -<1EF2> <1EF2> -<1EF3> <1EF3> -<1EF4> <1EF4> -<1EF5> <1EF5> -<1EF6> <1EF6> <8F55> -<1EF7> <1EF7> -<1EF8> <1EF8> -<1EF9> <1EF9> <899E> -<1EFA> <1EFA> <8A5E> -<1EFB> <1EFB> <918D> -<1EFC> <1EFC> -<1EFD> <1EFD> -<1EFE> <1EFE> <97F7> -<1EFF> <1EFF> -<1F00> <1F00> -<1F01> <1F01> -<1F02> <1F02> -<1F03> <1F03> -<1F04> <1F04> -<1F05> <1F05> -<1F06> <1F06> -<1F07> <1F07> -<1F08> <1F08> <93E1> -<1F09> <1F09> -<1F0A> <1F0A> -<1F0B> <1F0B> <8FCD> -<1F0C> <1F0C> -<1F0D> <1F0D> -<1F0E> <1F0E> <8B44> -<1F0F> <1F0F> -<1F10> <1F10> -<1F11> <1F11> -<1F12> <1F12> -<1F13> <1F13> <8ED6> -<1F14> <1F14> -<1F15> <1F15> -<1F16> <1F16> <8CF9> -<1F17> <1F17> <8482> -<1F18> <1F18> -<1F19> <1F19> -<1F1A> <1F1A> <8D8F> -<1F1B> <1F1B> -<1F1C> <1F1C> <9452> -<1F1D> <1F1D> -<1F1E> <1F1E> -<1F1F> <1F1F> -<1F20> <1F20> <8280> -<1F21> <1F21> -<1F22> <1F22> -<1F23> <1F23> -<1F24> <1F24> -<1F25> <1F25> -<1F26> <1F26> <9CCF> -<1F27> <1F27> <988B> -<1F28> <1F28> -<1F29> <1F29> -<1F2A> <1F2A> -<1F2B> <1F2B> <848E> -<1F2C> <1F2C> -<1F2D> <1F2D> -<1F2E> <1F2E> -<1F2F> <1F2F> <9154> -<1F30> <1F30> -<1F31> <1F31> <8F56> -<1F32> <1F32> -<1F33> <1F33> <9A77> -<1F34> <1F34> -<1F35> <1F35> -<1F36> <1F36> -<1F37> <1F37> -<1F38> <1F38> <9999> -<1F39> <1F39> -<1F3A> <1F3A> <84A3> -<1F3B> <1F3B> -<1F3C> <1F3C> -<1F3D> <1F3D> <87F8> -<1F3E> <1F3E> -endbfrange - -100 beginbfrange -<1F3F> <1F3F> -<1F40> <1F40> -<1F41> <1F41> <9D68> -<1F42> <1F42> -<1F43> <1F43> -<1F44> <1F44> -<1F45> <1F45> -<1F46> <1F46> -<1F47> <1F47> -<1F48> <1F48> -<1F49> <1F49> <89D8> -<1F4A> <1F4A> -<1F4B> <1F4B> <9CFB> -<1F4C> <1F4C> <8757> -<1F4D> <1F4D> -<1F4E> <1F4E> -<1F4F> <1F4F> <849D> -<1F50> <1F50> -<1F51> <1F51> <91D1> -<1F52> <1F52> <89C4> -<1F53> <1F53> <9A67> -<1F54> <1F54> -<1F55> <1F55> -<1F56> <1F56> -<1F57> <1F57> -<1F58> <1F58> <935D> -<1F59> <1F59> -<1F5A> <1F5A> -<1F5B> <1F5B> -<1F5C> <1F5C> <95FE> -<1F5D> <1F5D> -<1F5E> <1F5E> <8552> -<1F5F> <1F5F> -<1F60> <1F60> -<1F61> <1F61> -<1F62> <1F62> -<1F63> <1F63> <9C86> -<1F64> <1F64> -<1F65> <1F65> -<1F66> <1F66> -<1F67> <1F67> <93F4> -<1F68> <1F68> <9943> -<1F69> <1F69> -<1F6A> <1F6A> -<1F6B> <1F6B> -<1F6C> <1F6C> -<1F6D> <1F6D> -<1F6E> <1F6E> -<1F6F> <1F6F> <984F> -<1F70> <1F70> -<1F71> <1F71> -<1F72> <1F72> <9444> -<1F73> <1F73> <8ED7> -<1F74> <1F74> -<1F75> <1F75> <84A9> -<1F76> <1F76> <9DFA> -<1F77> <1F77> -<1F78> <1F78> -<1F79> <1F79> -<1F7A> <1F7A> -<1F7B> <1F7B> -<1F7C> <1F7C> <8A41> -<1F7D> <1F7D> -<1F7E> <1F7E> -<1F7F> <1F7F> -<1F80> <1F80> -<1F81> <1F81> <8372> -<1F82> <1F82> -<1F83> <1F83> <9A9E> -<1F84> <1F84> -<1F85> <1F85> <88D4> -<1F86> <1F86> -<1F87> <1F87> -<1F88> <1F88> -<1F89> <1F89> -<1F8A> <1F8A> -<1F8B> <1F8B> <997A> -<1F8C> <1F8C> -<1F8D> <1F8D> <92FE> -<1F8E> <1F8E> <93EC> -<1F8F> <1F8F> -<1F90> <1F90> <8380> -<1F91> <1F91> -<1F92> <1F92> <9991> -<1F93> <1F93> -<1F94> <1F94> -<1F95> <1F95> -<1F96> <1F96> -<1F97> <1F97> -<1F98> <1F98> -<1F99> <1F99> <84A6> -<1F9A> <1F9A> -<1F9B> <1F9B> <9D75> -<1F9C> <1F9C> <9E52> -<1F9D> <1F9D> <9DBE> -<1F9E> <1F9E> <8CA2> -<1F9F> <1F9F> <9D7B> -<1FA0> <1FA0> -<1FA1> <1FA1> <98AA> -<1FA2> <1FA2> <8A5C> -endbfrange - -100 beginbfrange -<1FA3> <1FA3> -<1FA4> <1FA4> -<1FA5> <1FA5> -<1FA6> <1FA6> <9DB2> -<1FA7> <1FA7> -<1FA8> <1FA8> <8BC9> -<1FA9> <1FA9> <9487> -<1FAA> <1FAA> -<1FAB> <1FAB> -<1FAC> <1FAC> <8365> -<1FAD> <1FAD> -<1FAE> <1FAE> -<1FAF> <1FAF> -<1FB0> <1FB0> -<1FB1> <1FB1> -<1FB2> <1FB2> -<1FB3> <1FB3> -<1FB4> <1FB4> <9D8D> -<1FB5> <1FB5> -<1FB6> <1FB6> -<1FB7> <1FB7> -<1FB8> <1FB8> -<1FB9> <1FB9> <8348> -<1FBA> <1FBA> -<1FBB> <1FBB> -<1FBC> <1FBC> -<1FBD> <1FBD> -<1FBE> <1FBE> <84C5> -<1FBF> <1FBF> -<1FC0> <1FC0> -<1FC1> <1FC1> -<1FC2> <1FC2> -<1FC3> <1FC3> -<1FC4> <1FC4> -<1FC5> <1FC5> <8FBD> -<1FC6> <1FC6> -<1FC7> <1FC7> -<1FC8> <1FC8> -<1FC9> <1FC9> -<1FCA> <1FCA> -<1FCB> <1FCB> -<1FCC> <1FCC> <93FE> -<1FCD> <1FCD> -<1FCE> <1FCE> <91D6> -<1FCF> <1FCF> <84A1> -<1FD0> <1FD0> -<1FD1> <1FD1> -<1FD2> <1FD2> -<1FD3> <1FD3> -<1FD4> <1FD4> -<1FD5> <1FD5> -<1FD6> <1FD6> -<1FD7> <1FD7> -<1FD8> <1FD8> -<1FD9> <1FD9> <8450> -<1FDA> <1FDA> -<1FDB> <1FDB> <9AA3> -<1FDC> <1FDC> -<1FDD> <1FDD> <89A8> -<1FDE> <1FDE> <91A9> -<1FDF> <1FDF> <93B8> -<1FE0> <1FE0> <8EEC> -<1FE1> <1FE1> -<1FE2> <1FE2> -<1FE3> <1FE3> <894B> -<1FE4> <1FE4> <837E> -<1FE5> <1FE5> <8C92> -<1FE6> <1FE6> -<1FE7> <1FE7> <95E7> -<1FE8> <1FE8> -<1FE9> <1FE9> <8E68> -<1FEA> <1FEA> -<1FEB> <1FEB> -<1FEC> <1FEC> <9DA2> -<1FED> <1FED> <9455> -<1FEE> <1FEE> -<1FEF> <1FEF> -<1FF0> <1FF0> -<1FF1> <1FF1> -<1FF2> <1FF2> <81ED> -<1FF3> <1FF3> -<1FF4> <1FF4> -<1FF5> <1FF5> <99DA> -<1FF6> <1FF6> <9472> -<1FF7> <1FF7> -<1FF8> <1FF8> -<1FF9> <1FF9> -<1FFA> <1FFA> <9E91> -<1FFB> <1FFB> -<1FFC> <1FFC> <9488> -<1FFD> <1FFD> -<1FFE> <1FFE> <91D0> -<1FFF> <1FFF> -<2000> <2000> -<2001> <2001> <9E45> -<2002> <2002> <93C6> -<2003> <2003> <84DA> -<2004> <2004> <9DB3> -<2005> <2005> <98B7> -<2006> <2006> -endbfrange - -100 beginbfrange -<2007> <2007> <89BE> -<2008> <2008> -<2009> <2009> -<200A> <200A> -<200B> <200B> <9EA6> -<200C> <200C> -<200D> <200D> -<200E> <200E> -<200F> <200F> -<2010> <2010> <8596> -<2011> <2011> <84EE> -<2012> <2012> -<2013> <2013> <9A76> -<2014> <2014> <9E72> -<2015> <2015> -<2016> <2016> <827A> -<2017> <2017> -<2018> <2018> -<2019> <2019> -<201A> <201A> -<201B> <201B> <917A> -<201C> <201C> <9D69> -<201D> <201D> -<201E> <201E> <94BF> -<201F> <201F> -<2020> <2020> -<2021> <2021> <91D9> -<2022> <2022> <9F92> -<2023> <2023> -<2024> <2024> -<2025> <2025> <83C9> -<2026> <2026> -<2027> <2027> -<2028> <2028> -<2029> <2029> -<202A> <202A> -<202B> <202B> -<202C> <202C> -<202D> <202D> -<202E> <202E> -<202F> <202F> -<2030> <2030> -<2031> <2031> -<2032> <2032> -<2033> <2033> <8E58> -<2034> <2034> -<2035> <2035> -<2036> <2036> <84A2> -<2037> <2037> -<2038> <2038> -<2039> <2039> <87B5> -<203A> <203A> -<203B> <203B> <89C5> -<203C> <203C> <946E> -<203D> <203D> -<203E> <203E> <98C7> -<203F> <203F> <8AE4> -<2040> <2040> <93A7> -<2041> <2041> -<2042> <2042> -<2043> <2043> -<2044> <2044> -<2045> <2045> <8F5D> -<2046> <2046> -<2047> <2047> <93EF> -<2048> <2048> <9D46> -<2049> <2049> -<204A> <204A> -<204B> <204B> -<204C> <204C> -<204D> <204D> -<204E> <204E> -<204F> <204F> -<2050> <2050> <8CD2> -<2051> <2051> -<2052> <2052> <915D> -<2053> <2053> <9E56> -<2054> <2054> -<2055> <2055> <8E6E> -<2056> <2056> <9481> -<2057> <2057> <8C5C> -<2058> <2058> <9EB4> -<2059> <2059> <8179> -<205A> <205A> <92E0> -<205B> <205B> -<205C> <205C> <8290> -<205D> <205D> <81F6> -<205E> <205E> <9C53> -<205F> <205F> -<2060> <2060> -<2061> <2061> -<2062> <2062> -<2063> <2063> -<2064> <2064> -<2065> <2065> -<2066> <2066> -<2067> <2067> -<2068> <2068> -<2069> <2069> <8B8C> -<206A> <206A> -endbfrange - -100 beginbfrange -<206B> <206B> -<206C> <206C> -<206D> <206D> -<206E> <206E> -<206F> <206F> <86E1> -<2070> <2070> -<2071> <2071> -<2072> <2072> -<2073> <2073> -<2074> <2074> -<2075> <2075> -<2076> <2076> -<2077> <2077> <9D4D> -<2078> <2078> -<2079> <2079> -<207A> <207A> -<207B> <207B> -<207C> <207C> -<207D> <207D> -<207E> <207E> <909E> -<207F> <207F> <8283> -<2080> <2080> -<2081> <2081> <89F4> -<2082> <2082> -<2083> <2083> <8F9B> -<2084> <2084> -<2085> <2085> -<2086> <2086> -<2087> <2087> <8F52> -<2088> <2088> <9CE7> -<2089> <2089> <9191> -<208A> <208A> -<208B> <208B> -<208C> <208C> -<208D> <208D> -<208E> <208E> -<208F> <208F> -<2090> <2090> -<2091> <2091> -<2092> <2092> -<2093> <2093> <93CF> -<2094> <2094> -<2095> <2095> <90C0> -<2096> <2096> -<2097> <2097> -<2098> <2098> <944D> -<2099> <2099> -<209A> <209A> <9466> -<209B> <209B> -<209C> <209C> -<209D> <209D> -<209E> <209E> <87A7> -<209F> <209F> -<20A0> <20A0> -<20A1> <20A1> <998E> -<20A2> <20A2> -<20A3> <20A3> <8C8E> -<20A4> <20A4> <9451> -<20A5> <20A5> <9DF4> -<20A6> <20A6> -<20A7> <20A7> -<20A8> <20A8> -<20A9> <20A9> <9DE2> -<20AA> <20AA> -<20AB> <20AB> -<20AC> <20AC> -<20AD> <20AD> <9A57> -<20AE> <20AE> -<20AF> <20AF> <9AAA> -<20B0> <20B0> <8749> -<20B1> <20B1> <9D61> -<20B2> <20B2> -<20B3> <20B3> -<20B4> <20B4> -<20B5> <20B5> <878A> -<20B6> <20B6> -<20B7> <20B7> -<20B8> <20B8> -<20B9> <20B9> -<20BA> <20BA> -<20BB> <20BB> -<20BC> <20BC> <917B> -<20BD> <20BD> -<20BE> <20BE> <9D8A> -<20BF> <20BF> -<20C0> <20C0> <93E4> -<20C1> <20C1> -<20C2> <20C2> <8357> -<20C3> <20C3> <98E3> -<20C4> <20C4> -<20C5> <20C5> -<20C6> <20C6> -<20C7> <20C7> -<20C8> <20C8> -<20C9> <20C9> <8699> -<20CA> <20CA> <9AE2> -<20CB> <20CB> -<20CC> <20CC> -<20CD> <20CD> -<20CE> <20CE> -endbfrange - -100 beginbfrange -<20CF> <20CF> -<20D0> <20D0> -<20D1> <20D1> -<20D2> <20D2> -<20D3> <20D3> -<20D4> <20D4> <9C5C> -<20D5> <20D5> -<20D6> <20D6> <8971> -<20D7> <20D7> <988C> -<20D8> <20D8> <86DC> -<20D9> <20D9> <89A6> -<20DA> <20DA> -<20DB> <20DB> <938C> -<20DC> <20DC> -<20DD> <20DD> <98F2> -<20DE> <20DE> <86CC> -<20DF> <20DF> <8353> -<20E0> <20E0> -<20E1> <20E1> -<20E2> <20E2> -<20E3> <20E3> <9A4A> -<20E4> <20E4> -<20E5> <20E5> <8C8B> -<20E6> <20E6> -<20E7> <20E7> <9AE4> -<20E8> <20E8> <8341> -<20E9> <20E9> -<20EA> <20EA> -<20EB> <20EB> <9163> -<20EC> <20EC> -<20ED> <20ED> -<20EE> <20EE> -<20EF> <20EF> <855E> -<20F0> <20F0> -<20F1> <20F1> -<20F2> <20F2> -<20F3> <20F3> -<20F4> <20F4> <99E0> -<20F5> <20F5> <84F1> -<20F6> <20F6> -<20F7> <20F7> -<20F8> <20F8> -<20F9> <20F9> -<20FA> <20FA> <945F> -<20FB> <20FB> -<20FC> <20FC> <9FE1> -<20FD> <20FD> -<20FE> <20FE> -<20FF> <20FF> -<2100> <2100> <9873> -<2101> <2101> -<2102> <2102> -<2103> <2103> -<2104> <2104> -<2105> <2105> <9D99> -<2106> <2106> <9EA2> -<2107> <2107> -<2108> <2108> -<2109> <2109> -<210A> <210A> <82E3> -<210B> <210B> <86CA> -<210C> <210C> -<210D> <210D> <92DF> -<210E> <210E> <9DAD> -<210F> <210F> <9AA2> -<2110> <2110> -<2111> <2111> -<2112> <2112> <95F1> -<2113> <2113> -<2114> <2114> -<2115> <2115> -<2116> <2116> -<2117> <2117> <82FB> -<2118> <2118> -<2119> <2119> <9FFD> -<211A> <211A> -<211B> <211B> -<211C> <211C> <92CE> -<211D> <211D> <947A> -<211E> <211E> <91D8> -<211F> <211F> -<2120> <2120> -<2121> <2121> <8C8F> -<2122> <2122> <8BF0> -<2123> <2123> -<2124> <2124> <9D42> -<2125> <2125> -<2126> <2126> -<2127> <2127> <84D9> -<2128> <2128> -<2129> <2129> <8E9F> -<212A> <212A> -<212B> <212B> <9DF1> -<212C> <212C> -<212D> <212D> <9572> -<212E> <212E> -<212F> <212F> <8C8D> -<2130> <2130> -<2131> <2131> -<2132> <2132> <84DD> -endbfrange - -100 beginbfrange -<2133> <2133> -<2134> <2134> -<2135> <2135> -<2136> <2136> -<2137> <2137> -<2138> <2138> <89DB> -<2139> <2139> -<213A> <213A> <98D0> -<213B> <213B> -<213C> <213C> <95F8> -<213D> <213D> -<213E> <213E> <8CD9> -<213F> <213F> -<2140> <2140> <98E4> -<2141> <2141> -<2142> <2142> <94B5> -<2143> <2143> <8E9B> -<2144> <2144> -<2145> <2145> -<2146> <2146> -<2147> <2147> -<2148> <2148> -<2149> <2149> -<214A> <214A> -<214B> <214B> -<214C> <214C> -<214D> <214D> -<214E> <214E> <915A> -<214F> <214F> -<2150> <2150> -<2151> <2151> -<2152> <2152> <945C> -<2153> <2153> -<2154> <2154> -<2155> <2155> -<2156> <2156> -<2157> <2157> -<2158> <2158> -<2159> <2159> <9A71> -<215A> <215A> <8C4F> -<215B> <215B> <9370> -<215C> <215C> -<215D> <215D> -<215E> <215E> -<215F> <215F> -<2160> <2160> <93E9> -<2161> <2161> -<2162> <2162> <9142> -<2163> <2163> <9482> -<2164> <2164> -<2165> <2165> -<2166> <2166> <9EA9> -<2167> <2167> <89AF> -<2168> <2168> -<2169> <2169> -<216A> <216A> <8740> -<216B> <216B> <9CAB> -<216C> <216C> -<216D> <216D> <9DFD> -<216E> <216E> -<216F> <216F> -<2170> <2170> -<2171> <2171> -<2172> <2172> -<2173> <2173> -<2174> <2174> -<2175> <2175> <976C> -<2176> <2176> -<2177> <2177> -<2178> <2178> <8F64> -<2179> <2179> -<217A> <217A> <9F4E> -<217B> <217B> -<217C> <217C> -<217D> <217D> -<217E> <217E> <8844> -<217F> <217F> <8954> -<2180> <2180> <8846> -<2181> <2181> -<2182> <2182> -<2183> <2183> -<2184> <2184> -<2185> <2185> <9945> -<2186> <2186> -<2187> <2187> -<2188> <2188> <8F9D> -<2189> <2189> <9EB3> -<218A> <218A> -<218B> <218B> -<218C> <218C> -<218D> <218D> -<218E> <218E> -<218F> <218F> <87FA> -<2190> <2190> -<2191> <2191> <9E48> -<2192> <2192> -<2193> <2193> -<2194> <2194> <82A5> -<2195> <2195> <835E> -<2196> <2196> -endbfrange - -100 beginbfrange -<2197> <2197> -<2198> <2198> -<2199> <2199> -<219A> <219A> -<219B> <219B> -<219C> <219C> <8696> -<219D> <219D> <93EB> -<219E> <219E> -<219F> <219F> <9C75> -<21A0> <21A0> -<21A1> <21A1> <86E8> -<21A2> <21A2> -<21A3> <21A3> <9EF5> -<21A4> <21A4> -<21A5> <21A5> <9F6F> -<21A6> <21A6> -<21A7> <21A7> <895D> -<21A8> <21A8> -<21A9> <21A9> <84D5> -<21AA> <21AA> -<21AB> <21AB> -<21AC> <21AC> -<21AD> <21AD> -<21AE> <21AE> -<21AF> <21AF> -<21B0> <21B0> <91F2> -<21B1> <21B1> -<21B2> <21B2> -<21B3> <21B3> -<21B4> <21B4> <8D7B> -<21B5> <21B5> <8262> -<21B6> <21B6> -<21B7> <21B7> <8798> -<21B8> <21B8> -<21B9> <21B9> -<21BA> <21BA> -<21BB> <21BB> -<21BC> <21BC> -<21BD> <21BD> -<21BE> <21BE> -<21BF> <21BF> -<21C0> <21C0> -<21C1> <21C1> -<21C2> <21C2> -<21C3> <21C3> -<21C4> <21C4> <9197> -<21C5> <21C5> -<21C6> <21C6> -<21C7> <21C7> -<21C8> <21C8> -<21C9> <21C9> -<21CA> <21CA> -<21CB> <21CB> -<21CC> <21CC> <87CC> -<21CD> <21CD> -<21CE> <21CE> <95D4> -<21CF> <21CF> <875B> -<21D0> <21D0> <8566> -<21D1> <21D1> <92B6> -<21D2> <21D2> -<21D3> <21D3> -<21D4> <21D4> <8C91> -<21D5> <21D5> <9E61> -<21D6> <21D6> -<21D7> <21D7> -<21D8> <21D8> -<21D9> <21D9> -<21DA> <21DA> -<21DB> <21DB> -<21DC> <21DC> -<21DD> <21DD> -<21DE> <21DE> -<21DF> <21DF> -<21E0> <21E0> -<21E1> <21E1> <91D2> -<21E2> <21E2> -<21E3> <21E3> -<21E4> <21E4> -<21E5> <21E5> <8C57> -<21E6> <21E6> <84D7> -<21E7> <21E7> -<21E8> <21E8> <8CA4> -<21E9> <21E9> -<21EA> <21EA> -<21EB> <21EB> -<21EC> <21EC> -<21ED> <21ED> <89BA> -<21EE> <21EE> -<21EF> <21EF> -<21F0> <21F0> <86A1> -<21F1> <21F1> <8186> -<21F2> <21F2> -<21F3> <21F3> -<21F4> <21F4> -<21F5> <21F5> <87C0> -<21F6> <21F6> -<21F7> <21F7> -<21F8> <21F8> -<21F9> <21F9> <8592> -<21FA> <21FA> -endbfrange - -100 beginbfrange -<21FB> <21FB> -<21FC> <21FC> -<21FD> <21FD> -<21FE> <21FE> <97EE> -<21FF> <21FF> <9350> -<2200> <2200> -<2201> <2201> -<2202> <2202> -<2203> <2203> -<2204> <2204> <98D3> -<2205> <2205> <88F2> -<2206> <2206> -<2207> <2207> -<2208> <2208> -<2209> <2209> -<220A> <220A> <9849> -<220B> <220B> -<220C> <220C> -<220D> <220D> -<220E> <220E> -<220F> <220F> -<2210> <2210> <8378> -<2211> <2211> -<2212> <2212> -<2213> <2213> <837C> -<2214> <2214> <919B> -<2215> <2215> -<2216> <2216> -<2217> <2217> -<2218> <2218> -<2219> <2219> -<221A> <221A> -<221B> <221B> -<221C> <221C> -<221D> <221D> -<221E> <221E> -<221F> <221F> -<2220> <2220> <99D1> -<2221> <2221> <8BEB> -<2222> <2222> -<2223> <2223> <91AA> -<2224> <2224> -<2225> <2225> -<2226> <2226> -<2227> <2227> -<2228> <2228> <9FC9> -<2229> <2229> -<222A> <222A> -<222B> <222B> -<222C> <222C> <86D1> -<222D> <222D> <93ED> -<222E> <222E> <82F2> -<222F> <222F> -<2230> <2230> -<2231> <2231> <839E> -<2232> <2232> <916E> -<2233> <2233> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<2237> <2237> -<2238> <2238> -<2239> <2239> -<223A> <223A> <9D4F> -<223B> <223B> -<223C> <223C> <8E5A> -<223D> <223D> -<223E> <223E> -<223F> <223F> -<2240> <2240> -<2241> <2241> -<2242> <2242> -<2243> <2243> -<2244> <2244> <9C59> -<2245> <2245> -<2246> <2246> <8840> -<2247> <2247> <8654> -<2248> <2248> <8841> -<2249> <2249> -<224A> <224A> -<224B> <224B> -<224C> <224C> -<224D> <224D> -<224E> <224E> -<224F> <224F> -<2250> <2250> -<2251> <2251> -<2252> <2252> -<2253> <2253> -<2254> <2254> -<2255> <2255> -<2256> <2256> <959E> -<2257> <2257> -<2258> <2258> -<2259> <2259> <9480> -<225A> <225A> <95BA> -<225B> <225B> -<225C> <225C> -<225D> <225D> -<225E> <225E> -endbfrange - -100 beginbfrange -<225F> <225F> <9797> -<2260> <2260> -<2261> <2261> -<2262> <2262> <93F1> -<2263> <2263> <8474> -<2264> <2264> <9DC9> -<2265> <2265> -<2266> <2266> -<2267> <2267> -<2268> <2268> -<2269> <2269> -<226A> <226A> -<226B> <226B> -<226C> <226C> <82F9> -<226D> <226D> <9AD6> -<226E> <226E> -<226F> <226F> <94D8> -<2270> <2270> -<2271> <2271> <8DE4> -<2272> <2272> <97A3> -<2273> <2273> <91F0> -<2274> <2274> -<2275> <2275> <8F88> -<2276> <2276> <9D71> -<2277> <2277> <8EA4> -<2278> <2278> -<2279> <2279> -<227A> <227A> -<227B> <227B> -<227C> <227C> -<227D> <227D> -<227E> <227E> -<227F> <227F> -<2280> <2280> -<2281> <2281> <82C9> -<2282> <2282> -<2283> <2283> -<2284> <2284> -<2285> <2285> <8EAC> -<2286> <2286> -<2287> <2287> -<2288> <2288> -<2289> <2289> -<228A> <228A> -<228B> <228B> <88CC> -<228C> <228C> -<228D> <228D> -<228E> <228E> <93B4> -<228F> <228F> <9453> -<2290> <2290> <8EC3> -<2291> <2291> -<2292> <2292> <9CFE> -<2293> <2293> -<2294> <2294> -<2295> <2295> -<2296> <2296> -<2297> <2297> -<2298> <2298> -<2299> <2299> -<229A> <229A> -<229B> <229B> <9583> -<229C> <229C> -<229D> <229D> -<229E> <229E> -<229F> <229F> -<22A0> <22A0> -<22A1> <22A1> <87DA> -<22A2> <22A2> -<22A3> <22A3> -<22A4> <22A4> -<22A5> <22A5> -<22A6> <22A6> <8CA3> -<22A7> <22A7> -<22A8> <22A8> -<22A9> <22A9> -<22AA> <22AA> <98B6> -<22AB> <22AB> -<22AC> <22AC> -<22AD> <22AD> <8A79> -<22AE> <22AE> <89D1> -<22AF> <22AF> -<22B0> <22B0> -<22B1> <22B1> -<22B2> <22B2> <898B> -<22B3> <22B3> -<22B4> <22B4> -<22B5> <22B5> <9CCA> -<22B6> <22B6> <9DE1> -<22B7> <22B7> -<22B8> <22B8> <9D6E> -<22B9> <22B9> -<22BA> <22BA> -<22BB> <22BB> -<22BC> <22BC> -<22BD> <22BD> -<22BE> <22BE> -<22BF> <22BF> -<22C0> <22C0> <86DD> -<22C1> <22C1> <8587> -<22C2> <22C2> <8598> -endbfrange - -100 beginbfrange -<22C3> <22C3> -<22C4> <22C4> -<22C5> <22C5> <8551> -<22C6> <22C6> <8554> -<22C7> <22C7> -<22C8> <22C8> <8471> -<22C9> <22C9> <84A5> -<22CA> <22CA> <8492> -<22CB> <22CB> <82F8> -<22CC> <22CC> <8274> -<22CD> <22CD> <82E1> -<22CE> <22CE> <838A> -<22CF> <22CF> <837A> -<22D0> <22D0> <8389> -<22D1> <22D1> <83B0> -<22D2> <22D2> <83AB> -<22D3> <22D3> <8366> -<22D4> <22D4> <8345> -<22D5> <22D5> <83AF> -<22D6> <22D6> <8386> -<22D7> <22D7> <83AE> -<22D8> <22D8> <834C> -<22D9> <22D9> -<22DA> <22DA> -<22DB> <22DB> <87CF> -<22DC> <22DC> -<22DD> <22DD> -<22DE> <22DE> -<22DF> <22DF> -<22E0> <22E0> -<22E1> <22E1> -<22E2> <22E2> -<22E3> <22E3> -<22E4> <22E4> -<22E5> <22E5> -<22E6> <22E6> -<22E7> <22E7> -<22E8> <22E8> -<22E9> <22E9> -<22EA> <22EA> -<22EB> <22EB> -<22EC> <22EC> -<22ED> <22ED> -<22EE> <22EE> -<22EF> <22EF> -<22F0> <22F0> -<22F1> <22F1> -<22F2> <22F2> -<22F3> <22F3> -<22F4> <22F4> -<22F5> <22F5> -<22F6> <22F6> -<22F7> <22F7> -<22F8> <22F8> -<22F9> <22FA> -<22FB> <22FB> -<22FC> <22FC> -<22FD> <22FD> -<22FE> <22FE> -<22FF> <22FF> -<2300> <2300> -<2301> <2301> -<2302> <2302> -<2303> <2303> -<2304> <2304> -<2305> <2305> -<2306> <2306> -<2307> <2307> -<2308> <2308> -<2309> <2309> -<230A> <230A> -<230B> <230B> -<230C> <230C> -<230D> <230D> -<230E> <230E> -<230F> <230F> -<2310> <2310> -<2311> <2311> -<2312> <2312> -<2313> <2313> -<2314> <2314> -<2315> <2315> -<2316> <2316> -<2317> <2317> -<2318> <2318> -<2319> <2319> -<231A> <231A> -<231B> <231B> -<231C> <231C> -<231D> <231D> -<231E> <231E> -<231F> <231F> -<2320> <2320> -<2321> <2321> -<2322> <2322> -<2323> <2323> <84EA> -<2324> <2324> <8E80> -<2325> <2325> <88D7> -<2326> <2326> <89BF> -<2327> <2327> <89C8> -endbfrange - -100 beginbfrange -<2328> <2328> <89C6> -<2329> <2329> <89C0> -<232A> <232A> <88BA> -<232B> <232B> <894E> -<232C> <232C> <88DF> -<232D> <232D> <8950> -<232E> <232E> <88E5> -<232F> <232F> <895F> -<2330> <2330> -<2331> <2331> -<2332> <2332> -<2333> <2333> -<2334> <2334> -<2335> <2335> -<2336> <2336> -<2337> <2337> -<2338> <2338> -<2339> <2339> <894C> -<233A> <233A> <9FA6> -<233B> <233B> -<233C> <233C> -<233D> <233D> -<233E> <233E> -<233F> <233F> -<2340> <2340> -<2341> <2341> <9CEE> -<2342> <2342> -<2343> <2343> -<2344> <2344> -<2345> <2345> -<2346> <2346> -<2347> <2347> -<2348> <2348> -<2349> <2349> -<234A> <234A> -<234B> <234B> -<234C> <234C> -<234D> <234D> -<234E> <234E> -<234F> <234F> -<2350> <2350> -<2351> <2351> -<2352> <2352> -<2353> <2353> -<2354> <2354> -<2355> <2355> -<2356> <2356> -<2357> <2357> -<2358> <2358> -<2359> <2359> -<235A> <235A> -<235B> <235B> <8A59> -<235C> <235C> <8CC0> -<235D> <235D> <92D0> -<235E> <235E> <93BB> -<235F> <235F> <93D7> -<2360> <2360> <939D> -<2361> <2361> <93A5> -<2362> <2362> <93E5> -<2363> <2363> <9464> -<2364> <2364> <9474> -<2365> <2365> <9458> -<2366> <2366> <945D> -<2367> <2367> <9478> -<2368> <2368> <875C> -<2369> <2369> <8760> -<236A> <236A> <87D2> -<236B> <236B> <87B3> -<236C> <236C> <8668> -<236D> <236D> <864A> -<236E> <236E> <8793> -<236F> <236F> <877A> -<2370> <2370> <877D> -<2371> <2371> <875E> -<2372> <2372> <86F4> -<2373> <2373> <8782> -<2374> <2374> <8788> -<2375> <2375> <879D> -<2376> <2376> <8781> -<2377> <2377> <874F> -<2378> <2378> <875A> -<2379> <2379> <86EE> -<237A> <237A> <874B> -<237B> <237B> <87CA> -<237C> <237C> <8744> -<237D> <237D> <87BF> -<237E> <237E> <87CB> -<237F> <237F> <8786> -<2380> <2380> -<2381> <2381> <87C2> -<2382> <2382> <87A3> -<2383> <2383> <87F7> -<2384> <2384> <8EAE> -<2385> <2385> <8ECE> -<2386> <2386> <8EBE> -<2387> <2387> <8EBD> -<2388> <2388> <8DE7> -<2389> <2389> <8D73> -<238A> <238A> <8DB9> -<238B> <238B> <8D9E> -endbfrange - -100 beginbfrange -<238C> <238C> <8E46> -<238D> <238D> <8DFE> -<238E> <238E> <8DF7> -<238F> <238F> <8D88> -<2390> <2390> <8E56> -<2391> <2391> <8DE2> -<2392> <2392> <8E70> -<2393> <2393> <8FC6> -<2394> <2394> -<2395> <2395> -<2396> <2396> -<2397> <2397> -<2398> <2398> -<2399> <2399> -<239A> <239A> -<239B> <239B> -<239C> <239C> -<239D> <239D> -<239E> <239E> -<239F> <23A0> -<23A1> <23A1> -<23A2> <23A2> -<23A3> <23A3> -<23A4> <23A4> -<23A5> <23A5> -<23A6> <23A6> -<23A7> <23A7> -<23A8> <23A8> -<23A9> <23AA> -<23AB> <23AB> -<23AC> <23AC> -<23AD> <23AD> -<23AE> <23AE> <8F54> -<23AF> <23AF> -<23B0> <23B0> <91D4> -<23B1> <23B1> <9193> -<23B2> <23B2> <9159> -<23B3> <23B3> <90F7> -<23B4> <23B4> <909D> -<23B5> <23B5> <90ED> -<23B6> <23B6> <91AB> -<23B7> <23B7> <9151> -<23B8> <23B8> <91C3> -<23B9> <23B9> <90C5> -<23BA> <23BA> <90F0> -<23BB> <23BB> <90C1> -<23BC> <23BC> <9161> -<23BD> <23BD> <90DC> -<23BE> <23BE> <917C> -<23BF> <23BF> -<23C0> <23C0> -<23C1> <23C1> -<23C2> <23C2> -<23C3> <23C3> -<23C4> <23C4> -<23C5> <23C5> -<23C6> <23C6> -<23C7> <23C7> -<23C8> <23C8> -<23C9> <23C9> -<23CA> <23CA> -<23CB> <23CB> -<23CC> <23CC> -<23CD> <23CD> -<23CE> <23CE> -<23CF> <23CF> -<23D0> <23D0> -<23D1> <23D1> -<23D2> <23D2> -<23D3> <23D3> -<23D4> <23D4> -<23D5> <23D5> -<23D6> <23D6> <9E96> -<23D7> <23D7> <9D91> -<23D8> <23D8> <9E7B> -<23D9> <23D9> <9E6F> -<23DA> <23DA> <9E54> -<23DB> <23DB> <9BDC> -<23DC> <23DC> <9BD1> -<23DD> <23DD> <9C9D> -<23DE> <23DE> <9DD2> -<23DF> <23DF> <9E67> -<23E0> <23E0> <9D47> -<23E1> <23E1> <9DA1> -<23E2> <23E2> <9C5A> -<23E3> <23E3> <9DAC> -<23E4> <23E4> <9E5E> -<23E5> <23E5> <9DC6> -<23E6> <23E6> <9E63> -<23E7> <23E7> <9EB7> -<23E8> <23E8> <9E97> -<23E9> <23E9> <9E5D> -<23EA> <23EA> <9DA7> -<23EB> <23EB> <9E75> -<23EC> <23EC> <9E74> -<23ED> <23ED> <9E87> -<23EE> <23EE> <9E7C> -<23EF> <23EF> <9EAE> -<23F0> <23F0> -<23F1> <23F1> -endbfrange - -100 beginbfrange -<23F2> <23F2> -<23F3> <23F3> -<23F4> <23F4> <8CD5> -<23F5> <23F5> <8F86> -<23F6> <23F6> <8BB3> -<23F7> <23F7> <8B9E> -<23F8> <23F8> <8BBE> -<23F9> <23F9> <8B49> -<23FA> <23FA> <8BC6> -<23FB> <23FB> <8C44> -<23FC> <23FC> <8B7A> -<23FD> <23FD> <8BB9> -<23FE> <23FE> <8BC8> -<23FF> <23FF> <8BDC> -<2400> <2400> <8BE5> -<2401> <2401> <8BD4> -<2402> <2402> -<2403> <2403> -<2404> <2404> -<2405> <2405> -<2406> <2406> -<2407> <2407> -<2408> <2408> -<2409> <2409> -<240A> <240A> -<240B> <240B> -<240C> <240C> -<240D> <240D> -<240E> <240E> -<240F> <240F> -<2410> <2410> -<2411> <2411> -<2412> <2412> -<2413> <2413> -<2414> <2414> -<2415> <2415> -<2416> <2417> -<2418> <2418> -<2419> <2419> -<241A> <241A> -<241B> <241B> -<241C> <241C> -<241D> <241D> -<241E> <241F> -<2420> <2420> -<2421> <2421> -<2422> <2422> -<2423> <2423> -<2424> <2424> -<2425> <2425> -<2426> <2426> -<2427> <2427> -<2428> <2428> -<2429> <2429> -<242A> <242A> -<242B> <242B> -<242C> <242C> -<242D> <242D> -<242E> <242E> -<242F> <242F> -<2430> <2430> -<2431> <2431> -<2432> <2432> -<2433> <2433> -<2434> <2434> -<2435> <2435> -<2436> <2436> -<2437> <2437> -<2438> <2438> -<2439> <2439> -<243A> <243A> -<243B> <243B> -<243C> <243C> -<243D> <243D> -<243E> <243E> -<243F> <243F> -<2440> <2440> -<2441> <2441> -<2442> <2442> -<2443> <2443> -<2444> <2444> -<2445> <2445> -<2446> <2446> -<2447> <2447> -<2448> <2448> -<2449> <2449> -<244A> <244A> -<244B> <244B> -<244C> <244C> -<244D> <244D> -<244E> <244E> -<244F> <244F> -<2450> <2450> -<2451> <2451> -<2452> <2452> -<2453> <2453> -<2454> <2454> -<2455> <2455> -<2456> <2456> -<2457> <2457> -endbfrange - -100 beginbfrange -<2458> <2458> -<2459> <2459> -<245A> <245A> -<245B> <245B> -<245C> <245C> -<245D> <245D> -<245E> <245E> -<245F> <245F> -<2460> <2460> -<2461> <2461> -<2462> <2462> -<2463> <2463> -<2464> <2464> -<2465> <2465> -<2466> <2466> -<2467> <2467> -<2468> <2468> <9871> -<2469> <2469> <99C0> -<246A> <246A> <9767> -<246B> <246B> <9796> -<246C> <246C> <98BA> -<246D> <246D> <976E> -<246E> <246E> <99B1> -<246F> <246F> <99C9> -<2470> <2470> <99BE> -<2471> <2471> <99B5> -<2472> <2472> <9966> -<2473> <2473> <97BF> -<2474> <2474> <98EF> -<2475> <2475> <9845> -<2476> <2476> <9881> -<2477> <2477> <98E5> -<2478> <2478> <9975> -<2479> <2479> <99E8> -<247A> <247A> <99F4> -<247B> <247B> <99B3> -<247C> <247C> <98A0> -<247D> <247D> <99E5> -<247E> <247E> <99EC> -<247F> <247F> <99C2> -<2480> <2480> <99B0> -<2481> <2481> <99CE> -<2482> <2482> <9989> -<2483> <2483> <99BD> -<2484> <2484> <997B> -<2485> <2485> <99A9> -<2486> <2486> <99B4> -<2487> <2487> <9A91> -<2488> <2488> <9A8C> -<2489> <2489> <9A9A> -<248A> <248A> <9A97> -<248B> <248B> <9A9B> -<248C> <248C> -<248D> <248D> -<248E> <248E> -<248F> <248F> -<2490> <2490> -<2491> <2491> -<2492> <2492> -<2493> <2493> -<2494> <2494> -<2495> <2495> -<2496> <2496> -<2497> <2497> -<2498> <2498> -<2499> <2499> -<249A> <249A> -<249B> <249B> -<249C> <249C> -<249D> <249E> -<249F> <249F> -<24A0> <24A0> -<24A1> <24A1> -<24A2> <24A2> -<24A3> <24A3> <91E2> -<24A4> <24A4> <91EA> -<24A5> <24A5> -<24A6> <24A6> <95D2> -<24A7> <24A7> <95CF> -<24A8> <24A8> <959F> -<24A9> <24A9> <95E1> -<24AA> <24AA> -<24AB> <24AB> -<24AC> <24AC> -<24AD> <24AD> -<24AE> <24AE> -<24AF> <24AF> -<24B0> <24B0> -<24B1> <24B1> -<24B2> <24B2> -<24B3> <24B3> -<24B4> <24B4> -<24B5> <24B5> -<24B6> <24B6> -<24B7> <24B7> -<24B8> <24B8> -<24B9> <24B9> -<24BA> <24BA> -<24BB> <24BB> -<24BC> <24BC> -endbfrange - -100 beginbfrange -<24BD> <24BD> -<24BE> <24BE> -<24BF> <24BF> -<24C0> <24C0> <9AD0> -<24C1> <24C1> <9ADA> -<24C2> <24C2> <9AE5> -<24C3> <24C3> -<24C4> <24C4> <9656> -<24C5> <24C5> -<24C6> <24C6> -<24C7> <24C7> -<24C8> <24C8> -<24C9> <24C9> -<24CA> <24CA> -<24CB> <24CB> <9A65> -<24CC> <24CD> -<24CE> <24CE> -<24CF> <24CF> -<24D0> <24D0> -<24D1> <24D1> -<24D2> <24D2> -<24D3> <24D3> -<24D4> <24D4> <94CC> -<24D5> <24D5> <9FAC> -<24D6> <24D6> <9F98> -<24D7> <24D7> <9FCD> -<24D8> <24D8> <9FEE> -<24D9> <24D9> -<24DA> <24DA> -<24DB> <24DB> -<24DC> <24DC> -<24DD> <24DD> -<24DE> <24DE> <91BB> -<24DF> <24DF> <9155> -<24E0> <24E0> <91BF> -<24E1> <24E1> <91DF> -<24E2> <24E2> <9DCD> -<24E3> <24E3> -<24E4> <24E4> -<24E5> <24E5> -<24E6> <24E6> -<24E7> <24E7> -<24E8> <24E8> -<24E9> <24E9> -<24EA> <24EA> -<24EB> <24EB> -<24EC> <24EC> -<24ED> <24ED> -<24EE> <24EE> -<24EF> <24EF> -<24F0> <24F0> -<24F1> <24F1> -<24F2> <24F2> -<24F3> <24F5> -<24F6> <24F6> -<24F7> <24F7> -<24F8> <24F8> -<24F9> <24F9> -<24FA> <24FA> -<24FB> <24FB> -<24FC> <24FC> -<24FD> <24FD> -<24FE> <24FE> -<24FF> <24FF> -<2500> <2500> -<2501> <2501> -<2502> <2502> -<2503> <2503> -<2504> <2504> -<2505> <2505> -<2506> <2506> -<2507> <2507> -<2508> <2508> -<2509> <2509> -<250A> <250A> -<250B> <250B> -<250C> <250C> -<250D> <250D> -<250E> <250E> -<250F> <250F> -<2510> <2510> -<2511> <2512> -<2513> <2513> -<2514> <2514> -<2515> <2515> -<2516> <2516> -<2517> <2517> -<2518> <2518> -<2519> <2519> -<251A> <251A> -<251B> <251B> -<251C> <251C> -<251D> <251D> -<251E> <251E> -<251F> <251F> -<2520> <2520> -<2521> <2521> -<2522> <2522> -<2523> <2523> -<2524> <2524> -endbfrange - -100 beginbfrange -<2525> <2525> -<2526> <2526> -<2527> <2527> -<2528> <2528> -<2529> <2529> -<252A> <252A> -<252B> <252B> -<252C> <252C> -<252D> <252D> -<252E> <252E> -<252F> <252F> -<2530> <2530> -<2531> <2531> -<2532> <2532> -<2533> <2533> -<2534> <2534> -<2535> <2535> -<2536> <2536> -<2537> <2537> -<2538> <2538> -<2539> <2539> -<253A> <253A> -<253B> <253B> -<253C> <253C> -<253D> <253D> -<253E> <253E> -<253F> <253F> -<2540> <2540> -<2541> <2542> -<2543> <2543> -<2544> <2544> -<2545> <2545> -<2546> <2546> -<2547> <2547> -<2548> <2548> -<2549> <2549> -<254A> <254A> -<254B> <254B> -<254C> <254C> -<254D> <254D> -<254E> <254E> -<254F> <2550> -<2551> <2551> -<2552> <2552> -<2553> <2553> -<2554> <2554> -<2555> <2555> -<2556> <2556> -<2557> <2557> -<2558> <2558> -<2559> <2559> -<255A> <255A> -<255B> <255B> -<255C> <255C> -<255D> <255D> -<255E> <255E> -<255F> <255F> -<2560> <2560> -<2561> <2561> -<2562> <2562> -<2563> <2563> -<2564> <2564> -<2565> <2565> -<2566> <2566> -<2567> <2567> -<2568> <2569> -<256A> <256A> -<256B> <256B> -<256C> <256C> -<256D> <256D> -<256E> <256E> -<256F> <256F> -<2570> <2570> -<2571> <2571> -<2572> <2572> -<2573> <2573> -<2574> <2574> -<2575> <2575> -<2576> <2576> -<2577> <2577> -<2578> <2578> -<2579> <2579> -<257A> <257A> -<257B> <257B> -<257C> <257C> -<257D> <257D> -<257E> <257E> -<257F> <257F> -<2580> <2580> -<2581> <2581> -<2582> <2582> -<2583> <2583> -<2584> <2584> -<2585> <2585> -<2586> <2586> -<2587> <2587> -<2588> <2588> -<2589> <2589> -<258A> <258A> -<258B> <258B> -endbfrange - -100 beginbfrange -<258C> <258C> -<258D> <258D> -<258E> <258E> -<258F> <258F> -<2590> <2590> -<2591> <2591> -<2592> <2592> -<2593> <2593> -<2594> <2594> -<2595> <2595> -<2596> <2596> -<2597> <2597> -<2598> <2598> -<2599> <2599> -<259A> <259A> -<259B> <259B> -<259C> <259C> -<259D> <259D> -<259E> <259E> -<259F> <259F> -<25A0> <25A0> -<25A1> <25A1> -<25A2> <25A2> -<25A3> <25A3> -<25A4> <25A4> -<25A5> <25A5> -<25A6> <25A6> -<25A7> <25A7> -<25A8> <25A8> -<25A9> <25A9> -<25AA> <25AA> -<25AB> <25AB> -<25AC> <25AC> -<25AD> <25AD> -<25AE> <25AE> -<25AF> <25B0> -<25B1> <25B1> -<25B2> <25B2> -<25B3> <25B3> -<25B4> <25B5> -<25B6> <25B6> -<25B7> <25B7> -<25B8> <25B8> -<25B9> <25B9> -<25BA> <25BA> -<25BB> <25BB> -<25BC> <25BC> -<25BD> <25BD> -<25BE> <25BE> -<25BF> <25BF> -<25C0> <25C0> -<25C1> <25C1> -<25C2> <25C2> -<25C3> <25C3> -<25C4> <25C4> -<25C5> <25C5> -<25C6> <25C6> -<25C7> <25C7> -<25C8> <25C8> -<25C9> <25C9> -<25CA> <25CA> <9D7D> -<25CB> <25CB> -<25CC> <25CC> -<25CD> <25CD> -<25CE> <25CE> -<25CF> <25CF> -<25D0> <25D0> -<25D1> <25D1> -<25D2> <25D2> -<25D3> <25D3> -<25D4> <25D4> -<25D5> <25D5> -<25D6> <25D6> -<25D7> <25D7> -<25D8> <25D8> -<25D9> <25D9> -<25DA> <25DA> -<25DB> <25DB> -<25DC> <25DC> -<25DD> <25DD> -<25DE> <25DE> -<25DF> <25DF> -<25E0> <25E0> -<25E1> <25E1> -<25E2> <25E2> -<25E3> <25E3> -<25E4> <25E4> -<25E5> <25E5> -<25E6> <25E6> -<25E7> <25E7> -<25E8> <25E8> -<25E9> <25E9> -<25EA> <25EA> -<25EB> <25EB> -<25EC> <25EC> -<25ED> <25ED> -<25EE> <25EE> -<25EF> <25EF> -<25F0> <25F0> -<25F1> <25F1> -endbfrange - -100 beginbfrange -<25F2> <25F2> -<25F3> <25F3> -<25F4> <25F4> -<25F5> <25F5> -<25F6> <25F6> -<25F7> <25F7> -<25F8> <25F8> -<25F9> <25F9> -<25FA> <25FA> -<25FB> <25FB> -<25FC> <25FC> -<25FD> <25FD> -<25FE> <25FE> -<25FF> <25FF> -<2600> <2600> -<2601> <2601> -<2602> <2602> -<2603> <2603> -<2604> <2604> -<2605> <2605> -<2606> <2606> -<2607> <2607> -<2608> <2608> -<2609> <2609> -<260A> <260A> -<260B> <260B> -<260C> <260C> -<260D> <260D> -<260E> <260E> -<260F> <260F> -<2610> <2610> -<2611> <2611> -<2612> <2612> -<2613> <2613> -<2614> <2614> -<2615> <2615> -<2616> <2616> -<2617> <2617> -<2618> <2619> -<261A> <261A> -<261B> <261B> -<261C> <261C> -<261D> <261D> -<261E> <261E> -<261F> <261F> -<2620> <2620> -<2621> <2621> -<2622> <2622> -<2623> <2623> -<2624> <2624> -<2625> <2625> -<2626> <2626> -<2627> <2627> -<2628> <2628> -<2629> <2629> -<262A> <262A> -<262B> <262B> -<262C> <262C> -<262D> <262D> -<262E> <262E> -<262F> <262F> -<2630> <2630> -<2631> <2631> -<2632> <2632> -<2633> <2633> -<2634> <2634> -<2635> <2635> -<2636> <2636> -<2637> <2637> -<2638> <2638> -<2639> <2639> -<263A> <263A> -<263B> <263C> -<263D> <263D> -<263E> <263E> -<263F> <263F> -<2640> <2640> -<2641> <2641> -<2642> <2642> -<2643> <2643> -<2644> <2644> -<2645> <2645> -<2646> <2646> -<2647> <2647> -<2648> <2648> -<2649> <2649> -<264A> <264A> -<264B> <264B> -<264C> <264C> -<264D> <264D> -<264E> <264E> -<264F> <264F> -<2650> <2650> -<2651> <2651> -<2652> <2652> -<2653> <2653> -<2654> <2654> -<2655> <2655> -<2656> <2656> -<2657> <2657> -endbfrange - -100 beginbfrange -<2658> <2658> -<2659> <2659> -<265A> <265A> -<265B> <265B> -<265C> <265C> -<265D> <265D> -<265E> <265E> -<265F> <265F> -<2660> <2660> -<2661> <2661> -<2662> <2662> -<2663> <2663> -<2664> <2664> -<2665> <2665> -<2666> <2666> -<2667> <2667> -<2668> <2668> -<2669> <2669> -<266A> <266A> -<266B> <266B> -<266C> <266C> -<266D> <266D> -<266E> <266E> <8F95> -<266F> <266F> -<2670> <2670> -<2671> <2671> -<2672> <2672> <878E> -<2673> <2673> -<2674> <2674> <8766> -<2675> <2675> -<2676> <2676> -<2677> <2677> -<2678> <2678> -<2679> <2679> -<267A> <267A> -<267B> <267B> -<267C> <267C> <8FA1> -<267D> <267D> -<267E> <267E> -<267F> <267F> <82ED> -<2680> <2680> -<2681> <2681> <838D> -<2682> <2682> <92D4> -<2683> <2683> <8477> -<2684> <2684> -<2685> <2685> -<2686> <2686> <95D1> -<2687> <2687> -<2688> <2688> -<2689> <2689> <87D3> -<268A> <268A> -<268B> <268B> <9DF7> -<268C> <268C> <91BA> -<268D> <268D> -<268E> <268E> <9E85> -<268F> <268F> -<2690> <2690> -<2691> <2691> -<2692> <2692> -<2693> <2693> -<2694> <2694> -<2695> <2695> -<2696> <2696> -<2697> <2697> <87D5> -<2698> <2698> -<2699> <2699> <9985> -<269A> <269A> -<269B> <269B> -<269C> <269C> <8253> -<269D> <269D> -<269E> <269E> -<269F> <269F> <87BB> -<26A0> <26A0> -<26A1> <26A1> -<26A2> <26A2> -<26A3> <26A3> -<26A4> <26A4> -<26A5> <26A5> -<26A6> <26A6> -<26A7> <26A7> -<26A8> <26A8> -<26A9> <26B2> -<26B3> <26F1> -<26F2> <26FF> -<2700> <2707> -<2708> <271F> -<2720> <2721> -<2722> <2722> -<2723> <2741> -<2742> <2757> -<2758> <2790> <8140> -<2791> <2795> <817A> -<2796> <279B> <8180> -<279C> <27FF> <8187> -<2800> <2801> <81EB> -<2802> <2809> <81EE> -<280A> <2811> <81F7> -<2812> <2824> <8240> -<2825> <2832> <8254> -<2833> <2843> <8263> -endbfrange - -100 beginbfrange -<2844> <2848> <8275> -<2849> <284A> <827B> -<284B> <284B> <827E> -<284C> <284D> <8281> -<284E> <2859> <8284> -<285A> <286D> <8291> -<286E> <288F> <82A6> -<2890> <28A6> <82CA> -<28A7> <28A7> <82E2> -<28A8> <28AF> <82E5> -<28B0> <28B3> <82EE> -<28B4> <28B7> <82F3> -<28B8> <28B8> <82FA> -<28B9> <28BB> <82FC> -<28BC> <28BC> <8340> -<28BD> <28BF> <8342> -<28C0> <28C1> <8346> -<28C2> <28C4> <8349> -<28C5> <28CA> <834D> -<28CB> <28CD> <8354> -<28CE> <28D3> <8358> -<28D4> <28D9> <835F> -<28DA> <28E4> <8367> -<28E5> <28E9> <8373> -<28EA> <28EA> <8379> -<28EB> <28EB> <837B> -<28EC> <28EC> <837D> -<28ED> <28F1> <8381> -<28F2> <28F3> <8387> -<28F4> <28F5> <838B> -<28F6> <28FB> <838E> -<28FC> <28FF> <8395> -<2900> <2904> <8399> -<2905> <290B> <839F> -<290C> <290F> <83A7> -<2910> <2911> <83AC> -<2912> <291A> <83B1> -<291B> <2928> <83BB> -<2929> <2954> <83CA> -<2955> <295C> <83F7> -<295D> <296C> <8440> -<296D> <298C> <8451> -<298D> <298E> <8472> -<298F> <2990> <8475> -<2991> <2997> <8478> -<2998> <2999> <8480> -<299A> <29A4> <8483> -<29A5> <29A7> <848F> -<29A8> <29B0> <8494> -<29B1> <29B3> <849E> -<29B4> <29B4> <84A4> -<29B5> <29B6> <84A7> -<29B7> <29D1> <84AA> -<29D2> <29DE> <84C6> -<29DF> <29DF> <84D4> -<29E0> <29E0> <84D6> -<29E1> <29E1> <84D8> -<29E2> <29E3> <84DB> -<29E4> <29EF> <84DE> -<29F0> <29F2> <84EB> -<29F3> <29F4> <84EF> -<29F5> <29FF> <84F2> -<2A00> <2A01> <84FD> -<2A02> <2A12> <8540> -<2A13> <2A13> <8553> -<2A14> <2A1C> <8555> -<2A1D> <2A23> <855F> -<2A24> <2A3B> <8567> -<2A3C> <2A42> <8580> -<2A43> <2A45> <8588> -<2A46> <2A4B> <858C> -<2A4C> <2A4E> <8593> -<2A4F> <2A4F> <8597> -<2A50> <2A58> <8599> -<2A59> <2A67> <85A3> -<2A68> <2AB3> <85B3> -<2AB4> <2ABD> <8640> -<2ABE> <2AC6> <864B> -<2AC7> <2AD9> <8655> -<2ADA> <2AEF> <8669> -<2AF0> <2AFF> <8680> -<2B00> <2B05> <8690> -<2B06> <2B07> <8697> -<2B08> <2B0E> <869A> -<2B0F> <2B36> <86A2> -<2B37> <2B37> <86CB> -<2B38> <2B38> <86CD> -<2B39> <2B3A> <86CF> -<2B3B> <2B44> <86D2> -<2B45> <2B47> <86DE> -<2B48> <2B4D> <86E2> -<2B4E> <2B52> <86E9> -<2B53> <2B57> <86EF> -<2B58> <2B61> <86F5> -<2B62> <2B64> <8741> -<2B65> <2B68> <8745> -<2B69> <2B69> <874A> -<2B6A> <2B6B> <874D> -<2B6C> <2B72> <8750> -<2B73> <2B74> <8758> -endbfrange - -100 beginbfrange -<2B75> <2B75> <875D> -<2B76> <2B76> <875F> -<2B77> <2B7B> <8761> -<2B7C> <2B8E> <8767> -<2B8F> <2B90> <877B> -<2B91> <2B91> <877E> -<2B92> <2B92> <8780> -<2B93> <2B95> <8783> -<2B96> <2B96> <8787> -<2B97> <2B97> <8789> -<2B98> <2B99> <878B> -<2B9A> <2B9D> <878F> -<2B9E> <2BA1> <8794> -<2BA2> <2BA5> <8799> -<2BA6> <2BAA> <879E> -<2BAB> <2BAD> <87A4> -<2BAE> <2BB8> <87A8> -<2BB9> <2BB9> <87B4> -<2BBA> <2BBE> <87B6> -<2BBF> <2BC1> <87BC> -<2BC2> <2BC2> <87C1> -<2BC3> <2BC9> <87C3> -<2BCA> <2BCB> <87CD> -<2BCC> <2BCD> <87D0> -<2BCE> <2BCE> <87D4> -<2BCF> <2BD2> <87D6> -<2BD3> <2BEE> <87DB> -<2BEF> <2BEF> <87F9> -<2BF0> <2BF3> <87FB> -<2BF4> <2BF5> <8842> -<2BF6> <2BF6> <8845> -<2BF7> <2BFF> <8847> -<2C00> <2C2E> <8850> -<2C2F> <2C68> <8880> -<2C69> <2C79> <88BB> -<2C7A> <2C80> <88CD> -<2C81> <2C82> <88D5> -<2C83> <2C89> <88D8> -<2C8A> <2C8E> <88E0> -<2C8F> <2C9A> <88E6> -<2C9B> <2C9C> <88F4> -<2C9D> <2CA4> <88F7> -<2CA5> <2CAF> <8940> -<2CB0> <2CB0> <894D> -<2CB1> <2CB1> <894F> -<2CB2> <2CB4> <8951> -<2CB5> <2CBC> <8955> -<2CBD> <2CBD> <895E> -<2CBE> <2CCA> <8960> -<2CCB> <2CCD> <896E> -<2CCE> <2CD7> <8972> -<2CD8> <2CD9> <897D> -<2CDA> <2CE4> <8980> -<2CE5> <2CF1> <898C> -<2CF2> <2CF5> <899A> -<2CF6> <2CFC> <899F> -<2CFD> <2CFD> <89A7> -<2CFE> <2CFF> <89A9> -<2D00> <2D03> <89AB> -<2D04> <2D0D> <89B0> -<2D0E> <2D10> <89BB> -<2D11> <2D13> <89C1> -<2D14> <2D14> <89C7> -<2D15> <2D19> <89C9> -<2D1A> <2D1B> <89CF> -<2D1C> <2D21> <89D2> -<2D22> <2D23> <89D9> -<2D24> <2D3B> <89DC> -<2D3C> <2D45> <89F5> -<2D46> <2D46> <8A40> -<2D47> <2D5D> <8A42> -<2D5E> <2D5E> <8A5B> -<2D5F> <2D5F> <8A5D> -<2D60> <2D79> <8A5F> -<2D7A> <2D7E> <8A7A> -<2D7F> <2DE2> <8A80> -<2DE3> <2DFC> <8AE5> -<2DFD> <2DFF> <8B40> -<2E00> <2E00> <8B43> -<2E01> <2E04> <8B45> -<2E05> <2E34> <8B4A> -<2E35> <2E38> <8B7B> -<2E39> <2E44> <8B80> -<2E45> <2E55> <8B8D> -<2E56> <2E69> <8B9F> -<2E6A> <2E6E> <8BB4> -<2E6F> <2E72> <8BBA> -<2E73> <2E79> <8BBF> -<2E7A> <2E7A> <8BC7> -<2E7B> <2E84> <8BCA> -<2E85> <2E8B> <8BD5> -<2E8C> <2E93> <8BDD> -<2E94> <2E98> <8BE6> -<2E99> <2E9C> <8BEC> -<2E9D> <2EAA> <8BF1> -<2EAB> <2EAE> <8C40> -<2EAF> <2EB8> <8C45> -<2EB9> <2EBF> <8C50> -<2EC0> <2EC3> <8C58> -<2EC4> <2EE5> <8C5D> -endbfrange - -100 beginbfrange -<2EE6> <2EF0> <8C80> -<2EF1> <2EF1> <8C8C> -<2EF2> <2EF2> <8C90> -<2EF3> <2EF8> <8C93> -<2EF9> <2EFF> <8C9B> -<2F00> <2F00> <8CA5> -<2F01> <2F18> <8CA8> -<2F19> <2F29> <8CC1> -<2F2A> <2F2A> <8CD4> -<2F2B> <2F2D> <8CD6> -<2F2E> <2F4C> <8CDA> -<2F4D> <2F51> <8CFA> -<2F52> <2F84> <8D40> -<2F85> <2F85> <8D74> -<2F86> <2F8A> <8D76> -<2F8B> <2F8D> <8D7C> -<2F8E> <2F95> <8D80> -<2F96> <2F9B> <8D89> -<2F9C> <2FA9> <8D90> -<2FAA> <2FC3> <8D9F> -<2FC4> <2FEB> <8DBA> -<2FEC> <2FEC> <8DE3> -<2FED> <2FEE> <8DE5> -<2FEF> <2FFD> <8DE8> -<2FFE> <2FFF> <8DF8> -<3000> <3003> <8DFA> -<3004> <3009> <8E40> -<300A> <3018> <8E47> -<3019> <3019> <8E57> -<301A> <301A> <8E59> -<301B> <3027> <8E5B> -<3028> <302C> <8E69> -<302D> <302D> <8E6F> -<302E> <303B> <8E71> -<303C> <3055> <8E81> -<3056> <3058> <8E9C> -<3059> <305C> <8EA0> -<305D> <305E> <8EA5> -<305F> <3062> <8EA8> -<3063> <3063> <8EAD> -<3064> <3071> <8EAF> -<3072> <3075> <8EBF> -<3076> <3076> <8EC4> -<3077> <307D> <8EC6> -<307E> <3084> <8ECF> -<3085> <3098> <8ED8> -<3099> <30AA> <8EED> -<30AB> <30BC> <8F40> -<30BD> <30C2> <8F57> -<30C3> <30C8> <8F5E> -<30C9> <30E2> <8F65> -<30E3> <30E8> <8F80> -<30E9> <30E9> <8F87> -<30EA> <30F5> <8F89> -<30F6> <30F6> <8F96> -<30F7> <30F9> <8F98> -<30FA> <30FA> <8F9C> -<30FB> <30FD> <8F9E> -<30FE> <30FF> <8FA2> -<3100> <3118> <8FA4> -<3119> <311E> <8FBE> -<311F> <311F> <8FC5> -<3120> <3125> <8FC7> -<3126> <312F> <8FCE> -<3130> <3155> <8FD9> -<3156> <3194> <9040> -<3195> <31B1> <9080> -<31B2> <31CC> <909F> -<31CD> <31D1> <90BB> -<31D2> <31D4> <90C2> -<31D5> <31E9> <90C6> -<31EA> <31F9> <90DD> -<31FA> <31FB> <90EE> -<31FC> <31FF> <90F1> -<3200> <3201> <90F5> -<3202> <3208> <90F8> -<3209> <320A> <9140> -<320B> <3212> <9143> -<3213> <3213> <914C> -<3214> <3216> <914E> -<3217> <3218> <9152> -<3219> <321B> <9156> -<321C> <321D> <915B> -<321E> <3220> <915E> -<3221> <3221> <9162> -<3222> <322B> <9164> -<322C> <3232> <916F> -<3233> <3235> <9177> -<3236> <3237> <917D> -<3238> <323B> <9180> -<323C> <3243> <9185> -<3244> <3246> <918E> -<3247> <3247> <9192> -<3248> <324A> <9194> -<324B> <324D> <9198> -<324E> <325A> <919C> -<325B> <3268> <91AC> -<3269> <326B> <91BC> -<326C> <326E> <91C0> -<326F> <3277> <91C4> -endbfrange - -100 beginbfrange -<3278> <3279> <91CE> -<327A> <327A> <91D3> -<327B> <327B> <91D5> -<327C> <327C> <91D7> -<327D> <3281> <91DA> -<3282> <3283> <91E0> -<3284> <328A> <91E3> -<328B> <328F> <91EB> -<3290> <3290> <91F1> -<3291> <329C> <91F3> -<329D> <32DB> <9240> -<32DC> <32FF> <9280> -<3300> <3311> <92A4> -<3312> <3328> <92B7> -<3329> <3329> <92CF> -<332A> <332C> <92D1> -<332D> <3336> <92D5> -<3337> <3353> <92E1> -<3354> <3363> <9340> -<3364> <336F> <9351> -<3370> <3381> <935E> -<3382> <3386> <9371> -<3387> <338E> <9377> -<338F> <339A> <9380> -<339B> <33AA> <938D> -<33AB> <33B1> <939E> -<33B2> <33B2> <93A6> -<33B3> <33BE> <93A8> -<33BF> <33C1> <93B5> -<33C2> <33C3> <93B9> -<33C4> <33C4> <93BC> -<33C5> <33CC> <93BE> -<33CD> <33D4> <93C7> -<33D5> <33DB> <93D0> -<33DC> <33DE> <93D8> -<33DF> <33E2> <93DD> -<33E3> <33E4> <93E2> -<33E5> <33E7> <93E6> -<33E8> <33E8> <93EA> -<33E9> <33E9> <93EE> -<33EA> <33EA> <93F0> -<33EB> <33EC> <93F2> -<33ED> <33F0> <93F6> -<33F1> <33F3> <93FB> -<33F4> <33F7> <9440> -<33F8> <33FF> <9445> -<3400> <3401> <944E> -<3402> <3402> <9454> -<3403> <3404> <9456> -<3405> <3406> <9459> -<3407> <3407> <945E> -<3408> <340B> <9460> -<340C> <340C> <9465> -<340D> <3413> <9467> -<3414> <3416> <946F> -<3417> <3417> <9473> -<3418> <3418> <9475> -<3419> <3419> <9477> -<341A> <341A> <9479> -<341B> <341E> <947B> -<341F> <3422> <9483> -<3423> <343A> <9489> -<343B> <344B> <94A2> -<344C> <344C> <94B4> -<344D> <3455> <94B6> -<3456> <3460> <94C1> -<3461> <346B> <94CD> -<346C> <3472> <94D9> -<3473> <3490> <94E1> -<3491> <34C2> <9540> -<34C3> <34CE> <9573> -<34CF> <34D1> <9580> -<34D2> <34EB> <9584> -<34EC> <34FE> <95A0> -<34FF> <34FF> <95B4> -<3500> <3504> <95B5> -<3505> <3518> <95BB> -<3519> <3519> <95D0> -<351A> <351A> <95D3> -<351B> <3526> <95D5> -<3527> <352B> <95E2> -<352C> <3534> <95E8> -<3535> <353A> <95F2> -<353B> <353F> <95F9> -<3540> <3555> <9640> -<3556> <357A> <9657> -<357B> <357C> <967D> -<357D> <35FB> <9680> -<35FC> <35FF> <9740> -<3600> <3622> <9744> -<3623> <3626> <9768> -<3627> <3627> <976D> -<3628> <3637> <976F> -<3638> <364D> <9780> -<364E> <3652> <9798> -<3653> <3657> <979E> -<3658> <3672> <97A4> -<3673> <36A0> <97C0> -<36A1> <36A8> <97EF> -<36A9> <36AF> <97F8> -endbfrange - -100 beginbfrange -<36B0> <36B4> <9840> -<36B5> <36B7> <9846> -<36B8> <36BC> <984A> -<36BD> <36DD> <9850> -<36DE> <36DE> <9872> -<36DF> <36E9> <9874> -<36EA> <36EA> <9880> -<36EB> <36F3> <9882> -<36F4> <36FF> <988D> -<3700> <3706> <9899> -<3707> <370F> <98A1> -<3710> <371A> <98AB> -<371B> <371C> <98B8> -<371D> <3728> <98BB> -<3729> <372B> <98C8> -<372C> <372F> <98CC> -<3730> <3731> <98D1> -<3732> <3740> <98D4> -<3741> <3749> <98E6> -<374A> <374B> <98F0> -<374C> <3757> <98F3> -<3758> <375A> <9940> -<375B> <375B> <9944> -<375C> <377B> <9946> -<377C> <3782> <9967> -<3783> <3788> <996F> -<3789> <378C> <9976> -<378D> <378F> <997C> -<3790> <3794> <9980> -<3795> <3797> <9986> -<3798> <379B> <998A> -<379C> <379D> <998F> -<379E> <37A4> <9992> -<37A5> <37B3> <999A> -<37B4> <37B9> <99AA> -<37BA> <37BA> <99B2> -<37BB> <37C1> <99B6> -<37C2> <37C2> <99BF> -<37C3> <37C3> <99C1> -<37C4> <37C9> <99C3> -<37CA> <37CD> <99CA> -<37CE> <37CF> <99CF> -<37D0> <37D7> <99D2> -<37D8> <37DC> <99DB> -<37DD> <37E0> <99E1> -<37E1> <37E2> <99E6> -<37E3> <37E5> <99E9> -<37E6> <37EC> <99ED> -<37ED> <37F6> <99F5> -<37F7> <37FF> <9A40> -<3800> <3800> <9A49> -<3801> <380C> <9A4B> -<380D> <3819> <9A58> -<381A> <381A> <9A66> -<381B> <3823> <9A68> -<3824> <3827> <9A72> -<3828> <382E> <9A78> -<382F> <3836> <9A80> -<3837> <3839> <9A89> -<383A> <383D> <9A8D> -<383E> <3842> <9A92> -<3843> <3844> <9A98> -<3845> <3846> <9A9C> -<3847> <3849> <9A9F> -<384A> <384F> <9AA4> -<3850> <3874> <9AAB> -<3875> <3879> <9AD1> -<387A> <387C> <9AD7> -<387D> <3883> <9ADB> -<3884> <3884> <9AE3> -<3885> <389D> <9AE6> -<389E> <38DC> <9B40> -<38DD> <38FF> <9B80> -<3900> <392D> <9BA3> -<392E> <3937> <9BD2> -<3938> <3959> <9BDD> -<395A> <396C> <9C40> -<396D> <3971> <9C54> -<3972> <3972> <9C5B> -<3973> <398A> <9C5D> -<398B> <398D> <9C76> -<398E> <3992> <9C7A> -<3993> <3998> <9C80> -<3999> <39AE> <9C87> -<39AF> <39BB> <9C9E> -<39BC> <39D9> <9CAC> -<39DA> <39DD> <9CCB> -<39DE> <39F3> <9CD0> -<39F4> <39F7> <9CE8> -<39F8> <39F8> <9CED> -<39F9> <39FF> <9CEF> -<3A00> <3A04> <9CF6> -<3A05> <3A06> <9CFC> -<3A07> <3A08> <9D40> -<3A09> <3A0B> <9D43> -<3A0C> <3A10> <9D48> -<3A11> <3A11> <9D4E> -<3A12> <3A22> <9D50> -<3A23> <3A28> <9D62> -<3A29> <3A2C> <9D6A> -endbfrange - -100 beginbfrange -<3A2D> <3A2E> <9D6F> -<3A2F> <3A31> <9D72> -<3A32> <3A36> <9D76> -<3A37> <3A37> <9D7C> -<3A38> <3A38> <9D7E> -<3A39> <3A42> <9D80> -<3A43> <3A44> <9D8B> -<3A45> <3A47> <9D8E> -<3A48> <3A4E> <9D92> -<3A4F> <3A55> <9D9A> -<3A56> <3A59> <9DA3> -<3A5A> <3A5D> <9DA8> -<3A5E> <3A61> <9DAE> -<3A62> <3A6B> <9DB4> -<3A6C> <3A72> <9DBF> -<3A73> <3A74> <9DC7> -<3A75> <3A77> <9DCA> -<3A78> <3A7B> <9DCE> -<3A7C> <3A7D> <9DD3> -<3A7E> <3A88> <9DD6> -<3A89> <3A96> <9DE3> -<3A97> <3A98> <9DF2> -<3A99> <3A9A> <9DF5> -<3A9B> <3A9C> <9DF8> -<3A9D> <3A9E> <9DFB> -<3A9F> <3A9F> <9DFE> -<3AA0> <3AA4> <9E40> -<3AA5> <3AA6> <9E46> -<3AA7> <3AAE> <9E4A> -<3AAF> <3AAF> <9E53> -<3AB0> <3AB0> <9E55> -<3AB1> <3AB6> <9E57> -<3AB7> <3AB8> <9E5F> -<3AB9> <3AB9> <9E62> -<3ABA> <3ABC> <9E64> -<3ABD> <3AC0> <9E68> -<3AC1> <3AC2> <9E6D> -<3AC3> <3AC4> <9E70> -<3AC5> <3AC5> <9E73> -<3AC6> <3ACA> <9E76> -<3ACB> <3ACC> <9E7D> -<3ACD> <3AD1> <9E80> -<3AD2> <3AD2> <9E86> -<3AD3> <3ADB> <9E88> -<3ADC> <3ADF> <9E92> -<3AE0> <3AE9> <9E98> -<3AEA> <3AEC> <9EA3> -<3AED> <3AEE> <9EA7> -<3AEF> <3AF2> <9EAA> -<3AF3> <3AF6> <9EAF> -<3AF7> <3AF8> <9EB5> -<3AF9> <3AFF> <9EB8> -<3B00> <3B35> <9EBF> -<3B36> <3B3E> <9EF6> -<3B3F> <3B4C> <9F40> -<3B4D> <3B6C> <9F4F> -<3B6D> <3B7B> <9F70> -<3B7C> <3B8D> <9F80> -<3B8E> <3B92> <9F93> -<3B93> <3B9F> <9F99> -<3BA0> <3BA1> <9FA7> -<3BA2> <3BA3> <9FAA> -<3BA4> <3BBF> <9FAD> -<3BC0> <3BC2> <9FCA> -<3BC3> <3BD5> <9FCE> -<3BD6> <3BDE> <9FE2> -<3BDF> <3BE0> <9FEC> -<3BE1> <3BE5> <9FEF> -<3BE6> <3BED> <9FF5> -<3BEE> <3BEE> <9FFE> -<3BEF> <3BF1> -<3BF2> <3BF3> -<3BF4> <3BF5> -<3BF6> <3BF9> -<3BFA> <3BFE> -<3BFF> <3BFF> -<3C00> <3C03> -<3C04> <3C09> -<3C0A> <3C0A> -<3C0B> <3C17> -<3C18> <3C19> -<3C1A> <3C23> -<3C24> <3C33> -<3C34> <3C35> -<3C36> <3C36> -<3C37> <3C48> -<3C49> <3C5D> -<3C5E> <3C6B> -<3C6C> <3C75> -<3C76> <3C79> -<3C7A> <3C88> -<3C89> <3C98> -<3C99> <3CA5> -<3CA6> <3CC7> -<3CC8> <3CC8> -<3CC9> <3CCB> -<3CCC> <3CCD> -<3CCE> <3CD0> -<3CD1> <3CEA> -<3CEB> <3CEB> -endbfrange - -100 beginbfrange -<3CEC> <3CEC> -<3CED> <3CED> -<3CEE> <3CEF> -<3CF0> <3CF0> -<3CF1> <3CF1> -<3CF2> <3CF3> -<3CF4> <3CFF> -<3D00> <3D24> -<3D25> <3D45> -<3D46> <3D4B> -<3D4C> <3D75> -<3D76> <3D7F> -<3D80> <3D81> -<3D82> <3D8E> -<3D8F> <3D93> -<3D94> <3D9F> -<3DA0> <3DA8> -<3DA9> <3DBC> -<3DBD> <3DBE> -<3DBF> <3DC4> -<3DC5> <3DCF> -<3DD0> <3DD9> -<3DDA> <3DDB> -<3DDC> <3DDF> -<3DE0> <3DE2> -<3DE3> <3DE7> -<3DE8> <3DF6> -<3DF7> <3DFF> -<3E00> <3E0A> -<3E0B> <3E17> -<3E18> <3E33> -<3E34> <3E37> -<3E38> <3E3C> -<3E3D> <3E44> -<3E45> <3E4F> -<3E50> <3E73> -<3E74> <3E89> -<3E8A> <3E8C> -<3E8D> <3E8E> -<3E8F> <3E98> -<3E99> <3E99> -<3E9A> <3EA3> -<3EA4> <3EA5> -<3EA6> <3EA6> -<3EA7> <3EA7> -<3EA8> <3EA8> -<3EA9> <3EB2> -<3EB3> <3EB6> -<3EB7> <3EB8> -<3EB9> <3EB9> -<3EBA> <3EBA> -<3EBB> <3EBB> -<3EBC> <3EC2> -<3EC3> <3ED2> -<3ED3> <3ED3> -<3ED4> <3EEA> -<3EEB> <3EEB> -<3EEC> <3EF2> -<3EF3> <3EFD> -<3EFE> <3EFE> -<3EFF> <3EFF> -<3F00> <3F00> -<3F01> <3F2C> -<3F2D> <3F43> -<3F44> <3F4C> -<3F4D> <3F4D> -<3F4E> <3F72> -<3F73> <3F77> -<3F78> <3F7D> -<3F7E> <3F87> -<3F88> <3F8F> -<3F90> <3F9F> -<3FA0> <3FA5> -<3FA6> <3FA8> -<3FA9> <3FD4> -<3FD5> <3FE2> -<3FE3> <3FEA> -<3FEB> <3FED> -<3FEE> <3FEE> -<3FEF> <3FFF> -<4000> <4000> -<4001> <4014> -<4015> <4017> -<4018> <401C> -<401D> <401D> -<401E> <4030> -<4031> <4038> -<4039> <403B> -<403C> <4040> -<4041> <4049> -<404A> <4056> -<4057> <4057> -<4058> <4060> -<4061> <406A> -<406B> <406D> -<406E> <4071> -<4072> <408E> -<408F> <40AA> -<40AB> <40AD> -<40AE> <40BF> -endbfrange - -100 beginbfrange -<40C0> <40C1> -<40C2> <40C4> -<40C5> <40C5> -<40C6> <40E7> -<40E8> <40FF> -<4100> <4108> -<4109> <4116> -<4117> <4118> -<4119> <411F> -<4120> <4129> -<412A> <4139> -<413A> <413F> -<4140> <4140> -<4141> <415E> -<415F> <4161> -<4162> <4162> -<4163> <4168> -<4169> <416B> -<416C> <4173> -<4174> <4174> -<4175> <4175> -<4176> <418B> -<418C> <4192> -<4193> <4194> -<4195> <41B2> -<41B3> <41C2> -<41C3> <41D2> -<41D3> <41EB> -<41EC> <41EE> -<41EF> <41FF> -<4200> <420B> -<420C> <420D> -<420E> <420F> -<4210> <4210> -<4211> <4221> -<4222> <4223> -<4224> <4229> -<422A> <4232> -<4233> <423B> -<423C> <4245> -<4246> <4249> -<424A> <424A> -<424B> <424B> -<424C> <424F> -<4250> <425F> -<4260> <4260> -<4261> <4268> -<4269> <4276> -<4277> <4278> -<4279> <427B> -<427C> <427F> -<4280> <4280> -<4281> <4281> -<4282> <4284> -<4285> <4294> -<4295> <42B5> -<42B6> <42C7> -<42C8> <42CD> -<42CE> <42D3> -<42D4> <42D4> -<42D5> <42D5> -<42D6> <42D6> -<42D7> <42D7> -<42D8> <42DA> -<42DB> <42DB> -<42DC> <42DC> -<42DD> <42DD> -<42DE> <42DE> -<42DF> <42E0> -<42E1> <42E2> -<42E3> <42E3> -<42E4> <42E4> -<42E5> <42E7> -<42E8> <42F1> -<42F2> <42F4> -<42F5> <42F6> -<42F7> <42F7> -<42F8> <42F9> -<42FA> <42FA> -<42FB> <42FB> -<42FC> <42FC> -<42FD> <42FF> -<4300> <4303> -<4304> <4304> -<4305> <4310> -<4311> <4312> -<4313> <4315> -<4316> <4316> -<4317> <431D> -<431E> <431F> -<4320> <4320> -<4321> <4327> -<4328> <4328> -<4329> <432A> -<432B> <432B> -<432C> <4330> -<4331> <4333> -<4334> <4338> -<4339> <433B> -<433C> <433C> -endbfrange - -100 beginbfrange -<433D> <433F> -<4340> <4345> -<4346> <4346> -<4347> <4349> -<434A> <434A> -<434B> <434E> -<434F> <4350> -<4351> <4352> -<4353> <4357> -<4358> <4358> -<4359> <435A> -<435B> <435D> -<435E> <435E> -<435F> <435F> -<4360> <4361> -<4362> <4362> -<4363> <4364> -<4365> <4366> -<4367> <4367> -<4368> <4368> -<4369> <4369> -<436A> <436B> -<436C> <436C> -<436D> <4378> -<4379> <437C> -<437D> <4385> -<4386> <4386> -<4387> <4389> -<438A> <438C> -<438D> <438F> -<4390> <4390> -<4391> <4392> -<4393> <4393> -<4394> <4394> -<4395> <4396> -<4397> <439B> -<439C> <43A5> -<43A6> <43A6> -<43A7> <43AA> -<43AB> <43AD> -<43AE> <43B0> -<43B1> <43B6> -<43B7> <43B7> -<43B8> <43B9> -<43BA> <43BE> -<43BF> <43C0> -<43C1> <43C8> -<43C9> <43C9> -<43CA> <43CA> -<43CB> <43CB> -<43CC> <43CE> -<43CF> <43CF> -<43D0> <43D0> -<43D1> <43D2> -<43D3> <43D4> -<43D5> <43EF> -<43F0> <43F0> -<43F1> <43F3> -<43F4> <43FF> -<4400> <4403> -<4404> <4406> -<4407> <4410> -<4411> <4411> -<4412> <4423> -<4424> <4425> -<4426> <442B> -<442C> <4440> -<4441> <444B> -<444C> <4459> -<445A> <446F> -<4470> <4470> -<4471> <4485> -<4486> <4486> -<4487> <448A> -<448B> <4498> -<4499> <4499> -<449A> <449A> -<449B> <449D> -<449E> <449F> -<44A0> <44D6> -<44D7> <44D9> -<44DA> <44DD> -<44DE> <44F3> -<44F4> <44F8> -<44F9> <44FF> -<4500> <4501> -<4502> <4503> -<4504> <450A> -<450B> <450D> -<450E> <450F> -<4510> <4516> -<4517> <4529> -<452A> <452B> -<452C> <452F> -<4530> <4530> -<4531> <453F> -<4540> <4543> -<4544> <4544> -<4545> <4545> -<4546> <4549> -endbfrange - -100 beginbfrange -<454A> <454D> -<454E> <454E> -<454F> <4552> -<4553> <4557> -<4558> <4563> -<4564> <4566> -<4567> <457E> -<457F> <4591> -<4592> <4599> -<459A> <459A> -<459B> <459C> -<459D> <459D> -<459E> <459F> -<45A0> <45A1> -<45A2> <45BC> -<45BD> <45CA> -<45CB> <45D6> -<45D7> <45F7> -<45F8> <45FF> -<4600> <461D> -<461E> <4625> -<4626> <462B> -<462C> <462F> -<4630> <4632> -<4633> <4653> -<4654> <4654> -<4655> <4661> -<4662> <4663> -<4664> <4676> -<4677> <467D> -<467E> <468C> -<468D> <4693> -<4694> <469D> -<469E> <469E> -<469F> <46A2> -<46A3> <46A5> -<46A6> <46A8> -<46A9> <46B7> -<46B8> <46D4> -<46D5> <46D5> -<46D6> <46DB> -<46DC> <46E2> -<46E3> <46F1> -<46F2> <46FC> -<46FD> <46FF> -<4700> <4700> -<4701> <470E> -<470F> <4715> -<4716> <4717> -<4718> <4719> -<471A> <471D> -<471E> <4729> -<472A> <472C> -<472D> <4730> -<4731> <4733> -<4734> <4734> -<4735> <4735> -<4736> <473C> -<473D> <4740> -<4741> <4742> -<4743> <4749> -<474A> <474F> -<4750> <4752> -<4753> <4753> -<4754> <4754> -<4755> <4757> -<4758> <4759> -<475A> <4761> -<4762> <4766> -<4767> <4767> -<4768> <4771> -<4772> <4781> -<4782> <4783> -<4784> <478A> -<478B> <4790> -<4791> <4793> -<4794> <479C> -<479D> <479D> -<479E> <479F> -<47A0> <47A6> -<47A7> <47A9> -<47AA> <47B5> -<47B6> <47B8> -<47B9> <47BB> -<47BC> <47C3> -<47C4> <47CE> -<47CF> <47D1> -<47D2> <47D2> -<47D3> <47E0> -<47E1> <47E5> -<47E6> <47E6> -<47E7> <47EC> -<47ED> <47EF> -<47F0> <47FF> -<4800> <482E> -<482F> <483E> -<483F> <4845> -<4846> <484D> -<484E> <4874> -<4875> <487E> -endbfrange - -100 beginbfrange -<487F> <488A> -<488B> <488B> -<488C> <4890> -<4891> <48A3> -<48A4> <48A5> -<48A6> <48A7> -<48A8> <48B5> -<48B6> <48BB> -<48BC> <48BD> -<48BE> <48C0> -<48C1> <48CF> -<48D0> <48D5> -<48D6> <48D6> -<48D7> <48D8> -<48D9> <48DB> -<48DC> <48DD> -<48DE> <48DE> -<48DF> <48E5> -<48E6> <48ED> -<48EE> <48F6> -<48F7> <48F7> -<48F8> <48FF> -<4900> <4904> -<4905> <4907> -<4908> <490A> -<490B> <4910> -<4911> <4913> -<4914> <4919> -<491A> <491D> -<491E> <491E> -<491F> <492C> -<492D> <492D> -<492E> <494E> -<494F> <4963> -<4964> <4966> -<4967> <496D> -<496E> <497F> -<4980> <4986> -<4987> <4987> -<4988> <49A4> -<49A5> <49A6> -<49A7> <49A8> -<49A9> <49B1> -<49B2> <49BF> -<49C0> <49C5> -<49C6> <49C8> -<49C9> <49CC> -<49CD> <49CD> -<49CE> <49CF> -<49D0> <49D1> -<49D2> <49DA> -<49DB> <49E4> -<49E5> <49E7> -<49E8> <49EA> -<49EB> <49EC> -<49ED> <49ED> -<49EE> <49F5> -<49F6> <49F9> -<49FA> <49FC> -<49FD> <49FD> -<49FE> <49FF> -<4A00> <4A01> -<4A02> <4A05> -<4A06> <4A07> -<4A08> <4A09> -<4A0A> <4A0A> -<4A0B> <4A23> -<4A24> <4A24> -<4A25> <4A25> -<4A26> <4A27> -<4A28> <4A2C> -<4A2D> <4A2F> -<4A30> <4A30> -<4A31> <4A31> -<4A32> <4A32> -<4A33> <4A33> -<4A34> <4A35> -<4A36> <4A36> -<4A37> <4A37> -<4A38> <4A39> -<4A3A> <4A3A> -<4A3B> <4A3B> -<4A3C> <4A3E> -<4A3F> <4A3F> -<4A40> <4A43> -<4A44> <4A45> -<4A46> <4A48> -<4A49> <4A4A> -<4A4B> <4A4B> -<4A4C> <4A4E> -<4A4F> <4A53> -<4A54> <4A57> -<4A58> <4A5D> -<4A5E> <4A5E> -<4A5F> <4A5F> -<4A60> <4A60> -<4A61> <4A62> -<4A63> <4A64> -<4A65> <4A66> -<4A67> <4A68> -endbfrange - -100 beginbfrange -<4A69> <4A6A> -<4A6B> <4A6C> -<4A6D> <4A6D> -<4A6E> <4A6E> -<4A6F> <4A6F> -<4A70> <4A74> -<4A75> <4A76> -<4A77> <4A77> -<4A78> <4A7A> -<4A7B> <4A7D> -<4A7E> <4A80> -<4A81> <4A81> -<4A82> <4A83> -<4A84> <4A84> -<4A85> <4A87> -<4A88> <4A88> -<4A89> <4A89> -<4A8A> <4A8A> -<4A8B> <4A8D> -<4A8E> <4A90> -<4A91> <4A91> -<4A92> <4A94> -<4A95> <4A96> -<4A97> <4A98> -<4A99> <4A9A> -<4A9B> <4A9C> -<4A9D> <4A9D> -<4A9E> <4A9F> -<4AA0> <4AA0> -<4AA1> <4AA1> -<4AA2> <4AA2> -<4AA3> <4AA3> -<4AA4> <4AA4> -<4AA5> <4AA7> -<4AA8> <4AAA> -<4AAB> <4AAB> -<4AAC> <4AAE> -<4AAF> <4AAF> -<4AB0> <4AB0> -<4AB1> <4AB3> -<4AB4> <4AB4> -<4AB5> <4AB6> -<4AB7> <4AB7> -<4AB8> <4AB9> -<4ABA> <4ABA> -<4ABB> <4ABB> -<4ABC> <4ABC> -<4ABD> <4ABD> -<4ABE> <4ABE> -<4ABF> <4AC1> -<4AC2> <4AC4> -<4AC5> <4AC5> -<4AC6> <4AC8> -<4AC9> <4AC9> -<4ACA> <4ACA> -<4ACB> <4ACB> -<4ACC> <4ACE> -<4ACF> <4AD0> -<4AD1> <4AD3> -<4AD4> <4AD5> -<4AD6> <4ADA> -<4ADB> <4ADF> -<4AE0> <4AE3> -<4AE4> <4AEA> -<4AEB> <4AED> -<4AEE> <4AF1> -<4AF2> <4AF7> -<4AF8> <4AF8> -<4AF9> <4AF9> -<4AFA> <4AFF> -<4B00> <4B06> -<4B07> <4B08> -<4B09> <4B0B> -<4B0C> <4B0D> -<4B0E> <4B12> -<4B13> <4B14> -<4B15> <4B1A> -<4B1B> <4B1D> -<4B1E> <4B20> -<4B21> <4B23> -<4B24> <4B24> -<4B25> <4B29> -<4B2A> <4B2A> -<4B2B> <4B33> -<4B34> <4B40> -<4B41> <4B45> -<4B46> <4B70> -<4B71> <4B80> -<4B81> <4B81> -<4B82> <4B85> -<4B86> <4B86> -<4B87> <4B87> -<4B88> <4B88> -<4B89> <4B89> -<4B8A> <4B8A> -<4B8B> <4B8B> -<4B8C> <4B8C> -<4B8D> <4B8D> -<4B8E> <4B93> -<4B94> <4B94> -endbfrange - -100 beginbfrange -<4B95> <4B98> -<4B99> <4B99> -<4B9A> <4B9A> -<4B9B> <4B9B> -<4B9C> <4B9C> -<4B9D> <4B9E> -<4B9F> <4BA4> -<4BA5> <4BA9> -<4BAA> <4BAE> -<4BAF> <4BB0> -<4BB1> <4BB1> -<4BB2> <4BB2> -<4BB3> <4BB3> -<4BB4> <4BB8> -<4BB9> <4BBC> -<4BBD> <4BE0> -<4BE1> <4BE3> -<4BE4> <4BEA> -<4BEB> <4BEF> -<4BF0> <4BF7> -<4BF8> <4BFF> -<4C00> <4C09> -<4C0A> <4C29> -<4C2A> <4C40> -<4C41> <4C46> -<4C47> <4C4A> -<4C4B> <4C50> -<4C51> <4C5C> -<4C5D> <4C64> -<4C65> <4C69> -<4C6A> <4C72> -<4C73> <4C73> -<4C74> <4C74> -<4C75> <4C79> -<4C7A> <4C7D> -<4C7E> <4C80> -<4C81> <4C83> -<4C84> <4C93> -<4C94> <4C95> -<4C96> <4C9C> -<4C9D> <4C9F> -<4CA0> <4CA0> -<4CA1> <4CA6> -<4CA7> <4CA9> -<4CAA> <4CAD> -<4CAE> <4CB3> -<4CB4> <4CB9> -<4CBA> <4CBE> -<4CBF> <4CBF> -<4CC0> <4CC3> -<4CC4> <4CC4> -<4CC5> <4CC5> -<4CC6> <4CC6> -<4CC7> <4CCD> -<4CCE> <4CCE> -<4CCF> <4CD3> -<4CD4> <4CD7> -<4CD8> <4CD8> -<4CD9> <4CDA> -<4CDB> <4CDE> -<4CDF> <4CE1> -<4CE2> <4CE5> -<4CE6> <4CE7> -<4CE8> <4CE9> -<4CEA> <4CEB> -<4CEC> <4CEC> -<4CED> <4CEE> -<4CEF> <4CF1> -<4CF2> <4CF6> -<4CF7> <4CFF> -<4D00> <4D00> -<4D01> <4D01> -<4D02> <4D02> -<4D03> <4D0D> -<4D0E> <4D10> -<4D11> <4D1C> -<4D1D> <4D2E> -<4D2F> <4D3A> -<4D3B> <4D3B> -<4D3C> <4D3C> -<4D3D> <4D46> -<4D47> <4D54> -<4D55> <4D55> -<4D56> <4D58> -<4D59> <4D59> -<4D5A> <4D5A> -<4D5B> <4D5E> -<4D5F> <4D64> -<4D65> <4D66> -<4D67> <4D67> -<4D68> <4D68> -<4D69> <4D69> -<4D6A> <4D6B> -<4D6C> <4D6C> -<4D6D> <4D6F> -<4D70> <4D85> -<4D86> <4D95> -<4D96> <4DA1> -<4DA2> <4DAC> -<4DAD> <4DAE> -endbfrange - -100 beginbfrange -<4DAF> <4DB6> -<4DB7> <4DB7> -<4DB8> <4DB8> -<4DB9> <4DBD> -<4DBE> <4DC4> -<4DC5> <4DC9> -<4DCA> <4DCA> -<4DCB> <4DCB> -<4DCC> <4DCC> -<4DCD> <4DCE> -<4DCF> <4DD7> -<4DD8> <4DD9> -<4DDA> <4DFA> -<4DFB> <4DFD> -<4DFE> <4DFF> -<4E00> <4E08> -<4E09> <4E11> -<4E12> <4E15> -<4E16> <4E16> -<4E17> <4E17> -<4E18> <4E19> -<4E1A> <4E1A> -<4E1B> <4E1B> -<4E1C> <4E1D> -<4E1E> <4E22> -<4E23> <4E23> -<4E24> <4E24> -<4E25> <4E25> -<4E26> <4E30> -<4E31> <4E31> -<4E32> <4E32> -<4E33> <4E37> -<4E38> <4E39> -<4E3A> <4E3C> -<4E3D> <4E3F> -<4E40> <4E40> -<4E41> <4E42> -<4E43> <4E4A> -<4E4B> <4E4E> -<4E4F> <4E4F> -<4E50> <4E55> -<4E56> <4E56> -<4E57> <4E58> -<4E59> <4E5A> -<4E5B> <4E5C> -<4E5D> <4E60> -<4E61> <4E62> -<4E63> <4E65> -<4E66> <4E68> -<4E69> <4E6B> -<4E6C> <4E6C> -<4E6D> <4E6E> -<4E6F> <4E70> -<4E71> <4E73> -<4E74> <4E76> -<4E77> <4E7B> -<4E7C> <4E84> -<4E85> <4E85> -<4E86> <4E88> -<4E89> <4E8A> -<4E8B> <4E8B> -<4E8C> <4E95> -<4E96> <4E96> -<4E97> <4E98> -<4E99> <4E99> -<4E9A> <4E9A> -<4E9B> <4E9B> -<4E9C> <4E9E> -<4E9F> <4EA0> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA3> <4EA5> -<4EA6> <4EAA> -<4EAB> <4EAB> -<4EAC> <4EAC> -<4EAD> <4EB0> -<4EB1> <4EB1> -<4EB2> <4EB2> -<4EB3> <4EB3> -<4EB4> <4EB6> -<4EB7> <4EB8> -<4EB9> <4EBA> -<4EBB> <4EC4> -<4EC5> <4EC5> -<4EC6> <4EC8> -<4EC9> <4EC9> -<4ECA> <4ECA> -<4ECB> <4ECC> -<4ECD> <4ED0> -<4ED1> <4ED1> -<4ED2> <4ED4> -<4ED5> <4ED8> -<4ED9> <4EDC> -<4EDD> <4EDD> -<4EDE> <4EE3> -<4EE4> <4EE4> -<4EE5> <4EE6> -<4EE7> <4EE8> -<4EE9> <4EEB> -<4EEC> <4EEC> -endbfrange - -100 beginbfrange -<4EED> <4EEF> -<4EF0> <4EF0> -<4EF1> <4EF2> -<4EF3> <4EF4> -<4EF5> <4EF6> -<4EF7> <4EF8> -<4EF9> <4EF9> -<4EFA> <4EFF> -<4F00> <4F00> -<4F01> <4F02> -<4F03> <4F04> -<4F05> <4F05> -<4F06> <4F06> -<4F07> <4F0C> -<4F0D> <4F0F> -<4F10> <4F11> -<4F12> <4F19> -<4F1A> <4F1C> -<4F1D> <4F1D> -<4F1E> <4F20> -<4F21> <4F24> -<4F25> <4F27> -<4F28> <4F2A> -<4F2B> <4F2D> -<4F2E> <4F2E> -<4F2F> <4F30> -<4F31> <4F32> -<4F33> <4F3C> -<4F3D> <4F3D> -<4F3E> <4F46> -<4F47> <4F48> -<4F49> <4F49> -<4F4A> <4F4A> -<4F4B> <4F4B> -<4F4C> <4F4C> -<4F4D> <4F4E> -<4F4F> <4F4F> -<4F50> <4F51> -<4F52> <4F57> -<4F58> <4F5A> -<4F5B> <4F5D> -<4F5E> <4F5F> -<4F60> <4F62> -<4F63> <4F66> -<4F67> <4F69> -<4F6A> <4F6A> -<4F6B> <4F6B> -<4F6C> <4F6E> -<4F6F> <4F7A> -<4F7B> <4F7B> -<4F7C> <4F7C> -<4F7D> <4F85> -<4F86> <4F8C> -<4F8D> <4F8E> -<4F8F> <4F90> -<4F91> <4F91> -<4F92> <4F94> -<4F95> <4F97> -<4F98> <4F99> -<4F9A> <4F9E> -<4F9F> <4FA3> -<4FA4> <4FA6> -<4FA7> <4FA7> -<4FA8> <4FA9> -<4FAA> <4FAA> -<4FAB> <4FAD> -<4FAE> <4FB1> -<4FB2> <4FB6> -<4FB7> <4FB7> -<4FB8> <4FBC> -<4FBD> <4FBD> -<4FBE> <4FC8> -<4FC9> <4FCA> -<4FCB> <4FCB> -<4FCC> <4FD1> -<4FD2> <4FD3> -<4FD4> <4FD4> -<4FD5> <4FD8> -<4FD9> <4FD9> -<4FDA> <4FDB> -<4FDC> <4FEC> -<4FED> <4FF8> -<4FF9> <4FFF> -<5000> <5000> -<5001> <5002> -<5003> <5004> -<5005> <5005> -<5006> <5006> -<5007> <5007> -<5008> <5008> -<5009> <500B> -<500C> <5013> -<5014> <5014> -<5015> <5016> -<5017> <5017> -<5018> <501B> -<501C> <501E> -<501F> <5020> -<5021> <5021> -<5022> <5024> -endbfrange - -100 beginbfrange -<5025> <5026> -<5027> <5027> -<5028> <5028> -<5029> <502B> -<502C> <502E> -<502F> <5033> -<5034> <5034> -<5035> <5036> -<5037> <5038> -<5039> <505D> -<505E> <5060> -<5061> <5062> -<5063> <5068> -<5069> <5069> -<506A> <506D> -<506E> <5076> -<5077> <5077> -<5078> <507A> -<507B> <507C> -<507D> <5086> -<5087> <5087> -<5088> <508C> -<508D> <508D> -<508E> <508F> -<5090> <5090> -<5091> <509A> -<509B> <509C> -<509D> <509D> -<509E> <50A1> -<50A2> <50A6> -<50A7> <50AB> -<50AC> <50AF> -<50B0> <50C5> -<50C6> <50CB> -<50CC> <50DA> -<50DB> <50DD> -<50DE> <50DE> -<50DF> <50E1> -<50E2> <50EE> -<50EF> <50F5> -<50F6> <50FD> -<50FE> <50FF> -<5100> <5113> -<5114> <511D> -<511E> <5123> -<5124> <5134> -<5135> <5139> -<513A> <513B> -<513C> <513D> -<513E> <513E> -<513F> <5144> -<5145> <5149> -<514A> <514B> -<514C> <514C> -<514D> <5151> -<5152> <5162> -<5163> <5163> -<5164> <5164> -<5165> <5165> -<5166> <5166> -<5167> <5167> -<5168> <516A> -<516B> <516D> -<516E> <5171> -<5172> <5173> -<5174> <5174> -<5175> <517A> -<517B> <517C> -<517D> <5182> -<5183> <5184> -<5185> <5185> -<5186> <518D> -<518E> <5192> -<5193> <5196> -<5197> <5199> -<519A> <519A> -<519B> <519C> -<519D> <519F> -<51A0> <51A1> -<51A2> <51A2> -<51A3> <51A5> -<51A6> <51A7> -<51A8> <51A8> -<51A9> <51AE> -<51AF> <51B3> -<51B4> <51B4> -<51B5> <51B5> -<51B6> <51B7> -<51B8> <51BC> -<51BD> <51C3> -<51C4> <51C4> -<51C5> <51C5> -<51C6> <51CF> -<51D0> <51D1> -<51D2> <51D2> -<51D3> <51D4> -<51D5> <51D6> -<51D7> <51D7> -<51D8> <51D8> -<51D9> <51DA> -endbfrange - -100 beginbfrange -<51DB> <51DB> -<51DC> <51E2> -<51E3> <51E6> -<51E7> <51E7> -<51E8> <51E9> -<51EA> <51EA> -<51EB> <51EB> -<51EC> <51ED> -<51EE> <51F1> -<51F2> <51F3> -<51F4> <51F5> -<51F6> <51F7> -<51F8> <51FD> -<51FE> <51FF> -<5200> <5206> -<5207> <5209> -<520A> <520D> -<520E> <520E> -<520F> <5211> -<5212> <5212> -<5213> <5214> -<5215> <5218> -<5219> <521A> -<521B> <521E> -<521F> <521F> -<5220> <5222> -<5223> <522C> -<522D> <523E> -<523F> <5240> -<5241> <5241> -<5242> <524D> -<524E> <525B> -<525C> <525C> -<525D> <525E> -<525F> <525F> -<5260> <5260> -<5261> <5261> -<5262> <5262> -<5263> <526C> -<526D> <526F> -<5270> <5277> -<5278> <527C> -<527D> <527D> -<527E> <5280> -<5281> <5287> -<5288> <528D> -<528E> <528F> -<5290> <52A0> -<52A1> <52A1> -<52A2> <52A2> -<52A3> <52A7> -<52A8> <52AC> -<52AD> <52AD> -<52AE> <52B1> -<52B2> <52B3> -<52B4> <52B4> -<52B5> <52B9> -<52BA> <52BA> -<52BB> <52BC> -<52BD> <52BF> -<52C0> <52C1> -<52C2> <52C2> -<52C3> <52C6> -<52C7> <52D6> -<52D7> <52E8> -<52E9> <52E9> -<52EA> <52EE> -<52EF> <52FA> -<52FB> <52FF> -<5300> <530D> -<530E> <5312> -<5313> <531C> -<531D> <5322> -<5323> <5323> -<5324> <5324> -<5325> <5325> -<5326> <5329> -<532A> <532A> -<532B> <533A> -<533B> <5340> -<5341> <5341> -<5342> <5355> -<5356> <5359> -<535A> <535B> -<535C> <535F> -<5360> <5364> -<5365> <5365> -<5366> <536F> -<5370> <5370> -<5371> <5377> -<5378> <5379> -<537A> <5384> -<5385> <5385> -<5386> <5391> -<5392> <5396> -<5397> <539B> -<539C> <539C> -<539D> <53A5> -<53A6> <53A6> -<53A7> <53AA> -endbfrange - -100 beginbfrange -<53AB> <53AB> -<53AC> <53AE> -<53AF> <53AF> -<53B0> <53B1> -<53B2> <53B2> -<53B3> <53B6> -<53B7> <53B9> -<53BA> <53C1> -<53C2> <53C2> -<53C3> <53CA> -<53CB> <53CD> -<53CE> <53CF> -<53D0> <53D0> -<53D1> <53D7> -<53D8> <53DC> -<53DD> <53DE> -<53DF> <53DF> -<53E0> <53E1> -<53E2> <53E4> -<53E5> <53E7> -<53E8> <53E8> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53ED> -<53EE> <53F3> -<53F4> <53F5> -<53F6> <53FD> -<53FE> <53FE> -<53FF> <53FF> -<5400> <5403> -<5404> <5404> -<5405> <540B> -<540C> <5410> -<5411> <541A> -<541B> <541B> -<541C> <543C> -<543D> <543E> -<543F> <5441> -<5442> <5443> -<5444> <5449> -<544A> <544A> -<544B> <5459> -<545A> <545A> -<545B> <5465> -<5466> <546A> -<546B> <546B> -<546C> <546C> -<546D> <546E> -<546F> <546F> -<5470> <5471> -<5472> <5472> -<5473> <5478> -<5479> <5482> -<5483> <5485> -<5486> <5487> -<5488> <5495> -<5496> <549D> -<549E> <549F> -<54A0> <54A7> -<54A8> <54A8> -<54A9> <54AA> -<54AB> <54AC> -<54AD> <54BB> -<54BC> <54C0> -<54C1> <54C1> -<54C2> <54CA> -<54CB> <54CE> -<54CF> <54CF> -<54D0> <54D7> -<54D8> <54D9> -<54DA> <54DC> -<54DD> <54E1> -<54E2> <54E5> -<54E6> <54EB> -<54EC> <54EE> -<54EF> <54EF> -<54F0> <54F0> -<54F1> <54FE> -<54FF> <54FF> -<5500> <5501> -<5502> <5502> -<5503> <5509> -<550A> <550C> -<550D> <5514> -<5515> <5516> -<5517> <551A> -<551B> <5522> -<5523> <552B> -<552C> <5533> -<5534> <5537> -<5538> <5538> -<5539> <5551> -<5552> <5554> -<5555> <5555> -<5556> <5556> -<5557> <5566> -<5567> <5571> -<5572> <5573> -<5574> <5574> -endbfrange - -34 beginbfrange -<5575> <5578> -<5579> <557C> -<557D> <558C> -<558D> <5594> -<5595> <5598> -<5599> <559E> -<559F> <559F> -<55A0> <55A1> -<55A2> <55A3> -<55A4> <55A9> -<55AA> <55AC> -<55AD> <55B2> -<55B3> <55C8> -<55C9> <55DA> -<55DB> <55DD> -<55DE> <55DE> -<55DF> <55E2> -<55E3> <55E4> -<55E5> <55E6> -<55E7> <55E7> -<55E8> <55E9> -<55EA> <55EC> -<55ED> <55ED> -<55EE> <55F2> -<55F3> <55F6> -<55F7> <55F7> -<55F8> <55FF> -<5600> <5601> -<5602> <5604> -<5605> <5607> -<5608> <560F> -<5610> <564D> -<564E> <566E> -<02E1> <02E1> -endbfrange - -3 usefont % Vertical Fonts -20 beginbfrange -<023D> <023D> -<023E> <023E> -<023F> <023F> -<0240> <0241> -<0242> <0242> -<0243> <0243> -<0244> <0245> -<0246> <0253> -<0254> <0254> -<0255> <0255> -<0256> <0256> -<0257> <0257> -<0258> <0258> -<1E18> <1E19> -<1E1A> <1E1A> -<1E1B> <1E1B> -<1E1C> <1E1C> -<1E1D> <1E1D> -<1E1E> <1E1E> -<1E1F> <1E1F> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-GB1-H-Mac b/Resources/cmap/Adobe-GB1-H-Mac deleted file mode 100644 index f0788bcd2c5..00000000000 --- a/Resources/cmap/Adobe-GB1-H-Mac +++ /dev/null @@ -1,194 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-GB1-H-Mac) -%%Title: (Adobe-GB1-H-Mac Adobe GB1 0) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_GB1_H_Mac) def -/Supplement 2 def -end def - -/CMapName /Adobe-GB1-H-Mac def - -/CMapVersion 4.002 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -2 usefont -1 begincidrange -<0000> 0 -endcidrange - -1 usefont % Prop Roman -1 beginbfrange -<0001> <005F> <20> -endbfrange - -0 usefont % Host Font -100 beginbfrange -<0060> <00BD> -<00BE> <00EF> -<00F0> <00F9> -<00FA> <00FF> -<0100> <0105> -<0106> <0163> -<0164> <01B6> -<01B7> <01FF> -<0200> <020C> -<020D> <0224> -<0225> <0259> -<025A> <027A> -<027B> <029B> -<029C> <02BB> -<02BC> <02E0> -<02E2> <02FF> -<0300> <032D> -<03AC> <03FF> -<0400> <0409> -<040A> <0467> -<0468> <04C5> -<04C6> <04FF> -<0500> <0523> -<0524> <0581> -<0582> <05DF> -<05E0> <05FF> -<0600> <063D> -<063E> <069B> -<069C> <06F9> -<06FA> <06FF> -<0700> <0757> -<0758> <07B5> -<07B6> <07FF> -<0800> <0813> -<0814> <0871> -<0872> <08CF> -<08D0> <08FF> -<0900> <092D> -<092E> <098B> -<098C> <09E9> -<09EA> <09FF> -<0A00> <0A47> -<0A48> <0AA5> -<0AA6> <0AFF> -<0B00> <0B03> -<0B04> <0B61> -<0B62> <0BBF> -<0BC0> <0BFF> -<0C00> <0C1D> -<0C1E> <0C7B> -<0C7C> <0CD9> -<0CDA> <0CFF> -<0D00> <0D37> -<0D38> <0D95> -<0D96> <0DF3> -<0DF4> <0DFF> -<0E00> <0E51> -<0E52> <0EAF> -<0EB0> <0EFF> -<0F00> <0F0D> -<0F0E> <0F6B> -<0F6C> <0FC9> -<0FCA> <0FFF> -<1000> <1027> -<1028> <1085> -<1086> <10E3> -<10E4> <10FF> -<1100> <1141> -<1142> <119F> -<11A0> <11FD> -<11FE> <11FF> -<1200> <1256> -<1257> <12B4> -<12B5> <12FF> -<1300> <1312> -<1313> <1370> -<1371> <13CE> -<13CF> <13FF> -<1400> <142C> -<142D> <148A> -<148B> <14E8> -<14E9> <14FF> -<1500> <1546> -<1547> <15A4> -<15A5> <15FF> -<1600> <1602> -<1603> <1660> -<1661> <16BE> -<16BF> <16FF> -<1700> <171C> -<171D> <177A> -<177B> <17D8> -<17D9> <17FF> -<1800> <1836> -<1837> <1894> -<1895> <18F2> -<18F3> <18FF> -<1900> <1950> -<1951> <19AE> -<19AF> <19FF> -endbfrange -18 beginbfrange -<1A00> <1A0C> -<1A0D> <1A6A> -<1A6B> <1AC8> -<1AC9> <1AFF> -<1B00> <1B26> -<1B27> <1B84> -<1B85> <1BE2> -<1BE3> <1BFF> -<1C00> <1C40> -<1C41> <1C9E> -<1C9F> <1CFC> -<1CFD> <1CFF> -<1D00> <1D5A> -<1D5B> <1DB8> -<1DB9> <1DFF> -<1E00> <1E16> -<1E20> <1E20> <0080> -<1E21> <1E23> <00FD> -endbfrange -2 beginbfrange -<026F> <026F> -<0270> <0270> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-GB1-UCS2 b/Resources/cmap/Adobe-GB1-UCS2 deleted file mode 100644 index 4611e4d5149..00000000000 --- a/Resources/cmap/Adobe-GB1-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Adobe-GB1-UCS2) %%Title: (Adobe-GB1-UCS2 Adobe GB1 4) %%Version: 6.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Adobe_GB1_UCS2) def /Supplement 4 def end def /CMapName /Adobe-GB1-UCS2 def /CMapVersion 6.001 def /CMapType 1 def /XUID [1 10 25335 1212] def /WMode 0 def 1 begincodespacerange <0000> endcodespacerange 100 beginbfchar <0000> <0063> <00B7> <0064> <02C9> <0065> <02C7> <0066> <00A8> <0067> <3003> <0068> <3005> <0069> <2014> <006A> <006B> <2016> <006C> <22EF> <007F> <00B1> <0080> <00D7> <0081> <00F7> <0082> <2236> <0085> <2211> <0086> <220F> <0087> <222A> <0088> <2229> <0089> <2208> <008A> <2237> <008B> <221A> <008C> <22A5> <008D> <2225> <008E> <2220> <008F> <2312> <0090> <2299> <0091> <222B> <0092> <222E> <0093> <2261> <0094> <224C> <0095> <2248> <0096> <223D> <0097> <221D> <0098> <2260> <009D> <221E> <009E> <2235> <009F> <2234> <00A0> <2642> <00A1> <2640> <00A2> <00B0> <00A5> <2103> <00A6> <00A7> <00A4> <00AA> <2030> <00AB> <00A7> <00AC> <2116> <00AD> <2606> <00AE> <2605> <00AF> <25CB> <00B0> <25CF> <00B1> <25CE> <00B2> <25C7> <00B3> <25C6> <00B4> <25A1> <00B5> <25A0> <00B6> <25B3> <00B7> <25B2> <00B8> <203B> <00B9> <2192> <00BC> <2193> <00BD> <3013> <0109> <0163> <01F9> <02BA> <023D> <023E> <3002> <023F> <3001> <0242> <0243> <0256> <0257> <22EF> <0260> <0401> <0281> <0451> <029C> <0101> <029D> <00E1> <029E> <01CE> <029F> <00E0> <02A0> <0113> <02A1> <00E9> <02A2> <011B> <02A3> <00E8> <02A4> <012B> <02A5> <00ED> <02A6> <01D0> <02A7> <00EC> <02A8> <014D> <02A9> <00F3> <02AA> <01D2> <02AB> <00F2> <02AC> <016B> <02AD> <00FA> <02AE> <01D4> <02AF> <00F9> <02B0> <01D6> <02B1> <01D8> <02B2> <01DA> <02B3> <01DC> <02B4> <00FC> <02B5> <00EA> endbfchar 100 beginbfchar <02B6> <0251> <02B7> <1E3F> <02B8> <0144> <02B9> <0148> <02BA> <006E0300> <02BB> <0261> <02E1> <038C> <0101> <038D> <00E1> <038E> <01CE> <038F> <00E0> <0390> <0113> <0391> <00E9> <0392> <011B> <0393> <00E8> <0394> <012B> <0395> <00ED> <0396> <01D0> <0397> <00EC> <0398> <014D> <0399> <00F3> <039A> <01D2> <039B> <00F2> <039C> <016B> <039D> <00FA> <039E> <01D4> <039F> <00F9> <03A0> <01D6> <03A1> <01D8> <03A2> <01DA> <03A3> <01DC> <03A4> <00FC> <03A5> <00EA> <03A6> <0251> <03A7> <1E3F> <03A8> <0144> <03A9> <0148> <03AA> <006E0300> <03AB> <0261> <03AC> <554A> <03AD> <963F> <03AE> <57C3> <03AF> <6328> <03B0> <54CE> <03B1> <5509> <03B2> <54C0> <03B3> <7691> <03B4> <764C> <03B5> <853C> <03B6> <77EE> <03B7> <827E> <03B8> <788D> <03B9> <7231> <03BA> <9698> <03BB> <978D> <03BC> <6C28> <03BD> <5B89> <03BE> <4FFA> <03BF> <6309> <03C0> <6697> <03C1> <5CB8> <03C2> <80FA> <03C3> <6848> <03C4> <80AE> <03C5> <6602> <03C6> <76CE> <03C7> <51F9> <03C8> <6556> <03C9> <71AC> <03CA> <7FF1> <03CB> <8884> <03CC> <50B2> <03CD> <5965> <03CE> <61CA> <03CF> <6FB3> <03D0> <82AD> <03D1> <634C> <03D2> <6252> <03D3> <53ED> <03D4> <5427> <03D5> <7B06> <03D6> <516B> <03D7> <75A4> <03D8> <5DF4> <03D9> <62D4> <03DA> <8DCB> <03DB> <9776> <03DC> <628A> <03DD> <8019> <03DE> <575D> <03DF> <9738> <03E0> <7F62> <03E1> <7238> <03E2> <767D> <03E3> <67CF> <03E4> <767E> <03E5> <6446> <03E6> <4F70> <03E7> <8D25> <03E8> <62DC> endbfchar 100 beginbfchar <03E9> <7A17> <03EA> <6591> <03EB> <73ED> <03EC> <642C> <03ED> <6273> <03EE> <822C> <03EF> <9881> <03F0> <677F> <03F1> <7248> <03F2> <626E> <03F3> <62CC> <03F4> <4F34> <03F5> <74E3> <03F6> <534A> <03F7> <529E> <03F8> <7ECA> <03F9> <90A6> <03FA> <5E2E> <03FB> <6886> <03FC> <699C> <03FD> <8180> <03FE> <7ED1> <03FF> <68D2> <0400> <78C5> <0401> <868C> <0402> <9551> <0403> <508D> <0404> <8C24> <0405> <82DE> <0406> <80DE> <0407> <5305> <0408> <8912> <0409> <5265> <040A> <8584> <040B> <96F9> <040C> <4FDD> <040D> <5821> <040E> <9971> <040F> <5B9D> <0410> <62B1> <0411> <62A5> <0412> <66B4> <0413> <8C79> <0414> <9C8D> <0415> <7206> <0416> <676F> <0417> <7891> <0418> <60B2> <0419> <5351> <041A> <5317> <041B> <8F88> <041C> <80CC> <041D> <8D1D> <041E> <94A1> <041F> <500D> <0420> <72C8> <0421> <5907> <0422> <60EB> <0423> <7119> <0424> <88AB> <0425> <5954> <0426> <82EF> <0427> <672C> <0428> <7B28> <0429> <5D29> <042A> <7EF7> <042B> <752D> <042C> <6CF5> <042D> <8E66> <042E> <8FF8> <042F> <903C> <0430> <9F3B> <0431> <6BD4> <0432> <9119> <0433> <7B14> <0434> <5F7C> <0435> <78A7> <0436> <84D6> <0437> <853D> <0438> <6BD5> <0439> <6BD9> <043A> <6BD6> <043B> <5E01> <043C> <5E87> <043D> <75F9> <043E> <95ED> <043F> <655D> <0440> <5F0A> <0441> <5FC5> <0442> <8F9F> <0443> <58C1> <0444> <81C2> <0445> <907F> <0446> <965B> <0447> <97AD> <0448> <8FB9> <0449> <7F16> <044A> <8D2C> <044B> <6241> <044C> <4FBF> endbfchar 100 beginbfchar <044D> <53D8> <044E> <535E> <0451> <8FAB> <0452> <904D> <0453> <6807> <0454> <5F6A> <0455> <8198> <0456> <8868> <0457> <9CD6> <0458> <618B> <0459> <522B> <045A> <762A> <045B> <5F6C> <045C> <658C> <045D> <6FD2> <045E> <6EE8> <045F> <5BBE> <0460> <6448> <0461> <5175> <0462> <51B0> <0463> <67C4> <0464> <4E19> <0465> <79C9> <0466> <997C> <0467> <70B3> <0468> <75C5> <0469> <5E76> <046A> <73BB> <046B> <83E0> <046C> <64AD> <046D> <62E8> <046E> <94B5> <046F> <6CE2> <0470> <535A> <0471> <52C3> <0472> <640F> <0473> <94C2> <0474> <7B94> <0475> <4F2F> <0476> <5E1B> <0477> <8236> <0478> <8116> <0479> <818A> <047A> <6E24> <047B> <6CCA> <047C> <9A73> <047D> <6355> <047E> <535C> <047F> <54FA> <0480> <8865> <0481> <57E0> <0482> <4E0D> <0483> <5E03> <0484> <6B65> <0485> <7C3F> <0486> <90E8> <0487> <6016> <0488> <64E6> <0489> <731C> <048A> <88C1> <048B> <6750> <048C> <624D> <048D> <8D22> <048E> <776C> <048F> <8E29> <0490> <91C7> <0491> <5F69> <0492> <83DC> <0493> <8521> <0494> <9910> <0495> <53C2> <0496> <8695> <0497> <6B8B> <0498> <60ED> <0499> <60E8> <049A> <707F> <049B> <82CD> <049C> <8231> <049D> <4ED3> <049E> <6CA7> <049F> <85CF> <04A0> <64CD> <04A1> <7CD9> <04A2> <69FD> <04A3> <66F9> <04A4> <8349> <04A5> <5395> <04A6> <7B56> <04A7> <4FA7> <04A8> <518C> <04A9> <6D4B> <04AA> <5C42> <04AB> <8E6D> <04AC> <63D2> <04AD> <53C9> <04AE> <832C> <04AF> <8336> <04B0> <67E5> <04B1> <78B4> <04B2> <643D> endbfchar 100 beginbfchar <04B3> <5BDF> <04B4> <5C94> <04B5> <5DEE> <04B6> <8BE7> <04B7> <62C6> <04B8> <67F4> <04B9> <8C7A> <04BA> <6400> <04BB> <63BA> <04BC> <8749> <04BD> <998B> <04BE> <8C17> <04BF> <7F20> <04C0> <94F2> <04C1> <4EA7> <04C2> <9610> <04C3> <98A4> <04C4> <660C> <04C5> <7316> <04C6> <573A> <04C7> <5C1D> <04C8> <5E38> <04C9> <957F> <04CA> <507F> <04CB> <80A0> <04CC> <5382> <04CD> <655E> <04CE> <7545> <04CF> <5531> <04D0> <5021> <04D1> <8D85> <04D2> <6284> <04D3> <949E> <04D4> <671D> <04D5> <5632> <04D6> <6F6E> <04D7> <5DE2> <04D8> <5435> <04D9> <7092> <04DA> <8F66> <04DB> <626F> <04DC> <64A4> <04DD> <63A3> <04DE> <5F7B> <04DF> <6F88> <04E0> <90F4> <04E1> <81E3> <04E2> <8FB0> <04E3> <5C18> <04E4> <6668> <04E5> <5FF1> <04E6> <6C89> <04E7> <9648> <04E8> <8D81> <04E9> <886C> <04EA> <6491> <04EB> <79F0> <04EC> <57CE> <04ED> <6A59> <04EE> <6210> <04EF> <5448> <04F0> <4E58> <04F1> <7A0B> <04F2> <60E9> <04F3> <6F84> <04F4> <8BDA> <04F5> <627F> <04F6> <901E> <04F7> <9A8B> <04F8> <79E4> <04F9> <5403> <04FA> <75F4> <04FB> <6301> <04FC> <5319> <04FD> <6C60> <04FE> <8FDF> <04FF> <5F1B> <0500> <9A70> <0501> <803B> <0502> <9F7F> <0503> <4F88> <0504> <5C3A> <0505> <8D64> <0506> <7FC5> <0507> <65A5> <0508> <70BD> <0509> <5145> <050A> <51B2> <050B> <866B> <050C> <5D07> <050D> <5BA0> <050E> <62BD> <050F> <916C> <0510> <7574> <0511> <8E0C> <0512> <7A20> <0513> <6101> <0514> <7B79> <0515> <4EC7> <0516> <7EF8> endbfchar 100 beginbfchar <0517> <7785> <0518> <4E11> <0519> <81ED> <051A> <521D> <051B> <51FA> <051C> <6A71> <051D> <53A8> <051E> <8E87> <051F> <9504> <0520> <96CF> <0521> <6EC1> <0522> <9664> <0523> <695A> <0524> <7840> <0525> <50A8> <0526> <77D7> <0527> <6410> <0528> <89E6> <0529> <5904> <052A> <63E3> <052B> <5DDD> <052C> <7A7F> <052D> <693D> <052E> <4F20> <052F> <8239> <0530> <5598> <0531> <4E32> <0532> <75AE> <0533> <7A97> <0534> <5E62> <0535> <5E8A> <0536> <95EF> <0537> <521B> <0538> <5439> <0539> <708A> <053A> <6376> <053B> <9524> <053C> <5782> <053D> <6625> <053E> <693F> <053F> <9187> <0540> <5507> <0541> <6DF3> <0542> <7EAF> <0543> <8822> <0544> <6233> <0545> <7EF0> <0546> <75B5> <0547> <8328> <0548> <78C1> <0549> <96CC> <054A> <8F9E> <054B> <6148> <054C> <74F7> <054D> <8BCD> <054E> <6B64> <054F> <523A> <0550> <8D50> <0551> <6B21> <0552> <806A> <0553> <8471> <0554> <56F1> <0555> <5306> <0556> <4ECE> <0557> <4E1B> <0558> <51D1> <0559> <7C97> <055A> <918B> <055B> <7C07> <055C> <4FC3> <055D> <8E7F> <055E> <7BE1> <055F> <7A9C> <0560> <6467> <0561> <5D14> <0562> <50AC> <0563> <8106> <0564> <7601> <0565> <7CB9> <0566> <6DEC> <0567> <7FE0> <0568> <6751> <0569> <5B58> <056A> <5BF8> <056B> <78CB> <056C> <64AE> <056D> <6413> <056E> <63AA> <056F> <632B> <0570> <9519> <0571> <642D> <0572> <8FBE> <0573> <7B54> <0574> <7629> <0575> <6253> <0576> <5927> <0577> <5446> <0578> <6B79> <0579> <50A3> <057A> <6234> endbfchar 100 beginbfchar <057B> <5E26> <057C> <6B86> <057D> <4EE3> <057E> <8D37> <057F> <888B> <0580> <5F85> <0581> <902E> <0582> <6020> <0583> <803D> <0584> <62C5> <0585> <4E39> <0586> <5355> <0587> <90F8> <0588> <63B8> <0589> <80C6> <058A> <65E6> <058B> <6C2E> <058C> <4F46> <058D> <60EE> <058E> <6DE1> <058F> <8BDE> <0590> <5F39> <0591> <86CB> <0592> <5F53> <0593> <6321> <0594> <515A> <0595> <8361> <0596> <6863> <0597> <5200> <0598> <6363> <0599> <8E48> <059A> <5012> <059B> <5C9B> <059C> <7977> <059D> <5BFC> <059E> <5230> <059F> <7A3B> <05A0> <60BC> <05A1> <9053> <05A2> <76D7> <05A3> <5FB7> <05A4> <5F97> <05A5> <7684> <05A6> <8E6C> <05A7> <706F> <05A8> <767B> <05A9> <7B49> <05AA> <77AA> <05AB> <51F3> <05AC> <9093> <05AD> <5824> <05AE> <4F4E> <05AF> <6EF4> <05B0> <8FEA> <05B1> <654C> <05B2> <7B1B> <05B3> <72C4> <05B4> <6DA4> <05B5> <7FDF> <05B6> <5AE1> <05B7> <62B5> <05B8> <5E95> <05B9> <5730> <05BA> <8482> <05BB> <7B2C> <05BC> <5E1D> <05BD> <5F1F> <05BE> <9012> <05BF> <7F14> <05C0> <98A0> <05C1> <6382> <05C2> <6EC7> <05C3> <7898> <05C4> <70B9> <05C5> <5178> <05C6> <975B> <05C7> <57AB> <05C8> <7535> <05C9> <4F43> <05CA> <7538> <05CB> <5E97> <05CC> <60E6> <05CD> <5960> <05CE> <6DC0> <05CF> <6BBF> <05D0> <7889> <05D1> <53FC> <05D2> <96D5> <05D3> <51CB> <05D4> <5201> <05D5> <6389> <05D6> <540A> <05D7> <9493> <05D8> <8C03> <05D9> <8DCC> <05DA> <7239> <05DB> <789F> <05DC> <8776> <05DD> <8FED> <05DE> <8C0D> endbfchar 100 beginbfchar <05DF> <53E0> <05E0> <4E01> <05E1> <76EF> <05E2> <53EE> <05E3> <9489> <05E4> <9876> <05E5> <9F0E> <05E6> <952D> <05E7> <5B9A> <05E8> <8BA2> <05E9> <4E22> <05EA> <4E1C> <05EB> <51AC> <05EC> <8463> <05ED> <61C2> <05EE> <52A8> <05EF> <680B> <05F0> <4F97> <05F1> <606B> <05F2> <51BB> <05F3> <6D1E> <05F4> <515C> <05F5> <6296> <05F6> <6597> <05F7> <9661> <05F8> <8C46> <05F9> <9017> <05FA> <75D8> <05FB> <90FD> <05FC> <7763> <05FD> <6BD2> <05FE> <728A> <05FF> <72EC> <0600> <8BFB> <0601> <5835> <0602> <7779> <0603> <8D4C> <0604> <675C> <0605> <9540> <0606> <809A> <0607> <5EA6> <0608> <6E21> <0609> <5992> <060A> <7AEF> <060B> <77ED> <060C> <953B> <060D> <6BB5> <060E> <65AD> <060F> <7F0E> <0610> <5806> <0611> <5151> <0612> <961F> <0613> <5BF9> <0614> <58A9> <0615> <5428> <0616> <8E72> <0617> <6566> <0618> <987F> <0619> <56E4> <061A> <949D> <061B> <76FE> <061C> <9041> <061D> <6387> <061E> <54C6> <061F> <591A> <0620> <593A> <0621> <579B> <0622> <8EB2> <0623> <6735> <0624> <8DFA> <0625> <8235> <0626> <5241> <0627> <60F0> <0628> <5815> <0629> <86FE> <062A> <5CE8> <062B> <9E45> <062C> <4FC4> <062D> <989D> <062E> <8BB9> <062F> <5A25> <0630> <6076> <0631> <5384> <0632> <627C> <0633> <904F> <0634> <9102> <0635> <997F> <0636> <6069> <0637> <800C> <0638> <513F> <0639> <8033> <063A> <5C14> <063B> <9975> <063C> <6D31> <063D> <4E8C> <063E> <8D30> <063F> <53D1> <0640> <7F5A> <0641> <7B4F> <0642> <4F10> endbfchar 100 beginbfchar <0643> <4E4F> <0644> <9600> <0645> <6CD5> <0646> <73D0> <0647> <85E9> <0648> <5E06> <0649> <756A> <064A> <7FFB> <064B> <6A0A> <064C> <77FE> <064D> <9492> <064E> <7E41> <064F> <51E1> <0650> <70E6> <0651> <53CD> <0652> <8FD4> <0653> <8303> <0654> <8D29> <0655> <72AF> <0656> <996D> <0657> <6CDB> <0658> <574A> <0659> <82B3> <065A> <65B9> <065B> <80AA> <065C> <623F> <065D> <9632> <065E> <59A8> <065F> <4EFF> <0660> <8BBF> <0661> <7EBA> <0662> <653E> <0663> <83F2> <0664> <975E> <0665> <5561> <0666> <98DE> <0667> <80A5> <0668> <532A> <0669> <8BFD> <066A> <5420> <066B> <80BA> <066C> <5E9F> <066D> <6CB8> <066E> <8D39> <066F> <82AC> <0670> <915A> <0671> <5429> <0672> <6C1B> <0673> <5206> <0674> <7EB7> <0675> <575F> <0676> <711A> <0677> <6C7E> <0678> <7C89> <0679> <594B> <067A> <4EFD> <067B> <5FFF> <067C> <6124> <067D> <7CAA> <067E> <4E30> <067F> <5C01> <0680> <67AB> <0681> <8702> <0682> <5CF0> <0683> <950B> <0684> <98CE> <0685> <75AF> <0686> <70FD> <0687> <9022> <0688> <51AF> <0689> <7F1D> <068A> <8BBD> <068B> <5949> <068C> <51E4> <068D> <4F5B> <068E> <5426> <068F> <592B> <0690> <6577> <0691> <80A4> <0692> <5B75> <0693> <6276> <0694> <62C2> <0695> <8F90> <0696> <5E45> <0697> <6C1F> <0698> <7B26> <0699> <4F0F> <069A> <4FD8> <069B> <670D> <069C> <6D6E> <069D> <6DAA> <069E> <798F> <069F> <88B1> <06A0> <5F17> <06A1> <752B> <06A2> <629A> <06A3> <8F85> <06A4> <4FEF> <06A5> <91DC> <06A6> <65A7> endbfchar 100 beginbfchar <06A7> <812F> <06A8> <8151> <06A9> <5E9C> <06AA> <8150> <06AB> <8D74> <06AC> <526F> <06AD> <8986> <06AE> <8D4B> <06AF> <590D> <06B0> <5085> <06B1> <4ED8> <06B2> <961C> <06B3> <7236> <06B4> <8179> <06B5> <8D1F> <06B6> <5BCC> <06B7> <8BA3> <06B8> <9644> <06B9> <5987> <06BA> <7F1A> <06BB> <5490> <06BC> <5676> <06BD> <560E> <06BE> <8BE5> <06BF> <6539> <06C0> <6982> <06C1> <9499> <06C2> <76D6> <06C3> <6E89> <06C4> <5E72> <06C5> <7518> <06C6> <6746> <06C7> <67D1> <06C8> <7AFF> <06C9> <809D> <06CA> <8D76> <06CB> <611F> <06CC> <79C6> <06CD> <6562> <06CE> <8D63> <06CF> <5188> <06D0> <521A> <06D1> <94A2> <06D2> <7F38> <06D3> <809B> <06D4> <7EB2> <06D5> <5C97> <06D6> <6E2F> <06D7> <6760> <06D8> <7BD9> <06D9> <768B> <06DA> <9AD8> <06DB> <818F> <06DC> <7F94> <06DD> <7CD5> <06DE> <641E> <06DF> <9550> <06E0> <7A3F> <06E1> <544A> <06E2> <54E5> <06E3> <6B4C> <06E4> <6401> <06E5> <6208> <06E6> <9E3D> <06E7> <80F3> <06E8> <7599> <06E9> <5272> <06EA> <9769> <06EB> <845B> <06EC> <683C> <06ED> <86E4> <06EE> <9601> <06EF> <9694> <06F0> <94EC> <06F1> <4E2A> <06F2> <5404> <06F3> <7ED9> <06F4> <6839> <06F5> <8DDF> <06F6> <8015> <06F7> <66F4> <06F8> <5E9A> <06F9> <7FB9> <06FA> <57C2> <06FB> <803F> <06FC> <6897> <06FD> <5DE5> <06FE> <653B> <06FF> <529F> <0700> <606D> <0701> <9F9A> <0702> <4F9B> <0703> <8EAC> <0704> <516C> <0705> <5BAB> <0706> <5F13> <0707> <5DE9> <0708> <6C5E> <0709> <62F1> <070A> <8D21> endbfchar 100 beginbfchar <070B> <5171> <070C> <94A9> <070D> <52FE> <070E> <6C9F> <070F> <82DF> <0710> <72D7> <0711> <57A2> <0712> <6784> <0713> <8D2D> <0714> <591F> <0715> <8F9C> <0716> <83C7> <0717> <5495> <0718> <7B8D> <0719> <4F30> <071A> <6CBD> <071B> <5B64> <071C> <59D1> <071D> <9F13> <071E> <53E4> <071F> <86CA> <0720> <9AA8> <0721> <8C37> <0722> <80A1> <0723> <6545> <0724> <987E> <0725> <56FA> <0726> <96C7> <0727> <522E> <0728> <74DC> <0729> <5250> <072A> <5BE1> <072B> <6302> <072C> <8902> <072D> <4E56> <072E> <62D0> <072F> <602A> <0730> <68FA> <0731> <5173> <0732> <5B98> <0733> <51A0> <0734> <89C2> <0735> <7BA1> <0736> <9986> <0737> <7F50> <0738> <60EF> <0739> <704C> <073A> <8D2F> <073B> <5149> <073C> <5E7F> <073D> <901B> <073E> <7470> <073F> <89C4> <0740> <572D> <0741> <7845> <0742> <5F52> <0743> <9F9F> <0744> <95FA> <0745> <8F68> <0746> <9B3C> <0747> <8BE1> <0748> <7678> <0749> <6842> <074A> <67DC> <074B> <8DEA> <074C> <8D35> <074D> <523D> <074E> <8F8A> <074F> <6EDA> <0750> <68CD> <0751> <9505> <0752> <90ED> <0753> <56FD> <0754> <679C> <0755> <88F9> <0756> <8FC7> <0757> <54C8> <0758> <9AB8> <0759> <5B69> <075A> <6D77> <075B> <6C26> <075C> <4EA5> <075D> <5BB3> <075E> <9A87> <075F> <9163> <0760> <61A8> <0761> <90AF> <0762> <97E9> <0763> <542B> <0764> <6DB5> <0765> <5BD2> <0766> <51FD> <0767> <558A> <0768> <7F55> <0769> <7FF0> <076A> <64BC> <076B> <634D> <076C> <65F1> <076D> <61BE> <076E> <608D> endbfchar 100 beginbfchar <076F> <710A> <0770> <6C57> <0771> <6C49> <0772> <592F> <0773> <676D> <0774> <822A> <0775> <58D5> <0776> <568E> <0777> <8C6A> <0778> <6BEB> <0779> <90DD> <077A> <597D> <077B> <8017> <077C> <53F7> <077D> <6D69> <077E> <5475> <077F> <559D> <0780> <8377> <0781> <83CF> <0782> <6838> <0783> <79BE> <0784> <548C> <0785> <4F55> <0786> <5408> <0787> <76D2> <0788> <8C89> <0789> <9602> <078A> <6CB3> <078B> <6DB8> <078C> <8D6B> <078D> <8910> <078E> <9E64> <078F> <8D3A> <0790> <563F> <0791> <9ED1> <0792> <75D5> <0793> <5F88> <0794> <72E0> <0795> <6068> <0796> <54FC> <0797> <4EA8> <0798> <6A2A> <0799> <8861> <079A> <6052> <079B> <8F70> <079C> <54C4> <079D> <70D8> <079E> <8679> <079F> <9E3F> <07A0> <6D2A> <07A1> <5B8F> <07A2> <5F18> <07A3> <7EA2> <07A4> <5589> <07A5> <4FAF> <07A6> <7334> <07A7> <543C> <07A8> <539A> <07A9> <5019> <07AA> <540E> <07AB> <547C> <07AC> <4E4E> <07AD> <5FFD> <07AE> <745A> <07AF> <58F6> <07B0> <846B> <07B1> <80E1> <07B2> <8774> <07B3> <72D0> <07B4> <7CCA> <07B5> <6E56> <07B6> <5F27> <07B7> <864E> <07B8> <552C> <07B9> <62A4> <07BA> <4E92> <07BB> <6CAA> <07BC> <6237> <07BD> <82B1> <07BE> <54D7> <07BF> <534E> <07C0> <733E> <07C1> <6ED1> <07C2> <753B> <07C3> <5212> <07C4> <5316> <07C5> <8BDD> <07C6> <69D0> <07C7> <5F8A> <07C8> <6000> <07C9> <6DEE> <07CA> <574F> <07CB> <6B22> <07CC> <73AF> <07CD> <6853> <07CE> <8FD8> <07CF> <7F13> <07D0> <6362> <07D1> <60A3> <07D2> <5524> endbfchar 100 beginbfchar <07D3> <75EA> <07D4> <8C62> <07D5> <7115> <07D6> <6DA3> <07D7> <5BA6> <07D8> <5E7B> <07D9> <8352> <07DA> <614C> <07DB> <9EC4> <07DC> <78FA> <07DD> <8757> <07DE> <7C27> <07DF> <7687> <07E0> <51F0> <07E1> <60F6> <07E2> <714C> <07E3> <6643> <07E4> <5E4C> <07E5> <604D> <07E6> <8C0E> <07E7> <7070> <07E8> <6325> <07E9> <8F89> <07EA> <5FBD> <07EB> <6062> <07EC> <86D4> <07ED> <56DE> <07EE> <6BC1> <07EF> <6094> <07F0> <6167> <07F1> <5349> <07F2> <60E0> <07F3> <6666> <07F4> <8D3F> <07F5> <79FD> <07F6> <4F1A> <07F7> <70E9> <07F8> <6C47> <07F9> <8BB3> <07FA> <8BF2> <07FB> <7ED8> <07FC> <8364> <07FD> <660F> <07FE> <5A5A> <07FF> <9B42> <0800> <6D51> <0801> <6DF7> <0802> <8C41> <0803> <6D3B> <0804> <4F19> <0805> <706B> <0806> <83B7> <0807> <6216> <0808> <60D1> <0809> <970D> <080A> <8D27> <080B> <7978> <080C> <51FB> <080D> <573E> <080E> <57FA> <080F> <673A> <0810> <7578> <0811> <7A3D> <0812> <79EF> <0813> <7B95> <0814> <808C> <0815> <9965> <0816> <8FF9> <0817> <6FC0> <0818> <8BA5> <0819> <9E21> <081A> <59EC> <081B> <7EE9> <081C> <7F09> <081D> <5409> <081E> <6781> <081F> <68D8> <0820> <8F91> <0821> <7C4D> <0822> <96C6> <0823> <53CA> <0824> <6025> <0825> <75BE> <0826> <6C72> <0827> <5373> <0828> <5AC9> <0829> <7EA7> <082A> <6324> <082B> <51E0> <082C> <810A> <082D> <5DF1> <082E> <84DF> <082F> <6280> <0830> <5180> <0831> <5B63> <0832> <4F0E> <0833> <796D> <0834> <5242> <0835> <60B8> <0836> <6D4E> endbfchar 100 beginbfchar <0837> <5BC4> <0838> <5BC2> <0839> <8BA1> <083A> <8BB0> <083B> <65E2> <083C> <5FCC> <083D> <9645> <083E> <5993> <083F> <7EE7> <0840> <7EAA> <0841> <5609> <0842> <67B7> <0843> <5939> <0844> <4F73> <0845> <5BB6> <0846> <52A0> <0847> <835A> <0848> <988A> <0849> <8D3E> <084A> <7532> <084B> <94BE> <084C> <5047> <084D> <7A3C> <084E> <4EF7> <084F> <67B6> <0850> <9A7E> <0851> <5AC1> <0852> <6B7C> <0853> <76D1> <0854> <575A> <0855> <5C16> <0856> <7B3A> <0857> <95F4> <0858> <714E> <0859> <517C> <085A> <80A9> <085B> <8270> <085C> <5978> <085D> <7F04> <085E> <8327> <085F> <68C0> <0860> <67EC> <0861> <78B1> <0862> <7877> <0863> <62E3> <0864> <6361> <0865> <7B80> <0866> <4FED> <0867> <526A> <0868> <51CF> <0869> <8350> <086A> <69DB> <086B> <9274> <086C> <8DF5> <086D> <8D31> <086E> <89C1> <086F> <952E> <0870> <7BAD> <0871> <4EF6> <0872> <5065> <0873> <8230> <0874> <5251> <0875> <996F> <0876> <6E10> <0877> <6E85> <0878> <6DA7> <0879> <5EFA> <087A> <50F5> <087B> <59DC> <087C> <5C06> <087D> <6D46> <087E> <6C5F> <087F> <7586> <0880> <848B> <0881> <6868> <0882> <5956> <0883> <8BB2> <0884> <5320> <0885> <9171> <0886> <964D> <0887> <8549> <0888> <6912> <0889> <7901> <088A> <7126> <088B> <80F6> <088C> <4EA4> <088D> <90CA> <088E> <6D47> <088F> <9A84> <0890> <5A07> <0891> <56BC> <0892> <6405> <0893> <94F0> <0894> <77EB> <0895> <4FA5> <0896> <811A> <0897> <72E1> <0898> <89D2> <0899> <997A> <089A> <7F34> endbfchar 100 beginbfchar <089B> <7EDE> <089C> <527F> <089D> <6559> <089E> <9175> <089F> <8F7F> <08A0> <8F83> <08A1> <53EB> <08A2> <7A96> <08A3> <63ED> <08A4> <63A5> <08A5> <7686> <08A6> <79F8> <08A7> <8857> <08A8> <9636> <08A9> <622A> <08AA> <52AB> <08AB> <8282> <08AC> <6854> <08AD> <6770> <08AE> <6377> <08AF> <776B> <08B0> <7AED> <08B1> <6D01> <08B2> <7ED3> <08B3> <89E3> <08B4> <59D0> <08B5> <6212> <08B6> <85C9> <08B7> <82A5> <08B8> <754C> <08B9> <501F> <08BA> <4ECB> <08BB> <75A5> <08BC> <8BEB> <08BD> <5C4A> <08BE> <5DFE> <08BF> <7B4B> <08C0> <65A4> <08C1> <91D1> <08C2> <4ECA> <08C3> <6D25> <08C4> <895F> <08C5> <7D27> <08C6> <9526> <08C7> <4EC5> <08C8> <8C28> <08C9> <8FDB> <08CA> <9773> <08CB> <664B> <08CC> <7981> <08CD> <8FD1> <08CE> <70EC> <08CF> <6D78> <08D0> <5C3D> <08D1> <52B2> <08D2> <8346> <08D3> <5162> <08D4> <830E> <08D5> <775B> <08D6> <6676> <08D7> <9CB8> <08D8> <4EAC> <08D9> <60CA> <08DA> <7CBE> <08DB> <7CB3> <08DC> <7ECF> <08DD> <4E95> <08DE> <8B66> <08DF> <666F> <08E0> <9888> <08E1> <9759> <08E2> <5883> <08E3> <656C> <08E4> <955C> <08E5> <5F84> <08E6> <75C9> <08E7> <9756> <08E8> <7ADF> <08E9> <7ADE> <08EA> <51C0> <08EB> <70AF> <08EC> <7A98> <08ED> <63EA> <08EE> <7A76> <08EF> <7EA0> <08F0> <7396> <08F1> <97ED> <08F2> <4E45> <08F3> <7078> <08F4> <4E5D> <08F5> <9152> <08F6> <53A9> <08F7> <6551> <08F8> <65E7> <08F9> <81FC> <08FA> <8205> <08FB> <548E> <08FC> <5C31> <08FD> <759A> <08FE> <97A0> endbfchar 100 beginbfchar <08FF> <62D8> <0900> <72D9> <0901> <75BD> <0902> <5C45> <0903> <9A79> <0904> <83CA> <0905> <5C40> <0906> <5480> <0907> <77E9> <0908> <4E3E> <0909> <6CAE> <090A> <805A> <090B> <62D2> <090C> <636E> <090D> <5DE8> <090E> <5177> <090F> <8DDD> <0910> <8E1E> <0911> <952F> <0912> <4FF1> <0913> <53E5> <0914> <60E7> <0915> <70AC> <0916> <5267> <0917> <6350> <0918> <9E43> <0919> <5A1F> <091A> <5026> <091B> <7737> <091C> <5377> <091D> <7EE2> <091E> <6485> <091F> <652B> <0920> <6289> <0921> <6398> <0922> <5014> <0923> <7235> <0924> <89C9> <0925> <51B3> <0926> <8BC0> <0927> <7EDD> <0928> <5747> <0929> <83CC> <092A> <94A7> <092B> <519B> <092C> <541B> <092D> <5CFB> <092E> <4FCA> <092F> <7AE3> <0930> <6D5A> <0931> <90E1> <0932> <9A8F> <0933> <5580> <0934> <5496> <0935> <5361> <0936> <54AF> <0937> <5F00> <0938> <63E9> <0939> <6977> <093A> <51EF> <093B> <6168> <093C> <520A> <093D> <582A> <093E> <52D8> <093F> <574E> <0940> <780D> <0941> <770B> <0942> <5EB7> <0943> <6177> <0944> <7CE0> <0945> <625B> <0946> <6297> <0947> <4EA2> <0948> <7095> <0949> <8003> <094A> <62F7> <094B> <70E4> <094C> <9760> <094D> <5777> <094E> <82DB> <094F> <67EF> <0950> <68F5> <0951> <78D5> <0952> <9897> <0953> <79D1> <0954> <58F3> <0955> <54B3> <0956> <53EF> <0957> <6E34> <0958> <514B> <0959> <523B> <095A> <5BA2> <095B> <8BFE> <095C> <80AF> <095D> <5543> <095E> <57A6> <095F> <6073> <0960> <5751> <0961> <542D> <0962> <7A7A> endbfchar 100 beginbfchar <0963> <6050> <0964> <5B54> <0965> <63A7> <0966> <62A0> <0967> <53E3> <0968> <6263> <0969> <5BC7> <096A> <67AF> <096B> <54ED> <096C> <7A9F> <096D> <82E6> <096E> <9177> <096F> <5E93> <0970> <88E4> <0971> <5938> <0972> <57AE> <0973> <630E> <0974> <8DE8> <0975> <80EF> <0976> <5757> <0977> <7B77> <0978> <4FA9> <0979> <5FEB> <097A> <5BBD> <097B> <6B3E> <097C> <5321> <097D> <7B50> <097E> <72C2> <097F> <6846> <0980> <77FF> <0981> <7736> <0982> <65F7> <0983> <51B5> <0984> <4E8F> <0985> <76D4> <0986> <5CBF> <0987> <7AA5> <0988> <8475> <0989> <594E> <098A> <9B41> <098B> <5080> <098C> <9988> <098D> <6127> <098E> <6E83> <098F> <5764> <0990> <6606> <0991> <6346> <0992> <56F0> <0993> <62EC> <0994> <6269> <0995> <5ED3> <0996> <9614> <0997> <5783> <0998> <62C9> <0999> <5587> <099A> <8721> <099B> <814A> <099C> <8FA3> <099D> <5566> <099E> <83B1> <099F> <6765> <09A0> <8D56> <09A1> <84DD> <09A2> <5A6A> <09A3> <680F> <09A4> <62E6> <09A5> <7BEE> <09A6> <9611> <09A7> <5170> <09A8> <6F9C> <09A9> <8C30> <09AA> <63FD> <09AB> <89C8> <09AC> <61D2> <09AD> <7F06> <09AE> <70C2> <09AF> <6EE5> <09B0> <7405> <09B1> <6994> <09B2> <72FC> <09B3> <5ECA> <09B4> <90CE> <09B5> <6717> <09B6> <6D6A> <09B7> <635E> <09B8> <52B3> <09B9> <7262> <09BA> <8001> <09BB> <4F6C> <09BC> <59E5> <09BD> <916A> <09BE> <70D9> <09BF> <6D9D> <09C0> <52D2> <09C1> <4E50> <09C2> <96F7> <09C3> <956D> <09C4> <857E> <09C5> <78CA> <09C6> <7D2F> endbfchar 100 beginbfchar <09C7> <5121> <09C8> <5792> <09C9> <64C2> <09CA> <808B> <09CB> <7C7B> <09CC> <6CEA> <09CD> <68F1> <09CE> <695E> <09CF> <51B7> <09D0> <5398> <09D1> <68A8> <09D2> <7281> <09D3> <9ECE> <09D4> <7BF1> <09D5> <72F8> <09D6> <79BB> <09D7> <6F13> <09D8> <7406> <09D9> <674E> <09DA> <91CC> <09DB> <9CA4> <09DC> <793C> <09DD> <8389> <09DE> <8354> <09DF> <540F> <09E0> <6817> <09E1> <4E3D> <09E2> <5389> <09E3> <52B1> <09E4> <783E> <09E5> <5386> <09E6> <5229> <09E7> <5088> <09E8> <4F8B> <09E9> <4FD0> <09EA> <75E2> <09EB> <7ACB> <09EC> <7C92> <09ED> <6CA5> <09EE> <96B6> <09EF> <529B> <09F0> <7483> <09F1> <54E9> <09F2> <4FE9> <09F3> <8054> <09F4> <83B2> <09F5> <8FDE> <09F6> <9570> <09F7> <5EC9> <09F8> <601C> <09F9> <6D9F> <09FA> <5E18> <09FB> <655B> <09FC> <8138> <09FD> <94FE> <09FE> <604B> <09FF> <70BC> <0A00> <7EC3> <0A01> <7CAE> <0A02> <51C9> <0A03> <6881> <0A04> <7CB1> <0A05> <826F> <0A06> <4E24> <0A07> <8F86> <0A08> <91CF> <0A09> <667E> <0A0A> <4EAE> <0A0B> <8C05> <0A0C> <64A9> <0A0D> <804A> <0A0E> <50DA> <0A0F> <7597> <0A10> <71CE> <0A11> <5BE5> <0A12> <8FBD> <0A13> <6F66> <0A14> <4E86> <0A15> <6482> <0A16> <9563> <0A17> <5ED6> <0A18> <6599> <0A19> <5217> <0A1A> <88C2> <0A1B> <70C8> <0A1C> <52A3> <0A1D> <730E> <0A1E> <7433> <0A1F> <6797> <0A20> <78F7> <0A21> <9716> <0A22> <4E34> <0A23> <90BB> <0A24> <9CDE> <0A25> <6DCB> <0A26> <51DB> <0A27> <8D41> <0A28> <541D> <0A29> <62CE> <0A2A> <73B2> endbfchar 100 beginbfchar <0A2B> <83F1> <0A2C> <96F6> <0A2D> <9F84> <0A2E> <94C3> <0A2F> <4F36> <0A30> <7F9A> <0A31> <51CC> <0A32> <7075> <0A33> <9675> <0A34> <5CAD> <0A35> <9886> <0A36> <53E6> <0A37> <4EE4> <0A38> <6E9C> <0A39> <7409> <0A3A> <69B4> <0A3B> <786B> <0A3C> <998F> <0A3D> <7559> <0A3E> <5218> <0A3F> <7624> <0A40> <6D41> <0A41> <67F3> <0A42> <516D> <0A43> <9F99> <0A44> <804B> <0A45> <5499> <0A46> <7B3C> <0A47> <7ABF> <0A48> <9686> <0A49> <5784> <0A4A> <62E2> <0A4B> <9647> <0A4C> <697C> <0A4D> <5A04> <0A4E> <6402> <0A4F> <7BD3> <0A50> <6F0F> <0A51> <964B> <0A52> <82A6> <0A53> <5362> <0A54> <9885> <0A55> <5E90> <0A56> <7089> <0A57> <63B3> <0A58> <5364> <0A59> <864F> <0A5A> <9C81> <0A5B> <9E93> <0A5C> <788C> <0A5D> <9732> <0A5E> <8DEF> <0A5F> <8D42> <0A60> <9E7F> <0A61> <6F5E> <0A62> <7984> <0A63> <5F55> <0A64> <9646> <0A65> <622E> <0A66> <9A74> <0A67> <5415> <0A68> <94DD> <0A69> <4FA3> <0A6A> <65C5> <0A6B> <5C65> <0A6C> <5C61> <0A6D> <7F15> <0A6E> <8651> <0A6F> <6C2F> <0A70> <5F8B> <0A71> <7387> <0A72> <6EE4> <0A73> <7EFF> <0A74> <5CE6> <0A75> <631B> <0A76> <5B6A> <0A77> <6EE6> <0A78> <5375> <0A79> <4E71> <0A7A> <63A0> <0A7B> <7565> <0A7C> <62A1> <0A7D> <8F6E> <0A7E> <4F26> <0A7F> <4ED1> <0A80> <6CA6> <0A81> <7EB6> <0A82> <8BBA> <0A83> <841D> <0A84> <87BA> <0A85> <7F57> <0A86> <903B> <0A87> <9523> <0A88> <7BA9> <0A89> <9AA1> <0A8A> <88F8> <0A8B> <843D> <0A8C> <6D1B> <0A8D> <9A86> <0A8E> <7EDC> endbfchar 100 beginbfchar <0A8F> <5988> <0A90> <9EBB> <0A91> <739B> <0A92> <7801> <0A93> <8682> <0A94> <9A6C> <0A95> <9A82> <0A96> <561B> <0A97> <5417> <0A98> <57CB> <0A99> <4E70> <0A9A> <9EA6> <0A9B> <5356> <0A9C> <8FC8> <0A9D> <8109> <0A9E> <7792> <0A9F> <9992> <0AA0> <86EE> <0AA1> <6EE1> <0AA2> <8513> <0AA3> <66FC> <0AA4> <6162> <0AA5> <6F2B> <0AA6> <8C29> <0AA7> <8292> <0AA8> <832B> <0AA9> <76F2> <0AAA> <6C13> <0AAB> <5FD9> <0AAC> <83BD> <0AAD> <732B> <0AAE> <8305> <0AAF> <951A> <0AB0> <6BDB> <0AB1> <77DB> <0AB2> <94C6> <0AB3> <536F> <0AB4> <8302> <0AB5> <5192> <0AB6> <5E3D> <0AB7> <8C8C> <0AB8> <8D38> <0AB9> <4E48> <0ABA> <73AB> <0ABB> <679A> <0ABC> <6885> <0ABD> <9176> <0ABE> <9709> <0ABF> <7164> <0AC0> <6CA1> <0AC1> <7709> <0AC2> <5A92> <0AC3> <9541> <0AC4> <6BCF> <0AC5> <7F8E> <0AC6> <6627> <0AC7> <5BD0> <0AC8> <59B9> <0AC9> <5A9A> <0ACA> <95E8> <0ACB> <95F7> <0ACC> <4EEC> <0ACD> <840C> <0ACE> <8499> <0ACF> <6AAC> <0AD0> <76DF> <0AD1> <9530> <0AD2> <731B> <0AD3> <68A6> <0AD4> <5B5F> <0AD5> <772F> <0AD6> <919A> <0AD7> <9761> <0AD8> <7CDC> <0AD9> <8FF7> <0ADA> <8C1C> <0ADB> <5F25> <0ADC> <7C73> <0ADD> <79D8> <0ADE> <89C5> <0ADF> <6CCC> <0AE0> <871C> <0AE1> <5BC6> <0AE2> <5E42> <0AE3> <68C9> <0AE4> <7720> <0AE5> <7EF5> <0AE6> <5195> <0AE7> <514D> <0AE8> <52C9> <0AE9> <5A29> <0AEA> <7F05> <0AEB> <9762> <0AEC> <82D7> <0AED> <63CF> <0AEE> <7784> <0AEF> <85D0> <0AF0> <79D2> <0AF1> <6E3A> <0AF2> <5E99> endbfchar 100 beginbfchar <0AF3> <5999> <0AF4> <8511> <0AF5> <706D> <0AF6> <6C11> <0AF7> <62BF> <0AF8> <76BF> <0AF9> <654F> <0AFA> <60AF> <0AFB> <95FD> <0AFC> <660E> <0AFD> <879F> <0AFE> <9E23> <0AFF> <94ED> <0B00> <540D> <0B01> <547D> <0B02> <8C2C> <0B05> <8611> <0B06> <6A21> <0B07> <819C> <0B08> <78E8> <0B09> <6469> <0B0A> <9B54> <0B0B> <62B9> <0B0C> <672B> <0B0D> <83AB> <0B0E> <58A8> <0B0F> <9ED8> <0B10> <6CAB> <0B11> <6F20> <0B12> <5BDE> <0B13> <964C> <0B14> <8C0B> <0B15> <725F> <0B16> <67D0> <0B17> <62C7> <0B18> <7261> <0B19> <4EA9> <0B1A> <59C6> <0B1B> <6BCD> <0B1C> <5893> <0B1D> <66AE> <0B1E> <5E55> <0B1F> <52DF> <0B20> <6155> <0B21> <6728> <0B22> <76EE> <0B23> <7766> <0B24> <7267> <0B25> <7A46> <0B26> <62FF> <0B27> <54EA> <0B28> <5450> <0B29> <94A0> <0B2A> <90A3> <0B2B> <5A1C> <0B2C> <7EB3> <0B2D> <6C16> <0B2E> <4E43> <0B2F> <5976> <0B30> <8010> <0B31> <5948> <0B32> <5357> <0B33> <7537> <0B34> <96BE> <0B35> <56CA> <0B36> <6320> <0B37> <8111> <0B38> <607C> <0B39> <95F9> <0B3A> <6DD6> <0B3B> <5462> <0B3C> <9981> <0B3D> <5185> <0B3E> <5AE9> <0B3F> <80FD> <0B40> <59AE> <0B41> <9713> <0B42> <502A> <0B43> <6CE5> <0B44> <5C3C> <0B45> <62DF> <0B46> <4F60> <0B47> <533F> <0B48> <817B> <0B49> <9006> <0B4A> <6EBA> <0B4B> <852B> <0B4C> <62C8> <0B4D> <5E74> <0B4E> <78BE> <0B4F> <64B5> <0B50> <637B> <0B51> <5FF5> <0B52> <5A18> <0B53> <917F> <0B54> <9E1F> <0B55> <5C3F> <0B56> <634F> <0B57> <8042> <0B58> <5B7D> endbfchar 100 beginbfchar <0B59> <556E> <0B5A> <954A> <0B5B> <954D> <0B5C> <6D85> <0B5D> <60A8> <0B5E> <67E0> <0B5F> <72DE> <0B60> <51DD> <0B61> <5B81> <0B62> <62E7> <0B63> <6CDE> <0B64> <725B> <0B65> <626D> <0B66> <94AE> <0B67> <7EBD> <0B68> <8113> <0B69> <6D53> <0B6A> <519C> <0B6B> <5F04> <0B6C> <5974> <0B6D> <52AA> <0B6E> <6012> <0B6F> <5973> <0B70> <6696> <0B71> <8650> <0B72> <759F> <0B73> <632A> <0B74> <61E6> <0B75> <7CEF> <0B76> <8BFA> <0B77> <54E6> <0B78> <6B27> <0B79> <9E25> <0B7A> <6BB4> <0B7B> <85D5> <0B7C> <5455> <0B7D> <5076> <0B7E> <6CA4> <0B7F> <556A> <0B80> <8DB4> <0B81> <722C> <0B82> <5E15> <0B83> <6015> <0B84> <7436> <0B85> <62CD> <0B86> <6392> <0B87> <724C> <0B88> <5F98> <0B89> <6E43> <0B8A> <6D3E> <0B8B> <6500> <0B8C> <6F58> <0B8D> <76D8> <0B8E> <78D0> <0B8F> <76FC> <0B90> <7554> <0B91> <5224> <0B92> <53DB> <0B93> <4E53> <0B94> <5E9E> <0B95> <65C1> <0B96> <802A> <0B97> <80D6> <0B98> <629B> <0B99> <5486> <0B9A> <5228> <0B9B> <70AE> <0B9C> <888D> <0B9D> <8DD1> <0B9E> <6CE1> <0B9F> <5478> <0BA0> <80DA> <0BA1> <57F9> <0BA2> <88F4> <0BA3> <8D54> <0BA4> <966A> <0BA5> <914D> <0BA6> <4F69> <0BA7> <6C9B> <0BA8> <55B7> <0BA9> <76C6> <0BAA> <7830> <0BAB> <62A8> <0BAC> <70F9> <0BAD> <6F8E> <0BAE> <5F6D> <0BAF> <84EC> <0BB0> <68DA> <0BB1> <787C> <0BB2> <7BF7> <0BB3> <81A8> <0BB4> <670B> <0BB5> <9E4F> <0BB6> <6367> <0BB7> <78B0> <0BB8> <576F> <0BB9> <7812> <0BBA> <9739> <0BBB> <6279> <0BBC> <62AB> endbfchar 100 beginbfchar <0BBD> <5288> <0BBE> <7435> <0BBF> <6BD7> <0BC0> <5564> <0BC1> <813E> <0BC2> <75B2> <0BC3> <76AE> <0BC4> <5339> <0BC5> <75DE> <0BC6> <50FB> <0BC7> <5C41> <0BC8> <8B6C> <0BC9> <7BC7> <0BCA> <504F> <0BCB> <7247> <0BCC> <9A97> <0BCD> <98D8> <0BCE> <6F02> <0BCF> <74E2> <0BD0> <7968> <0BD1> <6487> <0BD2> <77A5> <0BD3> <62FC> <0BD4> <9891> <0BD5> <8D2B> <0BD6> <54C1> <0BD7> <8058> <0BD8> <4E52> <0BD9> <576A> <0BDA> <82F9> <0BDB> <840D> <0BDC> <5E73> <0BDD> <51ED> <0BDE> <74F6> <0BDF> <8BC4> <0BE0> <5C4F> <0BE1> <5761> <0BE2> <6CFC> <0BE3> <9887> <0BE4> <5A46> <0BE5> <7834> <0BE6> <9B44> <0BE7> <8FEB> <0BE8> <7C95> <0BE9> <5256> <0BEA> <6251> <0BEB> <94FA> <0BEC> <4EC6> <0BED> <8386> <0BEE> <8461> <0BEF> <83E9> <0BF0> <84B2> <0BF1> <57D4> <0BF2> <6734> <0BF3> <5703> <0BF4> <666E> <0BF5> <6D66> <0BF6> <8C31> <0BF7> <66DD> <0BF8> <7011> <0BF9> <671F> <0BFA> <6B3A> <0BFB> <6816> <0BFC> <621A> <0BFD> <59BB> <0BFE> <4E03> <0BFF> <51C4> <0C00> <6F06> <0C01> <67D2> <0C02> <6C8F> <0C03> <5176> <0C04> <68CB> <0C05> <5947> <0C06> <6B67> <0C07> <7566> <0C08> <5D0E> <0C09> <8110> <0C0A> <9F50> <0C0B> <65D7> <0C0C> <7948> <0C0D> <7941> <0C0E> <9A91> <0C0F> <8D77> <0C10> <5C82> <0C11> <4E5E> <0C12> <4F01> <0C13> <542F> <0C14> <5951> <0C15> <780C> <0C16> <5668> <0C17> <6C14> <0C18> <8FC4> <0C19> <5F03> <0C1A> <6C7D> <0C1B> <6CE3> <0C1C> <8BAB> <0C1D> <6390> <0C1E> <6070> <0C1F> <6D3D> <0C20> <7275> endbfchar 100 beginbfchar <0C21> <6266> <0C22> <948E> <0C23> <94C5> <0C24> <5343> <0C25> <8FC1> <0C26> <7B7E> <0C27> <4EDF> <0C28> <8C26> <0C29> <4E7E> <0C2A> <9ED4> <0C2B> <94B1> <0C2C> <94B3> <0C2D> <524D> <0C2E> <6F5C> <0C2F> <9063> <0C30> <6D45> <0C31> <8C34> <0C32> <5811> <0C33> <5D4C> <0C34> <6B20> <0C35> <6B49> <0C36> <67AA> <0C37> <545B> <0C38> <8154> <0C39> <7F8C> <0C3A> <5899> <0C3B> <8537> <0C3C> <5F3A> <0C3D> <62A2> <0C3E> <6A47> <0C3F> <9539> <0C40> <6572> <0C41> <6084> <0C42> <6865> <0C43> <77A7> <0C44> <4E54> <0C45> <4FA8> <0C46> <5DE7> <0C47> <9798> <0C48> <64AC> <0C49> <7FD8> <0C4A> <5CED> <0C4B> <4FCF> <0C4C> <7A8D> <0C4D> <5207> <0C4E> <8304> <0C4F> <4E14> <0C50> <602F> <0C51> <7A83> <0C52> <94A6> <0C53> <4FB5> <0C54> <4EB2> <0C55> <79E6> <0C56> <7434> <0C57> <52E4> <0C58> <82B9> <0C59> <64D2> <0C5A> <79BD> <0C5B> <5BDD> <0C5C> <6C81> <0C5D> <9752> <0C5E> <8F7B> <0C5F> <6C22> <0C60> <503E> <0C61> <537F> <0C62> <6E05> <0C63> <64CE> <0C64> <6674> <0C65> <6C30> <0C66> <60C5> <0C67> <9877> <0C68> <8BF7> <0C69> <5E86> <0C6A> <743C> <0C6B> <7A77> <0C6C> <79CB> <0C6D> <4E18> <0C6E> <90B1> <0C6F> <7403> <0C70> <6C42> <0C71> <56DA> <0C72> <914B> <0C73> <6CC5> <0C74> <8D8B> <0C75> <533A> <0C76> <86C6> <0C77> <66F2> <0C78> <8EAF> <0C79> <5C48> <0C7A> <9A71> <0C7B> <6E20> <0C7C> <53D6> <0C7D> <5A36> <0C7E> <9F8B> <0C7F> <8DA3> <0C80> <53BB> <0C81> <5708> <0C82> <98A7> <0C83> <6743> <0C84> <919B> endbfchar 100 beginbfchar <0C85> <6CC9> <0C86> <5168> <0C87> <75CA> <0C88> <62F3> <0C89> <72AC> <0C8A> <5238> <0C8B> <529D> <0C8C> <7F3A> <0C8D> <7094> <0C8E> <7638> <0C8F> <5374> <0C90> <9E4A> <0C91> <69B7> <0C92> <786E> <0C93> <96C0> <0C94> <88D9> <0C95> <7FA4> <0C96> <7136> <0C97> <71C3> <0C98> <5189> <0C99> <67D3> <0C9A> <74E4> <0C9B> <58E4> <0C9C> <6518> <0C9D> <56B7> <0C9E> <8BA9> <0C9F> <9976> <0CA0> <6270> <0CA1> <7ED5> <0CA2> <60F9> <0CA3> <70ED> <0CA4> <58EC> <0CA5> <4EC1> <0CA6> <4EBA> <0CA7> <5FCD> <0CA8> <97E7> <0CA9> <4EFB> <0CAA> <8BA4> <0CAB> <5203> <0CAC> <598A> <0CAD> <7EAB> <0CAE> <6254> <0CAF> <4ECD> <0CB0> <65E5> <0CB1> <620E> <0CB2> <8338> <0CB3> <84C9> <0CB4> <8363> <0CB5> <878D> <0CB6> <7194> <0CB7> <6EB6> <0CB8> <5BB9> <0CB9> <7ED2> <0CBA> <5197> <0CBB> <63C9> <0CBC> <67D4> <0CBD> <8089> <0CBE> <8339> <0CBF> <8815> <0CC0> <5112> <0CC1> <5B7A> <0CC2> <5982> <0CC3> <8FB1> <0CC4> <4E73> <0CC5> <6C5D> <0CC6> <5165> <0CC7> <8925> <0CC8> <8F6F> <0CC9> <962E> <0CCA> <854A> <0CCB> <745E> <0CCC> <9510> <0CCD> <95F0> <0CCE> <6DA6> <0CCF> <82E5> <0CD0> <5F31> <0CD1> <6492> <0CD2> <6D12> <0CD3> <8428> <0CD4> <816E> <0CD5> <9CC3> <0CD6> <585E> <0CD7> <8D5B> <0CD8> <4E09> <0CD9> <53C1> <0CDA> <4F1E> <0CDB> <6563> <0CDC> <6851> <0CDD> <55D3> <0CDE> <4E27> <0CDF> <6414> <0CE0> <9A9A> <0CE1> <626B> <0CE2> <5AC2> <0CE3> <745F> <0CE4> <8272> <0CE5> <6DA9> <0CE6> <68EE> <0CE7> <50E7> <0CE8> <838E> endbfchar 100 beginbfchar <0CE9> <7802> <0CEA> <6740> <0CEB> <5239> <0CEC> <6C99> <0CED> <7EB1> <0CEE> <50BB> <0CEF> <5565> <0CF0> <715E> <0CF1> <7B5B> <0CF2> <6652> <0CF3> <73CA> <0CF4> <82EB> <0CF5> <6749> <0CF6> <5C71> <0CF7> <5220> <0CF8> <717D> <0CF9> <886B> <0CFA> <95EA> <0CFB> <9655> <0CFC> <64C5> <0CFD> <8D61> <0CFE> <81B3> <0CFF> <5584> <0D00> <6C55> <0D01> <6247> <0D02> <7F2E> <0D03> <5892> <0D04> <4F24> <0D05> <5546> <0D06> <8D4F> <0D07> <664C> <0D08> <4E0A> <0D09> <5C1A> <0D0A> <88F3> <0D0B> <68A2> <0D0C> <634E> <0D0D> <7A0D> <0D0E> <70E7> <0D0F> <828D> <0D10> <52FA> <0D11> <97F6> <0D12> <5C11> <0D13> <54E8> <0D14> <90B5> <0D15> <7ECD> <0D16> <5962> <0D17> <8D4A> <0D18> <86C7> <0D1B> <8D66> <0D1C> <6444> <0D1D> <5C04> <0D1E> <6151> <0D1F> <6D89> <0D20> <793E> <0D21> <8BBE> <0D22> <7837> <0D23> <7533> <0D24> <547B> <0D25> <4F38> <0D26> <8EAB> <0D27> <6DF1> <0D28> <5A20> <0D29> <7EC5> <0D2A> <795E> <0D2B> <6C88> <0D2C> <5BA1> <0D2D> <5A76> <0D2E> <751A> <0D2F> <80BE> <0D30> <614E> <0D31> <6E17> <0D32> <58F0> <0D33> <751F> <0D34> <7525> <0D35> <7272> <0D36> <5347> <0D37> <7EF3> <0D38> <7701> <0D39> <76DB> <0D3A> <5269> <0D3B> <80DC> <0D3C> <5723> <0D3D> <5E08> <0D3E> <5931> <0D3F> <72EE> <0D40> <65BD> <0D41> <6E7F> <0D42> <8BD7> <0D43> <5C38> <0D44> <8671> <0D45> <5341> <0D46> <77F3> <0D47> <62FE> <0D48> <65F6> <0D49> <4EC0> <0D4A> <98DF> <0D4B> <8680> <0D4C> <5B9E> <0D4D> <8BC6> <0D4E> <53F2> endbfchar 100 beginbfchar <0D4F> <77E2> <0D50> <4F7F> <0D51> <5C4E> <0D52> <9A76> <0D53> <59CB> <0D54> <5F0F> <0D55> <793A> <0D56> <58EB> <0D57> <4E16> <0D58> <67FF> <0D59> <4E8B> <0D5A> <62ED> <0D5B> <8A93> <0D5C> <901D> <0D5D> <52BF> <0D5E> <662F> <0D5F> <55DC> <0D60> <566C> <0D61> <9002> <0D62> <4ED5> <0D63> <4F8D> <0D64> <91CA> <0D65> <9970> <0D66> <6C0F> <0D67> <5E02> <0D68> <6043> <0D69> <5BA4> <0D6A> <89C6> <0D6B> <8BD5> <0D6C> <6536> <0D6D> <624B> <0D6E> <9996> <0D6F> <5B88> <0D70> <5BFF> <0D71> <6388> <0D72> <552E> <0D73> <53D7> <0D74> <7626> <0D75> <517D> <0D76> <852C> <0D77> <67A2> <0D78> <68B3> <0D79> <6B8A> <0D7A> <6292> <0D7B> <8F93> <0D7C> <53D4> <0D7D> <8212> <0D7E> <6DD1> <0D7F> <758F> <0D80> <4E66> <0D81> <8D4E> <0D82> <5B70> <0D83> <719F> <0D84> <85AF> <0D85> <6691> <0D86> <66D9> <0D87> <7F72> <0D88> <8700> <0D89> <9ECD> <0D8A> <9F20> <0D8B> <5C5E> <0D8C> <672F> <0D8D> <8FF0> <0D8E> <6811> <0D8F> <675F> <0D90> <620D> <0D91> <7AD6> <0D92> <5885> <0D93> <5EB6> <0D94> <6570> <0D95> <6F31> <0D96> <6055> <0D97> <5237> <0D98> <800D> <0D99> <6454> <0D9A> <8870> <0D9B> <7529> <0D9C> <5E05> <0D9D> <6813> <0D9E> <62F4> <0D9F> <971C> <0DA0> <53CC> <0DA1> <723D> <0DA2> <8C01> <0DA3> <6C34> <0DA4> <7761> <0DA5> <7A0E> <0DA6> <542E> <0DA7> <77AC> <0DA8> <987A> <0DA9> <821C> <0DAA> <8BF4> <0DAB> <7855> <0DAC> <6714> <0DAD> <70C1> <0DAE> <65AF> <0DAF> <6495> <0DB0> <5636> <0DB1> <601D> <0DB2> <79C1> endbfchar 100 beginbfchar <0DB3> <53F8> <0DB4> <4E1D> <0DB5> <6B7B> <0DB6> <8086> <0DB7> <5BFA> <0DB8> <55E3> <0DB9> <56DB> <0DBA> <4F3A> <0DBB> <4F3C> <0DBC> <9972> <0DBD> <5DF3> <0DBE> <677E> <0DBF> <8038> <0DC0> <6002> <0DC1> <9882> <0DC2> <9001> <0DC3> <5B8B> <0DC4> <8BBC> <0DC5> <8BF5> <0DC6> <641C> <0DC7> <8258> <0DC8> <64DE> <0DC9> <55FD> <0DCA> <82CF> <0DCB> <9165> <0DCC> <4FD7> <0DCD> <7D20> <0DCE> <901F> <0DCF> <7C9F> <0DD0> <50F3> <0DD1> <5851> <0DD2> <6EAF> <0DD3> <5BBF> <0DD4> <8BC9> <0DD5> <8083> <0DD6> <9178> <0DD7> <849C> <0DD8> <7B97> <0DD9> <867D> <0DDA> <968B> <0DDB> <968F> <0DDC> <7EE5> <0DDD> <9AD3> <0DDE> <788E> <0DDF> <5C81> <0DE0> <7A57> <0DE1> <9042> <0DE2> <96A7> <0DE3> <795F> <0DE4> <5B59> <0DE5> <635F> <0DE6> <7B0B> <0DE7> <84D1> <0DE8> <68AD> <0DE9> <5506> <0DEA> <7F29> <0DEB> <7410> <0DEC> <7D22> <0DED> <9501> <0DEE> <6240> <0DEF> <584C> <0DF0> <4ED6> <0DF1> <5B83> <0DF2> <5979> <0DF3> <5854> <0DF4> <736D> <0DF5> <631E> <0DF6> <8E4B> <0DF7> <8E0F> <0DF8> <80CE> <0DF9> <82D4> <0DFA> <62AC> <0DFB> <53F0> <0DFC> <6CF0> <0DFD> <915E> <0DFE> <592A> <0DFF> <6001> <0E00> <6C70> <0E01> <574D> <0E02> <644A> <0E03> <8D2A> <0E04> <762B> <0E05> <6EE9> <0E06> <575B> <0E07> <6A80> <0E08> <75F0> <0E09> <6F6D> <0E0A> <8C2D> <0E0B> <8C08> <0E0C> <5766> <0E0D> <6BEF> <0E0E> <8892> <0E0F> <78B3> <0E10> <63A2> <0E11> <53F9> <0E12> <70AD> <0E13> <6C64> <0E14> <5858> <0E15> <642A> <0E16> <5802> endbfchar 100 beginbfchar <0E17> <68E0> <0E18> <819B> <0E19> <5510> <0E1A> <7CD6> <0E1B> <5018> <0E1C> <8EBA> <0E1D> <6DCC> <0E1E> <8D9F> <0E1F> <70EB> <0E20> <638F> <0E21> <6D9B> <0E22> <6ED4> <0E23> <7EE6> <0E24> <8404> <0E25> <6843> <0E26> <9003> <0E27> <6DD8> <0E28> <9676> <0E29> <8BA8> <0E2A> <5957> <0E2B> <7279> <0E2C> <85E4> <0E2D> <817E> <0E2E> <75BC> <0E2F> <8A8A> <0E30> <68AF> <0E31> <5254> <0E32> <8E22> <0E33> <9511> <0E34> <63D0> <0E35> <9898> <0E36> <8E44> <0E37> <557C> <0E38> <4F53> <0E39> <66FF> <0E3A> <568F> <0E3B> <60D5> <0E3C> <6D95> <0E3D> <5243> <0E3E> <5C49> <0E3F> <5929> <0E40> <6DFB> <0E41> <586B> <0E42> <7530> <0E43> <751C> <0E44> <606C> <0E45> <8214> <0E46> <8146> <0E47> <6311> <0E48> <6761> <0E49> <8FE2> <0E4A> <773A> <0E4B> <8DF3> <0E4C> <8D34> <0E4D> <94C1> <0E4E> <5E16> <0E4F> <5385> <0E50> <542C> <0E51> <70C3> <0E52> <6C40> <0E53> <5EF7> <0E54> <505C> <0E55> <4EAD> <0E56> <5EAD> <0E57> <633A> <0E58> <8247> <0E59> <901A> <0E5A> <6850> <0E5B> <916E> <0E5C> <77B3> <0E5D> <540C> <0E5E> <94DC> <0E5F> <5F64> <0E60> <7AE5> <0E61> <6876> <0E62> <6345> <0E63> <7B52> <0E64> <7EDF> <0E65> <75DB> <0E66> <5077> <0E67> <6295> <0E68> <5934> <0E69> <900F> <0E6A> <51F8> <0E6B> <79C3> <0E6C> <7A81> <0E6D> <56FE> <0E6E> <5F92> <0E6F> <9014> <0E70> <6D82> <0E71> <5C60> <0E72> <571F> <0E73> <5410> <0E74> <5154> <0E75> <6E4D> <0E76> <56E2> <0E77> <63A8> <0E78> <9893> <0E79> <817F> <0E7A> <8715> endbfchar 100 beginbfchar <0E7B> <892A> <0E7C> <9000> <0E7D> <541E> <0E7E> <5C6F> <0E7F> <81C0> <0E80> <62D6> <0E81> <6258> <0E82> <8131> <0E83> <9E35> <0E84> <9640> <0E85> <9A6E> <0E86> <9A7C> <0E87> <692D> <0E88> <59A5> <0E89> <62D3> <0E8A> <553E> <0E8B> <6316> <0E8C> <54C7> <0E8D> <86D9> <0E8E> <6D3C> <0E8F> <5A03> <0E90> <74E6> <0E91> <889C> <0E92> <6B6A> <0E93> <5916> <0E94> <8C4C> <0E95> <5F2F> <0E96> <6E7E> <0E97> <73A9> <0E98> <987D> <0E99> <4E38> <0E9A> <70F7> <0E9B> <5B8C> <0E9C> <7897> <0E9D> <633D> <0E9E> <665A> <0E9F> <7696> <0EA0> <60CB> <0EA1> <5B9B> <0EA2> <5A49> <0EA3> <4E07> <0EA4> <8155> <0EA5> <6C6A> <0EA6> <738B> <0EA7> <4EA1> <0EA8> <6789> <0EA9> <7F51> <0EAA> <5F80> <0EAB> <65FA> <0EAC> <671B> <0EAD> <5FD8> <0EAE> <5984> <0EAF> <5A01> <0EB0> <5DCD> <0EB1> <5FAE> <0EB2> <5371> <0EB3> <97E6> <0EB4> <8FDD> <0EB5> <6845> <0EB6> <56F4> <0EB7> <552F> <0EB8> <60DF> <0EB9> <4E3A> <0EBA> <6F4D> <0EBB> <7EF4> <0EBC> <82C7> <0EBD> <840E> <0EBE> <59D4> <0EBF> <4F1F> <0EC0> <4F2A> <0EC1> <5C3E> <0EC2> <7EAC> <0EC3> <672A> <0EC4> <851A> <0EC5> <5473> <0EC6> <754F> <0EC7> <80C3> <0EC8> <5582> <0EC9> <9B4F> <0ECA> <4F4D> <0ECB> <6E2D> <0ECC> <8C13> <0ECD> <5C09> <0ECE> <6170> <0ECF> <536B> <0ED0> <761F> <0ED1> <6E29> <0ED2> <868A> <0ED3> <6587> <0ED4> <95FB> <0ED5> <7EB9> <0ED6> <543B> <0ED7> <7A33> <0ED8> <7D0A> <0ED9> <95EE> <0EDA> <55E1> <0EDB> <7FC1> <0EDC> <74EE> <0EDD> <631D> <0EDE> <8717> endbfchar 100 beginbfchar <0EDF> <6DA1> <0EE0> <7A9D> <0EE1> <6211> <0EE2> <65A1> <0EE3> <5367> <0EE4> <63E1> <0EE5> <6C83> <0EE6> <5DEB> <0EE7> <545C> <0EE8> <94A8> <0EE9> <4E4C> <0EEA> <6C61> <0EEB> <8BEC> <0EEC> <5C4B> <0EED> <65E0> <0EEE> <829C> <0EEF> <68A7> <0EF0> <543E> <0EF1> <5434> <0EF2> <6BCB> <0EF3> <6B66> <0EF4> <4E94> <0EF5> <6342> <0EF6> <5348> <0EF7> <821E> <0EF8> <4F0D> <0EF9> <4FAE> <0EFA> <575E> <0EFB> <620A> <0EFC> <96FE> <0EFD> <6664> <0EFE> <7269> <0EFF> <52FF> <0F00> <52A1> <0F01> <609F> <0F02> <8BEF> <0F03> <6614> <0F04> <7199> <0F05> <6790> <0F06> <897F> <0F07> <7852> <0F08> <77FD> <0F09> <6670> <0F0A> <563B> <0F0B> <5438> <0F0C> <9521> <0F0D> <727A> <0F0E> <7A00> <0F0F> <606F> <0F10> <5E0C> <0F11> <6089> <0F12> <819D> <0F13> <5915> <0F14> <60DC> <0F15> <7184> <0F16> <70EF> <0F17> <6EAA> <0F18> <6C50> <0F19> <7280> <0F1A> <6A84> <0F1B> <88AD> <0F1C> <5E2D> <0F1D> <4E60> <0F1E> <5AB3> <0F1F> <559C> <0F20> <94E3> <0F21> <6D17> <0F22> <7CFB> <0F23> <9699> <0F24> <620F> <0F25> <7EC6> <0F26> <778E> <0F27> <867E> <0F28> <5323> <0F29> <971E> <0F2A> <8F96> <0F2B> <6687> <0F2C> <5CE1> <0F2D> <4FA0> <0F2E> <72ED> <0F2F> <4E0B> <0F30> <53A6> <0F31> <590F> <0F32> <5413> <0F33> <6380> <0F34> <9528> <0F35> <5148> <0F36> <4ED9> <0F37> <9C9C> <0F38> <7EA4> <0F39> <54B8> <0F3A> <8D24> <0F3B> <8854> <0F3C> <8237> <0F3D> <95F2> <0F3E> <6D8E> <0F3F> <5F26> <0F40> <5ACC> <0F41> <663E> <0F42> <9669> endbfchar 100 beginbfchar <0F43> <73B0> <0F44> <732E> <0F45> <53BF> <0F46> <817A> <0F47> <9985> <0F48> <7FA1> <0F49> <5BAA> <0F4A> <9677> <0F4B> <9650> <0F4C> <7EBF> <0F4D> <76F8> <0F4E> <53A2> <0F4F> <9576> <0F50> <9999> <0F51> <7BB1> <0F52> <8944> <0F53> <6E58> <0F54> <4E61> <0F55> <7FD4> <0F56> <7965> <0F57> <8BE6> <0F58> <60F3> <0F59> <54CD> <0F5A> <4EAB> <0F5B> <9879> <0F5C> <5DF7> <0F5D> <6A61> <0F5E> <50CF> <0F5F> <5411> <0F60> <8C61> <0F61> <8427> <0F62> <785D> <0F63> <9704> <0F64> <524A> <0F65> <54EE> <0F66> <56A3> <0F67> <9500> <0F68> <6D88> <0F69> <5BB5> <0F6A> <6DC6> <0F6B> <6653> <0F6C> <5C0F> <0F6D> <5B5D> <0F6E> <6821> <0F6F> <8096> <0F70> <5578> <0F71> <7B11> <0F72> <6548> <0F73> <6954> <0F74> <4E9B> <0F75> <6B47> <0F76> <874E> <0F77> <978B> <0F78> <534F> <0F79> <631F> <0F7A> <643A> <0F7B> <90AA> <0F7C> <659C> <0F7D> <80C1> <0F7E> <8C10> <0F7F> <5199> <0F80> <68B0> <0F81> <5378> <0F82> <87F9> <0F83> <61C8> <0F84> <6CC4> <0F85> <6CFB> <0F86> <8C22> <0F87> <5C51> <0F88> <85AA> <0F89> <82AF> <0F8A> <950C> <0F8B> <6B23> <0F8C> <8F9B> <0F8D> <65B0> <0F8E> <5FFB> <0F8F> <5FC3> <0F90> <4FE1> <0F91> <8845> <0F92> <661F> <0F93> <8165> <0F94> <7329> <0F95> <60FA> <0F96> <5174> <0F97> <5211> <0F98> <578B> <0F99> <5F62> <0F9A> <90A2> <0F9B> <884C> <0F9C> <9192> <0F9D> <5E78> <0F9E> <674F> <0F9F> <6027> <0FA0> <59D3> <0FA1> <5144> <0FA2> <51F6> <0FA3> <80F8> <0FA4> <5308> <0FA5> <6C79> <0FA6> <96C4> endbfchar 100 beginbfchar <0FA7> <718A> <0FA8> <4F11> <0FA9> <4FEE> <0FAA> <7F9E> <0FAB> <673D> <0FAC> <55C5> <0FAD> <9508> <0FAE> <79C0> <0FAF> <8896> <0FB0> <7EE3> <0FB1> <589F> <0FB2> <620C> <0FB3> <9700> <0FB4> <865A> <0FB5> <5618> <0FB6> <987B> <0FB7> <5F90> <0FB8> <8BB8> <0FB9> <84C4> <0FBA> <9157> <0FBB> <53D9> <0FBC> <65ED> <0FBD> <5E8F> <0FBE> <755C> <0FBF> <6064> <0FC0> <7D6E> <0FC1> <5A7F> <0FC2> <7EEA> <0FC3> <7EED> <0FC4> <8F69> <0FC5> <55A7> <0FC6> <5BA3> <0FC7> <60AC> <0FC8> <65CB> <0FC9> <7384> <0FCA> <9009> <0FCB> <7663> <0FCC> <7729> <0FCD> <7EDA> <0FCE> <9774> <0FCF> <859B> <0FD0> <5B66> <0FD1> <7A74> <0FD2> <96EA> <0FD3> <8840> <0FD4> <52CB> <0FD5> <718F> <0FD6> <5FAA> <0FD7> <65EC> <0FD8> <8BE2> <0FD9> <5BFB> <0FDA> <9A6F> <0FDB> <5DE1> <0FDC> <6B89> <0FDD> <6C5B> <0FDE> <8BAD> <0FDF> <8BAF> <0FE0> <900A> <0FE1> <8FC5> <0FE2> <538B> <0FE3> <62BC> <0FE4> <9E26> <0FE5> <9E2D> <0FE6> <5440> <0FE7> <4E2B> <0FE8> <82BD> <0FE9> <7259> <0FEA> <869C> <0FEB> <5D16> <0FEC> <8859> <0FED> <6DAF> <0FEE> <96C5> <0FEF> <54D1> <0FF0> <4E9A> <0FF1> <8BB6> <0FF2> <7109> <0FF3> <54BD> <0FF4> <9609> <0FF5> <70DF> <0FF6> <6DF9> <0FF7> <76D0> <0FF8> <4E25> <0FF9> <7814> <0FFA> <8712> <0FFB> <5CA9> <0FFC> <5EF6> <0FFD> <8A00> <0FFE> <989C> <0FFF> <960E> <1000> <708E> <1001> <6CBF> <1002> <5944> <1003> <63A9> <1004> <773C> <1005> <884D> <1006> <6F14> <1007> <8273> <1008> <5830> <1009> <71D5> <100A> <538C> endbfchar 100 beginbfchar <100B> <781A> <100C> <96C1> <100D> <5501> <100E> <5F66> <100F> <7130> <1010> <5BB4> <1011> <8C1A> <1012> <9A8C> <1013> <6B83> <1014> <592E> <1015> <9E2F> <1016> <79E7> <1017> <6768> <1018> <626C> <1019> <4F6F> <101A> <75A1> <101B> <7F8A> <101C> <6D0B> <101D> <9633> <101E> <6C27> <101F> <4EF0> <1020> <75D2> <1021> <517B> <1022> <6837> <1023> <6F3E> <1024> <9080> <1025> <8170> <1026> <5996> <1027> <7476> <1028> <6447> <1029> <5C27> <102A> <9065> <102B> <7A91> <102C> <8C23> <102D> <59DA> <102E> <54AC> <102F> <8200> <1030> <836F> <1031> <8981> <1032> <8000> <1033> <6930> <1034> <564E> <1035> <8036> <1036> <7237> <1037> <91CE> <1038> <51B6> <1039> <4E5F> <103A> <9875> <103B> <6396> <103C> <4E1A> <103D> <53F6> <103E> <66F3> <103F> <814B> <1040> <591C> <1041> <6DB2> <1042> <4E00> <1043> <58F9> <1044> <533B> <1045> <63D6> <1046> <94F1> <1047> <4F9D> <1048> <4F0A> <1049> <8863> <104A> <9890> <104B> <5937> <104C> <9057> <104D> <79FB> <104E> <4EEA> <104F> <80F0> <1050> <7591> <1051> <6C82> <1052> <5B9C> <1053> <59E8> <1054> <5F5D> <1055> <6905> <1056> <8681> <1057> <501A> <1058> <5DF2> <1059> <4E59> <105A> <77E3> <105B> <4EE5> <105C> <827A> <105D> <6291> <105E> <6613> <105F> <9091> <1060> <5C79> <1061> <4EBF> <1062> <5F79> <1063> <81C6> <1064> <9038> <1065> <8084> <1066> <75AB> <1067> <4EA6> <1068> <88D4> <1069> <610F> <106A> <6BC5> <106B> <5FC6> <106C> <4E49> <106D> <76CA> <106E> <6EA2> endbfchar 100 beginbfchar <106F> <8BE3> <1070> <8BAE> <1071> <8C0A> <1072> <8BD1> <1073> <5F02> <1074> <7FFC> <1075> <7FCC> <1076> <7ECE> <1077> <8335> <1078> <836B> <1079> <56E0> <107A> <6BB7> <107B> <97F3> <107C> <9634> <107D> <59FB> <107E> <541F> <107F> <94F6> <1080> <6DEB> <1081> <5BC5> <1082> <996E> <1083> <5C39> <1084> <5F15> <1085> <9690> <1086> <5370> <1087> <82F1> <1088> <6A31> <1089> <5A74> <108A> <9E70> <108B> <5E94> <108C> <7F28> <108D> <83B9> <1090> <8367> <1091> <8747> <1092> <8FCE> <1093> <8D62> <1094> <76C8> <1095> <5F71> <1096> <9896> <1097> <786C> <1098> <6620> <1099> <54DF> <109A> <62E5> <109B> <4F63> <109C> <81C3> <109D> <75C8> <109E> <5EB8> <109F> <96CD> <10A0> <8E0A> <10A1> <86F9> <10A2> <548F> <10A3> <6CF3> <10A4> <6D8C> <10A5> <6C38> <10A6> <607F> <10A7> <52C7> <10A8> <7528> <10A9> <5E7D> <10AA> <4F18> <10AB> <60A0> <10AC> <5FE7> <10AD> <5C24> <10AE> <7531> <10AF> <90AE> <10B0> <94C0> <10B1> <72B9> <10B2> <6CB9> <10B3> <6E38> <10B4> <9149> <10B5> <6709> <10B6> <53CB> <10B7> <53F3> <10B8> <4F51> <10B9> <91C9> <10BA> <8BF1> <10BB> <53C8> <10BC> <5E7C> <10BD> <8FC2> <10BE> <6DE4> <10BF> <4E8E> <10C0> <76C2> <10C1> <6986> <10C2> <865E> <10C3> <611A> <10C4> <8206> <10C5> <4F59> <10C6> <4FDE> <10C7> <903E> <10C8> <9C7C> <10C9> <6109> <10CA> <6E1D> <10CB> <6E14> <10CC> <9685> <10CD> <4E88> <10CE> <5A31> <10CF> <96E8> <10D0> <4E0E> <10D1> <5C7F> <10D2> <79B9> <10D3> <5B87> <10D4> <8BED> endbfchar 100 beginbfchar <10D5> <7FBD> <10D6> <7389> <10D7> <57DF> <10D8> <828B> <10D9> <90C1> <10DA> <5401> <10DB> <9047> <10DC> <55BB> <10DD> <5CEA> <10DE> <5FA1> <10DF> <6108> <10E0> <6B32> <10E1> <72F1> <10E2> <80B2> <10E3> <8A89> <10E4> <6D74> <10E5> <5BD3> <10E6> <88D5> <10E7> <9884> <10E8> <8C6B> <10E9> <9A6D> <10EA> <9E33> <10EB> <6E0A> <10EC> <51A4> <10ED> <5143> <10EE> <57A3> <10EF> <8881> <10F0> <539F> <10F1> <63F4> <10F2> <8F95> <10F3> <56ED> <10F4> <5458> <10F5> <5706> <10F6> <733F> <10F7> <6E90> <10F8> <7F18> <10F9> <8FDC> <10FA> <82D1> <10FB> <613F> <10FC> <6028> <10FD> <9662> <10FE> <66F0> <10FF> <7EA6> <1100> <8D8A> <1101> <8DC3> <1102> <94A5> <1103> <5CB3> <1104> <7CA4> <1105> <6708> <1106> <60A6> <1107> <9605> <1108> <8018> <1109> <4E91> <110A> <90E7> <110B> <5300> <110C> <9668> <110D> <5141> <110E> <8FD0> <110F> <8574> <1110> <915D> <1111> <6655> <1112> <97F5> <1113> <5B55> <1114> <531D> <1115> <7838> <1116> <6742> <1117> <683D> <1118> <54C9> <1119> <707E> <111A> <5BB0> <111B> <8F7D> <111C> <518D> <111D> <5728> <111E> <54B1> <111F> <6512> <1120> <6682> <1121> <8D5E> <1122> <8D43> <1123> <810F> <1124> <846C> <1125> <906D> <1126> <7CDF> <1127> <51FF> <1128> <85FB> <1129> <67A3> <112A> <65E9> <112B> <6FA1> <112C> <86A4> <112D> <8E81> <112E> <566A> <112F> <9020> <1130> <7682> <1131> <7076> <1132> <71E5> <1133> <8D23> <1134> <62E9> <1135> <5219> <1136> <6CFD> <1137> <8D3C> <1138> <600E> endbfchar 100 beginbfchar <1139> <589E> <113A> <618E> <113B> <66FE> <113C> <8D60> <113D> <624E> <113E> <55B3> <113F> <6E23> <1140> <672D> <1141> <8F67> <1142> <94E1> <1143> <95F8> <1144> <7728> <1145> <6805> <1146> <69A8> <1147> <548B> <1148> <4E4D> <1149> <70B8> <114A> <8BC8> <114B> <6458> <114C> <658B> <114D> <5B85> <114E> <7A84> <114F> <503A> <1150> <5BE8> <1151> <77BB> <1152> <6BE1> <1153> <8A79> <1154> <7C98> <1155> <6CBE> <1156> <76CF> <1157> <65A9> <1158> <8F97> <1159> <5D2D> <115A> <5C55> <115B> <8638> <115C> <6808> <115D> <5360> <115E> <6218> <115F> <7AD9> <1160> <6E5B> <1161> <7EFD> <1162> <6A1F> <1163> <7AE0> <1164> <5F70> <1165> <6F33> <1166> <5F20> <1167> <638C> <1168> <6DA8> <1169> <6756> <116A> <4E08> <116B> <5E10> <116C> <8D26> <116D> <4ED7> <116E> <80C0> <116F> <7634> <1170> <969C> <1171> <62DB> <1172> <662D> <1173> <627E> <1174> <6CBC> <1175> <8D75> <1176> <7167> <1177> <7F69> <1178> <5146> <1179> <8087> <117A> <53EC> <117B> <906E> <117C> <6298> <117D> <54F2> <117E> <86F0> <117F> <8F99> <1180> <8005> <1181> <9517> <1182> <8517> <1183> <8FD9> <1184> <6D59> <1185> <73CD> <1186> <659F> <1187> <771F> <1188> <7504> <1189> <7827> <118A> <81FB> <118B> <8D1E> <118C> <9488> <118D> <4FA6> <118E> <6795> <118F> <75B9> <1190> <8BCA> <1191> <9707> <1192> <632F> <1193> <9547> <1194> <9635> <1195> <84B8> <1196> <6323> <1197> <7741> <1198> <5F81> <1199> <72F0> <119A> <4E89> <119B> <6014> <119C> <6574> endbfchar 100 beginbfchar <119D> <62EF> <119E> <6B63> <119F> <653F> <11A0> <5E27> <11A1> <75C7> <11A2> <90D1> <11A3> <8BC1> <11A4> <829D> <11A5> <679D> <11A6> <652F> <11A7> <5431> <11A8> <8718> <11A9> <77E5> <11AA> <80A2> <11AB> <8102> <11AC> <6C41> <11AD> <4E4B> <11AE> <7EC7> <11AF> <804C> <11B0> <76F4> <11B1> <690D> <11B2> <6B96> <11B3> <6267> <11B4> <503C> <11B5> <4F84> <11B6> <5740> <11B7> <6307> <11B8> <6B62> <11B9> <8DBE> <11BA> <53EA> <11BB> <65E8> <11BC> <7EB8> <11BD> <5FD7> <11BE> <631A> <11BF> <63B7> <11C2> <7F6E> <11C3> <5E1C> <11C4> <5CD9> <11C5> <5236> <11C6> <667A> <11C7> <79E9> <11C8> <7A1A> <11C9> <8D28> <11CA> <7099> <11CB> <75D4> <11CC> <6EDE> <11CD> <6CBB> <11CE> <7A92> <11CF> <4E2D> <11D0> <76C5> <11D1> <5FE0> <11D2> <949F> <11D3> <8877> <11D4> <7EC8> <11D5> <79CD> <11D6> <80BF> <11D7> <91CD> <11D8> <4EF2> <11D9> <4F17> <11DA> <821F> <11DB> <5468> <11DC> <5DDE> <11DD> <6D32> <11DE> <8BCC> <11DF> <7CA5> <11E0> <8F74> <11E1> <8098> <11E2> <5E1A> <11E3> <5492> <11E4> <76B1> <11E5> <5B99> <11E6> <663C> <11E7> <9AA4> <11E8> <73E0> <11E9> <682A> <11EA> <86DB> <11EB> <6731> <11EC> <732A> <11ED> <8BF8> <11EE> <8BDB> <11EF> <9010> <11F0> <7AF9> <11F1> <70DB> <11F2> <716E> <11F3> <62C4> <11F4> <77A9> <11F5> <5631> <11F6> <4E3B> <11F7> <8457> <11F8> <67F1> <11F9> <52A9> <11FA> <86C0> <11FB> <8D2E> <11FC> <94F8> <11FD> <7B51> <11FE> <4F4F> <11FF> <6CE8> <1200> <795D> <1201> <9A7B> <1202> <6293> endbfchar 100 beginbfchar <1203> <722A> <1204> <62FD> <1205> <4E13> <1206> <7816> <1207> <8F6C> <1208> <64B0> <1209> <8D5A> <120A> <7BC6> <120B> <6869> <120C> <5E84> <120D> <88C5> <120E> <5986> <120F> <649E> <1210> <58EE> <1211> <72B6> <1212> <690E> <1213> <9525> <1214> <8FFD> <1215> <8D58> <1216> <5760> <1217> <7F00> <1218> <8C06> <1219> <51C6> <121A> <6349> <121B> <62D9> <121C> <5353> <121D> <684C> <121E> <7422> <121F> <8301> <1220> <914C> <1221> <5544> <1222> <7740> <1223> <707C> <1224> <6D4A> <1225> <5179> <1226> <54A8> <1227> <8D44> <1228> <59FF> <1229> <6ECB> <122A> <6DC4> <122B> <5B5C> <122C> <7D2B> <122D> <4ED4> <122E> <7C7D> <122F> <6ED3> <1230> <5B50> <1231> <81EA> <1232> <6E0D> <1233> <5B57> <1234> <9B03> <1235> <68D5> <1236> <8E2A> <1237> <5B97> <1238> <7EFC> <1239> <603B> <123A> <7EB5> <123B> <90B9> <123C> <8D70> <123D> <594F> <123E> <63CD> <123F> <79DF> <1240> <8DB3> <1241> <5352> <1242> <65CF> <1243> <7956> <1244> <8BC5> <1245> <963B> <1246> <7EC4> <1247> <94BB> <1248> <7E82> <1249> <5634> <124A> <9189> <124B> <6700> <124C> <7F6A> <124D> <5C0A> <124E> <9075> <124F> <6628> <1250> <5DE6> <1251> <4F50> <1252> <67DE> <1253> <505A> <1254> <4F5C> <1255> <5750> <1256> <5EA7> <1257> <4E8D> <1258> <4E0C> <1259> <5140> <125A> <4E10> <125B> <5EFF> <125C> <5345> <125D> <4E15> <125E> <4E98> <125F> <4E1E> <1260> <9B32> <1261> <5B6C> <1262> <5669> <1263> <4E28> <1264> <79BA> <1265> <4E3F> <1266> <5315> endbfchar 100 beginbfchar <1267> <4E47> <1268> <592D> <1269> <723B> <126A> <536E> <126B> <6C10> <126C> <56DF> <126D> <80E4> <126E> <9997> <126F> <6BD3> <1270> <777E> <1271> <9F17> <1272> <4E36> <1273> <4E9F> <1274> <9F10> <1275> <4E5C> <1276> <4E69> <1277> <4E93> <1278> <8288> <1279> <5B5B> <127A> <556C> <127B> <560F> <127C> <4EC4> <127D> <538D> <127E> <539D> <127F> <53A3> <1280> <53A5> <1281> <53AE> <1282> <9765> <1283> <8D5D> <1284> <531A> <1285> <53F5> <1286> <5326> <1287> <532E> <1288> <533E> <1289> <8D5C> <128A> <5366> <128B> <5363> <128C> <5202> <128D> <5208> <128E> <520E> <128F> <522D> <1290> <5233> <1293> <524C> <1294> <525E> <1295> <5261> <1296> <525C> <1297> <84AF> <1298> <527D> <1299> <5282> <129A> <5281> <129B> <5290> <129C> <5293> <129D> <5182> <129E> <7F54> <129F> <4EBB> <12A0> <4EC3> <12A1> <4EC9> <12A2> <4EC2> <12A3> <4EE8> <12A4> <4EE1> <12A5> <4EEB> <12A6> <4EDE> <12A7> <4F1B> <12A8> <4EF3> <12A9> <4F22> <12AA> <4F64> <12AB> <4EF5> <12AC> <4F25> <12AD> <4F27> <12AE> <4F09> <12AF> <4F2B> <12B0> <4F5E> <12B1> <4F67> <12B2> <6538> <12B3> <4F5A> <12B4> <4F5D> <12B5> <4F5F> <12B6> <4F57> <12B7> <4F32> <12B8> <4F3D> <12B9> <4F76> <12BA> <4F74> <12BB> <4F91> <12BC> <4F89> <12BD> <4F83> <12BE> <4F8F> <12BF> <4F7E> <12C0> <4F7B> <12C1> <4FAA> <12C2> <4F7C> <12C3> <4FAC> <12C4> <4F94> <12C5> <4FE6> <12C6> <4FE8> <12C7> <4FEA> <12C8> <4FC5> <12C9> <4FDA> <12CA> <4FE3> <12CB> <4FDC> <12CC> <4FD1> endbfchar 100 beginbfchar <12CD> <4FDF> <12CE> <4FF8> <12CF> <5029> <12D0> <504C> <12D1> <4FF3> <12D2> <502C> <12D3> <500F> <12D4> <502E> <12D5> <502D> <12D6> <4FFE> <12D7> <501C> <12D8> <500C> <12D9> <5025> <12DA> <5028> <12DB> <507E> <12DC> <5043> <12DD> <5055> <12DE> <5048> <12DF> <504E> <12E0> <506C> <12E1> <507B> <12E2> <50A5> <12E3> <50A7> <12E4> <50A9> <12E5> <50BA> <12E6> <50D6> <12E7> <5106> <12E8> <50ED> <12E9> <50EC> <12EA> <50E6> <12EB> <50EE> <12EC> <5107> <12ED> <510B> <12EE> <4EDD> <12EF> <6C3D> <12F0> <4F58> <12F1> <4F65> <12F2> <4FCE> <12F3> <9FA0> <12F4> <6C46> <12F5> <7C74> <12F6> <516E> <12F7> <5DFD> <12F8> <9EC9> <12F9> <9998> <12FA> <5181> <12FB> <5914> <12FC> <52F9> <12FD> <530D> <12FE> <8A07> <12FF> <5310> <1300> <51EB> <1301> <5919> <1302> <5155> <1303> <4EA0> <1304> <5156> <1305> <4EB3> <1306> <886E> <1307> <88A4> <1308> <4EB5> <1309> <8114> <130A> <88D2> <130B> <7980> <130C> <5B34> <130D> <8803> <130E> <7FB8> <130F> <51AB> <1310> <51B1> <1311> <51BD> <1312> <51BC> <1313> <51C7> <1314> <5196> <1315> <51A2> <1316> <51A5> <1317> <8BA0> <131A> <8BAA> <131D> <8BB7> <1320> <8BCB> <1321> <8BCF> <1322> <8BCE> <1326> <8BD6> <1329> <8BDC> <132C> <8BE4> <132F> <8BEE> <1330> <8BF0> <1331> <8BF3> <1332> <8BF6> <1333> <8BF9> <1334> <8BFC> <1337> <8C02> <1338> <8C04> <1339> <8C07> <133A> <8C0C> <133B> <8C0F> <1341> <8C19> <1342> <8C1B> <1343> <8C18> <1344> <8C1D> <1348> <8C25> <1349> <8C27> endbfchar 100 beginbfchar <1352> <5369> <1353> <537A> <1354> <961D> <1355> <9622> <1356> <9621> <1357> <9631> <1358> <962A> <1359> <963D> <135A> <963C> <135B> <9642> <135C> <9649> <135D> <9654> <135E> <965F> <135F> <9667> <1360> <966C> <1361> <9672> <1362> <9674> <1363> <9688> <1364> <968D> <1365> <9697> <1366> <96B0> <1367> <9097> <1368> <909B> <1369> <909D> <136A> <9099> <136B> <90AC> <136C> <90A1> <136D> <90B4> <136E> <90B3> <136F> <90B6> <1370> <90BA> <1371> <90B8> <1372> <90B0> <1373> <90CF> <1374> <90C5> <1375> <90BE> <1376> <90D0> <1377> <90C4> <1378> <90C7> <1379> <90D3> <137A> <90E6> <137B> <90E2> <137C> <90DC> <137D> <90D7> <137E> <90DB> <137F> <90EB> <1380> <90EF> <1381> <90FE> <1382> <9104> <1383> <9122> <1384> <911E> <1385> <9123> <1386> <9131> <1387> <912F> <1388> <9139> <1389> <9143> <138A> <9146> <138B> <520D> <138C> <5942> <138D> <52A2> <1390> <52BE> <1391> <54FF> <1392> <52D0> <1393> <52D6> <1394> <52F0> <1395> <53DF> <1396> <71EE> <1397> <77CD> <1398> <5EF4> <1399> <51F5> <139A> <51FC> <139B> <9B2F> <139C> <53B6> <139D> <5F01> <139E> <755A> <139F> <5DEF> <13A0> <574C> <13A1> <57A9> <13A2> <57A1> <13A3> <587E> <13A4> <58BC> <13A5> <58C5> <13A6> <58D1> <13A7> <5729> <13A8> <572C> <13A9> <572A> <13AA> <5733> <13AB> <5739> <13AE> <575C> <13AF> <573B> <13B0> <5742> <13B1> <5769> <13B2> <5785> <13B3> <576B> <13B4> <5786> <13B5> <577C> <13B6> <577B> <13B7> <5768> <13B8> <576D> <13B9> <5776> endbfchar 100 beginbfchar <13BA> <5773> <13BB> <57AD> <13BC> <57A4> <13BD> <578C> <13BE> <57B2> <13BF> <57CF> <13C0> <57A7> <13C1> <57B4> <13C2> <5793> <13C3> <57A0> <13C4> <57D5> <13C5> <57D8> <13C6> <57DA> <13C7> <57D9> <13C8> <57D2> <13C9> <57B8> <13CA> <57F4> <13CB> <57EF> <13CC> <57F8> <13CD> <57E4> <13CE> <57DD> <13CF> <580B> <13D0> <580D> <13D1> <57FD> <13D2> <57ED> <13D3> <5800> <13D4> <581E> <13D5> <5819> <13D6> <5844> <13D7> <5820> <13D8> <5865> <13D9> <586C> <13DA> <5881> <13DB> <5889> <13DC> <589A> <13DD> <5880> <13DE> <99A8> <13DF> <9F19> <13E0> <61FF> <13E1> <8279> <13E2> <827D> <13E3> <827F> <13E4> <828F> <13E5> <828A> <13E6> <82A8> <13E7> <8284> <13E8> <828E> <13E9> <8291> <13EA> <8297> <13EB> <8299> <13EC> <82AB> <13ED> <82B8> <13EE> <82BE> <13EF> <82B0> <13F0> <82C8> <13F1> <82CA> <13F2> <82E3> <13F3> <8298> <13F4> <82B7> <13F5> <82AE> <13F8> <82C1> <13F9> <82A9> <13FA> <82B4> <13FB> <82A1> <13FC> <82AA> <13FD> <829F> <13FE> <82C4> <13FF> <82CE> <1400> <82A4> <1401> <82E1> <1402> <8309> <1403> <82F7> <1404> <82E4> <1405> <830F> <1406> <8307> <1407> <82DC> <1408> <82F4> <1409> <82D2> <140A> <82D8> <140B> <830C> <140C> <82FB> <140D> <82D3> <140E> <8311> <140F> <831A> <1410> <8306> <1413> <82E0> <1414> <82D5> <1415> <831C> <1416> <8351> <1419> <8308> <141A> <8392> <141B> <833C> <141C> <8334> <141D> <8331> <141E> <839B> <141F> <835E> <1420> <832F> <1421> <834F> <1422> <8347> <1423> <8343> endbfchar 100 beginbfchar <1424> <835F> <1425> <8340> <1426> <8317> <1427> <8360> <1428> <832D> <1429> <833A> <142A> <8333> <142B> <8366> <142C> <8365> <142D> <8368> <142E> <831B> <142F> <8369> <1430> <836C> <1431> <836A> <1434> <83B0> <1435> <8378> <1438> <83A0> <1439> <83AA> <143A> <8393> <143B> <839C> <143C> <8385> <143D> <837C> <143E> <83B6> <143F> <83A9> <1440> <837D> <1441> <83B8> <1442> <837B> <1443> <8398> <1444> <839E> <1445> <83A8> <1446> <83BA> <1447> <83BC> <1448> <83C1> <1449> <8401> <144A> <83E5> <144B> <83D8> <144C> <5807> <144D> <8418> <144E> <840B> <144F> <83DD> <1450> <83FD> <1451> <83D6> <1452> <841C> <1453> <8438> <1454> <8411> <1455> <8406> <1456> <83D4> <1457> <83DF> <1458> <840F> <1459> <8403> <145C> <83EA> <145D> <83C5> <145E> <83C0> <145F> <8426> <1460> <83F0> <1461> <83E1> <1462> <845C> <1463> <8451> <1464> <845A> <1465> <8459> <1466> <8473> <1469> <847A> <146A> <8489> <146B> <8478> <146C> <843C> <146D> <8446> <146E> <8469> <146F> <8476> <1470> <848C> <1471> <848E> <1472> <8431> <1473> <846D> <1474> <84C1> <1475> <84CD> <1476> <84D0> <1477> <84E6> <1478> <84BD> <1479> <84D3> <147A> <84CA> <147B> <84BF> <147C> <84BA> <147D> <84E0> <147E> <84A1> <147F> <84B9> <1480> <84B4> <1481> <8497> <1482> <84E5> <1483> <84E3> <1484> <850C> <1485> <750D> <1486> <8538> <1487> <84F0> <1488> <8539> <1489> <851F> <148A> <853A> <148B> <8556> <148C> <853B> <148D> <84FF> <148E> <84FC> <148F> <8559> endbfchar 100 beginbfchar <1490> <8548> <1491> <8568> <1492> <8564> <1493> <855E> <1494> <857A> <1495> <77A2> <1496> <8543> <1497> <8572> <1498> <857B> <1499> <85A4> <149A> <85A8> <149B> <8587> <149C> <858F> <149D> <8579> <149E> <85AE> <149F> <859C> <14A0> <8585> <14A1> <85B9> <14A2> <85B7> <14A3> <85B0> <14A4> <85D3> <14A5> <85C1> <14A6> <85DC> <14A7> <85FF> <14A8> <8627> <14A9> <8605> <14AA> <8629> <14AB> <8616> <14AC> <863C> <14AD> <5EFE> <14AE> <5F08> <14AF> <593C> <14B0> <5941> <14B1> <8037> <14B2> <5955> <14B3> <595A> <14B4> <5958> <14B5> <530F> <14B6> <5C22> <14B7> <5C25> <14B8> <5C2C> <14B9> <5C34> <14BA> <624C> <14BB> <626A> <14BC> <629F> <14BD> <62BB> <14BE> <62CA> <14BF> <62DA> <14C0> <62D7> <14C1> <62EE> <14C2> <6322> <14C3> <62F6> <14C4> <6339> <14C5> <634B> <14C6> <6343> <14C7> <63AD> <14C8> <63F6> <14C9> <6371> <14CA> <637A> <14CB> <638E> <14CC> <63B4> <14CD> <636D> <14CE> <63AC> <14CF> <638A> <14D0> <6369> <14D1> <63AE> <14D2> <63BC> <14D3> <63F2> <14D4> <63F8> <14D5> <63E0> <14D6> <63FF> <14D7> <63C4> <14D8> <63DE> <14D9> <63CE> <14DA> <6452> <14DB> <63C6> <14DC> <63BE> <14DD> <6445> <14DE> <6441> <14DF> <640B> <14E0> <641B> <14E1> <6420> <14E2> <640C> <14E3> <6426> <14E4> <6421> <14E5> <645E> <14E6> <6484> <14E7> <646D> <14E8> <6496> <14E9> <647A> <14EC> <6499> <14ED> <64BA> <14EE> <64C0> <14EF> <64D0> <14F0> <64D7> <14F1> <64E4> <14F2> <64E2> <14F3> <6509> <14F4> <6525> <14F5> <652E> endbfchar 100 beginbfchar <14F6> <5F0B> <14F7> <5FD2> <14F8> <7519> <14F9> <5F11> <14FA> <535F> <14FB> <53F1> <14FC> <53FD> <14FD> <53E9> <14FE> <53E8> <14FF> <53FB> <1500> <5412> <1501> <5416> <1502> <5406> <1503> <544B> <1507> <5456> <1508> <5443> <1509> <5421> <150A> <5457> <150B> <5459> <150C> <5423> <150D> <5432> <150E> <5482> <150F> <5494> <1510> <5477> <1511> <5471> <1512> <5464> <1515> <5484> <1516> <5476> <1517> <5466> <1518> <549D> <1519> <54D0> <151A> <54AD> <151B> <54C2> <151C> <54B4> <151D> <54D2> <151E> <54A7> <151F> <54A6> <1522> <5472> <1523> <54A3> <1524> <54D5> <1525> <54BB> <1526> <54BF> <1527> <54CC> <152A> <54DC> <152D> <54A4> <152E> <54DD> <152F> <54CF> <1530> <54DE> <1531> <551B> <1532> <54E7> <1533> <5520> <1534> <54FD> <1535> <5514> <1536> <54F3> <1539> <550F> <153A> <5511> <153B> <5527> <153C> <552A> <153D> <5567> <153E> <558F> <153F> <55B5> <1540> <5549> <1541> <556D> <1542> <5541> <1543> <5555> <1544> <553F> <1545> <5550> <1546> <553C> <1547> <5537> <1548> <5556> <154C> <5533> <154D> <5530> <154E> <555C> <154F> <558B> <1550> <55D2> <1551> <5583> <1552> <55B1> <1553> <55B9> <1554> <5588> <1555> <5581> <1556> <559F> <1557> <557E> <1558> <55D6> <1559> <5591> <155A> <557B> <155B> <55DF> <155E> <5594> <155F> <5599> <1560> <55EA> <1561> <55F7> <1562> <55C9> <1563> <561F> <1564> <55D1> <1567> <55D4> <1568> <55E6> <1569> <55DD> <156A> <55C4> <156B> <55EF> <156C> <55E5> <1571> <55E8> endbfchar 100 beginbfchar <1572> <55F5> <1573> <55E4> <1574> <8F94> <1575> <561E> <1576> <5608> <1577> <560C> <1578> <5601> <1579> <5624> <157A> <5623> <157B> <55FE> <157C> <5600> <157D> <5627> <157E> <562D> <157F> <5658> <1580> <5639> <1581> <5657> <1582> <562C> <1583> <564D> <1584> <5662> <1585> <5659> <1586> <565C> <1587> <564C> <1588> <5654> <1589> <5686> <158A> <5664> <158B> <5671> <158C> <566B> <158F> <5685> <1590> <5693> <1591> <56AF> <1592> <56D4> <1593> <56D7> <1594> <56DD> <1595> <56E1> <1596> <56F5> <1597> <56EB> <1598> <56F9> <1599> <56FF> <159A> <5704> <159B> <570A> <159C> <5709> <159D> <571C> <159E> <5E0F> <159F> <5E19> <15A0> <5E14> <15A1> <5E11> <15A2> <5E31> <15A5> <5E37> <15A6> <5E44> <15A7> <5E54> <15A8> <5E5B> <15A9> <5E5E> <15AA> <5E61> <15AB> <5C8C> <15AC> <5C7A> <15AD> <5C8D> <15AE> <5C90> <15AF> <5C96> <15B0> <5C88> <15B3> <5C91> <15B4> <5C9A> <15B5> <5C9C> <15B6> <5CB5> <15B7> <5CA2> <15B8> <5CBD> <15B9> <5CAC> <15BA> <5CAB> <15BB> <5CB1> <15BC> <5CA3> <15BD> <5CC1> <15BE> <5CB7> <15BF> <5CC4> <15C0> <5CD2> <15C1> <5CE4> <15C2> <5CCB> <15C3> <5CE5> <15C6> <5D27> <15C7> <5D26> <15C8> <5D2E> <15C9> <5D24> <15CA> <5D1E> <15CB> <5D06> <15CC> <5D1B> <15CD> <5D58> <15CE> <5D3E> <15CF> <5D34> <15D0> <5D3D> <15D1> <5D6C> <15D2> <5D5B> <15D3> <5D6F> <15D4> <5D5D> <15D5> <5D6B> <15D6> <5D4B> <15D7> <5D4A> <15D8> <5D69> <15D9> <5D74> <15DA> <5D82> <15DB> <5D99> <15DC> <5D9D> <15DD> <8C73> endbfchar 100 beginbfchar <15DE> <5DB7> <15DF> <5DC5> <15E0> <5F73> <15E1> <5F77> <15E2> <5F82> <15E3> <5F87> <15E4> <5F89> <15E5> <5F8C> <15E6> <5F95> <15E7> <5F99> <15E8> <5F9C> <15E9> <5FA8> <15EA> <5FAD> <15EB> <5FB5> <15EC> <5FBC> <15ED> <8862> <15EE> <5F61> <15EF> <72AD> <15F0> <72B0> <15F1> <72B4> <15F4> <72C3> <15F5> <72C1> <15F6> <72CE> <15F7> <72CD> <15F8> <72D2> <15F9> <72E8> <15FA> <72EF> <15FB> <72E9> <15FC> <72F2> <15FD> <72F4> <15FE> <72F7> <15FF> <7301> <1600> <72F3> <1601> <7303> <1604> <7317> <1605> <7313> <1606> <7321> <1607> <730A> <1608> <731E> <1609> <731D> <160A> <7315> <160B> <7322> <160C> <7339> <160D> <7325> <160E> <732C> <160F> <7338> <1610> <7331> <1611> <7350> <1612> <734D> <1613> <7357> <1614> <7360> <1615> <736C> <1616> <736F> <1617> <737E> <1618> <821B> <1619> <5925> <161A> <98E7> <161B> <5924> <161C> <5902> <161D> <9963> <1624> <9974> <1625> <9977> <1626> <997D> <1627> <9980> <1628> <9984> <1629> <9987> <162A> <998A> <162B> <998D> <1631> <5E80> <1632> <5E91> <1633> <5E8B> <1634> <5E96> <1635> <5EA5> <1636> <5EA0> <1637> <5EB9> <1638> <5EB5> <1639> <5EBE> <163A> <5EB3> <163B> <8D53> <163C> <5ED2> <163D> <5ED1> <163E> <5EDB> <163F> <5EE8> <1640> <5EEA> <1641> <81BA> <1642> <5FC4> <1643> <5FC9> <1644> <5FD6> <1645> <5FCF> <1646> <6003> <1647> <5FEE> <1648> <6004> <1649> <5FE1> <164A> <5FE4> <164B> <5FFE> <164E> <5FEA> <164F> <5FED> <1650> <5FF8> <1651> <6019> <1652> <6035> endbfchar 100 beginbfchar <1653> <6026> <1654> <601B> <1655> <600F> <1656> <600D> <1657> <6029> <1658> <602B> <1659> <600A> <165A> <603F> <165B> <6021> <165E> <607B> <165F> <607A> <1660> <6042> <1661> <606A> <1662> <607D> <1663> <6096> <1664> <609A> <1665> <60AD> <1666> <609D> <1667> <6083> <1668> <6092> <1669> <608C> <166A> <609B> <166B> <60EC> <166C> <60BB> <166D> <60B1> <166E> <60DD> <166F> <60D8> <1670> <60C6> <1671> <60DA> <1672> <60B4> <1673> <6120> <1674> <6126> <1675> <6115> <1676> <6123> <1677> <60F4> <1678> <6100> <1679> <610E> <167A> <612B> <167B> <614A> <167C> <6175> <167D> <61AC> <167E> <6194> <167F> <61A7> <1680> <61B7> <1681> <61D4> <1682> <61F5> <1683> <5FDD> <1684> <96B3> <1685> <95E9> <1686> <95EB> <1687> <95F1> <1688> <95F3> <168B> <95FC> <168C> <95FE> <168F> <9606> <1690> <9608> <1695> <960F> <1696> <9612> <169C> <4E2C> <169D> <723F> <169E> <6215> <169F> <6C35> <16A0> <6C54> <16A1> <6C5C> <16A2> <6C4A> <16A3> <6CA3> <16A4> <6C85> <16A5> <6C90> <16A6> <6C94> <16A7> <6C8C> <16AA> <6C74> <16AB> <6C76> <16AC> <6C86> <16AD> <6CA9> <16AE> <6CD0> <16AF> <6CD4> <16B0> <6CAD> <16B3> <6CF1> <16B4> <6CD7> <16B5> <6CB2> <16B6> <6CE0> <16B7> <6CD6> <16B8> <6CFA> <16B9> <6CEB> <16BA> <6CEE> <16BB> <6CB1> <16BC> <6CD3> <16BD> <6CEF> <16BE> <6CFE> <16BF> <6D39> <16C0> <6D27> <16C1> <6D0C> <16C2> <6D43> <16C3> <6D48> <16C4> <6D07> <16C5> <6D04> <16C6> <6D19> <16C7> <6D0E> <16C8> <6D2B> <16C9> <6D4D> endbfchar 100 beginbfchar <16CA> <6D2E> <16CB> <6D35> <16CC> <6D1A> <16CD> <6D4F> <16CE> <6D52> <16CF> <6D54> <16D0> <6D33> <16D1> <6D91> <16D2> <6D6F> <16D3> <6D9E> <16D4> <6DA0> <16D5> <6D5E> <16D8> <6D5C> <16D9> <6D60> <16DA> <6D7C> <16DB> <6D63> <16DC> <6E1A> <16DD> <6DC7> <16DE> <6DC5> <16DF> <6DDE> <16E0> <6E0E> <16E1> <6DBF> <16E2> <6DE0> <16E3> <6E11> <16E4> <6DE6> <16E5> <6DDD> <16E6> <6DD9> <16E7> <6E16> <16E8> <6DAB> <16E9> <6E0C> <16EA> <6DAE> <16EB> <6E2B> <16EC> <6E6E> <16ED> <6E4E> <16EE> <6E6B> <16EF> <6EB2> <16F0> <6E5F> <16F1> <6E86> <16F4> <6E32> <16F5> <6E25> <16F6> <6E44> <16F7> <6EDF> <16F8> <6EB1> <16F9> <6E98> <16FA> <6EE0> <16FB> <6F2D> <16FC> <6EE2> <16FD> <6EA5> <16FE> <6EA7> <16FF> <6EBD> <1700> <6EBB> <1701> <6EB7> <1702> <6ED7> <1703> <6EB4> <1704> <6ECF> <1705> <6E8F> <1706> <6EC2> <1707> <6E9F> <1708> <6F62> <170B> <6F24> <170C> <6F15> <170D> <6EF9> <170E> <6F2F> <170F> <6F36> <1710> <6F4B> <1711> <6F74> <1712> <6F2A> <1713> <6F09> <1714> <6F29> <1715> <6F89> <1716> <6F8D> <1717> <6F8C> <1718> <6F78> <1719> <6F72> <171A> <6F7C> <171B> <6F7A> <171C> <6FD1> <171D> <6FC9> <171E> <6FA7> <171F> <6FB9> <1720> <6FB6> <1721> <6FC2> <1722> <6FE1> <1723> <6FEE> <1724> <6FDE> <1725> <6FE0> <1726> <6FEF> <1727> <701A> <1728> <7023> <1729> <701B> <172A> <7039> <172B> <7035> <172C> <704F> <172D> <705E> <172E> <5B80> <172F> <5B84> <1730> <5B95> <1731> <5B93> <1732> <5BA5> <1733> <5BB8> endbfchar 100 beginbfchar <1734> <752F> <1735> <9A9E> <1736> <6434> <1737> <5BE4> <1738> <5BEE> <1739> <8930> <173A> <5BF0> <173B> <8E47> <173C> <8B07> <173D> <8FB6> <173E> <8FD3> <173F> <8FD5> <1740> <8FE5> <1741> <8FEE> <1742> <8FE4> <1743> <8FE9> <1744> <8FE6> <1745> <8FF3> <1746> <8FE8> <1747> <9005> <1748> <9004> <1749> <900B> <174A> <9026> <174B> <9011> <174C> <900D> <174D> <9016> <174E> <9021> <1751> <902D> <1752> <902F> <1753> <9044> <1756> <9050> <1757> <9068> <1758> <9058> <1759> <9062> <175A> <905B> <175B> <66B9> <175C> <9074> <175D> <907D> <175E> <9082> <175F> <9088> <1760> <9083> <1761> <908B> <1762> <5F50> <1763> <5F57> <1764> <5F56> <1765> <5F58> <1766> <5C3B> <1767> <54AB> <1768> <5C50> <1769> <5C59> <176A> <5B71> <176B> <5C63> <176C> <5C66> <176D> <7FBC> <176E> <5F2A> <176F> <5F29> <1770> <5F2D> <1771> <8274> <1772> <5F3C> <1773> <9B3B> <1774> <5C6E> <1775> <5981> <1776> <5983> <1777> <598D> <177A> <59A3> <177B> <5997> <177C> <59CA> <177D> <59AB> <177E> <599E> <177F> <59A4> <1780> <59D2> <1781> <59B2> <1782> <59AF> <1783> <59D7> <1784> <59BE> <1787> <59DD> <1788> <5A08> <1789> <59E3> <178A> <59D8> <178B> <59F9> <178C> <5A0C> <178D> <5A09> <178E> <5A32> <178F> <5A34> <1790> <5A11> <1791> <5A23> <1792> <5A13> <1793> <5A40> <1794> <5A67> <1795> <5A4A> <1796> <5A55> <1797> <5A3C> <1798> <5A62> <1799> <5A75> <179A> <80EC> <179B> <5AAA> <179C> <5A9B> <179D> <5A77> <179E> <5A7A> <179F> <5ABE> endbfchar 100 beginbfchar <17A0> <5AEB> <17A1> <5AB2> <17A2> <5AD2> <17A3> <5AD4> <17A4> <5AB8> <17A5> <5AE0> <17A6> <5AE3> <17A7> <5AF1> <17A8> <5AD6> <17A9> <5AE6> <17AA> <5AD8> <17AB> <5ADC> <17AC> <5B09> <17AD> <5B17> <17AE> <5B16> <17AF> <5B32> <17B0> <5B37> <17B1> <5B40> <17B2> <5C15> <17B3> <5C1C> <17B4> <5B5A> <17B5> <5B65> <17B6> <5B73> <17B7> <5B51> <17B8> <5B53> <17B9> <5B62> <17BA> <9A75> <17BD> <9A7A> <17BE> <9A7F> <17BF> <9A7D> <17C2> <9A85> <17C3> <9A88> <17C4> <9A8A> <17C5> <9A90> <17C8> <9A96> <17C9> <9A98> <17D1> <9AA5> <17D2> <9AA7> <17D3> <7E9F> <17D4> <7EA1> <17D5> <7EA3> <17D6> <7EA5> <17D9> <7EAD> <17DA> <7EB0> <17DB> <7EBE> <17DF> <7EC9> <17E2> <7ED0> <17E3> <7ED4> <17E4> <7ED7> <17E5> <7EDB> <17E8> <7EE8> <17E9> <7EEB> <17EE> <7F0D> <17EF> <7EF6> <17F2> <7EFE> <17FA> <7F0F> <17FD> <7F17> <17FE> <7F19> <17FF> <7F1C> <1800> <7F1B> <1801> <7F1F> <1812> <7F35> <1813> <5E7A> <1814> <757F> <1815> <5DDB> <1816> <753E> <1817> <9095> <1818> <738E> <1819> <7391> <181A> <73AE> <181B> <73A2> <181C> <739F> <181D> <73CF> <181E> <73C2> <181F> <73D1> <1820> <73B7> <1821> <73B3> <1822> <73C0> <1823> <73C9> <1824> <73C8> <1825> <73E5> <1826> <73D9> <1827> <987C> <1828> <740A> <1829> <73E9> <182A> <73E7> <182B> <73DE> <182C> <73BA> <182D> <73F2> <182E> <740F> <182F> <742A> <1830> <745B> <1831> <7426> <1832> <7425> <1833> <7428> <1834> <7430> <1835> <742E> <1836> <742C> <1837> <741B> <1838> <741A> endbfchar 100 beginbfchar <1839> <7441> <183A> <745C> <183B> <7457> <183C> <7455> <183D> <7459> <183E> <7477> <183F> <746D> <1840> <747E> <1841> <749C> <1842> <748E> <1845> <7487> <1846> <748B> <1847> <749E> <184A> <7490> <184B> <74A7> <184C> <74D2> <184D> <74BA> <1851> <674C> <1852> <6753> <1853> <675E> <1854> <6748> <1855> <6769> <1856> <67A5> <1857> <6787> <1858> <676A> <1859> <6773> <185A> <6798> <185B> <67A7> <185C> <6775> <185D> <67A8> <185E> <679E> <185F> <67AD> <1860> <678B> <1861> <6777> <1862> <677C> <1863> <67F0> <1864> <6809> <1865> <67D8> <1866> <680A> <1867> <67E9> <1868> <67B0> <1869> <680C> <186A> <67D9> <186B> <67B5> <186C> <67DA> <186D> <67B3> <186E> <67DD> <186F> <6800> <1870> <67C3> <1871> <67B8> <1872> <67E2> <1873> <680E> <1874> <67C1> <1875> <67FD> <187A> <684E> <187B> <6862> <187C> <6844> <187D> <6864> <187E> <6883> <187F> <681D> <1880> <6855> <1881> <6866> <1882> <6841> <1883> <6867> <1884> <6840> <1885> <683E> <1886> <684A> <1887> <6849> <1888> <6829> <1889> <68B5> <188A> <688F> <188B> <6874> <188C> <6877> <188D> <6893> <188E> <686B> <188F> <68C2> <1890> <696E> <1891> <68FC> <1894> <68F9> <1895> <6924> <1896> <68F0> <1897> <690B> <1898> <6901> <1899> <6957> <189A> <68E3> <189B> <6910> <189C> <6971> <189D> <6939> <189E> <6960> <189F> <6942> <18A0> <695D> <18A1> <6984> <18A2> <696B> <18A3> <6980> <18A4> <6998> <18A5> <6978> <18A6> <6934> <18A7> <69CC> <18AA> <69CE> <18AB> <6989> endbfchar 100 beginbfchar <18AC> <6966> <18AD> <6963> <18AE> <6979> <18AF> <699B> <18B0> <69A7> <18B1> <69BB> <18B2> <69AB> <18B3> <69AD> <18B4> <69D4> <18B5> <69B1> <18B6> <69C1> <18B7> <69CA> <18B8> <69DF> <18B9> <6995> <18BA> <69E0> <18BB> <698D> <18BC> <69FF> <18BD> <6A2F> <18BE> <69ED> <18C1> <6A65> <18C2> <69F2> <18C3> <6A44> <18C4> <6A3E> <18C5> <6AA0> <18C6> <6A50> <18C7> <6A5B> <18C8> <6A35> <18C9> <6A8E> <18CA> <6A79> <18CB> <6A3D> <18CC> <6A28> <18CD> <6A58> <18CE> <6A7C> <18CF> <6A91> <18D0> <6A90> <18D1> <6AA9> <18D2> <6A97> <18D3> <6AAB> <18D4> <7337> <18D5> <7352> <18D8> <6B87> <18D9> <6B84> <18DC> <6B8D> <18DF> <6BA1> <18E0> <6BAA> <18E1> <8F6B> <18E2> <8F6D> <18E8> <8F78> <18E9> <8F77> <18EC> <8F7C> <18ED> <8F7E> <18F0> <8F84> <18F1> <8F87> <18F2> <8F8B> <18F6> <8F98> <18F7> <8F9A> <18F8> <8ECE> <18F9> <620B> <18FA> <6217> <18FB> <621B> <18FC> <621F> <18FD> <6222> <18FE> <6221> <18FF> <6225> <1900> <6224> <1901> <622C> <1902> <81E7> <1903> <74EF> <1904> <74F4> <1905> <74FF> <1906> <750F> <1907> <7511> <1908> <7513> <1909> <6534> <190D> <660A> <190E> <6619> <190F> <6772> <1910> <6603> <1911> <6615> <1912> <6600> <1913> <7085> <1914> <66F7> <1915> <661D> <1916> <6634> <1917> <6631> <1918> <6636> <1919> <6635> <191A> <8006> <191B> <665F> <191C> <6654> <191D> <6641> <191E> <664F> <191F> <6656> <1920> <6661> <1921> <6657> <1922> <6677> <1923> <6684> <1924> <668C> <1925> <66A7> <1926> <669D> endbfchar 100 beginbfchar <1927> <66BE> <192A> <66E6> <192B> <66E9> <192E> <8D36> <192F> <8D3B> <1930> <8D3D> <1931> <8D40> <1936> <8D47> <1937> <8D4D> <1938> <8D55> <1939> <8D59> <193A> <89C7> <1942> <726E> <1943> <729F> <1944> <725D> <1945> <7266> <1946> <726F> <1949> <7284> <194A> <728B> <194B> <728D> <194C> <728F> <194D> <7292> <194E> <6308> <194F> <6332> <1950> <63B0> <1951> <643F> <1952> <64D8> <1953> <8004> <1954> <6BEA> <1955> <6BF3> <1956> <6BFD> <1957> <6BF5> <1958> <6BF9> <1959> <6C05> <195A> <6C07> <195B> <6C06> <195C> <6C0D> <195D> <6C15> <1961> <6C21> <1962> <6C29> <1963> <6C24> <1964> <6C2A> <1965> <6C32> <1966> <6535> <1967> <6555> <1968> <656B> <1969> <724D> <196A> <7252> <196B> <7256> <196C> <7230> <196D> <8662> <196E> <5216> <196F> <809F> <1970> <809C> <1971> <8093> <1972> <80BC> <1973> <670A> <1974> <80BD> <1975> <80B1> <1976> <80AB> <1977> <80AD> <1978> <80B4> <1979> <80B7> <197E> <80DB> <197F> <80C2> <1980> <80C4> <1981> <80D9> <1982> <80CD> <1983> <80D7> <1984> <6710> <1985> <80DD> <1986> <80EB> <1987> <80F1> <1988> <80F4> <1989> <80ED> <198C> <80F2> <198D> <80FC> <198E> <6715> <198F> <8112> <1990> <8C5A> <1991> <8136> <1992> <811E> <1993> <812C> <1994> <8118> <1995> <8132> <1996> <8148> <1997> <814C> <1998> <8153> <1999> <8174> <199C> <8171> <199D> <8160> <199E> <8169> <19A1> <816D> <19A2> <8167> <19A3> <584D> <19A4> <5AB5> <19A5> <8188> <19A6> <8182> <19A7> <8191> <19A8> <6ED5> endbfchar 100 beginbfchar <19A9> <81A3> <19AA> <81AA> <19AB> <81CC> <19AC> <6726> <19AD> <81CA> <19AE> <81BB> <19AF> <81C1> <19B0> <81A6> <19B1> <6B24> <19B2> <6B37> <19B3> <6B39> <19B4> <6B43> <19B5> <6B46> <19B6> <6B59> <19BA> <98D5> <19BD> <6BB3> <19BE> <5F40> <19BF> <6BC2> <19C0> <89F3> <19C1> <6590> <19C2> <9F51> <19C3> <6593> <19C4> <65BC> <19C5> <65C6> <19C6> <65C4> <19C7> <65C3> <19C8> <65CC> <19C9> <65CE> <19CA> <65D2> <19CB> <65D6> <19CC> <7080> <19CD> <709C> <19CE> <7096> <19CF> <709D> <19D0> <70BB> <19D1> <70C0> <19D2> <70B7> <19D3> <70AB> <19D4> <70B1> <19D5> <70E8> <19D6> <70CA> <19D7> <7110> <19D8> <7113> <19D9> <7116> <19DA> <712F> <19DB> <7131> <19DC> <7173> <19DD> <715C> <19DE> <7168> <19DF> <7145> <19E0> <7172> <19E1> <714A> <19E2> <7178> <19E3> <717A> <19E4> <7198> <19E5> <71B3> <19E6> <71B5> <19E7> <71A8> <19E8> <71A0> <19E9> <71E0> <19EA> <71D4> <19EB> <71E7> <19EC> <71F9> <19ED> <721D> <19EE> <7228> <19EF> <706C> <19F0> <7118> <19F1> <7166> <19F2> <71B9> <19F3> <623E> <19F4> <623D> <19F5> <6243> <19F8> <793B> <19F9> <7940> <19FA> <7946> <19FB> <7949> <19FE> <7953> <19FF> <795A> <1A00> <7962> <1A01> <7957> <1A02> <7960> <1A03> <796F> <1A04> <7967> <1A05> <797A> <1A06> <7985> <1A07> <798A> <1A08> <799A> <1A09> <79A7> <1A0A> <79B3> <1A0B> <5FD1> <1A0C> <5FD0> <1A0D> <603C> <1A0E> <605D> <1A0F> <605A> <1A10> <6067> <1A11> <6041> <1A12> <6059> <1A13> <6063> <1A14> <60AB> <1A15> <6106> endbfchar 100 beginbfchar <1A16> <610D> <1A17> <615D> <1A18> <61A9> <1A19> <619D> <1A1A> <61CB> <1A1B> <61D1> <1A1C> <6206> <1A1D> <8080> <1A1E> <807F> <1A1F> <6C93> <1A20> <6CF6> <1A21> <6DFC> <1A22> <77F6> <1A23> <77F8> <1A24> <7800> <1A25> <7809> <1A28> <7811> <1A29> <65AB> <1A2A> <782D> <1A30> <781F> <1A31> <783C> <1A32> <7825> <1A33> <782C> <1A34> <7823> <1A35> <7829> <1A36> <784E> <1A37> <786D> <1A3A> <7826> <1A3B> <7850> <1A3C> <7847> <1A3D> <784C> <1A3E> <786A> <1A3F> <789B> <1A40> <7893> <1A41> <789A> <1A42> <7887> <1A43> <789C> <1A44> <78A1> <1A45> <78A3> <1A46> <78B2> <1A47> <78B9> <1A48> <78A5> <1A49> <78D4> <1A4A> <78D9> <1A4B> <78C9> <1A4C> <78EC> <1A4D> <78F2> <1A4E> <7905> <1A4F> <78F4> <1A50> <7913> <1A51> <7924> <1A52> <791E> <1A53> <7934> <1A54> <9F9B> <1A55> <9EF9> <1A58> <76F1> <1A59> <7704> <1A5A> <770D> <1A5B> <76F9> <1A5E> <771A> <1A5F> <7722> <1A60> <7719> <1A61> <772D> <1A62> <7726> <1A63> <7735> <1A64> <7738> <1A67> <7747> <1A68> <7743> <1A69> <775A> <1A6A> <7768> <1A6B> <7762> <1A6C> <7765> <1A6D> <777F> <1A6E> <778D> <1A6F> <777D> <1A70> <7780> <1A71> <778C> <1A72> <7791> <1A75> <77B0> <1A76> <77B5> <1A77> <77BD> <1A78> <753A> <1A79> <7540> <1A7A> <754E> <1A7B> <754B> <1A7C> <7548> <1A7D> <755B> <1A7E> <7572> <1A7F> <7579> <1A80> <7583> <1A81> <7F58> <1A82> <7F61> <1A83> <7F5F> <1A84> <8A48> <1A85> <7F68> <1A86> <7F74> <1A87> <7F71> <1A88> <7F79> <1A89> <7F81> <1A8A> <7F7E> endbfchar 100 beginbfchar <1A8B> <76CD> <1A8C> <76E5> <1A8D> <8832> <1A91> <948B> <1A92> <948A> <1A97> <9494> <1A98> <9497> <1A99> <9495> <1A9F> <94AB> <1AA0> <94AA> <1AA1> <94AD> <1AA2> <94AC> <1AA5> <94B2> <1AA6> <94B4> <1AAE> <94BF> <1AAF> <94C4> <1ABD> <94D9> <1ABE> <94D8> <1ABF> <94DB> <1AC3> <94E2> <1AC8> <94EA> <1AC9> <94E9> <1ACA> <94EB> <1AD0> <94F7> <1AD1> <94F9> <1AD4> <94FF> <1AD5> <9503> <1AD6> <9502> <1AE3> <9518> <1AE4> <951B> <1AE8> <9522> <1AEB> <9529> <1AEC> <952C> <1AEF> <9534> <1AF3> <953C> <1AF6> <9542> <1AF7> <9535> <1AFB> <9549> <1AFC> <954C> <1AFF> <9552> <1B06> <955B> <1B09> <955D> <1B15> <956F> <1B19> <953A> <1B1A> <77E7> <1B1B> <77EC> <1B1C> <96C9> <1B1D> <79D5> <1B1E> <79ED> <1B1F> <79E3> <1B20> <79EB> <1B21> <7A06> <1B22> <5D47> <1B23> <7A03> <1B24> <7A02> <1B25> <7A1E> <1B26> <7A14> <1B27> <7A39> <1B28> <7A37> <1B29> <7A51> <1B2A> <9ECF> <1B2B> <99A5> <1B2C> <7A70> <1B2D> <7688> <1B2E> <768E> <1B2F> <7693> <1B30> <7699> <1B31> <76A4> <1B32> <74DE> <1B33> <74E0> <1B34> <752C> <1B35> <9E20> <1B36> <9E22> <1B3C> <9E32> <1B3D> <9E31> <1B3E> <9E36> <1B3F> <9E38> <1B40> <9E37> <1B43> <9E3E> <1B46> <9E44> <1B4D> <9E4E> <1B4E> <9E51> <1B4F> <9E55> <1B50> <9E57> <1B54> <9E5E> <1B55> <9E63> <1B5D> <9E71> <1B5E> <9E6D> <1B5F> <9E73> <1B60> <7592> <1B61> <7594> <1B62> <7596> <1B63> <75A0> <1B64> <759D> <1B65> <75AC> <1B66> <75A3> <1B69> <75B8> <1B6A> <75C4> <1B6B> <75B1> <1B6C> <75B0> endbfchar 100 beginbfchar <1B6D> <75C3> <1B6E> <75C2> <1B6F> <75D6> <1B70> <75CD> <1B71> <75E3> <1B72> <75E8> <1B73> <75E6> <1B74> <75E4> <1B75> <75EB> <1B76> <75E7> <1B77> <7603> <1B78> <75F1> <1B79> <75FC> <1B7A> <75FF> <1B7B> <7610> <1B7C> <7600> <1B7D> <7605> <1B7E> <760C> <1B7F> <7617> <1B80> <760A> <1B81> <7625> <1B82> <7618> <1B83> <7615> <1B84> <7619> <1B85> <761B> <1B86> <763C> <1B87> <7622> <1B88> <7620> <1B89> <7640> <1B8A> <762D> <1B8B> <7630> <1B8C> <763F> <1B8D> <7635> <1B8E> <7643> <1B8F> <763E> <1B90> <7633> <1B91> <764D> <1B92> <765E> <1B93> <7654> <1B94> <765C> <1B95> <7656> <1B96> <766B> <1B97> <766F> <1B98> <7FCA> <1B99> <7AE6> <1B9C> <7A80> <1B9D> <7A86> <1B9E> <7A88> <1B9F> <7A95> <1BA0> <7AA6> <1BA1> <7AA0> <1BA2> <7AAC> <1BA3> <7AA8> <1BA4> <7AAD> <1BA5> <7AB3> <1BA6> <8864> <1BA7> <8869> <1BA8> <8872> <1BA9> <887D> <1BAA> <887F> <1BAB> <8882> <1BAC> <88A2> <1BAD> <88C6> <1BAE> <88B7> <1BAF> <88BC> <1BB0> <88C9> <1BB1> <88E2> <1BB2> <88CE> <1BB3> <88E3> <1BB4> <88E5> <1BB5> <88F1> <1BB6> <891A> <1BB7> <88FC> <1BB8> <88E8> <1BB9> <88FE> <1BBA> <88F0> <1BBB> <8921> <1BBC> <8919> <1BBD> <8913> <1BBE> <891B> <1BBF> <890A> <1BC0> <8934> <1BC1> <892B> <1BC2> <8936> <1BC3> <8941> <1BC4> <8966> <1BC5> <897B> <1BC6> <758B> <1BC7> <80E5> <1BC8> <76B2> <1BC9> <76B4> <1BCA> <77DC> <1BCB> <8012> <1BCC> <8014> <1BCD> <8016> <1BCE> <801C> <1BCF> <8020> <1BD0> <8022> <1BD4> <8029> <1BD5> <8028> endbfchar 100 beginbfchar <1BD6> <8031> <1BD7> <800B> <1BD8> <8035> <1BD9> <8043> <1BDA> <8046> <1BDB> <804D> <1BDC> <8052> <1BDD> <8069> <1BDE> <8071> <1BDF> <8983> <1BE0> <9878> <1BE1> <9880> <1BE2> <9883> <1BE3> <9889> <1BE6> <988F> <1BE7> <9894> <1BF0> <864D> <1BF1> <8654> <1BF2> <866C> <1BF3> <866E> <1BF4> <867F> <1BF5> <867A> <1BF6> <867C> <1BF7> <867B> <1BF8> <86A8> <1BF9> <868D> <1BFA> <868B> <1BFB> <86AC> <1BFC> <869D> <1BFD> <86A7> <1BFE> <86A3> <1BFF> <86AA> <1C00> <8693> <1C01> <86A9> <1C02> <86B6> <1C03> <86C4> <1C04> <86B5> <1C05> <86CE> <1C06> <86B0> <1C07> <86BA> <1C08> <86B1> <1C09> <86AF> <1C0A> <86C9> <1C0B> <86CF> <1C0C> <86B4> <1C0D> <86E9> <1C10> <86ED> <1C11> <86F3> <1C12> <86D0> <1C13> <8713> <1C14> <86DE> <1C15> <86F4> <1C16> <86DF> <1C17> <86D8> <1C18> <86D1> <1C19> <8703> <1C1A> <8707> <1C1B> <86F8> <1C1C> <8708> <1C1D> <870A> <1C1E> <870D> <1C1F> <8709> <1C20> <8723> <1C21> <873B> <1C22> <871E> <1C23> <8725> <1C24> <872E> <1C25> <871A> <1C26> <873E> <1C27> <8748> <1C28> <8734> <1C29> <8731> <1C2A> <8729> <1C2B> <8737> <1C2C> <873F> <1C2D> <8782> <1C2E> <8722> <1C31> <877B> <1C32> <8760> <1C33> <8770> <1C34> <874C> <1C35> <876E> <1C36> <878B> <1C37> <8753> <1C38> <8763> <1C39> <877C> <1C3A> <8764> <1C3B> <8759> <1C3C> <8765> <1C3D> <8793> <1C3E> <87AF> <1C3F> <87A8> <1C40> <87D2> <1C41> <87C6> <1C42> <8788> <1C43> <8785> <1C44> <87AD> <1C45> <8797> <1C46> <8783> <1C47> <87AB> endbfchar 100 beginbfchar <1C48> <87E5> <1C49> <87AC> <1C4A> <87B5> <1C4B> <87B3> <1C4C> <87CB> <1C4D> <87D3> <1C4E> <87BD> <1C4F> <87D1> <1C50> <87C0> <1C51> <87CA> <1C52> <87DB> <1C53> <87EA> <1C54> <87E0> <1C55> <87EE> <1C56> <8816> <1C57> <8813> <1C58> <87FE> <1C59> <880A> <1C5A> <881B> <1C5B> <8821> <1C5C> <8839> <1C5D> <883C> <1C5E> <7F36> <1C5F> <7F42> <1C62> <8210> <1C63> <7AFA> <1C64> <7AFD> <1C65> <7B08> <1C68> <7B15> <1C69> <7B0A> <1C6A> <7B2B> <1C6B> <7B0F> <1C6C> <7B47> <1C6D> <7B38> <1C6E> <7B2A> <1C6F> <7B19> <1C70> <7B2E> <1C71> <7B31> <1C72> <7B20> <1C73> <7B25> <1C74> <7B24> <1C75> <7B33> <1C76> <7B3E> <1C77> <7B1E> <1C78> <7B58> <1C79> <7B5A> <1C7A> <7B45> <1C7B> <7B75> <1C7C> <7B4C> <1C7D> <7B5D> <1C7E> <7B60> <1C7F> <7B6E> <1C80> <7B7B> <1C81> <7B62> <1C82> <7B72> <1C83> <7B71> <1C84> <7B90> <1C87> <7BB8> <1C88> <7BAC> <1C89> <7B9D> <1C8A> <7BA8> <1C8B> <7B85> <1C8C> <7BAA> <1C8D> <7B9C> <1C8E> <7BA2> <1C8F> <7BAB> <1C90> <7BB4> <1C91> <7BD1> <1C92> <7BC1> <1C93> <7BCC> <1C94> <7BDD> <1C95> <7BDA> <1C98> <7BEA> <1C99> <7C0C> <1C9A> <7BFE> <1C9B> <7BFC> <1C9C> <7C0F> <1C9D> <7C16> <1C9E> <7C0B> <1C9F> <7C1F> <1CA0> <7C2A> <1CA1> <7C26> <1CA2> <7C38> <1CA3> <7C41> <1CA4> <7C40> <1CA5> <81FE> <1CA8> <8204> <1CA9> <81EC> <1CAA> <8844> <1CAE> <822D> <1CAF> <822F> <1CB0> <8228> <1CB1> <822B> <1CB2> <8238> <1CB3> <823B> <1CB6> <823E> <1CB7> <8244> <1CB8> <8249> <1CB9> <824B> <1CBA> <824F> endbfchar 100 beginbfchar <1CBB> <825A> <1CBC> <825F> <1CBD> <8268> <1CBE> <887E> <1CBF> <8885> <1CC0> <8888> <1CC1> <88D8> <1CC2> <88DF> <1CC3> <895E> <1CC4> <7F9D> <1CC5> <7F9F> <1CC6> <7FA7> <1CC9> <7FB2> <1CCA> <7C7C> <1CCB> <6549> <1CCC> <7C91> <1CCD> <7C9D> <1CCE> <7C9C> <1CCF> <7C9E> <1CD0> <7CA2> <1CD1> <7CB2> <1CD4> <7CC1> <1CD5> <7CC7> <1CD8> <7CC8> <1CD9> <7CC5> <1CDA> <7CD7> <1CDB> <7CE8> <1CDC> <826E> <1CDD> <66A8> <1CDE> <7FBF> <1CDF> <7FCE> <1CE0> <7FD5> <1CE1> <7FE5> <1CE2> <7FE1> <1CE3> <7FE6> <1CE4> <7FE9> <1CE5> <7FEE> <1CE6> <7FF3> <1CE7> <7CF8> <1CE8> <7D77> <1CE9> <7DA6> <1CEA> <7DAE> <1CEB> <7E47> <1CEC> <7E9B> <1CED> <9EB8> <1CEE> <9EB4> <1CEF> <8D73> <1CF0> <8D84> <1CF1> <8D94> <1CF2> <8D91> <1CF3> <8DB1> <1CF4> <8D67> <1CF5> <8D6D> <1CF6> <8C47> <1CF7> <8C49> <1CF8> <914A> <1CF9> <9150> <1CFC> <9164> <1CFD> <9162> <1CFE> <9161> <1CFF> <9170> <1D00> <9169> <1D01> <916F> <1D04> <9172> <1D05> <9174> <1D06> <9179> <1D07> <918C> <1D08> <9185> <1D09> <9190> <1D0A> <918D> <1D0B> <9191> <1D0E> <91AA> <1D12> <91B5> <1D13> <91B4> <1D14> <91BA> <1D15> <8C55> <1D16> <9E7E> <1D17> <8DB8> <1D18> <8DEB> <1D19> <8E05> <1D1A> <8E59> <1D1B> <8E69> <1D1C> <8DB5> <1D1D> <8DBF> <1D1E> <8DBC> <1D1F> <8DBA> <1D20> <8DC4> <1D23> <8DDA> <1D24> <8DDE> <1D27> <8DDB> <1D28> <8DC6> <1D29> <8DEC> <1D2C> <8DE3> <1D2D> <8DF9> <1D2E> <8DFB> <1D2F> <8DE4> <1D30> <8E09> <1D31> <8DFD> <1D32> <8E14> <1D33> <8E1D> endbfchar 100 beginbfchar <1D34> <8E1F> <1D35> <8E2C> <1D36> <8E2E> <1D37> <8E23> <1D38> <8E2F> <1D39> <8E3A> <1D3A> <8E40> <1D3B> <8E39> <1D3C> <8E35> <1D3D> <8E3D> <1D3E> <8E31> <1D3F> <8E49> <1D44> <8E4A> <1D45> <8E70> <1D46> <8E76> <1D47> <8E7C> <1D48> <8E6F> <1D49> <8E74> <1D4A> <8E85> <1D4B> <8E8F> <1D4C> <8E94> <1D4D> <8E90> <1D4E> <8E9C> <1D4F> <8E9E> <1D50> <8C78> <1D51> <8C82> <1D52> <8C8A> <1D53> <8C85> <1D54> <8C98> <1D55> <8C94> <1D56> <659B> <1D57> <89D6> <1D58> <89DE> <1D59> <89DA> <1D5A> <89DC> <1D5B> <89E5> <1D5C> <89EB> <1D5D> <89EF> <1D5E> <8A3E> <1D5F> <8B26> <1D60> <9753> <1D61> <96E9> <1D62> <96F3> <1D63> <96EF> <1D64> <9706> <1D65> <9701> <1D66> <9708> <1D67> <970F> <1D68> <970E> <1D69> <972A> <1D6A> <972D> <1D6B> <9730> <1D6C> <973E> <1D6D> <9F80> <1D6E> <9F83> <1D75> <9F8C> <1D76> <9EFE> <1D77> <9F0B> <1D78> <9F0D> <1D79> <96B9> <1D7C> <96CE> <1D7D> <96D2> <1D7E> <77BF> <1D7F> <96E0> <1D80> <928E> <1D81> <92AE> <1D82> <92C8> <1D83> <933E> <1D84> <936A> <1D85> <93CA> <1D86> <938F> <1D87> <943E> <1D88> <946B> <1D89> <9C7F> <1D8A> <9C82> <1D8F> <7A23> <1D90> <9C8B> <1D91> <9C8E> <1DA4> <9CAB> <1DC6> <9CDF> <1DC7> <9CE2> <1DC8> <977C> <1DC9> <9785> <1DCC> <9794> <1DCD> <97AF> <1DCE> <97AB> <1DCF> <97A3> <1DD0> <97B2> <1DD1> <97B4> <1DD2> <9AB1> <1DD3> <9AB0> <1DD4> <9AB7> <1DD5> <9E58> <1DD6> <9AB6> <1DD7> <9ABA> <1DD8> <9ABC> <1DD9> <9AC1> <1DDA> <9AC0> <1DDB> <9AC5> <1DDC> <9AC2> endbfchar 100 beginbfchar <1DDF> <9AD1> <1DE0> <9B45> <1DE1> <9B43> <1DE2> <9B47> <1DE3> <9B49> <1DE4> <9B48> <1DE5> <9B4D> <1DE6> <9B51> <1DE7> <98E8> <1DE8> <990D> <1DE9> <992E> <1DEA> <9955> <1DEB> <9954> <1DEC> <9ADF> <1DED> <9AE1> <1DEE> <9AE6> <1DEF> <9AEF> <1DF0> <9AEB> <1DF1> <9AFB> <1DF2> <9AED> <1DF3> <9AF9> <1DF4> <9B08> <1DF5> <9B0F> <1DF6> <9B13> <1DF7> <9B1F> <1DF8> <9B23> <1DFB> <7E3B> <1DFC> <9E82> <1DFF> <9E8B> <1E00> <9E92> <1E01> <93D6> <1E02> <9E9D> <1E03> <9E9F> <1E07> <9EE0> <1E08> <9EDF> <1E09> <9EE2> <1E0A> <9EE9> <1E0B> <9EE7> <1E0C> <9EE5> <1E0D> <9EEA> <1E0E> <9EEF> <1E0F> <9F22> <1E10> <9F2C> <1E11> <9F2F> <1E12> <9F39> <1E13> <9F37> <1E16> <9F44> <1E17> <3007> <1E18> <1E19> <2016> <1E1A> <3013> <1E1B> <1E1C> <1E1D> <1E1E> <1E1F> <1E20> <00FC> <1E21> <00A9> <1E22> <2122> <1E23> <2026> <1E24> <0020> <1E25> <769A> <1E26> <85F9> <1E27> <7919> <1E28> <611B> <1E29> <9AAF> <1E2A> <8956> <1E2B> <58E9> <1E2C> <7F77> <1E2D> <64FA> <1E2E> <6557> <1E2F> <9812> <1E30> <8FA6> <1E31> <7D46> <1E32> <5E6B> <1E33> <7D81> <1E34> <938A> <1E35> <8B17> <1E36> <98FD> <1E37> <5BF6> <1E38> <5831> <1E39> <9B91> <1E3A> <8F29> <1E3B> <8C9D> <1E3C> <92C7> <1E3D> <72FD> <1E3E> <5099> <1E3F> <618A> <1E40> <7DB3> <1E41> <7B46> <1E42> <7562> <1E43> <6583> <1E44> <5E63> <1E45> <9589> <1E46> <908A> <1E47> <7DE8> <1E48> <8CB6> <1E49> <8B8A> <1E4A> <8FAF> <1E4B> <8FAE> endbfchar 100 beginbfchar <1E4C> <6A19> <1E4D> <9C49> <1E4E> <765F> <1E4F> <7015> <1E50> <6FF1> <1E51> <8CD3> <1E52> <64EF> <1E53> <9905> <1E54> <64A5> <1E55> <9262> <1E56> <9251> <1E57> <99C1> <1E58> <88DC> <1E59> <8CA1> <1E5A> <53C3> <1E5B> <8836> <1E5C> <6B98> <1E5D> <615A> <1E5E> <6158> <1E5F> <71E6> <1E60> <84BC> <1E61> <8259> <1E62> <5009> <1E63> <6EC4> <1E64> <53A0> <1E65> <5074> <1E66> <6E2C> <1E67> <5C64> <1E68> <8A6B> <1E69> <6519> <1E6A> <647B> <1E6B> <87EC> <1E6C> <995E> <1E6D> <8B92> <1E6E> <7E8F> <1E6F> <93DF> <1E70> <7523> <1E71> <95E1> <1E72> <986B> <1E73> <5834> <1E74> <5617> <1E75> <9577> <1E76> <511F> <1E77> <8178> <1E78> <5EE0> <1E79> <66A2> <1E7A> <9214> <1E7B> <8ECA> <1E7C> <5FB9> <1E7D> <5875> <1E7E> <9673> <1E7F> <896F> <1E80> <7A31> <1E81> <61F2> <1E82> <8AA0> <1E83> <9A01> <1E84> <9072> <1E85> <99B3> <1E86> <9F52> <1E87> <71BE> <1E88> <885D> <1E89> <87F2> <1E8A> <5BF5> <1E8B> <7587> <1E8C> <8E8A> <1E8D> <7C4C> <1E8E> <7DA2> <1E8F> <919C> <1E90> <92E4> <1E91> <96DB> <1E92> <790E> <1E93> <5132> <1E94> <89F8> <1E95> <8655> <1E96> <50B3> <1E97> <7621> <1E98> <95D6> <1E99> <5275> <1E9A> <9318> <1E9B> <7D14> <1E9C> <7DBD> <1E9D> <8FAD> <1E9E> <8A5E> <1E9F> <8CDC> <1EA0> <8070> <1EA1> <5F9E> <1EA2> <53E2> <1EA3> <8EA5> <1EA4> <7AC4> <1EA5> <932F> <1EA6> <9054> <1EA7> <5E36> <1EA8> <8CB8> <1EA9> <64D4> <1EAA> <55AE> <1EAB> <9132> <1EAC> <64A3> <1EAD> <81BD> <1EAE> <619A> <1EAF> <8A95> endbfchar 100 beginbfchar <1EB0> <5F48> <1EB1> <7576> <1EB2> <64CB> <1EB3> <9EE8> <1EB4> <8569> <1EB5> <6A94> <1EB6> <6417> <1EB7> <5CF6> <1EB8> <79B1> <1EB9> <5C0E> <1EBA> <71C8> <1EBB> <9127> <1EBC> <6575> <1EBD> <6ECC> <1EBE> <905E> <1EBF> <7DE0> <1EC0> <985B> <1EC1> <9EDE> <1EC2> <588A> <1EC3> <96FB> <1EC4> <6FB1> <1EC5> <91E3> <1EC6> <8ABF> <1EC7> <8ADC> <1EC8> <91D8> <1EC9> <9802> <1ECA> <9320> <1ECB> <8A02> <1ECC> <6771> <1ECD> <52D5> <1ECE> <68DF> <1ECF> <51CD> <1ED0> <9B25> <1ED1> <72A2> <1ED2> <7368> <1ED3> <8B80> <1ED4> <8CED> <1ED5> <934D> <1ED6> <935B> <1ED7> <65B7> <1ED8> <7DDE> <1ED9> <968A> <1EDA> <5C0D> <1EDB> <5678> <1EDC> <9813> <1EDD> <920D> <1EDE> <596A> <1EDF> <58AE> <1EE0> <9D5D> <1EE1> <984D> <1EE2> <8A1B> <1EE3> <60E1> <1EE4> <9913> <1EE5> <5152> <1EE6> <723E> <1EE7> <990C> <1EE8> <8CB3> <1EE9> <767C> <1EEA> <7F70> <1EEB> <95A5> <1EEC> <792C> <1EED> <91E9> <1EEE> <7169> <1EEF> <7BC4> <1EF0> <8CA9> <1EF1> <98EF> <1EF2> <8A2A> <1EF3> <7D21> <1EF4> <98DB> <1EF5> <8AB9> <1EF6> <5EE2> <1EF7> <8CBB> <1EF8> <7D1B> <1EF9> <58B3> <1EFA> <596E> <1EFB> <61A4> <1EFC> <7CDE> <1EFD> <8C50> <1EFE> <6953> <1EFF> <92D2> <1F00> <98A8> <1F01> <760B> <1F02> <99AE> <1F03> <7E2B> <1F04> <8AF7> <1F05> <9CF3> <1F06> <819A> <1F07> <8F3B> <1F08> <64AB> <1F09> <8F14> <1F0A> <8CE6> <1F0B> <5FA9> <1F0C> <8CA0> <1F0D> <8A03> <1F0E> <5A66> <1F0F> <7E1B> <1F10> <8A72> <1F11> <9223> <1F12> <84CB> <1F13> <5E79> endbfchar 100 beginbfchar <1F14> <8D95> <1F15> <8D1B> <1F16> <5CA1> <1F17> <525B> <1F18> <92FC> <1F19> <7DB1> <1F1A> <5D17> <1F1B> <93AC> <1F1C> <64F1> <1F1D> <9D3F> <1F1E> <95A3> <1F1F> <927B> <1F20> <500B> <1F21> <7D66> <1F22> <9F94> <1F23> <978F> <1F24> <8CA2> <1F25> <920E> <1F26> <6E9D> <1F27> <69CB> <1F28> <8CFC> <1F29> <8831> <1F2A> <9867> <1F2B> <526E> <1F2C> <95DC> <1F2D> <89C0> <1F2E> <9928> <1F2F> <6163> <1F30> <8CAB> <1F31> <5EE3> <1F32> <898F> <1F33> <6B78> <1F34> <9F9C> <1F35> <95A8> <1F36> <8ECC> <1F37> <8A6D> <1F38> <6AC3> <1F39> <8CB4> <1F3A> <528A> <1F3B> <8F25> <1F3C> <934B> <1F3D> <570B> <1F3E> <904E> <1F3F> <99ED> <1F40> <97D3> <1F41> <6F22> <1F42> <865F> <1F43> <95A1> <1F44> <9DB4> <1F45> <8CC0> <1F46> <8F5F> <1F47> <9D3B> <1F48> <7D05> <1F49> <58FA> <1F4A> <8B77> <1F4B> <6EEC> <1F4C> <5629> <1F4D> <83EF> <1F4E> <756B> <1F4F> <5283> <1F50> <8A71> <1F51> <61F7> <1F52> <58DE> <1F53> <6B61> <1F54> <74B0> <1F55> <9084> <1F56> <7DE9> <1F57> <8B0A> <1F58> <63EE> <1F59> <8F1D> <1F5A> <8CC4> <1F5B> <7A62> <1F5C> <6703> <1F5D> <71F4> <1F5E> <532F> <1F5F> <8AF1> <1F60> <8AA8> <1F61> <7E6A> <1F62> <8477> <1F63> <6E3E> <1F64> <7372> <1F65> <8CA8> <1F66> <798D> <1F67> <64CA> <1F68> <6A5F> <1F69> <7A4D> <1F6A> <9951> <1F6B> <8B4F> <1F6C> <9DC4> <1F6D> <7E3E> <1F6E> <7DDD> <1F6F> <6975> <1F70> <8F2F> <1F71> <7D1A> <1F72> <64E0> <1F73> <5E7E> <1F74> <858A> <1F75> <5291> <1F76> <6FDF> <1F77> <8A08> endbfchar 100 beginbfchar <1F78> <8A18> <1F79> <969B> <1F7A> <7E7C> <1F7B> <7D00> <1F7C> <593E> <1F7D> <83A2> <1F7E> <9830> <1F7F> <8CC8> <1F80> <9240> <1F81> <50F9> <1F82> <99D5> <1F83> <6BB2> <1F84> <76E3> <1F85> <5805> <1F86> <7B8B> <1F87> <9593> <1F88> <8271> <1F89> <7DD8> <1F8A> <7E6D> <1F8B> <6AA2> <1F8C> <9E7C> <1F8D> <63C0> <1F8E> <64BF> <1F8F> <7C21> <1F90> <5109> <1F91> <85A6> <1F92> <6ABB> <1F93> <9452> <1F94> <8E10> <1F95> <8CE4> <1F96> <898B> <1F97> <9375> <1F98> <8266> <1F99> <528D> <1F9A> <991E> <1F9B> <6F38> <1F9C> <6FFA> <1F9D> <6F97> <1F9E> <5C07> <1F9F> <6F3F> <1FA0> <8523> <1FA1> <69F3> <1FA2> <596C> <1FA3> <8B1B> <1FA4> <91AC> <1FA5> <81A0> <1FA6> <6F86> <1FA7> <9A55> <1FA8> <5B0C> <1FA9> <652A> <1FAA> <9278> <1FAB> <77EF> <1FAC> <50E5> <1FAD> <9903> <1FAE> <7E73> <1FAF> <7D5E> <1FB0> <8F4E> <1FB1> <8F03> <1FB2> <968E> <1FB3> <7BC0> <1FB4> <6F54> <1FB5> <7D50> <1FB6> <8AA1> <1FB7> <7DCA> <1FB8> <9326> <1FB9> <50C5> <1FBA> <8B39> <1FBB> <9032> <1FBC> <71FC> <1FBD> <76E1> <1FBE> <52C1> <1FBF> <8396> <1FC0> <9BE8> <1FC1> <9A5A> <1FC2> <7D93> <1FC3> <9838> <1FC4> <93E1> <1FC5> <5F91> <1FC6> <75D9> <1FC7> <7AF6> <1FC8> <7CFE> <1FC9> <820A> <1FCA> <99D2> <1FCB> <8209> <1FCC> <64DA> <1FCD> <92F8> <1FCE> <61FC> <1FCF> <5287> <1FD0> <9D51> <1FD1> <7D79> <1FD2> <89BA> <1FD3> <8A23> <1FD4> <7D76> <1FD5> <921E> <1FD6> <8ECD> <1FD7> <99FF> <1FD8> <958B> <1FD9> <51F1> <1FDA> <9846> <1FDB> <6BBB> endbfchar 100 beginbfchar <1FDC> <8AB2> <1FDD> <58BE> <1FDE> <61C7> <1FDF> <6473> <1FE0> <5EAB> <1FE1> <8932> <1FE2> <8A87> <1FE3> <584A> <1FE4> <5108> <1FE5> <5BEC> <1FE6> <7926> <1FE7> <66E0> <1FE8> <8667> <1FE9> <5DCB> <1FEA> <7ABA> <1FEB> <994B> <1FEC> <6F70> <1FED> <64F4> <1FEE> <95CA> <1FEF> <881F> <1FF0> <81D8> <1FF1> <840A> <1FF2> <4F86> <1FF3> <8CF4> <1FF4> <85CD> <1FF5> <6B04> <1FF6> <6514> <1FF7> <7C43> <1FF8> <95CC> <1FF9> <862D> <1FFA> <703E> <1FFB> <8B95> <1FFC> <652C> <1FFD> <89BD> <1FFE> <61F6> <1FFF> <7E9C> <2000> <721B> <2001> <6FEB> <2002> <6488> <2003> <52DE> <2004> <6F87> <2005> <6A02> <2006> <9433> <2007> <58D8> <2008> <985E> <2009> <7C6C> <200A> <96E2> <200B> <7055> <200C> <88CF> <200D> <9BC9> <200E> <79AE> <200F> <9E97> <2010> <53B2> <2011> <52F5> <2012> <792B> <2013> <6B77> <2014> <701D> <2015> <96B8> <2016> <5006> <2017> <806F> <2018> <84EE> <2019> <9023> <201A> <942E> <201B> <6190> <201C> <6F23> <201D> <7C3E> <201E> <6582> <201F> <81C9> <2020> <93C8> <2021> <6200> <2022> <7149> <2023> <7DF4> <2024> <7CE7> <2025> <5169> <2026> <8F1B> <2027> <8AD2> <2028> <7642> <2029> <907C> <202A> <9410> <202B> <7375> <202C> <81E8> <202D> <9130> <202E> <9C57> <202F> <8CC3> <2030> <9F61> <2031> <9234> <2032> <9748> <2033> <5DBA> <2034> <9818> <2035> <993E> <2036> <5289> <2037> <9F8D> <2038> <807E> <2039> <56A8> <203A> <7C60> <203B> <58DF> <203C> <650F> <203D> <96B4> <203E> <6A13> <203F> <5A41> endbfchar 100 beginbfchar <2040> <645F> <2041> <7C0D> <2042> <8606> <2043> <76E7> <2044> <9871> <2045> <5EEC> <2046> <7210> <2047> <64C4> <2048> <6EF7> <2049> <865C> <204A> <9B6F> <204B> <8CC2> <204C> <9332> <204D> <9678> <204E> <9A62> <204F> <92C1> <2050> <5C62> <2051> <7E37> <2052> <616E> <2053> <6FFE> <2054> <7DD1> <2055> <5DD2> <2056> <6523> <2057> <5B7F> <2058> <7064> <2059> <4E82> <205A> <6384> <205B> <8F2A> <205C> <502B> <205D> <4F96> <205E> <6DEA> <205F> <7DB8> <2060> <8AD6> <2061> <863F> <2062> <7F85> <2063> <908F> <2064> <947C> <2065> <7C6E> <2066> <9A3E> <2067> <99F1> <2068> <7D61> <2069> <5ABD> <206A> <746A> <206B> <78BC> <206C> <879E> <206D> <99AC> <206E> <99E1> <206F> <55CE> <2070> <8CB7> <2071> <9EA5> <2072> <8CE3> <2073> <9081> <2074> <779E> <2075> <9945> <2076> <883B> <2077> <6EFF> <2078> <8B3E> <2079> <9328> <207A> <925A> <207B> <8CBF> <207C> <9382> <207D> <9580> <207E> <60B6> <207F> <5011> <2080> <9333> <2081> <5922> <2082> <8B0E> <2083> <5F4C> <2084> <8993> <2085> <7DBF> <2086> <7DEC> <2087> <5EDF> <2088> <6EC5> <2089> <61AB> <208A> <95A9> <208B> <9CF4> <208C> <9298> <208D> <8B2C> <208E> <8B00> <208F> <755D> <2090> <9209> <2091> <7D0D> <2092> <96E3> <2093> <6493> <2094> <8166> <2095> <60F1> <2096> <9B27> <2097> <9912> <2098> <64EC> <2099> <81A9> <209A> <6506> <209B> <91C0> <209C> <9CE5> <209D> <8076> <209E> <5699> <209F> <9477> <20A0> <93B3> <20A1> <6AB8> <20A2> <7370> <20A3> <5BE7> endbfchar 100 beginbfchar <20A4> <64F0> <20A5> <6FD8> <20A6> <9215> <20A7> <7D10> <20A8> <81BF> <20A9> <6FC3> <20AA> <8FB2> <20AB> <7627> <20AC> <8AFE> <20AD> <6B50> <20AE> <9DD7> <20AF> <6BC6> <20B0> <5614> <20B1> <6F1A> <20B2> <76E4> <20B3> <9F90> <20B4> <8CE0> <20B5> <5674> <20B6> <9D6C> <20B7> <9A19> <20B8> <98C4> <20B9> <983B> <20BA> <8CA7> <20BB> <860B> <20BC> <6191> <20BD> <8A55> <20BE> <6F51> <20BF> <9817> <20C0> <64B2> <20C1> <92EA> <20C2> <50D5> <20C3> <6A38> <20C4> <8B5C> <20C5> <81CD> <20C6> <9F4A> <20C7> <9A0E> <20C8> <8C48> <20C9> <5553> <20CA> <6C23> <20CB> <8A16> <20CC> <727D> <20CD> <91FA> <20CE> <925B> <20CF> <9077> <20D0> <7C3D> <20D1> <8B19> <20D2> <9322> <20D3> <9257> <20D4> <6DFA> <20D5> <8B74> <20D6> <5879> <20D7> <69CD> <20D8> <55C6> <20D9> <58BB> <20DA> <8594> <20DB> <6436> <20DC> <936C> <20DD> <6A4B> <20DE> <55AC> <20DF> <50D1> <20E0> <7FF9> <20E1> <7AC5> <20E2> <7ACA> <20E3> <6B3D> <20E4> <89AA> <20E5> <5BE2> <20E6> <8F15> <20E7> <6C2B> <20E8> <50BE> <20E9> <9803> <20EA> <8ACB> <20EB> <6176> <20EC> <74CA> <20ED> <7AAE> <20EE> <8DA8> <20EF> <5340> <20F0> <8EC0> <20F1> <9A45> <20F2> <9F72> <20F3> <9874> <20F4> <6B0A> <20F5> <52F8> <20F6> <9D72> <20F7> <78BA> <20F8> <8B93> <20F9> <9952> <20FA> <64FE> <20FB> <7E5E> <20FC> <71B1> <20FD> <97CC> <20FE> <8A8D> <20FF> <7D09> <2100> <69AE> <2101> <7D68> <2102> <8EDF> <2103> <92ED> <2104> <958F> <2105> <6F64> <2106> <7051> <2107> <85A9> endbfchar 100 beginbfchar <2108> <9C13> <2109> <8CFD> <210A> <5098> <210B> <55AA> <210C> <9A37> <210D> <6383> <210E> <6F80> <210F> <6BBA> <2110> <7D17> <2111> <7BE9> <2112> <66EC> <2113> <9583> <2114> <965D> <2115> <8D0D> <2116> <7E55> <2117> <50B7> <2118> <8CDE> <2119> <71D2> <211A> <7D39> <211B> <8CD2> <211C> <6368> <211D> <651D> <211E> <61FE> <211F> <8A2D> <2120> <7D33> <2121> <5BE9> <2122> <5B38> <2123> <814E> <2124> <6EF2> <2125> <8072> <2126> <7E69> <2127> <52DD> <2128> <8056> <2129> <5E2B> <212A> <7345> <212B> <6FD5> <212C> <8A69> <212D> <6642> <212E> <8755> <212F> <5BE6> <2130> <8B58> <2131> <99DB> <2132> <52E2> <2133> <9069> <2134> <91CB> <2135> <98FE> <2136> <8996> <2137> <8A66> <2138> <58FD> <2139> <7378> <213A> <6A1E> <213B> <8F38> <213C> <66F8> <213D> <8D16> <213E> <5C6C> <213F> <8853> <2140> <6A39> <2141> <7AEA> <2142> <6578> <2143> <5E25> <2144> <96D9> <2145> <8AB0> <2146> <9806> <2147> <8AAC> <2148> <78A9> <2149> <720D> <214A> <7D72> <214B> <98FC> <214C> <9B06> <214D> <8073> <214E> <616B> <214F> <980C> <2150> <8A1F> <2151> <8AA6> <2152> <64FB> <2153> <8607> <2154> <8A34> <2155> <8085> <2156> <96D6> <2157> <96A8> <2158> <7D8F> <2159> <6B72> <215A> <5B6B> <215B> <640D> <215C> <7E2E> <215D> <7463> <215E> <9396> <215F> <737A> <2160> <64BB> <2161> <81FA> <2162> <614B> <2163> <6524> <2164> <8CAA> <2165> <7671> <2166> <7058> <2167> <58C7> <2168> <8B5A> <2169> <8AC7> <216A> <5606> <216B> <6E6F> endbfchar 100 beginbfchar <216C> <71D9> <216D> <6FE4> <216E> <7E27> <216F> <8A0E> <2170> <9A30> <2171> <8B04> <2172> <92BB> <2173> <984C> <2174> <9AD4> <2175> <689D> <2176> <8CBC> <2177> <9435> <2178> <5EF3> <2179> <807D> <217A> <70F4> <217B> <9285> <217C> <7D71> <217D> <982D> <217E> <5716> <217F> <5857> <2180> <5718> <2181> <983D> <2182> <9D15> <2183> <99B1> <2184> <99DD> <2185> <6A62> <2186> <7AAA> <2187> <896A> <2188> <5F4E> <2189> <7063> <218A> <9811> <218B> <842C> <218C> <7DB2> <218D> <97CB> <218E> <9055> <218F> <570D> <2190> <7232> <2191> <6FF0> <2192> <7DAD> <2193> <8466> <2194> <5049> <2195> <50DE> <2196> <7DEF> <2197> <8B02> <2198> <885B> <2199> <805E> <219A> <7D0B> <219B> <7A69> <219C> <554F> <219D> <64BE> <219E> <8778> <219F> <6E26> <21A0> <7AA9> <21A1> <55DA> <21A2> <93A2> <21A3> <70CF> <21A4> <8AA3> <21A5> <7121> <21A6> <856A> <21A7> <5862> <21A8> <9727> <21A9> <52D9> <21AA> <8AA4> <21AB> <932B> <21AC> <72A7> <21AD> <8972> <21AE> <7FD2> <21AF> <9291> <21B0> <6232> <21B1> <7D30> <21B2> <8766> <21B3> <8F44> <21B4> <5CFD> <21B5> <4FE0> <21B6> <72F9> <21B7> <5687> <21B8> <9341> <21B9> <9BAE> <21BA> <7E96> <21BB> <8CE2> <21BC> <929C> <21BD> <9591> <21BE> <986F> <21BF> <96AA> <21C0> <73FE> <21C1> <737B> <21C2> <7E23> <21C3> <9921> <21C4> <61B2> <21C5> <7DAB> <21C6> <9472> <21C7> <9109> <21C8> <8A73> <21C9> <97FF> <21CA> <9805> <21CB> <856D> <21CC> <56C2> <21CD> <92B7> <21CE> <66C9> <21CF> <562F> endbfchar 100 beginbfchar <21D0> <5354> <21D1> <633E> <21D2> <8105> <21D3> <8AE7> <21D4> <5BEB> <21D5> <7009> <21D6> <8B1D> <21D7> <92C5> <21D8> <91C1> <21D9> <8208> <21DA> <92B9> <21DB> <7D89> <21DC> <9808> <21DD> <8A31> <21DE> <7DD2> <21DF> <7E8C> <21E0> <8ED2> <21E1> <61F8> <21E2> <9078> <21E3> <766C> <21E4> <7D62> <21E5> <5B78> <21E6> <52DB> <21E7> <8A62> <21E8> <5C0B> <21E9> <99B4> <21EA> <8A13> <21EB> <8A0A> <21EC> <905C> <21ED> <58D3> <21EE> <9D09> <21EF> <9D28> <21F0> <555E> <21F1> <4E9E> <21F2> <8A1D> <21F3> <95B9> <21F4> <9E7D> <21F5> <56B4> <21F6> <9854> <21F7> <95BB> <21F8> <8277> <21F9> <53AD> <21FA> <786F> <21FB> <8AFA> <21FC> <9A57> <21FD> <9D26> <21FE> <694A> <21FF> <63DA> <2200> <760D> <2201> <967D> <2202> <7662> <2203> <990A> <2204> <6A23> <2205> <582F> <2206> <8B21> <2207> <85E5> <2208> <723A> <2209> <9801> <220A> <696D> <220B> <8449> <220C> <91AB> <220D> <92A5> <220E> <9824> <220F> <907A> <2210> <5100> <2211> <87FB> <2212> <85DD> <2213> <5104> <2214> <61B6> <2215> <7FA9> <2216> <8A63> <2217> <8B70> <2218> <8ABC> <2219> <8B6F> <221A> <7E79> <221B> <852D> <221C> <9670> <221D> <9280> <221E> <98F2> <221F> <96B1> <2220> <6AFB> <2221> <5B30> <2222> <9DF9> <2223> <61C9> <2224> <7E93> <2225> <7469> <2226> <87A2> <2227> <71DF> <2228> <7192> <2229> <8805> <222A> <8D0F> <222B> <7A4E> <222C> <55B2> <222D> <64C1> <222E> <50AD> <222F> <7670> <2230> <8E34> <2231> <512A> <2232> <6182> <2233> <90F5> endbfchar 100 beginbfchar <2234> <923E> <2235> <7336> <2236> <8A98> <2237> <8F3F> <2238> <9918> <2239> <9B5A> <223A> <6F01> <223B> <8207> <223C> <5DBC> <223D> <8A9E> <223E> <9B31> <223F> <7344> <2240> <8B7D> <2241> <9810> <2242> <99AD> <2243> <9D1B> <2244> <6DF5> <2245> <8F45> <2246> <5712> <2247> <54E1> <2248> <5713> <2249> <7DE3> <224A> <9060> <224B> <9858> <224C> <7D04> <224D> <8E8D> <224E> <9470> <224F> <95B2> <2250> <96F2> <2251> <9116> <2252> <9695> <2253> <904B> <2254> <85F4> <2255> <9196> <2256> <6688> <2257> <96DC> <2258> <8F09> <2259> <6522> <225A> <66AB> <225B> <8D0A> <225C> <8D1C> <225D> <81DF> <225E> <947F> <225F> <68D7> <2260> <7AC8> <2261> <8CAC> <2262> <64C7> <2263> <5247> <2264> <6FA4> <2265> <8CCA> <2266> <8D08> <2267> <8ECB> <2268> <9358> <2269> <9598> <226A> <8A50> <226B> <9F4B> <226C> <50B5> <226D> <6C08> <226E> <76DE> <226F> <65AC> <2270> <8F3E> <2271> <5D84> <2272> <68E7> <2273> <6230> <2274> <7DBB> <2275> <5F35> <2276> <6F32> <2277> <5E33> <2278> <8CEC> <2279> <8139> <227A> <8D99> <227B> <87C4> <227C> <8F4D> <227D> <937A> <227E> <9019> <227F> <8C9E> <2280> <91DD> <2281> <5075> <2282> <8A3A> <2283> <93AE> <2284> <9663> <2285> <5E40> <2286> <7665> <2287> <912D> <2288> <8B49> <2289> <7E54> <228A> <8077> <228B> <57F7> <228C> <8879> <228D> <7D19> <228E> <646F> <228F> <64F2> <2290> <5E5F> <2291> <8CEA> <2292> <6EEF> <2293> <9418> <2294> <7D42> <2295> <7A2E> <2296> <816B> <2297> <8846> endbfchar 100 beginbfchar <2298> <8B05> <2299> <8EF8> <229A> <76BA> <229B> <665D> <229C> <9A5F> <229D> <8AF8> <229E> <8A85> <229F> <71ED> <22A0> <77DA> <22A1> <56D1> <22A2> <8CAF> <22A3> <9444> <22A4> <7BC9> <22A5> <99D0> <22A6> <5C08> <22A7> <78DA> <22A8> <8F49> <22A9> <8CFA> <22AA> <6A01> <22AB> <838A> <22AC> <88DD> <22AD> <599D> <22AE> <58EF> <22AF> <72C0> <22B0> <9310> <22B1> <8D05> <22B2> <589C> <22B3> <7DB4> <22B4> <8AC4> <22B5> <6E96> <22B6> <6FC1> <22B7> <8CC7> <22B8> <6F2C> <22B9> <7D9C> <22BA> <7E3D> <22BB> <7E31> <22BC> <9112> <22BD> <8A5B> <22BE> <7D44> <22BF> <947D> <22C0> <55C7> <22C1> <5399> <22C2> <53B4> <22C3> <9768> <22C4> <8D0B> <22C5> <532D> <22C6> <5331> <22C7> <8CFE> <22C8> <5244> <22C9> <528C> <22CA> <5274> <22CB> <50B4> <22CC> <5000> <22CD> <5096> <22CE> <5115> <22CF> <5102> <22D0> <5114> <22D1> <513C> <22D2> <5137> <22D3> <50E8> <22D4> <50C2> <22D5> <513B> <22D6> <5110> <22D7> <513A> <22D8> <50C9> <22D9> <7CF4> <22DA> <9ECC> <22DB> <56C5> <22DC> <9CEC> <22DD> <893B> <22DE> <81E0> <22DF> <8A01> <22E0> <8A10> <22E1> <8A0C> <22E2> <8A15> <22E3> <8B33> <22E4> <8A4E> <22E5> <8A25> <22E6> <8A41> <22E7> <8A36> <22E8> <8A46> <22E9> <8A54> <22EA> <8A58> <22EB> <8A52> <22EC> <8A86> <22ED> <8A84> <22EE> <8A7F> <22EF> <8A70> <22F0> <8A7C> <22F1> <8A75> <22F2> <8A6C> <22F3> <8A6E> <22F4> <8ACD> <22F5> <8AE2> <22F6> <8A61> <22F7> <8A9A> <22F8> <8AA5> <22FB> <8ACF> <22FC> <8AD1> <22FD> <8AC9> endbfchar 100 beginbfchar <22FE> <8ADB> <22FF> <8AD7> <2300> <8AC2> <2301> <8AB6> <2302> <8AF6> <2303> <8AEB> <2304> <8B14> <2305> <8B01> <2306> <8AE4> <2307> <8AED> <2308> <8AFC> <2309> <8AF3> <230A> <8AE6> <230B> <8AEE> <230C> <8ADE> <230D> <8B28> <230E> <8B9C> <230F> <8B16> <2310> <8B1A> <2311> <8B10> <2312> <8B2B> <2313> <8B2D> <2314> <8B56> <2315> <8B59> <2316> <8B4E> <2317> <8B9E> <2318> <8B6B> <2319> <8B96> <231A> <9658> <231B> <913A> <231C> <9114> <231D> <9134> <231E> <90DF> <231F> <9136> <2320> <9106> <2321> <9148> <2322> <82BB> <2323> <52F1> <2324> <5DF0> <2325> <580A> <2326> <58D9> <2327> <58E2> <2328> <58E0> <2329> <58DA> <232A> <57E1> <232B> <584F> <232C> <5816> <232D> <5852> <232E> <581D> <232F> <5864> <2330> <858C> <2331> <8553> <2332> <85F6> <2333> <83A7> <2334> <8407> <2335> <84EF> <2336> <82E7> <2337> <8622> <2338> <8526> <2339> <584B> <233A> <7162> <233B> <8558> <233C> <84FD> <233D> <854E> <233E> <8588> <233F> <85BA> <2340> <7296> <2341> <6ECE> <2342> <8541> <2343> <85CE> <2344> <8552> <2345> <84C0> <2346> <8452> <2347> <8464> <2348> <8494> <2349> <8435> <234A> <859F> <234B> <8555> <234C> <9DAF> <234D> <8493> <234E> <7E08> <234F> <8546> <2350> <8562> <2351> <851E> <2352> <9A40> <2353> <863A> <2354> <93A3> <2355> <8577> <2356> <861E> <2357> <85FA> <2358> <8604> <2359> <85EA> <235A> <861A> <235B> <5969> <235C> <5C37> <235D> <636B> <235E> <6476> <235F> <649F> <2360> <6451> <2361> <645C> endbfchar 100 beginbfchar <2362> <64B3> <2363> <6504> <2364> <6516> <2365> <64F7> <2366> <64FC> <2367> <651B> <2368> <5630> <2369> <5638> <236A> <56C8> <236B> <56A6> <236C> <5504> <236D> <54BC> <236E> <5680> <236F> <565D> <2370> <5660> <2371> <5635> <2372> <55F6> <2373> <5666> <2374> <5672> <2375> <568C> <2376> <5665> <2377> <561C> <2378> <562E> <2379> <55E9> <237A> <5616> <237B> <56C0> <237C> <560D> <237D> <56B3> <237E> <56C1> <237F> <566F> <2380> <8F61> <2381> <56B6> <2382> <5695> <2383> <5707> <2384> <5E43> <2385> <5E6C> <2386> <5E58> <2387> <5E57> <2388> <5D87> <2389> <5CF4> <238A> <5D50> <238B> <5D2C> <238C> <5DA7> <238D> <5DA0> <238E> <5D97> <238F> <5D0D> <2390> <5DB8> <2391> <5D81> <2392> <5DD4> <2393> <5FA0> <2394> <7377> <2395> <7341> <2396> <736A> <2397> <733B> <2398> <736B> <2399> <7380> <239A> <737C> <239B> <98E0> <239C> <9933> <239D> <98E9> <239E> <993C> <23A1> <98ED> <23A2> <98F4> <23A3> <9909> <23A4> <9911> <23A5> <991B> <23A6> <9937> <23A7> <993F> <23A8> <9943> <23AC> <994C> <23AD> <9962> <23AE> <5EE1> <23AF> <8CE1> <23B0> <61FA> <23B1> <61AE> <23B2> <616A> <23B3> <613E> <23B4> <60B5> <23B5> <6134> <23B6> <61CC> <23B7> <615F> <23B8> <61E8> <23B9> <60FB> <23BA> <6137> <23BB> <60F2> <23BC> <6173> <23BD> <611C> <23BE> <6192> <23BF> <9582> <23C0> <9586> <23C1> <95C8> <23C2> <958E> <23C3> <9594> <23C4> <958C> <23C5> <95E5> <23C6> <95AD> <23C7> <95AB> <23C8> <9B2E> <23C9> <95AC> <23CA> <95BE> endbfchar 100 beginbfchar <23CB> <95B6> <23CC> <9B29> <23CD> <95BF> <23CE> <95BD> <23CF> <95BC> <23D0> <95C3> <23D1> <95CB> <23D2> <95D4> <23D3> <95D0> <23D4> <95D5> <23D5> <95DE> <23D6> <7043> <23D7> <6F59> <23D8> <7027> <23D9> <7018> <23DA> <6FFC> <23DB> <6D87> <23DC> <6D79> <23DD> <6E5E> <23DE> <6FAE> <23DF> <700F> <23E0> <6EF8> <23E1> <6F6F> <23E2> <6DF6> <23E3> <6F7F> <23E4> <7006> <23E5> <6FA0> <23E6> <700B> <23E7> <7067> <23E8> <7044> <23E9> <7005> <23EA> <6F77> <23EB> <7020> <23EC> <701F> <23ED> <7032> <23EE> <7028> <23EF> <705D> <23F0> <9A2B> <23F1> <9087> <23F2> <9015> <23F3> <9090> <23F4> <5C68> <23F5> <5F33> <23F6> <5AF5> <23F7> <5AD7> <23F8> <5B00> <23F9> <5A6D> <23FA> <5B08> <23FB> <5B4C> <23FC> <5AA7> <23FD> <5AFB> <23FE> <5B0B> <23FF> <5B21> <2400> <5B2A> <2401> <5B19> <2402> <99D4> <2403> <99DF> <2404> <99D9> <2405> <9A36> <2406> <9A5B> <2407> <99D1> <2408> <99D8> <2409> <9A4D> <240A> <9A4A> <240B> <99E2> <240C> <9A6A> <240D> <9A0F> <240E> <9A0D> <240F> <9A05> <2410> <9A42> <2411> <9A2D> <2412> <9A16> <2413> <9A41> <2414> <9A2E> <2415> <9A38> <2418> <9A4F> <2419> <9A65> <241A> <9A64> <241B> <7CF9> <241C> <7D06> <241D> <7D02> <2420> <7E8A> <2421> <7D1C> <2422> <7D15> <2423> <7D13> <2424> <7D3A> <2425> <7D32> <2426> <7D31> <2427> <7E10> <2428> <7D3C> <2429> <7D40> <242A> <7D3F> <242B> <7D5D> <242C> <7D4E> <242D> <7D73> <242E> <7D86> <242F> <7D83> <2430> <7D88> <2431> <7DBE> <2432> <7DBA> endbfchar 100 beginbfchar <2433> <7DCB> <2434> <7DD4> <2435> <7DC4> <2436> <7D9E> <2437> <7DAC> <2438> <7DB9> <2439> <7DA3> <243A> <7DB0> <243B> <7DC7> <243C> <7DD9> <243D> <7DD7> <243E> <7DF9> <243F> <7DF2> <2440> <7E62> <2441> <7DE6> <2442> <7DF6> <2443> <7DF1> <2444> <7E0B> <2445> <7DE1> <2446> <7E09> <2447> <7E1D> <2448> <7E1F> <2449> <7E1E> <244A> <7E2D> <244B> <7E0A> <244C> <7E11> <244D> <7E7D> <244E> <7E39> <244F> <7E35> <2450> <7E32> <2451> <7E46> <2452> <7E45> <2453> <7E88> <2454> <7E5A> <2455> <7E52> <2456> <7E6E> <2457> <7E7E> <2458> <7E70> <2459> <7E6F> <245A> <7E98> <245B> <74A3> <245C> <744B> <245D> <74CF> <245E> <980A> <245F> <74BD> <2460> <743F> <2461> <7489> <2462> <74A6> <2463> <74D4> <2464> <74DA> <2465> <97D9> <2466> <97DE> <2467> <97DC> <2468> <69AA> <2469> <6AEA> <246A> <6898> <246B> <68D6> <246C> <6A05> <246D> <689F> <246E> <6ADB> <246F> <6AF3> <2470> <6AE8> <2471> <6ADF> <2472> <6A89> <2473> <690F> <2474> <6A48> <2475> <6968> <2476> <69BF> <2477> <6A3A> <2478> <6A9C> <2479> <6B12> <247A> <6B1E> <247B> <6ADD> <247C> <69E7> <247D> <6B0F> <247E> <6B16> <247F> <6AEC> <2480> <6ADA> <2481> <6AF8> <2482> <6AB3> <2483> <6AE7> <2484> <6AA3> <2485> <6AD3> <2486> <6ADE> <2487> <6BA4> <2488> <6B9E> <2489> <6BAE> <248A> <6BAB> <248B> <6BAF> <248C> <8ED4> <248D> <8EDB> <248E> <8EF2> <248F> <8EFB> <2490> <8F64> <2491> <8EF9> <2492> <8EFC> <2493> <8EEB> <2494> <8EE4> <2495> <8F62> <2496> <8EFA> endbfchar 100 beginbfchar <2497> <8EFE> <2498> <8F0A> <2499> <8F07> <249A> <8F05> <249B> <8F12> <249C> <8F26> <249F> <8F1C> <24A0> <8F33> <24A1> <8F46> <24A2> <8F54> <24A3> <6214> <24A4> <6227> <24A5> <750C> <24A6> <66C7> <24A7> <66C4> <24A8> <6689> <24A9> <66D6> <24AA> <8CC1> <24AB> <8CB0> <24AC> <8CBA> <24AD> <8CBD> <24AE> <8D04> <24AF> <8CB2> <24B0> <8CC5> <24B1> <8D10> <24B2> <8CD1> <24B3> <8CDA> <24B4> <8CD5> <24B5> <8CEB> <24B6> <8CE7> <24B7> <8CFB> <24B8> <8998> <24B9> <89AC> <24BA> <89A1> <24BB> <89BF> <24BC> <89A6> <24BD> <89AF> <24BE> <89B2> <24BF> <89B7> <24C0> <6BFF> <24C1> <6C0C> <24C2> <6C2C> <24C3> <7258> <24C4> <6727> <24C5> <8156> <24C6> <81DA> <24C7> <811B> <24C8> <81BE> <24C9> <8161> <24CA> <81CF> <24CB> <6B5F> <24CE> <98B6> <24CF> <98BC> <24D0> <98C6> <24D1> <98C8> <24D2> <8F42> <24D3> <9F4F> <24D4> <6595> <24D5> <716C> <24D6> <7152> <24D7> <7197> <24D8> <71C1> <24D9> <71DC> <24DA> <71FE> <24DB> <79B0> <24DC> <798E> <24DD> <79AA> <24DE> <61DF> <24DF> <6164> <24E0> <61E3> <24E1> <6207> <24E2> <6FA9> <24E3> <78EF> <24E4> <78AD> <24E5> <7868> <24E6> <78B8> <24E7> <792A> <24E8> <7931> <24E9> <7864> <24EA> <78FD> <24EB> <78E7> <24EC> <78E3> <24ED> <9F95> <24EE> <7798> <24EF> <775E> <24F0> <77BC> <24F1> <7F86> <24F2> <7F88> <24F6> <91D9> <24F7> <91D7> <24F8> <91D5> <24F9> <91F7> <24FA> <91E7> <24FB> <91E4> <24FC> <9346> <24FD> <91F5> <24FE> <91F9> <24FF> <9208> <2500> <9226> <2501> <9245> endbfchar 100 beginbfchar <2502> <9211> <2503> <9210> <2504> <9201> <2505> <9227> <2506> <9204> <2507> <9225> <2508> <9200> <2509> <923A> <250A> <9266> <250B> <9237> <250C> <9233> <250D> <9255> <250E> <923D> <250F> <9238> <2510> <925E> <2513> <923F> <2514> <9460> <2515> <9230> <2516> <9249> <2517> <9248> <2518> <924D> <2519> <922E> <251A> <9239> <251B> <9438> <251C> <92AC> <251D> <92A0> <251E> <927A> <251F> <92AA> <2520> <92EE> <2521> <92CF> <2522> <9403> <2523> <92E3> <2524> <943A> <2525> <92B1> <2526> <92A6> <2527> <93A7> <2528> <9296> <2529> <92CC> <252A> <92A9> <252B> <93F5> <252C> <9293> <252D> <927F> <252E> <93A9> <252F> <929A> <2530> <931A> <2531> <92AB> <2532> <9283> <2533> <940B> <2534> <92A8> <2535> <92A3> <2536> <9412> <2537> <9338> <2538> <92F1> <2539> <93D7> <253A> <92E5> <253B> <92F0> <253C> <92EF> <253D> <92E8> <253E> <92BC> <253F> <92DD> <2540> <92F6> <2543> <92C3> <2544> <92DF> <2545> <92E6> <2546> <9312> <2547> <9306> <2548> <9369> <2549> <931B> <254A> <9340> <254B> <9301> <254C> <9315> <254D> <932E> <254E> <9343> <2551> <931F> <2552> <9319> <2553> <9365> <2554> <9347> <2555> <9376> <2556> <9354> <2557> <9364> <2558> <93AA> <2559> <9370> <255A> <9384> <255B> <93E4> <255C> <93D8> <255D> <9428> <255E> <9387> <255F> <93CC> <2560> <9398> <2561> <93B8> <2562> <93BF> <2563> <93A6> <2564> <93B0> <2565> <93B5> <2566> <944C> <2567> <93E2> <256A> <93CD> <256B> <93DE> <256C> <93C3> <256D> <93C7> endbfchar 100 beginbfchar <256E> <93D1> <256F> <9414> <2570> <941D> <2571> <93F7> <2572> <9465> <2573> <9413> <2574> <946D> <2575> <9420> <2576> <9479> <2577> <93F9> <2578> <9419> <2579> <944A> <257A> <9432> <257B> <943F> <257C> <9454> <257D> <9463> <257E> <937E> <257F> <7A61> <2580> <9CE9> <2581> <9CF6> <2582> <9D07> <2583> <9D06> <2584> <9D23> <2585> <9D87> <2586> <9E15> <2587> <9D1D> <2588> <9D1F> <2589> <9DE5> <258A> <9D2F> <258B> <9DD9> <258C> <9D30> <258D> <9D42> <258E> <9E1E> <258F> <9D53> <2590> <9E1D> <2591> <9D60> <2592> <9D52> <2593> <9DF3> <2594> <9D5C> <2595> <9D61> <2596> <9D93> <2597> <9D6A> <2598> <9D6F> <2599> <9D89> <259A> <9D98> <259B> <9D9A> <259C> <9DC0> <259D> <9DA5> <259E> <9DA9> <259F> <9DC2> <25A0> <9DBC> <25A1> <9E1A> <25A2> <9DD3> <25A3> <9DDA> <25A4> <9DEF> <25A5> <9DE6> <25A6> <9DF2> <25A7> <9DF8> <25A8> <9E0C> <25A9> <9DFA> <25AA> <9E1B> <25AB> <7664> <25AC> <7658> <25AD> <7667> <25AE> <7602> <25B1> <7649> <25B2> <761E> <25B3> <763B> <25B6> <7669> <25B7> <7672> <25B8> <7AC7> <25B9> <7AB6> <25BA> <8960> <25BB> <8933> <25BC> <895D> <25BD> <8947> <25BE> <8938> <25BF> <8964> <25C0> <76B8> <25C1> <802E> <25C2> <802C> <25C3> <8079> <25C4> <8075> <25C5> <9807> <25C8> <9821> <25C9> <981C> <25CA> <6F41> <25CB> <9826> <25CC> <9837> <25CD> <984E> <25CE> <9853> <25CF> <9873> <25D0> <9862> <25D1> <9859> <25D2> <9865> <25D3> <986C> <25D4> <9870> <25D5> <87E3> <25D6> <8806> <25D7> <8706> endbfchar 100 beginbfchar <25D8> <8823> <25D9> <87F6> <25DA> <86FA> <25DB> <87EF> <25DC> <8784> <25DD> <8810> <25DE> <87C8> <25DF> <8811> <25E0> <87BB> <25E1> <87CE> <25E2> <7F4C> <25E3> <7BE4> <25E4> <7B67> <25E5> <7C69> <25E6> <7BF3> <25E7> <7C00> <25E8> <7BCB> <25E9> <7C5C> <25EA> <7C1E> <25EB> <7C2B> <25EC> <7C23> <25ED> <7C6A> <25EE> <7C5F> <25EF> <8264> <25F0> <826B> <25F1> <88CA> <25F2> <7FA5> <25F3> <7CF2> <25F4> <7CF6> <25F5> <7CDD> <25F6> <7E36> <25F7> <9EA9> <25F8> <8DB2> <25F9> <91C5> <25FA> <91C3> <25FB> <9E7A> <25FC> <8E89> <25FD> <8E4C> <25FE> <8E92> <25FF> <8E7A> <2600> <8E55> <2601> <8E9A> <2602> <8E8B> <2603> <8E93> <2604> <8E91> <2605> <8EA1> <2606> <8E63> <2607> <8EAA> <2608> <8EA6> <2609> <89F4> <260A> <89F6> <260B> <975A> <260C> <9742> <260D> <973D> <260E> <9744> <260F> <9F54> <2610> <9F5F> <2611> <9F59> <2612> <9F60> <2613> <9F5C> <2614> <9F66> <2615> <9F6C> <2616> <9F6A> <2617> <9F77> <2618> <9EFD> <2619> <9EFF> <261A> <9F09> <261B> <8B8E> <261C> <947E> <261D> <93E8> <261E> <9B77> <261F> <9B74> <2620> <9B81> <2621> <9B83> <2622> <9B8E> <2623> <9C78> <2624> <7A4C> <2625> <9B92> <2626> <9C5F> <2627> <9B90> <2628> <9BAD> <2629> <9B9A> <262A> <9BAA> <262B> <9B9E> <262C> <9C6D> <262D> <9BAB> <262E> <9B9D> <262F> <9C58> <2630> <9BC1> <2631> <9C7A> <2632> <9C31> <2633> <9C39> <2634> <9C23> <2635> <9C37> <2636> <9BC0> <2637> <9BCA> <2638> <9BC7> <2639> <9BFD> <263A> <9BD6> <263D> <9BE1> endbfchar 100 beginbfchar <263E> <9BE4> <263F> <9BE7> <2640> <9BDD> <2641> <9BE2> <2642> <9BF0> <2643> <9BDB> <2644> <9BF4> <2645> <9BD4> <2646> <9C5D> <2647> <9C08> <2648> <9C10> <2649> <9C0D> <264A> <9C12> <264B> <9C09> <264C> <9BFF> <264D> <9C20> <264E> <9C32> <264F> <9C2D> <2650> <9C28> <2651> <9C25> <2652> <9C29> <2653> <9C33> <2654> <9C3E> <2655> <9C48> <2656> <9C3B> <2657> <9C35> <2658> <9C45> <2659> <9C56> <265A> <9C54> <265B> <9C52> <265C> <9C67> <265D> <97C3> <265E> <97BD> <265F> <97C9> <2660> <9DBB> <2661> <9ACF> <2662> <9AD6> <2663> <9AD5> <2664> <9B58> <2665> <9B4E> <2666> <9957> <2667> <995C> <2668> <9B22> <2669> <9EF7> <266A> <9EF2> <266B> <896C> <266C> <95C6> <266D> <9336> <266E> <5F46> <266F> <8514> <2670> <7E94> <2671> <9F63> <2672> <5679> <2673> <9F15> <2674> <5641> <2675> <9AEE> <2676> <8907> <2677> <7A40> <2678> <98B3> <2679> <95A4> <267A> <9B0D> <267B> <8FF4> <267C> <5F59> <267D> <7A6B> <267E> <98E2> <267F> <50A2> <2680> <8591> <2681> <5118> <2682> <6372> <2683> <524B> <2684> <774F> <2685> <7E8D> <2686> <66C6> <2687> <77AD> <2688> <9E75> <2689> <56C9> <268A> <9EF4> <268B> <6FDB> <268C> <61DE> <268D> <77C7> <268E> <7030> <268F> <9EB5> <2690> <884A> <2691> <95E2> <2692> <97C6> <2693> <7C64> <2694> <7E34> <2695> <97A6> <2696> <9EAF> <2697> <56CC> <2698> <98B1> <2699> <6AAF> <269A> <7F4E> <269B> <7CF0> <269C> <4FC2> <269D> <7E6B> <269E> <9E79> <269F> <56AE> <26A0> <9B1A> <26A1> <846F> endbfchar 100 beginbfchar <26A2> <79A6> <26A3> <7C72> <26A4> <9AD2> <26A5> <96BB> <26A6> <7DFB> <26A7> <88FD> <26A8> <7843> <26B5> <02D9> <26B6> <2013> <26B7> <2015> <26B8> <2025> <26B9> <2035> <26BA> <2105> <26BB> <2109> <26C0> <2215> <26C1> <221F> <26C2> <2223> <26C3> <2252> <26C6> <22BF> <26FF> <25E2> <2703> <2609> <2704> <2295> <2705> <3012> <2711> <32A3> <2717> <33A1> <2718> <33C4> <2719> <33CE> <271C> <33D5> <271D> <271E> <271F> <2720> <2121> <2721> <3231> <2722> <2010> <2723> <30FC> <2728> <3006> <2758> <4E02> <275C> <4E0F> <275D> <4E12> <275E> <4E17> <2762> <4E23> <2763> <4E26> <2764> <4E29> <2767> <4E31> <2768> <4E33> <2769> <4E35> <276A> <4E37> <276B> <4E3C> <276F> <4E44> <2770> <4E46> <2771> <4E4A> <2772> <4E51> <2773> <4E55> <2774> <4E57> <2783> <4E72> <2794> <4E87> <2795> <4E8A> <2796> <4E90> <2799> <4E99> <279C> <4EA3> <279D> <4EAA> <27A1> <4EB4> <27A9> <4EC8> <27AA> <4ECC> <27AD> <4ED2> <27B1> <4EE0> <27B2> <4EE2> <27B5> <4EE9> <27B9> <4EF1> <27BA> <4EF4> <27BE> <4EFC> <27BF> <4EFE> <27C0> <4F00> <27D1> <4F21> <27D2> <4F23> <27D8> <4F31> <27D9> <4F33> <27DA> <4F35> <27DB> <4F37> <27DC> <4F39> <27DD> <4F3B> <27EB> <4F52> <27EC> <4F54> <27ED> <4F56> <27F0> <4F66> <27F1> <4F68> <27F8> <4F75> <27FD> <4F7D> <2800> <4F82> <2801> <4F85> <2802> <4F87> <2803> <4F8A> <2804> <4F8C> <2805> <4F8E> <2806> <4F90> <2809> <4F95> <280D> <4F9C> <2812> <4FA4> <2813> <4FAB> <2814> <4FAD> endbfchar 100 beginbfchar <2831> <4FD9> <2832> <4FDB> <2833> <4FE2> <2836> <4FE7> <2839> <4FF0> <283A> <4FF2> <283F> <4FF9> <2843> <4FFF> <284B> <500A> <284C> <500E> <284D> <5010> <284E> <5013> <2852> <501B> <2855> <5020> <2859> <5027> <2865> <503B> <2866> <503D> <2870> <504D> <287A> <505B> <28A7> <5097> <28B0> <50A4> <28B1> <50A6> <28B8> <50B6> <28CA> <50D0> <28E1> <50F4> <28E5> <50FA> <28EA> <5101> <28EB> <5103> <28EC> <5105> <28ED> <510A> <28F2> <5111> <28F3> <5113> <28FC> <5120> <2914> <5142> <2915> <5147> <2916> <514A> <2917> <514C> <291B> <5153> <291F> <515B> <2929> <516A> <292A> <516F> <292B> <5172> <292C> <517A> <293B> <5198> <293C> <519A> <2940> <51A1> <2941> <51A3> <2949> <51B4> <2952> <51C5> <2953> <51C8> <2954> <51CA> <2955> <51CE> <2956> <51D0> <2960> <51DC> <296B> <51EC> <296C> <51EE> <296D> <51F2> <296E> <51F4> <296F> <51F7> <2970> <51FE> <2973> <5209> <297B> <521C> <2984> <522A> <2985> <522C> <2986> <522F> <298B> <523C> <298C> <523E> <2995> <5255> <299A> <525D> <29A0> <5266> <29A1> <5268> <29A7> <5273> <29AF> <527E> <29B0> <5280> <29B4> <528B> <29B7> <5292> <29BF> <529C> <29D1> <52C0> <29D2> <52C2> <29D6> <52C8> <29D7> <52CA> <29DC> <52D1> <29DF> <52D7> <29E0> <52DA> <29E1> <52DC> <29E4> <52E3> <29FC> <5307> <2A00> <530C> <2A01> <530E> <2A06> <5318> <2A0B> <5322> <2A13> <5330> <2A1D> <5342> <2A1E> <5344> <2A1F> <5346> <2A23> <5350> <2A26> <535B> <2A27> <535D> <2A28> <5365> <2A29> <5368> endbfchar 100 beginbfchar <2A2A> <536A> <2A2D> <5372> <2A2E> <5376> <2A2F> <5379> <2A36> <5383> <2A39> <538A> <2A45> <539E> <2A46> <53A1> <2A47> <53A4> <2A48> <53A7> <2A4F> <53B3> <2A50> <53B5> <2A58> <53C0> <2A62> <53D5> <2A63> <53DA> <2A67> <53E1> <2A68> <53E7> <2A69> <53F4> <2A6A> <53FA> <2A6E> <5402> <2A6F> <5405> <2A70> <5407> <2A71> <540B> <2A72> <5414> <2A76> <541C> <2A77> <5422> <2A7A> <542A> <2A7B> <5430> <2A7C> <5433> <2A7F> <543A> <2A80> <543D> <2A81> <543F> <2A86> <5447> <2A87> <5449> <2A8C> <5451> <2A8D> <545A> <2A93> <5463> <2A94> <5465> <2A95> <5467> <2A9E> <5474> <2AA3> <5481> <2AA4> <5483> <2AA5> <5485> <2AAA> <548D> <2AAB> <5491> <2AAC> <5493> <2AAF> <549C> <2AB5> <54A5> <2AB6> <54AE> <2AB7> <54B0> <2AB8> <54B2> <2ABE> <54BE> <2ABF> <54C3> <2AC0> <54C5> <2AC3> <54D6> <2AC4> <54D8> <2AC5> <54DB> <2AC6> <54E0> <2AD5> <54FB> <2AD6> <54FE> <2AD7> <5500> <2ADA> <5505> <2ADB> <5508> <2AED> <5521> <2AF2> <552B> <2AF3> <552D> <2AF4> <5532> <2AFC> <553D> <2AFD> <5540> <2AFE> <5542> <2AFF> <5545> <2B08> <5554> <2B0E> <555D> <2B15> <556B> <2B1E> <557D> <2B1F> <557F> <2B25> <5590> <2B2D> <559E> <2B37> <55AB> <2B38> <55AD> <2B3B> <55B4> <2B3C> <55B6> <2B3D> <55B8> <2B3E> <55BA> <2B3F> <55BC> <2B45> <55C8> <2B4A> <55D5> <2B4E> <55DB> <2B4F> <55DE> <2B50> <55E0> <2B51> <55E2> <2B52> <55E7> <2B57> <55F4> <2B5D> <55FF> <2B62> <5607> <2B69> <5615> <2B6C> <561D> <2B72> <5628> <2B75> <5633> <2B76> <5637> endbfchar 100 beginbfchar <2B77> <563A> <2B7B> <5640> <2B91> <5661> <2B92> <5663> <2B93> <5667> <2B96> <5670> <2B97> <5673> <2B98> <5675> <2B99> <5677> <2B9A> <567A> <2BA6> <568D> <2BAA> <5694> <2BB9> <56A7> <2BC2> <56B5> <2BCE> <56CB> <2BD9> <56DC> <2BDA> <56E3> <2BE1> <56EC> <2BEE> <5705> <2BEF> <570C> <2BF6> <5717> <2BFF> <5724> <2C03> <572B> <2C0D> <573F> <2C0E> <5741> <2C15> <574B> <2C1F> <5765> <2C20> <5767> <2C21> <576C> <2C22> <576E> <2C44> <57A5> <2C45> <57A8> <2C46> <57AA> <2C47> <57AC> <2C4B> <57B3> <2C63> <57D3> <2C68> <57DE> <2C73> <57EE> <2C7E> <5801> <2C83> <580C> <2C8F> <581F> <2CB0> <584E> <2CB1> <5850> <2CB2> <5853> <2CBD> <5863> <2CD2> <587F> <2CD3> <5882> <2CD4> <5884> <2CE4> <589B> <2CE5> <589D> <2CFD> <58BD> <2D03> <58C6> <2D0D> <58D2> <2D0E> <58D4> <2D14> <58E1> <2D15> <58E3> <2D1A> <58EA> <2D1B> <58ED> <2D28> <5903> <2D30> <590E> <2D37> <591B> <2D3C> <5923> <2D3D> <5926> <2D3E> <5928> <2D3F> <592C> <2D40> <5930> <2D45> <593B> <2D46> <593D> <2D49> <5943> <2D4C> <594A> <2D4F> <5950> <2D52> <5959> <2D58> <5961> <2D5E> <596B> <2D5F> <596D> <2D64> <5975> <2D65> <5977> <2D6C> <5985> <2D6D> <5989> <2D76> <5998> <2D8A> <59BA> <2D9D> <59D9> <2D9E> <59DB> <2DA4> <59E4> <2DB6> <59FA> <2DBA> <5A00> <2DBB> <5A02> <2DC2> <5A12> <2DCE> <5A24> <2DD9> <5A33> <2DDA> <5A35> <2E00> <5A65> <2E3E> <5AB4> <2E54> <5AD3> <2E55> <5AD5> <2E5C> <5AE2> <2E61> <5AEA> <2E7A> <5B0A> <2E81> <561F> <2E84> <5623> endbfchar 100 beginbfchar <2E84> <5B18> <2E88> <5626> <2E8B> <5627> <2E8C> <562C> <2E97> <562D> <2E99> <5B31> <2E9A> <5B33> <2EA7> <563A> <2EAA> <563D> <2EAE> <5640> <2EB2> <5B52> <2EB3> <5642> <2EB3> <5B56> <2EB4> <5B5E> <2EBB> <5648> <2EBC> <5B72> <2EBD> <5B74> <2EC0> <5B79> <2EC3> <5B7E> <2EC4> <5B82> <2EC5> <5B86> <2EC6> <5B8A> <2ECA> <5652> <2ECC> <5B94> <2ECD> <5B96> <2ECE> <5B9F> <2ED8> <5BB7> <2EDE> <5BC3> <2EE6> <5BD1> <2EF0> <5BE0> <2EF1> <5BE3> <2EF2> <5BEA> <2EF3> <5BED> <2EF4> <5BEF> <2EF9> <5BF7> <2EFC> <5C00> <2EFF> <5C05> <2F00> <5C0C> <2F01> <5C10> <2F04> <5C17> <2F05> <5C19> <2F06> <5C1B> <2F0B> <5C23> <2F0C> <5C26> <2F29> <5C5F> <2F2A> <5C67> <2F2E> <5C6D> <2F2F> <5C70> <2F3B> <5C80> <2F48> <5C95> <2F52> <5CAA> <2F56> <5CB2> <2F57> <5CB4> <2F58> <5CB6> <2F5D> <5CBE> <2F5E> <5CC0> <2F7C> <5CE7> <2F7D> <5CE9> <2F85> <5CF5> <2F8A> <5CFC> <2F9B> <5D15> <2FA6> <5D25> <2FA7> <5D28> <2FCD> <5D5C> <2FD9> <5D6A> <2FEC> <5D83> <2FFE> <5D98> <2FFF> <5D9A> <3019> <5DB9> <301A> <5DBB> <3028> <5DCC> <302D> <5DD3> <3034> <5DDC> <3039> <5DEA> <303E> <274B> <3045> <5E04> <3046> <5E07> <304E> <5E17> <3059> <5E2C> <305C> <5E32> <3063> <5E41> <3071> <5E56> <3076> <5E60> <3083> <5E75> <3084> <5E77> <3088> <5E85> <308E> <5E92> <308F> <5E98> <3090> <5E9B> <3091> <5E9D> <3099> <5EAC> <309F> <5EB4> <30C1> <5EE9> <30C2> <5EEB> <30C9> <5EF5> <30D2> <5F09> <30D6> <5F10> <30D7> <5F12> <30D8> <5F14> <30D9> <5F16> endbfchar 100 beginbfchar <30E3> <5F28> <30E6> <5F2E> <30E7> <5F30> <30E8> <5F32> <30E9> <5F34> <30ED> <5F3B> <30F6> <5F47> <30FA> <5F4D> <30FB> <5F4F> <30FC> <5F51> <30FD> <5F54> <3100> <5F5C> <3104> <5F63> <3105> <5F65> <3108> <5F6B> <310B> <5F72> <310F> <5F78> <3110> <5F7A> <3114> <5F83> <3115> <5F86> <311B> <5F96> <311E> <5F9D> <311F> <5F9F> <312E> <5FB6> <312F> <5FB8> <313B> <5FCE> <314A> <5FEC> <3154> <5FFC> <315C> <6013> <315F> <601A> <3174> <6040> <317C> <604C> <317F> <6051> <318D> <606E> <3192> <6077> <3193> <607E> <31A1> <6093> <31A2> <6095> <31A6> <609C> <31A7> <609E> <31AC> <60A7> <31AF> <60AE> <31B0> <60B0> <31B1> <60B3> <31B2> <60B7> <31CA> <60D9> <31CB> <60DB> <31CC> <60DE> <31D1> <60EA> <31D2> <60F5> <31DD> <6107> <31EE> <6125> <320A> <6149> <320B> <614D> <3213> <6159> <3216> <615E> <321B> <6169> <321E> <616F> <3221> <6174> <3235> <618F> <3236> <6193> <3246> <61AA> <3247> <61AD> <325F> <61D3> <326E> <61E7> <327A> <61F9> <327B> <61FB> <327C> <61FD> <3282> <6209> <3283> <6213> <3284> <6219> <3288> <6220> <3289> <6223> <328A> <6226> <328D> <622B> <328E> <622D> <328F> <622F> <3290> <6231> <3298> <6242> <329C> <624A> <32AD> <6268> <32B6> <627D> <32C4> <6294> <32C5> <6299> <32C9> <62A3> <32D8> <62BA> <32D9> <62BE> <32DC> <62C3> <32DD> <62CB> <32DE> <62CF> <32DF> <62D1> <32E0> <62D5> <32E5> <62E4> <32E8> <62F0> <32E9> <62F2> <32EA> <62F5> <32EF> <6300> <3300> <6319> <3301> <631C> <3304> <6329> endbfchar 100 beginbfchar <3315> <6344> <3318> <634A> <3325> <6360> <3329> <636A> <332A> <636C> <3336> <6381> <3339> <638B> <333A> <638D> <333B> <6391> <333F> <6397> <3347> <63A1> <3348> <63A4> <3349> <63A6> <334A> <63AB> <334B> <63AF> <3350> <63B9> <3351> <63BB> <3352> <63BD> <3353> <63BF> <3357> <63C5> <335D> <63D1> <3367> <63DF> <3368> <63E2> <3373> <63F3> <3374> <63F5> <3375> <63F7> <337A> <63FE> <3382> <640E> <338A> <641D> <338B> <641F> <3393> <642B> <339A> <6435> <33A0> <643E> <33A1> <6440> <33A4> <6449> <33AB> <6453> <33B2> <645D> <33BA> <6468> <33BE> <646E> <33C4> <6477> <33CB> <6483> <33CC> <6486> <33D5> <6494> <33E2> <64AA> <33E3> <64AF> <33E4> <64B1> <33E5> <64B4> <33E6> <64B6> <33E7> <64B9> <33E8> <64BD> <33E9> <64C3> <33EA> <64C6> <33ED> <64CC> <33EE> <64CF> <33EF> <64D1> <33F0> <64D3> <33F3> <64D9> <33F7> <64DF> <33F8> <64E1> <33F9> <64E3> <33FA> <64E5> <3402> <64F3> <3407> <64FD> <3408> <64FF> <340C> <6505> <3416> <6513> <3417> <6515> <3418> <6517> <3419> <651A> <341A> <651C> <3423> <652D> <3428> <6537> <3429> <653A> <3437> <6550> <343B> <6558> <343C> <655A> <343D> <655C> <3447> <5625> <344A> <6571> <344B> <6573> <344C> <6576> <345F> <6592> <3460> <6594> <3461> <6596> <3462> <6598> <3463> <659A> <3466> <65A0> <3469> <65A6> <346A> <65A8> <346B> <65AA> <346C> <65AE> <3473> <5624> <3473> <65B8> <3479> <65C2> <347E> <65CD> <348C> <65E1> <349C> <6601> <34A2> <660B> <34A3> <660D> <34AD> <661E> endbfchar 100 beginbfchar <34B2> <6626> <34B7> <662E> <34B8> <6630> <34C0> <663D> <34D2> <665E> <34D3> <6660> <34D6> <6665> <34D7> <6667> <34E0> <6675> <34E9> <6683> <34FF> <66A3> <3519> <66C5> <351A> <66C8> <3529> <66DA> <3538> <66F1> <353D> <66FD> <3544> <670C> <354A> <6716> <354E> <671C> <354F> <671E> <3556> <6729> <3557> <672E> <3558> <6730> <3563> <6741> <3566> <6747> <3569> <674D> <356A> <6752> <3572> <675D> <357A> <676E> <357B> <6774> <357C> <6776> <3581> <677D> <3582> <6780> <3587> <6788> <3588> <678A> <3591> <6796> <3592> <6799> <3593> <679B> <3597> <67A4> <3598> <67A6> <3599> <67A9> <359A> <67AC> <359B> <67AE> <359E> <5629> <359E> <67B4> <35A7> <67C2> <35B5> <67DB> <35B6> <67DF> <35B7> <67E1> <35C1> <67F2> <35CA> <67FE> <35CF> <6806> <35D0> <680D> <35D1> <6810> <35D2> <6812> <35F0> <683F> <35F1> <6847> <35F2> <684B> <35F3> <684D> <35F4> <684F> <35F5> <6852> <3600> <686A> <3609> <6875> <360E> <562B> <3613> <6882> <3614> <6884> <361A> <562A> <3627> <689E> <3631> <68AE> <3634> <68B4> <363F> <68C1> <3646> <68CA> <3647> <68CC> <364E> <68D9> <365E> <68EF> <3665> <68FB> <3672> <690C> <3673> <6911> <3697> <693E> <36AF> <695F> <36B4> <6967> <36B7> <696C> <36BD> <6976> <36C3> <6981> <36C4> <6983> <36C5> <6985> <36DD> <69A9> <36DE> <69AC> <36EB> <69C0> <36F4> <69CF> <3700> <69DE> <3719> <69FE> <371A> <6A00> <3730> <6A20> <3731> <6A22> <3736> <6A29> <373B> <6A30> <3757> <6A5A> <375B> <6A60> <3780> <6A8F> endbfchar 100 beginbfchar <378C> <6AA1> <3792> <6AAA> <37BA> <6ADC> <37C2> <6AE9> <37C3> <6AEB> <37ED> <6B1F> <37FE> <6B38> <37FF> <6B3B> <3800> <6B3C> <3807> <6B48> <381A> <6B60> <3828> <6B7A> <382D> <6B85> <382E> <6B88> <382F> <6B8C> <3836> <6B97> <3837> <6B99> <3847> <6BB6> <384D> <6BC0> <3854> <6BCC> <3855> <6BCE> <3858> <6BD8> <3859> <6BDA> <386D> <6BF4> <3874> <6BFE> <387D> <6C0E> <387E> <6C12> <387F> <6C17> <3883> <6C20> <3884> <6C25> <3885> <6C2D> <3886> <6C31> <3887> <6C33> <3893> <6C48> <389C> <6C56> <38AA> <6C71> <38AB> <6C73> <38AC> <6C75> <38B4> <6C84> <38B5> <6C87> <38C0> <6C9A> <38C4> <6CA0> <38C5> <6CA2> <38C6> <6CA8> <38C7> <6CAC> <38CE> <6CBA> <38D6> <6CCB> <38E1> <6CDF> <38E2> <6CE4> <38E5> <6CE9> <38E8> <6CF2> <38E9> <6CF4> <38EA> <6CF9> <38F4> <6D0D> <38FC> <6D18> <38FF> <6D1F> <3905> <6D26> <390C> <6D34> <3910> <6D3A> <3913> <6D42> <3914> <6D44> <3915> <6D49> <3916> <6D4C> <3917> <6D50> <3918> <562F> <391C> <6D5B> <391D> <6D5D> <391E> <6D5F> <3937> <6D86> <393A> <6D8D> <393D> <6D92> <3943> <6D9C> <3944> <6DA2> <3945> <6DA5> <3962> <6DD7> <3966> <6DDF> <3969> <6DE5> <396D> <6DED> <396E> <562E> <3970> <6DF2> <3971> <6DF4> <3972> <6DF8> <397F> <6E0B> <3980> <6E0F> <3983> <6E15> <398A> <6E22> <398D> <6E2A> <398E> <6E2E> <3991> <6E33> <3995> <6E39> <39A9> <6E55> <39AA> <6E57> <39CD> <6E84> <39CF> <5631> <39D0> <5634> <39DA> <6E97> <39DE> <6E9E> <39DF> <5632> <39E3> <6EA6> <39EA> <6EB0> endbfchar 100 beginbfchar <39EB> <6EB3> <39EC> <6EB5> <39EF> <6EBC> <39F3> <6EC3> <39F4> <6EC6> <39F8> <6ECD> <39F9> <6ED0> <39FA> <6ED2> <39FB> <6ED6> <3A00> <6EDD> <3A01> <6EE3> <3A02> <6EE7> <3A09> <6EF3> <3A11> <6F00> <3A28> <6F21> <3A2D> <6F2E> <3A2E> <6F30> <3A31> <6F37> <3A37> <6F40> <3A3F> <6F4C> <3A4A> <6F5D> <3A4E> <6F63> <3A4F> <6F65> <3A56> <6F71> <3A57> <6F73> <3A5A> <6F79> <3A5B> <6F7B> <3A61> <6F85> <3A73> <5633> <3A77> <6FA8> <3A7E> <6FB2> <3AAF> <6FFB> <3AB0> <6FFD> <3AB9> <700A> <3ABD> <7010> <3AC3> <7019> <3AC4> <701C> <3AC5> <701E> <3AD2> <7031> <3AE9> <7050> <3AFC> <706E> <3B00> <7074> <3B01> <7077> <3B05> <707D> <3B13> <7093> <3B25> <70B0> <3B26> <70B2> <3B2A> <70BA> <3B31> <70C9> <3B3E> <70DA> <3B46> <70E5> <3B47> <70EA> <3B48> <70EE> <3B4E> <5637> <3B4F> <70F8> <3B65> <7114> <3B66> <7117> <3B8E> <714B> <3B8F> <714D> <3B9C> <715D> <3BA0> <7163> <3BA1> <7165> <3BA4> <716D> <3BAC> <7179> <3BC0> <7193> <3BD6> <71B2> <3BD7> <71B4> <3BE1> <71C2> <3BEE> <71D3> <3BFF> <71EF> <3C0A> <71FD> <3C24> <721C> <3C2F> <7229> <3C30> <722B> <3C36> <723C> <3C48> <7257> <3C49> <725A> <3C4A> <725C> <3C4B> <725E> <3C4C> <7260> <3C50> <7268> <3C65> <728C> <3C66> <728E> <3C6E> <5638> <3C7E> <72AE> <3C82> <72B5> <3C90> <72CF> <3C91> <72D1> <3C96> <72D8> <3C9B> <72DF> <3CA9> <7302> <3CB7> <7314> <3CC2> <732D> <3CC7> <7335> <3CC8> <733A> <3CCB> <7340> <3CD7> <7351> <3CE0> <5639> <3CEB> <7369> <3CEC> <736E> endbfchar 100 beginbfchar <3CED> <7371> <3CF0> <7376> <3CF1> <7379> <3CF2> <737D> <3CF3> <737F> <3CF9> <7388> <3CFA> <738A> <3CFF> <7392> <3D12> <73AA> <3D15> <73B1> <3D1F> <73C1> <3D27> <73CE> <3D33> <73DF> <3D38> <73E6> <3D39> <73E8> <3D50> <7404> <3D68> <7427> <3D69> <7429> <3D6A> <742B> <3D6B> <742D> <3D6C> <742F> <3D76> <7440> <3D89> <7456> <3D8A> <7458> <3D8B> <745D> <3DA3> <747F> <3DA4> <7482> <3DA8> <7488> <3DA9> <748A> <3DAC> <748F> <3DB8> <749D> <3DE2> <74D3> <3DE8> <74DB> <3DE9> <74DD> <3DEA> <74DF> <3DEB> <74E1> <3DEC> <74E5> <3DF8> <74F5> <3E0B> <750E> <3E0C> <7510> <3E0D> <7512> <3E12> <751B> <3E18> <7524> <3E1B> <752A> <3E1C> <752E> <3E1D> <7534> <3E1E> <7536> <3E1F> <7539> <3E22> <753F> <3E2B> <754D> <3E43> <7573> <3E44> <7575> <3E45> <7577> <3E56> <7590> <3E57> <7593> <3E58> <7595> <3E59> <7598> <3E5C> <759E> <3E5D> <75A2> <3E63> <75AD> <3E6B> <75C6> <3E72> <75D3> <3E73> <75D7> <3E74> <75DA> <3E7A> <75E5> <3E7B> <75E9> <3E8A> <7604> <3E95> <7616> <3E96> <761A> <3E99> <7623> <3E9A> <7628> <3E9B> <762C> <3EA4> <763D> <3EA5> <7641> <3EA8> <7648> <3EB1> <7655> <3EB2> <7657> <3EB6> <765D> <3EB9> <7666> <3EBA> <7668> <3EBB> <766A> <3EC6> <7683> <3EC7> <7685> <3ECE> <7692> <3EE7> <76B3> <3EEB> <76B9> <3EF4> <76C7> <3EF5> <76C9> <3EF8> <76D3> <3EF9> <76D5> <3EFE> <76E0> <3EFF> <76E2> <3F00> <76E6> <3F07> <76F0> <3F08> <76F3> <3F0E> <76FD> <3F15> <770A> <3F16> <770C> <3F26> <7721> <3F2A> <7727> endbfchar 100 beginbfchar <3F2E> <772E> <3F34> <7739> <3F35> <773B> <3F39> <7742> <3F50> <7764> <3F51> <7767> <3F78> <77A1> <3F7B> <77A6> <3F7C> <77A8> <3F7D> <77AB> <3F82> <77B4> <3F88> <77BE> <3FA5> <77E4> <3FA6> <77E6> <3FA7> <77E8> <3FA8> <77EA> <3FAE> <77F7> <3FBE> <7813> <3FBF> <7815> <3FC0> <7819> <3FC1> <781B> <3FC2> <781E> <3FC6> <7824> <3FC7> <7828> <3FD1> <783D> <3FD2> <783F> <3FD5> <7844> <3FD6> <7846> <3FDB> <784D> <3FDC> <784F> <3FDD> <7851> <3FEE> <7869> <4004> <7888> <4009> <7892> <400D> <7899> <4010> <78A0> <4011> <78A2> <4012> <78A4> <4013> <78A6> <4014> <78A8> <401D> <78BB> <401E> <78BD> <4043> <78F3> <4056> <563E> <406A> <7925> <4079> <793D> <407A> <793F> <407F> <7947> <408D> <7961> <4090> <7966> <4095> <796E> <409D> <7979> <40C5> <79AF> <40C6> <79B2> <40CC> <79BC> <40CD> <79BF> <40CE> <79C2> <40D3> <79CA> <40D4> <79CC> <40E5> <79E5> <40E6> <79E8> <40E7> <79EA> <40E8> <79EC> <40E9> <79EE> <40F3> <79FC> <40F6> <7A01> <40FD> <7A0C> <410A> <7A1F> <4119> <7A32> <411D> <7A38> <411E> <7A3A> <411F> <7A3E> <4140> <7A6A> <4148> <7A75> <414D> <7A82> <414E> <7A85> <414F> <7A87> <415C> <7A9E> <415F> <563F> <4161> <7AA7> <4162> <7AAB> <4174> <7AC6> <4175> <7AC9> <4188> <7AE4> <418E> <7AEE> <4199> <7AFE> <419D> <7B05> <419E> <7B07> <419F> <7B09> <41A3> <7B10> <41A9> <7B1A> <41AC> <7B1F> <41B0> <7B27> <41B1> <7B29> <41B2> <7B2D> <41B5> <7B32> <41BA> <7B39> <41BB> <7B3B> <41BC> <7B3D> <41C3> <7B48> endbfchar 100 beginbfchar <41C4> <7B4A> <41C7> <7B53> <41C8> <7B55> <41C9> <7B57> <41CA> <7B59> <41CB> <7B5C> <41CE> <7B61> <41DD> <7B76> <41DE> <7B78> <41DF> <7B7A> <41E2> <7B7F> <41EC> <7B8C> <41F2> <7B96> <420E> <7BC5> <420F> <7BC8> <4210> <7BCA> <4215> <7BD2> <4229> <7BF2> <4231> <7BFD> <4232> <7BFF> <423C> <7C0E> <424A> <7C20> <424B> <7C22> <4260> <7C42> <4280> <7C6B> <4281> <7C6D> <429F> <7C96> <42A5> <7CA3> <42BB> <7CC6> <42BC> <7CC9> <42BD> <7CCB> <42C5> <7CD8> <42D4> <7CF1> <42D5> <7CF3> <42D6> <7CF5> <42D7> <7CF7> <42D8> <7CFA> <42DB> <7CFF> <42DC> <7D01> <42DD> <7D03> <42DE> <7D0C> <42E3> <7D16> <42E4> <7D18> <42F7> <7D3B> <42FA> <7D41> <42FB> <7D43> <42FC> <7D45> <4304> <7D4F> <4316> <7D67> <4320> <7D78> <4328> <7D82> <432B> <7D87> <433C> <7D9D> <433F> <672F> <4346> <7DAF> <434A> <7DBC> <4358> <7DD3> <435E> <7DDF> <435F> <7DE2> <4362> <7DE7> <4367> <7DF0> <4368> <7DF3> <4369> <7DF5> <436C> <7DFA> <4386> <7E1C> <4390> <7E2C> <4393> <7E33> <4394> <7E38> <4395> <7E3A> <4396> <7E3C> <43A6> <7E53> <43AC> <5647> <43B1> <5646> <43B7> <7E6C> <43C9> <7E89> <43CA> <7E8B> <43CB> <7E8E> <43CF> <7E95> <43D0> <7E97> <43D5> <7EAE> <43D6> <7EB4> <43D9> <7ED6> <43DA> <7EE4> <43DB> <7EEC> <43DC> <7EF9> <43DD> <5649> <43DD> <7F0A> <43DE> <7F10> <43DF> <7F1E> <43E0> <7F37> <43E1> <7F39> <43E9> <7F43> <43F0> <7F4D> <43F1> <7F4F> <43F4> <7F56> <43F5> <7F59> <43FA> <7F60> <4403> <7F6F> <4404> <7F73> <4407> <7F78> endbfchar 100 beginbfchar <4411> <7F87> <4412> <7F89> <4413> <7F8B> <4414> <7F8D> <4421> <7FA0> <4424> <7FA6> <4425> <7FA8> <442B> <7FB1> <4433> <7FBE> <4434> <7FC0> <443C> <7FCB> <443D> <7FCD> <4441> <7FD3> <4453> <7FEF> <4454> <7FF2> <445A> <7FFA> <445E> <8002> <4465> <8011> <4466> <8013> <446C> <8021> <446F> <802B> <4470> <802D> <4473> <8032> <4474> <8034> <4477> <803C> <4478> <803E> <4484> <8053> <4485> <8055> <4486> <8057> <4487> <8059> <4499> <8074> <449A> <8078> <44A0> <8088> <44A1> <808A> <44AA> <8097> <44AB> <8099> <44AC> <809E> <44AD> <80A3> <44B1> <80AC> <44B2> <80B0> <44B3> <80B3> <44B8> <80BB> <44B9> <80C5> <44C6> <80D8> <44CB> <80E6> <44CC> <80EE> <44CD> <80F5> <44CE> <80F7> <44CF> <80F9> <44D0> <80FB> <44D6> <564A> <44DB> <8115> <44DC> <8117> <44DD> <8119> <44EF> <8130> <44F3> <8137> <44FF> <8147> <4500> <8149> <4501> <814D> <4502> <814F> <4503> <8152> <450E> <8168> <450F> <816A> <4510> <816C> <4511> <816F> <4517> <8181> <451D> <8189> <4522> <8190> <4529> <8199> <4530> <81A7> <453F> <81BC> <4544> <81CB> <4545> <81CE> <454E> <81D9> <4558> <81E9> <4559> <81EB> <4564> <81FD> <4565> <81FF> <4566> <8203> <4567> <820B> <456A> <8211> <456B> <8213> <4572> <821D> <4573> <8220> <4578> <8229> <4579> <822E> <457A> <8232> <457B> <823A> <4585> <8248> <4586> <824A> <459A> <8265> <459B> <8267> <45A2> <8278> <45A7> <8283> <45AB> <8289> <45AC> <828C> <45AD> <8290> <45B4> <829E> <45B5> <82A0> <45B8> <82A7> endbfchar 100 beginbfchar <45B9> <82B2> <45BC> <82BA> <45BD> <82BC> <45C4> <82C9> <45C5> <82D0> <45C6> <82D6> <45C9> <82DD> <45CA> <82E2> <45D1> <82F0> <45D6> <82F8> <45D7> <82FA> <45DF> <830D> <45E0> <8310> <45E3> <8316> <45F2> <832E> <45F3> <8330> <45F4> <8332> <45F5> <8337> <45F6> <833B> <45FE> <8348> <45FF> <834A> <4604> <8353> <460A> <835D> <460B> <8362> <4626> <8397> <4629> <839D> <462A> <839F> <462B> <83A1> <4634> <83B5> <4635> <83BB> <463B> <83C6> <463E> <83CB> <4645> <83D5> <4646> <83D7> <464A> <83DE> <464C> <564C> <4660> <8402> <4661> <564B> <4661> <8405> <4664> <8410> <4698> <8458> <469D> <8462> <469E> <8465> <46A1> <846A> <46A2> <846E> <46A3> <8470> <46A4> <8472> <46A5> <8474> <46A6> <8479> <46B2> <848A> <46B3> <848D> <46BA> <8498> <46D0> <84B3> <46D4> <84BB> <46D5> <84BE> <46DC> <84CC> <46DF> <84D2> <46E8> <84DE> <46EB> <84E4> <46F1> <84ED> <46FD> <84FE> <470E> <8512> <4716> <8520> <4717> <8522> <4723> <564E> <4729> <564F> <472A> <8542> <472D> <8547> <4734> <8554> <4735> <8557> <473D> <8563> <4747> <8573> <474A> <8578> <4752> <8586> <4753> <8589> <4754> <858B> <4757> <8590> <4766> <85A5> <4767> <85A7> <4771> <85B8> <477C> <5650> <4784> <85D4> <478D> <5651> <479D> <85F5> <47C0> <8628> <47CE> <8639> <47CF> <863B> <47E5> <865B> <47E6> <865D> <47F0> <866D> <4800> <8689> <4806> <8694> <4814> <86AB> <4824> <86C5> <4825> <86C8> <482D> <86DA> <483B> <86EF> <4842> <86FF> <4843> <8701> <484C> <8714> endbfchar 100 beginbfchar <484D> <8716> <484E> <8719> <484F> <871B> <4850> <871D> <4853> <8724> <486F> <874D> <4874> <8754> <4875> <8756> <4876> <8758> <4886> <876F> <488A> <8775> <488B> <8777> <4895> <878C> <48AD> <87AE> <48B1> <87B4> <48B6> <87BC> <48BC> <87C5> <48BD> <87C7> <48BE> <87C9> <48D0> <87E4> <48D5> <87EB> <48D6> <87ED> <48DE> <87FA> <48E5> <8804> <48EE> <8812> <48EF> <8814> <48F7> <8820> <490A> <883A> <4914> <884B> <491C> <8858> <491D> <885A> <491E> <885C> <4924> <886A> <4925> <886D> <4926> <886F> <4927> <8871> <492C> <8878> <4930> <8880> <4931> <8883> <4936> <888C> <4947> <5653> <4948> <88A3> <494F> <88AC> <4969> <88D3> <496E> <88DE> <497A> <5654> <497A> <88F2> <497D> <5655> <498E> <8911> <499B> <565B> <499F> <565A> <49A4> <8931> <49A5> <8935> <49A6> <8937> <49B6> <565D> <49B7> <565C> <49C9> <8965> <49CD> <896B> <49DD> <8980> <49DE> <8982> <49ED> <8997> <49FD> <89AB> <4A0A> <89BE> <4A0B> <89C3> <4A0C> <89CD> <4A13> <89DB> <4A14> <89DD> <4A19> <89E4> <4A24> <89F5> <4A25> <89F7> <4A30> <8A09> <4A31> <8A0B> <4A32> <8A0D> <4A33> <8A0F> <4A36> <8A14> <4A37> <8A17> <4A3A> <8A1C> <4A3B> <8A1E> <4A3F> <8A24> <4A4B> <8A35> <4A58> <8A47> <4A5E> <8A4F> <4A5F> <8A51> <4A60> <8A53> <4A6D> <8A6A> <4A6E> <8A6F> <4A6F> <8A74> <4A7B> <8A88> <4A81> <8A94> <4A84> <8A99> <4A88> <8A9F> <4A89> <8AA2> <4A8A> <8AA7> <4A91> <8AB1> <4A9D> <8AC3> <4AA0> <8AC8> <4AA1> <8ACA> <4AA2> <8ACC> <4AA3> <8ACE> <4AA4> <8AD0> endbfchar 100 beginbfchar <4AAB> <8ADD> <4AAF> <8AE3> <4AB0> <8AE5> <4AB4> <8AEC> <4AB7> <8AF2> <4ABA> <8AF9> <4ABB> <8AFB> <4ABC> <8AFD> <4ABD> <8AFF> <4ABE> <8B03> <4ABF> <8B06> <4AC5> <8B0F> <4AC9> <8B15> <4ACA> <8B18> <4ACB> <8B1C> <4AD3> <8B27> <4AF8> <8B57> <4AF9> <8B5B> <4B24> <8B94> <4B2A> <8B9D> <4B2B> <8B9F> <4B2C> <8BAC> <4B2D> <8BB1> <4B2E> <8BBB> <4B2F> <8BC7> <4B30> <8BD0> <4B31> <8BEA> <4B32> <8C09> <4B33> <8C1E> <4B72> <8C8B> <4B81> <8C9F> <4B88> <8CB1> <4B89> <8CB5> <4B8A> <8CB9> <4B8B> <8CBE> <4B8C> <8CC6> <4B8D> <8CC9> <4B94> <8CD4> <4B99> <8CDB> <4B9A> <8CDD> <4B9B> <8CDF> <4B9C> <8CE5> <4BB1> <8D09> <4BB2> <8D0C> <4BB3> <8D0E> <4BBD> <8D20> <4BC0> <8D57> <4BC1> <8D5F> <4BC2> <8D65> <4BC6> <8D6C> <4BFA> <8DB9> <4BFB> <8DBB> <4BFC> <8DBD> <4C00> <8DC5> <4C05> <8DCD> <4C06> <8DD0> <4C0D> <8DDC> <4C14> <8DE9> <4C1A> <8DF4> <4C1B> <8DF6> <4C1C> <8DFC> <4C27> <8E0B> <4C3C> <8E2B> <4C3D> <8E2D> <4C3E> <8E30> <4C48> <8E43> <4C63> <8E6E> <4C64> <8E71> <4C65> <8E73> <4C66> <8E75> <4C6A> <8E7B> <4C6D> <8E80> <4C71> <8E86> <4C72> <8E88> <4C73> <8E8C> <4C74> <8E8E> <4C77> <5664> <4C7A> <8E9B> <4C7B> <8E9D> <4CA0> <8ED3> <4CA1> <5663> <4CA2> <5665> <4CA3> <5660> <4CBF> <8EFD> <4CC4> <8F04> <4CC5> <8F06> <4CC6> <8F08> <4CCE> <8F13> <4CEC> <8F43> <4D00> <8F5E> <4D01> <8F60> <4D02> <8F63> <4D03> <8F65> <4D04> <8F6A> <4D05> <8F80> <4D06> <8F8C> <4D07> <8F92> <4D08> <8F9D> <4D0E> <8FA7> <4D0F> <8FAA> endbfchar 100 beginbfchar <4D10> <8FAC> <4D1B> <8FC3> <4D1C> <8FC6> <4D22> <8FCF> <4D23> <8FD2> <4D26> <8FDA> <4D29> <8FE3> <4D2A> <8FE7> <4D2B> <8FEC> <4D2C> <8FEF> <4D38> <900C> <4D39> <900E> <4D3A> <9013> <4D3B> <9018> <4D3C> <901C> <4D49> <9037> <4D4C> <903D> <4D4F> <9043> <4D55> <904C> <4D56> <9056> <4D59> <905D> <4D5A> <905F> <4D5B> <9061> <4D5C> <9064> <4D65> <9073> <4D66> <9076> <4D67> <9079> <4D68> <907B> <4D69> <907E> <4D6C> <9089> <4D70> <9092> <4D71> <9094> <4D72> <9096> <4D73> <9098> <4D74> <909A> <4D75> <909C> <4D7E> <90AB> <4D7F> <90AD> <4D80> <90B2> <4D81> <90B7> <4D88> <90C6> <4D8E> <90D2> <4D95> <90DE> <4D96> <90E0> <4D9C> <90EC> <4D9D> <90EE> <4DAB> <9103> <4DAC> <9105> <4DAE> <566D> <4DB7> <9113> <4DB8> <9115> <4DCA> <912E> <4DCB> <9133> <4DCC> <9135> <4DD9> <9147> <4DDA> <9151> <4DE8> <916B> <4DE9> <916D> <4DEA> <9173> <4DF3> <9186> <4DF4> <9188> <4DF5> <918A> <4E16> <91C2> <4E17> <91C4> <4E18> <91C6> <4E19> <91C8> <4E1A> <91D0> <4E1B> <91D6> <4E25> <91E8> <4E31> <91F6> <4E32> <91F8> <4E40> <920F> <4E4F> <9224> <4E56> <922F> <4E6C> <9256> <4E85> <9279> <4E8B> <9284> <4E96> <9292> <4E99> <9297> <4E9A> <9299> <4E9B> <929B> <4EA1> <92A4> <4EA2> <92A7> <4EA3> <92AD> <4EAB> <92B8> <4EAC> <92BA> <4EB1> <92C2> <4EB2> <92C4> <4EB3> <92C6> <4EC5> <92DE> <4EC9> <92E7> <4ECA> <92E9> <4ED1> <92F7> <4EE4> <9311> <4EEC> <9321> <4EF0> <9327> <4EF9> <9337> <4EFF> <933F> <4F00> <9342> <4F06> <934C> endbfchar 100 beginbfchar <4F1D> <936B> <4F2E> <9383> <4F3D> <9397> <4F49> <93A8> <4F4A> <93AB> <4F4B> <93AD> <4F4C> <93AF> <4F4F> <93B4> <4F5E> <93C9> <4F5F> <93CB> <4F6A> <93E0> <4F6B> <93E3> <4F7B> <93F6> <4F7C> <93F8> <4F91> <9411> <4FA7> <9434> <4FAA> <9439> <4FB7> <944B> <4FBD> <9453> <4FCB> <9464> <4FD1> <946C> <4FD4> <9471> <4FD9> <9478> <4FE1> <9491> <4FE2> <9496> <4FE3> <9498> <4FE4> <94C7> <4FE5> <94CF> <4FE8> <94DA> <4FE9> <94E6> <4FEA> <94FB> <4FEB> <951C> <4FEC> <9520> <4FED> <9527> <4FEE> <9533> <4FEF> <953D> <4FF0> <9543> <4FF1> <9548> <4FF2> <954B> <4FF3> <9555> <4FF4> <955A> <4FF5> <9560> <4FF6> <956E> <5000> <9581> <5005> <958A> <5006> <958D> <5007> <9590> <5008> <9592> <5014> <95A2> <5017> <95AA> <5021> <95BA> <5027> <95C7> <5028> <95C9> <5034> <95DD> <503B> <95EC> <503C> <95FF> <503D> <9607> <503E> <9613> <503F> <9618> <5040> <961B> <5041> <961E> <5042> <9620> <5053> <963E> <5054> <9641> <5055> <9643> <5056> <964A> <5060> <965C> <5061> <965E> <5062> <9660> <5065> <966B> <5069> <9671> <5075> <9687> <5076> <9689> <5077> <968C> <507B> <9696> <507C> <969A> <5087> <96A9> <508D> <96B2> <508E> <96B5> <508F> <96B7> <5090> <96BA> <5091> <96BF> <5094> <96C8> <509D> <96DA> <50A1> <96E1> <50AE> <96F8> <50AF> <96FA> <50B2> <96FF> <50B5> <9705> <50C3> <971D> <50D2> <9731> <50DE> <9743> <50F1> <975F> <50FF> <9775> <5112> <978C> <5113> <978E> <5114> <9790> <5115> <9793> <5128> <97AC> <5129> <97AE> endbfchar 100 beginbfchar <512C> <97B3> <513E> <97CA> <514C> <97DD> <5154> <97E8> <515A> <97F4> <5163> <9800> <5164> <9804> <5165> <9809> <5166> <980B> <5167> <980D> <5174> <9825> <5185> <983C> <519A> <985A> <51A2> <9866> <51A8> <9872> <51A9> <988B> <51AA> <988E> <51AB> <9892> <51AC> <9895> <51AD> <9899> <51AE> <98A3> <51B4> <98B0> <51B5> <98B2> <51C4> <98C5> <51C5> <98C7> <51CD> <98D4> <51D2> <98E1> <51D7> <98EC> <51D8> <98EE> <51DB> <98F3> <51E7> <9904> <51EB> <990B> <520E> <993D> <5212> <9944> <5219> <9953> <521A> <9956> <521F> <995D> <5223> <9964> <5224> <9966> <5225> <9973> <5228> <997B> <5229> <997E> <522C> <9989> <522D> <998C> <522E> <998E> <5241> <99B2> <525C> <99D3> <525F> <99DA> <5260> <99DC> <5261> <99DE> <5262> <99E0> <527D> <9A00> <52A1> <9A2C> <52A2> <9A2F> <52AD> <9A3F> <52B4> <9A4E> <52BA> <9A56> <52C2> <9A63> <52C7> <9A6B> <52C8> <9A72> <52C9> <9A83> <52CA> <9A89> <52CF> <9A99> <52D0> <9AA6> <52DB> <9AB9> <52DC> <9ABB> <52E9> <9AD0> <52EA> <9AD7> <52F1> <9AE0> <52FA> <9AEC> <5304> <9AFA> <530E> <9B07> <5313> <9B0E> <5323> <9B24> <5324> <9B26> <5325> <9B28> <532A> <9B30> <5337> <9B46> <533B> <9B50> <5341> <9B59> <5365> <9B82> <5370> <9B8F> <5385> <9BAC> <539C> <9BC8> <53A6> <9BD5> <53AB> <9BDC> <53AF> <9BE3> <53B2> <9BE9> <53C2> <9BFE> <53D0> <9C11> <53DF> <9C24> <53E8> <9C34> <53E9> <9C36> <53EA> <9C38> <53EB> <9C3A> <53FE> <9C53> <53FF> <9C55> <5404> <9C5E> <541B> <9C79> <541C> <9C7B> endbfchar 100 beginbfchar <541F> <9C80> <5424> <9C8C> <5425> <9C8F> <5426> <9C93> <542B> <9C9D> <542C> <9CAA> <542D> <9CAC> <542E> <9CAF> <542F> <9CB9> <544A> <9CF5> <545A> <9D08> <546B> <9D1C> <546C> <9D1E> <5472> <9D27> <54A8> <9D6B> <54C1> <9D88> <54CF> <9D99> <54EF> <9DC1> <54F0> <9DC3> <54FF> <9DD4> <5502> <9DD8> <5538> <9E1C> <5539> <9E24> <553A> <9E27> <553B> <9E2E> <553C> <9E30> <553D> <9E34> <5540> <9E40> <5541> <9E4D> <5542> <9E50> <5546> <9E56> <5547> <9E59> <5548> <9E5D> <554D> <9E65> <5550> <9E72> <5551> <9E74> <5555> <9E7B> <556C> <9E9E> <5581> <9EBC> <558D> <9ED0> <5595> <9EE1> <5598> <9EE6> <559F> <9EF3> <55A2> <9EF8> <55A3> <9EFA> <55AD> <9F0A> <55AE> <9F0C> <55AF> <9F0F> <55B2> <9F14> <55B3> <9F16> <55B4> <9F18> <55BB> <9F21> <55CE> <9F38> <55CF> <9F3A> <55D0> <9F3C> <55DE> <9F53> <55E7> <9F62> <55ED> <9F6B> <560F> <5613> <5616> <56CE> <00FC> <56CF> <00A9> <56D0> <2122> <56D1> <2026> <5730> <0101> <5731> <00E1> <5732> <01CE> <5733> <00E0> <5734> <0113> <5735> <00E9> <5736> <011B> <5737> <00E8> <5738> <012B> <5739> <00ED> <573A> <01D0> <573B> <00EC> <573C> <014D> <573D> <00F3> <573E> <01D2> <573F> <00F2> <5740> <016B> <5741> <00FA> <5742> <01D4> <5743> <00F9> <5744> <01D6> <5745> <01D8> <5746> <01DA> <5747> <01DC> <5748> <00FC> <5749> <00EA> <574A> <0251> <574B> <1E3F> <574C> <0144> <574D> <0148> <574E> <006E0300> <574F> <0261> <5750> <0020> <5751> <20AC> <5752> <00A5> endbfchar 42 beginbfchar <5753> <20AC> <5754> <0024> <5755> <303F> <5756> <20AC> <5757> <3041> <5758> <3047> <5759> <3043> <575A> <304B> <575B> <304B> <575C> <3051> <575D> <3051> <575E> <3053> <575F> <3053> <5760> <3049> <5761> <3064> <5762> <3045> <5763> <308E> <5764> <3083> <5765> <3087> <5766> <3085> <5767> <3094> <5768> <30A1> <5769> <30A7> <576A> <30A3> <576D> <30B3> <576E> <30B3> <576F> <30A9> <5770> <30C3> <5771> <30A5> <5772> <30EE> <5773> <30E3> <5774> <30E7> <5775> <30E5> <577A> <30FC> <579C> <2E80> <5800> <2EF3> <6D65> <4984> <7183> <20AC> <7184> <00A5> <7185> <20AC> <7186> <0024> <7187> <303F> endbfchar 100 beginbfrange <0001> <005F> <0020> <0060> <0062> <3000> <006D> <006E> <2018> <006F> <0070> <201C> <0071> <0072> <3014> <0073> <007A> <3008> <007B> <007C> <3016> <007D> <007E> <3010> <0083> <0084> <2227> <0099> <009A> <226E> <009B> <009C> <2264> <00A3> <00A4> <2032> <00A8> <00A9> <00BA> <00BB> <2190> <00BE> <00D1> <2488> <00D2> <00E5> <2474> <00E6> <00EF> <2460> <00F0> <00F9> <3220> <00FA> <00FF> <2160> <0100> <0105> <2166> <0106> <0108> <010A> <0162> <0164> <01B6> <3041> <01B7> <01FF> <30A1> <0200> <020C> <30EA> <020D> <021D> <0391> <021E> <0224> <03A3> <0225> <0235> <03B1> <0236> <023C> <03C3> <0240> <0241> <0244> <0245> <0246> <0247> <0248> <0249> <024A> <024B> <024C> <024F> <0250> <0251> <3016> <0252> <0253> <0254> <0255> <0258> <0259> <025A> <025F> <0410> <0261> <0280> <0416> <0282> <029B> <0436> <02BC> <02E0> <3105> <02E2> <02FF> <2500> <0300> <032D> <251E> <032E> <038B> <0021> <044F> <0450> <8FA8> <0B03> <0B04> <6478> <0D19> <0D1A> <820C> <108E> <108F> <8424> <11C0> <11C1> <81F3> <1291> <1292> <523F> <1318> <1319> <8BA6> <131B> <131C> <8BB4> <131E> <131F> <8BC2> <1323> <1325> <8BD2> <1327> <1328> <8BD8> <132A> <132B> <8BDF> <132D> <132E> <8BE8> <1335> <1336> <8BFF> <133C> <133D> <8C11> <133E> <1340> <8C14> <1345> <1347> <8C1F> <134A> <134B> <8C2A> <134C> <134D> <8C2E> <134E> <134F> <8C32> <1350> <1351> <8C35> <138E> <138F> <52AC> <13AC> <13AD> <572E> <13F6> <13F7> <82CB> <1411> <1412> <8314> <1417> <1418> <835B> <1432> <1433> <836D> <1436> <1437> <83B3> <145A> <145B> <83F8> <1467> <1468> <8487> <14EA> <14EB> <64B7> <1504> <1506> <5452> <1513> <1514> <549A> <1520> <1521> <54D3> <1528> <1529> <54D9> <152B> <152C> <54A9> <1537> <1538> <5522> <1549> <154B> <5575> <155C> <155D> <55BD> <1565> <1566> <55EB> <156D> <156E> <55F2> <156F> <1570> <55CC> <158D> <158E> <567B> <15A3> <15A4> <5E3B> <15B1> <15B2> <5C98> <15C4> <15C5> <5D02> <15F2> <15F3> <72B7> <1602> <1603> <72FA> <161E> <1623> <9967> <162C> <162D> <9990> <162E> <1630> <9993> <164C> <164D> <6005> <165C> <165D> <6078> <1689> <168A> <95F5> endbfrange 100 beginbfrange <168D> <168E> <9603> <1691> <1694> <960A> <1697> <1699> <9615> <169A> <169B> <9619> <16A8> <16A9> <6C68> <16B1> <16B2> <6CF7> <16D6> <16D7> <6D93> <16F2> <16F3> <6E53> <1709> <170A> <6F46> <174F> <1750> <9035> <1754> <1755> <9051> <1778> <1779> <59A9> <1785> <1786> <5A05> <17BB> <17BC> <9A77> <17C0> <17C1> <9A80> <17C6> <17C7> <9A92> <17CA> <17CC> <9A9B> <17CD> <17CE> <9A9F> <17CF> <17D0> <9AA2> <17D7> <17D8> <7EA8> <17DC> <17DE> <7EC0> <17E0> <17E1> <7ECB> <17E6> <17E7> <7EE0> <17EA> <17EB> <7EEE> <17EC> <17ED> <7EF1> <17F0> <17F1> <7EFA> <17F3> <17F5> <7F01> <17F6> <17F7> <7F07> <17F8> <17F9> <7F0B> <17FB> <17FC> <7F11> <1802> <1808> <7F21> <1809> <180C> <7F2A> <180D> <1811> <7F2F> <1843> <1844> <7480> <1848> <1849> <74A8> <184E> <1850> <97EA> <1876> <1877> <6832> <1878> <1879> <6860> <1892> <1893> <691F> <18A8> <18A9> <6987> <18BF> <18C0> <6A17> <18D6> <18D7> <6B81> <18DA> <18DB> <6B92> <18DD> <18DE> <6B9A> <18E3> <18E5> <8F71> <18E6> <18E7> <8F75> <18EA> <18EB> <8F79> <18EE> <18EF> <8F81> <18F3> <18F5> <8F8D> <190A> <190C> <65EE> <1928> <1929> <66DB> <192C> <192D> <8D32> <1932> <1933> <8D45> <1934> <1935> <8D48> <193B> <193D> <89CA> <193E> <1941> <89CE> <1947> <1948> <727E> <195E> <1960> <6C18> <197A> <197D> <80E7> <198A> <198B> <810D> <199A> <199B> <8159> <199F> <19A0> <817C> <19B7> <19B9> <98D1> <19BB> <19BC> <98D9> <19F6> <19F7> <6248> <19FC> <19FD> <795B> <1A26> <1A27> <7817> <1A2B> <1A2C> <781C> <1A2D> <1A2F> <7839> <1A38> <1A39> <7856> <1A56> <1A57> <9EFB> <1A5C> <1A5D> <7707> <1A65> <1A66> <7750> <1A73> <1A74> <779F> <1A8E> <1A90> <9485> <1A93> <1A94> <948C> <1A95> <1A96> <948F> <1A9A> <1A9C> <949A> <1A9D> <1A9E> <94A3> <1AA3> <1AA4> <94AF> <1AA7> <1AAB> <94B6> <1AAC> <1AAD> <94BC> <1AB0> <1AB6> <94C8> <1AB7> <1AB9> <94D0> <1ABA> <1ABC> <94D5> <1AC0> <1AC2> <94DE> <1AC4> <1AC5> <94E4> <1AC6> <1AC7> <94E7> <1ACB> <1ACC> <94EE> <1ACD> <1ACF> <94F3> <1AD2> <1AD3> <94FC> <1AD7> <1AD8> <9506> <1AD9> <1ADA> <9509> <1ADB> <1ADD> <950D> <1ADE> <1AE2> <9512> <1AE5> <1AE7> <951D> <1AE9> <1AEA> <952A> <1AED> <1AEE> <9531> <1AF0> <1AF2> <9536> <1AF4> <1AF5> <953E> endbfrange 100 beginbfrange <1AF8> <1AFA> <9544> <1AFD> <1AFE> <954E> <1B00> <1B01> <9553> <1B02> <1B05> <9556> <1B07> <1B08> <955E> <1B0A> <1B0B> <9561> <1B0C> <1B14> <9564> <1B16> <1B18> <9571> <1B37> <1B3B> <9E28> <1B41> <1B42> <9E39> <1B44> <1B45> <9E41> <1B47> <1B4A> <9E46> <1B4B> <1B4C> <9E4B> <1B51> <1B53> <9E5A> <1B56> <1B5C> <9E66> <1B67> <1B68> <75B3> <1B9A> <1B9B> <7A78> <1BD1> <1BD3> <8025> <1BE4> <1BE5> <988C> <1BE8> <1BE9> <989A> <1BEA> <1BEB> <989E> <1BEC> <1BED> <98A1> <1BEE> <1BEF> <98A5> <1C0E> <1C0F> <86F1> <1C2F> <1C30> <877D> <1C60> <1C61> <7F44> <1C66> <1C67> <7B03> <1C85> <1C86> <7BA6> <1C96> <1C97> <7BE5> <1CA6> <1CA7> <8201> <1CAB> <1CAD> <8221> <1CB4> <1CB5> <8233> <1CC7> <1CC8> <7FAF> <1CD2> <1CD3> <7CBC> <1CD6> <1CD7> <7CCC> <1CFA> <1CFB> <914E> <1D02> <1D03> <917D> <1D0C> <1D0D> <91A2> <1D0F> <1D11> <91AD> <1D21> <1D22> <8DD6> <1D25> <1D26> <8DCE> <1D2A> <1D2B> <8DF7> <1D40> <1D41> <8E41> <1D42> <1D43> <8E51> <1D6F> <1D74> <9F85> <1D7A> <1D7B> <96BC> <1D8B> <1D8E> <9C85> <1D92> <1D94> <9C90> <1D95> <1D96> <9C94> <1D97> <1D98> <9C9A> <1D99> <1D9E> <9C9E> <1D9F> <1DA3> <9CA5> <1DA5> <1DA6> <9CAD> <1DA7> <1DAE> <9CB0> <1DAF> <1DB2> <9CBA> <1DB3> <1DB6> <9CC4> <1DB7> <1DBD> <9CCA> <1DBE> <1DC0> <9CD3> <1DC1> <1DC3> <9CD7> <1DC4> <1DC5> <9CDC> <1DCA> <1DCB> <9791> <1DDD> <1DDE> <9ACB> <1DF9> <1DFA> <9EBD> <1DFD> <1DFE> <9E87> <1E04> <1E06> <9EDB> <1E14> <1E15> <9F3D> <22F9> <22FA> <8A91> <239F> <23A0> <98EA> <23A9> <23AB> <9948> <2416> <2417> <9A43> <241E> <241F> <7D07> <249D> <249E> <8F1E> <24CC> <24CD> <98AE> <24F3> <24F5> <91D2> <2511> <2512> <926C> <2541> <2542> <9426> <254F> <2550> <9307> <2568> <2569> <93DC> <25AF> <25B0> <7646> <25B4> <25B5> <766D> <25C6> <25C7> <980E> <263B> <263C> <9BEA> <26A9> <26B2> <2170> <26B3> <26B4> <02CA> <26BC> <26BF> <2196> <26C4> <26C5> <2266> <26C7> <26EA> <2550> <26EB> <26F9> <2581> <26FA> <26FC> <2593> <26FD> <26FE> <25BC> <2700> <2702> <25E3> <2706> <2707> <301D> <2708> <2710> <3021> <2712> <2713> <338E> <2714> <2716> <339C> <271A> <271B> <33D1> <2724> <2725> <309B> <2726> <2727> <30FD> <2729> <272A> <309D> <272B> <2734> endbfrange 100 beginbfrange <2735> <2738> <2739> <2746> <2747> <274A> <274B> <2757> <2759> <275B> <4E04> <275F> <2761> <4E1F> <2765> <2766> <4E2E> <276C> <276E> <4E40> <2775> <2776> <4E5A> <2777> <277A> <4E62> <277B> <277C> <4E67> <277D> <2782> <4E6A> <2784> <278D> <4E74> <278E> <2790> <4E7F> <2791> <2793> <4E83> <2797> <2798> <4E96> <279A> <279B> <4E9C> <279E> <27A0> <4EAF> <27A2> <27A5> <4EB6> <27A6> <27A8> <4EBC> <27AB> <27AC> <4ECF> <27AE> <27B0> <4EDA> <27B3> <27B4> <4EE6> <27B6> <27B8> <4EED> <27BB> <27BD> <4EF8> <27C1> <27C7> <4F02> <27C8> <27C9> <4F0B> <27CA> <27CE> <4F12> <27CF> <27D0> <4F1C> <27D3> <27D4> <4F28> <27D5> <27D7> <4F2C> <27DE> <27E2> <4F3E> <27E3> <27E4> <4F44> <27E5> <27EA> <4F47> <27EE> <27EF> <4F61> <27F2> <27F3> <4F6A> <27F4> <27F5> <4F6D> <27F6> <27F7> <4F71> <27F9> <27FC> <4F77> <27FE> <27FF> <4F80> <2807> <2808> <4F92> <280A> <280C> <4F98> <280E> <280F> <4F9E> <2810> <2811> <4FA1> <2815> <2819> <4FB0> <281A> <2822> <4FB6> <2823> <2824> <4FC0> <2825> <2828> <4FC6> <2829> <282B> <4FCB> <282C> <2830> <4FD2> <2834> <2835> <4FE4> <2837> <2838> <4FEB> <283B> <283E> <4FF4> <2840> <2842> <4FFB> <2844> <2848> <5001> <2849> <284A> <5007> <284F> <2851> <5015> <2853> <2854> <501D> <2856> <2858> <5022> <285A> <2864> <502F> <2867> <286A> <503F> <286B> <286D> <5044> <286E> <286F> <504A> <2871> <2875> <5050> <2876> <2879> <5056> <287B> <2882> <505D> <2883> <2888> <5066> <2889> <288F> <506D> <2890> <2892> <5078> <2893> <2894> <507C> <2895> <2898> <5081> <2899> <289A> <5086> <289B> <289E> <5089> <289F> <28A6> <508E> <28A8> <28AF> <509A> <28B2> <28B3> <50AA> <28B4> <28B7> <50AE> <28B9> <28BA> <50B8> <28BB> <28BC> <50BC> <28BD> <28BF> <50BF> <28C0> <28C1> <50C3> <28C2> <28C4> <50C6> <28C5> <28C9> <50CA> <28CB> <28CD> <50D2> <28CE> <28D0> <50D7> <28D1> <28D3> <50DB> <28D4> <28D9> <50DF> <28DA> <28DC> <50E9> <28DD> <28E0> <50EF> <28E2> <28E4> <50F6> <28E6> <28E9> <50FC> <28EE> <28F1> <510C> <28F4> <28F5> <5116> <28F6> <28FB> <5119> <28FD> <28FF> <5122> <2900> <2904> <5125> <2905> <290B> <512B> <290C> <290F> <5133> <2910> <2911> <5138> <2912> <2913> <513D> endbfrange 100 beginbfrange <2918> <291A> <514E> <291C> <291E> <5157> <2920> <2924> <515D> <2925> <2926> <5163> <2927> <2928> <5166> <292D> <292E> <517E> <292F> <2930> <5183> <2931> <2932> <5186> <2933> <2934> <518A> <2935> <2938> <518E> <2939> <293A> <5193> <293D> <293F> <519D> <2942> <2946> <51A6> <2947> <2948> <51AD> <294A> <294C> <51B8> <294D> <294E> <51BE> <294F> <2951> <51C1> <2957> <295F> <51D2> <2961> <2962> <51DE> <2963> <2964> <51E2> <2965> <296A> <51E5> <2971> <2972> <5204> <2974> <2975> <520B> <2976> <2977> <520F> <2978> <297A> <5213> <297C> <297D> <521E> <297E> <2980> <5221> <2981> <2983> <5225> <2987> <2988> <5231> <2989> <298A> <5234> <298D> <298E> <5245> <298F> <2990> <5248> <2991> <2992> <524E> <2993> <2994> <5252> <2996> <2999> <5257> <299B> <299C> <525F> <299D> <299F> <5262> <29A2> <29A4> <526B> <29A5> <29A6> <5270> <29A8> <29AE> <5276> <29B1> <29B3> <5284> <29B5> <29B6> <528E> <29B8> <29BE> <5294> <29C0> <29C3> <52A4> <29C4> <29C6> <52AE> <29C7> <29D0> <52B4> <29D3> <29D5> <52C4> <29D8> <29DB> <52CC> <29DD> <29DE> <52D3> <29E2> <29E3> <52E0> <29E5> <29EF> <52E5> <29F0> <29F2> <52F2> <29F3> <29F4> <52F6> <29F5> <29F7> <52FB> <29F8> <29FB> <5301> <29FD> <29FF> <5309> <2A02> <2A05> <5311> <2A07> <2A08> <531B> <2A09> <2A0A> <531E> <2A0C> <2A0D> <5324> <2A0E> <2A10> <5327> <2A11> <2A12> <532B> <2A14> <2A1A> <5332> <2A1B> <2A1C> <533C> <2A20> <2A22> <534B> <2A24> <2A25> <5358> <2A2B> <2A2C> <536C> <2A30> <2A33> <537B> <2A34> <2A35> <5380> <2A37> <2A38> <5387> <2A3A> <2A40> <538E> <2A41> <2A42> <5396> <2A43> <2A44> <539B> <2A49> <2A4B> <53AA> <2A4C> <2A4E> <53AF> <2A51> <2A54> <53B7> <2A55> <2A57> <53BC> <2A59> <2A5C> <53C4> <2A5D> <2A5F> <53CE> <2A60> <2A61> <53D2> <2A64> <2A66> <53DC> <2A6B> <2A6D> <53FE> <2A73> <2A75> <5418> <2A78> <2A79> <5424> <2A7D> <2A7E> <5436> <2A82> <2A83> <5441> <2A84> <2A85> <5444> <2A88> <2A8B> <544C> <2A8E> <2A92> <545D> <2A96> <2A9D> <5469> <2A9F> <2AA0> <5479> <2AA1> <2AA2> <547E> <2AA6> <2AA9> <5487> <2AAD> <2AAE> <5497> <2AB0> <2AB4> <549E> <2AB9> <2ABB> <54B5> <2ABC> <2ABD> <54B9> <2AC1> <2AC2> <54CA> <2AC7> <2AC9> <54E2> <2ACA> <2ACB> <54EB> endbfrange 100 beginbfrange <2ACC> <2ACE> <54EF> <2ACF> <2AD4> <54F4> <2AD8> <2AD9> <5502> <2ADC> <2AE0> <550A> <2AE1> <2AE2> <5512> <2AE3> <2AE8> <5515> <2AE9> <2AEC> <551C> <2AEE> <2AEF> <5525> <2AF0> <2AF1> <5528> <2AF5> <2AF7> <5534> <2AF8> <2AFB> <5538> <2B00> <2B01> <5547> <2B02> <2B05> <554B> <2B06> <2B07> <5551> <2B09> <2B0D> <5557> <2B0F> <2B10> <555F> <2B11> <2B12> <5562> <2B13> <2B14> <5568> <2B16> <2B1B> <556F> <2B1C> <2B1D> <5579> <2B20> <2B21> <5585> <2B22> <2B24> <558C> <2B26> <2B27> <5592> <2B28> <2B2A> <5595> <2B2B> <2B2C> <559A> <2B2E> <2B34> <55A0> <2B35> <2B36> <55A8> <2B39> <2B3A> <55AF> <2B40> <2B44> <55BF> <2B46> <2B47> <55CA> <2B48> <2B49> <55CF> <2B4B> <2B4D> <55D7> <2B53> <2B54> <55ED> <2B55> <2B56> <55F0> <2B58> <2B5C> <55F8> <2B5E> <2B61> <5602> <2B63> <2B64> <560A> <2B65> <2B68> <5610> <2B6A> <2B6B> <5619> <2B6D> <2B6F> <5620> <2B70> <2B71> <5625> <2B73> <2B74> <562A> <2B78> <2B7A> <563C> <2B7C> <2B85> <5642> <2B86> <2B8A> <564F> <2B8B> <2B8C> <5655> <2B8D> <2B8E> <565A> <2B8F> <2B90> <565E> <2B94> <2B95> <566D> <2B9B> <2B9D> <567D> <2B9E> <2BA1> <5681> <2BA2> <2BA5> <5688> <2BA7> <2BA9> <5690> <2BAB> <2BAD> <5696> <2BAE> <2BB6> <569A> <2BB7> <2BB8> <56A4> <2BBA> <2BBE> <56A9> <2BBF> <2BC1> <56B0> <2BC3> <2BC6> <56B8> <2BC7> <2BC9> <56BD> <2BCA> <2BCB> <56C3> <2BCC> <2BCD> <56C6> <2BCF> <2BD2> <56CD> <2BD3> <2BD4> <56D2> <2BD5> <2BD6> <56D5> <2BD7> <2BD8> <56D8> <2BDB> <2BE0> <56E5> <2BE2> <2BE3> <56EE> <2BE4> <2BE5> <56F2> <2BE6> <2BE8> <56F6> <2BE9> <2BEA> <56FB> <2BEB> <2BED> <5700> <2BF0> <2BF3> <570E> <2BF4> <2BF5> <5714> <2BF7> <2BF9> <5719> <2BFA> <2BFB> <571D> <2BFC> <2BFE> <5720> <2C00> <2C02> <5725> <2C04> <2C05> <5731> <2C06> <2C0A> <5734> <2C0B> <2C0C> <573C> <2C0F> <2C12> <5743> <2C13> <2C14> <5748> <2C16> <2C1A> <5752> <2C1B> <2C1C> <5758> <2C1D> <2C1E> <5762> <2C23> <2C25> <5770> <2C26> <2C27> <5774> <2C28> <2C2A> <5778> <2C2B> <2C2F> <577D> <2C30> <2C33> <5787> <2C34> <2C38> <578D> <2C39> <2C3F> <5794> <2C40> <2C43> <579C> <2C48> <2C4A> <57AF> <2C4C> <2C4E> <57B5> <2C4F> <2C57> <57B9> <2C58> <2C5E> <57C4> <2C5F> <2C60> <57CC> <2C61> <2C62> <57D0> endbfrange 100 beginbfrange <2C64> <2C65> <57D6> <2C66> <2C67> <57DB> <2C69> <2C6A> <57E2> <2C6B> <2C72> <57E5> <2C74> <2C77> <57F0> <2C78> <2C79> <57F5> <2C7A> <2C7B> <57FB> <2C7C> <2C7D> <57FE> <2C7F> <2C80> <5803> <2C81> <2C82> <5808> <2C84> <2C86> <580E> <2C87> <2C89> <5812> <2C8A> <2C8B> <5817> <2C8C> <2C8E> <581A> <2C90> <2C91> <5822> <2C92> <2C96> <5825> <2C97> <2C9A> <582B> <2C9B> <2C9C> <5832> <2C9D> <2CAA> <5836> <2CAB> <2CAF> <5845> <2CB3> <2CB4> <5855> <2CB5> <2CB9> <5859> <2CBA> <2CBC> <585F> <2CBE> <2CC2> <5866> <2CC3> <2CCA> <586D> <2CCB> <2CCD> <5876> <2CCE> <2CD1> <587A> <2CD5> <2CD7> <5886> <2CD8> <2CDE> <588B> <2CDF> <2CE3> <5894> <2CE6> <2CED> <58A0> <2CEE> <2CF1> <58AA> <2CF2> <2CF5> <58AF> <2CF6> <2CFC> <58B4> <2CFE> <2CFF> <58BF> <2D00> <2D02> <58C2> <2D04> <2D0C> <58C8> <2D0F> <2D10> <58D6> <2D11> <2D13> <58DB> <2D16> <2D19> <58E5> <2D1C> <2D1D> <58F1> <2D1E> <2D1F> <58F4> <2D20> <2D21> <58F7> <2D22> <2D23> <58FB> <2D24> <2D27> <58FE> <2D29> <2D2A> <5905> <2D2B> <2D2F> <5908> <2D31> <2D34> <5910> <2D35> <2D36> <5917> <2D38> <2D39> <591D> <2D3A> <2D3B> <5920> <2D41> <2D42> <5932> <2D43> <2D44> <5935> <2D47> <2D48> <593F> <2D4A> <2D4B> <5945> <2D4D> <2D4E> <594C> <2D50> <2D51> <5952> <2D53> <2D57> <595B> <2D59> <2D5A> <5963> <2D5B> <2D5D> <5966> <2D60> <2D63> <596F> <2D66> <2D68> <597A> <2D69> <2D6B> <597E> <2D6E> <2D6F> <598B> <2D70> <2D73> <598E> <2D74> <2D75> <5994> <2D77> <2D79> <599A> <2D7A> <2D7D> <599F> <2D7E> <2D7F> <59A6> <2D80> <2D81> <59AC> <2D82> <2D83> <59B0> <2D84> <2D89> <59B3> <2D8B> <2D8C> <59BC> <2D8D> <2D93> <59BF> <2D94> <2D96> <59C7> <2D97> <2D9A> <59CC> <2D9B> <2D9C> <59D5> <2D9F> <2DA3> <59DE> <2DA5> <2DA6> <59E6> <2DA7> <2DA9> <59E9> <2DAA> <2DB5> <59ED> <2DB7> <2DB9> <59FC> <2DBC> <2DBD> <5A0A> <2DBE> <2DC1> <5A0D> <2DC3> <2DC6> <5A14> <2DC7> <2DC9> <5A19> <2DCA> <2DCB> <5A1D> <2DCC> <2DCD> <5A21> <2DCF> <2DD1> <5A26> <2DD2> <2DD8> <5A2A> <2DDB> <2DDF> <5A37> <2DE0> <2DE2> <5A3D> <2DE3> <2DE6> <5A42> <2DE7> <2DE8> <5A47> <2DE9> <2DF2> <5A4B> <2DF3> <2DF6> <5A56> <2DF7> <2DFD> <5A5B> <2DFE> <2DFF> <5A63> <2E01> <2E02> <5A68> <2E03> <2E04> <5A6B> endbfrange 100 beginbfrange <2E05> <2E0A> <5A6E> <2E0B> <2E0C> <5A78> <2E0D> <2E10> <5A7B> <2E11> <2E22> <5A80> <2E23> <2E29> <5A93> <2E2A> <2E34> <5A9C> <2E35> <2E36> <5AA8> <2E37> <2E3D> <5AAB> <2E3F> <2E40> <5AB6> <2E41> <2E44> <5AB9> <2E45> <2E46> <5ABF> <2E47> <2E4C> <5AC3> <2E4D> <2E4E> <5ACA> <2E4F> <2E53> <5ACD> <2E56> <2E58> <5AD9> <2E59> <2E5B> <5ADD> <2E5D> <2E5E> <5AE4> <2E5F> <2E60> <5AE7> <2E62> <2E66> <5AEC> <2E67> <2E69> <5AF2> <2E6A> <2E6E> <5AF6> <2E6F> <2E72> <5AFC> <2E73> <2E79> <5B01> <2E7B> <2E83> <5B0D> <2E85> <2E8B> <5B1A> <2E8C> <2E93> <5B22> <2E94> <2E98> <5B2B> <2E9B> <2E9C> <5B35> <2E9D> <2EA3> <5B39> <2EA4> <2EAE> <5B41> <2EAF> <2EB1> <5B4D> <2EB5> <2EB6> <5B60> <2EB6> <2EB7> <5643> <2EB7> <2EB8> <5B67> <2EB9> <2EBB> <5B6D> <2EBE> <2EBF> <5B76> <2EC1> <2EC2> <5B7B> <2EC7> <2EC8> <5B8D> <2EC9> <2ECB> <5B90> <2ECF> <2ED1> <5BA7> <2ED2> <2ED5> <5BAC> <2ED6> <2ED7> <5BB1> <2ED9> <2EDB> <5BBA> <2EDC> <2EDD> <5BC0> <2EDF> <2EE2> <5BC8> <2EE3> <2EE5> <5BCD> <2EE7> <2EEF> <5BD4> <2EF5> <2EF8> <5BF1> <2EFA> <2EFB> <5BFD> <2EFD> <2EFE> <5C02> <2F02> <2F03> <5C12> <2F07> <2F0A> <5C1E> <2F0D> <2F10> <5C28> <2F11> <2F14> <5C2D> <2F15> <2F16> <5C32> <2F17> <2F18> <5C35> <2F19> <2F1A> <5C43> <2F1B> <2F1C> <5C46> <2F1D> <2F1E> <5C4C> <2F1F> <2F21> <5C52> <2F22> <2F24> <5C56> <2F25> <2F28> <5C5A> <2F2B> <2F2D> <5C69> <2F30> <2F36> <5C72> <2F37> <2F3A> <5C7B> <2F3C> <2F40> <5C83> <2F41> <2F43> <5C89> <2F44> <2F45> <5C8E> <2F46> <2F47> <5C92> <2F49> <2F4C> <5C9D> <2F4D> <2F51> <5CA4> <2F53> <2F55> <5CAE> <2F59> <2F5C> <5CB9> <2F5F> <2F60> <5CC2> <2F61> <2F66> <5CC5> <2F67> <2F6C> <5CCC> <2F6D> <2F72> <5CD3> <2F73> <2F79> <5CDA> <2F7A> <2F7B> <5CE2> <2F7E> <2F7F> <5CEB> <2F80> <2F81> <5CEE> <2F82> <2F84> <5CF1> <2F86> <2F89> <5CF7> <2F8B> <2F8E> <5CFE> <2F8F> <2F90> <5D04> <2F91> <2F95> <5D08> <2F96> <2F9A> <5D0F> <2F9C> <2F9E> <5D18> <2F9F> <2FA0> <5D1C> <2FA1> <2FA5> <5D1F> <2FA8> <2FA9> <5D2A> <2FAA> <2FAE> <5D2F> <2FAF> <2FB6> <5D35> <2FB7> <2FBE> <5D3F> <2FBF> <2FC0> <5D48> <2FC1> <2FC3> <5D4D> <2FC4> <2FCA> <5D51> <2FCB> <2FCC> <5D59> <2FCE> <2FD8> <5D5E> <2FDA> <2FDB> <5D6D> endbfrange 100 beginbfrange <2FDC> <2FDF> <5D70> <2FE0> <2FEB> <5D75> <2FED> <2FEE> <5D85> <2FEF> <2FFD> <5D88> <2FF0> <2FFB> <274C> <3000> <3001> <5D9B> <3002> <3003> <5D9E> <3004> <3009> <5DA1> <300A> <3018> <5DA8> <301B> <3022> <5DBD> <3023> <3027> <5DC6> <3029> <302C> <5DCE> <302E> <3033> <5DD5> <3035> <3036> <5DDF> <3037> <3038> <5DE3> <303A> <303B> <5DEC> <303C> <303D> <5DF5> <303E> <3042> <5DF8> <3043> <3044> <5DFF> <3047> <3049> <5E09> <304A> <304B> <5E0D> <304C> <304D> <5E12> <304F> <3055> <5E1E> <3056> <3058> <5E28> <305A> <305B> <5E2F> <305D> <305E> <5E34> <305F> <3060> <5E39> <3061> <3062> <5E3E> <3064> <3069> <5E46> <306A> <3070> <5E4D> <3072> <3073> <5E59> <3074> <3075> <5E5C> <3077> <307D> <5E64> <307E> <3082> <5E6D> <3085> <3087> <5E81> <3089> <308A> <5E88> <308B> <308D> <5E8C> <3092> <3095> <5EA1> <3096> <3098> <5EA8> <309A> <309E> <5EAE> <30A0> <30A3> <5EBA> <30A4> <30AD> <5EBF> <30AE> <30B3> <5ECB> <30B4> <30B5> <5ED4> <30B6> <30B9> <5ED7> <30BA> <30BC> <5EDC> <30BD> <30C0> <5EE4> <30C3> <30C8> <5EED> <30CA> <30CB> <5EF8> <30CC> <30CE> <5EFB> <30CF> <30D1> <5F05> <30D3> <30D5> <5F0C> <30DA> <30DB> <5F19> <30DC> <30DE> <5F1C> <30DF> <30E2> <5F21> <30E4> <30E5> <5F2B> <30EA> <30EC> <5F36> <30EE> <30F0> <5F3D> <30F1> <30F5> <5F41> <30F7> <30F9> <5F49> <30FE> <30FF> <5F5A> <3101> <3103> <5F5E> <3106> <3107> <5F67> <3109> <310A> <5F6E> <310C> <310E> <5F74> <3111> <3113> <5F7D> <3116> <3118> <5F8D> <3119> <311A> <5F93> <311C> <311D> <5F9A> <3120> <3125> <5FA2> <3126> <3127> <5FAB> <3128> <312D> <5FAF> <3130> <3131> <5FBA> <3132> <3136> <5FBE> <3137> <3138> <5FC7> <3139> <313A> <5FCA> <313C> <313E> <5FD3> <313F> <3141> <5FDA> <3142> <3143> <5FDE> <3144> <3145> <5FE2> <3146> <3147> <5FE5> <3148> <3149> <5FE8> <314B> <314C> <5FEF> <314D> <314F> <5FF2> <3150> <3151> <5FF6> <3152> <3153> <5FF9> <3155> <3157> <6007> <3158> <3159> <600B> <315A> <315B> <6010> <315D> <315E> <6017> <3160> <3161> <601E> <3162> <3164> <6022> <3165> <3167> <602C> <3168> <316C> <6030> <316D> <3171> <6036> <3172> <3173> <603D> <3175> <317B> <6044> <317D> <317E> <604E> <3180> <3181> <6053> <3182> <3184> <6056> endbfrange 100 beginbfrange <3185> <3186> <605B> <3187> <318A> <605E> <318B> <318C> <6065> <318E> <318F> <6071> <3190> <3191> <6074> <3194> <3196> <6080> <3197> <319A> <6085> <319B> <319C> <608A> <319D> <31A0> <608E> <31A3> <31A5> <6097> <31A8> <31A9> <60A1> <31AA> <31AB> <60A4> <31AD> <31AE> <60A9> <31B3> <31B4> <60B9> <31B5> <31BC> <60BD> <31BD> <31BF> <60C7> <31C0> <31C4> <60CC> <31C5> <31C7> <60D2> <31C8> <31C9> <60D6> <31CD> <31D0> <60E2> <31D3> <31D4> <60F7> <31D5> <31D8> <60FC> <31D9> <31DC> <6102> <31DE> <31E0> <610A> <31E1> <31E5> <6110> <31E6> <31E9> <6116> <31EA> <31EB> <611D> <31EC> <31ED> <6121> <31EF> <31F1> <6128> <31F2> <31F9> <612C> <31FA> <31FB> <6135> <31FC> <31FF> <6138> <3200> <3201> <613C> <3202> <3209> <6140> <320C> <320D> <614F> <320E> <3210> <6152> <3211> <3212> <6156> <3214> <3215> <615B> <3217> <3218> <6160> <3219> <321A> <6165> <321C> <321D> <616C> <321F> <3220> <6171> <3222> <322B> <6178> <322C> <3232> <6183> <3233> <3234> <618C> <3237> <323B> <6195> <323C> <323D> <619B> <323E> <3243> <619E> <3244> <3245> <61A5> <3248> <324A> <61AF> <324B> <324D> <61B3> <324E> <3253> <61B8> <3254> <3256> <61BF> <3257> <325A> <61C3> <325B> <325E> <61CD> <3260> <3268> <61D5> <3269> <326B> <61E0> <326C> <326D> <61E4> <326F> <3277> <61E9> <3278> <3279> <61F3> <327D> <3281> <6201> <3285> <3287> <621C> <328B> <328C> <6228> <3291> <3292> <6235> <3293> <3297> <6238> <3299> <329B> <6244> <329D> <329E> <624F> <329F> <32A1> <6255> <32A2> <32A3> <6259> <32A4> <32AA> <625C> <32AB> <32AC> <6264> <32AE> <32AF> <6271> <32B0> <32B1> <6274> <32B2> <32B3> <6277> <32B4> <32B5> <627A> <32B7> <32B9> <6281> <32BA> <32BD> <6285> <32BE> <32C3> <628B> <32C6> <32C8> <629C> <32CA> <32CB> <62A6> <32CC> <32CD> <62A9> <32CE> <32D1> <62AD> <32D2> <32D4> <62B2> <32D5> <32D7> <62B6> <32DA> <32DB> <62C0> <32E1> <32E2> <62DD> <32E3> <32E4> <62E0> <32E6> <32E7> <62EA> <32EB> <32EE> <62F8> <32F0> <32F3> <6303> <32F4> <32F7> <630A> <32F8> <32F9> <630F> <32FA> <32FD> <6312> <32FE> <32FF> <6317> <3302> <3303> <6326> <3305> <3307> <632C> <3308> <3309> <6330> <330A> <330F> <6333> <3310> <3311> <633B> <3312> <3314> <633F> endbfrange 100 beginbfrange <3316> <3317> <6347> <3319> <331C> <6351> <331D> <3324> <6356> <3326> <3328> <6364> <332B> <332C> <636F> <332D> <332F> <6373> <3330> <3331> <6378> <3332> <3335> <637C> <3337> <3338> <6385> <333C> <333E> <6393> <3340> <3346> <6399> <334C> <334D> <63B1> <334E> <334F> <63B5> <3354> <3356> <63C1> <3358> <3359> <63C7> <335A> <335C> <63CA> <335E> <3360> <63D3> <3361> <3363> <63D7> <3364> <3366> <63DB> <3369> <336D> <63E4> <336E> <336F> <63EB> <3370> <3372> <63EF> <3376> <3379> <63F9> <337B> <337C> <6403> <337D> <3381> <6406> <3383> <3384> <6411> <3385> <3386> <6415> <3387> <3389> <6418> <338C> <338F> <6422> <3390> <3392> <6427> <3394> <3399> <642E> <339B> <339D> <6437> <339E> <339F> <643B> <33A2> <33A3> <6442> <33A5> <33AA> <644B> <33AC> <33AE> <6455> <33AF> <33B1> <6459> <33B3> <33B9> <6460> <33BB> <33BD> <646A> <33BF> <33C1> <6470> <33C2> <33C3> <6474> <33C5> <33CA> <647C> <33CD> <33D4> <6489> <33D6> <33D7> <6497> <33D8> <33DB> <649A> <33DC> <33DE> <64A0> <33DF> <33E1> <64A6> <33EB> <33EC> <64C8> <33F1> <33F2> <64D5> <33F4> <33F6> <64DB> <33FB> <33FF> <64E7> <3400> <3401> <64ED> <3403> <3404> <64F5> <3405> <3406> <64F8> <3409> <340B> <6501> <340D> <340E> <6507> <340F> <3413> <650A> <3414> <3415> <6510> <341B> <341E> <651E> <341F> <3422> <6526> <3424> <3427> <6530> <342A> <342B> <653C> <342C> <3430> <6540> <3431> <3432> <6546> <3433> <3434> <654A> <3435> <3436> <654D> <3438> <343A> <6552> <343E> <3440> <655F> <3441> <3442> <6564> <3443> <3446> <6567> <3447> <3449> <656D> <344D> <3455> <6579> <3456> <3458> <6584> <3459> <345B> <6588> <345C> <345E> <658D> <3464> <3465> <659D> <3467> <3468> <65A2> <346D> <3472> <65B1> <3474> <3475> <65BA> <3476> <3478> <65BE> <347A> <347D> <65C7> <347F> <3480> <65D0> <3481> <3483> <65D3> <3484> <348B> <65D8> <348D> <348E> <65E3> <348F> <3490> <65EA> <3491> <3494> <65F2> <3495> <3496> <65F8> <3497> <349B> <65FB> <349D> <349E> <6604> <349F> <34A1> <6607> <34A4> <34A6> <6610> <34A7> <34A9> <6616> <34AA> <34AC> <661A> <34AE> <34B1> <6621> <34B3> <34B6> <6629> <34B9> <34BA> <6632> <34BB> <34BF> <6637> <34C1> <34C2> <663F> <34C3> <34C9> <6644> endbfrange 100 beginbfrange <34CA> <34CB> <664D> <34CC> <34CD> <6650> <34CE> <34CF> <6658> <34D0> <34D1> <665B> <34D4> <34D5> <6662> <34D8> <34DC> <6669> <34DD> <34DF> <6671> <34E1> <34E2> <6678> <34E3> <34E5> <667B> <34E6> <34E8> <667F> <34EA> <34EB> <6685> <34EC> <34ED> <668A> <34EE> <34F1> <668D> <34F2> <34F5> <6692> <34F6> <34FA> <6698> <34FB> <34FE> <669E> <3500> <3502> <66A4> <3503> <3504> <66A9> <3505> <3506> <66AC> <3507> <350B> <66AF> <350C> <350F> <66B5> <3510> <3513> <66BA> <3514> <3518> <66BF> <351B> <3526> <66CA> <3527> <3528> <66D7> <352A> <352B> <66DE> <352C> <3530> <66E1> <3531> <3532> <66E7> <3533> <3534> <66EA> <3535> <3537> <66ED> <3539> <353A> <66F5> <353B> <353C> <66FA> <353E> <353F> <6701> <3540> <3543> <6704> <3545> <3546> <670E> <3547> <3549> <6711> <354B> <354D> <6718> <3550> <3555> <6720> <3559> <355A> <6732> <355B> <355E> <6736> <355F> <3560> <673B> <3561> <3562> <673E> <3564> <3565> <6744> <3567> <3568> <674A> <356B> <356C> <6754> <356D> <3571> <6757> <3573> <3575> <6762> <3576> <3577> <6766> <3578> <3579> <676B> <357D> <3580> <6778> <3583> <3584> <6782> <3585> <3586> <6785> <3589> <358C> <678C> <358D> <3590> <6791> <3594> <3596> <679F> <359C> <359D> <67B1> <359F> <35A6> <67B9> <35A8> <35B1> <67C5> <35B2> <35B4> <67D5> <35B8> <35B9> <67E3> <35BA> <35BC> <67E6> <35BD> <35BE> <67EA> <35BF> <35C0> <67ED> <35C2> <35C9> <67F5> <35CB> <35CE> <6801> <35D3> <35D4> <6814> <35D5> <35D9> <6818> <35DA> <35DC> <681E> <35DD> <35E3> <6822> <35E4> <35EA> <682B> <35EB> <35ED> <6834> <35EE> <35EF> <683A> <35F6> <35FF> <6856> <3601> <3608> <686C> <360A> <3612> <6878> <3615> <361C> <6887> <361D> <361F> <6890> <3620> <3622> <6894> <3623> <3626> <6899> <3628> <3629> <68A0> <362A> <362C> <68A3> <362D> <3630> <68A9> <3632> <3633> <68B1> <3635> <363E> <68B6> <3640> <3645> <68C3> <3648> <364B> <68CE> <364C> <364D> <68D3> <364F> <3652> <68DB> <3653> <3654> <68E1> <3655> <3657> <68E4> <3658> <365D> <68E8> <365F> <3661> <68F2> <3662> <3664> <68F6> <3666> <3669> <68FD> <366A> <366C> <6902> <366D> <3671> <6906> <3674> <367F> <6913> <3680> <3682> <6921> <3683> <368A> <6925> <368B> <368C> <692E> endbfrange 100 beginbfrange <368D> <368F> <6931> <3690> <3693> <6935> <3694> <3696> <693A> <3698> <3699> <6940> <369A> <36A0> <6943> <36A1> <36A8> <694B> <36A9> <36AA> <6955> <36AB> <36AC> <6958> <36AD> <36AE> <695B> <36B0> <36B1> <6961> <36B2> <36B3> <6964> <36B5> <36B6> <6969> <36B8> <36B9> <696F> <36BA> <36BC> <6972> <36BE> <36BF> <697A> <36C0> <36C2> <697D> <36C6> <36C8> <698A> <36C9> <36CE> <698E> <36CF> <36D0> <6996> <36D1> <36D2> <6999> <36D3> <36DC> <699D> <36DF> <36E0> <69AF> <36E1> <36E2> <69B2> <36E3> <36E4> <69B5> <36E5> <36E7> <69B8> <36E8> <36EA> <69BC> <36EC> <36F3> <69C2> <36F5> <36F7> <69D1> <36F8> <36FD> <69D5> <36FE> <36FF> <69DC> <3701> <3706> <69E1> <3707> <370B> <69E8> <370C> <370F> <69EE> <3710> <3718> <69F4> <371B> <371C> <6A03> <371D> <3720> <6A06> <3721> <3728> <6A0B> <3729> <372B> <6A14> <372C> <372F> <6A1A> <3732> <3735> <6A24> <3737> <373A> <6A2B> <373C> <373E> <6A32> <373F> <3740> <6A36> <3741> <3742> <6A3B> <3743> <3747> <6A3F> <3748> <3749> <6A45> <374A> <374B> <6A49> <374C> <374F> <6A4C> <3750> <3756> <6A51> <3758> <375A> <6A5C> <375C> <375D> <6A63> <375E> <3768> <6A66> <3769> <376F> <6A72> <3770> <3771> <6A7A> <3772> <3774> <6A7D> <3775> <3777> <6A81> <3778> <377B> <6A85> <377C> <377F> <6A8A> <3781> <3782> <6A92> <3783> <3784> <6A95> <3785> <3788> <6A98> <3789> <378B> <6A9D> <378D> <3791> <6AA4> <3793> <3794> <6AAD> <3795> <3797> <6AB0> <3798> <379B> <6AB4> <379C> <379D> <6AB9> <379E> <37A4> <6ABC> <37A5> <37B3> <6AC4> <37B4> <37B9> <6AD4> <37BB> <37C1> <6AE0> <37C4> <37C9> <6AED> <37CA> <37CD> <6AF4> <37CE> <37CF> <6AF9> <37D0> <37D7> <6AFC> <37D8> <37DC> <6B05> <37DD> <37E0> <6B0B> <37E1> <37E2> <6B10> <37E3> <37E5> <6B13> <37E6> <37EC> <6B17> <37EE> <37EF> <6B25> <37F0> <37F9> <6B28> <37FA> <37FD> <6B33> <3801> <3804> <6B3F> <3805> <3806> <6B44> <3808> <3809> <6B4A> <380A> <380C> <6B4D> <380D> <3814> <6B51> <3815> <3819> <6B5A> <381B> <381C> <6B68> <381D> <3823> <6B6B> <3824> <3827> <6B73> <3829> <382C> <6B7D> <3830> <3833> <6B8E> <3834> <3835> <6B94> <3838> <3839> <6B9C> <383A> <383B> <6B9F> <383C> <383D> <6BA2> <383E> <3842> <6BA5> <3843> <3844> <6BAC> endbfrange 100 beginbfrange <3845> <3846> <6BB0> <3848> <3849> <6BB8> <384A> <384C> <6BBC> <384E> <384F> <6BC3> <3850> <3853> <6BC7> <3856> <3857> <6BD0> <385A> <385E> <6BDC> <385F> <3866> <6BE2> <3867> <3869> <6BEC> <386A> <386C> <6BF0> <386E> <3870> <6BF6> <3871> <3873> <6BFA> <3875> <3879> <6C00> <387A> <387C> <6C09> <3880> <3882> <6C1C> <3888> <3889> <6C36> <388A> <388D> <6C39> <388E> <388F> <6C3E> <3890> <3892> <6C43> <3894> <3898> <6C4B> <3899> <389B> <6C51> <389D> <389F> <6C58> <38A0> <38A1> <6C62> <38A2> <38A4> <6C65> <38A5> <38A9> <6C6B> <38AD> <38AE> <6C77> <38AF> <38B1> <6C7A> <38B2> <38B3> <6C7F> <38B6> <38B7> <6C8A> <38B8> <38B9> <6C8D> <38BA> <38BB> <6C91> <38BC> <38BF> <6C95> <38C1> <38C3> <6C9C> <38C8> <38C9> <6CAF> <38CA> <38CD> <6CB4> <38CF> <38D2> <6CC0> <38D3> <38D5> <6CC6> <38D7> <38D9> <6CCD> <38DA> <38DB> <6CD1> <38DC> <38DE> <6CD8> <38DF> <38E0> <6CDC> <38E3> <38E4> <6CE6> <38E6> <38E7> <6CEC> <38EB> <38EC> <6CFF> <38ED> <38EE> <6D02> <38EF> <38F0> <6D05> <38F1> <38F3> <6D08> <38F5> <38F7> <6D0F> <38F8> <38FB> <6D13> <38FD> <38FE> <6D1C> <3900> <3904> <6D20> <3906> <3907> <6D28> <3908> <3909> <6D2C> <390A> <390B> <6D2F> <390D> <390F> <6D36> <3911> <3912> <6D3F> <3918> <391B> <6D55> <391F> <3920> <6D61> <3921> <3922> <6D64> <3923> <3924> <6D67> <3925> <3927> <6D6B> <3928> <392B> <6D70> <392C> <392D> <6D75> <392E> <392F> <6D7A> <3930> <3934> <6D7D> <3935> <3936> <6D83> <3938> <3939> <6D8A> <393B> <393C> <6D8F> <393E> <3942> <6D96> <3946> <3947> <6DAC> <3948> <3949> <6DB0> <394A> <394B> <6DB3> <394C> <394D> <6DB6> <394E> <3953> <6DB9> <3954> <3956> <6DC1> <3957> <3959> <6DC8> <395A> <395D> <6DCD> <395E> <3961> <6DD2> <3963> <3965> <6DDA> <3967> <3968> <6DE2> <396A> <396C> <6DE7> <396E> <396F> <6DEF> <3973> <397A> <6DFD> <397B> <397E> <6E06> <3981> <3982> <6E12> <3984> <3985> <6E18> <3986> <3987> <6E1B> <3988> <3989> <6E1E> <398B> <398C> <6E27> <398F> <3990> <6E30> <3992> <3994> <6E35> <3996> <3998> <6E3B> <3999> <399C> <6E3F> <399D> <39A4> <6E45> <39A5> <39A8> <6E4F> <39AB> <39AC> <6E59> <39AD> <39AE> <6E5C> <39AF> <39B9> <6E60> <39BA> <39BB> <6E6C> <39BC> <39C9> <6E70> endbfrange 100 beginbfrange <39CA> <39CC> <6E80> <39CE> <39CF> <6E87> <39D0> <39D4> <6E8A> <39D5> <39D9> <6E91> <39DB> <39DD> <6E99> <39DF> <39E0> <6EA0> <39E1> <39E2> <6EA3> <39E4> <39E5> <6EA8> <39E6> <39E9> <6EAB> <39ED> <39EE> <6EB8> <39F0> <39F2> <6EBE> <39F5> <39F7> <6EC8> <39FC> <39FD> <6ED8> <39FE> <39FF> <6EDB> <3A03> <3A04> <6EEA> <3A05> <3A06> <6EED> <3A07> <3A08> <6EF0> <3A0A> <3A0B> <6EF5> <3A0C> <3A10> <6EFA> <3A12> <3A14> <6F03> <3A15> <3A16> <6F07> <3A17> <3A1B> <6F0A> <3A1C> <3A1E> <6F10> <3A1F> <3A22> <6F16> <3A23> <3A27> <6F1B> <3A29> <3A2C> <6F25> <3A2F> <3A30> <6F34> <3A32> <3A36> <6F39> <3A38> <3A3B> <6F42> <3A3C> <3A3E> <6F48> <3A40> <3A42> <6F4E> <3A43> <3A44> <6F52> <3A45> <3A47> <6F55> <3A48> <3A49> <6F5A> <3A4B> <3A4D> <6F5F> <3A50> <3A55> <6F67> <3A58> <3A59> <6F75> <3A5C> <3A5D> <6F7D> <3A5E> <3A60> <6F81> <3A62> <3A63> <6F8A> <3A64> <3A6B> <6F8F> <3A6C> <3A6F> <6F98> <3A70> <3A72> <6F9D> <3A73> <3A74> <6FA2> <3A75> <3A76> <6FA5> <3A78> <3A7B> <6FAA> <3A7C> <3A7D> <6FAF> <3A7F> <3A80> <6FB4> <3A81> <3A82> <6FB7> <3A83> <3A88> <6FBA> <3A89> <3A8D> <6FC4> <3A8E> <3A94> <6FCA> <3A95> <3A96> <6FD3> <3A97> <3A98> <6FD6> <3A99> <3A9A> <6FD9> <3A9B> <3A9C> <6FDC> <3A9D> <3A9E> <6FE2> <3A9F> <3AA4> <6FE5> <3AA5> <3AA6> <6FEC> <3AA7> <3AAE> <6FF2> <3AB1> <3AB6> <6FFF> <3AB7> <3AB8> <7007> <3ABA> <3ABC> <700C> <3ABE> <3AC0> <7012> <3AC1> <3AC2> <7016> <3AC6> <3AC7> <7021> <3AC8> <3ACA> <7024> <3ACB> <3AD1> <7029> <3AD3> <3AD4> <7033> <3AD5> <3AD7> <7036> <3AD8> <3ADB> <703A> <3ADC> <3ADF> <703F> <3AE0> <3AE6> <7045> <3AE7> <3AE8> <704D> <3AEA> <3AEC> <7052> <3AED> <3AEE> <7056> <3AEF> <3AF2> <7059> <3AF3> <3AF6> <705F> <3AF7> <3AF8> <7065> <3AF9> <3AFB> <7068> <3AFD> <3AFF> <7071> <3B02> <3B04> <7079> <3B06> <3B09> <7081> <3B0A> <3B0C> <7086> <3B0D> <3B0F> <708B> <3B10> <3B12> <708F> <3B14> <3B15> <7097> <3B16> <3B17> <709A> <3B18> <3B24> <709E> <3B27> <3B29> <70B4> <3B2B> <3B2C> <70BE> <3B2D> <3B30> <70C4> <3B32> <3B35> <70CB> <3B36> <3B3D> <70D0> <3B3F> <3B41> <70DC> <3B42> <3B45> <70E0> <3B49> <3B4C> <70F0> <3B4D> <3B4E> <70F5> <3B50> <3B52> <70FA> <3B53> <3B5D> <70FE> endbfrange 100 beginbfrange <3B5E> <3B62> <710B> <3B63> <3B64> <7111> <3B67> <3B6C> <711B> <3B6D> <3B70> <7122> <3B71> <3B78> <7127> <3B79> <3B7C> <7132> <3B7D> <3B8A> <7137> <3B8B> <3B8D> <7146> <3B90> <3B92> <714F> <3B93> <3B9B> <7153> <3B9D> <3B9F> <715F> <3BA2> <3BA3> <716A> <3BA5> <3BA7> <716F> <3BA8> <3BAB> <7174> <3BAD> <3BAE> <717B> <3BAF> <3BB4> <717E> <3BB5> <3BB9> <7185> <3BBA> <3BBD> <718B> <3BBE> <3BBF> <7190> <3BC1> <3BC2> <7195> <3BC3> <3BC7> <719A> <3BC8> <3BCE> <71A1> <3BCF> <3BD1> <71A9> <3BD2> <3BD5> <71AD> <3BD8> <3BDA> <71B6> <3BDB> <3BDE> <71BA> <3BDF> <3BE0> <71BF> <3BE2> <3BE5> <71C4> <3BE6> <3BEA> <71C9> <3BEB> <3BED> <71CF> <3BEF> <3BF1> <71D6> <3BF2> <3BF3> <71DA> <3BF4> <3BF5> <71DD> <3BF6> <3BF9> <71E1> <3BFA> <3BFE> <71E8> <3C00> <3C03> <71F0> <3C04> <3C07> <71F5> <3C08> <3C09> <71FA> <3C0B> <3C11> <71FF> <3C12> <3C17> <7207> <3C18> <3C19> <720E> <3C1A> <3C23> <7211> <3C25> <3C2E> <721E> <3C31> <3C33> <722D> <3C34> <3C35> <7233> <3C37> <3C3D> <7240> <3C3E> <3C40> <7249> <3C41> <3C44> <724E> <3C45> <3C47> <7253> <3C4D> <3C4F> <7263> <3C51> <3C54> <726A> <3C55> <3C56> <7270> <3C57> <3C58> <7273> <3C59> <3C5B> <7276> <3C5C> <3C5D> <727B> <3C5E> <3C5F> <7282> <3C60> <3C64> <7285> <3C67> <3C68> <7290> <3C69> <3C6B> <7293> <3C6C> <3C73> <7297> <3C74> <3C75> <72A0> <3C76> <3C79> <72A3> <3C7A> <3C7D> <72A8> <3C7F> <3C81> <72B1> <3C83> <3C88> <72BA> <3C89> <3C8B> <72C5> <3C8C> <3C8F> <72C9> <3C92> <3C95> <72D3> <3C97> <3C9A> <72DA> <3C9C> <3CA1> <72E2> <3CA2> <3CA3> <72EA> <3CA4> <3CA5> <72F5> <3CA6> <3CA8> <72FE> <3CAA> <3CAF> <7304> <3CB0> <3CB2> <730B> <3CB3> <3CB6> <730F> <3CB8> <3CBA> <7318> <3CBB> <3CBC> <731F> <3CBD> <3CBE> <7323> <3CBF> <3CC1> <7326> <3CC3> <3CC4> <732F> <3CC5> <3CC6> <7332> <3CC9> <3CCA> <733C> <3CCC> <3CCD> <7342> <3CCE> <3CD4> <7346> <3CD5> <3CD6> <734E> <3CD8> <3CDB> <7353> <3CDC> <3CE3> <7358> <3CE4> <3CEA> <7361> <3CEE> <3CEF> <7373> <3CF4> <3CF6> <7381> <3CF7> <3CF8> <7385> <3CFB> <3CFC> <738C> <3CFD> <3CFE> <738F> <3D00> <3D02> <7393> <3D03> <3D06> <7397> <3D07> <3D09> <739C> <3D0A> <3D0B> <73A0> <3D0C> <3D11> <73A3> <3D13> <3D14> <73AC> endbfrange 100 beginbfrange <3D16> <3D18> <73B4> <3D19> <3D1A> <73B8> <3D1B> <3D1E> <73BC> <3D20> <3D24> <73C3> <3D25> <3D26> <73CB> <3D28> <3D2E> <73D2> <3D2F> <3D32> <73DA> <3D34> <3D37> <73E1> <3D3A> <3D3C> <73EA> <3D3D> <3D40> <73EE> <3D41> <3D4B> <73F3> <3D4C> <3D4F> <73FF> <3D51> <3D52> <7407> <3D53> <3D56> <740B> <3D57> <3D5F> <7411> <3D60> <3D65> <741C> <3D66> <3D67> <7423> <3D6D> <3D6E> <7431> <3D6F> <3D73> <7437> <3D74> <3D75> <743D> <3D77> <3D7F> <7442> <3D80> <3D88> <744C> <3D8C> <3D8E> <7460> <3D8F> <3D93> <7464> <3D94> <3D95> <746B> <3D96> <3D97> <746E> <3D98> <3D9C> <7471> <3D9D> <3DA2> <7478> <3DA5> <3DA7> <7484> <3DAA> <3DAB> <748C> <3DAD> <3DB7> <7491> <3DB9> <3DBC> <749F> <3DBD> <3DBE> <74A4> <3DBF> <3DC4> <74AA> <3DC5> <3DCD> <74B1> <3DCE> <3DCF> <74BB> <3DD0> <3DDB> <74BE> <3DDC> <3DDF> <74CB> <3DE0> <3DE1> <74D0> <3DE3> <3DE7> <74D5> <3DED> <3DF3> <74E7> <3DF4> <3DF7> <74F0> <3DF9> <3DFF> <74F8> <3E00> <3E03> <7500> <3E04> <3E0A> <7505> <3E0E> <3E11> <7514> <3E13> <3E14> <751D> <3E15> <3E17> <7520> <3E19> <3E1A> <7526> <3E20> <3E21> <753C> <3E23> <3E26> <7541> <3E27> <3E28> <7546> <3E29> <3E2A> <7549> <3E2C> <3E2F> <7550> <3E30> <3E33> <7555> <3E34> <3E37> <755E> <3E38> <3E39> <7563> <3E3A> <3E3C> <7567> <3E3D> <3E42> <756C> <3E46> <3E4A> <757A> <3E4B> <3E4D> <7580> <3E4E> <3E4F> <7584> <3E50> <3E52> <7588> <3E53> <3E55> <758C> <3E5A> <3E5B> <759B> <3E5E> <3E62> <75A6> <3E64> <3E65> <75B6> <3E66> <3E67> <75BA> <3E68> <3E6A> <75BF> <3E6C> <3E6D> <75CB> <3E6E> <3E71> <75CE> <3E75> <3E76> <75DC> <3E77> <3E79> <75DF> <3E7C> <3E7F> <75EC> <3E80> <3E81> <75F2> <3E82> <3E85> <75F5> <3E86> <3E87> <75FA> <3E88> <3E89> <75FD> <3E8B> <3E8E> <7606> <3E8F> <3E90> <760E> <3E91> <3E94> <7611> <3E97> <3E98> <761C> <3E9C> <3E9D> <762E> <3E9E> <3E9F> <7631> <3EA0> <3EA1> <7636> <3EA2> <3EA3> <7639> <3EA6> <3EA7> <7644> <3EA9> <3EAA> <764A> <3EAB> <3EB0> <764E> <3EB3> <3EB5> <7659> <3EB7> <3EB8> <7660> <3EBC> <3EC0> <7673> <3EC1> <3EC2> <7679> <3EC3> <3EC5> <767F> <3EC8> <3EC9> <7689> <3ECA> <3ECB> <768C> <3ECC> <3ECD> <768F> <3ECF> <3ED0> <7694> <3ED1> <3ED2> <7697> <3ED3> <3EDB> <769B> endbfrange 100 beginbfrange <3EDC> <3EE4> <76A5> <3EE5> <3EE6> <76AF> <3EE8> <3EEA> <76B5> <3EEC> <3EEF> <76BB> <3EF0> <3EF1> <76C0> <3EF2> <3EF3> <76C3> <3EF6> <3EF7> <76CB> <3EFA> <3EFB> <76D9> <3EFC> <3EFD> <76DC> <3F01> <3F06> <76E8> <3F09> <3F0B> <76F5> <3F0C> <3F0D> <76FA> <3F0F> <3F10> <76FF> <3F11> <3F12> <7702> <3F13> <3F14> <7705> <3F17> <3F21> <770E> <3F22> <3F25> <771B> <3F27> <3F29> <7723> <3F2B> <3F2D> <772A> <3F2F> <3F33> <7730> <3F36> <3F38> <773D> <3F3A> <3F3C> <7744> <3F3D> <3F43> <7748> <3F44> <3F4B> <7752> <3F4C> <3F4D> <775C> <3F4E> <3F4F> <775F> <3F52> <3F53> <7769> <3F54> <3F5F> <776D> <3F60> <3F62> <777A> <3F63> <3F65> <7781> <3F66> <3F6B> <7786> <3F6C> <3F6D> <778F> <3F6E> <3F72> <7793> <3F73> <3F77> <7799> <3F79> <3F7A> <77A3> <3F7E> <3F7F> <77AE> <3F80> <3F81> <77B1> <3F83> <3F87> <77B6> <3F89> <3F8F> <77C0> <3F90> <3F94> <77C8> <3F95> <3F9D> <77CE> <3F9E> <3F9F> <77D8> <3FA0> <3FA4> <77DD> <3FA9> <3FAB> <77F0> <3FAC> <3FAD> <77F4> <3FAF> <3FB2> <77F9> <3FB3> <3FB8> <7803> <3FB9> <3FBA> <780A> <3FBB> <3FBD> <780E> <3FC3> <3FC5> <7820> <3FC8> <3FC9> <782A> <3FCA> <3FCB> <782E> <3FCC> <3FCE> <7831> <3FCF> <3FD0> <7835> <3FD3> <3FD4> <7841> <3FD7> <3FDA> <7848> <3FDE> <3FDF> <7853> <3FE0> <3FE4> <7858> <3FE5> <3FEA> <785E> <3FEB> <3FED> <7865> <3FEF> <3FF5> <7870> <3FF6> <3FF9> <7878> <3FFA> <3FFF> <787D> <4000> <4003> <7883> <4005> <4006> <788A> <4007> <4008> <788F> <400A> <400C> <7894> <400E> <400F> <789D> <4015> <4017> <78AA> <4018> <4019> <78AE> <401A> <401C> <78B5> <401F> <4020> <78BF> <4021> <4023> <78C2> <4024> <4026> <78C6> <4027> <402A> <78CC> <402B> <402D> <78D1> <402E> <4030> <78D6> <4031> <4038> <78DB> <4039> <403B> <78E4> <403C> <403E> <78E9> <403F> <4040> <78ED> <4041> <4042> <78F0> <4044> <4045> <78F5> <4046> <4047> <78F8> <4048> <4049> <78FB> <404A> <404C> <78FE> <404D> <404F> <7902> <4050> <4057> <7906> <4058> <405B> <790F> <405C> <4060> <7914> <4061> <4064> <791A> <4065> <4069> <791F> <406B> <406D> <7927> <406E> <4071> <792D> <4072> <4073> <7932> <4074> <4078> <7935> <407B> <407E> <7942> <4080> <4088> <794A> <4089> <408A> <7954> <408B> <408C> <7958> endbfrange 100 beginbfrange <408E> <408F> <7963> <4091> <4094> <7969> <4096> <409C> <7970> <409E> <40A2> <797B> <40A3> <40A4> <7982> <40A5> <40A8> <7986> <40A9> <40AA> <798B> <40AB> <40B4> <7990> <40B5> <40BF> <799B> <40C0> <40C1> <79A8> <40C2> <40C4> <79AB> <40C7> <40CB> <79B4> <40CF> <40D0> <79C4> <40D1> <40D2> <79C7> <40D5> <40D7> <79CE> <40D8> <40D9> <79D3> <40DA> <40DB> <79D6> <40DC> <40E1> <79D9> <40E2> <40E4> <79E0> <40EA> <40F0> <79F1> <40F1> <40F2> <79F9> <40F4> <40F5> <79FE> <40F7> <40F8> <7A04> <40F9> <40FC> <7A07> <40FE> <40FF> <7A0F> <4100> <4102> <7A11> <4103> <4104> <7A15> <4105> <4106> <7A18> <4107> <4109> <7A1B> <410B> <410C> <7A21> <410D> <4116> <7A24> <4117> <4118> <7A2F> <411A> <411C> <7A34> <4120> <4124> <7A41> <4125> <4129> <7A47> <412A> <412B> <7A4F> <412C> <4130> <7A52> <4131> <4139> <7A58> <413A> <413F> <7A63> <4141> <4144> <7A6C> <4145> <4147> <7A71> <4149> <414C> <7A7B> <4150> <4153> <7A89> <4154> <4156> <7A8E> <4157> <4158> <7A93> <4159> <415B> <7A99> <415D> <4160> <7AA1> <4163> <4166> <7AAF> <4167> <4168> <7AB4> <4169> <416B> <7AB7> <416C> <416F> <7ABB> <4170> <4173> <7AC0> <4176> <417F> <7ACC> <4180> <4181> <7AD7> <4182> <4185> <7ADA> <4186> <4187> <7AE1> <4189> <418B> <7AE7> <418C> <418D> <7AEB> <418F> <4194> <7AF0> <4195> <4196> <7AF7> <4197> <4198> <7AFB> <419A> <419C> <7B00> <41A0> <41A2> <7B0C> <41A4> <41A5> <7B12> <41A6> <41A8> <7B16> <41AA> <41AB> <7B1C> <41AD> <41AF> <7B21> <41B3> <41B4> <7B2F> <41B6> <41B9> <7B34> <41BD> <41C2> <7B3F> <41C5> <41C6> <7B4D> <41CC> <41CD> <7B5E> <41CF> <41D2> <7B63> <41D3> <41D8> <7B68> <41D9> <41DA> <7B6F> <41DB> <41DC> <7B73> <41E0> <41E1> <7B7C> <41E3> <41E6> <7B81> <41E7> <41EB> <7B86> <41ED> <41EE> <7B8E> <41EF> <41F1> <7B91> <41F3> <41F6> <7B98> <41F7> <41F9> <7B9E> <41FA> <41FC> <7BA3> <41FD> <41FF> <7BAE> <4200> <4201> <7BB2> <4202> <4204> <7BB5> <4205> <420B> <7BB9> <420C> <420D> <7BC2> <4211> <4214> <7BCD> <4216> <421A> <7BD4> <421B> <421C> <7BDB> <421D> <421F> <7BDE> <4220> <4221> <7BE2> <4222> <4223> <7BE7> <4224> <4226> <7BEB> <4227> <4228> <7BEF> <422A> <422C> <7BF4> <422D> <4230> <7BF8> <4233> <4238> <7C01> endbfrange 100 beginbfrange <4239> <423B> <7C08> <423D> <4242> <7C10> <4243> <4249> <7C17> <424C> <424D> <7C24> <424E> <424F> <7C28> <4250> <425B> <7C2C> <425C> <425F> <7C39> <4261> <4268> <7C44> <4269> <4276> <7C4E> <4277> <4278> <7C5D> <4279> <427B> <7C61> <427C> <427F> <7C65> <4282> <4284> <7C6F> <4285> <428A> <7C75> <428B> <4295> <7C7E> <4296> <429C> <7C8A> <429D> <429E> <7C93> <42A0> <42A2> <7C99> <42A3> <42A4> <7CA0> <42A6> <42A9> <7CA6> <42AA> <42AC> <7CAB> <42AD> <42AE> <7CAF> <42AF> <42B3> <7CB4> <42B4> <42B5> <7CBA> <42B6> <42B7> <7CBF> <42B8> <42BA> <7CC2> <42BE> <42C4> <7CCE> <42C6> <42C7> <7CDA> <42C8> <42CD> <7CE1> <42CE> <42D3> <7CE9> <42D9> <42DA> <7CFC> <42DF> <42E0> <7D0E> <42E1> <42E2> <7D11> <42E5> <42E7> <7D1D> <42E8> <42EB> <7D23> <42EC> <42EE> <7D28> <42EF> <42F1> <7D2C> <42F2> <42F6> <7D34> <42F8> <42F9> <7D3D> <42FD> <42FF> <7D47> <4300> <4303> <7D4A> <4305> <4310> <7D51> <4311> <4312> <7D5F> <4313> <4315> <7D63> <4317> <431B> <7D69> <431C> <431D> <7D6F> <431E> <431F> <7D74> <4321> <4327> <7D7A> <4329> <432A> <7D84> <432C> <4330> <7D8A> <4331> <4333> <7D90> <4334> <433B> <7D94> <433D> <433F> <7D9F> <4340> <4341> <7DA4> <4342> <4345> <7DA7> <4347> <4349> <7DB5> <434B> <434E> <7DC0> <434F> <4350> <7DC5> <4351> <4352> <7DC8> <4353> <4357> <7DCC> <4359> <435A> <7DD5> <435B> <435D> <7DDA> <4360> <4361> <7DE4> <4363> <4364> <7DEA> <4365> <4366> <7DED> <436A> <436B> <7DF7> <436D> <4378> <7DFC> <4379> <437C> <7E0C> <437D> <4385> <7E12> <4387> <4389> <7E20> <438A> <438C> <7E24> <438D> <438F> <7E28> <4391> <4392> <7E2F> <4397> <4398> <7E3F> <4399> <439B> <7E42> <439C> <43A5> <7E48> <43A7> <43AA> <7E56> <43AB> <43AD> <7E5B> <43AE> <43B0> <7E5F> <43B1> <43B6> <7E63> <43B8> <43B9> <7E71> <43BA> <43BE> <7E74> <43BF> <43C0> <7E7A> <43C1> <43C3> <7E7F> <43C4> <43C8> <7E83> <43CC> <43CE> <7E90> <43D1> <43D2> <7E99> <43D3> <43D4> <7E9D> <43D7> <43D8> <7EBB> <43E2> <43E8> <7F3B> <43EA> <43EF> <7F46> <43F2> <43F3> <7F52> <43F6> <43F9> <7F5B> <43FB> <43FF> <7F63> <4400> <4402> <7F6B> <4405> <4406> <7F75> <4408> <440B> <7F7A> <440C> <440D> <7F7F> <440E> <4410> <7F82> <4415> <4419> <7F8F> endbfrange 100 beginbfrange <441A> <441E> <7F95> <441F> <4420> <7F9B> <4422> <4423> <7FA2> <4426> <442A> <7FAA> <442C> <4430> <7FB3> <4431> <4432> <7FBA> <4435> <4437> <7FC2> <4438> <443B> <7FC6> <443E> <4440> <7FCF> <4442> <4443> <7FD6> <4444> <4449> <7FD9> <444A> <444C> <7FE2> <444D> <444E> <7FE7> <444F> <4452> <7FEA> <4455> <4459> <7FF4> <445B> <445D> <7FFD> <445F> <4462> <8007> <4463> <4464> <800E> <4467> <4468> <801A> <4469> <446B> <801D> <446D> <446E> <8023> <4471> <4472> <802F> <4475> <4476> <8039> <4479> <447A> <8040> <447B> <447C> <8044> <447D> <447F> <8047> <4480> <4483> <804E> <4488> <448A> <805B> <448B> <4494> <805F> <4495> <4498> <806B> <449B> <449D> <807A> <449E> <449F> <8081> <44A2> <44A7> <808D> <44A8> <44A9> <8094> <44AE> <44B0> <80A6> <44B4> <44B5> <80B5> <44B6> <44B7> <80B8> <44BA> <44BE> <80C7> <44BF> <44C5> <80CF> <44C7> <44C8> <80DF> <44C9> <44CA> <80E2> <44D1> <44D4> <80FE> <44D5> <44D6> <8103> <44D7> <44D8> <8107> <44D9> <44DA> <810B> <44DE> <44DF> <811C> <44E0> <44EC> <811F> <44ED> <44EE> <812D> <44F0> <44F2> <8133> <44F4> <44F7> <813A> <44F8> <44FE> <813F> <4504> <4505> <8157> <4506> <450A> <815B> <450B> <450D> <8162> <4512> <4513> <8172> <4514> <4516> <8175> <4518> <451C> <8183> <451E> <4521> <818B> <4523> <4528> <8192> <452A> <452B> <819E> <452C> <452D> <81A1> <452E> <452F> <81A4> <4531> <4538> <81AB> <4539> <453E> <81B4> <4540> <4541> <81C4> <4542> <4543> <81C7> <4546> <454D> <81D0> <454F> <4552> <81DB> <4553> <4554> <81E1> <4555> <4557> <81E4> <455A> <455E> <81EE> <455F> <4563> <81F5> <4568> <4569> <820E> <456C> <4571> <8215> <4574> <4577> <8224> <457C> <457D> <823C> <457E> <4582> <823F> <4583> <4584> <8245> <4587> <4589> <824C> <458A> <4591> <8250> <4592> <4595> <825B> <4596> <4599> <8260> <459C> <459D> <8269> <459E> <459F> <826C> <45A0> <45A1> <8275> <45A3> <45A4> <827B> <45A5> <45A6> <8280> <45A8> <45AA> <8285> <45AE> <45B1> <8293> <45B2> <45B3> <829A> <45B6> <45B7> <82A2> <45BA> <45BB> <82B5> <45BE> <45BF> <82BF> <45C0> <45C1> <82C2> <45C2> <45C3> <82C5> <45C7> <45C8> <82D9> <45CB> <45CD> <82E8> <45CE> <45D0> <82EC> <45D2> <45D3> <82F2> <45D4> <45D5> <82F5> endbfrange 100 beginbfrange <45D8> <45DC> <82FC> <45DD> <45DE> <830A> <45E1> <45E2> <8312> <45E4> <45E5> <8318> <45E6> <45EF> <831D> <45F0> <45F1> <8329> <45F7> <45F9> <833D> <45FA> <45FB> <8341> <45FC> <45FD> <8344> <4600> <4603> <834B> <4605> <4609> <8355> <460C> <4612> <8370> <4613> <4614> <8379> <4615> <461B> <837E> <461C> <461D> <8387> <461E> <4620> <838B> <4621> <4623> <838F> <4624> <4625> <8394> <4627> <4628> <8399> <462C> <462F> <83A3> <4630> <4633> <83AC> <4636> <4637> <83BE> <4638> <463A> <83C2> <463C> <463D> <83C8> <463F> <4640> <83CD> <4641> <4644> <83D0> <4647> <4649> <83D9> <464B> <464D> <83E2> <464E> <4650> <83E6> <4651> <4654> <83EB> <4655> <4659> <83F3> <465A> <465C> <83FA> <465D> <465F> <83FE> <4662> <4663> <8408> <4665> <466A> <8412> <466B> <466D> <8419> <466E> <4673> <841E> <4674> <4676> <8429> <4677> <467A> <842D> <467B> <467D> <8432> <467E> <467F> <8436> <4680> <4682> <8439> <4683> <468A> <843E> <468B> <468C> <8447> <468D> <4693> <844A> <4694> <4697> <8453> <4699> <469C> <845D> <469F> <46A0> <8467> <46A7> <46AD> <847B> <46AE> <46B1> <8483> <46B4> <46B7> <848F> <46B8> <46B9> <8495> <46BB> <46BC> <849A> <46BD> <46C0> <849D> <46C1> <46CD> <84A2> <46CE> <46CF> <84B0> <46D1> <46D3> <84B5> <46D6> <46D7> <84C2> <46D8> <46DB> <84C5> <46DD> <46DE> <84CE> <46E0> <46E1> <84D4> <46E2> <46E7> <84D7> <46E9> <46EA> <84E1> <46EC> <46F0> <84E7> <46F2> <46FC> <84F1> <46FE> <46FF> <8500> <4700> <4709> <8502> <470A> <470D> <850D> <470F> <4710> <8515> <4711> <4712> <8518> <4713> <4715> <851B> <4718> <4719> <8524> <471A> <471D> <8527> <471E> <4726> <852E> <4727> <4729> <853E> <472B> <472C> <8544> <472E> <4730> <854B> <4731> <4733> <854F> <4736> <4739> <855A> <473A> <473C> <855F> <473E> <4740> <8565> <4741> <4742> <856B> <4743> <4746> <856E> <4748> <4749> <8575> <474B> <474C> <857C> <474D> <4751> <857F> <4755> <4756> <858D> <4758> <4759> <8592> <475A> <475F> <8595> <4760> <4761> <859D> <4762> <4765> <85A0> <4768> <476A> <85AB> <476B> <4770> <85B1> <4772> <4777> <85BB> <4778> <477E> <85C2> <477F> <4781> <85CA> <4782> <4783> <85D1> <4785> <478A> <85D6> <478B> <4790> <85DE> <4791> <4793> <85E6> endbfrange 100 beginbfrange <4794> <479C> <85EB> <479E> <479F> <85F7> <47A0> <47A2> <85FC> <47A3> <47A6> <8600> <47A7> <47A9> <8608> <47AA> <47AE> <860C> <47AF> <47B2> <8612> <47B3> <47B5> <8617> <47B6> <47B8> <861B> <47B9> <47BB> <861F> <47BC> <47BF> <8623> <47C1> <47C3> <862A> <47C4> <47CD> <862E> <47D0> <47D1> <863D> <47D2> <47DE> <8640> <47DF> <47E0> <8652> <47E1> <47E4> <8656> <47E7> <47E8> <8660> <47E9> <47EC> <8663> <47ED> <47EF> <8668> <47F1> <47F2> <866F> <47F3> <47F9> <8672> <47FA> <47FF> <8683> <4801> <4805> <868E> <4807> <480C> <8696> <480D> <4811> <869E> <4812> <4813> <86A5> <4815> <4816> <86AD> <4817> <4818> <86B2> <4819> <481B> <86B7> <481C> <4820> <86BB> <4821> <4823> <86C1> <4826> <4827> <86CC> <4828> <4829> <86D2> <482A> <482C> <86D5> <482E> <482F> <86DC> <4830> <4833> <86E0> <4834> <4837> <86E5> <4838> <483A> <86EA> <483C> <483E> <86F5> <483F> <4841> <86FB> <4844> <4845> <8704> <4846> <4847> <870B> <4848> <484B> <870E> <4851> <4852> <871F> <4854> <4856> <8726> <4857> <485A> <872A> <485B> <485C> <872F> <485D> <485E> <8732> <485F> <4860> <8735> <4861> <4863> <8738> <4864> <4865> <873C> <4866> <486C> <8740> <486D> <486E> <874A> <4870> <4873> <874F> <4877> <487C> <875A> <487D> <487E> <8761> <487F> <4885> <8767> <4887> <4889> <8771> <488C> <488D> <8779> <488E> <4890> <877F> <4891> <4892> <8786> <4893> <4894> <8789> <4896> <489A> <878E> <489B> <489D> <8794> <489E> <48A3> <8798> <48A4> <48A5> <87A0> <48A6> <48AA> <87A3> <48AB> <48AC> <87A9> <48AE> <48B0> <87B0> <48B2> <48B5> <87B6> <48B7> <48B8> <87BE> <48B9> <48BB> <87C1> <48BF> <48C0> <87CC> <48C1> <48C2> <87CF> <48C3> <48C9> <87D4> <48CA> <48CD> <87DC> <48CE> <48CF> <87E1> <48D1> <48D4> <87E6> <48D7> <48D8> <87F0> <48D9> <48DB> <87F3> <48DC> <48DD> <87F7> <48DF> <48E0> <87FC> <48E1> <48E4> <87FF> <48E6> <48E8> <8807> <48E9> <48ED> <880B> <48F0> <48F3> <8817> <48F4> <48F6> <881C> <48F8> <48FF> <8824> <4900> <4904> <882C> <4905> <4907> <8833> <4908> <4909> <8837> <490B> <490D> <883D> <490E> <4910> <8841> <4911> <4913> <8847> <4915> <4919> <884E> <491A> <491B> <8855> <491F> <4921> <885E> <4922> <4923> <8866> <4928> <492B> <8873> endbfrange 100 beginbfrange <492D> <492F> <887A> <4932> <4933> <8886> <4934> <4935> <8889> <4937> <493A> <888E> <493B> <493D> <8893> <493E> <4942> <8897> <4943> <4947> <889D> <4949> <494E> <88A5> <4950> <4952> <88AE> <4953> <4957> <88B2> <4958> <495B> <88B8> <495C> <495F> <88BD> <4960> <4961> <88C3> <4962> <4963> <88C7> <4964> <4966> <88CB> <4967> <4968> <88D0> <496A> <496B> <88D6> <496C> <496D> <88DA> <496F> <4970> <88E0> <4971> <4972> <88E6> <4973> <4979> <88E9> <497B> <497D> <88F5> <497E> <497F> <88FA> <4980> <4982> <88FF> <4982> <4983> <5656> <4983> <4986> <8903> <4985> <4986> <5658> <4987> <4988> <8908> <4989> <498D> <890B> <498F> <4993> <8914> <4994> <4998> <891C> <4999> <499B> <8922> <499C> <499F> <8926> <49A0> <49A3> <892C> <49A7> <49A8> <8939> <49A9> <49AD> <893C> <49AE> <49AF> <8942> <49B0> <49B1> <8945> <49B2> <49BF> <8948> <49C0> <49C5> <8957> <49C6> <49C8> <8961> <49CA> <49CC> <8967> <49CE> <49CF> <896D> <49D0> <49D1> <8970> <49D2> <49D9> <8973> <49DA> <49DC> <897C> <49DF> <49E0> <8984> <49E1> <49E4> <8987> <49E5> <49E7> <898C> <49E8> <49EA> <8990> <49EB> <49EC> <8994> <49EE> <49F5> <8999> <49F6> <49F9> <89A2> <49FA> <49FC> <89A7> <49FE> <49FF> <89AD> <4A00> <4A01> <89B0> <4A02> <4A05> <89B3> <4A06> <4A07> <89B8> <4A08> <4A09> <89BB> <4A0D> <4A0F> <89D3> <4A10> <4A12> <89D7> <4A15> <4A18> <89DF> <4A1A> <4A1D> <89E7> <4A1E> <4A20> <89EC> <4A21> <4A23> <89F0> <4A26> <4A2C> <89F9> <4A2D> <4A2F> <8A04> <4A34> <4A35> <8A11> <4A38> <4A39> <8A19> <4A3C> <4A3E> <8A20> <4A40> <4A43> <8A26> <4A44> <4A45> <8A2B> <4A46> <4A48> <8A2E> <4A49> <4A4A> <8A32> <4A4C> <4A4E> <8A37> <4A4F> <4A51> <8A3B> <4A52> <4A53> <8A3F> <4A54> <4A57> <8A42> <4A59> <4A5D> <8A49> <4A61> <4A62> <8A56> <4A63> <4A64> <8A59> <4A65> <4A66> <8A5C> <4A67> <4A68> <8A5F> <4A69> <4A6A> <8A64> <4A6B> <4A6C> <8A67> <4A70> <4A72> <8A76> <4A73> <4A74> <8A7A> <4A75> <4A76> <8A7D> <4A77> <4A7A> <8A80> <4A7C> <4A7D> <8A8B> <4A7E> <4A80> <8A8E> <4A82> <4A83> <8A96> <4A85> <4A87> <8A9B> <4A8B> <4A8D> <8AA9> <4A8E> <4A90> <8AAD> <4A92> <4A94> <8AB3> <4A95> <4A96> <8AB7> <4A97> <4A98> <8ABA> <4A99> <4A9A> <8ABD> <4A9B> <4A9C> <8AC0> endbfrange 100 beginbfrange <4A9E> <4A9F> <8AC5> <4AA5> <4AA7> <8AD3> <4AA8> <4AAA> <8AD8> <4AAC> <4AAE> <8ADF> <4AB1> <4AB3> <8AE8> <4AB5> <4AB6> <8AEF> <4AB8> <4AB9> <8AF4> <4AC0> <4AC1> <8B08> <4AC2> <4AC4> <8B0B> <4AC6> <4AC8> <8B11> <4ACC> <4ACE> <8B1E> <4ACF> <4AD2> <8B22> <4AD4> <4AD5> <8B29> <4AD6> <4ADA> <8B2E> <4ADB> <4ADF> <8B34> <4AE0> <4AE3> <8B3A> <4AE4> <4AED> <8B3F> <4AEE> <4AF1> <8B4A> <4AF2> <4AF7> <8B50> <4AFA> <4AFF> <8B5D> <4B00> <4B02> <8B63> <4B03> <4B06> <8B67> <4B07> <4B08> <8B6D> <4B09> <4B0B> <8B71> <4B0C> <4B0D> <8B75> <4B0E> <4B12> <8B78> <4B13> <4B14> <8B7E> <4B15> <4B1D> <8B81> <4B1E> <4B20> <8B8B> <4B21> <4B23> <8B8F> <4B25> <4B29> <8B97> <4B34> <4B3C> <8C38> <4B3D> <4B40> <8C42> <4B41> <4B42> <8C4A> <4B43> <4B45> <8C4D> <4B46> <4B49> <8C51> <4B4A> <4B4D> <8C56> <4B4E> <4B53> <8C5B> <4B54> <4B5A> <8C63> <4B5B> <4B61> <8C6C> <4B62> <4B65> <8C74> <4B66> <4B6C> <8C7B> <4B6D> <4B6E> <8C83> <4B6F> <4B71> <8C86> <4B73> <4B79> <8C8D> <4B7A> <4B7C> <8C95> <4B7D> <4B80> <8C99> <4B82> <4B85> <8CA3> <4B86> <4B87> <8CAD> <4B8E> <4B93> <8CCB> <4B95> <4B98> <8CD6> <4B9D> <4B9E> <8CE8> <4B9F> <4BA4> <8CEE> <4BA5> <4BA9> <8CF5> <4BAA> <4BAE> <8CFF> <4BAF> <4BB0> <8D06> <4BB4> <4BB8> <8D11> <4BB9> <4BBC> <8D17> <4BBE> <4BBF> <8D51> <4BC3> <4BC5> <8D68> <4BC7> <4BC8> <8D6E> <4BC9> <4BCA> <8D71> <4BCB> <4BD3> <8D78> <4BD4> <4BD5> <8D82> <4BD6> <4BD9> <8D86> <4BDA> <4BDE> <8D8C> <4BDF> <4BE0> <8D92> <4BE1> <4BE3> <8D96> <4BE4> <4BE8> <8D9A> <4BE9> <4BEB> <8DA0> <4BEC> <4BEF> <8DA4> <4BF0> <4BF7> <8DA9> <4BF8> <4BF9> <8DB6> <4BFD> <4BFF> <8DC0> <4C01> <4C04> <8DC7> <4C07> <4C0A> <8DD2> <4C0B> <4C0C> <8DD8> <4C0E> <4C10> <8DE0> <4C11> <4C13> <8DE5> <4C15> <4C16> <8DED> <4C17> <4C19> <8DF0> <4C1D> <4C23> <8DFE> <4C24> <4C26> <8E06> <4C28> <4C29> <8E0D> <4C2A> <4C2C> <8E11> <4C2D> <4C34> <8E15> <4C35> <4C36> <8E20> <4C37> <4C3B> <8E24> <4C3F> <4C40> <8E32> <4C41> <4C43> <8E36> <4C44> <4C45> <8E3B> <4C46> <4C47> <8E3E> <4C49> <4C4A> <8E45> <4C4B> <4C4E> <8E4D> <4C4F> <4C50> <8E53> <4C51> <4C53> <8E56> <4C54> <4C5C> <8E5A> <4C5D> <4C5E> <8E64> <4C5F> <4C60> <8E67> <4C61> <4C62> <8E6A> endbfrange 100 beginbfrange <4C67> <4C69> <8E77> <4C6B> <4C6C> <8E7D> <4C6E> <4C70> <8E82> <4C75> <4C79> <8E95> <4C7C> <4C7D> <8E9F> <4C7E> <4C80> <8EA2> <4C81> <4C83> <8EA7> <4C84> <4C85> <8EAD> <4C86> <4C87> <8EB0> <4C88> <4C8E> <8EB3> <4C8F> <4C93> <8EBB> <4C94> <4C9C> <8EC1> <4C9D> <4C9F> <8ECF> <4C9F> <4CA0> <5661> <4CA1> <4CA6> <8ED5> <4CA7> <4CA9> <8EDC> <4CAA> <4CAD> <8EE0> <4CAE> <4CB3> <8EE5> <4CB4> <4CB9> <8EEC> <4CBA> <4CBE> <8EF3> <4CC0> <4CC3> <8EFF> <4CC7> <4CCD> <8F0B> <4CCF> <4CD3> <8F16> <4CD4> <4CD8> <8F20> <4CD9> <4CDA> <8F27> <4CDB> <4CDE> <8F2B> <4CDF> <4CE1> <8F30> <4CE2> <4CE5> <8F34> <4CE6> <4CE7> <8F39> <4CE8> <4CE9> <8F3C> <4CEA> <4CEB> <8F40> <4CED> <4CEE> <8F47> <4CEF> <4CF1> <8F4A> <4CF2> <4CF6> <8F4F> <4CF7> <4CFF> <8F55> <4D09> <4D0B> <8FA0> <4D0C> <4D0D> <8FA4> <4D11> <4D13> <8FB3> <4D13> <4D14> <5666> <4D14> <4D15> <8FB7> <4D15> <4D16> <5668> <4D16> <4D18> <8FBA> <4D17> <4D19> <566A> <4D19> <4D1A> <8FBF> <4D1D> <4D21> <8FC9> <4D24> <4D25> <8FD6> <4D27> <4D28> <8FE0> <4D2D> <4D2E> <8FF1> <4D2F> <4D30> <8FF5> <4D31> <4D33> <8FFA> <4D34> <4D35> <8FFE> <4D36> <4D37> <9007> <4D3D> <4D3E> <9024> <4D3F> <4D44> <9027> <4D45> <4D46> <9030> <4D47> <4D48> <9033> <4D4A> <4D4B> <9039> <4D4D> <4D4E> <903F> <4D50> <4D51> <9045> <4D52> <4D54> <9048> <4D57> <4D58> <9059> <4D5D> <4D5E> <9066> <4D5F> <4D61> <906A> <4D62> <4D64> <906F> <4D6A> <4D6B> <9085> <4D6D> <4D6F> <908C> <4D76> <4D78> <909E> <4D79> <4D7A> <90A4> <4D7B> <4D7D> <90A7> <4D82> <4D83> <90BC> <4D84> <4D85> <90BF> <4D86> <4D87> <90C2> <4D89> <4D8A> <90C8> <4D8B> <4D8D> <90CB> <4D8F> <4D91> <90D4> <4D92> <4D94> <90D8> <4D97> <4D99> <90E3> <4D9A> <4D9B> <90E9> <4D9E> <4DA1> <90F0> <4DA2> <4DA3> <90F6> <4DA4> <4DA7> <90F9> <4DA8> <4DAA> <90FF> <4DAD> <4DAE> <9107> <4DAF> <4DB6> <910A> <4DB9> <4DBA> <9117> <4DBB> <4DBE> <911A> <4DBF> <4DC1> <911F> <4DC2> <4DC4> <9124> <4DC5> <4DC9> <9128> <4DCD> <4DCE> <9137> <4DCF> <4DD6> <913B> <4DD7> <4DD8> <9144> <4DDB> <4DDE> <9153> <4DDF> <4DE0> <9158> <4DE1> <4DE2> <915B> <4DE3> <4DE4> <915F> <4DE5> <4DE7> <9166> <4DEB> <4DED> <917A> <4DEE> <4DF2> <9180> <4DF6> <4DF7> <918E> endbfrange 100 beginbfrange <4DF8> <4DFA> <9193> <4DFB> <4DFD> <9197> <4DFE> <4DFF> <919D> <4E00> <4E02> <919F> <4E03> <4E08> <91A4> <4E09> <4E0C> <91B0> <4E0D> <4E10> <91B6> <4E11> <4E15> <91BB> <4E1C> <4E1D> <91DA> <4E1E> <4E22> <91DE> <4E23> <4E24> <91E5> <4E26> <4E30> <91EA> <4E33> <4E37> <91FB> <4E38> <4E39> <9202> <4E3A> <4E3C> <9205> <4E3D> <4E3F> <920A> <4E41> <4E42> <9212> <4E43> <4E4A> <9216> <4E4B> <4E4E> <921F> <4E50> <4E55> <9228> <4E57> <4E58> <9231> <4E59> <4E5A> <9235> <4E5B> <4E5C> <923B> <4E5D> <4E60> <9241> <4E61> <4E62> <9246> <4E63> <4E65> <924A> <4E66> <4E68> <924E> <4E69> <4E6B> <9252> <4E6D> <4E6E> <9258> <4E6F> <4E70> <925C> <4E71> <4E73> <925F> <4E74> <4E76> <9263> <4E77> <4E7B> <9267> <4E7C> <4E81> <926E> <4E82> <4E84> <9275> <4E86> <4E88> <927C> <4E89> <4E8A> <9281> <4E8C> <4E93> <9286> <4E94> <4E95> <928F> <4E97> <4E98> <9294> <4E9C> <4E9E> <929D> <4E9F> <4EA0> <92A1> <4EA4> <4EA5> <92AF> <4EA6> <4EAA> <92B2> <4EAD> <4EB0> <92BD> <4EB4> <4EB6> <92C9> <4EB7> <4EB8> <92CD> <4EB9> <4EBA> <92D0> <4EBB> <4EC4> <92D3> <4EC6> <4EC8> <92E0> <4ECB> <4ECC> <92EB> <4ECD> <4ED0> <92F2> <4ED2> <4ED4> <92F9> <4ED5> <4ED8> <92FD> <4ED9> <4EDC> <9302> <4EDD> <4EE3> <9309> <4EE5> <4EE6> <9313> <4EE7> <4EE8> <9316> <4EE9> <4EEB> <931C> <4EED> <4EEF> <9323> <4EF1> <4EF2> <9329> <4EF3> <4EF4> <932C> <4EF5> <4EF6> <9330> <4EF7> <4EF8> <9334> <4EFA> <4EFE> <9339> <4F01> <4F02> <9344> <4F03> <4F05> <9348> <4F07> <4F0C> <934E> <4F0D> <4F0F> <9355> <4F10> <4F11> <9359> <4F12> <4F19> <935C> <4F1A> <4F1C> <9366> <4F1E> <4F20> <936D> <4F21> <4F24> <9371> <4F25> <4F27> <9377> <4F28> <4F2A> <937B> <4F2B> <4F2D> <937F> <4F2F> <4F30> <9385> <4F31> <4F32> <9388> <4F33> <4F36> <938B> <4F37> <4F3C> <9390> <4F3E> <4F46> <9399> <4F47> <4F48> <93A4> <4F4D> <4F4E> <93B1> <4F50> <4F51> <93B6> <4F52> <4F57> <93B9> <4F58> <4F5A> <93C0> <4F5B> <4F5D> <93C4> <4F60> <4F62> <93CE> <4F63> <4F66> <93D2> <4F67> <4F69> <93D9> <4F6C> <4F6E> <93E5> <4F6F> <4F7A> <93E9> <4F7D> <4F85> <93FA> <4F86> <4F8C> <9404> <4F8D> <4F90> <940C> <4F92> <4F94> <9415> <4F95> <4F97> <941A> <4F98> <4F99> <941E> <4F9A> <4F9E> <9421> endbfrange 100 beginbfrange <4F9F> <4FA3> <9429> <4FA4> <4FA6> <942F> <4FA8> <4FA9> <9436> <4FAB> <4FAD> <943B> <4FAE> <4FB1> <9440> <4FB2> <4FB6> <9445> <4FB8> <4FBC> <944D> <4FBE> <4FC8> <9455> <4FC9> <4FCA> <9461> <4FCC> <4FD0> <9466> <4FD2> <4FD3> <946E> <4FD5> <4FD8> <9473> <4FDA> <4FDB> <947A> <4FDC> <4FE0> <9480> <4FE6> <4FE7> <94D3> <4FF7> <4FF8> <9574> <4FF9> <4FFF> <9578> <5001> <5002> <9584> <5003> <5004> <9587> <5009> <500B> <9595> <500C> <5013> <9599> <5015> <5016> <95A6> <5018> <501B> <95AE> <501C> <501E> <95B3> <501F> <5020> <95B7> <5022> <5024> <95C0> <5025> <5026> <95C4> <5029> <502B> <95CD> <502C> <502E> <95D1> <502F> <5033> <95D7> <5035> <5036> <95DF> <5037> <5038> <95E3> <5039> <503A> <95E6> <5043> <5049> <9623> <504A> <504C> <962B> <504D> <504E> <962F> <504F> <5052> <9637> <5057> <5058> <964E> <5059> <505B> <9651> <505C> <505D> <9656> <505E> <505F> <9659> <5063> <5064> <9665> <5066> <5068> <966D> <506A> <506D> <9679> <506E> <5074> <967E> <5078> <507A> <9691> <507D> <5086> <969D> <5088> <508C> <96AB> <5092> <5093> <96C2> <5095> <5096> <96CA> <5097> <5098> <96D0> <5099> <509A> <96D3> <509B> <509C> <96D7> <509E> <50A0> <96DD> <50A2> <50A5> <96E4> <50A6> <50A9> <96EB> <50AA> <50AB> <96F0> <50AC> <50AD> <96F4> <50B0> <50B1> <96FC> <50B3> <50B4> <9702> <50B6> <50B8> <970A> <50B9> <50BB> <9710> <50BC> <50BD> <9714> <50BE> <50C2> <9717> <50C4> <50CB> <971F> <50CC> <50CD> <9728> <50CE> <50CF> <972B> <50D0> <50D1> <972E> <50D3> <50D7> <9733> <50D8> <50DA> <973A> <50DB> <50DD> <973F> <50DF> <50E1> <9745> <50E2> <50EA> <9749> <50EB> <50EC> <9754> <50ED> <50EE> <9757> <50EF> <50F0> <975C> <50F2> <50F3> <9763> <50F4> <50F5> <9766> <50F6> <50FE> <976A> <5100> <5104> <9777> <5105> <510C> <977D> <510D> <5111> <9786> <5116> <5118> <9795> <5119> <511F> <9799> <5120> <5121> <97A1> <5122> <5123> <97A4> <5124> <5127> <97A7> <512A> <512B> <97B0> <512D> <5134> <97B5> <5135> <5139> <97BE> <513A> <513B> <97C4> <513C> <513D> <97C7> <513F> <5144> <97CD> <5145> <5149> <97D4> <514A> <514B> <97DA> <514D> <5153> <97DF> <5155> <5159> <97EE> <515B> <5162> <97F7> <5168> <516A> <9814> <516B> <516D> <9819> endbfrange 100 beginbfrange <516E> <5171> <981D> <5172> <5173> <9822> <5175> <517A> <9827> <517B> <517C> <982E> <517D> <5182> <9831> <5183> <5184> <9839> <5186> <518D> <983E> <518E> <5192> <9847> <5193> <5196> <984F> <5197> <5199> <9855> <519B> <519C> <985C> <519D> <519F> <985F> <51A0> <51A1> <9863> <51A3> <51A5> <9868> <51A6> <51A7> <986D> <51AF> <51B3> <98A9> <51B6> <51B7> <98B4> <51B8> <51BC> <98B7> <51BD> <51C3> <98BD> <51C6> <51CA> <98C9> <51CB> <51CC> <98CF> <51CE> <51CF> <98D6> <51D0> <51D1> <98DC> <51D3> <51D6> <98E3> <51D9> <51DA> <98F0> <51DC> <51E2> <98F5> <51E3> <51E6> <98FF> <51E8> <51EA> <9906> <51EC> <51ED> <990E> <51EE> <51F1> <9914> <51F2> <51F3> <9919> <51F4> <51F5> <991C> <51F6> <51F7> <991F> <51F8> <51FD> <9922> <51FE> <51FF> <9929> <5200> <5202> <992B> <5203> <5206> <992F> <5207> <5209> <9934> <520A> <520D> <9938> <520F> <5211> <9940> <5213> <5214> <9946> <5215> <5218> <994D> <521B> <521E> <9958> <5220> <5222> <995F> <5226> <5227> <9978> <522A> <522B> <9982> <522F> <5239> <999A> <523A> <523B> <99A6> <523C> <523E> <99A9> <523F> <5240> <99AF> <5242> <524D> <99B5> <524E> <525B> <99C2> <525D> <525E> <99D6> <5263> <526C> <99E3> <526D> <526F> <99EE> <5270> <527C> <99F2> <527E> <5280> <9A02> <5281> <5287> <9A06> <5288> <528D> <9A10> <528E> <528F> <9A17> <5290> <52A0> <9A1A> <52A3> <52A7> <9A31> <52A8> <52AC> <9A39> <52AE> <52B1> <9A46> <52B2> <52B3> <9A4B> <52B5> <52B9> <9A50> <52BB> <52BC> <9A58> <52BD> <52BF> <9A5C> <52C0> <52C1> <9A60> <52C3> <52C6> <9A66> <52CB> <52CC> <9A8D> <52CD> <52CE> <9A94> <52D1> <52D6> <9AA9> <52D7> <52DA> <9AB2> <52DD> <52DF> <9ABD> <52E0> <52E1> <9AC3> <52E2> <52E6> <9AC6> <52E7> <52E8> <9ACD> <52EB> <52F0> <9AD9> <52F2> <52F5> <9AE2> <52F6> <52F9> <9AE7> <52FB> <52FF> <9AF0> <5300> <5303> <9AF5> <5305> <530B> <9AFC> <530C> <530D> <9B04> <530F> <5312> <9B09> <5314> <5316> <9B10> <5317> <531C> <9B14> <531D> <5320> <9B1B> <5321> <5322> <9B20> <5326> <5329> <9B2A> <532B> <5332> <9B33> <5333> <5336> <9B3D> <5338> <533A> <9B4A> <533C> <533D> <9B52> <533E> <5340> <9B55> <5342> <5355> <9B5B> <5356> <5359> <9B70> <535A> <535B> <9B75> <535C> <5364> <9B78> endbfrange 100 beginbfrange <5366> <536F> <9B84> <5371> <5377> <9B93> <5378> <5379> <9B9B> <537A> <5384> <9B9F> <5386> <5396> <9BAF> <5397> <539B> <9BC2> <539D> <53A5> <9BCB> <53A7> <53AA> <9BD7> <53AC> <53AE> <9BDE> <53B0> <53B1> <9BE5> <53B3> <53B6> <9BEC> <53B7> <53B9> <9BF1> <53BA> <53C1> <9BF5> <53C3> <53CA> <9C00> <53CB> <53CD> <9C0A> <53CE> <53CF> <9C0E> <53D1> <53DC> <9C14> <53DD> <53DE> <9C21> <53E0> <53E1> <9C26> <53E2> <53E4> <9C2A> <53E5> <53E7> <9C2E> <53EC> <53ED> <9C3C> <53EE> <53F3> <9C3F> <53F4> <53F5> <9C46> <53F6> <53FD> <9C4A> <5400> <5403> <9C59> <5405> <540B> <9C60> <540C> <5410> <9C68> <5411> <541A> <9C6E> <541D> <541E> <9C7D> <5420> <5421> <9C83> <5422> <5423> <9C89> <5427> <542A> <9C96> <5430> <5434> <9CBE> <5435> <5436> <9CC8> <5437> <5438> <9CD1> <5439> <543A> <9CDA> <543B> <543C> <9CE0> <543D> <543E> <9CE3> <543F> <5441> <9CE6> <5442> <5443> <9CEA> <5444> <5449> <9CED> <544B> <5459> <9CF7> <545B> <5465> <9D0A> <5466> <546A> <9D16> <546D> <546F> <9D20> <5470> <5471> <9D24> <5473> <5478> <9D29> <5479> <5482> <9D31> <5483> <5485> <9D3C> <5486> <5487> <9D40> <5488> <5495> <9D43> <5496> <549D> <9D54> <549E> <549F> <9D5E> <54A0> <54A7> <9D62> <54A9> <54AA> <9D6D> <54AB> <54AC> <9D70> <54AD> <54C0> <9D73> <54C2> <54CA> <9D8A> <54CB> <54CE> <9D94> <54D0> <54D9> <9D9B> <54DA> <54DC> <9DA6> <54DD> <54E1> <9DAA> <54E2> <54E5> <9DB0> <54E6> <54EB> <9DB5> <54EC> <54EE> <9DBD> <54F1> <54FE> <9DC5> <5500> <5501> <9DD5> <5503> <550C> <9DDB> <550D> <5514> <9DE7> <5515> <5516> <9DF0> <5517> <551A> <9DF4> <551B> <552B> <9DFB> <552C> <5533> <9E0D> <5534> <5537> <9E16> <553E> <553F> <9E3B> <5543> <5545> <9E52> <5549> <554C> <9E5F> <554E> <554F> <9E6E> <5552> <5554> <9E76> <5556> <5557> <9E80> <5558> <555B> <9E83> <555C> <555D> <9E89> <555E> <5563> <9E8C> <5564> <5566> <9E94> <5567> <556B> <9E98> <556D> <5571> <9EA0> <5572> <5573> <9EA7> <5574> <5578> <9EAA> <5579> <557C> <9EB0> <557D> <557E> <9EB6> <557F> <5580> <9EB9> <5582> <5586> <9EBF> <5587> <558A> <9EC5> <558B> <558C> <9ECA> <558E> <558F> <9ED2> <5590> <5592> <9ED5> <5593> <5594> <9ED9> <5596> <5597> <9EE3> <5599> <559C> <9EEB> endbfrange 100 beginbfrange <559D> <559E> <9EF0> <55A0> <55A1> <9EF5> <55A4> <55AC> <9F00> <55B0> <55B1> <9F11> <55B5> <55BA> <9F1A> <55BC> <55C4> <9F23> <55C5> <55C6> <9F2D> <55C7> <55CD> <9F30> <55D1> <55D5> <9F3F> <55D6> <55DA> <9F45> <55DB> <55DD> <9F4C> <55DF> <55E2> <9F55> <55E3> <55E4> <9F5A> <55E5> <55E6> <9F5D> <55E8> <55E9> <9F64> <55EA> <55EC> <9F67> <55EE> <55F2> <9F6D> <55F3> <55F6> <9F73> <55F7> <55FD> <9F78> <55FE> <55FF> <9F81> <5600> <5601> <9F8E> <5602> <5604> <9F91> <5605> <5607> <9F96> <5608> <5609> <9F9D> <560A> <560E> <9FA1> <5610> <5612> <5614> <5615> <5617> <5619> <561A> <561B> <561C> <561E> <561F> <566E> <566F> <56CD> <0020> <56D2> <56FF> <0021> <5700> <572F> <004F> <576B> <576C> <30F5> <5776> <5779> <30F7> <577B> <577D> <3033> <577E> <5780> <3038> <5781> <5783> <312A> <5784> <579B> <31A0> <579D> <579E> <2E82> <579F> <57A1> <2E85> <57A2> <57A3> <2E89> <57A4> <57AD> <2E8D> <57AE> <57AF> <2E98> <57B0> <57BB> <2E9B> <57BC> <57BD> <2EA8> <57BE> <57C0> <2EAB> <57C1> <57C4> <2EAF> <57C5> <57C6> <2EB4> <57C7> <57C9> <2EB8> <57CA> <57D7> <2EBC> <57D8> <57FF> <2ECB> <5801> <5847> <3400> <5848> <5872> <3448> <5873> <58FF> <3474> <5900> <599C> <3501> <599D> <59FF> <359F> <5A00> <5A0B> <3602> <5A0C> <5A16> <360F> <5A17> <5AFF> <361B> <5B00> <5BFF> <3704> <5C00> <5CFF> <3804> <5D00> <5D13> <3904> <5D14> <5D68> <3919> <5D69> <5DC8> <396F> <5DC9> <5DD6> <39D1> <5DD7> <5DFF> <39E0> <5E00> <5E69> <3A09> <5E6A> <5EFF> <3A74> <5F00> <5F43> <3B0A> <5F44> <5FFF> <3B4F> <6000> <6062> <3C0B> <6063> <60D3> <3C6F> <60D4> <60FF> <3CE1> <6100> <61FF> <3D0D> <6200> <62FF> <3E0D> <6300> <63FF> <3F0D> <6400> <6448> <400D> <6449> <64FF> <4057> <6500> <6550> <410E> <6551> <65FF> <4160> <6600> <66FF> <420F> <6700> <6727> <430F> <6728> <679B> <4338> <679C> <679F> <43AD> <67A0> <67CA> <43B2> <67CB> <67FF> <43DE> <6800> <68C2> <4413> <68C3> <68FF> <44D7> <6900> <69FF> <4514> <6A00> <6A37> <4614> <6A38> <6A4B> <464D> <6A4C> <6AFF> <4662> <6B00> <6B0C> <4716> <6B0D> <6B11> <4724> <6B12> <6B63> <472A> <6B64> <6B73> <477D> <6B74> <6BFF> <478E> <6C00> <6CFF> <481A> endbfrange 16 beginbfrange <6D00> <6D2C> <491A> <6D2D> <6D5E> <4948> <6D5F> <6D60> <497B> <6D61> <6D64> <497E> <6D66> <6D79> <4987> <6D7A> <6D7C> <499C> <6D7D> <6D92> <49A0> <6D93> <6DFF> <49B8> <6E00> <6EFF> <4A25> <6F00> <6FFF> <4B25> <7000> <7051> <4C25> <7052> <7078> <4C78> <7079> <70E7> <4CA4> <70E8> <70FF> <4D1A> <7100> <717B> <4D32> <717C> <7182> <4DAF> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-Japan1-0 b/Resources/cmap/Adobe-Japan1-0 deleted file mode 100644 index 16b7be8a139..00000000000 --- a/Resources/cmap/Adobe-Japan1-0 +++ /dev/null @@ -1,95 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Identity) -%%Title: (Identity Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /Adobe-Japan1-0 def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 480 def -/XUID [1 10 25358] def - -/WMode 0 def - -/CIDCount 8284 def - -1 begincodespacerange - <0000> <20FF> -endcodespacerange - -33 begincidrange -<0000> <00ff> 0 -<0100> <01ff> 256 -<0200> <02ff> 512 -<0300> <03ff> 768 -<0400> <04ff> 1024 -<0500> <05ff> 1280 -<0600> <06ff> 1536 -<0700> <07ff> 1792 -<0800> <08ff> 2048 -<0900> <09ff> 2304 -<0a00> <0aff> 2560 -<0b00> <0bff> 2816 -<0c00> <0cff> 3072 -<0d00> <0dff> 3328 -<0e00> <0eff> 3584 -<0f00> <0fff> 3840 -<1000> <10ff> 4096 -<1100> <11ff> 4352 -<1200> <12ff> 4608 -<1300> <13ff> 4864 -<1400> <14ff> 5120 -<1500> <15ff> 5376 -<1600> <16ff> 5632 -<1700> <17ff> 5888 -<1800> <18ff> 6144 -<1900> <19ff> 6400 -<1a00> <1aff> 6656 -<1b00> <1bff> 6912 -<1c00> <1cff> 7168 -<1d00> <1dff> 7424 -<1e00> <1eff> 7680 -<1f00> <1fff> 7936 -<2000> <205b> 8192 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-1 b/Resources/cmap/Adobe-Japan1-1 deleted file mode 100644 index a47ad7a82e5..00000000000 --- a/Resources/cmap/Adobe-Japan1-1 +++ /dev/null @@ -1,95 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Identity) -%%Title: (Identity Adobe Japan1 1) -%%Version: 5.008 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 1 def -end def - -/CMapName /Adobe-Japan1-1 def -/CMapVersion 5.008 def -/CMapType 1 def - -/UIDOffset 480 def -/XUID [1 10 25358] def - -/WMode 0 def - -/CIDCount 8359 def - -1 begincodespacerange - <0000> <20FF> -endcodespacerange - -33 begincidrange -<0000> <00ff> 0 -<0100> <01ff> 256 -<0200> <02ff> 512 -<0300> <03ff> 768 -<0400> <04ff> 1024 -<0500> <05ff> 1280 -<0600> <06ff> 1536 -<0700> <07ff> 1792 -<0800> <08ff> 2048 -<0900> <09ff> 2304 -<0a00> <0aff> 2560 -<0b00> <0bff> 2816 -<0c00> <0cff> 3072 -<0d00> <0dff> 3328 -<0e00> <0eff> 3584 -<0f00> <0fff> 3840 -<1000> <10ff> 4096 -<1100> <11ff> 4352 -<1200> <12ff> 4608 -<1300> <13ff> 4864 -<1400> <14ff> 5120 -<1500> <15ff> 5376 -<1600> <16ff> 5632 -<1700> <17ff> 5888 -<1800> <18ff> 6144 -<1900> <19ff> 6400 -<1a00> <1aff> 6656 -<1b00> <1bff> 6912 -<1c00> <1cff> 7168 -<1d00> <1dff> 7424 -<1e00> <1eff> 7680 -<1f00> <1fff> 7936 -<2000> <20a6> 8192 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-2 b/Resources/cmap/Adobe-Japan1-2 deleted file mode 100644 index fca913f4ee0..00000000000 --- a/Resources/cmap/Adobe-Japan1-2 +++ /dev/null @@ -1,97 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Identity) -%%Title: (Identity Adobe Japan1 2) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 2 def -end def - -/CMapName /Adobe-Japan1-2 def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 480 def -/XUID [1 10 25358] def - -/WMode 0 def - -/CIDCount 8720 def - -1 begincodespacerange - <0000> <22FF> -endcodespacerange - -35 begincidrange -<0000> <00ff> 0 -<0100> <01ff> 256 -<0200> <02ff> 512 -<0300> <03ff> 768 -<0400> <04ff> 1024 -<0500> <05ff> 1280 -<0600> <06ff> 1536 -<0700> <07ff> 1792 -<0800> <08ff> 2048 -<0900> <09ff> 2304 -<0a00> <0aff> 2560 -<0b00> <0bff> 2816 -<0c00> <0cff> 3072 -<0d00> <0dff> 3328 -<0e00> <0eff> 3584 -<0f00> <0fff> 3840 -<1000> <10ff> 4096 -<1100> <11ff> 4352 -<1200> <12ff> 4608 -<1300> <13ff> 4864 -<1400> <14ff> 5120 -<1500> <15ff> 5376 -<1600> <16ff> 5632 -<1700> <17ff> 5888 -<1800> <18ff> 6144 -<1900> <19ff> 6400 -<1a00> <1aff> 6656 -<1b00> <1bff> 6912 -<1c00> <1cff> 7168 -<1d00> <1dff> 7424 -<1e00> <1eff> 7680 -<1f00> <1fff> 7936 -<2000> <20ff> 8192 -<2100> <21ff> 8448 -<2200> <220f> 8704 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-4 b/Resources/cmap/Adobe-Japan1-4 deleted file mode 100644 index 0bae59915af..00000000000 --- a/Resources/cmap/Adobe-Japan1-4 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Identity) %%Title: (Identity Adobe Japan1 4) %%Version: 1.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 4 def end def /CMapName /Adobe-Japan1-4 def /CMapVersion 1.000 def /CMapType 1 def /XUID [1 10 25537] def /WMode 0 def /CIDCount 15444 def 1 begincodespacerange <0000> <3CFF> endcodespacerange 61 begincidrange <0000> <00ff> 0 <0100> <01ff> 256 <0200> <02ff> 512 <0300> <03ff> 768 <0400> <04ff> 1024 <0500> <05ff> 1280 <0600> <06ff> 1536 <0700> <07ff> 1792 <0800> <08ff> 2048 <0900> <09ff> 2304 <0a00> <0aff> 2560 <0b00> <0bff> 2816 <0c00> <0cff> 3072 <0d00> <0dff> 3328 <0e00> <0eff> 3584 <0f00> <0fff> 3840 <1000> <10ff> 4096 <1100> <11ff> 4352 <1200> <12ff> 4608 <1300> <13ff> 4864 <1400> <14ff> 5120 <1500> <15ff> 5376 <1600> <16ff> 5632 <1700> <17ff> 5888 <1800> <18ff> 6144 <1900> <19ff> 6400 <1a00> <1aff> 6656 <1b00> <1bff> 6912 <1c00> <1cff> 7168 <1d00> <1dff> 7424 <1e00> <1eff> 7680 <1f00> <1fff> 7936 <2000> <20ff> 8192 <2100> <21ff> 8448 <2200> <22ff> 8704 <2300> <23ff> 8960 <2400> <24ff> 9216 <2500> <25ff> 9472 <2600> <26ff> 9728 <2700> <27ff> 9984 <2800> <28ff> 10240 <2900> <29ff> 10496 <2a00> <2aff> 10752 <2b00> <2bff> 11008 <2c00> <2cff> 11264 <2d00> <2dff> 11520 <2e00> <2eff> 11776 <2f00> <2fff> 12032 <3000> <30ff> 12288 <3100> <31ff> 12544 <3200> <32ff> 12800 <3300> <33ff> 13056 <3400> <34ff> 13312 <3500> <35ff> 13568 <3600> <36ff> 13824 <3700> <37ff> 14080 <3800> <38ff> 14336 <3900> <39ff> 14592 <3a00> <3aff> 14848 <3b00> <3bff> 15104 <3c00> <3c53> 15360 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-Japan1-90ms-RKSJ b/Resources/cmap/Adobe-Japan1-90ms-RKSJ deleted file mode 100644 index a5086e7ba55..00000000000 --- a/Resources/cmap/Adobe-Japan1-90ms-RKSJ +++ /dev/null @@ -1,291 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-90ms-RKSJ) -%%Title: (Adobe-Japan1-90ms-RKSJ Adobe 90ms-RKSJ 0) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Japan1_90ms_RKSJ) def -/Supplement 0 def -end def - -/CMapName /Adobe-Japan1-90ms-RKSJ def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -% Max CID: 8719 0x220f -% Range Count: 225 -100 beginbfrange -<0000> <0000> <20> -<0001> <005f> <20> -<00e7> <00ff> <20> -<0100> <0144> <39> -<0146> <0185> -<0277> <0277> <7e> -<0279> <02b7> <8140> -<02b8> <02e4> <8180> -<02e5> <02ec> <81b8> -<02ed> <02f3> <81c8> -<02f4> <02ff> <81da> -<0300> <0302> <81e6> -<0303> <030a> <81f0> -<030b> <030b> <81fc> -<030c> <0315> <824f> -<0316> <032f> <8260> -<0330> <0349> <8281> -<034a> <039c> <829f> -<039d> <03db> <8340> -<03dc> <03f2> <8380> -<03f3> <03ff> <839f> -<0400> <040a> <83ac> -<040b> <0422> <83bf> -<0423> <0443> <8440> -<0444> <0452> <8470> -<0453> <0464> <8480> -<0465> <04c2> <889f> -<04c3> <04ff> <8940> -<0500> <0501> <897d> -<0502> <057e> <8980> -<057f> <05bd> <8a40> -<05be> <05ff> <8a80> -<0600> <063a> <8ac2> -<063b> <0679> <8b40> -<067a> <06f6> <8b80> -<06f7> <06ff> <8c40> -<0700> <0735> <8c49> -<0736> <07b2> <8c80> -<07b3> <07f1> <8d40> -<07f2> <07ff> <8d80> -<0800> <086e> <8d8e> -<086f> <08ad> <8e40> -<08ae> <08ff> <8e80> -<0900> <092a> <8ed2> -<092b> <0969> <8f40> -<096a> <09e6> <8f80> -<09e7> <09ff> <9040> -<0a00> <0a25> <9059> -<0a26> <0aa2> <9080> -<0aa3> <0ae1> <9140> -<0ae2> <0aff> <9180> -<0b00> <0b5e> <919e> -<0b5f> <0b9d> <9240> -<0b9e> <0bff> <9280> -<0c00> <0c1a> <92e2> -<0c1b> <0c59> <9340> -<0c5a> <0cd6> <9380> -<0cd7> <0cff> <9440> -<0d00> <0d15> <9469> -<0d16> <0d92> <9480> -<0d93> <0dd1> <9540> -<0dd2> <0dff> <9580> -<0e00> <0e4e> <95ae> -<0e4f> <0e8d> <9640> -<0e8e> <0eff> <9680> -<0f00> <0f0a> <96f2> -<0f0b> <0f49> <9740> -<0f4a> <0fc6> <9780> -<0fc7> <0ff9> <9840> -<0ffa> <0fff> <989f> -<1000> <1057> <98a5> -<1058> <1096> <9940> -<1097> <10ff> <9980> -<1100> <1113> <99e9> -<1114> <1152> <9a40> -<1153> <11cf> <9a80> -<11d0> <11ff> <9b40> -<1200> <120e> <9b70> -<120f> <128b> <9b80> -<128c> <12ca> <9c40> -<12cb> <12ff> <9c80> -<1300> <1347> <9cb5> -<1348> <1386> <9d40> -<1387> <13ff> <9d80> -<1400> <1403> <9df9> -<1404> <1442> <9e40> -<1443> <14bf> <9e80> -<14c0> <14fe> <9f40> -<14ff> <14ff> <9f80> -<1500> <157b> <9f81> -<157c> <15ba> -<15bb> <15ff> -<1600> <1637> -<1638> <1676> -<1677> <16f3> -<16f4> <16ff> -<1700> <1732> -<1733> <17af> -<17b0> <17ee> -<17ef> <17ff> -endbfrange -100 beginbfrange -<1800> <186b> -<186c> <18aa> -<18ab> <18ff> -<1900> <1927> -<1928> <1966> -<1967> <19e3> -<19e4> <19ff> -<1a00> <1a22> -<1a23> <1a9f> -<1aa0> <1ade> -<1adf> <1aff> -<1b00> <1b5b> -<1b5c> <1b9a> -<1b9b> <1bff> -<1c00> <1c17> -<1c18> <1c56> -<1c57> <1cd3> -<1cd4> <1cff> -<1d00> <1d12> -<1d13> <1d35> -<1d37> <1d37> <849f> -<1d38> <1d38> <84aa> -<1d39> <1d39> <84a0> -<1d3a> <1d3a> <84ab> -<1d43> <1d43> <84a1> -<1d46> <1d46> <84ac> -<1d47> <1d47> <84a2> -<1d4a> <1d4a> <84ad> -<1d4b> <1d4b> <84a4> -<1d4e> <1d4e> <84af> -<1d4f> <1d4f> <84a3> -<1d52> <1d52> <84ae> -<1d53> <1d53> <84a5> -<1d54> <1d54> <84ba> -<1d57> <1d57> <84b5> -<1d5a> <1d5a> <84b0> -<1d5b> <1d5b> <84a7> -<1d5c> <1d5c> <84bc> -<1d5f> <1d5f> <84b7> -<1d62> <1d62> <84b2> -<1d63> <1d63> <84a6> -<1d66> <1d66> <84b6> -<1d67> <1d67> <84bb> -<1d6a> <1d6a> <84b1> -<1d6b> <1d6b> <84a8> -<1d6e> <1d6e> <84b8> -<1d6f> <1d6f> <84bd> -<1d72> <1d72> <84b3> -<1d73> <1d73> <84a9> -<1d76> <1d76> <84b9> -<1d79> <1d79> <84be> -<1d82> <1d82> <84b4> -<1d83> <1da0> <8740> -<1da1> <1da2> <875f> -<1da4> <1da4> <8762> -<1da6> <1da6> <8764> -<1da8> <1da9> <8766> -<1dab> <1dac> <8769> -<1dae> <1daf> <876c> -<1db1> <1db7> <876f> -<1db8> <1dbb> <8780> -<1dbd> <1dc7> <8785> -<1dc8> <1dce> <8793> -<1dcf> <1dd0> <879b> -<1ecf> <1ed0> <8141> -<1ed1> <1ed2> <8150> -<1ed3> <1ed5> <815b> -<1ed6> <1eda> <8160> -<1edb> <1eec> <8169> -<1eed> <1eed> <8181> -<1eee> <1eee> <829f> -<1eef> <1eef> <82a1> -<1ef0> <1ef0> <82a3> -<1ef1> <1ef1> <82a5> -<1ef2> <1ef2> <82a7> -<1ef3> <1ef3> <82c1> -<1ef4> <1ef4> <82e1> -<1ef5> <1ef5> <82e3> -<1ef6> <1ef6> <82e5> -<1ef7> <1ef7> <82ec> -<1ef8> <1ef8> <8340> -<1ef9> <1ef9> <8342> -<1efa> <1efa> <8344> -<1efb> <1efb> <8346> -<1efc> <1efc> <8348> -<1efd> <1efd> <8362> -<1efe> <1efe> <8383> -<1eff> <1eff> <8385> -<1f00> <1f00> <8387> -<1f01> <1f01> <838e> -<1f02> <1f03> <8395> -<1f04> <1f05> <875f> -<1f07> <1f07> <8762> -<1f09> <1f09> <8764> -<1f0b> <1f0c> <8766> -<1f0e> <1f0f> <8769> -<1f11> <1f12> <876c> -<1f14> <1f15> <8780> -<1f45> <1f47> -<1f66> <1f66> <8761> -endbfrange -25 beginbfrange -<1f68> <1f68> <8763> -<1f6a> <1f6a> <8765> -<1f6b> <1f6b> <876b> -<1f6c> <1f6c> <8768> -<1f6f> <1f6f> <876e> -<1f77> <1f77> <8784> -<1f9c> <1fa5> -<204c> <204c> <8143> -<204e> <204e> <81ac> -<2052> <2052> <8144> -<205c> <205d> -<2083> <2083> <877e> -<2089> <2089> <8761> -<2092> <2092> <8765> -<2093> <2093> <8763> -<2098> <2098> <8768> -<209c> <209c> <876b> -<209d> <209d> <876e> -<20a7> <20e5> -<20e6> <20ff> -<2100> <2119> -<211a> <2161> -<2162> <21a0> -<21a1> <21ff> -<2200> <220d> -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-90pv-RKSJ b/Resources/cmap/Adobe-Japan1-90pv-RKSJ deleted file mode 100644 index 532f05d1e0d..00000000000 --- a/Resources/cmap/Adobe-Japan1-90pv-RKSJ +++ /dev/null @@ -1,389 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-90pv-RKSJ) -%%Title: (Adobe-Japan1-90pv Adobe Japan1 2) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Japan1_90pv_RKSJ) def -/Supplement 2 def -end def - -/CMapName /Adobe-Japan1-90pv-RKSJ def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -% Halfwidth Roman -2 beginbfrange -<00e7> <00ff> <20> -<0100> <0145> <39> -endbfrange - -% Max CID: 8358 0x20a6 -% Range Count: 315 -100 beginbfrange -<0000> <0000> <20> -<0001> <005f> <20> -<0061> <0061> <80> -<007c> <007c> -<0098> <0098> -<00e4> <00e4> -<0146> <0185> -<0279> <02b7> <8140> -<02b8> <02e4> <8180> -<02e5> <02ec> <81b8> -<02ed> <02f3> <81c8> -<02f4> <02ff> <81da> -<0300> <0302> <81e6> -<0303> <030a> <81f0> -<030b> <030b> <81fc> -<030c> <0315> <824f> -<0316> <032f> <8260> -<0330> <0349> <8281> -<034a> <039c> <829f> -<039d> <03db> <8340> -<03dc> <03f2> <8380> -<03f3> <03ff> <839f> -<0400> <040a> <83ac> -<040b> <0422> <83bf> -<0423> <0443> <8440> -<0444> <0452> <8470> -<0453> <0464> <8480> -<0465> <04c2> <889f> -<04c3> <04ff> <8940> -<0500> <0501> <897d> -<0502> <057e> <8980> -<057f> <05bd> <8a40> -<05be> <05ff> <8a80> -<0600> <063a> <8ac2> -<063b> <0679> <8b40> -<067a> <06f6> <8b80> -<06f7> <06ff> <8c40> -<0700> <0735> <8c49> -<0736> <07b2> <8c80> -<07b3> <07f1> <8d40> -<07f2> <07ff> <8d80> -<0800> <086e> <8d8e> -<086f> <08ad> <8e40> -<08ae> <08ff> <8e80> -<0900> <092a> <8ed2> -<092b> <0969> <8f40> -<096a> <09e6> <8f80> -<09e7> <09ff> <9040> -<0a00> <0a25> <9059> -<0a26> <0aa2> <9080> -<0aa3> <0ae1> <9140> -<0ae2> <0aff> <9180> -<0b00> <0b5e> <919e> -<0b5f> <0b9d> <9240> -<0b9e> <0bff> <9280> -<0c00> <0c1a> <92e2> -<0c1b> <0c59> <9340> -<0c5a> <0cd6> <9380> -<0cd7> <0cff> <9440> -<0d00> <0d15> <9469> -<0d16> <0d92> <9480> -<0d93> <0dd1> <9540> -<0dd2> <0dff> <9580> -<0e00> <0e4e> <95ae> -<0e4f> <0e8d> <9640> -<0e8e> <0eff> <9680> -<0f00> <0f0a> <96f2> -<0f0b> <0f49> <9740> -<0f4a> <0fc6> <9780> -<0fc7> <0ff9> <9840> -<0ffa> <0fff> <989f> -<1000> <1057> <98a5> -<1058> <1096> <9940> -<1097> <10ff> <9980> -<1100> <1113> <99e9> -<1114> <1152> <9a40> -<1153> <11cf> <9a80> -<11d0> <11ff> <9b40> -<1200> <120e> <9b70> -<120f> <128b> <9b80> -<128c> <12ca> <9c40> -<12cb> <12ff> <9c80> -<1300> <1347> <9cb5> -<1348> <1386> <9d40> -<1387> <13ff> <9d80> -<1400> <1403> <9df9> -<1404> <1442> <9e40> -<1443> <14bf> <9e80> -<14c0> <14fe> <9f40> -<14ff> <14ff> <9f80> -<1500> <157b> <9f81> -<157c> <15ba> -<15bb> <15ff> -<1600> <1637> -<1638> <1676> -<1677> <16f3> -<16f4> <16ff> -<1700> <1732> -<1733> <17af> -<17b0> <17ee> -endbfrange -100 beginbfrange -<17ef> <17ff> -<1800> <186b> -<186c> <18aa> -<18ab> <18ff> -<1900> <1927> -<1928> <1966> -<1967> <19e3> -<19e4> <19ff> -<1a00> <1a22> -<1a23> <1a9f> -<1aa0> <1ade> -<1adf> <1aff> -<1b00> <1b5b> -<1b5c> <1b9a> -<1b9b> <1bff> -<1c00> <1c17> -<1c18> <1c56> -<1c57> <1cd3> -<1cd4> <1cff> -<1d00> <1d12> -<1d13> <1d35> -<1d37> <1d37> <849f> -<1d38> <1d38> <84aa> -<1d39> <1d39> <84a0> -<1d3a> <1d3a> <84ab> -<1d43> <1d43> <84a1> -<1d46> <1d46> <84ac> -<1d47> <1d47> <84a2> -<1d4a> <1d4a> <84ad> -<1d4b> <1d4b> <84a4> -<1d4e> <1d4e> <84af> -<1d4f> <1d4f> <84a3> -<1d52> <1d52> <84ae> -<1d53> <1d53> <84a5> -<1d54> <1d54> <84ba> -<1d57> <1d57> <84b5> -<1d5a> <1d5a> <84b0> -<1d5b> <1d5b> <84a7> -<1d5c> <1d5c> <84bc> -<1d5f> <1d5f> <84b7> -<1d62> <1d62> <84b2> -<1d63> <1d63> <84a6> -<1d66> <1d66> <84b6> -<1d67> <1d67> <84bb> -<1d6a> <1d6a> <84b1> -<1d6b> <1d6b> <84a8> -<1d6e> <1d6e> <84b8> -<1d6f> <1d6f> <84bd> -<1d72> <1d72> <84b3> -<1d73> <1d73> <84a9> -<1d76> <1d76> <84b9> -<1d79> <1d79> <84be> -<1d82> <1d82> <84b4> -<1d83> <1d96> <8540> -<1d97> <1da0> <859f> -<1da1> <1da1> <879f> -<1da2> <1da2> <87a2> -<1da4> <1da4> <87a1> -<1da6> <1da6> <87ab> -<1da8> <1da8> <87a8> -<1da9> <1da9> <87ac> -<1dab> <1dab> <87b0> -<1dac> <1dac> <87b3> -<1dae> <1dae> <87b5> -<1daf> <1daf> <87ad> -<1db1> <1db1> <8640> -<1db2> <1db2> <8642> -<1db3> <1db3> <8648> -<1db4> <1db4> <864a> -<1db5> <1db6> <864c> -<1db7> <1db7> <8646> -<1db8> <1db9> <8854> -<1dba> <1dbc> <869b> -<1dbd> <1dc1> <8793> -<1dc2> <1dc2> <874d> -<1dc3> <1dc3> <8750> -<1dc4> <1dc4> <874b> -<1dc5> <1dc7> <87e5> -<1dc8> <1dc8> <8840> -<1dcd> <1dce> <8841> -<1ecf> <1ed0> <8141> -<1ed1> <1ed2> <8150> -<1ed3> <1ed5> <815b> -<1ed6> <1eda> <8160> -<1edb> <1eec> <8169> -<1eed> <1eed> <8181> -<1eee> <1eee> <829f> -<1eef> <1eef> <82a1> -<1ef0> <1ef0> <82a3> -<1ef1> <1ef1> <82a5> -<1ef2> <1ef2> <82a7> -<1ef3> <1ef3> <82c1> -<1ef4> <1ef4> <82e1> -<1ef5> <1ef5> <82e3> -<1ef6> <1ef6> <82e5> -<1ef7> <1ef7> <82ec> -<1ef8> <1ef8> <8340> -<1ef9> <1ef9> <8342> -<1efa> <1efa> <8344> -<1efb> <1efb> <8346> -endbfrange -100 beginbfrange -<1efc> <1efc> <8348> -<1efd> <1efd> <8362> -<1efe> <1efe> <8383> -<1eff> <1eff> <8385> -<1f00> <1f00> <8387> -<1f01> <1f01> <838e> -<1f02> <1f03> <8395> -<1f04> <1f04> <879f> -<1f05> <1f05> <87a2> -<1f07> <1f07> <87a1> -<1f09> <1f09> <87ab> -<1f0b> <1f0b> <87a8> -<1f0c> <1f0c> <87ac> -<1f0e> <1f0e> <87b0> -<1f0f> <1f0f> <87b3> -<1f11> <1f11> <87b5> -<1f12> <1f12> <87ad> -<1f16> <1f16> <8868> -<1f4b> <1f4b> <86d2> -<1f4c> <1f4c> <86d1> -<1f4d> <1f4d> <86d0> -<1f4e> <1f4e> <86cf> -<1f50> <1f51> <86a0> -<1f52> <1f52> <869f> -<1f53> <1f53> <86a2> -<1f54> <1f54> <8643> -<1f55> <1f55> <8649> -<1f56> <1f56> <8644> -<1f57> <1f57> <8647> -<1f58> <1f5e> <864f> -<1f5f> <1f61> <865a> -<1f62> <1f63> <8658> -<1f64> <1f64> <8657> -<1f65> <1f65> <864e> -<1f66> <1f66> <87a0> -<1f67> <1f67> <87a3> -<1f68> <1f69> <87a9> -<1f6a> <1f6a> <87a7> -<1f6b> <1f6b> <87b2> -<1f6c> <1f6c> <87af> -<1f6d> <1f6d> <87b1> -<1f6e> <1f6e> <87ae> -<1f6f> <1f6f> <87b4> -<1f70> <1f70> <87bd> -<1f71> <1f72> <87c0> -<1f73> <1f74> <87be> -<1f76> <1f76> <87fa> -<1f78> <1f78> <86b4> -<1f7a> <1f7a> <86b3> -<1f7d> <1f86> <8591> -<1f87> <1f9a> <855e> -<1f9c> <1fa5> <85b3> -<1fb0> <1fc9> <85db> -<1fca> <1fca> <874a> -<1fcb> <1fcc> <8756> -<1fcd> <1fcd> <874f> -<1fce> <1fce> <8758> -<1fcf> <1fcf> <8753> -<1fd0> <1fd0> <8755> -<1fd1> <1fd1> <8749> -<1fd2> <1fd2> <874e> -<1fd3> <1fd3> <8752> -<1fd4> <1fd4> <8754> -<1fd5> <1fd5> <8751> -<1fd6> <1fd6> <8747> -<1fd7> <1fd7> <874c> -<1fda> <1fda> <8798> -<1fde> <1fde> <879b> -<1fe5> <1fe5> <8799> -<1ff7> <1ff7> <87a4> -<1ffa> <1ffa> <8641> -<1fff> <1fff> <879c> -<2005> <200b> <8740> -<200c> <200c> <8748> -<200e> <2011> <86d3> -<2013> <2013> <86a3> -<2014> <2014> <86a5> -<2015> <2015> <86a4> -<2016> <2016> <86a6> -<201b> <201e> <86c7> -<201f> <201f> <879e> -<2021> <2022> <85a9> -<205c> <205d> -<205e> <2060> <857c> -<2061> <2066> <8580> -<2067> <2069> <85ab> -<206a> <206e> <85bd> -<206f> <206f> <8645> -<2070> <2070> <864b> -<2071> <2071> <8656> -<2072> <2072> <865d> -<2073> <2073> <869e> -<2074> <2074> <86b5> -<2075> <2078> <86cb> -<2079> <207c> <886a> -<207d> <207e> <8791> -<207f> <207f> <879a> -<2080> <2080> <879d> -<2081> <2082> <87fb> -<2083> <2083> <87e8> -endbfrange -15 beginbfrange -<2084> <2086> <87fa> -<2087> <2088> <87a5> -<2089> <2089> <87a0> -<208a> <208a> <87a3> -<208d> <208e> <87a4> -<2091> <2092> <87a6> -<2093> <2094> <87a9> -<2097> <2098> <87ae> -<209b> <209c> <87b1> -<209d> <209d> <87b4> -<209e> <209e> <87bd> -<20a1> <20a1> <87be> -<20a4> <20a4> <87bf> -<20a5> <20a5> <87c1> -<20a6> <20a6> <87c0> -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-H-CID b/Resources/cmap/Adobe-Japan1-H-CID deleted file mode 100644 index 5db11a2d418..00000000000 --- a/Resources/cmap/Adobe-Japan1-H-CID +++ /dev/null @@ -1,101 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-H-CID) -%%Title: (Adobe-Japan1-H-CID Identity Japan1 2) -%%Version: 2.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Adobe_Japan1_H_CID) def - /Supplement 2 def -end def - -/CMapName /Adobe-Japan1-H-CID def -/CMapVersion 2.000 def -/CMapType 1 def - -/UIDOffset 0 def -/XUID [1 10 25404 99996] def - -/WMode 0 def - -1 begincodespacerange - <0000> -endcodespacerange - -0 usefont -1 begincidrange -<0000> 0 -endcidrange - -% Map CIDs 1 thru 95 to Ascii codes 0x20 - 0x7F in fontID 1. -% leave 3d, yen in font 0 -1 usefont -2 beginbfrange -<0001> <003c> <20> -<003e> <005f> <5d> -endbfrange - -% Map CIDs 8284 to 8358 to fontID 2. Supplement 1 -2 usefont -1 begincidrange -<205C> <20A6> 8284 -endcidrange - -% Map CIDs 8359 to 8719 to fontID 3. Supplement 2 -3 usefont -3 begincidrange -<20A7> <20FF> 8359 -<2100> <21FF> 8448 -<2200> <220F> 8704 -endcidrange - -% Map CIDs 8720 to 9353 to fontID 4. Supplement 3 -4 usefont -3 begincidrange -<2210> <22FF> 8720 -<2300> <23FF> 8960 -<2400> <2489> 9216 -endcidrange - -% Map CIDs 9354 to 15443 to fontID 5. Supplement 4 -% Also map the remaining CIDs up to 65535 to this fontID -5 usefont -2 begincidrange -<248A> <24FF> 9354 -<2500> 9472 -endcidrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-H-Host b/Resources/cmap/Adobe-Japan1-H-Host deleted file mode 100644 index 18e6ca25fa2..00000000000 --- a/Resources/cmap/Adobe-Japan1-H-Host +++ /dev/null @@ -1,311 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-H-Host) -%%Title: (Adobe-Japan1-H-Host Adobe 90ms-RKSJ 0) -%%Version: 5.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Japan1_H_Host) def -/Supplement 0 def -end def - -/CMapName /Adobe-Japan1-H-Host def - -/CMapVersion 5.000 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -% Max CID: 8719 0x220f -% Range Count: 225 -4 usefont -1 begincidrange -<0000> 0 -endcidrange - -% Halfwidth characters -2 usefont -5 beginbfrange -<00e7> <00ff> <20> -<0100> <0144> <39> -<0146> <0185> -<0186> <0186> <60> -<0277> <0277> <7e> -endbfrange - -0 usefont -100 beginbfrange -<0000> <0000> <8140> -<0279> <02B7> <8140> -<02B8> <02DF> <8180> -<02E5> <02EC> <81B8> -<02ED> <02F3> <81C8> -<02F4> <02FF> <81DA> -<0300> <0302> <81E6> -<0303> <030A> <81F0> -<030B> <030B> <81FC> -<030C> <0315> <824F> -<0316> <032F> <8260> -<0330> <0349> <8281> -<034A> <039C> <829F> -<039D> <03DB> <8340> -<03DC> <03F2> <8380> -<03F3> <03FF> <839F> -<0400> <040A> <83AC> -<040B> <0422> <83BF> -<0423> <0443> <8440> -<0444> <0452> <8470> -<0453> <0464> <8480> -<0465> <04C2> <889F> -<04C3> <04FF> <8940> -<0500> <0501> <897D> -<0502> <057E> <8980> -<057F> <05BD> <8A40> -<05BE> <05FF> <8A80> -<0600> <063A> <8AC2> -<063B> <0679> <8B40> -<067A> <06F6> <8B80> -<06F7> <06FF> <8C40> -<0700> <0735> <8C49> -<0736> <07B2> <8C80> -<07B3> <07F1> <8D40> -<07F2> <07FF> <8D80> -<0800> <086E> <8D8E> -<086F> <08AD> <8E40> -<08AE> <08FF> <8E80> -<0900> <092A> <8ED2> -<092B> <0969> <8F40> -<096A> <09E6> <8F80> -<09E7> <09FF> <9040> -<0A00> <0A25> <9059> -<0A26> <0AA2> <9080> -<0AA3> <0AE1> <9140> -<0AE2> <0AFF> <9180> -<0B00> <0B5E> <919E> -<0B5F> <0B9D> <9240> -<0B9E> <0BFF> <9280> -<0C00> <0C1A> <92E2> -<0C1B> <0C59> <9340> -<0C5A> <0CD6> <9380> -<0CD7> <0CFF> <9440> -<0D00> <0D15> <9469> -<0D16> <0D92> <9480> -<0D93> <0DD1> <9540> -<0DD2> <0DFF> <9580> -<0E00> <0E4E> <95AE> -<0E4F> <0E8D> <9640> -<0E8E> <0EFF> <9680> -<0F00> <0F0A> <96F2> -<0F0B> <0F49> <9740> -<0F4A> <0FC6> <9780> -<0FC7> <0FF9> <9840> -<0FFA> <0FFF> <989F> -<1000> <1057> <98A5> -<1058> <1096> <9940> -<1097> <10FF> <9980> -<1100> <1113> <99E9> -<1114> <1152> <9A40> -<1153> <11CF> <9A80> -<11D0> <11FF> <9B40> -<1200> <120E> <9B70> -<120F> <128B> <9B80> -<128C> <12CA> <9C40> -<12CB> <12FF> <9C80> -<1300> <1347> <9CB5> -<1348> <1386> <9D40> -<1387> <13FF> <9D80> -<1400> <1403> <9DF9> -<1404> <1442> <9E40> -<1443> <14BF> <9E80> -<14C0> <14FE> <9F40> -<14FF> <14FF> <9F80> -<1500> <157B> <9F81> -<157C> <15BA> -<15BB> <15FF> -<1600> <1637> -<1638> <1676> -<1677> <16F3> -<16F4> <16FF> -<1700> <1732> -<1733> <17AF> -<17B0> <17EE> -<17EF> <17FF> -<1800> <186B> -<186C> <18AA> -<18AB> <18FF> -<1900> <1927> -<1928> <1966> -endbfrange -84 beginbfrange -<1967> <19E3> -<19E4> <19FF> -<1A00> <1A22> -<1A23> <1A9F> -<1AA0> <1ADE> -<1ADF> <1AFF> -<1B00> <1B5B> -<1B5C> <1B9A> -<1B9B> <1BFF> -<1C00> <1C17> -<1C18> <1C56> -<1C57> <1CD3> -<1CD4> <1CFF> -<1D00> <1D12> -<1D13> <1D35> -<1D73> <1D73> <84A9> -<1D82> <1D82> <84B4> -<1D83> <1DA0> <8740> -<1DA1> <1DA2> <875F> -<1DA4> <1DA4> <8762> -<1DA6> <1DA6> <8764> -<1DA8> <1DA9> <8766> -<1DAB> <1DAC> <8769> -<1DAE> <1DAF> <876C> -<1DB1> <1DB7> <876F> -<1DB8> <1DBB> <8780> -<1DBD> <1DC7> <8785> -<1DC8> <1DCE> <8793> -<1ECF> <1ED0> <8141> -<1ED1> <1ED2> <8150> -<1ED3> <1ED5> <815B> -<1ED6> <1EDA> <8160> -<1EDB> <1EEC> <8169> -<1EED> <1EED> <8181> -<1EEE> <1EEE> <829F> -<1EEF> <1EEF> <82A1> -<1EF0> <1EF0> <82A3> -<1EF1> <1EF1> <82A5> -<1EF2> <1EF2> <82A7> -<1EF3> <1EF3> <82C1> -<1EF4> <1EF4> <82E1> -<1EF5> <1EF5> <82E3> -<1EF6> <1EF6> <82E5> -<1EF7> <1EF7> <82EC> -<1EF8> <1EF8> <8340> -<1EF9> <1EF9> <8342> -<1EFA> <1EFA> <8344> -<1EFB> <1EFB> <8346> -<1EFC> <1EFC> <8348> -<1EFD> <1EFD> <8362> -<1EFE> <1EFE> <8383> -<1EFF> <1EFF> <8385> -<1F00> <1F00> <8387> -<1F01> <1F01> <838E> -<1F02> <1F03> <8395> -<1F09> <1F09> <8764> -<1F0B> <1F0C> <8766> -<1F0E> <1F0F> <8769> -<1F11> <1F12> <876C> -<1F14> <1F15> <8780> -<1F45> <1F47> -<1F66> <1F66> <8761> -<1F68> <1F68> <8763> -<1F6A> <1F6A> <8765> -<1F6B> <1F6B> <876B> -<1F6C> <1F6C> <8768> -<1F6F> <1F6F> <876E> -<1F77> <1F77> <8784> -<1F9C> <1FA5> -<204E> <204E> <81AC> -<205C> <205D> -<2083> <2083> <877E> -<2092> <2092> <8765> -<2093> <2093> <8763> -<2098> <2098> <8768> -<209C> <209C> <876B> -<209D> <209D> <876E> -<20A7> <20E5> -<20E6> <20FF> -<2100> <2119> -<211A> <2161> -<2162> <21A0> -<21A1> <21FF> -<2200> <220D> -endbfrange - -1 usefont % Proportional Roman characters -1 beginbfrange -<0001> <005f> <20> -endbfrange - -3 usefont % vertical characters -38 beginbfrange -<1ecf> <1ed0> <8141> -<1ed1> <1ed2> <8150> -<1ed3> <1ed5> <815b> -<1ed6> <1eda> <8160> -<1edb> <1eec> <8169> -<1eed> <1eed> <8181> -<1eee> <1eee> <829f> -<1eef> <1eef> <82a1> -<1ef0> <1ef0> <82a3> -<1ef1> <1ef1> <82a5> -<1ef2> <1ef2> <82a7> -<1ef3> <1ef3> <82c1> -<1ef4> <1ef4> <82e1> -<1ef5> <1ef5> <82e3> -<1ef6> <1ef6> <82e5> -<1ef7> <1ef7> <82ec> -<1ef8> <1ef8> <8340> -<1ef9> <1ef9> <8342> -<1efa> <1efa> <8344> -<1efb> <1efb> <8346> -<1efc> <1efc> <8348> -<1efd> <1efd> <8362> -<1efe> <1efe> <8383> -<1eff> <1eff> <8385> -<1f00> <1f00> <8387> -<1f01> <1f01> <838e> -<1f02> <1f03> <8395> -<1f09> <1f09> <8764> -<1f0b> <1f0c> <8766> -<1f0e> <1f0f> <8769> -<1f11> <1f12> <876c> -<1f14> <1f15> <8780> -<204e> <204e> <81ac> -<2092> <2092> <8765> -<2093> <2093> <8763> -<2098> <2098> <8768> -<209c> <209c> <876b> -<209d> <209d> <876e> -endbfrange - - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-H-Mac b/Resources/cmap/Adobe-Japan1-H-Mac deleted file mode 100644 index 2d5a817c8d7..00000000000 --- a/Resources/cmap/Adobe-Japan1-H-Mac +++ /dev/null @@ -1,249 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-H-Mac) -%%Title: (Adobe-Japan1-H-Mac Adobe Japan1 2) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Japan1_H_Mac) def -/Supplement 2 def -end def - -/CMapName /Adobe-Japan1-H-Mac def - -/CMapVersion 4.002 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -2 usefont -1 begincidrange -<0000> 0 -endcidrange - -1 usefont % Prop Roman -1 beginbfrange -<0001> <005f> <20> % proportional yen to prop backslash -endbfrange - -0 usefont % System font -100 beginbfrange -<0061> <0061> <80> -<007c> <007c> -<0098> <0098> -<00e4> <00e4> -<0146> <0185> -<0279> <02b7> <8140> -<02b8> <02e4> <8180> -<02e5> <02ec> <81b8> -<02ed> <02f3> <81c8> -<02f4> <02ff> <81da> -<0300> <0302> <81e6> -<0303> <030a> <81f0> -<030b> <030b> <81fc> -<030c> <0315> <824f> -<0316> <032f> <8260> -<0330> <0349> <8281> -<034a> <039c> <829f> -<039d> <03db> <8340> -<03dc> <03f2> <8380> -<03f3> <03ff> <839f> -<0400> <040a> <83ac> -<040b> <0422> <83bf> -<0423> <0443> <8440> -<0444> <0452> <8470> -<0453> <0464> <8480> -<0465> <04c2> <889f> -<04c3> <04ff> <8940> -<0500> <0501> <897d> -<0502> <057e> <8980> -<057f> <05bd> <8a40> -<05be> <05ff> <8a80> -<0600> <063a> <8ac2> -<063b> <0679> <8b40> -<067a> <06f6> <8b80> -<06f7> <06ff> <8c40> -<0700> <0735> <8c49> -<0736> <07b2> <8c80> -<07b3> <07f1> <8d40> -<07f2> <07ff> <8d80> -<0800> <086e> <8d8e> -<086f> <08ad> <8e40> -<08ae> <08ff> <8e80> -<0900> <092a> <8ed2> -<092b> <0969> <8f40> -<096a> <09e6> <8f80> -<09e7> <09ff> <9040> -<0a00> <0a25> <9059> -<0a26> <0aa2> <9080> -<0aa3> <0ae1> <9140> -<0ae2> <0aff> <9180> -<0b00> <0b5e> <919e> -<0b5f> <0b9d> <9240> -<0b9e> <0bff> <9280> -<0c00> <0c1a> <92e2> -<0c1b> <0c59> <9340> -<0c5a> <0cd6> <9380> -<0cd7> <0cff> <9440> -<0d00> <0d15> <9469> -<0d16> <0d92> <9480> -<0d93> <0dd1> <9540> -<0dd2> <0dff> <9580> -<0e00> <0e4e> <95ae> -<0e4f> <0e8d> <9640> -<0e8e> <0eff> <9680> -<0f00> <0f0a> <96f2> -<0f0b> <0f49> <9740> -<0f4a> <0fc6> <9780> -<0fc7> <0ff9> <9840> -<0ffa> <0fff> <989f> -<1000> <1057> <98a5> -<1058> <1096> <9940> -<1097> <10ff> <9980> -<1100> <1113> <99e9> -<1114> <1152> <9a40> -<1153> <11cf> <9a80> -<11d0> <11ff> <9b40> -<1200> <120e> <9b70> -<120f> <128b> <9b80> -<128c> <12ca> <9c40> -<12cb> <12ff> <9c80> -<1300> <1347> <9cb5> -<1348> <1386> <9d40> -<1387> <13ff> <9d80> -<1400> <1403> <9df9> -<1404> <1442> <9e40> -<1443> <14bf> <9e80> -<14c0> <14fe> <9f40> -<14ff> <14ff> <9f80> -<1500> <157b> <9f81> -<157c> <15ba> -<15bb> <15ff> -<1600> <1637> -<1638> <1676> -<1677> <16f3> -<16f4> <16ff> -<1700> <1732> -<1733> <17af> -<17b0> <17ee> -<17ef> <17ff> -<1800> <186b> -endbfrange -78 beginbfrange -<186c> <18aa> -<18ab> <18ff> -<1900> <1927> -<1928> <1966> -<1967> <19e3> -<19e4> <19ff> -<1a00> <1a22> -<1a23> <1a9f> -<1aa0> <1ade> -<1adf> <1aff> -<1b00> <1b5b> -<1b5c> <1b9a> -<1b9b> <1bff> -<1c00> <1c17> -<1c18> <1c56> -<1c57> <1cd3> -<1cd4> <1cff> -<1d00> <1d12> -<1d13> <1d35> -<1d37> <1d37> <849f> -<1d38> <1d38> <84aa> -<1d39> <1d39> <84a0> -<1d3a> <1d3a> <84ab> -<1d43> <1d43> <84a1> -<1d46> <1d46> <84ac> -<1d47> <1d47> <84a2> -<1d4a> <1d4a> <84ad> -<1d4b> <1d4b> <84a4> -<1d4e> <1d4e> <84af> -<1d4f> <1d4f> <84a3> -<1d52> <1d52> <84ae> -<1d53> <1d53> <84a5> -<1d54> <1d54> <84ba> -<1d57> <1d57> <84b5> -<1d5a> <1d5a> <84b0> -<1d5b> <1d5b> <84a7> -<1d5c> <1d5c> <84bc> -<1d5f> <1d5f> <84b7> -<1d62> <1d62> <84b2> -<1d63> <1d63> <84a6> -<1d66> <1d66> <84b6> -<1d67> <1d67> <84bb> -<1d6a> <1d6a> <84b1> -<1d6b> <1d6b> <84a8> -<1d6e> <1d6e> <84b8> -<1d6f> <1d6f> <84bd> -<1d72> <1d72> <84b3> -<1d73> <1d73> <84a9> -<1d76> <1d76> <84b9> -<1d79> <1d79> <84be> -<1d82> <1d82> <84b4> -<1ecf> <1ed0> -<1ed1> <1ed2> -<1ed3> <1ed5> -<1ed6> <1eda> -<1edb> <1eec> -<1eed> <1eed> -<1eee> <1eee> -<1eef> <1eef> -<1ef0> <1ef0> -<1ef1> <1ef1> -<1ef2> <1ef2> -<1ef3> <1ef3> -<1ef4> <1ef4> -<1ef5> <1ef5> -<1ef6> <1ef6> -<1ef7> <1ef7> -<1ef8> <1ef8> -<1ef9> <1ef9> -<1efa> <1efa> -<1efb> <1efb> -<1efc> <1efc> -<1efd> <1efd> -<1efe> <1efe> -<1eff> <1eff> -<1f00> <1f00> -<1f01> <1f01> -<1f02> <1f03> -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-PS-H b/Resources/cmap/Adobe-Japan1-PS-H deleted file mode 100644 index 556ec1c5a95..00000000000 --- a/Resources/cmap/Adobe-Japan1-PS-H +++ /dev/null @@ -1,1062 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-PS-H) -%%Title: (Adobe-Japan1-PS-H Adobe Japan1 2) -%%Version: 7.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -% This CMap is used for mapping from CIDs to encodings that are available -% on a Japanese PostScript Printer for horizontal fonts. -% The ranges in the CMap maps CIDs to following font numbers -% -% font 0 - character codes in 83pv-RKSJ-H -% font 1 - proportional roman ascii codes -% font 2 - character codes in Ext-RKSJ-H (and not in 83pv-RKSJ-H) -% font 3 - CIDs that are not in 83pv-RKSJ-H or Ext-RKSJ-H -% - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Adobe_Japan1_PS_H) def - /Supplement 2 def -end def - -/CMapName /Adobe-Japan1-PS-H def - -/CMapVersion 7.001 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange - <0000> -endcodespacerange - -3 usefont - -1 beginbfrange -<0000> <0000> -endbfrange - -0 usefont % Common RKSJ font - -% Max CID: 7632 0x1dd0 -% Range Count: 389 -99 beginbfrange -<0146> <0185> -<0186> <0186> <8580> -<0187> <01a5> <85de> -<01a6> <01e4> <8640> -<01e5> <01f6> <8680> -<01f7> <01ff> <8693> -<0200> <0202> <869c> -<0279> <02b7> <8140> -<02b8> <02c0> <8180> -<02c2> <02e4> <818a> -<030c> <0315> <824f> -<0316> <032f> <8260> -<0330> <0349> <8281> -<034a> <039c> <829f> -<039d> <03db> <8340> -<03dc> <03f2> <8380> -<03f3> <03ff> <839f> -<0400> <040a> <83ac> -<040b> <0422> <83bf> -<0423> <0443> <8440> -<0444> <0452> <8470> -<0453> <0464> <8480> -<0465> <0465> <889f> -<0467> <0476> <88a1> -<0478> <047e> <88b2> -<0480> <04b1> <88ba> -<04b3> <04b6> <88ed> -<04b8> <04bf> <88f2> -<04c1> <04c2> <88fb> -<04c3> <04cb> <8940> -<04cd> <04d6> <894a> -<04d8> <04da> <8955> -<04dc> <04dd> <8959> -<04e0> <04e3> <895d> -<04e5> <04ff> <8962> -<0500> <0501> <897d> -<0502> <050c> <8980> -<050e> <0527> <898c> -<052b> <055f> <89a9> -<0561> <0579> <89df> -<057b> <057c> <89f9> -<057e> <057e> <89fc> -<057f> <057f> <8a40> -<0581> <059f> <8a42> -<05a1> <05a6> <8a62> -<05a8> <05bd> <8a69> -<05be> <05c2> <8a80> -<05c4> <05c8> <8a86> -<05ca> <05d0> <8a8c> -<05d2> <05d3> <8a94> -<05d5> <05d7> <8a97> -<05d9> <05fd> <8a9b> -<0600> <0608> <8ac2> -<060a> <060d> <8acc> -<060f> <0620> <8ad1> -<0622> <063a> <8ae4> -<063b> <0644> <8b40> -<0646> <0659> <8b4b> -<065b> <0679> <8b60> -<067a> <0699> <8b80> -<069b> <06a1> <8ba1> -<06a3> <06bd> <8ba9> -<06bf> <06c6> <8bc5> -<06c8> <06e4> <8bce> -<06e6> <06eb> <8bec> -<06ed> <06f2> <8bf3> -<06f4> <06f4> <8bfa> -<06f6> <06f6> <8bfc> -<06f7> <06f9> <8c40> -<06fb> <06ff> <8c44> -<0700> <070c> <8c49> -<070e> <071a> <8c57> -<071c> <0723> <8c65> -<0725> <0727> <8c6e> -<0729> <072a> <8c72> -<072c> <0730> <8c75> -<0732> <0735> <8c7b> -<0736> <0739> <8c80> -<073b> <0746> <8c85> -<0748> <074e> <8c92> -<0750> <0753> <8c9a> -<0755> <0767> <8c9f> -<0769> <0774> <8cb3> -<0776> <07b2> <8cc0> -<07b3> <07bc> <8d40> -<07be> <07c8> <8d4b> -<07ca> <07d3> <8d57> -<07d5> <07ed> <8d62> -<07ef> <07f1> <8d7c> -<07f2> <07fe> <8d80> -<0800> <0805> <8d8e> -<0807> <080a> <8d95> -<080c> <0842> <8d9a> -<0844> <0856> <8dd2> -<0858> <0863> <8de6> -<0865> <086e> <8df3> -<086f> <0874> <8e40> -<0876> <0877> <8e47> -<0879> <0879> <8e4a> -endbfrange - -100 beginbfrange -<087b> <0886> <8e4c> -<0888> <08ad> <8e59> -<08ae> <08e3> <8e80> -<08e5> <08f3> <8eb7> -<08f6> <08ff> <8ec8> -<0900> <0902> <8ed2> -<0904> <0908> <8ed6> -<090b> <092a> <8edd> -<092b> <0934> <8f40> -<0936> <093f> <8f4b> -<0941> <0969> <8f56> -<096a> <0975> <8f80> -<0978> <097b> <8f8e> -<097e> <098c> <8f94> -<098e> <099a> <8fa4> -<099c> <09a6> <8fb2> -<09a8> <09bc> <8fbe> -<09be> <09c6> <8fd4> -<09c8> <09cb> <8fde> -<09cd> <09e6> <8fe3> -<09e7> <09ef> <9040> -<09f1> <09ff> <904a> -<0a00> <0a1e> <9059> -<0a20> <0a25> <9079> -<0a27> <0a2e> <9081> -<0a30> <0a45> <908a> -<0a47> <0a65> <90a1> -<0a67> <0a89> <90c1> -<0a8b> <0a94> <90e5> -<0a97> <0a9c> <90f1> -<0a9f> <0aa2> <90f9> -<0aa3> <0aa8> <9140> -<0aab> <0aba> <9148> -<0abc> <0acd> <9159> -<0acf> <0ad0> <916c> -<0ad2> <0ae0> <916f> -<0ae2> <0aea> <9180> -<0aec> <0aff> <918a> -<0b00> <0b1c> <919e> -<0b1e> <0b2c> <91bc> -<0b2e> <0b3b> <91cc> -<0b3d> <0b42> <91db> -<0b44> <0b4e> <91e2> -<0b50> <0b54> <91ee> -<0b57> <0b5c> <91f5> -<0b5e> <0b5e> <91fc> -<0b5f> <0b64> <9240> -<0b66> <0b66> <9247> -<0b69> <0b6a> <924a> -<0b6d> <0b7a> <924e> -<0b7c> <0b9d> <925d> -<0b9e> <0bad> <9280> -<0baf> <0bb2> <9291> -<0bb4> <0bb9> <9296> -<0bbb> <0bd8> <929d> -<0bda> <0be3> <92bc> -<0be5> <0be5> <92c7> -<0be7> <0be8> <92c9> -<0bea> <0bea> <92cc> -<0bec> <0bf6> <92ce> -<0bf8> <0bff> <92da> -<0c00> <0c1a> <92e2> -<0c1b> <0c1b> <9340> -<0c1d> <0c20> <9342> -<0c22> <0c27> <9347> -<0c29> <0c2f> <934e> -<0c31> <0c38> <9356> -<0c3a> <0c41> <935f> -<0c43> <0c44> <9368> -<0c46> <0c4a> <936b> -<0c4d> <0c50> <9372> -<0c52> <0c59> <9377> -<0c5a> <0c5d> <9380> -<0c5f> <0c67> <9385> -<0c69> <0c6c> <938f> -<0c6e> <0c71> <9394> -<0c73> <0c95> <9399> -<0c97> <0c99> <93bd> -<0c9b> <0cab> <93c1> -<0cae> <0cb2> <93d4> -<0cb5> <0cb8> <93db> -<0cba> <0cbd> <93e0> -<0cc0> <0cc1> <93e6> -<0cc3> <0ccd> <93e9> -<0ccf> <0cd6> <93f5> -<0cd7> <0cde> <9440> -<0ce0> <0cee> <9449> -<0cf0> <0cff> <9459> -<0d00> <0d0c> <9469> -<0d0e> <0d15> <9477> -<0d16> <0d1c> <9480> -<0d20> <0d22> <948a> -<0d24> <0d37> <948e> -<0d39> <0d41> <94a3> -<0d43> <0d43> <94ad> -<0d45> <0d67> <94af> -<0d69> <0d75> <94d3> -<0d77> <0d88> <94e1> -<0d8a> <0d92> <94f4> -<0d93> <0d93> <9540> -endbfrange - -100 beginbfrange -<0d96> <0da0> <9543> -<0da3> <0da3> <9550> -<0da5> <0da6> <9552> -<0da8> <0db1> <9555> -<0db3> <0dbf> <9560> -<0dc1> <0dc2> <956e> -<0dc4> <0dd1> <9571> -<0dd2> <0dff> <9580> -<0e00> <0e12> <95ae> -<0e14> <0e1c> <95c2> -<0e1e> <0e29> <95cc> -<0e2b> <0e48> <95d9> -<0e4a> <0e4e> <95f8> -<0e4f> <0e4f> <9640> -<0e51> <0e56> <9642> -<0e58> <0e78> <9649> -<0e7a> <0e8d> <966b> -<0e8e> <0e97> <9680> -<0e99> <0e9d> <968b> -<0e9f> <0ea6> <9691> -<0ea8> <0ed8> <969a> -<0eda> <0ee4> <96cc> -<0ee6> <0eea> <96d8> -<0eec> <0eed> <96de> -<0eef> <0eff> <96e1> -<0f00> <0f04> <96f2> -<0f07> <0f07> <96f9> -<0f09> <0f09> <96fb> -<0f0b> <0f1b> <9740> -<0f1d> <0f39> <9752> -<0f3b> <0f3d> <9770> -<0f3f> <0f43> <9774> -<0f45> <0f49> <977a> -<0f4a> <0f52> <9780> -<0f54> <0f92> <978a> -<0f94> <0fc1> <97ca> -<0fc4> <0fc6> <97fa> -<0fc8> <0fd6> <9841> -<0fd8> <0fdb> <9851> -<0fdd> <0fde> <9856> -<0fe0> <0ff9> <9859> -<0ffa> <0fff> <989f> -<1000> <102e> <98a5> -<1030> <1057> <98d5> -<1058> <1073> <9940> -<1075> <107d> <995d> -<107f> <1081> <9967> -<1083> <1083> <996b> -<1085> <1096> <996d> -<1097> <10ff> <9980> -<1100> <1113> <99e9> -<1114> <1122> <9a40> -<1124> <112c> <9a50> -<112e> <1142> <9a5a> -<1144> <1150> <9a70> -<1152> <1152> <9a7e> -<1153> <115d> <9a80> -<115f> <1194> <9a8c> -<1196> <11b4> <9ac3> -<11b6> <11cf> <9ae3> -<11d0> <11eb> <9b40> -<11ed> <11ff> <9b5d> -<1200> <120e> <9b70> -<120f> <1211> <9b80> -<1213> <122e> <9b84> -<1230> <127e> <9ba1> -<1280> <128b> <9bf1> -<128c> <12ca> <9c40> -<12cb> <12ec> <9c80> -<12ee> <12ff> <9ca3> -<1300> <1347> <9cb5> -<1348> <1386> <9d40> -<1388> <1392> <9d81> -<1394> <139e> <9d8d> -<13a0> <13bd> <9d99> -<13bf> <13d1> <9db8> -<13d3> <13ff> <9dcc> -<1400> <1403> <9df9> -<1404> <1427> <9e40> -<1429> <142c> <9e65> -<142e> <143a> <9e6a> -<143c> <1442> <9e78> -<1443> <144d> <9e80> -<144f> <144f> <9e8c> -<1451> <1456> <9e8e> -<1458> <14bf> <9e95> -<14c0> <14fe> <9f40> -<14ff> <14ff> <9f80> -<1500> <1535> <9f81> -<1537> <154c> <9fb8> -<154e> <1571> <9fcf> -<1573> <157b> <9ff4> -<157c> <15ba> -<15bb> <15cd> -<15cf> <15de> -<15e0> <15ff> -<1600> <1617> -<1619> <162e> -<1630> <1637> -<1638> <1641> -endbfrange - -89 beginbfrange -<1643> <1646> -<1649> <1676> -<1677> <169f> -<16a1> <16dc> -<16de> <16de> -<16e0> <16e3> -<16e5> <16f3> -<16f4> <16ff> -<1700> <171c> -<171e> <1726> -<1728> <1730> -<1732> <1732> -<1733> <1769> -<176b> <1776> -<1778> <1794> -<1796> <179e> -<17a0> <17af> -<17b0> <17c7> -<17c9> <17c9> -<17cb> <17d4> -<17d6> <17ee> -<17ef> <17ff> -<1800> <1832> -<1834> <186b> -<186c> <18aa> -<18ab> <18ae> -<18b0> <18b3> -<18b5> <18bc> -<18be> <18dc> -<18de> <18e3> -<18e5> <18ff> -<1900> <191c> -<191e> <1927> -<1928> <1928> -<192a> <1934> -<1936> <1942> -<1944> <1960> -<1962> <1966> -<1967> <1988> -<198a> <198b> -<198d> <19a1> -<19a3> <19d3> -<19d5> <19e3> -<19e4> <19f4> -<19f6> <19ff> -<1a00> <1a1f> -<1a21> <1a22> -<1a23> <1a28> -<1a2a> <1a38> -<1a3a> <1a6d> -<1a6f> <1a89> -<1a8b> <1a94> -<1a96> <1a9f> -<1aa0> <1acc> -<1ace> <1ade> -<1adf> <1aea> -<1aec> <1aec> -<1aee> <1aff> -<1b00> <1b05> -<1b07> <1b19> -<1b1b> <1b33> -<1b35> <1b5b> -<1b5c> <1b9a> -<1b9b> <1b9f> -<1ba1> <1bcb> -<1bcd> <1bdd> -<1bdf> <1be9> -<1beb> <1bef> -<1bf1> <1bff> -<1c00> <1c0c> -<1c0f> <1c17> -<1c18> <1c56> -<1c57> <1c81> -<1c83> <1c90> -<1c92> <1ca1> -<1ca4> <1cc8> -<1cca> <1cd3> -<1cd4> <1cff> -<1d00> <1d03> -<1d05> <1d12> -<1d13> <1d2f> -<1d31> <1d31> -<1d37> <1d38> <86a2> -<1d3a> <1d82> <86a5> -<1d83> <1da0> <8740> -<1da1> <1db7> <875f> -<1db8> <1dc7> <8780> -<1dc8> <1dce> <8793> -<1dcf> <1dd0> <879b> -endbfrange - -1 usefont -1 beginbfrange -<0001> <005f> <20> -endbfrange - -0 usefont - -% Max CID: 8285 0x205d -% Range Count: 317 -95 beginbfrange -<0145> <0145> <859e> -<02c1> <02c1> <8189> -<02e5> <02ec> <81b8> -<02ed> <02f3> <81c8> -<02f4> <02ff> <81da> -<0300> <0302> <81e6> -<0303> <030a> <81f0> -<030b> <030b> <81fc> -<0466> <0466> <88a0> -<0477> <0477> <88b1> -<047f> <047f> <88b9> -<04b2> <04b2> <88ec> -<04b7> <04b7> <88f1> -<04c0> <04c0> <88fa> -<04cc> <04cc> <8949> -<04d7> <04d7> <8954> -<04db> <04db> <8958> -<04de> <04df> <895b> -<04e4> <04e4> <8961> -<050d> <050d> <898b> -<0528> <052a> <89a6> -<0560> <0560> <89de> -<057a> <057a> <89f8> -<057d> <057d> <89fb> -<0580> <0580> <8a41> -<05a0> <05a0> <8a61> -<05a7> <05a7> <8a68> -<05c3> <05c3> <8a85> -<05c9> <05c9> <8a8b> -<05d1> <05d1> <8a93> -<05d4> <05d4> <8a96> -<05d8> <05d8> <8a9a> -<05fe> <05ff> <8ac0> -<0609> <0609> <8acb> -<060e> <060e> <8ad0> -<0621> <0621> <8ae3> -<0645> <0645> <8b4a> -<065a> <065a> <8b5f> -<069a> <069a> <8ba0> -<06a2> <06a2> <8ba8> -<06be> <06be> <8bc4> -<06c7> <06c7> <8bcd> -<06e5> <06e5> <8beb> -<06ec> <06ec> <8bf2> -<06f3> <06f3> <8bf9> -<06f5> <06f5> <8bfb> -<06fa> <06fa> <8c43> -<070d> <070d> <8c56> -<071b> <071b> <8c64> -<0724> <0724> <8c6d> -<0728> <0728> <8c71> -<072b> <072b> <8c74> -<0731> <0731> <8c7a> -<073a> <073a> <8c84> -<0747> <0747> <8c91> -<074f> <074f> <8c99> -<0754> <0754> <8c9e> -<0768> <0768> <8cb2> -<0775> <0775> <8cbf> -<07bd> <07bd> <8d4a> -<07c9> <07c9> <8d56> -<07d4> <07d4> <8d61> -<07ee> <07ee> <8d7b> -<07ff> <07ff> <8d8d> -<0806> <0806> <8d94> -<080b> <080b> <8d99> -<0843> <0843> <8dd1> -<0857> <0857> <8de5> -<0864> <0864> <8df2> -<0875> <0875> <8e46> -<0878> <0878> <8e49> -<087a> <087a> <8e4b> -<0887> <0887> <8e58> -<08e4> <08e4> <8eb6> -<08f4> <08f5> <8ec6> -<0903> <0903> <8ed5> -<0909> <090a> <8edb> -<0935> <0935> <8f4a> -<0940> <0940> <8f55> -<0976> <0977> <8f8c> -<097c> <097d> <8f92> -<098d> <098d> <8fa3> -<099b> <099b> <8fb1> -<09a7> <09a7> <8fbd> -<09bd> <09bd> <8fd3> -<09c7> <09c7> <8fdd> -<09cc> <09cc> <8fe2> -<09f0> <09f0> <9049> -<0a1f> <0a1f> <9078> -<0a26> <0a26> <9080> -<0a2f> <0a2f> <9089> -<0a46> <0a46> <90a0> -<0a66> <0a66> <90c0> -<0a8a> <0a8a> <90e4> -<0a95> <0a96> <90ef> -endbfrange - -100 beginbfrange -<0a9d> <0a9e> <90f7> -<0aa9> <0aaa> <9146> -<0abb> <0abb> <9158> -<0ace> <0ace> <916b> -<0ad1> <0ad1> <916e> -<0ae1> <0ae1> <917e> -<0aeb> <0aeb> <9189> -<0b1d> <0b1d> <91bb> -<0b2d> <0b2d> <91cb> -<0b3c> <0b3c> <91da> -<0b43> <0b43> <91e1> -<0b4f> <0b4f> <91ed> -<0b55> <0b56> <91f3> -<0b5d> <0b5d> <91fb> -<0b65> <0b65> <9246> -<0b67> <0b68> <9248> -<0b6b> <0b6c> <924c> -<0b7b> <0b7b> <925c> -<0bae> <0bae> <9290> -<0bb3> <0bb3> <9295> -<0bba> <0bba> <929c> -<0bd9> <0bd9> <92bb> -<0be4> <0be4> <92c6> -<0be6> <0be6> <92c8> -<0be9> <0be9> <92cb> -<0beb> <0beb> <92cd> -<0bf7> <0bf7> <92d9> -<0c1c> <0c1c> <9341> -<0c21> <0c21> <9346> -<0c28> <0c28> <934d> -<0c30> <0c30> <9355> -<0c39> <0c39> <935e> -<0c42> <0c42> <9367> -<0c45> <0c45> <936a> -<0c4b> <0c4c> <9370> -<0c51> <0c51> <9376> -<0c5e> <0c5e> <9384> -<0c68> <0c68> <938e> -<0c6d> <0c6d> <9393> -<0c72> <0c72> <9398> -<0c96> <0c96> <93bc> -<0c9a> <0c9a> <93c0> -<0cac> <0cad> <93d2> -<0cb3> <0cb4> <93d9> -<0cb9> <0cb9> <93df> -<0cbe> <0cbf> <93e4> -<0cc2> <0cc2> <93e8> -<0cce> <0cce> <93f4> -<0cdf> <0cdf> <9448> -<0cef> <0cef> <9458> -<0d0d> <0d0d> <9476> -<0d1d> <0d1f> <9487> -<0d23> <0d23> <948d> -<0d38> <0d38> <94a2> -<0d42> <0d42> <94ac> -<0d44> <0d44> <94ae> -<0d68> <0d68> <94d2> -<0d76> <0d76> <94e0> -<0d89> <0d89> <94f3> -<0d94> <0d95> <9541> -<0da1> <0da2> <954e> -<0da4> <0da4> <9551> -<0da7> <0da7> <9554> -<0db2> <0db2> <955f> -<0dc0> <0dc0> <956d> -<0dc3> <0dc3> <9570> -<0e13> <0e13> <95c1> -<0e1d> <0e1d> <95cb> -<0e2a> <0e2a> <95d8> -<0e49> <0e49> <95f7> -<0e50> <0e50> <9641> -<0e57> <0e57> <9648> -<0e79> <0e79> <966a> -<0e98> <0e98> <968a> -<0e9e> <0e9e> <9690> -<0ea7> <0ea7> <9699> -<0ed9> <0ed9> <96cb> -<0ee5> <0ee5> <96d7> -<0eeb> <0eeb> <96dd> -<0eee> <0eee> <96e0> -<0f05> <0f06> <96f7> -<0f08> <0f08> <96fa> -<0f0a> <0f0a> <96fc> -<0f1c> <0f1c> <9751> -<0f3a> <0f3a> <976f> -<0f3e> <0f3e> <9773> -<0f44> <0f44> <9779> -<0f53> <0f53> <9789> -<0f93> <0f93> <97c9> -<0fc2> <0fc3> <97f8> -<0fc7> <0fc7> <9840> -<0fd7> <0fd7> <9850> -<0fdc> <0fdc> <9855> -<0fdf> <0fdf> <9858> -<102f> <102f> <98d4> -<1074> <1074> <995c> -<107e> <107e> <9966> -<1082> <1082> <996a> -<1084> <1084> <996c> -<1123> <1123> <9a4f> -endbfrange - -100 beginbfrange -<112d> <112d> <9a59> -<1143> <1143> <9a6f> -<1151> <1151> <9a7d> -<115e> <115e> <9a8b> -<1195> <1195> <9ac2> -<11b5> <11b5> <9ae2> -<11ec> <11ec> <9b5c> -<1212> <1212> <9b83> -<122f> <122f> <9ba0> -<127f> <127f> <9bf0> -<12ed> <12ed> <9ca2> -<1387> <1387> <9d80> -<1393> <1393> <9d8c> -<139f> <139f> <9d98> -<13be> <13be> <9db7> -<13d2> <13d2> <9dcb> -<1428> <1428> <9e64> -<142d> <142d> <9e69> -<143b> <143b> <9e77> -<144e> <144e> <9e8b> -<1450> <1450> <9e8d> -<1457> <1457> <9e94> -<1536> <1536> <9fb7> -<154d> <154d> <9fce> -<1572> <1572> <9ff3> -<15ce> <15ce> -<15df> <15df> -<1618> <1618> -<162f> <162f> -<1642> <1642> -<1647> <1648> -<16a0> <16a0> -<16dd> <16dd> -<16df> <16df> -<16e4> <16e4> -<171d> <171d> -<1727> <1727> -<1731> <1731> -<176a> <176a> -<1777> <1777> -<1795> <1795> -<179f> <179f> -<17c8> <17c8> -<17ca> <17ca> -<17d5> <17d5> -<1833> <1833> -<18af> <18af> -<18b4> <18b4> -<18bd> <18bd> -<18dd> <18dd> -<18e4> <18e4> -<191d> <191d> -<1929> <1929> -<1935> <1935> -<1943> <1943> -<1961> <1961> -<1989> <1989> -<198c> <198c> -<19a2> <19a2> -<19d4> <19d4> -<19f5> <19f5> -<1a20> <1a20> -<1a29> <1a29> -<1a39> <1a39> -<1a6e> <1a6e> -<1a8a> <1a8a> -<1a95> <1a95> -<1acd> <1acd> -<1aeb> <1aeb> -<1aed> <1aed> -<1b06> <1b06> -<1b1a> <1b1a> -<1b34> <1b34> -<1ba0> <1ba0> -<1bcc> <1bcc> -<1bde> <1bde> -<1bea> <1bea> -<1bf0> <1bf0> -<1c0d> <1c0e> -<1c82> <1c82> -<1c91> <1c91> -<1ca2> <1ca3> -<1cc9> <1cc9> -<1d04> <1d04> -<1d30> <1d30> -<1d32> <1d35> -<1d39> <1d39> <84a0> -<1ecf> <1ed0> -<1ed1> <1ed2> -<1ed3> <1ed5> -<1ed6> <1eda> -<1edb> <1eec> -<1eed> <1eed> -<1eee> <1eee> -<1eef> <1eef> -<1ef0> <1ef0> -<1ef1> <1ef1> -<1ef2> <1ef2> -<1ef3> <1ef3> -<1ef4> <1ef4> -endbfrange - -16 beginbfrange -<1ef5> <1ef5> -<1ef6> <1ef6> -<1ef7> <1ef7> -<1ef8> <1ef8> -<1ef9> <1ef9> -<1efa> <1efa> -<1efb> <1efb> -<1efc> <1efc> -<1efd> <1efd> -<1efe> <1efe> -<1eff> <1eff> -<1f00> <1f00> -<1f01> <1f01> -<1f02> <1f03> -<1f04> <1f13> -<1f14> <1f15> -endbfrange - -2 usefont - -% Max CID: 8717 0x220d -% Range Count: 264 -98 beginbfrange -<00e7> <00ff> <20> -<0100> <0144> <39> -<1d36> <1d36> <8189> -<1dd2> <1dd2> <88b9> -<1dd3> <1dd3> <88ec> -<1dd4> <1dd4> <88f1> -<1dd5> <1dd5> <88fa> -<1dd6> <1dd6> <8949> -<1dd7> <1dd7> <8954> -<1dd8> <1dd8> <8958> -<1dd9> <1dda> <895b> -<1ddb> <1ddb> <8961> -<1ddc> <1ddc> <898b> -<1ddd> <1ddd> <89a6> -<1dde> <1dde> <89a8> -<1ddf> <1ddf> <89de> -<1de0> <1de0> <89f8> -<1de1> <1de1> <89fb> -<1de2> <1de2> <8a41> -<1de3> <1de3> <8a85> -<1de4> <1de4> <8a8b> -<1de5> <1de5> <8a93> -<1de6> <1de6> <8a9a> -<1de7> <1de7> <8ac0> -<1de8> <1de8> <8acb> -<1de9> <1de9> <8ae3> -<1dea> <1dea> <8b4a> -<1deb> <1deb> <8b5f> -<1dec> <1dec> <8ba0> -<1ded> <1ded> <8ba8> -<1dee> <1dee> <8bcd> -<1def> <1def> <8beb> -<1df0> <1df0> <8bf2> -<1df1> <1df1> <8bf9> -<1df2> <1df2> <8bfb> -<1df3> <1df3> <8c43> -<1df4> <1df4> <8c56> -<1df5> <1df5> <8c64> -<1df6> <1df6> <8c6d> -<1df7> <1df7> <8c71> -<1df8> <1df8> <8c74> -<1df9> <1df9> <8c84> -<1dfa> <1dfa> <8c91> -<1dfb> <1dfb> <8c99> -<1dfc> <1dfc> <8c9e> -<1dfd> <1dfd> <8cb2> -<1dfe> <1dfe> <8cbf> -<1dff> <1dff> <8d4a> -<1e00> <1e00> <8d56> -<1e01> <1e01> <8d61> -<1e02> <1e02> <8d8d> -<1e03> <1e03> <8d94> -<1e04> <1e04> <8d99> -<1e05> <1e05> <8dd1> -<1e06> <1e06> <8de5> -<1e07> <1e07> <8df2> -<1e08> <1e08> <8e46> -<1e09> <1e09> <8e49> -<1e0a> <1e0a> <8e4b> -<1e0b> <1e0b> <8e58> -<1e0c> <1e0c> <8eb6> -<1e0d> <1e0d> <8ec6> -<1e0e> <1e0e> <8ed5> -<1e0f> <1e10> <8edb> -<1e11> <1e11> <8f4a> -<1e12> <1e12> <8f55> -<1e13> <1e14> <8f8c> -<1e15> <1e16> <8f92> -<1e17> <1e17> <8fa3> -<1e18> <1e18> <8fb1> -<1e19> <1e19> <8fbd> -<1e1a> <1e1a> <8fd3> -<1e1b> <1e1b> <8fdd> -<1e1c> <1e1c> <8fe2> -<1e1d> <1e1d> <9049> -<1e1e> <1e1e> <9078> -<1e1f> <1e1f> <9080> -<1e20> <1e20> <9089> -<1e21> <1e21> <90a0> -<1e22> <1e22> <90c0> -<1e23> <1e23> <90e4> -<1e24> <1e25> <90ef> -<1e26> <1e27> <90f7> -<1e28> <1e28> <9146> -<1e29> <1e29> <9158> -<1e2a> <1e2a> <916b> -<1e2b> <1e2b> <916e> -<1e2c> <1e2c> <917e> -<1e2d> <1e2d> <9189> -<1e2e> <1e2e> <91bb> -<1e2f> <1e2f> <91cb> -<1e30> <1e30> <91da> -<1e31> <1e31> <91e1> -<1e32> <1e32> <91ed> -<1e33> <1e34> <91f3> -<1e35> <1e35> <91fb> -<1e36> <1e36> <9246> -<1e37> <1e38> <9248> -endbfrange - -100 beginbfrange -<1e39> <1e3a> <924c> -<1e3b> <1e3b> <925c> -<1e3c> <1e3c> <9290> -<1e3d> <1e3d> <9295> -<1e3e> <1e3e> <929c> -<1e3f> <1e3f> <92bb> -<1e40> <1e40> <92c6> -<1e41> <1e41> <92c8> -<1e42> <1e42> <92cb> -<1e43> <1e43> <92cd> -<1e44> <1e44> <9341> -<1e45> <1e45> <9346> -<1e46> <1e46> <934d> -<1e47> <1e47> <9355> -<1e48> <1e48> <935e> -<1e49> <1e49> <9367> -<1e4a> <1e4a> <936a> -<1e4b> <1e4c> <9370> -<1e4d> <1e4d> <9384> -<1e4e> <1e4e> <9398> -<1e4f> <1e4f> <93bc> -<1e50> <1e50> <93c0> -<1e51> <1e52> <93d2> -<1e53> <1e54> <93d9> -<1e55> <1e55> <93df> -<1e56> <1e57> <93e4> -<1e58> <1e58> <93e8> -<1e59> <1e59> <9448> -<1e5a> <1e5a> <9458> -<1e5b> <1e5b> <9476> -<1e5c> <1e5c> <9487> -<1e5d> <1e5d> <9489> -<1e5e> <1e5e> <948d> -<1e5f> <1e5f> <94a2> -<1e60> <1e60> <94ac> -<1e61> <1e61> <94ae> -<1e62> <1e62> <94d2> -<1e63> <1e63> <94e0> -<1e64> <1e64> <94f3> -<1e65> <1e66> <9541> -<1e67> <1e67> <954e> -<1e68> <1e68> <9551> -<1e69> <1e69> <9554> -<1e6a> <1e6a> <955f> -<1e6b> <1e6b> <956d> -<1e6c> <1e6c> <9570> -<1e6d> <1e6d> <95c1> -<1e6e> <1e6e> <95cb> -<1e6f> <1e6f> <95d8> -<1e70> <1e70> <95f7> -<1e71> <1e71> <9641> -<1e72> <1e72> <9648> -<1e73> <1e73> <966a> -<1e74> <1e74> <9690> -<1e75> <1e75> <96cb> -<1e76> <1e76> <96d7> -<1e77> <1e77> <96dd> -<1e78> <1e78> <96e0> -<1e79> <1e79> <96f8> -<1e7a> <1e7a> <96fa> -<1e7b> <1e7b> <96fc> -<1e7c> <1e7c> <9751> -<1e7d> <1e7d> <976f> -<1e7e> <1e7e> <9773> -<1e7f> <1e7f> <9789> -<1e80> <1e80> <97c9> -<1e81> <1e82> <97f8> -<1e83> <1e83> <9840> -<1e84> <1e84> <9850> -<1e85> <1e85> <9858> -<1e86> <1e86> <995c> -<1e87> <1e87> <9966> -<1e88> <1e88> <996a> -<1e89> <1e89> <996c> -<1e8a> <1e8a> <9a4f> -<1e8b> <1e8b> <9a59> -<1e8c> <1e8c> <9a6f> -<1e8d> <1e8d> <9a7d> -<1e8e> <1e8e> <9a8b> -<1e8f> <1e8f> <9ac2> -<1e90> <1e90> <9b5c> -<1e91> <1e91> <9b83> -<1e92> <1e92> <9ba0> -<1e93> <1e93> <9bf0> -<1e94> <1e94> <9ca2> -<1e95> <1e95> <9d80> -<1e96> <1e96> <9d8c> -<1e97> <1e97> <9db7> -<1e98> <1e98> <9dcb> -<1e99> <1e99> <9e64> -<1e9a> <1e9a> <9e69> -<1e9b> <1e9b> <9e8b> -<1e9c> <1e9c> <9e94> -<1e9d> <1e9d> <9fce> -<1e9e> <1e9e> -<1e9f> <1e9f> -<1ea0> <1ea0> -<1ea1> <1ea1> -<1ea2> <1ea3> -<1ea4> <1ea4> -endbfrange - -42 beginbfrange -<1ea5> <1ea5> -<1ea6> <1ea6> -<1ea7> <1ea7> -<1ea8> <1ea8> -<1ea9> <1ea9> -<1eaa> <1eaa> -<1eab> <1eab> -<1eac> <1eac> -<1ead> <1ead> -<1eae> <1eae> -<1eaf> <1eaf> -<1eb0> <1eb0> -<1eb1> <1eb1> -<1eb2> <1eb2> -<1eb3> <1eb3> -<1eb4> <1eb4> -<1eb5> <1eb5> -<1eb6> <1eb6> -<1eb7> <1eb7> -<1eb8> <1eb8> -<1eb9> <1eb9> -<1eba> <1eba> -<1ebb> <1ebb> -<1ebc> <1ebc> -<1ebd> <1ebd> -<1ebe> <1ebe> -<1ebf> <1ebf> -<1ec0> <1ec0> -<1ec1> <1ec1> -<1ec2> <1ec2> -<1ec3> <1ec3> -<1ec4> <1ec4> -<1ec5> <1ec5> -<1ec6> <1ec6> -<1ec7> <1ec7> -<1ec8> <1ec8> -<1ec9> <1ec9> -<1eca> <1eca> -<1ecb> <1ecb> -<1ecc> <1ecc> -<1ecd> <1ecd> -<1ece> <1ece> -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-PS-V b/Resources/cmap/Adobe-Japan1-PS-V deleted file mode 100644 index edc6d270f6e..00000000000 --- a/Resources/cmap/Adobe-Japan1-PS-V +++ /dev/null @@ -1,606 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Japan1-PS-V) -%%Title: (Adobe-Japan1-PS-V Adobe Japan1 2) -%%Version: 7.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -% This CMap is used for mapping from CIDs to encodings that are available -% on a Japanese PostScript Printer for vertical fonts. -% The ranges in the CMap maps CIDs to following font numbers -% -% font 0 - character codes in RKSJ-V -% font 1 - proportional roman ascii codes ***** -% font 2 - character codes in Ext-RKSJ-V only (not in RKSJ-V) -% font 3 - CIDs that are not in RKSJ-V or Ext-RKSJ-V -% font 4 - CIDs that horizontal glyphs in RSKJ-V - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Adobe_Japan1_PS_V) def - /Supplement 2 def -end def - -/CMapName /Adobe-Japan1-PS-V def - -/CMapVersion 7.001 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange - <0000> -endcodespacerange - -3 usefont % Subset font -%Use Identity mapping -1 beginbfrange -<0000> <0000> -endbfrange - -0 usefont % RKSJ-V -101 beginbfrange -<0000> <0000> <8140> -<00E7> <00FF> <20> -<0100> <0145> <39> -<0146> <0185> -<0279> <0279> <8140> -<027C> <0288> <8143> -<028B> <0293> <8152> -<0297> <0298> <815E> -<029E> <02A1> <8165> -<02B4> <02B7> <817B> -<02B8> <02B8> <8180> -<02BA> <02E4> <8182> -<02E5> <02EC> <81B8> -<02ED> <02F3> <81C8> -<02F4> <02FF> <81DA> -<0300> <0302> <81E6> -<0303> <030A> <81F0> -<030B> <030B> <81FC> -<030C> <0315> <824F> -<0316> <032F> <8260> -<0330> <0349> <8281> -<034B> <034B> <82A0> -<034D> <034D> <82A2> -<034F> <034F> <82A4> -<0351> <0351> <82A6> -<0353> <036B> <82A8> -<036D> <038B> <82C2> -<038D> <038D> <82E2> -<038F> <038F> <82E4> -<0391> <0396> <82E6> -<0398> <039C> <82ED> -<039E> <039E> <8341> -<03A0> <03A0> <8343> -<03A2> <03A2> <8345> -<03A4> <03A4> <8347> -<03A6> <03BE> <8349> -<03C0> <03DB> <8363> -<03DC> <03DE> <8380> -<03E0> <03E0> <8384> -<03E2> <03E2> <8386> -<03E4> <03E9> <8388> -<03EB> <03F0> <838F> -<03F3> <03FF> <839F> -<0400> <040A> <83AC> -<040B> <0422> <83BF> -<0423> <0443> <8440> -<0444> <0452> <8470> -<0453> <0464> <8480> -<0465> <04C2> <889F> -<04C3> <04FF> <8940> -<0500> <0501> <897D> -<0502> <057E> <8980> -<057F> <05BD> <8A40> -<05BE> <05FF> <8A80> -<0600> <063A> <8AC2> -<063B> <0679> <8B40> -<067A> <06F6> <8B80> -<06F7> <06FF> <8C40> -<0700> <0735> <8C49> -<0736> <07B2> <8C80> -<07B3> <07F1> <8D40> -<07F2> <07FF> <8D80> -<0800> <086E> <8D8E> -<086F> <08AD> <8E40> -<08AE> <08FF> <8E80> -<0900> <092A> <8ED2> -<092B> <0969> <8F40> -<096A> <09E6> <8F80> -<09E7> <09FF> <9040> -<0A00> <0A25> <9059> -<0A26> <0AA2> <9080> -<0AA3> <0AE1> <9140> -<0AE2> <0AFF> <9180> -<0B00> <0B5E> <919E> -<0B5F> <0B9D> <9240> -<0B9E> <0BFF> <9280> -<0C00> <0C1A> <92E2> -<0C1B> <0C59> <9340> -<0C5A> <0CD6> <9380> -<0CD7> <0CFF> <9440> -<0D00> <0D15> <9469> -<0D16> <0D92> <9480> -<0D93> <0DD1> <9540> -<0DD2> <0DFF> <9580> -<0E00> <0E4E> <95AE> -<0E4F> <0E8D> <9640> -<0E8E> <0EFF> <9680> -<0F00> <0F0A> <96F2> -<0F0B> <0F49> <9740> -<0F4A> <0FC6> <9780> -<0FC7> <0FF9> <9840> -<0FFA> <0FFF> <989F> -<1000> <1057> <98A5> -<1058> <1096> <9940> -<1097> <10FF> <9980> -<1100> <1113> <99E9> -<1114> <1152> <9A40> -<1153> <11CF> <9A80> -<11D0> <11FF> <9B40> -<1200> <120E> <9B70> -<120F> <128B> <9B80> -endbfrange -100 beginbfrange -<128C> <12CA> <9C40> -<12CB> <12FF> <9C80> -<1300> <1347> <9CB5> -<1348> <1386> <9D40> -<1387> <13FF> <9D80> -<1400> <1403> <9DF9> -<1404> <1442> <9E40> -<1443> <14BF> <9E80> -<14C0> <14FE> <9F40> -<14FF> <14FF> <9F80> -<1500> <157B> <9F81> -<157C> <15BA> -<15BB> <15FF> -<1600> <1637> -<1638> <1676> -<1677> <16F3> -<16F4> <16FF> -<1700> <1732> -<1733> <17AF> -<17B0> <17EE> -<17EF> <17FF> -<1800> <186B> -<186C> <18AA> -<18AB> <18FF> -<1900> <1927> -<1928> <1966> -<1967> <19E3> -<19E4> <19FF> -<1A00> <1A22> -<1A23> <1A9F> -<1AA0> <1ADE> -<1ADF> <1AFF> -<1B00> <1B5B> -<1B5C> <1B9A> -<1B9B> <1BFF> -<1C00> <1C17> -<1C18> <1C56> -<1C57> <1CD3> -<1CD4> <1CFF> -<1D00> <1D12> -<1D13> <1D35> -<1D37> <1D37> <849F> -<1D38> <1D38> <84AA> -<1D39> <1D39> <84A0> -<1D3A> <1D3A> <84AB> -<1D43> <1D43> <84A1> -<1D46> <1D46> <84AC> -<1D47> <1D47> <84A2> -<1D4A> <1D4A> <84AD> -<1D4B> <1D4B> <84A4> -<1D4E> <1D4E> <84AF> -<1D4F> <1D4F> <84A3> -<1D52> <1D52> <84AE> -<1D53> <1D53> <84A5> -<1D54> <1D54> <84BA> -<1D57> <1D57> <84B5> -<1D5A> <1D5A> <84B0> -<1D5B> <1D5B> <84A7> -<1D5C> <1D5C> <84BC> -<1D5F> <1D5F> <84B7> -<1D62> <1D62> <84B2> -<1D63> <1D63> <84A6> -<1D66> <1D66> <84B6> -<1D67> <1D67> <84BB> -<1D6A> <1D6A> <84B1> -<1D6B> <1D6B> <84A8> -<1D6E> <1D6E> <84B8> -<1D6F> <1D6F> <84BD> -<1D72> <1D72> <84B3> -<1D73> <1D73> <84A9> -<1D76> <1D76> <84B9> -<1D79> <1D79> <84BE> -<1D82> <1D82> <84B4> -<1ECF> <1ED0> <8141> -<1ED1> <1ED2> <8150> -<1ED3> <1ED5> <815B> -<1ED6> <1EDA> <8160> -<1EDB> <1EEC> <8169> -<1EED> <1EED> <8181> -<1EEE> <1EEE> <829F> -<1EEF> <1EEF> <82A1> -<1EF0> <1EF0> <82A3> -<1EF1> <1EF1> <82A5> -<1EF2> <1EF2> <82A7> -<1EF3> <1EF3> <82C1> -<1EF4> <1EF4> <82E1> -<1EF5> <1EF5> <82E3> -<1EF6> <1EF6> <82E5> -<1EF7> <1EF7> <82EC> -<1EF8> <1EF8> <8340> -<1EF9> <1EF9> <8342> -<1EFA> <1EFA> <8344> -<1EFB> <1EFB> <8346> -<1EFC> <1EFC> <8348> -<1EFD> <1EFD> <8362> -<1EFE> <1EFE> <8383> -<1EFF> <1EFF> <8385> -<1F00> <1F00> <8387> -<1F01> <1F01> <838E> -<1F02> <1F03> <8395> -endbfrange - -1 usefont % proportional roman -1 beginbfrange -<0001> <005f> <20> -endbfrange - -2 usefont % Ext-RKSJ-V Only - -100 beginbfrange -<0186> <0186> <8580> -<0187> <01A5> <85DE> -<01A6> <01E4> <8640> -<01E5> <01F6> <8680> -<01F7> <01FF> <8693> -<0200> <0202> <869C> -<1D36> <1D36> <8189> -<1D3B> <1D42> <86A6> -<1D44> <1D45> <86AF> -<1D48> <1D49> <86B3> -<1D4C> <1D4D> <86B7> -<1D50> <1D51> <86BB> -<1D55> <1D56> <86C0> -<1D58> <1D59> <86C3> -<1D5D> <1D5E> <86C8> -<1D60> <1D61> <86CB> -<1D64> <1D65> <86CF> -<1D68> <1D69> <86D3> -<1D6C> <1D6D> <86D7> -<1D70> <1D71> <86DB> -<1D74> <1D75> <86DF> -<1D77> <1D78> <86E2> -<1D7A> <1D81> <86E5> -<1D83> <1DA0> <8740> -<1DB1> <1DB7> <876F> -<1DBA> <1DC7> <8782> -<1DC8> <1DCE> <8793> -<1DCF> <1DD0> <879B> -<1DD1> <1DD1> <88A0> -<1DD2> <1DD2> <88B9> -<1DD3> <1DD3> <88EC> -<1DD4> <1DD4> <88F1> -<1DD5> <1DD5> <88FA> -<1DD6> <1DD6> <8949> -<1DD7> <1DD7> <8954> -<1DD8> <1DD8> <8958> -<1DD9> <1DDA> <895B> -<1DDB> <1DDB> <8961> -<1DDC> <1DDC> <898B> -<1DDD> <1DDD> <89A6> -<1DDE> <1DDE> <89A8> -<1DDF> <1DDF> <89DE> -<1DE0> <1DE0> <89F8> -<1DE1> <1DE1> <89FB> -<1DE2> <1DE2> <8A41> -<1DE3> <1DE3> <8A85> -<1DE4> <1DE4> <8A8B> -<1DE5> <1DE5> <8A93> -<1DE6> <1DE6> <8A9A> -<1DE7> <1DE7> <8AC0> -<1DE8> <1DE8> <8ACB> -<1DE9> <1DE9> <8AE3> -<1DEA> <1DEA> <8B4A> -<1DEB> <1DEB> <8B5F> -<1DEC> <1DEC> <8BA0> -<1DED> <1DED> <8BA8> -<1DEE> <1DEE> <8BCD> -<1DEF> <1DEF> <8BEB> -<1DF0> <1DF0> <8BF2> -<1DF1> <1DF1> <8BF9> -<1DF2> <1DF2> <8BFB> -<1DF3> <1DF3> <8C43> -<1DF4> <1DF4> <8C56> -<1DF5> <1DF5> <8C64> -<1DF6> <1DF6> <8C6D> -<1DF7> <1DF7> <8C71> -<1DF8> <1DF8> <8C74> -<1DF9> <1DF9> <8C84> -<1DFA> <1DFA> <8C91> -<1DFB> <1DFB> <8C99> -<1DFC> <1DFC> <8C9E> -<1DFD> <1DFD> <8CB2> -<1DFE> <1DFE> <8CBF> -<1DFF> <1DFF> <8D4A> -<1E00> <1E00> <8D56> -<1E01> <1E01> <8D61> -<1E02> <1E02> <8D8D> -<1E03> <1E03> <8D94> -<1E04> <1E04> <8D99> -<1E05> <1E05> <8DD1> -<1E06> <1E06> <8DE5> -<1E07> <1E07> <8DF2> -<1E08> <1E08> <8E46> -<1E09> <1E09> <8E49> -<1E0A> <1E0A> <8E4B> -<1E0B> <1E0B> <8E58> -<1E0C> <1E0C> <8EB6> -<1E0D> <1E0D> <8EC6> -<1E0E> <1E0E> <8ED5> -<1E0F> <1E10> <8EDB> -<1E11> <1E11> <8F4A> -<1E12> <1E12> <8F55> -<1E13> <1E14> <8F8C> -<1E15> <1E16> <8F92> -<1E17> <1E17> <8FA3> -<1E18> <1E18> <8FB1> -<1E19> <1E19> <8FBD> -<1E1A> <1E1A> <8FD3> -<1E1B> <1E1B> <8FDD> -<1E1C> <1E1C> <8FE2> -endbfrange -100 beginbfrange -<1E1D> <1E1D> <9049> -<1E1E> <1E1E> <9078> -<1E1F> <1E1F> <9080> -<1E20> <1E20> <9089> -<1E21> <1E21> <90A0> -<1E22> <1E22> <90C0> -<1E23> <1E23> <90E4> -<1E24> <1E25> <90EF> -<1E26> <1E27> <90F7> -<1E28> <1E28> <9146> -<1E29> <1E29> <9158> -<1E2A> <1E2A> <916B> -<1E2B> <1E2B> <916E> -<1E2C> <1E2C> <917E> -<1E2D> <1E2D> <9189> -<1E2E> <1E2E> <91BB> -<1E2F> <1E2F> <91CB> -<1E30> <1E30> <91DA> -<1E31> <1E31> <91E1> -<1E32> <1E32> <91ED> -<1E33> <1E34> <91F3> -<1E35> <1E35> <91FB> -<1E36> <1E36> <9246> -<1E37> <1E38> <9248> -<1E39> <1E3A> <924C> -<1E3B> <1E3B> <925C> -<1E3C> <1E3C> <9290> -<1E3D> <1E3D> <9295> -<1E3E> <1E3E> <929C> -<1E3F> <1E3F> <92BB> -<1E40> <1E40> <92C6> -<1E41> <1E41> <92C8> -<1E42> <1E42> <92CB> -<1E43> <1E43> <92CD> -<1E44> <1E44> <9341> -<1E45> <1E45> <9346> -<1E46> <1E46> <934D> -<1E47> <1E47> <9355> -<1E48> <1E48> <935E> -<1E49> <1E49> <9367> -<1E4A> <1E4A> <936A> -<1E4B> <1E4C> <9370> -<1E4D> <1E4D> <9384> -<1E4E> <1E4E> <9398> -<1E4F> <1E4F> <93BC> -<1E50> <1E50> <93C0> -<1E51> <1E52> <93D2> -<1E53> <1E54> <93D9> -<1E55> <1E55> <93DF> -<1E56> <1E57> <93E4> -<1E58> <1E58> <93E8> -<1E59> <1E59> <9448> -<1E5A> <1E5A> <9458> -<1E5B> <1E5B> <9476> -<1E5C> <1E5C> <9487> -<1E5D> <1E5D> <9489> -<1E5E> <1E5E> <948D> -<1E5F> <1E5F> <94A2> -<1E60> <1E60> <94AC> -<1E61> <1E61> <94AE> -<1E62> <1E62> <94D2> -<1E63> <1E63> <94E0> -<1E64> <1E64> <94F3> -<1E65> <1E66> <9541> -<1E67> <1E67> <954E> -<1E68> <1E68> <9551> -<1E69> <1E69> <9554> -<1E6A> <1E6A> <955F> -<1E6B> <1E6B> <956D> -<1E6C> <1E6C> <9570> -<1E6D> <1E6D> <95C1> -<1E6E> <1E6E> <95CB> -<1E6F> <1E6F> <95D8> -<1E70> <1E70> <95F7> -<1E71> <1E71> <9641> -<1E72> <1E72> <9648> -<1E73> <1E73> <966A> -<1E74> <1E74> <9690> -<1E75> <1E75> <96CB> -<1E76> <1E76> <96D7> -<1E77> <1E77> <96DD> -<1E78> <1E78> <96E0> -<1E79> <1E79> <96F8> -<1E7A> <1E7A> <96FA> -<1E7B> <1E7B> <96FC> -<1E7C> <1E7C> <9751> -<1E7D> <1E7D> <976F> -<1E7E> <1E7E> <9773> -<1E7F> <1E7F> <9789> -<1E80> <1E80> <97C9> -<1E81> <1E82> <97F8> -<1E83> <1E83> <9840> -<1E84> <1E84> <9850> -<1E85> <1E85> <9858> -<1E86> <1E86> <995C> -<1E87> <1E87> <9966> -<1E88> <1E88> <996A> -<1E89> <1E89> <996C> -<1E8A> <1E8A> <9A4F> -<1E8B> <1E8B> <9A59> -endbfrange -80 beginbfrange -<1E8C> <1E8C> <9A6F> -<1E8D> <1E8D> <9A7D> -<1E8E> <1E8E> <9A8B> -<1E8F> <1E8F> <9AC2> -<1E90> <1E90> <9B5C> -<1E91> <1E91> <9B83> -<1E92> <1E92> <9BA0> -<1E93> <1E93> <9BF0> -<1E94> <1E94> <9CA2> -<1E95> <1E95> <9D80> -<1E96> <1E96> <9D8C> -<1E97> <1E97> <9DB7> -<1E98> <1E98> <9DCB> -<1E99> <1E99> <9E64> -<1E9A> <1E9A> <9E69> -<1E9B> <1E9B> <9E8B> -<1E9C> <1E9C> <9E94> -<1E9D> <1E9D> <9FCE> -<1E9E> <1E9E> -<1E9F> <1E9F> -<1EA0> <1EA0> -<1EA1> <1EA1> -<1EA2> <1EA3> -<1EA4> <1EA4> -<1EA5> <1EA5> -<1EA6> <1EA6> -<1EA7> <1EA7> -<1EA8> <1EA8> -<1EA9> <1EA9> -<1EAA> <1EAA> -<1EAB> <1EAB> -<1EAC> <1EAC> -<1EAD> <1EAD> -<1EAE> <1EAE> -<1EAF> <1EAF> -<1EB0> <1EB0> -<1EB1> <1EB1> -<1EB2> <1EB2> -<1EB3> <1EB3> -<1EB4> <1EB4> -<1EB5> <1EB5> -<1EB6> <1EB6> -<1EB7> <1EB7> -<1EB8> <1EB8> -<1EB9> <1EB9> -<1EBA> <1EBA> -<1EBB> <1EBB> -<1EBC> <1EBC> -<1EBD> <1EBD> -<1EBE> <1EBE> -<1EBF> <1EBF> -<1EC0> <1EC0> -<1EC1> <1EC1> -<1EC2> <1EC2> -<1EC3> <1EC3> -<1EC4> <1EC4> -<1EC5> <1EC5> -<1EC6> <1EC6> -<1EC7> <1EC7> -<1EC8> <1EC8> -<1EC9> <1EC9> -<1ECA> <1ECA> -<1ECB> <1ECB> -<1ECC> <1ECC> -<1ECD> <1ECD> -<1ECE> <1ECE> -<1F04> <1F13> <875F> -<1F14> <1F15> <8780> -<204C> <204C> <8143> -<204D> <204D> <818B> -<204E> <204E> <81AC> -<204F> <204F> <814B> -<2050> <2050> <814A> -<2051> <2051> <818C> -<2052> <2052> <8144> -<2054> <2054> <8166> -<2056> <2056> <8168> -<2057> <2057> <8167> -<2059> <2059> <8165> -<205B> <205B> <818D> -endbfrange - -4 usefont % codes in RKSJ-H -27 beginbfrange -<027A> <027B> <8141> -<0289> <028A> <8150> -<0294> <0296> <815B> -<0299> <029D> <8160> -<02A2> <02B3> <8169> -<02B9> <02B9> <8181> -<034A> <034A> <829F> -<034C> <034C> <82A1> -<034E> <034E> <82A3> -<0350> <0350> <82A5> -<0352> <0352> <82A7> -<036C> <036C> <82C1> -<038C> <038C> <82E1> -<038E> <038E> <82E3> -<0390> <0390> <82E5> -<0397> <0397> <82EC> -<039D> <039D> <8340> -<039F> <039F> <8342> -<03A1> <03A1> <8344> -<03A3> <03A3> <8346> -<03A5> <03A5> <8348> -<03BF> <03BF> <8362> -<03DF> <03DF> <8383> -<03E1> <03E1> <8385> -<03E3> <03E3> <8387> -<03EA> <03EA> <838E> -<03F1> <03F2> <8395> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Japan1-UCS2 b/Resources/cmap/Adobe-Japan1-UCS2 deleted file mode 100644 index 7410fb92961..00000000000 --- a/Resources/cmap/Adobe-Japan1-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Adobe-Japan1-UCS2) %%Title: (Adobe-Japan1-UCS2 Adobe Japan1 4) %%Version: 5.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Adobe_Japan1_UCS2) def /Supplement 4 def end def /CMapName /Adobe-Japan1-UCS2 def /CMapVersion 5.001 def /CMapType 1 def /XUID [1 10 25335 1212] def /WMode 0 def 1 begincodespacerange <0000> endcodespacerange 100 beginbfchar <0000> <003D> <00A5> <005D> <00A6> <005E> <007D> <005F> <0303> <0060> <02BC> <0061> <005C> <0062> <02BB> <0063> <007C> <0064> <007E> <0068> <2044> <0069> <0192> <006A> <00A7> <006B> <00A4> <006C> <201C> <006D> <00AB> <0072> <2012> <0075> <00B7> <0076> <00B6> <0077> <2022> <0078> <201A> <0079> <201E> <007A> <201D> <007B> <00BB> <007C> <2026> <007D> <2030> <007E> <00BF> <0081> <00AF> <0085> <030A> <0086> <00B8> <0087> <030B> <0088> <0328> <0089> <030C> <008A> <0336> <008B> <00C6> <008C> <00AA> <008D> <0141> <008E> <00D8> <008F> <0152> <0090> <00BA> <0091> <00E6> <0092> <0131> <0093> <0142> <0094> <00F8> <0095> <0153> <0096> <00DF> <0097> <002D> <0098> <00A9> <0099> <00AC> <009A> <00AE> <009F> <00B5> <00A0> <00B9> <00DF> <0160> <00E0> <0178> <00E1> <017D> <00E2> <0305> <00E3> <0161> <00E4> <2122> <00E5> <017E> <00E6> <0030> <00E7> <2002> <0123> <00A5> <0145> <203E> <0186> <0189> <30EE> <018A> <30AB> <018B> <30B1> <018C> <018D> <30AC> <018E> <30AE> <018F> <30B0> <0190> <30B2> <0191> <30B4> <0192> <30B6> <0193> <30B8> <0194> <30BA> <0195> <30BC> <0196> <30BE> <0197> <30C0> <0198> <30C2> <0199> <30C5> <019A> <30C7> <019B> <30C9> <01A6> <01A7> <01A8> <01F5> <2032> <01F6> <01F7> <2036> <01F8> <005B> <01F9> <005D> <01FA> <01FB> <01FC> <01FD> <0200> <0201> <0202> <2012> <0203> <0204> <3092> endbfchar 100 beginbfchar <0205> <3041> <0206> <3043> <0207> <3045> <0208> <3047> <0209> <3049> <020A> <3083> <020B> <3085> <020C> <3087> <020D> <3063> <020E> <3042> <020F> <3044> <0210> <3046> <0211> <3048> <0214> <304D> <0215> <304F> <0216> <3051> <0217> <3053> <0218> <3055> <0219> <3057> <021A> <3059> <021B> <305B> <021C> <305D> <021D> <305F> <021E> <3061> <021F> <3064> <0220> <3066> <0221> <3068> <0228> <3072> <0229> <3075> <022A> <3078> <022B> <307B> <0231> <3084> <0232> <3086> <0239> <308F> <023A> <3093> <023D> <308E> <023E> <304C> <023F> <304E> <0240> <3050> <0241> <3052> <0242> <3054> <0243> <3056> <0244> <3068> <0245> <305A> <0246> <305C> <0247> <305E> <0248> <3060> <0249> <3062> <024A> <3065> <024B> <3067> <024C> <3069> <0257> <00C4> <0258> <00F9> <0259> <00E9> <025A> <00ED> <025B> <00DF> <025C> <00E7> <025D> <00C7> <025E> <025F> <0262> <00F3> <0263> <00FA> <0264> <00A1> <0265> <00BF> <0266> <00BD> <0267> <00D6> <0268> <00DC> <0269> <00E4> <026A> <00EB> <026B> <00EF> <026C> <00F6> <026D> <00DC> <026E> <00E2> <026F> <00EA> <0270> <00EE> <0271> <00F4> <0272> <00FC> <0273> <00E0> <0274> <00E9> <0275> <25B2> <0276> <00E1> <0277> <007E> <0278> <027C> <027D> <027E> <30FB> <0281> <0282> <0285> <00B4> <0286> <0287> <00A8> <0288> <0289> <203E> <028A> <028F> <3003> <0290> <4EDD> <0294> <30FC> <0295> <2015> <0296> <2010> <0297> endbfchar 100 beginbfchar <0298> <0299> <029A> <2016> <029B> <029C> <2026> <029D> <2025> <02A6> <02A7> <02A8> <02A9> <02B4> <02B5> <02B6> <00B1> <02B7> <00D7> <02B8> <00F7> <02B9> <02BA> <2260> <02BB> <02BC> <02BF> <221E> <02C0> <2234> <02C1> <2642> <02C2> <2640> <02C3> <00B0> <02C6> <2103> <02C7> <02C8> <02CB> <02CC> <02CD> <02CE> <02CF> <02D0> <00A7> <02D1> <2606> <02D2> <2605> <02D3> <25CB> <02D4> <25CF> <02D5> <25CE> <02D6> <25C7> <02D7> <25C6> <02D8> <25A1> <02D9> <25A0> <02DA> <25B3> <02DB> <25B2> <02DC> <25BD> <02DD> <25BC> <02DE> <203B> <02DF> <3012> <02E0> <2192> <02E3> <2193> <02E4> <3013> <02E5> <2208> <02E6> <220B> <02EB> <222A> <02EC> <2229> <02EF> <00AC> <02F0> <21D2> <02F1> <21D4> <02F2> <2200> <02F3> <2203> <02F4> <2220> <02F5> <22A5> <02F6> <2312> <02F7> <2202> <02F8> <2207> <02F9> <2261> <02FA> <2252> <02FD> <221A> <02FE> <223D> <02FF> <221D> <0300> <2235> <0303> <212B> <0304> <2030> <0305> <266F> <0306> <266D> <0307> <266A> <030A> <00B6> <030B> <25EF> <0429> <0401> <044A> <0451> <0465> <4E9C> <0466> <5516> <0467> <5A03> <0468> <963F> <0469> <54C0> <046A> <611B> <046B> <6328> <046C> <59F6> <046D> <9022> <046E> <8475> <046F> <831C> <0470> <7A50> <0471> <60AA> <0472> <63E1> <0473> <6E25> <0474> <65ED> <0475> <8466> <0476> <82A6> <0477> <9BF5> <0478> <6893> endbfchar 100 beginbfchar <0479> <5727> <047A> <65A1> <047B> <6271> <047C> <5B9B> <047D> <59D0> <047E> <867B> <047F> <98F4> <0480> <7D62> <0481> <7DBE> <0482> <9B8E> <0483> <6216> <0484> <7C9F> <0485> <88B7> <0486> <5B89> <0487> <5EB5> <0488> <6309> <0489> <6697> <048A> <6848> <048B> <95C7> <048C> <978D> <048D> <674F> <048E> <4EE5> <048F> <4F0A> <0490> <4F4D> <0491> <4F9D> <0492> <5049> <0493> <56F2> <0494> <5937> <0495> <59D4> <0496> <5A01> <0497> <5C09> <0498> <60DF> <0499> <610F> <049A> <6170> <049B> <6613> <049C> <6905> <049D> <70BA> <049E> <754F> <049F> <7570> <04A0> <79FB> <04A1> <7DAD> <04A2> <7DEF> <04A3> <80C3> <04A4> <840E> <04A5> <8863> <04A6> <8B02> <04A7> <9055> <04A8> <907A> <04A9> <533B> <04AA> <4E95> <04AB> <4EA5> <04AC> <57DF> <04AD> <80B2> <04AE> <90C1> <04AF> <78EF> <04B0> <4E00> <04B1> <58F1> <04B2> <6EA2> <04B3> <9038> <04B4> <7A32> <04B5> <8328> <04B6> <828B> <04B7> <9C2F> <04B8> <5141> <04B9> <5370> <04BA> <54BD> <04BB> <54E1> <04BC> <56E0> <04BD> <59FB> <04BE> <5F15> <04BF> <98F2> <04C0> <6DEB> <04C1> <80E4> <04C2> <852D> <04C3> <9662> <04C4> <9670> <04C5> <96A0> <04C6> <97FB> <04C7> <540B> <04C8> <53F3> <04C9> <5B87> <04CA> <70CF> <04CB> <7FBD> <04CC> <8FC2> <04CD> <96E8> <04CE> <536F> <04CF> <9D5C> <04D0> <7ABA> <04D1> <4E11> <04D2> <7893> <04D3> <81FC> <04D4> <6E26> <04D5> <5618> <04D6> <5504> <04D7> <6B1D> <04D8> <851A> <04D9> <9C3B> <04DA> <59E5> <04DB> <53A9> <04DC> <6D66> endbfchar 100 beginbfchar <04DD> <74DC> <04DE> <958F> <04DF> <5642> <04E0> <4E91> <04E1> <904B> <04E2> <96F2> <04E3> <834F> <04E4> <990C> <04E5> <53E1> <04E6> <55B6> <04E7> <5B30> <04E8> <5F71> <04E9> <6620> <04EA> <66F3> <04EB> <6804> <04EC> <6C38> <04ED> <6CF3> <04EE> <6D29> <04EF> <745B> <04F0> <76C8> <04F1> <7A4E> <04F2> <9834> <04F3> <82F1> <04F4> <885B> <04F5> <8A60> <04F6> <92ED> <04F7> <6DB2> <04F8> <75AB> <04F9> <76CA> <04FA> <99C5> <04FB> <60A6> <04FC> <8B01> <04FD> <8D8A> <04FE> <95B2> <04FF> <698E> <0500> <53AD> <0501> <5186> <0502> <5712> <0503> <5830> <0504> <5944> <0505> <5BB4> <0506> <5EF6> <0507> <6028> <0508> <63A9> <0509> <63F4> <050A> <6CBF> <050B> <6F14> <050C> <708E> <050D> <7114> <050E> <7159> <050F> <71D5> <0510> <733F> <0511> <7E01> <0512> <8276> <0513> <82D1> <0514> <8597> <0515> <9060> <0516> <925B> <0517> <9D1B> <0518> <5869> <0519> <65BC> <051A> <6C5A> <051B> <7525> <051C> <51F9> <051D> <592E> <051E> <5965> <051F> <5F80> <0520> <5FDC> <0521> <62BC> <0522> <65FA> <0523> <6A2A> <0524> <6B27> <0525> <6BB4> <0526> <738B> <0527> <7FC1> <0528> <8956> <0529> <9D2C> <052A> <9D0E> <052B> <9EC4> <052C> <5CA1> <052D> <6C96> <052E> <837B> <052F> <5104> <0530> <5C4B> <0531> <61B6> <0532> <81C6> <0533> <6876> <0534> <7261> <0535> <4E59> <0536> <4FFA> <0537> <5378> <0538> <6069> <0539> <6E29> <053A> <7A4F> <053B> <97F3> <053C> <4E0B> <053D> <5316> <053E> <4EEE> <053F> <4F55> <0540> <4F3D> endbfchar 100 beginbfchar <0541> <4FA1> <0542> <4F73> <0543> <52A0> <0544> <53EF> <0545> <5609> <0546> <590F> <0547> <5AC1> <0548> <5BB6> <0549> <5BE1> <054A> <79D1> <054B> <6687> <054C> <679C> <054D> <67B6> <054E> <6B4C> <054F> <6CB3> <0550> <706B> <0551> <73C2> <0552> <798D> <0553> <79BE> <0554> <7A3C> <0555> <7B87> <0556> <82B1> <0557> <82DB> <0558> <8304> <0559> <8377> <055A> <83EF> <055B> <83D3> <055C> <8766> <055D> <8AB2> <055E> <5629> <055F> <8CA8> <0560> <8FE6> <0561> <904E> <0562> <971E> <0563> <868A> <0564> <4FC4> <0565> <5CE8> <0566> <6211> <0567> <7259> <0568> <753B> <0569> <81E5> <056A> <82BD> <056B> <86FE> <056C> <8CC0> <056D> <96C5> <056E> <9913> <056F> <99D5> <0570> <4ECB> <0571> <4F1A> <0572> <89E3> <0573> <56DE> <0574> <584A> <0575> <58CA> <0576> <5EFB> <0577> <5FEB> <0578> <602A> <0579> <6094> <057A> <6062> <057B> <61D0> <057C> <6212> <057D> <62D0> <057E> <6539> <057F> <9B41> <0580> <6666> <0581> <68B0> <0582> <6D77> <0583> <7070> <0584> <754C> <0585> <7686> <0586> <7D75> <0587> <82A5> <0588> <87F9> <0589> <958B> <058A> <968E> <058B> <8C9D> <058C> <51F1> <058D> <52BE> <058E> <5916> <058F> <54B3> <0590> <5BB3> <0591> <5D16> <0592> <6168> <0593> <6982> <0594> <6DAF> <0595> <788D> <0596> <84CB> <0597> <8857> <0598> <8A72> <0599> <93A7> <059A> <9AB8> <059B> <6D6C> <059C> <99A8> <059D> <86D9> <059E> <57A3> <059F> <67FF> <05A0> <86CE> <05A1> <920E> <05A2> <5283> <05A3> <5687> <05A4> <5404> endbfchar 100 beginbfchar <05A5> <5ED3> <05A6> <62E1> <05A7> <64B9> <05A8> <683C> <05A9> <6838> <05AA> <6BBB> <05AB> <7372> <05AC> <78BA> <05AD> <7A6B> <05AE> <899A> <05AF> <89D2> <05B0> <8D6B> <05B1> <8F03> <05B2> <90ED> <05B3> <95A3> <05B4> <9694> <05B5> <9769> <05B6> <5B66> <05B7> <5CB3> <05B8> <697D> <05BB> <639B> <05BC> <7B20> <05BD> <6A2B> <05BE> <6A7F> <05BF> <68B6> <05C0> <9C0D> <05C1> <6F5F> <05C2> <5272> <05C3> <559D> <05C4> <6070> <05C5> <62EC> <05C6> <6D3B> <05C7> <6E07> <05C8> <6ED1> <05C9> <845B> <05CA> <8910> <05CB> <8F44> <05CC> <4E14> <05CD> <9C39> <05CE> <53F6> <05CF> <691B> <05D0> <6A3A> <05D1> <9784> <05D2> <682A> <05D3> <515C> <05D4> <7AC3> <05D5> <84B2> <05D6> <91DC> <05D7> <938C> <05D8> <565B> <05D9> <9D28> <05DA> <6822> <05DB> <8305> <05DC> <8431> <05DD> <7CA5> <05DE> <5208> <05DF> <82C5> <05E0> <74E6> <05E1> <4E7E> <05E2> <4F83> <05E3> <51A0> <05E4> <5BD2> <05E5> <520A> <05E6> <52D8> <05E7> <52E7> <05E8> <5DFB> <05E9> <559A> <05EA> <582A> <05EB> <59E6> <05EC> <5B8C> <05ED> <5B98> <05EE> <5BDB> <05EF> <5E72> <05F0> <5E79> <05F1> <60A3> <05F2> <611F> <05F3> <6163> <05F4> <61BE> <05F5> <63DB> <05F6> <6562> <05F7> <67D1> <05F8> <6853> <05F9> <68FA> <05FA> <6B3E> <05FB> <6B53> <05FC> <6C57> <05FD> <6F22> <05FE> <6F97> <05FF> <6F45> <0600> <74B0> <0601> <7518> <0602> <76E3> <0603> <770B> <0604> <7AFF> <0605> <7BA1> <0606> <7C21> <0607> <7DE9> <0608> <7F36> <0609> <7FF0> <060A> <809D> endbfchar 100 beginbfchar <060B> <8266> <060C> <839E> <060D> <89B3> <060E> <8ACC> <060F> <8CAB> <0610> <9084> <0611> <9451> <0612> <9593> <0613> <9591> <0614> <95A2> <0615> <9665> <0616> <97D3> <0617> <9928> <0618> <8218> <0619> <4E38> <061A> <542B> <061B> <5CB8> <061C> <5DCC> <061D> <73A9> <061E> <764C> <061F> <773C> <0620> <5CA9> <0621> <7FEB> <0622> <8D0B> <0623> <96C1> <0624> <9811> <0625> <9854> <0626> <9858> <0627> <4F01> <0628> <4F0E> <0629> <5371> <062A> <559C> <062B> <5668> <062C> <57FA> <062D> <5947> <062E> <5B09> <062F> <5BC4> <0630> <5C90> <0631> <5E0C> <0632> <5E7E> <0633> <5FCC> <0634> <63EE> <0635> <673A> <0636> <65D7> <0637> <65E2> <0638> <671F> <0639> <68CB> <063A> <68C4> <063B> <6A5F> <063C> <5E30> <063D> <6BC5> <063E> <6C17> <063F> <6C7D> <0640> <757F> <0641> <7948> <0642> <5B63> <0643> <7A00> <0644> <7D00> <0645> <5FBD> <0646> <898F> <0647> <8A18> <0648> <8CB4> <0649> <8D77> <064A> <8ECC> <064B> <8F1D> <064C> <98E2> <064D> <9A0E> <064E> <9B3C> <064F> <4E80> <0650> <507D> <0651> <5100> <0652> <5993> <0653> <5B9C> <0654> <622F> <0655> <6280> <0656> <64EC> <0657> <6B3A> <0658> <72A0> <0659> <7591> <065A> <7947> <065B> <7FA9> <065C> <87FB> <065D> <8ABC> <065E> <8B70> <065F> <63AC> <0660> <83CA> <0661> <97A0> <0662> <5409> <0663> <5403> <0664> <55AB> <0665> <6854> <0666> <6A58> <0667> <8A70> <0668> <7827> <0669> <6775> <066A> <9ECD> <066B> <5374> <066C> <5BA2> <066D> <811A> <066E> <8650> endbfchar 100 beginbfchar <066F> <9006> <0670> <4E18> <0671> <4E45> <0672> <4EC7> <0673> <4F11> <0674> <53CA> <0675> <5438> <0676> <5BAE> <0677> <5F13> <0678> <6025> <0679> <6551> <067A> <673D> <067B> <6C42> <067C> <6C72> <067D> <6CE3> <067E> <7078> <067F> <7403> <0680> <7A76> <0681> <7AAE> <0682> <7B08> <0683> <7D1A> <0684> <7CFE> <0685> <7D66> <0686> <65E7> <0687> <725B> <0688> <53BB> <0689> <5C45> <068A> <5DE8> <068B> <62D2> <068C> <62E0> <068D> <6319> <068E> <6E20> <068F> <865A> <0690> <8A31> <0691> <8DDD> <0692> <92F8> <0693> <6F01> <0694> <79A6> <0695> <9B5A> <0696> <4EA8> <0699> <4F9B> <069A> <4FA0> <069B> <50D1> <069C> <5147> <069D> <7AF6> <069E> <5171> <069F> <51F6> <06A0> <5354> <06A1> <5321> <06A2> <537F> <06A3> <53EB> <06A4> <55AC> <06A5> <5883> <06A6> <5CE1> <06A7> <5F37> <06A8> <5F4A> <06A9> <602F> <06AA> <6050> <06AB> <606D> <06AC> <631F> <06AD> <6559> <06AE> <6A4B> <06AF> <6CC1> <06B0> <72C2> <06B1> <72ED> <06B2> <77EF> <06B3> <80F8> <06B4> <8105> <06B5> <8208> <06B6> <854E> <06B7> <90F7> <06B8> <93E1> <06B9> <97FF> <06BA> <9957> <06BB> <9A5A> <06BC> <4EF0> <06BD> <51DD> <06BE> <5C2D> <06BF> <6681> <06C0> <696D> <06C1> <5C40> <06C2> <66F2> <06C3> <6975> <06C4> <7389> <06C5> <6850> <06C6> <7C81> <06C7> <50C5> <06C8> <52E4> <06C9> <5747> <06CA> <5DFE> <06CB> <9326> <06CC> <65A4> <06CD> <6B23> <06CE> <6B3D> <06CF> <7434> <06D0> <7981> <06D1> <79BD> <06D2> <7B4B> <06D3> <7DCA> <06D4> <82B9> endbfchar 100 beginbfchar <06D5> <83CC> <06D6> <887F> <06D7> <895F> <06D8> <8B39> <06D9> <8FD1> <06DA> <91D1> <06DB> <541F> <06DC> <9280> <06DD> <4E5D> <06DE> <5036> <06DF> <53E5> <06E0> <533A> <06E1> <72D7> <06E2> <7396> <06E3> <77E9> <06E4> <82E6> <06E5> <8EAF> <06E6> <99C6> <06E7> <99C8> <06E8> <99D2> <06E9> <5177> <06EA> <611A> <06EB> <865E> <06EC> <55B0> <06ED> <7A7A> <06EE> <5076> <06EF> <5BD3> <06F0> <9047> <06F1> <9685> <06F2> <4E32> <06F3> <6ADB> <06F4> <91E7> <06F5> <5C51> <06F6> <5C48> <06F7> <6398> <06F8> <7A9F> <06F9> <6C93> <06FA> <9774> <06FB> <8F61> <06FC> <7AAA> <06FD> <718A> <06FE> <9688> <06FF> <7C82> <0700> <6817> <0701> <7E70> <0702> <6851> <0703> <936C> <0704> <52F2> <0705> <541B> <0706> <85AB> <0707> <8A13> <0708> <7FA4> <0709> <8ECD> <070A> <90E1> <070B> <5366> <070C> <8888> <070D> <7941> <070E> <4FC2> <070F> <50BE> <0710> <5211> <0711> <5144> <0712> <5553> <0713> <572D> <0714> <73EA> <0715> <578B> <0716> <5951> <0717> <5F62> <0718> <5F84> <0719> <6075> <071A> <6176> <071B> <6167> <071C> <61A9> <071D> <63B2> <071E> <643A> <071F> <656C> <0720> <666F> <0721> <6842> <0722> <6E13> <0723> <7566> <0724> <7A3D> <0725> <7CFB> <0726> <7D4C> <0727> <7D99> <0728> <7E4B> <0729> <7F6B> <072A> <830E> <072B> <834A> <072C> <86CD> <072D> <8A08> <072E> <8A63> <072F> <8B66> <0730> <8EFD> <0731> <981A> <0732> <9D8F> <0733> <82B8> <0734> <8FCE> <0735> <9BE8> <0736> <5287> <0737> <621F> <0738> <6483> endbfchar 100 beginbfchar <0739> <6FC0> <073A> <9699> <073B> <6841> <073C> <5091> <073D> <6B20> <073E> <6C7A> <073F> <6F54> <0740> <7A74> <0741> <7D50> <0742> <8840> <0743> <8A23> <0744> <6708> <0745> <4EF6> <0746> <5039> <0747> <5026> <0748> <5065> <0749> <517C> <074A> <5238> <074B> <5263> <074C> <55A7> <074D> <570F> <074E> <5805> <074F> <5ACC> <0750> <5EFA> <0751> <61B2> <0752> <61F8> <0753> <62F3> <0754> <6372> <0755> <691C> <0756> <6A29> <0757> <727D> <0758> <72AC> <0759> <732E> <075A> <7814> <075B> <786F> <075C> <7D79> <075D> <770C> <075E> <80A9> <075F> <898B> <0760> <8B19> <0761> <8CE2> <0762> <8ED2> <0763> <9063> <0764> <9375> <0765> <967A> <0766> <9855> <0767> <9A13> <0768> <9E78> <0769> <5143> <076A> <539F> <076B> <53B3> <076C> <5E7B> <076D> <5F26> <076E> <6E1B> <076F> <6E90> <0770> <7384> <0771> <73FE> <0772> <7D43> <0773> <8237> <0774> <8A00> <0775> <8AFA> <0776> <9650> <0777> <4E4E> <0778> <500B> <0779> <53E4> <077A> <547C> <077B> <56FA> <077C> <59D1> <077D> <5B64> <077E> <5DF1> <077F> <5EAB> <0780> <5F27> <0781> <6238> <0782> <6545> <0783> <67AF> <0784> <6E56> <0785> <72D0> <0786> <7CCA> <0787> <88B4> <0788> <80A1> <0789> <80E1> <078A> <83F0> <078B> <864E> <078C> <8A87> <078D> <8DE8> <078E> <9237> <078F> <96C7> <0790> <9867> <0791> <9F13> <0792> <4E94> <0793> <4E92> <0794> <4F0D> <0795> <5348> <0796> <5449> <0797> <543E> <0798> <5A2F> <0799> <5F8C> <079A> <5FA1> <079B> <609F> <079C> <68A7> endbfchar 100 beginbfchar <079D> <6A8E> <079E> <745A> <079F> <7881> <07A0> <8A9E> <07A1> <8AA4> <07A2> <8B77> <07A3> <9190> <07A4> <4E5E> <07A5> <9BC9> <07A6> <4EA4> <07A7> <4F7C> <07A8> <4FAF> <07A9> <5019> <07AA> <5016> <07AB> <5149> <07AC> <516C> <07AD> <529F> <07AE> <52B9> <07AF> <52FE> <07B0> <539A> <07B1> <53E3> <07B2> <5411> <07B3> <540E> <07B4> <5589> <07B5> <5751> <07B6> <57A2> <07B7> <597D> <07B8> <5B54> <07B9> <5B5D> <07BA> <5B8F> <07BB> <5DE5> <07BC> <5DE7> <07BD> <5DF7> <07BE> <5E78> <07BF> <5E83> <07C0> <5E9A> <07C1> <5EB7> <07C2> <5F18> <07C3> <6052> <07C4> <614C> <07C5> <6297> <07C6> <62D8> <07C7> <63A7> <07C8> <653B> <07C9> <6602> <07CA> <6643> <07CB> <66F4> <07CC> <676D> <07CD> <6821> <07CE> <6897> <07CF> <69CB> <07D0> <6C5F> <07D1> <6D2A> <07D2> <6D69> <07D3> <6E2F> <07D4> <6E9D> <07D5> <7532> <07D6> <7687> <07D7> <786C> <07D8> <7A3F> <07D9> <7CE0> <07DA> <7D05> <07DB> <7D18> <07DC> <7D5E> <07DD> <7DB1> <07DE> <8015> <07DF> <8003> <07E0> <80AF> <07E1> <80B1> <07E2> <8154> <07E3> <818F> <07E4> <822A> <07E5> <8352> <07E6> <884C> <07E7> <8861> <07E8> <8B1B> <07E9> <8CA2> <07EA> <8CFC> <07EB> <90CA> <07EC> <9175> <07ED> <9271> <07EE> <783F> <07EF> <92FC> <07F0> <95A4> <07F1> <964D> <07F2> <9805> <07F3> <9999> <07F4> <9AD8> <07F5> <9D3B> <07F6> <525B> <07F7> <52AB> <07F8> <53F7> <07F9> <5408> <07FA> <58D5> <07FB> <62F7> <07FC> <6FE0> <07FD> <8C6A> <07FE> <8F5F> <07FF> <9EB9> <0800> <514B> endbfchar 100 beginbfchar <0801> <523B> <0802> <544A> <0803> <56FD> <0804> <7A40> <0805> <9177> <0806> <9D60> <0807> <9ED2> <0808> <7344> <0809> <6F09> <080A> <8170> <080B> <7511> <080C> <5FFD> <080D> <60DA> <080E> <9AA8> <080F> <72DB> <0810> <8FBC> <0811> <6B64> <0812> <9803> <0813> <4ECA> <0814> <56F0> <0815> <5764> <0816> <58BE> <0817> <5A5A> <0818> <6068> <0819> <61C7> <081A> <660F> <081B> <6606> <081C> <6839> <081D> <68B1> <081E> <6DF7> <081F> <75D5> <0820> <7D3A> <0821> <826E> <0822> <9B42> <0823> <4E9B> <0824> <4F50> <0825> <53C9> <0826> <5506> <0827> <5D6F> <0828> <5DE6> <0829> <5DEE> <082A> <67FB> <082B> <6C99> <082C> <7473> <082D> <7802> <082E> <8A50> <082F> <9396> <0830> <88DF> <0831> <5750> <0832> <5EA7> <0833> <632B> <0834> <50B5> <0835> <50AC> <0836> <518D> <0837> <6700> <0838> <54C9> <0839> <585E> <083A> <59BB> <083B> <5BB0> <083C> <5F69> <083D> <624D> <083E> <63A1> <083F> <683D> <0840> <6B73> <0841> <6E08> <0842> <707D> <0843> <91C7> <0844> <7280> <0845> <7815> <0846> <7826> <0847> <796D> <0848> <658E> <0849> <7D30> <084A> <83DC> <084B> <88C1> <084C> <8F09> <084D> <969B> <084E> <5264> <084F> <5728> <0850> <6750> <0851> <7F6A> <0852> <8CA1> <0853> <51B4> <0854> <5742> <0855> <962A> <0856> <583A> <0857> <698A> <0858> <80B4> <0859> <54B2> <085A> <5D0E> <085B> <57FC> <085C> <7895> <085D> <9DFA> <085E> <4F5C> <085F> <524A> <0860> <548B> <0861> <643E> <0862> <6628> <0863> <6714> <0864> <67F5> endbfchar 100 beginbfchar <0865> <7A84> <0866> <7B56> <0867> <7D22> <0868> <932F> <0869> <685C> <086A> <9BAD> <086B> <7B39> <086C> <5319> <086D> <518A> <086E> <5237> <086F> <5BDF> <0870> <62F6> <0871> <64AE> <0872> <64E6> <0873> <672D> <0874> <6BBA> <0875> <85A9> <0876> <96D1> <0877> <7690> <0878> <9BD6> <0879> <634C> <087A> <9306> <087B> <9BAB> <087C> <76BF> <087D> <6652> <087E> <4E09> <087F> <5098> <0880> <53C2> <0881> <5C71> <0882> <60E8> <0883> <6492> <0884> <6563> <0885> <685F> <0886> <71E6> <0887> <73CA> <0888> <7523> <0889> <7B97> <088A> <7E82> <088B> <8695> <088C> <8B83> <088D> <8CDB> <088E> <9178> <088F> <9910> <0890> <65AC> <0891> <66AB> <0892> <6B8B> <0893> <4ED5> <0894> <4ED4> <0895> <4F3A> <0896> <4F7F> <0897> <523A> <0898> <53F8> <0899> <53F2> <089A> <55E3> <089B> <56DB> <089C> <58EB> <089D> <59CB> <089E> <59C9> <089F> <59FF> <08A0> <5B50> <08A1> <5C4D> <08A2> <5E02> <08A3> <5E2B> <08A4> <5FD7> <08A5> <601D> <08A6> <6307> <08A7> <652F> <08A8> <5B5C> <08A9> <65AF> <08AA> <65BD> <08AB> <65E8> <08AC> <679D> <08AD> <6B62> <08AE> <6B7B> <08AF> <6C0F> <08B0> <7345> <08B1> <7949> <08B2> <79C1> <08B3> <7CF8> <08B4> <7D19> <08B5> <7D2B> <08B6> <80A2> <08B7> <8102> <08B8> <81F3> <08B9> <8996> <08BA> <8A5E> <08BB> <8A69> <08BC> <8A66> <08BD> <8A8C> <08BE> <8AEE> <08BF> <8CC7> <08C0> <8CDC> <08C1> <96CC> <08C2> <98FC> <08C3> <6B6F> <08C4> <4E8B> <08C5> <4F3C> <08C6> <4F8D> <08C7> <5150> <08C8> <5B57> endbfchar 100 beginbfchar <08C9> <5BFA> <08CA> <6148> <08CB> <6301> <08CC> <6642> <08CD> <6B21> <08CE> <6ECB> <08CF> <6CBB> <08D0> <723E> <08D1> <74BD> <08D2> <75D4> <08D3> <78C1> <08D4> <793A> <08D5> <800C> <08D6> <8033> <08D7> <81EA> <08D8> <8494> <08D9> <8F9E> <08DA> <6C50> <08DB> <9E7F> <08DC> <5F0F> <08DD> <8B58> <08DE> <9D2B> <08DF> <7AFA> <08E0> <8EF8> <08E1> <5B8D> <08E2> <96EB> <08E3> <4E03> <08E4> <53F1> <08E5> <57F7> <08E6> <5931> <08E7> <5AC9> <08E8> <5BA4> <08E9> <6089> <08EA> <6E7F> <08EB> <6F06> <08EC> <75BE> <08ED> <8CEA> <08EE> <5B9F> <08EF> <8500> <08F0> <7BE0> <08F1> <5072> <08F2> <67F4> <08F3> <829D> <08F4> <5C61> <08F5> <854A> <08F6> <7E1E> <08F7> <820E> <08F8> <5199> <08F9> <5C04> <08FA> <6368> <08FB> <8D66> <08FC> <659C> <08FD> <716E> <08FE> <793E> <08FF> <7D17> <0900> <8005> <0901> <8B1D> <0902> <8ECA> <0903> <906E> <0904> <86C7> <0905> <90AA> <0906> <501F> <0907> <52FA> <0908> <5C3A> <0909> <6753> <090A> <707C> <090B> <7235> <090C> <914C> <090D> <91C8> <090E> <932B> <090F> <82E5> <0910> <5BC2> <0911> <5F31> <0912> <60F9> <0913> <4E3B> <0914> <53D6> <0915> <5B88> <0916> <624B> <0917> <6731> <0918> <6B8A> <0919> <72E9> <091A> <73E0> <091B> <7A2E> <091C> <816B> <091D> <8DA3> <091E> <9152> <091F> <9996> <0920> <5112> <0921> <53D7> <0922> <546A> <0923> <5BFF> <0924> <6388> <0925> <6A39> <0926> <7DAC> <0927> <9700> <0928> <56DA> <0929> <53CE> <092A> <5468> <092B> <5B97> <092C> <5C31> endbfchar 100 beginbfchar <092D> <5DDE> <092E> <4FEE> <092F> <6101> <0930> <62FE> <0931> <6D32> <0932> <79C0> <0933> <79CB> <0934> <7D42> <0935> <7E4D> <0936> <7FD2> <0937> <81ED> <0938> <821F> <0939> <8490> <093A> <8846> <093B> <8972> <093C> <8B90> <093D> <8E74> <093E> <8F2F> <093F> <9031> <0940> <914B> <0941> <916C> <0942> <96C6> <0943> <919C> <0944> <4EC0> <0945> <4F4F> <0946> <5145> <0947> <5341> <0948> <5F93> <0949> <620E> <094A> <67D4> <094B> <6C41> <094C> <6E0B> <094D> <7363> <094E> <7E26> <094F> <91CD> <0950> <9283> <0951> <53D4> <0952> <5919> <0953> <5BBF> <0954> <6DD1> <0955> <795D> <0956> <7E2E> <0957> <7C9B> <0958> <587E> <0959> <719F> <095A> <51FA> <095B> <8853> <095C> <8FF0> <095D> <4FCA> <095E> <5CFB> <095F> <6625> <0960> <77AC> <0961> <7AE3> <0962> <821C> <0963> <99FF> <0964> <51C6> <0965> <5FAA> <0966> <65EC> <0967> <696F> <0968> <6B89> <0969> <6DF3> <096A> <6E96> <096B> <6F64> <096C> <76FE> <096D> <7D14> <096E> <5DE1> <096F> <9075> <0970> <9187> <0971> <9806> <0972> <51E6> <0973> <521D> <0974> <6240> <0975> <6691> <0976> <66D9> <0977> <6E1A> <0978> <5EB6> <0979> <7DD2> <097A> <7F72> <097B> <66F8> <097C> <85AF> <097D> <85F7> <097E> <8AF8> <097F> <52A9> <0980> <53D9> <0981> <5973> <0982> <5E8F> <0983> <5F90> <0984> <6055> <0985> <92E4> <0986> <9664> <0987> <50B7> <0988> <511F> <0989> <52DD> <098A> <5320> <098B> <5347> <098C> <53EC> <098D> <54E8> <098E> <5546> <098F> <5531> <0990> <5617> endbfchar 100 beginbfchar <0991> <5968> <0992> <59BE> <0993> <5A3C> <0994> <5BB5> <0995> <5C06> <0996> <5C0F> <0997> <5C11> <0998> <5C1A> <0999> <5E84> <099A> <5E8A> <099B> <5EE0> <099C> <5F70> <099D> <627F> <099E> <6284> <099F> <62DB> <09A0> <638C> <09A1> <6377> <09A2> <6607> <09A3> <660C> <09A4> <662D> <09A5> <6676> <09A6> <677E> <09A7> <68A2> <09A8> <6A1F> <09A9> <6A35> <09AA> <6CBC> <09AB> <6D88> <09AC> <6E09> <09AD> <6E58> <09AE> <713C> <09AF> <7126> <09B0> <7167> <09B1> <75C7> <09B2> <7701> <09B3> <785D> <09B4> <7901> <09B5> <7965> <09B6> <79F0> <09B7> <7AE0> <09B8> <7B11> <09B9> <7CA7> <09BA> <7D39> <09BB> <8096> <09BC> <83D6> <09BD> <848B> <09BE> <8549> <09BF> <885D> <09C0> <88F3> <09C1> <8A1F> <09C2> <8A3C> <09C3> <8A54> <09C4> <8A73> <09C5> <8C61> <09C6> <8CDE> <09C7> <91A4> <09C8> <9266> <09C9> <937E> <09CA> <9418> <09CB> <969C> <09CC> <9798> <09CD> <4E0A> <09CE> <4E08> <09CF> <4E1E> <09D0> <4E57> <09D1> <5197> <09D2> <5270> <09D3> <57CE> <09D4> <5834> <09D5> <58CC> <09D6> <5B22> <09D7> <5E38> <09D8> <60C5> <09D9> <64FE> <09DA> <6761> <09DB> <6756> <09DC> <6D44> <09DD> <72B6> <09DE> <7573> <09DF> <7A63> <09E0> <84B8> <09E1> <8B72> <09E2> <91B8> <09E3> <9320> <09E4> <5631> <09E5> <57F4> <09E6> <98FE> <09E7> <62ED> <09E8> <690D> <09E9> <6B96> <09EA> <71ED> <09EB> <7E54> <09EC> <8077> <09ED> <8272> <09EE> <89E6> <09EF> <98DF> <09F0> <8755> <09F1> <8FB1> <09F2> <5C3B> <09F3> <4F38> <09F4> <4FE1> endbfchar 100 beginbfchar <09F5> <4FB5> <09F6> <5507> <09F7> <5A20> <09F8> <5BDD> <09F9> <5BE9> <09FA> <5FC3> <09FB> <614E> <09FC> <632F> <09FD> <65B0> <09FE> <664B> <09FF> <68EE> <0A00> <699B> <0A01> <6D78> <0A02> <6DF1> <0A03> <7533> <0A04> <75B9> <0A05> <771F> <0A06> <795E> <0A07> <79E6> <0A08> <7D33> <0A09> <81E3> <0A0A> <82AF> <0A0B> <85AA> <0A0C> <89AA> <0A0D> <8A3A> <0A0E> <8EAB> <0A0F> <8F9B> <0A10> <9032> <0A11> <91DD> <0A12> <9707> <0A13> <4EBA> <0A14> <4EC1> <0A15> <5203> <0A16> <5875> <0A17> <58EC> <0A18> <5C0B> <0A19> <751A> <0A1A> <5C3D> <0A1B> <814E> <0A1C> <8A0A> <0A1D> <8FC5> <0A1E> <9663> <0A1F> <976D> <0A20> <7B25> <0A21> <8ACF> <0A22> <9808> <0A23> <9162> <0A24> <56F3> <0A25> <53A8> <0A26> <9017> <0A27> <5439> <0A28> <5782> <0A29> <5E25> <0A2A> <63A8> <0A2B> <6C34> <0A2C> <708A> <0A2D> <7761> <0A2E> <7C8B> <0A2F> <7FE0> <0A30> <8870> <0A31> <9042> <0A32> <9154> <0A33> <9310> <0A34> <9318> <0A35> <968F> <0A36> <745E> <0A37> <9AC4> <0A38> <5D07> <0A39> <5D69> <0A3A> <6570> <0A3B> <67A2> <0A3C> <8DA8> <0A3D> <96DB> <0A3E> <636E> <0A3F> <6749> <0A40> <6919> <0A41> <83C5> <0A42> <9817> <0A43> <96C0> <0A44> <88FE> <0A45> <6F84> <0A46> <647A> <0A47> <5BF8> <0A48> <4E16> <0A49> <702C> <0A4A> <755D> <0A4B> <662F> <0A4C> <51C4> <0A4D> <5236> <0A4E> <52E2> <0A4F> <59D3> <0A50> <5F81> <0A51> <6027> <0A52> <6210> <0A53> <653F> <0A54> <6574> <0A55> <661F> <0A56> <6674> <0A57> <68F2> <0A58> <6816> endbfchar 100 beginbfchar <0A59> <6B63> <0A5A> <6E05> <0A5B> <7272> <0A5C> <751F> <0A5D> <76DB> <0A5E> <7CBE> <0A5F> <8056> <0A60> <58F0> <0A61> <88FD> <0A62> <897F> <0A63> <8AA0> <0A64> <8A93> <0A65> <8ACB> <0A66> <901D> <0A67> <9192> <0A68> <9752> <0A69> <9759> <0A6A> <6589> <0A6B> <7A0E> <0A6C> <8106> <0A6D> <96BB> <0A6E> <5E2D> <0A6F> <60DC> <0A70> <621A> <0A71> <65A5> <0A72> <6614> <0A73> <6790> <0A74> <77F3> <0A75> <7A4D> <0A76> <7C4D> <0A77> <7E3E> <0A78> <810A> <0A79> <8CAC> <0A7A> <8D64> <0A7B> <8DE1> <0A7C> <8E5F> <0A7D> <78A9> <0A7E> <5207> <0A7F> <62D9> <0A80> <63A5> <0A81> <6442> <0A82> <6298> <0A83> <8A2D> <0A84> <7A83> <0A85> <7BC0> <0A86> <8AAC> <0A87> <96EA> <0A88> <7D76> <0A89> <820C> <0A8A> <8749> <0A8B> <4ED9> <0A8C> <5148> <0A8D> <5343> <0A8E> <5360> <0A8F> <5BA3> <0A90> <5C02> <0A91> <5C16> <0A92> <5DDD> <0A93> <6226> <0A94> <6247> <0A95> <64B0> <0A96> <6813> <0A97> <6834> <0A98> <6CC9> <0A99> <6D45> <0A9A> <6D17> <0A9B> <67D3> <0A9C> <6F5C> <0A9D> <714E> <0A9E> <717D> <0A9F> <65CB> <0AA0> <7A7F> <0AA1> <7BAD> <0AA2> <7DDA> <0AA3> <7E4A> <0AA4> <7FA8> <0AA5> <817A> <0AA6> <821B> <0AA7> <8239> <0AA8> <85A6> <0AA9> <8A6E> <0AAA> <8CCE> <0AAB> <8DF5> <0AAC> <9078> <0AAD> <9077> <0AAE> <92AD> <0AAF> <9291> <0AB0> <9583> <0AB1> <9BAE> <0AB2> <524D> <0AB3> <5584> <0AB4> <6F38> <0AB5> <7136> <0AB6> <5168> <0AB7> <7985> <0AB8> <7E55> <0AB9> <81B3> <0ABA> <7CCE> <0ABB> <564C> <0ABC> <5851> endbfchar 100 beginbfchar <0ABD> <5CA8> <0ABE> <63AA> <0ABF> <66FE> <0AC0> <66FD> <0AC1> <695A> <0AC2> <72D9> <0AC3> <758F> <0AC4> <758E> <0AC5> <790E> <0AC6> <7956> <0AC7> <79DF> <0AC8> <7C97> <0AC9> <7D20> <0ACA> <7D44> <0ACB> <8607> <0ACC> <8A34> <0ACD> <963B> <0ACE> <9061> <0ACF> <9F20> <0AD0> <50E7> <0AD1> <5275> <0AD2> <53CC> <0AD3> <53E2> <0AD4> <5009> <0AD5> <55AA> <0AD6> <58EE> <0AD7> <594F> <0AD8> <723D> <0AD9> <5B8B> <0ADA> <5C64> <0ADB> <531D> <0ADC> <60E3> <0ADD> <60F3> <0ADE> <635C> <0ADF> <6383> <0AE0> <633F> <0AE1> <63BB> <0AE2> <64CD> <0AE3> <65E9> <0AE4> <66F9> <0AE5> <5DE3> <0AE6> <69CD> <0AE7> <69FD> <0AE8> <6F15> <0AE9> <71E5> <0AEA> <4E89> <0AEB> <75E9> <0AEC> <76F8> <0AED> <7A93> <0AEE> <7CDF> <0AEF> <7DCF> <0AF0> <7D9C> <0AF1> <8061> <0AF2> <8349> <0AF3> <8358> <0AF4> <846C> <0AF5> <84BC> <0AF6> <85FB> <0AF7> <88C5> <0AF8> <8D70> <0AF9> <9001> <0AFA> <906D> <0AFB> <9397> <0AFC> <971C> <0AFD> <9A12> <0AFE> <50CF> <0AFF> <5897> <0B00> <618E> <0B01> <81D3> <0B02> <8535> <0B03> <8D08> <0B04> <9020> <0B05> <4FC3> <0B06> <5074> <0B07> <5247> <0B08> <5373> <0B09> <606F> <0B0A> <6349> <0B0B> <675F> <0B0C> <6E2C> <0B0D> <8DB3> <0B0E> <901F> <0B0F> <4FD7> <0B10> <5C5E> <0B11> <8CCA> <0B12> <65CF> <0B13> <7D9A> <0B14> <5352> <0B15> <8896> <0B16> <5176> <0B17> <63C3> <0B18> <5B58> <0B19> <5B6B> <0B1A> <5C0A> <0B1B> <640D> <0B1C> <6751> <0B1D> <905C> <0B1E> <4ED6> <0B1F> <591A> <0B20> <592A> endbfchar 100 beginbfchar <0B21> <6C70> <0B22> <8A51> <0B23> <553E> <0B24> <5815> <0B25> <59A5> <0B26> <60F0> <0B27> <6253> <0B28> <67C1> <0B29> <8235> <0B2A> <6955> <0B2B> <9640> <0B2C> <99C4> <0B2D> <9A28> <0B2E> <4F53> <0B2F> <5806> <0B30> <5BFE> <0B31> <8010> <0B32> <5CB1> <0B33> <5E2F> <0B34> <5F85> <0B35> <6020> <0B36> <614B> <0B37> <6234> <0B38> <66FF> <0B39> <6CF0> <0B3A> <6EDE> <0B3B> <80CE> <0B3C> <817F> <0B3D> <82D4> <0B3E> <888B> <0B3F> <8CB8> <0B40> <9000> <0B41> <902E> <0B42> <968A> <0B43> <9EDB> <0B44> <9BDB> <0B45> <4EE3> <0B46> <53F0> <0B47> <5927> <0B48> <7B2C> <0B49> <918D> <0B4A> <984C> <0B4B> <9DF9> <0B4C> <6EDD> <0B4D> <7027> <0B4E> <5353> <0B4F> <5544> <0B50> <5B85> <0B51> <6258> <0B52> <629E> <0B53> <62D3> <0B54> <6CA2> <0B55> <6FEF> <0B56> <7422> <0B57> <8A17> <0B58> <9438> <0B59> <6FC1> <0B5A> <8AFE> <0B5B> <8338> <0B5C> <51E7> <0B5D> <86F8> <0B5E> <53EA> <0B5F> <53E9> <0B60> <4F46> <0B61> <9054> <0B62> <8FB0> <0B63> <596A> <0B64> <8131> <0B65> <5DFD> <0B66> <7AEA> <0B67> <8FBF> <0B68> <68DA> <0B69> <8C37> <0B6A> <72F8> <0B6B> <9C48> <0B6C> <6A3D> <0B6D> <8AB0> <0B6E> <4E39> <0B6F> <5358> <0B70> <5606> <0B71> <5766> <0B72> <62C5> <0B73> <63A2> <0B74> <65E6> <0B75> <6B4E> <0B76> <6DE1> <0B77> <6E5B> <0B78> <70AD> <0B79> <77ED> <0B7A> <7AEF> <0B7B> <7BAA> <0B7C> <7DBB> <0B7D> <803D> <0B7E> <80C6> <0B7F> <86CB> <0B80> <8A95> <0B81> <935B> <0B82> <56E3> <0B83> <58C7> <0B84> <5F3E> endbfchar 100 beginbfchar <0B85> <65AD> <0B86> <6696> <0B87> <6A80> <0B88> <6BB5> <0B89> <7537> <0B8A> <8AC7> <0B8B> <5024> <0B8C> <77E5> <0B8D> <5730> <0B8E> <5F1B> <0B8F> <6065> <0B90> <667A> <0B91> <6C60> <0B92> <75F4> <0B93> <7A1A> <0B94> <7F6E> <0B95> <81F4> <0B96> <8718> <0B97> <9045> <0B98> <99B3> <0B99> <7BC9> <0B9A> <755C> <0B9B> <7AF9> <0B9C> <7B51> <0B9D> <84C4> <0B9E> <9010> <0B9F> <79E9> <0BA0> <7A92> <0BA1> <8336> <0BA2> <5AE1> <0BA3> <7740> <0BA4> <4E2D> <0BA5> <4EF2> <0BA6> <5B99> <0BA7> <5FE0> <0BA8> <62BD> <0BA9> <663C> <0BAA> <67F1> <0BAB> <6CE8> <0BAC> <866B> <0BAD> <8877> <0BAE> <8A3B> <0BAF> <914E> <0BB0> <92F3> <0BB1> <99D0> <0BB2> <6A17> <0BB3> <7026> <0BB4> <732A> <0BB5> <82E7> <0BB6> <8457> <0BB7> <8CAF> <0BB8> <4E01> <0BB9> <5146> <0BBA> <51CB> <0BBB> <558B> <0BBC> <5BF5> <0BBD> <5E16> <0BBE> <5E33> <0BBF> <5E81> <0BC0> <5F14> <0BC1> <5F35> <0BC2> <5F6B> <0BC3> <5FB4> <0BC4> <61F2> <0BC5> <6311> <0BC6> <66A2> <0BC7> <671D> <0BC8> <6F6E> <0BC9> <7252> <0BCA> <753A> <0BCB> <773A> <0BCC> <8074> <0BCD> <8139> <0BCE> <8178> <0BCF> <8776> <0BD0> <8ABF> <0BD1> <8ADC> <0BD2> <8D85> <0BD3> <8DF3> <0BD4> <929A> <0BD5> <9577> <0BD6> <9802> <0BD7> <9CE5> <0BD8> <52C5> <0BD9> <6357> <0BDA> <76F4> <0BDB> <6715> <0BDC> <6C88> <0BDD> <73CD> <0BDE> <8CC3> <0BDF> <93AE> <0BE0> <9673> <0BE1> <6D25> <0BE2> <589C> <0BE3> <690E> <0BE4> <69CC> <0BE5> <8FFD> <0BE6> <939A> <0BE7> <75DB> <0BE8> <901A> endbfchar 100 beginbfchar <0BE9> <585A> <0BEA> <6802> <0BEB> <63B4> <0BEC> <69FB> <0BED> <4F43> <0BEE> <6F2C> <0BEF> <67D8> <0BF0> <8FBB> <0BF1> <8526> <0BF2> <7DB4> <0BF3> <9354> <0BF4> <693F> <0BF5> <6F70> <0BF6> <576A> <0BF7> <58F7> <0BF8> <5B2C> <0BF9> <7D2C> <0BFA> <722A> <0BFB> <540A> <0BFC> <91E3> <0BFD> <9DB4> <0BFE> <4EAD> <0BFF> <4F4E> <0C00> <505C> <0C01> <5075> <0C02> <5243> <0C03> <8C9E> <0C04> <5448> <0C05> <5824> <0C06> <5B9A> <0C07> <5E1D> <0C08> <5E95> <0C09> <5EAD> <0C0A> <5EF7> <0C0B> <5F1F> <0C0C> <608C> <0C0D> <62B5> <0C0E> <633A> <0C0F> <63D0> <0C10> <68AF> <0C11> <6C40> <0C12> <7887> <0C13> <798E> <0C14> <7A0B> <0C15> <7DE0> <0C16> <8247> <0C17> <8A02> <0C18> <8AE6> <0C19> <8E44> <0C1A> <9013> <0C1B> <90B8> <0C1C> <912D> <0C1D> <91D8> <0C1E> <9F0E> <0C1F> <6CE5> <0C20> <6458> <0C21> <64E2> <0C22> <6575> <0C23> <6EF4> <0C24> <7684> <0C25> <7B1B> <0C26> <9069> <0C27> <93D1> <0C28> <6EBA> <0C29> <54F2> <0C2A> <5FB9> <0C2B> <64A4> <0C2C> <8F4D> <0C2D> <8FED> <0C2E> <9244> <0C2F> <5178> <0C30> <586B> <0C31> <5929> <0C32> <5C55> <0C33> <5E97> <0C34> <6DFB> <0C35> <7E8F> <0C36> <751C> <0C37> <8CBC> <0C38> <8EE2> <0C39> <985B> <0C3A> <70B9> <0C3B> <4F1D> <0C3C> <6BBF> <0C3D> <6FB1> <0C3E> <7530> <0C3F> <96FB> <0C40> <514E> <0C41> <5410> <0C42> <5835> <0C43> <5857> <0C44> <59AC> <0C45> <5C60> <0C46> <5F92> <0C47> <6597> <0C48> <675C> <0C49> <6E21> <0C4A> <767B> <0C4B> <83DF> <0C4C> <8CED> endbfchar 100 beginbfchar <0C4D> <9014> <0C4E> <90FD> <0C4F> <934D> <0C50> <7825> <0C51> <783A> <0C52> <52AA> <0C53> <5EA6> <0C54> <571F> <0C55> <5974> <0C56> <6012> <0C57> <5012> <0C58> <515A> <0C59> <51AC> <0C5A> <51CD> <0C5B> <5200> <0C5C> <5510> <0C5D> <5854> <0C5E> <5858> <0C5F> <5957> <0C60> <5B95> <0C61> <5CF6> <0C62> <5D8B> <0C63> <60BC> <0C64> <6295> <0C65> <642D> <0C66> <6771> <0C67> <6843> <0C68> <68BC> <0C69> <68DF> <0C6A> <76D7> <0C6B> <6DD8> <0C6C> <6E6F> <0C6D> <6D9B> <0C6E> <706F> <0C6F> <71C8> <0C70> <5F53> <0C71> <75D8> <0C72> <7977> <0C73> <7B49> <0C74> <7B54> <0C75> <7B52> <0C76> <7CD6> <0C77> <7D71> <0C78> <5230> <0C79> <8463> <0C7A> <8569> <0C7B> <85E4> <0C7C> <8A0E> <0C7D> <8B04> <0C7E> <8C46> <0C7F> <8E0F> <0C80> <9003> <0C81> <900F> <0C82> <9419> <0C83> <9676> <0C84> <982D> <0C85> <9A30> <0C86> <95D8> <0C87> <50CD> <0C88> <52D5> <0C89> <540C> <0C8A> <5802> <0C8B> <5C0E> <0C8C> <61A7> <0C8D> <649E> <0C8E> <6D1E> <0C8F> <77B3> <0C90> <7AE5> <0C91> <80F4> <0C92> <8404> <0C93> <9053> <0C94> <9285> <0C95> <5CE0> <0C96> <9D07> <0C97> <533F> <0C98> <5F97> <0C99> <5FB3> <0C9A> <6D9C> <0C9B> <7279> <0C9C> <7763> <0C9D> <79BF> <0C9E> <7BE4> <0C9F> <6BD2> <0CA0> <72EC> <0CA1> <8AAD> <0CA2> <6803> <0CA3> <6A61> <0CA4> <51F8> <0CA5> <7A81> <0CA6> <6934> <0CA7> <5C4A> <0CA8> <9CF6> <0CA9> <82EB> <0CAA> <5BC5> <0CAB> <9149> <0CAC> <701E> <0CAD> <5678> <0CAE> <5C6F> <0CAF> <60C7> <0CB0> <6566> endbfchar 100 beginbfchar <0CB1> <6C8C> <0CB2> <8C5A> <0CB3> <9041> <0CB4> <9813> <0CB5> <5451> <0CB6> <66C7> <0CB7> <920D> <0CB8> <5948> <0CB9> <90A3> <0CBA> <5185> <0CBB> <4E4D> <0CBC> <51EA> <0CBD> <8599> <0CBE> <8B0E> <0CBF> <7058> <0CC0> <637A> <0CC1> <934B> <0CC2> <6962> <0CC3> <99B4> <0CC4> <7E04> <0CC5> <7577> <0CC6> <5357> <0CC7> <6960> <0CC8> <8EDF> <0CC9> <96E3> <0CCA> <6C5D> <0CCB> <4E8C> <0CCC> <5C3C> <0CCD> <5F10> <0CCE> <8FE9> <0CCF> <5302> <0CD0> <8CD1> <0CD1> <8089> <0CD2> <8679> <0CD3> <5EFF> <0CD4> <65E5> <0CD5> <4E73> <0CD6> <5165> <0CD7> <5982> <0CD8> <5C3F> <0CD9> <97EE> <0CDA> <4EFB> <0CDB> <598A> <0CDC> <5FCD> <0CDD> <8A8D> <0CDE> <6FE1> <0CDF> <79B0> <0CE0> <7962> <0CE1> <5BE7> <0CE2> <8471> <0CE3> <732B> <0CE4> <71B1> <0CE5> <5E74> <0CE6> <5FF5> <0CE7> <637B> <0CE8> <649A> <0CE9> <71C3> <0CEA> <7C98> <0CEB> <4E43> <0CEC> <5EFC> <0CED> <4E4B> <0CEE> <57DC> <0CEF> <56A2> <0CF0> <60A9> <0CF1> <6FC3> <0CF2> <7D0D> <0CF3> <80FD> <0CF4> <8133> <0CF5> <81BF> <0CF6> <8FB2> <0CF7> <8997> <0CF8> <86A4> <0CF9> <5DF4> <0CFA> <628A> <0CFB> <64AD> <0CFC> <8987> <0CFD> <6777> <0CFE> <6CE2> <0CFF> <6D3E> <0D00> <7436> <0D01> <7834> <0D02> <5A46> <0D03> <7F75> <0D04> <82AD> <0D05> <99AC> <0D06> <4FF3> <0D07> <5EC3> <0D08> <62DD> <0D09> <6392> <0D0A> <6557> <0D0B> <676F> <0D0C> <76C3> <0D0D> <724C> <0D0E> <80CC> <0D0F> <80BA> <0D10> <8F29> <0D11> <914D> <0D12> <500D> <0D13> <57F9> <0D14> <5A92> endbfchar 100 beginbfchar <0D15> <6885> <0D16> <6973> <0D17> <7164> <0D18> <72FD> <0D19> <8CB7> <0D1A> <58F2> <0D1B> <8CE0> <0D1C> <966A> <0D1D> <9019> <0D1E> <877F> <0D1F> <79E4> <0D20> <77E7> <0D21> <8429> <0D22> <4F2F> <0D23> <5265> <0D24> <535A> <0D25> <62CD> <0D26> <67CF> <0D27> <6CCA> <0D28> <767D> <0D29> <7B94> <0D2A> <7C95> <0D2B> <8236> <0D2C> <8584> <0D2D> <8FEB> <0D2E> <66DD> <0D2F> <6F20> <0D30> <7206> <0D31> <7E1B> <0D32> <83AB> <0D33> <99C1> <0D34> <9EA6> <0D35> <51FD> <0D36> <7BB1> <0D37> <7872> <0D38> <7BB8> <0D39> <8087> <0D3A> <7B48> <0D3B> <6AE8> <0D3C> <5E61> <0D3D> <808C> <0D3E> <7551> <0D3F> <7560> <0D40> <516B> <0D41> <9262> <0D42> <6E8C> <0D43> <767A> <0D44> <9197> <0D45> <9AEA> <0D46> <4F10> <0D47> <7F70> <0D48> <629C> <0D49> <7B4F> <0D4A> <95A5> <0D4B> <9CE9> <0D4C> <567A> <0D4D> <5859> <0D4E> <86E4> <0D4F> <96BC> <0D50> <4F34> <0D51> <5224> <0D52> <534A> <0D53> <53CD> <0D54> <53DB> <0D55> <5E06> <0D56> <642C> <0D57> <6591> <0D58> <677F> <0D59> <6C3E> <0D5A> <6C4E> <0D5B> <7248> <0D5C> <72AF> <0D5D> <73ED> <0D5E> <7554> <0D5F> <7E41> <0D60> <822C> <0D61> <85E9> <0D62> <8CA9> <0D63> <7BC4> <0D64> <91C6> <0D65> <7169> <0D66> <9812> <0D67> <98EF> <0D68> <633D> <0D69> <6669> <0D6A> <756A> <0D6B> <76E4> <0D6C> <78D0> <0D6D> <8543> <0D6E> <86EE> <0D6F> <532A> <0D70> <5351> <0D71> <5426> <0D72> <5983> <0D73> <5E87> <0D74> <5F7C> <0D75> <60B2> <0D76> <6249> <0D77> <6279> <0D78> <62AB> endbfchar 100 beginbfchar <0D79> <6590> <0D7A> <6BD4> <0D7B> <6CCC> <0D7C> <75B2> <0D7D> <76AE> <0D7E> <7891> <0D7F> <79D8> <0D80> <7DCB> <0D81> <7F77> <0D82> <80A5> <0D83> <88AB> <0D84> <8AB9> <0D85> <8CBB> <0D86> <907F> <0D87> <975E> <0D88> <98DB> <0D89> <6A0B> <0D8A> <7C38> <0D8B> <5099> <0D8C> <5C3E> <0D8D> <5FAE> <0D8E> <6787> <0D8F> <6BD8> <0D90> <7435> <0D91> <7709> <0D92> <7F8E> <0D93> <9F3B> <0D94> <67CA> <0D95> <7A17> <0D96> <5339> <0D97> <758B> <0D98> <9AED> <0D99> <5F66> <0D9A> <819D> <0D9B> <83F1> <0D9C> <8098> <0D9D> <5F3C> <0D9E> <5FC5> <0D9F> <7562> <0DA0> <7B46> <0DA1> <903C> <0DA2> <6867> <0DA3> <59EB> <0DA4> <5A9B> <0DA5> <7D10> <0DA6> <767E> <0DA7> <8B2C> <0DA8> <4FF5> <0DA9> <5F6A> <0DAA> <6A19> <0DAB> <6C37> <0DAC> <6F02> <0DAD> <74E2> <0DAE> <7968> <0DAF> <8868> <0DB0> <8A55> <0DB1> <8C79> <0DB2> <5EDF> <0DB3> <63CF> <0DB4> <75C5> <0DB5> <79D2> <0DB6> <82D7> <0DB7> <9328> <0DB8> <92F2> <0DB9> <849C> <0DBA> <86ED> <0DBB> <9C2D> <0DBC> <54C1> <0DBD> <5F6C> <0DBE> <658C> <0DBF> <6D5C> <0DC0> <7015> <0DC1> <8CA7> <0DC2> <8CD3> <0DC3> <983B> <0DC4> <654F> <0DC5> <74F6> <0DC6> <4E0D> <0DC7> <4ED8> <0DC8> <57E0> <0DC9> <592B> <0DCA> <5A66> <0DCB> <5BCC> <0DCC> <51A8> <0DCD> <5E03> <0DCE> <5E9C> <0DCF> <6016> <0DD0> <6276> <0DD1> <6577> <0DD2> <65A7> <0DD3> <666E> <0DD4> <6D6E> <0DD5> <7236> <0DD6> <7B26> <0DD7> <8150> <0DD8> <819A> <0DD9> <8299> <0DDA> <8B5C> <0DDB> <8CA0> <0DDC> <8CE6> endbfchar 100 beginbfchar <0DDD> <8D74> <0DDE> <961C> <0DDF> <9644> <0DE0> <4FAE> <0DE1> <64AB> <0DE2> <6B66> <0DE3> <821E> <0DE4> <8461> <0DE5> <856A> <0DE6> <90E8> <0DE7> <5C01> <0DE8> <6953> <0DE9> <98A8> <0DEA> <847A> <0DEB> <8557> <0DEC> <4F0F> <0DED> <526F> <0DEE> <5FA9> <0DEF> <5E45> <0DF0> <670D> <0DF1> <798F> <0DF2> <8179> <0DF3> <8907> <0DF4> <8986> <0DF5> <6DF5> <0DF6> <5F17> <0DF7> <6255> <0DF8> <6CB8> <0DF9> <4ECF> <0DFA> <7269> <0DFB> <9B92> <0DFC> <5206> <0DFD> <543B> <0DFE> <5674> <0DFF> <58B3> <0E00> <61A4> <0E01> <626E> <0E02> <711A> <0E03> <596E> <0E04> <7C89> <0E05> <7CDE> <0E06> <7D1B> <0E07> <96F0> <0E08> <6587> <0E09> <805E> <0E0A> <4E19> <0E0B> <4F75> <0E0C> <5175> <0E0D> <5840> <0E0E> <5E63> <0E0F> <5E73> <0E10> <5F0A> <0E11> <67C4> <0E12> <4E26> <0E13> <853D> <0E14> <9589> <0E15> <965B> <0E16> <7C73> <0E17> <9801> <0E18> <50FB> <0E19> <58C1> <0E1A> <7656> <0E1B> <78A7> <0E1C> <5225> <0E1D> <77A5> <0E1E> <8511> <0E1F> <7B86> <0E20> <504F> <0E21> <5909> <0E22> <7247> <0E23> <7BC7> <0E24> <7DE8> <0E25> <8FBA> <0E26> <8FD4> <0E27> <904D> <0E28> <4FBF> <0E29> <52C9> <0E2A> <5A29> <0E2B> <5F01> <0E2C> <97AD> <0E2D> <4FDD> <0E2E> <8217> <0E2F> <92EA> <0E30> <5703> <0E31> <6355> <0E32> <6B69> <0E33> <752B> <0E34> <88DC> <0E35> <8F14> <0E36> <7A42> <0E37> <52DF> <0E38> <5893> <0E39> <6155> <0E3A> <620A> <0E3B> <66AE> <0E3C> <6BCD> <0E3D> <7C3F> <0E3E> <83E9> <0E3F> <5023> <0E40> <4FF8> endbfchar 100 beginbfchar <0E41> <5305> <0E42> <5446> <0E43> <5831> <0E44> <5949> <0E45> <5B9D> <0E46> <5CF0> <0E47> <5CEF> <0E48> <5D29> <0E49> <5E96> <0E4A> <62B1> <0E4B> <6367> <0E4C> <653E> <0E4D> <65B9> <0E4E> <670B> <0E4F> <6CD5> <0E50> <6CE1> <0E51> <70F9> <0E52> <7832> <0E53> <7E2B> <0E54> <80DE> <0E55> <82B3> <0E56> <840C> <0E57> <84EC> <0E58> <8702> <0E59> <8912> <0E5A> <8A2A> <0E5B> <8C4A> <0E5C> <90A6> <0E5D> <92D2> <0E5E> <98FD> <0E5F> <9CF3> <0E60> <9D6C> <0E61> <4E4F> <0E62> <4EA1> <0E63> <508D> <0E64> <5256> <0E65> <574A> <0E66> <59A8> <0E67> <5E3D> <0E6A> <623F> <0E6B> <66B4> <0E6C> <671B> <0E6D> <67D0> <0E6E> <68D2> <0E6F> <5192> <0E70> <7D21> <0E71> <80AA> <0E72> <81A8> <0E73> <8B00> <0E74> <8C8C> <0E75> <8CBF> <0E76> <927E> <0E77> <9632> <0E78> <5420> <0E79> <982C> <0E7A> <5317> <0E7B> <50D5> <0E7C> <535C> <0E7D> <58A8> <0E7E> <64B2> <0E7F> <6734> <0E80> <7267> <0E81> <7766> <0E82> <7A46> <0E83> <91E6> <0E84> <52C3> <0E85> <6CA1> <0E86> <6B86> <0E87> <5800> <0E88> <5E4C> <0E89> <5954> <0E8A> <672C> <0E8B> <7FFB> <0E8C> <51E1> <0E8D> <76C6> <0E8E> <6469> <0E8F> <78E8> <0E90> <9B54> <0E91> <9EBB> <0E92> <57CB> <0E93> <59B9> <0E94> <6627> <0E95> <679A> <0E96> <6BCE> <0E97> <54E9> <0E98> <69D9> <0E99> <5E55> <0E9A> <819C> <0E9B> <6795> <0E9C> <9BAA> <0E9D> <67FE> <0E9E> <9C52> <0E9F> <685D> <0EA0> <4EA6> <0EA1> <4FE3> <0EA2> <53C8> <0EA3> <62B9> <0EA4> <672B> <0EA5> <6CAB> <0EA6> <8FC4> endbfchar 100 beginbfchar <0EA7> <4FAD> <0EA8> <7E6D> <0EA9> <9EBF> <0EAA> <4E07> <0EAB> <6162> <0EAC> <6E80> <0EAD> <6F2B> <0EAE> <8513> <0EAF> <5473> <0EB0> <672A> <0EB1> <9B45> <0EB2> <5DF3> <0EB3> <7B95> <0EB4> <5CAC> <0EB5> <5BC6> <0EB6> <871C> <0EB7> <6E4A> <0EB8> <84D1> <0EB9> <7A14> <0EBA> <8108> <0EBB> <5999> <0EBC> <7C8D> <0EBD> <6C11> <0EBE> <7720> <0EBF> <52D9> <0EC0> <5922> <0EC1> <7121> <0EC2> <725F> <0EC3> <77DB> <0EC4> <9727> <0EC5> <9D61> <0EC6> <690B> <0EC7> <5A7F> <0EC8> <5A18> <0EC9> <51A5> <0ECA> <540D> <0ECB> <547D> <0ECC> <660E> <0ECD> <76DF> <0ECE> <8FF7> <0ECF> <9298> <0ED0> <9CF4> <0ED1> <59EA> <0ED2> <725D> <0ED3> <6EC5> <0ED4> <514D> <0ED5> <68C9> <0ED6> <7DBF> <0ED7> <7DEC> <0ED8> <9762> <0ED9> <9EBA> <0EDA> <6478> <0EDB> <6A21> <0EDC> <8302> <0EDD> <5984> <0EDE> <5B5F> <0EDF> <6BDB> <0EE0> <731B> <0EE1> <76F2> <0EE2> <7DB2> <0EE3> <8017> <0EE4> <8499> <0EE5> <5132> <0EE6> <6728> <0EE7> <9ED9> <0EE8> <76EE> <0EE9> <6762> <0EEA> <52FF> <0EEB> <9905> <0EEC> <5C24> <0EED> <623B> <0EEE> <7C7E> <0EEF> <8CB0> <0EF0> <554F> <0EF1> <60B6> <0EF2> <7D0B> <0EF3> <9580> <0EF4> <5301> <0EF5> <4E5F> <0EF6> <51B6> <0EF7> <591C> <0EF8> <723A> <0EF9> <8036> <0EFA> <91CE> <0EFB> <5F25> <0EFC> <77E2> <0EFD> <5384> <0EFE> <5F79> <0EFF> <7D04> <0F00> <85AC> <0F01> <8A33> <0F02> <8E8D> <0F03> <9756> <0F04> <67F3> <0F05> <85AE> <0F06> <9453> <0F07> <6109> <0F08> <6108> <0F09> <6CB9> <0F0A> <7652> endbfchar 100 beginbfchar <0F0B> <8AED> <0F0C> <8F38> <0F0D> <552F> <0F0E> <4F51> <0F0F> <512A> <0F10> <52C7> <0F11> <53CB> <0F12> <5BA5> <0F13> <5E7D> <0F14> <60A0> <0F15> <6182> <0F16> <63D6> <0F17> <6709> <0F18> <67DA> <0F19> <6E67> <0F1A> <6D8C> <0F1D> <7531> <0F1E> <7950> <0F1F> <88D5> <0F20> <8A98> <0F21> <904A> <0F22> <9091> <0F23> <90F5> <0F24> <96C4> <0F25> <878D> <0F26> <5915> <0F27> <4E88> <0F28> <4F59> <0F29> <4E0E> <0F2A> <8A89> <0F2B> <8F3F> <0F2C> <9810> <0F2D> <50AD> <0F2E> <5E7C> <0F2F> <5996> <0F30> <5BB9> <0F31> <5EB8> <0F32> <63DA> <0F33> <63FA> <0F34> <64C1> <0F35> <66DC> <0F36> <694A> <0F37> <69D8> <0F38> <6D0B> <0F39> <6EB6> <0F3A> <7194> <0F3B> <7528> <0F3C> <7AAF> <0F3D> <7F8A> <0F3E> <8000> <0F3F> <8449> <0F40> <84C9> <0F41> <8981> <0F42> <8B21> <0F43> <8E0A> <0F44> <9065> <0F45> <967D> <0F46> <990A> <0F47> <617E> <0F48> <6291> <0F49> <6B32> <0F4A> <6C83> <0F4B> <6D74> <0F4C> <7FCC> <0F4D> <7FFC> <0F4E> <6DC0> <0F4F> <7F85> <0F50> <87BA> <0F51> <88F8> <0F52> <6765> <0F53> <83B1> <0F54> <983C> <0F55> <96F7> <0F56> <6D1B> <0F57> <7D61> <0F58> <843D> <0F59> <916A> <0F5A> <4E71> <0F5B> <5375> <0F5C> <5D50> <0F5D> <6B04> <0F5E> <6FEB> <0F5F> <85CD> <0F60> <862D> <0F61> <89A7> <0F62> <5229> <0F63> <540F> <0F64> <5C65> <0F65> <674E> <0F66> <68A8> <0F67> <7406> <0F68> <7483> <0F69> <75E2> <0F6A> <88CF> <0F6B> <88E1> <0F6C> <91CC> <0F6D> <96E2> <0F6E> <9678> <0F6F> <5F8B> <0F70> <7387> endbfchar 100 beginbfchar <0F71> <7ACB> <0F72> <844E> <0F73> <63A0> <0F74> <7565> <0F75> <5289> <0F76> <6D41> <0F77> <6E9C> <0F78> <7409> <0F79> <7559> <0F7A> <786B> <0F7B> <7C92> <0F7C> <9686> <0F7D> <7ADC> <0F7E> <9F8D> <0F7F> <4FB6> <0F80> <616E> <0F81> <65C5> <0F82> <865C> <0F83> <4E86> <0F84> <4EAE> <0F85> <50DA> <0F86> <4E21> <0F87> <51CC> <0F88> <5BEE> <0F89> <6599> <0F8A> <6881> <0F8B> <6DBC> <0F8C> <731F> <0F8D> <7642> <0F8E> <77AD> <0F8F> <7A1C> <0F90> <7CE7> <0F91> <826F> <0F92> <8AD2> <0F93> <907C> <0F94> <91CF> <0F95> <9675> <0F96> <9818> <0F97> <529B> <0F98> <7DD1> <0F99> <502B> <0F9A> <5398> <0F9B> <6797> <0F9C> <6DCB> <0F9D> <71D0> <0F9E> <7433> <0F9F> <81E8> <0FA0> <8F2A> <0FA1> <96A3> <0FA2> <9C57> <0FA3> <9E9F> <0FA4> <7460> <0FA5> <5841> <0FA6> <6D99> <0FA7> <7D2F> <0FA8> <985E> <0FA9> <4EE4> <0FAA> <4F36> <0FAB> <4F8B> <0FAC> <51B7> <0FAD> <52B1> <0FAE> <5DBA> <0FAF> <601C> <0FB0> <73B2> <0FB1> <793C> <0FB2> <82D3> <0FB3> <9234> <0FB4> <96B7> <0FB5> <96F6> <0FB6> <970A> <0FB7> <9E97> <0FB8> <9F62> <0FB9> <66A6> <0FBA> <6B74> <0FBB> <5217> <0FBC> <52A3> <0FBD> <70C8> <0FBE> <88C2> <0FBF> <5EC9> <0FC0> <604B> <0FC1> <6190> <0FC2> <6F23> <0FC3> <7149> <0FC4> <7C3E> <0FC5> <7DF4> <0FC6> <806F> <0FC7> <84EE> <0FC8> <9023> <0FC9> <932C> <0FCA> <5442> <0FCB> <9B6F> <0FCC> <6AD3> <0FCD> <7089> <0FCE> <8CC2> <0FCF> <8DEF> <0FD0> <9732> <0FD1> <52B4> <0FD2> <5A41> <0FD3> <5ECA> <0FD4> <5F04> endbfchar 100 beginbfchar <0FD5> <6717> <0FD6> <697C> <0FD7> <6994> <0FD8> <6D6A> <0FD9> <6F0F> <0FDA> <7262> <0FDB> <72FC> <0FDC> <7BED> <0FDD> <8001> <0FDE> <807E> <0FDF> <874B> <0FE0> <90CE> <0FE1> <516D> <0FE2> <9E93> <0FE3> <7984> <0FE4> <808B> <0FE5> <9332> <0FE6> <8AD6> <0FE7> <502D> <0FE8> <548C> <0FE9> <8A71> <0FEA> <6B6A> <0FEB> <8CC4> <0FEC> <8107> <0FED> <60D1> <0FEE> <67A0> <0FEF> <9DF2> <0FF0> <4E99> <0FF1> <4E98> <0FF2> <9C10> <0FF3> <8A6B> <0FF4> <85C1> <0FF5> <8568> <0FF6> <6900> <0FF7> <6E7E> <0FF8> <7897> <0FF9> <8155> <0FFA> <5F0C> <0FFB> <4E10> <0FFC> <4E15> <0FFD> <4E2A> <0FFE> <4E31> <0FFF> <4E36> <1000> <4E3C> <1001> <4E3F> <1002> <4E42> <1003> <4E56> <1004> <4E58> <1005> <4E82> <1006> <4E85> <1007> <8C6B> <1008> <4E8A> <1009> <8212> <100A> <5F0D> <100B> <4E8E> <100F> <4EA2> <1010> <4EB0> <1011> <4EB3> <1012> <4EB6> <1013> <4ECE> <1014> <4ECD> <1015> <4EC4> <1016> <4EC6> <1017> <4EC2> <1018> <4ED7> <1019> <4EDE> <101A> <4EED> <101B> <4EDF> <101C> <4EF7> <101D> <4F09> <101E> <4F5A> <101F> <4F30> <1020> <4F5B> <1021> <4F5D> <1022> <4F57> <1023> <4F47> <1024> <4F76> <1025> <4F88> <1026> <4F8F> <1027> <4F98> <1028> <4F7B> <1029> <4F69> <102A> <4F70> <102B> <4F91> <102C> <4F6F> <102D> <4F86> <102E> <4F96> <102F> <5118> <1030> <4FD4> <1031> <4FDF> <1032> <4FCE> <1033> <4FD8> <1034> <4FDB> <1035> <4FD1> <1036> <4FDA> <1037> <4FD0> <103A> <501A> <103B> <5028> <103C> <5014> <103D> <502A> endbfchar 100 beginbfchar <103E> <5025> <103F> <5005> <1040> <4F1C> <1041> <4FF6> <1042> <5021> <1043> <5029> <1044> <502C> <1045> <4FFE> <1046> <4FEF> <1047> <5011> <1048> <5006> <1049> <5043> <104A> <5047> <104B> <6703> <104C> <5055> <104D> <5050> <104E> <5048> <104F> <505A> <1050> <5056> <1051> <506C> <1052> <5078> <1053> <5080> <1054> <509A> <1055> <5085> <1056> <50B4> <1057> <50B2> <105A> <50B3> <105B> <50C2> <105C> <50D6> <105D> <50DE> <105E> <50E5> <105F> <50ED> <1060> <50E3> <1061> <50EE> <1062> <50F9> <1063> <50F5> <1064> <5109> <1067> <5116> <1068> <5115> <1069> <5114> <106A> <511A> <106B> <5121> <106C> <513A> <106D> <5137> <106E> <513C> <106F> <513B> <1072> <5152> <1073> <514C> <1074> <5154> <1075> <5162> <1076> <7AF8> <1079> <516E> <107A> <5180> <107B> <5182> <107C> <56D8> <107D> <518C> <107E> <5189> <107F> <518F> <1080> <5191> <1081> <5193> <1084> <51A4> <1085> <51A6> <1086> <51A2> <108A> <51B3> <108D> <51B0> <108E> <51B5> <108F> <51BD> <1090> <51C5> <1091> <51C9> <1092> <51DB> <1093> <51E0> <1094> <8655> <1095> <51E9> <1096> <51ED> <1097> <51F0> <1098> <51F5> <1099> <51FE> <109A> <5204> <109B> <520B> <109C> <5214> <109D> <520E> <109E> <5227> <109F> <522A> <10A0> <522E> <10A1> <5233> <10A2> <5239> <10A3> <524F> <10A4> <5244> <10A7> <525E> <10A8> <5254> <10A9> <526A> <10AA> <5274> <10AB> <5269> <10AC> <5273> <10AD> <527F> <10AE> <527D> <10AF> <528D> <10B0> <5294> <10B1> <5292> <10B2> <5271> endbfchar 100 beginbfchar <10B3> <5288> <10B4> <5291> <10B5> <8FA8> <10B6> <8FA7> <10B9> <52BC> <10BA> <52B5> <10BB> <52C1> <10BC> <52CD> <10BD> <52D7> <10BE> <52DE> <10BF> <52E3> <10C0> <52E6> <10C1> <98ED> <10C2> <52E0> <10C3> <52F3> <10C4> <52F5> <10C7> <5306> <10C8> <5308> <10C9> <7538> <10CA> <530D> <10CB> <5310> <10CC> <530F> <10CD> <5315> <10CE> <531A> <10CF> <5323> <10D0> <532F> <10D1> <5331> <10D2> <5333> <10D3> <5338> <10D4> <5340> <10D5> <5346> <10D6> <5345> <10D7> <4E17> <10D8> <5349> <10D9> <534D> <10DA> <51D6> <10DB> <535E> <10DC> <5369> <10DD> <536E> <10DE> <5918> <10DF> <537B> <10E0> <5377> <10E1> <5382> <10E2> <5396> <10E3> <53A0> <10E4> <53A6> <10E5> <53A5> <10E6> <53AE> <10E7> <53B0> <10E8> <53B6> <10E9> <53C3> <10EA> <7C12> <10EB> <96D9> <10EC> <53DF> <10ED> <66FC> <10EE> <71EE> <10EF> <53EE> <10F0> <53E8> <10F1> <53ED> <10F2> <53FA> <10F3> <5401> <10F4> <543D> <10F5> <5440> <10F8> <543C> <10F9> <542E> <10FA> <5436> <10FB> <5429> <10FC> <541D> <10FD> <544E> <10FE> <548F> <10FF> <5475> <1100> <548E> <1101> <545F> <1102> <5471> <1103> <5477> <1104> <5470> <1105> <5492> <1106> <547B> <1107> <5480> <1108> <5476> <1109> <5484> <110A> <5490> <110B> <5486> <110C> <54C7> <110D> <54A2> <110E> <54B8> <110F> <54A5> <1110> <54AC> <1111> <54C4> <1112> <54C8> <1113> <54A8> <1114> <54AB> <1115> <54C2> <1116> <54A4> <1117> <54BE> <1118> <54BC> <1119> <54D8> <111C> <550F> <111D> <5514> <111E> <54FD> endbfchar 100 beginbfchar <111F> <54EE> <1120> <54ED> <1121> <54FA> <1122> <54E2> <1123> <5539> <1124> <5540> <1125> <5563> <1126> <554C> <1127> <552E> <1128> <555C> <1129> <5545> <112C> <5538> <112D> <5533> <112E> <555D> <112F> <5599> <1130> <5580> <1131> <54AF> <1132> <558A> <1133> <559F> <1134> <557B> <1135> <557E> <1136> <5598> <1137> <559E> <1138> <55AE> <1139> <557C> <113A> <5583> <113B> <55A9> <113C> <5587> <113D> <55A8> <113E> <55DA> <113F> <55C5> <1140> <55DF> <1141> <55C4> <1142> <55DC> <1143> <55E4> <1144> <55D4> <1145> <5614> <1146> <55F7> <1147> <5616> <1148> <55FE> <1149> <55FD> <114A> <561B> <114B> <55F9> <114C> <564E> <114D> <5650> <114E> <71DF> <114F> <5634> <1150> <5636> <1151> <5632> <1152> <5638> <1153> <566B> <1154> <5664> <1155> <562F> <1156> <566C> <1157> <566A> <1158> <5686> <1159> <5680> <115A> <568A> <115B> <56A0> <115C> <5694> <115D> <568F> <115E> <56A5> <115F> <56AE> <1160> <56B6> <1161> <56B4> <1162> <56C2> <1163> <56BC> <1164> <56C1> <1165> <56C3> <1166> <56C0> <1167> <56C8> <1168> <56CE> <1169> <56D1> <116A> <56D3> <116B> <56D7> <116C> <56EE> <116D> <56F9> <116E> <5700> <116F> <56FF> <1170> <5704> <1171> <5709> <1172> <5708> <1173> <570B> <1174> <570D> <1175> <5713> <1176> <5718> <1177> <5716> <1178> <55C7> <1179> <571C> <117A> <5726> <117D> <574E> <117E> <573B> <117F> <5740> <1180> <574F> <1181> <5769> <1182> <57C0> <1183> <5788> <1184> <5761> <1185> <577F> <1186> <5789> endbfchar 100 beginbfchar <1187> <5793> <1188> <57A0> <1189> <57B3> <118A> <57A4> <118B> <57AA> <118C> <57B0> <118D> <57C3> <118E> <57C6> <118F> <57D4> <1192> <580A> <1193> <57D6> <1194> <57E3> <1195> <580B> <1196> <5819> <1197> <581D> <1198> <5872> <1199> <5821> <119A> <5862> <119B> <584B> <119C> <5870> <119D> <6BC0> <119E> <5852> <119F> <583D> <11A0> <5879> <11A1> <5885> <11A2> <58B9> <11A3> <589F> <11A4> <58AB> <11A5> <58BA> <11A6> <58DE> <11A7> <58BB> <11A8> <58B8> <11A9> <58AE> <11AA> <58C5> <11AB> <58D3> <11AC> <58D1> <11AD> <58D7> <11AE> <58D9> <11AF> <58D8> <11B0> <58E5> <11B1> <58DC> <11B2> <58E4> <11B3> <58DF> <11B4> <58EF> <11B5> <58FA> <11B6> <58F9> <11BA> <5902> <11BB> <590A> <11BC> <5910> <11BD> <591B> <11BE> <68A6> <11BF> <5925> <11C2> <5932> <11C3> <5938> <11C4> <593E> <11C5> <7AD2> <11C6> <5955> <11C7> <5950> <11C8> <594E> <11C9> <595A> <11CA> <5958> <11CB> <5962> <11CC> <5960> <11CD> <5967> <11CE> <596C> <11CF> <5969> <11D0> <5978> <11D1> <5981> <11D2> <599D> <11D3> <4F5E> <11D4> <4FAB> <11D5> <59A3> <11D6> <59B2> <11D7> <59C6> <11D8> <59E8> <11D9> <59DC> <11DA> <598D> <11DD> <5A25> <11DE> <5A1F> <11DF> <5A11> <11E0> <5A1C> <11E1> <5A09> <11E2> <5A1A> <11E3> <5A40> <11E4> <5A6C> <11E5> <5A49> <11E8> <5A62> <11E9> <5A6A> <11EA> <5A9A> <11EB> <5ABC> <11EC> <5ABE> <11ED> <5ACB> <11EE> <5AC2> <11EF> <5ABD> <11F0> <5AE3> <11F1> <5AD7> <11F2> <5AE6> <11F3> <5AE9> <11F4> <5AD6> <11F7> <5B0C> endbfchar 100 beginbfchar <11F8> <5B0B> <11F9> <5B16> <11FA> <5B32> <11FB> <5AD0> <11FC> <5B2A> <11FD> <5B36> <11FE> <5B3E> <11FF> <5B43> <1200> <5B45> <1201> <5B40> <1202> <5B51> <1203> <5B55> <1206> <5B65> <1207> <5B69> <1208> <5B70> <1209> <5B73> <120A> <5B75> <120B> <5B78> <120C> <6588> <120D> <5B7A> <120E> <5B80> <120F> <5B83> <1210> <5BA6> <1211> <5BB8> <1212> <5BC3> <1213> <5BC7> <1214> <5BC9> <1215> <5BD4> <1216> <5BD0> <1217> <5BE4> <1218> <5BE6> <1219> <5BE2> <121A> <5BDE> <121B> <5BE5> <121C> <5BEB> <121D> <5BF0> <121E> <5BF6> <121F> <5BF3> <1220> <5C05> <1223> <5C0D> <1224> <5C13> <1225> <5C20> <1226> <5C22> <1227> <5C28> <122A> <5C41> <122B> <5C46> <122C> <5C4E> <122D> <5C53> <122E> <5C50> <122F> <5C4F> <1230> <5B71> <1231> <5C6C> <1232> <5C6E> <1233> <4E62> <1234> <5C76> <1235> <5C79> <1236> <5C8C> <1237> <5C91> <1238> <5C94> <1239> <599B> <123A> <5CAB> <123B> <5CBB> <123C> <5CB6> <123D> <5CBC> <123E> <5CB7> <123F> <5CC5> <1240> <5CBE> <1241> <5CC7> <1242> <5CD9> <1243> <5CE9> <1244> <5CFD> <1245> <5CFA> <1246> <5CED> <1247> <5D8C> <1248> <5CEA> <1249> <5D0B> <124A> <5D15> <124B> <5D17> <124C> <5D5C> <124D> <5D1F> <124E> <5D1B> <124F> <5D11> <1250> <5D14> <1251> <5D22> <1252> <5D1A> <1253> <5D19> <1254> <5D18> <1255> <5D4C> <1256> <5D52> <1257> <5D4E> <1258> <5D4B> <1259> <5D6C> <125A> <5D73> <125B> <5D76> <125C> <5D87> <125D> <5D84> <125E> <5D82> <125F> <5DA2> <1260> <5D9D> <1261> <5DAC> endbfchar 100 beginbfchar <1262> <5DAE> <1263> <5DBD> <1264> <5D90> <1265> <5DB7> <1266> <5DBC> <1267> <5DC9> <1268> <5DCD> <1269> <5DD3> <126A> <5DD2> <126B> <5DD6> <126C> <5DDB> <126D> <5DEB> <126E> <5DF2> <126F> <5DF5> <1270> <5E0B> <1271> <5E1A> <1272> <5E19> <1273> <5E11> <1274> <5E1B> <1277> <5E44> <1278> <5E43> <1279> <5E40> <127A> <5E4E> <127B> <5E57> <127C> <5E54> <127D> <5E5F> <127E> <5E62> <127F> <5E64> <1280> <5E47> <1283> <5E7A> <1284> <9EBC> <1285> <5E7F> <1286> <5EA0> <1289> <5EC8> <128A> <5ED0> <128B> <5ECF> <128C> <5ED6> <128D> <5EE3> <128E> <5EDD> <1291> <5EE2> <1292> <5EE1> <1295> <5EEC> <1296> <5EF1> <1297> <5EF3> <1298> <5EF0> <1299> <5EF4> <129A> <5EF8> <129B> <5EFE> <129C> <5F03> <129D> <5F09> <129E> <5F5D> <129F> <5F5C> <12A0> <5F0B> <12A1> <5F11> <12A2> <5F16> <12A3> <5F29> <12A4> <5F2D> <12A5> <5F38> <12A6> <5F41> <12A7> <5F48> <12A8> <5F4C> <12A9> <5F4E> <12AA> <5F2F> <12AB> <5F51> <12AE> <5F59> <12AF> <5F61> <12B0> <5F6D> <12B1> <5F73> <12B2> <5F77> <12B3> <5F83> <12B4> <5F82> <12B5> <5F7F> <12B6> <5F8A> <12B7> <5F88> <12B8> <5F91> <12B9> <5F87> <12BA> <5F9E> <12BB> <5F99> <12BC> <5F98> <12BD> <5FA0> <12BE> <5FA8> <12BF> <5FAD> <12C0> <5FBC> <12C1> <5FD6> <12C2> <5FFB> <12C3> <5FE4> <12C4> <5FF8> <12C5> <5FF1> <12C6> <5FDD> <12C7> <60B3> <12C8> <5FFF> <12C9> <6021> <12CA> <6060> <12CB> <6019> <12CC> <6010> <12CD> <6029> <12CE> <600E> <12CF> <6031> <12D0> <601B> <12D1> <6015> endbfchar 100 beginbfchar <12D2> <602B> <12D3> <6026> <12D4> <600F> <12D5> <603A> <12D6> <605A> <12D7> <6041> <12D8> <606A> <12D9> <6077> <12DA> <605F> <12DB> <604A> <12DC> <6046> <12DD> <604D> <12DE> <6063> <12DF> <6043> <12E0> <6064> <12E1> <6042> <12E2> <606C> <12E3> <606B> <12E4> <6059> <12E5> <6081> <12E6> <608D> <12E7> <60E7> <12E8> <6083> <12E9> <609A> <12EA> <6084> <12EB> <609B> <12EE> <6092> <12EF> <60A7> <12F0> <608B> <12F1> <60E1> <12F2> <60B8> <12F3> <60E0> <12F4> <60D3> <12F5> <60B4> <12F6> <5FF0> <12F7> <60BD> <12F8> <60C6> <12F9> <60B5> <12FA> <60D8> <12FB> <614D> <12FC> <6115> <12FD> <6106> <1300> <6100> <1301> <60F4> <1302> <60FA> <1303> <6103> <1304> <6121> <1305> <60FB> <1306> <60F1> <1309> <6147> <130A> <613E> <130B> <6128> <130C> <6127> <130D> <614A> <130E> <613F> <130F> <613C> <1310> <612C> <1311> <6134> <1312> <613D> <1313> <6142> <1314> <6144> <1315> <6173> <1316> <6177> <131A> <616B> <131B> <6174> <131C> <616F> <131D> <6165> <131E> <6171> <131F> <615F> <1320> <615D> <1321> <6153> <1322> <6175> <1323> <6199> <1324> <6196> <1325> <6187> <1326> <61AC> <1327> <6194> <1328> <619A> <1329> <618A> <132A> <6191> <132B> <61AB> <132C> <61AE> <132D> <61CC> <132E> <61CA> <132F> <61C9> <1330> <61F7> <1331> <61C8> <1332> <61C3> <1333> <61C6> <1334> <61BA> <1335> <61CB> <1336> <7F79> <1337> <61CD> <1338> <61E6> <1339> <61E3> <133A> <61F6> <133B> <61FA> <133C> <61F4> <133D> <61FF> <133E> <61FD> endbfchar 100 beginbfchar <133F> <61FC> <1340> <61FE> <1341> <6200> <1344> <620D> <1345> <620C> <1346> <6214> <1347> <621B> <1348> <621E> <1349> <6221> <134A> <622A> <134B> <622E> <134C> <6230> <134F> <6241> <1350> <624E> <1351> <625E> <1352> <6263> <1353> <625B> <1354> <6260> <1355> <6268> <1356> <627C> <1357> <6282> <1358> <6289> <1359> <627E> <135C> <6296> <135D> <62D4> <135E> <6283> <135F> <6294> <1360> <62D7> <1361> <62D1> <1362> <62BB> <1363> <62CF> <1364> <62FF> <1365> <62C6> <1366> <64D4> <1367> <62C8> <1368> <62DC> <1369> <62CC> <136A> <62CA> <136B> <62C2> <136C> <62C7> <136D> <629B> <136E> <62C9> <136F> <630C> <1370> <62EE> <1371> <62F1> <1372> <6327> <1373> <6302> <1374> <6308> <1375> <62EF> <1376> <62F5> <1377> <6350> <1378> <633E> <1379> <634D> <137A> <641C> <137B> <634F> <137C> <6396> <137D> <638E> <137E> <6380> <137F> <63AB> <1380> <6376> <1381> <63A3> <1382> <638F> <1383> <6389> <1384> <639F> <1385> <63B5> <1386> <636B> <1387> <6369> <1388> <63BE> <1389> <63E9> <138A> <63C0> <138B> <63C6> <138C> <63E3> <138D> <63C9> <138E> <63D2> <138F> <63F6> <1390> <63C4> <1391> <6416> <1392> <6434> <1393> <6406> <1394> <6413> <1395> <6426> <1396> <6436> <1397> <651D> <1398> <6417> <1399> <6428> <139A> <640F> <139B> <6467> <139C> <646F> <139D> <6476> <139E> <644E> <139F> <652A> <13A0> <6495> <13A1> <6493> <13A2> <64A5> <13A3> <64A9> <13A4> <6488> <13A5> <64BC> <13A6> <64DA> <13A7> <64D2> <13A8> <64C5> endbfchar 100 beginbfchar <13A9> <64C7> <13AA> <64BB> <13AB> <64D8> <13AC> <64C2> <13AD> <64F1> <13AE> <64E7> <13AF> <8209> <13B2> <62AC> <13B3> <64E3> <13B4> <64EF> <13B5> <652C> <13B6> <64F6> <13B7> <64F4> <13B8> <64F2> <13B9> <64FA> <13BA> <6500> <13BB> <64FD> <13BC> <6518> <13BD> <651C> <13BE> <6505> <13BF> <6524> <13C0> <6523> <13C1> <652B> <13C4> <6537> <13C5> <6536> <13C6> <6538> <13C7> <754B> <13C8> <6548> <13C9> <6556> <13CA> <6555> <13CB> <654D> <13CC> <6558> <13CD> <655E> <13CE> <655D> <13CF> <6572> <13D0> <6578> <13D3> <8B8A> <13D4> <659B> <13D5> <659F> <13D6> <65AB> <13D7> <65B7> <13D8> <65C3> <13D9> <65C6> <13DA> <65C1> <13DB> <65C4> <13DC> <65CC> <13DD> <65D2> <13DE> <65DB> <13DF> <65D9> <13E2> <65F1> <13E3> <6772> <13E4> <660A> <13E5> <6603> <13E6> <65FB> <13E7> <6773> <13EA> <6634> <13EB> <661C> <13EC> <664F> <13ED> <6644> <13EE> <6649> <13EF> <6641> <13F0> <665E> <13F1> <665D> <13F2> <6664> <13F5> <665F> <13F6> <6662> <13F7> <6670> <13F8> <6683> <13F9> <6688> <13FA> <668E> <13FB> <6689> <13FC> <6684> <13FD> <6698> <13FE> <669D> <13FF> <66C1> <1400> <66B9> <1401> <66C9> <1402> <66BE> <1403> <66BC> <1404> <66C4> <1405> <66B8> <1406> <66D6> <1407> <66DA> <1408> <66E0> <1409> <663F> <140A> <66E6> <140B> <66E9> <140C> <66F0> <140D> <66F5> <140E> <66F7> <140F> <670F> <1410> <6716> <1411> <671E> <1414> <9738> <1415> <672E> <1416> <673F> <1417> <6736> <1418> <6741> <1419> <6738> <141A> <6737> endbfchar 100 beginbfchar <141B> <6746> <141C> <675E> <141D> <6760> <141E> <6759> <1421> <6789> <1422> <6770> <1423> <67A9> <1424> <677C> <1425> <676A> <1426> <678C> <1427> <678B> <1428> <67A6> <1429> <67A1> <142A> <6785> <142B> <67B7> <142C> <67EF> <142D> <67B4> <142E> <67EC> <142F> <67B3> <1430> <67E9> <1431> <67B8> <1432> <67E4> <1433> <67DE> <1434> <67DD> <1435> <67E2> <1436> <67EE> <1437> <67B9> <1438> <67CE> <1439> <67C6> <143A> <67E7> <143B> <6A9C> <143C> <681E> <143D> <6846> <143E> <6829> <143F> <6840> <1440> <684D> <1441> <6832> <1442> <684E> <1443> <68B3> <1444> <682B> <1445> <6859> <1446> <6863> <1447> <6877> <1448> <687F> <1449> <689F> <144A> <688F> <144B> <68AD> <144C> <6894> <144D> <689D> <144E> <689B> <144F> <6883> <1450> <6AAE> <1451> <68B9> <1452> <6874> <1453> <68B5> <1454> <68A0> <1455> <68BA> <1456> <690F> <1457> <688D> <1458> <687E> <1459> <6901> <145A> <68CA> <145B> <6908> <145C> <68D8> <145D> <6922> <145E> <6926> <145F> <68E1> <1460> <690C> <1461> <68CD> <1462> <68D4> <1463> <68E7> <1464> <68D5> <1465> <6936> <1466> <6912> <1467> <6904> <1468> <68D7> <1469> <68E3> <146A> <6925> <146B> <68F9> <146C> <68E0> <146D> <68EF> <146E> <6928> <146F> <692A> <1470> <691A> <1471> <6923> <1472> <6921> <1473> <68C6> <1474> <6979> <1475> <6977> <1476> <695C> <1477> <6978> <1478> <696B> <1479> <6954> <147A> <697E> <147B> <696E> <147C> <6939> <147D> <6974> <147E> <693D> <147F> <6959> <1480> <6930> endbfchar 100 beginbfchar <1481> <6961> <1482> <695E> <1483> <695D> <1484> <6981> <1485> <696A> <1486> <69B2> <1487> <69AE> <1488> <69D0> <1489> <69BF> <148A> <69C1> <148B> <69D3> <148C> <69BE> <148D> <69CE> <148E> <5BE8> <148F> <69CA> <1490> <69DD> <1491> <69BB> <1492> <69C3> <1493> <69A7> <1494> <6A2E> <1495> <6991> <1496> <69A0> <1497> <699C> <1498> <6995> <1499> <69B4> <149A> <69DE> <149B> <69E8> <149C> <6A02> <149D> <6A1B> <149E> <69FF> <149F> <6B0A> <14A0> <69F9> <14A1> <69F2> <14A2> <69E7> <14A3> <6A05> <14A4> <69B1> <14A5> <6A1E> <14A6> <69ED> <14A7> <6A14> <14A8> <69EB> <14A9> <6A0A> <14AA> <6A12> <14AB> <6AC1> <14AC> <6A23> <14AD> <6A13> <14AE> <6A44> <14AF> <6A0C> <14B0> <6A72> <14B1> <6A36> <14B2> <6A78> <14B3> <6A47> <14B4> <6A62> <14B5> <6A59> <14B6> <6A66> <14B7> <6A48> <14B8> <6A38> <14B9> <6A22> <14BA> <6A90> <14BB> <6A8D> <14BC> <6AA0> <14BD> <6A84> <14C0> <6A97> <14C1> <8617> <14C2> <6ABB> <14C3> <6AC3> <14C4> <6AC2> <14C5> <6AB8> <14C6> <6AB3> <14C7> <6AAC> <14C8> <6ADE> <14C9> <6AD1> <14CA> <6ADF> <14CB> <6AAA> <14CC> <6ADA> <14CD> <6AEA> <14CE> <6AFB> <14CF> <6B05> <14D0> <8616> <14D1> <6AFA> <14D2> <6B12> <14D3> <6B16> <14D4> <9B31> <14D5> <6B1F> <14D6> <6B38> <14D7> <6B37> <14D8> <76DC> <14D9> <6B39> <14DA> <98EE> <14DB> <6B47> <14DC> <6B43> <14DD> <6B49> <14DE> <6B50> <14DF> <6B59> <14E0> <6B54> <14E1> <6B5B> <14E2> <6B5F> <14E3> <6B61> <14E8> <6B84> <14E9> <6B83> <14EA> <6B8D> endbfchar 100 beginbfchar <14EB> <6B98> <14EC> <6B95> <14ED> <6B9E> <14EE> <6BA4> <14F1> <6BAF> <14F2> <6BB2> <14F3> <6BB1> <14F4> <6BB3> <14F5> <6BB7> <14F6> <6BBC> <14F7> <6BC6> <14F8> <6BCB> <14F9> <6BD3> <14FA> <6BDF> <14FB> <6BEC> <14FC> <6BEB> <14FD> <6BF3> <14FE> <6BEF> <14FF> <9EBE> <1500> <6C08> <1503> <6C1B> <1504> <6C24> <1505> <6C23> <1506> <6C5E> <1507> <6C55> <1508> <6C62> <1509> <6C6A> <150A> <6C82> <150B> <6C8D> <150C> <6C9A> <150D> <6C81> <150E> <6C9B> <150F> <6C7E> <1510> <6C68> <1511> <6C73> <1512> <6C92> <1513> <6C90> <1514> <6CC4> <1515> <6CF1> <1516> <6CD3> <1517> <6CBD> <1518> <6CD7> <1519> <6CC5> <151A> <6CDD> <151B> <6CAE> <151C> <6CB1> <151D> <6CBE> <151E> <6CBA> <151F> <6CDB> <1520> <6CEF> <1521> <6CD9> <1522> <6CEA> <1523> <6D1F> <1524> <884D> <1525> <6D36> <1526> <6D2B> <1527> <6D3D> <1528> <6D38> <1529> <6D19> <152A> <6D35> <152B> <6D33> <152C> <6D12> <152D> <6D0C> <152E> <6D63> <152F> <6D93> <1530> <6D64> <1531> <6D5A> <1532> <6D79> <1533> <6D59> <1534> <6D8E> <1535> <6D95> <1536> <6FE4> <1537> <6D85> <1538> <6DF9> <1539> <6E15> <153A> <6E0A> <153B> <6DB5> <153C> <6DC7> <153D> <6DE6> <153E> <6DB8> <153F> <6DC6> <1540> <6DEC> <1541> <6DDE> <1542> <6DCC> <1543> <6DE8> <1544> <6DD2> <1545> <6DC5> <1546> <6DFA> <1547> <6DD9> <1548> <6DE4> <1549> <6DD5> <154A> <6DEA> <154B> <6DEE> <154C> <6E2D> <154D> <6E6E> <154E> <6E2E> <154F> <6E19> <1550> <6E72> <1551> <6E5F> <1552> <6E3E> endbfchar 100 beginbfchar <1553> <6E23> <1554> <6E6B> <1555> <6E2B> <1556> <6E76> <1557> <6E4D> <1558> <6E1F> <1559> <6E43> <155A> <6E3A> <155B> <6E4E> <155C> <6E24> <155D> <6EFF> <155E> <6E1D> <155F> <6E38> <1560> <6E82> <1561> <6EAA> <1562> <6E98> <1563> <6EC9> <1564> <6EB7> <1565> <6ED3> <1566> <6EBD> <1567> <6EAF> <1568> <6EC4> <1569> <6EB2> <156C> <6E8F> <156D> <6EA5> <156E> <6EC2> <156F> <6E9F> <1570> <6F41> <1571> <6F11> <1572> <704C> <1573> <6EEC> <1574> <6EF8> <1575> <6EFE> <1576> <6F3F> <1577> <6EF2> <1578> <6F31> <1579> <6EEF> <157A> <6F32> <157B> <6ECC> <157C> <6F3E> <157D> <6F13> <157E> <6EF7> <157F> <6F86> <1580> <6F7A> <1581> <6F78> <1582> <6F81> <1583> <6F80> <1584> <6F6F> <1585> <6F5B> <1586> <6FF3> <1587> <6F6D> <1588> <6F82> <1589> <6F7C> <158A> <6F58> <158B> <6F8E> <158C> <6F91> <158D> <6FC2> <158E> <6F66> <158F> <6FB3> <1590> <6FA3> <1591> <6FA1> <1592> <6FA4> <1593> <6FB9> <1594> <6FC6> <1595> <6FAA> <1596> <6FDF> <1597> <6FD5> <1598> <6FEC> <1599> <6FD4> <159A> <6FD8> <159B> <6FF1> <159C> <6FEE> <159D> <6FDB> <159E> <7009> <159F> <700B> <15A0> <6FFA> <15A1> <7011> <15A2> <7001> <15A3> <700F> <15A4> <6FFE> <15A5> <701B> <15A6> <701A> <15A7> <6F74> <15A8> <701D> <15A9> <7018> <15AA> <701F> <15AB> <7030> <15AC> <703E> <15AD> <7032> <15AE> <7051> <15AF> <7063> <15B0> <7099> <15B1> <7092> <15B2> <70AF> <15B3> <70F1> <15B4> <70AC> <15B5> <70B8> <15B6> <70B3> <15B7> <70AE> <15B8> <70DF> endbfchar 100 beginbfchar <15B9> <70CB> <15BA> <70DD> <15BB> <70D9> <15BC> <7109> <15BD> <70FD> <15BE> <711C> <15BF> <7119> <15C0> <7165> <15C1> <7155> <15C2> <7188> <15C3> <7166> <15C4> <7162> <15C5> <714C> <15C6> <7156> <15C7> <716C> <15C8> <718F> <15C9> <71FB> <15CA> <7184> <15CB> <7195> <15CC> <71A8> <15CD> <71AC> <15CE> <71D7> <15CF> <71B9> <15D0> <71BE> <15D1> <71D2> <15D2> <71C9> <15D3> <71D4> <15D4> <71CE> <15D5> <71E0> <15D6> <71EC> <15D7> <71E7> <15D8> <71F5> <15D9> <71FC> <15DA> <71F9> <15DB> <71FF> <15DC> <720D> <15DD> <7210> <15DE> <721B> <15DF> <7228> <15E0> <722D> <15E1> <722C> <15E2> <7230> <15E3> <7232> <15E8> <7246> <15E9> <724B> <15EA> <7258> <15EB> <7274> <15EC> <727E> <15ED> <7282> <15EE> <7281> <15EF> <7287> <15F0> <7292> <15F1> <7296> <15F2> <72A2> <15F3> <72A7> <15F4> <72B9> <15F5> <72B2> <15F6> <72C3> <15F7> <72C6> <15F8> <72C4> <15F9> <72CE> <15FA> <72D2> <15FB> <72E2> <15FE> <72F9> <15FF> <72F7> <1600> <500F> <1601> <7317> <1602> <730A> <1603> <731C> <1604> <7316> <1605> <731D> <1606> <7334> <1607> <732F> <1608> <7329> <1609> <7325> <160A> <733E> <160D> <9ED8> <160E> <7357> <160F> <736A> <1610> <7368> <1611> <7370> <1612> <7378> <1613> <7375> <1614> <737B> <1615> <737A> <1616> <73C8> <1617> <73B3> <1618> <73CE> <1619> <73BB> <161A> <73C0> <161B> <73E5> <161C> <73EE> <161D> <73DE> <161E> <74A2> <161F> <7405> <1620> <746F> <1621> <7425> <1622> <73F8> <1623> <7432> <1624> <743A> endbfchar 100 beginbfchar <1625> <7455> <1626> <743F> <1627> <745F> <1628> <7459> <1629> <7441> <162A> <745C> <162B> <7469> <162C> <7470> <162D> <7463> <162E> <746A> <162F> <7476> <1630> <747E> <1631> <748B> <1632> <749E> <1633> <74A7> <1634> <74CA> <1635> <74CF> <1636> <74D4> <1637> <73F1> <1638> <74E0> <1639> <74E3> <163A> <74E7> <163B> <74E9> <163C> <74EE> <163D> <74F2> <1640> <74F8> <1641> <74F7> <1642> <7504> <1643> <7503> <1644> <7505> <1645> <750C> <1646> <750E> <1647> <750D> <1648> <7515> <1649> <7513> <164A> <751E> <164B> <7526> <164C> <752C> <164D> <753C> <164E> <7544> <164F> <754D> <1650> <754A> <1651> <7549> <1652> <755B> <1653> <7546> <1654> <755A> <1655> <7569> <1656> <7564> <1657> <7567> <1658> <756B> <1659> <756D> <165A> <7578> <165B> <7576> <165E> <7574> <165F> <758A> <1660> <7589> <1661> <7582> <1662> <7594> <1663> <759A> <1664> <759D> <1665> <75A5> <1666> <75A3> <1667> <75C2> <1668> <75B3> <1669> <75C3> <166A> <75B5> <166B> <75BD> <166C> <75B8> <166D> <75BC> <166E> <75B1> <166F> <75CD> <1670> <75CA> <1671> <75D2> <1672> <75D9> <1673> <75E3> <1674> <75DE> <1677> <75FC> <1678> <7601> <1679> <75F0> <167A> <75FA> <167D> <760B> <167E> <760D> <167F> <7609> <1680> <761F> <1681> <7627> <1685> <7624> <1686> <7634> <1687> <7630> <1688> <763B> <168B> <7646> <168C> <765C> <168D> <7658> <1693> <7667> <1694> <766C> <1695> <7670> <1696> <7672> <1697> <7676> <1698> <7678> <1699> <767C> <169A> <7680> endbfchar 100 beginbfchar <169B> <7683> <169C> <7688> <169D> <768B> <169E> <768E> <169F> <7696> <16A0> <7693> <16A3> <76B0> <16A4> <76B4> <16A8> <76C2> <16A9> <76CD> <16AA> <76D6> <16AB> <76D2> <16AC> <76DE> <16AD> <76E1> <16AE> <76E5> <16AF> <76E7> <16B0> <76EA> <16B1> <862F> <16B2> <76FB> <16B3> <7708> <16B4> <7707> <16B5> <7704> <16B6> <7729> <16B7> <7724> <16B8> <771E> <16BB> <771B> <16BE> <7747> <16BF> <775A> <16C0> <7768> <16C1> <776B> <16C2> <775B> <16C3> <7765> <16C4> <777F> <16C5> <777E> <16C6> <7779> <16C7> <778E> <16C8> <778B> <16C9> <7791> <16CA> <77A0> <16CB> <779E> <16CC> <77B0> <16CD> <77B6> <16CE> <77B9> <16CF> <77BF> <16D2> <77BB> <16D3> <77C7> <16D4> <77CD> <16D5> <77D7> <16D6> <77DA> <16D7> <77DC> <16D8> <77E3> <16D9> <77EE> <16DA> <77FC> <16DB> <780C> <16DC> <7812> <16DD> <7926> <16DE> <7820> <16DF> <792A> <16E0> <7845> <16E1> <788E> <16E2> <7874> <16E3> <7886> <16E4> <787C> <16E5> <789A> <16E6> <788C> <16E7> <78A3> <16E8> <78B5> <16E9> <78AA> <16EA> <78AF> <16EB> <78D1> <16EC> <78C6> <16ED> <78CB> <16EE> <78D4> <16EF> <78BE> <16F0> <78BC> <16F1> <78C5> <16F2> <78CA> <16F3> <78EC> <16F4> <78E7> <16F5> <78DA> <16F6> <78FD> <16F7> <78F4> <16F8> <7907> <16F9> <7912> <16FA> <7911> <16FB> <7919> <16FC> <792C> <16FD> <792B> <16FE> <7940> <16FF> <7960> <1700> <7957> <1701> <795F> <1702> <795A> <1703> <7955> <1704> <7953> <1705> <797A> <1706> <797F> <1707> <798A> <1708> <799D> <1709> <79A7> endbfchar 100 beginbfchar <170A> <9F4B> <170B> <79AA> <170C> <79AE> <170D> <79B3> <1710> <79C9> <1711> <79D5> <1712> <79E7> <1713> <79EC> <1714> <79E1> <1715> <79E3> <1716> <7A08> <1717> <7A0D> <171A> <7A20> <171B> <7A1F> <171C> <7980> <171D> <7A31> <171E> <7A3B> <171F> <7A3E> <1720> <7A37> <1721> <7A43> <1722> <7A57> <1723> <7A49> <1726> <7A69> <1727> <9F9D> <1728> <7A70> <1729> <7A79> <172A> <7A7D> <172B> <7A88> <172C> <7A97> <172D> <7A95> <172E> <7A98> <172F> <7A96> <1730> <7AA9> <1731> <7AC8> <1732> <7AB0> <1733> <7AB6> <1734> <7AC5> <1735> <7AC4> <1736> <7ABF> <1737> <9083> <1738> <7AC7> <1739> <7ACA> <173A> <7ACD> <173B> <7ACF> <173C> <7AD5> <173D> <7AD3> <1740> <7ADD> <1743> <7AE6> <1744> <7AED> <1745> <7AF0> <1746> <7B02> <1747> <7B0F> <1748> <7B0A> <1749> <7B06> <174A> <7B33> <174D> <7B1E> <174E> <7B35> <174F> <7B28> <1750> <7B36> <1751> <7B50> <1752> <7B7A> <1753> <7B04> <1754> <7B4D> <1755> <7B0B> <1756> <7B4C> <1757> <7B45> <1758> <7B75> <1759> <7B65> <175A> <7B74> <175B> <7B67> <175E> <7B6C> <175F> <7B6E> <1760> <7B9D> <1761> <7B98> <1762> <7B9F> <1763> <7B8D> <1764> <7B9C> <1765> <7B9A> <1766> <7B8B> <1767> <7B92> <1768> <7B8F> <1769> <7B5D> <176A> <7B99> <176B> <7BCB> <176C> <7BC1> <176D> <7BCC> <176E> <7BCF> <176F> <7BB4> <1770> <7BC6> <1771> <7BDD> <1772> <7BE9> <1773> <7C11> <1774> <7C14> <1775> <7BE6> <1776> <7BE5> <1777> <7C60> <1778> <7C00> <1779> <7C07> <177A> <7C13> <177B> <7BF3> endbfchar 100 beginbfchar <177C> <7BF7> <177D> <7C17> <177E> <7C0D> <177F> <7BF6> <1780> <7C23> <1781> <7C27> <1782> <7C2A> <1783> <7C1F> <1784> <7C37> <1785> <7C2B> <1786> <7C3D> <1787> <7C4C> <1788> <7C43> <1789> <7C54> <178A> <7C4F> <178B> <7C40> <178C> <7C50> <178D> <7C58> <178E> <7C5F> <178F> <7C64> <1790> <7C56> <1791> <7C65> <1792> <7C6C> <1793> <7C75> <1794> <7C83> <1795> <7C90> <1796> <7CA4> <1797> <7CAD> <1798> <7CA2> <1799> <7CAB> <179A> <7CA1> <179B> <7CA8> <179C> <7CB3> <179D> <7CB2> <179E> <7CB1> <179F> <7CAE> <17A0> <7CB9> <17A1> <7CBD> <17A2> <7CC0> <17A3> <7CC5> <17A4> <7CC2> <17A5> <7CD8> <17A6> <7CD2> <17A7> <7CDC> <17A8> <7CE2> <17A9> <9B3B> <17AA> <7CEF> <17AB> <7CF2> <17AC> <7CF4> <17AD> <7CF6> <17AE> <7CFA> <17AF> <7D06> <17B0> <7D02> <17B1> <7D1C> <17B2> <7D15> <17B3> <7D0A> <17B4> <7D45> <17B5> <7D4B> <17B6> <7D2E> <17B7> <7D32> <17B8> <7D3F> <17B9> <7D35> <17BA> <7D46> <17BB> <7D73> <17BC> <7D56> <17BD> <7D4E> <17BE> <7D72> <17BF> <7D68> <17C0> <7D6E> <17C1> <7D4F> <17C2> <7D63> <17C3> <7D93> <17C4> <7D89> <17C5> <7D5B> <17C6> <7D8F> <17C7> <7D7D> <17C8> <7D9B> <17C9> <7DBA> <17CA> <7DAE> <17CB> <7DA3> <17CC> <7DB5> <17CD> <7DC7> <17CE> <7DBD> <17CF> <7DAB> <17D0> <7E3D> <17D1> <7DA2> <17D2> <7DAF> <17D3> <7DDC> <17D4> <7DB8> <17D5> <7D9F> <17D6> <7DB0> <17D7> <7DD8> <17D8> <7DDD> <17D9> <7DE4> <17DA> <7DDE> <17DB> <7DFB> <17DC> <7DF2> <17DD> <7DE1> <17DE> <7E05> <17DF> <7E0A> endbfchar 100 beginbfchar <17E0> <7E23> <17E1> <7E21> <17E2> <7E12> <17E3> <7E31> <17E4> <7E1F> <17E5> <7E09> <17E6> <7E0B> <17E7> <7E22> <17E8> <7E46> <17E9> <7E66> <17EA> <7E3B> <17EB> <7E35> <17EC> <7E39> <17ED> <7E43> <17EE> <7E37> <17EF> <7E32> <17F0> <7E3A> <17F1> <7E67> <17F2> <7E5D> <17F3> <7E56> <17F4> <7E5E> <17F7> <7E79> <17F8> <7E6A> <17F9> <7E69> <17FA> <7E7C> <17FB> <7E7B> <17FC> <7E83> <17FD> <7DD5> <17FE> <7E7D> <17FF> <8FAE> <1800> <7E7F> <1803> <7E8C> <1804> <7E92> <1805> <7E90> <1808> <7E96> <1809> <7E8E> <180C> <7F38> <180D> <7F3A> <180E> <7F45> <1814> <7F55> <1815> <7F54> <1816> <7F58> <181B> <7F67> <181C> <7F78> <181D> <7F82> <181E> <7F86> <181F> <7F83> <1820> <7F88> <1821> <7F87> <1822> <7F8C> <1823> <7F94> <1824> <7F9E> <1825> <7F9D> <1826> <7F9A> <1827> <7FA3> <1828> <7FAF> <1829> <7FB2> <182A> <7FB9> <182B> <7FAE> <182C> <7FB6> <182D> <7FB8> <182E> <8B71> <1831> <7FCA> <1832> <7FD5> <1833> <7FD4> <1834> <7FE1> <1835> <7FE6> <1836> <7FE9> <1837> <7FF3> <1838> <7FF9> <1839> <98DC> <183A> <8006> <183B> <8004> <183C> <800B> <183D> <8012> <1840> <801C> <1841> <8021> <1842> <8028> <1843> <803F> <1844> <803B> <1845> <804A> <1846> <8046> <1847> <8052> <1848> <8058> <1849> <805A> <184A> <805F> <184B> <8062> <184C> <8068> <184D> <8073> <184E> <8072> <184F> <8070> <1850> <8076> <1851> <8079> <1852> <807D> <1853> <807F> <1854> <8084> <1855> <8086> <1856> <8085> <1857> <809B> <1858> <8093> endbfchar 100 beginbfchar <1859> <809A> <185A> <80AD> <185B> <5190> <185C> <80AC> <185D> <80DB> <185E> <80E5> <185F> <80D9> <1860> <80DD> <1861> <80C4> <1862> <80DA> <1863> <80D6> <1864> <8109> <1865> <80EF> <1866> <80F1> <1867> <811B> <1868> <8129> <1869> <8123> <186A> <812F> <186B> <814B> <186C> <968B> <186D> <8146> <186E> <813E> <186F> <8153> <1870> <8151> <1871> <80FC> <1872> <8171> <1873> <816E> <1876> <8174> <1877> <8183> <1878> <8188> <1879> <818A> <187A> <8180> <187B> <8182> <187C> <81A0> <187D> <8195> <187E> <81A4> <187F> <81A3> <1880> <815F> <1881> <8193> <1882> <81A9> <1883> <81B0> <1884> <81B5> <1885> <81BE> <1886> <81B8> <1887> <81BD> <1888> <81C0> <1889> <81C2> <188A> <81BA> <188B> <81C9> <188C> <81CD> <188D> <81D1> <188E> <81D9> <188F> <81D8> <1890> <81C8> <1891> <81DA> <1894> <81E7> <1897> <81FE> <189A> <8205> <189B> <8207> <189C> <820A> <189D> <820D> <189E> <8210> <189F> <8216> <18A0> <8229> <18A1> <822B> <18A2> <8238> <18A3> <8233> <18A4> <8240> <18A5> <8259> <18A6> <8258> <18A7> <825D> <18A8> <825A> <18A9> <825F> <18AA> <8264> <18AB> <8262> <18AC> <8268> <18AF> <822E> <18B0> <8271> <18B3> <827E> <18B4> <828D> <18B5> <8292> <18B6> <82AB> <18B7> <829F> <18B8> <82BB> <18B9> <82AC> <18BA> <82E1> <18BB> <82E3> <18BC> <82DF> <18BD> <82D2> <18BE> <82F4> <18BF> <82F3> <18C0> <82FA> <18C1> <8393> <18C2> <8303> <18C3> <82FB> <18C4> <82F9> <18C5> <82DE> <18C6> <8306> <18C7> <82DC> <18C8> <8309> endbfchar 100 beginbfchar <18C9> <82D9> <18CA> <8335> <18CB> <8334> <18CC> <8316> <18CD> <8332> <18CE> <8331> <18CF> <8340> <18D0> <8339> <18D1> <8350> <18D2> <8345> <18D3> <832F> <18D4> <832B> <18D7> <8385> <18D8> <839A> <18D9> <83AA> <18DA> <839F> <18DB> <83A2> <18DC> <8396> <18DD> <8323> <18DE> <838E> <18DF> <8387> <18E0> <838A> <18E1> <837C> <18E2> <83B5> <18E3> <8373> <18E4> <8375> <18E5> <83A0> <18E6> <8389> <18E7> <83A8> <18E8> <83F4> <18E9> <8413> <18EA> <83EB> <18EB> <83CE> <18EC> <83FD> <18ED> <8403> <18EE> <83D8> <18EF> <840B> <18F0> <83C1> <18F1> <83F7> <18F2> <8407> <18F3> <83E0> <18F4> <83F2> <18F5> <840D> <18F6> <8422> <18F7> <8420> <18F8> <83BD> <18F9> <8438> <18FA> <8506> <18FB> <83FB> <18FC> <846D> <18FD> <842A> <18FE> <843C> <18FF> <855A> <1900> <8484> <1901> <8477> <1902> <846B> <1903> <84AD> <1904> <846E> <1905> <8482> <1906> <8469> <1907> <8446> <1908> <842C> <1909> <846F> <190A> <8479> <190B> <8435> <190C> <84CA> <190D> <8462> <190E> <84B9> <190F> <84BF> <1910> <849F> <1911> <84D9> <1912> <84CD> <1913> <84BB> <1914> <84DA> <1915> <84D0> <1916> <84C1> <1917> <84C6> <1918> <84D6> <1919> <84A1> <191A> <8521> <191B> <84FF> <191C> <84F4> <191F> <852C> <1920> <851F> <1921> <8515> <1922> <8514> <1923> <84FC> <1924> <8540> <1925> <8563> <1926> <8558> <1927> <8548> <1928> <8541> <1929> <8602> <192A> <854B> <192B> <8555> <192C> <8580> <192D> <85A4> <192E> <8588> <192F> <8591> <1930> <858A> endbfchar 100 beginbfchar <1931> <85A8> <1932> <856D> <1933> <8594> <1934> <859B> <1935> <85EA> <1936> <8587> <1937> <859C> <1938> <8577> <1939> <857E> <193A> <8590> <193B> <85C9> <193C> <85BA> <193D> <85CF> <193E> <85B9> <193F> <85D0> <1940> <85D5> <1941> <85DD> <1942> <85E5> <1943> <85DC> <1944> <85F9> <1945> <860A> <1946> <8613> <1947> <860B> <1948> <85FE> <1949> <85FA> <194A> <8606> <194B> <8622> <194C> <861A> <194D> <8630> <194E> <863F> <194F> <864D> <1950> <4E55> <1951> <8654> <1952> <865F> <1953> <8667> <1954> <8671> <1955> <8693> <1956> <86A3> <195B> <86B6> <195C> <86AF> <195D> <86C4> <195E> <86C6> <195F> <86B0> <1960> <86C9> <1961> <8823> <1962> <86AB> <1963> <86D4> <1964> <86DE> <1965> <86E9> <1966> <86EC> <1967> <86DF> <1968> <86DB> <1969> <86EF> <196A> <8712> <196B> <8706> <196C> <8708> <196D> <8700> <196E> <8703> <196F> <86FB> <1970> <8711> <1971> <8709> <1972> <870D> <1973> <86F9> <1974> <870A> <1975> <8734> <1976> <873F> <1977> <8737> <1978> <873B> <1979> <8725> <197A> <8729> <197B> <871A> <197C> <8760> <197D> <875F> <197E> <8778> <197F> <874C> <1980> <874E> <1981> <8774> <1982> <8757> <1983> <8768> <1984> <876E> <1985> <8759> <1986> <8753> <1987> <8763> <1988> <876A> <1989> <8805> <198A> <87A2> <198B> <879F> <198C> <8782> <198D> <87AF> <198E> <87CB> <198F> <87BD> <1990> <87C0> <1991> <87D0> <1992> <96D6> <1993> <87AB> <1994> <87C4> <1995> <87B3> <1996> <87C7> <1997> <87C6> <1998> <87BB> endbfchar 100 beginbfchar <1999> <87EF> <199A> <87F2> <199B> <87E0> <199C> <880F> <199D> <880D> <199E> <87FE> <19A1> <880E> <19A2> <87D2> <19A3> <8811> <19A4> <8816> <19A5> <8815> <19A6> <8822> <19A7> <8821> <19A8> <8831> <19A9> <8836> <19AA> <8839> <19AB> <8827> <19AC> <883B> <19AD> <8844> <19AE> <8842> <19AF> <8852> <19B0> <8859> <19B1> <885E> <19B2> <8862> <19B3> <886B> <19B4> <8881> <19B5> <887E> <19B6> <889E> <19B7> <8875> <19B8> <887D> <19B9> <88B5> <19BA> <8872> <19BB> <8882> <19BC> <8897> <19BD> <8892> <19BE> <88AE> <19BF> <8899> <19C0> <88A2> <19C1> <888D> <19C2> <88A4> <19C3> <88B0> <19C4> <88BF> <19C5> <88B1> <19C8> <88D4> <19CB> <88DD> <19CC> <88F9> <19CD> <8902> <19CE> <88FC> <19CF> <88F4> <19D0> <88E8> <19D1> <88F2> <19D2> <8904> <19D3> <890C> <19D4> <890A> <19D5> <8913> <19D6> <8943> <19D7> <891E> <19D8> <8925> <19DB> <8941> <19DC> <8944> <19DD> <893B> <19DE> <8936> <19DF> <8938> <19E0> <894C> <19E1> <891D> <19E2> <8960> <19E3> <895E> <19E4> <8966> <19E5> <8964> <19E6> <896D> <19E7> <896A> <19E8> <896F> <19E9> <8974> <19EA> <8977> <19EB> <897E> <19EC> <8983> <19ED> <8988> <19EE> <898A> <19EF> <8993> <19F0> <8998> <19F1> <89A1> <19F2> <89A9> <19F3> <89A6> <19F4> <89AC> <19F5> <89AF> <19F6> <89B2> <19F7> <89BA> <19F8> <89BD> <19FB> <89DA> <19FE> <89E7> <19FF> <89F4> <1A00> <89F8> <1A01> <8A03> <1A02> <8A16> <1A03> <8A10> <1A04> <8A0C> <1A05> <8A1B> <1A06> <8A1D> <1A07> <8A25> <1A08> <8A36> endbfchar 100 beginbfchar <1A09> <8A41> <1A0A> <8A5B> <1A0B> <8A52> <1A0C> <8A46> <1A0D> <8A48> <1A0E> <8A7C> <1A0F> <8A6D> <1A10> <8A6C> <1A11> <8A62> <1A12> <8A85> <1A13> <8A82> <1A14> <8A84> <1A15> <8AA8> <1A16> <8AA1> <1A17> <8A91> <1A1A> <8A9A> <1A1B> <8AA3> <1A1C> <8AC4> <1A1D> <8ACD> <1A1E> <8AC2> <1A1F> <8ADA> <1A20> <8AEB> <1A21> <8AF3> <1A22> <8AE7> <1A23> <8AE4> <1A24> <8AF1> <1A25> <8B14> <1A26> <8AE0> <1A27> <8AE2> <1A28> <8AF7> <1A29> <8ADE> <1A2A> <8ADB> <1A2B> <8B0C> <1A2C> <8B07> <1A2D> <8B1A> <1A2E> <8AE1> <1A2F> <8B16> <1A30> <8B10> <1A31> <8B17> <1A32> <8B20> <1A33> <8B33> <1A34> <97AB> <1A35> <8B26> <1A36> <8B2B> <1A37> <8B3E> <1A38> <8B28> <1A39> <8B41> <1A3A> <8B4C> <1A3B> <8B4F> <1A3C> <8B4E> <1A3D> <8B49> <1A3E> <8B56> <1A3F> <8B5B> <1A40> <8B5A> <1A41> <8B6B> <1A42> <8B5F> <1A43> <8B6C> <1A44> <8B6F> <1A45> <8B74> <1A46> <8B7D> <1A47> <8B80> <1A48> <8B8C> <1A49> <8B8E> <1A4C> <8B96> <1A4F> <8C3A> <1A50> <8C41> <1A51> <8C3F> <1A52> <8C48> <1A53> <8C4C> <1A54> <8C4E> <1A55> <8C50> <1A56> <8C55> <1A57> <8C62> <1A58> <8C6C> <1A59> <8C78> <1A5A> <8C7A> <1A5B> <8C82> <1A5C> <8C89> <1A5D> <8C85> <1A5E> <8C8A> <1A61> <8C94> <1A62> <8C7C> <1A63> <8C98> <1A64> <621D> <1A65> <8CAD> <1A66> <8CAA> <1A67> <8CBD> <1A6A> <8CAE> <1A6B> <8CB6> <1A6C> <8CC8> <1A6D> <8CC1> <1A6E> <8CE4> <1A6F> <8CE3> <1A70> <8CDA> <1A71> <8CFD> <1A76> <8D0A> <1A77> <8D07> <1A78> <8D0F> <1A79> <8D0D> <1A7A> <8D10> endbfchar 100 beginbfchar <1A7B> <9F4E> <1A7C> <8D13> <1A7D> <8CCD> <1A7E> <8D14> <1A7F> <8D16> <1A80> <8D67> <1A81> <8D6D> <1A82> <8D71> <1A83> <8D73> <1A84> <8D81> <1A85> <8D99> <1A86> <8DC2> <1A87> <8DBE> <1A88> <8DBA> <1A89> <8DCF> <1A8A> <8DDA> <1A8B> <8DD6> <1A8C> <8DCC> <1A8D> <8DDB> <1A8E> <8DCB> <1A91> <8DDF> <1A92> <8DE3> <1A93> <8DFC> <1A96> <8DFF> <1A99> <8E10> <1A9A> <8E1F> <1A9B> <8E42> <1A9C> <8E35> <1A9D> <8E30> <1A9E> <8E34> <1A9F> <8E4A> <1AA0> <8E47> <1AA1> <8E49> <1AA2> <8E4C> <1AA3> <8E50> <1AA4> <8E48> <1AA5> <8E59> <1AA6> <8E64> <1AA7> <8E60> <1AA8> <8E2A> <1AA9> <8E63> <1AAA> <8E55> <1AAB> <8E76> <1AAC> <8E72> <1AAD> <8E7C> <1AAE> <8E81> <1AAF> <8E87> <1AB0> <8E85> <1AB1> <8E84> <1AB2> <8E8B> <1AB3> <8E8A> <1AB4> <8E93> <1AB5> <8E91> <1AB6> <8E94> <1AB7> <8E99> <1AB8> <8EAA> <1AB9> <8EA1> <1ABA> <8EAC> <1ABB> <8EB0> <1ABC> <8EC6> <1ABD> <8EB1> <1ABE> <8EBE> <1ABF> <8EC5> <1AC0> <8EC8> <1AC1> <8ECB> <1AC2> <8EDB> <1AC3> <8EE3> <1AC4> <8EFC> <1AC5> <8EFB> <1AC6> <8EEB> <1AC7> <8EFE> <1AC8> <8F0A> <1AC9> <8F05> <1ACA> <8F15> <1ACB> <8F12> <1ACC> <8F19> <1ACD> <8F13> <1ACE> <8F1C> <1ACF> <8F1F> <1AD0> <8F1B> <1AD1> <8F0C> <1AD2> <8F26> <1AD3> <8F33> <1AD4> <8F3B> <1AD5> <8F39> <1AD6> <8F45> <1AD7> <8F42> <1AD8> <8F3E> <1AD9> <8F4C> <1ADA> <8F49> <1ADB> <8F46> <1ADC> <8F4E> <1ADD> <8F57> <1ADE> <8F5C> <1AE2> <8F9C> <1AE3> <8F9F> <1AE4> <8FA3> <1AE5> <8FAD> <1AE6> <8FAF> <1AE7> <8FB7> endbfchar 100 beginbfchar <1AE8> <8FDA> <1AE9> <8FE5> <1AEA> <8FE2> <1AEB> <8FEA> <1AEC> <8FEF> <1AED> <9087> <1AEE> <8FF4> <1AEF> <9005> <1AF2> <9011> <1AF3> <9015> <1AF4> <9021> <1AF5> <900D> <1AF6> <901E> <1AF7> <9016> <1AF8> <900B> <1AF9> <9027> <1AFA> <9036> <1AFB> <9035> <1AFC> <9039> <1AFD> <8FF8> <1B02> <900E> <1B03> <9049> <1B04> <903E> <1B05> <9056> <1B06> <9058> <1B07> <905E> <1B08> <9068> <1B09> <906F> <1B0A> <9076> <1B0B> <96A8> <1B0C> <9072> <1B0D> <9082> <1B0E> <907D> <1B0F> <9081> <1B10> <9080> <1B11> <908A> <1B12> <9089> <1B13> <908F> <1B14> <90A8> <1B15> <90AF> <1B16> <90B1> <1B17> <90B5> <1B18> <90E2> <1B19> <90E4> <1B1A> <6248> <1B1B> <90DB> <1B1C> <9102> <1B1D> <9112> <1B1E> <9119> <1B1F> <9132> <1B20> <9130> <1B21> <914A> <1B22> <9156> <1B23> <9158> <1B24> <9163> <1B25> <9165> <1B26> <9169> <1B27> <9173> <1B28> <9172> <1B29> <918B> <1B2A> <9189> <1B2B> <9182> <1B2C> <91A2> <1B2D> <91AB> <1B2E> <91AF> <1B2F> <91AA> <1B30> <91B5> <1B31> <91B4> <1B32> <91BA> <1B35> <91C9> <1B36> <91CB> <1B37> <91D0> <1B38> <91D6> <1B39> <91DF> <1B3A> <91E1> <1B3B> <91DB> <1B3C> <91FC> <1B3F> <921E> <1B40> <91FF> <1B41> <9214> <1B42> <922C> <1B43> <9215> <1B44> <9211> <1B45> <925E> <1B46> <9257> <1B47> <9245> <1B48> <9249> <1B49> <9264> <1B4A> <9248> <1B4B> <9295> <1B4C> <923F> <1B4D> <924B> <1B4E> <9250> <1B4F> <929C> <1B50> <9296> <1B51> <9293> <1B52> <929B> <1B53> <925A> <1B54> <92CF> <1B55> <92B9> endbfchar 100 beginbfchar <1B56> <92B7> <1B57> <92E9> <1B58> <930F> <1B59> <92FA> <1B5A> <9344> <1B5B> <932E> <1B5C> <9319> <1B5D> <9322> <1B5E> <931A> <1B5F> <9323> <1B60> <933A> <1B61> <9335> <1B62> <933B> <1B63> <935C> <1B64> <9360> <1B65> <937C> <1B66> <936E> <1B67> <9356> <1B68> <93B0> <1B6B> <9394> <1B6C> <93B9> <1B6F> <93E8> <1B70> <93E5> <1B71> <93D8> <1B72> <93C3> <1B73> <93DD> <1B74> <93D0> <1B75> <93C8> <1B76> <93E4> <1B77> <941A> <1B78> <9414> <1B79> <9413> <1B7A> <9403> <1B7B> <9407> <1B7C> <9410> <1B7D> <9436> <1B7E> <942B> <1B7F> <9435> <1B80> <9421> <1B81> <943A> <1B82> <9441> <1B83> <9452> <1B84> <9444> <1B85> <945B> <1B86> <9460> <1B87> <9462> <1B88> <945E> <1B89> <946A> <1B8A> <9229> <1B8B> <9470> <1B8C> <9475> <1B8D> <9477> <1B8E> <947D> <1B8F> <945A> <1B90> <947C> <1B91> <947E> <1B92> <9481> <1B93> <947F> <1B94> <9582> <1B95> <9587> <1B96> <958A> <1B97> <9594> <1B98> <9596> <1B9B> <95A0> <1B9C> <95A8> <1B9D> <95A7> <1B9E> <95AD> <1B9F> <95BC> <1BA0> <95BB> <1BA1> <95B9> <1BA2> <95BE> <1BA3> <95CA> <1BA4> <6FF6> <1BA5> <95C3> <1BA6> <95CD> <1BA7> <95CC> <1BA8> <95D5> <1BA9> <95D4> <1BAA> <95D6> <1BAB> <95DC> <1BAC> <95E1> <1BAD> <95E5> <1BAE> <95E2> <1BAF> <9621> <1BB0> <9628> <1BB3> <9642> <1BB4> <964C> <1BB5> <964F> <1BB6> <964B> <1BB7> <9677> <1BB8> <965C> <1BB9> <965E> <1BBA> <965D> <1BBB> <965F> <1BBC> <9666> <1BBD> <9672> <1BBE> <966C> <1BBF> <968D> <1BC0> <9698> <1BC1> <9695> endbfchar 100 beginbfchar <1BC2> <9697> <1BC3> <96AA> <1BC4> <96A7> <1BC7> <96B0> <1BC8> <96B4> <1BC9> <96B6> <1BCC> <96CE> <1BCD> <96CB> <1BCE> <96C9> <1BCF> <96CD> <1BD0> <894D> <1BD1> <96DC> <1BD2> <970D> <1BD3> <96D5> <1BD4> <96F9> <1BD5> <9704> <1BD6> <9706> <1BD7> <9708> <1BD8> <9713> <1BD9> <970E> <1BDA> <9711> <1BDB> <970F> <1BDC> <9716> <1BDD> <9719> <1BDE> <9724> <1BDF> <972A> <1BE0> <9730> <1BE1> <9739> <1BE4> <9744> <1BE5> <9746> <1BE6> <9748> <1BE7> <9742> <1BE8> <9749> <1BE9> <975C> <1BEA> <9760> <1BEB> <9764> <1BEC> <9766> <1BED> <9768> <1BEE> <52D2> <1BEF> <976B> <1BF0> <9771> <1BF1> <9779> <1BF2> <9785> <1BF3> <977C> <1BF4> <9781> <1BF5> <977A> <1BF6> <9786> <1BF7> <978B> <1BFA> <979C> <1BFB> <97A8> <1BFC> <97A6> <1BFD> <97A3> <1C00> <97C3> <1C01> <97C6> <1C02> <97C8> <1C03> <97CB> <1C04> <97DC> <1C05> <97ED> <1C06> <9F4F> <1C07> <97F2> <1C08> <7ADF> <1C09> <97F6> <1C0A> <97F5> <1C0B> <980F> <1C0C> <980C> <1C0D> <9838> <1C0E> <9824> <1C0F> <9821> <1C10> <9837> <1C11> <983D> <1C12> <9846> <1C13> <984F> <1C14> <984B> <1C15> <986B> <1C19> <9874> <1C1A> <9873> <1C1B> <98AA> <1C1C> <98AF> <1C1D> <98B1> <1C1E> <98B6> <1C1F> <98C4> <1C20> <98C3> <1C21> <98C6> <1C22> <98E9> <1C23> <98EB> <1C24> <9903> <1C25> <9909> <1C26> <9912> <1C27> <9914> <1C28> <9918> <1C29> <9921> <1C2C> <9924> <1C2D> <9920> <1C2E> <992C> <1C2F> <992E> <1C32> <9942> <1C33> <9949> <1C34> <9945> <1C35> <9950> <1C36> <994B> endbfchar 100 beginbfchar <1C39> <994C> <1C3A> <9955> <1C3D> <99A5> <1C40> <99BC> <1C41> <99DF> <1C42> <99DB> <1C43> <99DD> <1C44> <99D8> <1C45> <99D1> <1C4A> <99FB> <1C4B> <99F8> <1C4C> <9A01> <1C4D> <9A0F> <1C4E> <9A05> <1C4F> <99E2> <1C50> <9A19> <1C51> <9A2B> <1C52> <9A37> <1C53> <9A45> <1C54> <9A42> <1C55> <9A40> <1C56> <9A43> <1C57> <9A3E> <1C58> <9A55> <1C59> <9A4D> <1C5A> <9A5B> <1C5B> <9A57> <1C5C> <9A5F> <1C5D> <9A62> <1C5E> <9A65> <1C5F> <9A64> <1C60> <9A69> <1C61> <9A6B> <1C62> <9A6A> <1C63> <9AAD> <1C64> <9AB0> <1C65> <9ABC> <1C66> <9AC0> <1C67> <9ACF> <1C68> <9AD1> <1C6F> <9AE6> <1C70> <9AEF> <1C71> <9AEB> <1C72> <9AEE> <1C73> <9AF4> <1C74> <9AF1> <1C75> <9AF7> <1C76> <9AFB> <1C77> <9B06> <1C78> <9B18> <1C79> <9B1A> <1C7A> <9B1F> <1C7D> <9B25> <1C84> <9B32> <1C85> <9B44> <1C86> <9B43> <1C87> <9B4F> <1C8A> <9B51> <1C8B> <9B58> <1C8C> <9B74> <1C8D> <9B93> <1C8E> <9B83> <1C8F> <9B91> <1C94> <9BA8> <1C95> <9BB4> <1C96> <9BC0> <1C97> <9BCA> <1C98> <9BB9> <1C99> <9BC6> <1C9A> <9BCF> <1C9D> <9BE3> <1C9E> <9BE2> <1C9F> <9BE4> <1CA0> <9BD4> <1CA1> <9BE1> <1CA2> <9C3A> <1CA3> <9BF2> <1CA4> <9BF1> <1CA5> <9BF0> <1CA6> <9C15> <1CA7> <9C14> <1CA8> <9C09> <1CA9> <9C13> <1CAA> <9C0C> <1CAB> <9C06> <1CAC> <9C08> <1CAD> <9C12> <1CAE> <9C0A> <1CAF> <9C04> <1CB0> <9C2E> <1CB1> <9C1B> <1CB2> <9C25> <1CB3> <9C24> <1CB4> <9C21> <1CB5> <9C30> <1CB6> <9C47> <1CB7> <9C32> <1CB8> <9C46> <1CB9> <9C3E> <1CBA> <9C5A> endbfchar 100 beginbfchar <1CBB> <9C60> <1CBC> <9C67> <1CBD> <9C76> <1CBE> <9C78> <1CBF> <9CE7> <1CC0> <9CEC> <1CC1> <9CF0> <1CC2> <9D09> <1CC3> <9D08> <1CC4> <9CEB> <1CC5> <9D03> <1CC6> <9D06> <1CC7> <9D2A> <1CC8> <9D26> <1CC9> <9DAF> <1CCA> <9D23> <1CCB> <9D1F> <1CCC> <9D44> <1CCD> <9D15> <1CCE> <9D12> <1CCF> <9D41> <1CD0> <9D3F> <1CD1> <9D3E> <1CD2> <9D46> <1CD3> <9D48> <1CD6> <9D64> <1CD7> <9D51> <1CD8> <9D50> <1CD9> <9D59> <1CDA> <9D72> <1CDB> <9D89> <1CDC> <9D87> <1CDD> <9DAB> <1CDE> <9D6F> <1CDF> <9D7A> <1CE0> <9D9A> <1CE1> <9DA4> <1CE2> <9DA9> <1CE3> <9DB2> <1CE4> <9DC4> <1CE5> <9DC1> <1CE6> <9DBB> <1CE7> <9DB8> <1CE8> <9DBA> <1CE9> <9DC6> <1CEA> <9DCF> <1CEB> <9DC2> <1CEC> <9DD9> <1CED> <9DD3> <1CEE> <9DF8> <1CEF> <9DE6> <1CF0> <9DED> <1CF1> <9DEF> <1CF2> <9DFD> <1CF5> <9E1E> <1CF6> <9E75> <1CF7> <9E79> <1CF8> <9E7D> <1CF9> <9E81> <1CFA> <9E88> <1CFD> <9E92> <1CFE> <9E95> <1CFF> <9E91> <1D00> <9E9D> <1D01> <9EA5> <1D02> <9EA9> <1D03> <9EB8> <1D04> <9EAA> <1D05> <9EAD> <1D06> <9761> <1D07> <9ECC> <1D0B> <9ED4> <1D0C> <9EDC> <1D0D> <9EDE> <1D0E> <9EDD> <1D0F> <9EE0> <1D10> <9EE5> <1D11> <9EE8> <1D12> <9EEF> <1D13> <9EF4> <1D16> <9EF9> <1D1C> <76B7> <1D1D> <9F15> <1D1E> <9F21> <1D1F> <9F2C> <1D20> <9F3E> <1D21> <9F4A> <1D22> <9F52> <1D23> <9F54> <1D24> <9F63> <1D2A> <9F6C> <1D2B> <9F6A> <1D2C> <9F77> <1D2D> <9F72> <1D2E> <9F76> <1D2F> <9F95> <1D30> <9F9C> <1D31> <9FA0> <1D32> <582F> <1D33> <69C7> endbfchar 100 beginbfchar <1D34> <9059> <1D35> <7464> <1D36> <1DA1> <3349> <1DA2> <3314> <1DA3> <3322> <1DA4> <334D> <1DA5> <3318> <1DA6> <3327> <1DA7> <3303> <1DA8> <3336> <1DA9> <3351> <1DAA> <3357> <1DAB> <330D> <1DAC> <3326> <1DAD> <3323> <1DAE> <332B> <1DAF> <334A> <1DB0> <333B> <1DB6> <33C4> <1DB7> <33A1> <1DB8> <301D> <1DB9> <301F> <1DBA> <2116> <1DBB> <33CD> <1DBC> <2121> <1DC4> <3239> <1DC5> <337E> <1DC6> <337D> <1DC7> <337C> <1DC8> <222E> <1DC9> <2211> <1DCA> <221A> <1DCB> <22A5> <1DCC> <2220> <1DCD> <221F> <1DCE> <22BF> <1DD1> <555E> <1DD2> <98F4> <1DD3> <6EA2> <1DD4> <9C2F> <1DD5> <6DEB> <1DD6> <8FC2> <1DD7> <6B1D> <1DD8> <53A9> <1DD9> <958F> <1DDA> <5642> <1DDB> <990C> <1DDC> <7130> <1DDD> <8956> <1DDE> <9DD7> <1DDF> <8FE6> <1DE0> <6062> <1DE1> <62D0> <1DE2> <6666> <1DE3> <559D> <1DE4> <845B> <1DE5> <9784> <1DE6> <5699> <1DE7> <6F97> <1DE8> <7FF0> <1DE9> <7FEB> <1DEA> <5FBD> <1DEB> <7947> <1DEC> <4FE0> <1DED> <537F> <1DEE> <50C5> <1DEF> <8EC0> <1DF0> <55B0> <1DF1> <6ADB> <1DF2> <5C51> <1DF3> <9774> <1DF4> <7941> <1DF5> <6167> <1DF6> <7A3D> <1DF7> <7E6B> <1DF8> <834A> <1DF9> <9699> <1DFA> <5026> <1DFB> <5ACC> <1DFC> <6372> <1DFD> <9E7C> <1DFE> <8AFA> <1DFF> <5DF7> <1E00> <663B> <1E01> <6E9D> <1E02> <9EB4> <1E03> <9D60> <1E04> <7511> <1E05> <91C7> <1E06> <698A> <1E07> <6805> <1E08> <85A9> <1E09> <9BD6> <1E0A> <9306> <1E0B> <73CA> <1E0C> <53F1> <1E0D> <5C62> <1E0E> <906E> <1E0F> <6753> endbfchar 100 beginbfchar <1E10> <707C> <1E11> <7E61> <1E12> <914B> <1E13> <66D9> <1E14> <6E1A> <1E15> <85AF> <1E16> <85F7> <1E17> <54E8> <1E18> <5EE0> <1E19> <68A2> <1E1A> <8523> <1E1B> <91AC> <1E1C> <9798> <1E1D> <8755> <1E1E> <9771> <1E1F> <9017> <1E20> <7FE0> <1E21> <647A> <1E22> <901D> <1E23> <87EC> <1E24> <64B0> <1E25> <6813> <1E26> <714E> <1E27> <717D> <1E28> <8A6E> <1E29> <564C> <1E2A> <9061> <1E2B> <5275> <1E2C> <6414> <1E2D> <7626> <1E2E> <905C> <1E2F> <9A52> <1E30> <817F> <1E31> <9EDB> <1E32> <5544> <1E33> <6FEF> <1E34> <7422> <1E35> <86F8> <1E36> <5DFD> <1E37> <8FBF> <1E38> <68DA> <1E39> <9C48> <1E3A> <6A3D> <1E3B> <7C1E> <1E3C> <8A3B> <1E3D> <7026> <1E3E> <51CB> <1E3F> <6357> <1E40> <69CC> <1E41> <939A> <1E42> <585A> <1E43> <6451> <1E44> <912D> <1E45> <64E2> <1E46> <6EBA> <1E47> <5861> <1E48> <985A> <1E49> <5835> <1E4A> <5C60> <1E4B> <83DF> <1E4C> <8CED> <1E4D> <5858> <1E4E> <79B1> <1E4F> <9D07> <1E50> <7006> <1E51> <701E> <1E52> <5678> <1E53> <9041> <1E54> <9813> <1E55> <90A3> <1E56> <8B0E> <1E57> <7058> <1E58> <6962> <1E59> <79B0> <1E5A> <56CA> <1E5B> <724C> <1E5C> <9019> <1E5D> <79E4> <1E5E> <525D> <1E5F> <7BB8> <1E60> <6F51> <1E61> <91B1> <1E62> <633D> <1E63> <6249> <1E64> <6A0B> <1E65> <67CA> <1E66> <7A17> <1E67> <903C> <1E68> <5A9B> <1E69> <8B2C> <1E6A> <5EDF> <1E6B> <7015> <1E6C> <983B> <1E6D> <853D> <1E6E> <77A5> <1E6F> <5A29> <1E70> <5E96> <1E71> <6CE1> <1E72> <84EC> <1E73> <9830> endbfchar 100 beginbfchar <1E74> <9C52> <1E75> <9EB5> <1E76> <5132> <1E77> <9905> <1E78> <7C7E> <1E79> <9453> <1E7A> <6108> <1E7B> <7652> <1E7C> <7337> <1E7D> <7194> <1E7E> <8000> <1E7F> <840A> <1E80> <907C> <1E81> <6F23> <1E82> <7149> <1E83> <84EE> <1E84> <6994> <1E85> <881F> <1E86> <5154> <1E87> <5189> <1E88> <5195> <1E89> <51A4> <1E8A> <5539> <1E8B> <5533> <1E8C> <55E4> <1E8D> <5632> <1E8E> <56A5> <1E8F> <580B> <1E90> <5ABE> <1E91> <5BC3> <1E92> <5C5B> <1E93> <5E64> <1E94> <6097> <1E95> <6369> <1E96> <6406> <1E97> <6522> <1E98> <6583> <1E99> <67A6> <1E9A> <67B4> <1E9B> <689B> <1E9C> <688E> <1E9D> <6E6E> <1E9E> <71D7> <1E9F> <7228> <1EA0> <73CE> <1EA1> <7504> <1EA2> <750D> <1EA3> <7515> <1EA4> <7693> <1EA5> <787C> <1EA6> <7A31> <1EA7> <9F9D> <1EA8> <7B99> <1EA9> <7C90> <1EAA> <7CAE> <1EAB> <7D9B> <1EAC> <7DAE> <1EAD> <7D9F> <1EAE> <7FD4> <1EAF> <822E> <1EB0> <828D> <1EB1> <82D2> <1EB2> <8323> <1EB3> <8375> <1EB4> <8517> <1EB5> <853E> <1EB6> <8782> <1EB7> <87D2> <1EB8> <890A> <1EB9> <89AF> <1EBA> <8ADE> <1EBB> <8B41> <1EBC> <8DDA> <1EBD> <8E09> <1EBE> <8F13> <1EBF> <8FEA> <1EC0> <8FE9> <1EC1> <9058> <1EC2> <6248> <1EC3> <91C1> <1EC4> <95BB> <1EC5> <7762> <1EC6> <9724> <1EC7> <9760> <1EC8> <976D> <1EC9> <9824> <1ECA> <9B2E> <1ECB> <9B97> <1ECC> <9BF2> <1ECD> <9EAA> <1ECE> <9F9C> <1ED1> <203E> <1ED2> <1ED3> <30FC> <1ED4> <2015> <1ED5> <2010> <1ED6> <301C> <1ED7> <2016> <1ED8> <1ED9> <2026> endbfchar 100 beginbfchar <1EDA> <2025> <1EDF> <1EE0> <1EE1> <1EE2> <1EED> <1EEE> <3041> <1EEF> <3043> <1EF0> <3045> <1EF1> <3047> <1EF2> <3049> <1EF3> <3063> <1EF4> <3083> <1EF5> <3085> <1EF6> <3087> <1EF7> <308E> <1EF8> <30A1> <1EF9> <30A3> <1EFA> <30A5> <1EFB> <30A7> <1EFC> <30A9> <1EFD> <30C3> <1EFE> <30E3> <1EFF> <30E5> <1F00> <30E7> <1F01> <30EE> <1F04> <3349> <1F05> <3314> <1F06> <3322> <1F07> <334D> <1F08> <3318> <1F09> <3327> <1F0A> <3303> <1F0B> <3336> <1F0C> <3351> <1F0D> <3357> <1F0E> <330D> <1F0F> <3326> <1F10> <3323> <1F11> <332B> <1F12> <334A> <1F13> <333B> <1F16> <3094> <1F17> <304B> <1F18> <3051> <1F19> <82A6> <1F1A> <8328> <1F1B> <5653> <1F1C> <53A9> <1F1D> <7259> <1F1E> <6C72> <1F1F> <7B08> <1F20> <9957> <1F21> <62F3> <1F22> <9910> <1F23> <976D> <1F24> <717D> <1F25> <7A7F> <1F26> <7BAD> <1F27> <63C3> <1F28> <83DF> <1F29> <7962> <1F2A> <53DB> <1F2B> <7BC7> <1F2C> <8FC4> <1F2D> <7C3E> <1F2E> <50CA> <1F2F> <5315> <1F30> <55A9> <1F31> <56AE> <1F32> <5819> <1F33> <591B> <1F34> <5C28> <1F35> <5ED0> <1F36> <5ECF> <1F37> <6241> <1F38> <66C1> <1F39> <6C08> <1F3A> <6E23> <1F3B> <6EEC> <1F3C> <7A97> <1F3D> <7BDD> <1F3E> <7FE9> <1F3F> <8422> <1F40> <8759> <1F41> <880E> <1F42> <87D2> <1F43> <9A19> <1F44> <9EAD> <1F45> <1F46> <1F47> <1F48> <11A8> <1F49> <25C1> <1F4A> <25B7> <1F4B> <21E9> <1F4C> <21E7> <1F4D> <21E6> <1F4E> <21E8> <1F4F> <25A2> endbfchar 100 beginbfchar <1F50> <2667> <1F51> <2661> <1F52> <2664> <1F53> <2662> <1F54> <33A0> <1F55> <33A2> <1F58> <3397> <1F59> <2113> <1F5A> <3398> <1F5B> <33B3> <1F5C> <33B2> <1F5D> <33B1> <1F5E> <33B0> <1F62> <33CB> <1F63> <3390> <1F64> <33D4> <1F65> <3396> <1F66> <3322> <1F67> <3316> <1F68> <3318> <1F69> <3315> <1F6A> <3303> <1F6B> <3323> <1F6C> <3357> <1F6D> <3342> <1F6E> <3339> <1F6F> <333B> <1F70> <3300> <1F71> <3331> <1F72> <3347> <1F73> <331E> <1F74> <332A> <1F75> <1F76> <337F> <1F77> <2121> <1F78> <260E> <1F79> <3036> <1F7A> <3020> <1F7B> <1F7C> <1F7D> <0030002E> <1F9B> <1FA6> <1FA7> <1FA8> <1FA9> <1FAA> <1FAB> <1FAC> <1FAD> <1FAE> <1FAF> <1FCA> <3243> <1FCB> <323D> <1FCC> <323F> <1FCD> <3234> <1FCE> <3238> <1FCF> <3233> <1FD0> <323C> <1FD1> <3242> <1FD2> <323E> <1FD3> <3236> <1FD4> <3235> <1FD5> <323B> <1FD6> <3240> <1FD7> <323A> <1FD8> <32B0> <1FD9> <32AD> <1FDA> <32A9> <1FDB> <32AF> <1FDC> <3294> <1FDD> <32AA> <1FDE> <3298> <1FDF> <32AB> <1FE0> <3292> <1FE1> <3291> <1FE2> <3293> <1FE3> <32AC> <1FE4> <32AE> <1FE5> <3296> <1FE6> <1FE7> <1FE8> <1FE9> <1FEA> <1FEB> <1FEC> <1FED> <1FEE> <1FEF> <1FF0> <1FF1> <1FF2> <1FF3> <1FF4> <1FF5> <1FF6> <33CC> <1FF7> <3305> <1FF8> <00BD> <1FF9> <00BC> endbfchar 100 beginbfchar <1FFA> <339F> <1FFB> <33A3> <1FFC> <33A6> <1FFD> <1FFE> <1FFF> <329E> <2002> <33C8> <2003> <222D> <2004> <2005> <3230> <200C> <3237> <200D> <3241> <200E> <27A1> <2011> <21E9> <2012> <25C9> <2013> <2660> <2014> <2665> <2015> <2663> <2016> <2666> <201B> <261E> <201E> <261F> <201F> <3299> <2020> <24EA> <2023> <2024> <2025> <202E> <258F> <202F> <258E> <2030> <258D> <2031> <258C> <2032> <258B> <2033> <258A> <2034> <2589> <2039> <2570> <203A> <256F> <203B> <2550> <203C> <255E> <203D> <256A> <203E> <2561> <2041> <25E5> <2042> <25E4> <2043> <25CF> <2044> <0ED0> <2048> <304B> <2049> <3051> <204A> <9022> <204B> <8FBB> <204C> <204D> <204E> <3013> <204F> <2050> <2051> <02CF> <2052> <2057> <201C> <2058> <201E> <2059> <2018> <205A> <201A> <205B> <02BA> <205C> <51DC> <205D> <7199> <2067> <0058004900490049> <2068> <005800490056> <2069> <00580056> <206C> <0078006900690069> <206D> <007800690076> <206E> <00780076> <206F> <217F> <2070> <210A> <2071> <2109> <2072> <00540042> <2073> <004600410058> <2074> <3004> <2075> <21C6> <2078> <21932191> <207D> <5927> <207E> <5C0F> <207F> <329D> <2080> <63A7> <2081> <670996504F1A793E> <2082> <8CA156E36CD54EBA> <2083> <337B> <2084> <337F> <2085> <670996504F1A793E> <2086> <8CA156E36CD54EBA> <2087> <3333> <2088> <334E> <2089> <3322> <208A> <3316> <208B> <3305> <208C> <3305> <208D> <3305> <208E> <3333> <208F> <334E> <2090> <334E> <2091> <334E> <2092> <3303> <2093> <3318> <2094> <3315> <2095> <3339> endbfchar 100 beginbfchar <2096> <3339> <2097> <3339> <2098> <3357> <2099> <3342> <209A> <3342> <209B> <3342> <209C> <3323> <209D> <333B> <209E> <3300> <209F> <331E> <20A0> <331E> <20A1> <331E> <20A2> <332A> <20A3> <332A> <20A4> <332A> <20A5> <3347> <20A6> <3331> <20A7> <7E8A> <20A8> <891C> <20A9> <9348> <20AA> <9288> <20AB> <84DC> <20AC> <4FC9> <20AD> <70BB> <20AE> <6631> <20AF> <68C8> <20B0> <92F9> <20B1> <66FB> <20B2> <5F45> <20B3> <4E28> <20B4> <4EE1> <20B5> <4EFC> <20B6> <4F00> <20B7> <4F03> <20B8> <4F39> <20B9> <4F56> <20BA> <4F92> <20BB> <4F8A> <20BC> <4F9A> <20BD> <4F94> <20BE> <4FCD> <20BF> <5040> <20C0> <5022> <20C1> <4FFF> <20C2> <501E> <20C3> <5046> <20C4> <5070> <20C5> <5042> <20C6> <5094> <20C7> <50F4> <20C8> <50D8> <20C9> <514A> <20CA> <5164> <20CB> <519D> <20CC> <51BE> <20CD> <51EC> <20CE> <5215> <20CF> <529C> <20D0> <52A6> <20D1> <52C0> <20D2> <52DB> <20D3> <5300> <20D4> <5307> <20D5> <5324> <20D6> <5372> <20D7> <5393> <20D8> <53B2> <20D9> <53DD> <20DA> <20DB> <549C> <20DC> <548A> <20DD> <54A9> <20DE> <54FF> <20DF> <5586> <20E0> <5759> <20E1> <5765> <20E2> <57AC> <20E3> <57C8> <20E4> <57C7> <20E7> <589E> <20E8> <58B2> <20E9> <590B> <20EA> <5953> <20EB> <595B> <20EC> <595D> <20ED> <5963> <20EE> <59A4> <20EF> <59BA> <20F0> <5B56> <20F1> <5BC0> <20F2> <752F> <20F3> <5BD8> <20F4> <5BEC> <20F5> <5C1E> <20F6> <5CA6> <20F7> <5CBA> <20F8> <5CF5> <20F9> <5D27> <20FA> <5D53> <20FB> endbfchar 100 beginbfchar <20FC> <5D42> <20FD> <5D6D> <2100> <5DD0> <2101> <5F21> <2102> <5F34> <2103> <5F67> <2104> <5FB7> <2105> <5FDE> <2106> <605D> <2107> <6085> <2108> <608A> <2109> <60DE> <210A> <60D5> <210B> <6120> <210C> <60F2> <210D> <6111> <210E> <6137> <210F> <6130> <2110> <6198> <2111> <6213> <2112> <62A6> <2113> <63F5> <2114> <6460> <2115> <649D> <2116> <64CE> <2117> <654E> <2118> <6600> <2119> <6615> <211A> <6609> <211B> <662E> <211C> <661E> <211D> <6624> <211E> <6665> <211F> <6657> <2120> <6659> <2121> <2122> <6673> <2123> <6699> <2124> <66A0> <2125> <66B2> <2126> <66BF> <2127> <66FA> <2128> <670E> <2129> <212A> <6766> <212B> <67BB> <212C> <6852> <212D> <67C0> <212E> <6801> <212F> <6844> <2130> <68CF> <2131> <2132> <6968> <2133> <2134> <6998> <2135> <69E2> <2136> <6A30> <2137> <6A6B> <2138> <6A46> <2139> <6A73> <213A> <6A7E> <213B> <6AE2> <213C> <6AE4> <213D> <6BD6> <213E> <6C3F> <213F> <6C5C> <2140> <6C86> <2141> <6C6F> <2142> <6CDA> <2143> <6D04> <2144> <6D87> <2145> <6D6F> <2146> <6D96> <2147> <6DAC> <2148> <6DCF> <2149> <6DF8> <214A> <6DF2> <214B> <6DFC> <214C> <6E39> <214D> <6E5C> <214E> <6E27> <214F> <6E3C> <2150> <6EBF> <2151> <6F88> <2152> <6FB5> <2153> <6FF5> <2154> <7005> <2155> <7007> <2156> <7028> <2157> <7085> <2158> <70AB> <2159> <710F> <215A> <7104> <215B> <715C> <215E> <215F> <71C1> <2160> <71FE> <2161> <72B1> <2162> <72BE> <2163> <7324> endbfchar 100 beginbfchar <2164> <2165> <7377> <2166> <73BD> <2167> <73C9> <2168> <73D6> <2169> <73E3> <216A> <73D2> <216B> <7407> <216C> <73F5> <216D> <7426> <216E> <742A> <216F> <7429> <2170> <742E> <2171> <7462> <2172> <7489> <2173> <749F> <2174> <7501> <2175> <756F> <2176> <7682> <2177> <769C> <2178> <769E> <2179> <769B> <217A> <76A6> <217B> <217C> <7746> <217D> <52AF> <217E> <7821> <217F> <784E> <2180> <7864> <2181> <787A> <2182> <7930> <2186> <7994> <2187> <2188> <799B> <2189> <7AD1> <218A> <7AE7> <218B> <218C> <7AEB> <218D> <7B9E> <218E> <218F> <7D48> <2190> <7D5C> <2191> <7DB7> <2192> <7DA0> <2193> <7DD6> <2194> <7E52> <2195> <7F47> <2196> <7FA1> <2197> <2198> <8301> <2199> <8362> <219A> <837F> <219B> <83C7> <219C> <83F6> <219D> <8448> <219E> <84B4> <219F> <8553> <21A0> <8559> <21A1> <856B> <21A2> <21A3> <85B0> <21A6> <8807> <21A7> <88F5> <21A8> <8A12> <21A9> <8A37> <21AA> <8A79> <21AB> <8AA7> <21AC> <8ABE> <21AD> <8ADF> <21AE> <21AF> <8AF6> <21B0> <8B53> <21B1> <8B7F> <21B2> <8CF0> <21B3> <8CF4> <21B4> <8D12> <21B5> <8D76> <21B6> <21B7> <8ECF> <21BA> <9067> <21BB> <90DE> <21BC> <21BD> <9115> <21BE> <9127> <21BF> <91DA> <21C0> <91D7> <21C1> <91DE> <21C6> <9206> <21C7> <9210> <21C8> <920A> <21C9> <923A> <21CA> <9240> <21CB> <923C> <21CC> <924E> <21CD> <9259> <21CE> <9251> <21CF> <9239> <21D0> <9267> <21D1> <92A7> <21D4> <92E7> endbfchar 100 beginbfchar <21D5> <92D7> <21D6> <92D9> <21D7> <92D0> <21D8> <21D9> <92D5> <21DA> <92E0> <21DB> <92D3> <21DC> <9325> <21DD> <9321> <21DE> <92FB> <21DF> <21E0> <931E> <21E1> <92FF> <21E2> <931D> <21E3> <9302> <21E4> <9370> <21E5> <9357> <21E6> <93A4> <21E7> <93C6> <21E8> <93DE> <21E9> <93F8> <21EA> <9431> <21EB> <9445> <21EC> <9448> <21ED> <9592> <21EE> <21EF> <21F0> <969D> <21F1> <96AF> <21F2> <9733> <21F3> <973B> <21F4> <9743> <21F5> <974D> <21F6> <974F> <21F7> <9751> <21F8> <9755> <21F9> <9857> <21FA> <9865> <21FD> <9927> <21FE> <21FF> <999E> <2200> <9A4E> <2201> <9AD9> <2202> <9ADC> <2203> <9B75> <2204> <9B72> <2205> <9B8F> <2206> <9BB1> <2207> <9BBB> <2208> <9C00> <2209> <9D70> <220A> <9D6B> <220B> <220C> <9E19> <220D> <9ED1> <220E> <220F> <005C> <224C> <00A5> <226C> <00A6> <226D> <007D> <226E> <0303> <226F> <02BC> <2270> <005C> <2271> <02BB> <2272> <007C> <2273> <007E> <2277> <2044> <2278> <0192> <2279> <00A7> <227A> <00A4> <227B> <201C> <227C> <00AB> <2281> <2012> <2284> <00B7> <2285> <00B6> <2286> <2022> <2287> <201A> <2288> <201E> <2289> <201D> <228A> <00BB> <228B> <2026> <228C> <2030> <228D> <00BF> <2290> <00AF> <2294> <030A> <2295> <00B8> <2296> <030B> <2297> <0328> <2298> <030C> <2299> <0336> <229A> <00C6> <229B> <00AA> <229C> <0141> <229D> <00D8> <229E> <0152> <229F> <00BA> <22A0> <00E6> <22A1> <0131> <22A2> <0142> <22A3> <00F8> endbfchar 100 beginbfchar <22A4> <0153> <22A5> <00DF> <22A6> <002D> <22A7> <00A9> <22A8> <00AC> <22A9> <00AE> <22AE> <00B5> <22AF> <00B9> <22EE> <0160> <22EF> <0178> <22F0> <017D> <22F1> <0305> <22F2> <0161> <22F3> <2122> <22F4> <017E> <22F5> <0030> <22F6> <2002> <2332> <00A5> <2354> <203E> <2355> <2356> <2032> <2357> <2358> <2036> <2359> <00C4> <235A> <00F9> <235B> <00E9> <235C> <00ED> <235D> <00DF> <235E> <00E7> <235F> <00C7> <2360> <2361> <2364> <00F3> <2365> <00FA> <2366> <00A1> <2367> <00BF> <2368> <00BD> <2369> <00D6> <236A> <00DC> <236B> <00E4> <236C> <00EB> <236D> <00EF> <236E> <00F6> <236F> <00DC> <2370> <00E2> <2371> <00EA> <2372> <00EE> <2373> <00F4> <2374> <00FC> <2375> <00E0> <2376> <00E9> <2377> <00E1> <2378> <007E> <2379> <237A> <237B> <005C> <23BE> <30EE> <23BF> <30AB> <23C0> <30B1> <23C1> <23C2> <30AC> <23C3> <30AE> <23C4> <30B0> <23C5> <30B2> <23C6> <30B4> <23C7> <30B6> <23C8> <30B8> <23C9> <30BA> <23CA> <30BC> <23CB> <30BE> <23CC> <30C0> <23CD> <30C2> <23CE> <30C5> <23CF> <30C7> <23D0> <30C9> <23DB> <23DC> <3092> <23DD> <3041> <23DE> <3043> <23DF> <3045> <23E0> <3047> <23E1> <3049> <23E2> <3083> <23E3> <3085> <23E4> <3087> <23E5> <3063> <23E6> <3042> <23E7> <3044> <23E8> <3046> <23E9> <3048> <23EC> <304D> <23ED> <304F> <23EE> <3051> <23EF> <3053> <23F0> <3055> <23F1> <3057> <23F2> <3059> <23F3> <305B> <23F4> <305D> <23F5> <305F> endbfchar 100 beginbfchar <23F6> <3061> <23F7> <3064> <23F8> <3066> <23F9> <3068> <2400> <3072> <2401> <3075> <2402> <3078> <2403> <307B> <2409> <3084> <240A> <3086> <2411> <308F> <2412> <3093> <2415> <308E> <2416> <304C> <2417> <304E> <2418> <3050> <2419> <3052> <241A> <3054> <241B> <3056> <241C> <3068> <241D> <305A> <241E> <305C> <241F> <305E> <2420> <3060> <2421> <3062> <2422> <3065> <2423> <3067> <2424> <3069> <242F> <2430> <2431> <005B> <2432> <005D> <2433> <2434> <2435> <2436> <2439> <243A> <243B> <2012> <243C> <2489> <25B2> <248A> <20AC> <248B> <2126> <248E> <2491> <0101> <2492> <012B> <2493> <016B> <2494> <0113> <2495> <014D> <2496> <0100> <2497> <012A> <2498> <016A> <2499> <0112> <249A> <014C> <24A1> <2070> <24B2> <01CD> <24B3> <011A> <24B4> <0045030A> <24B5> <0EBC> <24B6> <01CF> <24B7> <0049030A> <24B8> <0128> <24B9> <01D1> <24BA> <004F030A> <24BB> <01D3> <24BC> <016E> <24BD> <0168> <24BE> <01CE> <24BF> <011B> <24C0> <0065030A> <24C1> <0EBD> <24C2> <01D0> <24C3> <0131030A> <24C4> <0129> <24C5> <01D2> <24C6> <006F030A> <24C7> <01D4> <24C8> <016F> <24C9> <0169> <24CA> <0251> <24CB> <0251> <24CC> <0251> <24CD> <01FD> <24CE> <00E6> <24CF> <0254> <24D0> <0254> <24D1> <0254> <24D2> <0259> <24D3> <0259> <24D6> <025A> <24D9> <025B> <24DA> <025B> <24DB> <006A> <24DC> <014B> <24DD> <0275> <24DE> <028C> <24DF> <028C> <24E0> <028C> <24E1> <0292> <24E2> <0283> endbfchar 100 beginbfchar <24E3> <02D0> <2520> <00A5> <2540> <00A6> <2541> <007D> <2542> <0303> <2543> <02BC> <2544> <005C> <2545> <02BB> <2546> <007C> <2547> <007E> <254B> <2044> <254C> <0192> <254D> <00A7> <254E> <00A4> <254F> <201C> <2550> <00AB> <2555> <2012> <2558> <00B7> <2559> <00B6> <255A> <2022> <255B> <201A> <255C> <201E> <255D> <201D> <255E> <00BB> <255F> <2026> <2560> <2030> <2561> <00BF> <2564> <00AF> <2568> <030A> <2569> <00B8> <256A> <030B> <256B> <0328> <256C> <030C> <256D> <0336> <256E> <00C6> <256F> <00AA> <2570> <0141> <2571> <00D8> <2572> <0152> <2573> <00BA> <2574> <00E6> <2575> <0131> <2576> <0142> <2577> <00F8> <2578> <0153> <2579> <00DF> <257A> <002D> <257B> <00A9> <257C> <00AC> <257D> <00AE> <2582> <00B5> <2583> <00B9> <25C2> <0160> <25C3> <0178> <25C4> <017D> <25C5> <0305> <25C6> <0161> <25C7> <2122> <25C8> <017E> <25C9> <0030> <25CA> <20AC> <25CB> <2126> <25CE> <25D1> <0101> <25D2> <012B> <25D3> <016B> <25D4> <0113> <25D5> <014D> <25D6> <0100> <25D7> <012A> <25D8> <016A> <25D9> <0112> <25DA> <014C> <25E1> <2070> <25F2> <01CD> <25F3> <011A> <25F4> <0045030A> <25F5> <0EBC> <25F6> <01CF> <25F7> <0049030A> <25F8> <0128> <25F9> <01D1> <25FA> <004F030A> <25FB> <01D3> <25FC> <016E> <25FD> <0168> <25FE> <01CE> <25FF> <011B> <2600> <0065030A> <2601> <0EBD> <2602> <01D0> <2603> <0131030A> <2604> <0129> <2605> <01D2> <2606> <006F030A> <2607> <01D4> <2608> <016F> <2609> <0169> <2614> <0336> <2615> <002D> endbfchar 100 beginbfchar <2616> <003D> <2617> <002C> <2628> <0336> <2629> <002D> <262A> <003D> <262B> <002C> <2632> <00B7> <2633> <20AC> <2634> <0030002F0033> <2637> <00BE> <263E> <0031002F0037> <263F> <0032002F0037> <2640> <0033002F0037> <2641> <0034002F0037> <2642> <0035002F0037> <2643> <0036002F0037> <2648> <0031002F0039> <2649> <0032002F0039> <264A> <0034002F0039> <264B> <0035002F0039> <264C> <0037002F0039> <264D> <0038002F0039> <264E> <0031002F00310030> <264F> <0033002F00310030> <2650> <0037002F00310030> <2651> <0039002F00310030> <2652> <0031002F00310031> <2653> <0032002F00310031> <2654> <0033002F00310031> <2655> <0034002F00310031> <2656> <0035002F00310031> <2657> <0036002F00310031> <2658> <0037002F00310031> <2659> <0038002F00310031> <265A> <0039002F00310031> <265B> <00310030002F00310031> <265C> <0031002F00310032> <265D> <0035002F00310032> <265E> <0037002F00310032> <265F> <00310031002F00310032> <2660> <0031002F003100300030> <2661> <0030002F0033> <2662> <0031002F0032> <2663> <0031002F0033> <2664> <0032002F0033> <2665> <0031002F0034> <2666> <0033002F0034> <2667> <0031002F0035> <2668> <0032002F0035> <2669> <0033002F0035> <266A> <0034002F0035> <266B> <0031002F0036> <266C> <0035002F0036> <266D> <0031002F0037> <266E> <0032002F0037> <266F> <0033002F0037> <2670> <0034002F0037> <2671> <0035002F0037> <2672> <0036002F0037> <2673> <0031002F0038> <2674> <0033002F0038> <2675> <0035002F0038> <2676> <0037002F0038> <2677> <0031002F0039> <2678> <0032002F0039> <2679> <0034002F0039> <267A> <0035002F0039> <267B> <0037002F0039> <267C> <0038002F0039> <267D> <0031002F00310030> <267E> <0033002F00310030> <267F> <0037002F00310030> <2680> <0039002F00310030> <2681> <0031002F00310031> <2682> <0032002F00310031> <2683> <0033002F00310031> <2684> <0034002F00310031> <2685> <0035002F00310031> <2686> <0036002F00310031> <2687> <0037002F00310031> <2688> <0038002F00310031> <2689> <0039002F00310031> <268A> <00310030002F00310031> <268B> <0031002F00310032> <268C> <0035002F00310032> <268D> <0037002F00310032> <268E> <00310031002F00310032> <268F> <0031002F003100300030> <269A> <0030> <269B> <2163> <269C> <00300030> <269D> <00300031> <269E> <00300032> <269F> <00300033> <26A0> <00300034> <26A1> <00300035> <26A2> <00300036> <26A3> <00300037> <26A4> <00300038> <26A5> <00300039> endbfchar 100 beginbfchar <26A6> <00320031> <26A7> <00320032> <26A8> <00320033> <26A9> <00320034> <26AA> <00320035> <26AB> <00320036> <26AC> <00320037> <26AD> <00320038> <26AE> <00320039> <26AF> <00330030> <26B0> <00330031> <26B1> <00330032> <26B2> <00330033> <26B3> <00330034> <26B4> <00330035> <26B5> <00330036> <26B6> <00330037> <26B7> <00330038> <26B8> <00330039> <26B9> <00340030> <26BA> <00340031> <26BB> <00340032> <26BC> <00340033> <26BD> <00340034> <26BE> <00340035> <26BF> <00340036> <26C0> <00340037> <26C1> <00340038> <26C2> <00340039> <26C3> <00350030> <26C4> <00350031> <26C5> <00350032> <26C6> <00350033> <26C7> <00350034> <26C8> <00350035> <26C9> <00350036> <26CA> <00350037> <26CB> <00350038> <26CC> <00350039> <26CD> <00360030> <26CE> <00360031> <26CF> <00360032> <26D0> <00360033> <26D1> <00360034> <26D2> <00360035> <26D3> <00360036> <26D4> <00360037> <26D5> <00360038> <26D6> <00360039> <26D7> <00370030> <26D8> <00370031> <26D9> <00370032> <26DA> <00370033> <26DB> <00370034> <26DC> <00370035> <26DD> <00370036> <26DE> <00370037> <26DF> <00370038> <26E0> <00370039> <26E1> <00380030> <26E2> <00380031> <26E3> <00380032> <26E4> <00380033> <26E5> <00380034> <26E6> <00380035> <26E7> <00380036> <26E8> <00380037> <26E9> <00380038> <26EA> <00380039> <26EB> <00390030> <26EC> <00390031> <26ED> <00390032> <26EE> <00390033> <26EF> <00390034> <26F0> <00390035> <26F1> <00390036> <26F2> <00390037> <26F3> <00390038> <26F4> <00390039> <26F5> <003100300030> <2702> <0078006900690069> <2703> <007800690076> <2704> <00780076> <2711> <0058004900490049> <2712> <005800490056> <2713> <00580056> <272E> <3042> <272F> <3044> <2730> <3046> <2731> <3048> <2734> <304D> <2735> <304F> <2736> <3051> <2737> <3053> <2738> <3055> <2739> <3057> <273A> <3059> <273B> <305B> <273C> <305D> <273D> <305F> endbfchar 100 beginbfchar <273E> <3061> <273F> <3064> <2740> <3066> <2741> <3068> <2748> <3072> <2749> <3075> <274A> <3078> <274B> <307B> <2751> <3084> <2752> <3086> <275E> <30A2> <275F> <30A4> <2760> <30A6> <2761> <30A8> <2764> <30AD> <2765> <30AF> <2766> <30B1> <2767> <30B3> <2768> <30B5> <2769> <30B7> <276A> <30B9> <276B> <30BB> <276C> <30BD> <276D> <30BF> <276E> <30C1> <276F> <30C4> <2770> <30C6> <2771> <30C8> <2778> <30D2> <2779> <30D5> <277A> <30D8> <277B> <30DB> <2781> <30E4> <2782> <30E6> <2798> <53414E00> <2799> <53414E8C> <279A> <53414E09> <279B> <534156DB> <279C> <53414E94> <279D> <5341516D> <279E> <53414E03> <279F> <5341516B> <27A0> <53414E5D> <27A1> <4E8C5341> <27A2> <55B6> <27A3> <5408> <27A4> <6CEB> <27A5> <554F> <27A6> <7B54> <27A7> <4F8B> <27BC> <3063> <27BD> <624D> <27BE> <3007> <27BF> <4E00> <27C0> <4E8C> <27C1> <4E09> <27C2> <56DB> <27C3> <4E94> <27C4> <516D> <27C5> <4E03> <27C6> <516B> <27C7> <4E5D> <27C8> <5341> <27C9> <3007> <27CA> <4E00> <27CB> <4E8C> <27CC> <4E09> <27CD> <56DB> <27CE> <4E94> <27CF> <516D> <27D0> <4E03> <27D1> <516B> <27D2> <4E5D> <27D3> <5341> <27D4> <3007> <27D5> <4E00> <27D6> <4E8C> <27D7> <4E09> <27D8> <56DB> <27D9> <4E94> <27DA> <516D> <27DB> <4E03> <27DC> <516B> <27DD> <4E5D> <27DE> <3064> <27DF> <624D> <27E0> <4E00> <27E1> <4E8C> <27E2> <4E09> <27E3> <56DB> <27E4> <4E94> <27E5> <516D> <27E6> <4E03> <27E7> <516B> <27E8> <4E5D> <27E9> <5341> <27EA> <3007> <27EB> <4E00> <27EC> <4E8C> <27ED> <4E09> endbfchar 100 beginbfchar <27EE> <56DB> <27EF> <4E94> <27F0> <516D> <27F1> <4E03> <27F2> <516B> <27F3> <4E5D> <27F4> <5341> <27F5> <30B3> <27F6> <3063> <27F7> <30C3> <27F8> <30A9> <27F9> <00280029> <27FA> <00300030> <2804> <00330032> <2805> <00330033> <2806> <00330034> <2807> <00330035> <2808> <00330036> <2809> <00330037> <280A> <00330038> <280B> <00330039> <280C> <00340030> <280D> <00340031> <280E> <00340032> <280F> <00340033> <2810> <00340034> <2811> <00340035> <2812> <00340036> <2813> <00340037> <2814> <00340038> <2815> <00340039> <2816> <00350030> <2817> <00350031> <2818> <00350032> <2819> <00350033> <281A> <00350034> <281B> <00350035> <281C> <00350036> <281D> <00350037> <281E> <00350038> <281F> <00350039> <2820> <00360030> <2821> <00360031> <2822> <00360032> <2823> <00360033> <2824> <00360034> <2825> <00360035> <2826> <00360036> <2827> <00360037> <2828> <00360038> <2829> <00360039> <282A> <00370030> <282B> <00370031> <282C> <00370032> <282D> <00370033> <282E> <00370034> <282F> <00370035> <2830> <00370036> <2831> <00370037> <2832> <00370038> <2833> <00370039> <2834> <00380030> <2835> <00380031> <2836> <00380032> <2837> <00380033> <2838> <00380034> <2839> <00380035> <283A> <00380036> <283B> <00380037> <283C> <00380038> <283D> <00380039> <283E> <00390030> <283F> <00390031> <2840> <00390032> <2841> <00390033> <2842> <00390034> <2843> <00390035> <2844> <00390036> <2845> <00390037> <2846> <00390038> <2847> <00390039> <2848> <003100300030> <287D> <3042> <287E> <3044> <287F> <3046> <2880> <3048> <2883> <304D> <2884> <304F> <2885> <3051> <2886> <3053> <2887> <3055> <2888> <3057> <2889> <3059> <288A> <305B> <288B> <305D> <288C> <305F> <288D> <3061> <288E> <3064> <288F> <3066> <2890> <3068> endbfchar 100 beginbfchar <2897> <3072> <2898> <3075> <2899> <3078> <289A> <307B> <28A0> <3084> <28A1> <3086> <28DC> <30F3> <28E7> <3290> <28EE> <8ABF> <28EF> <329F> <28F0> <526F> <28F1> <6E1B> <28F2> <6A19> <28F3> <6B20> <28F4> <57FA> <28F5> <7981> <28F8> <329B> <28F9> <329A> <28FA> <32A3> <28FB> <32A2> <28FC> <3297> <28FD> <51FA> <28FE> <329C> <28FF> <3295> <2900> <6E08> <2901> <5897> <2902> <554F> <2903> <7B54> <2904> <4F8B> <2905> <96FB> <2906> <25CC> <2907> <0030> <2908> <00300030> <2909> <00300031> <290A> <00300032> <290B> <00300033> <290C> <00300034> <290D> <00300035> <290E> <00300036> <290F> <00300037> <2910> <00300038> <2911> <00300039> <2912> <00310030> <2913> <00310031> <2914> <00310032> <2915> <00310033> <2916> <00310034> <2917> <00310035> <2918> <00310036> <2919> <00310037> <291A> <00310038> <291B> <00310039> <291C> <00320030> <291D> <00320031> <291E> <00320032> <291F> <00320033> <2920> <00320034> <2921> <00320035> <2922> <00320036> <2923> <00320037> <2924> <00320038> <2925> <00320039> <2926> <00330030> <2927> <00330031> <2928> <00330032> <2929> <00330033> <292A> <00330034> <292B> <00330035> <292C> <00330036> <292D> <00330037> <292E> <00330038> <292F> <00330039> <2930> <00340030> <2931> <00340031> <2932> <00340032> <2933> <00340033> <2934> <00340034> <2935> <00340035> <2936> <00340036> <2937> <00340037> <2938> <00340038> <2939> <00340039> <293A> <00350030> <293B> <00350031> <293C> <00350032> <293D> <00350033> <293E> <00350034> <293F> <00350035> <2940> <00350036> <2941> <00350037> <2942> <00350038> <2943> <00350039> <2944> <00360030> <2945> <00360031> <2946> <00360032> <2947> <00360033> <2948> <00360034> <2949> <00360035> <294A> <00360036> <294B> <00360037> endbfchar 100 beginbfchar <294C> <00360038> <294D> <00360039> <294E> <00370030> <294F> <00370031> <2950> <00370032> <2951> <00370033> <2952> <00370034> <2953> <00370035> <2954> <00370036> <2955> <00370037> <2956> <00370038> <2957> <00370039> <2958> <00380030> <2959> <00380031> <295A> <00380032> <295B> <00380033> <295C> <00380034> <295D> <00380035> <295E> <00380036> <295F> <00380037> <2960> <00380038> <2961> <00380039> <2962> <00390030> <2963> <00390031> <2964> <00390032> <2965> <00390033> <2966> <00390034> <2967> <00390035> <2968> <00390036> <2969> <00390037> <296A> <00390038> <296B> <00390039> <296C> <003100300030> <29A1> <3042> <29A2> <3044> <29A3> <3046> <29A4> <3048> <29A7> <304D> <29A8> <304F> <29A9> <3051> <29AA> <3053> <29AB> <3055> <29AC> <3057> <29AD> <3059> <29AE> <305B> <29AF> <305D> <29B0> <305F> <29B1> <3061> <29B2> <3064> <29B3> <3066> <29B4> <3068> <29BB> <3072> <29BC> <3075> <29BD> <3078> <29BE> <307B> <29C4> <3084> <29C5> <3086> <29D1> <30A2> <29D2> <30A4> <29D3> <30A6> <29D4> <30A8> <29D7> <30AD> <29D8> <30AF> <29D9> <30B1> <29DA> <30B3> <29DB> <30B5> <29DC> <30B7> <29DD> <30B9> <29DE> <30BB> <29DF> <30BD> <29E0> <30BF> <29E1> <30C1> <29E2> <30C4> <29E3> <30C6> <29E4> <30C8> <29EB> <30D2> <29EC> <30D5> <29ED> <30D8> <29EE> <30DB> <29F4> <30E4> <29F5> <30E6> <2A00> <30F3> <2A01> <65E5> <2A02> <6708> <2A03> <706B> <2A04> <6C34> <2A05> <6728> <2A06> <91D1> <2A07> <571F> <2A08> <554F> <2A09> <7B54> <2A0A> <4F8B> <2A0B> <25CF> <2A0C> <0030> <2A0D> <00300030> <2A0E> <0031> <2A0F> <00300031> <2A10> <0032> <2A11> <00300032> <2A12> <0033> endbfchar 100 beginbfchar <2A13> <00300033> <2A14> <0034> <2A15> <00300034> <2A16> <0035> <2A17> <00300035> <2A18> <0036> <2A19> <00300036> <2A1A> <0037> <2A1B> <00300037> <2A1C> <0038> <2A1D> <00300038> <2A1E> <0039> <2A1F> <00300039> <2A20> <00310030> <2A21> <00310031> <2A22> <00310032> <2A23> <00310033> <2A24> <00310034> <2A25> <00310035> <2A26> <00310036> <2A27> <00310037> <2A28> <00310038> <2A29> <00310039> <2A2A> <00320030> <2A2B> <00320031> <2A2C> <00320032> <2A2D> <00320033> <2A2E> <00320034> <2A2F> <00320035> <2A30> <00320036> <2A31> <00320037> <2A32> <00320038> <2A33> <00320039> <2A34> <00330030> <2A35> <00330031> <2A36> <00330032> <2A37> <00330033> <2A38> <00330034> <2A39> <00330035> <2A3A> <00330036> <2A3B> <00330037> <2A3C> <00330038> <2A3D> <00330039> <2A3E> <00340030> <2A3F> <00340031> <2A40> <00340032> <2A41> <00340033> <2A42> <00340034> <2A43> <00340035> <2A44> <00340036> <2A45> <00340037> <2A46> <00340038> <2A47> <00340039> <2A48> <00350030> <2A49> <00350031> <2A4A> <00350032> <2A4B> <00350033> <2A4C> <00350034> <2A4D> <00350035> <2A4E> <00350036> <2A4F> <00350037> <2A50> <00350038> <2A51> <00350039> <2A52> <00360030> <2A53> <00360031> <2A54> <00360032> <2A55> <00360033> <2A56> <00360034> <2A57> <00360035> <2A58> <00360036> <2A59> <00360037> <2A5A> <00360038> <2A5B> <00360039> <2A5C> <00370030> <2A5D> <00370031> <2A5E> <00370032> <2A5F> <00370033> <2A60> <00370034> <2A61> <00370035> <2A62> <00370036> <2A63> <00370037> <2A64> <00370038> <2A65> <00370039> <2A66> <00380030> <2A67> <00380031> <2A68> <00380032> <2A69> <00380033> <2A6A> <00380034> <2A6B> <00380035> <2A6C> <00380036> <2A6D> <00380037> <2A6E> <00380038> <2A6F> <00380039> <2A70> <00390030> <2A71> <00390031> <2A72> <00390032> <2A73> <00390033> <2A74> <00390034> <2A75> <00390035> <2A76> <00390036> endbfchar 100 beginbfchar <2A77> <00390037> <2A78> <00390038> <2A79> <00390039> <2A7A> <003100300030> <2AAF> <3042> <2AB0> <3044> <2AB1> <3046> <2AB2> <3048> <2AB5> <304D> <2AB6> <304F> <2AB7> <3051> <2AB8> <3053> <2AB9> <3055> <2ABA> <3057> <2ABB> <3059> <2ABC> <305B> <2ABD> <305D> <2ABE> <305F> <2ABF> <3061> <2AC0> <3064> <2AC1> <3066> <2AC2> <3068> <2AC9> <3072> <2ACA> <3075> <2ACB> <3078> <2ACC> <307B> <2AD2> <3084> <2AD3> <3086> <2ADF> <30A2> <2AE0> <30A4> <2AE1> <30A6> <2AE2> <30A8> <2AE5> <30AD> <2AE6> <30AF> <2AE7> <30B1> <2AE8> <30B3> <2AE9> <30B5> <2AEA> <30B7> <2AEB> <30B9> <2AEC> <30BB> <2AED> <30BD> <2AEE> <30BF> <2AEF> <30C1> <2AF0> <30C4> <2AF1> <30C6> <2AF2> <30C8> <2AF9> <30D2> <2AFA> <30D5> <2AFB> <30D8> <2AFC> <30DB> <2B02> <30E4> <2B03> <30E6> <2B0F> <65E5> <2B10> <6708> <2B11> <706B> <2B12> <6C34> <2B13> <6728> <2B14> <91D1> <2B15> <571F> <2B16> <8CA0> <2B17> <52DD> <2B18> <554F> <2B19> <7B54> <2B1A> <4F8B> <2B1B> <25A1> <2B1C> <25A1> <2B1D> <0030> <2B1E> <00300030> <2B1F> <0031> <2B20> <00300031> <2B21> <0032> <2B22> <00300032> <2B23> <0033> <2B24> <00300033> <2B25> <0034> <2B26> <00300034> <2B27> <0035> <2B28> <00300035> <2B29> <0036> <2B2A> <00300036> <2B2B> <0037> <2B2C> <00300037> <2B2D> <0038> <2B2E> <00300038> <2B2F> <0039> <2B30> <00300039> <2B31> <00310030> <2B32> <00310031> <2B33> <00310032> <2B34> <00310033> <2B35> <00310034> <2B36> <00310035> <2B37> <00310036> <2B38> <00310037> <2B39> <00310038> <2B3A> <00310039> <2B3B> <00320030> <2B3C> <00320031> <2B3D> <00320032> <2B3E> <00320033> endbfchar 100 beginbfchar <2B3F> <00320034> <2B40> <00320035> <2B41> <00320036> <2B42> <00320037> <2B43> <00320038> <2B44> <00320039> <2B45> <00330030> <2B46> <00330031> <2B47> <00330032> <2B48> <00330033> <2B49> <00330034> <2B4A> <00330035> <2B4B> <00330036> <2B4C> <00330037> <2B4D> <00330038> <2B4E> <00330039> <2B4F> <00340030> <2B50> <00340031> <2B51> <00340032> <2B52> <00340033> <2B53> <00340034> <2B54> <00340035> <2B55> <00340036> <2B56> <00340037> <2B57> <00340038> <2B58> <00340039> <2B59> <00350030> <2B5A> <00350031> <2B5B> <00350032> <2B5C> <00350033> <2B5D> <00350034> <2B5E> <00350035> <2B5F> <00350036> <2B60> <00350037> <2B61> <00350038> <2B62> <00350039> <2B63> <00360030> <2B64> <00360031> <2B65> <00360032> <2B66> <00360033> <2B67> <00360034> <2B68> <00360035> <2B69> <00360036> <2B6A> <00360037> <2B6B> <00360038> <2B6C> <00360039> <2B6D> <00370030> <2B6E> <00370031> <2B6F> <00370032> <2B70> <00370033> <2B71> <00370034> <2B72> <00370035> <2B73> <00370036> <2B74> <00370037> <2B75> <00370038> <2B76> <00370039> <2B77> <00380030> <2B78> <00380031> <2B79> <00380032> <2B7A> <00380033> <2B7B> <00380034> <2B7C> <00380035> <2B7D> <00380036> <2B7E> <00380037> <2B7F> <00380038> <2B80> <00380039> <2B81> <00390030> <2B82> <00390031> <2B83> <00390032> <2B84> <00390033> <2B85> <00390034> <2B86> <00390035> <2B87> <00390036> <2B88> <00390037> <2B89> <00390038> <2B8A> <00390039> <2B8B> <003100300030> <2BC0> <3042> <2BC1> <3044> <2BC2> <3046> <2BC3> <3048> <2BC6> <304D> <2BC7> <304F> <2BC8> <3051> <2BC9> <3053> <2BCA> <3055> <2BCB> <3057> <2BCC> <3059> <2BCD> <305B> <2BCE> <305D> <2BCF> <305F> <2BD0> <3061> <2BD1> <3064> <2BD2> <3066> <2BD3> <3068> <2BDA> <3072> <2BDB> <3075> <2BDC> <3078> <2BDD> <307B> <2BE3> <3084> endbfchar 100 beginbfchar <2BE4> <3086> <2BF0> <30A2> <2BF1> <30A4> <2BF2> <30A6> <2BF3> <30A8> <2BF6> <30AD> <2BF7> <30AF> <2BF8> <30B1> <2BF9> <30B3> <2BFA> <30B5> <2BFB> <30B7> <2BFC> <30B9> <2BFD> <30BB> <2BFE> <30BD> <2BFF> <30BF> <2C00> <30C1> <2C01> <30C4> <2C02> <30C6> <2C03> <30C8> <2C0A> <30D2> <2C0B> <30D5> <2C0C> <30D8> <2C0D> <30DB> <2C13> <30E4> <2C14> <30E6> <2C20> <65E5> <2C21> <6708> <2C22> <706B> <2C23> <6C34> <2C24> <6728> <2C25> <91D1> <2C26> <571F> <2C27> <554F> <2C28> <7B54> <2C29> <4F8B> <2C2A> <25A0> <2C2B> <0030> <2C2C> <00300030> <2C2D> <0031> <2C2E> <00300031> <2C2F> <0032> <2C30> <00300032> <2C31> <0033> <2C32> <00300033> <2C33> <0034> <2C34> <00300034> <2C35> <0035> <2C36> <00300035> <2C37> <0036> <2C38> <00300036> <2C39> <0037> <2C3A> <00300037> <2C3B> <0038> <2C3C> <00300038> <2C3D> <0039> <2C3E> <00300039> <2C3F> <00310030> <2C40> <00310031> <2C41> <00310032> <2C42> <00310033> <2C43> <00310034> <2C44> <00310035> <2C45> <00310036> <2C46> <00310037> <2C47> <00310038> <2C48> <00310039> <2C49> <00320030> <2C4A> <00320031> <2C4B> <00320032> <2C4C> <00320033> <2C4D> <00320034> <2C4E> <00320035> <2C4F> <00320036> <2C50> <00320037> <2C51> <00320038> <2C52> <00320039> <2C53> <00330030> <2C54> <00330031> <2C55> <00330032> <2C56> <00330033> <2C57> <00330034> <2C58> <00330035> <2C59> <00330036> <2C5A> <00330037> <2C5B> <00330038> <2C5C> <00330039> <2C5D> <00340030> <2C5E> <00340031> <2C5F> <00340032> <2C60> <00340033> <2C61> <00340034> <2C62> <00340035> <2C63> <00340036> <2C64> <00340037> <2C65> <00340038> <2C66> <00340039> <2C67> <00350030> <2C68> <00350031> <2C69> <00350032> <2C6A> <00350033> endbfchar 100 beginbfchar <2C6B> <00350034> <2C6C> <00350035> <2C6D> <00350036> <2C6E> <00350037> <2C6F> <00350038> <2C70> <00350039> <2C71> <00360030> <2C72> <00360031> <2C73> <00360032> <2C74> <00360033> <2C75> <00360034> <2C76> <00360035> <2C77> <00360036> <2C78> <00360037> <2C79> <00360038> <2C7A> <00360039> <2C7B> <00370030> <2C7C> <00370031> <2C7D> <00370032> <2C7E> <00370033> <2C7F> <00370034> <2C80> <00370035> <2C81> <00370036> <2C82> <00370037> <2C83> <00370038> <2C84> <00370039> <2C85> <00380030> <2C86> <00380031> <2C87> <00380032> <2C88> <00380033> <2C89> <00380034> <2C8A> <00380035> <2C8B> <00380036> <2C8C> <00380037> <2C8D> <00380038> <2C8E> <00380039> <2C8F> <00390030> <2C90> <00390031> <2C91> <00390032> <2C92> <00390033> <2C93> <00390034> <2C94> <00390035> <2C95> <00390036> <2C96> <00390037> <2C97> <00390038> <2C98> <00390039> <2C99> <003100300030> <2CCE> <3042> <2CCF> <3044> <2CD0> <3046> <2CD1> <3048> <2CD4> <304D> <2CD5> <304F> <2CD6> <3051> <2CD7> <3053> <2CD8> <3055> <2CD9> <3057> <2CDA> <3059> <2CDB> <305B> <2CDC> <305D> <2CDD> <305F> <2CDE> <3061> <2CDF> <3064> <2CE0> <3066> <2CE1> <3068> <2CE8> <3072> <2CE9> <3075> <2CEA> <3078> <2CEB> <307B> <2CF1> <3084> <2CF2> <3086> <2CFE> <30A2> <2CFF> <30A4> <2D00> <30A6> <2D01> <30A8> <2D04> <30AD> <2D05> <30AF> <2D06> <30B1> <2D07> <30B3> <2D08> <30B5> <2D09> <30B7> <2D0A> <30B9> <2D0B> <30BB> <2D0C> <30BD> <2D0D> <30BF> <2D0E> <30C1> <2D0F> <30C4> <2D10> <30C6> <2D11> <30C8> <2D18> <30D2> <2D19> <30D5> <2D1A> <30D8> <2D1B> <30DB> <2D21> <30E4> <2D22> <30E6> <2D2E> <65E5> <2D2F> <6708> <2D30> <706B> <2D31> <6C34> <2D32> <6728> endbfchar 100 beginbfchar <2D33> <91D1> <2D34> <571F> <2D35> <554F> <2D36> <7B54> <2D37> <4F8B> <2D38> <0030> <2D39> <00300030> <2D3A> <0031> <2D3B> <00300031> <2D3C> <0032> <2D3D> <00300032> <2D3E> <0033> <2D3F> <00300033> <2D40> <0034> <2D41> <00300034> <2D42> <0035> <2D43> <00300035> <2D44> <0036> <2D45> <00300036> <2D46> <0037> <2D47> <00300037> <2D48> <0038> <2D49> <00300038> <2D4A> <0039> <2D4B> <00300039> <2D4C> <00310030> <2D4D> <00310031> <2D4E> <00310032> <2D4F> <00310033> <2D50> <00310034> <2D51> <00310035> <2D52> <00310036> <2D53> <00310037> <2D54> <00310038> <2D55> <00310039> <2D56> <00320030> <2D57> <00320031> <2D58> <00320032> <2D59> <00320033> <2D5A> <00320034> <2D5B> <00320035> <2D5C> <00320036> <2D5D> <00320037> <2D5E> <00320038> <2D5F> <00320039> <2D60> <00330030> <2D61> <00330031> <2D62> <00330032> <2D63> <00330033> <2D64> <00330034> <2D65> <00330035> <2D66> <00330036> <2D67> <00330037> <2D68> <00330038> <2D69> <00330039> <2D6A> <00340030> <2D6B> <00340031> <2D6C> <00340032> <2D6D> <00340033> <2D6E> <00340034> <2D6F> <00340035> <2D70> <00340036> <2D71> <00340037> <2D72> <00340038> <2D73> <00340039> <2D74> <00350030> <2D75> <00350031> <2D76> <00350032> <2D77> <00350033> <2D78> <00350034> <2D79> <00350035> <2D7A> <00350036> <2D7B> <00350037> <2D7C> <00350038> <2D7D> <00350039> <2D7E> <00360030> <2D7F> <00360031> <2D80> <00360032> <2D81> <00360033> <2D82> <00360034> <2D83> <00360035> <2D84> <00360036> <2D85> <00360037> <2D86> <00360038> <2D87> <00360039> <2D88> <00370030> <2D89> <00370031> <2D8A> <00370032> <2D8B> <00370033> <2D8C> <00370034> <2D8D> <00370035> <2D8E> <00370036> <2D8F> <00370037> <2D90> <00370038> <2D91> <00370039> <2D92> <00380030> <2D93> <00380031> <2D94> <00380032> <2D95> <00380033> <2D96> <00380034> endbfchar 100 beginbfchar <2D97> <00380035> <2D98> <00380036> <2D99> <00380037> <2D9A> <00380038> <2D9B> <00380039> <2D9C> <00390030> <2D9D> <00390031> <2D9E> <00390032> <2D9F> <00390033> <2DA0> <00390034> <2DA1> <00390035> <2DA2> <00390036> <2DA3> <00390037> <2DA4> <00390038> <2DA5> <00390039> <2DA6> <003100300030> <2DDB> <3042> <2DDC> <3044> <2DDD> <3046> <2DDE> <3048> <2DE1> <304D> <2DE2> <304F> <2DE3> <3051> <2DE4> <3053> <2DE5> <3055> <2DE6> <3057> <2DE7> <3059> <2DE8> <305B> <2DE9> <305D> <2DEA> <305F> <2DEB> <3061> <2DEC> <3064> <2DED> <3066> <2DEE> <3068> <2DF5> <3072> <2DF6> <3075> <2DF7> <3078> <2DF8> <307B> <2DFE> <3084> <2DFF> <3086> <2E0B> <30A2> <2E0C> <30A4> <2E0D> <30A6> <2E0E> <30A8> <2E11> <30AD> <2E12> <30AF> <2E13> <30B1> <2E14> <30B3> <2E15> <30B5> <2E16> <30B7> <2E17> <30B9> <2E18> <30BB> <2E19> <30BD> <2E1A> <30BF> <2E1B> <30C1> <2E1C> <30C4> <2E1D> <30C6> <2E1E> <30C8> <2E25> <30D2> <2E26> <30D5> <2E27> <30D8> <2E28> <30DB> <2E2E> <30E4> <2E2F> <30E6> <2E3B> <65E5> <2E3C> <6708> <2E3D> <706B> <2E3E> <6C34> <2E3F> <6728> <2E40> <91D1> <2E41> <571F> <2E42> <554F> <2E43> <7B54> <2E44> <4F8B> <2E45> <25A0> <2E46> <33C2> <2E47> <33CD> <2E48> <2116> <2E49> <00500048> <2E4A> <33D8> <2E4B> <33DA> <2E4E> <00560053> <2E4F> <2100> <2E50> <33C2> <2E51> <0063002F0063> <2E52> <33C4> <2E53> <2105> <2E54> <3397> <2E55> <3371> <2E56> <3398> <2E57> <2113> <2E58> <338D> <2E59> <339B> <2E5A> <3396> <2E5B> <006D002F006D> <2E5C> <006E002F006D> <2E5F> <30553058> <2E60> <30553058> <2E61> <30A230C8> <2E64> <3304> endbfchar 100 beginbfchar <2E65> <3306> <2E66> <30A630EB30B7> <2E67> <3308> <2E68> <30A830AF30B5> <2E69> <3307> <2E6A> <330A> <2E6B> <30AA30F330B030B930C830ED30FC30E0> <2E6C> <3309> <2E6D> <30AA30F330C830ED> <2E6E> <330B> <2E6F> <30AB30C330D7> <2E70> <330C> <2E77> <30AD30ED30EA30C330C830EB> <2E78> <3317> <2E79> <30B030B930FC30E0> <2E7A> <3319> <2E7B> <30AF30EB30B630FC30C9> <2E83> <3324> <2E84> <30C730AB> <2E85> <3325> <2E86> <30C630E9> <2E87> <30C930E930AF30DE> <2E8A> <30D030FC30C4> <2E8B> <332D> <2E8C> <30D130B930AB30EB> <2E8D> <30D030EC30EB> <2E91> <3332> <2E92> <30D530A130E930C9> <2E93> <30D530A730E030C8> <2E96> <333C> <2E97> <30D830AF30C8> <2E98> <30D830AF30C830D130B930AB30EB> <2E99> <30DA30BB30BF> <2E9A> <3337> <2E9B> <30DA30BF> <2E9C> <3338> <2E9D> <333A> <2E9E> <333D> <2E9F> <3341> <2EA7> <3348> <2EAC> <30E630FC30ED> <2EAD> <30E930C9> <2EAE> <3352> <2EAF> <3354> <2EB0> <30EB30AF30B9> <2EB1> <30EB30D430A2> <2EB2> <3353> <2EB5> <30A230C8> <2EB8> <3304> <2EB9> <3306> <2EBA> <30A630EB30B7> <2EBB> <3308> <2EBC> <30A830AF30B5> <2EBD> <3307> <2EBE> <330A> <2EBF> <30AA30F330B030B930C830ED30FC30E0> <2EC0> <3309> <2EC1> <30AA30F330C830ED> <2EC2> <330B> <2EC3> <30AB30C330D7> <2EC4> <330C> <2ECB> <30AD30ED30EA30C430C830EB> <2ECC> <3317> <2ECD> <30B030B930FC30E0> <2ECE> <3319> <2ECF> <30AF30EB30B630CF30C9> <2ED7> <3324> <2ED8> <30C730AB> <2ED9> <3325> <2EDA> <30C630E9> <2EDB> <30C930E930AF30DE> <2EDE> <30D030FC30C4> <2EDF> <332D> <2EE0> <30D130B930AB30EB> <2EE1> <30D030EC30EB> <2EE5> <3332> <2EE6> <30D530A130E930C9> <2EE7> <30D530A730E030C8> <2EEA> <333C> <2EEB> <30D830AF30C8> <2EEC> <30D830AF30C830D130B930AB30EB> <2EED> <30DA30BB30BF> <2EEE> <3337> <2EEF> <30DA30BF> <2EF0> <3338> <2EF1> <333A> <2EF2> <333D> <2EF3> <3341> <2EFB> <3348> <2F00> <30E630FC30ED> <2F01> <30E930C9> <2F02> <3352> <2F03> <3354> <2F04> <30EB30AF30B9> <2F05> <30EB30D430A2> <2F06> <3353> <2F09> <337E> <2F0A> <337D> <2F0B> <337C> <2F0C> <337B> endbfchar 100 beginbfchar <2F0D> <533B76426CD54EBA> <2F0E> <5B6668216CD54EBA> <2F0F> <5171540C7D445408> <2F10> <5354540C7D445408> <2F11> <54088CC74F1A793E> <2F12> <5408540D4F1A793E> <2F13> <793E56E36CD54EBA> <2F14> <5B9765596CD54EBA> <2F15> <90F54FBF756A53F7> <2F16> <533B76426CD54EBA> <2F17> <5B6668216CD54EBA> <2F18> <5171540C7D445408> <2F19> <5354540C7D445408> <2F1A> <54088CC74F1A793E> <2F1B> <5408540D4F1A793E> <2F1C> <793E56E36CD54EBA> <2F1D> <5B9765596CD54EBA> <2F1E> <90F54FBF756A53F7> <2F1F> <002D> <2F20> <003D> <2F21> <2103> <2F22> <2640> <2F23> <2642> <2F24> <3013> <2F25> <3012> <2F2E> <2F2F> <2F36> <0027> <2F37> <0022> <2F38> <004A00410053> <2F39> <2135> <2F3A> <03D0> <2F3B> <220A> <2F3C> <210F> <2F3D> <00B5> <2F3E> <03C6> <2F3F> <03DB> <2F40> <03D1> <2F41> <2F44> <266C> <2F45> <2F46> <00A9> <2F47> <00A9> <2F48> <00AE> <2F49> <00AE> <2F4A> <2F4B> <2F4F> <203C> <2F50> <2049> <2F51> <0021> <2F52> <203C> <2F53> <2049> <2F54> <244A> <2F55> <005C005C> <2F56> <2213> <2F57> <2260> <2F58> <2243> <2F63> <2F64> <2F6D> <2F6E> <2F6F> <2F70> <2F71> <2F72> <2F73> <2F74> <2F75> <2F76> <2F77> <2F78> <2F79> <2F7A> <2F7B> <2F7C> <2F7D> <2F7E> <2F7F> <2F80> <2F81> <2F82> <2F83> <2F84> <2F85> <2F86> <2F87> <2F88> <2F8B> <2F8C> <2F8D> <2F8E> <2F8F> <2702> <2F90> <2702> <2F91> <2702> <2F92> <2702> <2F93> <2F94> <3012> <2F95> <3088308A> <2F96> <534D> <2F97> <2207> endbfchar 100 beginbfchar <2F98> <2205> <2F99> <22A0> <2F9A> <2296> <2F9B> <2298> <2F9C> <2295> <2F9D> <2297> <2F9E> <229E> <2F9F> <2295> <2FA0> <0021> <2FA1> <25B3> <2FA2> <25C0> <2FA3> <25B6> <2FA4> <21E6> <2FA5> <21E8> <2FA6> <21E7> <2FA7> <21E9> <2FA8> <21D0> <2FA9> <2194> <2FAE> <21CC> <2FAF> <21C6> <2FB2> <2190> <2FB3> <2192> <2FB4> <2191> <2FB8> <2504> <2FB9> <2506> <2FBA> <3030> <2FBB> <2307> <2FBC> <2FBD> <2FBE> <2FBF> <2FC0> <2FC1> <2FC2> <2FC3> <2FC4> <2FC5> <2FC6> <2FC7> <2FC8> <2FC9> <2FCA> <2FCB> <2FCC> <25A1> <2FCD> <25AB> <2FCE> <25A0> <2FCF> <25AA> <2FD0> <2FD1> <271A> <2FD2> <2FD3> <2FD4> <2FD5> <2FD6> <2FD7> <25C7> <2FD8> <2FD9> <25C6> <2FDA> <2FDB> <25CE> <2FDC> <25C9> <2FDD> <25CB> <2FDE> <25E6> <2FDF> <25CF> <2FE0> <2022> <2FE1> <2FE2> <2FE3> <2756> <2FE4> <2FED> <3053> <2FEE> <3053> <2FEF> <30B3> <2FF0> <30B3> <304C> <30FC> <3057> <30F5> <305E> <30F6> <3100> <3094> <3103> <30FC> <310E> <30F5> <3115> <30F6> <3161> <30FB> <3162> <3163> <203B> <3164> <25CB> <3165> <25CE> <3166> <25C9> <3167> <25B3> <3168> <25B2> <31D5> <3041> <31D6> <3043> <31D7> <3045> <31D8> <3047> <31D9> <3049> <31DA> <304B> <31DB> <3051> <31DC> <3063> <31DD> <3083> <31DE> <3085> <31DF> <3087> <31E0> <308E> <31EC> <30F5> endbfchar 100 beginbfchar <31F3> <30F6> <3237> <30A1> <3238> <30A3> <3239> <30A5> <323A> <30A7> <323B> <30A9> <323E> <30C3> <323F> <30E3> <3240> <30E5> <3241> <30E7> <3242> <30EE> <3243> <30FC> <3244> <30FC> <3245> <6CE8> <3246> <20AC> <3247> <2126> <324A> <324D> <0101> <324E> <012B> <324F> <016B> <3250> <0113> <3251> <014D> <3252> <0100> <3253> <012A> <3254> <016A> <3255> <0112> <3256> <014C> <325D> <2070> <326E> <01CD> <326F> <011A> <3270> <0045030A> <3271> <0EBC> <3272> <01CF> <3273> <0049030A> <3274> <0128> <3275> <01D1> <3276> <004F030A> <3277> <01D3> <3278> <016E> <3279> <0168> <327A> <01CE> <327B> <011B> <327C> <0065030A> <327D> <0EBD> <327E> <01D0> <327F> <0131030A> <3280> <0129> <3281> <01D2> <3282> <006F030A> <3283> <01D4> <3284> <016F> <3285> <0169> <3286> <0251> <3287> <0251> <3288> <0251> <3289> <01FD> <328A> <00E6> <328B> <0254> <328C> <0254> <328D> <0254> <328E> <0259> <328F> <0259> <3292> <025A> <3295> <025B> <3296> <025B> <3297> <006A> <3298> <014B> <3299> <0275> <329A> <028C> <329B> <028C> <329C> <028C> <329D> <0292> <329E> <0283> <329F> <02D0> <32DC> <00A5> <32FC> <00A6> <32FD> <007D> <32FE> <0303> <32FF> <02BC> <3300> <005C> <3301> <02BB> <3302> <007C> <3303> <007E> <3307> <2044> <3308> <0192> <3309> <00A7> <330A> <00A4> <330B> <201C> <330C> <00AB> <3311> <2012> <3314> <00B7> <3315> <00B6> <3316> <2022> <3317> <201A> <3318> <201E> <3319> <201D> <331A> <00BB> <331B> <2026> <331C> <2030> <331D> <00BF> endbfchar 100 beginbfchar <3320> <00AF> <3324> <030A> <3325> <00B8> <3326> <030B> <3327> <0328> <3328> <030C> <3329> <0336> <332A> <00C6> <332B> <00AA> <332C> <0141> <332D> <00D8> <332E> <0152> <332F> <00BA> <3330> <00E6> <3331> <0131> <3332> <0142> <3333> <00F8> <3334> <0153> <3335> <00DF> <3336> <002D> <3337> <00A9> <3338> <00AC> <3339> <00AE> <333E> <00B5> <333F> <00B9> <337E> <0160> <337F> <0178> <3380> <017D> <3381> <0305> <3382> <0161> <3383> <2122> <3384> <017E> <3385> <0030> <3386> <20AC> <3387> <2126> <338A> <338D> <0101> <338E> <012B> <338F> <016B> <3390> <0113> <3391> <014D> <3392> <0100> <3393> <012A> <3394> <016A> <3395> <0112> <3396> <014C> <339D> <2070> <33AE> <01CD> <33AF> <011A> <33B0> <0045030A> <33B1> <0EBC> <33B2> <01CF> <33B3> <0049030A> <33B4> <0128> <33B5> <01D1> <33B6> <004F030A> <33B7> <01D3> <33B8> <016E> <33B9> <0168> <33BA> <01CE> <33BB> <011B> <33BC> <0065030A> <33BD> <0EBD> <33BE> <01D0> <33BF> <0131030A> <33C0> <0129> <33C1> <01D2> <33C2> <006F030A> <33C3> <01D4> <33C4> <016F> <33C5> <0169> <33D0> <0336> <33D1> <002D> <33D2> <003D> <33D3> <002C> <33E4> <0336> <33E5> <002D> <33E6> <003D> <33E7> <002C> <33EE> <00B7> <33EF> <002D> <33F0> <003D> <33F1> <2103> <33F2> <2640> <33F3> <2642> <33F4> <3013> <33F5> <3012> <33FE> <33FF> <3406> <0027> <3407> <0022> <3408> <9038> <3409> <8B01> <340A> <7DE3> <340B> <9EC3> <340C> <6EAB> <340D> <798D> <340E> <6094> <340F> <6D77> <3410> <6168> endbfchar 100 beginbfchar <3411> <6982> <3412> <6E34> <3413> <8910> <3414> <6F22> <3415> <5668> <3416> <65E2> <3417> <7948> <3418> <865B> <3419> <97FF> <341A> <52E4> <341B> <8B39> <341C> <63ED> <341D> <64CA> <341E> <784F> <341F> <7A40> <3420> <6BBA> <3421> <7949> <3422> <8996> <3423> <716E> <3424> <793E> <3425> <8005> <3426> <81ED> <3427> <795D> <3428> <6691> <3429> <7F72> <342A> <6D89> <342B> <72C0> <342C> <613C> <342D> <771E> <342E> <7BC0> <342F> <7956> <3430> <50E7> <3431> <5C64> <3432> <5DE2> <3433> <618E> <3434> <8D08> <3435> <537D> <3436> <5606> <3437> <8457> <3438> <5FB5> <3439> <61F2> <343A> <93AD> <343B> <798E> <343C> <9B2D> <343D> <7A81> <343E> <96E3> <343F> <6885> <3440> <7E41> <3441> <6669> <3442> <5351> <3443> <7891> <3444> <8CD3> <3445> <654F> <3446> <4FAE> <3447> <5002> <3448> <5840> <3449> <52C9> <344A> <6B65> <344B> <58A8> <344C> <6BCF> <344D> <514D> <344E> <623E> <344F> <7950> <3450> <6B04> <3451> <9686> <3452> <865C> <3453> <6DDA> <3454> <985E> <3455> <66C6> <3456> <6B77> <3457> <7DF4> <3458> <934A> <3459> <5ECA> <345A> <9304> <345B> <6982> <345C> <51B4> <345D> <634C> <345E> <86DB> <345F> <9089> <3460> <9022> <3461> <5049> <3462> <7DEF> <3463> <9055> <3464> <53A9> <3465> <990C> <3466> <885B> <3467> <5EF6> <3468> <6CBF> <3469> <925B> <346A> <7FC1> <346B> <82BD> <346C> <96C5> <346D> <5BB3> <346E> <6168> <346F> <6982> <3470> <6BBB> <3471> <6562> <3472> <8CAB> <3473> <5DCC> <3474> <9811> endbfchar 100 beginbfchar <3475> <5E30> <3476> <8ECC> <3477> <7AAE> <3478> <5747> <3479> <5091> <347A> <7A74> <347B> <5065> <347C> <5EFA> <347D> <9237> <347E> <6A8E> <347F> <4EA4> <3480> <516C> <3481> <66F4> <3482> <6821> <3483> <786C> <3484> <7D5E> <3485> <8003> <3486> <8CFC> <3487> <964D> <3488> <62F7> <3489> <7F6A> <348A> <4F7F> <348B> <53F2> <348C> <59C9> <348D> <8B1D> <348E> <90AA> <348F> <53CE> <3490> <8F2F> <3491> <67D4> <3492> <77AC> <3493> <821C> <3494> <696F> <3495> <677E> <3496> <8A1F> <3497> <4E08> <3498> <57F4> <3499> <690D> <349A> <8077> <349B> <89AA> <349C> <9042> <349D> <636E> <349E> <6442> <349F> <8239> <34A0> <7DCF> <34A1> <8061> <34A2> <50CF> <34A3> <8A95> <34A4> <6065> <34A5> <5146> <34A6> <773A> <34A7> <8074> <34A8> <8DF3> <34A9> <5EAD> <34AA> <5EF7> <34AB> <8247> <34AC> <6843> <34AD> <9003> <34AE> <6D3E> <34AF> <6392> <34B0> <8F29> <34B1> <73ED> <34B2> <9812> <34B3> <60B2> <34B4> <6249> <34B5> <6590> <34B6> <7DCB> <34B7> <8AB9> <34B8> <8CA7> <34B9> <7236> <34BA> <847A> <34BB> <5206> <34BC> <5674> <34BD> <61A4> <34BE> <7C89> <34BF> <7D1B> <34C0> <96F0> <34C1> <853D> <34C2> <4FBF> <34C3> <6367> <34C4> <76C6> <34C5> <685D> <34C6> <8108> <34C7> <8036> <34C8> <7FFC> <34C9> <540F> <34CA> <96A3> <34CB> <9E9F> <34CC> <9E97> <34CD> <806F> <34CE> <807E> <34CF> <6E7E> <34D0> <5085> <34D1> <5193> <34D2> <51DB> <34D3> <5315> <34D4> <5340> <34D5> <96D9> <34D6> <55A9> <34D7> <56C1> <34D8> <570D> endbfchar 100 beginbfchar <34D9> <58AB> <34DA> <59DA> <34DB> <5A36> <34DC> <5ABE> <34DD> <5D4E> <34DE> <5D87> <34DF> <5DC9> <34E0> <5DD3> <34E1> <5F2D> <34E2> <5F98> <34E3> <60D8> <34E4> <613D> <34E5> <61FE> <34E6> <6268> <34E7> <62CF> <34E8> <651D> <34E9> <640F> <34EA> <64F2> <34EB> <655D> <34EC> <665F> <34ED> <67A9> <34EE> <67E7> <34EF> <696B> <34F0> <6930> <34F1> <69A7> <34F2> <6A44> <34F3> <6A90> <34F4> <6C08> <34F5> <6C13> <34F6> <6E23> <34F7> <6F11> <34F8> <6EFE> <34F9> <6F3E> <34FA> <71FF> <34FB> <73E5> <34FC> <7432> <34FD> <745F> <34FE> <74E0> <34FF> <750C> <3500> <7672> <3501> <792A> <3502> <78D4> <3503> <79BA> <3504> <7A19> <3505> <7A95> <3506> <7CF2> <3507> <7D73> <3508> <7DDD> <3509> <7E35> <350A> <7FAE> <350B> <7FE1> <350C> <805A> <350D> <805F> <350E> <8073> <350F> <8070> <3510> <8076> <3511> <8153> <3512> <818A> <3513> <81B5> <3514> <81CD> <3515> <83F2> <3516> <8555> <3517> <85D5> <3518> <871A> <3519> <8836> <351A> <889E> <351B> <88D8> <351C> <88F4> <351D> <892B> <351E> <893B> <351F> <896A> <3520> <896F> <3521> <8A1D> <3522> <8D05> <3523> <8D0F> <3524> <9F4E> <3525> <8E91> <3526> <8EA1> <3527> <9052> <3528> <900E> <3529> <9130> <352A> <9156> <352B> <9158> <352C> <9165> <352D> <9173> <352E> <9172> <352F> <91A2> <3530> <91AF> <3531> <91AA> <3532> <91B4> <3533> <91BA> <3534> <9477> <3535> <9698> <3536> <973D> <3537> <9760> <3538> <9771> <3539> <980C> <353A> <9873> <353B> <98C3> <353C> <9A45> endbfchar 100 beginbfchar <353D> <9B4D> <353E> <9B58> <353F> <9BC6> <3540> <9BE1> <3541> <9BF1> <3542> <9D48> <3543> <9DCF> <3544> <9F08> <3545> <6271> <3546> <6697> <3547> <610F> <3548> <8863> <3549> <9055> <354A> <907A> <354B> <78EF> <354C> <54E1> <354D> <2ED7> <354E> <2EBD> <354F> <53A9> <3550> <74DC> <3551> <904B> <3552> <990C> <3553> <885E> <3554> <92B3> <3555> <95B1> <3556> <5EF6> <3557> <63F4> <3558> <6CBF> <3559> <7159> <355A> <9060> <355B> <925B> <355C> <65BC> <355D> <5F80> <355E> <7FC1> <355F> <5378> <3560> <97F3> <3561> <5316> <3562> <82B1> <3563> <83D3> <3564> <8CA8> <3565> <904E> <3566> <82BD> <3567> <96C5> <3568> <9913> <3569> <5EFB> <356A> <7070> <356B> <5BB3> <356C> <6168> <356D> <6168> <356E> <6168> <356F> <69EA> <3570> <6982> <3571> <676E> <3572> <89D2> <3573> <9694> <3574> <5272> <3575> <8F44> <3576> <938C> <3577> <82C5> <3578> <5BD2> <3579> <74B0> <357A> <7DE9> <357B> <7F36> <357C> <9084> <357D> <9592> <357E> <97D3> <357F> <8218> <3580> <5371> <3581> <559C> <3582> <3402> <3583> <3402> <3584> <5E7E> <3585> <65E3> <3586> <671F> <3587> <6A5F> <3588> <8D77> <3589> <98E2> <358A> <5409> <358B> <55AB> <358C> <8650> <358D> <9006> <358E> <53CA> <358F> <5438> <3590> <6025> <3591> <7D1A> <3592> <5DE8> <3593> <62D2> <3594> <8DDD> <3595> <9B5A> <3596> <9B5A> <3597> <537F> <3598> <5F3A> <3599> <6050> <359A> <69C1> <359B> <6A4B> <359C> <6A4B> <359D> <9115> <359E> <97FF> <359F> <9957> <35A0> <6681> endbfchar 100 beginbfchar <35A1> <2EA9> <35A2> <8FD1> <35A3> <5036> <35A4> <77E9> <35A5> <5177> <35A6> <865E> <35A7> <7A7A> <35A8> <9047> <35A9> <6ADB> <35AA> <5553> <35AB> <5951> <35AC> <6075> <35AD> <6167> <35AE> <8FCE> <35AF> <5091> <35B0> <6F54> <35B1> <7A74> <35B2> <2EBC> <35B3> <2EBC> <35B4> <517C> <35B5> <5238> <35B6> <61B2> <35B7> <6743> <35B8> <80A9> <35B9> <8B19> <35BA> <9063> <35BB> <539F> <35BC> <8A01> <35BD> <6236> <35BE> <96C7> <35BF> <9867> <35C0> <5433> <35C1> <5A1B> <35C2> <8AA4> <35C3> <5DE5> <35C4> <614C> <35C5> <6285> <35C6> <63A7> <35C7> <69CB> <35C8> <6D69> <35C9> <6E2F> <35CA> <8015> <35CB> <8154> <35CC> <8352> <35CD> <8B1B> <35CE> <8CFC> <35CF> <543F> <35D0> <9177> <35D1> <8170> <35D2> <7511> <35D3> <8FBC> <35D4> <4ECA> <35D5> <9396> <35D6> <5EA7> <35D7> <5F69> <35D8> <63A1> <35D9> <6B72> <35DA> <83DC> <35DB> <51B4> <35DC> <54B2> <35DD> <524A> <35DE> <7522> <35DF> <9910> <35E0> <59FF> <35E1> <59FF> <35E2> <5DFF> <35E3> <8AEE> <35E4> <8AEE> <35E5> <8CC7> <35E6> <8CC7> <35E7> <6B21> <35E8> <6B21> <35E9> <6ECB> <35EA> <73BA> <35EB> <53F1> <35EC> <6368> <35ED> <659C> <35EE> <90AA> <35EF> <52FA> <35F0> <7235> <35F1> <7235> <35F2> <914C> <35F3> <5F31> <35F4> <4E3B> <35F5> <53D7> <35F6> <6388> <35F7> <5468> <35F8> <7D42> <35F9> <7FD2> <35FA> <8846> <35FB> <9031> <35FC> <4F4F> <35FD> <8853> <35FE> <8FF0> <35FF> <5DE1> <3600> <9075> <3601> <9075> <3602> <6240> <3603> <66F8> <3604> <5973> endbfchar 100 beginbfchar <3605> <52DD> <3606> <5546> <3607> <5BB5> <3608> <5C06> <360B> <5C19> <360C> <6D88> <360D> <785D> <360E> <8096> <360F> <4E08> <3610> <5B82> <3611> <57CE> <3612> <60C5> <3613> <57F4> <3614> <98FE> <3615> <690D> <3616> <6B96> <3619> <2EDE> <361A> <378D> <361B> <4FB5> <361C> <2E97> <361D> <6D78> <361E> <771F> <361F> <9032> <3620> <4EBB> <3621> <4EBA> <3622> <5203> <3623> <5C0B> <3624> <8A0A> <3625> <8A0A> <3626> <8FC5> <3627> <8870> <3628> <9042> <3629> <351F> <362A> <52E2> <362B> <6210> <362C> <76DB> <362D> <8056> <362E> <8980> <362F> <8AA0> <3630> <8ACB> <3631> <975C> <3632> <975C> <3633> <7A05> <3634> <8106> <3635> <96BB> <3636> <7C4D> <3637> <7BC0> <3638> <8AAA> <3639> <96EA> <363A> <7D76> <363B> <6247> <363C> <6F98> <363D> <7FA1> <363E> <8239> <363F> <9078> <3640> <9077> <3641> <524D> <3642> <5168> <3643> <6383> <3644> <63F7> <3645> <7626> <3646> <8D70> <3647> <9001> <3648> <906D> <3649> <9020> <364A> <2ECA> <364B> <901F> <364C> <8CCA> <364D> <5C0A> <364E> <5C0A> <364F> <59A5> <3650> <6CF0> <3651> <9000> <3652> <902E> <3653> <968A> <3654> <9BDB> <3655> <5927> <3656> <3427> <3657> <7027> <3658> <9054> <3659> <812B> <365A> <4E39> <365B> <6B4E> <365C> <70AD> <365D> <8A95> <365E> <6696> <365F> <5024> <3660> <7F6E> <3661> <7BC9> <3662> <2EAE> <3663> <7B51> <3664> <9010> <3665> <67F1> <3666> <6CE8> <3667> <99D0> <3668> <5F6B> <3669> <5FB5> <366A> <61F2> <366B> <671D> <366C> <6F6E> endbfchar 100 beginbfchar <366D> <8ABF> <366E> <76F4> <366F> <6715> <3670> <6715> <3671> <589C> <3672> <8FFD> <3673> <901A> <3674> <576A> <3675> <91E3> <3676> <5448> <3677> <5E1D> <3678> <7A0B> <3679> <7684> <367A> <9069> <367B> <8FED> <367C> <6DFB> <367D> <514E> <367E> <9014> <367F> <783A> <3680> <5721> <3681> <571F> <3682> <51AC> <3683> <5510> <3684> <7CD6> <3685> <85E4> <3686> <8B04> <3687> <9003> <3688> <900F> <3689> <9A30> <368A> <5C0E> <368B> <9053> <368C> <5451> <368D> <3B88> <368E> <5167> <368F> <8089> <3690> <4E73> <3691> <5FCD> <3692> <8A8D> <3693> <5BE7> <3694> <7D0D> <3695> <8987> <3696> <6D3E> <3697> <80BA> <3698> <535A> <3699> <8584> <369A> <8FEB> <369B> <7E1B> <369C> <8087> <369D> <4E37> <369E> <6F51> <369F> <91B1> <36A0> <4F34> <36A1> <5224> <36A2> <534A> <36A3> <5E06> <36A4> <7554> <36A5> <6669> <36A6> <8543> <36A7> <907F> <36A8> <5FAE> <36A9> <9F3B> <36AA> <5339> <36AB> <2EAA> <36AC> <5F65> <36AD> <59EC> <36AE> <59EB> <36AF> <8A55> <36B0> <5E99> <36B1> <75C5> <36B2> <5A66> <36B3> <6577> <36B4> <6D6E> <36B5> <8CA0> <36B6> <8CA0> <36B7> <670D> <36B8> <8986> <36B9> <4E19> <36BA> <5E63> <36BB> <5E73> <36BC> <5F0A> <36BD> <8511> <36BE> <504F> <36BF> <7DE8> <36C0> <8FD4> <36C1> <904D> <36C2> <7C3F> <36C3> <5305> <36C4> <5D29> <36C5> <62B1> <36C6> <670B> <36C7> <7832> <36C8> <7E2B> <36C9> <80DE> <36CA> <840C> <36CB> <90A6> <36CC> <90A6> <36CD> <98FD> <36CE> <9D6C> <36CF> <4EA1> <36D0> <5E3D> endbfchar 100 beginbfchar <36D3> <623F> <36D4> <671B> <36D5> <671B> <36D6> <5192> <36D7> <6469> <36D8> <7FFB> <36D9> <51E1> <36DA> <78E8> <36DB> <9B54> <36DC> <2FC7> <36DD> <69D9> <36DE> <685D> <36DF> <4FE3> <36E0> <53C8> <36E1> <7E6D> <36E2> <9EBF> <36E3> <8108> <36E4> <660E> <36E5> <76DF> <36E6> <8FF7> <36E7> <5984> <36E8> <52D0> <36E9> <76F2> <36EA> <8017> <36EB> <623E> <36EC> <7D0B> <36ED> <9580> <36EE> <7D04> <36EF> <8E8D> <36F0> <687A> <36F1> <687A> <36F2> <6801> <36F3> <6109> <36F4> <8AED> <36F5> <8F38> <36F6> <52C7> <36F7> <6709> <36F8> <7336> <36FB> <88D5> <36FC> <904A> <36FD> <66DC> <36FE> <2EB7> <36FF> <8981> <3700> <990A> <3701> <7FCC> <3702> <7FFC> <3703> <8EB6> <3704> <862D> <3705> <7387> <3706> <9F8D> <3707> <9F8D> <3708> <65C5> <3709> <6881> <370A> <71D0> <370B> <96A3> <370C> <9C57> <370D> <9E9F> <370E> <7C7B> <370F> <5EC9> <3710> <6190> <3711> <9023> <3712> <6717> <3713> <8002> <3714> <8107> <3715> <50CA> <3716> <511A> <3717> <5154> <3718> <5195> <3719> <2E87> <371A> <528D> <371B> <52D7> <371C> <52F9> <371D> <5349> <371E> <353E> <371F> <53DF> <3720> <66FC> <3721> <5533> <3722> <55E4> <3723> <5455> <3724> <56C0> <3725> <5939> <3726> <5A1C> <3727> <5AC2> <3728> <5B73> <3729> <5BC3> <372A> <5C14> <372B> <37E2> <372C> <5CE6> <372D> <5E54> <372E> <4E48> <372F> <5EE3> <3730> <6097> <3731> <62D4> <3732> <62CC> <3733> <641C> <3734> <63C6> <3735> <6428> <3736> <8209> <3737> <631B> <3738> <665F> endbfchar 100 beginbfchar <3739> <665F> <373A> <6663> <373B> <66F5> <373C> <675E> <373D> <689D> <373E> <688D> <373F> <69F6> <3740> <6961> <3741> <5BE8> <3742> <5BE8> <3743> <69BB> <3744> <6BCC> <3745> <6F11> <3746> <6E17> <3747> <6F98> <3748> <6CAA> <3749> <6CAA> <374A> <701B> <374B> <7162> <374C> <723B> <374D> <4E2C> <374E> <731C> <374F> <74CA> <3750> <74EF> <3751> <7575> <3752> <75EC> <3753> <764E> <3754> <3FB1> <3755> <776A> <3756> <77A9> <3757> <7940> <3758> <7953> <3759> <7953> <375A> <9F4B> <375B> <79AE> <375C> <9083> <375D> <7B53> <375E> <7C11> <375F> <7C14> <3760> <4264> <3761> <7C50> <3762> <7C58> <3763> <7D46> <3764> <7D63> <3765> <7E22> <3766> <7E22> <3767> <7E48> <3768> <7E35> <3769> <7E43> <376A> <7E8C> <376D> <7F51> <376E> <7F51> <3771> <7FE9> <3772> <8141> <3773> <4453> <3774> <8258> <3775> <8279> <3778> <82E3> <3779> <5179> <377A> <83A2> <377B> <8420> <377C> <83BD> <377D> <84F4> <377E> <856D> <377F> <8587> <3780> <85F4> <3781> <4E55> <3782> <8737> <3783> <873B> <3784> <8805> <3785> <87BD> <3786> <867D> <3787> <8836> <3788> <8944> <3789> <88C6> <378A> <89BD> <378B> <8ADB> <378C> <8B3E> <378D> <8B5A> <378E> <8D73> <378F> <8D99> <3790> <8DCB> <3791> <8E34> <3792> <8E4A> <3793> <8FEF> <3794> <9087> <3795> <8FFA> <3796> <901E> <3797> <9035> <3798> <9050> <3799> <8FC8> <379A> <9081> <379B> <908A> <379C> <908A> <379D> <908A> <379E> <908A> <379F> <908A> <37A0> <908A> <37A1> <9089> <37A2> <9089> endbfchar 100 beginbfchar <37A3> <9089> <37A4> <9089> <37A5> <9089> <37A6> <9089> <37A7> <9089> <37A8> <9089> <37A9> <9089> <37AA> <9089> <37AB> <9089> <37AC> <9089> <37AD> <92CF> <37AE> <93DD> <37AF> <95BC> <37B0> <9621> <37B1> <96B2> <37B2> <975C> <37B3> <9839> <37B4> <98EB> <37B5> <9903> <37B6> <9909> <37B7> <9945> <37B8> <9945> <37B9> <994B> <37BA> <9A08> <37BB> <9A5F> <37BC> <9A65> <37BD> <9AEF> <37BE> <9B18> <37BF> <9BDF> <37C0> <9D09> <37C1> <9D08> <37C2> <9EA5> <37C3> <9ECC> <37C4> <9F08> <37C5> <9F4A> <37C6> <9F63> <37C7> <9F67> <37C8> <9F6C> <37C9> <7199> <37CA> <7199> <37CB> <891C> <37CC> <68C8> <37CD> <66FB> <37CE> <5F45> <37CF> <5300> <37D0> <5389> <37D1> <5953> <37D2> <37D3> <6852> <37D4> <6A73> <37D5> <6D87> <37D6> <37D7> <8A12> <37DA> <4E1F> <37DB> <4E2B> <37E0> <4E44> <37E1> <4E5A> <37E2> <4E7F> <37E3> <4E8D> <37E4> <4E96> <37E5> <4EB9> <37E6> <4ED0> <37E7> <4EE0> <37E8> <4EFD> <37E9> <4EFF> <37EA> <4F0B> <37EB> <4F15> <37EC> <4F60> <37ED> <4F3B> <37EE> <4F49> <37EF> <4F54> <37F0> <4F7A> <37F3> <4F97> <37F4> <4FBE> <37F5> <4FCF> <37F6> <4FFD> <37F9> <5010> <37FA> <501B> <37FB> <5027> <37FC> <502E> <37FD> <5057> <37FE> <5066> <37FF> <506A> <3800> <503B> <3801> <508F> <3802> <5096> <3803> <509C> <3804> <50CC> <3805> <50E6> <3806> <50E9> <3807> <50EF> <3808> <5108> <3809> <510B> <380A> <5110> <380B> <511B> <380C> <511E> <380D> <515F> <380E> <51A1> <380F> <51BC> <3810> <51DE> endbfchar 100 beginbfchar <3811> <51EE> <3812> <51F4> <3815> <5213> <3816> <5249> <3817> <5261> <3818> <5266> <3819> <5293> <381A> <52C8> <381B> <52F0> <381E> <533E> <381F> <534C> <3820> <534B> <3821> <5361> <3822> <536C> <3823> <53AB> <3824> <53DA> <3825> <53E6> <3826> <53F5> <3827> <5427> <3828> <544D> <3829> <5466> <382A> <546B> <382B> <5474> <382C> <548D> <382D> <5496> <382E> <54A1> <382F> <54AD> <3830> <54B9> <3831> <54BF> <3832> <54C6> <3833> <54CD> <3834> <550E> <3835> <552B> <3836> <5535> <3837> <554A> <383A> <5588> <383B> <558E> <383C> <5608> <383F> <5637> <3840> <563F> <3841> <5649> <3842> <564B> <3843> <564F> <3844> <5666> <3845> <5669> <3846> <566F> <3849> <5695> <384A> <569A> <384D> <56B1> <384E> <56C9> <384F> <56DD> <3850> <56E4> <3851> <570A> <3852> <5715> <3853> <5723> <3854> <572F> <3857> <574C> <3858> <5770> <3859> <578C> <385A> <579C> <385B> <57B8> <385C> <57E6> <385D> <57ED> <3860> <57FF> <3861> <5809> <3862> <5820> <3863> <5832> <3864> <587C> <3865> <5880> <3866> <58A9> <3867> <58CE> <3868> <58D0> <3869> <58D4> <386A> <58DA> <386B> <58E9> <386C> <590C> <386D> <5924> <386E> <592F> <386F> <5961> <3870> <596D> <3871> <59CA> <3872> <59D2> <3873> <59DD> <3876> <5A04> <3877> <5A0C> <3878> <5A23> <3879> <5A47> <387A> <5A55> <387B> <5A63> <387C> <5A6D> <387D> <5A7E> <387E> <5A9E> <387F> <5AA7> <3880> <5AAC> <3881> <5AB3> <3882> <5AE0> <3883> <5B00> <3884> <5B19> <3885> <5B25> <3886> <5B2D> endbfchar 100 beginbfchar <3887> <5B41> <3888> <5B7C> <388B> <5B8A> <388C> <5C23> <388D> <5C2B> <388E> <5C30> <388F> <5C63> <3890> <5C69> <3891> <5C7C> <3892> <5CCB> <3893> <5CD2> <3894> <5CF4> <3895> <5D24> <3896> <5D26> <3897> <5D43> <3898> <5D46> <3899> <5D4A> <389A> <5D92> <389B> <5D94> <389C> <5D99> <389D> <5DA0> <389E> <5DD8> <389F> <5DE0> <38A0> <5DF8> <38A1> <5E00> <38A2> <5E12> <38A5> <5E18> <38A6> <5E2E> <38A7> <5E58> <38AA> <5EA8> <38AB> <5EAA> <38AE> <5ECB> <38AF> <5ED2> <38B0> <5F07> <38B1> <5F0E> <38B4> <5F22> <38B5> <5F28> <38B6> <5F36> <38B7> <5F3B> <38B8> <5F40> <38B9> <5F50> <38BA> <5F58> <38BB> <5F64> <38BC> <5F89> <38BD> <5F9C> <38BE> <5FA7> <38BF> <5FA4> <38C0> <5FAF> <38C1> <5FB8> <38C2> <5FC4> <38C3> <5FC9> <38C4> <5FE1> <38C5> <5FE9> <38C6> <5FED> <38C7> <5FFC> <38C8> <6017> <38C9> <601A> <38CA> <6033> <38CB> <6061> <38CC> <607F> <38CD> <609E> <38CE> <60A4> <38CF> <60B0> <38D0> <60CB> <38D1> <60DB> <38D2> <60F8> <38D6> <611C> <38D7> <617C> <38D8> <618D> <38D9> <619F> <38DA> <61A8> <38DB> <61C2> <38DC> <61DF> <38DD> <6215> <38DE> <6229> <38DF> <6243> <38E0> <6246> <38E1> <624C> <38E2> <6251> <38E3> <6256> <38E4> <62C4> <38E5> <62FC> <38E6> <630A> <38E7> <630D> <38E8> <6318> <38E9> <6339> <38EC> <6365> <38ED> <6374> <38EE> <637D> <38EF> <6384> <38F0> <6387> <38F1> <6390> <38F2> <639E> <38F3> <63D1> <38F4> <63DC> <38F5> <6409> <38F6> <6410> <38F7> <6422> <38F8> <6454> <38F9> <645B> endbfchar 100 beginbfchar <38FA> <646D> <38FB> <647B> <38FE> <64E5> <38FF> <64F7> <3900> <64FB> <3901> <6504> <3902> <6516> <3903> <6519> <3904> <6547> <3905> <6567> <3906> <6581> <3907> <6585> <3908> <65C2> <3909> <65F0> <390A> <65F2> <390B> <662C> <390C> <664C> <390F> <6661> <3910> <666B> <3911> <6677> <3912> <66A4> <3913> <66C8> <3914> <66EC> <3915> <6705> <3916> <6713> <3917> <6733> <3918> <6748> <3919> <674C> <391A> <6776> <391B> <677B> <391C> <67B0> <391D> <67B2> <391E> <67F9> <391F> <67D7> <3920> <67D9> <3921> <67F0> <3922> <682C> <3925> <685B> <3926> <6872> <3927> <6875> <3928> <687A> <3929> <6884> <392A> <68A5> <392B> <68B2> <392C> <68D0> <392D> <68D6> <392E> <68E8> <392F> <68ED> <3932> <68FC> <3933> <6911> <3934> <6913> <3935> <6935> <3936> <693B> <3937> <6957> <3938> <6963> <3939> <6972> <393C> <69A6> <393D> <69AD> <393E> <69B7> <3941> <6A01> <3942> <6A0F> <3943> <6A15> <3944> <6A28> <3945> <6A34> <3946> <6A3E> <3947> <6A45> <394A> <6A56> <394B> <6A5B> <394C> <6A83> <394D> <6A89> <394E> <6A91> <3952> <6ADC> <3953> <6AE7> <3954> <6AEC> <3955> <6B1E> <3956> <6B24> <3957> <6B35> <3958> <6B46> <3959> <6B56> <395A> <6B60> <395B> <6B82> <395C> <6BBE> <395D> <6BE1> <395E> <6BF1> <395F> <6C10> <3960> <6C33> <3961> <6C35> <3962> <6C3A> <3963> <6C59> <3964> <6C76> <3965> <6C7B> <3966> <6C85> <3967> <6C95> <3968> <6C9C> <3969> <6CD0> <396A> <6CD4> <396B> <6CD6> <396C> <6CE0> <396F> <6CEE> <3970> <6D0A> endbfchar 100 beginbfchar <3971> <6D0E> <3972> <6D11> <3973> <6D2E> <3974> <6D57> <3975> <6D5E> <3976> <6D65> <3977> <6D82> <3978> <6DBF> <3979> <6DC4> <397A> <6DCA> <397B> <6DD6> <397C> <6DE9> <397D> <6E22> <397E> <6E51> <397F> <6EC7> <3980> <6ECA> <3981> <6ECE> <3982> <6EFD> <3983> <6F1A> <3984> <6F2A> <3985> <6F2F> <3986> <6F33> <3987> <6F5A> <3988> <6F5E> <3989> <6F62> <398A> <6F7D> <398B> <6F8B> <398C> <6F8D> <398D> <6F92> <398E> <6F94> <398F> <6F9A> <3992> <6FB6> <3993> <6FDA> <3994> <6FDE> <3995> <6FF9> <3996> <7039> <3997> <703C> <3998> <704A> <3999> <7054> <399C> <7064> <399D> <706C> <399E> <707E> <399F> <7081> <39A0> <7095> <39A1> <70B7> <39A4> <70D8> <39A5> <70DC> <39A6> <7107> <39A7> <7120> <39A8> <7131> <39A9> <714A> <39AA> <7152> <39AB> <7160> <39AC> <7179> <39AD> <7192> <39AE> <71B3> <39AF> <71CB> <39B0> <71D3> <39B1> <71D6> <39B2> <7200> <39B3> <721D> <39B4> <722B> <39B5> <7238> <39B6> <7241> <39B7> <7253> <39BA> <725C> <39BB> <728D> <39BC> <72AD> <39BD> <72B4> <39BE> <72C7> <39BF> <72FB> <39C2> <7328> <39C3> <7331> <39C4> <7343> <39C5> <736C> <39C6> <737C> <39C7> <7383> <39CA> <7395> <39CE> <73A6> <39CF> <73AB> <39D0> <73B5> <39D1> <73B7> <39D2> <73BC> <39D3> <73CF> <39D4> <73D9> <39D5> <73E9> <39D6> <73F4> <39D7> <73FD> <39D8> <7404> <39D9> <740A> <39DC> <7424> <39DD> <7428> <39DE> <742C> <39E2> <7439> <39E3> <7444> <39E4> <7447> <39E5> <744B> <39E6> <744D> <39E7> <7451> <39E8> <7457> endbfchar 100 beginbfchar <39E9> <7466> <39EA> <746B> <39EB> <7471> <39EC> <7480> <39F0> <7490> <39F1> <7498> <39F2> <749C> <39F3> <74A0> <39F4> <74A3> <39F5> <74A8> <39F6> <74AB> <39F7> <74B5> <39F8> <74BF> <39F9> <74C8> <39FA> <74DA> <39FB> <74DE> <39FC> <754E> <39FD> <7579> <39FE> <7581> <39FF> <7590> <3A02> <75B4> <3A03> <75E4> <3A04> <75F9> <3A05> <7600> <3A06> <760A> <3A09> <7619> <3A0A> <761E> <3A0B> <762D> <3A0C> <7635> <3A0D> <7643> <3A0E> <764B> <3A0F> <7665> <3A10> <766D> <3A11> <766F> <3A12> <7671> <3A13> <7674> <3A16> <76C5> <3A17> <76CC> <3A18> <76EC> <3A19> <76FC> <3A1A> <7734> <3A1B> <7736> <3A1C> <775C> <3A1F> <7772> <3A20> <777D> <3A21> <7795> <3A22> <77AA> <3A23> <77E6> <3A24> <77F0> <3A25> <77F4> <3A26> <7806> <3A27> <7822> <3A2A> <7830> <3A2B> <7835> <3A2C> <7868> <3A2D> <789E> <3A2E> <78C8> <3A2F> <78CC> <3A30> <78CE> <3A31> <78E4> <3A34> <78F2> <3A35> <78F7> <3A36> <78FB> <3A37> <7931> <3A38> <7934> <3A39> <793B> <3A3A> <793D> <3A3B> <7945> <3A3E> <798B> <3A3F> <7996> <3A40> <7998> <3A41> <79B8> <3A42> <79BB> <3A43> <79CA> <3A44> <79DA> <3A45> <7A03> <3A46> <7A09> <3A47> <7A11> <3A48> <7A1E> <3A49> <7A2D> <3A4A> <7A39> <3A4B> <7A45> <3A4C> <7A4C> <3A4D> <7A5D> <3A4E> <7A60> <3A4F> <7A6D> <3A50> <7A78> <3A51> <7AA0> <3A52> <7AA3> <3A53> <7AB3> <3A56> <7AC6> <3A57> <7B07> <3A58> <7B14> <3A59> <7B27> <3A5A> <7B31> <3A5B> <7B47> <3A5C> <7B4E> <3A5D> <7B60> <3A5E> <7B69> <3A5F> <7B6D> endbfchar 100 beginbfchar <3A60> <7B72> <3A61> <7B91> <3A62> <7BAF> <3A63> <7BD7> <3A64> <7BD9> <3A65> <7C0B> <3A66> <7C0F> <3A67> <7C20> <3A68> <7C26> <3A69> <7C31> <3A6A> <7C36> <3A6B> <7C51> <3A6C> <7C59> <3A6D> <7C67> <3A6E> <7C6E> <3A6F> <7C70> <3A70> <7CBC> <3A71> <7CBF> <3A74> <7CD7> <3A75> <7CD9> <3A76> <7CDD> <3A77> <7CEB> <3A7B> <7D13> <3A7C> <7D1D> <3A7D> <7D23> <3A7E> <7D41> <3A7F> <7D53> <3A80> <7D59> <3A81> <7D5D> <3A82> <7D7A> <3A83> <7D86> <3A86> <7DCC> <3A87> <7DEB> <3A88> <7DF1> <3A89> <7DF9> <3A8A> <7E08> <3A8B> <7E11> <3A8C> <7E15> <3A8D> <7E20> <3A8E> <7E47> <3A8F> <7E62> <3A90> <7E6E> <3A91> <7E73> <3A92> <7E8D> <3A93> <7E91> <3A94> <7E98> <3A95> <7F44> <3A96> <7F4F> <3A99> <7F61> <3A9A> <7F91> <3A9B> <7FBF> <3A9C> <7FCE> <3A9D> <7FDF> <3A9E> <7FE5> <3A9F> <7FEC> <3AA2> <7FFA> <3AA3> <800E> <3AA4> <8011> <3AA5> <8014> <3AA6> <8024> <3AA7> <8026> <3AA8> <803A> <3AA9> <803C> <3AAA> <8060> <3AAB> <8071> <3AAC> <8075> <3AAD> <809E> <3AAE> <80A6> <3AAF> <80AB> <3AB2> <8116> <3AB3> <8118> <3AB4> <813A> <3AB5> <814A> <3AB6> <814C> <3AB7> <8181> <3AB8> <8184> <3AB9> <81B4> <3ABA> <81CF> <3ABB> <81F9> <3ABC> <8203> <3ABD> <8221> <3ABE> <8232> <3ABF> <8234> <3AC0> <8246> <3AC1> <824B> <3AC2> <824F> <3AC3> <828E> <3AC4> <82AE> <3AC5> <82B7> <3AC6> <82BE> <3AC7> <82C6> <3AC8> <82FE> <3AC9> <8343> <3ACA> <8351> <3ACB> <8355> <3ACC> <8386> <3ACD> <838D> <3ACE> <8392> <3ACF> <8398> <3AD0> <83A9> endbfchar 100 beginbfchar <3AD3> <83EA> <3AD4> <840F> <3AD5> <8411> <3AD6> <844A> <3AD7> <8476> <3AD8> <84A8> <3AD9> <84AF> <3ADA> <84C0> <3ADB> <84C2> <3ADC> <84F0> <3ADD> <84FD> <3ADE> <850C> <3ADF> <8534> <3AE0> <855E> <3AE1> <858F> <3AE2> <85B7> <3AE3> <85CE> <3AE4> <85AD> <3AE5> <8612> <3AE6> <8629> <3AE7> <8652> <3AE8> <8663> <3AE9> <866C> <3AEA> <866F> <3AEB> <867A> <3AEC> <868D> <3AED> <8691> <3AEE> <8698> <3AF1> <86FA> <3AF2> <86FD> <3AF3> <870B> <3AF4> <8713> <3AF5> <8719> <3AF6> <871E> <3AF7> <8728> <3AF8> <873E> <3AF9> <8771> <3AFA> <8788> <3AFB> <8799> <3AFE> <87B5> <3AFF> <87D6> <3B00> <87EB> <3B01> <87ED> <3B02> <8801> <3B03> <8803> <3B04> <8806> <3B05> <880B> <3B06> <8814> <3B07> <881C> <3B08> <8856> <3B09> <885F> <3B0A> <8864> <3B0B> <8898> <3B0C> <88AA> <3B0F> <88CA> <3B10> <88D2> <3B11> <88DB> <3B14> <8906> <3B18> <8927> <3B19> <8930> <3B1A> <893E> <3B1B> <897B> <3B1C> <89D4> <3B1D> <89D6> <3B1E> <89E5> <3B1F> <89F1> <3B20> <8A07> <3B21> <8A0F> <3B22> <8A15> <3B23> <8A22> <3B24> <8A4E> <3B25> <8A7F> <3B26> <8AF4> <3B27> <8B1F> <3B28> <8B37> <3B2B> <8B54> <3B2C> <8B9C> <3B2D> <8B9E> <3B2E> <8C47> <3B2F> <8C54> <3B30> <8C73> <3B31> <8CA4> <3B32> <8CD9> <3B33> <8CE1> <3B34> <8CF8> <3B35> <8CFE> <3B36> <8D1B> <3B37> <8D69> <3B38> <8D6C> <3B39> <8D84> <3B3A> <8D8D> <3B3B> <8D95> <3B3C> <8DA6> <3B3D> <8DC6> <3B3E> <8DCE> <3B3F> <8DE4> <3B40> <8DEC> <3B41> <8E20> <3B42> <8E4B> <3B43> <8E6C> endbfchar 100 beginbfchar <3B44> <8E70> <3B45> <8E7A> <3B46> <8E92> <3B47> <8EAE> <3B48> <8EB3> <3B49> <8ED1> <3B4A> <8ED4> <3B4B> <8EF9> <3B4C> <8F17> <3B4D> <8F36> <3B4E> <8FA6> <3B51> <8FC6> <3B52> <8FE0> <3B53> <8FE4> <3B54> <8FF6> <3B55> <9002> <3B56> <902C> <3B57> <9044> <3B58> <9088> <3B59> <9095> <3B5A> <9099> <3B5B> <909B> <3B5C> <90A2> <3B5D> <90B4> <3B5E> <90D7> <3B5F> <90DD> <3B60> <90F4> <3B61> <9117> <3B62> <911C> <3B63> <9131> <3B64> <913A> <3B65> <913D> <3B66> <9148> <3B67> <915B> <3B68> <9161> <3B69> <9164> <3B6A> <918E> <3B6B> <919E> <3B6C> <91A8> <3B6F> <91B2> <3B70> <91BC> <3B71> <91F0> <3B72> <91F7> <3B73> <91FB> <3B74> <9207> <3B75> <9228> <3B76> <9233> <3B77> <9238> <3B78> <9243> <3B79> <9247> <3B7A> <924F> <3B7B> <9260> <3B7C> <92C2> <3B7F> <92DF> <3B80> <930D> <3B81> <9315> <3B82> <931F> <3B83> <9327> <3B84> <9347> <3B85> <9352> <3B86> <9365> <3B87> <936A> <3B88> <936D> <3B89> <939B> <3B8A> <93BA> <3B8B> <93A9> <3B8C> <93C1> <3B8D> <93CA> <3B8E> <93E2> <3B8F> <93FA> <3B90> <93FD> <3B91> <940F> <3B92> <9434> <3B93> <943F> <3B94> <9455> <3B95> <946B> <3B96> <9472> <3B97> <9578> <3B98> <95A6> <3B99> <95A9> <3B9A> <95AB> <3B9B> <95B4> <3B9C> <95BD> <3B9D> <95DA> <3B9E> <961D> <3B9F> <9641> <3BA0> <9658> <3BA1> <9684> <3BA2> <96A4> <3BA3> <96A9> <3BA4> <96D2> <3BA5> <5DB2> <3BA6> <96DE> <3BA7> <96E9> <3BA8> <96F1> <3BA9> <9702> <3BAA> <9709> <3BAB> <975A> <3BAC> <9763> <3BAD> <976E> endbfchar 100 beginbfchar <3BAE> <9773> <3BAF> <979A> <3BB0> <97A2> <3BB3> <97D9> <3BB4> <97DE> <3BB5> <97F4> <3BB6> <980A> <3BB7> <980E> <3BB8> <981E> <3BB9> <9823> <3BBA> <982B> <3BBB> <983E> <3BBE> <9859> <3BBF> <986C> <3BC0> <98B8> <3BC1> <98BA> <3BC2> <98BF> <3BC3> <98C8> <3BC4> <98E5> <3BC7> <9940> <3BC8> <994D> <3BC9> <995C> <3BCA> <995F> <3BCB> <99B1> <3BCE> <99C9> <3BCF> <9A02> <3BD0> <9A16> <3BD1> <9A24> <3BD2> <9A27> <3BD5> <9A36> <3BD6> <9A38> <3BD7> <9A4A> <3BD8> <9A56> <3BDB> <9AF9> <3BDC> <9B03> <3BDD> <9B20> <3BE0> <9B73> <3BE1> <9B79> <3BE2> <9BA7> <3BE3> <9BC1> <3BE4> <9BC7> <3BE5> <9BD7> <3BE6> <9BE7> <3BE7> <9BEB> <3BE8> <9BF7> <3BE9> <9BFA> <3BEA> <9BFD> <3BEB> <9C0B> <3BEC> <9C27> <3BED> <9C2A> <3BEE> <9C36> <3BEF> <9C41> <3BF0> <9C53> <3BF1> <9C63> <3BF2> <9C6A> <3BF3> <9C77> <3BF4> <9D02> <3BF5> <9D42> <3BF6> <9D47> <3BF7> <9D63> <3BF8> <9D69> <3BF9> <9D7C> <3BFA> <9D7E> <3BFB> <9D8D> <3BFC> <9DB1> <3BFD> <9DC3> <3BFE> <9DC7> <3BFF> <9DD6> <3C00> <9DDF> <3C01> <9DEB> <3C02> <9DF4> <3C03> <9E15> <3C04> <9E1D> <3C05> <9EA4> <3C06> <9EA8> <3C07> <9EAC> <3C08> <9EE7> <3C09> <9EEE> <3C0A> <9F10> <3C0B> <9F12> <3C0C> <9F17> <3C0D> <9F19> <3C0E> <9F2F> <3C0F> <9F37> <3C10> <9F39> <3C11> <9F41> <3C12> <9F45> <3C13> <9F57> <3C14> <9F68> <3C15> <9F71> <3C16> <9F75> <3C17> <9F90> <3C18> <9F94> <3C19> <9FA2> <3C1A> <4E30> <3C1B> <3405> <3C1C> <4F60> <3C1D> <5620> <3C1E> <5ECB> <3C1F> <2E95> endbfchar 52 beginbfchar <3C20> <60A4> <3C21> <69D7> <3C22> <6B24> <3C23> <6FF9> <3C24> <6EE6> <3C25> <71B3> <3C26> <2EA4> <3C27> <7AC6> <3C28> <7F61> <3C29> <8071> <3C2A> <809E> <3C2B> <2ECC> <3C2C> <91F0> <3C2D> <5DB2> <3C2E> <97DE> <3C2F> <4FD3> <3C30> <50D9> <3C31> <50F0> <3C32> <51C3> <3C33> <5676> <3C34> <6A54> <3C35> <6D01> <3C36> <6DD0> <3C37> <6E42> <3C38> <6ED9> <3C39> <73E4> <3C3A> <7421> <3C3B> <756C> <3C3C> <7851> <3C3D> <87F5> <3C3E> <3C3F> <73A8> <3C40> <3AF3> <3C41> <34DB> <3C42> <440C> <3C43> <3E8A> <3C44> <3C45> <3C46> <4BE8> <3C47> <3C48> <3EDA> <3C49> <3B22> <3C4A> <3C4B> <457A> <3C4C> <4093> <3C4D> <3C4E> <4665> <3C4F> <4103> <3C50> <4293> <3C51> <46AE> <3C52> <3488> <3C53> endbfchar 100 beginbfrange <0001> <003C> <0020> <003E> <005C> <005D> <0065> <0067> <00A1> <006E> <006F> <2039> <0070> <0071> <0073> <0074> <2020> <007F> <0080> <0301> <0082> <0084> <0306> <009B> <009E> <00B0> <00A1> <00A3> <00BC> <00A4> <00A9> <00C0> <00AA> <00BA> <00C7> <00BB> <00C0> <00D9> <00C1> <00C6> <00E0> <00C7> <00D7> <00E7> <00D8> <00DE> <00F9> <00E8> <00FF> <0021> <0100> <0122> <0039> <0124> <0144> <005D> <0146> <0185> <0187> <0188> <30F0> <019C> <019D> <30D0> <019E> <019F> <30D3> <01A0> <01A1> <30D6> <01A2> <01A3> <30D9> <01A4> <01A5> <30DC> <01A9> <01F4> <2500> <01FE> <01FF> <300E> <0212> <0213> <304A> <0222> <0227> <306A> <022C> <0230> <307E> <0233> <0238> <3088> <023B> <023C> <3090> <024D> <024E> <3070> <024F> <0250> <3073> <0251> <0252> <3076> <0253> <0254> <3079> <0255> <0256> <307C> <0260> <0261> <00A2> <0279> <027B> <3000> <027F> <0280> <0283> <0284> <309B> <028B> <028C> <30FD> <028D> <028E> <309D> <0291> <0293> <3005> <029E> <029F> <2018> <02A0> <02A1> <201C> <02A2> <02A3> <02A4> <02A5> <3014> <02AA> <02B3> <3008> <02BD> <02BE> <2266> <02C4> <02C5> <2032> <02C9> <02CA> <00A2> <02E1> <02E2> <2190> <02E7> <02E8> <2286> <02E9> <02EA> <2282> <02ED> <02EE> <2227> <02FB> <02FC> <226A> <0301> <0302> <222B> <0308> <0309> <2020> <030C> <0315> <0316> <032F> <0330> <0349> <034A> <039C> <3041> <039D> <03F2> <30A1> <03F3> <03FF> <0391> <0400> <0403> <039E> <0404> <040A> <03A3> <040B> <041B> <03B1> <041C> <0422> <03C3> <0423> <0428> <0410> <042A> <0449> <0416> <044B> <0464> <0436> <05B9> <05BA> <984D> <0697> <0698> <4EAB> <0E68> <0E69> <5FD8> <0F1B> <0F1C> <7336> <100C> <100E> <4E9E> <1038> <1039> <4FE4> <1058> <1059> <50C9> <1065> <1066> <5101> <1070> <1071> <513F> <1077> <1078> <5169> <1082> <1083> <5195> <1087> <1089> <51A9> <108B> <108C> <51B1> <10A5> <10A6> <524B> <10B7> <10B8> <52AC> <10C5> <10C6> <52F8> <10F6> <10F7> <542C> <111A> <111B> <54E5> <112A> <112B> <5556> <117B> <117C> <5737> <1190> <1191> <57D2> <11B7> <11B9> <58FB> <11C0> <11C1> <592C> <11DB> <11DC> <59D9> <11E6> <11E7> <5A35> <11F5> <11F6> <5AFA> <1204> <1205> <5B5A> endbfrange 100 beginbfrange <1221> <1222> <5C07> <1228> <1229> <5C38> <1275> <1276> <5E36> <1281> <1282> <5E75> <1287> <1288> <5EC1> <128F> <1290> <5EDA> <1293> <1294> <5EE8> <12AC> <12AD> <5F56> <12EC> <12ED> <6096> <12FE> <12FF> <60F6> <1307> <1308> <610D> <1317> <1319> <6158> <1342> <1343> <6208> <134D> <134E> <6232> <135A> <135B> <6292> <13B0> <13B1> <64E0> <13C2> <13C3> <6534> <13D1> <13D2> <6582> <13E0> <13E1> <65E0> <13E8> <13E9> <6635> <13F3> <13F4> <6667> <1412> <1413> <6726> <141F> <1420> <6763> <14BE> <14BF> <6AA2> <14E4> <14E5> <6B78> <14E6> <14E7> <6B7F> <14EF> <14F0> <6BAA> <1501> <1502> <6C13> <156A> <156B> <6ED4> <15E4> <15E5> <723B> <15E6> <15E7> <723F> <15FC> <15FD> <72E0> <160B> <160C> <734E> <163E> <163F> <74F0> <165C> <165D> <7586> <1675> <1676> <75FE> <167B> <167C> <75F2> <1682> <1684> <7620> <1689> <168A> <7647> <168E> <168F> <7661> <1690> <1692> <7668> <16A1> <16A2> <7699> <16A5> <16A7> <76B8> <16B9> <16BA> <7725> <16BC> <16BD> <7737> <16D0> <16D1> <77BC> <170E> <170F> <79B9> <1718> <1719> <7A18> <1724> <1725> <7A61> <173E> <173F> <7AD9> <1741> <1742> <7AE1> <174B> <174C> <7B18> <175C> <175D> <7B70> <17F5> <17F6> <7E59> <1801> <1802> <7E88> <1806> <1807> <7E93> <180A> <180B> <7E9B> <180F> <1811> <7F4C> <1812> <1813> <7F50> <1817> <1818> <7F5F> <1819> <181A> <7F68> <182F> <1830> <7FC5> <183E> <183F> <8018> <1874> <1875> <8165> <1892> <1893> <81DF> <1895> <1896> <81FA> <1898> <1899> <8201> <18AD> <18AE> <826A> <18B1> <18B2> <8277> <18D5> <18D6> <8317> <191D> <191E> <8517> <1957> <1958> <86A9> <1959> <195A> <868B> <199F> <19A0> <87F6> <19C6> <19C7> <88C3> <19C9> <19CA> <88D8> <19D9> <19DA> <892A> <19F9> <19FA> <89BF> <19FC> <19FD> <89DC> <1A18> <1A19> <8AA5> <1A4A> <1A4B> <8B92> <1A4D> <1A4E> <8B99> <1A5F> <1A60> <8C8D> <1A68> <1A69> <8CB2> <1A72> <1A73> <8CFA> <1A74> <1A75> <8D04> <1A8F> <1A90> <8DEA> <1A94> <1A95> <8E08> <1A97> <1A98> <8E1D> <1ADF> <1AE1> <8F62> <1AF0> <1AF1> <8FF9> <1AFE> <1AFF> <904F> <1B00> <1B01> <9051> <1B33> <1B34> <91C0> <1B3D> <1B3E> <91F5> <1B69> <1B6A> <93AC> <1B6D> <1B6E> <93D6> <1B99> <1B9A> <9598> <1BB1> <1BB2> <962E> <1BC5> <1BC6> <96B1> endbfrange 100 beginbfrange <1BCA> <1BCB> <96B8> <1BE2> <1BE3> <973D> <1BF8> <1BF9> <978F> <1BFE> <1BFF> <97B3> <1C16> <1C18> <986F> <1C2A> <1C2B> <991D> <1C30> <1C31> <993D> <1C37> <1C38> <9951> <1C3B> <1C3C> <9997> <1C3E> <1C3F> <99AD> <1C46> <1C47> <99ED> <1C48> <1C49> <99F1> <1C69> <1C6A> <9AD3> <1C6B> <1C6C> <9ADE> <1C6D> <1C6E> <9AE2> <1C7B> <1C7C> <9B22> <1C7E> <1C81> <9B27> <1C82> <1C83> <9B2E> <1C88> <1C89> <9B4D> <1C90> <1C91> <9B96> <1C92> <1C93> <9B9F> <1C9B> <1C9C> <9BD1> <1CD4> <1CD5> <9D5D> <1CF3> <1CF4> <9E1A> <1CFB> <1CFC> <9E8B> <1D08> <1D0A> <9ECE> <1D14> <1D15> <9EF6> <1D17> <1D19> <9EFB> <1D1A> <1D1B> <9F07> <1D25> <1D27> <9F5F> <1D28> <1D29> <9F66> <1D37> <1D82> <2500> <1D83> <1D96> <2460> <1D97> <1DA0> <2160> <1DB1> <1DB3> <339C> <1DB4> <1DB5> <338E> <1DBD> <1DC1> <32A4> <1DC2> <1DC3> <3231> <1DCF> <1DD0> <2229> <1ECF> <1ED0> <3001> <1EDB> <1EDC> <1EDD> <1EDE> <3014> <1EE3> <1EEC> <3008> <1F02> <1F03> <30F5> <1F14> <1F15> <301D> <1F56> <1F57> <33A4> <1F5F> <1F61> <3385> <1F7E> <1F86> <2488> <1F87> <1F9A> <2474> <1F9C> <1FA5> <2170> <1FB0> <1FC9> <249C> <2000> <2001> <3388> <2006> <200B> <322A> <200F> <2010> <21E6> <2017> <201A> <2600> <201C> <201D> <261C> <2021> <2022> <216A> <2026> <202D> <2581> <2035> <2036> <2594> <2037> <2038> <256D> <203F> <2040> <25E2> <2045> <2047> <2571> <2053> <2054> <2018> <2055> <2056> <201C> <205E> <2066> <2776> <206A> <206B> <217A> <2076> <2077> <21C4> <2079> <207C> <30F7> <20E5> <20E6> <20FE> <20FF> <5DB8> <215C> <215D> <7146> <2183> <2185> <21A4> <21A5> <21B8> <21B9> <21C2> <21C3> <91ED> <21C4> <21C5> <91E4> <21D2> <21D3> <9277> <21FB> <21FC> <2210> <224B> <0020> <224D> <226B> <005D> <2274> <2276> <00A1> <227D> <227E> <2039> <227F> <2280> <2282> <2283> <2020> <228E> <228F> <0301> <2291> <2293> <0306> <22AA> <22AD> <00B0> <22B0> <22B2> <00BC> <22B3> <22B8> <00C0> <22B9> <22C9> <00C7> <22CA> <22CF> <00D9> <22D0> <22D5> <00E0> <22D6> <22E6> <00E7> <22E7> <22ED> <00F9> <22F7> <22FF> <0021> <2300> <2331> <002A> <2333> <2353> <005D> <2362> <2363> <00A2> <237C> <23BB> <23BC> <23BD> <30F0> endbfrange 100 beginbfrange <23D1> <23D2> <30D0> <23D3> <23D4> <30D3> <23D5> <23D6> <30D6> <23D7> <23D8> <30D9> <23D9> <23DA> <30DC> <23EA> <23EB> <304A> <23FA> <23FF> <306A> <2404> <2408> <307E> <240B> <2410> <3088> <2413> <2414> <3090> <2425> <2426> <3070> <2427> <2428> <3073> <2429> <242A> <3076> <242B> <242C> <3079> <242D> <242E> <307C> <2437> <2438> <300E> <243D> <2488> <2500> <248C> <248D> <2032> <248F> <2490> <249B> <249E> <215B> <249F> <24A0> <2153> <24A2> <24A7> <2074> <24A8> <24B1> <2080> <24D4> <24D5> <0259> <24D7> <24D8> <025A> <24E4> <24FF> <0020> <2500> <251F> <003C> <2521> <253F> <005D> <2548> <254A> <00A1> <2551> <2552> <2039> <2553> <2554> <2556> <2557> <2020> <2562> <2563> <0301> <2565> <2567> <0306> <257E> <2581> <00B0> <2584> <2586> <00BC> <2587> <258C> <00C0> <258D> <259D> <00C7> <259E> <25A3> <00D9> <25A4> <25A9> <00E0> <25AA> <25BA> <00E7> <25BB> <25C1> <00F9> <25CC> <25CD> <2032> <25CF> <25D0> <25DB> <25DE> <215B> <25DF> <25E0> <2153> <25E2> <25E7> <2074> <25E8> <25F1> <2080> <260A> <2613> <0030> <2618> <2619> <0028> <261A> <261B> <002E> <261C> <261D> <003A> <261E> <2627> <0030> <262C> <262D> <0028> <262E> <262F> <002E> <2630> <2631> <003A> <2635> <2636> <2153> <2638> <263D> <2155> <2644> <2647> <215B> <2690> <2699> <0030> <26F6> <26FF> <2170> <2700> <2701> <217A> <2705> <2710> <2160> <2714> <272D> <0041> <2732> <2733> <304A> <2742> <2747> <306A> <274C> <2750> <307E> <2753> <2758> <3088> <2759> <275D> <308F> <2762> <2763> <30AA> <2772> <2777> <30CA> <277C> <2780> <30DE> <2783> <2788> <30E8> <2789> <278D> <30EF> <278E> <2797> <3220> <27A8> <27B1> <0030> <27B2> <27BB> <0030> <27FB> <27FF> <2460> <2800> <2803> <2465> <2849> <2862> <24D0> <2863> <287C> <24B6> <2881> <2882> <304A> <2891> <2896> <306A> <289B> <289F> <307E> <28A2> <28A7> <3088> <28A8> <28AC> <308F> <28AD> <28DB> <32D0> <28DD> <28E6> <3280> <28E8> <28ED> <328A> <28F6> <28F7> <32A0> <296D> <2986> <0061> <2987> <29A0> <0041> <29A5> <29A6> <304A> <29B5> <29BA> <306A> <29BF> <29C3> <307E> <29C6> <29CB> <3088> <29CC> <29D0> <308F> <29D5> <29D6> <30AA> <29E5> <29EA> <30CA> <29EF> <29F3> <30DE> endbfrange 100 beginbfrange <29F6> <29FB> <30E8> <29FC> <29FF> <30EF> <2A7B> <2A94> <0061> <2A95> <2AAE> <0041> <2AB3> <2AB4> <304A> <2AC3> <2AC8> <306A> <2ACD> <2AD1> <307E> <2AD4> <2AD9> <3088> <2ADA> <2ADE> <308F> <2AE3> <2AE4> <30AA> <2AF3> <2AF8> <30CA> <2AFD> <2AFF> <30DE> <2B00> <2B01> <30E1> <2B04> <2B09> <30E8> <2B0A> <2B0E> <30EF> <2B8C> <2BA5> <0061> <2BA6> <2BBF> <0041> <2BC4> <2BC5> <304A> <2BD4> <2BD9> <306A> <2BDE> <2BE2> <307E> <2BE5> <2BEA> <3088> <2BEB> <2BEF> <308F> <2BF4> <2BF5> <30AA> <2C04> <2C09> <30CA> <2C0E> <2C12> <30DE> <2C15> <2C1A> <30E8> <2C1B> <2C1F> <30EF> <2C9A> <2CB3> <0061> <2CB4> <2CCD> <0041> <2CD2> <2CD3> <304A> <2CE2> <2CE7> <306A> <2CEC> <2CF0> <307E> <2CF3> <2CF8> <3088> <2CF9> <2CFD> <308F> <2D02> <2D03> <30AA> <2D12> <2D17> <30CA> <2D1C> <2D20> <30DE> <2D23> <2D28> <30E8> <2D29> <2D2D> <30EF> <2DA7> <2DC0> <0061> <2DC1> <2DDA> <0041> <2DDF> <2DE0> <304A> <2DEF> <2DF4> <306A> <2DF9> <2DFD> <307E> <2E00> <2E05> <3088> <2E06> <2E0A> <308F> <2E0F> <2E10> <30AA> <2E1F> <2E24> <30CA> <2E29> <2E2D> <30DE> <2E30> <2E35> <30E8> <2E36> <2E3A> <30EF> <2E4C> <2E4D> <2121> <2E5D> <2E5E> <33D7> <2E62> <2E63> <3301> <2E71> <2E76> <330E> <2E7C> <2E7F> <331A> <2E80> <2E82> <331F> <2E88> <2E89> <3328> <2E8E> <2E90> <332E> <2E94> <2E95> <3334> <2EA0> <2EA2> <333E> <2EA3> <2EA6> <3343> <2EA8> <2EA9> <334B> <2EAA> <2EAB> <334F> <2EB3> <2EB4> <3355> <2EB6> <2EB7> <3301> <2EC5> <2ECA> <330E> <2ED0> <2ED3> <331A> <2ED4> <2ED6> <331F> <2EDC> <2EDD> <3328> <2EE2> <2EE4> <332E> <2EE8> <2EE9> <3334> <2EF4> <2EF6> <333E> <2EF7> <2EFA> <3343> <2EFC> <2EFD> <334B> <2EFE> <2EFF> <334F> <2F07> <2F08> <3355> <2F26> <2F29> <300C> <2F2A> <2F2B> <301A> <2F2C> <2F2D> <3018> <2F30> <2F31> <301D> <2F32> <2F33> <2018> <2F34> <2F35> <201C> <2F42> <2F43> <2668> <2F4C> <2F4E> <3033> <2F59> <2F5A> <2272> <2F5B> <2F5E> <300C> <2F5F> <2F60> <301A> <2F61> <2F62> <3018> <2F65> <2F68> <300C> <2F69> <2F6A> <301A> <2F6B> <2F6C> <3018> <2F89> <2F8A> <301D> <2FAA> <2FAB> <2198> <2FAC> <2FAD> <2196> <2FB0> <2FB1> <21C4> <2FB5> <2FB7> <2193> <2FE5> <2FE6> <3008> <2FE7> <2FEA> <3008> <2FEB> <2FEC> <300A> endbfrange 100 beginbfrange <2FF1> <2FF2> <309D> <2FF3> <2FFD> <3041> <2FFE> <2FFF> <304B> <3000> <3004> <304D> <3005> <3007> <3051> <3008> <3049> <3053> <304A> <304B> <30FD> <304D> <3056> <30A1> <3058> <305D> <30AB> <305F> <3061> <30B1> <3062> <30A3> <30B3> <30A4> <30A7> <30F7> <30A8> <30A9> <309D> <30AA> <30B4> <3041> <30B5> <30BB> <304B> <30BC> <30BE> <3051> <30BF> <30FF> <3053> <3101> <3102> <30FD> <3104> <310D> <30A1> <310F> <3114> <30AB> <3116> <3118> <30B1> <3119> <315A> <30B3> <315B> <315E> <30F7> <315F> <3160> <3001> <3169> <316A> <30FD> <316B> <316C> <309D> <316D> <316E> <316F> <3170> <3014> <3171> <3172> <3173> <3174> <3014> <3175> <317E> <0030> <317F> <3189> <3041> <318A> <3190> <304B> <3191> <31D4> <3051> <31E1> <31EB> <30A1> <31ED> <31F2> <30AC> <31F4> <31FF> <30B2> <3200> <3236> <30BE> <323C> <323D> <30F5> <3248> <3249> <2032> <324B> <324C> <3257> <325A> <215B> <325B> <325C> <2153> <325E> <3263> <2074> <3264> <326D> <2080> <3290> <3291> <0259> <3293> <3294> <025A> <32A0> <32DB> <0020> <32DD> <32FB> <005D> <3304> <3306> <00A1> <330D> <330E> <2039> <330F> <3310> <3312> <3313> <2020> <331E> <331F> <0301> <3321> <3323> <0306> <333A> <333D> <00B0> <3340> <3342> <00BC> <3343> <3348> <00C0> <3349> <3359> <00C7> <335A> <335F> <00D9> <3360> <3365> <00E0> <3366> <3376> <00E7> <3377> <337D> <00F9> <3388> <3389> <2032> <338B> <338C> <3397> <339A> <215B> <339B> <339C> <2153> <339E> <33A3> <2074> <33A4> <33AD> <2080> <33C6> <33CF> <0030> <33D4> <33D5> <0028> <33D6> <33D7> <002E> <33D8> <33D9> <003A> <33DA> <33E3> <0030> <33E8> <33E9> <0028> <33EA> <33EB> <002E> <33EC> <33ED> <003A> <33F6> <33F9> <300C> <33FA> <33FB> <301A> <33FC> <33FD> <3018> <3400> <3401> <301D> <3402> <3403> <2018> <3404> <3405> <201C> <3609> <360A> <2E8C> <3617> <3618> <98DF> <36D1> <36D2> <5FD8> <36F9> <36FA> <7336> <376B> <376C> <7F50> <376F> <3770> <7FC5> <3776> <3777> <2EBF> <37D8> <37D9> <4E04> <37DC> <37DD> <4E2F> <37DE> <37DF> <4E40> <37F1> <37F2> <4F7D> <37F7> <37F8> <5000> <3813> <3814> <5201> <381C> <381D> <530A> <3838> <3839> <5560> <383D> <383E> <560E> <3847> <3848> <5671> endbfrange 61 beginbfrange <384B> <384C> <56AC> <3855> <3856> <5733> <385E> <385F> <57F5> <3874> <3875> <59E3> <3889> <388A> <5B7E> <38A3> <38A4> <5E14> <38A8> <38A9> <5E6B> <38AC> <38AD> <5EBE> <38B2> <38B3> <5F1C> <38D3> <38D5> <6112> <38EA> <38EB> <6342> <38FC> <38FD> <64BE> <390D> <390E> <665B> <3923> <3924> <6830> <3930> <3931> <68F0> <393A> <393B> <697F> <393F> <3940> <69D6> <3948> <3949> <6A50> <394F> <3951> <6A9D> <396D> <396E> <6CEB> <3990> <3991> <6FA7> <399A> <399B> <705D> <39A2> <39A3> <70D3> <39B8> <39B9> <7255> <39C0> <39C1> <7304> <39C8> <39C9> <7385> <39CB> <39CD> <739E> <39DA> <39DB> <741A> <39DF> <39E1> <742F> <39ED> <39EF> <7485> <3A00> <3A01> <7592> <3A07> <3A08> <7615> <3A14> <3A15> <76A4> <3A1D> <3A1E> <775F> <3A28> <3A29> <782D> <3A32> <3A33> <78E0> <3A3C> <3A3D> <795B> <3A54> <3A55> <7ABB> <3A72> <3A73> <7CC8> <3A78> <3A7A> <7D07> <3A84> <3A85> <7D8B> <3A97> <3A98> <7F52> <3AA0> <3AA1> <7FEE> <3AB0> <3AB1> <80D7> <3AD1> <3AD2> <83BF> <3AEF> <3AF0> <86A7> <3AFC> <3AFD> <87AC> <3B0D> <3B0E> <88BD> <3B12> <3B13> <88F0> <3B15> <3B17> <8918> <3B29> <3B2A> <8B43> <3B4F> <3B50> <8FB5> <3B6D> <3B6E> <91AD> <3B7D> <3B7E> <92CB> <3BB1> <3BB2> <97B5> <3BBC> <3BBD> <9852> <3BC5> <3BC6> <9932> <3BCC> <3BCD> <99B9> <3BD3> <3BD4> <9A2D> <3BD9> <3BDA> <9AB5> <3BDE> <3BDF> <9B33> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-Korea1-2 b/Resources/cmap/Adobe-Korea1-2 deleted file mode 100644 index bc69bcaf232..00000000000 --- a/Resources/cmap/Adobe-Korea1-2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Identity) %%Title: (Identity Adobe Korea1 2) %%Version: 1.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 2 def end def /CMapName /Adobe-Korea1-2 def /CMapVersion 1.000 def /CMapType 1 def /XUID [1 10 25541] def /WMode 0 def /CIDCount 18352 def 1 begincodespacerange <0000> <47FF> endcodespacerange 72 begincidrange <0000> <00ff> 0 <0100> <01ff> 256 <0200> <02ff> 512 <0300> <03ff> 768 <0400> <04ff> 1024 <0500> <05ff> 1280 <0600> <06ff> 1536 <0700> <07ff> 1792 <0800> <08ff> 2048 <0900> <09ff> 2304 <0a00> <0aff> 2560 <0b00> <0bff> 2816 <0c00> <0cff> 3072 <0d00> <0dff> 3328 <0e00> <0eff> 3584 <0f00> <0fff> 3840 <1000> <10ff> 4096 <1100> <11ff> 4352 <1200> <12ff> 4608 <1300> <13ff> 4864 <1400> <14ff> 5120 <1500> <15ff> 5376 <1600> <16ff> 5632 <1700> <17ff> 5888 <1800> <18ff> 6144 <1900> <19ff> 6400 <1a00> <1aff> 6656 <1b00> <1bff> 6912 <1c00> <1cff> 7168 <1d00> <1dff> 7424 <1e00> <1eff> 7680 <1f00> <1fff> 7936 <2000> <20ff> 8192 <2100> <21ff> 8448 <2200> <22ff> 8704 <2300> <23ff> 8960 <2400> <24ff> 9216 <2500> <25ff> 9472 <2600> <26ff> 9728 <2700> <27ff> 9984 <2800> <28ff> 10240 <2900> <29ff> 10496 <2a00> <2aff> 10752 <2b00> <2bff> 11008 <2c00> <2cff> 11264 <2d00> <2dff> 11520 <2e00> <2eff> 11776 <2f00> <2fff> 12032 <3000> <30ff> 12288 <3100> <31ff> 12544 <3200> <32ff> 12800 <3300> <33ff> 13056 <3400> <34ff> 13312 <3500> <35ff> 13568 <3600> <36ff> 13824 <3700> <37ff> 14080 <3800> <38ff> 14336 <3900> <39ff> 14592 <3a00> <3aff> 14848 <3b00> <3bff> 15104 <3c00> <3cff> 15360 <3d00> <3dff> 15616 <3e00> <3eff> 15872 <3f00> <3fff> 16128 <4000> <40ff> 16384 <4100> <41ff> 16640 <4200> <42ff> 16896 <4300> <43ff> 17152 <4400> <44ff> 17408 <4500> <45ff> 17664 <4600> <46ff> 17920 <4700> <47af> 18176 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Adobe-Korea1-H-CID b/Resources/cmap/Adobe-Korea1-H-CID deleted file mode 100644 index 905cdfee1eb..00000000000 --- a/Resources/cmap/Adobe-Korea1-H-CID +++ /dev/null @@ -1,76 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Korea1-H-CID) -%%Title: (Adobe-Korea1-H-CID Adobe Korea1 0) -%%Version: 2.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Adobe_Korea1_H_CID) def - /Supplement 0 def -end def - -/CMapName /Adobe-Korea1-H-CID def -/CMapVersion 2.000 def -/CMapType 1 def - -/UIDOffset 0 def - -/WMode 0 def - -1 begincodespacerange - <0000> -endcodespacerange - -0 usefont -1 begincidrange -<0000> 0 -endcidrange - -% Map CIDs 1 thru 95 to Ascii codes 0x20 - 0x7F in fontID 1. -1 usefont -1 beginbfrange -<0001> <005F> <20> -endbfrange - -% Map CIDs 9333 - 18154 to FontID 2 for Supplement 1 -% Also map CIDs upto 65536 to this fontID. -2 usefont -2 begincidrange -<2475> <24FF> 9333 -<2500> 9472 -endcidrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Korea1-H-Host b/Resources/cmap/Adobe-Korea1-H-Host deleted file mode 100644 index eb4b7e67968..00000000000 --- a/Resources/cmap/Adobe-Korea1-H-Host +++ /dev/null @@ -1,735 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Korea1-H-Host) -%%Title: (Adobe-Korea1-H-Host Adobe KSCms-UHC 0) -%%Version: 4.000 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Korea1_H_Host) def -/Supplement 0 def -end def - -/CMapName /Adobe-Korea1-H-Host def - -/CMapVersion 4.000 def -/CMapType 1 def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -4 usefont % Subset Fonts -1 begincidrange -<0000> 0 -endcidrange - -1 usefont % Prop Roman -1 beginbfrange -<0001> <005F> <20> -endbfrange - -2 usefont % Halfwidth Roman -1 beginbfrange -<1F9E> <1FFB> <20> -endbfrange - -0 usefont % Windows TrueType Font -100 beginbfrange -<0065> <00C2> -<00C3> <00FF> -<0100> <0107> -<0108> <0165> -<0166> <0198> -<0199> <01C2> -<01C3> <01CC> -<01CD> <01D6> -<01D7> <01EE> -<01EF> <01FF> -<0200> <0206> -<0207> <024A> -<024B> <0299> -<029A> <029D> -<029E> <029E> -<029F> <02A6> -<02A7> <02F4> -<02F5> <02FF> -<0300> <0352> -<0353> <03A5> -<03A6> <03FB> -<03FC> <03FF> -<0400> <041C> -<041D> <043D> -<043E> <049B> -<049C> <04F9> -<04FA> <04FF> -<0500> <0557> -<0558> <05B5> -<05B6> <05FF> -<0600> <0613> -<0614> <0671> -<0672> <06CF> -<06D0> <06FF> -<0700> <072D> -<072E> <078B> -<078C> <07E9> -<07EA> <07FF> -<0800> <0847> -<0848> <08A5> -<08A6> <08FF> -<0900> <0903> -<0904> <0961> -<0962> <09BF> -<09C0> <09FF> -<0A00> <0A1D> -<0A1E> <0A7B> -<0A7C> <0AD9> -<0ADA> <0AFF> -<0B00> <0B37> -<0B38> <0B95> -<0B96> <0BF3> -<0BF4> <0BFF> -<0C00> <0C51> -<0C52> <0CAF> -<0CB0> <0CFF> -<0D00> <0D0D> -<0D0E> <0D6B> -<0D6C> <0DC9> -<0DCA> <0DF8> -<0DF9> <0DFD> -<0DFE> <0DFF> -<0E00> <0E0D> -<0E0E> <0E24> -<0E25> <0E5D> -<0E5E> <0E5E> -<0E5F> <0E82> -<0E83> <0EB0> -<0EB1> <0EC8> -<0EC9> <0EDE> -<0EDF> <0EEA> -<0EEB> <0EFF> -<0F00> <0F3B> -<0F3C> <0F95> -<0F96> <0F98> -<0F99> <0F99> -<0F9A> <0FAE> -<0FAF> <0FC5> -<0FC6> <0FD1> -<0FD2> <0FF2> -<0FF3> <0FFF> -<1000> <1013> -<1014> <1014> -<1015> <1022> -<1023> <1023> -<1024> <1025> -<1026> <1027> -<1028> <1029> -<102A> <102A> -<102B> <102B> -<102C> <102C> -<102D> <102D> -<102E> <102E> -<102F> <1031> -<1032> <1034> -<1035> <1035> -<1036> <1036> -<1037> <1039> -<103A> <103A> -<103B> <103B> -endbfrange -100 beginbfrange -<103C> <103C> -<103D> <103E> -<103F> <1049> -<104A> <104C> -<104D> <104D> -<104E> <104E> -<104F> <104F> -<1050> <1052> -<1053> <1053> -<1054> <1054> -<1055> <1058> -<1059> <1059> -<105A> <105F> -<1060> <10BD> -<10BE> <10FF> -<1100> <1102> -<1103> <1115> -<1116> <1116> -<1117> <1117> -<1118> <111D> -<111E> <1120> -<1121> <1121> -<1122> <1122> -<1123> <1126> -<1127> <1127> -<1128> <1129> -<112A> <112B> -<112C> <112C> -<112D> <112E> -<112F> <112F> -<1130> <1132> -<1133> <1133> -<1134> <1135> -<1136> <1137> -<1138> <1138> -<1139> <1139> -<113A> <113B> -<113C> <113F> -<1140> <1142> -<1143> <1143> -<1144> <1144> -<1145> <1147> -<1148> <1148> -<1149> <1174> -<1175> <118B> -<118C> <119E> -<119F> <119F> -<11A0> <11A0> -<11A1> <11A2> -<11A3> <11A4> -<11A5> <11A5> -<11A6> <11AA> -<11AB> <11AB> -<11AC> <11AC> -<11AD> <11AE> -<11AF> <11AF> -<11B0> <11B5> -<11B6> <11B6> -<11B7> <11B9> -<11BA> <11BC> -<11BD> <11BE> -<11BF> <11C0> -<11C1> <11C2> -<11C3> <11C3> -<11C4> <11C5> -<11C6> <11C6> -<11C7> <11D0> -<11D1> <11D3> -<11D4> <11D4> -<11D5> <11D5> -<11D6> <11D9> -<11DA> <11DA> -<11DB> <11DC> -<11DD> <11DF> -<11E0> <11E0> -<11E1> <11FA> -<11FB> <11FB> -<11FC> <11FF> -<1200> <1200> -<1201> <1202> -<1203> <1204> -<1205> <1212> -<1213> <122C> -<122D> <128A> -<128B> <12E8> -<12E9> <12FF> -<1300> <1346> -<1347> <136A> -<136B> <1388> -<1389> <13A2> -<13A3> <13A6> -<13A7> <13FF> -<1400> <1403> -<1404> <141E> -<141F> <141F> -<1420> <1432> -<1433> <1450> -<1451> <145A> -<145B> <14B5> -<14B6> <14B6> -endbfrange -100 beginbfrange -<14B7> <14C8> -<14C9> <14F5> -<14F6> <14F6> -<14F7> <14F7> -<14F8> <14FB> -<14FC> <14FF> -<1500> <1511> -<1512> <1561> -<1562> <156C> -<156D> <156D> -<156E> <156E> -<156F> <157A> -<157B> <15AF> -<15B0> <15B0> -<15B1> <15B9> -<15BA> <15CA> -<15CB> <15CF> -<15D0> <15D0> -<15D1> <15FF> -<1600> <1628> -<1629> <167C> -<167D> <1685> -<1686> <168C> -<168D> <16A7> -<16A8> <16A8> -<16A9> <16E1> -<16E2> <16EE> -<16EF> <16F0> -<16F1> <16F1> -<16F2> <16F2> -<16F3> <16F6> -<16F7> <16F7> -<16F8> <16FE> -<16FF> <16FF> -<1700> <1707> -<1708> <1708> -<1709> <1709> -<170A> <170C> -<170D> <172F> -<1730> <1730> -<1731> <1732> -<1733> <1734> -<1735> <1739> -<173A> <173A> -<173B> <173B> -<173C> <173E> -<173F> <1741> -<1742> <1748> -<1749> <1749> -<174A> <174B> -<174C> <1752> -<1753> <1755> -<1756> <1757> -<1758> <1759> -<175A> <175B> -<175C> <175C> -<175D> <175E> -<175F> <175F> -<1760> <1760> -<1761> <1762> -<1763> <1763> -<1764> <1765> -<1766> <1766> -<1767> <176B> -<176C> <176F> -<1770> <1770> -<1771> <1771> -<1772> <1772> -<1773> <1774> -<1775> <1782> -<1783> <1783> -<1784> <1787> -<1788> <178A> -<178B> <178B> -<178C> <178C> -<178D> <178E> -<178F> <1799> -<179A> <179D> -<179E> <179E> -<179F> <17AE> -<17AF> <17B5> -<17B6> <17FB> -<17FC> <17FF> -<1800> <1802> -<1803> <1807> -<1808> <1808> -<1809> <1809> -<180A> <180B> -<180C> <1811> -<1812> <1815> -<1816> <1834> -<1835> <185E> -<185F> <1865> -<1866> <1885> -<1886> <18A8> -<18A9> <18B6> -<18B7> <18B8> -<18B9> <18BC> -<18BD> <18BD> -<18BE> <18C0> -endbfrange -100 beginbfrange -<18C1> <18C2> -<18C3> <18C3> -<18C4> <18D2> -<18D3> <18D3> -<18D4> <18D6> -<18D7> <18D9> -<18DA> <18DD> -<18DE> <18DF> -<18E0> <18E4> -<18E5> <18FF> -<1900> <190A> -<190B> <190F> -<1910> <1911> -<1912> <1915> -<1916> <1917> -<1918> <1918> -<1919> <1919> -<191A> <191A> -<191B> <191F> -<1920> <1922> -<1923> <1924> -<1925> <192E> -<192F> <192F> -<1930> <1935> -<1936> <1937> -<1938> <1939> -<193A> <193B> -<193C> <1949> -<194A> <194A> -<194B> <194E> -<194F> <1998> -<1999> <19A8> -<19A9> <19E2> -<19E3> <19FF> -<1A00> <1A05> -<1A06> <1A63> -<1A64> <1AC1> -<1AC2> <1AFF> -<1B00> <1B1F> -<1B20> <1B3B> -<1B3C> <1B60> -<1B61> <1B61> -<1B62> <1B77> -<1B78> <1B7B> -<1B7C> <1B8B> -<1B8C> <1B8C> -<1B8D> <1B8D> -<1B8E> <1BAA> -<1BAB> <1BAB> -<1BAC> <1BD8> -<1BD9> <1BDE> -<1BDF> <1BFF> -<1C00> <1C24> -<1C25> <1C34> -<1C35> <1C92> -<1C93> <1CC9> -<1CCA> <1CCA> -<1CCB> <1CE5> -<1CE6> <1CE6> -<1CE7> <1CEE> -<1CEF> <1CFF> -<1D00> <1D05> -<1D06> <1D14> -<1D15> <1D1E> -<1D1F> <1D49> -<1D4A> <1D5D> -<1D5E> <1D5E> -<1D5F> <1D83> -<1D84> <1D93> -<1D94> <1D94> -<1D95> <1D97> -<1D98> <1DA5> -<1DA6> <1DB6> -<1DB7> <1DB7> -<1DB8> <1DFF> -<1E00> <1E03> -<1E04> <1E1C> -<1E1D> <1E1D> -<1E1E> <1E46> -<1E47> <1E5E> -<1E5F> <1E66> -<1E67> <1E67> -<1E68> <1EBC> -<1EBD> <1EC4> -<1EC5> <1EDB> -<1EDC> <1EDC> -<1EDD> <1EFF> -<1F00> <1F19> -<1F1A> <1F33> -<1F34> <1F34> -<1F35> <1F77> -<2475> <248E> <8141> -<248F> <24A8> <8161> -<24A9> <24FF> <8181> -<2500> <2526> <81D8> -<2527> <2540> <8241> -<2541> <255A> <8261> -<255B> <25D8> <8281> -<25D9> <25F2> <8341> -<25F3> <25FF> <8361> -endbfrange -100 beginbfrange -<2600> <260C> <836E> -<260D> <268A> <8381> -<268B> <26A4> <8441> -<26A5> <26BE> <8461> -<26BF> <26FF> <8481> -<2700> <273C> <84C2> -<273D> <2756> <8541> -<2757> <2770> <8561> -<2771> <27EE> <8581> -<27EF> <27FF> <8641> -<2800> <2808> <8652> -<2809> <2822> <8661> -<2823> <28A0> <8681> -<28A1> <28BA> <8741> -<28BB> <28D4> <8761> -<28D5> <28FF> <8781> -<2900> <2952> <87AC> -<2953> <296C> <8841> -<296D> <2986> <8861> -<2987> <29FF> <8881> -<2A00> <2A04> <88FA> -<2A05> <2A1E> <8941> -<2A1F> <2A38> <8961> -<2A39> <2AB6> <8981> -<2AB7> <2AD0> <8A41> -<2AD1> <2AEA> <8A61> -<2AEB> <2AFF> <8A81> -<2B00> <2B68> <8A96> -<2B69> <2B82> <8B41> -<2B83> <2B9C> <8B61> -<2B9D> <2BFF> <8B81> -<2C00> <2C1A> <8BE4> -<2C1B> <2C34> <8C41> -<2C35> <2C4E> <8C61> -<2C4F> <2CCC> <8C81> -<2CCD> <2CE6> <8D41> -<2CE7> <2CFF> <8D61> -<2D00> <2D00> <8D7A> -<2D01> <2D7E> <8D81> -<2D7F> <2D98> <8E41> -<2D99> <2DB2> <8E61> -<2DB3> <2DFF> <8E81> -<2E00> <2E30> <8ECE> -<2E31> <2E4A> <8F41> -<2E4B> <2E64> <8F61> -<2E65> <2EE2> <8F81> -<2EE3> <2EFC> <9041> -<2EFD> <2EFF> <9061> -<2F00> <2F16> <9064> -<2F17> <2F94> <9081> -<2F95> <2FAE> <9141> -<2FAF> <2FC8> <9161> -<2FC9> <2FFF> <9181> -<3000> <3046> <91B8> -<3047> <3060> <9241> -<3061> <307A> <9261> -<307B> <30F8> <9281> -<30F9> <30FF> <9341> -<3100> <3112> <9348> -<3113> <312C> <9361> -<312D> <31AA> <9381> -<31AB> <31C4> <9441> -<31C5> <31DE> <9461> -<31DF> <31FF> <9481> -<3200> <325C> <94A2> -<325D> <3276> <9541> -<3277> <3290> <9561> -<3291> <32FF> <9581> -<3300> <330E> <95F0> -<330F> <3328> <9641> -<3329> <3342> <9661> -<3343> <33C0> <9681> -<33C1> <33DA> <9741> -<33DB> <33F4> <9761> -<33F5> <33FF> <9781> -<3400> <3472> <978C> -<3473> <348C> <9841> -<348D> <34A6> <9861> -<34A7> <34FF> <9881> -<3500> <3524> <98DA> -<3525> <353E> <9941> -<353F> <3558> <9961> -<3559> <35D6> <9981> -<35D7> <35F0> <9A41> -<35F1> <35FF> <9A61> -<3600> <360A> <9A70> -<360B> <3688> <9A81> -<3689> <36A2> <9B41> -<36A3> <36BC> <9B61> -<36BD> <36FF> <9B81> -<3700> <373A> <9BC4> -<373B> <3754> <9C41> -<3755> <376E> <9C61> -<376F> <37EC> <9C81> -<37ED> <37FF> <9D41> -<3800> <3806> <9D54> -<3807> <3820> <9D61> -<3821> <389E> <9D81> -<389F> <38B8> <9E41> -<38B9> <38D2> <9E61> -endbfrange -100 beginbfrange -<38D3> <38FF> <9E81> -<3900> <3950> <9EAE> -<3951> <396A> <9F41> -<396B> <3984> <9F61> -<3985> <39FF> <9F81> -<3A00> <3A02> <9FFC> -<3A03> <3A1C> -<3A1D> <3A36> -<3A37> <3AB4> -<3AB5> <3ACE> -<3ACF> <3AE8> -<3AE9> <3AFF> -<3B00> <3B08> -<3B09> <3B22> -<3B23> <3B3C> -<3B3D> <3B5C> -<3B5D> <3B76> -<3B77> <3B90> -<3B91> <3BB0> -<3BB1> <3BCA> -<3BCB> <3BE4> -<3BE5> <3BFF> -<3C00> <3C04> -<3C05> <3C1E> -<3C1F> <3C38> -<3C39> <3C58> -<3C59> <3C72> -<3C73> <3C8C> -<3C8D> <3CAC> -<3CAD> <3CC6> -<3CC7> <3CE0> -<3CE1> <3CFF> -<3D00> <3D00> -<3D01> <3D1A> -<3D1B> <3D34> -<3D35> <3D54> -<3D55> <3D6E> -<3D6F> <3D88> -<3D89> <3DA8> -<3DA9> <3DC2> -<3DC3> <3DDC> -<3DDD> <3DFC> -<3DFD> <3DFF> -<3E00> <3E16> -<3E17> <3E30> -<3E31> <3E50> -<3E51> <3E6A> -<3E6B> <3E84> -<3E85> <3EA4> -<3EA5> <3EBE> -<3EBF> <3ED8> -<3ED9> <3EF8> -<3EF9> <3EFF> -<3F00> <3F12> -<3F13> <3F2C> -<3F2D> <3F4C> -<3F4D> <3F66> -<3F67> <3F80> -<3F81> <3FA0> -<3FA1> <3FBA> -<3FBB> <3FD4> -<3FD5> <3FF4> -<3FF5> <3FFF> -<4000> <400E> -<400F> <4028> -<4029> <4048> -<4049> <4062> -<4063> <407C> -<407D> <409C> -<409D> <40B6> -<40B7> <40D0> -<40D1> <40F0> -<40F1> <40FF> -<4100> <410A> -<410B> <4124> -<4125> <4144> -<4145> <415E> -<415F> <4178> -<4179> <4198> -<4199> <41B2> -<41B3> <41CC> -<41CD> <41EC> -<41ED> <41FF> -<4200> <4206> -<4207> <4220> -<4221> <4240> -<4241> <425A> -<425B> <4274> -<4275> <4294> -<4295> <42AE> -<42AF> <42C8> -<42C9> <42E8> -<42E9> <42FF> -<4300> <4302> -<4303> <431C> -<431D> <433C> -<433D> <4356> -<4357> <4370> -<4371> <4390> -<4391> <43AA> -endbfrange -33 beginbfrange -<43AB> <43C4> -<43C5> <43E4> -<43E5> <43FE> -<43FF> <43FF> -<4400> <4418> -<4419> <4438> -<4439> <4452> -<4453> <446C> -<446D> <448C> -<448D> <44A6> -<44A7> <44C0> -<44C1> <44E0> -<44E1> <44FA> -<44FB> <44FF> -<4500> <4514> -<4515> <4534> -<4535> <454E> -<454F> <4568> -<4569> <4588> -<4589> <45A2> -<45A3> <45BC> -<45BD> <45DC> -<45DD> <45F6> -<45F7> <45FF> -<4600> <4610> -<4611> <4630> -<4631> <464A> -<464B> <4664> -<4665> <4684> -<4685> <469E> -<469F> <46B8> -<46B9> <46D8> -<46D9> <46EA> -endbfrange - -3 usefont % Vertical Fonts -11 beginbfrange -<1F78> <1F79> -<1F7A> <1F7A> -<1F7E> <1F7E> -<1F7F> <1F8A> -<1F8C> <1F8C> -<1F8F> <1F8F> -<1F90> <1F90> -<1F97> <1F97> -<1F98> <1F98> -<1F9A> <1F9A> -<1F9C> <1F9C> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Korea1-KSCms-UHC b/Resources/cmap/Adobe-Korea1-KSCms-UHC deleted file mode 100644 index 1da0af91af5..00000000000 --- a/Resources/cmap/Adobe-Korea1-KSCms-UHC +++ /dev/null @@ -1,727 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Korea1-KSCms-UHC) -%%Title: (Adobe-Korea1-KSCms-UHC Adobe KSCms-UHC 1) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Korea1_KSCms_UHC) def -/Supplement 1 def -end def - -/CMapName /Adobe-Korea1-KSCms-UHC def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -1 beginbfrange -<0000> <0000> <20> -endbfrange -100 beginbfrange -<0001> <005F> <20> -<0065> <00C2> -<00C3> <00FF> -<0100> <0107> -<0108> <0165> -<0166> <0198> -<0199> <01C2> -<01C3> <01CC> -<01CD> <01D6> -<01D7> <01EE> -<01EF> <01FF> -<0200> <0206> -<0207> <024A> -<024B> <0299> -<029A> <029D> -<029E> <029E> -<029F> <02A6> -<02A7> <02F4> -<02F5> <02FF> -<0300> <0352> -<0353> <03A5> -<03A6> <03FB> -<03FC> <03FF> -<0400> <041C> -<041D> <043D> -<043E> <049B> -<049C> <04F9> -<04FA> <04FF> -<0500> <0557> -<0558> <05B5> -<05B6> <05FF> -<0600> <0613> -<0614> <0671> -<0672> <06CF> -<06D0> <06FF> -<0700> <072D> -<072E> <078B> -<078C> <07E9> -<07EA> <07FF> -<0800> <0847> -<0848> <08A5> -<08A6> <08FF> -<0900> <0903> -<0904> <0961> -<0962> <09BF> -<09C0> <09FF> -<0A00> <0A1D> -<0A1E> <0A7B> -<0A7C> <0AD9> -<0ADA> <0AFF> -<0B00> <0B37> -<0B38> <0B95> -<0B96> <0BF3> -<0BF4> <0BFF> -<0C00> <0C51> -<0C52> <0CAF> -<0CB0> <0CFF> -<0D00> <0D0D> -<0D0E> <0D6B> -<0D6C> <0DC9> -<0DCA> <0DF8> -<0DF9> <0DFD> -<0DFE> <0DFF> -<0E00> <0E0D> -<0E0E> <0E24> -<0E25> <0E5D> -<0E5E> <0E5E> -<0E5F> <0E82> -<0E83> <0EB0> -<0EB1> <0EC8> -<0EC9> <0EDE> -<0EDF> <0EEA> -<0EEB> <0EFF> -<0F00> <0F3B> -<0F3C> <0F95> -<0F96> <0F98> -<0F99> <0F99> -<0F9A> <0FAE> -<0FAF> <0FC5> -<0FC6> <0FD1> -<0FD2> <0FF2> -<0FF3> <0FFF> -<1000> <1013> -<1014> <1014> -<1015> <1022> -<1023> <1023> -<1024> <1025> -<1026> <1027> -<1028> <1029> -<102A> <102A> -<102B> <102B> -<102C> <102C> -<102D> <102D> -<102E> <102E> -<102F> <1031> -<1032> <1034> -<1035> <1035> -<1036> <1036> -<1037> <1039> -<103A> <103A> -endbfrange -100 beginbfrange -<103B> <103B> -<103C> <103C> -<103D> <103E> -<103F> <1049> -<104A> <104C> -<104D> <104D> -<104E> <104E> -<104F> <104F> -<1050> <1052> -<1053> <1053> -<1054> <1054> -<1055> <1058> -<1059> <1059> -<105A> <105F> -<1060> <10BD> -<10BE> <10FF> -<1100> <1102> -<1103> <1115> -<1116> <1116> -<1117> <1117> -<1118> <111D> -<111E> <1120> -<1121> <1121> -<1122> <1122> -<1123> <1126> -<1127> <1127> -<1128> <1129> -<112A> <112B> -<112C> <112C> -<112D> <112E> -<112F> <112F> -<1130> <1132> -<1133> <1133> -<1134> <1135> -<1136> <1137> -<1138> <1138> -<1139> <1139> -<113A> <113B> -<113C> <113F> -<1140> <1142> -<1143> <1143> -<1144> <1144> -<1145> <1147> -<1148> <1148> -<1149> <1174> -<1175> <118B> -<118C> <119E> -<119F> <119F> -<11A0> <11A0> -<11A1> <11A2> -<11A3> <11A4> -<11A5> <11A5> -<11A6> <11AA> -<11AB> <11AB> -<11AC> <11AC> -<11AD> <11AE> -<11AF> <11AF> -<11B0> <11B5> -<11B6> <11B6> -<11B7> <11B9> -<11BA> <11BC> -<11BD> <11BE> -<11BF> <11C0> -<11C1> <11C2> -<11C3> <11C3> -<11C4> <11C5> -<11C6> <11C6> -<11C7> <11D0> -<11D1> <11D3> -<11D4> <11D4> -<11D5> <11D5> -<11D6> <11D9> -<11DA> <11DA> -<11DB> <11DC> -<11DD> <11DF> -<11E0> <11E0> -<11E1> <11FA> -<11FB> <11FB> -<11FC> <11FF> -<1200> <1200> -<1201> <1202> -<1203> <1204> -<1205> <1212> -<1213> <122C> -<122D> <128A> -<128B> <12E8> -<12E9> <12FF> -<1300> <1346> -<1347> <136A> -<136B> <1388> -<1389> <13A2> -<13A3> <13A6> -<13A7> <13FF> -<1400> <1403> -<1404> <141E> -<141F> <141F> -<1420> <1432> -<1433> <1450> -<1451> <145A> -<145B> <14B5> -endbfrange -100 beginbfrange -<14B6> <14B6> -<14B7> <14C8> -<14C9> <14F5> -<14F6> <14F6> -<14F7> <14F7> -<14F8> <14FB> -<14FC> <14FF> -<1500> <1511> -<1512> <1561> -<1562> <156C> -<156D> <156D> -<156E> <156E> -<156F> <157A> -<157B> <15AF> -<15B0> <15B0> -<15B1> <15B9> -<15BA> <15CA> -<15CB> <15CF> -<15D0> <15D0> -<15D1> <15FF> -<1600> <1628> -<1629> <167C> -<167D> <1685> -<1686> <168C> -<168D> <16A7> -<16A8> <16A8> -<16A9> <16E1> -<16E2> <16EE> -<16EF> <16F0> -<16F1> <16F1> -<16F2> <16F2> -<16F3> <16F6> -<16F7> <16F7> -<16F8> <16FE> -<16FF> <16FF> -<1700> <1707> -<1708> <1708> -<1709> <1709> -<170A> <170C> -<170D> <172F> -<1730> <1730> -<1731> <1732> -<1733> <1734> -<1735> <1739> -<173A> <173A> -<173B> <173B> -<173C> <173E> -<173F> <1741> -<1742> <1748> -<1749> <1749> -<174A> <174B> -<174C> <1752> -<1753> <1755> -<1756> <1757> -<1758> <1759> -<175A> <175B> -<175C> <175C> -<175D> <175E> -<175F> <175F> -<1760> <1760> -<1761> <1762> -<1763> <1763> -<1764> <1765> -<1766> <1766> -<1767> <176B> -<176C> <176F> -<1770> <1770> -<1771> <1771> -<1772> <1772> -<1773> <1774> -<1775> <1782> -<1783> <1783> -<1784> <1787> -<1788> <178A> -<178B> <178B> -<178C> <178C> -<178D> <178E> -<178F> <1799> -<179A> <179D> -<179E> <179E> -<179F> <17AE> -<17AF> <17B5> -<17B6> <17FB> -<17FC> <17FF> -<1800> <1802> -<1803> <1807> -<1808> <1808> -<1809> <1809> -<180A> <180B> -<180C> <1811> -<1812> <1815> -<1816> <1834> -<1835> <185E> -<185F> <1865> -<1866> <1885> -<1886> <18A8> -<18A9> <18B6> -<18B7> <18B8> -<18B9> <18BC> -<18BD> <18BD> -endbfrange -100 beginbfrange -<18BE> <18C0> -<18C1> <18C2> -<18C3> <18C3> -<18C4> <18D2> -<18D3> <18D3> -<18D4> <18D6> -<18D7> <18D9> -<18DA> <18DD> -<18DE> <18DF> -<18E0> <18E4> -<18E5> <18FF> -<1900> <190A> -<190B> <190F> -<1910> <1911> -<1912> <1915> -<1916> <1917> -<1918> <1918> -<1919> <1919> -<191A> <191A> -<191B> <191F> -<1920> <1922> -<1923> <1924> -<1925> <192E> -<192F> <192F> -<1930> <1935> -<1936> <1937> -<1938> <1939> -<193A> <193B> -<193C> <1949> -<194A> <194A> -<194B> <194E> -<194F> <1998> -<1999> <19A8> -<19A9> <19E2> -<19E3> <19FF> -<1A00> <1A05> -<1A06> <1A63> -<1A64> <1AC1> -<1AC2> <1AFF> -<1B00> <1B1F> -<1B20> <1B3B> -<1B3C> <1B60> -<1B61> <1B61> -<1B62> <1B77> -<1B78> <1B7B> -<1B7C> <1B8B> -<1B8C> <1B8C> -<1B8D> <1B8D> -<1B8E> <1BAA> -<1BAB> <1BAB> -<1BAC> <1BD8> -<1BD9> <1BDE> -<1BDF> <1BFF> -<1C00> <1C24> -<1C25> <1C34> -<1C35> <1C92> -<1C93> <1CC9> -<1CCA> <1CCA> -<1CCB> <1CE5> -<1CE6> <1CE6> -<1CE7> <1CEE> -<1CEF> <1CFF> -<1D00> <1D05> -<1D06> <1D14> -<1D15> <1D1E> -<1D1F> <1D49> -<1D4A> <1D5D> -<1D5E> <1D5E> -<1D5F> <1D83> -<1D84> <1D93> -<1D94> <1D94> -<1D95> <1D97> -<1D98> <1DA5> -<1DA6> <1DB6> -<1DB7> <1DB7> -<1DB8> <1DFF> -<1E00> <1E03> -<1E04> <1E1C> -<1E1D> <1E1D> -<1E1E> <1E46> -<1E47> <1E5E> -<1E5F> <1E66> -<1E67> <1E67> -<1E68> <1EBC> -<1EBD> <1EC4> -<1EC5> <1EDB> -<1EDC> <1EDC> -<1EDD> <1EFF> -<1F00> <1F19> -<1F1A> <1F33> -<1F34> <1F34> -<1F35> <1F77> -<1F78> <1F79> -<1F7A> <1F7A> -<1F7B> <1F7D> -<1F7E> <1F7E> -<1F7F> <1F8A> -<1F8B> <1F8B> -<1F8C> <1F8C> -<1F8D> <1F8E> -endbfrange -100 beginbfrange -<1F8F> <1F8F> -<1F90> <1F90> -<1F91> <1F96> -<1F97> <1F97> -<1F98> <1F98> -<1F99> <1F99> -<1F9A> <1F9D> -<1F9E> <1FFC> <20> -<2080> <2080> -<2475> <248E> <8141> -<248F> <24A8> <8161> -<24A9> <24FF> <8181> -<2500> <2526> <81D8> -<2527> <2540> <8241> -<2541> <255A> <8261> -<255B> <25D8> <8281> -<25D9> <25F2> <8341> -<25F3> <25FF> <8361> -<2600> <260C> <836E> -<260D> <268A> <8381> -<268B> <26A4> <8441> -<26A5> <26BE> <8461> -<26BF> <26FF> <8481> -<2700> <273C> <84C2> -<273D> <2756> <8541> -<2757> <2770> <8561> -<2771> <27EE> <8581> -<27EF> <27FF> <8641> -<2800> <2808> <8652> -<2809> <2822> <8661> -<2823> <28A0> <8681> -<28A1> <28BA> <8741> -<28BB> <28D4> <8761> -<28D5> <28FF> <8781> -<2900> <2952> <87AC> -<2953> <296C> <8841> -<296D> <2986> <8861> -<2987> <29FF> <8881> -<2A00> <2A04> <88FA> -<2A05> <2A1E> <8941> -<2A1F> <2A38> <8961> -<2A39> <2AB6> <8981> -<2AB7> <2AD0> <8A41> -<2AD1> <2AEA> <8A61> -<2AEB> <2AFF> <8A81> -<2B00> <2B68> <8A96> -<2B69> <2B82> <8B41> -<2B83> <2B9C> <8B61> -<2B9D> <2BFF> <8B81> -<2C00> <2C1A> <8BE4> -<2C1B> <2C34> <8C41> -<2C35> <2C4E> <8C61> -<2C4F> <2CCC> <8C81> -<2CCD> <2CE6> <8D41> -<2CE7> <2CFF> <8D61> -<2D00> <2D00> <8D7A> -<2D01> <2D7E> <8D81> -<2D7F> <2D98> <8E41> -<2D99> <2DB2> <8E61> -<2DB3> <2DFF> <8E81> -<2E00> <2E30> <8ECE> -<2E31> <2E4A> <8F41> -<2E4B> <2E64> <8F61> -<2E65> <2EE2> <8F81> -<2EE3> <2EFC> <9041> -<2EFD> <2EFF> <9061> -<2F00> <2F16> <9064> -<2F17> <2F94> <9081> -<2F95> <2FAE> <9141> -<2FAF> <2FC8> <9161> -<2FC9> <2FFF> <9181> -<3000> <3046> <91B8> -<3047> <3060> <9241> -<3061> <307A> <9261> -<307B> <30F8> <9281> -<30F9> <30FF> <9341> -<3100> <3112> <9348> -<3113> <312C> <9361> -<312D> <31AA> <9381> -<31AB> <31C4> <9441> -<31C5> <31DE> <9461> -<31DF> <31FF> <9481> -<3200> <325C> <94A2> -<325D> <3276> <9541> -<3277> <3290> <9561> -<3291> <32FF> <9581> -<3300> <330E> <95F0> -<330F> <3328> <9641> -<3329> <3342> <9661> -<3343> <33C0> <9681> -<33C1> <33DA> <9741> -<33DB> <33F4> <9761> -<33F5> <33FF> <9781> -<3400> <3472> <978C> -<3473> <348C> <9841> -<348D> <34A6> <9861> -<34A7> <34FF> <9881> -<3500> <3524> <98DA> -<3525> <353E> <9941> -<353F> <3558> <9961> -endbfrange -100 beginbfrange -<3559> <35D6> <9981> -<35D7> <35F0> <9A41> -<35F1> <35FF> <9A61> -<3600> <360A> <9A70> -<360B> <3688> <9A81> -<3689> <36A2> <9B41> -<36A3> <36BC> <9B61> -<36BD> <36FF> <9B81> -<3700> <373A> <9BC4> -<373B> <3754> <9C41> -<3755> <376E> <9C61> -<376F> <37EC> <9C81> -<37ED> <37FF> <9D41> -<3800> <3806> <9D54> -<3807> <3820> <9D61> -<3821> <389E> <9D81> -<389F> <38B8> <9E41> -<38B9> <38D2> <9E61> -<38D3> <38FF> <9E81> -<3900> <3950> <9EAE> -<3951> <396A> <9F41> -<396B> <3984> <9F61> -<3985> <39FF> <9F81> -<3A00> <3A02> <9FFC> -<3A03> <3A1C> -<3A1D> <3A36> -<3A37> <3AB4> -<3AB5> <3ACE> -<3ACF> <3AE8> -<3AE9> <3AFF> -<3B00> <3B08> -<3B09> <3B22> -<3B23> <3B3C> -<3B3D> <3B5C> -<3B5D> <3B76> -<3B77> <3B90> -<3B91> <3BB0> -<3BB1> <3BCA> -<3BCB> <3BE4> -<3BE5> <3BFF> -<3C00> <3C04> -<3C05> <3C1E> -<3C1F> <3C38> -<3C39> <3C58> -<3C59> <3C72> -<3C73> <3C8C> -<3C8D> <3CAC> -<3CAD> <3CC6> -<3CC7> <3CE0> -<3CE1> <3CFF> -<3D00> <3D00> -<3D01> <3D1A> -<3D1B> <3D34> -<3D35> <3D54> -<3D55> <3D6E> -<3D6F> <3D88> -<3D89> <3DA8> -<3DA9> <3DC2> -<3DC3> <3DDC> -<3DDD> <3DFC> -<3DFD> <3DFF> -<3E00> <3E16> -<3E17> <3E30> -<3E31> <3E50> -<3E51> <3E6A> -<3E6B> <3E84> -<3E85> <3EA4> -<3EA5> <3EBE> -<3EBF> <3ED8> -<3ED9> <3EF8> -<3EF9> <3EFF> -<3F00> <3F12> -<3F13> <3F2C> -<3F2D> <3F4C> -<3F4D> <3F66> -<3F67> <3F80> -<3F81> <3FA0> -<3FA1> <3FBA> -<3FBB> <3FD4> -<3FD5> <3FF4> -<3FF5> <3FFF> -<4000> <400E> -<400F> <4028> -<4029> <4048> -<4049> <4062> -<4063> <407C> -<407D> <409C> -<409D> <40B6> -<40B7> <40D0> -<40D1> <40F0> -<40F1> <40FF> -<4100> <410A> -<410B> <4124> -<4125> <4144> -<4145> <415E> -<415F> <4178> -<4179> <4198> -<4199> <41B2> -<41B3> <41CC> -<41CD> <41EC> -endbfrange -51 beginbfrange -<41ED> <41FF> -<4200> <4206> -<4207> <4220> -<4221> <4240> -<4241> <425A> -<425B> <4274> -<4275> <4294> -<4295> <42AE> -<42AF> <42C8> -<42C9> <42E8> -<42E9> <42FF> -<4300> <4302> -<4303> <431C> -<431D> <433C> -<433D> <4356> -<4357> <4370> -<4371> <4390> -<4391> <43AA> -<43AB> <43C4> -<43C5> <43E4> -<43E5> <43FE> -<43FF> <43FF> -<4400> <4418> -<4419> <4438> -<4439> <4452> -<4453> <446C> -<446D> <448C> -<448D> <44A6> -<44A7> <44C0> -<44C1> <44E0> -<44E1> <44FA> -<44FB> <44FF> -<4500> <4514> -<4515> <4534> -<4535> <454E> -<454F> <4568> -<4569> <4588> -<4589> <45A2> -<45A3> <45BC> -<45BD> <45DC> -<45DD> <45F6> -<45F7> <45FF> -<4600> <4610> -<4611> <4630> -<4631> <464A> -<464B> <4664> -<4665> <4684> -<4685> <469E> -<469F> <46B8> -<46B9> <46D8> -<46D9> <46EA> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Korea1-KSCpc-EUC b/Resources/cmap/Adobe-Korea1-KSCpc-EUC deleted file mode 100644 index 66f7cad15ac..00000000000 --- a/Resources/cmap/Adobe-Korea1-KSCpc-EUC +++ /dev/null @@ -1,529 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Adobe-Korea1-KSCpc-EUC) -%%Title: (Adobe-Korea1-KSCpc-EUC Adobe KSCpc-EUC 1) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin -/Registry (Adobe) def -/Ordering (Adobe_Korea1_KSCpc_EUC) def -/Supplement 1 def -end def - -/CMapName /Adobe-Korea1-KSCpc-EUC def - -/CMapVersion 4.002 def -/CMapType 1 def - -/XUID [1 10 25335 1212] def - -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -1 beginbfrange -<0000> <0000> <20> -endbfrange - -% Adobe-Korea1 -% KSCpc-EUC (Macintosh) -100 beginbfrange -<0001> <005F> <20> -<0060> <0062> <81> -<0063> <0064> -<0065> <0065> -<0068> <00C2> -<00C3> <00FF> -<0100> <0107> -<0108> <0165> -<0166> <0198> -<0199> <01C2> -<01C3> <01CC> -<01CD> <01D6> -<01D7> <01EE> -<01EF> <01FF> -<0200> <0206> -<0207> <024A> -<024B> <0299> -<029A> <029D> -<029E> <029E> -<029F> <02A6> -<02A7> <02F4> -<02F5> <02FF> -<0300> <0352> -<0353> <03A5> -<03A6> <03FB> -<03FC> <03FF> -<0400> <041C> -<041D> <043D> -<043E> <049B> -<049C> <04F9> -<04FA> <04FF> -<0500> <0557> -<0558> <05B5> -<05B6> <05FF> -<0600> <0613> -<0614> <0671> -<0672> <06CF> -<06D0> <06FF> -<0700> <072D> -<072E> <078B> -<078C> <07E9> -<07EA> <07FF> -<0800> <0847> -<0848> <08A5> -<08A6> <08FF> -<0900> <0903> -<0904> <0961> -<0962> <09BF> -<09C0> <09FF> -<0A00> <0A1D> -<0A1E> <0A7B> -<0A7C> <0AD9> -<0ADA> <0AFF> -<0B00> <0B37> -<0B38> <0B95> -<0B96> <0BF3> -<0BF4> <0BFF> -<0C00> <0C51> -<0C52> <0CAF> -<0CB0> <0CFF> -<0D00> <0D0D> -<0D0E> <0D6B> -<0D6C> <0DC9> -<0DCA> <0DF8> -<0DF9> <0DFD> -<0DFE> <0DFF> -<0E00> <0E0D> -<0E0E> <0E24> -<0E25> <0E5D> -<0E5E> <0E5E> -<0E5F> <0E82> -<0E83> <0EB0> -<0EB1> <0EC8> -<0EC9> <0EDE> -<0EDF> <0EEA> -<0EEB> <0EFF> -<0F00> <0F3B> -<0F3C> <0F95> -<0F96> <0F98> -<0F99> <0F99> -<0F9A> <0FAE> -<0FAF> <0FC5> -<0FC6> <0FD1> -<0FD2> <0FF2> -<0FF3> <0FFF> -<1000> <1013> -<1014> <1014> -<1015> <1022> -<1023> <1023> -<1024> <1025> -<1026> <1027> -<1028> <1029> -<102A> <102A> -<102B> <102B> -<102C> <102C> -<102D> <102D> -<102E> <102E> -<102F> <1031> -<1032> <1034> -<1035> <1035> -endbfrange -100 beginbfrange -<1036> <1036> -<1037> <1039> -<103A> <103A> -<103B> <103B> -<103C> <103C> -<103D> <103E> -<103F> <1049> -<104A> <104C> -<104D> <104D> -<104E> <104E> -<104F> <104F> -<1050> <1052> -<1053> <1053> -<1054> <1054> -<1055> <1058> -<1059> <1059> -<105A> <105F> -<1060> <10BD> -<10BE> <10FF> -<1100> <1102> -<1103> <1115> -<1116> <1116> -<1117> <1117> -<1118> <111D> -<111E> <1120> -<1121> <1121> -<1122> <1122> -<1123> <1126> -<1127> <1127> -<1128> <1129> -<112A> <112B> -<112C> <112C> -<112D> <112E> -<112F> <112F> -<1130> <1132> -<1133> <1133> -<1134> <1135> -<1136> <1137> -<1138> <1138> -<1139> <1139> -<113A> <113B> -<113C> <113F> -<1140> <1142> -<1143> <1143> -<1144> <1144> -<1145> <1147> -<1148> <1148> -<1149> <1174> -<1175> <118B> -<118C> <119E> -<119F> <119F> -<11A0> <11A0> -<11A1> <11A2> -<11A3> <11A4> -<11A5> <11A5> -<11A6> <11AA> -<11AB> <11AB> -<11AC> <11AC> -<11AD> <11AE> -<11AF> <11AF> -<11B0> <11B5> -<11B6> <11B6> -<11B7> <11B9> -<11BA> <11BC> -<11BD> <11BE> -<11BF> <11C0> -<11C1> <11C2> -<11C3> <11C3> -<11C4> <11C5> -<11C6> <11C6> -<11C7> <11D0> -<11D1> <11D3> -<11D4> <11D4> -<11D5> <11D5> -<11D6> <11D9> -<11DA> <11DA> -<11DB> <11DC> -<11DD> <11DF> -<11E0> <11E0> -<11E1> <11FA> -<11FB> <11FB> -<11FC> <11FF> -<1200> <1200> -<1201> <1202> -<1203> <1204> -<1205> <1212> -<1213> <122C> -<122D> <128A> -<128B> <12E8> -<12E9> <12FF> -<1300> <1346> -<1347> <136A> -<136B> <1388> -<1389> <13A2> -<13A3> <13A6> -<13A7> <13FF> -<1400> <1403> -<1404> <141E> -<141F> <141F> -<1420> <1432> -endbfrange -100 beginbfrange -<1433> <1450> -<1451> <145A> -<145B> <14B5> -<14B6> <14B6> -<14B7> <14C8> -<14C9> <14F5> -<14F6> <14F6> -<14F7> <14F7> -<14F8> <14FB> -<14FC> <14FF> -<1500> <1511> -<1512> <1561> -<1562> <156C> -<156D> <156D> -<156E> <156E> -<156F> <157A> -<157B> <15AF> -<15B0> <15B0> -<15B1> <15B9> -<15BA> <15CA> -<15CB> <15CF> -<15D0> <15D0> -<15D1> <15FF> -<1600> <1628> -<1629> <167C> -<167D> <1685> -<1686> <168C> -<168D> <16A7> -<16A8> <16A8> -<16A9> <16E1> -<16E2> <16EE> -<16EF> <16F0> -<16F1> <16F1> -<16F2> <16F2> -<16F3> <16F6> -<16F7> <16F7> -<16F8> <16FE> -<16FF> <16FF> -<1700> <1707> -<1708> <1708> -<1709> <1709> -<170A> <170C> -<170D> <172F> -<1730> <1730> -<1731> <1732> -<1733> <1734> -<1735> <1739> -<173A> <173A> -<173B> <173B> -<173C> <173E> -<173F> <1741> -<1742> <1748> -<1749> <1749> -<174A> <174B> -<174C> <1752> -<1753> <1755> -<1756> <1757> -<1758> <1759> -<175A> <175B> -<175C> <175C> -<175D> <175E> -<175F> <175F> -<1760> <1760> -<1761> <1762> -<1763> <1763> -<1764> <1765> -<1766> <1766> -<1767> <176B> -<176C> <176F> -<1770> <1770> -<1771> <1771> -<1772> <1772> -<1773> <1774> -<1775> <1782> -<1783> <1783> -<1784> <1787> -<1788> <178A> -<178B> <178B> -<178C> <178C> -<178D> <178E> -<178F> <1799> -<179A> <179D> -<179E> <179E> -<179F> <17AE> -<17AF> <17B5> -<17B6> <17FB> -<17FC> <17FF> -<1800> <1802> -<1803> <1807> -<1808> <1808> -<1809> <1809> -<180A> <180B> -<180C> <1811> -<1812> <1815> -<1816> <1834> -<1835> <185E> -<185F> <1865> -<1866> <1885> -<1886> <18A8> -<18A9> <18B6> -endbfrange -100 beginbfrange -<18B7> <18B8> -<18B9> <18BC> -<18BD> <18BD> -<18BE> <18C0> -<18C1> <18C2> -<18C3> <18C3> -<18C4> <18D2> -<18D3> <18D3> -<18D4> <18D6> -<18D7> <18D9> -<18DA> <18DD> -<18DE> <18DF> -<18E0> <18E4> -<18E5> <18FF> -<1900> <190A> -<190B> <190F> -<1910> <1911> -<1912> <1915> -<1916> <1917> -<1918> <1918> -<1919> <1919> -<191A> <191A> -<191B> <191F> -<1920> <1922> -<1923> <1924> -<1925> <192E> -<192F> <192F> -<1930> <1935> -<1936> <1937> -<1938> <1939> -<193A> <193B> -<193C> <1949> -<194A> <194A> -<194B> <194E> -<194F> <1998> -<1999> <19A8> -<19A9> <19E2> -<19E3> <19FF> -<1A00> <1A05> -<1A06> <1A63> -<1A64> <1AC1> -<1AC2> <1AFF> -<1B00> <1B1F> -<1B20> <1B3B> -<1B3C> <1B60> -<1B61> <1B61> -<1B62> <1B77> -<1B78> <1B7B> -<1B7C> <1B8B> -<1B8C> <1B8C> -<1B8D> <1B8D> -<1B8E> <1BAA> -<1BAB> <1BAB> -<1BAC> <1BD8> -<1BD9> <1BDE> -<1BDF> <1BFF> -<1C00> <1C24> -<1C25> <1C34> -<1C35> <1C92> -<1C93> <1CC9> -<1CCA> <1CCA> -<1CCB> <1CE5> -<1CE6> <1CE6> -<1CE7> <1CEE> -<1CEF> <1CFF> -<1D00> <1D05> -<1D06> <1D14> -<1D15> <1D1E> -<1D1F> <1D49> -<1D4A> <1D5D> -<1D5E> <1D5E> -<1D5F> <1D83> -<1D84> <1D93> -<1D94> <1D94> -<1D95> <1D97> -<1D98> <1DA5> -<1DA6> <1DB6> -<1DB7> <1DB7> -<1DB8> <1DFF> -<1E00> <1E03> -<1E04> <1E1C> -<1E1D> <1E1D> -<1E1E> <1E46> -<1E47> <1E5E> -<1E5F> <1E66> -<1E67> <1E67> -<1E68> <1EBC> -<1EBD> <1EC4> -<1EC5> <1EDB> -<1EDC> <1EDC> -<1EDD> <1EFF> -<1F00> <1F19> -<1F1A> <1F33> -<1F34> <1F34> -<1F35> <1F77> -<1F78> <1F79> -<1F7A> <1F7A> -<1F7B> <1F7D> -<1F7E> <1F7E> -<1F7F> <1F8A> -endbfrange -54 beginbfrange -<1F8B> <1F8B> -<1F8C> <1F8C> -<1F8D> <1F8E> -<1F8F> <1F8F> -<1F90> <1F90> -<1F91> <1F96> -<1F97> <1F97> -<1F98> <1F98> -<1F99> <1F99> -<1F9A> <1F9D> -<1FFF> <1FFF> -<2000> <203B> -<203C> <2055> -<2056> <205A> -<205B> <205C> -<205D> <2068> -<2069> <2081> -<2082> <20BE> -<20BF> <20DD> -<20DE> <20FF> -<2100> <211A> -<211B> <2139> -<213A> <2176> -<2177> <2181> -<2182> <2186> -<2187> <218A> -<218B> <21C7> -<21C8> <21D1> -<21D2> <21D8> -<21D9> <21DE> -<21DF> <21E0> -<21E1> <21FA> -<21FB> <21FF> -<2200> <2237> -<2238> <2256> -<2257> <2265> -<2266> <22A2> -<22A3> <22C1> -<22C2> <22F5> -<22F6> <22FF> -<2300> <2332> -<2333> <2351> -<2352> <235C> -<235D> <2399> -<239A> <23B8> -<23B9> <23BC> -<23BD> <23F9> -<23FA> <23FF> -<2400> <2410> -<2411> <241F> -<2420> <2424> -<2425> <2461> -<2462> <2471> -<2472> <2474> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Adobe-Korea1-UCS2 b/Resources/cmap/Adobe-Korea1-UCS2 deleted file mode 100644 index cf15d612e50..00000000000 --- a/Resources/cmap/Adobe-Korea1-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Adobe-Korea1-UCS2) %%Title: (Adobe-Korea1-UCS2 Adobe Korea1 2) %%Version: 5.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Adobe_Korea1_UCS2) def /Supplement 2 def end def /CMapName /Adobe-Korea1-UCS2 def /CMapVersion 5.000 def /CMapType 1 def /XUID [1 10 25335 1212] def /WMode 0 def 1 begincodespacerange <0000> endcodespacerange 100 beginbfchar <0000> <0060> <20A9> <0061> <2010> <0062> <00A9> <0063> <2122> <0064> <22EF> <0068> <00B7> <006B> <00A8> <006C> <3003> <006F> <2016> <0070> <0071> <223C> <0082> <00B1> <0083> <00D7> <0084> <00F7> <0085> <2260> <0088> <221E> <0089> <2234> <008A> <00B0> <008D> <2103> <008E> <212B> <0091> <0092> <2642> <0093> <2640> <0094> <2220> <0095> <22A5> <0096> <2312> <0097> <2202> <0098> <2207> <0099> <2261> <009A> <2252> <009B> <00A7> <009C> <203B> <009D> <2606> <009E> <2605> <009F> <25CB> <00A0> <25CF> <00A1> <25CE> <00A2> <25C7> <00A3> <25C6> <00A4> <25A1> <00A5> <25A0> <00A6> <25B3> <00A7> <25B2> <00A8> <25BD> <00A9> <25BC> <00AA> <2192> <00AF> <3013> <00B2> <221A> <00B3> <223D> <00B4> <221D> <00B5> <2235> <00B8> <2208> <00B9> <220B> <00BE> <222A> <00BF> <2229> <00C2> <00C3> <21D2> <00C4> <21D4> <00C5> <2200> <00C6> <2203> <00C7> <00B4> <00C8> <02DC> <00C9> <02C7> <00CA> <02D8> <00CB> <02DD> <00CC> <02DA> <00CD> <02D9> <00CE> <00B8> <00CF> <02DB> <00D0> <00A1> <00D1> <00BF> <00D2> <2236> <00D3> <222E> <00D4> <2211> <00D5> <220F> <00D6> <00A4> <00D7> <2109> <00D8> <2030> <00D9> <25C1> <00DA> <25C0> <00DB> <25B7> <00DC> <25B6> <00DD> <2664> <00E0> <2665> <00E1> <2667> <00E2> <2663> <00E3> <2299> <00E4> <25C8> <00E5> <25A3> <00E8> <2592> <00EB> <25A8> <00EC> <25A7> <00ED> <25A6> <00EE> <25A9> <00EF> <2668> <00F0> <260F> <00F1> <260E> <00F2> <261C> <00F3> <261E> endbfchar 100 beginbfchar <00F4> <00B6> <00F7> <2195> <00F8> <2197> <00F9> <2199> <00FA> <2196> <00FB> <2198> <00FC> <266D> <00FF> <266C> <0100> <327F> <0101> <321C> <0102> <2116> <0103> <33C7> <0104> <2122> <0105> <33C2> <0106> <33D8> <0107> <2121> <0143> <0165> <0207> <2500> <0208> <2502> <0209> <250C> <020A> <2510> <020B> <2518> <020C> <2514> <020D> <251C> <020E> <252C> <020F> <2524> <0210> <2534> <0211> <253C> <0212> <2501> <0213> <2503> <0214> <250F> <0215> <2513> <0216> <251B> <0217> <2517> <0218> <2523> <0219> <2533> <021A> <252B> <021B> <253B> <021C> <254B> <021D> <2520> <021E> <252F> <021F> <2528> <0220> <2537> <0221> <253F> <0222> <251D> <0223> <2530> <0224> <2525> <0225> <2538> <0226> <2542> <0227> <2512> <0228> <2511> <0229> <251A> <022A> <2519> <022B> <2516> <022C> <2515> <022D> <250E> <022E> <250D> <024E> <2113> <024F> <3398> <0250> <33C4> <025F> <33CA> <0263> <33CF> <0266> <33C8> <0283> <2126> <0289> <33D6> <028A> <33C5> <028E> <33DB> <0293> <33DD> <0294> <33D0> <0295> <33D3> <0296> <33C3> <0297> <33C9> <0298> <33DC> <0299> <33C6> <029A> <00C6> <029B> <00D0> <029C> <00AA> <029D> <0126> <029E> <0132> <029F> <013F> <02A0> <0141> <02A1> <00D8> <02A2> <0152> <02A3> <00BA> <02A4> <00DE> <02A5> <0166> <02A6> <014A> <02EC> <00BD> <02EF> <00BC> <02F0> <00BE> <02F5> <00E6> <02F6> <0111> <02F7> <00F0> <02F8> <0127> <02F9> <0131> <02FA> <0133> <02FB> <0138> <02FC> <0140> <02FD> <0142> endbfchar 100 beginbfchar <02FE> <00F8> <02FF> <0153> <0300> <00DF> <0301> <00FE> <0302> <0167> <0303> <014B> <0304> <0149> <034A> <00B9> <034D> <2074> <034E> <207F> <0402> <0401> <0423> <0451> <0440> <0452> <0453> <045B> <045C> <045D> <045E> <045F> <0460> <0461> <0464> <0467> <0472> <0473> <047C> <0484> <0485> <0486> <0487> <0488> <0489> <048C> <048F> <0490> <0494> <0499> <049A> <049B> <049E> <049F> <04A0> <04A1> <04A2> <04A3> <04A8> <04A9> <04AC> <04AD> <04AE> <04AF> <04B0> <04B1> <04B2> <04B5> <04BD> <04C2> <04C3> <04C6> <04C7> <04CA> <04CB> <04CE> <04CF> <04D0> <04D1> <04D4> <04DA> <04DB> <04DC> <04DF> <04E2> <04E5> <04E8> <04EC> <04ED> <04EE> <04F4> <04F7> <04F8> <0500> <0504> <0505> <050D> <050E> <050F> <0510> <0511> <0512> <0513> <0516> <0517> <051A> <051B> <051C> <051F> <0525> <052A> <052B> endbfchar 100 beginbfchar <052C> <052D> <0530> <0531> <0534> <0535> <0539> <053C> <053D> <0542> <0543> <0546> <0547> <0548> <0549> <054C> <054F> <0550> <0551> <0552> <0556> <0557> <0558> <055B> <055C> <055F> <0560> <0564> <0570> <0574> <0575> <057D> <057E> <057F> <0580> <0585> <0590> <0591> <0599> <059A> <059F> <05A0> <05A1> <05A4> <05A5> <05A6> <05A9> <05AA> <05AE> <05AF> <05B0> <05B1> <05B2> <05B3> <05B6> <05B9> <05BA> <05BB> <05BC> <05BD> <05C0> <05C5> <05C6> <05C7> <05C8> <05C9> <05CA> <05CB> <05CC> <05D1> <05D4> <05D7> <05DD> <05E0> <05E1> <05E2> <05E3> <05E6> <05E7> <05E8> <05EB> <05EC> <05ED> <05F1> <05FF> <0602> <0603> <0609> <060D> <0614> <0615> <0616> <0617> <061A> <061B> <0621> <0622> <0623> <0626> <0627> endbfchar 100 beginbfchar <062A> <062D> <062E> <0631> <0632> <0633> <0634> <0635> <0636> <0637> <0638> <0639> <063A> <063B> <063C> <063F> <0640> <0643> <0644> <0647> <0648> <0649> <064A> <064B> <064C> <064D> <064E> <064F> <0650> <0651> <0652> <0653> <0654> <0655> <0656> <0657> <065A> <065D> <0660> <0661> <0662> <0665> <0670> <0671> <067A> <067B> <0683> <0684> <068F> <0690> <0696> <0697> <069A> <069B> <069C> <069D> <069E> <069F> <06A0> <06A1> <06A4> <06A5> <06A8> <06A9> <06AA> <06AB> <06AC> <06AF> <06B2> <06B7> <06B8> <06B9> <06BA> <06BD> <06BE> <06BF> <06C2> <06C3> <06C6> <06C7> <06D2> <06D3> <06DB> <06DC> <06DD> <06E0> <06E1> <06EA> <06EB> <06EE> <06EF> <06F2> <06F3> <06F9> <06FA> <06FB> <06FC> <06FF> <0700> <0703> endbfchar 100 beginbfchar <0704> <0705> <0706> <0707> <0708> <0709> <070A> <070B> <070E> <070F> <0710> <0711> <0712> <0713> <0714> <0715> <0718> <0719> <071C> <071D> <071E> <071F> <0720> <0723> <0724> <0725> <0726> <0727> <072A> <072B> <072E> <072F> <0732> <0733> <0736> <073D> <073E> <0741> <0742> <0745> <074D> <0750> <0754> <0755> <075E> <075F> <0762> <0763> <0764> <0767> <076D> <076E> <0776> <0777> <077B> <077C> <0781> <0782> <0785> <0786> <0787> <0788> <078B> <078C> <078D> <078E> <078F> <0790> <0791> <0792> <0793> <0794> <0795> <0799> <07A0> <07A1> <07A2> <07A5> <07A6> <07A7> <07A8> <07A9> <07AA> <07AB> <07AC> <07AD> <07AE> <07AF> <07B0> <07B1> <07B2> <07B3> <07B4> <07B5> <07B6> <07B9> <07BC> <07C2> <07C3> <07D0> endbfchar 100 beginbfchar <07D1> <07D2> <07D5> <07D6> <07DC> <07DF> <07E0> <07E3> <07E6> <07E9> <07EE> <07F8> <07F9> <07FA> <07FE> <07FF> <0800> <0804> <0805> <0808> <0809> <080A> <080B> <080C> <080D> <080E> <0811> <0812> <0815> <0816> <0819> <0820> <0821> <0824> <0825> <0826> <0827> <082A> <082B> <082C> <082D> <082E> <082F> <0830> <0831> <0832> <0835> <0836> <0839> <083C> <083D> <083E> <0841> <0847> <0848> <0849> <0852> <0853> <085B> <085E> <0861> <0865> <0866> <0870> <0871> <0874> <0875> <0876> <0877> <087A> <087B> <087C> <087D> <087E> <087F> <0880> <0881> <0882> <0883> <0888> <0889> <088C> <088D> <089B> <089E> <089F> <08A7> <08A8> <08AB> <08AC> <08AD> <08AE> <08AF> <08B0> <08B1> <08C0> <08C3> <08C4> <08CC> <08CD> endbfchar 100 beginbfchar <08D3> <08D4> <08D5> <08D6> <08DA> <08DB> <08DC> <08DF> <08E0> <08E1> <08E4> <08E5> <08E6> <08E7> <08E8> <08E9> <08EA> <08ED> <08EE> <08EF> <08F2> <08F5> <08F6> <08F9> <08FA> <08FD> <0902> <0903> <0904> <0907> <0908> <090B> <090C> <090D> <090E> <0911> <0912> <0915> <0916> <0919> <091A> <091B> <091C> <091F> <0924> <0925> <0928> <092E> <092F> <0930> <0935> <093D> <093E> <0943> <0946> <0947> <0948> <094D> <094E> <094F> <0950> <0953> <0956> <0959> <095C> <095D> <095E> <095F> <0960> <0961> <0962> <0965> <0968> <0969> <096C> <096D> <096E> <096F> <0970> <0971> <0972> <0975> <0976> <0977> <097B> <097C> <097D> <097E> <0981> <0982> <0985> <0986> <0999> <099A> <09A2> <09A3> <09A4> <09A7> <09A8> <09A9> endbfchar 100 beginbfchar <09AC> <09AD> <09AE> <09BE> <09BF> <09C2> <09C3> <09C6> <09C7> <09CB> <09CC> <09D9> <09DA> <09E1> <09E5> <09E9> <09EA> <09EB> <09EE> <09EF> <09F7> <09F8> <09F9> <09FA> <09FD> <09FE> <09FF> <0A00> <0A01> <0A02> <0A05> <0A06> <0A09> <0A0A> <0A0D> <0A13> <0A14> <0A17> <0A18> <0A1F> <0A20> <0A23> <0A26> <0A27> <0A2A> <0A2B> <0A2E> <0A2F> <0A32> <0A33> <0A34> <0A37> <0A38> <0A39> <0A3C> <0A45> <0A46> <0A47> <0A48> <0A4B> <0A56> <0A59> <0A5D> <0A66> <0A67> <0A6F> <0A70> <0A71> <0A72> <0A73> <0A74> <0A75> <0A76> <0A79> <0A7A> <0A7B> <0A7E> <0A83> <0A84> <0A87> <0A88> <0A89> <0A8A> <0A8B> <0A90> <0A93> <0A94> <0A95> <0A98> <0A9F> <0AA0> <0AA1> <0AA2> <0AA3> <0AA6> <0AA7> <0AA8> <0AAB> <0AAC> <0AAF> endbfchar 100 beginbfchar <0AB0> <0AB3> <0AB9> <0ABA> <0ABB> <0ABC> <0ABD> <0AC0> <0AC1> <0AC4> <0AC5> <0AC6> <0AC7> <0AC8> <0ACB> <0ACC> <0ACF> <0AD0> <0AD3> <0AD6> <0AD9> <0AE0> <0AE1> <0AE2> <0AE3> <0AEB> <0AEC> <0AF2> <0AF3> <0AF4> <0AF7> <0AF8> <0AFE> <0AFF> <0B00> <0B01> <0B04> <0B05> <0B08> <0B09> <0B0A> <0B0D> <0B0E> <0B0F> <0B10> <0B11> <0B12> <0B13> <0B16> <0B19> <0B1A> <0B1D> <0B1E> <0B21> <0B22> <0B23> <0B24> <0B25> <0B26> <0B29> <0B2A> <0B32> <0B33> <0B34> <0B3D> <0B3E> <0B44> <0B45> <0B46> <0B47> <0B48> <0B49> <0B4C> <0B4D> <0B55> <0B56> <0B59> <0B5A> <0B5B> <0B5C> <0B5D> <0B5E> <0B5F> <0B60> <0B63> <0B64> <0B67> <0B68> <0B69> <0B6A> <0B6B> <0B6C> <0B6D> <0B6E> <0B6F> <0B72> <0B73> <0B74> <0B75> <0B78> endbfchar 100 beginbfchar <0B79> <0B7C> <0B7D> <0B7E> <0B7F> <0B80> <0B81> <0B82> <0B83> <0B84> <0B87> <0B88> <0B89> <0B8A> <0B8B> <0B8C> <0B8D> <0B90> <0B91> <0B94> <0B95> <0B98> <0B9E> <0B9F> <0BA2> <0BA3> <0BA6> <0BA7> <0BAA> <0BAB> <0BB3> <0BB6> <0BC0> <0BC1> <0BC4> <0BC5> <0BC6> <0BC7> <0BC8> <0BCE> <0BD1> <0BD2> <0BD5> <0BD6> <0BD9> <0BDA> <0BDB> <0BDC> <0BDD> <0BDE> <0BDF> <0BE0> <0BE1> <0BE4> <0BE5> <0BE8> <0BE9> <0BEA> <0BEB> <0BEC> <0BED> <0BEE> <0BEF> <0BF2> <0BF3> <0BF6> <0BF7> <0BF8> <0BF9> <0BFA> <0BFB> <0BFE> <0BFF> <0C02> <0C05> <0C06> <0C09> <0C0A> <0C0D> <0C17> <0C18> <0C1E> <0C1F> <0C22> <0C23> <0C24> <0C2C> <0C2D> <0C30> <0C31> <0C32> <0C33> <0C34> <0C35> <0C36> <0C39> <0C3A> <0C3D> <0C3E> <0C3F> endbfchar 100 beginbfchar <0C40> <0C41> <0C42> <0C43> <0C44> <0C45> <0C46> <0C47> <0C4A> <0C4B> <0C4E> <0C4F> <0C50> <0C51> <0C52> <0C55> <0C56> <0C59> <0C5A> <0C5B> <0C5C> <0C5D> <0C5E> <0C61> <0C64> <0C67> <0C68> <0C69> <0C6A> <0C6F> <0C70> <0C73> <0C74> <0C78> <0C79> <0C7A> <0C80> <0C83> <0C84> <0C8E> <0C8F> <0C97> <0C98> <0C9B> <0C9C> <0C9D> <0C9E> <0C9F> <0CA4> <0CA5> <0CA6> <0CA7> <0CAA> <0CAB> <0CAE> <0CAF> <0CB0> <0CB1> <0CB2> <0CB3> <0CB4> <0CB5> <0CB6> <0CB7> <0CB8> <0CBB> <0CBE> <0CC1> <0CC2> <0CC3> <0CC4> <0CC5> <0CC6> <0CC7> <0CC8> <0CC9> <0CCA> <0CCB> <0CCC> <0CCD> <0CCE> <0CCF> <0CD0> <0CD1> <0CD2> <0CD5> <0CD8> <0CD9> <0CDC> <0CDD> <0CE0> <0CE1> <0CE2> <0CE5> <0CE6> <0CE9> <0CEA> <0CF0> <0CF1> <0CF4> endbfchar 100 beginbfchar <0CF5> <0CF6> <0CF9> <0CFA> <0CFD> <0CFE> <0CFF> <0D00> <0D01> <0D02> <0D05> <0D06> <0D0C> <0D0D> <0D0E> <0D0F> <0D12> <0D13> <0D14> <0D17> <0D18> <0D19> <0D1C> <0D1D> <0D1E> <0D1F> <0D22> <0D23> <0D24> <0D27> <0D28> <0D29> <0D2A> <0D2B> <0D2C> <0D2D> <0D2E> <0D2F> <0D30> <0D33> <0D34> <0D35> <0D36> <0D37> <0D38> <0D39> <0D3A> <0D3B> <0D3C> <0D3D> <0D40> <0D41> <0D42> <0D45> <0D46> <0D49> <0D4A> <0D4D> <0D4E> <0D4F> <0D50> <0D51> <0D54> <0D5B> <0D5C> <0D5D> <0D5E> <0D5F> <0D60> <0D63> <0D66> <0D67> <0D6A> <0D6B> <0D6C> <4F3D> <0D6D> <4F73> <0D6E> <5047> <0D6F> <50F9> <0D70> <52A0> <0D71> <53EF> <0D72> <5475> <0D73> <54E5> <0D74> <5609> <0D75> <5AC1> <0D76> <5BB6> <0D77> <6687> <0D7A> <67EF> <0D7B> <6B4C> <0D7C> <73C2> <0D7D> <75C2> <0D7E> <7A3C> <0D7F> <82DB> <0D80> <8304> <0D81> <8857> <0D82> <8888> <0D83> <8A36> <0D84> <8CC8> <0D85> <8DCF> <0D86> <8EFB> <0D87> <8FE6> endbfchar 100 beginbfchar <0D88> <99D5> <0D89> <523B> <0D8A> <5374> <0D8B> <5404> <0D8C> <606A> <0D8D> <6164> <0D8E> <6BBC> <0D8F> <73CF> <0D90> <811A> <0D91> <89BA> <0D92> <89D2> <0D93> <95A3> <0D94> <4F83> <0D95> <520A> <0D96> <58BE> <0D97> <5978> <0D98> <59E6> <0D99> <5E72> <0D9A> <5E79> <0D9B> <61C7> <0D9C> <63C0> <0D9D> <6746> <0D9E> <67EC> <0D9F> <687F> <0DA0> <6F97> <0DA1> <764E> <0DA2> <770B> <0DA3> <78F5> <0DA4> <7A08> <0DA5> <7AFF> <0DA6> <7C21> <0DA7> <809D> <0DA8> <826E> <0DA9> <8271> <0DAA> <8AEB> <0DAB> <9593> <0DAC> <4E6B> <0DAD> <559D> <0DAE> <66F7> <0DAF> <6E34> <0DB0> <78A3> <0DB1> <7AED> <0DB2> <845B> <0DB3> <8910> <0DB4> <874E> <0DB5> <97A8> <0DB6> <52D8> <0DB7> <574E> <0DB8> <582A> <0DB9> <5D4C> <0DBA> <611F> <0DBB> <61BE> <0DBC> <6221> <0DBD> <6562> <0DBE> <67D1> <0DBF> <6A44> <0DC0> <6E1B> <0DC1> <7518> <0DC2> <75B3> <0DC3> <76E3> <0DC4> <77B0> <0DC5> <7D3A> <0DC6> <90AF> <0DC9> <9F95> <0DCA> <5323> <0DCB> <5CAC> <0DCC> <7532> <0DCD> <80DB> <0DCE> <9240> <0DCF> <9598> <0DD0> <525B> <0DD1> <5808> <0DD2> <59DC> <0DD3> <5CA1> <0DD4> <5D17> <0DD5> <5EB7> <0DD6> <5F3A> <0DD7> <5F4A> <0DD8> <6177> <0DD9> <6C5F> <0DDA> <757A> <0DDB> <7586> <0DDC> <7CE0> <0DDD> <7D73> <0DDE> <7DB1> <0DDF> <7F8C> <0DE0> <8154> <0DE1> <8221> <0DE2> <8591> <0DE3> <8941> <0DE4> <8B1B> <0DE5> <92FC> <0DE6> <964D> <0DE7> <9C47> <0DE8> <4ECB> <0DE9> <4EF7> <0DEA> <500B> <0DEB> <51F1> <0DEC> <584F> <0DED> <6137> endbfchar 100 beginbfchar <0DEE> <613E> <0DEF> <6168> <0DF0> <6539> <0DF1> <69EA> <0DF2> <6F11> <0DF3> <75A5> <0DF4> <7686> <0DF5> <76D6> <0DF6> <7B87> <0DF7> <82A5> <0DF8> <84CB> <0DF9> <93A7> <0DFA> <958B> <0DFB> <5580> <0DFC> <5BA2> <0DFD> <5751> <0DFE> <7CB3> <0DFF> <7FB9> <0E00> <91B5> <0E01> <5028> <0E02> <53BB> <0E03> <5C45> <0E04> <5DE8> <0E05> <62D2> <0E06> <636E> <0E07> <64DA> <0E08> <64E7> <0E09> <6E20> <0E0A> <70AC> <0E0B> <795B> <0E0C> <8DDD> <0E0D> <8E1E> <0E0E> <907D> <0E0F> <9245> <0E10> <92F8> <0E11> <4E7E> <0E12> <4EF6> <0E13> <5065> <0E14> <5DFE> <0E15> <5EFA> <0E16> <6106> <0E17> <6957> <0E18> <8171> <0E19> <8654> <0E1A> <8E47> <0E1B> <9375> <0E1C> <9A2B> <0E1D> <4E5E> <0E1E> <5091> <0E1F> <6770> <0E20> <6840> <0E21> <5109> <0E22> <528D> <0E23> <5292> <0E24> <6AA2> <0E25> <77BC> <0E26> <9210> <0E27> <9ED4> <0E28> <52AB> <0E29> <602F> <0E2A> <8FF2> <0E2B> <5048> <0E2C> <61A9> <0E2D> <63ED> <0E2E> <64CA> <0E2F> <683C> <0E30> <6A84> <0E31> <6FC0> <0E32> <8188> <0E33> <89A1> <0E34> <9694> <0E35> <5805> <0E36> <727D> <0E37> <72AC> <0E38> <7504> <0E39> <7D79> <0E3A> <7E6D> <0E3B> <80A9> <0E3C> <898B> <0E3D> <8B74> <0E3E> <9063> <0E3F> <9D51> <0E40> <6289> <0E41> <6C7A> <0E42> <6F54> <0E43> <7D50> <0E44> <7F3A> <0E45> <8A23> <0E46> <517C> <0E47> <614A> <0E48> <7B9D> <0E49> <8B19> <0E4A> <9257> <0E4B> <938C> <0E4C> <4EAC> <0E4D> <4FD3> <0E4E> <501E> <0E4F> <50BE> <0E50> <5106> <0E51> <52C1> endbfchar 100 beginbfchar <0E52> <52CD> <0E53> <537F> <0E54> <5770> <0E55> <5883> <0E56> <5E9A> <0E57> <5F91> <0E58> <6176> <0E59> <61AC> <0E5A> <64CE> <0E5B> <656C> <0E5C> <666F> <0E5D> <66BB> <0E5E> <66F4> <0E5F> <6897> <0E60> <6D87> <0E61> <7085> <0E62> <70F1> <0E63> <749F> <0E64> <74A5> <0E65> <74CA> <0E66> <75D9> <0E67> <786C> <0E68> <78EC> <0E69> <7ADF> <0E6A> <7AF6> <0E6B> <7D45> <0E6C> <7D93> <0E6D> <8015> <0E6E> <803F> <0E6F> <811B> <0E70> <8396> <0E71> <8B66> <0E72> <8F15> <0E73> <9015> <0E74> <93E1> <0E75> <9803> <0E76> <9838> <0E77> <9A5A> <0E78> <9BE8> <0E79> <4FC2> <0E7A> <5553> <0E7B> <583A> <0E7C> <5951> <0E7D> <5B63> <0E7E> <5C46> <0E7F> <60B8> <0E80> <6212> <0E81> <6842> <0E82> <68B0> <0E83> <68E8> <0E84> <6EAA> <0E85> <754C> <0E86> <7678> <0E87> <78CE> <0E88> <7A3D> <0E89> <7CFB> <0E8A> <7E6B> <0E8B> <7E7C> <0E8C> <8A08> <0E8D> <8AA1> <0E8E> <8C3F> <0E8F> <968E> <0E90> <9DC4> <0E91> <53E4> <0E92> <53E9> <0E93> <544A> <0E94> <5471> <0E95> <56FA> <0E96> <59D1> <0E97> <5B64> <0E98> <5C3B> <0E99> <5EAB> <0E9A> <62F7> <0E9B> <6537> <0E9C> <6545> <0E9D> <6572> <0E9E> <66A0> <0E9F> <67AF> <0EA0> <69C1> <0EA1> <6CBD> <0EA2> <75FC> <0EA3> <7690> <0EA4> <777E> <0EA5> <7A3F> <0EA6> <7F94> <0EA7> <8003> <0EA8> <80A1> <0EA9> <818F> <0EAA> <82E6> <0EAB> <82FD> <0EAC> <83F0> <0EAD> <85C1> <0EAE> <8831> <0EAF> <88B4> <0EB0> <8AA5> <0EB1> <8F9C> <0EB2> <932E> <0EB3> <96C7> <0EB4> <9867> <0EB5> <9AD8> endbfchar 100 beginbfchar <0EB6> <9F13> <0EB7> <54ED> <0EB8> <659B> <0EB9> <66F2> <0EBA> <688F> <0EBB> <7A40> <0EBC> <8C37> <0EBD> <9D60> <0EBE> <56F0> <0EBF> <5764> <0EC0> <5D11> <0EC1> <6606> <0EC2> <68B1> <0EC3> <68CD> <0EC4> <6EFE> <0EC5> <7428> <0EC6> <889E> <0EC7> <9BE4> <0EC8> <6C68> <0EC9> <9AA8> <0ECA> <4F9B> <0ECB> <516C> <0ECC> <5171> <0ECD> <529F> <0ECE> <5B54> <0ECF> <5DE5> <0ED0> <6050> <0ED1> <606D> <0ED2> <62F1> <0ED3> <63A7> <0ED4> <653B> <0ED5> <73D9> <0ED6> <7A7A> <0ED7> <86A3> <0ED8> <8CA2> <0ED9> <978F> <0EDA> <4E32> <0EDB> <5BE1> <0EDC> <6208> <0EDD> <679C> <0EDE> <74DC> <0EDF> <79D1> <0EE0> <83D3> <0EE1> <8A87> <0EE2> <8AB2> <0EE3> <8DE8> <0EE4> <904E> <0EE5> <934B> <0EE6> <9846> <0EE7> <5ED3> <0EE8> <69E8> <0EE9> <85FF> <0EEA> <90ED> <0EEB> <51A0> <0EEC> <5B98> <0EED> <5BEC> <0EEE> <6163> <0EEF> <68FA> <0EF0> <6B3E> <0EF1> <704C> <0EF2> <742F> <0EF3> <74D8> <0EF4> <7BA1> <0EF5> <7F50> <0EF6> <83C5> <0EF7> <89C0> <0EF8> <8CAB> <0EF9> <95DC> <0EFA> <9928> <0EFB> <522E> <0EFC> <605D> <0EFD> <62EC> <0EFE> <9002> <0EFF> <4F8A> <0F00> <5149> <0F01> <5321> <0F02> <58D9> <0F03> <5EE3> <0F04> <66E0> <0F05> <6D38> <0F06> <709A> <0F07> <72C2> <0F08> <73D6> <0F09> <7B50> <0F0A> <80F1> <0F0B> <945B> <0F0C> <5366> <0F0D> <639B> <0F0E> <7F6B> <0F0F> <4E56> <0F10> <5080> <0F11> <584A> <0F12> <58DE> <0F13> <602A> <0F14> <6127> <0F15> <62D0> <0F16> <69D0> <0F17> <9B41> <0F18> <5B8F> <0F19> <7D18> endbfchar 100 beginbfchar <0F1A> <80B1> <0F1B> <8F5F> <0F1C> <4EA4> <0F1D> <50D1> <0F1E> <54AC> <0F1F> <55AC> <0F20> <5B0C> <0F21> <5DA0> <0F22> <5DE7> <0F23> <652A> <0F24> <654E> <0F25> <6821> <0F26> <6A4B> <0F27> <72E1> <0F28> <768E> <0F29> <77EF> <0F2A> <7D5E> <0F2B> <7FF9> <0F2C> <81A0> <0F2D> <854E> <0F2E> <86DF> <0F2F> <8F03> <0F30> <8F4E> <0F31> <90CA> <0F32> <9903> <0F33> <9A55> <0F34> <9BAB> <0F35> <4E18> <0F36> <4E45> <0F37> <4E5D> <0F38> <4EC7> <0F39> <4FF1> <0F3A> <5177> <0F3B> <52FE> <0F3C> <5340> <0F3D> <53E3> <0F3E> <53E5> <0F3F> <548E> <0F40> <5614> <0F41> <5775> <0F42> <57A2> <0F43> <5BC7> <0F44> <5D87> <0F45> <5ED0> <0F46> <61FC> <0F47> <62D8> <0F48> <6551> <0F49> <67B8> <0F4A> <67E9> <0F4B> <69CB> <0F4C> <6B50> <0F4D> <6BC6> <0F4E> <6BEC> <0F4F> <6C42> <0F50> <6E9D> <0F51> <7078> <0F52> <72D7> <0F53> <7396> <0F54> <7403> <0F55> <77BF> <0F56> <77E9> <0F57> <7A76> <0F58> <7D7F> <0F59> <8009> <0F5A> <81FC> <0F5B> <8205> <0F5C> <820A> <0F5D> <82DF> <0F5E> <8862> <0F5F> <8B33> <0F60> <8CFC> <0F61> <8EC0> <0F62> <9011> <0F63> <90B1> <0F64> <9264> <0F65> <92B6> <0F66> <99D2> <0F67> <9A45> <0F68> <9CE9> <0F69> <9DD7> <0F6A> <9F9C> <0F6B> <570B> <0F6C> <5C40> <0F6D> <83CA> <0F6E> <97A0> <0F6F> <97AB> <0F70> <9EB4> <0F71> <541B> <0F72> <7A98> <0F73> <7FA4> <0F74> <88D9> <0F75> <8ECD> <0F76> <90E1> <0F77> <5800> <0F78> <5C48> <0F79> <6398> <0F7A> <7A9F> <0F7B> <5BAE> <0F7C> <5F13> <0F7D> <7A79> endbfchar 100 beginbfchar <0F7E> <7AAE> <0F7F> <828E> <0F80> <8EAC> <0F81> <5026> <0F82> <5238> <0F83> <52F8> <0F84> <5377> <0F85> <5708> <0F86> <62F3> <0F87> <6372> <0F88> <6B0A> <0F89> <6DC3> <0F8A> <7737> <0F8B> <53A5> <0F8C> <7357> <0F8D> <8568> <0F8E> <8E76> <0F8F> <95D5> <0F90> <673A> <0F91> <6AC3> <0F92> <6F70> <0F93> <8A6D> <0F94> <8ECC> <0F95> <994B> <0F96> <6677> <0F97> <6B78> <0F98> <8CB4> <0F99> <9B3C> <0F9A> <53EB> <0F9B> <572D> <0F9C> <594E> <0F9D> <63C6> <0F9E> <69FB> <0F9F> <73EA> <0FA0> <7845> <0FA1> <7ABA> <0FA2> <7AC5> <0FA3> <7CFE> <0FA4> <8475> <0FA5> <898F> <0FA6> <8D73> <0FA7> <9035> <0FA8> <95A8> <0FA9> <52FB> <0FAA> <5747> <0FAB> <7547> <0FAC> <7B60> <0FAD> <83CC> <0FAE> <921E> <0FAF> <6A58> <0FB0> <514B> <0FB1> <524B> <0FB2> <5287> <0FB3> <621F> <0FB4> <68D8> <0FB5> <6975> <0FB6> <9699> <0FB7> <50C5> <0FB8> <52A4> <0FB9> <52E4> <0FBA> <61C3> <0FBB> <65A4> <0FBC> <6839> <0FBD> <69FF> <0FBE> <747E> <0FBF> <7B4B> <0FC0> <82B9> <0FC1> <83EB> <0FC2> <89B2> <0FC3> <8B39> <0FC4> <8FD1> <0FC5> <9949> <0FC6> <4ECA> <0FC7> <5997> <0FC8> <64D2> <0FC9> <6611> <0FCA> <6A8E> <0FCB> <7434> <0FCC> <7981> <0FCD> <79BD> <0FCE> <82A9> <0FD1> <895F> <0FD2> <9326> <0FD3> <4F0B> <0FD4> <53CA> <0FD5> <6025> <0FD6> <6271> <0FD7> <6C72> <0FD8> <7D1A> <0FD9> <7D66> <0FDA> <4E98> <0FDB> <5162> <0FDC> <77DC> <0FDD> <80AF> <0FDE> <4F01> <0FDF> <4F0E> <0FE0> <5176> <0FE1> <5180> <0FE2> <55DC> <0FE3> <5668> endbfchar 100 beginbfchar <0FE4> <573B> <0FE5> <57FA> <0FE6> <57FC> <0FE7> <5914> <0FE8> <5947> <0FE9> <5993> <0FEA> <5BC4> <0FEB> <5C90> <0FEC> <5D0E> <0FED> <5DF1> <0FEE> <5E7E> <0FEF> <5FCC> <0FF0> <6280> <0FF1> <65D7> <0FF2> <65E3> <0FF5> <675E> <0FF6> <68CB> <0FF7> <68C4> <0FF8> <6A5F> <0FF9> <6B3A> <0FFA> <6C23> <0FFB> <6C7D> <0FFC> <6C82> <0FFD> <6DC7> <0FFE> <7398> <0FFF> <7426> <1000> <742A> <1001> <7482> <1002> <74A3> <1003> <7578> <1004> <757F> <1005> <7881> <1006> <78EF> <1007> <7941> <100A> <797A> <100B> <7B95> <100C> <7D00> <100D> <7DBA> <100E> <7F88> <100F> <8006> <1010> <802D> <1011> <808C> <1012> <8A18> <1013> <8B4F> <1014> <8C48> <1015> <8D77> <1016> <9321> <1017> <9324> <1018> <98E2> <1019> <9951> <101C> <9A65> <101D> <9E92> <101E> <7DCA> <101F> <4F76> <1020> <5409> <1021> <62EE> <1022> <6854> <1023> <91D1> <1024> <55AB> <1025> <513A> <1026> <5A1C> <1027> <61E6> <1028> <62CF> <1029> <62FF> <102A> <90A3> <102B> <8AFE> <102C> <6696> <102D> <7156> <102E> <96E3> <102F> <634F> <1030> <637A> <1031> <5357> <1032> <678F> <1033> <6960> <1034> <6E73> <1035> <7537> <1036> <7D0D> <1037> <8872> <1038> <56CA> <1039> <5A18> <103A> <4E43> <103B> <5167> <103C> <5948> <103D> <67F0> <103E> <8010> <103F> <5973> <1040> <5E74> <1041> <649A> <1042> <79CA> <1043> <5FF5> <1044> <606C> <1045> <62C8> <1046> <637B> <1047> <5BE7> <1048> <5BD7> <1049> <52AA> <104A> <5974> <104B> <5F29> <104C> <6012> <104D> <7459> endbfchar 100 beginbfchar <104E> <99D1> <104F> <6FC3> <1050> <81BF> <1051> <8FB2> <1052> <60F1> <1053> <8166> <1054> <5C3F> <1055> <5AE9> <1056> <8A25> <1057> <677B> <1058> <7D10> <1059> <80FD> <105A> <5C3C> <105B> <6CE5> <105C> <533F> <105D> <6EBA> <105E> <591A> <105F> <8336> <1060> <4E39> <1061> <4EB6> <1062> <4F46> <1063> <55AE> <1064> <5718> <1065> <58C7> <1066> <5F56> <1067> <65B7> <1068> <65E6> <1069> <6A80> <106A> <6BB5> <106B> <6E4D> <106C> <77ED> <106D> <7AEF> <106E> <7C1E> <106F> <7DDE> <1070> <86CB> <1071> <8892> <1072> <9132> <1073> <935B> <1074> <64BB> <1075> <6FBE> <1076> <737A> <1077> <75B8> <1078> <9054> <1079> <5556> <107A> <574D> <107B> <61BA> <107C> <64D4> <107D> <66C7> <107E> <6DE1> <107F> <6E5B> <1080> <6F6D> <1081> <6FB9> <1082> <75F0> <1083> <8043> <1084> <81BD> <1085> <8541> <1086> <8983> <1087> <8AC7> <1088> <8B5A> <1089> <931F> <108A> <6C93> <108B> <7553> <108C> <7B54> <108D> <8E0F> <108E> <905D> <108F> <5510> <1090> <5802> <1091> <5858> <1092> <5E62> <1093> <6207> <1094> <649E> <1095> <68E0> <1096> <7576> <1097> <7CD6> <1098> <87B3> <1099> <9EE8> <109A> <4EE3> <109B> <5788> <109C> <576E> <109D> <5927> <109E> <5C0D> <109F> <5CB1> <10A0> <5E36> <10A1> <5F85> <10A2> <6234> <10A3> <64E1> <10A4> <73B3> <10A5> <81FA> <10A6> <888B> <10A7> <8CB8> <10A8> <968A> <10A9> <9EDB> <10AA> <5B85> <10AB> <5FB7> <10AC> <60B3> <10AD> <5012> <10AE> <5200> <10AF> <5230> <10B0> <5716> <10B1> <5835> endbfchar 100 beginbfchar <10B2> <5857> <10B3> <5C0E> <10B4> <5C60> <10B5> <5CF6> <10B6> <5D8B> <10B7> <5EA6> <10B8> <5F92> <10B9> <60BC> <10BA> <6311> <10BB> <6389> <10BC> <6417> <10BD> <6843> <10BE> <68F9> <10BF> <6AC2> <10C0> <6DD8> <10C1> <6E21> <10C2> <6ED4> <10C3> <6FE4> <10C4> <71FE> <10C5> <76DC> <10C6> <7779> <10C7> <79B1> <10C8> <7A3B> <10C9> <8404> <10CA> <89A9> <10CB> <8CED> <10CC> <8DF3> <10CD> <8E48> <10CE> <9003> <10CF> <9014> <10D0> <9053> <10D1> <90FD> <10D2> <934D> <10D3> <9676> <10D4> <97DC> <10D5> <6BD2> <10D6> <7006> <10D7> <7258> <10D8> <72A2> <10D9> <7368> <10DA> <7763> <10DB> <79BF> <10DC> <7BE4> <10DD> <7E9B> <10DE> <8B80> <10DF> <58A9> <10E0> <60C7> <10E1> <6566> <10E2> <65FD> <10E3> <66BE> <10E4> <6C8C> <10E5> <711E> <10E6> <71C9> <10E7> <8C5A> <10E8> <9813> <10E9> <4E6D> <10EA> <7A81> <10EB> <4EDD> <10EC> <51AC> <10ED> <51CD> <10EE> <52D5> <10EF> <540C> <10F0> <61A7> <10F1> <6771> <10F2> <6850> <10F3> <68DF> <10F4> <6D1E> <10F5> <6F7C> <10F6> <75BC> <10F7> <77B3> <10F8> <7AE5> <10F9> <80F4> <10FA> <8463> <10FB> <9285> <10FC> <515C> <10FD> <6597> <10FE> <675C> <10FF> <6793> <1100> <75D8> <1101> <7AC7> <1102> <8373> <1103> <8C46> <1104> <9017> <1105> <982D> <1106> <5C6F> <1107> <81C0> <1108> <829A> <1109> <9041> <110A> <906F> <110B> <920D> <110C> <5F97> <110D> <5D9D> <110E> <6A59> <110F> <71C8> <1110> <767B> <1111> <7B49> <1112> <85E4> <1113> <8B04> <1114> <9127> <1115> <9A30> endbfchar 100 beginbfchar <1116> <5587> <1117> <61F6> <1118> <7669> <1119> <7F85> <111A> <863F> <111B> <87BA> <111C> <88F8> <111D> <908F> <111E> <6D1B> <111F> <70D9> <1120> <73DE> <1121> <7D61> <1122> <843D> <1123> <916A> <1124> <99F1> <1125> <4E82> <1126> <5375> <1127> <6B04> <1128> <6B12> <1129> <703E> <112A> <721B> <112B> <862D> <112C> <9E1E> <112D> <524C> <112E> <8FA3> <112F> <5D50> <1130> <64E5> <1131> <652C> <1132> <6B16> <1133> <6FEB> <1134> <7C43> <1135> <7E9C> <1136> <85CD> <1137> <8964> <1138> <89BD> <1139> <62C9> <113A> <81D8> <113B> <881F> <113C> <5ECA> <113D> <6717> <113E> <6D6A> <113F> <72FC> <1140> <7405> <1141> <746F> <1142> <8782> <1143> <90DE> <1144> <4F86> <1145> <5D0D> <1146> <5FA0> <1147> <840A> <1148> <51B7> <1149> <63A0> <114A> <7565> <114B> <4EAE> <114C> <5006> <114D> <5169> <114E> <51C9> <114F> <6881> <1150> <6A11> <1151> <7CAE> <1152> <7CB1> <1153> <7CE7> <1154> <826F> <1155> <8AD2> <1156> <8F1B> <1157> <91CF> <1158> <4FB6> <1159> <5137> <115A> <52F5> <115B> <5442> <115C> <5EEC> <115D> <616E> <115E> <623E> <115F> <65C5> <1160> <6ADA> <1161> <6FFE> <1162> <792A> <1163> <85DC> <1164> <8823> <1165> <95AD> <1166> <9A62> <1167> <9A6A> <1168> <9E97> <1169> <9ECE> <116A> <529B> <116B> <66C6> <116C> <6B77> <116D> <701D> <116E> <792B> <116F> <8F62> <1170> <9742> <1171> <6190> <1172> <6200> <1173> <6523> <1174> <6F23> <1175> <7149> <1176> <7489> <1177> <7DF4> <1178> <806F> <1179> <84EE> endbfchar 100 beginbfchar <117A> <8F26> <117B> <9023> <117C> <934A> <117D> <51BD> <117E> <5217> <117F> <52A3> <1180> <6D0C> <1181> <70C8> <1182> <88C2> <1183> <5EC9> <1184> <6582> <1185> <6BAE> <1186> <6FC2> <1187> <7C3E> <1188> <7375> <1189> <4EE4> <118A> <4F36> <118B> <56F9> <118C> <5CBA> <118D> <5DBA> <118E> <601C> <118F> <73B2> <1190> <7B2D> <1191> <7F9A> <1192> <7FCE> <1193> <8046> <1194> <901E> <1195> <9234> <1196> <96F6> <1197> <9748> <1198> <9818> <1199> <9F61> <119A> <4F8B> <119B> <6FA7> <119C> <79AE> <119D> <91B4> <119E> <96B7> <119F> <52DE> <11A0> <6488> <11A1> <64C4> <11A2> <6AD3> <11A3> <6F5E> <11A4> <7018> <11A5> <7210> <11A6> <76E7> <11A7> <8001> <11A8> <8606> <11A9> <865C> <11AA> <8DEF> <11AB> <8F05> <11AC> <9732> <11AD> <9B6F> <11AE> <9DFA> <11AF> <9E75> <11B0> <788C> <11B1> <797F> <11B2> <7DA0> <11B3> <83C9> <11B4> <9304> <11B5> <9E7F> <11B6> <9E93> <11B7> <8AD6> <11B8> <58DF> <11B9> <5F04> <11BA> <6727> <11BB> <7027> <11BC> <74CF> <11BD> <7C60> <11BE> <807E> <11BF> <5121> <11C0> <7028> <11C1> <7262> <11C2> <78CA> <11C3> <8CC2> <11C4> <8CDA> <11C5> <8CF4> <11C6> <96F7> <11C7> <4E86> <11C8> <50DA> <11C9> <5BEE> <11CA> <5ED6> <11CB> <6599> <11CC> <71CE> <11CD> <7642> <11CE> <77AD> <11CF> <804A> <11D0> <84FC> <11D1> <907C> <11D2> <9B27> <11D3> <9F8D> <11D4> <58D8> <11D5> <5A41> <11D6> <5C62> <11D7> <6A13> <11D8> <6DDA> <11D9> <6F0F> <11DA> <763B> <11DB> <7D2F> <11DC> <7E37> <11DD> <851E> endbfchar 100 beginbfchar <11DE> <8938> <11DF> <93E4> <11E0> <964B> <11E1> <5289> <11E2> <65D2> <11E3> <67F3> <11E4> <69B4> <11E5> <6D41> <11E6> <6E9C> <11E7> <700F> <11E8> <7409> <11E9> <7460> <11EA> <7559> <11EB> <7624> <11EC> <786B> <11ED> <8B2C> <11EE> <985E> <11EF> <516D> <11F0> <622E> <11F1> <9678> <11F2> <4F96> <11F3> <502B> <11F4> <5D19> <11F5> <6DEA> <11F6> <7DB8> <11F7> <8F2A> <11F8> <5F8B> <11F9> <6144> <11FA> <6817> <11FB> <9686> <11FC> <52D2> <11FD> <808B> <11FE> <51DC> <11FF> <51CC> <1200> <695E> <1201> <7A1C> <1202> <7DBE> <1203> <83F1> <1204> <9675> <1205> <4FDA> <1206> <5229> <1207> <5398> <1208> <540F> <1209> <550E> <120A> <5C65> <120B> <60A7> <120C> <674E> <120D> <68A8> <120E> <6D6C> <120F> <7281> <1210> <72F8> <1211> <7406> <1212> <7483> <1213> <75E2> <1214> <7C6C> <1215> <7F79> <1216> <7FB8> <1217> <8389> <1218> <88CF> <1219> <88E1> <121A> <91CC> <121B> <91D0> <121C> <96E2> <121D> <9BC9> <121E> <541D> <121F> <6F7E> <1220> <71D0> <1221> <7498> <1222> <85FA> <1223> <8EAA> <1224> <96A3> <1225> <9C57> <1226> <9E9F> <1227> <6797> <1228> <6DCB> <1229> <7433> <122A> <81E8> <122B> <9716> <122C> <782C> <122D> <7ACB> <122E> <7B20> <122F> <7C92> <1230> <6469> <1231> <746A> <1232> <75F2> <1233> <78BC> <1234> <78E8> <1235> <99AC> <1236> <9B54> <1237> <9EBB> <1238> <5BDE> <1239> <5E55> <123A> <6F20> <123B> <819C> <123C> <83AB> <123D> <9088> <123E> <4E07> <123F> <534D> <1240> <5A29> <1241> <5DD2> endbfchar 100 beginbfchar <1242> <5F4E> <1243> <6162> <1244> <633D> <1245> <6669> <1246> <66FC> <1247> <6EFF> <1248> <6F2B> <1249> <7063> <124A> <779E> <124B> <842C> <124C> <8513> <124D> <883B> <124E> <8F13> <124F> <9945> <1250> <9C3B> <1251> <551C> <1252> <62B9> <1253> <672B> <1254> <6CAB> <1255> <8309> <1256> <896A> <1257> <977A> <1258> <4EA1> <1259> <5984> <125C> <671B> <125D> <7DB2> <125E> <7F54> <125F> <8292> <1260> <832B> <1261> <83BD> <1262> <8F1E> <1263> <9099> <1264> <57CB> <1265> <59B9> <1266> <5A92> <1267> <5BD0> <1268> <6627> <1269> <679A> <126A> <6885> <126B> <6BCF> <126C> <7164> <126D> <7F75> <126E> <8CB7> <126F> <8CE3> <1270> <9081> <1271> <9B45> <1272> <8108> <1273> <8C8A> <1274> <964C> <1275> <9A40> <1276> <9EA5> <1277> <5B5F> <1278> <6C13> <1279> <731B> <127A> <76F2> <127B> <76DF> <127C> <840C> <127D> <51AA> <127E> <8993> <127F> <514D> <1280> <5195> <1281> <52C9> <1282> <68C9> <1283> <6C94> <1284> <7704> <1285> <7720> <1286> <7DBF> <1287> <7DEC> <1288> <9762> <1289> <9EB5> <128A> <6EC5> <128B> <8511> <128C> <51A5> <128D> <540D> <128E> <547D> <128F> <660E> <1290> <669D> <1291> <6927> <1292> <6E9F> <1293> <76BF> <1294> <7791> <1295> <8317> <1296> <84C2> <1297> <879F> <1298> <9169> <1299> <9298> <129A> <9CF4> <129B> <8882> <129C> <4FAE> <129D> <5192> <129E> <52DF> <129F> <59C6> <12A0> <5E3D> <12A1> <6155> <12A4> <66AE> <12A5> <67D0> <12A6> <6A21> <12A7> <6BCD> <12A8> <6BDB> <12A9> <725F> endbfchar 100 beginbfchar <12AA> <7261> <12AB> <7441> <12AC> <7738> <12AD> <77DB> <12AE> <8017> <12AF> <82BC> <12B0> <8305> <12B1> <8B00> <12B2> <8B28> <12B3> <8C8C> <12B4> <6728> <12B5> <6C90> <12B6> <7267> <12B7> <76EE> <12B8> <7766> <12B9> <7A46> <12BA> <9DA9> <12BB> <6B7F> <12BC> <6C92> <12BD> <5922> <12BE> <6726> <12BF> <8499> <12C0> <536F> <12C1> <5893> <12C2> <5999> <12C3> <5EDF> <12C4> <63CF> <12C5> <6634> <12C6> <6773> <12C7> <6E3A> <12C8> <732B> <12C9> <7AD7> <12CA> <82D7> <12CB> <9328> <12CC> <52D9> <12CD> <5DEB> <12CE> <61AE> <12CF> <61CB> <12D0> <620A> <12D1> <62C7> <12D2> <64AB> <12D3> <65E0> <12D4> <6959> <12D5> <6B66> <12D6> <6BCB> <12D7> <7121> <12D8> <73F7> <12D9> <755D> <12DA> <7E46> <12DB> <821E> <12DC> <8302> <12DD> <856A> <12DE> <8AA3> <12DF> <8CBF> <12E0> <9727> <12E1> <9D61> <12E2> <58A8> <12E3> <9ED8> <12E4> <5011> <12E5> <520E> <12E6> <543B> <12E7> <554F> <12E8> <6587> <12E9> <6C76> <12EC> <805E> <12ED> <868A> <12EE> <9580> <12EF> <96EF> <12F0> <52FF> <12F1> <6C95> <12F2> <7269> <12F3> <5473> <12F4> <5A9A> <12F5> <5C3E> <12F6> <5D4B> <12F7> <5F4C> <12F8> <5FAE> <12F9> <672A> <12FA> <68B6> <12FB> <6963> <12FC> <6E3C> <12FD> <6E44> <12FE> <7709> <12FF> <7C73> <1300> <7F8E> <1301> <8587> <1302> <8B0E> <1303> <8FF7> <1304> <9761> <1305> <9EF4> <1306> <5CB7> <1307> <60B6> <1308> <610D> <1309> <61AB> <130A> <654F> <130D> <6C11> <130E> <6CEF> <130F> <739F> <1310> <73C9> <1311> <7DE1> endbfchar 100 beginbfchar <1312> <9594> <1313> <5BC6> <1314> <871C> <1315> <8B10> <1316> <525D> <1317> <535A> <1318> <62CD> <1319> <640F> <131A> <64B2> <131B> <6734> <131C> <6A38> <131D> <6CCA> <131E> <73C0> <131F> <749E> <1320> <7B94> <1321> <7C95> <1322> <7E1B> <1323> <818A> <1324> <8236> <1325> <8584> <1326> <8FEB> <1327> <96F9> <1328> <99C1> <1329> <4F34> <132A> <534A> <132B> <53CD> <132C> <53DB> <132D> <62CC> <132E> <642C> <132F> <6500> <1330> <6591> <1331> <69C3> <1332> <6CEE> <1333> <6F58> <1334> <73ED> <1335> <7554> <1336> <7622> <1337> <76E4> <1338> <76FC> <1339> <78D0> <133A> <78FB> <133B> <792C> <133C> <7D46> <133D> <822C> <133E> <87E0> <133F> <8FD4> <1340> <9812> <1341> <98EF> <1342> <52C3> <1343> <62D4> <1344> <64A5> <1345> <6E24> <1346> <6F51> <1347> <767C> <1348> <8DCB> <1349> <91B1> <134A> <9262> <134B> <9AEE> <134C> <9B43> <134D> <5023> <134E> <508D> <134F> <574A> <1350> <59A8> <1351> <5C28> <1352> <5E47> <1353> <5F77> <1354> <623F> <1355> <653E> <1356> <65B9> <1357> <65C1> <1358> <6609> <1359> <678B> <135A> <699C> <135B> <6EC2> <135C> <78C5> <135D> <7D21> <135E> <80AA> <135F> <8180> <1360> <822B> <1361> <82B3> <1362> <84A1> <1363> <868C> <1364> <8A2A> <1365> <8B17> <1366> <90A6> <1367> <9632> <1368> <9F90> <1369> <500D> <136A> <4FF3> <136B> <57F9> <136C> <5F98> <136D> <62DC> <136E> <6392> <136F> <676F> <1370> <6E43> <1371> <7119> <1372> <76C3> <1373> <80CC> <1374> <80DA> <1377> <8919> endbfchar 100 beginbfchar <1378> <8CE0> <1379> <8F29> <137A> <914D> <137B> <966A> <137C> <4F2F> <137D> <4F70> <137E> <5E1B> <137F> <67CF> <1380> <6822> <1383> <9B44> <1384> <5E61> <1385> <6A0A> <1386> <7169> <1387> <71D4> <1388> <756A> <1389> <7E41> <138A> <8543> <138B> <85E9> <138C> <98DC> <138D> <4F10> <138E> <7B4F> <138F> <7F70> <1390> <95A5> <1391> <51E1> <1392> <5E06> <1393> <68B5> <1394> <6C3E> <1395> <6C4E> <1396> <6CDB> <1397> <72AF> <1398> <7BC4> <1399> <8303> <139A> <6CD5> <139B> <743A> <139C> <50FB> <139D> <5288> <139E> <58C1> <139F> <64D8> <13A0> <6A97> <13A1> <74A7> <13A2> <7656> <13A3> <78A7> <13A4> <8617> <13A5> <95E2> <13A6> <9739> <13A7> <535E> <13A8> <5F01> <13A9> <8B8A> <13AA> <8FA8> <13AB> <8FAF> <13AC> <908A> <13AD> <5225> <13AE> <77A5> <13AF> <9C49> <13B0> <9F08> <13B1> <4E19> <13B2> <5002> <13B3> <5175> <13B4> <5C5B> <13B5> <5E77> <13B6> <661E> <13B7> <663A> <13B8> <67C4> <13B9> <68C5> <13BA> <70B3> <13BB> <7501> <13BC> <75C5> <13BD> <79C9> <13BE> <7ADD> <13BF> <8F27> <13C0> <9920> <13C1> <9A08> <13C2> <4FDD> <13C3> <5821> <13C4> <5831> <13C5> <5BF6> <13C6> <666E> <13C7> <6B65> <13C8> <6D11> <13C9> <6E7A> <13CA> <6F7D> <13CB> <73E4> <13CC> <752B> <13CD> <83E9> <13CE> <88DC> <13CF> <8913> <13D0> <8B5C> <13D1> <8F14> <13D2> <4F0F> <13D3> <50D5> <13D4> <5310> <13D5> <535C> <13D6> <5B93> <13D7> <5FA9> <13D8> <670D> <13D9> <798F> <13DA> <8179> <13DB> <832F> <13DC> <8514> <13DD> <8907> endbfchar 100 beginbfchar <13DE> <8986> <13DF> <8F39> <13E0> <8F3B> <13E1> <99A5> <13E2> <9C12> <13E3> <672C> <13E4> <4E76> <13E5> <4FF8> <13E6> <5949> <13E7> <5C01> <13EA> <6367> <13EB> <68D2> <13EC> <70FD> <13ED> <71A2> <13EE> <742B> <13EF> <7E2B> <13F0> <84EC> <13F1> <8702> <13F2> <9022> <13F3> <92D2> <13F4> <9CF3> <13F5> <4E0D> <13F6> <4ED8> <13F7> <4FEF> <13F8> <5085> <13F9> <5256> <13FA> <526F> <13FB> <5426> <13FC> <5490> <13FD> <57E0> <13FE> <592B> <13FF> <5A66> <1400> <5B5A> <1401> <5B75> <1402> <5BCC> <1403> <5E9C> <1404> <6276> <1405> <6577> <1406> <65A7> <1407> <6D6E> <1408> <6EA5> <1409> <7236> <140A> <7B26> <140B> <7C3F> <140C> <7F36> <140F> <819A> <1410> <8240> <1411> <8299> <1412> <83A9> <1413> <8A03> <1414> <8CA0> <1415> <8CE6> <1416> <8CFB> <1417> <8D74> <1418> <8DBA> <1419> <90E8> <141A> <91DC> <141B> <961C> <141C> <9644> <141D> <99D9> <141E> <9CE7> <141F> <5317> <1420> <5206> <1421> <5429> <1422> <5674> <1423> <58B3> <1424> <5954> <1425> <596E> <1426> <5FFF> <1427> <61A4> <1428> <626E> <1429> <6610> <142A> <6C7E> <142B> <711A> <142C> <76C6> <142D> <7C89> <142E> <7CDE> <142F> <7D1B> <1430> <82AC> <1431> <8CC1> <1432> <96F0> <1433> <4F5B> <1434> <5F17> <1435> <5F7F> <1436> <62C2> <1437> <5D29> <1438> <670B> <1439> <68DA> <143A> <787C> <143B> <7E43> <143C> <9D6C> <143D> <4E15> <143E> <5099> <143F> <5315> <1440> <532A> <1441> <5351> <1442> <5983> <1443> <5A62> <1444> <5E87> <1445> <60B2> endbfchar 100 beginbfchar <1446> <618A> <1447> <6249> <1448> <6279> <1449> <6590> <144A> <6787> <144B> <69A7> <144C> <6BD4> <1450> <6CB8> <1451> <7435> <1452> <75FA> <1453> <7812> <1454> <7891> <1455> <79D5> <1456> <79D8> <1457> <7C83> <1458> <7DCB> <1459> <7FE1> <145A> <80A5> <145B> <813E> <145C> <81C2> <145D> <83F2> <145E> <871A> <145F> <88E8> <1460> <8AB9> <1461> <8B6C> <1462> <8CBB> <1463> <9119> <1464> <975E> <1465> <98DB> <1466> <9F3B> <1467> <56AC> <1468> <5B2A> <1469> <5F6C> <146A> <658C> <146B> <6AB3> <146C> <6BAF> <146D> <6D5C> <146E> <6FF1> <146F> <7015> <1470> <725D> <1471> <73AD> <1472> <8CA7> <1473> <8CD3> <1474> <983B> <1475> <6191> <1476> <6C37> <1477> <8058> <1478> <9A01> <1479> <4E4D> <147A> <4E8B> <147B> <4E9B> <147C> <4ED5> <147D> <4F3A> <147E> <4F3C> <147F> <4F7F> <1480> <4FDF> <1481> <50FF> <1482> <53F2> <1483> <53F8> <1484> <5506> <1485> <55E3> <1486> <56DB> <1487> <58EB> <1488> <5962> <1489> <5A11> <148A> <5BEB> <148B> <5BFA> <148C> <5C04> <148D> <5DF3> <148E> <5E2B> <148F> <5F99> <1490> <601D> <1491> <6368> <1492> <659C> <1493> <65AF> <1494> <67F6> <1495> <67FB> <1496> <68AD> <1497> <6B7B> <1498> <6C99> <1499> <6CD7> <149A> <6E23> <149B> <7009> <149C> <7345> <149D> <7802> <149E> <793E> <149F> <7940> <14A0> <7960> <14A1> <79C1> <14A2> <7BE9> <14A3> <7D17> <14A4> <7D72> <14A5> <8086> <14A6> <820D> <14A7> <838E> <14A8> <84D1> <14A9> <86C7> <14AA> <88DF> <14AB> <8A50> <14AC> <8A5E> endbfchar 100 beginbfchar <14AD> <8B1D> <14AE> <8CDC> <14AF> <8D66> <14B0> <8FAD> <14B1> <90AA> <14B2> <98FC> <14B3> <99DF> <14B4> <9E9D> <14B5> <524A> <14B6> <6714> <14B7> <5098> <14B8> <522A> <14B9> <5C71> <14BA> <6563> <14BB> <6C55> <14BC> <73CA> <14BD> <7523> <14BE> <759D> <14BF> <7B97> <14C0> <849C> <14C1> <9178> <14C2> <9730> <14C3> <4E77> <14C4> <6492> <14C5> <6BBA> <14C6> <715E> <14C7> <85A9> <14C8> <4E09> <14C9> <6749> <14CA> <68EE> <14CB> <6E17> <14CC> <829F> <14CD> <8518> <14CE> <886B> <14CF> <63F7> <14D0> <6F81> <14D1> <9212> <14D2> <98AF> <14D3> <4E0A> <14D4> <50B7> <14D5> <50CF> <14D6> <511F> <14D7> <5546> <14D8> <55AA> <14D9> <5617> <14DA> <5B40> <14DB> <5C19> <14DC> <5CE0> <14DD> <5E38> <14DE> <5E8A> <14DF> <5EA0> <14E0> <5EC2> <14E1> <60F3> <14E2> <6851> <14E3> <6A61> <14E4> <6E58> <14E5> <723D> <14E6> <7240> <14E7> <72C0> <14E8> <76F8> <14E9> <7965> <14EA> <7BB1> <14EB> <7FD4> <14EC> <88F3> <14ED> <89F4> <14EE> <8A73> <14EF> <8C61> <14F0> <8CDE> <14F1> <971C> <14F2> <585E> <14F3> <74BD> <14F4> <8CFD> <14F5> <55C7> <14F6> <7A61> <14F7> <7D22> <14F8> <8272> <14F9> <7272> <14FA> <751F> <14FB> <7525> <14FC> <7B19> <14FD> <5885> <14FE> <58FB> <14FF> <5DBC> <1500> <5E8F> <1501> <5EB6> <1502> <5F90> <1503> <6055> <1504> <6292> <1505> <637F> <1506> <654D> <1507> <6691> <1508> <66D9> <1509> <66F8> <150A> <6816> <150B> <68F2> <150C> <7280> <150D> <745E> <150E> <7B6E> <150F> <7D6E> <1510> <7DD6> endbfchar 100 beginbfchar <1511> <7F72> <1512> <80E5> <1513> <8212> <1514> <85AF> <1515> <897F> <1516> <8A93> <1517> <901D> <1518> <92E4> <1519> <9ECD> <151A> <9F20> <151B> <5915> <151C> <596D> <151D> <5E2D> <151E> <60DC> <151F> <6614> <1520> <6673> <1521> <6790> <1522> <6C50> <1523> <6DC5> <1524> <6F5F> <1525> <77F3> <1526> <78A9> <1527> <84C6> <1528> <91CB> <1529> <932B> <152A> <4ED9> <152B> <50CA> <152C> <5148> <152D> <5584> <152E> <5B0B> <152F> <5BA3> <1530> <6247> <1531> <657E> <1532> <65CB> <1533> <6E32> <1534> <717D> <1535> <7401> <1536> <7444> <1537> <7487> <1538> <74BF> <1539> <766C> <153A> <79AA> <153B> <7DDA> <153C> <7E55> <153D> <7FA8> <153E> <817A> <153F> <81B3> <1540> <8239> <1541> <861A> <1542> <87EC> <1543> <8A75> <1544> <8DE3> <1545> <9078> <1546> <9291> <1547> <9425> <1548> <994D> <1549> <9BAE> <154A> <5368> <154B> <5C51> <154C> <6954> <154D> <6CC4> <154E> <6D29> <154F> <6E2B> <1550> <820C> <1551> <859B> <1552> <893B> <1553> <8A2D> <1554> <8AAA> <1555> <96EA> <1556> <9F67> <1557> <5261> <1558> <66B9> <1559> <6BB2> <155A> <7E96> <155B> <87FE> <155C> <8D0D> <155D> <9583> <155E> <965D> <155F> <651D> <1560> <6D89> <1561> <71EE> <1562> <57CE> <1563> <59D3> <1564> <5BAC> <1565> <6027> <1566> <60FA> <1567> <6210> <1568> <661F> <1569> <665F> <156A> <7329> <156B> <73F9> <156C> <76DB> <156D> <7701> <156E> <7B6C> <156F> <8056> <1570> <8072> <1571> <8165> <1572> <8AA0> <1573> <9192> <1574> <4E16> endbfchar 100 beginbfchar <1575> <52E2> <1576> <6B72> <1577> <6D17> <1578> <7A05> <1579> <7B39> <157A> <7D30> <157B> <8CB0> <157C> <53EC> <157D> <562F> <157E> <5851> <157F> <5BB5> <1580> <5C0F> <1581> <5C11> <1582> <5DE2> <1583> <6240> <1584> <6383> <1585> <6414> <1586> <662D> <1587> <68B3> <1588> <6CBC> <1589> <6D88> <158A> <6EAF> <158B> <701F> <158C> <70A4> <158D> <71D2> <158E> <7526> <158F> <758F> <1590> <758E> <1591> <7619> <1592> <7B11> <1593> <7BE0> <1594> <7C2B> <1595> <7D20> <1596> <7D39> <1597> <852C> <1598> <856D> <1599> <8607> <159A> <8A34> <159B> <900D> <159C> <9061> <159D> <90B5> <159E> <92B7> <159F> <97F6> <15A0> <9A37> <15A1> <4FD7> <15A2> <5C6C> <15A3> <675F> <15A4> <6D91> <15A5> <7C9F> <15A6> <7E8C> <15A7> <8B16> <15A8> <8D16> <15A9> <901F> <15AA> <5B6B> <15AB> <5DFD> <15AC> <640D> <15AD> <84C0> <15AE> <905C> <15AF> <98E1> <15B0> <7387> <15B1> <5B8B> <15B2> <609A> <15B3> <677E> <15B4> <6DDE> <15B5> <8A1F> <15B6> <8AA6> <15B7> <9001> <15B8> <980C> <15B9> <5237> <15BA> <7051> <15BB> <788E> <15BC> <9396> <15BD> <8870> <15BE> <91D7> <15BF> <4FEE> <15C0> <53D7> <15C1> <55FD> <15C2> <56DA> <15C3> <5782> <15C4> <58FD> <15C5> <5AC2> <15C6> <5B88> <15C7> <5CAB> <15C8> <5CC0> <15C9> <5E25> <15CA> <6101> <15CB> <620D> <15CC> <624B> <15CD> <6388> <15CE> <641C> <15CF> <6536> <15D0> <6578> <15D1> <6A39> <15D2> <6B8A> <15D3> <6C34> <15D4> <6D19> <15D5> <6F31> <15D6> <71E7> <15D7> <72E9> <15D8> <7378> endbfchar 100 beginbfchar <15D9> <7407> <15DA> <74B2> <15DB> <7626> <15DC> <7761> <15DD> <79C0> <15DE> <7A57> <15DF> <7AEA> <15E0> <7CB9> <15E1> <7D8F> <15E2> <7DAC> <15E3> <7E61> <15E4> <7F9E> <15E5> <8129> <15E6> <8331> <15E7> <8490> <15E8> <84DA> <15E9> <85EA> <15EA> <8896> <15EB> <8AB0> <15EC> <8B90> <15ED> <8F38> <15EE> <9042> <15EF> <9083> <15F0> <916C> <15F1> <9296> <15F2> <92B9> <15F3> <968B> <15F6> <96D6> <15F7> <9700> <15F8> <9808> <15F9> <9996> <15FA> <9AD3> <15FB> <9B1A> <15FC> <53D4> <15FD> <587E> <15FE> <5919> <15FF> <5B70> <1600> <5BBF> <1601> <6DD1> <1602> <6F5A> <1603> <719F> <1604> <7421> <1605> <74B9> <1606> <8085> <1607> <83FD> <1608> <5DE1> <1609> <5F87> <160A> <5FAA> <160B> <6042> <160C> <65EC> <160D> <6812> <160E> <696F> <160F> <6A53> <1610> <6B89> <1611> <6D35> <1612> <6DF3> <1613> <73E3> <1614> <76FE> <1615> <77AC> <1616> <7B4D> <1617> <7D14> <1618> <8123> <1619> <821C> <161A> <8340> <161B> <84F4> <161C> <8563> <161D> <8A62> <161E> <8AC4> <161F> <9187> <1620> <931E> <1621> <9806> <1622> <99B4> <1623> <620C> <1624> <8853> <1625> <8FF0> <1626> <9265> <1627> <5D07> <1628> <5D27> <1629> <5D69> <162A> <745F> <162B> <819D> <162C> <8768> <162D> <6FD5> <162E> <62FE> <162F> <7FD2> <1630> <8936> <1631> <8972> <1632> <4E1E> <1633> <4E58> <1634> <50E7> <1635> <52DD> <1636> <5347> <1637> <627F> <1638> <6607> <1639> <7E69> <163A> <8805> <163B> <965E> <163C> <4F8D> <163D> <5319> <163E> <5636> endbfchar 100 beginbfchar <163F> <59CB> <1640> <5AA4> <1641> <5C38> <1642> <5C4E> <1643> <5C4D> <1644> <5E02> <1645> <5F11> <1646> <6043> <1647> <65BD> <1648> <662F> <1649> <6642> <164A> <67BE> <164B> <67F4> <164C> <731C> <164D> <77E2> <164E> <793A> <164F> <7FC5> <1650> <8494> <1651> <84CD> <1652> <8996> <1653> <8A66> <1654> <8A69> <1655> <8AE1> <1656> <8C55> <1657> <8C7A> <1658> <57F4> <1659> <5BD4> <165A> <5F0F> <165B> <606F> <165C> <62ED> <165D> <690D> <165E> <6B96> <165F> <6E5C> <1660> <7184> <1661> <7BD2> <1662> <8755> <1663> <8B58> <1664> <8EFE> <1665> <98DF> <1666> <98FE> <1667> <4F38> <1668> <4F81> <1669> <4FE1> <166A> <547B> <166B> <5A20> <166C> <5BB8> <166D> <613C> <166E> <65B0> <166F> <6668> <1670> <71FC> <1671> <7533> <1672> <795E> <1673> <7D33> <1674> <814E> <1675> <81E3> <1676> <8398> <1677> <85AA> <1678> <85CE> <1679> <8703> <167A> <8A0A> <167B> <8EAB> <167C> <8F9B> <167D> <8FC5> <167E> <5931> <167F> <5BA4> <1680> <5BE6> <1681> <6089> <1682> <5BE9> <1683> <5C0B> <1684> <5FC3> <1685> <6C81> <1686> <6DF1> <1687> <700B> <1688> <751A> <1689> <82AF> <168A> <8AF6> <168B> <4EC0> <168C> <5341> <168D> <96D9> <168E> <6C0F> <168F> <4E9E> <1690> <4FC4> <1691> <5152> <1692> <555E> <1693> <5A25> <1694> <5CE8> <1695> <6211> <1696> <7259> <1697> <82BD> <1698> <83AA> <1699> <86FE> <169A> <8859> <169B> <8A1D> <169C> <963F> <169D> <96C5> <169E> <9913> <169F> <9D09> <16A0> <9D5D> <16A1> <580A> <16A2> <5CB3> endbfchar 100 beginbfchar <16A3> <5DBD> <16A4> <5E44> <16A5> <60E1> <16A6> <6115> <16A7> <63E1> <16A8> <6A02> <16A9> <6E25> <16AA> <9102> <16AB> <9354> <16AC> <984E> <16AD> <9C10> <16AE> <9F77> <16AF> <5B89> <16B0> <5CB8> <16B1> <6309> <16B2> <664F> <16B3> <6848> <16B4> <773C> <16B5> <96C1> <16B6> <978D> <16B7> <9854> <16B8> <9B9F> <16B9> <65A1> <16BA> <8B01> <16BB> <8ECB> <16BC> <95BC> <16BD> <5535> <16BE> <5CA9> <16BF> <5DD6> <16C0> <5EB5> <16C1> <6697> <16C2> <764C> <16C3> <83F4> <16C4> <95C7> <16C5> <58D3> <16C6> <62BC> <16C7> <72CE> <16C8> <9D28> <16C9> <4EF0> <16CA> <592E> <16CB> <600F> <16CC> <663B> <16CD> <6B83> <16CE> <79E7> <16CF> <9D26> <16D0> <5393> <16D1> <54C0> <16D2> <57C3> <16D3> <5D16> <16D4> <611B> <16D5> <66D6> <16D6> <6DAF> <16D7> <788D> <16D8> <827E> <16D9> <9698> <16DA> <9744> <16DB> <5384> <16DC> <627C> <16DD> <6396> <16DE> <6DB2> <16DF> <7E0A> <16E0> <814B> <16E1> <984D> <16E2> <6AFB> <16E3> <7F4C> <16E4> <9DAF> <16E5> <9E1A> <16E6> <4E5F> <16E7> <503B> <16E8> <51B6> <16E9> <591C> <16EA> <60F9> <16EB> <63F6> <16EC> <6930> <16ED> <723A> <16EE> <8036> <16EF> <91CE> <16F0> <5F31> <16F1> <7D04> <16F2> <82E5> <16F3> <846F> <16F4> <84BB> <16F5> <85E5> <16F6> <8E8D> <16F7> <4F6F> <16F8> <58E4> <16F9> <5B43> <16FA> <6059> <16FB> <63DA> <16FC> <6518> <16FD> <656D> <16FE> <6698> <16FF> <694A> <1700> <6A23> <1701> <6D0B> <1702> <7001> <1703> <716C> <1704> <75D2> <1705> <760D> <1706> <79B3> endbfchar 100 beginbfchar <1707> <7A70> <1708> <7F8A> <1709> <8944> <170A> <8B93> <170B> <91C0> <170C> <967D> <170D> <990A> <170E> <5704> <170F> <5FA1> <1710> <65BC> <1711> <6F01> <1712> <7600> <1713> <79A6> <1714> <8A9E> <1715> <99AD> <1716> <9B5A> <1717> <9F6C> <1718> <5104> <1719> <61B6> <171A> <6291> <171B> <6A8D> <171C> <81C6> <171D> <5043> <171E> <5830> <171F> <5F66> <1720> <7109> <1721> <8A00> <1722> <8AFA> <1723> <5B7C> <1724> <8616> <1725> <4FFA> <1726> <513C> <1727> <56B4> <1728> <5944> <1729> <63A9> <172A> <6DF9> <172B> <5DAA> <172C> <696D> <172D> <5186> <172E> <4E88> <172F> <4F59> <1730> <5982> <1731> <6B5F> <1732> <6C5D> <1733> <74B5> <1734> <7916> <1735> <8207> <1736> <8245> <1737> <8339> <1738> <8F3F> <1739> <8F5D> <173A> <9918> <173B> <4EA6> <173C> <57DF> <173D> <5F79> <173E> <6613> <173F> <75AB> <1740> <7E79> <1741> <8B6F> <1742> <9006> <1743> <9A5B> <1744> <56A5> <1745> <5827> <1746> <59F8> <1747> <5A1F> <1748> <5BB4> <1749> <5EF6> <174A> <6350> <174B> <633B> <174C> <693D> <174D> <6C87> <174E> <6CBF> <174F> <6D8E> <1750> <6D93> <1751> <6DF5> <1752> <6F14> <1753> <70DF> <1754> <7136> <1755> <7159> <1756> <71C3> <1757> <71D5> <1758> <784F> <1759> <786F> <175A> <7B75> <175B> <7DE3> <175C> <7E2F> <175D> <884D> <175E> <8EDF> <175F> <925B> <1760> <9CF6> <1761> <6085> <1762> <6D85> <1763> <71B1> <1764> <95B1> <1765> <53AD> <1766> <67D3> <1767> <708E> <1768> <7130> <1769> <7430> <176A> <8276> endbfchar 100 beginbfchar <176B> <82D2> <176C> <95BB> <176D> <9AE5> <176E> <9E7D> <176F> <66C4> <1770> <71C1> <1771> <8449> <1772> <584B> <1773> <5DB8> <1774> <5F71> <1775> <6620> <1776> <668E> <1777> <6979> <1778> <69AE> <1779> <6C38> <177A> <6CF3> <177B> <6E36> <177C> <6F41> <177D> <6FDA> <177E> <701B> <177F> <702F> <1780> <7150> <1781> <71DF> <1782> <7370> <1783> <745B> <1784> <74D4> <1785> <76C8> <1786> <7A4E> <1787> <7E93> <1788> <82F1> <1789> <8A60> <178A> <8FCE> <178B> <9348> <178C> <9719> <178D> <4E42> <178E> <502A> <178F> <5208> <1790> <53E1> <1791> <66F3> <1792> <6C6D> <1793> <6FCA> <1794> <730A> <1795> <777F> <1796> <7A62> <1797> <82AE> <1798> <85DD> <1799> <8602> <179A> <88D4> <179B> <8A63> <179C> <8B7D> <179D> <8C6B> <179E> <92B3> <179F> <9713> <17A0> <9810> <17A1> <4E94> <17A2> <4F0D> <17A3> <4FC9> <17A4> <50B2> <17A5> <5348> <17A6> <543E> <17A7> <5433> <17A8> <55DA> <17A9> <5862> <17AA> <58BA> <17AB> <5967> <17AC> <5A1B> <17AD> <5BE4> <17AE> <609F> <17AF> <61CA> <17B0> <6556> <17B1> <65FF> <17B2> <6664> <17B3> <68A7> <17B4> <6C5A> <17B5> <6FB3> <17B6> <70CF> <17B7> <71AC> <17B8> <7352> <17B9> <7B7D> <17BA> <8708> <17BB> <8AA4> <17BC> <9C32> <17BD> <9F07> <17BE> <5C4B> <17BF> <6C83> <17C0> <7344> <17C1> <7389> <17C2> <923A> <17C3> <6EAB> <17C4> <7465> <17C5> <761F> <17C6> <7A69> <17C7> <7E15> <17C8> <860A> <17C9> <5140> <17CA> <58C5> <17CB> <64C1> <17CC> <74EE> <17CD> <7515> <17CE> <7670> endbfchar 100 beginbfchar <17CF> <7FC1> <17D0> <9095> <17D1> <96CD> <17D2> <9954> <17D3> <6E26> <17D4> <74E6> <17D7> <81E5> <17D8> <86D9> <17D9> <8778> <17DA> <8A1B> <17DB> <5A49> <17DC> <5B8C> <17DD> <5B9B> <17DE> <68A1> <17DF> <6900> <17E0> <6D63> <17E1> <73A9> <17E2> <7413> <17E3> <742C> <17E4> <7897> <17E5> <7DE9> <17E6> <7FEB> <17E7> <8118> <17E8> <8155> <17E9> <839E> <17EA> <8C4C> <17EB> <962E> <17EC> <9811> <17ED> <66F0> <17EE> <5F80> <17EF> <65FA> <17F0> <6789> <17F1> <6C6A> <17F2> <738B> <17F3> <502D> <17F4> <5A03> <17F5> <6B6A> <17F6> <77EE> <17F7> <5916> <17F8> <5D6C> <17F9> <5DCD> <17FA> <7325> <17FB> <754F> <17FC> <50E5> <17FD> <51F9> <17FE> <582F> <17FF> <592D> <1800> <5996> <1801> <59DA> <1802> <5BE5> <1803> <5DA2> <1804> <62D7> <1805> <6416> <1806> <6493> <1807> <64FE> <1808> <66DC> <1809> <6A48> <180A> <71FF> <180B> <7464> <180C> <7A88> <180D> <7AAF> <180E> <7E47> <180F> <7E5E> <1810> <8000> <1811> <8170> <1812> <87EF> <1813> <8981> <1814> <8B20> <1815> <9059> <1816> <9080> <1817> <9952> <1818> <617E> <1819> <6B32> <181A> <6D74> <181B> <7E1F> <181C> <8925> <181D> <8FB1> <181E> <4FD1> <181F> <50AD> <1820> <5197> <1821> <52C7> <1822> <57C7> <1823> <5889> <1824> <5BB9> <1825> <5EB8> <1826> <6142> <1827> <6995> <1828> <6D8C> <1829> <6E67> <182A> <6EB6> <182B> <7194> <182C> <7462> <182D> <7528> <182E> <752C> <182F> <8073> <1830> <8338> <1831> <84C9> <1832> <8E0A> <1833> <9394> <1834> <93DE> endbfchar 100 beginbfchar <1835> <4E8E> <1836> <4F51> <1837> <5076> <1838> <512A> <1839> <53C8> <183A> <53CB> <183B> <53F3> <183C> <5B87> <183D> <5BD3> <183E> <5C24> <183F> <611A> <1840> <6182> <1841> <65F4> <1842> <725B> <1843> <7397> <1844> <7440> <1845> <76C2> <1846> <7950> <1847> <7991> <1848> <79B9> <1849> <7D06> <184A> <7FBD> <184B> <828B> <184C> <85D5> <184D> <865E> <184E> <8FC2> <184F> <9047> <1850> <90F5> <1851> <91EA> <1852> <9685> <1855> <52D6> <1856> <5F67> <1857> <65ED> <1858> <6631> <1859> <682F> <185A> <715C> <185B> <7A36> <185C> <90C1> <185D> <980A> <185E> <4E91> <185F> <6A52> <1860> <6B9E> <1861> <6F90> <1862> <7189> <1863> <8018> <1864> <82B8> <1865> <8553> <1866> <904B> <1867> <9695> <1868> <96F2> <1869> <97FB> <186A> <851A> <186B> <9B31> <186C> <4E90> <186D> <718A> <186E> <96C4> <186F> <5143> <1870> <539F> <1871> <54E1> <1872> <5713> <1873> <5712> <1874> <57A3> <1875> <5A9B> <1876> <5AC4> <1877> <5BC3> <1878> <6028> <1879> <613F> <187A> <63F4> <187B> <6C85> <187C> <6D39> <187D> <6E72> <187E> <6E90> <187F> <7230> <1880> <733F> <1881> <7457> <1882> <82D1> <1883> <8881> <1884> <8F45> <1885> <9060> <1886> <9662> <1887> <9858> <1888> <9D1B> <1889> <6708> <188A> <8D8A> <188B> <925E> <188C> <4F4D> <188D> <5049> <188E> <50DE> <188F> <5371> <1890> <570D> <1891> <59D4> <1892> <5A01> <1893> <5C09> <1894> <6170> <1895> <6690> <1896> <6E2D> <1897> <7232> <1898> <744B> <1899> <7DEF> <189A> <80C3> endbfchar 100 beginbfchar <189B> <840E> <189C> <8466> <189D> <853F> <189E> <875F> <189F> <885B> <18A0> <8918> <18A1> <8B02> <18A2> <9055> <18A3> <97CB> <18A4> <9B4F> <18A5> <4E73> <18A6> <4F91> <18A7> <5112> <18A8> <516A> <18A9> <552F> <18AA> <55A9> <18AB> <5B7A> <18AC> <5BA5> <18AF> <5EBE> <18B0> <60A0> <18B1> <60DF> <18B4> <63C4> <18B5> <6538> <18B6> <6709> <18B7> <67D4> <18B8> <67DA> <18BB> <6CB9> <18BC> <6D27> <18BD> <6E38> <18BE> <6FE1> <18C1> <745C> <18C2> <7531> <18C3> <7652> <18C4> <7DAD> <18C5> <81FE> <18C6> <8438> <18C7> <88D5> <18C8> <8A98> <18C9> <8ADB> <18CA> <8AED> <18CB> <8E30> <18CC> <8E42> <18CD> <904A> <18CE> <903E> <18CF> <907A> <18D0> <9149> <18D1> <91C9> <18D2> <936E> <18D3> <5809> <18D4> <6BD3> <18D5> <8089> <18D6> <80B2> <18D7> <5141> <18D8> <596B> <18D9> <5C39> <18DA> <6F64> <18DB> <73A7> <18DC> <80E4> <18DD> <8D07> <18DE> <9217> <18DF> <958F> <18E0> <807F> <18E1> <620E> <18E2> <701C> <18E3> <7D68> <18E4> <878D> <18E5> <57A0> <18E6> <6069> <18E7> <6147> <18E8> <6BB7> <18E9> <8ABE> <18EA> <9280> <18EB> <96B1> <18EC> <4E59> <18ED> <541F> <18EE> <6DEB> <18EF> <852D> <18F0> <9670> <18F1> <97F3> <18F2> <98EE> <18F3> <63D6> <18F4> <6CE3> <18F5> <9091> <18F6> <51DD> <18F7> <61C9> <18F8> <81BA> <18F9> <9DF9> <18FA> <4F9D> <18FB> <501A> <18FC> <5100> <18FD> <5B9C> <18FE> <610F> <18FF> <61FF> <1900> <64EC> <1901> <6905> <1902> <6BC5> <1903> <7591> <1904> <77E3> <1905> <7FA9> <1906> <8264> endbfchar 100 beginbfchar <1907> <858F> <1908> <87FB> <1909> <8863> <190A> <8ABC> <190B> <8B70> <190C> <91AB> <190D> <4E8C> <190E> <4EE5> <190F> <4F0A> <1910> <5937> <1911> <59E8> <1912> <5DF2> <1913> <5F1B> <1914> <5F5B> <1915> <6021> <1916> <723E> <1917> <73E5> <1918> <7570> <1919> <75CD> <191A> <79FB> <191B> <800C> <191C> <8033> <191D> <8084> <191E> <82E1> <191F> <8351> <1920> <8CBD> <1921> <8CB3> <1922> <9087> <1923> <98F4> <1924> <990C> <1925> <7037> <1926> <76CA> <1927> <7FCA> <1928> <7FCC> <1929> <7FFC> <192A> <8B1A> <192B> <4EBA> <192C> <4EC1> <192D> <5203> <192E> <5370> <192F> <54BD> <1930> <56E0> <1931> <59FB> <1932> <5BC5> <1933> <5F15> <1934> <5FCD> <1935> <6E6E> <1936> <7D6A> <1937> <8335> <1938> <8693> <1939> <8A8D> <193A> <976D> <193B> <9777> <193C> <4E00> <193D> <4F5A> <193E> <4F7E> <193F> <58F9> <1940> <65E5> <1941> <6EA2> <1942> <9038> <1943> <93B0> <1944> <99B9> <1945> <4EFB> <1946> <58EC> <1947> <598A> <1948> <59D9> <1949> <6041> <194A> <7A14> <194B> <834F> <194C> <8CC3> <194D> <5165> <194E> <5344> <194F> <4ECD> <1950> <5269> <1951> <5B55> <1952> <82BF> <1953> <4ED4> <1954> <523A> <1955> <54A8> <1956> <59C9> <1957> <59FF> <1958> <5B50> <1959> <5B57> <195A> <5B5C> <195B> <6063> <195C> <6148> <195D> <6ECB> <195E> <7099> <195F> <716E> <1960> <7386> <1961> <74F7> <1962> <75B5> <1963> <78C1> <1964> <7D2B> <1965> <8005> <1966> <81EA> <1967> <8328> <1968> <8517> <1969> <85C9> <196A> <8AEE> endbfchar 100 beginbfchar <196B> <8CC7> <196C> <96CC> <196D> <4F5C> <196E> <52FA> <196F> <56BC> <1970> <65AB> <1971> <6628> <1972> <707C> <1973> <70B8> <1974> <7235> <1975> <7DBD> <1976> <828D> <1977> <914C> <1978> <96C0> <1979> <9D72> <197A> <5B71> <197B> <68E7> <197C> <6B98> <197D> <6F7A> <197E> <76DE> <197F> <5C91> <1980> <66AB> <1981> <6F5B> <1982> <7BB4> <1983> <7C2A> <1984> <8836> <1985> <96DC> <1986> <4E08> <1987> <4ED7> <1988> <5320> <1989> <5834> <198A> <58BB> <198B> <58EF> <198C> <596C> <198D> <5C07> <198E> <5E33> <198F> <5E84> <1990> <5F35> <1991> <638C> <1992> <66B2> <1993> <6756> <1994> <6A1F> <1995> <6AA3> <1996> <6B0C> <1997> <6F3F> <1998> <7246> <1999> <7350> <199A> <748B> <199B> <7AE0> <199C> <7CA7> <199D> <8178> <199E> <81DF> <199F> <81E7> <19A0> <838A> <19A1> <846C> <19A2> <8523> <19A3> <8594> <19A4> <85CF> <19A5> <88DD> <19A6> <8D13> <19A7> <91AC> <19A8> <9577> <19A9> <969C> <19AA> <518D> <19AB> <54C9> <19AC> <5728> <19AD> <5BB0> <19AE> <624D> <19AF> <6750> <19B0> <683D> <19B1> <6893> <19B2> <6E3D> <19B3> <6ED3> <19B4> <707D> <19B5> <7E21> <19B6> <88C1> <19B7> <8CA1> <19B8> <8F09> <19B9> <9F4B> <19BA> <9F4E> <19BB> <722D> <19BC> <7B8F> <19BD> <8ACD> <19BE> <931A> <19BF> <4F47> <19C0> <4F4E> <19C1> <5132> <19C2> <5480> <19C3> <59D0> <19C4> <5E95> <19C5> <62B5> <19C6> <6775> <19C7> <696E> <19C8> <6A17> <19C9> <6CAE> <19CA> <6E1A> <19CB> <72D9> <19CC> <732A> <19CD> <75BD> <19CE> <7BB8> endbfchar 100 beginbfchar <19CF> <7D35> <19D0> <82E7> <19D1> <83F9> <19D2> <8457> <19D3> <85F7> <19D4> <8A5B> <19D5> <8CAF> <19D6> <8E87> <19D7> <9019> <19D8> <90B8> <19D9> <96CE> <19DA> <9F5F> <19DB> <52E3> <19DC> <540A> <19DD> <5AE1> <19DE> <5BC2> <19DF> <6458> <19E0> <6575> <19E1> <6EF4> <19E2> <72C4> <19E3> <7684> <19E4> <7A4D> <19E5> <7B1B> <19E6> <7C4D> <19E7> <7E3E> <19E8> <7FDF> <19E9> <837B> <19EA> <8B2B> <19EB> <8CCA> <19EC> <8D64> <19ED> <8DE1> <19EE> <8E5F> <19EF> <8FEA> <19F0> <8FF9> <19F1> <9069> <19F2> <93D1> <19F3> <4F43> <19F4> <4F7A> <19F5> <50B3> <19F6> <5168> <19F7> <5178> <19F8> <524D> <19F9> <526A> <19FA> <5861> <19FB> <587C> <19FC> <5960> <19FD> <5C08> <19FE> <5C55> <19FF> <5EDB> <1A00> <609B> <1A01> <6230> <1A02> <6813> <1A03> <6BBF> <1A04> <6C08> <1A05> <6FB1> <1A06> <714E> <1A07> <7420> <1A08> <7530> <1A09> <7538> <1A0A> <7551> <1A0B> <7672> <1A0C> <7B4C> <1A0D> <7B8B> <1A0E> <7BAD> <1A0F> <7BC6> <1A10> <7E8F> <1A11> <8A6E> <1A12> <8F3E> <1A13> <8F49> <1A14> <923F> <1A15> <9293> <1A16> <9322> <1A17> <942B> <1A18> <96FB> <1A19> <985A> <1A1A> <986B> <1A1B> <991E> <1A1C> <5207> <1A1D> <622A> <1A1E> <6298> <1A1F> <6D59> <1A20> <7664> <1A21> <7ACA> <1A22> <7BC0> <1A23> <7D76> <1A24> <5360> <1A25> <5CBE> <1A26> <5E97> <1A27> <6F38> <1A28> <70B9> <1A29> <7C98> <1A2A> <9711> <1A2B> <9B8E> <1A2C> <9EDE> <1A2D> <63A5> <1A2E> <647A> <1A2F> <8776> <1A30> <4E01> <1A31> <4E95> <1A32> <4EAD> endbfchar 100 beginbfchar <1A33> <505C> <1A34> <5075> <1A35> <5448> <1A36> <59C3> <1A37> <5B9A> <1A38> <5E40> <1A39> <5EAD> <1A3A> <5EF7> <1A3B> <5F81> <1A3C> <60C5> <1A3D> <633A> <1A3E> <653F> <1A3F> <6574> <1A40> <65CC> <1A41> <6676> <1A42> <6678> <1A43> <67FE> <1A44> <6968> <1A45> <6A89> <1A46> <6B63> <1A47> <6C40> <1A48> <6DC0> <1A49> <6DE8> <1A4A> <6E1F> <1A4B> <6E5E> <1A4C> <701E> <1A4D> <70A1> <1A4E> <738E> <1A4F> <73FD> <1A50> <753A> <1A51> <775B> <1A52> <7887> <1A53> <798E> <1A54> <7A0B> <1A55> <7A7D> <1A56> <7CBE> <1A57> <7D8E> <1A58> <8247> <1A59> <8A02> <1A5A> <8AEA> <1A5B> <8C9E> <1A5C> <912D> <1A5D> <914A> <1A5E> <91D8> <1A5F> <9266> <1A60> <92CC> <1A61> <9320> <1A62> <9706> <1A63> <9756> <1A64> <975C> <1A65> <9802> <1A66> <9F0E> <1A67> <5236> <1A68> <5291> <1A69> <557C> <1A6A> <5824> <1A6B> <5E1D> <1A6C> <5F1F> <1A6D> <608C> <1A6E> <63D0> <1A6F> <68AF> <1A70> <6FDF> <1A71> <796D> <1A72> <7B2C> <1A73> <81CD> <1A74> <85BA> <1A75> <88FD> <1A76> <8AF8> <1A77> <8E44> <1A78> <918D> <1A79> <9664> <1A7A> <969B> <1A7B> <973D> <1A7C> <984C> <1A7D> <9F4A> <1A7E> <4FCE> <1A7F> <5146> <1A80> <51CB> <1A81> <52A9> <1A82> <5632> <1A83> <5F14> <1A84> <5F6B> <1A85> <63AA> <1A86> <64CD> <1A87> <65E9> <1A88> <6641> <1A89> <66FA> <1A8A> <66F9> <1A8B> <671D> <1A8C> <689D> <1A8D> <68D7> <1A8E> <69FD> <1A8F> <6F15> <1A90> <6F6E> <1A91> <7167> <1A92> <71E5> <1A93> <722A> <1A94> <74AA> <1A95> <773A> <1A96> <7956> endbfchar 100 beginbfchar <1A97> <795A> <1A98> <79DF> <1A99> <7A20> <1A9A> <7A95> <1A9B> <7C97> <1A9C> <7CDF> <1A9D> <7D44> <1A9E> <7E70> <1A9F> <8087> <1AA0> <85FB> <1AA1> <86A4> <1AA2> <8A54> <1AA3> <8ABF> <1AA4> <8D99> <1AA5> <8E81> <1AA6> <9020> <1AA7> <906D> <1AA8> <91E3> <1AA9> <963B> <1AAA> <96D5> <1AAB> <9CE5> <1AAC> <65CF> <1AAD> <7C07> <1AAE> <8DB3> <1AAF> <93C3> <1AB0> <5B58> <1AB1> <5C0A> <1AB2> <5352> <1AB3> <62D9> <1AB4> <731D> <1AB5> <5027> <1AB6> <5B97> <1AB7> <5F9E> <1AB8> <60B0> <1AB9> <616B> <1ABA> <68D5> <1ABB> <6DD9> <1ABC> <742E> <1ABD> <7A2E> <1ABE> <7D42> <1ABF> <7D9C> <1AC0> <7E31> <1AC1> <816B> <1AC2> <8E2A> <1AC3> <8E35> <1AC4> <937E> <1AC5> <9418> <1AC6> <4F50> <1AC7> <5750> <1AC8> <5DE6> <1AC9> <5EA7> <1ACA> <632B> <1ACB> <7F6A> <1ACC> <4E3B> <1ACD> <4F4F> <1ACE> <4F8F> <1ACF> <505A> <1AD0> <59DD> <1AD1> <80C4> <1AD2> <546A> <1AD3> <5468> <1AD4> <55FE> <1AD5> <594F> <1AD6> <5B99> <1AD7> <5DDE> <1AD8> <5EDA> <1AD9> <665D> <1ADA> <6731> <1ADB> <67F1> <1ADC> <682A> <1ADD> <6CE8> <1ADE> <6D32> <1ADF> <6E4A> <1AE0> <6F8D> <1AE1> <70B7> <1AE2> <73E0> <1AE3> <7587> <1AE4> <7C4C> <1AE5> <7D02> <1AE6> <7D2C> <1AE7> <7DA2> <1AE8> <821F> <1AE9> <86DB> <1AEA> <8A3B> <1AEB> <8A85> <1AEC> <8D70> <1AED> <8E8A> <1AEE> <8F33> <1AEF> <9031> <1AF0> <914E> <1AF1> <9152> <1AF2> <9444> <1AF3> <99D0> <1AF4> <7AF9> <1AF5> <7CA5> <1AF6> <4FCA> <1AF7> <5101> <1AF8> <51C6> <1AF9> <57C8> <1AFA> <5BEF> endbfchar 100 beginbfchar <1AFB> <5CFB> <1AFC> <6659> <1AFD> <6A3D> <1AFE> <6D5A> <1AFF> <6E96> <1B00> <6FEC> <1B01> <710C> <1B02> <756F> <1B03> <7AE3> <1B04> <8822> <1B05> <9021> <1B06> <9075> <1B07> <96CB> <1B08> <99FF> <1B09> <8301> <1B0A> <4E2D> <1B0B> <4EF2> <1B0C> <8846> <1B0D> <91CD> <1B0E> <537D> <1B0F> <6ADB> <1B10> <696B> <1B11> <6C41> <1B12> <847A> <1B13> <589E> <1B14> <618E> <1B15> <66FE> <1B16> <62EF> <1B17> <70DD> <1B18> <7511> <1B19> <75C7> <1B1A> <7E52> <1B1B> <84B8> <1B1C> <8B49> <1B1D> <8D08> <1B1E> <4E4B> <1B1F> <53EA> <1B20> <54AB> <1B21> <5730> <1B22> <5740> <1B23> <5FD7> <1B24> <6301> <1B25> <6307> <1B26> <646F> <1B27> <652F> <1B28> <65E8> <1B29> <667A> <1B2A> <679D> <1B2B> <67B3> <1B2C> <6B62> <1B2D> <6C60> <1B2E> <6C9A> <1B2F> <6F2C> <1B30> <77E5> <1B31> <7825> <1B32> <7949> <1B33> <7957> <1B34> <7D19> <1B35> <80A2> <1B36> <8102> <1B37> <81F3> <1B38> <829D> <1B39> <82B7> <1B3A> <8718> <1B3B> <8A8C> <1B3C> <8D04> <1B3D> <8DBE> <1B3E> <9072> <1B3F> <76F4> <1B40> <7A19> <1B41> <7A37> <1B42> <7E54> <1B43> <8077> <1B44> <5507> <1B45> <55D4> <1B46> <5875> <1B47> <632F> <1B48> <6422> <1B49> <6649> <1B4A> <664B> <1B4B> <686D> <1B4C> <699B> <1B4D> <6B84> <1B4E> <6D25> <1B4F> <6EB1> <1B50> <73CD> <1B51> <7468> <1B52> <74A1> <1B53> <755B> <1B54> <75B9> <1B55> <76E1> <1B56> <771E> <1B57> <778B> <1B58> <79E6> <1B59> <7E09> <1B5A> <7E1D> <1B5B> <81FB> <1B5C> <852F> <1B5D> <8897> <1B5E> <8A3A> endbfchar 100 beginbfchar <1B5F> <8CD1> <1B60> <8EEB> <1B61> <8FB0> <1B62> <9032> <1B63> <93AD> <1B64> <9663> <1B65> <9673> <1B66> <9707> <1B67> <4F84> <1B68> <53F1> <1B69> <59EA> <1B6A> <5AC9> <1B6B> <5E19> <1B6C> <684E> <1B6D> <74C6> <1B6E> <75BE> <1B6F> <79E9> <1B70> <7A92> <1B71> <81A3> <1B72> <86ED> <1B73> <8CEA> <1B74> <8DCC> <1B75> <8FED> <1B76> <659F> <1B77> <6715> <1B78> <57F7> <1B79> <6F57> <1B7A> <7DDD> <1B7B> <8F2F> <1B7C> <93F6> <1B7D> <96C6> <1B7E> <5FB5> <1B7F> <61F2> <1B80> <6F84> <1B81> <4E14> <1B82> <4F98> <1B83> <501F> <1B84> <53C9> <1B85> <55DF> <1B86> <5D6F> <1B87> <5DEE> <1B88> <6B21> <1B89> <6B64> <1B8A> <78CB> <1B8B> <7B9A> <1B8C> <8E49> <1B8D> <8ECA> <1B8E> <906E> <1B8F> <6349> <1B90> <643E> <1B91> <7740> <1B92> <7A84> <1B93> <932F> <1B94> <947F> <1B95> <9F6A> <1B96> <64B0> <1B97> <6FAF> <1B98> <71E6> <1B99> <74A8> <1B9A> <74DA> <1B9B> <7AC4> <1B9C> <7C12> <1B9D> <7E82> <1B9E> <7CB2> <1B9F> <7E98> <1BA0> <8B9A> <1BA1> <8D0A> <1BA2> <947D> <1BA3> <9910> <1BA4> <994C> <1BA5> <5239> <1BA6> <5BDF> <1BA7> <64E6> <1BA8> <672D> <1BA9> <7D2E> <1BAA> <50ED> <1BAB> <53C3> <1BAC> <5879> <1BAF> <61FA> <1BB0> <65AC> <1BB1> <7AD9> <1BB2> <8B92> <1BB3> <8B96> <1BB4> <5009> <1BB5> <5021> <1BB6> <5275> <1BB7> <5531> <1BB8> <5A3C> <1BB9> <5EE0> <1BBA> <5F70> <1BBB> <6134> <1BBC> <655E> <1BBD> <660C> <1BBE> <6636> <1BBF> <66A2> <1BC0> <69CD> <1BC1> <6EC4> <1BC2> <6F32> <1BC3> <7316> <1BC4> <7621> endbfchar 100 beginbfchar <1BC5> <7A93> <1BC6> <8139> <1BC7> <8259> <1BC8> <83D6> <1BC9> <84BC> <1BCA> <50B5> <1BCB> <57F0> <1BCC> <5BC0> <1BCD> <5BE8> <1BCE> <5F69> <1BCF> <63A1> <1BD0> <7826> <1BD1> <7DB5> <1BD2> <83DC> <1BD3> <8521> <1BD4> <91C7> <1BD5> <91F5> <1BD6> <518A> <1BD7> <67F5> <1BD8> <7B56> <1BD9> <8CAC> <1BDA> <51C4> <1BDB> <59BB> <1BDC> <60BD> <1BDD> <8655> <1BDE> <501C> <1BDF> <5254> <1BE0> <5C3A> <1BE1> <617D> <1BE2> <621A> <1BE3> <62D3> <1BE4> <64F2> <1BE5> <65A5> <1BE6> <6ECC> <1BE7> <7620> <1BE8> <810A> <1BE9> <8E60> <1BEA> <965F> <1BEB> <96BB> <1BEC> <4EDF> <1BED> <5343> <1BEE> <5598> <1BEF> <5929> <1BF0> <5DDD> <1BF1> <64C5> <1BF2> <6CC9> <1BF3> <6DFA> <1BF4> <7394> <1BF5> <7A7F> <1BF6> <821B> <1BF7> <85A6> <1BF8> <8CE4> <1BF9> <8E10> <1BFA> <9077> <1BFB> <91E7> <1BFC> <95E1> <1BFD> <9621> <1BFE> <97C6> <1BFF> <51F8> <1C00> <54F2> <1C01> <5586> <1C02> <5FB9> <1C03> <64A4> <1C04> <6F88> <1C05> <7DB4> <1C06> <8F1F> <1C07> <8F4D> <1C08> <9435> <1C09> <50C9> <1C0A> <5C16> <1C0B> <6CBE> <1C0C> <6DFB> <1C0D> <751B> <1C0E> <77BB> <1C0F> <7C3D> <1C10> <7C64> <1C11> <8A79> <1C12> <8AC2> <1C13> <581E> <1C14> <59BE> <1C15> <5E16> <1C16> <6377> <1C17> <7252> <1C18> <758A> <1C19> <776B> <1C1A> <8ADC> <1C1B> <8CBC> <1C1C> <8F12> <1C1D> <5EF3> <1C1E> <6674> <1C1F> <6DF8> <1C20> <807D> <1C21> <83C1> <1C22> <8ACB> <1C23> <9751> <1C24> <9BD6> <1C25> <5243> <1C26> <66FF> <1C27> <6D95> <1C28> <6EEF> endbfchar 100 beginbfchar <1C29> <7DE0> <1C2A> <8AE6> <1C2B> <902E> <1C2C> <905E> <1C2D> <9AD4> <1C2E> <521D> <1C2F> <527F> <1C30> <54E8> <1C31> <6194> <1C32> <6284> <1C33> <62DB> <1C34> <68A2> <1C35> <6912> <1C36> <695A> <1C37> <6A35> <1C38> <7092> <1C39> <7126> <1C3A> <785D> <1C3B> <7901> <1C3C> <790E> <1C3D> <79D2> <1C3E> <7A0D> <1C3F> <8096> <1C40> <8278> <1C41> <82D5> <1C42> <8349> <1C43> <8549> <1C44> <8C82> <1C45> <8D85> <1C46> <9162> <1C47> <918B> <1C48> <91AE> <1C49> <4FC3> <1C4A> <56D1> <1C4B> <71ED> <1C4C> <77D7> <1C4D> <8700> <1C4E> <89F8> <1C4F> <5BF8> <1C50> <5FD6> <1C51> <6751> <1C52> <90A8> <1C53> <53E2> <1C54> <585A> <1C55> <5BF5> <1C56> <60A4> <1C57> <6181> <1C58> <6460> <1C59> <7E3D> <1C5A> <8070> <1C5B> <8525> <1C5C> <9283> <1C5D> <64AE> <1C5E> <50AC> <1C5F> <5D14> <1C60> <6700> <1C61> <589C> <1C62> <62BD> <1C63> <63A8> <1C64> <690E> <1C65> <6978> <1C66> <6A1E> <1C67> <6E6B> <1C68> <76BA> <1C69> <79CB> <1C6A> <82BB> <1C6B> <8429> <1C6C> <8ACF> <1C6D> <8DA8> <1C6E> <8FFD> <1C6F> <9112> <1C70> <914B> <1C71> <919C> <1C72> <9310> <1C73> <9318> <1C74> <939A> <1C75> <96DB> <1C76> <9A36> <1C77> <9C0D> <1C78> <4E11> <1C79> <755C> <1C7A> <795D> <1C7B> <7AFA> <1C7C> <7B51> <1C7D> <7BC9> <1C7E> <7E2E> <1C7F> <84C4> <1C80> <8E59> <1C81> <8E74> <1C82> <8EF8> <1C83> <9010> <1C84> <6625> <1C85> <693F> <1C86> <7443> <1C87> <51FA> <1C88> <672E> <1C89> <9EDC> <1C8A> <5145> <1C8B> <5FE0> <1C8C> <6C96> endbfchar 100 beginbfchar <1C8D> <87F2> <1C8E> <885D> <1C8F> <8877> <1C90> <60B4> <1C91> <81B5> <1C92> <8403> <1C93> <8D05> <1C94> <53D6> <1C95> <5439> <1C96> <5634> <1C97> <5A36> <1C98> <5C31> <1C99> <708A> <1C9A> <7FE0> <1C9B> <805A> <1C9C> <8106> <1C9D> <81ED> <1C9E> <8DA3> <1C9F> <9189> <1CA0> <9A5F> <1CA1> <9DF2> <1CA2> <5074> <1CA3> <4EC4> <1CA4> <53A0> <1CA5> <60FB> <1CA6> <6E2C> <1CA7> <5C64> <1CA8> <4F88> <1CA9> <5024> <1CAA> <55E4> <1CAB> <5CD9> <1CAC> <5E5F> <1CAD> <6065> <1CAE> <6894> <1CAF> <6CBB> <1CB0> <6DC4> <1CB1> <71BE> <1CB2> <75D4> <1CB3> <75F4> <1CB4> <7661> <1CB5> <7A1A> <1CB6> <7A49> <1CB7> <7DC7> <1CB8> <7DFB> <1CB9> <7F6E> <1CBA> <81F4> <1CBB> <86A9> <1CBC> <8F1C> <1CBD> <96C9> <1CBE> <99B3> <1CBF> <9F52> <1CC0> <5247> <1CC1> <52C5> <1CC2> <98ED> <1CC3> <89AA> <1CC4> <4E03> <1CC5> <67D2> <1CC6> <6F06> <1CC7> <4FB5> <1CC8> <5BE2> <1CC9> <6795> <1CCA> <6C88> <1CCB> <6D78> <1CCC> <741B> <1CCD> <7827> <1CCE> <91DD> <1CCF> <937C> <1CD0> <87C4> <1CD1> <79E4> <1CD2> <7A31> <1CD3> <5FEB> <1CD4> <4ED6> <1CD5> <54A4> <1CD6> <553E> <1CD7> <58AE> <1CD8> <59A5> <1CD9> <60F0> <1CDA> <6253> <1CDB> <62D6> <1CDC> <6736> <1CDD> <6955> <1CDE> <8235> <1CDF> <9640> <1CE0> <99B1> <1CE1> <99DD> <1CE2> <502C> <1CE3> <5353> <1CE4> <5544> <1CE5> <577C> <1CE6> <6258> <1CE7> <64E2> <1CE8> <666B> <1CE9> <67DD> <1CEA> <6FC1> <1CEB> <6FEF> <1CEC> <7422> <1CED> <7438> <1CEE> <8A17> <1CEF> <9438> <1CF0> <5451> endbfchar 100 beginbfchar <1CF1> <5606> <1CF2> <5766> <1CF3> <5F48> <1CF4> <619A> <1CF5> <6B4E> <1CF6> <7058> <1CF7> <70AD> <1CF8> <7DBB> <1CF9> <8A95> <1CFA> <596A> <1CFB> <812B> <1CFC> <63A2> <1CFD> <7708> <1CFE> <803D> <1CFF> <8CAA> <1D00> <5854> <1D01> <642D> <1D02> <69BB> <1D03> <5B95> <1D04> <5E11> <1D05> <6E6F> <1D06> <8569> <1D07> <514C> <1D08> <53F0> <1D09> <592A> <1D0A> <6020> <1D0B> <614B> <1D0C> <6B86> <1D0D> <6C70> <1D0E> <6CF0> <1D0F> <7B1E> <1D10> <80CE> <1D11> <82D4> <1D12> <8DC6> <1D13> <90B0> <1D14> <98B1> <1D15> <64C7> <1D16> <6FA4> <1D17> <6491> <1D18> <6504> <1D19> <514E> <1D1A> <5410> <1D1B> <571F> <1D1C> <8A0E> <1D1D> <615F> <1D1E> <6876> <1D1F> <75DB> <1D20> <7B52> <1D21> <7D71> <1D22> <901A> <1D23> <5806> <1D24> <69CC> <1D25> <817F> <1D26> <892A> <1D27> <9000> <1D28> <9839> <1D29> <5078> <1D2A> <5957> <1D2B> <59AC> <1D2C> <6295> <1D2D> <900F> <1D2E> <9B2A> <1D2F> <615D> <1D30> <7279> <1D31> <95D6> <1D32> <5761> <1D33> <5A46> <1D34> <5DF4> <1D35> <628A> <1D36> <64AD> <1D37> <64FA> <1D38> <6777> <1D39> <6CE2> <1D3A> <6D3E> <1D3B> <722C> <1D3C> <7436> <1D3D> <7834> <1D3E> <7F77> <1D3F> <82AD> <1D40> <8DDB> <1D41> <9817> <1D42> <5224> <1D43> <5742> <1D44> <677F> <1D45> <7248> <1D46> <74E3> <1D47> <8CA9> <1D48> <8FA6> <1D49> <9211> <1D4A> <962A> <1D4B> <516B> <1D4C> <53ED> <1D4D> <634C> <1D4E> <4F69> <1D4F> <5504> <1D50> <6096> <1D51> <6557> <1D52> <6C9B> <1D53> <6D7F> <1D54> <724C> endbfchar 100 beginbfchar <1D55> <72FD> <1D56> <7A17> <1D57> <8987> <1D58> <8C9D> <1D59> <5F6D> <1D5A> <6F8E> <1D5B> <70F9> <1D5C> <81A8> <1D5D> <610E> <1D5E> <4FBF> <1D5F> <504F> <1D60> <6241> <1D61> <7247> <1D62> <7BC7> <1D63> <7DE8> <1D64> <7FE9> <1D65> <904D> <1D66> <97AD> <1D67> <9A19> <1D68> <8CB6> <1D69> <576A> <1D6A> <5E73> <1D6B> <67B0> <1D6C> <840D> <1D6D> <8A55> <1D6E> <5420> <1D6F> <5B16> <1D70> <5E63> <1D71> <5EE2> <1D72> <5F0A> <1D73> <6583> <1D74> <80BA> <1D75> <853D> <1D76> <9589> <1D77> <965B> <1D78> <4F48> <1D79> <5305> <1D7A> <530D> <1D7B> <530F> <1D7C> <5486> <1D7D> <54FA> <1D7E> <5703> <1D7F> <5E03> <1D80> <6016> <1D81> <629B> <1D82> <62B1> <1D83> <6355> <1D84> <6CE1> <1D85> <6D66> <1D86> <75B1> <1D87> <7832> <1D88> <80DE> <1D89> <812F> <1D8A> <82DE> <1D8B> <8461> <1D8C> <84B2> <1D8D> <888D> <1D8E> <8912> <1D8F> <900B> <1D90> <92EA> <1D91> <98FD> <1D92> <9B91> <1D93> <5E45> <1D94> <66B4> <1D95> <66DD> <1D96> <7011> <1D97> <7206> <1D98> <4FF5> <1D99> <527D> <1D9A> <5F6A> <1D9B> <6153> <1D9C> <6753> <1D9D> <6A19> <1D9E> <6F02> <1D9F> <74E2> <1DA0> <7968> <1DA1> <8868> <1DA2> <8C79> <1DA3> <98C7> <1DA4> <98C4> <1DA5> <9A43> <1DA6> <54C1> <1DA7> <7A1F> <1DA8> <6953> <1DA9> <8AF7> <1DAA> <8C4A> <1DAB> <98A8> <1DAC> <99AE> <1DAD> <5F7C> <1DAE> <62AB> <1DAF> <75B2> <1DB0> <76AE> <1DB1> <88AB> <1DB2> <907F> <1DB3> <9642> <1DB4> <5339> <1DB5> <5F3C> <1DB6> <5FC5> <1DB7> <6CCC> <1DB8> <73CC> endbfchar 100 beginbfchar <1DB9> <7562> <1DBA> <758B> <1DBB> <7B46> <1DBC> <82FE> <1DBD> <999D> <1DBE> <4E4F> <1DBF> <903C> <1DC0> <4E0B> <1DC1> <4F55> <1DC2> <53A6> <1DC3> <590F> <1DC4> <5EC8> <1DC5> <6630> <1DC6> <6CB3> <1DC7> <7455> <1DC8> <8377> <1DC9> <8766> <1DCA> <8CC0> <1DCB> <9050> <1DCC> <971E> <1DCD> <9C15> <1DCE> <58D1> <1DCF> <5B78> <1DD0> <8650> <1DD1> <8B14> <1DD2> <9DB4> <1DD3> <5BD2> <1DD4> <6068> <1DD5> <608D> <1DD6> <65F1> <1DD7> <6C57> <1DD8> <6F22> <1DD9> <6FA3> <1DDA> <701A> <1DDB> <7F55> <1DDC> <7FF0> <1DDF> <9650> <1DE0> <97D3> <1DE1> <5272> <1DE2> <8F44> <1DE3> <51FD> <1DE4> <542B> <1DE5> <54B8> <1DE6> <5563> <1DE7> <558A> <1DE8> <6ABB> <1DE9> <6DB5> <1DEA> <7DD8> <1DEB> <8266> <1DEC> <929C> <1DED> <9677> <1DEE> <9E79> <1DEF> <5408> <1DF0> <54C8> <1DF1> <76D2> <1DF2> <86E4> <1DF3> <95A4> <1DF4> <95D4> <1DF5> <965C> <1DF6> <4EA2> <1DF7> <4F09> <1DF8> <59EE> <1DF9> <5AE6> <1DFA> <5DF7> <1DFB> <6052> <1DFC> <6297> <1DFD> <676D> <1DFE> <6841> <1DFF> <6C86> <1E00> <6E2F> <1E01> <7F38> <1E02> <809B> <1E03> <822A> <1E04> <9805> <1E05> <4EA5> <1E06> <5055> <1E07> <54B3> <1E08> <5793> <1E09> <595A> <1E0A> <5B69> <1E0B> <5BB3> <1E0C> <61C8> <1E0D> <6977> <1E0E> <6D77> <1E0F> <7023> <1E10> <87F9> <1E11> <89E3> <1E12> <8A72> <1E13> <8AE7> <1E14> <9082> <1E15> <99ED> <1E16> <9AB8> <1E17> <52BE> <1E18> <6838> <1E19> <5016> <1E1A> <5E78> <1E1B> <674F> <1E1C> <8347> <1E1D> <884C> <1E1E> <4EAB> endbfchar 100 beginbfchar <1E1F> <5411> <1E20> <56AE> <1E21> <73E6> <1E22> <9115> <1E23> <97FF> <1E24> <9909> <1E25> <9957> <1E26> <9999> <1E27> <5653> <1E28> <589F> <1E29> <865B> <1E2A> <8A31> <1E2B> <61B2> <1E2C> <6AF6> <1E2D> <737B> <1E2E> <8ED2> <1E2F> <6B47> <1E30> <96AA> <1E31> <9A57> <1E32> <5955> <1E33> <7200> <1E34> <8D6B> <1E35> <9769> <1E36> <4FD4> <1E37> <5CF4> <1E38> <5F26> <1E39> <61F8> <1E3A> <665B> <1E3B> <6CEB> <1E3C> <70AB> <1E3D> <7384> <1E3E> <73B9> <1E3F> <73FE> <1E40> <7729> <1E41> <774D> <1E42> <7D43> <1E43> <7D62> <1E44> <7E23> <1E45> <8237> <1E46> <8852> <1E47> <8CE2> <1E48> <9249> <1E49> <986F> <1E4A> <5B51> <1E4B> <7A74> <1E4C> <8840> <1E4D> <9801> <1E4E> <5ACC> <1E4F> <4FE0> <1E50> <5354> <1E51> <593E> <1E52> <5CFD> <1E53> <633E> <1E54> <6D79> <1E55> <72F9> <1E56> <8105> <1E57> <8107> <1E58> <83A2> <1E59> <92CF> <1E5A> <9830> <1E5B> <4EA8> <1E5C> <5144> <1E5D> <5211> <1E5E> <578B> <1E5F> <5F62> <1E60> <6CC2> <1E61> <6ECE> <1E62> <7005> <1E63> <7050> <1E64> <70AF> <1E65> <7192> <1E66> <73E9> <1E67> <7469> <1E68> <834A> <1E69> <87A2> <1E6A> <8861> <1E6B> <9008> <1E6C> <90A2> <1E6D> <93A3> <1E6E> <99A8> <1E6F> <516E> <1E70> <5F57> <1E71> <60E0> <1E72> <6167> <1E73> <66B3> <1E74> <8559> <1E75> <8E4A> <1E76> <91AF> <1E77> <978B> <1E78> <4E4E> <1E79> <4E92> <1E7A> <547C> <1E7B> <58D5> <1E7C> <58FA> <1E7D> <597D> <1E7E> <5CB5> <1E7F> <5F27> <1E80> <6236> <1E81> <6248> <1E82> <660A> endbfchar 100 beginbfchar <1E83> <6667> <1E84> <6BEB> <1E85> <6D69> <1E86> <6DCF> <1E87> <6E56> <1E88> <6EF8> <1E89> <6F94> <1E8A> <6FE0> <1E8B> <6FE9> <1E8C> <705D> <1E8D> <72D0> <1E8E> <7425> <1E8F> <745A> <1E90> <74E0> <1E91> <7693> <1E92> <795C> <1E93> <7CCA> <1E94> <7E1E> <1E95> <80E1> <1E96> <82A6> <1E97> <846B> <1E98> <84BF> <1E99> <864E> <1E9A> <865F> <1E9B> <8774> <1E9C> <8B77> <1E9D> <8C6A> <1E9E> <93AC> <1E9F> <9800> <1EA0> <9865> <1EA1> <60D1> <1EA2> <6216> <1EA3> <9177> <1EA4> <5A5A> <1EA5> <660F> <1EA6> <6DF7> <1EA7> <6E3E> <1EA8> <743F> <1EA9> <9B42> <1EAA> <5FFD> <1EAB> <60DA> <1EAC> <7B0F> <1EAD> <54C4> <1EAE> <5F18> <1EAF> <6C5E> <1EB0> <6CD3> <1EB1> <6D2A> <1EB2> <70D8> <1EB3> <7D05> <1EB4> <8679> <1EB5> <8A0C> <1EB6> <9D3B> <1EB7> <5316> <1EB8> <548C> <1EB9> <5B05> <1EBA> <6A3A> <1EBB> <706B> <1EBC> <7575> <1EBD> <798D> <1EBE> <79BE> <1EBF> <82B1> <1EC0> <83EF> <1EC1> <8A71> <1EC2> <8B41> <1EC3> <8CA8> <1EC4> <9774> <1EC5> <64F4> <1EC6> <652B> <1EC9> <7A6B> <1ECA> <4E38> <1ECB> <559A> <1ECC> <5950> <1ECD> <5BA6> <1ECE> <5E7B> <1ECF> <60A3> <1ED0> <63DB> <1ED1> <6B61> <1ED2> <6665> <1ED3> <6853> <1ED4> <6E19> <1ED5> <7165> <1ED6> <74B0> <1ED7> <7D08> <1ED8> <9084> <1ED9> <9A69> <1EDA> <9C25> <1EDB> <6D3B> <1EDC> <6ED1> <1EDD> <733E> <1EDE> <8C41> <1EDF> <95CA> <1EE0> <51F0> <1EE1> <5E4C> <1EE2> <5FA8> <1EE3> <604D> <1EE4> <60F6> <1EE5> <6130> <1EE6> <614C> <1EE9> <69A5> <1EEA> <6CC1> endbfchar 100 beginbfchar <1EEB> <6E5F> <1EEC> <6EC9> <1EED> <6F62> <1EEE> <714C> <1EEF> <749C> <1EF0> <7687> <1EF1> <7BC1> <1EF2> <7C27> <1EF3> <8352> <1EF4> <8757> <1EF5> <9051> <1EF6> <968D> <1EF7> <9EC3> <1EF8> <532F> <1EF9> <56DE> <1EFA> <5EFB> <1EFB> <5F8A> <1EFC> <6062> <1EFD> <6094> <1EFE> <61F7> <1EFF> <6666> <1F00> <6703> <1F01> <6A9C> <1F02> <6DEE> <1F03> <6FAE> <1F04> <7070> <1F05> <736A> <1F06> <7E6A> <1F07> <81BE> <1F08> <8334> <1F09> <86D4> <1F0A> <8AA8> <1F0B> <8CC4> <1F0C> <5283> <1F0D> <7372> <1F0E> <5B96> <1F0F> <6A6B> <1F10> <9404> <1F11> <54EE> <1F12> <5686> <1F13> <5B5D> <1F14> <6548> <1F15> <6585> <1F16> <66C9> <1F17> <689F> <1F18> <6D8D> <1F19> <6DC6> <1F1A> <723B> <1F1B> <80B4> <1F1C> <9175> <1F1D> <9A4D> <1F1E> <4FAF> <1F1F> <5019> <1F20> <539A> <1F21> <540E> <1F22> <543C> <1F23> <5589> <1F24> <55C5> <1F25> <5E3F> <1F26> <5F8C> <1F27> <673D> <1F28> <7166> <1F29> <73DD> <1F2A> <9005> <1F2B> <52DB> <1F2C> <52F3> <1F2D> <5864> <1F2E> <58CE> <1F2F> <7104> <1F30> <718F> <1F31> <71FB> <1F32> <85B0> <1F33> <8A13> <1F34> <6688> <1F35> <85A8> <1F36> <55A7> <1F37> <6684> <1F38> <714A> <1F39> <8431> <1F3A> <5349> <1F3B> <5599> <1F3C> <6BC1> <1F3D> <5F59> <1F3E> <5FBD> <1F3F> <63EE> <1F40> <6689> <1F41> <7147> <1F42> <8AF1> <1F43> <8F1D> <1F44> <9EBE> <1F45> <4F11> <1F46> <643A> <1F47> <70CB> <1F48> <7566> <1F49> <8667> <1F4A> <6064> <1F4B> <8B4E> <1F4C> <9DF8> <1F4D> <5147> <1F4E> <51F6> endbfchar 100 beginbfchar <1F4F> <5308> <1F50> <6D36> <1F51> <80F8> <1F52> <9ED1> <1F53> <6615> <1F54> <6B23> <1F55> <7098> <1F56> <75D5> <1F57> <5403> <1F58> <5C79> <1F59> <7D07> <1F5A> <8A16> <1F5B> <6B20> <1F5C> <6B3D> <1F5D> <6B46> <1F5E> <5438> <1F5F> <6070> <1F60> <6D3D> <1F61> <7FD5> <1F62> <8208> <1F63> <50D6> <1F64> <51DE> <1F65> <559C> <1F66> <566B> <1F67> <56CD> <1F68> <59EC> <1F69> <5B09> <1F6A> <5E0C> <1F6B> <6199> <1F6C> <6198> <1F6D> <6231> <1F6E> <665E> <1F6F> <66E6> <1F70> <7199> <1F73> <72A7> <1F74> <79A7> <1F75> <7A00> <1F76> <7FB2> <1F77> <8A70> <1F7A> <2025> <1F7B> <00AD> <1F7C> <2015> <1F7D> <2225> <1F7E> <1F8B> <3013> <1F8C> <1F8F> <1F90> <1F97> <1F98> <1F99> <1FFC> <203E> <1FFD> <007E> <1FFE> <005C> <1FFF> <231C> <2000> <231F> <200F> <00280028> <2010> <00290029> <2011> <00280028> <2012> <00290029> <201F> <005B> <2020> <005D> <2023> <263E> <2024> <263D> <2025> <2021> <2026> <2021> <202A> <2217> <202D> <201F> <202E> <201B> <2031> <00D7> <2032> <221E> <2034> <00B1> <2035> <2213> <2036> <003E> <2039> <2260> <203C> <007B> <203D> <007D> <2042> <2282> <2043> <2208> <2044> <03A3> <2045> <0021> <204D> <4E03> <2050> <5341> <2053> <0027> <2056> <002A> <2058> <2217> <2059> <002A> <205A> <205D> <00280028> <205E> <00290029> <205F> <00280028> <2060> <00290029> <2069> <003120DE> <206A> <003220DE> <206B> <003320DE> <206C> <003420DE> <206D> <003520DE> <206E> <003620DE> <206F> <003720DE> <2070> <003820DE> endbfchar 100 beginbfchar <2071> <003920DE> <2072> <005B00310030005D> <2073> <005B00310031005D> <2074> <005B00310032005D> <2075> <005B00310033005D> <2076> <005B00310034005D> <2077> <005B00310035005D> <2078> <005B00310036005D> <2079> <005B00310037005D> <207A> <005B00310038005D> <207B> <005B00310039005D> <207C> <005B00320030005D> <207D> <00B6> <2080> <22EF> <2081> <2237> <2082> <003120DE> <2083> <003220DE> <2084> <003320DE> <2085> <003420DE> <2086> <003520DE> <2087> <003620DE> <2088> <003720DE> <2089> <003820DE> <208A> <003920DE> <208B> <005B00310030005D> <208C> <005B00310031005D> <208D> <005B00310032005D> <208E> <005B00310033005D> <208F> <005B00310034005D> <2090> <005B00310035005D> <2091> <005B00310036005D> <2092> <005B00310037005D> <2093> <005B00310038005D> <2094> <005B00310039005D> <2095> <005B00320030005D> <20AA> <002800410029> <20AB> <002800420029> <20AC> <002800430029> <20AD> <002800440029> <20AE> <002800450029> <20AF> <002800460029> <20B0> <002800470029> <20B1> <002800480029> <20B2> <002800490029> <20B3> <0028004A0029> <20B4> <0028004B0029> <20B5> <0028004C0029> <20B6> <0028004D0029> <20B7> <0028004E0029> <20B8> <0028004F0029> <20B9> <002800500029> <20BA> <002800510029> <20BB> <002800520029> <20BC> <002800530029> <20BD> <002800540029> <20BE> <002800550029> <20BF> <002800560029> <20C0> <002800570029> <20C1> <002800580029> <20C2> <002800590029> <20C3> <0028005A0029> <20DE> <003120DE> <20DF> <003220DE> <20E0> <003320DE> <20E1> <003420DE> <20E2> <003520DE> <20E3> <003620DE> <20E4> <003720DE> <20E5> <003820DE> <20E6> <003920DE> <20E7> <005B00310030005D> <20E8> <005B00310031005D> <20E9> <005B00310032005D> <20EA> <005B00310033005D> <20EB> <005B00310034005D> <20EC> <005B00310035005D> <20ED> <005B00310036005D> <20EE> <005B00310037005D> <20EF> <005B00310038005D> <20F0> <005B00310039005D> <20F1> <005B00320030005D> <20F2> <003120DE> <20F3> <003220DE> <20F4> <003320DE> <20F5> <003420DE> <20F6> <003520DE> <20F7> <003620DE> <20F8> <003720DE> <20F9> <003820DE> <20FA> <003920DE> <20FB> <005B00310030005D> <20FC> <005B00310031005D> <20FD> <005B00310032005D> <20FE> <005B00310033005D> <20FF> <005B00310034005D> <2100> <005B00310035005D> <2101> <005B00310036005D> <2102> <005B00310037005D> <2103> <005B00310038005D> <2104> <005B00310039005D> endbfchar 100 beginbfchar <2105> <005B00320030005D> <211B> <22CF> <211E> <22CE> <2126> <228A> <2128> <228B> <212B> <2279> <2132> <2221> <2133> <2245> <2134> <2243> <2135> <2248> <2137> <22A4> <2138> <22AB> <213A> <003020DE> <213B> <003120DE> <213C> <003220DE> <213D> <003320DE> <213E> <003420DE> <213F> <003520DE> <2140> <003620DE> <2141> <003720DE> <2142> <003820DE> <2143> <003920DE> <214E> <00410029> <214F> <00420029> <2150> <00430029> <2151> <00440029> <2152> <00450029> <2153> <00460029> <2154> <00470029> <2155> <00480029> <2156> <00490029> <2157> <004A0029> <2158> <004B0029> <2159> <004C0029> <215A> <004D0029> <215B> <004E0029> <215C> <004F0029> <215D> <00500029> <215E> <00510029> <215F> <00520029> <2160> <00530029> <2161> <00540029> <2162> <00550029> <2163> <00560029> <2164> <00570029> <2165> <00580029> <2166> <00590029> <2167> <005A0029> <2168> <00610029> <2169> <00620029> <216A> <00630029> <216B> <00640029> <216C> <00650029> <216D> <00660029> <216E> <00670029> <216F> <00680029> <2170> <00690029> <2171> <006A0029> <2172> <006B0029> <2173> <006C0029> <2174> <006D0029> <2175> <006E0029> <2176> <006F0029> <2177> <00700029> <2178> <00710029> <2179> <00720029> <217A> <00730029> <217B> <00740029> <217C> <00750029> <217D> <00760029> <217E> <00770029> <217F> <00780029> <2180> <00790029> <2181> <007A0029> <2182> <0021> <2183> <00B0> <2184> <0027> <2185> <0022> <2186> <2034> <2187> <0028003200370029> <2188> <0028003200380029> <2189> <0028003200390029> <218A> <0028003300300029> <218D> <2020> <218E> <20202020> <218F> <20212021> <2190> <202020202020> <2191> <00A7> <2192> <0023> <2193> <002A> <2194> <002A> <2197> <2042> <2198> <002A> <219B> <2042> <219C> <002A> <219F> <2022> <21A0> <25A020DF> <21A1> <25C720DF> <21A3> <25A120DF> <21A8> <261C> endbfchar 100 beginbfchar <21A9> <261E> <21AC> <25C720DE> <21AE> <25A120DE> <21AF> <25C620DE> <21B4> <25B320DD> <21B5> <25B220DD> <21B6> <271A> <21B7> <2716> <21B9> <25EF> <21BF> <25CC> <21D5> <20A9> <21D8> <262F> <21DA> <262F> <21DB> <262F> <21DF> <3020> <21F5> <0028003200310029> <21F6> <0028003200320029> <21F7> <0028003200330029> <21F8> <0028003200340029> <21F9> <0028003200350029> <21FA> <0028003200360029> <21FB> <2642> <21FC> <22A9> <21FD> <3036> <21FE> <25CB> <21FF> <25D3> <2200> <25A1> <2201> <2302> <2203> <25AD> <2204> <25AD> <2208> <25C7> <220B> <2206> <220C> <22BF> <220D> <231E> <2212> <2253> <2213> <2251> <2216> <2213> <221A> <00F720DD> <221B> <2314> <221E> <2262> <2220> <25B1> <2222> <2222> <2223> <2250> <2224> <00D8> <2225> <234A> <2226> <22A3> <2227> <22A50338> <222B> <2285> <222C> <2284> <222D> <2209> <222E> <220C> <222F> <22BB> <2230> <0016> <2231> <225A> <2232> <2306> <2233> <0024> <2239> <329E> <223B> <203C> <223C> <0021003F> <223E> <003F003F> <223F> <22C4> <2240> <25C7> <2241> <22C4> <2242> <25C6> <2243> <25AB> <2244> <25A1> <2245> <25AB> <2246> <25A0> <2247> <25E6> <2248> <25CB> <2249> <25E6> <224A> <25CF> <224B> <25BD> <224C> <25B3> <224D> <25B7> <224E> <25C1> <224F> <2726> <2250> <25CF> <2251> <25A0> <2253> <25CA> <2254> <3231> <2255> <3239> <2256> <33CB> <2257> <2483> <225C> <0028003200310029> <225D> <0028003200320029> <225E> <0028003200330029> <225F> <0028003200340029> <2260> <0028003200350029> <2261> <0028003200360029> <2262> <0028003200370029> <2263> <0028003200380029> <2264> <0028003200390029> <2265> <0028003300300029> <2266> <2192> <2269> <2193> <226E> <21D0> <226F> <21CF> <2270> <21CD> <2271> <21D4> endbfchar 100 beginbfchar <2279> <2794> <2285> <279C> <2291> <27BA> <2296> <21D1> <2297> <21D3> <2299> <279E> <229D> <279E> <22A0> <21B5> <22A1> <21B1> <22A3> <21B4> <22A4> <21B0> <22A5> <21B3> <22B0> <21E6> <22B1> <21E8> <22B2> <21E7> <22B3> <21E9> <22B4> <21BC> <22B5> <21C0> <22BA> <21C0> <22BB> <21BC> <22C2> <0041002E> <22C3> <0042002E> <22C4> <0043002E> <22C5> <0044002E> <22C6> <0045002E> <22C7> <0046002E> <22C8> <0047002E> <22C9> <0048002E> <22CA> <0049002E> <22CB> <004A002E> <22CC> <004B002E> <22CD> <004C002E> <22CE> <004D002E> <22CF> <004E002E> <22D0> <004F002E> <22D1> <0050002E> <22D2> <0051002E> <22D3> <0052002E> <22D4> <0053002E> <22D5> <0054002E> <22D6> <0055002E> <22D7> <0056002E> <22D8> <0057002E> <22D9> <0058002E> <22DA> <0059002E> <22DB> <005A002E> <22DC> <0061002E> <22DD> <0062002E> <22DE> <0063002E> <22DF> <0064002E> <22E0> <0065002E> <22E1> <0066002E> <22E2> <0067002E> <22E3> <0068002E> <22E4> <0069002E> <22E5> <006A002E> <22E6> <006B002E> <22E7> <006C002E> <22E8> <006D002E> <22E9> <006E002E> <22EA> <006F002E> <22EB> <0070002E> <22EC> <0071002E> <22ED> <0072002E> <22EE> <0073002E> <22EF> <0074002E> <22F0> <0075002E> <22F1> <0076002E> <22F2> <0077002E> <22F3> <0078002E> <22F4> <0079002E> <22F5> <007A002E> <22F6> <22F7> <22F8> <22F9> <22FA> <22FB> <22FC> <22FD> <22FE> <22FF> <2300> <2301> <2302> <2303> <2304> <2305> <2306> <2307> <2308> <2309> <537020DE> <230A> <8A3B20DE> <230B> <230C> <611F20DE> <230D> <51A020DE> <230E> <7B5420DE> <230F> <4EE320DE> <2310> <982D20DE> <2311> <52D520DE> endbfchar 100 beginbfchar <2312> <540D20DE> <2313> <76EE20DE> <2314> <53CD20DE> <2315> <88DC20DE> <2316> <672C20DE> <2317> <526F20DE> <2318> <5E8F20DE> <2319> <902320DE> <231A> <5F7120DE> <231B> <4F8B20DE> <231C> <6E9020DE> <231D> <5B5020DE> <231E> <524D20DE> <231F> <7BC020DE> <2320> <63A520DE> <2321> <52A920DE> <2322> <630720DE> <2323> <4ED620DE> <2324> <6D3E20DE> <2325> <5F6220DE> <2326> <2327> <2328> <2329> <232A> <232B> <8A3B20DE> <232C> <232D> <232E> <232F> <2330> <2331> <2332> <2333> <2334> <2335> <2336> <2337> <2338> <2339> <233A> <233B> <233C> <233D> <233E> <233F> <2340> <2341> <2342> <2343> <2344> <2345> <2346> <2347> <2348> <2349> <234A> <234B> <234C> <234D> <234E> <234F> <2350> <2351> <51A020DD> <2357> <0028003200310029> <2358> <0028003200320029> <2359> <0028003200330029> <235A> <0028003200340029> <235B> <0028003200350029> <235C> <0028003200360029> <235D> <235E> <235F> <2360> <537020DD> <2361> <886320DD> <2362> <672B20DD> <2363> <2364> <2365> <2366> <2367> <2368> <2369> <236A> <236B> <236C> <236D> <236E> <236F> <2370> <2371> <2372> <2373> <2374> <611F20DD> <2375> <616320DD> <2376> <4EE320DD> <2377> <52D520DD> <2378> <3294> <2379> <53CD20DD> <237A> <526F20DD> endbfchar 100 beginbfchar <237B> <81EA20DD> <237C> <524D20DD> <237D> <96FB20DD> <237E> <63A520DD> <237F> <52A920DD> <2380> <6CE820DD> <2381> <53C320DD> <2382> <672C20DD> <2383> <65B020DD> <2384> <73FE20DD> <2385> <5F6220DD> <2386> <959320DD> <2387> <570B20DD> <2388> <32A5> <2389> <4ED620DD> <238A> <238B> <238C> <238D> <238E> <238F> <2390> <2391> <2392> <2393> <2394> <2395> <2396> <2397> <2398> <2399> <239A> <239B> <239C> <239D> <239E> <239F> <23A0> <23A1> <23A2> <23A3> <23A4> <23A5> <23A6> <23A7> <23A8> <23A9> <23AA> <23AB> <23AC> <23AD> <23AE> <23AF> <23B0> <23B1> <23B2> <23B3> <23B4> <23B5> <23B6> <23B7> <23B8> <23B9> <0028003200370029> <23BA> <0028003200380029> <23BB> <0028003200390029> <23BC> <0028003300300029> <23DA> <2794> <23EB> <27A1> <23EE> <21E6> <23EF> <21E8> <23F0> <21E7> <23F1> <21E9> <2406> <261D> <2407> <261F> <240A> <240B> <240C> <240D> <240E> <240F> <2410> <2411> <003120DE> <2412> <003220DE> <2413> <003320DE> <2414> <003420DE> <2415> <003520DE> <2416> <003620DE> <2417> <003720DE> <2418> <003820DE> <2419> <003920DE> <241A> <005B00310030005D> <241B> <005B00310031005D> <241C> <005B00310032005D> <241D> <005B00310033005D> <241E> <005B00310034005D> <241F> <005B00310035005D> <2420> <005B00310036005D> <2421> <005B00310037005D> <2422> <005B00310038005D> <2423> <005B00310039005D> endbfchar 100 beginbfchar <2424> <005B00320030005D> <2425> <4E0020DE> <2426> <4E8C20DE> <2427> <4E0920DE> <2428> <56DB20DE> <2429> <4E9420DE> <242A> <516D20DE> <242B> <4E0320DE> <242C> <516B20DE> <242D> <4E5D20DE> <242E> <534120DE> <242F> <005B53414E00005D> <2430> <005B53414E8C005D> <2431> <005B53414E09005D> <2432> <005B534156DB005D> <2433> <005B53414E94005D> <2434> <005B5341516D005D> <2435> <005B53414E03005D> <2436> <005B5341516B005D> <2437> <005B53414E5D005D> <2438> <005B4E8C5341005D> <2439> <4E0020DE> <243A> <4E8C20DE> <243B> <4E0920DE> <243C> <56DB20DE> <243D> <4E9420DE> <243E> <516D20DE> <243F> <4E0320DE> <2440> <516B20DE> <2441> <4E5D20DE> <2442> <534120DE> <2443> <005B53414E00005D> <2444> <005B53414E8C005D> <2445> <005B53414E09005D> <2446> <005B534156DB005D> <2447> <005B53414E94005D> <2448> <005B5341516D005D> <2449> <005B53414E03005D> <244A> <005B5341516B005D> <244B> <005B53414E5D005D> <244C> <005B4E8C5341005D> <244D> <65E520DE> <244E> <670820DE> <244F> <706B20DE> <2450> <6C3420DE> <2451> <672820DE> <2452> <91D120DE> <2453> <571F20DE> <2454> <3290> <245B> <65E520DE> <245C> <670820DE> <245D> <706B20DE> <245E> <6C3420DE> <245F> <672820DE> <2460> <91D120DE> <2461> <571F20DE> <2466> <21E8> <2469> <21E9> <246A> <0022> <246B> <301F> <246C> <301D> <246D> <2036> <246E> <0060> <246F> <3001> <2471> <0021> <2472> <3021> <2473> <002C> <2474> <3002> <247E> <248B> <24A1> <24C5> <24CB> <24DB> <24E2> <24EC> <2500> <250D> <250E> <2511> <2512> <251D> <2523> <2524> <254D> <254E> <2563> <2574> <2575> <25B7> <25E3> <25E4> <260A> <2610> <2611> <2615> <2616> <261A> <2620> <2632> endbfchar 100 beginbfchar <266E> <2679> <268F> <26C9> <26CA> <26D2> <26D3> <2744> <2745> <27AC> <27AD> <27AE> <27B3> <27B4> <27E2> <27E3> <27EA> <27F2> <27F3> <27F4> <2800> <2801> <283A> <283E> <2843> <2855> <288E> <2894> <2895> <28DB> <28F1> <28F2> <2904> <2905> <2978> <2979> <297D> <299C> <29A2> <29A3> <29A8> <29A9> <29AF> <29BF> <29FD> <2A00> <2A05> <2A06> <2A07> <2A0A> <2A17> <2A53> <2A54> <2A58> <2A59> <2A5A> <2A5B> <2A9E> <2ACE> <2ACF> <2B18> <2B19> <2B3B> <2B41> <2B42> <2B6F> <2B81> <2B93> <2BD7> <2BDC> <2BEE> <2CFF> <2D36> <2D63> <2D64> <2D77> <2D87> <2D9E> <2DCD> <2DDF> <2DE0> <2DF3> <2E09> <2E1E> <2E1F> <2E67> <2E68> <2E7D> <2E7E> <2E91> <2E92> <2EDC> <2EEF> <2EF0> <2F03> <2F04> <2F30> <2F31> <2F3A> <2F40> endbfchar 100 beginbfchar <2F41> <2F44> <2F51> <2F90> <2F96> <2F97> <2FA8> <2FBE> <2FDE> <2FE2> <2FE8> <2FE9> <3032> <3033> <3048> <3051> <3059> <305A> <305E> <306D> <30F8> <30FE> <30FF> <3100> <3109> <310A> <311C> <315A> <3160> <3161> <3172> <3186> <31A6> <31B1> <31B2> <3225> <3226> <322A> <3285> <3298> <32C2> <32C8> <32C9> <32D3> <32D9> <32EB> <3362> <3400> <3415> <34C9> <34CA> <34D1> <34D9> <34EB> <34FE> <34FF> <351F> <3524> <3529> <3536> <3549> <3568> <356C> <3572> <3573> <35B3> <35C8> <35C9> <35DB> <35DC> <35DD> <35DE> <35DF> <35FF> <361C> <361D> <3633> <3645> <3646> <3673> <3674> <3679> <367A> <36DC> <373E> <3835> <3868> <3869> <3872> <3877> <387B> <3888> <389A> <389B> <389F> <38BA> <38C0> <38C1> <38C2> <38CF> endbfchar 100 beginbfchar <38D0> <38D7> <38DB> <38F0> <38FD> <3900> <3901> <3902> <3913> <3929> <393C> <393D> <3950> <3951> <3962> <3963> <399F> <39A0> <39B3> <39B4> <39B5> <39C4> <39C5> <39C6> <39E7> <39EB> <39EE> <39EF> <39F5> <3A07> <3A10> <3A11> <3A41> <3A47> <3A48> <3A5A> <3A5B> <3A97> <3A9D> <3A9E> <3AB0> <3AB1> <3ADE> <3ADF> <3B08> <3B09> <3B51> <3B7E> <3B7F> <3BA6> <3BAC> <3BAD> <3BB0> <3BB3> <3BB4> <3BBB> <3BCE> <3C16> <3C79> <3C7A> <3C7B> <3D75> <3DAD> <3DAE> <3DB6> <3DC8> <3DD2> <3DD3> <3E00> <3E0D> <3E20> <3E21> <3E66> <3E67> <3EAF> <3EB0> <3EDD> <3EDE> <3EFF> <3F26> <3F27> <3F51> <3F52> <3F7F> <3F80> <3F93> <3F94> <3FA7> <3FEE> <4000> <4001> <4002> <4016> <4044> <4045> <40BD> <40BE> <4103> <4104> <4160> endbfchar 68 beginbfchar <4161> <4173> <4186> <41C8> <41CE> <41E1> <41E2> <4228> <4229> <422E> <4275> <42A3> <42A4> <4310> <4316> <4342> <4343> <434A> <434E> <4354> <4366> <43AF> <43C2> <43C3> <43EE> <4403> <4404> <4469> <4476> <447C> <447D> <44E0> <44F4> <4525> <4526> <4538> <4539> <454C> <458E> <4594> <4595> <45A8> <45A9> <45BC> <45E6> <45E7> <45FC> <4613> <4627> <4628> <463D> <4653> <4694> <4695> <46AA> <46B3> <46BA> <46BB> <46E3> <46E4> <474A> <20A9> <474B> <2010> <474C> <00A9> <474D> <2122> <474E> <22EF> <47AD> <203E> <47AE> <007E> <47AF> <005C> endbfchar 100 beginbfrange <0001> <005F> <0020> <0065> <0067> <3000> <0069> <006A> <2025> <006D> <006E> <2013> <0072> <0073> <2018> <0074> <0075> <201C> <0076> <0077> <3014> <0078> <0081> <3008> <0086> <0087> <2264> <008B> <008C> <2032> <008F> <0090> <00AB> <00AC> <2190> <00AD> <00AE> <2193> <00B0> <00B1> <226A> <00B6> <00B7> <222B> <00BA> <00BB> <2286> <00BC> <00BD> <2282> <00C0> <00C1> <2227> <00DE> <00DF> <2660> <00E6> <00E7> <25D0> <00E9> <00EA> <25A4> <00F5> <00F6> <2020> <00FD> <00FE> <2669> <0108> <0142> <0144> <0164> <0166> <0198> <3131> <0199> <01C2> <3165> <01C3> <01CC> <2170> <01CD> <01D6> <2160> <01D7> <01E7> <0391> <01E8> <01EE> <03A3> <01EF> <01FF> <03B1> <0200> <0206> <03C3> <022F> <0230> <251E> <0231> <0232> <2521> <0233> <0234> <2526> <0235> <0236> <2529> <0237> <0238> <252D> <0239> <023A> <2531> <023B> <023C> <2535> <023D> <023E> <2539> <023F> <0240> <253D> <0241> <0242> <2540> <0243> <024A> <2543> <024B> <024D> <3395> <0251> <0254> <33A3> <0255> <025E> <3399> <0260> <0262> <338D> <0264> <0265> <3388> <0267> <0268> <33A7> <0269> <0272> <33B0> <0273> <0277> <3380> <0278> <027D> <33BA> <027E> <0282> <3390> <0284> <0285> <33C0> <0286> <0288> <338A> <028B> <028D> <33AD> <028F> <0292> <33A9> <02A7> <02C2> <3260> <02C3> <02DC> <24D0> <02DD> <02EB> <2460> <02ED> <02EE> <2153> <02F1> <02F4> <215B> <0305> <0320> <3200> <0321> <033A> <249C> <033B> <0349> <2474> <034B> <034C> <00B2> <034F> <0352> <2081> <0353> <03A5> <3041> <03A6> <03FB> <30A1> <03FC> <03FF> <0410> <0400> <0401> <0414> <0403> <0422> <0416> <0424> <043D> <0436> <043E> <043F> <0441> <0444> <0445> <044C> <044D> <0451> <0454> <0455> <0456> <0458> <0459> <045A> <0462> <0463> <0465> <0466> <0468> <0469> <046A> <046D> <046E> <0471> <0474> <0475> <0476> <0478> <0479> <047B> <047D> <047E> <047F> <0480> <0481> <0483> <048A> <048B> <048D> <048E> <0491> <0493> <0495> <0496> <0497> <0498> <049C> <049D> <04A4> <04A5> <04A6> <04A7> endbfrange 100 beginbfrange <04AA> <04AB> <04B3> <04B4> <04B6> <04B9> <04BA> <04BC> <04BE> <04BF> <04C0> <04C1> <04C4> <04C5> <04C8> <04C9> <04CC> <04CD> <04D2> <04D3> <04D5> <04D7> <04D8> <04D9> <04DD> <04DE> <04E0> <04E1> <04E3> <04E4> <04E6> <04E7> <04E9> <04EB> <04EF> <04F0> <04F1> <04F3> <04F5> <04F6> <04F9> <04FA> <04FB> <04FD> <04FE> <04FF> <0501> <0503> <0506> <0507> <0508> <050A> <050B> <050C> <0514> <0515> <0518> <0519> <051D> <051E> <0520> <0522> <0523> <0524> <0526> <0527> <0528> <0529> <052E> <052F> <0532> <0533> <0536> <0538> <053A> <053B> <053E> <053F> <0540> <0541> <0544> <0545> <054A> <054B> <054D> <054E> <0553> <0555> <0559> <055A> <055D> <055E> <0561> <0563> <0565> <0568> <0569> <056A> <056B> <056F> <0571> <0573> <0576> <0577> <0578> <057A> <057B> <057C> <0581> <0582> <0583> <0584> <0586> <0587> <0588> <0589> <058A> <058C> <058D> <058F> <0592> <0593> <0594> <0596> <0597> <0598> <059B> <059C> <059D> <059E> <05A2> <05A3> <05A7> <05A8> <05AB> <05AD> <05B4> <05B5> <05B7> <05B8> <05BE> <05BF> <05C1> <05C2> <05C3> <05C4> <05CD> <05CE> <05CF> <05D0> <05D2> <05D3> <05D5> <05D6> <05D8> <05DA> <05DB> <05DC> <05DE> <05DF> <05E4> <05E5> <05E9> <05EA> <05EE> <05F0> <05F2> <05F6> <05F7> <05F9> <05FA> <05FE> <0600> <0601> <0604> <0605> <0606> <0608> <060A> <060C> <060E> <060F> <0610> <0611> <0612> <0613> <0618> <0619> <061C> <061D> <061E> <0620> <0624> <0625> <0628> <0629> <062B> <062C> <062F> <0630> endbfrange 100 beginbfrange <063D> <063E> <0641> <0642> <0645> <0646> <0658> <0659> <065B> <065C> <065E> <065F> <0663> <0664> <0666> <0667> <0668> <0669> <066A> <066D> <066E> <066F> <0672> <0673> <0674> <0676> <0677> <0679> <067C> <067D> <067E> <0680> <0681> <0682> <0685> <0686> <0687> <0688> <0689> <068B> <068C> <068E> <0691> <0692> <0693> <0695> <0698> <0699> <06A2> <06A3> <06A6> <06A7> <06AD> <06AE> <06B0> <06B1> <06B3> <06B4> <06B5> <06B6> <06BB> <06BC> <06C0> <06C1> <06C4> <06C5> <06C8> <06C9> <06CA> <06CD> <06CE> <06D1> <06D4> <06D5> <06D6> <06D8> <06D9> <06DA> <06DE> <06DF> <06E2> <06E3> <06E4> <06E6> <06E7> <06E9> <06EC> <06ED> <06F0> <06F1> <06F4> <06F5> <06F6> <06F8> <06FD> <06FE> <0701> <0702> <070C> <070D> <0716> <0717> <071A> <071B> <0721> <0722> <0728> <0729> <072C> <072D> <0730> <0731> <0734> <0735> <0737> <0738> <0739> <073A> <073B> <073C> <073F> <0740> <0743> <0744> <0746> <074A> <074B> <074C> <074E> <074F> <0751> <0753> <0756> <0757> <0758> <075B> <075C> <075D> <0760> <0761> <0765> <0766> <0768> <0769> <076A> <076C> <076F> <0770> <0771> <0773> <0774> <0775> <0778> <077A> <077D> <077E> <077F> <0780> <0783> <0784> <0789> <078A> <0796> <0798> <079A> <079D> <079E> <079F> <07A3> <07A4> <07B7> <07B8> <07BA> <07BB> <07BD> <07BE> <07BF> <07C1> <07C4> <07C8> <07C9> <07CD> <07CE> <07CF> <07D3> <07D4> <07D7> <07D8> <07D9> <07DB> <07DD> <07DE> <07E1> <07E2> <07E4> <07E5> <07E7> <07E8> <07EA> <07EB> endbfrange 100 beginbfrange <07EC> <07ED> <07EF> <07F0> <07F1> <07F2> <07F3> <07F5> <07F6> <07F7> <07FB> <07FD> <0801> <0803> <0806> <0807> <080F> <0810> <0813> <0814> <0817> <0818> <081A> <081D> <081E> <081F> <0822> <0823> <0828> <0829> <0833> <0834> <0837> <0838> <083A> <083B> <083F> <0840> <0842> <0844> <0845> <0846> <084A> <084B> <084C> <084E> <084F> <0851> <0854> <0855> <0856> <0858> <0859> <085A> <085C> <085D> <085F> <0860> <0862> <0864> <0867> <0868> <0869> <086A> <086B> <086D> <086E> <086F> <0872> <0873> <0878> <0879> <0884> <0885> <0886> <0887> <088A> <088B> <088E> <088F> <0890> <0891> <0892> <0895> <0896> <0897> <0898> <089A> <089C> <089D> <08A0> <08A1> <08A2> <08A4> <08A5> <08A6> <08A9> <08AA> <08B2> <08B6> <08B7> <08B8> <08B9> <08BA> <08BB> <08BC> <08BD> <08BF> <08C1> <08C2> <08C5> <08C6> <08C7> <08C9> <08CA> <08CB> <08CE> <08CF> <08D0> <08D2> <08D7> <08D9> <08DD> <08DE> <08E2> <08E3> <08EB> <08EC> <08F0> <08F1> <08F3> <08F4> <08F7> <08F8> <08FB> <08FC> <08FE> <08FF> <0900> <0901> <0905> <0906> <0909> <090A> <090F> <0910> <0913> <0914> <0917> <0918> <091D> <091E> <0920> <0921> <0922> <0923> <0926> <0927> <0929> <092A> <092B> <092D> <0931> <0932> <0933> <0934> <0936> <0937> <0938> <0939> <093A> <093C> <093F> <0940> <0941> <0942> <0944> <0945> <0949> <094A> <094B> <094C> <0951> <0952> <0954> <0955> <0957> <0958> <095A> <095B> <0963> <0964> <0966> <0967> <096A> <096B> <0973> <0974> <0978> <097A> endbfrange 100 beginbfrange <097F> <0980> <0983> <0984> <0987> <0988> <0989> <098B> <098C> <098E> <098F> <0991> <0992> <0994> <0995> <0996> <0997> <0998> <099B> <099C> <099D> <099F> <09A0> <09A1> <09A5> <09A6> <09AA> <09AB> <09AF> <09B0> <09B1> <09B2> <09B3> <09B6> <09B7> <09BD> <09C0> <09C1> <09C4> <09C5> <09C8> <09CA> <09CD> <09CE> <09CF> <09D4> <09D5> <09D8> <09DB> <09DC> <09DD> <09DE> <09DF> <09E0> <09E2> <09E4> <09E6> <09E8> <09EC> <09ED> <09F0> <09F1> <09F2> <09F4> <09F5> <09F6> <09FB> <09FC> <0A03> <0A04> <0A07> <0A08> <0A0B> <0A0C> <0A0E> <0A10> <0A11> <0A12> <0A15> <0A16> <0A19> <0A1A> <0A1B> <0A1C> <0A1D> <0A1E> <0A21> <0A22> <0A24> <0A25> <0A28> <0A29> <0A2C> <0A2D> <0A30> <0A31> <0A35> <0A36> <0A3A> <0A3B> <0A3D> <0A44> <0A49> <0A4A> <0A4C> <0A4E> <0A4F> <0A51> <0A52> <0A55> <0A57> <0A58> <0A5A> <0A5C> <0A5E> <0A5F> <0A60> <0A63> <0A64> <0A65> <0A68> <0A69> <0A6A> <0A6C> <0A6D> <0A6E> <0A77> <0A78> <0A7C> <0A7D> <0A7F> <0A80> <0A81> <0A82> <0A85> <0A86> <0A8C> <0A8D> <0A8E> <0A8F> <0A91> <0A92> <0A96> <0A97> <0A99> <0A9B> <0A9C> <0A9E> <0AA4> <0AA5> <0AA9> <0AAA> <0AAD> <0AAE> <0AB1> <0AB2> <0AB4> <0AB6> <0AB7> <0AB8> <0ABE> <0ABF> <0AC2> <0AC3> <0AC9> <0ACA> <0ACD> <0ACE> <0AD1> <0AD2> <0AD4> <0AD5> <0AD7> <0AD8> <0ADA> <0ADB> <0ADC> <0ADD> <0ADE> <0ADF> <0AE4> <0AE5> <0AE6> <0AE8> <0AE9> <0AEA> <0AED> <0AEE> <0AEF> <0AF1> <0AF5> <0AF6> <0AF9> <0AFA> <0AFB> <0AFD> <0B02> <0B03> <0B06> <0B07> endbfrange 100 beginbfrange <0B0B> <0B0C> <0B14> <0B15> <0B17> <0B18> <0B1B> <0B1C> <0B1F> <0B20> <0B27> <0B28> <0B2B> <0B2C> <0B2D> <0B2E> <0B2F> <0B31> <0B35> <0B36> <0B37> <0B3A> <0B3B> <0B3C> <0B3F> <0B40> <0B41> <0B43> <0B4A> <0B4B> <0B4E> <0B4F> <0B50> <0B52> <0B53> <0B54> <0B57> <0B58> <0B61> <0B62> <0B65> <0B66> <0B70> <0B71> <0B76> <0B77> <0B7A> <0B7B> <0B85> <0B86> <0B8E> <0B8F> <0B92> <0B93> <0B96> <0B97> <0B99> <0B9B> <0B9C> <0B9D> <0BA0> <0BA1> <0BA4> <0BA5> <0BA8> <0BA9> <0BAC> <0BAD> <0BAE> <0BB0> <0BB1> <0BB2> <0BB4> <0BB5> <0BB7> <0BB8> <0BB9> <0BBA> <0BBB> <0BBD> <0BBE> <0BBF> <0BC2> <0BC3> <0BC9> <0BCA> <0BCB> <0BCD> <0BCF> <0BD0> <0BD3> <0BD4> <0BD7> <0BD8> <0BE2> <0BE3> <0BE6> <0BE7> <0BF0> <0BF1> <0BF4> <0BF5> <0BFC> <0BFD> <0C00> <0C01> <0C03> <0C04> <0C07> <0C08> <0C0B> <0C0C> <0C0E> <0C0F> <0C10> <0C11> <0C12> <0C14> <0C15> <0C16> <0C19> <0C1A> <0C1B> <0C1D> <0C20> <0C21> <0C25> <0C26> <0C27> <0C29> <0C2A> <0C2B> <0C2E> <0C2F> <0C37> <0C38> <0C3B> <0C3C> <0C48> <0C49> <0C4C> <0C4D> <0C53> <0C54> <0C57> <0C58> <0C5F> <0C60> <0C62> <0C63> <0C65> <0C66> <0C6B> <0C6C> <0C6D> <0C6E> <0C71> <0C72> <0C75> <0C77> <0C7B> <0C7C> <0C7D> <0C7F> <0C81> <0C82> <0C85> <0C86> <0C87> <0C89> <0C8A> <0C8B> <0C8C> <0C8D> <0C90> <0C91> <0C92> <0C94> <0C95> <0C96> <0C99> <0C9A> <0CA0> <0CA1> <0CA2> <0CA3> <0CA8> <0CA9> <0CAC> <0CAD> <0CB9> <0CBA> <0CBC> <0CBD> <0CBF> <0CC0> <0CD3> <0CD4> <0CD6> <0CD7> endbfrange 100 beginbfrange <0CDA> <0CDB> <0CDE> <0CDF> <0CE3> <0CE4> <0CE7> <0CE8> <0CEB> <0CEC> <0CED> <0CEF> <0CF2> <0CF3> <0CF7> <0CF8> <0CFB> <0CFC> <0D03> <0D04> <0D07> <0D08> <0D09> <0D0B> <0D10> <0D11> <0D15> <0D16> <0D1A> <0D1B> <0D20> <0D21> <0D25> <0D26> <0D31> <0D32> <0D3E> <0D3F> <0D43> <0D44> <0D47> <0D48> <0D4B> <0D4C> <0D52> <0D53> <0D55> <0D58> <0D59> <0D5A> <0D61> <0D62> <0D64> <0D65> <0D68> <0D69> <0D78> <0D79> <67B6> <0DC7> <0DC8> <9451> <0FCF> <0FD0> <887E> <0FF3> <0FF4> <671E> <1008> <1009> <7947> <101A> <101B> <9A0E> <125A> <125B> <5FD8> <12A2> <12A3> <6478> <12EA> <12EB> <7D0A> <130B> <130C> <65FB> <1375> <1376> <88F4> <1381> <1382> <767D> <13E8> <13E9> <5CEF> <140D> <140E> <8150> <144D> <144F> <6BD6> <15F4> <15F5> <96A7> <17D5> <17D6> <7AA9> <1853> <1854> <96E8> <18AD> <18AE> <5E7C> <18B2> <18B3> <6108> <18B9> <18BA> <6961> <18BF> <18C0> <7336> <1BAD> <1BAE> <6158> <1DDD> <1DDE> <9591> <1EC7> <1EC8> <78BA> <1EE7> <1EE8> <6643> <1F71> <1F72> <71B9> <1F78> <1F79> <3001> <1F7F> <1F80> <3014> <1F81> <1F8A> <3008> <1F8D> <1F8E> <1F91> <1F96> <1F9A> <1F9D> <1F9E> <1FFB> <0020> <2005> <2006> <300E> <2007> <2008> <300A> <2009> <200A> <3008> <200B> <200C> <0028> <2015> <2016> <0028> <2019> <201A> <3016> <201B> <201E> <3016> <2027> <2028> <2020> <202F> <2030> <02D6> <2037> <2038> <003C> <203A> <203B> <207D> <2040> <2041> <2229> <2047> <2049> <3021> <2054> <2055> <3014> <205B> <205C> <3001> <2061> <2062> <0028> <2063> <2064> <3016> <2065> <2066> <3010> <2096> <209F> <278A> <20C4> <20DD> <24B6> <211C> <211D> <22CE> <211F> <2120> <2280> <2121> <2124> <2270> <2129> <212A> <2276> <212C> <212D> <22DA> <2145> <214D> <2460> <21A4> <21A7> <3008> <21E1> <21EA> <2776> <220F> <2210> <2225> <2214> <2215> <2266> <2217> <2219> <2295> <2229> <222A> <226E> <2258> <225B> <2494> <2267> <2268> <2190> <226A> <226D> <2196> <22C0> <22C1> <21C4> <2352> <2356> <2483> <23E6> <23E9> <21E0> endbfrange 100 beginbfrange <2455> <245A> <328A> <2462> <2465> <300C> <2467> <2468> <21E6> <2475> <2476> <2477> <2478> <2479> <247D> <247F> <2480> <2481> <2483> <2484> <248A> <248C> <2491> <2492> <2493> <2494> <2496> <2497> <24A0> <24A2> <24A7> <24A8> <24AA> <24AB> <24AD> <24AE> <24C0> <24C1> <24C2> <24C3> <24C4> <24C6> <24CA> <24CC> <24CD> <24CE> <24D0> <24D1> <24D3> <24D4> <24DA> <24DC> <24E1> <24E3> <24E4> <24E5> <24EB> <24ED> <24EF> <24F0> <24F1> <24F2> <24F4> <24F5> <24F7> <24F8> <24FF> <2501> <2508> <2509> <250A> <250B> <250C> <250F> <2510> <2513> <2517> <2518> <2519> <251A> <251C> <251E> <2522> <2525> <252A> <252B> <252D> <252E> <2530> <2531> <2538> <2539> <253A> <253B> <2540> <2541> <2542> <2543> <2545> <2546> <254C> <254F> <2554> <2555> <2557> <2558> <255A> <255B> <2562> <2564> <256B> <256C> <256D> <256E> <256F> <2570> <2573> <2576> <257A> <257B> <257C> <257D> <257F> <2580> <258A> <258B> <2590> <2591> <25A2> <25A3> <25AA> <25AB> <25AC> <25AD> <25AF> <25B0> <25B6> <25B8> <25BF> <25C0> <25C2> <25C3> <25C5> <25C6> <25D8> <25D9> <25DA> <25DB> <25DC> <25DD> <25E2> <25E5> <25EA> <25EB> <25FF> <2600> <2605> <2606> <2607> <2608> <2609> <260B> <260F> <2612> <2614> <2617> <2619> <261B> <261F> <2621> <2623> <2624> <2625> <2626> <2627> <2628> <262A> <262B> <2631> <2633> <2638> <2639> <263E> <263F> <266D> <266F> <2671> <2672> <2678> <267A> <267F> <2680> <2681> <2682> <268C> <268D> <268E> <2690> <2695> <2696> <2698> <2699> <269B> endbfrange 100 beginbfrange <269C> <26A5> <26A6> <26A9> <26AA> <26AB> <26AC> <26C6> <26C7> <26C8> <26CB> <26D1> <26D4> <26D7> <26D8> <26DD> <26DE> <26E8> <26E9> <26EE> <26EF> <26FF> <2700> <2701> <2702> <2707> <2708> <270A> <270B> <270D> <270E> <2714> <2715> <2717> <2718> <271D> <271E> <2738> <2739> <273A> <273B> <273D> <273E> <2743> <2746> <274A> <274B> <2751> <2752> <275C> <275D> <2762> <2763> <2764> <2765> <2767> <2768> <276E> <276F> <2770> <2771> <2777> <2778> <277A> <277B> <277D> <277E> <2784> <2785> <278E> <278F> <27A9> <27AA> <27AB> <27AF> <27B2> <27B5> <27B7> <27B8> <27D5> <27D6> <27D7> <27D8> <27DA> <27DB> <27E1> <27E4> <27E9> <27EB> <27EC> <27ED> <27F1> <27F5> <27F6> <27F7> <27F9> <27FA> <27FF> <2802> <2807> <2808> <2809> <280A> <280C> <280D> <2813> <2814> <2817> <2818> <2839> <283B> <283D> <283F> <2842> <2844> <2848> <2849> <284A> <284B> <284D> <284E> <2854> <2856> <285B> <285C> <285D> <285E> <2860> <2861> <2867> <2868> <2869> <286A> <286B> <286C> <286E> <286F> <2871> <2872> <2888> <2889> <288A> <288B> <288D> <288F> <2893> <2896> <2899> <289A> <289C> <289D> <289F> <28A0> <28AA> <28AB> <28CD> <28CE> <28D0> <28D1> <28D3> <28D4> <28DA> <28DC> <28E3> <28E4> <28E5> <28E6> <28E8> <28E9> <28F0> <28F3> <28F8> <28F9> <28FA> <28FB> <28FC> <28FD> <28FF> <2900> <2903> <2906> <290B> <290C> <291E> <291F> <2925> <2926> <2940> <2941> <2943> <2944> <2946> <2947> <294D> <294E> <2957> <2958> <295D> <295E> <2964> endbfrange 100 beginbfrange <2965> <2967> <2968> <296D> <296E> <296F> <2970> <2972> <2973> <2977> <297A> <297C> <297E> <2980> <2981> <2983> <2984> <2996> <2997> <2998> <2999> <299B> <299D> <29A1> <29A4> <29A7> <29AA> <29AB> <29AC> <29AE> <29B0> <29B2> <29B3> <29B4> <29B5> <29B7> <29B8> <29BE> <29C0> <29C5> <29C6> <29FC> <29FE> <29FF> <2A01> <2A04> <2A08> <2A09> <2A0B> <2A0C> <2A0D> <2A0F> <2A10> <2A16> <2A18> <2A1D> <2A1E> <2A20> <2A21> <2A23> <2A24> <2A2E> <2A2F> <2A34> <2A35> <2A37> <2A38> <2A4E> <2A4F> <2A50> <2A51> <2A52> <2A55> <2A57> <2A5C> <2A5D> <2A5E> <2A60> <2A61> <2A63> <2A64> <2A76> <2A77> <2A89> <2A8A> <2A90> <2A91> <2A93> <2A94> <2A96> <2A97> <2A9D> <2A9F> <2AA6> <2AA7> <2AC1> <2AC2> <2AC3> <2AC4> <2AC6> <2AC7> <2ACD> <2AD0> <2AD5> <2AD6> <2AE8> <2AE9> <2AEF> <2AF0> <2AFF> <2B00> <2B03> <2B04> <2B09> <2B0A> <2B0C> <2B0D> <2B0F> <2B10> <2B17> <2B1A> <2B1F> <2B20> <2B22> <2B23> <2B25> <2B26> <2B2C> <2B2D> <2B30> <2B31> <2B36> <2B37> <2B38> <2B39> <2B3A> <2B3C> <2B40> <2B43> <2B48> <2B49> <2B63> <2B64> <2B65> <2B66> <2B67> <2B68> <2B6E> <2B70> <2B74> <2B75> <2B76> <2B77> <2B79> <2B7A> <2B80> <2B82> <2B86> <2B87> <2B88> <2B89> <2B8B> <2B8C> <2B92> <2B94> <2BD1> <2BD2> <2BD3> <2BD4> <2BD6> <2BD8> <2BDB> <2BDD> <2BE1> <2BE2> <2BE3> <2BE4> <2BE6> <2BE7> <2BED> <2BEF> <2BF4> <2BF5> <2BFF> <2C00> <2C07> <2C08> <2C2A> <2C2B> <2C2C> <2C2D> <2C2F> <2C30> <2C3B> <2C3C> <2C41> <2C42> <2C48> <2C49> <2C5B> endbfrange 100 beginbfrange <2C5C> <2C76> <2C77> <2C79> <2C7A> <2CAC> <2CAD> <2CAE> <2CAF> <2CB1> <2CB2> <2CB7> <2CB8> <2CBB> <2CBC> <2CDD> <2CDE> <2CF8> <2CF9> <2CFB> <2CFC> <2CFE> <2D00> <2D05> <2D06> <2D08> <2D09> <2D2A> <2D2B> <2D2C> <2D2D> <2D2E> <2D2F> <2D35> <2D37> <2D3E> <2D3F> <2D41> <2D42> <2D44> <2D45> <2D4B> <2D4C> <2D55> <2D56> <2D58> <2D59> <2D5B> <2D5C> <2D62> <2D65> <2D6A> <2D6B> <2D6C> <2D6D> <2D6F> <2D70> <2D76> <2D78> <2D7A> <2D7B> <2D7C> <2D7D> <2D7F> <2D80> <2D86> <2D88> <2D8D> <2D8E> <2D8F> <2D90> <2D9D> <2D9F> <2DC0> <2DC1> <2DC2> <2DC3> <2DC5> <2DC6> <2DCC> <2DCE> <2DD2> <2DD3> <2DD4> <2DD5> <2DD7> <2DD8> <2DDE> <2DE1> <2DE6> <2DE7> <2DE8> <2DE9> <2DEB> <2DEC> <2DF2> <2DF4> <2DF9> <2DFA> <2DFC> <2DFD> <2DFF> <2E00> <2E08> <2E0A> <2E11> <2E12> <2E13> <2E14> <2E16> <2E17> <2E1D> <2E20> <2E25> <2E26> <2E28> <2E29> <2E38> <2E39> <2E52> <2E53> <2E59> <2E5A> <2E5C> <2E5D> <2E5F> <2E60> <2E66> <2E69> <2E6E> <2E6F> <2E71> <2E72> <2E74> <2E75> <2E7C> <2E7F> <2E84> <2E85> <2E86> <2E87> <2E89> <2E8A> <2E90> <2E93> <2E98> <2E99> <2EAB> <2EAC> <2EB2> <2EB3> <2ECD> <2ECE> <2ECF> <2ED0> <2ED2> <2ED3> <2ED9> <2EDA> <2EDB> <2EDD> <2EE2> <2EE3> <2EE4> <2EE5> <2EE7> <2EE8> <2EEE> <2EF1> <2EF6> <2EF7> <2EF8> <2EF9> <2EFB> <2EFC> <2EFF> <2F00> <2F02> <2F05> <2F06> <2F07> <2F23> <2F24> <2F25> <2F26> <2F28> <2F29> <2F2F> <2F32> <2F37> <2F38> <2F39> <2F3B> <2F3F> <2F42> <2F43> <2F45> <2F46> <2F47> <2F49> endbfrange 100 beginbfrange <2F4A> <2F50> <2F52> <2F56> <2F57> <2F5C> <2F5D> <2F68> <2F69> <2F8A> <2F8B> <2F8C> <2F8D> <2F8F> <2F91> <2F95> <2F98> <2F9B> <2F9C> <2F9D> <2F9E> <2FA0> <2FA1> <2FA7> <2FA9> <2FAE> <2FAF> <2FB0> <2FB1> <2FB3> <2FB4> <2FBD> <2FBF> <2FC2> <2FC3> <2FDD> <2FDF> <2FE1> <2FE3> <2FE7> <2FEA> <2FEF> <2FF0> <2FF2> <2FF3> <2FFF> <3000> <3001> <3002> <3023> <3024> <3026> <3027> <3029> <302A> <3031> <3034> <3039> <303A> <303C> <303D> <303F> <3040> <3047> <3049> <3050> <3052> <3053> <3054> <3058> <305B> <305D> <305F> <3061> <3062> <3064> <3065> <306C> <306E> <3075> <3076> <3090> <3091> <3093> <3094> <3096> <3097> <30A9> <30AA> <30AC> <30AD> <30AF> <30B0> <30B6> <30B7> <30B8> <30B9> <30C0> <30C1> <30C3> <30C4> <30C6> <30C7> <30CD> <30CE> <30CF> <30D0> <30F3> <30F4> <30F5> <30F6> <30F7> <30F9> <30FD> <3101> <3102> <3103> <3104> <3105> <3108> <310B> <310D> <310E> <310F> <3110> <3111> <3112> <3114> <3115> <311B> <311D> <311F> <3120> <3121> <3122> <3123> <3124> <312F> <3130> <3155> <3156> <3157> <3158> <3159> <315B> <315F> <3162> <3166> <3167> <3168> <3169> <316A> <316B> <3171> <3173> <3178> <3179> <317A> <317B> <317D> <317E> <3185> <3187> <3189> <318A> <318B> <318C> <318E> <318F> <31A5> <31A7> <31A9> <31AA> <31B0> <31B3> <31B8> <31B9> <31BB> <31BC> <31CA> <31CB> <31D1> <31D2> <31E4> <31E5> <31EB> <31EC> <31ED> <31EE> <31F0> <31F1> <31F7> <31F8> <31FF> <3200> <3201> <3202> <3204> <3205> <321B> endbfrange 100 beginbfrange <321C> <321D> <321E> <321F> <3220> <3224> <3227> <3229> <322B> <3231> <3232> <323C> <323D> <3243> <3244> <325E> <325F> <3260> <3261> <3263> <3264> <326F> <3270> <3275> <3276> <3278> <3279> <327B> <327C> <3282> <3283> <3284> <3286> <328B> <328C> <328D> <328E> <3290> <3291> <3297> <3299> <32BC> <32BD> <32BE> <32BF> <32C1> <32C3> <32C7> <32CA> <32CD> <32CE> <32CF> <32D0> <32D2> <32D4> <32D8> <32DA> <32DE> <32DF> <32E0> <32E1> <32E3> <32E4> <32EA> <32EC> <32F1> <32F2> <32FF> <3300> <3326> <3327> <3328> <3329> <332A> <332B> <3331> <3332> <3333> <3334> <3339> <333A> <334D> <334E> <3353> <3354> <3361> <3363> <3384> <3385> <3386> <3387> <3389> <338A> <3390> <3391> <3393> <3394> <33D1> <33D2> <33EC> <33ED> <33FF> <3401> <3406> <3407> <3408> <3409> <340B> <340C> <3412> <3413> <3414> <3416> <346F> <3470> <3483> <3484> <3489> <348A> <348C> <348D> <348F> <3490> <3496> <3497> <34BC> <34BD> <34BE> <34BF> <34C1> <34C2> <34C8> <34CB> <34D0> <34D2> <34D3> <34D4> <34D8> <34DA> <34DC> <34DD> <34DE> <34DF> <34E0> <34E1> <34E3> <34E4> <34EA> <34EC> <34F1> <34F2> <34F3> <34F4> <34F6> <34F7> <34FD> <3500> <3505> <3506> <3508> <3509> <350B> <350C> <3512> <3513> <3516> <3517> <351C> <351D> <351E> <3520> <3523> <3525> <3528> <352A> <352B> <352C> <352E> <352F> <3535> <3537> <353C> <353D> <353E> <353F> <3541> <3542> <3548> <354A> <354F> <3550> <3552> <3553> <3555> <3556> <3561> <3562> <3567> <3569> <356B> endbfrange 100 beginbfrange <356D> <3571> <3574> <3576> <3577> <3578> <3579> <357A> <357B> <357D> <357E> <3589> <358A> <358F> <3590> <3592> <3593> <3595> <3596> <359C> <359D> <359E> <359F> <35A5> <35A6> <35A8> <35A9> <35AB> <35AC> <35B2> <35B4> <35BB> <35BC> <35BD> <35BE> <35C0> <35C1> <35C7> <35CA> <35CF> <35D0> <35D1> <35D2> <35D3> <35D4> <35DA> <35E0> <35F2> <35F3> <35F9> <35FA> <35FB> <35FC> <35FE> <3600> <3605> <3606> <3609> <360A> <360F> <3610> <3611> <3612> <3614> <3615> <361B> <361E> <3623> <3624> <3629> <362A> <3630> <3631> <3632> <3634> <3639> <363A> <363B> <363C> <363E> <363F> <3644> <3647> <3668> <3669> <366A> <366B> <366C> <366D> <3672> <3675> <3678> <367B> <367D> <367E> <3684> <3685> <3686> <3687> <368B> <368C> <368D> <368E> <3690> <3691> <3697> <3698> <3699> <369A> <36B4> <36B5> <36D6> <36D7> <36D8> <36D9> <36DB> <36DD> <36E1> <36E2> <36E3> <36E4> <36E9> <36EA> <36EC> <36ED> <36EF> <36F0> <36FF> <3700> <3722> <3723> <3739> <373A> <373B> <373C> <373D> <373F> <3743> <3744> <3746> <3747> <374C> <374D> <374E> <374F> <375D> <375E> <3764> <3765> <3777> <3778> <377E> <377F> <3781> <3782> <3784> <3785> <378B> <378C> <3795> <3796> <37B0> <37B1> <37B2> <37B3> <37B5> <37B6> <37BC> <37BD> <37BF> <37C0> <37C5> <37C6> <37D8> <37D9> <37DF> <37E0> <37FA> <37FB> <37FD> <37FE> <37FF> <3800> <3829> <382A> <382F> <3830> <3831> <3832> <3834> <3836> <3839> <383A> <3843> <3844> <3846> <3847> <3849> <384A> <3850> endbfrange 100 beginbfrange <3851> <385B> <385C> <385D> <385E> <3860> <3861> <3867> <386A> <386F> <3870> <3871> <3873> <3876> <3878> <387A> <387C> <387D> <387E> <3880> <3881> <3887> <3889> <388E> <388F> <3890> <3891> <3893> <3894> <3895> <3896> <3899> <389C> <389E> <38A0> <38A2> <38A3> <38A5> <38A6> <38AD> <38AE> <38B7> <38B8> <38B9> <38BB> <38BF> <38C3> <38C4> <38C5> <38C7> <38C8> <38CE> <38D1> <38D6> <38D8> <38DA> <38DC> <38DF> <38E0> <38E2> <38E3> <38E5> <38E6> <38E8> <38E9> <38EF> <38F1> <38F7> <38F8> <38F9> <38FA> <38FC> <38FE> <38FF> <3903> <3906> <3907> <3908> <3909> <390B> <390C> <3912> <3914> <3919> <391A> <391B> <391C> <3926> <3927> <3928> <392A> <392F> <3930> <3931> <3932> <3934> <3935> <393B> <393E> <3943> <3944> <3945> <3946> <3948> <3949> <394F> <3952> <3957> <3958> <3959> <395A> <395C> <395D> <3961> <3964> <3969> <396A> <396B> <396C> <396E> <396F> <3975> <3976> <3977> <3978> <397D> <397E> <397F> <3980> <3982> <3983> <3989> <398A> <398C> <398D> <3992> <3993> <3994> <3995> <3997> <3998> <399E> <39A1> <39A6> <39A7> <39A8> <39A9> <39AB> <39AC> <39B2> <39B6> <39B9> <39BA> <39BB> <39BC> <39BE> <39BF> <39C3> <39C7> <39C9> <39CA> <39CC> <39CD> <39D3> <39D4> <39D5> <39D6> <39DD> <39DE> <39DF> <39E0> <39E2> <39E3> <39E6> <39E8> <39EA> <39EC> <39ED> <39F0> <39F4> <39F6> <39FA> <39FB> <39FC> <39FD> <39FF> <3A00> <3A06> <3A08> <3A0D> <3A0E> <3A0F> <3A12> <3A18> <3A19> <3A1C> <3A1D> <3A22> <3A23> <3A25> endbfrange 100 beginbfrange <3A26> <3A28> <3A29> <3A3B> <3A3C> <3A3D> <3A3E> <3A40> <3A42> <3A46> <3A49> <3A4D> <3A4E> <3A4F> <3A50> <3A52> <3A53> <3A59> <3A5C> <3A61> <3A62> <3A64> <3A65> <3A67> <3A68> <3A6E> <3A6F> <3A70> <3A71> <3A76> <3A77> <3A91> <3A92> <3A93> <3A94> <3A96> <3A98> <3A9C> <3A9F> <3AA1> <3AA2> <3AA7> <3AA8> <3AAF> <3AB2> <3AB7> <3AB8> <3ACA> <3ACB> <3AD0> <3AD1> <3AD3> <3AD4> <3AD6> <3AD7> <3ADD> <3AE0> <3AE5> <3AE6> <3AE7> <3AE8> <3AF7> <3AF8> <3AFD> <3AFE> <3AFF> <3B00> <3B02> <3B03> <3B07> <3B0A> <3B0F> <3B10> <3B22> <3B23> <3B29> <3B2A> <3B44> <3B45> <3B46> <3B47> <3B49> <3B4A> <3B50> <3B52> <3B59> <3B5A> <3B5C> <3B5D> <3B5F> <3B60> <3B66> <3B67> <3B71> <3B72> <3B73> <3B74> <3B76> <3B77> <3B7D> <3B80> <3BA1> <3BA2> <3BA3> <3BA4> <3BA5> <3BA7> <3BAB> <3BAE> <3BAF> <3BB1> <3BB2> <3BB5> <3BB6> <3BB7> <3BBA> <3BBC> <3BC1> <3BC2> <3BC3> <3BC4> <3BC6> <3BC7> <3BCD> <3BCF> <3BD4> <3BD5> <3BD7> <3BD8> <3BE7> <3BE8> <3BFF> <3C00> <3C09> <3C0A> <3C0B> <3C0C> <3C0E> <3C0F> <3C15> <3C17> <3C1C> <3C1D> <3C30> <3C31> <3C36> <3C37> <3C49> <3C4A> <3C6C> <3C6D> <3C6E> <3C6F> <3C71> <3C72> <3C78> <3C7C> <3C7F> <3C80> <3C85> <3C86> <3C90> <3C91> <3C97> <3C98> <3CAA> <3CAB> <3CB1> <3CB2> <3CB4> <3CB5> <3CB7> <3CB8> <3CBE> <3CBF> <3CDD> <3CDE> <3CE3> <3CE4> <3CE5> <3CE6> <3CE8> <3CE9> <3CEF> <3CF0> <3CF2> <3CF3> <3CF8> <3CF9> <3CFF> <3D00> <3D0B> <3D0C> <3D2D> <3D2E> <3D48> <3D49> <3D63> <3D64> <3D72> endbfrange 100 beginbfrange <3D73> <3D74> <3D76> <3D97> <3D98> <3D99> <3D9A> <3D9C> <3D9D> <3DA3> <3DA4> <3DA6> <3DA7> <3DAA> <3DAB> <3DAC> <3DAF> <3DB5> <3DB7> <3DBB> <3DBC> <3DBD> <3DBE> <3DC0> <3DC1> <3DC7> <3DC9> <3DCE> <3DCF> <3DD1> <3DD4> <3DDA> <3DDB> <3DDE> <3DDF> <3DFF> <3E01> <3E02> <3E03> <3E05> <3E06> <3E0C> <3E0E> <3E13> <3E14> <3E15> <3E16> <3E18> <3E19> <3E1F> <3E22> <3E27> <3E28> <3E2A> <3E2B> <3E39> <3E3A> <3E40> <3E41> <3E43> <3E44> <3E53> <3E54> <3E59> <3E5A> <3E5B> <3E5C> <3E5E> <3E5F> <3E65> <3E68> <3E6D> <3E6E> <3E70> <3E71> <3E73> <3E74> <3E7F> <3E80> <3EA1> <3EA2> <3EA4> <3EA5> <3EA7> <3EA8> <3EAE> <3EB1> <3EB6> <3EB7> <3EC5> <3EC6> <3ED0> <3ED1> <3ED2> <3ED3> <3ED5> <3ED6> <3EDC> <3EDF> <3EE4> <3EE5> <3EF7> <3EF8> <3EFE> <3F00> <3F01> <3F02> <3F18> <3F19> <3F1B> <3F1C> <3F1E> <3F1F> <3F25> <3F28> <3F2D> <3F2E> <3F30> <3F31> <3F33> <3F34> <3F3A> <3F3B> <3F3E> <3F3F> <3F44> <3F45> <3F46> <3F47> <3F49> <3F4A> <3F50> <3F53> <3F74> <3F75> <3F76> <3F77> <3F78> <3F79> <3F7E> <3F81> <3F86> <3F87> <3F88> <3F89> <3F8B> <3F8C> <3F92> <3F95> <3F9A> <3F9B> <3F9C> <3F9D> <3F9F> <3FA0> <3FA6> <3FA8> <3FAD> <3FAE> <3FC0> <3FC1> <3FE2> <3FE3> <3FE4> <3FE5> <3FE6> <3FE7> <3FED> <3FEF> <3FF4> <3FF5> <3FF6> <3FF7> <3FF9> <3FFA> <3FFF> <4003> <4008> <4009> <400B> <400C> <400E> <400F> <4015> <4017> <401C> <401D> <4037> <4038> <4039> <403A> <403C> <403D> <4043> <4046> <404B> <404C> <404D> <404E> <4050> endbfrange 100 beginbfrange <4051> <4057> <4058> <405B> <405C> <4061> <4062> <4075> <4076> <407B> <407C> <4082> <4083> <4095> <4096> <40B0> <40B1> <40B2> <40B3> <40B5> <40B6> <40BC> <40BF> <40C4> <40C5> <40C7> <40C8> <40CA> <40CB> <40D6> <40D7> <40DC> <40DD> <40F0> <40F1> <40F6> <40F7> <40F8> <40F9> <40FB> <40FC> <40FF> <4100> <4102> <4105> <410A> <410B> <410D> <410E> <4110> <4111> <4117> <4118> <4122> <4123> <4124> <4125> <4127> <4128> <412E> <412F> <4131> <4132> <4153> <4154> <4155> <4156> <4158> <4159> <415F> <4162> <4167> <4168> <4169> <416A> <416C> <416D> <4172> <4174> <4179> <417A> <417B> <417C> <417E> <417F> <4185> <4187> <418C> <418D> <41A0> <41A1> <41C2> <41C3> <41C4> <41C5> <41C7> <41C9> <41CD> <41CF> <41D4> <41D5> <41D6> <41D7> <41D9> <41DA> <41E0> <41E3> <41E8> <41E9> <41EB> <41EC> <41FA> <41FB> <41FF> <4200> <4201> <4202> <4204> <4205> <421B> <421C> <421D> <421E> <4220> <4221> <4227> <422A> <422D> <422F> <4231> <4232> <4248> <4249> <4263> <4264> <4266> <4267> <4274> <4276> <427B> <427C> <4296> <4297> <4298> <4299> <429B> <429C> <42A2> <42A5> <42AA> <42AB> <42BD> <42BE> <42C4> <42C5> <42DF> <42E0> <42E1> <42E2> <42E4> <42E5> <42EB> <42EC> <42EE> <42EF> <42F4> <42F5> <42F7> <42F8> <42FA> <42FB> <42FF> <4300> <4301> <4302> <4305> <4306> <430B> <430C> <430D> <430E> <430F> <4311> <4315> <4317> <431E> <431F> <4321> <4322> <4324> <4325> <432B> <432C> <4335> <4336> <4337> <4338> <433A> <433B> <4341> endbfrange 100 beginbfrange <4344> <4349> <434B> <434D> <434F> <4353> <4355> <4357> <4358> <4359> <435A> <435B> <435C> <435E> <435F> <4365> <4367> <436C> <436D> <43A2> <43A3> <43A4> <43A5> <43A7> <43A8> <43AE> <43B0> <43B5> <43B6> <43B7> <43B8> <43BA> <43BB> <43C1> <43C4> <43C9> <43CA> <43CC> <43CD> <43CF> <43D0> <43D6> <43D7> <43D8> <43D9> <43DE> <43DF> <43E5> <43E6> <43ED> <43EF> <43F6> <43F7> <43F8> <43F9> <43FB> <43FC> <43FF> <4400> <4402> <4405> <440A> <440B> <441E> <441F> <4440> <4441> <4443> <4444> <445A> <445B> <445D> <445E> <4460> <4461> <4468> <446A> <4471> <4472> <4473> <4474> <4475> <4477> <447B> <447E> <4483> <4484> <4497> <4498> <44B9> <44BA> <44BC> <44BD> <44BF> <44C0> <44C6> <44C7> <44C8> <44C9> <44D0> <44D1> <44D3> <44D4> <44D6> <44D7> <44DD> <44DE> <44DF> <44E1> <44E6> <44E7> <44E9> <44EA> <44EC> <44ED> <44F3> <44F5> <44FF> <4500> <4518> <4519> <451A> <451B> <451D> <451E> <4524> <4527> <452C> <452D> <452E> <452F> <4531> <4532> <4535> <4536> <4537> <453A> <453F> <4540> <4541> <4542> <4544> <4545> <454B> <454D> <4552> <4553> <4566> <4567> <4588> <4589> <458A> <458B> <458D> <458F> <4593> <4596> <459B> <459C> <459D> <459E> <45A0> <45A1> <45A7> <45AA> <45AF> <45B0> <45B1> <45B2> <45B4> <45B5> <45BB> <45BD> <45C2> <45C3> <45C5> <45C6> <45C8> <45C9> <45D0> <45D1> <45DA> <45DB> <45DC> <45DD> <45DF> <45E0> <45E3> <45E4> <45E5> <45E8> <45EA> <45EB> <45EC> <45ED> <45EE> <45EF> <45F1> <45F2> <45FB> endbfrange 53 beginbfrange <45FD> <45FF> <4600> <4602> <4603> <4604> <4605> <4612> <4614> <4619> <461A> <461B> <461C> <461E> <461F> <4626> <4629> <462E> <462F> <4631> <4632> <4634> <4635> <463C> <463E> <4645> <4646> <4647> <4648> <464A> <464B> <464E> <464F> <4650> <4651> <4652> <4654> <4659> <465A> <465C> <465D> <465F> <4660> <4666> <4667> <466A> <466B> <4670> <4671> <4672> <4673> <4675> <4676> <4681> <4682> <4687> <4688> <4689> <468A> <468C> <468D> <4693> <4696> <469B> <469C> <469D> <469E> <46A0> <46A1> <46A7> <46A8> <46A9> <46AB> <46B0> <46B1> <46B2> <46B4> <46B9> <46BC> <46BE> <46BF> <46C0> <46C1> <46C3> <46C4> <46C6> <46C7> <46CD> <46CE> <46D0> <46D1> <46D6> <46D7> <46D8> <46D9> <46DB> <46DC> <46E2> <46E5> <46EA> <46EB> <46FF> <0020> <4700> <4749> <0035> <474F> <47AC> <0020> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/B5pc-H b/Resources/cmap/B5pc-H deleted file mode 100644 index 45c6bf3b73c..00000000000 --- a/Resources/cmap/B5pc-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (B5pc-H) %%Title: (B5pc-H Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /B5pc-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 0 def /XUID [1 10 25382] def /WMode 0 def 3 begincodespacerange <00> <80> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <80> <80> 61 99 13743 128 162 248 247 249 256 319 413 476 503 562 595 658 752 815 909 972 1066 1129 1223 1286 1380 1443 1537 1600 1694 1757 1851 1914 2431 2007 2070 2164 2227 2321 2384 2432 2479 2542 2636 2699 2793 2856 2950 3013 3107 3170 3264 3327 3421 3484 3578 3641 3735 3798 3892 3955 4049 4112 4206 4269 4309 4364 4427 4521 4584 4678 4308 4696 4740 4834 4897 4991 5054 5148 5211 5222 5306 5369 5221 5411 5462 5496 5526 5551 5550 5552 5620 5495 5642 5682 5776 5839 5933 5996 628 endcidrange 100 begincidrange 6006 6040 6059 6039 6088 6135 6153 6216 6134 6302 6309 6372 6466 6529 6623 6686 6780 6843 6937 7000 7094 7157 7251 7314 7408 7471 7565 7628 7722 7785 7879 7942 8036 8099 8788 8143 8193 8889 8251 8255 8349 8412 8506 8569 8663 8726 8142 8789 8820 8883 8890 8978 9041 9135 9198 9089 9289 9291 9354 9448 9511 9605 9668 9762 9825 9919 9982 10076 10139 10233 10296 10390 10453 10547 10610 10704 10767 10861 10924 10927 11019 11074 11083 11177 11240 11334 11362 11398 10926 11478 11491 11554 11073 11615 11647 11710 11720 11805 11868 12308 endcidrange 47 begincidrange 11942 11961 12024 12118 11719 12140 12180 11361 12222 12273 12309 12640 12317 12336 12430 12783 12470 12492 12527 12587 12641 12651 12745 12784 12809 12526 12829 12901 12903 12966 13060 12900 13095 13122 13216 13279 13373 13436 13530 13586 13594 13585 13629 13641 13630 13642 96 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/B5pc-UCS2 b/Resources/cmap/B5pc-UCS2 deleted file mode 100644 index 206affe9cf8..00000000000 --- a/Resources/cmap/B5pc-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (B5pc-UCS2) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (B5pc-UCS2C) %%BeginResource: CMap (B5pc-UCS2) %%Title: (B5pc-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /B5pc-UCS2C usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (B5pc_UCS2) def /Supplement 0 def end def /CMapName /B5pc-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/B5pc-UCS2C b/Resources/cmap/B5pc-UCS2C deleted file mode 100644 index 703ad2966de..00000000000 --- a/Resources/cmap/B5pc-UCS2C +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (B5pc-UCS2C) %%Title: (B5pc-UCS2C) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (B5pc_UCS2C) def /Supplement 0 def end def /CMapName /B5pc-UCS2C def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 4 begincodespacerange <00> <80> <83> endcodespacerange 100 beginbfrange <00> <7F> <0000> <80> <80> <005C> <83> <0083> <00A9> <2122> <2026> <3000> <3001> <2022> <22EF> <2025> <00B7> <2013> <2014> <3014> <3010> <300A> <3008> <300C> <300E> <2018> <201C> <301D> <2035> <2032> <203B> <00A7> <3003> <25CB> <25CF> <25B3> <25B2> <25CE> <2606> <2605> <25C7> <25C6> <25A1> <25A0> <25BD> <25BC> <32A3> <2105> <203E> <203E> <00D7> <00F7> <00B1> <221A> <2266> <2260> <221E> <2252> <2261> <223C> endbfrange 100 beginbfrange <2229> <22A5> <2220> <221F> <22BF> <33D2> <33D1> <222B> <222E> <2235> <2234> <2640> <2642> <2295> <2609> <2191> <2193> <2190> <2192> <2196> <2199> <2198> <2225> <2223> <00A5> <3012> <00A2> <2103> <2109> <33D5> <339C> <33CE> <33A1> <338E> <33C4> <00B0> <5159> <515B> <515E> <515D> <5161> <5163> <55E7> <74E9> <7CCE> <2581> <258F> <258E> <258D> <258C> <258B> <258A> <2589> <253C> <2534> <252C> <2524> <251C> <2594> <2500> <2502> <2595> <250C> <2510> <2514> <2518> <256D> <256E> <2570> <256F> <2550> <255E> <256A> <2561> <25E2> <25E5> <25E4> <2571> <2160> <3021> <5341> <5344> <0391> <03A3> <03B1> <03C3> <3105> <3110> endbfrange 100 beginbfrange <02D9> <02C9> <02C7> <02CB> <4E00> <4E59> <4E01> <4E03> <4E43> <4E5D> <4E86> <4E8C> <4EBA> <513F> <5165> <516B> <51E0> <5200> <529B> <5315> <5341> <535C> <53C8> <4E09> <4E0B> <4E08> <4E0A> <4E2B> <4E38> <51E1> <4E45> <4E48> <4E5F> <4E5E> <4E8E> <4EA1> <5140> <5203> <52FA> <5343> <53C9> <53E3> <571F> <58EB> <5915> <5927> <5973> <5B50> <5B53> <5BF8> <5C0F> <5C22> <5C38> <5C71> <5DDD> <5DE5> <5DF1> <5DFE> <5E72> <5EFE> <5F0B> <5F13> <624D> <4E11> <4E10> <4E0D> <4E2D> <4E30> <4E39> <4E4B> <5C39> <4E88> <4E91> <4E95> <4E92> <4E94> <4EA2> <4EC1> <4EC0> <4EC3> <4EC6> <4ECD> <4ECA> <4EC4> <5143> <5141> <5167> <516D> <516C> <5197> <51F6> <5206> <52FB> <52FE> <5316> <5339> <5348> <5347> <5345> <535E> endbfrange 100 beginbfrange <5384> <53CB> <53CA> <53CD> <58EC> <5929> <592B> <592A> <592D> <5B54> <5C11> <5C24> <5C3A> <5C6F> <5DF4> <5E7B> <5EFF> <5F14> <5FC3> <6208> <6236> <624B> <624E> <652F> <6587> <6597> <65A4> <65B9> <65E5> <66F0> <6708> <6728> <6B20> <6B62> <6B79> <6BCB> <6BD4> <6BDB> <6C0F> <6C34> <706B> <722A> <7236> <723B> <7247> <7259> <725B> <72AC> <738B> <4E19> <4E16> <4E15> <4E14> <4E18> <4E3B> <4E4D> <4E4F> <4E4E> <4EE5> <4ED8> <4ED4> <4EE3> <4ED9> <4EDE> <5145> <5144> <5189> <51AC> <51F9> <51F8> <520A> <52A0> <529F> <5305> <5317> <531D> <4EDF> <534A> <5349> <5361> <5360> <536F> <536E> <53BB> <53EF> <53E4> <53F3> <53EC> <53EE> <53E9> <53E8> <53FC> <53F8> <53F5> <53EB> <53E6> <53EA> <53F2> <53F1> <53F0> endbfrange 100 beginbfrange <53E5> <53ED> <53FB> <56DB> <56DA> <5916> <592E> <5931> <5974> <5976> <5B55> <5B83> <5C3C> <5DE8> <5DE7> <5DE6> <5E02> <5E73> <5E7C> <5F01> <5F18> <5F17> <5FC5> <620A> <6253> <6252> <6251> <65A5> <65E6> <672E> <672C> <672A> <672D> <6B63> <6BCD> <6C11> <6C10> <6C38> <6C41> <6C40> <6C3E> <72AF> <7384> <7389> <74DC> <74E6> <7518> <751F> <7528> <7530> <758B> <767D> <76AE> <76BF> <76EE> <77DB> <77E2> <77F3> <793A> <79BE> <7A74> <7ACB> <4E1E> <4E52> <4E69> <4E99> <4EA4> <4EA6> <4EA5> <4EFF> <4F09> <4F19> <4F0A> <4F15> <4F0D> <4F10> <4F0F> <4EF2> <4EF6> <4EFB> <4EF0> <4EF3> <4EFD> <4F01> <4F0B> <5149> <5147> <5146> <5148> <5168> <5171> <518D> <51B0> <5217> <5211> <520E> <5216> <52A3> <5308> <5321> endbfrange 100 beginbfrange <5320> <5370> <5409> <540F> <540C> <540A> <5410> <5401> <540B> <5404> <5411> <540D> <5408> <5403> <540E> <5406> <5412> <56E0> <56DE> <56DD> <5733> <5730> <5728> <572D> <572C> <572F> <5729> <5919> <5937> <5984> <5978> <5983> <597D> <5979> <5982> <5981> <5B57> <5B87> <5B85> <5B89> <5BFA> <5C16> <5C79> <5DDE> <5E06> <5E76> <5E74> <5F0F> <5F1B> <5FD9> <5FD6> <620E> <620C> <6210> <6263> <625B> <6258> <6536> <65E9> <65E8> <65EC> <66F2> <6709> <673D> <6734> <6731> <6735> <6B21> <6B64> <6B7B> <6C16> <6C5D> <6C57> <6C59> <6C5F> <6C50> <6C55> <6C61> <6C5B> <6C4D> <7070> <725F> <725D> <767E> <7AF9> <7C73> <7CF8> <7F36> <7F8A> <7FBD> <8001> <8003> <800C> <8012> <8033> <807F> <8089> <808B> <81E3> <81EA> endbfrange 100 beginbfrange <81F3> <81FC> <820C> <821B> <821F> <826E> <8272> <827E> <866B> <8840> <884C> <8863> <897F> <9621> <4E32> <4EA8> <4F4D> <4F4F> <4F47> <4F57> <4F5E> <4F34> <4F5B> <4F55> <4F30> <4F50> <4F3D> <4F3A> <4F38> <4F43> <4F54> <4F3C> <4F46> <4F63> <4F5C> <4F60> <4F2F> <4F4E> <4F36> <4F59> <4F5D> <4F48> <4F5A> <514C> <514B> <514D> <5175> <51B6> <5225> <5224> <5229> <5228> <52AB> <52A9> <52AC> <5323> <5373> <5375> <541D> <542D> <541E> <543E> <5426> <544E> <5427> <5446> <5443> <5433> <5448> <5442> <541B> <5429> <544A> <5439> <543B> <5438> <542E> <5435> <5420> <543C> <5440> <5431> <542B> <541F> <542C> <56EA> <56F0> <56E4> <56EB> <574A> <5751> <5740> <574D> <5747> <574E> <573E> <5750> <574F> <573B> <58EF> endbfrange 100 beginbfrange <593E> <599D> <5992> <59A8> <599E> <59A3> <5999> <5996> <598D> <59A4> <5993> <598A> <59A5> <5B5D> <5B5C> <5B5A> <5B8C> <5B8B> <5B8F> <5C2C> <5C40> <5C3F> <5C3E> <5C90> <5C94> <5C8C> <5DEB> <5E0C> <5E8F> <5E87> <5E8A> <5EF7> <5F04> <5F1F> <5F64> <5F62> <5F77> <5F79> <5FD8> <5FCC> <5FD7> <5FCD> <5FF1> <5FEB> <5FF8> <5FEA> <6212> <6211> <6284> <6297> <6296> <6280> <6276> <6289> <626D> <628A> <627C> <627E> <6279> <6273> <6292> <626F> <6298> <626E> <6295> <6293> <6291> <6286> <6539> <653B> <6538> <65F1> <66F4> <675F> <674E> <675C> <6756> <675E> <6749> <6746> <6760> <6753> <6757> <6B65> <6BCF> <6C42> <6C5E> <6C99> <6C81> <6C88> <6C85> <6C9B> <6C6A> <6C7A> <6C90> <6C70> <6C8C> <6C68> <6C96> <6C92> endbfrange 100 beginbfrange <6C7D> <6C83> <6C72> <6C7E> <6C74> <6C86> <6C76> <6C8D> <6C94> <6C98> <6C82> <7076> <707C> <7078> <7262> <7261> <7260> <72C4> <72C2> <7396> <752C> <752B> <7537> <7682> <76EF> <77E3> <79C1> <79C0> <79BF> <7A76> <7CFB> <7F55> <8096> <8093> <809D> <8098> <809B> <809A> <80B2> <826F> <8292> <828B> <828D> <898B> <89D2> <8A00> <8C37> <8C46> <8C55> <8C9D> <8D64> <8D70> <8DB3> <8EAB> <8ECA> <8F9B> <8FB0> <8FC2> <8FC6> <8FC5> <8FC4> <5DE1> <9091> <90A2> <90AA> <90A6> <90A3> <9149> <91C6> <91CC> <9632> <962E> <9631> <962A> <962C> <4E26> <4E56> <4E73> <4E8B> <4E9B> <4E9E> <4EAB> <4F6F> <4F9D> <4F8D> <4F73> <4F7F> <4F6C> <4F9B> <4F8B> <4F86> <4F83> <4F70> <4F75> <4F88> <4F69> <4F7B> <4F96> <4F7E> <4F8F> endbfrange 100 beginbfrange <4F91> <4F7A> <5154> <5152> <5155> <5169> <5177> <5176> <5178> <51BD> <51FD> <523B> <5238> <5237> <523A> <5230> <522E> <5236> <5241> <52BE> <52BB> <5352> <5354> <5353> <5351> <5366> <5377> <53D6> <53D4> <53D7> <5473> <5475> <5496> <5478> <5495> <5480> <547B> <5477> <5484> <5492> <5486> <547C> <5490> <5471> <5476> <548C> <549A> <5462> <5468> <548B> <547D> <548E> <56FA> <5783> <5777> <576A> <5769> <5761> <5766> <5764> <577C> <591C> <5949> <5947> <5944> <5954> <59BE> <59BB> <59D4> <59B9> <59AE> <59D1> <59C6> <59D0> <59CD> <59CB> <59D3> <59CA> <59AF> <59B3> <59D2> <59C5> <5B5F> <5B64> <5B63> <5B97> <5B9A> <5B98> <5B9C> <5B99> <5B9B> <5C1A> <5C48> <5C45> <5C46> <5CB7> <5CA1> <5CB8> <5CA9> <5CAB> endbfrange 100 beginbfrange <5CB1> <5CB3> <5E18> <5E1A> <5E16> <5E15> <5E1B> <5E11> <5E78> <5E9A> <5E97> <5E9C> <5E95> <5EF6> <5F26> <5F29> <5F80> <5F7F> <5F7C> <5FDD> <5FE0> <5FFD> <5FF5> <5FFF> <600F> <6014> <602F> <6035> <6016> <602A> <6015> <6021> <6027> <6029> <602B> <601B> <6216> <6215> <623F> <623E> <6240> <627F> <62C9> <62CC> <62C4> <62BF> <62C2> <62B9> <62D2> <62DB> <62AB> <62D3> <62CB> <62C8> <62A8> <62BD> <62BC> <62D0> <62D9> <62C7> <62CD> <62B5> <62DA> <62B1> <62D8> <62D6> <62C6> <62AC> <62CE> <653E> <65A7> <65BC> <65FA> <6614> <6613> <660C> <6606> <6602> <660E> <6600> <660F> <6615> <660A> <6607> <670D> <670B> <676D> <678B> <6795> <6771> <679C> <6773> <6777> <6787> <679D> <6797> <676F> <677F> <6789> <677E> endbfrange 100 beginbfrange <6790> <6775> <679A> <6793> <677C> <676A> <6772> <6B23> <6B66> <6B7F> <6C13> <6C1B> <6CE3> <6CE8> <6CF3> <6CB1> <6CCC> <6CE5> <6CB3> <6CBD> <6CBC> <6CE2> <6CAB> <6CD5> <6CD3> <6CB8> <6CC4> <6CB9> <6CC1> <6CAE> <6CD7> <6CC5> <6CF1> <6CBF> <6CBB> <6CE1> <6CDB> <6CCA> <6CAC> <6CEF> <6CDC> <6CD6> <6CE0> <7095> <708E> <7092> <708A> <7099> <722C> <7238> <7248> <7267> <7269> <72C0> <72CE> <72D9> <72D7> <72D0> <73A9> <73A8> <739F> <73AB> <73A5> <753D> <759D> <7599> <7684> <76C2> <76F2> <76F4> <77E5> <77FD> <793E> <7940> <79C9> <79C8> <7A7A> <7A79> <7AFA> <7CFE> <7F54> <7F8C> <7F8B> <8005> <80BA> <80A5> <80A2> <80B1> <80A1> <80AB> <80A9> <80B4> <80AA> <80AF> <81E5> <81FE> <820D> <82B3> <829D> <8299> endbfrange 100 beginbfrange <82AD> <82BD> <829F> <82B9> <82B1> <82AC> <82A5> <82AF> <82B8> <82A3> <82B0> <82BE> <82B7> <864E> <8671> <521D> <8868> <8ECB> <8FCE> <8FD4> <8FD1> <90B5> <90B8> <90B1> <90B6> <91C7> <91D1> <9577> <9580> <961C> <9640> <963F> <963B> <9644> <9642> <96B9> <96E8> <9752> <975E> <4E9F> <4EAD> <4FE1> <4FB5> <4FAF> <4FBF> <4FE0> <4FD1> <4FCF> <4FDD> <4FC3> <4FB6> <4FD8> <4FDF> <4FCA> <4FD7> <4FAE> <4FD0> <4FC4> <4FC2> <4FDA> <4FCE> <4FDE> <4FB7> <5157> <5192> <5191> <51A0> <524E> <5243> <524A> <524D> <524C> <524B> <5247> <52C7> <52C9> <52C3> <52C1> <530D> <5357> <537B> <539A> <53DB> <54AC> <54C0> <54A8> <54CE> <54C9> <54B8> <54A6> <54B3> <54C7> <54C2> <54BD> <54AA> <54C1> <54C4> <54C8> <54AF> <54AB> endbfrange 100 beginbfrange <54B1> <54BB> <54A9> <54A7> <54BF> <56FF> <5782> <578B> <57A0> <57A3> <57A2> <57CE> <57AE> <5793> <5955> <5951> <594F> <594E> <5950> <59DC> <59D8> <59FF> <59E3> <59E8> <5A03> <59E5> <59EA> <59DA> <59E6> <5A01> <59FB> <5B69> <5BA3> <5BA6> <5BA4> <5BA2> <5BA5> <5C01> <5C4E> <5C4D> <5C4B> <5CD9> <5CD2> <5DF7> <5E1D> <5E25> <5E1F> <5E7D> <5EA0> <5EA6> <5EFA> <5F08> <5F2D> <5F65> <5F88> <5F85> <5F8A> <5F87> <5F8C> <5F89> <6012> <601D> <6020> <6025> <600E> <6028> <604D> <6070> <6068> <6062> <6046> <6043> <606C> <606B> <606A> <6064> <6241> <62DC> <6316> <6309> <62FC> <62ED> <6301> <62EE> <62FD> <6307> <62F1> <62F7> <62EF> <62EC> <62FE> <62F4> <6311> <6302> <653F> <6545> <65AB> <65BD> <65E2> <6625> endbfrange 100 beginbfrange <662D> <6620> <6627> <662F> <661F> <6628> <6631> <6624> <66F7> <67FF> <67D3> <67F1> <67D4> <67D0> <67EC> <67B6> <67AF> <67F5> <67E9> <67EF> <67C4> <67D1> <67B4> <67DA> <67E5> <67B8> <67CF> <67DE> <67F3> <67B0> <67D9> <67E2> <67DD> <67D2> <6B6A> <6B83> <6B86> <6BB5> <6BD2> <6BD7> <6C1F> <6CC9> <6D0B> <6D32> <6D2A> <6D41> <6D25> <6D0C> <6D31> <6D1E> <6D17> <6D3B> <6D3D> <6D36> <6D1B> <6CF5> <6D39> <6D27> <6D38> <6D29> <6D2E> <6D35> <6D0E> <6D2B> <70AB> <70BA> <70B3> <70AC> <70AF> <70AD> <70B8> <70AE> <70A4> <7230> <7272> <726F> <7274> <72E9> <72E0> <73B7> <73CA> <73BB> <73B2> <73CD> <73C0> <73B3> <751A> <752D> <754F> <754C> <754E> <754B> <75AB> <75A4> <75A2> <7678> <7686> <76C8> <76C6> <76C3> endbfrange 100 beginbfrange <76C5> <7701> <76F9> <76F8> <7709> <770B> <76FE> <76FC> <7707> <77DC> <7802> <7814> <780C> <7946> <7949> <7948> <7947> <79B9> <79D1> <79CB> <7A7F> <7A81> <7AFF> <7AFD> <7C7D> <7D02> <7D05> <7D00> <7D09> <7D07> <7D04> <7D06> <7F38> <7F8E> <7FBF> <8004> <8010> <800D> <8011> <8036> <80D6> <80E5> <80DA> <80C3> <80CC> <80E1> <80DB> <80CE> <80DE> <80E4> <80DD> <81F4> <8222> <82E7> <8303> <8305> <82E3> <82DB> <82E6> <8304> <82E5> <8302> <8309> <82D2> <82D7> <82F1> <8301> <82DC> <82D4> <82D1> <82DE> <82D3> <82DF> <82EF> <8306> <8650> <8679> <867B> <867A> <884D> <886B> <8981> <89D4> <8A08> <8A02> <8C9E> <8CA0> <8D74> <8D73> <8DB4> <8ECD> <8ECC> <8FF0> <8FE6> <8FE2> <8FEA> <8FE5> <8FED> <8FEB> <8FE4> endbfrange 100 beginbfrange <8FE8> <90CA> <90CE> <90C1> <90C3> <914B> <914A> <91CD> <9582> <9650> <964B> <9762> <9769> <97CB> <97ED> <97F3> <9801> <98A8> <98DB> <98DF> <9996> <9999> <4E58> <4EB3> <500C> <5023> <4FEF> <5026> <5025> <4FF8> <5029> <5016> <5006> <503C> <501F> <501A> <5012> <5011> <4FFA> <5000> <5014> <5028> <4FF1> <5021> <500B> <5019> <5018> <4FF3> <4FEE> <502D> <502A> <4FFE> <502B> <5009> <517C> <51A4> <51A2> <51CD> <51CC> <51C6> <51CB> <5256> <525C> <5254> <525B> <525D> <532A> <537F> <539F> <539D> <53DF> <54E8> <5510> <5501> <5537> <54FC> <54E5> <54F2> <5506> <54FA> <5514> <54E9> <54ED> <54E1> <5509> <54EE> <54EA> <54E6> <5527> <5507> <54FD> <550F> <5703> <57C2> <57D4> <57CB> <57C3> <5809> <590F> <5957> endbfrange 100 beginbfrange <595A> <5A11> <5A18> <5A1C> <5A1F> <5A1B> <5A13> <59EC> <5A20> <5A23> <5A29> <5A25> <5A0C> <5A09> <5B6B> <5C58> <5BB0> <5BB3> <5BB6> <5BB4> <5BAE> <5BB5> <5BB9> <5BB8> <5C04> <5C51> <5C55> <5C50> <5CED> <5CFD> <5CFB> <5CEA> <5CE8> <5CF0> <5CF6> <5D01> <5CF4> <5DEE> <5E2D> <5E2B> <5EAB> <5EAD> <5EA7> <5F31> <5F92> <5F91> <5F90> <6059> <6063> <6065> <6050> <6055> <606D> <6069> <606F> <6084> <609F> <609A> <608D> <6094> <608C> <6085> <6096> <6247> <62F3> <6308> <62FF> <634E> <633E> <632F> <6355> <6342> <6346> <634F> <6349> <633A> <6350> <633D> <632A> <6328> <634D> <634C> <6548> <6599> <65C1> <65C5> <6642> <6649> <664F> <6643> <6652> <664C> <6645> <6641> <66F8> <6714> <6717> <6821> <6838> <6848> endbfrange 100 beginbfrange <6846> <6853> <6839> <6842> <6854> <6829> <68B3> <6817> <684C> <6851> <683D> <67F4> <6850> <6840> <683C> <6843> <682A> <6845> <6813> <6818> <6841> <6B8A> <6B89> <6BB7> <6C23> <6C27> <6C26> <6C24> <6CF0> <6D6A> <6D95> <6D88> <6D87> <6D66> <6D78> <6D77> <6D59> <6D93> <6D6C> <6D89> <6D6E> <6D5A> <6D74> <6D69> <6D8C> <6D8A> <6D79> <6D85> <6D65> <6D94> <70CA> <70D8> <70E4> <70D9> <70C8> <70CF> <7239> <7279> <72FC> <72F9> <72FD> <72F8> <72F7> <7386> <73ED> <7409> <73EE> <73E0> <73EA> <73DE> <7554> <755D> <755C> <755A> <7559> <75BE> <75C5> <75C7> <75B2> <75BD> <75BC> <75B9> <75C2> <75B8> <768B> <76B0> <76CA> <76CD> <7729> <771F> <7728> <77E9> <7830> <7827> <7838> <781D> <7834> <7837> <7825> <782D> endbfrange 100 beginbfrange <7820> <781F> <7832> <7955> <7950> <7960> <795F> <7956> <795E> <795D> <7957> <795A> <79E4> <79E3> <79E7> <79DF> <79E6> <79E9> <79D8> <7A84> <7A88> <7AD9> <7B06> <7B11> <7C89> <7D21> <7D17> <7D0B> <7D0A> <7D20> <7D22> <7D14> <7D10> <7D15> <7D1A> <7D1C> <7D0D> <7D19> <7D1B> <7F3A> <7F5F> <7F94> <7FC5> <7FC1> <8006> <8018> <8015> <8019> <8017> <803D> <803F> <80F1> <8102> <80F0> <8105> <80ED> <80F4> <8106> <80F8> <80F3> <8108> <80FD> <810A> <80FC> <80EF> <81ED> <81EC> <8200> <8210> <822A> <8228> <822C> <82BB> <832B> <8352> <8354> <834A> <8338> <8350> <8349> <8335> <8334> <834F> <8332> <8339> <8336> <8317> <8340> <8331> <8328> <8343> <8654> <868A> <86AA> <8693> <86A4> <86A9> <868C> <86A3> <869C> endbfrange 100 beginbfrange <8870> <8877> <8881> <887D> <8879> <8A18> <8A10> <8A0E> <8A0C> <8A15> <8A0A> <8A17> <8A13> <8A16> <8A0F> <8A11> <8C48> <8C7A> <8C79> <8CA1> <8D77> <8EAC> <8ED2> <8ED4> <8ECF> <8FB1> <9001> <9006> <8FF7> <9000> <8FFA> <8FF4> <9003> <8FFD> <9005> <8FF8> <9095> <90E1> <90DD> <90E2> <9152> <914D> <914C> <91D8> <91DD> <91D7> <91DC> <91D9> <9583> <9662> <9661> <965B> <965D> <9664> <9658> <965E> <96BB> <98E2> <99AC> <9AA8> <9AD8> <9B25> <9B32> <9B3C> <4E7E> <507A> <507D> <505C> <5047> <5043> <504C> <505A> <5049> <5065> <5076> <504E> <5055> <5075> <5074> <5077> <504F> <500F> <506F> <506D> <515C> <5195> <51F0> <526A> <526F> <52D2> <52D9> <52D8> <52D5> <5310> <530F> <5319> <533F> <533E> <53C3> <66FC> endbfrange 100 beginbfrange <5546> <556A> <5566> <5544> <555E> <5561> <5543> <554A> <5531> <5556> <554F> <5555> <552F> <5564> <5538> <552E> <555C> <552C> <5563> <5533> <5541> <5557> <5708> <570B> <5709> <57DF> <5805> <580A> <5806> <57E0> <57E4> <57FA> <5802> <5835> <57F7> <57F9> <5920> <5962> <5A36> <5A41> <5A49> <5A66> <5A6A> <5A40> <5A3C> <5A62> <5A5A> <5A46> <5A4A> <5B70> <5BC7> <5BC5> <5BC4> <5BC2> <5BBF> <5BC6> <5C09> <5C08> <5C07> <5C60> <5C5C> <5D07> <5D06> <5D0E> <5D1B> <5D16> <5D22> <5D11> <5D29> <5D14> <5D19> <5D24> <5D27> <5D17> <5DE2> <5E38> <5E36> <5E33> <5E37> <5EB7> <5EB6> <5EB5> <5EBE> <5F35> <5F37> <5F57> <5F6C> <5F69> <5F6B> <5F97> <5F99> <5F9E> <5F98> <5FA1> <5FA0> <5F9C> <607F> <60A3> <6089> <60A0> endbfrange 100 beginbfrange <60A8> <60CB> <60B4> <60E6> <60BD> <60C5> <60BB> <60B5> <60DC> <60BC> <60D8> <60D5> <60C6> <60DF> <60B8> <60DA> <60C7> <621A> <6248> <63A0> <63A7> <6372> <6396> <63A2> <63A5> <6377> <6367> <6398> <63AA> <6371> <63A9> <6389> <6383> <639B> <636B> <63A8> <6384> <6388> <6399> <63A1> <63AC> <6392> <638F> <6380> <637B> <6369> <6368> <637A> <655D> <6556> <6551> <6559> <6557> <555F> <654F> <6558> <6555> <6554> <659C> <659B> <65AC> <65CF> <65CB> <65CE> <665D> <665A> <6664> <6668> <6666> <665E> <66F9> <52D7> <671B> <6881> <68AF> <68A2> <6893> <68B5> <687F> <6876> <68B1> <68A7> <6897> <68B0> <6883> <68C4> <68AD> <6886> <6885> <6894> <689D> <68A8> <689F> <68A1> <6882> <6B32> <6BBA> <6BEB> <6C2B> <6D8E> endbfrange 100 beginbfrange <6DBC> <6DF3> <6DD9> <6DB2> <6DE1> <6DCC> <6DE4> <6DFB> <6DFA> <6E05> <6DC7> <6DCB> <6DAF> <6DD1> <6DAE> <6DDE> <6DF9> <6DB8> <6DF7> <6DF5> <6DC5> <6DD2> <6E1A> <6DB5> <6DDA> <6DEB> <6DD8> <6DEA> <6DF1> <6DEE> <6DE8> <6DC6> <6DC4> <6DAA> <6DEC> <6DBF> <6DE6> <70F9> <7109> <70FD> <70EF> <723D> <727D> <7281> <731C> <731B> <7316> <7313> <7319> <7387> <7405> <740A> <7403> <7406> <73FE> <740D> <74E0> <74F6> <74F7> <751C> <7522> <7565> <7562> <7570> <758F> <75D4> <75B5> <75CA> <75CD> <768E> <76D4> <76D2> <76DB> <7737> <773E> <773C> <7736> <7738> <773A> <786B> <7843> <784E> <7965> <7968> <796D> <79FB> <7A92> <7A95> <7B20> <7B28> <7B1B> <7B2C> <7B26> <7B19> <7B1E> <7B2E> <7C92> <7C97> <7C95> <7D46> endbfrange 100 beginbfrange <7D43> <7D71> <7D2E> <7D39> <7D3C> <7D40> <7D30> <7D33> <7D44> <7D2F> <7D42> <7D32> <7D31> <7F3D> <7F9E> <7F9A> <7FCC> <7FCE> <7FD2> <801C> <804A> <8046> <812F> <8116> <8123> <812B> <8129> <8130> <8124> <8202> <8235> <8237> <8236> <8239> <838E> <839E> <8398> <8378> <83A2> <8396> <83BD> <83AB> <8392> <838A> <8393> <8389> <83A0> <8377> <837B> <8386> <83A7> <8655> <5F6A> <86C7> <86C0> <86B6> <86C4> <86B5> <86C6> <86CB> <86B1> <86AF> <86C9> <8853> <889E> <8888> <88AB> <8892> <8896> <888D> <888B> <8993> <898F> <8A2A> <8A1D> <8A23> <8A25> <8A31> <8A2D> <8A1F> <8A1B> <8A22> <8C49> <8C5A> <8CA9> <8CAC> <8CAB> <8CA8> <8CAA> <8CA7> <8D67> <8D66> <8DBE> <8DBA> <8EDB> <8EDF> <9019> <900D> <901A> <9017> endbfrange 100 beginbfrange <9023> <901F> <901D> <9010> <9015> <901E> <9020> <900F> <9022> <9016> <901B> <9014> <90E8> <90ED> <90FD> <9157> <91CE> <91F5> <91E6> <91E3> <91E7> <91ED> <91E9> <9589> <966A> <9675> <9673> <9678> <9670> <9674> <9676> <966C> <96C0> <96EA> <96E9> <7AE0> <7ADF> <9802> <9B5A> <9CE5> <9E75> <9E7F> <9EA5> <9EBB> <50A2> <508D> <5085> <5099> <5091> <5080> <5096> <5098> <509A> <6700> <51F1> <5272> <5274> <5269> <52DE> <52DD> <52DB> <535A> <53A5> <557B> <5580> <55A7> <557C> <558A> <559D> <5598> <5582> <559C> <55AA> <5594> <5587> <558B> <5583> <55B3> <55AE> <559F> <553E> <55B2> <559A> <55BB> <55AC> <55B1> <557E> <5589> <55AB> <5599> <570D> <582F> <582A> <5834> <5824> <5830> <5821> <581D> <5820> <58F9> endbfrange 100 beginbfrange <5960> <5A77> <5A9A> <5A7F> <5A92> <5A9B> <5AA7> <5B73> <5B71> <5BD2> <5BCC> <5BD3> <5BD0> <5C0A> <5C31> <5D4C> <5D50> <5D34> <5D47> <5DFD> <5E45> <5E3D> <5E40> <5E43> <5E7E> <5ECA> <5EC1> <5EC4> <5F3C> <5F6D> <5FA9> <5FA8> <60D1> <60E1> <60B2> <60B6> <60E0> <611C> <6123> <60FA> <6115> <60F0> <60FB> <60F4> <6168> <60F1> <610E> <60F6> <6109> <6100> <6112> <621F> <6249> <63A3> <638C> <63CF> <63C0> <63E9> <63C9> <63C6> <63CD> <63D2> <63E3> <63D0> <63E1> <63D6> <63ED> <6376> <63F4> <63EA> <63DB> <6452> <63DA> <63F9> <655E> <6566> <6562> <6591> <6590> <65AF> <666E> <6670> <6674> <6676> <666F> <6691> <667A> <667E> <6677> <66FE> <671F> <671D> <68FA> <68D5> <68E0> <68D8> <68D7> <6905> <68DF> <68F5> endbfrange 100 beginbfrange <68EE> <68E7> <68F9> <68D2> <68F2> <68E3> <68CB> <68CD> <690D> <6912> <690E> <68C9> <68DA> <696E> <68FB> <6B3E> <6B3A> <6B3D> <6B98> <6B96> <6BBC> <6BEF> <6C2E> <6C2C> <6E2F> <6E38> <6E54> <6E21> <6E32> <6E67> <6E4A> <6E20> <6E25> <6E23> <6E1B> <6E5B> <6E58> <6E24> <6E56> <6E6E> <6E2D> <6E26> <6E6F> <6E34> <6E4D> <6E3A> <6E2C> <6E43> <6E1D> <6E3E> <6ECB> <6E89> <6E19> <6E4E> <6E63> <6E44> <6E72> <6E69> <6E5F> <7119> <7126> <7130> <7121> <7136> <716E> <711C> <724C> <7284> <7280> <7336> <7325> <7334> <7329> <743A> <742A> <7433> <7422> <7425> <7435> <7434> <742F> <741B> <7426> <7428> <7525> <756B> <756A> <75E2> <75DB> <75E3> <75D9> <75D8> <75DE> <75E0> <767B> <7696> <7693> <76B4> <76DC> <774F> endbfrange 100 beginbfrange <77ED> <785D> <786C> <786F> <7A0D> <7A08> <7A0B> <7A05> <7A00> <7A98> <7A97> <7A96> <7AE5> <7AE3> <7B49> <7B56> <7B46> <7B50> <7B52> <7B54> <7B4D> <7B4B> <7B4F> <7B51> <7C9F> <7CA5> <7D5E> <7D50> <7D68> <7D55> <7D2B> <7D6E> <7D72> <7D61> <7D66> <7D62> <7D70> <7D73> <5584> <7FD4> <800B> <8052> <8085> <8155> <8154> <814B> <8151> <814E> <8139> <8146> <813E> <814C> <8153> <8174> <8212> <821C> <83E9> <8403> <83F8> <840D> <83E0> <83C5> <840B> <83C1> <83EF> <83F1> <83F4> <8457> <840A> <83F0> <840C> <83CC> <83FD> <83F2> <83CA> <8438> <840E> <8404> <83DC> <8407> <83D4> <83DF> <865B> <86DF> <86D9> <86ED> <86D4> <86DB> <86E4> <86D0> <86DE> <8857> <88C1> <88B1> <8983> <8996> <8A3B> <8A60> <8A55> <8A5E> endbfrange 100 beginbfrange <8A3C> <8A41> <8A54> <8A5B> <8A50> <8A46> <8A34> <8A3A> <8A36> <8A56> <8C61> <8C82> <8CAF> <8CBC> <8CB3> <8CBD> <8CC1> <8CBB> <8CC0> <8CB4> <8CB7> <8CB6> <8CBF> <8CB8> <8D8A> <8D85> <8D81> <8DCE> <8DDD> <8DCB> <8DDA> <8DD1> <8DCC> <8DDB> <8DC6> <8EFB> <8EF8> <8EFC> <8F9C> <902E> <9035> <9031> <9038> <9032> <9036> <9102> <90F5> <9109> <90FE> <9163> <9165> <91CF> <9214> <9223> <9209> <921E> <920D> <9210> <9207> <9211> <9594> <958F> <958B> <9591> <9593> <9592> <958E> <968A> <968E> <968B> <967D> <9685> <968D> <9672> <9684> <96C1> <96C5> <96C4> <96C6> <96EF> <96F2> <97CC> <9805> <9808> <98E7> <98EA> <98EF> <98E9> <98F2> <98ED> <99AE> <99AD> <9EC3> <9ECD> <9ED1> <4E82> <50AD> <50B5> <50B2> <50C5> endbfrange 100 beginbfrange <50BE> <50AC> <50B7> <50BB> <50AF> <50C7> <527F> <5277> <527D> <52DF> <52E6> <52E4> <52E2> <532F> <55DF> <55E8> <55D3> <55E6> <55CE> <55DC> <55C7> <55D1> <55E3> <55EF> <55DA> <55E1> <55C5> <55E5> <55C9> <5712> <585E> <5851> <5858> <5857> <585A> <5854> <586B> <584C> <586D> <584A> <5862> <5852> <584B> <5967> <5AC1> <5AC9> <5ACC> <5ABE> <5ABD> <5ABC> <5AB3> <5AC2> <5AB2> <5D69> <5D6F> <5E4C> <5E79> <5EC9> <5EC8> <5F12> <5F59> <5FAC> <5FAE> <611A> <610F> <6148> <611F> <60F3> <611B> <60F9> <6101> <6108> <614E> <614C> <6144> <614D> <613E> <6134> <6127> <610D> <6106> <6137> <6221> <6413> <643E> <641E> <642A> <642D> <643D> <642C> <640F> <641C> <6414> <640D> <6436> <6416> <6406> <656C> <659F> <65B0> endbfrange 100 beginbfrange <6697> <6689> <6687> <6696> <6684> <6698> <668D> <6703> <6994> <696D> <695A> <6977> <6960> <6954> <6975> <6930> <6982> <694A> <6968> <696B> <695E> <6953> <6979> <6986> <695D> <6963> <695B> <6B47> <6B72> <6BC0> <6BBF> <6BD3> <6BFD> <6EA2> <6EAF> <6ED3> <6EB6> <6EC2> <6E90> <6E9D> <6EC7> <6EC5> <6EA5> <6E98> <6EBC> <6EBA> <6EAB> <6ED1> <6E96> <6E9C> <6EC4> <6ED4> <6EAA> <6EA7> <6EB4> <714E> <7159> <7169> <7164> <7149> <7167> <715C> <716C> <7166> <714C> <7165> <715E> <7146> <7168> <7156> <723A> <7252> <7337> <7345> <733F> <733E> <746F> <745A> <7455> <745F> <745E> <7441> <743F> <7459> <745B> <7576> <7578> <7600> <75F0> <7601> <75F2> <75F1> <75FA> <75FF> <75F4> <75F3> <76DE> <775B> <776B> <7766> endbfrange 100 beginbfrange <775E> <7763> <7779> <776A> <776C> <775C> <7765> <7768> <7762> <77EE> <788E> <78B0> <7897> <788C> <7889> <787C> <7891> <7893> <787F> <797A> <797F> <7981> <842C> <79BD> <7A1C> <7A1A> <7A20> <7A14> <7A1F> <7A1E> <7A9F> <7B77> <7BC0> <7B60> <7B6E> <7B67> <7CB1> <7CB3> <7CB5> <7D93> <7D79> <7D91> <7D81> <7D8F> <7D5B> <7F6E> <7F69> <7F72> <7FA9> <7FA8> <7FA4> <8056> <8058> <8086> <8084> <8171> <8170> <8178> <8165> <816E> <8173> <816B> <8179> <8166> <8205> <8247> <8482> <8477> <843D> <8431> <8475> <8466> <846B> <8449> <846C> <845B> <843C> <8435> <8461> <8463> <8469> <846D> <8446> <865E> <865C> <865F> <86F9> <8713> <8708> <8707> <8700> <86FE> <86FB> <8702> <8706> <870A> <8859> <88DF> <88D4> <88D9> endbfrange 100 beginbfrange <88DC> <88D8> <88DD> <88E1> <88CA> <88D5> <88D2> <899C> <89E3> <8A6B> <8A72> <8A66> <8A69> <8A70> <8A87> <8A7C> <8A63> <8AA0> <8A71> <8A85> <8A6D> <8A62> <8A6E> <8A6C> <8A79> <8A7B> <8A3E> <8A68> <8C62> <8C8A> <8C89> <8CCA> <8CC7> <8CC4> <8CB2> <8CC3> <8CC2> <8CC5> <8DE1> <8DDF> <8DE8> <8DEF> <8DF3> <8DFA> <8DEA> <8DE4> <8DE6> <8EB2> <8F03> <8F09> <8EFE> <8F0A> <8F9F> <8FB2> <904B> <904A> <9053> <9042> <9054> <903C> <9055> <9050> <9047> <904F> <904E> <904D> <9051> <903E> <9041> <9112> <9117> <916C> <916A> <9169> <91C9> <9237> <9257> <9238> <923D> <9240> <923E> <925B> <924B> <9264> <9251> <9234> <9249> <924D> <9245> <9239> <923F> <925A> <9598> <9698> <9694> <96CD> <96CB> <96C9> <96F7> <96FB> endbfrange 100 beginbfrange <96F9> <96F6> <9756> <9774> <9776> <9810> <9813> <980A> <9812> <980C> <98FC> <98F4> <98FD> <99B3> <99B1> <99B4> <9AE1> <9CE9> <9E82> <9F0E> <9F13> <9F20> <50E7> <50EE> <50E5> <50D6> <50ED> <50DA> <50D5> <50CF> <50D1> <50F1> <50CE> <50E9> <5162> <51F3> <5283> <5282> <5331> <53AD> <55FE> <5600> <561B> <5617> <55FD> <5614> <5606> <5609> <560D> <55F7> <5616> <561F> <5608> <5610> <55F6> <5718> <5716> <5875> <587E> <5883> <5893> <588A> <5879> <5885> <587D> <58FD> <5925> <5922> <5924> <596A> <5969> <5AE1> <5AE6> <5AE9> <5AD7> <5AD6> <5AD8> <5AE3> <5B75> <5BDE> <5BE7> <5BE1> <5BE5> <5BE8> <5BE2> <5BE4> <5BDF> <5C0D> <5C62> <5D84> <5D87> <5E5B> <5E63> <5E55> <5E57> <5E54> <5ED3> <5ED6> <5F0A> <5F46> endbfrange 100 beginbfrange <5F70> <5FB9> <6147> <613F> <614B> <6177> <6162> <615F> <615A> <6158> <6175> <622A> <6487> <6458> <6454> <64A4> <6478> <645F> <647A> <6451> <6467> <6434> <646D> <647B> <6572> <65A1> <65D7> <65D6> <66A2> <66A8> <669D> <699C> <69A8> <6995> <69C1> <69AE> <69D3> <69CB> <699B> <69B7> <69BB> <69AB> <69B4> <69D0> <69CD> <69AD> <69CC> <69A6> <69C3> <69A3> <6B49> <6B4C> <6C33> <6F33> <6F14> <6EFE> <6F13> <6EF4> <6F29> <6F3E> <6F20> <6F2C> <6F0F> <6F02> <6F22> <6EFF> <6EEF> <6F06> <6F31> <6F38> <6F32> <6F23> <6F15> <6F2B> <6F2F> <6F88> <6F2A> <6EEC> <6F01> <6EF2> <6ECC> <6EF7> <7194> <7199> <717D> <718A> <7184> <7192> <723E> <7292> <7296> <7344> <7350> <7464> <7463> <746A> <7470> <746D> <7504> <7591> endbfrange 100 beginbfrange <7627> <760D> <760B> <7609> <7613> <76E1> <76E3> <7784> <777D> <777F> <7761> <78C1> <789F> <78A7> <78B3> <78A9> <78A3> <798E> <798D> <7A2E> <7A31> <7AAA> <7AA9> <7AED> <7AEF> <7BA1> <7B95> <7B8B> <7B75> <7B97> <7B9D> <7B94> <7B8F> <7BB8> <7B87> <7B84> <7CB9> <7CBD> <7DBB> <7DB0> <7D9C> <7DBD> <7DA0> <7DCA> <7DB4> <7DB2> <7DB1> <7DBA> <7DA2> <7DBF> <7DB5> <7DB8> <7DAD> <7DD2> <7DC7> <7DAC> <7F70> <7FE0> <7FDF> <805E> <805A> <8087> <8150> <8180> <818F> <8188> <818A> <817F> <8182> <81E7> <81FA> <8207> <8214> <821E> <824B> <84C9> <84BF> <84C6> <84C4> <8499> <849E> <84B2> <849C> <84CB> <84B8> <84C0> <84D3> <8490> <84BC> <84D1> <84CA> <873F> <871C> <873B> <8722> <8725> <8734> <8718> <8755> <8737> endbfrange 100 beginbfrange <8729> <88F3> <8902> <88F4> <88F9> <88F8> <88FD> <88E8> <891A> <88EF> <8AA6> <8A8C> <8A9E> <8AA3> <8A8D> <8AA1> <8A93> <8AA4> <8AAA> <8AA5> <8AA8> <8A98> <8A91> <8A9A> <8AA7> <8C6A> <8C8D> <8C8C> <8CD3> <8CD1> <8D6B> <8D99> <8D95> <8DFC> <8F14> <8F12> <8F15> <8F13> <8FA3> <9060> <9058> <905C> <9063> <9059> <905E> <9062> <905D> <905B> <9119> <9118> <911E> <9175> <9178> <9177> <9174> <9278> <9280> <9285> <9298> <9296> <927B> <9293> <929C> <92A8> <927C> <9291> <95A1> <95A8> <95A3> <95A5> <95A4> <9699> <969C> <969B> <96CC> <96D2> <9700> <977C> <9785> <97F6> <9817> <98AF> <98B1> <9903> <9905> <990C> <9909> <99C1> <9AAF> <9AE6> <9B41> <9CF4> <9CF6> <9CF3> <9EBC> <9F3B> <9F4A> <5104> <5100> <50FB> endbfrange 100 beginbfrange <50F5> <50F9> <5102> <5108> <5105> <51DC> <5287> <528D> <528A> <52F0> <53B2> <562E> <563B> <5639> <5632> <563F> <5634> <5629> <5653> <564E> <5657> <5674> <5636> <562F> <5880> <589F> <589E> <58B3> <589C> <58AE> <58A9> <58A6> <596D> <5B09> <5AFB> <5B0B> <5AF5> <5B0C> <5B08> <5BEE> <5BEC> <5BE9> <5BEB> <5C64> <5D9D> <5D94> <5E62> <5E5F> <5E61> <5EE2> <5EDA> <5EDF> <5EDD> <5EE3> <5EE0> <5F48> <5F71> <5FB7> <5FB5> <6176> <6167> <616E> <615D> <6155> <6182> <617C> <6170> <616B> <617E> <61A7> <6190> <61AB> <618E> <61AC> <619A> <61A4> <6194> <61AE> <622E> <6469> <646F> <6479> <649E> <64B2> <6488> <6490> <64B0> <64A5> <6493> <6495> <64A9> <6492> <64AE> <64AD> <64AB> <649A> <64AC> <6499> <64A2> <64B3> endbfrange 100 beginbfrange <6575> <6577> <66AE> <66AB> <66B4> <66B1> <6A23> <6A1F> <69E8> <6A01> <6A1E> <6A19> <69FD> <6A21> <6A13> <6A0A> <69F3> <6A02> <6A05> <69ED> <6A11> <6B50> <6B4E> <6BA4> <6BC5> <6F3F> <6F7C> <6F84> <6F51> <6F66> <6F54> <6F86> <6F6D> <6F5B> <6F78> <6F6E> <6F8E> <6F7A> <6F70> <6F64> <6F97> <6F58> <6ED5> <6F6F> <6F60> <6F5F> <719F> <71AC> <71B1> <71A8> <7256> <729B> <734E> <7357> <7469> <748B> <7483> <747E> <7480> <757F> <7620> <7629> <761F> <7624> <7626> <7621> <769A> <76BA> <76E4> <778E> <7787> <778C> <7791> <778B> <78CB> <78C5> <78BA> <78CA> <78BE> <78D5> <78BC> <78D0> <7A3F> <7A3C> <7A40> <7A3D> <7A37> <7A3B> <7AAF> <7AAE> <7BAD> <7BB1> <7BC4> <7BB4> <7BC6> <7BC1> <7BA0> <7BCC> <7CCA> <7DE0> endbfrange 100 beginbfrange <7DF4> <7DEF> <7DFB> <7DD8> <7DEC> <7DDD> <7DE8> <7DE3> <7DDA> <7DDE> <7DE9> <7D9E> <7DD9> <7DF2> <7DF9> <7F75> <7F77> <7FAF> <7FE9> <8026> <819B> <81A0> <819A> <8198> <8517> <853D> <851A> <84EE> <852C> <8513> <8511> <8523> <8521> <8514> <84EC> <8525> <84FF> <8506> <8782> <8774> <8776> <8760> <8766> <8778> <8768> <8759> <8757> <874C> <8753> <885B> <885D> <8910> <8907> <8912> <8915> <890A> <8ABC> <8AD2> <8AC7> <8AC4> <8A95> <8ACB> <8AF8> <8AB2> <8AC9> <8AC2> <8ABF> <8AB0> <8AD6> <8ACD> <8AB6> <8AB9> <8ADB> <8C4C> <8C4E> <8C6C> <8CE0> <8CDE> <8CE6> <8CE4> <8CEC> <8CE2> <8CDC> <8CEA> <8CE1> <8D6D> <8D9F> <8DA3> <8E2B> <8E10> <8E1D> <8E22> <8E0F> <8E29> <8E1F> <8E21> <8E1E> <8EBA> <8F1D> <8F1B> endbfrange 100 beginbfrange <8F1F> <8F29> <8F26> <8F2A> <8F1C> <8F1E> <8F25> <9069> <906E> <9068> <906D> <9077> <9130> <912D> <9127> <9131> <9187> <9189> <918B> <9183> <92C5> <92BB> <92B7> <92EA> <92AC> <92E4> <92C1> <92B3> <92BC> <92D2> <92C7> <92F0> <92B2> <95AD> <95B1> <9704> <9706> <9709> <9760> <978D> <978B> <978F> <9821> <982B> <981C> <98B3> <990A> <9913> <9912> <9918> <99DD> <99D0> <99DF> <99DB> <99D1> <99D5> <99D2> <99D9> <9AB7> <9AEE> <9B27> <9B45> <9B44> <9B77> <9B6F> <9D06> <9D09> <9D03> <9EA9> <9EBE> <9ECE> <58A8> <9F52> <5112> <5118> <5114> <5110> <5115> <5180> <51AA> <51DD> <5291> <5293> <52F3> <5659> <566B> <5679> <5669> <5664> <5678> <566A> <5668> <5665> <5671> <566F> <566C> <5662> <5676> <58C1> <58BE> endbfrange 100 beginbfrange <58C7> <58C5> <596E> <5B1D> <5B34> <5B78> <5BF0> <5C0E> <5F4A> <61B2> <6191> <61A9> <618A> <61CD> <61B6> <61BE> <61CA> <61C8> <6230> <64C5> <64C1> <64CB> <64BB> <64DA> <64C4> <64C7> <64C2> <64CD> <64BF> <64D2> <64D4> <64BE> <6574> <66C6> <66C9> <66B9> <66C4> <66C7> <66B8> <6A3D> <6A38> <6A3A> <6A59> <6A6B> <6A58> <6A39> <6A44> <6A62> <6A61> <6A4B> <6A47> <6A35> <6A5F> <6A48> <6B59> <6B77> <6C05> <6FC2> <6FB1> <6FA1> <6FC3> <6FA4> <6FC1> <6FA7> <6FB3> <6FC0> <6FB9> <6FB6> <6FA6> <6FA0> <6FB4> <71BE> <71C9> <71D0> <71D2> <71C8> <71D5> <71B9> <71CE> <71D9> <71DC> <71C3> <7368> <749C> <74A3> <7498> <749F> <749E> <74E2> <750C> <7634> <7638> <763A> <76E7> <76E5> <77A0> <779E> <77A5> <78E8> <78DA> endbfrange 100 beginbfrange <78EC> <78E7> <79A6> <7A4D> <7A46> <7A4C> <7A4B> <7ABA> <7BD9> <7C11> <7BC9> <7BE4> <7BDB> <7BE1> <7BE9> <7BE6> <7CD5> <7E0A> <7E11> <7E08> <7E1B> <7E23> <7E1E> <7E1D> <7E09> <7E10> <7F79> <7FB2> <7FF0> <7FEE> <8028> <81B3> <81A9> <81A8> <81FB> <8208> <8258> <854A> <8559> <8548> <8568> <8543> <8549> <856D> <856A> <855E> <8783> <879F> <879E> <87A2> <878D> <8861> <892A> <8932> <8925> <892B> <8921> <89AA> <89A6> <8AE6> <8AFA> <8AEB> <8AF1> <8B00> <8ADC> <8AE7> <8AEE> <8AFE> <8B01> <8AF7> <8AED> <8AF3> <8AF6> <8AFC> <8C6B> <8C6D> <8C93> <8CF4> <8E44> <8E31> <8E34> <8E42> <8E39> <8E35> <8F3B> <8F2F> <8F38> <8F33> <8FA8> <8FA6> <9075> <9074> <9078> <9072> <907C> <907A> <9134> <9192> <9320> <9336> endbfrange 100 beginbfrange <92F8> <9333> <932F> <9322> <92FC> <932B> <9304> <931A> <9310> <9326> <9321> <9315> <932E> <9319> <95BB> <96A7> <96AA> <96D5> <970E> <9711> <9716> <970D> <9713> <970F> <975B> <9766> <9798> <9830> <9838> <983B> <9837> <982D> <9839> <9824> <9910> <9928> <991E> <991B> <9921> <991A> <99ED> <99E2> <99F1> <9AB8> <9ABC> <9AFB> <9AED> <9B28> <9B91> <9D15> <9D23> <9D26> <9D28> <9D12> <9D1B> <9ED8> <9ED4> <9F8D> <9F9C> <512A> <511F> <5121> <5132> <52F5> <568E> <5680> <5690> <5685> <5687> <568F> <58D5> <58D3> <58D1> <58CE> <5B30> <5B2A> <5B24> <5B7A> <5C37> <5C68> <5DBC> <5DBA> <5DBD> <5DB8> <5E6B> <5F4C> <5FBD> <61C9> <61C2> <61C7> <61E6> <61CB> <6232> <6234> <64CE> <64CA> <64D8> <64E0> <64F0> <64E6> endbfrange 100 beginbfrange <64EC> <64F1> <64E2> <64ED> <6582> <66D9> <66D6> <6A80> <6A94> <6A84> <6AA2> <6A9C> <6ADB> <6AA3> <6A7E> <6A97> <6A90> <6AA0> <6B5C> <6BAE> <6BDA> <6C08> <6FD8> <6FF1> <6FDF> <6FDB> <6FE4> <6FEB> <6FEF> <6F80> <6FEC> <6FE1> <6FE9> <6FD5> <6FEE> <6FF0> <71E7> <71DF> <71EE> <71E6> <71E5> <71ED> <71EC> <71F4> <71E0> <7235> <7246> <7370> <7372> <74A9> <74B0> <74A6> <74A8> <7646> <7642> <764C> <76EA> <77B3> <77AA> <77B0> <77AC> <77A7> <77AD> <77EF> <78F7> <78FA> <78F4> <78EF> <7901> <79A7> <79AA> <7A57> <7ABF> <7C07> <7C0D> <7BFE> <7BF7> <7C0C> <7BE0> <7CE0> <7CDC> <7CDE> <7CE2> <7CDF> <7CD9> <7CDD> <7E2E> <7E3E> <7E46> <7E37> <7E32> <7E43> <7E2B> <7E3D> <7E31> <7E45> <7E41> <7E34> <7E39> <7E48> endbfrange 100 beginbfrange <7E35> <7E3F> <7E2F> <7F44> <7FF3> <7FFC> <8071> <8070> <806F> <8073> <81C6> <81C3> <81BA> <81C2> <81C0> <81BF> <81BD> <81C9> <81BE> <81E8> <8209> <8271> <85AA> <8584> <857E> <859C> <8591> <8594> <85AF> <859B> <8587> <85A8> <858A> <8667> <87C0> <87D1> <87B3> <87D2> <87C6> <87AB> <87BB> <87BA> <87C8> <87CB> <893B> <8936> <8944> <8938> <893D> <89AC> <8B0E> <8B17> <8B19> <8B1B> <8B0A> <8B20> <8B1D> <8B04> <8B10> <8C41> <8C3F> <8C73> <8CFA> <8CFD> <8CFC> <8CF8> <8CFB> <8DA8> <8E49> <8E4B> <8E48> <8E4A> <8F44> <8F3E> <8F42> <8F45> <8F3F> <907F> <907D> <9084> <9081> <9080> <9139> <91A3> <919E> <919C> <934D> <9382> <9328> <9375> <934A> <9365> <934B> <9318> <937E> <936C> <935B> <9370> <935A> <9354> endbfrange 100 beginbfrange <95CA> <95C8> <95C6> <96B1> <96B8> <96D6> <971C> <971E> <97A0> <97D3> <9846> <98B6> <9935> <9A01> <99FF> <9BAE> <9BAB> <9BAA> <9BAD> <9D3B> <9D3F> <9E8B> <9ECF> <9EDE> <9EDC> <9EDB> <9F3E> <9F4B> <53E2> <5695> <56AE> <58D9> <58D8> <5B38> <5F5D> <61E3> <6233> <64F4> <64F2> <64FE> <6506> <64FA> <64F7> <65B7> <66DC> <6726> <6AB3> <6AAC> <6AC3> <6ABB> <6AB8> <6AC2> <6AAE> <6B5F> <6B78> <6BAF> <7009> <700B> <6FFE> <7006> <6FFA> <7011> <700F> <71FB> <71FE> <71F8> <7377> <7375> <74A7> <74BF> <7515> <7656> <7658> <7652> <77BD> <77BF> <77BB> <790E> <79AE> <7A61> <7A60> <7AC4> <7C2B> <7C27> <7C2A> <7C1E> <7C23> <7C21> <7CE7> <7E54> <7E5E> <7E5A> <7E61> <7E52> <7E59> <7F48> <7FF9> <7FFB> <8077> <8076> endbfrange 100 beginbfrange <81CD> <81CF> <820A> <85CF> <85A9> <85CD> <85D0> <85C9> <85B0> <85BA> <85B9> <85A6> <87EF> <87EC> <87F2> <87E0> <8986> <89B2> <89F4> <8B28> <8B39> <8B2C> <8B2B> <8C50> <8D05> <8E59> <8E63> <8E66> <8E64> <8E5F> <8E55> <8EC0> <8F49> <8F4D> <9087> <9083> <9088> <91AB> <91D0> <9394> <938A> <9396> <93A2> <93B3> <93AE> <93AC> <93B0> <9398> <939A> <9397> <95D4> <95D6> <95D0> <95D5> <96E2> <96DC> <96D9> <96DB> <96DE> <9724> <97A3> <97A6> <97AD> <97F9> <984D> <984F> <984C> <984E> <9853> <98BA> <993E> <993D> <992E> <99A5> <9A0E> <9AC1> <9B03> <9B06> <9B4F> <9B4E> <9B4D> <9BCA> <9BC9> <9BFD> <9BC8> <9BC0> <9D51> <9D5D> <9D60> <9EE0> <9F15> <9F2C> <5133> <56A5> <58DE> <58E2> <5BF5> <9F90> <5EEC> <61F2> endbfrange 100 beginbfrange <61F7> <61F6> <61F5> <6500> <650F> <66E0> <66DD> <6AE5> <6ADD> <6ADA> <6AD3> <701B> <701F> <7028> <701A> <701D> <7015> <7018> <7206> <720D> <7258> <72A2> <7378> <737A> <74BD> <74CA> <74E3> <7587> <7586> <765F> <7661> <77C7> <7919> <79B1> <7A6B> <7A69> <7C3E> <7C38> <7C3D> <7C37> <7C40> <7E6B> <7E6D> <7E79> <7E69> <7F85> <7E73> <7FB6> <7FB9> <7FB8> <81D8> <85E9> <85DD> <85EA> <85D5> <85E4> <85F7> <87FB> <8805> <880D> <87F9> <87FE> <8960> <895F> <8956> <895E> <8B41> <8B5C> <8B58> <8B49> <8B5A> <8B4E> <8B46> <8B59> <8D08> <8D0A> <8E7C> <8E72> <8E87> <8E76> <8E6C> <8E7A> <8E74> <8F54> <8F4E> <8FAD> <908A> <91B1> <91AE> <93E1> <93D1> <93DF> <93C3> <93C8> <93DC> <93D6> <93E2> <93CD> <93D8> <93E4> endbfrange 100 beginbfrange <93D7> <93E8> <95DC> <96B4> <96E3> <972A> <9727> <9761> <97DC> <97FB> <985E> <9858> <985B> <98BC> <9945> <9949> <9A16> <9A19> <9B0D> <9BE8> <9BE7> <9BD6> <9BDB> <9D89> <9D61> <9D72> <9D6A> <9D6C> <9E92> <9E97> <9E93> <9EB4> <52F8> <56A8> <56B7> <56B6> <56B4> <56BC> <58E4> <5B40> <5B43> <5B7D> <5BF6> <5DC9> <61F8> <61FA> <6518> <6514> <6519> <66E6> <6727> <6AEC> <703E> <7030> <7032> <7210> <737B> <74CF> <7662> <7665> <7926> <792A> <792C> <792B> <7AC7> <7AF6> <7C4C> <7C43> <7C4D> <7CEF> <8FAE> <7E7D> <7E7C> <7E82> <7F4C> <8000> <81DA> <8266> <85FB> <85F9> <8611> <85FA> <8606> <860B> <8607> <860A> <8814> <8964> <89BA> <89F8> <8B70> <8B6C> <8B66> <8B6F> <8B5F> <8B6B> <8D0F> <8D0D> <8E89> <8E81> endbfrange 100 beginbfrange <8E85> <8E82> <91B4> <91CB> <9418> <9403> <93FD> <95E1> <9730> <98C4> <9952> <9951> <99A8> <9A2B> <9A30> <9A37> <9A35> <9C13> <9C0D> <9E79> <9EB5> <9EE8> <9F2F> <9F5F> <9F63> <9F61> <5137> <56C1> <56C0> <56C2> <5914> <5C6C> <5DCD> <61FC> <61FE> <651D> <651C> <6595> <66E9> <6AFB> <6B04> <6AFA> <6BB2> <704C> <721B> <72A7> <74D6> <74D4> <7669> <77D3> <7C50> <7E8F> <7E8C> <7FBC> <8617> <862D> <861A> <8823> <8822> <8821> <881F> <896A> <896C> <89BD> <8B74> <8B77> <8B7D> <8D13> <8E8A> <8E8D> <8E8B> <8F5F> <8FAF> <91BA> <942E> <9433> <9435> <943A> <9438> <9432> <942B> <95E2> <9738> <9732> <97FF> <9867> <9865> <9957> <9A45> <9A43> <9A40> <9A3E> <9ACF> <9B54> <9B51> <9C2D> <9C25> <9DAF> <9DB4> <9DC2> endbfrange 100 beginbfrange <9DB8> <9E9D> <9EEF> <9F19> <9F5C> <9F66> <513C> <513B> <56C8> <56CA> <56C9> <5B7F> <5DD4> <5DD2> <5F4E> <61FF> <6524> <6B0A> <6B61> <7051> <7058> <7380> <74E4> <758A> <766E> <766C> <79B3> <7C60> <7C5F> <807E> <807D> <81DF> <8972> <896F> <89FC> <8B80> <8D16> <8E91> <8E93> <8F61> <9148> <9444> <9451> <973D> <97C3> <97C1> <986B> <9955> <9A55> <9A4D> <9AD2> <9B1A> <9C49> <9C31> <9C3E> <9C3B> <9DD3> <9DD7> <9F34> <9F6C> <9F6A> <9F94> <56CC> <5DD6> <6200> <6523> <652B> <652A> <66EC> <6B10> <74DA> <7ACA> <7C64> <7C63> <7C65> <7E93> <7E96> <7E94> <81E2> <8638> <863F> <8831> <8B8A> <9090> <908F> <9463> <9460> <9464> <9768> <986F> <995C> <9A5A> <9A57> <9AD3> <9AD1> <9C54> <9C57> <9C56> <9DE5> <9E9F> endbfrange 100 beginbfrange <9EF4> <56D1> <58E9> <652C> <705E> <7671> <77D7> <7F50> <7F88> <8836> <8839> <8862> <8B93> <8B92> <8B96> <8277> <8D1B> <91C0> <946A> <9742> <9748> <9744> <97C6> <9870> <9A5F> <9B22> <9B58> <9C5F> <9DF9> <9E7C> <9F07> <9F77> <9F72> <5EF3> <6B16> <7063> <7C6C> <7C6E> <883B> <89C0> <8EA1> <91C1> <9472> <9470> <9871> <995E> <9AD6> <9B23> <9ECC> <7064> <77DA> <8B9A> <9477> <97C9> <9A62> <9A65> <7E9C> <8B9C> <8EAA> <91C5> <947D> <947C> <9C77> <9EF7> <8C54> <947F> <9E1A> <7228> <9A6A> <9B31> <9E1B> <9E1E> <7C72> <4E42> <4E5C> <51F5> <531A> <5382> <4E07> <4E0C> <4E47> <4E8D> <56D7> <5C6E> <5F73> <4E0F> <5187> <4E0E> <4E2E> <4E93> <4EC2> <4EC9> <4EC8> <5198> <52FC> <536C> <53B9> <5720> <5903> endbfrange 100 beginbfrange <592C> <5C10> <5DFF> <65E1> <6BB3> <6BCC> <6C14> <723F> <4E31> <4E3C> <4EE8> <4EDC> <4EE9> <4EE1> <4EDD> <4EDA> <520C> <531C> <534C> <5722> <5917> <592F> <5B81> <5B84> <5C12> <5C3B> <5C74> <5C73> <5E04> <5E80> <5E82> <5FC9> <6209> <6250> <6C15> <6C36> <6C43> <6C3F> <6C3B> <72AE> <72B0> <738A> <79B8> <808A> <961E> <4F0E> <4F18> <4F2C> <4EF5> <4F14> <4EF1> <4F00> <4EF7> <4F08> <4F1D> <4F02> <4F05> <4F22> <4F13> <4F04> <4EF4> <4F12> <51B1> <5213> <5209> <5210> <52A6> <5322> <531F> <534D> <538A> <5407> <56E1> <56DF> <572E> <572A> <5734> <593C> <5980> <597C> <5985> <597B> <597E> <5977> <597F> <5B56> <5C15> <5C25> <5C7C> <5C7A> <5C7E> <5DDF> <5E75> <5E84> <5F02> <5F1A> <5F74> <5FD5> <5FD4> <5FCF> endbfrange 100 beginbfrange <625C> <625E> <6264> <6261> <6266> <6262> <6259> <6260> <625A> <6265> <65EF> <65EE> <673E> <6739> <6738> <673B> <673A> <673F> <673C> <6733> <6C18> <6C46> <6C52> <6C5C> <6C4F> <6C4A> <6C54> <6C4B> <6C4C> <7071> <725E> <72B4> <738E> <752A> <767F> <7A75> <7F51> <8278> <827C> <8280> <827D> <827F> <864D> <897E> <9099> <9097> <909B> <9094> <9622> <9624> <9620> <9623> <4F56> <4F3B> <4F62> <4F49> <4F53> <4F64> <4F3E> <4F67> <4F52> <4F5F> <4F41> <4F58> <4F2D> <4F33> <4F3F> <4F61> <518F> <51B9> <521C> <521E> <5221> <52AD> <5309> <5363> <5372> <538E> <5430> <5437> <542A> <5454> <5445> <5419> <541C> <5425> <5418> <543D> <544F> <5441> <5428> <5424> <5447> <56EE> <56E7> <56E5> <5741> <5745> <574C> <5749> endbfrange 100 beginbfrange <574B> <5752> <5906> <5940> <59A6> <5998> <59A0> <5997> <598E> <59A2> <5990> <598F> <59A7> <59A1> <5B8E> <5B92> <5C28> <5C2A> <5C8D> <5C8F> <5C88> <5C8B> <5C89> <5C92> <5C8A> <5C86> <5C93> <5C95> <5DE0> <5E0A> <5E0E> <5E8B> <5E89> <5E8C> <5E88> <5E8D> <5F05> <5F1D> <5F78> <5F76> <5FD2> <5FD1> <5FD0> <5FED> <5FE8> <5FEE> <5FF3> <5FE1> <5FE4> <5FE3> <5FFA> <5FEF> <5FF7> <5FFB> <6000> <5FF4> <623A> <6283> <628C> <628E> <6294> <6287> <6271> <627B> <627A> <6270> <6281> <6288> <6277> <627D> <6272> <6274> <6537> <65F0> <65F4> <65F3> <65F2> <65F5> <6745> <6747> <6759> <6755> <674C> <6748> <675D> <674D> <675A> <674B> <6BD0> <6C19> <6C78> <6C67> <6C6B> <6C84> <6C8B> <6C8F> <6C71> <6C6F> <6C69> <6C9A> endbfrange 100 beginbfrange <6C6D> <6C87> <6C95> <6C9C> <6C66> <6C73> <6C65> <6C7B> <6C8E> <7074> <707A> <7263> <72BF> <72BD> <72C3> <72C6> <72C1> <72BA> <72C5> <7395> <7397> <7393> <7392> <753A> <7539> <7594> <7681> <793D> <8034> <8095> <8099> <8090> <8092> <809C> <8290> <828F> <8285> <828E> <8291> <8293> <828A> <8283> <8C78> <8FC9> <8FBF> <909F> <90A1> <90A5> <909E> <90A7> <90A0> <9630> <9628> <962F> <962D> <4E33> <4F98> <4F7C> <4F85> <4F7D> <4F80> <4F87> <4F76> <4F74> <4F89> <4F84> <4F77> <4F4C> <4F97> <4F6A> <4F9A> <4F79> <4F81> <4F78> <4F90> <4F9C> <4F94> <4F9E> <4F92> <4F82> <4F95> <4F6B> <4F6E> <519E> <51BC> <51BE> <5235> <5232> <5246> <5231> <52BC> <530A> <533C> <5392> <5394> <5487> <547F> <5481> <5491> <5482> endbfrange 100 beginbfrange <5488> <546B> <547A> <547E> <5465> <546C> <5474> <5466> <548D> <546F> <5461> <5460> <5498> <5463> <5467> <5464> <56F7> <56F9> <576F> <5772> <576D> <576B> <5771> <5770> <5776> <5780> <5775> <577B> <5773> <5762> <5768> <577D> <590C> <5945> <59B5> <59BA> <59CF> <59CE> <59B2> <59CC> <59C1> <59B6> <59BC> <59C3> <59D6> <59B1> <59BD> <59C0> <59C8> <59B4> <59C7> <5B62> <5B65> <5B93> <5B95> <5C44> <5C47> <5CAE> <5CA4> <5CA0> <5CB5> <5CAF> <5CA8> <5CAC> <5C9F> <5CA3> <5CAD> <5CA2> <5CAA> <5CA7> <5C9D> <5CA5> <5CB6> <5CB0> <5CA6> <5E17> <5E14> <5E19> <5F28> <5F22> <5F54> <5F82> <5F7E> <5F7D> <5FDE> <5FE5> <602D> <6026> <6019> <6032> <600B> <6034> <600A> <6017> <6033> <601A> <601E> <602C> <6022> <600D> endbfrange 100 beginbfrange <6010> <602E> <6013> <6011> <600C> <6009> <601C> <6214> <623D> <62AD> <62B4> <62D1> <62BE> <62AA> <62B6> <62CA> <62AE> <62B3> <62AF> <62BB> <62A9> <62B0> <62B8> <653D> <65A8> <65BB> <6609> <65FC> <6604> <6612> <6608> <65FB> <6603> <660B> <660D> <6605> <65FD> <6611> <6610> <66F6> <670A> <6785> <676C> <678E> <6792> <6776> <677B> <6798> <6786> <6784> <6774> <678D> <678C> <677A> <679F> <6791> <6799> <6783> <677D> <6781> <6778> <6794> <6B25> <6B80> <6B7E> <6BDE> <6C1D> <6C93> <6CEC> <6CEB> <6CEE> <6CD9> <6CB6> <6CD4> <6CAD> <6CE7> <6CB7> <6CD0> <6CC2> <6CBA> <6CC3> <6CC6> <6CED> <6CF2> <6CD2> <6CDD> <6CB4> <6C8A> <6C9D> <6C80> <6CDE> <6CC0> <6D30> <6CCD> <6CC7> <6CB0> <6CF9> <6CCF> <6CE9> <6CD1> endbfrange 100 beginbfrange <7094> <7098> <7085> <7093> <7086> <7084> <7091> <7096> <7082> <709A> <7083> <726A> <72D6> <72CB> <72D8> <72C9> <72DC> <72D2> <72D4> <72DA> <72CC> <72D1> <73A4> <73A1> <73AD> <73A6> <73A2> <73A0> <73AC> <739D> <74DD> <74E8> <753F> <753E> <758C> <7598> <76AF> <76F3> <76F1> <76F0> <76F5> <77F8> <77FC> <77F9> <77FB> <77FA> <77F7> <7942> <793F> <79C5> <7A78> <7A7B> <7AFB> <7C75> <7CFD> <8035> <808F> <80AE> <80A3> <80B8> <80B5> <80AD> <8220> <82A0> <82C0> <82AB> <829A> <8298> <829B> <82B5> <82A7> <82AE> <82BC> <829E> <82BA> <82B4> <82A8> <82A1> <82A9> <82C2> <82A4> <82C3> <82B6> <82A2> <8670> <866F> <866D> <8C56> <8FD2> <8FCB> <8FD3> <8FCD> <8FD6> <8FD5> <8FD7> <90B2> <90B4> <90AF> <90B3> <90B0> endbfrange 100 beginbfrange <9639> <963D> <963C> <963A> <9643> <4FCD> <4FC5> <4FD3> <4FB2> <4FC9> <4FCB> <4FC1> <4FD4> <4FDC> <4FD9> <4FBB> <4FB3> <4FDB> <4FC7> <4FD6> <4FBA> <4FC0> <4FB9> <4FEC> <5244> <5249> <52C0> <52C2> <533D> <537C> <5397> <5396> <5399> <5398> <54BA> <54A1> <54AD> <54A5> <54CF> <54C3> <830D> <54B7> <54AE> <54D6> <54B6> <54C5> <54A0> <5470> <54BC> <54A2> <54BE> <5472> <54DE> <54B0> <57B5> <579E> <57A4> <578C> <5797> <579D> <579B> <5794> <5798> <578F> <5799> <57A5> <579A> <5795> <58F4> <590D> <5953> <59E1> <59DE> <59EE> <5A00> <59F1> <59DD> <59FA> <59FD> <59FC> <59F6> <59E4> <59F2> <59F7> <59DB> <59E9> <59F3> <59F5> <59E0> <59FE> <59F4> <59ED> <5BA8> <5C4C> <5CD0> <5CD8> <5CCC> <5CD7> <5CCB> <5CDB> endbfrange 100 beginbfrange <5CDE> <5CDA> <5CC9> <5CC7> <5CCA> <5CD6> <5CD3> <5CCF> <5CC8> <5CC6> <5CCE> <5CDF> <5CF8> <5DF9> <5E21> <5E20> <5E24> <5EB0> <5EA4> <5EA2> <5E9B> <5EA3> <5EA5> <5F07> <5F2E> <5F56> <5F86> <6037> <6039> <6054> <6072> <605E> <6045> <6053> <6047> <6049> <605B> <604C> <6040> <6042> <605F> <6024> <6044> <6058> <6066> <606E> <6242> <62CF> <630D> <630B> <62F5> <630E> <6303> <62EB> <62F9> <630F> <630C> <62F8> <62F6> <6300> <6313> <62FA> <6315> <62FB> <62F0> <6541> <6543> <65AA> <65BF> <6636> <6621> <6632> <6635> <661C> <6626> <6622> <6633> <662B> <663A> <661D> <6634> <6639> <662E> <670F> <67C1> <67F2> <67C8> <67BA> <67DC> <67BB> <67F8> <67D8> <67C0> <67B7> <67C5> <67EB> <67E4> <67DF> <67B5> <67CD> endbfrange 100 beginbfrange <67B3> <67F7> <67F6> <67EE> <67E3> <67C2> <67B9> <67CE> <67E7> <67F0> <67B2> <67FC> <67C6> <67ED> <67CC> <67AE> <67E6> <67DB> <67FA> <67C9> <67C3> <67EA> <67CB> <6B28> <6B82> <6B84> <6BB6> <6BD6> <6BD8> <6BE0> <6C20> <6D28> <6D34> <6D2D> <6D1F> <6D3C> <6D3F> <6D12> <6D0A> <6CDA> <6D33> <6D04> <6D19> <6D3A> <6D1A> <6D11> <6D00> <6D1D> <6D42> <6D01> <6D18> <6D37> <6D03> <6D0F> <6D40> <6D07> <6D20> <6D2C> <6D08> <6D22> <6D09> <6D10> <70B7> <709F> <70BE> <70B1> <70B0> <70A1> <70B4> <70A9> <7241> <7249> <726C> <7270> <7273> <726E> <72CA> <72E4> <72E8> <72EB> <72DF> <72EA> <72E6> <72E3> <7385> <73CC> <73C2> <73C8> <73C5> <73B9> <73B6> <73B5> <73B4> <73EB> <73BF> <73C7> <73BE> <73C3> <73C6> <73B8> endbfrange 100 beginbfrange <73CB> <74EC> <74EE> <752E> <7547> <75A7> <75AA> <7679> <76C4> <7708> <7703> <770A> <76F7> <76FB> <76FA> <77E7> <7806> <7811> <7805> <7810> <780F> <780E> <7809> <7803> <7813> <794A> <794C> <794B> <7945> <7944> <79D5> <79CD> <79CF> <79D6> <79CE> <7A80> <7A7E> <7AD1> <7B00> <7C7A> <7C78> <7C7F> <7D03> <7D08> <7D01> <7F58> <7F91> <7F8D> <7FBE> <8007> <800E> <8014> <8037> <80D8> <80C7> <80E0> <80D1> <80C8> <80C2> <80D0> <80C5> <80E3> <80D9> <80DC> <80CA> <80D5> <80C9> <80CF> <80D7> <80E6> <80CD> <81FF> <8221> <8294> <82D9> <82FE> <82F9> <8307> <82E8> <8300> <82D5> <833A> <82EB> <82D6> <82F4> <82EC> <82E1> <82F2> <82F5> <830C> <82FB> <82F6> <82F0> <82EA> <82E4> <82E0> <82FA> <82F3> <82ED> <8677> endbfrange 100 beginbfrange <8674> <867C> <8673> <8841> <884E> <8867> <886A> <8869> <89D3> <8A04> <8A07> <8D72> <8FE3> <8FE1> <8FEE> <8FE0> <90F1> <90BD> <90BF> <90D5> <90C5> <90BE> <90C7> <90CB> <90C8> <91D4> <91D3> <9654> <964F> <9651> <9653> <964A> <964E> <501E> <5005> <5007> <5013> <5022> <5030> <501B> <4FF5> <4FF4> <5033> <5037> <502C> <4FF6> <5017> <501C> <5020> <5027> <5035> <502F> <5031> <500E> <515A> <5194> <5193> <51CA> <51C4> <51C8> <51CE> <5261> <525A> <5252> <525E> <5255> <5262> <52CD> <530E> <539E> <5526> <54E2> <5517> <5512> <54E7> <54F3> <54E4> <551A> <54FF> <5504> <5508> <54EB> <5511> <5505> <54F1> <550A> <54FB> <54F7> <54E0> <550E> <5503> <550B> <5701> <57CC> <5832> <57D5> <57D2> <57BA> <57C6> <57BD> endbfrange 100 beginbfrange <57BC> <57B8> <57B6> <57BF> <57C7> <57D0> <57B9> <57C1> <590E> <594A> <5A19> <5A16> <5A2D> <5A15> <5A0F> <5A17> <5A0A> <5A1E> <5A33> <5B6C> <5BA7> <5BAD> <5BAC> <5C03> <5C56> <5C54> <5CEC> <5CFF> <5CEE> <5CF1> <5CF7> <5D00> <5CF9> <5E29> <5E28> <5EA8> <5EAE> <5EAA> <5EAC> <5F33> <5F30> <5F67> <605D> <605A> <6067> <6041> <60A2> <6088> <6080> <6092> <6081> <609D> <6083> <6095> <609B> <6097> <6087> <609C> <608E> <6219> <6246> <62F2> <6310> <6356> <632C> <6344> <6336> <6343> <63E4> <6339> <634B> <634A> <633C> <6329> <6341> <6334> <6358> <6354> <6359> <632D> <6347> <6333> <635A> <6351> <6338> <6357> <6340> <6348> <654A> <6546> <65C6> <65C3> <65C2> <664A> <665F> <6647> <6651> <6712> <681F> <681A> endbfrange 100 beginbfrange <6849> <6832> <683B> <684B> <684F> <6816> <6831> <681C> <6835> <682B> <682D> <682F> <684E> <6844> <6834> <681D> <6812> <6814> <6826> <6828> <682E> <684D> <683A> <6825> <6820> <6B2C> <6B2F> <6B2D> <6B31> <6B34> <6B6D> <8082> <6B88> <6BE6> <6BE4> <6BE8> <6BE3> <6BE2> <6BE7> <6C25> <6D7A> <6D63> <6D76> <6D0D> <6D61> <6D92> <6D58> <6D62> <6D6D> <6D6F> <6D91> <6D8D> <6DEF> <6D7F> <6D86> <6D5E> <6D67> <6D60> <6D97> <6D70> <6D7C> <6D5F> <6D82> <6D98> <6D2F> <6D68> <6D8B> <6D7E> <6D80> <6D84> <6D16> <6D83> <6D7B> <6D7D> <6D75> <6D90> <70DC> <70D3> <70D1> <70DD> <70CB> <7F39> <70E2> <70D7> <70D2> <70DE> <70E0> <70D4> <70CD> <70C5> <70DA> <70CE> <70E1> <7242> <7278> <7277> <7276> <7300> <72FA> <72F4> endbfrange 100 beginbfrange <72FE> <72F6> <72F3> <72FB> <7301> <73D3> <73D9> <73E5> <73D6> <73BC> <73E7> <73E3> <73E9> <73DC> <73D2> <73DB> <73D4> <73DD> <73DA> <73D7> <73E8> <74DE> <74F4> <7521> <755B> <755F> <75B0> <75C1> <75BB> <75C4> <75C0> <75BF> <75B6> <75BA> <768A> <76C9> <771D> <771B> <7710> <7713> <7712> <7723> <7711> <7715> <7719> <7722> <7727> <7823> <782C> <7822> <7835> <782F> <7828> <782E> <782B> <7821> <7829> <7833> <782A> <7831> <7954> <795B> <794F> <795C> <7953> <7952> <7951> <79EB> <79E0> <79EE> <79ED> <79EA> <79DC> <79DE> <79DD> <7A86> <7A89> <7A85> <7A8B> <7A8A> <7A87> <7AD8> <7B10> <7B04> <7B13> <7B05> <7B0F> <7B08> <7B0A> <7B0E> <7B09> <7B12> <7C84> <7C91> <7C8A> <7C8C> <7C88> <7C8D> <7C85> <7D1E> endbfrange 100 beginbfrange <7D1D> <7D11> <7D0E> <7D18> <7D16> <7D13> <7D1F> <7D12> <7D0F> <7D0C> <7F5C> <7F61> <7F5E> <7F60> <7F5D> <7F5B> <7F96> <7F92> <7FC3> <7FC2> <7FC0> <8016> <803E> <8039> <80FA> <80F2> <80F9> <80F5> <8101> <80FB> <8100> <8201> <822F> <8225> <8333> <832D> <8344> <8319> <8351> <8325> <8356> <833F> <8341> <8326> <831C> <8322> <8342> <834E> <831B> <832A> <8308> <833C> <834D> <8316> <8324> <8320> <8337> <832F> <8329> <8347> <8345> <834C> <8353> <831E> <832C> <834B> <8327> <8348> <8653> <8652> <86A2> <86A8> <8696> <868D> <8691> <869E> <8687> <8697> <8686> <868B> <869A> <8685> <86A5> <8699> <86A1> <86A7> <8695> <8698> <868E> <869D> <8690> <8694> <8843> <886D> <8875> <8872> <8880> <8871> <887F> <886F> endbfrange 100 beginbfrange <8883> <887E> <8874> <887C> <8A12> <8C47> <8C57> <8C7B> <8CA4> <8CA3> <8D76> <8D78> <8DB5> <8DB7> <8DB6> <8ED1> <8ED3> <8FFE> <8FF5> <9002> <8FFF> <8FFB> <9004> <8FFC> <8FF6> <90D6> <90E0> <90D9> <90E3> <90DF> <90E5> <90D8> <90DB> <90D7> <90DC> <90E4> <9150> <914E> <91D5> <91E2> <91DA> <965C> <965F> <96BC> <98E3> <9ADF> <9B2F> <4E7F> <5070> <506A> <5061> <505E> <5060> <5053> <504B> <505D> <5072> <5048> <504D> <5041> <505B> <504A> <5062> <5015> <5045> <505F> <5069> <506B> <5063> <5046> <5040> <506E> <5073> <5057> <5051> <51D0> <526B> <526D> <526C> <526E> <52D6> <52D3> <532D> <539C> <5575> <553C> <554D> <5550> <5534> <552A> <5551> <5562> <5536> <5535> <5530> <5552> <5545> <550C> <5532> <5565> endbfrange 100 beginbfrange <554E> <5539> <5548> <552D> <553B> <5540> <554B> <570A> <5707> <57FB> <5814> <57E2> <57F6> <57DC> <57F4> <5800> <57ED> <57FD> <5808> <57F8> <580B> <57F3> <57CF> <5807> <57EE> <57E3> <57F2> <57E5> <57EC> <57E1> <580E> <57FC> <5810> <57E7> <5801> <580C> <57F1> <57E9> <57F0> <580D> <5804> <595C> <5A60> <5A58> <5A55> <5A67> <5A5E> <5A38> <5A35> <5A6D> <5A50> <5A5F> <5A65> <5A6C> <5A53> <5A64> <5A57> <5A43> <5A5D> <5A52> <5A44> <5A5B> <5A48> <5A8E> <5A3E> <5A4D> <5A39> <5A4C> <5A70> <5A69> <5A47> <5A51> <5A56> <5A42> <5A5C> <5B72> <5B6E> <5BC1> <5BC0> <5C59> <5D1E> <5D0B> <5D1D> <5D1A> <5D20> <5D0C> <5D28> <5D0D> <5D26> <5D25> <5D0F> <5D30> <5D12> <5D23> <5D1F> <5D2E> <5E3E> <5E34> <5EB1> <5EB4> endbfrange 100 beginbfrange <5EB9> <5EB2> <5F36> <5F38> <5F9B> <5F96> <5F9F> <608A> <6090> <6086> <60BE> <60B0> <60BA> <60D3> <60CF> <60E4> <60D9> <60DD> <60C8> <60B1> <60DB> <60B7> <60CA> <60BF> <60C3> <60CD> <60C0> <6332> <6365> <638A> <6382> <637D> <63BD> <639E> <63AD> <639D> <6397> <63AB> <638E> <636F> <6387> <6390> <636E> <63AF> <6375> <639C> <636D> <63AE> <637C> <63A4> <633B> <639F> <6378> <6385> <6381> <6391> <638D> <6370> <6553> <65CD> <6665> <6661> <665B> <6659> <665C> <6662> <6718> <6879> <6887> <6890> <689C> <686D> <68AE> <68AB> <6956> <686F> <68A3> <68AC> <68A9> <6875> <6874> <68B2> <688F> <6877> <6892> <687C> <686B> <6872> <68AA> <6880> <6871> <687E> <689B> <6896> <688B> <68A0> <6889> <68A4> <6878> <687B> endbfrange 100 beginbfrange <6891> <688C> <688A> <687D> <6B36> <6B33> <6B37> <6B91> <6B8F> <6B8D> <6B8C> <6C2A> <6DC0> <6DAB> <6DB4> <6DB3> <6E74> <6DAC> <6DE9> <6DE2> <6DB7> <6DF6> <6DD4> <6E00> <6DC8> <6DE0> <6DDF> <6DD6> <6DBE> <6DE5> <6DDC> <6DDB> <6DF4> <6DCA> <6DBD> <6DED> <6DF0> <6DBA> <6DD5> <6DC2> <6DCF> <6DC9> <6DD0> <6DF2> <6DD3> <6DFD> <6DD7> <6DCD> <6DE3> <6DBB> <70FA> <710D> <70F7> <7117> <70F4> <710C> <70F0> <7104> <70F3> <7110> <70FC> <70FF> <7106> <7113> <7100> <70F8> <70F6> <710B> <7102> <710E> <727E> <727B> <727F> <731D> <7317> <7307> <7311> <7318> <730A> <7308> <72FF> <730F> <731E> <7388> <73F6> <73F8> <73F5> <7404> <7401> <73FD> <7407> <7400> <73FA> <73FC> <73FF> <740C> <740B> <73F4> <7408> <7564> endbfrange 100 beginbfrange <7563> <75CE> <75D2> <75CF> <75CB> <75D1> <75D0> <768F> <7689> <76D3> <7739> <772F> <772D> <7731> <7734> <7733> <773D> <7725> <773B> <7735> <7848> <7852> <7849> <784D> <784A> <784C> <7826> <7845> <7850> <7964> <7967> <7969> <7963> <796B> <7961> <79BB> <79FA> <79F8> <79F6> <7A8F> <7A94> <7A90> <7B35> <7B47> <7B34> <7B25> <7B30> <7B22> <7B24> <7B33> <7B18> <7B2A> <7B1D> <7B31> <7B2B> <7B2D> <7B2F> <7B32> <7B38> <7B1A> <7B23> <7C94> <7C98> <7C96> <7CA3> <7D35> <7D3D> <7D38> <7D36> <7D3A> <7D45> <7D2C> <7D29> <7D41> <7D47> <7D3E> <7D4A> <7D3B> <7D28> <7F63> <7F95> <7F9C> <7F9B> <7FCA> <7FCD> <7FD0> <7FC7> <7FCF> <7FC9> <801F> <801E> <801B> <8047> <8043> <8048> <8118> <8125> <8119> <811B> <812D> endbfrange 100 beginbfrange <811F> <812C> <811E> <8121> <8115> <8127> <811D> <8122> <8211> <8238> <8233> <823A> <8234> <8232> <8274> <8390> <83A3> <83A8> <838D> <837A> <8373> <83A4> <8374> <838F> <8381> <8395> <8399> <8375> <8394> <83A9> <837D> <8383> <838C> <839D> <839B> <83AA> <838B> <837E> <83A5> <83AF> <8388> <8397> <83B0> <837F> <83A6> <8387> <83AE> <8376> <839A> <8659> <8656> <86BF> <86B7> <86C2> <86C1> <86C5> <86BA> <86B0> <86C8> <86B9> <86B3> <86B8> <86CC> <86B4> <86BB> <86C3> <86BD> <8852> <8889> <8895> <88A8> <88A2> <88AA> <889A> <8891> <88A1> <889F> <8898> <88A7> <8899> <889B> <8897> <88A4> <88AC> <888C> <8893> <888E> <8982> <89D6> <89D9> <89D5> <8A30> <8A27> <8A2C> <8A1E> <8C39> <8C3B> <8C5C> <8C7D> <8CA5> endbfrange 100 beginbfrange <8D7D> <8D7B> <8D79> <8DBC> <8DC2> <8DB9> <8DBF> <8DC1> <8ED8> <8EDE> <8EDD> <8EDC> <8ED7> <8EE0> <9024> <900B> <9011> <901C> <900C> <9021> <90EF> <90EA> <90F0> <90F4> <90F2> <90D4> <90EB> <90E9> <9156> <9158> <915A> <9153> <9155> <91EC> <91F4> <91F1> <91F3> <91F8> <91E4> <91F9> <91EA> <91EB> <91F7> <91E8> <91EE> <957A> <9586> <9588> <967C> <966D> <966B> <9671> <966F> <96BF> <976A> <9804> <98E5> <9997> <509B> <5095> <5094> <509E> <508B> <50A3> <5083> <508C> <508E> <509D> <5068> <509C> <5092> <5082> <5087> <515F> <51D4> <5312> <5311> <53A4> <53A7> <5591> <55A8> <55A5> <55AD> <5577> <5645> <55A2> <5593> <5588> <558F> <55B5> <5581> <55A3> <5592> <55A4> <557D> <558C> <55A6> <557F> <5595> <55A1> endbfrange 100 beginbfrange <558E> <570C> <5829> <5837> <5819> <581E> <5827> <5823> <5828> <57F5> <5848> <5825> <581C> <581B> <5833> <583F> <5836> <582E> <5839> <5838> <582D> <582C> <583B> <5961> <5AAF> <5A94> <5A9F> <5A7A> <5AA2> <5A9E> <5A78> <5AA6> <5A7C> <5AA5> <5AAC> <5A95> <5AAE> <5A37> <5A84> <5A8A> <5A97> <5A83> <5A8B> <5AA9> <5A7B> <5A7D> <5A8C> <5A9C> <5A8F> <5A93> <5A9D> <5BEA> <5BCD> <5BCB> <5BD4> <5BD1> <5BCA> <5BCE> <5C0C> <5C30> <5D37> <5D43> <5D6B> <5D41> <5D4B> <5D3F> <5D35> <5D51> <5D4E> <5D55> <5D33> <5D3A> <5D52> <5D3D> <5D31> <5D59> <5D42> <5D39> <5D49> <5D38> <5D3C> <5D32> <5D36> <5D40> <5D45> <5E44> <5E41> <5F58> <5FA6> <5FA5> <5FAB> <60C9> <60B9> <60CC> <60E2> <60CE> <60C4> <6114> <60F2> <610A> endbfrange 100 beginbfrange <6116> <6105> <60F5> <6113> <60F8> <60FC> <60FE> <60C1> <6103> <6118> <611D> <6110> <60FF> <6104> <610B> <624A> <6394> <63B1> <63B0> <63CE> <63E5> <63E8> <63EF> <63C3> <649D> <63F3> <63CA> <63E0> <63F6> <63D5> <63F2> <63F5> <6461> <63DF> <63BE> <63DD> <63DC> <63C4> <63D8> <63D3> <63C2> <63C7> <63CC> <63CB> <63C8> <63F0> <63D7> <63D9> <6532> <6567> <656A> <6564> <655C> <6568> <6565> <658C> <659D> <65AE> <65D0> <65D2> <667C> <666C> <667B> <6680> <6671> <6679> <666A> <6672> <6701> <690C> <68D3> <6904> <68DC> <692A> <68EC> <68EA> <68F1> <690F> <68D6> <68F7> <68EB> <68E4> <68F6> <6913> <6910> <68F3> <68E1> <6907> <68CC> <6908> <6970> <68B4> <6911> <68EF> <68C6> <6914> <68F8> <68D0> <68FD> <68FC> endbfrange 100 beginbfrange <68E8> <690B> <690A> <6917> <68CE> <68C8> <68DD> <68E6> <68F4> <68D1> <6906> <68D4> <68E9> <6915> <6925> <68C7> <6B39> <6B3B> <6B3F> <6B3C> <6B94> <6B97> <6B99> <6B95> <6BBD> <6BF0> <6BF2> <6C30> <6DFC> <6E46> <6E1F> <6E49> <6E88> <6E3C> <6E45> <6E62> <6E2B> <6E3F> <6E41> <6E5D> <6E73> <6E1C> <6E33> <6E4B> <6E40> <6E51> <6E3B> <6E03> <6E2E> <6E5E> <6E68> <6E5C> <6E61> <6E31> <6E28> <6E60> <6E71> <6E6B> <6E39> <6E22> <6E30> <6E53> <6E65> <6E27> <6E78> <6E64> <6E77> <6E55> <6E79> <6E52> <6E66> <6E35> <6E5A> <7120> <711E> <712F> <70FB> <712E> <7131> <7123> <7125> <7122> <7132> <711F> <7128> <713A> <711B> <724B> <725A> <7288> <7286> <7285> <728B> <7312> <730B> <7330> <7322> <7331> <7333> <7327> endbfrange 100 beginbfrange <7332> <732D> <7326> <7323> <7335> <730C> <742E> <742C> <7430> <742B> <7416> <741A> <7421> <742D> <7431> <7424> <7423> <741D> <7429> <7420> <7432> <74FB> <752F> <756F> <756C> <75E7> <75DA> <75E1> <75E6> <75DD> <75DF> <75E4> <75D7> <7695> <7692> <76DA> <7746> <7744> <774D> <7745> <774A> <774E> <774B> <77DE> <77EC> <7860> <7864> <785C> <786D> <7871> <786A> <786E> <7870> <7869> <7868> <785E> <7862> <7974> <7973> <7972> <7970> <7A02> <7A0A> <7A03> <7A0C> <7A04> <7A99> <7AE6> <7AE4> <7B4A> <7B3B> <7B44> <7B48> <7B4C> <7B4E> <7B40> <7B58> <7B45> <7CA2> <7C9E> <7CA8> <7CA1> <7D58> <7D6F> <7D63> <7D53> <7D56> <7D67> <7D6A> <7D4F> <7D6D> <7D5C> <7D6B> <7D52> <7D54> <7D69> <7D51> <7D5F> <7D4E> <7F3E> endbfrange 100 beginbfrange <7F65> <7F66> <7FA2> <7FA0> <7FD7> <8051> <804F> <80FE> <80D4> <8143> <814A> <8152> <814F> <8147> <813D> <814D> <813A> <81E6> <81EE> <81F7> <8204> <823C> <823F> <8275> <833B> <83CF> <83F9> <8423> <83C0> <83E8> <8412> <83E7> <83E4> <83FC> <83F6> <8410> <83C6> <83C8> <83EB> <83E3> <83BF> <8401> <83DD> <83E5> <83D8> <83FF> <83E1> <83CB> <83CE> <83D6> <83F5> <83C9> <8409> <840F> <83DE> <8411> <8406> <83C2> <83F3> <83D5> <83FA> <83C7> <83D1> <83EA> <8413> <83C3> <83EC> <83EE> <83C4> <83FB> <83D7> <83E2> <841B> <83DB> <83FE> <86D8> <86E2> <86E6> <86D3> <86E3> <86DA> <86EA> <86DD> <86EB> <86DC> <86EC> <86E9> <86D7> <86E8> <86D1> <8848> <8856> <8855> <88BA> <88D7> <88B9> <88B8> <88C0> <88BE> <88B6> endbfrange 100 beginbfrange <88BC> <88B7> <88BD> <88B2> <8901> <88C9> <8995> <8998> <8997> <89DD> <89DA> <8A4E> <8A4D> <8A39> <8A59> <8A40> <8A57> <8A44> <8A52> <8A48> <8A51> <8A4A> <8A4C> <8A4F> <8C5F> <8C81> <8C80> <8CBA> <8CBE> <8CB0> <8CB9> <8CB5> <8D84> <8D80> <8D89> <8DD8> <8DD3> <8DCD> <8DC7> <8DD6> <8DDC> <8DCF> <8DD5> <8DD9> <8DC8> <8DD7> <8DC5> <8EEF> <8EF7> <8EFA> <8EF9> <8EE6> <8EEE> <8EE5> <8EF5> <8EE7> <8EF6> <8EEB> <8EF1> <8EEC> <8EF4> <8EE9> <902D> <9034> <902F> <9106> <912C> <9104> <90FF> <90FC> <9108> <90F9> <90FB> <9101> <9100> <9107> <9105> <9103> <9161> <9164> <915F> <9162> <9160> <9201> <920A> <9225> <9203> <921A> <9226> <920F> <920C> <9200> <9212> <91FF> <91FD> <9206> <9204> <9227> <9202> <921C> endbfrange 100 beginbfrange <9224> <9219> <9217> <9205> <9216> <957B> <958D> <958C> <9590> <9687> <967E> <9688> <9689> <9683> <9680> <96C2> <96C8> <96C3> <96F1> <96F0> <976C> <9770> <976E> <9807> <98A9> <98EB> <9CE6> <9EF9> <4E83> <4EB6> <50BD> <50BF> <50C6> <50AE> <50C4> <50CA> <50B4> <50C8> <50C2> <50B0> <50C1> <50BA> <50B1> <50CB> <50C9> <50B6> <50B8> <51D7> <527A> <5278> <527B> <55C3> <55DB> <55CC> <55D0> <55CB> <55CA> <55DD> <55C0> <55D4> <55C4> <55E9> <55BF> <55D2> <558D> <55CF> <55D5> <55E2> <55D6> <55C8> <55F2> <55CD> <55D9> <55C2> <5714> <5853> <5868> <5864> <584F> <584D> <5849> <586F> <5855> <584E> <585D> <5859> <5865> <585B> <583D> <5863> <5871> <58FC> <5AC7> <5AC4> <5ACB> <5ABA> <5AB8> <5AB1> <5AB5> <5AB0> endbfrange 100 beginbfrange <5ABF> <5AC8> <5ABB> <5AC6> <5AB7> <5AC0> <5ACA> <5AB4> <5AB6> <5ACD> <5AB9> <5A90> <5BD6> <5BD8> <5C1F> <5C33> <5D71> <5D63> <5D4A> <5D65> <5D72> <5D6C> <5D5E> <5D68> <5D67> <5D62> <5DF0> <5E4F> <5E4E> <5E4A> <5E4D> <5E4B> <5EC5> <5ECC> <5EC6> <5ECB> <5EC7> <5F40> <5FAF> <5FAD> <60F7> <6149> <612B> <6145> <6136> <6132> <612E> <6146> <612F> <614F> <6129> <6140> <6220> <9168> <6223> <6225> <6224> <63C5> <63F1> <63EB> <6410> <6412> <6409> <6420> <6424> <6433> <6443> <641F> <6415> <6418> <6439> <6437> <6422> <640C> <6426> <6430> <6428> <6441> <6435> <642F> <640A> <641A> <6440> <6425> <6427> <640B> <63E7> <641B> <642E> <6421> <640E> <656F> <6592> <65D3> <6686> <668C> <6695> <6690> <668B> <668A> endbfrange 100 beginbfrange <6699> <6694> <6678> <6720> <6966> <695F> <6938> <694E> <6962> <6971> <693F> <6945> <696A> <6939> <6942> <6957> <6959> <697A> <6948> <6935> <696C> <6933> <693D> <6965> <68F0> <6978> <6934> <6969> <6940> <696F> <6944> <6976> <6958> <6941> <6974> <694C> <693B> <694B> <6937> <695C> <694F> <6951> <6932> <6952> <692F> <697B> <693C> <6B46> <6B45> <6B43> <6B42> <6B48> <6B41> <6B9B> <6BFB> <6BF9> <6BF7> <6E9B> <6ED6> <6EC8> <6E8F> <6EC0> <6E9F> <6E93> <6EA0> <6EB1> <6EB9> <6EC6> <6ED2> <6EBD> <6EC1> <6E9E> <6EC9> <6EB7> <6EB0> <6ECD> <6EA6> <6ECF> <6EB2> <6EBE> <6EC3> <6EDC> <6ED8> <6E99> <6E92> <6E8E> <6E8D> <6EA4> <6EA1> <6EBF> <6EB3> <6ED0> <6ECA> <6E97> <6EAE> <6EA3> <7147> <7154> <7152> endbfrange 100 beginbfrange <7163> <7160> <7141> <715D> <7162> <7172> <7178> <716A> <7161> <7142> <7158> <7143> <714B> <7170> <715F> <7150> <7153> <7144> <714D> <715A> <724F> <728D> <728C> <7291> <7290> <728E> <733C> <7342> <733B> <733A> <7340> <734A> <7349> <7444> <744A> <7452> <7451> <7457> <7440> <744F> <744E> <7442> <7446> <744D> <7454> <74E1> <74FF> <74FE> <74FD> <751D> <7579> <7577> <6983> <75EF> <760F> <7603> <75F7> <75FE> <75FC> <75F9> <75F8> <7610> <75FB> <75F6> <75ED> <75F5> <75FD> <7699> <76B5> <76DD> <7755> <775F> <7752> <7756> <775A> <7769> <7767> <7754> <7759> <776D> <77E0> <7887> <789A> <7894> <788F> <7884> <7895> <7885> <78A1> <7883> <7879> <7899> <7880> <7896> <787B> <797C> <7982> <797D> <7979> <7A11> endbfrange 100 beginbfrange <7A18> <7A12> <7A17> <7A15> <7A22> <7A13> <7A1B> <7A10> <7AA3> <7AA2> <7A9E> <7AEB> <7B66> <7B64> <7B6D> <7B74> <7B69> <7B72> <7B65> <7B73> <7B71> <7B70> <7B61> <7B78> <7B76> <7B63> <7CB2> <7CB4> <7CAF> <7D88> <7D86> <7D80> <7D8D> <7D7F> <7D85> <7D7A> <7D8E> <7D7B> <7D83> <7D7C> <7D8C> <7D94> <7D84> <7D7D> <7D92> <7F6D> <7F6B> <7F67> <7F6C> <7FA6> <7FA5> <7FA7> <7FDB> <8021> <8164> <8160> <8177> <815C> <8169> <815B> <8162> <8172> <6721> <815E> <8176> <8167> <816F> <8144> <8161> <821D> <8249> <8244> <8240> <8242> <8245> <84F1> <843F> <8456> <8476> <8479> <848F> <848D> <8465> <8451> <8440> <8486> <8467> <8430> <844D> <847D> <845A> <8459> <8474> <8473> <845D> <8507> <845E> <8437> <843A> <8434> endbfrange 100 beginbfrange <847A> <8443> <8478> <8432> <8445> <8429> <83D9> <844B> <842F> <8442> <842D> <845F> <8470> <8439> <844E> <844C> <8452> <846F> <84C5> <848E> <843B> <8447> <8436> <8433> <8468> <847E> <8444> <842B> <8460> <8454> <846E> <8450> <870B> <8704> <86F7> <870C> <86FA> <86D6> <86F5> <874D> <86F8> <870E> <8709> <8701> <86F6> <870D> <8705> <88D6> <88CB> <88CD> <88DE> <88DB> <88DA> <88CC> <88D0> <8985> <899B> <89DF> <89E5> <89E4> <89E1> <89E0> <89E2> <89DC> <89E6> <8A76> <8A86> <8A7F> <8A61> <8A3F> <8A77> <8A82> <8A84> <8A75> <8A83> <8A81> <8A74> <8A7A> <8C3C> <8C4B> <8C4A> <8C65> <8C64> <8C66> <8C86> <8C84> <8CCC> <8D68> <8D91> <8D8C> <8D8E> <8D8D> <8D93> <8D90> <8D92> <8DF0> <8DE0> <8DEC> <8DF1> <8DEE> endbfrange 100 beginbfrange <8DD0> <8DE9> <8DE3> <8DE2> <8DE7> <8DF2> <8DEB> <8DF4> <8F06> <8EFF> <8F01> <8F00> <8F05> <8F07> <8F02> <8F0B> <9052> <903F> <9044> <9049> <903D> <9110> <910D> <910F> <9111> <9116> <9114> <910B> <910E> <916E> <9248> <9252> <9230> <923A> <9266> <9233> <9265> <925E> <9283> <922E> <924A> <9246> <926D> <926C> <924F> <9260> <9267> <926F> <9236> <9261> <9270> <9231> <9254> <9263> <9250> <9272> <924E> <9253> <924C> <9256> <9232> <959F> <959C> <959E> <959B> <9692> <9691> <9697> <96CE> <96FA> <96FD> <96F8> <96F5> <9773> <9777> <9772> <980F> <980D> <98AC> <98F6> <98F9> <99AF> <99B2> <99B0> <99B5> <9AAD> <9AAB> <9B5B> <9CEA> <9CED> <9CE7> <9E80> <9EFD> <50E6> <50D4> <50D7> <50E8> <50F3> <50DB> <50EA> endbfrange 100 beginbfrange <50DD> <50E4> <50D3> <50EC> <50F0> <50EF> <50E3> <50E0> <51D8> <5280> <52E9> <52EB> <5330> <53AC> <5627> <5615> <560C> <5612> <55FC> <560F> <561C> <5601> <5613> <5602> <55FA> <561D> <5604> <55FF> <55F9> <5889> <587C> <5890> <5898> <5886> <5881> <587F> <5874> <588B> <587A> <5887> <5891> <588E> <5876> <5882> <5888> <587B> <5894> <588F> <58FE> <596B> <5ADC> <5AEE> <5AE5> <5AD5> <5AEA> <5ADA> <5AED> <5AEB> <5AF3> <5AE2> <5AE0> <5ADB> <5AEC> <5ADE> <5ADD> <5AD9> <5AE8> <5ADF> <5B77> <5BE0> <5BE3> <5C63> <5D82> <5D80> <5D7D> <5D86> <5D7A> <5D81> <5D77> <5D8A> <5D89> <5D88> <5D7E> <5D7C> <5D8D> <5D79> <5D7F> <5E58> <5E53> <5ED8> <5ED1> <5ED7> <5ECE> <5EDC> <5ED5> <5ED9> <5ED2> <5ED4> <5F44> <5F43> endbfrange 100 beginbfrange <5F6F> <5FB6> <612C> <6128> <6141> <615E> <6171> <6173> <6152> <6172> <616C> <6180> <6174> <6154> <617A> <615B> <6165> <613B> <616A> <6161> <6156> <6229> <6227> <622B> <642B> <644D> <645B> <645D> <6474> <6476> <6472> <647D> <6475> <6466> <64A6> <644E> <6482> <645E> <645C> <644B> <6453> <6460> <6450> <647F> <643F> <646C> <646B> <6459> <6465> <6477> <6573> <65A0> <66A1> <66A0> <669F> <6705> <6704> <6722> <69B1> <69B6> <69C9> <69A0> <69CE> <6996> <69B0> <69AC> <69BC> <6991> <6999> <698E> <69A7> <698D> <69A9> <69BE> <69AF> <69BF> <69C4> <69BD> <69A4> <69D4> <69B9> <69CA> <699A> <69CF> <69B3> <6993> <69AA> <69A1> <699E> <69D9> <6997> <6990> <69C2> <69B5> <69A5> <69C6> <6B4A> <6B4D> <6B4B> <6B9E> endbfrange 100 beginbfrange <6BC3> <6BFE> <6ECE> <6EF5> <6EF1> <6F03> <6F25> <6EF8> <6F37> <6EFB> <6F2E> <6F09> <6F4E> <6F19> <6F27> <6F18> <6F3B> <6F12> <6EED> <6F0A> <6F36> <6F73> <6EF9> <6EEE> <6F2D> <6F40> <6F30> <6F3C> <6F35> <6EEB> <6F07> <6F0E> <6F43> <6F05> <6EFD> <6EF6> <6F39> <6F1C> <6EFC> <6F3A> <6F1F> <6F0D> <6F1E> <6F08> <6F21> <7187> <7190> <7189> <7180> <7185> <7182> <718F> <717B> <7186> <7181> <7197> <7244> <7253> <7297> <7295> <7293> <7343> <734D> <7351> <734C> <7462> <7473> <7471> <7475> <7472> <7467> <746E> <7500> <7502> <757D> <7590> <7616> <7608> <760C> <7615> <7611> <760A> <7614> <76B8> <7781> <777C> <7785> <7782> <776E> <7780> <776F> <777E> <7783> <78B2> <78AA> <78B4> <78AD> <78A8> <787E> <78AB> endbfrange 100 beginbfrange <789E> <78A5> <78A0> <78AC> <78A2> <78A4> <7998> <798A> <7996> <7995> <7994> <7993> <7997> <7988> <7992> <7990> <7A2B> <7A4A> <7A30> <7A2F> <7A28> <7A26> <7AA8> <7AAB> <7AEE> <7B88> <7B9C> <7B8A> <7B91> <7B90> <7B96> <7B8D> <7B8C> <7B9B> <7B8E> <7B85> <7B98> <5284> <7B99> <7BA4> <7B82> <7CBB> <7CBF> <7CBC> <7CBA> <7DA7> <7DB7> <7DC2> <7DA3> <7DAA> <7DC1> <7DC0> <7DC5> <7D9D> <7DCE> <7DC4> <7DC6> <7DCB> <7DAF> <7DB9> <7D96> <7DBC> <7D9F> <7DA6> <7DAE> <7DA9> <7DA1> <7DC9> <7F73> <7FE2> <7FE5> <7FDE> <8024> <805D> <805C> <8189> <8186> <8183> <8187> <818D> <818C> <818B> <8215> <8497> <84A4> <84A1> <849F> <84BA> <84CE> <84C2> <84AC> <84AE> <84AB> <84B9> <84B4> <84C1> <84CD> <84AA> <849A> <84B1> endbfrange 100 beginbfrange <84D0> <849D> <84A7> <84BB> <84A2> <8494> <84C7> <84CC> <849B> <84A9> <84AF> <84A8> <84D6> <8498> <84B6> <84CF> <84A0> <84D7> <84D4> <84D2> <84DB> <84B0> <8491> <8661> <8733> <8723> <8728> <876B> <8740> <872E> <871E> <8721> <8719> <871B> <8743> <872C> <8741> <873E> <8746> <8720> <8732> <872A> <872D> <873C> <8712> <873A> <8731> <8735> <8742> <8726> <8738> <8724> <871A> <8730> <8711> <88F7> <88E7> <88F1> <88FA> <88FE> <88EE> <88FC> <88F6> <88FB> <88F0> <88EC> <88EB> <899D> <89A1> <899F> <899E> <89E9> <89EB> <89E8> <8AAB> <8A99> <8A8B> <8A92> <8A8F> <8A96> <8C3D> <8C68> <8CD5> <8CCF> <8CD7> <8D96> <8E09> <8E02> <8DFF> <8E0D> <8DFD> <8E0A> <8E03> <8E07> <8E06> <8E05> <8DFE> <8E00> <8E04> <8F10> endbfrange 100 beginbfrange <8F0E> <8F0D> <9123> <911C> <9120> <9122> <911F> <911D> <911A> <9124> <9121> <911B> <917A> <9172> <9179> <9173> <92A5> <92A4> <9276> <929B> <927A> <92A0> <9294> <92AA> <928D> <92A6> <929A> <92AB> <9279> <9297> <927F> <92A3> <92EE> <928E> <9282> <9295> <92A2> <927D> <9288> <92A1> <928A> <9286> <928C> <9299> <92A7> <927E> <9287> <92A9> <929D> <928B> <922D> <969E> <96A1> <96FF> <9758> <977D> <977A> <977E> <9783> <9780> <9782> <977B> <9784> <9781> <977F> <97CE> <97CD> <9816> <98AD> <9902> <9900> <9907> <999D> <999C> <99C3> <99B9> <99BB> <99BA> <99C2> <99BD> <99C7> <9AB1> <9AE3> <9AE7> <9B3E> <9B60> <9B5F> <9CF1> <9CF5> <9EA7> <50FF> <5103> <5130> <50F8> <5106> <50F6> <50FE> <510B> <50FD> <510A> endbfrange 100 beginbfrange <528B> <52F1> <52EF> <5648> <5642> <564C> <5635> <5641> <564A> <5649> <5646> <5658> <565A> <5640> <5633> <563D> <562C> <563E> <5638> <562A> <563A> <571A> <58AB> <589D> <58B1> <58A0> <58A3> <58AF> <58AC> <58A5> <58A1> <58FF> <5AFF> <5AF4> <5AFD> <5AF7> <5AF6> <5B03> <5AF8> <5B02> <5AF9> <5B01> <5B07> <5B05> <5B0F> <5C67> <5D99> <5D97> <5D9F> <5D92> <5DA2> <5D93> <5D95> <5DA0> <5D9C> <5DA1> <5D9A> <5D9E> <5E69> <5E5D> <5E60> <5E5C> <7DF3> <5EDB> <5EDE> <5EE1> <5F49> <5FB2> <618B> <6183> <6179> <61B1> <61B0> <61A2> <6189> <619B> <6193> <61AF> <61AD> <619F> <6192> <61AA> <61A1> <618D> <6166> <61B3> <622D> <646E> <6470> <6496> <64A0> <6485> <6497> <649C> <648F> <648B> <648A> <648C> <64A3> <649F> endbfrange 100 beginbfrange <6468> <64B1> <6498> <6576> <657A> <6579> <657B> <65B2> <66B5> <66B0> <66A9> <66B2> <66B7> <66AA> <66AF> <6A00> <6A06> <6A17> <69E5> <69F8> <6A15> <69F1> <69E4> <6A20> <69FF> <69EC> <69E2> <6A1B> <6A1D> <69FE> <6A27> <69F2> <69EE> <6A14> <69F7> <69E7> <6A40> <6A08> <69E6> <69FB> <6A0D> <69FC> <69EB> <6A09> <6A04> <6A18> <6A25> <6A0F> <69F6> <6A26> <6A07> <69F4> <6A16> <6B51> <6BA5> <6BA3> <6BA2> <6BA6> <6C01> <6C00> <6BFF> <6C02> <6F41> <6F26> <6F7E> <6F87> <6FC6> <6F92> <6F8D> <6F89> <6F8C> <6F62> <6F4F> <6F85> <6F5A> <6F96> <6F76> <6F6C> <6F82> <6F55> <6F72> <6F52> <6F50> <6F57> <6F94> <6F93> <6F5D> <6F00> <6F61> <6F6B> <6F7D> <6F67> <6F90> <6F53> <6F8B> <6F69> <6F7F> <6F95> <6F63> <6F77> endbfrange 100 beginbfrange <6F6A> <6F7B> <71B2> <71AF> <719B> <71B0> <71A0> <719A> <71A9> <71B5> <719D> <71A5> <719E> <71A4> <71A1> <71AA> <719C> <71A7> <71B3> <7298> <729A> <7358> <7352> <735E> <735D> <735B> <7361> <735A> <7359> <7362> <7487> <7489> <7486> <7481> <747D> <7485> <7488> <747C> <7479> <7508> <7507> <757E> <7625> <761E> <7619> <761D> <761C> <7623> <761A> <7628> <761B> <769C> <769B> <778D> <778F> <7789> <7788> <78CD> <78BB> <78CF> <78CC> <78D1> <78CE> <78D4> <78C8> <78C3> <78C9> <799A> <79A1> <79A0> <799C> <79A2> <799B> <6B76> <7A39> <7AB2> <7AB4> <7AB3> <7BB7> <7BCB> <7BBE> <7BAC> <7BCE> <7BAF> <7BB9> <7BCA> <7BB5> <7CC5> <7CC8> <7CCC> <7CCB> <7DF7> <7DDB> <7DEA> <7DE7> <7DD7> <7DE1> <7E03> <7DFA> <7DE6> endbfrange 100 beginbfrange <7DF6> <7DF1> <7DF0> <7DEE> <7DDF> <7F76> <7FAC> <7FB0> <7FAD> <7FED> <7FEB> <7FEA> <7FEC> <7FE6> <7FE8> <8064> <8067> <81A3> <819F> <819E> <8195> <81A2> <8199> <8197> <8216> <824F> <8253> <8252> <8250> <824E> <8251> <8524> <853B> <850F> <8500> <8529> <850E> <8509> <850D> <851F> <850A> <8527> <851C> <84FB> <852B> <84FA> <8508> <850C> <84F4> <852A> <84F2> <8515> <84F7> <84EB> <84F3> <84FC> <8512> <84EA> <84E9> <8516> <84FE> <8528> <851D> <852E> <8502> <84FD> <851E> <84F6> <8531> <8526> <84E7> <84F0> <84EF> <84F9> <8518> <8520> <8530> <850B> <8519> <852F> <8662> <8756> <8763> <8777> <87E1> <8773> <8758> <8754> <875B> <8752> <8761> <875A> <8751> <875E> <876D> <876A> <8750> <874E> <875F> <875D> endbfrange 100 beginbfrange <876F> <876C> <877A> <876E> <875C> <8765> <874F> <877B> <8775> <8762> <8767> <8769> <885A> <8905> <890C> <8914> <890B> <8917> <8906> <8916> <8911> <890E> <8909> <89A2> <89A4> <89A3> <89ED> <89F0> <89EC> <8ACF> <8AC6> <8AB8> <8AD3> <8AD1> <8AD4> <8ABB> <8AD7> <8ABE> <8AC0> <8AC5> <8AD8> <8AC3> <8ABA> <8ABD> <8AD9> <8C3E> <8C4D> <8C8F> <8CE5> <8CDF> <8CD9> <8CE8> <8CDA> <8CDD> <8CE7> <8DA0> <8D9C> <8DA1> <8D9B> <8E20> <8E23> <8E25> <8E24> <8E2E> <8E15> <8E1B> <8E16> <8E11> <8E19> <8E26> <8E14> <8E12> <8E18> <8E13> <8E1C> <8E17> <8E1A> <8F2C> <8F24> <8F18> <8F1A> <8F20> <8F23> <8F16> <9073> <9070> <906F> <9067> <906B> <912F> <912B> <9129> <9132> <9126> <912E> <9185> <918A> <9181> <9184> <9180> endbfrange 100 beginbfrange <92D0> <92C3> <92C0> <92D9> <92B6> <92CF> <92F1> <92DF> <92D8> <92E9> <92D7> <92DD> <92CC> <92EF> <92C2> <92E8> <92CA> <92C8> <92CE> <92E6> <92CD> <92D5> <92C9> <92E0> <92DE> <92E7> <92D1> <92D3> <92B5> <92E1> <92C6> <92B4> <957C> <95AC> <95AB> <95AE> <95B0> <96A4> <96A2> <96D3> <9705> <9708> <9702> <975A> <978A> <978E> <9788> <97D0> <97CF> <981E> <981D> <9826> <9829> <9828> <9820> <981B> <9827> <98B2> <9908> <98FA> <9911> <9914> <9916> <9915> <99DC> <99CD> <99CF> <99D3> <99CE> <99C9> <99D6> <99D8> <99CB> <99D7> <99CC> <9AB3> <9AEC> <9AEB> <9AF3> <9AF2> <9AF1> <9B46> <9B43> <9B67> <9B74> <9B71> <9B66> <9B76> <9B75> <9B70> <9B68> <9B64> <9B6C> <9CFC> <9CFA> <9CFD> <9CFF> <9CF7> <9D07> <9D00> endbfrange 100 beginbfrange <9CF9> <9CFB> <9D08> <9D05> <9D04> <9E83> <9ED3> <9F0F> <511C> <5113> <5117> <511A> <5111> <51DE> <5334> <53E1> <5670> <5660> <566E> <5673> <5666> <5663> <566D> <5672> <565E> <5677> <571C> <571B> <58C8> <58BD> <58C9> <58BF> <58BA> <58C2> <58BC> <58C6> <5B17> <5B19> <5B1B> <5B21> <5B14> <5B13> <5B10> <5B16> <5B28> <5B1A> <5B20> <5B1E> <5BEF> <5DAC> <5DB1> <5DA9> <5DA7> <5DB5> <5DB0> <5DAE> <5DAA> <5DA8> <5DB2> <5DAD> <5DAF> <5DB4> <5E67> <5E66> <5E6F> <5EE9> <5EE7> <5EE6> <5EE8> <5EE5> <5F4B> <5FBC> <619D> <61A8> <6196> <61C5> <61B4> <61C6> <61C1> <61CC> <61BA> <61BF> <61B8> <618C> <64D7> <64D6> <64D0> <64CF> <64C9> <64BD> <6489> <64C3> <64DB> <64F3> <64D9> <6533> <657F> <657C> <65A2> <66C8> endbfrange 100 beginbfrange <66BE> <66C0> <66CA> <66CF> <66BD> <66BB> <66BA> <66CC> <6723> <6A34> <6A66> <6A49> <6A67> <6A32> <6A68> <6A3E> <6A5D> <6A6D> <6A76> <6A5B> <6A51> <6A28> <6A5A> <6A3B> <6A3F> <6A41> <6A6A> <6A64> <6A50> <6A4F> <6A54> <6A6F> <6A69> <6A60> <6A3C> <6A5E> <6A56> <6A55> <6A4D> <6A46> <6B55> <6B54> <6B56> <6BA7> <6BAA> <6BC8> <6BC7> <6C04> <6C03> <6C06> <6FAD> <6FCB> <6FA3> <6FC7> <6FBC> <6FCE> <6FC8> <6F5E> <6FC4> <6FBD> <6F9E> <6FCA> <6FA8> <7004> <6FA5> <6FAE> <6FBA> <6FAC> <6FAA> <6FCF> <6FBF> <6FB8> <6FA2> <6FC9> <6FAB> <6FCD> <6FAF> <6FB2> <6FB0> <71C5> <71C2> <71BF> <71B8> <71D6> <71C0> <71CB> <71D4> <71CA> <71C7> <71CF> <71BD> <71D8> <71BC> <71C6> <71DA> <729D> <7369> <7366> <736C> <7365> endbfrange 100 beginbfrange <736B> <736A> <747F> <749A> <74A0> <7494> <7492> <7495> <74A1> <750B> <7580> <762F> <762D> <7631> <763D> <7633> <763C> <7635> <7632> <7630> <76BB> <76E6> <779A> <779D> <77A1> <779C> <779B> <77A2> <7795> <7799> <7797> <78DD> <78E9> <78E5> <78EA> <78DE> <78E3> <78DB> <78E1> <78ED> <78DF> <79A4> <7A44> <7A48> <7A47> <7AB6> <7AB8> <7AB5> <7AB1> <7AB7> <7BDE> <7BE3> <7BE7> <7BDD> <7BD5> <7BE5> <7BDA> <7BE8> <7BF9> <7BD4> <7BEA> <7BE2> <7BDC> <7BEB> <7BD8> <7BDF> <7CD2> <7CD4> <7CD7> <7CD0> <7E12> <7E21> <7E17> <7E0C> <7E1F> <7E13> <7E0E> <7E1C> <7E15> <7E1A> <7E22> <7E0B> <7E0F> <7E16> <7E0D> <7E14> <7E25> <7E24> <7F43> <7F7B> <7F7A> <7FB1> <7FEF> <802A> <8029> <806C> <81B1> <81A6> <81AE> <81B9> endbfrange 100 beginbfrange <81B5> <81AB> <81B0> <81AC> <81B4> <81B2> <81B7> <81A7> <81F2> <8255> <8556> <8545> <856B> <854D> <8553> <8561> <8558> <8540> <8546> <8564> <8541> <8562> <8544> <8551> <8547> <8563> <853E> <855B> <8571> <854E> <856E> <8575> <8555> <8567> <8560> <858C> <8566> <855D> <8554> <8565> <856C> <8663> <8665> <8664> <879B> <878F> <8797> <8793> <8792> <8788> <8781> <8796> <8798> <8779> <8787> <87A3> <8785> <8790> <879D> <8784> <8794> <879C> <879A> <8789> <891E> <8926> <8930> <892D> <8927> <8931> <8922> <8929> <8923> <892F> <892C> <891F> <89F1> <8AE0> <8AE2> <8AF2> <8AF4> <8ADD> <8B14> <8AE4> <8ADF> <8AF0> <8AC8> <8ADE> <8AE1> <8AE8> <8AFF> <8AEF> <8AFB> <8C91> <8C90> <8CF5> <8CEE> <8CF1> <8CF0> <8CF3> endbfrange 100 beginbfrange <8D6C> <8D6E> <8DA5> <8DA7> <8E33> <8E3E> <8E38> <8E40> <8E45> <8E36> <8E3C> <8E41> <8E30> <8E3F> <8EBD> <8F36> <8F2E> <8F35> <8F32> <8F39> <8F37> <8F34> <9076> <9079> <907B> <9086> <90FA> <9133> <9135> <9193> <9190> <918D> <918F> <9327> <931E> <9308> <931F> <9306> <930F> <937A> <9338> <933C> <931B> <9323> <9312> <9301> <9346> <932D> <930E> <930D> <92CB> <931D> <92FA> <9325> <9313> <92F9> <92F7> <9334> <9302> <9324> <92FF> <9329> <9339> <9335> <932A> <9314> <930C> <930B> <92FE> <9309> <9300> <92FB> <9316> <95BC> <95CD> <95BE> <95B9> <95B6> <95BF> <95B5> <95BD> <96A9> <96D4> <970B> <9712> <9710> <9799> <9797> <9794> <97F0> <97F8> <9835> <982F> <9832> <9924> <991F> <9927> <9929> <999E> <99EE> endbfrange 100 beginbfrange <99EC> <99E5> <99E4> <99F0> <99E3> <99EA> <99E9> <99E7> <9AB9> <9ABF> <9AB4> <9ABB> <9AF6> <9AFA> <9AF9> <9AF7> <9B33> <9B80> <9B85> <9B87> <9B7C> <9B7E> <9B7B> <9B82> <9B93> <9B92> <9B90> <9B7A> <9B95> <9B7D> <9B88> <9D25> <9D17> <9D20> <9D1E> <9D14> <9D29> <9D1D> <9D18> <9D22> <9D10> <9D19> <9D1F> <9E88> <9E86> <9EAE> <9EAD> <9ED5> <9EFA> <9F12> <9F3D> <5126> <5125> <5122> <5124> <5120> <5129> <52F4> <5693> <568C> <5686> <5684> <5683> <567E> <5682> <567F> <5681> <58D6> <58D4> <58CF> <58D2> <5B2D> <5B25> <5B32> <5B23> <5B2C> <5B27> <5B26> <5B2F> <5B2E> <5B7B> <5BF1> <5DB7> <5E6C> <5E6A> <5FBE> <5FBB> <61C3> <61B5> <61BC> <61E7> <61E0> <61E5> <61E4> <61E8> <61DE> <64EF> <64E9> <64E3> <64EB> endbfrange 100 beginbfrange <64E4> <64E8> <6581> <6580> <65B6> <65DA> <66D2> <6A8D> <6A96> <6A81> <6AA5> <6A89> <6A9F> <6A9B> <6AA1> <6A9E> <6A87> <6A93> <6A8E> <6A95> <6A83> <6AA8> <6AA4> <6A91> <6A7F> <6AA6> <6A9A> <6A85> <6A8C> <6A92> <6B5B> <6BAD> <6C09> <6FCC> <6FA9> <6FF4> <6FD4> <6FE3> <6FDC> <6FED> <6FE7> <6FE6> <6FDE> <6FF2> <6FDD> <6FE2> <6FE8> <71E1> <71F1> <71E8> <71F2> <71E4> <71F0> <71E2> <7373> <736E> <7497> <74B2> <74AB> <7490> <74AA> <74AD> <74B1> <74A5> <74AF> <7510> <750F> <7584> <7643> <7648> <7647> <76A4> <76E9> <77B5> <77AB> <77B2> <77B7> <77B6> <77B4> <77B1> <77A8> <77F0> <78F3> <78FD> <7902> <78FB> <78F2> <7905> <78F9> <78FE> <7904> <79AB> <79A8> <7A5C> <7A5B> <7A56> <7A58> <7A54> <7A5A> <7ABE> endbfrange 100 beginbfrange <7AC0> <7C05> <7C0F> <7BF2> <7C00> <7BFF> <7BFB> <7C0E> <7BF4> <7C0B> <7BF3> <7C02> <7C09> <7C03> <7C01> <7BF8> <7BFD> <7C06> <7BF0> <7C10> <7C0A> <7CE8> <7E2D> <7E3C> <7E42> <7E33> <9848> <7E38> <7E2A> <7E49> <7E40> <7E47> <7E29> <7E4C> <7E30> <7E3B> <7E36> <7E44> <7E3A> <7F45> <7F7F> <7F7E> <7F7D> <7FF4> <7FF2> <802C> <81BB> <81C4> <81CC> <81CA> <81C5> <81C7> <81BC> <81E9> <825B> <825A> <825C> <8583> <8580> <858F> <85A7> <8595> <85A0> <858B> <85A3> <857B> <85A4> <859A> <859E> <8577> <857C> <8589> <85A1> <857A> <8578> <8557> <858E> <8596> <8586> <858D> <8599> <859D> <8581> <85A2> <8582> <8588> <8585> <8579> <8576> <8598> <8590> <859F> <8668> <87BE> <87AA> <87AD> <87C5> <87B0> <87AC> <87B9> endbfrange 100 beginbfrange <87B5> <87BC> <87AE> <87C9> <87C3> <87C2> <87CC> <87B7> <87AF> <87C4> <87CA> <87B4> <87B6> <87BF> <87B8> <87BD> <87DE> <87B2> <8935> <8933> <893C> <893E> <8941> <8952> <8937> <8942> <89AD> <89AF> <89AE> <89F2> <8B1E> <8B18> <8B16> <8B11> <8B05> <8B0B> <8B22> <8B0F> <8B12> <8B15> <8B07> <8B0D> <8B08> <8B06> <8B1C> <8B13> <8B1A> <8C4F> <8C70> <8C72> <8C71> <8C6F> <8C95> <8C94> <8CF9> <8D6F> <8E4E> <8E4D> <8E53> <8E50> <8E4C> <8E47> <8F43> <8F40> <9085> <907E> <9138> <919A> <91A2> <919B> <9199> <919F> <91A1> <919D> <91A0> <93A1> <9383> <93AF> <9364> <9356> <9347> <937C> <9358> <935C> <9376> <9349> <9350> <9360> <936D> <938F> <934C> <936A> <9379> <9357> <9355> <9352> <934F> <9371> <9377> <937B> endbfrange 100 beginbfrange <9361> <935E> <9363> <9367> <9380> <934E> <9359> <95C7> <95C0> <95C9> <95C3> <95C5> <95B7> <96AE> <96B0> <96AC> <9720> <971F> <9718> <971D> <9719> <979A> <97A1> <979C> <979E> <979D> <97D5> <97D4> <97F1> <9841> <9844> <984A> <9849> <9845> <9843> <9925> <992B> <992A> <9933> <9932> <992F> <992D> <9931> <9930> <9998> <99A3> <99A1> <9A02> <99FA> <99F4> <99F7> <99F9> <99F8> <99F6> <99FB> <99FD> <99FC> <9A03> <9ABE> <9AFE> <9AFD> <9B01> <9AFC> <9B48> <9B9A> <9BA8> <9B9E> <9B9B> <9BA6> <9BA1> <9BA5> <9BA4> <9B86> <9BA2> <9BA0> <9BAF> <9D33> <9D41> <9D67> <9D36> <9D2E> <9D31> <9D38> <9D30> <9D45> <9D42> <9D3E> <9D37> <9D40> <9D3D> <7FF5> <9D2D> <9E8A> <9E89> <9E8D> <9EB0> <9EC8> <9EDA> <9EFB> <9EFF> endbfrange 100 beginbfrange <9F24> <9F23> <9F22> <9F54> <9FA0> <5131> <512D> <5698> <569C> <5697> <569A> <569D> <5699> <5970> <5B3C> <5C69> <5DC0> <5E6D> <61D8> <61DF> <61ED> <61F1> <61EA> <61F0> <61EB> <61D6> <61E9> <64FF> <6504> <64FD> <64F8> <6501> <6503> <64FC> <6594> <65DB> <66DA> <66D8> <6AC5> <6AB9> <6ABD> <6AE1> <6AC6> <6ABA> <6AB6> <6AC7> <6AB4> <6AAD> <6B5E> <6BC9> <6C0B> <7007> <700C> <7001> <7005> <7014> <700E> <6FFF> <6FFB> <7026> <6FFC> <6FF7> <700A> <7201> <71FF> <71F9> <7203> <71FD> <7376> <74B8> <74C0> <74B5> <74C1> <74BE> <74B6> <74BB> <74C2> <7514> <7513> <765C> <7664> <7659> <7650> <7653> <7657> <765A> <76A6> <76BD> <76EC> <77C2> <77BA> <78FF> <790C> <7913> <7909> <7910> <7912> <7911> <79AD> <79AC> endbfrange 100 beginbfrange <7A5F> <7C1C> <7C29> <7C19> <7C20> <7C1F> <7C2D> <7C1D> <7C26> <7C28> <7C22> <7C25> <7C30> <7E5C> <7E50> <7E56> <7E63> <7E58> <7E62> <7E5F> <7E51> <7E60> <7E57> <7E53> <7FB5> <7FB3> <7FF7> <8075> <81D1> <81D0> <825F> <825E> <85B4> <85C6> <85C0> <85C3> <85C2> <85B3> <85B5> <85BD> <85C7> <85C4> <85BF> <85CB> <85CE> <85C8> <85C5> <85B1> <85B6> <85D2> <8624> <85B8> <85B7> <85BE> <8669> <87E7> <87E6> <87E2> <87DB> <87EB> <87EA> <87E5> <87DF> <87F3> <87E4> <87D4> <87DC> <87D3> <87ED> <87D8> <87E3> <87A4> <87D7> <87D9> <8801> <87F4> <87E8> <87DD> <8953> <894B> <894F> <894C> <8946> <8950> <8949> <8B2A> <8B27> <8B23> <8B33> <8B30> <8B35> <8B47> <8B2F> <8B3C> <8B3E> <8B31> <8B25> <8B37> <8B26> <8B36> endbfrange 100 beginbfrange <8B2E> <8B24> <8B3B> <8B3D> <8B3A> <8C42> <8C75> <8C99> <8C98> <8C97> <8CFE> <8D04> <8D02> <8D00> <8E5C> <8E62> <8E60> <8E57> <8E56> <8E5E> <8E65> <8E67> <8E5B> <8E5A> <8E61> <8E5D> <8E69> <8E54> <8F46> <8F4B> <9128> <913A> <913E> <91A8> <91A5> <91A7> <91AF> <91AA> <93B5> <938C> <9392> <93B7> <939B> <939D> <9389> <93A7> <938E> <93AA> <939E> <93A6> <9395> <9388> <9399> <939F> <938D> <93B1> <9391> <93B2> <93A4> <93A8> <93B4> <93A3> <93A5> <95D2> <95D1> <96B3> <96D7> <96DA> <5DC2> <96DF> <96D8> <96DD> <9723> <9722> <9725> <97AC> <97AE> <97A8> <97AB> <97A4> <97AA> <97A2> <97A5> <97D7> <97D9> <97D6> <97D8> <97FA> <9850> <98B8> <9941> <993C> <993A> <9A0F> <9A0B> <9A09> <9A0D> <9A04> <9A11> <9A0A> endbfrange 100 beginbfrange <9A05> <9A07> <9A06> <9AC0> <9ADC> <9B08> <9B04> <9B29> <9B35> <9B4A> <9B4C> <9B4B> <9BC7> <9BC6> <9BC3> <9BBF> <9BC1> <9BB5> <9BB8> <9BD3> <9BB6> <9BC4> <9BB9> <9BBD> <9D5C> <9D53> <9D4F> <9D4A> <9D5B> <9D4B> <9D59> <9D56> <9D4C> <9D57> <9D52> <9D54> <9D5F> <9D58> <9D5A> <9E8E> <9E8C> <9EDF> <9F01> <9F00> <9F16> <9F25> <9F2B> <9F2A> <9F29> <9F28> <9F4C> <9F55> <5134> <5296> <52F7> <53B4> <56AB> <56AD> <56A6> <56AA> <56AC> <58DA> <58DD> <58DB> <5912> <5B3D> <5DC3> <5E70> <5FBF> <61FB> <6507> <6510> <650D> <6509> <650C> <650E> <6584> <65DE> <65DD> <66DE> <6AE7> <6AE0> <6ACC> <6AD1> <6AD9> <6ACB> <6ADF> <6ADC> <6AD0> <6AEB> <6ACF> <6ACD> <6ADE> <6B60> <6BB0> <6C0C> <7019> <7027> <7020> <7016> endbfrange 100 beginbfrange <702B> <7021> <7029> <7017> <7024> <701C> <702A> <720C> <720A> <7207> <7202> <7205> <72A5> <72A4> <72A3> <72A1> <74CB> <74C5> <74B7> <74C3> <7516> <7660> <77C9> <77C4> <77F1> <791D> <791B> <7921> <791C> <7917> <791E> <79B0> <7A67> <7C33> <7C3C> <7C39> <7C2C> <7C3B> <7CEC> <7CEA> <7E76> <7E75> <7E78> <7E70> <7E77> <7E6F> <7E7A> <7E72> <7E74> <7E68> <7F4B> <7F4A> <7F83> <7F86> <7FB7> <7FFD> <8078> <81D7> <81D5> <8264> <8261> <8263> <85EB> <85F1> <85ED> <85D9> <85E1> <85E8> <85DA> <85D7> <85EC> <85F2> <85F8> <85D8> <85DF> <85E3> <85DC> <85D1> <85F0> <85E6> <85EF> <85DE> <85E2> <8800> <87FA> <8803> <87F6> <8809> <880C> <880B> <8806> <87FC> <8808> <87FF> <880A> <8802> <8962> <895A> <8957> <8961> endbfrange 100 beginbfrange <895C> <8958> <895D> <8959> <8988> <89B7> <89B6> <89F6> <8B50> <8B48> <8B4A> <8B40> <8B53> <8B56> <8B54> <8B4B> <8B55> <8B51> <8B42> <8B52> <8B57> <8C43> <8C77> <8C76> <8C9A> <8D06> <8D09> <8DAC> <8DAA> <8DAD> <8DAB> <8E6D> <8E78> <8E73> <8E6A> <8E6F> <8E7B> <8EC2> <8F52> <8F51> <8F4F> <8F53> <8FB4> <9140> <913F> <91B0> <91AD> <93DE> <93C7> <93CF> <93C2> <93DA> <93D0> <93F9> <93EC> <93CC> <93D9> <93A9> <93E6> <93CA> <93D4> <93EE> <93E3> <93D5> <93C4> <93CE> <93C0> <93D2> <93E7> <957D> <95DA> <96E1> <9729> <972B> <9728> <9726> <97B3> <97B7> <97B6> <97DD> <985C> <9859> <985D> <9857> <98BF> <98BD> <98BB> <98BE> <9948> <9947> <9943> <99A6> <9A1A> <9A15> <9A25> <9A1D> <9A24> <9A1B> <9A22> <9A20> endbfrange 100 beginbfrange <9A27> <9A23> <9A1E> <9A1C> <9A14> <9AC2> <9B0B> <9B0A> <9B0E> <9B0C> <9B37> <9BEA> <9BE0> <9BDE> <9BE4> <9BE6> <9BE2> <9BF0> <9BD4> <9BD7> <9BEC> <9BDC> <9BD9> <9BE5> <9BD5> <9BE1> <9BDA> <9D77> <9D81> <9D8A> <9D84> <9D88> <9D71> <9D80> <9D78> <9D86> <9D8B> <9D7D> <9D6B> <9D74> <9D70> <9D69> <9D85> <9D73> <9D7B> <9D82> <9D6F> <9D79> <9D7F> <9D87> <9D68> <9E94> <9E91> <9EC0> <9EFC> <9F2D> <9F40> <9F4D> <9F56> <5337> <56B2> <56B5> <56B3> <58E3> <5B45> <5DC6> <5EEE> <5FC0> <61F9> <6517> <6516> <6515> <6513> <65DF> <66E8> <66E3> <6AF3> <6AF0> <6AEA> <6AE8> <6AF9> <6AF1> <6AEE> <703C> <7035> <702F> <7037> <7034> <7031> <7042> <7038> <703F> <703A> <7039> <7040> <703B> <7033> <7041> <7213> <72A8> endbfrange 100 beginbfrange <737D> <737C> <74BA> <76AB> <76AA> <76BE> <76ED> <77CC> <77CE> <77CD> <77F2> <7925> <7923> <7927> <7924> <7929> <79B2> <7A6E> <7A6C> <7AF7> <7C49> <7C48> <7C4A> <7C47> <7C45> <7CEE> <7E7B> <7E7E> <7E81> <7E80> <7FBA> <7FFF> <8079> <81DB> <81D9> <820B> <8268> <8622> <85FF> <8601> <85FE> <861B> <8600> <85F6> <8604> <8609> <8605> <860C> <85FD> <8819> <8810> <8817> <8813> <8816> <8963> <8966> <89B9> <89F7> <8B60> <8B6A> <8B5D> <8B68> <8B63> <8B65> <8B67> <8B6D> <8DAE> <8E86> <8E88> <8E84> <8F59> <8F56> <8F55> <8F58> <8F5A> <908D> <9143> <9141> <91B7> <91B5> <91B2> <940B> <9413> <93FB> <9420> <940F> <9414> <93FE> <9415> <9410> <9428> <9419> <940D> <93F5> <9400> <93F7> <9407> <940E> <9416> <9412> endbfrange 100 beginbfrange <93FA> <9409> <93F8> <940A> <93FF> <93FC> <940C> <93F6> <9411> <9406> <95DE> <95E0> <95DF> <972E> <97B9> <97BB> <97FD> <9860> <9862> <985F> <98C1> <9950> <994E> <9959> <994C> <994B> <9953> <9A32> <9A34> <9A31> <9A2C> <9A2A> <9A36> <9A29> <9A2E> <9A38> <9A2D> <9AC7> <9ACA> <9AC6> <9B10> <9B12> <9B11> <9C0B> <9C08> <9BF7> <9C05> <9C12> <9BF8> <9C40> <9C07> <9C0E> <9C06> <9C17> <9C14> <9C09> <9D9F> <9D99> <9DA4> <9D9D> <9D92> <9D98> <9D90> <9D9B> <9DA0> <9D94> <9D9C> <9DAA> <9D97> <9DA1> <9D9A> <9DA2> <9DA8> <9D9E> <9DA3> <9DBF> <9DA9> <9D96> <9DA6> <9E99> <9E9B> <9E9A> <9EE5> <9EE4> <9EE7> <9EE6> <9F30> <9F2E> <9F5B> <9F60> <9F5E> <9F5D> <9F59> <9F91> <513A> <5139> <5298> <5297> <56C3> <56BD> endbfrange 100 beginbfrange <5B48> <5B47> <5DCB> <5DCF> <5EF1> <61FD> <651B> <6B02> <6AFC> <6B03> <6AF8> <6B00> <7043> <704A> <7048> <7045> <721D> <721A> <7219> <737E> <7517> <766A> <77D0> <792D> <7931> <792F> <7C54> <7C53> <7CF2> <7E8A> <7E87> <7E8B> <7E86> <7E8D> <7F4D> <7FBB> <8030> <81DD> <8618> <862A> <8626> <861F> <8623> <861C> <8619> <8627> <862E> <8621> <8620> <8629> <861E> <8625> <8829> <881D> <881B> <8820> <8824> <881C> <882B> <884A> <896D> <8969> <896E> <896B> <89FA> <8B79> <8B78> <8B45> <8B7A> <8D10> <8D14> <8DAF> <8E8E> <8E8C> <8F5E> <8F5B> <8F5D> <9146> <9144> <91B9> <943F> <943B> <9436> <9429> <943D> <943C> <9430> <9439> <942A> <9437> <942C> <9440> <9431> <95E5> <95E4> <95E3> <9735> <973A> <97BF> <97E1> endbfrange 100 beginbfrange <9864> <98C9> <98C6> <98C0> <9958> <9956> <9A39> <9A3D> <9A46> <9A44> <9A42> <9A41> <9A3A> <9A3F> <9ACD> <9B15> <9B17> <9B16> <9B3A> <9B52> <9C2B> <9C1D> <9C1C> <9C2C> <9C23> <9C28> <9C24> <9C21> <9DB7> <9DB6> <9DBC> <9DC1> <9DC7> <9DCA> <9DCF> <9DBE> <9DC5> <9DC3> <9DBB> <9DB5> <9DCE> <9DB9> <9DAC> <9DC8> <9DB1> <9DAD> <9DCC> <9DB3> <9DCD> <9DB2> <9E7A> <9E9C> <9EEB> <9EEE> <9EED> <9F1B> <9F18> <9F1A> <9F31> <9F4E> <9F65> <9F64> <9F92> <4EB9> <56C6> <56C5> <56CB> <5971> <5B4B> <5DD5> <5DD1> <5EF2> <6521> <6520> <6526> <6522> <6B0B> <6B08> <6C0D> <7055> <7052> <721E> <72A9> <737F> <74D8> <74D5> <74D9> <74D7> <766D> <76AD> <7935> <79B4> <7A70> <7C57> <7C5C> <7C59> <7C5B> <7C5A> <7CF4> <7CF1> endbfrange 100 beginbfrange <7E91> <7F4F> <7F87> <81DE> <826B> <8634> <8633> <862C> <8632> <8636> <882C> <8828> <8826> <882A> <8825> <8971> <89BF> <89BE> <89FB> <8B7E> <8B84> <8B82> <8B86> <8B85> <8B7F> <8D15> <8E95> <8E94> <8E9A> <8E92> <8E90> <8E96> <8F60> <8F62> <9147> <944C> <9450> <944A> <944F> <9447> <9445> <9448> <9446> <973F> <97E3> <986A> <9869> <98CB> <9954> <995B> <9A4E> <9A53> <9A4C> <9A4F> <9A48> <9A4A> <9A49> <9A52> <9A50> <9AD0> <9B19> <9B2B> <9B3B> <9B56> <9B55> <9C46> <9C48> <9C3F> <9C44> <9C39> <9C33> <9C41> <9C3C> <9C37> <9C34> <9C32> <9C3D> <9C36> <9DDB> <9DD2> <9DDE> <9DDA> <9DCB> <9DD0> <9DDC> <9DD1> <9DDF> <9DE9> <9DD9> <9DD8> <9DD6> <9DF5> <9DD5> <9DDD> <9EB6> <9EF0> <9F35> <9F33> <9F32> <9F42> endbfrange 100 beginbfrange <9F6B> <9F95> <9FA2> <513D> <5299> <58E8> <58E7> <5972> <5B4D> <5DD8> <882F> <5F4F> <6201> <6203> <6529> <6525> <6596> <66EB> <6B11> <6B0F> <6BCA> <705B> <705A> <7222> <7382> <7381> <7383> <7670> <77D4> <7C67> <7C66> <7E95> <826C> <863A> <8640> <8639> <863C> <8631> <863B> <863E> <8830> <8832> <882E> <8833> <8976> <8974> <8973> <89FE> <8B8C> <8B8E> <8B8B> <8B88> <8C45> <8D19> <8E98> <8F64> <8F63> <91BC> <9462> <9455> <945D> <9457> <945E> <97C4> <9800> <9A56> <9A59> <9B1E> <9C52> <9C58> <9C50> <9C4A> <9C4D> <9C4B> <9C55> <9C59> <9C4C> <9C4E> <9DFB> <9DF7> <9DEF> <9DE3> <9DEB> <9DF8> <9DE4> <9DF6> <9DE1> <9DEE> <9DE6> <9DF2> <9DF0> <9DE2> <9DEC> <9DF4> <9DF3> <9DE8> <9DED> <9EC2> <9ED0> <9EF2> endbfrange 100 beginbfrange <9F06> <9F1C> <9F38> <9F37> <9F36> <9F43> <9F4F> <9F71> <9F70> <9F6E> <56D3> <56CD> <5B4E> <5C6D> <652D> <66ED> <6B13> <705F> <7061> <705D> <7060> <7223> <74DB> <74E5> <77D5> <7938> <79B7> <79B6> <7C6A> <7E97> <7F89> <826D> <8643> <8838> <8837> <8835> <884B> <8B94> <8E9E> <8E9D> <91BE> <91BD> <91C2> <946B> <9468> <96E5> <9746> <9743> <9747> <97C7> <97E5> <9A5E> <9AD5> <9B59> <9C63> <9C67> <9C66> <9C62> <9C5E> <9C60> <9E02> <9DFE> <9E07> <9E03> <9E06> <9E05> <9E00> <9E09> <9DFF> <9DFD> <9E04> <9EA0> <9F1E> <9F46> <9F74> <56D4> <652E> <65B8> <6B18> <6B17> <6B1A> <7062> <7226> <72AA> <77D8> <7939> <7C69> <7C6B> <7CF6> <7E9A> <7E98> <7E9B> <7E99> <81E0> <8646> <8979> <897C> <897B> <89FF> <8B98> endbfrange 97 beginbfrange <8EA5> <8EA4> <8EA3> <946E> <946D> <946F> <9471> <9473> <9749> <9872> <995F> <9C68> <9C6E> <9C6D> <9E0B> <9E0D> <9E10> <9E0F> <9E12> <9E11> <9EA1> <9EF5> <9F09> <9F47> <9F78> <9F7B> <9F7A> <9F79> <571E> <7066> <7C6F> <883C> <8DB2> <8EA6> <91C3> <9474> <9478> <9476> <9475> <9A60> <9C74> <9C73> <9C71> <9C75> <9E14> <9E13> <9EF6> <9F0A> <9FA4> <7068> <7065> <7CF7> <866A> <883E> <883D> <883F> <8B9E> <8C9C> <8EA9> <8EC9> <974B> <9873> <98CC> <9961> <99AB> <9A64> <9A66> <9B24> <9E15> <9E17> <9F48> <6207> <6B1E> <7227> <864C> <8EA8> <9482> <9480> <9A69> <9A68> <9B2E> <9E19> <7229> <864B> <8B9F> <9483> <9C79> <9EB7> <7675> <9A6B> <9C7A> <9E1D> <7069> <9EA4> <9F7E> <9F49> <9F98> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/B5pc-V b/Resources/cmap/B5pc-V deleted file mode 100644 index 9bbef3e8c60..00000000000 --- a/Resources/cmap/B5pc-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (B5pc-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (B5pc-H) %%BeginResource: CMap (B5pc-V) %%Title: (B5pc-V Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /B5pc-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /B5pc-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 900 def /XUID [1 10 25383] def /WMode 1 def 12 begincidrange 13646 13743 13745 130 134 138 142 146 150 154 158 13647 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/CNS-EUC-H b/Resources/cmap/CNS-EUC-H deleted file mode 100644 index 48ca416389a..00000000000 --- a/Resources/cmap/CNS-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (CNS-EUC-H) %%Title: (CNS-EUC-H Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /CNS-EUC-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 300 def /XUID [1 10 25388] def /WMode 0 def 5 begincodespacerange <00> <80> <8EA1A1A1> <8EA1FEFE> <8EA2A1A1> <8EA2FEFE> <8EA3A1A1> <8EA3FEFE> endcodespacerange 1 beginnotdefrange <00> <1f> 13648 endnotdefrange 100 begincidrange <20> <7e> 13648 <8ea1a1a1> <8ea1a1fe> 99 <8ea1a2a1> <8ea1a2fe> 193 <8ea1a3a1> <8ea1a3ce> 287 <8ea1a4a1> <8ea1a4fe> 333 <8ea1a5a1> <8ea1a5ec> 427 <8ea1a5ee> <8ea1a5f0> 503 <8ea1a6a1> <8ea1a6be> 506 <8ea1a7a1> <8ea1a7a1> 595 <8ea1a7a2> <8ea1a7a4> 536 <8ea1a7a5> <8ea1a7a5> 596 <8ea1a7a6> <8ea1a7a6> 539 <8ea1a7a7> <8ea1a7a7> 602 <8ea1a7a8> <8ea1a7a8> 540 <8ea1a7a9> <8ea1a7ac> 603 <8ea1a7ad> <8ea1a7af> 541 <8ea1a7b0> <8ea1a7b0> 607 <8ea1a7b1> <8ea1a7b1> 5998 <8ea1a7b2> <8ea1a7b2> 608 <8ea1a7b3> <8ea1a7b3> 610 <8ea1a7b4> <8ea1a7b4> 544 <8ea1a7b5> <8ea1a7b5> 611 <8ea1a7b6> <8ea1a7b6> 5999 <8ea1a7b7> <8ea1a7b7> 545 <8ea1a7b8> <8ea1a7b9> 612 <8ea1a7ba> <8ea1a7ba> 546 <8ea1a7bb> <8ea1a7bb> 6000 <8ea1a7bc> <8ea1a7bc> 547 <8ea1a7bd> <8ea1a7bd> 614 <8ea1a7be> <8ea1a7be> 633 <8ea1a7bf> <8ea1a7bf> 6005 <8ea1a7c0> <8ea1a7c1> 634 <8ea1a7c2> <8ea1a7c2> 548 <8ea1a7c3> <8ea1a7c6> 636 <8ea1a7c7> <8ea1a7c7> 549 <8ea1a7c8> <8ea1a7cb> 642 <8ea1a7cc> <8ea1a7cc> 6006 <8ea1a7cd> <8ea1a7cd> 646 <8ea1a7ce> <8ea1a7ce> 550 <8ea1a7cf> <8ea1a7d0> 648 <8ea1a7d1> <8ea1a7d2> 652 <8ea1a7d3> <8ea1a7d5> 551 <8ea1a7d6> <8ea1a7d8> 654 <8ea1a7d9> <8ea1a7da> 554 <8ea1a7db> <8ea1a7db> 6007 <8ea1a7dc> <8ea1a7df> 720 <8ea1a7e0> <8ea1a7e0> 725 <8ea1a7e1> <8ea1a7e1> 556 <8ea1a7e2> <8ea1a7e5> 726 <8ea1a7e6> <8ea1a7e6> 557 <8ea1a7e7> <8ea1a7ed> 730 <8ea1a7ee> <8ea1a7ee> 6026 <8ea1a7ef> <8ea1a7f2> 737 <8ea1a7f3> <8ea1a7f3> 6028 <8ea1a7f4> <8ea1a7f8> 741 <8ea1a7f9> <8ea1a7f9> 6029 <8ea1a7fa> <8ea1a7fd> 746 <8ea1a7fe> <8ea1a7fe> 854 <8ea1a8a1> <8ea1a8a6> 855 <8ea1a8a7> <8ea1a8a7> 862 <8ea1a8a8> <8ea1a8a8> 866 <8ea1a8a9> <8ea1a8aa> 558 <8ea1a8ab> <8ea1a8b2> 867 <8ea1a8b3> <8ea1a8b3> 6066 <8ea1a8b4> <8ea1a8b6> 875 <8ea1a8b7> <8ea1a8ba> 1014 <8ea1a8bb> <8ea1a8bb> 6162 <8ea1a8bc> <8ea1a8be> 1018 <8ea1a8bf> <8ea1a8c3> 1022 <8ea1a8c4> <8ea1a8cc> 1029 <8ea1a8cd> <8ea1a8cd> 6163 <8ea1a8ce> <8ea1a8ce> 6168 <8ea1a8cf> <8ea1a8d2> 1039 <8ea1a8d3> <8ea1a8d3> 6169 <8ea1a8d4> <8ea1a8d9> 1288 <8ea1a8da> <8ea1a8da> 6375 <8ea1a8db> <8ea1a8e2> 1294 <8ea1a8e3> <8ea1a8e3> 560 <8ea1a8e4> <8ea1a8e4> 1307 <8ea1a8e5> <8ea1a8e7> 1312 <8ea1a8e8> <8ea1a8eb> 1686 <8ea1a8ec> <8ea1a8ec> 561 <8ea1a8ed> <8ea1a8f0> 1695 <8ea1a8f1> <8ea1a8fb> 2086 <8ea1a8fc> <8ea1a8fe> 2549 <8ea1a9a1> <8ea1a9a1> 7731 <8ea1a9a2> <8ea1a9a2> 2552 <8ea1a9a3> <8ea1a9a3> 7732 <8ea1a9a4> <8ea1a9a5> 2553 <8ea1a9a6> <8ea1a9ab> 3041 <8ea1a9ac> <8ea1a9ae> 3515 <8ea1a9af> <8ea1a9af> 9056 <8ea1a9b0> <8ea1a9b0> 9746 <8ea1a9b1> <8ea1a9b3> 3963 <8ea1a9b4> <8ea1a9b5> 4352 <8ea1a9b6> <8ea1a9b6> 4745 <8ea1a9b7> <8ea1a9b8> 5042 <8ea1a9b9> <8ea1a9b9> 12045 <8ea1c2a1> <8ea1c2c1> 562 <8ea1c4a1> <8ea1c4fe> 595 endcidrange 100 begincidrange <8ea1c5a1> <8ea1c5fe> 689 <8ea1c6a1> <8ea1c6fe> 783 <8ea1c7a1> <8ea1c7fe> 877 <8ea1c8a1> <8ea1c8fe> 971 <8ea1c9a1> <8ea1c9fe> 1065 <8ea1caa1> <8ea1cafe> 1159 <8ea1cba1> <8ea1cbfe> 1253 <8ea1cca1> <8ea1ccfe> 1347 <8ea1cda1> <8ea1cdfe> 1441 <8ea1cea1> <8ea1cefe> 1535 <8ea1cfa1> <8ea1cffe> 1629 <8ea1d0a1> <8ea1d0fe> 1723 <8ea1d1a1> <8ea1d1fe> 1817 <8ea1d2a1> <8ea1d2fe> 1911 <8ea1d3a1> <8ea1d3fe> 2005 <8ea1d4a1> <8ea1d4fe> 2099 <8ea1d5a1> <8ea1d5fe> 2193 <8ea1d6a1> <8ea1d6fe> 2287 <8ea1d7a1> <8ea1d7fe> 2381 <8ea1d8a1> <8ea1d8fe> 2475 <8ea1d9a1> <8ea1d9fe> 2569 <8ea1daa1> <8ea1dafe> 2663 <8ea1dba1> <8ea1dbfe> 2757 <8ea1dca1> <8ea1dcfe> 2851 <8ea1dda1> <8ea1ddfe> 2945 <8ea1dea1> <8ea1defe> 3039 <8ea1dfa1> <8ea1dffe> 3133 <8ea1e0a1> <8ea1e0fe> 3227 <8ea1e1a1> <8ea1e1fe> 3321 <8ea1e2a1> <8ea1e2fe> 3415 <8ea1e3a1> <8ea1e3fe> 3509 <8ea1e4a1> <8ea1e4fe> 3603 <8ea1e5a1> <8ea1e5fe> 3697 <8ea1e6a1> <8ea1e6fe> 3791 <8ea1e7a1> <8ea1e7fe> 3885 <8ea1e8a1> <8ea1e8fe> 3979 <8ea1e9a1> <8ea1e9fe> 4073 <8ea1eaa1> <8ea1eafe> 4167 <8ea1eba1> <8ea1ebfe> 4261 <8ea1eca1> <8ea1ecfe> 4355 <8ea1eda1> <8ea1edfe> 4449 <8ea1eea1> <8ea1eefe> 4543 <8ea1efa1> <8ea1effe> 4637 <8ea1f0a1> <8ea1f0fe> 4731 <8ea1f1a1> <8ea1f1fe> 4825 <8ea1f2a1> <8ea1f2fe> 4919 <8ea1f3a1> <8ea1f3fe> 5013 <8ea1f4a1> <8ea1f4fe> 5107 <8ea1f5a1> <8ea1f5fe> 5201 <8ea1f6a1> <8ea1f6fe> 5295 <8ea1f7a1> <8ea1f7fe> 5389 <8ea1f8a1> <8ea1f8fe> 5483 <8ea1f9a1> <8ea1f9fe> 5577 <8ea1faa1> <8ea1fafe> 5671 <8ea1fba1> <8ea1fbfe> 5765 <8ea1fca1> <8ea1fcfe> 5859 <8ea1fda1> <8ea1fdcb> 5953 <8ea2a1a1> <8ea2a1fe> 5996 <8ea2a2a1> <8ea2a2fe> 6090 <8ea2a3a1> <8ea2a3fe> 6184 <8ea2a4a1> <8ea2a4fe> 6278 <8ea2a5a1> <8ea2a5fe> 6372 <8ea2a6a1> <8ea2a6fe> 6466 <8ea2a7a1> <8ea2a7fe> 6560 <8ea2a8a1> <8ea2a8fe> 6654 <8ea2a9a1> <8ea2a9fe> 6748 <8ea2aaa1> <8ea2aafe> 6842 <8ea2aba1> <8ea2abfe> 6936 <8ea2aca1> <8ea2acfe> 7030 <8ea2ada1> <8ea2adfe> 7124 <8ea2aea1> <8ea2aefe> 7218 <8ea2afa1> <8ea2affe> 7312 <8ea2b0a1> <8ea2b0fe> 7406 <8ea2b1a1> <8ea2b1fe> 7500 <8ea2b2a1> <8ea2b2fe> 7594 <8ea2b3a1> <8ea2b3fe> 7688 <8ea2b4a1> <8ea2b4fe> 7782 <8ea2b5a1> <8ea2b5fe> 7876 <8ea2b6a1> <8ea2b6fe> 7970 <8ea2b7a1> <8ea2b7fe> 8064 <8ea2b8a1> <8ea2b8fe> 8158 <8ea2b9a1> <8ea2b9fe> 8252 <8ea2baa1> <8ea2bafe> 8346 <8ea2bba1> <8ea2bbfe> 8440 <8ea2bca1> <8ea2bcfe> 8534 <8ea2bda1> <8ea2bdfe> 8628 <8ea2bea1> <8ea2befe> 8722 <8ea2bfa1> <8ea2bffe> 8816 <8ea2c0a1> <8ea2c0fe> 8910 <8ea2c1a1> <8ea2c1fe> 9004 <8ea2c2a1> <8ea2c2fe> 9098 <8ea2c3a1> <8ea2c3fe> 9192 <8ea2c4a1> <8ea2c4fe> 9286 <8ea2c5a1> <8ea2c5fe> 9380 <8ea2c6a1> <8ea2c6fe> 9474 <8ea2c7a1> <8ea2c7fe> 9568 <8ea2c8a1> <8ea2c8fe> 9662 <8ea2c9a1> <8ea2c9fe> 9756 <8ea2caa1> <8ea2cafe> 9850 <8ea2cba1> <8ea2cbfe> 9944 endcidrange 100 begincidrange <8ea2cca1> <8ea2ccfe> 10038 <8ea2cda1> <8ea2cdfe> 10132 <8ea2cea1> <8ea2cefe> 10226 <8ea2cfa1> <8ea2cffe> 10320 <8ea2d0a1> <8ea2d0fe> 10414 <8ea2d1a1> <8ea2d1fe> 10508 <8ea2d2a1> <8ea2d2fe> 10602 <8ea2d3a1> <8ea2d3fe> 10696 <8ea2d4a1> <8ea2d4fe> 10790 <8ea2d5a1> <8ea2d5fe> 10884 <8ea2d6a1> <8ea2d6fe> 10978 <8ea2d7a1> <8ea2d7fe> 11072 <8ea2d8a1> <8ea2d8fe> 11166 <8ea2d9a1> <8ea2d9fe> 11260 <8ea2daa1> <8ea2dafe> 11354 <8ea2dba1> <8ea2dbfe> 11448 <8ea2dca1> <8ea2dcfe> 11542 <8ea2dda1> <8ea2ddfe> 11636 <8ea2dea1> <8ea2defe> 11730 <8ea2dfa1> <8ea2dffe> 11824 <8ea2e0a1> <8ea2e0fe> 11918 <8ea2e1a1> <8ea2e1fe> 12012 <8ea2e2a1> <8ea2e2fe> 12106 <8ea2e3a1> <8ea2e3fe> 12200 <8ea2e4a1> <8ea2e4fe> 12294 <8ea2e5a1> <8ea2e5fe> 12388 <8ea2e6a1> <8ea2e6fe> 12482 <8ea2e7a1> <8ea2e7fe> 12576 <8ea2e8a1> <8ea2e8fe> 12670 <8ea2e9a1> <8ea2e9fe> 12764 <8ea2eaa1> <8ea2eafe> 12858 <8ea2eba1> <8ea2ebfe> 12952 <8ea2eca1> <8ea2ecfe> 13046 <8ea2eda1> <8ea2edfe> 13140 <8ea2eea1> <8ea2eefe> 13234 <8ea2efa1> <8ea2effe> 13328 <8ea2f0a1> <8ea2f0fe> 13422 <8ea2f1a1> <8ea2f1fe> 13516 <8ea2f2a1> <8ea2f2c4> 13610 99 193 287 333 427 503 506 595 536 596 539 602 540 603 541 607 5998 608 610 544 611 5999 545 612 546 6000 547 614 633 6005 634 548 636 549 642 6006 646 550 648 652 551 654 554 6007 720 725 556 726 557 730 6026 737 6028 741 6029 746 854 855 862 866 558 endcidrange 95 begincidrange 867 6066 875 1014 6162 1018 1022 1029 6163 6168 1039 6169 1288 6375 1294 560 1307 1312 1686 561 1695 2086 2549 7731 2552 7732 2553 3041 3515 9056 9746 3963 4352 4745 5042 12045 562 595 689 783 877 971 1065 1159 1253 1347 1441 1535 1629 1723 1817 1911 2005 2099 2193 2287 2381 2475 2569 2663 2757 2851 2945 3039 3133 3227 3321 3415 3509 3603 3697 3791 3885 3979 4073 4167 4261 4355 4449 4543 4637 4731 4825 4919 5013 5107 5201 5295 5389 5483 5577 5671 5765 5859 5953 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/CNS-EUC-V b/Resources/cmap/CNS-EUC-V deleted file mode 100644 index ae667da457c..00000000000 --- a/Resources/cmap/CNS-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (CNS-EUC-V) %%Title: (CNS-EUC-V Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /CNS-EUC-V def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25389] def /WMode 1 def 5 begincodespacerange <00> <80> <8EA1A1A1> <8EA1FEFE> <8EA2A1A1> <8EA2FEFE> <8EA3A1A1> <8EA3FEFE> endcodespacerange 1 beginnotdefrange <00> <1f> 13648 endnotdefrange 100 begincidrange <20> <7e> 13648 <8ea1a1a1> <8ea1a1ab> 99 <8ea1a1ac> <8ea1a1ac> 13646 <8ea1a1ad> <8ea1a1ba> 111 <8ea1a1bb> <8ea1a1bb> 124 <8ea1a1bc> <8ea1a1bc> 126 <8ea1a1bd> <8ea1a1bd> 126 <8ea1a1be> <8ea1a1bf> 130 <8ea1a1c0> <8ea1a1c1> 130 <8ea1a1c2> <8ea1a1c3> 134 <8ea1a1c4> <8ea1a1c5> 134 <8ea1a1c6> <8ea1a1c7> 138 <8ea1a1c8> <8ea1a1c9> 138 <8ea1a1ca> <8ea1a1cb> 142 <8ea1a1cc> <8ea1a1cd> 142 <8ea1a1ce> <8ea1a1cf> 146 <8ea1a1d0> <8ea1a1d1> 146 <8ea1a1d2> <8ea1a1d3> 150 <8ea1a1d4> <8ea1a1d5> 150 <8ea1a1d6> <8ea1a1d7> 154 <8ea1a1d8> <8ea1a1d9> 154 <8ea1a1da> <8ea1a1db> 158 <8ea1a1dc> <8ea1a1fe> 158 <8ea1a2a1> <8ea1a2c3> 193 <8ea1a2c4> <8ea1a2c4> 13647 <8ea1a2c5> <8ea1a2fe> 229 <8ea1a3a1> <8ea1a3ce> 287 <8ea1a4a1> <8ea1a4fe> 333 <8ea1a5a1> <8ea1a5ec> 427 <8ea1a5ee> <8ea1a5f0> 503 <8ea1a6a1> <8ea1a6be> 506 <8ea1a7a1> <8ea1a7a1> 595 <8ea1a7a2> <8ea1a7a4> 536 <8ea1a7a5> <8ea1a7a5> 596 <8ea1a7a6> <8ea1a7a6> 539 <8ea1a7a7> <8ea1a7a7> 602 <8ea1a7a8> <8ea1a7a8> 540 <8ea1a7a9> <8ea1a7ac> 603 <8ea1a7ad> <8ea1a7af> 541 <8ea1a7b0> <8ea1a7b0> 607 <8ea1a7b1> <8ea1a7b1> 5998 <8ea1a7b2> <8ea1a7b2> 608 <8ea1a7b3> <8ea1a7b3> 610 <8ea1a7b4> <8ea1a7b4> 544 <8ea1a7b5> <8ea1a7b5> 611 <8ea1a7b6> <8ea1a7b6> 5999 <8ea1a7b7> <8ea1a7b7> 545 <8ea1a7b8> <8ea1a7b9> 612 <8ea1a7ba> <8ea1a7ba> 546 <8ea1a7bb> <8ea1a7bb> 6000 <8ea1a7bc> <8ea1a7bc> 547 <8ea1a7bd> <8ea1a7bd> 614 <8ea1a7be> <8ea1a7be> 633 <8ea1a7bf> <8ea1a7bf> 6005 <8ea1a7c0> <8ea1a7c1> 634 <8ea1a7c2> <8ea1a7c2> 548 <8ea1a7c3> <8ea1a7c6> 636 <8ea1a7c7> <8ea1a7c7> 549 <8ea1a7c8> <8ea1a7cb> 642 <8ea1a7cc> <8ea1a7cc> 6006 <8ea1a7cd> <8ea1a7cd> 646 <8ea1a7ce> <8ea1a7ce> 550 <8ea1a7cf> <8ea1a7d0> 648 <8ea1a7d1> <8ea1a7d2> 652 <8ea1a7d3> <8ea1a7d5> 551 <8ea1a7d6> <8ea1a7d8> 654 <8ea1a7d9> <8ea1a7da> 554 <8ea1a7db> <8ea1a7db> 6007 <8ea1a7dc> <8ea1a7df> 720 <8ea1a7e0> <8ea1a7e0> 725 <8ea1a7e1> <8ea1a7e1> 556 <8ea1a7e2> <8ea1a7e5> 726 <8ea1a7e6> <8ea1a7e6> 557 <8ea1a7e7> <8ea1a7ed> 730 <8ea1a7ee> <8ea1a7ee> 6026 <8ea1a7ef> <8ea1a7f2> 737 <8ea1a7f3> <8ea1a7f3> 6028 <8ea1a7f4> <8ea1a7f8> 741 <8ea1a7f9> <8ea1a7f9> 6029 <8ea1a7fa> <8ea1a7fd> 746 <8ea1a7fe> <8ea1a7fe> 854 <8ea1a8a1> <8ea1a8a6> 855 <8ea1a8a7> <8ea1a8a7> 862 <8ea1a8a8> <8ea1a8a8> 866 <8ea1a8a9> <8ea1a8aa> 558 <8ea1a8ab> <8ea1a8b2> 867 <8ea1a8b3> <8ea1a8b3> 6066 <8ea1a8b4> <8ea1a8b6> 875 <8ea1a8b7> <8ea1a8ba> 1014 <8ea1a8bb> <8ea1a8bb> 6162 <8ea1a8bc> <8ea1a8be> 1018 <8ea1a8bf> <8ea1a8c3> 1022 <8ea1a8c4> <8ea1a8cc> 1029 <8ea1a8cd> <8ea1a8cd> 6163 <8ea1a8ce> <8ea1a8ce> 6168 <8ea1a8cf> <8ea1a8d2> 1039 <8ea1a8d3> <8ea1a8d3> 6169 <8ea1a8d4> <8ea1a8d9> 1288 <8ea1a8da> <8ea1a8da> 6375 <8ea1a8db> <8ea1a8e2> 1294 endcidrange 100 begincidrange <8ea1a8e3> <8ea1a8e3> 560 <8ea1a8e4> <8ea1a8e4> 1307 <8ea1a8e5> <8ea1a8e7> 1312 <8ea1a8e8> <8ea1a8eb> 1686 <8ea1a8ec> <8ea1a8ec> 561 <8ea1a8ed> <8ea1a8f0> 1695 <8ea1a8f1> <8ea1a8fb> 2086 <8ea1a8fc> <8ea1a8fe> 2549 <8ea1a9a1> <8ea1a9a1> 7731 <8ea1a9a2> <8ea1a9a2> 2552 <8ea1a9a3> <8ea1a9a3> 7732 <8ea1a9a4> <8ea1a9a5> 2553 <8ea1a9a6> <8ea1a9ab> 3041 <8ea1a9ac> <8ea1a9ae> 3515 <8ea1a9af> <8ea1a9af> 9056 <8ea1a9b0> <8ea1a9b0> 9746 <8ea1a9b1> <8ea1a9b3> 3963 <8ea1a9b4> <8ea1a9b5> 4352 <8ea1a9b6> <8ea1a9b6> 4745 <8ea1a9b7> <8ea1a9b8> 5042 <8ea1a9b9> <8ea1a9b9> 12045 <8ea1c2a1> <8ea1c2c1> 562 <8ea1c4a1> <8ea1c4fe> 595 <8ea1c5a1> <8ea1c5fe> 689 <8ea1c6a1> <8ea1c6fe> 783 <8ea1c7a1> <8ea1c7fe> 877 <8ea1c8a1> <8ea1c8fe> 971 <8ea1c9a1> <8ea1c9fe> 1065 <8ea1caa1> <8ea1cafe> 1159 <8ea1cba1> <8ea1cbfe> 1253 <8ea1cca1> <8ea1ccfe> 1347 <8ea1cda1> <8ea1cdfe> 1441 <8ea1cea1> <8ea1cefe> 1535 <8ea1cfa1> <8ea1cffe> 1629 <8ea1d0a1> <8ea1d0fe> 1723 <8ea1d1a1> <8ea1d1fe> 1817 <8ea1d2a1> <8ea1d2fe> 1911 <8ea1d3a1> <8ea1d3fe> 2005 <8ea1d4a1> <8ea1d4fe> 2099 <8ea1d5a1> <8ea1d5fe> 2193 <8ea1d6a1> <8ea1d6fe> 2287 <8ea1d7a1> <8ea1d7fe> 2381 <8ea1d8a1> <8ea1d8fe> 2475 <8ea1d9a1> <8ea1d9fe> 2569 <8ea1daa1> <8ea1dafe> 2663 <8ea1dba1> <8ea1dbfe> 2757 <8ea1dca1> <8ea1dcfe> 2851 <8ea1dda1> <8ea1ddfe> 2945 <8ea1dea1> <8ea1defe> 3039 <8ea1dfa1> <8ea1dffe> 3133 <8ea1e0a1> <8ea1e0fe> 3227 <8ea1e1a1> <8ea1e1fe> 3321 <8ea1e2a1> <8ea1e2fe> 3415 <8ea1e3a1> <8ea1e3fe> 3509 <8ea1e4a1> <8ea1e4fe> 3603 <8ea1e5a1> <8ea1e5fe> 3697 <8ea1e6a1> <8ea1e6fe> 3791 <8ea1e7a1> <8ea1e7fe> 3885 <8ea1e8a1> <8ea1e8fe> 3979 <8ea1e9a1> <8ea1e9fe> 4073 <8ea1eaa1> <8ea1eafe> 4167 <8ea1eba1> <8ea1ebfe> 4261 <8ea1eca1> <8ea1ecfe> 4355 <8ea1eda1> <8ea1edfe> 4449 <8ea1eea1> <8ea1eefe> 4543 <8ea1efa1> <8ea1effe> 4637 <8ea1f0a1> <8ea1f0fe> 4731 <8ea1f1a1> <8ea1f1fe> 4825 <8ea1f2a1> <8ea1f2fe> 4919 <8ea1f3a1> <8ea1f3fe> 5013 <8ea1f4a1> <8ea1f4fe> 5107 <8ea1f5a1> <8ea1f5fe> 5201 <8ea1f6a1> <8ea1f6fe> 5295 <8ea1f7a1> <8ea1f7fe> 5389 <8ea1f8a1> <8ea1f8fe> 5483 <8ea1f9a1> <8ea1f9fe> 5577 <8ea1faa1> <8ea1fafe> 5671 <8ea1fba1> <8ea1fbfe> 5765 <8ea1fca1> <8ea1fcfe> 5859 <8ea1fda1> <8ea1fdcb> 5953 <8ea2a1a1> <8ea2a1fe> 5996 <8ea2a2a1> <8ea2a2fe> 6090 <8ea2a3a1> <8ea2a3fe> 6184 <8ea2a4a1> <8ea2a4fe> 6278 <8ea2a5a1> <8ea2a5fe> 6372 <8ea2a6a1> <8ea2a6fe> 6466 <8ea2a7a1> <8ea2a7fe> 6560 <8ea2a8a1> <8ea2a8fe> 6654 <8ea2a9a1> <8ea2a9fe> 6748 <8ea2aaa1> <8ea2aafe> 6842 <8ea2aba1> <8ea2abfe> 6936 <8ea2aca1> <8ea2acfe> 7030 <8ea2ada1> <8ea2adfe> 7124 <8ea2aea1> <8ea2aefe> 7218 <8ea2afa1> <8ea2affe> 7312 <8ea2b0a1> <8ea2b0fe> 7406 <8ea2b1a1> <8ea2b1fe> 7500 <8ea2b2a1> <8ea2b2fe> 7594 <8ea2b3a1> <8ea2b3fe> 7688 <8ea2b4a1> <8ea2b4fe> 7782 endcidrange 100 begincidrange <8ea2b5a1> <8ea2b5fe> 7876 <8ea2b6a1> <8ea2b6fe> 7970 <8ea2b7a1> <8ea2b7fe> 8064 <8ea2b8a1> <8ea2b8fe> 8158 <8ea2b9a1> <8ea2b9fe> 8252 <8ea2baa1> <8ea2bafe> 8346 <8ea2bba1> <8ea2bbfe> 8440 <8ea2bca1> <8ea2bcfe> 8534 <8ea2bda1> <8ea2bdfe> 8628 <8ea2bea1> <8ea2befe> 8722 <8ea2bfa1> <8ea2bffe> 8816 <8ea2c0a1> <8ea2c0fe> 8910 <8ea2c1a1> <8ea2c1fe> 9004 <8ea2c2a1> <8ea2c2fe> 9098 <8ea2c3a1> <8ea2c3fe> 9192 <8ea2c4a1> <8ea2c4fe> 9286 <8ea2c5a1> <8ea2c5fe> 9380 <8ea2c6a1> <8ea2c6fe> 9474 <8ea2c7a1> <8ea2c7fe> 9568 <8ea2c8a1> <8ea2c8fe> 9662 <8ea2c9a1> <8ea2c9fe> 9756 <8ea2caa1> <8ea2cafe> 9850 <8ea2cba1> <8ea2cbfe> 9944 <8ea2cca1> <8ea2ccfe> 10038 <8ea2cda1> <8ea2cdfe> 10132 <8ea2cea1> <8ea2cefe> 10226 <8ea2cfa1> <8ea2cffe> 10320 <8ea2d0a1> <8ea2d0fe> 10414 <8ea2d1a1> <8ea2d1fe> 10508 <8ea2d2a1> <8ea2d2fe> 10602 <8ea2d3a1> <8ea2d3fe> 10696 <8ea2d4a1> <8ea2d4fe> 10790 <8ea2d5a1> <8ea2d5fe> 10884 <8ea2d6a1> <8ea2d6fe> 10978 <8ea2d7a1> <8ea2d7fe> 11072 <8ea2d8a1> <8ea2d8fe> 11166 <8ea2d9a1> <8ea2d9fe> 11260 <8ea2daa1> <8ea2dafe> 11354 <8ea2dba1> <8ea2dbfe> 11448 <8ea2dca1> <8ea2dcfe> 11542 <8ea2dda1> <8ea2ddfe> 11636 <8ea2dea1> <8ea2defe> 11730 <8ea2dfa1> <8ea2dffe> 11824 <8ea2e0a1> <8ea2e0fe> 11918 <8ea2e1a1> <8ea2e1fe> 12012 <8ea2e2a1> <8ea2e2fe> 12106 <8ea2e3a1> <8ea2e3fe> 12200 <8ea2e4a1> <8ea2e4fe> 12294 <8ea2e5a1> <8ea2e5fe> 12388 <8ea2e6a1> <8ea2e6fe> 12482 <8ea2e7a1> <8ea2e7fe> 12576 <8ea2e8a1> <8ea2e8fe> 12670 <8ea2e9a1> <8ea2e9fe> 12764 <8ea2eaa1> <8ea2eafe> 12858 <8ea2eba1> <8ea2ebfe> 12952 <8ea2eca1> <8ea2ecfe> 13046 <8ea2eda1> <8ea2edfe> 13140 <8ea2eea1> <8ea2eefe> 13234 <8ea2efa1> <8ea2effe> 13328 <8ea2f0a1> <8ea2f0fe> 13422 <8ea2f1a1> <8ea2f1fe> 13516 <8ea2f2a1> <8ea2f2c4> 13610 99 13646 111 124 126 126 130 130 134 134 138 138 142 142 146 146 150 150 154 154 158 158 193 13647 229 287 333 427 503 506 595 536 596 539 602 540 603 541 endcidrange 100 begincidrange 607 5998 608 610 544 611 5999 545 612 546 6000 547 614 633 6005 634 548 636 549 642 6006 646 550 648 652 551 654 554 6007 720 725 556 726 557 730 6026 737 6028 741 6029 746 854 855 862 866 558 867 6066 875 1014 6162 1018 1022 1029 6163 6168 1039 6169 1288 6375 1294 560 1307 1312 1686 561 1695 2086 2549 7731 2552 7732 2553 3041 3515 9056 9746 3963 4352 4745 5042 12045 562 595 689 783 877 971 1065 1159 1253 1347 1441 1535 1629 1723 1817 1911 2005 2099 endcidrange 41 begincidrange 2193 2287 2381 2475 2569 2663 2757 2851 2945 3039 3133 3227 3321 3415 3509 3603 3697 3791 3885 3979 4073 4167 4261 4355 4449 4543 4637 4731 4825 4919 5013 5107 5201 5295 5389 5483 5577 5671 5765 5859 5953 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/ETHK-B5-H b/Resources/cmap/ETHK-B5-H deleted file mode 100644 index 23c33d3dc3e..00000000000 --- a/Resources/cmap/ETHK-B5-H +++ /dev/null @@ -1,1222 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (ETHK-B5-H) -%%Title: (ETHK-B5-H Adobe CNS1 3) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 3 def -end def - -/CMapName /ETHK-B5-H def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25582] def - -/WMode 0 def - -2 begincodespacerange - <00> <80> - <8840> -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 -<8840> <8855> 17609 -<8856> <887e> 18785 -<88a1> <88a8> 18826 -<88a9> <88aa> 18844 -<8940> <8941> 17716 -<8943> <8943> 17718 -<8946> <8949> 17719 -<894c> <894c> 17723 -<894d> <894d> 17347 -<894e> <8950> 17724 -<8951> <8951> 17306 -<8952> <897e> 17727 -<89a1> <89a5> 17772 -<89a6> <89a6> 17314 -<89ab> <89ab> 17388 -<89ac> <89ac> 17777 -<89ad> <89ad> 17387 -<89ae> <89ae> 17778 -<89b0> <89b2> 17779 -<89b5> <89bf> 17782 -<89c1> <89c3> 17793 -<89c5> <89ce> 17796 -<89cf> <89cf> 17340 -<89d0> <89d8> 17806 -<89d9> <89d9> 17308 -<89da> <89da> 17815 -<89db> <89db> 17310 -<89dc> <89dc> 17816 -<89dd> <89dd> 17311 -<89de> <89e0> 17817 -<89e1> <89e1> 17313 -<89e2> <89e2> 17820 -<89e3> <89e3> 17315 -<89e4> <89e9> 17821 -<89ea> <89eb> 17317 -<89ec> <89f9> 17827 -<89fa> <89fa> 17321 -<89fb> <89fe> 17841 -<8a40> <8a40> 17845 -<8a41> <8a41> 17161 -<8a43> <8a4c> 17163 -<8a4d> <8a4d> 17846 -<8a4e> <8a59> 17174 -<8a5a> <8a5a> 17847 -<8a5b> <8a5d> 17187 -<8a5e> <8a5e> 17848 -<8a5f> <8a62> 17191 -<8a64> <8a70> 17196 -<8a71> <8a71> 17849 -<8a72> <8a74> 17210 -<8a76> <8a76> 17214 -<8a77> <8a77> 17850 -<8a78> <8a79> 17216 -<8a7a> <8a7a> 17851 -<8a7b> <8a7b> 17219 -<8a7c> <8a7c> 17852 -<8a7d> <8a7d> 17221 -<8a7e> <8a7e> 17853 -<8aa1> <8aa7> 17223 -<8aa8> <8aa8> 17854 -<8aa9> <8aaa> 17231 -<8aac> <8ab0> 17234 -<8ab2> <8ab5> 17240 -<8ab6> <8ab6> 17855 -<8ab7> <8ab7> 17245 -<8ab8> <8ab8> 17856 -<8ab9> <8ab9> 17247 -<8abb> <8ac7> 17249 -<8ac9> <8acb> 17263 -<8acc> <8acc> 17857 -<8ace> <8ad5> 17268 -<8ad6> <8ad7> 17858 -<8ad8> <8adc> 17278 -<8adf> <8ae5> 17285 -<8ae6> <8ae6> 17860 -<8ae7> <8ae7> 17371 -<8ae8> <8af4> 17861 -<8af6> <8afe> 17874 -<8b40> <8b40> 17883 -<8b41> <8b42> 17292 -<8b43> <8b44> 17884 -<8b45> <8b45> 17294 -<8b46> <8b46> 17886 -<8b47> <8b47> 17295 -<8b48> <8b48> 17887 -<8b49> <8b49> 17296 -<8b4a> <8b4a> 17888 -<8b4b> <8b4b> 17297 -<8b4c> <8b4c> 17889 -<8b4d> <8b50> 17298 -<8b51> <8b53> 17890 -<8b55> <8b57> 17893 -<8b58> <8b58> 17303 -<8b59> <8b59> 17896 -<8b5a> <8b5a> 17304 -<8b5b> <8b5b> 17348 -<8b5c> <8b60> 17897 -<8b61> <8b61> 17319 -<8b62> <8b67> 17902 -endcidrange - -100 begincidrange -<8b68> <8b68> 17324 -<8b69> <8b7e> 17908 -<8ba1> <8bbf> 17930 -<8bc0> <8bdc> 17631 -<8bde> <8bfd> 17660 -<8d60> <8d61> 17961 -<8d62> <8d62> 17338 -<8d63> <8d67> 17963 -<8d68> <8d68> 17339 -<8d69> <8d69> 17312 -<8d6a> <8d6a> 17341 -<8d6b> <8d6d> 17968 -<8d6e> <8d6e> 17342 -<8d6f> <8d75> 17971 -<8d76> <8d76> 17343 -<8d77> <8d79> 17978 -<8d7a> <8d7a> 17344 -<8d7b> <8d7b> 17981 -<8d7c> <8d7c> 17345 -<8d7d> <8d7e> 17982 -<8da1> <8da4> 17984 -<8da5> <8da5> 17346 -<8da6> <8da7> 17988 -<8da8> <8da8> 17337 -<8da9> <8da9> 17325 -<8daa> <8db5> 17990 -<8db6> <8db6> 17351 -<8db7> <8dc2> 18002 -<8dc3> <8dc3> 17352 -<8dc4> <8df9> 18014 -<8dfa> <8dfa> 17401 -<8dfb> <8dfe> 18068 -<8e40> <8e44> 14123 -<8e45> <8e45> 18072 -<8e46> <8e68> 14128 -<8e6a> <8e6a> 14164 -<8e6b> <8e6c> 18073 -<8e6d> <8e6e> 14166 -<8e70> <8e75> 14169 -<8e76> <8e76> 18075 -<8e77> <8e7a> 14175 -<8e7b> <8e7b> 18076 -<8e7c> <8e7d> 14180 -<8ea1> <8ea5> 14182 -<8ea6> <8ea6> 18077 -<8ea7> <8eaa> 14187 -<8eac> <8eb3> 14192 -<8eb5> <8eb7> 14201 -<8eb8> <8eb8> 18078 -<8eb9> <8ec8> 14205 -<8ec9> <8ec9> 18079 -<8eca> <8ecc> 14221 -<8ece> <8ecf> 14225 -<8ed1> <8ee4> 14228 -<8ee5> <8ee5> 18080 -<8ee6> <8eee> 14248 -<8eef> <8eef> 18081 -<8ef0> <8ef5> 14257 -<8ef6> <8ef6> 18082 -<8ef7> <8efe> 14264 -<8f40> <8f56> 14272 -<8f58> <8f58> 14296 -<8f59> <8f59> 18083 -<8f5a> <8f5e> 14297 -<8f5f> <8f5f> 18084 -<8f60> <8f66> 14302 -<8f67> <8f67> 18085 -<8f68> <8f68> 14309 -<8f6a> <8f6d> 14311 -<8f6f> <8f78> 14316 -<8f79> <8f79> 18086 -<8f7a> <8f7e> 14327 -<8fa1> <8faf> 14332 -<8fb0> <8fb0> 18087 -<8fb1> <8fc4> 14348 -<8fc5> <8fc5> 18088 -<8fc6> <8fc6> 14368 -<8fc7> <8fc7> 18089 -<8fc8> <8fc9> 14369 -<8fca> <8fca> 18090 -<8fcd> <8fd9> 14374 -<8fda> <8fda> 18091 -<8fdb> <8fe2> 14387 -<8fe3> <8fe3> 18092 -<8fe4> <8ffb> 14396 -<8ffc> <8ffc> 18093 -<8ffd> <8ffd> 14420 -<9040> <9054> 14422 -<9055> <9055> 18094 -<9056> <905b> 14444 -<905c> <905e> 18095 -<905f> <906c> 14451 -<906e> <906e> 14466 -<906f> <906f> 18098 -<9070> <9079> 14467 -<907b> <907e> 14477 -<90a1> <90a5> 14481 -<90a6> <90a6> 18099 -<90a7> <90b7> 14486 -<90b8> <90b8> 18100 -endcidrange - -100 begincidrange -<90b9> <90db> 14503 -<90dd> <90f0> 14539 -<90f2> <90fe> 14560 -<9140> <9164> 14573 -<9165> <9165> 18101 -<9166> <916d> 14610 -<916e> <916e> 18102 -<916f> <917d> 14618 -<917e> <917e> 18103 -<91a1> <91a1> 14633 -<91a2> <91a2> 18104 -<91a3> <91be> 14634 -<91c0> <91c7> 14663 -<91c8> <91c8> 18105 -<91c9> <91fe> 14672 -<9240> <9243> 14726 -<9245> <9263> 14731 -<9264> <9264> 18106 -<9265> <926c> 14763 -<926d> <926d> 18107 -<926e> <927e> 14772 -<92a1> <92ae> 14789 -<92b3> <92c7> 14803 -<92c9> <92d0> 14825 -<92d2> <92e4> 14834 -<92e5> <92e5> 18108 -<92e6> <92f1> 14853 -<92f2> <92f2> 18109 -<92f3> <92fe> 14865 -<9340> <9367> 14877 -<9368> <9368> 18110 -<9369> <937e> 14917 -<93a1> <93a9> 14939 -<93aa> <93aa> 18111 -<93ab> <93c1> 14948 -<93c2> <93c2> 18112 -<93c3> <93e4> 14971 -<93e5> <93e5> 18113 -<93e6> <93e7> 15005 -<93e8> <93e8> 18114 -<93e9> <93ea> 15008 -<93eb> <93eb> 18115 -<93ec> <93fe> 15010 -<9440> <9445> 15029 -<9446> <9446> 18116 -<9448> <9478> 15036 -<9479> <9479> 18117 -<947a> <947e> 15086 -<94a1> <94c9> 15091 -<94cb> <94cb> 18118 -<94cc> <94fe> 15134 -<9540> <954c> 15185 -<954d> <954d> 18119 -<954e> <9559> 15198 -<955a> <955a> 18120 -<955b> <955e> 15210 -<955f> <955f> 18121 -<9560> <957e> 15215 -<95a1> <95c5> 15246 -<95c6> <95c6> 18122 -<95c7> <95d8> 15283 -<95da> <95fe> 15302 -<9640> <9643> 15339 -<9645> <9650> 15344 -<9651> <9651> 18123 -<9652> <9669> 15357 -<966a> <966a> 18124 -<966b> <967e> 15382 -<96a1> <96d3> 15402 -<96d4> <96d4> 18125 -<96d5> <96ec> 15453 -<96ee> <96fb> 15478 -<96fd> <96fe> 15493 -<9740> <977e> 15495 -<97a1> <97fe> 15558 -<9840> <9843> 15652 -<9844> <9845> 18126 -<9846> <986e> 15658 -<986f> <986f> 18128 -<9870> <9874> 15700 -<9875> <9876> 18129 -<9877> <9877> 15705 -<9878> <9879> 18131 -<987a> <987a> 15706 -<987b> <987e> 18133 -<98a1> <98a2> 18137 -<98a3> <98a3> 15707 -<98a4> <98ae> 18139 -<98af> <98af> 15708 -<98b0> <98b3> 18150 -<98b4> <98b4> 17354 -<98b5> <98b5> 18154 -<98b6> <98b6> 15709 -<98b7> <98b7> 18155 -<98b8> <98b8> 17356 -<98b9> <98b9> 15710 -<98ba> <98ba> 18156 -<98bb> <98bb> 17402 -<98bc> <98bc> 18157 -<98bd> <98be> 15711 -endcidrange - -100 begincidrange -<98bf> <98c1> 18158 -<98c2> <98c2> 15713 -<98c3> <98c3> 18161 -<98c4> <98c4> 15714 -<98c5> <98c5> 18162 -<98c6> <98c7> 15715 -<98c8> <98d1> 18163 -<98d2> <98d2> 17357 -<98d3> <98d7> 18173 -<98d8> <98d9> 17358 -<98da> <98da> 18178 -<98db> <98db> 17361 -<98dc> <98de> 18179 -<98df> <98df> 17364 -<98e0> <98e2> 18182 -<98e3> <98e3> 15717 -<98e4> <98e6> 18185 -<98e7> <98e7> 15718 -<98e8> <98ec> 18188 -<98ed> <98ed> 15719 -<98ee> <98ef> 18193 -<98f0> <98f0> 15720 -<98f1> <98f1> 18195 -<98f2> <98f2> 15721 -<98f3> <98f3> 18196 -<98f4> <98f5> 17365 -<98f6> <98fb> 18197 -<98fc> <98fc> 15722 -<98fd> <98fd> 18203 -<98fe> <98fe> 17367 -<9940> <9941> 18204 -<9942> <9942> 17404 -<9943> <9943> 15723 -<9944> <9944> 18206 -<9945> <9945> 15724 -<9946> <9946> 18207 -<9947> <9947> 17368 -<9948> <994e> 18208 -<994f> <994f> 15725 -<9950> <9953> 18215 -<9954> <9954> 17369 -<9955> <995b> 18219 -<995c> <995c> 17370 -<995d> <9963> 18226 -<9964> <9964> 17372 -<9965> <9969> 18233 -<996a> <996a> 15726 -<996b> <996d> 18238 -<996e> <996e> 15727 -<996f> <9974> 18241 -<9975> <9975> 15728 -<9976> <9977> 18247 -<9978> <9978> 15729 -<9979> <997e> 18249 -<99a1> <99a1> 18255 -<99a2> <99a2> 15730 -<99a3> <99a3> 18256 -<99a4> <99a4> 17349 -<99a5> <99a5> 18257 -<99a6> <99a6> 17350 -<99a7> <99ad> 18258 -<99ae> <99ae> 15731 -<99af> <99b1> 18265 -<99b2> <99b2> 17374 -<99b3> <99b5> 18268 -<99b6> <99b6> 15732 -<99b7> <99b9> 18271 -<99ba> <99ba> 15733 -<99bb> <99c9> 18274 -<99ca> <99ca> 17376 -<99cb> <99cc> 18289 -<99cd> <99cd> 17378 -<99ce> <99d2> 18291 -<99d3> <99d3> 17379 -<99d4> <99d5> 18296 -<99d6> <99d6> 17381 -<99d7> <99de> 18298 -<99df> <99df> 17375 -<99e0> <99e1> 18306 -<99e2> <99e2> 15734 -<99e3> <99e3> 18308 -<99e4> <99e4> 17323 -<99e5> <99e5> 18309 -<99e6> <99e6> 17383 -<99e7> <99e7> 18310 -<99e8> <99e8> 17385 -<99e9> <99ee> 18311 -<99ef> <99ef> 17405 -<99f0> <99f3> 18317 -<99f4> <99f4> 15735 -<99f5> <99fe> 18321 -<9a40> <9a49> 18331 -<9a4a> <9a4a> 15736 -<9a4b> <9a4b> 18341 -<9a4c> <9a4c> 15737 -<9a4d> <9a58> 18342 -<9a59> <9a59> 15738 -<9a5a> <9a5e> 18354 -<9a5f> <9a5f> 17327 -<9a60> <9a60> 18359 -endcidrange - -100 begincidrange -<9a61> <9a61> 15739 -<9a62> <9a65> 18360 -<9a66> <9a66> 17389 -<9a67> <9a67> 18364 -<9a68> <9a68> 15740 -<9a69> <9a69> 17390 -<9a6a> <9a6a> 18365 -<9a6b> <9a6b> 17407 -<9a6c> <9a72> 18366 -<9a73> <9a73> 15741 -<9a74> <9a74> 18373 -<9a75> <9a75> 17393 -<9a76> <9a7d> 18374 -<9a7e> <9a7e> 15742 -<9aa1> <9aa2> 18382 -<9aa3> <9aa3> 17395 -<9aa4> <9aa4> 18384 -<9aa5> <9aa5> 17394 -<9aa6> <9aa8> 18385 -<9aa9> <9aa9> 17400 -<9aaa> <9aaa> 17396 -<9aab> <9ab1> 18388 -<9ab2> <9ab2> 15743 -<9ab3> <9ab6> 18395 -<9ab7> <9ab7> 15744 -<9ab8> <9ab8> 18399 -<9ab9> <9ab9> 15745 -<9aba> <9aba> 18400 -<9abb> <9abb> 15746 -<9abc> <9abc> 18401 -<9abd> <9abd> 17335 -<9abe> <9ac6> 18402 -<9ac7> <9ac7> 15747 -<9ac8> <9acf> 18411 -<9ad0> <9ad0> 15748 -<9ad1> <9ad1> 18419 -<9ad2> <9ad2> 15749 -<9ad3> <9ad8> 18420 -<9ad9> <9adb> 15750 -<9adc> <9ae1> 18426 -<9ae2> <9ae2> 15753 -<9ae3> <9ae3> 18432 -<9ae4> <9ae4> 15754 -<9ae5> <9ae7> 18433 -<9ae8> <9ae8> 15755 -<9ae9> <9ae9> 17328 -<9aea> <9aed> 18436 -<9aee> <9aee> 17330 -<9aef> <9af1> 18440 -<9af2> <9af2> 15756 -<9af3> <9af5> 18443 -<9af6> <9af6> 15757 -<9af7> <9afa> 18446 -<9afb> <9afb> 15758 -<9afc> <9afe> 18450 -<9b40> <9b45> 18453 -<9b46> <9b46> 15759 -<9b47> <9b49> 18459 -<9b4a> <9b4a> 15760 -<9b4b> <9b53> 18462 -<9b54> <9b54> 15762 -<9b55> <9b57> 18471 -<9b58> <9b58> 15763 -<9b59> <9b59> 18474 -<9b5a> <9b5a> 15764 -<9b5b> <9b5b> 18475 -<9b5c> <9b5c> 15765 -<9b5d> <9b5d> 18476 -<9b5e> <9b5f> 15766 -<9b60> <9b60> 18477 -<9b62> <9b6f> 18478 -<9b70> <9b73> 15768 -<9b74> <9b75> 18492 -<9b77> <9b77> 15773 -<9b79> <9b7a> 18494 -<9b7c> <9b7c> 15776 -<9b7d> <9b7d> 18496 -<9b7e> <9b7e> 15777 -<9ba1> <9ba1> 15778 -<9ba2> <9ba2> 18497 -<9ba3> <9ba4> 15779 -<9ba5> <9ba6> 18498 -<9ba7> <9baa> 15781 -<9bab> <9bab> 18500 -<9bac> <9bac> 15785 -<9bad> <9bae> 18501 -<9baf> <9baf> 15786 -<9bb0> <9bb1> 18503 -<9bb2> <9bb9> 15787 -<9bba> <9bbd> 18505 -<9bbe> <9bbe> 15795 -<9bbf> <9bbf> 18509 -<9bc0> <9bc5> 15796 -<9bc7> <9bc9> 18510 -<9bca> <9bca> 15803 -<9bcb> <9bcb> 18513 -<9bcc> <9bcc> 15804 -<9bcd> <9bcd> 18514 -<9bce> <9bce> 17360 -<9bcf> <9bcf> 18515 -endcidrange - -100 begincidrange -<9bd0> <9bd1> 15805 -<9bd2> <9bd2> 18516 -<9bd3> <9bd3> 15807 -<9bd4> <9bd4> 18517 -<9bd5> <9bd5> 15808 -<9bd6> <9bd7> 18518 -<9bd8> <9bda> 15809 -<9bdb> <9bdc> 18520 -<9bdd> <9bdd> 15812 -<9bdf> <9bdf> 15813 -<9be0> <9be0> 18522 -<9be1> <9be1> 15814 -<9be2> <9be2> 18523 -<9be3> <9be3> 15815 -<9be4> <9be6> 18524 -<9be7> <9be7> 15816 -<9be8> <9be8> 18527 -<9be9> <9beb> 15817 -<9bed> <9bed> 18528 -<9bee> <9bef> 15821 -<9bf0> <9bf2> 18529 -<9bf3> <9bf3> 15823 -<9bf4> <9bf5> 18532 -<9bf7> <9bf7> 18534 -<9bf8> <9bf9> 15825 -<9bfa> <9bfa> 18535 -<9bfb> <9bfc> 15827 -<9bfd> <9bfe> 18536 -<9c40> <9c41> 15829 -<9c43> <9c43> 18538 -<9c44> <9c46> 15832 -<9c47> <9c47> 18539 -<9c48> <9c48> 15835 -<9c49> <9c49> 18540 -<9c4a> <9c4a> 15836 -<9c4b> <9c4c> 18541 -<9c4d> <9c52> 15837 -<9c54> <9c54> 18543 -<9c55> <9c55> 15844 -<9c56> <9c56> 18544 -<9c57> <9c5b> 15845 -<9c5c> <9c5c> 18545 -<9c5d> <9c5d> 15850 -<9c5e> <9c5f> 18546 -<9c60> <9c60> 15851 -<9c61> <9c61> 18548 -<9c63> <9c63> 18549 -<9c64> <9c66> 15853 -<9c67> <9c67> 18550 -<9c69> <9c69> 18551 -<9c6a> <9c6a> 15857 -<9c6c> <9c6c> 18552 -<9c6d> <9c6d> 15858 -<9c6e> <9c6e> 18553 -<9c6f> <9c72> 15859 -<9c73> <9c74> 18554 -<9c75> <9c76> 15863 -<9c78> <9c78> 18556 -<9c79> <9c79> 15866 -<9c7a> <9c7a> 18557 -<9c7b> <9c7c> 15867 -<9c7d> <9c7d> 18558 -<9c7e> <9c7e> 15869 -<9ca1> <9ca2> 15870 -<9ca3> <9ca4> 18559 -<9ca5> <9ca5> 15872 -<9ca6> <9ca7> 18561 -<9ca8> <9ca9> 15873 -<9caa> <9caa> 18563 -<9cab> <9cab> 15875 -<9cac> <9cac> 18564 -<9cad> <9cae> 15876 -<9caf> <9cb0> 18565 -<9cb1> <9cba> 15878 -<9cbb> <9cbb> 18567 -<9cbe> <9cc2> 15890 -<9cc3> <9cc5> 18568 -<9cc6> <9ccd> 15895 -<9cce> <9cce> 18571 -<9ccf> <9ccf> 15903 -<9cd1> <9cd3> 15905 -<9cd4> <9cd7> 18572 -<9cd8> <9cda> 15908 -<9cdb> <9cdb> 18576 -<9cdc> <9ce5> 15911 -<9ce6> <9ce6> 18577 -<9ce7> <9ce9> 15921 -<9cea> <9cea> 18578 -<9ceb> <9cec> 15924 -<9ced> <9ced> 18579 -<9cee> <9cf9> 15926 -<9cfa> <9cfc> 18580 -<9cfd> <9cfd> 15938 -<9cfe> <9cfe> 18583 -<9d40> <9d40> 17384 -<9d41> <9d45> 18584 -<9d46> <9d46> 15939 -<9d47> <9d48> 18589 -<9d49> <9d49> 15940 -<9d4a> <9d4b> 18591 -endcidrange - -100 begincidrange -<9d4c> <9d4d> 15942 -<9d4e> <9d4e> 18593 -<9d4f> <9d4f> 15944 -<9d50> <9d50> 18594 -<9d51> <9d51> 15945 -<9d52> <9d54> 18595 -<9d55> <9d55> 15946 -<9d56> <9d56> 18598 -<9d58> <9d59> 18599 -<9d5b> <9d60> 18601 -<9d61> <9d61> 17353 -<9d62> <9d62> 15948 -<9d63> <9d63> 18607 -<9d64> <9d64> 15949 -<9d65> <9d77> 18608 -<9d78> <9d78> 17397 -<9d79> <9d79> 15950 -<9d7a> <9d7d> 18627 -<9d7e> <9d7e> 15951 -<9da1> <9da4> 18631 -<9da5> <9da8> 15952 -<9da9> <9da9> 18635 -<9daa> <9daa> 15956 -<9dab> <9dab> 18636 -<9dac> <9dad> 15957 -<9dae> <9daf> 18637 -<9db0> <9db0> 15960 -<9db1> <9db2> 18639 -<9db3> <9db3> 15961 -<9db4> <9db4> 18641 -<9db5> <9db5> 15962 -<9db6> <9db6> 18642 -<9db7> <9db7> 15963 -<9db8> <9dbb> 18643 -<9dbc> <9dbd> 15964 -<9dbe> <9dbe> 18647 -<9dbf> <9dc0> 15966 -<9dc1> <9dc2> 18648 -<9dc3> <9dc3> 15968 -<9dc5> <9dc6> 18650 -<9dc7> <9dc8> 15970 -<9dc9> <9dc9> 18652 -<9dca> <9dca> 15972 -<9dcb> <9dcc> 18653 -<9dcd> <9dd1> 15973 -<9dd2> <9dd2> 18655 -<9dd3> <9dd5> 15978 -<9dd6> <9dd9> 18656 -<9dda> <9dfb> 15981 -<9dfc> <9dfc> 18660 -<9dfd> <9dfe> 16015 -<9e40> <9e42> 16017 -<9e43> <9e43> 18661 -<9e44> <9e5e> 16021 -<9e5f> <9e5f> 18662 -<9e60> <9e62> 16049 -<9e63> <9e63> 18663 -<9e64> <9e65> 16052 -<9e66> <9e67> 18664 -<9e68> <9e68> 16054 -<9e69> <9e69> 18666 -<9e6a> <9e6a> 16055 -<9e6b> <9e70> 18667 -<9e71> <9e71> 16056 -<9e72> <9e72> 18673 -<9e73> <9e73> 16057 -<9e74> <9e76> 18674 -<9e77> <9e78> 16058 -<9e79> <9e79> 18677 -<9e7a> <9e7a> 16060 -<9e7b> <9e7b> 18678 -<9e7c> <9e7c> 16061 -<9e7d> <9e7d> 18679 -<9e7e> <9e7e> 16062 -<9ea1> <9ea2> 16063 -<9ea3> <9ea3> 18680 -<9ea4> <9ea6> 16065 -<9ea7> <9ea8> 18681 -<9eaa> <9eaa> 16069 -<9eab> <9eab> 18683 -<9ead> <9ead> 16071 -<9eae> <9eae> 18684 -<9eaf> <9eb1> 16072 -<9eb2> <9eb3> 18685 -<9eb4> <9eb4> 16075 -<9eb5> <9eb5> 18687 -<9eb6> <9eb7> 16076 -<9eb8> <9eb8> 18688 -<9eb9> <9eb9> 16078 -<9eba> <9ebb> 18689 -<9ebc> <9ebc> 16079 -<9ebd> <9ebe> 18691 -<9ebf> <9ec0> 16080 -<9ec1> <9ec3> 18693 -<9ec5> <9ec5> 16083 -<9ec6> <9ec6> 18696 -<9ec7> <9eca> 16084 -<9ecb> <9ecc> 18697 -<9ecd> <9ecd> 16089 -<9ece> <9ecf> 18699 -endcidrange - -100 begincidrange -<9ed0> <9ed1> 16090 -<9ed2> <9ed2> 18701 -<9ed3> <9ed3> 16092 -<9ed4> <9ed5> 18702 -<9ed6> <9ed7> 16093 -<9ed8> <9ed9> 18704 -<9eda> <9eee> 16095 -<9ef0> <9ef1> 16117 -<9ef2> <9ef2> 18706 -<9ef3> <9ef3> 16119 -<9ef5> <9ef5> 16121 -<9ef6> <9ef8> 18707 -<9ef9> <9efa> 16122 -<9efb> <9efb> 18710 -<9efc> <9efc> 16124 -<9efe> <9efe> 16126 -<9f40> <9f42> 16127 -<9f43> <9f43> 18711 -<9f44> <9f47> 16130 -<9f48> <9f48> 18712 -<9f49> <9f4a> 16134 -<9f4b> <9f4c> 18713 -<9f4d> <9f4d> 16136 -<9f4f> <9f5f> 16138 -<9f61> <9f65> 16156 -<9f67> <9f68> 18715 -<9f69> <9f6f> 16163 -<9f70> <9f70> 18717 -<9f71> <9f7e> 16170 -<9fa1> <9fac> 16184 -<9fae> <9fb0> 16197 -<9fb2> <9fb4> 16201 -<9fb5> <9fb5> 18718 -<9fb6> <9fba> 16204 -<9fbb> <9fbb> 18719 -<9fbc> <9fbe> 16209 -<9fbf> <9fbf> 18720 -<9fc1> <9fc1> 18721 -<9fc2> <9fc7> 16213 -<9fc9> <9fca> 16220 -<9fcc> <9fcc> 18722 -<9fcd> <9fd3> 16224 -<9fd4> <9fd4> 18723 -<9fd5> <9fd7> 16232 -<9fd9> <9fd9> 16236 -<9fdb> <9fe3> 16238 -<9fe4> <9fe4> 18724 -<9fe5> <9fe5> 16247 -<9fe7> <9fe9> 16249 -<9feb> <9fee> 16253 -<9ff0> <9ff8> 16258 -<9ff9> <9ff9> 18725 -<9ffa> <9ffe> 16267 - 18726 - 16272 - 18727 - 16278 - 18728 - 16291 - 16293 - 16296 - 16305 - 18729 - 16314 - 16319 - 16324 - 18730 - 16327 - 16330 - 18731 - 16331 - 16334 - 18732 - 16335 - 16341 - 16343 - 18733 - 16364 - 18734 - 16374 - 16377 - 16379 - 16389 - 16391 - 18735 - 16393 - 18736 - 17332 - 18743 - 17336 - 18746 - 99 - 13743 - 128 - 162 - 248 - 247 - 249 - 256 - 319 -endcidrange - -100 begincidrange - 413 - 476 - 503 - 595 - 658 - 752 - 815 - 909 - 972 - 1066 - 1129 - 1223 - 1286 - 1380 - 1443 - 1537 - 1600 - 1694 - 1757 - 1851 - 1914 - 2431 - 2007 - 2070 - 2164 - 2227 - 2321 - 2384 - 2432 - 2479 - 2542 - 2636 - 2699 - 2793 - 2856 - 2950 - 3013 - 3107 - 3170 - 3264 - 3327 - 3421 - 3484 - 3578 - 3641 - 3735 - 3798 - 3892 - 3955 - 4049 - 4112 - 4206 - 4269 - 4309 - 4364 - 4427 - 4521 - 4584 - 4678 - 4308 - 4696 - 4740 - 4834 - 4897 - 4991 - 5054 - 5148 - 5211 - 5222 - 5306 - 5369 - 5221 - 5411 - 5462 - 5496 - 5526 - 5551 - 5550 - 5552 - 5620 - 5495 - 5642 - 5682 - 5776 - 5839 - 5933 - 506 - 537 - 13747 - 6036 - 13754 - 13785 - 13848 - 13942 - 14005 - 17606 - 17692 - 732 - 17701 - 1289 -endcidrange - -100 begincidrange - 17709 - 2550 - 18834 - 5996 - 628 - 6006 - 6040 - 6059 - 6039 - 6088 - 6135 - 6153 - 6216 - 6134 - 6302 - 6309 - 6372 - 6466 - 6529 - 6623 - 6686 - 6780 - 6843 - 6937 - 7000 - 7094 - 7157 - 7251 - 7314 - 7408 - 7471 - 7565 - 7628 - 7722 - 7785 - 7879 - 7942 - 8036 - 8099 - 8788 - 8143 - 8193 - 8889 - 8251 - 8255 - 8349 - 8412 - 8506 - 8569 - 8663 - 8726 - 8142 - 8789 - 8820 - 8883 - 8890 - 8978 - 9041 - 9135 - 9198 - 9089 - 9289 - 9291 - 9354 - 9448 - 9511 - 9605 - 9668 - 9762 - 9825 - 9919 - 9982 - 10076 - 10139 - 10233 - 10296 - 10390 - 10453 - 10547 - 10610 - 10704 - 10767 - 10861 - 10924 - 10927 - 11019 - 11074 - 11083 - 11177 - 11240 - 11334 - 11362 - 11398 - 10926 - 11478 - 11491 - 11554 - 11073 - 11615 - 11647 -endcidrange - -100 begincidrange - 11710 - 11720 - 11805 - 11868 - 12308 - 11942 - 11961 - 12024 - 12118 - 11719 - 12140 - 12180 - 11361 - 12222 - 12273 - 12309 - 12640 - 12317 - 12336 - 12430 - 12783 - 12470 - 12492 - 12527 - 12587 - 12641 - 12651 - 12745 - 12784 - 12809 - 12526 - 12829 - 12901 - 12903 - 12966 - 13060 - 12900 - 13095 - 13122 - 13216 - 13279 - 13373 - 13436 - 13530 - 13586 - 13594 - 13585 - 13629 - 13641 - 13630 - 13642 - 14056 - 16395 - 16427 - 16434 - 16458 - 18758 - 16468 - 16487 - 16495 - 16511 - 16552 - 16561 - 18760 - 16572 - 18761 - 16599 - 16615 - 18762 - 16618 - 16639 - 18763 - 16645 - 18764 - 16658 - 16696 - 16702 - 16707 - 18765 - 16717 - 16721 - 18766 - 16723 - 18767 - 16739 - 18768 - 16749 - 18769 - 16756 - 16765 - 16789 - 18770 - 16792 - 18772 - 16807 - 18773 - 16829 - 18774 - 16839 - 16842 -endcidrange - -25 begincidrange - 16855 - 18775 - 16864 - 18776 - 16897 - 16917 - 16941 - 16944 - 18777 - 16984 - 18778 - 16998 - 17010 - 17029 - 18779 - 17055 - 17057 - 18780 - 17065 - 17071 - 17080 - 18781 - 17131 - 18783 - 17144 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/ETHK-B5-V b/Resources/cmap/ETHK-B5-V deleted file mode 100644 index 3920674fc19..00000000000 --- a/Resources/cmap/ETHK-B5-V +++ /dev/null @@ -1,72 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (ETHK-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (ETHK-B5-H) -%%BeginResource: CMap (ETHK-B5-V) -%%Title: (ETHK-B5-V Adobe CNS1 0) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/ETHK-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /ETHK-B5-V def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25583] def - -/WMode 1 def - -13 begincidrange - 13646 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 13647 - 14097 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/ETen-B5-H b/Resources/cmap/ETen-B5-H deleted file mode 100644 index f6f8bcc0bd5..00000000000 --- a/Resources/cmap/ETen-B5-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (ETen-B5-H) %%Title: (ETen-B5-H Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /ETen-B5-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 200 def /XUID [1 10 25390] def /WMode 0 def 2 begincodespacerange <00> <80> endcodespacerange 1 beginnotdefrange <00> <1f> 13648 endnotdefrange 100 begincidrange <20> <7e> 13648 99 13743 128 162 248 247 249 256 319 413 476 503 595 658 752 815 909 972 1066 1129 1223 1286 1380 1443 1537 1600 1694 1757 1851 1914 2431 2007 2070 2164 2227 2321 2384 2432 2479 2542 2636 2699 2793 2856 2950 3013 3107 3170 3264 3327 3421 3484 3578 3641 3735 3798 3892 3955 4049 4112 4206 4269 4309 4364 4427 4521 4584 4678 4308 4696 4740 4834 4897 4991 5054 5148 5211 5222 5306 5369 5221 5411 5462 5496 5526 5551 5550 5552 5620 5495 5642 5682 5776 5839 5933 506 537 13747 6036 endcidrange 100 begincidrange 13754 13785 13848 13942 14005 5996 628 6006 6040 6059 6039 6088 6135 6153 6216 6134 6302 6309 6372 6466 6529 6623 6686 6780 6843 6937 7000 7094 7157 7251 7314 7408 7471 7565 7628 7722 7785 7879 7942 8036 8099 8788 8143 8193 8889 8251 8255 8349 8412 8506 8569 8663 8726 8142 8789 8820 8883 8890 8978 9041 9135 9198 9089 9289 9291 9354 9448 9511 9605 9668 9762 9825 9919 9982 10076 10139 10233 10296 10390 10453 10547 10610 10704 10767 10861 10924 10927 11019 11074 11083 11177 11240 11334 11362 11398 10926 11478 11491 11554 11073 endcidrange 54 begincidrange 11615 11647 11710 11720 11805 11868 12308 11942 11961 12024 12118 11719 12140 12180 11361 12222 12273 12309 12640 12317 12336 12430 12783 12470 12492 12527 12587 12641 12651 12745 12784 12809 12526 12829 12901 12903 12966 13060 12900 13095 13122 13216 13279 13373 13436 13530 13586 13594 13585 13629 13641 13630 13642 14056 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/ETen-B5-UCS2 b/Resources/cmap/ETen-B5-UCS2 deleted file mode 100644 index 03dbc249ee3..00000000000 --- a/Resources/cmap/ETen-B5-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (ETen-B5-UCS2) %%Title: (ETen-B5-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (ETen_B5_UCS2) def /Supplement 0 def end def /CMapName /ETen-B5-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 3 begincodespacerange <00> <80> endcodespacerange 100 beginbfrange <00> <80> <0000> <8140> <817E> <81A1> <81FE> <8240> <827E> <82A1> <82FE> <8340> <837E> <83A1> <83FE> <8440> <847E> <84A1> <84FE> <8540> <857E> <85A1> <85FE> <8640> <867E> <86A1> <86FE> <8740> <877E> <87A1> <87FE> <8840> <887E> <88A1> <88FE> <8940> <897E> <89A1> <89FE> <8A40> <8A7E> <8AA1> <8AFE> <8B40> <8B7E> <8BA1> <8BFE> <8C40> <8C7E> <8CA1> <8CFE> <8D40> <8D7E> <8DA1> <8DFE> <8E40> <8E7E> <8EA1> <8EFE> <8F40> <8F7E> <8FA1> <8FFE> <9040> <907E> <90A1> <90FE> <9140> <917E> <91A1> <91FE> <9240> <927E> <92A1> <92FE> <9340> <937E> <93A1> <93FE> <9440> <947E> <94A1> <94FE> <9540> <957E> <95A1> <95FE> <9640> <967E> <96A1> <96FE> <9740> <977E> <97A1> <97FE> <9840> <987E> <98A1> <98FE> <9940> <997E> <99A1> <99FE> <9A40> <9A7E> <9AA1> <9AFE> <9B40> <9B7E> <9BA1> <9BFE> <9C40> <9C7E> <9CA1> <9CFE> <9D40> <9D7E> <9DA1> <9DFE> <9E40> <9E7E> <9EA1> <9EFE> <9F40> <9F7E> <9FA1> <9FFE> <3000> <3001> <2027> <2026> <2025> <00B7> <2013> <2014> <2574> <3014> <3010> <300A> endbfrange 100 beginbfrange <3008> <300C> <300E> <2018> <201C> <301D> <2035> <2032> <203B> <00A7> <3003> <25CB> <25CF> <25B3> <25B2> <25CE> <2606> <2605> <25C7> <25C6> <25A1> <25A0> <25BD> <25BC> <32A3> <2105> <00AF> <02CD> <00D7> <00F7> <00B1> <221A> <2266> <2260> <221E> <2252> <2261> <223C> <2229> <22A5> <2220> <221F> <22BF> <33D2> <33D1> <222B> <222E> <2235> <2234> <2640> <2642> <2295> <2299> <2191> <2193> <2190> <2192> <2196> <2199> <2198> <2225> <2223> <2215> <3012> <2103> <2109> <33D5> <339C> <33CE> <33A1> <338E> endbfrange 100 beginbfrange <33C4> <00B0> <5159> <515B> <515E> <515D> <5161> <5163> <55E7> <74E9> <7CCE> <2581> <258F> <258E> <258D> <258C> <258B> <258A> <2589> <253C> <2534> <252C> <2524> <251C> <2594> <2500> <2502> <2595> <250C> <2510> <2514> <2518> <256D> <256E> <2570> <256F> <2550> <255E> <256A> <2561> <25E2> <25E5> <25E4> <2571> <2160> <3021> <5341> <5344> <0391> <03A3> <03B1> <03C3> <3105> <3110> <02D9> <02C9> <02C7> <02CB> <4E00> <4E59> <4E01> <4E03> <4E43> <4E5D> <4E86> <4E8C> <4EBA> <513F> <5165> <516B> <51E0> <5200> <529B> <5315> <5341> <535C> <53C8> <4E09> <4E0B> <4E08> <4E0A> <4E2B> <4E38> <51E1> <4E45> <4E48> <4E5F> <4E5E> <4E8E> <4EA1> <5140> <5203> <52FA> <5343> <53C9> <53E3> endbfrange 100 beginbfrange <571F> <58EB> <5915> <5927> <5973> <5B50> <5B53> <5BF8> <5C0F> <5C22> <5C38> <5C71> <5DDD> <5DE5> <5DF1> <5DFE> <5E72> <5EFE> <5F0B> <5F13> <624D> <4E11> <4E10> <4E0D> <4E2D> <4E30> <4E39> <4E4B> <5C39> <4E88> <4E91> <4E95> <4E92> <4E94> <4EA2> <4EC1> <4EC0> <4EC3> <4EC6> <4ECD> <4ECA> <4EC4> <5143> <5141> <5167> <516D> <516C> <5197> <51F6> <5206> <52FB> <52FE> <5316> <5339> <5348> <5347> <5345> <535E> <5384> <53CB> <53CA> <53CD> <58EC> <5929> <592B> <592A> <592D> <5B54> <5C11> <5C24> <5C3A> <5C6F> <5DF4> <5E7B> <5EFF> <5F14> <5FC3> <6208> <6236> <624B> <624E> <652F> <6587> <6597> <65A4> <65B9> <65E5> <66F0> <6708> <6728> <6B20> <6B62> <6B79> <6BCB> <6BD4> <6BDB> <6C0F> <6C34> <706B> <722A> endbfrange 100 beginbfrange <7236> <723B> <7247> <7259> <725B> <72AC> <738B> <4E19> <4E16> <4E15> <4E14> <4E18> <4E3B> <4E4D> <4E4F> <4E4E> <4EE5> <4ED8> <4ED4> <4EE3> <4ED9> <4EDE> <5145> <5144> <5189> <51AC> <51F9> <51F8> <520A> <52A0> <529F> <5305> <5317> <531D> <4EDF> <534A> <5349> <5361> <5360> <536F> <536E> <53BB> <53EF> <53E4> <53F3> <53EC> <53EE> <53E9> <53E8> <53FC> <53F8> <53F5> <53EB> <53E6> <53EA> <53F2> <53F1> <53F0> <53E5> <53ED> <53FB> <56DB> <56DA> <5916> <592E> <5931> <5974> <5976> <5B55> <5B83> <5C3C> <5DE8> <5DE7> <5DE6> <5E02> <5E73> <5E7C> <5F01> <5F18> <5F17> <5FC5> <620A> <6253> <6252> <6251> <65A5> <65E6> <672E> <672C> <672A> <672D> <6B63> <6BCD> <6C11> <6C10> <6C38> <6C41> <6C40> <6C3E> <72AF> endbfrange 100 beginbfrange <7384> <7389> <74DC> <74E6> <7518> <751F> <7528> <7530> <758B> <767D> <76AE> <76BF> <76EE> <77DB> <77E2> <77F3> <793A> <79BE> <7A74> <7ACB> <4E1E> <4E52> <4E69> <4E99> <4EA4> <4EA6> <4EA5> <4EFF> <4F09> <4F19> <4F0A> <4F15> <4F0D> <4F10> <4F0F> <4EF2> <4EF6> <4EFB> <4EF0> <4EF3> <4EFD> <4F01> <4F0B> <5149> <5147> <5146> <5148> <5168> <5171> <518D> <51B0> <5217> <5211> <520E> <5216> <52A3> <5308> <5321> <5320> <5370> <5409> <540F> <540C> <540A> <5410> <5401> <540B> <5404> <5411> <540D> <5408> <5403> <540E> <5406> <5412> <56E0> <56DE> <56DD> <5733> <5730> <5728> <572D> <572C> <572F> <5729> <5919> <5937> <5984> <5978> <5983> <597D> <5979> <5982> <5981> <5B57> <5B87> <5B85> <5B89> <5BFA> <5C16> endbfrange 100 beginbfrange <5C79> <5DDE> <5E06> <5E76> <5E74> <5F0F> <5F1B> <5FD9> <5FD6> <620E> <620C> <6210> <6263> <625B> <6258> <6536> <65E9> <65E8> <65EC> <66F2> <6709> <673D> <6734> <6731> <6735> <6B21> <6B64> <6B7B> <6C16> <6C5D> <6C57> <6C59> <6C5F> <6C50> <6C55> <6C61> <6C5B> <6C4D> <7070> <725F> <725D> <767E> <7AF9> <7C73> <7CF8> <7F36> <7F8A> <7FBD> <8001> <8003> <800C> <8012> <8033> <807F> <8089> <808B> <81E3> <81EA> <81F3> <81FC> <820C> <821B> <821F> <826E> <8272> <827E> <866B> <8840> <884C> <8863> <897F> <9621> <4E32> <4EA8> <4F4D> <4F4F> <4F47> <4F57> <4F5E> <4F34> <4F5B> <4F55> <4F30> <4F50> <4F3D> <4F3A> <4F38> <4F43> <4F54> <4F3C> <4F46> <4F63> <4F5C> <4F60> <4F2F> <4F4E> <4F36> <4F59> <4F5D> <4F48> endbfrange 100 beginbfrange <4F5A> <514C> <514B> <514D> <5175> <51B6> <5225> <5224> <5229> <5228> <52AB> <52A9> <52AC> <5323> <5373> <5375> <541D> <542D> <541E> <543E> <5426> <544E> <5427> <5446> <5443> <5433> <5448> <5442> <541B> <5429> <544A> <5439> <543B> <5438> <542E> <5435> <5420> <543C> <5440> <5431> <542B> <541F> <542C> <56EA> <56F0> <56E4> <56EB> <574A> <5751> <5740> <574D> <5747> <574E> <573E> <5750> <574F> <573B> <58EF> <593E> <599D> <5992> <59A8> <599E> <59A3> <5999> <5996> <598D> <59A4> <5993> <598A> <59A5> <5B5D> <5B5C> <5B5A> <5B8C> <5B8B> <5B8F> <5C2C> <5C40> <5C3F> <5C3E> <5C90> <5C94> <5C8C> <5DEB> <5E0C> <5E8F> <5E87> <5E8A> <5EF7> <5F04> <5F1F> <5F64> <5F62> <5F77> <5F79> <5FD8> <5FCC> <5FD7> <5FCD> endbfrange 100 beginbfrange <5FF1> <5FEB> <5FF8> <5FEA> <6212> <6211> <6284> <6297> <6296> <6280> <6276> <6289> <626D> <628A> <627C> <627E> <6279> <6273> <6292> <626F> <6298> <626E> <6295> <6293> <6291> <6286> <6539> <653B> <6538> <65F1> <66F4> <675F> <674E> <675C> <6756> <675E> <6749> <6746> <6760> <6753> <6757> <6B65> <6BCF> <6C42> <6C5E> <6C99> <6C81> <6C88> <6C85> <6C9B> <6C6A> <6C7A> <6C90> <6C70> <6C8C> <6C68> <6C96> <6C92> <6C7D> <6C83> <6C72> <6C7E> <6C74> <6C86> <6C76> <6C8D> <6C94> <6C98> <6C82> <7076> <707C> <7078> <7262> <7261> <7260> <72C4> <72C2> <7396> <752C> <752B> <7537> <7682> <76EF> <77E3> <79C1> <79C0> <79BF> <7A76> <7CFB> <7F55> <8096> <8093> <809D> <8098> <809B> <809A> <80B2> <826F> <8292> <828B> endbfrange 100 beginbfrange <828D> <898B> <89D2> <8A00> <8C37> <8C46> <8C55> <8C9D> <8D64> <8D70> <8DB3> <8EAB> <8ECA> <8F9B> <8FB0> <8FC2> <8FC6> <8FC5> <8FC4> <5DE1> <9091> <90A2> <90AA> <90A6> <90A3> <9149> <91C6> <91CC> <9632> <962E> <9631> <962A> <962C> <4E26> <4E56> <4E73> <4E8B> <4E9B> <4E9E> <4EAB> <4F6F> <4F9D> <4F8D> <4F73> <4F7F> <4F6C> <4F9B> <4F8B> <4F86> <4F83> <4F70> <4F75> <4F88> <4F69> <4F7B> <4F96> <4F7E> <4F8F> <4F91> <4F7A> <5154> <5152> <5155> <5169> <5177> <5176> <5178> <51BD> <51FD> <523B> <5238> <5237> <523A> <5230> <522E> <5236> <5241> <52BE> <52BB> <5352> <5354> <5353> <5351> <5366> <5377> <53D6> <53D4> <53D7> <5473> <5475> <5496> <5478> <5495> <5480> <547B> <5477> <5484> <5492> <5486> <547C> endbfrange 100 beginbfrange <5490> <5471> <5476> <548C> <549A> <5462> <5468> <548B> <547D> <548E> <56FA> <5783> <5777> <576A> <5769> <5761> <5766> <5764> <577C> <591C> <5949> <5947> <5944> <5954> <59BE> <59BB> <59D4> <59B9> <59AE> <59D1> <59C6> <59D0> <59CD> <59CB> <59D3> <59CA> <59AF> <59B3> <59D2> <59C5> <5B5F> <5B64> <5B63> <5B97> <5B9A> <5B98> <5B9C> <5B99> <5B9B> <5C1A> <5C48> <5C45> <5C46> <5CB7> <5CA1> <5CB8> <5CA9> <5CAB> <5CB1> <5CB3> <5E18> <5E1A> <5E16> <5E15> <5E1B> <5E11> <5E78> <5E9A> <5E97> <5E9C> <5E95> <5EF6> <5F26> <5F29> <5F80> <5F7F> <5F7C> <5FDD> <5FE0> <5FFD> <5FF5> <5FFF> <600F> <6014> <602F> <6035> <6016> <602A> <6015> <6021> <6027> <6029> <602B> <601B> <6216> <6215> <623F> <623E> <6240> <627F> endbfrange 100 beginbfrange <62C9> <62CC> <62C4> <62BF> <62C2> <62B9> <62D2> <62DB> <62AB> <62D3> <62CB> <62C8> <62A8> <62BD> <62BC> <62D0> <62D9> <62C7> <62CD> <62B5> <62DA> <62B1> <62D8> <62D6> <62C6> <62AC> <62CE> <653E> <65A7> <65BC> <65FA> <6614> <6613> <660C> <6606> <6602> <660E> <6600> <660F> <6615> <660A> <6607> <670D> <670B> <676D> <678B> <6795> <6771> <679C> <6773> <6777> <6787> <679D> <6797> <676F> <677F> <6789> <677E> <6790> <6775> <679A> <6793> <677C> <676A> <6772> <6B23> <6B66> <6B7F> <6C13> <6C1B> <6CE3> <6CE8> <6CF3> <6CB1> <6CCC> <6CE5> <6CB3> <6CBD> <6CBC> <6CE2> <6CAB> <6CD5> <6CD3> <6CB8> <6CC4> <6CB9> <6CC1> <6CAE> <6CD7> <6CC5> <6CF1> <6CBF> <6CBB> <6CE1> <6CDB> <6CCA> <6CAC> <6CEF> <6CDC> <6CD6> endbfrange 100 beginbfrange <6CE0> <7095> <708E> <7092> <708A> <7099> <722C> <7238> <7248> <7267> <7269> <72C0> <72CE> <72D9> <72D7> <72D0> <73A9> <73A8> <739F> <73AB> <73A5> <753D> <759D> <7599> <7684> <76C2> <76F2> <76F4> <77E5> <77FD> <793E> <7940> <79C9> <79C8> <7A7A> <7A79> <7AFA> <7CFE> <7F54> <7F8C> <7F8B> <8005> <80BA> <80A5> <80A2> <80B1> <80A1> <80AB> <80A9> <80B4> <80AA> <80AF> <81E5> <81FE> <820D> <82B3> <829D> <8299> <82AD> <82BD> <829F> <82B9> <82B1> <82AC> <82A5> <82AF> <82B8> <82A3> <82B0> <82BE> <82B7> <864E> <8671> <521D> <8868> <8ECB> <8FCE> <8FD4> <8FD1> <90B5> <90B8> <90B1> <90B6> <91C7> <91D1> <9577> <9580> <961C> <9640> <963F> <963B> <9644> <9642> <96B9> <96E8> <9752> <975E> <4E9F> <4EAD> <4FE1> endbfrange 100 beginbfrange <4FB5> <4FAF> <4FBF> <4FE0> <4FD1> <4FCF> <4FDD> <4FC3> <4FB6> <4FD8> <4FDF> <4FCA> <4FD7> <4FAE> <4FD0> <4FC4> <4FC2> <4FDA> <4FCE> <4FDE> <4FB7> <5157> <5192> <5191> <51A0> <524E> <5243> <524A> <524D> <524C> <524B> <5247> <52C7> <52C9> <52C3> <52C1> <530D> <5357> <537B> <539A> <53DB> <54AC> <54C0> <54A8> <54CE> <54C9> <54B8> <54A6> <54B3> <54C7> <54C2> <54BD> <54AA> <54C1> <54C4> <54C8> <54AF> <54AB> <54B1> <54BB> <54A9> <54A7> <54BF> <56FF> <5782> <578B> <57A0> <57A3> <57A2> <57CE> <57AE> <5793> <5955> <5951> <594F> <594E> <5950> <59DC> <59D8> <59FF> <59E3> <59E8> <5A03> <59E5> <59EA> <59DA> <59E6> <5A01> <59FB> <5B69> <5BA3> <5BA6> <5BA4> <5BA2> <5BA5> <5C01> <5C4E> <5C4D> <5C4B> <5CD9> endbfrange 100 beginbfrange <5CD2> <5DF7> <5E1D> <5E25> <5E1F> <5E7D> <5EA0> <5EA6> <5EFA> <5F08> <5F2D> <5F65> <5F88> <5F85> <5F8A> <5F87> <5F8C> <5F89> <6012> <601D> <6020> <6025> <600E> <6028> <604D> <6070> <6068> <6062> <6046> <6043> <606C> <606B> <606A> <6064> <6241> <62DC> <6316> <6309> <62FC> <62ED> <6301> <62EE> <62FD> <6307> <62F1> <62F7> <62EF> <62EC> <62FE> <62F4> <6311> <6302> <653F> <6545> <65AB> <65BD> <65E2> <6625> <662D> <6620> <6627> <662F> <661F> <6628> <6631> <6624> <66F7> <67FF> <67D3> <67F1> <67D4> <67D0> <67EC> <67B6> <67AF> <67F5> <67E9> <67EF> <67C4> <67D1> <67B4> <67DA> <67E5> <67B8> <67CF> <67DE> <67F3> <67B0> <67D9> <67E2> <67DD> <67D2> <6B6A> <6B83> <6B86> <6BB5> <6BD2> <6BD7> <6C1F> <6CC9> endbfrange 100 beginbfrange <6D0B> <6D32> <6D2A> <6D41> <6D25> <6D0C> <6D31> <6D1E> <6D17> <6D3B> <6D3D> <6D36> <6D1B> <6CF5> <6D39> <6D27> <6D38> <6D29> <6D2E> <6D35> <6D0E> <6D2B> <70AB> <70BA> <70B3> <70AC> <70AF> <70AD> <70B8> <70AE> <70A4> <7230> <7272> <726F> <7274> <72E9> <72E0> <73B7> <73CA> <73BB> <73B2> <73CD> <73C0> <73B3> <751A> <752D> <754F> <754C> <754E> <754B> <75AB> <75A4> <75A2> <7678> <7686> <76C8> <76C6> <76C3> <76C5> <7701> <76F9> <76F8> <7709> <770B> <76FE> <76FC> <7707> <77DC> <7802> <7814> <780C> <7946> <7949> <7948> <7947> <79B9> <79D1> <79CB> <7A7F> <7A81> <7AFF> <7AFD> <7C7D> <7D02> <7D05> <7D00> <7D09> <7D07> <7D04> <7D06> <7F38> <7F8E> <7FBF> <8004> <8010> <800D> <8011> <8036> <80D6> <80E5> endbfrange 100 beginbfrange <80DA> <80C3> <80CC> <80E1> <80DB> <80CE> <80DE> <80E4> <80DD> <81F4> <8222> <82E7> <8303> <8305> <82E3> <82DB> <82E6> <8304> <82E5> <8302> <8309> <82D2> <82D7> <82F1> <8301> <82DC> <82D4> <82D1> <82DE> <82D3> <82DF> <82EF> <8306> <8650> <8679> <867B> <867A> <884D> <886B> <8981> <89D4> <8A08> <8A02> <8C9E> <8CA0> <8D74> <8D73> <8DB4> <8ECD> <8ECC> <8FF0> <8FE6> <8FE2> <8FEA> <8FE5> <8FED> <8FEB> <8FE4> <8FE8> <90CA> <90CE> <90C1> <90C3> <914B> <914A> <91CD> <9582> <9650> <964B> <9762> <9769> <97CB> <97ED> <97F3> <9801> <98A8> <98DB> <98DF> <9996> <9999> <4E58> <4EB3> <500C> <5023> <4FEF> <5026> <5025> <4FF8> <5029> <5016> <5006> <503C> <501F> <501A> <5012> <5011> <4FFA> <5000> <5014> <5028> endbfrange 100 beginbfrange <4FF1> <5021> <500B> <5019> <5018> <4FF3> <4FEE> <502D> <502A> <4FFE> <502B> <5009> <517C> <51A4> <51A2> <51CD> <51CC> <51C6> <51CB> <5256> <525C> <5254> <525B> <525D> <532A> <537F> <539F> <539D> <53DF> <54E8> <5510> <5501> <5537> <54FC> <54E5> <54F2> <5506> <54FA> <5514> <54E9> <54ED> <54E1> <5509> <54EE> <54EA> <54E6> <5527> <5507> <54FD> <550F> <5703> <57C2> <57D4> <57CB> <57C3> <5809> <590F> <5957> <595A> <5A11> <5A18> <5A1C> <5A1F> <5A1B> <5A13> <59EC> <5A20> <5A23> <5A29> <5A25> <5A0C> <5A09> <5B6B> <5C58> <5BB0> <5BB3> <5BB6> <5BB4> <5BAE> <5BB5> <5BB9> <5BB8> <5C04> <5C51> <5C55> <5C50> <5CED> <5CFD> <5CFB> <5CEA> <5CE8> <5CF0> <5CF6> <5D01> <5CF4> <5DEE> <5E2D> <5E2B> <5EAB> <5EAD> endbfrange 100 beginbfrange <5EA7> <5F31> <5F92> <5F91> <5F90> <6059> <6063> <6065> <6050> <6055> <606D> <6069> <606F> <6084> <609F> <609A> <608D> <6094> <608C> <6085> <6096> <6247> <62F3> <6308> <62FF> <634E> <633E> <632F> <6355> <6342> <6346> <634F> <6349> <633A> <6350> <633D> <632A> <6328> <634D> <634C> <6548> <6599> <65C1> <65C5> <6642> <6649> <664F> <6643> <6652> <664C> <6645> <6641> <66F8> <6714> <6717> <6821> <6838> <6848> <6846> <6853> <6839> <6842> <6854> <6829> <68B3> <6817> <684C> <6851> <683D> <67F4> <6850> <6840> <683C> <6843> <682A> <6845> <6813> <6818> <6841> <6B8A> <6B89> <6BB7> <6C23> <6C27> <6C26> <6C24> <6CF0> <6D6A> <6D95> <6D88> <6D87> <6D66> <6D78> <6D77> <6D59> <6D93> <6D6C> <6D89> <6D6E> <6D5A> endbfrange 100 beginbfrange <6D74> <6D69> <6D8C> <6D8A> <6D79> <6D85> <6D65> <6D94> <70CA> <70D8> <70E4> <70D9> <70C8> <70CF> <7239> <7279> <72FC> <72F9> <72FD> <72F8> <72F7> <7386> <73ED> <7409> <73EE> <73E0> <73EA> <73DE> <7554> <755D> <755C> <755A> <7559> <75BE> <75C5> <75C7> <75B2> <75BD> <75BC> <75B9> <75C2> <75B8> <768B> <76B0> <76CA> <76CD> <7729> <771F> <7728> <77E9> <7830> <7827> <7838> <781D> <7834> <7837> <7825> <782D> <7820> <781F> <7832> <7955> <7950> <7960> <795F> <7956> <795E> <795D> <7957> <795A> <79E4> <79E3> <79E7> <79DF> <79E6> <79E9> <79D8> <7A84> <7A88> <7AD9> <7B06> <7B11> <7C89> <7D21> <7D17> <7D0B> <7D0A> <7D20> <7D22> <7D14> <7D10> <7D15> <7D1A> <7D1C> <7D0D> <7D19> <7D1B> <7F3A> <7F5F> <7F94> endbfrange 100 beginbfrange <7FC5> <7FC1> <8006> <8018> <8015> <8019> <8017> <803D> <803F> <80F1> <8102> <80F0> <8105> <80ED> <80F4> <8106> <80F8> <80F3> <8108> <80FD> <810A> <80FC> <80EF> <81ED> <81EC> <8200> <8210> <822A> <8228> <822C> <82BB> <832B> <8352> <8354> <834A> <8338> <8350> <8349> <8335> <8334> <834F> <8332> <8339> <8336> <8317> <8340> <8331> <8328> <8343> <8654> <868A> <86AA> <8693> <86A4> <86A9> <868C> <86A3> <869C> <8870> <8877> <8881> <887D> <8879> <8A18> <8A10> <8A0E> <8A0C> <8A15> <8A0A> <8A17> <8A13> <8A16> <8A0F> <8A11> <8C48> <8C7A> <8C79> <8CA1> <8D77> <8EAC> <8ED2> <8ED4> <8ECF> <8FB1> <9001> <9006> <8FF7> <9000> <8FFA> <8FF4> <9003> <8FFD> <9005> <8FF8> <9095> <90E1> <90DD> <90E2> <9152> <914D> endbfrange 100 beginbfrange <914C> <91D8> <91DD> <91D7> <91DC> <91D9> <9583> <9662> <9661> <965B> <965D> <9664> <9658> <965E> <96BB> <98E2> <99AC> <9AA8> <9AD8> <9B25> <9B32> <9B3C> <4E7E> <507A> <507D> <505C> <5047> <5043> <504C> <505A> <5049> <5065> <5076> <504E> <5055> <5075> <5074> <5077> <504F> <500F> <506F> <506D> <515C> <5195> <51F0> <526A> <526F> <52D2> <52D9> <52D8> <52D5> <5310> <530F> <5319> <533F> <533E> <53C3> <66FC> <5546> <556A> <5566> <5544> <555E> <5561> <5543> <554A> <5531> <5556> <554F> <5555> <552F> <5564> <5538> <552E> <555C> <552C> <5563> <5533> <5541> <5557> <5708> <570B> <5709> <57DF> <5805> <580A> <5806> <57E0> <57E4> <57FA> <5802> <5835> <57F7> <57F9> <5920> <5962> <5A36> <5A41> <5A49> <5A66> endbfrange 100 beginbfrange <5A6A> <5A40> <5A3C> <5A62> <5A5A> <5A46> <5A4A> <5B70> <5BC7> <5BC5> <5BC4> <5BC2> <5BBF> <5BC6> <5C09> <5C08> <5C07> <5C60> <5C5C> <5D07> <5D06> <5D0E> <5D1B> <5D16> <5D22> <5D11> <5D29> <5D14> <5D19> <5D24> <5D27> <5D17> <5DE2> <5E38> <5E36> <5E33> <5E37> <5EB7> <5EB6> <5EB5> <5EBE> <5F35> <5F37> <5F57> <5F6C> <5F69> <5F6B> <5F97> <5F99> <5F9E> <5F98> <5FA1> <5FA0> <5F9C> <607F> <60A3> <6089> <60A0> <60A8> <60CB> <60B4> <60E6> <60BD> <60C5> <60BB> <60B5> <60DC> <60BC> <60D8> <60D5> <60C6> <60DF> <60B8> <60DA> <60C7> <621A> <6248> <63A0> <63A7> <6372> <6396> <63A2> <63A5> <6377> <6367> <6398> <63AA> <6371> <63A9> <6389> <6383> <639B> <636B> <63A8> <6384> <6388> <6399> <63A1> <63AC> <6392> endbfrange 100 beginbfrange <638F> <6380> <637B> <6369> <6368> <637A> <655D> <6556> <6551> <6559> <6557> <555F> <654F> <6558> <6555> <6554> <659C> <659B> <65AC> <65CF> <65CB> <65CE> <665D> <665A> <6664> <6668> <6666> <665E> <66F9> <52D7> <671B> <6881> <68AF> <68A2> <6893> <68B5> <687F> <6876> <68B1> <68A7> <6897> <68B0> <6883> <68C4> <68AD> <6886> <6885> <6894> <689D> <68A8> <689F> <68A1> <6882> <6B32> <6BBA> <6BEB> <6C2B> <6D8E> <6DBC> <6DF3> <6DD9> <6DB2> <6DE1> <6DCC> <6DE4> <6DFB> <6DFA> <6E05> <6DC7> <6DCB> <6DAF> <6DD1> <6DAE> <6DDE> <6DF9> <6DB8> <6DF7> <6DF5> <6DC5> <6DD2> <6E1A> <6DB5> <6DDA> <6DEB> <6DD8> <6DEA> <6DF1> <6DEE> <6DE8> <6DC6> <6DC4> <6DAA> <6DEC> <6DBF> <6DE6> <70F9> <7109> <70FD> <70EF> <723D> endbfrange 100 beginbfrange <727D> <7281> <731C> <731B> <7316> <7313> <7319> <7387> <7405> <740A> <7403> <7406> <73FE> <740D> <74E0> <74F6> <74F7> <751C> <7522> <7565> <7562> <7570> <758F> <75D4> <75B5> <75CA> <75CD> <768E> <76D4> <76D2> <76DB> <7737> <773E> <773C> <7736> <7738> <773A> <786B> <7843> <784E> <7965> <7968> <796D> <79FB> <7A92> <7A95> <7B20> <7B28> <7B1B> <7B2C> <7B26> <7B19> <7B1E> <7B2E> <7C92> <7C97> <7C95> <7D46> <7D43> <7D71> <7D2E> <7D39> <7D3C> <7D40> <7D30> <7D33> <7D44> <7D2F> <7D42> <7D32> <7D31> <7F3D> <7F9E> <7F9A> <7FCC> <7FCE> <7FD2> <801C> <804A> <8046> <812F> <8116> <8123> <812B> <8129> <8130> <8124> <8202> <8235> <8237> <8236> <8239> <838E> <839E> <8398> <8378> <83A2> <8396> <83BD> <83AB> endbfrange 100 beginbfrange <8392> <838A> <8393> <8389> <83A0> <8377> <837B> <8386> <83A7> <8655> <5F6A> <86C7> <86C0> <86B6> <86C4> <86B5> <86C6> <86CB> <86B1> <86AF> <86C9> <8853> <889E> <8888> <88AB> <8892> <8896> <888D> <888B> <8993> <898F> <8A2A> <8A1D> <8A23> <8A25> <8A31> <8A2D> <8A1F> <8A1B> <8A22> <8C49> <8C5A> <8CA9> <8CAC> <8CAB> <8CA8> <8CAA> <8CA7> <8D67> <8D66> <8DBE> <8DBA> <8EDB> <8EDF> <9019> <900D> <901A> <9017> <9023> <901F> <901D> <9010> <9015> <901E> <9020> <900F> <9022> <9016> <901B> <9014> <90E8> <90ED> <90FD> <9157> <91CE> <91F5> <91E6> <91E3> <91E7> <91ED> <91E9> <9589> <966A> <9675> <9673> <9678> <9670> <9674> <9676> <966C> <96C0> <96EA> <96E9> <7AE0> <7ADF> <9802> <9B5A> <9CE5> <9E75> <9E7F> endbfrange 100 beginbfrange <9EA5> <9EBB> <50A2> <508D> <5085> <5099> <5091> <5080> <5096> <5098> <509A> <6700> <51F1> <5272> <5274> <5269> <52DE> <52DD> <52DB> <535A> <53A5> <557B> <5580> <55A7> <557C> <558A> <559D> <5598> <5582> <559C> <55AA> <5594> <5587> <558B> <5583> <55B3> <55AE> <559F> <553E> <55B2> <559A> <55BB> <55AC> <55B1> <557E> <5589> <55AB> <5599> <570D> <582F> <582A> <5834> <5824> <5830> <5821> <581D> <5820> <58F9> <5960> <5A77> <5A9A> <5A7F> <5A92> <5A9B> <5AA7> <5B73> <5B71> <5BD2> <5BCC> <5BD3> <5BD0> <5C0A> <5C31> <5D4C> <5D50> <5D34> <5D47> <5DFD> <5E45> <5E3D> <5E40> <5E43> <5E7E> <5ECA> <5EC1> <5EC4> <5F3C> <5F6D> <5FA9> <5FA8> <60D1> <60E1> <60B2> <60B6> <60E0> <611C> <6123> <60FA> <6115> <60F0> endbfrange 100 beginbfrange <60FB> <60F4> <6168> <60F1> <610E> <60F6> <6109> <6100> <6112> <621F> <6249> <63A3> <638C> <63CF> <63C0> <63E9> <63C9> <63C6> <63CD> <63D2> <63E3> <63D0> <63E1> <63D6> <63ED> <6376> <63F4> <63EA> <63DB> <6452> <63DA> <63F9> <655E> <6566> <6562> <6591> <6590> <65AF> <666E> <6670> <6674> <6676> <666F> <6691> <667A> <667E> <6677> <66FE> <671F> <671D> <68FA> <68D5> <68E0> <68D8> <68D7> <6905> <68DF> <68F5> <68EE> <68E7> <68F9> <68D2> <68F2> <68E3> <68CB> <68CD> <690D> <6912> <690E> <68C9> <68DA> <696E> <68FB> <6B3E> <6B3A> <6B3D> <6B98> <6B96> <6BBC> <6BEF> <6C2E> <6C2C> <6E2F> <6E38> <6E54> <6E21> <6E32> <6E67> <6E4A> <6E20> <6E25> <6E23> <6E1B> <6E5B> <6E58> <6E24> <6E56> <6E6E> <6E2D> <6E26> endbfrange 100 beginbfrange <6E6F> <6E34> <6E4D> <6E3A> <6E2C> <6E43> <6E1D> <6E3E> <6ECB> <6E89> <6E19> <6E4E> <6E63> <6E44> <6E72> <6E69> <6E5F> <7119> <7126> <7130> <7121> <7136> <716E> <711C> <724C> <7284> <7280> <7336> <7325> <7334> <7329> <743A> <742A> <7433> <7422> <7425> <7435> <7434> <742F> <741B> <7426> <7428> <7525> <756B> <756A> <75E2> <75DB> <75E3> <75D9> <75D8> <75DE> <75E0> <767B> <7696> <7693> <76B4> <76DC> <774F> <77ED> <785D> <786C> <786F> <7A0D> <7A08> <7A0B> <7A05> <7A00> <7A98> <7A97> <7A96> <7AE5> <7AE3> <7B49> <7B56> <7B46> <7B50> <7B52> <7B54> <7B4D> <7B4B> <7B4F> <7B51> <7C9F> <7CA5> <7D5E> <7D50> <7D68> <7D55> <7D2B> <7D6E> <7D72> <7D61> <7D66> <7D62> <7D70> <7D73> <5584> <7FD4> <800B> <8052> endbfrange 100 beginbfrange <8085> <8155> <8154> <814B> <8151> <814E> <8139> <8146> <813E> <814C> <8153> <8174> <8212> <821C> <83E9> <8403> <83F8> <840D> <83E0> <83C5> <840B> <83C1> <83EF> <83F1> <83F4> <8457> <840A> <83F0> <840C> <83CC> <83FD> <83F2> <83CA> <8438> <840E> <8404> <83DC> <8407> <83D4> <83DF> <865B> <86DF> <86D9> <86ED> <86D4> <86DB> <86E4> <86D0> <86DE> <8857> <88C1> <88B1> <8983> <8996> <8A3B> <8A60> <8A55> <8A5E> <8A3C> <8A41> <8A54> <8A5B> <8A50> <8A46> <8A34> <8A3A> <8A36> <8A56> <8C61> <8C82> <8CAF> <8CBC> <8CB3> <8CBD> <8CC1> <8CBB> <8CC0> <8CB4> <8CB7> <8CB6> <8CBF> <8CB8> <8D8A> <8D85> <8D81> <8DCE> <8DDD> <8DCB> <8DDA> <8DD1> <8DCC> <8DDB> <8DC6> <8EFB> <8EF8> <8EFC> <8F9C> <902E> <9035> <9031> endbfrange 100 beginbfrange <9038> <9032> <9036> <9102> <90F5> <9109> <90FE> <9163> <9165> <91CF> <9214> <9223> <9209> <921E> <920D> <9210> <9207> <9211> <9594> <958F> <958B> <9591> <9593> <9592> <958E> <968A> <968E> <968B> <967D> <9685> <968D> <9672> <9684> <96C1> <96C5> <96C4> <96C6> <96EF> <96F2> <97CC> <9805> <9808> <98E7> <98EA> <98EF> <98E9> <98F2> <98ED> <99AE> <99AD> <9EC3> <9ECD> <9ED1> <4E82> <50AD> <50B5> <50B2> <50C5> <50BE> <50AC> <50B7> <50BB> <50AF> <50C7> <527F> <5277> <527D> <52DF> <52E6> <52E4> <52E2> <532F> <55DF> <55E8> <55D3> <55E6> <55CE> <55DC> <55C7> <55D1> <55E3> <55EF> <55DA> <55E1> <55C5> <55E5> <55C9> <5712> <585E> <5851> <5858> <5857> <585A> <5854> <586B> <584C> <586D> <584A> <5862> <5852> endbfrange 100 beginbfrange <584B> <5967> <5AC1> <5AC9> <5ACC> <5ABE> <5ABD> <5ABC> <5AB3> <5AC2> <5AB2> <5D69> <5D6F> <5E4C> <5E79> <5EC9> <5EC8> <5F12> <5F59> <5FAC> <5FAE> <611A> <610F> <6148> <611F> <60F3> <611B> <60F9> <6101> <6108> <614E> <614C> <6144> <614D> <613E> <6134> <6127> <610D> <6106> <6137> <6221> <6413> <643E> <641E> <642A> <642D> <643D> <642C> <640F> <641C> <6414> <640D> <6436> <6416> <6406> <656C> <659F> <65B0> <6697> <6689> <6687> <6696> <6684> <6698> <668D> <6703> <6994> <696D> <695A> <6977> <6960> <6954> <6975> <6930> <6982> <694A> <6968> <696B> <695E> <6953> <6979> <6986> <695D> <6963> <695B> <6B47> <6B72> <6BC0> <6BBF> <6BD3> <6BFD> <6EA2> <6EAF> <6ED3> <6EB6> <6EC2> <6E90> <6E9D> <6EC7> <6EC5> endbfrange 100 beginbfrange <6EA5> <6E98> <6EBC> <6EBA> <6EAB> <6ED1> <6E96> <6E9C> <6EC4> <6ED4> <6EAA> <6EA7> <6EB4> <714E> <7159> <7169> <7164> <7149> <7167> <715C> <716C> <7166> <714C> <7165> <715E> <7146> <7168> <7156> <723A> <7252> <7337> <7345> <733F> <733E> <746F> <745A> <7455> <745F> <745E> <7441> <743F> <7459> <745B> <7576> <7578> <7600> <75F0> <7601> <75F2> <75F1> <75FA> <75FF> <75F4> <75F3> <76DE> <775B> <776B> <7766> <775E> <7763> <7779> <776A> <776C> <775C> <7765> <7768> <7762> <77EE> <788E> <78B0> <7897> <788C> <7889> <787C> <7891> <7893> <787F> <797A> <797F> <7981> <842C> <79BD> <7A1C> <7A1A> <7A20> <7A14> <7A1F> <7A1E> <7A9F> <7B77> <7BC0> <7B60> <7B6E> <7B67> <7CB1> <7CB3> <7CB5> <7D93> <7D79> <7D91> endbfrange 100 beginbfrange <7D81> <7D8F> <7D5B> <7F6E> <7F69> <7F72> <7FA9> <7FA8> <7FA4> <8056> <8058> <8086> <8084> <8171> <8170> <8178> <8165> <816E> <8173> <816B> <8179> <8166> <8205> <8247> <8482> <8477> <843D> <8431> <8475> <8466> <846B> <8449> <846C> <845B> <843C> <8435> <8461> <8463> <8469> <846D> <8446> <865E> <865C> <865F> <86F9> <8713> <8708> <8707> <8700> <86FE> <86FB> <8702> <8706> <870A> <8859> <88DF> <88D4> <88D9> <88DC> <88D8> <88DD> <88E1> <88CA> <88D5> <88D2> <899C> <89E3> <8A6B> <8A72> <8A66> <8A69> <8A70> <8A87> <8A7C> <8A63> <8AA0> <8A71> <8A85> <8A6D> <8A62> <8A6E> <8A6C> <8A79> <8A7B> <8A3E> <8A68> <8C62> <8C8A> <8C89> <8CCA> <8CC7> <8CC4> <8CB2> <8CC3> <8CC2> <8CC5> <8DE1> <8DDF> <8DE8> <8DEF> endbfrange 100 beginbfrange <8DF3> <8DFA> <8DEA> <8DE4> <8DE6> <8EB2> <8F03> <8F09> <8EFE> <8F0A> <8F9F> <8FB2> <904B> <904A> <9053> <9042> <9054> <903C> <9055> <9050> <9047> <904F> <904E> <904D> <9051> <903E> <9041> <9112> <9117> <916C> <916A> <9169> <91C9> <9237> <9257> <9238> <923D> <9240> <923E> <925B> <924B> <9264> <9251> <9234> <9249> <924D> <9245> <9239> <923F> <925A> <9598> <9698> <9694> <96CD> <96CB> <96C9> <96F7> <96FB> <96F9> <96F6> <9756> <9774> <9776> <9810> <9813> <980A> <9812> <980C> <98FC> <98F4> <98FD> <99B3> <99B1> <99B4> <9AE1> <9CE9> <9E82> <9F0E> <9F13> <9F20> <50E7> <50EE> <50E5> <50D6> <50ED> <50DA> <50D5> <50CF> <50D1> <50F1> <50CE> <50E9> <5162> <51F3> <5283> <5282> <5331> <53AD> <55FE> <5600> endbfrange 100 beginbfrange <561B> <5617> <55FD> <5614> <5606> <5609> <560D> <55F7> <5616> <561F> <5608> <5610> <55F6> <5718> <5716> <5875> <587E> <5883> <5893> <588A> <5879> <5885> <587D> <58FD> <5925> <5922> <5924> <596A> <5969> <5AE1> <5AE6> <5AE9> <5AD7> <5AD6> <5AD8> <5AE3> <5B75> <5BDE> <5BE7> <5BE1> <5BE5> <5BE8> <5BE2> <5BE4> <5BDF> <5C0D> <5C62> <5D84> <5D87> <5E5B> <5E63> <5E55> <5E57> <5E54> <5ED3> <5ED6> <5F0A> <5F46> <5F70> <5FB9> <6147> <613F> <614B> <6177> <6162> <615F> <615A> <6158> <6175> <622A> <6487> <6458> <6454> <64A4> <6478> <645F> <647A> <6451> <6467> <6434> <646D> <647B> <6572> <65A1> <65D7> <65D6> <66A2> <66A8> <669D> <699C> <69A8> <6995> <69C1> <69AE> <69D3> <69CB> <699B> <69B7> <69BB> <69AB> endbfrange 100 beginbfrange <69B4> <69D0> <69CD> <69AD> <69CC> <69A6> <69C3> <69A3> <6B49> <6B4C> <6C33> <6F33> <6F14> <6EFE> <6F13> <6EF4> <6F29> <6F3E> <6F20> <6F2C> <6F0F> <6F02> <6F22> <6EFF> <6EEF> <6F06> <6F31> <6F38> <6F32> <6F23> <6F15> <6F2B> <6F2F> <6F88> <6F2A> <6EEC> <6F01> <6EF2> <6ECC> <6EF7> <7194> <7199> <717D> <718A> <7184> <7192> <723E> <7292> <7296> <7344> <7350> <7464> <7463> <746A> <7470> <746D> <7504> <7591> <7627> <760D> <760B> <7609> <7613> <76E1> <76E3> <7784> <777D> <777F> <7761> <78C1> <789F> <78A7> <78B3> <78A9> <78A3> <798E> <798D> <7A2E> <7A31> <7AAA> <7AA9> <7AED> <7AEF> <7BA1> <7B95> <7B8B> <7B75> <7B97> <7B9D> <7B94> <7B8F> <7BB8> <7B87> <7B84> <7CB9> <7CBD> <7DBB> <7DB0> <7D9C> <7DBD> endbfrange 100 beginbfrange <7DA0> <7DCA> <7DB4> <7DB2> <7DB1> <7DBA> <7DA2> <7DBF> <7DB5> <7DB8> <7DAD> <7DD2> <7DC7> <7DAC> <7F70> <7FE0> <7FDF> <805E> <805A> <8087> <8150> <8180> <818F> <8188> <818A> <817F> <8182> <81E7> <81FA> <8207> <8214> <821E> <824B> <84C9> <84BF> <84C6> <84C4> <8499> <849E> <84B2> <849C> <84CB> <84B8> <84C0> <84D3> <8490> <84BC> <84D1> <84CA> <873F> <871C> <873B> <8722> <8725> <8734> <8718> <8755> <8737> <8729> <88F3> <8902> <88F4> <88F9> <88F8> <88FD> <88E8> <891A> <88EF> <8AA6> <8A8C> <8A9E> <8AA3> <8A8D> <8AA1> <8A93> <8AA4> <8AAA> <8AA5> <8AA8> <8A98> <8A91> <8A9A> <8AA7> <8C6A> <8C8D> <8C8C> <8CD3> <8CD1> <8D6B> <8D99> <8D95> <8DFC> <8F14> <8F12> <8F15> <8F13> <8FA3> <9060> <9058> <905C> endbfrange 100 beginbfrange <9063> <9059> <905E> <9062> <905D> <905B> <9119> <9118> <911E> <9175> <9178> <9177> <9174> <9278> <9280> <9285> <9298> <9296> <927B> <9293> <929C> <92A8> <927C> <9291> <95A1> <95A8> <95A3> <95A5> <95A4> <9699> <969C> <969B> <96CC> <96D2> <9700> <977C> <9785> <97F6> <9817> <98AF> <98B1> <9903> <9905> <990C> <9909> <99C1> <9AAF> <9AE6> <9B41> <9CF4> <9CF6> <9CF3> <9EBC> <9F3B> <9F4A> <5104> <5100> <50FB> <50F5> <50F9> <5102> <5108> <5105> <51DC> <5287> <528D> <528A> <52F0> <53B2> <562E> <563B> <5639> <5632> <563F> <5634> <5629> <5653> <564E> <5657> <5674> <5636> <562F> <5880> <589F> <589E> <58B3> <589C> <58AE> <58A9> <58A6> <596D> <5B09> <5AFB> <5B0B> <5AF5> <5B0C> <5B08> <5BEE> <5BEC> <5BE9> endbfrange 100 beginbfrange <5BEB> <5C64> <5D9D> <5D94> <5E62> <5E5F> <5E61> <5EE2> <5EDA> <5EDF> <5EDD> <5EE3> <5EE0> <5F48> <5F71> <5FB7> <5FB5> <6176> <6167> <616E> <615D> <6155> <6182> <617C> <6170> <616B> <617E> <61A7> <6190> <61AB> <618E> <61AC> <619A> <61A4> <6194> <61AE> <622E> <6469> <646F> <6479> <649E> <64B2> <6488> <6490> <64B0> <64A5> <6493> <6495> <64A9> <6492> <64AE> <64AD> <64AB> <649A> <64AC> <6499> <64A2> <64B3> <6575> <6577> <66AE> <66AB> <66B4> <66B1> <6A23> <6A1F> <69E8> <6A01> <6A1E> <6A19> <69FD> <6A21> <6A13> <6A0A> <69F3> <6A02> <6A05> <69ED> <6A11> <6B50> <6B4E> <6BA4> <6BC5> <6F3F> <6F7C> <6F84> <6F51> <6F66> <6F54> <6F86> <6F6D> <6F5B> <6F78> <6F6E> <6F8E> <6F7A> <6F70> <6F64> <6F97> <6F58> endbfrange 100 beginbfrange <6ED5> <6F6F> <6F60> <6F5F> <719F> <71AC> <71B1> <71A8> <7256> <729B> <734E> <7357> <7469> <748B> <7483> <747E> <7480> <757F> <7620> <7629> <761F> <7624> <7626> <7621> <769A> <76BA> <76E4> <778E> <7787> <778C> <7791> <778B> <78CB> <78C5> <78BA> <78CA> <78BE> <78D5> <78BC> <78D0> <7A3F> <7A3C> <7A40> <7A3D> <7A37> <7A3B> <7AAF> <7AAE> <7BAD> <7BB1> <7BC4> <7BB4> <7BC6> <7BC1> <7BA0> <7BCC> <7CCA> <7DE0> <7DF4> <7DEF> <7DFB> <7DD8> <7DEC> <7DDD> <7DE8> <7DE3> <7DDA> <7DDE> <7DE9> <7D9E> <7DD9> <7DF2> <7DF9> <7F75> <7F77> <7FAF> <7FE9> <8026> <819B> <81A0> <819A> <8198> <8517> <853D> <851A> <84EE> <852C> <8513> <8511> <8523> <8521> <8514> <84EC> <8525> <84FF> <8506> <8782> <8774> <8776> <8760> endbfrange 100 beginbfrange <8766> <8778> <8768> <8759> <8757> <874C> <8753> <885B> <885D> <8910> <8907> <8912> <8915> <890A> <8ABC> <8AD2> <8AC7> <8AC4> <8A95> <8ACB> <8AF8> <8AB2> <8AC9> <8AC2> <8ABF> <8AB0> <8AD6> <8ACD> <8AB6> <8AB9> <8ADB> <8C4C> <8C4E> <8C6C> <8CE0> <8CDE> <8CE6> <8CE4> <8CEC> <8CE2> <8CDC> <8CEA> <8CE1> <8D6D> <8D9F> <8DA3> <8E2B> <8E10> <8E1D> <8E22> <8E0F> <8E29> <8E1F> <8E21> <8E1E> <8EBA> <8F1D> <8F1B> <8F1F> <8F29> <8F26> <8F2A> <8F1C> <8F1E> <8F25> <9069> <906E> <9068> <906D> <9077> <9130> <912D> <9127> <9131> <9187> <9189> <918B> <9183> <92C5> <92BB> <92B7> <92EA> <92AC> <92E4> <92C1> <92B3> <92BC> <92D2> <92C7> <92F0> <92B2> <95AD> <95B1> <9704> <9706> <9709> <9760> <978D> <978B> <978F> endbfrange 100 beginbfrange <9821> <982B> <981C> <98B3> <990A> <9913> <9912> <9918> <99DD> <99D0> <99DF> <99DB> <99D1> <99D5> <99D2> <99D9> <9AB7> <9AEE> <9B27> <9B45> <9B44> <9B77> <9B6F> <9D06> <9D09> <9D03> <9EA9> <9EBE> <9ECE> <58A8> <9F52> <5112> <5118> <5114> <5110> <5115> <5180> <51AA> <51DD> <5291> <5293> <52F3> <5659> <566B> <5679> <5669> <5664> <5678> <566A> <5668> <5665> <5671> <566F> <566C> <5662> <5676> <58C1> <58BE> <58C7> <58C5> <596E> <5B1D> <5B34> <5B78> <5BF0> <5C0E> <5F4A> <61B2> <6191> <61A9> <618A> <61CD> <61B6> <61BE> <61CA> <61C8> <6230> <64C5> <64C1> <64CB> <64BB> <64DA> <64C4> <64C7> <64C2> <64CD> <64BF> <64D2> <64D4> <64BE> <6574> <66C6> <66C9> <66B9> <66C4> <66C7> <66B8> <6A3D> <6A38> <6A3A> endbfrange 100 beginbfrange <6A59> <6A6B> <6A58> <6A39> <6A44> <6A62> <6A61> <6A4B> <6A47> <6A35> <6A5F> <6A48> <6B59> <6B77> <6C05> <6FC2> <6FB1> <6FA1> <6FC3> <6FA4> <6FC1> <6FA7> <6FB3> <6FC0> <6FB9> <6FB6> <6FA6> <6FA0> <6FB4> <71BE> <71C9> <71D0> <71D2> <71C8> <71D5> <71B9> <71CE> <71D9> <71DC> <71C3> <7368> <749C> <74A3> <7498> <749F> <749E> <74E2> <750C> <7634> <7638> <763A> <76E7> <76E5> <77A0> <779E> <77A5> <78E8> <78DA> <78EC> <78E7> <79A6> <7A4D> <7A46> <7A4C> <7A4B> <7ABA> <7BD9> <7C11> <7BC9> <7BE4> <7BDB> <7BE1> <7BE9> <7BE6> <7CD5> <7E0A> <7E11> <7E08> <7E1B> <7E23> <7E1E> <7E1D> <7E09> <7E10> <7F79> <7FB2> <7FF0> <7FEE> <8028> <81B3> <81A9> <81A8> <81FB> <8208> <8258> <854A> <8559> <8548> <8568> <8543> endbfrange 100 beginbfrange <8549> <856D> <856A> <855E> <8783> <879F> <879E> <87A2> <878D> <8861> <892A> <8932> <8925> <892B> <8921> <89AA> <89A6> <8AE6> <8AFA> <8AEB> <8AF1> <8B00> <8ADC> <8AE7> <8AEE> <8AFE> <8B01> <8AF7> <8AED> <8AF3> <8AF6> <8AFC> <8C6B> <8C6D> <8C93> <8CF4> <8E44> <8E31> <8E34> <8E42> <8E39> <8E35> <8F3B> <8F2F> <8F38> <8F33> <8FA8> <8FA6> <9075> <9074> <9078> <9072> <907C> <907A> <9134> <9192> <9320> <9336> <92F8> <9333> <932F> <9322> <92FC> <932B> <9304> <931A> <9310> <9326> <9321> <9315> <932E> <9319> <95BB> <96A7> <96AA> <96D5> <970E> <9711> <9716> <970D> <9713> <970F> <975B> <9766> <9798> <9830> <9838> <983B> <9837> <982D> <9839> <9824> <9910> <9928> <991E> <991B> <9921> <991A> <99ED> <99E2> endbfrange 100 beginbfrange <99F1> <9AB8> <9ABC> <9AFB> <9AED> <9B28> <9B91> <9D15> <9D23> <9D26> <9D28> <9D12> <9D1B> <9ED8> <9ED4> <9F8D> <9F9C> <512A> <511F> <5121> <5132> <52F5> <568E> <5680> <5690> <5685> <5687> <568F> <58D5> <58D3> <58D1> <58CE> <5B30> <5B2A> <5B24> <5B7A> <5C37> <5C68> <5DBC> <5DBA> <5DBD> <5DB8> <5E6B> <5F4C> <5FBD> <61C9> <61C2> <61C7> <61E6> <61CB> <6232> <6234> <64CE> <64CA> <64D8> <64E0> <64F0> <64E6> <64EC> <64F1> <64E2> <64ED> <6582> <66D9> <66D6> <6A80> <6A94> <6A84> <6AA2> <6A9C> <6ADB> <6AA3> <6A7E> <6A97> <6A90> <6AA0> <6B5C> <6BAE> <6BDA> <6C08> <6FD8> <6FF1> <6FDF> <6FDB> <6FE4> <6FEB> <6FEF> <6F80> <6FEC> <6FE1> <6FE9> <6FD5> <6FEE> <6FF0> <71E7> <71DF> <71EE> <71E6> <71E5> <71ED> endbfrange 100 beginbfrange <71EC> <71F4> <71E0> <7235> <7246> <7370> <7372> <74A9> <74B0> <74A6> <74A8> <7646> <7642> <764C> <76EA> <77B3> <77AA> <77B0> <77AC> <77A7> <77AD> <77EF> <78F7> <78FA> <78F4> <78EF> <7901> <79A7> <79AA> <7A57> <7ABF> <7C07> <7C0D> <7BFE> <7BF7> <7C0C> <7BE0> <7CE0> <7CDC> <7CDE> <7CE2> <7CDF> <7CD9> <7CDD> <7E2E> <7E3E> <7E46> <7E37> <7E32> <7E43> <7E2B> <7E3D> <7E31> <7E45> <7E41> <7E34> <7E39> <7E48> <7E35> <7E3F> <7E2F> <7F44> <7FF3> <7FFC> <8071> <8070> <806F> <8073> <81C6> <81C3> <81BA> <81C2> <81C0> <81BF> <81BD> <81C9> <81BE> <81E8> <8209> <8271> <85AA> <8584> <857E> <859C> <8591> <8594> <85AF> <859B> <8587> <85A8> <858A> <8667> <87C0> <87D1> <87B3> <87D2> <87C6> <87AB> <87BB> <87BA> endbfrange 100 beginbfrange <87C8> <87CB> <893B> <8936> <8944> <8938> <893D> <89AC> <8B0E> <8B17> <8B19> <8B1B> <8B0A> <8B20> <8B1D> <8B04> <8B10> <8C41> <8C3F> <8C73> <8CFA> <8CFD> <8CFC> <8CF8> <8CFB> <8DA8> <8E49> <8E4B> <8E48> <8E4A> <8F44> <8F3E> <8F42> <8F45> <8F3F> <907F> <907D> <9084> <9081> <9080> <9139> <91A3> <919E> <919C> <934D> <9382> <9328> <9375> <934A> <9365> <934B> <9318> <937E> <936C> <935B> <9370> <935A> <9354> <95CA> <95C8> <95C6> <96B1> <96B8> <96D6> <971C> <971E> <97A0> <97D3> <9846> <98B6> <9935> <9A01> <99FF> <9BAE> <9BAB> <9BAA> <9BAD> <9D3B> <9D3F> <9E8B> <9ECF> <9EDE> <9EDC> <9EDB> <9F3E> <9F4B> <53E2> <5695> <56AE> <58D9> <58D8> <5B38> <5F5D> <61E3> <6233> <64F4> <64F2> <64FE> <6506> <64FA> endbfrange 100 beginbfrange <64F7> <65B7> <66DC> <6726> <6AB3> <6AAC> <6AC3> <6ABB> <6AB8> <6AC2> <6AAE> <6B5F> <6B78> <6BAF> <7009> <700B> <6FFE> <7006> <6FFA> <7011> <700F> <71FB> <71FE> <71F8> <7377> <7375> <74A7> <74BF> <7515> <7656> <7658> <7652> <77BD> <77BF> <77BB> <790E> <79AE> <7A61> <7A60> <7AC4> <7C2B> <7C27> <7C2A> <7C1E> <7C23> <7C21> <7CE7> <7E54> <7E5E> <7E5A> <7E61> <7E52> <7E59> <7F48> <7FF9> <7FFB> <8077> <8076> <81CD> <81CF> <820A> <85CF> <85A9> <85CD> <85D0> <85C9> <85B0> <85BA> <85B9> <85A6> <87EF> <87EC> <87F2> <87E0> <8986> <89B2> <89F4> <8B28> <8B39> <8B2C> <8B2B> <8C50> <8D05> <8E59> <8E63> <8E66> <8E64> <8E5F> <8E55> <8EC0> <8F49> <8F4D> <9087> <9083> <9088> <91AB> <91D0> <9394> <938A> <9396> endbfrange 100 beginbfrange <93A2> <93B3> <93AE> <93AC> <93B0> <9398> <939A> <9397> <95D4> <95D6> <95D0> <95D5> <96E2> <96DC> <96D9> <96DB> <96DE> <9724> <97A3> <97A6> <97AD> <97F9> <984D> <984F> <984C> <984E> <9853> <98BA> <993E> <993D> <992E> <99A5> <9A0E> <9AC1> <9B03> <9B06> <9B4F> <9B4E> <9B4D> <9BCA> <9BC9> <9BFD> <9BC8> <9BC0> <9D51> <9D5D> <9D60> <9EE0> <9F15> <9F2C> <5133> <56A5> <58DE> <58E2> <5BF5> <9F90> <5EEC> <61F2> <61F7> <61F6> <61F5> <6500> <650F> <66E0> <66DD> <6AE5> <6ADD> <6ADA> <6AD3> <701B> <701F> <7028> <701A> <701D> <7015> <7018> <7206> <720D> <7258> <72A2> <7378> <737A> <74BD> <74CA> <74E3> <7587> <7586> <765F> <7661> <77C7> <7919> <79B1> <7A6B> <7A69> <7C3E> <7C38> <7C3D> <7C37> <7C40> <7E6B> endbfrange 100 beginbfrange <7E6D> <7E79> <7E69> <7F85> <7E73> <7FB6> <7FB9> <7FB8> <81D8> <85E9> <85DD> <85EA> <85D5> <85E4> <85F7> <87FB> <8805> <880D> <87F9> <87FE> <8960> <895F> <8956> <895E> <8B41> <8B5C> <8B58> <8B49> <8B5A> <8B4E> <8B46> <8B59> <8D08> <8D0A> <8E7C> <8E72> <8E87> <8E76> <8E6C> <8E7A> <8E74> <8F54> <8F4E> <8FAD> <908A> <91B1> <91AE> <93E1> <93D1> <93DF> <93C3> <93C8> <93DC> <93D6> <93E2> <93CD> <93D8> <93E4> <93D7> <93E8> <95DC> <96B4> <96E3> <972A> <9727> <9761> <97DC> <97FB> <985E> <9858> <985B> <98BC> <9945> <9949> <9A16> <9A19> <9B0D> <9BE8> <9BE7> <9BD6> <9BDB> <9D89> <9D61> <9D72> <9D6A> <9D6C> <9E92> <9E97> <9E93> <9EB4> <52F8> <56A8> <56B7> <56B6> <56B4> <56BC> <58E4> <5B40> <5B43> <5B7D> endbfrange 100 beginbfrange <5BF6> <5DC9> <61F8> <61FA> <6518> <6514> <6519> <66E6> <6727> <6AEC> <703E> <7030> <7032> <7210> <737B> <74CF> <7662> <7665> <7926> <792A> <792C> <792B> <7AC7> <7AF6> <7C4C> <7C43> <7C4D> <7CEF> <8FAE> <7E7D> <7E7C> <7E82> <7F4C> <8000> <81DA> <8266> <85FB> <85F9> <8611> <85FA> <8606> <860B> <8607> <860A> <8814> <8964> <89BA> <89F8> <8B70> <8B6C> <8B66> <8B6F> <8B5F> <8B6B> <8D0F> <8D0D> <8E89> <8E81> <8E85> <8E82> <91B4> <91CB> <9418> <9403> <93FD> <95E1> <9730> <98C4> <9952> <9951> <99A8> <9A2B> <9A30> <9A37> <9A35> <9C13> <9C0D> <9E79> <9EB5> <9EE8> <9F2F> <9F5F> <9F63> <9F61> <5137> <56C1> <56C0> <56C2> <5914> <5C6C> <5DCD> <61FC> <61FE> <651D> <651C> <6595> <66E9> <6AFB> <6B04> <6AFA> endbfrange 100 beginbfrange <6BB2> <704C> <721B> <72A7> <74D6> <74D4> <7669> <77D3> <7C50> <7E8F> <7E8C> <7FBC> <8617> <862D> <861A> <8823> <8822> <8821> <881F> <896A> <896C> <89BD> <8B74> <8B77> <8B7D> <8D13> <8E8A> <8E8D> <8E8B> <8F5F> <8FAF> <91BA> <942E> <9433> <9435> <943A> <9438> <9432> <942B> <95E2> <9738> <9732> <97FF> <9867> <9865> <9957> <9A45> <9A43> <9A40> <9A3E> <9ACF> <9B54> <9B51> <9C2D> <9C25> <9DAF> <9DB4> <9DC2> <9DB8> <9E9D> <9EEF> <9F19> <9F5C> <9F66> <513C> <513B> <56C8> <56CA> <56C9> <5B7F> <5DD4> <5DD2> <5F4E> <61FF> <6524> <6B0A> <6B61> <7051> <7058> <7380> <74E4> <758A> <766E> <766C> <79B3> <7C60> <7C5F> <807E> <807D> <81DF> <8972> <896F> <89FC> <8B80> <8D16> <8E91> <8E93> <8F61> <9148> <9444> endbfrange 100 beginbfrange <9451> <973D> <97C3> <97C1> <986B> <9955> <9A55> <9A4D> <9AD2> <9B1A> <9C49> <9C31> <9C3E> <9C3B> <9DD3> <9DD7> <9F34> <9F6C> <9F6A> <9F94> <56CC> <5DD6> <6200> <6523> <652B> <652A> <66EC> <6B10> <74DA> <7ACA> <7C64> <7C63> <7C65> <7E93> <7E96> <7E94> <81E2> <8638> <863F> <8831> <8B8A> <9090> <908F> <9463> <9460> <9464> <9768> <986F> <995C> <9A5A> <9A57> <9AD3> <9AD1> <9C54> <9C57> <9C56> <9DE5> <9E9F> <9EF4> <56D1> <58E9> <652C> <705E> <7671> <77D7> <7F50> <7F88> <8836> <8839> <8862> <8B93> <8B92> <8B96> <8277> <8D1B> <91C0> <946A> <9742> <9748> <9744> <97C6> <9870> <9A5F> <9B22> <9B58> <9C5F> <9DF9> <9E7C> <9F07> <9F77> <9F72> <5EF3> <6B16> <7063> <7C6C> <7C6E> <883B> <89C0> <8EA1> <91C1> endbfrange 100 beginbfrange <9472> <9470> <9871> <995E> <9AD6> <9B23> <9ECC> <7064> <77DA> <8B9A> <9477> <97C9> <9A62> <9A65> <7E9C> <8B9C> <8EAA> <91C5> <947D> <947C> <9C77> <9EF7> <8C54> <947F> <9E1A> <7228> <9A6A> <9B31> <9E1B> <9E1E> <7C72> <2460> <2474> <2170> <4E36> <4E3F> <4E85> <4EA0> <5182> <5196> <51AB> <52F9> <5338> <5369> <53B6> <5902> <5B80> <5DDB> <5E7A> <5E7F> <5EF4> <5F50> <5F61> <6534> <65E0> <7592> <7676> <8FB5> <96B6> <4EDD> <3005> <30FC> <3041> <3059> <30A1> <30A5> <0410> <0401> <0416> <041B> <0451> <0436> <21E7> <21B8> <4E41> <4E5A> <5202> <5188> <00AC> <3231> <2116> <2121> <4E42> <4E5C> <51F5> <531A> <5382> endbfrange 100 beginbfrange <4E07> <4E0C> <4E47> <4E8D> <56D7> <5C6E> <5F73> <4E0F> <5187> <4E0E> <4E2E> <4E93> <4EC2> <4EC9> <4EC8> <5198> <52FC> <536C> <53B9> <5720> <5903> <592C> <5C10> <5DFF> <65E1> <6BB3> <6BCC> <6C14> <723F> <4E31> <4E3C> <4EE8> <4EDC> <4EE9> <4EE1> <4EDD> <4EDA> <520C> <531C> <534C> <5722> <5917> <592F> <5B81> <5B84> <5C12> <5C3B> <5C74> <5C73> <5E04> <5E80> <5E82> <5FC9> <6209> <6250> <6C15> <6C36> <6C43> <6C3F> <6C3B> <72AE> <72B0> <738A> <79B8> <808A> <961E> <4F0E> <4F18> <4F2C> <4EF5> <4F14> <4EF1> <4F00> <4EF7> <4F08> <4F1D> <4F02> <4F05> <4F22> <4F13> <4F04> <4EF4> <4F12> <51B1> <5213> <5209> <5210> <52A6> <5322> <531F> <534D> <538A> <5407> <56E1> <56DF> <572E> <572A> <5734> <593C> endbfrange 100 beginbfrange <5980> <597C> <5985> <597B> <597E> <5977> <597F> <5B56> <5C15> <5C25> <5C7C> <5C7A> <5C7E> <5DDF> <5E75> <5E84> <5F02> <5F1A> <5F74> <5FD5> <5FD4> <5FCF> <625C> <625E> <6264> <6261> <6266> <6262> <6259> <6260> <625A> <6265> <65EF> <65EE> <673E> <6739> <6738> <673B> <673A> <673F> <673C> <6733> <6C18> <6C46> <6C52> <6C5C> <6C4F> <6C4A> <6C54> <6C4B> <6C4C> <7071> <725E> <72B4> <738E> <752A> <767F> <7A75> <7F51> <8278> <827C> <8280> <827D> <827F> <864D> <897E> <9099> <9097> <909B> <9094> <9622> <9624> <9620> <9623> <4F56> <4F3B> <4F62> <4F49> <4F53> <4F64> <4F3E> <4F67> <4F52> <4F5F> <4F41> <4F58> <4F2D> <4F33> <4F3F> <4F61> <518F> <51B9> <521C> <521E> <5221> <52AD> <5309> <5363> <5372> <538E> endbfrange 100 beginbfrange <5430> <5437> <542A> <5454> <5445> <5419> <541C> <5425> <5418> <543D> <544F> <5441> <5428> <5424> <5447> <56EE> <56E7> <56E5> <5741> <5745> <574C> <5749> <574B> <5752> <5906> <5940> <59A6> <5998> <59A0> <5997> <598E> <59A2> <5990> <598F> <59A7> <59A1> <5B8E> <5B92> <5C28> <5C2A> <5C8D> <5C8F> <5C88> <5C8B> <5C89> <5C92> <5C8A> <5C86> <5C93> <5C95> <5DE0> <5E0A> <5E0E> <5E8B> <5E89> <5E8C> <5E88> <5E8D> <5F05> <5F1D> <5F78> <5F76> <5FD2> <5FD1> <5FD0> <5FED> <5FE8> <5FEE> <5FF3> <5FE1> <5FE4> <5FE3> <5FFA> <5FEF> <5FF7> <5FFB> <6000> <5FF4> <623A> <6283> <628C> <628E> <6294> <6287> <6271> <627B> <627A> <6270> <6281> <6288> <6277> <627D> <6272> <6274> <6537> <65F0> <65F4> <65F3> <65F2> <65F5> endbfrange 100 beginbfrange <6745> <6747> <6759> <6755> <674C> <6748> <675D> <674D> <675A> <674B> <6BD0> <6C19> <6C78> <6C67> <6C6B> <6C84> <6C8B> <6C8F> <6C71> <6C6F> <6C69> <6C9A> <6C6D> <6C87> <6C95> <6C9C> <6C66> <6C73> <6C65> <6C7B> <6C8E> <7074> <707A> <7263> <72BF> <72BD> <72C3> <72C6> <72C1> <72BA> <72C5> <7395> <7397> <7393> <7392> <753A> <7539> <7594> <7681> <793D> <8034> <8095> <8099> <8090> <8092> <809C> <8290> <828F> <8285> <828E> <8291> <8293> <828A> <8283> <8C78> <8FC9> <8FBF> <909F> <90A1> <90A5> <909E> <90A7> <90A0> <9630> <9628> <962F> <962D> <4E33> <4F98> <4F7C> <4F85> <4F7D> <4F80> <4F87> <4F76> <4F74> <4F89> <4F84> <4F77> <4F4C> <4F97> <4F6A> <4F9A> <4F79> <4F81> <4F78> <4F90> <4F9C> <4F94> <4F9E> endbfrange 100 beginbfrange <4F92> <4F82> <4F95> <4F6B> <4F6E> <519E> <51BC> <51BE> <5235> <5232> <5246> <5231> <52BC> <530A> <533C> <5392> <5394> <5487> <547F> <5481> <5491> <5482> <5488> <546B> <547A> <547E> <5465> <546C> <5474> <5466> <548D> <546F> <5461> <5460> <5498> <5463> <5467> <5464> <56F7> <56F9> <576F> <5772> <576D> <576B> <5771> <5770> <5776> <5780> <5775> <577B> <5773> <5762> <5768> <577D> <590C> <5945> <59B5> <59BA> <59CF> <59CE> <59B2> <59CC> <59C1> <59B6> <59BC> <59C3> <59D6> <59B1> <59BD> <59C0> <59C8> <59B4> <59C7> <5B62> <5B65> <5B93> <5B95> <5C44> <5C47> <5CAE> <5CA4> <5CA0> <5CB5> <5CAF> <5CA8> <5CAC> <5C9F> <5CA3> <5CAD> <5CA2> <5CAA> <5CA7> <5C9D> <5CA5> <5CB6> <5CB0> <5CA6> <5E17> <5E14> <5E19> endbfrange 100 beginbfrange <5F28> <5F22> <5F54> <5F82> <5F7E> <5F7D> <5FDE> <5FE5> <602D> <6026> <6019> <6032> <600B> <6034> <600A> <6017> <6033> <601A> <601E> <602C> <6022> <600D> <6010> <602E> <6013> <6011> <600C> <6009> <601C> <6214> <623D> <62AD> <62B4> <62D1> <62BE> <62AA> <62B6> <62CA> <62AE> <62B3> <62AF> <62BB> <62A9> <62B0> <62B8> <653D> <65A8> <65BB> <6609> <65FC> <6604> <6612> <6608> <65FB> <6603> <660B> <660D> <6605> <65FD> <6611> <6610> <66F6> <670A> <6785> <676C> <678E> <6792> <6776> <677B> <6798> <6786> <6784> <6774> <678D> <678C> <677A> <679F> <6791> <6799> <6783> <677D> <6781> <6778> <6794> <6B25> <6B80> <6B7E> <6BDE> <6C1D> <6C93> <6CEC> <6CEB> <6CEE> <6CD9> <6CB6> <6CD4> <6CAD> <6CE7> <6CB7> <6CD0> endbfrange 100 beginbfrange <6CC2> <6CBA> <6CC3> <6CC6> <6CED> <6CF2> <6CD2> <6CDD> <6CB4> <6C8A> <6C9D> <6C80> <6CDE> <6CC0> <6D30> <6CCD> <6CC7> <6CB0> <6CF9> <6CCF> <6CE9> <6CD1> <7094> <7098> <7085> <7093> <7086> <7084> <7091> <7096> <7082> <709A> <7083> <726A> <72D6> <72CB> <72D8> <72C9> <72DC> <72D2> <72D4> <72DA> <72CC> <72D1> <73A4> <73A1> <73AD> <73A6> <73A2> <73A0> <73AC> <739D> <74DD> <74E8> <753F> <753E> <758C> <7598> <76AF> <76F3> <76F1> <76F0> <76F5> <77F8> <77FC> <77F9> <77FB> <77FA> <77F7> <7942> <793F> <79C5> <7A78> <7A7B> <7AFB> <7C75> <7CFD> <8035> <808F> <80AE> <80A3> <80B8> <80B5> <80AD> <8220> <82A0> <82C0> <82AB> <829A> <8298> <829B> <82B5> <82A7> <82AE> <82BC> <829E> <82BA> <82B4> <82A8> <82A1> endbfrange 100 beginbfrange <82A9> <82C2> <82A4> <82C3> <82B6> <82A2> <8670> <866F> <866D> <8C56> <8FD2> <8FCB> <8FD3> <8FCD> <8FD6> <8FD5> <8FD7> <90B2> <90B4> <90AF> <90B3> <90B0> <9639> <963D> <963C> <963A> <9643> <4FCD> <4FC5> <4FD3> <4FB2> <4FC9> <4FCB> <4FC1> <4FD4> <4FDC> <4FD9> <4FBB> <4FB3> <4FDB> <4FC7> <4FD6> <4FBA> <4FC0> <4FB9> <4FEC> <5244> <5249> <52C0> <52C2> <533D> <537C> <5397> <5396> <5399> <5398> <54BA> <54A1> <54AD> <54A5> <54CF> <54C3> <830D> <54B7> <54AE> <54D6> <54B6> <54C5> <54A0> <5470> <54BC> <54A2> <54BE> <5472> <54DE> <54B0> <57B5> <579E> <57A4> <578C> <5797> <579D> <579B> <5794> <5798> <578F> <5799> <57A5> <579A> <5795> <58F4> <590D> <5953> <59E1> <59DE> <59EE> <5A00> <59F1> <59DD> <59FA> endbfrange 100 beginbfrange <59FD> <59FC> <59F6> <59E4> <59F2> <59F7> <59DB> <59E9> <59F3> <59F5> <59E0> <59FE> <59F4> <59ED> <5BA8> <5C4C> <5CD0> <5CD8> <5CCC> <5CD7> <5CCB> <5CDB> <5CDE> <5CDA> <5CC9> <5CC7> <5CCA> <5CD6> <5CD3> <5CCF> <5CC8> <5CC6> <5CCE> <5CDF> <5CF8> <5DF9> <5E21> <5E20> <5E24> <5EB0> <5EA4> <5EA2> <5E9B> <5EA3> <5EA5> <5F07> <5F2E> <5F56> <5F86> <6037> <6039> <6054> <6072> <605E> <6045> <6053> <6047> <6049> <605B> <604C> <6040> <6042> <605F> <6024> <6044> <6058> <6066> <606E> <6242> <62CF> <630D> <630B> <62F5> <630E> <6303> <62EB> <62F9> <630F> <630C> <62F8> <62F6> <6300> <6313> <62FA> <6315> <62FB> <62F0> <6541> <6543> <65AA> <65BF> <6636> <6621> <6632> <6635> <661C> <6626> <6622> <6633> <662B> endbfrange 100 beginbfrange <663A> <661D> <6634> <6639> <662E> <670F> <67C1> <67F2> <67C8> <67BA> <67DC> <67BB> <67F8> <67D8> <67C0> <67B7> <67C5> <67EB> <67E4> <67DF> <67B5> <67CD> <67B3> <67F7> <67F6> <67EE> <67E3> <67C2> <67B9> <67CE> <67E7> <67F0> <67B2> <67FC> <67C6> <67ED> <67CC> <67AE> <67E6> <67DB> <67FA> <67C9> <67C3> <67EA> <67CB> <6B28> <6B82> <6B84> <6BB6> <6BD6> <6BD8> <6BE0> <6C20> <6D28> <6D34> <6D2D> <6D1F> <6D3C> <6D3F> <6D12> <6D0A> <6CDA> <6D33> <6D04> <6D19> <6D3A> <6D1A> <6D11> <6D00> <6D1D> <6D42> <6D01> <6D18> <6D37> <6D03> <6D0F> <6D40> <6D07> <6D20> <6D2C> <6D08> <6D22> <6D09> <6D10> <70B7> <709F> <70BE> <70B1> <70B0> <70A1> <70B4> <70A9> <7241> <7249> <726C> <7270> <7273> <726E> <72CA> <72E4> endbfrange 100 beginbfrange <72E8> <72EB> <72DF> <72EA> <72E6> <72E3> <7385> <73CC> <73C2> <73C8> <73C5> <73B9> <73B6> <73B5> <73B4> <73EB> <73BF> <73C7> <73BE> <73C3> <73C6> <73B8> <73CB> <74EC> <74EE> <752E> <7547> <75A7> <75AA> <7679> <76C4> <7708> <7703> <770A> <76F7> <76FB> <76FA> <77E7> <7806> <7811> <7805> <7810> <780F> <780E> <7809> <7803> <7813> <794A> <794C> <794B> <7945> <7944> <79D5> <79CD> <79CF> <79D6> <79CE> <7A80> <7A7E> <7AD1> <7B00> <7C7A> <7C78> <7C7F> <7D03> <7D08> <7D01> <7F58> <7F91> <7F8D> <7FBE> <8007> <800E> <8014> <8037> <80D8> <80C7> <80E0> <80D1> <80C8> <80C2> <80D0> <80C5> <80E3> <80D9> <80DC> <80CA> <80D5> <80C9> <80CF> <80D7> <80E6> <80CD> <81FF> <8221> <8294> <82D9> <82FE> <82F9> <8307> endbfrange 100 beginbfrange <82E8> <8300> <82D5> <833A> <82EB> <82D6> <82F4> <82EC> <82E1> <82F2> <82F5> <830C> <82FB> <82F6> <82F0> <82EA> <82E4> <82E0> <82FA> <82F3> <82ED> <8677> <8674> <867C> <8673> <8841> <884E> <8867> <886A> <8869> <89D3> <8A04> <8A07> <8D72> <8FE3> <8FE1> <8FEE> <8FE0> <90F1> <90BD> <90BF> <90D5> <90C5> <90BE> <90C7> <90CB> <90C8> <91D4> <91D3> <9654> <964F> <9651> <9653> <964A> <964E> <501E> <5005> <5007> <5013> <5022> <5030> <501B> <4FF5> <4FF4> <5033> <5037> <502C> <4FF6> <5017> <501C> <5020> <5027> <5035> <502F> <5031> <500E> <515A> <5194> <5193> <51CA> <51C4> <51C8> <51CE> <5261> <525A> <5252> <525E> <5255> <5262> <52CD> <530E> <539E> <5526> <54E2> <5517> <5512> <54E7> <54F3> <54E4> <551A> endbfrange 100 beginbfrange <54FF> <5504> <5508> <54EB> <5511> <5505> <54F1> <550A> <54FB> <54F7> <54E0> <550E> <5503> <550B> <5701> <57CC> <5832> <57D5> <57D2> <57BA> <57C6> <57BD> <57BC> <57B8> <57B6> <57BF> <57C7> <57D0> <57B9> <57C1> <590E> <594A> <5A19> <5A16> <5A2D> <5A15> <5A0F> <5A17> <5A0A> <5A1E> <5A33> <5B6C> <5BA7> <5BAD> <5BAC> <5C03> <5C56> <5C54> <5CEC> <5CFF> <5CEE> <5CF1> <5CF7> <5D00> <5CF9> <5E29> <5E28> <5EA8> <5EAE> <5EAA> <5EAC> <5F33> <5F30> <5F67> <605D> <605A> <6067> <6041> <60A2> <6088> <6080> <6092> <6081> <609D> <6083> <6095> <609B> <6097> <6087> <609C> <608E> <6219> <6246> <62F2> <6310> <6356> <632C> <6344> <6336> <6343> <63E4> <6339> <634B> <634A> <633C> <6329> <6341> <6334> <6358> <6354> endbfrange 100 beginbfrange <6359> <632D> <6347> <6333> <635A> <6351> <6338> <6357> <6340> <6348> <654A> <6546> <65C6> <65C3> <65C2> <664A> <665F> <6647> <6651> <6712> <681F> <681A> <6849> <6832> <683B> <684B> <684F> <6816> <6831> <681C> <6835> <682B> <682D> <682F> <684E> <6844> <6834> <681D> <6812> <6814> <6826> <6828> <682E> <684D> <683A> <6825> <6820> <6B2C> <6B2F> <6B2D> <6B31> <6B34> <6B6D> <8082> <6B88> <6BE6> <6BE4> <6BE8> <6BE3> <6BE2> <6BE7> <6C25> <6D7A> <6D63> <6D76> <6D0D> <6D61> <6D92> <6D58> <6D62> <6D6D> <6D6F> <6D91> <6D8D> <6DEF> <6D7F> <6D86> <6D5E> <6D67> <6D60> <6D97> <6D70> <6D7C> <6D5F> <6D82> <6D98> <6D2F> <6D68> <6D8B> <6D7E> <6D80> <6D84> <6D16> <6D83> <6D7B> <6D7D> <6D75> <6D90> <70DC> <70D3> endbfrange 100 beginbfrange <70D1> <70DD> <70CB> <7F39> <70E2> <70D7> <70D2> <70DE> <70E0> <70D4> <70CD> <70C5> <70DA> <70CE> <70E1> <7242> <7278> <7277> <7276> <7300> <72FA> <72F4> <72FE> <72F6> <72F3> <72FB> <7301> <73D3> <73D9> <73E5> <73D6> <73BC> <73E7> <73E3> <73E9> <73DC> <73D2> <73DB> <73D4> <73DD> <73DA> <73D7> <73E8> <74DE> <74F4> <7521> <755B> <755F> <75B0> <75C1> <75BB> <75C4> <75C0> <75BF> <75B6> <75BA> <768A> <76C9> <771D> <771B> <7710> <7713> <7712> <7723> <7711> <7715> <7719> <7722> <7727> <7823> <782C> <7822> <7835> <782F> <7828> <782E> <782B> <7821> <7829> <7833> <782A> <7831> <7954> <795B> <794F> <795C> <7953> <7952> <7951> <79EB> <79E0> <79EE> <79ED> <79EA> <79DC> <79DE> <79DD> <7A86> <7A89> <7A85> endbfrange 100 beginbfrange <7A8B> <7A8A> <7A87> <7AD8> <7B10> <7B04> <7B13> <7B05> <7B0F> <7B08> <7B0A> <7B0E> <7B09> <7B12> <7C84> <7C91> <7C8A> <7C8C> <7C88> <7C8D> <7C85> <7D1E> <7D1D> <7D11> <7D0E> <7D18> <7D16> <7D13> <7D1F> <7D12> <7D0F> <7D0C> <7F5C> <7F61> <7F5E> <7F60> <7F5D> <7F5B> <7F96> <7F92> <7FC3> <7FC2> <7FC0> <8016> <803E> <8039> <80FA> <80F2> <80F9> <80F5> <8101> <80FB> <8100> <8201> <822F> <8225> <8333> <832D> <8344> <8319> <8351> <8325> <8356> <833F> <8341> <8326> <831C> <8322> <8342> <834E> <831B> <832A> <8308> <833C> <834D> <8316> <8324> <8320> <8337> <832F> <8329> <8347> <8345> <834C> <8353> <831E> <832C> <834B> <8327> <8348> <8653> <8652> <86A2> <86A8> <8696> <868D> <8691> <869E> <8687> <8697> endbfrange 100 beginbfrange <8686> <868B> <869A> <8685> <86A5> <8699> <86A1> <86A7> <8695> <8698> <868E> <869D> <8690> <8694> <8843> <886D> <8875> <8872> <8880> <8871> <887F> <886F> <8883> <887E> <8874> <887C> <8A12> <8C47> <8C57> <8C7B> <8CA4> <8CA3> <8D76> <8D78> <8DB5> <8DB7> <8DB6> <8ED1> <8ED3> <8FFE> <8FF5> <9002> <8FFF> <8FFB> <9004> <8FFC> <8FF6> <90D6> <90E0> <90D9> <90E3> <90DF> <90E5> <90D8> <90DB> <90D7> <90DC> <90E4> <9150> <914E> <91D5> <91E2> <91DA> <965C> <965F> <96BC> <98E3> <9ADF> <9B2F> <4E7F> <5070> <506A> <5061> <505E> <5060> <5053> <504B> <505D> <5072> <5048> <504D> <5041> <505B> <504A> <5062> <5015> <5045> <505F> <5069> <506B> <5063> <5046> <5040> <506E> <5073> <5057> <5051> <51D0> <526B> <526D> endbfrange 100 beginbfrange <526C> <526E> <52D6> <52D3> <532D> <539C> <5575> <553C> <554D> <5550> <5534> <552A> <5551> <5562> <5536> <5535> <5530> <5552> <5545> <550C> <5532> <5565> <554E> <5539> <5548> <552D> <553B> <5540> <554B> <570A> <5707> <57FB> <5814> <57E2> <57F6> <57DC> <57F4> <5800> <57ED> <57FD> <5808> <57F8> <580B> <57F3> <57CF> <5807> <57EE> <57E3> <57F2> <57E5> <57EC> <57E1> <580E> <57FC> <5810> <57E7> <5801> <580C> <57F1> <57E9> <57F0> <580D> <5804> <595C> <5A60> <5A58> <5A55> <5A67> <5A5E> <5A38> <5A35> <5A6D> <5A50> <5A5F> <5A65> <5A6C> <5A53> <5A64> <5A57> <5A43> <5A5D> <5A52> <5A44> <5A5B> <5A48> <5A8E> <5A3E> <5A4D> <5A39> <5A4C> <5A70> <5A69> <5A47> <5A51> <5A56> <5A42> <5A5C> <5B72> <5B6E> <5BC1> endbfrange 100 beginbfrange <5BC0> <5C59> <5D1E> <5D0B> <5D1D> <5D1A> <5D20> <5D0C> <5D28> <5D0D> <5D26> <5D25> <5D0F> <5D30> <5D12> <5D23> <5D1F> <5D2E> <5E3E> <5E34> <5EB1> <5EB4> <5EB9> <5EB2> <5F36> <5F38> <5F9B> <5F96> <5F9F> <608A> <6090> <6086> <60BE> <60B0> <60BA> <60D3> <60CF> <60E4> <60D9> <60DD> <60C8> <60B1> <60DB> <60B7> <60CA> <60BF> <60C3> <60CD> <60C0> <6332> <6365> <638A> <6382> <637D> <63BD> <639E> <63AD> <639D> <6397> <63AB> <638E> <636F> <6387> <6390> <636E> <63AF> <6375> <639C> <636D> <63AE> <637C> <63A4> <633B> <639F> <6378> <6385> <6381> <6391> <638D> <6370> <6553> <65CD> <6665> <6661> <665B> <6659> <665C> <6662> <6718> <6879> <6887> <6890> <689C> <686D> <68AE> <68AB> <6956> <686F> <68A3> <68AC> endbfrange 100 beginbfrange <68A9> <6875> <6874> <68B2> <688F> <6877> <6892> <687C> <686B> <6872> <68AA> <6880> <6871> <687E> <689B> <6896> <688B> <68A0> <6889> <68A4> <6878> <687B> <6891> <688C> <688A> <687D> <6B36> <6B33> <6B37> <6B91> <6B8F> <6B8D> <6B8C> <6C2A> <6DC0> <6DAB> <6DB4> <6DB3> <6E74> <6DAC> <6DE9> <6DE2> <6DB7> <6DF6> <6DD4> <6E00> <6DC8> <6DE0> <6DDF> <6DD6> <6DBE> <6DE5> <6DDC> <6DDB> <6DF4> <6DCA> <6DBD> <6DED> <6DF0> <6DBA> <6DD5> <6DC2> <6DCF> <6DC9> <6DD0> <6DF2> <6DD3> <6DFD> <6DD7> <6DCD> <6DE3> <6DBB> <70FA> <710D> <70F7> <7117> <70F4> <710C> <70F0> <7104> <70F3> <7110> <70FC> <70FF> <7106> <7113> <7100> <70F8> <70F6> <710B> <7102> <710E> <727E> <727B> <727F> <731D> <7317> <7307> <7311> <7318> endbfrange 100 beginbfrange <730A> <7308> <72FF> <730F> <731E> <7388> <73F6> <73F8> <73F5> <7404> <7401> <73FD> <7407> <7400> <73FA> <73FC> <73FF> <740C> <740B> <73F4> <7408> <7564> <7563> <75CE> <75D2> <75CF> <75CB> <75D1> <75D0> <768F> <7689> <76D3> <7739> <772F> <772D> <7731> <7734> <7733> <773D> <7725> <773B> <7735> <7848> <7852> <7849> <784D> <784A> <784C> <7826> <7845> <7850> <7964> <7967> <7969> <7963> <796B> <7961> <79BB> <79FA> <79F8> <79F6> <7A8F> <7A94> <7A90> <7B35> <7B47> <7B34> <7B25> <7B30> <7B22> <7B24> <7B33> <7B18> <7B2A> <7B1D> <7B31> <7B2B> <7B2D> <7B2F> <7B32> <7B38> <7B1A> <7B23> <7C94> <7C98> <7C96> <7CA3> <7D35> <7D3D> <7D38> <7D36> <7D3A> <7D45> <7D2C> <7D29> <7D41> <7D47> <7D3E> <7D4A> <7D3B> endbfrange 100 beginbfrange <7D28> <7F63> <7F95> <7F9C> <7F9B> <7FCA> <7FCD> <7FD0> <7FC7> <7FCF> <7FC9> <801F> <801E> <801B> <8047> <8043> <8048> <8118> <8125> <8119> <811B> <812D> <811F> <812C> <811E> <8121> <8115> <8127> <811D> <8122> <8211> <8238> <8233> <823A> <8234> <8232> <8274> <8390> <83A3> <83A8> <838D> <837A> <8373> <83A4> <8374> <838F> <8381> <8395> <8399> <8375> <8394> <83A9> <837D> <8383> <838C> <839D> <839B> <83AA> <838B> <837E> <83A5> <83AF> <8388> <8397> <83B0> <837F> <83A6> <8387> <83AE> <8376> <839A> <8659> <8656> <86BF> <86B7> <86C2> <86C1> <86C5> <86BA> <86B0> <86C8> <86B9> <86B3> <86B8> <86CC> <86B4> <86BB> <86C3> <86BD> <8852> <8889> <8895> <88A8> <88A2> <88AA> <889A> <8891> <88A1> <889F> <8898> endbfrange 100 beginbfrange <88A7> <8899> <889B> <8897> <88A4> <88AC> <888C> <8893> <888E> <8982> <89D6> <89D9> <89D5> <8A30> <8A27> <8A2C> <8A1E> <8C39> <8C3B> <8C5C> <8C7D> <8CA5> <8D7D> <8D7B> <8D79> <8DBC> <8DC2> <8DB9> <8DBF> <8DC1> <8ED8> <8EDE> <8EDD> <8EDC> <8ED7> <8EE0> <9024> <900B> <9011> <901C> <900C> <9021> <90EF> <90EA> <90F0> <90F4> <90F2> <90D4> <90EB> <90E9> <9156> <9158> <915A> <9153> <9155> <91EC> <91F4> <91F1> <91F3> <91F8> <91E4> <91F9> <91EA> <91EB> <91F7> <91E8> <91EE> <957A> <9586> <9588> <967C> <966D> <966B> <9671> <966F> <96BF> <976A> <9804> <98E5> <9997> <509B> <5095> <5094> <509E> <508B> <50A3> <5083> <508C> <508E> <509D> <5068> <509C> <5092> <5082> <5087> <515F> <51D4> <5312> <5311> <53A4> endbfrange 100 beginbfrange <53A7> <5591> <55A8> <55A5> <55AD> <5577> <5645> <55A2> <5593> <5588> <558F> <55B5> <5581> <55A3> <5592> <55A4> <557D> <558C> <55A6> <557F> <5595> <55A1> <558E> <570C> <5829> <5837> <5819> <581E> <5827> <5823> <5828> <57F5> <5848> <5825> <581C> <581B> <5833> <583F> <5836> <582E> <5839> <5838> <582D> <582C> <583B> <5961> <5AAF> <5A94> <5A9F> <5A7A> <5AA2> <5A9E> <5A78> <5AA6> <5A7C> <5AA5> <5AAC> <5A95> <5AAE> <5A37> <5A84> <5A8A> <5A97> <5A83> <5A8B> <5AA9> <5A7B> <5A7D> <5A8C> <5A9C> <5A8F> <5A93> <5A9D> <5BEA> <5BCD> <5BCB> <5BD4> <5BD1> <5BCA> <5BCE> <5C0C> <5C30> <5D37> <5D43> <5D6B> <5D41> <5D4B> <5D3F> <5D35> <5D51> <5D4E> <5D55> <5D33> <5D3A> <5D52> <5D3D> <5D31> <5D59> <5D42> <5D39> endbfrange 100 beginbfrange <5D49> <5D38> <5D3C> <5D32> <5D36> <5D40> <5D45> <5E44> <5E41> <5F58> <5FA6> <5FA5> <5FAB> <60C9> <60B9> <60CC> <60E2> <60CE> <60C4> <6114> <60F2> <610A> <6116> <6105> <60F5> <6113> <60F8> <60FC> <60FE> <60C1> <6103> <6118> <611D> <6110> <60FF> <6104> <610B> <624A> <6394> <63B1> <63B0> <63CE> <63E5> <63E8> <63EF> <63C3> <649D> <63F3> <63CA> <63E0> <63F6> <63D5> <63F2> <63F5> <6461> <63DF> <63BE> <63DD> <63DC> <63C4> <63D8> <63D3> <63C2> <63C7> <63CC> <63CB> <63C8> <63F0> <63D7> <63D9> <6532> <6567> <656A> <6564> <655C> <6568> <6565> <658C> <659D> <65AE> <65D0> <65D2> <667C> <666C> <667B> <6680> <6671> <6679> <666A> <6672> <6701> <690C> <68D3> <6904> <68DC> <692A> <68EC> <68EA> <68F1> <690F> endbfrange 100 beginbfrange <68D6> <68F7> <68EB> <68E4> <68F6> <6913> <6910> <68F3> <68E1> <6907> <68CC> <6908> <6970> <68B4> <6911> <68EF> <68C6> <6914> <68F8> <68D0> <68FD> <68FC> <68E8> <690B> <690A> <6917> <68CE> <68C8> <68DD> <68E6> <68F4> <68D1> <6906> <68D4> <68E9> <6915> <6925> <68C7> <6B39> <6B3B> <6B3F> <6B3C> <6B94> <6B97> <6B99> <6B95> <6BBD> <6BF0> <6BF2> <6C30> <6DFC> <6E46> <6E1F> <6E49> <6E88> <6E3C> <6E45> <6E62> <6E2B> <6E3F> <6E41> <6E5D> <6E73> <6E1C> <6E33> <6E4B> <6E40> <6E51> <6E3B> <6E03> <6E2E> <6E5E> <6E68> <6E5C> <6E61> <6E31> <6E28> <6E60> <6E71> <6E6B> <6E39> <6E22> <6E30> <6E53> <6E65> <6E27> <6E78> <6E64> <6E77> <6E55> <6E79> <6E52> <6E66> <6E35> <6E5A> <7120> <711E> <712F> <70FB> <712E> endbfrange 100 beginbfrange <7131> <7123> <7125> <7122> <7132> <711F> <7128> <713A> <711B> <724B> <725A> <7288> <7286> <7285> <728B> <7312> <730B> <7330> <7322> <7331> <7333> <7327> <7332> <732D> <7326> <7323> <7335> <730C> <742E> <742C> <7430> <742B> <7416> <741A> <7421> <742D> <7431> <7424> <7423> <741D> <7429> <7420> <7432> <74FB> <752F> <756F> <756C> <75E7> <75DA> <75E1> <75E6> <75DD> <75DF> <75E4> <75D7> <7695> <7692> <76DA> <7746> <7744> <774D> <7745> <774A> <774E> <774B> <77DE> <77EC> <7860> <7864> <785C> <786D> <7871> <786A> <786E> <7870> <7869> <7868> <785E> <7862> <7974> <7973> <7972> <7970> <7A02> <7A0A> <7A03> <7A0C> <7A04> <7A99> <7AE6> <7AE4> <7B4A> <7B3B> <7B44> <7B48> <7B4C> <7B4E> <7B40> <7B58> <7B45> endbfrange 100 beginbfrange <7CA2> <7C9E> <7CA8> <7CA1> <7D58> <7D6F> <7D63> <7D53> <7D56> <7D67> <7D6A> <7D4F> <7D6D> <7D5C> <7D6B> <7D52> <7D54> <7D69> <7D51> <7D5F> <7D4E> <7F3E> <7F65> <7F66> <7FA2> <7FA0> <7FD7> <8051> <804F> <80FE> <80D4> <8143> <814A> <8152> <814F> <8147> <813D> <814D> <813A> <81E6> <81EE> <81F7> <8204> <823C> <823F> <8275> <833B> <83CF> <83F9> <8423> <83C0> <83E8> <8412> <83E7> <83E4> <83FC> <83F6> <8410> <83C6> <83C8> <83EB> <83E3> <83BF> <8401> <83DD> <83E5> <83D8> <83FF> <83E1> <83CB> <83CE> <83D6> <83F5> <83C9> <8409> <840F> <83DE> <8411> <8406> <83C2> <83F3> <83D5> <83FA> <83C7> <83D1> <83EA> <8413> <83C3> <83EC> <83EE> <83C4> <83FB> <83D7> <83E2> <841B> <83DB> <83FE> <86D8> <86E2> <86E6> endbfrange 100 beginbfrange <86D3> <86E3> <86DA> <86EA> <86DD> <86EB> <86DC> <86EC> <86E9> <86D7> <86E8> <86D1> <8848> <8856> <8855> <88BA> <88D7> <88B9> <88B8> <88C0> <88BE> <88B6> <88BC> <88B7> <88BD> <88B2> <8901> <88C9> <8995> <8998> <8997> <89DD> <89DA> <8A4E> <8A4D> <8A39> <8A59> <8A40> <8A57> <8A44> <8A52> <8A48> <8A51> <8A4A> <8A4C> <8A4F> <8C5F> <8C81> <8C80> <8CBA> <8CBE> <8CB0> <8CB9> <8CB5> <8D84> <8D80> <8D89> <8DD8> <8DD3> <8DCD> <8DC7> <8DD6> <8DDC> <8DCF> <8DD5> <8DD9> <8DC8> <8DD7> <8DC5> <8EEF> <8EF7> <8EFA> <8EF9> <8EE6> <8EEE> <8EE5> <8EF5> <8EE7> <8EF6> <8EEB> <8EF1> <8EEC> <8EF4> <8EE9> <902D> <9034> <902F> <9106> <912C> <9104> <90FF> <90FC> <9108> <90F9> <90FB> <9101> <9100> <9107> <9105> <9103> endbfrange 100 beginbfrange <9161> <9164> <915F> <9162> <9160> <9201> <920A> <9225> <9203> <921A> <9226> <920F> <920C> <9200> <9212> <91FF> <91FD> <9206> <9204> <9227> <9202> <921C> <9224> <9219> <9217> <9205> <9216> <957B> <958D> <958C> <9590> <9687> <967E> <9688> <9689> <9683> <9680> <96C2> <96C8> <96C3> <96F1> <96F0> <976C> <9770> <976E> <9807> <98A9> <98EB> <9CE6> <9EF9> <4E83> <4EB6> <50BD> <50BF> <50C6> <50AE> <50C4> <50CA> <50B4> <50C8> <50C2> <50B0> <50C1> <50BA> <50B1> <50CB> <50C9> <50B6> <50B8> <51D7> <527A> <5278> <527B> <55C3> <55DB> <55CC> <55D0> <55CB> <55CA> <55DD> <55C0> <55D4> <55C4> <55E9> <55BF> <55D2> <558D> <55CF> <55D5> <55E2> <55D6> <55C8> <55F2> <55CD> <55D9> <55C2> <5714> <5853> <5868> <5864> endbfrange 100 beginbfrange <584F> <584D> <5849> <586F> <5855> <584E> <585D> <5859> <5865> <585B> <583D> <5863> <5871> <58FC> <5AC7> <5AC4> <5ACB> <5ABA> <5AB8> <5AB1> <5AB5> <5AB0> <5ABF> <5AC8> <5ABB> <5AC6> <5AB7> <5AC0> <5ACA> <5AB4> <5AB6> <5ACD> <5AB9> <5A90> <5BD6> <5BD8> <5C1F> <5C33> <5D71> <5D63> <5D4A> <5D65> <5D72> <5D6C> <5D5E> <5D68> <5D67> <5D62> <5DF0> <5E4F> <5E4E> <5E4A> <5E4D> <5E4B> <5EC5> <5ECC> <5EC6> <5ECB> <5EC7> <5F40> <5FAF> <5FAD> <60F7> <6149> <612B> <6145> <6136> <6132> <612E> <6146> <612F> <614F> <6129> <6140> <6220> <9168> <6223> <6225> <6224> <63C5> <63F1> <63EB> <6410> <6412> <6409> <6420> <6424> <6433> <6443> <641F> <6415> <6418> <6439> <6437> <6422> <640C> <6426> <6430> <6428> <6441> endbfrange 100 beginbfrange <6435> <642F> <640A> <641A> <6440> <6425> <6427> <640B> <63E7> <641B> <642E> <6421> <640E> <656F> <6592> <65D3> <6686> <668C> <6695> <6690> <668B> <668A> <6699> <6694> <6678> <6720> <6966> <695F> <6938> <694E> <6962> <6971> <693F> <6945> <696A> <6939> <6942> <6957> <6959> <697A> <6948> <6935> <696C> <6933> <693D> <6965> <68F0> <6978> <6934> <6969> <6940> <696F> <6944> <6976> <6958> <6941> <6974> <694C> <693B> <694B> <6937> <695C> <694F> <6951> <6932> <6952> <692F> <697B> <693C> <6B46> <6B45> <6B43> <6B42> <6B48> <6B41> <6B9B> <6BFB> <6BF9> <6BF7> <6E9B> <6ED6> <6EC8> <6E8F> <6EC0> <6E9F> <6E93> <6EA0> <6EB1> <6EB9> <6EC6> <6ED2> <6EBD> <6EC1> <6E9E> <6EC9> <6EB7> <6EB0> <6ECD> <6EA6> endbfrange 100 beginbfrange <6ECF> <6EB2> <6EBE> <6EC3> <6EDC> <6ED8> <6E99> <6E92> <6E8E> <6E8D> <6EA4> <6EA1> <6EBF> <6EB3> <6ED0> <6ECA> <6E97> <6EAE> <6EA3> <7147> <7154> <7152> <7163> <7160> <7141> <715D> <7162> <7172> <7178> <716A> <7161> <7142> <7158> <7143> <714B> <7170> <715F> <7150> <7153> <7144> <714D> <715A> <724F> <728D> <728C> <7291> <7290> <728E> <733C> <7342> <733B> <733A> <7340> <734A> <7349> <7444> <744A> <7452> <7451> <7457> <7440> <744F> <744E> <7442> <7446> <744D> <7454> <74E1> <74FF> <74FE> <74FD> <751D> <7579> <7577> <6983> <75EF> <760F> <7603> <75F7> <75FE> <75FC> <75F9> <75F8> <7610> <75FB> <75F6> <75ED> <75F5> <75FD> <7699> <76B5> <76DD> <7755> <775F> <7752> <7756> <775A> <7769> <7767> <7754> endbfrange 100 beginbfrange <7759> <776D> <77E0> <7887> <789A> <7894> <788F> <7884> <7895> <7885> <78A1> <7883> <7879> <7899> <7880> <7896> <787B> <797C> <7982> <797D> <7979> <7A11> <7A18> <7A12> <7A17> <7A15> <7A22> <7A13> <7A1B> <7A10> <7AA3> <7AA2> <7A9E> <7AEB> <7B66> <7B64> <7B6D> <7B74> <7B69> <7B72> <7B65> <7B73> <7B71> <7B70> <7B61> <7B78> <7B76> <7B63> <7CB2> <7CB4> <7CAF> <7D88> <7D86> <7D80> <7D8D> <7D7F> <7D85> <7D7A> <7D8E> <7D7B> <7D83> <7D7C> <7D8C> <7D94> <7D84> <7D7D> <7D92> <7F6D> <7F6B> <7F67> <7F6C> <7FA6> <7FA5> <7FA7> <7FDB> <8021> <8164> <8160> <8177> <815C> <8169> <815B> <8162> <8172> <6721> <815E> <8176> <8167> <816F> <8144> <8161> <821D> <8249> <8244> <8240> <8242> <8245> <84F1> <843F> <8456> endbfrange 100 beginbfrange <8476> <8479> <848F> <848D> <8465> <8451> <8440> <8486> <8467> <8430> <844D> <847D> <845A> <8459> <8474> <8473> <845D> <8507> <845E> <8437> <843A> <8434> <847A> <8443> <8478> <8432> <8445> <8429> <83D9> <844B> <842F> <8442> <842D> <845F> <8470> <8439> <844E> <844C> <8452> <846F> <84C5> <848E> <843B> <8447> <8436> <8433> <8468> <847E> <8444> <842B> <8460> <8454> <846E> <8450> <870B> <8704> <86F7> <870C> <86FA> <86D6> <86F5> <874D> <86F8> <870E> <8709> <8701> <86F6> <870D> <8705> <88D6> <88CB> <88CD> <88DE> <88DB> <88DA> <88CC> <88D0> <8985> <899B> <89DF> <89E5> <89E4> <89E1> <89E0> <89E2> <89DC> <89E6> <8A76> <8A86> <8A7F> <8A61> <8A3F> <8A77> <8A82> <8A84> <8A75> <8A83> <8A81> <8A74> <8A7A> endbfrange 100 beginbfrange <8C3C> <8C4B> <8C4A> <8C65> <8C64> <8C66> <8C86> <8C84> <8CCC> <8D68> <8D91> <8D8C> <8D8E> <8D8D> <8D93> <8D90> <8D92> <8DF0> <8DE0> <8DEC> <8DF1> <8DEE> <8DD0> <8DE9> <8DE3> <8DE2> <8DE7> <8DF2> <8DEB> <8DF4> <8F06> <8EFF> <8F01> <8F00> <8F05> <8F07> <8F02> <8F0B> <9052> <903F> <9044> <9049> <903D> <9110> <910D> <910F> <9111> <9116> <9114> <910B> <910E> <916E> <9248> <9252> <9230> <923A> <9266> <9233> <9265> <925E> <9283> <922E> <924A> <9246> <926D> <926C> <924F> <9260> <9267> <926F> <9236> <9261> <9270> <9231> <9254> <9263> <9250> <9272> <924E> <9253> <924C> <9256> <9232> <959F> <959C> <959E> <959B> <9692> <9691> <9697> <96CE> <96FA> <96FD> <96F8> <96F5> <9773> <9777> <9772> <980F> <980D> endbfrange 100 beginbfrange <98AC> <98F6> <98F9> <99AF> <99B2> <99B0> <99B5> <9AAD> <9AAB> <9B5B> <9CEA> <9CED> <9CE7> <9E80> <9EFD> <50E6> <50D4> <50D7> <50E8> <50F3> <50DB> <50EA> <50DD> <50E4> <50D3> <50EC> <50F0> <50EF> <50E3> <50E0> <51D8> <5280> <52E9> <52EB> <5330> <53AC> <5627> <5615> <560C> <5612> <55FC> <560F> <561C> <5601> <5613> <5602> <55FA> <561D> <5604> <55FF> <55F9> <5889> <587C> <5890> <5898> <5886> <5881> <587F> <5874> <588B> <587A> <5887> <5891> <588E> <5876> <5882> <5888> <587B> <5894> <588F> <58FE> <596B> <5ADC> <5AEE> <5AE5> <5AD5> <5AEA> <5ADA> <5AED> <5AEB> <5AF3> <5AE2> <5AE0> <5ADB> <5AEC> <5ADE> <5ADD> <5AD9> <5AE8> <5ADF> <5B77> <5BE0> <5BE3> <5C63> <5D82> <5D80> <5D7D> <5D86> <5D7A> <5D81> endbfrange 100 beginbfrange <5D77> <5D8A> <5D89> <5D88> <5D7E> <5D7C> <5D8D> <5D79> <5D7F> <5E58> <5E53> <5ED8> <5ED1> <5ED7> <5ECE> <5EDC> <5ED5> <5ED9> <5ED2> <5ED4> <5F44> <5F43> <5F6F> <5FB6> <612C> <6128> <6141> <615E> <6171> <6173> <6152> <6172> <616C> <6180> <6174> <6154> <617A> <615B> <6165> <613B> <616A> <6161> <6156> <6229> <6227> <622B> <642B> <644D> <645B> <645D> <6474> <6476> <6472> <647D> <6475> <6466> <64A6> <644E> <6482> <645E> <645C> <644B> <6453> <6460> <6450> <647F> <643F> <646C> <646B> <6459> <6465> <6477> <6573> <65A0> <66A1> <66A0> <669F> <6705> <6704> <6722> <69B1> <69B6> <69C9> <69A0> <69CE> <6996> <69B0> <69AC> <69BC> <6991> <6999> <698E> <69A7> <698D> <69A9> <69BE> <69AF> <69BF> <69C4> <69BD> endbfrange 100 beginbfrange <69A4> <69D4> <69B9> <69CA> <699A> <69CF> <69B3> <6993> <69AA> <69A1> <699E> <69D9> <6997> <6990> <69C2> <69B5> <69A5> <69C6> <6B4A> <6B4D> <6B4B> <6B9E> <6BC3> <6BFE> <6ECE> <6EF5> <6EF1> <6F03> <6F25> <6EF8> <6F37> <6EFB> <6F2E> <6F09> <6F4E> <6F19> <6F27> <6F18> <6F3B> <6F12> <6EED> <6F0A> <6F36> <6F73> <6EF9> <6EEE> <6F2D> <6F40> <6F30> <6F3C> <6F35> <6EEB> <6F07> <6F0E> <6F43> <6F05> <6EFD> <6EF6> <6F39> <6F1C> <6EFC> <6F3A> <6F1F> <6F0D> <6F1E> <6F08> <6F21> <7187> <7190> <7189> <7180> <7185> <7182> <718F> <717B> <7186> <7181> <7197> <7244> <7253> <7297> <7295> <7293> <7343> <734D> <7351> <734C> <7462> <7473> <7471> <7475> <7472> <7467> <746E> <7500> <7502> <757D> <7590> <7616> <7608> endbfrange 100 beginbfrange <760C> <7615> <7611> <760A> <7614> <76B8> <7781> <777C> <7785> <7782> <776E> <7780> <776F> <777E> <7783> <78B2> <78AA> <78B4> <78AD> <78A8> <787E> <78AB> <789E> <78A5> <78A0> <78AC> <78A2> <78A4> <7998> <798A> <7996> <7995> <7994> <7993> <7997> <7988> <7992> <7990> <7A2B> <7A4A> <7A30> <7A2F> <7A28> <7A26> <7AA8> <7AAB> <7AEE> <7B88> <7B9C> <7B8A> <7B91> <7B90> <7B96> <7B8D> <7B8C> <7B9B> <7B8E> <7B85> <7B98> <5284> <7B99> <7BA4> <7B82> <7CBB> <7CBF> <7CBC> <7CBA> <7DA7> <7DB7> <7DC2> <7DA3> <7DAA> <7DC1> <7DC0> <7DC5> <7D9D> <7DCE> <7DC4> <7DC6> <7DCB> <7DAF> <7DB9> <7D96> <7DBC> <7D9F> <7DA6> <7DAE> <7DA9> <7DA1> <7DC9> <7F73> <7FE2> <7FE5> <7FDE> <8024> <805D> <805C> <8189> <8186> <8183> endbfrange 100 beginbfrange <8187> <818D> <818C> <818B> <8215> <8497> <84A4> <84A1> <849F> <84BA> <84CE> <84C2> <84AC> <84AE> <84AB> <84B9> <84B4> <84C1> <84CD> <84AA> <849A> <84B1> <84D0> <849D> <84A7> <84BB> <84A2> <8494> <84C7> <84CC> <849B> <84A9> <84AF> <84A8> <84D6> <8498> <84B6> <84CF> <84A0> <84D7> <84D4> <84D2> <84DB> <84B0> <8491> <8661> <8733> <8723> <8728> <876B> <8740> <872E> <871E> <8721> <8719> <871B> <8743> <872C> <8741> <873E> <8746> <8720> <8732> <872A> <872D> <873C> <8712> <873A> <8731> <8735> <8742> <8726> <8738> <8724> <871A> <8730> <8711> <88F7> <88E7> <88F1> <88FA> <88FE> <88EE> <88FC> <88F6> <88FB> <88F0> <88EC> <88EB> <899D> <89A1> <899F> <899E> <89E9> <89EB> <89E8> <8AAB> <8A99> <8A8B> <8A92> endbfrange 100 beginbfrange <8A8F> <8A96> <8C3D> <8C68> <8CD5> <8CCF> <8CD7> <8D96> <8E09> <8E02> <8DFF> <8E0D> <8DFD> <8E0A> <8E03> <8E07> <8E06> <8E05> <8DFE> <8E00> <8E04> <8F10> <8F0E> <8F0D> <9123> <911C> <9120> <9122> <911F> <911D> <911A> <9124> <9121> <911B> <917A> <9172> <9179> <9173> <92A5> <92A4> <9276> <929B> <927A> <92A0> <9294> <92AA> <928D> <92A6> <929A> <92AB> <9279> <9297> <927F> <92A3> <92EE> <928E> <9282> <9295> <92A2> <927D> <9288> <92A1> <928A> <9286> <928C> <9299> <92A7> <927E> <9287> <92A9> <929D> <928B> <922D> <969E> <96A1> <96FF> <9758> <977D> <977A> <977E> <9783> <9780> <9782> <977B> <9784> <9781> <977F> <97CE> <97CD> <9816> <98AD> <9902> <9900> <9907> <999D> <999C> <99C3> <99B9> <99BB> <99BA> endbfrange 100 beginbfrange <99C2> <99BD> <99C7> <9AB1> <9AE3> <9AE7> <9B3E> <9B60> <9B5F> <9CF1> <9CF5> <9EA7> <50FF> <5103> <5130> <50F8> <5106> <50F6> <50FE> <510B> <50FD> <510A> <528B> <52F1> <52EF> <5648> <5642> <564C> <5635> <5641> <564A> <5649> <5646> <5658> <565A> <5640> <5633> <563D> <562C> <563E> <5638> <562A> <563A> <571A> <58AB> <589D> <58B1> <58A0> <58A3> <58AF> <58AC> <58A5> <58A1> <58FF> <5AFF> <5AF4> <5AFD> <5AF7> <5AF6> <5B03> <5AF8> <5B02> <5AF9> <5B01> <5B07> <5B05> <5B0F> <5C67> <5D99> <5D97> <5D9F> <5D92> <5DA2> <5D93> <5D95> <5DA0> <5D9C> <5DA1> <5D9A> <5D9E> <5E69> <5E5D> <5E60> <5E5C> <7DF3> <5EDB> <5EDE> <5EE1> <5F49> <5FB2> <618B> <6183> <6179> <61B1> <61B0> <61A2> <6189> <619B> <6193> <61AF> endbfrange 100 beginbfrange <61AD> <619F> <6192> <61AA> <61A1> <618D> <6166> <61B3> <622D> <646E> <6470> <6496> <64A0> <6485> <6497> <649C> <648F> <648B> <648A> <648C> <64A3> <649F> <6468> <64B1> <6498> <6576> <657A> <6579> <657B> <65B2> <66B5> <66B0> <66A9> <66B2> <66B7> <66AA> <66AF> <6A00> <6A06> <6A17> <69E5> <69F8> <6A15> <69F1> <69E4> <6A20> <69FF> <69EC> <69E2> <6A1B> <6A1D> <69FE> <6A27> <69F2> <69EE> <6A14> <69F7> <69E7> <6A40> <6A08> <69E6> <69FB> <6A0D> <69FC> <69EB> <6A09> <6A04> <6A18> <6A25> <6A0F> <69F6> <6A26> <6A07> <69F4> <6A16> <6B51> <6BA5> <6BA3> <6BA2> <6BA6> <6C01> <6C00> <6BFF> <6C02> <6F41> <6F26> <6F7E> <6F87> <6FC6> <6F92> <6F8D> <6F89> <6F8C> <6F62> <6F4F> <6F85> <6F5A> <6F96> <6F76> <6F6C> endbfrange 100 beginbfrange <6F82> <6F55> <6F72> <6F52> <6F50> <6F57> <6F94> <6F93> <6F5D> <6F00> <6F61> <6F6B> <6F7D> <6F67> <6F90> <6F53> <6F8B> <6F69> <6F7F> <6F95> <6F63> <6F77> <6F6A> <6F7B> <71B2> <71AF> <719B> <71B0> <71A0> <719A> <71A9> <71B5> <719D> <71A5> <719E> <71A4> <71A1> <71AA> <719C> <71A7> <71B3> <7298> <729A> <7358> <7352> <735E> <735D> <735B> <7361> <735A> <7359> <7362> <7487> <7489> <7486> <7481> <747D> <7485> <7488> <747C> <7479> <7508> <7507> <757E> <7625> <761E> <7619> <761D> <761C> <7623> <761A> <7628> <761B> <769C> <769B> <778D> <778F> <7789> <7788> <78CD> <78BB> <78CF> <78CC> <78D1> <78CE> <78D4> <78C8> <78C3> <78C9> <799A> <79A1> <79A0> <799C> <79A2> <799B> <6B76> <7A39> <7AB2> <7AB4> <7AB3> endbfrange 100 beginbfrange <7BB7> <7BCB> <7BBE> <7BAC> <7BCE> <7BAF> <7BB9> <7BCA> <7BB5> <7CC5> <7CC8> <7CCC> <7CCB> <7DF7> <7DDB> <7DEA> <7DE7> <7DD7> <7DE1> <7E03> <7DFA> <7DE6> <7DF6> <7DF1> <7DF0> <7DEE> <7DDF> <7F76> <7FAC> <7FB0> <7FAD> <7FED> <7FEB> <7FEA> <7FEC> <7FE6> <7FE8> <8064> <8067> <81A3> <819F> <819E> <8195> <81A2> <8199> <8197> <8216> <824F> <8253> <8252> <8250> <824E> <8251> <8524> <853B> <850F> <8500> <8529> <850E> <8509> <850D> <851F> <850A> <8527> <851C> <84FB> <852B> <84FA> <8508> <850C> <84F4> <852A> <84F2> <8515> <84F7> <84EB> <84F3> <84FC> <8512> <84EA> <84E9> <8516> <84FE> <8528> <851D> <852E> <8502> <84FD> <851E> <84F6> <8531> <8526> <84E7> <84F0> <84EF> <84F9> <8518> <8520> <8530> <850B> endbfrange 100 beginbfrange <8519> <852F> <8662> <8756> <8763> <8777> <87E1> <8773> <8758> <8754> <875B> <8752> <8761> <875A> <8751> <875E> <876D> <876A> <8750> <874E> <875F> <875D> <876F> <876C> <877A> <876E> <875C> <8765> <874F> <877B> <8775> <8762> <8767> <8769> <885A> <8905> <890C> <8914> <890B> <8917> <8906> <8916> <8911> <890E> <8909> <89A2> <89A4> <89A3> <89ED> <89F0> <89EC> <8ACF> <8AC6> <8AB8> <8AD3> <8AD1> <8AD4> <8ABB> <8AD7> <8ABE> <8AC0> <8AC5> <8AD8> <8AC3> <8ABA> <8ABD> <8AD9> <8C3E> <8C4D> <8C8F> <8CE5> <8CDF> <8CD9> <8CE8> <8CDA> <8CDD> <8CE7> <8DA0> <8D9C> <8DA1> <8D9B> <8E20> <8E23> <8E25> <8E24> <8E2E> <8E15> <8E1B> <8E16> <8E11> <8E19> <8E26> <8E14> <8E12> <8E18> <8E13> <8E1C> <8E17> <8E1A> <8F2C> endbfrange 100 beginbfrange <8F24> <8F18> <8F1A> <8F20> <8F23> <8F16> <9073> <9070> <906F> <9067> <906B> <912F> <912B> <9129> <9132> <9126> <912E> <9185> <918A> <9181> <9184> <9180> <92D0> <92C3> <92C0> <92D9> <92B6> <92CF> <92F1> <92DF> <92D8> <92E9> <92D7> <92DD> <92CC> <92EF> <92C2> <92E8> <92CA> <92C8> <92CE> <92E6> <92CD> <92D5> <92C9> <92E0> <92DE> <92E7> <92D1> <92D3> <92B5> <92E1> <92C6> <92B4> <957C> <95AC> <95AB> <95AE> <95B0> <96A4> <96A2> <96D3> <9705> <9708> <9702> <975A> <978A> <978E> <9788> <97D0> <97CF> <981E> <981D> <9826> <9829> <9828> <9820> <981B> <9827> <98B2> <9908> <98FA> <9911> <9914> <9916> <9915> <99DC> <99CD> <99CF> <99D3> <99CE> <99C9> <99D6> <99D8> <99CB> <99D7> <99CC> <9AB3> <9AEC> <9AEB> endbfrange 100 beginbfrange <9AF3> <9AF2> <9AF1> <9B46> <9B43> <9B67> <9B74> <9B71> <9B66> <9B76> <9B75> <9B70> <9B68> <9B64> <9B6C> <9CFC> <9CFA> <9CFD> <9CFF> <9CF7> <9D07> <9D00> <9CF9> <9CFB> <9D08> <9D05> <9D04> <9E83> <9ED3> <9F0F> <511C> <5113> <5117> <511A> <5111> <51DE> <5334> <53E1> <5670> <5660> <566E> <5673> <5666> <5663> <566D> <5672> <565E> <5677> <571C> <571B> <58C8> <58BD> <58C9> <58BF> <58BA> <58C2> <58BC> <58C6> <5B17> <5B19> <5B1B> <5B21> <5B14> <5B13> <5B10> <5B16> <5B28> <5B1A> <5B20> <5B1E> <5BEF> <5DAC> <5DB1> <5DA9> <5DA7> <5DB5> <5DB0> <5DAE> <5DAA> <5DA8> <5DB2> <5DAD> <5DAF> <5DB4> <5E67> <5E66> <5E6F> <5EE9> <5EE7> <5EE6> <5EE8> <5EE5> <5F4B> <5FBC> <619D> <61A8> <6196> <61C5> <61B4> <61C6> endbfrange 100 beginbfrange <61C1> <61CC> <61BA> <61BF> <61B8> <618C> <64D7> <64D6> <64D0> <64CF> <64C9> <64BD> <6489> <64C3> <64DB> <64F3> <64D9> <6533> <657F> <657C> <65A2> <66C8> <66BE> <66C0> <66CA> <66CF> <66BD> <66BB> <66BA> <66CC> <6723> <6A34> <6A66> <6A49> <6A67> <6A32> <6A68> <6A3E> <6A5D> <6A6D> <6A76> <6A5B> <6A51> <6A28> <6A5A> <6A3B> <6A3F> <6A41> <6A6A> <6A64> <6A50> <6A4F> <6A54> <6A6F> <6A69> <6A60> <6A3C> <6A5E> <6A56> <6A55> <6A4D> <6A46> <6B55> <6B54> <6B56> <6BA7> <6BAA> <6BC8> <6BC7> <6C04> <6C03> <6C06> <6FAD> <6FCB> <6FA3> <6FC7> <6FBC> <6FCE> <6FC8> <6F5E> <6FC4> <6FBD> <6F9E> <6FCA> <6FA8> <7004> <6FA5> <6FAE> <6FBA> <6FAC> <6FAA> <6FCF> <6FBF> <6FB8> <6FA2> <6FC9> <6FAB> <6FCD> <6FAF> <6FB2> endbfrange 100 beginbfrange <6FB0> <71C5> <71C2> <71BF> <71B8> <71D6> <71C0> <71CB> <71D4> <71CA> <71C7> <71CF> <71BD> <71D8> <71BC> <71C6> <71DA> <729D> <7369> <7366> <736C> <7365> <736B> <736A> <747F> <749A> <74A0> <7494> <7492> <7495> <74A1> <750B> <7580> <762F> <762D> <7631> <763D> <7633> <763C> <7635> <7632> <7630> <76BB> <76E6> <779A> <779D> <77A1> <779C> <779B> <77A2> <7795> <7799> <7797> <78DD> <78E9> <78E5> <78EA> <78DE> <78E3> <78DB> <78E1> <78ED> <78DF> <79A4> <7A44> <7A48> <7A47> <7AB6> <7AB8> <7AB5> <7AB1> <7AB7> <7BDE> <7BE3> <7BE7> <7BDD> <7BD5> <7BE5> <7BDA> <7BE8> <7BF9> <7BD4> <7BEA> <7BE2> <7BDC> <7BEB> <7BD8> <7BDF> <7CD2> <7CD4> <7CD7> <7CD0> <7E12> <7E21> <7E17> <7E0C> <7E1F> <7E13> <7E0E> <7E1C> endbfrange 100 beginbfrange <7E15> <7E1A> <7E22> <7E0B> <7E0F> <7E16> <7E0D> <7E14> <7E25> <7E24> <7F43> <7F7B> <7F7A> <7FB1> <7FEF> <802A> <8029> <806C> <81B1> <81A6> <81AE> <81B9> <81B5> <81AB> <81B0> <81AC> <81B4> <81B2> <81B7> <81A7> <81F2> <8255> <8556> <8545> <856B> <854D> <8553> <8561> <8558> <8540> <8546> <8564> <8541> <8562> <8544> <8551> <8547> <8563> <853E> <855B> <8571> <854E> <856E> <8575> <8555> <8567> <8560> <858C> <8566> <855D> <8554> <8565> <856C> <8663> <8665> <8664> <879B> <878F> <8797> <8793> <8792> <8788> <8781> <8796> <8798> <8779> <8787> <87A3> <8785> <8790> <879D> <8784> <8794> <879C> <879A> <8789> <891E> <8926> <8930> <892D> <8927> <8931> <8922> <8929> <8923> <892F> <892C> <891F> <89F1> <8AE0> endbfrange 100 beginbfrange <8AE2> <8AF2> <8AF4> <8ADD> <8B14> <8AE4> <8ADF> <8AF0> <8AC8> <8ADE> <8AE1> <8AE8> <8AFF> <8AEF> <8AFB> <8C91> <8C90> <8CF5> <8CEE> <8CF1> <8CF0> <8CF3> <8D6C> <8D6E> <8DA5> <8DA7> <8E33> <8E3E> <8E38> <8E40> <8E45> <8E36> <8E3C> <8E41> <8E30> <8E3F> <8EBD> <8F36> <8F2E> <8F35> <8F32> <8F39> <8F37> <8F34> <9076> <9079> <907B> <9086> <90FA> <9133> <9135> <9193> <9190> <918D> <918F> <9327> <931E> <9308> <931F> <9306> <930F> <937A> <9338> <933C> <931B> <9323> <9312> <9301> <9346> <932D> <930E> <930D> <92CB> <931D> <92FA> <9325> <9313> <92F9> <92F7> <9334> <9302> <9324> <92FF> <9329> <9339> <9335> <932A> <9314> <930C> <930B> <92FE> <9309> <9300> <92FB> <9316> <95BC> <95CD> <95BE> <95B9> <95B6> endbfrange 100 beginbfrange <95BF> <95B5> <95BD> <96A9> <96D4> <970B> <9712> <9710> <9799> <9797> <9794> <97F0> <97F8> <9835> <982F> <9832> <9924> <991F> <9927> <9929> <999E> <99EE> <99EC> <99E5> <99E4> <99F0> <99E3> <99EA> <99E9> <99E7> <9AB9> <9ABF> <9AB4> <9ABB> <9AF6> <9AFA> <9AF9> <9AF7> <9B33> <9B80> <9B85> <9B87> <9B7C> <9B7E> <9B7B> <9B82> <9B93> <9B92> <9B90> <9B7A> <9B95> <9B7D> <9B88> <9D25> <9D17> <9D20> <9D1E> <9D14> <9D29> <9D1D> <9D18> <9D22> <9D10> <9D19> <9D1F> <9E88> <9E86> <9EAE> <9EAD> <9ED5> <9EFA> <9F12> <9F3D> <5126> <5125> <5122> <5124> <5120> <5129> <52F4> <5693> <568C> <5686> <5684> <5683> <567E> <5682> <567F> <5681> <58D6> <58D4> <58CF> <58D2> <5B2D> <5B25> <5B32> <5B23> <5B2C> <5B27> <5B26> endbfrange 100 beginbfrange <5B2F> <5B2E> <5B7B> <5BF1> <5DB7> <5E6C> <5E6A> <5FBE> <5FBB> <61C3> <61B5> <61BC> <61E7> <61E0> <61E5> <61E4> <61E8> <61DE> <64EF> <64E9> <64E3> <64EB> <64E4> <64E8> <6581> <6580> <65B6> <65DA> <66D2> <6A8D> <6A96> <6A81> <6AA5> <6A89> <6A9F> <6A9B> <6AA1> <6A9E> <6A87> <6A93> <6A8E> <6A95> <6A83> <6AA8> <6AA4> <6A91> <6A7F> <6AA6> <6A9A> <6A85> <6A8C> <6A92> <6B5B> <6BAD> <6C09> <6FCC> <6FA9> <6FF4> <6FD4> <6FE3> <6FDC> <6FED> <6FE7> <6FE6> <6FDE> <6FF2> <6FDD> <6FE2> <6FE8> <71E1> <71F1> <71E8> <71F2> <71E4> <71F0> <71E2> <7373> <736E> <7497> <74B2> <74AB> <7490> <74AA> <74AD> <74B1> <74A5> <74AF> <7510> <750F> <7584> <7643> <7648> <7647> <76A4> <76E9> <77B5> <77AB> <77B2> <77B7> <77B6> endbfrange 100 beginbfrange <77B4> <77B1> <77A8> <77F0> <78F3> <78FD> <7902> <78FB> <78F2> <7905> <78F9> <78FE> <7904> <79AB> <79A8> <7A5C> <7A5B> <7A56> <7A58> <7A54> <7A5A> <7ABE> <7AC0> <7C05> <7C0F> <7BF2> <7C00> <7BFF> <7BFB> <7C0E> <7BF4> <7C0B> <7BF3> <7C02> <7C09> <7C03> <7C01> <7BF8> <7BFD> <7C06> <7BF0> <7C10> <7C0A> <7CE8> <7E2D> <7E3C> <7E42> <7E33> <9848> <7E38> <7E2A> <7E49> <7E40> <7E47> <7E29> <7E4C> <7E30> <7E3B> <7E36> <7E44> <7E3A> <7F45> <7F7F> <7F7E> <7F7D> <7FF4> <7FF2> <802C> <81BB> <81C4> <81CC> <81CA> <81C5> <81C7> <81BC> <81E9> <825B> <825A> <825C> <8583> <8580> <858F> <85A7> <8595> <85A0> <858B> <85A3> <857B> <85A4> <859A> <859E> <8577> <857C> <8589> <85A1> <857A> <8578> <8557> <858E> <8596> endbfrange 100 beginbfrange <8586> <858D> <8599> <859D> <8581> <85A2> <8582> <8588> <8585> <8579> <8576> <8598> <8590> <859F> <8668> <87BE> <87AA> <87AD> <87C5> <87B0> <87AC> <87B9> <87B5> <87BC> <87AE> <87C9> <87C3> <87C2> <87CC> <87B7> <87AF> <87C4> <87CA> <87B4> <87B6> <87BF> <87B8> <87BD> <87DE> <87B2> <8935> <8933> <893C> <893E> <8941> <8952> <8937> <8942> <89AD> <89AF> <89AE> <89F2> <8B1E> <8B18> <8B16> <8B11> <8B05> <8B0B> <8B22> <8B0F> <8B12> <8B15> <8B07> <8B0D> <8B08> <8B06> <8B1C> <8B13> <8B1A> <8C4F> <8C70> <8C72> <8C71> <8C6F> <8C95> <8C94> <8CF9> <8D6F> <8E4E> <8E4D> <8E53> <8E50> <8E4C> <8E47> <8F43> <8F40> <9085> <907E> <9138> <919A> <91A2> <919B> <9199> <919F> <91A1> <919D> <91A0> <93A1> <9383> <93AF> endbfrange 100 beginbfrange <9364> <9356> <9347> <937C> <9358> <935C> <9376> <9349> <9350> <9360> <936D> <938F> <934C> <936A> <9379> <9357> <9355> <9352> <934F> <9371> <9377> <937B> <9361> <935E> <9363> <9367> <9380> <934E> <9359> <95C7> <95C0> <95C9> <95C3> <95C5> <95B7> <96AE> <96B0> <96AC> <9720> <971F> <9718> <971D> <9719> <979A> <97A1> <979C> <979E> <979D> <97D5> <97D4> <97F1> <9841> <9844> <984A> <9849> <9845> <9843> <9925> <992B> <992A> <9933> <9932> <992F> <992D> <9931> <9930> <9998> <99A3> <99A1> <9A02> <99FA> <99F4> <99F7> <99F9> <99F8> <99F6> <99FB> <99FD> <99FC> <9A03> <9ABE> <9AFE> <9AFD> <9B01> <9AFC> <9B48> <9B9A> <9BA8> <9B9E> <9B9B> <9BA6> <9BA1> <9BA5> <9BA4> <9B86> <9BA2> <9BA0> <9BAF> <9D33> <9D41> endbfrange 100 beginbfrange <9D67> <9D36> <9D2E> <9D31> <9D38> <9D30> <9D45> <9D42> <9D3E> <9D37> <9D40> <9D3D> <7FF5> <9D2D> <9E8A> <9E89> <9E8D> <9EB0> <9EC8> <9EDA> <9EFB> <9EFF> <9F24> <9F23> <9F22> <9F54> <9FA0> <5131> <512D> <5698> <569C> <5697> <569A> <569D> <5699> <5970> <5B3C> <5C69> <5DC0> <5E6D> <61D8> <61DF> <61ED> <61F1> <61EA> <61F0> <61EB> <61D6> <61E9> <64FF> <6504> <64FD> <64F8> <6501> <6503> <64FC> <6594> <65DB> <66DA> <66D8> <6AC5> <6AB9> <6ABD> <6AE1> <6AC6> <6ABA> <6AB6> <6AC7> <6AB4> <6AAD> <6B5E> <6BC9> <6C0B> <7007> <700C> <7001> <7005> <7014> <700E> <6FFF> <6FFB> <7026> <6FFC> <6FF7> <700A> <7201> <71FF> <71F9> <7203> <71FD> <7376> <74B8> <74C0> <74B5> <74C1> <74BE> <74B6> <74BB> <74C2> <7514> endbfrange 100 beginbfrange <7513> <765C> <7664> <7659> <7650> <7653> <7657> <765A> <76A6> <76BD> <76EC> <77C2> <77BA> <78FF> <790C> <7913> <7909> <7910> <7912> <7911> <79AD> <79AC> <7A5F> <7C1C> <7C29> <7C19> <7C20> <7C1F> <7C2D> <7C1D> <7C26> <7C28> <7C22> <7C25> <7C30> <7E5C> <7E50> <7E56> <7E63> <7E58> <7E62> <7E5F> <7E51> <7E60> <7E57> <7E53> <7FB5> <7FB3> <7FF7> <8075> <81D1> <81D0> <825F> <825E> <85B4> <85C6> <85C0> <85C3> <85C2> <85B3> <85B5> <85BD> <85C7> <85C4> <85BF> <85CB> <85CE> <85C8> <85C5> <85B1> <85B6> <85D2> <8624> <85B8> <85B7> <85BE> <8669> <87E7> <87E6> <87E2> <87DB> <87EB> <87EA> <87E5> <87DF> <87F3> <87E4> <87D4> <87DC> <87D3> <87ED> <87D8> <87E3> <87A4> <87D7> <87D9> <8801> <87F4> <87E8> <87DD> endbfrange 100 beginbfrange <8953> <894B> <894F> <894C> <8946> <8950> <8949> <8B2A> <8B27> <8B23> <8B33> <8B30> <8B35> <8B47> <8B2F> <8B3C> <8B3E> <8B31> <8B25> <8B37> <8B26> <8B36> <8B2E> <8B24> <8B3B> <8B3D> <8B3A> <8C42> <8C75> <8C99> <8C98> <8C97> <8CFE> <8D04> <8D02> <8D00> <8E5C> <8E62> <8E60> <8E57> <8E56> <8E5E> <8E65> <8E67> <8E5B> <8E5A> <8E61> <8E5D> <8E69> <8E54> <8F46> <8F4B> <9128> <913A> <913E> <91A8> <91A5> <91A7> <91AF> <91AA> <93B5> <938C> <9392> <93B7> <939B> <939D> <9389> <93A7> <938E> <93AA> <939E> <93A6> <9395> <9388> <9399> <939F> <938D> <93B1> <9391> <93B2> <93A4> <93A8> <93B4> <93A3> <93A5> <95D2> <95D1> <96B3> <96D7> <96DA> <5DC2> <96DF> <96D8> <96DD> <9723> <9722> <9725> <97AC> <97AE> <97A8> endbfrange 100 beginbfrange <97AB> <97A4> <97AA> <97A2> <97A5> <97D7> <97D9> <97D6> <97D8> <97FA> <9850> <98B8> <9941> <993C> <993A> <9A0F> <9A0B> <9A09> <9A0D> <9A04> <9A11> <9A0A> <9A05> <9A07> <9A06> <9AC0> <9ADC> <9B08> <9B04> <9B29> <9B35> <9B4A> <9B4C> <9B4B> <9BC7> <9BC6> <9BC3> <9BBF> <9BC1> <9BB5> <9BB8> <9BD3> <9BB6> <9BC4> <9BB9> <9BBD> <9D5C> <9D53> <9D4F> <9D4A> <9D5B> <9D4B> <9D59> <9D56> <9D4C> <9D57> <9D52> <9D54> <9D5F> <9D58> <9D5A> <9E8E> <9E8C> <9EDF> <9F01> <9F00> <9F16> <9F25> <9F2B> <9F2A> <9F29> <9F28> <9F4C> <9F55> <5134> <5296> <52F7> <53B4> <56AB> <56AD> <56A6> <56AA> <56AC> <58DA> <58DD> <58DB> <5912> <5B3D> <5DC3> <5E70> <5FBF> <61FB> <6507> <6510> <650D> <6509> <650C> <650E> <6584> <65DE> endbfrange 100 beginbfrange <65DD> <66DE> <6AE7> <6AE0> <6ACC> <6AD1> <6AD9> <6ACB> <6ADF> <6ADC> <6AD0> <6AEB> <6ACF> <6ACD> <6ADE> <6B60> <6BB0> <6C0C> <7019> <7027> <7020> <7016> <702B> <7021> <7029> <7017> <7024> <701C> <702A> <720C> <720A> <7207> <7202> <7205> <72A5> <72A4> <72A3> <72A1> <74CB> <74C5> <74B7> <74C3> <7516> <7660> <77C9> <77C4> <77F1> <791D> <791B> <7921> <791C> <7917> <791E> <79B0> <7A67> <7C33> <7C3C> <7C39> <7C2C> <7C3B> <7CEC> <7CEA> <7E76> <7E75> <7E78> <7E70> <7E77> <7E6F> <7E7A> <7E72> <7E74> <7E68> <7F4B> <7F4A> <7F83> <7F86> <7FB7> <7FFD> <8078> <81D7> <81D5> <8264> <8261> <8263> <85EB> <85F1> <85ED> <85D9> <85E1> <85E8> <85DA> <85D7> <85EC> <85F2> <85F8> <85D8> <85DF> <85E3> <85DC> <85D1> endbfrange 100 beginbfrange <85F0> <85E6> <85EF> <85DE> <85E2> <8800> <87FA> <8803> <87F6> <8809> <880C> <880B> <8806> <87FC> <8808> <87FF> <880A> <8802> <8962> <895A> <8957> <8961> <895C> <8958> <895D> <8959> <8988> <89B7> <89B6> <89F6> <8B50> <8B48> <8B4A> <8B40> <8B53> <8B56> <8B54> <8B4B> <8B55> <8B51> <8B42> <8B52> <8B57> <8C43> <8C77> <8C76> <8C9A> <8D06> <8D09> <8DAC> <8DAA> <8DAD> <8DAB> <8E6D> <8E78> <8E73> <8E6A> <8E6F> <8E7B> <8EC2> <8F52> <8F51> <8F4F> <8F53> <8FB4> <9140> <913F> <91B0> <91AD> <93DE> <93C7> <93CF> <93C2> <93DA> <93D0> <93F9> <93EC> <93CC> <93D9> <93A9> <93E6> <93CA> <93D4> <93EE> <93E3> <93D5> <93C4> <93CE> <93C0> <93D2> <93E7> <957D> <95DA> <96E1> <9729> <972B> <9728> <9726> <97B3> <97B7> endbfrange 100 beginbfrange <97B6> <97DD> <985C> <9859> <985D> <9857> <98BF> <98BD> <98BB> <98BE> <9948> <9947> <9943> <99A6> <9A1A> <9A15> <9A25> <9A1D> <9A24> <9A1B> <9A22> <9A20> <9A27> <9A23> <9A1E> <9A1C> <9A14> <9AC2> <9B0B> <9B0A> <9B0E> <9B0C> <9B37> <9BEA> <9BE0> <9BDE> <9BE4> <9BE6> <9BE2> <9BF0> <9BD4> <9BD7> <9BEC> <9BDC> <9BD9> <9BE5> <9BD5> <9BE1> <9BDA> <9D77> <9D81> <9D8A> <9D84> <9D88> <9D71> <9D80> <9D78> <9D86> <9D8B> <9D7D> <9D6B> <9D74> <9D70> <9D69> <9D85> <9D73> <9D7B> <9D82> <9D6F> <9D79> <9D7F> <9D87> <9D68> <9E94> <9E91> <9EC0> <9EFC> <9F2D> <9F40> <9F4D> <9F56> <5337> <56B2> <56B5> <56B3> <58E3> <5B45> <5DC6> <5EEE> <5FC0> <61F9> <6517> <6516> <6515> <6513> <65DF> <66E8> <66E3> <6AF3> <6AF0> endbfrange 100 beginbfrange <6AEA> <6AE8> <6AF9> <6AF1> <6AEE> <703C> <7035> <702F> <7037> <7034> <7031> <7042> <7038> <703F> <703A> <7039> <7040> <703B> <7033> <7041> <7213> <72A8> <737D> <737C> <74BA> <76AB> <76AA> <76BE> <76ED> <77CC> <77CE> <77CD> <77F2> <7925> <7923> <7927> <7924> <7929> <79B2> <7A6E> <7A6C> <7AF7> <7C49> <7C48> <7C4A> <7C47> <7C45> <7CEE> <7E7B> <7E7E> <7E81> <7E80> <7FBA> <7FFF> <8079> <81DB> <81D9> <820B> <8268> <8622> <85FF> <8601> <85FE> <861B> <8600> <85F6> <8604> <8609> <8605> <860C> <85FD> <8819> <8810> <8817> <8813> <8816> <8963> <8966> <89B9> <89F7> <8B60> <8B6A> <8B5D> <8B68> <8B63> <8B65> <8B67> <8B6D> <8DAE> <8E86> <8E88> <8E84> <8F59> <8F56> <8F55> <8F58> <8F5A> <908D> <9143> <9141> endbfrange 100 beginbfrange <91B7> <91B5> <91B2> <940B> <9413> <93FB> <9420> <940F> <9414> <93FE> <9415> <9410> <9428> <9419> <940D> <93F5> <9400> <93F7> <9407> <940E> <9416> <9412> <93FA> <9409> <93F8> <940A> <93FF> <93FC> <940C> <93F6> <9411> <9406> <95DE> <95E0> <95DF> <972E> <97B9> <97BB> <97FD> <9860> <9862> <985F> <98C1> <9950> <994E> <9959> <994C> <994B> <9953> <9A32> <9A34> <9A31> <9A2C> <9A2A> <9A36> <9A29> <9A2E> <9A38> <9A2D> <9AC7> <9ACA> <9AC6> <9B10> <9B12> <9B11> <9C0B> <9C08> <9BF7> <9C05> <9C12> <9BF8> <9C40> <9C07> <9C0E> <9C06> <9C17> <9C14> <9C09> <9D9F> <9D99> <9DA4> <9D9D> <9D92> <9D98> <9D90> <9D9B> <9DA0> <9D94> <9D9C> <9DAA> <9D97> <9DA1> <9D9A> <9DA2> <9DA8> <9D9E> <9DA3> <9DBF> <9DA9> <9D96> endbfrange 100 beginbfrange <9DA6> <9E99> <9E9B> <9E9A> <9EE5> <9EE4> <9EE7> <9EE6> <9F30> <9F2E> <9F5B> <9F60> <9F5E> <9F5D> <9F59> <9F91> <513A> <5139> <5298> <5297> <56C3> <56BD> <5B48> <5B47> <5DCB> <5DCF> <5EF1> <61FD> <651B> <6B02> <6AFC> <6B03> <6AF8> <6B00> <7043> <704A> <7048> <7045> <721D> <721A> <7219> <737E> <7517> <766A> <77D0> <792D> <7931> <792F> <7C54> <7C53> <7CF2> <7E8A> <7E87> <7E8B> <7E86> <7E8D> <7F4D> <7FBB> <8030> <81DD> <8618> <862A> <8626> <861F> <8623> <861C> <8619> <8627> <862E> <8621> <8620> <8629> <861E> <8625> <8829> <881D> <881B> <8820> <8824> <881C> <882B> <884A> <896D> <8969> <896E> <896B> <89FA> <8B79> <8B78> <8B45> <8B7A> <8D10> <8D14> <8DAF> <8E8E> <8E8C> <8F5E> <8F5B> <8F5D> <9146> endbfrange 100 beginbfrange <9144> <91B9> <943F> <943B> <9436> <9429> <943D> <943C> <9430> <9439> <942A> <9437> <942C> <9440> <9431> <95E5> <95E4> <95E3> <9735> <973A> <97BF> <97E1> <9864> <98C9> <98C6> <98C0> <9958> <9956> <9A39> <9A3D> <9A46> <9A44> <9A42> <9A41> <9A3A> <9A3F> <9ACD> <9B15> <9B17> <9B16> <9B3A> <9B52> <9C2B> <9C1D> <9C1C> <9C2C> <9C23> <9C28> <9C24> <9C21> <9DB7> <9DB6> <9DBC> <9DC1> <9DC7> <9DCA> <9DCF> <9DBE> <9DC5> <9DC3> <9DBB> <9DB5> <9DCE> <9DB9> <9DAC> <9DC8> <9DB1> <9DAD> <9DCC> <9DB3> <9DCD> <9DB2> <9E7A> <9E9C> <9EEB> <9EEE> <9EED> <9F1B> <9F18> <9F1A> <9F31> <9F4E> <9F65> <9F64> <9F92> <4EB9> <56C6> <56C5> <56CB> <5971> <5B4B> <5DD5> <5DD1> <5EF2> <6521> <6520> <6526> <6522> <6B0B> <6B08> endbfrange 100 beginbfrange <6C0D> <7055> <7052> <721E> <72A9> <737F> <74D8> <74D5> <74D9> <74D7> <766D> <76AD> <7935> <79B4> <7A70> <7C57> <7C5C> <7C59> <7C5B> <7C5A> <7CF4> <7CF1> <7E91> <7F4F> <7F87> <81DE> <826B> <8634> <8633> <862C> <8632> <8636> <882C> <8828> <8826> <882A> <8825> <8971> <89BF> <89BE> <89FB> <8B7E> <8B84> <8B82> <8B86> <8B85> <8B7F> <8D15> <8E95> <8E94> <8E9A> <8E92> <8E90> <8E96> <8F60> <8F62> <9147> <944C> <9450> <944A> <944F> <9447> <9445> <9448> <9446> <973F> <97E3> <986A> <9869> <98CB> <9954> <995B> <9A4E> <9A53> <9A4C> <9A4F> <9A48> <9A4A> <9A49> <9A52> <9A50> <9AD0> <9B19> <9B2B> <9B3B> <9B56> <9B55> <9C46> <9C48> <9C3F> <9C44> <9C39> <9C33> <9C41> <9C3C> <9C37> <9C34> <9C32> <9C3D> <9C36> endbfrange 100 beginbfrange <9DDB> <9DD2> <9DDE> <9DDA> <9DCB> <9DD0> <9DDC> <9DD1> <9DDF> <9DE9> <9DD9> <9DD8> <9DD6> <9DF5> <9DD5> <9DDD> <9EB6> <9EF0> <9F35> <9F33> <9F32> <9F42> <9F6B> <9F95> <9FA2> <513D> <5299> <58E8> <58E7> <5972> <5B4D> <5DD8> <882F> <5F4F> <6201> <6203> <6529> <6525> <6596> <66EB> <6B11> <6B0F> <6BCA> <705B> <705A> <7222> <7382> <7381> <7383> <7670> <77D4> <7C67> <7C66> <7E95> <826C> <863A> <8640> <8639> <863C> <8631> <863B> <863E> <8830> <8832> <882E> <8833> <8976> <8974> <8973> <89FE> <8B8C> <8B8E> <8B8B> <8B88> <8C45> <8D19> <8E98> <8F64> <8F63> <91BC> <9462> <9455> <945D> <9457> <945E> <97C4> <9800> <9A56> <9A59> <9B1E> <9C52> <9C58> <9C50> <9C4A> <9C4D> <9C4B> <9C55> <9C59> <9C4C> <9C4E> endbfrange 100 beginbfrange <9DFB> <9DF7> <9DEF> <9DE3> <9DEB> <9DF8> <9DE4> <9DF6> <9DE1> <9DEE> <9DE6> <9DF2> <9DF0> <9DE2> <9DEC> <9DF4> <9DF3> <9DE8> <9DED> <9EC2> <9ED0> <9EF2> <9F06> <9F1C> <9F38> <9F37> <9F36> <9F43> <9F4F> <9F71> <9F70> <9F6E> <56D3> <56CD> <5B4E> <5C6D> <652D> <66ED> <6B13> <705F> <7061> <705D> <7060> <7223> <74DB> <74E5> <77D5> <7938> <79B7> <79B6> <7C6A> <7E97> <7F89> <826D> <8643> <8838> <8837> <8835> <884B> <8B94> <8E9E> <8E9D> <91BE> <91BD> <91C2> <946B> <9468> <96E5> <9746> <9743> <9747> <97C7> <97E5> <9A5E> <9AD5> <9B59> <9C63> <9C67> <9C66> <9C62> <9C5E> <9C60> <9E02> <9DFE> <9E07> <9E03> <9E06> <9E05> <9E00> <9E09> <9DFF> <9DFD> <9E04> <9EA0> <9F1E> <9F46> <9F74> <56D4> <652E> <65B8> endbfrange 100 beginbfrange <6B18> <6B17> <6B1A> <7062> <7226> <72AA> <77D8> <7939> <7C69> <7C6B> <7CF6> <7E9A> <7E98> <7E9B> <7E99> <81E0> <8646> <8979> <897C> <897B> <89FF> <8B98> <8EA5> <8EA4> <8EA3> <946E> <946D> <946F> <9471> <9473> <9749> <9872> <995F> <9C68> <9C6E> <9C6D> <9E0B> <9E0D> <9E10> <9E0F> <9E12> <9E11> <9EA1> <9EF5> <9F09> <9F47> <9F78> <9F7B> <9F7A> <9F79> <571E> <7066> <7C6F> <883C> <8DB2> <8EA6> <91C3> <9474> <9478> <9476> <9475> <9A60> <9C74> <9C73> <9C71> <9C75> <9E14> <9E13> <9EF6> <9F0A> <9FA4> <7068> <7065> <7CF7> <866A> <883E> <883D> <883F> <8B9E> <8C9C> <8EA9> <8EC9> <974B> <9873> <98CC> <9961> <99AB> <9A64> <9A66> <9B24> <9E15> <9E17> <9F48> <6207> <6B1E> <7227> <864C> <8EA8> <9482> <9480> endbfrange 69 beginbfrange <9A69> <9A68> <9B2E> <9E19> <7229> <864B> <8B9F> <9483> <9C79> <9EB7> <7675> <9A6B> <9C7A> <9E1D> <7069> <9EA4> <9F7E> <9F49> <9F98> <7881> <92B9> <88CF> <58BB> <6052> <7CA7> <5AFA> <2554> <2566> <2557> <2560> <256C> <2563> <255A> <2569> <255D> <2552> <2564> <2555> <255E> <256A> <2561> <2558> <2567> <255B> <2553> <2565> <2556> <255F> <256B> <2562> <2559> <2568> <255C> <2551> <2550> <256D> <2570> <256F> <2593> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/ETen-B5-V b/Resources/cmap/ETen-B5-V deleted file mode 100644 index 5c714a2d751..00000000000 --- a/Resources/cmap/ETen-B5-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (ETen-B5-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (ETen-B5-H) %%BeginResource: CMap (ETen-B5-V) %%Title: (ETen-B5-V Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /ETen-B5-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /ETen-B5-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 920 def /XUID [1 10 25391] def /WMode 1 def 13 begincidrange 13646 13743 13745 130 134 138 142 146 150 154 158 13647 14097 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/ETenms-B5-H b/Resources/cmap/ETenms-B5-H deleted file mode 100644 index aba976eba4c..00000000000 --- a/Resources/cmap/ETenms-B5-H +++ /dev/null @@ -1,55 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (ETenms-B5-H) -%%Title: (ETenms-B5-H Adobe CNS1 0) -%%Version: 7.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/ETen-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /ETenms-B5-H def -/CMapVersion 7.001 def -/CMapType 1 def -/WMode 0 def - -1 begincidrange -<20> <7e> 1 -endcidrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF diff --git a/Resources/cmap/ETenms-B5-V b/Resources/cmap/ETenms-B5-V deleted file mode 100644 index 976ab11c3b7..00000000000 --- a/Resources/cmap/ETenms-B5-V +++ /dev/null @@ -1,75 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (ETenms-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (ETenms-B5-H) -%%BeginResource: CMap (ETenms-B5-V) -%%Title: (ETenms-B5-V Adobe CNS1 0) -%%Version: 7.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/ETenms-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /ETenms-B5-V def -/CMapVersion 7.001 def -/CMapType 1 def -/WMode 1 def - - -18 begincidrange - 13646 - 109 - 312 - 122 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 130 - 134 - 138 - 14097 -endcidrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF diff --git a/Resources/cmap/EUC-H b/Resources/cmap/EUC-H deleted file mode 100644 index 6bde89a8bc1..00000000000 --- a/Resources/cmap/EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (EUC-H) %%Title: (EUC-H Adobe Japan1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 1 def end def /CMapName /EUC-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 680 def /XUID [1 10 25329] def /WMode 0 def 3 begincodespacerange <00> <80> <8EA0> <8EDF> endcodespacerange 1 beginnotdefrange <00> <1f> 231 endnotdefrange 100 begincidrange <20> <7e> 231 <8ea0> <8edf> 326 633 727 741 749 756 771 779 780 790 816 842 925 1011 1035 1059 1092 7479 7481 7491 7495 7503 7499 7507 7523 7515 7531 7539 7480 7482 7494 7498 7506 7502 7514 7530 7522 7538 7554 7511 7526 7519 7534 7542 7508 7527 7516 7535 7545 1125 1219 1313 1407 1501 1595 1689 1783 1877 1971 2065 2159 2253 2347 2441 2535 2629 2723 2817 2911 3005 3099 3193 3287 3381 3475 3569 3663 3757 3851 3945 4039 4090 4184 4278 4372 4466 4560 4654 4748 4842 4936 5030 5124 5218 5312 5406 5500 5594 5688 endcidrange 20 begincidrange 5782 5876 5970 6064 6158 6252 6346 6440 6534 6628 6722 6816 6910 7004 7098 7192 7286 7380 7474 8284 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/EUC-V b/Resources/cmap/EUC-V deleted file mode 100644 index e90e0cefc64..00000000000 --- a/Resources/cmap/EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (EUC-H) %%BeginResource: CMap (EUC-V) %%Title: (EUC-V Adobe Japan1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 0 def end def /CMapName /EUC-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 800 def /XUID [1 10 25330] def /WMode 1 def 27 begincidrange 7887 7889 7891 7894 7899 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Ext-H b/Resources/cmap/Ext-H deleted file mode 100644 index 671f3d11912..00000000000 --- a/Resources/cmap/Ext-H +++ /dev/null @@ -1,739 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Ext-H) -%%Title: (Ext-H Adobe Japan1 2) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 2 def -end def - -/CMapName /Ext-H def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 380 def -/XUID [1 10 25331] def - -/WMode 0 def - -1 begincodespacerange - <2121> <7E7E> -endcodespacerange - -100 begincidrange -<2121> <2168> 633 -<2169> <2169> 7478 -<216a> <217e> 706 -<2221> <222e> 727 -<2330> <2339> 780 -<2341> <235a> 790 -<2361> <237a> 816 -<2421> <2473> 842 -<2521> <2576> 925 -<2621> <2638> 1011 -<2641> <2658> 1035 -<2721> <2741> 1059 -<2751> <2771> 1092 -<2921> <295f> 232 -<2960> <2960> 390 -<2961> <297e> 296 -<2a21> <2a5f> 327 -<2a60> <2a7e> 391 -<2b21> <2b71> 422 -<2b72> <2b72> 295 -<2b73> <2b7e> 503 -<2c24> <2c6f> 7479 -<2d21> <2d3e> 7555 -<2d40> <2d56> 7585 -<2d5f> <2d5f> 8323 -<2d60> <2d6f> 7608 -<2d70> <2d70> 762 -<2d71> <2d71> 761 -<2d72> <2d72> 769 -<2d73> <2d79> 7624 -<2d7a> <2d7a> 768 -<2d7b> <2d7c> 7631 -<3021> <3021> 1125 -<3022> <3022> 7633 -<3023> <3032> 1127 -<3033> <3033> 7330 -<3034> <303a> 1144 -<303b> <303b> 7634 -<303c> <306d> 1152 -<306e> <306e> 7635 -<306f> <3072> 1203 -<3073> <3073> 7636 -<3074> <307b> 1208 -<307c> <307c> 7637 -<307d> <307e> 1217 -<3121> <3129> 1219 -<312a> <312a> 7638 -<312b> <3134> 1229 -<3135> <3135> 7639 -<3136> <3138> 1240 -<3139> <3139> 7640 -<313a> <313b> 1244 -<313c> <313d> 7641 -<313e> <3141> 1248 -<3142> <3142> 7643 -<3143> <316a> 1253 -<316b> <316b> 7644 -<316c> <317e> 1294 -<3221> <3227> 1313 -<3228> <3228> 7645 -<3229> <3229> 7369 -<322a> <322a> 7646 -<322b> <325f> 1323 -<3260> <3260> 7647 -<3261> <3279> 1377 -<327a> <327a> 7648 -<327b> <327c> 1403 -<327d> <327d> 7649 -<327e> <327e> 1406 -<3321> <3321> 1407 -<3322> <3322> 7650 -<3323> <3341> 1409 -<3342> <3342> 6497 -<3343> <3348> 1441 -<3349> <3349> 5023 -<334a> <3364> 1448 -<3365> <3365> 7651 -<3366> <336a> 1476 -<336b> <336b> 7652 -<336c> <3372> 1482 -<3373> <3373> 7653 -<3374> <3375> 1490 -<3376> <3376> 5937 -<3377> <3379> 1493 -<337a> <337a> 7654 -<337b> <337e> 1497 -<3421> <3441> 1501 -<3442> <3442> 7655 -<3443> <3443> 5490 -<3444> <344c> 1536 -<344d> <344d> 7656 -<344e> <3451> 1546 -<3452> <3452> 6688 -<3453> <3464> 1551 -<3465> <3465> 7657 -<3466> <347e> 1570 -<3521> <352a> 1595 -<352b> <352b> 7658 -<352c> <353f> 1606 -<3540> <3540> 7659 -endcidrange - -100 begincidrange -<3541> <357e> 1627 -<3621> <3621> 1689 -<3622> <3622> 7660 -<3623> <3629> 1691 -<362a> <362a> 7661 -<362b> <3645> 1699 -<3646> <3646> 7474 -<3647> <364e> 1727 -<364f> <364f> 7662 -<3650> <366c> 1736 -<366d> <366d> 7663 -<366e> <3673> 1766 -<3674> <3674> 7664 -<3675> <367a> 1773 -<367b> <367b> 7665 -<367c> <367c> 1780 -<367d> <367d> 7666 -<367e> <367e> 1782 -<3721> <3723> 1783 -<3724> <3724> 7667 -<3725> <3736> 1787 -<3737> <3737> 7668 -<3738> <3744> 1806 -<3745> <3745> 7669 -<3746> <374d> 1820 -<374e> <374e> 7670 -<374f> <3751> 1829 -<3752> <3752> 7671 -<3753> <3754> 1833 -<3755> <3755> 7672 -<3756> <375a> 1836 -<375b> <375b> 7181 -<375c> <3763> 1842 -<3764> <3764> 7673 -<3765> <3770> 1851 -<3771> <3771> 7674 -<3772> <3778> 1864 -<3779> <3779> 7675 -<377a> <377d> 1872 -<377e> <377e> 7676 -<3821> <3833> 1877 -<3834> <3834> 7677 -<3835> <3840> 1897 -<3841> <3841> 7678 -<3842> <387e> 1910 -<3921> <392a> 1971 -<392b> <392b> 7679 -<392c> <3936> 1982 -<3937> <3937> 7680 -<3938> <3941> 1994 -<3942> <3942> 7681 -<3943> <395b> 2005 -<395c> <395c> 5853 -<395d> <396c> 2031 -<396d> <396d> 7682 -<396e> <3973> 2048 -<3974> <3974> 7683 -<3975> <3978> 2055 -<3979> <3979> 7684 -<397a> <397e> 2060 -<3a21> <3a52> 2065 -<3a53> <3a53> 7685 -<3a54> <3a66> 2116 -<3a67> <3a67> 7686 -<3a68> <3a73> 2136 -<3a74> <3a74> 7687 -<3a75> <3a7e> 2149 -<3b21> <3b26> 2159 -<3b27> <3b27> 7688 -<3b28> <3b29> 2166 -<3b2a> <3b2a> 7689 -<3b2b> <3b2b> 2169 -<3b2c> <3b2c> 7690 -<3b2d> <3b38> 2171 -<3b39> <3b39> 7691 -<3b3a> <3b7e> 2184 -<3c21> <3c37> 2253 -<3c38> <3c38> 7692 -<3c39> <3c47> 2277 -<3c48> <3c48> 7693 -<3c49> <3c49> 6441 -<3c4a> <3c56> 2294 -<3c57> <3c57> 7694 -<3c58> <3c5c> 2308 -<3c5d> <3c5e> 7695 -<3c5f> <3c7e> 2315 -<3d21> <3d2a> 2347 -<3d2b> <3d2b> 7697 -<3d2c> <3d35> 2358 -<3d36> <3d36> 7698 -<3d37> <3d6b> 2369 -<3d6c> <3d6d> 7699 -<3d6e> <3d71> 2424 -<3d72> <3d73> 7701 -<3d74> <3d7e> 2430 -<3e21> <3e24> 2441 -<3e25> <3e25> 7703 -<3e26> <3e32> 2446 -<3e33> <3e33> 7704 -<3e34> <3e3e> 2460 -endcidrange - -100 begincidrange -<3e3f> <3e3f> 7705 -<3e40> <3e54> 2472 -<3e55> <3e55> 7706 -<3e56> <3e5e> 2494 -<3e5f> <3e5f> 7707 -<3e60> <3e63> 2504 -<3e64> <3e64> 7708 -<3e65> <3e7e> 2509 -<3f21> <3f29> 2535 -<3f2a> <3f2a> 7709 -<3f2b> <3f58> 2545 -<3f59> <3f59> 7710 -<3f5a> <3f5f> 2592 -<3f60> <3f60> 7711 -<3f61> <3f68> 2599 -<3f69> <3f69> 7712 -<3f6a> <3f7e> 2608 -<4021> <4021> 2629 -<4022> <4022> 7713 -<4023> <4041> 2631 -<4042> <4042> 7714 -<4043> <4065> 2663 -<4066> <4066> 7715 -<4067> <4070> 2699 -<4071> <4072> 7716 -<4073> <4078> 2711 -<4079> <407a> 7718 -<407b> <407e> 2719 -<4121> <4126> 2723 -<4127> <4127> 7720 -<4128> <4128> 6766 -<4129> <4138> 2731 -<4139> <4139> 7721 -<413a> <414b> 2748 -<414c> <414c> 7722 -<414d> <414e> 2767 -<414f> <414f> 7723 -<4150> <415e> 2770 -<415f> <415f> 7724 -<4160> <4168> 2786 -<4169> <4169> 7725 -<416a> <417e> 2796 -<4221> <423c> 2817 -<423d> <423d> 7726 -<423e> <424c> 2846 -<424d> <424d> 7727 -<424e> <425b> 2862 -<425c> <425c> 7728 -<425d> <4262> 2877 -<4263> <4263> 7729 -<4264> <426e> 2884 -<426f> <426f> 7730 -<4270> <4274> 2896 -<4275> <4276> 7731 -<4277> <427c> 2903 -<427d> <427d> 7733 -<427e> <427e> 2910 -<4321> <4326> 2911 -<4327> <4327> 7734 -<4328> <4328> 2918 -<4329> <432a> 7735 -<432b> <432c> 2921 -<432d> <432e> 7737 -<432f> <433c> 2925 -<433d> <433d> 7739 -<433e> <436f> 2940 -<4370> <4370> 7740 -<4371> <4374> 2991 -<4375> <4375> 7741 -<4376> <437b> 2996 -<437c> <437c> 7742 -<437d> <437e> 3003 -<4421> <443c> 3005 -<443d> <443d> 7743 -<443e> <4447> 3034 -<4448> <4448> 7744 -<4449> <4449> 3045 -<444a> <444a> 7745 -<444b> <444c> 3047 -<444d> <444d> 7746 -<444e> <444e> 3050 -<444f> <444f> 7747 -<4450> <445a> 3052 -<445b> <445b> 4533 -<445c> <447e> 3064 -<4521> <4521> 3099 -<4522> <4522> 7748 -<4523> <4526> 3101 -<4527> <4527> 7749 -<4528> <452d> 3106 -<452e> <452e> 7750 -<452f> <4535> 3113 -<4536> <4536> 7751 -<4537> <453e> 3121 -<453f> <453f> 7752 -<4540> <4547> 3130 -<4548> <4548> 7753 -<4549> <454a> 3139 -<454b> <454b> 7754 -<454c> <4550> 3142 -endcidrange - -100 begincidrange -<4551> <4552> 7755 -<4553> <4556> 3149 -<4557> <4557> 5855 -<4558> <4563> 3154 -<4564> <4564> 7757 -<4565> <456d> 3167 -<456e> <456e> 5200 -<456f> <4572> 3177 -<4573> <4573> 5430 -<4574> <4577> 3182 -<4578> <4578> 7758 -<4579> <457e> 3187 -<4621> <463d> 3193 -<463e> <463e> 7759 -<463f> <4641> 3223 -<4642> <4642> 7760 -<4643> <4653> 3227 -<4654> <4655> 7761 -<4656> <465a> 3246 -<465b> <465c> 7763 -<465d> <4660> 3253 -<4661> <4661> 7765 -<4662> <4665> 3258 -<4666> <4667> 7766 -<4668> <4669> 3264 -<466a> <466a> 7768 -<466b> <4675> 3267 -<4676> <4676> 6893 -<4677> <467e> 3279 -<4721> <4728> 3287 -<4729> <4729> 7769 -<472a> <4738> 3296 -<4739> <4739> 7770 -<473a> <4756> 3312 -<4757> <4757> 7771 -<4758> <4766> 3342 -<4767> <4767> 7772 -<4768> <4768> 6537 -<4769> <4769> 7773 -<476a> <476c> 3360 -<476d> <476d> 7774 -<476e> <477e> 3364 -<4821> <4823> 3381 -<4824> <4824> 7775 -<4825> <482d> 3385 -<482e> <482e> 7776 -<482f> <482f> 3395 -<4830> <4830> 7777 -<4831> <4853> 3397 -<4854> <4854> 7778 -<4855> <4861> 3433 -<4862> <4862> 7779 -<4863> <4874> 3447 -<4875> <4875> 7780 -<4876> <487e> 3466 -<4921> <4921> 3475 -<4922> <4923> 7781 -<4924> <492e> 3478 -<492f> <492f> 7783 -<4930> <4930> 5179 -<4931> <4931> 3491 -<4932> <4932> 7784 -<4933> <4934> 3493 -<4935> <4935> 7785 -<4936> <493f> 3496 -<4940> <4940> 7786 -<4941> <494d> 3507 -<494e> <494e> 7787 -<494f> <4950> 3521 -<4951> <4951> 7788 -<4952> <497e> 3524 -<4a21> <4a42> 3569 -<4a43> <4a43> 7789 -<4a44> <4a4c> 3604 -<4a4d> <4a4d> 7790 -<4a4e> <4a59> 3614 -<4a5a> <4a5a> 7791 -<4a5b> <4a78> 3627 -<4a79> <4a79> 7792 -<4a7a> <4a7e> 3658 -<4b21> <4b21> 3663 -<4b22> <4b22> 7793 -<4b23> <4b28> 3665 -<4b29> <4b29> 7794 -<4b2a> <4b4a> 3672 -<4b4b> <4b4b> 7795 -<4b4c> <4b69> 3706 -<4b6a> <4b6a> 7475 -<4b6b> <4b6f> 3737 -<4b70> <4b70> 7796 -<4b71> <4b78> 3743 -<4b79> <4b79> 4143 -<4b7a> <4b7e> 3752 -<4c21> <4c4c> 3757 -<4c4d> <4c4d> 7797 -<4c4e> <4c58> 3802 -<4c59> <4c59> 7798 -<4c5a> <4c5e> 3814 -<4c5f> <4c5f> 7799 -<4c60> <4c61> 3820 -endcidrange - -100 begincidrange -<4c62> <4c62> 7800 -<4c63> <4c78> 3823 -<4c79> <4c79> 6453 -<4c7a> <4c7a> 7801 -<4c7b> <4c7b> 3847 -<4c7c> <4c7c> 7802 -<4c7d> <4c7d> 3849 -<4c7e> <4c7e> 7803 -<4d21> <4d31> 3851 -<4d32> <4d32> 7804 -<4d33> <4d4f> 3869 -<4d50> <4d50> 7805 -<4d51> <4d53> 3899 -<4d54> <4d54> 7806 -<4d55> <4d59> 3903 -<4d5a> <4d5a> 7476 -<4d5b> <4d68> 3909 -<4d69> <4d69> 7807 -<4d6a> <4d7e> 3924 -<4e21> <4e4a> 3945 -<4e4b> <4e4b> 7808 -<4e4c> <4e79> 3988 -<4e7a> <4e7b> 7809 -<4e7c> <4e7e> 4036 -<4f21> <4f21> 7811 -<4f22> <4f30> 4040 -<4f31> <4f31> 7812 -<4f32> <4f35> 4056 -<4f36> <4f36> 6007 -<4f37> <4f38> 4061 -<4f39> <4f39> 7813 -<4f3a> <4f53> 4064 -<5021> <5055> 4090 -<5056> <5056> 3751 -<5057> <507e> 4144 -<5121> <513c> 4184 -<513d> <513d> 7814 -<513e> <5146> 4213 -<5147> <5147> 7815 -<5148> <514a> 4223 -<514b> <514b> 7816 -<514c> <514c> 4227 -<514d> <514d> 7817 -<514e> <517e> 4229 -<5221> <527e> 4278 -<5321> <532f> 4372 -<5330> <5330> 7818 -<5331> <5339> 4388 -<533a> <533a> 7819 -<533b> <534f> 4398 -<5350> <5350> 7820 -<5351> <535d> 4420 -<535e> <535e> 7821 -<535f> <536a> 4434 -<536b> <536b> 7822 -<536c> <537e> 4447 -<5421> <5443> 4466 -<5444> <5444> 7823 -<5445> <5463> 4502 -<5464> <5464> 3063 -<5465> <547e> 4534 -<5521> <553c> 4560 -<553d> <553d> 7824 -<553e> <5562> 4589 -<5563> <5563> 7825 -<5564> <557e> 4627 -<5621> <5621> 4654 -<5622> <5622> 7826 -<5623> <5671> 4656 -<5672> <5672> 7827 -<5673> <567e> 4736 -<5721> <577e> 4748 -<5821> <5823> 4842 -<5824> <5824> 7828 -<5825> <587e> 4846 -<5921> <595f> 4936 -<5960> <5960> 7829 -<5961> <596b> 5000 -<596c> <596c> 7830 -<596d> <5977> 5012 -<5978> <5978> 1447 -<5979> <597e> 5024 -<5a21> <5a38> 5030 -<5a39> <5a39> 7831 -<5a3a> <5a4c> 5055 -<5a4d> <5a4d> 7832 -<5a4e> <5a7e> 5075 -<5b21> <5b44> 5124 -<5b45> <5b45> 7833 -<5b46> <5b49> 5161 -<5b4a> <5b4a> 7834 -<5b4b> <5b57> 5166 -<5b58> <5b58> 3490 -<5b59> <5b6a> 5180 -<5b6b> <5b6b> 7835 -<5b6c> <5b6c> 5199 -<5b6d> <5b6d> 3176 -<5b6e> <5b73> 5201 -<5b74> <5b74> 7836 -<5b75> <5b7e> 5208 -endcidrange - -100 begincidrange -<5c21> <5c7e> 5218 -<5d21> <5d7e> 5312 -<5e21> <5e38> 5406 -<5e39> <5e39> 3181 -<5e3a> <5e4f> 5431 -<5e50> <5e50> 7837 -<5e51> <5e74> 5454 -<5e75> <5e75> 1535 -<5e76> <5e7e> 5491 -<5f21> <5f72> 5500 -<5f73> <5f73> 7838 -<5f74> <5f7e> 5583 -<6021> <6025> 5594 -<6026> <6026> 7839 -<6027> <605e> 5600 -<605f> <605f> 7840 -<6060> <6075> 5657 -<6076> <6076> 7477 -<6077> <607e> 5680 -<6121> <612a> 5688 -<612b> <612b> 7841 -<612c> <612f> 5699 -<6130> <6131> 7842 -<6132> <617e> 5705 -<6221> <622a> 5782 -<622b> <622b> 7844 -<622c> <6267> 5793 -<6268> <6268> 2030 -<6269> <6269> 5854 -<626a> <626a> 3153 -<626b> <626e> 5856 -<626f> <626f> 7845 -<6270> <627e> 5861 -<6321> <6349> 5876 -<634a> <634a> 7846 -<634b> <6353> 5918 -<6354> <6354> 7847 -<6355> <635d> 5928 -<635e> <635e> 1492 -<635f> <637e> 5938 -<6421> <6438> 5970 -<6439> <6439> 7848 -<643a> <6445> 5995 -<6446> <6446> 4060 -<6447> <6463> 6008 -<6464> <6464> 7849 -<6465> <646d> 6038 -<646e> <646e> 7850 -<646f> <647e> 6048 -<6521> <6538> 6064 -<6539> <6539> 7851 -<653a> <653a> 6089 -<653b> <653b> 7852 -<653c> <6545> 6091 -<6546> <6546> 7853 -<6547> <657e> 6102 -<6621> <6645> 6158 -<6646> <6646> 7854 -<6647> <667e> 6196 -<6721> <6763> 6252 -<6764> <6764> 7855 -<6765> <6768> 6320 -<6769> <6769> 7856 -<676a> <6771> 6325 -<6772> <6772> 7857 -<6773> <677e> 6334 -<6821> <6833> 6346 -<6834> <6834> 7858 -<6835> <683a> 6366 -<683b> <683b> 7859 -<683c> <6873> 6373 -<6874> <6874> 7860 -<6875> <687e> 6430 -<6921> <6921> 6440 -<6922> <6922> 2293 -<6923> <692d> 6442 -<692e> <692e> 3845 -<692f> <693b> 6454 -<693c> <693c> 7861 -<693d> <6959> 6468 -<695a> <695a> 1440 -<695b> <697e> 6498 -<6a21> <6a23> 6534 -<6a24> <6a24> 3358 -<6a25> <6a26> 6538 -<6a27> <6a27> 7862 -<6a28> <6a3c> 6541 -<6a3d> <6a3d> 7863 -<6a3e> <6a6e> 6563 -<6a6f> <6a6f> 7864 -<6a70> <6a7e> 6613 -<6b21> <6b31> 6628 -<6b32> <6b32> 7865 -<6b33> <6b5c> 6646 -<6b5d> <6b5d> 1550 -<6b5e> <6b65> 6689 -<6b66> <6b66> 7866 -<6b67> <6b75> 6698 -<6b76> <6b76> 7867 -<6b77> <6b7e> 6714 -endcidrange - -61 begincidrange -<6c21> <6c4c> 6722 -<6c4d> <6c4d> 2730 -<6c4e> <6c68> 6767 -<6c69> <6c69> 7868 -<6c6a> <6c73> 6795 -<6c74> <6c74> 7869 -<6c75> <6c7e> 6806 -<6d21> <6d4d> 6816 -<6d4e> <6d4e> 7870 -<6d4f> <6d6b> 6862 -<6d6c> <6d6c> 7871 -<6d6d> <6d6d> 6892 -<6d6e> <6d6e> 7872 -<6d6f> <6d7e> 6894 -<6e21> <6e28> 6910 -<6e29> <6e29> 7873 -<6e2a> <6e3c> 6919 -<6e3d> <6e3d> 7874 -<6e3e> <6e56> 6939 -<6e57> <6e57> 7875 -<6e58> <6e7e> 6965 -<6f21> <6f64> 7004 -<6f65> <6f65> 7876 -<6f66> <6f7e> 7073 -<7021> <7032> 7098 -<7033> <7033> 7877 -<7034> <7044> 7117 -<7045> <7045> 7878 -<7046> <7050> 7135 -<7051> <7051> 7879 -<7052> <7056> 7147 -<7057> <7057> 7880 -<7058> <7073> 7153 -<7074> <7074> 1841 -<7075> <7075> 7881 -<7076> <707e> 7183 -<7121> <717e> 7192 -<7221> <722c> 7286 -<722d> <722d> 7882 -<722e> <723b> 7299 -<723c> <723c> 7883 -<723d> <724c> 7314 -<724d> <724d> 1143 -<724e> <724e> 7884 -<724f> <7273> 7332 -<7274> <7274> 1321 -<7275> <727e> 7370 -<7321> <7350> 7380 -<7351> <7351> 7885 -<7352> <737c> 7429 -<737d> <737d> 7886 -<737e> <737e> 7473 -<7921> <797e> 8359 -<7a21> <7a35> 8453 -<7a36> <7a36> 1993 -<7a37> <7a7e> 8474 -<7b21> <7b7e> 8546 -<7c21> <7c6e> 8640 -<7c71> <7c7a> 8092 -<7c7b> <7c7b> 751 -<7c7c> <7c7e> 8005 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Ext-RKSJ-H b/Resources/cmap/Ext-RKSJ-H deleted file mode 100644 index 4286dfeb6f3..00000000000 --- a/Resources/cmap/Ext-RKSJ-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Ext-RKSJ-H) %%Title: (Ext-RKSJ-H Adobe Japan1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 2 def end def /CMapName /Ext-RKSJ-H def /CMapVersion 11.001 def /CMapType 1 def /UIDOffset 70 def /XUID [1 10 25332] def /WMode 0 def 4 begincodespacerange <00> <80> <8140> <9FFC> endcodespacerange 1 beginnotdefrange <00> <1f> 231 endnotdefrange 100 begincidrange <20> <7e> 231 <8140> <817e> 633 <8180> <8188> 696 <8189> <8189> 7478 <818a> <81ac> 706 <824f> <8258> 780 <8260> <8279> 790 <8281> <829a> 816 <829f> <82f1> 842 <8340> <837e> 925 <8380> <8396> 988 <839f> <83b6> 1011 <83bf> <83d6> 1035 <8440> <8460> 1059 <8470> <847e> 1092 <8480> <8491> 1107 <8540> <857e> 232 <8580> <8580> 390 <8581> <859e> 296 <859f> <85dd> 327 <85de> <85fc> 391 <8640> <867e> 422 <8680> <8691> 485 <8692> <8692> 295 <8693> <869e> 503 <86a2> <86ed> 7479 <8740> <875d> 7555 <875f> <8775> 7585 <877e> <877e> 8323 <8780> <878f> 7608 <8790> <8790> 762 <8791> <8791> 761 <8792> <8792> 769 <8793> <8799> 7624 <879a> <879a> 768 <879b> <879c> 7631 <889f> <889f> 1125 <88a0> <88a0> 7633 <88a1> <88b0> 1127 <88b1> <88b1> 7330 <88b2> <88b8> 1144 <88b9> <88b9> 7634 <88ba> <88eb> 1152 <88ec> <88ec> 7635 <88ed> <88f0> 1203 <88f1> <88f1> 7636 <88f2> <88f9> 1208 <88fa> <88fa> 7637 <88fb> <88fc> 1217 <8940> <8948> 1219 <8949> <8949> 7638 <894a> <8953> 1229 <8954> <8954> 7639 <8955> <8957> 1240 <8958> <8958> 7640 <8959> <895a> 1244 <895b> <895c> 7641 <895d> <8960> 1248 <8961> <8961> 7643 <8962> <897e> 1253 <8980> <898a> 1282 <898b> <898b> 7644 <898c> <89a5> 1294 <89a6> <89a6> 7645 <89a7> <89a7> 7369 <89a8> <89a8> 7646 <89a9> <89dd> 1323 <89de> <89de> 7647 <89df> <89f7> 1377 <89f8> <89f8> 7648 <89f9> <89fa> 1403 <89fb> <89fb> 7649 <89fc> <89fc> 1406 <8a40> <8a40> 1407 <8a41> <8a41> 7650 <8a42> <8a60> 1409 <8a61> <8a61> 6497 <8a62> <8a67> 1441 <8a68> <8a68> 5023 <8a69> <8a7e> 1448 <8a80> <8a84> 1470 <8a85> <8a85> 7651 <8a86> <8a8a> 1476 <8a8b> <8a8b> 7652 <8a8c> <8a92> 1482 <8a93> <8a93> 7653 <8a94> <8a95> 1490 <8a96> <8a96> 5937 <8a97> <8a99> 1493 <8a9a> <8a9a> 7654 <8a9b> <8abf> 1497 <8ac0> <8ac0> 7655 <8ac1> <8ac1> 5490 <8ac2> <8aca> 1536 <8acb> <8acb> 7656 <8acc> <8acf> 1546 <8ad0> <8ad0> 6688 <8ad1> <8ae2> 1551 <8ae3> <8ae3> 7657 <8ae4> <8afc> 1570 endcidrange 100 begincidrange <8b40> <8b49> 1595 <8b4a> <8b4a> 7658 <8b4b> <8b5e> 1606 <8b5f> <8b5f> 7659 <8b60> <8b7e> 1627 <8b80> <8b9f> 1658 <8ba0> <8ba0> 7660 <8ba1> <8ba7> 1691 <8ba8> <8ba8> 7661 <8ba9> <8bc3> 1699 <8bc4> <8bc4> 7474 <8bc5> <8bcc> 1727 <8bcd> <8bcd> 7662 <8bce> <8bea> 1736 <8beb> <8beb> 7663 <8bec> <8bf1> 1766 <8bf2> <8bf2> 7664 <8bf3> <8bf8> 1773 <8bf9> <8bf9> 7665 <8bfa> <8bfa> 1780 <8bfb> <8bfb> 7666 <8bfc> <8bfc> 1782 <8c40> <8c42> 1783 <8c43> <8c43> 7667 <8c44> <8c55> 1787 <8c56> <8c56> 7668 <8c57> <8c63> 1806 <8c64> <8c64> 7669 <8c65> <8c6c> 1820 <8c6d> <8c6d> 7670 <8c6e> <8c70> 1829 <8c71> <8c71> 7671 <8c72> <8c73> 1833 <8c74> <8c74> 7672 <8c75> <8c79> 1836 <8c7a> <8c7a> 7181 <8c7b> <8c7e> 1842 <8c80> <8c83> 1846 <8c84> <8c84> 7673 <8c85> <8c90> 1851 <8c91> <8c91> 7674 <8c92> <8c98> 1864 <8c99> <8c99> 7675 <8c9a> <8c9d> 1872 <8c9e> <8c9e> 7676 <8c9f> <8cb1> 1877 <8cb2> <8cb2> 7677 <8cb3> <8cbe> 1897 <8cbf> <8cbf> 7678 <8cc0> <8cfc> 1910 <8d40> <8d49> 1971 <8d4a> <8d4a> 7679 <8d4b> <8d55> 1982 <8d56> <8d56> 7680 <8d57> <8d60> 1994 <8d61> <8d61> 7681 <8d62> <8d7a> 2005 <8d7b> <8d7b> 5853 <8d7c> <8d7e> 2031 <8d80> <8d8c> 2034 <8d8d> <8d8d> 7682 <8d8e> <8d93> 2048 <8d94> <8d94> 7683 <8d95> <8d98> 2055 <8d99> <8d99> 7684 <8d9a> <8dd0> 2060 <8dd1> <8dd1> 7685 <8dd2> <8de4> 2116 <8de5> <8de5> 7686 <8de6> <8df1> 2136 <8df2> <8df2> 7687 <8df3> <8dfc> 2149 <8e40> <8e45> 2159 <8e46> <8e46> 7688 <8e47> <8e48> 2166 <8e49> <8e49> 7689 <8e4a> <8e4a> 2169 <8e4b> <8e4b> 7690 <8e4c> <8e57> 2171 <8e58> <8e58> 7691 <8e59> <8e7e> 2184 <8e80> <8eb5> 2222 <8eb6> <8eb6> 7692 <8eb7> <8ec5> 2277 <8ec6> <8ec6> 7693 <8ec7> <8ec7> 6441 <8ec8> <8ed4> 2294 <8ed5> <8ed5> 7694 <8ed6> <8eda> 2308 <8edb> <8edc> 7695 <8edd> <8efc> 2315 <8f40> <8f49> 2347 <8f4a> <8f4a> 7697 <8f4b> <8f54> 2358 <8f55> <8f55> 7698 <8f56> <8f7e> 2369 <8f80> <8f8b> 2410 <8f8c> <8f8d> 7699 <8f8e> <8f91> 2424 <8f92> <8f93> 7701 endcidrange 100 begincidrange <8f94> <8fa2> 2430 <8fa3> <8fa3> 7703 <8fa4> <8fb0> 2446 <8fb1> <8fb1> 7704 <8fb2> <8fbc> 2460 <8fbd> <8fbd> 7705 <8fbe> <8fd2> 2472 <8fd3> <8fd3> 7706 <8fd4> <8fdc> 2494 <8fdd> <8fdd> 7707 <8fde> <8fe1> 2504 <8fe2> <8fe2> 7708 <8fe3> <8ffc> 2509 <9040> <9048> 2535 <9049> <9049> 7709 <904a> <9077> 2545 <9078> <9078> 7710 <9079> <907e> 2592 <9080> <9080> 7711 <9081> <9088> 2599 <9089> <9089> 7712 <908a> <909f> 2608 <90a0> <90a0> 7713 <90a1> <90bf> 2631 <90c0> <90c0> 7714 <90c1> <90e3> 2663 <90e4> <90e4> 7715 <90e5> <90ee> 2699 <90ef> <90f0> 7716 <90f1> <90f6> 2711 <90f7> <90f8> 7718 <90f9> <90fc> 2719 <9140> <9145> 2723 <9146> <9146> 7720 <9147> <9147> 6766 <9148> <9157> 2731 <9158> <9158> 7721 <9159> <916a> 2748 <916b> <916b> 7722 <916c> <916d> 2767 <916e> <916e> 7723 <916f> <917d> 2770 <917e> <917e> 7724 <9180> <9188> 2786 <9189> <9189> 7725 <918a> <91ba> 2796 <91bb> <91bb> 7726 <91bc> <91ca> 2846 <91cb> <91cb> 7727 <91cc> <91d9> 2862 <91da> <91da> 7728 <91db> <91e0> 2877 <91e1> <91e1> 7729 <91e2> <91ec> 2884 <91ed> <91ed> 7730 <91ee> <91f2> 2896 <91f3> <91f4> 7731 <91f5> <91fa> 2903 <91fb> <91fb> 7733 <91fc> <91fc> 2910 <9240> <9245> 2911 <9246> <9246> 7734 <9247> <9247> 2918 <9248> <9249> 7735 <924a> <924b> 2921 <924c> <924d> 7737 <924e> <925b> 2925 <925c> <925c> 7739 <925d> <927e> 2940 <9280> <928f> 2974 <9290> <9290> 7740 <9291> <9294> 2991 <9295> <9295> 7741 <9296> <929b> 2996 <929c> <929c> 7742 <929d> <92ba> 3003 <92bb> <92bb> 7743 <92bc> <92c5> 3034 <92c6> <92c6> 7744 <92c7> <92c7> 3045 <92c8> <92c8> 7745 <92c9> <92ca> 3047 <92cb> <92cb> 7746 <92cc> <92cc> 3050 <92cd> <92cd> 7747 <92ce> <92d8> 3052 <92d9> <92d9> 4533 <92da> <92fc> 3064 <9340> <9340> 3099 <9341> <9341> 7748 <9342> <9345> 3101 <9346> <9346> 7749 <9347> <934c> 3106 <934d> <934d> 7750 <934e> <9354> 3113 <9355> <9355> 7751 <9356> <935d> 3121 <935e> <935e> 7752 <935f> <9366> 3130 <9367> <9367> 7753 endcidrange 100 begincidrange <9368> <9369> 3139 <936a> <936a> 7754 <936b> <936f> 3142 <9370> <9371> 7755 <9372> <9375> 3149 <9376> <9376> 5855 <9377> <937e> 3154 <9380> <9383> 3162 <9384> <9384> 7757 <9385> <938d> 3167 <938e> <938e> 5200 <938f> <9392> 3177 <9393> <9393> 5430 <9394> <9397> 3182 <9398> <9398> 7758 <9399> <93bb> 3187 <93bc> <93bc> 7759 <93bd> <93bf> 3223 <93c0> <93c0> 7760 <93c1> <93d1> 3227 <93d2> <93d3> 7761 <93d4> <93d8> 3246 <93d9> <93da> 7763 <93db> <93de> 3253 <93df> <93df> 7765 <93e0> <93e3> 3258 <93e4> <93e5> 7766 <93e6> <93e7> 3264 <93e8> <93e8> 7768 <93e9> <93f3> 3267 <93f4> <93f4> 6893 <93f5> <93fc> 3279 <9440> <9447> 3287 <9448> <9448> 7769 <9449> <9457> 3296 <9458> <9458> 7770 <9459> <9475> 3312 <9476> <9476> 7771 <9477> <947e> 3342 <9480> <9486> 3350 <9487> <9487> 7772 <9488> <9488> 6537 <9489> <9489> 7773 <948a> <948c> 3360 <948d> <948d> 7774 <948e> <94a1> 3364 <94a2> <94a2> 7775 <94a3> <94ab> 3385 <94ac> <94ac> 7776 <94ad> <94ad> 3395 <94ae> <94ae> 7777 <94af> <94d1> 3397 <94d2> <94d2> 7778 <94d3> <94df> 3433 <94e0> <94e0> 7779 <94e1> <94f2> 3447 <94f3> <94f3> 7780 <94f4> <94fc> 3466 <9540> <9540> 3475 <9541> <9542> 7781 <9543> <954d> 3478 <954e> <954e> 7783 <954f> <954f> 5179 <9550> <9550> 3491 <9551> <9551> 7784 <9552> <9553> 3493 <9554> <9554> 7785 <9555> <955e> 3496 <955f> <955f> 7786 <9560> <956c> 3507 <956d> <956d> 7787 <956e> <956f> 3521 <9570> <9570> 7788 <9571> <957e> 3524 <9580> <95c0> 3538 <95c1> <95c1> 7789 <95c2> <95ca> 3604 <95cb> <95cb> 7790 <95cc> <95d7> 3614 <95d8> <95d8> 7791 <95d9> <95f6> 3627 <95f7> <95f7> 7792 <95f8> <95fc> 3658 <9640> <9640> 3663 <9641> <9641> 7793 <9642> <9647> 3665 <9648> <9648> 7794 <9649> <9669> 3672 <966a> <966a> 7795 <966b> <967e> 3706 <9680> <9689> 3726 <968a> <968a> 7475 <968b> <968f> 3737 <9690> <9690> 7796 <9691> <9698> 3743 <9699> <9699> 4143 <969a> <96ca> 3752 <96cb> <96cb> 7797 <96cc> <96d6> 3802 <96d7> <96d7> 7798 endcidrange 100 begincidrange <96d8> <96dc> 3814 <96dd> <96dd> 7799 <96de> <96df> 3820 <96e0> <96e0> 7800 <96e1> <96f6> 3823 <96f7> <96f7> 6453 <96f8> <96f8> 7801 <96f9> <96f9> 3847 <96fa> <96fa> 7802 <96fb> <96fb> 3849 <96fc> <96fc> 7803 <9740> <9750> 3851 <9751> <9751> 7804 <9752> <976e> 3869 <976f> <976f> 7805 <9770> <9772> 3899 <9773> <9773> 7806 <9774> <9778> 3903 <9779> <9779> 7476 <977a> <977e> 3909 <9780> <9788> 3914 <9789> <9789> 7807 <978a> <97c8> 3924 <97c9> <97c9> 7808 <97ca> <97f7> 3988 <97f8> <97f9> 7809 <97fa> <97fc> 4036 <9840> <9840> 7811 <9841> <984f> 4040 <9850> <9850> 7812 <9851> <9854> 4056 <9855> <9855> 6007 <9856> <9857> 4061 <9858> <9858> 7813 <9859> <9872> 4064 <989f> <98d3> 4090 <98d4> <98d4> 3751 <98d5> <98fc> 4144 <9940> <995b> 4184 <995c> <995c> 7814 <995d> <9965> 4213 <9966> <9966> 7815 <9967> <9969> 4223 <996a> <996a> 7816 <996b> <996b> 4227 <996c> <996c> 7817 <996d> <997e> 4229 <9980> <99fc> 4247 <9a40> <9a4e> 4372 <9a4f> <9a4f> 7818 <9a50> <9a58> 4388 <9a59> <9a59> 7819 <9a5a> <9a6e> 4398 <9a6f> <9a6f> 7820 <9a70> <9a7c> 4420 <9a7d> <9a7d> 7821 <9a7e> <9a7e> 4434 <9a80> <9a8a> 4435 <9a8b> <9a8b> 7822 <9a8c> <9ac1> 4447 <9ac2> <9ac2> 7823 <9ac3> <9ae1> 4502 <9ae2> <9ae2> 3063 <9ae3> <9afc> 4534 <9b40> <9b5b> 4560 <9b5c> <9b5c> 7824 <9b5d> <9b7e> 4589 <9b80> <9b82> 4623 <9b83> <9b83> 7825 <9b84> <9b9f> 4627 <9ba0> <9ba0> 7826 <9ba1> <9bef> 4656 <9bf0> <9bf0> 7827 <9bf1> <9bfc> 4736 <9c40> <9c7e> 4748 <9c80> <9ca1> 4811 <9ca2> <9ca2> 7828 <9ca3> <9cfc> 4846 <9d40> <9d7e> 4936 <9d80> <9d80> 7829 <9d81> <9d8b> 5000 <9d8c> <9d8c> 7830 <9d8d> <9d97> 5012 <9d98> <9d98> 1447 <9d99> <9db6> 5024 <9db7> <9db7> 7831 <9db8> <9dca> 5055 <9dcb> <9dcb> 7832 <9dcc> <9dfc> 5075 <9e40> <9e63> 5124 <9e64> <9e64> 7833 <9e65> <9e68> 5161 <9e69> <9e69> 7834 <9e6a> <9e76> 5166 <9e77> <9e77> 3490 <9e78> <9e7e> 5180 <9e80> <9e8a> 5187 <9e8b> <9e8b> 7835 <9e8c> <9e8c> 5199 <9e8d> <9e8d> 3176 endcidrange 100 begincidrange <9e8e> <9e93> 5201 <9e94> <9e94> 7836 <9e95> <9efc> 5208 <9f40> <9f7e> 5312 <9f80> <9fb6> 5375 <9fb7> <9fb7> 3181 <9fb8> <9fcd> 5431 <9fce> <9fce> 7837 <9fcf> <9ff2> 5454 <9ff3> <9ff3> 1535 <9ff4> <9ffc> 5491 326 5500 5563 7838 5583 7839 5600 7840 5657 7477 5680 5688 7841 5699 7842 5705 5751 7844 5793 2030 5854 3153 5856 7845 5861 5876 7846 5918 7847 5928 1492 5938 5939 7848 5995 4060 6008 7849 6038 7850 6048 6064 7851 6089 7852 6091 7853 6102 6127 7854 6196 6252 6315 7855 6320 7856 6325 7857 6334 7858 6366 7859 6373 7860 6430 6440 2293 6442 3845 6454 7861 6468 1440 6498 6503 3358 6538 7862 6541 7863 6563 7864 6613 6628 7865 6646 1550 6689 6691 endcidrange 65 begincidrange 7866 6698 7867 6714 2730 6767 7868 6795 7869 6806 6816 7870 6862 6879 7871 6892 7872 6894 7873 6919 7874 6939 7875 6965 7004 7067 7876 7073 7877 7117 7878 7135 7879 7147 7880 7153 1841 7881 7183 7192 7255 7882 7299 7883 7314 1143 7884 7332 1321 7370 7380 7885 7429 7443 7886 7473 8359 8422 1993 8474 8546 8609 8092 751 8005 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Ext-RKSJ-V b/Resources/cmap/Ext-RKSJ-V deleted file mode 100644 index 6fdacd5bf97..00000000000 --- a/Resources/cmap/Ext-RKSJ-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (Ext-RKSJ-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (Ext-RKSJ-H) %%BeginResource: CMap (Ext-RKSJ-V) %%Title: (Ext-RKSJ-V Adobe Japan1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /Ext-RKSJ-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 0 def end def /CMapName /Ext-RKSJ-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 810 def /XUID [1 10 25333] def /WMode 1 def 39 begincidrange <8141> <8142> 7887 <8143> <8143> 8268 <8144> <8144> 8274 <814a> <814a> 8272 <814b> <814b> 8271 <815b> <815d> 7891 <8160> <8164> 7894 <8165> <8165> 8281 <8166> <8166> 8276 <8167> <8167> 8279 <8168> <8168> 8278 <8169> <817a> 7899 <818b> <818b> 8269 <818c> <818c> 8273 <818d> <818d> 8283 <81ac> <81ac> 8270 <829f> <829f> 7918 <82a1> <82a1> 7919 <82a3> <82a3> 7920 <82a5> <82a5> 7921 <82a7> <82a7> 7922 <82c1> <82c1> 7923 <82e1> <82e1> 7924 <82e3> <82e3> 7925 <82e5> <82e5> 7926 <82ec> <82ec> 7927 <8340> <8340> 7928 <8342> <8342> 7929 <8344> <8344> 7930 <8346> <8346> 7931 <8348> <8348> 7932 <8362> <8362> 7933 <8383> <8383> 7934 <8385> <8385> 7935 <8387> <8387> 7936 <838e> <838e> 7937 <8395> <8396> 7938 <875f> <876e> 7940 <8780> <8781> 7956 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Ext-V b/Resources/cmap/Ext-V deleted file mode 100644 index 4c84457767e..00000000000 --- a/Resources/cmap/Ext-V +++ /dev/null @@ -1,99 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (Ext-H) -%%IncludeResource: procset (CIDInit) -%%IncludeResource: CMap (Ext-H) -%%BeginResource: CMap (Ext-V) -%%Title: (Ext-V Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/Ext-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /Ext-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 820 def -/XUID [1 10 25334] def - -/WMode 1 def - -39 begincidrange -<2122> <2123> 7887 -<2124> <2124> 8268 -<2125> <2125> 8274 -<212b> <212b> 8272 -<212c> <212c> 8271 -<213c> <213e> 7891 -<2141> <2145> 7894 -<2146> <2146> 8281 -<2147> <2147> 8276 -<2148> <2148> 8279 -<2149> <2149> 8278 -<214a> <215b> 7899 -<216b> <216b> 8269 -<216c> <216c> 8273 -<216d> <216d> 8283 -<222e> <222e> 8270 -<2421> <2421> 7918 -<2423> <2423> 7919 -<2425> <2425> 7920 -<2427> <2427> 7921 -<2429> <2429> 7922 -<2443> <2443> 7923 -<2463> <2463> 7924 -<2465> <2465> 7925 -<2467> <2467> 7926 -<246e> <246e> 7927 -<2521> <2521> 7928 -<2523> <2523> 7929 -<2525> <2525> 7930 -<2527> <2527> 7931 -<2529> <2529> 7932 -<2543> <2543> 7933 -<2563> <2563> 7934 -<2565> <2565> 7935 -<2567> <2567> 7936 -<256e> <256e> 7937 -<2575> <2576> 7938 -<2d40> <2d4f> 7940 -<2d60> <2d61> 7956 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/GB-EUC-H b/Resources/cmap/GB-EUC-H deleted file mode 100644 index bc62eea2484..00000000000 --- a/Resources/cmap/GB-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GB-EUC-H) %%Title: (GB-EUC-H Adobe GB1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 0 def end def /CMapName /GB-EUC-H def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 100 def /XUID [1 10 25360] def /WMode 0 def 2 begincodespacerange <00> <80> endcodespacerange 1 beginnotdefrange <00> <1f> 7716 endnotdefrange 90 begincidrange <20> <20> 7716 <21> <7e> 814 96 190 240 250 262 356 439 525 549 602 635 668 700 738 814 908 940 1034 1128 1222 1316 1410 1504 1598 1692 1786 1880 1974 2068 2162 2256 2350 2444 2538 2632 2726 2820 2914 3008 3102 3196 3290 3384 3478 3572 3666 3760 3854 3948 4042 4136 4230 4324 4418 4512 4606 4695 4789 4883 4977 5071 5165 5259 5353 5447 5541 5635 5729 5823 5917 6011 6105 6199 6293 6387 6481 6575 6669 6763 6857 6951 7045 7139 7233 7327 7421 7515 7609 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GB-EUC-V b/Resources/cmap/GB-EUC-V deleted file mode 100644 index 7b558cc7117..00000000000 --- a/Resources/cmap/GB-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GB-EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GB-EUC-H) %%BeginResource: CMap (GB-EUC-V) %%Title: (GB-EUC-V Adobe GB1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GB-EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 0 def end def /CMapName /GB-EUC-V def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 310 def /XUID [1 10 25361] def /WMode 1 def 20 begincidrange 575 574 598 7704 599 582 7706 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7711 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBK-EUC-H b/Resources/cmap/GBK-EUC-H deleted file mode 100644 index a246029d3ef..00000000000 --- a/Resources/cmap/GBK-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBK-EUC-H) %%Title: (GBK-EUC-H Adobe GB1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 2 def end def /CMapName /GBK-EUC-H def /CMapVersion 11.001 def /CMapType 1 def /XUID [1 10 25377] def /WMode 0 def 2 begincodespacerange <00> <80> <8140> endcodespacerange 1 beginnotdefrange <00> <1f> 7716 endnotdefrange 100 begincidrange <20> <20> 7716 <21> <7e> 814 <8140> <8178> 10072 <8179> <8179> 8281 <817a> <817e> 10129 <8180> <8185> 10134 <8186> <8186> 8689 <8187> <81ec> 10140 <81ed> <81ed> 8178 <81ee> <81f5> 10242 <81f6> <81f6> 8285 <81f7> <81fe> 10250 <8240> <8252> 10258 <8253> <8253> 9884 <8254> <8261> 10277 <8262> <8262> 8629 <8263> <8273> 10291 <8274> <8274> 8908 <8275> <8279> 10308 <827a> <827a> 8214 <827b> <827c> 10313 <827d> <827d> 7778 <827e> <827e> 10315 <8280> <8280> 7968 <8281> <8282> 10316 <8283> <8283> 8319 <8284> <828f> 10318 <8290> <8290> 8284 <8291> <82a4> 10330 <82a5> <82a5> 8596 <82a6> <82c7> 10350 <82c8> <82c8> 7781 <82c9> <82c9> 8833 <82ca> <82e0> 10384 <82e1> <82e1> 8909 <82e2> <82e2> 10407 <82e3> <82e3> 8458 <82e4> <82e4> 7742 <82e5> <82ec> 10408 <82ed> <82ed> 9855 <82ee> <82f1> 10416 <82f2> <82f2> 8750 <82f3> <82f6> 10420 <82f7> <82f7> 7830 <82f8> <82f8> 8907 <82f9> <82f9> 8812 <82fa> <82fa> 10424 <82fb> <82fb> 8471 <82fc> <82fe> 10425 <8340> <8340> 10428 <8341> <8341> 8424 <8342> <8344> 10429 <8345> <8345> 8916 <8346> <8347> 10432 <8348> <8348> 8121 <8349> <834b> 10434 <834c> <834c> 8920 <834d> <8352> 10437 <8353> <8353> 8415 <8354> <8356> 10443 <8357> <8357> 8386 <8358> <835d> 10446 <835e> <835e> 8597 <835f> <8364> 10452 <8365> <8365> 8108 <8366> <8366> 8915 <8367> <8371> 10458 <8372> <8372> 8065 <8373> <8377> 10469 <8378> <8378> 8720 <8379> <8379> 10474 <837a> <837a> 8911 <837b> <837b> 10475 <837c> <837c> 8723 <837d> <837d> 10476 <837e> <837e> 8164 <8380> <8380> 8080 <8381> <8385> 10477 <8386> <8386> 8918 <8387> <8388> 10482 <8389> <8389> 8912 <838a> <838a> 8910 <838b> <838c> 10484 <838d> <838d> 9857 <838e> <8393> 10486 <8394> <8394> 7798 <8395> <839d> 10492 <839e> <839e> 8753 <839f> <83a5> 10501 <83a6> <83a6> 7827 <83a7> <83aa> 10508 <83ab> <83ab> 8914 <83ac> <83ad> 10512 <83ae> <83ae> 8919 <83af> <83af> 8917 <83b0> <83b0> 8913 <83b1> <83b9> 10514 <83ba> <83ba> 7909 <83bb> <83c8> 10523 <83c9> <83c9> 8229 endcidrange 100 begincidrange <83ca> <83f5> 10537 <83f6> <83f6> 7887 <83f7> <83fe> 10581 <8440> <844f> 10589 <8450> <8450> 8153 <8451> <8470> 10605 <8471> <8471> 8904 <8472> <8473> 10637 <8474> <8474> 8803 <8475> <8476> 10639 <8477> <8477> 9859 <8478> <847e> 10641 <8480> <8481> 10648 <8482> <8482> 7959 <8483> <848d> 10650 <848e> <848e> 7979 <848f> <8491> 10661 <8492> <8492> 8906 <8493> <8493> 7833 <8494> <849c> 10664 <849d> <849d> 8015 <849e> <84a0> 10673 <84a1> <84a1> 8143 <84a2> <84a2> 8246 <84a3> <84a3> 7994 <84a4> <84a4> 10676 <84a5> <84a5> 8905 <84a6> <84a6> 8089 <84a7> <84a8> 10677 <84a9> <84a9> 8053 <84aa> <84c4> 10679 <84c5> <84c5> 8126 <84c6> <84d2> 10706 <84d3> <84d3> 7885 <84d4> <84d4> 10719 <84d5> <84d5> 8617 <84d6> <84d6> 10720 <84d7> <84d7> 8678 <84d8> <84d8> 10721 <84d9> <84d9> 8487 <84da> <84da> 8195 <84db> <84dc> 10722 <84dd> <84dd> 8498 <84de> <84e9> 10724 <84ea> <84ea> 8995 <84eb> <84ed> 10736 <84ee> <84ee> 8209 <84ef> <84f0> 10739 <84f1> <84f1> 8437 <84f2> <84fe> 10741 <8540> <8550> 10754 <8551> <8551> 8901 <8552> <8552> 8030 <8553> <8553> 10771 <8554> <8554> 8902 <8555> <855d> 10772 <855e> <855e> 8431 <855f> <8565> 10781 <8566> <8566> 8656 <8567> <857e> 10788 <8580> <8586> 10812 <8587> <8587> 8897 <8588> <858a> 10819 <858b> <858b> 7780 <858c> <8591> 10822 <8592> <8592> 8697 <8593> <8595> 10828 <8596> <8596> 8208 <8597> <8597> 10831 <8598> <8598> 8898 <8599> <85a1> 10832 <85a2> <85a2> 7770 <85a3> <85b1> 10841 <85b2> <85b2> 7842 <85b3> <85fe> 10856 <8640> <8649> 10932 <864a> <864a> 9069 <864b> <8653> 10942 <8654> <8654> 8775 <8655> <8667> 10951 <8668> <8668> 9068 <8669> <867e> 10970 <8680> <8695> 10992 <8696> <8696> 8604 <8697> <8698> 11014 <8699> <8699> 8393 <869a> <86a0> 11016 <86a1> <86a1> 8688 <86a2> <86c9> 11023 <86ca> <86ca> 8459 <86cb> <86cb> 11063 <86cc> <86cc> 8414 <86cd> <86cd> 11064 <86ce> <86ce> 7850 <86cf> <86d0> 11065 <86d1> <86d1> 8748 <86d2> <86db> 11067 <86dc> <86dc> 8408 <86dd> <86dd> 8896 <86de> <86e0> 11077 endcidrange 100 begincidrange <86e1> <86e1> 8303 <86e2> <86e7> 11080 <86e8> <86e8> 8609 <86e9> <86ed> 11086 <86ee> <86ee> 9081 <86ef> <86f3> 11091 <86f4> <86f4> 9074 <86f5> <86fe> 11096 <8740> <8740> 8554 <8741> <8743> 11106 <8744> <8744> 9084 <8745> <8748> 11109 <8749> <8749> 8368 <874a> <874a> 11113 <874b> <874b> 9082 <874c> <874c> 7796 <874d> <874e> 11114 <874f> <874f> 9079 <8750> <8756> 11116 <8757> <8757> 8012 <8758> <8759> 11123 <875a> <875a> 9080 <875b> <875b> 8655 <875c> <875c> 9064 <875d> <875d> 11125 <875e> <875e> 9073 <875f> <875f> 11126 <8760> <8760> 9065 <8761> <8765> 11127 <8766> <8766> 9844 <8767> <8779> 11132 <877a> <877a> 9071 <877b> <877c> 11151 <877d> <877d> 9072 <877e> <877e> 11153 <8780> <8780> 11154 <8781> <8781> 9078 <8782> <8782> 9075 <8783> <8785> 11155 <8786> <8786> 9087 <8787> <8787> 11158 <8788> <8788> 9076 <8789> <8789> 11159 <878a> <878a> 8373 <878b> <878c> 11160 <878d> <878d> 7899 <878e> <878e> 9842 <878f> <8792> 11162 <8793> <8793> 9070 <8794> <8797> 11166 <8798> <8798> 8631 <8799> <879c> 11170 <879d> <879d> 9077 <879e> <87a2> 11174 <87a3> <87a3> 9090 <87a4> <87a6> 11179 <87a7> <87a7> 8350 <87a8> <87b2> 11182 <87b3> <87b3> 9067 <87b4> <87b4> 11193 <87b5> <87b5> 8249 <87b6> <87ba> 11194 <87bb> <87bb> 9887 <87bc> <87be> 11199 <87bf> <87bf> 9085 <87c0> <87c0> 8693 <87c1> <87c1> 11202 <87c2> <87c2> 9089 <87c3> <87c9> 11203 <87ca> <87ca> 9083 <87cb> <87cb> 9086 <87cc> <87cc> 8652 <87cd> <87ce> 11210 <87cf> <87cf> 8923 <87d0> <87d1> 11212 <87d2> <87d2> 9066 <87d3> <87d3> 9865 <87d4> <87d4> 11214 <87d5> <87d5> 9879 <87d6> <87d9> 11215 <87da> <87da> 8865 <87db> <87f6> 11219 <87f7> <87f7> 9091 <87f8> <87f8> 7997 <87f9> <87f9> 11247 <87fa> <87fa> 8591 <87fb> <87fe> 11248 <8840> <8840> 8774 <8841> <8841> 8776 <8842> <8843> 11252 <8844> <8844> 8574 <8845> <8845> 11254 <8846> <8846> 8576 <8847> <887e> 11255 <8880> <88b9> 11311 <88ba> <88ba> 9002 <88bb> <88cb> 11369 <88cc> <88cc> 8843 <88cd> <88d3> 11386 <88d4> <88d4> 8069 endcidrange 100 begincidrange <88d5> <88d6> 11393 <88d7> <88d7> 8997 <88d8> <88de> 11395 <88df> <88df> 9004 <88e0> <88e4> 11402 <88e5> <88e5> 9006 <88e6> <88f1> 11407 <88f2> <88f2> 8709 <88f3> <88f3> 7736 <88f4> <88f5> 11419 <88f6> <88f6> 7795 <88f7> <88fe> 11421 <8940> <894a> 11429 <894b> <894b> 8163 <894c> <894c> 9017 <894d> <894d> 11440 <894e> <894e> 9003 <894f> <894f> 11441 <8950> <8950> 9005 <8951> <8953> 11442 <8954> <8954> 8575 <8955> <895c> 11445 <895d> <895d> 8615 <895e> <895e> 11453 <895f> <895f> 9007 <8960> <896c> 11454 <896d> <896d> 7805 <896e> <8970> 11467 <8971> <8971> 8406 <8972> <897b> 11470 <897c> <897c> 7874 <897d> <897e> 11480 <8980> <898a> 11482 <898b> <898b> 8882 <898c> <8998> 11493 <8999> <8999> 7903 <899a> <899d> 11506 <899e> <899e> 7929 <899f> <89a5> 11510 <89a6> <89a6> 8409 <89a7> <89a7> 11517 <89a8> <89a8> 8157 <89a9> <89ae> 11518 <89af> <89af> 8551 <89b0> <89b9> 11524 <89ba> <89ba> 8685 <89bb> <89bd> 11534 <89be> <89be> 8199 <89bf> <89bf> 8998 <89c0> <89c0> 9001 <89c1> <89c3> 11537 <89c4> <89c4> 8018 <89c5> <89c5> 8251 <89c6> <89c6> 9000 <89c7> <89c7> 11540 <89c8> <89c8> 8999 <89c9> <89cd> 11541 <89ce> <89ce> 7723 <89cf> <89d0> 11546 <89d1> <89d1> 8878 <89d2> <89d7> 11548 <89d8> <89d8> 8009 <89d9> <89da> 11554 <89db> <89db> 8504 <89dc> <89f3> 11556 <89f4> <89f4> 8321 <89f5> <89fe> 11580 <8a40> <8a40> 11590 <8a41> <8a41> 8060 <8a42> <8a58> 11591 <8a59> <8a59> 9051 <8a5a> <8a5a> 7902 <8a5b> <8a5b> 11614 <8a5c> <8a5c> 8098 <8a5d> <8a5d> 11615 <8a5e> <8a5e> 7930 <8a5f> <8a78> 11616 <8a79> <8a79> 8877 <8a7a> <8a7e> 11642 <8a80> <8ae3> 11647 <8ae4> <8ae4> 8255 <8ae5> <8afe> 11747 <8b40> <8b43> 11773 <8b44> <8b44> 7950 <8b45> <8b48> 11777 <8b49> <8b49> 9209 <8b4a> <8b79> 11781 <8b7a> <8b7a> 9212 <8b7b> <8b7e> 11829 <8b80> <8b8b> 11833 <8b8c> <8b8c> 8297 <8b8d> <8b9d> 11845 <8b9e> <8b9e> 9207 <8b9f> <8bb2> 11862 <8bb3> <8bb3> 9206 <8bb4> <8bb8> 11882 <8bb9> <8bb9> 9213 <8bba> <8bbd> 11887 <8bbe> <8bbe> 9208 <8bbf> <8bc5> 11891 endcidrange 100 begincidrange <8bc6> <8bc6> 9210 <8bc7> <8bc7> 11898 <8bc8> <8bc8> 9214 <8bc9> <8bc9> 8104 <8bca> <8bd3> 11899 <8bd4> <8bd4> 9217 <8bd5> <8bdb> 11909 <8bdc> <8bdc> 9215 <8bdd> <8be4> 11916 <8be5> <8be5> 9216 <8be6> <8bea> 11924 <8beb> <8beb> 8737 <8bec> <8bef> 11929 <8bf0> <8bf0> 8482 <8bf1> <8bfe> 11933 <8c40> <8c43> 11947 <8c44> <8c44> 9211 <8c45> <8c4e> 11951 <8c4f> <8c4f> 8538 <8c50> <8c56> 11961 <8c57> <8c57> 8677 <8c58> <8c5b> 11968 <8c5c> <8c5c> 8279 <8c5d> <8c7e> 11972 <8c80> <8c8a> 12006 <8c8b> <8c8b> 8421 <8c8c> <8c8c> 12017 <8c8d> <8c8d> 8495 <8c8e> <8c8e> 8355 <8c8f> <8c8f> 8481 <8c90> <8c90> 12018 <8c91> <8c91> 8660 <8c92> <8c92> 8165 <8c93> <8c98> 12019 <8c99> <8c99> 7818 <8c9a> <8c9a> 7735 <8c9b> <8ca1> 12025 <8ca2> <8ca2> 8094 <8ca3> <8ca3> 8870 <8ca4> <8ca4> 8680 <8ca5> <8ca5> 12032 <8ca6> <8ca6> 7898 <8ca7> <8ca7> 7865 <8ca8> <8cbf> 12033 <8cc0> <8cc0> 9052 <8cc1> <8cd1> 12057 <8cd2> <8cd2> 8272 <8cd3> <8cd3> 7783 <8cd4> <8cd4> 12074 <8cd5> <8cd5> 9204 <8cd6> <8cd8> 12075 <8cd9> <8cd9> 8510 <8cda> <8cf8> 12078 <8cf9> <8cf9> 7958 <8cfa> <8cfe> 12109 <8d40> <8d72> 12114 <8d73> <8d73> 9097 <8d74> <8d74> 12165 <8d75> <8d75> 7863 <8d76> <8d7a> 12166 <8d7b> <8d7b> 8628 <8d7c> <8d7e> 12171 <8d80> <8d87> 12174 <8d88> <8d88> 9103 <8d89> <8d8e> 12182 <8d8f> <8d8f> 7962 <8d90> <8d9d> 12188 <8d9e> <8d9e> 9099 <8d9f> <8db8> 12202 <8db9> <8db9> 9098 <8dba> <8de1> 12228 <8de2> <8de2> 9105 <8de3> <8de3> 12268 <8de4> <8de4> 8817 <8de5> <8de6> 12269 <8de7> <8de7> 9096 <8de8> <8df6> 12271 <8df7> <8df7> 9102 <8df8> <8dfd> 12286 <8dfe> <8dfe> 9101 <8e40> <8e45> 12292 <8e46> <8e46> 9100 <8e47> <8e55> 12298 <8e56> <8e56> 9104 <8e57> <8e57> 12313 <8e58> <8e58> 8243 <8e59> <8e59> 12314 <8e5a> <8e5a> 8764 <8e5b> <8e67> 12315 <8e68> <8e68> 8169 <8e69> <8e6d> 12328 <8e6e> <8e6e> 8277 <8e6f> <8e6f> 12333 <8e70> <8e70> 9106 <8e71> <8e7e> 12334 <8e80> <8e80> 8996 <8e81> <8e9a> 12348 <8e9b> <8e9b> 8515 <8e9c> <8e9e> 12374 <8e9f> <8e9f> 8489 endcidrange 100 begincidrange <8ea0> <8ea3> 12377 <8ea4> <8ea4> 8823 <8ea5> <8ea6> 12381 <8ea7> <8ea7> 7847 <8ea8> <8eab> 12383 <8eac> <8eac> 8837 <8ead> <8ead> 12387 <8eae> <8eae> 9092 <8eaf> <8ebc> 12388 <8ebd> <8ebd> 9095 <8ebe> <8ebe> 9094 <8ebf> <8ec2> 12402 <8ec3> <8ec3> 8848 <8ec4> <8ec4> 12406 <8ec5> <8ec5> 7748 <8ec6> <8ecc> 12407 <8ecd> <8ecd> 7730 <8ece> <8ece> 9093 <8ecf> <8ed5> 12414 <8ed6> <8ed6> 7955 <8ed7> <8ed7> 8051 <8ed8> <8eeb> 12421 <8eec> <8eec> 8160 <8eed> <8efe> 12441 <8f40> <8f51> 12459 <8f52> <8f52> 8327 <8f53> <8f53> 7800 <8f54> <8f54> 9134 <8f55> <8f55> 7926 <8f56> <8f56> 7985 <8f57> <8f5c> 12477 <8f5d> <8f5d> 8261 <8f5e> <8f63> 12483 <8f64> <8f64> 8568 <8f65> <8f7e> 12489 <8f80> <8f85> 12515 <8f86> <8f86> 9205 <8f87> <8f87> 12521 <8f88> <8f88> 8821 <8f89> <8f94> 12522 <8f95> <8f95> 9838 <8f96> <8f96> 12534 <8f97> <8f97> 7856 <8f98> <8f9a> 12535 <8f9b> <8f9b> 8323 <8f9c> <8f9c> 12538 <8f9d> <8f9d> 8584 <8f9e> <8fa0> 12539 <8fa1> <8fa1> 9852 <8fa2> <8fbc> 12542 <8fbd> <8fbd> 8133 <8fbe> <8fc3> 12569 <8fc4> <8fc4> 7841 <8fc5> <8fc5> 12575 <8fc6> <8fc6> 9107 <8fc7> <8fcc> 12576 <8fcd> <8fcd> 7947 <8fce> <8fd7> 12582 <8fd8> <8fd8> 7804 <8fd9> <8ffe> 12592 <9040> <907e> 12630 <9080> <909c> 12693 <909d> <909d> 9140 <909e> <909e> 8318 <909f> <90b9> 12722 <90ba> <90ba> 7907 <90bb> <90bf> 12749 <90c0> <90c0> 8341 <90c1> <90c1> 9147 <90c2> <90c4> 12754 <90c5> <90c5> 9145 <90c6> <90da> 12757 <90db> <90db> 7720 <90dc> <90dc> 9149 <90dd> <90ec> 12778 <90ed> <90ed> 9141 <90ee> <90ef> 12794 <90f0> <90f0> 9146 <90f1> <90f6> 12796 <90f7> <90f7> 9139 <90f8> <90fe> 12802 <9140> <9141> 12809 <9142> <9142> 8546 <9143> <914a> 12811 <914b> <914b> 7774 <914c> <914c> 12819 <914d> <914d> 7773 <914e> <9150> 12820 <9151> <9151> 9143 <9152> <9153> 12823 <9154> <9154> 7983 <9155> <9155> 9439 <9156> <9158> 12825 <9159> <9159> 9138 <915a> <915a> 8526 <915b> <915c> 12828 <915d> <915d> 8274 <915e> <9160> 12830 <9161> <9161> 9148 <9162> <9162> 12833 endcidrange 100 begincidrange <9163> <9163> 8427 <9164> <916d> 12834 <916e> <916e> 8754 <916f> <9175> 12844 <9176> <9176> 7743 <9177> <9179> 12851 <917a> <917a> 8219 <917b> <917b> 8380 <917c> <917c> 9150 <917d> <917e> 12854 <9180> <9183> 12856 <9184> <9184> 7854 <9185> <918c> 12860 <918d> <918d> 7931 <918e> <9190> 12868 <9191> <9191> 8329 <9192> <9192> 12871 <9193> <9193> 9137 <9194> <9196> 12872 <9197> <9197> 8644 <9198> <919a> 12875 <919b> <919b> 8724 <919c> <91a8> 12878 <91a9> <91a9> 8158 <91aa> <91aa> 8739 <91ab> <91ab> 9142 <91ac> <91b9> 12891 <91ba> <91ba> 9868 <91bb> <91bb> 9438 <91bc> <91be> 12905 <91bf> <91bf> 9440 <91c0> <91c2> 12908 <91c3> <91c3> 9144 <91c4> <91cc> 12911 <91cd> <91cd> 7809 <91ce> <91cf> 12920 <91d0> <91d0> 8190 <91d1> <91d1> 8017 <91d2> <91d2> 8673 <91d3> <91d3> 12922 <91d4> <91d4> 9136 <91d5> <91d5> 12923 <91d6> <91d6> 8142 <91d7> <91d7> 12924 <91d8> <91d8> 8478 <91d9> <91d9> 8225 <91da> <91de> 12925 <91df> <91df> 9441 <91e0> <91e1> 12930 <91e2> <91e2> 9379 <91e3> <91e9> 12932 <91ea> <91ea> 9380 <91eb> <91ef> 12939 <91f0> <91f0> 8819 <91f1> <91f1> 12944 <91f2> <91f2> 8624 <91f3> <91fe> 12945 <9240> <927e> 12957 <9280> <92b5> 13020 <92b6> <92b6> 8657 <92b7> <92cd> 13074 <92ce> <92ce> 8476 <92cf> <92cf> 13097 <92d0> <92d0> 9053 <92d1> <92d3> 13098 <92d4> <92d4> 9858 <92d5> <92de> 13101 <92df> <92df> 8461 <92e0> <92e0> 8282 <92e1> <92fd> 13111 <92fe> <92fe> 8077 <9340> <934f> 13140 <9350> <9350> 8703 <9351> <935c> 13156 <935d> <935d> 8024 <935e> <936f> 13168 <9370> <9370> 8539 <9371> <9375> 13186 <9376> <9376> 7862 <9377> <937e> 13191 <9380> <938b> 13199 <938c> <938c> 8411 <938d> <939c> 13211 <939d> <939d> 9056 <939e> <93a4> 13227 <93a5> <93a5> 9057 <93a6> <93a6> 13234 <93a7> <93a7> 8256 <93a8> <93b3> 13235 <93b4> <93b4> 8846 <93b5> <93b7> 13247 <93b8> <93b8> 8159 <93b9> <93ba> 13250 <93bb> <93bb> 9054 <93bc> <93bc> 13252 <93bd> <93bd> 7786 <93be> <93c5> 13253 <93c6> <93c6> 8194 <93c7> <93ce> 13261 <93cf> <93cf> 8339 endcidrange 100 begincidrange <93d0> <93d6> 13269 <93d7> <93d7> 9055 <93d8> <93da> 13276 <93db> <93db> 7852 <93dc> <93dc> 7764 <93dd> <93e0> 13279 <93e1> <93e1> 7944 <93e2> <93e3> 13283 <93e4> <93e4> 8384 <93e5> <93e5> 9058 <93e6> <93e8> 13285 <93e9> <93e9> 8544 <93ea> <93ea> 13288 <93eb> <93eb> 8605 <93ec> <93ec> 8078 <93ed> <93ed> 8749 <93ee> <93ee> 13289 <93ef> <93ef> 8263 <93f0> <93f0> 13290 <93f1> <93f1> 8802 <93f2> <93f3> 13291 <93f4> <93f4> 8039 <93f5> <93f5> 7858 <93f6> <93f9> 13293 <93fa> <93fa> 7849 <93fb> <93fd> 13297 <93fe> <93fe> 8140 <9440> <9443> 13300 <9444> <9444> 8050 <9445> <944c> 13304 <944d> <944d> 8344 <944e> <944f> 13312 <9450> <9450> 7762 <9451> <9451> 8356 <9452> <9452> 7964 <9453> <9453> 8847 <9454> <9454> 13314 <9455> <9455> 8173 <9456> <9457> 13315 <9458> <9458> 9061 <9459> <945a> 13317 <945b> <945b> 7725 <945c> <945c> 8530 <945d> <945d> 9062 <945e> <945e> 13319 <945f> <945f> 8442 <9460> <9463> 13320 <9464> <9464> 9059 <9465> <9465> 13324 <9466> <9466> 8346 <9467> <946d> 13325 <946e> <946e> 8252 <946f> <9471> 13332 <9472> <9472> 8182 <9473> <9473> 13335 <9474> <9474> 9060 <9475> <9475> 13336 <9476> <9476> 7785 <9477> <9477> 13337 <9478> <9478> 9063 <9479> <9479> 13338 <947a> <947a> 8477 <947b> <947e> 13339 <9480> <9480> 8793 <9481> <9481> 8278 <9482> <9482> 8547 <9483> <9486> 13343 <9487> <9487> 8105 <9488> <9488> 8188 <9489> <94a0> 13347 <94a1> <94a1> 7726 <94a2> <94b2> 13371 <94b3> <94b3> 7868 <94b4> <94b4> 13388 <94b5> <94b5> 8514 <94b6> <94be> 13389 <94bf> <94bf> 8222 <94c0> <94c0> 7747 <94c1> <94cb> 13398 <94cc> <94cc> 9428 <94cd> <94d7> 13409 <94d8> <94d8> 8815 <94d9> <94df> 13420 <94e0> <94e0> 7895 <94e1> <94fe> 13427 <9540> <9571> 13457 <9572> <9572> 8493 <9573> <957e> 13507 <9580> <9582> 13519 <9583> <9583> 8859 <9584> <959d> 13522 <959e> <959e> 8790 <959f> <959f> 9384 <95a0> <95b2> 13548 <95b3> <95b3> 7801 <95b4> <95b9> 13567 <95ba> <95ba> 8794 <95bb> <95ce> 13573 <95cf> <95cf> 9383 <95d0> <95d0> 13593 endcidrange 100 begincidrange <95d1> <95d1> 9862 <95d2> <95d2> 9382 <95d3> <95d3> 13594 <95d4> <95d4> 8654 <95d5> <95e0> 13595 <95e1> <95e1> 9385 <95e2> <95e6> 13607 <95e7> <95e7> 8167 <95e8> <95f0> 13612 <95f1> <95f1> 8466 <95f2> <95f7> 13621 <95f8> <95f8> 8508 <95f9> <95fd> 13627 <95fe> <95fe> 8028 <9640> <9655> 13632 <9656> <9656> 9412 <9657> <967b> 13654 <967c> <967c> 7884 <967d> <967e> 13691 <9680> <96fe> 13693 <9740> <9766> 13820 <9767> <9767> 9322 <9768> <976b> 13859 <976c> <976c> 8565 <976d> <976d> 13863 <976e> <976e> 9325 <976f> <977e> 13864 <9780> <9795> 13880 <9796> <9796> 9323 <9797> <9797> 8799 <9798> <979c> 13902 <979d> <979d> 7886 <979e> <97a2> 13907 <97a3> <97a3> 8818 <97a4> <97be> 13912 <97bf> <97bf> 9331 <97c0> <97ed> 13939 <97ee> <97ee> 8702 <97ef> <97f6> 13985 <97f7> <97f7> 7934 <97f8> <97fe> 13993 <9840> <9844> 14000 <9845> <9845> 9333 <9846> <9848> 14005 <9849> <9849> 8714 <984a> <984e> 14008 <984f> <984f> 8047 <9850> <9870> 14013 <9871> <9871> 9320 <9872> <9872> 14046 <9873> <9873> 8448 <9874> <987e> 14047 <9880> <9880> 14058 <9881> <9881> 9334 <9882> <988a> 14059 <988b> <988b> 7975 <988c> <988c> 8407 <988d> <989f> 14068 <98a0> <98a0> 9340 <98a1> <98a9> 14087 <98aa> <98aa> 8097 <98ab> <98b5> 14096 <98b6> <98b6> 8874 <98b7> <98b7> 8197 <98b8> <98b9> 14107 <98ba> <98ba> 9324 <98bb> <98c6> 14109 <98c7> <98c7> 8254 <98c8> <98ca> 14121 <98cb> <98cb> 7756 <98cc> <98cf> 14124 <98d0> <98d0> 8506 <98d1> <98d2> 14128 <98d3> <98d3> 8708 <98d4> <98e2> 14130 <98e3> <98e3> 8387 <98e4> <98e4> 8512 <98e5> <98e5> 9335 <98e6> <98ee> 14145 <98ef> <98ef> 9332 <98f0> <98f1> 14154 <98f2> <98f2> 8413 <98f3> <98fe> 14156 <9940> <9942> 14168 <9943> <9943> 8040 <9944> <9944> 14171 <9945> <9945> 8581 <9946> <9965> 14172 <9966> <9966> 9330 <9967> <996d> 14204 <996e> <996e> 7861 <996f> <9974> 14211 <9975> <9975> 9336 <9976> <9979> 14217 <997a> <997a> 8075 <997b> <997b> 9348 <997c> <997e> 14221 <9980> <9984> 14224 <9985> <9985> 9881 <9986> <9988> 14229 endcidrange 100 begincidrange <9989> <9989> 9346 <998a> <998d> 14232 <998e> <998e> 8353 <998f> <9990> 14236 <9991> <9991> 8082 <9992> <9998> 14238 <9999> <9999> 7992 <999a> <99a8> 14245 <99a9> <99a9> 9349 <99aa> <99af> 14260 <99b0> <99b0> 9344 <99b1> <99b1> 9326 <99b2> <99b2> 14266 <99b3> <99b3> 9339 <99b4> <99b4> 9350 <99b5> <99b5> 9329 <99b6> <99bc> 14267 <99bd> <99bd> 9347 <99be> <99be> 9328 <99bf> <99bf> 14274 <99c0> <99c0> 9321 <99c1> <99c1> 14275 <99c2> <99c2> 9343 <99c3> <99c8> 14276 <99c9> <99c9> 9327 <99ca> <99cd> 14282 <99ce> <99ce> 9345 <99cf> <99d0> 14286 <99d1> <99d1> 8736 <99d2> <99d9> 14288 <99da> <99da> 8181 <99db> <99df> 14296 <99e0> <99e0> 8436 <99e1> <99e4> 14301 <99e5> <99e5> 9341 <99e6> <99e7> 14305 <99e8> <99e8> 9337 <99e9> <99eb> 14307 <99ec> <99ec> 9342 <99ed> <99f3> 14310 <99f4> <99f4> 9338 <99f5> <99fe> 14317 <9a40> <9a49> 14327 <9a4a> <9a4a> 8419 <9a4b> <9a56> 14337 <9a57> <9a57> 8365 <9a58> <9a64> 14349 <9a65> <9a65> 9419 <9a66> <9a66> 14362 <9a67> <9a67> 8019 <9a68> <9a70> 14363 <9a71> <9a71> 8537 <9a72> <9a75> 14372 <9a76> <9a76> 8211 <9a77> <9a77> 7987 <9a78> <9a7e> 14376 <9a80> <9a87> 14383 <9a88> <9a88> 7772 <9a89> <9a8b> 14391 <9a8c> <9a8c> 9352 <9a8d> <9a90> 14394 <9a91> <9a91> 9351 <9a92> <9a96> 14398 <9a97> <9a97> 9354 <9a98> <9a99> 14403 <9a9a> <9a9a> 9353 <9a9b> <9a9b> 9355 <9a9c> <9a9d> 14405 <9a9e> <9a9e> 8067 <9a9f> <9aa1> 14407 <9aa2> <9aa2> 8463 <9aa3> <9aa3> 8155 <9aa4> <9aa9> 14410 <9aaa> <9aaa> 8367 <9aab> <9acf> 14416 <9ad0> <9ad0> 9408 <9ad1> <9ad5> 14453 <9ad6> <9ad6> 8813 <9ad7> <9ad9> 14458 <9ada> <9ada> 9409 <9adb> <9ae1> 14461 <9ae2> <9ae2> 8394 <9ae3> <9ae3> 14468 <9ae4> <9ae4> 8423 <9ae5> <9ae5> 9410 <9ae6> <9afe> 14469 <9b40> <9b7e> 14494 <9b80> <9bd0> 14557 <9bd1> <9bd1> 9180 <9bd2> <9bdb> 14638 <9bdc> <9bdc> 9179 <9bdd> <9bfe> 14648 <9c40> <9c52> 14682 <9c53> <9c53> 8286 <9c54> <9c58> 14701 <9c59> <9c59> 8772 <9c5a> <9c5a> 9186 <9c5b> <9c5b> 14706 <9c5c> <9c5c> 8404 <9c5d> <9c74> 14707 endcidrange 100 begincidrange <9c75> <9c75> 8607 <9c76> <9c78> 14731 <9c79> <9c79> 7782 <9c7a> <9c7e> 14734 <9c80> <9c85> 14739 <9c86> <9c86> 8035 <9c87> <9c9c> 14745 <9c9d> <9c9d> 9181 <9c9e> <9caa> 14767 <9cab> <9cab> 8555 <9cac> <9cc9> 14780 <9cca> <9cca> 8885 <9ccb> <9cce> 14810 <9ccf> <9ccf> 7974 <9cd0> <9ce5> 14814 <9ce6> <9ce6> 7779 <9ce7> <9ce7> 8328 <9ce8> <9ceb> 14836 <9cec> <9cec> 7869 <9ced> <9ced> 14840 <9cee> <9cee> 9025 <9cef> <9cfa> 14841 <9cfb> <9cfb> 8011 <9cfc> <9cfd> 14853 <9cfe> <9cfe> 8850 <9d40> <9d41> 14855 <9d42> <9d42> 8484 <9d43> <9d45> 14857 <9d46> <9d46> 8264 <9d47> <9d47> 9184 <9d48> <9d4c> 14860 <9d4d> <9d4d> 8311 <9d4e> <9d4e> 14865 <9d4f> <9d4f> 8762 <9d50> <9d60> 14866 <9d61> <9d61> 8369 <9d62> <9d67> 14883 <9d68> <9d68> 8001 <9d69> <9d69> 8220 <9d6a> <9d6d> 14889 <9d6e> <9d6e> 8888 <9d6f> <9d70> 14893 <9d71> <9d71> 8822 <9d72> <9d74> 14895 <9d75> <9d75> 8091 <9d76> <9d7a> 14898 <9d7b> <9d7b> 8095 <9d7c> <9d7c> 14903 <9d7d> <9d7d> 9674 <9d7e> <9d7e> 14904 <9d80> <9d89> 14905 <9d8a> <9d8a> 8382 <9d8b> <9d8c> 14915 <9d8d> <9d8d> 8116 <9d8e> <9d90> 14917 <9d91> <9d91> 9175 <9d92> <9d98> 14920 <9d99> <9d99> 8453 <9d9a> <9da0> 14927 <9da1> <9da1> 9185 <9da2> <9da2> 8172 <9da3> <9da6> 14934 <9da7> <9da7> 9194 <9da8> <9dab> 14938 <9dac> <9dac> 9187 <9dad> <9dad> 8462 <9dae> <9db1> 14942 <9db2> <9db2> 8102 <9db3> <9db3> 8196 <9db4> <9dbd> 14946 <9dbe> <9dbe> 8093 <9dbf> <9dc5> 14956 <9dc6> <9dc6> 9189 <9dc7> <9dc8> 14963 <9dc9> <9dc9> 8804 <9dca> <9dcc> 14965 <9dcd> <9dcd> 9442 <9dce> <9dd1> 14968 <9dd2> <9dd2> 9182 <9dd3> <9dd4> 14972 <9dd5> <9dd5> 7876 <9dd6> <9de0> 14974 <9de1> <9de1> 8886 <9de2> <9de2> 8361 <9de3> <9df0> 14985 <9df1> <9df1> 8491 <9df2> <9df3> 14999 <9df4> <9df4> 8357 <9df5> <9df6> 15001 <9df7> <9df7> 9867 <9df8> <9df9> 15003 <9dfa> <9dfa> 8054 <9dfb> <9dfc> 15005 <9dfd> <9dfd> 8557 <9dfe> <9dfe> 15007 <9e40> <9e44> 15008 <9e45> <9e45> 8193 <9e46> <9e47> 15013 <9e48> <9e48> 8593 <9e49> <9e49> 7760 endcidrange 100 begincidrange <9e4a> <9e51> 15015 <9e52> <9e52> 8092 <9e53> <9e53> 15023 <9e54> <9e54> 9178 <9e55> <9e55> 15024 <9e56> <9e56> 8275 <9e57> <9e5c> 15025 <9e5d> <9e5d> 9193 <9e5e> <9e5e> 9188 <9e5f> <9e60> 15031 <9e61> <9e61> 8661 <9e62> <9e62> 15033 <9e63> <9e63> 9190 <9e64> <9e66> 15034 <9e67> <9e67> 9183 <9e68> <9e6b> 15037 <9e6c> <9e6c> 7759 <9e6d> <9e6e> 15041 <9e6f> <9e6f> 9177 <9e70> <9e71> 15043 <9e72> <9e72> 8212 <9e73> <9e73> 15045 <9e74> <9e74> 9196 <9e75> <9e75> 9195 <9e76> <9e7a> 15046 <9e7b> <9e7b> 9176 <9e7c> <9e7c> 9198 <9e7d> <9e7e> 15051 <9e80> <9e84> 15053 <9e85> <9e85> 9870 <9e86> <9e86> 15058 <9e87> <9e87> 9197 <9e88> <9e90> 15059 <9e91> <9e91> 8186 <9e92> <9e95> 15068 <9e96> <9e96> 9174 <9e97> <9e97> 9192 <9e98> <9ea1> 15072 <9ea2> <9ea2> 8454 <9ea3> <9ea5> 15082 <9ea6> <9ea6> 8203 <9ea7> <9ea8> 15085 <9ea9> <9ea9> 8550 <9eaa> <9ead> 15087 <9eae> <9eae> 9199 <9eaf> <9eb2> 15091 <9eb3> <9eb3> 8585 <9eb4> <9eb4> 8280 <9eb5> <9eb6> 15095 <9eb7> <9eb7> 9191 <9eb8> <9ef4> 15097 <9ef5> <9ef5> 8611 <9ef6> <9efe> 15158 <9f40> <9f4d> 15167 <9f4e> <9f4e> 8570 <9f4f> <9f6e> 15181 <9f6f> <9f6f> 8613 <9f70> <9f7e> 15213 <9f80> <9f91> 15228 <9f92> <9f92> 8226 <9f93> <9f97> 15246 <9f98> <9f98> 9430 <9f99> <9fa5> 15251 <9fa6> <9fa6> 9018 <9fa7> <9fa8> 15264 <9fa9> <9fa9> 7918 <9faa> <9fab> 15266 <9fac> <9fac> 9429 <9fad> <9fc8> 15268 <9fc9> <9fc9> 8744 <9fca> <9fcc> 15296 <9fcd> <9fcd> 9431 <9fce> <9fe0> 15299 <9fe1> <9fe1> 8444 <9fe2> <9fea> 15318 <9feb> <9feb> 7815 <9fec> <9fed> 15327 <9fee> <9fee> 9432 <9fef> <9ff3> 15329 <9ff4> <9ff4> 7866 <9ff5> <9ffc> 15334 <9ffd> <9ffd> 8473 <9ffe> <9ffe> 15342 15343 8556 15346 9433 15348 8743 15350 7775 15354 8863 15359 8029 15364 8124 15370 9434 15371 endcidrange 100 begincidrange 8521 15384 8262 15386 8192 15396 8592 15412 8712 15414 7910 15415 9411 15433 8396 15454 9024 15468 7889 15478 8620 15482 8879 15497 96 9897 190 240 250 262 356 439 525 549 602 635 9907 9970 668 700 9992 10016 10018 10019 10050 7703 738 15513 8630 7741 15526 8757 15560 9111 15561 9109 15564 8767 8490 15566 15569 7890 15595 9110 9112 15596 8354 15597 814 8036 15598 8235 15600 9108 8505 15601 8543 8641 9114 15602 9113 15604 15653 908 15686 8640 15692 9312 15734 9308 15744 15746 8541 15759 8741 8298 15764 15776 9313 15785 endcidrange 100 begincidrange 9307 15805 9314 15807 8020 15813 9311 15824 15834 8428 15836 9309 15840 9315 15843 9316 15848 15863 9381 15883 7792 15896 8335 15924 7746 15928 8014 15933 7857 15941 7819 15952 8134 15988 9646 16010 16013 7937 8704 16015 9650 7831 16025 8363 16026 9651 16036 8232 16038 16039 9647 16040 9649 16041 9644 16051 7758 16055 8706 9643 8838 16057 9645 16058 9654 16059 8675 9652 8751 8549 9655 16060 7913 16067 7717 16083 16084 9664 16107 8858 16108 940 16115 8814 16126 8125 16127 8068 8370 16128 8259 16129 16173 9860 16196 1034 16205 9455 16206 9454 endcidrange 100 begincidrange 16243 8308 16248 9863 16254 9456 16264 9869 16272 8864 16288 1128 16294 8107 16297 9896 16341 16355 9449 16363 9445 16366 8698 16367 1222 16385 8520 16405 9444 16408 9446 8439 16413 8299 16414 8871 16433 9452 16441 9451 16444 9443 16449 9450 16458 1316 16471 7826 16472 7719 16481 8166 16491 9447 8210 7916 16494 9448 16498 16527 8038 9436 16555 1410 16558 9890 16576 9437 16578 8206 16581 9435 7864 16582 16616 1504 16649 8853 16663 7808 16665 9847 16672 9764 8041 8747 16682 9599 8027 16698 8603 16704 9853 16705 1598 16735 8608 8582 16738 8429 endcidrange 100 begincidrange 16739 9657 16745 8170 16748 7844 8417 16756 9656 8800 16757 8418 16758 8513 16780 16787 8135 16789 1692 16819 7745 16835 9700 16851 8070 16876 16879 8115 16908 7919 1786 16910 8868 16912 9704 16913 9699 16930 8465 16932 9702 16938 9703 16947 8257 16956 16966 9706 16970 8079 16971 9708 16972 9707 16976 8400 8221 16992 1880 8183 16993 7821 17001 9705 17015 9710 8250 17017 9875 17020 9701 9709 17024 8201 17025 8293 17026 9891 17029 17045 1974 17078 9717 7932 17096 8228 17102 9883 17108 9715 17109 8921 17110 9716 17111 9243 17112 8136 17115 8059 endcidrange 100 begincidrange 17116 9245 17117 8780 8008 9244 9246 8447 8602 17118 8337 17119 8359 17121 9251 7835 9250 17123 8464 17124 8845 8049 7928 9249 17125 7923 17128 8625 9254 9253 8480 17138 2068 17141 8474 9252 17143 9256 17144 9258 9257 17146 8852 17147 8894 17148 7729 17149 9260 17156 8117 17157 9259 8111 17169 8296 8676 17171 7969 17174 8449 17175 8572 8522 9261 17182 8148 17184 8145 17185 7731 17192 9263 17193 9262 17195 9264 8667 17196 8536 17201 8130 17204 2162 17209 8889 17212 9270 17213 7822 9273 17216 8645 9271 8594 17222 9274 7961 8588 7744 endcidrange 100 begincidrange 8883 17223 8287 9272 9266 8820 17226 7836 9265 8325 17227 9269 17231 9275 17233 8119 9267 17235 8276 8670 17240 9268 17241 9277 8073 9276 17243 8046 7896 17246 7871 9285 17247 8777 17248 9281 17250 7751 8022 17251 8326 17253 8598 17255 9283 9279 17256 8227 17257 9282 17258 9278 17260 2256 9894 17261 9038 9286 9291 9284 17273 9255 9292 17277 7951 17286 9287 9289 9288 17287 8642 17290 8558 17293 7939 17296 9290 8540 17297 8891 9296 17299 9876 9295 9718 8273 17300 9294 17301 8890 8045 17303 9298 9297 17308 9301 17318 8841 8470 17319 endcidrange 100 begincidrange 9300 17323 2350 8443 17326 9280 17329 8486 8033 9885 17335 8074 9302 9305 9304 17336 8110 17338 8730 17343 8058 9293 9303 17345 9299 17353 9248 17354 8671 9861 17355 7790 17356 8740 9840 17359 8634 17360 9306 17361 8191 17363 17365 9698 17392 9882 17393 2444 17396 7914 17412 7724 17415 8290 9457 17425 9458 17426 9714 17444 8725 17446 17452 8622 17473 2538 17484 8416 17498 9666 17520 9665 17521 8488 17542 17543 8601 17547 8215 7840 8485 8525 17561 9668 8349 8842 17562 9667 17563 8569 2632 8248 17566 8533 17568 8658 17623 17626 9415 17630 endcidrange 100 begincidrange 8825 17652 2726 17657 8483 17666 9413 17668 9417 17675 8340 17678 8854 17680 7799 17687 7942 17706 8101 17708 17712 8345 17713 7853 9416 8360 17728 8223 17732 8389 17733 9418 17734 2820 17738 8176 17742 9414 17743 8797 8926 17747 8236 17752 8545 17764 8763 8665 8139 8137 17767 17791 7777 17810 9711 17818 8088 17819 2914 17821 9712 17822 8072 17824 8696 17826 8994 17853 9014 17867 17879 3008 17912 8875 17950 8127 17958 8061 17964 9011 17968 17971 3102 18004 8013 18005 9012 18018 8177 18020 8587 18039 9033 18046 8715 18061 9030 18068 9031 18078 endcidrange 100 begincidrange 8595 18079 9889 18083 8034 18086 3196 18089 9037 9032 18104 7776 18133 9029 18134 7954 18140 18147 8216 9013 18162 9020 18173 3290 18177 9839 18191 9041 18198 8096 18200 9016 18202 8731 18206 9026 18218 9039 18221 9021 18225 9028 9009 18228 9035 18229 9019 18230 9040 18237 7860 8614 18241 8651 18243 9045 18250 3384 18256 9022 18259 8052 18260 9008 18261 9856 18264 8410 18266 9034 18274 8081 18279 8455 18280 9023 18290 8180 9027 18306 18308 8722 18315 8711 18321 9049 18324 8788 18333 9010 18334 3478 7718 9047 18336 9048 8258 8531 18343 8379 endcidrange 100 begincidrange 18346 9050 18358 9046 18361 9015 18364 8185 18372 9043 18383 8289 18386 18387 7829 18401 8265 18406 8002 18407 8168 18413 3572 18416 18479 9690 18495 9687 18502 3666 18510 8494 18549 8626 18559 18571 8606 18572 9692 18577 8300 18596 8742 18598 3760 18600 9696 18614 8827 18620 9694 18622 9697 18625 9685 18640 7787 18646 9691 18647 7817 18649 9689 18652 18654 8721 18655 8745 9686 18662 9693 9695 18670 8175 18679 9688 3854 18680 7977 18693 7771 18696 8310 18699 8855 18705 9872 18708 8511 18714 8600 18718 7816 18719 8844 18733 18734 3948 18767 9713 endcidrange 100 begincidrange 18788 8204 18791 7768 8876 18798 9895 18816 9846 18823 18824 8161 9659 18853 4042 9662 18855 8925 18857 9661 18866 7722 18880 9660 9658 18886 9663 18889 8583 18893 9835 18894 7807 18896 8621 18898 18907 8086 18917 7986 18920 8324 18923 8502 18925 9400 18926 9402 4136 18934 9404 18938 8420 18941 9401 18942 9405 18944 9406 18946 9407 18950 8146 18952 8189 18954 9403 7981 18955 9737 18980 9738 18981 7828 18982 18984 8927 7883 7949 18989 8055 18992 8683 18993 8929 18994 8559 18995 8928 18996 8682 18998 8930 8395 18999 8056 19000 7906 19002 8690 endcidrange 100 begincidrange 4230 19003 8528 19004 8147 19007 8933 19008 7922 19012 8479 19014 8669 19017 8532 19019 8935 19020 8834 19023 8934 19028 8936 19032 8932 19038 8810 19039 8939 19040 8937 8381 19041 8938 19043 8893 19045 7838 19047 8950 8679 8726 19049 8503 19051 8492 19053 7784 8946 7991 8947 19054 8943 8016 7952 8648 19055 8945 19056 8944 19061 8942 19063 4324 19064 8941 8862 8940 8162 19067 8446 19070 8953 19073 7855 19074 8758 19076 8951 19077 8765 19080 7810 8118 19081 8612 8618 8952 8529 19082 8032 19083 8519 19086 8517 19089 8156 19090 8961 19093 endcidrange 100 begincidrange 7925 19095 8728 19097 7878 19099 8960 19101 8884 19102 8553 19104 8957 19105 8426 19106 8948 19107 8955 19108 8956 8231 19109 8288 8959 19112 8958 7879 19115 8972 19116 8949 19119 4418 8966 19120 8970 8659 19121 8963 19124 8967 8971 19125 8031 19127 8969 19128 8962 7940 8861 19130 8699 19131 8968 19132 8364 19133 8334 8965 8599 19134 8561 8856 19135 8023 19138 8322 19141 8977 19142 8964 19145 8975 7733 19146 8401 8976 8099 19147 8662 19148 8710 19151 19153 8973 19156 8978 8333 8979 19158 8931 19163 8122 19168 8312 19172 4512 19179 8840 endcidrange 100 begincidrange 19182 8982 8043 19186 8980 19192 8496 8981 8552 19193 8388 19194 8984 19207 8729 8727 19209 8405 19212 8010 19214 8768 19219 7891 19221 19227 7753 19230 9755 19233 7789 8440 19236 8187 8985 19237 8974 19242 8983 19243 4606 19252 8392 19265 7933 19270 19313 7739 8831 19329 7948 7769 7972 19330 8378 8037 7920 8548 7984 8801 19334 4695 19335 8866 9387 19336 9391 7912 7993 19337 7752 8304 7848 19338 9388 7927 8566 9389 19339 8315 8005 9386 8267 8239 8026 9392 19340 8887 8063 19341 8805 19342 9394 8475 7761 19348 9396 19349 9395 19353 endcidrange 100 begincidrange 7839 19354 8472 19355 8372 9135 8635 8306 8085 19356 7946 9398 19357 8849 9397 8824 7892 19359 8179 19365 8873 9399 7976 8457 8903 19370 9390 8881 19375 8806 19377 8795 8900 19378 8469 4789 19379 8746 9393 19380 8509 19385 7957 8796 19389 7956 19425 8826 19428 19435 8430 19440 9720 19448 4883 19466 8084 19498 8752 19521 19527 9725 19531 9728 19537 9734 19549 4977 19557 9727 19562 9724 7820 9730 19571 8781 19572 9732 9726 9731 19573 9729 19578 9733 19582 7843 9736 19585 9735 19588 8432 19604 19606 7803 8807 7990 8150 19613 8672 19616 endcidrange 100 begincidrange 9356 19617 9357 19623 8450 19626 9364 5071 19630 9363 19636 9358 19642 8857 9361 9366 9359 9362 19647 9367 19648 8113 19652 9370 19653 9369 19654 8792 9368 19655 9371 19662 7945 8422 19663 8230 9375 8025 9373 19668 19672 7995 9372 19673 7738 8283 19675 8048 19679 9376 19682 8507 19686 7943 19688 8816 8759 19690 9426 19692 8627 5165 8773 9377 19693 8872 19695 8828 8112 19698 9378 19703 8006 19713 9088 9365 19714 9360 19715 7728 19726 7837 7755 7754 8362 19729 19741 9851 19759 9202 19771 5259 8830 19772 8217 19773 8123 19783 8787 19797 endcidrange 100 begincidrange 7998 7846 8590 19798 8684 19801 7870 19802 8778 19803 8499 19807 7812 19813 8399 8674 19815 8719 19816 8233 19817 8307 8021 19818 9201 19820 7750 19821 8291 9203 19824 5353 19846 8990 19862 8755 19874 8992 19885 8647 19887 8892 19895 8988 19896 8785 19897 19902 7867 19909 8839 19914 8237 7851 19915 8989 19916 8991 19917 8987 19919 5447 19928 8993 19930 8789 19963 7823 19966 8716 8100 19977 19986 8347 8664 19990 9722 19991 9721 19992 8500 19994 9459 9464 19995 9463 7880 9462 19996 8832 19998 7877 9467 20003 5541 20004 9466 20005 7917 20006 endcidrange 100 begincidrange 9469 20017 9465 20018 9470 8397 20019 9480 9476 20024 9478 20026 9471 8336 20029 7901 7973 20032 9475 9474 20033 7802 8358 20035 8149 20043 7953 20047 9479 9472 9477 20048 9497 20054 9493 20055 9484 8241 20057 9483 9487 9498 9481 20059 9486 8756 9491 8064 20061 9473 5635 20065 9495 9494 20067 9496 20070 7766 20073 9485 20076 8403 20077 8314 8398 20079 9488 20081 7765 20084 9482 20087 9489 20092 8106 20101 9502 7967 20102 9517 8733 20105 9522 20107 8571 20108 8623 20118 9516 20119 9512 20121 8332 20122 9519 20123 8636 20124 9501 20127 endcidrange 100 begincidrange 9525 20129 8717 9510 20130 5729 9524 9514 9503 9521 9500 20131 9509 20134 8653 20139 8666 20140 8562 9534 20141 8271 20145 9539 20146 8663 20147 7740 20148 9513 20151 9505 20153 7935 20155 9535 20165 9540 20166 9507 7824 9530 9541 20169 9533 20170 8385 20171 8451 9504 9532 9531 9528 20173 9536 20177 8141 20178 7960 20181 9547 20185 9543 9551 20189 5823 20190 8880 20196 9542 20197 9548 20199 7834 9554 9520 9545 20201 9553 7882 20204 8402 20205 8120 20208 8313 20209 8619 20211 9549 7845 20213 8268 8320 20215 9837 20217 9527 20218 9546 endcidrange 100 begincidrange 8632 20224 9550 20225 9468 9556 20227 20229 7996 20230 7893 20231 9558 20237 8808 20240 7894 20242 9559 9555 20250 9544 20253 5917 8412 20254 9561 20257 8087 9557 20261 8829 20264 9598 20267 8316 20270 9562 20271 9566 20273 7732 20275 8542 20285 9568 20286 8610 9044 20295 9571 9511 20297 9518 9560 20298 7963 20299 8835 20300 9572 20301 8352 20303 9573 20304 9569 20306 9570 20312 9580 20315 9581 8224 20318 9567 9578 6011 20320 9582 20323 9529 9564 20327 9576 9579 7791 20330 8132 9575 20331 9563 20332 9757 20335 9515 20347 9585 20348 9591 endcidrange 100 begincidrange 20349 9506 20358 9523 20365 20367 8234 20369 9526 9587 9583 20370 8851 9592 20373 9584 20376 9589 20378 9537 9565 20383 8218 6105 20388 9594 8198 20391 8567 20392 9499 20394 9508 20395 9595 20398 8867 20402 9593 20407 9574 20408 8083 20413 9596 20414 9492 20425 9597 20427 9586 20428 9588 20434 8782 20436 8646 20437 8351 20441 9590 20442 8292 8895 9756 8798 20444 6199 20461 7797 20473 8317 20480 9151 8467 20481 9152 20483 7749 20485 8152 9156 20486 9154 8452 20487 8637 20488 8071 9155 20489 8809 20492 8003 20500 7966 9849 7915 20501 7989 endcidrange 100 begincidrange 8330 20503 9159 9161 9158 20504 8783 20508 9163 20511 8691 20513 8695 9167 9166 9162 9165 20514 9168 20517 9836 20519 9153 20520 8174 9169 6293 8184 20521 9171 20524 9170 9172 7832 20527 7980 20532 9173 20533 7793 9873 20535 9157 20537 8986 20574 8468 20577 8836 20579 8732 20585 7806 8269 20586 8705 20590 7897 6387 20599 8114 20600 8786 20603 8057 20605 8535 20615 8639 20616 8735 20621 8253 20622 8213 20624 9893 20625 8534 20635 8516 20637 7825 8791 20638 8202 8338 20642 20647 8784 20652 7875 20656 6481 20678 8616 20684 9741 20699 9740 endcidrange 100 begincidrange 20702 9742 20703 8242 20706 9739 20719 8899 20726 20734 7971 20756 6575 20766 9877 20772 9822 20789 9821 20794 9874 20796 9823 20798 8589 8445 20799 8000 20805 9317 20810 9319 20812 9318 20813 20818 8649 20835 8713 7881 8425 20836 8650 8518 9669 8668 20837 9310 20838 8527 20839 9670 6669 9671 8769 8586 7727 7900 20840 8383 8244 20843 9673 20846 9672 20850 8718 20852 9675 20853 8573 20859 8062 20861 9676 8131 20867 8377 20869 8577 20870 8154 20878 8563 7905 9677 20883 9678 8694 20887 8779 9681 20890 7872 20891 8200 20893 9680 20896 9682 endcidrange 100 begincidrange 20898 7978 20899 7794 9683 20902 6763 8638 9684 8260 20904 9679 8435 20905 7936 20911 9420 20916 9880 20917 9848 20918 9422 20920 9423 20925 8376 20932 9424 20933 9425 20934 7924 20944 9115 20946 9854 20947 20949 9117 9119 20951 9121 20952 7921 20953 8734 20955 9122 20956 8523 7734 8501 20963 8109 20967 7763 20968 6857 20970 9123 8707 20971 7911 20972 9124 8343 7908 20974 8760 20978 9125 20980 8090 20982 8643 20984 7982 20990 9116 20999 9126 21002 9118 21006 8245 9127 21007 9128 21010 8309 21011 9129 9131 8171 9132 21013 8042 8441 21017 endcidrange 100 begincidrange 9830 21019 9831 21023 7788 21024 9133 21027 6951 21037 8301 8770 7938 21055 8579 21057 7813 8681 21058 7767 21070 8869 9223 8138 21084 9218 8066 21085 9224 9220 21087 8497 21088 8580 21089 9219 21090 8302 9227 21091 7999 21101 8295 21104 7045 21112 8151 21117 7811 21118 9231 21121 9230 8391 9229 21128 9234 21134 8375 21136 9200 21153 9233 9236 21154 8560 21155 9221 8460 9237 21160 8294 21165 9042 9235 9232 9238 8433 21166 9226 21170 9225 21172 9240 21173 8103 21178 8700 21179 7139 8129 9222 21181 8860 21184 8270 21186 9242 9241 21187 endcidrange 100 begincidrange 9228 21191 7721 21207 9825 21225 9892 8564 9827 9826 21226 21231 9845 21243 8524 7233 21262 9850 21267 9888 21277 9832 21283 7888 21284 8342 21285 9164 21286 9160 21290 8766 21291 9829 21307 9828 21313 8761 21314 8266 21334 9759 21338 9758 21340 7327 21344 9760 21349 9761 21350 9762 21360 9767 7737 9765 21361 9769 21368 9774 9771 21370 9770 9773 21381 9768 8633 21382 21394 9782 9776 21399 9784 21404 8205 9783 21405 9797 21414 9786 21415 9795 7421 21419 9792 21420 9789 9793 21423 9790 21424 9791 8128 21426 9787 21427 9794 21431 9796 21434 endcidrange 100 begincidrange 9785 21442 9804 21443 9799 9803 21451 9801 21454 9800 21456 9802 8456 21457 21464 9805 21469 9780 21471 9809 21472 9808 9810 21474 9807 21477 9778 9806 9811 21480 9815 21481 9781 21482 9779 21483 9814 7515 21484 9812 21486 9816 21492 9813 7757 21494 9819 21502 9818 21503 9817 8238 9775 21504 9798 21508 9766 21509 9820 21516 9772 21521 9763 21531 9777 21532 7609 21565 8348 21567 9600 21570 8924 21572 7941 8331 21578 9601 21579 9603 9602 21594 8686 21595 8578 21606 8771 21611 9607 21612 9608 21613 21615 9604 21616 8701 21618 8687 21619 9610 endcidrange 100 begincidrange 9612 21625 8007 21635 7965 21638 9613 21640 8144 9618 9615 21654 9620 7904 21662 9617 9621 21664 9623 21672 8374 21673 9624 21675 8438 21677 21692 9605 21697 9625 21698 9622 21707 9626 21711 9627 21712 21720 9629 21722 9630 21725 9036 21730 8004 21734 9824 9632 21740 9628 21743 9631 21744 8044 21745 9634 21759 8366 21762 9611 9635 21763 21770 9609 9637 21773 9636 21781 9638 9619 21783 9639 8738 9641 21787 21795 9640 21804 9606 21812 9633 9642 21816 9616 9614 21817 9864 21842 9886 9723 21845 8076 8692 21846 21847 8207 21863 8305 21874 9719 endcidrange 71 begincidrange 21876 21877 9878 21881 9871 21885 8922 21901 7873 21909 7859 21913 9834 21919 9866 21920 9833 21922 9752 21924 21930 9754 21933 9843 21939 21961 8390 8811 21979 9427 7814 21982 9743 21983 9745 21987 9747 21989 9744 9746 8240 21991 9841 21992 9748 21994 9750 21997 9749 21998 8434 22003 9751 22007 22008 8247 22016 8371 22018 7970 9453 22021 7988 22024 2562 16595 8204 20611 4697 22032 22094 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBK-EUC-UCS2 b/Resources/cmap/GBK-EUC-UCS2 deleted file mode 100644 index ea633f29f7a..00000000000 --- a/Resources/cmap/GBK-EUC-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBK-EUC-UCS2) %%Title: (GBK-EUC-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GBK_EUC_UCS2) def /Supplement 2 def end def /CMapName /GBK-EUC-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 3 begincodespacerange <00> <80> <8140> endcodespacerange 100 beginbfrange <00> <80> <0000> <8140> <8140> <4E02> <8141> <8143> <4E04> <8144> <8144> <4E0F> <8145> <8145> <4E12> <8146> <8146> <4E17> <8147> <8149> <4E1F> <814A> <814A> <4E23> <814B> <814B> <4E26> <814C> <814C> <4E29> <814D> <814E> <4E2E> <814F> <814F> <4E31> <8150> <8150> <4E33> <8151> <8151> <4E35> <8152> <8152> <4E37> <8153> <8153> <4E3C> <8154> <8156> <4E40> <8157> <8157> <4E44> <8158> <8158> <4E46> <8159> <8159> <4E4A> <815A> <815A> <4E51> <815B> <815B> <4E55> <815C> <815C> <4E57> <815D> <815E> <4E5A> <815F> <8162> <4E62> <8163> <8164> <4E67> <8165> <816A> <4E6A> <816B> <816B> <4E72> <816C> <8175> <4E74> <8176> <817C> <4E7F> <817D> <817D> <4E87> <817E> <817E> <4E8A> <8180> <8180> <4E90> <8181> <8182> <4E96> <8183> <8183> <4E99> <8184> <8186> <4E9C> <8187> <8187> <4EA3> <8188> <8188> <4EAA> <8189> <818B> <4EAF> <818C> <818C> <4EB4> <818D> <8190> <4EB6> <8191> <8193> <4EBC> <8194> <8194> <4EC8> <8195> <8195> <4ECC> <8196> <8197> <4ECF> <8198> <8198> <4ED2> <8199> <819B> <4EDA> <819C> <819C> <4EE0> <819D> <819D> <4EE2> <819E> <819F> <4EE6> <81A0> <81A0> <4EE9> <81A1> <81A3> <4EED> <81A4> <81A4> <4EF1> <81A5> <81A5> <4EF4> <81A6> <81A8> <4EF8> <81A9> <81A9> <4EFC> <81AA> <81AA> <4EFE> <81AB> <81AB> <4F00> <81AC> <81B2> <4F02> <81B3> <81B4> <4F0B> <81B5> <81B9> <4F12> <81BA> <81BB> <4F1C> <81BC> <81BC> <4F21> <81BD> <81BD> <4F23> <81BE> <81BF> <4F28> <81C0> <81C2> <4F2C> <81C3> <81C3> <4F31> <81C4> <81C4> <4F33> <81C5> <81C5> <4F35> <81C6> <81C6> <4F37> <81C7> <81C7> <4F39> <81C8> <81C8> <4F3B> <81C9> <81CD> <4F3E> <81CE> <81CF> <4F44> <81D0> <81D5> <4F47> <81D6> <81D6> <4F52> <81D7> <81D7> <4F54> <81D8> <81D8> <4F56> <81D9> <81DA> <4F61> <81DB> <81DB> <4F66> <81DC> <81DC> <4F68> <81DD> <81DE> <4F6A> <81DF> <81E0> <4F6D> <81E1> <81E2> <4F71> <81E3> <81E3> <4F75> <81E4> <81E7> <4F77> <81E8> <81E8> <4F7D> <81E9> <81EB> <4F80> <81EC> <81EE> <4F85> <81EF> <81EF> <4F8A> <81F0> <81F0> <4F8C> <81F1> <81F1> <4F8E> <81F2> <81F2> <4F90> <81F3> <81F4> <4F92> <81F5> <81F6> <4F95> <81F7> <81F9> <4F98> <81FA> <81FA> <4F9C> <81FB> <81FC> <4F9E> <81FD> <81FE> <4FA1> endbfrange 100 beginbfrange <8240> <8240> <4FA4> <8241> <8241> <4FAB> <8242> <8242> <4FAD> <8243> <8247> <4FB0> <8248> <8250> <4FB6> <8251> <8253> <4FC0> <8254> <8257> <4FC6> <8258> <825A> <4FCB> <825B> <825F> <4FD2> <8260> <8260> <4FD9> <8261> <8261> <4FDB> <8262> <8262> <4FE0> <8263> <8263> <4FE2> <8264> <8265> <4FE4> <8266> <8266> <4FE7> <8267> <8268> <4FEB> <8269> <8269> <4FF0> <826A> <826A> <4FF2> <826B> <826E> <4FF4> <826F> <826F> <4FF9> <8270> <8272> <4FFB> <8273> <827E> <4FFF> <8280> <8280> <500B> <8281> <8281> <500E> <8282> <8283> <5010> <8284> <8284> <5013> <8285> <8287> <5015> <8288> <8288> <501B> <8289> <828A> <501D> <828B> <828B> <5020> <828C> <828E> <5022> <828F> <828F> <5027> <8290> <8290> <502B> <8291> <829B> <502F> <829C> <829C> <503B> <829D> <829D> <503D> <829E> <82A1> <503F> <82A2> <82A4> <5044> <82A5> <82A7> <5049> <82A8> <82A8> <504D> <82A9> <82AD> <5050> <82AE> <82B1> <5056> <82B2> <82B2> <505B> <82B3> <82BA> <505D> <82BB> <82C0> <5066> <82C1> <82C9> <506D> <82CA> <82CC> <5078> <82CD> <82CE> <507C> <82CF> <82D2> <5081> <82D3> <82D4> <5086> <82D5> <82D8> <5089> <82D9> <82ED> <508E> <82EE> <82EE> <50A4> <82EF> <82EF> <50A6> <82F0> <82F1> <50AA> <82F2> <82F6> <50AD> <82F7> <82FD> <50B3> <82FE> <82FE> <50BC> <8340> <8351> <50BD> <8352> <8357> <50D0> <8358> <835A> <50D7> <835B> <8365> <50DB> <8366> <8369> <50E8> <836A> <836D> <50EF> <836E> <836E> <50F4> <836F> <8373> <50F6> <8374> <837D> <50FC> <837E> <837E> <5108> <8380> <8381> <5109> <8382> <8387> <510C> <8388> <8395> <5113> <8396> <83B2> <5122> <83B3> <83B3> <5142> <83B4> <83B4> <5147> <83B5> <83B5> <514A> <83B6> <83B6> <514C> <83B7> <83B9> <514E> <83BA> <83BB> <5152> <83BC> <83BE> <5157> <83BF> <83BF> <515B> <83C0> <83C4> <515D> <83C5> <83C6> <5163> <83C7> <83C8> <5166> <83C9> <83CA> <5169> <83CB> <83CB> <516F> <83CC> <83CC> <5172> <83CD> <83CD> <517A> <83CE> <83CF> <517E> <83D0> <83D1> <5183> <83D2> <83D3> <5186> <83D4> <83D5> <518A> <83D6> <83D9> <518E> <83DA> <83DB> <5193> <83DC> <83DC> <5198> <83DD> <83DD> <519A> <83DE> <83E0> <519D> <83E1> <83E1> <51A1> <83E2> <83E2> <51A3> <83E3> <83E7> <51A6> <83E8> <83E9> <51AD> endbfrange 100 beginbfrange <83EA> <83EA> <51B4> <83EB> <83ED> <51B8> <83EE> <83EF> <51BE> <83F0> <83F2> <51C1> <83F3> <83F3> <51C5> <83F4> <83F4> <51C8> <83F5> <83F5> <51CA> <83F6> <83F7> <51CD> <83F8> <83F8> <51D0> <83F9> <83FE> <51D2> <8440> <8442> <51D8> <8443> <8443> <51DC> <8444> <8445> <51DE> <8446> <8447> <51E2> <8448> <844D> <51E5> <844E> <844E> <51EC> <844F> <844F> <51EE> <8450> <8451> <51F1> <8452> <8452> <51F4> <8453> <8453> <51F7> <8454> <8454> <51FE> <8455> <8456> <5204> <8457> <8457> <5209> <8458> <8459> <520B> <845A> <845B> <520F> <845C> <845E> <5213> <845F> <845F> <521C> <8460> <8461> <521E> <8462> <8464> <5221> <8465> <8467> <5225> <8468> <8468> <522A> <8469> <8469> <522C> <846A> <846A> <522F> <846B> <846C> <5231> <846D> <846E> <5234> <846F> <846F> <523C> <8470> <8470> <523E> <8471> <8476> <5244> <8477> <8477> <524B> <8478> <8479> <524E> <847A> <847B> <5252> <847C> <847C> <5255> <847D> <847E> <5257> <8480> <8482> <5259> <8483> <8483> <525D> <8484> <8485> <525F> <8486> <8488> <5262> <8489> <8489> <5266> <848A> <848A> <5268> <848B> <848E> <526B> <848F> <8490> <5270> <8491> <849A> <5273> <849B> <849B> <527E> <849C> <849C> <5280> <849D> <84A1> <5283> <84A2> <84A8> <5289> <84A9> <84AA> <5291> <84AB> <84B1> <5294> <84B2> <84B2> <529C> <84B3> <84B6> <52A4> <84B7> <84B9> <52AE> <84BA> <84C3> <52B4> <84C4> <84C6> <52C0> <84C7> <84C9> <52C4> <84CA> <84CA> <52C8> <84CB> <84CB> <52CA> <84CC> <84CF> <52CC> <84D0> <84D0> <52D1> <84D1> <84D3> <52D3> <84D4> <84D4> <52D7> <84D5> <84DA> <52D9> <84DB> <84DE> <52E0> <84DF> <84E9> <52E5> <84EA> <84F1> <52F1> <84F2> <84F4> <52FB> <84F5> <84F8> <5301> <84F9> <84F9> <5307> <84FA> <84FD> <5309> <84FE> <84FE> <530E> <8540> <8543> <5311> <8544> <8544> <5318> <8545> <8546> <531B> <8547> <8548> <531E> <8549> <8549> <5322> <854A> <854B> <5324> <854C> <854E> <5327> <854F> <8551> <532B> <8552> <855B> <532F> <855C> <855D> <533C> <855E> <855E> <5340> <855F> <855F> <5342> <8560> <8560> <5344> <8561> <8561> <5346> <8562> <8564> <534B> <8565> <8565> <5350> <8566> <8566> <5354> <8567> <8568> <5358> <8569> <8569> <535B> <856A> <856A> <535D> <856B> <856B> <5365> endbfrange 100 beginbfrange <856C> <856C> <5368> <856D> <856D> <536A> <856E> <856F> <536C> <8570> <8570> <5372> <8571> <8571> <5376> <8572> <8572> <5379> <8573> <8576> <537B> <8577> <8578> <5380> <8579> <8579> <5383> <857A> <857B> <5387> <857C> <857C> <538A> <857D> <857E> <538E> <8580> <8584> <5390> <8585> <8586> <5396> <8587> <8587> <5399> <8588> <8589> <539B> <858A> <858A> <539E> <858B> <858C> <53A0> <858D> <858D> <53A4> <858E> <858E> <53A7> <858F> <8592> <53AA> <8593> <8599> <53AF> <859A> <859D> <53B7> <859E> <85A0> <53BC> <85A1> <85A1> <53C0> <85A2> <85A6> <53C3> <85A7> <85A9> <53CE> <85AA> <85AB> <53D2> <85AC> <85AC> <53D5> <85AD> <85AD> <53DA> <85AE> <85B0> <53DC> <85B1> <85B2> <53E1> <85B3> <85B3> <53E7> <85B4> <85B4> <53F4> <85B5> <85B5> <53FA> <85B6> <85B8> <53FE> <85B9> <85B9> <5402> <85BA> <85BA> <5405> <85BB> <85BB> <5407> <85BC> <85BC> <540B> <85BD> <85BD> <5414> <85BE> <85C0> <5418> <85C1> <85C1> <541C> <85C2> <85C2> <5422> <85C3> <85C4> <5424> <85C5> <85C5> <542A> <85C6> <85C6> <5430> <85C7> <85C7> <5433> <85C8> <85C9> <5436> <85CA> <85CA> <543A> <85CB> <85CB> <543D> <85CC> <85CC> <543F> <85CD> <85CE> <5441> <85CF> <85D0> <5444> <85D1> <85D1> <5447> <85D2> <85D2> <5449> <85D3> <85D6> <544C> <85D7> <85D7> <5451> <85D8> <85D8> <545A> <85D9> <85DD> <545D> <85DE> <85DE> <5463> <85DF> <85DF> <5465> <85E0> <85E0> <5467> <85E1> <85E8> <5469> <85E9> <85E9> <5474> <85EA> <85EB> <5479> <85EC> <85ED> <547E> <85EE> <85EE> <5481> <85EF> <85EF> <5483> <85F0> <85F0> <5485> <85F1> <85F4> <5487> <85F5> <85F5> <548D> <85F6> <85F6> <5491> <85F7> <85F7> <5493> <85F8> <85F9> <5497> <85FA> <85FA> <549C> <85FB> <85FE> <549E> <8640> <8640> <54A2> <8641> <8641> <54A5> <8642> <8642> <54AE> <8643> <8643> <54B0> <8644> <8644> <54B2> <8645> <8647> <54B5> <8648> <8649> <54B9> <864A> <864A> <54BC> <864B> <864B> <54BE> <864C> <864C> <54C3> <864D> <864D> <54C5> <864E> <864F> <54CA> <8650> <8650> <54D6> <8651> <8651> <54D8> <8652> <8652> <54DB> <8653> <8657> <54E0> <8658> <8659> <54EB> <865A> <865C> <54EF> <865D> <8662> <54F4> <8663> <8663> <54FB> <8664> <8664> <54FE> <8665> <8665> <5500> <8666> <8669> <5502> endbfrange 100 beginbfrange <866A> <866A> <5508> <866B> <866F> <550A> <8670> <8671> <5512> <8672> <8677> <5515> <8678> <867B> <551C> <867C> <867C> <5521> <867D> <867E> <5525> <8680> <8681> <5528> <8682> <8682> <552B> <8683> <8683> <552D> <8684> <8684> <5532> <8685> <8687> <5534> <8688> <868B> <5538> <868C> <868C> <553D> <868D> <868D> <5540> <868E> <868E> <5542> <868F> <868F> <5545> <8690> <8691> <5547> <8692> <8696> <554B> <8697> <869A> <5551> <869B> <869F> <5557> <86A0> <86A3> <555D> <86A4> <86A5> <5562> <86A6> <86A7> <5568> <86A8> <86A8> <556B> <86A9> <86AE> <556F> <86AF> <86B0> <5579> <86B1> <86B1> <557D> <86B2> <86B2> <557F> <86B3> <86B4> <5585> <86B5> <86B7> <558C> <86B8> <86B8> <5590> <86B9> <86BA> <5592> <86BB> <86BD> <5595> <86BE> <86BF> <559A> <86C0> <86C0> <559E> <86C1> <86C7> <55A0> <86C8> <86D0> <55A8> <86D1> <86D1> <55B2> <86D2> <86D2> <55B4> <86D3> <86D3> <55B6> <86D4> <86D4> <55B8> <86D5> <86D5> <55BA> <86D6> <86D6> <55BC> <86D7> <86DB> <55BF> <86DC> <86DE> <55C6> <86DF> <86E0> <55CA> <86E1> <86E3> <55CE> <86E4> <86E4> <55D5> <86E5> <86E9> <55D7> <86EA> <86EA> <55DE> <86EB> <86EB> <55E0> <86EC> <86EC> <55E2> <86ED> <86ED> <55E7> <86EE> <86EE> <55E9> <86EF> <86F0> <55ED> <86F1> <86F2> <55F0> <86F3> <86F3> <55F4> <86F4> <86F4> <55F6> <86F5> <86F9> <55F8> <86FA> <86FA> <55FF> <86FB> <86FE> <5602> <8740> <8741> <5606> <8742> <8743> <560A> <8744> <8744> <560D> <8745> <874C> <5610> <874D> <874E> <5619> <874F> <8750> <561C> <8751> <8753> <5620> <8754> <8755> <5625> <8756> <8759> <5628> <875A> <875C> <562E> <875D> <875D> <5633> <875E> <875E> <5635> <875F> <8760> <5637> <8761> <8761> <563A> <8762> <8764> <563C> <8765> <8770> <5640> <8771> <8775> <564F> <8776> <8777> <5655> <8778> <8779> <565A> <877A> <877E> <565D> <8780> <8780> <5663> <8781> <8783> <5665> <8784> <8787> <566D> <8788> <878B> <5672> <878C> <878F> <5677> <8790> <8797> <567D> <8798> <879E> <5687> <879F> <87A1> <5690> <87A2> <87B0> <5694> <87B1> <87BB> <56A4> <87BC> <87C2> <56B0> <87C3> <87C6> <56B8> <87C7> <87D3> <56BD> <87D4> <87DC> <56CB> <87DD> <87DE> <56D5> <87DF> <87E0> <56D8> <87E1> <87E1> <56DC> <87E2> <87E2> <56E3> endbfrange 100 beginbfrange <87E3> <87E8> <56E5> <87E9> <87E9> <56EC> <87EA> <87EB> <56EE> <87EC> <87ED> <56F2> <87EE> <87F0> <56F6> <87F1> <87F2> <56FB> <87F3> <87F5> <5700> <87F6> <87F6> <5705> <87F7> <87F7> <5707> <87F8> <87FE> <570B> <8840> <8849> <5712> <884A> <884B> <571D> <884C> <884E> <5720> <884F> <8852> <5724> <8853> <8853> <572B> <8854> <8855> <5731> <8856> <885A> <5734> <885B> <885C> <573C> <885D> <885D> <573F> <885E> <885E> <5741> <885F> <8862> <5743> <8863> <8864> <5748> <8865> <8865> <574B> <8866> <886A> <5752> <886B> <886C> <5758> <886D> <886E> <5762> <886F> <886F> <5765> <8870> <8870> <5767> <8871> <8871> <576C> <8872> <8872> <576E> <8873> <8875> <5770> <8876> <8877> <5774> <8878> <887A> <5778> <887B> <887E> <577D> <8880> <8880> <5781> <8881> <8884> <5787> <8885> <8889> <578D> <888A> <8890> <5794> <8891> <8894> <579C> <8895> <8895> <57A5> <8896> <8896> <57A8> <8897> <8897> <57AA> <8898> <8898> <57AC> <8899> <889B> <57AF> <889C> <889C> <57B3> <889D> <889F> <57B5> <88A0> <88A8> <57B9> <88A9> <88AF> <57C4> <88B0> <88B1> <57CC> <88B2> <88B3> <57D0> <88B4> <88B4> <57D3> <88B5> <88B6> <57D6> <88B7> <88B8> <57DB> <88B9> <88B9> <57DE> <88BA> <88BC> <57E1> <88BD> <88C4> <57E5> <88C5> <88C5> <57EE> <88C6> <88C9> <57F0> <88CA> <88CC> <57F5> <88CD> <88CE> <57FB> <88CF> <88D0> <57FE> <88D1> <88D1> <5801> <88D2> <88D4> <5803> <88D5> <88D7> <5808> <88D8> <88D8> <580C> <88D9> <88DB> <580E> <88DC> <88DE> <5812> <88DF> <88E1> <5816> <88E2> <88E5> <581A> <88E6> <88E6> <581F> <88E7> <88E8> <5822> <88E9> <88ED> <5825> <88EE> <88F2> <582B> <88F3> <88F6> <5831> <88F7> <88FE> <5836> <8940> <8945> <583E> <8946> <894C> <5845> <894D> <894F> <584E> <8950> <8951> <5852> <8952> <8954> <5855> <8955> <8959> <5859> <895A> <895F> <585F> <8960> <8964> <5866> <8965> <8975> <586D> <8976> <8976> <587F> <8977> <8977> <5882> <8978> <8978> <5884> <8979> <897B> <5886> <897C> <897E> <588A> <8980> <8984> <588D> <8985> <8989> <5894> <898A> <898C> <589B> <898D> <8994> <58A0> <8995> <89A6> <58AA> <89A7> <89AA> <58BD> <89AB> <89AD> <58C2> <89AE> <89B8> <58C6> <89B9> <89BB> <58D2> <89BC> <89C9> <58D6> <89CA> <89CF> <58E5> endbfrange 100 beginbfrange <89D0> <89D0> <58ED> <89D1> <89D1> <58EF> <89D2> <89D3> <58F1> <89D4> <89D5> <58F4> <89D6> <89D7> <58F7> <89D8> <89DF> <58FA> <89E0> <89E0> <5903> <89E1> <89E2> <5905> <89E3> <89E7> <5908> <89E8> <89E8> <590E> <89E9> <89EC> <5910> <89ED> <89EE> <5917> <89EF> <89EF> <591B> <89F0> <89F1> <591D> <89F2> <89F5> <5920> <89F6> <89F6> <5926> <89F7> <89F7> <5928> <89F8> <89F8> <592C> <89F9> <89F9> <5930> <89FA> <89FB> <5932> <89FC> <89FD> <5935> <89FE> <89FE> <593B> <8A40> <8A43> <593D> <8A44> <8A44> <5943> <8A45> <8A46> <5945> <8A47> <8A47> <594A> <8A48> <8A49> <594C> <8A4A> <8A4A> <5950> <8A4B> <8A4C> <5952> <8A4D> <8A4D> <5959> <8A4E> <8A52> <595B> <8A53> <8A53> <5961> <8A54> <8A55> <5963> <8A56> <8A62> <5966> <8A63> <8A63> <5975> <8A64> <8A64> <5977> <8A65> <8A67> <597A> <8A68> <8A6A> <597E> <8A6B> <8A6B> <5985> <8A6C> <8A6C> <5989> <8A6D> <8A6E> <598B> <8A6F> <8A72> <598E> <8A73> <8A74> <5994> <8A75> <8A75> <5998> <8A76> <8A79> <599A> <8A7A> <8A7D> <599F> <8A7E> <8A7E> <59A6> <8A80> <8A80> <59A7> <8A81> <8A82> <59AC> <8A83> <8A84> <59B0> <8A85> <8A8A> <59B3> <8A8B> <8A8B> <59BA> <8A8C> <8A8D> <59BC> <8A8E> <8A94> <59BF> <8A95> <8A97> <59C7> <8A98> <8A9B> <59CC> <8A9C> <8A9D> <59D5> <8A9E> <8A9E> <59D9> <8A9F> <8A9F> <59DB> <8AA0> <8AA4> <59DE> <8AA5> <8AA5> <59E4> <8AA6> <8AA7> <59E6> <8AA8> <8AAA> <59E9> <8AAB> <8AB6> <59ED> <8AB7> <8AB7> <59FA> <8AB8> <8ABA> <59FC> <8ABB> <8ABB> <5A00> <8ABC> <8ABC> <5A02> <8ABD> <8ABE> <5A0A> <8ABF> <8AC2> <5A0D> <8AC3> <8AC3> <5A12> <8AC4> <8AC7> <5A14> <8AC8> <8ACA> <5A19> <8ACB> <8ACC> <5A1D> <8ACD> <8ACE> <5A21> <8ACF> <8ACF> <5A24> <8AD0> <8AD2> <5A26> <8AD3> <8AD9> <5A2A> <8ADA> <8ADA> <5A33> <8ADB> <8ADB> <5A35> <8ADC> <8AE0> <5A37> <8AE1> <8AE3> <5A3D> <8AE4> <8AE8> <5A41> <8AE9> <8AEA> <5A47> <8AEB> <8AF4> <5A4B> <8AF5> <8AF8> <5A56> <8AF9> <8AFE> <5A5B> <8B40> <8B40> <5A61> <8B41> <8B44> <5A63> <8B45> <8B46> <5A68> <8B47> <8B4F> <5A6B> <8B50> <8B51> <5A78> <8B52> <8B55> <5A7B> <8B56> <8B67> <5A80> <8B68> <8B6E> <5A93> <8B6F> <8B7C> <5A9C> <8B7D> <8B7E> <5AAB> <8B80> <8B84> <5AAD> <8B85> <8B85> <5AB4> <8B86> <8B87> <5AB6> endbfrange 100 beginbfrange <8B88> <8B8C> <5AB9> <8B8D> <8B8E> <5ABF> <8B8F> <8B94> <5AC3> <8B95> <8B96> <5ACA> <8B97> <8B9B> <5ACD> <8B9C> <8B9C> <5AD3> <8B9D> <8B9D> <5AD5> <8B9E> <8B9E> <5AD7> <8B9F> <8BA1> <5AD9> <8BA2> <8BA4> <5ADD> <8BA5> <8BA5> <5AE2> <8BA6> <8BA7> <5AE4> <8BA8> <8BA9> <5AE7> <8BAA> <8BAA> <5AEA> <8BAB> <8BAF> <5AEC> <8BB0> <8BC6> <5AF2> <8BC7> <8BD2> <5B0A> <8BD3> <8BEC> <5B18> <8BED> <8BED> <5B33> <8BEE> <8BEF> <5B35> <8BF0> <8BF7> <5B38> <8BF8> <8BFE> <5B41> <8C40> <8C47> <5B48> <8C48> <8C48> <5B52> <8C49> <8C49> <5B56> <8C4A> <8C4A> <5B5E> <8C4B> <8C4C> <5B60> <8C4D> <8C4E> <5B67> <8C4F> <8C4F> <5B6B> <8C50> <8C52> <5B6D> <8C53> <8C53> <5B72> <8C54> <8C54> <5B74> <8C55> <8C58> <5B76> <8C59> <8C5A> <5B7B> <8C5B> <8C5C> <5B7E> <8C5D> <8C5D> <5B82> <8C5E> <8C5E> <5B86> <8C5F> <8C5F> <5B8A> <8C60> <8C61> <5B8D> <8C62> <8C64> <5B90> <8C65> <8C65> <5B94> <8C66> <8C66> <5B96> <8C67> <8C67> <5B9F> <8C68> <8C6A> <5BA7> <8C6B> <8C6E> <5BAC> <8C6F> <8C70> <5BB1> <8C71> <8C71> <5BB7> <8C72> <8C74> <5BBA> <8C75> <8C76> <5BC0> <8C77> <8C77> <5BC3> <8C78> <8C7B> <5BC8> <8C7C> <8C7E> <5BCD> <8C80> <8C80> <5BD1> <8C81> <8C89> <5BD4> <8C8A> <8C8A> <5BE0> <8C8B> <8C8C> <5BE2> <8C8D> <8C8E> <5BE6> <8C8F> <8C93> <5BE9> <8C94> <8C94> <5BEF> <8C95> <8C9B> <5BF1> <8C9C> <8C9D> <5BFD> <8C9E> <8C9E> <5C00> <8C9F> <8CA0> <5C02> <8CA1> <8CA1> <5C05> <8CA2> <8CA3> <5C07> <8CA4> <8CA7> <5C0B> <8CA8> <8CA8> <5C10> <8CA9> <8CAA> <5C12> <8CAB> <8CAB> <5C17> <8CAC> <8CAC> <5C19> <8CAD> <8CAD> <5C1B> <8CAE> <8CB1> <5C1E> <8CB2> <8CB2> <5C23> <8CB3> <8CB3> <5C26> <8CB4> <8CB7> <5C28> <8CB8> <8CBB> <5C2D> <8CBC> <8CBD> <5C32> <8CBE> <8CC0> <5C35> <8CC1> <8CC2> <5C43> <8CC3> <8CC4> <5C46> <8CC5> <8CC6> <5C4C> <8CC7> <8CC9> <5C52> <8CCA> <8CCC> <5C56> <8CCD> <8CD0> <5C5A> <8CD1> <8CD1> <5C5F> <8CD2> <8CD2> <5C62> <8CD3> <8CD3> <5C64> <8CD4> <8CDA> <5C67> <8CDB> <8CDB> <5C70> <8CDC> <8CE2> <5C72> <8CE3> <8CE6> <5C7B> <8CE7> <8CE7> <5C80> <8CE8> <8CEC> <5C83> <8CED> <8CEF> <5C89> <8CF0> <8CF1> <5C8E> <8CF2> <8CF3> <5C92> <8CF4> <8CF4> <5C95> <8CF5> <8CF9> <5C9D> <8CFA> <8CFE> <5CA4> <8D40> <8D40> <5CAA> endbfrange 100 beginbfrange <8D41> <8D43> <5CAE> <8D44> <8D44> <5CB2> <8D45> <8D45> <5CB4> <8D46> <8D46> <5CB6> <8D47> <8D4A> <5CB9> <8D4B> <8D4B> <5CBE> <8D4C> <8D4C> <5CC0> <8D4D> <8D4E> <5CC2> <8D4F> <8D54> <5CC5> <8D55> <8D5A> <5CCC> <8D5B> <8D60> <5CD3> <8D61> <8D67> <5CDA> <8D68> <8D69> <5CE2> <8D6A> <8D6A> <5CE7> <8D6B> <8D6B> <5CE9> <8D6C> <8D6D> <5CEB> <8D6E> <8D6F> <5CEE> <8D70> <8D79> <5CF1> <8D7A> <8D7E> <5CFC> <8D80> <8D80> <5D01> <8D81> <8D82> <5D04> <8D83> <8D88> <5D08> <8D89> <8D8D> <5D0F> <8D8E> <8D8E> <5D15> <8D8F> <8D92> <5D17> <8D93> <8D94> <5D1C> <8D95> <8D99> <5D1F> <8D9A> <8D9A> <5D25> <8D9B> <8D9B> <5D28> <8D9C> <8D9E> <5D2A> <8D9F> <8DA3> <5D2F> <8DA4> <8DAB> <5D35> <8DAC> <8DB3> <5D3F> <8DB4> <8DB5> <5D48> <8DB6> <8DC0> <5D4D> <8DC1> <8DC2> <5D59> <8DC3> <8DC3> <5D5C> <8DC4> <8DCE> <5D5E> <8DCF> <8DCF> <5D6A> <8DD0> <8DD1> <5D6D> <8DD2> <8DD5> <5D70> <8DD6> <8DE2> <5D75> <8DE3> <8DF8> <5D83> <8DF9> <8DFB> <5D9A> <8DFC> <8DFE> <5D9E> <8E40> <8E55> <5DA1> <8E56> <8E62> <5DB8> <8E63> <8E69> <5DC6> <8E6A> <8E76> <5DCE> <8E77> <8E77> <5DDC> <8E78> <8E79> <5DDF> <8E7A> <8E7B> <5DE3> <8E7C> <8E7C> <5DEA> <8E7D> <8E7E> <5DEC> <8E80> <8E80> <5DF0> <8E81> <8E82> <5DF5> <8E83> <8E87> <5DF8> <8E88> <8E89> <5DFF> <8E8A> <8E8A> <5E04> <8E8B> <8E8B> <5E07> <8E8C> <8E8E> <5E09> <8E8F> <8E90> <5E0D> <8E91> <8E92> <5E12> <8E93> <8E93> <5E17> <8E94> <8E9B> <5E1E> <8E9C> <8EA0> <5E28> <8EA1> <8EA2> <5E2F> <8EA3> <8EA7> <5E32> <8EA8> <8EA9> <5E39> <8EAA> <8EAD> <5E3E> <8EAE> <8EAE> <5E43> <8EAF> <8EB4> <5E46> <8EB5> <8EBB> <5E4D> <8EBC> <8EC0> <5E56> <8EC1> <8EC2> <5E5C> <8EC3> <8EC4> <5E5F> <8EC5> <8ED3> <5E63> <8ED4> <8ED4> <5E75> <8ED5> <8ED5> <5E77> <8ED6> <8ED6> <5E79> <8ED7> <8ED7> <5E7E> <8ED8> <8EDA> <5E81> <8EDB> <8EDB> <5E85> <8EDC> <8EDD> <5E88> <8EDE> <8EE0> <5E8C> <8EE1> <8EE1> <5E92> <8EE2> <8EE2> <5E98> <8EE3> <8EE3> <5E9B> <8EE4> <8EE4> <5E9D> <8EE5> <8EE8> <5EA1> <8EE9> <8EED> <5EA8> <8EEE> <8EF2> <5EAE> <8EF3> <8EF3> <5EB4> <8EF4> <8EF7> <5EBA> <8EF8> <8EFE> <5EBF> <8F40> <8F42> <5EC6> <8F43> <8F48> <5ECB> <8F49> <8F4A> <5ED4> <8F4B> <8F4E> <5ED7> <8F4F> <8F5A> <5EDC> endbfrange 100 beginbfrange <8F5B> <8F5B> <5EE9> <8F5C> <8F64> <5EEB> <8F65> <8F65> <5EF5> <8F66> <8F67> <5EF8> <8F68> <8F6A> <5EFB> <8F6B> <8F6D> <5F05> <8F6E> <8F6E> <5F09> <8F6F> <8F71> <5F0C> <8F72> <8F72> <5F10> <8F73> <8F73> <5F12> <8F74> <8F74> <5F14> <8F75> <8F75> <5F16> <8F76> <8F77> <5F19> <8F78> <8F7A> <5F1C> <8F7B> <8F7E> <5F21> <8F80> <8F80> <5F28> <8F81> <8F82> <5F2B> <8F83> <8F83> <5F2E> <8F84> <8F84> <5F30> <8F85> <8F8B> <5F32> <8F8C> <8F8C> <5F3B> <8F8D> <8F8F> <5F3D> <8F90> <8F9E> <5F41> <8F9F> <8F9F> <5F51> <8FA0> <8FA0> <5F54> <8FA1> <8FA4> <5F59> <8FA5> <8FA7> <5F5E> <8FA8> <8FA8> <5F63> <8FA9> <8FA9> <5F65> <8FAA> <8FAB> <5F67> <8FAC> <8FAC> <5F6B> <8FAD> <8FAE> <5F6E> <8FAF> <8FAF> <5F72> <8FB0> <8FB2> <5F74> <8FB3> <8FB3> <5F78> <8FB4> <8FB4> <5F7A> <8FB5> <8FB7> <5F7D> <8FB8> <8FB8> <5F83> <8FB9> <8FB9> <5F86> <8FBA> <8FBC> <5F8D> <8FBD> <8FBD> <5F91> <8FBE> <8FBF> <5F93> <8FC0> <8FC0> <5F96> <8FC1> <8FC2> <5F9A> <8FC3> <8FC6> <5F9D> <8FC7> <8FCC> <5FA2> <8FCD> <8FCD> <5FA9> <8FCE> <8FCF> <5FAB> <8FD0> <8FD5> <5FAF> <8FD6> <8FD6> <5FB6> <8FD7> <8FDA> <5FB8> <8FDB> <8FDF> <5FBE> <8FE0> <8FE1> <5FC7> <8FE2> <8FE3> <5FCA> <8FE4> <8FE4> <5FCE> <8FE5> <8FE7> <5FD3> <8FE8> <8FEA> <5FDA> <8FEB> <8FEC> <5FDE> <8FED> <8FEE> <5FE2> <8FEF> <8FF0> <5FE5> <8FF1> <8FF2> <5FE8> <8FF3> <8FF3> <5FEC> <8FF4> <8FF5> <5FEF> <8FF6> <8FF8> <5FF2> <8FF9> <8FFA> <5FF6> <8FFB> <8FFC> <5FF9> <8FFD> <8FFD> <5FFC> <8FFE> <8FFE> <6007> <9040> <9041> <6008> <9042> <9043> <600B> <9044> <9045> <6010> <9046> <9046> <6013> <9047> <9048> <6017> <9049> <9049> <601A> <904A> <904B> <601E> <904C> <904E> <6022> <904F> <9051> <602C> <9052> <9056> <6030> <9057> <905B> <6036> <905C> <905D> <603D> <905E> <905E> <6040> <905F> <9065> <6044> <9066> <9066> <604C> <9067> <9068> <604E> <9069> <9069> <6051> <906A> <906B> <6053> <906C> <906E> <6056> <906F> <9070> <605B> <9071> <9074> <605E> <9075> <9076> <6065> <9077> <9077> <606E> <9078> <9079> <6071> <907A> <907B> <6074> <907C> <907C> <6077> <907D> <907D> <607E> <907E> <907E> <6080> <9080> <9081> <6081> <9082> <9085> <6085> <9086> <9087> <608A> <9088> <908B> <608E> endbfrange 100 beginbfrange <908C> <908C> <6093> <908D> <908D> <6095> <908E> <9090> <6097> <9091> <9091> <609C> <9092> <9092> <609E> <9093> <9094> <60A1> <9095> <9096> <60A4> <9097> <9097> <60A7> <9098> <9099> <60A9> <909A> <909A> <60AE> <909B> <909B> <60B0> <909C> <909C> <60B3> <909D> <909F> <60B5> <90A0> <90A1> <60B9> <90A2> <90A9> <60BD> <90AA> <90AC> <60C7> <90AD> <90B1> <60CC> <90B2> <90B4> <60D2> <90B5> <90B6> <60D6> <90B7> <90B7> <60D9> <90B8> <90B8> <60DB> <90B9> <90B9> <60DE> <90BA> <90BE> <60E1> <90BF> <90BF> <60EA> <90C0> <90C1> <60F1> <90C2> <90C2> <60F5> <90C3> <90C4> <60F7> <90C5> <90C9> <60FB> <90CA> <90CD> <6102> <90CE> <90CE> <6107> <90CF> <90D1> <610A> <90D2> <90D6> <6110> <90D7> <90DA> <6116> <90DB> <90DE> <611B> <90DF> <90E0> <6121> <90E1> <90E1> <6125> <90E2> <90E4> <6128> <90E5> <90F7> <612C> <90F8> <90FE> <6140> <9140> <9140> <6147> <9141> <9141> <6149> <9142> <9142> <614B> <9143> <9143> <614D> <9144> <9145> <614F> <9146> <9148> <6152> <9149> <914F> <6156> <9150> <9153> <615E> <9154> <9157> <6163> <9158> <915E> <6169> <915F> <9162> <6171> <9163> <9163> <6176> <9164> <9176> <6178> <9177> <9178> <618C> <9179> <917D> <618F> <917E> <917E> <6195> <9180> <9186> <6196> <9187> <918F> <619E> <9190> <9191> <61AA> <9192> <919B> <61AD> <919C> <91A1> <61B8> <91A2> <91A4> <61BF> <91A5> <91A9> <61C3> <91AA> <91AA> <61C9> <91AB> <91AF> <61CC> <91B0> <91B0> <61D3> <91B1> <91C1> <61D5> <91C2> <91CF> <61E7> <91D0> <91D8> <61F6> <91D9> <91DE> <6200> <91DF> <91DF> <6207> <91E0> <91E0> <6209> <91E1> <91E2> <6213> <91E3> <91E3> <6219> <91E4> <91E6> <621C> <91E7> <91E7> <6220> <91E8> <91E8> <6223> <91E9> <91EC> <6226> <91ED> <91ED> <622B> <91EE> <91EE> <622D> <91EF> <91F2> <622F> <91F3> <91F4> <6235> <91F5> <91F9> <6238> <91FA> <91FA> <6242> <91FB> <91FD> <6244> <91FE> <91FE> <624A> <9240> <9241> <624F> <9242> <9244> <6255> <9245> <9246> <6259> <9247> <924D> <625C> <924E> <924F> <6264> <9250> <9250> <6268> <9251> <9252> <6271> <9253> <9254> <6274> <9255> <9256> <6277> <9257> <9258> <627A> <9259> <9259> <627D> <925A> <925C> <6281> <925D> <9260> <6285> <9261> <9266> <628B> <9267> <9267> <6294> endbfrange 100 beginbfrange <9268> <9268> <6299> <9269> <926B> <629C> <926C> <926C> <62A3> <926D> <926E> <62A6> <926F> <9270> <62A9> <9271> <9274> <62AD> <9275> <9277> <62B2> <9278> <927A> <62B6> <927B> <927B> <62BA> <927C> <927C> <62BE> <927D> <927E> <62C0> <9280> <9280> <62C3> <9281> <9281> <62CB> <9282> <9282> <62CF> <9283> <9283> <62D1> <9284> <9284> <62D5> <9285> <9286> <62DD> <9287> <9288> <62E0> <9289> <9289> <62E4> <928A> <928B> <62EA> <928C> <928C> <62F0> <928D> <928D> <62F2> <928E> <928E> <62F5> <928F> <9292> <62F8> <9293> <9293> <6300> <9294> <9297> <6303> <9298> <929B> <630A> <929C> <929D> <630F> <929E> <92A1> <6312> <92A2> <92A4> <6317> <92A5> <92A5> <631C> <92A6> <92A7> <6326> <92A8> <92A8> <6329> <92A9> <92AB> <632C> <92AC> <92AD> <6330> <92AE> <92B3> <6333> <92B4> <92B5> <633B> <92B6> <92B9> <633E> <92BA> <92BA> <6344> <92BB> <92BC> <6347> <92BD> <92BD> <634A> <92BE> <92C1> <6351> <92C2> <92C9> <6356> <92CA> <92CA> <6360> <92CB> <92CD> <6364> <92CE> <92CE> <6368> <92CF> <92D1> <636A> <92D2> <92D3> <636F> <92D4> <92D7> <6372> <92D8> <92D9> <6378> <92DA> <92DD> <637C> <92DE> <92DE> <6381> <92DF> <92E2> <6383> <92E3> <92E3> <638B> <92E4> <92E4> <638D> <92E5> <92E5> <6391> <92E6> <92E8> <6393> <92E9> <92E9> <6397> <92EA> <92F0> <6399> <92F1> <92F1> <63A1> <92F2> <92F2> <63A4> <92F3> <92F3> <63A6> <92F4> <92F4> <63AB> <92F5> <92F5> <63AF> <92F6> <92F7> <63B1> <92F8> <92F9> <63B5> <92FA> <92FA> <63B9> <92FB> <92FB> <63BB> <92FC> <92FC> <63BD> <92FD> <92FE> <63BF> <9340> <9342> <63C1> <9343> <9343> <63C5> <9344> <9345> <63C7> <9346> <9348> <63CA> <9349> <9349> <63D1> <934A> <934C> <63D3> <934D> <9353> <63D7> <9354> <9354> <63DF> <9355> <9355> <63E2> <9356> <935A> <63E4> <935B> <935C> <63EB> <935D> <9360> <63EE> <9361> <9361> <63F3> <9362> <9362> <63F5> <9363> <9363> <63F7> <9364> <9367> <63F9> <9368> <9368> <63FE> <9369> <936A> <6403> <936B> <936F> <6406> <9370> <9371> <640D> <9372> <9373> <6411> <9374> <9379> <6415> <937A> <937A> <641D> <937B> <937B> <641F> <937C> <937E> <6422> <9380> <9380> <6425> <9381> <9383> <6427> <9384> <9384> <642B> <9385> <938A> <642E> <938B> <938F> <6435> endbfrange 100 beginbfrange <9390> <9391> <643B> <9392> <9392> <643E> <9393> <9393> <6440> <9394> <9395> <6442> <9396> <9396> <6449> <9397> <939D> <644B> <939E> <939E> <6453> <939F> <93A1> <6455> <93A2> <93A6> <6459> <93A7> <93AE> <645F> <93AF> <93AF> <6468> <93B0> <93B2> <646A> <93B3> <93BC> <646E> <93BD> <93C3> <647B> <93C4> <93C4> <6483> <93C5> <93C5> <6486> <93C6> <93CE> <6488> <93CF> <93D0> <6493> <93D1> <93D2> <6497> <93D3> <93D6> <649A> <93D7> <93DB> <649F> <93DC> <93DF> <64A5> <93E0> <93E1> <64AA> <93E2> <93E2> <64AF> <93E3> <93E6> <64B1> <93E7> <93E7> <64B6> <93E8> <93E8> <64B9> <93E9> <93E9> <64BB> <93EA> <93EC> <64BD> <93ED> <93ED> <64C1> <93EE> <93EF> <64C3> <93F0> <93F6> <64C6> <93F7> <93F7> <64CF> <93F8> <93F8> <64D1> <93F9> <93FC> <64D3> <93FD> <93FE> <64D9> <9440> <9442> <64DB> <9443> <9445> <64DF> <9446> <9446> <64E3> <9447> <9447> <64E5> <9448> <9460> <64E7> <9461> <9468> <6501> <9469> <9470> <650A> <9471> <9475> <6513> <9476> <947E> <6519> <9480> <9482> <6522> <9483> <9487> <6526> <9488> <9489> <652C> <948A> <948D> <6530> <948E> <948E> <6537> <948F> <948F> <653A> <9490> <9491> <653C> <9492> <9496> <6540> <9497> <9498> <6546> <9499> <949A> <654A> <949B> <949C> <654D> <949D> <949D> <6550> <949E> <94A0> <6552> <94A1> <94A2> <6557> <94A3> <94A3> <655A> <94A4> <94A4> <655C> <94A5> <94A7> <655F> <94A8> <94A9> <6564> <94AA> <94AD> <6567> <94AE> <94B0> <656D> <94B1> <94B1> <6571> <94B2> <94B2> <6573> <94B3> <94B4> <6575> <94B5> <94C3> <6578> <94C4> <94C6> <6588> <94C7> <94C9> <658D> <94CA> <94CA> <6592> <94CB> <94CD> <6594> <94CE> <94CE> <6598> <94CF> <94CF> <659A> <94D0> <94D1> <659D> <94D2> <94D2> <65A0> <94D3> <94D4> <65A2> <94D5> <94D5> <65A6> <94D6> <94D6> <65A8> <94D7> <94D7> <65AA> <94D8> <94D8> <65AC> <94D9> <94D9> <65AE> <94DA> <94E1> <65B1> <94E2> <94E3> <65BA> <94E4> <94E6> <65BE> <94E7> <94E7> <65C2> <94E8> <94EB> <65C7> <94EC> <94EC> <65CD> <94ED> <94EE> <65D0> <94EF> <94F1> <65D3> <94F2> <94F9> <65D8> <94FA> <94FA> <65E1> <94FB> <94FC> <65E3> <94FD> <94FE> <65EA> <9540> <9543> <65F2> <9544> <9545> <65F8> <9546> <954A> <65FB> <954B> <954B> <6601> <954C> <954D> <6604> endbfrange 100 beginbfrange <954E> <9550> <6607> <9551> <9551> <660B> <9552> <9552> <660D> <9553> <9555> <6610> <9556> <9558> <6616> <9559> <955B> <661A> <955C> <955C> <661E> <955D> <9560> <6621> <9561> <9561> <6626> <9562> <9565> <6629> <9566> <9566> <662E> <9567> <9567> <6630> <9568> <9569> <6632> <956A> <956E> <6637> <956F> <956F> <663D> <9570> <9571> <663F> <9572> <9572> <6642> <9573> <9579> <6644> <957A> <957B> <664D> <957C> <957D> <6650> <957E> <957E> <6658> <9580> <9580> <6659> <9581> <9584> <665B> <9585> <9585> <6660> <9586> <9587> <6662> <9588> <9588> <6665> <9589> <9589> <6667> <958A> <958E> <6669> <958F> <9591> <6671> <9592> <9592> <6675> <9593> <9594> <6678> <9595> <9597> <667B> <9598> <959A> <667F> <959B> <959B> <6683> <959C> <959D> <6685> <959E> <95A1> <6688> <95A2> <95A5> <668D> <95A6> <95A9> <6692> <95AA> <95AE> <6698> <95AF> <95B7> <669E> <95B8> <95BC> <66A9> <95BD> <95C1> <66AF> <95C2> <95C5> <66B5> <95C6> <95C9> <66BA> <95CA> <95E3> <66BF> <95E4> <95E4> <66DA> <95E5> <95EC> <66DE> <95ED> <95EE> <66E7> <95EF> <95F4> <66EA> <95F5> <95F5> <66F1> <95F6> <95F7> <66F5> <95F8> <95F8> <66F8> <95F9> <95FA> <66FA> <95FB> <95FB> <66FD> <95FC> <95FE> <6701> <9640> <9643> <6704> <9644> <9644> <670C> <9645> <9646> <670E> <9647> <9649> <6711> <964A> <964A> <6716> <964B> <964D> <6718> <964E> <964E> <671C> <964F> <964F> <671E> <9650> <9655> <6720> <9656> <9656> <6727> <9657> <9657> <6729> <9658> <9658> <672E> <9659> <9659> <6730> <965A> <965B> <6732> <965C> <965F> <6736> <9660> <9661> <673B> <9662> <9663> <673E> <9664> <9664> <6741> <9665> <9666> <6744> <9667> <9667> <6747> <9668> <9669> <674A> <966A> <966A> <674D> <966B> <966B> <6752> <966C> <966D> <6754> <966E> <9672> <6757> <9673> <9673> <675D> <9674> <9676> <6762> <9677> <9678> <6766> <9679> <967A> <676B> <967B> <967B> <676E> <967C> <967C> <6771> <967D> <967D> <6774> <967E> <967E> <6776> <9680> <9683> <6778> <9684> <9684> <677D> <9685> <9685> <6780> <9686> <9687> <6782> <9688> <9689> <6785> <968A> <968A> <6788> <968B> <968B> <678A> <968C> <968F> <678C> <9690> <9693> <6791> <9694> <9694> <6796> <9695> <9695> <6799> <9696> <9696> <679B> endbfrange 100 beginbfrange <9697> <9699> <679F> <969A> <969A> <67A4> <969B> <969B> <67A6> <969C> <969C> <67A9> <969D> <969D> <67AC> <969E> <969E> <67AE> <969F> <96A0> <67B1> <96A1> <96A1> <67B4> <96A2> <96A9> <67B9> <96AA> <96AA> <67C2> <96AB> <96B4> <67C5> <96B5> <96B7> <67D5> <96B8> <96B8> <67DB> <96B9> <96B9> <67DF> <96BA> <96BA> <67E1> <96BB> <96BC> <67E3> <96BD> <96BF> <67E6> <96C0> <96C1> <67EA> <96C2> <96C3> <67ED> <96C4> <96C4> <67F2> <96C5> <96CC> <67F5> <96CD> <96CD> <67FE> <96CE> <96D1> <6801> <96D2> <96D2> <6806> <96D3> <96D3> <680D> <96D4> <96D4> <6810> <96D5> <96D5> <6812> <96D6> <96D7> <6814> <96D8> <96DC> <6818> <96DD> <96DF> <681E> <96E0> <96E6> <6822> <96E7> <96ED> <682B> <96EE> <96F0> <6834> <96F1> <96F2> <683A> <96F3> <96F3> <683F> <96F4> <96F4> <6847> <96F5> <96F5> <684B> <96F6> <96F6> <684D> <96F7> <96F7> <684F> <96F8> <96F8> <6852> <96F9> <96FE> <6856> <9740> <9743> <685C> <9744> <9744> <686A> <9745> <974C> <686C> <974D> <974D> <6875> <974E> <9756> <6878> <9757> <9757> <6882> <9758> <9758> <6884> <9759> <9760> <6887> <9761> <9763> <6890> <9764> <9766> <6894> <9767> <9770> <6898> <9771> <9773> <68A3> <9774> <9777> <68A9> <9778> <9778> <68AE> <9779> <977A> <68B1> <977B> <977B> <68B4> <977C> <977E> <68B6> <9780> <9786> <68B9> <9787> <9787> <68C1> <9788> <978D> <68C3> <978E> <978E> <68CA> <978F> <978F> <68CC> <9790> <9793> <68CE> <9794> <9795> <68D3> <9796> <9797> <68D6> <9798> <9798> <68D9> <9799> <979D> <68DB> <979E> <979F> <68E1> <97A0> <97A9> <68E4> <97AA> <97AA> <68EF> <97AB> <97AD> <68F2> <97AE> <97B0> <68F6> <97B1> <97B1> <68FB> <97B2> <97B5> <68FD> <97B6> <97B8> <6902> <97B9> <97BD> <6906> <97BE> <97BE> <690C> <97BF> <97BF> <690F> <97C0> <97C0> <6911> <97C1> <97CC> <6913> <97CD> <97CF> <6921> <97D0> <97D7> <6925> <97D8> <97D9> <692E> <97DA> <97DC> <6931> <97DD> <97E0> <6935> <97E1> <97E3> <693A> <97E4> <97E4> <693E> <97E5> <97E6> <6940> <97E7> <97F7> <6943> <97F8> <97F9> <6955> <97FA> <97FB> <6958> <97FC> <97FD> <695B> <97FE> <97FE> <695F> <9840> <9841> <6961> <9842> <9843> <6964> <9844> <9847> <6967> <9848> <9849> <696C> <984A> <984B> <696F> <984C> <9850> <6972> endbfrange 100 beginbfrange <9851> <9852> <697A> <9853> <9855> <697D> <9856> <9856> <6981> <9857> <9857> <6983> <9858> <9858> <6985> <9859> <985B> <698A> <985C> <9861> <698E> <9862> <9863> <6996> <9864> <9865> <6999> <9866> <986F> <699D> <9870> <9871> <69A9> <9872> <9872> <69AC> <9873> <9875> <69AE> <9876> <9877> <69B2> <9878> <9879> <69B5> <987A> <987C> <69B8> <987D> <987E> <69BC> <9880> <9882> <69BE> <9883> <988A> <69C2> <988B> <988B> <69CB> <988C> <988C> <69CD> <988D> <988D> <69CF> <988E> <9890> <69D1> <9891> <9896> <69D5> <9897> <9899> <69DC> <989A> <98A5> <69E1> <98A6> <98A9> <69EE> <98AA> <98B3> <69F3> <98B4> <98B4> <69FE> <98B5> <98BE> <6A00> <98BF> <98CA> <6A0B> <98CB> <98D0> <6A19> <98D1> <98D1> <6A20> <98D2> <98D7> <6A22> <98D8> <98D8> <6A29> <98D9> <98DC> <6A2B> <98DD> <98DD> <6A30> <98DE> <98E0> <6A32> <98E1> <98E7> <6A36> <98E8> <98EC> <6A3F> <98ED> <98EE> <6A45> <98EF> <98F6> <6A48> <98F7> <98FD> <6A51> <98FE> <98FE> <6A5A> <9940> <9944> <6A5C> <9945> <9947> <6A62> <9948> <9952> <6A66> <9953> <9959> <6A72> <995A> <995B> <6A7A> <995C> <995E> <6A7D> <995F> <9961> <6A81> <9962> <996A> <6A85> <996B> <996B> <6A8F> <996C> <9970> <6A92> <9971> <9978> <6A98> <9979> <997E> <6AA1> <9980> <9981> <6AA7> <9982> <9982> <6AAA> <9983> <99F5> <6AAD> <99F6> <99F7> <6B25> <99F8> <99FE> <6B28> <9A40> <9A42> <6B2F> <9A43> <9A46> <6B33> <9A47> <9A47> <6B38> <9A48> <9A4A> <6B3B> <9A4B> <9A4E> <6B3F> <9A4F> <9A50> <6B44> <9A51> <9A51> <6B48> <9A52> <9A53> <6B4A> <9A54> <9A5F> <6B4D> <9A60> <9A67> <6B5A> <9A68> <9A69> <6B68> <9A6A> <9A77> <6B6B> <9A78> <9A78> <6B7A> <9A79> <9A7C> <6B7D> <9A7D> <9A7D> <6B85> <9A7E> <9A7E> <6B88> <9A80> <9A80> <6B8C> <9A81> <9A84> <6B8E> <9A85> <9A86> <6B94> <9A87> <9A89> <6B97> <9A8A> <9A8E> <6B9C> <9A8F> <9A96> <6BA2> <9A97> <9A9E> <6BAB> <9A9F> <9A9F> <6BB6> <9AA0> <9AA6> <6BB8> <9AA7> <9AA7> <6BC0> <9AA8> <9AA9> <6BC3> <9AAA> <9AAE> <6BC6> <9AAF> <9AAF> <6BCC> <9AB0> <9AB0> <6BCE> <9AB1> <9AB2> <6BD0> <9AB3> <9AB3> <6BD8> <9AB4> <9AB4> <6BDA> <9AB5> <9AB9> <6BDC> <9ABA> <9AC1> <6BE2> <9AC2> <9AC4> <6BEC> <9AC5> <9AC7> <6BF0> <9AC8> <9AC8> <6BF4> <9AC9> <9ACB> <6BF6> endbfrange 100 beginbfrange <9ACC> <9ACE> <6BFA> <9ACF> <9AD5> <6BFE> <9AD6> <9ADA> <6C08> <9ADB> <9ADB> <6C0E> <9ADC> <9ADC> <6C12> <9ADD> <9ADD> <6C17> <9ADE> <9AE0> <6C1C> <9AE1> <9AE1> <6C20> <9AE2> <9AE2> <6C23> <9AE3> <9AE3> <6C25> <9AE4> <9AE6> <6C2B> <9AE7> <9AE7> <6C31> <9AE8> <9AE8> <6C33> <9AE9> <9AEA> <6C36> <9AEB> <9AEE> <6C39> <9AEF> <9AF0> <6C3E> <9AF1> <9AF3> <6C43> <9AF4> <9AF4> <6C48> <9AF5> <9AF9> <6C4B> <9AFA> <9AFC> <6C51> <9AFD> <9AFD> <6C56> <9AFE> <9AFE> <6C58> <9B40> <9B41> <6C59> <9B42> <9B43> <6C62> <9B44> <9B46> <6C65> <9B47> <9B4B> <6C6B> <9B4C> <9B4C> <6C71> <9B4D> <9B4D> <6C73> <9B4E> <9B4E> <6C75> <9B4F> <9B50> <6C77> <9B51> <9B53> <6C7A> <9B54> <9B55> <6C7F> <9B56> <9B56> <6C84> <9B57> <9B57> <6C87> <9B58> <9B59> <6C8A> <9B5A> <9B5B> <6C8D> <9B5C> <9B5D> <6C91> <9B5E> <9B61> <6C95> <9B62> <9B62> <6C9A> <9B63> <9B65> <6C9C> <9B66> <9B66> <6CA0> <9B67> <9B67> <6CA2> <9B68> <9B68> <6CA8> <9B69> <9B69> <6CAC> <9B6A> <9B6B> <6CAF> <9B6C> <9B6F> <6CB4> <9B70> <9B70> <6CBA> <9B71> <9B74> <6CC0> <9B75> <9B77> <6CC6> <9B78> <9B78> <6CCB> <9B79> <9B7B> <6CCD> <9B7C> <9B7D> <6CD1> <9B7E> <9B7E> <6CD8> <9B80> <9B81> <6CD9> <9B82> <9B83> <6CDC> <9B84> <9B84> <6CDF> <9B85> <9B85> <6CE4> <9B86> <9B87> <6CE6> <9B88> <9B88> <6CE9> <9B89> <9B8A> <6CEC> <9B8B> <9B8B> <6CF2> <9B8C> <9B8C> <6CF4> <9B8D> <9B8D> <6CF9> <9B8E> <9B8F> <6CFF> <9B90> <9B91> <6D02> <9B92> <9B93> <6D05> <9B94> <9B96> <6D08> <9B97> <9B97> <6D0D> <9B98> <9B9A> <6D0F> <9B9B> <9B9E> <6D13> <9B9F> <9B9F> <6D18> <9BA0> <9BA1> <6D1C> <9BA2> <9BA7> <6D1F> <9BA8> <9BA8> <6D26> <9BA9> <9BAA> <6D28> <9BAB> <9BAC> <6D2C> <9BAD> <9BAE> <6D2F> <9BAF> <9BAF> <6D34> <9BB0> <9BB2> <6D36> <9BB3> <9BB3> <6D3A> <9BB4> <9BB5> <6D3F> <9BB6> <9BB6> <6D42> <9BB7> <9BB7> <6D44> <9BB8> <9BB8> <6D49> <9BB9> <9BB9> <6D4C> <9BBA> <9BBA> <6D50> <9BBB> <9BBE> <6D55> <9BBF> <9BBF> <6D5B> <9BC0> <9BC0> <6D5D> <9BC1> <9BC1> <6D5F> <9BC2> <9BC3> <6D61> <9BC4> <9BC5> <6D64> <9BC6> <9BC7> <6D67> <9BC8> <9BCA> <6D6B> <9BCB> <9BCE> <6D70> <9BCF> <9BD0> <6D75> <9BD1> <9BD3> <6D79> <9BD4> <9BD8> <6D7D> <9BD9> <9BDA> <6D83> <9BDB> <9BDC> <6D86> endbfrange 100 beginbfrange <9BDD> <9BDE> <6D8A> <9BDF> <9BDF> <6D8D> <9BE0> <9BE1> <6D8F> <9BE2> <9BE2> <6D92> <9BE3> <9BE7> <6D96> <9BE8> <9BE8> <6D9C> <9BE9> <9BE9> <6DA2> <9BEA> <9BEA> <6DA5> <9BEB> <9BEC> <6DAC> <9BED> <9BEE> <6DB0> <9BEF> <9BF0> <6DB3> <9BF1> <9BF2> <6DB6> <9BF3> <9BF8> <6DB9> <9BF9> <9BFB> <6DC1> <9BFC> <9BFE> <6DC8> <9C40> <9C43> <6DCD> <9C44> <9C47> <6DD2> <9C48> <9C48> <6DD7> <9C49> <9C4B> <6DDA> <9C4C> <9C4C> <6DDF> <9C4D> <9C4E> <6DE2> <9C4F> <9C4F> <6DE5> <9C50> <9C53> <6DE7> <9C54> <9C54> <6DED> <9C55> <9C56> <6DEF> <9C57> <9C57> <6DF2> <9C58> <9C5A> <6DF4> <9C5B> <9C5B> <6DF8> <9C5C> <9C5C> <6DFA> <9C5D> <9C64> <6DFD> <9C65> <9C68> <6E06> <9C69> <9C69> <6E0B> <9C6A> <9C6A> <6E0F> <9C6B> <9C6C> <6E12> <9C6D> <9C6D> <6E15> <9C6E> <9C6F> <6E18> <9C70> <9C71> <6E1B> <9C72> <9C73> <6E1E> <9C74> <9C74> <6E22> <9C75> <9C77> <6E26> <9C78> <9C78> <6E2A> <9C79> <9C79> <6E2C> <9C7A> <9C7A> <6E2E> <9C7B> <9C7C> <6E30> <9C7D> <9C7D> <6E33> <9C7E> <9C7E> <6E35> <9C80> <9C81> <6E36> <9C82> <9C82> <6E39> <9C83> <9C8A> <6E3B> <9C8B> <9C92> <6E45> <9C93> <9C96> <6E4F> <9C97> <9C97> <6E55> <9C98> <9C98> <6E57> <9C99> <9C9A> <6E59> <9C9B> <9C9D> <6E5C> <9C9E> <9CA8> <6E60> <9CA9> <9CAA> <6E6C> <9CAB> <9CB9> <6E6F> <9CBA> <9CBC> <6E80> <9CBD> <9CBD> <6E84> <9CBE> <9CBF> <6E87> <9CC0> <9CC4> <6E8A> <9CC5> <9CCB> <6E91> <9CCC> <9CCE> <6E99> <9CCF> <9CD0> <6E9D> <9CD1> <9CD2> <6EA0> <9CD3> <9CD4> <6EA3> <9CD5> <9CD5> <6EA6> <9CD6> <9CD7> <6EA8> <9CD8> <9CDB> <6EAB> <9CDC> <9CDC> <6EB0> <9CDD> <9CDD> <6EB3> <9CDE> <9CDE> <6EB5> <9CDF> <9CE0> <6EB8> <9CE1> <9CE1> <6EBC> <9CE2> <9CE4> <6EBE> <9CE5> <9CE8> <6EC3> <9CE9> <9CEB> <6EC8> <9CEC> <9CEE> <6ECC> <9CEF> <9CEF> <6ED0> <9CF0> <9CF0> <6ED2> <9CF1> <9CF1> <6ED6> <9CF2> <9CF3> <6ED8> <9CF4> <9CF6> <6EDB> <9CF7> <9CF7> <6EE3> <9CF8> <9CF8> <6EE7> <9CF9> <9CFE> <6EEA> <9D40> <9D43> <6EF0> <9D44> <9D47> <6EF5> <9D48> <9D4F> <6EFA> <9D50> <9D52> <6F03> <9D53> <9D54> <6F07> <9D55> <9D59> <6F0A> <9D5A> <9D5C> <6F10> <9D5D> <9D66> <6F16> <9D67> <9D69> <6F21> <9D6A> <9D6D> <6F25> <9D6E> <9D6E> <6F2C> <9D6F> <9D6F> <6F2E> <9D70> <9D70> <6F30> endbfrange 100 beginbfrange <9D71> <9D71> <6F32> <9D72> <9D73> <6F34> <9D74> <9D7A> <6F37> <9D7B> <9D7E> <6F3F> <9D80> <9D82> <6F43> <9D83> <9D85> <6F48> <9D86> <9D86> <6F4C> <9D87> <9D90> <6F4E> <9D91> <9D93> <6F59> <9D94> <9D94> <6F5D> <9D95> <9D97> <6F5F> <9D98> <9D9A> <6F63> <9D9B> <9DA0> <6F67> <9DA1> <9DA3> <6F6F> <9DA4> <9DA4> <6F73> <9DA5> <9DA7> <6F75> <9DA8> <9DA8> <6F79> <9DA9> <9DA9> <6F7B> <9DAA> <9DB0> <6F7D> <9DB1> <9DB3> <6F85> <9DB4> <9DB5> <6F8A> <9DB6> <9DC2> <6F8F> <9DC3> <9DC6> <6F9D> <9DC7> <9DCB> <6FA2> <9DCC> <9DD6> <6FA8> <9DD7> <9DD8> <6FB4> <9DD9> <9DDA> <6FB7> <9DDB> <9DE0> <6FBA> <9DE1> <9DE1> <6FC1> <9DE2> <9DE7> <6FC3> <9DE8> <9DEE> <6FCA> <9DEF> <9DF9> <6FD3> <9DFA> <9DFA> <6FDF> <9DFB> <9DFE> <6FE2> <9E40> <9E47> <6FE6> <9E48> <9E68> <6FF0> <9E69> <9E70> <7012> <9E71> <9E77> <701C> <9E78> <9E7E> <7024> <9E80> <9E89> <702B> <9E8A> <9E8C> <7036> <9E8D> <9E9E> <703A> <9E9F> <9EA0> <704D> <9EA1> <9EAE> <7050> <9EAF> <9EBA> <705F> <9EBB> <9EBB> <706E> <9EBC> <9EBF> <7071> <9EC0> <9EC0> <7077> <9EC1> <9EC3> <7079> <9EC4> <9EC4> <707D> <9EC5> <9EC8> <7081> <9EC9> <9ECB> <7086> <9ECC> <9ECE> <708B> <9ECF> <9ED1> <708F> <9ED2> <9ED2> <7093> <9ED3> <9ED4> <7097> <9ED5> <9ED6> <709A> <9ED7> <9EE3> <709E> <9EE4> <9EE4> <70B0> <9EE5> <9EE5> <70B2> <9EE6> <9EE8> <70B4> <9EE9> <9EE9> <70BA> <9EEA> <9EEB> <70BE> <9EEC> <9EEF> <70C4> <9EF0> <9EF0> <70C9> <9EF1> <9EFD> <70CB> <9EFE> <9EFE> <70DA> <9F40> <9F42> <70DC> <9F43> <9F46> <70E0> <9F47> <9F47> <70E5> <9F48> <9F48> <70EA> <9F49> <9F49> <70EE> <9F4A> <9F50> <70F0> <9F51> <9F51> <70F8> <9F52> <9F54> <70FA> <9F55> <9F5F> <70FE> <9F60> <9F64> <710B> <9F65> <9F66> <7111> <9F67> <9F67> <7114> <9F68> <9F68> <7117> <9F69> <9F73> <711B> <9F74> <9F7B> <7127> <9F7C> <9F7E> <7132> <9F80> <9F80> <7135> <9F81> <9F8E> <7137> <9F8F> <9F92> <7146> <9F93> <9F93> <714B> <9F94> <9F94> <714D> <9F95> <9FA1> <714F> <9FA2> <9FA2> <715D> <9FA3> <9FA7> <715F> <9FA8> <9FA8> <7165> <9FA9> <9FAD> <7169> <9FAE> <9FB0> <716F> <9FB1> <9FB4> <7174> <9FB5> <9FB5> <7179> <9FB6> <9FB7> <717B> <9FB8> <9FBD> <717E> <9FBE> <9FC2> <7185> <9FC3> <9FC6> <718B> endbfrange 100 beginbfrange <9FC7> <9FCA> <7190> <9FCB> <9FCD> <7195> <9FCE> <9FD2> <719A> <9FD3> <9FD9> <71A1> <9FDA> <9FDC> <71A9> <9FDD> <9FE2> <71AD> <9FE3> <9FE3> <71B4> <9FE4> <9FE6> <71B6> <9FE7> <9FEF> <71BA> <9FF0> <9FF9> <71C4> <9FFA> <9FFE> <71CF> <71D6> <71E1> <71E6> <71E8> <71EF> <71FA> <7207> <721B> <721E> <7229> <722B> <722D> <7232> <723A> <723C> <723E> <7240> <7249> <724E> <7253> <7257> <725A> <725C> <725E> <7260> <7263> <7268> <726A> <7270> <7273> <7276> <727B> <7282> <7285> <728C> <728E> <7290> <7293> <72A0> <72AE> <72B1> <72B5> <72BA> <72C5> <72C9> <72CF> <72D1> <72D3> <72D8> <72DA> <3000> <00B7> <02C9> <02C7> <00A8> <3003> <3005> <2014> <2016> <2026> <2018> <201C> <3014> <3008> <3016> <3010> <00B1> <00D7> <00F7> <2236> <2227> <2211> <220F> <222A> <2229> <2208> <2237> <221A> <22A5> <2225> <2220> <2312> <2299> <222B> <222E> <2261> endbfrange 100 beginbfrange <224C> <2248> <223D> <221D> <2260> <226E> <2264> <221E> <2235> <2234> <2642> <2640> <00B0> <2032> <2103> <00A4> <2030> <00A7> <2116> <2606> <2605> <25CB> <25CF> <25CE> <25C7> <25C6> <25A1> <25A0> <25B3> <25B2> <203B> <2192> <2190> <2193> <3013> <2170> <2488> <2474> <2460> <3220> <2160> <3041> <30A1> <0391> <03A3> <03B1> <03C3> <0410> <0401> <0416> <0430> <0451> <0436> <02CA> <02D9> <2013> <2015> <2025> <2035> <2105> endbfrange 100 beginbfrange <2109> <2196> <2215> <221F> <2223> <2252> <2266> <22BF> <2550> <2581> <2588> <2593> <25BC> <25E2> <2609> <2295> <3012> <301D> <0101> <00E1> <01CE> <00E0> <0113> <00E9> <011B> <00E8> <012B> <00ED> <01D0> <00EC> <014D> <00F3> <01D2> <00F2> <016B> <00FA> <01D4> <00F9> <01D6> <01D8> <01DA> <01DC> <00FC> <00EA> <0251> <1E3F> <0144> <0148> <0261> <3105> <3021> <32A3> <338E> <339C> <33A1> <33C4> <33CE> <33D1> <33D5> <2121> <3231> <2010> <30FC> <309B> <30FD> <3006> <309D> <3007> <2500> <72DC> <72DF> <72E2> <72EA> <72F5> <72F9> <72FD> <7302> <7304> <730B> <730F> <7314> <7318> endbfrange 100 beginbfrange <731F> <7323> <7326> <732D> <732F> <7332> <7335> <733A> <7340> <7349> <734E> <7351> <7353> <7358> <7361> <736E> <7370> <7372> <737F> <7385> <7388> <738A> <738C> <738F> <7392> <7397> <739C> <73A0> <73A3> <73AA> <73AC> <73B1> <73B4> <73B8> <73BC> <73C1> <73C3> <73CB> <73CE> <73D2> <73DA> <73DF> <73E1> <73E6> <73E8> <73EA> <73EE> <73F3> <73F8> <7404> <7407> <740B> <7411> <741C> <7423> <7427> <7429> <742B> <742D> <742F> <7431> <7437> <743D> <7442> <744E> <7456> <7458> <745D> <7460> <746E> <7471> <7478> <747B> <747F> <7482> <7484> <7488> <748C> <748F> <7491> <749D> <749F> <74AA> <74BB> <74C8> <74D3> <74DD> <74DF> <74E1> <74E5> <74E7> <74F0> <74F3> <74F5> <74F8> <7500> endbfrange 100 beginbfrange <7505> <750E> <7510> <7512> <7514> <751B> <751D> <7520> <7526> <752A> <752E> <7534> <7536> <7539> <753C> <753F> <7541> <7546> <7549> <754D> <7550> <7555> <755D> <7567> <756B> <7573> <7575> <757A> <7580> <7584> <7587> <7588> <758C> <7590> <7593> <7595> <7598> <759B> <759E> <75A2> <75A6> <75AD> <75B6> <75BA> <75BF> <75C6> <75CB> <75CE> <75D3> <75D7> <75D9> <75DC> <75DF> <75E5> <75E9> <75EC> <75F2> <75F5> <75FA> <75FD> <7602> <7604> <7606> <7608> <760B> <760D> <7611> <7616> <761A> <761C> <7621> <7623> <7627> <762C> <762E> <7631> <7636> <7639> <763D> <7641> <7644> <7645> <764E> <7655> <7657> <765D> <765F> <7664> <766C> <7670> <7679> <767C> <767F> <7683> <7685> <7689> <768C> <768F> endbfrange 100 beginbfrange <7692> <7694> <7697> <769A> <769C> <76A5> <76AF> <76B3> <76B5> <76C0> <76C3> <554A> <963F> <57C3> <6328> <54CE> <5509> <54C0> <7691> <764C> <853C> <77EE> <827E> <788D> <7231> <9698> <978D> <6C28> <5B89> <4FFA> <6309> <6697> <5CB8> <80FA> <6848> <80AE> <6602> <76CE> <51F9> <6556> <71AC> <7FF1> <8884> <50B2> <5965> <61CA> <6FB3> <82AD> <634C> <6252> <53ED> <5427> <7B06> <516B> <75A4> <5DF4> <62D4> <8DCB> <9776> <628A> <8019> <575D> <9738> <7F62> <7238> <767D> <67CF> <767E> <6446> <4F70> <8D25> <62DC> <7A17> <6591> <73ED> <642C> <6273> <822C> <9881> <677F> <7248> <626E> <62CC> <4F34> <74E3> <534A> <529E> <7ECA> <90A6> <5E2E> <6886> <699C> <8180> <7ED1> <68D2> <78C5> <868C> <9551> <508D> <8C24> endbfrange 100 beginbfrange <82DE> <80DE> <5305> <8912> <5265> <76C4> <76C7> <76C9> <76CB> <76D3> <76D5> <76D9> <76DC> <76E0> <76E6> <76F0> <76F3> <76F5> <76FA> <76FD> <76FF> <7702> <7705> <770A> <770C> <770E> <771B> <7721> <7723> <7727> <772A> <772C> <772E> <7730> <7739> <773B> <773D> <7742> <7744> <7748> <7752> <775C> <8584> <96F9> <4FDD> <5821> <9971> <5B9D> <62B1> <62A5> <66B4> <8C79> <9C8D> <7206> <676F> <7891> <60B2> <5351> <5317> <8F88> <80CC> <8D1D> <94A1> <500D> <72C8> <5907> <60EB> <7119> <88AB> <5954> <82EF> <672C> <7B28> <5D29> <7EF7> <752D> <6CF5> <8E66> <8FF8> <903C> <9F3B> <6BD4> <9119> <7B14> <5F7C> <78A7> <84D6> <853D> <6BD5> <6BD9> <6BD6> <5E01> <5E87> <75F9> <95ED> <655D> <5F0A> <5FC5> <8F9F> <58C1> endbfrange 100 beginbfrange <81C2> <907F> <965B> <97AD> <8FB9> <7F16> <8D2C> <6241> <4FBF> <53D8> <535E> <8FA8> <8FAB> <904D> <6807> <5F6A> <8198> <8868> <9CD6> <618B> <522B> <762A> <5F6C> <658C> <6FD2> <6EE8> <5BBE> <6448> <5175> <51B0> <67C4> <4E19> <79C9> <997C> <70B3> <775D> <7764> <7767> <7769> <776D> <777A> <7781> <7786> <778F> <7793> <77A1> <77A3> <77A6> <77A8> <77AB> <77AD> <77B1> <77B4> <77B6> <77BC> <77BE> <77C0> <77CE> <77D8> <77DD> <77E4> <75C5> <5E76> <73BB> <83E0> <64AD> <62E8> <94B5> <6CE2> <535A> <52C3> <640F> <94C2> <7B94> <4F2F> <5E1B> <8236> <8116> <818A> <6E24> <6CCA> <9A73> <6355> <535C> <54FA> <8865> <57E0> <4E0D> <5E03> <6B65> <7C3F> <90E8> <6016> <64E6> <731C> <88C1> <6750> <624D> <8D22> <776C> endbfrange 100 beginbfrange <8E29> <91C7> <5F69> <83DC> <8521> <9910> <53C2> <8695> <6B8B> <60ED> <60E8> <707F> <82CD> <8231> <4ED3> <6CA7> <85CF> <64CD> <7CD9> <69FD> <66F9> <8349> <5395> <7B56> <4FA7> <518C> <6D4B> <5C42> <8E6D> <63D2> <53C9> <832C> <8336> <67E5> <78B4> <643D> <5BDF> <5C94> <5DEE> <8BE7> <62C6> <67F4> <8C7A> <6400> <63BA> <8749> <998B> <8C17> <7F20> <94F2> <4EA7> <9610> <98A4> <660C> <7316> <77E6> <77E8> <77EA> <77EF> <77F4> <77F7> <77F9> <7803> <780A> <780E> <7813> <7815> <7819> <781B> <781E> <7820> <7824> <7828> <782A> <782E> <7831> <7835> <783D> <783F> <7841> <7846> <7848> <784D> <784F> <7851> <7853> <7858> <785B> <785E> <786F> <7878> <787D> <573A> <5C1D> <5E38> <957F> <507F> <80A0> <5382> <655E> endbfrange 100 beginbfrange <7545> <5531> <5021> <8D85> <6284> <949E> <671D> <5632> <6F6E> <5DE2> <5435> <7092> <8F66> <626F> <64A4> <63A3> <5F7B> <6F88> <90F4> <81E3> <8FB0> <5C18> <6668> <5FF1> <6C89> <9648> <8D81> <886C> <6491> <79F0> <57CE> <6A59> <6210> <5448> <4E58> <7A0B> <60E9> <6F84> <8BDA> <627F> <901E> <9A8B> <79E4> <5403> <75F4> <6301> <5319> <6C60> <8FDF> <5F1B> <9A70> <803B> <9F7F> <4F88> <5C3A> <8D64> <7FC5> <65A5> <70BD> <5145> <51B2> <866B> <5D07> <5BA0> <62BD> <916C> <7574> <8E0C> <7A20> <6101> <7B79> <4EC7> <7EF8> <7785> <4E11> <81ED> <521D> <51FA> <6A71> <53A8> <8E87> <9504> <96CF> <6EC1> <9664> <695A> <7884> <7888> <788A> <788F> <7892> <7894> <7899> <789D> <78A0> <78A2> <78A4> <78A6> <78A8> <78B5> endbfrange 100 beginbfrange <78BA> <78BF> <78C2> <78C6> <78CC> <78D1> <78D6> <78DA> <78E4> <78E9> <78ED> <78F3> <78F5> <78F8> <78FB> <7902> <7906> <7840> <50A8> <77D7> <6410> <89E6> <5904> <63E3> <5DDD> <7A7F> <693D> <4F20> <8239> <5598> <4E32> <75AE> <7A97> <5E62> <5E8A> <95EF> <521B> <5439> <708A> <6376> <9524> <5782> <6625> <693F> <9187> <5507> <6DF3> <7EAF> <8822> <6233> <7EF0> <75B5> <8328> <78C1> <96CC> <8F9E> <6148> <74F7> <8BCD> <6B64> <523A> <8D50> <6B21> <806A> <8471> <56F1> <5306> <4ECE> <4E1B> <51D1> <7C97> <918B> <7C07> <4FC3> <8E7F> <7BE1> <7A9C> <6467> <5D14> <50AC> <8106> <7601> <7CB9> <6DEC> <7FE0> <6751> <5B58> <5BF8> <78CB> <64AE> <6413> <63AA> <632B> <9519> <642D> <8FBE> <7B54> <7629> <6253> <5927> endbfrange 100 beginbfrange <5446> <6B79> <50A3> <6234> <5E26> <6B86> <4EE3> <8D37> <888B> <5F85> <902E> <790D> <7914> <791F> <7925> <7935> <793D> <793F> <7942> <7947> <794A> <7954> <7958> <7961> <7963> <7964> <7966> <7969> <796E> <7970> <7979> <797B> <7982> <7986> <798B> <7990> <6020> <803D> <62C5> <4E39> <5355> <90F8> <63B8> <80C6> <65E6> <6C2E> <4F46> <60EE> <6DE1> <8BDE> <5F39> <86CB> <5F53> <6321> <515A> <8361> <6863> <5200> <6363> <8E48> <5012> <5C9B> <7977> <5BFC> <5230> <7A3B> <60BC> <9053> <76D7> <5FB7> <5F97> <7684> <8E6C> <706F> <767B> <7B49> <77AA> <51F3> <9093> <5824> <4F4E> <6EF4> <8FEA> <654C> <7B1B> <72C4> <6DA4> <7FDF> <5AE1> <62B5> <5E95> <5730> <8482> <7B2C> <5E1D> <5F1F> <9012> <7F14> <98A0> <6382> endbfrange 100 beginbfrange <6EC7> <7898> <70B9> <5178> <975B> <57AB> <7535> <4F43> <7538> <5E97> <60E6> <5960> <6DC0> <6BBF> <7889> <53FC> <96D5> <51CB> <5201> <6389> <540A> <9493> <8C03> <8DCC> <7239> <789F> <8776> <8FED> <8C0D> <53E0> <7993> <799B> <79A8> <79B4> <79BC> <79BF> <79C2> <79C4> <79C7> <79CA> <79CC> <79CE> <79D3> <79D6> <79D9> <79E0> <79E5> <79E8> <79EA> <79EC> <79EE> <79F1> <79F9> <79FC> <79FE> <7A01> <7A04> <7A07> <7A0C> <7A0F> <7A15> <7A18> <7A1B> <4E01> <76EF> <53EE> <9489> <9876> <9F0E> <952D> <5B9A> <8BA2> <4E22> <4E1C> <51AC> <8463> <61C2> <52A8> <680B> <4F97> <606B> <51BB> <6D1E> <515C> <6296> <6597> <9661> <8C46> <9017> <75D8> <90FD> <7763> <6BD2> <728A> <72EC> <8BFB> <5835> <7779> <8D4C> <675C> endbfrange 100 beginbfrange <9540> <809A> <5EA6> <6E21> <5992> <7AEF> <77ED> <953B> <6BB5> <65AD> <7F0E> <5806> <5151> <961F> <5BF9> <58A9> <5428> <8E72> <6566> <987F> <56E4> <949D> <76FE> <9041> <6387> <54C6> <591A> <593A> <579B> <8EB2> <6735> <8DFA> <8235> <5241> <60F0> <5815> <86FE> <5CE8> <9E45> <4FC4> <989D> <8BB9> <5A25> <6076> <5384> <627C> <904F> <9102> <997F> <6069> <800C> <513F> <8033> <5C14> <9975> <6D31> <4E8C> <7A1D> <7A1F> <7A21> <7A24> <7A34> <7A38> <7A3A> <7A3E> <7A40> <7A47> <7A52> <7A58> <7A69> <7A71> <7A75> <7A7B> <7A82> <7A85> <7A87> <7A89> <7A8E> <7A93> <7A99> <7A9E> <7AA1> <8D30> <53D1> <7F5A> <7B4F> <4F10> <4E4F> <9600> <6CD5> <73D0> <85E9> <5E06> <756A> <7FFB> <6A0A> <77FE> <9492> <7E41> <51E1> endbfrange 100 beginbfrange <70E6> <53CD> <8FD4> <8303> <8D29> <72AF> <996D> <6CDB> <574A> <82B3> <65B9> <80AA> <623F> <9632> <59A8> <4EFF> <8BBF> <7EBA> <653E> <83F2> <975E> <5561> <98DE> <80A5> <532A> <8BFD> <5420> <80BA> <5E9F> <6CB8> <8D39> <82AC> <915A> <5429> <6C1B> <5206> <7EB7> <575F> <711A> <6C7E> <7C89> <594B> <4EFD> <5FFF> <6124> <7CAA> <4E30> <5C01> <67AB> <8702> <5CF0> <950B> <98CE> <75AF> <70FD> <9022> <51AF> <7F1D> <8BBD> <5949> <51E4> <4F5B> <5426> <592B> <6577> <80A4> <5B75> <6276> <62C2> <8F90> <5E45> <6C1F> <7B26> <4F0F> <4FD8> <670D> <7AA3> <7AA7> <7AA9> <7AAE> <7AB4> <7AC0> <7ACC> <7AD7> <7ADA> <7AE1> <7AE4> <7AE7> <7AEE> <7AF0> <7AF4> <7AFB> <7AFE> <7B00> <7B05> <7B07> <7B09> <7B0C> <7B10> <7B12> endbfrange 100 beginbfrange <7B16> <7B1A> <7B1C> <7B1F> <7B21> <7B27> <7B29> <7B2D> <6D6E> <6DAA> <798F> <88B1> <5F17> <752B> <629A> <8F85> <4FEF> <91DC> <65A7> <812F> <8151> <5E9C> <8150> <8D74> <526F> <8986> <8D4B> <590D> <5085> <4ED8> <961C> <7236> <8179> <8D1F> <5BCC> <8BA3> <9644> <5987> <7F1A> <5490> <5676> <560E> <8BE5> <6539> <6982> <9499> <76D6> <6E89> <5E72> <7518> <6746> <67D1> <7AFF> <809D> <8D76> <611F> <79C6> <6562> <8D63> <5188> <521A> <94A2> <7F38> <809B> <7EB2> <5C97> <6E2F> <6760> <7BD9> <768B> <9AD8> <818F> <7F94> <7CD5> <641E> <9550> <7A3F> <544A> <54E5> <6B4C> <6401> <6208> <9E3D> <80F3> <7599> <5272> <9769> <845B> <683C> <86E4> <9601> <9694> <94EC> <4E2A> <5404> <7ED9> <6839> <8DDF> <8015> <66F4> endbfrange 100 beginbfrange <5E9A> <7FB9> <7B2F> <7B32> <7B34> <7B39> <7B3B> <7B3D> <7B3F> <7B46> <7B48> <7B4A> <7B4D> <7B53> <7B55> <7B57> <7B59> <7B5C> <7B5E> <7B61> <7B63> <7B6F> <7B73> <7B76> <7B78> <7B7A> <7B7C> <7B7F> <7B81> <7B86> <7B8E> <7B91> <7B96> <7B98> <7B9E> <7BA3> <7BAE> <7BB2> <7BB5> <7BB9> <7BC2> <57C2> <803F> <6897> <5DE5> <653B> <529F> <606D> <9F9A> <4F9B> <8EAC> <516C> <5BAB> <5F13> <5DE9> <6C5E> <62F1> <8D21> <5171> <94A9> <52FE> <6C9F> <82DF> <72D7> <57A2> <6784> <8D2D> <591F> <8F9C> <83C7> <5495> <7B8D> <4F30> <6CBD> <5B64> <59D1> <9F13> <53E4> <86CA> <9AA8> <8C37> <80A1> <6545> <987E> <56FA> <96C7> <522E> <74DC> <5250> <5BE1> <6302> <8902> <4E56> <62D0> <602A> <68FA> <5173> <5B98> <51A0> <89C2> endbfrange 100 beginbfrange <7BA1> <9986> <7F50> <60EF> <704C> <8D2F> <5149> <5E7F> <901B> <7470> <89C4> <572D> <7845> <5F52> <9F9F> <95FA> <8F68> <9B3C> <8BE1> <7678> <6842> <67DC> <8DEA> <8D35> <523D> <8F8A> <6EDA> <68CD> <9505> <90ED> <56FD> <679C> <88F9> <8FC7> <54C8> <7BC5> <7BC8> <7BCD> <7BD2> <7BD4> <7BDB> <7BDE> <7BE2> <7BE7> <7BEB> <7BEF> <7BF2> <7BF8> <7BFD> <7BFF> <7C08> <7C0D> <7C10> <7C17> <7C1A> <7C20> <7C28> <7C2B> <7C39> <7C42> <9AB8> <5B69> <6D77> <6C26> <4EA5> <5BB3> <9A87> <9163> <61A8> <90AF> <97E9> <542B> <6DB5> <5BD2> <51FD> <558A> <7F55> <7FF0> <64BC> <634D> <65F1> <61BE> <608D> <710A> <6C57> <6C49> <592F> <676D> <822A> <58D5> <568E> <8C6A> <6BEB> <90DD> <597D> <8017> <53F7> <6D69> <5475> <559D> endbfrange 100 beginbfrange <8377> <83CF> <6838> <79BE> <548C> <4F55> <5408> <76D2> <8C89> <9602> <6CB3> <6DB8> <8D6B> <8910> <9E64> <8D3A> <563F> <9ED1> <75D5> <5F88> <72E0> <6068> <54FC> <4EA8> <6A2A> <8861> <6052> <8F70> <54C4> <70D8> <8679> <9E3F> <6D2A> <5B8F> <5F18> <7EA2> <5589> <4FAF> <7334> <543C> <539A> <5019> <540E> <547C> <4E4E> <5FFD> <745A> <58F6> <846B> <80E1> <8774> <72D0> <7CCA> <6E56> <7C43> <7C4E> <7C75> <7C7E> <7C88> <7C8A> <7C93> <7C96> <7C99> <7CA0> <7CA3> <7CA6> <7CAB> <7CAF> <7CB4> <7CBA> <5F27> <864E> <552C> <62A4> <4E92> <6CAA> <6237> <82B1> <54D7> <534E> <733E> <6ED1> <753B> <5212> <5316> <8BDD> <69D0> <5F8A> <6000> <6DEE> <574F> <6B22> <73AF> <6853> <8FD8> <7F13> <6362> <60A3> <5524> <75EA> endbfrange 100 beginbfrange <8C62> <7115> <6DA3> <5BA6> <5E7B> <8352> <614C> <9EC4> <78FA> <8757> <7C27> <7687> <51F0> <60F6> <714C> <6643> <5E4C> <604D> <8C0E> <7070> <6325> <8F89> <5FBD> <6062> <86D4> <56DE> <6BC1> <6094> <6167> <5349> <60E0> <6666> <8D3F> <79FD> <4F1A> <70E9> <6C47> <8BB3> <8BF2> <7ED8> <8364> <660F> <5A5A> <9B42> <6D51> <6DF7> <8C41> <6D3B> <4F19> <706B> <83B7> <6216> <60D1> <970D> <8D27> <7978> <51FB> <573E> <57FA> <673A> <7578> <7A3D> <79EF> <7B95> <7CBF> <7CC2> <7CC6> <7CC9> <7CCB> <7CCE> <7CD8> <7CDA> <7CDD> <7CE1> <7CE9> <7CF0> <7CF9> <7CFC> <7D0B> <7D11> <7D21> <7D23> <7D28> <7D2C> <7D30> <808C> <9965> <8FF9> <6FC0> <8BA5> <9E21> <59EC> <7EE9> <7F09> <5409> <6781> <68D8> <8F91> <7C4D> <96C6> endbfrange 100 beginbfrange <53CA> <6025> <75BE> <6C72> <5373> <5AC9> <7EA7> <6324> <51E0> <810A> <5DF1> <84DF> <6280> <5180> <5B63> <4F0E> <796D> <5242> <60B8> <6D4E> <5BC4> <5BC2> <8BA1> <8BB0> <65E2> <5FCC> <9645> <5993> <7EE7> <7EAA> <5609> <67B7> <5939> <4F73> <5BB6> <52A0> <835A> <988A> <8D3E> <7532> <94BE> <5047> <7A3C> <4EF7> <67B6> <9A7E> <5AC1> <6B7C> <76D1> <575A> <5C16> <7B3A> <95F4> <714E> <517C> <80A9> <8270> <5978> <7F04> <8327> <68C0> <67EC> <78B1> <7877> <62E3> <6361> <7B80> <4FED> <526A> <51CF> <8350> <69DB> <9274> <8DF5> <8D31> <89C1> <952E> <7BAD> <4EF6> <7D37> <7D6F> <7D78> <5065> <8230> <5251> <996F> <6E10> <6E85> <6DA7> <5EFA> <50F5> <59DC> <5C06> <6D46> <6C5F> <7586> <848B> <6868> <5956> <8BB2> endbfrange 100 beginbfrange <5320> <9171> <964D> <8549> <6912> <7901> <7126> <80F6> <4EA4> <90CA> <6D47> <9A84> <5A07> <56BC> <6405> <94F0> <77EB> <4FA5> <811A> <72E1> <89D2> <997A> <7F34> <7EDE> <527F> <6559> <9175> <8F7F> <8F83> <53EB> <7A96> <63ED> <63A5> <7686> <79F8> <8857> <9636> <622A> <52AB> <8282> <6854> <6770> <6377> <776B> <7AED> <6D01> <7ED3> <89E3> <59D0> <6212> <85C9> <82A5> <754C> <501F> <4ECB> <75A5> <8BEB> <5C4A> <5DFE> <7B4B> <65A4> <91D1> <4ECA> <6D25> <895F> <7D27> <9526> <4EC5> <8C28> <8FDB> <9773> <664B> <7981> <8FD1> <70EC> <6D78> <7D99> <7DA7> <7DAF> <7DDA> <5C3D> <52B2> <8346> <5162> <830E> <775B> <6676> <9CB8> <4EAC> <60CA> <7CBE> <7CB3> <7ECF> <4E95> <8B66> <666F> <9888> <9759> <5883> <656C> endbfrange 100 beginbfrange <955C> <5F84> <75C9> <9756> <7ADF> <7ADE> <51C0> <70AF> <7A98> <63EA> <7A76> <7EA0> <7396> <97ED> <4E45> <7078> <4E5D> <9152> <53A9> <6551> <65E7> <81FC> <8205> <548E> <5C31> <759A> <97A0> <62D8> <72D9> <75BD> <5C45> <9A79> <83CA> <5C40> <5480> <77E9> <4E3E> <6CAE> <805A> <62D2> <636E> <5DE8> <5177> <8DDD> <8E1E> <952F> <4FF1> <53E5> <60E7> <70AC> <5267> <6350> <9E43> <5A1F> <5026> <7737> <5377> <7EE2> <6485> <652B> <6289> <6398> <5014> <7235> <89C9> <51B3> <8BC0> <7EDD> <5747> <83CC> <94A7> <519B> <541B> <5CFB> <7DFB> <7E3A> <7E3C> <7E42> <7E48> <4FCA> <7AE3> <6D5A> <90E1> <9A8F> <5580> <5496> <5361> <54AF> <5F00> <63E9> <6977> <51EF> <6168> <520A> <582A> <52D8> <574E> <780D> <770B> <5EB7> endbfrange 100 beginbfrange <6177> <7CE0> <625B> <6297> <4EA2> <7095> <8003> <62F7> <70E4> <9760> <5777> <82DB> <67EF> <68F5> <78D5> <9897> <79D1> <58F3> <54B3> <53EF> <6E34> <514B> <523B> <5BA2> <8BFE> <80AF> <5543> <57A6> <6073> <5751> <542D> <7A7A> <6050> <5B54> <63A7> <62A0> <53E3> <6263> <5BC7> <67AF> <54ED> <7A9F> <82E6> <9177> <5E93> <88E4> <5938> <57AE> <630E> <8DE8> <80EF> <5757> <7B77> <4FA9> <5FEB> <5BBD> <6B3E> <5321> <7B50> <72C2> <6846> <77FF> <7736> <65F7> <51B5> <4E8F> <76D4> <5CBF> <7AA5> <8475> <594E> <9B41> <5080> <7E5E> <7E83> <7E9C> <7EAE> <7EB4> <7EBB> <7ED6> <7EE4> <7EEC> <7EF9> <7F0A> <7F10> <7F1E> <7F37> <7F39> <7F3B> <7F43> <7F46> <7F52> <9988> <6127> <6E83> <5764> <6606> <6346> <56F0> <62EC> endbfrange 100 beginbfrange <6269> <5ED3> <9614> <5783> <62C9> <5587> <8721> <814A> <8FA3> <5566> <83B1> <6765> <8D56> <84DD> <5A6A> <680F> <62E6> <7BEE> <9611> <5170> <6F9C> <8C30> <63FD> <89C8> <61D2> <7F06> <70C2> <6EE5> <7405> <6994> <72FC> <5ECA> <90CE> <6717> <6D6A> <635E> <52B3> <7262> <8001> <4F6C> <59E5> <916A> <70D9> <6D9D> <52D2> <4E50> <96F7> <956D> <857E> <78CA> <7D2F> <5121> <5792> <64C2> <808B> <7C7B> <6CEA> <68F1> <695E> <51B7> <5398> <68A8> <7281> <9ECE> <7BF1> <72F8> <79BB> <6F13> <7406> <674E> <91CC> <9CA4> <793C> <8389> <8354> <540F> <6817> <4E3D> <5389> <52B1> <783E> <5386> <5229> <5088> <4F8B> <4FD0> <7F56> <7F59> <7F5B> <7F60> <7F63> <7F6B> <7F6F> <7F73> <7F75> <7F7A> <7F7F> <7F82> <7F8B> <7F8D> endbfrange 100 beginbfrange <7F8F> <7F95> <7F9B> <7FA0> <7FA2> <7FA5> <7FA8> <7FB1> <7FB3> <7FBA> <7FBE> <7FC0> <7FC2> <7FC6> <7FCB> <7FCD> <7FCF> <7FD6> <7FD9> <7FE2> <75E2> <7ACB> <7C92> <6CA5> <96B6> <529B> <7483> <54E9> <4FE9> <8054> <83B2> <8FDE> <9570> <5EC9> <601C> <6D9F> <5E18> <655B> <8138> <94FE> <604B> <70BC> <7EC3> <7CAE> <51C9> <6881> <7CB1> <826F> <4E24> <8F86> <91CF> <667E> <4EAE> <8C05> <64A9> <804A> <50DA> <7597> <71CE> <5BE5> <8FBD> <6F66> <4E86> <6482> <9563> <5ED6> <6599> <5217> <88C2> <70C8> <52A3> <730E> <7433> <6797> <78F7> <9716> <4E34> <90BB> <9CDE> <6DCB> <51DB> <8D41> <541D> <62CE> <73B2> <83F1> <96F6> <9F84> <94C3> <4F36> <7F9A> <51CC> <7075> <9675> <5CAD> <9886> <53E6> <4EE4> <6E9C> <7409> endbfrange 100 beginbfrange <69B4> <786B> <998F> <7559> <5218> <7624> <6D41> <67F3> <516D> <9F99> <804B> <5499> <7B3C> <7ABF> <7FE4> <7FE7> <7FEA> <7FEF> <7FF2> <7FF4> <7FFD> <8002> <8007> <800E> <8011> <8013> <801A> <801D> <8021> <8023> <802B> <8032> <8034> <8039> <803C> <803E> <8040> <8044> <8047> <804E> <8053> <8055> <8059> <805B> <806B> <8072> <9686> <5784> <62E2> <9647> <697C> <5A04> <6402> <7BD3> <6F0F> <964B> <82A6> <5362> <9885> <5E90> <7089> <63B3> <5364> <864F> <9C81> <9E93> <788C> <9732> <8DEF> <8D42> <9E7F> <6F5E> <7984> <5F55> <9646> <622E> <9A74> <5415> <94DD> <4FA3> <65C5> <5C65> <5C61> <7F15> <8651> <6C2F> <5F8B> <7387> <6EE4> <7EFF> <5CE6> <631B> <5B6A> <6EE6> <5375> <4E71> <63A0> <7565> <62A1> <8F6E> endbfrange 100 beginbfrange <4F26> <4ED1> <6CA6> <7EB6> <8BBA> <841D> <87BA> <7F57> <903B> <9523> <7BA9> <9AA1> <88F8> <843D> <6D1B> <9A86> <7EDC> <5988> <9EBB> <739B> <7801> <8682> <9A6C> <9A82> <561B> <5417> <57CB> <4E70> <9EA6> <5356> <8FC8> <8109> <7792> <9992> <86EE> <6EE1> <8513> <66FC> <6162> <6F2B> <807E> <8081> <8085> <8088> <808A> <808D> <8094> <8097> <8099> <809E> <80A3> <80A6> <80AC> <80B0> <80B3> <80B5> <80B8> <80BB> <80C5> <80C7> <80CF> <80D8> <80DF> <80E2> <80E6> <80EE> <80F5> <80F7> <80F9> <80FB> <80FE> <8103> <8107> <810B> <810C> <8115> <8117> <8119> <811B> <811F> <812D> <8130> <8133> <8137> <8139> <813F> <8C29> <8292> <832B> <76F2> <6C13> <5FD9> <83BD> <732B> <8305> <951A> <6BDB> <77DB> <94C6> <536F> endbfrange 100 beginbfrange <8302> <5192> <5E3D> <8C8C> <8D38> <4E48> <73AB> <679A> <6885> <9176> <9709> <7164> <6CA1> <7709> <5A92> <9541> <6BCF> <7F8E> <6627> <5BD0> <59B9> <5A9A> <95E8> <95F7> <4EEC> <840C> <8499> <6AAC> <76DF> <9530> <731B> <68A6> <5B5F> <772F> <919A> <9761> <7CDC> <8FF7> <8C1C> <5F25> <7C73> <79D8> <89C5> <6CCC> <871C> <5BC6> <5E42> <68C9> <7720> <7EF5> <5195> <514D> <52C9> <5A29> <7F05> <9762> <82D7> <63CF> <7784> <85D0> <79D2> <6E3A> <5E99> <5999> <8511> <706D> <6C11> <62BF> <76BF> <654F> <60AF> <95FD> <660E> <879F> <9E23> <94ED> <540D> <547D> <8C2C> <6478> <8140> <8147> <8149> <814D> <8152> <8156> <815B> <8161> <8166> <8168> <816A> <816F> <8172> <8175> <8181> <8183> <8189> <818B> <8190> <8192> endbfrange 100 beginbfrange <8199> <819E> <81A4> <81A7> <81A9> <81AB> <81B4> <81BC> <81C4> <81C7> <81CB> <81CD> <6479> <8611> <6A21> <819C> <78E8> <6469> <9B54> <62B9> <672B> <83AB> <58A8> <9ED8> <6CAB> <6F20> <5BDE> <964C> <8C0B> <725F> <67D0> <62C7> <7261> <4EA9> <59C6> <6BCD> <5893> <66AE> <5E55> <52DF> <6155> <6728> <76EE> <7766> <7267> <7A46> <62FF> <54EA> <5450> <94A0> <90A3> <5A1C> <7EB3> <6C16> <4E43> <5976> <8010> <5948> <5357> <7537> <96BE> <56CA> <6320> <8111> <607C> <95F9> <6DD6> <5462> <9981> <5185> <5AE9> <80FD> <59AE> <9713> <502A> <6CE5> <5C3C> <62DF> <4F60> <533F> <817B> <9006> <6EBA> <852B> <62C8> <5E74> <78BE> <64B5> <637B> <5FF5> <5A18> <917F> <9E1F> <5C3F> <634F> <8042> <5B7D> <556E> <954A> <954D> endbfrange 100 beginbfrange <6D85> <60A8> <67E0> <72DE> <51DD> <5B81> <81D4> <81E4> <81E8> <81EB> <81EE> <81F5> <81FD> <81FF> <8203> <8207> <820E> <8211> <8213> <8215> <821D> <8220> <8224> <8229> <822E> <8232> <823A> <823C> <823F> <8240> <8245> <8248> <824A> <824C> <8250> <8259> <825B> <8260> <8269> <62E7> <6CDE> <725B> <626D> <94AE> <7EBD> <8113> <6D53> <519C> <5F04> <5974> <52AA> <6012> <5973> <6696> <8650> <759F> <632A> <61E6> <7CEF> <8BFA> <54E6> <6B27> <9E25> <6BB4> <85D5> <5455> <5076> <6CA4> <556A> <8DB4> <722C> <5E15> <6015> <7436> <62CD> <6392> <724C> <5F98> <6E43> <6D3E> <6500> <6F58> <76D8> <78D0> <76FC> <7554> <5224> <53DB> <4E53> <5E9E> <65C1> <802A> <80D6> <629B> <5486> <5228> <70AE> <888D> <8DD1> <6CE1> endbfrange 100 beginbfrange <5478> <80DA> <57F9> <88F4> <8D54> <966A> <914D> <4F69> <6C9B> <55B7> <76C6> <7830> <62A8> <70F9> <6F8E> <5F6D> <84EC> <68DA> <787C> <7BF7> <81A8> <670B> <9E4F> <6367> <78B0> <576F> <7812> <9739> <6279> <62AB> <5288> <7435> <6BD7> <826A> <8271> <8275> <827B> <8280> <8283> <8285> <8289> <828C> <8290> <8293> <829A> <829E> <82A0> <82A2> <82A7> <82B2> <82B5> <82BA> <82BF> <82C2> <82C5> <82C9> <82D0> <82D6> <82D9> <82DD> <82E2> <82E7> <82EC> <82F0> <82F2> <82F5> <82F8> <82FA> <82FC> <830A> <830D> <8310> <8312> <8316> <8318> <831D> <8329> <832E> <8330> <8332> <8337> <833B> <833D> <5564> <813E> <75B2> <76AE> <5339> <75DE> <50FB> <5C41> <8B6C> <7BC7> <504F> <7247> <9A97> <98D8> <6F02> <74E2> <7968> endbfrange 100 beginbfrange <6487> <77A5> <62FC> <9891> <8D2B> <54C1> <8058> <4E52> <576A> <82F9> <840D> <5E73> <51ED> <74F6> <8BC4> <5C4F> <5761> <6CFC> <9887> <5A46> <7834> <9B44> <8FEB> <7C95> <5256> <6251> <94FA> <4EC6> <8386> <8461> <83E9> <84B2> <57D4> <6734> <5703> <666E> <6D66> <8C31> <66DD> <7011> <671F> <6B3A> <6816> <621A> <59BB> <4E03> <51C4> <6F06> <67D2> <6C8F> <5176> <68CB> <5947> <6B67> <7566> <5D0E> <8110> <9F50> <65D7> <7948> <7941> <9A91> <8D77> <5C82> <4E5E> <4F01> <542F> <5951> <780C> <5668> <6C14> <8FC4> <5F03> <6C7D> <6CE3> <8BAB> <6390> <833E> <8341> <8344> <8348> <834A> <8353> <8355> <835D> <8362> <8370> <8379> <837E> <8387> <838A> <838F> <8394> <8399> <839D> <839F> <83A1> <83AC> <83AF> <83B5> endbfrange 100 beginbfrange <83BB> <83BE> <83C2> <83C6> <83C8> <83CB> <83CD> <83D0> <83D5> <83D7> <83D9> <83DE> <83E2> <83E6> <83EB> <6070> <6D3D> <7275> <6266> <948E> <94C5> <5343> <8FC1> <7B7E> <4EDF> <8C26> <4E7E> <9ED4> <94B1> <94B3> <524D> <6F5C> <9063> <6D45> <8C34> <5811> <5D4C> <6B20> <6B49> <67AA> <545B> <8154> <7F8C> <5899> <8537> <5F3A> <62A2> <6A47> <9539> <6572> <6084> <6865> <77A7> <4E54> <4FA8> <5DE7> <9798> <64AC> <7FD8> <5CED> <4FCF> <7A8D> <5207> <8304> <4E14> <602F> <7A83> <94A6> <4FB5> <4EB2> <79E6> <7434> <52E4> <82B9> <64D2> <79BD> <5BDD> <6C81> <9752> <8F7B> <6C22> <503E> <537F> <6E05> <64CE> <6674> <6C30> <60C5> <9877> <8BF7> <5E86> <743C> <7A77> <79CB> <4E18> <90B1> <7403> <6C42> <56DA> <914B> endbfrange 100 beginbfrange <6CC5> <8D8B> <533A> <86C6> <66F2> <8EAF> <5C48> <9A71> <6E20> <83EE> <83F3> <83FA> <83FE> <8402> <8405> <8407> <8410> <8412> <8419> <841E> <8429> <8432> <8439> <843E> <8447> <844A> <8452> <8458> <845D> <8462> <8464> <846A> <846E> <8472> <8474> <8477> <8479> <847B> <53D6> <5A36> <9F8B> <8DA3> <53BB> <5708> <98A7> <6743> <919B> <6CC9> <5168> <75CA> <62F3> <72AC> <5238> <529D> <7F3A> <7094> <7638> <5374> <9E4A> <69B7> <786E> <96C0> <88D9> <7FA4> <7136> <71C3> <5189> <67D3> <74E4> <58E4> <6518> <56B7> <8BA9> <9976> <6270> <7ED5> <60F9> <70ED> <58EC> <4EC1> <4EBA> <5FCD> <97E7> <4EFB> <8BA4> <5203> <598A> <7EAB> <6254> <4ECD> <65E5> <620E> <8338> <84C9> <8363> <878D> <7194> <6EB6> <5BB9> <7ED2> endbfrange 100 beginbfrange <5197> <63C9> <67D4> <8089> <8339> <8815> <5112> <5B7A> <5982> <8FB1> <4E73> <6C5D> <5165> <8925> <8F6F> <962E> <854A> <745E> <9510> <95F0> <6DA6> <82E5> <5F31> <6492> <6D12> <8428> <816E> <9CC3> <585E> <8D5B> <4E09> <53C1> <847D> <8483> <848A> <848D> <848F> <8498> <849A> <849D> <84A2> <84B0> <84B3> <84B5> <84BB> <84BE> <84C0> <84C2> <84C5> <84CB> <84CE> <84D2> <84D4> <84D7> <84D8> <84DE> <84E1> <84E4> <84E7> <84ED> <84F1> <84FD> <8500> <4F1E> <6563> <6851> <55D3> <4E27> <6414> <9A9A> <626B> <5AC2> <745F> <8272> <6DA9> <68EE> <50E7> <838E> <7802> <6740> <5239> <6C99> <7EB1> <50BB> <5565> <715E> <7B5B> <6652> <73CA> <82EB> <6749> <5C71> <5220> <717D> <886B> <95EA> <9655> <64C5> <8D61> <81B3> endbfrange 100 beginbfrange <5584> <6C55> <6247> <7F2E> <5892> <4F24> <5546> <8D4F> <664C> <4E0A> <5C1A> <88F3> <68A2> <634E> <7A0D> <70E7> <828D> <52FA> <97F6> <5C11> <54E8> <90B5> <7ECD> <5962> <8D4A> <86C7> <820C> <8D66> <6444> <5C04> <6151> <6D89> <793E> <8BBE> <7837> <7533> <547B> <4F38> <8EAB> <6DF1> <5A20> <7EC5> <795E> <6C88> <5BA1> <5A76> <751A> <80BE> <614E> <6E17> <58F0> <751F> <7525> <7272> <5347> <7EF3> <8503> <850D> <8512> <8514> <8518> <851B> <8520> <8522> <852D> <853E> <8544> <854B> <8557> <855A> <855F> <8565> <8569> <8573> <8575> <857C> <857F> <7701> <76DB> <5269> <80DC> <5723> <5E08> <5931> <72EE> <65BD> <6E7F> <8BD7> <5C38> <8671> <5341> <77F3> <62FE> <65F6> <4EC0> <98DF> <8680> <5B9E> <8BC6> <53F2> endbfrange 100 beginbfrange <77E2> <4F7F> <5C4E> <9A76> <59CB> <5F0F> <793A> <58EB> <4E16> <67FF> <4E8B> <62ED> <8A93> <901D> <52BF> <662F> <55DC> <566C> <9002> <4ED5> <4F8D> <91CA> <9970> <6C0F> <5E02> <6043> <5BA4> <89C6> <8BD5> <6536> <624B> <9996> <5B88> <5BFF> <6388> <552E> <53D7> <7626> <517D> <852C> <67A2> <68B3> <6B8A> <6292> <8F93> <53D4> <8212> <6DD1> <758F> <4E66> <8D4E> <5B70> <719F> <85AF> <6691> <66D9> <7F72> <8700> <9ECD> <9F20> <5C5E> <672F> <8FF0> <6811> <675F> <620D> <7AD6> <5885> <5EB6> <6570> <6F31> <8582> <8586> <8588> <8590> <859D> <85A5> <85A9> <85AB> <85B1> <85B8> <85BA> <85C2> <85CA> <85D1> <85D4> <85D6> <85DD> <85E5> <85EA> <6055> <5237> <800D> <6454> <8870> <7529> <5E05> <6813> <62F4> <971C> endbfrange 100 beginbfrange <53CC> <723D> <8C01> <6C34> <7761> <7A0E> <542E> <77AC> <987A> <821C> <8BF4> <7855> <6714> <70C1> <65AF> <6495> <5636> <601D> <79C1> <53F8> <4E1D> <6B7B> <8086> <5BFA> <55E3> <56DB> <4F3A> <4F3C> <9972> <5DF3> <677E> <8038> <6002> <9882> <9001> <5B8B> <8BBC> <8BF5> <641C> <8258> <64DE> <55FD> <82CF> <9165> <4FD7> <7D20> <901F> <7C9F> <50F3> <5851> <6EAF> <5BBF> <8BC9> <8083> <9178> <849C> <7B97> <867D> <968B> <968F> <7EE5> <9AD3> <788E> <5C81> <7A57> <9042> <96A7> <795F> <5B59> <635F> <7B0B> <84D1> <68AD> <5506> <7F29> <7410> <7D22> <9501> <6240> <584C> <4ED6> <5B83> <5979> <5854> <85F9> <85FC> <8600> <8606> <8612> <8617> <8628> <862A> <8639> <863D> <8641> <8652> <8655> <865B> <865F> <8663> endbfrange 100 beginbfrange <736D> <631E> <8E4B> <8E0F> <80CE> <82D4> <62AC> <53F0> <6CF0> <915E> <592A> <6001> <6C70> <574D> <644A> <8D2A> <762B> <6EE9> <575B> <6A80> <75F0> <6F6D> <8C2D> <8C08> <5766> <6BEF> <8892> <78B3> <63A2> <53F9> <70AD> <6C64> <5858> <642A> <5802> <68E0> <819B> <5510> <7CD6> <5018> <8EBA> <6DCC> <8D9F> <70EB> <638F> <6D9B> <6ED4> <7EE6> <8404> <6843> <9003> <6DD8> <9676> <8BA8> <5957> <7279> <85E4> <817E> <75BC> <8A8A> <68AF> <5254> <8E22> <9511> <63D0> <9898> <8E44> <557C> <4F53> <66FF> <568F> <60D5> <6D95> <5243> <5C49> <5929> <6DFB> <586B> <7530> <751C> <606C> <8214> <8146> <6311> <6761> <8FE2> <773A> <8DF3> <8D34> <94C1> <5E16> <5385> <542C> <70C3> <866D> <866F> <8672> <8683> <868E> <8694> endbfrange 100 beginbfrange <8696> <869E> <86A5> <86AB> <86AD> <86B2> <86B7> <86BB> <86C1> <86C5> <86C8> <86CC> <86D2> <86D5> <86DA> <86DC> <86DD> <86E0> <86E5> <86EA> <86EF> <86F5> <86FA> <86FF> <8701> <8704> <870B> <870E> <8714> <8716> <6C40> <5EF7> <505C> <4EAD> <5EAD> <633A> <8247> <901A> <6850> <916E> <77B3> <540C> <94DC> <5F64> <7AE5> <6876> <6345> <7B52> <7EDF> <75DB> <5077> <6295> <5934> <900F> <51F8> <79C3> <7A81> <56FE> <5F92> <9014> <6D82> <5C60> <571F> <5410> <5154> <6E4D> <56E2> <63A8> <9893> <817F> <8715> <892A> <9000> <541E> <5C6F> <81C0> <62D6> <6258> <8131> <9E35> <9640> <9A6E> <9A7C> <692D> <59A5> <62D3> <553E> <6316> <54C7> <86D9> <6D3C> <5A03> <74E6> <889C> <6B6A> <5916> <8C4C> <5F2F> <6E7E> <73A9> endbfrange 100 beginbfrange <987D> <4E38> <70F7> <5B8C> <7897> <633D> <665A> <7696> <60CB> <5B9B> <5A49> <4E07> <8155> <6C6A> <738B> <4EA1> <6789> <7F51> <5F80> <65FA> <671B> <5FD8> <5984> <5A01> <8719> <871B> <871D> <871F> <8724> <8726> <872A> <872F> <8732> <8735> <8738> <873C> <8740> <874A> <874D> <874F> <8754> <8758> <875A> <8761> <8766> <876F> <8771> <8775> <8777> <877F> <8784> <8786> <8789> <878C> <878E> <8794> <8798> <87A0> <5DCD> <5FAE> <5371> <97E6> <8FDD> <6845> <56F4> <552F> <60DF> <4E3A> <6F4D> <7EF4> <82C7> <840E> <59D4> <4F1F> <4F2A> <5C3E> <7EAC> <672A> <851A> <5473> <754F> <80C3> <5582> <9B4F> <4F4D> <6E2D> <8C13> <5C09> <6170> <536B> <761F> <6E29> <868A> <6587> <95FB> <7EB9> <543B> <7A33> <7D0A> <95EE> endbfrange 100 beginbfrange <55E1> <7FC1> <74EE> <631D> <8717> <6DA1> <7A9D> <6211> <65A1> <5367> <63E1> <6C83> <5DEB> <545C> <94A8> <4E4C> <6C61> <8BEC> <5C4B> <65E0> <829C> <68A7> <543E> <5434> <6BCB> <6B66> <4E94> <6342> <5348> <821E> <4F0D> <4FAE> <575E> <620A> <96FE> <6664> <7269> <52FF> <52A1> <609F> <8BEF> <6614> <7199> <6790> <897F> <7852> <77FD> <6670> <563B> <5438> <9521> <727A> <87A5> <87A9> <87AE> <87B0> <87B4> <87B6> <87BB> <87BE> <87C1> <87C7> <87CC> <87D4> <87DC> <87E1> <87E6> <87EB> <87EF> <87FA> <87FF> <8804> <880B> <8814> <8817> <881C> <8823> <7A00> <606F> <5E0C> <6089> <819D> <5915> <60DC> <7184> <70EF> <6EAA> <6C50> <7280> <6A84> <88AD> <5E2D> <4E60> <5AB3> <559C> <94E3> <6D17> <7CFB> <9699> <620F> endbfrange 100 beginbfrange <7EC6> <778E> <867E> <5323> <971E> <8F96> <6687> <5CE1> <4FA0> <72ED> <4E0B> <53A6> <590F> <5413> <6380> <9528> <5148> <4ED9> <9C9C> <7EA4> <54B8> <8D24> <8854> <8237> <95F2> <6D8E> <5F26> <5ACC> <663E> <9669> <73B0> <732E> <53BF> <817A> <9985> <7FA1> <5BAA> <9677> <9650> <7EBF> <76F8> <53A2> <9576> <9999> <7BB1> <8944> <6E58> <4E61> <7FD4> <7965> <8BE6> <60F3> <54CD> <4EAB> <9879> <5DF7> <6A61> <50CF> <5411> <8C61> <8427> <785D> <9704> <524A> <54EE> <56A3> <9500> <6D88> <5BB5> <6DC6> <6653> <8824> <8833> <883A> <883D> <8841> <8846> <884E> <8855> <8858> <885A> <8866> <886A> <886D> <886F> <8871> <8873> <8878> <887B> <8880> <8883> <8886> <8889> <888C> <888E> <8893> <8897> <889D> <88A3> <88A5> endbfrange 100 beginbfrange <5C0F> <5B5D> <6821> <8096> <5578> <7B11> <6548> <6954> <4E9B> <6B47> <874E> <978B> <534F> <631F> <643A> <90AA> <659C> <80C1> <8C10> <5199> <68B0> <5378> <87F9> <61C8> <6CC4> <6CFB> <8C22> <5C51> <85AA> <82AF> <950C> <6B23> <8F9B> <65B0> <5FFB> <5FC3> <4FE1> <8845> <661F> <8165> <7329> <60FA> <5174> <5211> <578B> <5F62> <90A2> <884C> <9192> <5E78> <674F> <6027> <59D3> <5144> <51F6> <80F8> <5308> <6C79> <96C4> <718A> <4F11> <4FEE> <7F9E> <673D> <55C5> <9508> <79C0> <8896> <7EE3> <589F> <620C> <9700> <865A> <5618> <987B> <5F90> <8BB8> <84C4> <9157> <53D9> <65ED> <5E8F> <755C> <6064> <7D6E> <5A7F> <7EEA> <7EED> <8F69> <55A7> <5BA3> <60AC> <65CB> <7384> <88AC> <88AE> <88B2> <88B8> <88BD> <88C3> endbfrange 100 beginbfrange <88C7> <88CA> <88CF> <88D3> <88D6> <88DA> <88E0> <88E6> <88E9> <88F2> <88F5> <88FA> <88FD> <88FF> <8903> <8909> <890B> <8911> <8914> <891C> <8922> <8926> <892C> <8931> <8935> <8937> <9009> <7663> <7729> <7EDA> <9774> <859B> <5B66> <7A74> <96EA> <8840> <52CB> <718F> <5FAA> <65EC> <8BE2> <5BFB> <9A6F> <5DE1> <6B89> <6C5B> <8BAD> <8BAF> <900A> <8FC5> <538B> <62BC> <9E26> <9E2D> <5440> <4E2B> <82BD> <7259> <869C> <5D16> <8859> <6DAF> <96C5> <54D1> <4E9A> <8BB6> <7109> <54BD> <9609> <70DF> <6DF9> <76D0> <4E25> <7814> <8712> <5CA9> <5EF6> <8A00> <989C> <960E> <708E> <6CBF> <5944> <63A9> <773C> <884D> <6F14> <8273> <5830> <71D5> <538C> <781A> <96C1> <5501> <5F66> <7130> <5BB4> <8C1A> <9A8C> <6B83> endbfrange 100 beginbfrange <592E> <9E2F> <79E7> <6768> <626C> <4F6F> <75A1> <7F8A> <6D0B> <9633> <6C27> <4EF0> <75D2> <517B> <6837> <6F3E> <9080> <8170> <5996> <7476> <8938> <8942> <8945> <8960> <8967> <897C> <897D> <8980> <8982> <8984> <8987> <6447> <5C27> <9065> <7A91> <8C23> <59DA> <54AC> <8200> <836F> <8981> <8000> <6930> <564E> <8036> <7237> <91CE> <51B6> <4E5F> <9875> <6396> <4E1A> <53F6> <66F3> <814B> <591C> <6DB2> <4E00> <58F9> <533B> <63D6> <94F1> <4F9D> <4F0A> <8863> <9890> <5937> <9057> <79FB> <4EEA> <80F0> <7591> <6C82> <5B9C> <59E8> <5F5D> <6905> <8681> <501A> <5DF2> <4E59> <77E3> <4EE5> <827A> <6291> <6613> <9091> <5C79> <4EBF> <5F79> <81C6> <9038> <8084> <75AB> <4EA6> <88D4> <610F> <6BC5> <5FC6> <4E49> endbfrange 100 beginbfrange <76CA> <6EA2> <8BE3> <8BAE> <8C0A> <8BD1> <5F02> <7FFC> <7FCC> <7ECE> <8335> <836B> <56E0> <6BB7> <97F3> <9634> <59FB> <541F> <94F6> <6DEB> <5BC5> <996E> <5C39> <5F15> <9690> <89A2> <89C3> <89CD> <89D3> <89D7> <89DB> <89DD> <89DF> <89E4> <89E7> <89EC> <89F0> <89F4> <89FB> <8A01> <8A08> <5370> <82F1> <6A31> <5A74> <9E70> <5E94> <7F28> <83B9> <8424> <8367> <8747> <8FCE> <8D62> <76C8> <5F71> <9896> <786C> <6620> <54DF> <62E5> <4F63> <81C3> <75C8> <5EB8> <96CD> <8E0A> <86F9> <548F> <6CF3> <6D8C> <6C38> <607F> <52C7> <7528> <5E7D> <4F18> <60A0> <5FE7> <5C24> <7531> <90AE> <94C0> <72B9> <6CB9> <6E38> <9149> <6709> <53CB> <53F3> <4F51> <91C9> <8BF1> <53C8> <5E7C> <8FC2> <6DE4> <4E8E> <76C2> <6986> endbfrange 100 beginbfrange <865E> <611A> <8206> <4F59> <4FDE> <903E> <9C7C> <6109> <6E1D> <6E14> <9685> <4E88> <5A31> <96E8> <4E0E> <5C7F> <79B9> <5B87> <8BED> <7FBD> <7389> <57DF> <828B> <90C1> <5401> <9047> <55BB> <5CEA> <5FA1> <6108> <6B32> <72F1> <80B2> <8A89> <8A1E> <8A3F> <8A49> <8A5F> <8A7A> <6D74> <5BD3> <88D5> <9884> <8C6B> <9A6D> <9E33> <6E0A> <51A4> <5143> <57A3> <8881> <539F> <63F4> <8F95> <56ED> <5458> <5706> <733F> <6E90> <7F18> <8FDC> <82D1> <613F> <6028> <9662> <66F0> <7EA6> <8D8A> <8DC3> <94A5> <5CB3> <7CA4> <6708> <60A6> <9605> <8018> <4E91> <90E7> <5300> <9668> <5141> <8FD0> <8574> <915D> <6655> <97F5> <5B55> <531D> <7838> <6742> <683D> <54C9> <707E> <5BB0> <8F7D> <518D> <5728> <54B1> <6512> <6682> endbfrange 100 beginbfrange <8D5E> <8D43> <810F> <846C> <906D> <7CDF> <51FF> <85FB> <67A3> <65E9> <6FA1> <86A4> <8E81> <566A> <9020> <7682> <7076> <71E5> <8D23> <62E9> <5219> <6CFD> <8D3C> <600E> <589E> <618E> <66FE> <8D60> <624E> <55B3> <6E23> <672D> <8F67> <8A81> <8A8B> <8A94> <8AC3> <94E1> <95F8> <7728> <6805> <69A8> <548B> <4E4D> <70B8> <8BC8> <6458> <658B> <5B85> <7A84> <503A> <5BE8> <77BB> <6BE1> <8A79> <7C98> <6CBE> <76CF> <65A9> <8F97> <5D2D> <5C55> <8638> <6808> <5360> <6218> <7AD9> <6E5B> <7EFD> <6A1F> <7AE0> <5F70> <6F33> <5F20> <638C> <6DA8> <6756> <4E08> <5E10> <8D26> <4ED7> <80C0> <7634> <969C> <62DB> <662D> <627E> <6CBC> <8D75> <7167> <7F69> <5146> <8087> <53EC> <906E> <6298> <54F2> <86F0> <8F99> <8005> endbfrange 100 beginbfrange <9517> <8517> <8FD9> <6D59> <73CD> <659F> <771F> <7504> <7827> <81FB> <8D1E> <9488> <4FA6> <6795> <75B9> <8BCA> <9707> <632F> <9547> <9635> <84B8> <6323> <7741> <5F81> <72F0> <4E89> <6014> <6574> <62EF> <6B63> <653F> <8AE4> <8B08> <8B24> <8B27> <5E27> <75C7> <90D1> <8BC1> <829D> <679D> <652F> <5431> <8718> <77E5> <80A2> <8102> <6C41> <4E4B> <7EC7> <804C> <76F4> <690D> <6B96> <6267> <503C> <4F84> <5740> <6307> <6B62> <8DBE> <53EA> <65E8> <7EB8> <5FD7> <631A> <63B7> <81F3> <7F6E> <5E1C> <5CD9> <5236> <667A> <79E9> <7A1A> <8D28> <7099> <75D4> <6EDE> <6CBB> <7A92> <4E2D> <76C5> <5FE0> <949F> <8877> <7EC8> <79CD> <80BF> <91CD> <4EF2> <4F17> <821F> <5468> <5DDE> <6D32> <8BCC> <7CA5> <8F74> <8098> endbfrange 100 beginbfrange <5E1A> <5492> <76B1> <5B99> <663C> <9AA4> <73E0> <682A> <86DB> <6731> <732A> <8BF8> <8BDB> <9010> <7AF9> <70DB> <716E> <62C4> <77A9> <5631> <4E3B> <8457> <67F1> <52A9> <86C0> <8D2E> <94F8> <7B51> <8B46> <8B67> <8B6D> <8B87> <8BAC> <8BB1> <8BBB> <8BC7> <8BD0> <8BEA> <8C09> <8C1E> <4F4F> <6CE8> <795D> <9A7B> <6293> <722A> <62FD> <4E13> <7816> <8F6C> <64B0> <8D5A> <7BC6> <6869> <5E84> <88C5> <5986> <649E> <58EE> <72B6> <690E> <9525> <8FFD> <8D58> <5760> <7F00> <8C06> <51C6> <6349> <62D9> <5353> <684C> <7422> <8301> <914C> <5544> <7740> <707C> <6D4A> <5179> <54A8> <8D44> <59FF> <6ECB> <6DC4> <5B5C> <7D2B> <4ED4> <7C7D> <6ED3> <5B50> <81EA> <6E0D> <5B57> <9B03> <68D5> <8E2A> <5B97> <7EFC> <603B> endbfrange 100 beginbfrange <7EB5> <90B9> <8D70> <594F> <63CD> <79DF> <8DB3> <5352> <65CF> <7956> <8BC5> <963B> <7EC4> <94BB> <7E82> <5634> <9189> <6700> <7F6A> <5C0A> <9075> <6628> <5DE6> <4F50> <67DE> <505A> <4F5C> <5750> <5EA7> <8C38> <8C42> <8C48> <8C4A> <8C4D> <8C56> <8C5B> <8C63> <8C6C> <8C74> <8C7B> <8C83> <8C86> <8C88> <8C8B> <8C8D> <8C95> <8C99> <4E8D> <4E0C> <5140> <4E10> <5EFF> <5345> <4E15> <4E98> <4E1E> <9B32> <5B6C> <5669> <4E28> <79BA> <4E3F> <5315> <4E47> <592D> <723B> <536E> <6C10> <56DF> <80E4> <9997> <6BD3> <777E> <9F17> <4E36> <4E9F> <9F10> <4E5C> <4E69> <4E93> <8288> <5B5B> <556C> <560F> <4EC4> <538D> <539D> <53A3> <53A5> <53AE> <9765> <8D5D> <531A> <53F5> <5326> <532E> <533E> <8D5C> <5366> endbfrange 100 beginbfrange <5363> <5202> <5208> <520E> <522D> <5233> <523F> <524C> <525E> <5261> <525C> <84AF> <527D> <5282> <5281> <5290> <5293> <5182> <7F54> <4EBB> <4EC3> <4EC9> <4EC2> <4EE8> <4EE1> <4EEB> <4EDE> <4F1B> <4EF3> <4F22> <4F64> <4EF5> <4F25> <4F27> <4F09> <4F2B> <4F5E> <4F67> <6538> <4F5A> <4F5D> <8CAE> <8CED> <4F5F> <4F57> <4F32> <4F3D> <4F76> <4F74> <4F91> <4F89> <4F83> <4F8F> <4F7E> <4F7B> <4FAA> <4F7C> <4FAC> <4F94> <4FE6> <4FE8> <4FEA> <4FC5> <4FDA> <4FE3> <4FDC> <4FD1> <4FDF> <4FF8> <5029> <504C> <4FF3> <502C> <500F> <502E> <502D> <4FFE> <501C> <500C> <5025> <5028> <507E> <5043> <5055> <5048> <504E> <506C> <507B> <50A5> <50A7> <50A9> <50BA> <50D6> <5106> <50ED> <50EC> <50E6> <50EE> <5107> <510B> endbfrange 100 beginbfrange <4EDD> <6C3D> <4F58> <4F65> <4FCE> <9FA0> <6C46> <7C74> <516E> <5DFD> <9EC9> <9998> <5181> <5914> <52F9> <530D> <8A07> <5310> <51EB> <5919> <5155> <4EA0> <5156> <4EB3> <886E> <88A4> <4EB5> <8114> <88D2> <7980> <5B34> <8803> <7FB8> <51AB> <51B1> <51BD> <51BC> <8D0E> <8D20> <8D51> <8D57> <8D5F> <8D65> <8D68> <8D6C> <8D6E> <8D71> <8D78> <8D82> <8D86> <8D8C> <8D92> <8D95> <8DA0> <8DA2> <8DA4> <8DB2> <8DB6> <8DB9> <8DBB> <8DBD> <8DC0> <8DC5> <8DC7> <8DCD> <8DD0> <8DD2> <51C7> <5196> <51A2> <51A5> <8BA0> <8BA6> <8BAA> <8BB4> <8BB7> <8BC2> <8BCB> <8BCF> <8BCE> <8BD2> <8BD6> <8BD8> <8BDC> <8BDF> <8BE4> <8BE8> <8BEE> <8BF0> <8BF3> <8BF6> <8BF9> <8BFC> <8BFF> <8C02> <8C04> <8C07> <8C0C> <8C0F> <8C11> endbfrange 100 beginbfrange <8C14> <8C19> <8C1B> <8C18> <8C1D> <8C1F> <8C25> <8C27> <8C2A> <8C2E> <8C32> <8C35> <5369> <537A> <961D> <9622> <9621> <9631> <962A> <963D> <963C> <9642> <9649> <9654> <965F> <9667> <966C> <9672> <9674> <9688> <968D> <9697> <96B0> <9097> <909B> <909D> <9099> <90AC> <90A1> <90B4> <90B3> <90B6> <90BA> <8DD5> <8DD8> <8DDC> <8DE0> <8DE5> <8DE9> <8DED> <8DF0> <8DF4> <8DF6> <8DFC> <8DFE> <8E06> <8E0B> <8E0D> <8E10> <8E15> <8E20> <8E24> <8E2B> <8E2D> <8E30> <8E32> <8E36> <8E3B> <8E3E> <8E3F> <8E43> <8E45> <8E4C> <8E53> <8E5A> <8E67> <8E6A> <8E6E> <8E71> <90B8> <90B0> <90CF> <90C5> <90BE> <90D0> <90C4> <90C7> <90D3> <90E6> <90E2> <90DC> <90D7> <90DB> <90EB> <90EF> <90FE> <9104> <9122> <911E> <9123> endbfrange 100 beginbfrange <9131> <912F> <9139> <9143> <9146> <520D> <5942> <52A2> <52AC> <52BE> <54FF> <52D0> <52D6> <52F0> <53DF> <71EE> <77CD> <5EF4> <51F5> <51FC> <9B2F> <53B6> <5F01> <755A> <5DEF> <574C> <57A9> <57A1> <587E> <58BC> <58C5> <58D1> <5729> <572C> <572A> <5733> <5739> <572E> <575C> <573B> <5742> <5769> <5785> <576B> <5786> <577C> <577B> <5768> <576D> <5776> <5773> <57AD> <57A4> <578C> <57B2> <57CF> <57A7> <57B4> <5793> <57A0> <57D5> <57D8> <57DA> <57D9> <57D2> <57B8> <57F4> <57EF> <57F8> <57E4> <57DD> <8E73> <8E75> <8E77> <8E7D> <8E80> <8E82> <8E86> <8E88> <8E91> <8E95> <8E9D> <8E9F> <8EAD> <8EB0> <8EB3> <8EBB> <8EC3> <8ECF> <580B> <580D> <57FD> <57ED> <5800> <581E> <5819> <5844> <5820> <5865> <586C> endbfrange 100 beginbfrange <5881> <5889> <589A> <5880> <99A8> <9F19> <61FF> <8279> <827D> <827F> <828F> <828A> <82A8> <8284> <828E> <8291> <8297> <8299> <82AB> <82B8> <82BE> <82B0> <82C8> <82CA> <82E3> <8298> <82B7> <82AE> <82CB> <82C1> <82A9> <82B4> <82A1> <82AA> <829F> <82C4> <82CE> <82A4> <82E1> <8309> <82F7> <82E4> <830F> <8307> <82DC> <82F4> <82D2> <82D8> <830C> <82FB> <82D3> <8311> <831A> <8306> <8314> <82E0> <82D5> <831C> <8351> <835B> <8308> <8392> <833C> <8334> <8331> <839B> <835E> <832F> <834F> <8347> <8343> <835F> <8340> <8317> <8360> <832D> <833A> <8333> <8366> <8365> <8EE5> <8F24> <8368> <831B> <8369> <836C> <836A> <836D> <83B0> <8378> <83B3> <83A0> <83AA> <8393> <839C> <8385> <837C> <83B6> <83A9> <837D> endbfrange 100 beginbfrange <83B8> <837B> <8398> <839E> <83A8> <83BA> <83BC> <83C1> <8401> <83E5> <83D8> <5807> <8418> <840B> <83DD> <83FD> <83D6> <841C> <8438> <8411> <8406> <83D4> <83DF> <840F> <8403> <83F8> <83EA> <83C5> <83C0> <8426> <83F0> <83E1> <845C> <8451> <845A> <8459> <8473> <8487> <847A> <8489> <8478> <843C> <8446> <8469> <8476> <848C> <848E> <8431> <846D> <84C1> <84CD> <84D0> <84E6> <84BD> <84D3> <84CA> <84BF> <84BA> <84E0> <84A1> <84B9> <84B4> <8497> <84E5> <84E3> <850C> <750D> <8538> <84F0> <8539> <851F> <853A> <8F45> <8F6A> <8F80> <8F8C> <8F92> <8F9D> <8FA0> <8FA4> <8FAA> <8FAC> <8FB2> <8FB7> <8FBA> <8FBF> <8FC3> <8FC6> <8FC9> <8FCF> <8FD2> <8FD6> <8FDA> <8FE0> <8FE3> <8FE7> <8FEC> <8FEF> <8FF1> <8FF4> endbfrange 100 beginbfrange <8FFA> <8FFE> <9007> <900C> <900E> <9013> <9015> <9018> <8556> <853B> <84FF> <84FC> <8559> <8548> <8568> <8564> <855E> <857A> <77A2> <8543> <8572> <857B> <85A4> <85A8> <8587> <858F> <8579> <85AE> <859C> <8585> <85B9> <85B7> <85B0> <85D3> <85C1> <85DC> <85FF> <8627> <8605> <8629> <8616> <863C> <5EFE> <5F08> <593C> <5941> <8037> <5955> <595A> <5958> <530F> <5C22> <5C25> <5C2C> <5C34> <624C> <626A> <629F> <62BB> <62CA> <62DA> <62D7> <62EE> <6322> <62F6> <6339> <634B> <6343> <63AD> <63F6> <6371> <637A> <638E> <63B4> <636D> <63AC> <638A> <6369> <63AE> <63BC> <63F2> <63F8> <63E0> <63FF> <63C4> <63DE> <63CE> <6452> <63C6> <63BE> <6445> <6441> <640B> <641B> <6420> <640C> <6426> <6421> <645E> <6484> endbfrange 100 beginbfrange <646D> <6496> <9019> <901C> <9023> <9027> <9030> <9037> <9039> <903D> <903F> <9043> <9045> <9048> <904E> <9054> <9059> <905C> <9064> <9066> <9069> <906F> <9076> <907E> <9081> <9084> <9089> <908C> <9092> <9094> <9096> <9098> <909A> <909C> <909E> <90A4> <90A7> <90AB> <90AD> <90B2> <90B7> <90BC> <90BF> <647A> <64B7> <6499> <64BA> <64C0> <64D0> <64D7> <64E4> <64E2> <6509> <6525> <652E> <5F0B> <5FD2> <7519> <5F11> <535F> <53F1> <53FD> <53E9> <53E8> <53FB> <5412> <5416> <5406> <544B> <5452> <5456> <5443> <5421> <5457> <5459> <5423> <5432> <5482> <5494> <5477> <5471> <5464> <549A> <5484> <5476> <5466> <549D> <54D0> <54AD> <54C2> <54B4> <54D2> <54A7> <54A6> <54D3> <5472> <54A3> <54D5> <54BB> <54BF> endbfrange 100 beginbfrange <54CC> <54D9> <54DC> <54A9> <54A4> <54DD> <54CF> <54DE> <551B> <54E7> <5520> <54FD> <5514> <54F3> <5522> <550F> <5511> <5527> <552A> <5567> <558F> <55B5> <5549> <556D> <5541> <5555> <553F> <5550> <553C> <90C2> <90C6> <90C8> <90CB> <90D2> <90D4> <90D8> <90DE> <90E3> <90E9> <90EC> <90EE> <90F0> <90F5> <90F9> <90FF> <9103> <9105> <911A> <911D> <911F> <9124> <9130> <9132> <913A> <9144> <5537> <5556> <5575> <5533> <5530> <555C> <558B> <55D2> <5583> <55B1> <55B9> <5588> <5581> <559F> <557E> <55D6> <5591> <557B> <55DF> <55BD> <5594> <5599> <55EA> <55F7> <55C9> <561F> <55D1> <55EB> <55D4> <55E6> <55DD> <55C4> <55EF> <55E5> <55F2> <55CC> <55E8> <55F5> <55E4> <8F94> <561E> <5608> <560C> <5601> <5624> endbfrange 100 beginbfrange <5623> <55FE> <5600> <5627> <562D> <5658> <5639> <5657> <562C> <564D> <5662> <5659> <565C> <564C> <5654> <5686> <5664> <5671> <566B> <567B> <5685> <5693> <56AF> <56D4> <56D7> <56DD> <56E1> <56F5> <56EB> <56F9> <56FF> <5704> <570A> <5709> <571C> <5E0F> <5E19> <5E14> <5E11> <5E31> <5E3B> <9145> <9147> <9151> <9153> <9158> <915B> <915F> <9166> <916B> <916D> <9173> <917A> <9180> <9186> <9188> <918A> <918E> <9193> <919C> <91A4> <91AB> <91B0> <91B6> <91BB> <91BC> <91C8> <91CB> <91D0> <91D2> <91DD> <5E37> <5E44> <5E54> <5E5B> <5E5E> <5E61> <5C8C> <5C7A> <5C8D> <5C90> <5C96> <5C88> <5C98> <5C91> <5C9A> <5C9C> <5CB5> <5CA2> <5CBD> <5CAC> <5CAB> <5CB1> <5CA3> <5CC1> <5CB7> <5CC4> <5CD2> <5CE4> <5CCB> endbfrange 100 beginbfrange <5CE5> <5D02> <5D27> <5D26> <5D2E> <5D24> <5D1E> <5D06> <5D1B> <5D58> <5D3E> <5D34> <5D3D> <5D6C> <5D5B> <5D6F> <5D5D> <5D6B> <5D4B> <5D4A> <5D69> <5D74> <5D82> <5D99> <5D9D> <8C73> <5DB7> <5DC5> <5F73> <5F77> <5F82> <5F87> <5F89> <5F8C> <5F95> <5F99> <5F9C> <5FA8> <5FAD> <5FB5> <5FBC> <8862> <5F61> <72AD> <72B0> <72B4> <72B7> <72C3> <72C1> <72CE> <72CD> <72D2> <72E8> <72EF> <72E9> <72F2> <72F4> <72F7> <7301> <72F3> <7303> <72FA> <91E6> <9225> <72FB> <7317> <7313> <7321> <730A> <731E> <731D> <7315> <7322> <7339> <7325> <732C> <7338> <7331> <7350> <734D> <7357> <7360> <736C> <736F> <737E> <821B> <5925> <98E7> <5924> <5902> <9963> <9967> <9974> <9977> <997D> <9980> <9984> <9987> <998A> <998D> endbfrange 100 beginbfrange <9990> <9993> <5E80> <5E91> <5E8B> <5E96> <5EA5> <5EA0> <5EB9> <5EB5> <5EBE> <5EB3> <8D53> <5ED2> <5ED1> <5EDB> <5EE8> <5EEA> <81BA> <5FC4> <5FC9> <5FD6> <5FCF> <6003> <5FEE> <6004> <5FE1> <5FE4> <5FFE> <6005> <5FEA> <5FED> <5FF8> <6019> <6035> <6026> <601B> <600F> <600D> <6029> <602B> <600A> <603F> <6021> <6078> <607B> <607A> <6042> <9246> <9275> <9286> <928F> <606A> <607D> <6096> <609A> <60AD> <609D> <6083> <6092> <608C> <609B> <60EC> <60BB> <60B1> <60DD> <60D8> <60C6> <60DA> <60B4> <6120> <6126> <6115> <6123> <60F4> <6100> <610E> <612B> <614A> <6175> <61AC> <6194> <61A7> <61B7> <61D4> <61F5> <5FDD> <96B3> <95E9> <95EB> <95F1> <95F3> <95F5> <95FC> <95FE> <9603> <9606> <9608> <960A> <960F> endbfrange 100 beginbfrange <9612> <9615> <9619> <4E2C> <723F> <6215> <6C35> <6C54> <6C5C> <6C4A> <6CA3> <6C85> <6C90> <6C94> <6C8C> <6C68> <6C74> <6C76> <6C86> <6CA9> <6CD0> <6CD4> <6CAD> <6CF7> <6CF1> <6CD7> <6CB2> <6CE0> <6CD6> <6CFA> <6CEB> <6CEE> <6CB1> <6CD3> <6CEF> <6CFE> <92A8> <92AF> <92C9> <92E9> <6D39> <6D27> <6D0C> <6D43> <6D48> <6D07> <6D04> <6D19> <6D0E> <6D2B> <6D4D> <6D2E> <6D35> <6D1A> <6D4F> <6D52> <6D54> <6D33> <6D91> <6D6F> <6D9E> <6DA0> <6D5E> <6D93> <6D5C> <6D60> <6D7C> <6D63> <6E1A> <6DC7> <6DC5> <6DDE> <6E0E> <6DBF> <6DE0> <6E11> <6DE6> <6DDD> <6DD9> <6E16> <6DAB> <6E0C> <6DAE> <6E2B> <6E6E> <6E4E> <6E6B> <6EB2> <6E5F> <6E86> <6E53> <6E32> <6E25> <6E44> <6EDF> <6EB1> <6E98> <6EE0> <6F2D> <6EE2> endbfrange 100 beginbfrange <6EA5> <6EA7> <6EBD> <6EBB> <6EB7> <6ED7> <6EB4> <6ECF> <6E8F> <6EC2> <6E9F> <6F62> <6F46> <6F24> <6F15> <6EF9> <6F2F> <6F36> <6F4B> <6F74> <6F2A> <6F09> <6F29> <6F89> <6F8D> <6F8C> <6F78> <6F72> <6F7C> <6F7A> <6FD1> <930A> <933F> <934A> <936B> <6FC9> <6FA7> <6FB9> <6FB6> <6FC2> <6FE1> <6FEE> <6FDE> <6FE0> <6FEF> <701A> <7023> <701B> <7039> <7035> <704F> <705E> <5B80> <5B84> <5B95> <5B93> <5BA5> <5BB8> <752F> <9A9E> <6434> <5BE4> <5BEE> <8930> <5BF0> <8E47> <8B07> <8FB6> <8FD3> <8FD5> <8FE5> <8FEE> <8FE4> <8FE9> <8FE6> <8FF3> <8FE8> <9005> <9004> <900B> <9026> <9011> <900D> <9016> <9021> <9035> <902D> <902F> <9044> <9051> <9050> <9068> <9058> <9062> <905B> <66B9> <9074> <907D> <9082> <9088> endbfrange 100 beginbfrange <9083> <908B> <5F50> <5F57> <5F56> <5F58> <5C3B> <54AB> <5C50> <5C59> <5B71> <5C63> <5C66> <7FBC> <5F2A> <5F29> <5F2D> <8274> <5F3C> <9B3B> <5C6E> <5981> <5983> <598D> <59A9> <59A3> <936C> <9390> <93AC> <93CB> <5997> <59CA> <59AB> <599E> <59A4> <59D2> <59B2> <59AF> <59D7> <59BE> <5A05> <59DD> <5A08> <59E3> <59D8> <59F9> <5A0C> <5A09> <5A32> <5A34> <5A11> <5A23> <5A13> <5A40> <5A67> <5A4A> <5A55> <5A3C> <5A62> <5A75> <80EC> <5AAA> <5A9B> <5A77> <5A7A> <5ABE> <5AEB> <5AB2> <5AD2> <5AD4> <5AB8> <5AE0> <5AE3> <5AF1> <5AD6> <5AE6> <5AD8> <5ADC> <5B09> <5B17> <5B16> <5B32> <5B37> <5B40> <5C15> <5C1C> <5B5A> <5B65> <5B73> <5B51> <5B53> <5B62> <9A75> <9A77> <9A7A> <9A7F> <9A7D> <9A80> <9A85> <9A88> endbfrange 100 beginbfrange <9A8A> <9A90> <9A92> <9A96> <9A98> <9A9B> <9A9F> <9AA2> <9AA5> <9AA7> <7E9F> <7EA1> <7EA3> <7EA5> <7EA8> <93CE> <93D7> <940E> <7EAD> <7EB0> <7EBE> <7EC0> <7EC9> <7ECB> <7ED0> <7ED4> <7ED7> <7EDB> <7EE0> <7EE8> <7EEB> <7EEE> <7EF1> <7F0D> <7EF6> <7EFA> <7EFE> <7F01> <7F07> <7F0B> <7F0F> <7F11> <7F17> <7F19> <7F1C> <7F1B> <7F1F> <7F21> <7F2A> <7F2F> <7F35> <5E7A> <757F> <5DDB> <753E> <9095> <738E> <7391> <73AE> <73A2> <739F> <73CF> <73C2> <73D1> <73B7> <73B3> <73C0> <73C9> <73C8> <73E5> <73D9> <987C> <740A> <73E9> <73E7> <73DE> <73BA> <73F2> <740F> <742A> <745B> <7426> <7425> <7428> <7430> <742E> <742C> <942F> <943F> <946C> <9470> <9491> <9496> <9498> <94C7> <94CF> <94D3> <94DA> <94E6> <94FB> endbfrange 100 beginbfrange <951C> <9520> <741B> <741A> <7441> <745C> <7457> <7455> <7459> <7477> <746D> <747E> <749C> <748E> <7480> <7487> <748B> <749E> <74A8> <7490> <74A7> <74D2> <74BA> <97EA> <674C> <6753> <675E> <6748> <6769> <67A5> <6787> <676A> <6773> <6798> <67A7> <6775> <67A8> <679E> <67AD> <678B> <6777> <677C> <67F0> <6809> <67D8> <680A> <67E9> <67B0> <680C> <67D9> <67B5> <67DA> <67B3> <67DD> <6800> <67C3> <67B8> <67E2> <680E> <67C1> <67FD> <6832> <6860> <684E> <6862> <6844> <6864> <6883> <681D> <6855> <6866> <6841> <6867> <6840> <683E> <684A> <6849> <6829> <68B5> <688F> <6874> <6877> <6893> <686B> <68C2> <696E> <68FC> <691F> <68F9> <9527> <9533> <953D> <9543> <9548> <954B> <9555> <955A> <9560> <956E> <9574> endbfrange 100 beginbfrange <9577> <9580> <95AB> <6924> <68F0> <690B> <6901> <6957> <68E3> <6910> <6971> <6939> <6960> <6942> <695D> <6984> <696B> <6980> <6998> <6978> <6934> <69CC> <6987> <69CE> <6989> <6966> <6963> <6979> <699B> <69A7> <69BB> <69AB> <69AD> <69D4> <69B1> <69C1> <69CA> <69DF> <6995> <69E0> <698D> <69FF> <6A2F> <69ED> <6A17> <6A65> <69F2> <6A44> <6A3E> <6AA0> <6A50> <6A5B> <6A35> <6A8E> <6A79> <6A3D> <6A28> <6A58> <6A7C> <6A91> <6A90> <6AA9> <6A97> <6AAB> <7337> <7352> <6B81> <6B87> <6B84> <6B92> <6B8D> <6B9A> <6BA1> <6BAA> <8F6B> <8F6D> <8F71> <8F75> <8F78> <8F77> <8F79> <8F7C> <8F7E> <8F81> <8F84> <8F87> <8F8B> <95CC> <95EC> <95FF> <9607> <9613> <9618> <961B> <961E> <9620> <9623> <962B> <962F> <9637> endbfrange 100 beginbfrange <963E> <9641> <9643> <964A> <964E> <9651> <9656> <9658> <965C> <9660> <9663> <9665> <966B> <966D> <9673> <9678> <9687> <9689> <8F8D> <8F98> <8F9A> <8ECE> <620B> <6217> <621B> <621F> <6222> <6221> <6225> <6224> <622C> <81E7> <74EF> <74F4> <74FF> <750F> <7511> <7513> <6534> <65EE> <660A> <6619> <6772> <6603> <6615> <6600> <7085> <66F7> <661D> <6634> <6631> <6636> <6635> <8006> <665F> <6654> <6641> <664F> <6656> <6661> <6657> <6677> <6684> <668C> <66A7> <669D> <66BE> <66DB> <66E6> <66E9> <8D32> <8D36> <8D3B> <8D3D> <8D40> <8D45> <8D48> <8D47> <8D4D> <8D55> <8D59> <89C7> <89CA> <89CE> <726E> <729F> <725D> <7266> <726F> <727E> <7284> <728B> <728D> <728F> <7292> <6308> <6332> <63B0> <968C> <968E> endbfrange 100 beginbfrange <9691> <9695> <969A> <969D> <96A8> <96B1> <96B4> <96B7> <96BA> <96BF> <96C2> <96C8> <96CA> <96D0> <96D3> <96D6> <96E1> <96EB> <96EC> <96F0> <96F4> <96F8> <96FA> <96FF> <9702> <9705> <970A> <9710> <9714> <9717> <971D> <971F> <643F> <64D8> <8004> <6BEA> <6BF3> <6BFD> <6BF5> <6BF9> <6C05> <6C07> <6C06> <6C0D> <6C15> <6C18> <6C21> <6C29> <6C24> <6C2A> <6C32> <6535> <6555> <656B> <724D> <7252> <7256> <7230> <8662> <5216> <809F> <809C> <8093> <80BC> <670A> <80BD> <80B1> <80AB> <80AD> <80B4> <80B7> <80E7> <80DB> <80C2> <80C4> <80D9> <80CD> <80D7> <6710> <80DD> <80EB> <80F1> <80F4> <80ED> <810D> <80F2> <80FC> <6715> <8112> <8C5A> <8136> <811E> <812C> <8118> <8132> <8148> <814C> <8153> <8174> <8159> endbfrange 100 beginbfrange <8171> <8160> <8169> <817C> <816D> <8167> <584D> <5AB5> <8188> <8182> <8191> <6ED5> <81A3> <81AA> <81CC> <6726> <81CA> <81BB> <9721> <972B> <972E> <9731> <9733> <973A> <973F> <9754> <9757> <975A> <975C> <975F> <9763> <9766> <976A> <9772> <9775> <9777> <977D> <9786> <978C> <978E> <9793> <9795> <9799> <81C1> <81A6> <6B24> <6B37> <6B39> <6B43> <6B46> <6B59> <98D1> <98D5> <98D9> <6BB3> <5F40> <6BC2> <89F3> <6590> <9F51> <6593> <65BC> <65C6> <65C4> <65C3> <65CC> <65CE> <65D2> <65D6> <7080> <709C> <7096> <709D> <70BB> <70C0> <70B7> <70AB> <70B1> <70E8> <70CA> <7110> <7113> <7116> <712F> <7131> <7173> <715C> <7168> <7145> <7172> <714A> <7178> <717A> <7198> <71B3> <71B5> <71A8> <71A0> <71E0> <71D4> endbfrange 100 beginbfrange <71E7> <71F9> <721D> <7228> <706C> <7118> <7166> <71B9> <623E> <623D> <6243> <6248> <793B> <7940> <7946> <7949> <795B> <7953> <795A> <7962> <7957> <7960> <796F> <7967> <797A> <7985> <798A> <799A> <79A7> <79B3> <5FD1> <5FD0> <979E> <97A1> <97A4> <97AC> <97AE> <97B0> <97B3> <97B5> <97E4> <97E8> <97EE> <97F4> <97F7> <603C> <605D> <605A> <6067> <6041> <6059> <6063> <60AB> <6106> <610D> <615D> <61A9> <619D> <61CB> <61D1> <6206> <8080> <807F> <6C93> <6CF6> <6DFC> <77F6> <77F8> <7800> <7809> <7817> <7811> <65AB> <782D> <781C> <7839> <781F> <783C> <7825> <782C> <7823> <7829> <784E> <786D> <7856> <7826> <7850> <7847> <784C> <786A> <789B> <7893> <789A> <7887> <789C> <78A1> <78A3> <78B2> <78B9> <78A5> endbfrange 100 beginbfrange <78D4> <78D9> <78C9> <78EC> <78F2> <7905> <78F4> <7913> <7924> <791E> <7934> <9F9B> <9EF9> <9EFB> <76F1> <7704> <770D> <76F9> <7707> <771A> <7722> <7719> <772D> <7726> <7735> <7738> <7750> <7747> <7743> <775A> <7768> <980F> <984E> <7762> <7765> <777F> <778D> <777D> <7780> <778C> <7791> <779F> <77B0> <77B5> <77BD> <753A> <7540> <754E> <754B> <7548> <755B> <7572> <7579> <7583> <7F58> <7F61> <7F5F> <8A48> <7F68> <7F74> <7F71> <7F79> <7F81> <7F7E> <76CD> <76E5> <8832> <9485> <948B> <948A> <948C> <948F> <9494> <9497> <9495> <949A> <94A3> <94AB> <94AA> <94AD> <94AC> <94AF> <94B2> <94B4> <94B6> <94BC> <94BF> <94C4> <94C8> <94D0> <94D5> <94D9> <94D8> <94DB> <94DE> <94E2> <94E4> <94E7> <94EA> <986F> endbfrange 100 beginbfrange <988B> <988E> <9892> <9895> <9899> <98A3> <98A8> <98CF> <98D4> <98D6> <98DB> <98E0> <98E5> <98E9> <94E9> <94EB> <94EE> <94F3> <94F7> <94F9> <94FC> <94FF> <9503> <9502> <9506> <9509> <950D> <9512> <9518> <951B> <951D> <9522> <952A> <9529> <952C> <9531> <9534> <9536> <953C> <953E> <9542> <9535> <9544> <9549> <954C> <954E> <9552> <9556> <955B> <955E> <955D> <9561> <9564> <956F> <9571> <953A> <77E7> <77EC> <96C9> <79D5> <79ED> <79E3> <79EB> <7A06> <5D47> <7A03> <7A02> <7A1E> <7A14> <9908> <990E> <9911> <992F> <994A> <9956> <9964> <9966> <9973> <9978> <997B> <997E> <9982> <9989> <7A39> <7A37> <7A51> <9ECF> <99A5> <7A70> <7688> <768E> <7693> <7699> <76A4> <74DE> <74E0> <752C> <9E20> <9E22> <9E28> endbfrange 100 beginbfrange <9E32> <9E31> <9E36> <9E38> <9E37> <9E39> <9E3E> <9E41> <9E44> <9E46> <9E4B> <9E4E> <9E51> <9E55> <9E57> <9E5A> <9E5E> <9E63> <9E66> <9E71> <9E6D> <9E73> <7592> <7594> <7596> <75A0> <759D> <75AC> <75A3> <75B3> <75B8> <75C4> <75B1> <75B0> <75C3> <75C2> <75D6> <75CD> <75E3> <75E8> <75E6> <75E4> <75EB> <75E7> <7603> <75F1> <75FC> <75FF> <7610> <7600> <7605> <760C> <7617> <760A> <7625> <7618> <7615> <7619> <998C> <998E> <999A> <99A6> <99A9> <99D9> <761B> <763C> <7622> <7620> <7640> <762D> <7630> <763F> <7635> <7643> <763E> <7633> <764D> <765E> <7654> <765C> <7656> <766B> <766F> <7FCA> <7AE6> <7A78> <7A80> <7A86> <7A88> <7A95> <7AA6> <7AA0> <7AAC> <7AA8> <7AAD> <7AB3> <8864> <8869> <8872> <887D> endbfrange 100 beginbfrange <887F> <8882> <88A2> <88C6> <88B7> <88BC> <88C9> <88E2> <88CE> <88E3> <88E5> <88F1> <891A> <88FC> <88E8> <88FE> <88F0> <8921> <8919> <8913> <891B> <890A> <8934> <892B> <8936> <8941> <8966> <897B> <758B> <80E5> <76B2> <76B4> <77DC> <8012> <8014> <8016> <801C> <8020> <8022> <8025> <8029> <8028> <8031> <800B> <8035> <8043> <8046> <804D> <8052> <8069> <8071> <8983> <9878> <9880> <9883> <99FA> <9A39> <9889> <988C> <988F> <9894> <989A> <989E> <98A1> <98A5> <864D> <8654> <866C> <866E> <867F> <867A> <867C> <867B> <86A8> <868D> <868B> <86AC> <869D> <86A7> <86A3> <86AA> <8693> <86A9> <86B6> <86C4> <86B5> <86CE> <86B0> <86BA> <86B1> <86AF> <86C9> <86CF> <86B4> <86E9> <86F1> <86ED> <86F3> <86D0> <8713> endbfrange 100 beginbfrange <86DE> <86F4> <86DF> <86D8> <86D1> <8703> <8707> <86F8> <8708> <870A> <870D> <8709> <8723> <873B> <871E> <8725> <872E> <871A> <873E> <8748> <8734> <8731> <8729> <8737> <873F> <8782> <8722> <877D> <877B> <8760> <8770> <874C> <876E> <878B> <8753> <8763> <877C> <8764> <8759> <8765> <8793> <87AF> <87A8> <87D2> <9A5A> <9A72> <9A83> <9A89> <9A8D> <9A94> <9A99> <9AA6> <9AA9> <9AB2> <9AB9> <9ABB> <9ABD> <9AC3> <9AC6> <9ACD> <9AD2> <9AD4> <9AD9> <9ADD> <9AE0> <9AE2> <9AE7> <9AEC> <9AEE> <9AF0> <9AFA> <9AFC> <9B04> <87C6> <8788> <8785> <87AD> <8797> <8783> <87AB> <87E5> <87AC> <87B5> <87B3> <87CB> <87D3> <87BD> <87D1> <87C0> <87CA> <87DB> <87EA> <87E0> <87EE> <8816> <8813> <87FE> <880A> <881B> <8821> endbfrange 100 beginbfrange <8839> <883C> <7F36> <7F42> <7F44> <8210> <7AFA> <7AFD> <7B08> <7B03> <7B15> <7B0A> <7B2B> <7B0F> <7B47> <7B38> <7B2A> <7B19> <7B2E> <7B31> <7B20> <7B25> <7B24> <7B33> <7B3E> <7B1E> <7B58> <7B5A> <7B45> <7B75> <7B4C> <7B5D> <7B60> <7B6E> <7B7B> <7B62> <7B72> <7B71> <7B90> <7BA6> <7BB8> <7BAC> <7B9D> <7BA8> <7B85> <7BAA> <7B9C> <7BA2> <7BAB> <7BB4> <7BD1> <7BC1> <7BCC> <7BDD> <7BDA> <7BE5> <7BEA> <7C0C> <7BFE> <7BFC> <7C0F> <7C16> <7C0B> <9B07> <9B09> <9B10> <9B14> <9B20> <9B24> <9B30> <9B33> <9B3D> <9B46> <9B4A> <9B4E> <9B50> <9B52> <9B55> <9B5B> <7C1F> <7C2A> <7C26> <7C38> <7C41> <7C40> <81FE> <8201> <8204> <81EC> <8844> <8221> <822D> <822F> <8228> <822B> <8238> <823B> <8233> <823E> <8244> endbfrange 100 beginbfrange <8249> <824B> <824F> <825A> <825F> <8268> <887E> <8885> <8888> <88D8> <88DF> <895E> <7F9D> <7F9F> <7FA7> <7FAF> <7FB2> <7C7C> <6549> <7C91> <7C9D> <7C9C> <7C9E> <7CA2> <7CB2> <7CBC> <7CC1> <7CC7> <7CCC> <7CC8> <7CC5> <7CD7> <7CE8> <826E> <66A8> <7FBF> <7FCE> <7FD5> <7FE5> <7FE1> <7FE6> <7FE9> <7FEE> <7FF3> <7CF8> <7D77> <7DA6> <7DAE> <7E47> <7E9B> <9EB8> <9EB4> <8D73> <8D84> <8D94> <8D91> <8DB1> <8D67> <8D6D> <8C47> <8C49> <914A> <9150> <914E> <9164> <9B7C> <9BBB> <9162> <9161> <9170> <9169> <916F> <917D> <9172> <9174> <9179> <918C> <9185> <9190> <918D> <9191> <91A2> <91AA> <91AD> <91B5> <91B4> <91BA> <8C55> <9E7E> <8DB8> <8DEB> <8E05> <8E59> <8E69> <8DB5> <8DBF> <8DBC> <8DBA> <8DC4> <8DD6> endbfrange 100 beginbfrange <8DDA> <8DDE> <8DCE> <8DDB> <8DC6> <8DEC> <8DF7> <8DE3> <8DF9> <8DFB> <8DE4> <8E09> <8DFD> <8E14> <8E1D> <8E1F> <8E2C> <8E2E> <8E23> <8E2F> <8E3A> <8E40> <8E39> <8E35> <8E3D> <8E31> <8E49> <8E41> <8E51> <8E4A> <8E70> <8E76> <8E7C> <8E6F> <8E74> <8E85> <8E8F> <8E94> <8E90> <8E9C> <8E9E> <8C78> <8C82> <8C8A> <8C85> <8C98> <8C94> <659B> <89D6> <89DE> <89DA> <89DC> <9BDC> <9C1B> <89E5> <89EB> <89EF> <8A3E> <8B26> <9753> <96E9> <96F3> <96EF> <9706> <9701> <9708> <970F> <970E> <972A> <972D> <9730> <973E> <9F80> <9F83> <9F85> <9F8C> <9EFE> <9F0B> <9F0D> <96B9> <96BC> <96CE> <96D2> <77BF> <96E0> <928E> <92AE> <92C8> <933E> <936A> <93CA> <938F> <943E> <946B> <9C7F> <9C82> <9C85> <7A23> <9C8B> <9C8E> endbfrange 100 beginbfrange <9C90> <9C94> <9C9A> <9C9E> <9CA5> <9CAB> <9CAD> <9CB0> <9CBA> <9CC4> <9CCA> <9C3C> <9C7B> <9C7D> <9C80> <9C83> <9C89> <9C8C> <9C8F> <9C93> <9C96> <9C9D> <9CAA> <9CAC> <9CAF> <9CB9> <9CBE> <9CC8> <9CD1> <9CDA> <9CE0> <9CCC> <9CD3> <9CD7> <9CDC> <9CDF> <9CE2> <977C> <9785> <9791> <9794> <97AF> <97AB> <97A3> <97B2> <97B4> <9AB1> <9AB0> <9AB7> <9E58> <9AB6> <9ABA> <9ABC> <9AC1> <9AC0> <9AC5> <9AC2> <9ACB> <9AD1> <9B45> <9B43> <9B47> <9B49> <9B48> <9B4D> <9B51> <98E8> <990D> <992E> <9955> <9954> <9ADF> <9AE1> <9AE6> <9AEF> <9AEB> <9AFB> <9AED> <9AF9> <9B08> <9B0F> <9B13> <9B1F> <9B23> <9EBD> <7E3B> <9E82> <9E87> <9E8B> <9E92> <93D6> <9E9D> <9E9F> <9EDB> <9EE0> <9EDF> <9EE2> <9EE9> <9EE7> <9EE5> endbfrange 100 beginbfrange <9EEA> <9EEF> <9F22> <9F2C> <9F2F> <9F39> <9F37> <9F3D> <9F44> <9CE3> <9D22> <9D43> <9D82> <9DA3> <9DE2> <9E03> <9E24> <9E27> <9E2E> <9E30> <9E34> <9E3B> <9E40> <9E4D> <9E50> <9E52> <9E56> <9E59> <9E5D> <9E5F> <9E65> <9E6E> <9E72> <9E74> <9E80> <9E81> <9E83> <9E89> <9E8C> <9E94> <9E9E> <9EA0> <9EA7> <9EAB> <9EB5> <9EB9> <9EBC> <9EBF> <9EC5> <9ECA> <9ED0> <9ED2> <9ED5> <9ED9> <9EDE> <9EE1> <9EE3> <9EE6> <9EE8> <9EEB> <9EF0> <9EFA> <9EFD> <9EFF> <9F06> <9F0C> <9F0F> <9F11> <9F14> <9F18> <9F1A> <9F21> <9F23> <9F2D> <9F30> <9F32> <9F38> <9F3A> <9F3C> <9F3F> <9F45> <9F52> <9F79> <9F81> <9F8D> <9F9C> <9FA1> endbfrange 8 beginbfrange endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBK-EUC-V b/Resources/cmap/GBK-EUC-V deleted file mode 100644 index 881cdba8d3a..00000000000 --- a/Resources/cmap/GBK-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GBK-EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GBK-EUC-H) %%BeginResource: CMap (GBK-EUC-V) %%Title: (GBK-EUC-V Adobe GB1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GBK-EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 1 def end def /CMapName /GBK-EUC-V def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25378] def /WMode 1 def 20 begincidrange 575 574 598 7704 599 582 7706 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7711 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBK2K-H b/Resources/cmap/GBK2K-H deleted file mode 100644 index 81ff8fda3ff..00000000000 --- a/Resources/cmap/GBK2K-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBK2K-H) %%Title: (GBK2K-H Adobe GB1 4) %%Version: 1.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 4 def end def /CMapName /GBK2K-H def /CMapVersion 1.001 def /CMapType 1 def /XUID [1 10 25459] def /WMode 0 def 37 begincodespacerange <00> <7F> <81308130> <8130FE39> <81318130> <8131FE39> <81328130> <8132FE39> <81338130> <8133FE39> <81348130> <8134FE39> <81358130> <8135FE39> <81368130> <8136FE39> <81378130> <8137FE39> <81388130> <8138FE39> <81398130> <8139FE39> <8140> <81FE> <82308130> <8230FE39> <82318130> <8231FE39> <82328130> <8232FE39> <82338130> <8233FE39> <82348130> <8234FE39> <82358130> <8235FE39> <82368130> <8236FE39> <82378130> <8237FE39> <82388130> <8238FE39> <82398130> <8239FE39> <8240> <82FE> <83308130> <8330FE39> <83318130> <8331FE39> <83328130> <8332FE39> <83338130> <8333FE39> <83348130> <8334FE39> <83358130> <8335FE39> <83368130> <8336FE39> <83378130> <8337FE39> <83388130> <8338FE39> <83398130> <8339FE39> <8340> <83FE> <84308130> <8430FE39> <84318130> <8431A439> <8440> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <81308436> <81308436> 22354 <8138fd38> <8138fd39> 22428 <8138fe30> <8138fe39> 22430 <81398130> <81398137> 22440 <81398139> <81398139> 22448 <81398230> <81398239> 22449 <81398330> <81398339> 22459 <81398430> <81398439> 22469 <81398530> <81398539> 22479 <81398630> <81398639> 22489 <81398730> <81398739> 22499 <81398830> <81398839> 22509 <81398930> <81398939> 22519 <81398b32> <81398b32> 4162 <81398b33> <81398b33> 4707 <81398b34> <81398b34> 4722 <81398b35> <81398b35> 4709 <81398b36> <81398b36> 4185 <81398b37> <81398b37> 10131 <81398b38> <81398b38> 1597 <81398b39> <81398b39> 4867 <81398c30> <81398c30> 3238 <81398c31> <81398c31> 1592 <81398c32> <81398c32> 3270 <81398c33> <81398c33> 982 <81398c34> <81398c34> 4765 <81398c35> <81398c35> 4884 <81398c36> <81398c36> 4879 <81398c37> <81398c37> 2091 <81398c38> <81398c38> 5017 <81398c39> <81398c39> 1431 <81398d30> <81398d30> 2543 <81398d31> <81398d31> 4860 <81398d32> <81398d32> 4710 <81398d33> <81398d33> 4740 <81398d34> <81398d34> 10778 <81398d35> <81398d35> 3397 <81398d36> <81398d36> 1150 <81398d37> <81398d37> 4946 <81398d38> <81398d38> 1228 <81398d39> <81398d39> 5020 <81398e30> <81398e30> 4283 <81398e31> <81398e31> 2407 <81398e32> <81398e32> 5523 <81398e33> <81398e33> 3698 <81398e34> <81398e34> 3414 <81398e35> <81398e35> 5660 <81398e36> <81398e36> 11565 <81398e37> <81398e37> 3859 <81398e38> <81398e38> 1398 <81398e39> <81398e39> 2927 <81398f30> <81398f30> 4656 <81398f31> <81398f31> 5934 <81398f32> <81398f32> 1386 <81398f33> <81398f33> 3948 <81398f34> <81398f34> 5302 <81398f35> <81398f35> 3395 <81398f36> <81398f36> 6004 <81398f37> <81398f37> 3318 <81398f38> <81398f38> 6165 <81398f39> <81398f39> 1789 <81399030> <81399030> 2093 <81399031> <81399031> 2238 <81399032> <81399032> 1732 <81399033> <81399033> 6163 <81399034> <81399034> 1852 <81399035> <81399035> 5016 <81399036> <81399036> 5293 <81399037> <81399037> 5366 <81399038> <81399038> 1798 <81399039> <81399039> 5986 <81399130> <81399130> 5614 <81399131> <81399131> 5600 <81399132> <81399132> 3983 <81399133> <81399133> 1765 <81399134> <81399134> 12946 <81399135> <81399135> 3437 <81399136> <81399136> 4518 <81399137> <81399137> 6409 <81399138> <81399138> 3795 <81399139> <81399139> 1526 <81399230> <81399230> 2240 <81399231> <81399231> 1626 <81399232> <81399232> 3821 <81399233> <81399233> 3248 <81399234> <81399234> 4350 <81399235> <81399235> 4357 <81399236> <81399236> 2849 <81399237> <81399237> 3124 <81399238> <81399238> 4536 <81399239> <81399239> 1400 <81399330> <81399330> 6589 <81399331> <81399331> 3826 <81399332> <81399332> 1073 <81399333> <81399333> 2736 <81399334> <81399334> 3430 <81399335> <81399335> 3095 <81399336> <81399336> 3491 <81399337> <81399337> 2053 endcidrange 100 begincidrange <81399338> <81399338> 4611 <81399339> <81399339> 1715 <81399430> <81399430> 4713 <81399431> <81399431> 5789 <81399432> <81399432> 3019 <81399433> <81399433> 4073 <81399434> <81399434> 2916 <81399435> <81399435> 3209 <81399436> <81399436> 4041 <81399437> <81399437> 4310 <81399438> <81399438> 1832 <81399439> <81399439> 3728 <81399530> <81399530> 1733 <81399531> <81399531> 3379 <81399532> <81399532> 4264 <81399533> <81399533> 3650 <81399534> <81399534> 7110 <81399535> <81399535> 7008 <81399536> <81399536> 16063 <81399537> <81399537> 994 <81399538> <81399538> 3011 <81399539> <81399539> 2808 <81399630> <81399630> 2850 <81399631> <81399631> 2737 <81399632> <81399632> 3407 <81399633> <81399633> 3398 <81399634> <81399634> 3413 <81399635> <81399635> 16587 <81399636> <81399636> 1923 <81399637> <81399637> 4049 <81399638> <81399638> 2539 <81399639> <81399639> 4592 <81399730> <81399730> 2780 <81399731> <81399731> 7399 <81399732> <81399732> 7262 <81399733> <81399733> 3753 <81399734> <81399734> 4123 <81399735> <81399735> 4309 <81399736> <81399736> 2490 <81399737> <81399737> 1591 <81399738> <81399738> 7115 <81399739> <81399739> 1593 <81399830> <81399830> 6686 <81399831> <81399831> 3261 <81399832> <81399832> 1249 <81399833> <81399833> 4657 <81399834> <81399834> 4544 <81399835> <81399835> 2297 <81399836> <81399836> 3353 <81399837> <81399837> 5656 <81399838> <81399838> 4570 <81399839> <81399839> 7388 <81399930> <81399930> 3300 <81399931> <81399931> 17826 <81399932> <81399932> 7152 <81399933> <81399933> 1291 <81399934> <81399934> 4051 <81399935> <81399935> 3995 <81399936> <81399936> 4169 <81399937> <81399937> 18908 <81399938> <81399938> 8086 <81399939> <81399939> 2200 <81399a30> <81399a30> 4093 <81399a31> <81399a31> 1825 <81399a32> <81399a32> 1528 <81399a33> <81399a33> 7445 <81399a34> <81399a34> 7504 <81399a35> <81399a35> 7739 <81399a36> <81399a36> 1285 <81399a37> <81399a37> 4668 <81399a38> <81399a38> 4672 <81399a39> <81399a39> 3366 <81399b30> <81399b30> 7803 <81399b31> <81399b31> 3980 <81399b32> <81399b32> 1250 <81399b33> <81399b33> 19731 <81399b34> <81399b34> 4191 <81399b35> <81399b35> 4276 <81399b36> <81399b36> 19992 <81399b37> <81399b37> 2522 <81399b38> <81399b38> 2241 <81399b39> <81399b39> 7797 <81399c30> <81399c30> 8317 <81399c31> <81399c31> 1714 <81399c32> <81399c32> 2542 <81399c33> <81399c33> 7545 <81399c34> <81399c34> 4303 <81399c35> <81399c35> 20714 <81399c36> <81399c36> 1636 <81399c37> <81399c37> 2795 <81399c38> <81399c38> 1770 <81399c39> <81399c39> 8589 <81399d30> <81399d30> 2289 <81399d31> <81399d31> 4219 <81399d32> <81399d32> 8713 <81399d33> <81399d33> 7936 <81399d34> <81399d34> 7924 <81399d35> <81399d35> 3402 <81399d36> <81399d36> 3438 <81399d37> <81399d37> 3920 endcidrange 100 begincidrange <81399d38> <81399d38> 8301 <81399d39> <81399d39> 1824 <81399e30> <81399e30> 1754 <81399e31> <81399e31> 7660 <81399e32> <81399e32> 7888 <81399e33> <81399e33> 5019 <81399e34> <81399e34> 4704 <81399e35> <81399e35> 1862 <81399e36> <81399e36> 8761 <81399e37> <81399e37> 8348 <81399e38> <81399e38> 9864 <81399e39> <81399e39> 2656 <81399f30> <81399f30> 8305 <81399f31> <81399f31> 2704 <81399f32> <81399f32> 21894 <81399f33> <81399f33> 3465 <81399f34> <81399f34> 1937 <81399f35> <81399f35> 6741 <81399f36> <81399f36> 9752 <81399f37> <81399f37> 1509 <81399f38> <81399f38> 1821 <81399f39> <81399f39> 3466 <8139a030> <8139a030> 1072 <8139a031> <8139a031> 8390 <8139a032> <8139a032> 7814 <8139a033> <8139a033> 8247 <8139a034> <8139a034> 7988 <8139a035> <8139a035> 4851 <8139a533> <8139a535> 22395 <8139a538> <8139a539> 22398 <8139a630> <8139a630> 22400 <8139a634> <8139a634> 22357 <8139a636> <8139a636> 22375 <8139a735> <8139a735> 22390 <8139a737> <8139a737> 22391 <8139a736> <8139a736> 22392 <8139a738> <8139a738> 22393 <8139a836> <8139a838> 22401 <8139b434> <8139b439> 22404 <8139b530> <8139b539> 22410 <8139b630> <8139b637> 22420 <8139ee39> <8139ee39> 22529 <8139ef30> <8139ef39> 22530 <8139f030> <8139f039> 22540 <8139f130> <8139f139> 22550 <8139f230> <8139f239> 22560 <8139f330> <8139f339> 22570 <8139f430> <8139f439> 22580 <8139f530> <8139f539> 22590 <8139f630> <8139f639> 22600 <8139f730> <8139f739> 22610 <8139f830> <8139f839> 22620 <8139f930> <8139f939> 22630 <8139fa30> <8139fa39> 22640 <8139fb30> <8139fb39> 22650 <8139fc30> <8139fc39> 22660 <8139fd30> <8139fd39> 22670 <8139fe30> <8139fe39> 22680 <8140> <8178> 10072 <8179> <8179> 8281 <817a> <817e> 10129 <8180> <8185> 10134 <8186> <8186> 8689 <8187> <81ec> 10140 <81ed> <81ed> 8178 <81ee> <81f5> 10242 <81f6> <81f6> 8285 <81f7> <81fe> 10250 <82308130> <82308139> 22690 <82308230> <82308239> 22700 <82308330> <82308339> 22710 <82308430> <82308439> 22720 <82308530> <82308539> 22730 <82308630> <82308639> 22740 <82308730> <82308739> 22750 <82308830> <82308839> 22760 <82308930> <82308939> 22770 <82308a30> <82308a39> 22780 <82308b30> <82308b39> 22790 <82308c30> <82308c39> 22800 <82308d30> <82308d39> 22810 <82308e30> <82308e39> 22820 <82308f30> <82308f39> 22830 <82309030> <82309039> 22840 <82309130> <82309139> 22850 <82309230> <82309239> 22860 <82309330> <82309339> 22870 <82309430> <82309439> 22880 <82309530> <82309539> 22890 <82309630> <82309639> 22900 <82309730> <82309739> 22910 <82309830> <82309839> 22920 <82309930> <82309939> 22930 <82309a30> <82309a39> 22940 <82309b30> <82309b39> 22950 <82309c30> <82309c39> 22960 <82309d30> <82309d39> 22970 <82309e30> <82309e39> 22980 <82309f30> <82309f39> 22990 <8230a030> <8230a039> 23000 endcidrange 100 begincidrange <8230a130> <8230a139> 23010 <8230a230> <8230a239> 23020 <8230a330> <8230a339> 23030 <8230a430> <8230a439> 23040 <8230a530> <8230a539> 23050 <8230a630> <8230a639> 23060 <8230a730> <8230a739> 23070 <8230a830> <8230a839> 23080 <8230a930> <8230a939> 23090 <8230aa30> <8230aa39> 23100 <8230ab30> <8230ab39> 23110 <8230ac30> <8230ac39> 23120 <8230ad30> <8230ad39> 23130 <8230ae30> <8230ae39> 23140 <8230af30> <8230af39> 23150 <8230b030> <8230b039> 23160 <8230b130> <8230b139> 23170 <8230b230> <8230b239> 23180 <8230b330> <8230b339> 23190 <8230b430> <8230b439> 23200 <8230b530> <8230b539> 23210 <8230b630> <8230b639> 23220 <8230b730> <8230b739> 23230 <8230b830> <8230b839> 23240 <8230b930> <8230b939> 23250 <8230ba30> <8230ba39> 23260 <8230bb30> <8230bb39> 23270 <8230bc30> <8230bc39> 23280 <8230bd30> <8230bd39> 23290 <8230be30> <8230be39> 23300 <8230bf30> <8230bf39> 23310 <8230c030> <8230c039> 23320 <8230c130> <8230c139> 23330 <8230c230> <8230c239> 23340 <8230c330> <8230c339> 23350 <8230c430> <8230c439> 23360 <8230c530> <8230c539> 23370 <8230c630> <8230c639> 23380 <8230c730> <8230c739> 23390 <8230c830> <8230c839> 23400 <8230c930> <8230c939> 23410 <8230ca30> <8230ca39> 23420 <8230cb30> <8230cb39> 23430 <8230cc30> <8230cc39> 23440 <8230cd30> <8230cd39> 23450 <8230ce30> <8230ce39> 23460 <8230cf30> <8230cf39> 23470 <8230d030> <8230d039> 23480 <8230d130> <8230d139> 23490 <8230d230> <8230d239> 23500 <8230d330> <8230d339> 23510 <8230d430> <8230d439> 23520 <8230d530> <8230d539> 23530 <8230d630> <8230d639> 23540 <8230d730> <8230d739> 23550 <8230d830> <8230d839> 23560 <8230d930> <8230d939> 23570 <8230da30> <8230da39> 23580 <8230db30> <8230db39> 23590 <8230dc30> <8230dc39> 23600 <8230dd30> <8230dd39> 23610 <8230de30> <8230de39> 23620 <8230df30> <8230df39> 23630 <8230e030> <8230e039> 23640 <8230e130> <8230e139> 23650 <8230e230> <8230e239> 23660 <8230e330> <8230e339> 23670 <8230e430> <8230e439> 23680 <8230e530> <8230e539> 23690 <8230e630> <8230e639> 23700 <8230e730> <8230e739> 23710 <8230e830> <8230e839> 23720 <8230e930> <8230e939> 23730 <8230ea30> <8230ea39> 23740 <8230eb30> <8230eb39> 23750 <8230ec30> <8230ec39> 23760 <8230ed30> <8230ed39> 23770 <8230ee30> <8230ee39> 23780 <8230ef30> <8230ef39> 23790 <8230f030> <8230f039> 23800 <8230f130> <8230f139> 23810 <8230f230> <8230f239> 23820 <8230f330> <8230f339> 23830 <8230f430> <8230f439> 23840 <8230f530> <8230f539> 23850 <8230f630> <8230f639> 23860 <8230f730> <8230f739> 23870 <8230f830> <8230f839> 23880 <8230f930> <8230f939> 23890 <8230fa30> <8230fa39> 23900 <8230fb30> <8230fb39> 23910 <8230fc30> <8230fc39> 23920 <8230fd30> <8230fd39> 23930 <8230fe30> <8230fe39> 23940 <82318130> <82318139> 23950 <82318230> <82318239> 23960 <82318330> <82318339> 23970 <82318430> <82318439> 23980 <82318530> <82318539> 23990 <82318630> <82318639> 24000 endcidrange 100 begincidrange <82318730> <82318739> 24010 <82318830> <82318839> 24020 <82318930> <82318939> 24030 <82318a30> <82318a39> 24040 <82318b30> <82318b39> 24050 <82318c30> <82318c39> 24060 <82318d30> <82318d39> 24070 <82318e30> <82318e39> 24080 <82318f30> <82318f39> 24090 <82319030> <82319039> 24100 <82319130> <82319139> 24110 <82319230> <82319239> 24120 <82319330> <82319339> 24130 <82319430> <82319439> 24140 <82319530> <82319539> 24150 <82319630> <82319639> 24160 <82319730> <82319739> 24170 <82319830> <82319839> 24180 <82319930> <82319939> 24190 <82319a30> <82319a39> 24200 <82319b30> <82319b39> 24210 <82319c30> <82319c39> 24220 <82319d30> <82319d39> 24230 <82319e30> <82319e39> 24240 <82319f30> <82319f39> 24250 <8231a030> <8231a039> 24260 <8231a130> <8231a139> 24270 <8231a230> <8231a239> 24280 <8231a330> <8231a339> 24290 <8231a430> <8231a439> 24300 <8231a530> <8231a539> 24310 <8231a630> <8231a639> 24320 <8231a730> <8231a739> 24330 <8231a830> <8231a839> 24340 <8231a930> <8231a939> 24350 <8231aa30> <8231aa39> 24360 <8231ab30> <8231ab39> 24370 <8231ac30> <8231ac39> 24380 <8231ad30> <8231ad39> 24390 <8231ae30> <8231ae39> 24400 <8231af30> <8231af39> 24410 <8231b030> <8231b039> 24420 <8231b130> <8231b139> 24430 <8231b230> <8231b239> 24440 <8231b330> <8231b339> 24450 <8231b430> <8231b439> 24460 <8231b530> <8231b539> 24470 <8231b630> <8231b639> 24480 <8231b730> <8231b739> 24490 <8231b830> <8231b839> 24500 <8231b930> <8231b939> 24510 <8231ba30> <8231ba39> 24520 <8231bb30> <8231bb39> 24530 <8231bc30> <8231bc39> 24540 <8231bd30> <8231bd39> 24550 <8231be30> <8231be39> 24560 <8231bf30> <8231bf39> 24570 <8231c030> <8231c039> 24580 <8231c130> <8231c139> 24590 <8231c230> <8231c239> 24600 <8231c330> <8231c339> 24610 <8231c430> <8231c439> 24620 <8231c530> <8231c539> 24630 <8231c630> <8231c639> 24640 <8231c730> <8231c739> 24650 <8231c830> <8231c839> 24660 <8231c930> <8231c939> 24670 <8231ca30> <8231ca39> 24680 <8231cb30> <8231cb39> 24690 <8231cc30> <8231cc39> 24700 <8231cd30> <8231cd39> 24710 <8231ce30> <8231ce39> 24720 <8231cf30> <8231cf39> 24730 <8231d030> <8231d039> 24740 <8231d130> <8231d139> 24750 <8231d230> <8231d239> 24760 <8231d330> <8231d339> 24770 <8231d430> <8231d439> 24780 <8231d530> <8231d539> 24790 <8231d630> <8231d639> 24800 <8231d730> <8231d739> 24810 <8231d830> <8231d839> 24820 <8231d930> <8231d939> 24830 <8231da30> <8231da39> 24840 <8231db30> <8231db39> 24850 <8231dc30> <8231dc39> 24860 <8231dd30> <8231dd39> 24870 <8231de30> <8231de39> 24880 <8231df30> <8231df39> 24890 <8231e030> <8231e039> 24900 <8231e130> <8231e139> 24910 <8231e230> <8231e239> 24920 <8231e330> <8231e339> 24930 <8231e430> <8231e439> 24940 <8231e530> <8231e539> 24950 <8231e630> <8231e639> 24960 <8231e730> <8231e739> 24970 <8231e830> <8231e839> 24980 <8231e930> <8231e939> 24990 <8231ea30> <8231ea39> 25000 endcidrange 100 begincidrange <8231eb30> <8231eb39> 25010 <8231ec30> <8231ec39> 25020 <8231ed30> <8231ed39> 25030 <8231ee30> <8231ee39> 25040 <8231ef30> <8231ef39> 25050 <8231f030> <8231f039> 25060 <8231f130> <8231f139> 25070 <8231f230> <8231f239> 25080 <8231f330> <8231f339> 25090 <8231f430> <8231f439> 25100 <8231f530> <8231f539> 25110 <8231f630> <8231f639> 25120 <8231f730> <8231f739> 25130 <8231f830> <8231f839> 25140 <8231f930> <8231f939> 25150 <8231fa30> <8231fa39> 25160 <8231fb30> <8231fb39> 25170 <8231fc30> <8231fc39> 25180 <8231fd30> <8231fd39> 25190 <8231fe30> <8231fe39> 25200 <82328130> <82328139> 25210 <82328230> <82328239> 25220 <82328330> <82328339> 25230 <82328430> <82328439> 25240 <82328530> <82328539> 25250 <82328630> <82328639> 25260 <82328730> <82328739> 25270 <82328830> <82328839> 25280 <82328930> <82328939> 25290 <82328a30> <82328a39> 25300 <82328b30> <82328b39> 25310 <82328c30> <82328c39> 25320 <82328d30> <82328d39> 25330 <82328e30> <82328e39> 25340 <82328f30> <82328f39> 25350 <82329030> <82329039> 25360 <82329130> <82329139> 25370 <82329230> <82329239> 25380 <82329330> <82329339> 25390 <82329430> <82329439> 25400 <82329530> <82329539> 25410 <82329630> <82329639> 25420 <82329730> <82329739> 25430 <82329830> <82329839> 25440 <82329930> <82329939> 25450 <82329a30> <82329a39> 25460 <82329b30> <82329b39> 25470 <82329c30> <82329c39> 25480 <82329d30> <82329d39> 25490 <82329e30> <82329e39> 25500 <82329f30> <82329f39> 25510 <8232a030> <8232a039> 25520 <8232a130> <8232a139> 25530 <8232a230> <8232a239> 25540 <8232a330> <8232a339> 25550 <8232a430> <8232a439> 25560 <8232a530> <8232a539> 25570 <8232a630> <8232a639> 25580 <8232a730> <8232a739> 25590 <8232a830> <8232a839> 25600 <8232a930> <8232a939> 25610 <8232aa30> <8232aa39> 25620 <8232ab30> <8232ab39> 25630 <8232ac30> <8232ac39> 25640 <8232ad30> <8232ad39> 25650 <8232ae30> <8232ae39> 25660 <8232af30> <8232af39> 25670 <8232b030> <8232b039> 25680 <8232b130> <8232b139> 25690 <8232b230> <8232b239> 25700 <8232b330> <8232b339> 25710 <8232b430> <8232b439> 25720 <8232b530> <8232b539> 25730 <8232b630> <8232b639> 25740 <8232b730> <8232b739> 25750 <8232b830> <8232b839> 25760 <8232b930> <8232b939> 25770 <8232ba30> <8232ba39> 25780 <8232bb30> <8232bb39> 25790 <8232bc30> <8232bc39> 25800 <8232bd30> <8232bd39> 25810 <8232be30> <8232be39> 25820 <8232bf30> <8232bf39> 25830 <8232c030> <8232c039> 25840 <8232c130> <8232c139> 25850 <8232c230> <8232c239> 25860 <8232c330> <8232c339> 25870 <8232c430> <8232c439> 25880 <8232c530> <8232c539> 25890 <8232c630> <8232c639> 25900 <8232c730> <8232c739> 25910 <8232c830> <8232c839> 25920 <8232c930> <8232c939> 25930 <8232ca30> <8232ca39> 25940 <8232cb30> <8232cb39> 25950 <8232cc30> <8232cc39> 25960 <8232cd30> <8232cd39> 25970 <8232ce30> <8232ce39> 25980 <8232cf30> <8232cf39> 25990 <8232d030> <8232d039> 26000 endcidrange 100 begincidrange <8232d130> <8232d139> 26010 <8232d230> <8232d239> 26020 <8232d330> <8232d339> 26030 <8232d430> <8232d439> 26040 <8232d530> <8232d539> 26050 <8232d630> <8232d639> 26060 <8232d730> <8232d739> 26070 <8232d830> <8232d839> 26080 <8232d930> <8232d939> 26090 <8232da30> <8232da39> 26100 <8232db30> <8232db39> 26110 <8232dc30> <8232dc39> 26120 <8232dd30> <8232dd39> 26130 <8232de30> <8232de39> 26140 <8232df30> <8232df39> 26150 <8232e030> <8232e039> 26160 <8232e130> <8232e139> 26170 <8232e230> <8232e239> 26180 <8232e330> <8232e339> 26190 <8232e430> <8232e439> 26200 <8232e530> <8232e539> 26210 <8232e630> <8232e639> 26220 <8232e730> <8232e739> 26230 <8232e830> <8232e839> 26240 <8232e930> <8232e939> 26250 <8232ea30> <8232ea39> 26260 <8232eb30> <8232eb39> 26270 <8232ec30> <8232ec39> 26280 <8232ed30> <8232ed39> 26290 <8232ee30> <8232ee39> 26300 <8232ef30> <8232ef39> 26310 <8232f030> <8232f039> 26320 <8232f130> <8232f139> 26330 <8232f230> <8232f239> 26340 <8232f330> <8232f339> 26350 <8232f430> <8232f439> 26360 <8232f530> <8232f539> 26370 <8232f630> <8232f639> 26380 <8232f730> <8232f739> 26390 <8232f830> <8232f839> 26400 <8232f930> <8232f939> 26410 <8232fa30> <8232fa39> 26420 <8232fb30> <8232fb39> 26430 <8232fc30> <8232fc39> 26440 <8232fd30> <8232fd39> 26450 <8232fe30> <8232fe39> 26460 <82338130> <82338139> 26470 <82338230> <82338239> 26480 <82338330> <82338339> 26490 <82338430> <82338439> 26500 <82338530> <82338539> 26510 <82338630> <82338639> 26520 <82338730> <82338739> 26530 <82338830> <82338839> 26540 <82338930> <82338939> 26550 <82338a30> <82338a39> 26560 <82338b30> <82338b39> 26570 <82338c30> <82338c39> 26580 <82338d30> <82338d39> 26590 <82338e30> <82338e39> 26600 <82338f30> <82338f39> 26610 <82339030> <82339039> 26620 <82339130> <82339139> 26630 <82339230> <82339239> 26640 <82339330> <82339339> 26650 <82339430> <82339439> 26660 <82339530> <82339539> 26670 <82339630> <82339639> 26680 <82339730> <82339739> 26690 <82339830> <82339839> 26700 <82339930> <82339939> 26710 <82339a30> <82339a39> 26720 <82339b30> <82339b39> 26730 <82339c30> <82339c39> 26740 <82339d30> <82339d39> 26750 <82339e30> <82339e39> 26760 <82339f30> <82339f39> 26770 <8233a030> <8233a039> 26780 <8233a130> <8233a139> 26790 <8233a230> <8233a239> 26800 <8233a330> <8233a339> 26810 <8233a430> <8233a439> 26820 <8233a530> <8233a539> 26830 <8233a630> <8233a639> 26840 <8233a730> <8233a739> 26850 <8233a830> <8233a839> 26860 <8233a930> <8233a939> 26870 <8233aa30> <8233aa39> 26880 <8233ab30> <8233ab39> 26890 <8233ac30> <8233ac39> 26900 <8233ad30> <8233ad39> 26910 <8233ae30> <8233ae39> 26920 <8233af30> <8233af39> 26930 <8233b030> <8233b039> 26940 <8233b130> <8233b139> 26950 <8233b230> <8233b239> 26960 <8233b330> <8233b339> 26970 <8233b430> <8233b439> 26980 <8233b530> <8233b539> 26990 <8233b630> <8233b639> 27000 endcidrange 100 begincidrange <8233b730> <8233b739> 27010 <8233b830> <8233b839> 27020 <8233b930> <8233b939> 27030 <8233ba30> <8233ba39> 27040 <8233bb30> <8233bb39> 27050 <8233bc30> <8233bc39> 27060 <8233bd30> <8233bd39> 27070 <8233be30> <8233be39> 27080 <8233bf30> <8233bf39> 27090 <8233c030> <8233c039> 27100 <8233c130> <8233c139> 27110 <8233c230> <8233c239> 27120 <8233c330> <8233c339> 27130 <8233c430> <8233c439> 27140 <8233c530> <8233c539> 27150 <8233c630> <8233c639> 27160 <8233c730> <8233c739> 27170 <8233c830> <8233c839> 27180 <8233c930> <8233c939> 27190 <8233ca30> <8233ca39> 27200 <8233cb30> <8233cb39> 27210 <8233cc30> <8233cc39> 27220 <8233cd30> <8233cd39> 27230 <8233ce30> <8233ce39> 27240 <8233cf30> <8233cf39> 27250 <8233d030> <8233d039> 27260 <8233d130> <8233d139> 27270 <8233d230> <8233d239> 27280 <8233d330> <8233d339> 27290 <8233d430> <8233d439> 27300 <8233d530> <8233d539> 27310 <8233d630> <8233d639> 27320 <8233d730> <8233d739> 27330 <8233d830> <8233d839> 27340 <8233d930> <8233d939> 27350 <8233da30> <8233da39> 27360 <8233db30> <8233db39> 27370 <8233dc30> <8233dc39> 27380 <8233dd30> <8233dd39> 27390 <8233de30> <8233de39> 27400 <8233df30> <8233df39> 27410 <8233e030> <8233e039> 27420 <8233e130> <8233e139> 27430 <8233e230> <8233e239> 27440 <8233e330> <8233e339> 27450 <8233e430> <8233e439> 27460 <8233e530> <8233e539> 27470 <8233e630> <8233e639> 27480 <8233e730> <8233e739> 27490 <8233e830> <8233e839> 27500 <8233e930> <8233e939> 27510 <8233ea30> <8233ea39> 27520 <8233eb30> <8233eb39> 27530 <8233ec30> <8233ec39> 27540 <8233ed30> <8233ed39> 27550 <8233ee30> <8233ee39> 27560 <8233ef30> <8233ef39> 27570 <8233f030> <8233f039> 27580 <8233f130> <8233f139> 27590 <8233f230> <8233f239> 27600 <8233f330> <8233f339> 27610 <8233f430> <8233f439> 27620 <8233f530> <8233f539> 27630 <8233f630> <8233f639> 27640 <8233f730> <8233f739> 27650 <8233f830> <8233f839> 27660 <8233f930> <8233f939> 27670 <8233fa30> <8233fa39> 27680 <8233fb30> <8233fb39> 27690 <8233fc30> <8233fc39> 27700 <8233fd30> <8233fd39> 27710 <8233fe30> <8233fe39> 27720 <82348130> <82348139> 27730 <82348230> <82348239> 27740 <82348330> <82348339> 27750 <82348430> <82348439> 27760 <82348530> <82348539> 27770 <82348630> <82348639> 27780 <82348730> <82348739> 27790 <82348830> <82348839> 27800 <82348930> <82348939> 27810 <82348a30> <82348a39> 27820 <82348b30> <82348b39> 27830 <82348c30> <82348c39> 27840 <82348d30> <82348d39> 27850 <82348e30> <82348e39> 27860 <82348f30> <82348f39> 27870 <82349030> <82349039> 27880 <82349130> <82349139> 27890 <82349230> <82349239> 27900 <82349330> <82349339> 27910 <82349430> <82349439> 27920 <82349530> <82349539> 27930 <82349630> <82349639> 27940 <82349730> <82349739> 27950 <82349830> <82349839> 27960 <82349930> <82349939> 27970 <82349a30> <82349a39> 27980 <82349b30> <82349b39> 27990 <82349c30> <82349c39> 28000 endcidrange 100 begincidrange <82349d30> <82349d39> 28010 <82349e30> <82349e39> 28020 <82349f30> <82349f39> 28030 <8234a030> <8234a039> 28040 <8234a130> <8234a139> 28050 <8234a230> <8234a239> 28060 <8234a330> <8234a339> 28070 <8234a430> <8234a439> 28080 <8234a530> <8234a539> 28090 <8234a630> <8234a639> 28100 <8234a730> <8234a739> 28110 <8234a830> <8234a839> 28120 <8234a930> <8234a939> 28130 <8234aa30> <8234aa39> 28140 <8234ab30> <8234ab39> 28150 <8234ac30> <8234ac39> 28160 <8234ad30> <8234ad39> 28170 <8234ae30> <8234ae39> 28180 <8234af30> <8234af39> 28190 <8234b030> <8234b039> 28200 <8234b130> <8234b139> 28210 <8234b230> <8234b239> 28220 <8234b330> <8234b339> 28230 <8234b430> <8234b439> 28240 <8234b530> <8234b539> 28250 <8234b630> <8234b639> 28260 <8234b730> <8234b739> 28270 <8234b830> <8234b839> 28280 <8234b930> <8234b939> 28290 <8234ba30> <8234ba39> 28300 <8234bb30> <8234bb39> 28310 <8234bc30> <8234bc39> 28320 <8234bd30> <8234bd39> 28330 <8234be30> <8234be39> 28340 <8234bf30> <8234bf39> 28350 <8234c030> <8234c039> 28360 <8234c130> <8234c139> 28370 <8234c230> <8234c239> 28380 <8234c330> <8234c339> 28390 <8234c430> <8234c439> 28400 <8234c530> <8234c539> 28410 <8234c630> <8234c639> 28420 <8234c730> <8234c739> 28430 <8234c830> <8234c839> 28440 <8234c930> <8234c939> 28450 <8234ca30> <8234ca39> 28460 <8234cb30> <8234cb39> 28470 <8234cc30> <8234cc39> 28480 <8234cd30> <8234cd39> 28490 <8234ce30> <8234ce39> 28500 <8234cf30> <8234cf39> 28510 <8234d030> <8234d039> 28520 <8234d130> <8234d139> 28530 <8234d230> <8234d239> 28540 <8234d330> <8234d339> 28550 <8234d430> <8234d439> 28560 <8234d530> <8234d539> 28570 <8234d630> <8234d639> 28580 <8234d730> <8234d739> 28590 <8234d830> <8234d839> 28600 <8234d930> <8234d939> 28610 <8234da30> <8234da39> 28620 <8234db30> <8234db39> 28630 <8234dc30> <8234dc39> 28640 <8234dd30> <8234dd39> 28650 <8234de30> <8234de39> 28660 <8234df30> <8234df39> 28670 <8234e030> <8234e039> 28680 <8234e130> <8234e139> 28690 <8234e230> <8234e239> 28700 <8234e330> <8234e339> 28710 <8234e430> <8234e439> 28720 <8234e530> <8234e539> 28730 <8234e630> <8234e639> 28740 <8234e730> <8234e739> 28750 <8234e830> <8234e839> 28760 <8234e930> <8234e939> 28770 <8234ea30> <8234ea39> 28780 <8234eb30> <8234eb39> 28790 <8234ec30> <8234ec39> 28800 <8234ed30> <8234ed39> 28810 <8234ee30> <8234ee39> 28820 <8234ef30> <8234ef39> 28830 <8234f030> <8234f039> 28840 <8234f130> <8234f139> 28850 <8234f230> <8234f239> 28860 <8234f330> <8234f339> 28870 <8234f430> <8234f439> 28880 <8234f530> <8234f539> 28890 <8234f630> <8234f639> 28900 <8234f730> <8234f739> 28910 <8234f830> <8234f839> 28920 <8234f930> <8234f939> 28930 <8234fa30> <8234fa39> 28940 <8234fb30> <8234fb39> 28950 <8234fc30> <8234fc39> 28960 <8234fd30> <8234fd39> 28970 <8234fe30> <8234fe39> 28980 <82358130> <82358139> 28990 <82358230> <82358239> 29000 endcidrange 100 begincidrange <82358330> <82358339> 29010 <82358430> <82358439> 29020 <82358530> <82358539> 29030 <82358630> <82358639> 29040 <82358730> <82358738> 29050 <8240> <8252> 10258 <8253> <8253> 9884 <8254> <8261> 10277 <8262> <8262> 8629 <8263> <8273> 10291 <8274> <8274> 8908 <8275> <8279> 10308 <827a> <827a> 8214 <827b> <827c> 10313 <827d> <827d> 7778 <827e> <827e> 10315 <8280> <8280> 7968 <8281> <8282> 10316 <8283> <8283> 8319 <8284> <828f> 10318 <8290> <8290> 8284 <8291> <82a4> 10330 <82a5> <82a5> 8596 <82a6> <82c7> 10350 <82c8> <82c8> 7781 <82c9> <82c9> 8833 <82ca> <82e0> 10384 <82e1> <82e1> 8909 <82e2> <82e2> 10407 <82e3> <82e3> 8458 <82e4> <82e4> 7742 <82e5> <82ec> 10408 <82ed> <82ed> 9855 <82ee> <82f1> 10416 <82f2> <82f2> 8750 <82f3> <82f6> 10420 <82f7> <82f7> 7830 <82f8> <82f8> 8907 <82f9> <82f9> 8812 <82fa> <82fa> 10424 <82fb> <82fb> 8471 <82fc> <82fe> 10425 <8340> <8340> 10428 <8341> <8341> 8424 <8342> <8344> 10429 <8345> <8345> 8916 <8346> <8347> 10432 <8348> <8348> 8121 <8349> <834b> 10434 <834c> <834c> 8920 <834d> <8352> 10437 <8353> <8353> 8415 <8354> <8356> 10443 <8357> <8357> 8386 <8358> <835d> 10446 <835e> <835e> 8597 <835f> <8364> 10452 <8365> <8365> 8108 <8366> <8366> 8915 <8367> <8371> 10458 <8372> <8372> 8065 <8373> <8377> 10469 <8378> <8378> 8720 <8379> <8379> 10474 <837a> <837a> 8911 <837b> <837b> 10475 <837c> <837c> 8723 <837d> <837d> 10476 <837e> <837e> 8164 <8380> <8380> 8080 <8381> <8385> 10477 <8386> <8386> 8918 <8387> <8388> 10482 <8389> <8389> 8912 <838a> <838a> 8910 <838b> <838c> 10484 <838d> <838d> 9857 <838e> <8393> 10486 <8394> <8394> 7798 <8395> <839d> 10492 <839e> <839e> 8753 <839f> <83a5> 10501 <83a6> <83a6> 7827 <83a7> <83aa> 10508 <83ab> <83ab> 8914 <83ac> <83ad> 10512 <83ae> <83ae> 8919 <83af> <83af> 8917 <83b0> <83b0> 8913 <83b1> <83b9> 10514 <83ba> <83ba> 7909 <83bb> <83c8> 10523 <83c9> <83c9> 8229 <83ca> <83f5> 10537 <83f6> <83f6> 7887 <83f7> <83fe> 10581 <8440> <844f> 10589 <8450> <8450> 8153 <8451> <8470> 10605 <8471> <8471> 8904 endcidrange 100 begincidrange <8472> <8473> 10637 <8474> <8474> 8803 <8475> <8476> 10639 <8477> <8477> 9859 <8478> <847e> 10641 <8480> <8481> 10648 <8482> <8482> 7959 <8483> <848d> 10650 <848e> <848e> 7979 <848f> <8491> 10661 <8492> <8492> 8906 <8493> <8493> 7833 <8494> <849c> 10664 <849d> <849d> 8015 <849e> <84a0> 10673 <84a1> <84a1> 8143 <84a2> <84a2> 8246 <84a3> <84a3> 7994 <84a4> <84a4> 10676 <84a5> <84a5> 8905 <84a6> <84a6> 8089 <84a7> <84a8> 10677 <84a9> <84a9> 8053 <84aa> <84c4> 10679 <84c5> <84c5> 8126 <84c6> <84d2> 10706 <84d3> <84d3> 7885 <84d4> <84d4> 10719 <84d5> <84d5> 8617 <84d6> <84d6> 10720 <84d7> <84d7> 8678 <84d8> <84d8> 10721 <84d9> <84d9> 8487 <84da> <84da> 8195 <84db> <84dc> 10722 <84dd> <84dd> 8498 <84de> <84e9> 10724 <84ea> <84ea> 8995 <84eb> <84ed> 10736 <84ee> <84ee> 8209 <84ef> <84f0> 10739 <84f1> <84f1> 8437 <84f2> <84fe> 10741 <8540> <8550> 10754 <8551> <8551> 8901 <8552> <8552> 8030 <8553> <8553> 10771 <8554> <8554> 8902 <8555> <855d> 10772 <855e> <855e> 8431 <855f> <8565> 10781 <8566> <8566> 8656 <8567> <857e> 10788 <8580> <8586> 10812 <8587> <8587> 8897 <8588> <858a> 10819 <858b> <858b> 7780 <858c> <8591> 10822 <8592> <8592> 8697 <8593> <8595> 10828 <8596> <8596> 8208 <8597> <8597> 10831 <8598> <8598> 8898 <8599> <85a1> 10832 <85a2> <85a2> 7770 <85a3> <85b1> 10841 <85b2> <85b2> 7842 <85b3> <85fe> 10856 <8640> <8649> 10932 <864a> <864a> 9069 <864b> <8653> 10942 <8654> <8654> 8775 <8655> <8667> 10951 <8668> <8668> 9068 <8669> <867e> 10970 <8680> <8695> 10992 <8696> <8696> 8604 <8697> <8698> 11014 <8699> <8699> 8393 <869a> <86a0> 11016 <86a1> <86a1> 8688 <86a2> <86c9> 11023 <86ca> <86ca> 8459 <86cb> <86cb> 11063 <86cc> <86cc> 8414 <86cd> <86cd> 11064 <86ce> <86ce> 7850 <86cf> <86d0> 11065 <86d1> <86d1> 8748 <86d2> <86db> 11067 <86dc> <86dc> 8408 <86dd> <86dd> 8896 <86de> <86e0> 11077 <86e1> <86e1> 8303 <86e2> <86e7> 11080 <86e8> <86e8> 8609 <86e9> <86ed> 11086 <86ee> <86ee> 9081 <86ef> <86f3> 11091 <86f4> <86f4> 9074 endcidrange 100 begincidrange <86f5> <86fe> 11096 <8740> <8740> 8554 <8741> <8743> 11106 <8744> <8744> 9084 <8745> <8748> 11109 <8749> <8749> 8368 <874a> <874a> 11113 <874b> <874b> 9082 <874c> <874c> 7796 <874d> <874e> 11114 <874f> <874f> 9079 <8750> <8756> 11116 <8757> <8757> 8012 <8758> <8759> 11123 <875a> <875a> 9080 <875b> <875b> 8655 <875c> <875c> 9064 <875d> <875d> 11125 <875e> <875e> 9073 <875f> <875f> 11126 <8760> <8760> 9065 <8761> <8765> 11127 <8766> <8766> 9844 <8767> <8779> 11132 <877a> <877a> 9071 <877b> <877c> 11151 <877d> <877d> 9072 <877e> <877e> 11153 <8780> <8780> 11154 <8781> <8781> 9078 <8782> <8782> 9075 <8783> <8785> 11155 <8786> <8786> 9087 <8787> <8787> 11158 <8788> <8788> 9076 <8789> <8789> 11159 <878a> <878a> 8373 <878b> <878c> 11160 <878d> <878d> 7899 <878e> <878e> 9842 <878f> <8792> 11162 <8793> <8793> 9070 <8794> <8797> 11166 <8798> <8798> 8631 <8799> <879c> 11170 <879d> <879d> 9077 <879e> <87a2> 11174 <87a3> <87a3> 9090 <87a4> <87a6> 11179 <87a7> <87a7> 8350 <87a8> <87b2> 11182 <87b3> <87b3> 9067 <87b4> <87b4> 11193 <87b5> <87b5> 8249 <87b6> <87ba> 11194 <87bb> <87bb> 9887 <87bc> <87be> 11199 <87bf> <87bf> 9085 <87c0> <87c0> 8693 <87c1> <87c1> 11202 <87c2> <87c2> 9089 <87c3> <87c9> 11203 <87ca> <87ca> 9083 <87cb> <87cb> 9086 <87cc> <87cc> 8652 <87cd> <87ce> 11210 <87cf> <87cf> 8923 <87d0> <87d1> 11212 <87d2> <87d2> 9066 <87d3> <87d3> 9865 <87d4> <87d4> 11214 <87d5> <87d5> 9879 <87d6> <87d9> 11215 <87da> <87da> 8865 <87db> <87f6> 11219 <87f7> <87f7> 9091 <87f8> <87f8> 7997 <87f9> <87f9> 11247 <87fa> <87fa> 8591 <87fb> <87fe> 11248 <8840> <8840> 8774 <8841> <8841> 8776 <8842> <8843> 11252 <8844> <8844> 8574 <8845> <8845> 11254 <8846> <8846> 8576 <8847> <887e> 11255 <8880> <88b9> 11311 <88ba> <88ba> 9002 <88bb> <88cb> 11369 <88cc> <88cc> 8843 <88cd> <88d3> 11386 <88d4> <88d4> 8069 <88d5> <88d6> 11393 <88d7> <88d7> 8997 <88d8> <88de> 11395 <88df> <88df> 9004 <88e0> <88e4> 11402 <88e5> <88e5> 9006 <88e6> <88f1> 11407 endcidrange 100 begincidrange <88f2> <88f2> 8709 <88f3> <88f3> 7736 <88f4> <88f5> 11419 <88f6> <88f6> 7795 <88f7> <88fe> 11421 <8940> <894a> 11429 <894b> <894b> 8163 <894c> <894c> 9017 <894d> <894d> 11440 <894e> <894e> 9003 <894f> <894f> 11441 <8950> <8950> 9005 <8951> <8953> 11442 <8954> <8954> 8575 <8955> <895c> 11445 <895d> <895d> 8615 <895e> <895e> 11453 <895f> <895f> 9007 <8960> <896c> 11454 <896d> <896d> 7805 <896e> <8970> 11467 <8971> <8971> 8406 <8972> <897b> 11470 <897c> <897c> 7874 <897d> <897e> 11480 <8980> <898a> 11482 <898b> <898b> 8882 <898c> <8998> 11493 <8999> <8999> 7903 <899a> <899d> 11506 <899e> <899e> 7929 <899f> <89a5> 11510 <89a6> <89a6> 8409 <89a7> <89a7> 11517 <89a8> <89a8> 8157 <89a9> <89ae> 11518 <89af> <89af> 8551 <89b0> <89b9> 11524 <89ba> <89ba> 8685 <89bb> <89bd> 11534 <89be> <89be> 8199 <89bf> <89bf> 8998 <89c0> <89c0> 9001 <89c1> <89c3> 11537 <89c4> <89c4> 8018 <89c5> <89c5> 8251 <89c6> <89c6> 9000 <89c7> <89c7> 11540 <89c8> <89c8> 8999 <89c9> <89cd> 11541 <89ce> <89ce> 7723 <89cf> <89d0> 11546 <89d1> <89d1> 8878 <89d2> <89d7> 11548 <89d8> <89d8> 8009 <89d9> <89da> 11554 <89db> <89db> 8504 <89dc> <89f3> 11556 <89f4> <89f4> 8321 <89f5> <89fe> 11580 <8a40> <8a40> 11590 <8a41> <8a41> 8060 <8a42> <8a58> 11591 <8a59> <8a59> 9051 <8a5a> <8a5a> 7902 <8a5b> <8a5b> 11614 <8a5c> <8a5c> 8098 <8a5d> <8a5d> 11615 <8a5e> <8a5e> 7930 <8a5f> <8a78> 11616 <8a79> <8a79> 8877 <8a7a> <8a7e> 11642 <8a80> <8ae3> 11647 <8ae4> <8ae4> 8255 <8ae5> <8afe> 11747 <8b40> <8b43> 11773 <8b44> <8b44> 7950 <8b45> <8b48> 11777 <8b49> <8b49> 9209 <8b4a> <8b79> 11781 <8b7a> <8b7a> 9212 <8b7b> <8b7e> 11829 <8b80> <8b8b> 11833 <8b8c> <8b8c> 8297 <8b8d> <8b9d> 11845 <8b9e> <8b9e> 9207 <8b9f> <8bb2> 11862 <8bb3> <8bb3> 9206 <8bb4> <8bb8> 11882 <8bb9> <8bb9> 9213 <8bba> <8bbd> 11887 <8bbe> <8bbe> 9208 <8bbf> <8bc5> 11891 <8bc6> <8bc6> 9210 <8bc7> <8bc7> 11898 <8bc8> <8bc8> 9214 <8bc9> <8bc9> 8104 <8bca> <8bd3> 11899 <8bd4> <8bd4> 9217 <8bd5> <8bdb> 11909 endcidrange 100 begincidrange <8bdc> <8bdc> 9215 <8bdd> <8be4> 11916 <8be5> <8be5> 9216 <8be6> <8bea> 11924 <8beb> <8beb> 8737 <8bec> <8bef> 11929 <8bf0> <8bf0> 8482 <8bf1> <8bfe> 11933 <8c40> <8c43> 11947 <8c44> <8c44> 9211 <8c45> <8c4e> 11951 <8c4f> <8c4f> 8538 <8c50> <8c56> 11961 <8c57> <8c57> 8677 <8c58> <8c5b> 11968 <8c5c> <8c5c> 8279 <8c5d> <8c7e> 11972 <8c80> <8c8a> 12006 <8c8b> <8c8b> 8421 <8c8c> <8c8c> 12017 <8c8d> <8c8d> 8495 <8c8e> <8c8e> 8355 <8c8f> <8c8f> 8481 <8c90> <8c90> 12018 <8c91> <8c91> 8660 <8c92> <8c92> 8165 <8c93> <8c98> 12019 <8c99> <8c99> 7818 <8c9a> <8c9a> 7735 <8c9b> <8ca1> 12025 <8ca2> <8ca2> 8094 <8ca3> <8ca3> 8870 <8ca4> <8ca4> 8680 <8ca5> <8ca5> 12032 <8ca6> <8ca6> 7898 <8ca7> <8ca7> 7865 <8ca8> <8cbf> 12033 <8cc0> <8cc0> 9052 <8cc1> <8cd1> 12057 <8cd2> <8cd2> 8272 <8cd3> <8cd3> 7783 <8cd4> <8cd4> 12074 <8cd5> <8cd5> 9204 <8cd6> <8cd8> 12075 <8cd9> <8cd9> 8510 <8cda> <8cf8> 12078 <8cf9> <8cf9> 7958 <8cfa> <8cfe> 12109 <8d40> <8d72> 12114 <8d73> <8d73> 9097 <8d74> <8d74> 12165 <8d75> <8d75> 7863 <8d76> <8d7a> 12166 <8d7b> <8d7b> 8628 <8d7c> <8d7e> 12171 <8d80> <8d87> 12174 <8d88> <8d88> 9103 <8d89> <8d8e> 12182 <8d8f> <8d8f> 7962 <8d90> <8d9d> 12188 <8d9e> <8d9e> 9099 <8d9f> <8db8> 12202 <8db9> <8db9> 9098 <8dba> <8de1> 12228 <8de2> <8de2> 9105 <8de3> <8de3> 12268 <8de4> <8de4> 8817 <8de5> <8de6> 12269 <8de7> <8de7> 9096 <8de8> <8df6> 12271 <8df7> <8df7> 9102 <8df8> <8dfd> 12286 <8dfe> <8dfe> 9101 <8e40> <8e45> 12292 <8e46> <8e46> 9100 <8e47> <8e55> 12298 <8e56> <8e56> 9104 <8e57> <8e57> 12313 <8e58> <8e58> 8243 <8e59> <8e59> 12314 <8e5a> <8e5a> 8764 <8e5b> <8e67> 12315 <8e68> <8e68> 8169 <8e69> <8e6d> 12328 <8e6e> <8e6e> 8277 <8e6f> <8e6f> 12333 <8e70> <8e70> 9106 <8e71> <8e7e> 12334 <8e80> <8e80> 8996 <8e81> <8e9a> 12348 <8e9b> <8e9b> 8515 <8e9c> <8e9e> 12374 <8e9f> <8e9f> 8489 <8ea0> <8ea3> 12377 <8ea4> <8ea4> 8823 <8ea5> <8ea6> 12381 <8ea7> <8ea7> 7847 <8ea8> <8eab> 12383 <8eac> <8eac> 8837 <8ead> <8ead> 12387 endcidrange 100 begincidrange <8eae> <8eae> 9092 <8eaf> <8ebc> 12388 <8ebd> <8ebd> 9095 <8ebe> <8ebe> 9094 <8ebf> <8ec2> 12402 <8ec3> <8ec3> 8848 <8ec4> <8ec4> 12406 <8ec5> <8ec5> 7748 <8ec6> <8ecc> 12407 <8ecd> <8ecd> 7730 <8ece> <8ece> 9093 <8ecf> <8ed5> 12414 <8ed6> <8ed6> 7955 <8ed7> <8ed7> 8051 <8ed8> <8eeb> 12421 <8eec> <8eec> 8160 <8eed> <8efe> 12441 <8f40> <8f51> 12459 <8f52> <8f52> 8327 <8f53> <8f53> 7800 <8f54> <8f54> 9134 <8f55> <8f55> 7926 <8f56> <8f56> 7985 <8f57> <8f5c> 12477 <8f5d> <8f5d> 8261 <8f5e> <8f63> 12483 <8f64> <8f64> 8568 <8f65> <8f7e> 12489 <8f80> <8f85> 12515 <8f86> <8f86> 9205 <8f87> <8f87> 12521 <8f88> <8f88> 8821 <8f89> <8f94> 12522 <8f95> <8f95> 9838 <8f96> <8f96> 12534 <8f97> <8f97> 7856 <8f98> <8f9a> 12535 <8f9b> <8f9b> 8323 <8f9c> <8f9c> 12538 <8f9d> <8f9d> 8584 <8f9e> <8fa0> 12539 <8fa1> <8fa1> 9852 <8fa2> <8fbc> 12542 <8fbd> <8fbd> 8133 <8fbe> <8fc3> 12569 <8fc4> <8fc4> 7841 <8fc5> <8fc5> 12575 <8fc6> <8fc6> 9107 <8fc7> <8fcc> 12576 <8fcd> <8fcd> 7947 <8fce> <8fd7> 12582 <8fd8> <8fd8> 7804 <8fd9> <8ffe> 12592 <9040> <907e> 12630 <9080> <909c> 12693 <909d> <909d> 9140 <909e> <909e> 8318 <909f> <90b9> 12722 <90ba> <90ba> 7907 <90bb> <90bf> 12749 <90c0> <90c0> 8341 <90c1> <90c1> 9147 <90c2> <90c4> 12754 <90c5> <90c5> 9145 <90c6> <90da> 12757 <90db> <90db> 7720 <90dc> <90dc> 9149 <90dd> <90ec> 12778 <90ed> <90ed> 9141 <90ee> <90ef> 12794 <90f0> <90f0> 9146 <90f1> <90f6> 12796 <90f7> <90f7> 9139 <90f8> <90fe> 12802 <9140> <9141> 12809 <9142> <9142> 8546 <9143> <914a> 12811 <914b> <914b> 7774 <914c> <914c> 12819 <914d> <914d> 7773 <914e> <9150> 12820 <9151> <9151> 9143 <9152> <9153> 12823 <9154> <9154> 7983 <9155> <9155> 9439 <9156> <9158> 12825 <9159> <9159> 9138 <915a> <915a> 8526 <915b> <915c> 12828 <915d> <915d> 8274 <915e> <9160> 12830 <9161> <9161> 9148 <9162> <9162> 12833 <9163> <9163> 8427 <9164> <916d> 12834 <916e> <916e> 8754 <916f> <9175> 12844 <9176> <9176> 7743 <9177> <9179> 12851 <917a> <917a> 8219 endcidrange 100 begincidrange <917b> <917b> 8380 <917c> <917c> 9150 <917d> <917e> 12854 <9180> <9183> 12856 <9184> <9184> 7854 <9185> <918c> 12860 <918d> <918d> 7931 <918e> <9190> 12868 <9191> <9191> 8329 <9192> <9192> 12871 <9193> <9193> 9137 <9194> <9196> 12872 <9197> <9197> 8644 <9198> <919a> 12875 <919b> <919b> 8724 <919c> <91a8> 12878 <91a9> <91a9> 8158 <91aa> <91aa> 8739 <91ab> <91ab> 9142 <91ac> <91b9> 12891 <91ba> <91ba> 9868 <91bb> <91bb> 9438 <91bc> <91be> 12905 <91bf> <91bf> 9440 <91c0> <91c2> 12908 <91c3> <91c3> 9144 <91c4> <91cc> 12911 <91cd> <91cd> 7809 <91ce> <91cf> 12920 <91d0> <91d0> 8190 <91d1> <91d1> 8017 <91d2> <91d2> 8673 <91d3> <91d3> 12922 <91d4> <91d4> 9136 <91d5> <91d5> 12923 <91d6> <91d6> 8142 <91d7> <91d7> 12924 <91d8> <91d8> 8478 <91d9> <91d9> 8225 <91da> <91de> 12925 <91df> <91df> 9441 <91e0> <91e1> 12930 <91e2> <91e2> 9379 <91e3> <91e9> 12932 <91ea> <91ea> 9380 <91eb> <91ef> 12939 <91f0> <91f0> 8819 <91f1> <91f1> 12944 <91f2> <91f2> 8624 <91f3> <91fe> 12945 <9240> <927e> 12957 <9280> <92b5> 13020 <92b6> <92b6> 8657 <92b7> <92cd> 13074 <92ce> <92ce> 8476 <92cf> <92cf> 13097 <92d0> <92d0> 9053 <92d1> <92d3> 13098 <92d4> <92d4> 9858 <92d5> <92de> 13101 <92df> <92df> 8461 <92e0> <92e0> 8282 <92e1> <92fd> 13111 <92fe> <92fe> 8077 <9340> <934f> 13140 <9350> <9350> 8703 <9351> <935c> 13156 <935d> <935d> 8024 <935e> <936f> 13168 <9370> <9370> 8539 <9371> <9375> 13186 <9376> <9376> 7862 <9377> <937e> 13191 <9380> <938b> 13199 <938c> <938c> 8411 <938d> <939c> 13211 <939d> <939d> 9056 <939e> <93a4> 13227 <93a5> <93a5> 9057 <93a6> <93a6> 13234 <93a7> <93a7> 8256 <93a8> <93b3> 13235 <93b4> <93b4> 8846 <93b5> <93b7> 13247 <93b8> <93b8> 8159 <93b9> <93ba> 13250 <93bb> <93bb> 9054 <93bc> <93bc> 13252 <93bd> <93bd> 7786 <93be> <93c5> 13253 <93c6> <93c6> 8194 <93c7> <93ce> 13261 <93cf> <93cf> 8339 <93d0> <93d6> 13269 <93d7> <93d7> 9055 <93d8> <93da> 13276 <93db> <93db> 7852 <93dc> <93dc> 7764 <93dd> <93e0> 13279 <93e1> <93e1> 7944 endcidrange 100 begincidrange <93e2> <93e3> 13283 <93e4> <93e4> 8384 <93e5> <93e5> 9058 <93e6> <93e8> 13285 <93e9> <93e9> 8544 <93ea> <93ea> 13288 <93eb> <93eb> 8605 <93ec> <93ec> 8078 <93ed> <93ed> 8749 <93ee> <93ee> 13289 <93ef> <93ef> 8263 <93f0> <93f0> 13290 <93f1> <93f1> 8802 <93f2> <93f3> 13291 <93f4> <93f4> 8039 <93f5> <93f5> 7858 <93f6> <93f9> 13293 <93fa> <93fa> 7849 <93fb> <93fd> 13297 <93fe> <93fe> 8140 <9440> <9443> 13300 <9444> <9444> 8050 <9445> <944c> 13304 <944d> <944d> 8344 <944e> <944f> 13312 <9450> <9450> 7762 <9451> <9451> 8356 <9452> <9452> 7964 <9453> <9453> 8847 <9454> <9454> 13314 <9455> <9455> 8173 <9456> <9457> 13315 <9458> <9458> 9061 <9459> <945a> 13317 <945b> <945b> 7725 <945c> <945c> 8530 <945d> <945d> 9062 <945e> <945e> 13319 <945f> <945f> 8442 <9460> <9463> 13320 <9464> <9464> 9059 <9465> <9465> 13324 <9466> <9466> 8346 <9467> <946d> 13325 <946e> <946e> 8252 <946f> <9471> 13332 <9472> <9472> 8182 <9473> <9473> 13335 <9474> <9474> 9060 <9475> <9475> 13336 <9476> <9476> 7785 <9477> <9477> 13337 <9478> <9478> 9063 <9479> <9479> 13338 <947a> <947a> 8477 <947b> <947e> 13339 <9480> <9480> 8793 <9481> <9481> 8278 <9482> <9482> 8547 <9483> <9486> 13343 <9487> <9487> 8105 <9488> <9488> 8188 <9489> <94a0> 13347 <94a1> <94a1> 7726 <94a2> <94b2> 13371 <94b3> <94b3> 7868 <94b4> <94b4> 13388 <94b5> <94b5> 8514 <94b6> <94be> 13389 <94bf> <94bf> 8222 <94c0> <94c0> 7747 <94c1> <94cb> 13398 <94cc> <94cc> 9428 <94cd> <94d7> 13409 <94d8> <94d8> 8815 <94d9> <94df> 13420 <94e0> <94e0> 7895 <94e1> <94fe> 13427 <9540> <9571> 13457 <9572> <9572> 8493 <9573> <957e> 13507 <9580> <9582> 13519 <9583> <9583> 8859 <9584> <959d> 13522 <959e> <959e> 8790 <959f> <959f> 9384 <95a0> <95b2> 13548 <95b3> <95b3> 7801 <95b4> <95b9> 13567 <95ba> <95ba> 8794 <95bb> <95ce> 13573 <95cf> <95cf> 9383 <95d0> <95d0> 13593 <95d1> <95d1> 9862 <95d2> <95d2> 9382 <95d3> <95d3> 13594 <95d4> <95d4> 8654 <95d5> <95e0> 13595 <95e1> <95e1> 9385 <95e2> <95e6> 13607 endcidrange 100 begincidrange <95e7> <95e7> 8167 <95e8> <95f0> 13612 <95f1> <95f1> 8466 <95f2> <95f7> 13621 <95f8> <95f8> 8508 <95f9> <95fd> 13627 <95fe> <95fe> 8028 <9640> <9655> 13632 <9656> <9656> 9412 <9657> <967b> 13654 <967c> <967c> 7884 <967d> <967e> 13691 <9680> <96fe> 13693 <9740> <9766> 13820 <9767> <9767> 9322 <9768> <976b> 13859 <976c> <976c> 8565 <976d> <976d> 13863 <976e> <976e> 9325 <976f> <977e> 13864 <9780> <9795> 13880 <9796> <9796> 9323 <9797> <9797> 8799 <9798> <979c> 13902 <979d> <979d> 7886 <979e> <97a2> 13907 <97a3> <97a3> 8818 <97a4> <97be> 13912 <97bf> <97bf> 9331 <97c0> <97ed> 13939 <97ee> <97ee> 8702 <97ef> <97f6> 13985 <97f7> <97f7> 7934 <97f8> <97fe> 13993 <9840> <9844> 14000 <9845> <9845> 9333 <9846> <9848> 14005 <9849> <9849> 8714 <984a> <984e> 14008 <984f> <984f> 8047 <9850> <9870> 14013 <9871> <9871> 9320 <9872> <9872> 14046 <9873> <9873> 8448 <9874> <987e> 14047 <9880> <9880> 14058 <9881> <9881> 9334 <9882> <988a> 14059 <988b> <988b> 7975 <988c> <988c> 8407 <988d> <989f> 14068 <98a0> <98a0> 9340 <98a1> <98a9> 14087 <98aa> <98aa> 8097 <98ab> <98b5> 14096 <98b6> <98b6> 8874 <98b7> <98b7> 8197 <98b8> <98b9> 14107 <98ba> <98ba> 9324 <98bb> <98c6> 14109 <98c7> <98c7> 8254 <98c8> <98ca> 14121 <98cb> <98cb> 7756 <98cc> <98cf> 14124 <98d0> <98d0> 8506 <98d1> <98d2> 14128 <98d3> <98d3> 8708 <98d4> <98e2> 14130 <98e3> <98e3> 8387 <98e4> <98e4> 8512 <98e5> <98e5> 9335 <98e6> <98ee> 14145 <98ef> <98ef> 9332 <98f0> <98f1> 14154 <98f2> <98f2> 8413 <98f3> <98fe> 14156 <9940> <9942> 14168 <9943> <9943> 8040 <9944> <9944> 14171 <9945> <9945> 8581 <9946> <9965> 14172 <9966> <9966> 9330 <9967> <996d> 14204 <996e> <996e> 7861 <996f> <9974> 14211 <9975> <9975> 9336 <9976> <9979> 14217 <997a> <997a> 8075 <997b> <997b> 9348 <997c> <997e> 14221 <9980> <9984> 14224 <9985> <9985> 9881 <9986> <9988> 14229 <9989> <9989> 9346 <998a> <998d> 14232 <998e> <998e> 8353 <998f> <9990> 14236 <9991> <9991> 8082 <9992> <9998> 14238 <9999> <9999> 7992 endcidrange 100 begincidrange <999a> <99a8> 14245 <99a9> <99a9> 9349 <99aa> <99af> 14260 <99b0> <99b0> 9344 <99b1> <99b1> 9326 <99b2> <99b2> 14266 <99b3> <99b3> 9339 <99b4> <99b4> 9350 <99b5> <99b5> 9329 <99b6> <99bc> 14267 <99bd> <99bd> 9347 <99be> <99be> 9328 <99bf> <99bf> 14274 <99c0> <99c0> 9321 <99c1> <99c1> 14275 <99c2> <99c2> 9343 <99c3> <99c8> 14276 <99c9> <99c9> 9327 <99ca> <99cd> 14282 <99ce> <99ce> 9345 <99cf> <99d0> 14286 <99d1> <99d1> 8736 <99d2> <99d9> 14288 <99da> <99da> 8181 <99db> <99df> 14296 <99e0> <99e0> 8436 <99e1> <99e4> 14301 <99e5> <99e5> 9341 <99e6> <99e7> 14305 <99e8> <99e8> 9337 <99e9> <99eb> 14307 <99ec> <99ec> 9342 <99ed> <99f3> 14310 <99f4> <99f4> 9338 <99f5> <99fe> 14317 <9a40> <9a49> 14327 <9a4a> <9a4a> 8419 <9a4b> <9a56> 14337 <9a57> <9a57> 8365 <9a58> <9a64> 14349 <9a65> <9a65> 9419 <9a66> <9a66> 14362 <9a67> <9a67> 8019 <9a68> <9a70> 14363 <9a71> <9a71> 8537 <9a72> <9a75> 14372 <9a76> <9a76> 8211 <9a77> <9a77> 7987 <9a78> <9a7e> 14376 <9a80> <9a87> 14383 <9a88> <9a88> 7772 <9a89> <9a8b> 14391 <9a8c> <9a8c> 9352 <9a8d> <9a90> 14394 <9a91> <9a91> 9351 <9a92> <9a96> 14398 <9a97> <9a97> 9354 <9a98> <9a99> 14403 <9a9a> <9a9a> 9353 <9a9b> <9a9b> 9355 <9a9c> <9a9d> 14405 <9a9e> <9a9e> 8067 <9a9f> <9aa1> 14407 <9aa2> <9aa2> 8463 <9aa3> <9aa3> 8155 <9aa4> <9aa9> 14410 <9aaa> <9aaa> 8367 <9aab> <9acf> 14416 <9ad0> <9ad0> 9408 <9ad1> <9ad5> 14453 <9ad6> <9ad6> 8813 <9ad7> <9ad9> 14458 <9ada> <9ada> 9409 <9adb> <9ae1> 14461 <9ae2> <9ae2> 8394 <9ae3> <9ae3> 14468 <9ae4> <9ae4> 8423 <9ae5> <9ae5> 9410 <9ae6> <9afe> 14469 <9b40> <9b7e> 14494 <9b80> <9bd0> 14557 <9bd1> <9bd1> 9180 <9bd2> <9bdb> 14638 <9bdc> <9bdc> 9179 <9bdd> <9bfe> 14648 <9c40> <9c52> 14682 <9c53> <9c53> 8286 <9c54> <9c58> 14701 <9c59> <9c59> 8772 <9c5a> <9c5a> 9186 <9c5b> <9c5b> 14706 <9c5c> <9c5c> 8404 <9c5d> <9c74> 14707 <9c75> <9c75> 8607 <9c76> <9c78> 14731 <9c79> <9c79> 7782 <9c7a> <9c7e> 14734 <9c80> <9c85> 14739 <9c86> <9c86> 8035 <9c87> <9c9c> 14745 endcidrange 100 begincidrange <9c9d> <9c9d> 9181 <9c9e> <9caa> 14767 <9cab> <9cab> 8555 <9cac> <9cc9> 14780 <9cca> <9cca> 8885 <9ccb> <9cce> 14810 <9ccf> <9ccf> 7974 <9cd0> <9ce5> 14814 <9ce6> <9ce6> 7779 <9ce7> <9ce7> 8328 <9ce8> <9ceb> 14836 <9cec> <9cec> 7869 <9ced> <9ced> 14840 <9cee> <9cee> 9025 <9cef> <9cfa> 14841 <9cfb> <9cfb> 8011 <9cfc> <9cfd> 14853 <9cfe> <9cfe> 8850 <9d40> <9d41> 14855 <9d42> <9d42> 8484 <9d43> <9d45> 14857 <9d46> <9d46> 8264 <9d47> <9d47> 9184 <9d48> <9d4c> 14860 <9d4d> <9d4d> 8311 <9d4e> <9d4e> 14865 <9d4f> <9d4f> 8762 <9d50> <9d60> 14866 <9d61> <9d61> 8369 <9d62> <9d67> 14883 <9d68> <9d68> 8001 <9d69> <9d69> 8220 <9d6a> <9d6d> 14889 <9d6e> <9d6e> 8888 <9d6f> <9d70> 14893 <9d71> <9d71> 8822 <9d72> <9d74> 14895 <9d75> <9d75> 8091 <9d76> <9d7a> 14898 <9d7b> <9d7b> 8095 <9d7c> <9d7c> 14903 <9d7d> <9d7d> 9674 <9d7e> <9d7e> 14904 <9d80> <9d89> 14905 <9d8a> <9d8a> 8382 <9d8b> <9d8c> 14915 <9d8d> <9d8d> 8116 <9d8e> <9d90> 14917 <9d91> <9d91> 9175 <9d92> <9d98> 14920 <9d99> <9d99> 8453 <9d9a> <9da0> 14927 <9da1> <9da1> 9185 <9da2> <9da2> 8172 <9da3> <9da6> 14934 <9da7> <9da7> 9194 <9da8> <9dab> 14938 <9dac> <9dac> 9187 <9dad> <9dad> 8462 <9dae> <9db1> 14942 <9db2> <9db2> 8102 <9db3> <9db3> 8196 <9db4> <9dbd> 14946 <9dbe> <9dbe> 8093 <9dbf> <9dc5> 14956 <9dc6> <9dc6> 9189 <9dc7> <9dc8> 14963 <9dc9> <9dc9> 8804 <9dca> <9dcc> 14965 <9dcd> <9dcd> 9442 <9dce> <9dd1> 14968 <9dd2> <9dd2> 9182 <9dd3> <9dd4> 14972 <9dd5> <9dd5> 7876 <9dd6> <9de0> 14974 <9de1> <9de1> 8886 <9de2> <9de2> 8361 <9de3> <9df0> 14985 <9df1> <9df1> 8491 <9df2> <9df3> 14999 <9df4> <9df4> 8357 <9df5> <9df6> 15001 <9df7> <9df7> 9867 <9df8> <9df9> 15003 <9dfa> <9dfa> 8054 <9dfb> <9dfc> 15005 <9dfd> <9dfd> 8557 <9dfe> <9dfe> 15007 <9e40> <9e44> 15008 <9e45> <9e45> 8193 <9e46> <9e47> 15013 <9e48> <9e48> 8593 <9e49> <9e49> 7760 <9e4a> <9e51> 15015 <9e52> <9e52> 8092 <9e53> <9e53> 15023 <9e54> <9e54> 9178 <9e55> <9e55> 15024 <9e56> <9e56> 8275 <9e57> <9e5c> 15025 endcidrange 100 begincidrange <9e5d> <9e5d> 9193 <9e5e> <9e5e> 9188 <9e5f> <9e60> 15031 <9e61> <9e61> 8661 <9e62> <9e62> 15033 <9e63> <9e63> 9190 <9e64> <9e66> 15034 <9e67> <9e67> 9183 <9e68> <9e6b> 15037 <9e6c> <9e6c> 7759 <9e6d> <9e6e> 15041 <9e6f> <9e6f> 9177 <9e70> <9e71> 15043 <9e72> <9e72> 8212 <9e73> <9e73> 15045 <9e74> <9e74> 9196 <9e75> <9e75> 9195 <9e76> <9e7a> 15046 <9e7b> <9e7b> 9176 <9e7c> <9e7c> 9198 <9e7d> <9e7e> 15051 <9e80> <9e84> 15053 <9e85> <9e85> 9870 <9e86> <9e86> 15058 <9e87> <9e87> 9197 <9e88> <9e90> 15059 <9e91> <9e91> 8186 <9e92> <9e95> 15068 <9e96> <9e96> 9174 <9e97> <9e97> 9192 <9e98> <9ea1> 15072 <9ea2> <9ea2> 8454 <9ea3> <9ea5> 15082 <9ea6> <9ea6> 8203 <9ea7> <9ea8> 15085 <9ea9> <9ea9> 8550 <9eaa> <9ead> 15087 <9eae> <9eae> 9199 <9eaf> <9eb2> 15091 <9eb3> <9eb3> 8585 <9eb4> <9eb4> 8280 <9eb5> <9eb6> 15095 <9eb7> <9eb7> 9191 <9eb8> <9ef4> 15097 <9ef5> <9ef5> 8611 <9ef6> <9efe> 15158 <9f40> <9f4d> 15167 <9f4e> <9f4e> 8570 <9f4f> <9f6e> 15181 <9f6f> <9f6f> 8613 <9f70> <9f7e> 15213 <9f80> <9f91> 15228 <9f92> <9f92> 8226 <9f93> <9f97> 15246 <9f98> <9f98> 9430 <9f99> <9fa5> 15251 <9fa6> <9fa6> 9018 <9fa7> <9fa8> 15264 <9fa9> <9fa9> 7918 <9faa> <9fab> 15266 <9fac> <9fac> 9429 <9fad> <9fc8> 15268 <9fc9> <9fc9> 8744 <9fca> <9fcc> 15296 <9fcd> <9fcd> 9431 <9fce> <9fe0> 15299 <9fe1> <9fe1> 8444 <9fe2> <9fea> 15318 <9feb> <9feb> 7815 <9fec> <9fed> 15327 <9fee> <9fee> 9432 <9fef> <9ff3> 15329 <9ff4> <9ff4> 7866 <9ff5> <9ffc> 15334 <9ffd> <9ffd> 8473 <9ffe> <9ffe> 15342 15343 8556 15346 9433 15348 8743 15350 7775 15354 8863 15359 8029 15364 8124 15370 9434 15371 8521 15384 8262 15386 8192 15396 8592 endcidrange 100 begincidrange 15412 8712 15414 7910 15415 9411 15433 8396 15454 9024 15468 7889 15478 8620 15482 8879 15497 96 9897 190 22353 240 250 262 356 439 525 549 602 635 9907 9970 668 700 9992 10016 10018 10019 10050 7703 738 15513 8630 7741 15526 8757 15560 9111 15561 9109 15564 8767 8490 15566 15569 7890 15595 9110 9112 15596 8354 15597 814 8036 15598 8235 15600 9108 8505 15601 8543 8641 9114 15602 9113 15604 15653 908 15686 8640 15692 9312 15734 9308 15744 15746 8541 15759 8741 8298 15764 15776 9313 15785 9307 15805 9314 15807 8020 15813 endcidrange 100 begincidrange 9311 15824 15834 8428 15836 9309 15840 9315 15843 9316 15848 15863 9381 15883 7792 15896 8335 15924 7746 15928 8014 15933 7857 15941 7819 15952 8134 15988 9646 16010 16013 7937 8704 16015 9650 7831 16025 8363 16026 9651 16036 8232 16038 16039 9647 16040 9649 16041 9644 16051 7758 16055 8706 9643 8838 16057 9645 16058 9654 16059 8675 9652 8751 8549 9655 16060 7913 16067 7717 16083 16084 9664 16107 8858 16108 940 16115 8814 16126 8125 16127 8068 8370 16128 8259 16129 16173 9860 16196 1034 16205 9455 16206 9454 16243 8308 16248 9863 16254 9456 endcidrange 100 begincidrange 16264 9869 16272 8864 16288 1128 16294 8107 16297 9896 16341 16355 9449 16363 9445 16366 8698 16367 1222 16385 8520 16405 9444 16408 9446 8439 16413 8299 16414 8871 16433 9452 16441 9451 16444 9443 16449 9450 16458 1316 16471 7826 16472 7719 16481 8166 16491 9447 8210 7916 16494 9448 16498 16527 8038 9436 16555 1410 16558 9890 16576 9437 16578 8206 16581 9435 7864 16582 16616 1504 16649 8853 16663 7808 16665 9847 16672 9764 8041 8747 16682 9599 8027 16698 8603 16704 9853 16705 1598 16735 8608 8582 16738 8429 16739 9657 16745 8170 16748 7844 endcidrange 100 begincidrange 8417 16756 9656 8800 16757 8418 16758 8513 16780 16787 8135 16789 1692 16819 7745 16835 9700 16851 8070 16876 16879 8115 16908 7919 1786 16910 8868 16912 9704 16913 9699 16930 8465 16932 9702 16938 9703 16947 8257 16956 16966 9706 16970 8079 16971 9708 16972 9707 16976 8400 8221 16992 1880 8183 16993 7821 17001 9705 17015 9710 8250 17017 9875 17020 9701 9709 17024 8201 17025 8293 17026 9891 17029 17045 1974 17078 9717 7932 17096 8228 17102 9883 17108 9715 17109 8921 17110 9716 17111 9243 17112 8136 17115 8059 17116 9245 17117 8780 8008 9244 endcidrange 100 begincidrange 9246 8447 8602 17118 8337 17119 8359 17121 9251 7835 9250 17123 8464 17124 8845 8049 7928 9249 17125 7923 17128 8625 9254 9253 8480 17138 2068 17141 8474 9252 17143 9256 17144 9258 9257 17146 8852 17147 8894 17148 7729 17149 9260 17156 8117 17157 9259 8111 17169 8296 8676 17171 7969 17174 8449 17175 8572 8522 9261 17182 8148 17184 8145 17185 7731 17192 9263 17193 9262 17195 9264 8667 17196 8536 17201 8130 17204 2162 17209 8889 17212 9270 17213 7822 9273 17216 8645 9271 8594 17222 9274 7961 8588 7744 8883 17223 8287 9272 9266 8820 endcidrange 100 begincidrange 17226 7836 9265 8325 17227 9269 17231 9275 17233 8119 9267 17235 8276 8670 17240 9268 17241 9277 8073 9276 17243 8046 7896 17246 7871 9285 17247 8777 17248 9281 17250 7751 8022 17251 8326 17253 8598 17255 9283 9279 17256 8227 17257 9282 17258 9278 17260 2256 9894 17261 9038 9286 9291 9284 17273 9255 9292 17277 7951 17286 9287 9289 9288 17287 8642 17290 8558 17293 7939 17296 9290 8540 17297 8891 9296 17299 9876 9295 9718 8273 17300 9294 17301 8890 8045 17303 9298 9297 17308 9301 17318 8841 8470 17319 9300 17323 2350 8443 17326 9280 endcidrange 100 begincidrange 17329 8486 8033 9885 17335 8074 9302 9305 9304 17336 8110 17338 8730 17343 8058 9293 9303 17345 9299 17353 9248 17354 8671 9861 17355 7790 17356 8740 9840 17359 8634 17360 9306 17361 8191 17363 17365 9698 17392 9882 17393 2444 17396 7914 17412 7724 17415 8290 9457 17425 9458 17426 9714 17444 8725 17446 17452 8622 17473 2538 17484 8416 17498 9666 17520 9665 17521 8488 17542 17543 8601 17547 8215 7840 8485 8525 17561 9668 8349 8842 17562 9667 17563 8569 2632 8248 17566 8533 17568 8658 17623 17626 9415 17630 8825 17652 2726 17657 8483 17666 endcidrange 100 begincidrange 9413 17668 9417 17675 8340 17678 8854 17680 7799 17687 7942 17706 8101 17708 17712 8345 17713 7853 9416 8360 17728 8223 17732 8389 17733 9418 17734 2820 17738 8176 17742 9414 17743 8797 8926 17747 8236 17752 8545 17764 8763 8665 8139 8137 17767 17791 7777 17810 9711 17818 8088 17819 2914 17821 9712 17822 8072 17824 8696 17826 8994 17853 9014 17867 17879 3008 17912 8875 17950 8127 17958 8061 17964 9011 17968 17971 3102 18004 8013 18005 9012 18018 8177 18020 8587 18039 9033 18046 8715 18061 9030 18068 9031 18078 8595 18079 9889 18083 8034 18086 endcidrange 100 begincidrange 3196 18089 9037 9032 18104 7776 18133 9029 18134 7954 18140 18147 8216 9013 18162 9020 18173 3290 18177 9839 18191 9041 18198 8096 18200 9016 18202 8731 18206 9026 18218 9039 18221 9021 18225 9028 9009 18228 9035 18229 9019 18230 9040 18237 7860 8614 18241 8651 18243 9045 18250 3384 18256 9022 18259 8052 18260 9008 18261 9856 18264 8410 18266 9034 18274 8081 18279 8455 18280 9023 18290 8180 9027 18306 18308 8722 18315 8711 18321 9049 18324 8788 18333 9010 18334 3478 7718 9047 18336 9048 8258 8531 18343 8379 18346 9050 18358 9046 18361 9015 endcidrange 100 begincidrange 18364 8185 18372 9043 18383 8289 18386 18387 7829 18401 8265 18406 8002 18407 8168 18413 3572 18416 18479 9690 18495 9687 18502 3666 18510 8494 18549 8626 18559 18571 8606 18572 9692 18577 8300 18596 8742 18598 3760 18600 9696 18614 8827 18620 9694 18622 9697 18625 9685 18640 7787 18646 9691 18647 7817 18649 9689 18652 18654 8721 18655 8745 9686 18662 9693 9695 18670 8175 18679 9688 3854 18680 7977 18693 7771 18696 8310 18699 8855 18705 9872 18708 8511 18714 8600 18718 7816 18719 8844 18733 18734 3948 18767 9713 18788 8204 18791 7768 8876 18798 endcidrange 100 begincidrange 9895 18816 9846 18823 18824 8161 9659 18853 4042 9662 18855 8925 18857 9661 18866 7722 18880 9660 9658 18886 9663 18889 8583 18893 9835 18894 7807 18896 8621 18898 18907 8086 18917 7986 18920 8324 18923 8502 18925 9400 18926 9402 4136 18934 9404 18938 8420 18941 9401 18942 9405 18944 9406 18946 9407 18950 8146 18952 8189 18954 9403 7981 18955 9737 18980 9738 18981 7828 18982 18984 8927 7883 7949 18989 8055 18992 8683 18993 8929 18994 8559 18995 8928 18996 8682 18998 8930 8395 18999 8056 19000 7906 19002 8690 4230 19003 8528 19004 8147 19007 endcidrange 100 begincidrange 8933 19008 7922 19012 8479 19014 8669 19017 8532 19019 8935 19020 8834 19023 8934 19028 8936 19032 8932 19038 8810 19039 8939 19040 8937 8381 19041 8938 19043 8893 19045 7838 19047 8950 8679 8726 19049 8503 19051 8492 19053 7784 8946 7991 8947 19054 8943 8016 7952 8648 19055 8945 19056 8944 19061 8942 19063 4324 19064 8941 8862 8940 8162 19067 8446 19070 8953 19073 7855 19074 8758 19076 8951 19077 8765 19080 7810 8118 19081 8612 8618 8952 8529 19082 8032 19083 8519 19086 8517 19089 8156 19090 8961 19093 7925 19095 8728 19097 7878 19099 endcidrange 100 begincidrange 8960 19101 8884 19102 8553 19104 8957 19105 8426 19106 8948 19107 8955 19108 8956 8231 19109 8288 8959 19112 8958 7879 19115 8972 19116 8949 19119 4418 8966 19120 8970 8659 19121 8963 19124 8967 8971 19125 8031 19127 8969 19128 8962 7940 8861 19130 8699 19131 8968 19132 8364 19133 8334 8965 8599 19134 8561 8856 19135 8023 19138 8322 19141 8977 19142 8964 19145 8975 7733 19146 8401 8976 8099 19147 8662 19148 8710 19151 19153 8973 19156 8978 8333 8979 19158 8931 19163 8122 19168 8312 19172 4512 19179 8840 19182 8982 8043 19186 8980 19192 endcidrange 100 begincidrange 8496 8981 8552 19193 8388 19194 8984 19207 8729 8727 19209 8405 19212 8010 19214 8768 19219 7891 19221 19227 7753 19230 9755 19233 7789 8440 19236 8187 8985 19237 8974 19242 8983 19243 4606 19252 8392 19265 7933 19270 19313 7739 8831 19329 7948 7769 7972 19330 8378 8037 7920 8548 7984 8801 19334 4695 19335 8866 9387 19336 9391 7912 7993 19337 7752 8304 7848 19338 9388 7927 8566 9389 19339 8315 8005 9386 8267 8239 8026 9392 19340 8887 8063 19341 8805 19342 9394 8475 7761 19348 9396 19349 9395 19353 7839 19354 8472 19355 8372 9135 endcidrange 100 begincidrange 8635 8306 8085 19356 7946 9398 19357 8849 9397 8824 7892 19359 8179 19365 8873 9399 7976 8457 8903 19370 9390 8881 19375 8806 19377 8795 8900 19378 8469 4789 19379 8746 9393 19380 8509 19385 7957 8796 19389 7956 19425 8826 19428 19435 8430 19440 9720 19448 4883 19466 8084 19498 8752 19521 19527 9725 19531 9728 19537 9734 19549 4977 19557 9727 19562 9724 7820 9730 19571 8781 19572 9732 9726 9731 19573 9729 19578 9733 19582 7843 9736 19585 9735 19588 8432 19604 19606 7803 8807 7990 8150 19613 8672 19616 9356 19617 9357 19623 8450 19626 endcidrange 100 begincidrange 9364 5071 19630 9363 19636 9358 19642 8857 9361 9366 9359 9362 19647 9367 19648 8113 19652 9370 19653 9369 19654 8792 9368 19655 9371 19662 7945 8422 19663 8230 9375 8025 9373 19668 19672 7995 9372 19673 7738 8283 19675 8048 19679 9376 19682 8507 19686 7943 19688 8816 8759 19690 9426 19692 8627 5165 8773 9377 19693 8872 19695 8828 8112 19698 9378 19703 8006 19713 9088 9365 19714 9360 19715 7728 19726 7837 7755 7754 8362 19729 19741 9851 19759 9202 19771 5259 8830 19772 8217 19773 8123 19783 8787 19797 7998 7846 8590 19798 8684 19801 endcidrange 100 begincidrange 7870 19802 8778 19803 8499 19807 7812 19813 8399 8674 19815 8719 19816 8233 19817 8307 8021 19818 9201 19820 7750 19821 8291 9203 19824 5353 19846 8990 19862 8755 19874 8992 19885 8647 19887 8892 19895 8988 19896 8785 19897 19902 7867 19909 8839 19914 8237 7851 19915 8989 19916 8991 19917 8987 19919 5447 19928 8993 19930 8789 19963 7823 19966 8716 8100 19977 19986 8347 8664 19990 9722 19991 9721 19992 8500 19994 9459 9464 19995 9463 7880 9462 19996 8832 19998 7877 9467 20003 5541 20004 9466 20005 7917 20006 9469 20017 9465 20018 9470 8397 endcidrange 100 begincidrange 20019 9480 9476 20024 9478 20026 9471 8336 20029 7901 7973 20032 9475 9474 20033 7802 8358 20035 8149 20043 7953 20047 9479 9472 9477 20048 9497 20054 9493 20055 9484 8241 20057 9483 9487 9498 9481 20059 9486 8756 9491 8064 20061 9473 5635 20065 9495 9494 20067 9496 20070 7766 20073 9485 20076 8403 20077 8314 8398 20079 9488 20081 7765 20084 9482 20087 9489 20092 8106 20101 9502 7967 20102 9517 8733 20105 9522 20107 8571 20108 8623 20118 9516 20119 9512 20121 8332 20122 9519 20123 8636 20124 9501 20127 9525 20129 8717 9510 20130 5729 endcidrange 100 begincidrange 9524 9514 9503 9521 9500 20131 9509 20134 8653 20139 8666 20140 8562 9534 20141 8271 20145 9539 20146 8663 20147 7740 20148 9513 20151 9505 20153 7935 20155 9535 20165 9540 20166 9507 7824 9530 9541 20169 9533 20170 8385 20171 8451 9504 9532 9531 9528 20173 9536 20177 8141 20178 7960 20181 9547 20185 9543 9551 20189 5823 20190 8880 20196 9542 20197 9548 20199 7834 9554 9520 9545 20201 9553 7882 20204 8402 20205 8120 20208 8313 20209 8619 20211 9549 7845 20213 8268 8320 20215 9837 20217 9527 20218 9546 8632 20224 9550 20225 9468 9556 endcidrange 100 begincidrange 20227 20229 7996 20230 7893 20231 9558 20237 8808 20240 7894 20242 9559 9555 20250 9544 20253 5917 8412 20254 9561 20257 8087 9557 20261 8829 20264 9598 20267 8316 20270 9562 20271 9566 20273 7732 20275 8542 20285 9568 20286 8610 9044 20295 9571 9511 20297 9518 9560 20298 7963 20299 8835 20300 9572 20301 8352 20303 9573 20304 9569 20306 9570 20312 9580 20315 9581 8224 20318 9567 9578 6011 20320 9582 20323 9529 9564 20327 9576 9579 7791 20330 8132 9575 20331 9563 20332 9757 20335 9515 20347 9585 20348 9591 20349 9506 20358 9523 20365 20367 endcidrange 100 begincidrange 8234 20369 9526 9587 9583 20370 8851 9592 20373 9584 20376 9589 20378 9537 9565 20383 8218 6105 20388 9594 8198 20391 8567 20392 9499 20394 9508 20395 9595 20398 8867 20402 9593 20407 9574 20408 8083 20413 9596 20414 9492 20425 9597 20427 9586 20428 9588 20434 8782 20436 8646 20437 8351 20441 9590 20442 8292 8895 9756 8798 20444 6199 20461 7797 20473 8317 20480 9151 8467 20481 9152 20483 7749 20485 8152 9156 20486 9154 8452 20487 8637 20488 8071 9155 20489 8809 20492 8003 20500 7966 9849 7915 20501 7989 8330 20503 9159 9161 9158 20504 endcidrange 100 begincidrange 8783 20508 9163 20511 8691 20513 8695 9167 9166 9162 9165 20514 9168 20517 9836 20519 9153 20520 8174 9169 6293 8184 20521 9171 20524 9170 9172 7832 20527 7980 20532 9173 20533 7793 9873 20535 9157 20537 8986 20574 8468 20577 8836 20579 8732 20585 7806 8269 20586 8705 20590 7897 6387 20599 8114 20600 8786 20603 8057 20605 8535 20615 8639 20616 8735 20621 8253 20622 8213 20624 9893 20625 8534 20635 8516 20637 7825 8791 20638 8202 8338 20642 20647 8784 20652 7875 20656 6481 20678 8616 20684 9741 20699 9740 20702 9742 20703 8242 20706 9739 endcidrange 100 begincidrange 20719 8899 20726 20734 7971 20756 6575 20766 9877 20772 9822 20789 9821 20794 9874 20796 9823 20798 8589 8445 20799 8000 20805 9317 20810 9319 20812 9318 20813 20818 8649 20835 8713 7881 8425 20836 8650 8518 9669 8668 20837 9310 20838 8527 20839 9670 6669 9671 8769 8586 7727 7900 20840 8383 8244 20843 9673 20846 9672 20850 8718 20852 9675 20853 8573 20859 8062 20861 9676 8131 20867 8377 20869 8577 20870 8154 20878 8563 7905 9677 20883 9678 8694 20887 8779 9681 20890 7872 20891 8200 20893 9680 20896 9682 20898 7978 20899 7794 9683 20902 endcidrange 100 begincidrange 6763 8638 9684 8260 20904 9679 8435 20905 7936 20911 9420 20916 9880 20917 9848 20918 9422 20920 9423 20925 8376 20932 9424 20933 9425 20934 7924 20944 9115 20946 9854 20947 20949 9117 9119 20951 9121 20952 7921 20953 8734 20955 9122 20956 8523 7734 8501 20963 8109 20967 7763 20968 6857 20970 9123 8707 20971 7911 20972 9124 8343 7908 20974 8760 20978 9125 20980 8090 20982 8643 20984 7982 20990 9116 20999 9126 21002 9118 21006 8245 9127 21007 9128 21010 8309 21011 9129 9131 8171 9132 21013 8042 8441 21017 9830 21019 9831 21023 7788 21024 endcidrange 100 begincidrange 9133 21027 6951 21037 8301 8770 7938 21055 8579 21057 7813 8681 21058 7767 21070 8869 9223 8138 21084 9218 8066 21085 9224 9220 21087 8497 21088 8580 21089 9219 21090 8302 9227 21091 7999 21101 8295 21104 7045 21112 8151 21117 7811 21118 9231 21121 9230 8391 9229 21128 9234 21134 8375 21136 9200 21153 9233 9236 21154 8560 21155 9221 8460 9237 21160 8294 21165 9042 9235 9232 9238 8433 21166 9226 21170 9225 21172 9240 21173 8103 21178 8700 21179 7139 8129 9222 21181 8860 21184 8270 21186 9242 9241 21187 9228 21191 7721 21207 9825 21225 endcidrange 100 begincidrange 9892 8564 9827 9826 21226 21231 9845 21243 8524 7233 21262 9850 21267 9888 21277 9832 21283 7888 21284 8342 21285 9164 21286 9160 21290 8766 21291 9829 21307 9828 21313 8761 21314 8266 21334 9759 21338 9758 21340 7327 21344 9760 21349 9761 21350 9762 21360 9767 7737 9765 21361 9769 21368 9774 9771 21370 9770 9773 21381 9768 8633 21382 21394 9782 9776 21399 9784 21404 8205 9783 21405 9797 21414 9786 21415 9795 7421 21419 9792 21420 9789 9793 21423 9790 21424 9791 8128 21426 9787 21427 9794 21431 9796 21434 9785 21442 9804 21443 9799 9803 endcidrange 100 begincidrange 21451 9801 21454 9800 21456 9802 8456 21457 21464 9805 21469 9780 21471 9809 21472 9808 9810 21474 9807 21477 9778 9806 9811 21480 9815 21481 9781 21482 9779 21483 9814 7515 21484 9812 21486 9816 21492 9813 7757 21494 9819 21502 9818 21503 9817 8238 9775 21504 9798 21508 9766 21509 9820 21516 9772 21521 9763 21531 9777 21532 7609 21565 8348 21567 9600 21570 8924 21572 7941 8331 21578 9601 21579 9603 9602 21594 8686 21595 8578 21606 8771 21611 9607 21612 9608 21613 21615 9604 21616 8701 21618 8687 21619 9610 9612 21625 8007 21635 7965 21638 endcidrange 100 begincidrange 9613 21640 8144 9618 9615 21654 9620 7904 21662 9617 9621 21664 9623 21672 8374 21673 9624 21675 8438 21677 21692 9605 21697 9625 21698 9622 21707 9626 21711 9627 21712 21720 9629 21722 9630 21725 9036 21730 8004 21734 9824 9632 21740 9628 21743 9631 21744 8044 21745 9634 21759 8366 21762 9611 9635 21763 21770 9609 9637 21773 9636 21781 9638 9619 21783 9639 8738 9641 21787 21795 9640 21804 9606 21812 9633 9642 21816 9616 9614 21817 9864 21842 9886 9723 21845 8076 8692 21846 21847 8207 21863 8305 21874 9719 21876 21877 9878 21881 9871 21885 endcidrange 65 begincidrange 8922 21901 7873 21909 7859 21913 9834 21919 9866 21920 9833 21922 9752 21924 21930 9754 21933 9843 21939 21961 8390 8811 21979 9427 7814 21982 9743 21983 9745 21987 9747 21989 9744 9746 8240 21991 9841 21992 9748 21994 9750 21997 9749 21998 8434 22003 9751 22007 22008 8247 22016 8371 22018 7970 9453 22021 7988 22024 2562 16595 8204 20611 4697 22032 22094 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBK2K-V b/Resources/cmap/GBK2K-V deleted file mode 100644 index 68b90b33de5..00000000000 --- a/Resources/cmap/GBK2K-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GBK2K-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GBK2K-H) %%BeginResource: CMap (GBK2K-V) %%Title: (GBK2K-V Adobe GB1 4) %%Version: 1.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GBK2K-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 4 def end def /CMapName /GBK2K-V def /CMapVersion 1.000 def /CMapType 1 def /XUID [1 10 25600] def /WMode 1 def 41 begincidrange 575 574 598 7704 599 582 7706 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7711 22359 22361 22370 22360 22368 22369 22372 22374 22373 22371 22376 22378 22385 22377 22383 22384 22387 22389 22388 22386 22394 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBKp-EUC-H b/Resources/cmap/GBKp-EUC-H deleted file mode 100644 index e0d752e9870..00000000000 --- a/Resources/cmap/GBKp-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBKp-EUC-H) %%Title: (GBKp-EUC-H Adobe GB1 2) %%Version: 1.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 2 def end def /CMapName /GBKp-EUC-H def /CMapVersion 1.000 def /CMapType 1 def /XUID [1 10 25455] def /WMode 0 def 2 begincodespacerange <00> <80> <8140> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <8140> <8178> 10072 <8179> <8179> 8281 <817a> <817e> 10129 <8180> <8185> 10134 <8186> <8186> 8689 <8187> <81ec> 10140 <81ed> <81ed> 8178 <81ee> <81f5> 10242 <81f6> <81f6> 8285 <81f7> <81fe> 10250 <8240> <8252> 10258 <8253> <8253> 9884 <8254> <8261> 10277 <8262> <8262> 8629 <8263> <8273> 10291 <8274> <8274> 8908 <8275> <8279> 10308 <827a> <827a> 8214 <827b> <827c> 10313 <827d> <827d> 7778 <827e> <827e> 10315 <8280> <8280> 7968 <8281> <8282> 10316 <8283> <8283> 8319 <8284> <828f> 10318 <8290> <8290> 8284 <8291> <82a4> 10330 <82a5> <82a5> 8596 <82a6> <82c7> 10350 <82c8> <82c8> 7781 <82c9> <82c9> 8833 <82ca> <82e0> 10384 <82e1> <82e1> 8909 <82e2> <82e2> 10407 <82e3> <82e3> 8458 <82e4> <82e4> 7742 <82e5> <82ec> 10408 <82ed> <82ed> 9855 <82ee> <82f1> 10416 <82f2> <82f2> 8750 <82f3> <82f6> 10420 <82f7> <82f7> 7830 <82f8> <82f8> 8907 <82f9> <82f9> 8812 <82fa> <82fa> 10424 <82fb> <82fb> 8471 <82fc> <82fe> 10425 <8340> <8340> 10428 <8341> <8341> 8424 <8342> <8344> 10429 <8345> <8345> 8916 <8346> <8347> 10432 <8348> <8348> 8121 <8349> <834b> 10434 <834c> <834c> 8920 <834d> <8352> 10437 <8353> <8353> 8415 <8354> <8356> 10443 <8357> <8357> 8386 <8358> <835d> 10446 <835e> <835e> 8597 <835f> <8364> 10452 <8365> <8365> 8108 <8366> <8366> 8915 <8367> <8371> 10458 <8372> <8372> 8065 <8373> <8377> 10469 <8378> <8378> 8720 <8379> <8379> 10474 <837a> <837a> 8911 <837b> <837b> 10475 <837c> <837c> 8723 <837d> <837d> 10476 <837e> <837e> 8164 <8380> <8380> 8080 <8381> <8385> 10477 <8386> <8386> 8918 <8387> <8388> 10482 <8389> <8389> 8912 <838a> <838a> 8910 <838b> <838c> 10484 <838d> <838d> 9857 <838e> <8393> 10486 <8394> <8394> 7798 <8395> <839d> 10492 <839e> <839e> 8753 <839f> <83a5> 10501 <83a6> <83a6> 7827 <83a7> <83aa> 10508 <83ab> <83ab> 8914 <83ac> <83ad> 10512 <83ae> <83ae> 8919 <83af> <83af> 8917 <83b0> <83b0> 8913 <83b1> <83b9> 10514 <83ba> <83ba> 7909 <83bb> <83c8> 10523 <83c9> <83c9> 8229 <83ca> <83f5> 10537 endcidrange 100 begincidrange <83f6> <83f6> 7887 <83f7> <83fe> 10581 <8440> <844f> 10589 <8450> <8450> 8153 <8451> <8470> 10605 <8471> <8471> 8904 <8472> <8473> 10637 <8474> <8474> 8803 <8475> <8476> 10639 <8477> <8477> 9859 <8478> <847e> 10641 <8480> <8481> 10648 <8482> <8482> 7959 <8483> <848d> 10650 <848e> <848e> 7979 <848f> <8491> 10661 <8492> <8492> 8906 <8493> <8493> 7833 <8494> <849c> 10664 <849d> <849d> 8015 <849e> <84a0> 10673 <84a1> <84a1> 8143 <84a2> <84a2> 8246 <84a3> <84a3> 7994 <84a4> <84a4> 10676 <84a5> <84a5> 8905 <84a6> <84a6> 8089 <84a7> <84a8> 10677 <84a9> <84a9> 8053 <84aa> <84c4> 10679 <84c5> <84c5> 8126 <84c6> <84d2> 10706 <84d3> <84d3> 7885 <84d4> <84d4> 10719 <84d5> <84d5> 8617 <84d6> <84d6> 10720 <84d7> <84d7> 8678 <84d8> <84d8> 10721 <84d9> <84d9> 8487 <84da> <84da> 8195 <84db> <84dc> 10722 <84dd> <84dd> 8498 <84de> <84e9> 10724 <84ea> <84ea> 8995 <84eb> <84ed> 10736 <84ee> <84ee> 8209 <84ef> <84f0> 10739 <84f1> <84f1> 8437 <84f2> <84fe> 10741 <8540> <8550> 10754 <8551> <8551> 8901 <8552> <8552> 8030 <8553> <8553> 10771 <8554> <8554> 8902 <8555> <855d> 10772 <855e> <855e> 8431 <855f> <8565> 10781 <8566> <8566> 8656 <8567> <857e> 10788 <8580> <8586> 10812 <8587> <8587> 8897 <8588> <858a> 10819 <858b> <858b> 7780 <858c> <8591> 10822 <8592> <8592> 8697 <8593> <8595> 10828 <8596> <8596> 8208 <8597> <8597> 10831 <8598> <8598> 8898 <8599> <85a1> 10832 <85a2> <85a2> 7770 <85a3> <85b1> 10841 <85b2> <85b2> 7842 <85b3> <85fe> 10856 <8640> <8649> 10932 <864a> <864a> 9069 <864b> <8653> 10942 <8654> <8654> 8775 <8655> <8667> 10951 <8668> <8668> 9068 <8669> <867e> 10970 <8680> <8695> 10992 <8696> <8696> 8604 <8697> <8698> 11014 <8699> <8699> 8393 <869a> <86a0> 11016 <86a1> <86a1> 8688 <86a2> <86c9> 11023 <86ca> <86ca> 8459 <86cb> <86cb> 11063 <86cc> <86cc> 8414 <86cd> <86cd> 11064 <86ce> <86ce> 7850 <86cf> <86d0> 11065 <86d1> <86d1> 8748 <86d2> <86db> 11067 <86dc> <86dc> 8408 <86dd> <86dd> 8896 <86de> <86e0> 11077 <86e1> <86e1> 8303 endcidrange 100 begincidrange <86e2> <86e7> 11080 <86e8> <86e8> 8609 <86e9> <86ed> 11086 <86ee> <86ee> 9081 <86ef> <86f3> 11091 <86f4> <86f4> 9074 <86f5> <86fe> 11096 <8740> <8740> 8554 <8741> <8743> 11106 <8744> <8744> 9084 <8745> <8748> 11109 <8749> <8749> 8368 <874a> <874a> 11113 <874b> <874b> 9082 <874c> <874c> 7796 <874d> <874e> 11114 <874f> <874f> 9079 <8750> <8756> 11116 <8757> <8757> 8012 <8758> <8759> 11123 <875a> <875a> 9080 <875b> <875b> 8655 <875c> <875c> 9064 <875d> <875d> 11125 <875e> <875e> 9073 <875f> <875f> 11126 <8760> <8760> 9065 <8761> <8765> 11127 <8766> <8766> 9844 <8767> <8779> 11132 <877a> <877a> 9071 <877b> <877c> 11151 <877d> <877d> 9072 <877e> <877e> 11153 <8780> <8780> 11154 <8781> <8781> 9078 <8782> <8782> 9075 <8783> <8785> 11155 <8786> <8786> 9087 <8787> <8787> 11158 <8788> <8788> 9076 <8789> <8789> 11159 <878a> <878a> 8373 <878b> <878c> 11160 <878d> <878d> 7899 <878e> <878e> 9842 <878f> <8792> 11162 <8793> <8793> 9070 <8794> <8797> 11166 <8798> <8798> 8631 <8799> <879c> 11170 <879d> <879d> 9077 <879e> <87a2> 11174 <87a3> <87a3> 9090 <87a4> <87a6> 11179 <87a7> <87a7> 8350 <87a8> <87b2> 11182 <87b3> <87b3> 9067 <87b4> <87b4> 11193 <87b5> <87b5> 8249 <87b6> <87ba> 11194 <87bb> <87bb> 9887 <87bc> <87be> 11199 <87bf> <87bf> 9085 <87c0> <87c0> 8693 <87c1> <87c1> 11202 <87c2> <87c2> 9089 <87c3> <87c9> 11203 <87ca> <87ca> 9083 <87cb> <87cb> 9086 <87cc> <87cc> 8652 <87cd> <87ce> 11210 <87cf> <87cf> 8923 <87d0> <87d1> 11212 <87d2> <87d2> 9066 <87d3> <87d3> 9865 <87d4> <87d4> 11214 <87d5> <87d5> 9879 <87d6> <87d9> 11215 <87da> <87da> 8865 <87db> <87f6> 11219 <87f7> <87f7> 9091 <87f8> <87f8> 7997 <87f9> <87f9> 11247 <87fa> <87fa> 8591 <87fb> <87fe> 11248 <8840> <8840> 8774 <8841> <8841> 8776 <8842> <8843> 11252 <8844> <8844> 8574 <8845> <8845> 11254 <8846> <8846> 8576 <8847> <887e> 11255 <8880> <88b9> 11311 <88ba> <88ba> 9002 <88bb> <88cb> 11369 <88cc> <88cc> 8843 <88cd> <88d3> 11386 <88d4> <88d4> 8069 <88d5> <88d6> 11393 endcidrange 100 begincidrange <88d7> <88d7> 8997 <88d8> <88de> 11395 <88df> <88df> 9004 <88e0> <88e4> 11402 <88e5> <88e5> 9006 <88e6> <88f1> 11407 <88f2> <88f2> 8709 <88f3> <88f3> 7736 <88f4> <88f5> 11419 <88f6> <88f6> 7795 <88f7> <88fe> 11421 <8940> <894a> 11429 <894b> <894b> 8163 <894c> <894c> 9017 <894d> <894d> 11440 <894e> <894e> 9003 <894f> <894f> 11441 <8950> <8950> 9005 <8951> <8953> 11442 <8954> <8954> 8575 <8955> <895c> 11445 <895d> <895d> 8615 <895e> <895e> 11453 <895f> <895f> 9007 <8960> <896c> 11454 <896d> <896d> 7805 <896e> <8970> 11467 <8971> <8971> 8406 <8972> <897b> 11470 <897c> <897c> 7874 <897d> <897e> 11480 <8980> <898a> 11482 <898b> <898b> 8882 <898c> <8998> 11493 <8999> <8999> 7903 <899a> <899d> 11506 <899e> <899e> 7929 <899f> <89a5> 11510 <89a6> <89a6> 8409 <89a7> <89a7> 11517 <89a8> <89a8> 8157 <89a9> <89ae> 11518 <89af> <89af> 8551 <89b0> <89b9> 11524 <89ba> <89ba> 8685 <89bb> <89bd> 11534 <89be> <89be> 8199 <89bf> <89bf> 8998 <89c0> <89c0> 9001 <89c1> <89c3> 11537 <89c4> <89c4> 8018 <89c5> <89c5> 8251 <89c6> <89c6> 9000 <89c7> <89c7> 11540 <89c8> <89c8> 8999 <89c9> <89cd> 11541 <89ce> <89ce> 7723 <89cf> <89d0> 11546 <89d1> <89d1> 8878 <89d2> <89d7> 11548 <89d8> <89d8> 8009 <89d9> <89da> 11554 <89db> <89db> 8504 <89dc> <89f3> 11556 <89f4> <89f4> 8321 <89f5> <89fe> 11580 <8a40> <8a40> 11590 <8a41> <8a41> 8060 <8a42> <8a58> 11591 <8a59> <8a59> 9051 <8a5a> <8a5a> 7902 <8a5b> <8a5b> 11614 <8a5c> <8a5c> 8098 <8a5d> <8a5d> 11615 <8a5e> <8a5e> 7930 <8a5f> <8a78> 11616 <8a79> <8a79> 8877 <8a7a> <8a7e> 11642 <8a80> <8ae3> 11647 <8ae4> <8ae4> 8255 <8ae5> <8afe> 11747 <8b40> <8b43> 11773 <8b44> <8b44> 7950 <8b45> <8b48> 11777 <8b49> <8b49> 9209 <8b4a> <8b79> 11781 <8b7a> <8b7a> 9212 <8b7b> <8b7e> 11829 <8b80> <8b8b> 11833 <8b8c> <8b8c> 8297 <8b8d> <8b9d> 11845 <8b9e> <8b9e> 9207 <8b9f> <8bb2> 11862 <8bb3> <8bb3> 9206 <8bb4> <8bb8> 11882 <8bb9> <8bb9> 9213 <8bba> <8bbd> 11887 <8bbe> <8bbe> 9208 <8bbf> <8bc5> 11891 <8bc6> <8bc6> 9210 endcidrange 100 begincidrange <8bc7> <8bc7> 11898 <8bc8> <8bc8> 9214 <8bc9> <8bc9> 8104 <8bca> <8bd3> 11899 <8bd4> <8bd4> 9217 <8bd5> <8bdb> 11909 <8bdc> <8bdc> 9215 <8bdd> <8be4> 11916 <8be5> <8be5> 9216 <8be6> <8bea> 11924 <8beb> <8beb> 8737 <8bec> <8bef> 11929 <8bf0> <8bf0> 8482 <8bf1> <8bfe> 11933 <8c40> <8c43> 11947 <8c44> <8c44> 9211 <8c45> <8c4e> 11951 <8c4f> <8c4f> 8538 <8c50> <8c56> 11961 <8c57> <8c57> 8677 <8c58> <8c5b> 11968 <8c5c> <8c5c> 8279 <8c5d> <8c7e> 11972 <8c80> <8c8a> 12006 <8c8b> <8c8b> 8421 <8c8c> <8c8c> 12017 <8c8d> <8c8d> 8495 <8c8e> <8c8e> 8355 <8c8f> <8c8f> 8481 <8c90> <8c90> 12018 <8c91> <8c91> 8660 <8c92> <8c92> 8165 <8c93> <8c98> 12019 <8c99> <8c99> 7818 <8c9a> <8c9a> 7735 <8c9b> <8ca1> 12025 <8ca2> <8ca2> 8094 <8ca3> <8ca3> 8870 <8ca4> <8ca4> 8680 <8ca5> <8ca5> 12032 <8ca6> <8ca6> 7898 <8ca7> <8ca7> 7865 <8ca8> <8cbf> 12033 <8cc0> <8cc0> 9052 <8cc1> <8cd1> 12057 <8cd2> <8cd2> 8272 <8cd3> <8cd3> 7783 <8cd4> <8cd4> 12074 <8cd5> <8cd5> 9204 <8cd6> <8cd8> 12075 <8cd9> <8cd9> 8510 <8cda> <8cf8> 12078 <8cf9> <8cf9> 7958 <8cfa> <8cfe> 12109 <8d40> <8d72> 12114 <8d73> <8d73> 9097 <8d74> <8d74> 12165 <8d75> <8d75> 7863 <8d76> <8d7a> 12166 <8d7b> <8d7b> 8628 <8d7c> <8d7e> 12171 <8d80> <8d87> 12174 <8d88> <8d88> 9103 <8d89> <8d8e> 12182 <8d8f> <8d8f> 7962 <8d90> <8d9d> 12188 <8d9e> <8d9e> 9099 <8d9f> <8db8> 12202 <8db9> <8db9> 9098 <8dba> <8de1> 12228 <8de2> <8de2> 9105 <8de3> <8de3> 12268 <8de4> <8de4> 8817 <8de5> <8de6> 12269 <8de7> <8de7> 9096 <8de8> <8df6> 12271 <8df7> <8df7> 9102 <8df8> <8dfd> 12286 <8dfe> <8dfe> 9101 <8e40> <8e45> 12292 <8e46> <8e46> 9100 <8e47> <8e55> 12298 <8e56> <8e56> 9104 <8e57> <8e57> 12313 <8e58> <8e58> 8243 <8e59> <8e59> 12314 <8e5a> <8e5a> 8764 <8e5b> <8e67> 12315 <8e68> <8e68> 8169 <8e69> <8e6d> 12328 <8e6e> <8e6e> 8277 <8e6f> <8e6f> 12333 <8e70> <8e70> 9106 <8e71> <8e7e> 12334 <8e80> <8e80> 8996 <8e81> <8e9a> 12348 <8e9b> <8e9b> 8515 <8e9c> <8e9e> 12374 <8e9f> <8e9f> 8489 <8ea0> <8ea3> 12377 endcidrange 100 begincidrange <8ea4> <8ea4> 8823 <8ea5> <8ea6> 12381 <8ea7> <8ea7> 7847 <8ea8> <8eab> 12383 <8eac> <8eac> 8837 <8ead> <8ead> 12387 <8eae> <8eae> 9092 <8eaf> <8ebc> 12388 <8ebd> <8ebd> 9095 <8ebe> <8ebe> 9094 <8ebf> <8ec2> 12402 <8ec3> <8ec3> 8848 <8ec4> <8ec4> 12406 <8ec5> <8ec5> 7748 <8ec6> <8ecc> 12407 <8ecd> <8ecd> 7730 <8ece> <8ece> 9093 <8ecf> <8ed5> 12414 <8ed6> <8ed6> 7955 <8ed7> <8ed7> 8051 <8ed8> <8eeb> 12421 <8eec> <8eec> 8160 <8eed> <8efe> 12441 <8f40> <8f51> 12459 <8f52> <8f52> 8327 <8f53> <8f53> 7800 <8f54> <8f54> 9134 <8f55> <8f55> 7926 <8f56> <8f56> 7985 <8f57> <8f5c> 12477 <8f5d> <8f5d> 8261 <8f5e> <8f63> 12483 <8f64> <8f64> 8568 <8f65> <8f7e> 12489 <8f80> <8f85> 12515 <8f86> <8f86> 9205 <8f87> <8f87> 12521 <8f88> <8f88> 8821 <8f89> <8f94> 12522 <8f95> <8f95> 9838 <8f96> <8f96> 12534 <8f97> <8f97> 7856 <8f98> <8f9a> 12535 <8f9b> <8f9b> 8323 <8f9c> <8f9c> 12538 <8f9d> <8f9d> 8584 <8f9e> <8fa0> 12539 <8fa1> <8fa1> 9852 <8fa2> <8fbc> 12542 <8fbd> <8fbd> 8133 <8fbe> <8fc3> 12569 <8fc4> <8fc4> 7841 <8fc5> <8fc5> 12575 <8fc6> <8fc6> 9107 <8fc7> <8fcc> 12576 <8fcd> <8fcd> 7947 <8fce> <8fd7> 12582 <8fd8> <8fd8> 7804 <8fd9> <8ffe> 12592 <9040> <907e> 12630 <9080> <909c> 12693 <909d> <909d> 9140 <909e> <909e> 8318 <909f> <90b9> 12722 <90ba> <90ba> 7907 <90bb> <90bf> 12749 <90c0> <90c0> 8341 <90c1> <90c1> 9147 <90c2> <90c4> 12754 <90c5> <90c5> 9145 <90c6> <90da> 12757 <90db> <90db> 7720 <90dc> <90dc> 9149 <90dd> <90ec> 12778 <90ed> <90ed> 9141 <90ee> <90ef> 12794 <90f0> <90f0> 9146 <90f1> <90f6> 12796 <90f7> <90f7> 9139 <90f8> <90fe> 12802 <9140> <9141> 12809 <9142> <9142> 8546 <9143> <914a> 12811 <914b> <914b> 7774 <914c> <914c> 12819 <914d> <914d> 7773 <914e> <9150> 12820 <9151> <9151> 9143 <9152> <9153> 12823 <9154> <9154> 7983 <9155> <9155> 9439 <9156> <9158> 12825 <9159> <9159> 9138 <915a> <915a> 8526 <915b> <915c> 12828 <915d> <915d> 8274 <915e> <9160> 12830 <9161> <9161> 9148 <9162> <9162> 12833 <9163> <9163> 8427 endcidrange 100 begincidrange <9164> <916d> 12834 <916e> <916e> 8754 <916f> <9175> 12844 <9176> <9176> 7743 <9177> <9179> 12851 <917a> <917a> 8219 <917b> <917b> 8380 <917c> <917c> 9150 <917d> <917e> 12854 <9180> <9183> 12856 <9184> <9184> 7854 <9185> <918c> 12860 <918d> <918d> 7931 <918e> <9190> 12868 <9191> <9191> 8329 <9192> <9192> 12871 <9193> <9193> 9137 <9194> <9196> 12872 <9197> <9197> 8644 <9198> <919a> 12875 <919b> <919b> 8724 <919c> <91a8> 12878 <91a9> <91a9> 8158 <91aa> <91aa> 8739 <91ab> <91ab> 9142 <91ac> <91b9> 12891 <91ba> <91ba> 9868 <91bb> <91bb> 9438 <91bc> <91be> 12905 <91bf> <91bf> 9440 <91c0> <91c2> 12908 <91c3> <91c3> 9144 <91c4> <91cc> 12911 <91cd> <91cd> 7809 <91ce> <91cf> 12920 <91d0> <91d0> 8190 <91d1> <91d1> 8017 <91d2> <91d2> 8673 <91d3> <91d3> 12922 <91d4> <91d4> 9136 <91d5> <91d5> 12923 <91d6> <91d6> 8142 <91d7> <91d7> 12924 <91d8> <91d8> 8478 <91d9> <91d9> 8225 <91da> <91de> 12925 <91df> <91df> 9441 <91e0> <91e1> 12930 <91e2> <91e2> 9379 <91e3> <91e9> 12932 <91ea> <91ea> 9380 <91eb> <91ef> 12939 <91f0> <91f0> 8819 <91f1> <91f1> 12944 <91f2> <91f2> 8624 <91f3> <91fe> 12945 <9240> <927e> 12957 <9280> <92b5> 13020 <92b6> <92b6> 8657 <92b7> <92cd> 13074 <92ce> <92ce> 8476 <92cf> <92cf> 13097 <92d0> <92d0> 9053 <92d1> <92d3> 13098 <92d4> <92d4> 9858 <92d5> <92de> 13101 <92df> <92df> 8461 <92e0> <92e0> 8282 <92e1> <92fd> 13111 <92fe> <92fe> 8077 <9340> <934f> 13140 <9350> <9350> 8703 <9351> <935c> 13156 <935d> <935d> 8024 <935e> <936f> 13168 <9370> <9370> 8539 <9371> <9375> 13186 <9376> <9376> 7862 <9377> <937e> 13191 <9380> <938b> 13199 <938c> <938c> 8411 <938d> <939c> 13211 <939d> <939d> 9056 <939e> <93a4> 13227 <93a5> <93a5> 9057 <93a6> <93a6> 13234 <93a7> <93a7> 8256 <93a8> <93b3> 13235 <93b4> <93b4> 8846 <93b5> <93b7> 13247 <93b8> <93b8> 8159 <93b9> <93ba> 13250 <93bb> <93bb> 9054 <93bc> <93bc> 13252 <93bd> <93bd> 7786 <93be> <93c5> 13253 <93c6> <93c6> 8194 <93c7> <93ce> 13261 <93cf> <93cf> 8339 <93d0> <93d6> 13269 endcidrange 100 begincidrange <93d7> <93d7> 9055 <93d8> <93da> 13276 <93db> <93db> 7852 <93dc> <93dc> 7764 <93dd> <93e0> 13279 <93e1> <93e1> 7944 <93e2> <93e3> 13283 <93e4> <93e4> 8384 <93e5> <93e5> 9058 <93e6> <93e8> 13285 <93e9> <93e9> 8544 <93ea> <93ea> 13288 <93eb> <93eb> 8605 <93ec> <93ec> 8078 <93ed> <93ed> 8749 <93ee> <93ee> 13289 <93ef> <93ef> 8263 <93f0> <93f0> 13290 <93f1> <93f1> 8802 <93f2> <93f3> 13291 <93f4> <93f4> 8039 <93f5> <93f5> 7858 <93f6> <93f9> 13293 <93fa> <93fa> 7849 <93fb> <93fd> 13297 <93fe> <93fe> 8140 <9440> <9443> 13300 <9444> <9444> 8050 <9445> <944c> 13304 <944d> <944d> 8344 <944e> <944f> 13312 <9450> <9450> 7762 <9451> <9451> 8356 <9452> <9452> 7964 <9453> <9453> 8847 <9454> <9454> 13314 <9455> <9455> 8173 <9456> <9457> 13315 <9458> <9458> 9061 <9459> <945a> 13317 <945b> <945b> 7725 <945c> <945c> 8530 <945d> <945d> 9062 <945e> <945e> 13319 <945f> <945f> 8442 <9460> <9463> 13320 <9464> <9464> 9059 <9465> <9465> 13324 <9466> <9466> 8346 <9467> <946d> 13325 <946e> <946e> 8252 <946f> <9471> 13332 <9472> <9472> 8182 <9473> <9473> 13335 <9474> <9474> 9060 <9475> <9475> 13336 <9476> <9476> 7785 <9477> <9477> 13337 <9478> <9478> 9063 <9479> <9479> 13338 <947a> <947a> 8477 <947b> <947e> 13339 <9480> <9480> 8793 <9481> <9481> 8278 <9482> <9482> 8547 <9483> <9486> 13343 <9487> <9487> 8105 <9488> <9488> 8188 <9489> <94a0> 13347 <94a1> <94a1> 7726 <94a2> <94b2> 13371 <94b3> <94b3> 7868 <94b4> <94b4> 13388 <94b5> <94b5> 8514 <94b6> <94be> 13389 <94bf> <94bf> 8222 <94c0> <94c0> 7747 <94c1> <94cb> 13398 <94cc> <94cc> 9428 <94cd> <94d7> 13409 <94d8> <94d8> 8815 <94d9> <94df> 13420 <94e0> <94e0> 7895 <94e1> <94fe> 13427 <9540> <9571> 13457 <9572> <9572> 8493 <9573> <957e> 13507 <9580> <9582> 13519 <9583> <9583> 8859 <9584> <959d> 13522 <959e> <959e> 8790 <959f> <959f> 9384 <95a0> <95b2> 13548 <95b3> <95b3> 7801 <95b4> <95b9> 13567 <95ba> <95ba> 8794 <95bb> <95ce> 13573 <95cf> <95cf> 9383 <95d0> <95d0> 13593 <95d1> <95d1> 9862 endcidrange 100 begincidrange <95d2> <95d2> 9382 <95d3> <95d3> 13594 <95d4> <95d4> 8654 <95d5> <95e0> 13595 <95e1> <95e1> 9385 <95e2> <95e6> 13607 <95e7> <95e7> 8167 <95e8> <95f0> 13612 <95f1> <95f1> 8466 <95f2> <95f7> 13621 <95f8> <95f8> 8508 <95f9> <95fd> 13627 <95fe> <95fe> 8028 <9640> <9655> 13632 <9656> <9656> 9412 <9657> <967b> 13654 <967c> <967c> 7884 <967d> <967e> 13691 <9680> <96fe> 13693 <9740> <9766> 13820 <9767> <9767> 9322 <9768> <976b> 13859 <976c> <976c> 8565 <976d> <976d> 13863 <976e> <976e> 9325 <976f> <977e> 13864 <9780> <9795> 13880 <9796> <9796> 9323 <9797> <9797> 8799 <9798> <979c> 13902 <979d> <979d> 7886 <979e> <97a2> 13907 <97a3> <97a3> 8818 <97a4> <97be> 13912 <97bf> <97bf> 9331 <97c0> <97ed> 13939 <97ee> <97ee> 8702 <97ef> <97f6> 13985 <97f7> <97f7> 7934 <97f8> <97fe> 13993 <9840> <9844> 14000 <9845> <9845> 9333 <9846> <9848> 14005 <9849> <9849> 8714 <984a> <984e> 14008 <984f> <984f> 8047 <9850> <9870> 14013 <9871> <9871> 9320 <9872> <9872> 14046 <9873> <9873> 8448 <9874> <987e> 14047 <9880> <9880> 14058 <9881> <9881> 9334 <9882> <988a> 14059 <988b> <988b> 7975 <988c> <988c> 8407 <988d> <989f> 14068 <98a0> <98a0> 9340 <98a1> <98a9> 14087 <98aa> <98aa> 8097 <98ab> <98b5> 14096 <98b6> <98b6> 8874 <98b7> <98b7> 8197 <98b8> <98b9> 14107 <98ba> <98ba> 9324 <98bb> <98c6> 14109 <98c7> <98c7> 8254 <98c8> <98ca> 14121 <98cb> <98cb> 7756 <98cc> <98cf> 14124 <98d0> <98d0> 8506 <98d1> <98d2> 14128 <98d3> <98d3> 8708 <98d4> <98e2> 14130 <98e3> <98e3> 8387 <98e4> <98e4> 8512 <98e5> <98e5> 9335 <98e6> <98ee> 14145 <98ef> <98ef> 9332 <98f0> <98f1> 14154 <98f2> <98f2> 8413 <98f3> <98fe> 14156 <9940> <9942> 14168 <9943> <9943> 8040 <9944> <9944> 14171 <9945> <9945> 8581 <9946> <9965> 14172 <9966> <9966> 9330 <9967> <996d> 14204 <996e> <996e> 7861 <996f> <9974> 14211 <9975> <9975> 9336 <9976> <9979> 14217 <997a> <997a> 8075 <997b> <997b> 9348 <997c> <997e> 14221 <9980> <9984> 14224 <9985> <9985> 9881 <9986> <9988> 14229 <9989> <9989> 9346 endcidrange 100 begincidrange <998a> <998d> 14232 <998e> <998e> 8353 <998f> <9990> 14236 <9991> <9991> 8082 <9992> <9998> 14238 <9999> <9999> 7992 <999a> <99a8> 14245 <99a9> <99a9> 9349 <99aa> <99af> 14260 <99b0> <99b0> 9344 <99b1> <99b1> 9326 <99b2> <99b2> 14266 <99b3> <99b3> 9339 <99b4> <99b4> 9350 <99b5> <99b5> 9329 <99b6> <99bc> 14267 <99bd> <99bd> 9347 <99be> <99be> 9328 <99bf> <99bf> 14274 <99c0> <99c0> 9321 <99c1> <99c1> 14275 <99c2> <99c2> 9343 <99c3> <99c8> 14276 <99c9> <99c9> 9327 <99ca> <99cd> 14282 <99ce> <99ce> 9345 <99cf> <99d0> 14286 <99d1> <99d1> 8736 <99d2> <99d9> 14288 <99da> <99da> 8181 <99db> <99df> 14296 <99e0> <99e0> 8436 <99e1> <99e4> 14301 <99e5> <99e5> 9341 <99e6> <99e7> 14305 <99e8> <99e8> 9337 <99e9> <99eb> 14307 <99ec> <99ec> 9342 <99ed> <99f3> 14310 <99f4> <99f4> 9338 <99f5> <99fe> 14317 <9a40> <9a49> 14327 <9a4a> <9a4a> 8419 <9a4b> <9a56> 14337 <9a57> <9a57> 8365 <9a58> <9a64> 14349 <9a65> <9a65> 9419 <9a66> <9a66> 14362 <9a67> <9a67> 8019 <9a68> <9a70> 14363 <9a71> <9a71> 8537 <9a72> <9a75> 14372 <9a76> <9a76> 8211 <9a77> <9a77> 7987 <9a78> <9a7e> 14376 <9a80> <9a87> 14383 <9a88> <9a88> 7772 <9a89> <9a8b> 14391 <9a8c> <9a8c> 9352 <9a8d> <9a90> 14394 <9a91> <9a91> 9351 <9a92> <9a96> 14398 <9a97> <9a97> 9354 <9a98> <9a99> 14403 <9a9a> <9a9a> 9353 <9a9b> <9a9b> 9355 <9a9c> <9a9d> 14405 <9a9e> <9a9e> 8067 <9a9f> <9aa1> 14407 <9aa2> <9aa2> 8463 <9aa3> <9aa3> 8155 <9aa4> <9aa9> 14410 <9aaa> <9aaa> 8367 <9aab> <9acf> 14416 <9ad0> <9ad0> 9408 <9ad1> <9ad5> 14453 <9ad6> <9ad6> 8813 <9ad7> <9ad9> 14458 <9ada> <9ada> 9409 <9adb> <9ae1> 14461 <9ae2> <9ae2> 8394 <9ae3> <9ae3> 14468 <9ae4> <9ae4> 8423 <9ae5> <9ae5> 9410 <9ae6> <9afe> 14469 <9b40> <9b7e> 14494 <9b80> <9bd0> 14557 <9bd1> <9bd1> 9180 <9bd2> <9bdb> 14638 <9bdc> <9bdc> 9179 <9bdd> <9bfe> 14648 <9c40> <9c52> 14682 <9c53> <9c53> 8286 <9c54> <9c58> 14701 <9c59> <9c59> 8772 <9c5a> <9c5a> 9186 <9c5b> <9c5b> 14706 <9c5c> <9c5c> 8404 <9c5d> <9c74> 14707 <9c75> <9c75> 8607 endcidrange 100 begincidrange <9c76> <9c78> 14731 <9c79> <9c79> 7782 <9c7a> <9c7e> 14734 <9c80> <9c85> 14739 <9c86> <9c86> 8035 <9c87> <9c9c> 14745 <9c9d> <9c9d> 9181 <9c9e> <9caa> 14767 <9cab> <9cab> 8555 <9cac> <9cc9> 14780 <9cca> <9cca> 8885 <9ccb> <9cce> 14810 <9ccf> <9ccf> 7974 <9cd0> <9ce5> 14814 <9ce6> <9ce6> 7779 <9ce7> <9ce7> 8328 <9ce8> <9ceb> 14836 <9cec> <9cec> 7869 <9ced> <9ced> 14840 <9cee> <9cee> 9025 <9cef> <9cfa> 14841 <9cfb> <9cfb> 8011 <9cfc> <9cfd> 14853 <9cfe> <9cfe> 8850 <9d40> <9d41> 14855 <9d42> <9d42> 8484 <9d43> <9d45> 14857 <9d46> <9d46> 8264 <9d47> <9d47> 9184 <9d48> <9d4c> 14860 <9d4d> <9d4d> 8311 <9d4e> <9d4e> 14865 <9d4f> <9d4f> 8762 <9d50> <9d60> 14866 <9d61> <9d61> 8369 <9d62> <9d67> 14883 <9d68> <9d68> 8001 <9d69> <9d69> 8220 <9d6a> <9d6d> 14889 <9d6e> <9d6e> 8888 <9d6f> <9d70> 14893 <9d71> <9d71> 8822 <9d72> <9d74> 14895 <9d75> <9d75> 8091 <9d76> <9d7a> 14898 <9d7b> <9d7b> 8095 <9d7c> <9d7c> 14903 <9d7d> <9d7d> 9674 <9d7e> <9d7e> 14904 <9d80> <9d89> 14905 <9d8a> <9d8a> 8382 <9d8b> <9d8c> 14915 <9d8d> <9d8d> 8116 <9d8e> <9d90> 14917 <9d91> <9d91> 9175 <9d92> <9d98> 14920 <9d99> <9d99> 8453 <9d9a> <9da0> 14927 <9da1> <9da1> 9185 <9da2> <9da2> 8172 <9da3> <9da6> 14934 <9da7> <9da7> 9194 <9da8> <9dab> 14938 <9dac> <9dac> 9187 <9dad> <9dad> 8462 <9dae> <9db1> 14942 <9db2> <9db2> 8102 <9db3> <9db3> 8196 <9db4> <9dbd> 14946 <9dbe> <9dbe> 8093 <9dbf> <9dc5> 14956 <9dc6> <9dc6> 9189 <9dc7> <9dc8> 14963 <9dc9> <9dc9> 8804 <9dca> <9dcc> 14965 <9dcd> <9dcd> 9442 <9dce> <9dd1> 14968 <9dd2> <9dd2> 9182 <9dd3> <9dd4> 14972 <9dd5> <9dd5> 7876 <9dd6> <9de0> 14974 <9de1> <9de1> 8886 <9de2> <9de2> 8361 <9de3> <9df0> 14985 <9df1> <9df1> 8491 <9df2> <9df3> 14999 <9df4> <9df4> 8357 <9df5> <9df6> 15001 <9df7> <9df7> 9867 <9df8> <9df9> 15003 <9dfa> <9dfa> 8054 <9dfb> <9dfc> 15005 <9dfd> <9dfd> 8557 <9dfe> <9dfe> 15007 <9e40> <9e44> 15008 <9e45> <9e45> 8193 <9e46> <9e47> 15013 <9e48> <9e48> 8593 <9e49> <9e49> 7760 <9e4a> <9e51> 15015 endcidrange 100 begincidrange <9e52> <9e52> 8092 <9e53> <9e53> 15023 <9e54> <9e54> 9178 <9e55> <9e55> 15024 <9e56> <9e56> 8275 <9e57> <9e5c> 15025 <9e5d> <9e5d> 9193 <9e5e> <9e5e> 9188 <9e5f> <9e60> 15031 <9e61> <9e61> 8661 <9e62> <9e62> 15033 <9e63> <9e63> 9190 <9e64> <9e66> 15034 <9e67> <9e67> 9183 <9e68> <9e6b> 15037 <9e6c> <9e6c> 7759 <9e6d> <9e6e> 15041 <9e6f> <9e6f> 9177 <9e70> <9e71> 15043 <9e72> <9e72> 8212 <9e73> <9e73> 15045 <9e74> <9e74> 9196 <9e75> <9e75> 9195 <9e76> <9e7a> 15046 <9e7b> <9e7b> 9176 <9e7c> <9e7c> 9198 <9e7d> <9e7e> 15051 <9e80> <9e84> 15053 <9e85> <9e85> 9870 <9e86> <9e86> 15058 <9e87> <9e87> 9197 <9e88> <9e90> 15059 <9e91> <9e91> 8186 <9e92> <9e95> 15068 <9e96> <9e96> 9174 <9e97> <9e97> 9192 <9e98> <9ea1> 15072 <9ea2> <9ea2> 8454 <9ea3> <9ea5> 15082 <9ea6> <9ea6> 8203 <9ea7> <9ea8> 15085 <9ea9> <9ea9> 8550 <9eaa> <9ead> 15087 <9eae> <9eae> 9199 <9eaf> <9eb2> 15091 <9eb3> <9eb3> 8585 <9eb4> <9eb4> 8280 <9eb5> <9eb6> 15095 <9eb7> <9eb7> 9191 <9eb8> <9ef4> 15097 <9ef5> <9ef5> 8611 <9ef6> <9efe> 15158 <9f40> <9f4d> 15167 <9f4e> <9f4e> 8570 <9f4f> <9f6e> 15181 <9f6f> <9f6f> 8613 <9f70> <9f7e> 15213 <9f80> <9f91> 15228 <9f92> <9f92> 8226 <9f93> <9f97> 15246 <9f98> <9f98> 9430 <9f99> <9fa5> 15251 <9fa6> <9fa6> 9018 <9fa7> <9fa8> 15264 <9fa9> <9fa9> 7918 <9faa> <9fab> 15266 <9fac> <9fac> 9429 <9fad> <9fc8> 15268 <9fc9> <9fc9> 8744 <9fca> <9fcc> 15296 <9fcd> <9fcd> 9431 <9fce> <9fe0> 15299 <9fe1> <9fe1> 8444 <9fe2> <9fea> 15318 <9feb> <9feb> 7815 <9fec> <9fed> 15327 <9fee> <9fee> 9432 <9fef> <9ff3> 15329 <9ff4> <9ff4> 7866 <9ff5> <9ffc> 15334 <9ffd> <9ffd> 8473 <9ffe> <9ffe> 15342 15343 8556 15346 9433 15348 8743 15350 7775 15354 8863 15359 8029 15364 8124 15370 9434 15371 8521 endcidrange 100 begincidrange 15384 8262 15386 8192 15396 8592 15412 8712 15414 7910 15415 9411 15433 8396 15454 9024 15468 7889 15478 8620 15482 8879 15497 96 9897 190 240 250 262 356 439 525 549 602 635 9907 9970 668 700 9992 10016 10018 10019 10050 7703 738 15513 8630 7741 15526 8757 15560 9111 15561 9109 15564 8767 8490 15566 15569 7890 15595 9110 9112 15596 8354 15597 814 8036 15598 8235 15600 9108 8505 15601 8543 8641 9114 15602 9113 15604 15653 908 15686 8640 15692 9312 15734 9308 15744 15746 8541 15759 8741 8298 15764 15776 9313 15785 9307 endcidrange 100 begincidrange 15805 9314 15807 8020 15813 9311 15824 15834 8428 15836 9309 15840 9315 15843 9316 15848 15863 9381 15883 7792 15896 8335 15924 7746 15928 8014 15933 7857 15941 7819 15952 8134 15988 9646 16010 16013 7937 8704 16015 9650 7831 16025 8363 16026 9651 16036 8232 16038 16039 9647 16040 9649 16041 9644 16051 7758 16055 8706 9643 8838 16057 9645 16058 9654 16059 8675 9652 8751 8549 9655 16060 7913 16067 7717 16083 16084 9664 16107 8858 16108 940 16115 8814 16126 8125 16127 8068 8370 16128 8259 16129 16173 9860 16196 1034 16205 9455 16206 9454 16243 endcidrange 100 begincidrange 8308 16248 9863 16254 9456 16264 9869 16272 8864 16288 1128 16294 8107 16297 9896 16341 16355 9449 16363 9445 16366 8698 16367 1222 16385 8520 16405 9444 16408 9446 8439 16413 8299 16414 8871 16433 9452 16441 9451 16444 9443 16449 9450 16458 1316 16471 7826 16472 7719 16481 8166 16491 9447 8210 7916 16494 9448 16498 16527 8038 9436 16555 1410 16558 9890 16576 9437 16578 8206 16581 9435 7864 16582 16616 1504 16649 8853 16663 7808 16665 9847 16672 9764 8041 8747 16682 9599 8027 16698 8603 16704 9853 16705 1598 16735 8608 8582 16738 8429 16739 endcidrange 100 begincidrange 9657 16745 8170 16748 7844 8417 16756 9656 8800 16757 8418 16758 8513 16780 16787 8135 16789 1692 16819 7745 16835 9700 16851 8070 16876 16879 8115 16908 7919 1786 16910 8868 16912 9704 16913 9699 16930 8465 16932 9702 16938 9703 16947 8257 16956 16966 9706 16970 8079 16971 9708 16972 9707 16976 8400 8221 16992 1880 8183 16993 7821 17001 9705 17015 9710 8250 17017 9875 17020 9701 9709 17024 8201 17025 8293 17026 9891 17029 17045 1974 17078 9717 7932 17096 8228 17102 9883 17108 9715 17109 8921 17110 9716 17111 9243 17112 8136 17115 8059 17116 endcidrange 100 begincidrange 9245 17117 8780 8008 9244 9246 8447 8602 17118 8337 17119 8359 17121 9251 7835 9250 17123 8464 17124 8845 8049 7928 9249 17125 7923 17128 8625 9254 9253 8480 17138 2068 17141 8474 9252 17143 9256 17144 9258 9257 17146 8852 17147 8894 17148 7729 17149 9260 17156 8117 17157 9259 8111 17169 8296 8676 17171 7969 17174 8449 17175 8572 8522 9261 17182 8148 17184 8145 17185 7731 17192 9263 17193 9262 17195 9264 8667 17196 8536 17201 8130 17204 2162 17209 8889 17212 9270 17213 7822 9273 17216 8645 9271 8594 17222 9274 7961 8588 7744 8883 endcidrange 100 begincidrange 17223 8287 9272 9266 8820 17226 7836 9265 8325 17227 9269 17231 9275 17233 8119 9267 17235 8276 8670 17240 9268 17241 9277 8073 9276 17243 8046 7896 17246 7871 9285 17247 8777 17248 9281 17250 7751 8022 17251 8326 17253 8598 17255 9283 9279 17256 8227 17257 9282 17258 9278 17260 2256 9894 17261 9038 9286 9291 9284 17273 9255 9292 17277 7951 17286 9287 9289 9288 17287 8642 17290 8558 17293 7939 17296 9290 8540 17297 8891 9296 17299 9876 9295 9718 8273 17300 9294 17301 8890 8045 17303 9298 9297 17308 9301 17318 8841 8470 17319 9300 endcidrange 100 begincidrange 17323 2350 8443 17326 9280 17329 8486 8033 9885 17335 8074 9302 9305 9304 17336 8110 17338 8730 17343 8058 9293 9303 17345 9299 17353 9248 17354 8671 9861 17355 7790 17356 8740 9840 17359 8634 17360 9306 17361 8191 17363 17365 9698 17392 9882 17393 2444 17396 7914 17412 7724 17415 8290 9457 17425 9458 17426 9714 17444 8725 17446 17452 8622 17473 2538 17484 8416 17498 9666 17520 9665 17521 8488 17542 17543 8601 17547 8215 7840 8485 8525 17561 9668 8349 8842 17562 9667 17563 8569 2632 8248 17566 8533 17568 8658 17623 17626 9415 17630 8825 endcidrange 100 begincidrange 17652 2726 17657 8483 17666 9413 17668 9417 17675 8340 17678 8854 17680 7799 17687 7942 17706 8101 17708 17712 8345 17713 7853 9416 8360 17728 8223 17732 8389 17733 9418 17734 2820 17738 8176 17742 9414 17743 8797 8926 17747 8236 17752 8545 17764 8763 8665 8139 8137 17767 17791 7777 17810 9711 17818 8088 17819 2914 17821 9712 17822 8072 17824 8696 17826 8994 17853 9014 17867 17879 3008 17912 8875 17950 8127 17958 8061 17964 9011 17968 17971 3102 18004 8013 18005 9012 18018 8177 18020 8587 18039 9033 18046 8715 18061 9030 18068 9031 18078 8595 endcidrange 100 begincidrange 18079 9889 18083 8034 18086 3196 18089 9037 9032 18104 7776 18133 9029 18134 7954 18140 18147 8216 9013 18162 9020 18173 3290 18177 9839 18191 9041 18198 8096 18200 9016 18202 8731 18206 9026 18218 9039 18221 9021 18225 9028 9009 18228 9035 18229 9019 18230 9040 18237 7860 8614 18241 8651 18243 9045 18250 3384 18256 9022 18259 8052 18260 9008 18261 9856 18264 8410 18266 9034 18274 8081 18279 8455 18280 9023 18290 8180 9027 18306 18308 8722 18315 8711 18321 9049 18324 8788 18333 9010 18334 3478 7718 9047 18336 9048 8258 8531 18343 8379 18346 endcidrange 100 begincidrange 9050 18358 9046 18361 9015 18364 8185 18372 9043 18383 8289 18386 18387 7829 18401 8265 18406 8002 18407 8168 18413 3572 18416 18479 9690 18495 9687 18502 3666 18510 8494 18549 8626 18559 18571 8606 18572 9692 18577 8300 18596 8742 18598 3760 18600 9696 18614 8827 18620 9694 18622 9697 18625 9685 18640 7787 18646 9691 18647 7817 18649 9689 18652 18654 8721 18655 8745 9686 18662 9693 9695 18670 8175 18679 9688 3854 18680 7977 18693 7771 18696 8310 18699 8855 18705 9872 18708 8511 18714 8600 18718 7816 18719 8844 18733 18734 3948 18767 9713 18788 endcidrange 100 begincidrange 8204 18791 7768 8876 18798 9895 18816 9846 18823 18824 8161 9659 18853 4042 9662 18855 8925 18857 9661 18866 7722 18880 9660 9658 18886 9663 18889 8583 18893 9835 18894 7807 18896 8621 18898 18907 8086 18917 7986 18920 8324 18923 8502 18925 9400 18926 9402 4136 18934 9404 18938 8420 18941 9401 18942 9405 18944 9406 18946 9407 18950 8146 18952 8189 18954 9403 7981 18955 9737 18980 9738 18981 7828 18982 18984 8927 7883 7949 18989 8055 18992 8683 18993 8929 18994 8559 18995 8928 18996 8682 18998 8930 8395 18999 8056 19000 7906 19002 8690 4230 endcidrange 100 begincidrange 19003 8528 19004 8147 19007 8933 19008 7922 19012 8479 19014 8669 19017 8532 19019 8935 19020 8834 19023 8934 19028 8936 19032 8932 19038 8810 19039 8939 19040 8937 8381 19041 8938 19043 8893 19045 7838 19047 8950 8679 8726 19049 8503 19051 8492 19053 7784 8946 7991 8947 19054 8943 8016 7952 8648 19055 8945 19056 8944 19061 8942 19063 4324 19064 8941 8862 8940 8162 19067 8446 19070 8953 19073 7855 19074 8758 19076 8951 19077 8765 19080 7810 8118 19081 8612 8618 8952 8529 19082 8032 19083 8519 19086 8517 19089 8156 19090 8961 19093 7925 endcidrange 100 begincidrange 19095 8728 19097 7878 19099 8960 19101 8884 19102 8553 19104 8957 19105 8426 19106 8948 19107 8955 19108 8956 8231 19109 8288 8959 19112 8958 7879 19115 8972 19116 8949 19119 4418 8966 19120 8970 8659 19121 8963 19124 8967 8971 19125 8031 19127 8969 19128 8962 7940 8861 19130 8699 19131 8968 19132 8364 19133 8334 8965 8599 19134 8561 8856 19135 8023 19138 8322 19141 8977 19142 8964 19145 8975 7733 19146 8401 8976 8099 19147 8662 19148 8710 19151 19153 8973 19156 8978 8333 8979 19158 8931 19163 8122 19168 8312 19172 4512 19179 8840 19182 endcidrange 100 begincidrange 8982 8043 19186 8980 19192 8496 8981 8552 19193 8388 19194 8984 19207 8729 8727 19209 8405 19212 8010 19214 8768 19219 7891 19221 19227 7753 19230 9755 19233 7789 8440 19236 8187 8985 19237 8974 19242 8983 19243 4606 19252 8392 19265 7933 19270 19313 7739 8831 19329 7948 7769 7972 19330 8378 8037 7920 8548 7984 8801 19334 4695 19335 8866 9387 19336 9391 7912 7993 19337 7752 8304 7848 19338 9388 7927 8566 9389 19339 8315 8005 9386 8267 8239 8026 9392 19340 8887 8063 19341 8805 19342 9394 8475 7761 19348 9396 19349 9395 19353 7839 endcidrange 100 begincidrange 19354 8472 19355 8372 9135 8635 8306 8085 19356 7946 9398 19357 8849 9397 8824 7892 19359 8179 19365 8873 9399 7976 8457 8903 19370 9390 8881 19375 8806 19377 8795 8900 19378 8469 4789 19379 8746 9393 19380 8509 19385 7957 8796 19389 7956 19425 8826 19428 19435 8430 19440 9720 19448 4883 19466 8084 19498 8752 19521 19527 9725 19531 9728 19537 9734 19549 4977 19557 9727 19562 9724 7820 9730 19571 8781 19572 9732 9726 9731 19573 9729 19578 9733 19582 7843 9736 19585 9735 19588 8432 19604 19606 7803 8807 7990 8150 19613 8672 19616 9356 endcidrange 100 begincidrange 19617 9357 19623 8450 19626 9364 5071 19630 9363 19636 9358 19642 8857 9361 9366 9359 9362 19647 9367 19648 8113 19652 9370 19653 9369 19654 8792 9368 19655 9371 19662 7945 8422 19663 8230 9375 8025 9373 19668 19672 7995 9372 19673 7738 8283 19675 8048 19679 9376 19682 8507 19686 7943 19688 8816 8759 19690 9426 19692 8627 5165 8773 9377 19693 8872 19695 8828 8112 19698 9378 19703 8006 19713 9088 9365 19714 9360 19715 7728 19726 7837 7755 7754 8362 19729 19741 9851 19759 9202 19771 5259 8830 19772 8217 19773 8123 19783 8787 19797 7998 endcidrange 100 begincidrange 7846 8590 19798 8684 19801 7870 19802 8778 19803 8499 19807 7812 19813 8399 8674 19815 8719 19816 8233 19817 8307 8021 19818 9201 19820 7750 19821 8291 9203 19824 5353 19846 8990 19862 8755 19874 8992 19885 8647 19887 8892 19895 8988 19896 8785 19897 19902 7867 19909 8839 19914 8237 7851 19915 8989 19916 8991 19917 8987 19919 5447 19928 8993 19930 8789 19963 7823 19966 8716 8100 19977 19986 8347 8664 19990 9722 19991 9721 19992 8500 19994 9459 9464 19995 9463 7880 9462 19996 8832 19998 7877 9467 20003 5541 20004 9466 20005 7917 20006 9469 endcidrange 100 begincidrange 20017 9465 20018 9470 8397 20019 9480 9476 20024 9478 20026 9471 8336 20029 7901 7973 20032 9475 9474 20033 7802 8358 20035 8149 20043 7953 20047 9479 9472 9477 20048 9497 20054 9493 20055 9484 8241 20057 9483 9487 9498 9481 20059 9486 8756 9491 8064 20061 9473 5635 20065 9495 9494 20067 9496 20070 7766 20073 9485 20076 8403 20077 8314 8398 20079 9488 20081 7765 20084 9482 20087 9489 20092 8106 20101 9502 7967 20102 9517 8733 20105 9522 20107 8571 20108 8623 20118 9516 20119 9512 20121 8332 20122 9519 20123 8636 20124 9501 20127 9525 endcidrange 100 begincidrange 20129 8717 9510 20130 5729 9524 9514 9503 9521 9500 20131 9509 20134 8653 20139 8666 20140 8562 9534 20141 8271 20145 9539 20146 8663 20147 7740 20148 9513 20151 9505 20153 7935 20155 9535 20165 9540 20166 9507 7824 9530 9541 20169 9533 20170 8385 20171 8451 9504 9532 9531 9528 20173 9536 20177 8141 20178 7960 20181 9547 20185 9543 9551 20189 5823 20190 8880 20196 9542 20197 9548 20199 7834 9554 9520 9545 20201 9553 7882 20204 8402 20205 8120 20208 8313 20209 8619 20211 9549 7845 20213 8268 8320 20215 9837 20217 9527 20218 9546 8632 endcidrange 100 begincidrange 20224 9550 20225 9468 9556 20227 20229 7996 20230 7893 20231 9558 20237 8808 20240 7894 20242 9559 9555 20250 9544 20253 5917 8412 20254 9561 20257 8087 9557 20261 8829 20264 9598 20267 8316 20270 9562 20271 9566 20273 7732 20275 8542 20285 9568 20286 8610 9044 20295 9571 9511 20297 9518 9560 20298 7963 20299 8835 20300 9572 20301 8352 20303 9573 20304 9569 20306 9570 20312 9580 20315 9581 8224 20318 9567 9578 6011 20320 9582 20323 9529 9564 20327 9576 9579 7791 20330 8132 9575 20331 9563 20332 9757 20335 9515 20347 9585 20348 9591 20349 endcidrange 100 begincidrange 9506 20358 9523 20365 20367 8234 20369 9526 9587 9583 20370 8851 9592 20373 9584 20376 9589 20378 9537 9565 20383 8218 6105 20388 9594 8198 20391 8567 20392 9499 20394 9508 20395 9595 20398 8867 20402 9593 20407 9574 20408 8083 20413 9596 20414 9492 20425 9597 20427 9586 20428 9588 20434 8782 20436 8646 20437 8351 20441 9590 20442 8292 8895 9756 8798 20444 6199 20461 7797 20473 8317 20480 9151 8467 20481 9152 20483 7749 20485 8152 9156 20486 9154 8452 20487 8637 20488 8071 9155 20489 8809 20492 8003 20500 7966 9849 7915 20501 7989 8330 endcidrange 100 begincidrange 20503 9159 9161 9158 20504 8783 20508 9163 20511 8691 20513 8695 9167 9166 9162 9165 20514 9168 20517 9836 20519 9153 20520 8174 9169 6293 8184 20521 9171 20524 9170 9172 7832 20527 7980 20532 9173 20533 7793 9873 20535 9157 20537 8986 20574 8468 20577 8836 20579 8732 20585 7806 8269 20586 8705 20590 7897 6387 20599 8114 20600 8786 20603 8057 20605 8535 20615 8639 20616 8735 20621 8253 20622 8213 20624 9893 20625 8534 20635 8516 20637 7825 8791 20638 8202 8338 20642 20647 8784 20652 7875 20656 6481 20678 8616 20684 9741 20699 9740 20702 endcidrange 100 begincidrange 9742 20703 8242 20706 9739 20719 8899 20726 20734 7971 20756 6575 20766 9877 20772 9822 20789 9821 20794 9874 20796 9823 20798 8589 8445 20799 8000 20805 9317 20810 9319 20812 9318 20813 20818 8649 20835 8713 7881 8425 20836 8650 8518 9669 8668 20837 9310 20838 8527 20839 9670 6669 9671 8769 8586 7727 7900 20840 8383 8244 20843 9673 20846 9672 20850 8718 20852 9675 20853 8573 20859 8062 20861 9676 8131 20867 8377 20869 8577 20870 8154 20878 8563 7905 9677 20883 9678 8694 20887 8779 9681 20890 7872 20891 8200 20893 9680 20896 9682 20898 endcidrange 100 begincidrange 7978 20899 7794 9683 20902 6763 8638 9684 8260 20904 9679 8435 20905 7936 20911 9420 20916 9880 20917 9848 20918 9422 20920 9423 20925 8376 20932 9424 20933 9425 20934 7924 20944 9115 20946 9854 20947 20949 9117 9119 20951 9121 20952 7921 20953 8734 20955 9122 20956 8523 7734 8501 20963 8109 20967 7763 20968 6857 20970 9123 8707 20971 7911 20972 9124 8343 7908 20974 8760 20978 9125 20980 8090 20982 8643 20984 7982 20990 9116 20999 9126 21002 9118 21006 8245 9127 21007 9128 21010 8309 21011 9129 9131 8171 9132 21013 8042 8441 21017 9830 endcidrange 100 begincidrange 21019 9831 21023 7788 21024 9133 21027 6951 21037 8301 8770 7938 21055 8579 21057 7813 8681 21058 7767 21070 8869 9223 8138 21084 9218 8066 21085 9224 9220 21087 8497 21088 8580 21089 9219 21090 8302 9227 21091 7999 21101 8295 21104 7045 21112 8151 21117 7811 21118 9231 21121 9230 8391 9229 21128 9234 21134 8375 21136 9200 21153 9233 9236 21154 8560 21155 9221 8460 9237 21160 8294 21165 9042 9235 9232 9238 8433 21166 9226 21170 9225 21172 9240 21173 8103 21178 8700 21179 7139 8129 9222 21181 8860 21184 8270 21186 9242 9241 21187 9228 endcidrange 100 begincidrange 21191 7721 21207 9825 21225 9892 8564 9827 9826 21226 21231 9845 21243 8524 7233 21262 9850 21267 9888 21277 9832 21283 7888 21284 8342 21285 9164 21286 9160 21290 8766 21291 9829 21307 9828 21313 8761 21314 8266 21334 9759 21338 9758 21340 7327 21344 9760 21349 9761 21350 9762 21360 9767 7737 9765 21361 9769 21368 9774 9771 21370 9770 9773 21381 9768 8633 21382 21394 9782 9776 21399 9784 21404 8205 9783 21405 9797 21414 9786 21415 9795 7421 21419 9792 21420 9789 9793 21423 9790 21424 9791 8128 21426 9787 21427 9794 21431 9796 21434 9785 endcidrange 100 begincidrange 21442 9804 21443 9799 9803 21451 9801 21454 9800 21456 9802 8456 21457 21464 9805 21469 9780 21471 9809 21472 9808 9810 21474 9807 21477 9778 9806 9811 21480 9815 21481 9781 21482 9779 21483 9814 7515 21484 9812 21486 9816 21492 9813 7757 21494 9819 21502 9818 21503 9817 8238 9775 21504 9798 21508 9766 21509 9820 21516 9772 21521 9763 21531 9777 21532 7609 21565 8348 21567 9600 21570 8924 21572 7941 8331 21578 9601 21579 9603 9602 21594 8686 21595 8578 21606 8771 21611 9607 21612 9608 21613 21615 9604 21616 8701 21618 8687 21619 9610 9612 endcidrange 100 begincidrange 21625 8007 21635 7965 21638 9613 21640 8144 9618 9615 21654 9620 7904 21662 9617 9621 21664 9623 21672 8374 21673 9624 21675 8438 21677 21692 9605 21697 9625 21698 9622 21707 9626 21711 9627 21712 21720 9629 21722 9630 21725 9036 21730 8004 21734 9824 9632 21740 9628 21743 9631 21744 8044 21745 9634 21759 8366 21762 9611 9635 21763 21770 9609 9637 21773 9636 21781 9638 9619 21783 9639 8738 9641 21787 21795 9640 21804 9606 21812 9633 9642 21816 9616 9614 21817 9864 21842 9886 9723 21845 8076 8692 21846 21847 8207 21863 8305 21874 9719 21876 endcidrange 70 begincidrange 21877 9878 21881 9871 21885 8922 21901 7873 21909 7859 21913 9834 21919 9866 21920 9833 21922 9752 21924 21930 9754 21933 9843 21939 21961 8390 8811 21979 9427 7814 21982 9743 21983 9745 21987 9747 21989 9744 9746 8240 21991 9841 21992 9748 21994 9750 21997 9749 21998 8434 22003 9751 22007 22008 8247 22016 8371 22018 7970 9453 22021 7988 22024 2562 16595 8204 20611 4697 22032 22094 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBKp-EUC-V b/Resources/cmap/GBKp-EUC-V deleted file mode 100644 index 25d00a65c0a..00000000000 --- a/Resources/cmap/GBKp-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GBKp-EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GBKp-EUC-H) %%BeginResource: CMap (GBKp-EUC-V) %%Title: (GBKp-EUC-V Adobe GB1 1) %%Version: 1.000 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GBKp-EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 1 def end def /CMapName /GBKp-EUC-V def /CMapVersion 1.000 def /CMapType 1 def /XUID [1 10 25456] def /WMode 1 def 20 begincidrange 575 574 598 7704 599 582 7706 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7711 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBT-EUC-H b/Resources/cmap/GBT-EUC-H deleted file mode 100644 index 745648316bd..00000000000 --- a/Resources/cmap/GBT-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBT-EUC-H) %%Title: (GBT-EUC-H Adobe GB1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 1 def end def /CMapName /GBT-EUC-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 480 def /XUID [1 10 25370] def /WMode 0 def 2 begincodespacerange <00> <80> endcodespacerange 1 beginnotdefrange <00> <1f> 7716 endnotdefrange 100 begincidrange <20> <20> 7716 <21> <7e> 814 96 190 240 250 262 356 439 525 549 602 635 668 700 738 814 908 940 7717 948 7718 950 7719 954 7721 965 7722 972 7723 991 7724 993 7725 998 7726 1000 7727 1008 7728 1017 7730 1019 7731 1023 7732 1027 7733 1029 1034 7734 1040 7736 1042 7737 1045 7738 1052 7739 1055 7741 1059 7744 1067 7745 1076 7746 1082 7748 1084 7749 1087 7750 1099 7753 1102 7754 1106 7756 1108 7757 1112 7758 1115 7759 1121 7763 1127 1128 7764 1135 7766 1140 7767 1149 7768 1153 7769 1166 7770 endcidrange 100 begincidrange 1183 7780 1190 7781 1192 7782 1195 7784 1207 7785 1220 7795 1224 7797 1229 7801 1231 7802 1236 7803 1243 7804 1247 7805 1252 7806 1256 7807 1258 7808 1260 7809 1267 7810 1269 7811 1272 7812 1279 7813 1281 7814 1283 7815 1289 7816 1292 7818 1294 7819 1298 7821 1301 7822 1303 7823 1305 7824 1313 7826 1318 7828 1322 7830 1327 7831 1331 7832 1336 7834 1340 7835 1347 7836 1350 7837 1355 7838 1358 7839 1361 7840 1363 7841 1368 7843 1374 7844 1376 7845 1393 7846 1395 7847 1404 7848 1407 1410 7849 1413 endcidrange 100 begincidrange 7850 1418 7854 1422 7855 1425 7857 1431 7862 1433 7863 1438 7866 1448 7867 1453 7868 1458 7869 1461 7870 1473 7873 1477 7874 1481 7876 1487 7877 1497 7879 1503 1504 7880 1509 7882 1511 7883 1513 7884 1515 7885 1520 7887 1523 7888 1527 7889 1537 7892 1540 7893 1542 7894 1549 7895 1552 7897 1556 7899 1558 7900 1561 7901 1563 7902 1569 7903 1577 7904 1580 7905 1583 7907 1585 7908 1590 7909 1593 7910 1596 7912 1601 7915 1605 7916 1614 7918 1617 7919 1621 7921 1623 7922 1634 7924 1639 7925 1642 7926 endcidrange 100 begincidrange 1645 7927 1647 7928 1654 7930 1658 7931 1663 7934 1665 7935 1670 7938 1675 7941 1677 7942 1682 7943 1686 1692 7944 1700 7946 1712 7948 1718 7949 1720 7950 1723 7952 1727 7953 1731 7955 1733 7956 1739 7957 1746 7961 1750 7963 1760 7964 1765 7965 1767 7966 1775 7967 1778 7969 1780 1786 7970 1794 7971 1800 7972 1803 7973 1805 7974 1807 7975 1812 7977 1824 7978 1829 7979 1834 7980 1842 7981 1845 7982 1847 7983 1849 7984 1851 7985 1853 7986 1856 7987 1862 7991 1864 7992 1867 7993 1871 7996 1874 7997 endcidrange 100 begincidrange 1876 7998 1879 1880 7999 1887 8000 1891 8001 1906 8002 1917 8003 1930 8004 1936 8006 1948 8007 1952 8008 1956 5605 1963 8009 1968 1974 8010 1978 8011 1980 8012 1984 8014 1988 8016 1990 8017 1993 8018 1997 8021 2000 8023 2023 8024 2026 8026 2045 8035 2049 8036 2055 8037 2061 8040 2064 8041 2067 2068 8042 2070 8043 2074 8045 2077 8047 2079 8048 2081 8049 2092 8052 2095 8053 2101 8054 2103 8055 2107 8057 2110 8058 2113 8060 2116 8061 2122 8064 2124 8065 2127 8066 2129 8067 2133 8070 2136 8072 2140 endcidrange 100 begincidrange 8073 2144 8076 2151 8081 2160 2162 8088 2169 8094 2174 8096 2180 8100 2182 8101 2188 8102 2193 8105 2198 8109 2204 8112 2209 8114 2217 8115 2220 8116 2227 8118 2237 8119 2250 8124 2255 8125 2258 8127 2261 8128 2264 8129 2266 8130 2269 8131 2273 8132 2279 8135 2282 8136 2288 8137 2297 8138 2308 8139 2313 8140 2317 8141 2322 8142 2325 8143 2327 8144 2329 8145 2334 8146 2341 8147 2344 8149 2348 2350 8151 2355 8152 2360 8153 2363 8154 2387 8155 2389 8156 2396 8157 2400 8159 2407 8160 2418 8163 2423 endcidrange 100 begincidrange 8164 2425 8165 2427 8166 2433 8167 2435 8168 2437 8169 2440 8171 2445 8172 2447 8173 2453 8174 2455 8175 2460 8177 2466 8181 2480 8194 2489 8196 2496 8197 2498 8198 2500 8199 2505 8200 2508 8201 2517 8202 2520 8204 2525 8207 2534 2538 8212 2543 8214 2551 8219 2562 8229 2568 8231 2572 8232 2576 8233 2579 8234 2583 8235 2590 8236 2597 8239 2600 8240 2607 8242 2611 8243 2614 8245 2621 8246 2623 8247 2631 2632 8251 2640 8258 2651 8267 2656 8268 2661 8270 2663 8271 2665 8272 2671 8275 2680 8281 2682 endcidrange 100 begincidrange 8282 2692 8290 2698 8295 2704 8298 2710 8303 2712 8304 2717 8308 2722 8312 2727 8313 2736 8314 2739 8315 7673 2746 8316 2756 8317 2765 8320 2770 8321 2772 8322 2780 8324 2783 8325 2790 8326 2795 8327 2803 8328 2806 8329 2812 8331 2816 8333 2819 2820 8334 2837 8335 2842 8336 2858 8337 2861 8338 2869 8339 2874 8343 2877 8344 2886 8345 2889 8346 2896 8347 2901 8349 2904 8350 2908 8353 2912 8355 8356 2916 8358 2923 8363 2931 8364 2935 8365 2939 8368 2941 8369 2943 8370 2958 8371 2965 8372 2980 8373 endcidrange 100 begincidrange 2985 8374 2998 3008 8375 3022 8377 3030 8379 3035 8380 3038 8381 3040 8382 3044 8384 3053 8387 3059 8388 3063 8389 3083 8391 3087 8392 3089 8393 3092 8394 3096 8395 3101 3102 8396 3105 8397 3108 8399 3111 8401 3113 8402 3117 8404 3123 8407 3128 8409 3132 8411 3134 8412 3136 8413 3139 8414 3142 8416 3146 8417 3149 8418 3155 8420 3157 8421 3164 8422 3169 8425 3180 8430 3190 8432 3193 8433 3195 3196 8434 3199 8435 3204 8437 3212 8438 3217 8439 3219 8440 3234 8444 3236 8445 3241 8446 3243 8447 3246 endcidrange 100 begincidrange 8448 3253 8449 3258 8450 3273 8451 3279 8454 3284 8456 3286 8457 3288 8458 3291 8459 3295 8460 3298 8462 3302 8463 3307 8464 3310 8465 3315 8467 3324 8469 3326 8470 3331 8471 3333 8472 3335 8473 3343 8474 3350 8475 3352 8476 3355 8477 3357 8478 3359 8479 3362 8480 3370 8481 3374 8483 3376 8484 3379 8486 3384 8487 3390 8490 3392 8491 3395 8493 3401 8494 3406 8497 3411 8498 3422 8499 3426 8500 3430 8502 3436 8504 3441 8505 3446 8506 3448 8507 3452 8508 3458 8510 3469 8512 3471 8513 3474 8514 3477 endcidrange 100 begincidrange 3478 8515 3485 8516 3489 8517 3491 8518 3497 8519 3500 8521 3502 8522 3509 8523 3517 8524 3522 8528 3526 8530 3529 8531 3531 8532 3542 8534 3546 8535 3549 8537 3552 8538 3558 8540 3564 8542 3566 8543 3574 8545 3580 8546 3584 8547 3591 8552 3596 8554 3602 8555 3604 8556 3616 8557 3618 8558 3620 8559 3626 8560 3630 8561 3632 8562 3636 8563 3638 8564 3641 8565 3657 8566 3662 8568 3666 8571 3679 8572 3685 8573 3689 8574 3694 8575 3697 8576 3703 8577 3705 8578 3716 8579 3720 8582 3727 8583 3730 8584 endcidrange 100 begincidrange 3735 8586 3737 8587 3748 8588 3754 3760 8589 3765 8591 3767 8592 3773 8596 3777 8598 3779 8599 3789 8600 3792 8601 3798 8603 3800 8604 3802 8605 3809 8609 3818 8612 3820 8613 3823 8615 3835 8616 3837 8617 3841 8618 3843 8619 3854 8621 3868 8622 3870 8623 3873 8624 3878 8626 3880 8627 3883 8628 3887 8631 3891 8632 3893 8633 3897 8635 3900 8637 3902 8638 3910 8643 3912 8644 3914 8645 3917 8646 3920 8647 3925 8648 3928 8649 3930 8650 3932 8651 3938 8652 3944 8654 3948 8655 3953 8656 3962 8658 3968 endcidrange 100 begincidrange 8661 3975 8663 3979 8664 3986 8665 3991 8666 4014 8667 4017 8668 4023 8669 4025 8670 4037 8673 4040 8674 4044 8676 4046 8677 4049 8678 4053 8679 4059 8682 4065 8685 4067 8686 4070 8688 4082 8691 4085 8692 4089 8694 4096 8696 4104 8697 4108 8699 4115 8701 4118 8702 4121 8704 4123 8705 4126 8706 4131 4136 8709 4138 8710 4141 8711 4145 8712 4151 8713 4155 8714 4158 8716 4165 8717 4167 8718 4171 8719 4173 8720 4175 8721 4183 8722 4189 8723 4194 8724 4205 8726 4211 8730 4215 8731 4217 8732 4221 8733 endcidrange 100 begincidrange 4224 8734 4227 8735 4230 8736 4242 8746 4244 8747 4247 8748 4252 8751 4254 8752 4257 8753 4267 8754 4269 8755 4274 8758 4283 8759 4294 8761 4297 8762 4300 8763 4306 8765 4309 8766 4314 8767 4322 8768 4324 8769 4328 8770 4332 8773 4342 8777 4346 8779 4348 8780 4352 8781 4355 8783 4360 8784 4363 8786 4365 8787 4370 8791 4375 8792 4380 8793 4388 8798 4392 8799 4394 8800 4402 8801 4408 8806 4413 8807 8808 4420 8810 4427 8811 4429 8812 4432 8813 4435 8814 4442 8818 4445 8819 4447 8820 4450 8821 4455 endcidrange 100 begincidrange 8822 4457 8823 4461 8825 4463 8826 4470 8827 4480 8829 4482 8830 4484 8831 4494 8834 4497 8835 4501 5611 4505 8837 4516 8841 4528 8843 4532 8844 4539 8845 4541 8846 4544 8848 4548 8849 4554 8850 4557 8851 4563 8852 4567 8855 4570 8856 4575 8857 4577 8858 4581 8859 4584 8861 4591 8863 4594 8864 4598 8866 4606 8869 4610 8870 4616 8873 4618 8874 4623 8878 4626 8880 4628 8881 4634 8886 4645 8887 4648 8888 4659 8889 4668 8893 4677 8894 4680 4695 8896 4731 8897 4734 8898 4736 8899 4740 8901 4744 8903 endcidrange 100 begincidrange 4746 8904 4752 8905 4755 8907 4776 8908 4782 4789 8910 4802 8911 4804 8912 4808 8915 4828 8916 4837 8920 4850 8921 4854 8922 4857 8923 4859 8924 4865 8925 4874 4883 8927 4946 8986 4957 8987 4970 8988 4972 8989 4977 8990 4980 8991 4983 8992 4987 8994 5004 8995 5006 8996 5024 8997 5026 8998 5036 8999 5039 9000 5043 9001 5045 9002 5052 9003 5055 9004 5058 9005 5064 5071 9008 5099 9009 5102 9010 5105 9011 5113 9014 5120 9015 5126 9016 5135 9017 5139 9019 5145 9021 5152 9022 5157 9023 5160 9024 9026 endcidrange 100 begincidrange 5166 9027 5172 9032 5176 9034 5183 9035 5186 9036 5192 9038 5216 9039 5224 9040 5227 9041 5233 9042 5240 9043 5246 9044 5252 9046 5257 9047 5259 9048 5272 9049 5279 9050 5285 9051 5297 9052 5306 9053 5309 9055 5315 9056 5325 9057 5331 9058 5335 9059 5342 9060 5351 5353 9061 5356 9063 5358 9064 5373 9065 5382 9067 5384 9068 5388 9070 5397 9071 5401 9072 5406 9073 5410 9075 5413 9076 5417 9077 5419 9078 5423 9079 5426 9080 5428 9081 5432 9082 5438 9083 5442 5447 9084 5470 9086 5478 9087 5487 9088 endcidrange 100 begincidrange 5493 9089 5498 9090 5511 9091 5527 9092 5535 9093 5541 9096 5552 9097 5554 9098 5557 9099 5561 9100 5568 9101 5570 9102 5574 9104 5582 9105 5589 9106 5600 1962 9107 5607 4504 5612 9108 5620 9110 5627 9111 5629 9112 5634 5635 9113 5639 9114 5643 9115 4293 9125 5681 9134 5683 9135 5692 9136 5703 9138 5705 9139 5710 9142 5723 9143 5728 5729 9147 5731 9148 5734 9149 5740 9150 5749 9151 5788 9174 5796 9175 5806 9176 5811 9178 5817 9179 5823 9180 5828 9182 5834 9183 5840 9186 5845 9188 5857 9189 5860 endcidrange 100 begincidrange 9190 5864 9191 5880 9192 5883 9193 5885 9194 5891 9195 5899 9197 5905 9198 5917 9199 5933 9200 5942 9201 5956 9202 5958 9203 5963 9204 5997 9205 5999 9206 6010 6011 9208 6014 9209 6023 9211 6025 9212 6032 9214 6042 9215 6052 9217 6056 9218 9249 6163 9307 6171 9309 6176 9310 6184 9311 6191 6199 9314 6207 9315 6211 9316 6221 9317 6225 9320 6231 9322 6236 9323 6240 9326 6245 9327 6247 9328 6250 9329 6260 9330 6262 9331 6266 9333 6268 9334 6270 9335 6274 9336 6276 9337 6278 9338 6288 9339 6292 9341 endcidrange 100 begincidrange 6294 9342 6306 9343 6314 9345 6316 9346 6329 9347 6331 9348 6334 9349 6347 9350 6351 9351 6361 9352 6364 9354 6366 9355 6368 9356 9374 6392 9379 6395 9381 6404 9382 6415 9383 6429 9384 6432 9385 6438 9386 6466 6481 9408 6488 9409 6491 9410 6499 9411 6506 9412 6524 9414 6526 9415 6535 9416 6539 9417 6546 9418 6568 6575 9419 6578 9420 6589 9426 6592 9427 6596 9429 6606 9431 6608 9432 6614 9433 6618 9434 6641 9435 6657 9436 6660 9437 6663 9438 6670 9439 6677 9440 6685 9442 6689 9443 6691 9444 6693 endcidrange 100 begincidrange 9445 6695 9446 6700 9447 6704 9449 6714 9451 6720 9452 6724 9453 6741 9454 6747 9455 6759 6763 9457 6791 9458 6794 9459 9518 6938 6951 9599 6954 9600 7008 9643 7012 9645 7014 9646 7024 9647 7027 9648 7030 9649 7038 9650 7040 9651 7043 7045 9652 7053 9653 7056 9654 7059 9655 7063 9656 7073 9657 7077 9658 7086 9659 7090 9660 7093 9662 7103 9663 7105 9664 7113 9665 7121 9666 7124 9667 7132 9668 7134 9669 9672 7152 9685 7157 9687 7164 9688 7174 9689 7180 9690 7184 9692 7186 9693 7190 9694 7208 9695 endcidrange 100 begincidrange 7217 9696 7226 9697 7232 7233 9698 7264 9699 7271 9700 7273 9701 7287 9702 7290 9703 7303 9705 7307 9706 7309 9707 7312 9708 7314 9709 7326 7327 9710 7332 9711 7342 9712 7348 9713 7360 9714 7366 9715 7375 9717 7381 9718 7401 9719 7406 9720 7412 7421 9721 7428 9723 7448 9725 7457 9726 7461 9727 7468 9729 7471 9731 7478 9732 7481 9733 7492 9735 7500 9736 7503 9737 7513 7515 9738 7518 9739 7521 9740 7523 9741 7526 9742 7531 9743 7545 9755 7552 9756 7554 9757 7556 9758 9806 7624 9821 7628 9823 7630 endcidrange 83 begincidrange 9824 7638 9825 7644 9826 7647 9828 7652 9830 7657 9832 7671 2745 7674 9833 7691 9834 7694 9835 1228 1290 1304 9841 1428 1486 9843 1526 9844 1619 1662 9846 1732 9847 1852 9849 1987 9851 2091 9855 2126 2153 9856 2316 9858 2417 9860 2458 9861 2522 9862 2554 9863 3034 3037 3050 3052 3058 9874 3218 3354 3468 3518 9879 3579 9880 3696 9883 3747 9884 4157 4313 9890 4347 4361 9892 4513 9893 4538 9894 4565 9896 4605 4633 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBT-EUC-V b/Resources/cmap/GBT-EUC-V deleted file mode 100644 index 39fd71e9446..00000000000 --- a/Resources/cmap/GBT-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GBT-EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GBT-EUC-H) %%BeginResource: CMap (GBT-EUC-V) %%Title: (GBT-EUC-V Adobe GB1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GBT-EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 1 def end def /CMapName /GBT-EUC-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 690 def /XUID [1 10 25371] def /WMode 1 def 20 begincidrange 575 574 598 7704 599 582 7706 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7711 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBpc-EUC-H b/Resources/cmap/GBpc-EUC-H deleted file mode 100644 index 106f6bef203..00000000000 --- a/Resources/cmap/GBpc-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBpc-EUC-H) %%Title: (GBpc-EUC-H Adobe GB1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 0 def end def /CMapName /GBpc-EUC-H def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 0 def /XUID [1 10 25364] def /WMode 0 def 3 begincodespacerange <00> <80> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 91 begincidrange <20> <7e> 1 <80> <80> 7712 96 190 240 250 262 356 439 525 549 602 635 668 700 738 814 908 940 1034 1128 1222 1316 1410 1504 1598 1692 1786 1880 1974 2068 2162 2256 2350 2444 2538 2632 2726 2820 2914 3008 3102 3196 3290 3384 3478 3572 3666 3760 3854 3948 4042 4136 4230 4324 4418 4512 4606 4695 4789 4883 4977 5071 5165 5259 5353 5447 5541 5635 5729 5823 5917 6011 6105 6199 6293 6387 6481 6575 6669 6763 6857 6951 7045 7139 7233 7327 7421 7515 7609 7713 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBpc-EUC-UCS2 b/Resources/cmap/GBpc-EUC-UCS2 deleted file mode 100644 index 147f491c8d4..00000000000 --- a/Resources/cmap/GBpc-EUC-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GBpc-EUC-UCS2C) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GBpc-EUC-UCS2C) %%BeginResource: CMap (GBpc-EUC-UCS2) %%Title: (GBpc-EUC-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GBpc-EUC-UCS2C usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GBpc_EUC_UCS2) def /Supplement 2 def end def /CMapName /GBpc-EUC-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 1 beginbfrange <006e0300> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBpc-EUC-UCS2C b/Resources/cmap/GBpc-EUC-UCS2C deleted file mode 100644 index 6ce652a88df..00000000000 --- a/Resources/cmap/GBpc-EUC-UCS2C +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (GBpc-EUC-UCS2C) %%Title: (GBpc-EUC-UCS2C) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GBpc_EUC_UCS2C) def /Supplement 2 def end def /CMapName /GBpc-EUC-UCS2C def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 4 begincodespacerange <00> <80> <83> endcodespacerange 100 beginbfrange <00> <7F> <0000> <80> <80> <00FC> <83> <0083> <00A9> <2122> <2026> <3000> <00B7> <02C9> <02C7> <00A8> <3003> <3005> <2014> <301C> <2016> <22EF> <2018> <201C> <3014> <3008> <3016> <3010> <00B1> <00D7> <00F7> <2236> <2227> <2211> <220F> <222A> <2229> <2208> <2237> <221A> <22A5> <2225> <2220> <2312> <2299> <222B> <222E> <2261> <224C> <2248> <223D> <221D> <2260> <226E> <2264> <221E> <2235> <2234> <2642> <2640> <00B0> <2032> <2103> <00A4> <00A2> <2030> <00A7> <2116> <2606> <2605> <25CB> <25CF> <25CE> <25C7> <25C6> <25A1> <25A0> <25B3> <25B2> <203B> <2192> <2190> <2193> <3013> <2488> <2474> <2460> <3220> <2160> <00A5> <203E> <3041> <30A1> <0391> <03A3> <03B1> <03C3> <3002> <3001> endbfrange 100 beginbfrange <3016> <22EF> <0410> <0401> <0416> <0430> <0451> <0436> <0101> <00E1> <01CE> <00E0> <0113> <00E9> <011B> <00E8> <012B> <00ED> <01D0> <00EC> <014D> <00F3> <01D2> <00F2> <016B> <00FA> <01D4> <00F9> <01D6> <01D8> <01DA> <01DC> <00FC> <00EA> <0251> <1E3F> <0144> <0148> <0261> <3105> <2500> <554A> <963F> <57C3> <6328> <54CE> <5509> <54C0> <7691> <764C> <853C> <77EE> <827E> <788D> <7231> <9698> <978D> <6C28> <5B89> <4FFA> <6309> <6697> <5CB8> <80FA> <6848> <80AE> <6602> <76CE> <51F9> <6556> <71AC> <7FF1> <8884> <50B2> <5965> <61CA> <6FB3> <82AD> <634C> <6252> <53ED> <5427> <7B06> <516B> <75A4> <5DF4> <62D4> <8DCB> <9776> <628A> endbfrange 100 beginbfrange <8019> <575D> <9738> <7F62> <7238> <767D> <67CF> <767E> <6446> <4F70> <8D25> <62DC> <7A17> <6591> <73ED> <642C> <6273> <822C> <9881> <677F> <7248> <626E> <62CC> <4F34> <74E3> <534A> <529E> <7ECA> <90A6> <5E2E> <6886> <699C> <8180> <7ED1> <68D2> <78C5> <868C> <9551> <508D> <8C24> <82DE> <80DE> <5305> <8912> <5265> <8584> <96F9> <4FDD> <5821> <9971> <5B9D> <62B1> <62A5> <66B4> <8C79> <9C8D> <7206> <676F> <7891> <60B2> <5351> <5317> <8F88> <80CC> <8D1D> <94A1> <500D> <72C8> <5907> <60EB> <7119> <88AB> <5954> <82EF> <672C> <7B28> <5D29> <7EF7> <752D> <6CF5> <8E66> <8FF8> <903C> <9F3B> <6BD4> <9119> <7B14> <5F7C> <78A7> <84D6> <853D> <6BD5> <6BD9> <6BD6> <5E01> <5E87> <75F9> <95ED> <655D> <5F0A> endbfrange 100 beginbfrange <5FC5> <8F9F> <58C1> <81C2> <907F> <965B> <97AD> <8FB9> <7F16> <8D2C> <6241> <4FBF> <53D8> <535E> <8FA8> <8FAB> <904D> <6807> <5F6A> <8198> <8868> <9CD6> <618B> <522B> <762A> <5F6C> <658C> <6FD2> <6EE8> <5BBE> <6448> <5175> <51B0> <67C4> <4E19> <79C9> <997C> <70B3> <75C5> <5E76> <73BB> <83E0> <64AD> <62E8> <94B5> <6CE2> <535A> <52C3> <640F> <94C2> <7B94> <4F2F> <5E1B> <8236> <8116> <818A> <6E24> <6CCA> <9A73> <6355> <535C> <54FA> <8865> <57E0> <4E0D> <5E03> <6B65> <7C3F> <90E8> <6016> <64E6> <731C> <88C1> <6750> <624D> <8D22> <776C> <8E29> <91C7> <5F69> <83DC> <8521> <9910> <53C2> <8695> <6B8B> <60ED> <60E8> <707F> <82CD> <8231> <4ED3> <6CA7> <85CF> <64CD> <7CD9> <69FD> <66F9> <8349> <5395> endbfrange 100 beginbfrange <7B56> <4FA7> <518C> <6D4B> <5C42> <8E6D> <63D2> <53C9> <832C> <8336> <67E5> <78B4> <643D> <5BDF> <5C94> <5DEE> <8BE7> <62C6> <67F4> <8C7A> <6400> <63BA> <8749> <998B> <8C17> <7F20> <94F2> <4EA7> <9610> <98A4> <660C> <7316> <573A> <5C1D> <5E38> <957F> <507F> <80A0> <5382> <655E> <7545> <5531> <5021> <8D85> <6284> <949E> <671D> <5632> <6F6E> <5DE2> <5435> <7092> <8F66> <626F> <64A4> <63A3> <5F7B> <6F88> <90F4> <81E3> <8FB0> <5C18> <6668> <5FF1> <6C89> <9648> <8D81> <886C> <6491> <79F0> <57CE> <6A59> <6210> <5448> <4E58> <7A0B> <60E9> <6F84> <8BDA> <627F> <901E> <9A8B> <79E4> <5403> <75F4> <6301> <5319> <6C60> <8FDF> <5F1B> <9A70> <803B> <9F7F> <4F88> <5C3A> <8D64> <7FC5> <65A5> <70BD> <5145> endbfrange 100 beginbfrange <51B2> <866B> <5D07> <5BA0> <62BD> <916C> <7574> <8E0C> <7A20> <6101> <7B79> <4EC7> <7EF8> <7785> <4E11> <81ED> <521D> <51FA> <6A71> <53A8> <8E87> <9504> <96CF> <6EC1> <9664> <695A> <7840> <50A8> <77D7> <6410> <89E6> <5904> <63E3> <5DDD> <7A7F> <693D> <4F20> <8239> <5598> <4E32> <75AE> <7A97> <5E62> <5E8A> <95EF> <521B> <5439> <708A> <6376> <9524> <5782> <6625> <693F> <9187> <5507> <6DF3> <7EAF> <8822> <6233> <7EF0> <75B5> <8328> <78C1> <96CC> <8F9E> <6148> <74F7> <8BCD> <6B64> <523A> <8D50> <6B21> <806A> <8471> <56F1> <5306> <4ECE> <4E1B> <51D1> <7C97> <918B> <7C07> <4FC3> <8E7F> <7BE1> <7A9C> <6467> <5D14> <50AC> <8106> <7601> <7CB9> <6DEC> <7FE0> <6751> <5B58> <5BF8> <78CB> <64AE> <6413> endbfrange 100 beginbfrange <63AA> <632B> <9519> <642D> <8FBE> <7B54> <7629> <6253> <5927> <5446> <6B79> <50A3> <6234> <5E26> <6B86> <4EE3> <8D37> <888B> <5F85> <902E> <6020> <803D> <62C5> <4E39> <5355> <90F8> <63B8> <80C6> <65E6> <6C2E> <4F46> <60EE> <6DE1> <8BDE> <5F39> <86CB> <5F53> <6321> <515A> <8361> <6863> <5200> <6363> <8E48> <5012> <5C9B> <7977> <5BFC> <5230> <7A3B> <60BC> <9053> <76D7> <5FB7> <5F97> <7684> <8E6C> <706F> <767B> <7B49> <77AA> <51F3> <9093> <5824> <4F4E> <6EF4> <8FEA> <654C> <7B1B> <72C4> <6DA4> <7FDF> <5AE1> <62B5> <5E95> <5730> <8482> <7B2C> <5E1D> <5F1F> <9012> <7F14> <98A0> <6382> <6EC7> <7898> <70B9> <5178> <975B> <57AB> <7535> <4F43> <7538> <5E97> <60E6> <5960> <6DC0> <6BBF> <7889> <53FC> endbfrange 100 beginbfrange <96D5> <51CB> <5201> <6389> <540A> <9493> <8C03> <8DCC> <7239> <789F> <8776> <8FED> <8C0D> <53E0> <4E01> <76EF> <53EE> <9489> <9876> <9F0E> <952D> <5B9A> <8BA2> <4E22> <4E1C> <51AC> <8463> <61C2> <52A8> <680B> <4F97> <606B> <51BB> <6D1E> <515C> <6296> <6597> <9661> <8C46> <9017> <75D8> <90FD> <7763> <6BD2> <728A> <72EC> <8BFB> <5835> <7779> <8D4C> <675C> <9540> <809A> <5EA6> <6E21> <5992> <7AEF> <77ED> <953B> <6BB5> <65AD> <7F0E> <5806> <5151> <961F> <5BF9> <58A9> <5428> <8E72> <6566> <987F> <56E4> <949D> <76FE> <9041> <6387> <54C6> <591A> <593A> <579B> <8EB2> <6735> <8DFA> <8235> <5241> <60F0> <5815> <86FE> <5CE8> <9E45> <4FC4> <989D> <8BB9> <5A25> <6076> <5384> <627C> <904F> <9102> <997F> endbfrange 100 beginbfrange <6069> <800C> <513F> <8033> <5C14> <9975> <6D31> <4E8C> <8D30> <53D1> <7F5A> <7B4F> <4F10> <4E4F> <9600> <6CD5> <73D0> <85E9> <5E06> <756A> <7FFB> <6A0A> <77FE> <9492> <7E41> <51E1> <70E6> <53CD> <8FD4> <8303> <8D29> <72AF> <996D> <6CDB> <574A> <82B3> <65B9> <80AA> <623F> <9632> <59A8> <4EFF> <8BBF> <7EBA> <653E> <83F2> <975E> <5561> <98DE> <80A5> <532A> <8BFD> <5420> <80BA> <5E9F> <6CB8> <8D39> <82AC> <915A> <5429> <6C1B> <5206> <7EB7> <575F> <711A> <6C7E> <7C89> <594B> <4EFD> <5FFF> <6124> <7CAA> <4E30> <5C01> <67AB> <8702> <5CF0> <950B> <98CE> <75AF> <70FD> <9022> <51AF> <7F1D> <8BBD> <5949> <51E4> <4F5B> <5426> <592B> <6577> <80A4> <5B75> <6276> <62C2> <8F90> <5E45> <6C1F> <7B26> <4F0F> endbfrange 100 beginbfrange <4FD8> <670D> <6D6E> <6DAA> <798F> <88B1> <5F17> <752B> <629A> <8F85> <4FEF> <91DC> <65A7> <812F> <8151> <5E9C> <8150> <8D74> <526F> <8986> <8D4B> <590D> <5085> <4ED8> <961C> <7236> <8179> <8D1F> <5BCC> <8BA3> <9644> <5987> <7F1A> <5490> <5676> <560E> <8BE5> <6539> <6982> <9499> <76D6> <6E89> <5E72> <7518> <6746> <67D1> <7AFF> <809D> <8D76> <611F> <79C6> <6562> <8D63> <5188> <521A> <94A2> <7F38> <809B> <7EB2> <5C97> <6E2F> <6760> <7BD9> <768B> <9AD8> <818F> <7F94> <7CD5> <641E> <9550> <7A3F> <544A> <54E5> <6B4C> <6401> <6208> <9E3D> <80F3> <7599> <5272> <9769> <845B> <683C> <86E4> <9601> <9694> <94EC> <4E2A> <5404> <7ED9> <6839> <8DDF> <8015> <66F4> <5E9A> <7FB9> <57C2> <803F> <6897> <5DE5> endbfrange 100 beginbfrange <653B> <529F> <606D> <9F9A> <4F9B> <8EAC> <516C> <5BAB> <5F13> <5DE9> <6C5E> <62F1> <8D21> <5171> <94A9> <52FE> <6C9F> <82DF> <72D7> <57A2> <6784> <8D2D> <591F> <8F9C> <83C7> <5495> <7B8D> <4F30> <6CBD> <5B64> <59D1> <9F13> <53E4> <86CA> <9AA8> <8C37> <80A1> <6545> <987E> <56FA> <96C7> <522E> <74DC> <5250> <5BE1> <6302> <8902> <4E56> <62D0> <602A> <68FA> <5173> <5B98> <51A0> <89C2> <7BA1> <9986> <7F50> <60EF> <704C> <8D2F> <5149> <5E7F> <901B> <7470> <89C4> <572D> <7845> <5F52> <9F9F> <95FA> <8F68> <9B3C> <8BE1> <7678> <6842> <67DC> <8DEA> <8D35> <523D> <8F8A> <6EDA> <68CD> <9505> <90ED> <56FD> <679C> <88F9> <8FC7> <54C8> <9AB8> <5B69> <6D77> <6C26> <4EA5> <5BB3> <9A87> <9163> <61A8> <90AF> endbfrange 100 beginbfrange <97E9> <542B> <6DB5> <5BD2> <51FD> <558A> <7F55> <7FF0> <64BC> <634D> <65F1> <61BE> <608D> <710A> <6C57> <6C49> <592F> <676D> <822A> <58D5> <568E> <8C6A> <6BEB> <90DD> <597D> <8017> <53F7> <6D69> <5475> <559D> <8377> <83CF> <6838> <79BE> <548C> <4F55> <5408> <76D2> <8C89> <9602> <6CB3> <6DB8> <8D6B> <8910> <9E64> <8D3A> <563F> <9ED1> <75D5> <5F88> <72E0> <6068> <54FC> <4EA8> <6A2A> <8861> <6052> <8F70> <54C4> <70D8> <8679> <9E3F> <6D2A> <5B8F> <5F18> <7EA2> <5589> <4FAF> <7334> <543C> <539A> <5019> <540E> <547C> <4E4E> <5FFD> <745A> <58F6> <846B> <80E1> <8774> <72D0> <7CCA> <6E56> <5F27> <864E> <552C> <62A4> <4E92> <6CAA> <6237> <82B1> <54D7> <534E> <733E> <6ED1> <753B> <5212> <5316> <8BDD> endbfrange 100 beginbfrange <69D0> <5F8A> <6000> <6DEE> <574F> <6B22> <73AF> <6853> <8FD8> <7F13> <6362> <60A3> <5524> <75EA> <8C62> <7115> <6DA3> <5BA6> <5E7B> <8352> <614C> <9EC4> <78FA> <8757> <7C27> <7687> <51F0> <60F6> <714C> <6643> <5E4C> <604D> <8C0E> <7070> <6325> <8F89> <5FBD> <6062> <86D4> <56DE> <6BC1> <6094> <6167> <5349> <60E0> <6666> <8D3F> <79FD> <4F1A> <70E9> <6C47> <8BB3> <8BF2> <7ED8> <8364> <660F> <5A5A> <9B42> <6D51> <6DF7> <8C41> <6D3B> <4F19> <706B> <83B7> <6216> <60D1> <970D> <8D27> <7978> <51FB> <573E> <57FA> <673A> <7578> <7A3D> <79EF> <7B95> <808C> <9965> <8FF9> <6FC0> <8BA5> <9E21> <59EC> <7EE9> <7F09> <5409> <6781> <68D8> <8F91> <7C4D> <96C6> <53CA> <6025> <75BE> <6C72> <5373> <5AC9> <7EA7> endbfrange 100 beginbfrange <6324> <51E0> <810A> <5DF1> <84DF> <6280> <5180> <5B63> <4F0E> <796D> <5242> <60B8> <6D4E> <5BC4> <5BC2> <8BA1> <8BB0> <65E2> <5FCC> <9645> <5993> <7EE7> <7EAA> <5609> <67B7> <5939> <4F73> <5BB6> <52A0> <835A> <988A> <8D3E> <7532> <94BE> <5047> <7A3C> <4EF7> <67B6> <9A7E> <5AC1> <6B7C> <76D1> <575A> <5C16> <7B3A> <95F4> <714E> <517C> <80A9> <8270> <5978> <7F04> <8327> <68C0> <67EC> <78B1> <7877> <62E3> <6361> <7B80> <4FED> <526A> <51CF> <8350> <69DB> <9274> <8DF5> <8D31> <89C1> <952E> <7BAD> <4EF6> <5065> <8230> <5251> <996F> <6E10> <6E85> <6DA7> <5EFA> <50F5> <59DC> <5C06> <6D46> <6C5F> <7586> <848B> <6868> <5956> <8BB2> <5320> <9171> <964D> <8549> <6912> <7901> <7126> <80F6> <4EA4> <90CA> endbfrange 100 beginbfrange <6D47> <9A84> <5A07> <56BC> <6405> <94F0> <77EB> <4FA5> <811A> <72E1> <89D2> <997A> <7F34> <7EDE> <527F> <6559> <9175> <8F7F> <8F83> <53EB> <7A96> <63ED> <63A5> <7686> <79F8> <8857> <9636> <622A> <52AB> <8282> <6854> <6770> <6377> <776B> <7AED> <6D01> <7ED3> <89E3> <59D0> <6212> <85C9> <82A5> <754C> <501F> <4ECB> <75A5> <8BEB> <5C4A> <5DFE> <7B4B> <65A4> <91D1> <4ECA> <6D25> <895F> <7D27> <9526> <4EC5> <8C28> <8FDB> <9773> <664B> <7981> <8FD1> <70EC> <6D78> <5C3D> <52B2> <8346> <5162> <830E> <775B> <6676> <9CB8> <4EAC> <60CA> <7CBE> <7CB3> <7ECF> <4E95> <8B66> <666F> <9888> <9759> <5883> <656C> <955C> <5F84> <75C9> <9756> <7ADF> <7ADE> <51C0> <70AF> <7A98> <63EA> <7A76> <7EA0> <7396> <97ED> endbfrange 100 beginbfrange <4E45> <7078> <4E5D> <9152> <53A9> <6551> <65E7> <81FC> <8205> <548E> <5C31> <759A> <97A0> <62D8> <72D9> <75BD> <5C45> <9A79> <83CA> <5C40> <5480> <77E9> <4E3E> <6CAE> <805A> <62D2> <636E> <5DE8> <5177> <8DDD> <8E1E> <952F> <4FF1> <53E5> <60E7> <70AC> <5267> <6350> <9E43> <5A1F> <5026> <7737> <5377> <7EE2> <6485> <652B> <6289> <6398> <5014> <7235> <89C9> <51B3> <8BC0> <7EDD> <5747> <83CC> <94A7> <519B> <541B> <5CFB> <4FCA> <7AE3> <6D5A> <90E1> <9A8F> <5580> <5496> <5361> <54AF> <5F00> <63E9> <6977> <51EF> <6168> <520A> <582A> <52D8> <574E> <780D> <770B> <5EB7> <6177> <7CE0> <625B> <6297> <4EA2> <7095> <8003> <62F7> <70E4> <9760> <5777> <82DB> <67EF> <68F5> <78D5> <9897> <79D1> <58F3> <54B3> endbfrange 100 beginbfrange <53EF> <6E34> <514B> <523B> <5BA2> <8BFE> <80AF> <5543> <57A6> <6073> <5751> <542D> <7A7A> <6050> <5B54> <63A7> <62A0> <53E3> <6263> <5BC7> <67AF> <54ED> <7A9F> <82E6> <9177> <5E93> <88E4> <5938> <57AE> <630E> <8DE8> <80EF> <5757> <7B77> <4FA9> <5FEB> <5BBD> <6B3E> <5321> <7B50> <72C2> <6846> <77FF> <7736> <65F7> <51B5> <4E8F> <76D4> <5CBF> <7AA5> <8475> <594E> <9B41> <5080> <9988> <6127> <6E83> <5764> <6606> <6346> <56F0> <62EC> <6269> <5ED3> <9614> <5783> <62C9> <5587> <8721> <814A> <8FA3> <5566> <83B1> <6765> <8D56> <84DD> <5A6A> <680F> <62E6> <7BEE> <9611> <5170> <6F9C> <8C30> <63FD> <89C8> <61D2> <7F06> <70C2> <6EE5> <7405> <6994> <72FC> <5ECA> <90CE> <6717> <6D6A> <635E> <52B3> <7262> endbfrange 100 beginbfrange <8001> <4F6C> <59E5> <916A> <70D9> <6D9D> <52D2> <4E50> <96F7> <956D> <857E> <78CA> <7D2F> <5121> <5792> <64C2> <808B> <7C7B> <6CEA> <68F1> <695E> <51B7> <5398> <68A8> <7281> <9ECE> <7BF1> <72F8> <79BB> <6F13> <7406> <674E> <91CC> <9CA4> <793C> <8389> <8354> <540F> <6817> <4E3D> <5389> <52B1> <783E> <5386> <5229> <5088> <4F8B> <4FD0> <75E2> <7ACB> <7C92> <6CA5> <96B6> <529B> <7483> <54E9> <4FE9> <8054> <83B2> <8FDE> <9570> <5EC9> <601C> <6D9F> <5E18> <655B> <8138> <94FE> <604B> <70BC> <7EC3> <7CAE> <51C9> <6881> <7CB1> <826F> <4E24> <8F86> <91CF> <667E> <4EAE> <8C05> <64A9> <804A> <50DA> <7597> <71CE> <5BE5> <8FBD> <6F66> <4E86> <6482> <9563> <5ED6> <6599> <5217> <88C2> <70C8> <52A3> <730E> endbfrange 100 beginbfrange <7433> <6797> <78F7> <9716> <4E34> <90BB> <9CDE> <6DCB> <51DB> <8D41> <541D> <62CE> <73B2> <83F1> <96F6> <9F84> <94C3> <4F36> <7F9A> <51CC> <7075> <9675> <5CAD> <9886> <53E6> <4EE4> <6E9C> <7409> <69B4> <786B> <998F> <7559> <5218> <7624> <6D41> <67F3> <516D> <9F99> <804B> <5499> <7B3C> <7ABF> <9686> <5784> <62E2> <9647> <697C> <5A04> <6402> <7BD3> <6F0F> <964B> <82A6> <5362> <9885> <5E90> <7089> <63B3> <5364> <864F> <9C81> <9E93> <788C> <9732> <8DEF> <8D42> <9E7F> <6F5E> <7984> <5F55> <9646> <622E> <9A74> <5415> <94DD> <4FA3> <65C5> <5C65> <5C61> <7F15> <8651> <6C2F> <5F8B> <7387> <6EE4> <7EFF> <5CE6> <631B> <5B6A> <6EE6> <5375> <4E71> <63A0> <7565> <62A1> <8F6E> <4F26> <4ED1> <6CA6> <7EB6> endbfrange 100 beginbfrange <8BBA> <841D> <87BA> <7F57> <903B> <9523> <7BA9> <9AA1> <88F8> <843D> <6D1B> <9A86> <7EDC> <5988> <9EBB> <739B> <7801> <8682> <9A6C> <9A82> <561B> <5417> <57CB> <4E70> <9EA6> <5356> <8FC8> <8109> <7792> <9992> <86EE> <6EE1> <8513> <66FC> <6162> <6F2B> <8C29> <8292> <832B> <76F2> <6C13> <5FD9> <83BD> <732B> <8305> <951A> <6BDB> <77DB> <94C6> <536F> <8302> <5192> <5E3D> <8C8C> <8D38> <4E48> <73AB> <679A> <6885> <9176> <9709> <7164> <6CA1> <7709> <5A92> <9541> <6BCF> <7F8E> <6627> <5BD0> <59B9> <5A9A> <95E8> <95F7> <4EEC> <840C> <8499> <6AAC> <76DF> <9530> <731B> <68A6> <5B5F> <772F> <919A> <9761> <7CDC> <8FF7> <8C1C> <5F25> <7C73> <79D8> <89C5> <6CCC> <871C> <5BC6> <5E42> <68C9> <7720> <7EF5> endbfrange 100 beginbfrange <5195> <514D> <52C9> <5A29> <7F05> <9762> <82D7> <63CF> <7784> <85D0> <79D2> <6E3A> <5E99> <5999> <8511> <706D> <6C11> <62BF> <76BF> <654F> <60AF> <95FD> <660E> <879F> <9E23> <94ED> <540D> <547D> <8C2C> <6478> <6479> <8611> <6A21> <819C> <78E8> <6469> <9B54> <62B9> <672B> <83AB> <58A8> <9ED8> <6CAB> <6F20> <5BDE> <964C> <8C0B> <725F> <67D0> <62C7> <7261> <4EA9> <59C6> <6BCD> <5893> <66AE> <5E55> <52DF> <6155> <6728> <76EE> <7766> <7267> <7A46> <62FF> <54EA> <5450> <94A0> <90A3> <5A1C> <7EB3> <6C16> <4E43> <5976> <8010> <5948> <5357> <7537> <96BE> <56CA> <6320> <8111> <607C> <95F9> <6DD6> <5462> <9981> <5185> <5AE9> <80FD> <59AE> <9713> <502A> <6CE5> <5C3C> <62DF> <4F60> <533F> <817B> <9006> endbfrange 100 beginbfrange <6EBA> <852B> <62C8> <5E74> <78BE> <64B5> <637B> <5FF5> <5A18> <917F> <9E1F> <5C3F> <634F> <8042> <5B7D> <556E> <954A> <954D> <6D85> <60A8> <67E0> <72DE> <51DD> <5B81> <62E7> <6CDE> <725B> <626D> <94AE> <7EBD> <8113> <6D53> <519C> <5F04> <5974> <52AA> <6012> <5973> <6696> <8650> <759F> <632A> <61E6> <7CEF> <8BFA> <54E6> <6B27> <9E25> <6BB4> <85D5> <5455> <5076> <6CA4> <556A> <8DB4> <722C> <5E15> <6015> <7436> <62CD> <6392> <724C> <5F98> <6E43> <6D3E> <6500> <6F58> <76D8> <78D0> <76FC> <7554> <5224> <53DB> <4E53> <5E9E> <65C1> <802A> <80D6> <629B> <5486> <5228> <70AE> <888D> <8DD1> <6CE1> <5478> <80DA> <57F9> <88F4> <8D54> <966A> <914D> <4F69> <6C9B> <55B7> <76C6> <7830> <62A8> <70F9> <6F8E> endbfrange 100 beginbfrange <5F6D> <84EC> <68DA> <787C> <7BF7> <81A8> <670B> <9E4F> <6367> <78B0> <576F> <7812> <9739> <6279> <62AB> <5288> <7435> <6BD7> <5564> <813E> <75B2> <76AE> <5339> <75DE> <50FB> <5C41> <8B6C> <7BC7> <504F> <7247> <9A97> <98D8> <6F02> <74E2> <7968> <6487> <77A5> <62FC> <9891> <8D2B> <54C1> <8058> <4E52> <576A> <82F9> <840D> <5E73> <51ED> <74F6> <8BC4> <5C4F> <5761> <6CFC> <9887> <5A46> <7834> <9B44> <8FEB> <7C95> <5256> <6251> <94FA> <4EC6> <8386> <8461> <83E9> <84B2> <57D4> <6734> <5703> <666E> <6D66> <8C31> <66DD> <7011> <671F> <6B3A> <6816> <621A> <59BB> <4E03> <51C4> <6F06> <67D2> <6C8F> <5176> <68CB> <5947> <6B67> <7566> <5D0E> <8110> <9F50> <65D7> <7948> <7941> <9A91> <8D77> <5C82> <4E5E> endbfrange 100 beginbfrange <4F01> <542F> <5951> <780C> <5668> <6C14> <8FC4> <5F03> <6C7D> <6CE3> <8BAB> <6390> <6070> <6D3D> <7275> <6266> <948E> <94C5> <5343> <8FC1> <7B7E> <4EDF> <8C26> <4E7E> <9ED4> <94B1> <94B3> <524D> <6F5C> <9063> <6D45> <8C34> <5811> <5D4C> <6B20> <6B49> <67AA> <545B> <8154> <7F8C> <5899> <8537> <5F3A> <62A2> <6A47> <9539> <6572> <6084> <6865> <77A7> <4E54> <4FA8> <5DE7> <9798> <64AC> <7FD8> <5CED> <4FCF> <7A8D> <5207> <8304> <4E14> <602F> <7A83> <94A6> <4FB5> <4EB2> <79E6> <7434> <52E4> <82B9> <64D2> <79BD> <5BDD> <6C81> <9752> <8F7B> <6C22> <503E> <537F> <6E05> <64CE> <6674> <6C30> <60C5> <9877> <8BF7> <5E86> <743C> <7A77> <79CB> <4E18> <90B1> <7403> <6C42> <56DA> <914B> <6CC5> <8D8B> <533A> endbfrange 100 beginbfrange <86C6> <66F2> <8EAF> <5C48> <9A71> <6E20> <53D6> <5A36> <9F8B> <8DA3> <53BB> <5708> <98A7> <6743> <919B> <6CC9> <5168> <75CA> <62F3> <72AC> <5238> <529D> <7F3A> <7094> <7638> <5374> <9E4A> <69B7> <786E> <96C0> <88D9> <7FA4> <7136> <71C3> <5189> <67D3> <74E4> <58E4> <6518> <56B7> <8BA9> <9976> <6270> <7ED5> <60F9> <70ED> <58EC> <4EC1> <4EBA> <5FCD> <97E7> <4EFB> <8BA4> <5203> <598A> <7EAB> <6254> <4ECD> <65E5> <620E> <8338> <84C9> <8363> <878D> <7194> <6EB6> <5BB9> <7ED2> <5197> <63C9> <67D4> <8089> <8339> <8815> <5112> <5B7A> <5982> <8FB1> <4E73> <6C5D> <5165> <8925> <8F6F> <962E> <854A> <745E> <9510> <95F0> <6DA6> <82E5> <5F31> <6492> <6D12> <8428> <816E> <9CC3> <585E> <8D5B> <4E09> <53C1> endbfrange 100 beginbfrange <4F1E> <6563> <6851> <55D3> <4E27> <6414> <9A9A> <626B> <5AC2> <745F> <8272> <6DA9> <68EE> <50E7> <838E> <7802> <6740> <5239> <6C99> <7EB1> <50BB> <5565> <715E> <7B5B> <6652> <73CA> <82EB> <6749> <5C71> <5220> <717D> <886B> <95EA> <9655> <64C5> <8D61> <81B3> <5584> <6C55> <6247> <7F2E> <5892> <4F24> <5546> <8D4F> <664C> <4E0A> <5C1A> <88F3> <68A2> <634E> <7A0D> <70E7> <828D> <52FA> <97F6> <5C11> <54E8> <90B5> <7ECD> <5962> <8D4A> <86C7> <820C> <8D66> <6444> <5C04> <6151> <6D89> <793E> <8BBE> <7837> <7533> <547B> <4F38> <8EAB> <6DF1> <5A20> <7EC5> <795E> <6C88> <5BA1> <5A76> <751A> <80BE> <614E> <6E17> <58F0> <751F> <7525> <7272> <5347> <7EF3> <7701> <76DB> <5269> <80DC> <5723> <5E08> <5931> endbfrange 100 beginbfrange <72EE> <65BD> <6E7F> <8BD7> <5C38> <8671> <5341> <77F3> <62FE> <65F6> <4EC0> <98DF> <8680> <5B9E> <8BC6> <53F2> <77E2> <4F7F> <5C4E> <9A76> <59CB> <5F0F> <793A> <58EB> <4E16> <67FF> <4E8B> <62ED> <8A93> <901D> <52BF> <662F> <55DC> <566C> <9002> <4ED5> <4F8D> <91CA> <9970> <6C0F> <5E02> <6043> <5BA4> <89C6> <8BD5> <6536> <624B> <9996> <5B88> <5BFF> <6388> <552E> <53D7> <7626> <517D> <852C> <67A2> <68B3> <6B8A> <6292> <8F93> <53D4> <8212> <6DD1> <758F> <4E66> <8D4E> <5B70> <719F> <85AF> <6691> <66D9> <7F72> <8700> <9ECD> <9F20> <5C5E> <672F> <8FF0> <6811> <675F> <620D> <7AD6> <5885> <5EB6> <6570> <6F31> <6055> <5237> <800D> <6454> <8870> <7529> <5E05> <6813> <62F4> <971C> <53CC> <723D> <8C01> endbfrange 100 beginbfrange <6C34> <7761> <7A0E> <542E> <77AC> <987A> <821C> <8BF4> <7855> <6714> <70C1> <65AF> <6495> <5636> <601D> <79C1> <53F8> <4E1D> <6B7B> <8086> <5BFA> <55E3> <56DB> <4F3A> <4F3C> <9972> <5DF3> <677E> <8038> <6002> <9882> <9001> <5B8B> <8BBC> <8BF5> <641C> <8258> <64DE> <55FD> <82CF> <9165> <4FD7> <7D20> <901F> <7C9F> <50F3> <5851> <6EAF> <5BBF> <8BC9> <8083> <9178> <849C> <7B97> <867D> <968B> <968F> <7EE5> <9AD3> <788E> <5C81> <7A57> <9042> <96A7> <795F> <5B59> <635F> <7B0B> <84D1> <68AD> <5506> <7F29> <7410> <7D22> <9501> <6240> <584C> <4ED6> <5B83> <5979> <5854> <736D> <631E> <8E4B> <8E0F> <80CE> <82D4> <62AC> <53F0> <6CF0> <915E> <592A> <6001> <6C70> <574D> <644A> <8D2A> <762B> <6EE9> <575B> endbfrange 100 beginbfrange <6A80> <75F0> <6F6D> <8C2D> <8C08> <5766> <6BEF> <8892> <78B3> <63A2> <53F9> <70AD> <6C64> <5858> <642A> <5802> <68E0> <819B> <5510> <7CD6> <5018> <8EBA> <6DCC> <8D9F> <70EB> <638F> <6D9B> <6ED4> <7EE6> <8404> <6843> <9003> <6DD8> <9676> <8BA8> <5957> <7279> <85E4> <817E> <75BC> <8A8A> <68AF> <5254> <8E22> <9511> <63D0> <9898> <8E44> <557C> <4F53> <66FF> <568F> <60D5> <6D95> <5243> <5C49> <5929> <6DFB> <586B> <7530> <751C> <606C> <8214> <8146> <6311> <6761> <8FE2> <773A> <8DF3> <8D34> <94C1> <5E16> <5385> <542C> <70C3> <6C40> <5EF7> <505C> <4EAD> <5EAD> <633A> <8247> <901A> <6850> <916E> <77B3> <540C> <94DC> <5F64> <7AE5> <6876> <6345> <7B52> <7EDF> <75DB> <5077> <6295> <5934> <900F> <51F8> endbfrange 100 beginbfrange <79C3> <7A81> <56FE> <5F92> <9014> <6D82> <5C60> <571F> <5410> <5154> <6E4D> <56E2> <63A8> <9893> <817F> <8715> <892A> <9000> <541E> <5C6F> <81C0> <62D6> <6258> <8131> <9E35> <9640> <9A6E> <9A7C> <692D> <59A5> <62D3> <553E> <6316> <54C7> <86D9> <6D3C> <5A03> <74E6> <889C> <6B6A> <5916> <8C4C> <5F2F> <6E7E> <73A9> <987D> <4E38> <70F7> <5B8C> <7897> <633D> <665A> <7696> <60CB> <5B9B> <5A49> <4E07> <8155> <6C6A> <738B> <4EA1> <6789> <7F51> <5F80> <65FA> <671B> <5FD8> <5984> <5A01> <5DCD> <5FAE> <5371> <97E6> <8FDD> <6845> <56F4> <552F> <60DF> <4E3A> <6F4D> <7EF4> <82C7> <840E> <59D4> <4F1F> <4F2A> <5C3E> <7EAC> <672A> <851A> <5473> <754F> <80C3> <5582> <9B4F> <4F4D> <6E2D> <8C13> <5C09> <6170> endbfrange 100 beginbfrange <536B> <761F> <6E29> <868A> <6587> <95FB> <7EB9> <543B> <7A33> <7D0A> <95EE> <55E1> <7FC1> <74EE> <631D> <8717> <6DA1> <7A9D> <6211> <65A1> <5367> <63E1> <6C83> <5DEB> <545C> <94A8> <4E4C> <6C61> <8BEC> <5C4B> <65E0> <829C> <68A7> <543E> <5434> <6BCB> <6B66> <4E94> <6342> <5348> <821E> <4F0D> <4FAE> <575E> <620A> <96FE> <6664> <7269> <52FF> <52A1> <609F> <8BEF> <6614> <7199> <6790> <897F> <7852> <77FD> <6670> <563B> <5438> <9521> <727A> <7A00> <606F> <5E0C> <6089> <819D> <5915> <60DC> <7184> <70EF> <6EAA> <6C50> <7280> <6A84> <88AD> <5E2D> <4E60> <5AB3> <559C> <94E3> <6D17> <7CFB> <9699> <620F> <7EC6> <778E> <867E> <5323> <971E> <8F96> <6687> <5CE1> <4FA0> <72ED> <4E0B> <53A6> <590F> <5413> endbfrange 100 beginbfrange <6380> <9528> <5148> <4ED9> <9C9C> <7EA4> <54B8> <8D24> <8854> <8237> <95F2> <6D8E> <5F26> <5ACC> <663E> <9669> <73B0> <732E> <53BF> <817A> <9985> <7FA1> <5BAA> <9677> <9650> <7EBF> <76F8> <53A2> <9576> <9999> <7BB1> <8944> <6E58> <4E61> <7FD4> <7965> <8BE6> <60F3> <54CD> <4EAB> <9879> <5DF7> <6A61> <50CF> <5411> <8C61> <8427> <785D> <9704> <524A> <54EE> <56A3> <9500> <6D88> <5BB5> <6DC6> <6653> <5C0F> <5B5D> <6821> <8096> <5578> <7B11> <6548> <6954> <4E9B> <6B47> <874E> <978B> <534F> <631F> <643A> <90AA> <659C> <80C1> <8C10> <5199> <68B0> <5378> <87F9> <61C8> <6CC4> <6CFB> <8C22> <5C51> <85AA> <82AF> <950C> <6B23> <8F9B> <65B0> <5FFB> <5FC3> <4FE1> <8845> <661F> <8165> <7329> <60FA> <5174> endbfrange 100 beginbfrange <5211> <578B> <5F62> <90A2> <884C> <9192> <5E78> <674F> <6027> <59D3> <5144> <51F6> <80F8> <5308> <6C79> <96C4> <718A> <4F11> <4FEE> <7F9E> <673D> <55C5> <9508> <79C0> <8896> <7EE3> <589F> <620C> <9700> <865A> <5618> <987B> <5F90> <8BB8> <84C4> <9157> <53D9> <65ED> <5E8F> <755C> <6064> <7D6E> <5A7F> <7EEA> <7EED> <8F69> <55A7> <5BA3> <60AC> <65CB> <7384> <9009> <7663> <7729> <7EDA> <9774> <859B> <5B66> <7A74> <96EA> <8840> <52CB> <718F> <5FAA> <65EC> <8BE2> <5BFB> <9A6F> <5DE1> <6B89> <6C5B> <8BAD> <8BAF> <900A> <8FC5> <538B> <62BC> <9E26> <9E2D> <5440> <4E2B> <82BD> <7259> <869C> <5D16> <8859> <6DAF> <96C5> <54D1> <4E9A> <8BB6> <7109> <54BD> <9609> <70DF> <6DF9> <76D0> <4E25> <7814> <8712> endbfrange 100 beginbfrange <5CA9> <5EF6> <8A00> <989C> <960E> <708E> <6CBF> <5944> <63A9> <773C> <884D> <6F14> <8273> <5830> <71D5> <538C> <781A> <96C1> <5501> <5F66> <7130> <5BB4> <8C1A> <9A8C> <6B83> <592E> <9E2F> <79E7> <6768> <626C> <4F6F> <75A1> <7F8A> <6D0B> <9633> <6C27> <4EF0> <75D2> <517B> <6837> <6F3E> <9080> <8170> <5996> <7476> <6447> <5C27> <9065> <7A91> <8C23> <59DA> <54AC> <8200> <836F> <8981> <8000> <6930> <564E> <8036> <7237> <91CE> <51B6> <4E5F> <9875> <6396> <4E1A> <53F6> <66F3> <814B> <591C> <6DB2> <4E00> <58F9> <533B> <63D6> <94F1> <4F9D> <4F0A> <8863> <9890> <5937> <9057> <79FB> <4EEA> <80F0> <7591> <6C82> <5B9C> <59E8> <5F5D> <6905> <8681> <501A> <5DF2> <4E59> <77E3> <4EE5> <827A> <6291> <6613> endbfrange 100 beginbfrange <9091> <5C79> <4EBF> <5F79> <81C6> <9038> <8084> <75AB> <4EA6> <88D4> <610F> <6BC5> <5FC6> <4E49> <76CA> <6EA2> <8BE3> <8BAE> <8C0A> <8BD1> <5F02> <7FFC> <7FCC> <7ECE> <8335> <836B> <56E0> <6BB7> <97F3> <9634> <59FB> <541F> <94F6> <6DEB> <5BC5> <996E> <5C39> <5F15> <9690> <5370> <82F1> <6A31> <5A74> <9E70> <5E94> <7F28> <83B9> <8424> <8367> <8747> <8FCE> <8D62> <76C8> <5F71> <9896> <786C> <6620> <54DF> <62E5> <4F63> <81C3> <75C8> <5EB8> <96CD> <8E0A> <86F9> <548F> <6CF3> <6D8C> <6C38> <607F> <52C7> <7528> <5E7D> <4F18> <60A0> <5FE7> <5C24> <7531> <90AE> <94C0> <72B9> <6CB9> <6E38> <9149> <6709> <53CB> <53F3> <4F51> <91C9> <8BF1> <53C8> <5E7C> <8FC2> <6DE4> <4E8E> <76C2> <6986> <865E> <611A> endbfrange 100 beginbfrange <8206> <4F59> <4FDE> <903E> <9C7C> <6109> <6E1D> <6E14> <9685> <4E88> <5A31> <96E8> <4E0E> <5C7F> <79B9> <5B87> <8BED> <7FBD> <7389> <57DF> <828B> <90C1> <5401> <9047> <55BB> <5CEA> <5FA1> <6108> <6B32> <72F1> <80B2> <8A89> <6D74> <5BD3> <88D5> <9884> <8C6B> <9A6D> <9E33> <6E0A> <51A4> <5143> <57A3> <8881> <539F> <63F4> <8F95> <56ED> <5458> <5706> <733F> <6E90> <7F18> <8FDC> <82D1> <613F> <6028> <9662> <66F0> <7EA6> <8D8A> <8DC3> <94A5> <5CB3> <7CA4> <6708> <60A6> <9605> <8018> <4E91> <90E7> <5300> <9668> <5141> <8FD0> <8574> <915D> <6655> <97F5> <5B55> <531D> <7838> <6742> <683D> <54C9> <707E> <5BB0> <8F7D> <518D> <5728> <54B1> <6512> <6682> <8D5E> <8D43> <810F> <846C> <906D> <7CDF> <51FF> endbfrange 100 beginbfrange <85FB> <67A3> <65E9> <6FA1> <86A4> <8E81> <566A> <9020> <7682> <7076> <71E5> <8D23> <62E9> <5219> <6CFD> <8D3C> <600E> <589E> <618E> <66FE> <8D60> <624E> <55B3> <6E23> <672D> <8F67> <94E1> <95F8> <7728> <6805> <69A8> <548B> <4E4D> <70B8> <8BC8> <6458> <658B> <5B85> <7A84> <503A> <5BE8> <77BB> <6BE1> <8A79> <7C98> <6CBE> <76CF> <65A9> <8F97> <5D2D> <5C55> <8638> <6808> <5360> <6218> <7AD9> <6E5B> <7EFD> <6A1F> <7AE0> <5F70> <6F33> <5F20> <638C> <6DA8> <6756> <4E08> <5E10> <8D26> <4ED7> <80C0> <7634> <969C> <62DB> <662D> <627E> <6CBC> <8D75> <7167> <7F69> <5146> <8087> <53EC> <906E> <6298> <54F2> <86F0> <8F99> <8005> <9517> <8517> <8FD9> <6D59> <73CD> <659F> <771F> <7504> <7827> <81FB> <8D1E> endbfrange 100 beginbfrange <9488> <4FA6> <6795> <75B9> <8BCA> <9707> <632F> <9547> <9635> <84B8> <6323> <7741> <5F81> <72F0> <4E89> <6014> <6574> <62EF> <6B63> <653F> <5E27> <75C7> <90D1> <8BC1> <829D> <679D> <652F> <5431> <8718> <77E5> <80A2> <8102> <6C41> <4E4B> <7EC7> <804C> <76F4> <690D> <6B96> <6267> <503C> <4F84> <5740> <6307> <6B62> <8DBE> <53EA> <65E8> <7EB8> <5FD7> <631A> <63B7> <81F3> <7F6E> <5E1C> <5CD9> <5236> <667A> <79E9> <7A1A> <8D28> <7099> <75D4> <6EDE> <6CBB> <7A92> <4E2D> <76C5> <5FE0> <949F> <8877> <7EC8> <79CD> <80BF> <91CD> <4EF2> <4F17> <821F> <5468> <5DDE> <6D32> <8BCC> <7CA5> <8F74> <8098> <5E1A> <5492> <76B1> <5B99> <663C> <9AA4> <73E0> <682A> <86DB> <6731> <732A> <8BF8> <8BDB> <9010> <7AF9> endbfrange 100 beginbfrange <70DB> <716E> <62C4> <77A9> <5631> <4E3B> <8457> <67F1> <52A9> <86C0> <8D2E> <94F8> <7B51> <4F4F> <6CE8> <795D> <9A7B> <6293> <722A> <62FD> <4E13> <7816> <8F6C> <64B0> <8D5A> <7BC6> <6869> <5E84> <88C5> <5986> <649E> <58EE> <72B6> <690E> <9525> <8FFD> <8D58> <5760> <7F00> <8C06> <51C6> <6349> <62D9> <5353> <684C> <7422> <8301> <914C> <5544> <7740> <707C> <6D4A> <5179> <54A8> <8D44> <59FF> <6ECB> <6DC4> <5B5C> <7D2B> <4ED4> <7C7D> <6ED3> <5B50> <81EA> <6E0D> <5B57> <9B03> <68D5> <8E2A> <5B97> <7EFC> <603B> <7EB5> <90B9> <8D70> <594F> <63CD> <79DF> <8DB3> <5352> <65CF> <7956> <8BC5> <963B> <7EC4> <94BB> <7E82> <5634> <9189> <6700> <7F6A> <5C0A> <9075> <6628> <5DE6> <4F50> <67DE> <505A> <4F5C> endbfrange 100 beginbfrange <5750> <5EA7> <4E8D> <4E0C> <5140> <4E10> <5EFF> <5345> <4E15> <4E98> <4E1E> <9B32> <5B6C> <5669> <4E28> <79BA> <4E3F> <5315> <4E47> <592D> <723B> <536E> <6C10> <56DF> <80E4> <9997> <6BD3> <777E> <9F17> <4E36> <4E9F> <9F10> <4E5C> <4E69> <4E93> <8288> <5B5B> <556C> <560F> <4EC4> <538D> <539D> <53A3> <53A5> <53AE> <9765> <8D5D> <531A> <53F5> <5326> <532E> <533E> <8D5C> <5366> <5363> <5202> <5208> <520E> <522D> <5233> <523F> <524C> <525E> <5261> <525C> <84AF> <527D> <5282> <5281> <5290> <5293> <5182> <7F54> <4EBB> <4EC3> <4EC9> <4EC2> <4EE8> <4EE1> <4EEB> <4EDE> <4F1B> <4EF3> <4F22> <4F64> <4EF5> <4F25> <4F27> <4F09> <4F2B> <4F5E> <4F67> <6538> <4F5A> <4F5D> <4F5F> <4F57> <4F32> <4F3D> <4F76> endbfrange 100 beginbfrange <4F74> <4F91> <4F89> <4F83> <4F8F> <4F7E> <4F7B> <4FAA> <4F7C> <4FAC> <4F94> <4FE6> <4FE8> <4FEA> <4FC5> <4FDA> <4FE3> <4FDC> <4FD1> <4FDF> <4FF8> <5029> <504C> <4FF3> <502C> <500F> <502E> <502D> <4FFE> <501C> <500C> <5025> <5028> <507E> <5043> <5055> <5048> <504E> <506C> <507B> <50A5> <50A7> <50A9> <50BA> <50D6> <5106> <50ED> <50EC> <50E6> <50EE> <5107> <510B> <4EDD> <6C3D> <4F58> <4F65> <4FCE> <9FA0> <6C46> <7C74> <516E> <5DFD> <9EC9> <9998> <5181> <5914> <52F9> <530D> <8A07> <5310> <51EB> <5919> <5155> <4EA0> <5156> <4EB3> <886E> <88A4> <4EB5> <8114> <88D2> <7980> <5B34> <8803> <7FB8> <51AB> <51B1> <51BD> <51BC> <51C7> <5196> <51A2> <51A5> <8BA0> <8BA6> <8BAA> <8BB4> <8BB7> <8BC2> <8BCB> endbfrange 100 beginbfrange <8BCF> <8BCE> <8BD2> <8BD6> <8BD8> <8BDC> <8BDF> <8BE4> <8BE8> <8BEE> <8BF0> <8BF3> <8BF6> <8BF9> <8BFC> <8BFF> <8C02> <8C04> <8C07> <8C0C> <8C0F> <8C11> <8C14> <8C19> <8C1B> <8C18> <8C1D> <8C1F> <8C25> <8C27> <8C2A> <8C2E> <8C32> <8C35> <5369> <537A> <961D> <9622> <9621> <9631> <962A> <963D> <963C> <9642> <9649> <9654> <965F> <9667> <966C> <9672> <9674> <9688> <968D> <9697> <96B0> <9097> <909B> <909D> <9099> <90AC> <90A1> <90B4> <90B3> <90B6> <90BA> <90B8> <90B0> <90CF> <90C5> <90BE> <90D0> <90C4> <90C7> <90D3> <90E6> <90E2> <90DC> <90D7> <90DB> <90EB> <90EF> <90FE> <9104> <9122> <911E> <9123> <9131> <912F> <9139> <9143> <9146> <520D> <5942> <52A2> <52AC> <52BE> <54FF> <52D0> <52D6> <52F0> endbfrange 100 beginbfrange <53DF> <71EE> <77CD> <5EF4> <51F5> <51FC> <9B2F> <53B6> <5F01> <755A> <5DEF> <574C> <57A9> <57A1> <587E> <58BC> <58C5> <58D1> <5729> <572C> <572A> <5733> <5739> <572E> <575C> <573B> <5742> <5769> <5785> <576B> <5786> <577C> <577B> <5768> <576D> <5776> <5773> <57AD> <57A4> <578C> <57B2> <57CF> <57A7> <57B4> <5793> <57A0> <57D5> <57D8> <57DA> <57D9> <57D2> <57B8> <57F4> <57EF> <57F8> <57E4> <57DD> <580B> <580D> <57FD> <57ED> <5800> <581E> <5819> <5844> <5820> <5865> <586C> <5881> <5889> <589A> <5880> <99A8> <9F19> <61FF> <8279> <827D> <827F> <828F> <828A> <82A8> <8284> <828E> <8291> <8297> <8299> <82AB> <82B8> <82BE> <82B0> <82C8> <82CA> <82E3> <8298> <82B7> <82AE> <82CB> <82C1> <82A9> <82B4> endbfrange 100 beginbfrange <82A1> <82AA> <829F> <82C4> <82CE> <82A4> <82E1> <8309> <82F7> <82E4> <830F> <8307> <82DC> <82F4> <82D2> <82D8> <830C> <82FB> <82D3> <8311> <831A> <8306> <8314> <82E0> <82D5> <831C> <8351> <835B> <8308> <8392> <833C> <8334> <8331> <839B> <835E> <832F> <834F> <8347> <8343> <835F> <8340> <8317> <8360> <832D> <833A> <8333> <8366> <8365> <8368> <831B> <8369> <836C> <836A> <836D> <83B0> <8378> <83B3> <83A0> <83AA> <8393> <839C> <8385> <837C> <83B6> <83A9> <837D> <83B8> <837B> <8398> <839E> <83A8> <83BA> <83BC> <83C1> <8401> <83E5> <83D8> <5807> <8418> <840B> <83DD> <83FD> <83D6> <841C> <8438> <8411> <8406> <83D4> <83DF> <840F> <8403> <83F8> <83EA> <83C5> <83C0> <8426> <83F0> <83E1> <845C> <8451> endbfrange 100 beginbfrange <845A> <8459> <8473> <8487> <847A> <8489> <8478> <843C> <8446> <8469> <8476> <848C> <848E> <8431> <846D> <84C1> <84CD> <84D0> <84E6> <84BD> <84D3> <84CA> <84BF> <84BA> <84E0> <84A1> <84B9> <84B4> <8497> <84E5> <84E3> <850C> <750D> <8538> <84F0> <8539> <851F> <853A> <8556> <853B> <84FF> <84FC> <8559> <8548> <8568> <8564> <855E> <857A> <77A2> <8543> <8572> <857B> <85A4> <85A8> <8587> <858F> <8579> <85AE> <859C> <8585> <85B9> <85B7> <85B0> <85D3> <85C1> <85DC> <85FF> <8627> <8605> <8629> <8616> <863C> <5EFE> <5F08> <593C> <5941> <8037> <5955> <595A> <5958> <530F> <5C22> <5C25> <5C2C> <5C34> <624C> <626A> <629F> <62BB> <62CA> <62DA> <62D7> <62EE> <6322> <62F6> <6339> <634B> <6343> <63AD> <63F6> endbfrange 100 beginbfrange <6371> <637A> <638E> <63B4> <636D> <63AC> <638A> <6369> <63AE> <63BC> <63F2> <63F8> <63E0> <63FF> <63C4> <63DE> <63CE> <6452> <63C6> <63BE> <6445> <6441> <640B> <641B> <6420> <640C> <6426> <6421> <645E> <6484> <646D> <6496> <647A> <64B7> <6499> <64BA> <64C0> <64D0> <64D7> <64E4> <64E2> <6509> <6525> <652E> <5F0B> <5FD2> <7519> <5F11> <535F> <53F1> <53FD> <53E9> <53E8> <53FB> <5412> <5416> <5406> <544B> <5452> <5456> <5443> <5421> <5457> <5459> <5423> <5432> <5482> <5494> <5477> <5471> <5464> <549A> <5484> <5476> <5466> <549D> <54D0> <54AD> <54C2> <54B4> <54D2> <54A7> <54A6> <54D3> <5472> <54A3> <54D5> <54BB> <54BF> <54CC> <54D9> <54DC> <54A9> <54A4> <54DD> <54CF> <54DE> <551B> <54E7> <5520> endbfrange 100 beginbfrange <54FD> <5514> <54F3> <5522> <550F> <5511> <5527> <552A> <5567> <558F> <55B5> <5549> <556D> <5541> <5555> <553F> <5550> <553C> <5537> <5556> <5575> <5533> <5530> <555C> <558B> <55D2> <5583> <55B1> <55B9> <5588> <5581> <559F> <557E> <55D6> <5591> <557B> <55DF> <55BD> <5594> <5599> <55EA> <55F7> <55C9> <561F> <55D1> <55EB> <55D4> <55E6> <55DD> <55C4> <55EF> <55E5> <55F2> <55CC> <55E8> <55F5> <55E4> <8F94> <561E> <5608> <560C> <5601> <5624> <5623> <55FE> <5600> <5627> <562D> <5658> <5639> <5657> <562C> <564D> <5662> <5659> <565C> <564C> <5654> <5686> <5664> <5671> <566B> <567B> <5685> <5693> <56AF> <56D4> <56D7> <56DD> <56E1> <56F5> <56EB> <56F9> <56FF> <5704> <570A> <5709> <571C> <5E0F> <5E19> endbfrange 100 beginbfrange <5E14> <5E11> <5E31> <5E3B> <5E37> <5E44> <5E54> <5E5B> <5E5E> <5E61> <5C8C> <5C7A> <5C8D> <5C90> <5C96> <5C88> <5C98> <5C91> <5C9A> <5C9C> <5CB5> <5CA2> <5CBD> <5CAC> <5CAB> <5CB1> <5CA3> <5CC1> <5CB7> <5CC4> <5CD2> <5CE4> <5CCB> <5CE5> <5D02> <5D27> <5D26> <5D2E> <5D24> <5D1E> <5D06> <5D1B> <5D58> <5D3E> <5D34> <5D3D> <5D6C> <5D5B> <5D6F> <5D5D> <5D6B> <5D4B> <5D4A> <5D69> <5D74> <5D82> <5D99> <5D9D> <8C73> <5DB7> <5DC5> <5F73> <5F77> <5F82> <5F87> <5F89> <5F8C> <5F95> <5F99> <5F9C> <5FA8> <5FAD> <5FB5> <5FBC> <8862> <5F61> <72AD> <72B0> <72B4> <72B7> <72C3> <72C1> <72CE> <72CD> <72D2> <72E8> <72EF> <72E9> <72F2> <72F4> <72F7> <7301> <72F3> <7303> <72FA> <72FB> <7317> <7313> <7321> <730A> endbfrange 100 beginbfrange <731E> <731D> <7315> <7322> <7339> <7325> <732C> <7338> <7331> <7350> <734D> <7357> <7360> <736C> <736F> <737E> <821B> <5925> <98E7> <5924> <5902> <9963> <9967> <9974> <9977> <997D> <9980> <9984> <9987> <998A> <998D> <9990> <9993> <5E80> <5E91> <5E8B> <5E96> <5EA5> <5EA0> <5EB9> <5EB5> <5EBE> <5EB3> <8D53> <5ED2> <5ED1> <5EDB> <5EE8> <5EEA> <81BA> <5FC4> <5FC9> <5FD6> <5FCF> <6003> <5FEE> <6004> <5FE1> <5FE4> <5FFE> <6005> <5FEA> <5FED> <5FF8> <6019> <6035> <6026> <601B> <600F> <600D> <6029> <602B> <600A> <603F> <6021> <6078> <607B> <607A> <6042> <606A> <607D> <6096> <609A> <60AD> <609D> <6083> <6092> <608C> <609B> <60EC> <60BB> <60B1> <60DD> <60D8> <60C6> <60DA> <60B4> <6120> <6126> <6115> endbfrange 100 beginbfrange <6123> <60F4> <6100> <610E> <612B> <614A> <6175> <61AC> <6194> <61A7> <61B7> <61D4> <61F5> <5FDD> <96B3> <95E9> <95EB> <95F1> <95F3> <95F5> <95FC> <95FE> <9603> <9606> <9608> <960A> <960F> <9612> <9615> <9619> <4E2C> <723F> <6215> <6C35> <6C54> <6C5C> <6C4A> <6CA3> <6C85> <6C90> <6C94> <6C8C> <6C68> <6C74> <6C76> <6C86> <6CA9> <6CD0> <6CD4> <6CAD> <6CF7> <6CF1> <6CD7> <6CB2> <6CE0> <6CD6> <6CFA> <6CEB> <6CEE> <6CB1> <6CD3> <6CEF> <6CFE> <6D39> <6D27> <6D0C> <6D43> <6D48> <6D07> <6D04> <6D19> <6D0E> <6D2B> <6D4D> <6D2E> <6D35> <6D1A> <6D4F> <6D52> <6D54> <6D33> <6D91> <6D6F> <6D9E> <6DA0> <6D5E> <6D93> <6D5C> <6D60> <6D7C> <6D63> <6E1A> <6DC7> <6DC5> <6DDE> <6E0E> <6DBF> <6DE0> <6E11> <6DE6> endbfrange 100 beginbfrange <6DDD> <6DD9> <6E16> <6DAB> <6E0C> <6DAE> <6E2B> <6E6E> <6E4E> <6E6B> <6EB2> <6E5F> <6E86> <6E53> <6E32> <6E25> <6E44> <6EDF> <6EB1> <6E98> <6EE0> <6F2D> <6EE2> <6EA5> <6EA7> <6EBD> <6EBB> <6EB7> <6ED7> <6EB4> <6ECF> <6E8F> <6EC2> <6E9F> <6F62> <6F46> <6F24> <6F15> <6EF9> <6F2F> <6F36> <6F4B> <6F74> <6F2A> <6F09> <6F29> <6F89> <6F8D> <6F8C> <6F78> <6F72> <6F7C> <6F7A> <6FD1> <6FC9> <6FA7> <6FB9> <6FB6> <6FC2> <6FE1> <6FEE> <6FDE> <6FE0> <6FEF> <701A> <7023> <701B> <7039> <7035> <704F> <705E> <5B80> <5B84> <5B95> <5B93> <5BA5> <5BB8> <752F> <9A9E> <6434> <5BE4> <5BEE> <8930> <5BF0> <8E47> <8B07> <8FB6> <8FD3> <8FD5> <8FE5> <8FEE> <8FE4> <8FE9> <8FE6> <8FF3> <8FE8> <9005> <9004> <900B> <9026> endbfrange 100 beginbfrange <9011> <900D> <9016> <9021> <9035> <902D> <902F> <9044> <9051> <9050> <9068> <9058> <9062> <905B> <66B9> <9074> <907D> <9082> <9088> <9083> <908B> <5F50> <5F57> <5F56> <5F58> <5C3B> <54AB> <5C50> <5C59> <5B71> <5C63> <5C66> <7FBC> <5F2A> <5F29> <5F2D> <8274> <5F3C> <9B3B> <5C6E> <5981> <5983> <598D> <59A9> <59A3> <5997> <59CA> <59AB> <599E> <59A4> <59D2> <59B2> <59AF> <59D7> <59BE> <5A05> <59DD> <5A08> <59E3> <59D8> <59F9> <5A0C> <5A09> <5A32> <5A34> <5A11> <5A23> <5A13> <5A40> <5A67> <5A4A> <5A55> <5A3C> <5A62> <5A75> <80EC> <5AAA> <5A9B> <5A77> <5A7A> <5ABE> <5AEB> <5AB2> <5AD2> <5AD4> <5AB8> <5AE0> <5AE3> <5AF1> <5AD6> <5AE6> <5AD8> <5ADC> <5B09> <5B17> <5B16> <5B32> <5B37> <5B40> <5C15> endbfrange 100 beginbfrange <5C1C> <5B5A> <5B65> <5B73> <5B51> <5B53> <5B62> <9A75> <9A77> <9A7A> <9A7F> <9A7D> <9A80> <9A85> <9A88> <9A8A> <9A90> <9A92> <9A96> <9A98> <9A9B> <9A9F> <9AA2> <9AA5> <9AA7> <7E9F> <7EA1> <7EA3> <7EA5> <7EA8> <7EAD> <7EB0> <7EBE> <7EC0> <7EC9> <7ECB> <7ED0> <7ED4> <7ED7> <7EDB> <7EE0> <7EE8> <7EEB> <7EEE> <7EF1> <7F0D> <7EF6> <7EFA> <7EFE> <7F01> <7F07> <7F0B> <7F0F> <7F11> <7F17> <7F19> <7F1C> <7F1B> <7F1F> <7F21> <7F2A> <7F2F> <7F35> <5E7A> <757F> <5DDB> <753E> <9095> <738E> <7391> <73AE> <73A2> <739F> <73CF> <73C2> <73D1> <73B7> <73B3> <73C0> <73C9> <73C8> <73E5> <73D9> <987C> <740A> <73E9> <73E7> <73DE> <73BA> <73F2> <740F> <742A> <745B> <7426> <7425> <7428> <7430> <742E> <742C> <741B> endbfrange 100 beginbfrange <741A> <7441> <745C> <7457> <7455> <7459> <7477> <746D> <747E> <749C> <748E> <7480> <7487> <748B> <749E> <74A8> <7490> <74A7> <74D2> <74BA> <97EA> <674C> <6753> <675E> <6748> <6769> <67A5> <6787> <676A> <6773> <6798> <67A7> <6775> <67A8> <679E> <67AD> <678B> <6777> <677C> <67F0> <6809> <67D8> <680A> <67E9> <67B0> <680C> <67D9> <67B5> <67DA> <67B3> <67DD> <6800> <67C3> <67B8> <67E2> <680E> <67C1> <67FD> <6832> <6860> <684E> <6862> <6844> <6864> <6883> <681D> <6855> <6866> <6841> <6867> <6840> <683E> <684A> <6849> <6829> <68B5> <688F> <6874> <6877> <6893> <686B> <68C2> <696E> <68FC> <691F> <68F9> <6924> <68F0> <690B> <6901> <6957> <68E3> <6910> <6971> <6939> <6960> <6942> <695D> <6984> <696B> endbfrange 100 beginbfrange <6980> <6998> <6978> <6934> <69CC> <6987> <69CE> <6989> <6966> <6963> <6979> <699B> <69A7> <69BB> <69AB> <69AD> <69D4> <69B1> <69C1> <69CA> <69DF> <6995> <69E0> <698D> <69FF> <6A2F> <69ED> <6A17> <6A65> <69F2> <6A44> <6A3E> <6AA0> <6A50> <6A5B> <6A35> <6A8E> <6A79> <6A3D> <6A28> <6A58> <6A7C> <6A91> <6A90> <6AA9> <6A97> <6AAB> <7337> <7352> <6B81> <6B87> <6B84> <6B92> <6B8D> <6B9A> <6BA1> <6BAA> <8F6B> <8F6D> <8F71> <8F75> <8F78> <8F77> <8F79> <8F7C> <8F7E> <8F81> <8F84> <8F87> <8F8B> <8F8D> <8F98> <8F9A> <8ECE> <620B> <6217> <621B> <621F> <6222> <6221> <6225> <6224> <622C> <81E7> <74EF> <74F4> <74FF> <750F> <7511> <7513> <6534> <65EE> <660A> <6619> <6772> <6603> <6615> <6600> <7085> <66F7> endbfrange 100 beginbfrange <661D> <6634> <6631> <6636> <6635> <8006> <665F> <6654> <6641> <664F> <6656> <6661> <6657> <6677> <6684> <668C> <66A7> <669D> <66BE> <66DB> <66E6> <66E9> <8D32> <8D36> <8D3B> <8D3D> <8D40> <8D45> <8D48> <8D47> <8D4D> <8D55> <8D59> <89C7> <89CA> <89CE> <726E> <729F> <725D> <7266> <726F> <727E> <7284> <728B> <728D> <728F> <7292> <6308> <6332> <63B0> <643F> <64D8> <8004> <6BEA> <6BF3> <6BFD> <6BF5> <6BF9> <6C05> <6C07> <6C06> <6C0D> <6C15> <6C18> <6C21> <6C29> <6C24> <6C2A> <6C32> <6535> <6555> <656B> <724D> <7252> <7256> <7230> <8662> <5216> <809F> <809C> <8093> <80BC> <670A> <80BD> <80B1> <80AB> <80AD> <80B4> <80B7> <80E7> <80DB> <80C2> <80C4> <80D9> <80CD> <80D7> <6710> <80DD> <80EB> <80F1> endbfrange 100 beginbfrange <80F4> <80ED> <810D> <80F2> <80FC> <6715> <8112> <8C5A> <8136> <811E> <812C> <8118> <8132> <8148> <814C> <8153> <8174> <8159> <8171> <8160> <8169> <817C> <816D> <8167> <584D> <5AB5> <8188> <8182> <8191> <6ED5> <81A3> <81AA> <81CC> <6726> <81CA> <81BB> <81C1> <81A6> <6B24> <6B37> <6B39> <6B43> <6B46> <6B59> <98D1> <98D5> <98D9> <6BB3> <5F40> <6BC2> <89F3> <6590> <9F51> <6593> <65BC> <65C6> <65C4> <65C3> <65CC> <65CE> <65D2> <65D6> <7080> <709C> <7096> <709D> <70BB> <70C0> <70B7> <70AB> <70B1> <70E8> <70CA> <7110> <7113> <7116> <712F> <7131> <7173> <715C> <7168> <7145> <7172> <714A> <7178> <717A> <7198> <71B3> <71B5> <71A8> <71A0> <71E0> <71D4> <71E7> <71F9> <721D> <7228> <706C> <7118> <7166> endbfrange 100 beginbfrange <71B9> <623E> <623D> <6243> <6248> <793B> <7940> <7946> <7949> <795B> <7953> <795A> <7962> <7957> <7960> <796F> <7967> <797A> <7985> <798A> <799A> <79A7> <79B3> <5FD1> <5FD0> <603C> <605D> <605A> <6067> <6041> <6059> <6063> <60AB> <6106> <610D> <615D> <61A9> <619D> <61CB> <61D1> <6206> <8080> <807F> <6C93> <6CF6> <6DFC> <77F6> <77F8> <7800> <7809> <7817> <7811> <65AB> <782D> <781C> <7839> <781F> <783C> <7825> <782C> <7823> <7829> <784E> <786D> <7856> <7826> <7850> <7847> <784C> <786A> <789B> <7893> <789A> <7887> <789C> <78A1> <78A3> <78B2> <78B9> <78A5> <78D4> <78D9> <78C9> <78EC> <78F2> <7905> <78F4> <7913> <7924> <791E> <7934> <9F9B> <9EF9> <9EFB> <76F1> <7704> <770D> <76F9> <7707> <771A> endbfrange 100 beginbfrange <7722> <7719> <772D> <7726> <7735> <7738> <7750> <7747> <7743> <775A> <7768> <7762> <7765> <777F> <778D> <777D> <7780> <778C> <7791> <779F> <77B0> <77B5> <77BD> <753A> <7540> <754E> <754B> <7548> <755B> <7572> <7579> <7583> <7F58> <7F61> <7F5F> <8A48> <7F68> <7F74> <7F71> <7F79> <7F81> <7F7E> <76CD> <76E5> <8832> <9485> <948B> <948A> <948C> <948F> <9494> <9497> <9495> <949A> <94A3> <94AB> <94AA> <94AD> <94AC> <94AF> <94B2> <94B4> <94B6> <94BC> <94BF> <94C4> <94C8> <94D0> <94D5> <94D9> <94D8> <94DB> <94DE> <94E2> <94E4> <94E7> <94EA> <94E9> <94EB> <94EE> <94F3> <94F7> <94F9> <94FC> <94FF> <9503> <9502> <9506> <9509> <950D> <9512> <9518> <951B> <951D> <9522> <952A> <9529> <952C> <9531> <9534> endbfrange 100 beginbfrange <9536> <953C> <953E> <9542> <9535> <9544> <9549> <954C> <954E> <9552> <9556> <955B> <955E> <955D> <9561> <9564> <956F> <9571> <953A> <77E7> <77EC> <96C9> <79D5> <79ED> <79E3> <79EB> <7A06> <5D47> <7A03> <7A02> <7A1E> <7A14> <7A39> <7A37> <7A51> <9ECF> <99A5> <7A70> <7688> <768E> <7693> <7699> <76A4> <74DE> <74E0> <752C> <9E20> <9E22> <9E28> <9E32> <9E31> <9E36> <9E38> <9E37> <9E39> <9E3E> <9E41> <9E44> <9E46> <9E4B> <9E4E> <9E51> <9E55> <9E57> <9E5A> <9E5E> <9E63> <9E66> <9E71> <9E6D> <9E73> <7592> <7594> <7596> <75A0> <759D> <75AC> <75A3> <75B3> <75B8> <75C4> <75B1> <75B0> <75C3> <75C2> <75D6> <75CD> <75E3> <75E8> <75E6> <75E4> <75EB> <75E7> <7603> <75F1> <75FC> <75FF> <7610> <7600> <7605> endbfrange 100 beginbfrange <760C> <7617> <760A> <7625> <7618> <7615> <7619> <761B> <763C> <7622> <7620> <7640> <762D> <7630> <763F> <7635> <7643> <763E> <7633> <764D> <765E> <7654> <765C> <7656> <766B> <766F> <7FCA> <7AE6> <7A78> <7A80> <7A86> <7A88> <7A95> <7AA6> <7AA0> <7AAC> <7AA8> <7AAD> <7AB3> <8864> <8869> <8872> <887D> <887F> <8882> <88A2> <88C6> <88B7> <88BC> <88C9> <88E2> <88CE> <88E3> <88E5> <88F1> <891A> <88FC> <88E8> <88FE> <88F0> <8921> <8919> <8913> <891B> <890A> <8934> <892B> <8936> <8941> <8966> <897B> <758B> <80E5> <76B2> <76B4> <77DC> <8012> <8014> <8016> <801C> <8020> <8022> <8025> <8029> <8028> <8031> <800B> <8035> <8043> <8046> <804D> <8052> <8069> <8071> <8983> <9878> <9880> <9883> <9889> <988C> endbfrange 100 beginbfrange <988F> <9894> <989A> <989E> <98A1> <98A5> <864D> <8654> <866C> <866E> <867F> <867A> <867C> <867B> <86A8> <868D> <868B> <86AC> <869D> <86A7> <86A3> <86AA> <8693> <86A9> <86B6> <86C4> <86B5> <86CE> <86B0> <86BA> <86B1> <86AF> <86C9> <86CF> <86B4> <86E9> <86F1> <86ED> <86F3> <86D0> <8713> <86DE> <86F4> <86DF> <86D8> <86D1> <8703> <8707> <86F8> <8708> <870A> <870D> <8709> <8723> <873B> <871E> <8725> <872E> <871A> <873E> <8748> <8734> <8731> <8729> <8737> <873F> <8782> <8722> <877D> <877B> <8760> <8770> <874C> <876E> <878B> <8753> <8763> <877C> <8764> <8759> <8765> <8793> <87AF> <87A8> <87D2> <87C6> <8788> <8785> <87AD> <8797> <8783> <87AB> <87E5> <87AC> <87B5> <87B3> <87CB> <87D3> <87BD> <87D1> endbfrange 100 beginbfrange <87C0> <87CA> <87DB> <87EA> <87E0> <87EE> <8816> <8813> <87FE> <880A> <881B> <8821> <8839> <883C> <7F36> <7F42> <7F44> <8210> <7AFA> <7AFD> <7B08> <7B03> <7B15> <7B0A> <7B2B> <7B0F> <7B47> <7B38> <7B2A> <7B19> <7B2E> <7B31> <7B20> <7B25> <7B24> <7B33> <7B3E> <7B1E> <7B58> <7B5A> <7B45> <7B75> <7B4C> <7B5D> <7B60> <7B6E> <7B7B> <7B62> <7B72> <7B71> <7B90> <7BA6> <7BB8> <7BAC> <7B9D> <7BA8> <7B85> <7BAA> <7B9C> <7BA2> <7BAB> <7BB4> <7BD1> <7BC1> <7BCC> <7BDD> <7BDA> <7BE5> <7BEA> <7C0C> <7BFE> <7BFC> <7C0F> <7C16> <7C0B> <7C1F> <7C2A> <7C26> <7C38> <7C41> <7C40> <81FE> <8201> <8204> <81EC> <8844> <8221> <822D> <822F> <8228> <822B> <8238> <823B> <8233> <823E> <8244> <8249> <824B> <824F> <825A> endbfrange 100 beginbfrange <825F> <8268> <887E> <8885> <8888> <88D8> <88DF> <895E> <7F9D> <7F9F> <7FA7> <7FAF> <7FB2> <7C7C> <6549> <7C91> <7C9D> <7C9C> <7C9E> <7CA2> <7CB2> <7CBC> <7CC1> <7CC7> <7CCC> <7CC8> <7CC5> <7CD7> <7CE8> <826E> <66A8> <7FBF> <7FCE> <7FD5> <7FE5> <7FE1> <7FE6> <7FE9> <7FEE> <7FF3> <7CF8> <7D77> <7DA6> <7DAE> <7E47> <7E9B> <9EB8> <9EB4> <8D73> <8D84> <8D94> <8D91> <8DB1> <8D67> <8D6D> <8C47> <8C49> <914A> <9150> <914E> <9164> <9162> <9161> <9170> <9169> <916F> <917D> <9172> <9174> <9179> <918C> <9185> <9190> <918D> <9191> <91A2> <91AA> <91AD> <91B5> <91B4> <91BA> <8C55> <9E7E> <8DB8> <8DEB> <8E05> <8E59> <8E69> <8DB5> <8DBF> <8DBC> <8DBA> <8DC4> <8DD6> <8DDA> <8DDE> <8DCE> <8DDB> <8DC6> <8DEC> endbfrange 100 beginbfrange <8DF7> <8DE3> <8DF9> <8DFB> <8DE4> <8E09> <8DFD> <8E14> <8E1D> <8E1F> <8E2C> <8E2E> <8E23> <8E2F> <8E3A> <8E40> <8E39> <8E35> <8E3D> <8E31> <8E49> <8E41> <8E51> <8E4A> <8E70> <8E76> <8E7C> <8E6F> <8E74> <8E85> <8E8F> <8E94> <8E90> <8E9C> <8E9E> <8C78> <8C82> <8C8A> <8C85> <8C98> <8C94> <659B> <89D6> <89DE> <89DA> <89DC> <89E5> <89EB> <89EF> <8A3E> <8B26> <9753> <96E9> <96F3> <96EF> <9706> <9701> <9708> <970F> <970E> <972A> <972D> <9730> <973E> <9F80> <9F83> <9F85> <9F8C> <9EFE> <9F0B> <9F0D> <96B9> <96BC> <96CE> <96D2> <77BF> <96E0> <928E> <92AE> <92C8> <933E> <936A> <93CA> <938F> <943E> <946B> <9C7F> <9C82> <9C85> <7A23> <9C8B> <9C8E> <9C90> <9C94> <9C9A> <9C9E> <9CA5> <9CAB> <9CAD> <9CB0> endbfrange 81 beginbfrange <9CBA> <9CC4> <9CCA> <9CCC> <9CD3> <9CD7> <9CDC> <9CDF> <9CE2> <977C> <9785> <9791> <9794> <97AF> <97AB> <97A3> <97B2> <97B4> <9AB1> <9AB0> <9AB7> <9E58> <9AB6> <9ABA> <9ABC> <9AC1> <9AC0> <9AC5> <9AC2> <9ACB> <9AD1> <9B45> <9B43> <9B47> <9B49> <9B48> <9B4D> <9B51> <98E8> <990D> <992E> <9955> <9954> <9ADF> <9AE1> <9AE6> <9AEF> <9AEB> <9AFB> <9AED> <9AF9> <9B08> <9B0F> <9B13> <9B1F> <9B23> <9EBD> <7E3B> <9E82> <9E87> <9E8B> <9E92> <93D6> <9E9D> <9E9F> <9EDB> <9EE0> <9EDF> <9EE2> <9EE9> <9EE7> <9EE5> <9EEA> <9EEF> <9F22> <9F2C> <9F2F> <9F39> <9F37> <9F3D> <9F44> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/GBpc-EUC-V b/Resources/cmap/GBpc-EUC-V deleted file mode 100644 index 5698c4ba34a..00000000000 --- a/Resources/cmap/GBpc-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (GBpc-EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (GBpc-EUC-H) %%BeginResource: CMap (GBpc-EUC-V) %%Title: (GBpc-EUC-V Adobe GB1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /GBpc-EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 0 def end def /CMapName /GBpc-EUC-V def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 300 def /XUID [1 10 25365] def /WMode 1 def 20 begincidrange 575 574 598 7704 599 582 7706 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7711 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/H b/Resources/cmap/H deleted file mode 100644 index 5f364b05c76..00000000000 --- a/Resources/cmap/H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (H) %%Title: (H Adobe Japan1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 1 def end def /CMapName /H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 280 def /XUID [1 10 25335] def /WMode 0 def 1 begincodespacerange <2121> <7E7E> endcodespacerange 100 begincidrange <2121> <217e> 633 <2221> <222e> 727 <223a> <2241> 741 <224a> <2250> 749 <225c> <226a> 756 <2272> <2279> 771 <227e> <227e> 779 <2330> <2339> 780 <2341> <235a> 790 <2361> <237a> 816 <2421> <2473> 842 <2521> <2576> 925 <2621> <2638> 1011 <2641> <2658> 1035 <2721> <2741> 1059 <2751> <2771> 1092 <2821> <2821> 7479 <2822> <2822> 7481 <2823> <2823> 7491 <2824> <2824> 7495 <2825> <2825> 7503 <2826> <2826> 7499 <2827> <2827> 7507 <2828> <2828> 7523 <2829> <2829> 7515 <282a> <282a> 7531 <282b> <282b> 7539 <282c> <282c> 7480 <282d> <282d> 7482 <282e> <282e> 7494 <282f> <282f> 7498 <2830> <2830> 7506 <2831> <2831> 7502 <2832> <2832> 7514 <2833> <2833> 7530 <2834> <2834> 7522 <2835> <2835> 7538 <2836> <2836> 7554 <2837> <2837> 7511 <2838> <2838> 7526 <2839> <2839> 7519 <283a> <283a> 7534 <283b> <283b> 7542 <283c> <283c> 7508 <283d> <283d> 7527 <283e> <283e> 7516 <283f> <283f> 7535 <2840> <2840> 7545 <3021> <307e> 1125 <3121> <317e> 1219 <3221> <327e> 1313 <3321> <337e> 1407 <3421> <347e> 1501 <3521> <357e> 1595 <3621> <367e> 1689 <3721> <377e> 1783 <3821> <387e> 1877 <3921> <397e> 1971 <3a21> <3a7e> 2065 <3b21> <3b7e> 2159 <3c21> <3c7e> 2253 <3d21> <3d7e> 2347 <3e21> <3e7e> 2441 <3f21> <3f7e> 2535 <4021> <407e> 2629 <4121> <417e> 2723 <4221> <427e> 2817 <4321> <437e> 2911 <4421> <447e> 3005 <4521> <457e> 3099 <4621> <467e> 3193 <4721> <477e> 3287 <4821> <487e> 3381 <4921> <497e> 3475 <4a21> <4a7e> 3569 <4b21> <4b7e> 3663 <4c21> <4c7e> 3757 <4d21> <4d7e> 3851 <4e21> <4e7e> 3945 <4f21> <4f53> 4039 <5021> <507e> 4090 <5121> <517e> 4184 <5221> <527e> 4278 <5321> <537e> 4372 <5421> <547e> 4466 <5521> <557e> 4560 <5621> <567e> 4654 <5721> <577e> 4748 <5821> <587e> 4842 <5921> <597e> 4936 <5a21> <5a7e> 5030 <5b21> <5b7e> 5124 <5c21> <5c7e> 5218 <5d21> <5d7e> 5312 <5e21> <5e7e> 5406 <5f21> <5f7e> 5500 <6021> <607e> 5594 <6121> <617e> 5688 <6221> <627e> 5782 <6321> <637e> 5876 endcidrange 18 begincidrange <6421> <647e> 5970 <6521> <657e> 6064 <6621> <667e> 6158 <6721> <677e> 6252 <6821> <687e> 6346 <6921> <697e> 6440 <6a21> <6a7e> 6534 <6b21> <6b7e> 6628 <6c21> <6c7e> 6722 <6d21> <6d7e> 6816 <6e21> <6e7e> 6910 <6f21> <6f7e> 7004 <7021> <707e> 7098 <7121> <717e> 7192 <7221> <727e> 7286 <7321> <737e> 7380 <7421> <7424> 7474 <7425> <7426> 8284 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/HKdla-B5-H b/Resources/cmap/HKdla-B5-H deleted file mode 100644 index 6cdd1947fa9..00000000000 --- a/Resources/cmap/HKdla-B5-H +++ /dev/null @@ -1,1116 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (HKdla-B5-H) -%%Title: (HKdla-B5-H Adobe CNS1 1) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 1 def -end def - -/CMapName /HKdla-B5-H def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25521] def - -/WMode 0 def - -2 begincodespacerange - <00> <80> - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 - 99 - 13743 - 128 - 162 - 248 - 247 - 249 - 256 - 319 - 413 - 476 - 503 - 595 - 658 - 752 - 815 - 909 - 972 - 1066 - 1129 - 1223 - 1286 - 1380 - 1443 - 1537 - 1600 - 1694 - 1757 - 1851 - 1914 - 2431 - 2007 - 2070 - 2164 - 2227 - 2321 - 2384 - 2432 - 2479 - 2542 - 2636 - 2699 - 2793 - 2856 - 2950 - 3013 - 3107 - 3170 - 3264 - 3327 - 3421 - 3484 - 3578 - 3641 - 3735 - 3798 - 3892 - 3955 - 4049 - 4112 - 4206 - 4269 - 4309 - 4364 - 4427 - 4521 - 4584 - 4678 - 4308 - 4696 - 4740 - 4834 - 4897 - 4991 - 5054 - 5148 - 5211 - 5222 - 5306 - 5369 - 5221 - 5411 - 5462 - 5496 - 5526 - 5551 - 5550 - 5552 - 5620 - 5495 - 5642 - 5682 - 5776 - 5839 - 5933 - 5996 - 628 - 6006 - 6040 -endcidrange - -100 begincidrange - 6059 - 6039 - 6088 - 6135 - 6153 - 6216 - 6134 - 6302 - 6309 - 6372 - 6466 - 6529 - 6623 - 6686 - 6780 - 6843 - 6937 - 7000 - 7094 - 7157 - 7251 - 7314 - 7408 - 7471 - 7565 - 7628 - 7722 - 7785 - 7879 - 7942 - 8036 - 8099 - 8788 - 8143 - 8193 - 8889 - 8251 - 8255 - 8349 - 8412 - 8506 - 8569 - 8663 - 8726 - 8142 - 8789 - 8820 - 8883 - 8890 - 8978 - 9041 - 9135 - 9198 - 9089 - 9289 - 9291 - 9354 - 9448 - 9511 - 9605 - 9668 - 9762 - 9825 - 9919 - 9982 - 10076 - 10139 - 10233 - 10296 - 10390 - 10453 - 10547 - 10610 - 10704 - 10767 - 10861 - 10924 - 10927 - 11019 - 11074 - 11083 - 11177 - 11240 - 11334 - 11362 - 11398 - 10926 - 11478 - 11491 - 11554 - 11073 - 11615 - 11647 - 11710 - 11720 - 11805 - 11868 - 12308 - 11942 - 11961 -endcidrange - -100 begincidrange - 12024 - 12118 - 11719 - 12140 - 12180 - 11361 - 12222 - 12273 - 12309 - 12640 - 12317 - 12336 - 12430 - 12783 - 12470 - 12492 - 12527 - 12587 - 12641 - 12651 - 12745 - 12784 - 12809 - 12526 - 12829 - 12901 - 12903 - 12966 - 13060 - 12900 - 13095 - 13122 - 13216 - 13279 - 13373 - 13436 - 13530 - 13586 - 13594 - 13585 - 13629 - 13641 - 13630 - 13642 - 16713 - 16035 - 16004 - 16007 - 15877 - 16534 - 14788 - 15725 - 15999 - 15479 - 16006 - 14460 - 16039 - 16910 - 16036 - 16778 - 16479 - 16662 - 16523 - 15974 - 15973 - 15759 - 16798 - 14950 - 16737 - 16010 - 15758 - 16013 - 15804 - 16021 - 14755 - 16884 - 16017 - 15302 - 15811 - 16046 - 14150 - 14449 - 14848 - 17036 - 16987 - 16045 - 16675 - 16038 - 16032 - 15150 - 15805 - 14436 - 15485 - 16041 - 16909 - 16216 - 16024 - 15728 - 16040 - 16020 -endcidrange - -100 begincidrange - 16029 - 15018 - 16037 - 15564 - 16536 - 16031 - 16885 - 16011 - 15218 - 14304 - 15071 - 17120 - 16023 - 16786 - 14472 - 17096 - 16016 - 14447 - 16028 - 16708 - 16710 - 16030 - 16009 - 16531 - 16001 - 15374 - 16005 - 14556 - 16489 - 14296 - 16025 - 16003 - 16008 - 16000 - 16049 - 16746 - 14187 - 15975 - 15992 - 16994 - 14325 - 14324 - 15173 - 15961 - 10940 - 15807 - 16573 - 15998 - 14381 - 16048 - 16043 - 16050 - 16929 - 16234 - 14363 - 16026 - 16931 - 16014 - 15357 - 16474 - 16047 - 15560 - 14664 - 17085 - 16588 - 15964 - 16044 - 14618 - 16042 - 17305 - 14490 - 16012 - 14495 - 16033 - 16775 - 16015 - 16323 - 16034 - 16027 - 15997 - 16465 - 16316 - 16341 - 15124 - 16930 - 14235 - 16507 - 14216 - 15284 - 16848 - 16996 - 14430 - 14188 - 15806 - 14355 - 16383 - 15715 - 14214 - 15178 - 14138 -endcidrange - -100 begincidrange - 17018 - 15482 - 16901 - 15398 - 14511 - 14646 - 14248 - 15220 - 16237 - 16022 - 14268 - 15995 - 16362 - 16842 - 14807 - 16593 - 15217 - 16335 - 1986 - 17150 - 15565 - 15984 - 15986 - 14156 - 14185 - 15183 - 14239 - 11845 - 14349 - 16290 - 14364 - 16252 - 16217 - 16286 - 15763 - 14357 - 14475 - 15456 - 14576 - 14250 - 16180 - 15378 - 14592 - 16298 - 14603 - 14633 - 16167 - 16272 - 16215 - 16219 - 16226 - 15734 - 14792 - 16228 - 14653 - 15462 - 14800 - 16418 - 16172 - 16168 - 14796 - 16166 - 14797 - 16191 - 14789 - 16334 - 16436 - 16222 - 16434 - 16468 - 16760 - 16224 - 16169 - 16477 - 16195 - 16232 - 16480 - 16170 - 16483 - 14823 - 14518 - 16528 - 16456 - 16402 - 15740 - 16459 - 16461 - 16463 - 16975 - 15737 - 16192 - 16138 - 16336 - 16182 - 16493 - 16517 - 16516 - 16702 - 16699 - 16326 -endcidrange - -100 begincidrange - 16518 - 14674 - 16545 - 16178 - 16899 - 16230 - 15747 - 15989 - 16546 - 1392 - 16185 - 2161 - 16164 - 16558 - 16196 - 14581 - 16329 - 16333 - 16309 - 15996 - 16338 - 16205 - 16572 - 16567 - 14424 - 17327 - 16236 - 15749 - 17302 - 14758 - 16253 - 16319 - 16584 - 16223 - 16171 - 15730 - 16591 - 14853 - 15746 - 16604 - 15717 - 16596 - 16602 - 16173 - 1429 - 15745 - 16625 - 1781 - 16632 - 16635 - 16193 - 16664 - 15753 - 16220 - 15719 - 16142 - 16147 - 16674 - 16330 - 16681 - 16140 - 16139 - 16225 - 15754 - 16174 - 6513 - 16693 - 14891 - 16235 - 15269 - 16452 - 16981 - 14135 - 16165 - 14137 - 14896 - 16707 - 16580 - 15716 - 16318 - 16294 - 16428 - 16727 - 16287 - 11072 - 16295 - 16389 - 16385 - 7323 - 15748 - 2709 - 16748 - 16393 - 15733 - 15068 - 16296 - 16183 - 16756 - 16390 - 16386 -endcidrange - -100 begincidrange - 16314 - 16320 - 4784 - 16317 - 16755 - 16774 - 14932 - 16325 - 16985 - 16322 - 16149 - 16208 - 16262 - 16321 - 16780 - 16327 - 16150 - 16782 - 16203 - 16797 - 4447 - 16324 - 13188 - 15769 - 16825 - 14985 - 16823 - 15755 - 15718 - 994 - 15722 - 15738 - 16867 - 1561 - 14742 - 16328 - 15006 - 16184 - 15744 - 16862 - 17131 - 15750 - 16859 - 16190 - 16470 - 16857 - 16374 - 16221 - 15732 - 16872 - 16839 - 15761 - 15179 - 15682 - 15021 - 15013 - 16882 - 16204 - 16888 - 16238 - 16249 - 16269 - 16387 - 16273 - 15043 - 2330 - 16948 - 16379 - 16960 - 16381 - 16248 - 15477 - 15475 - 14501 - 17401 - 15614 - 16983 - 16947 - 15721 - 15486 - 15727 - 16384 - 15808 - 16388 - 3698 - 14648 - 16292 - 10586 - 17011 - 15049 - 17021 - 15050 - 16306 - 16310 - 16279 - 16282 - 17035 - 17402 - 17034 - 16209 -endcidrange - -100 begincidrange - 16280 - 16803 - 15708 - 16227 - 17040 - 8084 - 17094 - 17058 - 16378 - 16285 - 16382 - 16283 - 16351 - 16358 - 16350 - 17079 - 16372 - 17080 - 16363 - 17087 - 15729 - 16207 - 17093 - 17109 - 17104 - 17112 - 16213 - 16360 - 16371 - 17119 - 16339 - 15987 - 16277 - 17134 - 17140 - 16268 - 16335 - 17132 - 16340 - 17136 - 1986 - 2389 - 17150 - 17153 - 15565 - 17159 - 17403 - 16346 - 16267 - 14131 - 16266 - 14145 - 14144 - 14146 - 16275 - 16271 - 15984 - 17097 - 15986 - 16297 - 17101 - 17362 - 16270 - 16247 - 15726 - 3338 - 16145 - 14162 - 16148 - 16152 - 16211 - 16159 - 16156 - 16312 - 13213 - 15167 - 16210 - 16154 - 16157 - 14172 - 14469 - 14177 - 16343 - 16342 - 16345 - 16344 - 16349 - 16019 - 14185 - 14190 - 15180 - 14196 - 14207 - 14203 - 14210 - 15183 - 14226 - 16355 - 16348 - 16347 -endcidrange - -100 begincidrange - 16357 - 15221 - 14242 - 16354 - 16359 - 15981 - 3370 - 15993 - 15990 - 14239 - 16366 - 17108 - 15764 - 15713 - 16353 - 14174 - 15226 - 14347 - 16364 - 16367 - 11845 - 16380 - 16365 - 14349 - 16356 - 16274 - 16302 - 14353 - 16250 - 15243 - 16218 - 14358 - 16290 - 15246 - 14364 - 8276 - 14367 - 16288 - 17404 - 15894 - 15252 - 16252 - 16391 - 16251 - 15731 - 15991 - 15762 - 16289 - 14273 - 14291 - 15994 - 16217 - 15445 - 16376 - 16373 - 15436 - 15756 - 16291 - 14272 - 16212 - 14336 - 15231 - 16286 - 14370 - 16361 - 14371 - 16352 - 15763 - 16377 - 14375 - 16293 - 16368 - 14390 - 16281 - 16370 - 15757 - 17382 - 13602 - 16369 - 16284 - 16305 - 16278 - 15983 - 16233 - 16375 - 16258 - 16264 - 16261 - 16259 - 16255 - 16265 - 15285 - 14434 - 16263 - 16177 - 14357 - 14462 - 16201 - 16200 - 16199 -endcidrange - -100 begincidrange - 16197 - 17387 - 14466 - 16239 - 16206 - 15304 - 17405 - 15723 - 17406 - 16331 - 15826 - 14457 - 16144 - 14382 - 14475 - 15456 - 10911 - 15457 - 14483 - 15988 - 16300 - 16257 - 15309 - 15316 - 15315 - 16332 - 16337 - 16189 - 16202 - 9042 - 14509 - 16198 - 14517 - 16141 - 16307 - 14528 - 15919 - 14543 - 14549 - 16179 - 15765 - 16181 - 14551 - 16175 - 14560 - 15362 - 16242 - 16240 - 15766 - 14566 - 16437 - 16243 - 14576 - 15371 - 14583 - 14250 - 17407 - 14586 - 15377 - 16180 - 16313 - 15378 - 16394 - 15735 - 16194 - 14592 - 14594 - 16244 - 15767 - 16298 - 16153 - 16155 - 14606 - 14601 - 14603 - 16146 - 16151 - 16311 - 16160 - 16315 - 16188 - 16301 - 14617 - 16214 - 16241 - 16308 - 14620 - 16158 - 16186 - 14619 - 15751 - 15418 - 16162 - 15985 - 15417 - 15742 - 16676 - 16187 - 15982 - 16299 -endcidrange - -22 begincidrange - 14629 - 16176 - 14633 - 16260 - 16143 - 16246 - 16276 - 14642 - 16167 - 14643 - 16245 - 14647 - 15736 - 16161 - 16272 - 14656 - 15743 - 14666 - 16256 - 16163 - 14672 - 16254 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKdla-B5-V b/Resources/cmap/HKdla-B5-V deleted file mode 100644 index 76c746ecc33..00000000000 --- a/Resources/cmap/HKdla-B5-V +++ /dev/null @@ -1,71 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (HKdla-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (HKdla-B5-H) -%%BeginResource: CMap (HKdla-B5-V) -%%Title: (HKdla-B5-V Adobe CNS1 0) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/HKdla-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /HKdla-B5-V def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25522] def - -/WMode 1 def - -12 begincidrange - 13646 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 13647 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKdlb-B5-H b/Resources/cmap/HKdlb-B5-H deleted file mode 100644 index ebdae5f3864..00000000000 --- a/Resources/cmap/HKdlb-B5-H +++ /dev/null @@ -1,998 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (HKdlb-B5-H) -%%Title: (HKdlb-B5-H Adobe CNS1 1) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 1 def -end def - -/CMapName /HKdlb-B5-H def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25523] def - -/WMode 0 def - -2 begincodespacerange - <00> <80> - <8E40> -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 -<8e40> <8e40> 15735 -<8e41> <8e41> 15724 -<8e42> <8e42> 16217 -<8e43> <8e43> 14617 -<8e44> <8e44> 15984 -<8e45> <8e45> 14162 -<8e46> <8e46> 14511 -<8e47> <8e47> 14214 -<8e48> <8e48> 16155 -<8e49> <8e49> 15708 -<8e4a> <8e4a> 16281 -<8e4b> <8e4b> 16360 -<8e4c> <8e4c> 14475 -<8e4d> <8e4d> 14556 -<8e4e> <8e4e> 16298 -<8e4f> <8e4f> 17096 -<8e50> <8e50> 14145 -<8e51> <8e51> 15743 -<8e52> <8e52> 17132 -<8e53> <8e53> 16275 -<8e54> <8e54> 14490 -<8e55> <8e55> 14457 -<8e56> <8e56> 14138 -<8e57> <8e57> 17104 -<8e58> <8e58> 15983 -<8e59> <8e59> 16152 -<8e5a> <8e5a> 14056 -<8e5b> <8e5b> 14137 -<8e5c> <8e5c> 16025 -<8e5d> <8e5d> 15180 -<8e5e> <8e5e> 15826 -<8e5f> <8e5f> 16297 -<8e60> <8e60> 16300 -<8e61> <8e61> 16331 -<8e62> <8e62> 14131 -<8e63> <8e63> 16287 -<8e64> <8e64> 16602 -<8e65> <8e65> 16169 -<8e66> <8e66> 15462 -<8e67> <8e67> 16930 -<8e68> <8e68> 16558 -<8e69> <8e69> 15738 -<8e6a> <8e6a> 16269 -<8e6b> <8e6b> 14800 -<8e6c> <8e6c> 16996 -<8e6d> <8e6d> 15746 -<8e6e> <8e6e> 16899 -<8e6f> <8e6f> 16859 -<8e70> <8e70> 16350 -<8e71> <8e71> 16372 -<8e72> <8e72> 16388 -<8e73> <8e73> 16230 -<8e74> <8e74> 16283 -<8e75> <8e75> 15718 -<8e76> <8e76> 16459 -<8e77> <8e77> 16351 -<8e78> <8e78> 16635 -<8e79> <8e79> 16402 -<8e7a> <8e7a> 16358 -<8e7b> <8e7b> 17131 -<8e7c> <8e7c> 16676 -<8e7d> <8e7d> 15740 -<8e7e> <8e7e> 15721 -<8ea1> <8ea1> 16382 -<8ea2> <8ea2> 15730 -<8ea3> <8ea3> 16326 -<8ea4> <8ea4> 15614 -<8ea5> <8ea5> 17401 -<8ea6> <8ea6> 15682 -<8ea7> <8ea7> 16149 -<8ea8> <8ea8> 16334 -<8ea9> <8ea9> 17035 -<8eaa> <8eaa> 16591 -<8eab> <8eab> 17398 -<8eac> <8eac> 16389 -<8ead> <8ead> 16173 -<8eae> <8eae> 16737 -<8eaf> <8eaf> 16172 -<8eb0> <8eb0> 15050 -<8eb1> <8eb1> 15722 -<8eb2> <8eb2> 16483 -<8eb3> <8eb3> 16325 -<8eb4> <8eb4> 14823 -<8eb5> <8eb5> 16170 -<8eb6> <8eb6> 16480 -<8eb7> <8eb7> 17011 -<8eb8> <8eb8> 16929 -<8eb9> <8eb9> 16546 -<8eba> <8eba> 16232 -<8ebb> <8ebb> 16545 -<8ebc> <8ebc> 16215 -<8ebd> <8ebd> 16240 -<8ebe> <8ebe> 16311 -<8ebf> <8ebf> 14150 -<8ec0> <8ec0> 16299 -<8ec1> <8ec1> 16370 -<8ec2> <8ec2> 16268 -<8ec3> <8ec3> 16264 -<8ec4> <8ec4> 14291 -endcidrange - -100 begincidrange -<8ec5> <8ec6> 15220 -<8ec7> <8ec7> 17140 -<8ec8> <8ec8> 15436 -<8ec9> <8ec9> 15226 -<8eca> <8eca> 14469 -<8ecb> <8ecb> 14135 -<8ecc> <8ecc> 16347 -<8ecd> <8ecd> 16157 -<8ece> <8ece> 16364 -<8ecf> <8ecf> 16357 -<8ed0> <8ed0> 14174 -<8ed1> <8ed1> 16375 -<8ed2> <8ed2> 14355 -<8ed3> <8ed3> 16355 -<8ed4> <8ed4> 16154 -<8ed5> <8ed5> 14566 -<8ed6> <8ed6> 16348 -<8ed7> <8ed7> 14207 -<8ed8> <8ed8> 15751 -<8ed9> <8ed9> 15315 -<8eda> <8eda> 15736 -<8edb> <8edb> 15316 -<8edc> <8edc> 16278 -<8edd> <8edd> 16277 -<8ede> <8ede> 15756 -<8edf> <8edf> 14647 -<8ee0> <8ee0> 16156 -<8ee1> <8ee1> 14642 -<8ee2> <8ee2> 15723 -<8ee3> <8ee3> 14336 -<8ee4> <8ee4> 16376 -<8ee5> <8ee5> 15418 -<8ee6> <8ee6> 16194 -<8ee7> <8ee7> 17405 -<8ee8> <8ee8> 16305 -<8ee9> <8ee9> 14226 -<8eea> <8eea> 16276 -<8eeb> <8eeb> 16158 -<8eec> <8eec> 16394 -<8eed> <8eed> 14466 -<8eee> <8eee> 16284 -<8eef> <8eef> 15713 -<8ef0> <8ef0> 16162 -<8ef1> <8ef1> 16361 -<8ef2> <8ef2> 15762 -<8ef3> <8ef3> 14207 -<8ef4> <8ef4> 15252 -<8ef5> <8ef5> 14190 -<8ef6> <8ef6> 17153 -<8ef7> <8ef7> 16186 -<8ef8> <8ef8> 14435 -<8ef9> <8ef9> 16369 -<8efa> <8efa> 17150 -<8efb> <8efb> 15356 -<8efc> <8efc> 16197 -<8efd> <8efd> 14239 -<8efe> <8efe> 14187 -<8f40> <8f40> 16148 -<8f41> <8f41> 16199 -<8f42> <8f42> 14434 -<8f43> <8f43> 14185 -<8f44> <8f44> 15378 -<8f45> <8f45> 16201 -<8f46> <8f46> 14367 -<8f47> <8f47> 14633 -<8f48> <8f48> 16214 -<8f49> <8f49> 16180 -<8f4a> <8f4a> 16349 -<8f4b> <8f4b> 14586 -<8f4c> <8f4c> 16251 -<8f4d> <8f4d> 15377 -<8f4e> <8f4e> 16252 -<8f4f> <8f4f> 17407 -<8f50> <8f50> 15987 -<8f51> <8f51> 16241 -<8f52> <8f52> 14629 -<8f53> <8f53> 15445 -<8f54> <8f54> 14517 -<8f55> <8f55> 16218 -<8f56> <8f56> 14358 -<8f57> <8f57> 15981 -<8f58> <8f58> 14210 -<8f59> <8f59> 16145 -<8f5a> <8f5a> 15243 -<8f5b> <8f5b> 14272 -<8f5c> <8f5c> 14357 -<8f5d> <8f5d> 14395 -<8f5e> <8f5e> 15731 -<8f5f> <8f5f> 15726 -<8f60> <8f60> 16266 -<8f61> <8f61> 16190 -<8f62> <8f62> 16948 -<8f63> <8f63> 16867 -<8f64> <8f64> 16327 -<8f65> <8f65> 16371 -<8f66> <8f66> 16387 -<8f67> <8f67> 16434 -<8f68> <8f68> 16238 -<8f69> <8f69> 16803 -<8f6a> <8f6a> 16390 -endcidrange - -100 begincidrange -<8f6b> <8f6b> 16171 -<8f6c> <8f6c> 16253 -<8f6d> <8f6d> 15475 -<8f6e> <8f6e> 16150 -<8f6f> <8f6f> 16386 -<8f70> <8f70> 16470 -<8f71> <8f71> 16314 -<8f72> <8f72> 16235 -<8f73> <8f73> 16273 -<8f74> <8f74> 16318 -<8f75> <8f75> 16474 -<8f76> <8f76> 15071 -<8f77> <8f77> 15937 -<8f78> <8f78> 15719 -<8f79> <8f79> 16224 -<8f7a> <8f7a> 16872 -<8f7b> <8f7b> 16320 -<8f7c> <8f7c> 15747 -<8f7d> <8f7d> 16755 -<8f7e> <8f7e> 16220 -<8fa1> <8fa1> 16178 -<8fa2> <8fa2> 16191 -<8fa3> <8fa3> 15715 -<8fa4> <8fa4> 16710 -<8fa5> <8fa5> 16333 -<8fa6> <8fa6> 15737 -<8fa7> <8fa7> 16168 -<8fa8> <8fa8> 16321 -<8fa9> <8fa9> 16572 -<8faa> <8faa> 15729 -<8fab> <8fab> 16183 -<8fac> <8fac> 17112 -<8fad> <8fad> 16363 -<8fae> <8fae> 16961 -<8faf> <8faf> 14896 -<8fb0> <8fb0> 14797 -<8fb1> <8fb1> 17087 -<8fb2> <8fb2> 16910 -<8fb3> <8fb3> 16138 -<8fb4> <8fb4> 14796 -<8fb5> <8fb5> 16452 -<8fb6> <8fb6> 16536 -<8fb7> <8fb7> 16780 -<8fb8> <8fb8> 15716 -<8fb9> <8fb9> 16196 -<8fba> <8fba> 16463 -<8fbb> <8fbb> 17109 -<8fbc> <8fbc> 17040 -<8fbd> <8fbd> 16384 -<8fbe> <8fbe> 14985 -<8fbf> <8fbf> 16748 -<8fc0> <8fc0> 16580 -<8fc1> <8fc1> 16461 -<8fc2> <8fc2> 15808 -<8fc3> <8fc3> 16208 -<8fc4> <8fc4> 16393 -<8fc5> <8fc5> 16303 -<8fc6> <8fc6> 16262 -<8fc7> <8fc7> 16531 -<8fc8> <8fc8> 15021 -<8fc9> <8fc9> 16184 -<8fca> <8fca> 15733 -<8fcb> <8fcb> 16185 -<8fcc> <8fcc> 17101 -<8fcd> <8fcd> 16248 -<8fce> <8fce> 16285 -<8fcf> <8fcf> 16528 -<8fd0> <8fd0> 15744 -<8fd1> <8fd1> 16174 -<8fd2> <8fd2> 14518 -<8fd3> <8fd3> 16825 -<8fd4> <8fd4> 15754 -<8fd5> <8fd5> 16164 -<8fd6> <8fd6> 15006 -<8fd7> <8fd7> 15068 -<8fd8> <8fd8> 15717 -<8fd9> <8fd9> 16517 -<8fda> <8fda> 16209 -<8fdb> <8fdb> 17402 -<8fdc> <8fdc> 16227 -<8fdd> <8fdd> 16760 -<8fde> <8fde> 16823 -<8fdf> <8fdf> 15986 -<8fe0> <8fe0> 16857 -<8fe1> <8fe1> 16782 -<8fe2> <8fe2> 15734 -<8fe3> <8fe3> 17108 -<8fe4> <8fe4> 17058 -<8fe5> <8fe5> 16983 -<8fe6> <8fe6> 16140 -<8fe7> <8fe7> 14742 -<8fe8> <8fe8> 16981 -<8fe9> <8fe9> 16567 -<8fea> <8fea> 16282 -<8feb> <8feb> 16330 -<8fec> <8fec> 16222 -<8fed> <8fed> 15749 -<8fee> <8fee> 16378 -<8fef> <8fef> 16310 -<8ff0> <8ff0> 15043 -endcidrange - -100 begincidrange -<8ff1> <8ff1> 16328 -<8ff2> <8ff2> 16203 -<8ff3> <8ff3> 16625 -<8ff4> <8ff4> 16436 -<8ff5> <8ff5> 16219 -<8ff6> <8ff6> 17097 -<8ff7> <8ff7> 15477 -<8ff8> <8ff8> 16249 -<8ff9> <8ff9> 17094 -<8ffa> <8ffa> 14543 -<8ffb> <8ffb> 16884 -<8ffc> <8ffc> 16193 -<8ffd> <8ffd> 14603 -<8ffe> <8ffe> 14560 -<9040> <9040> 17021 -<9041> <9041> 17136 -<9042> <9042> 16167 -<9043> <9043> 14370 -<9044> <9044> 14296 -<9045> <9045> 14242 -<9046> <9046> 16243 -<9047> <9047> 17080 -<9048> <9048> 16153 -<9049> <9049> 17079 -<904a> <904a> 15755 -<904b> <904b> 16681 -<904c> <904c> 16596 -<904d> <904d> 14581 -<904e> <904e> 16707 -<904f> <904f> 16418 -<9050> <9050> 16848 -<9051> <9051> 16885 -<9052> <9052> 16195 -<9053> <9053> 16584 -<9054> <9054> 16534 -<9055> <9055> 16477 -<9056> <9056> 16756 -<9057> <9057> 16702 -<9058> <9058> 16699 -<9059> <9059> 14788 -<905a> <905a> 15753 -<905b> <905b> 16901 -<905c> <905c> 14059 -<905d> <905d> 14789 -<905e> <905e> 15748 -<905f> <905f> 16468 -<9060> <9060> 6463 -<9061> <9061> 1561 -<9062> <9062> 2161 -<9063> <9063> 4447 -<9064> <9064> 16211 -<9065> <9065> 16159 -<9066> <9066> 13213 -<9067> <9067> 16312 -<9068> <9068> 15167 -<9069> <9069> 16210 -<906a> <906a> 14177 -<906b> <906b> 14172 -<906c> <906c> 16345 -<906d> <906d> 16343 -<906e> <906e> 16342 -<906f> <906f> 16019 -<9070> <9070> 14196 -<9071> <9071> 14203 -<9072> <9072> 15183 -<9073> <9073> 16391 -<9074> <9074> 16354 -<9075> <9075> 15993 -<9076> <9076> 15990 -<9077> <9077> 16359 -<9078> <9078> 3370 -<9079> <9079> 16366 -<907a> <907a> 16353 -<907b> <907b> 15991 -<907c> <907c> 16291 -<907d> <907d> 16212 -<907e> <907e> 14268 -<90a1> <90a1> 15994 -<90a2> <90a2> 16289 -<90a3> <90a3> 14273 -<90a4> <90a4> 16373 -<90a5> <90a5> 16286 -<90a6> <90a6> 15231 -<90a7> <90a7> 14347 -<90a8> <90a8> 16367 -<90a9> <90a9> 16380 -<90aa> <90aa> 14349 -<90ab> <90ab> 16365 -<90ac> <90ac> 16356 -<90ad> <90ad> 14353 -<90ae> <90ae> 16250 -<90af> <90af> 16290 -<90b0> <90b0> 15246 -<90b1> <90b1> 14364 -<90b2> <90b2> 16288 -<90b3> <90b3> 16352 -<90b4> <90b4> 15763 -<90b5> <90b5> 14375 -<90b6> <90b6> 16368 -<90b7> <90b7> 16293 -endcidrange - -100 begincidrange -<90b8> <90b8> 14390 -<90b9> <90b9> 15757 -<90ba> <90ba> 16233 -<90bb> <90bb> 16258 -<90bc> <90bc> 16261 -<90bd> <90bd> 16259 -<90be> <90be> 16265 -<90bf> <90bf> 16255 -<90c0> <90c0> 15285 -<90c1> <90c1> 16263 -<90c2> <90c2> 16177 -<90c3> <90c3> 15764 -<90c4> <90c4> 560 -<90c5> <90c5> 17406 -<90c6> <90c6> 16144 -<90c7> <90c7> 14462 -<90c8> <90c8> 17387 -<90c9> <90c9> 16239 -<90ca> <90ca> 16027 -<90cb> <90cb> 16206 -<90cc> <90cc> 15304 -<90cd> <90cd> 7721 -<90ce> <90ce> 16200 -<90cf> <90cf> 14382 -<90d0> <90d0> 15456 -<90d1> <90d1> 10911 -<90d2> <90d2> 14483 -<90d3> <90d3> 17399 -<90d4> <90d4> 15988 -<90d5> <90d5> 15309 -<90d6> <90d6> 15049 -<90d7> <90d7> 16332 -<90d8> <90d8> 16337 -<90d9> <90d9> 16189 -<90da> <90da> 16202 -<90db> <90db> 14509 -<90dc> <90dc> 9042 -<90dd> <90dd> 16198 -<90de> <90de> 14514 -<90df> <90df> 16307 -<90e0> <90e0> 16141 -<90e1> <90e1> 14528 -<90e2> <90e2> 15919 -<90e3> <90e3> 14549 -<90e4> <90e4> 16181 -<90e5> <90e5> 14551 -<90e6> <90e6> 16175 -<90e7> <90e7> 16179 -<90e8> <90e8> 15765 -<90e9> <90e9> 15362 -<90ea> <90ea> 16242 -<90eb> <90eb> 15766 -<90ec> <90ec> 14567 -<90ed> <90ed> 16437 -<90ee> <90ee> 15371 -<90ef> <90ef> 14576 -<90f0> <90f0> 14583 -<90f1> <90f1> 16313 -<90f2> <90f2> 14592 -<90f3> <90f3> 16244 -<90f4> <90f4> 14601 -<90f5> <90f5> 16146 -<90f6> <90f6> 16151 -<90f7> <90f7> 16160 -<90f8> <90f8> 16315 -<90f9> <90f9> 16188 -<90fa> <90fa> 16308 -<90fb> <90fb> 16301 -<90fc> <90fc> 14618 -<90fd> <90fd> 14620 -<90fe> <90fe> 14619 -<9140> <9140> 15417 -<9141> <9141> 15985 -<9142> <9142> 15742 -<9143> <9143> 16187 -<9144> <9144> 16176 -<9145> <9145> 16260 -<9146> <9146> 17400 -<9147> <9147> 16143 -<9148> <9148> 16246 -<9149> <9149> 14643 -<914a> <914a> 16245 -<914b> <914b> 14656 -<914c> <914c> 16161 -<914d> <914d> 16272 -<914e> <914e> 14666 -<914f> <914f> 16256 -<9150> <9150> 16163 -<9151> <9151> 14672 -<9152> <9152> 15767 -<9153> <9153> 11845 -<9154> <9154> 1392 -<9155> <9155> 16045 -<9156> <9156> 13602 -<9157> <9157> 3043 -<9158> <9158> 1429 -<9159> <9159> 552 -<915a> <915a> 2709 -<915b> <915b> 4784 -<915c> <915c> 2330 -endcidrange - -100 begincidrange -<915d> <915d> 17404 -<915e> <915e> 16274 -<915f> <915f> 16302 -<9160> <9160> 1986 -<9161> <9161> 2389 -<9162> <9162> 14213 -<9163> <9163> 15982 -<9164> <9164> 15725 -<9165> <9165> 16226 -<9166> <9166> 14792 -<9167> <9167> 16229 -<9168> <9168> 14653 -<9169> <9169> 16166 -<916a> <916a> 16493 -<916b> <916b> 16336 -<916c> <916c> 16182 -<916d> <916d> 16518 -<916e> <916e> 14674 -<916f> <916f> 16338 -<9170> <9170> 14424 -<9171> <9171> 16379 -<9172> <9172> 16231 -<9173> <9173> 16001 -<9174> <9174> 16329 -<9175> <9175> 16309 -<9176> <9176> 15996 -<9177> <9177> 15989 -<9178> <9178> 15479 -<9179> <9179> 15150 -<917a> <917a> 16205 -<917b> <917b> 17327 -<917c> <917c> 15975 -<917d> <917d> 16573 -<917e> <917e> 16236 -<91a1> <91a1> 14758 -<91a2> <91a2> 14664 -<91a3> <91a3> 16319 -<91a4> <91a4> 16223 -<91a5> <91a5> 14853 -<91a6> <91a6> 1781 -<91a7> <91a7> 16632 -<91a8> <91a8> 16813 -<91a9> <91a9> 16142 -<91aa> <91aa> 16674 -<91ab> <91ab> 16147 -<91ac> <91ac> 16139 -<91ad> <91ad> 16693 -<91ae> <91ae> 14891 -<91af> <91af> 16696 -<91b0> <91b0> 550 -<91b1> <91b1> 16713 -<91b2> <91b2> 15269 -<91b3> <91b3> 16385 -<91b4> <91b4> 16317 -<91b5> <91b5> 16296 -<91b6> <91b6> 16774 -<91b7> <91b7> 14932 -<91b8> <91b8> 16322 -<91b9> <91b9> 16786 -<91ba> <91ba> 16775 -<91bb> <91bb> 13188 -<91bc> <91bc> 16324 -<91bd> <91bd> 15769 -<91be> <91be> 15018 -<91bf> <91c0> 16862 -<91c1> <91c1> 16374 -<91c2> <91c2> 16221 -<91c3> <91c3> 16839 -<91c4> <91c4> 15761 -<91c5> <91c5> 15732 -<91c6> <91c6> 16204 -<91c7> <91c7> 16882 -<91c8> <91c8> 15013 -<91c9> <91c9> 15179 -<91ca> <91ca> 15750 -<91cb> <91cb> 16888 -<91cc> <91cc> 16960 -<91cd> <91cd> 16381 -<91ce> <91ce> 16295 -<91cf> <91cf> 16985 -<91d0> <91d0> 3698 -<91d1> <91d1> 16994 -<91d2> <91d2> 15486 -<91d3> <91d3> 14648 -<91d4> <91d4> 16947 -<91d5> <91d5> 10586 -<91d7> <91d7> 16279 -<91d8> <91d8> 16306 -<91d9> <91d9> 17034 -<91da> <91da> 16280 -<91db> <91db> 8084 -<91dc> <91dc> 16192 -<91dd> <91dd> 16207 -<91de> <91de> 16271 -<91df> <91df> 15727 -<91e0> <91e0> 17119 -<91e1> <91e1> 16213 -<91e2> <91e2> 16339 -<91e3> <91e3> 17134 -<91e4> <91e4> 16335 -endcidrange - -100 begincidrange -<91e5> <91e5> 16340 -<91e6> <91e6> 15997 -<91e7> <91e7> 17159 -<91e8> <91e8> 17403 -<91e9> <91e9> 16346 -<91ea> <91ea> 3338 -<91eb> <91eb> 16247 -<91ec> <91ec> 15807 -<91ed> <91ed> 16428 -<91ee> <91ee> 16292 -<91ef> <91ef> 15727 -<91f0> <91f0> 15565 -<91f1> <91f1> 16228 -<91f2> <91f2> 16267 -<91f3> <91f3> 14447 -<91f4> <91f4> 6513 -<91f5> <91f5> 7323 -<91f6> <91f6> 1861 -<91f7> <91f7> 7541 -<91f8> <91f8> 14472 -<91f9> <91f9> 14146 -<91fa> <91fa> 11072 -<91fb> <91fb> 14057 -<91fc> <91fc> 14304 -<91fd> <91fd> 15894 -<91fe> <91fe> 14460 -<9240> <9240> 14250 -<9241> <9241> 16270 -<9242> <9242> 16604 -<9243> <9243> 15482 -<9244> <9244> 16294 -<9245> <9245> 16479 -<9246> <9246> 15398 -<9247> <9247> 14430 -<9248> <9248> 16165 -<9249> <9249> 16456 -<924a> <924a> 15745 -<924b> <924b> 14606 -<924c> <924c> 16516 -<924d> <924d> 16664 -<924e> <924e> 16727 -<924f> <924f> 14594 -<9250> <9250> 14495 -<9251> <9251> 16377 -<9252> <9252> 14371 -<9253> <9253> 14449 -<9254> <9254> 14058 -<9255> <9255> 14188 -<9256> <9256> 14144 -<9257> <9257> 14324 -<9258> <9258> 17120 -<9259> <9259> 16987 -<925a> <925a> 14061 -<925b> <925b> 15124 -<925c> <925c> 17093 -<925d> <925d> 16523 -<925e> <925e> 14501 -<925f> <925f> 16746 -<9260> <9260> 16797 -<9261> <9261> 16708 -<9262> <9262> 16975 -<9263> <9263> 16225 -<9264> <9264> 16344 -<9265> <9265> 1564 - 99 - 13743 - 128 - 162 - 248 - 247 - 249 - 256 - 319 - 413 - 476 - 503 - 595 - 658 - 752 - 815 - 909 - 972 - 1066 - 1129 - 1223 - 1286 - 1380 - 1443 - 1537 - 1600 - 1694 - 1757 - 1851 - 1914 - 2431 - 2007 - 2070 - 2164 - 2227 - 2321 -endcidrange - -100 begincidrange - 2384 - 2432 - 2479 - 2542 - 2636 - 2699 - 2793 - 2856 - 2950 - 3013 - 3107 - 3170 - 3264 - 3327 - 3421 - 3484 - 3578 - 3641 - 3735 - 3798 - 3892 - 3955 - 4049 - 4112 - 4206 - 4269 - 4309 - 4364 - 4427 - 4521 - 4584 - 4678 - 4308 - 4696 - 4740 - 4834 - 4897 - 4991 - 5054 - 5148 - 5211 - 5222 - 5306 - 5369 - 5221 - 5411 - 5462 - 5496 - 5526 - 5551 - 5550 - 5552 - 5620 - 5495 - 5642 - 5682 - 5776 - 5839 - 5933 - 5996 - 628 - 6006 - 6040 - 6059 - 6039 - 6088 - 6135 - 6153 - 6216 - 6134 - 6302 - 6309 - 6372 - 6466 - 6529 - 6623 - 6686 - 6780 - 6843 - 6937 - 7000 - 7094 - 7157 - 7251 - 7314 - 7408 - 7471 - 7565 - 7628 - 7722 - 7785 - 7879 - 7942 - 8036 - 8099 - 8788 - 8143 - 8193 - 8889 - 8251 -endcidrange - -100 begincidrange - 8255 - 8349 - 8412 - 8506 - 8569 - 8663 - 8726 - 8142 - 8789 - 8820 - 8883 - 8890 - 8978 - 9041 - 9135 - 9198 - 9089 - 9289 - 9291 - 9354 - 9448 - 9511 - 9605 - 9668 - 9762 - 9825 - 9919 - 9982 - 10076 - 10139 - 10233 - 10296 - 10390 - 10453 - 10547 - 10610 - 10704 - 10767 - 10861 - 10924 - 10927 - 11019 - 11074 - 11083 - 11177 - 11240 - 11334 - 11362 - 11398 - 10926 - 11478 - 11491 - 11554 - 11073 - 11615 - 11647 - 11710 - 11720 - 11805 - 11868 - 12308 - 11942 - 11961 - 12024 - 12118 - 11719 - 12140 - 12180 - 11361 - 12222 - 12273 - 12309 - 12640 - 12317 - 12336 - 12430 - 12783 - 12470 - 12492 - 12527 - 12587 - 12641 - 12651 - 12745 - 12784 - 12809 - 12526 - 12829 - 12901 - 12903 - 12966 - 13060 - 12900 - 13095 - 13122 - 13216 - 13279 - 13373 - 13436 - 13530 -endcidrange - -7 begincidrange - 13586 - 13594 - 13585 - 13629 - 13641 - 13630 - 13642 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKdlb-B5-V b/Resources/cmap/HKdlb-B5-V deleted file mode 100644 index 88c6766bf61..00000000000 --- a/Resources/cmap/HKdlb-B5-V +++ /dev/null @@ -1,71 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (HKdlb-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (HKdlb-B5-H) -%%BeginResource: CMap (HKdlb-B5-V) -%%Title: (HKdlb-B5-V Adobe CNS1 0) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/HKdlb-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /HKdlb-B5-V def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25524] def - -/WMode 1 def - -12 begincidrange - 13646 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 13647 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKgccs-B5-H b/Resources/cmap/HKgccs-B5-H deleted file mode 100644 index 90b8ca39fca..00000000000 --- a/Resources/cmap/HKgccs-B5-H +++ /dev/null @@ -1,631 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (HKgccs-B5-H) -%%Title: (HKgccs-B5-H Adobe CNS1 1) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-200 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 1 def -end def - -/CMapName /HKgccs-B5-H def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25399] def - -/WMode 0 def - -2 begincodespacerange - <00> <80> - <8A40> -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 -<8a40> <8a7e> 17160 -<8aa1> <8ae5> 17223 -<8b41> <8b42> 17292 -<8b45> <8b45> 17294 -<8b47> <8b47> 17295 -<8b49> <8b49> 17296 -<8b4b> <8b4b> 17297 -<8b4d> <8b50> 17298 -<8b54> <8b54> 17302 -<8b58> <8b58> 17303 -<8b5a> <8b5a> 17304 -<8e40> <8e44> 14123 -<8e46> <8e6a> 14128 -<8e6c> <8e75> 14165 -<8e77> <8e7d> 14175 -<8e7e> <8e7e> 289 -<8ea1> <8ea5> 14182 -<8ea7> <8ec8> 14187 -<8eca> <8ee4> 14221 -<8ee6> <8eee> 14248 -<8ef0> <8efe> 14257 -<8f40> <8f58> 14272 -<8f5a> <8f5e> 14297 -<8f60> <8f66> 14302 -<8f68> <8f7e> 14309 -<8fa1> <8fc4> 14332 -<8fc6> <8fc6> 14368 -<8fc8> <8fd9> 14369 -<8fdb> <8ffb> 14387 -<8ffd> <8ffe> 14420 -<9040> <905b> 14422 -<905e> <906e> 14450 -<9070> <9079> 14467 -<907a> <907a> 14057 -<907b> <907e> 14477 -<90a1> <90a5> 14481 -<90a7> <90b7> 14486 -<90b9> <90fe> 14503 -<9140> <9164> 14573 -<9166> <916d> 14610 -<916f> <917d> 14618 -<91a1> <91a1> 14633 -<91a3> <91fe> 14634 -<9240> <927e> 14726 -<92a1> <92ae> 14789 -<92af> <92b0> 281 -<92b1> <92b1> 284 -<92b2> <92b2> 283 -<92b3> <92e4> 14803 -<92e6> <92f1> 14853 -<92f3> <92fe> 14865 -<9340> <9367> 14877 -<9369> <937e> 14917 -<93a1> <93a9> 14939 -<93ab> <93c1> 14948 -<93c3> <93e4> 14971 -<93e6> <93ea> 15005 -<93ec> <93fe> 15010 -<9440> <9445> 15029 -<9447> <947e> 15035 -<94a1> <94fe> 15091 -<9540> <954c> 15185 -<954e> <9559> 15198 -<955b> <957e> 15210 -<95a1> <95c5> 15246 -<95c7> <95fe> 15283 -<9640> <967e> 15339 -<96a1> <96d3> 15402 -<96d5> <96fe> 15453 -<9740> <977e> 15495 -<97a1> <97fe> 15558 -<9840> <9874> 15652 -<9877> <9877> 15705 -<987a> <987a> 15706 -<98a3> <98a3> 15707 -<98af> <98af> 15708 -<98b6> <98b6> 15709 -<98b9> <98b9> 15710 -<98bd> <98be> 15711 -<98c2> <98c2> 15713 -<98c4> <98c4> 15714 -<98c6> <98c7> 15715 -<98e3> <98e3> 15717 -<98e7> <98e7> 15718 -<98ed> <98ed> 15719 -<98f0> <98f0> 15720 -<98f2> <98f2> 15721 -<98fc> <98fc> 15722 -<9943> <9943> 15723 -<9945> <9945> 15724 -<994f> <994f> 15725 -<996a> <996a> 15726 -<996e> <996e> 15727 -<9975> <9975> 15728 -<9978> <9978> 15729 -<99a2> <99a2> 15730 -<99ae> <99ae> 15731 -<99b6> <99b6> 15732 -<99ba> <99ba> 15733 -endcidrange - -100 begincidrange -<99e2> <99e2> 15734 -<99f4> <99f4> 15735 -<9a4a> <9a4a> 15736 -<9a4c> <9a4c> 15737 -<9a59> <9a59> 15738 -<9a61> <9a61> 15739 -<9a68> <9a68> 15740 -<9a73> <9a73> 15741 -<9a7e> <9a7e> 15742 -<9ab2> <9ab2> 15743 -<9ab7> <9ab7> 15744 -<9ab9> <9ab9> 15745 -<9abb> <9abb> 15746 -<9ac7> <9ac7> 15747 -<9ad0> <9ad0> 15748 -<9ad2> <9ad2> 15749 -<9ad9> <9adb> 15750 -<9ae2> <9ae2> 15753 -<9ae4> <9ae4> 15754 -<9ae8> <9ae8> 15755 -<9af2> <9af2> 15756 -<9af6> <9af6> 15757 -<9afb> <9afb> 15758 -<9b46> <9b46> 15759 -<9b4a> <9b4a> 15760 -<9b4c> <9b4c> 15761 -<9b54> <9b54> 15762 -<9b58> <9b58> 15763 -<9b5a> <9b5a> 15764 -<9b5c> <9b5c> 15765 -<9b5e> <9b5f> 15766 -<9b70> <9b73> 15768 -<9b76> <9b78> 15772 -<9b7b> <9b7c> 15775 -<9b7e> <9b7e> 15777 -<9ba1> <9ba1> 15778 -<9ba3> <9ba4> 15779 -<9ba7> <9baa> 15781 -<9bac> <9bac> 15785 -<9baf> <9baf> 15786 -<9bb2> <9bb9> 15787 -<9bbe> <9bbe> 15795 -<9bc0> <9bc6> 15796 -<9bca> <9bca> 15803 -<9bcc> <9bcc> 15804 -<9bd0> <9bd1> 15805 -<9bd3> <9bd3> 15807 -<9bd5> <9bd5> 15808 -<9bd8> <9bda> 15809 -<9bdd> <9bdd> 15812 -<9bde> <9bde> 7188 -<9bdf> <9bdf> 15813 -<9be1> <9be1> 15814 -<9be3> <9be3> 15815 -<9be7> <9be7> 15816 -<9be9> <9bec> 15817 -<9bee> <9bef> 15821 -<9bf3> <9bf3> 15823 -<9bf6> <9bf6> 15824 -<9bf8> <9bf9> 15825 -<9bfb> <9bfc> 15827 -<9c40> <9c42> 15829 -<9c44> <9c46> 15832 -<9c48> <9c48> 15835 -<9c4a> <9c4a> 15836 -<9c4d> <9c53> 15837 -<9c55> <9c55> 15844 -<9c57> <9c5b> 15845 -<9c5d> <9c5d> 15850 -<9c60> <9c60> 15851 -<9c62> <9c62> 15852 -<9c64> <9c66> 15853 -<9c68> <9c68> 15856 -<9c6a> <9c6a> 15857 -<9c6b> <9c6b> 13418 -<9c6d> <9c6d> 15858 -<9c6f> <9c72> 15859 -<9c75> <9c77> 15863 -<9c79> <9c79> 15866 -<9c7b> <9c7c> 15867 -<9c7e> <9c7e> 15869 -<9ca1> <9ca2> 15870 -<9ca5> <9ca5> 15872 -<9ca8> <9ca9> 15873 -<9cab> <9cab> 15875 -<9cad> <9cae> 15876 -<9cb1> <9cba> 15878 -<9cbc> <9cc2> 15888 -<9cc6> <9ccd> 15895 -<9ccf> <9cd3> 15903 -<9cd8> <9cda> 15908 -<9cdc> <9ce5> 15911 -<9ce7> <9ce9> 15921 -<9ceb> <9cec> 15924 -<9cee> <9cf9> 15926 -<9cfd> <9cfd> 15938 -<9d46> <9d46> 15939 -<9d49> <9d4a> 15940 -<9d4c> <9d4d> 15942 -<9d4f> <9d4f> 15944 -endcidrange - -100 begincidrange -<9d51> <9d51> 15945 -<9d55> <9d55> 15946 -<9d57> <9d57> 9665 -<9d5a> <9d5a> 15947 -<9d62> <9d62> 15948 -<9d64> <9d64> 15949 -<9d79> <9d79> 15950 -<9d7e> <9d7e> 15951 -<9da5> <9da8> 15952 -<9daa> <9daa> 15956 -<9dac> <9dae> 15957 -<9db0> <9db0> 15960 -<9db3> <9db3> 15961 -<9db5> <9db5> 15962 -<9db7> <9db7> 15963 -<9dbc> <9dbd> 15964 -<9dbf> <9dc0> 15966 -<9dc3> <9dc4> 15968 -<9dc7> <9dc8> 15970 -<9dca> <9dca> 15972 -<9dcd> <9dd1> 15973 -<9dd3> <9dd5> 15978 -<9dda> <9dfb> 15981 -<9dfd> <9dfe> 16015 -<9e40> <9e62> 16017 -<9e64> <9e65> 16052 -<9e68> <9e68> 16054 -<9e6a> <9e6a> 16055 -<9e71> <9e71> 16056 -<9e73> <9e73> 16057 -<9e77> <9e78> 16058 -<9e7a> <9e7a> 16060 -<9e7c> <9e7c> 16061 -<9e7e> <9e7e> 16062 -<9ea1> <9ea2> 16063 -<9ea4> <9ea6> 16065 -<9ea9> <9eaa> 16068 -<9eac> <9ead> 16070 -<9eaf> <9eb1> 16072 -<9eb4> <9eb4> 16075 -<9eb6> <9eb7> 16076 -<9eb9> <9eb9> 16078 -<9ebc> <9ebc> 16079 -<9ebf> <9ec0> 16080 -<9ec4> <9ec5> 16082 -<9ec7> <9eca> 16084 -<9ecc> <9ecd> 16088 -<9ed0> <9ed1> 16090 -<9ed3> <9ed3> 16092 -<9ed6> <9ed7> 16093 -<9eda> <9ef1> 16095 -<9ef3> <9ef5> 16119 -<9ef9> <9efa> 16122 -<9efc> <9efe> 16124 -<9f40> <9f42> 16127 -<9f44> <9f47> 16130 -<9f49> <9f4a> 16134 -<9f4d> <9f67> 16136 -<9f69> <9f6f> 16163 -<9f71> <9f7e> 16170 -<9fa1> <9fb4> 16184 -<9fb6> <9fba> 16204 -<9fbc> <9fbe> 16209 -<9fc0> <9fc0> 16212 -<9fc2> <9fe3> 16213 -<9fe5> <9ff8> 16247 -<9ffa> <9ffe> 16267 - 16272 - 16278 - 16291 - 16314 - 16327 - 16330 - 16331 - 16335 - 16364 - 16374 - 16392 - 99 - 13743 - 128 - 162 - 248 - 247 - 249 - 256 - 319 - 413 - 476 - 503 - 595 - 658 - 752 - 815 - 909 - 972 - 1066 - 1129 - 1223 - 1286 -endcidrange - -100 begincidrange - 1380 - 1443 - 1537 - 1600 - 1694 - 1757 - 1851 - 1914 - 2431 - 2007 - 2070 - 2164 - 2227 - 2321 - 2384 - 2432 - 2479 - 2542 - 2636 - 2699 - 2793 - 2856 - 2950 - 3013 - 3107 - 3170 - 3264 - 3327 - 3421 - 3484 - 3578 - 3641 - 3735 - 3798 - 3892 - 3955 - 4049 - 4112 - 4206 - 4269 - 4309 - 4364 - 4427 - 4521 - 4584 - 4678 - 4308 - 4696 - 4740 - 4834 - 4897 - 4991 - 5054 - 5148 - 5211 - 5222 - 5306 - 5369 - 5221 - 5411 - 5462 - 5496 - 5526 - 5551 - 5550 - 5552 - 5620 - 5495 - 5642 - 5682 - 5776 - 5839 - 5933 - 5996 - 628 - 6006 - 6040 - 6059 - 6039 - 6088 - 6135 - 6153 - 6216 - 6134 - 6302 - 6309 - 6372 - 6466 - 6529 - 6623 - 6686 - 6780 - 6843 - 6937 - 7000 - 7094 - 7157 - 7251 - 7314 - 7408 -endcidrange - -100 begincidrange - 7471 - 7565 - 7628 - 7722 - 7785 - 7879 - 7942 - 8036 - 8099 - 8788 - 8143 - 8193 - 8889 - 8251 - 8255 - 8349 - 8412 - 8506 - 8569 - 8663 - 8726 - 8142 - 8789 - 8820 - 8883 - 8890 - 8978 - 9041 - 9135 - 9198 - 9089 - 9289 - 9291 - 9354 - 9448 - 9511 - 9605 - 9668 - 9762 - 9825 - 9919 - 9982 - 10076 - 10139 - 10233 - 10296 - 10390 - 10453 - 10547 - 10610 - 10704 - 10767 - 10861 - 10924 - 10927 - 11019 - 11074 - 11083 - 11177 - 11240 - 11334 - 11362 - 11398 - 10926 - 11478 - 11491 - 11554 - 11073 - 11615 - 11647 - 11710 - 11720 - 11805 - 11868 - 12308 - 11942 - 11961 - 12024 - 12118 - 11719 - 12140 - 12180 - 11361 - 12222 - 12273 - 12309 - 12640 - 12317 - 12336 - 12430 - 12783 - 12470 - 12492 - 12527 - 12587 - 12641 - 12651 - 12745 - 12784 - 12809 -endcidrange - -52 begincidrange - 12526 - 12829 - 12901 - 12903 - 12966 - 13060 - 12900 - 13095 - 13122 - 13216 - 13279 - 13373 - 13436 - 13530 - 13586 - 13594 - 13585 - 13629 - 13641 - 13630 - 13642 - 16395 - 16458 - 16552 - 16615 - 16645 - 16658 - 16707 - 16717 - 8495 - 16721 - 16723 - 16739 - 16756 - 16765 - 4447 - 16789 - 16791 - 16829 - 16839 - 16855 - 16864 - 16917 - 16998 - 17010 - 17055 - 17065 - 17071 - 288 - 17080 - 17131 - 17144 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKgccs-B5-V b/Resources/cmap/HKgccs-B5-V deleted file mode 100644 index f450af0081a..00000000000 --- a/Resources/cmap/HKgccs-B5-V +++ /dev/null @@ -1,71 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (HKgccs-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (HKgccs-B5-H) -%%BeginResource: CMap (HKgccs-B5-V) -%%Title: (HKgccs-B5-V Adobe CNS1 0) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/HKgccs-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /HKgccs-B5-V def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25520] def - -/WMode 1 def - -12 begincidrange - 13646 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 13647 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKm314-B5-H b/Resources/cmap/HKm314-B5-H deleted file mode 100644 index 3ff3a58cf14..00000000000 --- a/Resources/cmap/HKm314-B5-H +++ /dev/null @@ -1,621 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (HKm314-B5-H) -%%Title: (HKm314-B5-H Adobe CNS1 1) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 1 def -end def - -/CMapName /HKm314-B5-H def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25527] def - -/WMode 0 def - -2 begincodespacerange - <00> <80> - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 - 99 - 13743 - 128 - 162 - 248 - 247 - 249 - 256 - 319 - 413 - 476 - 503 - 595 - 658 - 752 - 815 - 909 - 972 - 1066 - 1129 - 1223 - 1286 - 1380 - 1443 - 1537 - 1600 - 1694 - 1757 - 1851 - 1914 - 2431 - 2007 - 2070 - 2164 - 2227 - 2321 - 2384 - 2432 - 2479 - 2542 - 2636 - 2699 - 2793 - 2856 - 2950 - 3013 - 3107 - 3170 - 3264 - 3327 - 3421 - 3484 - 3578 - 3641 - 3735 - 3798 - 3892 - 3955 - 4049 - 4112 - 4206 - 4269 - 4309 - 4364 - 4427 - 4521 - 4584 - 4678 - 4308 - 4696 - 4740 - 4834 - 4897 - 4991 - 5054 - 5148 - 5211 - 5222 - 5306 - 5369 - 5221 - 5411 - 5462 - 5496 - 5526 - 5551 - 5550 - 5552 - 5620 - 5495 - 5642 - 5682 - 5776 - 5839 - 5933 - 15725 - 14788 - 17305 - 15877 -endcidrange - -100 begincidrange - 14058 - 14792 - 14653 - 17307 - 16418 - 17309 - 16436 - 17311 - 16035 - 16038 - 16465 - 16456 - 16459 - 16463 - 17314 - 16474 - 16036 - 15805 - 15807 - 16476 - 16479 - 17316 - 16507 - 16514 - 16237 - 16523 - 17318 - 16531 - 16534 - 17319 - 16536 - 15999 - 15479 - 16039 - 16010 - 16024 - 16012 - 16545 - 14848 - 14755 - 16013 - 17320 - 16216 - 15804 - 15564 - 16040 - 15150 - 15302 - 16011 - 16031 - 17196 - 17321 - 16136 - 16037 - 16009 - 15811 - 16002 - 16001 - 16020 - 16003 - 16008 - 17323 - 16017 - 17324 - 15996 - 16000 - 16015 - 15975 - 15992 - 15976 - 17325 - 14290 - 16205 - 17326 - 15998 - 16572 - 15971 - 16573 - 17327 - 16567 - 16055 - 16109 - 16234 - 16021 - 14664 - 15560 - 17329 - 16588 - 16006 - 15482 - 15485 - 17332 - 16593 - 15730 - 15398 - 14059 - 16575 - 16640 - 15493 - 17333 -endcidrange - -100 begincidrange - 14877 - 14325 - 14062 - 15967 - 16662 - 16671 - 16664 - 16675 - 16679 - 16681 - 17340 - 16014 - 14447 - 16707 - 16710 - 16708 - 16713 - 15269 - 16727 - 16737 - 14060 - 16746 - 16386 - 16774 - 16314 - 16208 - 16022 - 16778 - 16321 - 15759 - 17345 - 16032 - 16150 - 16029 - 16786 - 14950 - 16028 - 16016 - 16797 - 17346 - 14248 - 16798 - 16775 - 16034 - 16007 - 16004 - 16046 - 15220 - 15221 - 15218 - 16050 - 16044 - 16842 - 16884 - 16848 - 15018 - 16885 - 16888 - 16891 - 16901 - 15758 - 16910 - 15715 - 16930 - 16929 - 16931 - 16489 - 16431 - 14501 - 15605 - 15721 - 16987 - 15048 - 15808 - 14826 - 16384 - 16996 - 16994 - 16383 - 16026 - 17011 - 14697 - 17018 - 17354 - 16282 - 16053 - 17355 - 16306 - 17034 - 15071 - 17096 - 16045 - 17358 - 16271 - 17359 - 15986 - 16042 - 17363 - 17120 - 14381 -endcidrange - -100 begincidrange - 16341 - 15124 - 14056 - 17136 - 15997 - 17150 - 17157 - 14138 - 14150 - 14162 - 14061 - 15178 - 15173 - 17370 - 16094 - 14188 - 14187 - 14210 - 15977 - 15183 - 14214 - 17371 - 14216 - 17372 - 16077 - 14231 - 16909 - 14296 - 15217 - 14556 - 14304 - 14324 - 14355 - 16048 - 14349 - 16047 - 14363 - 14366 - 16049 - 16361 - 17380 - 16377 - 15961 - 16025 - 15966 - 15284 - 16043 - 17383 - 14430 - 17385 - 15806 - 16005 - 14435 - 15724 - 14449 - 14460 - 14466 - 16027 - 14472 - 15374 - 14382 - 14490 - 14475 - 15364 - 14057 - 17085 - 15309 - 14495 - 14235 - 14511 - 16023 - 14576 - 15357 - 15377 - 17391 - 14213 - 14594 - 16298 - 16153 - 14617 - 17393 - 14618 - 15974 - 16162 - 15742 - 15417 - 16033 - 17394 - 16176 - 14633 - 16316 - 14646 - 16272 - 2746 - 5996 - 628 - 6006 - 6040 - 6059 - 6039 -endcidrange - -100 begincidrange - 6088 - 6135 - 6153 - 6216 - 6134 - 6302 - 6309 - 6372 - 6466 - 6529 - 6623 - 6686 - 6780 - 6843 - 6937 - 7000 - 7094 - 7157 - 7251 - 7314 - 7408 - 7471 - 7565 - 7628 - 7722 - 7785 - 7879 - 7942 - 8036 - 8099 - 8788 - 8143 - 8193 - 8889 - 8251 - 8255 - 8349 - 8412 - 8506 - 8569 - 8663 - 8726 - 8142 - 8789 - 8820 - 8883 - 8890 - 8978 - 9041 - 9135 - 9198 - 9089 - 9289 - 9291 - 9354 - 9448 - 9511 - 9605 - 9668 - 9762 - 9825 - 9919 - 9982 - 10076 - 10139 - 10233 - 10296 - 10390 - 10453 - 10547 - 10610 - 10704 - 10767 - 10861 - 10924 - 10927 - 11019 - 11074 - 11083 - 11177 - 11240 - 11334 - 11362 - 11398 - 10926 - 11478 - 11491 - 11554 - 11073 - 11615 - 11647 - 11710 - 11720 - 11805 - 11868 - 12308 - 11942 - 11961 - 12024 - 12118 -endcidrange - -42 begincidrange - 11719 - 12140 - 12180 - 11361 - 12222 - 12273 - 12309 - 12640 - 12317 - 12336 - 12430 - 12783 - 12470 - 12492 - 12527 - 12587 - 12641 - 12651 - 12745 - 12784 - 12809 - 12526 - 12829 - 12901 - 12903 - 12966 - 13060 - 12900 - 13095 - 13122 - 13216 - 13279 - 13373 - 13436 - 13530 - 13586 - 13594 - 13585 - 13629 - 13641 - 13630 - 13642 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKm314-B5-V b/Resources/cmap/HKm314-B5-V deleted file mode 100644 index c519d801e65..00000000000 --- a/Resources/cmap/HKm314-B5-V +++ /dev/null @@ -1,71 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (HKm314-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (HKm314-B5-H) -%%BeginResource: CMap (HKm314-B5-V) -%%Title: (HKm314-B5-V Adobe CNS1 0) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/HKm314-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /HKm314-B5-V def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25528] def - -/WMode 1 def - -12 begincidrange - 13646 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 13647 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKm471-B5-H b/Resources/cmap/HKm471-B5-H deleted file mode 100644 index 2dec0c256b4..00000000000 --- a/Resources/cmap/HKm471-B5-H +++ /dev/null @@ -1,771 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (HKm471-B5-H) -%%Title: (HKm471-B5-H Adobe CNS1 1) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 1 def -end def - -/CMapName /HKm471-B5-H def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25525] def - -/WMode 0 def - -2 begincodespacerange - <00> <80> - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 - 99 - 13743 - 128 - 162 - 248 - 247 - 249 - 256 - 319 - 413 - 476 - 503 - 595 - 658 - 752 - 815 - 909 - 972 - 1066 - 1129 - 1223 - 1286 - 1380 - 1443 - 1537 - 1600 - 1694 - 1757 - 1851 - 1914 - 2431 - 2007 - 2070 - 2164 - 2227 - 2321 - 2384 - 2432 - 2479 - 2542 - 2636 - 2699 - 2793 - 2856 - 2950 - 3013 - 3107 - 3170 - 3264 - 3327 - 3421 - 3484 - 3578 - 3641 - 3735 - 3798 - 3892 - 3955 - 4049 - 4112 - 4206 - 4269 - 4309 - 4364 - 4427 - 4521 - 4584 - 4678 - 4308 - 4696 - 4740 - 4834 - 4897 - 4991 - 5054 - 5148 - 5211 - 5222 - 5306 - 5369 - 5221 - 5411 - 5462 - 5496 - 5526 - 5551 - 5550 - 5552 - 5620 - 5495 - 5642 - 5682 - 5776 - 5839 - 5933 - 5996 - 628 - 6006 - 6040 -endcidrange - -100 begincidrange - 6059 - 6039 - 6088 - 6135 - 6153 - 6216 - 6134 - 6302 - 6309 - 6372 - 6466 - 6529 - 6623 - 6686 - 6780 - 6843 - 6937 - 7000 - 7094 - 7157 - 7251 - 7314 - 7408 - 7471 - 7565 - 7628 - 7722 - 7785 - 7879 - 7942 - 8036 - 8099 - 8788 - 8143 - 8193 - 8889 - 8251 - 8255 - 8349 - 8412 - 8506 - 8569 - 8663 - 8726 - 8142 - 8789 - 8820 - 8883 - 8890 - 8978 - 9041 - 9135 - 9198 - 9089 - 9289 - 9291 - 9354 - 9448 - 9511 - 9605 - 9668 - 9762 - 9825 - 9919 - 9982 - 10076 - 10139 - 10233 - 10296 - 10390 - 10453 - 10547 - 10610 - 10704 - 10767 - 10861 - 10924 - 10927 - 11019 - 11074 - 11083 - 11177 - 11240 - 11334 - 11362 - 11398 - 10926 - 11478 - 11491 - 11554 - 11073 - 11615 - 11647 - 11710 - 11720 - 11805 - 11868 - 12308 - 11942 - 11961 -endcidrange - -100 begincidrange - 12024 - 12118 - 11719 - 12140 - 12180 - 11361 - 12222 - 12273 - 12309 - 12640 - 12317 - 12336 - 12430 - 12783 - 12470 - 12492 - 12527 - 12587 - 12641 - 12651 - 12745 - 12784 - 12809 - 12526 - 12829 - 12901 - 12903 - 12966 - 13060 - 12900 - 13095 - 13122 - 13216 - 13279 - 13373 - 13436 - 13530 - 13586 - 13594 - 13585 - 13629 - 13641 - 13630 - 13642 - 15725 - 14788 - 17305 - 16207 - 15877 - 17306 - 15246 - 14058 - 14792 - 14653 - 17307 - 16418 - 14796 - 17308 - 14789 - 17309 - 16436 - 17310 - 16035 - 16038 - 17312 - 16465 - 16456 - 16459 - 16463 - 16468 - 16760 - 16138 - 17313 - 16474 - 16036 - 15805 - 17315 - 15807 - 16476 - 16479 - 16483 - 17316 - 16506 - 16509 - 16514 - 16237 - 17317 - 16523 - 17318 - 16185 - 16531 - 16534 - 17319 - 16536 - 15999 - 15479 - 16039 - 16899 - 16081 - 16010 -endcidrange - -100 begincidrange - 16024 - 16012 - 16545 - 15747 - 14848 - 14755 - 16013 - 17320 - 16216 - 15804 - 16546 - 15564 - 16040 - 15150 - 15302 - 16011 - 16031 - 17196 - 17321 - 16136 - 16037 - 16009 - 15811 - 16002 - 16001 - 16020 - 17322 - 16003 - 16008 - 17323 - 16017 - 17324 - 15996 - 16000 - 16015 - 17189 - 15975 - 15992 - 15976 - 17325 - 14290 - 16205 - 17326 - 15998 - 16572 - 15971 - 16573 - 17327 - 16236 - 16121 - 16567 - 16055 - 16109 - 16234 - 14758 - 17328 - 16021 - 14664 - 15560 - 17329 - 16588 - 16006 - 16584 - 15482 - 15485 - 17332 - 16593 - 15730 - 16596 - 15398 - 14059 - 16602 - 16601 - 16575 - 15745 - 16625 - 16640 - 15493 - 17333 - 14877 - 14325 - 14062 - 15967 - 16662 - 17083 - 16671 - 17334 - 16664 - 17335 - 16675 - 16674 - 16679 - 17337 - 16681 - 17338 - 15829 - 16111 - 15754 - 17339 - 14891 -endcidrange - -100 begincidrange - 17340 - 16696 - 17341 - 16014 - 14896 - 14447 - 16707 - 16710 - 16708 - 16713 - 15269 - 16727 - 17342 - 16737 - 14060 - 16746 - 15748 - 16386 - 16774 - 16314 - 17343 - 16325 - 16208 - 16022 - 17344 - 16778 - 16321 - 15759 - 17345 - 16032 - 16150 - 16029 - 16782 - 16786 - 14950 - 16028 - 17295 - 16016 - 16797 - 17346 - 17238 - 14248 - 16798 - 16793 - 16775 - 16034 - 16799 - 16007 - 16004 - 16046 - 15220 - 14242 - 15218 - 15993 - 15981 - 17348 - 16050 - 17350 - 16044 - 16842 - 16884 - 17351 - 16848 - 15018 - 16862 - 16859 - 16872 - 17352 - 16374 - 16857 - 15682 - 16885 - 16888 - 16891 - 16901 - 15758 - 16910 - 15715 - 16930 - 16929 - 16931 - 16489 - 16431 - 16962 - 14501 - 16966 - 15605 - 15721 - 15614 - 16987 - 15048 - 15808 - 14826 - 16384 - 16996 - 16994 - 16383 - 16026 - 17011 - 14697 -endcidrange - -100 begincidrange - 17018 - 17027 - 17353 - 16282 - 16053 - 17355 - 16306 - 17034 - 15127 - 17036 - 17040 - 15071 - 17357 - 17093 - 17096 - 16045 - 17358 - 16271 - 17359 - 15986 - 15984 - 17360 - 16042 - 17361 - 16297 - 17362 - 17112 - 16371 - 17120 - 15104 - 17175 - 14381 - 15987 - 16341 - 17365 - 15124 - 14056 - 17140 - 15118 - 17132 - 17136 - 15997 - 17367 - 17150 - 17157 - 16346 - 15857 - 14131 - 15741 - 17368 - 14138 - 14144 - 14146 - 14150 - 14162 - 16159 - 17369 - 14061 - 15178 - 14174 - 15173 - 17370 - 16094 - 14185 - 14188 - 14187 - 14190 - 14207 - 14203 - 14210 - 15977 - 15183 - 14214 - 17371 - 14216 - 17372 - 16077 - 14231 - 16909 - 17373 - 14268 - 17374 - 14296 - 15217 - 15994 - 17375 - 14556 - 14304 - 14318 - 14324 - 14355 - 17376 - 16048 - 17378 - 16365 - 14349 - 16047 - 16274 - 14358 - 14363 -endcidrange - -89 begincidrange - 16290 - 14364 - 14366 - 16049 - 4938 - 17379 - 16361 - 17380 - 16377 - 15763 - 17381 - 15961 - 17382 - 14391 - 16281 - 16025 - 15966 - 15284 - 16043 - 17383 - 14430 - 17385 - 15806 - 16005 - 14435 - 15724 - 14449 - 16096 - 17386 - 14460 - 17387 - 16056 - 14466 - 16027 - 17388 - 14472 - 15374 - 14382 - 14490 - 14475 - 15364 - 14057 - 17085 - 15309 - 14495 - 15838 - 14235 - 15315 - 14511 - 16023 - 14550 - 16181 - 14560 - 16437 - 14576 - 17389 - 15357 - 15377 - 17391 - 14213 - 14594 - 15836 - 17392 - 16298 - 14603 - 16153 - 14606 - 14617 - 17393 - 15420 - 14618 - 15418 - 14619 - 15974 - 16162 - 15742 - 15985 - 15417 - 16033 - 17394 - 16176 - 14633 - 16316 - 14646 - 17396 - 14647 - 16272 - 17397 - 2746 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKm471-B5-V b/Resources/cmap/HKm471-B5-V deleted file mode 100644 index 486b9e2f63a..00000000000 --- a/Resources/cmap/HKm471-B5-V +++ /dev/null @@ -1,71 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (HKm471-B5-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (HKm471-B5-H) -%%BeginResource: CMap (HKm471-B5-V) -%%Title: (HKm471-B5-V Adobe CNS1 0) -%%Version: 1.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/HKm471-B5-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (CNS1) def - /Supplement 0 def -end def - -/CMapName /HKm471-B5-V def -/CMapVersion 1.001 def -/CMapType 1 def - -/XUID [1 10 25526] def - -/WMode 1 def - -12 begincidrange - 13646 - 13743 - 13745 - 130 - 134 - 138 - 142 - 146 - 150 - 154 - 158 - 13647 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/HKscs-B5-H b/Resources/cmap/HKscs-B5-H deleted file mode 100644 index 9acf67685e9..00000000000 --- a/Resources/cmap/HKscs-B5-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (HKscs-B5-H) %%Title: (HKscs-B5-H Adobe CNS1 3) %%Version: 1.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 3 def end def /CMapName /HKscs-B5-H def /CMapVersion 1.001 def /CMapType 1 def /XUID [1 10 25580] def /WMode 0 def 2 begincodespacerange <00> <80> <8840> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <8840> <8855> 17609 <8856> <887e> 18785 <88a1> <88a8> 18826 <88a9> <88aa> 18844 <8940> <8941> 17716 <8943> <8943> 17718 <8946> <8949> 17719 <894c> <894c> 17723 <894d> <894d> 17347 <894e> <8950> 17724 <8951> <8951> 17306 <8952> <897e> 17727 <89a1> <89a5> 17772 <89a6> <89a6> 17314 <89ab> <89ab> 17388 <89ac> <89ac> 17777 <89ad> <89ad> 17387 <89ae> <89ae> 17778 <89b0> <89b2> 17779 <89b5> <89bf> 17782 <89c1> <89c3> 17793 <89c5> <89ce> 17796 <89cf> <89cf> 17340 <89d0> <89d8> 17806 <89d9> <89d9> 17308 <89da> <89da> 17815 <89db> <89db> 17310 <89dc> <89dc> 17816 <89dd> <89dd> 17311 <89de> <89e0> 17817 <89e1> <89e1> 17313 <89e2> <89e2> 17820 <89e3> <89e3> 17315 <89e4> <89e9> 17821 <89ea> <89eb> 17317 <89ec> <89f9> 17827 <89fa> <89fa> 17321 <89fb> <89fe> 17841 <8a40> <8a40> 17845 <8a41> <8a41> 17161 <8a43> <8a4c> 17163 <8a4d> <8a4d> 17846 <8a4e> <8a59> 17174 <8a5a> <8a5a> 17847 <8a5b> <8a5d> 17187 <8a5e> <8a5e> 17848 <8a5f> <8a62> 17191 <8a64> <8a70> 17196 <8a71> <8a71> 17849 <8a72> <8a74> 17210 <8a76> <8a76> 17214 <8a77> <8a77> 17850 <8a78> <8a79> 17216 <8a7a> <8a7a> 17851 <8a7b> <8a7b> 17219 <8a7c> <8a7c> 17852 <8a7d> <8a7d> 17221 <8a7e> <8a7e> 17853 <8aa1> <8aa7> 17223 <8aa8> <8aa8> 17854 <8aa9> <8aaa> 17231 <8aac> <8ab0> 17234 <8ab2> <8ab5> 17240 <8ab6> <8ab6> 17855 <8ab7> <8ab7> 17245 <8ab8> <8ab8> 17856 <8ab9> <8ab9> 17247 <8abb> <8ac7> 17249 <8ac9> <8acb> 17263 <8acc> <8acc> 17857 <8ace> <8ad5> 17268 <8ad6> <8ad7> 17858 <8ad8> <8adc> 17278 <8adf> <8ae5> 17285 <8ae6> <8ae6> 17860 <8ae7> <8ae7> 17371 <8ae8> <8af4> 17861 <8af6> <8afe> 17874 <8b40> <8b40> 17883 <8b41> <8b42> 17292 <8b43> <8b44> 17884 <8b45> <8b45> 17294 <8b46> <8b46> 17886 <8b47> <8b47> 17295 <8b48> <8b48> 17887 <8b49> <8b49> 17296 <8b4a> <8b4a> 17888 <8b4b> <8b4b> 17297 <8b4c> <8b4c> 17889 <8b4d> <8b50> 17298 <8b51> <8b53> 17890 <8b55> <8b57> 17893 <8b58> <8b58> 17303 <8b59> <8b59> 17896 <8b5a> <8b5a> 17304 <8b5b> <8b5b> 17348 <8b5c> <8b60> 17897 <8b61> <8b61> 17319 <8b62> <8b67> 17902 endcidrange 100 begincidrange <8b68> <8b68> 17324 <8b69> <8b7e> 17908 <8ba1> <8bbf> 17930 <8bc0> <8bdc> 17631 <8bde> <8bfd> 17660 <8d60> <8d61> 17961 <8d62> <8d62> 17338 <8d63> <8d67> 17963 <8d68> <8d68> 17339 <8d69> <8d69> 17312 <8d6a> <8d6a> 17341 <8d6b> <8d6d> 17968 <8d6e> <8d6e> 17342 <8d6f> <8d75> 17971 <8d76> <8d76> 17343 <8d77> <8d79> 17978 <8d7a> <8d7a> 17344 <8d7b> <8d7b> 17981 <8d7c> <8d7c> 17345 <8d7d> <8d7e> 17982 <8da1> <8da4> 17984 <8da5> <8da5> 17346 <8da6> <8da7> 17988 <8da8> <8da8> 17337 <8da9> <8da9> 17325 <8daa> <8db5> 17990 <8db6> <8db6> 17351 <8db7> <8dc2> 18002 <8dc3> <8dc3> 17352 <8dc4> <8df9> 18014 <8dfa> <8dfa> 17401 <8dfb> <8dfe> 18068 <8e40> <8e44> 14123 <8e45> <8e45> 18072 <8e46> <8e68> 14128 <8e6a> <8e6a> 14164 <8e6b> <8e6c> 18073 <8e6d> <8e6e> 14166 <8e70> <8e75> 14169 <8e76> <8e76> 18075 <8e77> <8e7a> 14175 <8e7b> <8e7b> 18076 <8e7c> <8e7d> 14180 <8ea1> <8ea5> 14182 <8ea6> <8ea6> 18077 <8ea7> <8eaa> 14187 <8eac> <8eb3> 14192 <8eb5> <8eb7> 14201 <8eb8> <8eb8> 18078 <8eb9> <8ec8> 14205 <8ec9> <8ec9> 18079 <8eca> <8ecc> 14221 <8ece> <8ecf> 14225 <8ed1> <8ee4> 14228 <8ee5> <8ee5> 18080 <8ee6> <8eee> 14248 <8eef> <8eef> 18081 <8ef0> <8ef5> 14257 <8ef6> <8ef6> 18082 <8ef7> <8efe> 14264 <8f40> <8f56> 14272 <8f58> <8f58> 14296 <8f59> <8f59> 18083 <8f5a> <8f5e> 14297 <8f5f> <8f5f> 18084 <8f60> <8f66> 14302 <8f67> <8f67> 18085 <8f68> <8f68> 14309 <8f6a> <8f6d> 14311 <8f6f> <8f78> 14316 <8f79> <8f79> 18086 <8f7a> <8f7e> 14327 <8fa1> <8faf> 14332 <8fb0> <8fb0> 18087 <8fb1> <8fc4> 14348 <8fc5> <8fc5> 18088 <8fc6> <8fc6> 14368 <8fc7> <8fc7> 18089 <8fc8> <8fc9> 14369 <8fca> <8fca> 18090 <8fcd> <8fd9> 14374 <8fda> <8fda> 18091 <8fdb> <8fe2> 14387 <8fe3> <8fe3> 18092 <8fe4> <8ffb> 14396 <8ffc> <8ffc> 18093 <8ffd> <8ffd> 14420 <9040> <9054> 14422 <9055> <9055> 18094 <9056> <905b> 14444 <905c> <905e> 18095 <905f> <906c> 14451 <906e> <906e> 14466 <906f> <906f> 18098 <9070> <9079> 14467 <907b> <907e> 14477 <90a1> <90a5> 14481 <90a6> <90a6> 18099 <90a7> <90b7> 14486 <90b8> <90b8> 18100 endcidrange 100 begincidrange <90b9> <90db> 14503 <90dd> <90f0> 14539 <90f2> <90fe> 14560 <9140> <9164> 14573 <9165> <9165> 18101 <9166> <916d> 14610 <916e> <916e> 18102 <916f> <917d> 14618 <917e> <917e> 18103 <91a1> <91a1> 14633 <91a2> <91a2> 18104 <91a3> <91be> 14634 <91c0> <91c7> 14663 <91c8> <91c8> 18105 <91c9> <91fe> 14672 <9240> <9243> 14726 <9245> <9263> 14731 <9264> <9264> 18106 <9265> <926c> 14763 <926d> <926d> 18107 <926e> <927e> 14772 <92a1> <92ae> 14789 <92b3> <92c7> 14803 <92c9> <92d0> 14825 <92d2> <92e4> 14834 <92e5> <92e5> 18108 <92e6> <92f1> 14853 <92f2> <92f2> 18109 <92f3> <92fe> 14865 <9340> <9367> 14877 <9368> <9368> 18110 <9369> <937e> 14917 <93a1> <93a9> 14939 <93aa> <93aa> 18111 <93ab> <93c1> 14948 <93c2> <93c2> 18112 <93c3> <93e4> 14971 <93e5> <93e5> 18113 <93e6> <93e7> 15005 <93e8> <93e8> 18114 <93e9> <93ea> 15008 <93eb> <93eb> 18115 <93ec> <93fe> 15010 <9440> <9445> 15029 <9446> <9446> 18116 <9448> <9478> 15036 <9479> <9479> 18117 <947a> <947e> 15086 <94a1> <94c9> 15091 <94cb> <94cb> 18118 <94cc> <94fe> 15134 <9540> <954c> 15185 <954d> <954d> 18119 <954e> <9559> 15198 <955a> <955a> 18120 <955b> <955e> 15210 <955f> <955f> 18121 <9560> <957e> 15215 <95a1> <95c5> 15246 <95c6> <95c6> 18122 <95c7> <95d8> 15283 <95da> <95fe> 15302 <9640> <9643> 15339 <9645> <9650> 15344 <9651> <9651> 18123 <9652> <9669> 15357 <966a> <966a> 18124 <966b> <967e> 15382 <96a1> <96d3> 15402 <96d4> <96d4> 18125 <96d5> <96ec> 15453 <96ee> <96fb> 15478 <96fd> <96fe> 15493 <9740> <977e> 15495 <97a1> <97fe> 15558 <9840> <9843> 15652 <9844> <9845> 18126 <9846> <986e> 15658 <986f> <986f> 18128 <9870> <9874> 15700 <9875> <9876> 18129 <9877> <9877> 15705 <9878> <9879> 18131 <987a> <987a> 15706 <987b> <987e> 18133 <98a1> <98a2> 18137 <98a3> <98a3> 15707 <98a4> <98ae> 18139 <98af> <98af> 15708 <98b0> <98b3> 18150 <98b4> <98b4> 17354 <98b5> <98b5> 18154 <98b6> <98b6> 15709 <98b7> <98b7> 18155 <98b8> <98b8> 17356 <98b9> <98b9> 15710 <98ba> <98ba> 18156 <98bb> <98bb> 17402 <98bc> <98bc> 18157 <98bd> <98be> 15711 endcidrange 100 begincidrange <98bf> <98c1> 18158 <98c2> <98c2> 15713 <98c3> <98c3> 18161 <98c4> <98c4> 15714 <98c5> <98c5> 18162 <98c6> <98c7> 15715 <98c8> <98d1> 18163 <98d2> <98d2> 17357 <98d3> <98d7> 18173 <98d8> <98d9> 17358 <98da> <98da> 18178 <98db> <98db> 17361 <98dc> <98de> 18179 <98df> <98df> 17364 <98e0> <98e2> 18182 <98e3> <98e3> 15717 <98e4> <98e6> 18185 <98e7> <98e7> 15718 <98e8> <98ec> 18188 <98ed> <98ed> 15719 <98ee> <98ef> 18193 <98f0> <98f0> 15720 <98f1> <98f1> 18195 <98f2> <98f2> 15721 <98f3> <98f3> 18196 <98f4> <98f5> 17365 <98f6> <98fb> 18197 <98fc> <98fc> 15722 <98fd> <98fd> 18203 <98fe> <98fe> 17367 <9940> <9941> 18204 <9942> <9942> 17404 <9943> <9943> 15723 <9944> <9944> 18206 <9945> <9945> 15724 <9946> <9946> 18207 <9947> <9947> 17368 <9948> <994e> 18208 <994f> <994f> 15725 <9950> <9953> 18215 <9954> <9954> 17369 <9955> <995b> 18219 <995c> <995c> 17370 <995d> <9963> 18226 <9964> <9964> 17372 <9965> <9969> 18233 <996a> <996a> 15726 <996b> <996d> 18238 <996e> <996e> 15727 <996f> <9974> 18241 <9975> <9975> 15728 <9976> <9977> 18247 <9978> <9978> 15729 <9979> <997e> 18249 <99a1> <99a1> 18255 <99a2> <99a2> 15730 <99a3> <99a3> 18256 <99a4> <99a4> 17349 <99a5> <99a5> 18257 <99a6> <99a6> 17350 <99a7> <99ad> 18258 <99ae> <99ae> 15731 <99af> <99b1> 18265 <99b2> <99b2> 17374 <99b3> <99b5> 18268 <99b6> <99b6> 15732 <99b7> <99b9> 18271 <99ba> <99ba> 15733 <99bb> <99c9> 18274 <99ca> <99ca> 17376 <99cb> <99cc> 18289 <99cd> <99cd> 17378 <99ce> <99d2> 18291 <99d3> <99d3> 17379 <99d4> <99d5> 18296 <99d6> <99d6> 17381 <99d7> <99de> 18298 <99df> <99df> 17375 <99e0> <99e1> 18306 <99e2> <99e2> 15734 <99e3> <99e3> 18308 <99e4> <99e4> 17323 <99e5> <99e5> 18309 <99e6> <99e6> 17383 <99e7> <99e7> 18310 <99e8> <99e8> 17385 <99e9> <99ee> 18311 <99ef> <99ef> 17405 <99f0> <99f3> 18317 <99f4> <99f4> 15735 <99f5> <99fe> 18321 <9a40> <9a49> 18331 <9a4a> <9a4a> 15736 <9a4b> <9a4b> 18341 <9a4c> <9a4c> 15737 <9a4d> <9a58> 18342 <9a59> <9a59> 15738 <9a5a> <9a5e> 18354 <9a5f> <9a5f> 17327 <9a60> <9a60> 18359 endcidrange 100 begincidrange <9a61> <9a61> 15739 <9a62> <9a65> 18360 <9a66> <9a66> 17389 <9a67> <9a67> 18364 <9a68> <9a68> 15740 <9a69> <9a69> 17390 <9a6a> <9a6a> 18365 <9a6b> <9a6b> 17407 <9a6c> <9a72> 18366 <9a73> <9a73> 15741 <9a74> <9a74> 18373 <9a75> <9a75> 17393 <9a76> <9a7d> 18374 <9a7e> <9a7e> 15742 <9aa1> <9aa2> 18382 <9aa3> <9aa3> 17395 <9aa4> <9aa4> 18384 <9aa5> <9aa5> 17394 <9aa6> <9aa8> 18385 <9aa9> <9aa9> 17400 <9aaa> <9aaa> 17396 <9aab> <9ab1> 18388 <9ab2> <9ab2> 15743 <9ab3> <9ab6> 18395 <9ab7> <9ab7> 15744 <9ab8> <9ab8> 18399 <9ab9> <9ab9> 15745 <9aba> <9aba> 18400 <9abb> <9abb> 15746 <9abc> <9abc> 18401 <9abd> <9abd> 17335 <9abe> <9ac6> 18402 <9ac7> <9ac7> 15747 <9ac8> <9acf> 18411 <9ad0> <9ad0> 15748 <9ad1> <9ad1> 18419 <9ad2> <9ad2> 15749 <9ad3> <9ad8> 18420 <9ad9> <9adb> 15750 <9adc> <9ae1> 18426 <9ae2> <9ae2> 15753 <9ae3> <9ae3> 18432 <9ae4> <9ae4> 15754 <9ae5> <9ae7> 18433 <9ae8> <9ae8> 15755 <9ae9> <9ae9> 17328 <9aea> <9aed> 18436 <9aee> <9aee> 17330 <9aef> <9af1> 18440 <9af2> <9af2> 15756 <9af3> <9af5> 18443 <9af6> <9af6> 15757 <9af7> <9afa> 18446 <9afb> <9afb> 15758 <9afc> <9afe> 18450 <9b40> <9b45> 18453 <9b46> <9b46> 15759 <9b47> <9b49> 18459 <9b4a> <9b4a> 15760 <9b4b> <9b53> 18462 <9b54> <9b54> 15762 <9b55> <9b57> 18471 <9b58> <9b58> 15763 <9b59> <9b59> 18474 <9b5a> <9b5a> 15764 <9b5b> <9b5b> 18475 <9b5c> <9b5c> 15765 <9b5d> <9b5d> 18476 <9b5e> <9b5f> 15766 <9b60> <9b60> 18477 <9b62> <9b6f> 18478 <9b70> <9b73> 15768 <9b74> <9b75> 18492 <9b77> <9b77> 15773 <9b79> <9b7a> 18494 <9b7c> <9b7c> 15776 <9b7d> <9b7d> 18496 <9b7e> <9b7e> 15777 <9ba1> <9ba1> 15778 <9ba2> <9ba2> 18497 <9ba3> <9ba4> 15779 <9ba5> <9ba6> 18498 <9ba7> <9baa> 15781 <9bab> <9bab> 18500 <9bac> <9bac> 15785 <9bad> <9bae> 18501 <9baf> <9baf> 15786 <9bb0> <9bb1> 18503 <9bb2> <9bb9> 15787 <9bba> <9bbd> 18505 <9bbe> <9bbe> 15795 <9bbf> <9bbf> 18509 <9bc0> <9bc5> 15796 <9bc7> <9bc9> 18510 <9bca> <9bca> 15803 <9bcb> <9bcb> 18513 <9bcc> <9bcc> 15804 <9bcd> <9bcd> 18514 <9bce> <9bce> 17360 <9bcf> <9bcf> 18515 endcidrange 100 begincidrange <9bd0> <9bd1> 15805 <9bd2> <9bd2> 18516 <9bd3> <9bd3> 15807 <9bd4> <9bd4> 18517 <9bd5> <9bd5> 15808 <9bd6> <9bd7> 18518 <9bd8> <9bda> 15809 <9bdb> <9bdc> 18520 <9bdd> <9bdd> 15812 <9bdf> <9bdf> 15813 <9be0> <9be0> 18522 <9be1> <9be1> 15814 <9be2> <9be2> 18523 <9be3> <9be3> 15815 <9be4> <9be6> 18524 <9be7> <9be7> 15816 <9be8> <9be8> 18527 <9be9> <9beb> 15817 <9bed> <9bed> 18528 <9bee> <9bef> 15821 <9bf0> <9bf2> 18529 <9bf3> <9bf3> 15823 <9bf4> <9bf5> 18532 <9bf7> <9bf7> 18534 <9bf8> <9bf9> 15825 <9bfa> <9bfa> 18535 <9bfb> <9bfc> 15827 <9bfd> <9bfe> 18536 <9c40> <9c41> 15829 <9c43> <9c43> 18538 <9c44> <9c46> 15832 <9c47> <9c47> 18539 <9c48> <9c48> 15835 <9c49> <9c49> 18540 <9c4a> <9c4a> 15836 <9c4b> <9c4c> 18541 <9c4d> <9c52> 15837 <9c54> <9c54> 18543 <9c55> <9c55> 15844 <9c56> <9c56> 18544 <9c57> <9c5b> 15845 <9c5c> <9c5c> 18545 <9c5d> <9c5d> 15850 <9c5e> <9c5f> 18546 <9c60> <9c60> 15851 <9c61> <9c61> 18548 <9c63> <9c63> 18549 <9c64> <9c66> 15853 <9c67> <9c67> 18550 <9c69> <9c69> 18551 <9c6a> <9c6a> 15857 <9c6c> <9c6c> 18552 <9c6d> <9c6d> 15858 <9c6e> <9c6e> 18553 <9c6f> <9c72> 15859 <9c73> <9c74> 18554 <9c75> <9c76> 15863 <9c78> <9c78> 18556 <9c79> <9c79> 15866 <9c7a> <9c7a> 18557 <9c7b> <9c7c> 15867 <9c7d> <9c7d> 18558 <9c7e> <9c7e> 15869 <9ca1> <9ca2> 15870 <9ca3> <9ca4> 18559 <9ca5> <9ca5> 15872 <9ca6> <9ca7> 18561 <9ca8> <9ca9> 15873 <9caa> <9caa> 18563 <9cab> <9cab> 15875 <9cac> <9cac> 18564 <9cad> <9cae> 15876 <9caf> <9cb0> 18565 <9cb1> <9cba> 15878 <9cbb> <9cbb> 18567 <9cbe> <9cc2> 15890 <9cc3> <9cc5> 18568 <9cc6> <9ccd> 15895 <9cce> <9cce> 18571 <9ccf> <9ccf> 15903 <9cd1> <9cd3> 15905 <9cd4> <9cd7> 18572 <9cd8> <9cda> 15908 <9cdb> <9cdb> 18576 <9cdc> <9ce5> 15911 <9ce6> <9ce6> 18577 <9ce7> <9ce9> 15921 <9cea> <9cea> 18578 <9ceb> <9cec> 15924 <9ced> <9ced> 18579 <9cee> <9cf9> 15926 <9cfa> <9cfc> 18580 <9cfd> <9cfd> 15938 <9cfe> <9cfe> 18583 <9d40> <9d40> 17384 <9d41> <9d45> 18584 <9d46> <9d46> 15939 <9d47> <9d48> 18589 <9d49> <9d49> 15940 <9d4a> <9d4b> 18591 endcidrange 100 begincidrange <9d4c> <9d4d> 15942 <9d4e> <9d4e> 18593 <9d4f> <9d4f> 15944 <9d50> <9d50> 18594 <9d51> <9d51> 15945 <9d52> <9d54> 18595 <9d55> <9d55> 15946 <9d56> <9d56> 18598 <9d58> <9d59> 18599 <9d5b> <9d60> 18601 <9d61> <9d61> 17353 <9d62> <9d62> 15948 <9d63> <9d63> 18607 <9d64> <9d64> 15949 <9d65> <9d77> 18608 <9d78> <9d78> 17397 <9d79> <9d79> 15950 <9d7a> <9d7d> 18627 <9d7e> <9d7e> 15951 <9da1> <9da4> 18631 <9da5> <9da8> 15952 <9da9> <9da9> 18635 <9daa> <9daa> 15956 <9dab> <9dab> 18636 <9dac> <9dad> 15957 <9dae> <9daf> 18637 <9db0> <9db0> 15960 <9db1> <9db2> 18639 <9db3> <9db3> 15961 <9db4> <9db4> 18641 <9db5> <9db5> 15962 <9db6> <9db6> 18642 <9db7> <9db7> 15963 <9db8> <9dbb> 18643 <9dbc> <9dbd> 15964 <9dbe> <9dbe> 18647 <9dbf> <9dc0> 15966 <9dc1> <9dc2> 18648 <9dc3> <9dc3> 15968 <9dc5> <9dc6> 18650 <9dc7> <9dc8> 15970 <9dc9> <9dc9> 18652 <9dca> <9dca> 15972 <9dcb> <9dcc> 18653 <9dcd> <9dd1> 15973 <9dd2> <9dd2> 18655 <9dd3> <9dd5> 15978 <9dd6> <9dd9> 18656 <9dda> <9dfb> 15981 <9dfc> <9dfc> 18660 <9dfd> <9dfe> 16015 <9e40> <9e42> 16017 <9e43> <9e43> 18661 <9e44> <9e5e> 16021 <9e5f> <9e5f> 18662 <9e60> <9e62> 16049 <9e63> <9e63> 18663 <9e64> <9e65> 16052 <9e66> <9e67> 18664 <9e68> <9e68> 16054 <9e69> <9e69> 18666 <9e6a> <9e6a> 16055 <9e6b> <9e70> 18667 <9e71> <9e71> 16056 <9e72> <9e72> 18673 <9e73> <9e73> 16057 <9e74> <9e76> 18674 <9e77> <9e78> 16058 <9e79> <9e79> 18677 <9e7a> <9e7a> 16060 <9e7b> <9e7b> 18678 <9e7c> <9e7c> 16061 <9e7d> <9e7d> 18679 <9e7e> <9e7e> 16062 <9ea1> <9ea2> 16063 <9ea3> <9ea3> 18680 <9ea4> <9ea6> 16065 <9ea7> <9ea8> 18681 <9eaa> <9eaa> 16069 <9eab> <9eab> 18683 <9ead> <9ead> 16071 <9eae> <9eae> 18684 <9eaf> <9eb1> 16072 <9eb2> <9eb3> 18685 <9eb4> <9eb4> 16075 <9eb5> <9eb5> 18687 <9eb6> <9eb7> 16076 <9eb8> <9eb8> 18688 <9eb9> <9eb9> 16078 <9eba> <9ebb> 18689 <9ebc> <9ebc> 16079 <9ebd> <9ebe> 18691 <9ebf> <9ec0> 16080 <9ec1> <9ec3> 18693 <9ec5> <9ec5> 16083 <9ec6> <9ec6> 18696 <9ec7> <9eca> 16084 <9ecb> <9ecc> 18697 <9ecd> <9ecd> 16089 <9ece> <9ecf> 18699 endcidrange 100 begincidrange <9ed0> <9ed1> 16090 <9ed2> <9ed2> 18701 <9ed3> <9ed3> 16092 <9ed4> <9ed5> 18702 <9ed6> <9ed7> 16093 <9ed8> <9ed9> 18704 <9eda> <9eee> 16095 <9ef0> <9ef1> 16117 <9ef2> <9ef2> 18706 <9ef3> <9ef3> 16119 <9ef5> <9ef5> 16121 <9ef6> <9ef8> 18707 <9ef9> <9efa> 16122 <9efb> <9efb> 18710 <9efc> <9efc> 16124 <9efe> <9efe> 16126 <9f40> <9f42> 16127 <9f43> <9f43> 18711 <9f44> <9f47> 16130 <9f48> <9f48> 18712 <9f49> <9f4a> 16134 <9f4b> <9f4c> 18713 <9f4d> <9f4d> 16136 <9f4f> <9f5f> 16138 <9f61> <9f65> 16156 <9f67> <9f68> 18715 <9f69> <9f6f> 16163 <9f70> <9f70> 18717 <9f71> <9f7e> 16170 <9fa1> <9fac> 16184 <9fae> <9fb0> 16197 <9fb2> <9fb4> 16201 <9fb5> <9fb5> 18718 <9fb6> <9fba> 16204 <9fbb> <9fbb> 18719 <9fbc> <9fbe> 16209 <9fbf> <9fbf> 18720 <9fc1> <9fc1> 18721 <9fc2> <9fc7> 16213 <9fc9> <9fca> 16220 <9fcc> <9fcc> 18722 <9fcd> <9fd3> 16224 <9fd4> <9fd4> 18723 <9fd5> <9fd7> 16232 <9fd9> <9fd9> 16236 <9fdb> <9fe3> 16238 <9fe4> <9fe4> 18724 <9fe5> <9fe5> 16247 <9fe7> <9fe9> 16249 <9feb> <9fee> 16253 <9ff0> <9ff8> 16258 <9ff9> <9ff9> 18725 <9ffa> <9ffe> 16267 18726 16272 18727 16278 18728 16291 16293 16296 16305 18729 16314 16319 16324 18730 16327 16330 18731 16331 16334 18732 16335 16341 16343 18733 16364 18734 16374 16377 16379 16389 16391 18735 16393 18736 17332 18743 17336 18746 99 13743 128 162 248 247 249 256 319 endcidrange 100 begincidrange 413 476 503 595 658 752 815 909 972 1066 1129 1223 1286 1380 1443 1537 1600 1694 1757 1851 1914 2431 2007 2070 2164 2227 2321 2384 2432 2479 2542 2636 2699 2793 2856 2950 3013 3107 3170 3264 3327 3421 3484 3578 3641 3735 3798 3892 3955 4049 4112 4206 4269 4309 4364 4427 4521 4584 4678 4308 4696 4740 4834 4897 4991 5054 5148 5211 5222 5306 5369 5221 5411 5462 5496 5526 5551 5550 5552 5620 5495 5642 5682 5776 5839 5933 506 537 554 558 560 13747 13754 13785 13848 13942 14005 14049 17606 17692 endcidrange 100 begincidrange 732 17701 1289 17709 2550 18834 5996 628 6006 6040 6059 6039 6088 6135 6153 6216 6134 6302 6309 6372 6466 6529 6623 6686 6780 6843 6937 7000 7094 7157 7251 7314 7408 7471 7565 7628 7722 7785 7879 7942 8036 8099 8788 8143 8193 8889 8251 8255 8349 8412 8506 8569 8663 8726 8142 8789 8820 8883 8890 8978 9041 9135 9198 9089 9289 9291 9354 9448 9511 9605 9668 9762 9825 9919 9982 10076 10139 10233 10296 10390 10453 10547 10610 10704 10767 10861 10924 10927 11019 11074 11083 11177 11240 11334 11362 11398 10926 11478 11491 11554 endcidrange 100 begincidrange 11073 11615 11647 11710 11720 11805 11868 12308 11942 11961 12024 12118 11719 12140 12180 11361 12222 12273 12309 12640 12317 12336 12430 12783 12470 12492 12527 12587 12641 12651 12745 12784 12809 12526 12829 12901 12903 12966 13060 12900 13095 13122 13216 13279 13373 13436 13530 13586 13594 13585 13629 13641 13630 13642 14056 16395 16427 16434 16458 18758 16468 16487 16495 16511 16552 16561 18760 16572 18761 16599 16615 18762 16618 16639 18763 16645 18764 16658 16696 16702 16707 18765 16717 16721 18766 16723 18767 16739 18768 16749 18769 16756 16765 16789 18770 16792 18772 16807 18773 16829 endcidrange 28 begincidrange 18774 16839 16842 16855 18775 16864 18776 16897 16917 16941 16944 18777 16984 18778 16998 17010 17029 18779 17055 17057 18780 17065 17071 17080 18781 17131 18783 17144 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/HKscs-B5-V b/Resources/cmap/HKscs-B5-V deleted file mode 100644 index dcc084d1140..00000000000 --- a/Resources/cmap/HKscs-B5-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (HKscs-B5-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (HKscs-B5-H) %%BeginResource: CMap (HKscs-B5-V) %%Title: (HKscs-B5-V Adobe CNS1 0) %%Version: 1.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /HKscs-B5-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /HKscs-B5-V def /CMapVersion 1.001 def /CMapType 1 def /XUID [1 10 25581] def /WMode 1 def 13 begincidrange 13646 13743 13745 130 134 138 142 146 150 154 158 13647 14097 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Hankaku b/Resources/cmap/Hankaku deleted file mode 100644 index 7f09a5f453a..00000000000 --- a/Resources/cmap/Hankaku +++ /dev/null @@ -1,70 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Hankaku) -%%Title: (Hankaku Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /Hankaku def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 860 def -/XUID [1 10 25348] def - -/WMode 0 def - -1 begincodespacerange - <00> -endcodespacerange - -10 begincidrange -<20> <5f> 231 -<60> <60> 231 -<61> <7e> 296 -<81> <85> 327 -<86> <8f> 516 -<90> <90> 342 -<91> <9f> 526 - 327 - 541 - 388 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Hiragana b/Resources/cmap/Hiragana deleted file mode 100644 index af3ccba9d96..00000000000 --- a/Resources/cmap/Hiragana +++ /dev/null @@ -1,68 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Hiragana) -%%Title: (Hiragana Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /Hiragana def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 862 def -/XUID [1 10 25349] def - -/WMode 0 def - -1 begincodespacerange - <00> -endcodespacerange - -8 begincidrange -<20> <20> 515 -<21> <25> 327 -<26> <2f> 516 -<30> <30> 342 -<31> <5d> 526 -<5e> <5f> 388 -<60> <62> 571 -<66> <7e> 574 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Identity-V b/Resources/cmap/Identity-V deleted file mode 100644 index da5ecb172f2..00000000000 --- a/Resources/cmap/Identity-V +++ /dev/null @@ -1,50 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Identity-V) -%%Title: (Identity-V Adobe Identity 0) -%%Version: 10.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Identity) def - /Supplement 0 def -end def - -/CMapName /Identity-V def -/CMapVersion 10.001 def -/CMapType 1 def - -/XUID [1 10 25404 9991] def - -/WMode 1 def - -/Identity-H usecmap - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/KSC-EUC-H b/Resources/cmap/KSC-EUC-H deleted file mode 100644 index 8ea46b14105..00000000000 --- a/Resources/cmap/KSC-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (KSC-EUC-H) %%Title: (KSC-EUC-H Adobe Korea1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 0 def end def /CMapName /KSC-EUC-H def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 100 def /XUID [1 10 25400] def /WMode 0 def 2 begincodespacerange <00> <80> endcodespacerange 1 beginnotdefrange <00> <1f> 8094 endnotdefrange 100 begincidrange <20> <7e> 8094 101 195 264 358 409 451 461 471 495 519 587 666 670 671 679 757 851 934 1020 1053 1086 1180 1274 1368 1462 1556 1650 1744 1838 1932 2026 2120 2214 2308 2402 2496 2590 2684 2778 2872 2966 3060 3154 3248 3342 3436 3530 4116 3577 3678 3582 7053 3598 3621 3715 3460 3761 7900 3785 3807 3802 3819 3900 3902 3990 3993 3946 3994 3946 4015 3708 4038 4131 4050 4083 4374 4156 4134 4375 4136 4376 4138 5800 4382 4386 4139 4387 4140 4391 4141 4394 4142 4396 4143 4399 4146 4403 4149 4406 endcidrange 100 begincidrange 4409 4150 4410 4151 4412 4419 4154 4420 4155 4424 4159 4511 4170 4513 4517 4173 4518 4524 4174 4525 4528 4535 4175 4541 4176 4545 4179 4547 4550 4180 4564 4566 4571 4576 4181 4604 4609 4185 4611 4186 4192 4286 4318 4355 4136 4376 4378 5800 4382 4139 4387 4192 4389 4469 4167 4492 4172 4512 4561 5552 4603 6424 4627 4653 4747 4841 4935 5151 4971 4922 5001 5027 7518 5031 5120 5079 5124 5109 5171 7607 5201 5211 5584 5302 5367 5303 7083 5321 5362 5366 5485 5372 5394 6001 5474 5487 5460 5499 5317 5562 endcidrange 100 begincidrange 5579 5673 7009 5757 7370 5766 5678 5773 5858 5874 5871 4425 5873 4427 5879 4429 5880 4431 5887 4435 5896 4436 5897 4437 5898 4439 5901 4442 4159 5936 4444 4447 5937 4449 5939 4450 5941 4453 5946 4455 5947 4458 5948 4459 5951 4463 5954 4160 5961 4465 5962 4161 5964 4468 5971 4469 5974 4470 5976 4162 5978 4471 5980 4472 5981 4474 4473 4475 5983 4476 5984 4478 6447 5985 4481 5987 4482 5460 5988 4483 4163 4166 5990 4485 5991 4487 5996 4488 6000 4489 4491 6002 4167 4493 6003 4494 6005 4495 6019 7783 endcidrange 100 begincidrange 6020 4497 4499 6024 4501 6027 4502 6028 4503 6029 4506 6031 4508 6042 4509 6046 4510 6047 5797 6063 6070 4551 6140 4553 4180 6147 4555 6152 5800 6153 4556 6154 4557 6156 4560 6162 4561 6166 4563 6197 7988 6239 6246 6123 6278 4577 6313 4183 6327 4579 6329 4581 6333 4582 6334 4584 6337 4586 6339 4588 4184 6340 4590 6355 4592 6356 4593 4595 6359 4596 6362 4599 6366 4600 5552 6368 4603 6373 6411 4614 4616 6416 4618 6418 5950 4620 4187 6422 4625 6424 4627 6426 4629 6427 4632 6432 4634 4636 6435 4188 endcidrange 67 begincidrange 6437 4638 6447 4640 6454 4642 6456 4644 6458 4645 6460 4647 6474 4650 6475 4653 6479 5351 6553 6569 6494 6627 6662 6756 6850 6944 5731 6972 5771 7032 7036 4191 7052 7129 6484 7135 6684 7205 7221 7315 4279 7398 7139 7399 7407 4247 7430 4266 7445 4340 7455 7498 7572 7556 5088 7576 7590 7709 3558 7684 3644 7751 7775 7869 3815 7877 7962 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSC-EUC-V b/Resources/cmap/KSC-EUC-V deleted file mode 100644 index f5f3709d27f..00000000000 --- a/Resources/cmap/KSC-EUC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (KSC-EUC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (KSC-EUC-H) %%BeginResource: CMap (KSC-EUC-V) %%Title: (KSC-EUC-V Adobe Korea1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /KSC-EUC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 0 def end def /CMapName /KSC-EUC-V def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 310 def /XUID [1 10 25401] def /WMode 1 def 16 begincidrange 8056 8058 8320 8059 8062 8063 8075 8076 8077 8079 8080 8081 8087 8088 8089 8090 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSC-Johab-H b/Resources/cmap/KSC-Johab-H deleted file mode 100644 index cbb5ed25a30..00000000000 --- a/Resources/cmap/KSC-Johab-H +++ /dev/null @@ -1,4279 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (KSC-Johab-H) -%%Title: (KSC-Johab-H Adobe Korea1 1) -%%Version: 4.003 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Korea1) def - /Supplement 1 def -end def - -/CMapName /KSC-Johab-H def -/CMapVersion 4.003 def -/CMapType 1 def - -/UIDOffset 560 def -/XUID [1 10 25411] def - -/WMode 0 def - -4 begincodespacerange - <00> <80> - <8441> - - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 1 -endnotdefrange - -100 begincidrange -<20> <7e> 1 -<8861> <8862> 1086 -<8863> <8864> 9333 -<8865> <8865> 1088 -<8866> <8867> 9335 -<8868> <886b> 1089 -<886c> <8870> 9337 -<8871> <8871> 1093 -<8873> <8879> 1094 -<887a> <887a> 9342 -<887b> <887d> 1101 -<8881> <8882> 1104 -<8883> <8884> 9343 -<8885> <8885> 1106 -<8886> <8888> 9345 -<8889> <8889> 1107 -<888a> <8890> 9348 -<8891> <8891> 1108 -<8893> <8893> 1109 -<8894> <8894> 9355 -<8895> <8897> 1110 -<8898> <889d> 9356 -<88a1> <88a2> 1113 -<88a3> <88a4> 9362 -<88a5> <88a5> 1115 -<88a6> <88a8> 9364 -<88a9> <88a9> 1116 -<88aa> <88b1> 9367 -<88b3> <88b4> 9375 -<88b5> <88b5> 1117 -<88b6> <88b6> 9377 -<88b7> <88b7> 1118 -<88b8> <88bd> 9378 -<88c1> <88c1> 1119 -<88c2> <88c4> 9384 -<88c5> <88c5> 1120 -<88c6> <88c8> 9387 -<88c9> <88c9> 1121 -<88ca> <88d1> 9390 -<88d3> <88dd> 9398 -<88e1> <88e2> 1122 -<88e3> <88e4> 9409 -<88e5> <88e5> 1124 -<88e6> <88e7> 9411 -<88e8> <88e9> 1125 -<88ea> <88ea> 9413 -<88eb> <88eb> 1127 -<88ec> <88f0> 9414 -<88f1> <88f1> 1128 -<88f3> <88f3> 1129 -<88f4> <88f4> 9419 -<88f5> <88f8> 1130 -<88f9> <88fa> 9420 -<88fb> <88fd> 1134 -<8941> <8941> 1137 -<8942> <8944> 9422 -<8945> <8945> 1138 -<8946> <8948> 9425 -<8949> <8949> 1139 -<894a> <8950> 9428 -<8951> <8951> 1140 -<8953> <8953> 1141 -<8954> <8954> 9435 -<8955> <8957> 1142 -<8958> <895d> 9436 -<8961> <8963> 1145 -<8964> <8964> 9442 -<8965> <8965> 1148 -<8966> <8967> 9443 -<8968> <8969> 1149 -<896a> <8970> 9445 -<8971> <8971> 1151 -<8973> <8973> 1152 -<8974> <8974> 9452 -<8975> <8977> 1153 -<8978> <897a> 9453 -<897b> <897b> 1156 -<897c> <897d> 9456 -<8981> <8981> 1157 -<8982> <8984> 9458 -<8985> <8985> 1158 -<8986> <8988> 9461 -<8989> <8989> 1159 -<898a> <8991> 9464 -<8993> <8993> 1160 -<8994> <8994> 9472 -<8995> <8995> 1161 -<8996> <899d> 9473 -<89a1> <89a2> 1162 -<89a3> <89a4> 9481 -<89a5> <89a5> 1164 -<89a6> <89a7> 9483 -<89a8> <89a9> 1165 -<89aa> <89aa> 9485 -<89ab> <89ab> 1167 -<89ac> <89ac> 9486 -<89ad> <89ad> 1168 -<89ae> <89af> 9487 -<89b0> <89b1> 1169 -<89b3> <89b3> 1171 -endcidrange - -100 begincidrange -<89b4> <89b4> 9489 -<89b5> <89b5> 1172 -<89b6> <89b6> 9490 -<89b7> <89b8> 1173 -<89b9> <89bd> 9491 -<89c1> <89c2> 1175 -<89c3> <89c4> 9496 -<89c5> <89c5> 1177 -<89c6> <89c8> 9498 -<89c9> <89c9> 1178 -<89ca> <89ca> 9501 -<89cb> <89cb> 1179 -<89cc> <89d0> 9502 -<89d1> <89d1> 1180 -<89d3> <89d3> 1181 -<89d4> <89d4> 9507 -<89d5> <89d5> 1182 -<89d6> <89d6> 9508 -<89d7> <89d7> 1183 -<89d8> <89dd> 9509 -<89e1> <89e1> 1184 -<89e2> <89e4> 9515 -<89e5> <89e5> 1185 -<89e6> <89e8> 9518 -<89e9> <89e9> 1186 -<89ea> <89f1> 9521 -<89f3> <89f3> 1187 -<89f4> <89f5> 9529 -<89f6> <89f7> 1188 -<89f8> <89fd> 9531 -<8a41> <8a42> 1190 -<8a43> <8a44> 9537 -<8a45> <8a45> 1192 -<8a46> <8a48> 9539 -<8a49> <8a49> 1193 -<8a4a> <8a50> 9542 -<8a51> <8a51> 1194 -<8a53> <8a53> 1195 -<8a54> <8a54> 9549 -<8a55> <8a55> 1196 -<8a56> <8a56> 9550 -<8a57> <8a57> 1197 -<8a58> <8a5d> 9551 -<8a61> <8a61> 1198 -<8a62> <8a64> 9557 -<8a65> <8a65> 1199 -<8a66> <8a68> 9560 -<8a69> <8a69> 1200 -<8a6a> <8a71> 9563 -<8a73> <8a73> 1201 -<8a74> <8a74> 9571 -<8a75> <8a75> 1202 -<8a76> <8a7d> 9572 -<8a81> <8a82> 1203 -<8a83> <8a84> 9580 -<8a85> <8a85> 1205 -<8a86> <8a87> 9582 -<8a88> <8a8b> 1206 -<8a8c> <8a8f> 9584 -<8a90> <8a91> 1210 -<8a93> <8a93> 1212 -<8a94> <8a94> 9588 -<8a95> <8a95> 1213 -<8a96> <8a96> 9589 -<8a97> <8a98> 1214 -<8a99> <8a9d> 9590 -<8aa1> <8aa2> 1216 -<8aa3> <8aa4> 9595 -<8aa5> <8aa5> 1218 -<8aa6> <8aa8> 9597 -<8aa9> <8aa9> 1219 -<8aaa> <8ab1> 9600 -<8ab3> <8ab5> 9608 -<8ab6> <8ab7> 1220 -<8ab8> <8abd> 9611 -<8ac1> <8ac1> 1222 -<8ac2> <8ad1> 9617 -<8ad3> <8ad4> 9633 -<8ad5> <8ad5> 1223 -<8ad6> <8add> 9635 -<8ae1> <8ae2> 1224 -<8ae3> <8ae4> 9643 -<8ae5> <8ae5> 1226 -<8ae6> <8ae8> 9645 -<8ae9> <8ae9> 1227 -<8aea> <8af0> 9648 -<8af1> <8af1> 1228 -<8af3> <8af3> 1229 -<8af4> <8af4> 9655 -<8af5> <8af5> 1230 -<8af6> <8afd> 9656 -<8b41> <8b41> 1231 -<8b42> <8b44> 9664 -<8b45> <8b45> 1232 -<8b46> <8b48> 9667 -<8b49> <8b49> 1233 -<8b4a> <8b51> 9670 -<8b53> <8b5d> 9678 -<8b61> <8b62> 1234 -<8b63> <8b64> 9689 -endcidrange - -100 begincidrange -<8b65> <8b65> 1236 -<8b66> <8b67> 9691 -<8b68> <8b6a> 1237 -<8b6b> <8b70> 9693 -<8b71> <8b71> 1240 -<8b73> <8b73> 1241 -<8b74> <8b74> 9699 -<8b75> <8b75> 1242 -<8b76> <8b76> 9700 -<8b77> <8b77> 1243 -<8b78> <8b7d> 9701 -<8b81> <8b81> 1244 -<8b82> <8b91> 9707 -<8b93> <8b9d> 9723 -<8ba1> <8ba2> 1245 -<8ba3> <8ba4> 9734 -<8ba5> <8ba5> 1247 -<8ba6> <8ba7> 9736 -<8ba8> <8ba9> 1248 -<8baa> <8baa> 9738 -<8bab> <8bab> 1250 -<8bac> <8bb0> 9739 -<8bb1> <8bb1> 1251 -<8bb3> <8bb3> 1252 -<8bb4> <8bb4> 9744 -<8bb5> <8bb5> 1253 -<8bb6> <8bb6> 9745 -<8bb7> <8bb8> 1254 -<8bb9> <8bbb> 9746 -<8bbc> <8bbc> 1256 -<8bbd> <8bbd> 9749 -<8c61> <8c63> 1257 -<8c64> <8c64> 9750 -<8c65> <8c65> 1260 -<8c66> <8c68> 9751 -<8c69> <8c69> 1261 -<8c6a> <8c6a> 9754 -<8c6b> <8c6b> 1262 -<8c6c> <8c70> 9755 -<8c71> <8c71> 1263 -<8c73> <8c73> 1264 -<8c74> <8c74> 9760 -<8c75> <8c77> 1265 -<8c78> <8c7a> 9761 -<8c7b> <8c7b> 1268 -<8c7c> <8c7d> 9764 -<8c81> <8c82> 1269 -<8c83> <8c84> 9766 -<8c85> <8c85> 1271 -<8c86> <8c88> 9768 -<8c89> <8c89> 1272 -<8c8a> <8c90> 9771 -<8c91> <8c91> 1273 -<8c93> <8c93> 1274 -<8c94> <8c94> 9778 -<8c95> <8c97> 1275 -<8c98> <8c9d> 9779 -<8ca1> <8ca2> 1278 -<8ca3> <8ca8> 9785 -<8ca9> <8ca9> 1280 -<8caa> <8cb1> 9791 -<8cb3> <8cbd> 9799 -<8cc1> <8cd1> 9810 -<8cd3> <8cdd> 9827 -<8ce1> <8ce3> 1281 -<8ce4> <8ce4> 9838 -<8ce5> <8ce5> 1284 -<8ce6> <8ce8> 9839 -<8ce9> <8ce9> 1285 -<8cea> <8cf0> 9842 -<8cf1> <8cf1> 1286 -<8cf3> <8cf3> 1287 -<8cf4> <8cf4> 9849 -<8cf5> <8cf7> 1288 -<8cf8> <8cfd> 9850 -<8d41> <8d42> 1291 -<8d43> <8d44> 9856 -<8d45> <8d45> 1293 -<8d46> <8d50> 9858 -<8d51> <8d51> 1294 -<8d53> <8d54> 9869 -<8d55> <8d55> 1295 -<8d56> <8d56> 9871 -<8d57> <8d57> 1296 -<8d58> <8d5d> 9872 -<8d61> <8d61> 1297 -<8d62> <8d64> 9878 -<8d65> <8d65> 1298 -<8d66> <8d68> 9881 -<8d69> <8d69> 1299 -<8d6a> <8d71> 9884 -<8d73> <8d74> 9892 -<8d75> <8d76> 1300 -<8d77> <8d7a> 9894 -<8d7b> <8d7b> 1302 -<8d7c> <8d7d> 9898 -<8d81> <8d81> 1303 -<8d82> <8d91> 9900 -<8d93> <8d9d> 9916 -<8da1> <8da2> 1304 -endcidrange - -100 begincidrange -<8da3> <8da4> 9927 -<8da5> <8da5> 1306 -<8da6> <8da6> 9929 -<8da7> <8da7> 1307 -<8da8> <8da8> 9930 -<8da9> <8da9> 1308 -<8daa> <8db0> 9931 -<8db1> <8db1> 1309 -<8db3> <8db3> 1310 -<8db4> <8db4> 9938 -<8db5> <8db5> 1311 -<8db6> <8db6> 9939 -<8db7> <8db9> 1312 -<8dba> <8dbd> 9940 -<8dc1> <8dc2> 1315 -<8dc3> <8dc8> 9944 -<8dc9> <8dc9> 1317 -<8dca> <8dd1> 9950 -<8dd3> <8dd5> 9958 -<8dd6> <8dd7> 1318 -<8dd8> <8ddd> 9961 -<8de1> <8de2> 1320 -<8de3> <8df1> 9967 -<8df3> <8df6> 9982 -<8df7> <8df7> 1322 -<8df8> <8dfd> 9986 -<8e41> <8e41> 1323 -<8e42> <8e44> 9992 -<8e45> <8e45> 1324 -<8e46> <8e48> 9995 -<8e49> <8e49> 1325 -<8e4a> <8e50> 9998 -<8e51> <8e51> 1326 -<8e53> <8e53> 1327 -<8e54> <8e56> 10005 -<8e57> <8e57> 1328 -<8e58> <8e5d> 10008 -<8e61> <8e61> 1329 -<8e62> <8e71> 10014 -<8e73> <8e7d> 10030 -<8e81> <8e82> 1330 -<8e83> <8e84> 10041 -<8e85> <8e85> 1332 -<8e86> <8e88> 10043 -<8e89> <8e89> 1333 -<8e8a> <8e8f> 10046 -<8e90> <8e91> 1334 -<8e93> <8e93> 1336 -<8e94> <8e94> 10052 -<8e95> <8e95> 1337 -<8e96> <8e96> 10053 -<8e97> <8e98> 1338 -<8e99> <8e9d> 10054 -<8ea1> <8ea1> 1340 -<8ea2> <8ea8> 10059 -<8ea9> <8ea9> 1341 -<8eaa> <8eb1> 10066 -<8eb3> <8eb5> 10074 -<8eb6> <8eb7> 1342 -<8eb8> <8ebd> 10077 -<8ec1> <8ec2> 1344 -<8ec3> <8ec4> 10083 -<8ec5> <8ec5> 1346 -<8ec6> <8ec8> 10085 -<8ec9> <8ec9> 1347 -<8eca> <8ed0> 10088 -<8ed1> <8ed1> 1348 -<8ed3> <8ed3> 1349 -<8ed4> <8ed5> 10095 -<8ed6> <8ed6> 1350 -<8ed7> <8edd> 10097 -<8ee1> <8ee1> 1351 -<8ee2> <8ee4> 10104 -<8ee5> <8ee5> 1352 -<8ee6> <8ee8> 10107 -<8ee9> <8ee9> 1353 -<8eea> <8ef0> 10110 -<8ef1> <8ef1> 1354 -<8ef3> <8ef3> 1355 -<8ef4> <8efd> 10117 -<8f41> <8f41> 1356 -<8f42> <8f51> 10127 -<8f53> <8f5d> 10143 -<8f61> <8f62> 1357 -<8f63> <8f64> 10154 -<8f65> <8f65> 1359 -<8f66> <8f66> 10156 -<8f67> <8f67> 1360 -<8f68> <8f68> 10157 -<8f69> <8f69> 1361 -<8f6a> <8f6a> 10158 -<8f6b> <8f6b> 1362 -<8f6c> <8f6f> 10159 -<8f70> <8f71> 1363 -<8f73> <8f73> 1365 -<8f74> <8f74> 10163 -<8f75> <8f75> 1366 -<8f76> <8f76> 10164 -<8f77> <8f77> 1367 -<8f78> <8f7a> 10165 -endcidrange - -100 begincidrange -<8f7b> <8f7b> 1368 -<8f7c> <8f7d> 10168 -<8f81> <8f91> 10170 -<8f93> <8f9d> 10187 -<8fa1> <8fa2> 1369 -<8fa3> <8fa4> 10198 -<8fa5> <8fa5> 1371 -<8fa6> <8fa8> 10200 -<8fa9> <8fa9> 1372 -<8faa> <8fb0> 10203 -<8fb1> <8fb1> 1373 -<8fb3> <8fb3> 1374 -<8fb4> <8fb4> 10210 -<8fb5> <8fb5> 1375 -<8fb6> <8fb6> 10211 -<8fb7> <8fb7> 1376 -<8fb8> <8fbd> 10212 -<9061> <9063> 1377 -<9064> <9064> 10218 -<9065> <9065> 1380 -<9066> <9067> 10219 -<9068> <906b> 1381 -<906c> <9070> 10221 -<9071> <9071> 1385 -<9073> <9073> 1386 -<9074> <9074> 10226 -<9075> <9079> 1387 -<907a> <907a> 10227 -<907b> <907b> 1392 -<907c> <907c> 10228 -<907d> <907d> 1393 -<9081> <9082> 1394 -<9083> <9084> 10229 -<9085> <9085> 1396 -<9086> <9088> 10231 -<9089> <9089> 1397 -<908a> <9090> 10234 -<9091> <9091> 1398 -<9093> <9093> 1399 -<9094> <9094> 10241 -<9095> <9097> 1400 -<9098> <909d> 10242 -<90a1> <90a2> 1403 -<90a3> <90a4> 10248 -<90a5> <90a5> 1405 -<90a6> <90a8> 10250 -<90a9> <90a9> 1406 -<90aa> <90b0> 10253 -<90b1> <90b1> 1407 -<90b3> <90b6> 10260 -<90b7> <90b7> 1408 -<90b8> <90bd> 10264 -<90c1> <90d1> 10270 -<90d3> <90dd> 10287 -<90e1> <90e2> 1409 -<90e3> <90e3> 10298 -<90e4> <90e5> 1411 -<90e6> <90e8> 10299 -<90e9> <90e9> 1413 -<90ea> <90ea> 10302 -<90eb> <90ec> 1414 -<90ed> <90f0> 10303 -<90f1> <90f1> 1416 -<90f3> <90f3> 1417 -<90f4> <90f4> 10307 -<90f5> <90f7> 1418 -<90f8> <90fc> 10308 -<90fd> <90fd> 1421 -<9141> <9142> 1422 -<9143> <9144> 10313 -<9145> <9145> 1424 -<9146> <9148> 10315 -<9149> <9149> 1425 -<914a> <9150> 10318 -<9151> <9151> 1426 -<9153> <9153> 1427 -<9154> <9154> 10325 -<9155> <9157> 1428 -<9158> <915d> 10326 -<9161> <9162> 1431 -<9163> <9164> 10332 -<9165> <9165> 1433 -<9166> <9168> 10334 -<9169> <9169> 1434 -<916a> <9170> 10337 -<9171> <9171> 1435 -<9173> <9173> 1436 -<9174> <9175> 10344 -<9176> <9177> 1437 -<9178> <9179> 10346 -<917a> <917a> 1439 -<917b> <917d> 10348 -<9181> <9181> 1440 -<9182> <9184> 10351 -<9185> <9185> 1441 -<9186> <9191> 10354 -<9193> <919d> 10366 -<91a1> <91a2> 1442 -<91a3> <91a4> 10377 -<91a5> <91a5> 1444 -endcidrange - -100 begincidrange -<91a6> <91a8> 10379 -<91a9> <91a9> 1445 -<91aa> <91aa> 10382 -<91ab> <91ab> 1446 -<91ac> <91b0> 10383 -<91b1> <91b1> 1447 -<91b3> <91b3> 1448 -<91b4> <91b4> 10388 -<91b5> <91b5> 1449 -<91b6> <91b6> 10389 -<91b7> <91b7> 1450 -<91b8> <91bb> 10390 -<91bc> <91bd> 1451 -<91c1> <91c1> 1453 -<91c2> <91c4> 10394 -<91c5> <91c5> 1454 -<91c6> <91c8> 10397 -<91c9> <91c9> 1455 -<91ca> <91d1> 10400 -<91d3> <91d5> 10408 -<91d6> <91d6> 1456 -<91d7> <91dd> 10411 -<91e1> <91f1> 10418 -<91f3> <91fd> 10435 -<9241> <9241> 1457 -<9242> <9244> 10446 -<9245> <9245> 1458 -<9246> <9248> 10449 -<9249> <9249> 1459 -<924a> <9250> 10452 -<9251> <9251> 1460 -<9253> <9253> 1461 -<9254> <9254> 10459 -<9255> <9255> 1462 -<9256> <925d> 10460 -<9261> <9262> 1463 -<9263> <9264> 10468 -<9265> <9265> 1465 -<9266> <9268> 10470 -<9269> <9269> 1466 -<926a> <9271> 10473 -<9273> <9273> 1467 -<9274> <9274> 10481 -<9275> <9275> 1468 -<9276> <9276> 10482 -<9277> <9277> 1469 -<9278> <927d> 10483 -<9281> <9282> 1470 -<9283> <9284> 10489 -<9285> <9285> 1472 -<9286> <9287> 10491 -<9288> <9289> 1473 -<928a> <9290> 10493 -<9291> <9291> 1475 -<9293> <9293> 1476 -<9294> <9294> 10500 -<9295> <9295> 1477 -<9296> <9296> 10501 -<9297> <9297> 1478 -<9298> <929d> 10502 -<92a1> <92a1> 1479 -<92a2> <92b1> 10508 -<92b3> <92b5> 10524 -<92b6> <92b6> 1480 -<92b7> <92bd> 10527 -<92c1> <92c1> 1481 -<92c2> <92d1> 10534 -<92d3> <92dd> 10550 -<92e1> <92e1> 1482 -<92e2> <92e4> 10561 -<92e5> <92e5> 1483 -<92e6> <92e8> 10564 -<92e9> <92e9> 1484 -<92ea> <92f0> 10567 -<92f1> <92f1> 1485 -<92f3> <92f3> 1486 -<92f4> <92fd> 10574 -<9341> <9342> 1487 -<9343> <9348> 10584 -<9349> <9349> 1489 -<934a> <9350> 10590 -<9351> <9351> 1490 -<9353> <9353> 1491 -<9354> <9356> 10597 -<9357> <9357> 1492 -<9358> <935d> 10600 -<9361> <9362> 1493 -<9363> <9364> 10606 -<9365> <9365> 1495 -<9366> <9368> 10608 -<9369> <936b> 1496 -<936c> <9370> 10611 -<9371> <9371> 1499 -<9373> <9373> 1500 -<9374> <9374> 10616 -<9375> <9375> 1501 -<9376> <9376> 10617 -<9377> <9378> 1502 -<9379> <937b> 10618 -<937c> <937c> 1504 -endcidrange - -100 begincidrange -<937d> <937d> 10621 -<9381> <9381> 1505 -<9382> <9384> 10622 -<9385> <9385> 1506 -<9386> <9388> 10625 -<9389> <9389> 1507 -<938a> <9391> 10628 -<9393> <939d> 10636 -<93a1> <93a2> 1508 -<93a3> <93a4> 10647 -<93a5> <93a5> 1510 -<93a6> <93a8> 10649 -<93a9> <93a9> 1511 -<93aa> <93aa> 10652 -<93ab> <93ab> 1512 -<93ac> <93b0> 10653 -<93b1> <93b1> 1513 -<93b3> <93b3> 1514 -<93b4> <93b4> 10658 -<93b5> <93b5> 1515 -<93b6> <93b6> 10659 -<93b7> <93b7> 1516 -<93b8> <93bb> 10660 -<93bc> <93bc> 1517 -<93bd> <93bd> 10664 -<9461> <9463> 1518 -<9464> <9464> 10665 -<9465> <9465> 1521 -<9466> <9467> 10666 -<9468> <946c> 1522 -<946d> <946f> 10668 -<9470> <9471> 1527 -<9473> <9473> 1529 -<9474> <9474> 10671 -<9475> <9479> 1530 -<947a> <947c> 10672 -<947d> <947d> 1535 -<9481> <9482> 1536 -<9483> <9484> 10675 -<9485> <9485> 1538 -<9486> <9488> 10677 -<9489> <9489> 1539 -<948a> <9490> 10680 -<9491> <9491> 1540 -<9493> <9493> 1541 -<9494> <9494> 10687 -<9495> <9497> 1542 -<9498> <949d> 10688 -<94a1> <94a1> 1545 -<94a2> <94b1> 10694 -<94b3> <94bd> 10710 -<94c1> <94d1> 10721 -<94d3> <94dd> 10738 -<94e1> <94e3> 1546 -<94e4> <94e4> 10749 -<94e5> <94e5> 1549 -<94e6> <94e7> 10750 -<94e8> <94e9> 1550 -<94ea> <94ea> 10752 -<94eb> <94ec> 1552 -<94ed> <94f0> 10753 -<94f1> <94f1> 1554 -<94f3> <94f3> 1555 -<94f4> <94f4> 10757 -<94f5> <94f5> 1556 -<94f6> <94f6> 10758 -<94f7> <94f7> 1557 -<94f8> <94f8> 10759 -<94f9> <94f9> 1558 -<94fa> <94fb> 10760 -<94fc> <94fc> 1559 -<94fd> <94fd> 10762 -<9541> <9542> 1560 -<9543> <9544> 10763 -<9545> <9545> 1562 -<9546> <9548> 10765 -<9549> <9549> 1563 -<954a> <9550> 10768 -<9551> <9551> 1564 -<9553> <9553> 1565 -<9554> <9554> 10775 -<9555> <9557> 1566 -<9558> <955d> 10776 -<9561> <9561> 1569 -<9562> <9564> 10782 -<9565> <9565> 1570 -<9566> <9568> 10785 -<9569> <9569> 1571 -<956a> <9571> 10788 -<9573> <9575> 10796 -<9576> <9577> 1572 -<9578> <957d> 10799 -<9581> <9581> 1574 -<9582> <9584> 10805 -<9585> <9585> 1575 -<9586> <9591> 10808 -<9593> <959d> 10820 -<95a1> <95a2> 1576 -<95a3> <95a4> 10831 -<95a5> <95a5> 1578 -endcidrange - -100 begincidrange -<95a6> <95a7> 10833 -<95a8> <95a9> 1579 -<95aa> <95aa> 10835 -<95ab> <95ab> 1581 -<95ac> <95ac> 10836 -<95ad> <95ad> 1582 -<95ae> <95b0> 10837 -<95b1> <95b1> 1583 -<95b3> <95b3> 1584 -<95b4> <95b4> 10840 -<95b5> <95b5> 1585 -<95b6> <95b6> 10841 -<95b7> <95b7> 1586 -<95b8> <95b8> 10842 -<95b9> <95b9> 1587 -<95ba> <95ba> 10843 -<95bb> <95bb> 1588 -<95bc> <95bd> 10844 -<95c1> <95c1> 1589 -<95c2> <95c4> 10846 -<95c5> <95c5> 1590 -<95c6> <95c8> 10849 -<95c9> <95c9> 1591 -<95ca> <95d1> 10852 -<95d3> <95dd> 10860 -<95e1> <95e1> 1592 -<95e2> <95f1> 10871 -<95f3> <95f5> 10887 -<95f6> <95f6> 1593 -<95f7> <95fd> 10890 -<9641> <9641> 1594 -<9642> <9644> 10897 -<9645> <9645> 1595 -<9646> <9648> 10900 -<9649> <9649> 1596 -<964a> <9650> 10903 -<9651> <9651> 1597 -<9653> <9653> 1598 -<9654> <9654> 10910 -<9655> <9655> 1599 -<9656> <965d> 10911 -<9661> <9661> 1600 -<9662> <9671> 10919 -<9673> <967d> 10935 -<9681> <9682> 1601 -<9683> <9684> 10946 -<9685> <9685> 1603 -<9686> <9688> 10948 -<9689> <9689> 1604 -<968a> <9690> 10951 -<9691> <9691> 1605 -<9693> <9693> 1606 -<9694> <9694> 10958 -<9695> <9695> 1607 -<9696> <9696> 10959 -<9697> <9697> 1608 -<9698> <969d> 10960 -<96a1> <96a1> 1609 -<96a2> <96b1> 10966 -<96b3> <96b5> 10982 -<96b6> <96b6> 1610 -<96b7> <96bd> 10985 -<96c1> <96c1> 1611 -<96c2> <96d1> 10992 -<96d3> <96d6> 11008 -<96d7> <96d7> 1612 -<96d8> <96dd> 11012 -<96e1> <96e1> 1613 -<96e2> <96e4> 11018 -<96e5> <96e5> 1614 -<96e6> <96e8> 11021 -<96e9> <96e9> 1615 -<96ea> <96f1> 11024 -<96f3> <96f3> 1616 -<96f4> <96f4> 11032 -<96f5> <96f5> 1617 -<96f6> <96f6> 11033 -<96f7> <96f7> 1618 -<96f8> <96fd> 11034 -<9741> <9741> 1619 -<9742> <9744> 11040 -<9745> <9745> 1620 -<9746> <9748> 11043 -<9749> <9749> 1621 -<974a> <9750> 11046 -<9751> <9751> 1622 -<9753> <9756> 11053 -<9757> <9757> 1623 -<9758> <975d> 11057 -<9761> <9762> 1624 -<9763> <9764> 11063 -<9765> <9765> 1626 -<9766> <9767> 11065 -<9768> <9769> 1627 -<976a> <976a> 11067 -<976b> <976b> 1629 -<976c> <9770> 11068 -<9771> <9771> 1630 -<9773> <9773> 1631 -<9774> <9774> 11073 -endcidrange - -100 begincidrange -<9775> <9775> 1632 -<9776> <9776> 11074 -<9777> <9777> 1633 -<9778> <977d> 11075 -<9781> <9781> 1634 -<9782> <9791> 11081 -<9793> <979d> 11097 -<97a1> <97a2> 1635 -<97a3> <97a4> 11108 -<97a5> <97a5> 1637 -<97a6> <97a7> 11110 -<97a8> <97a9> 1638 -<97aa> <97b0> 11112 -<97b1> <97b1> 1640 -<97b3> <97b3> 1641 -<97b4> <97b4> 11119 -<97b5> <97b8> 1642 -<97b9> <97bd> 11120 -<9861> <9862> 1646 -<9863> <9864> 11125 -<9865> <9865> 1648 -<9866> <9868> 11127 -<9869> <9869> 1649 -<986a> <9870> 11130 -<9871> <9871> 1650 -<9873> <9873> 1651 -<9874> <9874> 11137 -<9875> <9877> 1652 -<9878> <987c> 11138 -<987d> <987d> 1655 -<9881> <9882> 1656 -<9883> <9884> 11143 -<9885> <9885> 1658 -<9886> <9888> 11145 -<9889> <9889> 1659 -<988a> <9890> 11148 -<9891> <9891> 1660 -<9893> <9893> 1661 -<9894> <9894> 11155 -<9895> <9897> 1662 -<9898> <989d> 11156 -<98a1> <98b1> 11162 -<98b3> <98bd> 11179 -<98c1> <98d1> 11190 -<98d3> <98dd> 11207 -<98e1> <98e2> 1665 -<98e3> <98e4> 11218 -<98e5> <98e5> 1667 -<98e6> <98e8> 11220 -<98e9> <98e9> 1668 -<98ea> <98ea> 11223 -<98eb> <98ec> 1669 -<98ed> <98f0> 11224 -<98f1> <98f1> 1671 -<98f3> <98f3> 1672 -<98f4> <98f4> 11228 -<98f5> <98f7> 1673 -<98f8> <98fc> 11229 -<98fd> <98fd> 1676 -<9941> <9942> 1677 -<9943> <9944> 11234 -<9945> <9945> 1679 -<9946> <9948> 11236 -<9949> <9949> 1680 -<994a> <9950> 11239 -<9951> <9951> 1681 -<9953> <9953> 1682 -<9954> <9954> 11246 -<9955> <9957> 1683 -<9958> <995d> 11247 -<9961> <9961> 1686 -<9962> <9971> 11253 -<9973> <9975> 11269 -<9976> <9976> 1687 -<9977> <997d> 11272 -<9981> <9991> 11279 -<9993> <999d> 11296 -<99a1> <99a2> 1688 -<99a3> <99a4> 11307 -<99a5> <99a5> 1690 -<99a6> <99a8> 11309 -<99a9> <99a9> 1691 -<99aa> <99b1> 11312 -<99b3> <99b6> 11320 -<99b7> <99b7> 1692 -<99b8> <99bd> 11324 -<99c1> <99c1> 1693 -<99c2> <99c8> 11330 -<99c9> <99c9> 1694 -<99ca> <99d1> 11337 -<99d3> <99dd> 11345 -<99e1> <99e1> 1695 -<99e2> <99f1> 11356 -<99f3> <99fd> 11372 -<9a41> <9a41> 1696 -<9a42> <9a44> 11383 -<9a45> <9a45> 1697 -<9a46> <9a51> 11386 -<9a53> <9a5d> 11398 -<9a61> <9a71> 11409 -endcidrange - -100 begincidrange -<9a73> <9a7d> 11426 -<9a81> <9a82> 1698 -<9a83> <9a84> 11437 -<9a85> <9a85> 1700 -<9a86> <9a88> 11439 -<9a89> <9a89> 1701 -<9a8a> <9a8f> 11442 -<9a90> <9a91> 1702 -<9a93> <9a96> 11448 -<9a97> <9a97> 1704 -<9a98> <9a9d> 11452 -<9aa1> <9ab1> 11458 -<9ab3> <9abd> 11475 -<9ac1> <9ac1> 1705 -<9ac2> <9ad1> 11486 -<9ad3> <9add> 11502 -<9ae1> <9ae1> 1706 -<9ae2> <9ae4> 11513 -<9ae5> <9ae5> 1707 -<9ae6> <9ae8> 11516 -<9ae9> <9ae9> 1708 -<9aea> <9af0> 11519 -<9af1> <9af1> 1709 -<9af3> <9af3> 1710 -<9af4> <9af6> 11526 -<9af7> <9af7> 1711 -<9af8> <9afd> 11529 -<9b41> <9b51> 11535 -<9b53> <9b5d> 11552 -<9b61> <9b62> 1712 -<9b63> <9b64> 11563 -<9b65> <9b65> 1714 -<9b66> <9b67> 11565 -<9b68> <9b69> 1715 -<9b6a> <9b70> 11567 -<9b71> <9b71> 1717 -<9b73> <9b73> 1718 -<9b74> <9b74> 11574 -<9b75> <9b75> 1719 -<9b76> <9b7d> 11575 -<9b81> <9b81> 1720 -<9b82> <9b84> 11583 -<9b85> <9b85> 1721 -<9b86> <9b88> 11586 -<9b89> <9b89> 1722 -<9b8a> <9b90> 11589 -<9b91> <9b91> 1723 -<9b93> <9b93> 1724 -<9b94> <9b9d> 11596 -<9ba1> <9ba1> 1725 -<9ba2> <9ba4> 11606 -<9ba5> <9ba5> 1726 -<9ba6> <9ba8> 11609 -<9ba9> <9ba9> 1727 -<9baa> <9bb0> 11612 -<9bb1> <9bb1> 1728 -<9bb3> <9bb3> 1729 -<9bb4> <9bb4> 11619 -<9bb5> <9bb5> 1730 -<9bb6> <9bb6> 11620 -<9bb7> <9bb7> 1731 -<9bb8> <9bbd> 11621 -<9c61> <9c62> 1732 -<9c63> <9c64> 11627 -<9c65> <9c65> 1734 -<9c66> <9c68> 11629 -<9c69> <9c69> 1735 -<9c6a> <9c70> 11632 -<9c71> <9c71> 1736 -<9c73> <9c73> 1737 -<9c74> <9c74> 11639 -<9c75> <9c78> 1738 -<9c79> <9c7b> 11640 -<9c7c> <9c7d> 1742 -<9c81> <9c82> 1744 -<9c83> <9c84> 11643 -<9c85> <9c85> 1746 -<9c86> <9c88> 11645 -<9c89> <9c89> 1747 -<9c8a> <9c90> 11648 -<9c91> <9c91> 1748 -<9c93> <9c93> 1749 -<9c94> <9c94> 11655 -<9c95> <9c97> 1750 -<9c98> <9c9d> 11656 -<9ca1> <9ca2> 1753 -<9ca3> <9ca4> 11662 -<9ca5> <9ca5> 1755 -<9ca6> <9cb1> 11664 -<9cb3> <9cb4> 11676 -<9cb5> <9cb5> 1756 -<9cb6> <9cb6> 11678 -<9cb7> <9cb7> 1757 -<9cb8> <9cbd> 11679 -<9cc1> <9cd1> 11685 -<9cd3> <9cdd> 11702 -<9ce1> <9ce2> 1758 -<9ce3> <9ce4> 11713 -<9ce5> <9ce5> 1760 -<9ce6> <9ce8> 11715 -endcidrange - -100 begincidrange -<9ce9> <9ce9> 1761 -<9cea> <9cf0> 11718 -<9cf1> <9cf1> 1762 -<9cf3> <9cf3> 1763 -<9cf4> <9cf4> 11725 -<9cf5> <9cf7> 1764 -<9cf8> <9cfc> 11726 -<9cfd> <9cfd> 1767 -<9d41> <9d42> 1768 -<9d43> <9d44> 11731 -<9d45> <9d45> 1770 -<9d46> <9d48> 11733 -<9d49> <9d49> 1771 -<9d4a> <9d50> 11736 -<9d51> <9d51> 1772 -<9d53> <9d53> 1773 -<9d54> <9d54> 11743 -<9d55> <9d55> 1774 -<9d56> <9d56> 11744 -<9d57> <9d57> 1775 -<9d58> <9d5d> 11745 -<9d61> <9d62> 1776 -<9d63> <9d64> 11751 -<9d65> <9d65> 1778 -<9d66> <9d68> 11753 -<9d69> <9d69> 1779 -<9d6a> <9d70> 11756 -<9d71> <9d71> 1780 -<9d73> <9d73> 1781 -<9d74> <9d74> 11763 -<9d75> <9d77> 1782 -<9d78> <9d7d> 11764 -<9d81> <9d81> 1785 -<9d82> <9d84> 11770 -<9d85> <9d85> 1786 -<9d86> <9d91> 11773 -<9d93> <9d93> 1787 -<9d94> <9d94> 11785 -<9d95> <9d95> 1788 -<9d96> <9d9d> 11786 -<9da1> <9da2> 1789 -<9da3> <9da4> 11794 -<9da5> <9da5> 1791 -<9da6> <9da8> 11796 -<9da9> <9da9> 1792 -<9daa> <9db0> 11799 -<9db1> <9db1> 1793 -<9db3> <9db3> 1794 -<9db4> <9db4> 11806 -<9db5> <9db5> 1795 -<9db6> <9db6> 11807 -<9db7> <9db7> 1796 -<9db8> <9dbd> 11808 -<9dc1> <9dc1> 1797 -<9dc2> <9dc4> 11814 -<9dc5> <9dc5> 1798 -<9dc6> <9dd1> 11817 -<9dd3> <9dd6> 11829 -<9dd7> <9dd7> 1799 -<9dd8> <9ddd> 11833 -<9de1> <9df1> 11839 -<9df3> <9df5> 11856 -<9df6> <9df6> 1800 -<9df7> <9dfd> 11859 -<9e41> <9e41> 1801 -<9e42> <9e44> 11866 -<9e45> <9e45> 1802 -<9e46> <9e48> 11869 -<9e49> <9e49> 1803 -<9e4a> <9e50> 11872 -<9e51> <9e51> 1804 -<9e53> <9e53> 1805 -<9e54> <9e54> 11879 -<9e55> <9e55> 1806 -<9e56> <9e56> 11880 -<9e57> <9e57> 1807 -<9e58> <9e5d> 11881 -<9e61> <9e61> 1808 -<9e62> <9e64> 11887 -<9e65> <9e65> 1809 -<9e66> <9e68> 11890 -<9e69> <9e69> 1810 -<9e6a> <9e71> 11893 -<9e73> <9e73> 1811 -<9e74> <9e74> 11901 -<9e75> <9e75> 1812 -<9e76> <9e76> 11902 -<9e77> <9e77> 1813 -<9e78> <9e7d> 11903 -<9e81> <9e82> 1814 -<9e83> <9e84> 11909 -<9e85> <9e85> 1816 -<9e86> <9e88> 11911 -<9e89> <9e89> 1817 -<9e8a> <9e90> 11914 -<9e91> <9e91> 1818 -<9e93> <9e93> 1819 -<9e94> <9e94> 11921 -<9e95> <9e95> 1820 -<9e96> <9e96> 11922 -endcidrange - -100 begincidrange -<9e97> <9e97> 1821 -<9e98> <9e9d> 11923 -<9ea1> <9ea1> 1822 -<9ea2> <9eb1> 11929 -<9eb3> <9eb5> 11945 -<9eb6> <9eb6> 1823 -<9eb7> <9ebd> 11948 -<9ec1> <9ec1> 1824 -<9ec2> <9ed1> 11955 -<9ed3> <9edd> 11971 -<9ee1> <9ee2> 1825 -<9ee3> <9ee4> 11982 -<9ee5> <9ee5> 1827 -<9ee6> <9ee8> 11984 -<9ee9> <9ee9> 1828 -<9eea> <9ef0> 11987 -<9ef1> <9ef1> 1829 -<9ef3> <9ef4> 11994 -<9ef5> <9ef5> 1830 -<9ef6> <9ef6> 11996 -<9ef7> <9ef7> 1831 -<9ef8> <9efd> 11997 -<9f41> <9f42> 1832 -<9f43> <9f44> 12003 -<9f45> <9f45> 1834 -<9f46> <9f48> 12005 -<9f49> <9f49> 1835 -<9f4a> <9f50> 12008 -<9f51> <9f51> 1836 -<9f53> <9f53> 1837 -<9f54> <9f54> 12015 -<9f55> <9f55> 1838 -<9f56> <9f56> 12016 -<9f57> <9f57> 1839 -<9f58> <9f5d> 12017 -<9f61> <9f62> 1840 -<9f63> <9f64> 12023 -<9f65> <9f65> 1842 -<9f66> <9f68> 12025 -<9f69> <9f69> 1843 -<9f6a> <9f70> 12028 -<9f71> <9f71> 1844 -<9f73> <9f73> 1845 -<9f74> <9f74> 12035 -<9f75> <9f75> 1846 -<9f76> <9f76> 12036 -<9f77> <9f78> 1847 -<9f79> <9f7a> 12037 -<9f7b> <9f7c> 1849 -<9f7d> <9f7d> 12039 -<9f81> <9f91> 12040 -<9f93> <9f9d> 12057 -<9fa1> <9fa2> 1851 -<9fa3> <9fa4> 12068 -<9fa5> <9fa5> 1853 -<9fa6> <9fa8> 12070 -<9fa9> <9fa9> 1854 -<9faa> <9fb0> 12073 -<9fb1> <9fb1> 1855 -<9fb3> <9fb3> 1856 -<9fb4> <9fb4> 12080 -<9fb5> <9fb5> 1857 -<9fb6> <9fb6> 12081 -<9fb7> <9fb7> 1858 -<9fb8> <9fbd> 12082 - 1859 - 12088 - 1861 - 12090 - 1862 - 12091 - 1867 - 1868 - 12096 - 1869 - 12097 - 1870 - 12098 - 1872 - 12100 - 1873 - 1874 - 12101 - 1876 - 12103 - 1877 - 12106 - 1878 - 1879 - 12113 - 1880 - 12114 - 1884 - 12119 - 1886 - 12125 - 12133 - 1887 - 12137 - 12143 -endcidrange - -100 begincidrange - 12160 - 1888 - 12171 - 1890 - 12173 - 1891 - 12176 - 1892 - 12177 - 1893 - 1894 - 12182 - 1895 - 12183 - 1896 - 12184 - 1898 - 1899 - 12188 - 1901 - 12190 - 1902 - 12193 - 1903 - 1904 - 12200 - 1905 - 12201 - 1908 - 12207 - 1910 - 12209 - 1911 - 12212 - 12220 - 1912 - 12222 - 1915 - 12223 - 1916 - 12227 - 12243 - 1917 - 12254 - 1919 - 12255 - 1921 - 12258 - 1922 - 12259 - 1923 - 1924 - 12264 - 1925 - 12265 - 1926 - 12266 - 1927 - 12272 - 1928 - 12275 - 12287 - 1929 - 12290 - 12296 - 12313 - 1931 - 12324 - 1932 - 12327 - 1933 - 12330 - 1934 - 12338 - 1935 - 12339 - 1936 - 12340 - 1937 - 12346 - 1938 - 12349 - 1939 - 12352 - 1940 - 12360 - 1941 - 12361 - 1942 - 12369 - 1945 - 12370 - 1946 - 12372 - 1950 - 1951 - 12377 - 1952 - 12378 - 1953 -endcidrange - -100 begincidrange - 12379 - 1954 - 12382 - 1955 - 1956 - 12383 - 1957 - 12386 - 1958 - 12389 - 1959 - 12397 - 1960 - 12398 - 1961 - 12406 - 12422 - 1962 - 12433 - 1963 - 12436 - 1964 - 12439 - 12447 - 1965 - 12458 - 1966 - 12461 - 1967 - 12464 - 1968 - 12471 - 1969 - 12473 - 1970 - 12481 - 1971 - 12484 - 1972 - 12487 - 1973 - 12494 - 1974 - 12496 - 12504 - 12521 - 1975 - 12532 - 1977 - 12534 - 1978 - 12536 - 1980 - 12537 - 1981 - 1982 - 12542 - 1983 - 12543 - 1986 - 12544 - 1987 - 12545 - 1988 - 12547 - 1993 - 12549 - 1998 - 1999 - 12553 - 2000 - 12554 - 2001 - 12555 - 2002 - 12558 - 2003 - 12560 - 2005 - 12562 - 2006 - 12565 - 2007 - 2008 - 12572 - 2009 - 12573 - 2012 - 12576 - 2013 - 12578 - 2015 - 12580 - 2016 - 12592 - 12602 - 12619 - 2017 - 12630 - 2019 -endcidrange - -100 begincidrange - 12632 - 2020 - 12634 - 2022 - 12635 - 2023 - 2024 - 12640 - 2025 - 12641 - 2026 - 12642 - 2028 - 12647 - 2030 - 12649 - 2031 - 12651 - 2033 - 2034 - 12658 - 2035 - 12659 - 2038 - 12665 - 2040 - 12667 - 2041 - 12670 - 2042 - 12678 - 2043 - 12679 - 2046 - 12682 - 2047 - 12684 - 2048 - 12687 - 12699 - 2049 - 12710 - 2052 - 12711 - 2053 - 12714 - 2054 - 2055 - 12721 - 2056 - 12722 - 2057 - 12723 - 2058 - 12729 - 2059 - 12732 - 12744 - 2060 - 12747 - 2061 - 12754 - 12770 - 2062 - 12773 - 2063 - 12780 - 2065 - 12782 - 2066 - 12785 - 2067 - 2068 - 12792 - 2069 - 12802 - 2070 - 12805 - 12817 - 2071 - 12828 - 2073 - 12830 - 2074 - 12832 - 2078 - 2079 - 12837 - 2080 - 12838 - 2081 - 12839 - 2082 - 12842 - 2084 - 12843 - 2085 - 12850 - 12858 - 2086 -endcidrange - -100 begincidrange - 12861 - 2087 - 12868 - 12884 - 2088 - 12895 - 2090 - 12897 - 2091 - 12900 - 12908 - 2092 - 12912 - 2093 - 12918 - 2094 - 12921 - 2095 - 12924 - 2096 - 12931 - 2097 - 12933 - 2098 - 12934 - 2099 - 12940 - 2101 - 12942 - 2102 - 12945 - 2103 - 2104 - 12952 - 2105 - 12953 - 12961 - 12978 - 2106 - 12989 - 2108 - 12991 - 2109 - 12994 - 2110 - 12995 - 2111 - 2112 - 13000 - 2113 - 13001 - 2114 - 13002 - 2117 - 13006 - 2119 - 13008 - 2120 - 13011 - 2121 - 13012 - 2122 - 2123 - 13017 - 2124 - 13018 - 2127 - 2128 - 13023 - 2130 - 13025 - 2131 - 13028 - 2132 - 2133 - 13035 - 2134 - 13036 - 2137 - 13042 - 2139 - 13056 - 13067 - 13084 - 2140 - 13095 - 2142 - 13097 - 2143 - 13099 - 2145 - 13106 - 2146 - 13108 - 2149 - 13114 - 13130 - 2150 - 13134 - 2151 -endcidrange - -100 begincidrange - 13140 - 2153 - 2154 - 13154 - 2155 - 13155 - 13161 - 13178 - 2158 - 13189 - 2160 - 13191 - 2161 - 13194 - 2162 - 2163 - 13201 - 2164 - 13204 - 13210 - 13227 - 13238 - 13255 - 2165 - 13266 - 13282 - 2166 - 13293 - 13309 - 2167 - 13313 - 2168 - 13319 - 2170 - 13321 - 2171 - 13324 - 2172 - 13331 - 2173 - 13333 - 2174 - 13334 - 13340 - 13357 - 13368 - 13385 - 13396 - 13413 - 2175 - 13424 - 13440 - 2176 - 13444 - 2177 - 13450 - 2178 - 13453 - 2179 - 13456 - 2180 - 2181 - 13463 - 13473 - 13490 - 2182 - 13501 - 2184 - 13503 - 2185 - 13506 - 2186 - 2187 - 13513 - 2188 - 13514 - 2189 - 13515 - 2190 - 13521 - 2192 - 13522 - 2194 - 13524 - 2198 - 2199 - 13529 - 2200 - 13530 - 2203 - 13533 - 2204 - 13535 - 2206 - 13537 - 2207 - 13540 - 2208 - 2209 - 13547 -endcidrange - -100 begincidrange - 2210 - 13548 - 2213 - 13554 - 2215 - 13556 - 2216 - 13559 - 2217 - 2218 - 13566 - 2219 - 13567 - 2220 - 13568 - 2221 - 13574 - 2222 - 13577 - 2223 - 13580 - 2224 - 13587 - 2225 - 13591 - 2226 - 13597 - 2231 - 13599 - 2233 - 13600 - 2235 - 2236 - 13604 - 2237 - 13605 - 2240 - 13609 - 2241 - 13610 - 2243 - 13612 - 2244 - 13615 - 2245 - 2246 - 13622 - 2247 - 13623 - 2250 - 13629 - 2252 - 13631 - 2253 - 13634 - 2254 - 2255 - 13641 - 2256 - 13642 - 2259 - 13648 - 2260 - 13651 - 2261 - 13654 - 13662 - 2262 - 13666 - 2263 - 13672 - 2266 - 13673 - 2267 - 13676 - 2268 - 13677 - 2269 - 2270 - 13682 - 2271 - 13683 - 2272 - 13684 - 2273 - 13687 - 2274 - 13689 - 2276 - 13691 - 2277 - 13694 - 13702 - 2278 - 13706 - 2279 - 13712 - 2280 - 13715 - 2281 -endcidrange - -100 begincidrange - 13718 - 2282 - 13725 - 2283 - 13727 - 2285 - 13734 - 2286 - 13737 - 2287 - 13740 - 2288 - 2289 - 13747 - 2290 - 13748 - 2291 - 13756 - 2293 - 13758 - 2294 - 13761 - 2295 - 2296 - 13768 - 2297 - 13769 - 2298 - 13770 - 2299 - 13776 - 2301 - 13778 - 2302 - 13780 - 2304 - 2305 - 13787 - 2306 - 13788 - 2307 - 13789 - 2308 - 13790 - 2309 - 13791 - 2311 - 13792 - 13808 - 2312 - 13811 - 2313 - 13818 - 2315 - 13820 - 2316 - 13823 - 2317 - 13830 - 2318 - 13834 - 2319 - 13840 - 2321 - 13842 - 2322 - 13845 - 2323 - 2324 - 13852 - 2325 - 13853 - 2326 - 13854 - 2327 - 13860 - 2329 - 13866 - 2330 - 13873 - 2331 - 13875 - 2332 - 13876 - 2333 - 13882 - 2335 - 13884 - 2336 - 13887 - 2338 - 2339 - 13893 - 2340 - 13894 - 2341 - 13895 - 13901 - 13918 - 2342 -endcidrange - -100 begincidrange - 13929 - 2344 - 13931 - 2345 - 13933 - 2347 - 2349 - 13939 - 2350 - 13940 - 2351 - 13941 - 2352 - 13945 - 2353 - 13946 - 2355 - 13947 - 2357 - 13950 - 2358 - 2359 - 13957 - 2360 - 13959 - 2362 - 2363 - 13964 - 2365 - 13966 - 2366 - 13969 - 2367 - 2368 - 13976 - 2369 - 13978 - 13984 - 14001 - 2371 - 14005 - 14011 - 14028 - 2372 - 14039 - 2374 - 14041 - 2375 - 14044 - 2376 - 14045 - 2377 - 2378 - 14050 - 2379 - 14052 - 2381 - 14058 - 2382 - 14061 - 2383 - 14064 - 14072 - 14083 - 14100 - 14111 - 2384 - 14115 - 14127 - 2385 - 14138 - 2387 - 14140 - 2388 - 14142 - 2390 - 14143 - 2391 - 2392 - 14148 - 2393 - 14151 - 2394 - 14157 - 2396 - 14159 - 14171 - 2397 - 14174 - 2398 - 14181 - 14197 - 2399 - 14200 - 2400 - 14207 - 2401 - 14210 - 2402 - 14213 -endcidrange - -100 begincidrange - 2403 - 2404 - 14220 - 2405 - 14230 - 14246 - 2406 - 14257 - 2408 - 14259 - 2409 - 14262 - 2410 - 2411 - 14269 - 2412 - 14272 - 2413 - 14278 - 14294 - 2414 - 14297 - 2415 - 14304 - 14320 - 2416 - 14331 - 2417 - 14334 - 14346 - 14357 - 14374 - 2418 - 14378 - 2419 - 14384 - 2421 - 14386 - 2422 - 14389 - 2423 - 14390 - 2424 - 2426 - 14394 - 2427 - 14404 - 2428 - 14407 - 2429 - 14410 - 2430 - 14417 - 2431 - 14428 - 2433 - 14430 - 2434 - 14433 - 2435 - 2436 - 14440 - 2437 - 14441 - 2438 - 14442 - 2439 - 14448 - 2441 - 14450 - 2444 - 14451 - 2447 - 2449 - 14455 - 2450 - 14456 - 2453 - 14459 - 2455 - 14460 - 2457 - 14462 - 2458 - 14465 - 2459 - 2460 - 14472 - 2461 - 14473 - 2464 - 14479 - 2466 - 14481 - 2467 - 14484 - 2468 - 14486 - 2469 - 2470 -endcidrange - -100 begincidrange - 14490 - 2471 - 14491 - 2472 - 14492 - 2473 - 14495 - 2474 - 2475 - 14496 - 2476 - 14499 - 2477 - 14502 - 2478 - 14510 - 2479 - 14520 - 2481 - 14522 - 2483 - 14523 - 2487 - 2488 - 14528 - 2494 - 14529 - 2495 - 14530 - 2496 - 14531 - 2498 - 14533 - 2499 - 14536 - 2500 - 2501 - 14543 - 2502 - 14544 - 2503 - 14545 - 2504 - 14551 - 2507 - 14552 - 2508 - 14555 - 2509 - 14556 - 2511 - 2512 - 14560 - 2517 - 2520 - 14563 - 2521 - 14566 - 2522 - 14569 - 2523 - 2524 - 14576 - 2525 - 14577 - 2527 - 14584 - 2529 - 14586 - 2530 - 14589 - 2533 - 14590 - 2534 - 2536 - 14592 - 2537 - 14593 - 2538 - 14594 - 2539 - 14595 - 2540 - 14599 - 2542 - 14601 - 2543 - 14604 - 2544 - 2545 - 14611 - 2546 - 14612 - 2549 - 14618 - 2551 - 14620 - 2552 - 14631 - 2553 -endcidrange - -100 begincidrange - 14633 - 2554 - 14634 - 2555 - 14640 - 2557 - 14642 - 2558 - 14645 - 2559 - 2560 - 14652 - 2561 - 14653 - 2562 - 14654 - 2563 - 14660 - 2565 - 14662 - 2566 - 14665 - 2567 - 2568 - 14672 - 2569 - 14673 - 2570 - 14674 - 2571 - 14680 - 2573 - 14682 - 2574 - 14685 - 2577 - 2578 - 14690 - 2579 - 14691 - 2580 - 14692 - 2581 - 14698 - 2583 - 14700 - 2584 - 14703 - 2585 - 2586 - 14710 - 2587 - 14712 - 2589 - 14718 - 2591 - 14720 - 2592 - 14723 - 2593 - 2594 - 14730 - 2595 - 14733 - 2596 - 14739 - 2598 - 14741 - 2599 - 14744 - 2600 - 2601 - 14751 - 2602 - 14752 - 2603 - 14753 - 2604 - 14759 - 2606 - 14761 - 2607 - 14764 - 2608 - 2609 - 14771 - 2610 - 14772 - 2611 - 14773 - 2612 - 14774 - 2613 - 14778 - 2615 - 14780 - 2616 - 14783 - 2617 - 14788 -endcidrange - -100 begincidrange - 2618 - 2619 - 14789 - 2620 - 14790 - 2621 - 2628 - 14791 - 2629 - 14794 - 2630 - 14797 - 2631 - 14804 - 2632 - 14806 - 2633 - 14814 - 2635 - 14816 - 2636 - 14819 - 2639 - 2641 - 14823 - 2642 - 14824 - 2646 - 14827 - 2647 - 14828 - 2649 - 14830 - 2650 - 14831 - 2653 - 14832 - 2654 - 2655 - 14837 - 2656 - 14838 - 2660 - 14843 - 2662 - 14845 - 2663 - 14848 - 2664 - 2665 - 14855 - 2666 - 14856 - 2669 - 14862 - 2671 - 14864 - 2672 - 14865 - 2673 - 14866 - 2674 - 14873 - 2675 - 14877 - 2676 - 14883 - 2677 - 14886 - 2678 - 14889 - 14897 - 2679 - 14908 - 2681 - 14910 - 2682 - 14913 - 2683 - 14914 - 2684 - 2685 - 14919 - 2686 - 14920 - 2687 - 14921 - 2689 - 14926 - 2691 - 14928 - 2692 - 14931 - 2693 - 2694 - 14938 - 2695 - 14939 - 2696 - 14940 -endcidrange - -100 begincidrange - 2697 - 14946 - 2698 - 14949 - 2699 - 14952 - 2700 - 2701 - 14959 - 2702 - 14961 - 2704 - 14967 - 14983 - 2705 - 14994 - 2707 - 14996 - 2708 - 14999 - 2709 - 15000 - 2710 - 2711 - 15005 - 2712 - 15006 - 2713 - 15007 - 2716 - 2717 - 15010 - 2719 - 15016 - 2720 - 15024 - 2721 - 15025 - 2722 - 15026 - 2723 - 15032 - 15048 - 2724 - 15051 - 2726 - 15057 - 2727 - 15060 - 2728 - 15063 - 2729 - 2730 - 15070 - 2731 - 15071 - 2732 - 15072 - 2733 - 15078 - 2735 - 15080 - 15092 - 2736 - 15096 - 2737 - 15102 - 2739 - 15104 - 2740 - 15107 - 2743 - 2744 - 15112 - 2745 - 15113 - 2746 - 15114 - 2747 - 15120 - 15136 - 2748 - 15139 - 2749 - 15146 - 15162 - 2750 - 15173 - 2752 - 15175 - 2753 - 15178 - 2754 - 2755 - 15185 - 2756 - 15186 - 2757 - 15194 - 2758 -endcidrange - -100 begincidrange - 15197 - 2759 - 15200 - 2760 - 15207 - 2761 - 15218 - 2763 - 15220 - 2764 - 15223 - 2765 - 2766 - 15230 - 2767 - 15231 - 2768 - 15232 - 15238 - 15255 - 2769 - 15266 - 2771 - 15268 - 2772 - 15270 - 2774 - 15271 - 2775 - 2776 - 15276 - 2777 - 15277 - 2778 - 15278 - 2780 - 15280 - 2782 - 15281 - 2784 - 15283 - 2785 - 15284 - 2786 - 15285 - 2787 - 15287 - 2788 - 2789 - 15291 - 2790 - 15292 - 2793 - 15298 - 2795 - 15300 - 2796 - 15303 - 2797 - 2798 - 15310 - 2799 - 15311 - 2802 - 15317 - 2803 - 15320 - 15332 - 2804 - 15336 - 15342 - 15359 - 2805 - 15370 - 2807 - 15372 - 2808 - 15375 - 2809 - 2810 - 15382 - 2811 - 15383 - 2814 - 15389 - 15405 - 2815 - 15409 - 2816 - 15415 - 15431 - 2817 - 15434 - 15441 - 15458 - 2818 - 15469 - 2820 - 15471 - 2821 -endcidrange - -100 begincidrange - 15474 - 2822 - 2823 - 15481 - 2824 - 15482 - 2825 - 15483 - 2826 - 15484 - 2827 - 15488 - 2829 - 15494 - 15502 - 2830 - 15505 - 2831 - 15512 - 15528 - 2832 - 15531 - 2833 - 15538 - 2834 - 15541 - 2835 - 15544 - 2836 - 2837 - 15551 - 15561 - 15578 - 2838 - 15582 - 2839 - 15588 - 2841 - 15590 - 2842 - 15593 - 2843 - 2844 - 15600 - 2845 - 15603 - 2846 - 15609 - 15625 - 2847 - 15628 - 15634 - 15651 - 2849 - 15662 - 15678 - 2850 - 15689 - 15705 - 2851 - 15716 - 2852 - 15731 - 2853 - 15733 - 2854 - 15734 - 15740 - 15757 - 2855 - 15768 - 2857 - 15770 - 2858 - 15773 - 2859 - 2860 - 15780 - 2861 - 15783 - 2863 - 2864 - 15787 - 2866 - 15789 - 2867 - 15790 - 2868 - 15791 - 2869 - 2870 - 15798 - 2871 - 15799 - 2875 - 15804 - 2877 - 15806 - 2878 - 15809 -endcidrange - -100 begincidrange - 2879 - 2880 - 15816 - 2881 - 15817 - 2884 - 15823 - 2885 - 15826 - 2886 - 15827 - 2887 - 15828 - 2888 - 15835 - 2889 - 15839 - 15845 - 15862 - 2890 - 15873 - 2892 - 15875 - 2893 - 15878 - 2894 - 2895 - 15885 - 2896 - 15886 - 2899 - 15892 - 2901 - 15894 - 2902 - 15897 - 2903 - 2904 - 15904 - 2905 - 15905 - 2906 - 15906 - 2907 - 15912 - 2908 - 15915 - 15927 - 2909 - 15930 - 2910 - 15937 - 2911 - 15940 - 15952 - 2912 - 15956 - 2913 - 15962 - 2915 - 15964 - 2916 - 15967 - 2917 - 2918 - 15974 - 2919 - 15975 - 2920 - 15976 - 2921 - 15982 - 2922 - 15985 - 2923 - 15988 - 15996 - 2924 - 16000 - 16006 - 16023 - 2925 - 16034 - 2926 - 16037 - 2927 - 16040 - 2928 - 2929 - 16047 - 2930 - 16048 - 2931 - 16049 - 2932 - 16055 - 2933 - 16070 - 2934 - 16081 -endcidrange - -100 begincidrange - 2936 - 16083 - 2937 - 16086 - 2938 - 2939 - 16093 - 2940 - 16094 - 2941 - 16095 - 2942 - 16101 - 16117 - 2943 - 16120 - 2944 - 16127 - 2945 - 16130 - 16142 - 2946 - 16153 - 2947 - 16156 - 2948 - 16159 - 2949 - 2950 - 16166 - 2951 - 16167 - 2952 - 16168 - 2953 - 16174 - 2954 - 16177 - 2955 - 16180 - 2956 - 16187 - 2957 - 16191 - 2958 - 16197 - 2960 - 16199 - 2961 - 16202 - 2962 - 2963 - 16209 - 2964 - 16210 - 2965 - 16211 - 16217 - 16234 - 2966 - 16245 - 2968 - 16247 - 2969 - 16249 - 2972 - 2973 - 16255 - 2974 - 16256 - 2975 - 16257 - 2976 - 16263 - 2978 - 16265 - 2979 - 16268 - 2980 - 2981 - 16275 - 2982 - 16276 - 2983 - 16277 - 2984 - 16283 - 2986 - 16285 - 2987 - 16288 - 2988 - 2989 - 16295 - 2990 - 16296 - 2993 - 16302 - 16317 - 2995 -endcidrange - -100 begincidrange - 16321 - 16327 - 16344 - 2996 - 16355 - 2998 - 16357 - 2999 - 16359 - 3001 - 3002 - 16366 - 3003 - 16367 - 3006 - 16373 - 3008 - 16375 - 3009 - 16378 - 3010 - 3011 - 16385 - 3012 - 16386 - 3013 - 16387 - 3014 - 16393 - 3015 - 16396 - 3016 - 16399 - 3017 - 3018 - 16406 - 3019 - 16407 - 3022 - 16413 - 16429 - 3023 - 16440 - 3025 - 16442 - 3026 - 16445 - 3027 - 3028 - 16452 - 3029 - 16453 - 3030 - 16454 - 3031 - 16460 - 3033 - 16462 - 3034 - 16465 - 3035 - 16472 - 3036 - 16476 - 3037 - 16482 - 16498 - 3038 - 16502 - 3039 - 16508 - 3040 - 16515 - 16523 - 3041 - 16534 - 16550 - 3042 - 16561 - 3044 - 16563 - 3045 - 16566 - 3046 - 3047 - 16573 - 3048 - 16574 - 3049 - 16575 - 3050 - 16581 - 3051 - 16584 - 3052 - 16587 - 16595 - 3053 - 16599 - 3054 -endcidrange - -100 begincidrange - 16605 - 16621 - 3055 - 16625 - 3056 - 16631 - 3058 - 16633 - 3059 - 16636 - 3060 - 3061 - 16643 - 3062 - 16644 - 3063 - 16645 - 3064 - 16651 - 3065 - 16654 - 3066 - 16657 - 3067 - 16664 - 3068 - 16675 - 3070 - 16677 - 3071 - 16680 - 3072 - 3073 - 16687 - 3074 - 16690 - 16696 - 16713 - 3075 - 16724 - 3077 - 16726 - 3078 - 16729 - 3079 - 3080 - 16736 - 3081 - 16737 - 3082 - 16738 - 3083 - 16744 - 3085 - 16746 - 3086 - 16749 - 3088 - 3089 - 16755 - 3090 - 16756 - 3093 - 16762 - 3095 - 16764 - 3096 - 16767 - 3097 - 3098 - 16774 - 3099 - 16775 - 3102 - 16781 - 16797 - 3103 - 16801 - 16807 - 16824 - 3104 - 16835 - 3106 - 16837 - 3107 - 16840 - 3108 - 16841 - 3109 - 3110 - 16846 - 3111 - 16847 - 3114 - 16853 - 3116 - 16855 - 3117 - 16858 - 3118 -endcidrange - -100 begincidrange - 3119 - 16865 - 3120 - 16866 - 3121 - 16867 - 3122 - 16873 - 3123 - 16876 - 16888 - 3124 - 16891 - 3125 - 16898 - 3126 - 16901 - 16913 - 3127 - 16924 - 3129 - 16926 - 3130 - 16929 - 3131 - 3132 - 16936 - 3133 - 16937 - 3134 - 16938 - 3135 - 16942 - 3136 - 16943 - 3137 - 16946 - 16958 - 3138 - 16969 - 16985 - 3139 - 16996 - 3140 - 16999 - 17011 - 3141 - 17013 - 3142 - 17014 - 3143 - 17020 - 17036 - 3144 - 17047 - 3146 - 17049 - 3147 - 17052 - 3148 - 3149 - 17059 - 3150 - 17060 - 3151 - 17061 - 3152 - 17067 - 17083 - 3153 - 17086 - 3154 - 17093 - 17109 - 3155 - 17120 - 3157 - 17122 - 3158 - 17125 - 3159 - 3160 - 17132 - 3161 - 17135 - 3162 - 17141 - 3163 - 17144 - 3164 - 17147 - 3165 - 17154 - 3166 - 17158 - 3167 - 17164 - 3169 - 17166 - 3170 -endcidrange - -100 begincidrange - 17168 - 3172 - 17169 - 3173 - 3174 - 17174 - 3175 - 17175 - 3176 - 17183 - 3177 - 17186 - 3178 - 17189 - 3179 - 3180 - 17196 - 3181 - 17206 - 3183 - 17208 - 3184 - 17211 - 3185 - 3186 - 17218 - 3187 - 17219 - 3188 - 17220 - 3189 - 17226 - 3192 - 17227 - 3193 - 17230 - 3194 - 17231 - 3195 - 3196 - 17236 - 3197 - 17237 - 3200 - 17240 - 3201 - 17242 - 3203 - 17244 - 3204 - 17247 - 3205 - 3206 - 17254 - 3207 - 17255 - 3210 - 17261 - 17276 - 17287 - 17304 - 3212 - 17315 - 3214 - 17317 - 3215 - 17320 - 3216 - 3217 - 17327 - 3218 - 17328 - 3221 - 17334 - 3223 - 17336 - 3224 - 17339 - 3225 - 3226 - 17346 - 3227 - 17347 - 3228 - 17348 - 3229 - 17354 - 3230 - 17357 - 3231 - 17360 - 3232 - 3233 - 17367 - 3234 - 17369 - 3236 - 17375 - 3237 - 17382 -endcidrange - -100 begincidrange - 3238 - 17390 - 3239 - 17391 - 3240 - 17399 - 3242 - 17401 - 3243 - 17404 - 3244 - 3245 - 17411 - 3246 - 17412 - 3247 - 17413 - 3248 - 17419 - 17435 - 3249 - 17439 - 17445 - 17462 - 3250 - 17473 - 3251 - 17476 - 17488 - 3252 - 17499 - 3253 - 17502 - 3254 - 17505 - 3255 - 17513 - 3256 - 17514 - 3257 - 17522 - 3259 - 17524 - 3260 - 17526 - 3262 - 17527 - 3263 - 3264 - 17532 - 3265 - 17533 - 3266 - 17534 - 3267 - 17540 - 17556 - 3268 - 17560 - 17566 - 17583 - 3269 - 17594 - 3270 - 17597 - 3271 - 17600 - 3272 - 17607 - 3273 - 17609 - 3274 - 17617 - 3275 - 17620 - 3276 - 17623 - 3277 - 17630 - 3278 - 17632 - 3279 - 17633 - 3280 - 17639 - 3281 - 17642 - 3282 - 17645 - 3283 - 3284 - 17652 - 3285 - 17653 - 17661 - 17678 - 3286 - 17689 - 3288 - 17691 -endcidrange - -100 begincidrange - 3289 - 17694 - 3290 - 3291 - 17701 - 3292 - 17702 - 3293 - 17703 - 3294 - 17709 - 3296 - 17711 - 3297 - 17714 - 3298 - 17718 - 3299 - 3300 - 17720 - 3301 - 17721 - 3302 - 17722 - 3303 - 17728 - 3305 - 17730 - 3306 - 17733 - 3307 - 3308 - 17740 - 3309 - 17741 - 3312 - 17747 - 17763 - 3313 - 17767 - 17773 - 17790 - 3314 - 17801 - 3316 - 17803 - 3317 - 17806 - 3318 - 17807 - 3319 - 3320 - 17812 - 3321 - 17813 - 3322 - 17814 - 3323 - 17820 - 3325 - 17822 - 3326 - 17825 - 3327 - 3328 - 17832 - 3329 - 17833 - 3330 - 17834 - 3331 - 17840 - 3333 - 17842 - 3334 - 17845 - 3335 - 3336 - 17852 - 3337 - 17853 - 3340 - 17859 - 3341 - 17862 - 3342 - 17865 - 3343 - 17873 - 3344 - 17883 - 3346 - 17885 - 3347 - 17888 - 3348 - 17892 - 3349 - 3350 - 17894 -endcidrange - -100 begincidrange - 3351 - 17895 - 3352 - 17896 - 3353 - 17899 - 3354 - 17901 - 3356 - 17903 - 3357 - 17906 - 17914 - 3358 - 17916 - 3359 - 17917 - 3360 - 17923 - 3362 - 17925 - 17937 - 3363 - 17939 - 3364 - 17940 - 3365 - 17946 - 3367 - 17948 - 3368 - 17951 - 3369 - 17959 - 3370 - 17960 - 3371 - 17961 - 3372 - 17967 - 3373 - 17970 - 3374 - 17973 - 3375 - 17981 - 3376 - 17982 - 3377 - 17990 - 3379 - 17992 - 3380 - 17995 - 3381 - 17999 - 3382 - 18001 - 3383 - 18003 - 3384 - 18004 - 3385 - 18010 - 3386 - 18013 - 3387 - 18016 - 3388 - 18023 - 3389 - 18027 - 3390 - 18033 - 3392 - 18035 - 3393 - 18038 - 18046 - 3394 - 18050 - 3395 - 18056 - 3397 - 18058 - 3398 - 18061 - 3399 - 3400 - 18068 - 3401 - 18069 - 3402 - 18070 - 3403 - 18076 - 3405 - 18078 - 3406 - 18081 -endcidrange - -100 begincidrange - 3407 - 18088 - 3408 - 18090 - 3409 - 18091 - 3410 - 18097 - 3412 - 18099 - 3413 - 18100 - 3417 - 3418 - 18106 - 3419 - 18107 - 3420 - 18108 - 3421 - 18111 - 3422 - 18113 - 3423 - 18116 - 3424 - 18119 - 3425 - 3426 - 18126 - 3427 - 18129 - 3428 - 18135 - 3430 - 18137 - 3431 - 18140 - 3432 - 3433 - 18147 - 3434 - 18148 - 3435 - 18149 - 101 - 179 - 264 - 342 - 409 - 451 - 461 - 471 - 495 - 509 - 519 - 587 - 665 - 666 - 670 - 671 - 679 - 757 - 835 - 934 - 1012 - 1020 - 1053 - 3436 - 3514 - 4116 - 3577 - 3678 - 3582 - 7053 - 3598 - 3621 - 3699 - 3460 - 3761 - 7900 - 3785 - 3807 - 3802 - 3819 - 3884 - 3902 - 3990 - 3993 - 3946 - 3994 - 3946 - 4015 - 3708 - 4038 - 4131 - 4050 - 4067 - 4374 - 4156 -endcidrange - -100 begincidrange - 4134 - 4375 - 4136 - 4376 - 4138 - 5800 - 4382 - 4386 - 4139 - 4387 - 4140 - 4391 - 4141 - 4394 - 4142 - 4396 - 4143 - 4399 - 4146 - 4403 - 4149 - 4406 - 4409 - 4150 - 4410 - 4151 - 4412 - 4419 - 4154 - 4420 - 4155 - 4424 - 4159 - 4511 - 4170 - 4513 - 4517 - 4173 - 4518 - 4524 - 4174 - 4525 - 4528 - 4535 - 4175 - 4541 - 4176 - 4545 - 4179 - 4547 - 4550 - 4180 - 4564 - 4566 - 4571 - 4576 - 4181 - 4184 - 4604 - 4609 - 4185 - 4611 - 4186 - 4286 - 4318 - 4355 - 4363 - 4136 - 4376 - 5800 - 4382 - 4139 - 4387 - 4192 - 4389 - 4469 - 4167 - 4492 - 4172 - 4512 - 4545 - 5552 - 4603 - 6424 - 4627 - 4653 - 4731 - 4841 - 4919 - 5151 - 4971 - 4922 - 5001 - 5027 - 7518 - 5031 - 5104 - 5079 - 5124 - 5109 -endcidrange - -100 begincidrange - 5171 - 7607 - 5201 - 5211 - 5289 - 5584 - 5302 - 5367 - 5303 - 7083 - 5321 - 5362 - 5366 - 5485 - 5372 - 5394 - 5472 - 6001 - 5474 - 5460 - 5499 - 5317 - 5562 - 5579 - 5657 - 7009 - 5757 - 7370 - 5766 - 5678 - 5773 - 5842 - 5874 - 5871 - 4425 - 5873 - 4427 - 5879 - 4429 - 5880 - 4431 - 5887 - 4435 - 5896 - 4436 - 5897 - 4437 - 5898 - 4439 - 5901 - 4442 - 4159 - 5936 - 4444 - 4447 - 5937 - 4449 - 5939 - 4450 - 5941 - 4453 - 5946 - 4455 - 5947 - 4458 - 5948 - 4459 - 5951 - 4463 - 5954 - 4160 - 5961 - 4465 - 5962 - 4161 - 5964 - 4468 - 5971 - 4469 - 5974 - 4470 - 5976 - 4162 - 5978 - 4471 - 5980 - 4472 - 5981 - 4474 - 4473 - 4475 - 5983 - 4476 - 5984 - 4478 - 6447 - 5985 - 4481 - 5987 - 4482 -endcidrange - -100 begincidrange - 5460 - 5988 - 4483 - 4163 - 4166 - 5990 - 4485 - 5991 - 4487 - 5996 - 4488 - 6000 - 4489 - 4491 - 6002 - 4167 - 4493 - 6003 - 4494 - 6005 - 4495 - 6019 - 7783 - 6020 - 4497 - 4499 - 6024 - 4501 - 6027 - 4502 - 6028 - 4503 - 6029 - 4506 - 6031 - 4508 - 6042 - 4509 - 6046 - 4510 - 6047 - 5797 - 6063 - 6070 - 4551 - 6140 - 6146 - 4553 - 4180 - 6147 - 4555 - 6152 - 5800 - 6153 - 4556 - 6154 - 4557 - 6156 - 4560 - 6162 - 4561 - 6166 - 4563 - 6197 - 7988 - 6239 - 6246 - 6123 - 6278 - 4577 - 6313 - 6322 - 4183 - 6327 - 4579 - 6329 - 4581 - 6333 - 4582 - 6334 - 4584 - 6337 - 4586 - 6339 - 4588 - 4184 - 6340 - 4590 - 6355 - 4592 - 6356 - 4593 - 4595 - 6359 - 4596 - 6362 - 4599 - 6366 - 4600 - 5552 -endcidrange - -92 begincidrange - 6368 - 4603 - 6373 - 6411 - 4614 - 4616 - 6416 - 4618 - 6418 - 5950 - 4620 - 4187 - 6422 - 4625 - 6424 - 4627 - 6426 - 4629 - 6427 - 4632 - 6432 - 4634 - 4636 - 6435 - 4188 - 6437 - 4638 - 6447 - 4640 - 6454 - 4642 - 6456 - 4644 - 6458 - 4645 - 6460 - 6466 - 4647 - 6474 - 4650 - 6475 - 4653 - 6479 - 5351 - 6553 - 6569 - 6494 - 6627 - 6646 - 6756 - 6834 - 6944 - 5731 - 6972 - 7021 - 5771 - 7032 - 4191 - 7052 - 7129 - 6484 - 7135 - 6684 - 7205 - 7315 - 7393 - 4279 - 7398 - 7139 - 7399 - 4247 - 7430 - 4266 - 7445 - 4340 - 7455 - 7498 - 7572 - 7556 - 7575 - 5088 - 7576 - 7709 - 3558 - 7684 - 3644 - 7751 - 7759 - 7869 - 3815 - 7877 - 7946 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/KSC-Johab-V b/Resources/cmap/KSC-Johab-V deleted file mode 100644 index 28416952589..00000000000 --- a/Resources/cmap/KSC-Johab-V +++ /dev/null @@ -1,76 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (KSC-Johab-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (KSC-Johab-H) -%%BeginResource: CMap (KSC-Johab-V) -%%Title: (KSC-Johab-V Adobe Korea1 1) -%%Version: 4.003 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/KSC-Johab-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Korea1) def - /Supplement 1 def -end def - -/CMapName /KSC-Johab-V def -/CMapVersion 4.003 def -/CMapType 1 def - -/UIDOffset 690 def -/XUID [1 10 25412] def - -/WMode 1 def - -16 begincidrange - 8056 - 8058 - 8320 - 8059 - 8062 - 8063 - 8075 - 8076 - 8077 - 8079 - 8080 - 8081 - 8087 - 8088 - 8089 - 8090 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/KSCms-UHC-H b/Resources/cmap/KSCms-UHC-H deleted file mode 100644 index 449f43fed32..00000000000 --- a/Resources/cmap/KSCms-UHC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (KSCms-UHC-H) %%Title: (KSCms-UHC-H Adobe Korea1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 1 def end def /CMapName /KSCms-UHC-H def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 430 def /XUID [1 10 25409] def /WMode 0 def 2 begincodespacerange <00> <80> <8141> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <8141> <815a> 9333 <8161> <817a> 9359 <8181> <81fe> 9385 <8241> <825a> 9511 <8261> <827a> 9537 <8281> <82fe> 9563 <8341> <835a> 9689 <8361> <837a> 9715 <8381> <83fe> 9741 <8441> <845a> 9867 <8461> <847a> 9893 <8481> <84fe> 9919 <8541> <855a> 10045 <8561> <857a> 10071 <8581> <85fe> 10097 <8641> <865a> 10223 <8661> <867a> 10249 <8681> <86fe> 10275 <8741> <875a> 10401 <8761> <877a> 10427 <8781> <87fe> 10453 <8841> <885a> 10579 <8861> <887a> 10605 <8881> <88fe> 10631 <8941> <895a> 10757 <8961> <897a> 10783 <8981> <89fe> 10809 <8a41> <8a5a> 10935 <8a61> <8a7a> 10961 <8a81> <8afe> 10987 <8b41> <8b5a> 11113 <8b61> <8b7a> 11139 <8b81> <8bfe> 11165 <8c41> <8c5a> 11291 <8c61> <8c7a> 11317 <8c81> <8cfe> 11343 <8d41> <8d5a> 11469 <8d61> <8d7a> 11495 <8d81> <8dfe> 11521 <8e41> <8e5a> 11647 <8e61> <8e7a> 11673 <8e81> <8efe> 11699 <8f41> <8f5a> 11825 <8f61> <8f7a> 11851 <8f81> <8ffe> 11877 <9041> <905a> 12003 <9061> <907a> 12029 <9081> <90fe> 12055 <9141> <915a> 12181 <9161> <917a> 12207 <9181> <91fe> 12233 <9241> <925a> 12359 <9261> <927a> 12385 <9281> <92fe> 12411 <9341> <935a> 12537 <9361> <937a> 12563 <9381> <93fe> 12589 <9441> <945a> 12715 <9461> <947a> 12741 <9481> <94fe> 12767 <9541> <955a> 12893 <9561> <957a> 12919 <9581> <95fe> 12945 <9641> <965a> 13071 <9661> <967a> 13097 <9681> <96fe> 13123 <9741> <975a> 13249 <9761> <977a> 13275 <9781> <97fe> 13301 <9841> <985a> 13427 <9861> <987a> 13453 <9881> <98fe> 13479 <9941> <995a> 13605 <9961> <997a> 13631 <9981> <99fe> 13657 <9a41> <9a5a> 13783 <9a61> <9a7a> 13809 <9a81> <9afe> 13835 <9b41> <9b5a> 13961 <9b61> <9b7a> 13987 <9b81> <9bfe> 14013 <9c41> <9c5a> 14139 <9c61> <9c7a> 14165 <9c81> <9cfe> 14191 <9d41> <9d5a> 14317 <9d61> <9d7a> 14343 <9d81> <9dfe> 14369 <9e41> <9e5a> 14495 <9e61> <9e7a> 14521 <9e81> <9efe> 14547 <9f41> <9f5a> 14673 <9f61> <9f7a> 14699 <9f81> <9ffe> 14725 14851 14877 14903 15029 15055 15081 endcidrange 100 begincidrange 101 15113 15139 15165 195 15197 15223 15249 264 15281 15307 15333 358 409 15365 15391 15417 451 461 471 495 15449 15475 15501 519 15533 15559 15585 587 15617 15643 15669 666 670 671 679 15701 15727 15753 757 15785 15811 15837 851 15869 15895 15921 934 15953 15979 16005 1020 1053 16037 16063 16089 16121 16147 16173 16205 16231 16257 16289 16315 16341 1086 16373 16399 16425 1180 16457 16483 16509 1274 16541 16567 16593 1368 16625 16651 16677 1462 16709 16735 16761 1556 16793 16819 16845 1650 16877 16903 16929 1744 16961 16987 17013 1838 17045 17071 endcidrange 100 begincidrange 17097 1932 17129 17155 17181 2026 17213 17239 17265 2120 17297 17323 17349 2214 17381 17407 17433 2308 17465 17491 17517 2402 17549 17575 17601 2496 17633 17659 17685 2590 17717 17743 17769 2684 17801 17827 17853 2778 17885 17911 17937 2872 17969 17995 18021 2966 18053 18079 18105 3060 18137 3154 3248 3342 3436 3530 4116 3577 3678 3582 7053 3598 3621 3715 3460 3761 7900 3785 3807 3802 3819 3900 3902 3990 3993 3946 3994 3946 4015 3708 4038 4131 4050 4083 4374 4156 4134 4375 4136 4376 4138 5800 4382 4386 4139 4387 4140 4391 4141 4394 endcidrange 100 begincidrange 4142 4396 4143 4399 4146 4403 4149 4406 4409 4150 4410 4151 4412 4419 4154 4420 4155 4424 4159 4511 4170 4513 4517 4173 4518 4524 4174 4525 4528 4535 4175 4541 4176 4545 4179 4547 4550 4180 4564 4566 4571 4576 4181 4604 4609 4185 4611 4186 4192 4286 4318 4355 4136 4376 4378 5800 4382 4139 4387 4192 4389 4469 4167 4492 4172 4512 4561 5552 4603 6424 4627 4653 4747 4841 4935 5151 4971 4922 5001 5027 7518 5031 5120 5079 5124 5109 5171 7607 5201 5211 5584 5302 5367 5303 7083 5321 5362 5366 5485 5372 endcidrange 100 begincidrange 5394 6001 5474 5487 5460 5499 5317 5562 5579 5673 7009 5757 7370 5766 5678 5773 5858 5874 5871 4425 5873 4427 5879 4429 5880 4431 5887 4435 5896 4436 5897 4437 5898 4439 5901 4442 4159 5936 4444 4447 5937 4449 5939 4450 5941 4453 5946 4455 5947 4458 5948 4459 5951 4463 5954 4160 5961 4465 5962 4161 5964 4468 5971 4469 5974 4470 5976 4162 5978 4471 5980 4472 5981 4474 4473 4475 5983 4476 5984 4478 6447 5985 4481 5987 4482 5460 5988 4483 4163 4166 5990 4485 5991 4487 5996 4488 6000 4489 4491 6002 endcidrange 100 begincidrange 4167 4493 6003 4494 6005 4495 6019 7783 6020 4497 4499 6024 4501 6027 4502 6028 4503 6029 4506 6031 4508 6042 4509 6046 4510 6047 5797 6063 6070 4551 6140 4553 4180 6147 4555 6152 5800 6153 4556 6154 4557 6156 4560 6162 4561 6166 4563 6197 7988 6239 6246 6123 6278 4577 6313 4183 6327 4579 6329 4581 6333 4582 6334 4584 6337 4586 6339 4588 4184 6340 4590 6355 4592 6356 4593 4595 6359 4596 6362 4599 6366 4600 5552 6368 4603 6373 6411 4614 4616 6416 4618 6418 5950 4620 4187 6422 4625 6424 4627 6426 endcidrange 75 begincidrange 4629 6427 4632 6432 4634 4636 6435 4188 6437 4638 6447 4640 6454 4642 6456 4644 6458 4645 6460 4647 6474 4650 6475 4653 6479 5351 6553 6569 6494 6627 6662 6756 6850 6944 5731 6972 5771 7032 7036 4191 7052 7129 6484 7135 6684 7205 7221 7315 4279 7398 7139 7399 7407 4247 7430 4266 7445 4340 7455 7498 7572 7556 5088 7576 7590 7709 3558 7684 3644 7751 7775 7869 3815 7877 7962 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCms-UHC-HW-H b/Resources/cmap/KSCms-UHC-HW-H deleted file mode 100644 index c468c9110b9..00000000000 --- a/Resources/cmap/KSCms-UHC-HW-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (KSCms-UHC-HW-H) %%Title: (KSCms-UHC-HW-H Adobe Korea1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 1 def end def /CMapName /KSCms-UHC-HW-H def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25416] def /WMode 0 def 2 begincodespacerange <00> <80> <8141> endcodespacerange 1 beginnotdefrange <00> <1f> 8094 endnotdefrange 100 begincidrange <20> <7e> 8094 <8141> <815a> 9333 <8161> <817a> 9359 <8181> <81fe> 9385 <8241> <825a> 9511 <8261> <827a> 9537 <8281> <82fe> 9563 <8341> <835a> 9689 <8361> <837a> 9715 <8381> <83fe> 9741 <8441> <845a> 9867 <8461> <847a> 9893 <8481> <84fe> 9919 <8541> <855a> 10045 <8561> <857a> 10071 <8581> <85fe> 10097 <8641> <865a> 10223 <8661> <867a> 10249 <8681> <86fe> 10275 <8741> <875a> 10401 <8761> <877a> 10427 <8781> <87fe> 10453 <8841> <885a> 10579 <8861> <887a> 10605 <8881> <88fe> 10631 <8941> <895a> 10757 <8961> <897a> 10783 <8981> <89fe> 10809 <8a41> <8a5a> 10935 <8a61> <8a7a> 10961 <8a81> <8afe> 10987 <8b41> <8b5a> 11113 <8b61> <8b7a> 11139 <8b81> <8bfe> 11165 <8c41> <8c5a> 11291 <8c61> <8c7a> 11317 <8c81> <8cfe> 11343 <8d41> <8d5a> 11469 <8d61> <8d7a> 11495 <8d81> <8dfe> 11521 <8e41> <8e5a> 11647 <8e61> <8e7a> 11673 <8e81> <8efe> 11699 <8f41> <8f5a> 11825 <8f61> <8f7a> 11851 <8f81> <8ffe> 11877 <9041> <905a> 12003 <9061> <907a> 12029 <9081> <90fe> 12055 <9141> <915a> 12181 <9161> <917a> 12207 <9181> <91fe> 12233 <9241> <925a> 12359 <9261> <927a> 12385 <9281> <92fe> 12411 <9341> <935a> 12537 <9361> <937a> 12563 <9381> <93fe> 12589 <9441> <945a> 12715 <9461> <947a> 12741 <9481> <94fe> 12767 <9541> <955a> 12893 <9561> <957a> 12919 <9581> <95fe> 12945 <9641> <965a> 13071 <9661> <967a> 13097 <9681> <96fe> 13123 <9741> <975a> 13249 <9761> <977a> 13275 <9781> <97fe> 13301 <9841> <985a> 13427 <9861> <987a> 13453 <9881> <98fe> 13479 <9941> <995a> 13605 <9961> <997a> 13631 <9981> <99fe> 13657 <9a41> <9a5a> 13783 <9a61> <9a7a> 13809 <9a81> <9afe> 13835 <9b41> <9b5a> 13961 <9b61> <9b7a> 13987 <9b81> <9bfe> 14013 <9c41> <9c5a> 14139 <9c61> <9c7a> 14165 <9c81> <9cfe> 14191 <9d41> <9d5a> 14317 <9d61> <9d7a> 14343 <9d81> <9dfe> 14369 <9e41> <9e5a> 14495 <9e61> <9e7a> 14521 <9e81> <9efe> 14547 <9f41> <9f5a> 14673 <9f61> <9f7a> 14699 <9f81> <9ffe> 14725 14851 14877 14903 15029 15055 15081 endcidrange 100 begincidrange 101 15113 15139 15165 195 15197 15223 15249 264 15281 15307 15333 358 409 15365 15391 15417 451 461 471 495 15449 15475 15501 519 15533 15559 15585 587 15617 15643 15669 666 670 671 679 15701 15727 15753 757 15785 15811 15837 851 15869 15895 15921 934 15953 15979 16005 1020 1053 16037 16063 16089 16121 16147 16173 16205 16231 16257 16289 16315 16341 1086 16373 16399 16425 1180 16457 16483 16509 1274 16541 16567 16593 1368 16625 16651 16677 1462 16709 16735 16761 1556 16793 16819 16845 1650 16877 16903 16929 1744 16961 16987 17013 1838 17045 17071 endcidrange 100 begincidrange 17097 1932 17129 17155 17181 2026 17213 17239 17265 2120 17297 17323 17349 2214 17381 17407 17433 2308 17465 17491 17517 2402 17549 17575 17601 2496 17633 17659 17685 2590 17717 17743 17769 2684 17801 17827 17853 2778 17885 17911 17937 2872 17969 17995 18021 2966 18053 18079 18105 3060 18137 3154 3248 3342 3436 3530 4116 3577 3678 3582 7053 3598 3621 3715 3460 3761 7900 3785 3807 3802 3819 3900 3902 3990 3993 3946 3994 3946 4015 3708 4038 4131 4050 4083 4374 4156 4134 4375 4136 4376 4138 5800 4382 4386 4139 4387 4140 4391 4141 4394 endcidrange 100 begincidrange 4142 4396 4143 4399 4146 4403 4149 4406 4409 4150 4410 4151 4412 4419 4154 4420 4155 4424 4159 4511 4170 4513 4517 4173 4518 4524 4174 4525 4528 4535 4175 4541 4176 4545 4179 4547 4550 4180 4564 4566 4571 4576 4181 4604 4609 4185 4611 4186 4192 4286 4318 4355 4136 4376 4378 5800 4382 4139 4387 4192 4389 4469 4167 4492 4172 4512 4561 5552 4603 6424 4627 4653 4747 4841 4935 5151 4971 4922 5001 5027 7518 5031 5120 5079 5124 5109 5171 7607 5201 5211 5584 5302 5367 5303 7083 5321 5362 5366 5485 5372 endcidrange 100 begincidrange 5394 6001 5474 5487 5460 5499 5317 5562 5579 5673 7009 5757 7370 5766 5678 5773 5858 5874 5871 4425 5873 4427 5879 4429 5880 4431 5887 4435 5896 4436 5897 4437 5898 4439 5901 4442 4159 5936 4444 4447 5937 4449 5939 4450 5941 4453 5946 4455 5947 4458 5948 4459 5951 4463 5954 4160 5961 4465 5962 4161 5964 4468 5971 4469 5974 4470 5976 4162 5978 4471 5980 4472 5981 4474 4473 4475 5983 4476 5984 4478 6447 5985 4481 5987 4482 5460 5988 4483 4163 4166 5990 4485 5991 4487 5996 4488 6000 4489 4491 6002 endcidrange 100 begincidrange 4167 4493 6003 4494 6005 4495 6019 7783 6020 4497 4499 6024 4501 6027 4502 6028 4503 6029 4506 6031 4508 6042 4509 6046 4510 6047 5797 6063 6070 4551 6140 4553 4180 6147 4555 6152 5800 6153 4556 6154 4557 6156 4560 6162 4561 6166 4563 6197 7988 6239 6246 6123 6278 4577 6313 4183 6327 4579 6329 4581 6333 4582 6334 4584 6337 4586 6339 4588 4184 6340 4590 6355 4592 6356 4593 4595 6359 4596 6362 4599 6366 4600 5552 6368 4603 6373 6411 4614 4616 6416 4618 6418 5950 4620 4187 6422 4625 6424 4627 6426 endcidrange 75 begincidrange 4629 6427 4632 6432 4634 4636 6435 4188 6437 4638 6447 4640 6454 4642 6456 4644 6458 4645 6460 4647 6474 4650 6475 4653 6479 5351 6553 6569 6494 6627 6662 6756 6850 6944 5731 6972 5771 7032 7036 4191 7052 7129 6484 7135 6684 7205 7221 7315 4279 7398 7139 7399 7407 4247 7430 4266 7445 4340 7455 7498 7572 7556 5088 7576 7590 7709 3558 7684 3644 7751 7775 7869 3815 7877 7962 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCms-UHC-HW-V b/Resources/cmap/KSCms-UHC-HW-V deleted file mode 100644 index e26fe8a2df9..00000000000 --- a/Resources/cmap/KSCms-UHC-HW-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (KSCms-UHC-HW-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (KSCms-UHC-HW-H) %%BeginResource: CMap (KSCms-UHC-HW-V) %%Title: (KSCms-UHC-HW-V Adobe Korea1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /KSCms-UHC-HW-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 1 def end def /CMapName /KSCms-UHC-HW-V def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25417] def /WMode 1 def 16 begincidrange 8056 8058 8320 8059 8062 8063 8075 8076 8077 8079 8080 8081 8087 8088 8089 8090 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCms-UHC-UCS2 b/Resources/cmap/KSCms-UHC-UCS2 deleted file mode 100644 index 8ff2aa3b6e2..00000000000 --- a/Resources/cmap/KSCms-UHC-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (KSCms-UHC-UCS2) %%Title: (KSCms-UHC-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (KSCms_UHC_UCS2) def /Supplement 1 def end def /CMapName /KSCms-UHC-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 3 begincodespacerange <00> <80> <8141> endcodespacerange 100 beginbfrange <00> <80> <0000> <8141> <8142> <8143> <8144> <8145> <8149> <814A> <814A> <814B> <814C> <814D> <814F> <8150> <8156> <8157> <8157> <8158> <815A> <8161> <8163> <8164> <8165> <8166> <8168> <8169> <8172> <8173> <8173> <8174> <8179> <817A> <817A> <8181> <8182> <8183> <8185> <8186> <8198> <8199> <819A> <819B> <819C> <819D> <819D> <819E> <81A2> <81A3> <81A3> <81A4> <81A5> <81A6> <81A8> <81A9> <81AB> <81AC> <81B2> <81B3> <81B3> <81B4> <81B9> <81BA> <81BA> <81BB> <81BC> <81BD> <81C3> <81C4> <81C4> <81C5> <81C7> <81C8> <81C9> <81CA> <81CC> <81CD> <81CF> <81D0> <81D7> <81D8> <81D8> <81D9> <81E0> <81E1> <81E2> <81E3> <81E4> <81E5> <81E5> <81E6> <81E6> <81E7> <81E8> <81E9> <81E9> <81EA> <81EA> <81EB> <81EF> <81F0> <81F1> <81F2> <81F4> <81F5> <81F5> <81F6> <81FA> <81FB> <81FB> <81FC> <81FC> <81FD> <81FE> <8241> <8244> <8245> <8247> <8248> <824A> <824B> <8252> <8253> <8254> <8255> <825A> <8261> <8262> <8263> <8265> <8266> <826C> <826D> <826D> <826E> <826E> <826F> <8274> <8275> <8277> <8278> <827A> <8281> <8288> <8289> <8289> <828A> <8291> <8292> <8293> <8294> <8295> <8296> <8299> <829A> <829A> <829B> <829B> <829C> <82A0> <82A1> <82A2> <82A3> <82A5> <82A6> <82B0> <82B1> <82B6> <82B7> <82C8> <82C9> <82D0> <82D1> <82D2> <82D3> <82D5> <82D6> <82DC> <82DD> <82DD> <82DE> <82E5> <82E6> <82E8> <82E9> <82EB> <82EC> <82FE> <8341> <8342> <8343> <8344> <8345> <834A> <834B> <834B> <834C> <834C> endbfrange 100 beginbfrange <834D> <8352> <8353> <835A> <8361> <8373> <8374> <8375> <8376> <8377> <8378> <8378> <8379> <837A> <8381> <8383> <8384> <8384> <8385> <8385> <8386> <8388> <8389> <8389> <838A> <838A> <838B> <838D> <838E> <838E> <838F> <8393> <8394> <8394> <8395> <8397> <8398> <8399> <839A> <839B> <839C> <839E> <839F> <83A5> <83A6> <83A6> <83A7> <83AC> <83AD> <83B2> <83B3> <83E1> <83E2> <83E2> <83E3> <83E5> <83E6> <83EC> <83ED> <83ED> <83EE> <83F3> <83F4> <83F5> <83F6> <83FE> <8441> <8442> <8443> <8444> <8445> <8445> <8446> <844B> <844C> <844E> <844F> <8451> <8452> <845A> <8461> <8461> <8462> <8465> <8466> <8467> <8468> <847A> <8481> <8488> <8489> <848A> <848B> <848B> <848C> <848C> <848D> <8493> <8494> <8494> <8495> <8495> <8496> <8499> <849A> <849F> <84A0> <84AA> <84AB> <84B0> <84B1> <84C3> <84C4> <84C9> <84CA> <84CC> <84CD> <84CF> <84D0> <84D6> <84D7> <84D9> <84DA> <84DF> <84E0> <84FA> <84FB> <84FC> <84FD> <84FE> <8541> <8541> <8542> <8547> <8548> <8548> <8549> <8549> <854A> <854E> <854F> <8555> <8556> <855A> <8561> <8566> <8567> <856C> <856D> <856E> <856F> <8571> <8572> <8578> <8579> <857A> <8581> <8587> <8588> <858A> <858B> <858D> <858E> <8594> <8595> <859E> <859F> <85B9> <85BA> <85BB> <85BC> <85BC> <85BD> <85BD> <85BE> <85BE> <85BF> <85C2> <85C3> <85C3> <85C4> <85C4> <85C5> <85C7> <85C8> <85E5> <85E6> <85E7> <85E8> <85EA> <85EB> <85F1> <85F2> <85F2> <85F3> <85F3> <85F4> <85F9> <85FA> <85FA> endbfrange 100 beginbfrange <85FB> <85FC> <85FD> <85FE> <8641> <8643> <8644> <8644> <8645> <8645> <8646> <8646> <8647> <8648> <8649> <864B> <864C> <8652> <8653> <8653> <8654> <8659> <865A> <865A> <8661> <8661> <8662> <8664> <8665> <866B> <866C> <866F> <8670> <867A> <8681> <8697> <8698> <8698> <8699> <869B> <869C> <869C> <869D> <86A0> <86A1> <86A1> <86A2> <86A6> <86A7> <86A8> <86A9> <86AB> <86AC> <86B2> <86B3> <86B3> <86B4> <86B9> <86BA> <86BB> <86BC> <86BE> <86BF> <86C5> <86C6> <86C7> <86C8> <86C9> <86CA> <86CC> <86CD> <86CF> <86D0> <86E6> <86E7> <86E8> <86E9> <86EB> <86EC> <86EC> <86ED> <86F1> <86F2> <86F2> <86F3> <86F3> <86F4> <86F7> <86F8> <86FA> <86FB> <86FD> <86FE> <86FE> <8741> <874A> <874B> <875A> <8761> <8773> <8774> <8776> <8777> <8779> <877A> <877A> <8781> <8786> <8787> <8787> <8788> <878F> <8790> <8791> <8792> <8794> <8795> <879C> <879D> <879D> <879E> <879E> <879F> <87A4> <87A5> <87A6> <87A7> <87A8> <87A9> <87AF> <87B0> <87B0> <87B1> <87B1> <87B2> <87B7> <87B8> <87CA> <87CB> <87D1> <87D2> <87EC> <87ED> <87EF> <87F0> <87F2> <87F3> <87F9> <87FA> <87FE> <8841> <8845> <8846> <884B> <884C> <8852> <8853> <8855> <8856> <885A> <8861> <8861> <8862> <8863> <8864> <8866> <8867> <886B> <886C> <886C> <886D> <886D> <886E> <8870> <8871> <8871> <8872> <8874> <8875> <8877> <8878> <887A> <8881> <8890> <8891> <8892> <8893> <8895> <8896> <8896> <8897> <889B> <889C> <889C> <889D> <889D> <889E> <88A1> <88A2> <88A2> endbfrange 100 beginbfrange <88A3> <88A3> <88A4> <88A5> <88A6> <88A8> <88A9> <88A9> <88AA> <88AC> <88AD> <88AE> <88AF> <88B1> <88B2> <88B8> <88B9> <88B9> <88BA> <88BF> <88C0> <88F6> <88F7> <88F7> <88F8> <88F9> <88FA> <88FA> <88FB> <88FE> <8941> <8941> <8942> <8942> <8943> <8943> <8944> <8945> <8946> <8946> <8947> <8948> <8949> <894B> <894C> <8952> <8953> <8953> <8954> <8959> <895A> <895A> <8961> <8962> <8963> <8965> <8966> <8970> <8971> <8976> <8977> <8979> <897A> <897A> <8981> <8996> <8997> <8998> <8999> <899A> <899B> <899B> <899C> <899C> <899D> <899F> <89A0> <89A0> <89A1> <89A1> <89A2> <89A2> <89A3> <89A3> <89A4> <89A5> <89A6> <89A8> <89A9> <89AB> <89AC> <89BE> <89BF> <89D1> <89D2> <89D8> <89D9> <89DB> <89DC> <89DE> <89DF> <89E5> <89E6> <89E6> <89E7> <89EE> <89EF> <89FE> <8A41> <8A4B> <8A4C> <8A4D> <8A4E> <8A50> <8A51> <8A57> <8A58> <8A58> <8A59> <8A59> <8A5A> <8A5A> <8A61> <8A65> <8A66> <8A78> <8A79> <8A7A> <8A81> <8A85> <8A86> <8A99> <8A9A> <8A9F> <8AA0> <8AA2> <8AA3> <8AA5> <8AA6> <8AAD> <8AAE> <8AAE> <8AAF> <8AAF> <8AB0> <8AB5> <8AB6> <8AB8> <8AB9> <8ABB> <8ABC> <8AC2> <8AC3> <8AC6> <8AC7> <8ACC> <8ACD> <8ACE> <8ACF> <8AD0> <8AD1> <8AD1> <8AD2> <8AD6> <8AD7> <8AD7> <8AD8> <8AD8> <8AD9> <8ADE> <8ADF> <8AF9> <8AFA> <8AFB> <8AFC> <8AFD> <8AFE> <8AFE> <8B41> <8B46> <8B47> <8B47> <8B48> <8B4C> <8B4D> <8B4E> <8B4F> <8B51> <8B52> <8B58> <8B59> <8B59> <8B5A> <8B5A> <8B61> <8B64> <8B65> <8B66> <8B67> <8B69> endbfrange 100 beginbfrange <8B6A> <8B70> <8B71> <8B71> <8B72> <8B7A> <8B81> <8BB5> <8BB6> <8BB7> <8BB8> <8BBA> <8BBB> <8BBB> <8BBC> <8BBF> <8BC0> <8BC0> <8BC1> <8BC5> <8BC6> <8BC7> <8BC8> <8BCA> <8BCB> <8BD1> <8BD2> <8BD2> <8BD3> <8BD8> <8BD9> <8BEB> <8BEC> <8BFE> <8C41> <8C50> <8C51> <8C52> <8C53> <8C55> <8C56> <8C5A> <8C61> <8C67> <8C68> <8C6D> <8C6E> <8C74> <8C75> <8C7A> <8C81> <8C8D> <8C8E> <8CA8> <8CA9> <8CAB> <8CAC> <8CDE> <8CDF> <8CE0> <8CE1> <8CE3> <8CE4> <8CE9> <8CEA> <8CED> <8CEE> <8CFE> <8D41> <8D51> <8D52> <8D5A> <8D61> <8D72> <8D73> <8D75> <8D76> <8D78> <8D79> <8D7A> <8D81> <8D85> <8D86> <8D88> <8D89> <8DAA> <8DAB> <8DAC> <8DAD> <8DAE> <8DAF> <8DB5> <8DB6> <8DB6> <8DB7> <8DBE> <8DBF> <8DC1> <8DC2> <8DC4> <8DC5> <8DCB> <8DCC> <8DD5> <8DD6> <8DD8> <8DD9> <8DDB> <8DDC> <8DE2> <8DE3> <8DE3> <8DE4> <8DE4> <8DE5> <8DEA> <8DEB> <8DEC> <8DED> <8DEF> <8DF0> <8DF6> <8DF7> <8DF7> <8DF8> <8DFA> <8DFB> <8DFC> <8DFD> <8DFE> <8E41> <8E41> <8E42> <8E48> <8E49> <8E49> <8E4A> <8E4F> <8E50> <8E51> <8E52> <8E5A> <8E61> <8E65> <8E66> <8E66> <8E67> <8E7A> <8E81> <8E8E> <8E8F> <8E90> <8E91> <8E93> <8E94> <8E9A> <8E9B> <8E9B> <8E9C> <8EA0> <8EA1> <8EA2> <8EA3> <8EA5> <8EA6> <8EAC> <8EAD> <8EAD> <8EAE> <8EAE> <8EAF> <8EB4> <8EB5> <8EB6> <8EB7> <8EB9> <8EBA> <8EC0> <8EC1> <8EC1> <8EC2> <8EC7> <8EC8> <8ECA> <8ECB> <8ED6> <8ED7> <8ED7> <8ED8> <8EDF> <8EE0> <8EE1> <8EE2> <8EE4> <8EE5> <8EEB> <8EEC> <8EEC> <8EED> <8EED> endbfrange 100 beginbfrange <8EEE> <8EF3> <8EF4> <8EF6> <8EF7> <8EFE> <8F41> <8F48> <8F49> <8F5A> <8F61> <8F68> <8F69> <8F6F> <8F70> <8F72> <8F73> <8F75> <8F76> <8F7A> <8F81> <8F82> <8F83> <8F83> <8F84> <8F84> <8F85> <8F8A> <8F8B> <8F8D> <8F8E> <8F90> <8F91> <8F98> <8F99> <8F99> <8F9A> <8F9A> <8F9B> <8FA0> <8FA1> <8FA2> <8FA3> <8FA5> <8FA6> <8FAC> <8FAD> <8FAD> <8FAE> <8FAE> <8FAF> <8FB4> <8FB5> <8FC7> <8FC8> <8FCE> <8FCF> <8FE9> <8FEA> <8FEB> <8FEC> <8FEE> <8FEF> <8FF5> <8FF6> <8FF7> <8FF8> <8FF8> <8FF9> <8FFE> <9041> <9042> <9043> <9045> <9046> <904C> <904D> <904D> <904E> <904E> <904F> <9054> <9055> <9056> <9057> <9059> <905A> <905A> <9061> <9066> <9067> <9067> <9068> <9068> <9069> <906A> <906B> <907A> <9081> <908D> <908E> <908F> <9090> <9092> <9093> <9099> <909A> <909A> <909B> <909B> <909C> <90A1> <90A2> <90A3> <90A4> <90A4> <90A5> <90A9> <90AA> <90AA> <90AB> <90AB> <90AC> <90AD> <90AE> <90AE> <90AF> <90B0> <90B1> <90B3> <90B4> <90BA> <90BB> <90BB> <90BC> <90C0> <90C1> <90C6> <90C7> <90D2> <90D3> <90F4> <90F5> <90F6> <90F7> <90F9> <90FA> <90FA> <90FB> <90FE> <9141> <9141> <9142> <9142> <9143> <9143> <9144> <9147> <9148> <9149> <914A> <914C> <914D> <9153> <9154> <9154> <9155> <915A> <9161> <9162> <9163> <9165> <9166> <916F> <9170> <9170> <9171> <9174> <9175> <917A> <9181> <9195> <9196> <9196> <9197> <9199> <919A> <919A> <919B> <919F> <91A0> <91A0> <91A1> <91A1> <91A2> <91A7> <91A8> <91AA> <91AB> <91B9> endbfrange 100 beginbfrange <91BA> <91DB> <91DC> <91DE> <91DF> <91E1> <91E2> <91E9> <91EA> <91EA> <91EB> <91EB> <91EC> <91F1> <91F2> <91F4> <91F5> <91F7> <91F8> <91FE> <9241> <9241> <9242> <9242> <9243> <924A> <924B> <924B> <924C> <924D> <924E> <9252> <9253> <9253> <9254> <9254> <9255> <9257> <9258> <9258> <9259> <925A> <9261> <9261> <9262> <9264> <9265> <926C> <926D> <926D> <926E> <9275> <9276> <927A> <9281> <9296> <9297> <9299> <929A> <929C> <929D> <92AF> <92B0> <92B2> <92B3> <92B5> <92B6> <92BC> <92BD> <92BE> <92BF> <92C6> <92C7> <92C9> <92CA> <92CC> <92CD> <92D3> <92D4> <92D5> <92D6> <92F9> <92FA> <92FB> <92FC> <92FD> <92FE> <92FE> <9341> <9345> <9346> <9346> <9347> <9347> <9348> <9348> <9349> <934A> <934B> <934C> <934D> <9350> <9351> <9351> <9352> <9352> <9353> <9355> <9356> <9357> <9358> <9359> <935A> <935A> <9361> <9362> <9363> <9369> <936A> <936A> <936B> <936D> <936E> <936F> <9370> <9371> <9372> <937A> <9381> <9383> <9384> <93A9> <93AA> <93AB> <93AC> <93AD> <93AE> <93AE> <93AF> <93B3> <93B4> <93B4> <93B5> <93B5> <93B6> <93BA> <93BB> <93BC> <93BD> <93BE> <93BF> <93C5> <93C6> <93C6> <93C7> <93CC> <93CD> <93CE> <93CF> <93D1> <93D2> <93D9> <93DA> <93DA> <93DB> <93DD> <93DE> <93DF> <93E0> <93E2> <93E3> <93F9> <93FA> <93FA> <93FB> <93FD> <93FE> <93FE> <9441> <9446> <9447> <9447> <9448> <9448> <9449> <944E> <944F> <9451> <9452> <945A> <9461> <9466> <9467> <946D> <946E> <947A> <9481> <9486> <9487> <948D> endbfrange 100 beginbfrange <948E> <948F> <9490> <9492> <9493> <9499> <949A> <94A3> <94A4> <94A6> <94A7> <94BD> <94BE> <94BF> <94C0> <94C1> <94C2> <94C6> <94C7> <94C7> <94C8> <94C8> <94C9> <94CB> <94CC> <94CC> <94CD> <94D3> <94D4> <94DE> <94DF> <94E5> <94E6> <94FE> <9541> <9542> <9543> <9544> <9545> <9547> <9548> <9553> <9554> <9559> <955A> <955A> <9561> <9562> <9563> <9565> <9566> <956C> <956D> <956E> <956F> <956F> <9570> <9575> <9576> <9577> <9578> <957A> <9581> <9587> <9588> <9588> <9589> <95AC> <95AD> <95AE> <95AF> <95B1> <95B2> <95B2> <95B3> <95B7> <95B8> <95B8> <95B9> <95B9> <95BA> <95BD> <95BE> <95BF> <95C0> <95C2> <95C3> <95C3> <95C4> <95C8> <95C9> <95C9> <95CA> <95CE> <95CF> <95D0> <95D1> <95D3> <95D4> <95DA> <95DB> <95DB> <95DC> <95E1> <95E2> <95EF> <95F0> <95FE> <9641> <9658> <9659> <965A> <9661> <9662> <9663> <9669> <966A> <966B> <966C> <9671> <9672> <967A> <9681> <968B> <968C> <9691> <9692> <969F> <96A0> <96A0> <96A1> <96C2> <96C3> <96C4> <96C5> <96C7> <96C8> <96CE> <96CF> <96D1> <96D2> <96FE> <9741> <9751> <9752> <975A> <9761> <9772> <9773> <977A> <9781> <978C> <978D> <9792> <9793> <9794> <9795> <9797> <9798> <979E> <979F> <97A0> <97A1> <97A1> <97A2> <97FB> <97FC> <97FE> <9841> <9851> <9852> <9857> <9858> <985A> <9861> <9863> <9864> <986A> <986B> <987A> <9881> <9896> <9897> <9898> <9899> <989B> <989C> <98A2> <98A3> <98A3> <98A4> <98A4> <98A5> <98AA> <98AB> <98AB> <98AC> <98AD> <98AE> <98B2> endbfrange 100 beginbfrange <98B3> <98B3> <98B4> <98B6> <98B7> <98B8> <98B9> <98BA> <98BB> <98BD> <98BE> <98C4> <98C5> <98C5> <98C6> <98CB> <98CC> <98CD> <98CE> <98D0> <98D1> <98D7> <98D8> <98D8> <98D9> <98D9> <98DA> <98DF> <98E0> <98E2> <98E3> <98E5> <98E6> <98EC> <98ED> <98F0> <98F1> <98F6> <98F7> <98F8> <98F9> <98F9> <98FA> <98FD> <98FE> <98FE> <9941> <9944> <9945> <9945> <9946> <9947> <9948> <994A> <994B> <9951> <9952> <9952> <9953> <9958> <9959> <995A> <9961> <9963> <9964> <996A> <996B> <996B> <996C> <9971> <9972> <9974> <9975> <9977> <9978> <997A> <9981> <9989> <998A> <998F> <9990> <9990> <9991> <9993> <9994> <9994> <9995> <9999> <999A> <999A> <999B> <999B> <999C> <999E> <999F> <99A0> <99A1> <99A2> <99A3> <99A5> <99A6> <99B1> <99B2> <99B7> <99B8> <99BA> <99BB> <99BD> <99BE> <99C4> <99C5> <99C6> <99C7> <99CD> <99CE> <99D0> <99D1> <99D3> <99D4> <99DA> <99DB> <99DB> <99DC> <99E3> <99E4> <99E5> <99E6> <99E8> <99E9> <99EF> <99F0> <99F0> <99F1> <99F1> <99F2> <99F7> <99F8> <99F9> <99FA> <99FB> <99FC> <99FE> <9A41> <9A44> <9A45> <9A45> <9A46> <9A46> <9A47> <9A47> <9A48> <9A48> <9A49> <9A49> <9A4A> <9A5A> <9A61> <9A62> <9A63> <9A69> <9A6A> <9A6B> <9A6C> <9A6E> <9A6F> <9A75> <9A76> <9A79> <9A7A> <9A7A> <9A81> <9A85> <9A86> <9A87> <9A88> <9A8A> <9A8B> <9A91> <9A92> <9A92> <9A93> <9A93> <9A94> <9A99> <9A9A> <9A9F> <9AA0> <9AA6> <9AA7> <9AA8> <9AA9> <9AA9> <9AAA> <9AAF> <9AB0> <9AB1> <9AB2> <9AB4> <9AB5> <9ABA> endbfrange 100 beginbfrange <9ABB> <9ABB> <9ABC> <9ABC> <9ABD> <9ADE> <9ADF> <9AE0> <9AE1> <9AE2> <9AE3> <9AE8> <9AE9> <9AE9> <9AEA> <9AEA> <9AEB> <9AEE> <9AEF> <9AEF> <9AF0> <9AF0> <9AF1> <9AF3> <9AF4> <9AFA> <9AFB> <9AFC> <9AFD> <9AFE> <9B41> <9B43> <9B44> <9B45> <9B46> <9B48> <9B49> <9B4F> <9B50> <9B51> <9B52> <9B5A> <9B61> <9B72> <9B73> <9B7A> <9B81> <9B9A> <9B9B> <9B9C> <9B9D> <9B9F> <9BA0> <9BA0> <9BA1> <9BA5> <9BA6> <9BA7> <9BA8> <9BAD> <9BAE> <9BB0> <9BB1> <9BB3> <9BB4> <9BE6> <9BE7> <9BFD> <9BFE> <9BFE> <9C41> <9C41> <9C42> <9C43> <9C44> <9C44> <9C45> <9C49> <9C4A> <9C4C> <9C4D> <9C52> <9C53> <9C54> <9C55> <9C5A> <9C61> <9C69> <9C6A> <9C70> <9C71> <9C7A> <9C81> <9C89> <9C8A> <9C90> <9C91> <9C93> <9C94> <9C96> <9C97> <9C9D> <9C9E> <9CA7> <9CA8> <9CC2> <9CC3> <9CC4> <9CC5> <9CC7> <9CC8> <9CCE> <9CCF> <9CD1> <9CD2> <9CD7> <9CD8> <9CEA> <9CEB> <9CF1> <9CF2> <9CFE> <9D41> <9D4E> <9D4F> <9D51> <9D52> <9D5A> <9D61> <9D7A> <9D81> <9D89> <9D8A> <9D8F> <9D90> <9D91> <9D92> <9D94> <9D95> <9D95> <9D96> <9D99> <9D9A> <9DA3> <9DA4> <9DA6> <9DA7> <9DA9> <9DAA> <9DB0> <9DB1> <9DBB> <9DBC> <9DBD> <9DBE> <9DC0> <9DC1> <9DC7> <9DC8> <9DC8> <9DC9> <9DC9> <9DCA> <9DCF> <9DD0> <9DD1> <9DD2> <9DD2> <9DD3> <9DD6> <9DD7> <9DD7> <9DD8> <9DDA> <9DDB> <9DDB> <9DDC> <9DDD> <9DDE> <9DE0> <9DE1> <9DE7> <9DE8> <9DE8> <9DE9> <9DEE> <9DEF> <9DF0> <9DF1> <9DF3> <9DF4> <9DF5> <9DF6> <9DF9> <9DFA> <9DFA> <9DFB> <9DFB> <9DFC> <9DFE> endbfrange 100 beginbfrange <9E41> <9E41> <9E42> <9E44> <9E45> <9E47> <9E48> <9E4F> <9E50> <9E59> <9E5A> <9E5A> <9E61> <9E61> <9E62> <9E62> <9E63> <9E67> <9E68> <9E68> <9E69> <9E69> <9E6A> <9E6A> <9E6B> <9E6C> <9E6D> <9E6F> <9E70> <9E76> <9E77> <9E77> <9E78> <9E78> <9E79> <9E7A> <9E81> <9E84> <9E85> <9E85> <9E86> <9E88> <9E89> <9E89> <9E8A> <9E8D> <9E8E> <9E90> <9E91> <9E93> <9E94> <9E96> <9E97> <9E9D> <9E9E> <9E9E> <9E9F> <9EA5> <9EA6> <9EA7> <9EA8> <9EAA> <9EAB> <9EAB> <9EAC> <9EAD> <9EAE> <9EAE> <9EAF> <9EAF> <9EB0> <9EB0> <9EB1> <9EB4> <9EB5> <9EB6> <9EB7> <9EB9> <9EBA> <9EC0> <9EC1> <9EC1> <9EC2> <9EC7> <9EC8> <9EC9> <9ECA> <9ED4> <9ED5> <9ED6> <9ED7> <9ED7> <9ED8> <9EDD> <9EDE> <9EDF> <9EE0> <9EE2> <9EE3> <9EE9> <9EEA> <9EEA> <9EEB> <9EEB> <9EEC> <9EF1> <9EF2> <9EF3> <9EF4> <9EF6> <9EF7> <9EFD> <9EFE> <9EFE> <9F41> <9F41> <9F42> <9F47> <9F48> <9F49> <9F4A> <9F4C> <9F4D> <9F51> <9F52> <9F52> <9F53> <9F53> <9F54> <9F59> <9F5A> <9F5A> <9F61> <9F61> <9F62> <9F64> <9F65> <9F6B> <9F6C> <9F6D> <9F6E> <9F73> <9F74> <9F75> <9F76> <9F78> <9F79> <9F7A> <9F81> <9F85> <9F86> <9F88> <9F89> <9F8E> <9F8F> <9F90> <9F91> <9F93> <9F94> <9F9A> <9F9B> <9F9B> <9F9C> <9F9C> <9F9D> <9FA2> <9FA3> <9FA4> <9FA5> <9FA7> <9FA8> <9FAE> <9FAF> <9FAF> <9FB0> <9FB0> <9FB1> <9FB1> <9FB2> <9FB5> <9FB6> <9FB7> <9FB8> <9FBA> <9FBB> <9FBF> <9FC0> <9FC0> <9FC1> <9FC1> <9FC2> <9FC2> <9FC3> <9FC5> <9FC6> <9FC8> <9FC9> <9FCF> <9FD0> <9FD1> endbfrange 100 beginbfrange <9FD2> <9FD9> <9FDA> <9FDB> <9FDC> <9FDE> <9FDF> <9FE2> <9FE3> <9FE3> <9FE4> <9FE6> <9FE7> <9FE7> <9FE8> <9FE9> <9FEA> <9FEA> <9FEB> <9FEB> <9FEC> <9FF0> <9FF1> <9FF1> <9FF2> <9FF6> <9FF7> <9FF8> <9FF9> <9FFB> <9FFC> <9FFE> <3000> <00B7> <2025> <00A8> <3003> <00AD> <2015> <2225> <223C> <2018> <201C> <3014> <3008> <00B1> <00D7> <00F7> <2260> <2264> <221E> <2234> <00B0> endbfrange 100 beginbfrange <2032> <2103> <212B> <2642> <2640> <2220> <22A5> <2312> <2202> <2207> <2261> <2252> <00A7> <203B> <2606> <2605> <25CB> <25CF> <25CE> <25C7> <25C6> <25A1> <25A0> <25B3> <25B2> <25BD> <25BC> <2192> <2190> <2193> <3013> <226A> <221A> <223D> <221D> <2235> <222B> <2208> <220B> <2286> <2282> <222A> <2229> <2227> <21D2> <21D4> <2200> <2203> <00B4> <02C7> <02D8> <02DD> <02DA> <02D9> <00B8> <02DB> <00A1> <00BF> <02D0> <222E> <2211> <220F> <00A4> <2109> <2030> <25C1> <25C0> <25B7> <25B6> <2664> <2660> <2665> <2667> <2663> <2299> <25C8> <25A3> <25D0> <2592> <25A4> <25A8> <25A7> <25A6> <25A9> endbfrange 100 beginbfrange <2668> <260F> <260E> <261C> <261E> <00B6> <2020> <2195> <2197> <2199> <2196> <2198> <266D> <2669> <266C> <327F> <321C> <2116> <33C7> <2122> <33C2> <33D8> <2121> <3131> <2170> <2160> <0391> <03A3> <03B1> <03C3> <2500> <2502> <250C> <2510> endbfrange 100 beginbfrange <2518> <2514> <251C> <252C> <2524> <2534> <253C> <2501> <2503> <250F> <2513> <251B> <2517> <2523> <2533> <252B> <253B> <254B> <2520> <252F> <2528> <2537> <253F> <251D> <2530> <2525> <2538> <2542> <2512> <2511> <251A> <2519> <2516> <2515> <250E> <250D> <251E> <2521> <2526> <2529> <252D> <2531> <2535> <2539> <253D> <2540> <2543> <3395> <2113> <3398> <33C4> <33A3> <3399> <33CA> <338D> <33CF> <3388> <33C8> <33A7> <33B0> <3380> <33BA> <3390> <2126> <33C0> <338A> <33D6> <33C5> <33AD> <33DB> <33A9> <33DD> <33D0> <33D3> <33C3> <33C9> <33DC> <33C6> <00C6> <00D0> endbfrange 100 beginbfrange <00AA> <0126> <0132> <013F> <0141> <00D8> <0152> <00BA> <00DE> <0166> <014A> <3260> <24D0> <2460> <00BD> <2153> <00BC> <00BE> <215B> <00E6> <0111> <00F0> <0127> <0131> <0133> <0138> <0140> <0142> <00F8> <0153> <00DF> <00FE> <0167> <014B> <0149> <3200> <249C> <2474> <00B9> <00B2> <2074> <207F> <2081> <3041> <30A1> endbfrange 100 beginbfrange <0410> <0401> <0416> <0430> <0451> <0436> endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange <4F3D> <4F73> <5047> <50F9> <52A0> <53EF> <5475> <54E5> <5609> <5AC1> <5BB6> <6687> <67B6> <67EF> <6B4C> <73C2> endbfrange 100 beginbfrange <75C2> <7A3C> <82DB> <8304> <8857> <8888> <8A36> <8CC8> <8DCF> <8EFB> <8FE6> <99D5> <523B> <5374> <5404> <606A> <6164> <6BBC> <73CF> <811A> <89BA> <89D2> <95A3> <4F83> <520A> <58BE> <5978> <59E6> <5E72> <5E79> <61C7> <63C0> <6746> <67EC> <687F> <6F97> <764E> <770B> <78F5> <7A08> <7AFF> <7C21> <809D> <826E> <8271> <8AEB> <9593> <4E6B> <559D> <66F7> <6E34> <78A3> <7AED> <845B> <8910> <874E> <97A8> <52D8> <574E> <582A> <5D4C> <611F> <61BE> <6221> <6562> <67D1> <6A44> <6E1B> <7518> <75B3> <76E3> <77B0> <7D3A> <90AF> <9451> <9F95> <5323> <5CAC> <7532> <80DB> <9240> <9598> <525B> <5808> <59DC> <5CA1> <5D17> <5EB7> <5F3A> <5F4A> <6177> <6C5F> <757A> <7586> <7CE0> <7D73> <7DB1> <7F8C> <8154> <8221> endbfrange 100 beginbfrange <8591> <8941> <8B1B> <92FC> <964D> <9C47> <4ECB> <4EF7> <500B> <51F1> <584F> <6137> <613E> <6168> <6539> <69EA> <6F11> <75A5> <7686> <76D6> <7B87> <82A5> <84CB> <93A7> <958B> <5580> <5BA2> <5751> <7CB3> <7FB9> <91B5> <5028> <53BB> <5C45> <5DE8> <62D2> <636E> <64DA> <64E7> <6E20> <70AC> <795B> <8DDD> <8E1E> <907D> <9245> <92F8> <4E7E> <4EF6> <5065> <5DFE> <5EFA> <6106> <6957> <8171> <8654> <8E47> <9375> <9A2B> <4E5E> <5091> <6770> <6840> <5109> <528D> <5292> <6AA2> <77BC> <9210> <9ED4> <52AB> <602F> <8FF2> <5048> <61A9> <63ED> <64CA> <683C> <6A84> <6FC0> <8188> <89A1> <9694> <5805> <727D> <72AC> <7504> <7D79> <7E6D> <80A9> <898B> <8B74> <9063> <9D51> <6289> <6C7A> <6F54> endbfrange 100 beginbfrange <7D50> <7F3A> <8A23> <517C> <614A> <7B9D> <8B19> <9257> <938C> <4EAC> <4FD3> <501E> <50BE> <5106> <52C1> <52CD> <537F> <5770> <5883> <5E9A> <5F91> <6176> <61AC> <64CE> <656C> <666F> <66BB> <66F4> <6897> <6D87> <7085> <70F1> <749F> <74A5> <74CA> <75D9> <786C> <78EC> <7ADF> <7AF6> <7D45> <7D93> <8015> <803F> <811B> <8396> <8B66> <8F15> <9015> <93E1> <9803> <9838> <9A5A> <9BE8> <4FC2> <5553> <583A> <5951> <5B63> <5C46> <60B8> <6212> <6842> <68B0> <68E8> <6EAA> <754C> <7678> <78CE> <7A3D> <7CFB> <7E6B> <7E7C> <8A08> <8AA1> <8C3F> <968E> <9DC4> <53E4> <53E9> <544A> <5471> <56FA> <59D1> <5B64> <5C3B> <5EAB> <62F7> <6537> <6545> <6572> <66A0> <67AF> <69C1> <6CBD> <75FC> <7690> <777E> <7A3F> <7F94> endbfrange 100 beginbfrange <8003> <80A1> <818F> <82E6> <82FD> <83F0> <85C1> <8831> <88B4> <8AA5> <8F9C> <932E> <96C7> <9867> <9AD8> <9F13> <54ED> <659B> <66F2> <688F> <7A40> <8C37> <9D60> <56F0> <5764> <5D11> <6606> <68B1> <68CD> <6EFE> <7428> <889E> <9BE4> <6C68> <9AA8> <4F9B> <516C> <5171> <529F> <5B54> <5DE5> <6050> <606D> <62F1> <63A7> <653B> <73D9> <7A7A> <86A3> <8CA2> <978F> <4E32> <5BE1> <6208> <679C> <74DC> <79D1> <83D3> <8A87> <8AB2> <8DE8> <904E> <934B> <9846> <5ED3> <69E8> <85FF> <90ED> <51A0> <5B98> <5BEC> <6163> <68FA> <6B3E> <704C> <742F> <74D8> <7BA1> <7F50> <83C5> <89C0> <8CAB> <95DC> <9928> <522E> <605D> <62EC> <9002> <4F8A> <5149> <5321> <58D9> <5EE3> <66E0> <6D38> <709A> <72C2> endbfrange 100 beginbfrange <73D6> <7B50> <80F1> <945B> <5366> <639B> <7F6B> <4E56> <5080> <584A> <58DE> <602A> <6127> <62D0> <69D0> <9B41> <5B8F> <7D18> <80B1> <8F5F> <4EA4> <50D1> <54AC> <55AC> <5B0C> <5DA0> <5DE7> <652A> <654E> <6821> <6A4B> <72E1> <768E> <77EF> <7D5E> <7FF9> <81A0> <854E> <86DF> <8F03> <8F4E> <90CA> <9903> <9A55> <9BAB> <4E18> <4E45> <4E5D> <4EC7> <4FF1> <5177> <52FE> <5340> <53E3> <53E5> <548E> <5614> <5775> <57A2> <5BC7> <5D87> <5ED0> <61FC> <62D8> <6551> <67B8> <67E9> <69CB> <6B50> <6BC6> <6BEC> <6C42> <6E9D> <7078> <72D7> <7396> <7403> <77BF> <77E9> <7A76> <7D7F> <8009> <81FC> <8205> <820A> <82DF> <8862> <8B33> <8CFC> <8EC0> <9011> <90B1> <9264> <92B6> <99D2> <9A45> <9CE9> <9DD7> <9F9C> <570B> endbfrange 100 beginbfrange <5C40> <83CA> <97A0> <97AB> <9EB4> <541B> <7A98> <7FA4> <88D9> <8ECD> <90E1> <5800> <5C48> <6398> <7A9F> <5BAE> <5F13> <7A79> <7AAE> <828E> <8EAC> <5026> <5238> <52F8> <5377> <5708> <62F3> <6372> <6B0A> <6DC3> <7737> <53A5> <7357> <8568> <8E76> <95D5> <673A> <6AC3> <6F70> <8A6D> <8ECC> <994B> <6677> <6B78> <8CB4> <9B3C> <53EB> <572D> <594E> <63C6> <69FB> <73EA> <7845> <7ABA> <7AC5> <7CFE> <8475> <898F> <8D73> <9035> <95A8> <52FB> <5747> <7547> <7B60> <83CC> <921E> <6A58> <514B> <524B> <5287> <621F> <68D8> <6975> <9699> <50C5> <52A4> <52E4> <61C3> <65A4> <6839> <69FF> <747E> <7B4B> <82B9> <83EB> <89B2> <8B39> <8FD1> <9949> <4ECA> <5997> <64D2> <6611> <6A8E> <7434> endbfrange 100 beginbfrange <7981> <79BD> <82A9> <887E> <895F> <9326> <4F0B> <53CA> <6025> <6271> <6C72> <7D1A> <7D66> <4E98> <5162> <77DC> <80AF> <4F01> <4F0E> <5176> <5180> <55DC> <5668> <573B> <57FA> <57FC> <5914> <5947> <5993> <5BC4> <5C90> <5D0E> <5DF1> <5E7E> <5FCC> <6280> <65D7> <65E3> <671E> <675E> <68CB> <68C4> <6A5F> <6B3A> <6C23> <6C7D> <6C82> <6DC7> <7398> <7426> <742A> <7482> <74A3> <7578> <757F> <7881> <78EF> <7941> <7947> <797A> <7B95> <7D00> <7DBA> <7F88> <8006> <802D> <808C> <8A18> <8B4F> <8C48> <8D77> <9321> <9324> <98E2> <9951> <9A0E> <9A65> <9E92> <7DCA> <4F76> <5409> <62EE> <6854> <91D1> <55AB> <513A> <5A1C> <61E6> <62CF> <62FF> <90A3> <8AFE> <6696> endbfrange 100 beginbfrange <7156> <96E3> <634F> <637A> <5357> <678F> <6960> <6E73> <7537> <7D0D> <8872> <56CA> <5A18> <4E43> <5167> <5948> <67F0> <8010> <5973> <5E74> <649A> <79CA> <5FF5> <606C> <62C8> <637B> <5BE7> <5BD7> <52AA> <5974> <5F29> <6012> <7459> <99D1> <6FC3> <81BF> <8FB2> <60F1> <8166> <5C3F> <5AE9> <8A25> <677B> <7D10> <80FD> <5C3C> <6CE5> <533F> <6EBA> <591A> <8336> <4E39> <4EB6> <4F46> <55AE> <5718> <58C7> <5F56> <65B7> <65E6> <6A80> <6BB5> <6E4D> <77ED> <7AEF> <7C1E> <7DDE> <86CB> <8892> <9132> <935B> <64BB> <6FBE> <737A> <75B8> <9054> <5556> <574D> <61BA> <64D4> <66C7> endbfrange 100 beginbfrange <6DE1> <6E5B> <6F6D> <6FB9> <75F0> <8043> <81BD> <8541> <8983> <8AC7> <8B5A> <931F> <6C93> <7553> <7B54> <8E0F> <905D> <5510> <5802> <5858> <5E62> <6207> <649E> <68E0> <7576> <7CD6> <87B3> <9EE8> <4EE3> <5788> <576E> <5927> <5C0D> <5CB1> <5E36> <5F85> <6234> <64E1> <73B3> <81FA> <888B> <8CB8> <968A> <9EDB> <5B85> <5FB7> <60B3> <5012> <5200> <5230> <5716> <5835> <5857> <5C0E> <5C60> <5CF6> <5D8B> <5EA6> <5F92> <60BC> <6311> <6389> <6417> <6843> <68F9> <6AC2> <6DD8> <6E21> <6ED4> <6FE4> <71FE> <76DC> <7779> <79B1> <7A3B> <8404> <89A9> <8CED> <8DF3> <8E48> <9003> <9014> <9053> <90FD> <934D> <9676> <97DC> <6BD2> <7006> <7258> <72A2> <7368> <7763> <79BF> <7BE4> <7E9B> <8B80> <58A9> <60C7> <6566> endbfrange 100 beginbfrange <65FD> <66BE> <6C8C> <711E> <71C9> <8C5A> <9813> <4E6D> <7A81> <4EDD> <51AC> <51CD> <52D5> <540C> <61A7> <6771> <6850> <68DF> <6D1E> <6F7C> <75BC> <77B3> <7AE5> <80F4> <8463> <9285> <515C> <6597> <675C> <6793> <75D8> <7AC7> <8373> <8C46> <9017> <982D> <5C6F> <81C0> <829A> <9041> <906F> <920D> <5F97> <5D9D> <6A59> <71C8> <767B> <7B49> <85E4> <8B04> <9127> <9A30> <5587> <61F6> <7669> <7F85> <863F> <87BA> <88F8> <908F> <6D1B> <70D9> <73DE> <7D61> <843D> <916A> <99F1> <4E82> <5375> <6B04> <6B12> <703E> <721B> <862D> <9E1E> <524C> <8FA3> <5D50> <64E5> <652C> <6B16> <6FEB> <7C43> <7E9C> <85CD> <8964> <89BD> <62C9> <81D8> <881F> <5ECA> <6717> <6D6A> <72FC> <7405> endbfrange 100 beginbfrange <746F> <8782> <90DE> <4F86> <5D0D> <5FA0> <840A> <51B7> <63A0> <7565> <4EAE> <5006> <5169> <51C9> <6881> <6A11> <7CAE> <7CB1> <7CE7> <826F> <8AD2> <8F1B> <91CF> <4FB6> <5137> <52F5> <5442> <5EEC> <616E> <623E> <65C5> <6ADA> <6FFE> <792A> <85DC> <8823> <95AD> <9A62> <9A6A> <9E97> <9ECE> <529B> <66C6> <6B77> <701D> <792B> <8F62> <9742> <6190> <6200> <6523> <6F23> <7149> <7489> <7DF4> <806F> <84EE> <8F26> <9023> <934A> <51BD> <5217> <52A3> <6D0C> <70C8> <88C2> <5EC9> <6582> <6BAE> <6FC2> <7C3E> <7375> <4EE4> <4F36> <56F9> <5CBA> <5DBA> <601C> <73B2> <7B2D> <7F9A> <7FCE> <8046> <901E> <9234> <96F6> <9748> <9818> <9F61> <4F8B> <6FA7> <79AE> <91B4> <96B7> <52DE> <6488> <64C4> <6AD3> endbfrange 100 beginbfrange <6F5E> <7018> <7210> <76E7> <8001> <8606> <865C> <8DEF> <8F05> <9732> <9B6F> <9DFA> <9E75> <788C> <797F> <7DA0> <83C9> <9304> <9E7F> <9E93> <8AD6> <58DF> <5F04> <6727> <7027> <74CF> <7C60> <807E> <5121> <7028> <7262> <78CA> <8CC2> <8CDA> <8CF4> <96F7> <4E86> <50DA> <5BEE> <5ED6> <6599> <71CE> <7642> <77AD> <804A> <84FC> <907C> <9B27> <9F8D> <58D8> <5A41> <5C62> <6A13> <6DDA> <6F0F> <763B> <7D2F> <7E37> <851E> <8938> <93E4> <964B> <5289> <65D2> <67F3> <69B4> <6D41> <6E9C> <700F> <7409> <7460> <7559> <7624> <786B> <8B2C> <985E> <516D> <622E> <9678> <4F96> <502B> <5D19> <6DEA> <7DB8> <8F2A> <5F8B> <6144> <6817> <9686> <52D2> <808B> <51DC> <51CC> <695E> <7A1C> <7DBE> <83F1> <9675> <4FDA> endbfrange 100 beginbfrange <5229> <5398> <540F> <550E> <5C65> <60A7> <674E> <68A8> <6D6C> <7281> <72F8> <7406> <7483> <75E2> <7C6C> <7F79> <7FB8> <8389> <88CF> <88E1> <91CC> <91D0> <96E2> <9BC9> <541D> <6F7E> <71D0> <7498> <85FA> <8EAA> <96A3> <9C57> <9E9F> <6797> <6DCB> <7433> <81E8> <9716> <782C> <7ACB> <7B20> <7C92> <6469> <746A> <75F2> <78BC> <78E8> <99AC> <9B54> <9EBB> <5BDE> <5E55> <6F20> <819C> <83AB> <9088> <4E07> <534D> <5A29> <5DD2> <5F4E> <6162> <633D> <6669> <66FC> <6EFF> <6F2B> <7063> <779E> <842C> <8513> <883B> <8F13> <9945> <9C3B> <551C> <62B9> <672B> <6CAB> <8309> <896A> <977A> <4EA1> <5984> <5FD8> <671B> <7DB2> <7F54> <8292> <832B> <83BD> <8F1E> <9099> <57CB> <59B9> <5A92> <5BD0> <6627> <679A> endbfrange 100 beginbfrange <6885> <6BCF> <7164> <7F75> <8CB7> <8CE3> <9081> <9B45> <8108> <8C8A> <964C> <9A40> <9EA5> <5B5F> <6C13> <731B> <76F2> <76DF> <840C> <51AA> <8993> <514D> <5195> <52C9> <68C9> <6C94> <7704> <7720> <7DBF> <7DEC> <9762> <9EB5> <6EC5> <8511> <51A5> <540D> <547D> <660E> <669D> <6927> <6E9F> <76BF> <7791> <8317> <84C2> <879F> <9169> <9298> <9CF4> <8882> <4FAE> <5192> <52DF> <59C6> <5E3D> <6155> <6478> <66AE> <67D0> <6A21> <6BCD> <6BDB> <725F> <7261> <7441> <7738> <77DB> <8017> <82BC> <8305> <8B00> <8B28> <8C8C> <6728> <6C90> <7267> <76EE> <7766> <7A46> <9DA9> <6B7F> <6C92> <5922> <6726> <8499> <536F> <5893> <5999> <5EDF> <63CF> <6634> <6773> <6E3A> <732B> <7AD7> <82D7> <9328> <52D9> <5DEB> <61AE> endbfrange 100 beginbfrange <61CB> <620A> <62C7> <64AB> <65E0> <6959> <6B66> <6BCB> <7121> <73F7> <755D> <7E46> <821E> <8302> <856A> <8AA3> <8CBF> <9727> <9D61> <58A8> <9ED8> <5011> <520E> <543B> <554F> <6587> <6C76> <7D0A> <805E> <868A> <9580> <96EF> <52FF> <6C95> <7269> <5473> <5A9A> <5C3E> <5D4B> <5F4C> <5FAE> <672A> <68B6> <6963> <6E3C> <6E44> <7709> <7C73> <7F8E> <8587> <8B0E> <8FF7> <9761> <9EF4> <5CB7> <60B6> <610D> <61AB> <654F> <65FB> <6C11> <6CEF> <739F> <73C9> <7DE1> <9594> <5BC6> <871C> <8B10> <525D> <535A> <62CD> <640F> <64B2> <6734> <6A38> <6CCA> <73C0> <749E> <7B94> <7C95> <7E1B> <818A> <8236> <8584> <8FEB> <96F9> <99C1> <4F34> <534A> <53CD> <53DB> <62CC> <642C> <6500> <6591> <69C3> <6CEE> <6F58> <73ED> endbfrange 100 beginbfrange <7554> <7622> <76E4> <76FC> <78D0> <78FB> <792C> <7D46> <822C> <87E0> <8FD4> <9812> <98EF> <52C3> <62D4> <64A5> <6E24> <6F51> <767C> <8DCB> <91B1> <9262> <9AEE> <9B43> <5023> <508D> <574A> <59A8> <5C28> <5E47> <5F77> <623F> <653E> <65B9> <65C1> <6609> <678B> <699C> <6EC2> <78C5> <7D21> <80AA> <8180> <822B> <82B3> <84A1> <868C> <8A2A> <8B17> <90A6> <9632> <9F90> <500D> <4FF3> <57F9> <5F98> <62DC> <6392> <676F> <6E43> <7119> <76C3> <80CC> <80DA> <88F4> <8919> <8CE0> <8F29> <914D> <966A> <4F2F> <4F70> <5E1B> <67CF> <6822> <767D> <9B44> <5E61> <6A0A> <7169> <71D4> <756A> <7E41> <8543> <85E9> <98DC> <4F10> <7B4F> <7F70> <95A5> <51E1> <5E06> <68B5> <6C3E> <6C4E> <6CDB> <72AF> <7BC4> endbfrange 100 beginbfrange <8303> <6CD5> <743A> <50FB> <5288> <58C1> <64D8> <6A97> <74A7> <7656> <78A7> <8617> <95E2> <9739> <535E> <5F01> <8B8A> <8FA8> <8FAF> <908A> <5225> <77A5> <9C49> <9F08> <4E19> <5002> <5175> <5C5B> <5E77> <661E> <663A> <67C4> <68C5> <70B3> <7501> <75C5> <79C9> <7ADD> <8F27> <9920> <9A08> <4FDD> <5821> <5831> <5BF6> <666E> <6B65> <6D11> <6E7A> <6F7D> <73E4> <752B> <83E9> <88DC> <8913> <8B5C> <8F14> <4F0F> <50D5> <5310> <535C> <5B93> <5FA9> <670D> <798F> <8179> <832F> <8514> <8907> <8986> <8F39> <8F3B> <99A5> <9C12> <672C> <4E76> <4FF8> <5949> <5C01> <5CEF> <6367> <68D2> <70FD> <71A2> <742B> <7E2B> <84EC> <8702> <9022> <92D2> <9CF3> <4E0D> <4ED8> <4FEF> <5085> <5256> <526F> <5426> <5490> endbfrange 100 beginbfrange <57E0> <592B> <5A66> <5B5A> <5B75> <5BCC> <5E9C> <6276> <6577> <65A7> <6D6E> <6EA5> <7236> <7B26> <7C3F> <7F36> <8150> <819A> <8240> <8299> <83A9> <8A03> <8CA0> <8CE6> <8CFB> <8D74> <8DBA> <90E8> <91DC> <961C> <9644> <99D9> <9CE7> <5317> <5206> <5429> <5674> <58B3> <5954> <596E> <5FFF> <61A4> <626E> <6610> <6C7E> <711A> <76C6> <7C89> <7CDE> <7D1B> <82AC> <8CC1> <96F0> <4F5B> <5F17> <5F7F> <62C2> <5D29> <670B> <68DA> <787C> <7E43> <9D6C> <4E15> <5099> <5315> <532A> <5351> <5983> <5A62> <5E87> <60B2> <618A> <6249> <6279> <6590> <6787> <69A7> <6BD4> <6BD6> <6CB8> <7435> <75FA> <7812> <7891> <79D5> <79D8> <7C83> <7DCB> <7FE1> <80A5> <813E> <81C2> <83F2> <871A> <88E8> <8AB9> endbfrange 100 beginbfrange <8B6C> <8CBB> <9119> <975E> <98DB> <9F3B> <56AC> <5B2A> <5F6C> <658C> <6AB3> <6BAF> <6D5C> <6FF1> <7015> <725D> <73AD> <8CA7> <8CD3> <983B> <6191> <6C37> <8058> <9A01> <4E4D> <4E8B> <4E9B> <4ED5> <4F3A> <4F3C> <4F7F> <4FDF> <50FF> <53F2> <53F8> <5506> <55E3> <56DB> <58EB> <5962> <5A11> <5BEB> <5BFA> <5C04> <5DF3> <5E2B> <5F99> <601D> <6368> <659C> <65AF> <67F6> <67FB> <68AD> <6B7B> <6C99> <6CD7> <6E23> <7009> <7345> <7802> <793E> <7940> <7960> <79C1> <7BE9> <7D17> <7D72> <8086> <820D> <838E> <84D1> <86C7> <88DF> <8A50> <8A5E> <8B1D> <8CDC> <8D66> <8FAD> <90AA> <98FC> <99DF> <9E9D> <524A> <6714> <5098> <522A> <5C71> <6563> <6C55> <73CA> <7523> <759D> <7B97> <849C> <9178> <9730> endbfrange 100 beginbfrange <4E77> <6492> <6BBA> <715E> <85A9> <4E09> <6749> <68EE> <6E17> <829F> <8518> <886B> <63F7> <6F81> <9212> <98AF> <4E0A> <50B7> <50CF> <511F> <5546> <55AA> <5617> <5B40> <5C19> <5CE0> <5E38> <5E8A> <5EA0> <5EC2> <60F3> <6851> <6A61> <6E58> <723D> <7240> <72C0> <76F8> <7965> <7BB1> <7FD4> <88F3> <89F4> <8A73> <8C61> <8CDE> <971C> <585E> <74BD> <8CFD> <55C7> <7A61> <7D22> <8272> <7272> <751F> <7525> <7B19> <5885> <58FB> <5DBC> <5E8F> <5EB6> <5F90> <6055> <6292> <637F> <654D> <6691> <66D9> <66F8> <6816> <68F2> <7280> <745E> <7B6E> <7D6E> <7DD6> <7F72> <80E5> <8212> <85AF> <897F> <8A93> <901D> <92E4> <9ECD> <9F20> <5915> <596D> <5E2D> <60DC> <6614> <6673> <6790> <6C50> <6DC5> endbfrange 100 beginbfrange <6F5F> <77F3> <78A9> <84C6> <91CB> <932B> <4ED9> <50CA> <5148> <5584> <5B0B> <5BA3> <6247> <657E> <65CB> <6E32> <717D> <7401> <7444> <7487> <74BF> <766C> <79AA> <7DDA> <7E55> <7FA8> <817A> <81B3> <8239> <861A> <87EC> <8A75> <8DE3> <9078> <9291> <9425> <994D> <9BAE> <5368> <5C51> <6954> <6CC4> <6D29> <6E2B> <820C> <859B> <893B> <8A2D> <8AAA> <96EA> <9F67> <5261> <66B9> <6BB2> <7E96> <87FE> <8D0D> <9583> <965D> <651D> <6D89> <71EE> <57CE> <59D3> <5BAC> <6027> <60FA> <6210> <661F> <665F> <7329> <73F9> <76DB> <7701> <7B6C> <8056> <8072> <8165> <8AA0> <9192> <4E16> <52E2> <6B72> <6D17> <7A05> <7B39> <7D30> <8CB0> <53EC> <562F> <5851> <5BB5> <5C0F> <5C11> <5DE2> <6240> <6383> <6414> endbfrange 100 beginbfrange <662D> <68B3> <6CBC> <6D88> <6EAF> <701F> <70A4> <71D2> <7526> <758F> <758E> <7619> <7B11> <7BE0> <7C2B> <7D20> <7D39> <852C> <856D> <8607> <8A34> <900D> <9061> <90B5> <92B7> <97F6> <9A37> <4FD7> <5C6C> <675F> <6D91> <7C9F> <7E8C> <8B16> <8D16> <901F> <5B6B> <5DFD> <640D> <84C0> <905C> <98E1> <7387> <5B8B> <609A> <677E> <6DDE> <8A1F> <8AA6> <9001> <980C> <5237> <7051> <788E> <9396> <8870> <91D7> <4FEE> <53D7> <55FD> <56DA> <5782> <58FD> <5AC2> <5B88> <5CAB> <5CC0> <5E25> <6101> <620D> <624B> <6388> <641C> <6536> <6578> <6A39> <6B8A> <6C34> <6D19> <6F31> <71E7> <72E9> <7378> <7407> <74B2> <7626> <7761> <79C0> <7A57> <7AEA> <7CB9> <7D8F> <7DAC> <7E61> <7F9E> <8129> <8331> <8490> <84DA> endbfrange 100 beginbfrange <85EA> <8896> <8AB0> <8B90> <8F38> <9042> <9083> <916C> <9296> <92B9> <968B> <96A7> <96D6> <9700> <9808> <9996> <9AD3> <9B1A> <53D4> <587E> <5919> <5B70> <5BBF> <6DD1> <6F5A> <719F> <7421> <74B9> <8085> <83FD> <5DE1> <5F87> <5FAA> <6042> <65EC> <6812> <696F> <6A53> <6B89> <6D35> <6DF3> <73E3> <76FE> <77AC> <7B4D> <7D14> <8123> <821C> <8340> <84F4> <8563> <8A62> <8AC4> <9187> <931E> <9806> <99B4> <620C> <8853> <8FF0> <9265> <5D07> <5D27> <5D69> <745F> <819D> <8768> <6FD5> <62FE> <7FD2> <8936> <8972> <4E1E> <4E58> <50E7> <52DD> <5347> <627F> <6607> <7E69> <8805> <965E> <4F8D> <5319> <5636> <59CB> <5AA4> <5C38> <5C4E> <5C4D> <5E02> <5F11> <6043> <65BD> <662F> <6642> <67BE> <67F4> <731C> <77E2> endbfrange 100 beginbfrange <793A> <7FC5> <8494> <84CD> <8996> <8A66> <8A69> <8AE1> <8C55> <8C7A> <57F4> <5BD4> <5F0F> <606F> <62ED> <690D> <6B96> <6E5C> <7184> <7BD2> <8755> <8B58> <8EFE> <98DF> <98FE> <4F38> <4F81> <4FE1> <547B> <5A20> <5BB8> <613C> <65B0> <6668> <71FC> <7533> <795E> <7D33> <814E> <81E3> <8398> <85AA> <85CE> <8703> <8A0A> <8EAB> <8F9B> <8FC5> <5931> <5BA4> <5BE6> <6089> <5BE9> <5C0B> <5FC3> <6C81> <6DF1> <700B> <751A> <82AF> <8AF6> <4EC0> <5341> <96D9> <6C0F> <4E9E> <4FC4> <5152> <555E> <5A25> <5CE8> <6211> <7259> <82BD> <83AA> <86FE> <8859> <8A1D> <963F> <96C5> <9913> <9D09> <9D5D> <580A> <5CB3> <5DBD> <5E44> <60E1> <6115> <63E1> <6A02> <6E25> <9102> <9354> <984E> <9C10> <9F77> endbfrange 100 beginbfrange <5B89> <5CB8> <6309> <664F> <6848> <773C> <96C1> <978D> <9854> <9B9F> <65A1> <8B01> <8ECB> <95BC> <5535> <5CA9> <5DD6> <5EB5> <6697> <764C> <83F4> <95C7> <58D3> <62BC> <72CE> <9D28> <4EF0> <592E> <600F> <663B> <6B83> <79E7> <9D26> <5393> <54C0> <57C3> <5D16> <611B> <66D6> <6DAF> <788D> <827E> <9698> <9744> <5384> <627C> <6396> <6DB2> <7E0A> <814B> <984D> <6AFB> <7F4C> <9DAF> <9E1A> <4E5F> <503B> <51B6> <591C> <60F9> <63F6> <6930> <723A> <8036> <91CE> <5F31> <7D04> <82E5> <846F> <84BB> <85E5> <8E8D> <4F6F> <58E4> <5B43> <6059> <63DA> <6518> <656D> <6698> <694A> <6A23> <6D0B> <7001> <716C> <75D2> <760D> <79B3> <7A70> <7F8A> <8944> <8B93> endbfrange 100 beginbfrange <91C0> <967D> <990A> <5704> <5FA1> <65BC> <6F01> <7600> <79A6> <8A9E> <99AD> <9B5A> <9F6C> <5104> <61B6> <6291> <6A8D> <81C6> <5043> <5830> <5F66> <7109> <8A00> <8AFA> <5B7C> <8616> <4FFA> <513C> <56B4> <5944> <63A9> <6DF9> <5DAA> <696D> <5186> <4E88> <4F59> <5982> <6B5F> <6C5D> <74B5> <7916> <8207> <8245> <8339> <8F3F> <8F5D> <9918> <4EA6> <57DF> <5F79> <6613> <75AB> <7E79> <8B6F> <9006> <9A5B> <56A5> <5827> <59F8> <5A1F> <5BB4> <5EF6> <6350> <633B> <693D> <6C87> <6CBF> <6D8E> <6D93> <6DF5> <6F14> <70DF> <7136> <7159> <71C3> <71D5> <784F> <786F> <7B75> <7DE3> endbfrange 100 beginbfrange <7E2F> <884D> <8EDF> <925B> <9CF6> <6085> <6D85> <71B1> <95B1> <53AD> <67D3> <708E> <7130> <7430> <8276> <82D2> <95BB> <9AE5> <9E7D> <66C4> <71C1> <8449> <584B> <5DB8> <5F71> <6620> <668E> <6979> <69AE> <6C38> <6CF3> <6E36> <6F41> <6FDA> <701B> <702F> <7150> <71DF> <7370> <745B> <74D4> <76C8> <7A4E> <7E93> <82F1> <8A60> <8FCE> <9348> <9719> <4E42> <502A> <5208> <53E1> <66F3> <6C6D> <6FCA> <730A> <777F> <7A62> <82AE> <85DD> <8602> <88D4> <8A63> <8B7D> <8C6B> <92B3> <9713> <9810> <4E94> <4F0D> <4FC9> <50B2> <5348> <543E> <5433> <55DA> endbfrange 100 beginbfrange <5862> <58BA> <5967> <5A1B> <5BE4> <609F> <61CA> <6556> <65FF> <6664> <68A7> <6C5A> <6FB3> <70CF> <71AC> <7352> <7B7D> <8708> <8AA4> <9C32> <9F07> <5C4B> <6C83> <7344> <7389> <923A> <6EAB> <7465> <761F> <7A69> <7E15> <860A> <5140> <58C5> <64C1> <74EE> <7515> <7670> <7FC1> <9095> <96CD> <9954> <6E26> <74E6> <7AA9> <81E5> <86D9> <8778> <8A1B> <5A49> <5B8C> <5B9B> <68A1> <6900> <6D63> <73A9> <7413> <742C> <7897> <7DE9> <7FEB> <8118> <8155> <839E> <8C4C> <962E> <9811> <66F0> <5F80> <65FA> <6789> <6C6A> <738B> <502D> <5A03> <6B6A> <77EE> <5916> <5D6C> <5DCD> <7325> <754F> <50E5> <51F9> <582F> <592D> <5996> <59DA> <5BE5> <5DA2> <62D7> <6416> <6493> <64FE> <66DC> endbfrange 100 beginbfrange <6A48> <71FF> <7464> <7A88> <7AAF> <7E47> <7E5E> <8000> <8170> <87EF> <8981> <8B20> <9059> <9080> <9952> <617E> <6B32> <6D74> <7E1F> <8925> <8FB1> <4FD1> <50AD> <5197> <52C7> <57C7> <5889> <5BB9> <5EB8> <6142> <6995> <6D8C> <6E67> <6EB6> <7194> <7462> <7528> <752C> <8073> <8338> <84C9> <8E0A> <9394> <93DE> <4E8E> <4F51> <5076> <512A> <53C8> <53CB> <53F3> <5B87> <5BD3> <5C24> <611A> <6182> <65F4> <725B> <7397> <7440> <76C2> <7950> <7991> <79B9> <7D06> <7FBD> <828B> <85D5> <865E> <8FC2> <9047> <90F5> <91EA> <9685> <96E8> <52D6> <5F67> <65ED> <6631> <682F> <715C> <7A36> <90C1> <980A> <4E91> <6A52> <6B9E> <6F90> <7189> <8018> <82B8> <8553> <904B> <9695> endbfrange 100 beginbfrange <96F2> <97FB> <851A> <9B31> <4E90> <718A> <96C4> <5143> <539F> <54E1> <5713> <5712> <57A3> <5A9B> <5AC4> <5BC3> <6028> <613F> <63F4> <6C85> <6D39> <6E72> <6E90> <7230> <733F> <7457> <82D1> <8881> <8F45> <9060> <9662> <9858> <9D1B> <6708> <8D8A> <925E> <4F4D> <5049> <50DE> <5371> <570D> <59D4> <5A01> <5C09> <6170> <6690> <6E2D> <7232> <744B> <7DEF> <80C3> <840E> <8466> <853F> <875F> <885B> <8918> <8B02> <9055> <97CB> <9B4F> <4E73> <4F91> <5112> <516A> <552F> <55A9> <5B7A> <5BA5> <5E7C> <5EBE> <60A0> <60DF> <6108> <63C4> <6538> <6709> <67D4> <67DA> <6961> <6CB9> <6D27> <6E38> <6FE1> <7336> <745C> <7531> <7652> <7DAD> <81FE> <8438> endbfrange 100 beginbfrange <88D5> <8A98> <8ADB> <8AED> <8E30> <8E42> <904A> <903E> <907A> <9149> <91C9> <936E> <5809> <6BD3> <8089> <80B2> <5141> <596B> <5C39> <6F64> <73A7> <80E4> <8D07> <9217> <958F> <807F> <620E> <701C> <7D68> <878D> <57A0> <6069> <6147> <6BB7> <8ABE> <9280> <96B1> <4E59> <541F> <6DEB> <852D> <9670> <97F3> <98EE> <63D6> <6CE3> <9091> <51DD> <61C9> <81BA> <9DF9> <4F9D> <501A> <5100> <5B9C> <610F> <61FF> <64EC> <6905> <6BC5> <7591> <77E3> <7FA9> <8264> <858F> <87FB> <8863> <8ABC> <8B70> <91AB> <4E8C> <4EE5> <4F0A> <5937> <59E8> <5DF2> <5F1B> <5F5B> <6021> <723E> <73E5> <7570> <75CD> <79FB> <800C> <8033> <8084> endbfrange 100 beginbfrange <82E1> <8351> <8CBD> <8CB3> <9087> <98F4> <990C> <7037> <76CA> <7FCA> <7FCC> <7FFC> <8B1A> <4EBA> <4EC1> <5203> <5370> <54BD> <56E0> <59FB> <5BC5> <5F15> <5FCD> <6E6E> <7D6A> <8335> <8693> <8A8D> <976D> <9777> <4E00> <4F5A> <4F7E> <58F9> <65E5> <6EA2> <9038> <93B0> <99B9> <4EFB> <58EC> <598A> <59D9> <6041> <7A14> <834F> <8CC3> <5165> <5344> <4ECD> <5269> <5B55> <82BF> <4ED4> <523A> <54A8> <59C9> <59FF> <5B50> <5B57> <5B5C> <6063> <6148> <6ECB> <7099> <716E> <7386> <74F7> <75B5> <78C1> <7D2B> <8005> <81EA> <8328> <8517> <85C9> <8AEE> <8CC7> <96CC> <4F5C> <52FA> <56BC> <65AB> <6628> <707C> <70B8> <7235> <7DBD> <828D> endbfrange 100 beginbfrange <914C> <96C0> <9D72> <5B71> <68E7> <6B98> <6F7A> <76DE> <5C91> <66AB> <6F5B> <7BB4> <7C2A> <8836> <96DC> <4E08> <4ED7> <5320> <5834> <58BB> <58EF> <596C> <5C07> <5E33> <5E84> <5F35> <638C> <66B2> <6756> <6A1F> <6AA3> <6B0C> <6F3F> <7246> <7350> <748B> <7AE0> <7CA7> <8178> <81DF> <81E7> <838A> <846C> <8523> <8594> <85CF> <88DD> <8D13> <91AC> <9577> <969C> <518D> <54C9> <5728> <5BB0> <624D> <6750> <683D> <6893> <6E3D> <6ED3> <707D> <7E21> <88C1> <8CA1> <8F09> <9F4B> <9F4E> <722D> <7B8F> <8ACD> <931A> <4F47> <4F4E> <5132> <5480> <59D0> <5E95> <62B5> <6775> <696E> <6A17> <6CAE> <6E1A> <72D9> <732A> <75BD> <7BB8> <7D35> <82E7> <83F9> <8457> <85F7> <8A5B> <8CAF> <8E87> <9019> <90B8> <96CE> endbfrange 100 beginbfrange <9F5F> <52E3> <540A> <5AE1> <5BC2> <6458> <6575> <6EF4> <72C4> <7684> <7A4D> <7B1B> <7C4D> <7E3E> <7FDF> <837B> <8B2B> <8CCA> <8D64> <8DE1> <8E5F> <8FEA> <8FF9> <9069> <93D1> <4F43> <4F7A> <50B3> <5168> <5178> <524D> <526A> <5861> <587C> <5960> <5C08> <5C55> <5EDB> <609B> <6230> <6813> <6BBF> <6C08> <6FB1> <714E> <7420> <7530> <7538> <7551> <7672> <7B4C> <7B8B> <7BAD> <7BC6> <7E8F> <8A6E> <8F3E> <8F49> <923F> <9293> <9322> <942B> <96FB> <985A> <986B> <991E> <5207> <622A> <6298> <6D59> <7664> <7ACA> <7BC0> <7D76> <5360> <5CBE> <5E97> <6F38> <70B9> <7C98> <9711> <9B8E> <9EDE> <63A5> <647A> <8776> <4E01> <4E95> <4EAD> <505C> <5075> <5448> <59C3> <5B9A> <5E40> <5EAD> <5EF7> <5F81> <60C5> endbfrange 100 beginbfrange <633A> <653F> <6574> <65CC> <6676> <6678> <67FE> <6968> <6A89> <6B63> <6C40> <6DC0> <6DE8> <6E1F> <6E5E> <701E> <70A1> <738E> <73FD> <753A> <775B> <7887> <798E> <7A0B> <7A7D> <7CBE> <7D8E> <8247> <8A02> <8AEA> <8C9E> <912D> <914A> <91D8> <9266> <92CC> <9320> <9706> <9756> <975C> <9802> <9F0E> <5236> <5291> <557C> <5824> <5E1D> <5F1F> <608C> <63D0> <68AF> <6FDF> <796D> <7B2C> <81CD> <85BA> <88FD> <8AF8> <8E44> <918D> <9664> <969B> <973D> <984C> <9F4A> <4FCE> <5146> <51CB> <52A9> <5632> <5F14> <5F6B> <63AA> <64CD> <65E9> <6641> <66FA> <66F9> <671D> <689D> <68D7> <69FD> <6F15> <6F6E> <7167> <71E5> <722A> <74AA> <773A> <7956> <795A> <79DF> <7A20> <7A95> <7C97> <7CDF> <7D44> <7E70> <8087> <85FB> endbfrange 100 beginbfrange <86A4> <8A54> <8ABF> <8D99> <8E81> <9020> <906D> <91E3> <963B> <96D5> <9CE5> <65CF> <7C07> <8DB3> <93C3> <5B58> <5C0A> <5352> <62D9> <731D> <5027> <5B97> <5F9E> <60B0> <616B> <68D5> <6DD9> <742E> <7A2E> <7D42> <7D9C> <7E31> <816B> <8E2A> <8E35> <937E> <9418> <4F50> <5750> <5DE6> <5EA7> <632B> <7F6A> <4E3B> <4F4F> <4F8F> <505A> <59DD> <80C4> <546A> <5468> <55FE> <594F> <5B99> <5DDE> <5EDA> <665D> <6731> <67F1> <682A> <6CE8> <6D32> <6E4A> <6F8D> <70B7> <73E0> <7587> <7C4C> <7D02> <7D2C> <7DA2> <821F> <86DB> <8A3B> <8A85> <8D70> <8E8A> <8F33> <9031> <914E> <9152> <9444> <99D0> <7AF9> <7CA5> <4FCA> <5101> <51C6> <57C8> <5BEF> <5CFB> <6659> <6A3D> <6D5A> <6E96> <6FEC> <710C> <756F> <7AE3> <8822> endbfrange 100 beginbfrange <9021> <9075> <96CB> <99FF> <8301> <4E2D> <4EF2> <8846> <91CD> <537D> <6ADB> <696B> <6C41> <847A> <589E> <618E> <66FE> <62EF> <70DD> <7511> <75C7> <7E52> <84B8> <8B49> <8D08> <4E4B> <53EA> <54AB> <5730> <5740> <5FD7> <6301> <6307> <646F> <652F> <65E8> <667A> <679D> <67B3> <6B62> <6C60> <6C9A> <6F2C> <77E5> <7825> <7949> <7957> <7D19> <80A2> <8102> <81F3> <829D> <82B7> <8718> <8A8C> <8D04> <8DBE> <9072> <76F4> <7A19> <7A37> <7E54> <8077> <5507> <55D4> <5875> <632F> <6422> <6649> <664B> <686D> <699B> <6B84> <6D25> <6EB1> <73CD> <7468> <74A1> <755B> <75B9> <76E1> <771E> <778B> <79E6> <7E09> <7E1D> <81FB> <852F> <8897> <8A3A> <8CD1> <8EEB> <8FB0> <9032> <93AD> <9663> <9673> <9707> <4F84> endbfrange 100 beginbfrange <53F1> <59EA> <5AC9> <5E19> <684E> <74C6> <75BE> <79E9> <7A92> <81A3> <86ED> <8CEA> <8DCC> <8FED> <659F> <6715> <57F7> <6F57> <7DDD> <8F2F> <93F6> <96C6> <5FB5> <61F2> <6F84> <4E14> <4F98> <501F> <53C9> <55DF> <5D6F> <5DEE> <6B21> <6B64> <78CB> <7B9A> <8E49> <8ECA> <906E> <6349> <643E> <7740> <7A84> <932F> <947F> <9F6A> <64B0> <6FAF> <71E6> <74A8> <74DA> <7AC4> <7C12> <7E82> <7CB2> <7E98> <8B9A> <8D0A> <947D> <9910> <994C> <5239> <5BDF> <64E6> <672D> <7D2E> <50ED> <53C3> <5879> <6158> <61FA> <65AC> <7AD9> <8B92> <8B96> <5009> <5021> <5275> <5531> <5A3C> <5EE0> <5F70> <6134> <655E> <660C> <6636> <66A2> <69CD> <6EC4> <6F32> <7316> <7621> <7A93> <8139> <8259> <83D6> <84BC> <50B5> endbfrange 100 beginbfrange <57F0> <5BC0> <5BE8> <5F69> <63A1> <7826> <7DB5> <83DC> <8521> <91C7> <91F5> <518A> <67F5> <7B56> <8CAC> <51C4> <59BB> <60BD> <8655> <501C> <5254> <5C3A> <617D> <621A> <62D3> <64F2> <65A5> <6ECC> <7620> <810A> <8E60> <965F> <96BB> <4EDF> <5343> <5598> <5929> <5DDD> <64C5> <6CC9> <6DFA> <7394> <7A7F> <821B> <85A6> <8CE4> <8E10> <9077> <91E7> <95E1> <9621> <97C6> <51F8> <54F2> <5586> <5FB9> <64A4> <6F88> <7DB4> <8F1F> <8F4D> <9435> <50C9> <5C16> <6CBE> <6DFB> <751B> <77BB> <7C3D> <7C64> <8A79> <8AC2> <581E> <59BE> <5E16> <6377> <7252> <758A> <776B> <8ADC> <8CBC> <8F12> <5EF3> <6674> <6DF8> <807D> <83C1> <8ACB> <9751> <9BD6> <5243> <66FF> <6D95> <6EEF> <7DE0> <8AE6> <902E> <905E> endbfrange 100 beginbfrange <9AD4> <521D> <527F> <54E8> <6194> <6284> <62DB> <68A2> <6912> <695A> <6A35> <7092> <7126> <785D> <7901> <790E> <79D2> <7A0D> <8096> <8278> <82D5> <8349> <8549> <8C82> <8D85> <9162> <918B> <91AE> <4FC3> <56D1> <71ED> <77D7> <8700> <89F8> <5BF8> <5FD6> <6751> <90A8> <53E2> <585A> <5BF5> <60A4> <6181> <6460> <7E3D> <8070> <8525> <9283> <64AE> <50AC> <5D14> <6700> <589C> <62BD> <63A8> <690E> <6978> <6A1E> <6E6B> <76BA> <79CB> <82BB> <8429> <8ACF> <8DA8> <8FFD> <9112> <914B> <919C> <9310> <9318> <939A> <96DB> <9A36> <9C0D> <4E11> <755C> <795D> <7AFA> <7B51> <7BC9> <7E2E> <84C4> <8E59> <8E74> <8EF8> <9010> <6625> <693F> <7443> <51FA> <672E> <9EDC> <5145> <5FE0> <6C96> <87F2> <885D> <8877> <60B4> endbfrange 100 beginbfrange <81B5> <8403> <8D05> <53D6> <5439> <5634> <5A36> <5C31> <708A> <7FE0> <805A> <8106> <81ED> <8DA3> <9189> <9A5F> <9DF2> <5074> <4EC4> <53A0> <60FB> <6E2C> <5C64> <4F88> <5024> <55E4> <5CD9> <5E5F> <6065> <6894> <6CBB> <6DC4> <71BE> <75D4> <75F4> <7661> <7A1A> <7A49> <7DC7> <7DFB> <7F6E> <81F4> <86A9> <8F1C> <96C9> <99B3> <9F52> <5247> <52C5> <98ED> <89AA> <4E03> <67D2> <6F06> <4FB5> <5BE2> <6795> <6C88> <6D78> <741B> <7827> <91DD> <937C> <87C4> <79E4> <7A31> <5FEB> <4ED6> <54A4> <553E> <58AE> <59A5> <60F0> <6253> <62D6> <6736> <6955> <8235> <9640> <99B1> <99DD> <502C> <5353> <5544> <577C> <6258> <64E2> <666B> <67DD> <6FC1> <6FEF> <7422> <7438> <8A17> <9438> <5451> <5606> <5766> endbfrange 100 beginbfrange <5F48> <619A> <6B4E> <7058> <70AD> <7DBB> <8A95> <596A> <812B> <63A2> <7708> <803D> <8CAA> <5854> <642D> <69BB> <5B95> <5E11> <6E6F> <8569> <514C> <53F0> <592A> <6020> <614B> <6B86> <6C70> <6CF0> <7B1E> <80CE> <82D4> <8DC6> <90B0> <98B1> <64C7> <6FA4> <6491> <6504> <514E> <5410> <571F> <8A0E> <615F> <6876> <75DB> <7B52> <7D71> <901A> <5806> <69CC> <817F> <892A> <9000> <9839> <5078> <5957> <59AC> <6295> <900F> <9B2A> <615D> <7279> <95D6> <5761> <5A46> <5DF4> <628A> <64AD> <64FA> <6777> <6CE2> <6D3E> <722C> <7436> <7834> <7F77> <82AD> <8DDB> <9817> <5224> <5742> <677F> <7248> <74E3> <8CA9> <8FA6> <9211> <962A> <516B> <53ED> <634C> <4F69> <5504> <6096> <6557> <6C9B> <6D7F> endbfrange 100 beginbfrange <724C> <72FD> <7A17> <8987> <8C9D> <5F6D> <6F8E> <70F9> <81A8> <610E> <4FBF> <504F> <6241> <7247> <7BC7> <7DE8> <7FE9> <904D> <97AD> <9A19> <8CB6> <576A> <5E73> <67B0> <840D> <8A55> <5420> <5B16> <5E63> <5EE2> <5F0A> <6583> <80BA> <853D> <9589> <965B> <4F48> <5305> <530D> <530F> <5486> <54FA> <5703> <5E03> <6016> <629B> <62B1> <6355> <6CE1> <6D66> <75B1> <7832> <80DE> <812F> <82DE> <8461> <84B2> <888D> <8912> <900B> <92EA> <98FD> <9B91> <5E45> <66B4> <66DD> <7011> <7206> <4FF5> <527D> <5F6A> <6153> <6753> <6A19> <6F02> <74E2> <7968> <8868> <8C79> <98C7> <98C4> <9A43> <54C1> <7A1F> <6953> <8AF7> <8C4A> <98A8> <99AE> <5F7C> <62AB> <75B2> <76AE> <88AB> <907F> <9642> <5339> <5F3C> endbfrange 100 beginbfrange <5FC5> <6CCC> <73CC> <7562> <758B> <7B46> <82FE> <999D> <4E4F> <903C> <4E0B> <4F55> <53A6> <590F> <5EC8> <6630> <6CB3> <7455> <8377> <8766> <8CC0> <9050> <971E> <9C15> <58D1> <5B78> <8650> <8B14> <9DB4> <5BD2> <6068> <608D> <65F1> <6C57> <6F22> <6FA3> <701A> <7F55> <7FF0> <9591> <9650> <97D3> <5272> <8F44> <51FD> <542B> <54B8> <5563> <558A> <6ABB> <6DB5> <7DD8> <8266> <929C> <9677> <9E79> <5408> <54C8> <76D2> <86E4> <95A4> <95D4> <965C> <4EA2> <4F09> <59EE> <5AE6> <5DF7> <6052> <6297> <676D> <6841> <6C86> <6E2F> <7F38> <809B> <822A> <9805> <4EA5> <5055> <54B3> <5793> <595A> <5B69> <5BB3> <61C8> <6977> <6D77> <7023> <87F9> <89E3> <8A72> <8AE7> <9082> <99ED> <9AB8> <52BE> <6838> <5016> endbfrange 100 beginbfrange <5E78> <674F> <8347> <884C> <4EAB> <5411> <56AE> <73E6> <9115> <97FF> <9909> <9957> <9999> <5653> <589F> <865B> <8A31> <61B2> <6AF6> <737B> <8ED2> <6B47> <96AA> <9A57> <5955> <7200> <8D6B> <9769> <4FD4> <5CF4> <5F26> <61F8> <665B> <6CEB> <70AB> <7384> <73B9> <73FE> <7729> <774D> <7D43> <7D62> <7E23> <8237> <8852> <8CE2> <9249> <986F> <5B51> <7A74> <8840> <9801> <5ACC> <4FE0> <5354> <593E> <5CFD> <633E> <6D79> <72F9> <8105> <8107> <83A2> <92CF> <9830> <4EA8> <5144> <5211> <578B> <5F62> <6CC2> <6ECE> <7005> <7050> <70AF> <7192> <73E9> <7469> <834A> <87A2> <8861> <9008> <90A2> <93A3> <99A8> <516E> <5F57> <60E0> <6167> <66B3> <8559> <8E4A> <91AF> <978B> <4E4E> <4E92> <547C> <58D5> <58FA> endbfrange 100 beginbfrange <597D> <5CB5> <5F27> <6236> <6248> <660A> <6667> <6BEB> <6D69> <6DCF> <6E56> <6EF8> <6F94> <6FE0> <6FE9> <705D> <72D0> <7425> <745A> <74E0> <7693> <795C> <7CCA> <7E1E> <80E1> <82A6> <846B> <84BF> <864E> <865F> <8774> <8B77> <8C6A> <93AC> <9800> <9865> <60D1> <6216> <9177> <5A5A> <660F> <6DF7> <6E3E> <743F> <9B42> <5FFD> <60DA> <7B0F> <54C4> <5F18> <6C5E> <6CD3> <6D2A> <70D8> <7D05> <8679> <8A0C> <9D3B> <5316> <548C> <5B05> <6A3A> <706B> <7575> <798D> <79BE> <82B1> <83EF> <8A71> <8B41> <8CA8> <9774> <64F4> <652B> <78BA> <7A6B> <4E38> <559A> <5950> <5BA6> <5E7B> <60A3> <63DB> <6B61> <6665> <6853> <6E19> <7165> <74B0> <7D08> <9084> <9A69> <9C25> <6D3B> <6ED1> <733E> <8C41> <95CA> <51F0> endbfrange 100 beginbfrange <5E4C> <5FA8> <604D> <60F6> <6130> <614C> <6643> <69A5> <6CC1> <6E5F> <6EC9> <6F62> <714C> <749C> <7687> <7BC1> <7C27> <8352> <8757> <9051> <968D> <9EC3> <532F> <56DE> <5EFB> <5F8A> <6062> <6094> <61F7> <6666> <6703> <6A9C> <6DEE> <6FAE> <7070> <736A> <7E6A> <81BE> <8334> <86D4> <8AA8> <8CC4> <5283> <7372> <5B96> <6A6B> <9404> <54EE> <5686> <5B5D> <6548> <6585> <66C9> <689F> <6D8D> <6DC6> <723B> <80B4> <9175> <9A4D> <4FAF> <5019> <539A> <540E> <543C> <5589> <55C5> <5E3F> <5F8C> <673D> <7166> <73DD> <9005> <52DB> <52F3> <5864> <58CE> <7104> <718F> <71FB> <85B0> <8A13> <6688> <85A8> <55A7> <6684> <714A> <8431> <5349> <5599> <6BC1> <5F59> <5FBD> <63EE> <6689> <7147> <8AF1> <8F1D> <9EBE> <4F11> endbfrange 50 beginbfrange <643A> <70CB> <7566> <8667> <6064> <8B4E> <9DF8> <5147> <51F6> <5308> <6D36> <80F8> <9ED1> <6615> <6B23> <7098> <75D5> <5403> <5C79> <7D07> <8A16> <6B20> <6B3D> <6B46> <5438> <6070> <6D3D> <7FD5> <8208> <50D6> <51DE> <559C> <566B> <56CD> <59EC> <5B09> <5E0C> <6199> <6198> <6231> <665E> <66E6> <7199> <71B9> <72A7> <79A7> <7A00> <7FB2> <8A70> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCms-UHC-V b/Resources/cmap/KSCms-UHC-V deleted file mode 100644 index be40efc49f0..00000000000 --- a/Resources/cmap/KSCms-UHC-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (KSCms-UHC-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (KSCms-UHC-H) %%BeginResource: CMap (KSCms-UHC-V) %%Title: (KSCms-UHC-V Adobe Korea1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /KSCms-UHC-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 1 def end def /CMapName /KSCms-UHC-V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 680 def /XUID [1 10 25410] def /WMode 1 def 16 begincidrange 8056 8058 8320 8059 8062 8063 8075 8076 8077 8079 8080 8081 8087 8088 8089 8090 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCpc-EUC-H b/Resources/cmap/KSCpc-EUC-H deleted file mode 100644 index 21a4564d3a6..00000000000 --- a/Resources/cmap/KSCpc-EUC-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (KSCpc-EUC-H) %%Title: (KSCpc-EUC-H Adobe Korea1 0) %%Version: 9.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 0 def end def /CMapName /KSCpc-EUC-H def /CMapVersion 9.001 def /CMapType 1 def /UIDOffset 0 def /XUID [1 10 25404] def /WMode 0 def 3 begincodespacerange <00> <84> endcodespacerange 1 beginnotdefrange <00> <1f> 1 endnotdefrange 100 begincidrange <20> <7e> 1 <81> <83> 96 8191 8252 8278 101 8283 104 8285 195 8297 8322 8383 264 8414 8475 358 409 8506 8567 451 461 471 8578 495 8583 8587 8648 8658 8665 8671 519 8673 8699 8760 587 8791 8806 8867 666 670 671 679 8898 757 8950 9011 851 9042 9053 9114 934 9145 9330 9149 9210 1020 9233 1053 9248 9253 9314 1086 1180 1274 1368 1462 1556 1650 1744 1838 1932 2026 2120 2214 2308 2402 2496 2590 2684 2778 2872 2966 3060 3154 3248 3342 3436 3530 4116 3577 3678 3582 7053 3598 3621 3715 3460 3761 7900 endcidrange 100 begincidrange 3785 3807 3802 3819 3900 3902 3990 3993 3946 3994 3946 4015 3708 4038 4131 4050 4083 4374 4156 4134 4375 4136 4376 4138 5800 4382 4386 4139 4387 4140 4391 4141 4394 4142 4396 4143 4399 4146 4403 4149 4406 4409 4150 4410 4151 4412 4419 4154 4420 4155 4424 4159 4511 4170 4513 4517 4173 4518 4524 4174 4525 4528 4535 4175 4541 4176 4545 4179 4547 4550 4180 4564 4566 4571 4576 4181 4604 4609 4185 4611 4186 4192 4286 4318 4355 4136 4376 4378 5800 4382 4139 4387 4192 4389 4469 4167 4492 4172 4512 4561 endcidrange 100 begincidrange 5552 4603 6424 4627 4653 4747 4841 4935 5151 4971 4922 5001 5027 7518 5031 5120 5079 5124 5109 5171 7607 5201 5211 5584 5302 5367 5303 7083 5321 5362 5366 5485 5372 5394 6001 5474 5487 5460 5499 5317 5562 5579 5673 7009 5757 7370 5766 5678 5773 5858 5874 5871 4425 5873 4427 5879 4429 5880 4431 5887 4435 5896 4436 5897 4437 5898 4439 5901 4442 4159 5936 4444 4447 5937 4449 5939 4450 5941 4453 5946 4455 5947 4458 5948 4459 5951 4463 5954 4160 5961 4465 5962 4161 5964 4468 5971 4469 5974 4470 5976 endcidrange 100 begincidrange 4162 5978 4471 5980 4472 5981 4474 4473 4475 5983 4476 5984 4478 6447 5985 4481 5987 4482 5460 5988 4483 4163 4166 5990 4485 5991 4487 5996 4488 6000 4489 4491 6002 4167 4493 6003 4494 6005 4495 6019 7783 6020 4497 4499 6024 4501 6027 4502 6028 4503 6029 4506 6031 4508 6042 4509 6046 4510 6047 5797 6063 6070 4551 6140 4553 4180 6147 4555 6152 5800 6153 4556 6154 4557 6156 4560 6162 4561 6166 4563 6197 7988 6239 6246 6123 6278 4577 6313 4183 6327 4579 6329 4581 6333 4582 6334 4584 6337 4586 6339 endcidrange 100 begincidrange 4588 4184 6340 4590 6355 4592 6356 4593 4595 6359 4596 6362 4599 6366 4600 5552 6368 4603 6373 6411 4614 4616 6416 4618 6418 5950 4620 4187 6422 4625 6424 4627 6426 4629 6427 4632 6432 4634 4636 6435 4188 6437 4638 6447 4640 6454 4642 6456 4644 6458 4645 6460 4647 6474 4650 6475 4653 6479 5351 6553 6569 6494 6627 6662 6756 6850 6944 5731 6972 5771 7032 7036 4191 7052 7129 6484 7135 6684 7205 7221 7315 4279 7398 7139 7399 7407 4247 7430 4266 7445 4340 7455 7498 7572 7556 5088 7576 7590 7709 3558 endcidrange 9 begincidrange 7684 3644 7751 7775 7869 3815 7877 7962 99 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCpc-EUC-UCS2 b/Resources/cmap/KSCpc-EUC-UCS2 deleted file mode 100644 index 2b4a78d3030..00000000000 --- a/Resources/cmap/KSCpc-EUC-UCS2 +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (KSCpc-EUC-UCS2C) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (KSCpc-EUC-UCS2C) %%BeginResource: CMap (KSCpc-EUC-UCS2) %%Title: (KSCpc-EUC-UCS2) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /KSCpc-EUC-UCS2C usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (KSCpc_EUC_UCS2) def /Supplement 1 def end def /CMapName /KSCpc-EUC-UCS2 def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 100 beginbfrange <00280028> <00290029> <00280028> <00290029> <00280028> <00290029> <00280028> <00290029> <003120de> <003220de> <003320de> <003420de> <003520de> <003620de> <003720de> <003820de> <003920de> <005b00310030005d> <005b00310031005d> <005b00310032005d> <005b00310033005d> <005b00310034005d> <005b00310035005d> <005b00310036005d> <005b00310037005d> <005b00310038005d> <005b00310039005d> <005b00320030005d> <003120de> <003220de> <003320de> <003420de> <003520de> <003620de> <003720de> <003820de> <003920de> <005b00310030005d> <005b00310031005d> <005b00310032005d> <005b00310033005d> <005b00310034005d> <005b00310035005d> <005b00310036005d> <005b00310037005d> <005b00310038005d> <005b00310039005d> <005b00320030005d> <002800410029> <002800420029> <002800430029> <002800440029> <002800450029> <002800460029> <002800470029> <002800480029> <002800490029> <0028004a0029> <0028004b0029> <0028004c0029> <0028004d0029> <0028004e0029> <0028004f0029> <002800500029> <002800510029> <002800520029> <002800530029> <002800540029> <002800550029> <002800560029> <002800570029> <002800580029> <002800590029> <0028005a0029> <003120de> <003220de> <003320de> <003420de> <003520de> <003620de> <003720de> <003820de> <003920de> <005b00310030005d> <005b00310031005d> <005b00310032005d> <005b00310033005d> <005b00310034005d> <005b00310035005d> <005b00310036005d> <005b00310037005d> <005b00310038005d> <005b00310039005d> <005b00320030005d> <003120de> <003220de> <003320de> <003420de> <003520de> <003620de> endbfrange 100 beginbfrange <003720de> <003820de> <003920de> <005b00310030005d> <005b00310031005d> <005b00310032005d> <005b00310033005d> <005b00310034005d> <005b00310035005d> <005b00310036005d> <005b00310037005d> <005b00310038005d> <005b00310039005d> <005b00320030005d> <003020de> <003120de> <003220de> <003320de> <003420de> <003520de> <003620de> <003720de> <003820de> <003920de> <00410029> <00420029> <00430029> <00440029> <00450029> <00460029> <00470029> <00480029> <00490029> <004a0029> <004b0029> <004c0029> <004d0029> <004e0029> <004f0029> <00500029> <00510029> <00520029> <00530029> <00540029> <00550029> <00560029> <00570029> <00580029> <00590029> <005a0029> <00610029> <00620029> <00630029> <00640029> <00650029> <00660029> <00670029> <00680029> <00690029> <006a0029> <006b0029> <006c0029> <006d0029> <006e0029> <006f0029> <00700029> <00710029> <00720029> <00730029> <00740029> <00750029> <00760029> <00770029> <00780029> <00790029> <007a0029> <0028003200370029> <0028003200380029> <0028003200390029> <0028003300300029> <20202020> <20212021> <202020202020> <25a020df> <25c720df> <25a120df> <25c720de> <25a120de> <25c620de> <25b320dd> <25b220dd> <0028003200310029> <0028003200320029> <0028003200330029> <0028003200340029> <0028003200350029> <0028003200360029> <00f720dd> <22a50338> <0021003f> endbfrange 100 beginbfrange <003f003f> <0028003200310029> <0028003200320029> <0028003200330029> <0028003200340029> <0028003200350029> <0028003200360029> <0028003200370029> <0028003200380029> <0028003200390029> <0028003300300029> <0041002e> <0042002e> <0043002e> <0044002e> <0045002e> <0046002e> <0047002e> <0048002e> <0049002e> <004a002e> <004b002e> <004c002e> <004d002e> <004e002e> <004f002e> <0050002e> <0051002e> <0052002e> <0053002e> <0054002e> <0055002e> <0056002e> <0057002e> <0058002e> <0059002e> <005a002e> <0061002e> <0062002e> <0063002e> <0064002e> <0065002e> <0066002e> <0067002e> <0068002e> <0069002e> <006a002e> <006b002e> <006c002e> <006d002e> <006e002e> <006f002e> <0070002e> <0071002e> <0072002e> <0073002e> <0074002e> <0075002e> <0076002e> <0077002e> <0078002e> <0079002e> <007a002e> <537020de> <8a3b20de> <611f20de> <51a020de> <7b5420de> <4ee320de> <982d20de> <52d520de> <540d20de> <76ee20de> <53cd20de> <88dc20de> <672c20de> <526f20de> <5e8f20de> <902320de> <5f7120de> endbfrange 100 beginbfrange <4f8b20de> <6e9020de> <5b5020de> <524d20de> <7bc020de> <63a520de> <52a920de> <630720de> <4ed620de> <6d3e20de> <5f6220de> <8a3b20de> <51a020dd> <0028003200310029> <0028003200320029> <0028003200330029> <0028003200340029> <0028003200350029> <0028003200360029> <537020dd> <886320dd> <672b20dd> <611f20dd> <616320dd> <4ee320dd> <52d520dd> <53cd20dd> <526f20dd> <81ea20dd> <524d20dd> <96fb20dd> <63a520dd> <52a920dd> <6ce820dd> <53c320dd> <672c20dd> <65b020dd> <73fe20dd> endbfrange 100 beginbfrange <5f6220dd> <959320dd> <570b20dd> <4ed620dd> <0028003200370029> <0028003200380029> <0028003200390029> <0028003300300029> <003120de> <003220de> <003320de> <003420de> <003520de> <003620de> <003720de> <003820de> <003920de> <005b00310030005d> <005b00310031005d> <005b00310032005d> <005b00310033005d> <005b00310034005d> <005b00310035005d> <005b00310036005d> <005b00310037005d> <005b00310038005d> <005b00310039005d> <005b00320030005d> <4e0020de> <4e8c20de> <4e0920de> <56db20de> <4e9420de> <516d20de> <4e0320de> <516b20de> <4e5d20de> <534120de> <005b53414e00005d> <005b53414e8c005d> <005b53414e09005d> <005b534156db005d> <005b53414e94005d> <005b5341516d005d> <005b53414e03005d> <005b5341516b005d> endbfrange 36 beginbfrange <005b53414e5d005d> <005b4e8c5341005d> <4e0020de> <4e8c20de> <4e0920de> <56db20de> <4e9420de> <516d20de> <4e0320de> <516b20de> <4e5d20de> <534120de> <005b53414e00005d> <005b53414e8c005d> <005b53414e09005d> <005b534156db005d> <005b53414e94005d> <005b5341516d005d> <005b53414e03005d> <005b5341516b005d> <005b53414e5d005d> <005b4e8c5341005d> <65e520de> <670820de> <706b20de> <6c3420de> <672820de> <91d120de> <571f20de> <65e520de> <670820de> <706b20de> <6c3420de> <672820de> <91d120de> <571f20de> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/KSCpc-EUC-UCS2C b/Resources/cmap/KSCpc-EUC-UCS2C deleted file mode 100644 index 2aee34492b5..00000000000 --- a/Resources/cmap/KSCpc-EUC-UCS2C +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (KSCpc-EUC-UCS2C) %%Title: (KSCpc-EUC-UCS2C) %%Version: 4.002 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (KSCpc_EUC_UCS2C) def /Supplement 1 def end def /CMapName /KSCpc-EUC-UCS2C def /CMapVersion 4.002 def /CMapType 1 def /WMode 0 def 3 begincodespacerange <00> <9F> endcodespacerange 100 beginbfrange <00> <7F> <0000> <80> <80> <00A0> <81> <81> <20A9> <82> <82> <2010> <83> <83> <00A9> <84> <84> <85> <9F> <0085> <2122> <22EF> <300C> <300C> <300C> <300A> <3008> <0028> <0028> <0028> <0028> <0028> <3010> <3016> <005B> <005D> <005B> <005D> <0028> <2020> <2020> <2020> <002A> <201F> <201B> <207A> <00D7> <221E> <223D> <00B1> <2213> <003E> <003C> <207C> <2260> <207D> <007B> <007D> <005B> <005D> <2229> <2282> <2208> <2211> <0021> <3007> <4E00> <4E8C> <4E09> <56DB> <4E94> <516D> <4E03> <516B> <4E5D> <5341> <02BC> <3014> <3000> <00B7> <2025> <00A8> <3003> <2013> <2016> <301C> <2018> <201C> <3014> <3008> <00B1> <00D7> <00F7> <2260> <2264> <221E> <2234> <00B0> <2032> <2103> <212B> <00A2> <00A5> <2642> <2640> <2220> <22A5> <2312> <2202> endbfrange 100 beginbfrange <2207> <2261> <2252> <00A7> <203B> <2606> <2605> <25CB> <25CF> <25CE> <25C7> <25C6> <25A1> <25A0> <25B3> <25B2> <25BD> <25BC> <2192> <2190> <2193> <3013> <226A> <221A> <223D> <221D> <2235> <222B> <2208> <220B> <2286> <2282> <222A> <2229> <2227> <00AC> <0028> <3016> <3010> <0028> <21D2> <21D4> <2200> <2203> <00B4> <02DC> <02C7> <02D8> <02DD> <02DA> <02D9> <00B8> <02DB> <00A1> <00BF> <02D0> <222E> <2211> <220F> <00A4> <2109> <2030> <25C1> <25C0> <25B7> <25B6> <2664> <2660> <2665> <2667> <2663> <25C9> <25C8> <25A3> <25D0> <2592> <25A4> <25A8> <25A7> <25A6> <25A9> <2668> <260F> <260E> <261C> <261E> <00B6> <2020> <2195> <2197> <2199> <2196> <2198> <266D> <2669> <266C> <327F> <321C> <2116> <33C7> endbfrange 100 beginbfrange <2122> <33C2> <33D8> <2121> <00B6> <2016> <2016> <22EE> <2237> <278A> <246A> <24B6> <203E> <278A> <246A> <227A> <22CE> <2280> <2270> <2286> <228A> <2287> <228B> <2276> <2279> <22DA> <2222> <2245> <2243> <2248> <22A4> <3131> <24EA> <2460> <2170> <2160> <0391> <03A3> <3002> <2032> <03B1> <03C3> <2020> <00A7> <266F> <2042> <2042> <273D> <2022> <2039> <00AB> <00BB> <261C> <261E> <25CE> <271A> <2716> <25EF> <2756> <25CC> <2756> <20A9> <534D> <262F> <262F> <262F> <3020> <2500> <2502> <250C> <2510> <2518> <2514> <251C> <252C> <2524> <2534> <253C> <2501> <2503> <250F> <2513> <251B> <2517> <2523> <2533> <252B> <253B> <254B> <2520> <252F> <2528> <2537> endbfrange 100 beginbfrange <253F> <251D> <2530> <2525> <2538> <2542> <2512> <2511> <251A> <2519> <2516> <2515> <250E> <250D> <251E> <2521> <2526> <2529> <252D> <2531> <2535> <2539> <253D> <2540> <2543> <2776> <246A> <2642> <3012> <3036> <2206> <2206> <221F> <222A> <2225> <2229> <2253> <2251> <2266> <2213> <2295> <2314> <2262> <25B1> <2222> <2250> <22A3> <226E> <2285> <2284> <2209> <220C> <22BB> <225A> <2306> <2314> <329E> <329E> <203C> <203C> <25C7> <25C7> <25C7> <25C6> <25A1> <25A1> <25A1> <25A0> <25E6> <25CB> <25CB> <25CF> <25BF> <25B5> <25B9> <25C3> <25CA> <3231> <3239> <33CB> <3395> <2113> <3398> <33C4> <33A3> <3399> <33CA> <338D> <33CF> <3388> <33C8> <33A7> <33B0> <3380> <33BA> <3390> <2126> <33C0> <338A> <33D6> endbfrange 100 beginbfrange <33C5> <33AD> <33DB> <33A9> <33DD> <33D0> <33D3> <33C3> <33C9> <33DC> <33C6> <246F> <2192> <2190> <2193> <2196> <21D0> <21CF> <21CD> <21D4> <2192> <2190> <2193> <2190> <2192> <2191> <2193> <2190> <2192> <2191> <2193> <2190> <2192> <2191> <2193> <21D0> <21D2> <21D1> <21D3> <21B2> <21B1> <21B4> <21B0> <21B3> <21B2> <21B1> <21BB> <21B7> <21B0> <21B3> <21B6> <21BA> <21E6> <21E8> <21E7> <21E9> <21BC> <21C0> <21BC> <21C0> <21C4> <00C6> <00D0> <00AA> <0126> <0132> <013F> <0141> <00D8> <0152> <00BA> <00DE> <0166> <014A> <3260> <24D0> <2460> <00BD> <2153> <00BC> <00BE> <215B> <00E6> <0111> <00F0> <0127> <0131> <0133> <0138> <0140> <0142> <00F8> <0153> <00DF> <00FE> <0167> <014B> <0149> <3200> <249C> endbfrange 100 beginbfrange <2474> <00B9> <00B2> <2074> <207F> <2081> <3041> <2483> <3294> <32A5> <30A1> <21D2> <21D0> <21BC> <21C0> <2190> <2192> <2191> <2193> <21E6> <21E8> <21E7> <21E9> <2190> <2192> <2191> <2193> <2190> <2192> <2191> <2193> <2190> <2192> <2191> <2193> <21E0> <21E2> <21E1> <21E3> <21E6> <21E8> <21E7> <21E9> <21E6> <21E8> <21E7> <21E9> <21B2> <21B1> <21BB> <21B7> <21B0> <21B3> <21B6> <21BA> <21B2> <21B1> <21BB> <21B7> <21B0> <21B3> <21B6> <21BA> <2190> <2192> <2191> <2193> <261D> <261F> <261D> <261F> <0410> <0401> <0416> <0430> <0451> <0436> <3290> <328A> <300C> <21E8> <21E6> <21E9> <301E> <2036> <2033> <2035> <2032> <0021> endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange endbfrange 100 beginbfrange <4F3D> <4F73> <5047> <50F9> <52A0> <53EF> <5475> <54E5> <5609> <5AC1> <5BB6> <6687> <67B6> <67EF> <6B4C> <73C2> <75C2> <7A3C> <82DB> <8304> <8857> <8888> <8A36> <8CC8> <8DCF> <8EFB> <8FE6> <99D5> <523B> <5374> <5404> <606A> <6164> <6BBC> <73CF> <811A> <89BA> <89D2> <95A3> <4F83> <520A> <58BE> <5978> <59E6> <5E72> <5E79> <61C7> <63C0> <6746> <67EC> <687F> <6F97> <764E> <770B> <78F5> <7A08> <7AFF> <7C21> <809D> <826E> <8271> <8AEB> <9593> <4E6B> <559D> <66F7> <6E34> <78A3> <7AED> <845B> <8910> <874E> <97A8> <52D8> <574E> <582A> <5D4C> <611F> <61BE> <6221> <6562> <67D1> <6A44> <6E1B> <7518> <75B3> <76E3> <77B0> <7D3A> <90AF> <9451> <9F95> <5323> endbfrange 100 beginbfrange <5CAC> <7532> <80DB> <9240> <9598> <525B> <5808> <59DC> <5CA1> <5D17> <5EB7> <5F3A> <5F4A> <6177> <6C5F> <757A> <7586> <7CE0> <7D73> <7DB1> <7F8C> <8154> <8221> <8591> <8941> <8B1B> <92FC> <964D> <9C47> <4ECB> <4EF7> <500B> <51F1> <584F> <6137> <613E> <6168> <6539> <69EA> <6F11> <75A5> <7686> <76D6> <7B87> <82A5> <84CB> <93A7> <958B> <5580> <5BA2> <5751> <7CB3> <7FB9> <91B5> <5028> <53BB> <5C45> <5DE8> <62D2> <636E> <64DA> <64E7> <6E20> <70AC> <795B> <8DDD> <8E1E> <907D> <9245> <92F8> <4E7E> <4EF6> <5065> <5DFE> <5EFA> <6106> <6957> <8171> <8654> <8E47> <9375> <9A2B> <4E5E> <5091> <6770> <6840> <5109> <528D> <5292> <6AA2> <77BC> <9210> <9ED4> <52AB> <602F> <8FF2> <5048> endbfrange 100 beginbfrange <61A9> <63ED> <64CA> <683C> <6A84> <6FC0> <8188> <89A1> <9694> <5805> <727D> <72AC> <7504> <7D79> <7E6D> <80A9> <898B> <8B74> <9063> <9D51> <6289> <6C7A> <6F54> <7D50> <7F3A> <8A23> <517C> <614A> <7B9D> <8B19> <9257> <938C> <4EAC> <4FD3> <501E> <50BE> <5106> <52C1> <52CD> <537F> <5770> <5883> <5E9A> <5F91> <6176> <61AC> <64CE> <656C> <666F> <66BB> <66F4> <6897> <6D87> <7085> <70F1> <749F> <74A5> <74CA> <75D9> <786C> <78EC> <7ADF> <7AF6> <7D45> <7D93> <8015> <803F> <811B> <8396> <8B66> <8F15> <9015> <93E1> <9803> <9838> <9A5A> <9BE8> <4FC2> <5553> <583A> <5951> <5B63> <5C46> <60B8> <6212> <6842> <68B0> <68E8> <6EAA> <754C> <7678> <78CE> <7A3D> <7CFB> <7E6B> <7E7C> <8A08> <8AA1> <8C3F> <968E> endbfrange 100 beginbfrange <9DC4> <53E4> <53E9> <544A> <5471> <56FA> <59D1> <5B64> <5C3B> <5EAB> <62F7> <6537> <6545> <6572> <66A0> <67AF> <69C1> <6CBD> <75FC> <7690> <777E> <7A3F> <7F94> <8003> <80A1> <818F> <82E6> <82FD> <83F0> <85C1> <8831> <88B4> <8AA5> <8F9C> <932E> <96C7> <9867> <9AD8> <9F13> <54ED> <659B> <66F2> <688F> <7A40> <8C37> <9D60> <56F0> <5764> <5D11> <6606> <68B1> <68CD> <6EFE> <7428> <889E> <9BE4> <6C68> <9AA8> <4F9B> <516C> <5171> <529F> <5B54> <5DE5> <6050> <606D> <62F1> <63A7> <653B> <73D9> <7A7A> <86A3> <8CA2> <978F> <4E32> <5BE1> <6208> <679C> <74DC> <79D1> <83D3> <8A87> <8AB2> <8DE8> <904E> <934B> <9846> <5ED3> <69E8> <85FF> <90ED> <51A0> <5B98> <5BEC> <6163> <68FA> <6B3E> endbfrange 100 beginbfrange <704C> <742F> <74D8> <7BA1> <7F50> <83C5> <89C0> <8CAB> <95DC> <9928> <522E> <605D> <62EC> <9002> <4F8A> <5149> <5321> <58D9> <5EE3> <66E0> <6D38> <709A> <72C2> <73D6> <7B50> <80F1> <945B> <5366> <639B> <7F6B> <4E56> <5080> <584A> <58DE> <602A> <6127> <62D0> <69D0> <9B41> <5B8F> <7D18> <80B1> <8F5F> <4EA4> <50D1> <54AC> <55AC> <5B0C> <5DA0> <5DE7> <652A> <654E> <6821> <6A4B> <72E1> <768E> <77EF> <7D5E> <7FF9> <81A0> <854E> <86DF> <8F03> <8F4E> <90CA> <9903> <9A55> <9BAB> <4E18> <4E45> <4E5D> <4EC7> <4FF1> <5177> <52FE> <5340> <53E3> <53E5> <548E> <5614> <5775> <57A2> <5BC7> <5D87> <5ED0> <61FC> <62D8> <6551> <67B8> <67E9> <69CB> <6B50> <6BC6> <6BEC> <6C42> <6E9D> <7078> <72D7> <7396> <7403> endbfrange 100 beginbfrange <77BF> <77E9> <7A76> <7D7F> <8009> <81FC> <8205> <820A> <82DF> <8862> <8B33> <8CFC> <8EC0> <9011> <90B1> <9264> <92B6> <99D2> <9A45> <9CE9> <9DD7> <9F9C> <570B> <5C40> <83CA> <97A0> <97AB> <9EB4> <541B> <7A98> <7FA4> <88D9> <8ECD> <90E1> <5800> <5C48> <6398> <7A9F> <5BAE> <5F13> <7A79> <7AAE> <828E> <8EAC> <5026> <5238> <52F8> <5377> <5708> <62F3> <6372> <6B0A> <6DC3> <7737> <53A5> <7357> <8568> <8E76> <95D5> <673A> <6AC3> <6F70> <8A6D> <8ECC> <994B> <6677> <6B78> <8CB4> <9B3C> <53EB> <572D> <594E> <63C6> <69FB> <73EA> <7845> <7ABA> <7AC5> <7CFE> <8475> <898F> <8D73> <9035> <95A8> <52FB> <5747> <7547> <7B60> <83CC> <921E> <6A58> <514B> <524B> <5287> <621F> <68D8> <6975> endbfrange 100 beginbfrange <9699> <50C5> <52A4> <52E4> <61C3> <65A4> <6839> <69FF> <747E> <7B4B> <82B9> <83EB> <89B2> <8B39> <8FD1> <9949> <4ECA> <5997> <64D2> <6611> <6A8E> <7434> <7981> <79BD> <82A9> <887E> <895F> <9326> <4F0B> <53CA> <6025> <6271> <6C72> <7D1A> <7D66> <4E98> <5162> <77DC> <80AF> <4F01> <4F0E> <5176> <5180> <55DC> <5668> <573B> <57FA> <57FC> <5914> <5947> <5993> <5BC4> <5C90> <5D0E> <5DF1> <5E7E> <5FCC> <6280> <65D7> <65E3> <671E> <675E> <68CB> <68C4> <6A5F> <6B3A> <6C23> <6C7D> <6C82> <6DC7> <7398> <7426> <742A> <7482> <74A3> <7578> <757F> <7881> <78EF> <7941> <7947> <797A> <7B95> <7D00> <7DBA> <7F88> <8006> <802D> <808C> <8A18> <8B4F> <8C48> <8D77> <9321> <9324> <98E2> <9951> <9A0E> endbfrange 100 beginbfrange <9A65> <9E92> <7DCA> <4F76> <5409> <62EE> <6854> <91D1> <55AB> <513A> <5A1C> <61E6> <62CF> <62FF> <90A3> <8AFE> <6696> <7156> <96E3> <634F> <637A> <5357> <678F> <6960> <6E73> <7537> <7D0D> <8872> <56CA> <5A18> <4E43> <5167> <5948> <67F0> <8010> <5973> <5E74> <649A> <79CA> <5FF5> <606C> <62C8> <637B> <5BE7> <5BD7> <52AA> <5974> <5F29> <6012> <7459> <99D1> <6FC3> <81BF> <8FB2> <60F1> <8166> <5C3F> <5AE9> <8A25> <677B> <7D10> <80FD> <5C3C> <6CE5> <533F> <6EBA> <591A> <8336> <4E39> <4EB6> <4F46> <55AE> <5718> <58C7> <5F56> endbfrange 100 beginbfrange <65B7> <65E6> <6A80> <6BB5> <6E4D> <77ED> <7AEF> <7C1E> <7DDE> <86CB> <8892> <9132> <935B> <64BB> <6FBE> <737A> <75B8> <9054> <5556> <574D> <61BA> <64D4> <66C7> <6DE1> <6E5B> <6F6D> <6FB9> <75F0> <8043> <81BD> <8541> <8983> <8AC7> <8B5A> <931F> <6C93> <7553> <7B54> <8E0F> <905D> <5510> <5802> <5858> <5E62> <6207> <649E> <68E0> <7576> <7CD6> <87B3> <9EE8> <4EE3> <5788> <576E> <5927> <5C0D> <5CB1> <5E36> <5F85> <6234> <64E1> <73B3> <81FA> <888B> <8CB8> <968A> <9EDB> <5B85> <5FB7> <60B3> <5012> <5200> <5230> <5716> <5835> <5857> <5C0E> <5C60> <5CF6> <5D8B> <5EA6> <5F92> <60BC> <6311> <6389> <6417> <6843> <68F9> <6AC2> <6DD8> <6E21> <6ED4> <6FE4> <71FE> <76DC> <7779> <79B1> <7A3B> <8404> <89A9> endbfrange 100 beginbfrange <8CED> <8DF3> <8E48> <9003> <9014> <9053> <90FD> <934D> <9676> <97DC> <6BD2> <7006> <7258> <72A2> <7368> <7763> <79BF> <7BE4> <7E9B> <8B80> <58A9> <60C7> <6566> <65FD> <66BE> <6C8C> <711E> <71C9> <8C5A> <9813> <4E6D> <7A81> <4EDD> <51AC> <51CD> <52D5> <540C> <61A7> <6771> <6850> <68DF> <6D1E> <6F7C> <75BC> <77B3> <7AE5> <80F4> <8463> <9285> <515C> <6597> <675C> <6793> <75D8> <7AC7> <8373> <8C46> <9017> <982D> <5C6F> <81C0> <829A> <9041> <906F> <920D> <5F97> <5D9D> <6A59> <71C8> <767B> <7B49> <85E4> <8B04> <9127> <9A30> <5587> <61F6> <7669> <7F85> <863F> <87BA> <88F8> <908F> <6D1B> <70D9> <73DE> <7D61> <843D> <916A> <99F1> <4E82> <5375> <6B04> <6B12> <703E> endbfrange 100 beginbfrange <721B> <862D> <9E1E> <524C> <8FA3> <5D50> <64E5> <652C> <6B16> <6FEB> <7C43> <7E9C> <85CD> <8964> <89BD> <62C9> <81D8> <881F> <5ECA> <6717> <6D6A> <72FC> <7405> <746F> <8782> <90DE> <4F86> <5D0D> <5FA0> <840A> <51B7> <63A0> <7565> <4EAE> <5006> <5169> <51C9> <6881> <6A11> <7CAE> <7CB1> <7CE7> <826F> <8AD2> <8F1B> <91CF> <4FB6> <5137> <52F5> <5442> <5EEC> <616E> <623E> <65C5> <6ADA> <6FFE> <792A> <85DC> <8823> <95AD> <9A62> <9A6A> <9E97> <9ECE> <529B> <66C6> <6B77> <701D> <792B> <8F62> <9742> <6190> <6200> <6523> <6F23> <7149> <7489> <7DF4> <806F> <84EE> <8F26> <9023> <934A> <51BD> <5217> <52A3> <6D0C> <70C8> <88C2> <5EC9> <6582> <6BAE> <6FC2> <7C3E> <7375> <4EE4> <4F36> <56F9> <5CBA> endbfrange 100 beginbfrange <5DBA> <601C> <73B2> <7B2D> <7F9A> <7FCE> <8046> <901E> <9234> <96F6> <9748> <9818> <9F61> <4F8B> <6FA7> <79AE> <91B4> <96B7> <52DE> <6488> <64C4> <6AD3> <6F5E> <7018> <7210> <76E7> <8001> <8606> <865C> <8DEF> <8F05> <9732> <9B6F> <9DFA> <9E75> <788C> <797F> <7DA0> <83C9> <9304> <9E7F> <9E93> <8AD6> <58DF> <5F04> <6727> <7027> <74CF> <7C60> <807E> <5121> <7028> <7262> <78CA> <8CC2> <8CDA> <8CF4> <96F7> <4E86> <50DA> <5BEE> <5ED6> <6599> <71CE> <7642> <77AD> <804A> <84FC> <907C> <9B27> <9F8D> <58D8> <5A41> <5C62> <6A13> <6DDA> <6F0F> <763B> <7D2F> <7E37> <851E> <8938> <93E4> <964B> <5289> <65D2> <67F3> <69B4> <6D41> <6E9C> <700F> <7409> <7460> <7559> <7624> <786B> <8B2C> <985E> <516D> endbfrange 100 beginbfrange <622E> <9678> <4F96> <502B> <5D19> <6DEA> <7DB8> <8F2A> <5F8B> <6144> <6817> <9686> <52D2> <808B> <51DC> <51CC> <695E> <7A1C> <7DBE> <83F1> <9675> <4FDA> <5229> <5398> <540F> <550E> <5C65> <60A7> <674E> <68A8> <6D6C> <7281> <72F8> <7406> <7483> <75E2> <7C6C> <7F79> <7FB8> <8389> <88CF> <88E1> <91CC> <91D0> <96E2> <9BC9> <541D> <6F7E> <71D0> <7498> <85FA> <8EAA> <96A3> <9C57> <9E9F> <6797> <6DCB> <7433> <81E8> <9716> <782C> <7ACB> <7B20> <7C92> <6469> <746A> <75F2> <78BC> <78E8> <99AC> <9B54> <9EBB> <5BDE> <5E55> <6F20> <819C> <83AB> <9088> <4E07> <534D> <5A29> <5DD2> <5F4E> <6162> <633D> <6669> <66FC> <6EFF> <6F2B> <7063> <779E> <842C> <8513> <883B> <8F13> <9945> <9C3B> <551C> endbfrange 100 beginbfrange <62B9> <672B> <6CAB> <8309> <896A> <977A> <4EA1> <5984> <5FD8> <671B> <7DB2> <7F54> <8292> <832B> <83BD> <8F1E> <9099> <57CB> <59B9> <5A92> <5BD0> <6627> <679A> <6885> <6BCF> <7164> <7F75> <8CB7> <8CE3> <9081> <9B45> <8108> <8C8A> <964C> <9A40> <9EA5> <5B5F> <6C13> <731B> <76F2> <76DF> <840C> <51AA> <8993> <514D> <5195> <52C9> <68C9> <6C94> <7704> <7720> <7DBF> <7DEC> <9762> <9EB5> <6EC5> <8511> <51A5> <540D> <547D> <660E> <669D> <6927> <6E9F> <76BF> <7791> <8317> <84C2> <879F> <9169> <9298> <9CF4> <8882> <4FAE> <5192> <52DF> <59C6> <5E3D> <6155> <6478> <66AE> <67D0> <6A21> <6BCD> <6BDB> <725F> <7261> <7441> <7738> <77DB> <8017> <82BC> <8305> <8B00> <8B28> <8C8C> <6728> <6C90> <7267> <76EE> endbfrange 100 beginbfrange <7766> <7A46> <9DA9> <6B7F> <6C92> <5922> <6726> <8499> <536F> <5893> <5999> <5EDF> <63CF> <6634> <6773> <6E3A> <732B> <7AD7> <82D7> <9328> <52D9> <5DEB> <61AE> <61CB> <620A> <62C7> <64AB> <65E0> <6959> <6B66> <6BCB> <7121> <73F7> <755D> <7E46> <821E> <8302> <856A> <8AA3> <8CBF> <9727> <9D61> <58A8> <9ED8> <5011> <520E> <543B> <554F> <6587> <6C76> <7D0A> <805E> <868A> <9580> <96EF> <52FF> <6C95> <7269> <5473> <5A9A> <5C3E> <5D4B> <5F4C> <5FAE> <672A> <68B6> <6963> <6E3C> <6E44> <7709> <7C73> <7F8E> <8587> <8B0E> <8FF7> <9761> <9EF4> <5CB7> <60B6> <610D> <61AB> <654F> <65FB> <6C11> <6CEF> <739F> <73C9> <7DE1> <9594> <5BC6> <871C> <8B10> <525D> <535A> <62CD> <640F> <64B2> <6734> <6A38> <6CCA> endbfrange 100 beginbfrange <73C0> <749E> <7B94> <7C95> <7E1B> <818A> <8236> <8584> <8FEB> <96F9> <99C1> <4F34> <534A> <53CD> <53DB> <62CC> <642C> <6500> <6591> <69C3> <6CEE> <6F58> <73ED> <7554> <7622> <76E4> <76FC> <78D0> <78FB> <792C> <7D46> <822C> <87E0> <8FD4> <9812> <98EF> <52C3> <62D4> <64A5> <6E24> <6F51> <767C> <8DCB> <91B1> <9262> <9AEE> <9B43> <5023> <508D> <574A> <59A8> <5C28> <5E47> <5F77> <623F> <653E> <65B9> <65C1> <6609> <678B> <699C> <6EC2> <78C5> <7D21> <80AA> <8180> <822B> <82B3> <84A1> <868C> <8A2A> <8B17> <90A6> <9632> <9F90> <500D> <4FF3> <57F9> <5F98> <62DC> <6392> <676F> <6E43> <7119> <76C3> <80CC> <80DA> <88F4> <8919> <8CE0> <8F29> <914D> <966A> <4F2F> <4F70> <5E1B> <67CF> <6822> <767D> endbfrange 100 beginbfrange <9B44> <5E61> <6A0A> <7169> <71D4> <756A> <7E41> <8543> <85E9> <98DC> <4F10> <7B4F> <7F70> <95A5> <51E1> <5E06> <68B5> <6C3E> <6C4E> <6CDB> <72AF> <7BC4> <8303> <6CD5> <743A> <50FB> <5288> <58C1> <64D8> <6A97> <74A7> <7656> <78A7> <8617> <95E2> <9739> <535E> <5F01> <8B8A> <8FA8> <8FAF> <908A> <5225> <77A5> <9C49> <9F08> <4E19> <5002> <5175> <5C5B> <5E77> <661E> <663A> <67C4> <68C5> <70B3> <7501> <75C5> <79C9> <7ADD> <8F27> <9920> <9A08> <4FDD> <5821> <5831> <5BF6> <666E> <6B65> <6D11> <6E7A> <6F7D> <73E4> <752B> <83E9> <88DC> <8913> <8B5C> <8F14> <4F0F> <50D5> <5310> <535C> <5B93> <5FA9> <670D> <798F> <8179> <832F> <8514> <8907> <8986> <8F39> <8F3B> <99A5> <9C12> <672C> <4E76> endbfrange 100 beginbfrange <4FF8> <5949> <5C01> <5CEF> <6367> <68D2> <70FD> <71A2> <742B> <7E2B> <84EC> <8702> <9022> <92D2> <9CF3> <4E0D> <4ED8> <4FEF> <5085> <5256> <526F> <5426> <5490> <57E0> <592B> <5A66> <5B5A> <5B75> <5BCC> <5E9C> <6276> <6577> <65A7> <6D6E> <6EA5> <7236> <7B26> <7C3F> <7F36> <8150> <819A> <8240> <8299> <83A9> <8A03> <8CA0> <8CE6> <8CFB> <8D74> <8DBA> <90E8> <91DC> <961C> <9644> <99D9> <9CE7> <5317> <5206> <5429> <5674> <58B3> <5954> <596E> <5FFF> <61A4> <626E> <6610> <6C7E> <711A> <76C6> <7C89> <7CDE> <7D1B> <82AC> <8CC1> <96F0> <4F5B> <5F17> <5F7F> <62C2> <5D29> <670B> <68DA> <787C> <7E43> <9D6C> <4E15> <5099> <5315> <532A> <5351> <5983> <5A62> <5E87> <60B2> <618A> <6249> <6279> endbfrange 100 beginbfrange <6590> <6787> <69A7> <6BD4> <6BD6> <6CB8> <7435> <75FA> <7812> <7891> <79D5> <79D8> <7C83> <7DCB> <7FE1> <80A5> <813E> <81C2> <83F2> <871A> <88E8> <8AB9> <8B6C> <8CBB> <9119> <975E> <98DB> <9F3B> <56AC> <5B2A> <5F6C> <658C> <6AB3> <6BAF> <6D5C> <6FF1> <7015> <725D> <73AD> <8CA7> <8CD3> <983B> <6191> <6C37> <8058> <9A01> <4E4D> <4E8B> <4E9B> <4ED5> <4F3A> <4F3C> <4F7F> <4FDF> <50FF> <53F2> <53F8> <5506> <55E3> <56DB> <58EB> <5962> <5A11> <5BEB> <5BFA> <5C04> <5DF3> <5E2B> <5F99> <601D> <6368> <659C> <65AF> <67F6> <67FB> <68AD> <6B7B> <6C99> <6CD7> <6E23> <7009> <7345> <7802> <793E> <7940> <7960> <79C1> <7BE9> <7D17> <7D72> <8086> <820D> <838E> <84D1> <86C7> <88DF> <8A50> <8A5E> <8B1D> endbfrange 100 beginbfrange <8CDC> <8D66> <8FAD> <90AA> <98FC> <99DF> <9E9D> <524A> <6714> <5098> <522A> <5C71> <6563> <6C55> <73CA> <7523> <759D> <7B97> <849C> <9178> <9730> <4E77> <6492> <6BBA> <715E> <85A9> <4E09> <6749> <68EE> <6E17> <829F> <8518> <886B> <63F7> <6F81> <9212> <98AF> <4E0A> <50B7> <50CF> <511F> <5546> <55AA> <5617> <5B40> <5C19> <5CE0> <5E38> <5E8A> <5EA0> <5EC2> <60F3> <6851> <6A61> <6E58> <723D> <7240> <72C0> <76F8> <7965> <7BB1> <7FD4> <88F3> <89F4> <8A73> <8C61> <8CDE> <971C> <585E> <74BD> <8CFD> <55C7> <7A61> <7D22> <8272> <7272> <751F> <7525> <7B19> <5885> <58FB> <5DBC> <5E8F> <5EB6> <5F90> <6055> <6292> <637F> <654D> <6691> <66D9> <66F8> <6816> <68F2> <7280> endbfrange 100 beginbfrange <745E> <7B6E> <7D6E> <7DD6> <7F72> <80E5> <8212> <85AF> <897F> <8A93> <901D> <92E4> <9ECD> <9F20> <5915> <596D> <5E2D> <60DC> <6614> <6673> <6790> <6C50> <6DC5> <6F5F> <77F3> <78A9> <84C6> <91CB> <932B> <4ED9> <50CA> <5148> <5584> <5B0B> <5BA3> <6247> <657E> <65CB> <6E32> <717D> <7401> <7444> <7487> <74BF> <766C> <79AA> <7DDA> <7E55> <7FA8> <817A> <81B3> <8239> <861A> <87EC> <8A75> <8DE3> <9078> <9291> <9425> <994D> <9BAE> <5368> <5C51> <6954> <6CC4> <6D29> <6E2B> <820C> <859B> <893B> <8A2D> <8AAA> <96EA> <9F67> <5261> <66B9> <6BB2> <7E96> <87FE> <8D0D> <9583> <965D> <651D> <6D89> <71EE> <57CE> <59D3> <5BAC> <6027> <60FA> <6210> <661F> <665F> <7329> <73F9> <76DB> <7701> <7B6C> <8056> endbfrange 100 beginbfrange <8072> <8165> <8AA0> <9192> <4E16> <52E2> <6B72> <6D17> <7A05> <7B39> <7D30> <8CB0> <53EC> <562F> <5851> <5BB5> <5C0F> <5C11> <5DE2> <6240> <6383> <6414> <662D> <68B3> <6CBC> <6D88> <6EAF> <701F> <70A4> <71D2> <7526> <758F> <758E> <7619> <7B11> <7BE0> <7C2B> <7D20> <7D39> <852C> <856D> <8607> <8A34> <900D> <9061> <90B5> <92B7> <97F6> <9A37> <4FD7> <5C6C> <675F> <6D91> <7C9F> <7E8C> <8B16> <8D16> <901F> <5B6B> <5DFD> <640D> <84C0> <905C> <98E1> <7387> <5B8B> <609A> <677E> <6DDE> <8A1F> <8AA6> <9001> <980C> <5237> <7051> <788E> <9396> <8870> <91D7> <4FEE> <53D7> <55FD> <56DA> <5782> <58FD> <5AC2> <5B88> <5CAB> <5CC0> <5E25> <6101> <620D> <624B> <6388> <641C> <6536> <6578> <6A39> endbfrange 100 beginbfrange <6B8A> <6C34> <6D19> <6F31> <71E7> <72E9> <7378> <7407> <74B2> <7626> <7761> <79C0> <7A57> <7AEA> <7CB9> <7D8F> <7DAC> <7E61> <7F9E> <8129> <8331> <8490> <84DA> <85EA> <8896> <8AB0> <8B90> <8F38> <9042> <9083> <916C> <9296> <92B9> <968B> <96A7> <96D6> <9700> <9808> <9996> <9AD3> <9B1A> <53D4> <587E> <5919> <5B70> <5BBF> <6DD1> <6F5A> <719F> <7421> <74B9> <8085> <83FD> <5DE1> <5F87> <5FAA> <6042> <65EC> <6812> <696F> <6A53> <6B89> <6D35> <6DF3> <73E3> <76FE> <77AC> <7B4D> <7D14> <8123> <821C> <8340> <84F4> <8563> <8A62> <8AC4> <9187> <931E> <9806> <99B4> <620C> <8853> <8FF0> <9265> <5D07> <5D27> <5D69> <745F> <819D> <8768> <6FD5> <62FE> <7FD2> <8936> <8972> <4E1E> <4E58> <50E7> <52DD> <5347> endbfrange 100 beginbfrange <627F> <6607> <7E69> <8805> <965E> <4F8D> <5319> <5636> <59CB> <5AA4> <5C38> <5C4E> <5C4D> <5E02> <5F11> <6043> <65BD> <662F> <6642> <67BE> <67F4> <731C> <77E2> <793A> <7FC5> <8494> <84CD> <8996> <8A66> <8A69> <8AE1> <8C55> <8C7A> <57F4> <5BD4> <5F0F> <606F> <62ED> <690D> <6B96> <6E5C> <7184> <7BD2> <8755> <8B58> <8EFE> <98DF> <98FE> <4F38> <4F81> <4FE1> <547B> <5A20> <5BB8> <613C> <65B0> <6668> <71FC> <7533> <795E> <7D33> <814E> <81E3> <8398> <85AA> <85CE> <8703> <8A0A> <8EAB> <8F9B> <8FC5> <5931> <5BA4> <5BE6> <6089> <5BE9> <5C0B> <5FC3> <6C81> <6DF1> <700B> <751A> <82AF> <8AF6> <4EC0> <5341> <96D9> <6C0F> <4E9E> <4FC4> <5152> <555E> <5A25> <5CE8> <6211> <7259> <82BD> endbfrange 100 beginbfrange <83AA> <86FE> <8859> <8A1D> <963F> <96C5> <9913> <9D09> <9D5D> <580A> <5CB3> <5DBD> <5E44> <60E1> <6115> <63E1> <6A02> <6E25> <9102> <9354> <984E> <9C10> <9F77> <5B89> <5CB8> <6309> <664F> <6848> <773C> <96C1> <978D> <9854> <9B9F> <65A1> <8B01> <8ECB> <95BC> <5535> <5CA9> <5DD6> <5EB5> <6697> <764C> <83F4> <95C7> <58D3> <62BC> <72CE> <9D28> <4EF0> <592E> <600F> <663B> <6B83> <79E7> <9D26> <5393> <54C0> <57C3> <5D16> <611B> <66D6> <6DAF> <788D> <827E> <9698> <9744> <5384> <627C> <6396> <6DB2> <7E0A> <814B> <984D> <6AFB> <7F4C> <9DAF> <9E1A> <4E5F> <503B> <51B6> <591C> <60F9> <63F6> <6930> <723A> <8036> <91CE> <5F31> <7D04> <82E5> <846F> <84BB> <85E5> <8E8D> <4F6F> endbfrange 100 beginbfrange <58E4> <5B43> <6059> <63DA> <6518> <656D> <6698> <694A> <6A23> <6D0B> <7001> <716C> <75D2> <760D> <79B3> <7A70> <7F8A> <8944> <8B93> <91C0> <967D> <990A> <5704> <5FA1> <65BC> <6F01> <7600> <79A6> <8A9E> <99AD> <9B5A> <9F6C> <5104> <61B6> <6291> <6A8D> <81C6> <5043> <5830> <5F66> <7109> <8A00> <8AFA> <5B7C> <8616> <4FFA> <513C> <56B4> <5944> <63A9> <6DF9> <5DAA> <696D> <5186> <4E88> <4F59> <5982> <6B5F> <6C5D> <74B5> <7916> <8207> <8245> <8339> <8F3F> <8F5D> <9918> <4EA6> <57DF> <5F79> <6613> <75AB> <7E79> <8B6F> <9006> <9A5B> <56A5> <5827> <59F8> <5A1F> <5BB4> <5EF6> <6350> endbfrange 100 beginbfrange <633B> <693D> <6C87> <6CBF> <6D8E> <6D93> <6DF5> <6F14> <70DF> <7136> <7159> <71C3> <71D5> <784F> <786F> <7B75> <7DE3> <7E2F> <884D> <8EDF> <925B> <9CF6> <6085> <6D85> <71B1> <95B1> <53AD> <67D3> <708E> <7130> <7430> <8276> <82D2> <95BB> <9AE5> <9E7D> <66C4> <71C1> <8449> <584B> <5DB8> <5F71> <6620> <668E> <6979> <69AE> <6C38> <6CF3> <6E36> <6F41> <6FDA> <701B> <702F> <7150> <71DF> <7370> <745B> <74D4> <76C8> <7A4E> <7E93> <82F1> <8A60> <8FCE> <9348> <9719> <4E42> <502A> <5208> <53E1> <66F3> <6C6D> <6FCA> <730A> endbfrange 100 beginbfrange <777F> <7A62> <82AE> <85DD> <8602> <88D4> <8A63> <8B7D> <8C6B> <92B3> <9713> <9810> <4E94> <4F0D> <4FC9> <50B2> <5348> <543E> <5433> <55DA> <5862> <58BA> <5967> <5A1B> <5BE4> <609F> <61CA> <6556> <65FF> <6664> <68A7> <6C5A> <6FB3> <70CF> <71AC> <7352> <7B7D> <8708> <8AA4> <9C32> <9F07> <5C4B> <6C83> <7344> <7389> <923A> <6EAB> <7465> <761F> <7A69> <7E15> <860A> <5140> <58C5> <64C1> <74EE> <7515> <7670> <7FC1> <9095> <96CD> <9954> <6E26> <74E6> <7AA9> <81E5> <86D9> <8778> <8A1B> <5A49> <5B8C> <5B9B> <68A1> <6900> <6D63> <73A9> <7413> <742C> <7897> <7DE9> <7FEB> <8118> <8155> <839E> <8C4C> <962E> <9811> <66F0> <5F80> <65FA> <6789> <6C6A> <738B> <502D> <5A03> <6B6A> endbfrange 100 beginbfrange <77EE> <5916> <5D6C> <5DCD> <7325> <754F> <50E5> <51F9> <582F> <592D> <5996> <59DA> <5BE5> <5DA2> <62D7> <6416> <6493> <64FE> <66DC> <6A48> <71FF> <7464> <7A88> <7AAF> <7E47> <7E5E> <8000> <8170> <87EF> <8981> <8B20> <9059> <9080> <9952> <617E> <6B32> <6D74> <7E1F> <8925> <8FB1> <4FD1> <50AD> <5197> <52C7> <57C7> <5889> <5BB9> <5EB8> <6142> <6995> <6D8C> <6E67> <6EB6> <7194> <7462> <7528> <752C> <8073> <8338> <84C9> <8E0A> <9394> <93DE> <4E8E> <4F51> <5076> <512A> <53C8> <53CB> <53F3> <5B87> <5BD3> <5C24> <611A> <6182> <65F4> <725B> <7397> <7440> <76C2> <7950> <7991> <79B9> <7D06> <7FBD> <828B> <85D5> <865E> <8FC2> <9047> <90F5> endbfrange 100 beginbfrange <91EA> <9685> <96E8> <52D6> <5F67> <65ED> <6631> <682F> <715C> <7A36> <90C1> <980A> <4E91> <6A52> <6B9E> <6F90> <7189> <8018> <82B8> <8553> <904B> <9695> <96F2> <97FB> <851A> <9B31> <4E90> <718A> <96C4> <5143> <539F> <54E1> <5713> <5712> <57A3> <5A9B> <5AC4> <5BC3> <6028> <613F> <63F4> <6C85> <6D39> <6E72> <6E90> <7230> <733F> <7457> <82D1> <8881> <8F45> <9060> <9662> <9858> <9D1B> <6708> <8D8A> <925E> <4F4D> <5049> <50DE> <5371> <570D> <59D4> <5A01> <5C09> <6170> <6690> <6E2D> <7232> <744B> <7DEF> <80C3> <840E> <8466> <853F> <875F> <885B> <8918> <8B02> <9055> <97CB> <9B4F> <4E73> <4F91> <5112> <516A> <552F> <55A9> <5B7A> <5BA5> <5E7C> <5EBE> <60A0> <60DF> <6108> <63C4> endbfrange 100 beginbfrange <6538> <6709> <67D4> <67DA> <6961> <6CB9> <6D27> <6E38> <6FE1> <7336> <745C> <7531> <7652> <7DAD> <81FE> <8438> <88D5> <8A98> <8ADB> <8AED> <8E30> <8E42> <904A> <903E> <907A> <9149> <91C9> <936E> <5809> <6BD3> <8089> <80B2> <5141> <596B> <5C39> <6F64> <73A7> <80E4> <8D07> <9217> <958F> <807F> <620E> <701C> <7D68> <878D> <57A0> <6069> <6147> <6BB7> <8ABE> <9280> <96B1> <4E59> <541F> <6DEB> <852D> <9670> <97F3> <98EE> <63D6> <6CE3> <9091> <51DD> <61C9> <81BA> <9DF9> <4F9D> <501A> <5100> <5B9C> <610F> <61FF> <64EC> <6905> <6BC5> <7591> <77E3> <7FA9> <8264> <858F> <87FB> <8863> <8ABC> <8B70> <91AB> endbfrange 100 beginbfrange <4E8C> <4EE5> <4F0A> <5937> <59E8> <5DF2> <5F1B> <5F5B> <6021> <723E> <73E5> <7570> <75CD> <79FB> <800C> <8033> <8084> <82E1> <8351> <8CBD> <8CB3> <9087> <98F4> <990C> <7037> <76CA> <7FCA> <7FCC> <7FFC> <8B1A> <4EBA> <4EC1> <5203> <5370> <54BD> <56E0> <59FB> <5BC5> <5F15> <5FCD> <6E6E> <7D6A> <8335> <8693> <8A8D> <976D> <9777> <4E00> <4F5A> <4F7E> <58F9> <65E5> <6EA2> <9038> <93B0> <99B9> <4EFB> <58EC> <598A> <59D9> <6041> <7A14> <834F> <8CC3> <5165> <5344> <4ECD> <5269> <5B55> <82BF> <4ED4> <523A> <54A8> <59C9> <59FF> <5B50> <5B57> <5B5C> <6063> <6148> <6ECB> <7099> <716E> endbfrange 100 beginbfrange <7386> <74F7> <75B5> <78C1> <7D2B> <8005> <81EA> <8328> <8517> <85C9> <8AEE> <8CC7> <96CC> <4F5C> <52FA> <56BC> <65AB> <6628> <707C> <70B8> <7235> <7DBD> <828D> <914C> <96C0> <9D72> <5B71> <68E7> <6B98> <6F7A> <76DE> <5C91> <66AB> <6F5B> <7BB4> <7C2A> <8836> <96DC> <4E08> <4ED7> <5320> <5834> <58BB> <58EF> <596C> <5C07> <5E33> <5E84> <5F35> <638C> <66B2> <6756> <6A1F> <6AA3> <6B0C> <6F3F> <7246> <7350> <748B> <7AE0> <7CA7> <8178> <81DF> <81E7> <838A> <846C> <8523> <8594> <85CF> <88DD> <8D13> <91AC> <9577> <969C> <518D> <54C9> <5728> <5BB0> <624D> <6750> <683D> <6893> <6E3D> <6ED3> <707D> <7E21> <88C1> <8CA1> <8F09> <9F4B> <9F4E> <722D> <7B8F> <8ACD> <931A> <4F47> <4F4E> <5132> <5480> endbfrange 100 beginbfrange <59D0> <5E95> <62B5> <6775> <696E> <6A17> <6CAE> <6E1A> <72D9> <732A> <75BD> <7BB8> <7D35> <82E7> <83F9> <8457> <85F7> <8A5B> <8CAF> <8E87> <9019> <90B8> <96CE> <9F5F> <52E3> <540A> <5AE1> <5BC2> <6458> <6575> <6EF4> <72C4> <7684> <7A4D> <7B1B> <7C4D> <7E3E> <7FDF> <837B> <8B2B> <8CCA> <8D64> <8DE1> <8E5F> <8FEA> <8FF9> <9069> <93D1> <4F43> <4F7A> <50B3> <5168> <5178> <524D> <526A> <5861> <587C> <5960> <5C08> <5C55> <5EDB> <609B> <6230> <6813> <6BBF> <6C08> <6FB1> <714E> <7420> <7530> <7538> <7551> <7672> <7B4C> <7B8B> <7BAD> <7BC6> <7E8F> <8A6E> <8F3E> <8F49> <923F> <9293> <9322> <942B> <96FB> <985A> <986B> <991E> <5207> <622A> <6298> <6D59> <7664> <7ACA> <7BC0> <7D76> <5360> <5CBE> endbfrange 100 beginbfrange <5E97> <6F38> <70B9> <7C98> <9711> <9B8E> <9EDE> <63A5> <647A> <8776> <4E01> <4E95> <4EAD> <505C> <5075> <5448> <59C3> <5B9A> <5E40> <5EAD> <5EF7> <5F81> <60C5> <633A> <653F> <6574> <65CC> <6676> <6678> <67FE> <6968> <6A89> <6B63> <6C40> <6DC0> <6DE8> <6E1F> <6E5E> <701E> <70A1> <738E> <73FD> <753A> <775B> <7887> <798E> <7A0B> <7A7D> <7CBE> <7D8E> <8247> <8A02> <8AEA> <8C9E> <912D> <914A> <91D8> <9266> <92CC> <9320> <9706> <9756> <975C> <9802> <9F0E> <5236> <5291> <557C> <5824> <5E1D> <5F1F> <608C> <63D0> <68AF> <6FDF> <796D> <7B2C> <81CD> <85BA> <88FD> <8AF8> <8E44> <918D> <9664> <969B> <973D> <984C> <9F4A> <4FCE> <5146> <51CB> <52A9> <5632> <5F14> <5F6B> <63AA> <64CD> <65E9> <6641> <66FA> endbfrange 100 beginbfrange <66F9> <671D> <689D> <68D7> <69FD> <6F15> <6F6E> <7167> <71E5> <722A> <74AA> <773A> <7956> <795A> <79DF> <7A20> <7A95> <7C97> <7CDF> <7D44> <7E70> <8087> <85FB> <86A4> <8A54> <8ABF> <8D99> <8E81> <9020> <906D> <91E3> <963B> <96D5> <9CE5> <65CF> <7C07> <8DB3> <93C3> <5B58> <5C0A> <5352> <62D9> <731D> <5027> <5B97> <5F9E> <60B0> <616B> <68D5> <6DD9> <742E> <7A2E> <7D42> <7D9C> <7E31> <816B> <8E2A> <8E35> <937E> <9418> <4F50> <5750> <5DE6> <5EA7> <632B> <7F6A> <4E3B> <4F4F> <4F8F> <505A> <59DD> <80C4> <546A> <5468> <55FE> <594F> <5B99> <5DDE> <5EDA> <665D> <6731> <67F1> <682A> <6CE8> <6D32> <6E4A> <6F8D> <70B7> <73E0> <7587> <7C4C> <7D02> <7D2C> <7DA2> <821F> <86DB> <8A3B> <8A85> <8D70> <8E8A> endbfrange 100 beginbfrange <8F33> <9031> <914E> <9152> <9444> <99D0> <7AF9> <7CA5> <4FCA> <5101> <51C6> <57C8> <5BEF> <5CFB> <6659> <6A3D> <6D5A> <6E96> <6FEC> <710C> <756F> <7AE3> <8822> <9021> <9075> <96CB> <99FF> <8301> <4E2D> <4EF2> <8846> <91CD> <537D> <6ADB> <696B> <6C41> <847A> <589E> <618E> <66FE> <62EF> <70DD> <7511> <75C7> <7E52> <84B8> <8B49> <8D08> <4E4B> <53EA> <54AB> <5730> <5740> <5FD7> <6301> <6307> <646F> <652F> <65E8> <667A> <679D> <67B3> <6B62> <6C60> <6C9A> <6F2C> <77E5> <7825> <7949> <7957> <7D19> <80A2> <8102> <81F3> <829D> <82B7> <8718> <8A8C> <8D04> <8DBE> <9072> <76F4> <7A19> <7A37> <7E54> <8077> <5507> <55D4> <5875> <632F> <6422> <6649> <664B> <686D> <699B> <6B84> <6D25> <6EB1> <73CD> endbfrange 100 beginbfrange <7468> <74A1> <755B> <75B9> <76E1> <771E> <778B> <79E6> <7E09> <7E1D> <81FB> <852F> <8897> <8A3A> <8CD1> <8EEB> <8FB0> <9032> <93AD> <9663> <9673> <9707> <4F84> <53F1> <59EA> <5AC9> <5E19> <684E> <74C6> <75BE> <79E9> <7A92> <81A3> <86ED> <8CEA> <8DCC> <8FED> <659F> <6715> <57F7> <6F57> <7DDD> <8F2F> <93F6> <96C6> <5FB5> <61F2> <6F84> <4E14> <4F98> <501F> <53C9> <55DF> <5D6F> <5DEE> <6B21> <6B64> <78CB> <7B9A> <8E49> <8ECA> <906E> <6349> <643E> <7740> <7A84> <932F> <947F> <9F6A> <64B0> <6FAF> <71E6> <74A8> <74DA> <7AC4> <7C12> <7E82> <7CB2> <7E98> <8B9A> <8D0A> <947D> <9910> <994C> <5239> <5BDF> <64E6> <672D> <7D2E> <50ED> <53C3> <5879> <6158> <61FA> <65AC> <7AD9> <8B92> <8B96> endbfrange 100 beginbfrange <5009> <5021> <5275> <5531> <5A3C> <5EE0> <5F70> <6134> <655E> <660C> <6636> <66A2> <69CD> <6EC4> <6F32> <7316> <7621> <7A93> <8139> <8259> <83D6> <84BC> <50B5> <57F0> <5BC0> <5BE8> <5F69> <63A1> <7826> <7DB5> <83DC> <8521> <91C7> <91F5> <518A> <67F5> <7B56> <8CAC> <51C4> <59BB> <60BD> <8655> <501C> <5254> <5C3A> <617D> <621A> <62D3> <64F2> <65A5> <6ECC> <7620> <810A> <8E60> <965F> <96BB> <4EDF> <5343> <5598> <5929> <5DDD> <64C5> <6CC9> <6DFA> <7394> <7A7F> <821B> <85A6> <8CE4> <8E10> <9077> <91E7> <95E1> <9621> <97C6> <51F8> <54F2> <5586> <5FB9> <64A4> <6F88> <7DB4> <8F1F> <8F4D> <9435> <50C9> <5C16> <6CBE> <6DFB> <751B> <77BB> <7C3D> <7C64> <8A79> <8AC2> <581E> <59BE> <5E16> <6377> endbfrange 100 beginbfrange <7252> <758A> <776B> <8ADC> <8CBC> <8F12> <5EF3> <6674> <6DF8> <807D> <83C1> <8ACB> <9751> <9BD6> <5243> <66FF> <6D95> <6EEF> <7DE0> <8AE6> <902E> <905E> <9AD4> <521D> <527F> <54E8> <6194> <6284> <62DB> <68A2> <6912> <695A> <6A35> <7092> <7126> <785D> <7901> <790E> <79D2> <7A0D> <8096> <8278> <82D5> <8349> <8549> <8C82> <8D85> <9162> <918B> <91AE> <4FC3> <56D1> <71ED> <77D7> <8700> <89F8> <5BF8> <5FD6> <6751> <90A8> <53E2> <585A> <5BF5> <60A4> <6181> <6460> <7E3D> <8070> <8525> <9283> <64AE> <50AC> <5D14> <6700> <589C> <62BD> <63A8> <690E> <6978> <6A1E> <6E6B> <76BA> <79CB> <82BB> <8429> <8ACF> <8DA8> <8FFD> <9112> <914B> <919C> <9310> <9318> <939A> <96DB> <9A36> <9C0D> <4E11> <755C> endbfrange 100 beginbfrange <795D> <7AFA> <7B51> <7BC9> <7E2E> <84C4> <8E59> <8E74> <8EF8> <9010> <6625> <693F> <7443> <51FA> <672E> <9EDC> <5145> <5FE0> <6C96> <87F2> <885D> <8877> <60B4> <81B5> <8403> <8D05> <53D6> <5439> <5634> <5A36> <5C31> <708A> <7FE0> <805A> <8106> <81ED> <8DA3> <9189> <9A5F> <9DF2> <5074> <4EC4> <53A0> <60FB> <6E2C> <5C64> <4F88> <5024> <55E4> <5CD9> <5E5F> <6065> <6894> <6CBB> <6DC4> <71BE> <75D4> <75F4> <7661> <7A1A> <7A49> <7DC7> <7DFB> <7F6E> <81F4> <86A9> <8F1C> <96C9> <99B3> <9F52> <5247> <52C5> <98ED> <89AA> <4E03> <67D2> <6F06> <4FB5> <5BE2> <6795> <6C88> <6D78> <741B> <7827> <91DD> <937C> <87C4> <79E4> <7A31> <5FEB> <4ED6> <54A4> <553E> <58AE> <59A5> <60F0> <6253> <62D6> <6736> <6955> endbfrange 100 beginbfrange <8235> <9640> <99B1> <99DD> <502C> <5353> <5544> <577C> <6258> <64E2> <666B> <67DD> <6FC1> <6FEF> <7422> <7438> <8A17> <9438> <5451> <5606> <5766> <5F48> <619A> <6B4E> <7058> <70AD> <7DBB> <8A95> <596A> <812B> <63A2> <7708> <803D> <8CAA> <5854> <642D> <69BB> <5B95> <5E11> <6E6F> <8569> <514C> <53F0> <592A> <6020> <614B> <6B86> <6C70> <6CF0> <7B1E> <80CE> <82D4> <8DC6> <90B0> <98B1> <64C7> <6FA4> <6491> <6504> <514E> <5410> <571F> <8A0E> <615F> <6876> <75DB> <7B52> <7D71> <901A> <5806> <69CC> <817F> <892A> <9000> <9839> <5078> <5957> <59AC> <6295> <900F> <9B2A> <615D> <7279> <95D6> <5761> <5A46> <5DF4> <628A> <64AD> <64FA> <6777> <6CE2> <6D3E> <722C> <7436> endbfrange 100 beginbfrange <7834> <7F77> <82AD> <8DDB> <9817> <5224> <5742> <677F> <7248> <74E3> <8CA9> <8FA6> <9211> <962A> <516B> <53ED> <634C> <4F69> <5504> <6096> <6557> <6C9B> <6D7F> <724C> <72FD> <7A17> <8987> <8C9D> <5F6D> <6F8E> <70F9> <81A8> <610E> <4FBF> <504F> <6241> <7247> <7BC7> <7DE8> <7FE9> <904D> <97AD> <9A19> <8CB6> <576A> <5E73> <67B0> <840D> <8A55> <5420> <5B16> <5E63> <5EE2> <5F0A> <6583> <80BA> <853D> <9589> <965B> <4F48> <5305> <530D> <530F> <5486> <54FA> <5703> <5E03> <6016> <629B> <62B1> <6355> <6CE1> <6D66> <75B1> <7832> <80DE> <812F> <82DE> <8461> <84B2> <888D> <8912> <900B> <92EA> <98FD> <9B91> <5E45> <66B4> <66DD> <7011> <7206> <4FF5> <527D> <5F6A> <6153> <6753> <6A19> <6F02> endbfrange 100 beginbfrange <74E2> <7968> <8868> <8C79> <98C7> <98C4> <9A43> <54C1> <7A1F> <6953> <8AF7> <8C4A> <98A8> <99AE> <5F7C> <62AB> <75B2> <76AE> <88AB> <907F> <9642> <5339> <5F3C> <5FC5> <6CCC> <73CC> <7562> <758B> <7B46> <82FE> <999D> <4E4F> <903C> <4E0B> <4F55> <53A6> <590F> <5EC8> <6630> <6CB3> <7455> <8377> <8766> <8CC0> <9050> <971E> <9C15> <58D1> <5B78> <8650> <8B14> <9DB4> <5BD2> <6068> <608D> <65F1> <6C57> <6F22> <6FA3> <701A> <7F55> <7FF0> <9591> <9650> <97D3> <5272> <8F44> <51FD> <542B> <54B8> <5563> <558A> <6ABB> <6DB5> <7DD8> <8266> <929C> <9677> <9E79> <5408> <54C8> <76D2> <86E4> <95A4> <95D4> <965C> <4EA2> <4F09> <59EE> <5AE6> <5DF7> <6052> <6297> <676D> <6841> <6C86> <6E2F> <7F38> <809B> <822A> endbfrange 100 beginbfrange <9805> <4EA5> <5055> <54B3> <5793> <595A> <5B69> <5BB3> <61C8> <6977> <6D77> <7023> <87F9> <89E3> <8A72> <8AE7> <9082> <99ED> <9AB8> <52BE> <6838> <5016> <5E78> <674F> <8347> <884C> <4EAB> <5411> <56AE> <73E6> <9115> <97FF> <9909> <9957> <9999> <5653> <589F> <865B> <8A31> <61B2> <6AF6> <737B> <8ED2> <6B47> <96AA> <9A57> <5955> <7200> <8D6B> <9769> <4FD4> <5CF4> <5F26> <61F8> <665B> <6CEB> <70AB> <7384> <73B9> <73FE> <7729> <774D> <7D43> <7D62> <7E23> <8237> <8852> <8CE2> <9249> <986F> <5B51> <7A74> <8840> <9801> <5ACC> <4FE0> <5354> <593E> <5CFD> <633E> <6D79> <72F9> <8105> <8107> <83A2> <92CF> <9830> <4EA8> <5144> <5211> <578B> <5F62> <6CC2> <6ECE> <7005> <7050> <70AF> <7192> endbfrange 100 beginbfrange <73E9> <7469> <834A> <87A2> <8861> <9008> <90A2> <93A3> <99A8> <516E> <5F57> <60E0> <6167> <66B3> <8559> <8E4A> <91AF> <978B> <4E4E> <4E92> <547C> <58D5> <58FA> <597D> <5CB5> <5F27> <6236> <6248> <660A> <6667> <6BEB> <6D69> <6DCF> <6E56> <6EF8> <6F94> <6FE0> <6FE9> <705D> <72D0> <7425> <745A> <74E0> <7693> <795C> <7CCA> <7E1E> <80E1> <82A6> <846B> <84BF> <864E> <865F> <8774> <8B77> <8C6A> <93AC> <9800> <9865> <60D1> <6216> <9177> <5A5A> <660F> <6DF7> <6E3E> <743F> <9B42> <5FFD> <60DA> <7B0F> <54C4> <5F18> <6C5E> <6CD3> <6D2A> <70D8> <7D05> <8679> <8A0C> <9D3B> <5316> <548C> <5B05> <6A3A> <706B> <7575> <798D> <79BE> <82B1> <83EF> <8A71> <8B41> <8CA8> <9774> <64F4> <652B> <78BA> <7A6B> endbfrange 100 beginbfrange <4E38> <559A> <5950> <5BA6> <5E7B> <60A3> <63DB> <6B61> <6665> <6853> <6E19> <7165> <74B0> <7D08> <9084> <9A69> <9C25> <6D3B> <6ED1> <733E> <8C41> <95CA> <51F0> <5E4C> <5FA8> <604D> <60F6> <6130> <614C> <6643> <69A5> <6CC1> <6E5F> <6EC9> <6F62> <714C> <749C> <7687> <7BC1> <7C27> <8352> <8757> <9051> <968D> <9EC3> <532F> <56DE> <5EFB> <5F8A> <6062> <6094> <61F7> <6666> <6703> <6A9C> <6DEE> <6FAE> <7070> <736A> <7E6A> <81BE> <8334> <86D4> <8AA8> <8CC4> <5283> <7372> <5B96> <6A6B> <9404> <54EE> <5686> <5B5D> <6548> <6585> <66C9> <689F> <6D8D> <6DC6> <723B> <80B4> <9175> <9A4D> <4FAF> <5019> <539A> <540E> <543C> <5589> <55C5> <5E3F> <5F8C> <673D> <7166> <73DD> <9005> <52DB> <52F3> <5864> <58CE> endbfrange 72 beginbfrange <7104> <718F> <71FB> <85B0> <8A13> <6688> <85A8> <55A7> <6684> <714A> <8431> <5349> <5599> <6BC1> <5F59> <5FBD> <63EE> <6689> <7147> <8AF1> <8F1D> <9EBE> <4F11> <643A> <70CB> <7566> <8667> <6064> <8B4E> <9DF8> <5147> <51F6> <5308> <6D36> <80F8> <9ED1> <6615> <6B23> <7098> <75D5> <5403> <5C79> <7D07> <8A16> <6B20> <6B3D> <6B46> <5438> <6070> <6D3D> <7FD5> <8208> <50D6> <51DE> <559C> <566B> <56CD> <59EC> <5B09> <5E0C> <6199> <6198> <6231> <665E> <66E6> <7199> <71B9> <72A7> <79A7> <7A00> <7FB2> <8A70> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/Katakana b/Resources/cmap/Katakana deleted file mode 100644 index 4e98138c3e9..00000000000 --- a/Resources/cmap/Katakana +++ /dev/null @@ -1,62 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Katakana) -%%Title: (Katakana Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /Katakana def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 864 def -/XUID [1 10 25350] def - -/WMode 0 def - -1 begincodespacerange - <00> -endcodespacerange - -2 begincidrange -<20> <5f> 326 -<60> <7e> 391 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/NWP-H b/Resources/cmap/NWP-H deleted file mode 100644 index b0d39a83831..00000000000 --- a/Resources/cmap/NWP-H +++ /dev/null @@ -1,839 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (NWP-H) -%%Title: (NWP-H Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /NWP-H def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25336] def - -/WMode 0 def - -1 begincodespacerange - <2121> <7E7E> -endcodespacerange - -100 begincidrange -<2121> <2168> 633 -<2169> <2169> 7478 -<216a> <217e> 706 -<2221> <222e> 727 -<223a> <2241> 741 -<224a> <2250> 749 -<225c> <226a> 756 -<2272> <2279> 771 -<227e> <227e> 779 -<2330> <2339> 780 -<2341> <235a> 790 -<2361> <237a> 816 -<2421> <2473> 842 -<2521> <2576> 925 -<2621> <2638> 1011 -<2641> <2658> 1035 -<2721> <2741> 1059 -<2751> <2771> 1092 -<2921> <295f> 232 -<2960> <2960> 390 -<2961> <297e> 296 -<2a21> <2a5f> 327 -<2a60> <2a7e> 391 -<2b21> <2b71> 422 -<2b72> <2b72> 295 -<2b73> <2b7e> 503 -<2c24> <2c6f> 7479 -<2d21> <2d3e> 7555 -<2d40> <2d56> 7585 -<2d60> <2d6f> 7608 -<2d70> <2d70> 762 -<2d71> <2d71> 761 -<2d72> <2d72> 769 -<2d73> <2d79> 7624 -<2d7a> <2d7a> 768 -<2d7b> <2d7c> 7631 -<2e21> <2e21> 642 -<2e22> <2e22> 673 -<2e23> <2e23> 773 -<2e24> <2e24> 712 -<2e25> <2e25> 715 -<2e26> <2e26> 717 -<2e27> <2e27> 671 -<2e28> <2e29> 674 -<2e2a> <2e2a> 718 -<2e2b> <2e2b> 692 -<2e2c> <2e2c> 636 -<2e2d> <2e2d> 693 -<2e2e> <2e2e> 637 -<2e2f> <2e2f> 663 -<2e30> <2e39> 780 -<2e3a> <2e3b> 639 -<2e3c> <2e3c> 699 -<2e3d> <2e3d> 697 -<2e3e> <2e3e> 700 -<2e3f> <2e3f> 641 -<2e40> <2e40> 719 -<2e41> <2e5a> 790 -<2e5b> <2e5b> 678 -<2e5c> <2e5c> 711 -<2e5d> <2e5d> 679 -<2e5e> <2e5e> 648 -<2e5f> <2e5f> 650 -<2e60> <2e60> 646 -<2e61> <2e7a> 816 -<2e7b> <2e7b> 680 -<2e7c> <2e7c> 667 -<2e7d> <2e7d> 681 -<2e7e> <2e7e> 649 -<2f21> <2f21> 635 -<2f22> <2f23> 686 -<2f24> <2f24> 634 -<2f25> <2f25> 638 -<2f26> <2f26> 1006 -<2f27> <2f27> 925 -<2f28> <2f28> 927 -<2f29> <2f29> 929 -<2f2a> <2f2a> 931 -<2f2b> <2f2b> 933 -<2f2c> <2f2c> 991 -<2f2d> <2f2d> 993 -<2f2e> <2f2e> 995 -<2f2f> <2f2f> 959 -<2f30> <2f30> 660 -<2f31> <2f31> 926 -<2f32> <2f32> 928 -<2f33> <2f33> 930 -<2f34> <2f34> 932 -<2f35> <2f36> 934 -<2f37> <2f37> 937 -<2f38> <2f38> 939 -<2f39> <2f39> 941 -<2f3a> <2f3a> 943 -<2f3b> <2f3b> 945 -<2f3c> <2f3c> 947 -<2f3d> <2f3d> 949 -<2f3e> <2f3e> 951 -<2f3f> <2f3f> 953 -<2f40> <2f40> 955 -<2f41> <2f41> 957 -endcidrange - -100 begincidrange -<2f42> <2f42> 960 -<2f43> <2f43> 962 -<2f44> <2f44> 964 -<2f45> <2f4a> 966 -<2f4b> <2f4b> 974 -<2f4c> <2f4c> 977 -<2f4d> <2f4d> 980 -<2f4e> <2f4e> 983 -<2f4f> <2f53> 986 -<2f54> <2f54> 992 -<2f55> <2f55> 994 -<2f56> <2f5b> 996 -<2f5c> <2f5c> 1003 -<2f5d> <2f5d> 1007 -<2f5e> <2f5f> 643 -<2f60> <2f61> 1004 -<2f62> <2f62> 1002 -<2f63> <2f64> 1009 -<2f65> <2f65> 1008 -<2f66> <2f66> 936 -<2f67> <2f67> 938 -<2f68> <2f68> 940 -<2f69> <2f69> 942 -<2f6a> <2f6a> 944 -<2f6b> <2f6b> 946 -<2f6c> <2f6c> 948 -<2f6d> <2f6d> 950 -<2f6e> <2f6e> 952 -<2f6f> <2f6f> 954 -<2f70> <2f70> 956 -<2f71> <2f71> 958 -<2f72> <2f72> 961 -<2f73> <2f73> 963 -<2f74> <2f74> 965 -<2f75> <2f76> 972 -<2f77> <2f78> 975 -<2f79> <2f7a> 978 -<2f7b> <2f7c> 981 -<2f7d> <2f7e> 984 -<3021> <3021> 1125 -<3022> <3022> 7633 -<3023> <3032> 1127 -<3033> <3033> 7330 -<3034> <303a> 1144 -<303b> <303b> 7634 -<303c> <306d> 1152 -<306e> <306e> 7635 -<306f> <3072> 1203 -<3073> <3073> 7636 -<3074> <307b> 1208 -<307c> <307c> 7637 -<307d> <307e> 1217 -<3121> <3129> 1219 -<312a> <312a> 7638 -<312b> <3134> 1229 -<3135> <3135> 7639 -<3136> <3138> 1240 -<3139> <3139> 7640 -<313a> <313b> 1244 -<313c> <313d> 7641 -<313e> <3141> 1248 -<3142> <3142> 7643 -<3143> <316a> 1253 -<316b> <316b> 7644 -<316c> <317e> 1294 -<3221> <3227> 1313 -<3228> <3228> 7645 -<3229> <3229> 7369 -<322a> <322a> 7646 -<322b> <325f> 1323 -<3260> <3260> 7647 -<3261> <3279> 1377 -<327a> <327a> 7648 -<327b> <327c> 1403 -<327d> <327d> 7649 -<327e> <327e> 1406 -<3321> <3321> 1407 -<3322> <3322> 7650 -<3323> <3341> 1409 -<3342> <3342> 6497 -<3343> <3348> 1441 -<3349> <3349> 5023 -<334a> <3364> 1448 -<3365> <3365> 7651 -<3366> <336a> 1476 -<336b> <336b> 7652 -<336c> <3372> 1482 -<3373> <3373> 7653 -<3374> <3375> 1490 -<3376> <3376> 5937 -<3377> <3379> 1493 -<337a> <337a> 7654 -<337b> <337e> 1497 -<3421> <3441> 1501 -<3442> <3442> 7655 -<3443> <3443> 5490 -<3444> <344c> 1536 -<344d> <344d> 7656 -<344e> <3451> 1546 -<3452> <3452> 6688 -endcidrange - -100 begincidrange -<3453> <3464> 1551 -<3465> <3465> 7657 -<3466> <347e> 1570 -<3521> <352a> 1595 -<352b> <352b> 7658 -<352c> <353f> 1606 -<3540> <3540> 7659 -<3541> <357e> 1627 -<3621> <3621> 1689 -<3622> <3622> 7660 -<3623> <3629> 1691 -<362a> <362a> 7661 -<362b> <3645> 1699 -<3646> <3646> 7474 -<3647> <364e> 1727 -<364f> <364f> 7662 -<3650> <366c> 1736 -<366d> <366d> 7663 -<366e> <3673> 1766 -<3674> <3674> 7664 -<3675> <367a> 1773 -<367b> <367b> 7665 -<367c> <367c> 1780 -<367d> <367d> 7666 -<367e> <367e> 1782 -<3721> <3723> 1783 -<3724> <3724> 7667 -<3725> <3736> 1787 -<3737> <3737> 7668 -<3738> <3744> 1806 -<3745> <3745> 7669 -<3746> <374d> 1820 -<374e> <374e> 7670 -<374f> <3751> 1829 -<3752> <3752> 7671 -<3753> <3754> 1833 -<3755> <3755> 7672 -<3756> <375a> 1836 -<375b> <375b> 7181 -<375c> <3763> 1842 -<3764> <3764> 7673 -<3765> <3770> 1851 -<3771> <3771> 7674 -<3772> <3778> 1864 -<3779> <3779> 7675 -<377a> <377d> 1872 -<377e> <377e> 7676 -<3821> <3833> 1877 -<3834> <3834> 7677 -<3835> <3840> 1897 -<3841> <3841> 7678 -<3842> <387e> 1910 -<3921> <392a> 1971 -<392b> <392b> 7679 -<392c> <3936> 1982 -<3937> <3937> 7680 -<3938> <3941> 1994 -<3942> <3942> 7681 -<3943> <395b> 2005 -<395c> <395c> 5853 -<395d> <396c> 2031 -<396d> <396d> 7682 -<396e> <3973> 2048 -<3974> <3974> 7683 -<3975> <3978> 2055 -<3979> <3979> 7684 -<397a> <397e> 2060 -<3a21> <3a52> 2065 -<3a53> <3a53> 7685 -<3a54> <3a66> 2116 -<3a67> <3a67> 7686 -<3a68> <3a73> 2136 -<3a74> <3a74> 7687 -<3a75> <3a7e> 2149 -<3b21> <3b26> 2159 -<3b27> <3b27> 7688 -<3b28> <3b29> 2166 -<3b2a> <3b2a> 7689 -<3b2b> <3b2b> 2169 -<3b2c> <3b2c> 7690 -<3b2d> <3b38> 2171 -<3b39> <3b39> 7691 -<3b3a> <3b7e> 2184 -<3c21> <3c37> 2253 -<3c38> <3c38> 7692 -<3c39> <3c47> 2277 -<3c48> <3c48> 7693 -<3c49> <3c49> 6441 -<3c4a> <3c56> 2294 -<3c57> <3c57> 7694 -<3c58> <3c5c> 2308 -<3c5d> <3c5e> 7695 -<3c5f> <3c7e> 2315 -<3d21> <3d2a> 2347 -<3d2b> <3d2b> 7697 -<3d2c> <3d35> 2358 -<3d36> <3d36> 7698 -<3d37> <3d6b> 2369 -<3d6c> <3d6d> 7699 -<3d6e> <3d71> 2424 -endcidrange - -100 begincidrange -<3d72> <3d73> 7701 -<3d74> <3d7e> 2430 -<3e21> <3e24> 2441 -<3e25> <3e25> 7703 -<3e26> <3e32> 2446 -<3e33> <3e33> 7704 -<3e34> <3e3e> 2460 -<3e3f> <3e3f> 7705 -<3e40> <3e54> 2472 -<3e55> <3e55> 7706 -<3e56> <3e5e> 2494 -<3e5f> <3e5f> 7707 -<3e60> <3e63> 2504 -<3e64> <3e64> 7708 -<3e65> <3e7e> 2509 -<3f21> <3f29> 2535 -<3f2a> <3f2a> 7709 -<3f2b> <3f58> 2545 -<3f59> <3f59> 7710 -<3f5a> <3f5f> 2592 -<3f60> <3f60> 7711 -<3f61> <3f68> 2599 -<3f69> <3f69> 7712 -<3f6a> <3f7e> 2608 -<4021> <4021> 2629 -<4022> <4022> 7713 -<4023> <4041> 2631 -<4042> <4042> 7714 -<4043> <4065> 2663 -<4066> <4066> 7715 -<4067> <4070> 2699 -<4071> <4072> 7716 -<4073> <4078> 2711 -<4079> <407a> 7718 -<407b> <407e> 2719 -<4121> <4126> 2723 -<4127> <4127> 7720 -<4128> <4128> 6766 -<4129> <4138> 2731 -<4139> <4139> 7721 -<413a> <414b> 2748 -<414c> <414c> 7722 -<414d> <414e> 2767 -<414f> <414f> 7723 -<4150> <415e> 2770 -<415f> <415f> 7724 -<4160> <4168> 2786 -<4169> <4169> 7725 -<416a> <417e> 2796 -<4221> <423c> 2817 -<423d> <423d> 7726 -<423e> <424c> 2846 -<424d> <424d> 7727 -<424e> <425b> 2862 -<425c> <425c> 7728 -<425d> <4262> 2877 -<4263> <4263> 7729 -<4264> <426e> 2884 -<426f> <426f> 7730 -<4270> <4274> 2896 -<4275> <4276> 7731 -<4277> <427c> 2903 -<427d> <427d> 7733 -<427e> <427e> 2910 -<4321> <4326> 2911 -<4327> <4327> 7734 -<4328> <4328> 2918 -<4329> <432a> 7735 -<432b> <432c> 2921 -<432d> <432e> 7737 -<432f> <433c> 2925 -<433d> <433d> 7739 -<433e> <436f> 2940 -<4370> <4370> 7740 -<4371> <4374> 2991 -<4375> <4375> 7741 -<4376> <437b> 2996 -<437c> <437c> 7742 -<437d> <437e> 3003 -<4421> <443c> 3005 -<443d> <443d> 7743 -<443e> <4447> 3034 -<4448> <4448> 7744 -<4449> <4449> 3045 -<444a> <444a> 7745 -<444b> <444c> 3047 -<444d> <444d> 7746 -<444e> <444e> 3050 -<444f> <444f> 7747 -<4450> <445a> 3052 -<445b> <445b> 4533 -<445c> <447e> 3064 -<4521> <4521> 3099 -<4522> <4522> 7748 -<4523> <4526> 3101 -<4527> <4527> 7749 -<4528> <452d> 3106 -<452e> <452e> 7750 -<452f> <4535> 3113 -<4536> <4536> 7751 -endcidrange - -100 begincidrange -<4537> <453e> 3121 -<453f> <453f> 7752 -<4540> <4547> 3130 -<4548> <4548> 7753 -<4549> <454a> 3139 -<454b> <454b> 7754 -<454c> <4550> 3142 -<4551> <4552> 7755 -<4553> <4556> 3149 -<4557> <4557> 5855 -<4558> <4563> 3154 -<4564> <4564> 7757 -<4565> <456d> 3167 -<456e> <456e> 5200 -<456f> <4572> 3177 -<4573> <4573> 5430 -<4574> <4577> 3182 -<4578> <4578> 7758 -<4579> <457e> 3187 -<4621> <463d> 3193 -<463e> <463e> 7759 -<463f> <4641> 3223 -<4642> <4642> 7760 -<4643> <4653> 3227 -<4654> <4655> 7761 -<4656> <465a> 3246 -<465b> <465c> 7763 -<465d> <4660> 3253 -<4661> <4661> 7765 -<4662> <4665> 3258 -<4666> <4667> 7766 -<4668> <4669> 3264 -<466a> <466a> 7768 -<466b> <4675> 3267 -<4676> <4676> 6893 -<4677> <467e> 3279 -<4721> <4728> 3287 -<4729> <4729> 7769 -<472a> <4738> 3296 -<4739> <4739> 7770 -<473a> <4756> 3312 -<4757> <4757> 7771 -<4758> <4766> 3342 -<4767> <4767> 7772 -<4768> <4768> 6537 -<4769> <4769> 7773 -<476a> <476c> 3360 -<476d> <476d> 7774 -<476e> <477e> 3364 -<4821> <4823> 3381 -<4824> <4824> 7775 -<4825> <482d> 3385 -<482e> <482e> 7776 -<482f> <482f> 3395 -<4830> <4830> 7777 -<4831> <4853> 3397 -<4854> <4854> 7778 -<4855> <4861> 3433 -<4862> <4862> 7779 -<4863> <4874> 3447 -<4875> <4875> 7780 -<4876> <487e> 3466 -<4921> <4921> 3475 -<4922> <4923> 7781 -<4924> <492e> 3478 -<492f> <492f> 7783 -<4930> <4930> 5179 -<4931> <4931> 3491 -<4932> <4932> 7784 -<4933> <4934> 3493 -<4935> <4935> 7785 -<4936> <493f> 3496 -<4940> <4940> 7786 -<4941> <494d> 3507 -<494e> <494e> 7787 -<494f> <4950> 3521 -<4951> <4951> 7788 -<4952> <497e> 3524 -<4a21> <4a42> 3569 -<4a43> <4a43> 7789 -<4a44> <4a4c> 3604 -<4a4d> <4a4d> 7790 -<4a4e> <4a59> 3614 -<4a5a> <4a5a> 7791 -<4a5b> <4a78> 3627 -<4a79> <4a79> 7792 -<4a7a> <4a7e> 3658 -<4b21> <4b21> 3663 -<4b22> <4b22> 7793 -<4b23> <4b28> 3665 -<4b29> <4b29> 7794 -<4b2a> <4b4a> 3672 -<4b4b> <4b4b> 7795 -<4b4c> <4b69> 3706 -<4b6a> <4b6a> 7475 -<4b6b> <4b6f> 3737 -<4b70> <4b70> 7796 -<4b71> <4b78> 3743 -<4b79> <4b79> 4143 -<4b7a> <4b7e> 3752 -endcidrange - -100 begincidrange -<4c21> <4c4c> 3757 -<4c4d> <4c4d> 7797 -<4c4e> <4c58> 3802 -<4c59> <4c59> 7798 -<4c5a> <4c5e> 3814 -<4c5f> <4c5f> 7799 -<4c60> <4c61> 3820 -<4c62> <4c62> 7800 -<4c63> <4c78> 3823 -<4c79> <4c79> 6453 -<4c7a> <4c7a> 7801 -<4c7b> <4c7b> 3847 -<4c7c> <4c7c> 7802 -<4c7d> <4c7d> 3849 -<4c7e> <4c7e> 7803 -<4d21> <4d31> 3851 -<4d32> <4d32> 7804 -<4d33> <4d4f> 3869 -<4d50> <4d50> 7805 -<4d51> <4d53> 3899 -<4d54> <4d54> 7806 -<4d55> <4d59> 3903 -<4d5a> <4d5a> 7476 -<4d5b> <4d68> 3909 -<4d69> <4d69> 7807 -<4d6a> <4d7e> 3924 -<4e21> <4e4a> 3945 -<4e4b> <4e4b> 7808 -<4e4c> <4e79> 3988 -<4e7a> <4e7b> 7809 -<4e7c> <4e7e> 4036 -<4f21> <4f21> 7811 -<4f22> <4f30> 4040 -<4f31> <4f31> 7812 -<4f32> <4f35> 4056 -<4f36> <4f36> 6007 -<4f37> <4f38> 4061 -<4f39> <4f39> 7813 -<4f3a> <4f53> 4064 -<5021> <5055> 4090 -<5056> <5056> 3751 -<5057> <507e> 4144 -<5121> <513c> 4184 -<513d> <513d> 7814 -<513e> <5146> 4213 -<5147> <5147> 7815 -<5148> <514a> 4223 -<514b> <514b> 7816 -<514c> <514c> 4227 -<514d> <514d> 7817 -<514e> <517e> 4229 -<5221> <527e> 4278 -<5321> <532f> 4372 -<5330> <5330> 7818 -<5331> <5339> 4388 -<533a> <533a> 7819 -<533b> <534f> 4398 -<5350> <5350> 7820 -<5351> <535d> 4420 -<535e> <535e> 7821 -<535f> <536a> 4434 -<536b> <536b> 7822 -<536c> <537e> 4447 -<5421> <5443> 4466 -<5444> <5444> 7823 -<5445> <5463> 4502 -<5464> <5464> 3063 -<5465> <547e> 4534 -<5521> <553c> 4560 -<553d> <553d> 7824 -<553e> <5562> 4589 -<5563> <5563> 7825 -<5564> <557e> 4627 -<5621> <5621> 4654 -<5622> <5622> 7826 -<5623> <5671> 4656 -<5672> <5672> 7827 -<5673> <567e> 4736 -<5721> <577e> 4748 -<5821> <5823> 4842 -<5824> <5824> 7828 -<5825> <587e> 4846 -<5921> <595f> 4936 -<5960> <5960> 7829 -<5961> <596b> 5000 -<596c> <596c> 7830 -<596d> <5977> 5012 -<5978> <5978> 1447 -<5979> <597e> 5024 -<5a21> <5a38> 5030 -<5a39> <5a39> 7831 -<5a3a> <5a4c> 5055 -<5a4d> <5a4d> 7832 -<5a4e> <5a7e> 5075 -<5b21> <5b44> 5124 -<5b45> <5b45> 7833 -<5b46> <5b49> 5161 -<5b4a> <5b4a> 7834 -<5b4b> <5b57> 5166 -<5b58> <5b58> 3490 -endcidrange - -100 begincidrange -<5b59> <5b6a> 5180 -<5b6b> <5b6b> 7835 -<5b6c> <5b6c> 5199 -<5b6d> <5b6d> 3176 -<5b6e> <5b73> 5201 -<5b74> <5b74> 7836 -<5b75> <5b7e> 5208 -<5c21> <5c7e> 5218 -<5d21> <5d7e> 5312 -<5e21> <5e38> 5406 -<5e39> <5e39> 3181 -<5e3a> <5e4f> 5431 -<5e50> <5e50> 7837 -<5e51> <5e74> 5454 -<5e75> <5e75> 1535 -<5e76> <5e7e> 5491 -<5f21> <5f72> 5500 -<5f73> <5f73> 7838 -<5f74> <5f7e> 5583 -<6021> <6025> 5594 -<6026> <6026> 7839 -<6027> <605e> 5600 -<605f> <605f> 7840 -<6060> <6075> 5657 -<6076> <6076> 7477 -<6077> <607e> 5680 -<6121> <612a> 5688 -<612b> <612b> 7841 -<612c> <612f> 5699 -<6130> <6131> 7842 -<6132> <617e> 5705 -<6221> <622a> 5782 -<622b> <622b> 7844 -<622c> <6267> 5793 -<6268> <6268> 2030 -<6269> <6269> 5854 -<626a> <626a> 3153 -<626b> <626e> 5856 -<626f> <626f> 7845 -<6270> <627e> 5861 -<6321> <6349> 5876 -<634a> <634a> 7846 -<634b> <6353> 5918 -<6354> <6354> 7847 -<6355> <635d> 5928 -<635e> <635e> 1492 -<635f> <637e> 5938 -<6421> <6438> 5970 -<6439> <6439> 7848 -<643a> <6445> 5995 -<6446> <6446> 4060 -<6447> <6463> 6008 -<6464> <6464> 7849 -<6465> <646d> 6038 -<646e> <646e> 7850 -<646f> <647e> 6048 -<6521> <6538> 6064 -<6539> <6539> 7851 -<653a> <653a> 6089 -<653b> <653b> 7852 -<653c> <6545> 6091 -<6546> <6546> 7853 -<6547> <657e> 6102 -<6621> <6645> 6158 -<6646> <6646> 7854 -<6647> <667e> 6196 -<6721> <6763> 6252 -<6764> <6764> 7855 -<6765> <6768> 6320 -<6769> <6769> 7856 -<676a> <6771> 6325 -<6772> <6772> 7857 -<6773> <677e> 6334 -<6821> <6833> 6346 -<6834> <6834> 7858 -<6835> <683a> 6366 -<683b> <683b> 7859 -<683c> <6873> 6373 -<6874> <6874> 7860 -<6875> <687e> 6430 -<6921> <6921> 6440 -<6922> <6922> 2293 -<6923> <692d> 6442 -<692e> <692e> 3845 -<692f> <693b> 6454 -<693c> <693c> 7861 -<693d> <6959> 6468 -<695a> <695a> 1440 -<695b> <697e> 6498 -<6a21> <6a23> 6534 -<6a24> <6a24> 3358 -<6a25> <6a26> 6538 -<6a27> <6a27> 7862 -<6a28> <6a3c> 6541 -<6a3d> <6a3d> 7863 -<6a3e> <6a6e> 6563 -<6a6f> <6a6f> 7864 -<6a70> <6a7e> 6613 -<6b21> <6b31> 6628 -<6b32> <6b32> 7865 -endcidrange - -59 begincidrange -<6b33> <6b5c> 6646 -<6b5d> <6b5d> 1550 -<6b5e> <6b65> 6689 -<6b66> <6b66> 7866 -<6b67> <6b75> 6698 -<6b76> <6b76> 7867 -<6b77> <6b7e> 6714 -<6c21> <6c4c> 6722 -<6c4d> <6c4d> 2730 -<6c4e> <6c68> 6767 -<6c69> <6c69> 7868 -<6c6a> <6c73> 6795 -<6c74> <6c74> 7869 -<6c75> <6c7e> 6806 -<6d21> <6d4d> 6816 -<6d4e> <6d4e> 7870 -<6d4f> <6d6b> 6862 -<6d6c> <6d6c> 7871 -<6d6d> <6d6d> 6892 -<6d6e> <6d6e> 7872 -<6d6f> <6d7e> 6894 -<6e21> <6e28> 6910 -<6e29> <6e29> 7873 -<6e2a> <6e3c> 6919 -<6e3d> <6e3d> 7874 -<6e3e> <6e56> 6939 -<6e57> <6e57> 7875 -<6e58> <6e7e> 6965 -<6f21> <6f64> 7004 -<6f65> <6f65> 7876 -<6f66> <6f7e> 7073 -<7021> <7032> 7098 -<7033> <7033> 7877 -<7034> <7044> 7117 -<7045> <7045> 7878 -<7046> <7050> 7135 -<7051> <7051> 7879 -<7052> <7056> 7147 -<7057> <7057> 7880 -<7058> <7073> 7153 -<7074> <7074> 1841 -<7075> <7075> 7881 -<7076> <707e> 7183 -<7121> <717e> 7192 -<7221> <722c> 7286 -<722d> <722d> 7882 -<722e> <723b> 7299 -<723c> <723c> 7883 -<723d> <724c> 7314 -<724d> <724d> 1143 -<724e> <724e> 7884 -<724f> <7273> 7332 -<7274> <7274> 1321 -<7275> <727e> 7370 -<7321> <7350> 7380 -<7351> <7351> 7885 -<7352> <737c> 7429 -<737d> <737d> 7886 -<737e> <737e> 7473 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/NWP-V b/Resources/cmap/NWP-V deleted file mode 100644 index c8ab77591cd..00000000000 --- a/Resources/cmap/NWP-V +++ /dev/null @@ -1,107 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (NWP-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (NWP-H) -%%BeginResource: CMap (NWP-V) -%%Title: (NWP-V Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/NWP-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /NWP-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/XUID [1 10 25337] def - -/WMode 1 def - -48 begincidrange -<2122> <2123> 7887 -<2124> <2124> 8268 -<2125> <2125> 8274 -<212b> <212b> 8272 -<212c> <212c> 8271 -<213c> <213e> 7891 -<2141> <2145> 7894 -<2146> <2146> 8281 -<2147> <2147> 8276 -<2148> <2148> 8279 -<2149> <2149> 8278 -<214a> <215b> 7899 -<216b> <216b> 8269 -<216c> <216c> 8273 -<216d> <216d> 8283 -<222e> <222e> 8270 -<2421> <2421> 7918 -<2423> <2423> 7919 -<2425> <2425> 7920 -<2427> <2427> 7921 -<2429> <2429> 7922 -<2443> <2443> 7923 -<2463> <2463> 7924 -<2465> <2465> 7925 -<2467> <2467> 7926 -<246e> <246e> 7927 -<2521> <2521> 7928 -<2523> <2523> 7929 -<2525> <2525> 7930 -<2527> <2527> 7931 -<2529> <2529> 7932 -<2543> <2543> 7933 -<2563> <2563> 7934 -<2565> <2565> 7935 -<2567> <2567> 7936 -<256e> <256e> 7937 -<2575> <2576> 7938 -<2d40> <2d4f> 7940 -<2d60> <2d61> 7956 -<2f21> <2f21> 7888 -<2f22> <2f23> 7911 -<2f24> <2f24> 7887 -<2f27> <2f2b> 7928 -<2f2c> <2f2e> 7934 -<2f2f> <2f2f> 7933 -<2f30> <2f30> 7891 -<2f5e> <2f5e> 8272 -<2f5f> <2f5f> 8271 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/RKSJ-H b/Resources/cmap/RKSJ-H deleted file mode 100644 index 24cf31b4f54..00000000000 --- a/Resources/cmap/RKSJ-H +++ /dev/null @@ -1,192 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (RKSJ-H) -%%Title: (RKSJ-H Adobe Japan1 1) -%%Version: 5.008 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1996 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 1 def -end def - -/CMapName /RKSJ-H def -/CMapVersion 5.008 def -/CMapType 1 def - -/UIDOffset 210 def -/XUID [1 10 25338] def - -/WMode 0 def - -4 begincodespacerange - <00> <80> - <8140> <9FFC> - - -endcodespacerange - -1 beginnotdefrange -<00> <1f> 231 -endnotdefrange - -100 begincidrange -<20> <7e> 231 -<8140> <817e> 633 -<8180> <81ac> 696 -<81b8> <81bf> 741 -<81c8> <81ce> 749 -<81da> <81e8> 756 -<81f0> <81f7> 771 -<81fc> <81fc> 779 -<824f> <8258> 780 -<8260> <8279> 790 -<8281> <829a> 816 -<829f> <82f1> 842 -<8340> <837e> 925 -<8380> <8396> 988 -<839f> <83b6> 1011 -<83bf> <83d6> 1035 -<8440> <8460> 1059 -<8470> <847e> 1092 -<8480> <8491> 1107 -<849f> <849f> 7479 -<84a0> <84a0> 7481 -<84a1> <84a1> 7491 -<84a2> <84a2> 7495 -<84a3> <84a3> 7503 -<84a4> <84a4> 7499 -<84a5> <84a5> 7507 -<84a6> <84a6> 7523 -<84a7> <84a7> 7515 -<84a8> <84a8> 7531 -<84a9> <84a9> 7539 -<84aa> <84aa> 7480 -<84ab> <84ab> 7482 -<84ac> <84ac> 7494 -<84ad> <84ad> 7498 -<84ae> <84ae> 7506 -<84af> <84af> 7502 -<84b0> <84b0> 7514 -<84b1> <84b1> 7530 -<84b2> <84b2> 7522 -<84b3> <84b3> 7538 -<84b4> <84b4> 7554 -<84b5> <84b5> 7511 -<84b6> <84b6> 7526 -<84b7> <84b7> 7519 -<84b8> <84b8> 7534 -<84b9> <84b9> 7542 -<84ba> <84ba> 7508 -<84bb> <84bb> 7527 -<84bc> <84bc> 7516 -<84bd> <84bd> 7535 -<84be> <84be> 7545 -<889f> <88fc> 1125 -<8940> <897e> 1219 -<8980> <89fc> 1282 -<8a40> <8a7e> 1407 -<8a80> <8afc> 1470 -<8b40> <8b7e> 1595 -<8b80> <8bfc> 1658 -<8c40> <8c7e> 1783 -<8c80> <8cfc> 1846 -<8d40> <8d7e> 1971 -<8d80> <8dfc> 2034 -<8e40> <8e7e> 2159 -<8e80> <8efc> 2222 -<8f40> <8f7e> 2347 -<8f80> <8ffc> 2410 -<9040> <907e> 2535 -<9080> <90fc> 2598 -<9140> <917e> 2723 -<9180> <91fc> 2786 -<9240> <927e> 2911 -<9280> <92fc> 2974 -<9340> <937e> 3099 -<9380> <93fc> 3162 -<9440> <947e> 3287 -<9480> <94fc> 3350 -<9540> <957e> 3475 -<9580> <95fc> 3538 -<9640> <967e> 3663 -<9680> <96fc> 3726 -<9740> <977e> 3851 -<9780> <97fc> 3914 -<9840> <9872> 4039 -<989f> <98fc> 4090 -<9940> <997e> 4184 -<9980> <99fc> 4247 -<9a40> <9a7e> 4372 -<9a80> <9afc> 4435 -<9b40> <9b7e> 4560 -<9b80> <9bfc> 4623 -<9c40> <9c7e> 4748 -<9c80> <9cfc> 4811 -<9d40> <9d7e> 4936 -<9d80> <9dfc> 4999 -<9e40> <9e7e> 5124 -<9e80> <9efc> 5187 -<9f40> <9f7e> 5312 -<9f80> <9ffc> 5375 - 326 - 5500 -endcidrange - -22 begincidrange - 5563 - 5688 - 5751 - 5876 - 5939 - 6064 - 6127 - 6252 - 6315 - 6440 - 6503 - 6628 - 6691 - 6816 - 6879 - 7004 - 7067 - 7192 - 7255 - 7380 - 7443 - 8284 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/RKSJ-V b/Resources/cmap/RKSJ-V deleted file mode 100644 index c8fc71aae97..00000000000 --- a/Resources/cmap/RKSJ-V +++ /dev/null @@ -1,87 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%DocumentNeededResources: CMap (RKSJ-H) -%%IncludeResource: ProcSet (CIDInit) -%%IncludeResource: CMap (RKSJ-H) -%%BeginResource: CMap (RKSJ-V) -%%Title: (RKSJ-V Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/RKSJ-H usecmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /RKSJ-V def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 840 def -/XUID [1 10 25339] def - -/WMode 1 def - -27 begincidrange -<8141> <8142> 7887 -<8150> <8151> 7889 -<815b> <815d> 7891 -<8160> <8164> 7894 -<8169> <817a> 7899 -<8181> <8181> 7917 -<829f> <829f> 7918 -<82a1> <82a1> 7919 -<82a3> <82a3> 7920 -<82a5> <82a5> 7921 -<82a7> <82a7> 7922 -<82c1> <82c1> 7923 -<82e1> <82e1> 7924 -<82e3> <82e3> 7925 -<82e5> <82e5> 7926 -<82ec> <82ec> 7927 -<8340> <8340> 7928 -<8342> <8342> 7929 -<8344> <8344> 7930 -<8346> <8346> 7931 -<8348> <8348> 7932 -<8362> <8362> 7933 -<8383> <8383> 7934 -<8385> <8385> 7935 -<8387> <8387> 7936 -<838e> <838e> 7937 -<8395> <8396> 7938 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/Roman b/Resources/cmap/Roman deleted file mode 100644 index 36a07847645..00000000000 --- a/Resources/cmap/Roman +++ /dev/null @@ -1,61 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (Roman) -%%Title: (Roman Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /Roman def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 866 def -/XUID [1 10 25351] def - -/WMode 0 def - -1 begincodespacerange - <00> -endcodespacerange - -1 begincidrange -<20> <7e> 231 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-90ms-RKSJ b/Resources/cmap/UCS2-90ms-RKSJ deleted file mode 100644 index fca69566747..00000000000 --- a/Resources/cmap/UCS2-90ms-RKSJ +++ /dev/null @@ -1,7178 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-90ms-RKSJ) -%%Title: (UCS2-90ms-RKSJ) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_90ms_RKSJ) def - /Supplement 2 def -end def - -/CMapName /UCS2-90ms-RKSJ def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <0000> <20> -<0001> <0080> <01> -<00A1> <00A1> <21> -<00A2> <00A3> <8191> -<00A5> <00A5> <5C> -<00A6> <00A6> <7C> -<00A7> <00A7> <8198> -<00A8> <00A8> <814E> -<00A9> <00A9> <63> -<00AA> <00AA> <61> -<00AB> <00AB> <81E1> -<00AC> <00AC> <81CA> -<00AD> <00AD> <2D> -<00AE> <00AE> <52> -<00AF> <00AF> <8150> -<00B0> <00B0> <818B> -<00B1> <00B1> <817D> -<00B2> <00B3> <0032> -<00B4> <00B4> <814C> -<00B5> <00B5> <83CA> -<00B6> <00B6> <81F7> -<00B7> <00B7> <8145> -<00B8> <00B8> <8143> -<00B9> <00B9> <31> -<00BA> <00BA> <6F> -<00BB> <00BB> <81E2> -<00C0> <00C0> <41> -<00C1> <00C1> <41> -<00C2> <00C2> <41> -<00C3> <00C3> <41> -<00C4> <00C4> <41> -<00C5> <00C5> <41> -<00C6> <00C6> <41> -<00C7> <00C7> <43> -<00C8> <00C8> <45> -<00C9> <00C9> <45> -<00CA> <00CA> <45> -<00CB> <00CB> <45> -<00CC> <00CC> <49> -<00CD> <00CD> <49> -<00CE> <00CE> <49> -<00CF> <00CF> <49> -<00D0> <00D0> <44> -<00D1> <00D2> <4E> -<00D3> <00D3> <4F> -<00D4> <00D4> <4F> -<00D5> <00D5> <4F> -<00D6> <00D6> <4F> -<00D7> <00D7> <817E> -<00D8> <00D8> <4F> -<00D9> <00D9> <55> -<00DA> <00DA> <55> -<00DB> <00DB> <55> -<00DC> <00DC> <55> -<00DD> <00DD> <59> -<00DE> <00DE> <54> -<00DF> <00DF> <73> -<00E0> <00E0> <61> -<00E1> <00E1> <61> -<00E2> <00E2> <61> -<00E3> <00E3> <61> -<00E4> <00E4> <61> -<00E5> <00E5> <61> -<00E6> <00E6> <61> -<00E7> <00E7> <63> -<00E8> <00E8> <65> -<00E9> <00E9> <65> -<00EA> <00EA> <65> -<00EB> <00EB> <65> -<00EC> <00EC> <69> -<00ED> <00ED> <69> -<00EE> <00EE> <69> -<00EF> <00EF> <69> -<00F0> <00F0> <64> -<00F1> <00F2> <6E> -<00F3> <00F3> <6F> -<00F4> <00F4> <6F> -<00F5> <00F5> <6F> -<00F6> <00F6> <6F> -<00F7> <00F7> <8180> -<00F8> <00F8> <6F> -<00F9> <00F9> <75> -<00FA> <00FA> <75> -<00FB> <00FB> <75> -<00FC> <00FC> <75> -<00FD> <00FD> <79> -<00FE> <00FE> <74> -<00FF> <00FF> <79> -<02D0> <02D0> <8146> -<0391> <03A1> <839F> -<03A3> <03A9> <83B0> -<03B1> <03C1> <83BF> -<03C3> <03C9> <83D0> -<0401> <0401> <8446> -<0410> <0415> <8440> -<0416> <042F> <8447> -<0430> <0435> <8470> -<0436> <043D> <8477> -<043E> <044F> <8480> -<0451> <0451> <8476> -endbfrange - -100 beginbfrange -<2010> <2010> <815D> -<2013> <2013> <815D> -<2014> <2014> <815C> -<2015> <2015> <815C> -<2016> <2016> <8161> -<2018> <2019> <8165> -<201C> <201D> <8167> -<2020> <2021> <81F5> -<2022> <2022> <8145> -<2025> <2025> <8164> -<2026> <2026> <8163> -<2027> <2027> <8145> -<2030> <2030> <81F1> -<2032> <2033> <818C> -<203B> <203B> <81A6> -<203E> <203E> <8150> -<20AC> <20AC> <80> -<2103> <2103> <818E> -<2116> <2116> <8782> -<2121> <2121> <8784> -<212B> <212B> <81F0> -<2160> <2169> <8754> -<2170> <2179> -<2190> <2191> <81A9> -<2192> <2192> <81A8> -<2193> <2193> <81AB> -<21D2> <21D2> <81CB> -<21D4> <21D4> <81CC> -<2200> <2200> <81CD> -<2202> <2202> <81DD> -<2203> <2203> <81CE> -<2207> <2207> <81DE> -<2208> <2208> <81B8> -<220B> <220B> <81B9> -<2211> <2211> <8794> -<2212> <2212> <817C> -<221A> <221A> <81E3> -<221D> <221D> <81E5> -<221E> <221E> <8187> -<221F> <221F> <8798> -<2220> <2220> <81DA> -<2225> <2225> <8161> -<2227> <2228> <81C8> -<2229> <2229> <81BF> -<222A> <222A> <81BE> -<222B> <222C> <81E7> -<222E> <222E> <8793> -<2234> <2234> <8188> -<2235> <2235> <81E6> -<2236> <2236> <8146> -<223C> <223C> <8160> -<223D> <223D> <81E4> -<2252> <2252> <81E0> -<2260> <2260> <8182> -<2261> <2261> <81DF> -<2266> <2267> <8185> -<226A> <226B> <81E1> -<2282> <2283> <81BC> -<2286> <2287> <81BA> -<2299> <2299> <819D> -<22A5> <22A5> <81DB> -<22BF> <22BF> <8799> -<22EF> <22EF> <8163> -<2312> <2312> <81DC> -<2460> <2473> <8740> -<2500> <2500> <849F> -<2501> <2501> <84AA> -<2502> <2502> <84A0> -<2503> <2503> <84AB> -<250C> <250C> <84A1> -<250F> <250F> <84AC> -<2510> <2510> <84A2> -<2513> <2513> <84AD> -<2514> <2514> <84A4> -<2517> <2517> <84AF> -<2518> <2518> <84A3> -<251B> <251B> <84AE> -<251C> <251C> <84A5> -<251D> <251D> <84BA> -<2520> <2520> <84B5> -<2523> <2523> <84B0> -<2524> <2524> <84A7> -<2525> <2525> <84BC> -<2528> <2528> <84B7> -<252B> <252B> <84B2> -<252C> <252C> <84A6> -<252F> <252F> <84B6> -<2530> <2530> <84BB> -<2533> <2533> <84B1> -<2534> <2534> <84A8> -<2537> <2537> <84B8> -<2538> <2538> <84BD> -<253B> <253B> <84B3> -<253C> <253C> <84A9> -<253F> <253F> <84B9> -<2542> <2542> <84BE> -<254B> <254B> <84B4> -<2595> <2595> -<25A0> <25A0> <81A1> -<25A1> <25A1> <81A0> -endbfrange - -100 beginbfrange -<25B2> <25B2> <81A3> -<25B3> <25B3> <81A2> -<25BC> <25BC> <81A5> -<25BD> <25BD> <81A4> -<25C6> <25C6> <819F> -<25C7> <25C7> <819E> -<25C9> <25C9> <819D> -<25CB> <25CB> <819B> -<25CE> <25CE> <819D> -<25CF> <25CF> <819C> -<25EF> <25EF> <81FC> -<2605> <2605> <819A> -<2606> <2606> <8199> -<2609> <2609> <819D> -<2640> <2640> <818A> -<2642> <2642> <8189> -<266A> <266A> <81F4> -<266D> <266D> <81F3> -<266F> <266F> <81F2> -<3000> <3002> <8140> -<3003> <3003> <8156> -<3005> <3007> <8158> -<3008> <3011> <8171> -<3012> <3012> <81A7> -<3013> <3013> <81AC> -<3014> <3015> <816B> -<301C> <301C> <8160> -<301D> <301D> <8780> -<301E> <301E> <8781> -<301F> <301F> <8781> -<3041> <3093> <829F> -<309B> <309C> <814A> -<309D> <309E> <8154> -<30A1> <30DF> <8340> -<30E0> <30F6> <8380> -<30FB> <30FB> <8145> -<30FC> <30FC> <815B> -<30FD> <30FE> <8152> -<3231> <3232> <878A> -<3239> <3239> <878C> -<32A4> <32A8> <8785> -<3303> <3303> <8765> -<330D> <330D> <8769> -<3314> <3314> <8760> -<3318> <3318> <8763> -<3322> <3322> <8761> -<3323> <3323> <876B> -<3326> <3326> <876A> -<3327> <3327> <8764> -<332B> <332B> <876C> -<3336> <3336> <8766> -<333B> <333B> <876E> -<3349> <3349> <875F> -<334A> <334A> <876D> -<334D> <334D> <8762> -<3351> <3351> <8767> -<3357> <3357> <8768> -<337B> <337B> <877E> -<337C> <337C> <878F> -<337D> <337D> <878E> -<337E> <337E> <878D> -<338E> <338F> <8772> -<339C> <339E> <876F> -<33A1> <33A1> <8775> -<33C4> <33C4> <8774> -<33CD> <33CD> <8783> -<4E00> <4E00> <88EA> -<4E01> <4E01> <929A> -<4E03> <4E03> <8EB5> -<4E07> <4E07> <969C> -<4E08> <4E08> <8FE4> -<4E09> <4E09> <8E4F> -<4E0A> <4E0A> <8FE3> -<4E0B> <4E0B> <89BA> -<4E0D> <4E0D> <9573> -<4E0E> <4E0E> <975E> -<4E10> <4E10> <98A0> -<4E11> <4E11> <894E> -<4E14> <4E14> <8A8E> -<4E15> <4E15> <98A1> -<4E16> <4E16> <90A2> -<4E17> <4E17> <99C0> -<4E18> <4E18> <8B75> -<4E19> <4E19> <95B8> -<4E1E> <4E1E> <8FE5> -<4E21> <4E21> <97BC> -<4E26> <4E26> <95C0> -<4E28> <4E28> -<4E2A> <4E2A> <98A2> -<4E2D> <4E2D> <9286> -<4E31> <4E31> <98A3> -<4E32> <4E32> <8BF8> -<4E36> <4E36> <98A4> -<4E38> <4E38> <8ADB> -<4E39> <4E39> <924F> -<4E3B> <4E3B> <8EE5> -<4E3C> <4E3C> <98A5> -<4E3F> <4E3F> <98A6> -<4E42> <4E42> <98A7> -<4E43> <4E43> <9454> -endbfrange - -100 beginbfrange -<4E45> <4E45> <8B76> -<4E4B> <4E4B> <9456> -<4E4D> <4E4D> <93E1> -<4E4E> <4E4E> <8CC1> -<4E4F> <4E4F> <9652> -<4E55> <4E55> -<4E56> <4E56> <98A8> -<4E57> <4E57> <8FE6> -<4E58> <4E58> <98A9> -<4E59> <4E59> <89B3> -<4E5D> <4E5D> <8BE3> -<4E5E> <4E5E> <8CEE> -<4E5F> <4E5F> <96E7> -<4E62> <4E62> <9BA4> -<4E71> <4E71> <9790> -<4E73> <4E73> <93FB> -<4E7E> <4E7E> <8AA3> -<4E80> <4E80> <8B54> -<4E82> <4E82> <98AA> -<4E85> <4E85> <98AB> -<4E86> <4E86> <97B9> -<4E88> <4E88> <975C> -<4E89> <4E89> <9188> -<4E8A> <4E8A> <98AD> -<4E8B> <4E8B> <8E96> -<4E8C> <4E8C> <93F1> -<4E8E> <4E8E> <98B0> -<4E91> <4E91> <895D> -<4E92> <4E92> <8CDD> -<4E94> <4E94> <8CDC> -<4E95> <4E95> <88E4> -<4E98> <4E98> <986A> -<4E99> <4E99> <9869> -<4E9B> <4E9B> <8DB1> -<4E9C> <4E9C> <889F> -<4E9E> <4EA0> <98B1> -<4EA1> <4EA1> <9653> -<4EA2> <4EA2> <98B4> -<4EA4> <4EA4> <8CF0> -<4EA5> <4EA5> <88E5> -<4EA6> <4EA6> <9692> -<4EA8> <4EA8> <8B9C> -<4EAB> <4EAC> <8B9D> -<4EAD> <4EAD> <92E0> -<4EAE> <4EAE> <97BA> -<4EB0> <4EB0> <98B5> -<4EB3> <4EB3> <98B6> -<4EB6> <4EB6> <98B7> -<4EBA> <4EBA> <906C> -<4EC0> <4EC0> <8F59> -<4EC1> <4EC1> <906D> -<4EC2> <4EC2> <98BC> -<4EC4> <4EC4> <98BA> -<4EC6> <4EC6> <98BB> -<4EC7> <4EC7> <8B77> -<4ECA> <4ECA> <8DA1> -<4ECB> <4ECB> <89EE> -<4ECD> <4ECD> <98B9> -<4ECE> <4ECE> <98B8> -<4ECF> <4ECF> <95A7> -<4ED4> <4ED4> <8E65> -<4ED5> <4ED5> <8E64> -<4ED6> <4ED6> <91BC> -<4ED7> <4ED7> <98BD> -<4ED8> <4ED8> <9574> -<4ED9> <4ED9> <90E5> -<4EDD> <4EDD> <8157> -<4EDE> <4EDE> <98BE> -<4EDF> <4EDF> <98C0> -<4EE1> <4EE1> -<4EE3> <4EE3> <91E3> -<4EE4> <4EE4> <97DF> -<4EE5> <4EE5> <88C8> -<4EED> <4EED> <98BF> -<4EEE> <4EEE> <89BC> -<4EF0> <4EF0> <8BC2> -<4EF2> <4EF2> <9287> -<4EF6> <4EF6> <8C8F> -<4EF7> <4EF7> <98C1> -<4EFB> <4EFB> <9443> -<4EFC> <4EFC> -<4F00> <4F00> -<4F01> <4F01> <8AE9> -<4F03> <4F03> -<4F09> <4F09> <98C2> -<4F0A> <4F0A> <88C9> -<4F0D> <4F0D> <8CDE> -<4F0E> <4F0E> <8AEA> -<4F0F> <4F0F> <959A> -<4F10> <4F10> <94B0> -<4F11> <4F11> <8B78> -<4F1A> <4F1A> <89EF> -<4F1C> <4F1C> <98E5> -<4F1D> <4F1D> <9360> -<4F2F> <4F2F> <948C> -<4F30> <4F30> <98C4> -<4F34> <4F34> <94BA> -<4F36> <4F36> <97E0> -<4F38> <4F38> <904C> -<4F39> <4F39> -endbfrange - -100 beginbfrange -<4F3A> <4F3A> <8E66> -<4F3C> <4F3C> <8E97> -<4F3D> <4F3D> <89BE> -<4F43> <4F43> <92CF> -<4F46> <4F46> <9241> -<4F47> <4F47> <98C8> -<4F4D> <4F4D> <88CA> -<4F4E> <4F4E> <92E1> -<4F4F> <4F4F> <8F5A> -<4F50> <4F50> <8DB2> -<4F51> <4F51> <9743> -<4F53> <4F53> <91CC> -<4F55> <4F55> <89BD> -<4F56> <4F56> -<4F57> <4F57> <98C7> -<4F59> <4F59> <975D> -<4F5A> <4F5A> <98C3> -<4F5B> <4F5B> <98C5> -<4F5C> <4F5C> <8DEC> -<4F5D> <4F5D> <98C6> -<4F5E> <4F5E> <9B43> -<4F69> <4F69> <98CE> -<4F6F> <4F6F> <98D1> -<4F70> <4F70> <98CF> -<4F73> <4F73> <89C0> -<4F75> <4F75> <95B9> -<4F76> <4F76> <98C9> -<4F7B> <4F7B> <98CD> -<4F7C> <4F7C> <8CF1> -<4F7F> <4F7F> <8E67> -<4F83> <4F83> <8AA4> -<4F86> <4F86> <98D2> -<4F88> <4F88> <98CA> -<4F8A> <4F8A> -<4F8B> <4F8B> <97E1> -<4F8D> <4F8D> <8E98> -<4F8F> <4F8F> <98CB> -<4F91> <4F91> <98D0> -<4F92> <4F92> -<4F94> <4F94> -<4F96> <4F96> <98D3> -<4F98> <4F98> <98CC> -<4F9A> <4F9A> -<4F9B> <4F9B> <8B9F> -<4F9D> <4F9D> <88CB> -<4FA0> <4FA0> <8BA0> -<4FA1> <4FA1> <89BF> -<4FAB> <4FAB> <9B44> -<4FAD> <4FAD> <9699> -<4FAE> <4FAE> <958E> -<4FAF> <4FAF> <8CF2> -<4FB5> <4FB5> <904E> -<4FB6> <4FB6> <97B5> -<4FBF> <4FBF> <95D6> -<4FC2> <4FC2> <8C57> -<4FC3> <4FC3> <91A3> -<4FC4> <4FC4> <89E2> -<4FC9> <4FC9> -<4FCA> <4FCA> <8F72> -<4FCD> <4FCD> -<4FCE> <4FCE> <98D7> -<4FD0> <4FD0> <98DC> -<4FD1> <4FD1> <98DA> -<4FD4> <4FD4> <98D5> -<4FD7> <4FD7> <91AD> -<4FD8> <4FD8> <98D8> -<4FDA> <4FDA> <98DB> -<4FDB> <4FDB> <98D9> -<4FDD> <4FDD> <95DB> -<4FDF> <4FDF> <98D6> -<4FE0> <4FE0> <8BA0> -<4FE1> <4FE1> <904D> -<4FE3> <4FE3> <9693> -<4FE4> <4FE5> <98DD> -<4FEE> <4FEE> <8F43> -<4FEF> <4FEF> <98EB> -<4FF3> <4FF3> <946F> -<4FF5> <4FF5> <9555> -<4FF6> <4FF6> <98E6> -<4FF8> <4FF8> <95EE> -<4FFA> <4FFA> <89B4> -<4FFE> <4FFE> <98EA> -<4FFF> <4FFF> -<5005> <5005> <98E4> -<5006> <5006> <98ED> -<5009> <5009> <9171> -<500B> <500B> <8CC2> -<500D> <500D> <947B> -<500F> <500F> -<5011> <5011> <98EC> -<5012> <5012> <937C> -<5014> <5014> <98E1> -<5016> <5016> <8CF4> -<5019> <5019> <8CF3> -<501A> <501A> <98DF> -<501E> <501E> -<501F> <501F> <8ED8> -<5021> <5021> <98E7> -<5022> <5022> -<5023> <5023> <95ED> -endbfrange - -100 beginbfrange -<5024> <5024> <926C> -<5025> <5025> <98E3> -<5026> <5026> <8C91> -<5028> <5028> <98E0> -<5029> <5029> <98E8> -<502A> <502A> <98E2> -<502B> <502B> <97CF> -<502C> <502C> <98E9> -<502D> <502D> <9860> -<5036> <5036> <8BE4> -<5039> <5039> <8C90> -<5040> <5040> -<5042> <5042> -<5043> <5043> <98EE> -<5046> <5046> -<5047> <5047> <98EF> -<5048> <5048> <98F3> -<5049> <5049> <88CC> -<504F> <504F> <95CE> -<5050> <5050> <98F2> -<5055> <5055> <98F1> -<5056> <5056> <98F5> -<505A> <505A> <98F4> -<505C> <505C> <92E2> -<5065> <5065> <8C92> -<506C> <506C> <98F6> -<5070> <5070> -<5072> <5072> <8EC3> -<5074> <5074> <91A4> -<5075> <5075> <92E3> -<5076> <5076> <8BF4> -<5078> <5078> <98F7> -<507D> <507D> <8B55> -<5080> <5080> <98F8> -<5085> <5085> <98FA> -<508D> <508D> <9654> -<5091> <5091> <8C86> -<5094> <5094> -<5098> <5098> <8E50> -<5099> <5099> <94F5> -<509A> <509A> <98F9> -<50AC> <50AC> <8DC3> -<50AD> <50AD> <9762> -<50B2> <50B2> <98FC> -<50B3> <50B3> <9942> -<50B4> <50B4> <98FB> -<50B5> <50B5> <8DC2> -<50B7> <50B7> <8F9D> -<50BE> <50BE> <8C58> -<50C2> <50C2> <9943> -<50C5> <50C5> <8BCD> -<50C9> <50CA> <9940> -<50CD> <50CD> <93AD> -<50CF> <50CF> <919C> -<50D1> <50D1> <8BA1> -<50D5> <50D5> <966C> -<50D6> <50D6> <9944> -<50D8> <50D8> -<50DA> <50DA> <97BB> -<50DE> <50DE> <9945> -<50E3> <50E3> <9948> -<50E5> <50E5> <9946> -<50E7> <50E7> <916D> -<50ED> <50ED> <9947> -<50EE> <50EE> <9949> -<50F4> <50F4> -<50F5> <50F5> <994B> -<50F9> <50F9> <994A> -<50FB> <50FB> <95C6> -<5100> <5100> <8B56> -<5101> <5102> <994D> -<5104> <5104> <89AD> -<5109> <5109> <994C> -<5112> <5112> <8EF2> -<5114> <5114> <9951> -<5115> <5115> <9950> -<5116> <5116> <994F> -<5118> <5118> <98D4> -<511A> <511A> <9952> -<511F> <511F> <8F9E> -<5121> <5121> <9953> -<512A> <512A> <9744> -<5132> <5132> <96D7> -<5137> <5137> <9955> -<513A> <513A> <9954> -<513B> <513B> <9957> -<513C> <513C> <9956> -<513F> <5140> <9958> -<5141> <5141> <88F2> -<5143> <5143> <8CB3> -<5144> <5144> <8C5A> -<5145> <5145> <8F5B> -<5146> <5146> <929B> -<5147> <5147> <8BA2> -<5148> <5148> <90E6> -<5149> <5149> <8CF5> -<514A> <514A> -<514B> <514B> <8D8E> -<514C> <514C> <995B> -<514D> <514D> <96C6> -endbfrange - -100 beginbfrange -<514E> <514E> <9365> -<5150> <5150> <8E99> -<5152> <5152> <995A> -<5154> <5154> <995C> -<515A> <515A> <937D> -<515C> <515C> <8A95> -<5162> <5162> <995D> -<5164> <5164> -<5165> <5165> <93FC> -<5168> <5168> <9153> -<5169> <516A> <995F> -<516B> <516B> <94AA> -<516C> <516C> <8CF6> -<516D> <516D> <985A> -<516E> <516E> <9961> -<5171> <5171> <8BA4> -<5175> <5175> <95BA> -<5176> <5176> <91B4> -<5177> <5177> <8BEF> -<5178> <5178> <9354> -<517C> <517C> <8C93> -<5180> <5180> <9962> -<5182> <5182> <9963> -<5185> <5185> <93E0> -<5186> <5186> <897E> -<5189> <5189> <9966> -<518A> <518A> <8DFB> -<518C> <518C> <9965> -<518D> <518D> <8DC4> -<518F> <518F> <9967> -<5190> <5190> -<5191> <5191> <9968> -<5192> <5192> <9660> -<5193> <5193> <9969> -<5195> <5196> <996A> -<5197> <5197> <8FE7> -<5199> <5199> <8ECA> -<519D> <519D> -<51A0> <51A0> <8AA5> -<51A2> <51A2> <996E> -<51A4> <51A4> <996C> -<51A5> <51A5> <96BB> -<51A6> <51A6> <996D> -<51A8> <51A8> <9579> -<51A9> <51AB> <996F> -<51AC> <51AC> <937E> -<51B0> <51B0> <9975> -<51B1> <51B2> <9973> -<51B3> <51B3> <9972> -<51B4> <51B4> <8DE1> -<51B5> <51B5> <9976> -<51B6> <51B6> <96E8> -<51B7> <51B7> <97E2> -<51BD> <51BD> <9977> -<51BE> <51BE> -<51C4> <51C4> <90A6> -<51C5> <51C5> <9978> -<51C6> <51C6> <8F79> -<51C9> <51C9> <9979> -<51CB> <51CB> <929C> -<51CC> <51CC> <97BD> -<51CD> <51CD> <9380> -<51D6> <51D6> <99C3> -<51DB> <51DB> <997A> -<51DC> <51DC> -<51DD> <51DD> <8BC3> -<51E0> <51E0> <997B> -<51E1> <51E1> <967D> -<51E6> <51E6> <8F88> -<51E7> <51E7> <91FA> -<51E9> <51E9> <997D> -<51EA> <51EA> <93E2> -<51EC> <51EC> -<51ED> <51ED> <997E> -<51F0> <51F0> <9980> -<51F1> <51F1> <8A4D> -<51F5> <51F5> <9981> -<51F6> <51F6> <8BA5> -<51F8> <51F8> <93CA> -<51F9> <51F9> <899A> -<51FA> <51FA> <8F6F> -<51FD> <51FD> <949F> -<51FE> <51FE> <9982> -<5200> <5200> <9381> -<5203> <5203> <906E> -<5204> <5204> <9983> -<5206> <5206> <95AA> -<5207> <5207> <90D8> -<5208> <5208> <8AA0> -<520A> <520A> <8AA7> -<520B> <520B> <9984> -<520E> <520E> <9986> -<5211> <5211> <8C59> -<5214> <5214> <9985> -<5215> <5215> -<5217> <5217> <97F1> -<521D> <521D> <8F89> -<5224> <5224> <94BB> -<5225> <5225> <95CA> -<5227> <5227> <9987> -endbfrange - -100 beginbfrange -<5229> <5229> <9798> -<522A> <522A> <9988> -<522E> <522E> <9989> -<5230> <5230> <939E> -<5233> <5233> <998A> -<5236> <5236> <90A7> -<5237> <5237> <8DFC> -<5238> <5238> <8C94> -<5239> <5239> <998B> -<523A> <523A> <8E68> -<523B> <523B> <8D8F> -<5243> <5243> <92E4> -<5244> <5244> <998D> -<5247> <5247> <91A5> -<524A> <524A> <8DED> -<524B> <524C> <998E> -<524D> <524D> <914F> -<524F> <524F> <998C> -<5254> <5254> <9991> -<5256> <5256> <9655> -<525B> <525B> <8D84> -<525D> <525D> <948D> -<525E> <525E> <9990> -<5263> <5263> <8C95> -<5264> <5264> <8DDC> -<5265> <5265> <948D> -<5269> <5269> <9994> -<526A> <526A> <9992> -<526F> <526F> <959B> -<5270> <5270> <8FE8> -<5271> <5271> <999B> -<5272> <5272> <8A84> -<5273> <5273> <9995> -<5274> <5274> <9993> -<5275> <5275> <916E> -<527D> <527D> <9997> -<527F> <527F> <9996> -<5283> <5283> <8A63> -<5287> <5287> <8C80> -<5288> <5288> <999C> -<5289> <5289> <97AB> -<528D> <528D> <9998> -<5291> <5291> <999D> -<5292> <5292> <999A> -<5294> <5294> <9999> -<529B> <529B> <97CD> -<529C> <529C> -<529F> <529F> <8CF7> -<52A0> <52A0> <89C1> -<52A3> <52A3> <97F2> -<52A6> <52A6> -<52A9> <52A9> <8F95> -<52AA> <52AA> <9377> -<52AB> <52AB> <8D85> -<52AC> <52AD> <99A0> -<52AF> <52AF> -<52B1> <52B1> <97E3> -<52B4> <52B4> <984A> -<52B5> <52B5> <99A3> -<52B9> <52B9> <8CF8> -<52BC> <52BC> <99A2> -<52BE> <52BE> <8A4E> -<52C0> <52C0> -<52C1> <52C1> <99A4> -<52C3> <52C3> <9675> -<52C5> <52C5> <92BA> -<52C7> <52C7> <9745> -<52C9> <52C9> <95D7> -<52CD> <52CD> <99A5> -<52D2> <52D2> -<52D5> <52D5> <93AE> -<52D7> <52D7> <99A6> -<52D8> <52D8> <8AA8> -<52D9> <52D9> <96B1> -<52DB> <52DB> -<52DD> <52DD> <8F9F> -<52DE> <52DE> <99A7> -<52DF> <52DF> <95E5> -<52E0> <52E0> <99AB> -<52E2> <52E2> <90A8> -<52E3> <52E3> <99A8> -<52E4> <52E4> <8BCE> -<52E6> <52E6> <99A9> -<52E7> <52E7> <8AA9> -<52F2> <52F2> <8C4D> -<52F3> <52F3> <99AC> -<52F5> <52F5> <99AD> -<52F8> <52F9> <99AE> -<52FA> <52FA> <8ED9> -<52FE> <52FE> <8CF9> -<52FF> <52FF> <96DC> -<5300> <5300> -<5301> <5301> <96E6> -<5302> <5302> <93F5> -<5305> <5305> <95EF> -<5306> <5306> <99B0> -<5307> <5307> -<5308> <5308> <99B1> -<530D> <530D> <99B3> -<530F> <530F> <99B5> -endbfrange - -100 beginbfrange -<5310> <5310> <99B4> -<5315> <5315> <99B6> -<5316> <5316> <89BB> -<5317> <5317> <966B> -<5319> <5319> <8DFA> -<531A> <531A> <99B7> -<531D> <531D> <9178> -<5320> <5320> <8FA0> -<5321> <5321> <8BA7> -<5323> <5323> <99B8> -<5324> <5324> -<532A> <532A> <94D9> -<532F> <532F> <99B9> -<5331> <5331> <99BA> -<5333> <5333> <99BB> -<5338> <5338> <99BC> -<5339> <5339> <9543> -<533A> <533A> <8BE6> -<533B> <533B> <88E3> -<533F> <533F> <93BD> -<5340> <5340> <99BD> -<5341> <5341> <8F5C> -<5343> <5343> <90E7> -<5345> <5345> <99BF> -<5346> <5346> <99BE> -<5347> <5347> <8FA1> -<5348> <5348> <8CDF> -<5349> <5349> <99C1> -<534A> <534A> <94BC> -<534D> <534D> <99C2> -<5351> <5351> <94DA> -<5352> <5352> <91B2> -<5353> <5353> <91EC> -<5354> <5354> <8BA6> -<5357> <5357> <93EC> -<5358> <5358> <9250> -<535A> <535A> <948E> -<535C> <535C> <966D> -<535E> <535E> <99C4> -<5360> <5360> <90E8> -<5366> <5366> <8C54> -<5369> <5369> <99C5> -<536E> <536E> <99C6> -<536F> <536F> <894B> -<5370> <5370> <88F3> -<5371> <5371> <8AEB> -<5372> <5372> -<5373> <5373> <91A6> -<5374> <5374> <8B70> -<5375> <5375> <9791> -<5377> <5377> <99C9> -<5378> <5378> <89B5> -<537B> <537B> <99C8> -<537F> <537F> <8BA8> -<5382> <5382> <99CA> -<5384> <5384> <96EF> -<5393> <5393> -<5396> <5396> <99CB> -<5398> <5398> <97D0> -<539A> <539A> <8CFA> -<539F> <539F> <8CB4> -<53A0> <53A0> <99CC> -<53A5> <53A5> <99CE> -<53A6> <53A6> <99CD> -<53A8> <53A8> <907E> -<53A9> <53A9> <8958> -<53AD> <53AD> <897D> -<53AE> <53AE> <99CF> -<53B0> <53B0> <99D0> -<53B2> <53B2> -<53B3> <53B3> <8CB5> -<53B6> <53B6> <99D1> -<53BB> <53BB> <8B8E> -<53C2> <53C2> <8E51> -<53C3> <53C3> <99D2> -<53C8> <53C8> <9694> -<53C9> <53C9> <8DB3> -<53CA> <53CA> <8B79> -<53CB> <53CB> <9746> -<53CC> <53CC> <916F> -<53CD> <53CD> <94BD> -<53CE> <53CE> <8EFB> -<53D4> <53D4> <8F66> -<53D6> <53D6> <8EE6> -<53D7> <53D7> <8EF3> -<53D9> <53D9> <8F96> -<53DB> <53DB> <94BE> -<53DD> <53DD> -<53DF> <53DF> <99D5> -<53E1> <53E1> <8962> -<53E2> <53E2> <9170> -<53E3> <53E3> <8CFB> -<53E4> <53E4> <8CC3> -<53E5> <53E5> <8BE5> -<53E8> <53E8> <99D9> -<53E9> <53E9> <9240> -<53EA> <53EA> <91FC> -<53EB> <53EB> <8BA9> -<53EC> <53EC> <8FA2> -<53ED> <53ED> <99DA> -endbfrange - -100 beginbfrange -<53EE> <53EE> <99D8> -<53EF> <53EF> <89C2> -<53F0> <53F0> <91E4> -<53F1> <53F1> <8EB6> -<53F2> <53F2> <8E6A> -<53F3> <53F3> <8945> -<53F6> <53F6> <8A90> -<53F7> <53F7> <8D86> -<53F8> <53F8> <8E69> -<53FA> <53FA> <99DB> -<5401> <5401> <99DC> -<5403> <5403> <8B68> -<5404> <5404> <8A65> -<5408> <5408> <8D87> -<5409> <5409> <8B67> -<540A> <540A> <92DD> -<540B> <540B> <8944> -<540C> <540C> <93AF> -<540D> <540D> <96BC> -<540E> <540E> <8D40> -<540F> <540F> <9799> -<5410> <5410> <9366> -<5411> <5411> <8CFC> -<541B> <541B> <8C4E> -<541D> <541D> <99E5> -<541F> <541F> <8BE1> -<5420> <5420> <9669> -<5426> <5426> <94DB> -<5429> <5429> <99E4> -<542B> <542B> <8ADC> -<542C> <542D> <99DF> -<542E> <542E> <99E2> -<5436> <5436> <99E3> -<5438> <5438> <8B7A> -<5439> <5439> <9081> -<543B> <543B> <95AB> -<543C> <543C> <99E1> -<543D> <543D> <99DD> -<543E> <543E> <8CE1> -<5440> <5440> <99DE> -<5442> <5442> <9843> -<5446> <5446> <95F0> -<5448> <5448> <92E6> -<5449> <5449> <8CE0> -<544A> <544A> <8D90> -<544E> <544E> <99E6> -<5451> <5451> <93DB> -<545F> <545F> <99EA> -<5468> <5468> <8EFC> -<546A> <546A> <8EF4> -<5470> <5470> <99ED> -<5471> <5471> <99EB> -<5473> <5473> <96A1> -<5475> <5475> <99E8> -<5476> <5476> <99F1> -<5477> <5477> <99EC> -<547B> <547B> <99EF> -<547C> <547C> <8CC4> -<547D> <547D> <96BD> -<5480> <5480> <99F0> -<5484> <5484> <99F2> -<5486> <5486> <99F4> -<548A> <548A> -<548B> <548B> <8DEE> -<548C> <548C> <9861> -<548E> <548E> <99E9> -<548F> <548F> <99E7> -<5490> <5490> <99F3> -<5492> <5492> <99EE> -<549C> <549C> -<54A2> <54A2> <99F6> -<54A4> <54A4> <9A42> -<54A5> <54A5> <99F8> -<54A8> <54A8> <99FC> -<54A9> <54A9> -<54AB> <54AB> <9A40> -<54AC> <54AC> <99F9> -<54AF> <54AF> <9A5D> -<54B2> <54B2> <8DE7> -<54B3> <54B3> <8A50> -<54B8> <54B8> <99F7> -<54BC> <54BC> <9A44> -<54BD> <54BD> <88F4> -<54BE> <54BE> <9A43> -<54C0> <54C0> <88A3> -<54C1> <54C1> <9569> -<54C2> <54C2> <9A41> -<54C4> <54C4> <99FA> -<54C7> <54C7> <99F5> -<54C8> <54C8> <99FB> -<54C9> <54C9> <8DC6> -<54D8> <54D8> <9A45> -<54E1> <54E1> <88F5> -<54E2> <54E2> <9A4E> -<54E5> <54E6> <9A46> -<54E8> <54E8> <8FA3> -<54E9> <54E9> <9689> -<54ED> <54ED> <9A4C> -<54EE> <54EE> <9A4B> -<54F2> <54F2> <934E> -endbfrange - -100 beginbfrange -<54FA> <54FA> <9A4D> -<54FD> <54FD> <9A4A> -<54FF> <54FF> -<5504> <5504> <8953> -<5506> <5506> <8DB4> -<5507> <5507> <904F> -<550F> <550F> <9A48> -<5510> <5510> <9382> -<5514> <5514> <9A49> -<5516> <5516> <88A0> -<552E> <552E> <9A53> -<552F> <552F> <9742> -<5531> <5531> <8FA5> -<5533> <5533> <9A59> -<5538> <5538> <9A58> -<5539> <5539> <9A4F> -<553E> <553E> <91C1> -<5540> <5540> <9A50> -<5544> <5544> <91ED> -<5545> <5545> <9A55> -<5546> <5546> <8FA4> -<554C> <554C> <9A52> -<554F> <554F> <96E2> -<5553> <5553> <8C5B> -<5556> <5557> <9A56> -<555C> <555C> <9A54> -<555D> <555D> <9A5A> -<555E> <555E> <88A0> -<5563> <5563> <9A51> -<557B> <557B> <9A60> -<557C> <557C> <9A65> -<557E> <557E> <9A61> -<5580> <5580> <9A5C> -<5583> <5583> <9A66> -<5584> <5584> <9150> -<5586> <5586> -<5587> <5587> <9A68> -<5589> <5589> <8D41> -<558A> <558A> <9A5E> -<558B> <558B> <929D> -<5598> <5598> <9A62> -<5599> <5599> <9A5B> -<559A> <559A> <8AAB> -<559C> <559C> <8AEC> -<559D> <559D> <8A85> -<559E> <559E> <9A63> -<559F> <559F> <9A5F> -<55A7> <55A7> <8C96> -<55A8> <55A8> <9A69> -<55A9> <55A9> <9A67> -<55AA> <55AA> <9172> -<55AB> <55AB> <8B69> -<55AC> <55AC> <8BAA> -<55AE> <55AE> <9A64> -<55B0> <55B0> <8BF2> -<55B6> <55B6> <8963> -<55C4> <55C4> <9A6D> -<55C5> <55C5> <9A6B> -<55C7> <55C7> <9AA5> -<55D4> <55D4> <9A70> -<55DA> <55DA> <9A6A> -<55DC> <55DC> <9A6E> -<55DF> <55DF> <9A6C> -<55E3> <55E3> <8E6B> -<55E4> <55E4> <9A6F> -<55F7> <55F7> <9A72> -<55F9> <55F9> <9A77> -<55FD> <55FD> <9A75> -<55FE> <55FE> <9A74> -<5606> <5606> <9251> -<5609> <5609> <89C3> -<5614> <5614> <9A71> -<5616> <5616> <9A73> -<5617> <5617> <8FA6> -<5618> <5618> <8952> -<561B> <561B> <9A76> -<5629> <5629> <89DC> -<562F> <562F> <9A82> -<5631> <5631> <8FFA> -<5632> <5632> <9A7D> -<5634> <5634> <9A7B> -<5636> <5636> <9A7C> -<5638> <5638> <9A7E> -<5642> <5642> <895C> -<564C> <564C> <9158> -<564E> <564E> <9A78> -<5650> <5650> <9A79> -<5653> <5653> <8952> -<565B> <565B> <8A9A> -<5664> <5664> <9A81> -<5668> <5668> <8AED> -<566A> <566A> <9A84> -<566B> <566B> <9A80> -<566C> <566C> <9A83> -<5674> <5674> <95AC> -<5678> <5678> <93D3> -<567A> <567A> <94B6> -<5680> <5680> <9A86> -<5686> <5686> <9A85> -<5687> <5687> <8A64> -endbfrange - -100 beginbfrange -<568A> <568A> <9A87> -<568F> <568F> <9A8A> -<5694> <5694> <9A89> -<5699> <5699> <8A9A> -<56A0> <56A0> <9A88> -<56A2> <56A2> <9458> -<56A5> <56A5> <9A8B> -<56AE> <56AE> <9A8C> -<56B4> <56B4> <9A8E> -<56B6> <56B6> <9A8D> -<56BC> <56BC> <9A90> -<56C0> <56C0> <9A93> -<56C1> <56C1> <9A91> -<56C2> <56C2> <9A8F> -<56C3> <56C3> <9A92> -<56C8> <56C8> <9A94> -<56CA> <56CA> <9458> -<56CE> <56CE> <9A95> -<56D1> <56D1> <9A96> -<56D3> <56D3> <9A97> -<56D7> <56D7> <9A98> -<56D8> <56D8> <9964> -<56DA> <56DA> <8EFA> -<56DB> <56DB> <8E6C> -<56DE> <56DE> <89F1> -<56E0> <56E0> <88F6> -<56E3> <56E3> <9263> -<56EE> <56EE> <9A99> -<56F0> <56F0> <8DA2> -<56F2> <56F2> <88CD> -<56F3> <56F3> <907D> -<56F9> <56F9> <9A9A> -<56FA> <56FA> <8CC5> -<56FD> <56FD> <8D91> -<56FF> <56FF> <9A9C> -<5700> <5700> <9A9B> -<5703> <5703> <95DE> -<5704> <5704> <9A9D> -<5708> <5708> <9A9F> -<5709> <5709> <9A9E> -<570B> <570B> <9AA0> -<570D> <570D> <9AA1> -<570F> <570F> <8C97> -<5712> <5712> <8980> -<5713> <5713> <9AA2> -<5716> <5716> <9AA4> -<5718> <5718> <9AA3> -<571C> <571C> <9AA6> -<571F> <571F> <9379> -<5726> <5726> <9AA7> -<5727> <5727> <88B3> -<5728> <5728> <8DDD> -<572D> <572D> <8C5C> -<5730> <5730> <926E> -<5737> <5738> <9AA8> -<573B> <573B> <9AAB> -<5740> <5740> <9AAC> -<5742> <5742> <8DE2> -<5747> <5747> <8BCF> -<574A> <574A> <9656> -<574E> <574E> <9AAA> -<574F> <574F> <9AAD> -<5750> <5750> <8DBF> -<5751> <5751> <8D42> -<5759> <5759> -<5761> <5761> <9AB1> -<5764> <5764> <8DA3> -<5765> <5765> -<5766> <5766> <9252> -<5769> <5769> <9AAE> -<576A> <576A> <92D8> -<577F> <577F> <9AB2> -<5782> <5782> <9082> -<5788> <5788> <9AB0> -<5789> <5789> <9AB3> -<578B> <578B> <8C5E> -<5793> <5793> <9AB4> -<57A0> <57A0> <9AB5> -<57A2> <57A2> <8D43> -<57A3> <57A3> <8A5F> -<57A4> <57A4> <9AB7> -<57AA> <57AA> <9AB8> -<57AC> <57AC> -<57B0> <57B0> <9AB9> -<57B3> <57B3> <9AB6> -<57C0> <57C0> <9AAF> -<57C3> <57C3> <9ABA> -<57C6> <57C6> <9ABB> -<57C7> <57C7> -<57C8> <57C8> -<57CB> <57CB> <9684> -<57CE> <57CE> <8FE9> -<57D2> <57D3> <9ABD> -<57D4> <57D4> <9ABC> -<57D6> <57D6> <9AC0> -<57DC> <57DC> <9457> -<57DF> <57DF> <88E6> -<57E0> <57E0> <9575> -<57E3> <57E3> <9AC1> -<57F4> <57F4> <8FFB> -endbfrange - -100 beginbfrange -<57F7> <57F7> <8EB7> -<57F9> <57F9> <947C> -<57FA> <57FA> <8AEE> -<57FC> <57FC> <8DE9> -<5800> <5800> <9678> -<5802> <5802> <93B0> -<5805> <5805> <8C98> -<5806> <5806> <91CD> -<580A> <580A> <9ABF> -<580B> <580B> <9AC2> -<5815> <5815> <91C2> -<5819> <5819> <9AC3> -<581D> <581D> <9AC4> -<5821> <5821> <9AC6> -<5824> <5824> <92E7> -<582A> <582A> <8AAC> -<582F> <582F> -<5830> <5830> <8981> -<5831> <5831> <95F1> -<5834> <5834> <8FEA> -<5835> <5835> <9367> -<583A> <583A> <8DE4> -<583D> <583D> <9ACC> -<5840> <5840> <95BB> -<5841> <5841> <97DB> -<584A> <584A> <89F2> -<584B> <584B> <9AC8> -<5851> <5851> <9159> -<5852> <5852> <9ACB> -<5854> <5854> <9383> -<5857> <5857> <9368> -<5858> <5858> <9384> -<5859> <5859> <94B7> -<585A> <585A> <92CB> -<585E> <585E> <8DC7> -<5861> <5861> <9355> -<5862> <5862> <9AC7> -<5869> <5869> <8996> -<586B> <586B> <9355> -<5870> <5870> <9AC9> -<5872> <5872> <9AC5> -<5875> <5875> <906F> -<5879> <5879> <9ACD> -<587E> <587E> <8F6D> -<5883> <5883> <8BAB> -<5885> <5885> <9ACE> -<5893> <5893> <95E6> -<5897> <5897> <919D> -<589C> <589C> <92C4> -<589E> <589E> -<589F> <589F> <9AD0> -<58A8> <58A8> <966E> -<58AB> <58AB> <9AD1> -<58AE> <58AE> <9AD6> -<58B2> <58B2> -<58B3> <58B3> <95AD> -<58B8> <58B8> <9AD5> -<58B9> <58B9> <9ACF> -<58BA> <58BA> <9AD2> -<58BB> <58BB> <9AD4> -<58BE> <58BE> <8DA4> -<58C1> <58C1> <95C7> -<58C5> <58C5> <9AD7> -<58C7> <58C7> <9264> -<58CA> <58CA> <89F3> -<58CC> <58CC> <8FEB> -<58D1> <58D1> <9AD9> -<58D3> <58D3> <9AD8> -<58D5> <58D5> <8D88> -<58D7> <58D7> <9ADA> -<58D8> <58D8> <9ADC> -<58D9> <58D9> <9ADB> -<58DC> <58DC> <9ADE> -<58DE> <58DE> <9AD3> -<58DF> <58DF> <9AE0> -<58E4> <58E4> <9ADF> -<58E5> <58E5> <9ADD> -<58EB> <58EB> <8E6D> -<58EC> <58EC> <9070> -<58EE> <58EE> <9173> -<58EF> <58EF> <9AE1> -<58F0> <58F0> <90BA> -<58F1> <58F1> <88EB> -<58F2> <58F2> <9484> -<58F7> <58F7> <92D9> -<58F9> <58F9> <9AE3> -<58FA> <58FA> <9AE2> -<58FB> <58FD> <9AE4> -<5902> <5902> <9AE7> -<5909> <5909> <95CF> -<590A> <590A> <9AE8> -<590B> <590B> -<590F> <590F> <89C4> -<5910> <5910> <9AE9> -<5915> <5915> <975B> -<5916> <5916> <8A4F> -<5918> <5918> <99C7> -<5919> <5919> <8F67> -<591A> <591A> <91BD> -<591B> <591B> <9AEA> -endbfrange - -100 beginbfrange -<591C> <591C> <96E9> -<5922> <5922> <96B2> -<5925> <5925> <9AEC> -<5927> <5927> <91E5> -<5929> <5929> <9356> -<592A> <592A> <91BE> -<592B> <592B> <9576> -<592C> <592D> <9AED> -<592E> <592E> <899B> -<5931> <5931> <8EB8> -<5932> <5932> <9AEF> -<5937> <5937> <88CE> -<5938> <5938> <9AF0> -<593E> <593E> <9AF1> -<5944> <5944> <8982> -<5947> <5947> <8AEF> -<5948> <5948> <93DE> -<5949> <5949> <95F2> -<594E> <594E> <9AF5> -<594F> <594F> <9174> -<5950> <5950> <9AF4> -<5951> <5951> <8C5F> -<5953> <5953> -<5954> <5954> <967A> -<5955> <5955> <9AF3> -<5957> <5957> <9385> -<5958> <5958> <9AF7> -<595A> <595A> <9AF6> -<595B> <595B> -<595D> <595D> -<5960> <5960> <9AF9> -<5962> <5962> <9AF8> -<5963> <5963> -<5965> <5965> <899C> -<5967> <5967> <9AFA> -<5968> <5968> <8FA7> -<5969> <5969> <9AFC> -<596A> <596A> <9244> -<596C> <596C> <9AFB> -<596E> <596E> <95B1> -<5973> <5973> <8F97> -<5974> <5974> <937A> -<5978> <5978> <9B40> -<597D> <597D> <8D44> -<5981> <5981> <9B41> -<5982> <5982> <9440> -<5983> <5983> <94DC> -<5984> <5984> <96CF> -<598A> <598A> <9444> -<598D> <598D> <9B4A> -<5993> <5993> <8B57> -<5996> <5996> <9764> -<5999> <5999> <96AD> -<599B> <599B> <9BAA> -<599D> <599D> <9B42> -<59A3> <59A3> <9B45> -<59A4> <59A4> -<59A5> <59A5> <91C3> -<59A8> <59A8> <9657> -<59AC> <59AC> <9369> -<59B2> <59B2> <9B46> -<59B9> <59B9> <9685> -<59BA> <59BA> -<59BB> <59BB> <8DC8> -<59BE> <59BE> <8FA8> -<59C6> <59C6> <9B47> -<59C9> <59C9> <8E6F> -<59CB> <59CB> <8E6E> -<59D0> <59D0> <88B7> -<59D1> <59D1> <8CC6> -<59D3> <59D3> <90A9> -<59D4> <59D4> <88CF> -<59D9> <59DA> <9B4B> -<59DC> <59DC> <9B49> -<59E5> <59E5> <8957> -<59E6> <59E6> <8AAD> -<59E8> <59E8> <9B48> -<59EA> <59EA> <96C3> -<59EB> <59EB> <9550> -<59F6> <59F6> <88A6> -<59FB> <59FB> <88F7> -<59FF> <59FF> <8E70> -<5A01> <5A01> <88D0> -<5A03> <5A03> <88A1> -<5A09> <5A09> <9B51> -<5A11> <5A11> <9B4F> -<5A18> <5A18> <96BA> -<5A1A> <5A1A> <9B52> -<5A1C> <5A1C> <9B50> -<5A1F> <5A1F> <9B4E> -<5A20> <5A20> <9050> -<5A25> <5A25> <9B4D> -<5A29> <5A29> <95D8> -<5A2F> <5A2F> <8CE2> -<5A35> <5A36> <9B56> -<5A3C> <5A3C> <8FA9> -<5A40> <5A40> <9B53> -<5A41> <5A41> <984B> -<5A46> <5A46> <946B> -<5A49> <5A49> <9B55> -endbfrange - -100 beginbfrange -<5A5A> <5A5A> <8DA5> -<5A62> <5A62> <9B58> -<5A66> <5A66> <9577> -<5A6A> <5A6A> <9B59> -<5A6C> <5A6C> <9B54> -<5A7F> <5A7F> <96B9> -<5A92> <5A92> <947D> -<5A9A> <5A9A> <9B5A> -<5A9B> <5A9B> <9551> -<5ABC> <5ABC> <9B5B> -<5ABD> <5ABD> <9B5F> -<5ABE> <5ABE> <9B5C> -<5AC1> <5AC1> <89C5> -<5AC2> <5AC2> <9B5E> -<5AC9> <5AC9> <8EB9> -<5ACB> <5ACB> <9B5D> -<5ACC> <5ACC> <8C99> -<5AD0> <5AD0> <9B6B> -<5AD6> <5AD6> <9B64> -<5AD7> <5AD7> <9B61> -<5AE1> <5AE1> <9284> -<5AE3> <5AE3> <9B60> -<5AE6> <5AE6> <9B62> -<5AE9> <5AE9> <9B63> -<5AFA> <5AFB> <9B65> -<5B09> <5B09> <8AF0> -<5B0B> <5B0B> <9B68> -<5B0C> <5B0C> <9B67> -<5B16> <5B16> <9B69> -<5B22> <5B22> <8FEC> -<5B2A> <5B2A> <9B6C> -<5B2C> <5B2C> <92DA> -<5B30> <5B30> <8964> -<5B32> <5B32> <9B6A> -<5B36> <5B36> <9B6D> -<5B3E> <5B3E> <9B6E> -<5B40> <5B40> <9B71> -<5B43> <5B43> <9B6F> -<5B45> <5B45> <9B70> -<5B50> <5B50> <8E71> -<5B51> <5B51> <9B72> -<5B54> <5B54> <8D45> -<5B55> <5B55> <9B73> -<5B56> <5B56> -<5B57> <5B57> <8E9A> -<5B58> <5B58> <91B6> -<5B5A> <5B5B> <9B74> -<5B5C> <5B5C> <8E79> -<5B5D> <5B5D> <8D46> -<5B5F> <5B5F> <96D0> -<5B63> <5B63> <8B47> -<5B64> <5B64> <8CC7> -<5B65> <5B65> <9B76> -<5B66> <5B66> <8A77> -<5B69> <5B69> <9B77> -<5B6B> <5B6B> <91B7> -<5B70> <5B70> <9B78> -<5B71> <5B71> <9BA1> -<5B73> <5B73> <9B79> -<5B75> <5B75> <9B7A> -<5B78> <5B78> <9B7B> -<5B7A> <5B7A> <9B7D> -<5B80> <5B80> <9B7E> -<5B83> <5B83> <9B80> -<5B85> <5B85> <91EE> -<5B87> <5B87> <8946> -<5B88> <5B88> <8EE7> -<5B89> <5B89> <88C0> -<5B8B> <5B8B> <9176> -<5B8C> <5B8C> <8AAE> -<5B8D> <5B8D> <8EB3> -<5B8F> <5B8F> <8D47> -<5B95> <5B95> <9386> -<5B97> <5B97> <8F40> -<5B98> <5B98> <8AAF> -<5B99> <5B99> <9288> -<5B9A> <5B9A> <92E8> -<5B9B> <5B9B> <88B6> -<5B9C> <5B9C> <8B58> -<5B9D> <5B9D> <95F3> -<5B9F> <5B9F> <8EC0> -<5BA2> <5BA2> <8B71> -<5BA3> <5BA3> <90E9> -<5BA4> <5BA4> <8EBA> -<5BA5> <5BA5> <9747> -<5BA6> <5BA6> <9B81> -<5BAE> <5BAE> <8B7B> -<5BB0> <5BB0> <8DC9> -<5BB3> <5BB3> <8A51> -<5BB4> <5BB4> <8983> -<5BB5> <5BB5> <8FAA> -<5BB6> <5BB6> <89C6> -<5BB8> <5BB8> <9B82> -<5BB9> <5BB9> <9765> -<5BBF> <5BBF> <8F68> -<5BC0> <5BC0> -<5BC2> <5BC2> <8EE2> -<5BC3> <5BC3> <9B83> -<5BC4> <5BC4> <8AF1> -<5BC5> <5BC5> <93D0> -endbfrange - -100 beginbfrange -<5BC6> <5BC6> <96A7> -<5BC7> <5BC7> <9B84> -<5BC9> <5BC9> <9B85> -<5BCC> <5BCC> <9578> -<5BD0> <5BD0> <9B87> -<5BD2> <5BD2> <8AA6> -<5BD3> <5BD3> <8BF5> -<5BD4> <5BD4> <9B86> -<5BD8> <5BD8> -<5BDB> <5BDB> <8AB0> -<5BDD> <5BDD> <9051> -<5BDE> <5BDE> <9B8B> -<5BDF> <5BDF> <8E40> -<5BE1> <5BE1> <89C7> -<5BE2> <5BE2> <9B8A> -<5BE4> <5BE4> <9B88> -<5BE5> <5BE5> <9B8C> -<5BE6> <5BE6> <9B89> -<5BE7> <5BE7> <944A> -<5BE8> <5BE8> <9ECB> -<5BE9> <5BE9> <9052> -<5BEB> <5BEB> <9B8D> -<5BEC> <5BEC> -<5BEE> <5BEE> <97BE> -<5BF0> <5BF0> <9B8E> -<5BF3> <5BF3> <9B90> -<5BF5> <5BF5> <929E> -<5BF6> <5BF6> <9B8F> -<5BF8> <5BF8> <90A1> -<5BFA> <5BFA> <8E9B> -<5BFE> <5BFE> <91CE> -<5BFF> <5BFF> <8EF5> -<5C01> <5C01> <9595> -<5C02> <5C02> <90EA> -<5C04> <5C04> <8ECB> -<5C05> <5C05> <9B91> -<5C06> <5C06> <8FAB> -<5C07> <5C08> <9B92> -<5C09> <5C09> <88D1> -<5C0A> <5C0A> <91B8> -<5C0B> <5C0B> <9071> -<5C0D> <5C0D> <9B94> -<5C0E> <5C0E> <93B1> -<5C0F> <5C0F> <8FAC> -<5C11> <5C11> <8FAD> -<5C13> <5C13> <9B95> -<5C16> <5C16> <90EB> -<5C1A> <5C1A> <8FAE> -<5C1E> <5C1E> -<5C20> <5C20> <9B96> -<5C22> <5C22> <9B97> -<5C24> <5C24> <96DE> -<5C28> <5C28> <9B98> -<5C2D> <5C2D> <8BC4> -<5C31> <5C31> <8F41> -<5C38> <5C39> <9B99> -<5C3A> <5C3A> <8EDA> -<5C3B> <5C3B> <904B> -<5C3C> <5C3C> <93F2> -<5C3D> <5C3D> <9073> -<5C3E> <5C3E> <94F6> -<5C3F> <5C3F> <9441> -<5C40> <5C40> <8BC7> -<5C41> <5C41> <9B9B> -<5C45> <5C45> <8B8F> -<5C46> <5C46> <9B9C> -<5C48> <5C48> <8BFC> -<5C4A> <5C4A> <93CD> -<5C4B> <5C4B> <89AE> -<5C4D> <5C4D> <8E72> -<5C4E> <5C4E> <9B9D> -<5C4F> <5C4F> <9BA0> -<5C50> <5C50> <9B9F> -<5C51> <5C51> <8BFB> -<5C53> <5C53> <9B9E> -<5C55> <5C55> <9357> -<5C5B> <5C5B> <9BA0> -<5C5E> <5C5E> <91AE> -<5C60> <5C60> <936A> -<5C61> <5C61> <8EC6> -<5C62> <5C62> <8EC6> -<5C64> <5C64> <9177> -<5C65> <5C65> <979A> -<5C6C> <5C6C> <9BA2> -<5C6E> <5C6E> <9BA3> -<5C6F> <5C6F> <93D4> -<5C71> <5C71> <8E52> -<5C76> <5C76> <9BA5> -<5C79> <5C79> <9BA6> -<5C8C> <5C8C> <9BA7> -<5C90> <5C90> <8AF2> -<5C91> <5C91> <9BA8> -<5C94> <5C94> <9BA9> -<5CA1> <5CA1> <89AA> -<5CA6> <5CA6> -<5CA8> <5CA8> <915A> -<5CA9> <5CA9> <8AE2> -<5CAB> <5CAB> <9BAB> -<5CAC> <5CAC> <96A6> -<5CB1> <5CB1> <91D0> -endbfrange - -100 beginbfrange -<5CB3> <5CB3> <8A78> -<5CB6> <5CB6> <9BAD> -<5CB7> <5CB7> <9BAF> -<5CB8> <5CB8> <8ADD> -<5CBA> <5CBA> -<5CBB> <5CBB> <9BAC> -<5CBC> <5CBC> <9BAE> -<5CBE> <5CBE> <9BB1> -<5CC5> <5CC5> <9BB0> -<5CC7> <5CC7> <9BB2> -<5CD9> <5CD9> <9BB3> -<5CE0> <5CE0> <93BB> -<5CE1> <5CE1> <8BAC> -<5CE8> <5CE8> <89E3> -<5CE9> <5CE9> <9BB4> -<5CEA> <5CEA> <9BB9> -<5CED> <5CED> <9BB7> -<5CEF> <5CEF> <95F5> -<5CF0> <5CF0> <95F4> -<5CF5> <5CF5> -<5CF6> <5CF6> <9387> -<5CFA> <5CFA> <9BB6> -<5CFB> <5CFB> <8F73> -<5CFD> <5CFD> <9BB5> -<5D07> <5D07> <9092> -<5D0B> <5D0B> <9BBA> -<5D0E> <5D0E> <8DE8> -<5D11> <5D11> <9BC0> -<5D14> <5D14> <9BC1> -<5D15> <5D15> <9BBB> -<5D16> <5D16> <8A52> -<5D17> <5D17> <9BBC> -<5D18> <5D18> <9BC5> -<5D19> <5D19> <9BC4> -<5D1A> <5D1A> <9BC3> -<5D1B> <5D1B> <9BBF> -<5D1F> <5D1F> <9BBE> -<5D22> <5D22> <9BC2> -<5D27> <5D27> -<5D29> <5D29> <95F6> -<5D42> <5D42> -<5D4B> <5D4B> <9BC9> -<5D4C> <5D4C> <9BC6> -<5D4E> <5D4E> <9BC8> -<5D50> <5D50> <9792> -<5D52> <5D52> <9BC7> -<5D53> <5D53> -<5D5C> <5D5C> <9BBD> -<5D69> <5D69> <9093> -<5D6C> <5D6C> <9BCA> -<5D6D> <5D6D> -<5D6F> <5D6F> <8DB5> -<5D73> <5D73> <9BCB> -<5D76> <5D76> <9BCC> -<5D82> <5D82> <9BCF> -<5D84> <5D84> <9BCE> -<5D87> <5D87> <9BCD> -<5D8B> <5D8B> <9388> -<5D8C> <5D8C> <9BB8> -<5D90> <5D90> <9BD5> -<5D9D> <5D9D> <9BD1> -<5DA2> <5DA2> <9BD0> -<5DAC> <5DAC> <9BD2> -<5DAE> <5DAE> <9BD3> -<5DB7> <5DB7> <9BD6> -<5DB8> <5DB9> -<5DBA> <5DBA> <97E4> -<5DBC> <5DBC> <9BD7> -<5DBD> <5DBD> <9BD4> -<5DC9> <5DC9> <9BD8> -<5DCC> <5DCC> <8ADE> -<5DCD> <5DCD> <9BD9> -<5DD0> <5DD0> -<5DD2> <5DD2> <9BDB> -<5DD3> <5DD3> <9BDA> -<5DD6> <5DD6> <9BDC> -<5DDB> <5DDB> <9BDD> -<5DDD> <5DDD> <90EC> -<5DDE> <5DDE> <8F42> -<5DE1> <5DE1> <8F84> -<5DE3> <5DE3> <9183> -<5DE5> <5DE5> <8D48> -<5DE6> <5DE6> <8DB6> -<5DE7> <5DE7> <8D49> -<5DE8> <5DE8> <8B90> -<5DEB> <5DEB> <9BDE> -<5DEE> <5DEE> <8DB7> -<5DF1> <5DF1> <8CC8> -<5DF2> <5DF2> <9BDF> -<5DF3> <5DF3> <96A4> -<5DF4> <5DF4> <9462> -<5DF5> <5DF5> <9BE0> -<5DF7> <5DF7> <8D4A> -<5DFB> <5DFB> <8AAA> -<5DFD> <5DFD> <9246> -<5DFE> <5DFE> <8BD0> -<5E02> <5E02> <8E73> -<5E03> <5E03> <957A> -<5E06> <5E06> <94BF> -<5E0B> <5E0B> <9BE1> -endbfrange - -100 beginbfrange -<5E0C> <5E0C> <8AF3> -<5E11> <5E11> <9BE4> -<5E16> <5E16> <929F> -<5E19> <5E19> <9BE3> -<5E1A> <5E1A> <9BE2> -<5E1B> <5E1B> <9BE5> -<5E1D> <5E1D> <92E9> -<5E25> <5E25> <9083> -<5E2B> <5E2B> <8E74> -<5E2D> <5E2D> <90C8> -<5E2F> <5E2F> <91D1> -<5E30> <5E30> <8B41> -<5E33> <5E33> <92A0> -<5E36> <5E37> <9BE6> -<5E38> <5E38> <8FED> -<5E3D> <5E3D> <9658> -<5E40> <5E40> <9BEA> -<5E43> <5E43> <9BE9> -<5E44> <5E44> <9BE8> -<5E45> <5E45> <959D> -<5E47> <5E47> <9BF1> -<5E4C> <5E4C> <9679> -<5E4E> <5E4E> <9BEB> -<5E54> <5E54> <9BED> -<5E55> <5E55> <968B> -<5E57> <5E57> <9BEC> -<5E5F> <5E5F> <9BEE> -<5E61> <5E61> <94A6> -<5E62> <5E62> <9BEF> -<5E63> <5E63> <95BC> -<5E64> <5E64> <9BF0> -<5E72> <5E72> <8AB1> -<5E73> <5E73> <95BD> -<5E74> <5E74> <944E> -<5E75> <5E76> <9BF2> -<5E78> <5E78> <8D4B> -<5E79> <5E79> <8AB2> -<5E7A> <5E7A> <9BF4> -<5E7B> <5E7B> <8CB6> -<5E7C> <5E7C> <9763> -<5E7D> <5E7D> <9748> -<5E7E> <5E7E> <8AF4> -<5E7F> <5E7F> <9BF6> -<5E81> <5E81> <92A1> -<5E83> <5E83> <8D4C> -<5E84> <5E84> <8FAF> -<5E87> <5E87> <94DD> -<5E8A> <5E8A> <8FB0> -<5E8F> <5E8F> <8F98> -<5E95> <5E95> <92EA> -<5E96> <5E96> <95F7> -<5E97> <5E97> <9358> -<5E9A> <5E9A> <8D4D> -<5E9C> <5E9C> <957B> -<5EA0> <5EA0> <9BF7> -<5EA6> <5EA6> <9378> -<5EA7> <5EA7> <8DC0> -<5EAB> <5EAB> <8CC9> -<5EAD> <5EAD> <92EB> -<5EB5> <5EB5> <88C1> -<5EB6> <5EB6> <8F8E> -<5EB7> <5EB7> <8D4E> -<5EB8> <5EB8> <9766> -<5EC1> <5EC2> <9BF8> -<5EC3> <5EC3> <9470> -<5EC8> <5EC8> <9BFA> -<5EC9> <5EC9> <97F5> -<5ECA> <5ECA> <984C> -<5ECF> <5ECF> <9BFC> -<5ED0> <5ED0> <9BFB> -<5ED3> <5ED3> <8A66> -<5ED6> <5ED6> <9C40> -<5EDA> <5EDB> <9C43> -<5EDD> <5EDD> <9C42> -<5EDF> <5EDF> <955F> -<5EE0> <5EE0> <8FB1> -<5EE1> <5EE1> <9C46> -<5EE2> <5EE2> <9C45> -<5EE3> <5EE3> <9C41> -<5EE8> <5EE9> <9C47> -<5EEC> <5EEC> <9C49> -<5EF0> <5EF0> <9C4C> -<5EF1> <5EF1> <9C4A> -<5EF3> <5EF3> <9C4B> -<5EF4> <5EF4> <9C4D> -<5EF6> <5EF6> <8984> -<5EF7> <5EF7> <92EC> -<5EF8> <5EF8> <9C4E> -<5EFA> <5EFA> <8C9A> -<5EFB> <5EFB> <89F4> -<5EFC> <5EFC> <9455> -<5EFE> <5EFE> <9C4F> -<5EFF> <5EFF> <93F9> -<5F01> <5F01> <95D9> -<5F03> <5F03> <9C50> -<5F04> <5F04> <984D> -<5F09> <5F09> <9C51> -<5F0A> <5F0A> <95BE> -<5F0B> <5F0B> <9C54> -<5F0C> <5F0C> <989F> -endbfrange - -100 beginbfrange -<5F0D> <5F0D> <98AF> -<5F0F> <5F0F> <8EAE> -<5F10> <5F10> <93F3> -<5F11> <5F11> <9C55> -<5F13> <5F13> <8B7C> -<5F14> <5F14> <92A2> -<5F15> <5F15> <88F8> -<5F16> <5F16> <9C56> -<5F17> <5F17> <95A4> -<5F18> <5F18> <8D4F> -<5F1B> <5F1B> <926F> -<5F1F> <5F1F> <92ED> -<5F21> <5F21> -<5F25> <5F25> <96ED> -<5F26> <5F26> <8CB7> -<5F27> <5F27> <8CCA> -<5F29> <5F29> <9C57> -<5F2D> <5F2D> <9C58> -<5F2F> <5F2F> <9C5E> -<5F31> <5F31> <8EE3> -<5F34> <5F34> -<5F35> <5F35> <92A3> -<5F37> <5F37> <8BAD> -<5F38> <5F38> <9C59> -<5F3C> <5F3C> <954A> -<5F3E> <5F3E> <9265> -<5F41> <5F41> <9C5A> -<5F45> <5F45> -<5F48> <5F48> <9C5B> -<5F4A> <5F4A> <8BAE> -<5F4C> <5F4C> <9C5C> -<5F4E> <5F4E> <9C5D> -<5F51> <5F51> <9C5F> -<5F53> <5F53> <9396> -<5F56> <5F57> <9C60> -<5F59> <5F59> <9C62> -<5F5C> <5F5C> <9C53> -<5F5D> <5F5D> <9C52> -<5F61> <5F61> <9C63> -<5F62> <5F62> <8C60> -<5F66> <5F66> <9546> -<5F67> <5F67> -<5F69> <5F69> <8DCA> -<5F6A> <5F6A> <9556> -<5F6B> <5F6B> <92A4> -<5F6C> <5F6C> <956A> -<5F6D> <5F6D> <9C64> -<5F70> <5F70> <8FB2> -<5F71> <5F71> <8965> -<5F73> <5F73> <9C65> -<5F77> <5F77> <9C66> -<5F79> <5F79> <96F0> -<5F7C> <5F7C> <94DE> -<5F7F> <5F7F> <9C69> -<5F80> <5F80> <899D> -<5F81> <5F81> <90AA> -<5F82> <5F82> <9C68> -<5F83> <5F83> <9C67> -<5F84> <5F84> <8C61> -<5F85> <5F85> <91D2> -<5F87> <5F87> <9C6D> -<5F88> <5F88> <9C6B> -<5F8A> <5F8A> <9C6A> -<5F8B> <5F8B> <97A5> -<5F8C> <5F8C> <8CE3> -<5F90> <5F90> <8F99> -<5F91> <5F91> <9C6C> -<5F92> <5F92> <936B> -<5F93> <5F93> <8F5D> -<5F97> <5F97> <93BE> -<5F98> <5F98> <9C70> -<5F99> <5F99> <9C6F> -<5F9E> <5F9E> <9C6E> -<5FA0> <5FA0> <9C71> -<5FA1> <5FA1> <8CE4> -<5FA8> <5FA8> <9C72> -<5FA9> <5FA9> <959C> -<5FAA> <5FAA> <8F7A> -<5FAD> <5FAD> <9C73> -<5FAE> <5FAE> <94F7> -<5FB3> <5FB3> <93BF> -<5FB4> <5FB4> <92A5> -<5FB7> <5FB7> -<5FB9> <5FB9> <934F> -<5FBC> <5FBC> <9C74> -<5FBD> <5FBD> <8B4A> -<5FC3> <5FC3> <9053> -<5FC5> <5FC5> <954B> -<5FCC> <5FCC> <8AF5> -<5FCD> <5FCD> <9445> -<5FD6> <5FD6> <9C75> -<5FD7> <5FD7> <8E75> -<5FD8> <5FD9> <9659> -<5FDC> <5FDC> <899E> -<5FDD> <5FDD> <9C7A> -<5FDE> <5FDE> -<5FE0> <5FE0> <9289> -<5FE4> <5FE4> <9C77> -<5FEB> <5FEB> <89F5> -<5FF0> <5FF0> <9CAB> -endbfrange - -100 beginbfrange -<5FF1> <5FF1> <9C79> -<5FF5> <5FF5> <944F> -<5FF8> <5FF8> <9C78> -<5FFB> <5FFB> <9C76> -<5FFD> <5FFD> <8D9A> -<5FFF> <5FFF> <9C7C> -<600E> <600E> <9C83> -<600F> <600F> <9C89> -<6010> <6010> <9C81> -<6012> <6012> <937B> -<6015> <6015> <9C86> -<6016> <6016> <957C> -<6019> <6019> <9C80> -<601B> <601B> <9C85> -<601C> <601C> <97E5> -<601D> <601D> <8E76> -<6020> <6020> <91D3> -<6021> <6021> <9C7D> -<6025> <6025> <8B7D> -<6026> <6026> <9C88> -<6027> <6027> <90AB> -<6028> <6028> <8985> -<6029> <6029> <9C82> -<602A> <602A> <89F6> -<602B> <602B> <9C87> -<602F> <602F> <8BAF> -<6031> <6031> <9C84> -<603A> <603A> <9C8A> -<6041> <6041> <9C8C> -<6042> <6042> <9C96> -<6043> <6043> <9C94> -<6046> <6046> <9C91> -<604A> <604A> <9C90> -<604B> <604B> <97F6> -<604D> <604D> <9C92> -<6050> <6050> <8BB0> -<6052> <6052> <8D50> -<6055> <6055> <8F9A> -<6059> <6059> <9C99> -<605A> <605A> <9C8B> -<605D> <605D> -<605F> <605F> <9C8F> -<6060> <6060> <9C7E> -<6062> <6062> <89F8> -<6063> <6063> <9C93> -<6064> <6064> <9C95> -<6065> <6065> <9270> -<6068> <6068> <8DA6> -<6069> <6069> <89B6> -<606A> <606A> <9C8D> -<606B> <606B> <9C98> -<606C> <606C> <9C97> -<606D> <606D> <8BB1> -<606F> <606F> <91A7> -<6070> <6070> <8A86> -<6075> <6075> <8C62> -<6077> <6077> <9C8E> -<6081> <6081> <9C9A> -<6083> <6083> <9C9D> -<6084> <6084> <9C9F> -<6085> <6085> -<6089> <6089> <8EBB> -<608A> <608A> -<608B> <608B> <9CA5> -<608C> <608C> <92EE> -<608D> <608D> <9C9B> -<6092> <6092> <9CA3> -<6094> <6094> <89F7> -<6096> <6097> <9CA1> -<609A> <609A> <9C9E> -<609B> <609B> <9CA0> -<609F> <609F> <8CE5> -<60A0> <60A0> <9749> -<60A3> <60A3> <8AB3> -<60A6> <60A6> <8978> -<60A7> <60A7> <9CA4> -<60A9> <60A9> <9459> -<60AA> <60AA> <88AB> -<60B2> <60B2> <94DF> -<60B3> <60B3> <9C7B> -<60B4> <60B4> <9CAA> -<60B5> <60B5> <9CAE> -<60B6> <60B6> <96E3> -<60B8> <60B8> <9CA7> -<60BC> <60BC> <9389> -<60BD> <60BD> <9CAC> -<60C5> <60C5> <8FEE> -<60C6> <60C6> <9CAD> -<60C7> <60C7> <93D5> -<60D1> <60D1> <9866> -<60D3> <60D3> <9CA9> -<60D5> <60D5> -<60D8> <60D8> <9CAF> -<60DA> <60DA> <8D9B> -<60DC> <60DC> <90C9> -<60DE> <60DE> -<60DF> <60DF> <88D2> -<60E0> <60E0> <9CA8> -<60E1> <60E1> <9CA6> -<60E3> <60E3> <9179> -endbfrange - -100 beginbfrange -<60E7> <60E7> <9C9C> -<60E8> <60E8> <8E53> -<60F0> <60F0> <91C4> -<60F1> <60F1> <9CBB> -<60F2> <60F2> -<60F3> <60F3> <917A> -<60F4> <60F4> <9CB6> -<60F6> <60F7> <9CB3> -<60F9> <60F9> <8EE4> -<60FA> <60FA> <9CB7> -<60FB> <60FB> <9CBA> -<6100> <6100> <9CB5> -<6101> <6101> <8F44> -<6103> <6103> <9CB8> -<6106> <6106> <9CB2> -<6108> <6108> <96FA> -<6109> <6109> <96F9> -<610D> <610E> <9CBC> -<610F> <610F> <88D3> -<6111> <6111> -<6115> <6115> <9CB1> -<611A> <611A> <8BF0> -<611B> <611B> <88A4> -<611F> <611F> <8AB4> -<6120> <6120> -<6121> <6121> <9CB9> -<6127> <6127> <9CC1> -<6128> <6128> <9CC0> -<612C> <612C> <9CC5> -<6130> <6130> -<6134> <6134> <9CC6> -<6137> <6137> -<613C> <613C> <9CC4> -<613D> <613D> <9CC7> -<613E> <613E> <9CBF> -<613F> <613F> <9CC3> -<6142> <6142> <9CC8> -<6144> <6144> <9CC9> -<6147> <6147> <9CBE> -<6148> <6148> <8E9C> -<614A> <614A> <9CC2> -<614B> <614B> <91D4> -<614C> <614C> <8D51> -<614D> <614D> <9CB0> -<614E> <614E> <9054> -<6153> <6153> <9CD6> -<6155> <6155> <95E7> -<6158> <615A> <9CCC> -<615D> <615D> <9CD5> -<615F> <615F> <9CD4> -<6162> <6162> <969D> -<6163> <6163> <8AB5> -<6165> <6165> <9CD2> -<6167> <6167> <8C64> -<6168> <6168> <8A53> -<616B> <616B> <9CCF> -<616E> <616E> <97B6> -<616F> <616F> <9CD1> -<6170> <6170> <88D4> -<6171> <6171> <9CD3> -<6173> <6173> <9CCA> -<6174> <6174> <9CD0> -<6175> <6175> <9CD7> -<6176> <6176> <8C63> -<6177> <6177> <9CCB> -<617E> <617E> <977C> -<6182> <6182> <974A> -<6187> <6187> <9CDA> -<618A> <618A> <9CDE> -<618E> <618E> <919E> -<6190> <6190> <97F7> -<6191> <6191> <9CDF> -<6194> <6194> <9CDC> -<6196> <6196> <9CD9> -<6198> <6198> -<6199> <6199> <9CD8> -<619A> <619A> <9CDD> -<61A4> <61A4> <95AE> -<61A7> <61A7> <93B2> -<61A9> <61A9> <8C65> -<61AB> <61AB> <9CE0> -<61AC> <61AC> <9CDB> -<61AE> <61AE> <9CE1> -<61B2> <61B2> <8C9B> -<61B6> <61B6> <89AF> -<61BA> <61BA> <9CE9> -<61BE> <61BE> <8AB6> -<61C3> <61C3> <9CE7> -<61C6> <61C6> <9CE8> -<61C7> <61C7> <8DA7> -<61C8> <61C8> <9CE6> -<61C9> <61C9> <9CE4> -<61CA> <61CA> <9CE3> -<61CB> <61CB> <9CEA> -<61CC> <61CC> <9CE2> -<61CD> <61CD> <9CEC> -<61D0> <61D0> <89F9> -<61E3> <61E3> <9CEE> -<61E6> <61E6> <9CED> -<61F2> <61F2> <92A6> -endbfrange - -100 beginbfrange -<61F4> <61F4> <9CF1> -<61F6> <61F6> <9CEF> -<61F7> <61F7> <9CE5> -<61F8> <61F8> <8C9C> -<61FA> <61FA> <9CF0> -<61FC> <61FC> <9CF4> -<61FD> <61FD> <9CF3> -<61FE> <61FE> <9CF5> -<61FF> <61FF> <9CF2> -<6200> <6200> <9CF6> -<6208> <6209> <9CF7> -<620A> <620A> <95E8> -<620C> <620C> <9CFA> -<620D> <620D> <9CF9> -<620E> <620E> <8F5E> -<6210> <6210> <90AC> -<6211> <6211> <89E4> -<6212> <6212> <89FA> -<6213> <6213> -<6214> <6214> <9CFB> -<6216> <6216> <88BD> -<621A> <621A> <90CA> -<621B> <621B> <9CFC> -<621D> <621D> -<621E> <621E> <9D40> -<621F> <621F> <8C81> -<6221> <6221> <9D41> -<6226> <6226> <90ED> -<622A> <622A> <9D42> -<622E> <622E> <9D43> -<622F> <622F> <8B59> -<6230> <6230> <9D44> -<6232> <6233> <9D45> -<6234> <6234> <91D5> -<6238> <6238> <8CCB> -<623B> <623B> <96DF> -<623F> <623F> <965B> -<6240> <6240> <8F8A> -<6241> <6241> <9D47> -<6247> <6247> <90EE> -<6248> <6248> -<6249> <6249> <94E0> -<624B> <624B> <8EE8> -<624D> <624D> <8DCB> -<624E> <624E> <9D48> -<6253> <6253> <91C5> -<6255> <6255> <95A5> -<6258> <6258> <91EF> -<625B> <625B> <9D4B> -<625E> <625E> <9D49> -<6260> <6260> <9D4C> -<6263> <6263> <9D4A> -<6268> <6268> <9D4D> -<626E> <626E> <95AF> -<6271> <6271> <88B5> -<6276> <6276> <957D> -<6279> <6279> <94E1> -<627C> <627C> <9D4E> -<627E> <627E> <9D51> -<627F> <627F> <8FB3> -<6280> <6280> <8B5A> -<6282> <6282> <9D4F> -<6283> <6283> <9D56> -<6284> <6284> <8FB4> -<6289> <6289> <9D50> -<628A> <628A> <9463> -<6291> <6291> <977D> -<6292> <6293> <9D52> -<6294> <6294> <9D57> -<6295> <6295> <938A> -<6296> <6296> <9D54> -<6297> <6297> <8D52> -<6298> <6298> <90DC> -<629B> <629B> <9D65> -<629C> <629C> <94B2> -<629E> <629E> <91F0> -<62A6> <62A6> -<62AB> <62AB> <94E2> -<62AC> <62AC> <9DAB> -<62B1> <62B1> <95F8> -<62B5> <62B5> <92EF> -<62B9> <62B9> <9695> -<62BB> <62BB> <9D5A> -<62BC> <62BC> <899F> -<62BD> <62BD> <928A> -<62C2> <62C2> <9D63> -<62C5> <62C5> <9253> -<62C6> <62C6> <9D5D> -<62C7> <62C7> <9D64> -<62C8> <62C8> <9D5F> -<62C9> <62C9> <9D66> -<62CA> <62CA> <9D62> -<62CC> <62CC> <9D61> -<62CD> <62CD> <948F> -<62CF> <62CF> <9D5B> -<62D0> <62D0> <89FB> -<62D1> <62D1> <9D59> -<62D2> <62D2> <8B91> -<62D3> <62D3> <91F1> -<62D4> <62D4> <9D55> -endbfrange - -100 beginbfrange -<62D7> <62D7> <9D58> -<62D8> <62D8> <8D53> -<62D9> <62D9> <90D9> -<62DB> <62DB> <8FB5> -<62DC> <62DC> <9D60> -<62DD> <62DD> <9471> -<62E0> <62E0> <8B92> -<62E1> <62E1> <8A67> -<62EC> <62EC> <8A87> -<62ED> <62ED> <9040> -<62EE> <62EE> <9D68> -<62EF> <62EF> <9D6D> -<62F1> <62F1> <9D69> -<62F3> <62F3> <8C9D> -<62F5> <62F5> <9D6E> -<62F6> <62F6> <8E41> -<62F7> <62F7> <8D89> -<62FE> <62FE> <8F45> -<62FF> <62FF> <9D5C> -<6301> <6301> <8E9D> -<6302> <6302> <9D6B> -<6307> <6307> <8E77> -<6308> <6308> <9D6C> -<6309> <6309> <88C2> -<630C> <630C> <9D67> -<6311> <6311> <92A7> -<6319> <6319> <8B93> -<631F> <631F> <8BB2> -<6327> <6327> <9D6A> -<6328> <6328> <88A5> -<632B> <632B> <8DC1> -<632F> <632F> <9055> -<633A> <633A> <92F0> -<633D> <633D> <94D2> -<633E> <633E> <9D70> -<633F> <633F> <917D> -<6349> <6349> <91A8> -<634C> <634C> <8E4A> -<634D> <634D> <9D71> -<634F> <634F> <9D73> -<6350> <6350> <9D6F> -<6355> <6355> <95DF> -<6357> <6357> <92BB> -<635C> <635C> <917B> -<6367> <6367> <95F9> -<6368> <6368> <8ECC> -<6369> <6369> <9D80> -<636B> <636B> <9D7E> -<636E> <636E> <9098> -<6372> <6372> <8C9E> -<6376> <6376> <9D78> -<6377> <6377> <8FB7> -<637A> <637A> <93E6> -<637B> <637B> <9450> -<6380> <6380> <9D76> -<6383> <6383> <917C> -<6388> <6388> <8EF6> -<6389> <6389> <9D7B> -<638C> <638C> <8FB6> -<638E> <638E> <9D75> -<638F> <638F> <9D7A> -<6392> <6392> <9472> -<6396> <6396> <9D74> -<6398> <6398> <8C40> -<639B> <639B> <8A7C> -<639F> <639F> <9D7C> -<63A0> <63A0> <97A9> -<63A1> <63A1> <8DCC> -<63A2> <63A2> <9254> -<63A3> <63A3> <9D79> -<63A5> <63A5> <90DA> -<63A7> <63A7> <8D54> -<63A8> <63A8> <9084> -<63A9> <63A9> <8986> -<63AA> <63AA> <915B> -<63AB> <63AB> <9D77> -<63AC> <63AC> <8B64> -<63B2> <63B2> <8C66> -<63B4> <63B4> <92CD> -<63B5> <63B5> <9D7D> -<63BB> <63BB> <917E> -<63BE> <63BE> <9D81> -<63C0> <63C0> <9D83> -<63C3> <63C3> <91B5> -<63C4> <63C4> <9D89> -<63C6> <63C6> <9D84> -<63C9> <63C9> <9D86> -<63CF> <63CF> <9560> -<63D0> <63D0> <92F1> -<63D2> <63D2> <9D87> -<63D6> <63D6> <974B> -<63DA> <63DA> <9767> -<63DB> <63DB> <8AB7> -<63E1> <63E1> <88AC> -<63E3> <63E3> <9D85> -<63E9> <63E9> <9D82> -<63EE> <63EE> <8AF6> -<63F4> <63F4> <8987> -<63F5> <63F5> -<63F6> <63F6> <9D88> -endbfrange - -100 beginbfrange -<63FA> <63FA> <9768> -<6406> <6406> <9D8C> -<640D> <640D> <91B9> -<640F> <640F> <9D93> -<6413> <6413> <9D8D> -<6414> <6414> <917E> -<6416> <6416> <9D8A> -<6417> <6417> <9D91> -<641C> <641C> <9D72> -<6426> <6426> <9D8E> -<6428> <6428> <9D92> -<642C> <642C> <94C0> -<642D> <642D> <938B> -<6434> <6434> <9D8B> -<6436> <6436> <9D8F> -<643A> <643A> <8C67> -<643E> <643E> <8DEF> -<6442> <6442> <90DB> -<644E> <644E> <9D97> -<6451> <6451> <92CD> -<6458> <6458> <9345> -<6460> <6460> -<6467> <6467> <9D94> -<6469> <6469> <9680> -<646F> <646F> <9D95> -<6476> <6476> <9D96> -<6478> <6478> <96CC> -<647A> <647A> <90A0> -<6483> <6483> <8C82> -<6488> <6488> <9D9D> -<6492> <6492> <8E54> -<6493> <6493> <9D9A> -<6495> <6495> <9D99> -<649A> <649A> <9451> -<649D> <649D> -<649E> <649E> <93B3> -<64A4> <64A4> <9350> -<64A5> <64A5> <9D9B> -<64A9> <64A9> <9D9C> -<64AB> <64AB> <958F> -<64AD> <64AD> <9464> -<64AE> <64AE> <8E42> -<64B0> <64B0> <90EF> -<64B2> <64B2> <966F> -<64B9> <64B9> <8A68> -<64BB> <64BB> <9DA3> -<64BC> <64BC> <9D9E> -<64C1> <64C1> <9769> -<64C2> <64C2> <9DA5> -<64C5> <64C5> <9DA1> -<64C7> <64C7> <9DA2> -<64CD> <64CD> <9180> -<64CE> <64CE> -<64D2> <64D2> <9DA0> -<64D4> <64D4> <9D5E> -<64D8> <64D8> <9DA4> -<64DA> <64DA> <9D9F> -<64E0> <64E1> <9DA9> -<64E2> <64E2> <9346> -<64E3> <64E3> <9DAC> -<64E6> <64E6> <8E43> -<64E7> <64E7> <9DA7> -<64EC> <64EC> <8B5B> -<64EF> <64EF> <9DAD> -<64F1> <64F1> <9DA6> -<64F2> <64F2> <9DB1> -<64F4> <64F4> <9DB0> -<64F6> <64F6> <9DAF> -<64FA> <64FA> <9DB2> -<64FD> <64FD> <9DB4> -<64FE> <64FE> <8FEF> -<6500> <6500> <9DB3> -<6505> <6505> <9DB7> -<6518> <6518> <9DB5> -<651C> <651C> <9DB6> -<651D> <651D> <9D90> -<6522> <6522> <9DB7> -<6523> <6523> <9DB9> -<6524> <6524> <9DB8> -<652A> <652A> <9D98> -<652B> <652B> <9DBA> -<652C> <652C> <9DAE> -<652F> <652F> <8E78> -<6534> <6535> <9DBB> -<6536> <6536> <9DBE> -<6537> <6537> <9DBD> -<6538> <6538> <9DBF> -<6539> <6539> <89FC> -<653B> <653B> <8D55> -<653E> <653E> <95FA> -<653F> <653F> <90AD> -<6545> <6545> <8CCC> -<6548> <6548> <9DC1> -<654D> <654D> <9DC4> -<654E> <654E> -<654F> <654F> <9571> -<6551> <6551> <8B7E> -<6555> <6555> <9DC3> -<6556> <6556> <9DC2> -<6557> <6557> <9473> -endbfrange - -100 beginbfrange -<6558> <6558> <9DC5> -<6559> <6559> <8BB3> -<655D> <655D> <9DC7> -<655E> <655E> <9DC6> -<6562> <6562> <8AB8> -<6563> <6563> <8E55> -<6566> <6566> <93D6> -<656C> <656C> <8C68> -<6570> <6570> <9094> -<6572> <6572> <9DC8> -<6574> <6574> <90AE> -<6575> <6575> <9347> -<6577> <6577> <957E> -<6578> <6578> <9DC9> -<6582> <6583> <9DCA> -<6587> <6587> <95B6> -<6588> <6588> <9B7C> -<6589> <6589> <90C4> -<658C> <658C> <956B> -<658E> <658E> <8DD6> -<6590> <6590> <94E3> -<6591> <6591> <94C1> -<6597> <6597> <936C> -<6599> <6599> <97BF> -<659B> <659B> <9DCD> -<659C> <659C> <8ECE> -<659F> <659F> <9DCE> -<65A1> <65A1> <88B4> -<65A4> <65A4> <8BD2> -<65A5> <65A5> <90CB> -<65A7> <65A7> <9580> -<65AB> <65AB> <9DCF> -<65AC> <65AC> <8E61> -<65AD> <65AD> <9266> -<65AF> <65AF> <8E7A> -<65B0> <65B0> <9056> -<65B7> <65B7> <9DD0> -<65B9> <65B9> <95FB> -<65BC> <65BC> <8997> -<65BD> <65BD> <8E7B> -<65C1> <65C1> <9DD3> -<65C3> <65C3> <9DD1> -<65C4> <65C4> <9DD4> -<65C5> <65C5> <97B7> -<65C6> <65C6> <9DD2> -<65CB> <65CB> <90F9> -<65CC> <65CC> <9DD5> -<65CF> <65CF> <91B0> -<65D2> <65D2> <9DD6> -<65D7> <65D7> <8AF8> -<65D9> <65D9> <9DD8> -<65DB> <65DB> <9DD7> -<65E0> <65E1> <9DD9> -<65E2> <65E2> <8AF9> -<65E5> <65E5> <93FA> -<65E6> <65E6> <9255> -<65E7> <65E7> <8B8C> -<65E8> <65E8> <8E7C> -<65E9> <65E9> <9181> -<65EC> <65EC> <8F7B> -<65ED> <65ED> <88AE> -<65F1> <65F1> <9DDB> -<65FA> <65FA> <89A0> -<65FB> <65FB> <9DDF> -<6600> <6600> -<6602> <6602> <8D56> -<6603> <6603> <9DDE> -<6606> <6606> <8DA9> -<6607> <6607> <8FB8> -<6609> <6609> -<660A> <660A> <9DDD> -<660C> <660C> <8FB9> -<660E> <660E> <96BE> -<660F> <660F> <8DA8> -<6613> <6613> <88D5> -<6614> <6614> <90CC> -<6615> <6615> -<661C> <661C> <9DE4> -<661E> <661E> -<661F> <661F> <90AF> -<6620> <6620> <8966> -<6624> <6624> -<6625> <6625> <8F74> -<6627> <6627> <9686> -<6628> <6628> <8DF0> -<662D> <662D> <8FBA> -<662E> <662E> -<662F> <662F> <90A5> -<6631> <6631> -<6634> <6634> <9DE3> -<6635> <6636> <9DE1> -<663B> <663B> -<663C> <663C> <928B> -<663F> <663F> <9E45> -<6641> <6641> <9DE8> -<6642> <6642> <8E9E> -<6643> <6643> <8D57> -<6644> <6644> <9DE6> -<6649> <6649> <9DE7> -<664B> <664B> <9057> -endbfrange - -100 beginbfrange -<664F> <664F> <9DE5> -<6652> <6652> <8E4E> -<6657> <6657> -<6659> <6659> -<665D> <665D> <9DEA> -<665E> <665E> <9DE9> -<665F> <665F> <9DEE> -<6662> <6662> <9DEF> -<6664> <6664> <9DEB> -<6665> <6665> -<6666> <6666> <8A41> -<6667> <6668> <9DEC> -<6669> <6669> <94D3> -<666E> <666E> <9581> -<666F> <666F> <8C69> -<6670> <6670> <9DF0> -<6673> <6673> -<6674> <6674> <90B0> -<6676> <6676> <8FBB> -<667A> <667A> <9271> -<6681> <6681> <8BC5> -<6683> <6683> <9DF1> -<6684> <6684> <9DF5> -<6687> <6687> <89C9> -<6688> <6688> <9DF2> -<6689> <6689> <9DF4> -<668E> <668E> <9DF3> -<6691> <6691> <8F8B> -<6696> <6696> <9267> -<6697> <6697> <88C3> -<6698> <6698> <9DF6> -<6699> <6699> -<669D> <669D> <9DF7> -<66A0> <66A0> -<66A2> <66A2> <92A8> -<66A6> <66A6> <97EF> -<66AB> <66AB> <8E62> -<66AE> <66AE> <95E9> -<66B2> <66B2> -<66B4> <66B4> <965C> -<66B8> <66B8> <9E41> -<66B9> <66B9> <9DF9> -<66BC> <66BC> <9DFC> -<66BE> <66BE> <9DFB> -<66BF> <66BF> -<66C1> <66C1> <9DF8> -<66C4> <66C4> <9E40> -<66C7> <66C7> <93DC> -<66C9> <66C9> <9DFA> -<66D6> <66D6> <9E42> -<66D9> <66D9> <8F8C> -<66DA> <66DA> <9E43> -<66DC> <66DC> <976A> -<66DD> <66DD> <9498> -<66E0> <66E0> <9E44> -<66E6> <66E6> <9E46> -<66E9> <66E9> <9E47> -<66F0> <66F0> <9E48> -<66F2> <66F2> <8BC8> -<66F3> <66F3> <8967> -<66F4> <66F4> <8D58> -<66F5> <66F5> <9E49> -<66F7> <66F7> <9E4A> -<66F8> <66F8> <8F91> -<66F9> <66F9> <9182> -<66FA> <66FA> -<66FB> <66FB> -<66FC> <66FC> <99D6> -<66FD> <66FD> <915D> -<66FE> <66FE> <915C> -<66FF> <66FF> <91D6> -<6700> <6700> <8DC5> -<6703> <6703> <98F0> -<6708> <6708> <8C8E> -<6709> <6709> <974C> -<670B> <670B> <95FC> -<670D> <670D> <959E> -<670E> <670E> -<670F> <670F> <9E4B> -<6714> <6714> <8DF1> -<6715> <6715> <92BD> -<6716> <6716> <9E4C> -<6717> <6717> <984E> -<671B> <671B> <965D> -<671D> <671D> <92A9> -<671E> <671E> <9E4D> -<671F> <671F> <8AFA> -<6726> <6727> <9E4E> -<6728> <6728> <96D8> -<672A> <672A> <96A2> -<672B> <672B> <9696> -<672C> <672C> <967B> -<672D> <672D> <8E44> -<672E> <672E> <9E51> -<6731> <6731> <8EE9> -<6734> <6734> <9670> -<6736> <6736> <9E53> -<6737> <6737> <9E56> -<6738> <6738> <9E55> -<673A> <673A> <8AF7> -endbfrange - -100 beginbfrange -<673D> <673D> <8B80> -<673F> <673F> <9E52> -<6741> <6741> <9E54> -<6746> <6746> <9E57> -<6749> <6749> <9099> -<674E> <674E> <979B> -<674F> <674F> <88C7> -<6750> <6750> <8DDE> -<6751> <6751> <91BA> -<6753> <6753> <8EDB> -<6756> <6756> <8FF1> -<6759> <6759> <9E5A> -<675C> <675C> <936D> -<675E> <675E> <9E58> -<675F> <675F> <91A9> -<6760> <6760> <9E59> -<6761> <6761> <8FF0> -<6762> <6762> <96DB> -<6763> <6764> <9E5B> -<6765> <6765> <9788> -<6766> <6766> -<676A> <676A> <9E61> -<676D> <676D> <8D59> -<676F> <676F> <9474> -<6770> <6770> <9E5E> -<6771> <6771> <938C> -<6772> <6772> <9DDC> -<6773> <6773> <9DE0> -<6775> <6775> <8B6E> -<6777> <6777> <9466> -<677C> <677C> <9E60> -<677E> <677E> <8FBC> -<677F> <677F> <94C2> -<6785> <6785> <9E66> -<6787> <6787> <94F8> -<6789> <6789> <9E5D> -<678B> <678B> <9E63> -<678C> <678C> <9E62> -<6790> <6790> <90CD> -<6795> <6795> <968D> -<6797> <6797> <97D1> -<679A> <679A> <9687> -<679C> <679C> <89CA> -<679D> <679D> <8E7D> -<67A0> <67A0> <9867> -<67A1> <67A1> <9E65> -<67A2> <67A2> <9095> -<67A6> <67A6> <9E64> -<67A9> <67A9> <9E5F> -<67AF> <67AF> <8CCD> -<67B3> <67B3> <9E6B> -<67B4> <67B4> <9E69> -<67B6> <67B6> <89CB> -<67B7> <67B7> <9E67> -<67B8> <67B8> <9E6D> -<67B9> <67B9> <9E73> -<67BB> <67BB> -<67C0> <67C0> -<67C1> <67C1> <91C6> -<67C4> <67C4> <95BF> -<67C6> <67C6> <9E75> -<67CA> <67CA> <9541> -<67CE> <67CE> <9E74> -<67CF> <67CF> <9490> -<67D0> <67D0> <965E> -<67D1> <67D1> <8AB9> -<67D3> <67D3> <90F5> -<67D4> <67D4> <8F5F> -<67D8> <67D8> <92D1> -<67DA> <67DA> <974D> -<67DD> <67DD> <9E70> -<67DE> <67DE> <9E6F> -<67E2> <67E2> <9E71> -<67E4> <67E4> <9E6E> -<67E7> <67E7> <9E76> -<67E9> <67E9> <9E6C> -<67EC> <67EC> <9E6A> -<67EE> <67EE> <9E72> -<67EF> <67EF> <9E68> -<67F1> <67F1> <928C> -<67F3> <67F3> <96F6> -<67F4> <67F4> <8EC4> -<67F5> <67F5> <8DF2> -<67FB> <67FB> <8DB8> -<67FE> <67FE> <968F> -<67FF> <67FF> <8A60> -<6801> <6801> -<6802> <6802> <92CC> -<6803> <6803> <93C8> -<6804> <6804> <8968> -<6805> <6805> <8DF2> -<6813> <6813> <90F0> -<6816> <6816> <90B2> -<6817> <6817> <8C49> -<681E> <681E> <9E78> -<6821> <6821> <8D5A> -<6822> <6822> <8A9C> -<6829> <6829> <9E7A> -<682A> <682A> <8A94> -<682B> <682B> <9E81> -endbfrange - -100 beginbfrange -<6832> <6832> <9E7D> -<6834> <6834> <90F1> -<6838> <6838> <8A6A> -<6839> <6839> <8DAA> -<683C> <683C> <8A69> -<683D> <683D> <8DCD> -<6840> <6840> <9E7B> -<6841> <6841> <8C85> -<6842> <6842> <8C6A> -<6843> <6843> <938D> -<6844> <6844> -<6846> <6846> <9E79> -<6848> <6848> <88C4> -<684D> <684D> <9E7C> -<684E> <684E> <9E7E> -<6850> <6850> <8BCB> -<6851> <6851> <8C4B> -<6852> <6852> -<6853> <6853> <8ABA> -<6854> <6854> <8B6A> -<6859> <6859> <9E82> -<685C> <685C> <8DF7> -<685D> <685D> <9691> -<685F> <685F> <8E56> -<6863> <6863> <9E83> -<6867> <6867> <954F> -<6874> <6874> <9E8F> -<6876> <6876> <89B1> -<6877> <6877> <9E84> -<687E> <687E> <9E95> -<687F> <687F> <9E85> -<6881> <6881> <97C0> -<6883> <6883> <9E8C> -<6885> <6885> <947E> -<688D> <688D> <9E94> -<688E> <688E> <9E94> -<688F> <688F> <9E87> -<6893> <6893> <88B2> -<6894> <6894> <9E89> -<6897> <6897> <8D5B> -<689B> <689B> <9E8B> -<689D> <689D> <9E8A> -<689F> <689F> <9E86> -<68A0> <68A0> <9E91> -<68A2> <68A2> <8FBD> -<68A6> <68A6> <9AEB> -<68A7> <68A7> <8CE6> -<68A8> <68A8> <979C> -<68AD> <68AD> <9E88> -<68AF> <68AF> <92F2> -<68B0> <68B0> <8A42> -<68B1> <68B1> <8DAB> -<68B3> <68B3> <9E80> -<68B5> <68B5> <9E90> -<68B6> <68B6> <8A81> -<68B9> <68B9> <9E8E> -<68BA> <68BA> <9E92> -<68BC> <68BC> <938E> -<68C4> <68C4> <8AFC> -<68C6> <68C6> <9EB0> -<68C8> <68C8> -<68C9> <68C9> <96C7> -<68CA> <68CA> <9E97> -<68CB> <68CB> <8AFB> -<68CD> <68CD> <9E9E> -<68CF> <68CF> -<68D2> <68D2> <965F> -<68D4> <68D4> <9E9F> -<68D5> <68D5> <9EA1> -<68D7> <68D7> <9EA5> -<68D8> <68D8> <9E99> -<68DA> <68DA> <9249> -<68DF> <68DF> <938F> -<68E0> <68E0> <9EA9> -<68E1> <68E1> <9E9C> -<68E3> <68E3> <9EA6> -<68E7> <68E7> <9EA0> -<68EE> <68EE> <9058> -<68EF> <68EF> <9EAA> -<68F2> <68F2> <90B1> -<68F9> <68F9> <9EA8> -<68FA> <68FA> <8ABB> -<6900> <6900> <986F> -<6901> <6901> <9E96> -<6904> <6904> <9EA4> -<6905> <6905> <88D6> -<6908> <6908> <9E98> -<690B> <690B> <96B8> -<690C> <690C> <9E9D> -<690D> <690D> <9041> -<690E> <690E> <92C5> -<690F> <690F> <9E93> -<6912> <6912> <9EA3> -<6919> <6919> <909A> -<691A> <691A> <9EAD> -<691B> <691B> <8A91> -<691C> <691C> <8C9F> -<6921> <6921> <9EAF> -<6922> <6922> <9E9A> -<6923> <6923> <9EAE> -endbfrange - -100 beginbfrange -<6925> <6925> <9EA7> -<6926> <6926> <9E9B> -<6928> <6928> <9EAB> -<692A> <692A> <9EAC> -<6930> <6930> <9EBD> -<6934> <6934> <93CC> -<6936> <6936> <9EA2> -<6939> <6939> <9EB9> -<693D> <693D> <9EBB> -<693F> <693F> <92D6> -<694A> <694A> <976B> -<6953> <6953> <9596> -<6954> <6954> <9EB6> -<6955> <6955> <91C8> -<6959> <6959> <9EBC> -<695A> <695A> <915E> -<695C> <695C> <9EB3> -<695D> <695D> <9EC0> -<695E> <695E> <9EBF> -<6960> <6960> <93ED> -<6961> <6961> <9EBE> -<6962> <6962> <93E8> -<6968> <6968> -<696A> <696A> <9EC2> -<696B> <696B> <9EB5> -<696D> <696D> <8BC6> -<696E> <696E> <9EB8> -<696F> <696F> <8F7C> -<6973> <6973> <9480> -<6974> <6974> <9EBA> -<6975> <6975> <8BC9> -<6977> <6977> <9EB2> -<6978> <6978> <9EB4> -<6979> <6979> <9EB1> -<697C> <697C> <984F> -<697D> <697D> <8A79> -<697E> <697E> <9EB7> -<6981> <6981> <9EC1> -<6982> <6982> <8A54> -<698A> <698A> <8DE5> -<698E> <698E> <897C> -<6991> <6991> <9ED2> -<6994> <6994> <9850> -<6995> <6995> <9ED5> -<6998> <6998> -<699B> <699B> <9059> -<699C> <699C> <9ED4> -<69A0> <69A0> <9ED3> -<69A7> <69A7> <9ED0> -<69AE> <69AE> <9EC4> -<69B1> <69B1> <9EE1> -<69B2> <69B2> <9EC3> -<69B4> <69B4> <9ED6> -<69BB> <69BB> <9ECE> -<69BE> <69BE> <9EC9> -<69BF> <69BF> <9EC6> -<69C1> <69C1> <9EC7> -<69C3> <69C3> <9ECF> -<69C7> <69C7> -<69CA> <69CA> <9ECC> -<69CB> <69CB> <8D5C> -<69CC> <69CC> <92C6> -<69CD> <69CD> <9184> -<69CE> <69CE> <9ECA> -<69D0> <69D0> <9EC5> -<69D3> <69D3> <9EC8> -<69D8> <69D8> <976C> -<69D9> <69D9> <968A> -<69DD> <69DD> <9ECD> -<69DE> <69DE> <9ED7> -<69E2> <69E2> -<69E7> <69E7> <9EDF> -<69E8> <69E8> <9ED8> -<69EB> <69EB> <9EE5> -<69ED> <69ED> <9EE3> -<69F2> <69F2> <9EDE> -<69F9> <69F9> <9EDD> -<69FB> <69FB> <92CE> -<69FD> <69FD> <9185> -<69FF> <69FF> <9EDB> -<6A02> <6A02> <9ED9> -<6A05> <6A05> <9EE0> -<6A0A> <6A0A> <9EE6> -<6A0B> <6A0B> <94F3> -<6A0C> <6A0C> <9EEC> -<6A12> <6A12> <9EE7> -<6A13> <6A13> <9EEA> -<6A14> <6A14> <9EE4> -<6A17> <6A17> <9294> -<6A19> <6A19> <9557> -<6A1B> <6A1B> <9EDA> -<6A1E> <6A1E> <9EE2> -<6A1F> <6A1F> <8FBE> -<6A21> <6A21> <96CD> -<6A22> <6A22> <9EF6> -<6A23> <6A23> <9EE9> -<6A29> <6A29> <8CA0> -<6A2A> <6A2A> <89A1> -<6A2B> <6A2B> <8A7E> -<6A2E> <6A2E> <9ED1> -endbfrange - -100 beginbfrange -<6A30> <6A30> -<6A35> <6A35> <8FBF> -<6A36> <6A36> <9EEE> -<6A38> <6A38> <9EF5> -<6A39> <6A39> <8EF7> -<6A3A> <6A3A> <8A92> -<6A3D> <6A3D> <924D> -<6A44> <6A44> <9EEB> -<6A46> <6A46> -<6A47> <6A47> <9EF0> -<6A48> <6A48> <9EF4> -<6A4B> <6A4B> <8BB4> -<6A58> <6A58> <8B6B> -<6A59> <6A59> <9EF2> -<6A5F> <6A5F> <8B40> -<6A61> <6A61> <93C9> -<6A62> <6A62> <9EF1> -<6A66> <6A66> <9EF3> -<6A6B> <6A6B> -<6A72> <6A72> <9EED> -<6A73> <6A73> -<6A78> <6A78> <9EEF> -<6A7E> <6A7E> -<6A7F> <6A7F> <8A80> -<6A80> <6A80> <9268> -<6A84> <6A84> <9EFA> -<6A8D> <6A8D> <9EF8> -<6A8E> <6A8E> <8CE7> -<6A90> <6A90> <9EF7> -<6A97> <6A97> <9F40> -<6A9C> <6A9C> <9E77> -<6AA0> <6AA0> <9EF9> -<6AA2> <6AA3> <9EFB> -<6AAA> <6AAA> <9F4B> -<6AAC> <6AAC> <9F47> -<6AAE> <6AAE> <9E8D> -<6AB3> <6AB3> <9F46> -<6AB8> <6AB8> <9F45> -<6ABB> <6ABB> <9F42> -<6AC1> <6AC1> <9EE8> -<6AC2> <6AC2> <9F44> -<6AC3> <6AC3> <9F43> -<6AD1> <6AD1> <9F49> -<6AD3> <6AD3> <9845> -<6ADA> <6ADA> <9F4C> -<6ADB> <6ADB> <8BF9> -<6ADE> <6ADE> <9F48> -<6ADF> <6ADF> <9F4A> -<6AE2> <6AE2> -<6AE4> <6AE4> -<6AE8> <6AE8> <94A5> -<6AEA> <6AEA> <9F4D> -<6AFA> <6AFA> <9F51> -<6AFB> <6AFB> <9F4E> -<6B04> <6B04> <9793> -<6B05> <6B05> <9F4F> -<6B0A> <6B0A> <9EDC> -<6B12> <6B12> <9F52> -<6B16> <6B16> <9F53> -<6B1D> <6B1D> <8954> -<6B1F> <6B1F> <9F55> -<6B20> <6B20> <8C87> -<6B21> <6B21> <8E9F> -<6B23> <6B23> <8BD3> -<6B27> <6B27> <89A2> -<6B32> <6B32> <977E> -<6B37> <6B37> <9F57> -<6B38> <6B38> <9F56> -<6B39> <6B39> <9F59> -<6B3A> <6B3A> <8B5C> -<6B3D> <6B3D> <8BD4> -<6B3E> <6B3E> <8ABC> -<6B43> <6B43> <9F5C> -<6B47> <6B47> <9F5B> -<6B49> <6B49> <9F5D> -<6B4C> <6B4C> <89CC> -<6B4E> <6B4E> <9256> -<6B50> <6B50> <9F5E> -<6B53> <6B53> <8ABD> -<6B54> <6B54> <9F60> -<6B59> <6B59> <9F5F> -<6B5B> <6B5B> <9F61> -<6B5F> <6B5F> <9F62> -<6B61> <6B61> <9F63> -<6B62> <6B62> <8E7E> -<6B63> <6B63> <90B3> -<6B64> <6B64> <8D9F> -<6B66> <6B66> <9590> -<6B69> <6B69> <95E0> -<6B6A> <6B6A> <9863> -<6B6F> <6B6F> <8E95> -<6B73> <6B73> <8DCE> -<6B74> <6B74> <97F0> -<6B78> <6B79> <9F64> -<6B7B> <6B7B> <8E80> -<6B7F> <6B80> <9F66> -<6B83> <6B83> <9F69> -<6B84> <6B84> <9F68> -<6B86> <6B86> <9677> -<6B89> <6B89> <8F7D> -endbfrange - -100 beginbfrange -<6B8A> <6B8A> <8EEA> -<6B8B> <6B8B> <8E63> -<6B8D> <6B8D> <9F6A> -<6B95> <6B95> <9F6C> -<6B96> <6B96> <9042> -<6B98> <6B98> <9F6B> -<6B9E> <6B9E> <9F6D> -<6BA4> <6BA4> <9F6E> -<6BAA> <6BAB> <9F6F> -<6BAF> <6BAF> <9F71> -<6BB1> <6BB1> <9F73> -<6BB2> <6BB2> <9F72> -<6BB3> <6BB3> <9F74> -<6BB4> <6BB4> <89A3> -<6BB5> <6BB5> <9269> -<6BB7> <6BB7> <9F75> -<6BBA> <6BBA> <8E45> -<6BBB> <6BBB> <8A6B> -<6BBC> <6BBC> <9F76> -<6BBF> <6BBF> <9361> -<6BC0> <6BC0> <9ACA> -<6BC5> <6BC5> <8B42> -<6BC6> <6BC6> <9F77> -<6BCB> <6BCB> <9F78> -<6BCD> <6BCD> <95EA> -<6BCE> <6BCE> <9688> -<6BD2> <6BD2> <93C5> -<6BD3> <6BD3> <9F79> -<6BD4> <6BD4> <94E4> -<6BD6> <6BD6> -<6BD8> <6BD8> <94F9> -<6BDB> <6BDB> <96D1> -<6BDF> <6BDF> <9F7A> -<6BEB> <6BEB> <9F7C> -<6BEC> <6BEC> <9F7B> -<6BEF> <6BEF> <9F7E> -<6BF3> <6BF3> <9F7D> -<6C08> <6C08> <9F81> -<6C0F> <6C0F> <8E81> -<6C11> <6C11> <96AF> -<6C13> <6C14> <9F82> -<6C17> <6C17> <8B43> -<6C1B> <6C1B> <9F84> -<6C23> <6C23> <9F86> -<6C24> <6C24> <9F85> -<6C34> <6C34> <9085> -<6C37> <6C37> <9558> -<6C38> <6C38> <8969> -<6C3E> <6C3E> <94C3> -<6C3F> <6C3F> -<6C40> <6C40> <92F3> -<6C41> <6C41> <8F60> -<6C42> <6C42> <8B81> -<6C4E> <6C4E> <94C4> -<6C50> <6C50> <8EAC> -<6C55> <6C55> <9F88> -<6C57> <6C57> <8ABE> -<6C5A> <6C5A> <8998> -<6C5C> <6C5C> -<6C5D> <6C5D> <93F0> -<6C5E> <6C5E> <9F87> -<6C5F> <6C5F> <8D5D> -<6C60> <6C60> <9272> -<6C62> <6C62> <9F89> -<6C68> <6C68> <9F91> -<6C6A> <6C6A> <9F8A> -<6C6F> <6C6F> -<6C70> <6C70> <91BF> -<6C72> <6C72> <8B82> -<6C73> <6C73> <9F92> -<6C7A> <6C7A> <8C88> -<6C7D> <6C7D> <8B44> -<6C7E> <6C7E> <9F90> -<6C81> <6C81> <9F8E> -<6C82> <6C82> <9F8B> -<6C83> <6C83> <9780> -<6C86> <6C86> -<6C88> <6C88> <92BE> -<6C8C> <6C8C> <93D7> -<6C8D> <6C8D> <9F8C> -<6C90> <6C90> <9F94> -<6C92> <6C92> <9F93> -<6C93> <6C93> <8C42> -<6C96> <6C96> <89AB> -<6C99> <6C99> <8DB9> -<6C9A> <6C9A> <9F8D> -<6C9B> <6C9B> <9F8F> -<6CA1> <6CA1> <9676> -<6CA2> <6CA2> <91F2> -<6CAB> <6CAB> <9697> -<6CAE> <6CAE> <9F9C> -<6CB1> <6CB1> <9F9D> -<6CB3> <6CB3> <89CD> -<6CB8> <6CB8> <95A6> -<6CB9> <6CB9> <96FB> -<6CBA> <6CBA> <9F9F> -<6CBB> <6CBB> <8EA1> -<6CBC> <6CBC> <8FC0> -<6CBD> <6CBD> <9F98> -<6CBE> <6CBE> <9F9E> -endbfrange - -100 beginbfrange -<6CBF> <6CBF> <8988> -<6CC1> <6CC1> <8BB5> -<6CC4> <6CC4> <9F95> -<6CC5> <6CC5> <9F9A> -<6CC9> <6CC9> <90F2> -<6CCA> <6CCA> <9491> -<6CCC> <6CCC> <94E5> -<6CD3> <6CD3> <9F97> -<6CD5> <6CD5> <9640> -<6CD7> <6CD7> <9F99> -<6CD9> <6CD9> <9FA2> -<6CDA> <6CDA> -<6CDB> <6CDB> <9FA0> -<6CDD> <6CDD> <9F9B> -<6CE1> <6CE1> <9641> -<6CE2> <6CE2> <9467> -<6CE3> <6CE3> <8B83> -<6CE5> <6CE5> <9344> -<6CE8> <6CE8> <928D> -<6CEA> <6CEA> <9FA3> -<6CEF> <6CEF> <9FA1> -<6CF0> <6CF0> <91D7> -<6CF1> <6CF1> <9F96> -<6CF3> <6CF3> <896A> -<6D04> <6D04> -<6D0B> <6D0B> <976D> -<6D0C> <6D0C> <9FAE> -<6D12> <6D12> <9FAD> -<6D17> <6D17> <90F4> -<6D19> <6D19> <9FAA> -<6D1B> <6D1B> <978C> -<6D1E> <6D1E> <93B4> -<6D1F> <6D1F> <9FA4> -<6D25> <6D25> <92C3> -<6D29> <6D29> <896B> -<6D2A> <6D2A> <8D5E> -<6D2B> <6D2B> <9FA7> -<6D32> <6D32> <8F46> -<6D33> <6D33> <9FAC> -<6D35> <6D35> <9FAB> -<6D36> <6D36> <9FA6> -<6D38> <6D38> <9FA9> -<6D3B> <6D3B> <8A88> -<6D3D> <6D3D> <9FA8> -<6D3E> <6D3E> <9468> -<6D41> <6D41> <97AC> -<6D44> <6D44> <8FF2> -<6D45> <6D45> <90F3> -<6D59> <6D59> <9FB4> -<6D5A> <6D5A> <9FB2> -<6D5C> <6D5C> <956C> -<6D63> <6D63> <9FAF> -<6D64> <6D64> <9FB1> -<6D66> <6D66> <8959> -<6D69> <6D69> <8D5F> -<6D6A> <6D6A> <9851> -<6D6C> <6D6C> <8A5C> -<6D6E> <6D6E> <9582> -<6D6F> <6D6F> -<6D74> <6D74> <9781> -<6D77> <6D77> <8A43> -<6D78> <6D78> <905A> -<6D79> <6D79> <9FB3> -<6D85> <6D85> <9FB8> -<6D87> <6D87> -<6D88> <6D88> <8FC1> -<6D8C> <6D8C> <974F> -<6D8E> <6D8E> <9FB5> -<6D93> <6D93> <9FB0> -<6D95> <6D95> <9FB6> -<6D96> <6D96> -<6D99> <6D99> <97DC> -<6D9B> <6D9B> <9393> -<6D9C> <6D9C> <93C0> -<6DAC> <6DAC> -<6DAF> <6DAF> <8A55> -<6DB2> <6DB2> <8974> -<6DB5> <6DB5> <9FBC> -<6DB8> <6DB8> <9FBF> -<6DBC> <6DBC> <97C1> -<6DC0> <6DC0> <9784> -<6DC5> <6DC5> <9FC6> -<6DC6> <6DC6> <9FC0> -<6DC7> <6DC7> <9FBD> -<6DCB> <6DCB> <97D2> -<6DCC> <6DCC> <9FC3> -<6DCF> <6DCF> -<6DD1> <6DD1> <8F69> -<6DD2> <6DD2> <9FC5> -<6DD5> <6DD5> <9FCA> -<6DD8> <6DD8> <9391> -<6DD9> <6DD9> <9FC8> -<6DDE> <6DDE> <9FC2> -<6DE1> <6DE1> <9257> -<6DE4> <6DE4> <9FC9> -<6DE6> <6DE6> <9FBE> -<6DE8> <6DE8> <9FC4> -<6DEA> <6DEA> <9FCB> -<6DEB> <6DEB> <88FA> -<6DEC> <6DEC> <9FC1> -endbfrange - -100 beginbfrange -<6DEE> <6DEE> <9FCC> -<6DF1> <6DF1> <905B> -<6DF2> <6DF2> -<6DF3> <6DF3> <8F7E> -<6DF5> <6DF5> <95A3> -<6DF7> <6DF7> <8DAC> -<6DF8> <6DF8> -<6DF9> <6DF9> <9FB9> -<6DFA> <6DFA> <9FC7> -<6DFB> <6DFB> <9359> -<6DFC> <6DFC> -<6E05> <6E05> <90B4> -<6E07> <6E07> <8A89> -<6E08> <6E08> <8DCF> -<6E09> <6E09> <8FC2> -<6E0A> <6E0A> <9FBB> -<6E0B> <6E0B> <8F61> -<6E13> <6E13> <8C6B> -<6E15> <6E15> <9FBA> -<6E19> <6E19> <9FD0> -<6E1A> <6E1A> <8F8D> -<6E1B> <6E1B> <8CB8> -<6E1D> <6E1D> <9FDF> -<6E1F> <6E1F> <9FD9> -<6E20> <6E20> <8B94> -<6E21> <6E21> <936E> -<6E23> <6E23> <9FD4> -<6E24> <6E24> <9FDD> -<6E25> <6E25> <88AD> -<6E26> <6E26> <8951> -<6E27> <6E27> -<6E29> <6E29> <89B7> -<6E2B> <6E2B> <9FD6> -<6E2C> <6E2C> <91AA> -<6E2D> <6E2D> <9FCD> -<6E2E> <6E2E> <9FCF> -<6E2F> <6E2F> <8D60> -<6E38> <6E38> <9FE0> -<6E39> <6E39> -<6E3A> <6E3A> <9FDB> -<6E3C> <6E3C> -<6E3E> <6E3E> <9FD3> -<6E43> <6E43> <9FDA> -<6E4A> <6E4A> <96A9> -<6E4D> <6E4D> <9FD8> -<6E4E> <6E4E> <9FDC> -<6E56> <6E56> <8CCE> -<6E58> <6E58> <8FC3> -<6E5B> <6E5B> <9258> -<6E5C> <6E5C> -<6E5F> <6E5F> <9FD2> -<6E67> <6E67> <974E> -<6E6B> <6E6B> <9FD5> -<6E6E> <6E6E> <9FCE> -<6E6F> <6E6F> <9392> -<6E72> <6E72> <9FD1> -<6E76> <6E76> <9FD7> -<6E7E> <6E7E> <9870> -<6E7F> <6E7F> <8EBC> -<6E80> <6E80> <969E> -<6E82> <6E82> <9FE1> -<6E8C> <6E8C> <94AC> -<6E8F> <6E8F> <9FED> -<6E90> <6E90> <8CB9> -<6E96> <6E96> <8F80> -<6E98> <6E98> <9FE3> -<6E9C> <6E9C> <97AD> -<6E9D> <6E9D> <8D61> -<6E9F> <6E9F> <9FF0> -<6EA2> <6EA2> <88EC> -<6EA5> <6EA5> <9FEE> -<6EAA> <6EAA> <9FE2> -<6EAF> <6EAF> <9FE8> -<6EB2> <6EB2> <9FEA> -<6EB6> <6EB6> <976E> -<6EB7> <6EB7> <9FE5> -<6EBA> <6EBA> <934D> -<6EBD> <6EBD> <9FE7> -<6EBF> <6EBF> -<6EC2> <6EC2> <9FEF> -<6EC4> <6EC4> <9FE9> -<6EC5> <6EC5> <96C5> -<6EC9> <6EC9> <9FE4> -<6ECB> <6ECB> <8EA0> -<6ECC> <6ECC> <9FFC> -<6ED1> <6ED1> <8A8A> -<6ED3> <6ED3> <9FE6> -<6ED4> <6ED5> <9FEB> -<6EDD> <6EDD> <91EA> -<6EDE> <6EDE> <91D8> -<6EEC> <6EEC> <9FF4> -<6EEF> <6EEF> <9FFA> -<6EF2> <6EF2> <9FF8> -<6EF4> <6EF4> <9348> -<6EF7> <6EF7> -<6EF8> <6EF8> <9FF5> -<6EFE> <6EFE> <9FF6> -<6EFF> <6EFF> <9FDE> -<6F01> <6F01> <8B99> -<6F02> <6F02> <9559> -endbfrange - -100 beginbfrange -<6F06> <6F06> <8EBD> -<6F09> <6F09> <8D97> -<6F0F> <6F0F> <9852> -<6F11> <6F11> <9FF2> -<6F13> <6F13> -<6F14> <6F14> <8989> -<6F15> <6F15> <9186> -<6F20> <6F20> <9499> -<6F22> <6F22> <8ABF> -<6F23> <6F23> <97F8> -<6F2B> <6F2B> <969F> -<6F2C> <6F2C> <92D0> -<6F31> <6F31> <9FF9> -<6F32> <6F32> <9FFB> -<6F38> <6F38> <9151> -<6F3E> <6F3E> -<6F3F> <6F3F> <9FF7> -<6F41> <6F41> <9FF1> -<6F45> <6F45> <8AC1> -<6F51> <6F51> <94AC> -<6F54> <6F54> <8C89> -<6F58> <6F58> -<6F5B> <6F5B> -<6F5C> <6F5C> <90F6> -<6F5F> <6F5F> <8A83> -<6F64> <6F64> <8F81> -<6F66> <6F66> -<6F6D> <6F6D> -<6F6E> <6F6E> <92AA> -<6F6F> <6F6F> -<6F70> <6F70> <92D7> -<6F74> <6F74> -<6F78> <6F78> -<6F7A> <6F7A> -<6F7C> <6F7C> -<6F80> <6F80> -<6F81> <6F81> -<6F82> <6F82> -<6F84> <6F84> <909F> -<6F86> <6F86> -<6F88> <6F88> -<6F8E> <6F8E> -<6F91> <6F91> -<6F97> <6F97> <8AC0> -<6FA1> <6FA1> -<6FA3> <6FA3> -<6FA4> <6FA4> -<6FAA> <6FAA> -<6FB1> <6FB1> <9362> -<6FB3> <6FB3> -<6FB5> <6FB5> -<6FB9> <6FB9> -<6FC0> <6FC0> <8C83> -<6FC1> <6FC1> <91F7> -<6FC2> <6FC2> -<6FC3> <6FC3> <945A> -<6FC6> <6FC6> -<6FD4> <6FD4> -<6FD5> <6FD5> -<6FD8> <6FD8> -<6FDB> <6FDB> -<6FDF> <6FDF> -<6FE0> <6FE0> <8D8A> -<6FE1> <6FE1> <9447> -<6FE4> <6FE4> <9FB7> -<6FEB> <6FEB> <9794> -<6FEC> <6FEC> -<6FEE> <6FEE> -<6FEF> <6FEF> <91F3> -<6FF1> <6FF1> -<6FF3> <6FF3> -<6FF5> <6FF5> -<6FF6> <6FF6> -<6FFA> <6FFA> -<6FFE> <6FFE> -<7001> <7001> -<7005> <7005> -<7006> <7006> <93C0> -<7007> <7007> -<7009> <7009> -<700B> <700B> -<700F> <700F> -<7011> <7011> -<7015> <7015> <956D> -<7018> <7018> -<701A> <701A> -<701B> <701B> -<701D> <701D> -<701E> <701E> <93D2> -<701F> <701F> -<7026> <7026> <9295> -<7027> <7027> <91EB> -<7028> <7028> -<702C> <702C> <90A3> -<7030> <7030> -<7032> <7032> -<703E> <703E> -<704C> <704C> <9FF3> -<7051> <7051> -<7058> <7058> <93E5> -endbfrange - -100 beginbfrange -<7063> <7063> -<706B> <706B> <89CE> -<706F> <706F> <9394> -<7070> <7070> <8A44> -<7078> <7078> <8B84> -<707C> <707C> <8EDC> -<707D> <707D> <8DD0> -<7085> <7085> -<7089> <7089> <9846> -<708A> <708A> <9086> -<708E> <708E> <898A> -<7092> <7092> -<7099> <7099> -<70AB> <70AB> -<70AC> <70AC> -<70AD> <70AD> <9259> -<70AE> <70AE> -<70AF> <70AF> -<70B3> <70B3> -<70B8> <70B8> -<70B9> <70B9> <935F> -<70BA> <70BA> <88D7> -<70BB> <70BB> -<70C8> <70C8> <97F3> -<70CB> <70CB> -<70CF> <70CF> <8947> -<70D9> <70D9> -<70DD> <70DD> -<70DF> <70DF> -<70F1> <70F1> -<70F9> <70F9> <9642> -<70FD> <70FD> -<7104> <7104> -<7109> <7109> -<710F> <710F> -<7114> <7114> <898B> -<7119> <7119> -<711A> <711A> <95B0> -<711C> <711C> -<7121> <7121> <96B3> -<7126> <7126> <8FC5> -<7130> <7130> <898B> -<7136> <7136> <9152> -<713C> <713C> <8FC4> -<7146> <7147> -<7149> <7149> <97F9> -<714C> <714C> -<714E> <714E> <90F7> -<7155> <7155> -<7156> <7156> -<7159> <7159> <898C> -<715C> <715C> -<7162> <7162> -<7164> <7164> <9481> -<7165> <7165> -<7166> <7166> -<7167> <7167> <8FC6> -<7169> <7169> <94CF> -<716C> <716C> -<716E> <716E> <8ECF> -<717D> <717D> <90F8> -<7184> <7184> -<7188> <7188> -<718A> <718A> <8C46> -<718F> <718F> -<7194> <7194> <976F> -<7195> <7195> -<7199> <7199> -<719F> <719F> <8F6E> -<71A8> <71A8> -<71AC> <71AC> -<71B1> <71B1> <944D> -<71B9> <71B9> -<71BE> <71BE> -<71C1> <71C1> -<71C3> <71C3> <9452> -<71C8> <71C8> <9395> -<71C9> <71C9> -<71CE> <71CE> -<71D0> <71D0> <97D3> -<71D2> <71D2> -<71D4> <71D4> -<71D5> <71D5> <898D> -<71D7> <71D7> -<71DF> <71DF> <9A7A> -<71E0> <71E0> -<71E5> <71E5> <9187> -<71E6> <71E6> <8E57> -<71E7> <71E7> -<71EC> <71EC> -<71ED> <71ED> <9043> -<71EE> <71EE> <99D7> -<71F5> <71F5> -<71F9> <71F9> -<71FB> <71FB> -<71FC> <71FC> -<71FE> <71FE> -<71FF> <71FF> -<7206> <7206> <949A> -<720D> <720D> -endbfrange - -100 beginbfrange -<7210> <7210> -<721B> <721B> -<7228> <7228> -<722A> <722A> <92DC> -<722C> <722C> -<722D> <722D> -<7230> <7230> -<7232> <7232> -<7235> <7235> <8EDD> -<7236> <7236> <9583> -<723A> <723A> <96EA> -<723B> <723C> -<723D> <723D> <9175> -<723E> <723E> <8EA2> -<723F> <7240> -<7246> <7246> -<7247> <7247> <95D0> -<7248> <7248> <94C5> -<724B> <724B> -<724C> <724C> <9476> -<7252> <7252> <92AB> -<7258> <7258> -<7259> <7259> <89E5> -<725B> <725B> <8B8D> -<725D> <725D> <96C4> -<725F> <725F> <96B4> -<7261> <7261> <89B2> -<7262> <7262> <9853> -<7267> <7267> <9671> -<7269> <7269> <95A8> -<7272> <7272> <90B5> -<7274> <7274> -<7279> <7279> <93C1> -<727D> <727D> <8CA1> -<727E> <727E> -<7280> <7280> <8DD2> -<7281> <7281> -<7282> <7282> -<7287> <7287> -<7292> <7292> -<7296> <7296> -<72A0> <72A0> <8B5D> -<72A2> <72A2> -<72A7> <72A7> -<72AC> <72AC> <8CA2> -<72AF> <72AF> <94C6> -<72B1> <72B1> -<72B2> <72B2> -<72B6> <72B6> <8FF3> -<72B9> <72B9> -<72BE> <72BE> -<72C2> <72C2> <8BB6> -<72C3> <72C3> -<72C4> <72C4> -<72C6> <72C6> -<72CE> <72CE> -<72D0> <72D0> <8CCF> -<72D2> <72D2> -<72D7> <72D7> <8BE7> -<72D9> <72D9> <915F> -<72DB> <72DB> <8D9D> -<72E0> <72E1> -<72E2> <72E2> -<72E9> <72E9> <8EEB> -<72EC> <72EC> <93C6> -<72ED> <72ED> <8BB7> -<72F7> <72F7> -<72F8> <72F8> <924B> -<72F9> <72F9> -<72FC> <72FC> <9854> -<72FD> <72FD> <9482> -<730A> <730A> -<7316> <7316> -<7317> <7317> -<731B> <731B> <96D2> -<731C> <731C> -<731D> <731D> -<731F> <731F> <97C2> -<7324> <7324> -<7325> <7325> -<7329> <7329> -<732A> <732A> <9296> -<732B> <732B> <944C> -<732E> <732E> <8CA3> -<732F> <732F> -<7334> <7334> -<7336> <7337> <9750> -<733E> <733E> -<733F> <733F> <898E> -<7344> <7344> <8D96> -<7345> <7345> <8E82> -<734E> <734F> -<7357> <7357> -<7363> <7363> <8F62> -<7368> <7368> -<736A> <736A> -<7370> <7370> -<7372> <7372> <8A6C> -<7375> <7375> -<7377> <7377> -endbfrange - -100 beginbfrange -<7378> <7378> -<737A> <737A> -<737B> <737B> -<7384> <7384> <8CBA> -<7387> <7387> <97A6> -<7389> <7389> <8BCA> -<738B> <738B> <89A4> -<7396> <7396> <8BE8> -<73A9> <73A9> <8ADF> -<73B2> <73B2> <97E6> -<73B3> <73B3> -<73BB> <73BB> -<73BD> <73BD> -<73C0> <73C0> -<73C2> <73C2> <89CF> -<73C8> <73C8> -<73C9> <73C9> -<73CA> <73CA> <8E58> -<73CD> <73CD> <92BF> -<73CE> <73CE> -<73D2> <73D2> -<73D6> <73D6> -<73DE> <73DE> -<73E0> <73E0> <8EEC> -<73E3> <73E3> -<73E5> <73E5> -<73EA> <73EA> <8C5D> -<73ED> <73ED> <94C7> -<73EE> <73EE> -<73F1> <73F1> -<73F5> <73F5> -<73F8> <73F8> -<73FE> <73FE> <8CBB> -<7403> <7403> <8B85> -<7405> <7405> -<7406> <7406> <979D> -<7407> <7407> -<7409> <7409> <97AE> -<7422> <7422> <91F4> -<7425> <7425> -<7426> <7426> -<7429> <7429> -<742A> <742A> -<742E> <742E> -<7432> <7432> -<7433> <7433> <97D4> -<7434> <7434> <8BD5> -<7435> <7435> <94FA> -<7436> <7436> <9469> -<743A> <743A> -<743F> <743F> -<7441> <7441> -<7455> <7455> -<7459> <7459> -<745A> <745A> <8CE8> -<745B> <745B> <896C> -<745C> <745C> -<745E> <745E> <9090> -<745F> <745F> -<7460> <7460> <97DA> -<7462> <7462> -<7463> <7463> -<7464> <7464> -<7469> <7469> -<746A> <746A> -<746F> <746F> -<7470> <7470> -<7473> <7473> <8DBA> -<7476> <7476> -<747E> <747E> -<7483> <7483> <979E> -<7489> <7489> -<748B> <748B> -<749E> <749E> -<749F> <749F> -<74A2> <74A2> -<74A7> <74A7> -<74B0> <74B0> <8AC2> -<74BD> <74BD> <8EA3> -<74CA> <74CA> -<74CF> <74CF> -<74D4> <74D4> -<74DC> <74DC> <895A> -<74E0> <74E0> -<74E2> <74E2> <955A> -<74E3> <74E3> -<74E6> <74E6> <8AA2> -<74E7> <74E7> -<74E9> <74E9> -<74EE> <74EE> -<74F0> <74F1> -<74F2> <74F2> -<74F6> <74F6> <9572> -<74F7> <74F7> -<74F8> <74F8> -<7501> <7501> -<7503> <7503> -<7504> <7504> -<7505> <7505> -<750C> <750C> -endbfrange - -100 beginbfrange -<750D> <750D> -<750E> <750E> -<7511> <7511> <8D99> -<7513> <7513> -<7515> <7515> -<7518> <7518> <8AC3> -<751A> <751A> <9072> -<751C> <751C> <935B> -<751E> <751E> -<751F> <751F> <90B6> -<7523> <7523> <8E59> -<7525> <7525> <8999> -<7526> <7526> -<7528> <7528> <9770> -<752B> <752B> <95E1> -<752C> <752C> -<752F> <752F> -<7530> <7530> <9363> -<7531> <7531> <9752> -<7532> <7532> <8D62> -<7533> <7533> <905C> -<7537> <7537> <926A> -<7538> <7538> <99B2> -<753A> <753A> <92AC> -<753B> <753B> <89E6> -<753C> <753C> -<7544> <7544> -<7546> <7546> -<7549> <7549> -<754A> <754A> -<754B> <754B> <9DC0> -<754C> <754C> <8A45> -<754D> <754D> -<754F> <754F> <88D8> -<7551> <7551> <94A8> -<7554> <7554> <94C8> -<7559> <7559> <97AF> -<755A> <755A> -<755B> <755B> -<755C> <755C> <927B> -<755D> <755D> <90A4> -<7560> <7560> <94A9> -<7562> <7562> <954C> -<7564> <7564> -<7565> <7565> <97AA> -<7566> <7566> <8C6C> -<7567> <7567> -<7569> <7569> -<756A> <756A> <94D4> -<756B> <756B> -<756D> <756D> -<756F> <756F> -<7570> <7570> <88D9> -<7573> <7573> <8FF4> -<7574> <7574> -<7576> <7576> -<7577> <7577> <93EB> -<7578> <7578> -<757F> <757F> <8B45> -<7582> <7582> -<7586> <7587> -<7589> <7589> -<758A> <758A> -<758B> <758B> <9544> -<758E> <758E> <9161> -<758F> <758F> <9160> -<7591> <7591> <8B5E> -<7594> <7594> -<759A> <759A> -<759D> <759D> -<75A3> <75A3> -<75A5> <75A5> -<75AB> <75AB> <8975> -<75B1> <75B1> -<75B2> <75B2> <94E6> -<75B3> <75B3> -<75B5> <75B5> -<75B8> <75B8> -<75B9> <75B9> <905D> -<75BC> <75BC> -<75BD> <75BD> -<75BE> <75BE> <8EBE> -<75C2> <75C2> -<75C3> <75C3> -<75C5> <75C5> <9561> -<75C7> <75C7> <8FC7> -<75CA> <75CA> -<75CD> <75CD> -<75D2> <75D2> -<75D4> <75D4> <8EA4> -<75D5> <75D5> <8DAD> -<75D8> <75D8> <9397> -<75D9> <75D9> -<75DB> <75DB> <92C9> -<75DE> <75DE> -<75E2> <75E2> <979F> -<75E3> <75E3> -<75E9> <75E9> <9189> -<75F0> <75F0> -<75F2> <75F3> -endbfrange - -100 beginbfrange -<75F4> <75F4> <9273> -<75FA> <75FA> -<75FC> <75FC> -<75FE> <75FF> -<7601> <7601> -<7609> <7609> -<760B> <760B> -<760D> <760D> -<761F> <761F> -<7620> <7622> -<7624> <7624> -<7626> <7626> <9189> -<7627> <7627> -<7630> <7630> -<7634> <7634> -<763B> <763B> -<7642> <7642> <97C3> -<7646> <7646> -<7647> <7648> -<764C> <764C> <8AE0> -<7652> <7652> <96FC> -<7656> <7656> <95C8> -<7658> <7658> -<765C> <765C> -<7661> <7662> -<7667> <7667> -<7668> <766A> -<766C> <766C> -<7670> <7670> -<7672> <7672> -<7676> <7676> -<7678> <7678> -<767A> <767A> <94AD> -<767B> <767B> <936F> -<767C> <767C> -<767D> <767D> <9492> -<767E> <767E> <9553> -<7680> <7680> -<7682> <7682> -<7683> <7683> -<7684> <7684> <9349> -<7686> <7686> <8A46> -<7687> <7687> <8D63> -<7688> <7688> -<768B> <768B> -<768E> <768E> -<7690> <7690> <8E48> -<7693> <7693> -<7696> <7696> -<7699> <769A> -<769B> <769B> -<769C> <769C> -<769E> <769E> -<76A6> <76A6> -<76AE> <76AE> <94E7> -<76B0> <76B0> -<76B4> <76B4> -<76B7> <76B7> -<76B8> <76BA> -<76BF> <76BF> <8E4D> -<76C2> <76C2> -<76C3> <76C3> <9475> -<76C6> <76C6> <967E> -<76C8> <76C8> <896D> -<76CA> <76CA> <8976> -<76CD> <76CD> -<76D2> <76D2> -<76D6> <76D6> -<76D7> <76D7> <9390> -<76DB> <76DB> <90B7> -<76DC> <76DC> <9F58> -<76DE> <76DE> -<76DF> <76DF> <96BF> -<76E1> <76E1> -<76E3> <76E3> <8AC4> -<76E4> <76E4> <94D5> -<76E5> <76E5> -<76E7> <76E7> -<76EA> <76EA> -<76EE> <76EE> <96DA> -<76F2> <76F2> <96D3> -<76F4> <76F4> <92BC> -<76F8> <76F8> <918A> -<76FB> <76FB> -<76FE> <76FE> <8F82> -<7701> <7701> <8FC8> -<7704> <7704> -<7707> <7707> -<7708> <7708> -<7709> <7709> <94FB> -<770B> <770B> <8AC5> -<770C> <770C> <8CA7> -<771B> <771B> -<771E> <771E> -<771F> <771F> <905E> -<7720> <7720> <96B0> -<7724> <7724> -<7725> <7726> -<7729> <7729> -<7737> <7738> -endbfrange - -100 beginbfrange -<773A> <773A> <92AD> -<773C> <773C> <8AE1> -<7740> <7740> <9285> -<7746> <7746> -<7747> <7747> -<775A> <775A> -<775B> <775B> -<7761> <7761> <9087> -<7762> <7762> -<7763> <7763> <93C2> -<7765> <7765> -<7766> <7766> <9672> -<7768> <7768> -<776B> <776B> -<7779> <7779> -<777E> <777E> -<777F> <777F> -<778B> <778B> -<778E> <778E> -<7791> <7791> -<779E> <779E> -<77A0> <77A0> -<77A5> <77A5> <95CB> -<77AC> <77AC> <8F75> -<77AD> <77AD> <97C4> -<77B0> <77B0> -<77B3> <77B3> <93B5> -<77B6> <77B6> -<77B9> <77B9> -<77BB> <77BB> -<77BC> <77BD> -<77BF> <77BF> -<77C7> <77C7> -<77CD> <77CD> -<77D7> <77D7> -<77DA> <77DA> -<77DB> <77DB> <96B5> -<77DC> <77DC> -<77E2> <77E2> <96EE> -<77E3> <77E3> -<77E5> <77E5> <926D> -<77E7> <77E7> <948A> -<77E9> <77E9> <8BE9> -<77ED> <77ED> <925A> -<77EE> <77EE> -<77EF> <77EF> <8BB8> -<77F3> <77F3> <90CE> -<77FC> <77FC> -<7802> <7802> <8DBB> -<780C> <780C> -<7812> <7812> -<7814> <7814> <8CA4> -<7815> <7815> <8DD3> -<7820> <7820> -<7821> <7821> -<7825> <7825> <9375> -<7826> <7826> <8DD4> -<7827> <7827> <8B6D> -<7832> <7832> <9643> -<7834> <7834> <946A> -<783A> <783A> <9376> -<783F> <783F> <8D7B> -<7845> <7845> -<784E> <784E> -<785D> <785D> <8FC9> -<7864> <7864> -<786B> <786B> <97B0> -<786C> <786C> <8D64> -<786F> <786F> <8CA5> -<7872> <7872> <94A1> -<7874> <7874> -<787A> <787A> -<787C> <787C> -<7881> <7881> <8CE9> -<7886> <7886> -<7887> <7887> <92F4> -<788C> <788C> -<788D> <788D> <8A56> -<788E> <788E> -<7891> <7891> <94E8> -<7893> <7893> <894F> -<7895> <7895> <8DEA> -<7897> <7897> <9871> -<789A> <789A> -<78A3> <78A3> -<78A7> <78A7> <95C9> -<78A9> <78A9> <90D7> -<78AA> <78AA> -<78AF> <78AF> -<78B5> <78B5> -<78BA> <78BA> <8A6D> -<78BC> <78BC> -<78BE> <78BE> -<78C1> <78C1> <8EA5> -<78C5> <78C5> -<78C6> <78C6> -<78CA> <78CA> -<78CB> <78CB> -<78D0> <78D0> <94D6> -<78D1> <78D1> -endbfrange - -100 beginbfrange -<78D4> <78D4> -<78DA> <78DA> -<78E7> <78E7> -<78E8> <78E8> <9681> -<78EC> <78EC> -<78EF> <78EF> <88E9> -<78F4> <78F4> -<78FD> <78FD> -<7901> <7901> <8FCA> -<7907> <7907> -<790E> <790E> <9162> -<7911> <7911> -<7912> <7912> -<7919> <7919> -<7926> <7926> -<792A> <792A> -<792B> <792B> -<792C> <792C> -<7930> <7930> -<793A> <793A> <8EA6> -<793C> <793C> <97E7> -<793E> <793E> <8ED0> -<7940> <7940> -<7941> <7941> <8C56> -<7947> <7947> <8B5F> -<7948> <7948> <8B46> -<7949> <7949> <8E83> -<7950> <7950> <9753> -<7953> <7953> -<7955> <7955> -<7956> <7956> <9163> -<7957> <7957> -<795A> <795A> -<795D> <795D> <8F6A> -<795E> <795E> <905F> -<795F> <795F> -<7960> <7960> -<7962> <7962> <9449> -<7965> <7965> <8FCB> -<7968> <7968> <955B> -<796D> <796D> <8DD5> -<7977> <7977> <9398> -<797A> <797A> -<797F> <797F> -<7980> <7980> -<7981> <7981> <8BD6> -<7984> <7984> <985C> -<7985> <7985> <9154> -<798A> <798A> -<798D> <798D> <89D0> -<798E> <798E> <92F5> -<798F> <798F> <959F> -<7994> <7994> -<799B> <799B> -<799D> <799D> -<79A6> <79A6> <8B9A> -<79A7> <79A7> -<79AA> <79AA> -<79AE> <79AE> -<79B0> <79B0> <9448> -<79B1> <79B1> <9398> -<79B3> <79B3> -<79B9> <79BA> -<79BD> <79BD> <8BD7> -<79BE> <79BE> <89D1> -<79BF> <79BF> <93C3> -<79C0> <79C0> <8F47> -<79C1> <79C1> <8E84> -<79C9> <79C9> -<79CB> <79CB> <8F48> -<79D1> <79D1> <89C8> -<79D2> <79D2> <9562> -<79D5> <79D5> -<79D8> <79D8> <94E9> -<79DF> <79DF> <9164> -<79E1> <79E1> -<79E3> <79E3> -<79E4> <79E4> <9489> -<79E6> <79E6> <9060> -<79E7> <79E7> -<79E9> <79E9> <9281> -<79EC> <79EC> -<79F0> <79F0> <8FCC> -<79FB> <79FB> <88DA> -<7A00> <7A00> <8B48> -<7A08> <7A08> -<7A0B> <7A0B> <92F6> -<7A0D> <7A0D> -<7A0E> <7A0E> <90C5> -<7A14> <7A14> <96AB> -<7A17> <7A17> <9542> -<7A18> <7A19> -<7A1A> <7A1A> <9274> -<7A1C> <7A1C> <97C5> -<7A1F> <7A1F> -<7A20> <7A20> -<7A2E> <7A2E> <8EED> -<7A31> <7A31> -<7A32> <7A32> <88EE> -<7A37> <7A37> -endbfrange - -100 beginbfrange -<7A3B> <7A3B> -<7A3C> <7A3C> <89D2> -<7A3D> <7A3D> <8C6D> -<7A3E> <7A3E> -<7A3F> <7A3F> <8D65> -<7A40> <7A40> <8D92> -<7A42> <7A42> <95E4> -<7A43> <7A43> -<7A46> <7A46> <9673> -<7A49> <7A49> -<7A4D> <7A4D> <90CF> -<7A4E> <7A4E> <896E> -<7A4F> <7A4F> <89B8> -<7A50> <7A50> <88AA> -<7A57> <7A57> -<7A61> <7A62> -<7A63> <7A63> <8FF5> -<7A69> <7A69> -<7A6B> <7A6B> <8A6E> -<7A70> <7A70> -<7A74> <7A74> <8C8A> -<7A76> <7A76> <8B86> -<7A79> <7A79> -<7A7A> <7A7A> <8BF3> -<7A7D> <7A7D> -<7A7F> <7A7F> <90FA> -<7A81> <7A81> <93CB> -<7A83> <7A83> <90DE> -<7A84> <7A84> <8DF3> -<7A88> <7A88> -<7A92> <7A92> <9282> -<7A93> <7A93> <918B> -<7A95> <7A95> -<7A96> <7A96> -<7A97> <7A97> -<7A98> <7A98> -<7A9F> <7A9F> <8C41> -<7AA9> <7AA9> -<7AAA> <7AAA> <8C45> -<7AAE> <7AAE> <8B87> -<7AAF> <7AAF> <9771> -<7AB0> <7AB0> -<7AB6> <7AB6> -<7ABA> <7ABA> <894D> -<7ABF> <7ABF> -<7AC3> <7AC3> <8A96> -<7AC4> <7AC4> -<7AC5> <7AC5> -<7AC7> <7AC7> -<7AC8> <7AC8> -<7ACA> <7ACA> -<7ACB> <7ACB> <97A7> -<7ACD> <7ACD> -<7ACF> <7ACF> -<7AD1> <7AD1> -<7AD2> <7AD2> <9AF2> -<7AD3> <7AD3> -<7AD5> <7AD5> -<7AD9> <7ADA> -<7ADC> <7ADC> <97B3> -<7ADD> <7ADD> -<7ADF> <7ADF> -<7AE0> <7AE0> <8FCD> -<7AE1> <7AE2> -<7AE3> <7AE3> <8F76> -<7AE5> <7AE5> <93B6> -<7AE6> <7AE6> -<7AE7> <7AE7> -<7AEA> <7AEA> <9247> -<7AEB> <7AEB> -<7AED> <7AED> -<7AEF> <7AEF> <925B> -<7AF0> <7AF0> -<7AF6> <7AF6> <8BA3> -<7AF8> <7AF8> <995E> -<7AF9> <7AF9> <927C> -<7AFA> <7AFA> <8EB1> -<7AFF> <7AFF> <8AC6> -<7B02> <7B02> -<7B04> <7B04> -<7B06> <7B06> -<7B08> <7B08> <8B88> -<7B0A> <7B0A> -<7B0B> <7B0B> -<7B0F> <7B0F> -<7B11> <7B11> <8FCE> -<7B18> <7B19> -<7B1B> <7B1B> <934A> -<7B1E> <7B1E> -<7B20> <7B20> <8A7D> -<7B25> <7B25> <9079> -<7B26> <7B26> <9584> -<7B28> <7B28> -<7B2C> <7B2C> <91E6> -<7B33> <7B33> -<7B35> <7B35> -<7B36> <7B36> -<7B39> <7B39> <8DF9> -<7B45> <7B45> -<7B46> <7B46> <954D> -endbfrange - -100 beginbfrange -<7B48> <7B48> <94A4> -<7B49> <7B49> <9399> -<7B4B> <7B4B> <8BD8> -<7B4C> <7B4C> -<7B4D> <7B4D> -<7B4F> <7B4F> <94B3> -<7B50> <7B50> -<7B51> <7B51> <927D> -<7B52> <7B52> <939B> -<7B54> <7B54> <939A> -<7B56> <7B56> <8DF4> -<7B5D> <7B5D> -<7B65> <7B65> -<7B67> <7B67> -<7B6C> <7B6C> -<7B6E> <7B6E> -<7B70> <7B71> -<7B74> <7B74> -<7B75> <7B75> -<7B7A> <7B7A> -<7B86> <7B86> <95CD> -<7B87> <7B87> <89D3> -<7B8B> <7B8B> -<7B8D> <7B8D> -<7B8F> <7B8F> -<7B92> <7B92> -<7B94> <7B94> <9493> -<7B95> <7B95> <96A5> -<7B97> <7B97> <8E5A> -<7B98> <7B98> -<7B99> <7B99> -<7B9A> <7B9A> -<7B9C> <7B9C> -<7B9D> <7B9D> -<7B9E> <7B9E> -<7B9F> <7B9F> -<7BA1> <7BA1> <8AC7> -<7BAA> <7BAA> <925C> -<7BAD> <7BAD> <90FB> -<7BB1> <7BB1> <94A0> -<7BB4> <7BB4> -<7BB8> <7BB8> <94A2> -<7BC0> <7BC0> <90DF> -<7BC1> <7BC1> -<7BC4> <7BC4> <94CD> -<7BC6> <7BC6> -<7BC7> <7BC7> <95D1> -<7BC9> <7BC9> <927A> -<7BCB> <7BCB> -<7BCC> <7BCC> -<7BCF> <7BCF> -<7BDD> <7BDD> -<7BE0> <7BE0> <8EC2> -<7BE4> <7BE4> <93C4> -<7BE5> <7BE5> -<7BE6> <7BE6> -<7BE9> <7BE9> -<7BED> <7BED> <9855> -<7BF3> <7BF3> -<7BF6> <7BF6> -<7BF7> <7BF7> -<7C00> <7C00> -<7C07> <7C07> -<7C0D> <7C0D> -<7C11> <7C11> -<7C12> <7C12> <99D3> -<7C13> <7C13> -<7C14> <7C14> -<7C17> <7C17> -<7C1E> <7C1E> <925C> -<7C1F> <7C1F> -<7C21> <7C21> <8AC8> -<7C23> <7C23> -<7C27> <7C27> -<7C2A> <7C2A> -<7C2B> <7C2B> -<7C37> <7C37> -<7C38> <7C38> <94F4> -<7C3D> <7C3D> -<7C3E> <7C3E> <97FA> -<7C3F> <7C3F> <95EB> -<7C40> <7C40> -<7C43> <7C43> -<7C4C> <7C4C> -<7C4D> <7C4D> <90D0> -<7C4F> <7C4F> -<7C50> <7C50> -<7C54> <7C54> -<7C56> <7C56> -<7C58> <7C58> -<7C5F> <7C5F> -<7C60> <7C60> -<7C64> <7C64> -<7C65> <7C65> -<7C6C> <7C6C> -<7C73> <7C73> <95C4> -<7C75> <7C75> -<7C7E> <7C7E> <96E0> -<7C81> <7C81> <8BCC> -<7C82> <7C82> <8C48> -endbfrange - -100 beginbfrange -<7C83> <7C83> -<7C89> <7C89> <95B2> -<7C8B> <7C8B> <9088> -<7C8D> <7C8D> <96AE> -<7C90> <7C90> -<7C92> <7C92> <97B1> -<7C95> <7C95> <9494> -<7C97> <7C97> <9165> -<7C98> <7C98> <9453> -<7C9B> <7C9B> <8F6C> -<7C9F> <7C9F> <88BE> -<7CA1> <7CA1> -<7CA2> <7CA2> -<7CA4> <7CA4> -<7CA5> <7CA5> <8A9F> -<7CA7> <7CA7> <8FCF> -<7CA8> <7CA8> -<7CAB> <7CAB> -<7CAD> <7CAD> -<7CAE> <7CAE> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB9> <7CB9> -<7CBD> <7CBD> -<7CBE> <7CBE> <90B8> -<7CC0> <7CC0> -<7CC2> <7CC2> -<7CC5> <7CC5> -<7CCA> <7CCA> <8CD0> -<7CCE> <7CCE> <9157> -<7CD2> <7CD2> -<7CD6> <7CD6> <939C> -<7CD8> <7CD8> -<7CDC> <7CDC> -<7CDE> <7CDE> <95B3> -<7CDF> <7CDF> <918C> -<7CE0> <7CE0> <8D66> -<7CE2> <7CE2> -<7CE7> <7CE7> <97C6> -<7CEF> <7CEF> -<7CF2> <7CF2> -<7CF4> <7CF4> -<7CF6> <7CF6> -<7CF8> <7CF8> <8E85> -<7CFA> <7CFA> -<7CFB> <7CFB> <8C6E> -<7CFE> <7CFE> <8B8A> -<7D00> <7D00> <8B49> -<7D02> <7D02> -<7D04> <7D04> <96F1> -<7D05> <7D05> <8D67> -<7D06> <7D06> -<7D0A> <7D0A> -<7D0B> <7D0B> <96E4> -<7D0D> <7D0D> <945B> -<7D10> <7D10> <9552> -<7D14> <7D14> <8F83> -<7D15> <7D15> -<7D17> <7D17> <8ED1> -<7D18> <7D18> <8D68> -<7D19> <7D19> <8E86> -<7D1A> <7D1A> <8B89> -<7D1B> <7D1B> <95B4> -<7D1C> <7D1C> -<7D20> <7D20> <9166> -<7D21> <7D21> <9661> -<7D22> <7D22> <8DF5> -<7D2B> <7D2B> <8E87> -<7D2C> <7D2C> <92DB> -<7D2E> <7D2E> -<7D2F> <7D2F> <97DD> -<7D30> <7D30> <8DD7> -<7D32> <7D32> -<7D33> <7D33> <9061> -<7D35> <7D35> -<7D39> <7D39> <8FD0> -<7D3A> <7D3A> <8DAE> -<7D3F> <7D3F> -<7D42> <7D42> <8F49> -<7D43> <7D43> <8CBC> -<7D44> <7D44> <9167> -<7D45> <7D45> -<7D46> <7D46> -<7D48> <7D48> -<7D4B> <7D4B> -<7D4C> <7D4C> <8C6F> -<7D4E> <7D4E> -<7D4F> <7D4F> -<7D50> <7D50> <8C8B> -<7D56> <7D56> -<7D5B> <7D5B> -<7D5C> <7D5C> -<7D5E> <7D5E> <8D69> -<7D61> <7D61> <978D> -<7D62> <7D62> <88BA> -<7D63> <7D63> -<7D66> <7D66> <8B8B> -<7D68> <7D68> -<7D6E> <7D6E> -endbfrange - -100 beginbfrange -<7D71> <7D71> <939D> -<7D72> <7D72> -<7D73> <7D73> -<7D75> <7D75> <8A47> -<7D76> <7D76> <90E2> -<7D79> <7D79> <8CA6> -<7D7D> <7D7D> -<7D89> <7D89> -<7D8F> <7D8F> -<7D93> <7D93> -<7D99> <7D99> <8C70> -<7D9A> <7D9A> <91B1> -<7D9B> <7D9B> -<7D9C> <7D9C> <918E> -<7D9F> <7D9F> -<7DA0> <7DA0> -<7DA2> <7DA2> -<7DA3> <7DA3> -<7DAB> <7DAB> -<7DAC> <7DAC> <8EF8> -<7DAD> <7DAD> <88DB> -<7DAE> <7DAE> -<7DAF> <7DAF> -<7DB0> <7DB0> -<7DB1> <7DB1> <8D6A> -<7DB2> <7DB2> <96D4> -<7DB4> <7DB4> <92D4> -<7DB5> <7DB5> -<7DB7> <7DB7> -<7DB8> <7DB8> -<7DBA> <7DBA> -<7DBB> <7DBB> <925D> -<7DBD> <7DBD> -<7DBE> <7DBE> <88BB> -<7DBF> <7DBF> <96C8> -<7DC7> <7DC7> -<7DCA> <7DCA> <8BD9> -<7DCB> <7DCB> <94EA> -<7DCF> <7DCF> <918D> -<7DD1> <7DD1> <97CE> -<7DD2> <7DD2> <8F8F> -<7DD5> <7DD5> -<7DD6> <7DD6> -<7DD8> <7DD8> -<7DDA> <7DDA> <90FC> -<7DDC> <7DDC> -<7DDD> <7DDD> -<7DDE> <7DDE> -<7DE0> <7DE0> <92F7> -<7DE1> <7DE1> -<7DE4> <7DE4> -<7DE8> <7DE8> <95D2> -<7DE9> <7DE9> <8AC9> -<7DEC> <7DEC> <96C9> -<7DEF> <7DEF> <88DC> -<7DF2> <7DF2> -<7DF4> <7DF4> <97FB> -<7DFB> <7DFB> -<7E01> <7E01> <898F> -<7E04> <7E04> <93EA> -<7E05> <7E05> -<7E09> <7E09> -<7E0A> <7E0A> -<7E0B> <7E0B> -<7E12> <7E12> -<7E1B> <7E1B> <949B> -<7E1E> <7E1E> <8EC8> -<7E1F> <7E1F> -<7E21> <7E21> -<7E22> <7E22> -<7E23> <7E23> -<7E26> <7E26> <8F63> -<7E2B> <7E2B> <9644> -<7E2E> <7E2E> <8F6B> -<7E31> <7E31> -<7E32> <7E32> -<7E35> <7E35> -<7E37> <7E37> -<7E39> <7E39> -<7E3A> <7E3A> -<7E3B> <7E3B> -<7E3D> <7E3D> -<7E3E> <7E3E> <90D1> -<7E41> <7E41> <94C9> -<7E43> <7E43> -<7E46> <7E46> -<7E4A> <7E4A> <9140> -<7E4B> <7E4B> <8C71> -<7E4D> <7E4D> <8F4A> -<7E52> <7E52> -<7E54> <7E54> <9044> -<7E55> <7E55> <9155> -<7E56> <7E56> -<7E59> <7E5A> -<7E5D> <7E5D> -<7E5E> <7E5E> -<7E61> <7E61> <8F4A> -<7E66> <7E66> -<7E67> <7E67> -<7E69> <7E69> -endbfrange - -100 beginbfrange -<7E6A> <7E6A> -<7E6B> <7E6B> <8C71> -<7E6D> <7E6D> <969A> -<7E70> <7E70> <8C4A> -<7E79> <7E79> -<7E7B> <7E7B> -<7E7C> <7E7C> -<7E7D> <7E7D> -<7E7F> <7E7F> -<7E82> <7E82> <8E5B> -<7E83> <7E83> -<7E88> <7E89> -<7E8A> <7E8A> -<7E8C> <7E8C> -<7E8E> <7E8E> -<7E8F> <7E8F> <935A> -<7E90> <7E90> -<7E92> <7E92> -<7E93> <7E94> -<7E96> <7E96> -<7E9B> <7E9C> -<7F36> <7F36> <8ACA> -<7F38> <7F38> -<7F3A> <7F3A> -<7F45> <7F45> -<7F47> <7F47> -<7F4C> <7F4E> -<7F50> <7F51> -<7F54> <7F54> -<7F55> <7F55> -<7F58> <7F58> -<7F5F> <7F60> -<7F67> <7F67> -<7F68> <7F69> -<7F6A> <7F6A> <8DDF> -<7F6B> <7F6B> <8C72> -<7F6E> <7F6E> <9275> -<7F70> <7F70> <94B1> -<7F72> <7F72> <8F90> -<7F75> <7F75> <946C> -<7F77> <7F77> <94EB> -<7F78> <7F78> -<7F79> <7F79> <9CEB> -<7F82> <7F82> -<7F83> <7F83> -<7F85> <7F85> <9785> -<7F86> <7F86> -<7F87> <7F87> -<7F88> <7F88> -<7F8A> <7F8A> <9772> -<7F8C> <7F8C> -<7F8E> <7F8E> <94FC> -<7F94> <7F94> -<7F9A> <7F9A> -<7F9D> <7F9D> -<7F9E> <7F9E> -<7FA1> <7FA1> -<7FA3> <7FA3> -<7FA4> <7FA4> <8C51> -<7FA8> <7FA8> <9141> -<7FA9> <7FA9> <8B60> -<7FAE> <7FAE> -<7FAF> <7FAF> -<7FB2> <7FB2> -<7FB6> <7FB6> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBD> <7FBD> <8948> -<7FC1> <7FC1> <89A5> -<7FC5> <7FC6> -<7FCA> <7FCA> -<7FCC> <7FCC> <9782> -<7FD2> <7FD2> <8F4B> -<7FD4> <7FD4> -<7FD5> <7FD5> -<7FE0> <7FE0> <9089> -<7FE1> <7FE1> -<7FE6> <7FE6> -<7FE9> <7FE9> -<7FEB> <7FEB> <8AE3> -<7FF0> <7FF0> <8ACB> -<7FF3> <7FF3> -<7FF9> <7FF9> -<7FFB> <7FFB> <967C> -<7FFC> <7FFC> <9783> -<8000> <8000> <9773> -<8001> <8001> <9856> -<8003> <8003> <8D6C> -<8004> <8004> -<8005> <8005> <8ED2> -<8006> <8006> -<800B> <800B> -<800C> <800C> <8EA7> -<8010> <8010> <91CF> -<8012> <8012> -<8015> <8015> <8D6B> -<8017> <8017> <96D5> -<8018> <8019> -<801C> <801C> -<8021> <8021> -endbfrange - -100 beginbfrange -<8028> <8028> -<8033> <8033> <8EA8> -<8036> <8036> <96EB> -<803B> <803B> -<803D> <803D> <925E> -<803F> <803F> -<8046> <8046> -<804A> <804A> -<8052> <8052> -<8056> <8056> <90B9> -<8058> <8058> -<805A> <805A> -<805E> <805E> <95B7> -<805F> <805F> -<8061> <8061> <918F> -<8062> <8062> -<8068> <8068> -<806F> <806F> <97FC> -<8070> <8070> -<8072> <8072> -<8073> <8073> -<8074> <8074> <92AE> -<8076> <8076> -<8077> <8077> <9045> -<8079> <8079> -<807D> <807D> -<807E> <807E> <9857> -<807F> <807F> -<8084> <8084> -<8085> <8085> -<8086> <8086> -<8087> <8087> <94A3> -<8089> <8089> <93F7> -<808B> <808B> <985D> -<808C> <808C> <94A7> -<8093> <8093> -<8096> <8096> <8FD1> -<8098> <8098> <9549> -<809A> <809A> -<809B> <809B> -<809D> <809D> <8ACC> -<80A1> <80A1> <8CD2> -<80A2> <80A2> <8E88> -<80A5> <80A5> <94EC> -<80A9> <80A9> <8CA8> -<80AA> <80AA> <9662> -<80AC> <80AC> -<80AD> <80AD> -<80AF> <80AF> <8D6D> -<80B1> <80B1> <8D6E> -<80B2> <80B2> <88E7> -<80B4> <80B4> <8DE6> -<80BA> <80BA> <9478> -<80C3> <80C3> <88DD> -<80C4> <80C4> -<80C6> <80C6> <925F> -<80CC> <80CC> <9477> -<80CE> <80CE> <91D9> -<80D6> <80D6> -<80D9> <80D9> -<80DA> <80DA> -<80DB> <80DB> -<80DD> <80DD> -<80DE> <80DE> <9645> -<80E1> <80E1> <8CD3> -<80E4> <80E4> <88FB> -<80E5> <80E5> -<80EF> <80EF> -<80F1> <80F1> -<80F4> <80F4> <93B7> -<80F8> <80F8> <8BB9> -<80FC> <80FC> -<80FD> <80FD> <945C> -<8102> <8102> <8E89> -<8105> <8105> <8BBA> -<8106> <8106> <90C6> -<8107> <8107> <9865> -<8108> <8108> <96AC> -<8109> <8109> -<810A> <810A> <90D2> -<811A> <811A> <8B72> -<811B> <811B> -<8123> <8123> -<8129> <8129> -<812F> <812F> -<8131> <8131> <9245> -<8133> <8133> <945D> -<8139> <8139> <92AF> -<813E> <813E> -<8146> <8146> -<814B> <814B> -<814E> <814E> <9074> -<8150> <8150> <9585> -<8151> <8151> -<8153> <8153> -<8154> <8154> <8D6F> -<8155> <8155> <9872> -<815F> <815F> -<8165> <8166> -<816B> <816B> <8EEE> -endbfrange - -100 beginbfrange -<816E> <816E> -<8170> <8170> <8D98> -<8171> <8171> -<8174> <8174> -<8178> <8178> <92B0> -<8179> <8179> <95A0> -<817A> <817A> <9142> -<817F> <817F> <91DA> -<8180> <8180> -<8182> <8182> -<8183> <8183> -<8188> <8188> -<818A> <818A> -<818F> <818F> <8D70> -<8193> <8193> -<8195> <8195> -<819A> <819A> <9586> -<819C> <819C> <968C> -<819D> <819D> <9547> -<81A0> <81A0> -<81A3> <81A3> -<81A4> <81A4> -<81A8> <81A8> <9663> -<81A9> <81A9> -<81B0> <81B0> -<81B3> <81B3> <9156> -<81B5> <81B5> -<81B8> <81B8> -<81BA> <81BA> -<81BD> <81BD> -<81BE> <81BE> -<81BF> <81BF> <945E> -<81C0> <81C0> -<81C2> <81C2> -<81C6> <81C6> <89B0> -<81C8> <81C8> -<81C9> <81C9> -<81CD> <81CD> -<81D1> <81D1> -<81D3> <81D3> <919F> -<81D8> <81D8> -<81D9> <81D9> -<81DA> <81DA> -<81DF> <81E0> -<81E3> <81E3> <9062> -<81E5> <81E5> <89E7> -<81E7> <81E7> -<81E8> <81E8> <97D5> -<81EA> <81EA> <8EA9> -<81ED> <81ED> <8F4C> -<81F3> <81F3> <8E8A> -<81F4> <81F4> <9276> -<81FA> <81FB> -<81FC> <81FC> <8950> -<81FE> <81FE> -<8201> <8202> -<8205> <8205> -<8207> <8207> -<8208> <8208> <8BBB> -<8209> <8209> <9DA8> -<820A> <820A> -<820C> <820C> <90E3> -<820D> <820D> -<820E> <820E> <8EC9> -<8210> <8210> -<8212> <8212> <98AE> -<8216> <8216> -<8217> <8217> <95DC> -<8218> <8218> <8ADA> -<821B> <821B> <9143> -<821C> <821C> <8F77> -<821E> <821E> <9591> -<821F> <821F> <8F4D> -<8229> <8229> -<822A> <822A> <8D71> -<822B> <822B> -<822C> <822C> <94CA> -<822E> <822E> -<8233> <8233> -<8235> <8235> <91C7> -<8236> <8236> <9495> -<8237> <8237> <8CBD> -<8238> <8238> -<8239> <8239> <9144> -<8240> <8240> -<8247> <8247> <92F8> -<8258> <8258> -<8259> <8259> -<825A> <825A> -<825D> <825D> -<825F> <825F> -<8262> <8262> -<8264> <8264> -<8266> <8266> <8ACD> -<8268> <8268> -<826A> <826B> -<826E> <826E> <8DAF> -<826F> <826F> <97C7> -<8271> <8271> -<8272> <8272> <9046> -endbfrange - -100 beginbfrange -<8276> <8276> <8990> -<8277> <8278> -<827E> <827E> -<828B> <828B> <88F0> -<828D> <828D> -<8292> <8292> -<8299> <8299> <9587> -<829D> <829D> <8EC5> -<829F> <829F> -<82A5> <82A5> <8A48> -<82A6> <82A6> <88B0> -<82AB> <82AB> -<82AC> <82AC> -<82AD> <82AD> <946D> -<82AF> <82AF> <9063> -<82B1> <82B1> <89D4> -<82B3> <82B3> <9646> -<82B8> <82B8> <8C7C> -<82B9> <82B9> <8BDA> -<82BB> <82BB> -<82BD> <82BD> <89E8> -<82C5> <82C5> <8AA1> -<82D1> <82D1> <8991> -<82D2> <82D2> -<82D3> <82D3> <97E8> -<82D4> <82D4> <91DB> -<82D7> <82D7> <9563> -<82D9> <82D9> -<82DB> <82DB> <89D5> -<82DC> <82DC> -<82DE> <82DE> -<82DF> <82DF> -<82E1> <82E1> -<82E3> <82E3> -<82E5> <82E5> <8EE1> -<82E6> <82E6> <8BEA> -<82E7> <82E7> <9297> -<82EB> <82EB> <93CF> -<82F1> <82F1> <8970> -<82F3> <82F3> -<82F4> <82F4> -<82F9> <82F9> -<82FA> <82FA> -<82FB> <82FB> -<8301> <8301> -<8302> <8302> <96CE> -<8303> <8303> -<8304> <8304> <89D6> -<8305> <8305> <8A9D> -<8306> <8306> -<8309> <8309> -<830E> <830E> <8C73> -<8316> <8316> -<8317> <8318> -<831C> <831C> <88A9> -<8323> <8323> -<8328> <8328> <88EF> -<832B> <832B> -<832F> <832F> -<8331> <8331> -<8332> <8332> -<8334> <8334> -<8335> <8335> -<8336> <8336> <9283> -<8338> <8338> <91F9> -<8339> <8339> -<8340> <8340> -<8345> <8345> -<8349> <8349> <9190> -<834A> <834A> <8C74> -<834F> <834F> <8960> -<8350> <8350> -<8352> <8352> <8D72> -<8358> <8358> <9191> -<8362> <8362> -<8373> <8373> -<8375> <8375> -<8377> <8377> <89D7> -<837B> <837B> <89AC> -<837C> <837C> -<837F> <837F> -<8385> <8385> -<8387> <8387> -<8389> <8389> -<838A> <838A> -<838E> <838E> -<8393> <8393> -<8396> <8396> -<839A> <839A> -<839E> <839E> <8ACE> -<839F> <839F> -<83A0> <83A0> -<83A2> <83A2> -<83A8> <83A8> -<83AA> <83AA> -<83AB> <83AB> <949C> -<83B1> <83B1> <9789> -<83B5> <83B5> -<83BD> <83BD> -<83C1> <83C1> -endbfrange - -100 beginbfrange -<83C5> <83C5> <909B> -<83C7> <83C7> -<83CA> <83CA> <8B65> -<83CC> <83CC> <8BDB> -<83CE> <83CE> -<83D3> <83D3> <89D9> -<83D6> <83D6> <8FD2> -<83D8> <83D8> -<83DC> <83DC> <8DD8> -<83DF> <83DF> <9370> -<83E0> <83E0> -<83E9> <83E9> <95EC> -<83EB> <83EB> -<83EF> <83EF> <89D8> -<83F0> <83F0> <8CD4> -<83F1> <83F1> <9548> -<83F2> <83F2> -<83F4> <83F4> -<83F6> <83F6> -<83F7> <83F7> -<83FB> <83FB> -<83FD> <83FD> -<8403> <8403> -<8404> <8404> <93B8> -<8407> <8407> -<840A> <840A> <9789> -<840B> <840B> -<840C> <840C> <9647> -<840D> <840D> -<840E> <840E> <88DE> -<8413> <8413> -<8420> <8420> -<8422> <8422> -<8429> <8429> <948B> -<842A> <842A> -<842C> <842C> -<8431> <8431> <8A9E> -<8435> <8435> -<8438> <8438> -<843C> <843C> -<843D> <843D> <978E> -<8446> <8446> -<8448> <8448> -<8449> <8449> <9774> -<844E> <844E> <97A8> -<8457> <8457> <9298> -<845B> <845B> <8A8B> -<8461> <8461> <9592> -<8462> <8462> -<8463> <8463> <939F> -<8466> <8466> <88AF> -<8469> <8469> -<846B> <846B> -<846C> <846C> <9192> -<846D> <846D> -<846E> <846E> -<846F> <846F> -<8471> <8471> <944B> -<8475> <8475> <88A8> -<8477> <8477> -<8479> <8479> -<847A> <847A> <9598> -<8482> <8482> -<8484> <8484> -<848B> <848B> <8FD3> -<8490> <8490> <8F4E> -<8494> <8494> <8EAA> -<8499> <8499> <96D6> -<849C> <849C> <9566> -<849F> <849F> -<84A1> <84A1> -<84AD> <84AD> -<84B2> <84B2> <8A97> -<84B4> <84B4> -<84B8> <84B8> <8FF6> -<84B9> <84B9> -<84BB> <84BB> -<84BC> <84BC> <9193> -<84BF> <84BF> -<84C1> <84C1> -<84C4> <84C4> <927E> -<84C6> <84C6> -<84C9> <84C9> <9775> -<84CA> <84CA> -<84CB> <84CB> <8A57> -<84CD> <84CD> -<84D0> <84D0> -<84D1> <84D1> <96AA> -<84D6> <84D6> -<84D9> <84D9> -<84DA> <84DA> -<84DC> <84DC> -<84EC> <84EC> <9648> -<84EE> <84EE> <9840> -<84F4> <84F4> -<84FC> <84FC> -<84FF> <84FF> -<8500> <8500> <8EC1> -<8506> <8506> -<8511> <8511> <95CC> -endbfrange - -100 beginbfrange -<8513> <8513> <96A0> -<8514> <8514> -<8515> <8515> -<8517> <8518> -<851A> <851A> <8955> -<851F> <851F> -<8521> <8521> -<8523> <8523> <8FD3> -<8526> <8526> <92D3> -<852C> <852C> -<852D> <852D> <88FC> -<8535> <8535> <91A0> -<853D> <853D> <95C1> -<853E> <853E> -<8540> <8540> -<8541> <8541> -<8543> <8543> <94D7> -<8548> <8548> -<8549> <8549> <8FD4> -<854A> <854A> <8EC7> -<854B> <854B> -<854E> <854E> <8BBC> -<8553> <8553> -<8555> <8555> -<8557> <8557> <9599> -<8558> <8558> -<8559> <8559> -<855A> <855A> -<8563> <8563> -<8568> <8568> <986E> -<8569> <8569> <93A0> -<856A> <856A> <9593> -<856B> <856B> -<856D> <856D> -<8577> <8577> -<857E> <857E> -<8580> <8580> -<8584> <8584> <9496> -<8587> <8587> -<8588> <8588> -<858A> <858A> -<8590> <8590> -<8591> <8591> -<8594> <8594> -<8597> <8597> <8992> -<8599> <8599> <93E3> -<859B> <859B> -<859C> <859C> -<85A4> <85A4> -<85A6> <85A6> <9145> -<85A8> <85A8> -<85A9> <85A9> <8E46> -<85AA> <85AA> <9064> -<85AB> <85AB> <8C4F> -<85AC> <85AC> <96F2> -<85AE> <85AE> <96F7> -<85AF> <85AF> <8F92> -<85B0> <85B0> -<85B9> <85B9> -<85BA> <85BA> -<85C1> <85C1> <986D> -<85C9> <85C9> -<85CD> <85CD> <9795> -<85CF> <85CF> -<85D0> <85D0> -<85D5> <85D5> -<85DC> <85DC> -<85DD> <85DD> -<85E4> <85E4> <93A1> -<85E5> <85E5> -<85E9> <85E9> <94CB> -<85EA> <85EA> -<85F7> <85F7> <8F93> -<85F9> <85F9> -<85FA> <85FA> -<85FB> <85FB> <9194> -<85FE> <85FE> -<8602> <8602> -<8606> <8606> -<8607> <8607> <9168> -<860A> <860A> -<860B> <860B> -<8613> <8613> -<8616> <8616> <9F50> -<8617> <8617> <9F41> -<861A> <861A> -<8622> <8622> -<862D> <862D> <9796> -<862F> <862F> -<8630> <8630> -<863F> <863F> -<864D> <864D> -<864E> <864E> <8CD5> -<8650> <8650> <8B73> -<8654> <8654> -<8655> <8655> <997C> -<865A> <865A> <8B95> -<865C> <865C> <97B8> -<865E> <865E> <8BF1> -<865F> <865F> -endbfrange - -100 beginbfrange -<8667> <8667> -<866B> <866B> <928E> -<8671> <8671> -<8679> <8679> <93F8> -<867B> <867B> <88B8> -<868A> <868A> <89E1> -<868B> <868C> -<8693> <8693> -<8695> <8695> <8E5C> -<86A3> <86A3> -<86A4> <86A4> <9461> -<86A9> <86AA> -<86AB> <86AB> -<86AF> <86AF> -<86B0> <86B0> -<86B6> <86B6> -<86C4> <86C4> -<86C6> <86C6> -<86C7> <86C7> <8ED6> -<86C9> <86C9> -<86CB> <86CB> <9260> -<86CD> <86CD> <8C75> -<86CE> <86CE> <8A61> -<86D4> <86D4> -<86D9> <86D9> <8A5E> -<86DB> <86DB> -<86DE> <86DE> -<86DF> <86DF> -<86E4> <86E4> <94B8> -<86E9> <86E9> -<86EC> <86EC> -<86ED> <86ED> <9567> -<86EE> <86EE> <94D8> -<86EF> <86EF> -<86F8> <86F8> <91FB> -<86F9> <86F9> -<86FB> <86FB> -<86FE> <86FE> <89E9> -<8700> <8700> -<8702> <8702> <9649> -<8703> <8703> -<8706> <8706> -<8708> <8708> -<8709> <8709> -<870A> <870A> -<870D> <870D> -<8711> <8711> -<8712> <8712> -<8718> <8718> <9277> -<871A> <871A> -<871C> <871C> <96A8> -<8725> <8725> -<8729> <8729> -<8734> <8734> -<8737> <8737> -<873B> <873B> -<873F> <873F> -<8749> <8749> <90E4> -<874B> <874B> <9858> -<874C> <874C> -<874E> <874E> -<8753> <8753> -<8755> <8755> <9049> -<8757> <8757> -<8759> <8759> -<875F> <875F> -<8760> <8760> -<8763> <8763> -<8766> <8766> <89DA> -<8768> <8768> -<876A> <876A> -<876E> <876E> -<8774> <8774> -<8776> <8776> <92B1> -<8778> <8778> -<877F> <877F> <9488> -<8782> <8782> -<878D> <878D> <975A> -<879F> <879F> -<87A2> <87A2> -<87AB> <87AB> -<87AF> <87AF> -<87B3> <87B3> -<87BA> <87BA> <9786> -<87BB> <87BB> -<87BD> <87BD> -<87C0> <87C0> -<87C4> <87C4> -<87C6> <87C6> -<87C7> <87C7> -<87CB> <87CB> -<87D0> <87D0> -<87D2> <87D2> -<87E0> <87E0> -<87EC> <87EC> <90E4> -<87EF> <87EF> -<87F2> <87F2> -<87F6> <87F7> -<87F9> <87F9> <8A49> -<87FB> <87FB> <8B61> -endbfrange - -100 beginbfrange -<87FE> <87FE> -<8805> <8805> -<8807> <8807> -<880D> <880D> -<880E> <880E> -<880F> <880F> -<8811> <8811> -<8815> <8815> -<8816> <8816> -<881F> <881F> <9858> -<8821> <8821> -<8822> <8822> -<8823> <8823> -<8827> <8827> -<8831> <8831> -<8836> <8836> -<8839> <8839> -<883B> <883B> -<8840> <8840> <8C8C> -<8842> <8842> -<8844> <8844> -<8846> <8846> <8F4F> -<884C> <884C> <8D73> -<884D> <884D> <9FA5> -<8852> <8852> -<8853> <8853> <8F70> -<8857> <8857> <8A58> -<8859> <8859> -<885B> <885B> <8971> -<885D> <885D> <8FD5> -<885E> <885E> -<8861> <8861> <8D74> -<8862> <8862> -<8863> <8863> <88DF> -<8868> <8868> <955C> -<886B> <886B> -<8870> <8870> <908A> -<8872> <8872> -<8875> <8875> -<8877> <8877> <928F> -<887D> <887D> -<887E> <887E> -<887F> <887F> <8BDC> -<8881> <8881> -<8882> <8882> -<8888> <8888> <8C55> -<888B> <888B> <91DC> -<888D> <888D> -<8892> <8892> -<8896> <8896> <91B3> -<8897> <8897> -<8899> <8899> -<889E> <889E> -<88A2> <88A2> -<88A4> <88A4> -<88AB> <88AB> <94ED> -<88AE> <88AE> -<88B0> <88B0> -<88B1> <88B1> -<88B4> <88B4> <8CD1> -<88B5> <88B5> -<88B7> <88B7> <88BF> -<88BF> <88BF> -<88C1> <88C1> <8DD9> -<88C2> <88C2> <97F4> -<88C3> <88C4> -<88C5> <88C5> <9195> -<88CF> <88CF> <97A0> -<88D4> <88D4> -<88D5> <88D5> <9754> -<88D8> <88D9> -<88DC> <88DC> <95E2> -<88DD> <88DD> -<88DF> <88DF> <8DBE> -<88E1> <88E1> <97A1> -<88E8> <88E8> -<88F2> <88F2> -<88F3> <88F3> <8FD6> -<88F4> <88F4> -<88F5> <88F5> -<88F8> <88F8> <9787> -<88F9> <88F9> -<88FC> <88FC> -<88FD> <88FD> <90BB> -<88FE> <88FE> <909E> -<8902> <8902> -<8904> <8904> -<8907> <8907> <95A1> -<890A> <890A> -<890C> <890C> -<8910> <8910> <8A8C> -<8912> <8912> <964A> -<8913> <8913> -<891C> <891C> -<891D> <891D> -<891E> <891E> -<8925> <8925> -<892A> <892B> -<8936> <8936> -<8938> <8938> -endbfrange - -100 beginbfrange -<893B> <893B> -<8941> <8941> -<8943> <8943> -<8944> <8944> -<894C> <894C> -<894D> <894D> -<8956> <8956> <89A6> -<895E> <895E> -<895F> <895F> <8BDD> -<8960> <8960> -<8964> <8964> -<8966> <8966> -<896A> <896A> -<896D> <896D> -<896F> <896F> -<8972> <8972> <8F50> -<8974> <8974> -<8977> <8977> -<897E> <897E> -<897F> <897F> <90BC> -<8981> <8981> <9776> -<8983> <8983> -<8986> <8986> <95A2> -<8987> <8987> <9465> -<8988> <8988> -<898A> <898A> -<898B> <898B> <8CA9> -<898F> <898F> <8B4B> -<8993> <8993> -<8996> <8996> <8E8B> -<8997> <8997> <9460> -<8998> <8998> -<899A> <899A> <8A6F> -<89A1> <89A1> -<89A6> <89A6> -<89A7> <89A7> <9797> -<89A9> <89A9> -<89AA> <89AA> <9065> -<89AC> <89AC> -<89AF> <89AF> -<89B2> <89B2> -<89B3> <89B3> <8ACF> -<89BA> <89BA> -<89BD> <89BD> -<89BF> <89C0> -<89D2> <89D2> <8A70> -<89DA> <89DA> -<89DC> <89DD> -<89E3> <89E3> <89F0> -<89E6> <89E6> <9047> -<89E7> <89E7> -<89F4> <89F4> -<89F8> <89F8> -<8A00> <8A00> <8CBE> -<8A02> <8A02> <92F9> -<8A03> <8A03> -<8A08> <8A08> <8C76> -<8A0A> <8A0A> <9075> -<8A0C> <8A0C> -<8A0E> <8A0E> <93A2> -<8A10> <8A10> -<8A12> <8A12> -<8A13> <8A13> <8C50> -<8A16> <8A16> -<8A17> <8A17> <91F5> -<8A18> <8A18> <8B4C> -<8A1B> <8A1B> -<8A1D> <8A1D> -<8A1F> <8A1F> <8FD7> -<8A23> <8A23> <8C8D> -<8A25> <8A25> -<8A2A> <8A2A> <964B> -<8A2D> <8A2D> <90DD> -<8A31> <8A31> <8B96> -<8A33> <8A33> <96F3> -<8A34> <8A34> <9169> -<8A36> <8A36> -<8A37> <8A37> -<8A3A> <8A3A> <9066> -<8A3B> <8A3B> <9290> -<8A3C> <8A3C> <8FD8> -<8A41> <8A41> -<8A46> <8A46> -<8A48> <8A48> -<8A50> <8A50> <8DBC> -<8A51> <8A51> <91C0> -<8A52> <8A52> -<8A54> <8A54> <8FD9> -<8A55> <8A55> <955D> -<8A5B> <8A5B> -<8A5E> <8A5E> <8E8C> -<8A60> <8A60> <8972> -<8A62> <8A62> -<8A63> <8A63> <8C77> -<8A66> <8A66> <8E8E> -<8A69> <8A69> <8E8D> -<8A6B> <8A6B> <986C> -<8A6C> <8A6C> -<8A6D> <8A6D> -<8A6E> <8A6E> <9146> -endbfrange - -100 beginbfrange -<8A70> <8A70> <8B6C> -<8A71> <8A71> <9862> -<8A72> <8A72> <8A59> -<8A73> <8A73> <8FDA> -<8A79> <8A79> -<8A7C> <8A7C> -<8A82> <8A82> -<8A84> <8A84> -<8A85> <8A85> -<8A87> <8A87> <8CD6> -<8A89> <8A89> <975F> -<8A8C> <8A8C> <8E8F> -<8A8D> <8A8D> <9446> -<8A91> <8A91> -<8A93> <8A93> <90BE> -<8A95> <8A95> <9261> -<8A98> <8A98> <9755> -<8A9A> <8A9A> -<8A9E> <8A9E> <8CEA> -<8AA0> <8AA0> <90BD> -<8AA1> <8AA1> -<8AA3> <8AA3> -<8AA4> <8AA4> <8CEB> -<8AA5> <8AA6> -<8AA7> <8AA7> -<8AA8> <8AA8> -<8AAC> <8AAC> <90E0> -<8AAD> <8AAD> <93C7> -<8AB0> <8AB0> <924E> -<8AB2> <8AB2> <89DB> -<8AB9> <8AB9> <94EE> -<8ABC> <8ABC> <8B62> -<8ABE> <8ABE> -<8ABF> <8ABF> <92B2> -<8AC2> <8AC2> -<8AC4> <8AC4> -<8AC7> <8AC7> <926B> -<8ACB> <8ACB> <90BF> -<8ACC> <8ACC> <8AD0> -<8ACD> <8ACD> -<8ACF> <8ACF> <907A> -<8AD2> <8AD2> <97C8> -<8AD6> <8AD6> <985F> -<8ADA> <8ADA> -<8ADB> <8ADB> -<8ADC> <8ADC> <92B3> -<8ADE> <8ADE> -<8ADF> <8ADF> -<8AE0> <8AE0> -<8AE1> <8AE1> -<8AE2> <8AE2> -<8AE4> <8AE4> -<8AE6> <8AE6> <92FA> -<8AE7> <8AE7> -<8AEB> <8AEB> -<8AED> <8AED> <9740> -<8AEE> <8AEE> <8E90> -<8AF1> <8AF1> -<8AF3> <8AF3> -<8AF6> <8AF6> -<8AF7> <8AF7> -<8AF8> <8AF8> <8F94> -<8AFA> <8AFA> <8CBF> -<8AFE> <8AFE> <91F8> -<8B00> <8B00> <9664> -<8B01> <8B01> <8979> -<8B02> <8B02> <88E0> -<8B04> <8B04> <93A3> -<8B07> <8B07> -<8B0C> <8B0C> -<8B0E> <8B0E> <93E4> -<8B10> <8B10> -<8B14> <8B14> -<8B16> <8B16> -<8B17> <8B17> -<8B19> <8B19> <8CAA> -<8B1A> <8B1A> -<8B1B> <8B1B> <8D75> -<8B1D> <8B1D> <8ED3> -<8B20> <8B20> -<8B21> <8B21> <9777> -<8B26> <8B26> -<8B28> <8B28> -<8B2B> <8B2B> -<8B2C> <8B2C> <9554> -<8B33> <8B33> -<8B39> <8B39> <8BDE> -<8B3E> <8B3E> -<8B41> <8B41> -<8B49> <8B49> -<8B4C> <8B4C> -<8B4E> <8B4E> -<8B4F> <8B4F> -<8B53> <8B53> -<8B56> <8B56> -<8B58> <8B58> <8EAF> -<8B5A> <8B5A> -<8B5B> <8B5B> -<8B5C> <8B5C> <9588> -<8B5F> <8B5F> -endbfrange - -100 beginbfrange -<8B66> <8B66> <8C78> -<8B6B> <8B6B> -<8B6C> <8B6C> -<8B6F> <8B6F> -<8B70> <8B70> <8B63> -<8B71> <8B71> -<8B72> <8B72> <8FF7> -<8B74> <8B74> -<8B77> <8B77> <8CEC> -<8B7D> <8B7D> -<8B7F> <8B7F> -<8B80> <8B80> -<8B83> <8B83> <8E5D> -<8B8A> <8B8A> <9DCC> -<8B8C> <8B8C> -<8B8E> <8B8E> -<8B90> <8B90> <8F51> -<8B92> <8B93> -<8B96> <8B96> -<8B99> <8B9A> -<8C37> <8C37> <924A> -<8C3A> <8C3A> -<8C3F> <8C3F> -<8C41> <8C41> -<8C46> <8C46> <93A4> -<8C48> <8C48> -<8C4A> <8C4A> <964C> -<8C4C> <8C4C> -<8C4E> <8C4E> -<8C50> <8C50> -<8C55> <8C55> -<8C5A> <8C5A> <93D8> -<8C61> <8C61> <8FDB> -<8C62> <8C62> -<8C6A> <8C6A> <8D8B> -<8C6B> <8C6B> <98AC> -<8C6C> <8C6C> -<8C78> <8C78> -<8C79> <8C79> <955E> -<8C7A> <8C7A> -<8C7C> <8C7C> -<8C82> <8C82> -<8C85> <8C85> -<8C89> <8C89> -<8C8A> <8C8A> -<8C8C> <8C8C> <9665> -<8C8D> <8C8E> -<8C94> <8C94> -<8C98> <8C98> -<8C9D> <8C9D> <8A4C> -<8C9E> <8C9E> <92E5> -<8CA0> <8CA0> <9589> -<8CA1> <8CA1> <8DE0> -<8CA2> <8CA2> <8D76> -<8CA7> <8CA7> <956E> -<8CA8> <8CA8> <89DD> -<8CA9> <8CA9> <94CC> -<8CAA> <8CAA> -<8CAB> <8CAB> <8AD1> -<8CAC> <8CAC> <90D3> -<8CAD> <8CAD> -<8CAE> <8CAE> -<8CAF> <8CAF> <9299> -<8CB0> <8CB0> <96E1> -<8CB2> <8CB3> -<8CB4> <8CB4> <8B4D> -<8CB6> <8CB6> -<8CB7> <8CB7> <9483> -<8CB8> <8CB8> <91DD> -<8CBB> <8CBB> <94EF> -<8CBC> <8CBC> <935C> -<8CBD> <8CBD> -<8CBF> <8CBF> <9666> -<8CC0> <8CC0> <89EA> -<8CC1> <8CC1> -<8CC2> <8CC2> <9847> -<8CC3> <8CC3> <92C0> -<8CC4> <8CC4> <9864> -<8CC7> <8CC7> <8E91> -<8CC8> <8CC8> -<8CCA> <8CCA> <91AF> -<8CCD> <8CCD> -<8CCE> <8CCE> <9147> -<8CD1> <8CD1> <93F6> -<8CD3> <8CD3> <956F> -<8CDA> <8CDA> -<8CDB> <8CDB> <8E5E> -<8CDC> <8CDC> <8E92> -<8CDE> <8CDE> <8FDC> -<8CE0> <8CE0> <9485> -<8CE2> <8CE2> <8CAB> -<8CE3> <8CE3> -<8CE4> <8CE4> -<8CE6> <8CE6> <958A> -<8CEA> <8CEA> <8EBF> -<8CED> <8CED> <9371> -<8CF0> <8CF0> -<8CF4> <8CF4> -<8CFA> <8CFB> -<8CFC> <8CFC> <8D77> -endbfrange - -100 beginbfrange -<8CFD> <8CFD> -<8D04> <8D05> -<8D07> <8D07> -<8D08> <8D08> <91A1> -<8D0A> <8D0A> -<8D0B> <8D0B> <8AE4> -<8D0D> <8D0D> -<8D0F> <8D0F> -<8D10> <8D10> -<8D12> <8D12> -<8D13> <8D13> -<8D14> <8D14> -<8D16> <8D16> -<8D64> <8D64> <90D4> -<8D66> <8D66> <8ECD> -<8D67> <8D67> -<8D6B> <8D6B> <8A71> -<8D6D> <8D6D> -<8D70> <8D70> <9196> -<8D71> <8D71> -<8D73> <8D73> -<8D74> <8D74> <958B> -<8D76> <8D76> -<8D77> <8D77> <8B4E> -<8D81> <8D81> -<8D85> <8D85> <92B4> -<8D8A> <8D8A> <897A> -<8D99> <8D99> -<8DA3> <8DA3> <8EEF> -<8DA8> <8DA8> <9096> -<8DB3> <8DB3> <91AB> -<8DBA> <8DBA> -<8DBE> <8DBE> -<8DC2> <8DC2> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCF> <8DCF> -<8DD6> <8DD6> -<8DDA> <8DDA> -<8DDB> <8DDB> -<8DDD> <8DDD> <8B97> -<8DDF> <8DDF> -<8DE1> <8DE1> <90D5> -<8DE3> <8DE3> -<8DE8> <8DE8> <8CD7> -<8DEA> <8DEB> -<8DEF> <8DEF> <9848> -<8DF3> <8DF3> <92B5> -<8DF5> <8DF5> <9148> -<8DFC> <8DFC> -<8DFF> <8DFF> -<8E08> <8E09> -<8E0A> <8E0A> <9778> -<8E0F> <8E0F> <93A5> -<8E10> <8E10> -<8E1D> <8E1E> -<8E1F> <8E1F> -<8E2A> <8E2A> -<8E30> <8E30> -<8E34> <8E34> -<8E35> <8E35> -<8E42> <8E42> -<8E44> <8E44> <92FB> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E4C> <8E4C> -<8E50> <8E50> -<8E55> <8E55> -<8E59> <8E59> -<8E5F> <8E5F> <90D6> -<8E60> <8E60> -<8E63> <8E63> -<8E64> <8E64> -<8E72> <8E72> -<8E74> <8E74> <8F52> -<8E76> <8E76> -<8E7C> <8E7C> -<8E81> <8E81> -<8E84> <8E84> -<8E85> <8E85> -<8E87> <8E87> -<8E8A> <8E8A> -<8E8B> <8E8B> -<8E8D> <8E8D> <96F4> -<8E91> <8E91> -<8E93> <8E93> -<8E94> <8E94> -<8E99> <8E99> -<8EA1> <8EA1> -<8EAA> <8EAA> -<8EAB> <8EAB> <9067> -<8EAC> <8EAC> -<8EAF> <8EAF> <8BEB> -<8EB0> <8EB0> -<8EB1> <8EB1> -<8EBE> <8EBE> -<8EC0> <8EC0> <8BEB> -<8EC5> <8EC5> -endbfrange - -100 beginbfrange -<8EC6> <8EC6> -<8EC8> <8EC8> -<8ECA> <8ECA> <8ED4> -<8ECB> <8ECB> -<8ECC> <8ECC> <8B4F> -<8ECD> <8ECD> <8C52> -<8ECF> <8ECF> -<8ED2> <8ED2> <8CAC> -<8EDB> <8EDB> -<8EDF> <8EDF> <93EE> -<8EE2> <8EE2> <935D> -<8EE3> <8EE3> -<8EEB> <8EEB> -<8EF8> <8EF8> <8EB2> -<8EFB> <8EFB> -<8EFC> <8EFC> -<8EFD> <8EFD> <8C79> -<8EFE> <8EFE> -<8F03> <8F03> <8A72> -<8F05> <8F05> -<8F09> <8F09> <8DDA> -<8F0A> <8F0A> -<8F0C> <8F0C> -<8F12> <8F12> -<8F13> <8F13> -<8F14> <8F14> <95E3> -<8F15> <8F15> -<8F19> <8F19> -<8F1B> <8F1B> -<8F1C> <8F1C> -<8F1D> <8F1D> <8B50> -<8F1F> <8F1F> -<8F26> <8F26> -<8F29> <8F29> <9479> -<8F2A> <8F2A> <97D6> -<8F2F> <8F2F> <8F53> -<8F33> <8F33> -<8F38> <8F38> <9741> -<8F39> <8F39> -<8F3B> <8F3B> -<8F3E> <8F3E> -<8F3F> <8F3F> <9760> -<8F42> <8F42> -<8F44> <8F44> <8A8D> -<8F45> <8F45> -<8F46> <8F46> -<8F49> <8F49> -<8F4C> <8F4C> -<8F4D> <8F4D> <9351> -<8F4E> <8F4E> -<8F57> <8F57> -<8F5C> <8F5C> -<8F5F> <8F5F> <8D8C> -<8F61> <8F61> <8C44> -<8F62> <8F64> -<8F9B> <8F9B> <9068> -<8F9C> <8F9C> -<8F9E> <8F9E> <8EAB> -<8F9F> <8F9F> -<8FA3> <8FA3> -<8FA7> <8FA7> <999F> -<8FA8> <8FA8> <999E> -<8FAD> <8FAD> -<8FAE> <8FAE> -<8FAF> <8FAF> -<8FB0> <8FB0> <9243> -<8FB1> <8FB1> <904A> -<8FB2> <8FB2> <945F> -<8FB7> <8FB7> -<8FBA> <8FBA> <95D3> -<8FBB> <8FBB> <92D2> -<8FBC> <8FBC> <8D9E> -<8FBF> <8FBF> <9248> -<8FC2> <8FC2> <8949> -<8FC4> <8FC4> <9698> -<8FC5> <8FC5> <9076> -<8FCE> <8FCE> <8C7D> -<8FD1> <8FD1> <8BDF> -<8FD4> <8FD4> <95D4> -<8FDA> <8FDA> -<8FE2> <8FE2> -<8FE5> <8FE5> -<8FE6> <8FE6> <89DE> -<8FE9> <8FE9> <93F4> -<8FEA> <8FEA> -<8FEB> <8FEB> <9497> -<8FED> <8FED> <9352> -<8FEF> <8FEF> -<8FF0> <8FF0> <8F71> -<8FF4> <8FF4> -<8FF7> <8FF7> <96C0> -<8FF8> <8FF8> -<8FF9> <8FFA> -<8FFD> <8FFD> <92C7> -<9000> <9000> <91DE> -<9001> <9001> <9197> -<9003> <9003> <93A6> -<9005> <9005> -<9006> <9006> <8B74> -<900B> <900B> -endbfrange - -100 beginbfrange -<900D> <900D> -<900E> <900E> -<900F> <900F> <93A7> -<9010> <9010> <9280> -<9011> <9011> -<9013> <9013> <92FC> -<9014> <9014> <9372> -<9015> <9015> -<9016> <9016> -<9017> <9017> <9080> -<9019> <9019> <9487> -<901A> <901A> <92CA> -<901D> <901D> <90C0> -<901E> <901E> -<901F> <901F> <91AC> -<9020> <9020> <91A2> -<9021> <9021> -<9022> <9022> <88A7> -<9023> <9023> <9841> -<9027> <9027> -<902E> <902E> <91DF> -<9031> <9031> <8F54> -<9032> <9032> <9069> -<9035> <9035> -<9036> <9036> -<9038> <9038> <88ED> -<9039> <9039> -<903C> <903C> <954E> -<903E> <903E> -<9041> <9041> <93D9> -<9042> <9042> <908B> -<9045> <9045> <9278> -<9047> <9047> <8BF6> -<9049> <9049> -<904A> <904A> <9756> -<904B> <904B> <895E> -<904D> <904D> <95D5> -<904E> <904E> <89DF> -<904F> <9052> -<9053> <9053> <93B9> -<9054> <9054> <9242> -<9055> <9055> <88E1> -<9056> <9056> -<9058> <9058> -<9059> <9059> -<905C> <905C> <91BB> -<905E> <905E> -<9060> <9060> <8993> -<9061> <9061> <916B> -<9063> <9063> <8CAD> -<9065> <9065> <9779> -<9067> <9067> -<9068> <9068> -<9069> <9069> <934B> -<906D> <906D> <9198> -<906E> <906E> <8ED5> -<906F> <906F> -<9072> <9072> -<9075> <9075> <8F85> -<9076> <9076> -<9077> <9077> <914A> -<9078> <9078> <9149> -<907A> <907A> <88E2> -<907C> <907C> <97C9> -<907D> <907D> -<907F> <907F> <94F0> -<9080> <9080> -<9081> <9081> -<9082> <9082> -<9083> <9083> -<9084> <9084> <8AD2> -<9087> <9087> -<9089> <9089> -<908A> <908A> -<908F> <908F> -<9091> <9091> <9757> -<90A3> <90A3> <93DF> -<90A6> <90A6> <964D> -<90A8> <90A8> -<90AA> <90AA> <8ED7> -<90AF> <90AF> -<90B1> <90B1> -<90B5> <90B5> -<90B8> <90B8> <9340> -<90C1> <90C1> <88E8> -<90CA> <90CA> <8D78> -<90CE> <90CE> <9859> -<90DB> <90DB> -<90DE> <90DE> -<90E1> <90E1> <8C53> -<90E2> <90E2> -<90E4> <90E4> -<90E8> <90E8> <9594> -<90ED> <90ED> <8A73> -<90F5> <90F5> <9758> -<90F7> <90F7> <8BBD> -<90FD> <90FD> <9373> -<9102> <9102> -<9112> <9112> -<9115> <9115> -endbfrange - -100 beginbfrange -<9119> <9119> -<9127> <9127> -<912D> <912D> <9341> -<9130> <9130> -<9132> <9132> -<9149> <9149> <93D1> -<914A> <914A> -<914B> <914B> <8F55> -<914C> <914C> <8EDE> -<914D> <914D> <947A> -<914E> <914E> <9291> -<9152> <9152> <8EF0> -<9154> <9154> <908C> -<9156> <9156> -<9158> <9158> -<9162> <9162> <907C> -<9163> <9163> -<9165> <9165> -<9169> <9169> -<916A> <916A> <978F> -<916C> <916C> <8F56> -<9172> <9172> -<9173> <9173> -<9175> <9175> <8D79> -<9177> <9177> <8D93> -<9178> <9178> <8E5F> -<9182> <9182> -<9187> <9187> <8F86> -<9189> <9189> -<918B> <918B> -<918D> <918D> <91E7> -<9190> <9190> <8CED> -<9192> <9192> <90C1> -<9197> <9197> <94AE> -<919C> <919C> <8F58> -<91A2> <91A2> -<91A4> <91A4> <8FDD> -<91AA> <91AA> -<91AB> <91AB> -<91AC> <91AC> <8FDD> -<91AF> <91AF> -<91B1> <91B1> <94AE> -<91B4> <91B4> -<91B5> <91B5> -<91B8> <91B8> <8FF8> -<91BA> <91BA> -<91C0> <91C1> -<91C6> <91C6> <94CE> -<91C7> <91C7> <8DD1> -<91C8> <91C8> <8EDF> -<91C9> <91C9> -<91CB> <91CB> -<91CC> <91CC> <97A2> -<91CD> <91CD> <8F64> -<91CE> <91CE> <96EC> -<91CF> <91CF> <97CA> -<91D0> <91D0> -<91D1> <91D1> <8BE0> -<91D6> <91D6> -<91D7> <91D7> -<91D8> <91D8> <9342> -<91DA> <91DA> -<91DB> <91DB> -<91DC> <91DC> <8A98> -<91DD> <91DD> <906A> -<91DE> <91DE> -<91DF> <91DF> -<91E1> <91E1> -<91E3> <91E3> <92DE> -<91E4> <91E5> -<91E6> <91E6> <9674> -<91E7> <91E7> <8BFA> -<91ED> <91EE> -<91F5> <91F6> -<91FC> <91FC> -<91FF> <91FF> -<9206> <9206> -<920A> <920A> -<920D> <920D> <93DD> -<920E> <920E> <8A62> -<9210> <9210> -<9211> <9211> -<9214> <9214> -<9215> <9215> -<921E> <921E> -<9229> <9229> -<922C> <922C> -<9234> <9234> <97E9> -<9237> <9237> <8CD8> -<9239> <9239> -<923A> <923A> -<923C> <923C> -<923F> <923F> -<9240> <9240> -<9244> <9244> <9353> -<9245> <9245> -<9248> <9248> -<9249> <9249> -<924B> <924B> -<924E> <924E> -endbfrange - -100 beginbfrange -<9250> <9250> -<9251> <9251> -<9257> <9257> -<9259> <9259> -<925A> <925A> -<925B> <925B> <8994> -<925E> <925E> -<9262> <9262> <94AB> -<9264> <9264> -<9266> <9266> <8FDE> -<9267> <9267> -<9271> <9271> <8D7A> -<9277> <9278> -<927E> <927E> <9667> -<9280> <9280> <8BE2> -<9283> <9283> <8F65> -<9285> <9285> <93BA> -<9288> <9288> -<9291> <9291> <914C> -<9293> <9293> -<9295> <9295> -<9296> <9296> -<9298> <9298> <96C1> -<929A> <929A> <92B6> -<929B> <929B> -<929C> <929C> -<92A7> <92A7> -<92AD> <92AD> <914B> -<92B7> <92B7> -<92B9> <92B9> -<92CF> <92CF> -<92D0> <92D0> -<92D2> <92D2> <964E> -<92D3> <92D3> -<92D5> <92D5> -<92D7> <92D7> -<92D9> <92D9> -<92E0> <92E0> -<92E4> <92E4> <8F9B> -<92E7> <92E7> -<92E9> <92E9> -<92EA> <92EA> <95DD> -<92ED> <92ED> <8973> -<92F2> <92F2> <9565> -<92F3> <92F3> <9292> -<92F8> <92F8> <8B98> -<92F9> <92F9> -<92FA> <92FA> -<92FB> <92FB> -<92FC> <92FC> <8D7C> -<92FF> <92FF> -<9302> <9302> -<9306> <9306> <8E4B> -<930F> <930F> -<9310> <9310> <908D> -<9318> <9318> <908E> -<9319> <9319> -<931A> <931A> -<931D> <931D> -<931E> <931E> -<9320> <9320> <8FF9> -<9321> <9321> -<9322> <9322> -<9323> <9323> -<9325> <9325> -<9326> <9326> <8BD1> -<9328> <9328> <9564> -<932B> <932B> <8EE0> -<932C> <932C> <9842> -<932E> <932E> -<932F> <932F> <8DF6> -<9332> <9332> <985E> -<9335> <9335> -<933A> <933A> -<933B> <933B> -<9344> <9344> -<9348> <9348> -<934B> <934B> <93E7> -<934D> <934D> <9374> -<9354> <9354> <92D5> -<9356> <9356> -<9357> <9357> -<935B> <935B> <9262> -<935C> <935C> -<9360> <9360> -<936C> <936C> <8C4C> -<936E> <936E> -<9370> <9370> -<9375> <9375> <8CAE> -<937C> <937C> -<937E> <937E> <8FDF> -<938C> <938C> <8A99> -<9394> <9394> -<9396> <9396> <8DBD> -<9397> <9397> <9199> -<939A> <939A> <92C8> -<93A4> <93A4> -<93A7> <93A7> <8A5A> -<93AC> <93AD> -<93AE> <93AE> <92C1> -endbfrange - -100 beginbfrange -<93B0> <93B0> -<93B9> <93B9> -<93C3> <93C3> -<93C6> <93C6> -<93C8> <93C8> -<93D0> <93D0> -<93D1> <93D1> <934C> -<93D6> <93D7> -<93D8> <93D8> -<93DD> <93DD> -<93DE> <93DE> -<93E1> <93E1> <8BBE> -<93E4> <93E4> -<93E5> <93E5> -<93E8> <93E8> -<93F8> <93F8> -<9403> <9403> -<9407> <9407> -<9410> <9410> -<9413> <9413> -<9414> <9414> -<9418> <9418> <8FE0> -<9419> <9419> <93A8> -<941A> <941A> -<9421> <9421> -<942B> <942B> -<9431> <9431> -<9435> <9435> -<9436> <9436> -<9438> <9438> <91F6> -<943A> <943A> -<9441> <9441> -<9444> <9444> -<9445> <9445> -<9448> <9448> -<9451> <9451> <8AD3> -<9452> <9452> -<9453> <9453> <96F8> -<945A> <945A> -<945B> <945B> -<945E> <945E> -<9460> <9460> -<9462> <9462> -<946A> <946A> -<9470> <9470> -<9475> <9475> -<9477> <9477> -<947C> <947C> -<947D> <947D> -<947E> <947E> -<947F> <947F> -<9481> <9481> -<9577> <9577> <92B7> -<9580> <9580> <96E5> -<9582> <9582> -<9583> <9583> <914D> -<9587> <9587> -<9589> <9589> <95C2> -<958A> <958A> -<958B> <958B> <8A4A> -<958F> <958F> <895B> -<9591> <9591> <8AD5> -<9592> <9592> -<9593> <9593> <8AD4> -<9594> <9594> -<9596> <9596> -<9598> <9599> -<95A0> <95A0> -<95A2> <95A2> <8AD6> -<95A3> <95A3> <8A74> -<95A4> <95A4> <8D7D> -<95A5> <95A5> <94B4> -<95A7> <95A7> -<95A8> <95A8> -<95AD> <95AD> -<95B2> <95B2> <897B> -<95B9> <95B9> -<95BB> <95BB> -<95BC> <95BC> -<95BE> <95BE> -<95C3> <95C3> -<95C7> <95C7> <88C5> -<95CA> <95CA> -<95CC> <95CC> -<95CD> <95CD> -<95D4> <95D4> -<95D5> <95D5> -<95D6> <95D6> -<95D8> <95D8> <93AC> -<95DC> <95DC> -<95E1> <95E1> -<95E2> <95E2> -<95E5> <95E5> -<961C> <961C> <958C> -<9621> <9621> -<9628> <9628> -<962A> <962A> <8DE3> -<962E> <962F> -<9632> <9632> <9668> -<963B> <963B> <916A> -endbfrange - -100 beginbfrange -<963F> <963F> <88A2> -<9640> <9640> <91C9> -<9642> <9642> -<9644> <9644> <958D> -<964B> <964B> -<964C> <964C> -<964D> <964D> <8D7E> -<964F> <964F> -<9650> <9650> <8CC0> -<965B> <965B> <95C3> -<965C> <965C> -<965D> <965D> -<965E> <965E> -<965F> <965F> -<9662> <9662> <8940> -<9663> <9663> <9077> -<9664> <9664> <8F9C> -<9665> <9665> <8AD7> -<9666> <9666> -<966A> <966A> <9486> -<966C> <966C> -<9670> <9670> <8941> -<9672> <9672> -<9673> <9673> <92C2> -<9675> <9675> <97CB> -<9676> <9676> <93A9> -<9677> <9677> -<9678> <9678> <97A4> -<967A> <967A> <8CAF> -<967D> <967D> <977A> -<9685> <9685> <8BF7> -<9686> <9686> <97B2> -<9688> <9688> <8C47> -<968A> <968A> <91E0> -<968B> <968B> -<968D> <968D> -<968E> <968E> <8A4B> -<968F> <968F> <908F> -<9694> <9694> <8A75> -<9695> <9695> -<9697> <9697> -<9698> <9698> -<9699> <9699> <8C84> -<969B> <969B> <8DDB> -<969C> <969C> <8FE1> -<969D> <969D> -<96A0> <96A0> <8942> -<96A3> <96A3> <97D7> -<96A7> <96A7> -<96A8> <96A8> -<96AA> <96AA> -<96AF> <96AF> -<96B0> <96B0> -<96B1> <96B2> -<96B4> <96B4> -<96B6> <96B6> -<96B7> <96B7> <97EA> -<96B8> <96B9> -<96BB> <96BB> <90C7> -<96BC> <96BC> <94B9> -<96C0> <96C0> <909D> -<96C1> <96C1> <8AE5> -<96C4> <96C4> <9759> -<96C5> <96C5> <89EB> -<96C6> <96C6> <8F57> -<96C7> <96C7> <8CD9> -<96C9> <96C9> -<96CB> <96CB> -<96CC> <96CC> <8E93> -<96CD> <96CD> -<96CE> <96CE> -<96D1> <96D1> <8E47> -<96D5> <96D5> -<96D6> <96D6> -<96D9> <96D9> <99D4> -<96DB> <96DB> <9097> -<96DC> <96DC> -<96E2> <96E2> <97A3> -<96E3> <96E3> <93EF> -<96E8> <96E8> <894A> -<96EA> <96EA> <90E1> -<96EB> <96EB> <8EB4> -<96F0> <96F0> <95B5> -<96F2> <96F2> <895F> -<96F6> <96F6> <97EB> -<96F7> <96F7> <978B> -<96F9> <96F9> -<96FB> <96FB> <9364> -<9700> <9700> <8EF9> -<9704> <9704> -<9706> <9706> -<9707> <9707> <906B> -<9708> <9708> -<970A> <970A> <97EC> -<970D> <970D> -<970E> <970E> -<970F> <970F> -<9711> <9711> -<9713> <9713> -<9716> <9716> -endbfrange - -100 beginbfrange -<9719> <9719> -<971C> <971C> <919A> -<971E> <971E> <89E0> -<9724> <9724> -<9727> <9727> <96B6> -<972A> <972A> -<9730> <9730> -<9732> <9732> <9849> -<9733> <9733> -<9738> <9738> <9E50> -<9739> <9739> -<973B> <973B> -<973D> <973E> -<9742> <9742> -<9743> <9743> -<9744> <9744> -<9746> <9746> -<9748> <9748> -<9749> <9749> -<974D> <974D> -<974F> <974F> -<9751> <9751> -<9752> <9752> <90C2> -<9755> <9755> -<9756> <9756> <96F5> -<9759> <9759> <90C3> -<975C> <975C> -<975E> <975E> <94F1> -<9760> <9760> -<9761> <9761> -<9762> <9762> <96CA> -<9764> <9764> -<9766> <9766> -<9768> <9768> -<9769> <9769> <8A76> -<976B> <976B> -<976D> <976D> <9078> -<9771> <9771> -<9774> <9774> <8C43> -<9779> <9779> -<977A> <977A> -<977C> <977C> -<9781> <9781> -<9784> <9784> <8A93> -<9785> <9785> -<9786> <9786> -<978B> <978B> -<978D> <978D> <88C6> -<978F> <9790> -<9798> <9798> <8FE2> -<979C> <979C> -<97A0> <97A0> <8B66> -<97A3> <97A3> -<97A6> <97A6> -<97A8> <97A8> -<97AB> <97AB> -<97AD> <97AD> <95DA> -<97B3> <97B4> -<97C3> <97C3> -<97C6> <97C6> -<97C8> <97C8> -<97CB> <97CB> -<97D3> <97D3> <8AD8> -<97DC> <97DC> -<97ED> <97ED> -<97EE> <97EE> <9442> -<97F2> <97F2> -<97F3> <97F3> <89B9> -<97F5> <97F5> -<97F6> <97F6> -<97FB> <97FB> <8943> -<97FF> <97FF> <8BBF> -<9801> <9801> <95C5> -<9802> <9802> <92B8> -<9803> <9803> <8DA0> -<9805> <9805> <8D80> -<9806> <9806> <8F87> -<9808> <9808> <907B> -<980C> <980C> -<980F> <980F> -<9810> <9810> <9761> -<9811> <9811> <8AE6> -<9812> <9812> <94D0> -<9813> <9813> <93DA> -<9817> <9817> <909C> -<9818> <9818> <97CC> -<981A> <981A> <8C7A> -<9821> <9821> -<9824> <9824> -<982C> <982C> <966A> -<982D> <982D> <93AA> -<9830> <9830> <966A> -<9834> <9834> <896F> -<9837> <9837> -<9838> <9838> -<983B> <983B> <9570> -<983C> <983C> <978A> -<983D> <983D> -<9846> <9846> -<984B> <984B> -endbfrange - -100 beginbfrange -<984C> <984C> <91E8> -<984D> <984E> <8A7A> -<984F> <984F> -<9854> <9854> <8AE7> -<9855> <9855> <8CB0> -<9857> <9857> -<9858> <9858> <8AE8> -<985A> <985A> <935E> -<985B> <985B> <935E> -<985E> <985E> <97DE> -<9865> <9865> -<9867> <9867> <8CDA> -<986B> <986B> -<986F> <9870> -<9871> <9871> -<9873> <9873> -<9874> <9874> -<98A8> <98A8> <9597> -<98AA> <98AA> -<98AF> <98AF> -<98B1> <98B1> -<98B6> <98B6> -<98C3> <98C3> -<98C4> <98C4> -<98C6> <98C6> -<98DB> <98DB> <94F2> -<98DC> <98DC> -<98DF> <98DF> <9048> -<98E2> <98E2> <8B51> -<98E9> <98E9> -<98EB> <98EB> -<98ED> <98ED> <99AA> -<98EE> <98EE> <9F5A> -<98EF> <98EF> <94D1> -<98F2> <98F2> <88F9> -<98F4> <98F4> <88B9> -<98FC> <98FC> <8E94> -<98FD> <98FD> <964F> -<98FE> <98FE> <8FFC> -<9903> <9903> -<9905> <9905> <96DD> -<9909> <9909> -<990A> <990A> <977B> -<990C> <990C> <8961> -<9910> <9910> <8E60> -<9912> <9912> -<9913> <9913> <89EC> -<9914> <9914> -<9918> <9918> -<991D> <991E> -<9920> <9920> -<9921> <9921> -<9924> <9924> -<9927> <9927> -<9928> <9928> <8AD9> -<992C> <992C> -<992E> <992E> -<993D> <993E> -<9942> <9942> -<9945> <9945> -<9949> <9949> -<994B> <994B> -<994C> <994C> -<9950> <9950> -<9951> <9952> -<9955> <9955> -<9957> <9957> <8BC0> -<9996> <9996> <8EF1> -<9997> <9998> -<9999> <9999> <8D81> -<999E> <999E> -<99A5> <99A5> -<99A8> <99A8> <8A5D> -<99AC> <99AC> <946E> -<99AD> <99AE> -<99B3> <99B3> <9279> -<99B4> <99B4> <93E9> -<99BC> <99BC> -<99C1> <99C1> <949D> -<99C4> <99C4> <91CA> -<99C5> <99C5> <8977> -<99C6> <99C6> <8BEC> -<99C8> <99C8> <8BED> -<99D0> <99D0> <9293> -<99D1> <99D1> -<99D2> <99D2> <8BEE> -<99D5> <99D5> <89ED> -<99D8> <99D8> -<99DB> <99DB> -<99DD> <99DD> -<99DF> <99DF> -<99E2> <99E2> -<99ED> <99EE> -<99F1> <99F2> -<99F8> <99F8> -<99FB> <99FB> -<99FF> <99FF> <8F78> -<9A01> <9A01> -<9A05> <9A05> -<9A0E> <9A0E> <8B52> -endbfrange - -100 beginbfrange -<9A0F> <9A0F> -<9A12> <9A12> <919B> -<9A13> <9A13> <8CB1> -<9A19> <9A19> -<9A28> <9A28> <91CB> -<9A2B> <9A2B> -<9A30> <9A30> <93AB> -<9A37> <9A37> -<9A3E> <9A3E> -<9A40> <9A40> -<9A42> <9A42> -<9A43> <9A43> -<9A45> <9A45> -<9A4D> <9A4D> -<9A4E> <9A4E> -<9A52> <9A52> <91CB> -<9A55> <9A55> -<9A57> <9A57> -<9A5A> <9A5A> <8BC1> -<9A5B> <9A5B> -<9A5F> <9A5F> -<9A62> <9A62> -<9A64> <9A64> -<9A65> <9A65> -<9A69> <9A69> -<9A6A> <9A6A> -<9A6B> <9A6B> -<9AA8> <9AA8> <8D9C> -<9AAD> <9AAD> -<9AB0> <9AB0> -<9AB8> <9AB8> <8A5B> -<9ABC> <9ABC> -<9AC0> <9AC0> -<9AC4> <9AC4> <9091> -<9ACF> <9ACF> -<9AD1> <9AD1> -<9AD3> <9AD4> -<9AD8> <9AD8> <8D82> -<9AD9> <9AD9> -<9ADC> <9ADC> -<9ADE> <9ADF> -<9AE2> <9AE3> -<9AE6> <9AE6> -<9AEA> <9AEA> <94AF> -<9AEB> <9AEB> -<9AED> <9AED> <9545> -<9AEE> <9AEE> -<9AEF> <9AEF> -<9AF1> <9AF1> -<9AF4> <9AF4> -<9AF7> <9AF7> -<9AFB> <9AFB> -<9B06> <9B06> -<9B18> <9B18> -<9B1A> <9B1A> -<9B1F> <9B1F> -<9B22> <9B23> -<9B25> <9B25> -<9B27> <9B2A> -<9B2E> <9B2F> -<9B31> <9B31> <9F54> -<9B32> <9B32> -<9B3B> <9B3B> -<9B3C> <9B3C> <8B53> -<9B41> <9B41> <8A40> -<9B42> <9B42> <8DB0> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> <96A3> -<9B4D> <9B4E> -<9B4F> <9B4F> -<9B51> <9B51> -<9B54> <9B54> <9682> -<9B58> <9B58> -<9B5A> <9B5A> <8B9B> -<9B6F> <9B6F> <9844> -<9B72> <9B72> -<9B74> <9B74> -<9B75> <9B75> -<9B83> <9B83> -<9B8E> <9B8E> <88BC> -<9B8F> <9B8F> -<9B91> <9B91> -<9B92> <9B92> <95A9> -<9B93> <9B93> -<9B96> <9B97> -<9B9F> <9BA0> -<9BA8> <9BA8> -<9BAA> <9BAA> <968E> -<9BAB> <9BAB> <8E4C> -<9BAD> <9BAD> <8DF8> -<9BAE> <9BAE> <914E> -<9BB1> <9BB1> -<9BB4> <9BB4> -<9BB9> <9BB9> -<9BBB> <9BBB> -<9BC0> <9BC0> -<9BC6> <9BC6> -<9BC9> <9BC9> <8CEF> -<9BCA> <9BCA> -endbfrange - -100 beginbfrange -<9BCF> <9BCF> -<9BD1> <9BD2> -<9BD4> <9BD4> -<9BD6> <9BD6> <8E49> -<9BDB> <9BDB> <91E2> -<9BE1> <9BE1> -<9BE2> <9BE2> -<9BE3> <9BE3> -<9BE4> <9BE4> -<9BE8> <9BE8> <8C7E> -<9BF0> <9BF0> -<9BF1> <9BF1> -<9BF2> <9BF2> -<9BF5> <9BF5> <88B1> -<9C00> <9C00> -<9C04> <9C04> -<9C06> <9C06> -<9C08> <9C08> -<9C09> <9C09> -<9C0A> <9C0A> -<9C0C> <9C0C> -<9C0D> <9C0D> <8A82> -<9C10> <9C10> <986B> -<9C12> <9C12> -<9C13> <9C13> -<9C14> <9C14> -<9C15> <9C15> -<9C1B> <9C1B> -<9C21> <9C21> -<9C24> <9C24> -<9C25> <9C25> -<9C2D> <9C2D> <9568> -<9C2E> <9C2E> -<9C2F> <9C2F> <88F1> -<9C30> <9C30> -<9C32> <9C32> -<9C39> <9C39> <8A8F> -<9C3A> <9C3A> -<9C3B> <9C3B> <8956> -<9C3E> <9C3E> -<9C46> <9C46> -<9C47> <9C47> -<9C48> <9C48> <924C> -<9C52> <9C52> <9690> -<9C57> <9C57> <97D8> -<9C5A> <9C5A> -<9C60> <9C60> -<9C67> <9C67> -<9C76> <9C76> -<9C78> <9C78> -<9CE5> <9CE5> <92B9> -<9CE7> <9CE7> -<9CE9> <9CE9> <94B5> -<9CEB> <9CEB> -<9CEC> <9CEC> -<9CF0> <9CF0> -<9CF3> <9CF3> <9650> -<9CF4> <9CF4> <96C2> -<9CF6> <9CF6> <93CE> -<9D03> <9D03> -<9D06> <9D06> -<9D07> <9D07> <93BC> -<9D08> <9D08> -<9D09> <9D09> -<9D0E> <9D0E> <89A8> -<9D12> <9D12> -<9D15> <9D15> -<9D1B> <9D1B> <8995> -<9D1F> <9D1F> -<9D23> <9D23> -<9D26> <9D26> -<9D28> <9D28> <8A9B> -<9D2A> <9D2A> -<9D2B> <9D2B> <8EB0> -<9D2C> <9D2C> <89A7> -<9D3B> <9D3B> <8D83> -<9D3E> <9D3E> -<9D3F> <9D3F> -<9D41> <9D41> -<9D44> <9D44> -<9D46> <9D46> -<9D48> <9D48> -<9D50> <9D50> -<9D51> <9D51> -<9D59> <9D59> -<9D5C> <9D5C> <894C> -<9D5D> <9D5E> -<9D60> <9D60> <8D94> -<9D61> <9D61> <96B7> -<9D64> <9D64> -<9D6B> <9D6B> -<9D6C> <9D6C> <9651> -<9D6F> <9D6F> -<9D70> <9D70> -<9D72> <9D72> -<9D7A> <9D7A> -<9D87> <9D87> -<9D89> <9D89> -<9D8F> <9D8F> <8C7B> -<9D9A> <9D9A> -endbfrange - -100 beginbfrange -<9DA4> <9DA4> -<9DA9> <9DA9> -<9DAB> <9DAB> -<9DAF> <9DAF> -<9DB2> <9DB2> -<9DB4> <9DB4> <92DF> -<9DB8> <9DB8> -<9DBA> <9DBA> -<9DBB> <9DBB> -<9DC1> <9DC1> -<9DC2> <9DC2> -<9DC4> <9DC4> -<9DC6> <9DC6> -<9DCF> <9DCF> -<9DD3> <9DD3> -<9DD7> <9DD7> <89A8> -<9DD9> <9DD9> -<9DE6> <9DE6> -<9DED> <9DED> -<9DEF> <9DEF> -<9DF2> <9DF2> <9868> -<9DF8> <9DF8> -<9DF9> <9DF9> <91E9> -<9DFA> <9DFA> <8DEB> -<9DFD> <9DFD> -<9E19> <9E19> -<9E1A> <9E1B> -<9E1E> <9E1E> -<9E75> <9E75> -<9E78> <9E78> <8CB2> -<9E79> <9E79> -<9E7C> <9E7C> <8CB2> -<9E7D> <9E7D> -<9E7F> <9E7F> <8EAD> -<9E81> <9E81> -<9E88> <9E88> -<9E8B> <9E8C> -<9E91> <9E91> -<9E92> <9E92> -<9E93> <9E93> <985B> -<9E95> <9E95> -<9E97> <9E97> <97ED> -<9E9D> <9E9D> -<9E9F> <9E9F> <97D9> -<9EA5> <9EA5> -<9EA6> <9EA6> <949E> -<9EA9> <9EA9> -<9EAA> <9EAA> -<9EAD> <9EAD> -<9EB4> <9EB4> <8D8D> -<9EB5> <9EB5> <96CB> -<9EB8> <9EB8> -<9EB9> <9EB9> <8D8D> -<9EBA> <9EBA> <96CB> -<9EBB> <9EBB> <9683> -<9EBC> <9EBC> <9BF5> -<9EBE> <9EBE> <9F80> -<9EBF> <9EBF> <969B> -<9EC4> <9EC4> <89A9> -<9ECC> <9ECC> -<9ECD> <9ECD> <8B6F> -<9ECE> <9ED0> -<9ED1> <9ED1> -<9ED2> <9ED2> <8D95> -<9ED4> <9ED4> -<9ED8> <9ED8> -<9ED9> <9ED9> <96D9> -<9EDB> <9EDB> <91E1> -<9EDC> <9EDC> -<9EDD> <9EDD> -<9EDE> <9EDE> -<9EE0> <9EE0> -<9EE5> <9EE5> -<9EE8> <9EE8> -<9EEF> <9EEF> -<9EF4> <9EF4> -<9EF6> <9EF7> -<9EF9> <9EF9> -<9EFB> <9EFD> -<9F07> <9F08> -<9F0E> <9F0E> <9343> -<9F13> <9F13> <8CDB> -<9F15> <9F15> -<9F20> <9F20> <916C> -<9F21> <9F21> -<9F2C> <9F2C> -<9F3B> <9F3B> <9540> -<9F3E> <9F3E> -<9F4A> <9F4A> -<9F4B> <9F4B> -<9F4E> <9F4E> -<9F4F> <9F4F> -<9F52> <9F52> -<9F54> <9F54> -<9F5F> <9F61> -<9F62> <9F62> <97EE> -<9F63> <9F63> -<9F66> <9F67> -<9F6A> <9F6A> -<9F6C> <9F6C> -endbfrange - -100 beginbfrange -<9F72> <9F72> -<9F76> <9F76> -<9F77> <9F77> -<9F8D> <9F8D> <97B4> -<9F95> <9F95> -<9F9C> <9F9C> -<9F9D> <9F9D> -<9FA0> <9FA0> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <8143> - <8141> - <8144> - <8147> - <8146> - <8148> - <8169> - <816F> - <816B> - <8149> - - <8194> - <8190> - <8193> - <8195> - - <8169> - <8196> - <817B> - <8143> - <817C> - <8144> - <815E> - <824F> - <8146> - <8183> - <8181> - <8184> - <8148> - <8197> - <8260> - <816D> - <815F> - <816E> -endbfrange - -14 beginbfrange - <814F> - <8151> - <814D> - <8281> - <816F> - <8162> - <8170> - <8160> - - <8191> - <81CA> - <8150> - - <818F> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-90pv-RKSJ b/Resources/cmap/UCS2-90pv-RKSJ deleted file mode 100644 index de82e14a149..00000000000 --- a/Resources/cmap/UCS2-90pv-RKSJ +++ /dev/null @@ -1,6845 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-90pv-RKSJ) -%%Title: (UCS2-90pv-RKSJ) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_90pv_RKSJ) def - /Supplement 2 def -end def - -/CMapName /UCS2-90pv-RKSJ def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <005B> <00> -<005C> <005C> <80> -<005D> <007F> <5D> -<00A0> <00A0> -<00A2> <00A3> <8191> -<00A5> <00A5> <5C> -<00A6> <00A6> <7C> -<00A7> <00A7> <8198> -<00A8> <00A8> <814E> -<00A9> <00A9> -<00AC> <00AC> <81CA> -<00AD> <00AD> <815D> -<00B0> <00B0> <818B> -<00B1> <00B1> <817D> -<00B4> <00B4> <814C> -<00B6> <00B6> <81F7> -<00B7> <00B7> <8145> -<00B8> <00B8> <8143> -<00D7> <00D7> <817E> -<00F7> <00F7> <8180> -<02D0> <02D0> <8146> -<0391> <03A1> <839F> -<03A3> <03A9> <83B0> -<03B1> <03C1> <83BF> -<03C3> <03C9> <83D0> -<0401> <0401> <8446> -<0410> <0415> <8440> -<0416> <042F> <8447> -<0430> <0435> <8470> -<0436> <043D> <8477> -<043E> <044F> <8480> -<0451> <0451> <8476> -<2010> <2010> <815D> -<2013> <2013> <815D> -<2014> <2014> <815C> -<2015> <2015> <815C> -<2016> <2016> <8161> -<2018> <2019> <8165> -<201C> <201D> <8167> -<2020> <2021> <81F5> -<2022> <2022> <8145> -<2025> <2025> <8164> -<2026> <2026> <8163> -<2027> <2027> <8145> -<2030> <2030> <81F1> -<2032> <2033> <818C> -<203B> <203B> <81A6> -<203E> <203E> <8150> -<20AC> <20AC> -<2103> <2103> <818E> -<2109> <2109> <8656> -<210A> <210A> <864B> -<2113> <2113> <8650> -<2116> <2116> <869B> -<2121> <2121> <869D> -<2122> <2122> -<212B> <212B> <81F0> -<2160> <216B> <859F> -<2170> <217B> <85B3> -<217F> <217F> <8645> -<2190> <2191> <81A9> -<2192> <2192> <81A8> -<2193> <2193> <81AB> -<21C4> <21C5> <86CC> -<21C6> <21C6> <86CB> -<21D2> <21D2> <81CB> -<21D4> <21D4> <81CC> -<21E6> <21E7> <86D0> -<21E8> <21E8> <86CF> -<21E9> <21E9> <86D2> -<2200> <2200> <81CD> -<2202> <2202> <81DD> -<2203> <2203> <81CE> -<2207> <2207> <81DE> -<2208> <2208> <81B8> -<220B> <220B> <81B9> -<220F> <220F> <83AE> -<2211> <2211> <83B0> -<2212> <2212> <817C> -<221A> <221A> <81E3> -<221D> <221D> <81E5> -<221E> <221E> <8187> -<221F> <221F> <8841> -<2220> <2220> <81DA> -<2225> <2225> <8161> -<2227> <2228> <81C8> -<2229> <2229> <81BF> -<222A> <222A> <81BE> -<222B> <222C> <81E7> -<222E> <222E> <8840> -<2234> <2234> <8188> -<2235> <2235> <81E6> -<2236> <2236> <8146> -<223C> <223C> <8160> -<223D> <223D> <81E4> -<2252> <2252> <81E0> -<2260> <2260> <8182> -<2261> <2261> <81DF> -<2266> <2267> <8185> -<226A> <226B> <81E1> -endbfrange - -100 beginbfrange -<2282> <2283> <81BC> -<2286> <2287> <81BA> -<2299> <2299> <819D> -<22A5> <22A5> <81DB> -<22BF> <22BF> <8842> -<22EF> <22EF> <8163> -<2312> <2312> <81DC> -<2460> <2473> <8540> -<2474> <2487> <855E> -<2488> <2490> <8592> -<249C> <24B5> <85DB> -<2500> <2500> <849F> -<2501> <2501> <84AA> -<2502> <2502> <84A0> -<2503> <2503> <84AB> -<250C> <250C> <84A1> -<250F> <250F> <84AC> -<2510> <2510> <84A2> -<2513> <2513> <84AD> -<2514> <2514> <84A4> -<2517> <2517> <84AF> -<2518> <2518> <84A3> -<251B> <251B> <84AE> -<251C> <251C> <84A5> -<251D> <251D> <84BA> -<2520> <2520> <84B5> -<2523> <2523> <84B0> -<2524> <2524> <84A7> -<2525> <2525> <84BC> -<2528> <2528> <84B7> -<252B> <252B> <84B2> -<252C> <252C> <84A6> -<252F> <252F> <84B6> -<2530> <2530> <84BB> -<2533> <2533> <84B1> -<2534> <2534> <84A8> -<2537> <2537> <84B8> -<2538> <2538> <84BD> -<253B> <253B> <84B3> -<253C> <253C> <84A9> -<253F> <253F> <84B9> -<2542> <2542> <84BE> -<254B> <254B> <84B4> -<2595> <2595> <8162> -<25A0> <25A0> <81A1> -<25A1> <25A1> <81A0> -<25B2> <25B2> <81A3> -<25B3> <25B3> <81A2> -<25BC> <25BC> <81A5> -<25BD> <25BD> <81A4> -<25C6> <25C6> <819F> -<25C7> <25C7> <819E> -<25C9> <25C9> <819D> -<25CB> <25CB> <819B> -<25CE> <25CE> <819D> -<25CF> <25CF> <819C> -<25EF> <25EF> <81FC> -<2605> <2605> <819A> -<2606> <2606> <8199> -<2609> <2609> <819D> -<260E> <260E> <86B4> -<261C> <261D> <86C8> -<261E> <261E> <86C7> -<261F> <261F> <86CA> -<2640> <2640> <818A> -<2642> <2642> <8189> -<2660> <2660> <86A3> -<2661> <2662> <86A1> -<2663> <2663> <86A4> -<2664> <2664> <869F> -<2665> <2666> <86A5> -<2667> <2667> <86A0> -<266A> <266A> <81F4> -<266D> <266D> <81F3> -<266F> <266F> <81F2> -<2776> <2778> <857C> -<2779> <277E> <8580> -<27A1> <27A1> <86D3> -<3000> <3002> <8140> -<3003> <3003> <8156> -<3004> <3004> <86B5> -<3005> <3007> <8158> -<3008> <3011> <8171> -<3012> <3012> <81A7> -<3013> <3013> <81AC> -<3014> <3015> <816B> -<301C> <301C> <8160> -<301D> <301E> <8854> -<301F> <301F> <8855> -<3020> <3020> <86B3> -<3041> <3093> <829F> -<3094> <3094> <8868> -<309B> <309C> <814A> -<309D> <309E> <8154> -<30A1> <30DF> <8340> -<30E0> <30F6> <8380> -<30F7> <30FA> <886A> -<30FB> <30FB> <8145> -<30FC> <30FC> <815B> -<30FD> <30FE> <8152> -endbfrange - -100 beginbfrange -<322A> <322F> <8741> -<3230> <3230> <8740> -<3231> <3231> <874D> -<3232> <3232> <8750> -<3233> <3233> <8753> -<3234> <3234> <874F> -<3235> <3235> <8754> -<3236> <3236> <8752> -<3237> <3237> <8748> -<3238> <3238> <8758> -<3239> <323A> <874B> -<323B> <323B> <8751> -<323C> <323D> <8755> -<323E> <323E> <874E> -<323F> <323F> <8757> -<3240> <3240> <8747> -<3242> <3243> <8749> -<3296> <3296> <8799> -<3298> <3298> <879B> -<3299> <3299> <879E> -<329D> <329D> <879A> -<329E> <329E> <879C> -<32A4> <32A9> <8793> -<3300> <3300> <87BD> -<3303> <3303> <87A7> -<3305> <3305> <87A4> -<330D> <330D> <87B0> -<3314> <3314> <87A2> -<3315> <3315> <87AA> -<3316> <3316> <87A3> -<3318> <3318> <87A9> -<331E> <331E> <87BE> -<3322> <3322> <87A0> -<3323> <3323> <87B2> -<3326> <3326> <87B3> -<3327> <3327> <87AB> -<332A> <332A> <87BF> -<332B> <332B> <87B5> -<3331> <3331> <87C0> -<3333> <3333> <87A5> -<3336> <3336> <87A8> -<3339> <3339> <87AE> -<333B> <333B> <87B4> -<3342> <3342> <87B1> -<3347> <3347> <87C1> -<3349> <3349> <879F> -<334A> <334A> <87AD> -<334D> <334D> <87A1> -<334E> <334E> <87A6> -<3351> <3351> <87AC> -<3357> <3357> <87AF> -<337B> <337B> <87E8> -<337C> <337C> <87E7> -<337D> <337D> <87E6> -<337E> <337E> <87E5> -<337F> <337F> <87FA> -<3385> <3387> <865A> -<338E> <338E> <864A> -<338F> <338F> <864C> -<3390> <3390> <8659> -<3396> <3397> <864E> -<3398> <3398> <8651> -<339C> <339C> <8640> -<339D> <339D> <8642> -<339E> <339E> <8648> -<339F> <339F> <8641> -<33A0> <33A0> <8643> -<33A1> <33A1> <8646> -<33A2> <33A2> <8649> -<33A4> <33A4> <8644> -<33A5> <33A5> <8647> -<33B0> <33B0> <8655> -<33B1> <33B1> <8654> -<33B2> <33B2> <8653> -<33B3> <33B3> <8652> -<33C4> <33C4> <864D> -<33CB> <33CB> <8658> -<33CD> <33CD> <869C> -<33D4> <33D4> <8657> -<4E00> <4E00> <88EA> -<4E01> <4E01> <929A> -<4E03> <4E03> <8EB5> -<4E07> <4E07> <969C> -<4E08> <4E08> <8FE4> -<4E09> <4E09> <8E4F> -<4E0A> <4E0A> <8FE3> -<4E0B> <4E0B> <89BA> -<4E0D> <4E0D> <9573> -<4E0E> <4E0E> <975E> -<4E10> <4E10> <98A0> -<4E11> <4E11> <894E> -<4E14> <4E14> <8A8E> -<4E15> <4E15> <98A1> -<4E16> <4E16> <90A2> -<4E17> <4E17> <99C0> -<4E18> <4E18> <8B75> -<4E19> <4E19> <95B8> -<4E1E> <4E1E> <8FE5> -<4E21> <4E21> <97BC> -<4E26> <4E26> <95C0> -endbfrange - -100 beginbfrange -<4E2A> <4E2A> <98A2> -<4E2D> <4E2D> <9286> -<4E31> <4E31> <98A3> -<4E32> <4E32> <8BF8> -<4E36> <4E36> <98A4> -<4E38> <4E38> <8ADB> -<4E39> <4E39> <924F> -<4E3B> <4E3B> <8EE5> -<4E3C> <4E3C> <98A5> -<4E3F> <4E3F> <98A6> -<4E42> <4E42> <98A7> -<4E43> <4E43> <9454> -<4E45> <4E45> <8B76> -<4E4B> <4E4B> <9456> -<4E4D> <4E4D> <93E1> -<4E4E> <4E4E> <8CC1> -<4E4F> <4E4F> <9652> -<4E55> <4E55> -<4E56> <4E56> <98A8> -<4E57> <4E57> <8FE6> -<4E58> <4E58> <98A9> -<4E59> <4E59> <89B3> -<4E5D> <4E5D> <8BE3> -<4E5E> <4E5E> <8CEE> -<4E5F> <4E5F> <96E7> -<4E62> <4E62> <9BA4> -<4E71> <4E71> <9790> -<4E73> <4E73> <93FB> -<4E7E> <4E7E> <8AA3> -<4E80> <4E80> <8B54> -<4E82> <4E82> <98AA> -<4E85> <4E85> <98AB> -<4E86> <4E86> <97B9> -<4E88> <4E88> <975C> -<4E89> <4E89> <9188> -<4E8A> <4E8A> <98AD> -<4E8B> <4E8B> <8E96> -<4E8C> <4E8C> <93F1> -<4E8E> <4E8E> <98B0> -<4E91> <4E91> <895D> -<4E92> <4E92> <8CDD> -<4E94> <4E94> <8CDC> -<4E95> <4E95> <88E4> -<4E98> <4E98> <986A> -<4E99> <4E99> <9869> -<4E9B> <4E9B> <8DB1> -<4E9C> <4E9C> <889F> -<4E9E> <4EA0> <98B1> -<4EA1> <4EA1> <9653> -<4EA2> <4EA2> <98B4> -<4EA4> <4EA4> <8CF0> -<4EA5> <4EA5> <88E5> -<4EA6> <4EA6> <9692> -<4EA8> <4EA8> <8B9C> -<4EAB> <4EAC> <8B9D> -<4EAD> <4EAD> <92E0> -<4EAE> <4EAE> <97BA> -<4EB0> <4EB0> <98B5> -<4EB3> <4EB3> <98B6> -<4EB6> <4EB6> <98B7> -<4EBA> <4EBA> <906C> -<4EC0> <4EC0> <8F59> -<4EC1> <4EC1> <906D> -<4EC2> <4EC2> <98BC> -<4EC4> <4EC4> <98BA> -<4EC6> <4EC6> <98BB> -<4EC7> <4EC7> <8B77> -<4ECA> <4ECA> <8DA1> -<4ECB> <4ECB> <89EE> -<4ECD> <4ECD> <98B9> -<4ECE> <4ECE> <98B8> -<4ECF> <4ECF> <95A7> -<4ED4> <4ED4> <8E65> -<4ED5> <4ED5> <8E64> -<4ED6> <4ED6> <91BC> -<4ED7> <4ED7> <98BD> -<4ED8> <4ED8> <9574> -<4ED9> <4ED9> <90E5> -<4EDD> <4EDD> <8157> -<4EDE> <4EDE> <98BE> -<4EDF> <4EDF> <98C0> -<4EE3> <4EE3> <91E3> -<4EE4> <4EE4> <97DF> -<4EE5> <4EE5> <88C8> -<4EED> <4EED> <98BF> -<4EEE> <4EEE> <89BC> -<4EF0> <4EF0> <8BC2> -<4EF2> <4EF2> <9287> -<4EF6> <4EF6> <8C8F> -<4EF7> <4EF7> <98C1> -<4EFB> <4EFB> <9443> -<4F01> <4F01> <8AE9> -<4F09> <4F09> <98C2> -<4F0A> <4F0A> <88C9> -<4F0D> <4F0D> <8CDE> -<4F0E> <4F0E> <8AEA> -<4F0F> <4F0F> <959A> -<4F10> <4F10> <94B0> -<4F11> <4F11> <8B78> -<4F1A> <4F1A> <89EF> -endbfrange - -100 beginbfrange -<4F1C> <4F1C> <98E5> -<4F1D> <4F1D> <9360> -<4F2F> <4F2F> <948C> -<4F30> <4F30> <98C4> -<4F34> <4F34> <94BA> -<4F36> <4F36> <97E0> -<4F38> <4F38> <904C> -<4F3A> <4F3A> <8E66> -<4F3C> <4F3C> <8E97> -<4F3D> <4F3D> <89BE> -<4F43> <4F43> <92CF> -<4F46> <4F46> <9241> -<4F47> <4F47> <98C8> -<4F4D> <4F4D> <88CA> -<4F4E> <4F4E> <92E1> -<4F4F> <4F4F> <8F5A> -<4F50> <4F50> <8DB2> -<4F51> <4F51> <9743> -<4F53> <4F53> <91CC> -<4F55> <4F55> <89BD> -<4F57> <4F57> <98C7> -<4F59> <4F59> <975D> -<4F5A> <4F5A> <98C3> -<4F5B> <4F5B> <98C5> -<4F5C> <4F5C> <8DEC> -<4F5D> <4F5D> <98C6> -<4F5E> <4F5E> <9B43> -<4F69> <4F69> <98CE> -<4F6F> <4F6F> <98D1> -<4F70> <4F70> <98CF> -<4F73> <4F73> <89C0> -<4F75> <4F75> <95B9> -<4F76> <4F76> <98C9> -<4F7B> <4F7B> <98CD> -<4F7C> <4F7C> <8CF1> -<4F7F> <4F7F> <8E67> -<4F83> <4F83> <8AA4> -<4F86> <4F86> <98D2> -<4F88> <4F88> <98CA> -<4F8B> <4F8B> <97E1> -<4F8D> <4F8D> <8E98> -<4F8F> <4F8F> <98CB> -<4F91> <4F91> <98D0> -<4F96> <4F96> <98D3> -<4F98> <4F98> <98CC> -<4F9B> <4F9B> <8B9F> -<4F9D> <4F9D> <88CB> -<4FA0> <4FA0> <8BA0> -<4FA1> <4FA1> <89BF> -<4FAB> <4FAB> <9B44> -<4FAD> <4FAD> <9699> -<4FAE> <4FAE> <958E> -<4FAF> <4FAF> <8CF2> -<4FB5> <4FB5> <904E> -<4FB6> <4FB6> <97B5> -<4FBF> <4FBF> <95D6> -<4FC2> <4FC2> <8C57> -<4FC3> <4FC3> <91A3> -<4FC4> <4FC4> <89E2> -<4FCA> <4FCA> <8F72> -<4FCE> <4FCE> <98D7> -<4FD0> <4FD0> <98DC> -<4FD1> <4FD1> <98DA> -<4FD4> <4FD4> <98D5> -<4FD7> <4FD7> <91AD> -<4FD8> <4FD8> <98D8> -<4FDA> <4FDA> <98DB> -<4FDB> <4FDB> <98D9> -<4FDD> <4FDD> <95DB> -<4FDF> <4FDF> <98D6> -<4FE0> <4FE0> <8BA0> -<4FE1> <4FE1> <904D> -<4FE3> <4FE3> <9693> -<4FE4> <4FE5> <98DD> -<4FEE> <4FEE> <8F43> -<4FEF> <4FEF> <98EB> -<4FF3> <4FF3> <946F> -<4FF5> <4FF5> <9555> -<4FF6> <4FF6> <98E6> -<4FF8> <4FF8> <95EE> -<4FFA> <4FFA> <89B4> -<4FFE> <4FFE> <98EA> -<5005> <5005> <98E4> -<5006> <5006> <98ED> -<5009> <5009> <9171> -<500B> <500B> <8CC2> -<500D> <500D> <947B> -<500F> <500F> -<5011> <5011> <98EC> -<5012> <5012> <937C> -<5014> <5014> <98E1> -<5016> <5016> <8CF4> -<5019> <5019> <8CF3> -<501A> <501A> <98DF> -<501F> <501F> <8ED8> -<5021> <5021> <98E7> -<5023> <5023> <95ED> -<5024> <5024> <926C> -<5025> <5025> <98E3> -<5026> <5026> <8C91> -endbfrange - -100 beginbfrange -<5028> <5028> <98E0> -<5029> <5029> <98E8> -<502A> <502A> <98E2> -<502B> <502B> <97CF> -<502C> <502C> <98E9> -<502D> <502D> <9860> -<5036> <5036> <8BE4> -<5039> <5039> <8C90> -<5043> <5043> <98EE> -<5047> <5047> <98EF> -<5048> <5048> <98F3> -<5049> <5049> <88CC> -<504F> <504F> <95CE> -<5050> <5050> <98F2> -<5055> <5055> <98F1> -<5056> <5056> <98F5> -<505A> <505A> <98F4> -<505C> <505C> <92E2> -<5065> <5065> <8C92> -<506C> <506C> <98F6> -<5072> <5072> <8EC3> -<5074> <5074> <91A4> -<5075> <5075> <92E3> -<5076> <5076> <8BF4> -<5078> <5078> <98F7> -<507D> <507D> <8B55> -<5080> <5080> <98F8> -<5085> <5085> <98FA> -<508D> <508D> <9654> -<5091> <5091> <8C86> -<5098> <5098> <8E50> -<5099> <5099> <94F5> -<509A> <509A> <98F9> -<50AC> <50AC> <8DC3> -<50AD> <50AD> <9762> -<50B2> <50B2> <98FC> -<50B3> <50B3> <9942> -<50B4> <50B4> <98FB> -<50B5> <50B5> <8DC2> -<50B7> <50B7> <8F9D> -<50BE> <50BE> <8C58> -<50C2> <50C2> <9943> -<50C5> <50C5> <8BCD> -<50C9> <50CA> <9940> -<50CD> <50CD> <93AD> -<50CF> <50CF> <919C> -<50D1> <50D1> <8BA1> -<50D5> <50D5> <966C> -<50D6> <50D6> <9944> -<50DA> <50DA> <97BB> -<50DE> <50DE> <9945> -<50E3> <50E3> <9948> -<50E5> <50E5> <9946> -<50E7> <50E7> <916D> -<50ED> <50ED> <9947> -<50EE> <50EE> <9949> -<50F5> <50F5> <994B> -<50F9> <50F9> <994A> -<50FB> <50FB> <95C6> -<5100> <5100> <8B56> -<5101> <5102> <994D> -<5104> <5104> <89AD> -<5109> <5109> <994C> -<5112> <5112> <8EF2> -<5114> <5114> <9951> -<5115> <5115> <9950> -<5116> <5116> <994F> -<5118> <5118> <98D4> -<511A> <511A> <9952> -<511F> <511F> <8F9E> -<5121> <5121> <9953> -<512A> <512A> <9744> -<5132> <5132> <96D7> -<5137> <5137> <9955> -<513A> <513A> <9954> -<513B> <513B> <9957> -<513C> <513C> <9956> -<513F> <5140> <9958> -<5141> <5141> <88F2> -<5143> <5143> <8CB3> -<5144> <5144> <8C5A> -<5145> <5145> <8F5B> -<5146> <5146> <929B> -<5147> <5147> <8BA2> -<5148> <5148> <90E6> -<5149> <5149> <8CF5> -<514B> <514B> <8D8E> -<514C> <514C> <995B> -<514D> <514D> <96C6> -<514E> <514E> <9365> -<5150> <5150> <8E99> -<5152> <5152> <995A> -<5154> <5154> <995C> -<515A> <515A> <937D> -<515C> <515C> <8A95> -<5162> <5162> <995D> -<5165> <5165> <93FC> -<5168> <5168> <9153> -<5169> <516A> <995F> -<516B> <516B> <94AA> -endbfrange - -100 beginbfrange -<516C> <516C> <8CF6> -<516D> <516D> <985A> -<516E> <516E> <9961> -<5171> <5171> <8BA4> -<5175> <5175> <95BA> -<5176> <5176> <91B4> -<5177> <5177> <8BEF> -<5178> <5178> <9354> -<517C> <517C> <8C93> -<5180> <5180> <9962> -<5182> <5182> <9963> -<5185> <5185> <93E0> -<5186> <5186> <897E> -<5189> <5189> <9966> -<518A> <518A> <8DFB> -<518C> <518C> <9965> -<518D> <518D> <8DC4> -<518F> <518F> <9967> -<5190> <5190> -<5191> <5191> <9968> -<5192> <5192> <9660> -<5193> <5193> <9969> -<5195> <5196> <996A> -<5197> <5197> <8FE7> -<5199> <5199> <8ECA> -<51A0> <51A0> <8AA5> -<51A2> <51A2> <996E> -<51A4> <51A4> <996C> -<51A5> <51A5> <96BB> -<51A6> <51A6> <996D> -<51A8> <51A8> <9579> -<51A9> <51AB> <996F> -<51AC> <51AC> <937E> -<51B0> <51B0> <9975> -<51B1> <51B2> <9973> -<51B3> <51B3> <9972> -<51B4> <51B4> <8DE1> -<51B5> <51B5> <9976> -<51B6> <51B6> <96E8> -<51B7> <51B7> <97E2> -<51BD> <51BD> <9977> -<51C4> <51C4> <90A6> -<51C5> <51C5> <9978> -<51C6> <51C6> <8F79> -<51C9> <51C9> <9979> -<51CB> <51CB> <929C> -<51CC> <51CC> <97BD> -<51CD> <51CD> <9380> -<51D6> <51D6> <99C3> -<51DB> <51DB> <997A> -<51DC> <51DC> -<51DD> <51DD> <8BC3> -<51E0> <51E0> <997B> -<51E1> <51E1> <967D> -<51E6> <51E6> <8F88> -<51E7> <51E7> <91FA> -<51E9> <51E9> <997D> -<51EA> <51EA> <93E2> -<51ED> <51ED> <997E> -<51F0> <51F0> <9980> -<51F1> <51F1> <8A4D> -<51F5> <51F5> <9981> -<51F6> <51F6> <8BA5> -<51F8> <51F8> <93CA> -<51F9> <51F9> <899A> -<51FA> <51FA> <8F6F> -<51FD> <51FD> <949F> -<51FE> <51FE> <9982> -<5200> <5200> <9381> -<5203> <5203> <906E> -<5204> <5204> <9983> -<5206> <5206> <95AA> -<5207> <5207> <90D8> -<5208> <5208> <8AA0> -<520A> <520A> <8AA7> -<520B> <520B> <9984> -<520E> <520E> <9986> -<5211> <5211> <8C59> -<5214> <5214> <9985> -<5217> <5217> <97F1> -<521D> <521D> <8F89> -<5224> <5224> <94BB> -<5225> <5225> <95CA> -<5227> <5227> <9987> -<5229> <5229> <9798> -<522A> <522A> <9988> -<522E> <522E> <9989> -<5230> <5230> <939E> -<5233> <5233> <998A> -<5236> <5236> <90A7> -<5237> <5237> <8DFC> -<5238> <5238> <8C94> -<5239> <5239> <998B> -<523A> <523A> <8E68> -<523B> <523B> <8D8F> -<5243> <5243> <92E4> -<5244> <5244> <998D> -<5247> <5247> <91A5> -<524A> <524A> <8DED> -<524B> <524C> <998E> -endbfrange - -100 beginbfrange -<524D> <524D> <914F> -<524F> <524F> <998C> -<5254> <5254> <9991> -<5256> <5256> <9655> -<525B> <525B> <8D84> -<525D> <525D> <948D> -<525E> <525E> <9990> -<5263> <5263> <8C95> -<5264> <5264> <8DDC> -<5265> <5265> <948D> -<5269> <5269> <9994> -<526A> <526A> <9992> -<526F> <526F> <959B> -<5270> <5270> <8FE8> -<5271> <5271> <999B> -<5272> <5272> <8A84> -<5273> <5273> <9995> -<5274> <5274> <9993> -<5275> <5275> <916E> -<527D> <527D> <9997> -<527F> <527F> <9996> -<5283> <5283> <8A63> -<5287> <5287> <8C80> -<5288> <5288> <999C> -<5289> <5289> <97AB> -<528D> <528D> <9998> -<5291> <5291> <999D> -<5292> <5292> <999A> -<5294> <5294> <9999> -<529B> <529B> <97CD> -<529F> <529F> <8CF7> -<52A0> <52A0> <89C1> -<52A3> <52A3> <97F2> -<52A9> <52A9> <8F95> -<52AA> <52AA> <9377> -<52AB> <52AB> <8D85> -<52AC> <52AD> <99A0> -<52B1> <52B1> <97E3> -<52B4> <52B4> <984A> -<52B5> <52B5> <99A3> -<52B9> <52B9> <8CF8> -<52BC> <52BC> <99A2> -<52BE> <52BE> <8A4E> -<52C1> <52C1> <99A4> -<52C3> <52C3> <9675> -<52C5> <52C5> <92BA> -<52C7> <52C7> <9745> -<52C9> <52C9> <95D7> -<52CD> <52CD> <99A5> -<52D2> <52D2> -<52D5> <52D5> <93AE> -<52D7> <52D7> <99A6> -<52D8> <52D8> <8AA8> -<52D9> <52D9> <96B1> -<52DD> <52DD> <8F9F> -<52DE> <52DE> <99A7> -<52DF> <52DF> <95E5> -<52E0> <52E0> <99AB> -<52E2> <52E2> <90A8> -<52E3> <52E3> <99A8> -<52E4> <52E4> <8BCE> -<52E6> <52E6> <99A9> -<52E7> <52E7> <8AA9> -<52F2> <52F2> <8C4D> -<52F3> <52F3> <99AC> -<52F5> <52F5> <99AD> -<52F8> <52F9> <99AE> -<52FA> <52FA> <8ED9> -<52FE> <52FE> <8CF9> -<52FF> <52FF> <96DC> -<5301> <5301> <96E6> -<5302> <5302> <93F5> -<5305> <5305> <95EF> -<5306> <5306> <99B0> -<5308> <5308> <99B1> -<530D> <530D> <99B3> -<530F> <530F> <99B5> -<5310> <5310> <99B4> -<5315> <5315> <99B6> -<5316> <5316> <89BB> -<5317> <5317> <966B> -<5319> <5319> <8DFA> -<531A> <531A> <99B7> -<531D> <531D> <9178> -<5320> <5320> <8FA0> -<5321> <5321> <8BA7> -<5323> <5323> <99B8> -<532A> <532A> <94D9> -<532F> <532F> <99B9> -<5331> <5331> <99BA> -<5333> <5333> <99BB> -<5338> <5338> <99BC> -<5339> <5339> <9543> -<533A> <533A> <8BE6> -<533B> <533B> <88E3> -<533F> <533F> <93BD> -<5340> <5340> <99BD> -<5341> <5341> <8F5C> -<5343> <5343> <90E7> -<5345> <5345> <99BF> -endbfrange - -100 beginbfrange -<5346> <5346> <99BE> -<5347> <5347> <8FA1> -<5348> <5348> <8CDF> -<5349> <5349> <99C1> -<534A> <534A> <94BC> -<534D> <534D> <99C2> -<5351> <5351> <94DA> -<5352> <5352> <91B2> -<5353> <5353> <91EC> -<5354> <5354> <8BA6> -<5357> <5357> <93EC> -<5358> <5358> <9250> -<535A> <535A> <948E> -<535C> <535C> <966D> -<535E> <535E> <99C4> -<5360> <5360> <90E8> -<5366> <5366> <8C54> -<5369> <5369> <99C5> -<536E> <536E> <99C6> -<536F> <536F> <894B> -<5370> <5370> <88F3> -<5371> <5371> <8AEB> -<5373> <5373> <91A6> -<5374> <5374> <8B70> -<5375> <5375> <9791> -<5377> <5377> <99C9> -<5378> <5378> <89B5> -<537B> <537B> <99C8> -<537F> <537F> <8BA8> -<5382> <5382> <99CA> -<5384> <5384> <96EF> -<5396> <5396> <99CB> -<5398> <5398> <97D0> -<539A> <539A> <8CFA> -<539F> <539F> <8CB4> -<53A0> <53A0> <99CC> -<53A5> <53A5> <99CE> -<53A6> <53A6> <99CD> -<53A8> <53A8> <907E> -<53A9> <53A9> <8958> -<53AD> <53AD> <897D> -<53AE> <53AE> <99CF> -<53B0> <53B0> <99D0> -<53B3> <53B3> <8CB5> -<53B6> <53B6> <99D1> -<53BB> <53BB> <8B8E> -<53C2> <53C2> <8E51> -<53C3> <53C3> <99D2> -<53C8> <53C8> <9694> -<53C9> <53C9> <8DB3> -<53CA> <53CA> <8B79> -<53CB> <53CB> <9746> -<53CC> <53CC> <916F> -<53CD> <53CD> <94BD> -<53CE> <53CE> <8EFB> -<53D4> <53D4> <8F66> -<53D6> <53D6> <8EE6> -<53D7> <53D7> <8EF3> -<53D9> <53D9> <8F96> -<53DB> <53DB> <94BE> -<53DF> <53DF> <99D5> -<53E1> <53E1> <8962> -<53E2> <53E2> <9170> -<53E3> <53E3> <8CFB> -<53E4> <53E4> <8CC3> -<53E5> <53E5> <8BE5> -<53E8> <53E8> <99D9> -<53E9> <53E9> <9240> -<53EA> <53EA> <91FC> -<53EB> <53EB> <8BA9> -<53EC> <53EC> <8FA2> -<53ED> <53ED> <99DA> -<53EE> <53EE> <99D8> -<53EF> <53EF> <89C2> -<53F0> <53F0> <91E4> -<53F1> <53F1> <8EB6> -<53F2> <53F2> <8E6A> -<53F3> <53F3> <8945> -<53F6> <53F6> <8A90> -<53F7> <53F7> <8D86> -<53F8> <53F8> <8E69> -<53FA> <53FA> <99DB> -<5401> <5401> <99DC> -<5403> <5403> <8B68> -<5404> <5404> <8A65> -<5408> <5408> <8D87> -<5409> <5409> <8B67> -<540A> <540A> <92DD> -<540B> <540B> <8944> -<540C> <540C> <93AF> -<540D> <540D> <96BC> -<540E> <540E> <8D40> -<540F> <540F> <9799> -<5410> <5410> <9366> -<5411> <5411> <8CFC> -<541B> <541B> <8C4E> -<541D> <541D> <99E5> -<541F> <541F> <8BE1> -<5420> <5420> <9669> -<5426> <5426> <94DB> -endbfrange - -100 beginbfrange -<5429> <5429> <99E4> -<542B> <542B> <8ADC> -<542C> <542D> <99DF> -<542E> <542E> <99E2> -<5436> <5436> <99E3> -<5438> <5438> <8B7A> -<5439> <5439> <9081> -<543B> <543B> <95AB> -<543C> <543C> <99E1> -<543D> <543D> <99DD> -<543E> <543E> <8CE1> -<5440> <5440> <99DE> -<5442> <5442> <9843> -<5446> <5446> <95F0> -<5448> <5448> <92E6> -<5449> <5449> <8CE0> -<544A> <544A> <8D90> -<544E> <544E> <99E6> -<5451> <5451> <93DB> -<545F> <545F> <99EA> -<5468> <5468> <8EFC> -<546A> <546A> <8EF4> -<5470> <5470> <99ED> -<5471> <5471> <99EB> -<5473> <5473> <96A1> -<5475> <5475> <99E8> -<5476> <5476> <99F1> -<5477> <5477> <99EC> -<547B> <547B> <99EF> -<547C> <547C> <8CC4> -<547D> <547D> <96BD> -<5480> <5480> <99F0> -<5484> <5484> <99F2> -<5486> <5486> <99F4> -<548B> <548B> <8DEE> -<548C> <548C> <9861> -<548E> <548E> <99E9> -<548F> <548F> <99E7> -<5490> <5490> <99F3> -<5492> <5492> <99EE> -<54A2> <54A2> <99F6> -<54A4> <54A4> <9A42> -<54A5> <54A5> <99F8> -<54A8> <54A8> <99FC> -<54AB> <54AB> <9A40> -<54AC> <54AC> <99F9> -<54AF> <54AF> <9A5D> -<54B2> <54B2> <8DE7> -<54B3> <54B3> <8A50> -<54B8> <54B8> <99F7> -<54BC> <54BC> <9A44> -<54BD> <54BD> <88F4> -<54BE> <54BE> <9A43> -<54C0> <54C0> <88A3> -<54C1> <54C1> <9569> -<54C2> <54C2> <9A41> -<54C4> <54C4> <99FA> -<54C7> <54C7> <99F5> -<54C8> <54C8> <99FB> -<54C9> <54C9> <8DC6> -<54D8> <54D8> <9A45> -<54E1> <54E1> <88F5> -<54E2> <54E2> <9A4E> -<54E5> <54E6> <9A46> -<54E8> <54E8> <8FA3> -<54E9> <54E9> <9689> -<54ED> <54ED> <9A4C> -<54EE> <54EE> <9A4B> -<54F2> <54F2> <934E> -<54FA> <54FA> <9A4D> -<54FD> <54FD> <9A4A> -<5504> <5504> <8953> -<5506> <5506> <8DB4> -<5507> <5507> <904F> -<550F> <550F> <9A48> -<5510> <5510> <9382> -<5514> <5514> <9A49> -<5516> <5516> <88A0> -<552E> <552E> <9A53> -<552F> <552F> <9742> -<5531> <5531> <8FA5> -<5533> <5533> <9A59> -<5538> <5538> <9A58> -<5539> <5539> <9A4F> -<553E> <553E> <91C1> -<5540> <5540> <9A50> -<5544> <5544> <91ED> -<5545> <5545> <9A55> -<5546> <5546> <8FA4> -<554C> <554C> <9A52> -<554F> <554F> <96E2> -<5553> <5553> <8C5B> -<5556> <5557> <9A56> -<555C> <555C> <9A54> -<555D> <555D> <9A5A> -<555E> <555E> <88A0> -<5563> <5563> <9A51> -<557B> <557B> <9A60> -<557C> <557C> <9A65> -<557E> <557E> <9A61> -endbfrange - -100 beginbfrange -<5580> <5580> <9A5C> -<5583> <5583> <9A66> -<5584> <5584> <9150> -<5587> <5587> <9A68> -<5589> <5589> <8D41> -<558A> <558A> <9A5E> -<558B> <558B> <929D> -<5598> <5598> <9A62> -<5599> <5599> <9A5B> -<559A> <559A> <8AAB> -<559C> <559C> <8AEC> -<559D> <559D> <8A85> -<559E> <559E> <9A63> -<559F> <559F> <9A5F> -<55A7> <55A7> <8C96> -<55A8> <55A8> <9A69> -<55A9> <55A9> <9A67> -<55AA> <55AA> <9172> -<55AB> <55AB> <8B69> -<55AC> <55AC> <8BAA> -<55AE> <55AE> <9A64> -<55B0> <55B0> <8BF2> -<55B6> <55B6> <8963> -<55C4> <55C4> <9A6D> -<55C5> <55C5> <9A6B> -<55C7> <55C7> <9AA5> -<55D4> <55D4> <9A70> -<55DA> <55DA> <9A6A> -<55DC> <55DC> <9A6E> -<55DF> <55DF> <9A6C> -<55E3> <55E3> <8E6B> -<55E4> <55E4> <9A6F> -<55F7> <55F7> <9A72> -<55F9> <55F9> <9A77> -<55FD> <55FD> <9A75> -<55FE> <55FE> <9A74> -<5606> <5606> <9251> -<5609> <5609> <89C3> -<5614> <5614> <9A71> -<5616> <5616> <9A73> -<5617> <5617> <8FA6> -<5618> <5618> <8952> -<561B> <561B> <9A76> -<5629> <5629> <89DC> -<562F> <562F> <9A82> -<5631> <5631> <8FFA> -<5632> <5632> <9A7D> -<5634> <5634> <9A7B> -<5636> <5636> <9A7C> -<5638> <5638> <9A7E> -<5642> <5642> <895C> -<564C> <564C> <9158> -<564E> <564E> <9A78> -<5650> <5650> <9A79> -<5653> <5653> <8952> -<565B> <565B> <8A9A> -<5664> <5664> <9A81> -<5668> <5668> <8AED> -<566A> <566A> <9A84> -<566B> <566B> <9A80> -<566C> <566C> <9A83> -<5674> <5674> <95AC> -<5678> <5678> <93D3> -<567A> <567A> <94B6> -<5680> <5680> <9A86> -<5686> <5686> <9A85> -<5687> <5687> <8A64> -<568A> <568A> <9A87> -<568F> <568F> <9A8A> -<5694> <5694> <9A89> -<5699> <5699> <8A9A> -<56A0> <56A0> <9A88> -<56A2> <56A2> <9458> -<56A5> <56A5> <9A8B> -<56AE> <56AE> <9A8C> -<56B4> <56B4> <9A8E> -<56B6> <56B6> <9A8D> -<56BC> <56BC> <9A90> -<56C0> <56C0> <9A93> -<56C1> <56C1> <9A91> -<56C2> <56C2> <9A8F> -<56C3> <56C3> <9A92> -<56C8> <56C8> <9A94> -<56CA> <56CA> <9458> -<56CE> <56CE> <9A95> -<56D1> <56D1> <9A96> -<56D3> <56D3> <9A97> -<56D7> <56D7> <9A98> -<56D8> <56D8> <9964> -<56DA> <56DA> <8EFA> -<56DB> <56DB> <8E6C> -<56DE> <56DE> <89F1> -<56E0> <56E0> <88F6> -<56E3> <56E3> <9263> -<56EE> <56EE> <9A99> -<56F0> <56F0> <8DA2> -<56F2> <56F2> <88CD> -<56F3> <56F3> <907D> -<56F9> <56F9> <9A9A> -<56FA> <56FA> <8CC5> -endbfrange - -100 beginbfrange -<56FD> <56FD> <8D91> -<56FF> <56FF> <9A9C> -<5700> <5700> <9A9B> -<5703> <5703> <95DE> -<5704> <5704> <9A9D> -<5708> <5708> <9A9F> -<5709> <5709> <9A9E> -<570B> <570B> <9AA0> -<570D> <570D> <9AA1> -<570F> <570F> <8C97> -<5712> <5712> <8980> -<5713> <5713> <9AA2> -<5716> <5716> <9AA4> -<5718> <5718> <9AA3> -<571C> <571C> <9AA6> -<571F> <571F> <9379> -<5726> <5726> <9AA7> -<5727> <5727> <88B3> -<5728> <5728> <8DDD> -<572D> <572D> <8C5C> -<5730> <5730> <926E> -<5737> <5738> <9AA8> -<573B> <573B> <9AAB> -<5740> <5740> <9AAC> -<5742> <5742> <8DE2> -<5747> <5747> <8BCF> -<574A> <574A> <9656> -<574E> <574E> <9AAA> -<574F> <574F> <9AAD> -<5750> <5750> <8DBF> -<5751> <5751> <8D42> -<5761> <5761> <9AB1> -<5764> <5764> <8DA3> -<5766> <5766> <9252> -<5769> <5769> <9AAE> -<576A> <576A> <92D8> -<577F> <577F> <9AB2> -<5782> <5782> <9082> -<5788> <5788> <9AB0> -<5789> <5789> <9AB3> -<578B> <578B> <8C5E> -<5793> <5793> <9AB4> -<57A0> <57A0> <9AB5> -<57A2> <57A2> <8D43> -<57A3> <57A3> <8A5F> -<57A4> <57A4> <9AB7> -<57AA> <57AA> <9AB8> -<57B0> <57B0> <9AB9> -<57B3> <57B3> <9AB6> -<57C0> <57C0> <9AAF> -<57C3> <57C3> <9ABA> -<57C6> <57C6> <9ABB> -<57CB> <57CB> <9684> -<57CE> <57CE> <8FE9> -<57D2> <57D3> <9ABD> -<57D4> <57D4> <9ABC> -<57D6> <57D6> <9AC0> -<57DC> <57DC> <9457> -<57DF> <57DF> <88E6> -<57E0> <57E0> <9575> -<57E3> <57E3> <9AC1> -<57F4> <57F4> <8FFB> -<57F7> <57F7> <8EB7> -<57F9> <57F9> <947C> -<57FA> <57FA> <8AEE> -<57FC> <57FC> <8DE9> -<5800> <5800> <9678> -<5802> <5802> <93B0> -<5805> <5805> <8C98> -<5806> <5806> <91CD> -<580A> <580A> <9ABF> -<580B> <580B> <9AC2> -<5815> <5815> <91C2> -<5819> <5819> <9AC3> -<581D> <581D> <9AC4> -<5821> <5821> <9AC6> -<5824> <5824> <92E7> -<582A> <582A> <8AAC> -<582F> <582F> -<5830> <5830> <8981> -<5831> <5831> <95F1> -<5834> <5834> <8FEA> -<5835> <5835> <9367> -<583A> <583A> <8DE4> -<583D> <583D> <9ACC> -<5840> <5840> <95BB> -<5841> <5841> <97DB> -<584A> <584A> <89F2> -<584B> <584B> <9AC8> -<5851> <5851> <9159> -<5852> <5852> <9ACB> -<5854> <5854> <9383> -<5857> <5857> <9368> -<5858> <5858> <9384> -<5859> <5859> <94B7> -<585A> <585A> <92CB> -<585E> <585E> <8DC7> -<5861> <5861> <9355> -<5862> <5862> <9AC7> -<5869> <5869> <8996> -endbfrange - -100 beginbfrange -<586B> <586B> <9355> -<5870> <5870> <9AC9> -<5872> <5872> <9AC5> -<5875> <5875> <906F> -<5879> <5879> <9ACD> -<587E> <587E> <8F6D> -<5883> <5883> <8BAB> -<5885> <5885> <9ACE> -<5893> <5893> <95E6> -<5897> <5897> <919D> -<589C> <589C> <92C4> -<589F> <589F> <9AD0> -<58A8> <58A8> <966E> -<58AB> <58AB> <9AD1> -<58AE> <58AE> <9AD6> -<58B3> <58B3> <95AD> -<58B8> <58B8> <9AD5> -<58B9> <58B9> <9ACF> -<58BA> <58BA> <9AD2> -<58BB> <58BB> <9AD4> -<58BE> <58BE> <8DA4> -<58C1> <58C1> <95C7> -<58C5> <58C5> <9AD7> -<58C7> <58C7> <9264> -<58CA> <58CA> <89F3> -<58CC> <58CC> <8FEB> -<58D1> <58D1> <9AD9> -<58D3> <58D3> <9AD8> -<58D5> <58D5> <8D88> -<58D7> <58D7> <9ADA> -<58D8> <58D8> <9ADC> -<58D9> <58D9> <9ADB> -<58DC> <58DC> <9ADE> -<58DE> <58DE> <9AD3> -<58DF> <58DF> <9AE0> -<58E4> <58E4> <9ADF> -<58E5> <58E5> <9ADD> -<58EB> <58EB> <8E6D> -<58EC> <58EC> <9070> -<58EE> <58EE> <9173> -<58EF> <58EF> <9AE1> -<58F0> <58F0> <90BA> -<58F1> <58F1> <88EB> -<58F2> <58F2> <9484> -<58F7> <58F7> <92D9> -<58F9> <58F9> <9AE3> -<58FA> <58FA> <9AE2> -<58FB> <58FD> <9AE4> -<5902> <5902> <9AE7> -<5909> <5909> <95CF> -<590A> <590A> <9AE8> -<590F> <590F> <89C4> -<5910> <5910> <9AE9> -<5915> <5915> <975B> -<5916> <5916> <8A4F> -<5918> <5918> <99C7> -<5919> <5919> <8F67> -<591A> <591A> <91BD> -<591B> <591B> <9AEA> -<591C> <591C> <96E9> -<5922> <5922> <96B2> -<5925> <5925> <9AEC> -<5927> <5927> <91E5> -<5929> <5929> <9356> -<592A> <592A> <91BE> -<592B> <592B> <9576> -<592C> <592D> <9AED> -<592E> <592E> <899B> -<5931> <5931> <8EB8> -<5932> <5932> <9AEF> -<5937> <5937> <88CE> -<5938> <5938> <9AF0> -<593E> <593E> <9AF1> -<5944> <5944> <8982> -<5947> <5947> <8AEF> -<5948> <5948> <93DE> -<5949> <5949> <95F2> -<594E> <594E> <9AF5> -<594F> <594F> <9174> -<5950> <5950> <9AF4> -<5951> <5951> <8C5F> -<5954> <5954> <967A> -<5955> <5955> <9AF3> -<5957> <5957> <9385> -<5958> <5958> <9AF7> -<595A> <595A> <9AF6> -<5960> <5960> <9AF9> -<5962> <5962> <9AF8> -<5965> <5965> <899C> -<5967> <5967> <9AFA> -<5968> <5968> <8FA7> -<5969> <5969> <9AFC> -<596A> <596A> <9244> -<596C> <596C> <9AFB> -<596E> <596E> <95B1> -<5973> <5973> <8F97> -<5974> <5974> <937A> -<5978> <5978> <9B40> -<597D> <597D> <8D44> -<5981> <5981> <9B41> -endbfrange - -100 beginbfrange -<5982> <5982> <9440> -<5983> <5983> <94DC> -<5984> <5984> <96CF> -<598A> <598A> <9444> -<598D> <598D> <9B4A> -<5993> <5993> <8B57> -<5996> <5996> <9764> -<5999> <5999> <96AD> -<599B> <599B> <9BAA> -<599D> <599D> <9B42> -<59A3> <59A3> <9B45> -<59A5> <59A5> <91C3> -<59A8> <59A8> <9657> -<59AC> <59AC> <9369> -<59B2> <59B2> <9B46> -<59B9> <59B9> <9685> -<59BB> <59BB> <8DC8> -<59BE> <59BE> <8FA8> -<59C6> <59C6> <9B47> -<59C9> <59C9> <8E6F> -<59CB> <59CB> <8E6E> -<59D0> <59D0> <88B7> -<59D1> <59D1> <8CC6> -<59D3> <59D3> <90A9> -<59D4> <59D4> <88CF> -<59D9> <59DA> <9B4B> -<59DC> <59DC> <9B49> -<59E5> <59E5> <8957> -<59E6> <59E6> <8AAD> -<59E8> <59E8> <9B48> -<59EA> <59EA> <96C3> -<59EB> <59EB> <9550> -<59F6> <59F6> <88A6> -<59FB> <59FB> <88F7> -<59FF> <59FF> <8E70> -<5A01> <5A01> <88D0> -<5A03> <5A03> <88A1> -<5A09> <5A09> <9B51> -<5A11> <5A11> <9B4F> -<5A18> <5A18> <96BA> -<5A1A> <5A1A> <9B52> -<5A1C> <5A1C> <9B50> -<5A1F> <5A1F> <9B4E> -<5A20> <5A20> <9050> -<5A25> <5A25> <9B4D> -<5A29> <5A29> <95D8> -<5A2F> <5A2F> <8CE2> -<5A35> <5A36> <9B56> -<5A3C> <5A3C> <8FA9> -<5A40> <5A40> <9B53> -<5A41> <5A41> <984B> -<5A46> <5A46> <946B> -<5A49> <5A49> <9B55> -<5A5A> <5A5A> <8DA5> -<5A62> <5A62> <9B58> -<5A66> <5A66> <9577> -<5A6A> <5A6A> <9B59> -<5A6C> <5A6C> <9B54> -<5A7F> <5A7F> <96B9> -<5A92> <5A92> <947D> -<5A9A> <5A9A> <9B5A> -<5A9B> <5A9B> <9551> -<5ABC> <5ABC> <9B5B> -<5ABD> <5ABD> <9B5F> -<5ABE> <5ABE> <9B5C> -<5AC1> <5AC1> <89C5> -<5AC2> <5AC2> <9B5E> -<5AC9> <5AC9> <8EB9> -<5ACB> <5ACB> <9B5D> -<5ACC> <5ACC> <8C99> -<5AD0> <5AD0> <9B6B> -<5AD6> <5AD6> <9B64> -<5AD7> <5AD7> <9B61> -<5AE1> <5AE1> <9284> -<5AE3> <5AE3> <9B60> -<5AE6> <5AE6> <9B62> -<5AE9> <5AE9> <9B63> -<5AFA> <5AFB> <9B65> -<5B09> <5B09> <8AF0> -<5B0B> <5B0B> <9B68> -<5B0C> <5B0C> <9B67> -<5B16> <5B16> <9B69> -<5B22> <5B22> <8FEC> -<5B2A> <5B2A> <9B6C> -<5B2C> <5B2C> <92DA> -<5B30> <5B30> <8964> -<5B32> <5B32> <9B6A> -<5B36> <5B36> <9B6D> -<5B3E> <5B3E> <9B6E> -<5B40> <5B40> <9B71> -<5B43> <5B43> <9B6F> -<5B45> <5B45> <9B70> -<5B50> <5B50> <8E71> -<5B51> <5B51> <9B72> -<5B54> <5B54> <8D45> -<5B55> <5B55> <9B73> -<5B57> <5B57> <8E9A> -<5B58> <5B58> <91B6> -<5B5A> <5B5B> <9B74> -<5B5C> <5B5C> <8E79> -endbfrange - -100 beginbfrange -<5B5D> <5B5D> <8D46> -<5B5F> <5B5F> <96D0> -<5B63> <5B63> <8B47> -<5B64> <5B64> <8CC7> -<5B65> <5B65> <9B76> -<5B66> <5B66> <8A77> -<5B69> <5B69> <9B77> -<5B6B> <5B6B> <91B7> -<5B70> <5B70> <9B78> -<5B71> <5B71> <9BA1> -<5B73> <5B73> <9B79> -<5B75> <5B75> <9B7A> -<5B78> <5B78> <9B7B> -<5B7A> <5B7A> <9B7D> -<5B80> <5B80> <9B7E> -<5B83> <5B83> <9B80> -<5B85> <5B85> <91EE> -<5B87> <5B87> <8946> -<5B88> <5B88> <8EE7> -<5B89> <5B89> <88C0> -<5B8B> <5B8B> <9176> -<5B8C> <5B8C> <8AAE> -<5B8D> <5B8D> <8EB3> -<5B8F> <5B8F> <8D47> -<5B95> <5B95> <9386> -<5B97> <5B97> <8F40> -<5B98> <5B98> <8AAF> -<5B99> <5B99> <9288> -<5B9A> <5B9A> <92E8> -<5B9B> <5B9B> <88B6> -<5B9C> <5B9C> <8B58> -<5B9D> <5B9D> <95F3> -<5B9F> <5B9F> <8EC0> -<5BA2> <5BA2> <8B71> -<5BA3> <5BA3> <90E9> -<5BA4> <5BA4> <8EBA> -<5BA5> <5BA5> <9747> -<5BA6> <5BA6> <9B81> -<5BAE> <5BAE> <8B7B> -<5BB0> <5BB0> <8DC9> -<5BB3> <5BB3> <8A51> -<5BB4> <5BB4> <8983> -<5BB5> <5BB5> <8FAA> -<5BB6> <5BB6> <89C6> -<5BB8> <5BB8> <9B82> -<5BB9> <5BB9> <9765> -<5BBF> <5BBF> <8F68> -<5BC2> <5BC2> <8EE2> -<5BC3> <5BC3> <9B83> -<5BC4> <5BC4> <8AF1> -<5BC5> <5BC5> <93D0> -<5BC6> <5BC6> <96A7> -<5BC7> <5BC7> <9B84> -<5BC9> <5BC9> <9B85> -<5BCC> <5BCC> <9578> -<5BD0> <5BD0> <9B87> -<5BD2> <5BD2> <8AA6> -<5BD3> <5BD3> <8BF5> -<5BD4> <5BD4> <9B86> -<5BDB> <5BDB> <8AB0> -<5BDD> <5BDD> <9051> -<5BDE> <5BDE> <9B8B> -<5BDF> <5BDF> <8E40> -<5BE1> <5BE1> <89C7> -<5BE2> <5BE2> <9B8A> -<5BE4> <5BE4> <9B88> -<5BE5> <5BE5> <9B8C> -<5BE6> <5BE6> <9B89> -<5BE7> <5BE7> <944A> -<5BE8> <5BE8> <9ECB> -<5BE9> <5BE9> <9052> -<5BEB> <5BEB> <9B8D> -<5BEE> <5BEE> <97BE> -<5BF0> <5BF0> <9B8E> -<5BF3> <5BF3> <9B90> -<5BF5> <5BF5> <929E> -<5BF6> <5BF6> <9B8F> -<5BF8> <5BF8> <90A1> -<5BFA> <5BFA> <8E9B> -<5BFE> <5BFE> <91CE> -<5BFF> <5BFF> <8EF5> -<5C01> <5C01> <9595> -<5C02> <5C02> <90EA> -<5C04> <5C04> <8ECB> -<5C05> <5C05> <9B91> -<5C06> <5C06> <8FAB> -<5C07> <5C08> <9B92> -<5C09> <5C09> <88D1> -<5C0A> <5C0A> <91B8> -<5C0B> <5C0B> <9071> -<5C0D> <5C0D> <9B94> -<5C0E> <5C0E> <93B1> -<5C0F> <5C0F> <8FAC> -<5C11> <5C11> <8FAD> -<5C13> <5C13> <9B95> -<5C16> <5C16> <90EB> -<5C1A> <5C1A> <8FAE> -<5C20> <5C20> <9B96> -<5C22> <5C22> <9B97> -<5C24> <5C24> <96DE> -endbfrange - -100 beginbfrange -<5C28> <5C28> <9B98> -<5C2D> <5C2D> <8BC4> -<5C31> <5C31> <8F41> -<5C38> <5C39> <9B99> -<5C3A> <5C3A> <8EDA> -<5C3B> <5C3B> <904B> -<5C3C> <5C3C> <93F2> -<5C3D> <5C3D> <9073> -<5C3E> <5C3E> <94F6> -<5C3F> <5C3F> <9441> -<5C40> <5C40> <8BC7> -<5C41> <5C41> <9B9B> -<5C45> <5C45> <8B8F> -<5C46> <5C46> <9B9C> -<5C48> <5C48> <8BFC> -<5C4A> <5C4A> <93CD> -<5C4B> <5C4B> <89AE> -<5C4D> <5C4D> <8E72> -<5C4E> <5C4E> <9B9D> -<5C4F> <5C4F> <9BA0> -<5C50> <5C50> <9B9F> -<5C51> <5C51> <8BFB> -<5C53> <5C53> <9B9E> -<5C55> <5C55> <9357> -<5C5B> <5C5B> <9BA0> -<5C5E> <5C5E> <91AE> -<5C60> <5C60> <936A> -<5C61> <5C61> <8EC6> -<5C62> <5C62> <8EC6> -<5C64> <5C64> <9177> -<5C65> <5C65> <979A> -<5C6C> <5C6C> <9BA2> -<5C6E> <5C6E> <9BA3> -<5C6F> <5C6F> <93D4> -<5C71> <5C71> <8E52> -<5C76> <5C76> <9BA5> -<5C79> <5C79> <9BA6> -<5C8C> <5C8C> <9BA7> -<5C90> <5C90> <8AF2> -<5C91> <5C91> <9BA8> -<5C94> <5C94> <9BA9> -<5CA1> <5CA1> <89AA> -<5CA8> <5CA8> <915A> -<5CA9> <5CA9> <8AE2> -<5CAB> <5CAB> <9BAB> -<5CAC> <5CAC> <96A6> -<5CB1> <5CB1> <91D0> -<5CB3> <5CB3> <8A78> -<5CB6> <5CB6> <9BAD> -<5CB7> <5CB7> <9BAF> -<5CB8> <5CB8> <8ADD> -<5CBB> <5CBB> <9BAC> -<5CBC> <5CBC> <9BAE> -<5CBE> <5CBE> <9BB1> -<5CC5> <5CC5> <9BB0> -<5CC7> <5CC7> <9BB2> -<5CD9> <5CD9> <9BB3> -<5CE0> <5CE0> <93BB> -<5CE1> <5CE1> <8BAC> -<5CE8> <5CE8> <89E3> -<5CE9> <5CE9> <9BB4> -<5CEA> <5CEA> <9BB9> -<5CED> <5CED> <9BB7> -<5CEF> <5CEF> <95F5> -<5CF0> <5CF0> <95F4> -<5CF6> <5CF6> <9387> -<5CFA> <5CFA> <9BB6> -<5CFB> <5CFB> <8F73> -<5CFD> <5CFD> <9BB5> -<5D07> <5D07> <9092> -<5D0B> <5D0B> <9BBA> -<5D0E> <5D0E> <8DE8> -<5D11> <5D11> <9BC0> -<5D14> <5D14> <9BC1> -<5D15> <5D15> <9BBB> -<5D16> <5D16> <8A52> -<5D17> <5D17> <9BBC> -<5D18> <5D18> <9BC5> -<5D19> <5D19> <9BC4> -<5D1A> <5D1A> <9BC3> -<5D1B> <5D1B> <9BBF> -<5D1F> <5D1F> <9BBE> -<5D22> <5D22> <9BC2> -<5D29> <5D29> <95F6> -<5D4B> <5D4B> <9BC9> -<5D4C> <5D4C> <9BC6> -<5D4E> <5D4E> <9BC8> -<5D50> <5D50> <9792> -<5D52> <5D52> <9BC7> -<5D5C> <5D5C> <9BBD> -<5D69> <5D69> <9093> -<5D6C> <5D6C> <9BCA> -<5D6F> <5D6F> <8DB5> -<5D73> <5D73> <9BCB> -<5D76> <5D76> <9BCC> -<5D82> <5D82> <9BCF> -<5D84> <5D84> <9BCE> -<5D87> <5D87> <9BCD> -<5D8B> <5D8B> <9388> -<5D8C> <5D8C> <9BB8> -endbfrange - -100 beginbfrange -<5D90> <5D90> <9BD5> -<5D9D> <5D9D> <9BD1> -<5DA2> <5DA2> <9BD0> -<5DAC> <5DAC> <9BD2> -<5DAE> <5DAE> <9BD3> -<5DB7> <5DB7> <9BD6> -<5DBA> <5DBA> <97E4> -<5DBC> <5DBC> <9BD7> -<5DBD> <5DBD> <9BD4> -<5DC9> <5DC9> <9BD8> -<5DCC> <5DCC> <8ADE> -<5DCD> <5DCD> <9BD9> -<5DD2> <5DD2> <9BDB> -<5DD3> <5DD3> <9BDA> -<5DD6> <5DD6> <9BDC> -<5DDB> <5DDB> <9BDD> -<5DDD> <5DDD> <90EC> -<5DDE> <5DDE> <8F42> -<5DE1> <5DE1> <8F84> -<5DE3> <5DE3> <9183> -<5DE5> <5DE5> <8D48> -<5DE6> <5DE6> <8DB6> -<5DE7> <5DE7> <8D49> -<5DE8> <5DE8> <8B90> -<5DEB> <5DEB> <9BDE> -<5DEE> <5DEE> <8DB7> -<5DF1> <5DF1> <8CC8> -<5DF2> <5DF2> <9BDF> -<5DF3> <5DF3> <96A4> -<5DF4> <5DF4> <9462> -<5DF5> <5DF5> <9BE0> -<5DF7> <5DF7> <8D4A> -<5DFB> <5DFB> <8AAA> -<5DFD> <5DFD> <9246> -<5DFE> <5DFE> <8BD0> -<5E02> <5E02> <8E73> -<5E03> <5E03> <957A> -<5E06> <5E06> <94BF> -<5E0B> <5E0B> <9BE1> -<5E0C> <5E0C> <8AF3> -<5E11> <5E11> <9BE4> -<5E16> <5E16> <929F> -<5E19> <5E19> <9BE3> -<5E1A> <5E1A> <9BE2> -<5E1B> <5E1B> <9BE5> -<5E1D> <5E1D> <92E9> -<5E25> <5E25> <9083> -<5E2B> <5E2B> <8E74> -<5E2D> <5E2D> <90C8> -<5E2F> <5E2F> <91D1> -<5E30> <5E30> <8B41> -<5E33> <5E33> <92A0> -<5E36> <5E37> <9BE6> -<5E38> <5E38> <8FED> -<5E3D> <5E3D> <9658> -<5E40> <5E40> <9BEA> -<5E43> <5E43> <9BE9> -<5E44> <5E44> <9BE8> -<5E45> <5E45> <959D> -<5E47> <5E47> <9BF1> -<5E4C> <5E4C> <9679> -<5E4E> <5E4E> <9BEB> -<5E54> <5E54> <9BED> -<5E55> <5E55> <968B> -<5E57> <5E57> <9BEC> -<5E5F> <5E5F> <9BEE> -<5E61> <5E61> <94A6> -<5E62> <5E62> <9BEF> -<5E63> <5E63> <95BC> -<5E64> <5E64> <9BF0> -<5E72> <5E72> <8AB1> -<5E73> <5E73> <95BD> -<5E74> <5E74> <944E> -<5E75> <5E76> <9BF2> -<5E78> <5E78> <8D4B> -<5E79> <5E79> <8AB2> -<5E7A> <5E7A> <9BF4> -<5E7B> <5E7B> <8CB6> -<5E7C> <5E7C> <9763> -<5E7D> <5E7D> <9748> -<5E7E> <5E7E> <8AF4> -<5E7F> <5E7F> <9BF6> -<5E81> <5E81> <92A1> -<5E83> <5E83> <8D4C> -<5E84> <5E84> <8FAF> -<5E87> <5E87> <94DD> -<5E8A> <5E8A> <8FB0> -<5E8F> <5E8F> <8F98> -<5E95> <5E95> <92EA> -<5E96> <5E96> <95F7> -<5E97> <5E97> <9358> -<5E9A> <5E9A> <8D4D> -<5E9C> <5E9C> <957B> -<5EA0> <5EA0> <9BF7> -<5EA6> <5EA6> <9378> -<5EA7> <5EA7> <8DC0> -<5EAB> <5EAB> <8CC9> -<5EAD> <5EAD> <92EB> -<5EB5> <5EB5> <88C1> -<5EB6> <5EB6> <8F8E> -endbfrange - -100 beginbfrange -<5EB7> <5EB7> <8D4E> -<5EB8> <5EB8> <9766> -<5EC1> <5EC2> <9BF8> -<5EC3> <5EC3> <9470> -<5EC8> <5EC8> <9BFA> -<5EC9> <5EC9> <97F5> -<5ECA> <5ECA> <984C> -<5ECF> <5ECF> <9BFC> -<5ED0> <5ED0> <9BFB> -<5ED3> <5ED3> <8A66> -<5ED6> <5ED6> <9C40> -<5EDA> <5EDB> <9C43> -<5EDD> <5EDD> <9C42> -<5EDF> <5EDF> <955F> -<5EE0> <5EE0> <8FB1> -<5EE1> <5EE1> <9C46> -<5EE2> <5EE2> <9C45> -<5EE3> <5EE3> <9C41> -<5EE8> <5EE9> <9C47> -<5EEC> <5EEC> <9C49> -<5EF0> <5EF0> <9C4C> -<5EF1> <5EF1> <9C4A> -<5EF3> <5EF3> <9C4B> -<5EF4> <5EF4> <9C4D> -<5EF6> <5EF6> <8984> -<5EF7> <5EF7> <92EC> -<5EF8> <5EF8> <9C4E> -<5EFA> <5EFA> <8C9A> -<5EFB> <5EFB> <89F4> -<5EFC> <5EFC> <9455> -<5EFE> <5EFE> <9C4F> -<5EFF> <5EFF> <93F9> -<5F01> <5F01> <95D9> -<5F03> <5F03> <9C50> -<5F04> <5F04> <984D> -<5F09> <5F09> <9C51> -<5F0A> <5F0A> <95BE> -<5F0B> <5F0B> <9C54> -<5F0C> <5F0C> <989F> -<5F0D> <5F0D> <98AF> -<5F0F> <5F0F> <8EAE> -<5F10> <5F10> <93F3> -<5F11> <5F11> <9C55> -<5F13> <5F13> <8B7C> -<5F14> <5F14> <92A2> -<5F15> <5F15> <88F8> -<5F16> <5F16> <9C56> -<5F17> <5F17> <95A4> -<5F18> <5F18> <8D4F> -<5F1B> <5F1B> <926F> -<5F1F> <5F1F> <92ED> -<5F25> <5F25> <96ED> -<5F26> <5F26> <8CB7> -<5F27> <5F27> <8CCA> -<5F29> <5F29> <9C57> -<5F2D> <5F2D> <9C58> -<5F2F> <5F2F> <9C5E> -<5F31> <5F31> <8EE3> -<5F35> <5F35> <92A3> -<5F37> <5F37> <8BAD> -<5F38> <5F38> <9C59> -<5F3C> <5F3C> <954A> -<5F3E> <5F3E> <9265> -<5F41> <5F41> <9C5A> -<5F48> <5F48> <9C5B> -<5F4A> <5F4A> <8BAE> -<5F4C> <5F4C> <9C5C> -<5F4E> <5F4E> <9C5D> -<5F51> <5F51> <9C5F> -<5F53> <5F53> <9396> -<5F56> <5F57> <9C60> -<5F59> <5F59> <9C62> -<5F5C> <5F5C> <9C53> -<5F5D> <5F5D> <9C52> -<5F61> <5F61> <9C63> -<5F62> <5F62> <8C60> -<5F66> <5F66> <9546> -<5F69> <5F69> <8DCA> -<5F6A> <5F6A> <9556> -<5F6B> <5F6B> <92A4> -<5F6C> <5F6C> <956A> -<5F6D> <5F6D> <9C64> -<5F70> <5F70> <8FB2> -<5F71> <5F71> <8965> -<5F73> <5F73> <9C65> -<5F77> <5F77> <9C66> -<5F79> <5F79> <96F0> -<5F7C> <5F7C> <94DE> -<5F7F> <5F7F> <9C69> -<5F80> <5F80> <899D> -<5F81> <5F81> <90AA> -<5F82> <5F82> <9C68> -<5F83> <5F83> <9C67> -<5F84> <5F84> <8C61> -<5F85> <5F85> <91D2> -<5F87> <5F87> <9C6D> -<5F88> <5F88> <9C6B> -<5F8A> <5F8A> <9C6A> -<5F8B> <5F8B> <97A5> -<5F8C> <5F8C> <8CE3> -endbfrange - -100 beginbfrange -<5F90> <5F90> <8F99> -<5F91> <5F91> <9C6C> -<5F92> <5F92> <936B> -<5F93> <5F93> <8F5D> -<5F97> <5F97> <93BE> -<5F98> <5F98> <9C70> -<5F99> <5F99> <9C6F> -<5F9E> <5F9E> <9C6E> -<5FA0> <5FA0> <9C71> -<5FA1> <5FA1> <8CE4> -<5FA8> <5FA8> <9C72> -<5FA9> <5FA9> <959C> -<5FAA> <5FAA> <8F7A> -<5FAD> <5FAD> <9C73> -<5FAE> <5FAE> <94F7> -<5FB3> <5FB3> <93BF> -<5FB4> <5FB4> <92A5> -<5FB9> <5FB9> <934F> -<5FBC> <5FBC> <9C74> -<5FBD> <5FBD> <8B4A> -<5FC3> <5FC3> <9053> -<5FC5> <5FC5> <954B> -<5FCC> <5FCC> <8AF5> -<5FCD> <5FCD> <9445> -<5FD6> <5FD6> <9C75> -<5FD7> <5FD7> <8E75> -<5FD8> <5FD9> <9659> -<5FDC> <5FDC> <899E> -<5FDD> <5FDD> <9C7A> -<5FE0> <5FE0> <9289> -<5FE4> <5FE4> <9C77> -<5FEB> <5FEB> <89F5> -<5FF0> <5FF0> <9CAB> -<5FF1> <5FF1> <9C79> -<5FF5> <5FF5> <944F> -<5FF8> <5FF8> <9C78> -<5FFB> <5FFB> <9C76> -<5FFD> <5FFD> <8D9A> -<5FFF> <5FFF> <9C7C> -<600E> <600E> <9C83> -<600F> <600F> <9C89> -<6010> <6010> <9C81> -<6012> <6012> <937B> -<6015> <6015> <9C86> -<6016> <6016> <957C> -<6019> <6019> <9C80> -<601B> <601B> <9C85> -<601C> <601C> <97E5> -<601D> <601D> <8E76> -<6020> <6020> <91D3> -<6021> <6021> <9C7D> -<6025> <6025> <8B7D> -<6026> <6026> <9C88> -<6027> <6027> <90AB> -<6028> <6028> <8985> -<6029> <6029> <9C82> -<602A> <602A> <89F6> -<602B> <602B> <9C87> -<602F> <602F> <8BAF> -<6031> <6031> <9C84> -<603A> <603A> <9C8A> -<6041> <6041> <9C8C> -<6042> <6042> <9C96> -<6043> <6043> <9C94> -<6046> <6046> <9C91> -<604A> <604A> <9C90> -<604B> <604B> <97F6> -<604D> <604D> <9C92> -<6050> <6050> <8BB0> -<6052> <6052> <8D50> -<6055> <6055> <8F9A> -<6059> <6059> <9C99> -<605A> <605A> <9C8B> -<605F> <605F> <9C8F> -<6060> <6060> <9C7E> -<6062> <6062> <89F8> -<6063> <6063> <9C93> -<6064> <6064> <9C95> -<6065> <6065> <9270> -<6068> <6068> <8DA6> -<6069> <6069> <89B6> -<606A> <606A> <9C8D> -<606B> <606B> <9C98> -<606C> <606C> <9C97> -<606D> <606D> <8BB1> -<606F> <606F> <91A7> -<6070> <6070> <8A86> -<6075> <6075> <8C62> -<6077> <6077> <9C8E> -<6081> <6081> <9C9A> -<6083> <6083> <9C9D> -<6084> <6084> <9C9F> -<6089> <6089> <8EBB> -<608B> <608B> <9CA5> -<608C> <608C> <92EE> -<608D> <608D> <9C9B> -<6092> <6092> <9CA3> -<6094> <6094> <89F7> -<6096> <6097> <9CA1> -<609A> <609A> <9C9E> -endbfrange - -100 beginbfrange -<609B> <609B> <9CA0> -<609F> <609F> <8CE5> -<60A0> <60A0> <9749> -<60A3> <60A3> <8AB3> -<60A6> <60A6> <8978> -<60A7> <60A7> <9CA4> -<60A9> <60A9> <9459> -<60AA> <60AA> <88AB> -<60B2> <60B2> <94DF> -<60B3> <60B3> <9C7B> -<60B4> <60B4> <9CAA> -<60B5> <60B5> <9CAE> -<60B6> <60B6> <96E3> -<60B8> <60B8> <9CA7> -<60BC> <60BC> <9389> -<60BD> <60BD> <9CAC> -<60C5> <60C5> <8FEE> -<60C6> <60C6> <9CAD> -<60C7> <60C7> <93D5> -<60D1> <60D1> <9866> -<60D3> <60D3> <9CA9> -<60D8> <60D8> <9CAF> -<60DA> <60DA> <8D9B> -<60DC> <60DC> <90C9> -<60DF> <60DF> <88D2> -<60E0> <60E0> <9CA8> -<60E1> <60E1> <9CA6> -<60E3> <60E3> <9179> -<60E7> <60E7> <9C9C> -<60E8> <60E8> <8E53> -<60F0> <60F0> <91C4> -<60F1> <60F1> <9CBB> -<60F3> <60F3> <917A> -<60F4> <60F4> <9CB6> -<60F6> <60F7> <9CB3> -<60F9> <60F9> <8EE4> -<60FA> <60FA> <9CB7> -<60FB> <60FB> <9CBA> -<6100> <6100> <9CB5> -<6101> <6101> <8F44> -<6103> <6103> <9CB8> -<6106> <6106> <9CB2> -<6108> <6108> <96FA> -<6109> <6109> <96F9> -<610D> <610E> <9CBC> -<610F> <610F> <88D3> -<6115> <6115> <9CB1> -<611A> <611A> <8BF0> -<611B> <611B> <88A4> -<611F> <611F> <8AB4> -<6121> <6121> <9CB9> -<6127> <6127> <9CC1> -<6128> <6128> <9CC0> -<612C> <612C> <9CC5> -<6134> <6134> <9CC6> -<613C> <613C> <9CC4> -<613D> <613D> <9CC7> -<613E> <613E> <9CBF> -<613F> <613F> <9CC3> -<6142> <6142> <9CC8> -<6144> <6144> <9CC9> -<6147> <6147> <9CBE> -<6148> <6148> <8E9C> -<614A> <614A> <9CC2> -<614B> <614B> <91D4> -<614C> <614C> <8D51> -<614D> <614D> <9CB0> -<614E> <614E> <9054> -<6153> <6153> <9CD6> -<6155> <6155> <95E7> -<6158> <615A> <9CCC> -<615D> <615D> <9CD5> -<615F> <615F> <9CD4> -<6162> <6162> <969D> -<6163> <6163> <8AB5> -<6165> <6165> <9CD2> -<6167> <6167> <8C64> -<6168> <6168> <8A53> -<616B> <616B> <9CCF> -<616E> <616E> <97B6> -<616F> <616F> <9CD1> -<6170> <6170> <88D4> -<6171> <6171> <9CD3> -<6173> <6173> <9CCA> -<6174> <6174> <9CD0> -<6175> <6175> <9CD7> -<6176> <6176> <8C63> -<6177> <6177> <9CCB> -<617E> <617E> <977C> -<6182> <6182> <974A> -<6187> <6187> <9CDA> -<618A> <618A> <9CDE> -<618E> <618E> <919E> -<6190> <6190> <97F7> -<6191> <6191> <9CDF> -<6194> <6194> <9CDC> -<6196> <6196> <9CD9> -<6199> <6199> <9CD8> -<619A> <619A> <9CDD> -<61A4> <61A4> <95AE> -endbfrange - -100 beginbfrange -<61A7> <61A7> <93B2> -<61A9> <61A9> <8C65> -<61AB> <61AB> <9CE0> -<61AC> <61AC> <9CDB> -<61AE> <61AE> <9CE1> -<61B2> <61B2> <8C9B> -<61B6> <61B6> <89AF> -<61BA> <61BA> <9CE9> -<61BE> <61BE> <8AB6> -<61C3> <61C3> <9CE7> -<61C6> <61C6> <9CE8> -<61C7> <61C7> <8DA7> -<61C8> <61C8> <9CE6> -<61C9> <61C9> <9CE4> -<61CA> <61CA> <9CE3> -<61CB> <61CB> <9CEA> -<61CC> <61CC> <9CE2> -<61CD> <61CD> <9CEC> -<61D0> <61D0> <89F9> -<61E3> <61E3> <9CEE> -<61E6> <61E6> <9CED> -<61F2> <61F2> <92A6> -<61F4> <61F4> <9CF1> -<61F6> <61F6> <9CEF> -<61F7> <61F7> <9CE5> -<61F8> <61F8> <8C9C> -<61FA> <61FA> <9CF0> -<61FC> <61FC> <9CF4> -<61FD> <61FD> <9CF3> -<61FE> <61FE> <9CF5> -<61FF> <61FF> <9CF2> -<6200> <6200> <9CF6> -<6208> <6209> <9CF7> -<620A> <620A> <95E8> -<620C> <620C> <9CFA> -<620D> <620D> <9CF9> -<620E> <620E> <8F5E> -<6210> <6210> <90AC> -<6211> <6211> <89E4> -<6212> <6212> <89FA> -<6214> <6214> <9CFB> -<6216> <6216> <88BD> -<621A> <621A> <90CA> -<621B> <621B> <9CFC> -<621D> <621D> -<621E> <621E> <9D40> -<621F> <621F> <8C81> -<6221> <6221> <9D41> -<6226> <6226> <90ED> -<622A> <622A> <9D42> -<622E> <622E> <9D43> -<622F> <622F> <8B59> -<6230> <6230> <9D44> -<6232> <6233> <9D45> -<6234> <6234> <91D5> -<6238> <6238> <8CCB> -<623B> <623B> <96DF> -<623F> <623F> <965B> -<6240> <6240> <8F8A> -<6241> <6241> <9D47> -<6247> <6247> <90EE> -<6248> <6248> -<6249> <6249> <94E0> -<624B> <624B> <8EE8> -<624D> <624D> <8DCB> -<624E> <624E> <9D48> -<6253> <6253> <91C5> -<6255> <6255> <95A5> -<6258> <6258> <91EF> -<625B> <625B> <9D4B> -<625E> <625E> <9D49> -<6260> <6260> <9D4C> -<6263> <6263> <9D4A> -<6268> <6268> <9D4D> -<626E> <626E> <95AF> -<6271> <6271> <88B5> -<6276> <6276> <957D> -<6279> <6279> <94E1> -<627C> <627C> <9D4E> -<627E> <627E> <9D51> -<627F> <627F> <8FB3> -<6280> <6280> <8B5A> -<6282> <6282> <9D4F> -<6283> <6283> <9D56> -<6284> <6284> <8FB4> -<6289> <6289> <9D50> -<628A> <628A> <9463> -<6291> <6291> <977D> -<6292> <6293> <9D52> -<6294> <6294> <9D57> -<6295> <6295> <938A> -<6296> <6296> <9D54> -<6297> <6297> <8D52> -<6298> <6298> <90DC> -<629B> <629B> <9D65> -<629C> <629C> <94B2> -<629E> <629E> <91F0> -<62AB> <62AB> <94E2> -<62AC> <62AC> <9DAB> -<62B1> <62B1> <95F8> -endbfrange - -100 beginbfrange -<62B5> <62B5> <92EF> -<62B9> <62B9> <9695> -<62BB> <62BB> <9D5A> -<62BC> <62BC> <899F> -<62BD> <62BD> <928A> -<62C2> <62C2> <9D63> -<62C5> <62C5> <9253> -<62C6> <62C6> <9D5D> -<62C7> <62C7> <9D64> -<62C8> <62C8> <9D5F> -<62C9> <62C9> <9D66> -<62CA> <62CA> <9D62> -<62CC> <62CC> <9D61> -<62CD> <62CD> <948F> -<62CF> <62CF> <9D5B> -<62D0> <62D0> <89FB> -<62D1> <62D1> <9D59> -<62D2> <62D2> <8B91> -<62D3> <62D3> <91F1> -<62D4> <62D4> <9D55> -<62D7> <62D7> <9D58> -<62D8> <62D8> <8D53> -<62D9> <62D9> <90D9> -<62DB> <62DB> <8FB5> -<62DC> <62DC> <9D60> -<62DD> <62DD> <9471> -<62E0> <62E0> <8B92> -<62E1> <62E1> <8A67> -<62EC> <62EC> <8A87> -<62ED> <62ED> <9040> -<62EE> <62EE> <9D68> -<62EF> <62EF> <9D6D> -<62F1> <62F1> <9D69> -<62F3> <62F3> <8C9D> -<62F5> <62F5> <9D6E> -<62F6> <62F6> <8E41> -<62F7> <62F7> <8D89> -<62FE> <62FE> <8F45> -<62FF> <62FF> <9D5C> -<6301> <6301> <8E9D> -<6302> <6302> <9D6B> -<6307> <6307> <8E77> -<6308> <6308> <9D6C> -<6309> <6309> <88C2> -<630C> <630C> <9D67> -<6311> <6311> <92A7> -<6319> <6319> <8B93> -<631F> <631F> <8BB2> -<6327> <6327> <9D6A> -<6328> <6328> <88A5> -<632B> <632B> <8DC1> -<632F> <632F> <9055> -<633A> <633A> <92F0> -<633D> <633D> <94D2> -<633E> <633E> <9D70> -<633F> <633F> <917D> -<6349> <6349> <91A8> -<634C> <634C> <8E4A> -<634D> <634D> <9D71> -<634F> <634F> <9D73> -<6350> <6350> <9D6F> -<6355> <6355> <95DF> -<6357> <6357> <92BB> -<635C> <635C> <917B> -<6367> <6367> <95F9> -<6368> <6368> <8ECC> -<6369> <6369> <9D80> -<636B> <636B> <9D7E> -<636E> <636E> <9098> -<6372> <6372> <8C9E> -<6376> <6376> <9D78> -<6377> <6377> <8FB7> -<637A> <637A> <93E6> -<637B> <637B> <9450> -<6380> <6380> <9D76> -<6383> <6383> <917C> -<6388> <6388> <8EF6> -<6389> <6389> <9D7B> -<638C> <638C> <8FB6> -<638E> <638E> <9D75> -<638F> <638F> <9D7A> -<6392> <6392> <9472> -<6396> <6396> <9D74> -<6398> <6398> <8C40> -<639B> <639B> <8A7C> -<639F> <639F> <9D7C> -<63A0> <63A0> <97A9> -<63A1> <63A1> <8DCC> -<63A2> <63A2> <9254> -<63A3> <63A3> <9D79> -<63A5> <63A5> <90DA> -<63A7> <63A7> <8D54> -<63A8> <63A8> <9084> -<63A9> <63A9> <8986> -<63AA> <63AA> <915B> -<63AB> <63AB> <9D77> -<63AC> <63AC> <8B64> -<63B2> <63B2> <8C66> -<63B4> <63B4> <92CD> -<63B5> <63B5> <9D7D> -endbfrange - -100 beginbfrange -<63BB> <63BB> <917E> -<63BE> <63BE> <9D81> -<63C0> <63C0> <9D83> -<63C3> <63C3> <91B5> -<63C4> <63C4> <9D89> -<63C6> <63C6> <9D84> -<63C9> <63C9> <9D86> -<63CF> <63CF> <9560> -<63D0> <63D0> <92F1> -<63D2> <63D2> <9D87> -<63D6> <63D6> <974B> -<63DA> <63DA> <9767> -<63DB> <63DB> <8AB7> -<63E1> <63E1> <88AC> -<63E3> <63E3> <9D85> -<63E9> <63E9> <9D82> -<63EE> <63EE> <8AF6> -<63F4> <63F4> <8987> -<63F6> <63F6> <9D88> -<63FA> <63FA> <9768> -<6406> <6406> <9D8C> -<640D> <640D> <91B9> -<640F> <640F> <9D93> -<6413> <6413> <9D8D> -<6414> <6414> <917E> -<6416> <6416> <9D8A> -<6417> <6417> <9D91> -<641C> <641C> <9D72> -<6426> <6426> <9D8E> -<6428> <6428> <9D92> -<642C> <642C> <94C0> -<642D> <642D> <938B> -<6434> <6434> <9D8B> -<6436> <6436> <9D8F> -<643A> <643A> <8C67> -<643E> <643E> <8DEF> -<6442> <6442> <90DB> -<644E> <644E> <9D97> -<6451> <6451> <92CD> -<6458> <6458> <9345> -<6467> <6467> <9D94> -<6469> <6469> <9680> -<646F> <646F> <9D95> -<6476> <6476> <9D96> -<6478> <6478> <96CC> -<647A> <647A> <90A0> -<6483> <6483> <8C82> -<6488> <6488> <9D9D> -<6492> <6492> <8E54> -<6493> <6493> <9D9A> -<6495> <6495> <9D99> -<649A> <649A> <9451> -<649E> <649E> <93B3> -<64A4> <64A4> <9350> -<64A5> <64A5> <9D9B> -<64A9> <64A9> <9D9C> -<64AB> <64AB> <958F> -<64AD> <64AD> <9464> -<64AE> <64AE> <8E42> -<64B0> <64B0> <90EF> -<64B2> <64B2> <966F> -<64B9> <64B9> <8A68> -<64BB> <64BB> <9DA3> -<64BC> <64BC> <9D9E> -<64C1> <64C1> <9769> -<64C2> <64C2> <9DA5> -<64C5> <64C5> <9DA1> -<64C7> <64C7> <9DA2> -<64CD> <64CD> <9180> -<64D2> <64D2> <9DA0> -<64D4> <64D4> <9D5E> -<64D8> <64D8> <9DA4> -<64DA> <64DA> <9D9F> -<64E0> <64E1> <9DA9> -<64E2> <64E2> <9346> -<64E3> <64E3> <9DAC> -<64E6> <64E6> <8E43> -<64E7> <64E7> <9DA7> -<64EC> <64EC> <8B5B> -<64EF> <64EF> <9DAD> -<64F1> <64F1> <9DA6> -<64F2> <64F2> <9DB1> -<64F4> <64F4> <9DB0> -<64F6> <64F6> <9DAF> -<64FA> <64FA> <9DB2> -<64FD> <64FD> <9DB4> -<64FE> <64FE> <8FEF> -<6500> <6500> <9DB3> -<6505> <6505> <9DB7> -<6518> <6518> <9DB5> -<651C> <651C> <9DB6> -<651D> <651D> <9D90> -<6522> <6522> <9DB7> -<6523> <6523> <9DB9> -<6524> <6524> <9DB8> -<652A> <652A> <9D98> -<652B> <652B> <9DBA> -<652C> <652C> <9DAE> -<652F> <652F> <8E78> -<6534> <6535> <9DBB> -endbfrange - -100 beginbfrange -<6536> <6536> <9DBE> -<6537> <6537> <9DBD> -<6538> <6538> <9DBF> -<6539> <6539> <89FC> -<653B> <653B> <8D55> -<653E> <653E> <95FA> -<653F> <653F> <90AD> -<6545> <6545> <8CCC> -<6548> <6548> <9DC1> -<654D> <654D> <9DC4> -<654F> <654F> <9571> -<6551> <6551> <8B7E> -<6555> <6555> <9DC3> -<6556> <6556> <9DC2> -<6557> <6557> <9473> -<6558> <6558> <9DC5> -<6559> <6559> <8BB3> -<655D> <655D> <9DC7> -<655E> <655E> <9DC6> -<6562> <6562> <8AB8> -<6563> <6563> <8E55> -<6566> <6566> <93D6> -<656C> <656C> <8C68> -<6570> <6570> <9094> -<6572> <6572> <9DC8> -<6574> <6574> <90AE> -<6575> <6575> <9347> -<6577> <6577> <957E> -<6578> <6578> <9DC9> -<6582> <6583> <9DCA> -<6587> <6587> <95B6> -<6588> <6588> <9B7C> -<6589> <6589> <90C4> -<658C> <658C> <956B> -<658E> <658E> <8DD6> -<6590> <6590> <94E3> -<6591> <6591> <94C1> -<6597> <6597> <936C> -<6599> <6599> <97BF> -<659B> <659B> <9DCD> -<659C> <659C> <8ECE> -<659F> <659F> <9DCE> -<65A1> <65A1> <88B4> -<65A4> <65A4> <8BD2> -<65A5> <65A5> <90CB> -<65A7> <65A7> <9580> -<65AB> <65AB> <9DCF> -<65AC> <65AC> <8E61> -<65AD> <65AD> <9266> -<65AF> <65AF> <8E7A> -<65B0> <65B0> <9056> -<65B7> <65B7> <9DD0> -<65B9> <65B9> <95FB> -<65BC> <65BC> <8997> -<65BD> <65BD> <8E7B> -<65C1> <65C1> <9DD3> -<65C3> <65C3> <9DD1> -<65C4> <65C4> <9DD4> -<65C5> <65C5> <97B7> -<65C6> <65C6> <9DD2> -<65CB> <65CB> <90F9> -<65CC> <65CC> <9DD5> -<65CF> <65CF> <91B0> -<65D2> <65D2> <9DD6> -<65D7> <65D7> <8AF8> -<65D9> <65D9> <9DD8> -<65DB> <65DB> <9DD7> -<65E0> <65E1> <9DD9> -<65E2> <65E2> <8AF9> -<65E5> <65E5> <93FA> -<65E6> <65E6> <9255> -<65E7> <65E7> <8B8C> -<65E8> <65E8> <8E7C> -<65E9> <65E9> <9181> -<65EC> <65EC> <8F7B> -<65ED> <65ED> <88AE> -<65F1> <65F1> <9DDB> -<65FA> <65FA> <89A0> -<65FB> <65FB> <9DDF> -<6602> <6602> <8D56> -<6603> <6603> <9DDE> -<6606> <6606> <8DA9> -<6607> <6607> <8FB8> -<660A> <660A> <9DDD> -<660C> <660C> <8FB9> -<660E> <660E> <96BE> -<660F> <660F> <8DA8> -<6613> <6613> <88D5> -<6614> <6614> <90CC> -<661C> <661C> <9DE4> -<661F> <661F> <90AF> -<6620> <6620> <8966> -<6625> <6625> <8F74> -<6627> <6627> <9686> -<6628> <6628> <8DF0> -<662D> <662D> <8FBA> -<662F> <662F> <90A5> -<6634> <6634> <9DE3> -<6635> <6636> <9DE1> -<663B> <663B> <8D56> -endbfrange - -100 beginbfrange -<663C> <663C> <928B> -<663F> <663F> <9E45> -<6641> <6641> <9DE8> -<6642> <6642> <8E9E> -<6643> <6643> <8D57> -<6644> <6644> <9DE6> -<6649> <6649> <9DE7> -<664B> <664B> <9057> -<664F> <664F> <9DE5> -<6652> <6652> <8E4E> -<665D> <665D> <9DEA> -<665E> <665E> <9DE9> -<665F> <665F> <9DEE> -<6662> <6662> <9DEF> -<6664> <6664> <9DEB> -<6666> <6666> <8A41> -<6667> <6668> <9DEC> -<6669> <6669> <94D3> -<666E> <666E> <9581> -<666F> <666F> <8C69> -<6670> <6670> <9DF0> -<6674> <6674> <90B0> -<6676> <6676> <8FBB> -<667A> <667A> <9271> -<6681> <6681> <8BC5> -<6683> <6683> <9DF1> -<6684> <6684> <9DF5> -<6687> <6687> <89C9> -<6688> <6688> <9DF2> -<6689> <6689> <9DF4> -<668E> <668E> <9DF3> -<6691> <6691> <8F8B> -<6696> <6696> <9267> -<6697> <6697> <88C3> -<6698> <6698> <9DF6> -<669D> <669D> <9DF7> -<66A2> <66A2> <92A8> -<66A6> <66A6> <97EF> -<66AB> <66AB> <8E62> -<66AE> <66AE> <95E9> -<66B4> <66B4> <965C> -<66B8> <66B8> <9E41> -<66B9> <66B9> <9DF9> -<66BC> <66BC> <9DFC> -<66BE> <66BE> <9DFB> -<66C1> <66C1> <9DF8> -<66C4> <66C4> <9E40> -<66C7> <66C7> <93DC> -<66C9> <66C9> <9DFA> -<66D6> <66D6> <9E42> -<66D9> <66D9> <8F8C> -<66DA> <66DA> <9E43> -<66DC> <66DC> <976A> -<66DD> <66DD> <9498> -<66E0> <66E0> <9E44> -<66E6> <66E6> <9E46> -<66E9> <66E9> <9E47> -<66F0> <66F0> <9E48> -<66F2> <66F2> <8BC8> -<66F3> <66F3> <8967> -<66F4> <66F4> <8D58> -<66F5> <66F5> <9E49> -<66F7> <66F7> <9E4A> -<66F8> <66F8> <8F91> -<66F9> <66F9> <9182> -<66FC> <66FC> <99D6> -<66FD> <66FD> <915D> -<66FE> <66FE> <915C> -<66FF> <66FF> <91D6> -<6700> <6700> <8DC5> -<6703> <6703> <98F0> -<6708> <6708> <8C8E> -<6709> <6709> <974C> -<670B> <670B> <95FC> -<670D> <670D> <959E> -<670F> <670F> <9E4B> -<6714> <6714> <8DF1> -<6715> <6715> <92BD> -<6716> <6716> <9E4C> -<6717> <6717> <984E> -<671B> <671B> <965D> -<671D> <671D> <92A9> -<671E> <671E> <9E4D> -<671F> <671F> <8AFA> -<6726> <6727> <9E4E> -<6728> <6728> <96D8> -<672A> <672A> <96A2> -<672B> <672B> <9696> -<672C> <672C> <967B> -<672D> <672D> <8E44> -<672E> <672E> <9E51> -<6731> <6731> <8EE9> -<6734> <6734> <9670> -<6736> <6736> <9E53> -<6737> <6737> <9E56> -<6738> <6738> <9E55> -<673A> <673A> <8AF7> -<673D> <673D> <8B80> -<673F> <673F> <9E52> -<6741> <6741> <9E54> -endbfrange - -100 beginbfrange -<6746> <6746> <9E57> -<6749> <6749> <9099> -<674E> <674E> <979B> -<674F> <674F> <88C7> -<6750> <6750> <8DDE> -<6751> <6751> <91BA> -<6753> <6753> <8EDB> -<6756> <6756> <8FF1> -<6759> <6759> <9E5A> -<675C> <675C> <936D> -<675E> <675E> <9E58> -<675F> <675F> <91A9> -<6760> <6760> <9E59> -<6761> <6761> <8FF0> -<6762> <6762> <96DB> -<6763> <6764> <9E5B> -<6765> <6765> <9788> -<676A> <676A> <9E61> -<676D> <676D> <8D59> -<676F> <676F> <9474> -<6770> <6770> <9E5E> -<6771> <6771> <938C> -<6772> <6772> <9DDC> -<6773> <6773> <9DE0> -<6775> <6775> <8B6E> -<6777> <6777> <9466> -<677C> <677C> <9E60> -<677E> <677E> <8FBC> -<677F> <677F> <94C2> -<6785> <6785> <9E66> -<6787> <6787> <94F8> -<6789> <6789> <9E5D> -<678B> <678B> <9E63> -<678C> <678C> <9E62> -<6790> <6790> <90CD> -<6795> <6795> <968D> -<6797> <6797> <97D1> -<679A> <679A> <9687> -<679C> <679C> <89CA> -<679D> <679D> <8E7D> -<67A0> <67A0> <9867> -<67A1> <67A1> <9E65> -<67A2> <67A2> <9095> -<67A6> <67A6> <9E64> -<67A9> <67A9> <9E5F> -<67AF> <67AF> <8CCD> -<67B3> <67B3> <9E6B> -<67B4> <67B4> <9E69> -<67B6> <67B6> <89CB> -<67B7> <67B7> <9E67> -<67B8> <67B8> <9E6D> -<67B9> <67B9> <9E73> -<67C1> <67C1> <91C6> -<67C4> <67C4> <95BF> -<67C6> <67C6> <9E75> -<67CA> <67CA> <9541> -<67CE> <67CE> <9E74> -<67CF> <67CF> <9490> -<67D0> <67D0> <965E> -<67D1> <67D1> <8AB9> -<67D3> <67D3> <90F5> -<67D4> <67D4> <8F5F> -<67D8> <67D8> <92D1> -<67DA> <67DA> <974D> -<67DD> <67DD> <9E70> -<67DE> <67DE> <9E6F> -<67E2> <67E2> <9E71> -<67E4> <67E4> <9E6E> -<67E7> <67E7> <9E76> -<67E9> <67E9> <9E6C> -<67EC> <67EC> <9E6A> -<67EE> <67EE> <9E72> -<67EF> <67EF> <9E68> -<67F1> <67F1> <928C> -<67F3> <67F3> <96F6> -<67F4> <67F4> <8EC4> -<67F5> <67F5> <8DF2> -<67FB> <67FB> <8DB8> -<67FE> <67FE> <968F> -<67FF> <67FF> <8A60> -<6802> <6802> <92CC> -<6803> <6803> <93C8> -<6804> <6804> <8968> -<6805> <6805> <8DF2> -<6813> <6813> <90F0> -<6816> <6816> <90B2> -<6817> <6817> <8C49> -<681E> <681E> <9E78> -<6821> <6821> <8D5A> -<6822> <6822> <8A9C> -<6829> <6829> <9E7A> -<682A> <682A> <8A94> -<682B> <682B> <9E81> -<6832> <6832> <9E7D> -<6834> <6834> <90F1> -<6838> <6838> <8A6A> -<6839> <6839> <8DAA> -<683C> <683C> <8A69> -<683D> <683D> <8DCD> -<6840> <6840> <9E7B> -endbfrange - -100 beginbfrange -<6841> <6841> <8C85> -<6842> <6842> <8C6A> -<6843> <6843> <938D> -<6846> <6846> <9E79> -<6848> <6848> <88C4> -<684D> <684D> <9E7C> -<684E> <684E> <9E7E> -<6850> <6850> <8BCB> -<6851> <6851> <8C4B> -<6853> <6853> <8ABA> -<6854> <6854> <8B6A> -<6859> <6859> <9E82> -<685C> <685C> <8DF7> -<685D> <685D> <9691> -<685F> <685F> <8E56> -<6863> <6863> <9E83> -<6867> <6867> <954F> -<6874> <6874> <9E8F> -<6876> <6876> <89B1> -<6877> <6877> <9E84> -<687E> <687E> <9E95> -<687F> <687F> <9E85> -<6881> <6881> <97C0> -<6883> <6883> <9E8C> -<6885> <6885> <947E> -<688D> <688D> <9E94> -<688E> <688E> <9E94> -<688F> <688F> <9E87> -<6893> <6893> <88B2> -<6894> <6894> <9E89> -<6897> <6897> <8D5B> -<689B> <689B> <9E8B> -<689D> <689D> <9E8A> -<689F> <689F> <9E86> -<68A0> <68A0> <9E91> -<68A2> <68A2> <8FBD> -<68A6> <68A6> <9AEB> -<68A7> <68A7> <8CE6> -<68A8> <68A8> <979C> -<68AD> <68AD> <9E88> -<68AF> <68AF> <92F2> -<68B0> <68B0> <8A42> -<68B1> <68B1> <8DAB> -<68B3> <68B3> <9E80> -<68B5> <68B5> <9E90> -<68B6> <68B6> <8A81> -<68B9> <68B9> <9E8E> -<68BA> <68BA> <9E92> -<68BC> <68BC> <938E> -<68C4> <68C4> <8AFC> -<68C6> <68C6> <9EB0> -<68C9> <68C9> <96C7> -<68CA> <68CA> <9E97> -<68CB> <68CB> <8AFB> -<68CD> <68CD> <9E9E> -<68D2> <68D2> <965F> -<68D4> <68D4> <9E9F> -<68D5> <68D5> <9EA1> -<68D7> <68D7> <9EA5> -<68D8> <68D8> <9E99> -<68DA> <68DA> <9249> -<68DF> <68DF> <938F> -<68E0> <68E0> <9EA9> -<68E1> <68E1> <9E9C> -<68E3> <68E3> <9EA6> -<68E7> <68E7> <9EA0> -<68EE> <68EE> <9058> -<68EF> <68EF> <9EAA> -<68F2> <68F2> <90B1> -<68F9> <68F9> <9EA8> -<68FA> <68FA> <8ABB> -<6900> <6900> <986F> -<6901> <6901> <9E96> -<6904> <6904> <9EA4> -<6905> <6905> <88D6> -<6908> <6908> <9E98> -<690B> <690B> <96B8> -<690C> <690C> <9E9D> -<690D> <690D> <9041> -<690E> <690E> <92C5> -<690F> <690F> <9E93> -<6912> <6912> <9EA3> -<6919> <6919> <909A> -<691A> <691A> <9EAD> -<691B> <691B> <8A91> -<691C> <691C> <8C9F> -<6921> <6921> <9EAF> -<6922> <6922> <9E9A> -<6923> <6923> <9EAE> -<6925> <6925> <9EA7> -<6926> <6926> <9E9B> -<6928> <6928> <9EAB> -<692A> <692A> <9EAC> -<6930> <6930> <9EBD> -<6934> <6934> <93CC> -<6936> <6936> <9EA2> -<6939> <6939> <9EB9> -<693D> <693D> <9EBB> -<693F> <693F> <92D6> -<694A> <694A> <976B> -endbfrange - -100 beginbfrange -<6953> <6953> <9596> -<6954> <6954> <9EB6> -<6955> <6955> <91C8> -<6959> <6959> <9EBC> -<695A> <695A> <915E> -<695C> <695C> <9EB3> -<695D> <695D> <9EC0> -<695E> <695E> <9EBF> -<6960> <6960> <93ED> -<6961> <6961> <9EBE> -<6962> <6962> <93E8> -<696A> <696A> <9EC2> -<696B> <696B> <9EB5> -<696D> <696D> <8BC6> -<696E> <696E> <9EB8> -<696F> <696F> <8F7C> -<6973> <6973> <9480> -<6974> <6974> <9EBA> -<6975> <6975> <8BC9> -<6977> <6977> <9EB2> -<6978> <6978> <9EB4> -<6979> <6979> <9EB1> -<697C> <697C> <984F> -<697D> <697D> <8A79> -<697E> <697E> <9EB7> -<6981> <6981> <9EC1> -<6982> <6982> <8A54> -<698A> <698A> <8DE5> -<698E> <698E> <897C> -<6991> <6991> <9ED2> -<6994> <6994> <9850> -<6995> <6995> <9ED5> -<699B> <699B> <9059> -<699C> <699C> <9ED4> -<69A0> <69A0> <9ED3> -<69A7> <69A7> <9ED0> -<69AE> <69AE> <9EC4> -<69B1> <69B1> <9EE1> -<69B2> <69B2> <9EC3> -<69B4> <69B4> <9ED6> -<69BB> <69BB> <9ECE> -<69BE> <69BE> <9EC9> -<69BF> <69BF> <9EC6> -<69C1> <69C1> <9EC7> -<69C3> <69C3> <9ECF> -<69C7> <69C7> -<69CA> <69CA> <9ECC> -<69CB> <69CB> <8D5C> -<69CC> <69CC> <92C6> -<69CD> <69CD> <9184> -<69CE> <69CE> <9ECA> -<69D0> <69D0> <9EC5> -<69D3> <69D3> <9EC8> -<69D8> <69D8> <976C> -<69D9> <69D9> <968A> -<69DD> <69DD> <9ECD> -<69DE> <69DE> <9ED7> -<69E7> <69E7> <9EDF> -<69E8> <69E8> <9ED8> -<69EB> <69EB> <9EE5> -<69ED> <69ED> <9EE3> -<69F2> <69F2> <9EDE> -<69F9> <69F9> <9EDD> -<69FB> <69FB> <92CE> -<69FD> <69FD> <9185> -<69FF> <69FF> <9EDB> -<6A02> <6A02> <9ED9> -<6A05> <6A05> <9EE0> -<6A0A> <6A0A> <9EE6> -<6A0B> <6A0B> <94F3> -<6A0C> <6A0C> <9EEC> -<6A12> <6A12> <9EE7> -<6A13> <6A13> <9EEA> -<6A14> <6A14> <9EE4> -<6A17> <6A17> <9294> -<6A19> <6A19> <9557> -<6A1B> <6A1B> <9EDA> -<6A1E> <6A1E> <9EE2> -<6A1F> <6A1F> <8FBE> -<6A21> <6A21> <96CD> -<6A22> <6A22> <9EF6> -<6A23> <6A23> <9EE9> -<6A29> <6A29> <8CA0> -<6A2A> <6A2A> <89A1> -<6A2B> <6A2B> <8A7E> -<6A2E> <6A2E> <9ED1> -<6A35> <6A35> <8FBF> -<6A36> <6A36> <9EEE> -<6A38> <6A38> <9EF5> -<6A39> <6A39> <8EF7> -<6A3A> <6A3A> <8A92> -<6A3D> <6A3D> <924D> -<6A44> <6A44> <9EEB> -<6A47> <6A47> <9EF0> -<6A48> <6A48> <9EF4> -<6A4B> <6A4B> <8BB4> -<6A58> <6A58> <8B6B> -<6A59> <6A59> <9EF2> -<6A5F> <6A5F> <8B40> -<6A61> <6A61> <93C9> -endbfrange - -100 beginbfrange -<6A62> <6A62> <9EF1> -<6A66> <6A66> <9EF3> -<6A72> <6A72> <9EED> -<6A78> <6A78> <9EEF> -<6A7F> <6A7F> <8A80> -<6A80> <6A80> <9268> -<6A84> <6A84> <9EFA> -<6A8D> <6A8D> <9EF8> -<6A8E> <6A8E> <8CE7> -<6A90> <6A90> <9EF7> -<6A97> <6A97> <9F40> -<6A9C> <6A9C> <9E77> -<6AA0> <6AA0> <9EF9> -<6AA2> <6AA3> <9EFB> -<6AAA> <6AAA> <9F4B> -<6AAC> <6AAC> <9F47> -<6AAE> <6AAE> <9E8D> -<6AB3> <6AB3> <9F46> -<6AB8> <6AB8> <9F45> -<6ABB> <6ABB> <9F42> -<6AC1> <6AC1> <9EE8> -<6AC2> <6AC2> <9F44> -<6AC3> <6AC3> <9F43> -<6AD1> <6AD1> <9F49> -<6AD3> <6AD3> <9845> -<6ADA> <6ADA> <9F4C> -<6ADB> <6ADB> <8BF9> -<6ADE> <6ADE> <9F48> -<6ADF> <6ADF> <9F4A> -<6AE8> <6AE8> <94A5> -<6AEA> <6AEA> <9F4D> -<6AFA> <6AFA> <9F51> -<6AFB> <6AFB> <9F4E> -<6B04> <6B04> <9793> -<6B05> <6B05> <9F4F> -<6B0A> <6B0A> <9EDC> -<6B12> <6B12> <9F52> -<6B16> <6B16> <9F53> -<6B1D> <6B1D> <8954> -<6B1F> <6B1F> <9F55> -<6B20> <6B20> <8C87> -<6B21> <6B21> <8E9F> -<6B23> <6B23> <8BD3> -<6B27> <6B27> <89A2> -<6B32> <6B32> <977E> -<6B37> <6B37> <9F57> -<6B38> <6B38> <9F56> -<6B39> <6B39> <9F59> -<6B3A> <6B3A> <8B5C> -<6B3D> <6B3D> <8BD4> -<6B3E> <6B3E> <8ABC> -<6B43> <6B43> <9F5C> -<6B47> <6B47> <9F5B> -<6B49> <6B49> <9F5D> -<6B4C> <6B4C> <89CC> -<6B4E> <6B4E> <9256> -<6B50> <6B50> <9F5E> -<6B53> <6B53> <8ABD> -<6B54> <6B54> <9F60> -<6B59> <6B59> <9F5F> -<6B5B> <6B5B> <9F61> -<6B5F> <6B5F> <9F62> -<6B61> <6B61> <9F63> -<6B62> <6B62> <8E7E> -<6B63> <6B63> <90B3> -<6B64> <6B64> <8D9F> -<6B66> <6B66> <9590> -<6B69> <6B69> <95E0> -<6B6A> <6B6A> <9863> -<6B6F> <6B6F> <8E95> -<6B73> <6B73> <8DCE> -<6B74> <6B74> <97F0> -<6B78> <6B79> <9F64> -<6B7B> <6B7B> <8E80> -<6B7F> <6B80> <9F66> -<6B83> <6B83> <9F69> -<6B84> <6B84> <9F68> -<6B86> <6B86> <9677> -<6B89> <6B89> <8F7D> -<6B8A> <6B8A> <8EEA> -<6B8B> <6B8B> <8E63> -<6B8D> <6B8D> <9F6A> -<6B95> <6B95> <9F6C> -<6B96> <6B96> <9042> -<6B98> <6B98> <9F6B> -<6B9E> <6B9E> <9F6D> -<6BA4> <6BA4> <9F6E> -<6BAA> <6BAB> <9F6F> -<6BAF> <6BAF> <9F71> -<6BB1> <6BB1> <9F73> -<6BB2> <6BB2> <9F72> -<6BB3> <6BB3> <9F74> -<6BB4> <6BB4> <89A3> -<6BB5> <6BB5> <9269> -<6BB7> <6BB7> <9F75> -<6BBA> <6BBA> <8E45> -<6BBB> <6BBB> <8A6B> -<6BBC> <6BBC> <9F76> -<6BBF> <6BBF> <9361> -<6BC0> <6BC0> <9ACA> -endbfrange - -100 beginbfrange -<6BC5> <6BC5> <8B42> -<6BC6> <6BC6> <9F77> -<6BCB> <6BCB> <9F78> -<6BCD> <6BCD> <95EA> -<6BCE> <6BCE> <9688> -<6BD2> <6BD2> <93C5> -<6BD3> <6BD3> <9F79> -<6BD4> <6BD4> <94E4> -<6BD8> <6BD8> <94F9> -<6BDB> <6BDB> <96D1> -<6BDF> <6BDF> <9F7A> -<6BEB> <6BEB> <9F7C> -<6BEC> <6BEC> <9F7B> -<6BEF> <6BEF> <9F7E> -<6BF3> <6BF3> <9F7D> -<6C08> <6C08> <9F81> -<6C0F> <6C0F> <8E81> -<6C11> <6C11> <96AF> -<6C13> <6C14> <9F82> -<6C17> <6C17> <8B43> -<6C1B> <6C1B> <9F84> -<6C23> <6C23> <9F86> -<6C24> <6C24> <9F85> -<6C34> <6C34> <9085> -<6C37> <6C37> <9558> -<6C38> <6C38> <8969> -<6C3E> <6C3E> <94C3> -<6C40> <6C40> <92F3> -<6C41> <6C41> <8F60> -<6C42> <6C42> <8B81> -<6C4E> <6C4E> <94C4> -<6C50> <6C50> <8EAC> -<6C55> <6C55> <9F88> -<6C57> <6C57> <8ABE> -<6C5A> <6C5A> <8998> -<6C5D> <6C5D> <93F0> -<6C5E> <6C5E> <9F87> -<6C5F> <6C5F> <8D5D> -<6C60> <6C60> <9272> -<6C62> <6C62> <9F89> -<6C68> <6C68> <9F91> -<6C6A> <6C6A> <9F8A> -<6C70> <6C70> <91BF> -<6C72> <6C72> <8B82> -<6C73> <6C73> <9F92> -<6C7A> <6C7A> <8C88> -<6C7D> <6C7D> <8B44> -<6C7E> <6C7E> <9F90> -<6C81> <6C81> <9F8E> -<6C82> <6C82> <9F8B> -<6C83> <6C83> <9780> -<6C88> <6C88> <92BE> -<6C8C> <6C8C> <93D7> -<6C8D> <6C8D> <9F8C> -<6C90> <6C90> <9F94> -<6C92> <6C92> <9F93> -<6C93> <6C93> <8C42> -<6C96> <6C96> <89AB> -<6C99> <6C99> <8DB9> -<6C9A> <6C9A> <9F8D> -<6C9B> <6C9B> <9F8F> -<6CA1> <6CA1> <9676> -<6CA2> <6CA2> <91F2> -<6CAB> <6CAB> <9697> -<6CAE> <6CAE> <9F9C> -<6CB1> <6CB1> <9F9D> -<6CB3> <6CB3> <89CD> -<6CB8> <6CB8> <95A6> -<6CB9> <6CB9> <96FB> -<6CBA> <6CBA> <9F9F> -<6CBB> <6CBB> <8EA1> -<6CBC> <6CBC> <8FC0> -<6CBD> <6CBD> <9F98> -<6CBE> <6CBE> <9F9E> -<6CBF> <6CBF> <8988> -<6CC1> <6CC1> <8BB5> -<6CC4> <6CC4> <9F95> -<6CC5> <6CC5> <9F9A> -<6CC9> <6CC9> <90F2> -<6CCA> <6CCA> <9491> -<6CCC> <6CCC> <94E5> -<6CD3> <6CD3> <9F97> -<6CD5> <6CD5> <9640> -<6CD7> <6CD7> <9F99> -<6CD9> <6CD9> <9FA2> -<6CDB> <6CDB> <9FA0> -<6CDD> <6CDD> <9F9B> -<6CE1> <6CE1> <9641> -<6CE2> <6CE2> <9467> -<6CE3> <6CE3> <8B83> -<6CE5> <6CE5> <9344> -<6CE8> <6CE8> <928D> -<6CEA> <6CEA> <9FA3> -<6CEF> <6CEF> <9FA1> -<6CF0> <6CF0> <91D7> -<6CF1> <6CF1> <9F96> -<6CF3> <6CF3> <896A> -<6D0B> <6D0B> <976D> -<6D0C> <6D0C> <9FAE> -<6D12> <6D12> <9FAD> -endbfrange - -100 beginbfrange -<6D17> <6D17> <90F4> -<6D19> <6D19> <9FAA> -<6D1B> <6D1B> <978C> -<6D1E> <6D1E> <93B4> -<6D1F> <6D1F> <9FA4> -<6D25> <6D25> <92C3> -<6D29> <6D29> <896B> -<6D2A> <6D2A> <8D5E> -<6D2B> <6D2B> <9FA7> -<6D32> <6D32> <8F46> -<6D33> <6D33> <9FAC> -<6D35> <6D35> <9FAB> -<6D36> <6D36> <9FA6> -<6D38> <6D38> <9FA9> -<6D3B> <6D3B> <8A88> -<6D3D> <6D3D> <9FA8> -<6D3E> <6D3E> <9468> -<6D41> <6D41> <97AC> -<6D44> <6D44> <8FF2> -<6D45> <6D45> <90F3> -<6D59> <6D59> <9FB4> -<6D5A> <6D5A> <9FB2> -<6D5C> <6D5C> <956C> -<6D63> <6D63> <9FAF> -<6D64> <6D64> <9FB1> -<6D66> <6D66> <8959> -<6D69> <6D69> <8D5F> -<6D6A> <6D6A> <9851> -<6D6C> <6D6C> <8A5C> -<6D6E> <6D6E> <9582> -<6D74> <6D74> <9781> -<6D77> <6D77> <8A43> -<6D78> <6D78> <905A> -<6D79> <6D79> <9FB3> -<6D85> <6D85> <9FB8> -<6D88> <6D88> <8FC1> -<6D8C> <6D8C> <974F> -<6D8E> <6D8E> <9FB5> -<6D93> <6D93> <9FB0> -<6D95> <6D95> <9FB6> -<6D99> <6D99> <97DC> -<6D9B> <6D9B> <9393> -<6D9C> <6D9C> <93C0> -<6DAF> <6DAF> <8A55> -<6DB2> <6DB2> <8974> -<6DB5> <6DB5> <9FBC> -<6DB8> <6DB8> <9FBF> -<6DBC> <6DBC> <97C1> -<6DC0> <6DC0> <9784> -<6DC5> <6DC5> <9FC6> -<6DC6> <6DC6> <9FC0> -<6DC7> <6DC7> <9FBD> -<6DCB> <6DCB> <97D2> -<6DCC> <6DCC> <9FC3> -<6DD1> <6DD1> <8F69> -<6DD2> <6DD2> <9FC5> -<6DD5> <6DD5> <9FCA> -<6DD8> <6DD8> <9391> -<6DD9> <6DD9> <9FC8> -<6DDE> <6DDE> <9FC2> -<6DE1> <6DE1> <9257> -<6DE4> <6DE4> <9FC9> -<6DE6> <6DE6> <9FBE> -<6DE8> <6DE8> <9FC4> -<6DEA> <6DEA> <9FCB> -<6DEB> <6DEB> <88FA> -<6DEC> <6DEC> <9FC1> -<6DEE> <6DEE> <9FCC> -<6DF1> <6DF1> <905B> -<6DF3> <6DF3> <8F7E> -<6DF5> <6DF5> <95A3> -<6DF7> <6DF7> <8DAC> -<6DF9> <6DF9> <9FB9> -<6DFA> <6DFA> <9FC7> -<6DFB> <6DFB> <9359> -<6E05> <6E05> <90B4> -<6E07> <6E07> <8A89> -<6E08> <6E08> <8DCF> -<6E09> <6E09> <8FC2> -<6E0A> <6E0A> <9FBB> -<6E0B> <6E0B> <8F61> -<6E13> <6E13> <8C6B> -<6E15> <6E15> <9FBA> -<6E19> <6E19> <9FD0> -<6E1A> <6E1A> <8F8D> -<6E1B> <6E1B> <8CB8> -<6E1D> <6E1D> <9FDF> -<6E1F> <6E1F> <9FD9> -<6E20> <6E20> <8B94> -<6E21> <6E21> <936E> -<6E23> <6E23> <9FD4> -<6E24> <6E24> <9FDD> -<6E25> <6E25> <88AD> -<6E26> <6E26> <8951> -<6E29> <6E29> <89B7> -<6E2B> <6E2B> <9FD6> -<6E2C> <6E2C> <91AA> -<6E2D> <6E2D> <9FCD> -<6E2E> <6E2E> <9FCF> -<6E2F> <6E2F> <8D60> -endbfrange - -100 beginbfrange -<6E38> <6E38> <9FE0> -<6E3A> <6E3A> <9FDB> -<6E3E> <6E3E> <9FD3> -<6E43> <6E43> <9FDA> -<6E4A> <6E4A> <96A9> -<6E4D> <6E4D> <9FD8> -<6E4E> <6E4E> <9FDC> -<6E56> <6E56> <8CCE> -<6E58> <6E58> <8FC3> -<6E5B> <6E5B> <9258> -<6E5F> <6E5F> <9FD2> -<6E67> <6E67> <974E> -<6E6B> <6E6B> <9FD5> -<6E6E> <6E6E> <9FCE> -<6E6F> <6E6F> <9392> -<6E72> <6E72> <9FD1> -<6E76> <6E76> <9FD7> -<6E7E> <6E7E> <9870> -<6E7F> <6E7F> <8EBC> -<6E80> <6E80> <969E> -<6E82> <6E82> <9FE1> -<6E8C> <6E8C> <94AC> -<6E8F> <6E8F> <9FED> -<6E90> <6E90> <8CB9> -<6E96> <6E96> <8F80> -<6E98> <6E98> <9FE3> -<6E9C> <6E9C> <97AD> -<6E9D> <6E9D> <8D61> -<6E9F> <6E9F> <9FF0> -<6EA2> <6EA2> <88EC> -<6EA5> <6EA5> <9FEE> -<6EAA> <6EAA> <9FE2> -<6EAF> <6EAF> <9FE8> -<6EB2> <6EB2> <9FEA> -<6EB6> <6EB6> <976E> -<6EB7> <6EB7> <9FE5> -<6EBA> <6EBA> <934D> -<6EBD> <6EBD> <9FE7> -<6EC2> <6EC2> <9FEF> -<6EC4> <6EC4> <9FE9> -<6EC5> <6EC5> <96C5> -<6EC9> <6EC9> <9FE4> -<6ECB> <6ECB> <8EA0> -<6ECC> <6ECC> <9FFC> -<6ED1> <6ED1> <8A8A> -<6ED3> <6ED3> <9FE6> -<6ED4> <6ED5> <9FEB> -<6EDD> <6EDD> <91EA> -<6EDE> <6EDE> <91D8> -<6EEC> <6EEC> <9FF4> -<6EEF> <6EEF> <9FFA> -<6EF2> <6EF2> <9FF8> -<6EF4> <6EF4> <9348> -<6EF7> <6EF7> -<6EF8> <6EF8> <9FF5> -<6EFE> <6EFE> <9FF6> -<6EFF> <6EFF> <9FDE> -<6F01> <6F01> <8B99> -<6F02> <6F02> <9559> -<6F06> <6F06> <8EBD> -<6F09> <6F09> <8D97> -<6F0F> <6F0F> <9852> -<6F11> <6F11> <9FF2> -<6F13> <6F13> -<6F14> <6F14> <8989> -<6F15> <6F15> <9186> -<6F20> <6F20> <9499> -<6F22> <6F22> <8ABF> -<6F23> <6F23> <97F8> -<6F2B> <6F2B> <969F> -<6F2C> <6F2C> <92D0> -<6F31> <6F31> <9FF9> -<6F32> <6F32> <9FFB> -<6F38> <6F38> <9151> -<6F3E> <6F3E> -<6F3F> <6F3F> <9FF7> -<6F41> <6F41> <9FF1> -<6F45> <6F45> <8AC1> -<6F51> <6F51> <94AC> -<6F54> <6F54> <8C89> -<6F58> <6F58> -<6F5B> <6F5B> -<6F5C> <6F5C> <90F6> -<6F5F> <6F5F> <8A83> -<6F64> <6F64> <8F81> -<6F66> <6F66> -<6F6D> <6F6D> -<6F6E> <6F6E> <92AA> -<6F6F> <6F6F> -<6F70> <6F70> <92D7> -<6F74> <6F74> -<6F78> <6F78> -<6F7A> <6F7A> -<6F7C> <6F7C> -<6F80> <6F80> -<6F81> <6F81> -<6F82> <6F82> -<6F84> <6F84> <909F> -<6F86> <6F86> -<6F8E> <6F8E> -endbfrange - -100 beginbfrange -<6F91> <6F91> -<6F97> <6F97> <8AC0> -<6FA1> <6FA1> -<6FA3> <6FA3> -<6FA4> <6FA4> -<6FAA> <6FAA> -<6FB1> <6FB1> <9362> -<6FB3> <6FB3> -<6FB9> <6FB9> -<6FC0> <6FC0> <8C83> -<6FC1> <6FC1> <91F7> -<6FC2> <6FC2> -<6FC3> <6FC3> <945A> -<6FC6> <6FC6> -<6FD4> <6FD4> -<6FD5> <6FD5> -<6FD8> <6FD8> -<6FDB> <6FDB> -<6FDF> <6FDF> -<6FE0> <6FE0> <8D8A> -<6FE1> <6FE1> <9447> -<6FE4> <6FE4> <9FB7> -<6FEB> <6FEB> <9794> -<6FEC> <6FEC> -<6FEE> <6FEE> -<6FEF> <6FEF> <91F3> -<6FF1> <6FF1> -<6FF3> <6FF3> -<6FF6> <6FF6> -<6FFA> <6FFA> -<6FFE> <6FFE> -<7001> <7001> -<7006> <7006> <93C0> -<7009> <7009> -<700B> <700B> -<700F> <700F> -<7011> <7011> -<7015> <7015> <956D> -<7018> <7018> -<701A> <701A> -<701B> <701B> -<701D> <701D> -<701E> <701E> <93D2> -<701F> <701F> -<7026> <7026> <9295> -<7027> <7027> <91EB> -<702C> <702C> <90A3> -<7030> <7030> -<7032> <7032> -<703E> <703E> -<704C> <704C> <9FF3> -<7051> <7051> -<7058> <7058> <93E5> -<7063> <7063> -<706B> <706B> <89CE> -<706F> <706F> <9394> -<7070> <7070> <8A44> -<7078> <7078> <8B84> -<707C> <707C> <8EDC> -<707D> <707D> <8DD0> -<7089> <7089> <9846> -<708A> <708A> <9086> -<708E> <708E> <898A> -<7092> <7092> -<7099> <7099> -<70AC> <70AC> -<70AD> <70AD> <9259> -<70AE> <70AE> -<70AF> <70AF> -<70B3> <70B3> -<70B8> <70B8> -<70B9> <70B9> <935F> -<70BA> <70BA> <88D7> -<70C8> <70C8> <97F3> -<70CB> <70CB> -<70CF> <70CF> <8947> -<70D9> <70D9> -<70DD> <70DD> -<70DF> <70DF> -<70F1> <70F1> -<70F9> <70F9> <9642> -<70FD> <70FD> -<7109> <7109> -<7114> <7114> <898B> -<7119> <7119> -<711A> <711A> <95B0> -<711C> <711C> -<7121> <7121> <96B3> -<7126> <7126> <8FC5> -<7130> <7130> <898B> -<7136> <7136> <9152> -<713C> <713C> <8FC4> -<7149> <7149> <97F9> -<714C> <714C> -<714E> <714E> <90F7> -<7155> <7155> -<7156> <7156> -<7159> <7159> <898C> -<7162> <7162> -<7164> <7164> <9481> -endbfrange - -100 beginbfrange -<7165> <7165> -<7166> <7166> -<7167> <7167> <8FC6> -<7169> <7169> <94CF> -<716C> <716C> -<716E> <716E> <8ECF> -<717D> <717D> <90F8> -<7184> <7184> -<7188> <7188> -<718A> <718A> <8C46> -<718F> <718F> -<7194> <7194> <976F> -<7195> <7195> -<7199> <7199> -<719F> <719F> <8F6E> -<71A8> <71A8> -<71AC> <71AC> -<71B1> <71B1> <944D> -<71B9> <71B9> -<71BE> <71BE> -<71C3> <71C3> <9452> -<71C8> <71C8> <9395> -<71C9> <71C9> -<71CE> <71CE> -<71D0> <71D0> <97D3> -<71D2> <71D2> -<71D4> <71D4> -<71D5> <71D5> <898D> -<71D7> <71D7> -<71DF> <71DF> <9A7A> -<71E0> <71E0> -<71E5> <71E5> <9187> -<71E6> <71E6> <8E57> -<71E7> <71E7> -<71EC> <71EC> -<71ED> <71ED> <9043> -<71EE> <71EE> <99D7> -<71F5> <71F5> -<71F9> <71F9> -<71FB> <71FB> -<71FC> <71FC> -<71FF> <71FF> -<7206> <7206> <949A> -<720D> <720D> -<7210> <7210> -<721B> <721B> -<7228> <7228> -<722A> <722A> <92DC> -<722C> <722C> -<722D> <722D> -<7230> <7230> -<7232> <7232> -<7235> <7235> <8EDD> -<7236> <7236> <9583> -<723A> <723A> <96EA> -<723B> <723C> -<723D> <723D> <9175> -<723E> <723E> <8EA2> -<723F> <7240> -<7246> <7246> -<7247> <7247> <95D0> -<7248> <7248> <94C5> -<724B> <724B> -<724C> <724C> <9476> -<7252> <7252> <92AB> -<7258> <7258> -<7259> <7259> <89E5> -<725B> <725B> <8B8D> -<725D> <725D> <96C4> -<725F> <725F> <96B4> -<7261> <7261> <89B2> -<7262> <7262> <9853> -<7267> <7267> <9671> -<7269> <7269> <95A8> -<7272> <7272> <90B5> -<7274> <7274> -<7279> <7279> <93C1> -<727D> <727D> <8CA1> -<727E> <727E> -<7280> <7280> <8DD2> -<7281> <7281> -<7282> <7282> -<7287> <7287> -<7292> <7292> -<7296> <7296> -<72A0> <72A0> <8B5D> -<72A2> <72A2> -<72A7> <72A7> -<72AC> <72AC> <8CA2> -<72AF> <72AF> <94C6> -<72B2> <72B2> -<72B6> <72B6> <8FF3> -<72B9> <72B9> -<72C2> <72C2> <8BB6> -<72C3> <72C3> -<72C4> <72C4> -<72C6> <72C6> -<72CE> <72CE> -<72D0> <72D0> <8CCF> -<72D2> <72D2> -endbfrange - -100 beginbfrange -<72D7> <72D7> <8BE7> -<72D9> <72D9> <915F> -<72DB> <72DB> <8D9D> -<72E0> <72E1> -<72E2> <72E2> -<72E9> <72E9> <8EEB> -<72EC> <72EC> <93C6> -<72ED> <72ED> <8BB7> -<72F7> <72F7> -<72F8> <72F8> <924B> -<72F9> <72F9> -<72FC> <72FC> <9854> -<72FD> <72FD> <9482> -<730A> <730A> -<7316> <7316> -<7317> <7317> -<731B> <731B> <96D2> -<731C> <731C> -<731D> <731D> -<731F> <731F> <97C2> -<7325> <7325> -<7329> <7329> -<732A> <732A> <9296> -<732B> <732B> <944C> -<732E> <732E> <8CA3> -<732F> <732F> -<7334> <7334> -<7336> <7337> <9750> -<733E> <733E> -<733F> <733F> <898E> -<7344> <7344> <8D96> -<7345> <7345> <8E82> -<734E> <734F> -<7357> <7357> -<7363> <7363> <8F62> -<7368> <7368> -<736A> <736A> -<7370> <7370> -<7372> <7372> <8A6C> -<7375> <7375> -<7378> <7378> -<737A> <737A> -<737B> <737B> -<7384> <7384> <8CBA> -<7387> <7387> <97A6> -<7389> <7389> <8BCA> -<738B> <738B> <89A4> -<7396> <7396> <8BE8> -<73A9> <73A9> <8ADF> -<73B2> <73B2> <97E6> -<73B3> <73B3> -<73BB> <73BB> -<73C0> <73C0> -<73C2> <73C2> <89CF> -<73C8> <73C8> -<73CA> <73CA> <8E58> -<73CD> <73CD> <92BF> -<73CE> <73CE> -<73DE> <73DE> -<73E0> <73E0> <8EEC> -<73E5> <73E5> -<73EA> <73EA> <8C5D> -<73ED> <73ED> <94C7> -<73EE> <73EE> -<73F1> <73F1> -<73F8> <73F8> -<73FE> <73FE> <8CBB> -<7403> <7403> <8B85> -<7405> <7405> -<7406> <7406> <979D> -<7409> <7409> <97AE> -<7422> <7422> <91F4> -<7425> <7425> -<7432> <7432> -<7433> <7433> <97D4> -<7434> <7434> <8BD5> -<7435> <7435> <94FA> -<7436> <7436> <9469> -<743A> <743A> -<743F> <743F> -<7441> <7441> -<7455> <7455> -<7459> <7459> -<745A> <745A> <8CE8> -<745B> <745B> <896C> -<745C> <745C> -<745E> <745E> <9090> -<745F> <745F> -<7460> <7460> <97DA> -<7463> <7463> -<7464> <7464> -<7469> <7469> -<746A> <746A> -<746F> <746F> -<7470> <7470> -<7473> <7473> <8DBA> -<7476> <7476> -<747E> <747E> -<7483> <7483> <979E> -<748B> <748B> -endbfrange - -100 beginbfrange -<749E> <749E> -<74A2> <74A2> -<74A7> <74A7> -<74B0> <74B0> <8AC2> -<74BD> <74BD> <8EA3> -<74CA> <74CA> -<74CF> <74CF> -<74D4> <74D4> -<74DC> <74DC> <895A> -<74E0> <74E0> -<74E2> <74E2> <955A> -<74E3> <74E3> -<74E6> <74E6> <8AA2> -<74E7> <74E7> -<74E9> <74E9> -<74EE> <74EE> -<74F0> <74F1> -<74F2> <74F2> -<74F6> <74F6> <9572> -<74F7> <74F7> -<74F8> <74F8> -<7503> <7503> -<7504> <7504> -<7505> <7505> -<750C> <750C> -<750D> <750D> -<750E> <750E> -<7511> <7511> <8D99> -<7513> <7513> -<7515> <7515> -<7518> <7518> <8AC3> -<751A> <751A> <9072> -<751C> <751C> <935B> -<751E> <751E> -<751F> <751F> <90B6> -<7523> <7523> <8E59> -<7525> <7525> <8999> -<7526> <7526> -<7528> <7528> <9770> -<752B> <752B> <95E1> -<752C> <752C> -<7530> <7530> <9363> -<7531> <7531> <9752> -<7532> <7532> <8D62> -<7533> <7533> <905C> -<7537> <7537> <926A> -<7538> <7538> <99B2> -<753A> <753A> <92AC> -<753B> <753B> <89E6> -<753C> <753C> -<7544> <7544> -<7546> <7546> -<7549> <7549> -<754A> <754A> -<754B> <754B> <9DC0> -<754C> <754C> <8A45> -<754D> <754D> -<754F> <754F> <88D8> -<7551> <7551> <94A8> -<7554> <7554> <94C8> -<7559> <7559> <97AF> -<755A> <755A> -<755B> <755B> -<755C> <755C> <927B> -<755D> <755D> <90A4> -<7560> <7560> <94A9> -<7562> <7562> <954C> -<7564> <7564> -<7565> <7565> <97AA> -<7566> <7566> <8C6C> -<7567> <7567> -<7569> <7569> -<756A> <756A> <94D4> -<756B> <756B> -<756D> <756D> -<7570> <7570> <88D9> -<7573> <7573> <8FF4> -<7574> <7574> -<7576> <7576> -<7577> <7577> <93EB> -<7578> <7578> -<757F> <757F> <8B45> -<7582> <7582> -<7586> <7587> -<7589> <7589> -<758A> <758A> -<758B> <758B> <9544> -<758E> <758E> <9161> -<758F> <758F> <9160> -<7591> <7591> <8B5E> -<7594> <7594> -<759A> <759A> -<759D> <759D> -<75A3> <75A3> -<75A5> <75A5> -<75AB> <75AB> <8975> -<75B1> <75B1> -<75B2> <75B2> <94E6> -<75B3> <75B3> -<75B5> <75B5> -endbfrange - -100 beginbfrange -<75B8> <75B8> -<75B9> <75B9> <905D> -<75BC> <75BC> -<75BD> <75BD> -<75BE> <75BE> <8EBE> -<75C2> <75C2> -<75C3> <75C3> -<75C5> <75C5> <9561> -<75C7> <75C7> <8FC7> -<75CA> <75CA> -<75CD> <75CD> -<75D2> <75D2> -<75D4> <75D4> <8EA4> -<75D5> <75D5> <8DAD> -<75D8> <75D8> <9397> -<75D9> <75D9> -<75DB> <75DB> <92C9> -<75DE> <75DE> -<75E2> <75E2> <979F> -<75E3> <75E3> -<75E9> <75E9> <9189> -<75F0> <75F0> -<75F2> <75F3> -<75F4> <75F4> <9273> -<75FA> <75FA> -<75FC> <75FC> -<75FE> <75FF> -<7601> <7601> -<7609> <7609> -<760B> <760B> -<760D> <760D> -<761F> <761F> -<7620> <7622> -<7624> <7624> -<7626> <7626> <9189> -<7627> <7627> -<7630> <7630> -<7634> <7634> -<763B> <763B> -<7642> <7642> <97C3> -<7646> <7646> -<7647> <7648> -<764C> <764C> <8AE0> -<7652> <7652> <96FC> -<7656> <7656> <95C8> -<7658> <7658> -<765C> <765C> -<7661> <7662> -<7667> <7667> -<7668> <766A> -<766C> <766C> -<7670> <7670> -<7672> <7672> -<7676> <7676> -<7678> <7678> -<767A> <767A> <94AD> -<767B> <767B> <936F> -<767C> <767C> -<767D> <767D> <9492> -<767E> <767E> <9553> -<7680> <7680> -<7683> <7683> -<7684> <7684> <9349> -<7686> <7686> <8A46> -<7687> <7687> <8D63> -<7688> <7688> -<768B> <768B> -<768E> <768E> -<7690> <7690> <8E48> -<7693> <7693> -<7696> <7696> -<7699> <769A> -<76AE> <76AE> <94E7> -<76B0> <76B0> -<76B4> <76B4> -<76B7> <76B7> -<76B8> <76BA> -<76BF> <76BF> <8E4D> -<76C2> <76C2> -<76C3> <76C3> <9475> -<76C6> <76C6> <967E> -<76C8> <76C8> <896D> -<76CA> <76CA> <8976> -<76CD> <76CD> -<76D2> <76D2> -<76D6> <76D6> -<76D7> <76D7> <9390> -<76DB> <76DB> <90B7> -<76DC> <76DC> <9F58> -<76DE> <76DE> -<76DF> <76DF> <96BF> -<76E1> <76E1> -<76E3> <76E3> <8AC4> -<76E4> <76E4> <94D5> -<76E5> <76E5> -<76E7> <76E7> -<76EA> <76EA> -<76EE> <76EE> <96DA> -<76F2> <76F2> <96D3> -<76F4> <76F4> <92BC> -endbfrange - -100 beginbfrange -<76F8> <76F8> <918A> -<76FB> <76FB> -<76FE> <76FE> <8F82> -<7701> <7701> <8FC8> -<7704> <7704> -<7707> <7707> -<7708> <7708> -<7709> <7709> <94FB> -<770B> <770B> <8AC5> -<770C> <770C> <8CA7> -<771B> <771B> -<771E> <771E> -<771F> <771F> <905E> -<7720> <7720> <96B0> -<7724> <7724> -<7725> <7726> -<7729> <7729> -<7737> <7738> -<773A> <773A> <92AD> -<773C> <773C> <8AE1> -<7740> <7740> <9285> -<7747> <7747> -<775A> <775A> -<775B> <775B> -<7761> <7761> <9087> -<7762> <7762> -<7763> <7763> <93C2> -<7765> <7765> -<7766> <7766> <9672> -<7768> <7768> -<776B> <776B> -<7779> <7779> -<777E> <777E> -<777F> <777F> -<778B> <778B> -<778E> <778E> -<7791> <7791> -<779E> <779E> -<77A0> <77A0> -<77A5> <77A5> <95CB> -<77AC> <77AC> <8F75> -<77AD> <77AD> <97C4> -<77B0> <77B0> -<77B3> <77B3> <93B5> -<77B6> <77B6> -<77B9> <77B9> -<77BB> <77BB> -<77BC> <77BD> -<77BF> <77BF> -<77C7> <77C7> -<77CD> <77CD> -<77D7> <77D7> -<77DA> <77DA> -<77DB> <77DB> <96B5> -<77DC> <77DC> -<77E2> <77E2> <96EE> -<77E3> <77E3> -<77E5> <77E5> <926D> -<77E7> <77E7> <948A> -<77E9> <77E9> <8BE9> -<77ED> <77ED> <925A> -<77EE> <77EE> -<77EF> <77EF> <8BB8> -<77F3> <77F3> <90CE> -<77FC> <77FC> -<7802> <7802> <8DBB> -<780C> <780C> -<7812> <7812> -<7814> <7814> <8CA4> -<7815> <7815> <8DD3> -<7820> <7820> -<7825> <7825> <9375> -<7826> <7826> <8DD4> -<7827> <7827> <8B6D> -<7832> <7832> <9643> -<7834> <7834> <946A> -<783A> <783A> <9376> -<783F> <783F> <8D7B> -<7845> <7845> -<785D> <785D> <8FC9> -<786B> <786B> <97B0> -<786C> <786C> <8D64> -<786F> <786F> <8CA5> -<7872> <7872> <94A1> -<7874> <7874> -<787C> <787C> -<7881> <7881> <8CE9> -<7886> <7886> -<7887> <7887> <92F4> -<788C> <788C> -<788D> <788D> <8A56> -<788E> <788E> -<7891> <7891> <94E8> -<7893> <7893> <894F> -<7895> <7895> <8DEA> -<7897> <7897> <9871> -<789A> <789A> -<78A3> <78A3> -<78A7> <78A7> <95C9> -<78A9> <78A9> <90D7> -endbfrange - -100 beginbfrange -<78AA> <78AA> -<78AF> <78AF> -<78B5> <78B5> -<78BA> <78BA> <8A6D> -<78BC> <78BC> -<78BE> <78BE> -<78C1> <78C1> <8EA5> -<78C5> <78C5> -<78C6> <78C6> -<78CA> <78CA> -<78CB> <78CB> -<78D0> <78D0> <94D6> -<78D1> <78D1> -<78D4> <78D4> -<78DA> <78DA> -<78E7> <78E7> -<78E8> <78E8> <9681> -<78EC> <78EC> -<78EF> <78EF> <88E9> -<78F4> <78F4> -<78FD> <78FD> -<7901> <7901> <8FCA> -<7907> <7907> -<790E> <790E> <9162> -<7911> <7911> -<7912> <7912> -<7919> <7919> -<7926> <7926> -<792A> <792A> -<792B> <792B> -<792C> <792C> -<793A> <793A> <8EA6> -<793C> <793C> <97E7> -<793E> <793E> <8ED0> -<7940> <7940> -<7941> <7941> <8C56> -<7947> <7947> <8B5F> -<7948> <7948> <8B46> -<7949> <7949> <8E83> -<7950> <7950> <9753> -<7953> <7953> -<7955> <7955> -<7956> <7956> <9163> -<7957> <7957> -<795A> <795A> -<795D> <795D> <8F6A> -<795E> <795E> <905F> -<795F> <795F> -<7960> <7960> -<7962> <7962> <9449> -<7965> <7965> <8FCB> -<7968> <7968> <955B> -<796D> <796D> <8DD5> -<7977> <7977> <9398> -<797A> <797A> -<797F> <797F> -<7980> <7980> -<7981> <7981> <8BD6> -<7984> <7984> <985C> -<7985> <7985> <9154> -<798A> <798A> -<798D> <798D> <89D0> -<798E> <798E> <92F5> -<798F> <798F> <959F> -<799D> <799D> -<79A6> <79A6> <8B9A> -<79A7> <79A7> -<79AA> <79AA> -<79AE> <79AE> -<79B0> <79B0> <9448> -<79B1> <79B1> <9398> -<79B3> <79B3> -<79B9> <79BA> -<79BD> <79BD> <8BD7> -<79BE> <79BE> <89D1> -<79BF> <79BF> <93C3> -<79C0> <79C0> <8F47> -<79C1> <79C1> <8E84> -<79C9> <79C9> -<79CB> <79CB> <8F48> -<79D1> <79D1> <89C8> -<79D2> <79D2> <9562> -<79D5> <79D5> -<79D8> <79D8> <94E9> -<79DF> <79DF> <9164> -<79E1> <79E1> -<79E3> <79E3> -<79E4> <79E4> <9489> -<79E6> <79E6> <9060> -<79E7> <79E7> -<79E9> <79E9> <9281> -<79EC> <79EC> -<79F0> <79F0> <8FCC> -<79FB> <79FB> <88DA> -<7A00> <7A00> <8B48> -<7A08> <7A08> -<7A0B> <7A0B> <92F6> -<7A0D> <7A0D> -<7A0E> <7A0E> <90C5> -<7A14> <7A14> <96AB> -endbfrange - -100 beginbfrange -<7A17> <7A17> <9542> -<7A18> <7A19> -<7A1A> <7A1A> <9274> -<7A1C> <7A1C> <97C5> -<7A1F> <7A1F> -<7A20> <7A20> -<7A2E> <7A2E> <8EED> -<7A31> <7A31> -<7A32> <7A32> <88EE> -<7A37> <7A37> -<7A3B> <7A3B> -<7A3C> <7A3C> <89D2> -<7A3D> <7A3D> <8C6D> -<7A3E> <7A3E> -<7A3F> <7A3F> <8D65> -<7A40> <7A40> <8D92> -<7A42> <7A42> <95E4> -<7A43> <7A43> -<7A46> <7A46> <9673> -<7A49> <7A49> -<7A4D> <7A4D> <90CF> -<7A4E> <7A4E> <896E> -<7A4F> <7A4F> <89B8> -<7A50> <7A50> <88AA> -<7A57> <7A57> -<7A61> <7A62> -<7A63> <7A63> <8FF5> -<7A69> <7A69> -<7A6B> <7A6B> <8A6E> -<7A70> <7A70> -<7A74> <7A74> <8C8A> -<7A76> <7A76> <8B86> -<7A79> <7A79> -<7A7A> <7A7A> <8BF3> -<7A7D> <7A7D> -<7A7F> <7A7F> <90FA> -<7A81> <7A81> <93CB> -<7A83> <7A83> <90DE> -<7A84> <7A84> <8DF3> -<7A88> <7A88> -<7A92> <7A92> <9282> -<7A93> <7A93> <918B> -<7A95> <7A95> -<7A96> <7A96> -<7A97> <7A97> -<7A98> <7A98> -<7A9F> <7A9F> <8C41> -<7AA9> <7AA9> -<7AAA> <7AAA> <8C45> -<7AAE> <7AAE> <8B87> -<7AAF> <7AAF> <9771> -<7AB0> <7AB0> -<7AB6> <7AB6> -<7ABA> <7ABA> <894D> -<7ABF> <7ABF> -<7AC3> <7AC3> <8A96> -<7AC4> <7AC4> -<7AC5> <7AC5> -<7AC7> <7AC7> -<7AC8> <7AC8> -<7ACA> <7ACA> -<7ACB> <7ACB> <97A7> -<7ACD> <7ACD> -<7ACF> <7ACF> -<7AD2> <7AD2> <9AF2> -<7AD3> <7AD3> -<7AD5> <7AD5> -<7AD9> <7ADA> -<7ADC> <7ADC> <97B3> -<7ADD> <7ADD> -<7ADF> <7ADF> -<7AE0> <7AE0> <8FCD> -<7AE1> <7AE2> -<7AE3> <7AE3> <8F76> -<7AE5> <7AE5> <93B6> -<7AE6> <7AE6> -<7AEA> <7AEA> <9247> -<7AED> <7AED> -<7AEF> <7AEF> <925B> -<7AF0> <7AF0> -<7AF6> <7AF6> <8BA3> -<7AF8> <7AF8> <995E> -<7AF9> <7AF9> <927C> -<7AFA> <7AFA> <8EB1> -<7AFF> <7AFF> <8AC6> -<7B02> <7B02> -<7B04> <7B04> -<7B06> <7B06> -<7B08> <7B08> <8B88> -<7B0A> <7B0A> -<7B0B> <7B0B> -<7B0F> <7B0F> -<7B11> <7B11> <8FCE> -<7B18> <7B19> -<7B1B> <7B1B> <934A> -<7B1E> <7B1E> -<7B20> <7B20> <8A7D> -<7B25> <7B25> <9079> -<7B26> <7B26> <9584> -<7B28> <7B28> -endbfrange - -100 beginbfrange -<7B2C> <7B2C> <91E6> -<7B33> <7B33> -<7B35> <7B35> -<7B36> <7B36> -<7B39> <7B39> <8DF9> -<7B45> <7B45> -<7B46> <7B46> <954D> -<7B48> <7B48> <94A4> -<7B49> <7B49> <9399> -<7B4B> <7B4B> <8BD8> -<7B4C> <7B4C> -<7B4D> <7B4D> -<7B4F> <7B4F> <94B3> -<7B50> <7B50> -<7B51> <7B51> <927D> -<7B52> <7B52> <939B> -<7B54> <7B54> <939A> -<7B56> <7B56> <8DF4> -<7B5D> <7B5D> -<7B65> <7B65> -<7B67> <7B67> -<7B6C> <7B6C> -<7B6E> <7B6E> -<7B70> <7B71> -<7B74> <7B74> -<7B75> <7B75> -<7B7A> <7B7A> -<7B86> <7B86> <95CD> -<7B87> <7B87> <89D3> -<7B8B> <7B8B> -<7B8D> <7B8D> -<7B8F> <7B8F> -<7B92> <7B92> -<7B94> <7B94> <9493> -<7B95> <7B95> <96A5> -<7B97> <7B97> <8E5A> -<7B98> <7B98> -<7B99> <7B99> -<7B9A> <7B9A> -<7B9C> <7B9C> -<7B9D> <7B9D> -<7B9F> <7B9F> -<7BA1> <7BA1> <8AC7> -<7BAA> <7BAA> <925C> -<7BAD> <7BAD> <90FB> -<7BB1> <7BB1> <94A0> -<7BB4> <7BB4> -<7BB8> <7BB8> <94A2> -<7BC0> <7BC0> <90DF> -<7BC1> <7BC1> -<7BC4> <7BC4> <94CD> -<7BC6> <7BC6> -<7BC7> <7BC7> <95D1> -<7BC9> <7BC9> <927A> -<7BCB> <7BCB> -<7BCC> <7BCC> -<7BCF> <7BCF> -<7BDD> <7BDD> -<7BE0> <7BE0> <8EC2> -<7BE4> <7BE4> <93C4> -<7BE5> <7BE5> -<7BE6> <7BE6> -<7BE9> <7BE9> -<7BED> <7BED> <9855> -<7BF3> <7BF3> -<7BF6> <7BF6> -<7BF7> <7BF7> -<7C00> <7C00> -<7C07> <7C07> -<7C0D> <7C0D> -<7C11> <7C11> -<7C12> <7C12> <99D3> -<7C13> <7C13> -<7C14> <7C14> -<7C17> <7C17> -<7C1E> <7C1E> <925C> -<7C1F> <7C1F> -<7C21> <7C21> <8AC8> -<7C23> <7C23> -<7C27> <7C27> -<7C2A> <7C2A> -<7C2B> <7C2B> -<7C37> <7C37> -<7C38> <7C38> <94F4> -<7C3D> <7C3D> -<7C3E> <7C3E> <97FA> -<7C3F> <7C3F> <95EB> -<7C40> <7C40> -<7C43> <7C43> -<7C4C> <7C4C> -<7C4D> <7C4D> <90D0> -<7C4F> <7C4F> -<7C50> <7C50> -<7C54> <7C54> -<7C56> <7C56> -<7C58> <7C58> -<7C5F> <7C5F> -<7C60> <7C60> -<7C64> <7C64> -<7C65> <7C65> -endbfrange - -100 beginbfrange -<7C6C> <7C6C> -<7C73> <7C73> <95C4> -<7C75> <7C75> -<7C7E> <7C7E> <96E0> -<7C81> <7C81> <8BCC> -<7C82> <7C82> <8C48> -<7C83> <7C83> -<7C89> <7C89> <95B2> -<7C8B> <7C8B> <9088> -<7C8D> <7C8D> <96AE> -<7C90> <7C90> -<7C92> <7C92> <97B1> -<7C95> <7C95> <9494> -<7C97> <7C97> <9165> -<7C98> <7C98> <9453> -<7C9B> <7C9B> <8F6C> -<7C9F> <7C9F> <88BE> -<7CA1> <7CA1> -<7CA2> <7CA2> -<7CA4> <7CA4> -<7CA5> <7CA5> <8A9F> -<7CA7> <7CA7> <8FCF> -<7CA8> <7CA8> -<7CAB> <7CAB> -<7CAD> <7CAD> -<7CAE> <7CAE> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB9> <7CB9> -<7CBD> <7CBD> -<7CBE> <7CBE> <90B8> -<7CC0> <7CC0> -<7CC2> <7CC2> -<7CC5> <7CC5> -<7CCA> <7CCA> <8CD0> -<7CCE> <7CCE> <9157> -<7CD2> <7CD2> -<7CD6> <7CD6> <939C> -<7CD8> <7CD8> -<7CDC> <7CDC> -<7CDE> <7CDE> <95B3> -<7CDF> <7CDF> <918C> -<7CE0> <7CE0> <8D66> -<7CE2> <7CE2> -<7CE7> <7CE7> <97C6> -<7CEF> <7CEF> -<7CF2> <7CF2> -<7CF4> <7CF4> -<7CF6> <7CF6> -<7CF8> <7CF8> <8E85> -<7CFA> <7CFA> -<7CFB> <7CFB> <8C6E> -<7CFE> <7CFE> <8B8A> -<7D00> <7D00> <8B49> -<7D02> <7D02> -<7D04> <7D04> <96F1> -<7D05> <7D05> <8D67> -<7D06> <7D06> -<7D0A> <7D0A> -<7D0B> <7D0B> <96E4> -<7D0D> <7D0D> <945B> -<7D10> <7D10> <9552> -<7D14> <7D14> <8F83> -<7D15> <7D15> -<7D17> <7D17> <8ED1> -<7D18> <7D18> <8D68> -<7D19> <7D19> <8E86> -<7D1A> <7D1A> <8B89> -<7D1B> <7D1B> <95B4> -<7D1C> <7D1C> -<7D20> <7D20> <9166> -<7D21> <7D21> <9661> -<7D22> <7D22> <8DF5> -<7D2B> <7D2B> <8E87> -<7D2C> <7D2C> <92DB> -<7D2E> <7D2E> -<7D2F> <7D2F> <97DD> -<7D30> <7D30> <8DD7> -<7D32> <7D32> -<7D33> <7D33> <9061> -<7D35> <7D35> -<7D39> <7D39> <8FD0> -<7D3A> <7D3A> <8DAE> -<7D3F> <7D3F> -<7D42> <7D42> <8F49> -<7D43> <7D43> <8CBC> -<7D44> <7D44> <9167> -<7D45> <7D45> -<7D46> <7D46> -<7D4B> <7D4B> -<7D4C> <7D4C> <8C6F> -<7D4E> <7D4E> -<7D4F> <7D4F> -<7D50> <7D50> <8C8B> -<7D56> <7D56> -<7D5B> <7D5B> -<7D5E> <7D5E> <8D69> -<7D61> <7D61> <978D> -<7D62> <7D62> <88BA> -endbfrange - -100 beginbfrange -<7D63> <7D63> -<7D66> <7D66> <8B8B> -<7D68> <7D68> -<7D6E> <7D6E> -<7D71> <7D71> <939D> -<7D72> <7D72> -<7D73> <7D73> -<7D75> <7D75> <8A47> -<7D76> <7D76> <90E2> -<7D79> <7D79> <8CA6> -<7D7D> <7D7D> -<7D89> <7D89> -<7D8F> <7D8F> -<7D93> <7D93> -<7D99> <7D99> <8C70> -<7D9A> <7D9A> <91B1> -<7D9B> <7D9B> -<7D9C> <7D9C> <918E> -<7D9F> <7D9F> -<7DA2> <7DA2> -<7DA3> <7DA3> -<7DAB> <7DAB> -<7DAC> <7DAC> <8EF8> -<7DAD> <7DAD> <88DB> -<7DAE> <7DAE> -<7DAF> <7DAF> -<7DB0> <7DB0> -<7DB1> <7DB1> <8D6A> -<7DB2> <7DB2> <96D4> -<7DB4> <7DB4> <92D4> -<7DB5> <7DB5> -<7DB8> <7DB8> -<7DBA> <7DBA> -<7DBB> <7DBB> <925D> -<7DBD> <7DBD> -<7DBE> <7DBE> <88BB> -<7DBF> <7DBF> <96C8> -<7DC7> <7DC7> -<7DCA> <7DCA> <8BD9> -<7DCB> <7DCB> <94EA> -<7DCF> <7DCF> <918D> -<7DD1> <7DD1> <97CE> -<7DD2> <7DD2> <8F8F> -<7DD5> <7DD5> -<7DD8> <7DD8> -<7DDA> <7DDA> <90FC> -<7DDC> <7DDC> -<7DDD> <7DDD> -<7DDE> <7DDE> -<7DE0> <7DE0> <92F7> -<7DE1> <7DE1> -<7DE4> <7DE4> -<7DE8> <7DE8> <95D2> -<7DE9> <7DE9> <8AC9> -<7DEC> <7DEC> <96C9> -<7DEF> <7DEF> <88DC> -<7DF2> <7DF2> -<7DF4> <7DF4> <97FB> -<7DFB> <7DFB> -<7E01> <7E01> <898F> -<7E04> <7E04> <93EA> -<7E05> <7E05> -<7E09> <7E09> -<7E0A> <7E0A> -<7E0B> <7E0B> -<7E12> <7E12> -<7E1B> <7E1B> <949B> -<7E1E> <7E1E> <8EC8> -<7E1F> <7E1F> -<7E21> <7E21> -<7E22> <7E22> -<7E23> <7E23> -<7E26> <7E26> <8F63> -<7E2B> <7E2B> <9644> -<7E2E> <7E2E> <8F6B> -<7E31> <7E31> -<7E32> <7E32> -<7E35> <7E35> -<7E37> <7E37> -<7E39> <7E39> -<7E3A> <7E3A> -<7E3B> <7E3B> -<7E3D> <7E3D> -<7E3E> <7E3E> <90D1> -<7E41> <7E41> <94C9> -<7E43> <7E43> -<7E46> <7E46> -<7E4A> <7E4A> <9140> -<7E4B> <7E4B> <8C71> -<7E4D> <7E4D> <8F4A> -<7E54> <7E54> <9044> -<7E55> <7E55> <9155> -<7E56> <7E56> -<7E59> <7E5A> -<7E5D> <7E5D> -<7E5E> <7E5E> -<7E61> <7E61> <8F4A> -<7E66> <7E66> -<7E67> <7E67> -<7E69> <7E69> -endbfrange - -100 beginbfrange -<7E6A> <7E6A> -<7E6B> <7E6B> <8C71> -<7E6D> <7E6D> <969A> -<7E70> <7E70> <8C4A> -<7E79> <7E79> -<7E7B> <7E7B> -<7E7C> <7E7C> -<7E7D> <7E7D> -<7E7F> <7E7F> -<7E82> <7E82> <8E5B> -<7E83> <7E83> -<7E88> <7E89> -<7E8C> <7E8C> -<7E8E> <7E8E> -<7E8F> <7E8F> <935A> -<7E90> <7E90> -<7E92> <7E92> -<7E93> <7E94> -<7E96> <7E96> -<7E9B> <7E9C> -<7F36> <7F36> <8ACA> -<7F38> <7F38> -<7F3A> <7F3A> -<7F45> <7F45> -<7F4C> <7F4E> -<7F50> <7F51> -<7F54> <7F54> -<7F55> <7F55> -<7F58> <7F58> -<7F5F> <7F60> -<7F67> <7F67> -<7F68> <7F69> -<7F6A> <7F6A> <8DDF> -<7F6B> <7F6B> <8C72> -<7F6E> <7F6E> <9275> -<7F70> <7F70> <94B1> -<7F72> <7F72> <8F90> -<7F75> <7F75> <946C> -<7F77> <7F77> <94EB> -<7F78> <7F78> -<7F79> <7F79> <9CEB> -<7F82> <7F82> -<7F83> <7F83> -<7F85> <7F85> <9785> -<7F86> <7F86> -<7F87> <7F87> -<7F88> <7F88> -<7F8A> <7F8A> <9772> -<7F8C> <7F8C> -<7F8E> <7F8E> <94FC> -<7F94> <7F94> -<7F9A> <7F9A> -<7F9D> <7F9D> -<7F9E> <7F9E> -<7FA3> <7FA3> -<7FA4> <7FA4> <8C51> -<7FA8> <7FA8> <9141> -<7FA9> <7FA9> <8B60> -<7FAE> <7FAE> -<7FAF> <7FAF> -<7FB2> <7FB2> -<7FB6> <7FB6> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBD> <7FBD> <8948> -<7FC1> <7FC1> <89A5> -<7FC5> <7FC6> -<7FCA> <7FCA> -<7FCC> <7FCC> <9782> -<7FD2> <7FD2> <8F4B> -<7FD4> <7FD4> -<7FD5> <7FD5> -<7FE0> <7FE0> <9089> -<7FE1> <7FE1> -<7FE6> <7FE6> -<7FE9> <7FE9> -<7FEB> <7FEB> <8AE3> -<7FF0> <7FF0> <8ACB> -<7FF3> <7FF3> -<7FF9> <7FF9> -<7FFB> <7FFB> <967C> -<7FFC> <7FFC> <9783> -<8000> <8000> <9773> -<8001> <8001> <9856> -<8003> <8003> <8D6C> -<8004> <8004> -<8005> <8005> <8ED2> -<8006> <8006> -<800B> <800B> -<800C> <800C> <8EA7> -<8010> <8010> <91CF> -<8012> <8012> -<8015> <8015> <8D6B> -<8017> <8017> <96D5> -<8018> <8019> -<801C> <801C> -<8021> <8021> -<8028> <8028> -<8033> <8033> <8EA8> -<8036> <8036> <96EB> -endbfrange - -100 beginbfrange -<803B> <803B> -<803D> <803D> <925E> -<803F> <803F> -<8046> <8046> -<804A> <804A> -<8052> <8052> -<8056> <8056> <90B9> -<8058> <8058> -<805A> <805A> -<805E> <805E> <95B7> -<805F> <805F> -<8061> <8061> <918F> -<8062> <8062> -<8068> <8068> -<806F> <806F> <97FC> -<8070> <8070> -<8072> <8072> -<8073> <8073> -<8074> <8074> <92AE> -<8076> <8076> -<8077> <8077> <9045> -<8079> <8079> -<807D> <807D> -<807E> <807E> <9857> -<807F> <807F> -<8084> <8084> -<8085> <8085> -<8086> <8086> -<8087> <8087> <94A3> -<8089> <8089> <93F7> -<808B> <808B> <985D> -<808C> <808C> <94A7> -<8093> <8093> -<8096> <8096> <8FD1> -<8098> <8098> <9549> -<809A> <809A> -<809B> <809B> -<809D> <809D> <8ACC> -<80A1> <80A1> <8CD2> -<80A2> <80A2> <8E88> -<80A5> <80A5> <94EC> -<80A9> <80A9> <8CA8> -<80AA> <80AA> <9662> -<80AC> <80AC> -<80AD> <80AD> -<80AF> <80AF> <8D6D> -<80B1> <80B1> <8D6E> -<80B2> <80B2> <88E7> -<80B4> <80B4> <8DE6> -<80BA> <80BA> <9478> -<80C3> <80C3> <88DD> -<80C4> <80C4> -<80C6> <80C6> <925F> -<80CC> <80CC> <9477> -<80CE> <80CE> <91D9> -<80D6> <80D6> -<80D9> <80D9> -<80DA> <80DA> -<80DB> <80DB> -<80DD> <80DD> -<80DE> <80DE> <9645> -<80E1> <80E1> <8CD3> -<80E4> <80E4> <88FB> -<80E5> <80E5> -<80EF> <80EF> -<80F1> <80F1> -<80F4> <80F4> <93B7> -<80F8> <80F8> <8BB9> -<80FC> <80FC> -<80FD> <80FD> <945C> -<8102> <8102> <8E89> -<8105> <8105> <8BBA> -<8106> <8106> <90C6> -<8107> <8107> <9865> -<8108> <8108> <96AC> -<8109> <8109> -<810A> <810A> <90D2> -<811A> <811A> <8B72> -<811B> <811B> -<8123> <8123> -<8129> <8129> -<812F> <812F> -<8131> <8131> <9245> -<8133> <8133> <945D> -<8139> <8139> <92AF> -<813E> <813E> -<8146> <8146> -<814B> <814B> -<814E> <814E> <9074> -<8150> <8150> <9585> -<8151> <8151> -<8153> <8153> -<8154> <8154> <8D6F> -<8155> <8155> <9872> -<815F> <815F> -<8165> <8166> -<816B> <816B> <8EEE> -<816E> <816E> -<8170> <8170> <8D98> -<8171> <8171> -endbfrange - -100 beginbfrange -<8174> <8174> -<8178> <8178> <92B0> -<8179> <8179> <95A0> -<817A> <817A> <9142> -<817F> <817F> <91DA> -<8180> <8180> -<8182> <8182> -<8183> <8183> -<8188> <8188> -<818A> <818A> -<818F> <818F> <8D70> -<8193> <8193> -<8195> <8195> -<819A> <819A> <9586> -<819C> <819C> <968C> -<819D> <819D> <9547> -<81A0> <81A0> -<81A3> <81A3> -<81A4> <81A4> -<81A8> <81A8> <9663> -<81A9> <81A9> -<81B0> <81B0> -<81B3> <81B3> <9156> -<81B5> <81B5> -<81B8> <81B8> -<81BA> <81BA> -<81BD> <81BD> -<81BE> <81BE> -<81BF> <81BF> <945E> -<81C0> <81C0> -<81C2> <81C2> -<81C6> <81C6> <89B0> -<81C8> <81C8> -<81C9> <81C9> -<81CD> <81CD> -<81D1> <81D1> -<81D3> <81D3> <919F> -<81D8> <81D8> -<81D9> <81D9> -<81DA> <81DA> -<81DF> <81E0> -<81E3> <81E3> <9062> -<81E5> <81E5> <89E7> -<81E7> <81E7> -<81E8> <81E8> <97D5> -<81EA> <81EA> <8EA9> -<81ED> <81ED> <8F4C> -<81F3> <81F3> <8E8A> -<81F4> <81F4> <9276> -<81FA> <81FB> -<81FC> <81FC> <8950> -<81FE> <81FE> -<8201> <8202> -<8205> <8205> -<8207> <8207> -<8208> <8208> <8BBB> -<8209> <8209> <9DA8> -<820A> <820A> -<820C> <820C> <90E3> -<820D> <820D> -<820E> <820E> <8EC9> -<8210> <8210> -<8212> <8212> <98AE> -<8216> <8216> -<8217> <8217> <95DC> -<8218> <8218> <8ADA> -<821B> <821B> <9143> -<821C> <821C> <8F77> -<821E> <821E> <9591> -<821F> <821F> <8F4D> -<8229> <8229> -<822A> <822A> <8D71> -<822B> <822B> -<822C> <822C> <94CA> -<822E> <822E> -<8233> <8233> -<8235> <8235> <91C7> -<8236> <8236> <9495> -<8237> <8237> <8CBD> -<8238> <8238> -<8239> <8239> <9144> -<8240> <8240> -<8247> <8247> <92F8> -<8258> <8258> -<8259> <8259> -<825A> <825A> -<825D> <825D> -<825F> <825F> -<8262> <8262> -<8264> <8264> -<8266> <8266> <8ACD> -<8268> <8268> -<826A> <826B> -<826E> <826E> <8DAF> -<826F> <826F> <97C7> -<8271> <8271> -<8272> <8272> <9046> -<8276> <8276> <8990> -<8277> <8278> -<827E> <827E> -endbfrange - -100 beginbfrange -<828B> <828B> <88F0> -<828D> <828D> -<8292> <8292> -<8299> <8299> <9587> -<829D> <829D> <8EC5> -<829F> <829F> -<82A5> <82A5> <8A48> -<82A6> <82A6> <88B0> -<82AB> <82AB> -<82AC> <82AC> -<82AD> <82AD> <946D> -<82AF> <82AF> <9063> -<82B1> <82B1> <89D4> -<82B3> <82B3> <9646> -<82B8> <82B8> <8C7C> -<82B9> <82B9> <8BDA> -<82BB> <82BB> -<82BD> <82BD> <89E8> -<82C5> <82C5> <8AA1> -<82D1> <82D1> <8991> -<82D2> <82D2> -<82D3> <82D3> <97E8> -<82D4> <82D4> <91DB> -<82D7> <82D7> <9563> -<82D9> <82D9> -<82DB> <82DB> <89D5> -<82DC> <82DC> -<82DE> <82DE> -<82DF> <82DF> -<82E1> <82E1> -<82E3> <82E3> -<82E5> <82E5> <8EE1> -<82E6> <82E6> <8BEA> -<82E7> <82E7> <9297> -<82EB> <82EB> <93CF> -<82F1> <82F1> <8970> -<82F3> <82F3> -<82F4> <82F4> -<82F9> <82F9> -<82FA> <82FA> -<82FB> <82FB> -<8302> <8302> <96CE> -<8303> <8303> -<8304> <8304> <89D6> -<8305> <8305> <8A9D> -<8306> <8306> -<8309> <8309> -<830E> <830E> <8C73> -<8316> <8316> -<8317> <8318> -<831C> <831C> <88A9> -<8323> <8323> -<8328> <8328> <88EF> -<832B> <832B> -<832F> <832F> -<8331> <8331> -<8332> <8332> -<8334> <8334> -<8335> <8335> -<8336> <8336> <9283> -<8338> <8338> <91F9> -<8339> <8339> -<8340> <8340> -<8345> <8345> -<8349> <8349> <9190> -<834A> <834A> <8C74> -<834F> <834F> <8960> -<8350> <8350> -<8352> <8352> <8D72> -<8358> <8358> <9191> -<8373> <8373> -<8375> <8375> -<8377> <8377> <89D7> -<837B> <837B> <89AC> -<837C> <837C> -<8385> <8385> -<8387> <8387> -<8389> <8389> -<838A> <838A> -<838E> <838E> -<8393> <8393> -<8396> <8396> -<839A> <839A> -<839E> <839E> <8ACE> -<839F> <839F> -<83A0> <83A0> -<83A2> <83A2> -<83A8> <83A8> -<83AA> <83AA> -<83AB> <83AB> <949C> -<83B1> <83B1> <9789> -<83B5> <83B5> -<83BD> <83BD> -<83C1> <83C1> -<83C5> <83C5> <909B> -<83CA> <83CA> <8B65> -<83CC> <83CC> <8BDB> -<83CE> <83CE> -<83D3> <83D3> <89D9> -<83D6> <83D6> <8FD2> -endbfrange - -100 beginbfrange -<83D8> <83D8> -<83DC> <83DC> <8DD8> -<83DF> <83DF> <9370> -<83E0> <83E0> -<83E9> <83E9> <95EC> -<83EB> <83EB> -<83EF> <83EF> <89D8> -<83F0> <83F0> <8CD4> -<83F1> <83F1> <9548> -<83F2> <83F2> -<83F4> <83F4> -<83F7> <83F7> -<83FB> <83FB> -<83FD> <83FD> -<8403> <8403> -<8404> <8404> <93B8> -<8407> <8407> -<840A> <840A> <9789> -<840B> <840B> -<840C> <840C> <9647> -<840D> <840D> -<840E> <840E> <88DE> -<8413> <8413> -<8420> <8420> -<8422> <8422> -<8429> <8429> <948B> -<842A> <842A> -<842C> <842C> -<8431> <8431> <8A9E> -<8435> <8435> -<8438> <8438> -<843C> <843C> -<843D> <843D> <978E> -<8446> <8446> -<8449> <8449> <9774> -<844E> <844E> <97A8> -<8457> <8457> <9298> -<845B> <845B> <8A8B> -<8461> <8461> <9592> -<8462> <8462> -<8463> <8463> <939F> -<8466> <8466> <88AF> -<8469> <8469> -<846B> <846B> -<846C> <846C> <9192> -<846D> <846D> -<846E> <846E> -<846F> <846F> -<8471> <8471> <944B> -<8475> <8475> <88A8> -<8477> <8477> -<8479> <8479> -<847A> <847A> <9598> -<8482> <8482> -<8484> <8484> -<848B> <848B> <8FD3> -<8490> <8490> <8F4E> -<8494> <8494> <8EAA> -<8499> <8499> <96D6> -<849C> <849C> <9566> -<849F> <849F> -<84A1> <84A1> -<84AD> <84AD> -<84B2> <84B2> <8A97> -<84B8> <84B8> <8FF6> -<84B9> <84B9> -<84BB> <84BB> -<84BC> <84BC> <9193> -<84BF> <84BF> -<84C1> <84C1> -<84C4> <84C4> <927E> -<84C6> <84C6> -<84C9> <84C9> <9775> -<84CA> <84CA> -<84CB> <84CB> <8A57> -<84CD> <84CD> -<84D0> <84D0> -<84D1> <84D1> <96AA> -<84D6> <84D6> -<84D9> <84D9> -<84DA> <84DA> -<84EC> <84EC> <9648> -<84EE> <84EE> <9840> -<84F4> <84F4> -<84FC> <84FC> -<84FF> <84FF> -<8500> <8500> <8EC1> -<8506> <8506> -<8511> <8511> <95CC> -<8513> <8513> <96A0> -<8514> <8514> -<8515> <8515> -<8517> <8518> -<851A> <851A> <8955> -<851F> <851F> -<8521> <8521> -<8523> <8523> <8FD3> -<8526> <8526> <92D3> -<852C> <852C> -<852D> <852D> <88FC> -endbfrange - -100 beginbfrange -<8535> <8535> <91A0> -<853D> <853D> <95C1> -<853E> <853E> -<8540> <8540> -<8541> <8541> -<8543> <8543> <94D7> -<8548> <8548> -<8549> <8549> <8FD4> -<854A> <854A> <8EC7> -<854B> <854B> -<854E> <854E> <8BBC> -<8555> <8555> -<8557> <8557> <9599> -<8558> <8558> -<855A> <855A> -<8563> <8563> -<8568> <8568> <986E> -<8569> <8569> <93A0> -<856A> <856A> <9593> -<856D> <856D> -<8577> <8577> -<857E> <857E> -<8580> <8580> -<8584> <8584> <9496> -<8587> <8587> -<8588> <8588> -<858A> <858A> -<8590> <8590> -<8591> <8591> -<8594> <8594> -<8597> <8597> <8992> -<8599> <8599> <93E3> -<859B> <859B> -<859C> <859C> -<85A4> <85A4> -<85A6> <85A6> <9145> -<85A8> <85A8> -<85A9> <85A9> <8E46> -<85AA> <85AA> <9064> -<85AB> <85AB> <8C4F> -<85AC> <85AC> <96F2> -<85AE> <85AE> <96F7> -<85AF> <85AF> <8F92> -<85B9> <85B9> -<85BA> <85BA> -<85C1> <85C1> <986D> -<85C9> <85C9> -<85CD> <85CD> <9795> -<85CF> <85CF> -<85D0> <85D0> -<85D5> <85D5> -<85DC> <85DC> -<85DD> <85DD> -<85E4> <85E4> <93A1> -<85E5> <85E5> -<85E9> <85E9> <94CB> -<85EA> <85EA> -<85F7> <85F7> <8F93> -<85F9> <85F9> -<85FA> <85FA> -<85FB> <85FB> <9194> -<85FE> <85FE> -<8602> <8602> -<8606> <8606> -<8607> <8607> <9168> -<860A> <860A> -<860B> <860B> -<8613> <8613> -<8616> <8616> <9F50> -<8617> <8617> <9F41> -<861A> <861A> -<8622> <8622> -<862D> <862D> <9796> -<862F> <862F> -<8630> <8630> -<863F> <863F> -<864D> <864D> -<864E> <864E> <8CD5> -<8650> <8650> <8B73> -<8654> <8654> -<8655> <8655> <997C> -<865A> <865A> <8B95> -<865C> <865C> <97B8> -<865E> <865E> <8BF1> -<865F> <865F> -<8667> <8667> -<866B> <866B> <928E> -<8671> <8671> -<8679> <8679> <93F8> -<867B> <867B> <88B8> -<868A> <868A> <89E1> -<868B> <868C> -<8693> <8693> -<8695> <8695> <8E5C> -<86A3> <86A3> -<86A4> <86A4> <9461> -<86A9> <86AA> -<86AB> <86AB> -<86AF> <86AF> -<86B0> <86B0> -endbfrange - -100 beginbfrange -<86B6> <86B6> -<86C4> <86C4> -<86C6> <86C6> -<86C7> <86C7> <8ED6> -<86C9> <86C9> -<86CB> <86CB> <9260> -<86CD> <86CD> <8C75> -<86CE> <86CE> <8A61> -<86D4> <86D4> -<86D9> <86D9> <8A5E> -<86DB> <86DB> -<86DE> <86DE> -<86DF> <86DF> -<86E4> <86E4> <94B8> -<86E9> <86E9> -<86EC> <86EC> -<86ED> <86ED> <9567> -<86EE> <86EE> <94D8> -<86EF> <86EF> -<86F8> <86F8> <91FB> -<86F9> <86F9> -<86FB> <86FB> -<86FE> <86FE> <89E9> -<8700> <8700> -<8702> <8702> <9649> -<8703> <8703> -<8706> <8706> -<8708> <8708> -<8709> <8709> -<870A> <870A> -<870D> <870D> -<8711> <8711> -<8712> <8712> -<8718> <8718> <9277> -<871A> <871A> -<871C> <871C> <96A8> -<8725> <8725> -<8729> <8729> -<8734> <8734> -<8737> <8737> -<873B> <873B> -<873F> <873F> -<8749> <8749> <90E4> -<874B> <874B> <9858> -<874C> <874C> -<874E> <874E> -<8753> <8753> -<8755> <8755> <9049> -<8757> <8757> -<8759> <8759> -<875F> <875F> -<8760> <8760> -<8763> <8763> -<8766> <8766> <89DA> -<8768> <8768> -<876A> <876A> -<876E> <876E> -<8774> <8774> -<8776> <8776> <92B1> -<8778> <8778> -<877F> <877F> <9488> -<8782> <8782> -<878D> <878D> <975A> -<879F> <879F> -<87A2> <87A2> -<87AB> <87AB> -<87AF> <87AF> -<87B3> <87B3> -<87BA> <87BA> <9786> -<87BB> <87BB> -<87BD> <87BD> -<87C0> <87C0> -<87C4> <87C4> -<87C6> <87C6> -<87C7> <87C7> -<87CB> <87CB> -<87D0> <87D0> -<87D2> <87D2> -<87E0> <87E0> -<87EC> <87EC> <90E4> -<87EF> <87EF> -<87F2> <87F2> -<87F6> <87F7> -<87F9> <87F9> <8A49> -<87FB> <87FB> <8B61> -<87FE> <87FE> -<8805> <8805> -<880D> <880D> -<880E> <880E> -<880F> <880F> -<8811> <8811> -<8815> <8815> -<8816> <8816> -<881F> <881F> <9858> -<8821> <8821> -<8822> <8822> -<8823> <8823> -<8827> <8827> -<8831> <8831> -<8836> <8836> -endbfrange - -100 beginbfrange -<8839> <8839> -<883B> <883B> -<8840> <8840> <8C8C> -<8842> <8842> -<8844> <8844> -<8846> <8846> <8F4F> -<884C> <884C> <8D73> -<884D> <884D> <9FA5> -<8852> <8852> -<8853> <8853> <8F70> -<8857> <8857> <8A58> -<8859> <8859> -<885B> <885B> <8971> -<885D> <885D> <8FD5> -<885E> <885E> -<8861> <8861> <8D74> -<8862> <8862> -<8863> <8863> <88DF> -<8868> <8868> <955C> -<886B> <886B> -<8870> <8870> <908A> -<8872> <8872> -<8875> <8875> -<8877> <8877> <928F> -<887D> <887D> -<887E> <887E> -<887F> <887F> <8BDC> -<8881> <8881> -<8882> <8882> -<8888> <8888> <8C55> -<888B> <888B> <91DC> -<888D> <888D> -<8892> <8892> -<8896> <8896> <91B3> -<8897> <8897> -<8899> <8899> -<889E> <889E> -<88A2> <88A2> -<88A4> <88A4> -<88AB> <88AB> <94ED> -<88AE> <88AE> -<88B0> <88B0> -<88B1> <88B1> -<88B4> <88B4> <8CD1> -<88B5> <88B5> -<88B7> <88B7> <88BF> -<88BF> <88BF> -<88C1> <88C1> <8DD9> -<88C2> <88C2> <97F4> -<88C3> <88C4> -<88C5> <88C5> <9195> -<88CF> <88CF> <97A0> -<88D4> <88D4> -<88D5> <88D5> <9754> -<88D8> <88D9> -<88DC> <88DC> <95E2> -<88DD> <88DD> -<88DF> <88DF> <8DBE> -<88E1> <88E1> <97A1> -<88E8> <88E8> -<88F2> <88F2> -<88F3> <88F3> <8FD6> -<88F4> <88F4> -<88F8> <88F8> <9787> -<88F9> <88F9> -<88FC> <88FC> -<88FD> <88FD> <90BB> -<88FE> <88FE> <909E> -<8902> <8902> -<8904> <8904> -<8907> <8907> <95A1> -<890A> <890A> -<890C> <890C> -<8910> <8910> <8A8C> -<8912> <8912> <964A> -<8913> <8913> -<891D> <891D> -<891E> <891E> -<8925> <8925> -<892A> <892B> -<8936> <8936> -<8938> <8938> -<893B> <893B> -<8941> <8941> -<8943> <8943> -<8944> <8944> -<894C> <894C> -<894D> <894D> -<8956> <8956> <89A6> -<895E> <895E> -<895F> <895F> <8BDD> -<8960> <8960> -<8964> <8964> -<8966> <8966> -<896A> <896A> -<896D> <896D> -<896F> <896F> -<8972> <8972> <8F50> -<8974> <8974> -<8977> <8977> -endbfrange - -100 beginbfrange -<897E> <897E> -<897F> <897F> <90BC> -<8981> <8981> <9776> -<8983> <8983> -<8986> <8986> <95A2> -<8987> <8987> <9465> -<8988> <8988> -<898A> <898A> -<898B> <898B> <8CA9> -<898F> <898F> <8B4B> -<8993> <8993> -<8996> <8996> <8E8B> -<8997> <8997> <9460> -<8998> <8998> -<899A> <899A> <8A6F> -<89A1> <89A1> -<89A6> <89A6> -<89A7> <89A7> <9797> -<89A9> <89A9> -<89AA> <89AA> <9065> -<89AC> <89AC> -<89AF> <89AF> -<89B2> <89B2> -<89B3> <89B3> <8ACF> -<89BA> <89BA> -<89BD> <89BD> -<89BF> <89C0> -<89D2> <89D2> <8A70> -<89DA> <89DA> -<89DC> <89DD> -<89E3> <89E3> <89F0> -<89E6> <89E6> <9047> -<89E7> <89E7> -<89F4> <89F4> -<89F8> <89F8> -<8A00> <8A00> <8CBE> -<8A02> <8A02> <92F9> -<8A03> <8A03> -<8A08> <8A08> <8C76> -<8A0A> <8A0A> <9075> -<8A0C> <8A0C> -<8A0E> <8A0E> <93A2> -<8A10> <8A10> -<8A13> <8A13> <8C50> -<8A16> <8A16> -<8A17> <8A17> <91F5> -<8A18> <8A18> <8B4C> -<8A1B> <8A1B> -<8A1D> <8A1D> -<8A1F> <8A1F> <8FD7> -<8A23> <8A23> <8C8D> -<8A25> <8A25> -<8A2A> <8A2A> <964B> -<8A2D> <8A2D> <90DD> -<8A31> <8A31> <8B96> -<8A33> <8A33> <96F3> -<8A34> <8A34> <9169> -<8A36> <8A36> -<8A3A> <8A3A> <9066> -<8A3B> <8A3B> <9290> -<8A3C> <8A3C> <8FD8> -<8A41> <8A41> -<8A46> <8A46> -<8A48> <8A48> -<8A50> <8A50> <8DBC> -<8A51> <8A51> <91C0> -<8A52> <8A52> -<8A54> <8A54> <8FD9> -<8A55> <8A55> <955D> -<8A5B> <8A5B> -<8A5E> <8A5E> <8E8C> -<8A60> <8A60> <8972> -<8A62> <8A62> -<8A63> <8A63> <8C77> -<8A66> <8A66> <8E8E> -<8A69> <8A69> <8E8D> -<8A6B> <8A6B> <986C> -<8A6C> <8A6C> -<8A6D> <8A6D> -<8A6E> <8A6E> <9146> -<8A70> <8A70> <8B6C> -<8A71> <8A71> <9862> -<8A72> <8A72> <8A59> -<8A73> <8A73> <8FDA> -<8A7C> <8A7C> -<8A82> <8A82> -<8A84> <8A84> -<8A85> <8A85> -<8A87> <8A87> <8CD6> -<8A89> <8A89> <975F> -<8A8C> <8A8C> <8E8F> -<8A8D> <8A8D> <9446> -<8A91> <8A91> -<8A93> <8A93> <90BE> -<8A95> <8A95> <9261> -<8A98> <8A98> <9755> -<8A9A> <8A9A> -<8A9E> <8A9E> <8CEA> -<8AA0> <8AA0> <90BD> -<8AA1> <8AA1> -endbfrange - -100 beginbfrange -<8AA3> <8AA3> -<8AA4> <8AA4> <8CEB> -<8AA5> <8AA6> -<8AA8> <8AA8> -<8AAC> <8AAC> <90E0> -<8AAD> <8AAD> <93C7> -<8AB0> <8AB0> <924E> -<8AB2> <8AB2> <89DB> -<8AB9> <8AB9> <94EE> -<8ABC> <8ABC> <8B62> -<8ABF> <8ABF> <92B2> -<8AC2> <8AC2> -<8AC4> <8AC4> -<8AC7> <8AC7> <926B> -<8ACB> <8ACB> <90BF> -<8ACC> <8ACC> <8AD0> -<8ACD> <8ACD> -<8ACF> <8ACF> <907A> -<8AD2> <8AD2> <97C8> -<8AD6> <8AD6> <985F> -<8ADA> <8ADA> -<8ADB> <8ADB> -<8ADC> <8ADC> <92B3> -<8ADE> <8ADE> -<8AE0> <8AE0> -<8AE1> <8AE1> -<8AE2> <8AE2> -<8AE4> <8AE4> -<8AE6> <8AE6> <92FA> -<8AE7> <8AE7> -<8AEB> <8AEB> -<8AED> <8AED> <9740> -<8AEE> <8AEE> <8E90> -<8AF1> <8AF1> -<8AF3> <8AF3> -<8AF7> <8AF7> -<8AF8> <8AF8> <8F94> -<8AFA> <8AFA> <8CBF> -<8AFE> <8AFE> <91F8> -<8B00> <8B00> <9664> -<8B01> <8B01> <8979> -<8B02> <8B02> <88E0> -<8B04> <8B04> <93A3> -<8B07> <8B07> -<8B0C> <8B0C> -<8B0E> <8B0E> <93E4> -<8B10> <8B10> -<8B14> <8B14> -<8B16> <8B16> -<8B17> <8B17> -<8B19> <8B19> <8CAA> -<8B1A> <8B1A> -<8B1B> <8B1B> <8D75> -<8B1D> <8B1D> <8ED3> -<8B20> <8B20> -<8B21> <8B21> <9777> -<8B26> <8B26> -<8B28> <8B28> -<8B2B> <8B2B> -<8B2C> <8B2C> <9554> -<8B33> <8B33> -<8B39> <8B39> <8BDE> -<8B3E> <8B3E> -<8B41> <8B41> -<8B49> <8B49> -<8B4C> <8B4C> -<8B4E> <8B4E> -<8B4F> <8B4F> -<8B56> <8B56> -<8B58> <8B58> <8EAF> -<8B5A> <8B5A> -<8B5B> <8B5B> -<8B5C> <8B5C> <9588> -<8B5F> <8B5F> -<8B66> <8B66> <8C78> -<8B6B> <8B6B> -<8B6C> <8B6C> -<8B6F> <8B6F> -<8B70> <8B70> <8B63> -<8B71> <8B71> -<8B72> <8B72> <8FF7> -<8B74> <8B74> -<8B77> <8B77> <8CEC> -<8B7D> <8B7D> -<8B80> <8B80> -<8B83> <8B83> <8E5D> -<8B8A> <8B8A> <9DCC> -<8B8C> <8B8C> -<8B8E> <8B8E> -<8B90> <8B90> <8F51> -<8B92> <8B93> -<8B96> <8B96> -<8B99> <8B9A> -<8C37> <8C37> <924A> -<8C3A> <8C3A> -<8C3F> <8C3F> -<8C41> <8C41> -<8C46> <8C46> <93A4> -<8C48> <8C48> -<8C4A> <8C4A> <964C> -endbfrange - -100 beginbfrange -<8C4C> <8C4C> -<8C4E> <8C4E> -<8C50> <8C50> -<8C55> <8C55> -<8C5A> <8C5A> <93D8> -<8C61> <8C61> <8FDB> -<8C62> <8C62> -<8C6A> <8C6A> <8D8B> -<8C6B> <8C6B> <98AC> -<8C6C> <8C6C> -<8C78> <8C78> -<8C79> <8C79> <955E> -<8C7A> <8C7A> -<8C7C> <8C7C> -<8C82> <8C82> -<8C85> <8C85> -<8C89> <8C89> -<8C8A> <8C8A> -<8C8C> <8C8C> <9665> -<8C8D> <8C8E> -<8C94> <8C94> -<8C98> <8C98> -<8C9D> <8C9D> <8A4C> -<8C9E> <8C9E> <92E5> -<8CA0> <8CA0> <9589> -<8CA1> <8CA1> <8DE0> -<8CA2> <8CA2> <8D76> -<8CA7> <8CA7> <956E> -<8CA8> <8CA8> <89DD> -<8CA9> <8CA9> <94CC> -<8CAA> <8CAA> -<8CAB> <8CAB> <8AD1> -<8CAC> <8CAC> <90D3> -<8CAD> <8CAD> -<8CAE> <8CAE> -<8CAF> <8CAF> <9299> -<8CB0> <8CB0> <96E1> -<8CB2> <8CB3> -<8CB4> <8CB4> <8B4D> -<8CB6> <8CB6> -<8CB7> <8CB7> <9483> -<8CB8> <8CB8> <91DD> -<8CBB> <8CBB> <94EF> -<8CBC> <8CBC> <935C> -<8CBD> <8CBD> -<8CBF> <8CBF> <9666> -<8CC0> <8CC0> <89EA> -<8CC1> <8CC1> -<8CC2> <8CC2> <9847> -<8CC3> <8CC3> <92C0> -<8CC4> <8CC4> <9864> -<8CC7> <8CC7> <8E91> -<8CC8> <8CC8> -<8CCA> <8CCA> <91AF> -<8CCD> <8CCD> -<8CCE> <8CCE> <9147> -<8CD1> <8CD1> <93F6> -<8CD3> <8CD3> <956F> -<8CDA> <8CDA> -<8CDB> <8CDB> <8E5E> -<8CDC> <8CDC> <8E92> -<8CDE> <8CDE> <8FDC> -<8CE0> <8CE0> <9485> -<8CE2> <8CE2> <8CAB> -<8CE3> <8CE3> -<8CE4> <8CE4> -<8CE6> <8CE6> <958A> -<8CEA> <8CEA> <8EBF> -<8CED> <8CED> <9371> -<8CFA> <8CFB> -<8CFC> <8CFC> <8D77> -<8CFD> <8CFD> -<8D04> <8D05> -<8D07> <8D07> -<8D08> <8D08> <91A1> -<8D0A> <8D0A> -<8D0B> <8D0B> <8AE4> -<8D0D> <8D0D> -<8D0F> <8D0F> -<8D10> <8D10> -<8D13> <8D13> -<8D14> <8D14> -<8D16> <8D16> -<8D64> <8D64> <90D4> -<8D66> <8D66> <8ECD> -<8D67> <8D67> -<8D6B> <8D6B> <8A71> -<8D6D> <8D6D> -<8D70> <8D70> <9196> -<8D71> <8D71> -<8D73> <8D73> -<8D74> <8D74> <958B> -<8D77> <8D77> <8B4E> -<8D81> <8D81> -<8D85> <8D85> <92B4> -<8D8A> <8D8A> <897A> -<8D99> <8D99> -<8DA3> <8DA3> <8EEF> -<8DA8> <8DA8> <9096> -<8DB3> <8DB3> <91AB> -endbfrange - -100 beginbfrange -<8DBA> <8DBA> -<8DBE> <8DBE> -<8DC2> <8DC2> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCF> <8DCF> -<8DD6> <8DD6> -<8DDA> <8DDA> -<8DDB> <8DDB> -<8DDD> <8DDD> <8B97> -<8DDF> <8DDF> -<8DE1> <8DE1> <90D5> -<8DE3> <8DE3> -<8DE8> <8DE8> <8CD7> -<8DEA> <8DEB> -<8DEF> <8DEF> <9848> -<8DF3> <8DF3> <92B5> -<8DF5> <8DF5> <9148> -<8DFC> <8DFC> -<8DFF> <8DFF> -<8E08> <8E09> -<8E0A> <8E0A> <9778> -<8E0F> <8E0F> <93A5> -<8E10> <8E10> -<8E1D> <8E1E> -<8E1F> <8E1F> -<8E2A> <8E2A> -<8E30> <8E30> -<8E34> <8E34> -<8E35> <8E35> -<8E42> <8E42> -<8E44> <8E44> <92FB> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E4C> <8E4C> -<8E50> <8E50> -<8E55> <8E55> -<8E59> <8E59> -<8E5F> <8E5F> <90D6> -<8E60> <8E60> -<8E63> <8E63> -<8E64> <8E64> -<8E72> <8E72> -<8E74> <8E74> <8F52> -<8E76> <8E76> -<8E7C> <8E7C> -<8E81> <8E81> -<8E84> <8E84> -<8E85> <8E85> -<8E87> <8E87> -<8E8A> <8E8A> -<8E8B> <8E8B> -<8E8D> <8E8D> <96F4> -<8E91> <8E91> -<8E93> <8E93> -<8E94> <8E94> -<8E99> <8E99> -<8EA1> <8EA1> -<8EAA> <8EAA> -<8EAB> <8EAB> <9067> -<8EAC> <8EAC> -<8EAF> <8EAF> <8BEB> -<8EB0> <8EB0> -<8EB1> <8EB1> -<8EBE> <8EBE> -<8EC0> <8EC0> <8BEB> -<8EC5> <8EC5> -<8EC6> <8EC6> -<8EC8> <8EC8> -<8ECA> <8ECA> <8ED4> -<8ECB> <8ECB> -<8ECC> <8ECC> <8B4F> -<8ECD> <8ECD> <8C52> -<8ED2> <8ED2> <8CAC> -<8EDB> <8EDB> -<8EDF> <8EDF> <93EE> -<8EE2> <8EE2> <935D> -<8EE3> <8EE3> -<8EEB> <8EEB> -<8EF8> <8EF8> <8EB2> -<8EFB> <8EFB> -<8EFC> <8EFC> -<8EFD> <8EFD> <8C79> -<8EFE> <8EFE> -<8F03> <8F03> <8A72> -<8F05> <8F05> -<8F09> <8F09> <8DDA> -<8F0A> <8F0A> -<8F0C> <8F0C> -<8F12> <8F12> -<8F13> <8F13> -<8F14> <8F14> <95E3> -<8F15> <8F15> -<8F19> <8F19> -<8F1B> <8F1B> -<8F1C> <8F1C> -<8F1D> <8F1D> <8B50> -<8F1F> <8F1F> -endbfrange - -100 beginbfrange -<8F26> <8F26> -<8F29> <8F29> <9479> -<8F2A> <8F2A> <97D6> -<8F2F> <8F2F> <8F53> -<8F33> <8F33> -<8F38> <8F38> <9741> -<8F39> <8F39> -<8F3B> <8F3B> -<8F3E> <8F3E> -<8F3F> <8F3F> <9760> -<8F42> <8F42> -<8F44> <8F44> <8A8D> -<8F45> <8F45> -<8F46> <8F46> -<8F49> <8F49> -<8F4C> <8F4C> -<8F4D> <8F4D> <9351> -<8F4E> <8F4E> -<8F57> <8F57> -<8F5C> <8F5C> -<8F5F> <8F5F> <8D8C> -<8F61> <8F61> <8C44> -<8F62> <8F64> -<8F9B> <8F9B> <9068> -<8F9C> <8F9C> -<8F9E> <8F9E> <8EAB> -<8F9F> <8F9F> -<8FA3> <8FA3> -<8FA7> <8FA7> <999F> -<8FA8> <8FA8> <999E> -<8FAD> <8FAD> -<8FAE> <8FAE> -<8FAF> <8FAF> -<8FB0> <8FB0> <9243> -<8FB1> <8FB1> <904A> -<8FB2> <8FB2> <945F> -<8FB7> <8FB7> -<8FBA> <8FBA> <95D3> -<8FBB> <8FBB> <92D2> -<8FBC> <8FBC> <8D9E> -<8FBF> <8FBF> <9248> -<8FC2> <8FC2> <8949> -<8FC4> <8FC4> <9698> -<8FC5> <8FC5> <9076> -<8FCE> <8FCE> <8C7D> -<8FD1> <8FD1> <8BDF> -<8FD4> <8FD4> <95D4> -<8FDA> <8FDA> -<8FE2> <8FE2> -<8FE5> <8FE5> -<8FE6> <8FE6> <89DE> -<8FE9> <8FE9> <93F4> -<8FEA> <8FEA> -<8FEB> <8FEB> <9497> -<8FED> <8FED> <9352> -<8FEF> <8FEF> -<8FF0> <8FF0> <8F71> -<8FF4> <8FF4> -<8FF7> <8FF7> <96C0> -<8FF8> <8FF8> -<8FF9> <8FFA> -<8FFD> <8FFD> <92C7> -<9000> <9000> <91DE> -<9001> <9001> <9197> -<9003> <9003> <93A6> -<9005> <9005> -<9006> <9006> <8B74> -<900B> <900B> -<900D> <900D> -<900E> <900E> -<900F> <900F> <93A7> -<9010> <9010> <9280> -<9011> <9011> -<9013> <9013> <92FC> -<9014> <9014> <9372> -<9015> <9015> -<9016> <9016> -<9017> <9017> <9080> -<9019> <9019> <9487> -<901A> <901A> <92CA> -<901D> <901D> <90C0> -<901E> <901E> -<901F> <901F> <91AC> -<9020> <9020> <91A2> -<9021> <9021> -<9022> <9022> <88A7> -<9023> <9023> <9841> -<9027> <9027> -<902E> <902E> <91DF> -<9031> <9031> <8F54> -<9032> <9032> <9069> -<9035> <9035> -<9036> <9036> -<9038> <9038> <88ED> -<9039> <9039> -<903C> <903C> <954E> -<903E> <903E> -<9041> <9041> <93D9> -<9042> <9042> <908B> -<9045> <9045> <9278> -endbfrange - -100 beginbfrange -<9047> <9047> <8BF6> -<9049> <9049> -<904A> <904A> <9756> -<904B> <904B> <895E> -<904D> <904D> <95D5> -<904E> <904E> <89DF> -<904F> <9052> -<9053> <9053> <93B9> -<9054> <9054> <9242> -<9055> <9055> <88E1> -<9056> <9056> -<9058> <9058> -<9059> <9059> -<905C> <905C> <91BB> -<905E> <905E> -<9060> <9060> <8993> -<9061> <9061> <916B> -<9063> <9063> <8CAD> -<9065> <9065> <9779> -<9068> <9068> -<9069> <9069> <934B> -<906D> <906D> <9198> -<906E> <906E> <8ED5> -<906F> <906F> -<9072> <9072> -<9075> <9075> <8F85> -<9076> <9076> -<9077> <9077> <914A> -<9078> <9078> <9149> -<907A> <907A> <88E2> -<907C> <907C> <97C9> -<907D> <907D> -<907F> <907F> <94F0> -<9080> <9080> -<9081> <9081> -<9082> <9082> -<9083> <9083> -<9084> <9084> <8AD2> -<9087> <9087> -<9089> <9089> -<908A> <908A> -<908F> <908F> -<9091> <9091> <9757> -<90A3> <90A3> <93DF> -<90A6> <90A6> <964D> -<90A8> <90A8> -<90AA> <90AA> <8ED7> -<90AF> <90AF> -<90B1> <90B1> -<90B5> <90B5> -<90B8> <90B8> <9340> -<90C1> <90C1> <88E8> -<90CA> <90CA> <8D78> -<90CE> <90CE> <9859> -<90DB> <90DB> -<90E1> <90E1> <8C53> -<90E2> <90E2> -<90E4> <90E4> -<90E8> <90E8> <9594> -<90ED> <90ED> <8A73> -<90F5> <90F5> <9758> -<90F7> <90F7> <8BBD> -<90FD> <90FD> <9373> -<9102> <9102> -<9112> <9112> -<9119> <9119> -<912D> <912D> <9341> -<9130> <9130> -<9132> <9132> -<9149> <9149> <93D1> -<914A> <914A> -<914B> <914B> <8F55> -<914C> <914C> <8EDE> -<914D> <914D> <947A> -<914E> <914E> <9291> -<9152> <9152> <8EF0> -<9154> <9154> <908C> -<9156> <9156> -<9158> <9158> -<9162> <9162> <907C> -<9163> <9163> -<9165> <9165> -<9169> <9169> -<916A> <916A> <978F> -<916C> <916C> <8F56> -<9172> <9172> -<9173> <9173> -<9175> <9175> <8D79> -<9177> <9177> <8D93> -<9178> <9178> <8E5F> -<9182> <9182> -<9187> <9187> <8F86> -<9189> <9189> -<918B> <918B> -<918D> <918D> <91E7> -<9190> <9190> <8CED> -<9192> <9192> <90C1> -<9197> <9197> <94AE> -<919C> <919C> <8F58> -<91A2> <91A2> -endbfrange - -100 beginbfrange -<91A4> <91A4> <8FDD> -<91AA> <91AA> -<91AB> <91AB> -<91AC> <91AC> <8FDD> -<91AF> <91AF> -<91B1> <91B1> <94AE> -<91B4> <91B4> -<91B5> <91B5> -<91B8> <91B8> <8FF8> -<91BA> <91BA> -<91C0> <91C1> -<91C6> <91C6> <94CE> -<91C7> <91C7> <8DD1> -<91C8> <91C8> <8EDF> -<91C9> <91C9> -<91CB> <91CB> -<91CC> <91CC> <97A2> -<91CD> <91CD> <8F64> -<91CE> <91CE> <96EC> -<91CF> <91CF> <97CA> -<91D0> <91D0> -<91D1> <91D1> <8BE0> -<91D6> <91D6> -<91D8> <91D8> <9342> -<91DB> <91DB> -<91DC> <91DC> <8A98> -<91DD> <91DD> <906A> -<91DF> <91DF> -<91E1> <91E1> -<91E3> <91E3> <92DE> -<91E6> <91E6> <9674> -<91E7> <91E7> <8BFA> -<91F5> <91F6> -<91FC> <91FC> -<91FF> <91FF> -<920D> <920D> <93DD> -<920E> <920E> <8A62> -<9211> <9211> -<9214> <9214> -<9215> <9215> -<921E> <921E> -<9229> <9229> -<922C> <922C> -<9234> <9234> <97E9> -<9237> <9237> <8CD8> -<923F> <923F> -<9244> <9244> <9353> -<9245> <9245> -<9248> <9248> -<9249> <9249> -<924B> <924B> -<9250> <9250> -<9257> <9257> -<925A> <925A> -<925B> <925B> <8994> -<925E> <925E> -<9262> <9262> <94AB> -<9264> <9264> -<9266> <9266> <8FDE> -<9271> <9271> <8D7A> -<927E> <927E> <9667> -<9280> <9280> <8BE2> -<9283> <9283> <8F65> -<9285> <9285> <93BA> -<9291> <9291> <914C> -<9293> <9293> -<9295> <9295> -<9296> <9296> -<9298> <9298> <96C1> -<929A> <929A> <92B6> -<929B> <929B> -<929C> <929C> -<92AD> <92AD> <914B> -<92B7> <92B7> -<92B9> <92B9> -<92CF> <92CF> -<92D2> <92D2> <964E> -<92E4> <92E4> <8F9B> -<92E9> <92E9> -<92EA> <92EA> <95DD> -<92ED> <92ED> <8973> -<92F2> <92F2> <9565> -<92F3> <92F3> <9292> -<92F8> <92F8> <8B98> -<92FA> <92FA> -<92FC> <92FC> <8D7C> -<9306> <9306> <8E4B> -<930F> <930F> -<9310> <9310> <908D> -<9318> <9318> <908E> -<9319> <9319> -<931A> <931A> -<9320> <9320> <8FF9> -<9322> <9322> -<9323> <9323> -<9326> <9326> <8BD1> -<9328> <9328> <9564> -<932B> <932B> <8EE0> -<932C> <932C> <9842> -<932E> <932E> -endbfrange - -100 beginbfrange -<932F> <932F> <8DF6> -<9332> <9332> <985E> -<9335> <9335> -<933A> <933A> -<933B> <933B> -<9344> <9344> -<934B> <934B> <93E7> -<934D> <934D> <9374> -<9354> <9354> <92D5> -<9356> <9356> -<935B> <935B> <9262> -<935C> <935C> -<9360> <9360> -<936C> <936C> <8C4C> -<936E> <936E> -<9375> <9375> <8CAE> -<937C> <937C> -<937E> <937E> <8FDF> -<938C> <938C> <8A99> -<9394> <9394> -<9396> <9396> <8DBD> -<9397> <9397> <9199> -<939A> <939A> <92C8> -<93A7> <93A7> <8A5A> -<93AC> <93AD> -<93AE> <93AE> <92C1> -<93B0> <93B0> -<93B9> <93B9> -<93C3> <93C3> -<93C8> <93C8> -<93D0> <93D0> -<93D1> <93D1> <934C> -<93D6> <93D7> -<93D8> <93D8> -<93DD> <93DD> -<93E1> <93E1> <8BBE> -<93E4> <93E4> -<93E5> <93E5> -<93E8> <93E8> -<9403> <9403> -<9407> <9407> -<9410> <9410> -<9413> <9413> -<9414> <9414> -<9418> <9418> <8FE0> -<9419> <9419> <93A8> -<941A> <941A> -<9421> <9421> -<942B> <942B> -<9435> <9435> -<9436> <9436> -<9438> <9438> <91F6> -<943A> <943A> -<9441> <9441> -<9444> <9444> -<9451> <9451> <8AD3> -<9452> <9452> -<9453> <9453> <96F8> -<945A> <945A> -<945B> <945B> -<945E> <945E> -<9460> <9460> -<9462> <9462> -<946A> <946A> -<9470> <9470> -<9475> <9475> -<9477> <9477> -<947C> <947C> -<947D> <947D> -<947E> <947E> -<947F> <947F> -<9481> <9481> -<9577> <9577> <92B7> -<9580> <9580> <96E5> -<9582> <9582> -<9583> <9583> <914D> -<9587> <9587> -<9589> <9589> <95C2> -<958A> <958A> -<958B> <958B> <8A4A> -<958F> <958F> <895B> -<9591> <9591> <8AD5> -<9593> <9593> <8AD4> -<9594> <9594> -<9596> <9596> -<9598> <9599> -<95A0> <95A0> -<95A2> <95A2> <8AD6> -<95A3> <95A3> <8A74> -<95A4> <95A4> <8D7D> -<95A5> <95A5> <94B4> -<95A7> <95A7> -<95A8> <95A8> -<95AD> <95AD> -<95B2> <95B2> <897B> -<95B9> <95B9> -<95BB> <95BB> -<95BC> <95BC> -<95BE> <95BE> -<95C3> <95C3> -endbfrange - -100 beginbfrange -<95C7> <95C7> <88C5> -<95CA> <95CA> -<95CC> <95CC> -<95CD> <95CD> -<95D4> <95D4> -<95D5> <95D5> -<95D6> <95D6> -<95D8> <95D8> <93AC> -<95DC> <95DC> -<95E1> <95E1> -<95E2> <95E2> -<95E5> <95E5> -<961C> <961C> <958C> -<9621> <9621> -<9628> <9628> -<962A> <962A> <8DE3> -<962E> <962F> -<9632> <9632> <9668> -<963B> <963B> <916A> -<963F> <963F> <88A2> -<9640> <9640> <91C9> -<9642> <9642> -<9644> <9644> <958D> -<964B> <964B> -<964C> <964C> -<964D> <964D> <8D7E> -<964F> <964F> -<9650> <9650> <8CC0> -<965B> <965B> <95C3> -<965C> <965C> -<965D> <965D> -<965E> <965E> -<965F> <965F> -<9662> <9662> <8940> -<9663> <9663> <9077> -<9664> <9664> <8F9C> -<9665> <9665> <8AD7> -<9666> <9666> -<966A> <966A> <9486> -<966C> <966C> -<9670> <9670> <8941> -<9672> <9672> -<9673> <9673> <92C2> -<9675> <9675> <97CB> -<9676> <9676> <93A9> -<9677> <9677> -<9678> <9678> <97A4> -<967A> <967A> <8CAF> -<967D> <967D> <977A> -<9685> <9685> <8BF7> -<9686> <9686> <97B2> -<9688> <9688> <8C47> -<968A> <968A> <91E0> -<968B> <968B> -<968D> <968D> -<968E> <968E> <8A4B> -<968F> <968F> <908F> -<9694> <9694> <8A75> -<9695> <9695> -<9697> <9697> -<9698> <9698> -<9699> <9699> <8C84> -<969B> <969B> <8DDB> -<969C> <969C> <8FE1> -<96A0> <96A0> <8942> -<96A3> <96A3> <97D7> -<96A7> <96A7> -<96A8> <96A8> -<96AA> <96AA> -<96B0> <96B0> -<96B1> <96B2> -<96B4> <96B4> -<96B6> <96B6> -<96B7> <96B7> <97EA> -<96B8> <96B9> -<96BB> <96BB> <90C7> -<96BC> <96BC> <94B9> -<96C0> <96C0> <909D> -<96C1> <96C1> <8AE5> -<96C4> <96C4> <9759> -<96C5> <96C5> <89EB> -<96C6> <96C6> <8F57> -<96C7> <96C7> <8CD9> -<96C9> <96C9> -<96CB> <96CB> -<96CC> <96CC> <8E93> -<96CD> <96CD> -<96CE> <96CE> -<96D1> <96D1> <8E47> -<96D5> <96D5> -<96D6> <96D6> -<96D9> <96D9> <99D4> -<96DB> <96DB> <9097> -<96DC> <96DC> -<96E2> <96E2> <97A3> -<96E3> <96E3> <93EF> -<96E8> <96E8> <894A> -<96EA> <96EA> <90E1> -<96EB> <96EB> <8EB4> -<96F0> <96F0> <95B5> -endbfrange - -100 beginbfrange -<96F2> <96F2> <895F> -<96F6> <96F6> <97EB> -<96F7> <96F7> <978B> -<96F9> <96F9> -<96FB> <96FB> <9364> -<9700> <9700> <8EF9> -<9704> <9704> -<9706> <9706> -<9707> <9707> <906B> -<9708> <9708> -<970A> <970A> <97EC> -<970D> <970D> -<970E> <970E> -<970F> <970F> -<9711> <9711> -<9713> <9713> -<9716> <9716> -<9719> <9719> -<971C> <971C> <919A> -<971E> <971E> <89E0> -<9724> <9724> -<9727> <9727> <96B6> -<972A> <972A> -<9730> <9730> -<9732> <9732> <9849> -<9738> <9738> <9E50> -<9739> <9739> -<973D> <973E> -<9742> <9742> -<9744> <9744> -<9746> <9746> -<9748> <9748> -<9749> <9749> -<9752> <9752> <90C2> -<9756> <9756> <96F5> -<9759> <9759> <90C3> -<975C> <975C> -<975E> <975E> <94F1> -<9760> <9760> -<9761> <9761> -<9762> <9762> <96CA> -<9764> <9764> -<9766> <9766> -<9768> <9768> -<9769> <9769> <8A76> -<976B> <976B> -<976D> <976D> <9078> -<9771> <9771> -<9774> <9774> <8C43> -<9779> <9779> -<977A> <977A> -<977C> <977C> -<9781> <9781> -<9784> <9784> <8A93> -<9785> <9785> -<9786> <9786> -<978B> <978B> -<978D> <978D> <88C6> -<978F> <9790> -<9798> <9798> <8FE2> -<979C> <979C> -<97A0> <97A0> <8B66> -<97A3> <97A3> -<97A6> <97A6> -<97A8> <97A8> -<97AB> <97AB> -<97AD> <97AD> <95DA> -<97B3> <97B4> -<97C3> <97C3> -<97C6> <97C6> -<97C8> <97C8> -<97CB> <97CB> -<97D3> <97D3> <8AD8> -<97DC> <97DC> -<97ED> <97ED> -<97EE> <97EE> <9442> -<97F2> <97F2> -<97F3> <97F3> <89B9> -<97F5> <97F5> -<97F6> <97F6> -<97FB> <97FB> <8943> -<97FF> <97FF> <8BBF> -<9801> <9801> <95C5> -<9802> <9802> <92B8> -<9803> <9803> <8DA0> -<9805> <9805> <8D80> -<9806> <9806> <8F87> -<9808> <9808> <907B> -<980C> <980C> -<980F> <980F> -<9810> <9810> <9761> -<9811> <9811> <8AE6> -<9812> <9812> <94D0> -<9813> <9813> <93DA> -<9817> <9817> <909C> -<9818> <9818> <97CC> -<981A> <981A> <8C7A> -<9821> <9821> -<9824> <9824> -<982C> <982C> <966A> -endbfrange - -100 beginbfrange -<982D> <982D> <93AA> -<9830> <9830> <966A> -<9834> <9834> <896F> -<9837> <9837> -<9838> <9838> -<983B> <983B> <9570> -<983C> <983C> <978A> -<983D> <983D> -<9846> <9846> -<984B> <984B> -<984C> <984C> <91E8> -<984D> <984E> <8A7A> -<984F> <984F> -<9854> <9854> <8AE7> -<9855> <9855> <8CB0> -<9858> <9858> <8AE8> -<985A> <985A> <935E> -<985B> <985B> <935E> -<985E> <985E> <97DE> -<9867> <9867> <8CDA> -<986B> <986B> -<986F> <9870> -<9871> <9871> -<9873> <9873> -<9874> <9874> -<98A8> <98A8> <9597> -<98AA> <98AA> -<98AF> <98AF> -<98B1> <98B1> -<98B6> <98B6> -<98C3> <98C3> -<98C4> <98C4> -<98C6> <98C6> -<98DB> <98DB> <94F2> -<98DC> <98DC> -<98DF> <98DF> <9048> -<98E2> <98E2> <8B51> -<98E9> <98E9> -<98EB> <98EB> -<98ED> <98ED> <99AA> -<98EE> <98EE> <9F5A> -<98EF> <98EF> <94D1> -<98F2> <98F2> <88F9> -<98F4> <98F4> <88B9> -<98FC> <98FC> <8E94> -<98FD> <98FD> <964F> -<98FE> <98FE> <8FFC> -<9903> <9903> -<9905> <9905> <96DD> -<9909> <9909> -<990A> <990A> <977B> -<990C> <990C> <8961> -<9910> <9910> <8E60> -<9912> <9912> -<9913> <9913> <89EC> -<9914> <9914> -<9918> <9918> -<991D> <991E> -<9920> <9920> -<9921> <9921> -<9924> <9924> -<9928> <9928> <8AD9> -<992C> <992C> -<992E> <992E> -<993D> <993E> -<9942> <9942> -<9945> <9945> -<9949> <9949> -<994B> <994B> -<994C> <994C> -<9950> <9950> -<9951> <9952> -<9955> <9955> -<9957> <9957> <8BC0> -<9996> <9996> <8EF1> -<9997> <9998> -<9999> <9999> <8D81> -<99A5> <99A5> -<99A8> <99A8> <8A5D> -<99AC> <99AC> <946E> -<99AD> <99AE> -<99B3> <99B3> <9279> -<99B4> <99B4> <93E9> -<99BC> <99BC> -<99C1> <99C1> <949D> -<99C4> <99C4> <91CA> -<99C5> <99C5> <8977> -<99C6> <99C6> <8BEC> -<99C8> <99C8> <8BED> -<99D0> <99D0> <9293> -<99D1> <99D1> -<99D2> <99D2> <8BEE> -<99D5> <99D5> <89ED> -<99D8> <99D8> -<99DB> <99DB> -<99DD> <99DD> -<99DF> <99DF> -<99E2> <99E2> -<99ED> <99EE> -<99F1> <99F2> -endbfrange - -100 beginbfrange -<99F8> <99F8> -<99FB> <99FB> -<99FF> <99FF> <8F78> -<9A01> <9A01> -<9A05> <9A05> -<9A0E> <9A0E> <8B52> -<9A0F> <9A0F> -<9A12> <9A12> <919B> -<9A13> <9A13> <8CB1> -<9A19> <9A19> -<9A28> <9A28> <91CB> -<9A2B> <9A2B> -<9A30> <9A30> <93AB> -<9A37> <9A37> -<9A3E> <9A3E> -<9A40> <9A40> -<9A42> <9A42> -<9A43> <9A43> -<9A45> <9A45> -<9A4D> <9A4D> -<9A52> <9A52> <91CB> -<9A55> <9A55> -<9A57> <9A57> -<9A5A> <9A5A> <8BC1> -<9A5B> <9A5B> -<9A5F> <9A5F> -<9A62> <9A62> -<9A64> <9A64> -<9A65> <9A65> -<9A69> <9A69> -<9A6A> <9A6A> -<9A6B> <9A6B> -<9AA8> <9AA8> <8D9C> -<9AAD> <9AAD> -<9AB0> <9AB0> -<9AB8> <9AB8> <8A5B> -<9ABC> <9ABC> -<9AC0> <9AC0> -<9AC4> <9AC4> <9091> -<9ACF> <9ACF> -<9AD1> <9AD1> -<9AD3> <9AD4> -<9AD8> <9AD8> <8D82> -<9ADE> <9ADF> -<9AE2> <9AE3> -<9AE6> <9AE6> -<9AEA> <9AEA> <94AF> -<9AEB> <9AEB> -<9AED> <9AED> <9545> -<9AEE> <9AEE> -<9AEF> <9AEF> -<9AF1> <9AF1> -<9AF4> <9AF4> -<9AF7> <9AF7> -<9AFB> <9AFB> -<9B06> <9B06> -<9B18> <9B18> -<9B1A> <9B1A> -<9B1F> <9B1F> -<9B22> <9B23> -<9B25> <9B25> -<9B27> <9B2A> -<9B2E> <9B2F> -<9B31> <9B31> <9F54> -<9B32> <9B32> -<9B3B> <9B3B> -<9B3C> <9B3C> <8B53> -<9B41> <9B41> <8A40> -<9B42> <9B42> <8DB0> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> <96A3> -<9B4D> <9B4E> -<9B4F> <9B4F> -<9B51> <9B51> -<9B54> <9B54> <9682> -<9B58> <9B58> -<9B5A> <9B5A> <8B9B> -<9B6F> <9B6F> <9844> -<9B74> <9B74> -<9B83> <9B83> -<9B8E> <9B8E> <88BC> -<9B91> <9B91> -<9B92> <9B92> <95A9> -<9B93> <9B93> -<9B96> <9B97> -<9B9F> <9BA0> -<9BA8> <9BA8> -<9BAA> <9BAA> <968E> -<9BAB> <9BAB> <8E4C> -<9BAD> <9BAD> <8DF8> -<9BAE> <9BAE> <914E> -<9BB4> <9BB4> -<9BB9> <9BB9> -<9BC0> <9BC0> -<9BC6> <9BC6> -<9BC9> <9BC9> <8CEF> -<9BCA> <9BCA> -<9BCF> <9BCF> -<9BD1> <9BD2> -endbfrange - -100 beginbfrange -<9BD4> <9BD4> -<9BD6> <9BD6> <8E49> -<9BDB> <9BDB> <91E2> -<9BE1> <9BE1> -<9BE2> <9BE2> -<9BE3> <9BE3> -<9BE4> <9BE4> -<9BE8> <9BE8> <8C7E> -<9BF0> <9BF0> -<9BF1> <9BF1> -<9BF2> <9BF2> -<9BF5> <9BF5> <88B1> -<9C04> <9C04> -<9C06> <9C06> -<9C08> <9C08> -<9C09> <9C09> -<9C0A> <9C0A> -<9C0C> <9C0C> -<9C0D> <9C0D> <8A82> -<9C10> <9C10> <986B> -<9C12> <9C12> -<9C13> <9C13> -<9C14> <9C14> -<9C15> <9C15> -<9C1B> <9C1B> -<9C21> <9C21> -<9C24> <9C24> -<9C25> <9C25> -<9C2D> <9C2D> <9568> -<9C2E> <9C2E> -<9C2F> <9C2F> <88F1> -<9C30> <9C30> -<9C32> <9C32> -<9C39> <9C39> <8A8F> -<9C3A> <9C3A> -<9C3B> <9C3B> <8956> -<9C3E> <9C3E> -<9C46> <9C46> -<9C47> <9C47> -<9C48> <9C48> <924C> -<9C52> <9C52> <9690> -<9C57> <9C57> <97D8> -<9C5A> <9C5A> -<9C60> <9C60> -<9C67> <9C67> -<9C76> <9C76> -<9C78> <9C78> -<9CE5> <9CE5> <92B9> -<9CE7> <9CE7> -<9CE9> <9CE9> <94B5> -<9CEB> <9CEB> -<9CEC> <9CEC> -<9CF0> <9CF0> -<9CF3> <9CF3> <9650> -<9CF4> <9CF4> <96C2> -<9CF6> <9CF6> <93CE> -<9D03> <9D03> -<9D06> <9D06> -<9D07> <9D07> <93BC> -<9D08> <9D08> -<9D09> <9D09> -<9D0E> <9D0E> <89A8> -<9D12> <9D12> -<9D15> <9D15> -<9D1B> <9D1B> <8995> -<9D1F> <9D1F> -<9D23> <9D23> -<9D26> <9D26> -<9D28> <9D28> <8A9B> -<9D2A> <9D2A> -<9D2B> <9D2B> <8EB0> -<9D2C> <9D2C> <89A7> -<9D3B> <9D3B> <8D83> -<9D3E> <9D3E> -<9D3F> <9D3F> -<9D41> <9D41> -<9D44> <9D44> -<9D46> <9D46> -<9D48> <9D48> -<9D50> <9D50> -<9D51> <9D51> -<9D59> <9D59> -<9D5C> <9D5C> <894C> -<9D5D> <9D5E> -<9D60> <9D60> <8D94> -<9D61> <9D61> <96B7> -<9D64> <9D64> -<9D6C> <9D6C> <9651> -<9D6F> <9D6F> -<9D72> <9D72> -<9D7A> <9D7A> -<9D87> <9D87> -<9D89> <9D89> -<9D8F> <9D8F> <8C7B> -<9D9A> <9D9A> -<9DA4> <9DA4> -<9DA9> <9DA9> -<9DAB> <9DAB> -<9DAF> <9DAF> -<9DB2> <9DB2> -endbfrange - -100 beginbfrange -<9DB4> <9DB4> <92DF> -<9DB8> <9DB8> -<9DBA> <9DBA> -<9DBB> <9DBB> -<9DC1> <9DC1> -<9DC2> <9DC2> -<9DC4> <9DC4> -<9DC6> <9DC6> -<9DCF> <9DCF> -<9DD3> <9DD3> -<9DD7> <9DD7> <89A8> -<9DD9> <9DD9> -<9DE6> <9DE6> -<9DED> <9DED> -<9DEF> <9DEF> -<9DF2> <9DF2> <9868> -<9DF8> <9DF8> -<9DF9> <9DF9> <91E9> -<9DFA> <9DFA> <8DEB> -<9DFD> <9DFD> -<9E1A> <9E1B> -<9E1E> <9E1E> -<9E75> <9E75> -<9E78> <9E78> <8CB2> -<9E79> <9E79> -<9E7C> <9E7C> <8CB2> -<9E7D> <9E7D> -<9E7F> <9E7F> <8EAD> -<9E81> <9E81> -<9E88> <9E88> -<9E8B> <9E8C> -<9E91> <9E91> -<9E92> <9E92> -<9E93> <9E93> <985B> -<9E95> <9E95> -<9E97> <9E97> <97ED> -<9E9D> <9E9D> -<9E9F> <9E9F> <97D9> -<9EA5> <9EA5> -<9EA6> <9EA6> <949E> -<9EA9> <9EA9> -<9EAA> <9EAA> -<9EAD> <9EAD> -<9EB4> <9EB4> <8D8D> -<9EB5> <9EB5> <96CB> -<9EB8> <9EB8> -<9EB9> <9EB9> <8D8D> -<9EBA> <9EBA> <96CB> -<9EBB> <9EBB> <9683> -<9EBC> <9EBC> <9BF5> -<9EBE> <9EBE> <9F80> -<9EBF> <9EBF> <969B> -<9EC4> <9EC4> <89A9> -<9ECC> <9ECC> -<9ECD> <9ECD> <8B6F> -<9ECE> <9ED0> -<9ED2> <9ED2> <8D95> -<9ED4> <9ED4> -<9ED8> <9ED8> -<9ED9> <9ED9> <96D9> -<9EDB> <9EDB> <91E1> -<9EDC> <9EDC> -<9EDD> <9EDD> -<9EDE> <9EDE> -<9EE0> <9EE0> -<9EE5> <9EE5> -<9EE8> <9EE8> -<9EEF> <9EEF> -<9EF4> <9EF4> -<9EF6> <9EF7> -<9EF9> <9EF9> -<9EFB> <9EFD> -<9F07> <9F08> -<9F0E> <9F0E> <9343> -<9F13> <9F13> <8CDB> -<9F15> <9F15> -<9F20> <9F20> <916C> -<9F21> <9F21> -<9F2C> <9F2C> -<9F3B> <9F3B> <9540> -<9F3E> <9F3E> -<9F4A> <9F4A> -<9F4B> <9F4B> -<9F4E> <9F4E> -<9F4F> <9F4F> -<9F52> <9F52> -<9F54> <9F54> -<9F5F> <9F61> -<9F62> <9F62> <97EE> -<9F63> <9F63> -<9F66> <9F67> -<9F6A> <9F6A> -<9F6C> <9F6C> -<9F72> <9F72> -<9F76> <9F76> -<9F77> <9F77> -<9F8D> <9F8D> <97B4> -<9F95> <9F95> -<9F9C> <9F9C> -<9F9D> <9F9D> -endbfrange - -93 beginbfrange -<9FA0> <9FA0> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <8143> - <8141> - <8144> - <8147> - <8146> - <8148> - <8169> - <816F> - <816B> - <8149> - <8168> - <8194> - <8190> - <8193> - <8195> - <8166> - <8169> - <8196> - <817B> - <8143> - <817C> - <8144> - <815E> - <824F> - <8146> - <8183> - <8181> - <8184> - <8148> - <8197> - <8260> - <816D> - <815F> - <816E> - <814F> - <8151> - <814D> - <8281> - <816F> - <8162> - <8170> - <8160> - - <8191> - <81CA> - <8150> - <818F> -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-B5pc b/Resources/cmap/UCS2-B5pc deleted file mode 100644 index 6347275cdf0..00000000000 --- a/Resources/cmap/UCS2-B5pc +++ /dev/null @@ -1,13150 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-B5pc) -%%Title: (UCS2-B5pc) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_B5pc) def - /Supplement 0 def -end def - -/CMapName /UCS2-B5pc def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <007F> <00> -<0083> <00A0> <83> -<00A2> <00A3> -<00A5> <00A5> -<00A7> <00A7> -<00A9> <00A9> -<00AF> <00AF> -<00B0> <00B0> -<00B1> <00B1> -<00B7> <00B7> -<00D7> <00D7> -<00F7> <00F7> -<02C7> <02C7> -<02C9> <02CA> -<02CB> <02CB> -<02CD> <02CD> -<02D0> <02D0> -<02D9> <02D9> -<0391> <03A1> -<03A3> <03A9> -<03B1> <03C1> -<03C3> <03C9> -<2010> <2010> -<2013> <2013> -<2014> <2014> -<2016> <2016> -<2018> <2019> -<201C> <201D> -<2022> <2022> -<2025> <2025> -<2026> <2026> -<2027> <2027> -<2032> <2032> -<2035> <2035> -<203B> <203B> -<203E> <203E> -<2103> <2103> -<2105> <2105> -<2109> <2109> -<2122> <2122> -<2160> <2169> -<2190> <2190> -<2191> <2191> -<2192> <2192> -<2193> <2193> -<2196> <2197> -<2198> <2198> -<2199> <2199> -<220F> <220F> -<2211> <2211> -<2215> <2215> -<221A> <221A> -<221E> <221E> -<221F> <221F> -<2220> <2220> -<2223> <2223> -<2225> <2225> -<2229> <222A> -<222B> <222B> -<222E> <222E> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<223C> <223C> -<2252> <2252> -<2260> <2260> -<2261> <2261> -<2266> <2267> -<2295> <2295> -<2299> <2299> -<22A5> <22A5> -<22BF> <22BF> -<22EF> <22EF> -<2500> <2500> -<2502> <2502> -<250C> <250C> -<2510> <2510> -<2514> <2514> -<2518> <2518> -<251C> <251C> -<2524> <2524> -<252C> <252C> -<2534> <2534> -<253C> <253C> -<2550> <2550> -<255E> <255E> -<2561> <2561> -<256A> <256A> -<256D> <256D> -<256E> <256E> -<256F> <256F> -<2570> <2570> -<2571> <2573> -<2581> <2588> -<2589> <2589> -<258A> <258A> -<258B> <258B> -<258C> <258C> -<258D> <258D> -<258E> <258E> -endbfrange - -100 beginbfrange -<258F> <258F> -<2594> <2594> -<2595> <2595> -<25A0> <25A0> -<25A1> <25A1> -<25B2> <25B2> -<25B3> <25B3> -<25BC> <25BC> -<25BD> <25BD> -<25C6> <25C6> -<25C7> <25C7> -<25C9> <25C9> -<25CB> <25CB> -<25CE> <25CE> -<25CF> <25CF> -<25E2> <25E3> -<25E4> <25E4> -<25E5> <25E5> -<2605> <2605> -<2606> <2606> -<2609> <2609> -<2640> <2640> -<2641> <2641> -<2642> <2642> -<3000> <3000> -<3001> <3002> -<3003> <3003> -<3008> <3009> -<300A> <300B> -<300C> <300D> -<300E> <300F> -<3010> <3011> -<3012> <3012> -<3014> <3015> -<301C> <301C> -<301D> <301E> -<3021> <3029> -<3105> <310F> -<3110> <3129> -<32A3> <32A3> -<338E> <338F> -<339C> <339E> -<33A1> <33A1> -<33C4> <33C4> -<33CE> <33CE> -<33D1> <33D1> -<33D2> <33D2> -<33D5> <33D5> -<4E00> <4E00> -<4E01> <4E01> -<4E03> <4E03> -<4E07> <4E07> -<4E08> <4E08> -<4E09> <4E09> -<4E0A> <4E0A> -<4E0B> <4E0B> -<4E0C> <4E0C> -<4E0D> <4E0D> -<4E0E> <4E0E> -<4E0F> <4E0F> -<4E10> <4E10> -<4E11> <4E11> -<4E14> <4E14> -<4E15> <4E15> -<4E16> <4E16> -<4E18> <4E18> -<4E19> <4E19> -<4E1E> <4E1F> -<4E26> <4E26> -<4E2B> <4E2B> -<4E2D> <4E2D> -<4E2E> <4E2E> -<4E30> <4E30> -<4E31> <4E31> -<4E32> <4E32> -<4E33> <4E33> -<4E38> <4E38> -<4E39> <4E39> -<4E3B> <4E3B> -<4E3C> <4E3C> -<4E42> <4E42> -<4E43> <4E43> -<4E45> <4E45> -<4E47> <4E47> -<4E48> <4E48> -<4E4B> <4E4B> -<4E4D> <4E4D> -<4E4E> <4E4E> -<4E4F> <4E4F> -<4E52> <4E53> -<4E56> <4E56> -<4E58> <4E58> -<4E59> <4E59> -<4E5C> <4E5C> -<4E5D> <4E5D> -<4E5E> <4E5E> -<4E5F> <4E5F> -<4E69> <4E69> -<4E73> <4E73> -<4E7E> <4E7E> -endbfrange - -100 beginbfrange -<4E7F> <4E7F> -<4E82> <4E82> -<4E83> <4E84> -<4E86> <4E86> -<4E88> <4E88> -<4E8B> <4E8B> -<4E8C> <4E8C> -<4E8D> <4E8D> -<4E8E> <4E8E> -<4E91> <4E91> -<4E92> <4E92> -<4E93> <4E93> -<4E94> <4E94> -<4E95> <4E95> -<4E99> <4E99> -<4E9B> <4E9B> -<4E9E> <4E9E> -<4E9F> <4E9F> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA4> <4EA4> -<4EA5> <4EA5> -<4EA6> <4EA6> -<4EA8> <4EA8> -<4EAB> <4EAC> -<4EAD> <4EAE> -<4EB3> <4EB3> -<4EB6> <4EB6> -<4EB9> <4EB9> -<4EBA> <4EBA> -<4EC0> <4EC0> -<4EC1> <4EC1> -<4EC2> <4EC2> -<4EC3> <4EC3> -<4EC4> <4EC4> -<4EC6> <4EC7> -<4EC8> <4EC8> -<4EC9> <4EC9> -<4ECA> <4ECB> -<4ECD> <4ECD> -<4ED4> <4ED7> -<4ED8> <4ED8> -<4ED9> <4ED9> -<4EDA> <4EDA> -<4EDC> <4EDC> -<4EDD> <4EDD> -<4EDE> <4EDE> -<4EDF> <4EDF> -<4EE1> <4EE1> -<4EE3> <4EE4> -<4EE5> <4EE5> -<4EE8> <4EE8> -<4EE9> <4EE9> -<4EF0> <4EF0> -<4EF1> <4EF1> -<4EF2> <4EF2> -<4EF3> <4EF3> -<4EF4> <4EF4> -<4EF5> <4EF5> -<4EF6> <4EF6> -<4EF7> <4EF7> -<4EFB> <4EFB> -<4EFD> <4EFD> -<4EFF> <4EFF> -<4F00> <4F00> -<4F01> <4F01> -<4F02> <4F02> -<4F04> <4F04> -<4F05> <4F05> -<4F08> <4F08> -<4F09> <4F09> -<4F0A> <4F0A> -<4F0B> <4F0B> -<4F0D> <4F0D> -<4F0E> <4F0E> -<4F0F> <4F0F> -<4F10> <4F11> -<4F12> <4F12> -<4F13> <4F13> -<4F14> <4F14> -<4F15> <4F15> -<4F18> <4F18> -<4F19> <4F19> -<4F1D> <4F1D> -<4F22> <4F22> -<4F2C> <4F2C> -<4F2D> <4F2D> -<4F2F> <4F2F> -<4F30> <4F30> -<4F33> <4F33> -<4F34> <4F34> -<4F36> <4F36> -<4F38> <4F38> -<4F3A> <4F3A> -<4F3B> <4F3B> -<4F3C> <4F3C> -<4F3D> <4F3D> -<4F3E> <4F3E> -<4F3F> <4F3F> -<4F41> <4F41> -endbfrange - -100 beginbfrange -<4F43> <4F43> -<4F46> <4F46> -<4F47> <4F47> -<4F48> <4F48> -<4F49> <4F49> -<4F4C> <4F4C> -<4F4D> <4F4D> -<4F4E> <4F4E> -<4F4F> <4F4F> -<4F50> <4F51> -<4F52> <4F52> -<4F53> <4F53> -<4F54> <4F54> -<4F55> <4F55> -<4F56> <4F56> -<4F57> <4F57> -<4F58> <4F58> -<4F59> <4F59> -<4F5A> <4F5A> -<4F5B> <4F5B> -<4F5C> <4F5C> -<4F5D> <4F5D> -<4F5E> <4F5E> -<4F5F> <4F5F> -<4F60> <4F60> -<4F61> <4F61> -<4F62> <4F62> -<4F63> <4F63> -<4F64> <4F64> -<4F67> <4F67> -<4F69> <4F69> -<4F6A> <4F6A> -<4F6B> <4F6B> -<4F6C> <4F6C> -<4F6E> <4F6E> -<4F6F> <4F6F> -<4F70> <4F70> -<4F73> <4F73> -<4F74> <4F74> -<4F75> <4F75> -<4F76> <4F76> -<4F77> <4F77> -<4F78> <4F78> -<4F79> <4F79> -<4F7A> <4F7A> -<4F7B> <4F7B> -<4F7C> <4F7C> -<4F7D> <4F7D> -<4F7E> <4F7E> -<4F7F> <4F7F> -<4F80> <4F80> -<4F81> <4F81> -<4F82> <4F82> -<4F83> <4F83> -<4F84> <4F84> -<4F85> <4F85> -<4F86> <4F86> -<4F87> <4F87> -<4F88> <4F88> -<4F89> <4F89> -<4F8B> <4F8B> -<4F8D> <4F8D> -<4F8F> <4F8F> -<4F90> <4F90> -<4F91> <4F91> -<4F92> <4F92> -<4F94> <4F94> -<4F95> <4F95> -<4F96> <4F96> -<4F97> <4F97> -<4F98> <4F98> -<4F9A> <4F9A> -<4F9B> <4F9B> -<4F9C> <4F9C> -<4F9D> <4F9D> -<4F9E> <4F9E> -<4FAE> <4FAE> -<4FAF> <4FAF> -<4FB2> <4FB2> -<4FB3> <4FB3> -<4FB5> <4FB5> -<4FB6> <4FB6> -<4FB7> <4FB7> -<4FB9> <4FB9> -<4FBA> <4FBA> -<4FBB> <4FBB> -<4FBF> <4FBF> -<4FC0> <4FC0> -<4FC1> <4FC1> -<4FC2> <4FC2> -<4FC3> <4FC3> -<4FC4> <4FC4> -<4FC5> <4FC5> -<4FC7> <4FC7> -<4FC9> <4FC9> -<4FCA> <4FCA> -<4FCB> <4FCB> -<4FCD> <4FCD> -<4FCE> <4FCE> -<4FCF> <4FCF> -endbfrange - -100 beginbfrange -<4FD0> <4FD0> -<4FD1> <4FD1> -<4FD3> <4FD3> -<4FD4> <4FD4> -<4FD6> <4FD6> -<4FD7> <4FD7> -<4FD8> <4FD8> -<4FD9> <4FD9> -<4FDA> <4FDA> -<4FDB> <4FDB> -<4FDC> <4FDC> -<4FDD> <4FDD> -<4FDE> <4FDE> -<4FDF> <4FDF> -<4FE0> <4FE0> -<4FE1> <4FE1> -<4FEC> <4FEC> -<4FEE> <4FEE> -<4FEF> <4FEF> -<4FF1> <4FF1> -<4FF3> <4FF3> -<4FF4> <4FF4> -<4FF5> <4FF5> -<4FF6> <4FF7> -<4FF8> <4FF8> -<4FFA> <4FFA> -<4FFE> <4FFE> -<5000> <5000> -<5005> <5005> -<5006> <5006> -<5007> <5007> -<5009> <5009> -<500B> <500B> -<500C> <500D> -<500E> <500E> -<500F> <500F> -<5011> <5011> -<5012> <5012> -<5013> <5013> -<5014> <5014> -<5015> <5015> -<5016> <5016> -<5017> <5017> -<5018> <5018> -<5019> <5019> -<501A> <501A> -<501B> <501B> -<501C> <501C> -<501E> <501E> -<501F> <501F> -<5020> <5020> -<5021> <5021> -<5022> <5022> -<5023> <5023> -<5025> <5025> -<5026> <5026> -<5027> <5027> -<5028> <5028> -<5029> <5029> -<502A> <502A> -<502B> <502B> -<502C> <502C> -<502D> <502D> -<502F> <502F> -<5030> <5030> -<5031> <5031> -<5033> <5033> -<5035> <5035> -<5037> <5037> -<503C> <503C> -<5040> <5040> -<5041> <5041> -<5043> <5043> -<5045> <5045> -<5046> <5046> -<5047> <5047> -<5048> <5048> -<5049> <5049> -<504A> <504A> -<504B> <504B> -<504C> <504C> -<504D> <504D> -<504E> <504E> -<504F> <504F> -<5051> <5051> -<5053> <5053> -<5055> <5055> -<5057> <5057> -<505A> <505A> -<505B> <505B> -<505C> <505C> -<505D> <505D> -<505E> <505E> -<505F> <505F> -<5060> <5060> -<5061> <5061> -<5062> <5062> -<5063> <5064> -<5065> <5065> -<5068> <5068> -endbfrange - -100 beginbfrange -<5069> <5069> -<506A> <506A> -<506B> <506B> -<506D> <506D> -<506E> <506E> -<506F> <506F> -<5070> <5070> -<5072> <5072> -<5073> <5073> -<5074> <5074> -<5075> <5075> -<5076> <5076> -<5077> <5077> -<507A> <507A> -<507D> <507D> -<5080> <5080> -<5082> <5082> -<5083> <5083> -<5085> <5085> -<5087> <5087> -<508B> <508B> -<508C> <508C> -<508D> <508D> -<508E> <508E> -<5091> <5091> -<5092> <5092> -<5094> <5094> -<5095> <5095> -<5096> <5096> -<5098> <5098> -<5099> <5099> -<509A> <509A> -<509B> <509B> -<509C> <509C> -<509D> <509D> -<509E> <509E> -<50A2> <50A2> -<50A3> <50A3> -<50AC> <50AC> -<50AD> <50AD> -<50AE> <50AE> -<50AF> <50AF> -<50B0> <50B0> -<50B1> <50B1> -<50B2> <50B3> -<50B4> <50B4> -<50B5> <50B5> -<50B6> <50B6> -<50B7> <50B7> -<50B8> <50B8> -<50BA> <50BA> -<50BB> <50BB> -<50BD> <50BD> -<50BE> <50BE> -<50BF> <50BF> -<50C1> <50C1> -<50C2> <50C2> -<50C4> <50C4> -<50C5> <50C5> -<50C6> <50C6> -<50C7> <50C7> -<50C8> <50C8> -<50C9> <50C9> -<50CA> <50CA> -<50CB> <50CB> -<50CE> <50CE> -<50CF> <50CF> -<50D1> <50D1> -<50D3> <50D3> -<50D4> <50D4> -<50D5> <50D5> -<50D6> <50D6> -<50D7> <50D7> -<50DA> <50DA> -<50DB> <50DB> -<50DD> <50DD> -<50E0> <50E0> -<50E3> <50E3> -<50E4> <50E4> -<50E5> <50E5> -<50E6> <50E6> -<50E7> <50E7> -<50E8> <50E8> -<50E9> <50E9> -<50EA> <50EA> -<50EC> <50EC> -<50ED> <50ED> -<50EE> <50EE> -<50EF> <50EF> -<50F0> <50F0> -<50F1> <50F1> -<50F3> <50F3> -<50F5> <50F5> -<50F6> <50F6> -<50F8> <50F8> -<50F9> <50F9> -<50FB> <50FB> -<50FD> <50FD> -<50FE> <50FE> -<50FF> <50FF> -endbfrange - -100 beginbfrange -<5100> <5100> -<5102> <5102> -<5103> <5103> -<5104> <5104> -<5105> <5105> -<5106> <5107> -<5108> <5109> -<510A> <510A> -<510B> <510C> -<5110> <5110> -<5111> <5111> -<5112> <5112> -<5113> <5113> -<5114> <5114> -<5115> <5115> -<5117> <5117> -<5118> <5118> -<511A> <511A> -<511C> <511C> -<511F> <511F> -<5120> <5120> -<5121> <5121> -<5122> <5122> -<5124> <5124> -<5125> <5125> -<5126> <5126> -<5129> <5129> -<512A> <512A> -<512D> <512E> -<5130> <5130> -<5131> <5131> -<5132> <5132> -<5133> <5133> -<5134> <5135> -<5137> <5138> -<5139> <5139> -<513A> <513A> -<513B> <513B> -<513C> <513C> -<513D> <513D> -<513F> <513F> -<5140> <5140> -<5141> <5141> -<5143> <5143> -<5144> <5144> -<5145> <5145> -<5146> <5146> -<5147> <5147> -<5148> <5148> -<5149> <5149> -<514B> <514B> -<514C> <514C> -<514D> <514D> -<5152> <5152> -<5154> <5154> -<5155> <5155> -<5157> <5157> -<5159> <5159> -<515A> <515A> -<515B> <515B> -<515C> <515C> -<515D> <515D> -<515E> <515E> -<515F> <515F> -<5161> <5161> -<5162> <5162> -<5163> <5163> -<5165> <5165> -<5167> <5167> -<5168> <5168> -<5169> <5169> -<516B> <516B> -<516C> <516C> -<516D> <516E> -<5171> <5171> -<5175> <5175> -<5176> <5176> -<5177> <5177> -<5178> <5178> -<517C> <517C> -<5180> <5180> -<5187> <5187> -<5189> <518A> -<518D> <518D> -<518F> <518F> -<5191> <5191> -<5192> <5192> -<5193> <5193> -<5194> <5194> -<5195> <5195> -<5197> <5197> -<5198> <5198> -<519E> <519E> -<51A0> <51A0> -<51A2> <51A2> -<51A4> <51A5> -<51AA> <51AA> -<51AC> <51AC> -<51B0> <51B0> -<51B1> <51B1> -endbfrange - -100 beginbfrange -<51B6> <51B7> -<51B9> <51B9> -<51BC> <51BC> -<51BD> <51BD> -<51BE> <51BE> -<51C4> <51C5> -<51C6> <51C6> -<51C8> <51C8> -<51CA> <51CA> -<51CB> <51CB> -<51CC> <51CC> -<51CD> <51CD> -<51CE> <51CE> -<51D0> <51D0> -<51D4> <51D4> -<51D7> <51D7> -<51D8> <51D8> -<51DC> <51DC> -<51DD> <51DD> -<51DE> <51DE> -<51E0> <51E0> -<51E1> <51E1> -<51F0> <51F0> -<51F1> <51F1> -<51F3> <51F3> -<51F5> <51F5> -<51F6> <51F6> -<51F8> <51F8> -<51F9> <51FA> -<51FD> <51FD> -<5200> <5201> -<5203> <5203> -<5206> <5208> -<5209> <5209> -<520A> <520A> -<520C> <520C> -<520E> <520E> -<5210> <5210> -<5211> <5212> -<5213> <5213> -<5216> <5216> -<5217> <5217> -<521C> <521C> -<521D> <521D> -<521E> <521E> -<5221> <5221> -<5224> <5224> -<5225> <5225> -<5228> <5228> -<5229> <522A> -<522E> <522E> -<5230> <5230> -<5231> <5231> -<5232> <5233> -<5235> <5235> -<5236> <5236> -<5237> <5237> -<5238> <5238> -<523A> <523A> -<523B> <523B> -<5241> <5241> -<5243> <5243> -<5244> <5244> -<5246> <5246> -<5247> <5247> -<5249> <5249> -<524A> <524A> -<524B> <524B> -<524C> <524C> -<524D> <524D> -<524E> <524E> -<5252> <5252> -<5254> <5254> -<5255> <5255> -<5256> <5256> -<525A> <525A> -<525B> <525B> -<525C> <525C> -<525D> <525D> -<525E> <525F> -<5261> <5261> -<5262> <5262> -<5269> <5269> -<526A> <526A> -<526B> <526B> -<526C> <526C> -<526D> <526D> -<526E> <526E> -<526F> <526F> -<5272> <5272> -<5274> <5275> -<5277> <5277> -<5278> <5278> -<527A> <527A> -<527B> <527C> -<527D> <527D> -<527F> <527F> -<5280> <5281> -<5282> <5282> -<5283> <5283> -endbfrange - -100 beginbfrange -<5284> <5284> -<5287> <5289> -<528A> <528A> -<528B> <528C> -<528D> <528D> -<5291> <5291> -<5293> <5293> -<5296> <5296> -<5297> <5297> -<5298> <5298> -<5299> <5299> -<529B> <529B> -<529F> <529F> -<52A0> <52A0> -<52A3> <52A3> -<52A6> <52A6> -<52A9> <52AA> -<52AB> <52AB> -<52AC> <52AC> -<52AD> <52AE> -<52BB> <52BB> -<52BC> <52BC> -<52BE> <52BE> -<52C0> <52C0> -<52C1> <52C1> -<52C2> <52C2> -<52C3> <52C3> -<52C7> <52C7> -<52C9> <52C9> -<52CD> <52CD> -<52D2> <52D2> -<52D3> <52D3> -<52D5> <52D5> -<52D6> <52D6> -<52D7> <52D7> -<52D8> <52D8> -<52D9> <52D9> -<52DB> <52DB> -<52DD> <52DD> -<52DE> <52DE> -<52DF> <52DF> -<52E2> <52E3> -<52E4> <52E4> -<52E6> <52E6> -<52E9> <52E9> -<52EB> <52EB> -<52EF> <52EF> -<52F0> <52F0> -<52F1> <52F1> -<52F3> <52F3> -<52F4> <52F4> -<52F5> <52F5> -<52F7> <52F7> -<52F8> <52F8> -<52FA> <52FA> -<52FB> <52FB> -<52FC> <52FC> -<52FE> <52FF> -<5305> <5306> -<5308> <5308> -<5309> <5309> -<530A> <530B> -<530D> <530D> -<530E> <530E> -<530F> <530F> -<5310> <5310> -<5311> <5311> -<5312> <5312> -<5315> <5315> -<5316> <5316> -<5317> <5317> -<5319> <5319> -<531A> <531A> -<531C> <531C> -<531D> <531D> -<531F> <531F> -<5320> <5320> -<5321> <5321> -<5322> <5322> -<5323> <5323> -<532A> <532A> -<532D> <532D> -<532F> <532F> -<5330> <5330> -<5331> <5331> -<5334> <5334> -<5337> <5337> -<5339> <5339> -<533C> <533C> -<533D> <533D> -<533E> <533E> -<533F> <5340> -<5341> <5341> -<5343> <5343> -<5344> <5344> -<5345> <5345> -<5347> <5347> -<5348> <5348> -<5349> <5349> -<534A> <534A> -endbfrange - -100 beginbfrange -<534C> <534C> -<534D> <534D> -<5351> <5351> -<5352> <5352> -<5353> <5353> -<5354> <5354> -<5357> <5357> -<535A> <535A> -<535C> <535C> -<535E> <535E> -<5360> <5360> -<5361> <5361> -<5363> <5363> -<5366> <5366> -<536C> <536C> -<536E> <536E> -<536F> <536F> -<5370> <5371> -<5372> <5372> -<5373> <5373> -<5375> <5375> -<5377> <5379> -<537B> <537B> -<537C> <537C> -<537F> <537F> -<5382> <5382> -<5384> <5384> -<538A> <538A> -<538E> <538F> -<5392> <5392> -<5394> <5394> -<5396> <5396> -<5397> <5397> -<5398> <5398> -<5399> <5399> -<539A> <539A> -<539C> <539C> -<539D> <539D> -<539E> <539E> -<539F> <539F> -<53A4> <53A4> -<53A5> <53A5> -<53A7> <53A7> -<53AC> <53AC> -<53AD> <53AD> -<53B2> <53B2> -<53B4> <53B4> -<53B9> <53B9> -<53BB> <53BB> -<53C3> <53C3> -<53C8> <53C8> -<53C9> <53C9> -<53CA> <53CA> -<53CB> <53CB> -<53CD> <53CD> -<53D4> <53D4> -<53D6> <53D6> -<53D7> <53D7> -<53DB> <53DB> -<53DF> <53DF> -<53E1> <53E1> -<53E2> <53E2> -<53E3> <53E3> -<53E4> <53E4> -<53E5> <53E5> -<53E6> <53E6> -<53E8> <53E8> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53EC> -<53ED> <53ED> -<53EE> <53EE> -<53EF> <53EF> -<53F0> <53F0> -<53F1> <53F1> -<53F2> <53F2> -<53F3> <53F3> -<53F5> <53F5> -<53F8> <53F8> -<53FB> <53FB> -<53FC> <53FC> -<5401> <5401> -<5403> <5403> -<5404> <5404> -<5406> <5406> -<5407> <5407> -<5408> <5408> -<5409> <5409> -<540A> <540A> -<540B> <540B> -<540C> <540C> -<540D> <540D> -<540E> <540E> -<540F> <540F> -<5410> <5410> -<5411> <5411> -<5412> <5412> -<5418> <5418> -<5419> <5419> -endbfrange - -100 beginbfrange -<541B> <541B> -<541C> <541C> -<541D> <541D> -<541E> <541E> -<541F> <541F> -<5420> <5420> -<5424> <5424> -<5425> <5425> -<5426> <5426> -<5427> <5427> -<5428> <5428> -<5429> <5429> -<542A> <542A> -<542B> <542B> -<542C> <542C> -<542D> <542D> -<542E> <542E> -<5430> <5430> -<5431> <5431> -<5433> <5433> -<5435> <5436> -<5437> <5437> -<5438> <5438> -<5439> <5439> -<543B> <543B> -<543C> <543C> -<543D> <543D> -<543E> <543E> -<5440> <5440> -<5441> <5441> -<5442> <5442> -<5443> <5443> -<5445> <5445> -<5446> <5446> -<5447> <5447> -<5448> <5448> -<544A> <544A> -<544E> <544E> -<544F> <544F> -<5454> <5454> -<5460> <5460> -<5461> <5461> -<5462> <5462> -<5463> <5463> -<5464> <5464> -<5465> <5465> -<5466> <5466> -<5467> <5467> -<5468> <5468> -<546B> <546B> -<546C> <546C> -<546F> <546F> -<5470> <5470> -<5471> <5471> -<5472> <5472> -<5473> <5473> -<5474> <5474> -<5475> <5475> -<5476> <5476> -<5477> <5477> -<5478> <5478> -<547A> <547A> -<547B> <547B> -<547C> <547C> -<547D> <547D> -<547E> <547E> -<547F> <547F> -<5480> <5480> -<5481> <5481> -<5482> <5482> -<5484> <5484> -<5486> <5486> -<5487> <5487> -<5488> <5488> -<548B> <548B> -<548C> <548C> -<548D> <548D> -<548E> <548E> -<5490> <5490> -<5491> <5491> -<5492> <5492> -<5495> <5495> -<5496> <5496> -<5498> <5498> -<549A> <549A> -<54A0> <54A0> -<54A1> <54A1> -<54A2> <54A2> -<54A5> <54A5> -<54A6> <54A6> -<54A7> <54A7> -<54A8> <54A8> -<54A9> <54A9> -<54AA> <54AA> -<54AB> <54AB> -<54AC> <54AC> -<54AD> <54AD> -<54AE> <54AE> -<54AF> <54AF> -<54B0> <54B0> -endbfrange - -100 beginbfrange -<54B1> <54B1> -<54B3> <54B3> -<54B6> <54B6> -<54B7> <54B7> -<54B8> <54B8> -<54BA> <54BA> -<54BB> <54BB> -<54BC> <54BC> -<54BD> <54BD> -<54BE> <54BE> -<54BF> <54BF> -<54C0> <54C0> -<54C1> <54C1> -<54C2> <54C2> -<54C3> <54C3> -<54C4> <54C4> -<54C5> <54C6> -<54C7> <54C7> -<54C8> <54C8> -<54C9> <54C9> -<54CE> <54CE> -<54CF> <54CF> -<54D6> <54D6> -<54DE> <54DE> -<54E0> <54E0> -<54E1> <54E1> -<54E2> <54E2> -<54E4> <54E4> -<54E5> <54E5> -<54E6> <54E6> -<54E7> <54E7> -<54E8> <54E8> -<54E9> <54E9> -<54EA> <54EA> -<54EB> <54EB> -<54ED> <54ED> -<54EE> <54EE> -<54F1> <54F1> -<54F2> <54F2> -<54F3> <54F3> -<54F7> <54F8> -<54FA> <54FA> -<54FB> <54FB> -<54FC> <54FC> -<54FD> <54FD> -<54FF> <54FF> -<5501> <5501> -<5503> <5503> -<5504> <5504> -<5505> <5505> -<5506> <5506> -<5507> <5507> -<5508> <5508> -<5509> <5509> -<550A> <550A> -<550B> <550B> -<550C> <550C> -<550E> <550E> -<550F> <550F> -<5510> <5510> -<5511> <5511> -<5512> <5512> -<5514> <5514> -<5517> <5517> -<551A> <551A> -<5526> <5526> -<5527> <5527> -<552A> <552A> -<552C> <552C> -<552D> <552D> -<552E> <552E> -<552F> <552F> -<5530> <5530> -<5531> <5531> -<5532> <5532> -<5533> <5533> -<5534> <5534> -<5535> <5535> -<5536> <5536> -<5537> <5537> -<5538> <5538> -<5539> <5539> -<553B> <553B> -<553C> <553C> -<553E> <553E> -<5540> <5540> -<5541> <5541> -<5543> <5543> -<5544> <5544> -<5545> <5545> -<5546> <5546> -<5548> <5548> -<554A> <554A> -<554B> <554B> -<554D> <554D> -<554E> <554E> -<554F> <554F> -<5550> <5550> -<5551> <5551> -<5552> <5552> -endbfrange - -100 beginbfrange -<5555> <5555> -<5556> <5556> -<5557> <5557> -<555C> <555C> -<555E> <555E> -<555F> <555F> -<5561> <5561> -<5562> <5562> -<5563> <5563> -<5564> <5564> -<5565> <5565> -<5566> <5566> -<556A> <556A> -<5575> <5576> -<5577> <5577> -<557B> <557B> -<557C> <557C> -<557D> <557D> -<557E> <557E> -<557F> <557F> -<5580> <5580> -<5581> <5581> -<5582> <5582> -<5583> <5583> -<5584> <5584> -<5587> <5587> -<5588> <5588> -<5589> <5589> -<558A> <558A> -<558B> <558B> -<558C> <558C> -<558D> <558D> -<558E> <558E> -<558F> <558F> -<5591> <5591> -<5592> <5592> -<5593> <5593> -<5594> <5594> -<5595> <5595> -<5598> <5598> -<5599> <5599> -<559A> <559A> -<559C> <559C> -<559D> <559D> -<559F> <559F> -<55A1> <55A1> -<55A2> <55A2> -<55A3> <55A3> -<55A4> <55A4> -<55A5> <55A5> -<55A6> <55A6> -<55A7> <55A7> -<55A8> <55A8> -<55AA> <55AA> -<55AB> <55AB> -<55AC> <55AC> -<55AD> <55AD> -<55AE> <55AE> -<55B1> <55B1> -<55B2> <55B2> -<55B3> <55B3> -<55B5> <55B5> -<55BB> <55BB> -<55BF> <55BF> -<55C0> <55C0> -<55C2> <55C2> -<55C3> <55C3> -<55C4> <55C4> -<55C5> <55C6> -<55C7> <55C7> -<55C8> <55C8> -<55C9> <55C9> -<55CA> <55CA> -<55CB> <55CB> -<55CC> <55CC> -<55CD> <55CD> -<55CE> <55CE> -<55CF> <55CF> -<55D0> <55D0> -<55D1> <55D1> -<55D2> <55D2> -<55D3> <55D3> -<55D4> <55D4> -<55D5> <55D5> -<55D6> <55D6> -<55D9> <55D9> -<55DA> <55DA> -<55DB> <55DB> -<55DC> <55DC> -<55DD> <55DD> -<55DF> <55DF> -<55E1> <55E1> -<55E2> <55E2> -<55E3> <55E4> -<55E5> <55E5> -<55E6> <55E6> -<55E7> <55E7> -<55E8> <55E8> -<55E9> <55E9> -<55EF> <55EF> -endbfrange - -100 beginbfrange -<55F2> <55F2> -<55F6> <55F6> -<55F7> <55F7> -<55F9> <55F9> -<55FA> <55FA> -<55FC> <55FC> -<55FD> <55FD> -<55FE> <55FE> -<55FF> <55FF> -<5600> <5600> -<5601> <5601> -<5602> <5602> -<5604> <5604> -<5606> <5606> -<5608> <5608> -<5609> <5609> -<560C> <560C> -<560D> <560E> -<560F> <560F> -<5610> <5610> -<5612> <5612> -<5613> <5613> -<5614> <5614> -<5615> <5615> -<5616> <5616> -<5617> <5617> -<561B> <561B> -<561C> <561C> -<561D> <561D> -<561F> <561F> -<5627> <5627> -<5629> <5629> -<562A> <562A> -<562C> <562C> -<562E> <562E> -<562F> <5630> -<5632> <5632> -<5633> <5633> -<5634> <5634> -<5635> <5635> -<5636> <5636> -<5638> <5638> -<5639> <5639> -<563A> <563A> -<563B> <563B> -<563D> <563D> -<563E> <563E> -<563F> <563F> -<5640> <5640> -<5641> <5641> -<5642> <5642> -<5645> <5645> -<5646> <5646> -<5648> <5648> -<5649> <5649> -<564A> <564A> -<564C> <564C> -<564E> <564E> -<5653> <5653> -<5657> <5657> -<5658> <5658> -<5659> <5659> -<565A> <565A> -<565E> <565E> -<5660> <5660> -<5662> <5662> -<5663> <5663> -<5664> <5664> -<5665> <5665> -<5666> <5666> -<5668> <5668> -<5669> <5669> -<566A> <566A> -<566B> <566B> -<566C> <566C> -<566D> <566D> -<566E> <566E> -<566F> <566F> -<5670> <5670> -<5671> <5671> -<5672> <5672> -<5673> <5673> -<5674> <5674> -<5676> <5676> -<5677> <5677> -<5678> <5678> -<5679> <5679> -<567E> <567E> -<567F> <567F> -<5680> <5680> -<5681> <5681> -<5682> <5682> -<5683> <5683> -<5684> <5684> -<5685> <5685> -<5686> <5686> -<5687> <5687> -<568C> <568D> -<568E> <568E> -<568F> <568F> -endbfrange - -100 beginbfrange -<5690> <5690> -<5693> <5693> -<5695> <5695> -<5697> <5697> -<5698> <5698> -<5699> <5699> -<569A> <569A> -<569C> <569C> -<569D> <569D> -<56A5> <56A5> -<56A6> <56A7> -<56A8> <56A8> -<56AA> <56AA> -<56AB> <56AB> -<56AC> <56AC> -<56AD> <56AD> -<56AE> <56AE> -<56B2> <56B2> -<56B3> <56B3> -<56B4> <56B4> -<56B5> <56B5> -<56B6> <56B6> -<56B7> <56B7> -<56BC> <56BC> -<56BD> <56BE> -<56C0> <56C0> -<56C1> <56C1> -<56C2> <56C2> -<56C3> <56C3> -<56C5> <56C5> -<56C6> <56C6> -<56C8> <56C8> -<56C9> <56C9> -<56CA> <56CA> -<56CB> <56CB> -<56CC> <56CC> -<56CD> <56CD> -<56D1> <56D1> -<56D3> <56D3> -<56D4> <56D4> -<56D7> <56D7> -<56DA> <56DA> -<56DB> <56DB> -<56DD> <56DD> -<56DE> <56DE> -<56DF> <56DF> -<56E0> <56E0> -<56E1> <56E1> -<56E4> <56E4> -<56E5> <56E5> -<56E7> <56E7> -<56EA> <56EA> -<56EB> <56EB> -<56EE> <56EE> -<56F0> <56F0> -<56F7> <56F7> -<56F9> <56F9> -<56FA> <56FA> -<56FF> <56FF> -<5701> <5702> -<5703> <5704> -<5707> <5707> -<5708> <5708> -<5709> <5709> -<570A> <570A> -<570B> <570B> -<570C> <570C> -<570D> <570D> -<5712> <5713> -<5714> <5714> -<5716> <5716> -<5718> <5718> -<571A> <571A> -<571B> <571B> -<571C> <571C> -<571E> <571E> -<571F> <571F> -<5720> <5720> -<5722> <5723> -<5728> <5728> -<5729> <5729> -<572A> <572A> -<572C> <572C> -<572D> <572D> -<572E> <572E> -<572F> <572F> -<5730> <5730> -<5733> <5733> -<5734> <5734> -<573B> <573B> -<573E> <573E> -<5740> <5740> -<5741> <5741> -<5745> <5745> -<5747> <5747> -<5749> <5749> -<574A> <574A> -<574B> <574B> -<574C> <574C> -<574D> <574D> -endbfrange - -100 beginbfrange -<574E> <574E> -<574F> <574F> -<5750> <5750> -<5751> <5751> -<5752> <5752> -<5761> <5761> -<5762> <5762> -<5764> <5764> -<5766> <5766> -<5768> <5768> -<5769> <5769> -<576A> <576A> -<576B> <576B> -<576D> <576D> -<576F> <576F> -<5770> <5770> -<5771> <5771> -<5772> <5772> -<5773> <5774> -<5775> <5775> -<5776> <5776> -<5777> <5777> -<577B> <577B> -<577C> <577C> -<577D> <577D> -<5780> <5780> -<5782> <5782> -<5783> <5783> -<578B> <578B> -<578C> <578C> -<578F> <578F> -<5793> <5793> -<5794> <5794> -<5795> <5795> -<5797> <5797> -<5798> <5798> -<5799> <5799> -<579A> <579A> -<579B> <579B> -<579D> <579D> -<579E> <579F> -<57A0> <57A0> -<57A2> <57A2> -<57A3> <57A3> -<57A4> <57A4> -<57A5> <57A5> -<57AE> <57AE> -<57B5> <57B5> -<57B6> <57B6> -<57B8> <57B8> -<57B9> <57B9> -<57BA> <57BA> -<57BC> <57BC> -<57BD> <57BD> -<57BF> <57BF> -<57C1> <57C1> -<57C2> <57C2> -<57C3> <57C3> -<57C6> <57C6> -<57C7> <57C7> -<57CB> <57CB> -<57CC> <57CC> -<57CE> <57CE> -<57CF> <57CF> -<57D0> <57D0> -<57D2> <57D2> -<57D4> <57D4> -<57D5> <57D5> -<57DC> <57DC> -<57DF> <57DF> -<57E0> <57E0> -<57E1> <57E1> -<57E2> <57E2> -<57E3> <57E3> -<57E4> <57E4> -<57E5> <57E5> -<57E7> <57E7> -<57E9> <57E9> -<57EC> <57EC> -<57ED> <57ED> -<57EE> <57EE> -<57F0> <57F0> -<57F1> <57F1> -<57F2> <57F2> -<57F3> <57F3> -<57F4> <57F4> -<57F5> <57F5> -<57F6> <57F6> -<57F7> <57F7> -<57F8> <57F8> -<57F9> <57F9> -<57FA> <57FA> -<57FB> <57FB> -<57FC> <57FC> -<57FD> <57FD> -<5800> <5800> -<5801> <5801> -<5802> <5802> -<5804> <5804> -<5805> <5805> -endbfrange - -100 beginbfrange -<5806> <5806> -<5807> <5807> -<5808> <5808> -<5809> <5809> -<580A> <580A> -<580B> <580B> -<580C> <580C> -<580D> <580D> -<580E> <580E> -<5810> <5810> -<5814> <5814> -<5819> <5819> -<581B> <581B> -<581C> <581C> -<581D> <581D> -<581E> <581E> -<5820> <5820> -<5821> <5821> -<5823> <5823> -<5824> <5824> -<5825> <5825> -<5827> <5827> -<5828> <5828> -<5829> <5829> -<582A> <582A> -<582C> <582C> -<582D> <582D> -<582E> <582E> -<582F> <582F> -<5830> <5831> -<5832> <5832> -<5833> <5833> -<5834> <5834> -<5835> <5835> -<5836> <5836> -<5837> <5837> -<5838> <5838> -<5839> <5839> -<583B> <583B> -<583D> <583D> -<583F> <583F> -<5848> <5848> -<5849> <5849> -<584A> <584A> -<584B> <584B> -<584C> <584C> -<584D> <584D> -<584E> <584E> -<584F> <584F> -<5851> <5851> -<5852> <5852> -<5853> <5853> -<5854> <5854> -<5855> <5855> -<5857> <5857> -<5858> <5858> -<5859> <5859> -<585A> <585A> -<585B> <585B> -<585D> <585D> -<585E> <585E> -<5862> <5862> -<5863> <5863> -<5864> <5864> -<5865> <5865> -<5868> <5868> -<586B> <586B> -<586D> <586D> -<586F> <586F> -<5871> <5871> -<5874> <5874> -<5875> <5875> -<5876> <5876> -<5879> <5879> -<587A> <587A> -<587B> <587B> -<587C> <587C> -<587D> <587D> -<587E> <587E> -<587F> <587F> -<5880> <5880> -<5881> <5881> -<5882> <5882> -<5883> <5883> -<5885> <5885> -<5886> <5886> -<5887> <5887> -<5888> <5888> -<5889> <5889> -<588A> <588A> -<588B> <588B> -<588E> <588E> -<588F> <588F> -<5890> <5890> -<5891> <5891> -<5893> <5893> -<5894> <5894> -<5898> <5898> -<589C> <589C> -<589D> <589D> -endbfrange - -100 beginbfrange -<589E> <589E> -<589F> <589F> -<58A0> <58A0> -<58A1> <58A1> -<58A3> <58A3> -<58A5> <58A5> -<58A6> <58A6> -<58A8> <58A8> -<58A9> <58A9> -<58AB> <58AB> -<58AC> <58AC> -<58AE> <58AE> -<58AF> <58AF> -<58B1> <58B1> -<58B3> <58B3> -<58BA> <58BA> -<58BC> <58BC> -<58BD> <58BD> -<58BE> <58BE> -<58BF> <58BF> -<58C1> <58C1> -<58C2> <58C2> -<58C5> <58C5> -<58C6> <58C6> -<58C7> <58C7> -<58C8> <58C8> -<58C9> <58C9> -<58CE> <58CE> -<58CF> <58CF> -<58D1> <58D1> -<58D2> <58D2> -<58D3> <58D3> -<58D4> <58D4> -<58D5> <58D5> -<58D6> <58D6> -<58D8> <58D8> -<58D9> <58D9> -<58DA> <58DA> -<58DB> <58DB> -<58DD> <58DD> -<58DE> <58DF> -<58E2> <58E2> -<58E3> <58E3> -<58E4> <58E4> -<58E7> <58E7> -<58E8> <58E8> -<58E9> <58E9> -<58EB> <58EB> -<58EC> <58EC> -<58EF> <58EF> -<58F4> <58F4> -<58F9> <58FA> -<58FC> <58FC> -<58FD> <58FD> -<58FE> <58FE> -<58FF> <58FF> -<5903> <5903> -<5906> <5906> -<590C> <590C> -<590D> <590D> -<590E> <590E> -<590F> <590F> -<5912> <5912> -<5914> <5914> -<5915> <5915> -<5916> <5916> -<5917> <5917> -<5919> <591A> -<591C> <591C> -<5920> <5920> -<5922> <5922> -<5924> <5924> -<5925> <5925> -<5927> <5927> -<5929> <5929> -<592A> <592A> -<592B> <592B> -<592C> <592C> -<592D> <592D> -<592E> <592E> -<592F> <592F> -<5931> <5931> -<5937> <5938> -<593C> <593C> -<593E> <593E> -<5940> <5940> -<5944> <5944> -<5945> <5945> -<5947> <5948> -<5949> <5949> -<594A> <594A> -<594E> <594E> -<594F> <594F> -<5950> <5950> -<5951> <5951> -<5953> <5953> -<5954> <5954> -<5955> <5955> -<5957> <5958> -<595A> <595A> -endbfrange - -100 beginbfrange -<595C> <595C> -<5960> <5960> -<5961> <5961> -<5962> <5962> -<5967> <5967> -<5969> <5969> -<596A> <596A> -<596B> <596B> -<596D> <596D> -<596E> <596E> -<5970> <5970> -<5971> <5971> -<5972> <5972> -<5973> <5973> -<5974> <5974> -<5976> <5976> -<5977> <5977> -<5978> <5978> -<5979> <5979> -<597B> <597B> -<597C> <597C> -<597D> <597D> -<597E> <597E> -<597F> <597F> -<5980> <5980> -<5981> <5981> -<5982> <5982> -<5983> <5983> -<5984> <5984> -<5985> <5985> -<598A> <598A> -<598D> <598D> -<598E> <598E> -<598F> <598F> -<5990> <5990> -<5992> <5992> -<5993> <5993> -<5996> <5996> -<5997> <5997> -<5998> <5998> -<5999> <5999> -<599D> <599D> -<599E> <599E> -<59A0> <59A0> -<59A1> <59A1> -<59A2> <59A2> -<59A3> <59A3> -<59A4> <59A4> -<59A5> <59A5> -<59A6> <59A6> -<59A7> <59A7> -<59A8> <59A8> -<59AE> <59AE> -<59AF> <59AF> -<59B1> <59B1> -<59B2> <59B2> -<59B3> <59B3> -<59B4> <59B4> -<59B5> <59B5> -<59B6> <59B6> -<59B9> <59B9> -<59BA> <59BA> -<59BB> <59BB> -<59BC> <59BC> -<59BD> <59BD> -<59BE> <59BE> -<59C0> <59C0> -<59C1> <59C1> -<59C3> <59C3> -<59C5> <59C5> -<59C6> <59C6> -<59C7> <59C7> -<59C8> <59C8> -<59CA> <59CA> -<59CB> <59CB> -<59CC> <59CC> -<59CD> <59CD> -<59CE> <59CE> -<59CF> <59CF> -<59D0> <59D0> -<59D1> <59D1> -<59D2> <59D2> -<59D3> <59D3> -<59D4> <59D4> -<59D6> <59D6> -<59D8> <59D8> -<59DA> <59DA> -<59DB> <59DB> -<59DC> <59DC> -<59DD> <59DD> -<59DE> <59DE> -<59E0> <59E0> -<59E1> <59E1> -<59E3> <59E3> -<59E4> <59E4> -<59E5> <59E5> -<59E6> <59E6> -<59E8> <59E8> -<59E9> <59E9> -<59EA> <59EA> -endbfrange - -100 beginbfrange -<59EC> <59EC> -<59ED> <59ED> -<59EE> <59EE> -<59F1> <59F1> -<59F2> <59F2> -<59F3> <59F3> -<59F4> <59F4> -<59F5> <59F5> -<59F6> <59F6> -<59F7> <59F7> -<59FA> <59FA> -<59FB> <59FB> -<59FC> <59FC> -<59FD> <59FD> -<59FE> <59FE> -<59FF> <59FF> -<5A00> <5A00> -<5A01> <5A01> -<5A03> <5A03> -<5A09> <5A09> -<5A0A> <5A0A> -<5A0C> <5A0C> -<5A0F> <5A0F> -<5A11> <5A11> -<5A13> <5A13> -<5A15> <5A15> -<5A16> <5A16> -<5A17> <5A17> -<5A18> <5A18> -<5A19> <5A19> -<5A1B> <5A1B> -<5A1C> <5A1C> -<5A1E> <5A1E> -<5A1F> <5A1F> -<5A20> <5A20> -<5A23> <5A23> -<5A25> <5A25> -<5A29> <5A29> -<5A2D> <5A2E> -<5A33> <5A33> -<5A35> <5A35> -<5A36> <5A36> -<5A37> <5A37> -<5A38> <5A38> -<5A39> <5A39> -<5A3C> <5A3C> -<5A3E> <5A3E> -<5A40> <5A40> -<5A41> <5A41> -<5A42> <5A42> -<5A43> <5A43> -<5A44> <5A44> -<5A46> <5A46> -<5A47> <5A47> -<5A48> <5A48> -<5A49> <5A49> -<5A4A> <5A4A> -<5A4C> <5A4C> -<5A4D> <5A4D> -<5A50> <5A50> -<5A51> <5A51> -<5A52> <5A52> -<5A53> <5A53> -<5A55> <5A55> -<5A56> <5A56> -<5A57> <5A57> -<5A58> <5A58> -<5A5A> <5A5A> -<5A5B> <5A5B> -<5A5C> <5A5C> -<5A5D> <5A5D> -<5A5E> <5A5E> -<5A5F> <5A5F> -<5A60> <5A60> -<5A62> <5A62> -<5A64> <5A64> -<5A65> <5A65> -<5A66> <5A66> -<5A67> <5A67> -<5A69> <5A69> -<5A6A> <5A6A> -<5A6C> <5A6C> -<5A6D> <5A6D> -<5A70> <5A70> -<5A77> <5A77> -<5A78> <5A78> -<5A7A> <5A7A> -<5A7B> <5A7B> -<5A7C> <5A7C> -<5A7D> <5A7D> -<5A7F> <5A7F> -<5A83> <5A83> -<5A84> <5A84> -<5A8A> <5A8A> -<5A8B> <5A8B> -<5A8C> <5A8C> -<5A8E> <5A8E> -<5A8F> <5A8F> -<5A90> <5A90> -<5A92> <5A92> -endbfrange - -100 beginbfrange -<5A93> <5A93> -<5A94> <5A94> -<5A95> <5A95> -<5A97> <5A97> -<5A9A> <5A9A> -<5A9B> <5A9B> -<5A9C> <5A9C> -<5A9D> <5A9D> -<5A9E> <5A9E> -<5A9F> <5A9F> -<5AA2> <5AA2> -<5AA5> <5AA5> -<5AA6> <5AA6> -<5AA7> <5AA7> -<5AA9> <5AA9> -<5AAC> <5AAC> -<5AAE> <5AAE> -<5AAF> <5AAF> -<5AB0> <5AB0> -<5AB1> <5AB1> -<5AB2> <5AB2> -<5AB3> <5AB3> -<5AB4> <5AB4> -<5AB5> <5AB5> -<5AB6> <5AB6> -<5AB7> <5AB7> -<5AB8> <5AB8> -<5AB9> <5AB9> -<5ABA> <5ABA> -<5ABB> <5ABB> -<5ABC> <5ABC> -<5ABD> <5ABD> -<5ABE> <5ABE> -<5ABF> <5ABF> -<5AC0> <5AC0> -<5AC1> <5AC1> -<5AC2> <5AC2> -<5AC4> <5AC4> -<5AC6> <5AC6> -<5AC7> <5AC7> -<5AC8> <5AC8> -<5AC9> <5AC9> -<5ACA> <5ACA> -<5ACB> <5ACB> -<5ACC> <5ACC> -<5ACD> <5ACD> -<5AD5> <5AD5> -<5AD6> <5AD6> -<5AD7> <5AD7> -<5AD8> <5AD8> -<5AD9> <5AD9> -<5ADA> <5ADA> -<5ADB> <5ADB> -<5ADC> <5ADC> -<5ADD> <5ADD> -<5ADE> <5ADE> -<5ADF> <5ADF> -<5AE0> <5AE0> -<5AE1> <5AE1> -<5AE2> <5AE2> -<5AE3> <5AE3> -<5AE5> <5AE5> -<5AE6> <5AE6> -<5AE8> <5AE8> -<5AE9> <5AE9> -<5AEA> <5AEA> -<5AEB> <5AEB> -<5AEC> <5AEC> -<5AED> <5AED> -<5AEE> <5AEE> -<5AF3> <5AF3> -<5AF4> <5AF4> -<5AF5> <5AF5> -<5AF6> <5AF6> -<5AF7> <5AF7> -<5AF8> <5AF8> -<5AF9> <5AF9> -<5AFB> <5AFB> -<5AFD> <5AFD> -<5AFF> <5AFF> -<5B01> <5B01> -<5B02> <5B02> -<5B03> <5B03> -<5B05> <5B05> -<5B07> <5B07> -<5B08> <5B08> -<5B09> <5B09> -<5B0B> <5B0B> -<5B0C> <5B0C> -<5B0F> <5B0F> -<5B10> <5B10> -<5B13> <5B13> -<5B14> <5B14> -<5B16> <5B16> -<5B17> <5B17> -<5B19> <5B19> -<5B1A> <5B1A> -<5B1B> <5B1B> -<5B1D> <5B1D> -<5B1E> <5B1E> -endbfrange - -100 beginbfrange -<5B20> <5B20> -<5B21> <5B21> -<5B23> <5B23> -<5B24> <5B24> -<5B25> <5B25> -<5B26> <5B26> -<5B27> <5B27> -<5B28> <5B28> -<5B2A> <5B2A> -<5B2C> <5B2C> -<5B2D> <5B2D> -<5B2E> <5B2E> -<5B2F> <5B2F> -<5B30> <5B30> -<5B32> <5B32> -<5B34> <5B34> -<5B38> <5B38> -<5B3C> <5B3C> -<5B3D> <5B3F> -<5B40> <5B40> -<5B43> <5B43> -<5B45> <5B45> -<5B47> <5B47> -<5B48> <5B48> -<5B4B> <5B4C> -<5B4D> <5B4D> -<5B4E> <5B4E> -<5B50> <5B51> -<5B53> <5B53> -<5B54> <5B54> -<5B55> <5B55> -<5B56> <5B56> -<5B57> <5B58> -<5B5A> <5B5B> -<5B5C> <5B5C> -<5B5D> <5B5D> -<5B5F> <5B5F> -<5B62> <5B62> -<5B63> <5B63> -<5B64> <5B64> -<5B65> <5B65> -<5B69> <5B69> -<5B6B> <5B6B> -<5B6C> <5B6C> -<5B6E> <5B6E> -<5B70> <5B70> -<5B71> <5B71> -<5B72> <5B72> -<5B73> <5B73> -<5B75> <5B75> -<5B77> <5B77> -<5B78> <5B78> -<5B7A> <5B7A> -<5B7B> <5B7B> -<5B7D> <5B7D> -<5B7F> <5B7F> -<5B81> <5B81> -<5B83> <5B83> -<5B84> <5B84> -<5B85> <5B85> -<5B87> <5B88> -<5B89> <5B89> -<5B8B> <5B8B> -<5B8C> <5B8C> -<5B8E> <5B8E> -<5B8F> <5B8F> -<5B92> <5B92> -<5B93> <5B93> -<5B95> <5B95> -<5B97> <5B97> -<5B98> <5B98> -<5B99> <5B99> -<5B9A> <5B9A> -<5B9B> <5B9B> -<5B9C> <5B9C> -<5BA2> <5BA2> -<5BA3> <5BA3> -<5BA4> <5BA4> -<5BA5> <5BA5> -<5BA6> <5BA6> -<5BA7> <5BA7> -<5BA8> <5BA8> -<5BAC> <5BAC> -<5BAD> <5BAD> -<5BAE> <5BAE> -<5BB0> <5BB0> -<5BB3> <5BB3> -<5BB4> <5BB4> -<5BB5> <5BB5> -<5BB6> <5BB6> -<5BB8> <5BB8> -<5BB9> <5BB9> -<5BBF> <5BBF> -<5BC0> <5BC0> -<5BC1> <5BC1> -<5BC2> <5BC2> -<5BC4> <5BC4> -<5BC5> <5BC5> -<5BC6> <5BC6> -<5BC7> <5BC7> -endbfrange - -100 beginbfrange -<5BCA> <5BCA> -<5BCB> <5BCB> -<5BCC> <5BCC> -<5BCD> <5BCD> -<5BCE> <5BCE> -<5BD0> <5BD0> -<5BD1> <5BD1> -<5BD2> <5BD2> -<5BD3> <5BD3> -<5BD4> <5BD4> -<5BD6> <5BD6> -<5BD8> <5BD9> -<5BDE> <5BDE> -<5BDF> <5BDF> -<5BE0> <5BE0> -<5BE1> <5BE1> -<5BE2> <5BE2> -<5BE3> <5BE3> -<5BE4> <5BE4> -<5BE5> <5BE6> -<5BE7> <5BE7> -<5BE8> <5BE8> -<5BE9> <5BE9> -<5BEA> <5BEA> -<5BEB> <5BEB> -<5BEC> <5BEC> -<5BEE> <5BEE> -<5BEF> <5BEF> -<5BF0> <5BF0> -<5BF1> <5BF2> -<5BF5> <5BF5> -<5BF6> <5BF6> -<5BF8> <5BF8> -<5BFA> <5BFA> -<5C01> <5C01> -<5C03> <5C03> -<5C04> <5C04> -<5C07> <5C07> -<5C08> <5C08> -<5C09> <5C09> -<5C0A> <5C0B> -<5C0C> <5C0C> -<5C0D> <5C0D> -<5C0E> <5C0E> -<5C0F> <5C0F> -<5C10> <5C10> -<5C11> <5C11> -<5C12> <5C12> -<5C15> <5C15> -<5C16> <5C16> -<5C1A> <5C1A> -<5C1F> <5C1F> -<5C22> <5C22> -<5C24> <5C24> -<5C25> <5C25> -<5C28> <5C28> -<5C2A> <5C2A> -<5C2C> <5C2C> -<5C30> <5C30> -<5C31> <5C31> -<5C33> <5C33> -<5C37> <5C37> -<5C38> <5C38> -<5C39> <5C39> -<5C3A> <5C3A> -<5C3B> <5C3B> -<5C3C> <5C3C> -<5C3E> <5C3E> -<5C3F> <5C3F> -<5C40> <5C41> -<5C44> <5C44> -<5C45> <5C45> -<5C46> <5C46> -<5C47> <5C47> -<5C48> <5C48> -<5C4B> <5C4B> -<5C4C> <5C4C> -<5C4D> <5C4D> -<5C4E> <5C4F> -<5C50> <5C50> -<5C51> <5C51> -<5C54> <5C54> -<5C55> <5C55> -<5C56> <5C56> -<5C58> <5C58> -<5C59> <5C59> -<5C5C> <5C5D> -<5C60> <5C60> -<5C62> <5C62> -<5C63> <5C63> -<5C64> <5C65> -<5C67> <5C67> -<5C68> <5C68> -<5C69> <5C6A> -<5C6C> <5C6C> -<5C6D> <5C6D> -<5C6E> <5C6E> -<5C6F> <5C6F> -<5C71> <5C71> -<5C73> <5C73> -endbfrange - -100 beginbfrange -<5C74> <5C74> -<5C79> <5C79> -<5C7A> <5C7B> -<5C7C> <5C7C> -<5C7E> <5C7E> -<5C86> <5C86> -<5C88> <5C88> -<5C89> <5C89> -<5C8A> <5C8A> -<5C8B> <5C8B> -<5C8C> <5C8C> -<5C8D> <5C8D> -<5C8F> <5C8F> -<5C90> <5C91> -<5C92> <5C92> -<5C93> <5C93> -<5C94> <5C94> -<5C95> <5C95> -<5C9D> <5C9D> -<5C9F> <5C9F> -<5CA0> <5CA0> -<5CA1> <5CA1> -<5CA2> <5CA2> -<5CA3> <5CA3> -<5CA4> <5CA4> -<5CA5> <5CA5> -<5CA6> <5CA6> -<5CA7> <5CA7> -<5CA8> <5CA8> -<5CA9> <5CA9> -<5CAA> <5CAA> -<5CAB> <5CAB> -<5CAC> <5CAC> -<5CAD> <5CAD> -<5CAE> <5CAE> -<5CAF> <5CAF> -<5CB0> <5CB0> -<5CB1> <5CB1> -<5CB3> <5CB3> -<5CB5> <5CB5> -<5CB6> <5CB6> -<5CB7> <5CB7> -<5CB8> <5CB8> -<5CC6> <5CC6> -<5CC7> <5CC7> -<5CC8> <5CC8> -<5CC9> <5CC9> -<5CCA> <5CCA> -<5CCB> <5CCB> -<5CCC> <5CCC> -<5CCE> <5CCE> -<5CCF> <5CCF> -<5CD0> <5CD0> -<5CD2> <5CD2> -<5CD3> <5CD4> -<5CD6> <5CD6> -<5CD7> <5CD7> -<5CD8> <5CD8> -<5CD9> <5CD9> -<5CDA> <5CDA> -<5CDB> <5CDB> -<5CDE> <5CDE> -<5CDF> <5CDF> -<5CE8> <5CE8> -<5CEA> <5CEA> -<5CEC> <5CEC> -<5CED> <5CED> -<5CEE> <5CEE> -<5CF0> <5CF0> -<5CF1> <5CF1> -<5CF4> <5CF4> -<5CF6> <5CF6> -<5CF7> <5CF7> -<5CF8> <5CF8> -<5CF9> <5CF9> -<5CFB> <5CFB> -<5CFD> <5CFD> -<5CFF> <5CFF> -<5D00> <5D00> -<5D01> <5D01> -<5D06> <5D06> -<5D07> <5D07> -<5D0B> <5D0B> -<5D0C> <5D0C> -<5D0D> <5D0D> -<5D0E> <5D0E> -<5D0F> <5D0F> -<5D11> <5D11> -<5D12> <5D12> -<5D14> <5D14> -<5D16> <5D16> -<5D17> <5D17> -<5D19> <5D19> -<5D1A> <5D1A> -<5D1B> <5D1B> -<5D1D> <5D1D> -<5D1E> <5D1E> -<5D1F> <5D1F> -<5D20> <5D20> -<5D22> <5D22> -endbfrange - -100 beginbfrange -<5D23> <5D23> -<5D24> <5D24> -<5D25> <5D25> -<5D26> <5D26> -<5D27> <5D27> -<5D28> <5D28> -<5D29> <5D29> -<5D2E> <5D2E> -<5D30> <5D30> -<5D31> <5D31> -<5D32> <5D32> -<5D33> <5D33> -<5D34> <5D34> -<5D35> <5D35> -<5D36> <5D36> -<5D37> <5D37> -<5D38> <5D38> -<5D39> <5D39> -<5D3A> <5D3A> -<5D3C> <5D3C> -<5D3D> <5D3D> -<5D3F> <5D3F> -<5D40> <5D40> -<5D41> <5D41> -<5D42> <5D42> -<5D43> <5D43> -<5D45> <5D45> -<5D47> <5D47> -<5D49> <5D49> -<5D4A> <5D4A> -<5D4B> <5D4B> -<5D4C> <5D4C> -<5D4E> <5D4E> -<5D50> <5D50> -<5D51> <5D51> -<5D52> <5D52> -<5D55> <5D55> -<5D59> <5D59> -<5D5E> <5D5E> -<5D62> <5D62> -<5D63> <5D63> -<5D65> <5D65> -<5D67> <5D67> -<5D68> <5D68> -<5D69> <5D69> -<5D6B> <5D6B> -<5D6C> <5D6C> -<5D6F> <5D6F> -<5D71> <5D71> -<5D72> <5D72> -<5D77> <5D77> -<5D79> <5D79> -<5D7A> <5D7A> -<5D7C> <5D7C> -<5D7D> <5D7D> -<5D7E> <5D7E> -<5D7F> <5D7F> -<5D80> <5D80> -<5D81> <5D81> -<5D82> <5D82> -<5D84> <5D84> -<5D86> <5D86> -<5D87> <5D87> -<5D88> <5D88> -<5D89> <5D89> -<5D8A> <5D8A> -<5D8D> <5D8D> -<5D92> <5D92> -<5D93> <5D93> -<5D94> <5D94> -<5D95> <5D95> -<5D97> <5D97> -<5D99> <5D99> -<5D9A> <5D9A> -<5D9C> <5D9C> -<5D9D> <5D9D> -<5D9E> <5D9E> -<5D9F> <5D9F> -<5DA0> <5DA0> -<5DA1> <5DA1> -<5DA2> <5DA2> -<5DA7> <5DA7> -<5DA8> <5DA8> -<5DA9> <5DA9> -<5DAA> <5DAA> -<5DAC> <5DAC> -<5DAD> <5DAD> -<5DAE> <5DAE> -<5DAF> <5DAF> -<5DB0> <5DB0> -<5DB1> <5DB1> -<5DB2> <5DB2> -<5DB4> <5DB4> -<5DB5> <5DB5> -<5DB7> <5DB7> -<5DB8> <5DB8> -<5DBA> <5DBA> -<5DBC> <5DBC> -<5DBD> <5DBD> -<5DC0> <5DC0> -endbfrange - -100 beginbfrange -<5DC2> <5DC2> -<5DC3> <5DC3> -<5DC6> <5DC7> -<5DC9> <5DC9> -<5DCB> <5DCB> -<5DCD> <5DCD> -<5DCF> <5DCF> -<5DD1> <5DD1> -<5DD2> <5DD2> -<5DD4> <5DD4> -<5DD5> <5DD5> -<5DD6> <5DD6> -<5DD8> <5DD8> -<5DDD> <5DDD> -<5DDE> <5DDE> -<5DDF> <5DDF> -<5DE0> <5DE0> -<5DE1> <5DE1> -<5DE2> <5DE2> -<5DE5> <5DE5> -<5DE6> <5DE6> -<5DE7> <5DE7> -<5DE8> <5DE8> -<5DEB> <5DEB> -<5DEE> <5DEE> -<5DF0> <5DF0> -<5DF1> <5DF3> -<5DF4> <5DF4> -<5DF7> <5DF7> -<5DF9> <5DF9> -<5DFD> <5DFD> -<5DFE> <5DFE> -<5DFF> <5DFF> -<5E02> <5E03> -<5E04> <5E04> -<5E06> <5E06> -<5E0A> <5E0A> -<5E0C> <5E0C> -<5E0E> <5E0E> -<5E11> <5E11> -<5E14> <5E14> -<5E15> <5E15> -<5E16> <5E16> -<5E17> <5E17> -<5E18> <5E18> -<5E19> <5E19> -<5E1A> <5E1A> -<5E1B> <5E1B> -<5E1D> <5E1D> -<5E1F> <5E1F> -<5E20> <5E20> -<5E21> <5E23> -<5E24> <5E24> -<5E25> <5E25> -<5E28> <5E28> -<5E29> <5E29> -<5E2B> <5E2B> -<5E2D> <5E2D> -<5E33> <5E33> -<5E34> <5E34> -<5E36> <5E36> -<5E37> <5E37> -<5E38> <5E38> -<5E3D> <5E3D> -<5E3E> <5E3E> -<5E40> <5E40> -<5E41> <5E41> -<5E43> <5E43> -<5E44> <5E44> -<5E45> <5E45> -<5E4A> <5E4A> -<5E4B> <5E4B> -<5E4C> <5E4C> -<5E4D> <5E4D> -<5E4E> <5E4E> -<5E4F> <5E4F> -<5E53> <5E53> -<5E54> <5E54> -<5E55> <5E55> -<5E57> <5E57> -<5E58> <5E59> -<5E5B> <5E5B> -<5E5C> <5E5C> -<5E5D> <5E5D> -<5E5F> <5E5F> -<5E60> <5E60> -<5E61> <5E61> -<5E62> <5E62> -<5E63> <5E63> -<5E66> <5E66> -<5E67> <5E68> -<5E69> <5E69> -<5E6A> <5E6A> -<5E6B> <5E6B> -<5E6C> <5E6C> -<5E6D> <5E6E> -<5E6F> <5E6F> -<5E70> <5E70> -<5E72> <5E72> -<5E73> <5E73> -endbfrange - -100 beginbfrange -<5E74> <5E74> -<5E75> <5E75> -<5E76> <5E76> -<5E78> <5E78> -<5E79> <5E79> -<5E7B> <5E7B> -<5E7C> <5E7C> -<5E7D> <5E7D> -<5E7E> <5E7E> -<5E80> <5E80> -<5E82> <5E82> -<5E84> <5E84> -<5E87> <5E87> -<5E88> <5E88> -<5E89> <5E89> -<5E8A> <5E8A> -<5E8B> <5E8B> -<5E8C> <5E8C> -<5E8D> <5E8D> -<5E8F> <5E8F> -<5E95> <5E96> -<5E97> <5E97> -<5E9A> <5E9A> -<5E9B> <5E9B> -<5E9C> <5E9C> -<5EA0> <5EA0> -<5EA2> <5EA2> -<5EA3> <5EA3> -<5EA4> <5EA4> -<5EA5> <5EA5> -<5EA6> <5EA6> -<5EA7> <5EA7> -<5EA8> <5EA8> -<5EAA> <5EAA> -<5EAB> <5EAB> -<5EAC> <5EAC> -<5EAD> <5EAD> -<5EAE> <5EAE> -<5EB0> <5EB0> -<5EB1> <5EB1> -<5EB2> <5EB3> -<5EB4> <5EB4> -<5EB5> <5EB5> -<5EB6> <5EB6> -<5EB7> <5EB8> -<5EB9> <5EB9> -<5EBE> <5EBE> -<5EC1> <5EC2> -<5EC4> <5EC4> -<5EC5> <5EC5> -<5EC6> <5EC6> -<5EC7> <5EC7> -<5EC8> <5EC8> -<5EC9> <5EC9> -<5ECA> <5ECA> -<5ECB> <5ECB> -<5ECC> <5ECC> -<5ECE> <5ECE> -<5ED1> <5ED1> -<5ED2> <5ED2> -<5ED3> <5ED3> -<5ED4> <5ED4> -<5ED5> <5ED5> -<5ED6> <5ED6> -<5ED7> <5ED7> -<5ED8> <5ED8> -<5ED9> <5ED9> -<5EDA> <5EDA> -<5EDB> <5EDB> -<5EDC> <5EDC> -<5EDD> <5EDD> -<5EDE> <5EDE> -<5EDF> <5EDF> -<5EE0> <5EE0> -<5EE1> <5EE1> -<5EE2> <5EE2> -<5EE3> <5EE3> -<5EE5> <5EE5> -<5EE6> <5EE6> -<5EE7> <5EE7> -<5EE8> <5EE8> -<5EE9> <5EE9> -<5EEC> <5EEC> -<5EEE> <5EEF> -<5EF1> <5EF1> -<5EF2> <5EF2> -<5EF3> <5EF3> -<5EF6> <5EF6> -<5EF7> <5EF7> -<5EFA> <5EFA> -<5EFE> <5EFE> -<5EFF> <5EFF> -<5F01> <5F01> -<5F02> <5F02> -<5F04> <5F04> -<5F05> <5F05> -<5F07> <5F07> -<5F08> <5F08> -<5F0A> <5F0A> -<5F0B> <5F0B> -endbfrange - -100 beginbfrange -<5F0F> <5F0F> -<5F12> <5F12> -<5F13> <5F13> -<5F14> <5F15> -<5F17> <5F17> -<5F18> <5F18> -<5F1A> <5F1A> -<5F1B> <5F1B> -<5F1D> <5F1D> -<5F1F> <5F1F> -<5F22> <5F24> -<5F26> <5F27> -<5F28> <5F28> -<5F29> <5F29> -<5F2D> <5F2D> -<5F2E> <5F2E> -<5F30> <5F30> -<5F31> <5F31> -<5F33> <5F33> -<5F35> <5F35> -<5F36> <5F36> -<5F37> <5F37> -<5F38> <5F38> -<5F3C> <5F3C> -<5F40> <5F40> -<5F43> <5F43> -<5F44> <5F44> -<5F46> <5F46> -<5F48> <5F48> -<5F49> <5F49> -<5F4A> <5F4A> -<5F4B> <5F4B> -<5F4C> <5F4C> -<5F4E> <5F4E> -<5F4F> <5F4F> -<5F54> <5F54> -<5F56> <5F56> -<5F57> <5F57> -<5F58> <5F58> -<5F59> <5F59> -<5F5D> <5F5D> -<5F62> <5F62> -<5F64> <5F64> -<5F65> <5F65> -<5F67> <5F67> -<5F69> <5F69> -<5F6A> <5F6A> -<5F6B> <5F6B> -<5F6C> <5F6C> -<5F6D> <5F6D> -<5F6F> <5F6F> -<5F70> <5F70> -<5F71> <5F71> -<5F73> <5F73> -<5F74> <5F74> -<5F76> <5F76> -<5F77> <5F77> -<5F78> <5F78> -<5F79> <5F79> -<5F7C> <5F7C> -<5F7D> <5F7D> -<5F7E> <5F7E> -<5F7F> <5F7F> -<5F80> <5F81> -<5F82> <5F82> -<5F85> <5F85> -<5F86> <5F86> -<5F87> <5F87> -<5F88> <5F88> -<5F89> <5F89> -<5F8A> <5F8B> -<5F8C> <5F8C> -<5F90> <5F90> -<5F91> <5F91> -<5F92> <5F92> -<5F96> <5F96> -<5F97> <5F97> -<5F98> <5F98> -<5F99> <5F99> -<5F9B> <5F9B> -<5F9C> <5F9C> -<5F9E> <5F9E> -<5F9F> <5F9F> -<5FA0> <5FA0> -<5FA1> <5FA1> -<5FA5> <5FA5> -<5FA6> <5FA6> -<5FA8> <5FA8> -<5FA9> <5FAA> -<5FAB> <5FAB> -<5FAC> <5FAC> -<5FAD> <5FAD> -<5FAE> <5FAE> -<5FAF> <5FAF> -<5FB2> <5FB2> -<5FB5> <5FB5> -<5FB6> <5FB6> -<5FB7> <5FB7> -<5FB9> <5FB9> -<5FBB> <5FBB> -endbfrange - -100 beginbfrange -<5FBC> <5FBC> -<5FBD> <5FBD> -<5FBE> <5FBE> -<5FBF> <5FBF> -<5FC0> <5FC1> -<5FC3> <5FC3> -<5FC5> <5FC5> -<5FC9> <5FC9> -<5FCC> <5FCC> -<5FCD> <5FCD> -<5FCF> <5FCF> -<5FD0> <5FD0> -<5FD1> <5FD1> -<5FD2> <5FD2> -<5FD4> <5FD4> -<5FD5> <5FD5> -<5FD6> <5FD6> -<5FD7> <5FD7> -<5FD8> <5FD8> -<5FD9> <5FD9> -<5FDD> <5FDD> -<5FDE> <5FDE> -<5FE0> <5FE0> -<5FE1> <5FE1> -<5FE3> <5FE3> -<5FE4> <5FE4> -<5FE5> <5FE5> -<5FE8> <5FE8> -<5FEA> <5FEA> -<5FEB> <5FEB> -<5FED> <5FED> -<5FEE> <5FEE> -<5FEF> <5FEF> -<5FF1> <5FF1> -<5FF3> <5FF3> -<5FF4> <5FF4> -<5FF5> <5FF5> -<5FF7> <5FF7> -<5FF8> <5FF8> -<5FFA> <5FFA> -<5FFB> <5FFB> -<5FFD> <5FFD> -<5FFF> <5FFF> -<6000> <6000> -<6009> <6009> -<600A> <600A> -<600B> <600B> -<600C> <600C> -<600D> <600D> -<600E> <600E> -<600F> <600F> -<6010> <6010> -<6011> <6011> -<6012> <6012> -<6013> <6013> -<6014> <6014> -<6015> <6015> -<6016> <6016> -<6017> <6017> -<6019> <6019> -<601A> <601A> -<601B> <601B> -<601C> <601C> -<601D> <601D> -<601E> <601E> -<6020> <6020> -<6021> <6021> -<6022> <6022> -<6024> <6024> -<6025> <6025> -<6026> <6026> -<6027> <6027> -<6028> <6028> -<6029> <6029> -<602A> <602A> -<602B> <602B> -<602C> <602C> -<602D> <602D> -<602E> <602E> -<602F> <602F> -<6032> <6032> -<6033> <6033> -<6034> <6034> -<6035> <6035> -<6037> <6037> -<6039> <6039> -<6040> <6040> -<6041> <6041> -<6042> <6042> -<6043> <6043> -<6044> <6044> -<6045> <6045> -<6046> <6046> -<6047> <6047> -<6049> <6049> -<604C> <604C> -<604D> <604D> -<6050> <6050> -<6053> <6053> -<6054> <6054> -endbfrange - -100 beginbfrange -<6055> <6055> -<6058> <6058> -<6059> <6059> -<605A> <605A> -<605B> <605B> -<605D> <605D> -<605E> <605E> -<605F> <605F> -<6062> <6062> -<6063> <6063> -<6064> <6064> -<6065> <6065> -<6066> <6066> -<6067> <6067> -<6068> <6068> -<6069> <6069> -<606A> <606A> -<606B> <606B> -<606C> <606C> -<606D> <606D> -<606E> <606E> -<606F> <606F> -<6070> <6070> -<6072> <6072> -<607F> <607F> -<6080> <6080> -<6081> <6081> -<6083> <6083> -<6084> <6084> -<6085> <6085> -<6086> <6086> -<6087> <6087> -<6088> <6088> -<6089> <6089> -<608A> <608A> -<608C> <608C> -<608D> <608D> -<608E> <608E> -<6090> <6090> -<6092> <6092> -<6094> <6094> -<6095> <6095> -<6096> <6096> -<6097> <6097> -<609A> <609A> -<609B> <609B> -<609C> <609C> -<609D> <609D> -<609F> <609F> -<60A0> <60A0> -<60A2> <60A2> -<60A3> <60A3> -<60A8> <60A8> -<60B0> <60B0> -<60B1> <60B1> -<60B2> <60B2> -<60B4> <60B4> -<60B5> <60B5> -<60B6> <60B6> -<60B7> <60B7> -<60B8> <60B8> -<60B9> <60B9> -<60BA> <60BA> -<60BB> <60BB> -<60BC> <60BC> -<60BD> <60BD> -<60BE> <60BE> -<60BF> <60BF> -<60C0> <60C0> -<60C1> <60C1> -<60C3> <60C3> -<60C4> <60C4> -<60C5> <60C5> -<60C6> <60C6> -<60C7> <60C7> -<60C8> <60C8> -<60C9> <60C9> -<60CA> <60CA> -<60CB> <60CB> -<60CC> <60CC> -<60CD> <60CD> -<60CE> <60CE> -<60CF> <60CF> -<60D1> <60D1> -<60D3> <60D4> -<60D5> <60D5> -<60D8> <60D8> -<60D9> <60D9> -<60DA> <60DA> -<60DB> <60DB> -<60DC> <60DC> -<60DD> <60DD> -<60DF> <60DF> -<60E0> <60E0> -<60E1> <60E1> -<60E2> <60E2> -<60E4> <60E4> -<60E6> <60E6> -<60F0> <60F0> -<60F1> <60F1> -endbfrange - -100 beginbfrange -<60F2> <60F2> -<60F3> <60F3> -<60F4> <60F4> -<60F5> <60F5> -<60F6> <60F6> -<60F7> <60F7> -<60F8> <60F8> -<60F9> <60F9> -<60FA> <60FA> -<60FB> <60FB> -<60FC> <60FC> -<60FE> <60FE> -<60FF> <60FF> -<6100> <6100> -<6101> <6101> -<6103> <6103> -<6104> <6104> -<6105> <6105> -<6106> <6106> -<6108> <6108> -<6109> <6109> -<610A> <610A> -<610B> <610B> -<610D> <610D> -<610E> <610E> -<610F> <610F> -<6110> <6110> -<6112> <6112> -<6113> <6113> -<6114> <6114> -<6115> <6115> -<6116> <6116> -<6118> <6118> -<611A> <611A> -<611B> <611B> -<611C> <611C> -<611D> <611D> -<611F> <611F> -<6123> <6123> -<6127> <6127> -<6128> <6128> -<6129> <6129> -<612B> <612B> -<612C> <612C> -<612E> <612E> -<612F> <612F> -<6132> <6132> -<6134> <6134> -<6136> <6136> -<6137> <6137> -<613B> <613B> -<613E> <613E> -<613F> <613F> -<6140> <6140> -<6141> <6141> -<6144> <6144> -<6145> <6145> -<6146> <6146> -<6147> <6147> -<6148> <6148> -<6149> <614A> -<614B> <614B> -<614C> <614C> -<614D> <614D> -<614E> <614E> -<614F> <614F> -<6152> <6153> -<6154> <6154> -<6155> <6155> -<6156> <6156> -<6158> <6158> -<615A> <615A> -<615B> <615B> -<615D> <615D> -<615E> <615E> -<615F> <615F> -<6161> <6161> -<6162> <6163> -<6165> <6165> -<6166> <6166> -<6167> <6167> -<6168> <6168> -<616A> <616A> -<616B> <616B> -<616C> <616C> -<616E> <616E> -<6170> <6170> -<6171> <6171> -<6172> <6172> -<6173> <6173> -<6174> <6174> -<6175> <6175> -<6176> <6176> -<6177> <6177> -<6179> <6179> -<617A> <617A> -<617C> <617C> -<617E> <617E> -<6180> <6180> -<6182> <6182> -endbfrange - -100 beginbfrange -<6183> <6183> -<6189> <6189> -<618A> <618A> -<618B> <618B> -<618C> <618C> -<618D> <618D> -<618E> <618E> -<6190> <6190> -<6191> <6191> -<6192> <6192> -<6193> <6193> -<6194> <6194> -<6196> <6196> -<619A> <619A> -<619B> <619B> -<619D> <619D> -<619F> <619F> -<61A1> <61A1> -<61A2> <61A2> -<61A4> <61A4> -<61A7> <61A7> -<61A8> <61A8> -<61A9> <61A9> -<61AA> <61AA> -<61AB> <61AB> -<61AC> <61AC> -<61AD> <61AD> -<61AE> <61AE> -<61AF> <61AF> -<61B0> <61B0> -<61B1> <61B1> -<61B2> <61B2> -<61B3> <61B3> -<61B4> <61B4> -<61B5> <61B5> -<61B6> <61B6> -<61B8> <61B8> -<61BA> <61BA> -<61BC> <61BC> -<61BE> <61BE> -<61BF> <61BF> -<61C1> <61C1> -<61C2> <61C2> -<61C3> <61C3> -<61C5> <61C5> -<61C6> <61C6> -<61C7> <61C7> -<61C8> <61C8> -<61C9> <61C9> -<61CA> <61CA> -<61CB> <61CB> -<61CC> <61CC> -<61CD> <61CD> -<61D6> <61D6> -<61D8> <61D8> -<61DE> <61DE> -<61DF> <61DF> -<61E0> <61E0> -<61E3> <61E3> -<61E4> <61E4> -<61E5> <61E5> -<61E6> <61E6> -<61E7> <61E7> -<61E8> <61E8> -<61E9> <61E9> -<61EA> <61EA> -<61EB> <61EB> -<61ED> <61EE> -<61F0> <61F0> -<61F1> <61F1> -<61F2> <61F2> -<61F5> <61F5> -<61F6> <61F6> -<61F7> <61F7> -<61F8> <61F8> -<61F9> <61F9> -<61FA> <61FA> -<61FB> <61FB> -<61FC> <61FC> -<61FD> <61FD> -<61FE> <61FE> -<61FF> <61FF> -<6200> <6200> -<6201> <6201> -<6203> <6204> -<6207> <6207> -<6208> <6208> -<6209> <6209> -<620A> <620A> -<620C> <620D> -<620E> <620E> -<6210> <6210> -<6211> <6211> -<6212> <6212> -<6214> <6214> -<6215> <6215> -<6216> <6216> -<6219> <6219> -<621A> <621B> -<621F> <621F> -endbfrange - -100 beginbfrange -<6220> <6220> -<6221> <6222> -<6223> <6223> -<6224> <6224> -<6225> <6225> -<6227> <6227> -<6229> <6229> -<622A> <622A> -<622B> <622B> -<622D> <622D> -<622E> <622E> -<6230> <6230> -<6232> <6232> -<6233> <6233> -<6234> <6234> -<6236> <6236> -<623A> <623A> -<623D> <623D> -<623E> <623E> -<623F> <623F> -<6240> <6240> -<6241> <6241> -<6242> <6243> -<6246> <6246> -<6247> <6247> -<6248> <6248> -<6249> <6249> -<624A> <624A> -<624B> <624B> -<624D> <624D> -<624E> <624E> -<6250> <6250> -<6251> <6251> -<6252> <6252> -<6253> <6254> -<6258> <6258> -<6259> <6259> -<625A> <625A> -<625B> <625B> -<625C> <625C> -<625E> <625E> -<6260> <6260> -<6261> <6261> -<6262> <6262> -<6263> <6263> -<6264> <6264> -<6265> <6265> -<6266> <6266> -<626D> <626D> -<626E> <626E> -<626F> <626F> -<6270> <6270> -<6271> <6271> -<6272> <6272> -<6273> <6273> -<6274> <6274> -<6276> <6276> -<6277> <6277> -<6279> <6279> -<627A> <627A> -<627B> <627B> -<627C> <627C> -<627D> <627D> -<627E> <627E> -<627F> <627F> -<6280> <6280> -<6281> <6281> -<6283> <6283> -<6284> <6284> -<6286> <6286> -<6287> <6287> -<6288> <6288> -<6289> <6289> -<628A> <628A> -<628C> <628C> -<628E> <628F> -<6291> <6291> -<6292> <6292> -<6293> <6293> -<6294> <6294> -<6295> <6295> -<6296> <6296> -<6297> <6297> -<6298> <6298> -<62A8> <62A8> -<62A9> <62A9> -<62AA> <62AA> -<62AB> <62AB> -<62AC> <62AC> -<62AD> <62AD> -<62AE> <62AE> -<62AF> <62AF> -<62B0> <62B0> -<62B1> <62B1> -<62B3> <62B3> -<62B4> <62B4> -<62B5> <62B5> -<62B6> <62B6> -<62B8> <62B8> -<62B9> <62B9> -endbfrange - -100 beginbfrange -<62BB> <62BB> -<62BC> <62BC> -<62BD> <62BD> -<62BE> <62BE> -<62BF> <62BF> -<62C2> <62C2> -<62C4> <62C4> -<62C6> <62C6> -<62C7> <62C7> -<62C8> <62C8> -<62C9> <62C9> -<62CA> <62CA> -<62CB> <62CB> -<62CC> <62CC> -<62CD> <62CD> -<62CE> <62CE> -<62CF> <62CF> -<62D0> <62D0> -<62D1> <62D1> -<62D2> <62D2> -<62D3> <62D4> -<62D6> <62D7> -<62D8> <62D8> -<62D9> <62D9> -<62DA> <62DA> -<62DB> <62DB> -<62DC> <62DC> -<62EB> <62EB> -<62EC> <62EC> -<62ED> <62ED> -<62EE> <62EE> -<62EF> <62EF> -<62F0> <62F0> -<62F1> <62F1> -<62F2> <62F2> -<62F3> <62F3> -<62F4> <62F4> -<62F5> <62F5> -<62F6> <62F6> -<62F7> <62F7> -<62F8> <62F8> -<62F9> <62F9> -<62FA> <62FA> -<62FB> <62FB> -<62FC> <62FC> -<62FD> <62FD> -<62FE> <62FE> -<62FF> <62FF> -<6300> <6300> -<6301> <6301> -<6302> <6302> -<6303> <6303> -<6307> <6307> -<6308> <6308> -<6309> <6309> -<630B> <630B> -<630C> <630C> -<630D> <630D> -<630E> <630E> -<630F> <630F> -<6310> <6310> -<6311> <6311> -<6313> <6314> -<6315> <6315> -<6316> <6316> -<6328> <6328> -<6329> <6329> -<632A> <632B> -<632C> <632C> -<632D> <632D> -<632F> <632F> -<6332> <6332> -<6333> <6333> -<6334> <6334> -<6336> <6336> -<6338> <6338> -<6339> <6339> -<633A> <633A> -<633B> <633B> -<633C> <633C> -<633D> <633D> -<633E> <633E> -<6340> <6340> -<6341> <6341> -<6342> <6342> -<6343> <6343> -<6344> <6345> -<6346> <6346> -<6347> <6347> -<6348> <6348> -<6349> <6349> -<634A> <634A> -<634B> <634B> -<634C> <634C> -<634D> <634D> -<634E> <634E> -<634F> <634F> -<6350> <6350> -<6351> <6351> -<6354> <6354> -endbfrange - -100 beginbfrange -<6355> <6355> -<6356> <6356> -<6357> <6357> -<6358> <6358> -<6359> <6359> -<635A> <635A> -<6365> <6365> -<6367> <6367> -<6368> <6368> -<6369> <6369> -<636B> <636B> -<636D> <636D> -<636E> <636E> -<636F> <636F> -<6370> <6370> -<6371> <6371> -<6372> <6372> -<6375> <6375> -<6376> <6376> -<6377> <6377> -<6378> <6378> -<637A> <637A> -<637B> <637B> -<637C> <637C> -<637D> <637D> -<6380> <6380> -<6381> <6381> -<6382> <6382> -<6383> <6383> -<6384> <6384> -<6385> <6385> -<6387> <6387> -<6388> <6388> -<6389> <6389> -<638A> <638A> -<638C> <638C> -<638D> <638D> -<638E> <638E> -<638F> <638F> -<6390> <6390> -<6391> <6391> -<6392> <6392> -<6394> <6394> -<6396> <6396> -<6397> <6397> -<6398> <6398> -<6399> <6399> -<639B> <639B> -<639C> <639C> -<639D> <639D> -<639E> <639E> -<639F> <639F> -<63A0> <63A0> -<63A1> <63A1> -<63A2> <63A2> -<63A3> <63A3> -<63A4> <63A4> -<63A5> <63A5> -<63A7> <63A7> -<63A8> <63A8> -<63A9> <63A9> -<63AA> <63AA> -<63AB> <63AB> -<63AC> <63AC> -<63AD> <63AD> -<63AE> <63AE> -<63AF> <63AF> -<63B0> <63B0> -<63B1> <63B1> -<63BD> <63BD> -<63BE> <63BE> -<63C0> <63C0> -<63C2> <63C2> -<63C3> <63C3> -<63C4> <63C4> -<63C5> <63C5> -<63C6> <63C6> -<63C7> <63C7> -<63C8> <63C8> -<63C9> <63C9> -<63CA> <63CA> -<63CB> <63CB> -<63CC> <63CC> -<63CD> <63CD> -<63CE> <63CE> -<63CF> <63CF> -<63D0> <63D0> -<63D2> <63D2> -<63D3> <63D3> -<63D5> <63D5> -<63D6> <63D6> -<63D7> <63D7> -<63D8> <63D8> -<63D9> <63D9> -<63DA> <63DA> -<63DB> <63DB> -<63DC> <63DC> -<63DD> <63DD> -<63DF> <63DF> -<63E0> <63E0> -endbfrange - -100 beginbfrange -<63E1> <63E1> -<63E3> <63E3> -<63E4> <63E4> -<63E5> <63E5> -<63E7> <63E7> -<63E8> <63E8> -<63E9> <63E9> -<63EA> <63EA> -<63EB> <63EB> -<63ED> <63EE> -<63EF> <63EF> -<63F0> <63F0> -<63F1> <63F1> -<63F2> <63F2> -<63F3> <63F3> -<63F4> <63F4> -<63F5> <63F5> -<63F6> <63F6> -<63F9> <63F9> -<6406> <6406> -<6409> <6409> -<640A> <640A> -<640B> <640B> -<640C> <640C> -<640D> <640D> -<640E> <640E> -<640F> <640F> -<6410> <6410> -<6412> <6412> -<6413> <6413> -<6414> <6414> -<6415> <6415> -<6416> <6417> -<6418> <6418> -<641A> <641A> -<641B> <641B> -<641C> <641C> -<641E> <641E> -<641F> <641F> -<6420> <6420> -<6421> <6421> -<6422> <6423> -<6424> <6424> -<6425> <6425> -<6426> <6426> -<6427> <6427> -<6428> <6428> -<642A> <642A> -<642B> <642B> -<642C> <642C> -<642D> <642D> -<642E> <642E> -<642F> <642F> -<6430> <6430> -<6433> <6433> -<6434> <6434> -<6435> <6435> -<6436> <6436> -<6437> <6437> -<6439> <6439> -<643D> <643D> -<643E> <643E> -<643F> <643F> -<6440> <6440> -<6441> <6441> -<6443> <6443> -<644B> <644B> -<644D> <644D> -<644E> <644E> -<6450> <6450> -<6451> <6451> -<6452> <6452> -<6453> <6453> -<6454> <6454> -<6458> <6458> -<6459> <6459> -<645B> <645B> -<645C> <645C> -<645D> <645D> -<645E> <645E> -<645F> <645F> -<6460> <6460> -<6461> <6461> -<6465> <6465> -<6466> <6466> -<6467> <6467> -<6468> <6468> -<6469> <6469> -<646B> <646B> -<646C> <646C> -<646D> <646D> -<646E> <646E> -<646F> <646F> -<6470> <6470> -<6472> <6473> -<6474> <6474> -<6475> <6475> -<6476> <6476> -<6477> <6477> -<6478> <6478> -endbfrange - -100 beginbfrange -<6479> <6479> -<647A> <647A> -<647B> <647B> -<647D> <647D> -<647F> <647F> -<6482> <6482> -<6485> <6485> -<6487> <6487> -<6488> <6488> -<6489> <6489> -<648A> <648A> -<648B> <648B> -<648C> <648C> -<648F> <648F> -<6490> <6490> -<6492> <6492> -<6493> <6493> -<6495> <6495> -<6496> <6496> -<6497> <6497> -<6498> <6498> -<6499> <6499> -<649A> <649A> -<649C> <649C> -<649D> <649D> -<649E> <649E> -<649F> <649F> -<64A0> <64A0> -<64A2> <64A2> -<64A3> <64A3> -<64A4> <64A4> -<64A5> <64A5> -<64A6> <64A6> -<64A9> <64A9> -<64AB> <64AB> -<64AC> <64AC> -<64AD> <64AD> -<64AE> <64AE> -<64B0> <64B0> -<64B1> <64B1> -<64B2> <64B2> -<64B3> <64B3> -<64BB> <64BC> -<64BD> <64BD> -<64BE> <64BE> -<64BF> <64BF> -<64C1> <64C1> -<64C2> <64C2> -<64C3> <64C3> -<64C4> <64C4> -<64C5> <64C5> -<64C7> <64C7> -<64C9> <64C9> -<64CA> <64CA> -<64CB> <64CB> -<64CD> <64CD> -<64CE> <64CE> -<64CF> <64CF> -<64D0> <64D0> -<64D2> <64D2> -<64D4> <64D4> -<64D6> <64D6> -<64D7> <64D7> -<64D8> <64D8> -<64D9> <64D9> -<64DA> <64DA> -<64DB> <64DB> -<64E0> <64E0> -<64E2> <64E2> -<64E3> <64E3> -<64E4> <64E4> -<64E6> <64E6> -<64E8> <64E8> -<64E9> <64E9> -<64EB> <64EB> -<64EC> <64EC> -<64ED> <64ED> -<64EF> <64EF> -<64F0> <64F0> -<64F1> <64F1> -<64F2> <64F2> -<64F3> <64F3> -<64F4> <64F4> -<64F7> <64F7> -<64F8> <64F8> -<64FA> <64FB> -<64FC> <64FC> -<64FD> <64FD> -<64FE> <64FE> -<64FF> <64FF> -<6500> <6500> -<6501> <6501> -<6503> <6503> -<6504> <6504> -<6506> <6506> -<6507> <6507> -<6509> <6509> -<650C> <650C> -<650D> <650D> -<650E> <650E> -endbfrange - -100 beginbfrange -<650F> <650F> -<6510> <6510> -<6513> <6513> -<6514> <6514> -<6515> <6515> -<6516> <6516> -<6517> <6517> -<6518> <6518> -<6519> <6519> -<651B> <651B> -<651C> <651C> -<651D> <651D> -<6520> <6520> -<6521> <6521> -<6522> <6522> -<6523> <6523> -<6524> <6524> -<6525> <6525> -<6526> <6526> -<6529> <6529> -<652A> <652A> -<652B> <652B> -<652C> <652C> -<652D> <652D> -<652E> <652E> -<652F> <652F> -<6532> <6532> -<6533> <6533> -<6536> <6536> -<6537> <6537> -<6538> <6538> -<6539> <6539> -<653B> <653B> -<653D> <653D> -<653E> <653E> -<653F> <653F> -<6541> <6541> -<6543> <6543> -<6545> <6545> -<6546> <6546> -<6548> <6549> -<654A> <654A> -<654F> <654F> -<6551> <6551> -<6553> <6553> -<6554> <6554> -<6555> <6555> -<6556> <6556> -<6557> <6557> -<6558> <6558> -<6559> <6559> -<655C> <655C> -<655D> <655D> -<655E> <655E> -<6562> <6563> -<6564> <6564> -<6565> <6565> -<6566> <6566> -<6567> <6567> -<6568> <6568> -<656A> <656A> -<656C> <656C> -<656F> <656F> -<6572> <6572> -<6573> <6573> -<6574> <6574> -<6575> <6575> -<6576> <6576> -<6577> <6578> -<6579> <6579> -<657A> <657A> -<657B> <657B> -<657C> <657C> -<657F> <657F> -<6580> <6580> -<6581> <6581> -<6582> <6583> -<6584> <6584> -<6587> <6587> -<658C> <658C> -<6590> <6590> -<6591> <6591> -<6592> <6592> -<6594> <6594> -<6595> <6595> -<6596> <6596> -<6597> <6597> -<6599> <6599> -<659B> <659B> -<659C> <659C> -<659D> <659E> -<659F> <659F> -<65A0> <65A0> -<65A1> <65A1> -<65A2> <65A2> -<65A4> <65A4> -<65A5> <65A5> -<65A7> <65A7> -<65A8> <65A8> -<65AA> <65AA> -endbfrange - -100 beginbfrange -<65AB> <65AB> -<65AC> <65AC> -<65AE> <65AE> -<65AF> <65AF> -<65B0> <65B0> -<65B2> <65B3> -<65B6> <65B6> -<65B7> <65B7> -<65B8> <65B8> -<65B9> <65B9> -<65BB> <65BB> -<65BC> <65BC> -<65BD> <65BD> -<65BF> <65BF> -<65C1> <65C1> -<65C2> <65C2> -<65C3> <65C4> -<65C5> <65C5> -<65C6> <65C6> -<65CB> <65CC> -<65CD> <65CD> -<65CE> <65CE> -<65CF> <65CF> -<65D0> <65D0> -<65D2> <65D2> -<65D3> <65D3> -<65D6> <65D6> -<65D7> <65D7> -<65DA> <65DA> -<65DB> <65DB> -<65DD> <65DD> -<65DE> <65DE> -<65DF> <65DF> -<65E1> <65E1> -<65E2> <65E2> -<65E5> <65E5> -<65E6> <65E6> -<65E8> <65E8> -<65E9> <65E9> -<65EC> <65ED> -<65EE> <65EE> -<65EF> <65EF> -<65F0> <65F0> -<65F1> <65F1> -<65F2> <65F2> -<65F3> <65F3> -<65F4> <65F4> -<65F5> <65F5> -<65FA> <65FA> -<65FB> <65FB> -<65FC> <65FC> -<65FD> <65FD> -<6600> <6600> -<6602> <6602> -<6603> <6603> -<6604> <6604> -<6605> <6605> -<6606> <6606> -<6607> <6607> -<6608> <6608> -<6609> <6609> -<660A> <660A> -<660B> <660B> -<660C> <660C> -<660D> <660D> -<660E> <660E> -<660F> <660F> -<6610> <6610> -<6611> <6611> -<6612> <6612> -<6613> <6613> -<6614> <6614> -<6615> <6615> -<661C> <661C> -<661D> <661D> -<661F> <661F> -<6620> <6620> -<6621> <6621> -<6622> <6622> -<6624> <6624> -<6625> <6625> -<6626> <6626> -<6627> <6627> -<6628> <6628> -<662B> <662B> -<662D> <662D> -<662E> <662E> -<662F> <662F> -<6631> <6631> -<6632> <6632> -<6633> <6633> -<6634> <6634> -<6635> <6635> -<6636> <6636> -<6639> <6639> -<663A> <663A> -<6641> <6641> -<6642> <6642> -<6643> <6643> -<6645> <6645> -endbfrange - -100 beginbfrange -<6647> <6647> -<6649> <6649> -<664A> <664A> -<664C> <664C> -<664F> <664F> -<6651> <6651> -<6652> <6652> -<6659> <6659> -<665A> <665A> -<665B> <665B> -<665C> <665C> -<665D> <665D> -<665E> <665E> -<665F> <665F> -<6661> <6661> -<6662> <6662> -<6664> <6664> -<6665> <6665> -<6666> <6666> -<6668> <6668> -<666A> <666A> -<666C> <666C> -<666E> <666E> -<666F> <666F> -<6670> <6670> -<6671> <6671> -<6672> <6672> -<6674> <6674> -<6676> <6676> -<6677> <6677> -<6678> <6678> -<6679> <6679> -<667A> <667A> -<667B> <667B> -<667C> <667C> -<667E> <667E> -<6680> <6680> -<6684> <6684> -<6686> <6686> -<6687> <6688> -<6689> <6689> -<668A> <668A> -<668B> <668B> -<668C> <668C> -<668D> <668D> -<6690> <6690> -<6691> <6691> -<6694> <6694> -<6695> <6695> -<6696> <6696> -<6697> <6697> -<6698> <6698> -<6699> <6699> -<669D> <669D> -<669F> <669F> -<66A0> <66A0> -<66A1> <66A1> -<66A2> <66A2> -<66A8> <66A8> -<66A9> <66A9> -<66AA> <66AA> -<66AB> <66AB> -<66AE> <66AE> -<66AF> <66AF> -<66B0> <66B0> -<66B1> <66B1> -<66B2> <66B2> -<66B4> <66B4> -<66B5> <66B5> -<66B7> <66B7> -<66B8> <66B8> -<66B9> <66B9> -<66BA> <66BA> -<66BB> <66BB> -<66BD> <66BD> -<66BE> <66BE> -<66C0> <66C0> -<66C4> <66C4> -<66C6> <66C6> -<66C7> <66C7> -<66C8> <66C8> -<66C9> <66C9> -<66CA> <66CB> -<66CC> <66CC> -<66CF> <66CF> -<66D2> <66D2> -<66D6> <66D6> -<66D8> <66D8> -<66D9> <66D9> -<66DA> <66DB> -<66DC> <66DC> -<66DD> <66DD> -<66DE> <66DE> -<66E0> <66E0> -<66E3> <66E4> -<66E6> <66E6> -<66E8> <66E8> -<66E9> <66E9> -<66EB> <66EB> -<66EC> <66EC> -endbfrange - -100 beginbfrange -<66ED> <66EE> -<66F0> <66F0> -<66F2> <66F3> -<66F4> <66F4> -<66F6> <66F6> -<66F7> <66F7> -<66F8> <66F8> -<66F9> <66F9> -<66FC> <66FC> -<66FE> <66FF> -<6700> <6700> -<6701> <6701> -<6703> <6703> -<6704> <6704> -<6705> <6705> -<6708> <6708> -<6709> <6709> -<670A> <670A> -<670B> <670B> -<670D> <670D> -<670F> <6710> -<6712> <6713> -<6714> <6715> -<6717> <6717> -<6718> <6718> -<671B> <671B> -<671D> <671D> -<671F> <671F> -<6720> <6720> -<6721> <6721> -<6722> <6722> -<6723> <6723> -<6726> <6726> -<6727> <6727> -<6728> <6728> -<672A> <672B> -<672C> <672C> -<672D> <672D> -<672E> <672E> -<6731> <6731> -<6733> <6733> -<6734> <6734> -<6735> <6735> -<6738> <6738> -<6739> <6739> -<673A> <673A> -<673B> <673B> -<673C> <673C> -<673D> <673D> -<673E> <673E> -<673F> <673F> -<6745> <6745> -<6746> <6746> -<6747> <6747> -<6748> <6748> -<6749> <6749> -<674B> <674B> -<674C> <674C> -<674D> <674D> -<674E> <6751> -<6753> <6753> -<6755> <6755> -<6756> <6756> -<6757> <6757> -<6759> <6759> -<675A> <675A> -<675C> <675C> -<675D> <675D> -<675E> <675E> -<675F> <675F> -<6760> <6760> -<676A> <676A> -<676C> <676C> -<676D> <676D> -<676F> <6770> -<6771> <6771> -<6772> <6772> -<6773> <6773> -<6774> <6774> -<6775> <6775> -<6776> <6776> -<6777> <6777> -<6778> <6779> -<677A> <677A> -<677B> <677B> -<677C> <677C> -<677D> <677D> -<677E> <677E> -<677F> <677F> -<6781> <6781> -<6783> <6783> -<6784> <6784> -<6785> <6785> -<6786> <6786> -<6787> <6787> -<6789> <6789> -<678B> <678B> -<678C> <678C> -<678D> <678D> -<678E> <678E> -endbfrange - -100 beginbfrange -<6790> <6790> -<6791> <6791> -<6792> <6792> -<6793> <6793> -<6794> <6794> -<6795> <6795> -<6797> <6797> -<6798> <6798> -<6799> <6799> -<679A> <679A> -<679C> <679C> -<679D> <679D> -<679F> <679F> -<67AE> <67AE> -<67AF> <67AF> -<67B0> <67B0> -<67B2> <67B2> -<67B3> <67B3> -<67B4> <67B4> -<67B5> <67B5> -<67B6> <67B6> -<67B7> <67B7> -<67B8> <67B8> -<67B9> <67B9> -<67BA> <67BA> -<67BB> <67BB> -<67C0> <67C0> -<67C1> <67C1> -<67C2> <67C2> -<67C3> <67C3> -<67C4> <67C4> -<67C5> <67C5> -<67C6> <67C6> -<67C8> <67C8> -<67C9> <67CA> -<67CB> <67CB> -<67CC> <67CC> -<67CD> <67CD> -<67CE> <67CE> -<67CF> <67CF> -<67D0> <67D0> -<67D1> <67D1> -<67D2> <67D2> -<67D3> <67D3> -<67D4> <67D4> -<67D8> <67D8> -<67D9> <67D9> -<67DA> <67DA> -<67DB> <67DB> -<67DC> <67DC> -<67DD> <67DD> -<67DE> <67DE> -<67DF> <67DF> -<67E2> <67E2> -<67E3> <67E3> -<67E4> <67E4> -<67E5> <67E5> -<67E6> <67E6> -<67E7> <67E7> -<67E9> <67E9> -<67EA> <67EA> -<67EB> <67EB> -<67EC> <67EC> -<67ED> <67ED> -<67EE> <67EE> -<67EF> <67EF> -<67F0> <67F0> -<67F1> <67F1> -<67F2> <67F2> -<67F3> <67F3> -<67F4> <67F4> -<67F5> <67F5> -<67F6> <67F6> -<67F7> <67F7> -<67F8> <67F8> -<67FA> <67FA> -<67FC> <67FC> -<67FF> <67FF> -<6812> <6812> -<6813> <6813> -<6814> <6814> -<6816> <6816> -<6817> <6817> -<6818> <6818> -<681A> <681A> -<681C> <681C> -<681D> <681D> -<681F> <681F> -<6820> <6820> -<6821> <6821> -<6825> <6825> -<6826> <6826> -<6828> <6828> -<6829> <6829> -<682A> <682A> -<682B> <682B> -<682D> <682D> -<682E> <682E> -<682F> <682F> -<6831> <6831> -endbfrange - -100 beginbfrange -<6832> <6833> -<6834> <6834> -<6835> <6835> -<6838> <6838> -<6839> <6839> -<683A> <683A> -<683B> <683B> -<683C> <683C> -<683D> <683D> -<6840> <6840> -<6841> <6841> -<6842> <6842> -<6843> <6843> -<6844> <6844> -<6845> <6845> -<6846> <6846> -<6848> <6848> -<6849> <6849> -<684B> <684B> -<684C> <684C> -<684D> <684D> -<684E> <684E> -<684F> <684F> -<6850> <6850> -<6851> <6851> -<6853> <6853> -<6854> <6854> -<686B> <686B> -<686D> <686E> -<686F> <686F> -<6871> <6871> -<6872> <6872> -<6874> <6874> -<6875> <6875> -<6876> <6876> -<6877> <6877> -<6878> <6878> -<6879> <6879> -<687B> <687B> -<687C> <687C> -<687D> <687D> -<687E> <687E> -<687F> <687F> -<6880> <6880> -<6881> <6881> -<6882> <6882> -<6883> <6883> -<6885> <6885> -<6886> <6886> -<6887> <6887> -<6889> <6889> -<688A> <688A> -<688B> <688B> -<688C> <688C> -<688F> <688F> -<6890> <6890> -<6891> <6891> -<6892> <6892> -<6893> <6893> -<6894> <6894> -<6896> <6896> -<6897> <6897> -<689B> <689B> -<689C> <689C> -<689D> <689D> -<689F> <689F> -<68A0> <68A0> -<68A1> <68A1> -<68A2> <68A2> -<68A3> <68A3> -<68A4> <68A4> -<68A7> <68A7> -<68A8> <68A8> -<68A9> <68A9> -<68AA> <68AA> -<68AB> <68AB> -<68AC> <68AC> -<68AD> <68AD> -<68AE> <68AE> -<68AF> <68AF> -<68B0> <68B0> -<68B1> <68B1> -<68B2> <68B2> -<68B3> <68B3> -<68B4> <68B4> -<68B5> <68B5> -<68C4> <68C4> -<68C6> <68C6> -<68C7> <68C7> -<68C8> <68C8> -<68C9> <68C9> -<68CB> <68CB> -<68CC> <68CC> -<68CD> <68CD> -<68CE> <68CE> -<68D0> <68D0> -<68D1> <68D1> -<68D2> <68D2> -<68D3> <68D3> -<68D4> <68D4> -endbfrange - -100 beginbfrange -<68D5> <68D5> -<68D6> <68D6> -<68D7> <68D7> -<68D8> <68D8> -<68DA> <68DA> -<68DC> <68DC> -<68DD> <68DE> -<68DF> <68DF> -<68E0> <68E0> -<68E1> <68E1> -<68E3> <68E3> -<68E4> <68E4> -<68E6> <68E6> -<68E7> <68E7> -<68E8> <68E8> -<68E9> <68E9> -<68EA> <68EA> -<68EB> <68EB> -<68EC> <68EC> -<68EE> <68EE> -<68EF> <68EF> -<68F0> <68F0> -<68F1> <68F1> -<68F2> <68F2> -<68F3> <68F3> -<68F4> <68F4> -<68F5> <68F5> -<68F6> <68F6> -<68F7> <68F7> -<68F8> <68F8> -<68F9> <68F9> -<68FA> <68FA> -<68FB> <68FB> -<68FC> <68FC> -<68FD> <68FD> -<6904> <6904> -<6905> <6905> -<6906> <6906> -<6907> <6907> -<6908> <6908> -<690A> <690A> -<690B> <690B> -<690C> <690C> -<690D> <690D> -<690E> <690E> -<690F> <690F> -<6910> <6910> -<6911> <6911> -<6912> <6912> -<6913> <6913> -<6914> <6914> -<6915> <6915> -<6917> <6917> -<6925> <6925> -<692A> <692A> -<692F> <692F> -<6930> <6930> -<6932> <6932> -<6933> <6933> -<6934> <6934> -<6935> <6935> -<6937> <6937> -<6938> <6938> -<6939> <6939> -<693B> <693B> -<693C> <693C> -<693D> <693D> -<693F> <693F> -<6940> <6940> -<6941> <6941> -<6942> <6942> -<6944> <6944> -<6945> <6945> -<6948> <6949> -<694A> <694A> -<694B> <694B> -<694C> <694C> -<694E> <694E> -<694F> <694F> -<6951> <6951> -<6952> <6952> -<6953> <6953> -<6954> <6954> -<6956> <6956> -<6957> <6957> -<6958> <6958> -<6959> <6959> -<695A> <695A> -<695B> <695B> -<695C> <695C> -<695D> <695D> -<695E> <695E> -<695F> <695F> -<6960> <6960> -<6962> <6962> -<6963> <6963> -<6965> <6965> -<6966> <6966> -<6968> <6968> -<6969> <6969> -endbfrange - -100 beginbfrange -<696A> <696A> -<696B> <696B> -<696C> <696C> -<696D> <696D> -<696E> <696E> -<696F> <696F> -<6970> <6970> -<6971> <6971> -<6974> <6974> -<6975> <6975> -<6976> <6976> -<6977> <6977> -<6978> <6978> -<6979> <6979> -<697A> <697A> -<697B> <697B> -<6982> <6982> -<6983> <6983> -<6986> <6986> -<698D> <698D> -<698E> <698E> -<6990> <6990> -<6991> <6991> -<6993> <6993> -<6994> <6994> -<6995> <6995> -<6996> <6996> -<6997> <6997> -<6999> <6999> -<699A> <699A> -<699B> <699B> -<699C> <699C> -<699E> <699E> -<69A0> <69A0> -<69A1> <69A1> -<69A3> <69A3> -<69A4> <69A4> -<69A5> <69A5> -<69A6> <69A6> -<69A7> <69A7> -<69A8> <69A8> -<69A9> <69A9> -<69AA> <69AA> -<69AB> <69AB> -<69AC> <69AC> -<69AD> <69AD> -<69AE> <69AE> -<69AF> <69AF> -<69B0> <69B0> -<69B1> <69B1> -<69B3> <69B3> -<69B4> <69B4> -<69B5> <69B5> -<69B6> <69B6> -<69B7> <69B7> -<69B9> <69B9> -<69BB> <69BB> -<69BC> <69BC> -<69BD> <69BD> -<69BE> <69BE> -<69BF> <69BF> -<69C1> <69C1> -<69C2> <69C2> -<69C3> <69C3> -<69C4> <69C4> -<69C6> <69C6> -<69C9> <69C9> -<69CA> <69CA> -<69CB> <69CB> -<69CC> <69CC> -<69CD> <69CD> -<69CE> <69CE> -<69CF> <69CF> -<69D0> <69D0> -<69D3> <69D3> -<69D4> <69D4> -<69D9> <69D9> -<69E2> <69E2> -<69E4> <69E4> -<69E5> <69E5> -<69E6> <69E6> -<69E7> <69E7> -<69E8> <69E8> -<69EB> <69EB> -<69EC> <69EC> -<69ED> <69ED> -<69EE> <69EE> -<69F1> <69F1> -<69F2> <69F2> -<69F3> <69F3> -<69F4> <69F4> -<69F6> <69F6> -<69F7> <69F7> -<69F8> <69F8> -<69FB> <69FB> -<69FC> <69FC> -<69FD> <69FD> -<69FE> <69FE> -<69FF> <69FF> -<6A00> <6A00> -endbfrange - -100 beginbfrange -<6A01> <6A01> -<6A02> <6A02> -<6A04> <6A04> -<6A05> <6A05> -<6A06> <6A06> -<6A07> <6A07> -<6A08> <6A08> -<6A09> <6A09> -<6A0A> <6A0A> -<6A0D> <6A0D> -<6A0F> <6A0F> -<6A11> <6A11> -<6A13> <6A13> -<6A14> <6A14> -<6A15> <6A15> -<6A16> <6A16> -<6A17> <6A17> -<6A18> <6A18> -<6A19> <6A19> -<6A1B> <6A1B> -<6A1D> <6A1D> -<6A1E> <6A1E> -<6A1F> <6A1F> -<6A20> <6A20> -<6A21> <6A21> -<6A23> <6A23> -<6A25> <6A25> -<6A26> <6A26> -<6A27> <6A27> -<6A28> <6A28> -<6A32> <6A32> -<6A34> <6A34> -<6A35> <6A35> -<6A38> <6A38> -<6A39> <6A39> -<6A3A> <6A3A> -<6A3B> <6A3B> -<6A3C> <6A3C> -<6A3D> <6A3D> -<6A3E> <6A3E> -<6A3F> <6A3F> -<6A40> <6A40> -<6A41> <6A41> -<6A44> <6A44> -<6A46> <6A46> -<6A47> <6A47> -<6A48> <6A48> -<6A49> <6A49> -<6A4B> <6A4B> -<6A4D> <6A4E> -<6A4F> <6A4F> -<6A50> <6A50> -<6A51> <6A51> -<6A54> <6A54> -<6A55> <6A55> -<6A56> <6A56> -<6A58> <6A58> -<6A59> <6A59> -<6A5A> <6A5A> -<6A5B> <6A5B> -<6A5D> <6A5D> -<6A5E> <6A5E> -<6A5F> <6A5F> -<6A60> <6A60> -<6A61> <6A61> -<6A62> <6A62> -<6A64> <6A64> -<6A66> <6A66> -<6A67> <6A67> -<6A68> <6A68> -<6A69> <6A69> -<6A6A> <6A6A> -<6A6B> <6A6B> -<6A6D> <6A6D> -<6A6F> <6A6F> -<6A76> <6A76> -<6A7E> <6A7E> -<6A7F> <6A7F> -<6A80> <6A80> -<6A81> <6A81> -<6A83> <6A83> -<6A84> <6A84> -<6A85> <6A85> -<6A87> <6A87> -<6A89> <6A89> -<6A8C> <6A8C> -<6A8D> <6A8D> -<6A8E> <6A8E> -<6A90> <6A90> -<6A91> <6A91> -<6A92> <6A92> -<6A93> <6A93> -<6A94> <6A94> -<6A95> <6A95> -<6A96> <6A96> -<6A97> <6A97> -<6A9A> <6A9A> -<6A9B> <6A9B> -<6A9C> <6A9C> -<6A9E> <6A9E> -endbfrange - -100 beginbfrange -<6A9F> <6A9F> -<6AA0> <6AA0> -<6AA1> <6AA1> -<6AA2> <6AA2> -<6AA3> <6AA3> -<6AA4> <6AA4> -<6AA5> <6AA5> -<6AA6> <6AA6> -<6AA8> <6AA8> -<6AAC> <6AAC> -<6AAD> <6AAD> -<6AAE> <6AAF> -<6AB3> <6AB3> -<6AB4> <6AB4> -<6AB6> <6AB7> -<6AB8> <6AB8> -<6AB9> <6AB9> -<6ABA> <6ABA> -<6ABB> <6ABB> -<6ABD> <6ABD> -<6AC2> <6AC2> -<6AC3> <6AC3> -<6AC5> <6AC5> -<6AC6> <6AC6> -<6AC7> <6AC7> -<6ACB> <6ACB> -<6ACC> <6ACC> -<6ACD> <6ACD> -<6ACF> <6ACF> -<6AD0> <6AD0> -<6AD1> <6AD1> -<6AD3> <6AD3> -<6AD9> <6AD9> -<6ADA> <6ADA> -<6ADB> <6ADB> -<6ADC> <6ADC> -<6ADD> <6ADD> -<6ADE> <6ADE> -<6ADF> <6ADF> -<6AE0> <6AE0> -<6AE1> <6AE1> -<6AE5> <6AE5> -<6AE7> <6AE7> -<6AE8> <6AE8> -<6AEA> <6AEA> -<6AEB> <6AEB> -<6AEC> <6AEC> -<6AEE> <6AEF> -<6AF0> <6AF0> -<6AF1> <6AF1> -<6AF3> <6AF3> -<6AF8> <6AF8> -<6AF9> <6AF9> -<6AFA> <6AFA> -<6AFB> <6AFB> -<6AFC> <6AFC> -<6B00> <6B00> -<6B02> <6B02> -<6B03> <6B03> -<6B04> <6B04> -<6B08> <6B09> -<6B0A> <6B0A> -<6B0B> <6B0B> -<6B0F> <6B0F> -<6B10> <6B10> -<6B11> <6B12> -<6B13> <6B13> -<6B16> <6B16> -<6B17> <6B17> -<6B18> <6B19> -<6B1A> <6B1A> -<6B1E> <6B1E> -<6B20> <6B20> -<6B21> <6B21> -<6B23> <6B23> -<6B25> <6B25> -<6B28> <6B28> -<6B2C> <6B2C> -<6B2D> <6B2D> -<6B2F> <6B2F> -<6B31> <6B31> -<6B32> <6B32> -<6B33> <6B33> -<6B34> <6B34> -<6B36> <6B36> -<6B37> <6B38> -<6B39> <6B39> -<6B3A> <6B3A> -<6B3B> <6B3B> -<6B3C> <6B3C> -<6B3D> <6B3D> -<6B3E> <6B3E> -<6B3F> <6B3F> -<6B41> <6B41> -<6B42> <6B42> -<6B43> <6B43> -<6B45> <6B45> -<6B46> <6B46> -<6B47> <6B47> -<6B48> <6B48> -endbfrange - -100 beginbfrange -<6B49> <6B49> -<6B4A> <6B4A> -<6B4B> <6B4B> -<6B4C> <6B4C> -<6B4D> <6B4D> -<6B4E> <6B4E> -<6B50> <6B50> -<6B51> <6B51> -<6B54> <6B54> -<6B55> <6B55> -<6B56> <6B56> -<6B59> <6B59> -<6B5B> <6B5B> -<6B5C> <6B5C> -<6B5E> <6B5E> -<6B5F> <6B5F> -<6B60> <6B60> -<6B61> <6B61> -<6B62> <6B62> -<6B63> <6B63> -<6B64> <6B64> -<6B65> <6B65> -<6B66> <6B67> -<6B6A> <6B6A> -<6B6D> <6B6D> -<6B72> <6B72> -<6B76> <6B76> -<6B77> <6B77> -<6B78> <6B78> -<6B79> <6B79> -<6B7B> <6B7B> -<6B7E> <6B7E> -<6B7F> <6B7F> -<6B80> <6B80> -<6B82> <6B82> -<6B83> <6B83> -<6B84> <6B84> -<6B86> <6B86> -<6B88> <6B88> -<6B89> <6B89> -<6B8A> <6B8A> -<6B8C> <6B8C> -<6B8D> <6B8E> -<6B8F> <6B8F> -<6B91> <6B91> -<6B94> <6B94> -<6B95> <6B95> -<6B96> <6B96> -<6B97> <6B97> -<6B98> <6B98> -<6B99> <6B99> -<6B9B> <6B9B> -<6B9E> <6BA0> -<6BA2> <6BA2> -<6BA3> <6BA3> -<6BA4> <6BA4> -<6BA5> <6BA5> -<6BA6> <6BA6> -<6BA7> <6BA7> -<6BAA> <6BAB> -<6BAD> <6BAD> -<6BAE> <6BAE> -<6BAF> <6BAF> -<6BB0> <6BB0> -<6BB2> <6BB2> -<6BB3> <6BB3> -<6BB5> <6BB5> -<6BB6> <6BB6> -<6BB7> <6BB7> -<6BBA> <6BBA> -<6BBC> <6BBC> -<6BBD> <6BBD> -<6BBF> <6BBF> -<6BC0> <6BC0> -<6BC3> <6BC4> -<6BC5> <6BC6> -<6BC7> <6BC7> -<6BC8> <6BC8> -<6BC9> <6BC9> -<6BCA> <6BCA> -<6BCB> <6BCB> -<6BCC> <6BCC> -<6BCD> <6BCD> -<6BCF> <6BCF> -<6BD0> <6BD0> -<6BD2> <6BD2> -<6BD3> <6BD3> -<6BD4> <6BD4> -<6BD6> <6BD6> -<6BD7> <6BD7> -<6BD8> <6BD8> -<6BDA> <6BDA> -<6BDB> <6BDB> -<6BDE> <6BDE> -<6BE0> <6BE0> -<6BE2> <6BE2> -<6BE3> <6BE3> -<6BE4> <6BE4> -<6BE6> <6BE6> -<6BE7> <6BE7> -endbfrange - -100 beginbfrange -<6BE8> <6BE8> -<6BEB> <6BEC> -<6BEF> <6BEF> -<6BF0> <6BF0> -<6BF2> <6BF3> -<6BF7> <6BF8> -<6BF9> <6BF9> -<6BFB> <6BFC> -<6BFD> <6BFD> -<6BFE> <6BFE> -<6BFF> <6BFF> -<6C00> <6C00> -<6C01> <6C01> -<6C02> <6C02> -<6C03> <6C03> -<6C04> <6C04> -<6C05> <6C05> -<6C06> <6C06> -<6C08> <6C08> -<6C09> <6C09> -<6C0B> <6C0B> -<6C0C> <6C0C> -<6C0D> <6C0D> -<6C0F> <6C0F> -<6C10> <6C10> -<6C11> <6C11> -<6C13> <6C13> -<6C14> <6C14> -<6C15> <6C15> -<6C16> <6C16> -<6C18> <6C18> -<6C19> <6C1A> -<6C1B> <6C1B> -<6C1D> <6C1D> -<6C1F> <6C1F> -<6C20> <6C21> -<6C23> <6C23> -<6C24> <6C24> -<6C25> <6C25> -<6C26> <6C26> -<6C27> <6C28> -<6C2A> <6C2A> -<6C2B> <6C2B> -<6C2C> <6C2C> -<6C2E> <6C2F> -<6C30> <6C30> -<6C33> <6C33> -<6C34> <6C34> -<6C36> <6C36> -<6C38> <6C38> -<6C3B> <6C3B> -<6C3E> <6C3E> -<6C3F> <6C3F> -<6C40> <6C40> -<6C41> <6C41> -<6C42> <6C42> -<6C43> <6C43> -<6C46> <6C46> -<6C4A> <6C4A> -<6C4B> <6C4B> -<6C4C> <6C4C> -<6C4D> <6C4E> -<6C4F> <6C4F> -<6C50> <6C50> -<6C52> <6C52> -<6C54> <6C54> -<6C55> <6C55> -<6C57> <6C57> -<6C59> <6C59> -<6C5B> <6C5B> -<6C5C> <6C5C> -<6C5D> <6C5D> -<6C5E> <6C5E> -<6C5F> <6C60> -<6C61> <6C61> -<6C65> <6C65> -<6C66> <6C66> -<6C67> <6C67> -<6C68> <6C68> -<6C69> <6C69> -<6C6A> <6C6A> -<6C6B> <6C6B> -<6C6D> <6C6D> -<6C6F> <6C6F> -<6C70> <6C70> -<6C71> <6C71> -<6C72> <6C72> -<6C73> <6C73> -<6C74> <6C74> -<6C76> <6C76> -<6C78> <6C78> -<6C7A> <6C7A> -<6C7B> <6C7B> -<6C7D> <6C7D> -<6C7E> <6C7E> -<6C80> <6C80> -<6C81> <6C81> -<6C82> <6C82> -<6C83> <6C83> -<6C84> <6C84> -endbfrange - -100 beginbfrange -<6C85> <6C85> -<6C86> <6C86> -<6C87> <6C87> -<6C88> <6C89> -<6C8A> <6C8A> -<6C8B> <6C8B> -<6C8C> <6C8C> -<6C8D> <6C8D> -<6C8E> <6C8E> -<6C8F> <6C8F> -<6C90> <6C90> -<6C92> <6C92> -<6C93> <6C93> -<6C94> <6C94> -<6C95> <6C95> -<6C96> <6C96> -<6C98> <6C98> -<6C99> <6C99> -<6C9A> <6C9A> -<6C9B> <6C9B> -<6C9C> <6C9C> -<6C9D> <6C9D> -<6CAB> <6CAB> -<6CAC> <6CAC> -<6CAD> <6CAD> -<6CAE> <6CAE> -<6CB0> <6CB0> -<6CB1> <6CB1> -<6CB3> <6CB3> -<6CB4> <6CB4> -<6CB6> <6CB6> -<6CB7> <6CB7> -<6CB8> <6CB8> -<6CB9> <6CB9> -<6CBA> <6CBA> -<6CBB> <6CBB> -<6CBC> <6CBC> -<6CBD> <6CBE> -<6CBF> <6CBF> -<6CC0> <6CC0> -<6CC1> <6CC1> -<6CC2> <6CC2> -<6CC3> <6CC3> -<6CC4> <6CC4> -<6CC5> <6CC5> -<6CC6> <6CC6> -<6CC7> <6CC7> -<6CC9> <6CC9> -<6CCA> <6CCA> -<6CCC> <6CCC> -<6CCD> <6CCD> -<6CCF> <6CCF> -<6CD0> <6CD0> -<6CD1> <6CD1> -<6CD2> <6CD2> -<6CD3> <6CD3> -<6CD4> <6CD4> -<6CD5> <6CD5> -<6CD6> <6CD6> -<6CD7> <6CD7> -<6CD9> <6CD9> -<6CDA> <6CDA> -<6CDB> <6CDB> -<6CDC> <6CDC> -<6CDD> <6CDD> -<6CDE> <6CDE> -<6CE0> <6CE0> -<6CE1> <6CE1> -<6CE2> <6CE2> -<6CE3> <6CE3> -<6CE5> <6CE5> -<6CE7> <6CE7> -<6CE8> <6CE8> -<6CE9> <6CE9> -<6CEB> <6CEB> -<6CEC> <6CEC> -<6CED> <6CED> -<6CEE> <6CEE> -<6CEF> <6CEF> -<6CF0> <6CF0> -<6CF1> <6CF1> -<6CF2> <6CF2> -<6CF3> <6CF3> -<6CF5> <6CF5> -<6CF9> <6CF9> -<6D00> <6D00> -<6D01> <6D01> -<6D03> <6D03> -<6D04> <6D04> -<6D07> <6D07> -<6D08> <6D08> -<6D09> <6D09> -<6D0A> <6D0A> -<6D0B> <6D0B> -<6D0C> <6D0C> -<6D0D> <6D0D> -<6D0E> <6D0E> -<6D0F> <6D0F> -<6D10> <6D10> -<6D11> <6D11> -endbfrange - -100 beginbfrange -<6D12> <6D12> -<6D16> <6D16> -<6D17> <6D17> -<6D18> <6D18> -<6D19> <6D19> -<6D1A> <6D1A> -<6D1B> <6D1B> -<6D1D> <6D1D> -<6D1E> <6D1E> -<6D1F> <6D1F> -<6D20> <6D20> -<6D22> <6D22> -<6D25> <6D25> -<6D27> <6D27> -<6D28> <6D28> -<6D29> <6D29> -<6D2A> <6D2A> -<6D2B> <6D2B> -<6D2C> <6D2C> -<6D2D> <6D2D> -<6D2E> <6D2E> -<6D2F> <6D2F> -<6D30> <6D30> -<6D31> <6D31> -<6D32> <6D32> -<6D33> <6D33> -<6D34> <6D34> -<6D35> <6D35> -<6D36> <6D36> -<6D37> <6D37> -<6D38> <6D38> -<6D39> <6D39> -<6D3A> <6D3A> -<6D3B> <6D3B> -<6D3C> <6D3C> -<6D3D> <6D3E> -<6D3F> <6D3F> -<6D40> <6D40> -<6D41> <6D41> -<6D42> <6D42> -<6D58> <6D58> -<6D59> <6D59> -<6D5A> <6D5A> -<6D5E> <6D5E> -<6D5F> <6D5F> -<6D60> <6D60> -<6D61> <6D61> -<6D62> <6D62> -<6D63> <6D64> -<6D65> <6D65> -<6D66> <6D66> -<6D67> <6D67> -<6D68> <6D68> -<6D69> <6D69> -<6D6A> <6D6A> -<6D6C> <6D6C> -<6D6D> <6D6D> -<6D6E> <6D6E> -<6D6F> <6D6F> -<6D70> <6D70> -<6D74> <6D74> -<6D75> <6D75> -<6D76> <6D76> -<6D77> <6D77> -<6D78> <6D78> -<6D79> <6D79> -<6D7A> <6D7A> -<6D7B> <6D7B> -<6D7C> <6D7C> -<6D7D> <6D7D> -<6D7E> <6D7E> -<6D7F> <6D7F> -<6D80> <6D80> -<6D82> <6D82> -<6D83> <6D83> -<6D84> <6D84> -<6D85> <6D85> -<6D86> <6D86> -<6D87> <6D87> -<6D88> <6D88> -<6D89> <6D89> -<6D8A> <6D8A> -<6D8B> <6D8B> -<6D8C> <6D8C> -<6D8D> <6D8D> -<6D8E> <6D8E> -<6D90> <6D90> -<6D91> <6D91> -<6D92> <6D92> -<6D93> <6D93> -<6D94> <6D94> -<6D95> <6D95> -<6D97> <6D97> -<6D98> <6D98> -<6DAA> <6DAA> -<6DAB> <6DAB> -<6DAC> <6DAC> -<6DAE> <6DAE> -<6DAF> <6DAF> -<6DB2> <6DB2> -endbfrange - -100 beginbfrange -<6DB3> <6DB3> -<6DB4> <6DB4> -<6DB5> <6DB5> -<6DB7> <6DB7> -<6DB8> <6DB8> -<6DBA> <6DBA> -<6DBB> <6DBB> -<6DBC> <6DBC> -<6DBD> <6DBD> -<6DBE> <6DBE> -<6DBF> <6DBF> -<6DC0> <6DC0> -<6DC2> <6DC2> -<6DC4> <6DC4> -<6DC5> <6DC5> -<6DC6> <6DC6> -<6DC7> <6DC7> -<6DC8> <6DC8> -<6DC9> <6DC9> -<6DCA> <6DCA> -<6DCB> <6DCB> -<6DCC> <6DCC> -<6DCD> <6DCD> -<6DCF> <6DCF> -<6DD0> <6DD0> -<6DD1> <6DD1> -<6DD2> <6DD2> -<6DD3> <6DD3> -<6DD4> <6DD4> -<6DD5> <6DD5> -<6DD6> <6DD6> -<6DD7> <6DD7> -<6DD8> <6DD8> -<6DD9> <6DD9> -<6DDA> <6DDA> -<6DDB> <6DDB> -<6DDC> <6DDD> -<6DDE> <6DDE> -<6DDF> <6DDF> -<6DE0> <6DE0> -<6DE1> <6DE1> -<6DE2> <6DE2> -<6DE3> <6DE3> -<6DE4> <6DE4> -<6DE5> <6DE5> -<6DE6> <6DE6> -<6DE8> <6DE8> -<6DE9> <6DE9> -<6DEA> <6DEA> -<6DEB> <6DEB> -<6DEC> <6DEC> -<6DED> <6DED> -<6DEE> <6DEE> -<6DEF> <6DEF> -<6DF0> <6DF0> -<6DF1> <6DF1> -<6DF2> <6DF2> -<6DF3> <6DF3> -<6DF4> <6DF4> -<6DF5> <6DF5> -<6DF6> <6DF6> -<6DF7> <6DF7> -<6DF9> <6DF9> -<6DFA> <6DFA> -<6DFB> <6DFB> -<6DFC> <6DFC> -<6DFD> <6DFD> -<6E00> <6E00> -<6E03> <6E03> -<6E05> <6E05> -<6E19> <6E19> -<6E1A> <6E1A> -<6E1B> <6E1B> -<6E1C> <6E1C> -<6E1D> <6E1D> -<6E1F> <6E1F> -<6E20> <6E20> -<6E21> <6E21> -<6E22> <6E22> -<6E23> <6E23> -<6E24> <6E24> -<6E25> <6E25> -<6E26> <6E26> -<6E27> <6E27> -<6E28> <6E28> -<6E2B> <6E2B> -<6E2C> <6E2C> -<6E2D> <6E2D> -<6E2E> <6E2E> -<6E2F> <6E2F> -<6E30> <6E30> -<6E31> <6E31> -<6E32> <6E32> -<6E33> <6E33> -<6E34> <6E34> -<6E35> <6E36> -<6E38> <6E38> -<6E39> <6E39> -<6E3A> <6E3A> -<6E3B> <6E3B> -endbfrange - -100 beginbfrange -<6E3C> <6E3D> -<6E3E> <6E3E> -<6E3F> <6E3F> -<6E40> <6E40> -<6E41> <6E41> -<6E43> <6E43> -<6E44> <6E44> -<6E45> <6E45> -<6E46> <6E47> -<6E49> <6E49> -<6E4A> <6E4A> -<6E4B> <6E4B> -<6E4D> <6E4D> -<6E4E> <6E4E> -<6E51> <6E51> -<6E52> <6E52> -<6E53> <6E53> -<6E54> <6E54> -<6E55> <6E55> -<6E56> <6E56> -<6E58> <6E58> -<6E5A> <6E5A> -<6E5B> <6E5B> -<6E5C> <6E5C> -<6E5D> <6E5D> -<6E5E> <6E5E> -<6E5F> <6E5F> -<6E60> <6E60> -<6E61> <6E61> -<6E62> <6E62> -<6E63> <6E63> -<6E64> <6E64> -<6E65> <6E65> -<6E66> <6E66> -<6E67> <6E67> -<6E68> <6E68> -<6E69> <6E69> -<6E6B> <6E6B> -<6E6E> <6E6E> -<6E6F> <6E6F> -<6E71> <6E71> -<6E72> <6E72> -<6E73> <6E73> -<6E74> <6E74> -<6E77> <6E77> -<6E78> <6E78> -<6E79> <6E79> -<6E88> <6E88> -<6E89> <6E89> -<6E8D> <6E8D> -<6E8E> <6E8E> -<6E8F> <6E8F> -<6E90> <6E90> -<6E92> <6E92> -<6E93> <6E94> -<6E96> <6E96> -<6E97> <6E97> -<6E98> <6E98> -<6E99> <6E99> -<6E9B> <6E9B> -<6E9C> <6E9C> -<6E9D> <6E9D> -<6E9E> <6E9E> -<6E9F> <6E9F> -<6EA0> <6EA0> -<6EA1> <6EA1> -<6EA2> <6EA2> -<6EA3> <6EA3> -<6EA4> <6EA4> -<6EA5> <6EA5> -<6EA6> <6EA6> -<6EA7> <6EA7> -<6EAA> <6EAA> -<6EAB> <6EAB> -<6EAE> <6EAE> -<6EAF> <6EAF> -<6EB0> <6EB0> -<6EB1> <6EB1> -<6EB2> <6EB2> -<6EB3> <6EB3> -<6EB4> <6EB4> -<6EB6> <6EB6> -<6EB7> <6EB7> -<6EB9> <6EB9> -<6EBA> <6EBA> -<6EBC> <6EBC> -<6EBD> <6EBD> -<6EBE> <6EBE> -<6EBF> <6EBF> -<6EC0> <6EC0> -<6EC1> <6EC1> -<6EC2> <6EC2> -<6EC3> <6EC3> -<6EC4> <6EC4> -<6EC5> <6EC5> -<6EC6> <6EC6> -<6EC7> <6EC7> -<6EC8> <6EC8> -<6EC9> <6EC9> -<6ECA> <6ECA> -endbfrange - -100 beginbfrange -<6ECB> <6ECB> -<6ECC> <6ECC> -<6ECD> <6ECD> -<6ECE> <6ECE> -<6ECF> <6ECF> -<6ED0> <6ED0> -<6ED1> <6ED1> -<6ED2> <6ED2> -<6ED3> <6ED3> -<6ED4> <6ED4> -<6ED5> <6ED5> -<6ED6> <6ED6> -<6ED8> <6ED8> -<6EDC> <6EDC> -<6EEB> <6EEB> -<6EEC> <6EEC> -<6EED> <6EED> -<6EEE> <6EEE> -<6EEF> <6EEF> -<6EF1> <6EF1> -<6EF2> <6EF2> -<6EF4> <6EF4> -<6EF5> <6EF5> -<6EF6> <6EF6> -<6EF7> <6EF7> -<6EF8> <6EF8> -<6EF9> <6EF9> -<6EFB> <6EFB> -<6EFC> <6EFC> -<6EFD> <6EFD> -<6EFE> <6EFE> -<6EFF> <6EFF> -<6F00> <6F00> -<6F01> <6F01> -<6F02> <6F02> -<6F03> <6F03> -<6F05> <6F05> -<6F06> <6F06> -<6F07> <6F07> -<6F08> <6F08> -<6F09> <6F09> -<6F0A> <6F0A> -<6F0D> <6F0D> -<6F0E> <6F0E> -<6F0F> <6F0F> -<6F12> <6F12> -<6F13> <6F13> -<6F14> <6F14> -<6F15> <6F15> -<6F18> <6F18> -<6F19> <6F1A> -<6F1C> <6F1C> -<6F1E> <6F1E> -<6F1F> <6F1F> -<6F20> <6F20> -<6F21> <6F21> -<6F22> <6F22> -<6F23> <6F23> -<6F25> <6F25> -<6F26> <6F26> -<6F27> <6F27> -<6F29> <6F29> -<6F2A> <6F2A> -<6F2B> <6F2B> -<6F2C> <6F2C> -<6F2D> <6F2D> -<6F2E> <6F2E> -<6F2F> <6F2F> -<6F30> <6F30> -<6F31> <6F31> -<6F32> <6F32> -<6F33> <6F33> -<6F35> <6F35> -<6F36> <6F36> -<6F37> <6F37> -<6F38> <6F38> -<6F39> <6F39> -<6F3A> <6F3A> -<6F3B> <6F3B> -<6F3C> <6F3C> -<6F3E> <6F3E> -<6F3F> <6F3F> -<6F40> <6F40> -<6F41> <6F41> -<6F43> <6F43> -<6F4E> <6F4E> -<6F4F> <6F4F> -<6F50> <6F50> -<6F51> <6F51> -<6F52> <6F52> -<6F53> <6F53> -<6F54> <6F54> -<6F55> <6F55> -<6F57> <6F57> -<6F58> <6F58> -<6F5A> <6F5A> -<6F5B> <6F5B> -<6F5D> <6F5D> -<6F5E> <6F5E> -<6F5F> <6F5F> -endbfrange - -100 beginbfrange -<6F60> <6F60> -<6F61> <6F61> -<6F62> <6F62> -<6F63> <6F63> -<6F64> <6F64> -<6F66> <6F66> -<6F67> <6F67> -<6F69> <6F69> -<6F6A> <6F6A> -<6F6B> <6F6B> -<6F6C> <6F6C> -<6F6D> <6F6D> -<6F6E> <6F6E> -<6F6F> <6F6F> -<6F70> <6F70> -<6F72> <6F72> -<6F73> <6F73> -<6F76> <6F76> -<6F77> <6F77> -<6F78> <6F78> -<6F7A> <6F7A> -<6F7B> <6F7B> -<6F7C> <6F7C> -<6F7D> <6F7D> -<6F7E> <6F7E> -<6F7F> <6F7F> -<6F80> <6F80> -<6F82> <6F82> -<6F84> <6F84> -<6F85> <6F85> -<6F86> <6F86> -<6F87> <6F87> -<6F88> <6F88> -<6F89> <6F89> -<6F8B> <6F8B> -<6F8C> <6F8C> -<6F8D> <6F8D> -<6F8E> <6F8E> -<6F90> <6F90> -<6F92> <6F92> -<6F93> <6F93> -<6F94> <6F94> -<6F95> <6F95> -<6F96> <6F96> -<6F97> <6F97> -<6F9E> <6F9E> -<6FA0> <6FA0> -<6FA1> <6FA1> -<6FA2> <6FA2> -<6FA3> <6FA3> -<6FA4> <6FA4> -<6FA5> <6FA5> -<6FA6> <6FA6> -<6FA7> <6FA7> -<6FA8> <6FA8> -<6FA9> <6FA9> -<6FAA> <6FAA> -<6FAB> <6FAB> -<6FAC> <6FAC> -<6FAD> <6FAD> -<6FAE> <6FAE> -<6FAF> <6FAF> -<6FB0> <6FB0> -<6FB1> <6FB1> -<6FB2> <6FB2> -<6FB3> <6FB3> -<6FB4> <6FB4> -<6FB6> <6FB6> -<6FB8> <6FB8> -<6FB9> <6FB9> -<6FBA> <6FBA> -<6FBC> <6FBC> -<6FBD> <6FBD> -<6FBF> <6FBF> -<6FC0> <6FC0> -<6FC1> <6FC1> -<6FC2> <6FC2> -<6FC3> <6FC3> -<6FC4> <6FC4> -<6FC6> <6FC6> -<6FC7> <6FC7> -<6FC8> <6FC8> -<6FC9> <6FC9> -<6FCA> <6FCA> -<6FCB> <6FCB> -<6FCC> <6FCC> -<6FCD> <6FCD> -<6FCE> <6FCE> -<6FCF> <6FCF> -<6FD4> <6FD4> -<6FD5> <6FD5> -<6FD8> <6FD8> -<6FDB> <6FDB> -<6FDC> <6FDC> -<6FDD> <6FDD> -<6FDE> <6FDE> -<6FDF> <6FE0> -<6FE1> <6FE1> -<6FE2> <6FE2> -<6FE3> <6FE3> -endbfrange - -100 beginbfrange -<6FE4> <6FE4> -<6FE6> <6FE6> -<6FE7> <6FE7> -<6FE8> <6FE8> -<6FE9> <6FE9> -<6FEB> <6FEB> -<6FEC> <6FEC> -<6FED> <6FED> -<6FEE> <6FEE> -<6FEF> <6FEF> -<6FF0> <6FF0> -<6FF1> <6FF1> -<6FF2> <6FF2> -<6FF4> <6FF4> -<6FF7> <6FF7> -<6FFA> <6FFA> -<6FFB> <6FFB> -<6FFC> <6FFC> -<6FFE> <6FFE> -<6FFF> <6FFF> -<7000> <7000> -<7001> <7001> -<7004> <7004> -<7005> <7005> -<7006> <7006> -<7007> <7007> -<7009> <7009> -<700A> <700A> -<700B> <700B> -<700C> <700D> -<700E> <700E> -<700F> <700F> -<7011> <7011> -<7014> <7014> -<7015> <7015> -<7016> <7016> -<7017> <7017> -<7018> <7018> -<7019> <7019> -<701A> <701A> -<701B> <701B> -<701C> <701C> -<701D> <701D> -<701F> <701F> -<7020> <7020> -<7021> <7023> -<7024> <7024> -<7026> <7026> -<7027> <7027> -<7028> <7028> -<7029> <7029> -<702A> <702A> -<702B> <702B> -<702F> <702F> -<7030> <7030> -<7031> <7031> -<7032> <7032> -<7033> <7033> -<7034> <7034> -<7035> <7035> -<7037> <7037> -<7038> <7038> -<7039> <7039> -<703A> <703A> -<703B> <703B> -<703C> <703C> -<703E> <703E> -<703F> <703F> -<7040> <7040> -<7041> <7041> -<7042> <7042> -<7043> <7044> -<7045> <7046> -<7048> <7049> -<704A> <704A> -<704C> <704C> -<7051> <7051> -<7052> <7052> -<7055> <7057> -<7058> <7058> -<705A> <705A> -<705B> <705B> -<705D> <705D> -<705E> <705E> -<705F> <705F> -<7060> <7060> -<7061> <7061> -<7062> <7062> -<7063> <7063> -<7064> <7064> -<7065> <7065> -<7066> <7066> -<7068> <7068> -<7069> <706A> -<706B> <706B> -<7070> <7070> -<7071> <7071> -<7074> <7074> -<7076> <7076> -<7078> <7078> -endbfrange - -100 beginbfrange -<707A> <707A> -<707C> <707D> -<7082> <7082> -<7083> <7083> -<7084> <7084> -<7085> <7085> -<7086> <7086> -<708A> <708A> -<708E> <708E> -<7091> <7091> -<7092> <7092> -<7093> <7093> -<7094> <7094> -<7095> <7095> -<7096> <7096> -<7098> <7098> -<7099> <7099> -<709A> <709A> -<709F> <709F> -<70A1> <70A1> -<70A4> <70A4> -<70A9> <70A9> -<70AB> <70AB> -<70AC> <70AC> -<70AD> <70AD> -<70AE> <70AE> -<70AF> <70AF> -<70B0> <70B0> -<70B1> <70B1> -<70B3> <70B3> -<70B4> <70B5> -<70B7> <70B7> -<70B8> <70B8> -<70BA> <70BA> -<70BE> <70BE> -<70C5> <70C7> -<70C8> <70C8> -<70CA> <70CA> -<70CB> <70CB> -<70CD> <70CD> -<70CE> <70CE> -<70CF> <70CF> -<70D1> <70D1> -<70D2> <70D2> -<70D3> <70D3> -<70D4> <70D4> -<70D7> <70D7> -<70D8> <70D8> -<70D9> <70D9> -<70DA> <70DA> -<70DC> <70DC> -<70DD> <70DD> -<70DE> <70DE> -<70E0> <70E0> -<70E1> <70E1> -<70E2> <70E2> -<70E4> <70E4> -<70EF> <70EF> -<70F0> <70F0> -<70F3> <70F3> -<70F4> <70F4> -<70F6> <70F6> -<70F7> <70F7> -<70F8> <70F8> -<70F9> <70F9> -<70FA> <70FA> -<70FB> <70FB> -<70FC> <70FC> -<70FD> <70FD> -<70FF> <70FF> -<7100> <7100> -<7102> <7102> -<7104> <7104> -<7106> <7106> -<7109> <710A> -<710B> <710B> -<710C> <710C> -<710D> <710D> -<710E> <710E> -<7110> <7110> -<7113> <7113> -<7117> <7117> -<7119> <711A> -<711B> <711B> -<711C> <711C> -<711E> <711E> -<711F> <711F> -<7120> <7120> -<7121> <7121> -<7122> <7122> -<7123> <7123> -<7125> <7125> -<7126> <7126> -<7128> <7128> -<712E> <712E> -<712F> <712F> -<7130> <7130> -<7131> <7131> -<7132> <7132> -<7136> <7136> -endbfrange - -100 beginbfrange -<713A> <713A> -<7141> <7141> -<7142> <7142> -<7143> <7143> -<7144> <7144> -<7146> <7146> -<7147> <7147> -<7149> <7149> -<714B> <714B> -<714C> <714C> -<714D> <714D> -<714E> <714E> -<7150> <7150> -<7152> <7152> -<7153> <7153> -<7154> <7154> -<7156> <7156> -<7158> <7158> -<7159> <7159> -<715A> <715A> -<715C> <715C> -<715D> <715D> -<715E> <715E> -<715F> <715F> -<7160> <7160> -<7161> <7161> -<7162> <7162> -<7163> <7163> -<7164> <7164> -<7165> <7165> -<7166> <7166> -<7167> <7167> -<7168> <7168> -<7169> <7169> -<716A> <716A> -<716C> <716C> -<716E> <716E> -<7170> <7170> -<7172> <7172> -<7178> <7178> -<717B> <717B> -<717D> <717D> -<7180> <7180> -<7181> <7181> -<7182> <7182> -<7184> <7184> -<7185> <7185> -<7186> <7186> -<7187> <7187> -<7189> <7189> -<718A> <718A> -<718F> <718F> -<7190> <7190> -<7192> <7192> -<7194> <7194> -<7197> <7197> -<7199> <7199> -<719A> <719A> -<719B> <719B> -<719C> <719C> -<719D> <719D> -<719E> <719E> -<719F> <719F> -<71A0> <71A0> -<71A1> <71A1> -<71A4> <71A4> -<71A5> <71A5> -<71A7> <71A7> -<71A8> <71A8> -<71A9> <71A9> -<71AA> <71AA> -<71AC> <71AC> -<71AF> <71AF> -<71B0> <71B0> -<71B1> <71B1> -<71B2> <71B2> -<71B3> <71B3> -<71B5> <71B5> -<71B8> <71B8> -<71B9> <71B9> -<71BC> <71BC> -<71BD> <71BD> -<71BE> <71BE> -<71BF> <71BF> -<71C0> <71C1> -<71C2> <71C2> -<71C3> <71C4> -<71C5> <71C5> -<71C6> <71C6> -<71C7> <71C7> -<71C8> <71C8> -<71C9> <71C9> -<71CA> <71CA> -<71CB> <71CB> -<71CE> <71CE> -<71CF> <71CF> -<71D0> <71D0> -<71D2> <71D2> -<71D4> <71D4> -<71D5> <71D5> -endbfrange - -100 beginbfrange -<71D6> <71D6> -<71D8> <71D8> -<71D9> <71D9> -<71DA> <71DB> -<71DC> <71DC> -<71DF> <71DF> -<71E0> <71E0> -<71E1> <71E1> -<71E2> <71E2> -<71E4> <71E4> -<71E5> <71E5> -<71E6> <71E6> -<71E7> <71E7> -<71E8> <71E8> -<71EC> <71EC> -<71ED> <71ED> -<71EE> <71EE> -<71F0> <71F0> -<71F1> <71F1> -<71F2> <71F2> -<71F4> <71F4> -<71F8> <71F8> -<71F9> <71F9> -<71FB> <71FC> -<71FD> <71FD> -<71FE> <71FE> -<71FF> <71FF> -<7201> <7201> -<7202> <7202> -<7203> <7203> -<7205> <7205> -<7206> <7206> -<7207> <7207> -<720A> <720A> -<720C> <720C> -<720D> <720D> -<7210> <7210> -<7213> <7214> -<7219> <7219> -<721A> <721A> -<721B> <721B> -<721D> <721D> -<721E> <721F> -<7222> <7222> -<7223> <7223> -<7226> <7226> -<7227> <7227> -<7228> <7228> -<7229> <7229> -<722A> <722A> -<722C> <722D> -<7230> <7230> -<7235> <7235> -<7236> <7236> -<7238> <7238> -<7239> <7239> -<723A> <723A> -<723B> <723B> -<723D> <723D> -<723E> <723E> -<723F> <723F> -<7241> <7241> -<7242> <7242> -<7244> <7244> -<7246> <7246> -<7247> <7247> -<7248> <7248> -<7249> <724A> -<724B> <724B> -<724C> <724C> -<724F> <724F> -<7252> <7252> -<7253> <7253> -<7256> <7256> -<7258> <7258> -<7259> <7259> -<725A> <725A> -<725B> <725B> -<725D> <725D> -<725E> <725E> -<725F> <725F> -<7260> <7260> -<7261> <7261> -<7262> <7262> -<7263> <7263> -<7267> <7267> -<7269> <7269> -<726A> <726A> -<726C> <726C> -<726E> <726E> -<726F> <726F> -<7270> <7270> -<7272> <7272> -<7273> <7273> -<7274> <7274> -<7276> <7276> -<7277> <7277> -<7278> <7278> -<7279> <7279> -<727B> <727C> -endbfrange - -100 beginbfrange -<727D> <727D> -<727E> <727E> -<727F> <727F> -<7280> <7280> -<7281> <7281> -<7284> <7284> -<7285> <7285> -<7286> <7286> -<7288> <7289> -<728B> <728B> -<728C> <728C> -<728D> <728D> -<728E> <728E> -<7290> <7290> -<7291> <7291> -<7292> <7292> -<7293> <7293> -<7295> <7295> -<7296> <7296> -<7297> <7297> -<7298> <7298> -<729A> <729A> -<729B> <729B> -<729D> <729E> -<72A1> <72A1> -<72A2> <72A2> -<72A3> <72A3> -<72A4> <72A4> -<72A5> <72A6> -<72A7> <72A7> -<72A8> <72A8> -<72A9> <72A9> -<72AA> <72AA> -<72AC> <72AC> -<72AE> <72AE> -<72AF> <72AF> -<72B0> <72B0> -<72B4> <72B5> -<72BA> <72BA> -<72BD> <72BD> -<72BF> <72BF> -<72C0> <72C0> -<72C1> <72C1> -<72C2> <72C2> -<72C3> <72C3> -<72C4> <72C4> -<72C5> <72C5> -<72C6> <72C6> -<72C9> <72C9> -<72CA> <72CA> -<72CB> <72CB> -<72CC> <72CC> -<72CE> <72CE> -<72D0> <72D0> -<72D1> <72D1> -<72D2> <72D2> -<72D4> <72D4> -<72D6> <72D6> -<72D7> <72D7> -<72D8> <72D8> -<72D9> <72D9> -<72DA> <72DA> -<72DC> <72DC> -<72DF> <72DF> -<72E0> <72E1> -<72E3> <72E3> -<72E4> <72E4> -<72E6> <72E6> -<72E8> <72E8> -<72E9> <72E9> -<72EA> <72EA> -<72EB> <72EB> -<72F3> <72F3> -<72F4> <72F4> -<72F6> <72F6> -<72F7> <72F7> -<72F8> <72F8> -<72F9> <72F9> -<72FA> <72FA> -<72FB> <72FB> -<72FC> <72FC> -<72FD> <72FD> -<72FE> <72FE> -<72FF> <72FF> -<7300> <7300> -<7301> <7301> -<7307> <7307> -<7308> <7308> -<730A> <730A> -<730B> <730B> -<730C> <730C> -<730F> <730F> -<7311> <7311> -<7312> <7312> -<7313> <7313> -<7316> <7316> -<7317> <7317> -<7318> <7318> -<7319> <7319> -<731B> <731B> -endbfrange - -100 beginbfrange -<731C> <731C> -<731D> <731D> -<731E> <731E> -<7322> <7322> -<7323> <7323> -<7325> <7325> -<7326> <7326> -<7327> <7327> -<7329> <7329> -<732D> <732D> -<7330> <7330> -<7331> <7331> -<7332> <7332> -<7333> <7333> -<7334> <7334> -<7335> <7335> -<7336> <7336> -<7337> <7337> -<733A> <733A> -<733B> <733B> -<733C> <733C> -<733E> <733E> -<733F> <733F> -<7340> <7340> -<7342> <7342> -<7343> <7343> -<7344> <7344> -<7345> <7345> -<7349> <7349> -<734A> <734A> -<734C> <734C> -<734D> <734D> -<734E> <734E> -<7350> <7350> -<7351> <7351> -<7352> <7352> -<7357> <7357> -<7358> <7358> -<7359> <7359> -<735A> <735A> -<735B> <735B> -<735D> <735D> -<735E> <7360> -<7361> <7361> -<7362> <7362> -<7365> <7365> -<7366> <7367> -<7368> <7368> -<7369> <7369> -<736A> <736A> -<736B> <736B> -<736C> <736C> -<736E> <736F> -<7370> <7370> -<7372> <7372> -<7373> <7373> -<7375> <7375> -<7376> <7376> -<7377> <7377> -<7378> <7378> -<737A> <737A> -<737B> <737B> -<737C> <737C> -<737D> <737D> -<737E> <737E> -<737F> <737F> -<7380> <7380> -<7381> <7381> -<7382> <7382> -<7383> <7383> -<7384> <7384> -<7385> <7385> -<7386> <7386> -<7387> <7387> -<7388> <7388> -<7389> <7389> -<738A> <738A> -<738B> <738B> -<738E> <738E> -<7392> <7392> -<7393> <7394> -<7395> <7395> -<7396> <7396> -<7397> <7397> -<739D> <739D> -<739F> <739F> -<73A0> <73A0> -<73A1> <73A1> -<73A2> <73A2> -<73A4> <73A4> -<73A5> <73A5> -<73A6> <73A6> -<73A8> <73A8> -<73A9> <73A9> -<73AB> <73AB> -<73AC> <73AC> -<73AD> <73AD> -<73B2> <73B2> -<73B3> <73B3> -<73B4> <73B4> -endbfrange - -100 beginbfrange -<73B5> <73B5> -<73B6> <73B6> -<73B7> <73B7> -<73B8> <73B8> -<73B9> <73B9> -<73BB> <73BB> -<73BC> <73BC> -<73BE> <73BE> -<73BF> <73BF> -<73C0> <73C0> -<73C2> <73C2> -<73C3> <73C3> -<73C5> <73C5> -<73C6> <73C6> -<73C7> <73C7> -<73C8> <73C8> -<73CA> <73CA> -<73CB> <73CB> -<73CC> <73CC> -<73CD> <73CD> -<73D2> <73D2> -<73D3> <73D3> -<73D4> <73D4> -<73D6> <73D6> -<73D7> <73D8> -<73D9> <73D9> -<73DA> <73DA> -<73DB> <73DB> -<73DC> <73DC> -<73DD> <73DD> -<73DE> <73DE> -<73E0> <73E0> -<73E3> <73E3> -<73E5> <73E5> -<73E7> <73E7> -<73E8> <73E8> -<73E9> <73E9> -<73EA> <73EA> -<73EB> <73EB> -<73ED> <73ED> -<73EE> <73EE> -<73F4> <73F4> -<73F5> <73F5> -<73F6> <73F6> -<73F8> <73F8> -<73FA> <73FA> -<73FC> <73FC> -<73FD> <73FD> -<73FE> <73FE> -<73FF> <73FF> -<7400> <7400> -<7401> <7401> -<7403> <7403> -<7404> <7404> -<7405> <7405> -<7406> <7406> -<7407> <7407> -<7408> <7408> -<7409> <7409> -<740A> <740A> -<740B> <740B> -<740C> <740C> -<740D> <740D> -<7416> <7416> -<741A> <741A> -<741B> <741B> -<741D> <741D> -<7420> <7420> -<7421> <7421> -<7422> <7422> -<7423> <7423> -<7424> <7424> -<7425> <7425> -<7426> <7426> -<7428> <7428> -<7429> <7429> -<742A> <742A> -<742B> <742B> -<742C> <742C> -<742D> <742D> -<742E> <742E> -<742F> <742F> -<7430> <7430> -<7431> <7431> -<7432> <7432> -<7433> <7433> -<7434> <7434> -<7435> <7436> -<743A> <743A> -<743F> <743F> -<7440> <7440> -<7441> <7441> -<7442> <7442> -<7444> <7444> -<7446> <7446> -<744A> <744B> -<744D> <744D> -<744E> <744E> -<744F> <7450> -<7451> <7451> -endbfrange - -100 beginbfrange -<7452> <7452> -<7454> <7454> -<7455> <7455> -<7457> <7457> -<7459> <7459> -<745A> <745A> -<745B> <745C> -<745E> <745E> -<745F> <745F> -<7462> <7462> -<7463> <7463> -<7464> <7464> -<7467> <7467> -<7469> <7469> -<746A> <746A> -<746D> <746D> -<746E> <746E> -<746F> <746F> -<7470> <7470> -<7471> <7471> -<7472> <7472> -<7473> <7473> -<7475> <7475> -<7479> <7479> -<747C> <747C> -<747D> <747D> -<747E> <747E> -<747F> <747F> -<7480> <7480> -<7481> <7481> -<7483> <7483> -<7485> <7485> -<7486> <7486> -<7487> <7487> -<7488> <7488> -<7489> <748A> -<748B> <748B> -<7490> <7490> -<7492> <7492> -<7494> <7494> -<7495> <7495> -<7497> <7497> -<7498> <7498> -<749A> <749A> -<749C> <749C> -<749E> <749E> -<749F> <749F> -<74A0> <74A0> -<74A1> <74A1> -<74A3> <74A3> -<74A5> <74A5> -<74A6> <74A6> -<74A7> <74A7> -<74A8> <74A8> -<74A9> <74A9> -<74AA> <74AA> -<74AB> <74AB> -<74AD> <74AD> -<74AF> <74AF> -<74B0> <74B0> -<74B1> <74B1> -<74B2> <74B2> -<74B5> <74B5> -<74B6> <74B6> -<74B7> <74B7> -<74B8> <74B8> -<74BA> <74BA> -<74BB> <74BB> -<74BD> <74BD> -<74BE> <74BE> -<74BF> <74BF> -<74C0> <74C0> -<74C1> <74C1> -<74C2> <74C2> -<74C3> <74C3> -<74C5> <74C5> -<74CA> <74CA> -<74CB> <74CB> -<74CF> <74CF> -<74D4> <74D4> -<74D5> <74D5> -<74D6> <74D6> -<74D7> <74D7> -<74D8> <74D8> -<74D9> <74D9> -<74DA> <74DA> -<74DB> <74DB> -<74DC> <74DC> -<74DD> <74DD> -<74DE> <74DF> -<74E0> <74E0> -<74E1> <74E1> -<74E2> <74E2> -<74E3> <74E3> -<74E4> <74E4> -<74E5> <74E5> -<74E6> <74E6> -<74E8> <74E8> -<74E9> <74E9> -<74EC> <74EC> -endbfrange - -100 beginbfrange -<74EE> <74EE> -<74F4> <74F5> -<74F6> <74F6> -<74F7> <74F7> -<74FB> <74FB> -<74FD> <74FD> -<74FE> <74FE> -<74FF> <74FF> -<7500> <7500> -<7502> <7503> -<7504> <7504> -<7507> <7507> -<7508> <7508> -<750B> <750B> -<750C> <750D> -<750F> <750F> -<7510> <7512> -<7513> <7513> -<7514> <7514> -<7515> <7515> -<7516> <7516> -<7517> <7517> -<7518> <7518> -<751A> <751A> -<751C> <751C> -<751D> <751D> -<751F> <751F> -<7521> <7521> -<7522> <7522> -<7525> <7526> -<7528> <7529> -<752A> <752A> -<752B> <752B> -<752C> <752C> -<752D> <752D> -<752E> <752E> -<752F> <752F> -<7530> <7533> -<7537> <7538> -<7539> <7539> -<753A> <753A> -<753D> <753D> -<753E> <753E> -<753F> <7540> -<7547> <7548> -<754B> <754B> -<754C> <754C> -<754E> <754E> -<754F> <754F> -<7554> <7554> -<7559> <7559> -<755A> <755A> -<755B> <755B> -<755C> <755C> -<755D> <755D> -<755F> <755F> -<7562> <7562> -<7563> <7563> -<7564> <7564> -<7565> <7566> -<756A> <756A> -<756B> <756B> -<756C> <756C> -<756F> <756F> -<7570> <7570> -<7576> <7576> -<7577> <7577> -<7578> <7578> -<7579> <7579> -<757D> <757D> -<757E> <757E> -<757F> <757F> -<7580> <7580> -<7584> <7584> -<7586> <7586> -<7587> <7587> -<758A> <758A> -<758B> <758B> -<758C> <758C> -<758F> <758F> -<7590> <7590> -<7591> <7591> -<7594> <7595> -<7598> <7598> -<7599> <759A> -<759D> <759D> -<75A2> <75A3> -<75A4> <75A5> -<75A7> <75A7> -<75AA> <75AA> -<75AB> <75AB> -<75B0> <75B0> -<75B2> <75B3> -<75B5> <75B5> -<75B6> <75B6> -<75B8> <75B8> -<75B9> <75B9> -<75BA> <75BA> -<75BB> <75BB> -<75BC> <75BC> -endbfrange - -100 beginbfrange -<75BD> <75BD> -<75BE> <75BE> -<75BF> <75BF> -<75C0> <75C0> -<75C1> <75C1> -<75C2> <75C2> -<75C4> <75C4> -<75C5> <75C5> -<75C7> <75C7> -<75CA> <75CA> -<75CB> <75CC> -<75CD> <75CD> -<75CE> <75CE> -<75CF> <75CF> -<75D0> <75D0> -<75D1> <75D1> -<75D2> <75D2> -<75D4> <75D5> -<75D7> <75D7> -<75D8> <75D8> -<75D9> <75D9> -<75DA> <75DA> -<75DB> <75DB> -<75DD> <75DD> -<75DE> <75DE> -<75DF> <75DF> -<75E0> <75E0> -<75E1> <75E1> -<75E2> <75E2> -<75E3> <75E3> -<75E4> <75E4> -<75E6> <75E6> -<75E7> <75E7> -<75ED> <75ED> -<75EF> <75EF> -<75F0> <75F0> -<75F1> <75F1> -<75F2> <75F2> -<75F3> <75F3> -<75F4> <75F4> -<75F5> <75F5> -<75F6> <75F6> -<75F7> <75F7> -<75F8> <75F8> -<75F9> <75F9> -<75FA> <75FA> -<75FB> <75FB> -<75FC> <75FC> -<75FD> <75FD> -<75FE> <75FE> -<75FF> <75FF> -<7600> <7600> -<7601> <7601> -<7603> <7603> -<7608> <7608> -<7609> <7609> -<760A> <760A> -<760B> <760B> -<760C> <760C> -<760D> <760D> -<760F> <760F> -<7610> <7610> -<7611> <7611> -<7613> <7613> -<7614> <7614> -<7615> <7615> -<7616> <7616> -<7619> <7619> -<761A> <761A> -<761B> <761B> -<761C> <761C> -<761D> <761D> -<761E> <761E> -<761F> <761F> -<7620> <7620> -<7621> <7622> -<7623> <7623> -<7624> <7624> -<7625> <7625> -<7626> <7626> -<7627> <7627> -<7628> <7628> -<7629> <7629> -<762D> <762D> -<762F> <762F> -<7630> <7630> -<7631> <7631> -<7632> <7632> -<7633> <7633> -<7634> <7634> -<7635> <7635> -<7638> <7638> -<763A> <763A> -<763C> <763C> -<763D> <763D> -<7642> <7642> -<7643> <7643> -<7646> <7646> -<7647> <7647> -<7648> <7649> -endbfrange - -100 beginbfrange -<764C> <764C> -<7650> <7650> -<7652> <7652> -<7653> <7653> -<7656> <7656> -<7657> <7657> -<7658> <7658> -<7659> <7659> -<765A> <765A> -<765C> <765C> -<765F> <765F> -<7660> <7660> -<7661> <7661> -<7662> <7662> -<7664> <7664> -<7665> <7665> -<7669> <7669> -<766A> <766A> -<766C> <766C> -<766D> <766D> -<766E> <766E> -<7670> <7670> -<7671> <7672> -<7675> <7675> -<7678> <7678> -<7679> <7679> -<767B> <767C> -<767D> <767D> -<767E> <767E> -<767F> <767F> -<7681> <7681> -<7682> <7682> -<7684> <7684> -<7686> <7688> -<7689> <7689> -<768A> <768A> -<768B> <768B> -<768E> <768E> -<768F> <768F> -<7692> <7692> -<7693> <7693> -<7695> <7695> -<7696> <7696> -<7699> <7699> -<769A> <769A> -<769B> <769B> -<769C> <769E> -<76A4> <76A4> -<76A6> <76A6> -<76AA> <76AA> -<76AB> <76AB> -<76AD> <76AD> -<76AE> <76AE> -<76AF> <76AF> -<76B0> <76B0> -<76B4> <76B4> -<76B5> <76B5> -<76B8> <76B8> -<76BA> <76BA> -<76BB> <76BB> -<76BD> <76BD> -<76BE> <76BE> -<76BF> <76BF> -<76C2> <76C2> -<76C3> <76C3> -<76C4> <76C4> -<76C5> <76C5> -<76C6> <76C6> -<76C8> <76C8> -<76C9> <76C9> -<76CA> <76CA> -<76CD> <76CE> -<76D2> <76D2> -<76D3> <76D3> -<76D4> <76D4> -<76DA> <76DA> -<76DB> <76DB> -<76DC> <76DC> -<76DD> <76DD> -<76DE> <76DF> -<76E1> <76E1> -<76E3> <76E3> -<76E4> <76E4> -<76E5> <76E5> -<76E6> <76E6> -<76E7> <76E7> -<76E9> <76E9> -<76EA> <76EA> -<76EC> <76EC> -<76ED> <76ED> -<76EE> <76EE> -<76EF> <76EF> -<76F0> <76F0> -<76F1> <76F1> -<76F2> <76F2> -<76F3> <76F3> -<76F4> <76F4> -<76F5> <76F5> -<76F7> <76F7> -<76F8> <76F8> -endbfrange - -100 beginbfrange -<76F9> <76F9> -<76FA> <76FA> -<76FB> <76FB> -<76FC> <76FC> -<76FE> <76FE> -<7701> <7701> -<7703> <7705> -<7707> <7707> -<7708> <7708> -<7709> <7709> -<770A> <770A> -<770B> <770B> -<7710> <7710> -<7711> <7711> -<7712> <7712> -<7713> <7713> -<7715> <7715> -<7719> <771A> -<771B> <771B> -<771D> <771D> -<771F> <7720> -<7722> <7722> -<7723> <7723> -<7725> <7725> -<7727> <7727> -<7728> <7728> -<7729> <7729> -<772D> <772D> -<772F> <772F> -<7731> <7732> -<7733> <7733> -<7734> <7734> -<7735> <7735> -<7736> <7736> -<7737> <7737> -<7738> <7738> -<7739> <7739> -<773A> <773A> -<773B> <773B> -<773C> <773C> -<773D> <773D> -<773E> <773E> -<7744> <7744> -<7745> <7745> -<7746> <7747> -<774A> <774A> -<774B> <774C> -<774D> <774D> -<774E> <774E> -<774F> <774F> -<7752> <7752> -<7754> <7754> -<7755> <7755> -<7756> <7756> -<7759> <7759> -<775A> <775A> -<775B> <775B> -<775C> <775C> -<775E> <775E> -<775F> <7760> -<7761> <7761> -<7762> <7762> -<7763> <7763> -<7765> <7765> -<7766> <7766> -<7767> <7767> -<7768> <7768> -<7769> <7769> -<776A> <776A> -<776B> <776B> -<776C> <776C> -<776D> <776D> -<776E> <776E> -<776F> <776F> -<7779> <7779> -<777C> <777C> -<777D> <777D> -<777E> <777E> -<777F> <777F> -<7780> <7780> -<7781> <7781> -<7782> <7782> -<7783> <7783> -<7784> <7784> -<7785> <7785> -<7787> <7787> -<7788> <7788> -<7789> <7789> -<778B> <778B> -<778C> <778C> -<778D> <778D> -<778E> <778E> -<778F> <778F> -<7791> <7791> -<7795> <7795> -<7797> <7797> -<7799> <7799> -<779A> <779A> -<779B> <779B> -<779C> <779C> -endbfrange - -100 beginbfrange -<779D> <779D> -<779E> <779F> -<77A0> <77A0> -<77A1> <77A1> -<77A2> <77A3> -<77A5> <77A5> -<77A7> <77A7> -<77A8> <77A8> -<77AA> <77AA> -<77AB> <77AB> -<77AC> <77AC> -<77AD> <77AD> -<77B0> <77B0> -<77B1> <77B1> -<77B2> <77B2> -<77B3> <77B3> -<77B4> <77B4> -<77B5> <77B5> -<77B6> <77B6> -<77B7> <77B7> -<77BA> <77BA> -<77BB> <77BC> -<77BD> <77BD> -<77BF> <77BF> -<77C2> <77C2> -<77C4> <77C4> -<77C7> <77C7> -<77C9> <77CA> -<77CC> <77CC> -<77CD> <77CD> -<77CE> <77CF> -<77D0> <77D0> -<77D3> <77D3> -<77D4> <77D4> -<77D5> <77D5> -<77D7> <77D7> -<77D8> <77D9> -<77DA> <77DA> -<77DB> <77DB> -<77DC> <77DC> -<77DE> <77DE> -<77E0> <77E0> -<77E2> <77E2> -<77E3> <77E3> -<77E5> <77E5> -<77E7> <77E8> -<77E9> <77E9> -<77EC> <77EC> -<77ED> <77ED> -<77EE> <77EE> -<77EF> <77EF> -<77F0> <77F0> -<77F1> <77F1> -<77F2> <77F2> -<77F3> <77F3> -<77F7> <77F7> -<77F8> <77F8> -<77F9> <77F9> -<77FA> <77FA> -<77FB> <77FB> -<77FC> <77FC> -<77FD> <77FD> -<7802> <7802> -<7803> <7803> -<7805> <7805> -<7806> <7806> -<7809> <7809> -<780C> <780D> -<780E> <780E> -<780F> <780F> -<7810> <7810> -<7811> <7812> -<7813> <7813> -<7814> <7814> -<781D> <781D> -<781F> <781F> -<7820> <7820> -<7821> <7821> -<7822> <7822> -<7823> <7823> -<7825> <7825> -<7826> <7826> -<7827> <7827> -<7828> <7828> -<7829> <7829> -<782A> <782A> -<782B> <782B> -<782C> <782C> -<782D> <782D> -<782E> <782E> -<782F> <782F> -<7830> <7830> -<7831> <7831> -<7832> <7832> -<7833> <7833> -<7834> <7834> -<7835> <7835> -<7837> <7837> -<7838> <7838> -<7843> <7843> -endbfrange - -100 beginbfrange -<7845> <7845> -<7848> <7848> -<7849> <7849> -<784A> <784A> -<784C> <784C> -<784D> <784D> -<784E> <784E> -<7850> <7850> -<7852> <7852> -<785C> <785C> -<785D> <785D> -<785E> <785E> -<7860> <7860> -<7862> <7862> -<7864> <7865> -<7868> <7868> -<7869> <7869> -<786A> <786A> -<786B> <786B> -<786C> <786C> -<786D> <786D> -<786E> <786E> -<786F> <786F> -<7870> <7870> -<7871> <7871> -<7879> <7879> -<787B> <787B> -<787C> <787C> -<787E> <787E> -<787F> <787F> -<7880> <7880> -<7883> <7883> -<7884> <7884> -<7885> <7886> -<7887> <7887> -<7889> <7889> -<788C> <788C> -<788E> <788E> -<788F> <788F> -<7891> <7891> -<7893> <7893> -<7894> <7894> -<7895> <7895> -<7896> <7896> -<7897> <7898> -<7899> <7899> -<789A> <789A> -<789E> <789E> -<789F> <789F> -<78A0> <78A0> -<78A1> <78A1> -<78A2> <78A2> -<78A3> <78A3> -<78A4> <78A4> -<78A5> <78A5> -<78A7> <78A7> -<78A8> <78A8> -<78A9> <78A9> -<78AA> <78AA> -<78AB> <78AB> -<78AC> <78AC> -<78AD> <78AD> -<78B0> <78B0> -<78B2> <78B2> -<78B3> <78B3> -<78B4> <78B4> -<78BA> <78BA> -<78BB> <78BB> -<78BC> <78BC> -<78BE> <78BE> -<78C1> <78C1> -<78C3> <78C4> -<78C5> <78C5> -<78C8> <78C8> -<78C9> <78C9> -<78CA> <78CA> -<78CB> <78CB> -<78CC> <78CC> -<78CD> <78CD> -<78CE> <78CE> -<78CF> <78CF> -<78D0> <78D0> -<78D1> <78D1> -<78D4> <78D4> -<78D5> <78D5> -<78DA> <78DA> -<78DB> <78DB> -<78DD> <78DD> -<78DE> <78DE> -<78DF> <78E0> -<78E1> <78E2> -<78E3> <78E3> -<78E5> <78E5> -<78E7> <78E7> -<78E8> <78E8> -<78E9> <78E9> -<78EA> <78EA> -<78EC> <78EC> -<78ED> <78ED> -<78EF> <78EF> -endbfrange - -100 beginbfrange -<78F2> <78F2> -<78F3> <78F3> -<78F4> <78F4> -<78F7> <78F7> -<78F9> <78F9> -<78FA> <78FA> -<78FB> <78FC> -<78FD> <78FD> -<78FE> <78FE> -<78FF> <78FF> -<7901> <7901> -<7902> <7902> -<7904> <7904> -<7905> <7905> -<7909> <7909> -<790C> <790C> -<790E> <790E> -<7910> <7910> -<7911> <7911> -<7912> <7912> -<7913> <7914> -<7917> <7917> -<7919> <7919> -<791B> <791B> -<791C> <791C> -<791D> <791D> -<791E> <791E> -<7921> <7921> -<7923> <7923> -<7924> <7924> -<7925> <7925> -<7926> <7926> -<7927> <7928> -<7929> <7929> -<792A> <792A> -<792B> <792B> -<792C> <792C> -<792D> <792D> -<792F> <792F> -<7931> <7931> -<7935> <7935> -<7938> <7938> -<7939> <7939> -<793A> <793A> -<793D> <793D> -<793E> <793E> -<793F> <793F> -<7940> <7941> -<7942> <7942> -<7944> <7944> -<7945> <7945> -<7946> <7946> -<7947> <7947> -<7948> <7948> -<7949> <7949> -<794A> <794A> -<794B> <794B> -<794C> <794C> -<794F> <794F> -<7950> <7950> -<7951> <7951> -<7952> <7952> -<7953> <7953> -<7954> <7954> -<7955> <7955> -<7956> <7956> -<7957> <7957> -<795A> <795A> -<795B> <795B> -<795C> <795C> -<795D> <795D> -<795E> <795E> -<795F> <795F> -<7960> <7960> -<7961> <7961> -<7963> <7963> -<7964> <7964> -<7965> <7965> -<7967> <7967> -<7968> <7968> -<7969> <796A> -<796B> <796B> -<796D> <796D> -<7970> <7970> -<7972> <7972> -<7973> <7973> -<7974> <7974> -<7979> <7979> -<797A> <797A> -<797C> <797C> -<797D> <797D> -<797F> <797F> -<7981> <7981> -<7982> <7982> -<7988> <7988> -<798A> <798B> -<798D> <798D> -<798E> <798F> -<7990> <7990> -<7992> <7992> -endbfrange - -100 beginbfrange -<7993> <7993> -<7994> <7994> -<7995> <7995> -<7996> <7996> -<7997> <7997> -<7998> <7998> -<799A> <799A> -<799B> <799B> -<799C> <799C> -<79A0> <79A0> -<79A1> <79A1> -<79A2> <79A2> -<79A4> <79A4> -<79A6> <79A6> -<79A7> <79A7> -<79A8> <79A8> -<79AA> <79AA> -<79AB> <79AB> -<79AC> <79AC> -<79AD> <79AD> -<79AE> <79AE> -<79B0> <79B0> -<79B1> <79B1> -<79B2> <79B2> -<79B3> <79B3> -<79B4> <79B4> -<79B6> <79B6> -<79B7> <79B7> -<79B8> <79B8> -<79B9> <79BA> -<79BB> <79BB> -<79BD> <79BD> -<79BE> <79BE> -<79BF> <79BF> -<79C0> <79C0> -<79C1> <79C1> -<79C5> <79C5> -<79C8> <79C8> -<79C9> <79C9> -<79CB> <79CB> -<79CD> <79CD> -<79CE> <79CE> -<79CF> <79CF> -<79D1> <79D2> -<79D5> <79D5> -<79D6> <79D6> -<79D8> <79D8> -<79DC> <79DC> -<79DD> <79DD> -<79DE> <79DE> -<79DF> <79DF> -<79E0> <79E0> -<79E3> <79E3> -<79E4> <79E4> -<79E6> <79E6> -<79E7> <79E7> -<79E9> <79E9> -<79EA> <79EA> -<79EB> <79EC> -<79ED> <79ED> -<79EE> <79EE> -<79F6> <79F7> -<79F8> <79F8> -<79FA> <79FA> -<79FB> <79FB> -<7A00> <7A00> -<7A02> <7A02> -<7A03> <7A03> -<7A04> <7A04> -<7A05> <7A05> -<7A08> <7A08> -<7A0A> <7A0A> -<7A0B> <7A0B> -<7A0C> <7A0C> -<7A0D> <7A0D> -<7A10> <7A10> -<7A11> <7A11> -<7A12> <7A12> -<7A13> <7A13> -<7A14> <7A14> -<7A15> <7A15> -<7A17> <7A17> -<7A18> <7A19> -<7A1A> <7A1A> -<7A1B> <7A1B> -<7A1C> <7A1C> -<7A1E> <7A1E> -<7A1F> <7A1F> -<7A20> <7A20> -<7A22> <7A22> -<7A26> <7A26> -<7A28> <7A28> -<7A2B> <7A2B> -<7A2E> <7A2E> -<7A2F> <7A2F> -<7A30> <7A30> -<7A31> <7A31> -<7A37> <7A37> -<7A39> <7A39> -<7A3B> <7A3B> -endbfrange - -100 beginbfrange -<7A3C> <7A3C> -<7A3D> <7A3D> -<7A3F> <7A3F> -<7A40> <7A40> -<7A44> <7A44> -<7A46> <7A46> -<7A47> <7A47> -<7A48> <7A48> -<7A4A> <7A4A> -<7A4B> <7A4B> -<7A4C> <7A4C> -<7A4D> <7A4E> -<7A54> <7A54> -<7A56> <7A56> -<7A57> <7A57> -<7A58> <7A58> -<7A5A> <7A5A> -<7A5B> <7A5B> -<7A5C> <7A5C> -<7A5F> <7A5F> -<7A60> <7A60> -<7A61> <7A62> -<7A67> <7A68> -<7A69> <7A69> -<7A6B> <7A6B> -<7A6C> <7A6D> -<7A6E> <7A6E> -<7A70> <7A71> -<7A74> <7A74> -<7A75> <7A75> -<7A76> <7A76> -<7A78> <7A78> -<7A79> <7A79> -<7A7A> <7A7A> -<7A7B> <7A7B> -<7A7E> <7A7E> -<7A7F> <7A7F> -<7A80> <7A80> -<7A81> <7A81> -<7A84> <7A84> -<7A85> <7A85> -<7A86> <7A86> -<7A87> <7A87> -<7A88> <7A88> -<7A89> <7A89> -<7A8A> <7A8A> -<7A8B> <7A8C> -<7A8F> <7A8F> -<7A90> <7A90> -<7A92> <7A92> -<7A94> <7A94> -<7A95> <7A95> -<7A96> <7A96> -<7A97> <7A97> -<7A98> <7A98> -<7A99> <7A99> -<7A9E> <7A9E> -<7A9F> <7AA0> -<7AA2> <7AA2> -<7AA3> <7AA3> -<7AA8> <7AA8> -<7AA9> <7AA9> -<7AAA> <7AAA> -<7AAB> <7AAC> -<7AAE> <7AAE> -<7AAF> <7AAF> -<7AB1> <7AB1> -<7AB2> <7AB2> -<7AB3> <7AB3> -<7AB4> <7AB4> -<7AB5> <7AB5> -<7AB6> <7AB6> -<7AB7> <7AB7> -<7AB8> <7AB8> -<7ABA> <7ABA> -<7ABE> <7ABE> -<7ABF> <7ABF> -<7AC0> <7AC1> -<7AC4> <7AC5> -<7AC7> <7AC7> -<7ACA> <7ACA> -<7ACB> <7ACB> -<7AD1> <7AD1> -<7AD8> <7AD8> -<7AD9> <7AD9> -<7ADF> <7ADF> -<7AE0> <7AE0> -<7AE3> <7AE3> -<7AE4> <7AE4> -<7AE5> <7AE5> -<7AE6> <7AE6> -<7AEB> <7AEB> -<7AED> <7AED> -<7AEE> <7AEE> -<7AEF> <7AEF> -<7AF6> <7AF6> -<7AF7> <7AF7> -<7AF9> <7AF9> -<7AFA> <7AFA> -<7AFB> <7AFB> -endbfrange - -100 beginbfrange -<7AFD> <7AFD> -<7AFF> <7AFF> -<7B00> <7B01> -<7B04> <7B04> -<7B05> <7B05> -<7B06> <7B06> -<7B08> <7B08> -<7B09> <7B09> -<7B0A> <7B0A> -<7B0E> <7B0E> -<7B0F> <7B0F> -<7B10> <7B10> -<7B11> <7B11> -<7B12> <7B12> -<7B13> <7B13> -<7B18> <7B18> -<7B19> <7B19> -<7B1A> <7B1A> -<7B1B> <7B1B> -<7B1D> <7B1D> -<7B1E> <7B1E> -<7B20> <7B20> -<7B22> <7B22> -<7B23> <7B23> -<7B24> <7B24> -<7B25> <7B25> -<7B26> <7B26> -<7B28> <7B28> -<7B2A> <7B2A> -<7B2B> <7B2B> -<7B2C> <7B2C> -<7B2D> <7B2D> -<7B2E> <7B2E> -<7B2F> <7B2F> -<7B30> <7B30> -<7B31> <7B31> -<7B32> <7B32> -<7B33> <7B33> -<7B34> <7B34> -<7B35> <7B35> -<7B38> <7B38> -<7B3B> <7B3B> -<7B40> <7B40> -<7B44> <7B44> -<7B45> <7B45> -<7B46> <7B46> -<7B47> <7B47> -<7B48> <7B48> -<7B49> <7B49> -<7B4A> <7B4A> -<7B4B> <7B4B> -<7B4C> <7B4C> -<7B4D> <7B4D> -<7B4E> <7B4E> -<7B4F> <7B4F> -<7B50> <7B50> -<7B51> <7B51> -<7B52> <7B52> -<7B54> <7B54> -<7B56> <7B56> -<7B58> <7B58> -<7B60> <7B60> -<7B61> <7B61> -<7B63> <7B63> -<7B64> <7B64> -<7B65> <7B65> -<7B66> <7B66> -<7B67> <7B67> -<7B69> <7B69> -<7B6D> <7B6D> -<7B6E> <7B6E> -<7B70> <7B70> -<7B71> <7B71> -<7B72> <7B72> -<7B73> <7B73> -<7B74> <7B74> -<7B75> <7B75> -<7B76> <7B76> -<7B77> <7B77> -<7B78> <7B78> -<7B82> <7B82> -<7B84> <7B84> -<7B85> <7B85> -<7B87> <7B87> -<7B88> <7B88> -<7B8A> <7B8A> -<7B8B> <7B8B> -<7B8C> <7B8C> -<7B8D> <7B8D> -<7B8E> <7B8E> -<7B8F> <7B8F> -<7B90> <7B90> -<7B91> <7B91> -<7B94> <7B94> -<7B95> <7B95> -<7B96> <7B96> -<7B97> <7B97> -<7B98> <7B98> -<7B99> <7B99> -<7B9B> <7B9B> -endbfrange - -100 beginbfrange -<7B9C> <7B9C> -<7B9D> <7B9D> -<7BA0> <7BA0> -<7BA1> <7BA1> -<7BA4> <7BA4> -<7BAC> <7BAC> -<7BAD> <7BAD> -<7BAF> <7BAF> -<7BB1> <7BB1> -<7BB4> <7BB4> -<7BB5> <7BB5> -<7BB7> <7BB7> -<7BB8> <7BB8> -<7BB9> <7BB9> -<7BBE> <7BBE> -<7BC0> <7BC0> -<7BC1> <7BC1> -<7BC4> <7BC4> -<7BC6> <7BC7> -<7BC9> <7BC9> -<7BCA> <7BCA> -<7BCB> <7BCB> -<7BCC> <7BCC> -<7BCE> <7BCE> -<7BD4> <7BD4> -<7BD5> <7BD5> -<7BD8> <7BD8> -<7BD9> <7BD9> -<7BDA> <7BDA> -<7BDB> <7BDB> -<7BDC> <7BDC> -<7BDD> <7BDD> -<7BDE> <7BDE> -<7BDF> <7BDF> -<7BE0> <7BE0> -<7BE1> <7BE1> -<7BE2> <7BE2> -<7BE3> <7BE3> -<7BE4> <7BE4> -<7BE5> <7BE5> -<7BE6> <7BE6> -<7BE7> <7BE7> -<7BE8> <7BE8> -<7BE9> <7BE9> -<7BEA> <7BEA> -<7BEB> <7BEB> -<7BF0> <7BF1> -<7BF2> <7BF2> -<7BF3> <7BF3> -<7BF4> <7BF4> -<7BF7> <7BF7> -<7BF8> <7BF8> -<7BF9> <7BF9> -<7BFB> <7BFB> -<7BFD> <7BFD> -<7BFE> <7BFE> -<7BFF> <7BFF> -<7C00> <7C00> -<7C01> <7C01> -<7C02> <7C02> -<7C03> <7C03> -<7C05> <7C05> -<7C06> <7C06> -<7C07> <7C07> -<7C09> <7C09> -<7C0A> <7C0A> -<7C0B> <7C0B> -<7C0C> <7C0C> -<7C0D> <7C0D> -<7C0E> <7C0E> -<7C0F> <7C0F> -<7C10> <7C10> -<7C11> <7C11> -<7C19> <7C19> -<7C1C> <7C1C> -<7C1D> <7C1D> -<7C1E> <7C1E> -<7C1F> <7C1F> -<7C20> <7C20> -<7C21> <7C21> -<7C22> <7C22> -<7C23> <7C23> -<7C25> <7C25> -<7C26> <7C26> -<7C27> <7C27> -<7C28> <7C28> -<7C29> <7C29> -<7C2A> <7C2A> -<7C2B> <7C2B> -<7C2C> <7C2C> -<7C2D> <7C2D> -<7C30> <7C30> -<7C33> <7C33> -<7C37> <7C37> -<7C38> <7C38> -<7C39> <7C39> -<7C3B> <7C3B> -<7C3C> <7C3C> -<7C3D> <7C3D> -<7C3E> <7C3F> -endbfrange - -100 beginbfrange -<7C40> <7C40> -<7C43> <7C43> -<7C45> <7C45> -<7C47> <7C47> -<7C48> <7C48> -<7C49> <7C49> -<7C4A> <7C4A> -<7C4C> <7C4C> -<7C4D> <7C4D> -<7C50> <7C50> -<7C53> <7C53> -<7C54> <7C54> -<7C57> <7C57> -<7C59> <7C59> -<7C5A> <7C5A> -<7C5B> <7C5B> -<7C5C> <7C5C> -<7C5F> <7C5F> -<7C60> <7C60> -<7C63> <7C63> -<7C64> <7C64> -<7C65> <7C65> -<7C66> <7C66> -<7C67> <7C67> -<7C69> <7C69> -<7C6A> <7C6A> -<7C6B> <7C6B> -<7C6C> <7C6C> -<7C6E> <7C6E> -<7C6F> <7C6F> -<7C72> <7C72> -<7C73> <7C73> -<7C75> <7C75> -<7C78> <7C79> -<7C7A> <7C7A> -<7C7D> <7C7D> -<7C7F> <7C81> -<7C84> <7C84> -<7C85> <7C85> -<7C88> <7C88> -<7C89> <7C89> -<7C8A> <7C8A> -<7C8C> <7C8C> -<7C8D> <7C8D> -<7C91> <7C91> -<7C92> <7C92> -<7C94> <7C94> -<7C95> <7C95> -<7C96> <7C96> -<7C97> <7C97> -<7C98> <7C98> -<7C9E> <7C9E> -<7C9F> <7C9F> -<7CA1> <7CA1> -<7CA2> <7CA2> -<7CA3> <7CA3> -<7CA5> <7CA5> -<7CA8> <7CA8> -<7CAF> <7CAF> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB4> <7CB4> -<7CB5> <7CB5> -<7CB9> <7CB9> -<7CBA> <7CBA> -<7CBB> <7CBB> -<7CBC> <7CBC> -<7CBD> <7CBE> -<7CBF> <7CBF> -<7CC5> <7CC5> -<7CC8> <7CC8> -<7CCA> <7CCA> -<7CCB> <7CCB> -<7CCC> <7CCC> -<7CCE> <7CCE> -<7CD0> <7CD1> -<7CD2> <7CD2> -<7CD4> <7CD4> -<7CD5> <7CD6> -<7CD7> <7CD7> -<7CD9> <7CD9> -<7CDC> <7CDC> -<7CDD> <7CDD> -<7CDE> <7CDE> -<7CDF> <7CDF> -<7CE0> <7CE0> -<7CE2> <7CE2> -<7CE7> <7CE7> -<7CE8> <7CE8> -<7CEA> <7CEA> -<7CEC> <7CEC> -<7CEE> <7CEE> -<7CEF> <7CF0> -<7CF1> <7CF1> -<7CF2> <7CF2> -<7CF4> <7CF4> -<7CF6> <7CF6> -<7CF7> <7CF7> -<7CF8> <7CF8> -endbfrange - -100 beginbfrange -<7CFB> <7CFB> -<7CFD> <7CFD> -<7CFE> <7CFE> -<7D00> <7D00> -<7D01> <7D01> -<7D02> <7D02> -<7D03> <7D03> -<7D04> <7D04> -<7D05> <7D05> -<7D06> <7D06> -<7D07> <7D07> -<7D08> <7D08> -<7D09> <7D09> -<7D0A> <7D0A> -<7D0B> <7D0B> -<7D0C> <7D0C> -<7D0D> <7D0D> -<7D0E> <7D0E> -<7D0F> <7D0F> -<7D10> <7D10> -<7D11> <7D11> -<7D12> <7D12> -<7D13> <7D13> -<7D14> <7D14> -<7D15> <7D15> -<7D16> <7D16> -<7D17> <7D17> -<7D18> <7D18> -<7D19> <7D19> -<7D1A> <7D1A> -<7D1B> <7D1B> -<7D1C> <7D1C> -<7D1D> <7D1D> -<7D1E> <7D1E> -<7D1F> <7D1F> -<7D20> <7D20> -<7D21> <7D21> -<7D22> <7D22> -<7D28> <7D28> -<7D29> <7D29> -<7D2B> <7D2B> -<7D2C> <7D2C> -<7D2E> <7D2E> -<7D2F> <7D2F> -<7D30> <7D30> -<7D31> <7D31> -<7D32> <7D32> -<7D33> <7D33> -<7D35> <7D35> -<7D36> <7D36> -<7D38> <7D38> -<7D39> <7D39> -<7D3A> <7D3A> -<7D3B> <7D3B> -<7D3C> <7D3C> -<7D3D> <7D3D> -<7D3E> <7D3F> -<7D40> <7D40> -<7D41> <7D41> -<7D42> <7D42> -<7D43> <7D43> -<7D44> <7D44> -<7D45> <7D45> -<7D46> <7D46> -<7D47> <7D47> -<7D4A> <7D4A> -<7D4E> <7D4E> -<7D4F> <7D4F> -<7D50> <7D50> -<7D51> <7D51> -<7D52> <7D52> -<7D53> <7D53> -<7D54> <7D54> -<7D55> <7D55> -<7D56> <7D56> -<7D58> <7D58> -<7D5B> <7D5B> -<7D5C> <7D5C> -<7D5E> <7D5E> -<7D5F> <7D5F> -<7D61> <7D61> -<7D62> <7D62> -<7D63> <7D63> -<7D66> <7D66> -<7D67> <7D67> -<7D68> <7D68> -<7D69> <7D69> -<7D6A> <7D6A> -<7D6B> <7D6B> -<7D6D> <7D6D> -<7D6E> <7D6E> -<7D6F> <7D6F> -<7D70> <7D70> -<7D71> <7D71> -<7D72> <7D72> -<7D73> <7D73> -<7D79> <7D79> -<7D7A> <7D7A> -<7D7B> <7D7B> -<7D7C> <7D7C> -endbfrange - -100 beginbfrange -<7D7D> <7D7D> -<7D7F> <7D7F> -<7D80> <7D80> -<7D81> <7D81> -<7D83> <7D83> -<7D84> <7D84> -<7D85> <7D85> -<7D86> <7D86> -<7D88> <7D88> -<7D8C> <7D8C> -<7D8D> <7D8D> -<7D8E> <7D8E> -<7D8F> <7D8F> -<7D91> <7D91> -<7D92> <7D92> -<7D93> <7D93> -<7D94> <7D94> -<7D96> <7D96> -<7D9C> <7D9C> -<7D9D> <7D9D> -<7D9E> <7D9E> -<7D9F> <7D9F> -<7DA0> <7DA0> -<7DA1> <7DA1> -<7DA2> <7DA2> -<7DA3> <7DA3> -<7DA6> <7DA6> -<7DA7> <7DA7> -<7DA9> <7DA9> -<7DAA> <7DAA> -<7DAC> <7DAC> -<7DAD> <7DAD> -<7DAE> <7DAE> -<7DAF> <7DAF> -<7DB0> <7DB0> -<7DB1> <7DB1> -<7DB2> <7DB2> -<7DB4> <7DB4> -<7DB5> <7DB5> -<7DB7> <7DB7> -<7DB8> <7DB8> -<7DB9> <7DB9> -<7DBA> <7DBA> -<7DBB> <7DBB> -<7DBC> <7DBC> -<7DBD> <7DBE> -<7DBF> <7DBF> -<7DC0> <7DC0> -<7DC1> <7DC1> -<7DC2> <7DC2> -<7DC4> <7DC4> -<7DC5> <7DC5> -<7DC6> <7DC6> -<7DC7> <7DC7> -<7DC9> <7DC9> -<7DCA> <7DCA> -<7DCB> <7DCC> -<7DCE> <7DCE> -<7DD2> <7DD2> -<7DD7> <7DD7> -<7DD8> <7DD8> -<7DD9> <7DD9> -<7DDA> <7DDA> -<7DDB> <7DDB> -<7DDD> <7DDD> -<7DDE> <7DDE> -<7DDF> <7DDF> -<7DE0> <7DE0> -<7DE1> <7DE1> -<7DE3> <7DE3> -<7DE6> <7DE6> -<7DE7> <7DE7> -<7DE8> <7DE8> -<7DE9> <7DE9> -<7DEA> <7DEA> -<7DEC> <7DEC> -<7DEE> <7DEE> -<7DEF> <7DEF> -<7DF0> <7DF0> -<7DF1> <7DF1> -<7DF2> <7DF2> -<7DF3> <7DF3> -<7DF4> <7DF4> -<7DF6> <7DF6> -<7DF7> <7DF7> -<7DF9> <7DF9> -<7DFA> <7DFA> -<7DFB> <7DFB> -<7E03> <7E03> -<7E08> <7E08> -<7E09> <7E09> -<7E0A> <7E0A> -<7E0B> <7E0B> -<7E0C> <7E0C> -<7E0D> <7E0D> -<7E0E> <7E0E> -<7E0F> <7E0F> -<7E10> <7E10> -<7E11> <7E11> -<7E12> <7E12> -endbfrange - -100 beginbfrange -<7E13> <7E13> -<7E14> <7E14> -<7E15> <7E15> -<7E16> <7E16> -<7E17> <7E17> -<7E1A> <7E1A> -<7E1B> <7E1B> -<7E1C> <7E1C> -<7E1D> <7E1D> -<7E1E> <7E1E> -<7E1F> <7E20> -<7E21> <7E21> -<7E22> <7E22> -<7E23> <7E23> -<7E24> <7E24> -<7E25> <7E25> -<7E29> <7E29> -<7E2A> <7E2A> -<7E2B> <7E2B> -<7E2D> <7E2D> -<7E2E> <7E2E> -<7E2F> <7E2F> -<7E30> <7E30> -<7E31> <7E31> -<7E32> <7E32> -<7E33> <7E33> -<7E34> <7E34> -<7E35> <7E35> -<7E36> <7E36> -<7E37> <7E37> -<7E38> <7E38> -<7E39> <7E39> -<7E3A> <7E3A> -<7E3B> <7E3B> -<7E3C> <7E3C> -<7E3D> <7E3D> -<7E3E> <7E3E> -<7E3F> <7E3F> -<7E40> <7E40> -<7E41> <7E41> -<7E42> <7E42> -<7E43> <7E43> -<7E44> <7E44> -<7E45> <7E45> -<7E46> <7E46> -<7E47> <7E47> -<7E48> <7E48> -<7E49> <7E49> -<7E4C> <7E4C> -<7E50> <7E50> -<7E51> <7E51> -<7E52> <7E52> -<7E53> <7E53> -<7E54> <7E55> -<7E56> <7E56> -<7E57> <7E57> -<7E58> <7E58> -<7E59> <7E59> -<7E5A> <7E5A> -<7E5C> <7E5C> -<7E5E> <7E5E> -<7E5F> <7E5F> -<7E60> <7E60> -<7E61> <7E61> -<7E62> <7E62> -<7E63> <7E63> -<7E68> <7E68> -<7E69> <7E6A> -<7E6B> <7E6B> -<7E6D> <7E6D> -<7E6F> <7E6F> -<7E70> <7E70> -<7E72> <7E72> -<7E73> <7E73> -<7E74> <7E74> -<7E75> <7E75> -<7E76> <7E76> -<7E77> <7E77> -<7E78> <7E78> -<7E79> <7E79> -<7E7A> <7E7A> -<7E7B> <7E7B> -<7E7C> <7E7C> -<7E7D> <7E7D> -<7E7E> <7E7E> -<7E80> <7E80> -<7E81> <7E81> -<7E82> <7E82> -<7E86> <7E86> -<7E87> <7E88> -<7E8A> <7E8A> -<7E8B> <7E8B> -<7E8C> <7E8C> -<7E8D> <7E8D> -<7E8F> <7E8F> -<7E91> <7E91> -<7E93> <7E93> -<7E94> <7E94> -<7E95> <7E95> -<7E96> <7E96> -endbfrange - -100 beginbfrange -<7E97> <7E97> -<7E98> <7E98> -<7E99> <7E99> -<7E9A> <7E9A> -<7E9B> <7E9B> -<7E9C> <7E9C> -<7F36> <7F36> -<7F38> <7F38> -<7F39> <7F39> -<7F3A> <7F3A> -<7F3D> <7F3D> -<7F3E> <7F3F> -<7F43> <7F43> -<7F44> <7F44> -<7F45> <7F45> -<7F48> <7F48> -<7F4A> <7F4A> -<7F4B> <7F4B> -<7F4C> <7F4C> -<7F4D> <7F4D> -<7F4F> <7F4F> -<7F50> <7F50> -<7F51> <7F51> -<7F54> <7F54> -<7F55> <7F55> -<7F58> <7F58> -<7F5B> <7F5B> -<7F5C> <7F5C> -<7F5D> <7F5D> -<7F5E> <7F5E> -<7F5F> <7F5F> -<7F60> <7F60> -<7F61> <7F61> -<7F63> <7F63> -<7F65> <7F65> -<7F66> <7F66> -<7F67> <7F68> -<7F69> <7F6A> -<7F6B> <7F6B> -<7F6C> <7F6C> -<7F6D> <7F6D> -<7F6E> <7F6E> -<7F70> <7F70> -<7F72> <7F72> -<7F73> <7F73> -<7F75> <7F75> -<7F76> <7F76> -<7F77> <7F77> -<7F79> <7F79> -<7F7A> <7F7A> -<7F7B> <7F7C> -<7F7D> <7F7D> -<7F7E> <7F7E> -<7F7F> <7F7F> -<7F83> <7F83> -<7F85> <7F85> -<7F86> <7F86> -<7F87> <7F87> -<7F88> <7F88> -<7F89> <7F89> -<7F8A> <7F8A> -<7F8B> <7F8B> -<7F8C> <7F8C> -<7F8D> <7F8D> -<7F8E> <7F8E> -<7F91> <7F91> -<7F92> <7F92> -<7F94> <7F94> -<7F95> <7F95> -<7F96> <7F96> -<7F9A> <7F9A> -<7F9B> <7F9B> -<7F9C> <7F9D> -<7F9E> <7F9E> -<7FA0> <7FA1> -<7FA2> <7FA2> -<7FA4> <7FA4> -<7FA5> <7FA5> -<7FA6> <7FA6> -<7FA7> <7FA7> -<7FA8> <7FA8> -<7FA9> <7FA9> -<7FAC> <7FAC> -<7FAD> <7FAD> -<7FAF> <7FAF> -<7FB0> <7FB0> -<7FB1> <7FB1> -<7FB2> <7FB2> -<7FB3> <7FB3> -<7FB5> <7FB5> -<7FB6> <7FB6> -<7FB7> <7FB7> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBA> <7FBA> -<7FBB> <7FBB> -<7FBC> <7FBC> -<7FBD> <7FBD> -<7FBE> <7FBE> -<7FBF> <7FBF> -endbfrange - -100 beginbfrange -<7FC0> <7FC0> -<7FC1> <7FC1> -<7FC2> <7FC2> -<7FC3> <7FC3> -<7FC5> <7FC5> -<7FC7> <7FC7> -<7FC9> <7FC9> -<7FCA> <7FCB> -<7FCC> <7FCC> -<7FCD> <7FCD> -<7FCE> <7FCE> -<7FCF> <7FCF> -<7FD0> <7FD1> -<7FD2> <7FD2> -<7FD4> <7FD5> -<7FD7> <7FD7> -<7FDB> <7FDC> -<7FDE> <7FDE> -<7FDF> <7FDF> -<7FE0> <7FE1> -<7FE2> <7FE3> -<7FE5> <7FE5> -<7FE6> <7FE6> -<7FE8> <7FE8> -<7FE9> <7FE9> -<7FEA> <7FEA> -<7FEB> <7FEB> -<7FEC> <7FEC> -<7FED> <7FED> -<7FEE> <7FEE> -<7FEF> <7FEF> -<7FF0> <7FF1> -<7FF2> <7FF2> -<7FF3> <7FF3> -<7FF4> <7FF4> -<7FF5> <7FF5> -<7FF7> <7FF8> -<7FF9> <7FF9> -<7FFB> <7FFB> -<7FFC> <7FFC> -<7FFD> <7FFE> -<7FFF> <7FFF> -<8000> <8000> -<8001> <8001> -<8003> <8003> -<8004> <8004> -<8005> <8005> -<8006> <8006> -<8007> <8007> -<800B> <800B> -<800C> <800C> -<800D> <800D> -<800E> <800F> -<8010> <8010> -<8011> <8011> -<8012> <8012> -<8014> <8014> -<8015> <8015> -<8016> <8016> -<8017> <8017> -<8018> <8018> -<8019> <8019> -<801B> <801B> -<801C> <801C> -<801E> <801E> -<801F> <801F> -<8021> <8021> -<8024> <8024> -<8026> <8026> -<8028> <8028> -<8029> <8029> -<802A> <802A> -<802C> <802C> -<8030> <8030> -<8033> <8033> -<8034> <8034> -<8035> <8035> -<8036> <8036> -<8037> <8037> -<8039> <8039> -<803D> <803D> -<803E> <803E> -<803F> <803F> -<8043> <8043> -<8046> <8046> -<8047> <8047> -<8048> <8048> -<804A> <804A> -<804F> <8050> -<8051> <8051> -<8052> <8052> -<8056> <8056> -<8058> <8058> -<805A> <805A> -<805C> <805C> -<805D> <805D> -<805E> <805E> -<8064> <8064> -<8067> <8067> -<806C> <806C> -endbfrange - -100 beginbfrange -<806F> <806F> -<8070> <8070> -<8071> <8072> -<8073> <8073> -<8075> <8075> -<8076> <8076> -<8077> <8077> -<8078> <8078> -<8079> <8079> -<807D> <807D> -<807E> <807E> -<807F> <807F> -<8082> <8082> -<8084> <8084> -<8085> <8085> -<8086> <8086> -<8087> <8087> -<8089> <8089> -<808A> <808A> -<808B> <808C> -<808F> <808F> -<8090> <8090> -<8092> <8092> -<8093> <8093> -<8095> <8095> -<8096> <8096> -<8098> <8098> -<8099> <8099> -<809A> <809A> -<809B> <809B> -<809C> <809C> -<809D> <809D> -<80A1> <80A1> -<80A2> <80A2> -<80A3> <80A3> -<80A5> <80A5> -<80A9> <80A9> -<80AA> <80AA> -<80AB> <80AB> -<80AD> <80AD> -<80AE> <80AE> -<80AF> <80AF> -<80B1> <80B1> -<80B2> <80B2> -<80B4> <80B4> -<80B5> <80B5> -<80B8> <80B8> -<80BA> <80BA> -<80C2> <80C2> -<80C3> <80C4> -<80C5> <80C5> -<80C7> <80C7> -<80C8> <80C8> -<80C9> <80C9> -<80CA> <80CA> -<80CC> <80CC> -<80CD> <80CD> -<80CE> <80CE> -<80CF> <80CF> -<80D0> <80D0> -<80D1> <80D1> -<80D4> <80D4> -<80D5> <80D5> -<80D6> <80D6> -<80D7> <80D7> -<80D8> <80D8> -<80D9> <80D9> -<80DA> <80DA> -<80DB> <80DB> -<80DC> <80DC> -<80DD> <80DD> -<80DE> <80DE> -<80E0> <80E0> -<80E1> <80E1> -<80E3> <80E3> -<80E4> <80E4> -<80E5> <80E5> -<80E6> <80E6> -<80ED> <80ED> -<80EF> <80EF> -<80F0> <80F0> -<80F1> <80F1> -<80F2> <80F2> -<80F3> <80F3> -<80F4> <80F4> -<80F5> <80F5> -<80F8> <80F8> -<80F9> <80F9> -<80FA> <80FA> -<80FB> <80FB> -<80FC> <80FC> -<80FD> <80FD> -<80FE> <80FE> -<8100> <8100> -<8101> <8101> -<8102> <8102> -<8105> <8105> -<8106> <8106> -<8108> <8108> -<810A> <810A> -endbfrange - -100 beginbfrange -<8115> <8115> -<8116> <8116> -<8118> <8118> -<8119> <8119> -<811B> <811B> -<811D> <811D> -<811E> <811E> -<811F> <811F> -<8121> <8121> -<8122> <8122> -<8123> <8123> -<8124> <8124> -<8125> <8125> -<8127> <8127> -<8129> <8129> -<812B> <812B> -<812C> <812C> -<812D> <812D> -<812F> <812F> -<8130> <8130> -<8139> <8139> -<813A> <813A> -<813D> <813D> -<813E> <813E> -<8143> <8143> -<8144> <8144> -<8146> <8146> -<8147> <8147> -<814A> <814A> -<814B> <814B> -<814C> <814C> -<814D> <814D> -<814E> <814E> -<814F> <814F> -<8150> <8150> -<8151> <8151> -<8152> <8152> -<8153> <8153> -<8154> <8154> -<8155> <8155> -<815B> <815B> -<815C> <815C> -<815E> <815E> -<8160> <8160> -<8161> <8161> -<8162> <8162> -<8164> <8164> -<8165> <8165> -<8166> <8166> -<8167> <8167> -<8169> <8169> -<816B> <816B> -<816E> <816E> -<816F> <816F> -<8170> <8170> -<8171> <8171> -<8172> <8172> -<8173> <8173> -<8174> <8174> -<8176> <8176> -<8177> <8177> -<8178> <8178> -<8179> <817A> -<817F> <817F> -<8180> <8180> -<8182> <8182> -<8183> <8183> -<8186> <8186> -<8187> <8187> -<8188> <8188> -<8189> <8189> -<818A> <818A> -<818B> <818B> -<818C> <818C> -<818D> <818D> -<818F> <818F> -<8195> <8195> -<8197> <8197> -<8198> <8198> -<8199> <8199> -<819A> <819A> -<819B> <819D> -<819E> <819E> -<819F> <819F> -<81A0> <81A0> -<81A2> <81A2> -<81A3> <81A3> -<81A6> <81A6> -<81A7> <81A7> -<81A8> <81A8> -<81A9> <81A9> -<81AB> <81AB> -<81AC> <81AC> -<81AE> <81AE> -<81B0> <81B0> -<81B1> <81B1> -<81B2> <81B2> -<81B3> <81B3> -<81B4> <81B4> -<81B5> <81B5> -endbfrange - -100 beginbfrange -<81B7> <81B7> -<81B9> <81B9> -<81BA> <81BA> -<81BB> <81BB> -<81BC> <81BC> -<81BD> <81BD> -<81BE> <81BE> -<81BF> <81BF> -<81C0> <81C0> -<81C2> <81C2> -<81C3> <81C3> -<81C4> <81C4> -<81C5> <81C5> -<81C6> <81C6> -<81C7> <81C7> -<81C9> <81C9> -<81CA> <81CA> -<81CC> <81CC> -<81CD> <81CD> -<81CF> <81CF> -<81D0> <81D0> -<81D1> <81D2> -<81D5> <81D5> -<81D7> <81D7> -<81D8> <81D8> -<81D9> <81D9> -<81DA> <81DA> -<81DB> <81DB> -<81DD> <81DD> -<81DE> <81DE> -<81DF> <81DF> -<81E0> <81E1> -<81E2> <81E2> -<81E3> <81E3> -<81E5> <81E5> -<81E6> <81E6> -<81E7> <81E7> -<81E8> <81E8> -<81E9> <81E9> -<81EA> <81EA> -<81EC> <81EC> -<81ED> <81ED> -<81EE> <81EE> -<81F2> <81F2> -<81F3> <81F3> -<81F4> <81F4> -<81F7> <81F9> -<81FA> <81FA> -<81FB> <81FB> -<81FC> <81FC> -<81FE> <81FE> -<81FF> <81FF> -<8200> <8200> -<8201> <8201> -<8202> <8202> -<8204> <8204> -<8205> <8205> -<8207> <8207> -<8208> <8208> -<8209> <8209> -<820A> <820A> -<820B> <820B> -<820C> <820C> -<820D> <820D> -<8210> <8210> -<8211> <8211> -<8212> <8212> -<8214> <8214> -<8215> <8215> -<8216> <8216> -<821B> <821B> -<821C> <821C> -<821D> <821D> -<821E> <821E> -<821F> <821F> -<8220> <8220> -<8221> <8221> -<8222> <8222> -<8225> <8225> -<8228> <8228> -<822A> <822B> -<822C> <822C> -<822F> <822F> -<8232> <8232> -<8233> <8233> -<8234> <8234> -<8235> <8235> -<8236> <8236> -<8237> <8237> -<8238> <8238> -<8239> <8239> -<823A> <823A> -<823C> <823D> -<823F> <823F> -<8240> <8240> -<8242> <8242> -<8244> <8244> -<8245> <8245> -<8247> <8247> -<8249> <8249> -endbfrange - -100 beginbfrange -<824B> <824B> -<824E> <824E> -<824F> <824F> -<8250> <8250> -<8251> <8251> -<8252> <8252> -<8253> <8253> -<8255> <8257> -<8258> <8259> -<825A> <825A> -<825B> <825B> -<825C> <825C> -<825E> <825E> -<825F> <825F> -<8261> <8261> -<8263> <8263> -<8264> <8264> -<8266> <8266> -<8268> <8269> -<826B> <826B> -<826C> <826C> -<826D> <826D> -<826E> <826E> -<826F> <826F> -<8271> <8271> -<8272> <8272> -<8274> <8274> -<8275> <8275> -<8277> <8277> -<8278> <8278> -<827C> <827C> -<827D> <827D> -<827E> <827E> -<827F> <827F> -<8280> <8280> -<8283> <8284> -<8285> <8285> -<828A> <828A> -<828B> <828B> -<828D> <828D> -<828E> <828E> -<828F> <828F> -<8290> <8290> -<8291> <8291> -<8292> <8292> -<8293> <8293> -<8294> <8294> -<8298> <8298> -<8299> <8299> -<829A> <829A> -<829B> <829B> -<829D> <829D> -<829E> <829E> -<829F> <829F> -<82A0> <82A0> -<82A1> <82A1> -<82A2> <82A2> -<82A3> <82A3> -<82A4> <82A4> -<82A5> <82A5> -<82A7> <82A7> -<82A8> <82A8> -<82A9> <82A9> -<82AB> <82AB> -<82AC> <82AC> -<82AD> <82AD> -<82AE> <82AE> -<82AF> <82AF> -<82B0> <82B0> -<82B1> <82B1> -<82B3> <82B3> -<82B4> <82B4> -<82B5> <82B5> -<82B6> <82B6> -<82B7> <82B7> -<82B8> <82B8> -<82B9> <82B9> -<82BA> <82BA> -<82BB> <82BB> -<82BC> <82BC> -<82BD> <82BD> -<82BE> <82BE> -<82C0> <82C0> -<82C2> <82C2> -<82C3> <82C3> -<82D1> <82D1> -<82D2> <82D2> -<82D3> <82D3> -<82D4> <82D4> -<82D5> <82D5> -<82D6> <82D6> -<82D7> <82D7> -<82D9> <82D9> -<82DB> <82DB> -<82DC> <82DC> -<82DE> <82DE> -<82DF> <82DF> -<82E0> <82E0> -<82E1> <82E1> -<82E3> <82E3> -endbfrange - -100 beginbfrange -<82E4> <82E4> -<82E5> <82E5> -<82E6> <82E6> -<82E7> <82E7> -<82E8> <82E8> -<82EA> <82EA> -<82EB> <82EB> -<82EC> <82EC> -<82ED> <82ED> -<82EF> <82EF> -<82F0> <82F0> -<82F1> <82F1> -<82F2> <82F2> -<82F3> <82F3> -<82F4> <82F4> -<82F5> <82F5> -<82F6> <82F6> -<82F9> <82F9> -<82FA> <82FA> -<82FB> <82FB> -<82FE> <82FE> -<8300> <8300> -<8301> <8301> -<8302> <8302> -<8303> <8303> -<8304> <8304> -<8305> <8305> -<8306> <8306> -<8307> <8307> -<8308> <8308> -<8309> <8309> -<830C> <830C> -<830D> <830D> -<8316> <8316> -<8317> <8317> -<8319> <8319> -<831B> <831B> -<831C> <831C> -<831E> <831E> -<8320> <8320> -<8322> <8322> -<8324> <8324> -<8325> <8325> -<8326> <8326> -<8327> <8327> -<8328> <8328> -<8329> <8329> -<832A> <832A> -<832B> <832B> -<832C> <832C> -<832D> <832D> -<832F> <832F> -<8331> <8331> -<8332> <8332> -<8333> <8333> -<8334> <8334> -<8335> <8335> -<8336> <8336> -<8337> <8337> -<8338> <8338> -<8339> <8339> -<833A> <833A> -<833B> <833B> -<833C> <833C> -<833F> <833F> -<8340> <8340> -<8341> <8341> -<8342> <8342> -<8343> <8343> -<8344> <8344> -<8345> <8345> -<8347> <8347> -<8348> <8348> -<8349> <8349> -<834A> <834A> -<834B> <834B> -<834C> <834C> -<834D> <834D> -<834E> <834E> -<834F> <834F> -<8350> <8350> -<8351> <8351> -<8352> <8352> -<8353> <8353> -<8354> <8354> -<8356> <8356> -<8373> <8373> -<8374> <8374> -<8375> <8375> -<8376> <8376> -<8377> <8377> -<8378> <8378> -<837A> <837A> -<837B> <837C> -<837D> <837D> -<837E> <837E> -<837F> <837F> -<8381> <8381> -<8383> <8383> -<8386> <8386> -endbfrange - -100 beginbfrange -<8387> <8387> -<8388> <8388> -<8389> <8389> -<838A> <838A> -<838B> <838B> -<838C> <838C> -<838D> <838D> -<838E> <838E> -<838F> <838F> -<8390> <8390> -<8392> <8392> -<8393> <8393> -<8394> <8394> -<8395> <8395> -<8396> <8396> -<8397> <8397> -<8398> <8398> -<8399> <8399> -<839A> <839A> -<839B> <839B> -<839D> <839D> -<839E> <839E> -<83A0> <83A0> -<83A2> <83A2> -<83A3> <83A3> -<83A4> <83A4> -<83A5> <83A5> -<83A6> <83A6> -<83A7> <83A7> -<83A8> <83A8> -<83A9> <83A9> -<83AA> <83AA> -<83AB> <83AB> -<83AE> <83AE> -<83AF> <83AF> -<83B0> <83B0> -<83BD> <83BD> -<83BF> <83BF> -<83C0> <83C0> -<83C1> <83C1> -<83C2> <83C2> -<83C3> <83C3> -<83C4> <83C4> -<83C5> <83C5> -<83C6> <83C6> -<83C7> <83C7> -<83C8> <83C8> -<83C9> <83C9> -<83CA> <83CA> -<83CB> <83CB> -<83CC> <83CC> -<83CE> <83CE> -<83CF> <83CF> -<83D1> <83D1> -<83D4> <83D4> -<83D5> <83D5> -<83D6> <83D6> -<83D7> <83D7> -<83D8> <83D8> -<83D9> <83D9> -<83DB> <83DB> -<83DC> <83DC> -<83DD> <83DD> -<83DE> <83DE> -<83DF> <83DF> -<83E0> <83E0> -<83E1> <83E1> -<83E2> <83E2> -<83E3> <83E3> -<83E4> <83E4> -<83E5> <83E5> -<83E7> <83E7> -<83E8> <83E8> -<83E9> <83E9> -<83EA> <83EA> -<83EB> <83EB> -<83EC> <83EC> -<83EE> <83EE> -<83EF> <83EF> -<83F0> <83F0> -<83F1> <83F1> -<83F2> <83F2> -<83F3> <83F3> -<83F4> <83F4> -<83F5> <83F5> -<83F6> <83F6> -<83F8> <83F8> -<83F9> <83F9> -<83FA> <83FA> -<83FB> <83FB> -<83FC> <83FC> -<83FD> <83FD> -<83FE> <83FE> -<83FF> <83FF> -<8401> <8401> -<8403> <8403> -<8404> <8404> -<8406> <8406> -<8407> <8407> -<8409> <8409> -endbfrange - -100 beginbfrange -<840A> <840A> -<840B> <840B> -<840C> <840C> -<840D> <840D> -<840E> <840E> -<840F> <840F> -<8410> <8410> -<8411> <8411> -<8412> <8412> -<8413> <8413> -<841B> <841B> -<8423> <8423> -<8429> <8429> -<842B> <842B> -<842C> <842C> -<842D> <842D> -<842F> <842F> -<8430> <8430> -<8431> <8431> -<8432> <8432> -<8433> <8433> -<8434> <8434> -<8435> <8435> -<8436> <8436> -<8437> <8437> -<8438> <8438> -<8439> <8439> -<843A> <843A> -<843B> <843B> -<843C> <843C> -<843D> <843D> -<843F> <843F> -<8440> <8440> -<8442> <8442> -<8443> <8443> -<8444> <8444> -<8445> <8445> -<8446> <8446> -<8447> <8447> -<8449> <8449> -<844B> <844B> -<844C> <844C> -<844D> <844D> -<844E> <844E> -<8450> <8450> -<8451> <8451> -<8452> <8452> -<8454> <8454> -<8456> <8456> -<8457> <8457> -<8459> <8459> -<845A> <845A> -<845B> <845B> -<845D> <845D> -<845E> <845E> -<845F> <845F> -<8460> <8460> -<8461> <8461> -<8463> <8463> -<8465> <8465> -<8466> <8466> -<8467> <8467> -<8468> <8468> -<8469> <8469> -<846B> <846B> -<846C> <846C> -<846D> <846D> -<846E> <846E> -<846F> <846F> -<8470> <8470> -<8473> <8473> -<8474> <8474> -<8475> <8475> -<8476> <8476> -<8477> <8477> -<8478> <8478> -<8479> <8479> -<847A> <847A> -<847D> <847D> -<847E> <847E> -<8482> <8482> -<8486> <8486> -<848D> <848D> -<848E> <848E> -<848F> <848F> -<8490> <8490> -<8491> <8491> -<8494> <8494> -<8497> <8497> -<8498> <8498> -<8499> <8499> -<849A> <849A> -<849B> <849B> -<849C> <849C> -<849D> <849D> -<849E> <849E> -<849F> <849F> -<84A0> <84A0> -<84A1> <84A1> -<84A2> <84A2> -endbfrange - -100 beginbfrange -<84A4> <84A4> -<84A7> <84A7> -<84A8> <84A8> -<84A9> <84A9> -<84AA> <84AA> -<84AB> <84AB> -<84AC> <84AC> -<84AE> <84AE> -<84AF> <84AF> -<84B0> <84B0> -<84B1> <84B1> -<84B2> <84B2> -<84B4> <84B4> -<84B6> <84B6> -<84B8> <84B8> -<84B9> <84B9> -<84BA> <84BA> -<84BB> <84BB> -<84BC> <84BC> -<84BF> <84BF> -<84C0> <84C0> -<84C1> <84C1> -<84C2> <84C2> -<84C4> <84C4> -<84C5> <84C5> -<84C6> <84C6> -<84C7> <84C7> -<84C9> <84C9> -<84CA> <84CA> -<84CB> <84CB> -<84CC> <84CC> -<84CD> <84CD> -<84CE> <84CE> -<84CF> <84CF> -<84D0> <84D0> -<84D1> <84D1> -<84D2> <84D2> -<84D3> <84D3> -<84D4> <84D4> -<84D6> <84D6> -<84D7> <84D7> -<84DB> <84DB> -<84E7> <84E8> -<84E9> <84E9> -<84EA> <84EA> -<84EB> <84EB> -<84EC> <84EC> -<84EE> <84EE> -<84EF> <84EF> -<84F0> <84F0> -<84F1> <84F1> -<84F2> <84F2> -<84F3> <84F3> -<84F4> <84F4> -<84F6> <84F6> -<84F7> <84F7> -<84F9> <84F9> -<84FA> <84FA> -<84FB> <84FB> -<84FC> <84FC> -<84FD> <84FD> -<84FE> <84FE> -<84FF> <84FF> -<8500> <8500> -<8502> <8502> -<8506> <8506> -<8507> <8507> -<8508> <8508> -<8509> <8509> -<850A> <850A> -<850B> <850B> -<850C> <850C> -<850D> <850D> -<850E> <850E> -<850F> <850F> -<8511> <8511> -<8512> <8512> -<8513> <8513> -<8514> <8514> -<8515> <8515> -<8516> <8516> -<8517> <8517> -<8518> <8518> -<8519> <8519> -<851A> <851A> -<851C> <851C> -<851D> <851D> -<851E> <851E> -<851F> <851F> -<8520> <8520> -<8521> <8521> -<8523> <8523> -<8524> <8524> -<8525> <8525> -<8526> <8526> -<8527> <8527> -<8528> <8528> -<8529> <8529> -<852A> <852A> -<852B> <852B> -endbfrange - -100 beginbfrange -<852C> <852D> -<852E> <852E> -<852F> <852F> -<8530> <8530> -<8531> <8531> -<853B> <853B> -<853D> <853D> -<853E> <853E> -<8540> <8540> -<8541> <8541> -<8543> <8543> -<8544> <8544> -<8545> <8545> -<8546> <8546> -<8547> <8547> -<8548> <8548> -<8549> <8549> -<854A> <854A> -<854D> <854D> -<854E> <854E> -<8551> <8551> -<8553> <8553> -<8554> <8554> -<8555> <8555> -<8556> <8556> -<8557> <8557> -<8558> <8558> -<8559> <8559> -<855B> <855B> -<855D> <855D> -<855E> <855E> -<8560> <8560> -<8561> <8561> -<8562> <8562> -<8563> <8563> -<8564> <8564> -<8565> <8565> -<8566> <8566> -<8567> <8567> -<8568> <8569> -<856A> <856A> -<856B> <856B> -<856C> <856C> -<856D> <856D> -<856E> <856E> -<8571> <8571> -<8575> <8575> -<8576> <8576> -<8577> <8577> -<8578> <8578> -<8579> <8579> -<857A> <857A> -<857B> <857B> -<857C> <857C> -<857E> <857E> -<8580> <8580> -<8581> <8581> -<8582> <8582> -<8583> <8583> -<8584> <8584> -<8585> <8585> -<8586> <8586> -<8587> <8587> -<8588> <8588> -<8589> <8589> -<858A> <858A> -<858B> <858B> -<858C> <858C> -<858D> <858D> -<858E> <858E> -<858F> <858F> -<8590> <8590> -<8591> <8591> -<8594> <8594> -<8595> <8595> -<8596> <8596> -<8598> <8598> -<8599> <8599> -<859A> <859A> -<859B> <859B> -<859C> <859C> -<859D> <859D> -<859E> <859E> -<859F> <859F> -<85A0> <85A0> -<85A1> <85A1> -<85A2> <85A2> -<85A3> <85A3> -<85A4> <85A4> -<85A6> <85A6> -<85A7> <85A7> -<85A8> <85A8> -<85A9> <85A9> -<85AA> <85AA> -<85AF> <85AF> -<85B0> <85B0> -<85B1> <85B1> -<85B3> <85B3> -<85B4> <85B4> -<85B5> <85B5> -endbfrange - -100 beginbfrange -<85B6> <85B6> -<85B7> <85B7> -<85B8> <85B8> -<85B9> <85B9> -<85BA> <85BA> -<85BD> <85BD> -<85BE> <85BE> -<85BF> <85BF> -<85C0> <85C0> -<85C2> <85C2> -<85C3> <85C3> -<85C4> <85C4> -<85C5> <85C5> -<85C6> <85C6> -<85C7> <85C7> -<85C8> <85C8> -<85C9> <85C9> -<85CB> <85CB> -<85CD> <85CD> -<85CE> <85CE> -<85CF> <85CF> -<85D0> <85D0> -<85D1> <85D1> -<85D2> <85D2> -<85D5> <85D5> -<85D7> <85D7> -<85D8> <85D8> -<85D9> <85D9> -<85DA> <85DA> -<85DC> <85DC> -<85DD> <85DD> -<85DE> <85DE> -<85DF> <85DF> -<85E1> <85E1> -<85E2> <85E2> -<85E3> <85E3> -<85E4> <85E5> -<85E6> <85E6> -<85E8> <85E8> -<85E9> <85E9> -<85EA> <85EA> -<85EB> <85EB> -<85EC> <85EC> -<85ED> <85ED> -<85EF> <85EF> -<85F0> <85F0> -<85F1> <85F1> -<85F2> <85F2> -<85F6> <85F6> -<85F7> <85F7> -<85F8> <85F8> -<85F9> <85F9> -<85FA> <85FA> -<85FB> <85FB> -<85FD> <85FD> -<85FE> <85FE> -<85FF> <85FF> -<8600> <8600> -<8601> <8601> -<8604> <8604> -<8605> <8605> -<8606> <8606> -<8607> <8607> -<8609> <8609> -<860A> <860A> -<860B> <860B> -<860C> <860C> -<8611> <8611> -<8617> <8617> -<8618> <8618> -<8619> <8619> -<861A> <861A> -<861B> <861B> -<861C> <861C> -<861E> <861E> -<861F> <861F> -<8620> <8620> -<8621> <8621> -<8622> <8622> -<8623> <8623> -<8624> <8624> -<8625> <8625> -<8626> <8626> -<8627> <8627> -<8629> <8629> -<862A> <862A> -<862C> <862C> -<862D> <862D> -<862E> <862E> -<8631> <8631> -<8632> <8632> -<8633> <8633> -<8634> <8635> -<8636> <8636> -<8638> <8638> -<8639> <8639> -<863A> <863A> -<863B> <863B> -<863C> <863C> -<863E> <863E> -endbfrange - -100 beginbfrange -<863F> <863F> -<8640> <8640> -<8643> <8643> -<8646> <8648> -<864B> <864B> -<864C> <864C> -<864D> <864D> -<864E> <864E> -<8650> <8650> -<8652> <8652> -<8653> <8653> -<8654> <8654> -<8655> <8655> -<8656> <8656> -<8659> <8659> -<865B> <865B> -<865C> <865C> -<865E> <865E> -<865F> <865F> -<8661> <8661> -<8662> <8662> -<8663> <8663> -<8664> <8664> -<8665> <8665> -<8667> <8667> -<8668> <8668> -<8669> <8669> -<866A> <866A> -<866B> <866B> -<866D> <866E> -<866F> <866F> -<8670> <8670> -<8671> <8671> -<8673> <8673> -<8674> <8674> -<8677> <8677> -<8679> <8679> -<867A> <867A> -<867B> <867B> -<867C> <867C> -<8685> <8685> -<8686> <8686> -<8687> <8687> -<868A> <868A> -<868B> <868B> -<868C> <868C> -<868D> <868D> -<868E> <868E> -<8690> <8690> -<8691> <8691> -<8693> <8693> -<8694> <8694> -<8695> <8695> -<8696> <8696> -<8697> <8697> -<8698> <8698> -<8699> <8699> -<869A> <869A> -<869C> <869C> -<869D> <869D> -<869E> <869E> -<86A1> <86A1> -<86A2> <86A2> -<86A3> <86A3> -<86A4> <86A4> -<86A5> <86A5> -<86A7> <86A7> -<86A8> <86A8> -<86A9> <86A9> -<86AA> <86AA> -<86AF> <86AF> -<86B0> <86B0> -<86B1> <86B1> -<86B3> <86B3> -<86B4> <86B4> -<86B5> <86B5> -<86B6> <86B6> -<86B7> <86B7> -<86B8> <86B8> -<86B9> <86B9> -<86BA> <86BA> -<86BB> <86BC> -<86BD> <86BE> -<86BF> <86BF> -<86C0> <86C0> -<86C1> <86C1> -<86C2> <86C2> -<86C3> <86C3> -<86C4> <86C4> -<86C5> <86C5> -<86C6> <86C6> -<86C7> <86C7> -<86C8> <86C8> -<86C9> <86C9> -<86CB> <86CB> -<86CC> <86CC> -<86D0> <86D0> -<86D1> <86D1> -<86D3> <86D3> -<86D4> <86D4> -endbfrange - -100 beginbfrange -<86D6> <86D6> -<86D7> <86D7> -<86D8> <86D8> -<86D9> <86D9> -<86DA> <86DA> -<86DB> <86DB> -<86DC> <86DC> -<86DD> <86DD> -<86DE> <86DE> -<86DF> <86DF> -<86E2> <86E2> -<86E3> <86E3> -<86E4> <86E4> -<86E6> <86E6> -<86E8> <86E8> -<86E9> <86E9> -<86EA> <86EA> -<86EB> <86EB> -<86EC> <86EC> -<86ED> <86ED> -<86F5> <86F5> -<86F6> <86F6> -<86F7> <86F7> -<86F8> <86F8> -<86F9> <86F9> -<86FA> <86FA> -<86FB> <86FB> -<86FE> <86FE> -<8700> <8700> -<8701> <8701> -<8702> <8703> -<8704> <8704> -<8705> <8705> -<8706> <8706> -<8707> <8707> -<8708> <8708> -<8709> <8709> -<870A> <870A> -<870B> <870B> -<870C> <870C> -<870D> <870D> -<870E> <870E> -<8711> <8711> -<8712> <8712> -<8713> <8713> -<8718> <8718> -<8719> <8719> -<871A> <871A> -<871B> <871B> -<871C> <871C> -<871E> <871E> -<8720> <8720> -<8721> <8721> -<8722> <8722> -<8723> <8723> -<8724> <8724> -<8725> <8725> -<8726> <8727> -<8728> <8728> -<8729> <8729> -<872A> <872A> -<872C> <872C> -<872D> <872D> -<872E> <872E> -<8730> <8730> -<8731> <8731> -<8732> <8732> -<8733> <8733> -<8734> <8734> -<8735> <8735> -<8737> <8737> -<8738> <8738> -<873A> <873A> -<873B> <873B> -<873C> <873C> -<873E> <873E> -<873F> <873F> -<8740> <8740> -<8741> <8741> -<8742> <8742> -<8743> <8743> -<8746> <8746> -<874C> <874C> -<874D> <874D> -<874E> <874E> -<874F> <874F> -<8750> <8750> -<8751> <8751> -<8752> <8752> -<8753> <8753> -<8754> <8754> -<8755> <8755> -<8756> <8756> -<8757> <8757> -<8758> <8758> -<8759> <8759> -<875A> <875A> -<875B> <875B> -<875C> <875C> -<875D> <875D> -endbfrange - -100 beginbfrange -<875E> <875E> -<875F> <875F> -<8760> <8760> -<8761> <8761> -<8762> <8762> -<8763> <8764> -<8765> <8765> -<8766> <8766> -<8767> <8767> -<8768> <8768> -<8769> <8769> -<876A> <876A> -<876B> <876B> -<876C> <876C> -<876D> <876D> -<876E> <876E> -<876F> <876F> -<8773> <8773> -<8774> <8774> -<8775> <8775> -<8776> <8776> -<8777> <8777> -<8778> <8778> -<8779> <8779> -<877A> <877A> -<877B> <877B> -<8781> <8781> -<8782> <8782> -<8783> <8783> -<8784> <8784> -<8785> <8785> -<8787> <8787> -<8788> <8788> -<8789> <8789> -<878D> <878D> -<878F> <878F> -<8790> <8791> -<8792> <8792> -<8793> <8793> -<8794> <8794> -<8796> <8796> -<8797> <8797> -<8798> <8798> -<879A> <879A> -<879B> <879B> -<879C> <879C> -<879D> <879D> -<879E> <879E> -<879F> <879F> -<87A2> <87A2> -<87A3> <87A3> -<87A4> <87A4> -<87AA> <87AA> -<87AB> <87AB> -<87AC> <87AC> -<87AD> <87AD> -<87AE> <87AE> -<87AF> <87AF> -<87B0> <87B0> -<87B2> <87B2> -<87B3> <87B3> -<87B4> <87B4> -<87B5> <87B5> -<87B6> <87B6> -<87B7> <87B7> -<87B8> <87B8> -<87B9> <87B9> -<87BA> <87BA> -<87BB> <87BB> -<87BC> <87BC> -<87BD> <87BD> -<87BE> <87BE> -<87BF> <87BF> -<87C0> <87C0> -<87C2> <87C2> -<87C3> <87C3> -<87C4> <87C4> -<87C5> <87C5> -<87C6> <87C6> -<87C8> <87C8> -<87C9> <87C9> -<87CA> <87CA> -<87CB> <87CB> -<87CC> <87CC> -<87D1> <87D1> -<87D2> <87D2> -<87D3> <87D3> -<87D4> <87D4> -<87D7> <87D7> -<87D8> <87D8> -<87D9> <87D9> -<87DB> <87DB> -<87DC> <87DC> -<87DD> <87DD> -<87DE> <87DE> -<87DF> <87DF> -<87E0> <87E0> -<87E1> <87E1> -<87E2> <87E2> -<87E3> <87E3> -endbfrange - -100 beginbfrange -<87E4> <87E4> -<87E5> <87E5> -<87E6> <87E6> -<87E7> <87E7> -<87E8> <87E8> -<87EA> <87EA> -<87EB> <87EB> -<87EC> <87EC> -<87ED> <87ED> -<87EF> <87EF> -<87F2> <87F2> -<87F3> <87F3> -<87F4> <87F4> -<87F6> <87F7> -<87F9> <87F9> -<87FA> <87FA> -<87FB> <87FB> -<87FC> <87FC> -<87FE> <87FE> -<87FF> <87FF> -<8800> <8800> -<8801> <8801> -<8802> <8802> -<8803> <8803> -<8805> <8805> -<8806> <8806> -<8808> <8808> -<8809> <8809> -<880A> <880A> -<880B> <880B> -<880C> <880C> -<880D> <880D> -<8810> <8811> -<8813> <8813> -<8814> <8815> -<8816> <8816> -<8817> <8817> -<8819> <8819> -<881B> <881B> -<881C> <881C> -<881D> <881D> -<881F> <881F> -<8820> <8820> -<8821> <8821> -<8822> <8822> -<8823> <8823> -<8824> <8824> -<8825> <8825> -<8826> <8826> -<8828> <8828> -<8829> <8829> -<882A> <882A> -<882B> <882B> -<882C> <882C> -<882E> <882E> -<882F> <882F> -<8830> <8830> -<8831> <8831> -<8832> <8832> -<8833> <8833> -<8835> <8835> -<8836> <8836> -<8837> <8837> -<8838> <8838> -<8839> <8839> -<883B> <883B> -<883C> <883C> -<883D> <883D> -<883E> <883E> -<883F> <883F> -<8840> <8840> -<8841> <8841> -<8843> <8844> -<8848> <8848> -<884A> <884A> -<884B> <884B> -<884C> <884C> -<884D> <884D> -<884E> <884E> -<8852> <8852> -<8853> <8853> -<8855> <8855> -<8856> <8856> -<8857> <8857> -<8859> <8859> -<885A> <885A> -<885B> <885B> -<885D> <885D> -<8861> <8861> -<8862> <8862> -<8863> <8863> -<8867> <8867> -<8868> <8868> -<8869> <8869> -<886A> <886A> -<886B> <886B> -<886D> <886D> -<886F> <886F> -<8870> <8870> -<8871> <8871> -endbfrange - -100 beginbfrange -<8872> <8872> -<8874> <8874> -<8875> <8876> -<8877> <8877> -<8879> <8879> -<887C> <887C> -<887D> <887D> -<887E> <887E> -<887F> <887F> -<8880> <8880> -<8881> <8882> -<8883> <8883> -<8888> <8888> -<8889> <8889> -<888B> <888B> -<888C> <888C> -<888D> <888D> -<888E> <888E> -<8891> <8891> -<8892> <8892> -<8893> <8893> -<8895> <8895> -<8896> <8896> -<8897> <8897> -<8898> <8898> -<8899> <8899> -<889A> <889A> -<889B> <889B> -<889E> <889E> -<889F> <889F> -<88A1> <88A1> -<88A2> <88A2> -<88A4> <88A4> -<88A7> <88A7> -<88A8> <88A8> -<88AA> <88AA> -<88AB> <88AB> -<88AC> <88AC> -<88B1> <88B1> -<88B2> <88B2> -<88B6> <88B6> -<88B7> <88B7> -<88B8> <88B8> -<88B9> <88B9> -<88BA> <88BA> -<88BC> <88BC> -<88BD> <88BD> -<88BE> <88BE> -<88C0> <88C0> -<88C1> <88C2> -<88C9> <88C9> -<88CA> <88CA> -<88CB> <88CB> -<88CC> <88CC> -<88CD> <88CE> -<88D0> <88D0> -<88D2> <88D2> -<88D4> <88D4> -<88D5> <88D5> -<88D6> <88D6> -<88D7> <88D7> -<88D8> <88D8> -<88D9> <88D9> -<88DA> <88DA> -<88DB> <88DB> -<88DC> <88DC> -<88DD> <88DD> -<88DE> <88DE> -<88DF> <88DF> -<88E1> <88E1> -<88E7> <88E7> -<88E8> <88E8> -<88EB> <88EB> -<88EC> <88EC> -<88EE> <88EE> -<88EF> <88EF> -<88F0> <88F0> -<88F1> <88F2> -<88F3> <88F3> -<88F4> <88F4> -<88F6> <88F6> -<88F7> <88F7> -<88F8> <88F8> -<88F9> <88F9> -<88FA> <88FA> -<88FB> <88FB> -<88FC> <88FC> -<88FD> <88FD> -<88FE> <88FE> -<8901> <8901> -<8902> <8902> -<8905> <8905> -<8906> <8906> -<8907> <8907> -<8909> <8909> -<890A> <890A> -<890B> <890B> -<890C> <890C> -<890E> <890E> -<8910> <8910> -endbfrange - -100 beginbfrange -<8911> <8911> -<8912> <8913> -<8914> <8914> -<8915> <8915> -<8916> <8916> -<8917> <8919> -<891A> <891A> -<891E> <891E> -<891F> <891F> -<8921> <8921> -<8922> <8922> -<8923> <8923> -<8925> <8925> -<8926> <8926> -<8927> <8927> -<8929> <8929> -<892A> <892A> -<892B> <892B> -<892C> <892C> -<892D> <892E> -<892F> <892F> -<8930> <8930> -<8931> <8931> -<8932> <8932> -<8933> <8933> -<8935> <8935> -<8936> <8936> -<8937> <8937> -<8938> <8938> -<893B> <893B> -<893C> <893C> -<893D> <893D> -<893E> <893E> -<8941> <8941> -<8942> <8942> -<8944> <8944> -<8946> <8946> -<8949> <8949> -<894B> <894B> -<894C> <894C> -<894F> <894F> -<8950> <8951> -<8952> <8952> -<8953> <8953> -<8956> <8956> -<8957> <8957> -<8958> <8958> -<8959> <8959> -<895A> <895B> -<895C> <895C> -<895D> <895D> -<895E> <895E> -<895F> <895F> -<8960> <8960> -<8961> <8961> -<8962> <8962> -<8963> <8963> -<8964> <8964> -<8966> <8966> -<8969> <8969> -<896A> <896A> -<896B> <896B> -<896C> <896C> -<896D> <896D> -<896E> <896E> -<896F> <896F> -<8971> <8971> -<8972> <8972> -<8973> <8973> -<8974> <8974> -<8976> <8976> -<8979> <897A> -<897B> <897B> -<897C> <897C> -<897E> <897E> -<897F> <897F> -<8981> <8981> -<8982> <8982> -<8983> <8983> -<8985> <8985> -<8986> <8986> -<8988> <8988> -<898B> <898B> -<898F> <898F> -<8993> <8993> -<8995> <8995> -<8996> <8996> -<8997> <8997> -<8998> <8998> -<899B> <899B> -<899C> <899C> -<899D> <899D> -<899E> <899E> -<899F> <899F> -<89A1> <89A1> -<89A2> <89A2> -<89A3> <89A3> -<89A4> <89A4> -<89A6> <89A6> -<89AA> <89AA> -endbfrange - -100 beginbfrange -<89AC> <89AC> -<89AD> <89AD> -<89AE> <89AE> -<89AF> <89AF> -<89B2> <89B2> -<89B6> <89B6> -<89B7> <89B7> -<89B9> <89B9> -<89BA> <89BA> -<89BD> <89BD> -<89BE> <89BE> -<89BF> <89BF> -<89C0> <89C0> -<89D2> <89D2> -<89D3> <89D3> -<89D4> <89D4> -<89D5> <89D5> -<89D6> <89D6> -<89D9> <89D9> -<89DA> <89DB> -<89DC> <89DC> -<89DD> <89DD> -<89DF> <89DF> -<89E0> <89E0> -<89E1> <89E1> -<89E2> <89E2> -<89E3> <89E3> -<89E4> <89E4> -<89E5> <89E5> -<89E6> <89E6> -<89E8> <89E8> -<89E9> <89E9> -<89EB> <89EB> -<89EC> <89EC> -<89ED> <89ED> -<89F0> <89F0> -<89F1> <89F1> -<89F2> <89F3> -<89F4> <89F4> -<89F6> <89F6> -<89F7> <89F7> -<89F8> <89F8> -<89FA> <89FA> -<89FB> <89FB> -<89FC> <89FC> -<89FE> <89FE> -<89FF> <89FF> -<8A00> <8A00> -<8A02> <8A03> -<8A04> <8A04> -<8A07> <8A07> -<8A08> <8A08> -<8A0A> <8A0A> -<8A0C> <8A0C> -<8A0E> <8A0E> -<8A0F> <8A0F> -<8A10> <8A10> -<8A11> <8A11> -<8A12> <8A12> -<8A13> <8A13> -<8A15> <8A15> -<8A16> <8A16> -<8A17> <8A17> -<8A18> <8A18> -<8A1B> <8A1B> -<8A1D> <8A1D> -<8A1E> <8A1E> -<8A1F> <8A1F> -<8A22> <8A22> -<8A23> <8A23> -<8A25> <8A25> -<8A27> <8A27> -<8A2A> <8A2A> -<8A2C> <8A2C> -<8A2D> <8A2D> -<8A30> <8A30> -<8A31> <8A31> -<8A34> <8A34> -<8A36> <8A36> -<8A39> <8A39> -<8A3A> <8A3A> -<8A3B> <8A3B> -<8A3C> <8A3C> -<8A3E> <8A3E> -<8A3F> <8A3F> -<8A40> <8A40> -<8A41> <8A41> -<8A44> <8A45> -<8A46> <8A46> -<8A48> <8A48> -<8A4A> <8A4A> -<8A4C> <8A4C> -<8A4D> <8A4D> -<8A4E> <8A4E> -<8A4F> <8A4F> -<8A50> <8A50> -<8A51> <8A51> -<8A52> <8A52> -<8A54> <8A54> -<8A55> <8A55> -endbfrange - -100 beginbfrange -<8A56> <8A56> -<8A57> <8A58> -<8A59> <8A59> -<8A5B> <8A5B> -<8A5E> <8A5E> -<8A60> <8A60> -<8A61> <8A61> -<8A62> <8A62> -<8A63> <8A63> -<8A66> <8A66> -<8A68> <8A68> -<8A69> <8A69> -<8A6B> <8A6B> -<8A6C> <8A6C> -<8A6D> <8A6D> -<8A6E> <8A6E> -<8A70> <8A70> -<8A71> <8A71> -<8A72> <8A73> -<8A74> <8A74> -<8A75> <8A75> -<8A76> <8A76> -<8A77> <8A77> -<8A79> <8A79> -<8A7A> <8A7A> -<8A7B> <8A7B> -<8A7C> <8A7C> -<8A7F> <8A7F> -<8A81> <8A81> -<8A82> <8A82> -<8A83> <8A83> -<8A84> <8A84> -<8A85> <8A85> -<8A86> <8A86> -<8A87> <8A87> -<8A8B> <8A8B> -<8A8C> <8A8C> -<8A8D> <8A8D> -<8A8F> <8A8F> -<8A91> <8A91> -<8A92> <8A92> -<8A93> <8A93> -<8A95> <8A95> -<8A96> <8A96> -<8A98> <8A98> -<8A99> <8A99> -<8A9A> <8A9A> -<8A9E> <8A9E> -<8AA0> <8AA0> -<8AA1> <8AA1> -<8AA3> <8AA3> -<8AA4> <8AA4> -<8AA5> <8AA5> -<8AA6> <8AA6> -<8AA7> <8AA7> -<8AA8> <8AA8> -<8AAA> <8AAA> -<8AAB> <8AAB> -<8AB0> <8AB0> -<8AB2> <8AB2> -<8AB6> <8AB6> -<8AB8> <8AB8> -<8AB9> <8AB9> -<8ABA> <8ABA> -<8ABB> <8ABB> -<8ABC> <8ABC> -<8ABD> <8ABD> -<8ABE> <8ABE> -<8ABF> <8ABF> -<8AC0> <8AC0> -<8AC2> <8AC2> -<8AC3> <8AC3> -<8AC4> <8AC4> -<8AC5> <8AC5> -<8AC6> <8AC6> -<8AC7> <8AC7> -<8AC8> <8AC8> -<8AC9> <8AC9> -<8ACB> <8ACB> -<8ACD> <8ACD> -<8ACF> <8ACF> -<8AD1> <8AD1> -<8AD2> <8AD2> -<8AD3> <8AD3> -<8AD4> <8AD5> -<8AD6> <8AD6> -<8AD7> <8AD7> -<8AD8> <8AD8> -<8AD9> <8AD9> -<8ADB> <8ADB> -<8ADC> <8ADC> -<8ADD> <8ADD> -<8ADE> <8ADE> -<8ADF> <8ADF> -<8AE0> <8AE0> -<8AE1> <8AE1> -<8AE2> <8AE2> -<8AE4> <8AE4> -<8AE6> <8AE6> -<8AE7> <8AE7> -endbfrange - -100 beginbfrange -<8AE8> <8AE8> -<8AEB> <8AEB> -<8AED> <8AED> -<8AEE> <8AEE> -<8AEF> <8AEF> -<8AF0> <8AF0> -<8AF1> <8AF1> -<8AF2> <8AF2> -<8AF3> <8AF3> -<8AF4> <8AF5> -<8AF6> <8AF6> -<8AF7> <8AF7> -<8AF8> <8AF8> -<8AFA> <8AFA> -<8AFB> <8AFB> -<8AFC> <8AFC> -<8AFE> <8AFE> -<8AFF> <8AFF> -<8B00> <8B00> -<8B01> <8B02> -<8B04> <8B04> -<8B05> <8B05> -<8B06> <8B06> -<8B07> <8B07> -<8B08> <8B08> -<8B0A> <8B0A> -<8B0B> <8B0B> -<8B0D> <8B0D> -<8B0E> <8B0E> -<8B0F> <8B0F> -<8B10> <8B10> -<8B11> <8B11> -<8B12> <8B12> -<8B13> <8B13> -<8B14> <8B14> -<8B15> <8B15> -<8B16> <8B16> -<8B17> <8B17> -<8B18> <8B18> -<8B19> <8B19> -<8B1A> <8B1A> -<8B1B> <8B1B> -<8B1C> <8B1C> -<8B1D> <8B1D> -<8B1E> <8B1E> -<8B20> <8B20> -<8B22> <8B22> -<8B23> <8B23> -<8B24> <8B24> -<8B25> <8B25> -<8B26> <8B26> -<8B27> <8B27> -<8B28> <8B28> -<8B2A> <8B2A> -<8B2B> <8B2B> -<8B2C> <8B2C> -<8B2E> <8B2E> -<8B2F> <8B2F> -<8B30> <8B30> -<8B31> <8B31> -<8B33> <8B33> -<8B35> <8B35> -<8B36> <8B36> -<8B37> <8B37> -<8B39> <8B39> -<8B3A> <8B3A> -<8B3B> <8B3B> -<8B3C> <8B3C> -<8B3D> <8B3D> -<8B3E> <8B3E> -<8B40> <8B40> -<8B41> <8B41> -<8B42> <8B42> -<8B45> <8B45> -<8B46> <8B46> -<8B47> <8B47> -<8B48> <8B48> -<8B49> <8B49> -<8B4A> <8B4A> -<8B4B> <8B4B> -<8B4E> <8B4F> -<8B50> <8B50> -<8B51> <8B51> -<8B52> <8B52> -<8B53> <8B53> -<8B54> <8B54> -<8B55> <8B55> -<8B56> <8B56> -<8B57> <8B57> -<8B58> <8B58> -<8B59> <8B59> -<8B5A> <8B5A> -<8B5C> <8B5C> -<8B5D> <8B5D> -<8B5F> <8B5F> -<8B60> <8B60> -<8B63> <8B63> -<8B65> <8B65> -<8B66> <8B66> -<8B67> <8B67> -endbfrange - -100 beginbfrange -<8B68> <8B68> -<8B6A> <8B6A> -<8B6B> <8B6B> -<8B6C> <8B6C> -<8B6D> <8B6D> -<8B6F> <8B6F> -<8B70> <8B70> -<8B74> <8B74> -<8B77> <8B77> -<8B78> <8B78> -<8B79> <8B79> -<8B7A> <8B7B> -<8B7D> <8B7D> -<8B7E> <8B7E> -<8B7F> <8B7F> -<8B80> <8B80> -<8B82> <8B82> -<8B84> <8B84> -<8B85> <8B85> -<8B86> <8B86> -<8B88> <8B88> -<8B8A> <8B8A> -<8B8B> <8B8B> -<8B8C> <8B8C> -<8B8E> <8B8E> -<8B92> <8B92> -<8B93> <8B93> -<8B94> <8B95> -<8B96> <8B96> -<8B98> <8B99> -<8B9A> <8B9A> -<8B9C> <8B9C> -<8B9E> <8B9E> -<8B9F> <8B9F> -<8C37> <8C37> -<8C39> <8C39> -<8C3B> <8C3B> -<8C3C> <8C3C> -<8C3D> <8C3D> -<8C3E> <8C3E> -<8C3F> <8C3F> -<8C41> <8C41> -<8C42> <8C42> -<8C43> <8C43> -<8C45> <8C45> -<8C46> <8C46> -<8C47> <8C47> -<8C48> <8C48> -<8C49> <8C49> -<8C4A> <8C4A> -<8C4B> <8C4B> -<8C4C> <8C4C> -<8C4D> <8C4D> -<8C4E> <8C4E> -<8C4F> <8C4F> -<8C50> <8C50> -<8C54> <8C54> -<8C55> <8C55> -<8C56> <8C56> -<8C57> <8C57> -<8C5A> <8C5A> -<8C5C> <8C5D> -<8C5F> <8C5F> -<8C61> <8C61> -<8C62> <8C62> -<8C64> <8C64> -<8C65> <8C65> -<8C66> <8C66> -<8C68> <8C69> -<8C6A> <8C6A> -<8C6B> <8C6B> -<8C6C> <8C6C> -<8C6D> <8C6D> -<8C6F> <8C6F> -<8C70> <8C70> -<8C71> <8C71> -<8C72> <8C72> -<8C73> <8C73> -<8C75> <8C75> -<8C76> <8C76> -<8C77> <8C77> -<8C78> <8C78> -<8C79> <8C79> -<8C7A> <8C7A> -<8C7B> <8C7B> -<8C7D> <8C7D> -<8C80> <8C80> -<8C81> <8C81> -<8C82> <8C82> -<8C84> <8C85> -<8C86> <8C86> -<8C89> <8C89> -<8C8A> <8C8A> -<8C8C> <8C8C> -<8C8D> <8C8D> -<8C8F> <8C8F> -<8C90> <8C90> -<8C91> <8C92> -<8C93> <8C93> -<8C94> <8C94> -endbfrange - -100 beginbfrange -<8C95> <8C95> -<8C97> <8C97> -<8C98> <8C98> -<8C99> <8C99> -<8C9A> <8C9A> -<8C9C> <8C9C> -<8C9D> <8C9D> -<8C9E> <8C9E> -<8CA0> <8CA0> -<8CA1> <8CA2> -<8CA3> <8CA3> -<8CA4> <8CA4> -<8CA5> <8CA5> -<8CA7> <8CA7> -<8CA8> <8CA8> -<8CA9> <8CA9> -<8CAA> <8CAA> -<8CAB> <8CAB> -<8CAC> <8CAC> -<8CAF> <8CAF> -<8CB0> <8CB0> -<8CB2> <8CB2> -<8CB3> <8CB3> -<8CB4> <8CB4> -<8CB5> <8CB5> -<8CB6> <8CB6> -<8CB7> <8CB7> -<8CB8> <8CB8> -<8CB9> <8CB9> -<8CBA> <8CBA> -<8CBB> <8CBB> -<8CBC> <8CBC> -<8CBD> <8CBD> -<8CBE> <8CBE> -<8CBF> <8CBF> -<8CC0> <8CC0> -<8CC1> <8CC1> -<8CC2> <8CC2> -<8CC3> <8CC3> -<8CC4> <8CC4> -<8CC5> <8CC5> -<8CC7> <8CC8> -<8CCA> <8CCA> -<8CCC> <8CCC> -<8CCF> <8CCF> -<8CD1> <8CD2> -<8CD3> <8CD3> -<8CD5> <8CD5> -<8CD7> <8CD7> -<8CD9> <8CD9> -<8CDA> <8CDA> -<8CDC> <8CDC> -<8CDD> <8CDD> -<8CDE> <8CDE> -<8CDF> <8CDF> -<8CE0> <8CE0> -<8CE1> <8CE1> -<8CE2> <8CE3> -<8CE4> <8CE4> -<8CE5> <8CE5> -<8CE6> <8CE6> -<8CE7> <8CE7> -<8CE8> <8CE8> -<8CEA> <8CEA> -<8CEC> <8CED> -<8CEE> <8CEE> -<8CF0> <8CF0> -<8CF1> <8CF1> -<8CF3> <8CF3> -<8CF4> <8CF4> -<8CF5> <8CF5> -<8CF8> <8CF8> -<8CF9> <8CF9> -<8CFA> <8CFA> -<8CFB> <8CFB> -<8CFC> <8CFC> -<8CFD> <8CFD> -<8CFE> <8CFE> -<8D00> <8D00> -<8D02> <8D02> -<8D04> <8D04> -<8D05> <8D05> -<8D06> <8D07> -<8D08> <8D08> -<8D09> <8D09> -<8D0A> <8D0A> -<8D0D> <8D0D> -<8D0F> <8D0F> -<8D10> <8D10> -<8D13> <8D13> -<8D14> <8D14> -<8D15> <8D15> -<8D16> <8D17> -<8D19> <8D19> -<8D1B> <8D1B> -<8D64> <8D64> -<8D66> <8D66> -<8D67> <8D67> -<8D68> <8D69> -<8D6B> <8D6B> -endbfrange - -100 beginbfrange -<8D6C> <8D6C> -<8D6D> <8D6D> -<8D6E> <8D6E> -<8D6F> <8D6F> -<8D70> <8D70> -<8D72> <8D72> -<8D73> <8D73> -<8D74> <8D74> -<8D76> <8D76> -<8D77> <8D77> -<8D78> <8D78> -<8D79> <8D79> -<8D7B> <8D7B> -<8D7D> <8D7D> -<8D80> <8D80> -<8D81> <8D81> -<8D84> <8D84> -<8D85> <8D85> -<8D89> <8D89> -<8D8A> <8D8A> -<8D8C> <8D8C> -<8D8D> <8D8D> -<8D8E> <8D8F> -<8D90> <8D90> -<8D91> <8D91> -<8D92> <8D92> -<8D93> <8D94> -<8D95> <8D95> -<8D96> <8D96> -<8D99> <8D99> -<8D9B> <8D9B> -<8D9C> <8D9C> -<8D9F> <8D9F> -<8DA0> <8DA0> -<8DA1> <8DA1> -<8DA3> <8DA3> -<8DA5> <8DA5> -<8DA7> <8DA7> -<8DA8> <8DA8> -<8DAA> <8DAA> -<8DAB> <8DAB> -<8DAC> <8DAC> -<8DAD> <8DAD> -<8DAE> <8DAE> -<8DAF> <8DAF> -<8DB2> <8DB2> -<8DB3> <8DB3> -<8DB4> <8DB4> -<8DB5> <8DB5> -<8DB6> <8DB6> -<8DB7> <8DB7> -<8DB9> <8DB9> -<8DBA> <8DBA> -<8DBC> <8DBC> -<8DBE> <8DBE> -<8DBF> <8DBF> -<8DC1> <8DC1> -<8DC2> <8DC2> -<8DC5> <8DC5> -<8DC6> <8DC6> -<8DC7> <8DC7> -<8DC8> <8DC8> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCD> <8DCD> -<8DCE> <8DCE> -<8DCF> <8DCF> -<8DD0> <8DD0> -<8DD1> <8DD1> -<8DD3> <8DD3> -<8DD5> <8DD5> -<8DD6> <8DD6> -<8DD7> <8DD7> -<8DD8> <8DD8> -<8DD9> <8DD9> -<8DDA> <8DDA> -<8DDB> <8DDB> -<8DDC> <8DDC> -<8DDD> <8DDD> -<8DDF> <8DDF> -<8DE0> <8DE0> -<8DE1> <8DE1> -<8DE2> <8DE2> -<8DE3> <8DE3> -<8DE4> <8DE4> -<8DE6> <8DE6> -<8DE7> <8DE7> -<8DE8> <8DE8> -<8DE9> <8DE9> -<8DEA> <8DEA> -<8DEB> <8DEB> -<8DEC> <8DEC> -<8DEE> <8DEE> -<8DEF> <8DEF> -<8DF0> <8DF0> -<8DF1> <8DF1> -<8DF2> <8DF2> -<8DF3> <8DF3> -<8DF4> <8DF4> -<8DFA> <8DFA> -endbfrange - -100 beginbfrange -<8DFC> <8DFC> -<8DFD> <8DFD> -<8DFE> <8DFE> -<8DFF> <8DFF> -<8E00> <8E00> -<8E02> <8E02> -<8E03> <8E03> -<8E04> <8E04> -<8E05> <8E05> -<8E06> <8E06> -<8E07> <8E07> -<8E09> <8E09> -<8E0A> <8E0A> -<8E0D> <8E0D> -<8E0F> <8E0F> -<8E10> <8E10> -<8E11> <8E11> -<8E12> <8E12> -<8E13> <8E13> -<8E14> <8E14> -<8E15> <8E15> -<8E16> <8E16> -<8E17> <8E17> -<8E18> <8E18> -<8E19> <8E19> -<8E1A> <8E1A> -<8E1B> <8E1B> -<8E1C> <8E1C> -<8E1D> <8E1D> -<8E1E> <8E1E> -<8E1F> <8E1F> -<8E20> <8E20> -<8E21> <8E21> -<8E22> <8E22> -<8E23> <8E23> -<8E24> <8E24> -<8E25> <8E25> -<8E26> <8E27> -<8E29> <8E29> -<8E2B> <8E2B> -<8E2E> <8E2E> -<8E30> <8E30> -<8E31> <8E31> -<8E33> <8E33> -<8E34> <8E34> -<8E35> <8E35> -<8E36> <8E36> -<8E38> <8E38> -<8E39> <8E39> -<8E3C> <8E3D> -<8E3E> <8E3E> -<8E3F> <8E3F> -<8E40> <8E40> -<8E41> <8E41> -<8E42> <8E42> -<8E44> <8E44> -<8E45> <8E45> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E4B> <8E4B> -<8E4C> <8E4C> -<8E4D> <8E4D> -<8E4E> <8E4E> -<8E50> <8E50> -<8E53> <8E53> -<8E54> <8E54> -<8E55> <8E55> -<8E56> <8E56> -<8E57> <8E57> -<8E59> <8E59> -<8E5A> <8E5A> -<8E5B> <8E5B> -<8E5C> <8E5C> -<8E5D> <8E5D> -<8E5E> <8E5E> -<8E5F> <8E5F> -<8E60> <8E60> -<8E61> <8E61> -<8E62> <8E62> -<8E63> <8E63> -<8E64> <8E64> -<8E65> <8E65> -<8E66> <8E66> -<8E67> <8E67> -<8E69> <8E69> -<8E6A> <8E6A> -<8E6C> <8E6C> -<8E6D> <8E6D> -<8E6F> <8E6F> -<8E72> <8E72> -<8E73> <8E73> -<8E74> <8E74> -<8E76> <8E76> -<8E78> <8E78> -<8E7A> <8E7A> -<8E7B> <8E7B> -<8E7C> <8E7C> -<8E81> <8E81> -endbfrange - -100 beginbfrange -<8E82> <8E82> -<8E84> <8E84> -<8E85> <8E85> -<8E86> <8E86> -<8E87> <8E87> -<8E88> <8E88> -<8E89> <8E89> -<8E8A> <8E8A> -<8E8B> <8E8B> -<8E8C> <8E8C> -<8E8D> <8E8D> -<8E8E> <8E8E> -<8E90> <8E90> -<8E91> <8E91> -<8E92> <8E92> -<8E93> <8E93> -<8E94> <8E94> -<8E95> <8E95> -<8E96> <8E97> -<8E98> <8E98> -<8E9A> <8E9A> -<8E9D> <8E9D> -<8E9E> <8EA0> -<8EA1> <8EA1> -<8EA3> <8EA3> -<8EA4> <8EA4> -<8EA5> <8EA5> -<8EA6> <8EA6> -<8EA8> <8EA8> -<8EA9> <8EA9> -<8EAA> <8EAA> -<8EAB> <8EAB> -<8EAC> <8EAC> -<8EB2> <8EB2> -<8EBA> <8EBA> -<8EBD> <8EBD> -<8EC0> <8EC0> -<8EC2> <8EC2> -<8EC9> <8EC9> -<8ECA> <8ECA> -<8ECB> <8ECB> -<8ECC> <8ECC> -<8ECD> <8ECD> -<8ECF> <8ECF> -<8ED1> <8ED1> -<8ED2> <8ED2> -<8ED3> <8ED3> -<8ED4> <8ED4> -<8ED7> <8ED7> -<8ED8> <8ED8> -<8EDB> <8EDB> -<8EDC> <8EDC> -<8EDD> <8EDD> -<8EDE> <8EDE> -<8EDF> <8EDF> -<8EE0> <8EE1> -<8EE5> <8EE5> -<8EE6> <8EE6> -<8EE7> <8EE8> -<8EE9> <8EE9> -<8EEB> <8EEB> -<8EEC> <8EEC> -<8EEE> <8EEE> -<8EEF> <8EEF> -<8EF1> <8EF1> -<8EF4> <8EF4> -<8EF5> <8EF5> -<8EF6> <8EF6> -<8EF7> <8EF7> -<8EF8> <8EF8> -<8EF9> <8EF9> -<8EFA> <8EFA> -<8EFB> <8EFB> -<8EFC> <8EFC> -<8EFE> <8EFE> -<8EFF> <8EFF> -<8F00> <8F00> -<8F01> <8F01> -<8F02> <8F02> -<8F03> <8F03> -<8F05> <8F05> -<8F06> <8F06> -<8F07> <8F08> -<8F09> <8F09> -<8F0A> <8F0A> -<8F0B> <8F0B> -<8F0D> <8F0D> -<8F0E> <8F0E> -<8F10> <8F11> -<8F12> <8F12> -<8F13> <8F13> -<8F14> <8F14> -<8F15> <8F15> -<8F16> <8F17> -<8F18> <8F18> -<8F1A> <8F1A> -<8F1B> <8F1B> -<8F1C> <8F1C> -<8F1D> <8F1D> -<8F1E> <8F1E> -endbfrange - -100 beginbfrange -<8F1F> <8F1F> -<8F20> <8F20> -<8F23> <8F23> -<8F24> <8F24> -<8F25> <8F25> -<8F26> <8F26> -<8F29> <8F29> -<8F2A> <8F2A> -<8F2C> <8F2C> -<8F2E> <8F2E> -<8F2F> <8F2F> -<8F32> <8F32> -<8F33> <8F33> -<8F34> <8F34> -<8F35> <8F35> -<8F36> <8F36> -<8F37> <8F37> -<8F38> <8F38> -<8F39> <8F39> -<8F3B> <8F3B> -<8F3E> <8F3E> -<8F3F> <8F3F> -<8F40> <8F40> -<8F42> <8F42> -<8F43> <8F43> -<8F44> <8F44> -<8F45> <8F45> -<8F46> <8F48> -<8F49> <8F49> -<8F4B> <8F4B> -<8F4D> <8F4D> -<8F4E> <8F4E> -<8F4F> <8F50> -<8F51> <8F51> -<8F52> <8F52> -<8F53> <8F53> -<8F54> <8F54> -<8F55> <8F55> -<8F56> <8F57> -<8F58> <8F58> -<8F59> <8F59> -<8F5A> <8F5A> -<8F5B> <8F5B> -<8F5D> <8F5D> -<8F5E> <8F5E> -<8F5F> <8F5F> -<8F60> <8F60> -<8F61> <8F61> -<8F62> <8F62> -<8F63> <8F63> -<8F64> <8F64> -<8F9B> <8F9B> -<8F9C> <8F9C> -<8F9F> <8F9F> -<8FA3> <8FA3> -<8FA6> <8FA6> -<8FA8> <8FA8> -<8FAD> <8FAD> -<8FAE> <8FAE> -<8FAF> <8FAF> -<8FB0> <8FB0> -<8FB1> <8FB1> -<8FB2> <8FB2> -<8FB4> <8FB4> -<8FBF> <8FBF> -<8FC2> <8FC2> -<8FC4> <8FC4> -<8FC5> <8FC5> -<8FC6> <8FC6> -<8FC9> <8FC9> -<8FCB> <8FCB> -<8FCD> <8FCD> -<8FCE> <8FCE> -<8FD1> <8FD1> -<8FD2> <8FD2> -<8FD3> <8FD3> -<8FD4> <8FD4> -<8FD5> <8FD5> -<8FD6> <8FD6> -<8FD7> <8FD7> -<8FE0> <8FE0> -<8FE1> <8FE1> -<8FE2> <8FE2> -<8FE3> <8FE3> -<8FE4> <8FE4> -<8FE5> <8FE5> -<8FE6> <8FE6> -<8FE8> <8FE8> -<8FEA> <8FEA> -<8FEB> <8FEB> -<8FED> <8FED> -<8FEE> <8FEE> -<8FF0> <8FF0> -<8FF4> <8FF4> -<8FF5> <8FF5> -<8FF6> <8FF6> -<8FF7> <8FF7> -<8FF8> <8FF8> -<8FFA> <8FFA> -<8FFB> <8FFB> -endbfrange - -100 beginbfrange -<8FFC> <8FFC> -<8FFD> <8FFD> -<8FFE> <8FFE> -<8FFF> <8FFF> -<9000> <9000> -<9001> <9001> -<9002> <9002> -<9003> <9003> -<9004> <9004> -<9005> <9005> -<9006> <9006> -<900B> <900B> -<900C> <900C> -<900D> <900D> -<900F> <900F> -<9010> <9010> -<9011> <9011> -<9014> <9014> -<9015> <9015> -<9016> <9016> -<9017> <9017> -<9019> <9019> -<901A> <901A> -<901B> <901B> -<901C> <901C> -<901D> <901D> -<901E> <901E> -<901F> <901F> -<9020> <9020> -<9021> <9021> -<9022> <9022> -<9023> <9023> -<9024> <9024> -<902D> <902D> -<902E> <902E> -<902F> <902F> -<9031> <9031> -<9032> <9032> -<9034> <9034> -<9035> <9035> -<9036> <9036> -<9038> <9038> -<903C> <903C> -<903D> <903D> -<903E> <903E> -<903F> <903F> -<9041> <9041> -<9042> <9042> -<9044> <9044> -<9047> <9047> -<9049> <9049> -<904A> <904A> -<904B> <904B> -<904D> <904D> -<904E> <904E> -<904F> <904F> -<9050> <9050> -<9051> <9051> -<9052> <9052> -<9053> <9053> -<9054> <9054> -<9055> <9055> -<9058> <9058> -<9059> <9059> -<905B> <905B> -<905C> <905C> -<905D> <905D> -<905E> <905E> -<9060> <9060> -<9062> <9062> -<9063> <9063> -<9067> <9067> -<9068> <9068> -<9069> <9069> -<906B> <906B> -<906D> <906D> -<906E> <906E> -<906F> <906F> -<9070> <9070> -<9072> <9072> -<9073> <9073> -<9074> <9074> -<9075> <9075> -<9076> <9076> -<9077> <9077> -<9078> <9078> -<9079> <9079> -<907A> <907A> -<907B> <907B> -<907C> <907C> -<907D> <907D> -<907E> <907E> -<907F> <907F> -<9080> <9080> -<9081> <9082> -<9083> <9083> -<9084> <9084> -<9085> <9085> -<9086> <9086> -<9087> <9087> -endbfrange - -100 beginbfrange -<9088> <9088> -<908A> <908B> -<908D> <908D> -<908F> <908F> -<9090> <9090> -<9091> <9091> -<9094> <9094> -<9095> <9095> -<9097> <9098> -<9099> <9099> -<909B> <909B> -<909E> <909E> -<909F> <909F> -<90A0> <90A0> -<90A1> <90A1> -<90A2> <90A2> -<90A3> <90A3> -<90A5> <90A5> -<90A6> <90A6> -<90A7> <90A7> -<90AA> <90AA> -<90AF> <90AF> -<90B0> <90B0> -<90B1> <90B1> -<90B2> <90B2> -<90B3> <90B3> -<90B4> <90B4> -<90B5> <90B5> -<90B6> <90B6> -<90B8> <90B8> -<90BD> <90BD> -<90BE> <90BE> -<90BF> <90BF> -<90C1> <90C1> -<90C3> <90C3> -<90C5> <90C5> -<90C7> <90C7> -<90C8> <90C8> -<90CA> <90CA> -<90CB> <90CB> -<90CE> <90CE> -<90D4> <90D4> -<90D5> <90D5> -<90D6> <90D6> -<90D7> <90D7> -<90D8> <90D8> -<90D9> <90DA> -<90DB> <90DB> -<90DC> <90DC> -<90DD> <90DD> -<90DF> <90DF> -<90E0> <90E0> -<90E1> <90E1> -<90E2> <90E2> -<90E3> <90E3> -<90E4> <90E4> -<90E5> <90E5> -<90E8> <90E8> -<90E9> <90E9> -<90EA> <90EA> -<90EB> <90EC> -<90ED> <90ED> -<90EF> <90EF> -<90F0> <90F0> -<90F1> <90F1> -<90F2> <90F3> -<90F4> <90F4> -<90F5> <90F5> -<90F9> <90F9> -<90FA> <90FA> -<90FB> <90FB> -<90FC> <90FC> -<90FD> <90FD> -<90FE> <90FE> -<90FF> <90FF> -<9100> <9100> -<9101> <9101> -<9102> <9102> -<9103> <9103> -<9104> <9104> -<9105> <9105> -<9106> <9106> -<9107> <9107> -<9108> <9108> -<9109> <9109> -<910B> <910B> -<910D> <910D> -<910E> <910E> -<910F> <910F> -<9110> <9110> -<9111> <9111> -<9112> <9112> -<9114> <9114> -<9116> <9116> -<9117> <9117> -<9118> <9118> -<9119> <9119> -<911A> <911A> -<911B> <911B> -<911C> <911C> -endbfrange - -100 beginbfrange -<911D> <911D> -<911E> <911E> -<911F> <911F> -<9120> <9120> -<9121> <9121> -<9122> <9122> -<9123> <9123> -<9124> <9124> -<9126> <9126> -<9127> <9127> -<9128> <9128> -<9129> <912A> -<912B> <912B> -<912C> <912C> -<912D> <912D> -<912E> <912E> -<912F> <912F> -<9130> <9130> -<9131> <9131> -<9132> <9132> -<9133> <9133> -<9134> <9134> -<9135> <9136> -<9138> <9138> -<9139> <9139> -<913A> <913B> -<913E> <913E> -<913F> <913F> -<9140> <9140> -<9141> <9141> -<9143> <9143> -<9144> <9145> -<9146> <9146> -<9147> <9147> -<9148> <9148> -<9149> <9149> -<914A> <914A> -<914B> <914B> -<914C> <914C> -<914D> <914D> -<914E> <914F> -<9150> <9150> -<9152> <9152> -<9153> <9153> -<9155> <9155> -<9156> <9156> -<9157> <9157> -<9158> <9158> -<915A> <915A> -<915F> <915F> -<9160> <9160> -<9161> <9161> -<9162> <9162> -<9163> <9163> -<9164> <9164> -<9165> <9165> -<9168> <9168> -<9169> <9169> -<916A> <916A> -<916C> <916C> -<916E> <916F> -<9172> <9172> -<9173> <9173> -<9174> <9174> -<9175> <9175> -<9177> <9177> -<9178> <9178> -<9179> <9179> -<917A> <917A> -<9180> <9180> -<9181> <9182> -<9183> <9183> -<9184> <9184> -<9185> <9186> -<9187> <9187> -<9189> <9189> -<918A> <918A> -<918B> <918B> -<918D> <918D> -<918F> <918F> -<9190> <9191> -<9192> <9192> -<9193> <9193> -<9199> <9199> -<919A> <919A> -<919B> <919B> -<919C> <919C> -<919D> <919D> -<919E> <919E> -<919F> <919F> -<91A0> <91A0> -<91A1> <91A1> -<91A2> <91A2> -<91A3> <91A3> -<91A5> <91A5> -<91A7> <91A7> -<91A8> <91A8> -<91AA> <91AA> -<91AB> <91AC> -<91AD> <91AD> -endbfrange - -100 beginbfrange -<91AE> <91AE> -<91AF> <91AF> -<91B0> <91B0> -<91B1> <91B1> -<91B2> <91B3> -<91B4> <91B4> -<91B5> <91B5> -<91B7> <91B7> -<91B9> <91B9> -<91BA> <91BA> -<91BC> <91BC> -<91BD> <91BD> -<91BE> <91BE> -<91C0> <91C0> -<91C1> <91C1> -<91C2> <91C2> -<91C3> <91C3> -<91C5> <91C5> -<91C6> <91C6> -<91C7> <91C7> -<91C9> <91C9> -<91CB> <91CB> -<91CC> <91CC> -<91CD> <91CD> -<91CE> <91CE> -<91CF> <91CF> -<91D0> <91D0> -<91D1> <91D1> -<91D3> <91D3> -<91D4> <91D4> -<91D5> <91D5> -<91D7> <91D7> -<91D8> <91D8> -<91D9> <91D9> -<91DA> <91DA> -<91DC> <91DC> -<91DD> <91DD> -<91E2> <91E2> -<91E3> <91E3> -<91E4> <91E4> -<91E6> <91E6> -<91E7> <91E7> -<91E8> <91E8> -<91E9> <91E9> -<91EA> <91EA> -<91EB> <91EB> -<91EC> <91EC> -<91ED> <91ED> -<91EE> <91EE> -<91F1> <91F1> -<91F3> <91F3> -<91F4> <91F4> -<91F5> <91F5> -<91F7> <91F7> -<91F8> <91F8> -<91F9> <91F9> -<91FD> <91FD> -<91FF> <91FF> -<9200> <9200> -<9201> <9201> -<9202> <9202> -<9203> <9203> -<9204> <9204> -<9205> <9205> -<9206> <9206> -<9207> <9207> -<9209> <9209> -<920A> <920A> -<920C> <920C> -<920D> <920D> -<920F> <920F> -<9210> <9210> -<9211> <9211> -<9212> <9212> -<9214> <9215> -<9216> <9216> -<9217> <9217> -<9219> <9219> -<921A> <921A> -<921C> <921C> -<921E> <921E> -<9223> <9223> -<9224> <9224> -<9225> <9225> -<9226> <9226> -<9227> <9227> -<922D> <922D> -<922E> <922E> -<9230> <9230> -<9231> <9231> -<9232> <9232> -<9233> <9233> -<9234> <9234> -<9236> <9236> -<9237> <9237> -<9238> <9238> -<9239> <9239> -<923A> <923A> -<923D> <923D> -<923E> <923E> -endbfrange - -100 beginbfrange -<923F> <923F> -<9240> <9240> -<9245> <9245> -<9246> <9246> -<9248> <9248> -<9249> <9249> -<924A> <924A> -<924B> <924B> -<924C> <924C> -<924D> <924D> -<924E> <924E> -<924F> <924F> -<9250> <9250> -<9251> <9251> -<9252> <9252> -<9253> <9253> -<9254> <9254> -<9256> <9256> -<9257> <9257> -<925A> <925A> -<925B> <925B> -<925E> <925E> -<9260> <9260> -<9261> <9261> -<9263> <9263> -<9264> <9264> -<9265> <9265> -<9266> <9266> -<9267> <9267> -<926C> <926C> -<926D> <926D> -<926F> <926F> -<9270> <9270> -<9272> <9272> -<9276> <9276> -<9278> <9278> -<9279> <9279> -<927A> <927A> -<927B> <927B> -<927C> <927C> -<927D> <927D> -<927E> <927E> -<927F> <927F> -<9280> <9280> -<9282> <9282> -<9283> <9283> -<9285> <9285> -<9286> <9286> -<9287> <9287> -<9288> <9288> -<928A> <928A> -<928B> <928B> -<928C> <928C> -<928D> <928D> -<928E> <928E> -<9291> <9291> -<9293> <9293> -<9294> <9294> -<9295> <9295> -<9296> <9296> -<9297> <9297> -<9298> <9298> -<9299> <9299> -<929A> <929A> -<929B> <929B> -<929C> <929C> -<929D> <929D> -<92A0> <92A0> -<92A1> <92A1> -<92A2> <92A2> -<92A3> <92A3> -<92A4> <92A4> -<92A5> <92A5> -<92A6> <92A6> -<92A7> <92A7> -<92A8> <92A8> -<92A9> <92A9> -<92AA> <92AA> -<92AB> <92AB> -<92AC> <92AC> -<92B2> <92B2> -<92B3> <92B3> -<92B4> <92B4> -<92B5> <92B5> -<92B6> <92B6> -<92B7> <92B7> -<92BB> <92BB> -<92BC> <92BC> -<92C0> <92C0> -<92C1> <92C1> -<92C2> <92C2> -<92C3> <92C4> -<92C5> <92C5> -<92C6> <92C6> -<92C7> <92C7> -<92C8> <92C8> -<92C9> <92C9> -<92CA> <92CA> -<92CB> <92CB> -<92CC> <92CC> -endbfrange - -100 beginbfrange -<92CD> <92CD> -<92CE> <92CE> -<92CF> <92CF> -<92D0> <92D0> -<92D1> <92D1> -<92D2> <92D2> -<92D3> <92D3> -<92D5> <92D5> -<92D7> <92D7> -<92D8> <92D8> -<92D9> <92D9> -<92DD> <92DD> -<92DE> <92DE> -<92DF> <92DF> -<92E0> <92E0> -<92E1> <92E1> -<92E4> <92E4> -<92E6> <92E6> -<92E7> <92E7> -<92E8> <92E8> -<92E9> <92E9> -<92EA> <92EA> -<92EE> <92EE> -<92EF> <92EF> -<92F0> <92F0> -<92F1> <92F1> -<92F7> <92F7> -<92F8> <92F8> -<92F9> <92F9> -<92FA> <92FA> -<92FB> <92FB> -<92FC> <92FC> -<92FE> <92FE> -<92FF> <92FF> -<9300> <9300> -<9301> <9301> -<9302> <9302> -<9304> <9304> -<9306> <9306> -<9308> <9308> -<9309> <9309> -<930B> <930B> -<930C> <930C> -<930D> <930D> -<930E> <930E> -<930F> <930F> -<9310> <9310> -<9312> <9312> -<9313> <9313> -<9314> <9314> -<9315> <9315> -<9316> <9316> -<9318> <9318> -<9319> <9319> -<931A> <931A> -<931B> <931B> -<931D> <931D> -<931E> <931E> -<931F> <931F> -<9320> <9320> -<9321> <9321> -<9322> <9322> -<9323> <9323> -<9324> <9324> -<9325> <9325> -<9326> <9326> -<9327> <9327> -<9328> <9328> -<9329> <9329> -<932A> <932A> -<932B> <932B> -<932D> <932D> -<932E> <932E> -<932F> <932F> -<9333> <9333> -<9334> <9334> -<9335> <9335> -<9336> <9336> -<9338> <9338> -<9339> <9339> -<933C> <933C> -<9346> <9346> -<9347> <9347> -<9349> <9349> -<934A> <934A> -<934B> <934B> -<934C> <934C> -<934D> <934D> -<934E> <934E> -<934F> <934F> -<9350> <9351> -<9352> <9352> -<9354> <9354> -<9355> <9355> -<9356> <9356> -<9357> <9357> -<9358> <9358> -<9359> <9359> -<935A> <935A> -<935B> <935B> -endbfrange - -100 beginbfrange -<935C> <935C> -<935E> <935E> -<9360> <9360> -<9361> <9361> -<9363> <9363> -<9364> <9364> -<9365> <9365> -<9367> <9367> -<936A> <936A> -<936C> <936C> -<936D> <936D> -<9370> <9370> -<9371> <9371> -<9375> <9375> -<9376> <9376> -<9377> <9377> -<9379> <9379> -<937A> <937A> -<937B> <937B> -<937C> <937C> -<937E> <937E> -<9380> <9380> -<9382> <9382> -<9383> <9383> -<9388> <9388> -<9389> <9389> -<938A> <938A> -<938C> <938C> -<938D> <938D> -<938E> <938E> -<938F> <938F> -<9391> <9391> -<9392> <9392> -<9394> <9394> -<9395> <9395> -<9396> <9396> -<9397> <9397> -<9398> <9398> -<9399> <9399> -<939A> <939A> -<939B> <939B> -<939D> <939D> -<939E> <939E> -<939F> <939F> -<93A1> <93A1> -<93A2> <93A2> -<93A3> <93A3> -<93A4> <93A4> -<93A5> <93A5> -<93A6> <93A6> -<93A7> <93A7> -<93A8> <93A8> -<93A9> <93A9> -<93AA> <93AA> -<93AC> <93AC> -<93AE> <93AE> -<93AF> <93AF> -<93B0> <93B0> -<93B1> <93B1> -<93B2> <93B2> -<93B3> <93B3> -<93B4> <93B4> -<93B5> <93B5> -<93B7> <93B7> -<93C0> <93C0> -<93C2> <93C2> -<93C3> <93C3> -<93C4> <93C4> -<93C7> <93C7> -<93C8> <93C8> -<93CA> <93CA> -<93CC> <93CC> -<93CD> <93CD> -<93CE> <93CE> -<93CF> <93CF> -<93D0> <93D0> -<93D1> <93D1> -<93D2> <93D2> -<93D4> <93D4> -<93D5> <93D5> -<93D6> <93D6> -<93D7> <93D7> -<93D8> <93D8> -<93D9> <93D9> -<93DA> <93DA> -<93DC> <93DD> -<93DE> <93DE> -<93DF> <93DF> -<93E1> <93E1> -<93E2> <93E2> -<93E3> <93E3> -<93E4> <93E4> -<93E6> <93E6> -<93E7> <93E7> -<93E8> <93E8> -<93EC> <93EC> -<93EE> <93EE> -<93F5> <93F5> -<93F6> <93F6> -<93F7> <93F7> -endbfrange - -100 beginbfrange -<93F8> <93F8> -<93F9> <93F9> -<93FA> <93FA> -<93FB> <93FB> -<93FC> <93FC> -<93FD> <93FD> -<93FE> <93FE> -<93FF> <93FF> -<9400> <9400> -<9403> <9403> -<9406> <9406> -<9407> <9407> -<9409> <9409> -<940A> <940A> -<940B> <940B> -<940C> <940C> -<940D> <940D> -<940E> <940E> -<940F> <940F> -<9410> <9410> -<9411> <9411> -<9412> <9412> -<9413> <9413> -<9414> <9414> -<9415> <9415> -<9416> <9416> -<9418> <9418> -<9419> <9419> -<9420> <9420> -<9428> <9428> -<9429> <9429> -<942A> <942A> -<942B> <942B> -<942C> <942C> -<942E> <942E> -<9430> <9430> -<9431> <9431> -<9432> <9432> -<9433> <9433> -<9435> <9435> -<9436> <9436> -<9437> <9437> -<9438> <9438> -<9439> <9439> -<943A> <943A> -<943B> <943B> -<943C> <943C> -<943D> <943D> -<943F> <943F> -<9440> <9440> -<9444> <9444> -<9445> <9445> -<9446> <9446> -<9447> <9447> -<9448> <9449> -<944A> <944B> -<944C> <944C> -<944F> <944F> -<9450> <9450> -<9451> <9452> -<9455> <9455> -<9457> <9457> -<945D> <945D> -<945E> <945E> -<9460> <9460> -<9462> <9462> -<9463> <9463> -<9464> <9464> -<9468> <9469> -<946A> <946A> -<946B> <946B> -<946D> <946D> -<946E> <946E> -<946F> <946F> -<9470> <9470> -<9471> <9471> -<9472> <9472> -<9473> <9473> -<9474> <9474> -<9475> <9475> -<9476> <9476> -<9477> <9477> -<9478> <9478> -<947C> <947C> -<947D> <947E> -<947F> <947F> -<9480> <9481> -<9482> <9482> -<9483> <9483> -<9577> <9577> -<957A> <957A> -<957B> <957B> -<957C> <957C> -<957D> <957D> -<9580> <9580> -<9582> <9582> -<9583> <9583> -<9586> <9586> -<9588> <9588> -<9589> <9589> -endbfrange - -100 beginbfrange -<958B> <958B> -<958C> <958C> -<958D> <958D> -<958E> <958E> -<958F> <958F> -<9590> <9590> -<9591> <9591> -<9592> <9592> -<9593> <9593> -<9594> <9594> -<9598> <9598> -<959B> <959B> -<959C> <959C> -<959E> <959E> -<959F> <959F> -<95A1> <95A1> -<95A3> <95A3> -<95A4> <95A4> -<95A5> <95A5> -<95A8> <95A9> -<95AB> <95AB> -<95AC> <95AC> -<95AD> <95AD> -<95AE> <95AE> -<95B0> <95B0> -<95B1> <95B1> -<95B5> <95B5> -<95B6> <95B6> -<95B7> <95B7> -<95B9> <95BA> -<95BB> <95BB> -<95BC> <95BC> -<95BD> <95BD> -<95BE> <95BE> -<95BF> <95BF> -<95C0> <95C0> -<95C3> <95C3> -<95C5> <95C5> -<95C6> <95C6> -<95C7> <95C7> -<95C8> <95C8> -<95C9> <95C9> -<95CA> <95CC> -<95CD> <95CD> -<95D0> <95D0> -<95D1> <95D1> -<95D2> <95D3> -<95D4> <95D4> -<95D5> <95D5> -<95D6> <95D6> -<95DA> <95DB> -<95DC> <95DC> -<95DE> <95DE> -<95DF> <95DF> -<95E0> <95E0> -<95E1> <95E1> -<95E2> <95E2> -<95E3> <95E3> -<95E4> <95E4> -<95E5> <95E5> -<961C> <961C> -<961E> <961E> -<9620> <9620> -<9621> <9621> -<9622> <9622> -<9623> <9623> -<9624> <9624> -<9628> <9628> -<962A> <962A> -<962C> <962C> -<962D> <962D> -<962E> <962E> -<962F> <962F> -<9630> <9630> -<9631> <9631> -<9632> <9632> -<9639> <9639> -<963A> <963A> -<963B> <963B> -<963C> <963C> -<963D> <963D> -<963F> <963F> -<9640> <9640> -<9642> <9642> -<9643> <9643> -<9644> <9644> -<964A> <964A> -<964B> <964D> -<964E> <964E> -<964F> <964F> -<9650> <9650> -<9651> <9651> -<9653> <9653> -<9654> <9654> -<9658> <9658> -<965B> <965B> -<965C> <965C> -<965D> <965D> -<965E> <965E> -<965F> <965F> -endbfrange - -100 beginbfrange -<9661> <9661> -<9662> <9663> -<9664> <9664> -<966A> <966A> -<966B> <966B> -<966C> <966C> -<966D> <966D> -<966F> <966F> -<9670> <9670> -<9671> <9671> -<9672> <9672> -<9673> <9673> -<9674> <9674> -<9675> <9675> -<9676> <9677> -<9678> <9678> -<967C> <967C> -<967D> <967D> -<967E> <967E> -<9680> <9680> -<9683> <9683> -<9684> <9684> -<9685> <9686> -<9687> <9687> -<9688> <9688> -<9689> <9689> -<968A> <968A> -<968B> <968B> -<968D> <968D> -<968E> <968E> -<9691> <9691> -<9692> <9693> -<9694> <9695> -<9697> <9697> -<9698> <9698> -<9699> <9699> -<969B> <969B> -<969C> <969C> -<969E> <969E> -<96A1> <96A1> -<96A2> <96A2> -<96A4> <96A4> -<96A7> <96A8> -<96A9> <96A9> -<96AA> <96AA> -<96AC> <96AC> -<96AE> <96AE> -<96B0> <96B0> -<96B1> <96B1> -<96B3> <96B3> -<96B4> <96B4> -<96B8> <96B8> -<96B9> <96B9> -<96BB> <96BB> -<96BC> <96BC> -<96BF> <96BF> -<96C0> <96C0> -<96C1> <96C1> -<96C2> <96C2> -<96C3> <96C3> -<96C4> <96C4> -<96C5> <96C5> -<96C6> <96C7> -<96C8> <96C8> -<96C9> <96CA> -<96CB> <96CB> -<96CC> <96CC> -<96CD> <96CD> -<96CE> <96CE> -<96D2> <96D2> -<96D3> <96D3> -<96D4> <96D4> -<96D5> <96D5> -<96D6> <96D6> -<96D7> <96D7> -<96D8> <96D8> -<96D9> <96D9> -<96DA> <96DA> -<96DB> <96DB> -<96DC> <96DC> -<96DD> <96DD> -<96DE> <96DE> -<96DF> <96DF> -<96E1> <96E1> -<96E2> <96E2> -<96E3> <96E3> -<96E5> <96E5> -<96E8> <96E8> -<96E9> <96E9> -<96EA> <96EA> -<96EF> <96EF> -<96F0> <96F0> -<96F1> <96F1> -<96F2> <96F2> -<96F5> <96F5> -<96F6> <96F6> -<96F7> <96F7> -<96F8> <96F8> -<96F9> <96F9> -<96FA> <96FA> -endbfrange - -100 beginbfrange -<96FB> <96FB> -<96FD> <96FD> -<96FF> <96FF> -<9700> <9700> -<9702> <9702> -<9704> <9704> -<9705> <9705> -<9706> <9707> -<9708> <9708> -<9709> <9709> -<970B> <970B> -<970D> <970D> -<970E> <970E> -<970F> <970F> -<9710> <9710> -<9711> <9711> -<9712> <9712> -<9713> <9713> -<9716> <9716> -<9718> <9718> -<9719> <9719> -<971C> <971C> -<971D> <971D> -<971E> <971E> -<971F> <971F> -<9720> <9720> -<9722> <9722> -<9723> <9723> -<9724> <9724> -<9725> <9725> -<9726> <9726> -<9727> <9727> -<9728> <9728> -<9729> <9729> -<972A> <972A> -<972B> <972C> -<972E> <972F> -<9730> <9730> -<9732> <9732> -<9735> <9735> -<9738> <9739> -<973A> <973A> -<973D> <973E> -<973F> <973F> -<9742> <9742> -<9743> <9743> -<9744> <9744> -<9746> <9746> -<9747> <9747> -<9748> <9748> -<9749> <9749> -<974B> <974B> -<9752> <9752> -<9756> <9756> -<9758> <9758> -<975A> <975A> -<975B> <975C> -<975E> <975E> -<9760> <9760> -<9761> <9761> -<9762> <9762> -<9766> <9766> -<9768> <9768> -<9769> <9769> -<976A> <976A> -<976C> <976C> -<976E> <976E> -<9770> <9770> -<9772> <9772> -<9773> <9773> -<9774> <9774> -<9776> <9776> -<9777> <9778> -<977A> <977A> -<977B> <977B> -<977C> <977C> -<977D> <977D> -<977E> <977E> -<977F> <977F> -<9780> <9780> -<9781> <9781> -<9782> <9782> -<9783> <9783> -<9784> <9784> -<9785> <9785> -<9788> <9788> -<978A> <978A> -<978B> <978B> -<978D> <978D> -<978E> <978E> -<978F> <978F> -<9794> <9794> -<9797> <9797> -<9798> <9798> -<9799> <9799> -<979A> <979A> -<979C> <979C> -<979D> <979D> -<979E> <979E> -<97A0> <97A0> -endbfrange - -100 beginbfrange -<97A1> <97A1> -<97A2> <97A2> -<97A3> <97A3> -<97A4> <97A4> -<97A5> <97A5> -<97A6> <97A6> -<97A8> <97A8> -<97AA> <97AA> -<97AB> <97AB> -<97AC> <97AC> -<97AD> <97AD> -<97AE> <97AE> -<97B3> <97B3> -<97B6> <97B6> -<97B7> <97B7> -<97B9> <97B9> -<97BB> <97BB> -<97BF> <97BF> -<97C1> <97C1> -<97C3> <97C3> -<97C4> <97C5> -<97C6> <97C6> -<97C7> <97C7> -<97C9> <97C9> -<97CB> <97CB> -<97CC> <97CC> -<97CD> <97CD> -<97CE> <97CE> -<97CF> <97CF> -<97D0> <97D0> -<97D3> <97D3> -<97D4> <97D4> -<97D5> <97D5> -<97D6> <97D6> -<97D7> <97D7> -<97D8> <97D8> -<97D9> <97D9> -<97DC> <97DC> -<97DD> <97DF> -<97E1> <97E1> -<97E3> <97E3> -<97E5> <97E5> -<97ED> <97ED> -<97F0> <97F0> -<97F1> <97F1> -<97F3> <97F3> -<97F6> <97F6> -<97F8> <97F8> -<97F9> <97F9> -<97FA> <97FA> -<97FB> <97FB> -<97FD> <97FE> -<97FF> <97FF> -<9800> <9800> -<9801> <9801> -<9802> <9803> -<9804> <9804> -<9805> <9806> -<9807> <9807> -<9808> <9808> -<980A> <980A> -<980C> <980C> -<980D> <980E> -<980F> <980F> -<9810> <9811> -<9812> <9812> -<9813> <9813> -<9816> <9816> -<9817> <9818> -<981B> <981B> -<981C> <981C> -<981D> <981D> -<981E> <981E> -<9820> <9820> -<9821> <9821> -<9824> <9824> -<9826> <9826> -<9827> <9827> -<9828> <9828> -<9829> <9829> -<982B> <982B> -<982D> <982D> -<982F> <982F> -<9830> <9830> -<9832> <9832> -<9835> <9835> -<9837> <9837> -<9838> <9838> -<9839> <9839> -<983B> <983B> -<9841> <9841> -<9843> <9843> -<9844> <9844> -<9845> <9845> -<9846> <9846> -<9848> <9848> -<9849> <9849> -<984A> <984A> -<984C> <984C> -<984D> <984D> -endbfrange - -100 beginbfrange -<984E> <984E> -<984F> <984F> -<9850> <9852> -<9853> <9853> -<9857> <9857> -<9858> <9858> -<9859> <9859> -<985B> <985B> -<985C> <985C> -<985D> <985D> -<985E> <985E> -<985F> <985F> -<9860> <9860> -<9862> <9863> -<9864> <9864> -<9865> <9865> -<9867> <9867> -<9869> <9869> -<986A> <986A> -<986B> <986B> -<986F> <986F> -<9870> <9870> -<9871> <9871> -<9872> <9872> -<9873> <9874> -<98A8> <98A8> -<98A9> <98A9> -<98AC> <98AC> -<98AD> <98AE> -<98AF> <98AF> -<98B1> <98B1> -<98B2> <98B2> -<98B3> <98B3> -<98B6> <98B6> -<98B8> <98B8> -<98BA> <98BA> -<98BB> <98BB> -<98BC> <98BC> -<98BD> <98BD> -<98BE> <98BE> -<98BF> <98BF> -<98C0> <98C0> -<98C1> <98C2> -<98C4> <98C4> -<98C6> <98C6> -<98C9> <98C9> -<98CB> <98CB> -<98CC> <98CC> -<98DB> <98DB> -<98DF> <98DF> -<98E2> <98E2> -<98E3> <98E3> -<98E5> <98E5> -<98E7> <98E7> -<98E9> <98E9> -<98EA> <98EA> -<98EB> <98EB> -<98ED> <98ED> -<98EF> <98EF> -<98F2> <98F2> -<98F4> <98F4> -<98F6> <98F6> -<98F9> <98F9> -<98FA> <98FA> -<98FC> <98FC> -<98FD> <98FE> -<9900> <9900> -<9902> <9902> -<9903> <9903> -<9905> <9905> -<9907> <9907> -<9908> <9908> -<9909> <9909> -<990A> <990A> -<990C> <990C> -<9910> <9910> -<9911> <9911> -<9912> <9912> -<9913> <9913> -<9914> <9914> -<9915> <9915> -<9916> <9917> -<9918> <9918> -<991A> <991A> -<991B> <991B> -<991E> <991E> -<991F> <991F> -<9921> <9921> -<9924> <9924> -<9925> <9925> -<9927> <9927> -<9928> <9928> -<9929> <9929> -<992A> <992A> -<992B> <992C> -<992D> <992D> -<992E> <992E> -<992F> <992F> -<9930> <9930> -<9931> <9931> -endbfrange - -100 beginbfrange -<9932> <9932> -<9933> <9933> -<9935> <9935> -<993A> <993A> -<993C> <993C> -<993D> <993D> -<993E> <993F> -<9941> <9941> -<9943> <9943> -<9945> <9945> -<9947> <9947> -<9948> <9948> -<9949> <9949> -<994B> <994B> -<994C> <994C> -<994E> <994E> -<9950> <9950> -<9951> <9951> -<9952> <9952> -<9953> <9953> -<9954> <9954> -<9955> <9955> -<9956> <9956> -<9957> <9957> -<9958> <9958> -<9959> <9959> -<995B> <995B> -<995C> <995C> -<995E> <995E> -<995F> <995F> -<9961> <9961> -<9996> <9996> -<9997> <9997> -<9998> <9998> -<9999> <9999> -<999C> <999C> -<999D> <999D> -<999E> <999E> -<99A1> <99A1> -<99A3> <99A3> -<99A5> <99A5> -<99A6> <99A7> -<99A8> <99A8> -<99AB> <99AB> -<99AC> <99AC> -<99AD> <99AD> -<99AE> <99AE> -<99AF> <99AF> -<99B0> <99B0> -<99B1> <99B1> -<99B2> <99B2> -<99B3> <99B3> -<99B4> <99B4> -<99B5> <99B5> -<99B9> <99B9> -<99BA> <99BA> -<99BB> <99BB> -<99BD> <99BD> -<99C1> <99C1> -<99C2> <99C2> -<99C3> <99C3> -<99C7> <99C7> -<99C9> <99C9> -<99CB> <99CB> -<99CC> <99CC> -<99CD> <99CD> -<99CE> <99CE> -<99CF> <99CF> -<99D0> <99D0> -<99D1> <99D1> -<99D2> <99D2> -<99D3> <99D4> -<99D5> <99D5> -<99D6> <99D6> -<99D7> <99D7> -<99D8> <99D8> -<99D9> <99D9> -<99DB> <99DB> -<99DC> <99DC> -<99DD> <99DD> -<99DF> <99DF> -<99E2> <99E2> -<99E3> <99E3> -<99E4> <99E4> -<99E5> <99E5> -<99E7> <99E7> -<99E9> <99E9> -<99EA> <99EA> -<99EC> <99EC> -<99ED> <99ED> -<99EE> <99EE> -<99F0> <99F0> -<99F1> <99F1> -<99F4> <99F4> -<99F6> <99F6> -<99F7> <99F7> -<99F8> <99F8> -<99F9> <99F9> -<99FA> <99FA> -<99FB> <99FB> -endbfrange - -100 beginbfrange -<99FC> <99FC> -<99FD> <99FE> -<99FF> <99FF> -<9A01> <9A01> -<9A02> <9A02> -<9A03> <9A03> -<9A04> <9A04> -<9A05> <9A05> -<9A06> <9A06> -<9A07> <9A07> -<9A09> <9A09> -<9A0A> <9A0A> -<9A0B> <9A0B> -<9A0D> <9A0D> -<9A0E> <9A0E> -<9A0F> <9A0F> -<9A11> <9A11> -<9A14> <9A14> -<9A15> <9A15> -<9A16> <9A16> -<9A19> <9A19> -<9A1A> <9A1A> -<9A1B> <9A1B> -<9A1C> <9A1C> -<9A1D> <9A1D> -<9A1E> <9A1E> -<9A20> <9A20> -<9A22> <9A22> -<9A23> <9A23> -<9A24> <9A24> -<9A25> <9A25> -<9A27> <9A27> -<9A29> <9A29> -<9A2A> <9A2A> -<9A2B> <9A2B> -<9A2C> <9A2C> -<9A2D> <9A2D> -<9A2E> <9A2E> -<9A30> <9A30> -<9A31> <9A31> -<9A32> <9A32> -<9A34> <9A34> -<9A35> <9A35> -<9A36> <9A36> -<9A37> <9A37> -<9A38> <9A38> -<9A39> <9A39> -<9A3A> <9A3A> -<9A3D> <9A3D> -<9A3E> <9A3E> -<9A3F> <9A3F> -<9A40> <9A40> -<9A41> <9A41> -<9A42> <9A42> -<9A43> <9A43> -<9A44> <9A44> -<9A45> <9A45> -<9A46> <9A46> -<9A48> <9A48> -<9A49> <9A49> -<9A4A> <9A4A> -<9A4C> <9A4C> -<9A4D> <9A4D> -<9A4E> <9A4E> -<9A4F> <9A4F> -<9A50> <9A50> -<9A52> <9A52> -<9A53> <9A54> -<9A55> <9A55> -<9A56> <9A56> -<9A57> <9A57> -<9A59> <9A59> -<9A5A> <9A5B> -<9A5E> <9A5E> -<9A5F> <9A5F> -<9A60> <9A60> -<9A62> <9A62> -<9A64> <9A64> -<9A65> <9A65> -<9A66> <9A67> -<9A68> <9A68> -<9A69> <9A69> -<9A6A> <9A6A> -<9A6B> <9A6B> -<9AA8> <9AA8> -<9AAB> <9AAB> -<9AAD> <9AAD> -<9AAF> <9AB0> -<9AB1> <9AB1> -<9AB3> <9AB3> -<9AB4> <9AB4> -<9AB7> <9AB7> -<9AB8> <9AB8> -<9AB9> <9AB9> -<9ABB> <9ABB> -<9ABC> <9ABC> -<9ABE> <9ABE> -<9ABF> <9ABF> -<9AC0> <9AC0> -<9AC1> <9AC1> -endbfrange - -100 beginbfrange -<9AC2> <9AC2> -<9AC6> <9AC6> -<9AC7> <9AC7> -<9ACA> <9ACA> -<9ACD> <9ACD> -<9ACF> <9ACF> -<9AD0> <9AD0> -<9AD1> <9AD1> -<9AD2> <9AD2> -<9AD3> <9AD4> -<9AD5> <9AD5> -<9AD6> <9AD6> -<9AD8> <9AD8> -<9ADC> <9ADC> -<9ADF> <9ADF> -<9AE1> <9AE1> -<9AE3> <9AE3> -<9AE6> <9AE6> -<9AE7> <9AE7> -<9AEB> <9AEB> -<9AEC> <9AEC> -<9AED> <9AED> -<9AEE> <9AEF> -<9AF1> <9AF1> -<9AF2> <9AF2> -<9AF3> <9AF3> -<9AF6> <9AF6> -<9AF7> <9AF7> -<9AF9> <9AF9> -<9AFA> <9AFA> -<9AFB> <9AFB> -<9AFC> <9AFC> -<9AFD> <9AFD> -<9AFE> <9AFE> -<9B01> <9B01> -<9B03> <9B03> -<9B04> <9B05> -<9B06> <9B06> -<9B08> <9B08> -<9B0A> <9B0A> -<9B0B> <9B0B> -<9B0C> <9B0C> -<9B0D> <9B0D> -<9B0E> <9B0E> -<9B10> <9B10> -<9B11> <9B11> -<9B12> <9B12> -<9B15> <9B15> -<9B16> <9B16> -<9B17> <9B18> -<9B19> <9B19> -<9B1A> <9B1A> -<9B1E> <9B20> -<9B22> <9B22> -<9B23> <9B23> -<9B24> <9B24> -<9B25> <9B25> -<9B27> <9B27> -<9B28> <9B28> -<9B29> <9B29> -<9B2B> <9B2B> -<9B2E> <9B2E> -<9B2F> <9B2F> -<9B31> <9B31> -<9B32> <9B32> -<9B33> <9B33> -<9B35> <9B35> -<9B37> <9B37> -<9B3A> <9B3A> -<9B3B> <9B3B> -<9B3C> <9B3C> -<9B3E> <9B3F> -<9B41> <9B42> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> -<9B46> <9B46> -<9B48> <9B48> -<9B4A> <9B4A> -<9B4B> <9B4B> -<9B4C> <9B4C> -<9B4D> <9B4D> -<9B4E> <9B4E> -<9B4F> <9B4F> -<9B51> <9B51> -<9B52> <9B52> -<9B54> <9B54> -<9B55> <9B55> -<9B56> <9B56> -<9B58> <9B58> -<9B59> <9B59> -<9B5A> <9B5A> -<9B5B> <9B5B> -<9B5F> <9B5F> -<9B60> <9B61> -<9B64> <9B64> -<9B66> <9B66> -<9B67> <9B67> -<9B68> <9B68> -<9B6C> <9B6C> -endbfrange - -100 beginbfrange -<9B6F> <9B6F> -<9B70> <9B70> -<9B71> <9B71> -<9B74> <9B74> -<9B75> <9B75> -<9B76> <9B76> -<9B77> <9B77> -<9B7A> <9B7A> -<9B7B> <9B7B> -<9B7C> <9B7C> -<9B7D> <9B7D> -<9B7E> <9B7E> -<9B80> <9B80> -<9B82> <9B82> -<9B85> <9B85> -<9B86> <9B86> -<9B87> <9B87> -<9B88> <9B88> -<9B90> <9B90> -<9B91> <9B91> -<9B92> <9B92> -<9B93> <9B93> -<9B95> <9B95> -<9B9A> <9B9A> -<9B9B> <9B9B> -<9B9E> <9B9E> -<9BA0> <9BA0> -<9BA1> <9BA1> -<9BA2> <9BA2> -<9BA4> <9BA4> -<9BA5> <9BA5> -<9BA6> <9BA6> -<9BA8> <9BA8> -<9BAA> <9BAA> -<9BAB> <9BAB> -<9BAD> <9BAD> -<9BAE> <9BAE> -<9BAF> <9BAF> -<9BB5> <9BB5> -<9BB6> <9BB6> -<9BB8> <9BB8> -<9BB9> <9BB9> -<9BBD> <9BBD> -<9BBF> <9BBF> -<9BC0> <9BC0> -<9BC1> <9BC1> -<9BC3> <9BC3> -<9BC4> <9BC4> -<9BC6> <9BC6> -<9BC7> <9BC7> -<9BC8> <9BC8> -<9BC9> <9BC9> -<9BCA> <9BCA> -<9BD3> <9BD3> -<9BD4> <9BD4> -<9BD5> <9BD5> -<9BD6> <9BD6> -<9BD7> <9BD7> -<9BD9> <9BD9> -<9BDA> <9BDA> -<9BDB> <9BDB> -<9BDC> <9BDC> -<9BDE> <9BDE> -<9BE0> <9BE0> -<9BE1> <9BE1> -<9BE2> <9BE2> -<9BE4> <9BE4> -<9BE5> <9BE5> -<9BE6> <9BE6> -<9BE7> <9BE7> -<9BE8> <9BE8> -<9BEA> <9BEB> -<9BEC> <9BEC> -<9BF0> <9BF0> -<9BF7> <9BF7> -<9BF8> <9BF8> -<9BFD> <9BFD> -<9C05> <9C05> -<9C06> <9C06> -<9C07> <9C07> -<9C08> <9C08> -<9C09> <9C09> -<9C0B> <9C0B> -<9C0D> <9C0D> -<9C0E> <9C0E> -<9C12> <9C12> -<9C13> <9C13> -<9C14> <9C14> -<9C17> <9C17> -<9C1C> <9C1C> -<9C1D> <9C1D> -<9C21> <9C21> -<9C23> <9C23> -<9C24> <9C24> -<9C25> <9C25> -<9C28> <9C29> -<9C2B> <9C2B> -<9C2C> <9C2C> -<9C2D> <9C2D> -<9C31> <9C31> -endbfrange - -100 beginbfrange -<9C32> <9C32> -<9C33> <9C33> -<9C34> <9C34> -<9C36> <9C36> -<9C37> <9C37> -<9C39> <9C39> -<9C3B> <9C3B> -<9C3C> <9C3C> -<9C3D> <9C3D> -<9C3E> <9C3E> -<9C3F> <9C3F> -<9C40> <9C40> -<9C41> <9C41> -<9C44> <9C44> -<9C46> <9C46> -<9C48> <9C48> -<9C49> <9C49> -<9C4A> <9C4A> -<9C4B> <9C4B> -<9C4C> <9C4C> -<9C4D> <9C4D> -<9C4E> <9C4E> -<9C50> <9C50> -<9C52> <9C52> -<9C54> <9C54> -<9C55> <9C55> -<9C56> <9C56> -<9C57> <9C57> -<9C58> <9C58> -<9C59> <9C59> -<9C5E> <9C5E> -<9C5F> <9C5F> -<9C60> <9C60> -<9C62> <9C62> -<9C63> <9C63> -<9C66> <9C66> -<9C67> <9C67> -<9C68> <9C68> -<9C6D> <9C6D> -<9C6E> <9C6E> -<9C71> <9C71> -<9C73> <9C73> -<9C74> <9C74> -<9C75> <9C75> -<9C77> <9C78> -<9C79> <9C79> -<9C7A> <9C7A> -<9CE5> <9CE5> -<9CE6> <9CE6> -<9CE7> <9CE7> -<9CE9> <9CE9> -<9CEA> <9CEA> -<9CED> <9CED> -<9CF1> <9CF2> -<9CF3> <9CF3> -<9CF4> <9CF4> -<9CF5> <9CF5> -<9CF6> <9CF6> -<9CF7> <9CF7> -<9CF9> <9CF9> -<9CFA> <9CFA> -<9CFB> <9CFB> -<9CFC> <9CFC> -<9CFD> <9CFD> -<9CFF> <9CFF> -<9D00> <9D00> -<9D03> <9D03> -<9D04> <9D04> -<9D05> <9D05> -<9D06> <9D06> -<9D07> <9D07> -<9D08> <9D08> -<9D09> <9D09> -<9D10> <9D10> -<9D12> <9D12> -<9D14> <9D14> -<9D15> <9D15> -<9D17> <9D17> -<9D18> <9D18> -<9D19> <9D19> -<9D1B> <9D1B> -<9D1D> <9D1D> -<9D1E> <9D1E> -<9D1F> <9D1F> -<9D20> <9D20> -<9D22> <9D22> -<9D23> <9D23> -<9D25> <9D25> -<9D26> <9D26> -<9D28> <9D28> -<9D29> <9D29> -<9D2D> <9D2D> -<9D2E> <9D2F> -<9D30> <9D30> -<9D31> <9D31> -<9D33> <9D33> -<9D36> <9D36> -<9D37> <9D37> -<9D38> <9D38> -<9D3B> <9D3B> -endbfrange - -100 beginbfrange -<9D3D> <9D3D> -<9D3E> <9D3E> -<9D3F> <9D3F> -<9D40> <9D40> -<9D41> <9D41> -<9D42> <9D43> -<9D45> <9D45> -<9D4A> <9D4A> -<9D4B> <9D4B> -<9D4C> <9D4C> -<9D4F> <9D4F> -<9D51> <9D51> -<9D52> <9D52> -<9D53> <9D53> -<9D54> <9D54> -<9D56> <9D56> -<9D57> <9D57> -<9D58> <9D58> -<9D59> <9D59> -<9D5A> <9D5A> -<9D5B> <9D5B> -<9D5C> <9D5C> -<9D5D> <9D5D> -<9D5F> <9D5F> -<9D60> <9D60> -<9D61> <9D61> -<9D67> <9D67> -<9D68> <9D68> -<9D69> <9D69> -<9D6A> <9D6A> -<9D6B> <9D6B> -<9D6C> <9D6C> -<9D6F> <9D6F> -<9D70> <9D70> -<9D71> <9D71> -<9D72> <9D72> -<9D73> <9D73> -<9D74> <9D75> -<9D77> <9D77> -<9D78> <9D78> -<9D79> <9D79> -<9D7B> <9D7B> -<9D7D> <9D7D> -<9D7F> <9D7F> -<9D80> <9D80> -<9D81> <9D81> -<9D82> <9D82> -<9D84> <9D84> -<9D85> <9D85> -<9D86> <9D86> -<9D87> <9D87> -<9D88> <9D88> -<9D89> <9D89> -<9D8A> <9D8A> -<9D8B> <9D8C> -<9D90> <9D90> -<9D92> <9D92> -<9D94> <9D94> -<9D96> <9D96> -<9D97> <9D97> -<9D98> <9D98> -<9D99> <9D99> -<9D9A> <9D9A> -<9D9B> <9D9B> -<9D9C> <9D9C> -<9D9D> <9D9D> -<9D9E> <9D9E> -<9D9F> <9D9F> -<9DA0> <9DA0> -<9DA1> <9DA1> -<9DA2> <9DA2> -<9DA3> <9DA3> -<9DA4> <9DA4> -<9DA6> <9DA7> -<9DA8> <9DA8> -<9DA9> <9DA9> -<9DAA> <9DAA> -<9DAC> <9DAC> -<9DAD> <9DAD> -<9DAF> <9DAF> -<9DB1> <9DB1> -<9DB2> <9DB2> -<9DB3> <9DB3> -<9DB4> <9DB4> -<9DB5> <9DB5> -<9DB6> <9DB6> -<9DB7> <9DB7> -<9DB8> <9DB8> -<9DB9> <9DBA> -<9DBB> <9DBB> -<9DBC> <9DBC> -<9DBE> <9DBE> -<9DBF> <9DBF> -<9DC1> <9DC1> -<9DC2> <9DC2> -<9DC3> <9DC3> -<9DC5> <9DC5> -<9DC7> <9DC7> -<9DC8> <9DC8> -<9DCA> <9DCA> -endbfrange - -100 beginbfrange -<9DCB> <9DCB> -<9DCC> <9DCC> -<9DCD> <9DCD> -<9DCE> <9DCE> -<9DCF> <9DCF> -<9DD0> <9DD0> -<9DD1> <9DD1> -<9DD2> <9DD2> -<9DD3> <9DD3> -<9DD5> <9DD5> -<9DD6> <9DD6> -<9DD7> <9DD7> -<9DD8> <9DD8> -<9DD9> <9DD9> -<9DDA> <9DDA> -<9DDB> <9DDB> -<9DDC> <9DDC> -<9DDD> <9DDD> -<9DDE> <9DDE> -<9DDF> <9DDF> -<9DE1> <9DE1> -<9DE2> <9DE2> -<9DE3> <9DE3> -<9DE4> <9DE4> -<9DE5> <9DE5> -<9DE6> <9DE6> -<9DE8> <9DE8> -<9DE9> <9DE9> -<9DEB> <9DEB> -<9DEC> <9DEC> -<9DED> <9DED> -<9DEE> <9DEE> -<9DEF> <9DEF> -<9DF0> <9DF0> -<9DF2> <9DF2> -<9DF3> <9DF3> -<9DF4> <9DF4> -<9DF5> <9DF5> -<9DF6> <9DF6> -<9DF7> <9DF7> -<9DF8> <9DF8> -<9DF9> <9DFA> -<9DFB> <9DFB> -<9DFD> <9DFD> -<9DFE> <9DFE> -<9DFF> <9DFF> -<9E00> <9E01> -<9E02> <9E02> -<9E03> <9E03> -<9E04> <9E04> -<9E05> <9E05> -<9E06> <9E06> -<9E07> <9E07> -<9E09> <9E09> -<9E0B> <9E0B> -<9E0D> <9E0D> -<9E0F> <9E0F> -<9E10> <9E10> -<9E11> <9E11> -<9E12> <9E12> -<9E13> <9E13> -<9E14> <9E14> -<9E15> <9E15> -<9E17> <9E17> -<9E19> <9E19> -<9E1A> <9E1A> -<9E1B> <9E1B> -<9E1D> <9E1D> -<9E1E> <9E1E> -<9E75> <9E75> -<9E79> <9E79> -<9E7A> <9E7A> -<9E7C> <9E7D> -<9E7F> <9E7F> -<9E80> <9E80> -<9E82> <9E82> -<9E83> <9E83> -<9E86> <9E87> -<9E88> <9E88> -<9E89> <9E89> -<9E8A> <9E8A> -<9E8B> <9E8B> -<9E8C> <9E8C> -<9E8D> <9E8D> -<9E8E> <9E8E> -<9E91> <9E91> -<9E92> <9E92> -<9E93> <9E93> -<9E94> <9E94> -<9E97> <9E97> -<9E99> <9E99> -<9E9A> <9E9A> -<9E9B> <9E9B> -<9E9C> <9E9C> -<9E9D> <9E9D> -<9E9F> <9E9F> -<9EA0> <9EA0> -<9EA1> <9EA1> -<9EA4> <9EA4> -<9EA5> <9EA5> -endbfrange - -100 beginbfrange -<9EA7> <9EA7> -<9EA9> <9EA9> -<9EAD> <9EAD> -<9EAE> <9EAE> -<9EB0> <9EB0> -<9EB4> <9EB4> -<9EB5> <9EB5> -<9EB6> <9EB6> -<9EB7> <9EB7> -<9EBB> <9EBB> -<9EBC> <9EBC> -<9EBE> <9EBE> -<9EC0> <9EC0> -<9EC2> <9EC2> -<9EC3> <9EC3> -<9EC8> <9EC8> -<9ECC> <9ECC> -<9ECD> <9ECD> -<9ECE> <9ECE> -<9ECF> <9ECF> -<9ED0> <9ED0> -<9ED1> <9ED1> -<9ED3> <9ED3> -<9ED4> <9ED4> -<9ED5> <9ED6> -<9ED8> <9ED8> -<9EDA> <9EDA> -<9EDB> <9EDB> -<9EDC> <9EDD> -<9EDE> <9EDE> -<9EDF> <9EDF> -<9EE0> <9EE0> -<9EE4> <9EE4> -<9EE5> <9EE5> -<9EE6> <9EE6> -<9EE7> <9EE7> -<9EE8> <9EE8> -<9EEB> <9EEB> -<9EED> <9EED> -<9EEE> <9EEE> -<9EEF> <9EEF> -<9EF0> <9EF0> -<9EF2> <9EF3> -<9EF4> <9EF4> -<9EF5> <9EF5> -<9EF6> <9EF6> -<9EF7> <9EF7> -<9EF9> <9EF9> -<9EFA> <9EFA> -<9EFB> <9EFB> -<9EFC> <9EFC> -<9EFD> <9EFD> -<9EFF> <9EFF> -<9F00> <9F00> -<9F01> <9F01> -<9F06> <9F06> -<9F07> <9F07> -<9F09> <9F09> -<9F0A> <9F0A> -<9F0E> <9F0E> -<9F0F> <9F10> -<9F12> <9F12> -<9F13> <9F13> -<9F15> <9F15> -<9F16> <9F16> -<9F18> <9F18> -<9F19> <9F19> -<9F1A> <9F1A> -<9F1B> <9F1B> -<9F1C> <9F1C> -<9F1E> <9F1E> -<9F20> <9F20> -<9F22> <9F22> -<9F23> <9F23> -<9F24> <9F24> -<9F25> <9F25> -<9F28> <9F28> -<9F29> <9F29> -<9F2A> <9F2A> -<9F2B> <9F2B> -<9F2C> <9F2C> -<9F2D> <9F2D> -<9F2E> <9F2E> -<9F2F> <9F2F> -<9F30> <9F30> -<9F31> <9F31> -<9F32> <9F32> -<9F33> <9F33> -<9F34> <9F34> -<9F35> <9F35> -<9F36> <9F36> -<9F37> <9F37> -<9F38> <9F38> -<9F3B> <9F3B> -<9F3D> <9F3D> -<9F3E> <9F3E> -<9F40> <9F41> -<9F42> <9F42> -<9F43> <9F43> -<9F46> <9F46> -endbfrange - -100 beginbfrange -<9F47> <9F47> -<9F48> <9F48> -<9F49> <9F49> -<9F4A> <9F4A> -<9F4B> <9F4B> -<9F4C> <9F4C> -<9F4D> <9F4D> -<9F4E> <9F4E> -<9F4F> <9F4F> -<9F52> <9F52> -<9F54> <9F54> -<9F55> <9F55> -<9F56> <9F58> -<9F59> <9F59> -<9F5B> <9F5B> -<9F5C> <9F5C> -<9F5D> <9F5D> -<9F5E> <9F5E> -<9F5F> <9F5F> -<9F60> <9F60> -<9F61> <9F61> -<9F63> <9F63> -<9F64> <9F64> -<9F65> <9F65> -<9F66> <9F67> -<9F6A> <9F6A> -<9F6B> <9F6B> -<9F6C> <9F6C> -<9F6E> <9F6F> -<9F70> <9F70> -<9F71> <9F71> -<9F72> <9F72> -<9F74> <9F76> -<9F77> <9F77> -<9F78> <9F78> -<9F79> <9F79> -<9F7A> <9F7A> -<9F7B> <9F7B> -<9F7E> <9F7E> -<9F8D> <9F8D> -<9F90> <9F90> -<9F91> <9F91> -<9F92> <9F92> -<9F94> <9F94> -<9F95> <9F95> -<9F98> <9F98> -<9F9C> <9F9C> -<9FA0> <9FA0> -<9FA2> <9FA2> -<9FA4> <9FA4> - <81> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -12 beginbfrange - - - - - - - - - - - - -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-GBK-EUC b/Resources/cmap/UCS2-GBK-EUC deleted file mode 100644 index 689bc206ec4..00000000000 --- a/Resources/cmap/UCS2-GBK-EUC +++ /dev/null @@ -1,11253 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-GBK-EUC) -%%Title: (UCS2-GBK-EUC) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_GBK_EUC) def - /Supplement 2 def -end def - -/CMapName /UCS2-GBK-EUC def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <0080> <00> -<00A2> <00A3> -<00A4> <00A4> -<00A5> <00A5> -<00A6> <00A6> <7C> -<00A7> <00A7> -<00A8> <00A8> -<00AA> <00AA> <61> -<00AD> <00AD> <2D> -<00AF> <00AF> -<00B0> <00B0> -<00B1> <00B1> -<00B2> <00B3> <32> -<00B4> <00B4> -<00B5> <00B5> -<00B7> <00B7> -<00B9> <00B9> <31> -<00BA> <00BA> <6F> -<00C0> <00C0> -<00C1> <00C1> -<00C8> <00C8> -<00C9> <00C9> -<00CA> <00CA> -<00CC> <00CC> -<00CD> <00CD> -<00D0> <00D0> <44> -<00D2> <00D2> -<00D3> <00D3> -<00D7> <00D7> -<00D9> <00D9> -<00DA> <00DA> -<00DC> <00DC> -<00DD> <00DD> <59> -<00DE> <00DE> <54> -<00E0> <00E0> -<00E1> <00E1> -<00E2> <00E2> <61> -<00E8> <00E8> -<00E9> <00E9> -<00EA> <00EA> -<00EC> <00EC> -<00ED> <00ED> -<00F0> <00F0> <65> -<00F2> <00F2> -<00F3> <00F3> -<00F7> <00F7> -<00F9> <00F9> -<00FA> <00FA> -<00FC> <00FC> -<00FD> <00FD> <79> -<00FE> <00FE> <74> -<0100> <0100> -<0101> <0101> -<0112> <0112> -<0113> <0113> -<011A> <011A> -<011B> <011B> -<012A> <012A> -<012B> <012B> -<0144> <0144> -<0148> <0148> -<014C> <014C> -<014D> <014D> -<016A> <016A> -<016B> <016B> -<01C1> <01C1> -<01CD> <01CD> -<01CE> <01CE> -<01CF> <01CF> -<01D0> <01D0> -<01D1> <01D1> -<01D2> <01D2> -<01D3> <01D3> -<01D4> <01D4> -<01D5> <01D5> -<01D6> <01D7> -<01D8> <01D9> -<01DA> <01DB> -<01DC> <01DC> -<0251> <0251> -<0261> <0261> -<02C7> <02C7> -<02C9> <02C9> -<02CA> <02CB> -<02D0> <02D0> -<02D9> <02D9> -<0391> <03A1> -<03A3> <03A9> -<03B1> <03C1> -<03C3> <03C9> -<0401> <0401> -<0410> <0415> -<0416> <042F> -<0430> <0435> -<0436> <044F> -<0451> <0451> -<1E3F> <1E3F> -<2010> <2010> -<2013> <2013> -<2014> <2014> -endbfrange - -100 beginbfrange -<2015> <2015> -<2016> <2016> -<2018> <2019> -<201C> <201D> -<2022> <2022> -<2025> <2025> -<2026> <2026> -<2027> <2027> -<2030> <2030> -<2032> <2033> -<2035> <2035> -<203B> <203B> -<203E> <203E> -<2103> <2103> -<2105> <2105> -<2109> <2109> -<2116> <2116> -<2121> <2121> -<2160> <216B> -<2170> <2179> -<2190> <2191> -<2192> <2192> -<2193> <2193> -<2196> <2199> -<2208> <2208> -<220F> <220F> -<2211> <2211> -<2215> <2215> -<2218> <2218> -<221A> <221A> -<221D> <221D> -<221E> <221E> -<221F> <221F> -<2220> <2220> -<2223> <2223> -<2225> <2225> -<2227> <2228> -<2229> <2229> -<222A> <222A> -<222B> <222B> -<222E> <222E> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<2237> <2237> -<223C> <223C> -<223D> <223D> -<2248> <2248> -<224C> <224C> -<2252> <2252> -<2260> <2260> -<2261> <2261> -<2264> <2265> -<2266> <2267> -<226E> <226F> -<2295> <2295> -<2299> <2299> -<22A5> <22A5> -<22BF> <22BF> -<22EF> <22EF> -<2312> <2312> -<2460> <2469> -<2474> <2487> -<2488> <249B> -<2500> <254B> -<2550> <2573> -<2581> <2587> -<2588> <258F> -<2593> <2595> -<25A0> <25A0> -<25A1> <25A1> -<25B2> <25B2> -<25B3> <25B3> -<25BC> <25BD> -<25C6> <25C6> -<25C7> <25C7> -<25C9> <25C9> -<25CB> <25CB> -<25CE> <25CE> -<25CF> <25CF> -<25E2> <25E5> -<2605> <2605> -<2606> <2606> -<2609> <2609> -<2640> <2640> -<2642> <2642> -<3000> <3002> -<3003> <3003> -<3005> <3005> -<3006> <3006> -<3007> <3007> -<3008> <300F> -<3010> <3011> -<3012> <3012> -<3013> <3013> -<3014> <3015> -<3016> <3017> -<301C> <301C> -<301D> <301E> -<3021> <3029> -endbfrange - -100 beginbfrange -<3041> <3093> -<309B> <309C> -<309D> <309E> -<30A1> <30F6> -<30FC> <30FC> -<30FD> <30FE> -<3105> <3129> -<3192> <3192> -<3193> <3193> -<3194> <3194> -<3195> <3195> -<3196> <3196> -<3197> <3197> -<3198> <3198> -<3199> <3199> -<319A> <319A> -<319B> <319B> -<319C> <319C> -<319D> <319D> -<319E> <319E> -<319F> <319F> -<3220> <3229> -<322A> <322A> -<322B> <322B> -<322C> <322C> -<322D> <322D> -<322E> <322E> -<322F> <322F> -<3230> <3230> -<3231> <3231> -<3232> <3232> -<3233> <3233> -<3234> <3234> -<3235> <3235> -<3236> <3236> -<3237> <3237> -<3238> <3238> -<3239> <3239> -<323A> <323A> -<323B> <323B> -<323C> <323C> -<323D> <323D> -<323E> <323E> -<323F> <323F> -<3240> <3240> -<3241> <3241> -<3242> <3242> -<3243> <3243> -<3280> <3280> -<3281> <3281> -<3282> <3282> -<3283> <3283> -<3284> <3284> -<3285> <3285> -<3286> <3286> -<3287> <3287> -<3288> <3288> -<3289> <3289> -<328A> <328A> -<328B> <328B> -<328C> <328C> -<328D> <328D> -<328E> <328E> -<328F> <328F> -<3290> <3290> -<3291> <3291> -<3292> <3292> -<3293> <3293> -<3294> <3294> -<3295> <3295> -<3296> <3296> -<3297> <3297> -<3298> <3298> -<3299> <3299> -<329A> <329A> -<329B> <329B> -<329C> <329C> -<329D> <329D> -<329F> <329F> -<32A0> <32A0> -<32A1> <32A1> -<32A2> <32A2> -<32A3> <32A3> -<32A9> <32A9> -<32AA> <32AA> -<32AB> <32AB> -<32AC> <32AC> -<32AD> <32AD> -<32AE> <32AE> -<32AF> <32AF> -<32B0> <32B0> -<338E> <338F> -<339C> <339E> -<33A1> <33A1> -<33C4> <33C4> -<33CE> <33CE> -<33D1> <33D2> -<33D5> <33D5> -<4E00> <4E00> -<4E01> <4E01> -endbfrange - -100 beginbfrange -<4E02> <4E02> <8140> -<4E03> <4E03> -<4E04> <4E06> <8141> -<4E07> <4E07> -<4E08> <4E08> -<4E09> <4E09> -<4E0A> <4E0A> -<4E0B> <4E0B> -<4E0C> <4E0C> -<4E0D> <4E0D> -<4E0E> <4E0E> -<4E0F> <4E0F> <8144> -<4E10> <4E10> -<4E11> <4E11> -<4E12> <4E12> <8145> -<4E13> <4E13> -<4E14> <4E14> -<4E15> <4E15> -<4E16> <4E16> -<4E17> <4E17> <8146> -<4E18> <4E18> -<4E19> <4E19> -<4E1A> <4E1A> -<4E1B> <4E1B> -<4E1C> <4E1C> -<4E1D> <4E1D> -<4E1E> <4E1E> -<4E1F> <4E21> <8147> -<4E22> <4E22> -<4E23> <4E23> <814A> -<4E24> <4E24> -<4E25> <4E25> -<4E26> <4E26> <814B> -<4E27> <4E27> -<4E28> <4E28> -<4E29> <4E29> <814C> -<4E2A> <4E2A> -<4E2B> <4E2B> -<4E2C> <4E2C> -<4E2D> <4E2D> -<4E2E> <4E2F> <814D> -<4E30> <4E30> -<4E31> <4E31> <814F> -<4E32> <4E32> -<4E33> <4E33> <8150> -<4E34> <4E34> -<4E35> <4E35> <8151> -<4E36> <4E36> -<4E37> <4E37> <8152> -<4E38> <4E38> -<4E39> <4E39> -<4E3A> <4E3A> -<4E3B> <4E3B> -<4E3C> <4E3C> <8153> -<4E3D> <4E3D> -<4E3E> <4E3E> -<4E3F> <4E3F> -<4E40> <4E42> <8154> -<4E43> <4E43> -<4E44> <4E44> <8157> -<4E45> <4E45> -<4E46> <4E46> <8158> -<4E47> <4E47> -<4E48> <4E48> -<4E49> <4E49> -<4E4A> <4E4A> <8159> -<4E4B> <4E4B> -<4E4C> <4E4C> -<4E4D> <4E4D> -<4E4E> <4E4E> -<4E4F> <4E4F> -<4E50> <4E50> -<4E51> <4E51> <815A> -<4E52> <4E52> -<4E53> <4E53> -<4E54> <4E54> -<4E55> <4E55> <815B> -<4E56> <4E56> -<4E57> <4E57> <815C> -<4E58> <4E58> -<4E59> <4E59> -<4E5A> <4E5B> <815D> -<4E5C> <4E5C> -<4E5D> <4E5D> -<4E5E> <4E5E> -<4E5F> <4E5F> -<4E60> <4E60> -<4E61> <4E61> -<4E62> <4E65> <815F> -<4E66> <4E66> -<4E67> <4E68> <8163> -<4E69> <4E69> -<4E6A> <4E6F> <8165> -<4E70> <4E70> -<4E71> <4E71> -<4E72> <4E72> <816B> -<4E73> <4E73> -<4E74> <4E7D> <816C> -<4E7E> <4E7E> -<4E7F> <4E85> <8176> -endbfrange - -100 beginbfrange -<4E86> <4E86> -<4E87> <4E87> <817D> -<4E88> <4E88> -<4E89> <4E89> -<4E8A> <4E8A> <817E> -<4E8B> <4E8B> -<4E8C> <4E8C> -<4E8D> <4E8D> -<4E8E> <4E8E> -<4E8F> <4E8F> -<4E90> <4E90> <8180> -<4E91> <4E91> -<4E92> <4E92> -<4E93> <4E93> -<4E94> <4E94> -<4E95> <4E95> -<4E96> <4E97> <8181> -<4E98> <4E98> -<4E99> <4E99> <8183> -<4E9A> <4E9A> -<4E9B> <4E9B> -<4E9C> <4E9E> <8184> -<4E9F> <4E9F> -<4EA0> <4EA0> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA3> <4EA3> <8187> -<4EA4> <4EA4> -<4EA5> <4EA5> -<4EA6> <4EA6> -<4EA7> <4EA7> -<4EA8> <4EA8> -<4EA9> <4EA9> -<4EAA> <4EAA> <8188> -<4EAB> <4EAB> -<4EAC> <4EAC> -<4EAD> <4EAD> -<4EAE> <4EAE> -<4EAF> <4EB1> <8189> -<4EB2> <4EB2> -<4EB3> <4EB3> -<4EB4> <4EB4> <818C> -<4EB5> <4EB5> -<4EB6> <4EB9> <818D> -<4EBA> <4EBA> -<4EBB> <4EBB> -<4EBC> <4EBE> <8191> -<4EBF> <4EBF> -<4EC0> <4EC0> -<4EC1> <4EC1> -<4EC2> <4EC2> -<4EC3> <4EC3> -<4EC4> <4EC4> -<4EC5> <4EC5> -<4EC6> <4EC6> -<4EC7> <4EC7> -<4EC8> <4EC8> <8194> -<4EC9> <4EC9> -<4ECA> <4ECA> -<4ECB> <4ECB> -<4ECC> <4ECC> <8195> -<4ECD> <4ECD> -<4ECE> <4ECE> -<4ECF> <4ED0> <8196> -<4ED1> <4ED1> -<4ED2> <4ED2> <8198> -<4ED3> <4ED3> -<4ED4> <4ED4> -<4ED5> <4ED5> -<4ED6> <4ED6> -<4ED7> <4ED7> -<4ED8> <4ED8> -<4ED9> <4ED9> -<4EDA> <4EDC> <8199> -<4EDD> <4EDD> -<4EDE> <4EDE> -<4EDF> <4EDF> -<4EE0> <4EE0> <819C> -<4EE1> <4EE1> -<4EE2> <4EE2> <819D> -<4EE3> <4EE3> -<4EE4> <4EE4> -<4EE5> <4EE5> -<4EE6> <4EE7> <819E> -<4EE8> <4EE8> -<4EE9> <4EE9> <81A0> -<4EEA> <4EEA> -<4EEB> <4EEB> -<4EEC> <4EEC> -<4EED> <4EEF> <81A1> -<4EF0> <4EF0> -<4EF1> <4EF1> <81A4> -<4EF2> <4EF2> -<4EF3> <4EF3> -<4EF4> <4EF4> <81A5> -<4EF5> <4EF5> -<4EF6> <4EF6> -<4EF7> <4EF7> -<4EF8> <4EFA> <81A6> -<4EFB> <4EFB> -endbfrange - -100 beginbfrange -<4EFC> <4EFC> <81A9> -<4EFD> <4EFD> -<4EFE> <4EFE> <81AA> -<4EFF> <4EFF> -<4F00> <4F00> <81AB> -<4F01> <4F01> -<4F02> <4F08> <81AC> -<4F09> <4F09> -<4F0A> <4F0A> -<4F0B> <4F0C> <81B3> -<4F0D> <4F0D> -<4F0E> <4F0E> -<4F0F> <4F0F> -<4F10> <4F10> -<4F11> <4F11> -<4F12> <4F16> <81B5> -<4F17> <4F17> -<4F18> <4F18> -<4F19> <4F19> -<4F1A> <4F1A> -<4F1B> <4F1B> -<4F1C> <4F1D> <81BA> -<4F1E> <4F1E> -<4F1F> <4F1F> -<4F20> <4F20> -<4F21> <4F21> <81BC> -<4F22> <4F22> -<4F23> <4F23> <81BD> -<4F24> <4F24> -<4F25> <4F25> -<4F26> <4F26> -<4F27> <4F27> -<4F28> <4F29> <81BE> -<4F2A> <4F2A> -<4F2B> <4F2B> -<4F2C> <4F2E> <81C0> -<4F2F> <4F2F> -<4F30> <4F30> -<4F31> <4F31> <81C3> -<4F32> <4F32> -<4F33> <4F33> <81C4> -<4F34> <4F34> -<4F35> <4F35> <81C5> -<4F36> <4F36> -<4F37> <4F37> <81C6> -<4F38> <4F38> -<4F39> <4F39> <81C7> -<4F3A> <4F3A> -<4F3B> <4F3B> <81C8> -<4F3C> <4F3C> -<4F3D> <4F3D> -<4F3E> <4F42> <81C9> -<4F43> <4F43> -<4F44> <4F45> <81CE> -<4F46> <4F46> -<4F47> <4F4C> <81D0> -<4F4D> <4F4D> -<4F4E> <4F4E> -<4F4F> <4F4F> -<4F50> <4F50> -<4F51> <4F51> -<4F52> <4F52> <81D6> -<4F53> <4F53> -<4F54> <4F54> <81D7> -<4F55> <4F55> -<4F56> <4F56> <81D8> -<4F57> <4F57> -<4F58> <4F58> -<4F59> <4F59> -<4F5A> <4F5A> -<4F5B> <4F5B> -<4F5C> <4F5C> -<4F5D> <4F5D> -<4F5E> <4F5E> -<4F5F> <4F5F> -<4F60> <4F60> -<4F61> <4F62> <81D9> -<4F63> <4F63> -<4F64> <4F64> -<4F65> <4F65> -<4F66> <4F66> <81DB> -<4F67> <4F67> -<4F68> <4F68> <81DC> -<4F69> <4F69> -<4F6A> <4F6B> <81DD> -<4F6C> <4F6C> -<4F6D> <4F6E> <81DF> -<4F6F> <4F6F> -<4F70> <4F70> -<4F71> <4F72> <81E1> -<4F73> <4F73> -<4F74> <4F74> -<4F75> <4F75> <81E3> -<4F76> <4F76> -<4F77> <4F7A> <81E4> -<4F7B> <4F7B> -<4F7C> <4F7C> -<4F7D> <4F7D> <81E8> -<4F7E> <4F7E> -<4F7F> <4F7F> -endbfrange - -100 beginbfrange -<4F80> <4F82> <81E9> -<4F83> <4F83> -<4F84> <4F84> -<4F85> <4F87> <81EC> -<4F88> <4F88> -<4F89> <4F89> -<4F8A> <4F8A> <81EF> -<4F8B> <4F8B> -<4F8C> <4F8C> <81F0> -<4F8D> <4F8D> -<4F8E> <4F8E> <81F1> -<4F8F> <4F8F> -<4F90> <4F90> <81F2> -<4F91> <4F91> -<4F92> <4F93> <81F3> -<4F94> <4F94> -<4F95> <4F96> <81F5> -<4F97> <4F97> -<4F98> <4F9A> <81F7> -<4F9B> <4F9B> -<4F9C> <4F9C> <81FA> -<4F9D> <4F9D> -<4F9E> <4F9F> <81FB> -<4FA0> <4FA0> -<4FA1> <4FA2> <81FD> -<4FA3> <4FA3> -<4FA4> <4FA4> <8240> -<4FA5> <4FA5> -<4FA6> <4FA6> -<4FA7> <4FA7> -<4FA8> <4FA8> -<4FA9> <4FA9> -<4FAA> <4FAA> -<4FAB> <4FAB> <8241> -<4FAC> <4FAC> -<4FAD> <4FAD> <8242> -<4FAE> <4FAE> -<4FAF> <4FAF> -<4FB0> <4FB4> <8243> -<4FB5> <4FB5> -<4FB6> <4FBE> <8248> -<4FBF> <4FBF> -<4FC0> <4FC2> <8251> -<4FC3> <4FC3> -<4FC4> <4FC4> -<4FC5> <4FC5> -<4FC6> <4FC9> <8254> -<4FCA> <4FCA> -<4FCB> <4FCD> <8258> -<4FCE> <4FCE> -<4FCF> <4FCF> -<4FD0> <4FD0> -<4FD1> <4FD1> -<4FD2> <4FD6> <825B> -<4FD7> <4FD7> -<4FD8> <4FD8> -<4FD9> <4FD9> <8260> -<4FDA> <4FDA> -<4FDB> <4FDB> <8261> -<4FDC> <4FDC> -<4FDD> <4FDD> -<4FDE> <4FDE> -<4FDF> <4FDF> -<4FE0> <4FE0> <8262> -<4FE1> <4FE1> -<4FE2> <4FE2> <8263> -<4FE3> <4FE3> -<4FE4> <4FE5> <8264> -<4FE6> <4FE6> -<4FE7> <4FE7> <8266> -<4FE8> <4FE8> -<4FE9> <4FE9> -<4FEA> <4FEA> -<4FEB> <4FEC> <8267> -<4FED> <4FED> -<4FEE> <4FEE> -<4FEF> <4FEF> -<4FF0> <4FF0> <8269> -<4FF1> <4FF1> -<4FF2> <4FF2> <826A> -<4FF3> <4FF3> -<4FF4> <4FF7> <826B> -<4FF8> <4FF8> -<4FF9> <4FF9> <826F> -<4FFA> <4FFA> -<4FFB> <4FFD> <8270> -<4FFE> <4FFE> -<4FFF> <4FFF> <8273> -<5000> <500A> <8274> -<500B> <500B> <8280> -<500C> <500C> -<500D> <500D> -<500E> <500E> <8281> -<500F> <500F> -<5010> <5011> <8282> -<5012> <5012> -<5013> <5013> <8284> -<5014> <5014> -<5015> <5017> <8285> -<5018> <5018> -endbfrange - -100 beginbfrange -<5019> <5019> -<501A> <501A> -<501B> <501B> <8288> -<501C> <501C> -<501D> <501E> <8289> -<501F> <501F> -<5020> <5020> <828B> -<5021> <5021> -<5022> <5024> <828C> -<5025> <5025> -<5026> <5026> -<5027> <5027> <828F> -<5028> <5028> -<5029> <5029> -<502A> <502A> -<502B> <502B> <8290> -<502C> <502C> -<502D> <502D> -<502E> <502E> -<502F> <5039> <8291> -<503A> <503A> -<503B> <503B> <829C> -<503C> <503C> -<503D> <503D> <829D> -<503E> <503E> -<503F> <5042> <829E> -<5043> <5043> -<5044> <5046> <82A2> -<5047> <5047> -<5048> <5048> -<5049> <504B> <82A5> -<504C> <504C> -<504D> <504D> <82A8> -<504E> <504E> -<504F> <504F> -<5050> <5054> <82A9> -<5055> <5055> -<5056> <5059> <82AE> -<505A> <505A> -<505B> <505B> <82B2> -<505C> <505C> -<505D> <5064> <82B3> -<5065> <5065> -<5066> <506B> <82BB> -<506C> <506C> -<506D> <5075> <82C1> -<5076> <5076> -<5077> <5077> -<5078> <507A> <82CA> -<507B> <507B> -<507C> <507D> <82CD> -<507E> <507E> -<507F> <507F> -<5080> <5080> -<5081> <5084> <82CF> -<5085> <5085> -<5086> <5087> <82D3> -<5088> <5088> -<5089> <508C> <82D5> -<508D> <508D> -<508E> <50A2> <82D9> -<50A3> <50A3> -<50A4> <50A4> <82EE> -<50A5> <50A5> -<50A6> <50A6> <82EF> -<50A7> <50A7> -<50A8> <50A8> -<50A9> <50A9> -<50AA> <50AB> <82F0> -<50AC> <50AC> -<50AD> <50B1> <82F2> -<50B2> <50B2> -<50B3> <50B9> <82F7> -<50BA> <50BA> -<50BB> <50BB> -<50BC> <50BC> <82FE> -<50BD> <50CE> <8340> -<50CF> <50CF> -<50D0> <50D5> <8352> -<50D6> <50D6> -<50D7> <50D9> <8358> -<50DA> <50DA> -<50DB> <50E5> <835B> -<50E6> <50E6> -<50E7> <50E7> -<50E8> <50EB> <8366> -<50EC> <50EC> -<50ED> <50ED> -<50EE> <50EE> -<50EF> <50F2> <836A> -<50F3> <50F3> -<50F4> <50F4> <836E> -<50F5> <50F5> -<50F6> <50FA> <836F> -<50FB> <50FB> -<50FC> <50FF> <8374> -<5100> <5105> <8378> -<5106> <5106> -<5107> <5107> -<5108> <5108> <837E> -endbfrange - -100 beginbfrange -<5109> <510A> <8380> -<510B> <510B> -<510C> <5111> <8382> -<5112> <5112> -<5113> <5120> <8388> -<5121> <5121> -<5122> <513E> <8396> -<513F> <513F> -<5140> <5140> -<5141> <5141> -<5142> <5142> <83B3> -<5143> <5143> -<5144> <5144> -<5145> <5145> -<5146> <5146> -<5147> <5147> <83B4> -<5148> <5148> -<5149> <5149> -<514A> <514A> <83B5> -<514B> <514B> -<514C> <514C> <83B6> -<514D> <514D> -<514E> <5150> <83B7> -<5151> <5151> -<5152> <5153> <83BA> -<5154> <5154> -<5155> <5155> -<5156> <5156> -<5157> <5159> <83BC> -<515A> <515A> -<515B> <515B> <83BF> -<515C> <515C> -<515D> <5161> <83C0> -<5162> <5162> -<5163> <5164> <83C5> -<5165> <5165> -<5166> <5167> <83C7> -<5168> <5168> -<5169> <516A> <83C9> -<516B> <516B> -<516C> <516C> -<516D> <516D> -<516E> <516E> -<516F> <516F> <83CB> -<5170> <5170> -<5171> <5171> -<5172> <5172> <83CC> -<5173> <5173> -<5174> <5174> -<5175> <5175> -<5176> <5176> -<5177> <5177> -<5178> <5178> -<5179> <5179> -<517A> <517A> <83CD> -<517B> <517B> -<517C> <517C> -<517D> <517D> -<517E> <517F> <83CE> -<5180> <5180> -<5181> <5181> -<5182> <5182> -<5183> <5184> <83D0> -<5185> <5185> -<5186> <5187> <83D2> -<5188> <5188> -<5189> <5189> -<518A> <518B> <83D4> -<518C> <518C> -<518D> <518D> -<518E> <5191> <83D6> -<5192> <5192> -<5193> <5194> <83DA> -<5195> <5195> -<5196> <5196> -<5197> <5197> -<5198> <5198> <83DC> -<5199> <5199> -<519A> <519A> <83DD> -<519B> <519B> -<519C> <519C> -<519D> <519F> <83DE> -<51A0> <51A0> -<51A1> <51A1> <83E1> -<51A2> <51A2> -<51A3> <51A3> <83E2> -<51A4> <51A4> -<51A5> <51A5> -<51A6> <51AA> <83E3> -<51AB> <51AB> -<51AC> <51AC> -<51AD> <51AE> <83E8> -<51AF> <51AF> -<51B0> <51B0> -<51B1> <51B1> -<51B2> <51B2> -<51B3> <51B3> -<51B4> <51B4> <83EA> -<51B5> <51B5> -<51B6> <51B6> -endbfrange - -100 beginbfrange -<51B7> <51B7> -<51B8> <51BA> <83EB> -<51BB> <51BB> -<51BC> <51BC> -<51BD> <51BD> -<51BE> <51BF> <83EE> -<51C0> <51C0> -<51C1> <51C3> <83F0> -<51C4> <51C4> -<51C5> <51C5> <83F3> -<51C6> <51C6> -<51C7> <51C7> -<51C8> <51C8> <83F4> -<51C9> <51C9> -<51CA> <51CA> <83F5> -<51CB> <51CB> -<51CC> <51CC> -<51CD> <51CE> <83F6> -<51CF> <51CF> -<51D0> <51D0> <83F8> -<51D1> <51D1> -<51D2> <51D7> <83F9> -<51D8> <51DA> <8440> -<51DB> <51DB> -<51DC> <51DC> <8443> -<51DD> <51DD> -<51DE> <51DF> <8444> -<51E0> <51E0> -<51E1> <51E1> -<51E2> <51E3> <8446> -<51E4> <51E4> -<51E5> <51EA> <8448> -<51EB> <51EB> -<51EC> <51EC> <844E> -<51ED> <51ED> -<51EE> <51EE> <844F> -<51EF> <51EF> -<51F0> <51F0> -<51F1> <51F2> <8450> -<51F3> <51F3> -<51F4> <51F4> <8452> -<51F5> <51F5> -<51F6> <51F6> -<51F7> <51F7> <8453> -<51F8> <51F8> -<51F9> <51F9> -<51FA> <51FA> -<51FB> <51FB> -<51FC> <51FC> -<51FD> <51FD> -<51FE> <51FE> <8454> -<51FF> <51FF> -<5200> <5200> -<5201> <5201> -<5202> <5202> -<5203> <5203> -<5204> <5205> <8455> -<5206> <5206> -<5207> <5207> -<5208> <5208> -<5209> <5209> <8457> -<520A> <520A> -<520B> <520C> <8458> -<520D> <520D> -<520E> <520E> -<520F> <5210> <845A> -<5211> <5211> -<5212> <5212> -<5213> <5215> <845C> -<5216> <5216> -<5217> <5217> -<5218> <5218> -<5219> <5219> -<521A> <521A> -<521B> <521B> -<521C> <521C> <845F> -<521D> <521D> -<521E> <521F> <8460> -<5220> <5220> -<5221> <5223> <8462> -<5224> <5224> -<5225> <5227> <8465> -<5228> <5228> -<5229> <5229> -<522A> <522A> <8468> -<522B> <522B> -<522C> <522C> <8469> -<522D> <522D> -<522E> <522E> -<522F> <522F> <846A> -<5230> <5230> -<5231> <5232> <846B> -<5233> <5233> -<5234> <5235> <846D> -<5236> <5236> -<5237> <5237> -<5238> <5238> -<5239> <5239> -<523A> <523A> -<523B> <523B> -endbfrange - -100 beginbfrange -<523C> <523C> <846F> -<523D> <523D> -<523E> <523E> <8470> -<523F> <5240> -<5241> <5241> -<5242> <5242> -<5243> <5243> -<5244> <5249> <8471> -<524A> <524A> -<524B> <524B> <8477> -<524C> <524C> -<524D> <524D> -<524E> <524F> <8478> -<5250> <5250> -<5251> <5251> -<5252> <5253> <847A> -<5254> <5254> -<5255> <5255> <847C> -<5256> <5256> -<5257> <5258> <847D> -<5259> <525B> <8480> -<525C> <525C> -<525D> <525D> <8483> -<525E> <525E> -<525F> <5260> <8484> -<5261> <5261> -<5262> <5264> <8486> -<5265> <5265> -<5266> <5266> <8489> -<5267> <5267> -<5268> <5268> <848A> -<5269> <5269> -<526A> <526A> -<526B> <526E> <848B> -<526F> <526F> -<5270> <5271> <848F> -<5272> <5272> -<5273> <527C> <8491> -<527D> <527D> -<527E> <527E> <849B> -<527F> <527F> -<5280> <5280> <849C> -<5281> <5281> -<5282> <5282> -<5283> <5287> <849D> -<5288> <5288> -<5289> <528F> <84A2> -<5290> <5290> -<5291> <5292> <84A9> -<5293> <5293> -<5294> <529A> <84AB> -<529B> <529B> -<529C> <529C> <84B2> -<529D> <529D> -<529E> <529E> -<529F> <529F> -<52A0> <52A0> -<52A1> <52A1> -<52A2> <52A2> -<52A3> <52A3> -<52A4> <52A7> <84B3> -<52A8> <52A8> -<52A9> <52A9> -<52AA> <52AA> -<52AB> <52AB> -<52AC> <52AD> -<52AE> <52B0> <84B7> -<52B1> <52B1> -<52B2> <52B2> -<52B3> <52B3> -<52B4> <52BD> <84BA> -<52BE> <52BE> -<52BF> <52BF> -<52C0> <52C2> <84C4> -<52C3> <52C3> -<52C4> <52C6> <84C7> -<52C7> <52C7> -<52C8> <52C8> <84CA> -<52C9> <52C9> -<52CA> <52CA> <84CB> -<52CB> <52CB> -<52CC> <52CF> <84CC> -<52D0> <52D0> -<52D1> <52D1> <84D0> -<52D2> <52D2> -<52D3> <52D5> <84D1> -<52D6> <52D6> -<52D7> <52D7> <84D4> -<52D8> <52D8> -<52D9> <52DE> <84D5> -<52DF> <52DF> -<52E0> <52E3> <84DB> -<52E4> <52E4> -<52E5> <52EF> <84DF> -<52F0> <52F0> -<52F1> <52F8> <84EA> -<52F9> <52F9> -<52FA> <52FA> -<52FB> <52FD> <84F2> -<52FE> <52FE> -endbfrange - -100 beginbfrange -<52FF> <52FF> -<5300> <5300> -<5301> <5304> <84F5> -<5305> <5305> -<5306> <5306> -<5307> <5307> <84F9> -<5308> <5308> -<5309> <530C> <84FA> -<530D> <530D> -<530E> <530E> <84FE> -<530F> <530F> -<5310> <5310> -<5311> <5314> <8540> -<5315> <5315> -<5316> <5316> -<5317> <5317> -<5318> <5318> <8544> -<5319> <5319> -<531A> <531A> -<531B> <531C> <8545> -<531D> <531D> -<531E> <531F> <8547> -<5320> <5320> -<5321> <5321> -<5322> <5322> <8549> -<5323> <5323> -<5324> <5325> <854A> -<5326> <5326> -<5327> <5329> <854C> -<532A> <532A> -<532B> <532D> <854F> -<532E> <532E> -<532F> <5338> <8552> -<5339> <5339> -<533A> <533A> -<533B> <533B> -<533C> <533D> <855C> -<533E> <533E> -<533F> <533F> -<5340> <5340> <855E> -<5341> <5341> -<5342> <5342> <855F> -<5343> <5343> -<5344> <5344> <8560> -<5345> <5345> -<5346> <5346> <8561> -<5347> <5347> -<5348> <5348> -<5349> <5349> -<534A> <534A> -<534B> <534D> <8562> -<534E> <534E> -<534F> <534F> -<5350> <5350> <8565> -<5351> <5351> -<5352> <5352> -<5353> <5353> -<5354> <5354> <8566> -<5355> <5355> -<5356> <5356> -<5357> <5357> -<5358> <5359> <8567> -<535A> <535A> -<535B> <535B> <8569> -<535C> <535C> -<535D> <535D> <856A> -<535E> <535E> -<535F> <535F> -<5360> <5360> -<5361> <5361> -<5362> <5362> -<5363> <5363> -<5364> <5364> -<5365> <5365> <856B> -<5366> <5366> -<5367> <5367> -<5368> <5368> <856C> -<5369> <5369> -<536A> <536A> <856D> -<536B> <536B> -<536C> <536D> <856E> -<536E> <536E> -<536F> <536F> -<5370> <5370> -<5371> <5371> -<5372> <5372> <8570> -<5373> <5373> -<5374> <5374> -<5375> <5375> -<5376> <5376> <8571> -<5377> <5377> -<5378> <5378> -<5379> <5379> <8572> -<537A> <537A> -<537B> <537E> <8573> -<537F> <537F> -<5380> <5381> <8577> -<5382> <5382> -<5383> <5383> <8579> -<5384> <5384> -endbfrange - -100 beginbfrange -<5385> <5385> -<5386> <5386> -<5387> <5388> <857A> -<5389> <5389> -<538A> <538A> <857C> -<538B> <538B> -<538C> <538C> -<538D> <538D> -<538E> <538F> <857D> -<5390> <5394> <8580> -<5395> <5395> -<5396> <5397> <8585> -<5398> <5398> -<5399> <5399> <8587> -<539A> <539A> -<539B> <539C> <8588> -<539D> <539D> -<539E> <539E> <858A> -<539F> <539F> -<53A0> <53A1> <858B> -<53A2> <53A2> -<53A3> <53A3> -<53A4> <53A4> <858D> -<53A5> <53A5> -<53A6> <53A6> -<53A7> <53A7> <858E> -<53A8> <53A8> -<53A9> <53A9> -<53AA> <53AD> <858F> -<53AE> <53AE> -<53AF> <53B5> <8593> -<53B6> <53B6> -<53B7> <53BA> <859A> -<53BB> <53BB> -<53BC> <53BE> <859E> -<53BF> <53BF> -<53C0> <53C0> <85A1> -<53C1> <53C1> -<53C2> <53C2> -<53C3> <53C7> <85A2> -<53C8> <53C8> -<53C9> <53C9> -<53CA> <53CA> -<53CB> <53CB> -<53CC> <53CC> -<53CD> <53CD> -<53CE> <53D0> <85A7> -<53D1> <53D1> -<53D2> <53D3> <85AA> -<53D4> <53D4> -<53D5> <53D5> <85AC> -<53D6> <53D6> -<53D7> <53D7> -<53D8> <53D8> -<53D9> <53D9> -<53DA> <53DA> <85AD> -<53DB> <53DB> -<53DC> <53DE> <85AE> -<53DF> <53DF> -<53E0> <53E0> -<53E1> <53E2> <85B1> -<53E3> <53E3> -<53E4> <53E4> -<53E5> <53E5> -<53E6> <53E6> -<53E7> <53E7> <85B3> -<53E8> <53E8> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53EC> -<53ED> <53ED> -<53EE> <53EE> -<53EF> <53EF> -<53F0> <53F0> -<53F1> <53F1> -<53F2> <53F2> -<53F3> <53F3> -<53F4> <53F4> <85B4> -<53F5> <53F5> -<53F6> <53F6> -<53F7> <53F7> -<53F8> <53F8> -<53F9> <53F9> -<53FA> <53FA> <85B5> -<53FB> <53FB> -<53FC> <53FC> -<53FD> <53FD> -<53FE> <53FF> <85B6> -<5400> <5400> <85B8> -<5401> <5401> -<5402> <5402> <85B9> -<5403> <5403> -<5404> <5404> -<5405> <5405> <85BA> -<5406> <5406> -<5407> <5407> <85BB> -<5408> <5408> -<5409> <5409> -<540A> <540A> -endbfrange - -100 beginbfrange -<540B> <540B> <85BC> -<540C> <540C> -<540D> <540D> -<540E> <540E> -<540F> <540F> -<5410> <5410> -<5411> <5411> -<5412> <5412> -<5413> <5413> -<5414> <5414> <85BD> -<5415> <5415> -<5416> <5416> -<5417> <5417> -<5418> <541A> <85BE> -<541B> <541B> -<541C> <541C> <85C1> -<541D> <541D> -<541E> <541E> -<541F> <541F> -<5420> <5420> -<5421> <5421> -<5422> <5422> <85C2> -<5423> <5423> -<5424> <5425> <85C3> -<5426> <5426> -<5427> <5427> -<5428> <5428> -<5429> <5429> -<542A> <542A> <85C5> -<542B> <542B> -<542C> <542C> -<542D> <542D> -<542E> <542E> -<542F> <542F> -<5430> <5430> <85C6> -<5431> <5431> -<5432> <5432> -<5433> <5433> <85C7> -<5434> <5434> -<5435> <5435> -<5436> <5437> <85C8> -<5438> <5438> -<5439> <5439> -<543A> <543A> <85CA> -<543B> <543B> -<543C> <543C> -<543D> <543D> <85CB> -<543E> <543E> -<543F> <543F> <85CC> -<5440> <5440> -<5441> <5442> <85CD> -<5443> <5443> -<5444> <5445> <85CF> -<5446> <5446> -<5447> <5447> <85D1> -<5448> <5448> -<5449> <5449> <85D2> -<544A> <544A> -<544B> <544B> -<544C> <544F> <85D3> -<5450> <5450> -<5451> <5451> <85D7> -<5452> <5454> -<5455> <5455> -<5456> <5456> -<5457> <5457> -<5458> <5458> -<5459> <5459> -<545A> <545A> <85D8> -<545B> <545B> -<545C> <545C> -<545D> <5461> <85D9> -<5462> <5462> -<5463> <5463> <85DE> -<5464> <5464> -<5465> <5465> <85DF> -<5466> <5466> -<5467> <5467> <85E0> -<5468> <5468> -<5469> <5470> <85E1> -<5471> <5471> -<5472> <5472> -<5473> <5473> -<5474> <5474> <85E9> -<5475> <5475> -<5476> <5476> -<5477> <5477> -<5478> <5478> -<5479> <547A> <85EA> -<547B> <547B> -<547C> <547C> -<547D> <547D> -<547E> <547F> <85EC> -<5480> <5480> -<5481> <5481> <85EE> -<5482> <5482> -<5483> <5483> <85EF> -<5484> <5484> -<5485> <5485> <85F0> -<5486> <5486> -endbfrange - -100 beginbfrange -<5487> <548A> <85F1> -<548B> <548B> -<548C> <548C> -<548D> <548D> <85F5> -<548E> <548E> -<548F> <548F> -<5490> <5490> -<5491> <5491> <85F6> -<5492> <5492> -<5493> <5493> <85F7> -<5494> <5494> -<5495> <5495> -<5496> <5496> -<5497> <5498> <85F8> -<5499> <5499> -<549A> <549B> -<549C> <549C> <85FA> -<549D> <549D> -<549E> <54A1> <85FB> -<54A2> <54A2> <8640> -<54A3> <54A3> -<54A4> <54A4> -<54A5> <54A5> <8641> -<54A6> <54A6> -<54A7> <54A7> -<54A8> <54A8> -<54A9> <54AA> -<54AB> <54AB> -<54AC> <54AC> -<54AD> <54AD> -<54AE> <54AE> <8642> -<54AF> <54AF> -<54B0> <54B0> <8643> -<54B1> <54B1> -<54B2> <54B2> <8644> -<54B3> <54B3> -<54B4> <54B4> -<54B5> <54B7> <8645> -<54B8> <54B8> -<54B9> <54BA> <8648> -<54BB> <54BB> -<54BC> <54BC> <864A> -<54BD> <54BD> -<54BE> <54BE> <864B> -<54BF> <54BF> -<54C0> <54C0> -<54C1> <54C1> -<54C2> <54C2> -<54C3> <54C3> <864C> -<54C4> <54C4> -<54C5> <54C5> <864D> -<54C6> <54C6> -<54C7> <54C7> -<54C8> <54C8> -<54C9> <54C9> -<54CA> <54CB> <864E> -<54CC> <54CC> -<54CD> <54CD> -<54CE> <54CE> -<54CF> <54CF> -<54D0> <54D0> -<54D1> <54D1> -<54D2> <54D2> -<54D3> <54D4> -<54D5> <54D5> -<54D6> <54D6> <8650> -<54D7> <54D7> -<54D8> <54D8> <8651> -<54D9> <54DA> -<54DB> <54DB> <8652> -<54DC> <54DC> -<54DD> <54DD> -<54DE> <54DE> -<54DF> <54DF> -<54E0> <54E4> <8653> -<54E5> <54E5> -<54E6> <54E6> -<54E7> <54E7> -<54E8> <54E8> -<54E9> <54E9> -<54EA> <54EA> -<54EB> <54EC> <8658> -<54ED> <54ED> -<54EE> <54EE> -<54EF> <54F1> <865A> -<54F2> <54F2> -<54F3> <54F3> -<54F4> <54F9> <865D> -<54FA> <54FA> -<54FB> <54FB> <8663> -<54FC> <54FC> -<54FD> <54FD> -<54FE> <54FE> <8664> -<54FF> <54FF> -<5500> <5500> <8665> -<5501> <5501> -<5502> <5505> <8666> -<5506> <5506> -<5507> <5507> -<5508> <5508> <866A> -endbfrange - -100 beginbfrange -<5509> <5509> -<550A> <550E> <866B> -<550F> <550F> -<5510> <5510> -<5511> <5511> -<5512> <5513> <8670> -<5514> <5514> -<5515> <551A> <8672> -<551B> <551B> -<551C> <551F> <8678> -<5520> <5520> -<5521> <5521> <867C> -<5522> <5523> -<5524> <5524> -<5525> <5526> <867D> -<5527> <5527> -<5528> <5529> <8680> -<552A> <552A> -<552B> <552B> <8682> -<552C> <552C> -<552D> <552D> <8683> -<552E> <552E> -<552F> <552F> -<5530> <5530> -<5531> <5531> -<5532> <5532> <8684> -<5533> <5533> -<5534> <5536> <8685> -<5537> <5537> -<5538> <553B> <8688> -<553C> <553C> -<553D> <553D> <868C> -<553E> <553E> -<553F> <553F> -<5540> <5540> <868D> -<5541> <5541> -<5542> <5542> <868E> -<5543> <5543> -<5544> <5544> -<5545> <5545> <868F> -<5546> <5546> -<5547> <5548> <8690> -<5549> <5549> -<554A> <554A> -<554B> <554F> <8692> -<5550> <5550> -<5551> <5554> <8697> -<5555> <5555> -<5556> <5556> -<5557> <555B> <869B> -<555C> <555C> -<555D> <5560> <86A0> -<5561> <5561> -<5562> <5563> <86A4> -<5564> <5564> -<5565> <5565> -<5566> <5566> -<5567> <5567> -<5568> <5569> <86A6> -<556A> <556A> -<556B> <556B> <86A8> -<556C> <556C> -<556D> <556D> -<556E> <556E> -<556F> <5574> <86A9> -<5575> <5577> -<5578> <5578> -<5579> <557A> <86AF> -<557B> <557B> -<557C> <557C> -<557D> <557D> <86B1> -<557E> <557E> -<557F> <557F> <86B2> -<5580> <5580> -<5581> <5581> -<5582> <5582> -<5583> <5583> -<5584> <5584> -<5585> <5586> <86B3> -<5587> <5587> -<5588> <5588> -<5589> <5589> -<558A> <558A> -<558B> <558B> -<558C> <558E> <86B5> -<558F> <558F> -<5590> <5590> <86B8> -<5591> <5591> -<5592> <5593> <86B9> -<5594> <5594> -<5595> <5597> <86BB> -<5598> <5598> -<5599> <5599> -<559A> <559B> <86BE> -<559C> <559C> -<559D> <559D> -<559E> <559E> <86C0> -<559F> <559F> -<55A0> <55A6> <86C1> -<55A7> <55A7> -endbfrange - -100 beginbfrange -<55A8> <55B0> <86C8> -<55B1> <55B1> -<55B2> <55B2> <86D1> -<55B3> <55B3> -<55B4> <55B4> <86D2> -<55B5> <55B5> -<55B6> <55B6> <86D3> -<55B7> <55B7> -<55B8> <55B8> <86D4> -<55B9> <55B9> -<55BA> <55BA> <86D5> -<55BB> <55BB> -<55BC> <55BC> <86D6> -<55BD> <55BE> -<55BF> <55C3> <86D7> -<55C4> <55C4> -<55C5> <55C5> -<55C6> <55C8> <86DC> -<55C9> <55C9> -<55CA> <55CB> <86DF> -<55CC> <55CD> -<55CE> <55D0> <86E1> -<55D1> <55D1> -<55D2> <55D2> -<55D3> <55D3> -<55D4> <55D4> -<55D5> <55D5> <86E4> -<55D6> <55D6> -<55D7> <55DB> <86E5> -<55DC> <55DC> -<55DD> <55DD> -<55DE> <55DE> <86EA> -<55DF> <55DF> -<55E0> <55E0> <86EB> -<55E1> <55E1> -<55E2> <55E2> <86EC> -<55E3> <55E3> -<55E4> <55E4> -<55E5> <55E5> -<55E6> <55E6> -<55E7> <55E7> <86ED> -<55E8> <55E8> -<55E9> <55E9> <86EE> -<55EA> <55EA> -<55EB> <55EC> -<55ED> <55EE> <86EF> -<55EF> <55EF> -<55F0> <55F1> <86F1> -<55F2> <55F3> -<55F4> <55F4> <86F3> -<55F5> <55F5> -<55F6> <55F6> <86F4> -<55F7> <55F7> -<55F8> <55FC> <86F5> -<55FD> <55FD> -<55FE> <55FE> -<55FF> <55FF> <86FA> -<5600> <5600> -<5601> <5601> -<5602> <5605> <86FB> -<5606> <5607> <8740> -<5608> <5608> -<5609> <5609> -<560A> <560B> <8742> -<560C> <560C> -<560D> <560D> <8744> -<560E> <560E> -<560F> <560F> -<5610> <5617> <8745> -<5618> <5618> -<5619> <561A> <874D> -<561B> <561B> -<561C> <561D> <874F> -<561E> <561E> -<561F> <561F> -<5620> <5622> <8751> -<5623> <5623> -<5624> <5624> -<5625> <5626> <8754> -<5627> <5627> -<5628> <562B> <8756> -<562C> <562C> -<562D> <562D> -<562E> <5630> <875A> -<5631> <5631> -<5632> <5632> -<5633> <5633> <875D> -<5634> <5634> -<5635> <5635> <875E> -<5636> <5636> -<5637> <5638> <875F> -<5639> <5639> -<563A> <563A> <8761> -<563B> <563B> -<563C> <563E> <8762> -<563F> <563F> -<5640> <564B> <8765> -<564C> <564C> -<564D> <564D> -<564E> <564E> -endbfrange - -100 beginbfrange -<564F> <5653> <8771> -<5654> <5654> -<5655> <5656> <8776> -<5657> <5657> -<5658> <5658> -<5659> <5659> -<565A> <565B> <8778> -<565C> <565C> -<565D> <5661> <877A> -<5662> <5662> -<5663> <5663> <8780> -<5664> <5664> -<5665> <5667> <8781> -<5668> <5668> -<5669> <5669> -<566A> <566A> -<566B> <566B> -<566C> <566C> -<566D> <5670> <8784> -<5671> <5671> -<5672> <5675> <8788> -<5676> <5676> -<5677> <567A> <878C> -<567B> <567C> -<567D> <5684> <8790> -<5685> <5685> -<5686> <5686> -<5687> <568D> <8798> -<568E> <568E> -<568F> <568F> -<5690> <5692> <879F> -<5693> <5693> -<5694> <56A2> <87A2> -<56A3> <56A3> -<56A4> <56AE> <87B1> -<56AF> <56AF> -<56B0> <56B6> <87BC> -<56B7> <56B7> -<56B8> <56BB> <87C3> -<56BC> <56BC> -<56BD> <56C9> <87C7> -<56CA> <56CA> -<56CB> <56D3> <87D4> -<56D4> <56D4> -<56D5> <56D6> <87DD> -<56D7> <56D7> -<56D8> <56D9> <87DF> -<56DA> <56DA> -<56DB> <56DB> -<56DC> <56DC> <87E1> -<56DD> <56DD> -<56DE> <56DE> -<56DF> <56DF> -<56E0> <56E0> -<56E1> <56E1> -<56E2> <56E2> -<56E3> <56E3> <87E2> -<56E4> <56E4> -<56E5> <56EA> <87E3> -<56EB> <56EB> -<56EC> <56EC> <87E9> -<56ED> <56ED> -<56EE> <56EF> <87EA> -<56F0> <56F0> -<56F1> <56F1> -<56F2> <56F3> <87EC> -<56F4> <56F4> -<56F5> <56F5> -<56F6> <56F8> <87EE> -<56F9> <56F9> -<56FA> <56FA> -<56FB> <56FC> <87F1> -<56FD> <56FD> -<56FE> <56FE> -<56FF> <56FF> -<5700> <5702> <87F3> -<5703> <5703> -<5704> <5704> -<5705> <5705> <87F6> -<5706> <5706> -<5707> <5707> <87F7> -<5708> <5708> -<5709> <5709> -<570A> <570A> -<570B> <5711> <87F8> -<5712> <571B> <8840> -<571C> <571C> -<571D> <571E> <884A> -<571F> <571F> -<5720> <5722> <884C> -<5723> <5723> -<5724> <5727> <884F> -<5728> <5728> -<5729> <5729> -<572A> <572A> -<572B> <572B> <8853> -<572C> <572C> -<572D> <572D> -<572E> <572F> -<5730> <5730> -endbfrange - -100 beginbfrange -<5731> <5732> <8854> -<5733> <5733> -<5734> <5738> <8856> -<5739> <5739> -<573A> <573A> -<573B> <573B> -<573C> <573D> <885B> -<573E> <573E> -<573F> <573F> <885D> -<5740> <5740> -<5741> <5741> <885E> -<5742> <5742> -<5743> <5746> <885F> -<5747> <5747> -<5748> <5749> <8863> -<574A> <574A> -<574B> <574B> <8865> -<574C> <574C> -<574D> <574D> -<574E> <574E> -<574F> <574F> -<5750> <5750> -<5751> <5751> -<5752> <5756> <8866> -<5757> <5757> -<5758> <5759> <886B> -<575A> <575A> -<575B> <575B> -<575C> <575C> -<575D> <575D> -<575E> <575E> -<575F> <575F> -<5760> <5760> -<5761> <5761> -<5762> <5763> <886D> -<5764> <5764> -<5765> <5765> <886F> -<5766> <5766> -<5767> <5767> <8870> -<5768> <5768> -<5769> <5769> -<576A> <576A> -<576B> <576B> -<576C> <576C> <8871> -<576D> <576D> -<576E> <576E> <8872> -<576F> <576F> -<5770> <5772> <8873> -<5773> <5773> -<5774> <5775> <8876> -<5776> <5776> -<5777> <5777> -<5778> <577A> <8878> -<577B> <577B> -<577C> <577C> -<577D> <5780> <887B> -<5781> <5781> <8880> -<5782> <5782> -<5783> <5783> -<5784> <5784> -<5785> <5785> -<5786> <5786> -<5787> <578A> <8881> -<578B> <578B> -<578C> <578C> -<578D> <5791> <8885> -<5792> <5792> -<5793> <5793> -<5794> <579A> <888A> -<579B> <579B> -<579C> <579F> <8891> -<57A0> <57A0> -<57A1> <57A1> -<57A2> <57A2> -<57A3> <57A3> -<57A4> <57A4> -<57A5> <57A5> <8895> -<57A6> <57A6> -<57A7> <57A7> -<57A8> <57A8> <8896> -<57A9> <57A9> -<57AA> <57AA> <8897> -<57AB> <57AB> -<57AC> <57AC> <8898> -<57AD> <57AD> -<57AE> <57AE> -<57AF> <57B1> <8899> -<57B2> <57B2> -<57B3> <57B3> <889C> -<57B4> <57B4> -<57B5> <57B7> <889D> -<57B8> <57B8> -<57B9> <57C1> <88A0> -<57C2> <57C2> -<57C3> <57C3> -<57C4> <57CA> <88A9> -<57CB> <57CB> -<57CC> <57CD> <88B0> -<57CE> <57CE> -<57CF> <57CF> -endbfrange - -100 beginbfrange -<57D0> <57D1> <88B2> -<57D2> <57D2> -<57D3> <57D3> <88B4> -<57D4> <57D4> -<57D5> <57D5> -<57D6> <57D7> <88B5> -<57D8> <57D8> -<57D9> <57D9> -<57DA> <57DA> -<57DB> <57DC> <88B7> -<57DD> <57DD> -<57DE> <57DE> <88B9> -<57DF> <57DF> -<57E0> <57E0> -<57E1> <57E3> <88BA> -<57E4> <57E4> -<57E5> <57EC> <88BD> -<57ED> <57ED> -<57EE> <57EE> <88C5> -<57EF> <57EF> -<57F0> <57F3> <88C6> -<57F4> <57F4> -<57F5> <57F7> <88CA> -<57F8> <57F8> -<57F9> <57F9> -<57FA> <57FA> -<57FB> <57FC> <88CD> -<57FD> <57FD> -<57FE> <57FF> <88CF> -<5800> <5800> -<5801> <5801> <88D1> -<5802> <5802> -<5803> <5805> <88D2> -<5806> <5806> -<5807> <5807> -<5808> <580A> <88D5> -<580B> <580B> -<580C> <580C> <88D8> -<580D> <580D> -<580E> <5810> <88D9> -<5811> <5811> -<5812> <5814> <88DC> -<5815> <5815> -<5816> <5818> <88DF> -<5819> <5819> -<581A> <581D> <88E2> -<581E> <581E> -<581F> <581F> <88E6> -<5820> <5820> -<5821> <5821> -<5822> <5823> <88E7> -<5824> <5824> -<5825> <5829> <88E9> -<582A> <582A> -<582B> <582F> <88EE> -<5830> <5830> -<5831> <5834> <88F3> -<5835> <5835> -<5836> <583D> <88F7> -<583E> <5843> <8940> -<5844> <5844> -<5845> <584B> <8946> -<584C> <584C> -<584D> <584D> -<584E> <5850> <894D> -<5851> <5851> -<5852> <5853> <8950> -<5854> <5854> -<5855> <5857> <8952> -<5858> <5858> -<5859> <585D> <8955> -<585E> <585E> -<585F> <5864> <895A> -<5865> <5865> -<5866> <586A> <8960> -<586B> <586B> -<586C> <586C> -<586D> <587D> <8965> -<587E> <587E> -<587F> <587F> <8976> -<5880> <5880> -<5881> <5881> -<5882> <5882> <8977> -<5883> <5883> -<5884> <5884> <8978> -<5885> <5885> -<5886> <5888> <8979> -<5889> <5889> -<588A> <588C> <897C> -<588D> <5891> <8980> -<5892> <5892> -<5893> <5893> -<5894> <5898> <8985> -<5899> <5899> -<589A> <589A> -<589B> <589D> <898A> -<589E> <589E> -<589F> <589F> -<58A0> <58A7> <898D> -<58A8> <58A8> -endbfrange - -100 beginbfrange -<58A9> <58A9> -<58AA> <58BB> <8995> -<58BC> <58BC> -<58BD> <58C0> <89A7> -<58C1> <58C1> -<58C2> <58C4> <89AB> -<58C5> <58C5> -<58C6> <58D0> <89AE> -<58D1> <58D1> -<58D2> <58D4> <89B9> -<58D5> <58D5> -<58D6> <58E3> <89BC> -<58E4> <58E4> -<58E5> <58EA> <89CA> -<58EB> <58EB> -<58EC> <58EC> -<58ED> <58ED> <89D0> -<58EE> <58EE> -<58EF> <58EF> <89D1> -<58F0> <58F0> -<58F1> <58F2> <89D2> -<58F3> <58F3> -<58F4> <58F5> <89D4> -<58F6> <58F6> -<58F7> <58F8> <89D6> -<58F9> <58F9> -<58FA> <58FF> <89D8> -<5900> <5901> <89DE> -<5902> <5902> -<5903> <5903> <89E0> -<5904> <5904> -<5905> <5906> <89E1> -<5907> <5907> -<5908> <590C> <89E3> -<590D> <590D> -<590E> <590E> <89E8> -<590F> <590F> -<5910> <5913> <89E9> -<5914> <5914> -<5915> <5915> -<5916> <5916> -<5917> <5918> <89ED> -<5919> <5919> -<591A> <591A> -<591B> <591B> <89EF> -<591C> <591C> -<591D> <591E> <89F0> -<591F> <591F> -<5920> <5923> <89F2> -<5924> <5924> -<5925> <5925> -<5926> <5926> <89F6> -<5927> <5927> -<5928> <5928> <89F7> -<5929> <5929> -<592A> <592A> -<592B> <592B> -<592C> <592C> <89F8> -<592D> <592D> -<592E> <592E> -<592F> <592F> -<5930> <5930> <89F9> -<5931> <5931> -<5932> <5933> <89FA> -<5934> <5934> -<5935> <5936> <89FC> -<5937> <5937> -<5938> <5938> -<5939> <5939> -<593A> <593A> -<593B> <593B> <89FE> -<593C> <593C> -<593D> <5940> <8A40> -<5941> <5941> -<5942> <5942> -<5943> <5943> <8A44> -<5944> <5944> -<5945> <5946> <8A45> -<5947> <5947> -<5948> <5948> -<5949> <5949> -<594A> <594A> <8A47> -<594B> <594B> -<594C> <594D> <8A48> -<594E> <594E> -<594F> <594F> -<5950> <5950> <8A4A> -<5951> <5951> -<5952> <5953> <8A4B> -<5954> <5954> -<5955> <5955> -<5956> <5956> -<5957> <5957> -<5958> <5958> -<5959> <5959> <8A4D> -<595A> <595A> -<595B> <595F> <8A4E> -<5960> <5960> -<5961> <5961> <8A53> -<5962> <5962> -endbfrange - -100 beginbfrange -<5963> <5964> <8A54> -<5965> <5965> -<5966> <5972> <8A56> -<5973> <5973> -<5974> <5974> -<5975> <5975> <8A63> -<5976> <5976> -<5977> <5977> <8A64> -<5978> <5978> -<5979> <5979> -<597A> <597C> <8A65> -<597D> <597D> -<597E> <5980> <8A68> -<5981> <5981> -<5982> <5982> -<5983> <5983> -<5984> <5984> -<5985> <5985> <8A6B> -<5986> <5986> -<5987> <5987> -<5988> <5988> -<5989> <5989> <8A6C> -<598A> <598A> -<598B> <598C> <8A6D> -<598D> <598D> -<598E> <5991> <8A6F> -<5992> <5992> -<5993> <5993> -<5994> <5995> <8A73> -<5996> <5996> -<5997> <5997> -<5998> <5998> <8A75> -<5999> <5999> -<599A> <599D> <8A76> -<599E> <599E> -<599F> <59A2> <8A7A> -<59A3> <59A3> -<59A4> <59A4> -<59A5> <59A5> -<59A6> <59A6> <8A7E> -<59A7> <59A7> <8A80> -<59A8> <59A8> -<59A9> <59AA> -<59AB> <59AB> -<59AC> <59AD> <8A81> -<59AE> <59AE> -<59AF> <59AF> -<59B0> <59B1> <8A83> -<59B2> <59B2> -<59B3> <59B8> <8A85> -<59B9> <59B9> -<59BA> <59BA> <8A8B> -<59BB> <59BB> -<59BC> <59BD> <8A8C> -<59BE> <59BE> -<59BF> <59C5> <8A8E> -<59C6> <59C6> -<59C7> <59C9> <8A95> -<59CA> <59CA> -<59CB> <59CB> -<59CC> <59CF> <8A98> -<59D0> <59D0> -<59D1> <59D1> -<59D2> <59D2> -<59D3> <59D3> -<59D4> <59D4> -<59D5> <59D6> <8A9C> -<59D7> <59D7> -<59D8> <59D8> -<59D9> <59D9> <8A9E> -<59DA> <59DA> -<59DB> <59DB> <8A9F> -<59DC> <59DC> -<59DD> <59DD> -<59DE> <59E2> <8AA0> -<59E3> <59E3> -<59E4> <59E4> <8AA5> -<59E5> <59E5> -<59E6> <59E7> <8AA6> -<59E8> <59E8> -<59E9> <59EB> <8AA8> -<59EC> <59EC> -<59ED> <59F8> <8AAB> -<59F9> <59F9> -<59FA> <59FA> <8AB7> -<59FB> <59FB> -<59FC> <59FE> <8AB8> -<59FF> <59FF> -<5A00> <5A00> <8ABB> -<5A01> <5A01> -<5A02> <5A02> <8ABC> -<5A03> <5A03> -<5A04> <5A04> -<5A05> <5A06> -<5A07> <5A07> -<5A08> <5A08> -<5A09> <5A09> -<5A0A> <5A0B> <8ABD> -<5A0C> <5A0C> -<5A0D> <5A10> <8ABF> -endbfrange - -100 beginbfrange -<5A11> <5A11> -<5A12> <5A12> <8AC3> -<5A13> <5A13> -<5A14> <5A17> <8AC4> -<5A18> <5A18> -<5A19> <5A1B> <8AC8> -<5A1C> <5A1C> -<5A1D> <5A1E> <8ACB> -<5A1F> <5A1F> -<5A20> <5A20> -<5A21> <5A22> <8ACD> -<5A23> <5A23> -<5A24> <5A24> <8ACF> -<5A25> <5A25> -<5A26> <5A28> <8AD0> -<5A29> <5A29> -<5A2A> <5A30> <8AD3> -<5A31> <5A31> -<5A32> <5A32> -<5A33> <5A33> <8ADA> -<5A34> <5A34> -<5A35> <5A35> <8ADB> -<5A36> <5A36> -<5A37> <5A3B> <8ADC> -<5A3C> <5A3C> -<5A3D> <5A3F> <8AE1> -<5A40> <5A40> -<5A41> <5A45> <8AE4> -<5A46> <5A46> -<5A47> <5A48> <8AE9> -<5A49> <5A49> -<5A4A> <5A4A> -<5A4B> <5A54> <8AEB> -<5A55> <5A55> -<5A56> <5A59> <8AF5> -<5A5A> <5A5A> -<5A5B> <5A60> <8AF9> -<5A61> <5A61> <8B40> -<5A62> <5A62> -<5A63> <5A66> <8B41> -<5A67> <5A67> -<5A68> <5A69> <8B45> -<5A6A> <5A6A> -<5A6B> <5A73> <8B47> -<5A74> <5A74> -<5A75> <5A75> -<5A76> <5A76> -<5A77> <5A77> -<5A78> <5A79> <8B50> -<5A7A> <5A7A> -<5A7B> <5A7E> <8B52> -<5A7F> <5A7F> -<5A80> <5A91> <8B56> -<5A92> <5A92> -<5A93> <5A99> <8B68> -<5A9A> <5A9A> -<5A9B> <5A9B> -<5A9C> <5AA9> <8B6F> -<5AAA> <5AAA> -<5AAB> <5AAC> <8B7D> -<5AAD> <5AB1> <8B80> -<5AB2> <5AB2> -<5AB3> <5AB3> -<5AB4> <5AB4> <8B85> -<5AB5> <5AB5> -<5AB6> <5AB7> <8B86> -<5AB8> <5AB8> -<5AB9> <5ABD> <8B88> -<5ABE> <5ABE> -<5ABF> <5AC0> <8B8D> -<5AC1> <5AC1> -<5AC2> <5AC2> -<5AC3> <5AC8> <8B8F> -<5AC9> <5AC9> -<5ACA> <5ACB> <8B95> -<5ACC> <5ACC> -<5ACD> <5AD1> <8B97> -<5AD2> <5AD2> -<5AD3> <5AD3> <8B9C> -<5AD4> <5AD4> -<5AD5> <5AD5> <8B9D> -<5AD6> <5AD6> -<5AD7> <5AD7> <8B9E> -<5AD8> <5AD8> -<5AD9> <5ADB> <8B9F> -<5ADC> <5ADC> -<5ADD> <5ADF> <8BA2> -<5AE0> <5AE0> -<5AE1> <5AE1> -<5AE2> <5AE2> <8BA5> -<5AE3> <5AE3> -<5AE4> <5AE5> <8BA6> -<5AE6> <5AE6> -<5AE7> <5AE8> <8BA8> -<5AE9> <5AE9> -<5AEA> <5AEA> <8BAA> -<5AEB> <5AEB> -<5AEC> <5AF0> <8BAB> -<5AF1> <5AF1> -<5AF2> <5AFF> <8BB0> -endbfrange - -100 beginbfrange -<5B00> <5B08> <8BBE> -<5B09> <5B09> -<5B0A> <5B15> <8BC7> -<5B16> <5B16> -<5B17> <5B17> -<5B18> <5B31> <8BD3> -<5B32> <5B32> -<5B33> <5B33> <8BED> -<5B34> <5B34> -<5B35> <5B36> <8BEE> -<5B37> <5B37> -<5B38> <5B3F> <8BF0> -<5B40> <5B40> -<5B41> <5B47> <8BF8> -<5B48> <5B4F> <8C40> -<5B50> <5B50> -<5B51> <5B51> -<5B52> <5B52> <8C48> -<5B53> <5B53> -<5B54> <5B54> -<5B55> <5B55> -<5B56> <5B56> <8C49> -<5B57> <5B57> -<5B58> <5B58> -<5B59> <5B59> -<5B5A> <5B5A> -<5B5B> <5B5B> -<5B5C> <5B5C> -<5B5D> <5B5D> -<5B5E> <5B5E> <8C4A> -<5B5F> <5B5F> -<5B60> <5B61> <8C4B> -<5B62> <5B62> -<5B63> <5B63> -<5B64> <5B64> -<5B65> <5B65> -<5B66> <5B66> -<5B67> <5B68> <8C4D> -<5B69> <5B69> -<5B6A> <5B6A> -<5B6B> <5B6B> <8C4F> -<5B6C> <5B6C> -<5B6D> <5B6F> <8C50> -<5B70> <5B70> -<5B71> <5B71> -<5B72> <5B72> <8C53> -<5B73> <5B73> -<5B74> <5B74> <8C54> -<5B75> <5B75> -<5B76> <5B79> <8C55> -<5B7A> <5B7A> -<5B7B> <5B7C> <8C59> -<5B7D> <5B7D> -<5B7E> <5B7F> <8C5B> -<5B80> <5B80> -<5B81> <5B81> -<5B82> <5B82> <8C5D> -<5B83> <5B83> -<5B84> <5B84> -<5B85> <5B85> -<5B86> <5B86> <8C5E> -<5B87> <5B87> -<5B88> <5B88> -<5B89> <5B89> -<5B8A> <5B8A> <8C5F> -<5B8B> <5B8B> -<5B8C> <5B8C> -<5B8D> <5B8E> <8C60> -<5B8F> <5B8F> -<5B90> <5B92> <8C62> -<5B93> <5B93> -<5B94> <5B94> <8C65> -<5B95> <5B95> -<5B96> <5B96> <8C66> -<5B97> <5B97> -<5B98> <5B98> -<5B99> <5B99> -<5B9A> <5B9A> -<5B9B> <5B9B> -<5B9C> <5B9C> -<5B9D> <5B9D> -<5B9E> <5B9E> -<5B9F> <5B9F> <8C67> -<5BA0> <5BA0> -<5BA1> <5BA1> -<5BA2> <5BA2> -<5BA3> <5BA3> -<5BA4> <5BA4> -<5BA5> <5BA5> -<5BA6> <5BA6> -<5BA7> <5BA9> <8C68> -<5BAA> <5BAA> -<5BAB> <5BAB> -<5BAC> <5BAF> <8C6B> -<5BB0> <5BB0> -<5BB1> <5BB2> <8C6F> -<5BB3> <5BB3> -<5BB4> <5BB4> -<5BB5> <5BB5> -<5BB6> <5BB6> -endbfrange - -100 beginbfrange -<5BB7> <5BB7> <8C71> -<5BB8> <5BB8> -<5BB9> <5BB9> -<5BBA> <5BBC> <8C72> -<5BBD> <5BBD> -<5BBE> <5BBE> -<5BBF> <5BBF> -<5BC0> <5BC1> <8C75> -<5BC2> <5BC2> -<5BC3> <5BC3> <8C77> -<5BC4> <5BC4> -<5BC5> <5BC5> -<5BC6> <5BC6> -<5BC7> <5BC7> -<5BC8> <5BCB> <8C78> -<5BCC> <5BCC> -<5BCD> <5BCF> <8C7C> -<5BD0> <5BD0> -<5BD1> <5BD1> <8C80> -<5BD2> <5BD2> -<5BD3> <5BD3> -<5BD4> <5BDC> <8C81> -<5BDD> <5BDD> -<5BDE> <5BDE> -<5BDF> <5BDF> -<5BE0> <5BE0> <8C8A> -<5BE1> <5BE1> -<5BE2> <5BE3> <8C8B> -<5BE4> <5BE4> -<5BE5> <5BE5> -<5BE6> <5BE7> <8C8D> -<5BE8> <5BE8> -<5BE9> <5BED> <8C8F> -<5BEE> <5BEE> -<5BEF> <5BEF> <8C94> -<5BF0> <5BF0> -<5BF1> <5BF7> <8C95> -<5BF8> <5BF8> -<5BF9> <5BF9> -<5BFA> <5BFA> -<5BFB> <5BFB> -<5BFC> <5BFC> -<5BFD> <5BFE> <8C9C> -<5BFF> <5BFF> -<5C00> <5C00> <8C9E> -<5C01> <5C01> -<5C02> <5C03> <8C9F> -<5C04> <5C04> -<5C05> <5C05> <8CA1> -<5C06> <5C06> -<5C07> <5C08> <8CA2> -<5C09> <5C09> -<5C0A> <5C0A> -<5C0B> <5C0E> <8CA4> -<5C0F> <5C0F> -<5C10> <5C10> <8CA8> -<5C11> <5C11> -<5C12> <5C13> <8CA9> -<5C14> <5C14> -<5C15> <5C15> -<5C16> <5C16> -<5C17> <5C17> <8CAB> -<5C18> <5C18> -<5C19> <5C19> <8CAC> -<5C1A> <5C1A> -<5C1B> <5C1B> <8CAD> -<5C1C> <5C1C> -<5C1D> <5C1D> -<5C1E> <5C21> <8CAE> -<5C22> <5C22> -<5C23> <5C23> <8CB2> -<5C24> <5C24> -<5C25> <5C25> -<5C26> <5C26> <8CB3> -<5C27> <5C27> -<5C28> <5C2B> <8CB4> -<5C2C> <5C2C> -<5C2D> <5C30> <8CB8> -<5C31> <5C31> -<5C32> <5C33> <8CBC> -<5C34> <5C34> -<5C35> <5C37> <8CBE> -<5C38> <5C38> -<5C39> <5C39> -<5C3A> <5C3A> -<5C3B> <5C3B> -<5C3C> <5C3C> -<5C3D> <5C3D> -<5C3E> <5C3E> -<5C3F> <5C3F> -<5C40> <5C40> -<5C41> <5C41> -<5C42> <5C42> -<5C43> <5C44> <8CC1> -<5C45> <5C45> -<5C46> <5C47> <8CC3> -<5C48> <5C48> -<5C49> <5C49> -<5C4A> <5C4A> -<5C4B> <5C4B> -endbfrange - -100 beginbfrange -<5C4C> <5C4D> <8CC5> -<5C4E> <5C4E> -<5C4F> <5C4F> -<5C50> <5C50> -<5C51> <5C51> -<5C52> <5C54> <8CC7> -<5C55> <5C55> -<5C56> <5C58> <8CCA> -<5C59> <5C59> -<5C5A> <5C5D> <8CCD> -<5C5E> <5C5E> -<5C5F> <5C5F> <8CD1> -<5C60> <5C60> -<5C61> <5C61> -<5C62> <5C62> <8CD2> -<5C63> <5C63> -<5C64> <5C64> <8CD3> -<5C65> <5C65> -<5C66> <5C66> -<5C67> <5C6D> <8CD4> -<5C6E> <5C6E> -<5C6F> <5C6F> -<5C70> <5C70> <8CDB> -<5C71> <5C71> -<5C72> <5C78> <8CDC> -<5C79> <5C79> -<5C7A> <5C7A> -<5C7B> <5C7E> <8CE3> -<5C7F> <5C7F> -<5C80> <5C80> <8CE7> -<5C81> <5C81> -<5C82> <5C82> -<5C83> <5C87> <8CE8> -<5C88> <5C88> -<5C89> <5C8B> <8CED> -<5C8C> <5C8C> -<5C8D> <5C8D> -<5C8E> <5C8F> <8CF0> -<5C90> <5C90> -<5C91> <5C91> -<5C92> <5C93> <8CF2> -<5C94> <5C94> -<5C95> <5C95> <8CF4> -<5C96> <5C96> -<5C97> <5C97> -<5C98> <5C99> -<5C9A> <5C9A> -<5C9B> <5C9B> -<5C9C> <5C9C> -<5C9D> <5CA1> <8CF5> -<5CA2> <5CA2> -<5CA3> <5CA3> -<5CA4> <5CA8> <8CFA> -<5CA9> <5CA9> -<5CAA> <5CAA> <8D40> -<5CAB> <5CAB> -<5CAC> <5CAC> -<5CAD> <5CAD> -<5CAE> <5CB0> <8D41> -<5CB1> <5CB1> -<5CB2> <5CB2> <8D44> -<5CB3> <5CB3> -<5CB4> <5CB4> <8D45> -<5CB5> <5CB5> -<5CB6> <5CB6> <8D46> -<5CB7> <5CB7> -<5CB8> <5CB8> -<5CB9> <5CBC> <8D47> -<5CBD> <5CBD> -<5CBE> <5CBE> <8D4B> -<5CBF> <5CBF> -<5CC0> <5CC0> <8D4C> -<5CC1> <5CC1> -<5CC2> <5CC3> <8D4D> -<5CC4> <5CC4> -<5CC5> <5CCA> <8D4F> -<5CCB> <5CCB> -<5CCC> <5CD1> <8D55> -<5CD2> <5CD2> -<5CD3> <5CD8> <8D5B> -<5CD9> <5CD9> -<5CDA> <5CE0> <8D61> -<5CE1> <5CE1> -<5CE2> <5CE3> <8D68> -<5CE4> <5CE4> -<5CE5> <5CE5> -<5CE6> <5CE6> -<5CE7> <5CE7> <8D6A> -<5CE8> <5CE8> -<5CE9> <5CE9> <8D6B> -<5CEA> <5CEA> -<5CEB> <5CEC> <8D6C> -<5CED> <5CED> -<5CEE> <5CEF> <8D6E> -<5CF0> <5CF0> -<5CF1> <5CFA> <8D70> -<5CFB> <5CFB> -<5CFC> <5CFF> <8D7A> -<5D00> <5D00> <8D7E> -<5D01> <5D01> <8D80> -endbfrange - -100 beginbfrange -<5D02> <5D03> -<5D04> <5D05> <8D81> -<5D06> <5D06> -<5D07> <5D07> -<5D08> <5D0D> <8D83> -<5D0E> <5D0E> -<5D0F> <5D13> <8D89> -<5D14> <5D14> -<5D15> <5D15> <8D8E> -<5D16> <5D16> -<5D17> <5D1A> <8D8F> -<5D1B> <5D1B> -<5D1C> <5D1D> <8D93> -<5D1E> <5D1E> -<5D1F> <5D23> <8D95> -<5D24> <5D24> -<5D25> <5D25> <8D9A> -<5D26> <5D26> -<5D27> <5D27> -<5D28> <5D28> <8D9B> -<5D29> <5D29> -<5D2A> <5D2C> <8D9C> -<5D2D> <5D2D> -<5D2E> <5D2E> -<5D2F> <5D33> <8D9F> -<5D34> <5D34> -<5D35> <5D3C> <8DA4> -<5D3D> <5D3D> -<5D3E> <5D3E> -<5D3F> <5D46> <8DAC> -<5D47> <5D47> -<5D48> <5D49> <8DB4> -<5D4A> <5D4A> -<5D4B> <5D4B> -<5D4C> <5D4C> -<5D4D> <5D57> <8DB6> -<5D58> <5D58> -<5D59> <5D5A> <8DC1> -<5D5B> <5D5B> -<5D5C> <5D5C> <8DC3> -<5D5D> <5D5D> -<5D5E> <5D68> <8DC4> -<5D69> <5D69> -<5D6A> <5D6A> <8DCF> -<5D6B> <5D6B> -<5D6C> <5D6C> -<5D6D> <5D6E> <8DD0> -<5D6F> <5D6F> -<5D70> <5D73> <8DD2> -<5D74> <5D74> -<5D75> <5D81> <8DD6> -<5D82> <5D82> -<5D83> <5D98> <8DE3> -<5D99> <5D99> -<5D9A> <5D9C> <8DF9> -<5D9D> <5D9D> -<5D9E> <5DA0> <8DFC> -<5DA1> <5DB6> <8E40> -<5DB7> <5DB7> -<5DB8> <5DC4> <8E56> -<5DC5> <5DC5> -<5DC6> <5DCC> <8E63> -<5DCD> <5DCD> -<5DCE> <5DDA> <8E6A> -<5DDB> <5DDB> -<5DDC> <5DDC> <8E77> -<5DDD> <5DDD> -<5DDE> <5DDE> -<5DDF> <5DE0> <8E78> -<5DE1> <5DE1> -<5DE2> <5DE2> -<5DE3> <5DE4> <8E7A> -<5DE5> <5DE5> -<5DE6> <5DE6> -<5DE7> <5DE7> -<5DE8> <5DE8> -<5DE9> <5DE9> -<5DEA> <5DEA> <8E7C> -<5DEB> <5DEB> -<5DEC> <5DED> <8E7D> -<5DEE> <5DEE> -<5DEF> <5DEF> -<5DF0> <5DF0> <8E80> -<5DF1> <5DF1> -<5DF2> <5DF2> -<5DF3> <5DF3> -<5DF4> <5DF4> -<5DF5> <5DF6> <8E81> -<5DF7> <5DF7> -<5DF8> <5DFC> <8E83> -<5DFD> <5DFD> -<5DFE> <5DFE> -<5DFF> <5DFF> <8E88> -<5E00> <5E00> <8E89> -<5E01> <5E01> -<5E02> <5E02> -<5E03> <5E03> -<5E04> <5E04> <8E8A> -<5E05> <5E05> -<5E06> <5E06> -endbfrange - -100 beginbfrange -<5E07> <5E07> <8E8B> -<5E08> <5E08> -<5E09> <5E0B> <8E8C> -<5E0C> <5E0C> -<5E0D> <5E0E> <8E8F> -<5E0F> <5E0F> -<5E10> <5E10> -<5E11> <5E11> -<5E12> <5E13> <8E91> -<5E14> <5E14> -<5E15> <5E15> -<5E16> <5E16> -<5E17> <5E17> <8E93> -<5E18> <5E18> -<5E19> <5E19> -<5E1A> <5E1A> -<5E1B> <5E1B> -<5E1C> <5E1C> -<5E1D> <5E1D> -<5E1E> <5E25> <8E94> -<5E26> <5E26> -<5E27> <5E27> -<5E28> <5E2C> <8E9C> -<5E2D> <5E2D> -<5E2E> <5E2E> -<5E2F> <5E30> <8EA1> -<5E31> <5E31> -<5E32> <5E36> <8EA3> -<5E37> <5E37> -<5E38> <5E38> -<5E39> <5E3A> <8EA8> -<5E3B> <5E3C> -<5E3D> <5E3D> -<5E3E> <5E41> <8EAA> -<5E42> <5E42> -<5E43> <5E43> <8EAE> -<5E44> <5E44> -<5E45> <5E45> -<5E46> <5E4B> <8EAF> -<5E4C> <5E4C> -<5E4D> <5E53> <8EB5> -<5E54> <5E54> -<5E55> <5E55> -<5E56> <5E5A> <8EBC> -<5E5B> <5E5B> -<5E5C> <5E5D> <8EC1> -<5E5E> <5E5E> -<5E5F> <5E60> <8EC3> -<5E61> <5E61> -<5E62> <5E62> -<5E63> <5E71> <8EC5> -<5E72> <5E72> -<5E73> <5E73> -<5E74> <5E74> -<5E75> <5E75> <8ED4> -<5E76> <5E76> -<5E77> <5E77> <8ED5> -<5E78> <5E78> -<5E79> <5E79> <8ED6> -<5E7A> <5E7A> -<5E7B> <5E7B> -<5E7C> <5E7C> -<5E7D> <5E7D> -<5E7E> <5E7E> <8ED7> -<5E7F> <5E7F> -<5E80> <5E80> -<5E81> <5E83> <8ED8> -<5E84> <5E84> -<5E85> <5E85> <8EDB> -<5E86> <5E86> -<5E87> <5E87> -<5E88> <5E89> <8EDC> -<5E8A> <5E8A> -<5E8B> <5E8B> -<5E8C> <5E8E> <8EDE> -<5E8F> <5E8F> -<5E90> <5E90> -<5E91> <5E91> -<5E92> <5E92> <8EE1> -<5E93> <5E93> -<5E94> <5E94> -<5E95> <5E95> -<5E96> <5E96> -<5E97> <5E97> -<5E98> <5E98> <8EE2> -<5E99> <5E99> -<5E9A> <5E9A> -<5E9B> <5E9B> <8EE3> -<5E9C> <5E9C> -<5E9D> <5E9D> <8EE4> -<5E9E> <5E9E> -<5E9F> <5E9F> -<5EA0> <5EA0> -<5EA1> <5EA4> <8EE5> -<5EA5> <5EA5> -<5EA6> <5EA6> -<5EA7> <5EA7> -<5EA8> <5EAC> <8EE9> -<5EAD> <5EAD> -<5EAE> <5EB2> <8EEE> -endbfrange - -100 beginbfrange -<5EB3> <5EB3> -<5EB4> <5EB4> <8EF3> -<5EB5> <5EB5> -<5EB6> <5EB6> -<5EB7> <5EB7> -<5EB8> <5EB8> -<5EB9> <5EB9> -<5EBA> <5EBD> <8EF4> -<5EBE> <5EBE> -<5EBF> <5EC5> <8EF8> -<5EC6> <5EC8> <8F40> -<5EC9> <5EC9> -<5ECA> <5ECA> -<5ECB> <5ED0> <8F43> -<5ED1> <5ED1> -<5ED2> <5ED2> -<5ED3> <5ED3> -<5ED4> <5ED5> <8F49> -<5ED6> <5ED6> -<5ED7> <5EDA> <8F4B> -<5EDB> <5EDB> -<5EDC> <5EE7> <8F4F> -<5EE8> <5EE8> -<5EE9> <5EE9> <8F5B> -<5EEA> <5EEA> -<5EEB> <5EF3> <8F5C> -<5EF4> <5EF4> -<5EF5> <5EF5> <8F65> -<5EF6> <5EF6> -<5EF7> <5EF7> -<5EF8> <5EF9> <8F66> -<5EFA> <5EFA> -<5EFB> <5EFD> <8F68> -<5EFE> <5EFE> -<5EFF> <5EFF> -<5F00> <5F00> -<5F01> <5F01> -<5F02> <5F02> -<5F03> <5F03> -<5F04> <5F04> -<5F05> <5F07> <8F6B> -<5F08> <5F08> -<5F09> <5F09> <8F6E> -<5F0A> <5F0A> -<5F0B> <5F0B> -<5F0C> <5F0E> <8F6F> -<5F0F> <5F0F> -<5F10> <5F10> <8F72> -<5F11> <5F11> -<5F12> <5F12> <8F73> -<5F13> <5F13> -<5F14> <5F14> <8F74> -<5F15> <5F15> -<5F16> <5F16> <8F75> -<5F17> <5F17> -<5F18> <5F18> -<5F19> <5F1A> <8F76> -<5F1B> <5F1B> -<5F1C> <5F1E> <8F78> -<5F1F> <5F1F> -<5F20> <5F20> -<5F21> <5F24> <8F7B> -<5F25> <5F25> -<5F26> <5F26> -<5F27> <5F27> -<5F28> <5F28> <8F80> -<5F29> <5F29> -<5F2A> <5F2A> -<5F2B> <5F2C> <8F81> -<5F2D> <5F2D> -<5F2E> <5F2E> <8F83> -<5F2F> <5F2F> -<5F30> <5F30> <8F84> -<5F31> <5F31> -<5F32> <5F38> <8F85> -<5F39> <5F39> -<5F3A> <5F3A> -<5F3B> <5F3B> <8F8C> -<5F3C> <5F3C> -<5F3D> <5F3F> <8F8D> -<5F40> <5F40> -<5F41> <5F4F> <8F90> -<5F50> <5F50> -<5F51> <5F51> <8F9F> -<5F52> <5F52> -<5F53> <5F53> -<5F54> <5F54> <8FA0> -<5F55> <5F55> -<5F56> <5F56> -<5F57> <5F57> -<5F58> <5F58> -<5F59> <5F5C> <8FA1> -<5F5D> <5F5D> -<5F5E> <5F60> <8FA5> -<5F61> <5F61> -<5F62> <5F62> -<5F63> <5F63> <8FA8> -<5F64> <5F64> -<5F65> <5F65> <8FA9> -<5F66> <5F66> -endbfrange - -100 beginbfrange -<5F67> <5F68> <8FAA> -<5F69> <5F69> -<5F6A> <5F6A> -<5F6B> <5F6B> <8FAC> -<5F6C> <5F6C> -<5F6D> <5F6D> -<5F6E> <5F6F> <8FAD> -<5F70> <5F70> -<5F71> <5F71> -<5F72> <5F72> <8FAF> -<5F73> <5F73> -<5F74> <5F76> <8FB0> -<5F77> <5F77> -<5F78> <5F78> <8FB3> -<5F79> <5F79> -<5F7A> <5F7A> <8FB4> -<5F7B> <5F7B> -<5F7C> <5F7C> -<5F7D> <5F7F> <8FB5> -<5F80> <5F80> -<5F81> <5F81> -<5F82> <5F82> -<5F83> <5F83> <8FB8> -<5F84> <5F84> -<5F85> <5F85> -<5F86> <5F86> <8FB9> -<5F87> <5F87> -<5F88> <5F88> -<5F89> <5F89> -<5F8A> <5F8A> -<5F8B> <5F8B> -<5F8C> <5F8C> -<5F8D> <5F8F> <8FBA> -<5F90> <5F90> -<5F91> <5F91> <8FBD> -<5F92> <5F92> -<5F93> <5F94> <8FBE> -<5F95> <5F95> -<5F96> <5F96> <8FC0> -<5F97> <5F97> -<5F98> <5F98> -<5F99> <5F99> -<5F9A> <5F9B> <8FC1> -<5F9C> <5F9C> -<5F9D> <5FA0> <8FC3> -<5FA1> <5FA1> -<5FA2> <5FA7> <8FC7> -<5FA8> <5FA8> -<5FA9> <5FA9> <8FCD> -<5FAA> <5FAA> -<5FAB> <5FAC> <8FCE> -<5FAD> <5FAD> -<5FAE> <5FAE> -<5FAF> <5FB4> <8FD0> -<5FB5> <5FB5> -<5FB6> <5FB6> <8FD6> -<5FB7> <5FB7> -<5FB8> <5FBB> <8FD7> -<5FBC> <5FBC> -<5FBD> <5FBD> -<5FBE> <5FC2> <8FDB> -<5FC3> <5FC3> -<5FC4> <5FC4> -<5FC5> <5FC5> -<5FC6> <5FC6> -<5FC7> <5FC8> <8FE0> -<5FC9> <5FC9> -<5FCA> <5FCB> <8FE2> -<5FCC> <5FCC> -<5FCD> <5FCD> -<5FCE> <5FCE> <8FE4> -<5FCF> <5FCF> -<5FD0> <5FD0> -<5FD1> <5FD1> -<5FD2> <5FD2> -<5FD3> <5FD5> <8FE5> -<5FD6> <5FD6> -<5FD7> <5FD7> -<5FD8> <5FD8> -<5FD9> <5FD9> -<5FDA> <5FDC> <8FE8> -<5FDD> <5FDD> -<5FDE> <5FDF> <8FEB> -<5FE0> <5FE0> -<5FE1> <5FE1> -<5FE2> <5FE3> <8FED> -<5FE4> <5FE4> -<5FE5> <5FE6> <8FEF> -<5FE7> <5FE7> -<5FE8> <5FE9> <8FF1> -<5FEA> <5FEA> -<5FEB> <5FEB> -<5FEC> <5FEC> <8FF3> -<5FED> <5FED> -<5FEE> <5FEE> -<5FEF> <5FF0> <8FF4> -<5FF1> <5FF1> -<5FF2> <5FF4> <8FF6> -<5FF5> <5FF5> -<5FF6> <5FF7> <8FF9> -endbfrange - -100 beginbfrange -<5FF8> <5FF8> -<5FF9> <5FFA> <8FFB> -<5FFB> <5FFB> -<5FFC> <5FFC> <8FFD> -<5FFD> <5FFD> -<5FFE> <5FFE> -<5FFF> <5FFF> -<6000> <6000> -<6001> <6001> -<6002> <6002> -<6003> <6003> -<6004> <6004> -<6005> <6006> -<6007> <6007> <8FFE> -<6008> <6009> <9040> -<600A> <600A> -<600B> <600C> <9042> -<600D> <600D> -<600E> <600E> -<600F> <600F> -<6010> <6011> <9044> -<6012> <6012> -<6013> <6013> <9046> -<6014> <6014> -<6015> <6015> -<6016> <6016> -<6017> <6018> <9047> -<6019> <6019> -<601A> <601A> <9049> -<601B> <601B> -<601C> <601C> -<601D> <601D> -<601E> <601F> <904A> -<6020> <6020> -<6021> <6021> -<6022> <6024> <904C> -<6025> <6025> -<6026> <6026> -<6027> <6027> -<6028> <6028> -<6029> <6029> -<602A> <602A> -<602B> <602B> -<602C> <602E> <904F> -<602F> <602F> -<6030> <6034> <9052> -<6035> <6035> -<6036> <603A> <9057> -<603B> <603B> -<603C> <603C> -<603D> <603E> <905C> -<603F> <603F> -<6040> <6040> <905E> -<6041> <6041> -<6042> <6042> -<6043> <6043> -<6044> <604A> <905F> -<604B> <604B> -<604C> <604C> <9066> -<604D> <604D> -<604E> <604F> <9067> -<6050> <6050> -<6051> <6051> <9069> -<6052> <6052> -<6053> <6054> <906A> -<6055> <6055> -<6056> <6058> <906C> -<6059> <6059> -<605A> <605A> -<605B> <605C> <906F> -<605D> <605D> -<605E> <6061> <9071> -<6062> <6062> -<6063> <6063> -<6064> <6064> -<6065> <6066> <9075> -<6067> <6067> -<6068> <6068> -<6069> <6069> -<606A> <606A> -<606B> <606B> -<606C> <606C> -<606D> <606D> -<606E> <606E> <9077> -<606F> <606F> -<6070> <6070> -<6071> <6072> <9078> -<6073> <6073> -<6074> <6075> <907A> -<6076> <6076> -<6077> <6077> <907C> -<6078> <6079> -<607A> <607A> -<607B> <607B> -<607C> <607C> -<607D> <607D> -<607E> <607E> <907D> -<607F> <607F> -<6080> <6080> <907E> -<6081> <6082> <9080> -endbfrange - -100 beginbfrange -<6083> <6083> -<6084> <6084> -<6085> <6088> <9082> -<6089> <6089> -<608A> <608B> <9086> -<608C> <608C> -<608D> <608D> -<608E> <6091> <9088> -<6092> <6092> -<6093> <6093> <908C> -<6094> <6094> -<6095> <6095> <908D> -<6096> <6096> -<6097> <6099> <908E> -<609A> <609A> -<609B> <609B> -<609C> <609C> <9091> -<609D> <609D> -<609E> <609E> <9092> -<609F> <609F> -<60A0> <60A0> -<60A1> <60A2> <9093> -<60A3> <60A3> -<60A4> <60A5> <9095> -<60A6> <60A6> -<60A7> <60A7> <9097> -<60A8> <60A8> -<60A9> <60AA> <9098> -<60AB> <60AB> -<60AC> <60AC> -<60AD> <60AD> -<60AE> <60AE> <909A> -<60AF> <60AF> -<60B0> <60B0> <909B> -<60B1> <60B1> -<60B2> <60B2> -<60B3> <60B3> <909C> -<60B4> <60B4> -<60B5> <60B7> <909D> -<60B8> <60B8> -<60B9> <60BA> <90A0> -<60BB> <60BB> -<60BC> <60BC> -<60BD> <60C4> <90A2> -<60C5> <60C5> -<60C6> <60C6> -<60C7> <60C9> <90AA> -<60CA> <60CA> -<60CB> <60CB> -<60CC> <60D0> <90AD> -<60D1> <60D1> -<60D2> <60D4> <90B2> -<60D5> <60D5> -<60D6> <60D7> <90B5> -<60D8> <60D8> -<60D9> <60D9> <90B7> -<60DA> <60DA> -<60DB> <60DB> <90B8> -<60DC> <60DC> -<60DD> <60DD> -<60DE> <60DE> <90B9> -<60DF> <60DF> -<60E0> <60E0> -<60E1> <60E5> <90BA> -<60E6> <60E6> -<60E7> <60E7> -<60E8> <60E8> -<60E9> <60E9> -<60EA> <60EA> <90BF> -<60EB> <60EB> -<60EC> <60EC> -<60ED> <60ED> -<60EE> <60EE> -<60EF> <60EF> -<60F0> <60F0> -<60F1> <60F2> <90C0> -<60F3> <60F3> -<60F4> <60F4> -<60F5> <60F5> <90C2> -<60F6> <60F6> -<60F7> <60F8> <90C3> -<60F9> <60F9> -<60FA> <60FA> -<60FB> <60FF> <90C5> -<6100> <6100> -<6101> <6101> -<6102> <6105> <90CA> -<6106> <6106> -<6107> <6107> <90CE> -<6108> <6108> -<6109> <6109> -<610A> <610C> <90CF> -<610D> <610D> -<610E> <610E> -<610F> <610F> -<6110> <6114> <90D2> -<6115> <6115> -<6116> <6119> <90D7> -<611A> <611A> -<611B> <611E> <90DB> -endbfrange - -100 beginbfrange -<611F> <611F> -<6120> <6120> -<6121> <6122> <90DF> -<6123> <6123> -<6124> <6124> -<6125> <6125> <90E1> -<6126> <6126> -<6127> <6127> -<6128> <612A> <90E2> -<612B> <612B> -<612C> <613E> <90E5> -<613F> <613F> -<6140> <6146> <90F8> -<6147> <6147> <9140> -<6148> <6148> -<6149> <6149> <9141> -<614A> <614A> -<614B> <614B> <9142> -<614C> <614C> -<614D> <614D> <9143> -<614E> <614E> -<614F> <6150> <9144> -<6151> <6151> -<6152> <6154> <9146> -<6155> <6155> -<6156> <615C> <9149> -<615D> <615D> -<615E> <6161> <9150> -<6162> <6162> -<6163> <6166> <9154> -<6167> <6167> -<6168> <6168> -<6169> <616F> <9158> -<6170> <6170> -<6171> <6174> <915F> -<6175> <6175> -<6176> <6176> <9163> -<6177> <6177> -<6178> <618A> <9164> -<618B> <618B> -<618C> <618D> <9177> -<618E> <618E> -<618F> <6193> <9179> -<6194> <6194> -<6195> <6195> <917E> -<6196> <619C> <9180> -<619D> <619D> -<619E> <61A6> <9187> -<61A7> <61A7> -<61A8> <61A8> -<61A9> <61A9> -<61AA> <61AB> <9190> -<61AC> <61AC> -<61AD> <61B6> <9192> -<61B7> <61B7> -<61B8> <61BD> <919C> -<61BE> <61BE> -<61BF> <61C1> <91A2> -<61C2> <61C2> -<61C3> <61C7> <91A5> -<61C8> <61C8> -<61C9> <61C9> <91AA> -<61CA> <61CA> -<61CB> <61CB> -<61CC> <61D0> <91AB> -<61D1> <61D1> -<61D2> <61D2> -<61D3> <61D3> <91B0> -<61D4> <61D4> -<61D5> <61E5> <91B1> -<61E6> <61E6> -<61E7> <61F4> <91C2> -<61F5> <61F5> -<61F6> <61FE> <91D0> -<61FF> <61FF> -<6200> <6205> <91D9> -<6206> <6206> -<6207> <6207> <91DF> -<6208> <6208> -<6209> <6209> <91E0> -<620A> <620A> -<620B> <620B> -<620C> <620C> -<620D> <620D> -<620E> <620E> -<620F> <620F> -<6210> <6210> -<6211> <6211> -<6212> <6212> -<6213> <6214> <91E1> -<6215> <6215> -<6216> <6216> -<6217> <6217> -<6218> <6218> -<6219> <6219> <91E3> -<621A> <621A> -<621B> <621B> -<621C> <621E> <91E4> -<621F> <621F> -<6220> <6220> <91E7> -endbfrange - -100 beginbfrange -<6221> <6221> -<6222> <6222> -<6223> <6223> <91E8> -<6224> <6224> -<6225> <6225> -<6226> <6229> <91E9> -<622A> <622A> -<622B> <622B> <91ED> -<622C> <622C> -<622D> <622D> <91EE> -<622E> <622E> -<622F> <6232> <91EF> -<6233> <6233> -<6234> <6234> -<6235> <6236> <91F3> -<6237> <6237> -<6238> <623C> <91F5> -<623D> <623D> -<623E> <623E> -<623F> <623F> -<6240> <6240> -<6241> <6241> -<6242> <6242> <91FA> -<6243> <6243> -<6244> <6246> <91FB> -<6247> <6247> -<6248> <6249> -<624A> <624A> <91FE> -<624B> <624B> -<624C> <624C> -<624D> <624D> -<624E> <624E> -<624F> <6250> <9240> -<6251> <6251> -<6252> <6252> -<6253> <6253> -<6254> <6254> -<6255> <6257> <9242> -<6258> <6258> -<6259> <625A> <9245> -<625B> <625B> -<625C> <6262> <9247> -<6263> <6263> -<6264> <6265> <924E> -<6266> <6266> -<6267> <6267> -<6268> <6268> <9250> -<6269> <6269> -<626A> <626A> -<626B> <626B> -<626C> <626C> -<626D> <626D> -<626E> <626E> -<626F> <626F> -<6270> <6270> -<6271> <6272> <9251> -<6273> <6273> -<6274> <6275> <9253> -<6276> <6276> -<6277> <6278> <9255> -<6279> <6279> -<627A> <627B> <9257> -<627C> <627C> -<627D> <627D> <9259> -<627E> <627E> -<627F> <627F> -<6280> <6280> -<6281> <6283> <925A> -<6284> <6284> -<6285> <6288> <925D> -<6289> <6289> -<628A> <628A> -<628B> <6290> <9261> -<6291> <6291> -<6292> <6292> -<6293> <6293> -<6294> <6294> <9267> -<6295> <6295> -<6296> <6296> -<6297> <6297> -<6298> <6298> -<6299> <6299> <9268> -<629A> <629A> -<629B> <629B> -<629C> <629E> <9269> -<629F> <629F> -<62A0> <62A0> -<62A1> <62A1> -<62A2> <62A2> -<62A3> <62A3> <926C> -<62A4> <62A4> -<62A5> <62A5> -<62A6> <62A7> <926D> -<62A8> <62A8> -<62A9> <62AA> <926F> -<62AB> <62AB> -<62AC> <62AC> -<62AD> <62B0> <9271> -<62B1> <62B1> -<62B2> <62B4> <9275> -endbfrange - -100 beginbfrange -<62B5> <62B5> -<62B6> <62B8> <9278> -<62B9> <62B9> -<62BA> <62BA> <927B> -<62BB> <62BB> -<62BC> <62BC> -<62BD> <62BD> -<62BE> <62BE> <927C> -<62BF> <62BF> -<62C0> <62C1> <927D> -<62C2> <62C2> -<62C3> <62C3> <9280> -<62C4> <62C4> -<62C5> <62C5> -<62C6> <62C6> -<62C7> <62C7> -<62C8> <62C8> -<62C9> <62C9> -<62CA> <62CA> -<62CB> <62CB> <9281> -<62CC> <62CC> -<62CD> <62CD> -<62CE> <62CE> -<62CF> <62CF> <9282> -<62D0> <62D0> -<62D1> <62D1> <9283> -<62D2> <62D2> -<62D3> <62D3> -<62D4> <62D4> -<62D5> <62D5> <9284> -<62D6> <62D6> -<62D7> <62D7> -<62D8> <62D8> -<62D9> <62D9> -<62DA> <62DA> -<62DB> <62DB> -<62DC> <62DC> -<62DD> <62DE> <9285> -<62DF> <62DF> -<62E0> <62E1> <9287> -<62E2> <62E2> -<62E3> <62E3> -<62E4> <62E4> <9289> -<62E5> <62E5> -<62E6> <62E6> -<62E7> <62E7> -<62E8> <62E8> -<62E9> <62E9> -<62EA> <62EB> <928A> -<62EC> <62EC> -<62ED> <62ED> -<62EE> <62EE> -<62EF> <62EF> -<62F0> <62F0> <928C> -<62F1> <62F1> -<62F2> <62F2> <928D> -<62F3> <62F3> -<62F4> <62F4> -<62F5> <62F5> <928E> -<62F6> <62F6> -<62F7> <62F7> -<62F8> <62FB> <928F> -<62FC> <62FC> -<62FD> <62FD> -<62FE> <62FE> -<62FF> <62FF> -<6300> <6300> <9293> -<6301> <6301> -<6302> <6302> -<6303> <6306> <9294> -<6307> <6307> -<6308> <6308> -<6309> <6309> -<630A> <630D> <9298> -<630E> <630E> -<630F> <6310> <929C> -<6311> <6311> -<6312> <6315> <929E> -<6316> <6316> -<6317> <6319> <92A2> -<631A> <631A> -<631B> <631B> -<631C> <631C> <92A5> -<631D> <631D> -<631E> <631E> -<631F> <631F> -<6320> <6320> -<6321> <6321> -<6322> <6322> -<6323> <6323> -<6324> <6324> -<6325> <6325> -<6326> <6327> <92A6> -<6328> <6328> -<6329> <6329> <92A8> -<632A> <632A> -<632B> <632B> -<632C> <632E> <92A9> -<632F> <632F> -<6330> <6331> <92AC> -endbfrange - -100 beginbfrange -<6332> <6332> -<6333> <6338> <92AE> -<6339> <6339> -<633A> <633A> -<633B> <633C> <92B4> -<633D> <633D> -<633E> <6341> <92B6> -<6342> <6342> -<6343> <6343> -<6344> <6344> <92BA> -<6345> <6345> -<6346> <6346> -<6347> <6348> <92BB> -<6349> <6349> -<634A> <634A> <92BD> -<634B> <634B> -<634C> <634C> -<634D> <634D> -<634E> <634E> -<634F> <634F> -<6350> <6350> -<6351> <6354> <92BE> -<6355> <6355> -<6356> <635D> <92C2> -<635E> <635E> -<635F> <635F> -<6360> <6360> <92CA> -<6361> <6361> -<6362> <6362> -<6363> <6363> -<6364> <6366> <92CB> -<6367> <6367> -<6368> <6368> <92CE> -<6369> <6369> -<636A> <636C> <92CF> -<636D> <636D> -<636E> <636E> -<636F> <6370> <92D2> -<6371> <6371> -<6372> <6375> <92D4> -<6376> <6376> -<6377> <6377> -<6378> <6379> <92D8> -<637A> <637A> -<637B> <637B> -<637C> <637F> <92DA> -<6380> <6380> -<6381> <6381> <92DE> -<6382> <6382> -<6383> <6386> <92DF> -<6387> <6387> -<6388> <6388> -<6389> <6389> -<638A> <638A> -<638B> <638B> <92E3> -<638C> <638C> -<638D> <638D> <92E4> -<638E> <638E> -<638F> <638F> -<6390> <6390> -<6391> <6391> <92E5> -<6392> <6392> -<6393> <6395> <92E6> -<6396> <6396> -<6397> <6397> <92E9> -<6398> <6398> -<6399> <639F> <92EA> -<63A0> <63A0> -<63A1> <63A1> <92F1> -<63A2> <63A2> -<63A3> <63A3> -<63A4> <63A4> <92F2> -<63A5> <63A5> -<63A6> <63A6> <92F3> -<63A7> <63A7> -<63A8> <63A8> -<63A9> <63A9> -<63AA> <63AA> -<63AB> <63AB> <92F4> -<63AC> <63AC> -<63AD> <63AD> -<63AE> <63AE> -<63AF> <63AF> <92F5> -<63B0> <63B0> -<63B1> <63B2> <92F6> -<63B3> <63B3> -<63B4> <63B4> -<63B5> <63B6> <92F8> -<63B7> <63B7> -<63B8> <63B8> -<63B9> <63B9> <92FA> -<63BA> <63BA> -<63BB> <63BB> <92FB> -<63BC> <63BC> -<63BD> <63BD> <92FC> -<63BE> <63BE> -<63BF> <63C0> <92FD> -<63C1> <63C3> <9340> -<63C4> <63C4> -<63C5> <63C5> <9343> -endbfrange - -100 beginbfrange -<63C6> <63C6> -<63C7> <63C8> <9344> -<63C9> <63C9> -<63CA> <63CC> <9346> -<63CD> <63CD> -<63CE> <63CE> -<63CF> <63CF> -<63D0> <63D0> -<63D1> <63D1> <9349> -<63D2> <63D2> -<63D3> <63D5> <934A> -<63D6> <63D6> -<63D7> <63DD> <934D> -<63DE> <63DE> -<63DF> <63DF> <9354> -<63E0> <63E0> -<63E1> <63E1> -<63E2> <63E2> <9355> -<63E3> <63E3> -<63E4> <63E8> <9356> -<63E9> <63E9> -<63EA> <63EA> -<63EB> <63EC> <935B> -<63ED> <63ED> -<63EE> <63F1> <935D> -<63F2> <63F2> -<63F3> <63F3> <9361> -<63F4> <63F4> -<63F5> <63F5> <9362> -<63F6> <63F6> -<63F7> <63F7> <9363> -<63F8> <63F8> -<63F9> <63FC> <9364> -<63FD> <63FD> -<63FE> <63FE> <9368> -<63FF> <63FF> -<6400> <6400> -<6401> <6401> -<6402> <6402> -<6403> <6404> <9369> -<6405> <6405> -<6406> <640A> <936B> -<640B> <640B> -<640C> <640C> -<640D> <640E> <9370> -<640F> <640F> -<6410> <6410> -<6411> <6412> <9372> -<6413> <6413> -<6414> <6414> -<6415> <641A> <9374> -<641B> <641B> -<641C> <641C> -<641D> <641D> <937A> -<641E> <641E> -<641F> <641F> <937B> -<6420> <6420> -<6421> <6421> -<6422> <6424> <937C> -<6425> <6425> <9380> -<6426> <6426> -<6427> <6429> <9381> -<642A> <642A> -<642B> <642B> <9384> -<642C> <642C> -<642D> <642D> -<642E> <6433> <9385> -<6434> <6434> -<6435> <6439> <938B> -<643A> <643A> -<643B> <643C> <9390> -<643D> <643D> -<643E> <643E> <9392> -<643F> <643F> -<6440> <6440> <9393> -<6441> <6441> -<6442> <6443> <9394> -<6444> <6444> -<6445> <6445> -<6446> <6446> -<6447> <6447> -<6448> <6448> -<6449> <6449> <9396> -<644A> <644A> -<644B> <6451> <9397> -<6452> <6452> -<6453> <6453> <939E> -<6454> <6454> -<6455> <6457> <939F> -<6458> <6458> -<6459> <645D> <93A2> -<645E> <645E> -<645F> <6466> <93A7> -<6467> <6467> -<6468> <6468> <93AF> -<6469> <6469> -<646A> <646C> <93B0> -<646D> <646D> -<646E> <6477> <93B3> -<6478> <6478> -endbfrange - -100 beginbfrange -<6479> <6479> -<647A> <647A> -<647B> <6481> <93BD> -<6482> <6482> -<6483> <6483> <93C4> -<6484> <6484> -<6485> <6485> -<6486> <6486> <93C5> -<6487> <6487> -<6488> <6490> <93C6> -<6491> <6491> -<6492> <6492> -<6493> <6494> <93CF> -<6495> <6495> -<6496> <6496> -<6497> <6498> <93D1> -<6499> <6499> -<649A> <649D> <93D3> -<649E> <649E> -<649F> <64A3> <93D7> -<64A4> <64A4> -<64A5> <64A8> <93DC> -<64A9> <64A9> -<64AA> <64AB> <93E0> -<64AC> <64AC> -<64AD> <64AD> -<64AE> <64AE> -<64AF> <64AF> <93E2> -<64B0> <64B0> -<64B1> <64B4> <93E3> -<64B5> <64B5> -<64B6> <64B6> <93E7> -<64B7> <64B8> -<64B9> <64B9> <93E8> -<64BA> <64BA> -<64BB> <64BB> <93E9> -<64BC> <64BC> -<64BD> <64BF> <93EA> -<64C0> <64C0> -<64C1> <64C1> <93ED> -<64C2> <64C2> -<64C3> <64C4> <93EE> -<64C5> <64C5> -<64C6> <64CC> <93F0> -<64CD> <64CD> -<64CE> <64CE> -<64CF> <64CF> <93F7> -<64D0> <64D0> -<64D1> <64D1> <93F8> -<64D2> <64D2> -<64D3> <64D6> <93F9> -<64D7> <64D7> -<64D8> <64D8> -<64D9> <64DA> <93FD> -<64DB> <64DD> <9440> -<64DE> <64DE> -<64DF> <64E1> <9443> -<64E2> <64E2> -<64E3> <64E3> <9446> -<64E4> <64E4> -<64E5> <64E5> <9447> -<64E6> <64E6> -<64E7> <64FF> <9448> -<6500> <6500> -<6501> <6508> <9461> -<6509> <6509> -<650A> <6511> <9469> -<6512> <6512> -<6513> <6517> <9471> -<6518> <6518> -<6519> <6521> <9476> -<6522> <6524> <9480> -<6525> <6525> -<6526> <652A> <9483> -<652B> <652B> -<652C> <652D> <9488> -<652E> <652E> -<652F> <652F> -<6530> <6533> <948A> -<6534> <6534> -<6535> <6535> -<6536> <6536> -<6537> <6537> <948E> -<6538> <6538> -<6539> <6539> -<653A> <653A> <948F> -<653B> <653B> -<653C> <653D> <9490> -<653E> <653E> -<653F> <653F> -<6540> <6544> <9492> -<6545> <6545> -<6546> <6547> <9497> -<6548> <6548> -<6549> <6549> -<654A> <654B> <9499> -<654C> <654C> -<654D> <654E> <949B> -<654F> <654F> -<6550> <6550> <949D> -endbfrange - -100 beginbfrange -<6551> <6551> -<6552> <6554> <949E> -<6555> <6555> -<6556> <6556> -<6557> <6558> <94A1> -<6559> <6559> -<655A> <655A> <94A3> -<655B> <655B> -<655C> <655C> <94A4> -<655D> <655D> -<655E> <655E> -<655F> <6561> <94A5> -<6562> <6562> -<6563> <6563> -<6564> <6565> <94A8> -<6566> <6566> -<6567> <656A> <94AA> -<656B> <656B> -<656C> <656C> -<656D> <656F> <94AE> -<6570> <6570> -<6571> <6571> <94B1> -<6572> <6572> -<6573> <6573> <94B2> -<6574> <6574> -<6575> <6576> <94B3> -<6577> <6577> -<6578> <6586> <94B5> -<6587> <6587> -<6588> <658A> <94C4> -<658B> <658B> -<658C> <658C> -<658D> <658F> <94C7> -<6590> <6590> -<6591> <6591> -<6592> <6592> <94CA> -<6593> <6593> -<6594> <6596> <94CB> -<6597> <6597> -<6598> <6598> <94CE> -<6599> <6599> -<659A> <659A> <94CF> -<659B> <659B> -<659C> <659C> -<659D> <659E> <94D0> -<659F> <659F> -<65A0> <65A0> <94D2> -<65A1> <65A1> -<65A2> <65A3> <94D3> -<65A4> <65A4> -<65A5> <65A5> -<65A6> <65A6> <94D5> -<65A7> <65A7> -<65A8> <65A8> <94D6> -<65A9> <65A9> -<65AA> <65AA> <94D7> -<65AB> <65AB> -<65AC> <65AC> <94D8> -<65AD> <65AD> -<65AE> <65AE> <94D9> -<65AF> <65AF> -<65B0> <65B0> -<65B1> <65B8> <94DA> -<65B9> <65B9> -<65BA> <65BB> <94E2> -<65BC> <65BC> -<65BD> <65BD> -<65BE> <65C0> <94E4> -<65C1> <65C1> -<65C2> <65C2> <94E7> -<65C3> <65C3> -<65C4> <65C4> -<65C5> <65C5> -<65C6> <65C6> -<65C7> <65CA> <94E8> -<65CB> <65CB> -<65CC> <65CC> -<65CD> <65CD> <94EC> -<65CE> <65CE> -<65CF> <65CF> -<65D0> <65D1> <94ED> -<65D2> <65D2> -<65D3> <65D5> <94EF> -<65D6> <65D6> -<65D7> <65D7> -<65D8> <65DF> <94F2> -<65E0> <65E0> -<65E1> <65E1> <94FA> -<65E2> <65E2> -<65E3> <65E4> <94FB> -<65E5> <65E5> -<65E6> <65E6> -<65E7> <65E7> -<65E8> <65E8> -<65E9> <65E9> -<65EA> <65EB> <94FD> -<65EC> <65EC> -<65ED> <65ED> -<65EE> <65F0> -<65F1> <65F1> -endbfrange - -100 beginbfrange -<65F2> <65F5> <9540> -<65F6> <65F6> -<65F7> <65F7> -<65F8> <65F9> <9544> -<65FA> <65FA> -<65FB> <65FF> <9546> -<6600> <6600> -<6601> <6601> <954B> -<6602> <6602> -<6603> <6603> -<6604> <6605> <954C> -<6606> <6606> -<6607> <6609> <954E> -<660A> <660A> -<660B> <660B> <9551> -<660C> <660C> -<660D> <660D> <9552> -<660E> <660E> -<660F> <660F> -<6610> <6612> <9553> -<6613> <6613> -<6614> <6614> -<6615> <6615> -<6616> <6618> <9556> -<6619> <6619> -<661A> <661C> <9559> -<661D> <661D> -<661E> <661E> <955C> -<661F> <661F> -<6620> <6620> -<6621> <6624> <955D> -<6625> <6625> -<6626> <6626> <9561> -<6627> <6627> -<6628> <6628> -<6629> <662C> <9562> -<662D> <662D> -<662E> <662E> <9566> -<662F> <662F> -<6630> <6630> <9567> -<6631> <6631> -<6632> <6633> <9568> -<6634> <6634> -<6635> <6635> -<6636> <6636> -<6637> <663B> <956A> -<663C> <663C> -<663D> <663D> <956F> -<663E> <663E> -<663F> <6640> <9570> -<6641> <6641> -<6642> <6642> <9572> -<6643> <6643> -<6644> <664A> <9573> -<664B> <664B> -<664C> <664C> -<664D> <664E> <957A> -<664F> <664F> -<6650> <6651> <957C> -<6652> <6652> -<6653> <6653> -<6654> <6654> -<6655> <6655> -<6656> <6656> -<6657> <6657> -<6658> <6658> <957E> -<6659> <6659> <9580> -<665A> <665A> -<665B> <665E> <9581> -<665F> <665F> -<6660> <6660> <9585> -<6661> <6661> -<6662> <6663> <9586> -<6664> <6664> -<6665> <6665> <9588> -<6666> <6666> -<6667> <6667> <9589> -<6668> <6668> -<6669> <666D> <958A> -<666E> <666E> -<666F> <666F> -<6670> <6670> -<6671> <6673> <958F> -<6674> <6674> -<6675> <6675> <9592> -<6676> <6676> -<6677> <6677> -<6678> <6679> <9593> -<667A> <667A> -<667B> <667D> <9595> -<667E> <667E> -<667F> <6681> <9598> -<6682> <6682> -<6683> <6683> <959B> -<6684> <6684> -<6685> <6686> <959C> -<6687> <6687> -<6688> <668B> <959E> -<668C> <668C> -<668D> <6690> <95A2> -endbfrange - -100 beginbfrange -<6691> <6691> -<6692> <6695> <95A6> -<6696> <6696> -<6697> <6697> -<6698> <669C> <95AA> -<669D> <669D> -<669E> <66A6> <95AF> -<66A7> <66A7> -<66A8> <66A8> -<66A9> <66AD> <95B8> -<66AE> <66AE> -<66AF> <66B3> <95BD> -<66B4> <66B4> -<66B5> <66B8> <95C2> -<66B9> <66B9> -<66BA> <66BD> <95C6> -<66BE> <66BE> -<66BF> <66D8> <95CA> -<66D9> <66D9> -<66DA> <66DA> <95E4> -<66DB> <66DC> -<66DD> <66DD> -<66DE> <66E5> <95E5> -<66E6> <66E6> -<66E7> <66E8> <95ED> -<66E9> <66E9> -<66EA> <66EF> <95EF> -<66F0> <66F0> -<66F1> <66F1> <95F5> -<66F2> <66F2> -<66F3> <66F3> -<66F4> <66F4> -<66F5> <66F6> <95F6> -<66F7> <66F7> -<66F8> <66F8> <95F8> -<66F9> <66F9> -<66FA> <66FB> <95F9> -<66FC> <66FC> -<66FD> <66FD> <95FB> -<66FE> <66FE> -<66FF> <66FF> -<6700> <6700> -<6701> <6703> <95FC> -<6704> <6707> <9640> -<6708> <6708> -<6709> <6709> -<670A> <670A> -<670B> <670B> -<670C> <670C> <9644> -<670D> <670D> -<670E> <670F> <9645> -<6710> <6710> -<6711> <6713> <9647> -<6714> <6714> -<6715> <6715> -<6716> <6716> <964A> -<6717> <6717> -<6718> <671A> <964B> -<671B> <671B> -<671C> <671C> <964E> -<671D> <671D> -<671E> <671E> <964F> -<671F> <671F> -<6720> <6725> <9650> -<6726> <6726> -<6727> <6727> <9656> -<6728> <6728> -<6729> <6729> <9657> -<672A> <672A> -<672B> <672B> -<672C> <672C> -<672D> <672D> -<672E> <672E> <9658> -<672F> <672F> -<6730> <6730> <9659> -<6731> <6731> -<6732> <6733> <965A> -<6734> <6734> -<6735> <6735> -<6736> <6739> <965C> -<673A> <673A> -<673B> <673C> <9660> -<673D> <673D> -<673E> <673F> <9662> -<6740> <6740> -<6741> <6741> <9664> -<6742> <6742> -<6743> <6743> -<6744> <6745> <9665> -<6746> <6746> -<6747> <6747> <9667> -<6748> <6748> -<6749> <6749> -<674A> <674B> <9668> -<674C> <674C> -<674D> <674D> <966A> -<674E> <674E> -<674F> <674F> -<6750> <6750> -<6751> <6751> -endbfrange - -100 beginbfrange -<6752> <6752> <966B> -<6753> <6753> -<6754> <6755> <966C> -<6756> <6756> -<6757> <675B> <966E> -<675C> <675C> -<675D> <675D> <9673> -<675E> <675E> -<675F> <675F> -<6760> <6760> -<6761> <6761> -<6762> <6764> <9674> -<6765> <6765> -<6766> <6767> <9677> -<6768> <6768> -<6769> <6769> -<676A> <676A> -<676B> <676C> <9679> -<676D> <676D> -<676E> <676E> <967B> -<676F> <676F> -<6770> <6770> -<6771> <6771> <967C> -<6772> <6772> -<6773> <6773> -<6774> <6774> <967D> -<6775> <6775> -<6776> <6776> <967E> -<6777> <6777> -<6778> <677B> <9680> -<677C> <677C> -<677D> <677D> <9684> -<677E> <677E> -<677F> <677F> -<6780> <6780> <9685> -<6781> <6781> -<6782> <6783> <9686> -<6784> <6784> -<6785> <6786> <9688> -<6787> <6787> -<6788> <6788> <968A> -<6789> <6789> -<678A> <678A> <968B> -<678B> <678B> -<678C> <678F> <968C> -<6790> <6790> -<6791> <6794> <9690> -<6795> <6795> -<6796> <6796> <9694> -<6797> <6797> -<6798> <6798> -<6799> <6799> <9695> -<679A> <679A> -<679B> <679B> <9696> -<679C> <679C> -<679D> <679D> -<679E> <679E> -<679F> <67A1> <9697> -<67A2> <67A2> -<67A3> <67A3> -<67A4> <67A4> <969A> -<67A5> <67A5> -<67A6> <67A6> <969B> -<67A7> <67A7> -<67A8> <67A8> -<67A9> <67A9> <969C> -<67AA> <67AA> -<67AB> <67AB> -<67AC> <67AC> <969D> -<67AD> <67AD> -<67AE> <67AE> <969E> -<67AF> <67AF> -<67B0> <67B0> -<67B1> <67B2> <969F> -<67B3> <67B3> -<67B4> <67B4> <96A1> -<67B5> <67B5> -<67B6> <67B6> -<67B7> <67B7> -<67B8> <67B8> -<67B9> <67C0> <96A2> -<67C1> <67C1> -<67C2> <67C2> <96AA> -<67C3> <67C3> -<67C4> <67C4> -<67C5> <67CE> <96AB> -<67CF> <67CF> -<67D0> <67D0> -<67D1> <67D1> -<67D2> <67D2> -<67D3> <67D3> -<67D4> <67D4> -<67D5> <67D7> <96B5> -<67D8> <67D8> -<67D9> <67D9> -<67DA> <67DA> -<67DB> <67DB> <96B8> -<67DC> <67DC> -<67DD> <67DD> -<67DE> <67DE> -endbfrange - -100 beginbfrange -<67DF> <67DF> <96B9> -<67E0> <67E0> -<67E1> <67E1> <96BA> -<67E2> <67E2> -<67E3> <67E4> <96BB> -<67E5> <67E5> -<67E6> <67E8> <96BD> -<67E9> <67E9> -<67EA> <67EB> <96C0> -<67EC> <67EC> -<67ED> <67EE> <96C2> -<67EF> <67EF> -<67F0> <67F0> -<67F1> <67F1> -<67F2> <67F2> <96C4> -<67F3> <67F3> -<67F4> <67F4> -<67F5> <67FC> <96C5> -<67FD> <67FD> -<67FE> <67FE> <96CD> -<67FF> <67FF> -<6800> <6800> -<6801> <6804> <96CE> -<6805> <6805> -<6806> <6806> <96D2> -<6807> <6807> -<6808> <6808> -<6809> <6809> -<680A> <680A> -<680B> <680B> -<680C> <680C> -<680D> <680D> <96D3> -<680E> <680E> -<680F> <680F> -<6810> <6810> <96D4> -<6811> <6811> -<6812> <6812> <96D5> -<6813> <6813> -<6814> <6815> <96D6> -<6816> <6816> -<6817> <6817> -<6818> <681C> <96D8> -<681D> <681D> -<681E> <6820> <96DD> -<6821> <6821> -<6822> <6828> <96E0> -<6829> <6829> -<682A> <682A> -<682B> <6831> <96E7> -<6832> <6833> -<6834> <6836> <96EE> -<6837> <6837> -<6838> <6838> -<6839> <6839> -<683A> <683B> <96F1> -<683C> <683C> -<683D> <683D> -<683E> <683E> -<683F> <683F> <96F3> -<6840> <6840> -<6841> <6841> -<6842> <6842> -<6843> <6843> -<6844> <6844> -<6845> <6845> -<6846> <6846> -<6847> <6847> <96F4> -<6848> <6848> -<6849> <6849> -<684A> <684A> -<684B> <684B> <96F5> -<684C> <684C> -<684D> <684D> <96F6> -<684E> <684E> -<684F> <684F> <96F7> -<6850> <6850> -<6851> <6851> -<6852> <6852> <96F8> -<6853> <6853> -<6854> <6854> -<6855> <6855> -<6856> <685B> <96F9> -<685C> <685F> <9740> -<6860> <6861> -<6862> <6862> -<6863> <6863> -<6864> <6864> -<6865> <6865> -<6866> <6866> -<6867> <6867> -<6868> <6868> -<6869> <6869> -<686A> <686A> <9744> -<686B> <686B> -<686C> <6873> <9745> -<6874> <6874> -<6875> <6875> <974D> -<6876> <6876> -<6877> <6877> -<6878> <6880> <974E> -endbfrange - -100 beginbfrange -<6881> <6881> -<6882> <6882> <9757> -<6883> <6883> -<6884> <6884> <9758> -<6885> <6885> -<6886> <6886> -<6887> <688E> <9759> -<688F> <688F> -<6890> <6892> <9761> -<6893> <6893> -<6894> <6896> <9764> -<6897> <6897> -<6898> <68A1> <9767> -<68A2> <68A2> -<68A3> <68A5> <9771> -<68A6> <68A6> -<68A7> <68A7> -<68A8> <68A8> -<68A9> <68AC> <9774> -<68AD> <68AD> -<68AE> <68AE> <9778> -<68AF> <68AF> -<68B0> <68B0> -<68B1> <68B2> <9779> -<68B3> <68B3> -<68B4> <68B4> <977B> -<68B5> <68B5> -<68B6> <68B8> <977C> -<68B9> <68BF> <9780> -<68C0> <68C0> -<68C1> <68C1> <9787> -<68C2> <68C2> -<68C3> <68C8> <9788> -<68C9> <68C9> -<68CA> <68CA> <978E> -<68CB> <68CB> -<68CC> <68CC> <978F> -<68CD> <68CD> -<68CE> <68D1> <9790> -<68D2> <68D2> -<68D3> <68D4> <9794> -<68D5> <68D5> -<68D6> <68D7> <9796> -<68D8> <68D8> -<68D9> <68D9> <9798> -<68DA> <68DA> -<68DB> <68DF> <9799> -<68E0> <68E0> -<68E1> <68E2> <979E> -<68E3> <68E3> -<68E4> <68ED> <97A0> -<68EE> <68EE> -<68EF> <68EF> <97AA> -<68F0> <68F0> -<68F1> <68F1> -<68F2> <68F4> <97AB> -<68F5> <68F5> -<68F6> <68F8> <97AE> -<68F9> <68F9> -<68FA> <68FA> -<68FB> <68FB> <97B1> -<68FC> <68FC> -<68FD> <68FF> <97B2> -<6900> <6900> <97B5> -<6901> <6901> -<6902> <6904> <97B6> -<6905> <6905> -<6906> <690A> <97B9> -<690B> <690B> -<690C> <690C> <97BE> -<690D> <690D> -<690E> <690E> -<690F> <690F> <97BF> -<6910> <6910> -<6911> <6911> <97C0> -<6912> <6912> -<6913> <691E> <97C1> -<691F> <6920> -<6921> <6923> <97CD> -<6924> <6924> -<6925> <692C> <97D0> -<692D> <692D> -<692E> <692F> <97D8> -<6930> <6930> -<6931> <6933> <97DA> -<6934> <6934> -<6935> <6938> <97DD> -<6939> <6939> -<693A> <693C> <97E1> -<693D> <693D> -<693E> <693E> <97E4> -<693F> <693F> -<6940> <6941> <97E5> -<6942> <6942> -<6943> <6953> <97E7> -<6954> <6954> -<6955> <6956> <97F8> -<6957> <6957> -<6958> <6959> <97FA> -<695A> <695A> -endbfrange - -100 beginbfrange -<695B> <695C> <97FC> -<695D> <695D> -<695E> <695E> -<695F> <695F> <97FE> -<6960> <6960> -<6961> <6962> <9840> -<6963> <6963> -<6964> <6965> <9842> -<6966> <6966> -<6967> <696A> <9844> -<696B> <696B> -<696C> <696D> <9848> -<696E> <696E> -<696F> <6970> <984A> -<6971> <6971> -<6972> <6976> <984C> -<6977> <6977> -<6978> <6978> -<6979> <6979> -<697A> <697B> <9851> -<697C> <697C> -<697D> <697F> <9853> -<6980> <6980> -<6981> <6981> <9856> -<6982> <6982> -<6983> <6983> <9857> -<6984> <6984> -<6985> <6985> <9858> -<6986> <6986> -<6987> <6988> -<6989> <6989> -<698A> <698C> <9859> -<698D> <698D> -<698E> <6993> <985C> -<6994> <6994> -<6995> <6995> -<6996> <6997> <9862> -<6998> <6998> -<6999> <699A> <9864> -<699B> <699B> -<699C> <699C> -<699D> <69A6> <9866> -<69A7> <69A7> -<69A8> <69A8> -<69A9> <69AA> <9870> -<69AB> <69AB> -<69AC> <69AC> <9872> -<69AD> <69AD> -<69AE> <69B0> <9873> -<69B1> <69B1> -<69B2> <69B3> <9876> -<69B4> <69B4> -<69B5> <69B6> <9878> -<69B7> <69B7> -<69B8> <69BA> <987A> -<69BB> <69BB> -<69BC> <69BD> <987D> -<69BE> <69C0> <9880> -<69C1> <69C1> -<69C2> <69C9> <9883> -<69CA> <69CA> -<69CB> <69CB> <988B> -<69CC> <69CC> -<69CD> <69CD> <988C> -<69CE> <69CE> -<69CF> <69CF> <988D> -<69D0> <69D0> -<69D1> <69D3> <988E> -<69D4> <69D4> -<69D5> <69DA> <9891> -<69DB> <69DB> -<69DC> <69DE> <9897> -<69DF> <69DF> -<69E0> <69E0> -<69E1> <69EC> <989A> -<69ED> <69ED> -<69EE> <69F1> <98A6> -<69F2> <69F2> -<69F3> <69FC> <98AA> -<69FD> <69FD> -<69FE> <69FE> <98B4> -<69FF> <69FF> -<6A00> <6A09> <98B5> -<6A0A> <6A0A> -<6A0B> <6A16> <98BF> -<6A17> <6A18> -<6A19> <6A1E> <98CB> -<6A1F> <6A1F> -<6A20> <6A20> <98D1> -<6A21> <6A21> -<6A22> <6A27> <98D2> -<6A28> <6A28> -<6A29> <6A29> <98D8> -<6A2A> <6A2A> -<6A2B> <6A2E> <98D9> -<6A2F> <6A2F> -<6A30> <6A30> <98DD> -<6A31> <6A31> -<6A32> <6A34> <98DE> -<6A35> <6A35> -endbfrange - -100 beginbfrange -<6A36> <6A3C> <98E1> -<6A3D> <6A3D> -<6A3E> <6A3E> -<6A3F> <6A43> <98E8> -<6A44> <6A44> -<6A45> <6A46> <98ED> -<6A47> <6A47> -<6A48> <6A4F> <98EF> -<6A50> <6A50> -<6A51> <6A57> <98F7> -<6A58> <6A58> -<6A59> <6A59> -<6A5A> <6A5A> <98FE> -<6A5B> <6A5B> -<6A5C> <6A60> <9940> -<6A61> <6A61> -<6A62> <6A64> <9945> -<6A65> <6A65> -<6A66> <6A70> <9948> -<6A71> <6A71> -<6A72> <6A78> <9953> -<6A79> <6A79> -<6A7A> <6A7B> <995A> -<6A7C> <6A7C> -<6A7D> <6A7F> <995C> -<6A80> <6A80> -<6A81> <6A83> <995F> -<6A84> <6A84> -<6A85> <6A8D> <9962> -<6A8E> <6A8E> -<6A8F> <6A8F> <996B> -<6A90> <6A90> -<6A91> <6A91> -<6A92> <6A96> <996C> -<6A97> <6A97> -<6A98> <6A9F> <9971> -<6AA0> <6AA0> -<6AA1> <6AA6> <9979> -<6AA7> <6AA8> <9980> -<6AA9> <6AA9> -<6AAA> <6AAA> <9982> -<6AAB> <6AAB> -<6AAC> <6AAC> -<6AAD> <6AFF> <9983> -<6B00> <6B1F> <99D6> -<6B20> <6B20> -<6B21> <6B21> -<6B22> <6B22> -<6B23> <6B23> -<6B24> <6B24> -<6B25> <6B26> <99F6> -<6B27> <6B27> -<6B28> <6B2E> <99F8> -<6B2F> <6B31> <9A40> -<6B32> <6B32> -<6B33> <6B36> <9A43> -<6B37> <6B37> -<6B38> <6B38> <9A47> -<6B39> <6B39> -<6B3A> <6B3A> -<6B3B> <6B3D> <9A48> -<6B3E> <6B3E> -<6B3F> <6B42> <9A4B> -<6B43> <6B43> -<6B44> <6B45> <9A4F> -<6B46> <6B46> -<6B47> <6B47> -<6B48> <6B48> <9A51> -<6B49> <6B49> -<6B4A> <6B4B> <9A52> -<6B4C> <6B4C> -<6B4D> <6B58> <9A54> -<6B59> <6B59> -<6B5A> <6B61> <9A60> -<6B62> <6B62> -<6B63> <6B63> -<6B64> <6B64> -<6B65> <6B65> -<6B66> <6B66> -<6B67> <6B67> -<6B68> <6B69> <9A68> -<6B6A> <6B6A> -<6B6B> <6B78> <9A6A> -<6B79> <6B79> -<6B7A> <6B7A> <9A78> -<6B7B> <6B7B> -<6B7C> <6B7C> -<6B7D> <6B80> <9A79> -<6B81> <6B82> -<6B83> <6B83> -<6B84> <6B84> -<6B85> <6B85> <9A7D> -<6B86> <6B86> -<6B87> <6B87> -<6B88> <6B88> <9A7E> -<6B89> <6B89> -<6B8A> <6B8A> -<6B8B> <6B8B> -<6B8C> <6B8C> <9A80> -<6B8D> <6B8D> -endbfrange - -100 beginbfrange -<6B8E> <6B91> <9A81> -<6B92> <6B93> -<6B94> <6B95> <9A85> -<6B96> <6B96> -<6B97> <6B99> <9A87> -<6B9A> <6B9B> -<6B9C> <6BA0> <9A8A> -<6BA1> <6BA1> -<6BA2> <6BA9> <9A8F> -<6BAA> <6BAA> -<6BAB> <6BB2> <9A97> -<6BB3> <6BB3> -<6BB4> <6BB4> -<6BB5> <6BB5> -<6BB6> <6BB6> <9A9F> -<6BB7> <6BB7> -<6BB8> <6BBE> <9AA0> -<6BBF> <6BBF> -<6BC0> <6BC0> <9AA7> -<6BC1> <6BC1> -<6BC2> <6BC2> -<6BC3> <6BC4> <9AA8> -<6BC5> <6BC5> -<6BC6> <6BCA> <9AAA> -<6BCB> <6BCB> -<6BCC> <6BCC> <9AAF> -<6BCD> <6BCD> -<6BCE> <6BCE> <9AB0> -<6BCF> <6BCF> -<6BD0> <6BD1> <9AB1> -<6BD2> <6BD2> -<6BD3> <6BD3> -<6BD4> <6BD4> -<6BD5> <6BD5> -<6BD6> <6BD6> -<6BD7> <6BD7> -<6BD8> <6BD8> <9AB3> -<6BD9> <6BD9> -<6BDA> <6BDA> <9AB4> -<6BDB> <6BDB> -<6BDC> <6BE0> <9AB5> -<6BE1> <6BE1> -<6BE2> <6BE9> <9ABA> -<6BEA> <6BEA> -<6BEB> <6BEB> -<6BEC> <6BEE> <9AC2> -<6BEF> <6BEF> -<6BF0> <6BF2> <9AC5> -<6BF3> <6BF3> -<6BF4> <6BF4> <9AC8> -<6BF5> <6BF5> -<6BF6> <6BF8> <9AC9> -<6BF9> <6BF9> -<6BFA> <6BFC> <9ACC> -<6BFD> <6BFD> -<6BFE> <6BFF> <9ACF> -<6C00> <6C04> <9AD1> -<6C05> <6C05> -<6C06> <6C06> -<6C07> <6C07> -<6C08> <6C0C> <9AD6> -<6C0D> <6C0D> -<6C0E> <6C0E> <9ADB> -<6C0F> <6C0F> -<6C10> <6C10> -<6C11> <6C11> -<6C12> <6C12> <9ADC> -<6C13> <6C13> -<6C14> <6C14> -<6C15> <6C15> -<6C16> <6C16> -<6C17> <6C17> <9ADD> -<6C18> <6C1A> -<6C1B> <6C1B> -<6C1C> <6C1E> <9ADE> -<6C1F> <6C1F> -<6C20> <6C20> <9AE1> -<6C21> <6C21> -<6C22> <6C22> -<6C23> <6C23> <9AE2> -<6C24> <6C24> -<6C25> <6C25> <9AE3> -<6C26> <6C26> -<6C27> <6C27> -<6C28> <6C28> -<6C29> <6C29> -<6C2A> <6C2A> -<6C2B> <6C2D> <9AE4> -<6C2E> <6C2E> -<6C2F> <6C2F> -<6C30> <6C30> -<6C31> <6C31> <9AE7> -<6C32> <6C32> -<6C33> <6C33> <9AE8> -<6C34> <6C34> -<6C35> <6C35> -<6C36> <6C37> <9AE9> -<6C38> <6C38> -<6C39> <6C3C> <9AEB> -<6C3D> <6C3D> -endbfrange - -100 beginbfrange -<6C3E> <6C3F> <9AEF> -<6C40> <6C40> -<6C41> <6C41> -<6C42> <6C42> -<6C43> <6C45> <9AF1> -<6C46> <6C46> -<6C47> <6C47> -<6C48> <6C48> <9AF4> -<6C49> <6C49> -<6C4A> <6C4A> -<6C4B> <6C4F> <9AF5> -<6C50> <6C50> -<6C51> <6C53> <9AFA> -<6C54> <6C54> -<6C55> <6C55> -<6C56> <6C56> <9AFD> -<6C57> <6C57> -<6C58> <6C58> <9AFE> -<6C59> <6C5A> <9B40> -<6C5B> <6C5B> -<6C5C> <6C5C> -<6C5D> <6C5D> -<6C5E> <6C5E> -<6C5F> <6C5F> -<6C60> <6C60> -<6C61> <6C61> -<6C62> <6C63> <9B42> -<6C64> <6C64> -<6C65> <6C67> <9B44> -<6C68> <6C69> -<6C6A> <6C6A> -<6C6B> <6C6F> <9B47> -<6C70> <6C70> -<6C71> <6C71> <9B4C> -<6C72> <6C72> -<6C73> <6C73> <9B4D> -<6C74> <6C74> -<6C75> <6C75> <9B4E> -<6C76> <6C76> -<6C77> <6C78> <9B4F> -<6C79> <6C79> -<6C7A> <6C7C> <9B51> -<6C7D> <6C7D> -<6C7E> <6C7E> -<6C7F> <6C80> <9B54> -<6C81> <6C81> -<6C82> <6C82> -<6C83> <6C83> -<6C84> <6C84> <9B56> -<6C85> <6C85> -<6C86> <6C86> -<6C87> <6C87> <9B57> -<6C88> <6C88> -<6C89> <6C89> -<6C8A> <6C8B> <9B58> -<6C8C> <6C8C> -<6C8D> <6C8E> <9B5A> -<6C8F> <6C8F> -<6C90> <6C90> -<6C91> <6C92> <9B5C> -<6C93> <6C93> -<6C94> <6C94> -<6C95> <6C98> <9B5E> -<6C99> <6C99> -<6C9A> <6C9A> <9B62> -<6C9B> <6C9B> -<6C9C> <6C9E> <9B63> -<6C9F> <6C9F> -<6CA0> <6CA0> <9B66> -<6CA1> <6CA1> -<6CA2> <6CA2> <9B67> -<6CA3> <6CA3> -<6CA4> <6CA4> -<6CA5> <6CA5> -<6CA6> <6CA6> -<6CA7> <6CA7> -<6CA8> <6CA8> <9B68> -<6CA9> <6CA9> -<6CAA> <6CAA> -<6CAB> <6CAB> -<6CAC> <6CAC> <9B69> -<6CAD> <6CAD> -<6CAE> <6CAE> -<6CAF> <6CB0> <9B6A> -<6CB1> <6CB1> -<6CB2> <6CB2> -<6CB3> <6CB3> -<6CB4> <6CB7> <9B6C> -<6CB8> <6CB8> -<6CB9> <6CB9> -<6CBA> <6CBA> <9B70> -<6CBB> <6CBB> -<6CBC> <6CBC> -<6CBD> <6CBD> -<6CBE> <6CBE> -<6CBF> <6CBF> -<6CC0> <6CC3> <9B71> -<6CC4> <6CC4> -<6CC5> <6CC5> -<6CC6> <6CC8> <9B75> -endbfrange - -100 beginbfrange -<6CC9> <6CC9> -<6CCA> <6CCA> -<6CCB> <6CCB> <9B78> -<6CCC> <6CCC> -<6CCD> <6CCF> <9B79> -<6CD0> <6CD0> -<6CD1> <6CD2> <9B7C> -<6CD3> <6CD3> -<6CD4> <6CD4> -<6CD5> <6CD5> -<6CD6> <6CD6> -<6CD7> <6CD7> -<6CD8> <6CD8> <9B7E> -<6CD9> <6CDA> <9B80> -<6CDB> <6CDB> -<6CDC> <6CDD> <9B82> -<6CDE> <6CDE> -<6CDF> <6CDF> <9B84> -<6CE0> <6CE0> -<6CE1> <6CE1> -<6CE2> <6CE2> -<6CE3> <6CE3> -<6CE4> <6CE4> <9B85> -<6CE5> <6CE5> -<6CE6> <6CE7> <9B86> -<6CE8> <6CE8> -<6CE9> <6CE9> <9B88> -<6CEA> <6CEA> -<6CEB> <6CEB> -<6CEC> <6CED> <9B89> -<6CEE> <6CEE> -<6CEF> <6CEF> -<6CF0> <6CF0> -<6CF1> <6CF1> -<6CF2> <6CF2> <9B8B> -<6CF3> <6CF3> -<6CF4> <6CF4> <9B8C> -<6CF5> <6CF5> -<6CF6> <6CF6> -<6CF7> <6CF8> -<6CF9> <6CF9> <9B8D> -<6CFA> <6CFA> -<6CFB> <6CFB> -<6CFC> <6CFC> -<6CFD> <6CFD> -<6CFE> <6CFE> -<6CFF> <6CFF> <9B8E> -<6D00> <6D00> <9B8F> -<6D01> <6D01> -<6D02> <6D03> <9B90> -<6D04> <6D04> -<6D05> <6D06> <9B92> -<6D07> <6D07> -<6D08> <6D0A> <9B94> -<6D0B> <6D0B> -<6D0C> <6D0C> -<6D0D> <6D0D> <9B97> -<6D0E> <6D0E> -<6D0F> <6D11> <9B98> -<6D12> <6D12> -<6D13> <6D16> <9B9B> -<6D17> <6D17> -<6D18> <6D18> <9B9F> -<6D19> <6D19> -<6D1A> <6D1A> -<6D1B> <6D1B> -<6D1C> <6D1D> <9BA0> -<6D1E> <6D1E> -<6D1F> <6D24> <9BA2> -<6D25> <6D25> -<6D26> <6D26> <9BA8> -<6D27> <6D27> -<6D28> <6D29> <9BA9> -<6D2A> <6D2A> -<6D2B> <6D2B> -<6D2C> <6D2D> <9BAB> -<6D2E> <6D2E> -<6D2F> <6D30> <9BAD> -<6D31> <6D31> -<6D32> <6D32> -<6D33> <6D33> -<6D34> <6D34> <9BAF> -<6D35> <6D35> -<6D36> <6D38> <9BB0> -<6D39> <6D39> -<6D3A> <6D3A> <9BB3> -<6D3B> <6D3B> -<6D3C> <6D3C> -<6D3D> <6D3D> -<6D3E> <6D3E> -<6D3F> <6D40> <9BB4> -<6D41> <6D41> -<6D42> <6D42> <9BB6> -<6D43> <6D43> -<6D44> <6D44> <9BB7> -<6D45> <6D45> -<6D46> <6D46> -<6D47> <6D47> -<6D48> <6D48> -<6D49> <6D49> <9BB8> -endbfrange - -100 beginbfrange -<6D4A> <6D4A> -<6D4B> <6D4B> -<6D4C> <6D4C> <9BB9> -<6D4D> <6D4D> -<6D4E> <6D4E> -<6D4F> <6D4F> -<6D50> <6D50> <9BBA> -<6D51> <6D51> -<6D52> <6D52> -<6D53> <6D53> -<6D54> <6D54> -<6D55> <6D58> <9BBB> -<6D59> <6D59> -<6D5A> <6D5A> -<6D5B> <6D5B> <9BBF> -<6D5C> <6D5C> -<6D5D> <6D5D> <9BC0> -<6D5E> <6D5E> -<6D5F> <6D5F> <9BC1> -<6D60> <6D60> -<6D61> <6D62> <9BC2> -<6D63> <6D63> -<6D64> <6D65> <9BC4> -<6D66> <6D66> -<6D67> <6D68> <9BC6> -<6D69> <6D69> -<6D6A> <6D6A> -<6D6B> <6D6D> <9BC8> -<6D6E> <6D6E> -<6D6F> <6D6F> -<6D70> <6D73> <9BCB> -<6D74> <6D74> -<6D75> <6D76> <9BCF> -<6D77> <6D77> -<6D78> <6D78> -<6D79> <6D7B> <9BD1> -<6D7C> <6D7C> -<6D7D> <6D81> <9BD4> -<6D82> <6D82> -<6D83> <6D84> <9BD9> -<6D85> <6D85> -<6D86> <6D87> <9BDB> -<6D88> <6D88> -<6D89> <6D89> -<6D8A> <6D8B> <9BDD> -<6D8C> <6D8C> -<6D8D> <6D8D> <9BDF> -<6D8E> <6D8E> -<6D8F> <6D90> <9BE0> -<6D91> <6D91> -<6D92> <6D92> <9BE2> -<6D93> <6D94> -<6D95> <6D95> -<6D96> <6D9A> <9BE3> -<6D9B> <6D9B> -<6D9C> <6D9C> <9BE8> -<6D9D> <6D9D> -<6D9E> <6D9E> -<6D9F> <6D9F> -<6DA0> <6DA0> -<6DA1> <6DA1> -<6DA2> <6DA2> <9BE9> -<6DA3> <6DA3> -<6DA4> <6DA4> -<6DA5> <6DA5> <9BEA> -<6DA6> <6DA6> -<6DA7> <6DA7> -<6DA8> <6DA8> -<6DA9> <6DA9> -<6DAA> <6DAA> -<6DAB> <6DAB> -<6DAC> <6DAD> <9BEB> -<6DAE> <6DAE> -<6DAF> <6DAF> -<6DB0> <6DB1> <9BED> -<6DB2> <6DB2> -<6DB3> <6DB4> <9BEF> -<6DB5> <6DB5> -<6DB6> <6DB7> <9BF1> -<6DB8> <6DB8> -<6DB9> <6DBE> <9BF3> -<6DBF> <6DBF> -<6DC0> <6DC0> -<6DC1> <6DC3> <9BF9> -<6DC4> <6DC4> -<6DC5> <6DC5> -<6DC6> <6DC6> -<6DC7> <6DC7> -<6DC8> <6DCA> <9BFC> -<6DCB> <6DCB> -<6DCC> <6DCC> -<6DCD> <6DD0> <9C40> -<6DD1> <6DD1> -<6DD2> <6DD5> <9C44> -<6DD6> <6DD6> -<6DD7> <6DD7> <9C48> -<6DD8> <6DD8> -<6DD9> <6DD9> -<6DDA> <6DDC> <9C49> -<6DDD> <6DDD> -endbfrange - -100 beginbfrange -<6DDE> <6DDE> -<6DDF> <6DDF> <9C4C> -<6DE0> <6DE0> -<6DE1> <6DE1> -<6DE2> <6DE3> <9C4D> -<6DE4> <6DE4> -<6DE5> <6DE5> <9C4F> -<6DE6> <6DE6> -<6DE7> <6DEA> <9C50> -<6DEB> <6DEB> -<6DEC> <6DEC> -<6DED> <6DED> <9C54> -<6DEE> <6DEE> -<6DEF> <6DF0> <9C55> -<6DF1> <6DF1> -<6DF2> <6DF2> <9C57> -<6DF3> <6DF3> -<6DF4> <6DF6> <9C58> -<6DF7> <6DF7> -<6DF8> <6DF8> <9C5B> -<6DF9> <6DF9> -<6DFA> <6DFA> <9C5C> -<6DFB> <6DFB> -<6DFC> <6DFC> -<6DFD> <6DFF> <9C5D> -<6E00> <6E04> <9C60> -<6E05> <6E05> -<6E06> <6E09> <9C65> -<6E0A> <6E0A> -<6E0B> <6E0B> <9C69> -<6E0C> <6E0C> -<6E0D> <6E0D> -<6E0E> <6E0E> -<6E0F> <6E0F> <9C6A> -<6E10> <6E10> -<6E11> <6E11> -<6E12> <6E13> <9C6B> -<6E14> <6E14> -<6E15> <6E15> <9C6D> -<6E16> <6E16> -<6E17> <6E17> -<6E18> <6E19> <9C6E> -<6E1A> <6E1A> -<6E1B> <6E1C> <9C70> -<6E1D> <6E1D> -<6E1E> <6E1F> <9C72> -<6E20> <6E20> -<6E21> <6E21> -<6E22> <6E22> <9C74> -<6E23> <6E23> -<6E24> <6E24> -<6E25> <6E25> -<6E26> <6E28> <9C75> -<6E29> <6E29> -<6E2A> <6E2A> <9C78> -<6E2B> <6E2B> -<6E2C> <6E2C> <9C79> -<6E2D> <6E2D> -<6E2E> <6E2E> <9C7A> -<6E2F> <6E2F> -<6E30> <6E31> <9C7B> -<6E32> <6E32> -<6E33> <6E33> <9C7D> -<6E34> <6E34> -<6E35> <6E35> <9C7E> -<6E36> <6E37> <9C80> -<6E38> <6E38> -<6E39> <6E39> <9C82> -<6E3A> <6E3A> -<6E3B> <6E42> <9C83> -<6E43> <6E43> -<6E44> <6E44> -<6E45> <6E4C> <9C8B> -<6E4D> <6E4D> -<6E4E> <6E4E> -<6E4F> <6E52> <9C93> -<6E53> <6E54> -<6E55> <6E55> <9C97> -<6E56> <6E56> -<6E57> <6E57> <9C98> -<6E58> <6E58> -<6E59> <6E5A> <9C99> -<6E5B> <6E5B> -<6E5C> <6E5E> <9C9B> -<6E5F> <6E5F> -<6E60> <6E6A> <9C9E> -<6E6B> <6E6B> -<6E6C> <6E6D> <9CA9> -<6E6E> <6E6E> -<6E6F> <6E7D> <9CAB> -<6E7E> <6E7E> -<6E7F> <6E7F> -<6E80> <6E82> <9CBA> -<6E83> <6E83> -<6E84> <6E84> <9CBD> -<6E85> <6E85> -<6E86> <6E86> -<6E87> <6E88> <9CBE> -<6E89> <6E89> -<6E8A> <6E8E> <9CC0> -endbfrange - -100 beginbfrange -<6E8F> <6E8F> -<6E90> <6E90> -<6E91> <6E97> <9CC5> -<6E98> <6E98> -<6E99> <6E9B> <9CCC> -<6E9C> <6E9C> -<6E9D> <6E9E> <9CCF> -<6E9F> <6E9F> -<6EA0> <6EA1> <9CD1> -<6EA2> <6EA2> -<6EA3> <6EA4> <9CD3> -<6EA5> <6EA5> -<6EA6> <6EA6> <9CD5> -<6EA7> <6EA7> -<6EA8> <6EA9> <9CD6> -<6EAA> <6EAA> -<6EAB> <6EAE> <9CD8> -<6EAF> <6EAF> -<6EB0> <6EB0> <9CDC> -<6EB1> <6EB1> -<6EB2> <6EB2> -<6EB3> <6EB3> <9CDD> -<6EB4> <6EB4> -<6EB5> <6EB5> <9CDE> -<6EB6> <6EB6> -<6EB7> <6EB7> -<6EB8> <6EB9> <9CDF> -<6EBA> <6EBA> -<6EBB> <6EBB> -<6EBC> <6EBC> <9CE1> -<6EBD> <6EBD> -<6EBE> <6EC0> <9CE2> -<6EC1> <6EC1> -<6EC2> <6EC2> -<6EC3> <6EC6> <9CE5> -<6EC7> <6EC7> -<6EC8> <6ECA> <9CE9> -<6ECB> <6ECB> -<6ECC> <6ECE> <9CEC> -<6ECF> <6ECF> -<6ED0> <6ED0> <9CEF> -<6ED1> <6ED1> -<6ED2> <6ED2> <9CF0> -<6ED3> <6ED3> -<6ED4> <6ED4> -<6ED5> <6ED5> -<6ED6> <6ED6> <9CF1> -<6ED7> <6ED7> -<6ED8> <6ED9> <9CF2> -<6EDA> <6EDA> -<6EDB> <6EDD> <9CF4> -<6EDE> <6EDE> -<6EDF> <6EDF> -<6EE0> <6EE0> -<6EE1> <6EE1> -<6EE2> <6EE2> -<6EE3> <6EE3> <9CF7> -<6EE4> <6EE4> -<6EE5> <6EE5> -<6EE6> <6EE6> -<6EE7> <6EE7> <9CF8> -<6EE8> <6EE8> -<6EE9> <6EE9> -<6EEA> <6EEF> <9CF9> -<6EF0> <6EF3> <9D40> -<6EF4> <6EF4> -<6EF5> <6EF8> <9D44> -<6EF9> <6EF9> -<6EFA> <6EFF> <9D48> -<6F00> <6F01> <9D4E> -<6F02> <6F02> -<6F03> <6F05> <9D50> -<6F06> <6F06> -<6F07> <6F08> <9D53> -<6F09> <6F09> -<6F0A> <6F0E> <9D55> -<6F0F> <6F0F> -<6F10> <6F12> <9D5A> -<6F13> <6F13> -<6F14> <6F14> -<6F15> <6F15> -<6F16> <6F1F> <9D5D> -<6F20> <6F20> -<6F21> <6F23> <9D67> -<6F24> <6F24> -<6F25> <6F28> <9D6A> -<6F29> <6F29> -<6F2A> <6F2A> -<6F2B> <6F2B> -<6F2C> <6F2C> <9D6E> -<6F2D> <6F2D> -<6F2E> <6F2E> <9D6F> -<6F2F> <6F2F> -<6F30> <6F30> <9D70> -<6F31> <6F31> -<6F32> <6F32> <9D71> -<6F33> <6F33> -<6F34> <6F35> <9D72> -<6F36> <6F36> -<6F37> <6F3D> <9D74> -endbfrange - -100 beginbfrange -<6F3E> <6F3E> -<6F3F> <6F42> <9D7B> -<6F43> <6F45> <9D80> -<6F46> <6F47> -<6F48> <6F4A> <9D83> -<6F4B> <6F4B> -<6F4C> <6F4C> <9D86> -<6F4D> <6F4D> -<6F4E> <6F57> <9D87> -<6F58> <6F58> -<6F59> <6F5B> <9D91> -<6F5C> <6F5C> -<6F5D> <6F5D> <9D94> -<6F5E> <6F5E> -<6F5F> <6F61> <9D95> -<6F62> <6F62> -<6F63> <6F65> <9D98> -<6F66> <6F66> -<6F67> <6F6C> <9D9B> -<6F6D> <6F6D> -<6F6E> <6F6E> -<6F6F> <6F71> <9DA1> -<6F72> <6F72> -<6F73> <6F73> <9DA4> -<6F74> <6F74> -<6F75> <6F77> <9DA5> -<6F78> <6F78> -<6F79> <6F79> <9DA8> -<6F7A> <6F7A> -<6F7B> <6F7B> <9DA9> -<6F7C> <6F7C> -<6F7D> <6F83> <9DAA> -<6F84> <6F84> -<6F85> <6F87> <9DB1> -<6F88> <6F88> -<6F89> <6F89> -<6F8A> <6F8B> <9DB4> -<6F8C> <6F8C> -<6F8D> <6F8D> -<6F8E> <6F8E> -<6F8F> <6F9B> <9DB6> -<6F9C> <6F9C> -<6F9D> <6FA0> <9DC3> -<6FA1> <6FA1> -<6FA2> <6FA6> <9DC7> -<6FA7> <6FA7> -<6FA8> <6FB2> <9DCC> -<6FB3> <6FB3> -<6FB4> <6FB5> <9DD7> -<6FB6> <6FB6> -<6FB7> <6FB8> <9DD9> -<6FB9> <6FB9> -<6FBA> <6FBF> <9DDB> -<6FC0> <6FC0> -<6FC1> <6FC1> <9DE1> -<6FC2> <6FC2> -<6FC3> <6FC8> <9DE2> -<6FC9> <6FC9> -<6FCA> <6FD0> <9DE8> -<6FD1> <6FD1> -<6FD2> <6FD2> -<6FD3> <6FDD> <9DEF> -<6FDE> <6FDE> -<6FDF> <6FDF> <9DFA> -<6FE0> <6FE0> -<6FE1> <6FE1> -<6FE2> <6FE5> <9DFB> -<6FE6> <6FED> <9E40> -<6FEE> <6FEE> -<6FEF> <6FEF> -<6FF0> <6FFF> <9E48> -<7000> <7010> <9E58> -<7011> <7011> -<7012> <7019> <9E69> -<701A> <701A> -<701B> <701B> -<701C> <7022> <9E71> -<7023> <7023> -<7024> <702A> <9E78> -<702B> <7034> <9E80> -<7035> <7035> -<7036> <7038> <9E8A> -<7039> <7039> -<703A> <704B> <9E8D> -<704C> <704C> -<704D> <704E> <9E9F> -<704F> <704F> -<7050> <705D> <9EA1> -<705E> <705E> -<705F> <706A> <9EAF> -<706B> <706B> -<706C> <706C> -<706D> <706D> -<706E> <706E> <9EBB> -<706F> <706F> -<7070> <7070> -<7071> <7074> <9EBC> -<7075> <7075> -<7076> <7076> -<7077> <7077> <9EC0> -endbfrange - -100 beginbfrange -<7078> <7078> -<7079> <707B> <9EC1> -<707C> <707C> -<707D> <707D> <9EC4> -<707E> <707E> -<707F> <707F> -<7080> <7080> -<7081> <7084> <9EC5> -<7085> <7085> -<7086> <7088> <9EC9> -<7089> <7089> -<708A> <708A> -<708B> <708D> <9ECC> -<708E> <708E> -<708F> <7091> <9ECF> -<7092> <7092> -<7093> <7093> <9ED2> -<7094> <7094> -<7095> <7095> -<7096> <7096> -<7097> <7098> <9ED3> -<7099> <7099> -<709A> <709B> <9ED5> -<709C> <709C> -<709D> <709D> -<709E> <70AA> <9ED7> -<70AB> <70AB> -<70AC> <70AC> -<70AD> <70AD> -<70AE> <70AE> -<70AF> <70AF> -<70B0> <70B0> <9EE4> -<70B1> <70B1> -<70B2> <70B2> <9EE5> -<70B3> <70B3> -<70B4> <70B6> <9EE6> -<70B7> <70B7> -<70B8> <70B8> -<70B9> <70B9> -<70BA> <70BA> <9EE9> -<70BB> <70BB> -<70BC> <70BC> -<70BD> <70BD> -<70BE> <70BF> <9EEA> -<70C0> <70C0> -<70C1> <70C1> -<70C2> <70C2> -<70C3> <70C3> -<70C4> <70C7> <9EEC> -<70C8> <70C8> -<70C9> <70C9> <9EF0> -<70CA> <70CA> -<70CB> <70D7> <9EF1> -<70D8> <70D8> -<70D9> <70D9> -<70DA> <70DA> <9EFE> -<70DB> <70DB> -<70DC> <70DE> <9F40> -<70DF> <70DF> -<70E0> <70E3> <9F43> -<70E4> <70E4> -<70E5> <70E5> <9F47> -<70E6> <70E6> -<70E7> <70E7> -<70E8> <70E8> -<70E9> <70E9> -<70EA> <70EA> <9F48> -<70EB> <70EB> -<70EC> <70EC> -<70ED> <70ED> -<70EE> <70EE> <9F49> -<70EF> <70EF> -<70F0> <70F6> <9F4A> -<70F7> <70F7> -<70F8> <70F8> <9F51> -<70F9> <70F9> -<70FA> <70FC> <9F52> -<70FD> <70FD> -<70FE> <70FF> <9F55> -<7100> <7108> <9F57> -<7109> <7109> -<710A> <710A> -<710B> <710F> <9F60> -<7110> <7110> -<7111> <7112> <9F65> -<7113> <7113> -<7114> <7114> <9F67> -<7115> <7115> -<7116> <7116> -<7117> <7117> <9F68> -<7118> <7118> -<7119> <7119> -<711A> <711A> -<711B> <7125> <9F69> -<7126> <7126> -<7127> <712E> <9F74> -<712F> <712F> -<7130> <7130> -<7131> <7131> -<7132> <7134> <9F7C> -endbfrange - -100 beginbfrange -<7135> <7135> <9F80> -<7136> <7136> -<7137> <7144> <9F81> -<7145> <7145> -<7146> <7149> <9F8F> -<714A> <714A> -<714B> <714B> <9F93> -<714C> <714C> -<714D> <714D> <9F94> -<714E> <714E> -<714F> <715B> <9F95> -<715C> <715C> -<715D> <715D> <9FA2> -<715E> <715E> -<715F> <7163> <9FA3> -<7164> <7164> -<7165> <7165> <9FA8> -<7166> <7166> -<7167> <7167> -<7168> <7168> -<7169> <716D> <9FA9> -<716E> <716E> -<716F> <7171> <9FAE> -<7172> <7172> -<7173> <7173> -<7174> <7177> <9FB1> -<7178> <7178> -<7179> <7179> <9FB5> -<717A> <717A> -<717B> <717C> <9FB6> -<717D> <717D> -<717E> <7183> <9FB8> -<7184> <7184> -<7185> <7189> <9FBE> -<718A> <718A> -<718B> <718E> <9FC3> -<718F> <718F> -<7190> <7193> <9FC7> -<7194> <7194> -<7195> <7197> <9FCB> -<7198> <7198> -<7199> <7199> -<719A> <719E> <9FCE> -<719F> <719F> -<71A0> <71A0> -<71A1> <71A7> <9FD3> -<71A8> <71A8> -<71A9> <71AB> <9FDA> -<71AC> <71AC> -<71AD> <71B2> <9FDD> -<71B3> <71B3> -<71B4> <71B4> <9FE3> -<71B5> <71B5> -<71B6> <71B8> <9FE4> -<71B9> <71B9> -<71BA> <71C2> <9FE7> -<71C3> <71C3> -<71C4> <71CD> <9FF0> -<71CE> <71CE> -<71CF> <71D3> <9FFA> -<71D4> <71D4> -<71D5> <71D5> -<71D6> <71DF> -<71E0> <71E0> -<71E1> <71E4> -<71E5> <71E5> -<71E6> <71E6> -<71E7> <71E7> -<71E8> <71ED> -<71EE> <71EE> -<71EF> <71F8> -<71F9> <71F9> -<71FA> <71FF> -<7200> <7205> -<7206> <7206> -<7207> <721A> -<721B> <721C> -<721D> <721D> -<721E> <7227> -<7228> <7228> -<7229> <7229> -<722A> <722A> -<722B> <722B> -<722C> <722C> -<722D> <722F> -<7230> <7230> -<7231> <7231> -<7232> <7234> -<7235> <7235> -<7236> <7236> -<7237> <7237> -<7238> <7238> -<7239> <7239> -<723A> <723A> -<723B> <723B> -<723C> <723C> -<723D> <723D> -<723E> <723E> -<723F> <723F> -<7240> <7246> -endbfrange - -100 beginbfrange -<7247> <7247> -<7248> <7248> -<7249> <724B> -<724C> <724C> -<724D> <724D> -<724E> <7251> -<7252> <7252> -<7253> <7255> -<7256> <7256> -<7257> <7258> -<7259> <7259> -<725A> <725A> -<725B> <725B> -<725C> <725C> -<725D> <725D> -<725E> <725E> -<725F> <725F> -<7260> <7260> -<7261> <7261> -<7262> <7262> -<7263> <7265> -<7266> <7266> -<7267> <7267> -<7268> <7268> -<7269> <7269> -<726A> <726D> -<726E> <726E> -<726F> <726F> -<7270> <7271> -<7272> <7272> -<7273> <7274> -<7275> <7275> -<7276> <7278> -<7279> <7279> -<727A> <727A> -<727B> <727D> -<727E> <727F> -<7280> <7280> -<7281> <7281> -<7282> <7283> -<7284> <7284> -<7285> <7289> -<728A> <728A> -<728B> <728B> -<728C> <728C> -<728D> <728D> -<728E> <728E> -<728F> <728F> -<7290> <7291> -<7292> <7292> -<7293> <729E> -<729F> <729F> -<72A0> <72AB> -<72AC> <72AC> -<72AD> <72AD> -<72AE> <72AE> -<72AF> <72AF> -<72B0> <72B0> -<72B1> <72B3> -<72B4> <72B4> -<72B5> <72B5> -<72B6> <72B6> -<72B7> <72B8> -<72B9> <72B9> -<72BA> <72C0> -<72C1> <72C1> -<72C2> <72C2> -<72C3> <72C3> -<72C4> <72C4> -<72C5> <72C7> -<72C8> <72C8> -<72C9> <72CC> -<72CD> <72CD> -<72CE> <72CE> -<72CF> <72CF> -<72D0> <72D0> -<72D1> <72D1> -<72D2> <72D2> -<72D3> <72D6> -<72D7> <72D7> -<72D8> <72D8> -<72D9> <72D9> -<72DA> <72DB> -<72DC> <72DD> -<72DE> <72DE> -<72DF> <72DF> -<72E0> <72E0> -<72E1> <72E1> -<72E2> <72E7> -<72E8> <72E8> -<72E9> <72E9> -<72EA> <72EB> -<72EC> <72EC> -<72ED> <72ED> -<72EE> <72EE> -<72EF> <72EF> -<72F0> <72F0> -<72F1> <72F1> -<72F2> <72F2> -<72F3> <72F3> -endbfrange - -100 beginbfrange -<72F4> <72F4> -<72F5> <72F6> -<72F7> <72F7> -<72F8> <72F8> -<72F9> <72F9> -<72FA> <72FA> -<72FB> <72FB> -<72FC> <72FC> -<72FD> <72FF> -<7300> <7300> -<7301> <7301> -<7302> <7302> -<7303> <7303> -<7304> <7309> -<730A> <730A> -<730B> <730D> -<730E> <730E> -<730F> <7312> -<7313> <7313> -<7314> <7314> -<7315> <7315> -<7316> <7316> -<7317> <7317> -<7318> <731A> -<731B> <731B> -<731C> <731C> -<731D> <731D> -<731E> <731E> -<731F> <7320> -<7321> <7321> -<7322> <7322> -<7323> <7324> -<7325> <7325> -<7326> <7328> -<7329> <7329> -<732A> <732A> -<732B> <732B> -<732C> <732C> -<732D> <732D> -<732E> <732E> -<732F> <7330> -<7331> <7331> -<7332> <7333> -<7334> <7334> -<7335> <7336> -<7337> <7337> -<7338> <7338> -<7339> <7339> -<733A> <733D> -<733E> <733E> -<733F> <733F> -<7340> <7348> -<7349> <734C> -<734D> <734D> -<734E> <734F> -<7350> <7350> -<7351> <7351> -<7352> <7352> -<7353> <7356> -<7357> <7357> -<7358> <735F> -<7360> <7360> -<7361> <736B> -<736C> <736C> -<736D> <736D> -<736E> <736E> -<736F> <736F> -<7370> <7371> -<7372> <737D> -<737E> <737E> -<737F> <7383> -<7384> <7384> -<7385> <7386> -<7387> <7387> -<7388> <7388> -<7389> <7389> -<738A> <738A> -<738B> <738B> -<738C> <738D> -<738E> <738E> -<738F> <7390> -<7391> <7391> -<7392> <7395> -<7396> <7396> -<7397> <739A> -<739B> <739B> -<739C> <739E> -<739F> <739F> -<73A0> <73A1> -<73A2> <73A2> -<73A3> <73A8> -<73A9> <73A9> -<73AA> <73AA> -<73AB> <73AB> -<73AC> <73AD> -<73AE> <73AE> -<73AF> <73AF> -<73B0> <73B0> -<73B1> <73B1> -<73B2> <73B2> -endbfrange - -100 beginbfrange -<73B3> <73B3> -<73B4> <73B6> -<73B7> <73B7> -<73B8> <73B9> -<73BA> <73BA> -<73BB> <73BB> -<73BC> <73BF> -<73C0> <73C0> -<73C1> <73C1> -<73C2> <73C2> -<73C3> <73C7> -<73C8> <73C8> -<73C9> <73C9> -<73CA> <73CA> -<73CB> <73CC> -<73CD> <73CD> -<73CE> <73CE> -<73CF> <73CF> -<73D0> <73D0> -<73D1> <73D1> -<73D2> <73D8> -<73D9> <73D9> -<73DA> <73DD> -<73DE> <73DE> -<73DF> <73DF> -<73E0> <73E0> -<73E1> <73E4> -<73E5> <73E5> -<73E6> <73E6> -<73E7> <73E7> -<73E8> <73E8> -<73E9> <73E9> -<73EA> <73EC> -<73ED> <73ED> -<73EE> <73F1> -<73F2> <73F2> -<73F3> <73F7> -<73F8> <73FF> -<7400> <7402> -<7403> <7403> -<7404> <7404> -<7405> <7405> -<7406> <7406> -<7407> <7408> -<7409> <7409> -<740A> <740A> -<740B> <740E> -<740F> <740F> -<7410> <7410> -<7411> <7419> -<741A> <741A> -<741B> <741B> -<741C> <7421> -<7422> <7422> -<7423> <7424> -<7425> <7425> -<7426> <7426> -<7427> <7427> -<7428> <7428> -<7429> <7429> -<742A> <742A> -<742B> <742B> -<742C> <742C> -<742D> <742D> -<742E> <742E> -<742F> <742F> -<7430> <7430> -<7431> <7432> -<7433> <7433> -<7434> <7434> -<7435> <7435> -<7436> <7436> -<7437> <743B> -<743C> <743C> -<743D> <7440> -<7441> <7441> -<7442> <744D> -<744E> <7454> -<7455> <7455> -<7456> <7456> -<7457> <7457> -<7458> <7458> -<7459> <7459> -<745A> <745A> -<745B> <745B> -<745C> <745C> -<745D> <745D> -<745E> <745E> -<745F> <745F> -<7460> <746C> -<746D> <746D> -<746E> <746F> -<7470> <7470> -<7471> <7475> -<7476> <7476> -<7477> <7477> -<7478> <747A> -<747B> <747D> -<747E> <747E> -<747F> <747F> -endbfrange - -100 beginbfrange -<7480> <7481> -<7482> <7482> -<7483> <7483> -<7484> <7486> -<7487> <7487> -<7488> <748A> -<748B> <748B> -<748C> <748D> -<748E> <748E> -<748F> <748F> -<7490> <7490> -<7491> <749B> -<749C> <749C> -<749D> <749D> -<749E> <749E> -<749F> <74A6> -<74A7> <74A7> -<74A8> <74A9> -<74AA> <74B9> -<74BA> <74BA> -<74BB> <74C7> -<74C8> <74D1> -<74D2> <74D2> -<74D3> <74DB> -<74DC> <74DC> -<74DD> <74DD> -<74DE> <74DE> -<74DF> <74DF> -<74E0> <74E0> -<74E1> <74E1> -<74E2> <74E2> -<74E3> <74E3> -<74E4> <74E4> -<74E5> <74E5> -<74E6> <74E6> -<74E7> <74ED> -<74EE> <74EE> -<74EF> <74EF> -<74F0> <74F2> -<74F3> <74F3> -<74F4> <74F4> -<74F5> <74F5> -<74F6> <74F6> -<74F7> <74F7> -<74F8> <74FE> -<74FF> <74FF> -<7500> <7503> -<7504> <7504> -<7505> <750C> -<750D> <750D> -<750E> <750E> -<750F> <750F> -<7510> <7510> -<7511> <7511> -<7512> <7512> -<7513> <7513> -<7514> <7517> -<7518> <7518> -<7519> <7519> -<751A> <751A> -<751B> <751B> -<751C> <751C> -<751D> <751E> -<751F> <751F> -<7520> <7524> -<7525> <7525> -<7526> <7527> -<7528> <7528> -<7529> <7529> -<752A> <752A> -<752B> <752B> -<752C> <752C> -<752D> <752D> -<752E> <752E> -<752F> <752F> -<7530> <7530> -<7531> <7531> -<7532> <7532> -<7533> <7533> -<7534> <7534> -<7535> <7535> -<7536> <7536> -<7537> <7537> -<7538> <7538> -<7539> <7539> -<753A> <753A> -<753B> <753B> -<753C> <753D> -<753E> <753E> -<753F> <753F> -<7540> <7540> -<7541> <7544> -<7545> <7545> -<7546> <7547> -<7548> <7548> -<7549> <754A> -<754B> <754B> -<754C> <754C> -<754D> <754D> -<754E> <754E> -endbfrange - -100 beginbfrange -<754F> <754F> -<7550> <7553> -<7554> <7554> -<7555> <7558> -<7559> <7559> -<755A> <755A> -<755B> <755B> -<755C> <755C> -<755D> <7564> -<7565> <7565> -<7566> <7566> -<7567> <7569> -<756A> <756A> -<756B> <7571> -<7572> <7572> -<7573> <7573> -<7574> <7574> -<7575> <7577> -<7578> <7578> -<7579> <7579> -<757A> <757E> -<757F> <757F> -<7580> <7582> -<7583> <7583> -<7584> <7585> -<7586> <7586> -<7587> <7587> -<7588> <758A> -<758B> <758B> -<758C> <758E> -<758F> <758F> -<7590> <7590> -<7591> <7591> -<7592> <7592> -<7593> <7593> -<7594> <7594> -<7595> <7595> -<7596> <7596> -<7597> <7597> -<7598> <7598> -<7599> <7599> -<759A> <759A> -<759B> <759C> -<759D> <759D> -<759E> <759E> -<759F> <759F> -<75A0> <75A0> -<75A1> <75A1> -<75A2> <75A2> -<75A3> <75A3> -<75A4> <75A4> -<75A5> <75A5> -<75A6> <75AA> -<75AB> <75AB> -<75AC> <75AC> -<75AD> <75AD> -<75AE> <75AE> -<75AF> <75AF> -<75B0> <75B0> -<75B1> <75B1> -<75B2> <75B2> -<75B3> <75B4> -<75B5> <75B5> -<75B6> <75B7> -<75B8> <75B8> -<75B9> <75B9> -<75BA> <75BB> -<75BC> <75BC> -<75BD> <75BD> -<75BE> <75BE> -<75BF> <75C1> -<75C2> <75C2> -<75C3> <75C3> -<75C4> <75C4> -<75C5> <75C5> -<75C6> <75C6> -<75C7> <75C7> -<75C8> <75C8> -<75C9> <75C9> -<75CA> <75CA> -<75CB> <75CC> -<75CD> <75CD> -<75CE> <75D1> -<75D2> <75D2> -<75D3> <75D3> -<75D4> <75D4> -<75D5> <75D5> -<75D6> <75D6> -<75D7> <75D7> -<75D8> <75D8> -<75D9> <75DA> -<75DB> <75DB> -<75DC> <75DD> -<75DE> <75DE> -<75DF> <75E1> -<75E2> <75E2> -<75E3> <75E3> -<75E4> <75E4> -<75E5> <75E5> -<75E6> <75E6> -endbfrange - -100 beginbfrange -<75E7> <75E7> -<75E8> <75E8> -<75E9> <75E9> -<75EA> <75EA> -<75EB> <75EB> -<75EC> <75EF> -<75F0> <75F0> -<75F1> <75F1> -<75F2> <75F3> -<75F4> <75F4> -<75F5> <75F8> -<75F9> <75F9> -<75FA> <75FB> -<75FC> <75FC> -<75FD> <75FE> -<75FF> <75FF> -<7600> <7600> -<7601> <7601> -<7602> <7602> -<7603> <7603> -<7604> <7604> -<7605> <7605> -<7606> <7607> -<7608> <7609> -<760A> <760A> -<760B> <760B> -<760C> <760C> -<760D> <760F> -<7610> <7610> -<7611> <7614> -<7615> <7615> -<7616> <7616> -<7617> <7617> -<7618> <7618> -<7619> <7619> -<761A> <761A> -<761B> <761B> -<761C> <761E> -<761F> <761F> -<7620> <7620> -<7621> <7621> -<7622> <7622> -<7623> <7623> -<7624> <7624> -<7625> <7625> -<7626> <7626> -<7627> <7628> -<7629> <7629> -<762A> <762A> -<762B> <762B> -<762C> <762C> -<762D> <762D> -<762E> <762F> -<7630> <7630> -<7631> <7632> -<7633> <7633> -<7634> <7634> -<7635> <7635> -<7636> <7637> -<7638> <7638> -<7639> <763B> -<763C> <763C> -<763D> <763D> -<763E> <763E> -<763F> <763F> -<7640> <7640> -<7641> <7642> -<7643> <7643> -<7644> <7644> -<7645> <764B> -<764C> <764C> -<764D> <764D> -<764E> <7653> -<7654> <7654> -<7655> <7655> -<7656> <7656> -<7657> <765B> -<765C> <765C> -<765D> <765D> -<765E> <765E> -<765F> <7662> -<7663> <7663> -<7664> <766A> -<766B> <766B> -<766C> <766E> -<766F> <766F> -<7670> <7677> -<7678> <7678> -<7679> <767A> -<767B> <767B> -<767C> <767C> -<767D> <767D> -<767E> <767E> -<767F> <7681> -<7682> <7682> -<7683> <7683> -<7684> <7684> -<7685> <7685> -<7686> <7686> -<7687> <7687> -endbfrange - -100 beginbfrange -<7688> <7688> -<7689> <768A> -<768B> <768B> -<768C> <768D> -<768E> <768E> -<768F> <7690> -<7691> <7691> -<7692> <7692> -<7693> <7693> -<7694> <7695> -<7696> <7696> -<7697> <7698> -<7699> <7699> -<769A> <769B> -<769C> <76A3> -<76A4> <76A4> -<76A5> <76AD> -<76AE> <76AE> -<76AF> <76B0> -<76B1> <76B1> -<76B2> <76B2> -<76B3> <76B3> -<76B4> <76B4> -<76B5> <76BE> -<76BF> <76BF> -<76C0> <76C1> -<76C2> <76C2> -<76C3> <76C3> -<76C4> <76C4> -<76C5> <76C5> -<76C6> <76C6> -<76C7> <76C7> -<76C8> <76C8> -<76C9> <76C9> -<76CA> <76CA> -<76CB> <76CC> -<76CD> <76CD> -<76CE> <76CE> -<76CF> <76CF> -<76D0> <76D0> -<76D1> <76D1> -<76D2> <76D2> -<76D3> <76D3> -<76D4> <76D4> -<76D5> <76D5> -<76D6> <76D6> -<76D7> <76D7> -<76D8> <76D8> -<76D9> <76DA> -<76DB> <76DB> -<76DC> <76DE> -<76DF> <76DF> -<76E0> <76E4> -<76E5> <76E5> -<76E6> <76ED> -<76EE> <76EE> -<76EF> <76EF> -<76F0> <76F0> -<76F1> <76F1> -<76F2> <76F2> -<76F3> <76F3> -<76F4> <76F4> -<76F5> <76F7> -<76F8> <76F8> -<76F9> <76F9> -<76FA> <76FB> -<76FC> <76FC> -<76FD> <76FD> -<76FE> <76FE> -<76FF> <76FF> -<7700> <7700> -<7701> <7701> -<7702> <7703> -<7704> <7704> -<7705> <7706> -<7707> <7708> -<7709> <7709> -<770A> <770A> -<770B> <770B> -<770C> <770C> -<770D> <770D> -<770E> <7718> -<7719> <7719> -<771A> <771A> -<771B> <771E> -<771F> <771F> -<7720> <7720> -<7721> <7721> -<7722> <7722> -<7723> <7725> -<7726> <7726> -<7727> <7727> -<7728> <7728> -<7729> <7729> -<772A> <772B> -<772C> <772C> -<772D> <772D> -<772E> <772E> -<772F> <772F> -<7730> <7734> -endbfrange - -100 beginbfrange -<7735> <7735> -<7736> <7736> -<7737> <7737> -<7738> <7738> -<7739> <7739> -<773A> <773A> -<773B> <773B> -<773C> <773C> -<773D> <773F> -<7740> <7740> -<7741> <7741> -<7742> <7742> -<7743> <7743> -<7744> <7746> -<7747> <7747> -<7748> <774F> -<7750> <7751> -<7752> <7759> -<775A> <775A> -<775B> <775B> -<775C> <775C> -<775D> <7760> -<7761> <7761> -<7762> <7762> -<7763> <7763> -<7764> <7764> -<7765> <7765> -<7766> <7766> -<7767> <7767> -<7768> <7768> -<7769> <776A> -<776B> <776B> -<776C> <776C> -<776D> <7778> -<7779> <7779> -<777A> <777C> -<777D> <777D> -<777E> <777E> -<777F> <777F> -<7780> <7780> -<7781> <7783> -<7784> <7784> -<7785> <7785> -<7786> <778B> -<778C> <778C> -<778D> <778D> -<778E> <778E> -<778F> <7790> -<7791> <7791> -<7792> <7792> -<7793> <779E> -<779F> <77A0> -<77A1> <77A1> -<77A2> <77A2> -<77A3> <77A4> -<77A5> <77A5> -<77A6> <77A6> -<77A7> <77A7> -<77A8> <77A8> -<77A9> <77A9> -<77AA> <77AA> -<77AB> <77AB> -<77AC> <77AC> -<77AD> <77AF> -<77B0> <77B0> -<77B1> <77B2> -<77B3> <77B3> -<77B4> <77B4> -<77B5> <77B5> -<77B6> <77BA> -<77BB> <77BB> -<77BC> <77BC> -<77BD> <77BD> -<77BE> <77BE> -<77BF> <77BF> -<77C0> <77CC> -<77CD> <77CD> -<77CE> <77D6> -<77D7> <77D7> -<77D8> <77DA> -<77DB> <77DB> -<77DC> <77DC> -<77DD> <77E1> -<77E2> <77E2> -<77E3> <77E3> -<77E4> <77E4> -<77E5> <77E5> -<77E6> <77E6> -<77E7> <77E7> -<77E8> <77E8> -<77E9> <77E9> -<77EA> <77EA> -<77EB> <77EB> -<77EC> <77EC> -<77ED> <77ED> -<77EE> <77EE> -<77EF> <77F2> -<77F3> <77F3> -<77F4> <77F5> -<77F6> <77F6> -endbfrange - -100 beginbfrange -<77F7> <77F7> -<77F8> <77F8> -<77F9> <77FC> -<77FD> <77FD> -<77FE> <77FE> -<77FF> <77FF> -<7800> <7800> -<7801> <7801> -<7802> <7802> -<7803> <7808> -<7809> <7809> -<780A> <780B> -<780C> <780C> -<780D> <780D> -<780E> <7810> -<7811> <7811> -<7812> <7812> -<7813> <7813> -<7814> <7814> -<7815> <7815> -<7816> <7816> -<7817> <7818> -<7819> <7819> -<781A> <781A> -<781B> <781B> -<781C> <781D> -<781E> <781E> -<781F> <781F> -<7820> <7822> -<7823> <7823> -<7824> <7824> -<7825> <7825> -<7826> <7826> -<7827> <7827> -<7828> <7828> -<7829> <7829> -<782A> <782B> -<782C> <782C> -<782D> <782D> -<782E> <782F> -<7830> <7830> -<7831> <7833> -<7834> <7834> -<7835> <7836> -<7837> <7837> -<7838> <7838> -<7839> <783B> -<783C> <783C> -<783D> <783D> -<783E> <783E> -<783F> <783F> -<7840> <7840> -<7841> <7844> -<7845> <7845> -<7846> <7846> -<7847> <7847> -<7848> <784B> -<784C> <784C> -<784D> <784D> -<784E> <784E> -<784F> <784F> -<7850> <7850> -<7851> <7851> -<7852> <7852> -<7853> <7854> -<7855> <7855> -<7856> <7857> -<7858> <785A> -<785B> <785C> -<785D> <785D> -<785E> <7869> -<786A> <786A> -<786B> <786B> -<786C> <786C> -<786D> <786D> -<786E> <786E> -<786F> <7876> -<7877> <7877> -<7878> <787B> -<787C> <787C> -<787D> <7883> -<7884> <7886> -<7887> <7887> -<7888> <7888> -<7889> <7889> -<788A> <788B> -<788C> <788C> -<788D> <788D> -<788E> <788E> -<788F> <7890> -<7891> <7891> -<7892> <7892> -<7893> <7893> -<7894> <7896> -<7897> <7897> -<7898> <7898> -<7899> <7899> -<789A> <789A> -<789B> <789B> -<789C> <789C> -endbfrange - -100 beginbfrange -<789D> <789E> -<789F> <789F> -<78A0> <78A0> -<78A1> <78A1> -<78A2> <78A2> -<78A3> <78A3> -<78A4> <78A4> -<78A5> <78A5> -<78A6> <78A6> -<78A7> <78A7> -<78A8> <78AF> -<78B0> <78B0> -<78B1> <78B1> -<78B2> <78B2> -<78B3> <78B3> -<78B4> <78B4> -<78B5> <78B8> -<78B9> <78B9> -<78BA> <78BD> -<78BE> <78BE> -<78BF> <78C0> -<78C1> <78C1> -<78C2> <78C4> -<78C5> <78C5> -<78C6> <78C8> -<78C9> <78C9> -<78CA> <78CA> -<78CB> <78CB> -<78CC> <78CF> -<78D0> <78D0> -<78D1> <78D3> -<78D4> <78D4> -<78D5> <78D5> -<78D6> <78D8> -<78D9> <78D9> -<78DA> <78E3> -<78E4> <78E7> -<78E8> <78E8> -<78E9> <78EB> -<78EC> <78EC> -<78ED> <78F1> -<78F2> <78F2> -<78F3> <78F3> -<78F4> <78F4> -<78F5> <78F6> -<78F7> <78F7> -<78F8> <78F9> -<78FA> <78FA> -<78FB> <78FF> -<7900> <7900> -<7901> <7901> -<7902> <7904> -<7905> <7905> -<7906> <790C> -<790D> <7912> -<7913> <7913> -<7914> <791D> -<791E> <791E> -<791F> <7923> -<7924> <7924> -<7925> <7933> -<7934> <7934> -<7935> <7939> -<793A> <793A> -<793B> <793B> -<793C> <793C> -<793D> <793D> -<793E> <793E> -<793F> <793F> -<7940> <7940> -<7941> <7941> -<7942> <7945> -<7946> <7946> -<7947> <7947> -<7948> <7948> -<7949> <7949> -<794A> <7952> -<7953> <7953> -<7954> <7955> -<7956> <7956> -<7957> <7957> -<7958> <7959> -<795A> <795A> -<795B> <795C> -<795D> <795D> -<795E> <795E> -<795F> <795F> -<7960> <7960> -<7961> <7961> -<7962> <7962> -<7963> <7963> -<7964> <7964> -<7965> <7965> -<7966> <7966> -<7967> <7967> -<7968> <7968> -<7969> <796C> -<796D> <796D> -<796E> <796E> -<796F> <796F> -endbfrange - -100 beginbfrange -<7970> <7976> -<7977> <7977> -<7978> <7978> -<7979> <7979> -<797A> <797A> -<797B> <797F> -<7980> <7980> -<7981> <7981> -<7982> <7983> -<7984> <7984> -<7985> <7985> -<7986> <7989> -<798A> <798A> -<798B> <798E> -<798F> <798F> -<7990> <7992> -<7993> <7999> -<799A> <799A> -<799B> <79A6> -<79A7> <79A7> -<79A8> <79B2> -<79B3> <79B3> -<79B4> <79B8> -<79B9> <79B9> -<79BA> <79BA> -<79BB> <79BB> -<79BC> <79BC> -<79BD> <79BD> -<79BE> <79BE> -<79BF> <79BF> -<79C0> <79C0> -<79C1> <79C1> -<79C2> <79C2> -<79C3> <79C3> -<79C4> <79C5> -<79C6> <79C6> -<79C7> <79C8> -<79C9> <79C9> -<79CA> <79CA> -<79CB> <79CB> -<79CC> <79CC> -<79CD> <79CD> -<79CE> <79D0> -<79D1> <79D1> -<79D2> <79D2> -<79D3> <79D4> -<79D5> <79D5> -<79D6> <79D7> -<79D8> <79D8> -<79D9> <79DE> -<79DF> <79DF> -<79E0> <79E2> -<79E3> <79E3> -<79E4> <79E4> -<79E5> <79E5> -<79E6> <79E6> -<79E7> <79E7> -<79E8> <79E8> -<79E9> <79E9> -<79EA> <79EA> -<79EB> <79EB> -<79EC> <79EC> -<79ED> <79ED> -<79EE> <79EE> -<79EF> <79EF> -<79F0> <79F0> -<79F1> <79F7> -<79F8> <79F8> -<79F9> <79FA> -<79FB> <79FB> -<79FC> <79FC> -<79FD> <79FD> -<79FE> <79FF> -<7A00> <7A00> -<7A01> <7A01> -<7A02> <7A02> -<7A03> <7A03> -<7A04> <7A05> -<7A06> <7A06> -<7A07> <7A0A> -<7A0B> <7A0B> -<7A0C> <7A0C> -<7A0D> <7A0D> -<7A0E> <7A0E> -<7A0F> <7A13> -<7A14> <7A14> -<7A15> <7A16> -<7A17> <7A17> -<7A18> <7A19> -<7A1A> <7A1A> -<7A1B> <7A1C> -<7A1D> <7A1D> -<7A1E> <7A1E> -<7A1F> <7A1F> -<7A20> <7A20> -<7A21> <7A22> -<7A23> <7A23> -<7A24> <7A32> -<7A33> <7A33> -<7A34> <7A36> -endbfrange - -100 beginbfrange -<7A37> <7A37> -<7A38> <7A38> -<7A39> <7A39> -<7A3A> <7A3A> -<7A3B> <7A3B> -<7A3C> <7A3C> -<7A3D> <7A3D> -<7A3E> <7A3E> -<7A3F> <7A3F> -<7A40> <7A45> -<7A46> <7A46> -<7A47> <7A50> -<7A51> <7A51> -<7A52> <7A56> -<7A57> <7A57> -<7A58> <7A68> -<7A69> <7A6F> -<7A70> <7A70> -<7A71> <7A73> -<7A74> <7A74> -<7A75> <7A75> -<7A76> <7A76> -<7A77> <7A77> -<7A78> <7A79> -<7A7A> <7A7A> -<7A7B> <7A7E> -<7A7F> <7A7F> -<7A80> <7A80> -<7A81> <7A81> -<7A82> <7A82> -<7A83> <7A83> -<7A84> <7A84> -<7A85> <7A85> -<7A86> <7A86> -<7A87> <7A87> -<7A88> <7A88> -<7A89> <7A8C> -<7A8D> <7A8D> -<7A8E> <7A90> -<7A91> <7A91> -<7A92> <7A92> -<7A93> <7A94> -<7A95> <7A95> -<7A96> <7A96> -<7A97> <7A97> -<7A98> <7A98> -<7A99> <7A9B> -<7A9C> <7A9C> -<7A9D> <7A9D> -<7A9E> <7A9E> -<7A9F> <7A9F> -<7AA0> <7AA0> -<7AA1> <7AA2> -<7AA3> <7AA4> -<7AA5> <7AA5> -<7AA6> <7AA6> -<7AA7> <7AA7> -<7AA8> <7AA8> -<7AA9> <7AAB> -<7AAC> <7AAC> -<7AAD> <7AAD> -<7AAE> <7AB2> -<7AB3> <7AB3> -<7AB4> <7ABE> -<7ABF> <7ABF> -<7AC0> <7ACA> -<7ACB> <7ACB> -<7ACC> <7AD5> -<7AD6> <7AD6> -<7AD7> <7AD8> -<7AD9> <7AD9> -<7ADA> <7ADD> -<7ADE> <7ADE> -<7ADF> <7ADF> -<7AE0> <7AE0> -<7AE1> <7AE2> -<7AE3> <7AE3> -<7AE4> <7AE4> -<7AE5> <7AE5> -<7AE6> <7AE6> -<7AE7> <7AEC> -<7AED> <7AED> -<7AEE> <7AEE> -<7AEF> <7AEF> -<7AF0> <7AF3> -<7AF4> <7AF8> -<7AF9> <7AF9> -<7AFA> <7AFA> -<7AFB> <7AFC> -<7AFD> <7AFD> -<7AFE> <7AFE> -<7AFF> <7AFF> -<7B00> <7B02> -<7B03> <7B04> -<7B05> <7B05> -<7B06> <7B06> -<7B07> <7B07> -<7B08> <7B08> -<7B09> <7B09> -<7B0A> <7B0A> -endbfrange - -100 beginbfrange -<7B0B> <7B0B> -<7B0C> <7B0E> -<7B0F> <7B0F> -<7B10> <7B10> -<7B11> <7B11> -<7B12> <7B13> -<7B14> <7B14> -<7B15> <7B15> -<7B16> <7B18> -<7B19> <7B19> -<7B1A> <7B1A> -<7B1B> <7B1B> -<7B1C> <7B1D> -<7B1E> <7B1E> -<7B1F> <7B1F> -<7B20> <7B20> -<7B21> <7B23> -<7B24> <7B24> -<7B25> <7B25> -<7B26> <7B26> -<7B27> <7B27> -<7B28> <7B28> -<7B29> <7B29> -<7B2A> <7B2A> -<7B2B> <7B2B> -<7B2C> <7B2C> -<7B2D> <7B2D> -<7B2E> <7B2E> -<7B2F> <7B30> -<7B31> <7B31> -<7B32> <7B32> -<7B33> <7B33> -<7B34> <7B37> -<7B38> <7B38> -<7B39> <7B39> -<7B3A> <7B3A> -<7B3B> <7B3B> -<7B3C> <7B3C> -<7B3D> <7B3D> -<7B3E> <7B3E> -<7B3F> <7B44> -<7B45> <7B45> -<7B46> <7B46> -<7B47> <7B47> -<7B48> <7B48> -<7B49> <7B49> -<7B4A> <7B4A> -<7B4B> <7B4B> -<7B4C> <7B4C> -<7B4D> <7B4E> -<7B4F> <7B4F> -<7B50> <7B50> -<7B51> <7B51> -<7B52> <7B52> -<7B53> <7B53> -<7B54> <7B54> -<7B55> <7B55> -<7B56> <7B56> -<7B57> <7B57> -<7B58> <7B58> -<7B59> <7B59> -<7B5A> <7B5A> -<7B5B> <7B5B> -<7B5C> <7B5C> -<7B5D> <7B5D> -<7B5E> <7B5F> -<7B60> <7B60> -<7B61> <7B61> -<7B62> <7B62> -<7B63> <7B6D> -<7B6E> <7B6E> -<7B6F> <7B70> -<7B71> <7B71> -<7B72> <7B72> -<7B73> <7B74> -<7B75> <7B75> -<7B76> <7B76> -<7B77> <7B77> -<7B78> <7B78> -<7B79> <7B79> -<7B7A> <7B7A> -<7B7B> <7B7B> -<7B7C> <7B7D> -<7B7E> <7B7E> -<7B7F> <7B7F> -<7B80> <7B80> -<7B81> <7B84> -<7B85> <7B85> -<7B86> <7B8C> -<7B8D> <7B8D> -<7B8E> <7B8F> -<7B90> <7B90> -<7B91> <7B93> -<7B94> <7B94> -<7B95> <7B95> -<7B96> <7B96> -<7B97> <7B97> -<7B98> <7B9B> -<7B9C> <7B9C> -<7B9D> <7B9D> -endbfrange - -100 beginbfrange -<7B9E> <7BA0> -<7BA1> <7BA1> -<7BA2> <7BA2> -<7BA3> <7BA5> -<7BA6> <7BA7> -<7BA8> <7BA8> -<7BA9> <7BA9> -<7BAA> <7BAA> -<7BAB> <7BAB> -<7BAC> <7BAC> -<7BAD> <7BAD> -<7BAE> <7BB0> -<7BB1> <7BB1> -<7BB2> <7BB3> -<7BB4> <7BB4> -<7BB5> <7BB7> -<7BB8> <7BB8> -<7BB9> <7BC0> -<7BC1> <7BC1> -<7BC2> <7BC4> -<7BC5> <7BC5> -<7BC6> <7BC6> -<7BC7> <7BC7> -<7BC8> <7BCB> -<7BCC> <7BCC> -<7BCD> <7BD0> -<7BD1> <7BD1> -<7BD2> <7BD2> -<7BD3> <7BD3> -<7BD4> <7BD8> -<7BD9> <7BD9> -<7BDA> <7BDA> -<7BDB> <7BDC> -<7BDD> <7BDD> -<7BDE> <7BE0> -<7BE1> <7BE1> -<7BE2> <7BE4> -<7BE5> <7BE6> -<7BE7> <7BE9> -<7BEA> <7BEA> -<7BEB> <7BED> -<7BEE> <7BEE> -<7BEF> <7BF0> -<7BF1> <7BF1> -<7BF2> <7BF6> -<7BF7> <7BF7> -<7BF8> <7BFB> -<7BFC> <7BFC> -<7BFD> <7BFD> -<7BFE> <7BFE> -<7BFF> <7BFF> -<7C00> <7C06> -<7C07> <7C07> -<7C08> <7C0A> -<7C0B> <7C0B> -<7C0C> <7C0C> -<7C0D> <7C0E> -<7C0F> <7C0F> -<7C10> <7C15> -<7C16> <7C16> -<7C17> <7C19> -<7C1A> <7C1E> -<7C1F> <7C1F> -<7C20> <7C25> -<7C26> <7C26> -<7C27> <7C27> -<7C28> <7C29> -<7C2A> <7C2A> -<7C2B> <7C37> -<7C38> <7C38> -<7C39> <7C3E> -<7C3F> <7C3F> -<7C40> <7C40> -<7C41> <7C41> -<7C42> <7C42> -<7C43> <7C4C> -<7C4D> <7C4D> -<7C4E> <7C72> -<7C73> <7C73> -<7C74> <7C74> -<7C75> <7C7A> -<7C7B> <7C7B> -<7C7C> <7C7C> -<7C7D> <7C7D> -<7C7E> <7C87> -<7C88> <7C88> -<7C89> <7C89> -<7C8A> <7C90> -<7C91> <7C91> -<7C92> <7C92> -<7C93> <7C94> -<7C95> <7C95> -<7C96> <7C96> -<7C97> <7C97> -<7C98> <7C98> -<7C99> <7C9B> -<7C9C> <7C9C> -<7C9D> <7C9D> -<7C9E> <7C9E> -<7C9F> <7C9F> -endbfrange - -100 beginbfrange -<7CA0> <7CA1> -<7CA2> <7CA2> -<7CA3> <7CA3> -<7CA4> <7CA4> -<7CA5> <7CA5> -<7CA6> <7CA9> -<7CAA> <7CAA> -<7CAB> <7CAD> -<7CAE> <7CAE> -<7CAF> <7CB0> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB4> <7CB8> -<7CB9> <7CB9> -<7CBA> <7CBB> -<7CBC> <7CBD> -<7CBE> <7CBE> -<7CBF> <7CC0> -<7CC1> <7CC1> -<7CC2> <7CC4> -<7CC5> <7CC5> -<7CC6> <7CC6> -<7CC7> <7CC7> -<7CC8> <7CC8> -<7CC9> <7CC9> -<7CCA> <7CCA> -<7CCB> <7CCB> -<7CCC> <7CCD> -<7CCE> <7CD4> -<7CD5> <7CD5> -<7CD6> <7CD6> -<7CD7> <7CD7> -<7CD8> <7CD8> -<7CD9> <7CD9> -<7CDA> <7CDB> -<7CDC> <7CDC> -<7CDD> <7CDE> -<7CDF> <7CDF> -<7CE0> <7CE0> -<7CE1> <7CE7> -<7CE8> <7CE8> -<7CE9> <7CEE> -<7CEF> <7CEF> -<7CF0> <7CF7> -<7CF8> <7CF8> -<7CF9> <7CFA> -<7CFB> <7CFB> -<7CFC> <7CFF> -<7D00> <7D09> -<7D0A> <7D0A> -<7D0B> <7D10> -<7D11> <7D1F> -<7D20> <7D20> -<7D21> <7D21> -<7D22> <7D22> -<7D23> <7D26> -<7D27> <7D27> -<7D28> <7D2A> -<7D2B> <7D2B> -<7D2C> <7D2E> -<7D2F> <7D2F> -<7D30> <7D36> -<7D37> <7D6D> -<7D6E> <7D6E> -<7D6F> <7D76> -<7D77> <7D77> -<7D78> <7D98> -<7D99> <7DA5> -<7DA6> <7DA6> -<7DA7> <7DAD> -<7DAE> <7DAE> -<7DAF> <7DD9> -<7DDA> <7DFA> -<7DFB> <7DFF> -<7E00> <7E39> -<7E3A> <7E3A> -<7E3B> <7E3B> -<7E3C> <7E40> -<7E41> <7E41> -<7E42> <7E46> -<7E47> <7E47> -<7E48> <7E5D> -<7E5E> <7E81> -<7E82> <7E82> -<7E83> <7E9A> -<7E9B> <7E9B> -<7E9C> <7E9E> -<7E9F> <7E9F> -<7EA0> <7EA0> -<7EA1> <7EA1> -<7EA2> <7EA2> -<7EA3> <7EA3> -<7EA4> <7EA4> -<7EA5> <7EA5> -<7EA6> <7EA6> -<7EA7> <7EA7> -<7EA8> <7EA9> -<7EAA> <7EAA> -<7EAB> <7EAB> -endbfrange - -100 beginbfrange -<7EAC> <7EAC> -<7EAD> <7EAD> -<7EAE> <7EAE> -<7EAF> <7EAF> -<7EB0> <7EB0> -<7EB1> <7EB1> -<7EB2> <7EB2> -<7EB3> <7EB3> -<7EB4> <7EB4> -<7EB5> <7EB5> -<7EB6> <7EB6> -<7EB7> <7EB7> -<7EB8> <7EB8> -<7EB9> <7EB9> -<7EBA> <7EBA> -<7EBB> <7EBC> -<7EBD> <7EBD> -<7EBE> <7EBE> -<7EBF> <7EBF> -<7EC0> <7EC2> -<7EC3> <7EC3> -<7EC4> <7EC4> -<7EC5> <7EC5> -<7EC6> <7EC6> -<7EC7> <7EC7> -<7EC8> <7EC8> -<7EC9> <7EC9> -<7ECA> <7ECA> -<7ECB> <7ECC> -<7ECD> <7ECD> -<7ECE> <7ECE> -<7ECF> <7ECF> -<7ED0> <7ED0> -<7ED1> <7ED1> -<7ED2> <7ED2> -<7ED3> <7ED3> -<7ED4> <7ED4> -<7ED5> <7ED5> -<7ED6> <7ED6> -<7ED7> <7ED7> -<7ED8> <7ED8> -<7ED9> <7ED9> -<7EDA> <7EDA> -<7EDB> <7EDB> -<7EDC> <7EDC> -<7EDD> <7EDD> -<7EDE> <7EDE> -<7EDF> <7EDF> -<7EE0> <7EE1> -<7EE2> <7EE2> -<7EE3> <7EE3> -<7EE4> <7EE4> -<7EE5> <7EE5> -<7EE6> <7EE6> -<7EE7> <7EE7> -<7EE8> <7EE8> -<7EE9> <7EE9> -<7EEA> <7EEA> -<7EEB> <7EEB> -<7EEC> <7EEC> -<7EED> <7EED> -<7EEE> <7EEF> -<7EF0> <7EF0> -<7EF1> <7EF2> -<7EF3> <7EF3> -<7EF4> <7EF4> -<7EF5> <7EF5> -<7EF6> <7EF6> -<7EF7> <7EF7> -<7EF8> <7EF8> -<7EF9> <7EF9> -<7EFA> <7EFB> -<7EFC> <7EFC> -<7EFD> <7EFD> -<7EFE> <7EFE> -<7EFF> <7EFF> -<7F00> <7F00> -<7F01> <7F03> -<7F04> <7F04> -<7F05> <7F05> -<7F06> <7F06> -<7F07> <7F08> -<7F09> <7F09> -<7F0A> <7F0A> -<7F0B> <7F0C> -<7F0D> <7F0D> -<7F0E> <7F0E> -<7F0F> <7F0F> -<7F10> <7F10> -<7F11> <7F12> -<7F13> <7F13> -<7F14> <7F14> -<7F15> <7F15> -<7F16> <7F16> -<7F17> <7F17> -<7F18> <7F18> -<7F19> <7F19> -<7F1A> <7F1A> -<7F1B> <7F1B> -<7F1C> <7F1C> -endbfrange - -100 beginbfrange -<7F1D> <7F1D> -<7F1E> <7F1E> -<7F1F> <7F1F> -<7F20> <7F20> -<7F21> <7F27> -<7F28> <7F28> -<7F29> <7F29> -<7F2A> <7F2D> -<7F2E> <7F2E> -<7F2F> <7F33> -<7F34> <7F34> -<7F35> <7F35> -<7F36> <7F36> -<7F37> <7F37> -<7F38> <7F38> -<7F39> <7F39> -<7F3A> <7F3A> -<7F3B> <7F41> -<7F42> <7F42> -<7F43> <7F43> -<7F44> <7F45> -<7F46> <7F4F> -<7F50> <7F50> -<7F51> <7F51> -<7F52> <7F53> -<7F54> <7F54> -<7F55> <7F55> -<7F56> <7F56> -<7F57> <7F57> -<7F58> <7F58> -<7F59> <7F59> -<7F5A> <7F5A> -<7F5B> <7F5E> -<7F5F> <7F5F> -<7F60> <7F60> -<7F61> <7F61> -<7F62> <7F62> -<7F63> <7F67> -<7F68> <7F68> -<7F69> <7F69> -<7F6A> <7F6A> -<7F6B> <7F6D> -<7F6E> <7F6E> -<7F6F> <7F70> -<7F71> <7F71> -<7F72> <7F72> -<7F73> <7F73> -<7F74> <7F74> -<7F75> <7F78> -<7F79> <7F79> -<7F7A> <7F7D> -<7F7E> <7F7E> -<7F7F> <7F80> -<7F81> <7F81> -<7F82> <7F89> -<7F8A> <7F8A> -<7F8B> <7F8B> -<7F8C> <7F8C> -<7F8D> <7F8D> -<7F8E> <7F8E> -<7F8F> <7F93> -<7F94> <7F94> -<7F95> <7F99> -<7F9A> <7F9A> -<7F9B> <7F9C> -<7F9D> <7F9D> -<7F9E> <7F9E> -<7F9F> <7F9F> -<7FA0> <7FA0> -<7FA1> <7FA1> -<7FA2> <7FA3> -<7FA4> <7FA4> -<7FA5> <7FA6> -<7FA7> <7FA7> -<7FA8> <7FAE> -<7FAF> <7FB0> -<7FB1> <7FB1> -<7FB2> <7FB2> -<7FB3> <7FB7> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBA> <7FBB> -<7FBC> <7FBC> -<7FBD> <7FBD> -<7FBE> <7FBE> -<7FBF> <7FBF> -<7FC0> <7FC0> -<7FC1> <7FC1> -<7FC2> <7FC4> -<7FC5> <7FC5> -<7FC6> <7FC9> -<7FCA> <7FCA> -<7FCB> <7FCB> -<7FCC> <7FCC> -<7FCD> <7FCD> -<7FCE> <7FCE> -<7FCF> <7FD3> -<7FD4> <7FD4> -<7FD5> <7FD5> -<7FD6> <7FD7> -endbfrange - -100 beginbfrange -<7FD8> <7FD8> -<7FD9> <7FDE> -<7FDF> <7FDF> -<7FE0> <7FE0> -<7FE1> <7FE1> -<7FE2> <7FE3> -<7FE4> <7FE4> -<7FE5> <7FE5> -<7FE6> <7FE6> -<7FE7> <7FE8> -<7FE9> <7FE9> -<7FEA> <7FED> -<7FEE> <7FEE> -<7FEF> <7FEF> -<7FF0> <7FF0> -<7FF1> <7FF1> -<7FF2> <7FF2> -<7FF3> <7FF3> -<7FF4> <7FFA> -<7FFB> <7FFB> -<7FFC> <7FFC> -<7FFD> <7FFF> -<8000> <8000> -<8001> <8001> -<8002> <8002> -<8003> <8003> -<8004> <8004> -<8005> <8005> -<8006> <8006> -<8007> <800A> -<800B> <800B> -<800C> <800C> -<800D> <800D> -<800E> <800F> -<8010> <8010> -<8011> <8011> -<8012> <8012> -<8013> <8013> -<8014> <8014> -<8015> <8015> -<8016> <8016> -<8017> <8017> -<8018> <8018> -<8019> <8019> -<801A> <801B> -<801C> <801C> -<801D> <801F> -<8020> <8020> -<8021> <8021> -<8022> <8022> -<8023> <8024> -<8025> <8027> -<8028> <8028> -<8029> <8029> -<802A> <802A> -<802B> <8030> -<8031> <8031> -<8032> <8032> -<8033> <8033> -<8034> <8034> -<8035> <8035> -<8036> <8036> -<8037> <8037> -<8038> <8038> -<8039> <803A> -<803B> <803B> -<803C> <803C> -<803D> <803D> -<803E> <803E> -<803F> <803F> -<8040> <8041> -<8042> <8042> -<8043> <8043> -<8044> <8045> -<8046> <8046> -<8047> <8049> -<804A> <804A> -<804B> <804B> -<804C> <804C> -<804D> <804D> -<804E> <8051> -<8052> <8052> -<8053> <8053> -<8054> <8054> -<8055> <8057> -<8058> <8058> -<8059> <8059> -<805A> <805A> -<805B> <8068> -<8069> <8069> -<806A> <806A> -<806B> <8070> -<8071> <8071> -<8072> <807D> -<807E> <807E> -<807F> <807F> -<8080> <8080> -<8081> <8082> -<8083> <8083> -<8084> <8084> -endbfrange - -100 beginbfrange -<8085> <8085> -<8086> <8086> -<8087> <8087> -<8088> <8088> -<8089> <8089> -<808A> <808A> -<808B> <808B> -<808C> <808C> -<808D> <8092> -<8093> <8093> -<8094> <8095> -<8096> <8096> -<8097> <8097> -<8098> <8098> -<8099> <8099> -<809A> <809A> -<809B> <809B> -<809C> <809C> -<809D> <809D> -<809E> <809E> -<809F> <809F> -<80A0> <80A0> -<80A1> <80A1> -<80A2> <80A2> -<80A3> <80A3> -<80A4> <80A4> -<80A5> <80A5> -<80A6> <80A8> -<80A9> <80A9> -<80AA> <80AA> -<80AB> <80AB> -<80AC> <80AC> -<80AD> <80AD> -<80AE> <80AE> -<80AF> <80AF> -<80B0> <80B0> -<80B1> <80B1> -<80B2> <80B2> -<80B3> <80B3> -<80B4> <80B4> -<80B5> <80B6> -<80B7> <80B7> -<80B8> <80B9> -<80BA> <80BA> -<80BB> <80BB> -<80BC> <80BC> -<80BD> <80BD> -<80BE> <80BE> -<80BF> <80BF> -<80C0> <80C0> -<80C1> <80C1> -<80C2> <80C2> -<80C3> <80C3> -<80C4> <80C4> -<80C5> <80C5> -<80C6> <80C6> -<80C7> <80CB> -<80CC> <80CC> -<80CD> <80CD> -<80CE> <80CE> -<80CF> <80D5> -<80D6> <80D6> -<80D7> <80D7> -<80D8> <80D8> -<80D9> <80D9> -<80DA> <80DA> -<80DB> <80DB> -<80DC> <80DC> -<80DD> <80DD> -<80DE> <80DE> -<80DF> <80E0> -<80E1> <80E1> -<80E2> <80E3> -<80E4> <80E4> -<80E5> <80E5> -<80E6> <80E6> -<80E7> <80EA> -<80EB> <80EB> -<80EC> <80EC> -<80ED> <80ED> -<80EE> <80EE> -<80EF> <80EF> -<80F0> <80F0> -<80F1> <80F1> -<80F2> <80F2> -<80F3> <80F3> -<80F4> <80F4> -<80F5> <80F5> -<80F6> <80F6> -<80F7> <80F7> -<80F8> <80F8> -<80F9> <80F9> -<80FA> <80FA> -<80FB> <80FB> -<80FC> <80FC> -<80FD> <80FD> -<80FE> <80FF> -<8100> <8101> -<8102> <8102> -<8103> <8105> -endbfrange - -100 beginbfrange -<8106> <8106> -<8107> <8108> -<8109> <8109> -<810A> <810A> -<810B> <810B> -<810C> <810C> -<810D> <810E> -<810F> <810F> -<8110> <8110> -<8111> <8111> -<8112> <8112> -<8113> <8113> -<8114> <8114> -<8115> <8115> -<8116> <8116> -<8117> <8117> -<8118> <8118> -<8119> <8119> -<811A> <811A> -<811B> <811D> -<811E> <811E> -<811F> <812B> -<812C> <812C> -<812D> <812E> -<812F> <812F> -<8130> <8130> -<8131> <8131> -<8132> <8132> -<8133> <8135> -<8136> <8136> -<8137> <8137> -<8138> <8138> -<8139> <813D> -<813E> <813E> -<813F> <813F> -<8140> <8145> -<8146> <8146> -<8147> <8147> -<8148> <8148> -<8149> <8149> -<814A> <814A> -<814B> <814B> -<814C> <814C> -<814D> <814F> -<8150> <8150> -<8151> <8151> -<8152> <8152> -<8153> <8153> -<8154> <8154> -<8155> <8155> -<8156> <8158> -<8159> <815A> -<815B> <815F> -<8160> <8160> -<8161> <8164> -<8165> <8165> -<8166> <8166> -<8167> <8167> -<8168> <8168> -<8169> <8169> -<816A> <816C> -<816D> <816D> -<816E> <816E> -<816F> <816F> -<8170> <8170> -<8171> <8171> -<8172> <8173> -<8174> <8174> -<8175> <8178> -<8179> <8179> -<817A> <817A> -<817B> <817B> -<817C> <817D> -<817E> <817E> -<817F> <817F> -<8180> <8180> -<8181> <8181> -<8182> <8182> -<8183> <8187> -<8188> <8188> -<8189> <8189> -<818A> <818A> -<818B> <818E> -<818F> <818F> -<8190> <8190> -<8191> <8191> -<8192> <8197> -<8198> <8198> -<8199> <819A> -<819B> <819B> -<819C> <819C> -<819D> <819D> -<819E> <81A2> -<81A3> <81A3> -<81A4> <81A5> -<81A6> <81A6> -<81A7> <81A7> -<81A8> <81A8> -<81A9> <81A9> -<81AA> <81AA> -endbfrange - -100 beginbfrange -<81AB> <81B2> -<81B3> <81B3> -<81B4> <81B9> -<81BA> <81BA> -<81BB> <81BB> -<81BC> <81BF> -<81C0> <81C0> -<81C1> <81C1> -<81C2> <81C2> -<81C3> <81C3> -<81C4> <81C5> -<81C6> <81C6> -<81C7> <81C9> -<81CA> <81CA> -<81CB> <81CB> -<81CC> <81CC> -<81CD> <81D3> -<81D4> <81E2> -<81E3> <81E3> -<81E4> <81E6> -<81E7> <81E7> -<81E8> <81E9> -<81EA> <81EA> -<81EB> <81EB> -<81EC> <81EC> -<81ED> <81ED> -<81EE> <81F2> -<81F3> <81F4> -<81F5> <81FA> -<81FB> <81FB> -<81FC> <81FC> -<81FD> <81FD> -<81FE> <81FE> -<81FF> <81FF> -<8200> <8200> -<8201> <8202> -<8203> <8203> -<8204> <8204> -<8205> <8205> -<8206> <8206> -<8207> <820B> -<820C> <820D> -<820E> <820F> -<8210> <8210> -<8211> <8211> -<8212> <8212> -<8213> <8213> -<8214> <8214> -<8215> <821A> -<821B> <821B> -<821C> <821C> -<821D> <821D> -<821E> <821E> -<821F> <821F> -<8220> <8220> -<8221> <8223> -<8224> <8227> -<8228> <8228> -<8229> <8229> -<822A> <822A> -<822B> <822B> -<822C> <822C> -<822D> <822D> -<822E> <822E> -<822F> <822F> -<8230> <8230> -<8231> <8231> -<8232> <8232> -<8233> <8234> -<8235> <8235> -<8236> <8236> -<8237> <8237> -<8238> <8238> -<8239> <8239> -<823A> <823A> -<823B> <823B> -<823C> <823D> -<823E> <823E> -<823F> <823F> -<8240> <8243> -<8244> <8244> -<8245> <8246> -<8247> <8247> -<8248> <8248> -<8249> <8249> -<824A> <824A> -<824B> <824B> -<824C> <824E> -<824F> <824F> -<8250> <8257> -<8258> <8258> -<8259> <8259> -<825A> <825A> -<825B> <825E> -<825F> <825F> -<8260> <8267> -<8268> <8268> -<8269> <8269> -<826A> <826D> -<826E> <826E> -endbfrange - -100 beginbfrange -<826F> <826F> -<8270> <8270> -<8271> <8271> -<8272> <8272> -<8273> <8273> -<8274> <8274> -<8275> <8278> -<8279> <8279> -<827A> <827A> -<827B> <827C> -<827D> <827D> -<827E> <827E> -<827F> <827F> -<8280> <8281> -<8282> <8282> -<8283> <8283> -<8284> <8284> -<8285> <8287> -<8288> <8288> -<8289> <8289> -<828A> <828A> -<828B> <828B> -<828C> <828C> -<828D> <828D> -<828E> <828E> -<828F> <828F> -<8290> <8290> -<8291> <8291> -<8292> <8292> -<8293> <8296> -<8297> <8297> -<8298> <8298> -<8299> <8299> -<829A> <829B> -<829C> <829C> -<829D> <829D> -<829E> <829E> -<829F> <829F> -<82A0> <82A0> -<82A1> <82A1> -<82A2> <82A3> -<82A4> <82A4> -<82A5> <82A5> -<82A6> <82A6> -<82A7> <82A7> -<82A8> <82A8> -<82A9> <82A9> -<82AA> <82AA> -<82AB> <82AB> -<82AC> <82AC> -<82AD> <82AD> -<82AE> <82AE> -<82AF> <82AF> -<82B0> <82B0> -<82B1> <82B1> -<82B2> <82B2> -<82B3> <82B3> -<82B4> <82B4> -<82B5> <82B6> -<82B7> <82B7> -<82B8> <82B8> -<82B9> <82B9> -<82BA> <82BC> -<82BD> <82BD> -<82BE> <82BE> -<82BF> <82C0> -<82C1> <82C1> -<82C2> <82C3> -<82C4> <82C4> -<82C5> <82C6> -<82C7> <82C7> -<82C8> <82C8> -<82C9> <82C9> -<82CA> <82CA> -<82CB> <82CC> -<82CD> <82CD> -<82CE> <82CE> -<82CF> <82CF> -<82D0> <82D0> -<82D1> <82D1> -<82D2> <82D2> -<82D3> <82D3> -<82D4> <82D4> -<82D5> <82D5> -<82D6> <82D6> -<82D7> <82D7> -<82D8> <82D8> -<82D9> <82DA> -<82DB> <82DB> -<82DC> <82DC> -<82DD> <82DD> -<82DE> <82DE> -<82DF> <82DF> -<82E0> <82E0> -<82E1> <82E1> -<82E2> <82E2> -<82E3> <82E3> -<82E4> <82E4> -<82E5> <82E5> -<82E6> <82E6> -endbfrange - -100 beginbfrange -<82E7> <82EA> -<82EB> <82EB> -<82EC> <82EE> -<82EF> <82EF> -<82F0> <82F0> -<82F1> <82F1> -<82F2> <82F3> -<82F4> <82F4> -<82F5> <82F6> -<82F7> <82F7> -<82F8> <82F8> -<82F9> <82F9> -<82FA> <82FA> -<82FB> <82FB> -<82FC> <82FF> -<8300> <8300> -<8301> <8301> -<8302> <8302> -<8303> <8303> -<8304> <8304> -<8305> <8305> -<8306> <8306> -<8307> <8307> -<8308> <8308> -<8309> <8309> -<830A> <830B> -<830C> <830C> -<830D> <830D> -<830E> <830E> -<830F> <830F> -<8310> <8310> -<8311> <8311> -<8312> <8313> -<8314> <8315> -<8316> <8316> -<8317> <8317> -<8318> <8319> -<831A> <831A> -<831B> <831B> -<831C> <831C> -<831D> <8326> -<8327> <8327> -<8328> <8328> -<8329> <832A> -<832B> <832B> -<832C> <832C> -<832D> <832D> -<832E> <832E> -<832F> <832F> -<8330> <8330> -<8331> <8331> -<8332> <8332> -<8333> <8333> -<8334> <8334> -<8335> <8335> -<8336> <8336> -<8337> <8337> -<8338> <8338> -<8339> <8339> -<833A> <833A> -<833B> <833B> -<833C> <833C> -<833D> <833D> -<833E> <833F> -<8340> <8340> -<8341> <8342> -<8343> <8343> -<8344> <8345> -<8346> <8346> -<8347> <8347> -<8348> <8348> -<8349> <8349> -<834A> <834E> -<834F> <834F> -<8350> <8350> -<8351> <8351> -<8352> <8352> -<8353> <8353> -<8354> <8354> -<8355> <8359> -<835A> <835A> -<835B> <835C> -<835D> <835D> -<835E> <835E> -<835F> <835F> -<8360> <8360> -<8361> <8361> -<8362> <8362> -<8363> <8363> -<8364> <8364> -<8365> <8365> -<8366> <8366> -<8367> <8367> -<8368> <8368> -<8369> <8369> -<836A> <836A> -<836B> <836B> -<836C> <836C> -<836D> <836E> -<836F> <836F> -endbfrange - -100 beginbfrange -<8370> <8376> -<8377> <8377> -<8378> <8378> -<8379> <837A> -<837B> <837B> -<837C> <837C> -<837D> <837D> -<837E> <8384> -<8385> <8385> -<8386> <8386> -<8387> <8388> -<8389> <8389> -<838A> <838D> -<838E> <838E> -<838F> <8391> -<8392> <8392> -<8393> <8393> -<8394> <8397> -<8398> <8398> -<8399> <839A> -<839B> <839B> -<839C> <839C> -<839D> <839D> -<839E> <839E> -<839F> <839F> -<83A0> <83A0> -<83A1> <83A7> -<83A8> <83A8> -<83A9> <83A9> -<83AA> <83AA> -<83AB> <83AB> -<83AC> <83AE> -<83AF> <83AF> -<83B0> <83B0> -<83B1> <83B1> -<83B2> <83B2> -<83B3> <83B4> -<83B5> <83B5> -<83B6> <83B6> -<83B7> <83B7> -<83B8> <83B8> -<83B9> <83B9> -<83BA> <83BA> -<83BB> <83BB> -<83BC> <83BC> -<83BD> <83BD> -<83BE> <83BF> -<83C0> <83C0> -<83C1> <83C1> -<83C2> <83C4> -<83C5> <83C5> -<83C6> <83C6> -<83C7> <83C7> -<83C8> <83C9> -<83CA> <83CA> -<83CB> <83CB> -<83CC> <83CC> -<83CD> <83CE> -<83CF> <83CF> -<83D0> <83D3> -<83D4> <83D4> -<83D5> <83D5> -<83D6> <83D6> -<83D7> <83D7> -<83D8> <83D8> -<83D9> <83DB> -<83DC> <83DC> -<83DD> <83DD> -<83DE> <83DE> -<83DF> <83DF> -<83E0> <83E0> -<83E1> <83E1> -<83E2> <83E4> -<83E5> <83E5> -<83E6> <83E8> -<83E9> <83E9> -<83EA> <83EA> -<83EB> <83ED> -<83EE> <83EF> -<83F0> <83F0> -<83F1> <83F1> -<83F2> <83F2> -<83F3> <83F7> -<83F8> <83F9> -<83FA> <83FC> -<83FD> <83FD> -<83FE> <83FF> -<8400> <8400> -<8401> <8401> -<8402> <8402> -<8403> <8403> -<8404> <8404> -<8405> <8405> -<8406> <8406> -<8407> <840A> -<840B> <840B> -<840C> <840C> -<840D> <840D> -<840E> <840E> -<840F> <840F> -endbfrange - -100 beginbfrange -<8410> <8410> -<8411> <8411> -<8412> <8417> -<8418> <8418> -<8419> <841B> -<841C> <841C> -<841D> <841D> -<841E> <8423> -<8424> <8425> -<8426> <8426> -<8427> <8427> -<8428> <8428> -<8429> <8430> -<8431> <8431> -<8432> <8437> -<8438> <8438> -<8439> <843B> -<843C> <843C> -<843D> <843D> -<843E> <8445> -<8446> <8446> -<8447> <8449> -<844A> <8450> -<8451> <8451> -<8452> <8456> -<8457> <8457> -<8458> <8458> -<8459> <8459> -<845A> <845A> -<845B> <845B> -<845C> <845C> -<845D> <8460> -<8461> <8461> -<8462> <8462> -<8463> <8463> -<8464> <8468> -<8469> <8469> -<846A> <846A> -<846B> <846B> -<846C> <846C> -<846D> <846D> -<846E> <8470> -<8471> <8471> -<8472> <8472> -<8473> <8473> -<8474> <8474> -<8475> <8475> -<8476> <8476> -<8477> <8477> -<8478> <8478> -<8479> <8479> -<847A> <847A> -<847B> <847C> -<847D> <8481> -<8482> <8482> -<8483> <8486> -<8487> <8488> -<8489> <8489> -<848A> <848A> -<848B> <848B> -<848C> <848C> -<848D> <848D> -<848E> <848E> -<848F> <8496> -<8497> <8497> -<8498> <8498> -<8499> <8499> -<849A> <849B> -<849C> <849C> -<849D> <84A0> -<84A1> <84A1> -<84A2> <84AE> -<84AF> <84AF> -<84B0> <84B1> -<84B2> <84B2> -<84B3> <84B3> -<84B4> <84B4> -<84B5> <84B7> -<84B8> <84B8> -<84B9> <84B9> -<84BA> <84BA> -<84BB> <84BC> -<84BD> <84BD> -<84BE> <84BE> -<84BF> <84BF> -<84C0> <84C0> -<84C1> <84C1> -<84C2> <84C3> -<84C4> <84C4> -<84C5> <84C8> -<84C9> <84C9> -<84CA> <84CA> -<84CB> <84CC> -<84CD> <84CD> -<84CE> <84CF> -<84D0> <84D0> -<84D1> <84D1> -<84D2> <84D2> -<84D3> <84D3> -<84D4> <84D5> -endbfrange - -100 beginbfrange -<84D6> <84D6> -<84D7> <84D7> -<84D8> <84DC> -<84DD> <84DD> -<84DE> <84DE> -<84DF> <84DF> -<84E0> <84E0> -<84E1> <84E2> -<84E3> <84E3> -<84E4> <84E4> -<84E5> <84E5> -<84E6> <84E6> -<84E7> <84EB> -<84EC> <84EC> -<84ED> <84EF> -<84F0> <84F0> -<84F1> <84FB> -<84FC> <84FC> -<84FD> <84FE> -<84FF> <84FF> -<8500> <8502> -<8503> <850B> -<850C> <850C> -<850D> <8510> -<8511> <8511> -<8512> <8512> -<8513> <8513> -<8514> <8516> -<8517> <8517> -<8518> <8519> -<851A> <851A> -<851B> <851E> -<851F> <851F> -<8520> <8520> -<8521> <8521> -<8522> <852A> -<852B> <852B> -<852C> <852C> -<852D> <8536> -<8537> <8537> -<8538> <8538> -<8539> <8539> -<853A> <853A> -<853B> <853B> -<853C> <853C> -<853D> <853D> -<853E> <8542> -<8543> <8543> -<8544> <8547> -<8548> <8548> -<8549> <8549> -<854A> <854A> -<854B> <8555> -<8556> <8556> -<8557> <8558> -<8559> <8559> -<855A> <855D> -<855E> <855E> -<855F> <8563> -<8564> <8564> -<8565> <8567> -<8568> <8568> -<8569> <8571> -<8572> <8572> -<8573> <8573> -<8574> <8574> -<8575> <8578> -<8579> <8579> -<857A> <857A> -<857B> <857B> -<857C> <857D> -<857E> <857E> -<857F> <8581> -<8582> <8583> -<8584> <8584> -<8585> <8585> -<8586> <8586> -<8587> <8587> -<8588> <858E> -<858F> <858F> -<8590> <859A> -<859B> <859B> -<859C> <859C> -<859D> <85A3> -<85A4> <85A4> -<85A5> <85A7> -<85A8> <85A8> -<85A9> <85A9> -<85AA> <85AA> -<85AB> <85AD> -<85AE> <85AE> -<85AF> <85AF> -<85B0> <85B0> -<85B1> <85B6> -<85B7> <85B7> -<85B8> <85B8> -<85B9> <85B9> -<85BA> <85C0> -<85C1> <85C1> -<85C2> <85C8> -endbfrange - -100 beginbfrange -<85C9> <85C9> -<85CA> <85CE> -<85CF> <85CF> -<85D0> <85D0> -<85D1> <85D2> -<85D3> <85D3> -<85D4> <85D4> -<85D5> <85D5> -<85D6> <85DB> -<85DC> <85DC> -<85DD> <85E3> -<85E4> <85E4> -<85E5> <85E8> -<85E9> <85E9> -<85EA> <85F8> -<85F9> <85FA> -<85FB> <85FB> -<85FC> <85FE> -<85FF> <85FF> -<8600> <8604> -<8605> <8605> -<8606> <8610> -<8611> <8611> -<8612> <8615> -<8616> <8616> -<8617> <8626> -<8627> <8627> -<8628> <8628> -<8629> <8629> -<862A> <8637> -<8638> <8638> -<8639> <863B> -<863C> <863C> -<863D> <8640> -<8641> <864C> -<864D> <864D> -<864E> <864E> -<864F> <864F> -<8650> <8650> -<8651> <8651> -<8652> <8653> -<8654> <8654> -<8655> <8659> -<865A> <865A> -<865B> <865D> -<865E> <865E> -<865F> <8661> -<8662> <8662> -<8663> <866A> -<866B> <866B> -<866C> <866C> -<866D> <866D> -<866E> <866E> -<866F> <8670> -<8671> <8671> -<8672> <8678> -<8679> <8679> -<867A> <867A> -<867B> <867B> -<867C> <867C> -<867D> <867D> -<867E> <867E> -<867F> <867F> -<8680> <8680> -<8681> <8681> -<8682> <8682> -<8683> <8689> -<868A> <868A> -<868B> <868B> -<868C> <868C> -<868D> <868D> -<868E> <8692> -<8693> <8693> -<8694> <8694> -<8695> <8695> -<8696> <869B> -<869C> <869C> -<869D> <869D> -<869E> <86A2> -<86A3> <86A3> -<86A4> <86A4> -<86A5> <86A6> -<86A7> <86A7> -<86A8> <86A8> -<86A9> <86A9> -<86AA> <86AA> -<86AB> <86AB> -<86AC> <86AC> -<86AD> <86AE> -<86AF> <86AF> -<86B0> <86B0> -<86B1> <86B1> -<86B2> <86B3> -<86B4> <86B4> -<86B5> <86B5> -<86B6> <86B6> -<86B7> <86B9> -<86BA> <86BA> -<86BB> <86BF> -<86C0> <86C0> -endbfrange - -100 beginbfrange -<86C1> <86C3> -<86C4> <86C4> -<86C5> <86C5> -<86C6> <86C6> -<86C7> <86C7> -<86C8> <86C8> -<86C9> <86C9> -<86CA> <86CA> -<86CB> <86CB> -<86CC> <86CD> -<86CE> <86CE> -<86CF> <86CF> -<86D0> <86D0> -<86D1> <86D1> -<86D2> <86D3> -<86D4> <86D4> -<86D5> <86D7> -<86D8> <86D8> -<86D9> <86D9> -<86DA> <86DA> -<86DB> <86DB> -<86DC> <86DC> -<86DD> <86DD> -<86DE> <86DE> -<86DF> <86DF> -<86E0> <86E3> -<86E4> <86E4> -<86E5> <86E8> -<86E9> <86E9> -<86EA> <86EC> -<86ED> <86ED> -<86EE> <86EE> -<86EF> <86EF> -<86F0> <86F0> -<86F1> <86F2> -<86F3> <86F3> -<86F4> <86F4> -<86F5> <86F7> -<86F8> <86F8> -<86F9> <86F9> -<86FA> <86FD> -<86FE> <86FE> -<86FF> <86FF> -<8700> <8700> -<8701> <8701> -<8702> <8702> -<8703> <8703> -<8704> <8706> -<8707> <8707> -<8708> <8708> -<8709> <8709> -<870A> <870A> -<870B> <870C> -<870D> <870D> -<870E> <8711> -<8712> <8712> -<8713> <8713> -<8714> <8714> -<8715> <8715> -<8716> <8716> -<8717> <8717> -<8718> <8718> -<8719> <8719> -<871A> <871A> -<871B> <871B> -<871C> <871C> -<871D> <871D> -<871E> <871E> -<871F> <8720> -<8721> <8721> -<8722> <8722> -<8723> <8723> -<8724> <8724> -<8725> <8725> -<8726> <8728> -<8729> <8729> -<872A> <872D> -<872E> <872E> -<872F> <8730> -<8731> <8731> -<8732> <8733> -<8734> <8734> -<8735> <8736> -<8737> <8737> -<8738> <873A> -<873B> <873B> -<873C> <873D> -<873E> <873E> -<873F> <873F> -<8740> <8746> -<8747> <8747> -<8748> <8748> -<8749> <8749> -<874A> <874B> -<874C> <874C> -<874D> <874D> -<874E> <874E> -<874F> <8752> -<8753> <8753> -<8754> <8756> -endbfrange - -100 beginbfrange -<8757> <8757> -<8758> <8758> -<8759> <8759> -<875A> <875F> -<8760> <8760> -<8761> <8762> -<8763> <8763> -<8764> <8764> -<8765> <8765> -<8766> <876D> -<876E> <876E> -<876F> <876F> -<8770> <8770> -<8771> <8773> -<8774> <8774> -<8775> <8775> -<8776> <8776> -<8777> <877A> -<877B> <877B> -<877C> <877C> -<877D> <877E> -<877F> <8781> -<8782> <8782> -<8783> <8783> -<8784> <8784> -<8785> <8785> -<8786> <8787> -<8788> <8788> -<8789> <878A> -<878B> <878B> -<878C> <878C> -<878D> <878D> -<878E> <8792> -<8793> <8793> -<8794> <8796> -<8797> <8797> -<8798> <879E> -<879F> <879F> -<87A0> <87A4> -<87A5> <87A7> -<87A8> <87A8> -<87A9> <87AA> -<87AB> <87AB> -<87AC> <87AC> -<87AD> <87AD> -<87AE> <87AE> -<87AF> <87AF> -<87B0> <87B2> -<87B3> <87B3> -<87B4> <87B4> -<87B5> <87B5> -<87B6> <87B9> -<87BA> <87BA> -<87BB> <87BC> -<87BD> <87BD> -<87BE> <87BF> -<87C0> <87C0> -<87C1> <87C5> -<87C6> <87C6> -<87C7> <87C9> -<87CA> <87CA> -<87CB> <87CB> -<87CC> <87D0> -<87D1> <87D1> -<87D2> <87D2> -<87D3> <87D3> -<87D4> <87DA> -<87DB> <87DB> -<87DC> <87DF> -<87E0> <87E0> -<87E1> <87E4> -<87E5> <87E5> -<87E6> <87E9> -<87EA> <87EA> -<87EB> <87ED> -<87EE> <87EE> -<87EF> <87F8> -<87F9> <87F9> -<87FA> <87FD> -<87FE> <87FE> -<87FF> <87FF> -<8800> <8802> -<8803> <8803> -<8804> <8809> -<880A> <880A> -<880B> <8812> -<8813> <8813> -<8814> <8814> -<8815> <8815> -<8816> <8816> -<8817> <881A> -<881B> <881B> -<881C> <8820> -<8821> <8821> -<8822> <8822> -<8823> <8823> -<8824> <8831> -<8832> <8832> -<8833> <8838> -<8839> <8839> -endbfrange - -100 beginbfrange -<883A> <883B> -<883C> <883C> -<883D> <883F> -<8840> <8840> -<8841> <8843> -<8844> <8844> -<8845> <8845> -<8846> <884B> -<884C> <884C> -<884D> <884D> -<884E> <8853> -<8854> <8854> -<8855> <8856> -<8857> <8857> -<8858> <8858> -<8859> <8859> -<885A> <8860> -<8861> <8861> -<8862> <8862> -<8863> <8863> -<8864> <8864> -<8865> <8865> -<8866> <8867> -<8868> <8868> -<8869> <8869> -<886A> <886A> -<886B> <886B> -<886C> <886C> -<886D> <886D> -<886E> <886E> -<886F> <886F> -<8870> <8870> -<8871> <8871> -<8872> <8872> -<8873> <8876> -<8877> <8877> -<8878> <887A> -<887B> <887C> -<887D> <887D> -<887E> <887E> -<887F> <887F> -<8880> <8880> -<8881> <8881> -<8882> <8882> -<8883> <8883> -<8884> <8884> -<8885> <8885> -<8886> <8887> -<8888> <8888> -<8889> <888A> -<888B> <888B> -<888C> <888C> -<888D> <888D> -<888E> <8891> -<8892> <8892> -<8893> <8895> -<8896> <8896> -<8897> <889B> -<889C> <889C> -<889D> <88A1> -<88A2> <88A2> -<88A3> <88A3> -<88A4> <88A4> -<88A5> <88AA> -<88AB> <88AB> -<88AC> <88AC> -<88AD> <88AD> -<88AE> <88B0> -<88B1> <88B1> -<88B2> <88B6> -<88B7> <88B7> -<88B8> <88BB> -<88BC> <88BC> -<88BD> <88C0> -<88C1> <88C1> -<88C2> <88C2> -<88C3> <88C4> -<88C5> <88C5> -<88C6> <88C6> -<88C7> <88C8> -<88C9> <88C9> -<88CA> <88CD> -<88CE> <88CE> -<88CF> <88D1> -<88D2> <88D2> -<88D3> <88D3> -<88D4> <88D4> -<88D5> <88D5> -<88D6> <88D7> -<88D8> <88D8> -<88D9> <88D9> -<88DA> <88DE> -<88DF> <88DF> -<88E0> <88E1> -<88E2> <88E2> -<88E3> <88E3> -<88E4> <88E4> -<88E5> <88E5> -<88E6> <88E7> -<88E8> <88E8> -endbfrange - -100 beginbfrange -<88E9> <88EF> -<88F0> <88F0> -<88F1> <88F1> -<88F2> <88F2> -<88F3> <88F3> -<88F4> <88F4> -<88F5> <88F7> -<88F8> <88F8> -<88F9> <88F9> -<88FA> <88FB> -<88FC> <88FC> -<88FD> <88FD> -<88FE> <88FE> -<88FF> <88FF> -<8900> <8901> -<8902> <8902> -<8903> <8908> -<8909> <8909> -<890A> <890A> -<890B> <890F> -<8910> <8910> -<8911> <8911> -<8912> <8912> -<8913> <8913> -<8914> <8918> -<8919> <8919> -<891A> <891A> -<891B> <891B> -<891C> <8920> -<8921> <8921> -<8922> <8924> -<8925> <8925> -<8926> <8929> -<892A> <892A> -<892B> <892B> -<892C> <892F> -<8930> <8930> -<8931> <8933> -<8934> <8934> -<8935> <8935> -<8936> <8936> -<8937> <8937> -<8938> <8940> -<8941> <8941> -<8942> <8943> -<8944> <8944> -<8945> <895D> -<895E> <895E> -<895F> <895F> -<8960> <8965> -<8966> <8966> -<8967> <897A> -<897B> <897B> -<897C> <897C> -<897D> <897E> -<897F> <897F> -<8980> <8980> -<8981> <8981> -<8982> <8982> -<8983> <8983> -<8984> <8985> -<8986> <8986> -<8987> <89A1> -<89A2> <89C0> -<89C1> <89C1> -<89C2> <89C2> -<89C3> <89C3> -<89C4> <89C4> -<89C5> <89C5> -<89C6> <89C6> -<89C7> <89C7> -<89C8> <89C8> -<89C9> <89C9> -<89CA> <89CC> -<89CD> <89CD> -<89CE> <89D1> -<89D2> <89D2> -<89D3> <89D5> -<89D6> <89D6> -<89D7> <89D9> -<89DA> <89DA> -<89DB> <89DB> -<89DC> <89DC> -<89DD> <89DD> -<89DE> <89DE> -<89DF> <89E2> -<89E3> <89E3> -<89E4> <89E4> -<89E5> <89E5> -<89E6> <89E6> -<89E7> <89EA> -<89EB> <89EB> -<89EC> <89EE> -<89EF> <89EF> -<89F0> <89F2> -<89F3> <89F3> -<89F4> <89FA> -<89FB> <89FF> -<8A00> <8A00> -<8A01> <8A06> -endbfrange - -100 beginbfrange -<8A07> <8A07> -<8A08> <8A1D> -<8A1E> <8A3D> -<8A3E> <8A3E> -<8A3F> <8A47> -<8A48> <8A48> -<8A49> <8A5E> -<8A5F> <8A78> -<8A79> <8A79> -<8A7A> <8A80> -<8A81> <8A88> -<8A89> <8A89> -<8A8A> <8A8A> -<8A8B> <8A92> -<8A93> <8A93> -<8A94> <8AC2> -<8AC3> <8AE3> -<8AE4> <8AFF> -<8B00> <8B06> -<8B07> <8B07> -<8B08> <8B23> -<8B24> <8B25> -<8B26> <8B26> -<8B27> <8B45> -<8B46> <8B65> -<8B66> <8B66> -<8B67> <8B6B> -<8B6C> <8B6C> -<8B6D> <8B86> -<8B87> <8B9F> -<8BA0> <8BA0> -<8BA1> <8BA1> -<8BA2> <8BA2> -<8BA3> <8BA3> -<8BA4> <8BA4> -<8BA5> <8BA5> -<8BA6> <8BA7> -<8BA8> <8BA8> -<8BA9> <8BA9> -<8BAA> <8BAA> -<8BAB> <8BAB> -<8BAC> <8BAC> -<8BAD> <8BAD> -<8BAE> <8BAE> -<8BAF> <8BAF> -<8BB0> <8BB0> -<8BB1> <8BB1> -<8BB2> <8BB2> -<8BB3> <8BB3> -<8BB4> <8BB5> -<8BB6> <8BB6> -<8BB7> <8BB7> -<8BB8> <8BB8> -<8BB9> <8BB9> -<8BBA> <8BBA> -<8BBB> <8BBB> -<8BBC> <8BBC> -<8BBD> <8BBD> -<8BBE> <8BBE> -<8BBF> <8BBF> -<8BC0> <8BC0> -<8BC1> <8BC1> -<8BC2> <8BC3> -<8BC4> <8BC4> -<8BC5> <8BC5> -<8BC6> <8BC6> -<8BC7> <8BC7> -<8BC8> <8BC8> -<8BC9> <8BC9> -<8BCA> <8BCA> -<8BCB> <8BCB> -<8BCC> <8BCC> -<8BCD> <8BCD> -<8BCE> <8BCE> -<8BCF> <8BCF> -<8BD0> <8BD0> -<8BD1> <8BD1> -<8BD2> <8BD4> -<8BD5> <8BD5> -<8BD6> <8BD6> -<8BD7> <8BD7> -<8BD8> <8BD9> -<8BDA> <8BDA> -<8BDB> <8BDB> -<8BDC> <8BDC> -<8BDD> <8BDD> -<8BDE> <8BDE> -<8BDF> <8BE0> -<8BE1> <8BE1> -<8BE2> <8BE2> -<8BE3> <8BE3> -<8BE4> <8BE4> -<8BE5> <8BE5> -<8BE6> <8BE6> -<8BE7> <8BE7> -<8BE8> <8BE9> -<8BEA> <8BEA> -<8BEB> <8BEB> -<8BEC> <8BEC> -<8BED> <8BED> -endbfrange - -100 beginbfrange -<8BEE> <8BEE> -<8BEF> <8BEF> -<8BF0> <8BF0> -<8BF1> <8BF1> -<8BF2> <8BF2> -<8BF3> <8BF3> -<8BF4> <8BF4> -<8BF5> <8BF5> -<8BF6> <8BF6> -<8BF7> <8BF7> -<8BF8> <8BF8> -<8BF9> <8BF9> -<8BFA> <8BFA> -<8BFB> <8BFB> -<8BFC> <8BFC> -<8BFD> <8BFD> -<8BFE> <8BFE> -<8BFF> <8BFF> -<8C00> <8C00> -<8C01> <8C01> -<8C02> <8C02> -<8C03> <8C03> -<8C04> <8C04> -<8C05> <8C05> -<8C06> <8C06> -<8C07> <8C07> -<8C08> <8C08> -<8C09> <8C09> -<8C0A> <8C0A> -<8C0B> <8C0B> -<8C0C> <8C0C> -<8C0D> <8C0D> -<8C0E> <8C0E> -<8C0F> <8C0F> -<8C10> <8C10> -<8C11> <8C12> -<8C13> <8C13> -<8C14> <8C16> -<8C17> <8C17> -<8C18> <8C18> -<8C19> <8C19> -<8C1A> <8C1A> -<8C1B> <8C1B> -<8C1C> <8C1C> -<8C1D> <8C1D> -<8C1E> <8C1E> -<8C1F> <8C21> -<8C22> <8C22> -<8C23> <8C23> -<8C24> <8C24> -<8C25> <8C25> -<8C26> <8C26> -<8C27> <8C27> -<8C28> <8C28> -<8C29> <8C29> -<8C2A> <8C2B> -<8C2C> <8C2C> -<8C2D> <8C2D> -<8C2E> <8C2F> -<8C30> <8C30> -<8C31> <8C31> -<8C32> <8C33> -<8C34> <8C34> -<8C35> <8C36> -<8C37> <8C37> -<8C38> <8C40> -<8C41> <8C41> -<8C42> <8C45> -<8C46> <8C46> -<8C47> <8C47> -<8C48> <8C48> -<8C49> <8C49> -<8C4A> <8C4B> -<8C4C> <8C4C> -<8C4D> <8C54> -<8C55> <8C55> -<8C56> <8C59> -<8C5A> <8C5A> -<8C5B> <8C60> -<8C61> <8C61> -<8C62> <8C62> -<8C63> <8C69> -<8C6A> <8C6A> -<8C6B> <8C6B> -<8C6C> <8C72> -<8C73> <8C73> -<8C74> <8C77> -<8C78> <8C78> -<8C79> <8C79> -<8C7A> <8C7A> -<8C7B> <8C81> -<8C82> <8C82> -<8C83> <8C84> -<8C85> <8C85> -<8C86> <8C87> -<8C88> <8C88> -<8C89> <8C89> -<8C8A> <8C8A> -<8C8B> <8C8B> -<8C8C> <8C8C> -endbfrange - -100 beginbfrange -<8C8D> <8C93> -<8C94> <8C94> -<8C95> <8C97> -<8C98> <8C98> -<8C99> <8CAD> -<8CAE> <8CEC> -<8CED> <8CFF> -<8D00> <8D0D> -<8D0E> <8D1C> -<8D1D> <8D1D> -<8D1E> <8D1E> -<8D1F> <8D1F> -<8D20> <8D20> -<8D21> <8D21> -<8D22> <8D22> -<8D23> <8D23> -<8D24> <8D24> -<8D25> <8D25> -<8D26> <8D26> -<8D27> <8D27> -<8D28> <8D28> -<8D29> <8D29> -<8D2A> <8D2A> -<8D2B> <8D2B> -<8D2C> <8D2C> -<8D2D> <8D2D> -<8D2E> <8D2E> -<8D2F> <8D2F> -<8D30> <8D30> -<8D31> <8D31> -<8D32> <8D33> -<8D34> <8D34> -<8D35> <8D35> -<8D36> <8D36> -<8D37> <8D37> -<8D38> <8D38> -<8D39> <8D39> -<8D3A> <8D3A> -<8D3B> <8D3B> -<8D3C> <8D3C> -<8D3D> <8D3D> -<8D3E> <8D3E> -<8D3F> <8D3F> -<8D40> <8D40> -<8D41> <8D41> -<8D42> <8D42> -<8D43> <8D43> -<8D44> <8D44> -<8D45> <8D46> -<8D47> <8D47> -<8D48> <8D49> -<8D4A> <8D4A> -<8D4B> <8D4B> -<8D4C> <8D4C> -<8D4D> <8D4D> -<8D4E> <8D4E> -<8D4F> <8D4F> -<8D50> <8D50> -<8D51> <8D52> -<8D53> <8D53> -<8D54> <8D54> -<8D55> <8D55> -<8D56> <8D56> -<8D57> <8D57> -<8D58> <8D58> -<8D59> <8D59> -<8D5A> <8D5A> -<8D5B> <8D5B> -<8D5C> <8D5C> -<8D5D> <8D5D> -<8D5E> <8D5E> -<8D5F> <8D5F> -<8D60> <8D60> -<8D61> <8D61> -<8D62> <8D62> -<8D63> <8D63> -<8D64> <8D64> -<8D65> <8D65> -<8D66> <8D66> -<8D67> <8D67> -<8D68> <8D6A> -<8D6B> <8D6B> -<8D6C> <8D6C> -<8D6D> <8D6D> -<8D6E> <8D6F> -<8D70> <8D70> -<8D71> <8D72> -<8D73> <8D73> -<8D74> <8D74> -<8D75> <8D75> -<8D76> <8D76> -<8D77> <8D77> -<8D78> <8D80> -<8D81> <8D81> -<8D82> <8D83> -<8D84> <8D84> -<8D85> <8D85> -<8D86> <8D89> -<8D8A> <8D8A> -<8D8B> <8D8B> -endbfrange - -100 beginbfrange -<8D8C> <8D90> -<8D91> <8D91> -<8D92> <8D93> -<8D94> <8D94> -<8D95> <8D9E> -<8D9F> <8D9F> -<8DA0> <8DA1> -<8DA2> <8DA2> -<8DA3> <8DA3> -<8DA4> <8DB0> -<8DB1> <8DB1> -<8DB2> <8DB2> -<8DB3> <8DB3> -<8DB4> <8DB4> -<8DB5> <8DB5> -<8DB6> <8DB7> -<8DB8> <8DB8> -<8DB9> <8DB9> -<8DBA> <8DBA> -<8DBB> <8DBB> -<8DBC> <8DBC> -<8DBD> <8DBD> -<8DBE> <8DBE> -<8DBF> <8DBF> -<8DC0> <8DC2> -<8DC3> <8DC3> -<8DC4> <8DC4> -<8DC5> <8DC5> -<8DC6> <8DC6> -<8DC7> <8DCA> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCD> <8DCD> -<8DCE> <8DCF> -<8DD0> <8DD0> -<8DD1> <8DD1> -<8DD2> <8DD4> -<8DD5> <8DD5> -<8DD6> <8DD7> -<8DD8> <8DD9> -<8DDA> <8DDA> -<8DDB> <8DDB> -<8DDC> <8DDC> -<8DDD> <8DDD> -<8DDE> <8DDE> -<8DDF> <8DDF> -<8DE0> <8DE2> -<8DE3> <8DE3> -<8DE4> <8DE4> -<8DE5> <8DE7> -<8DE8> <8DE8> -<8DE9> <8DE9> -<8DEA> <8DEA> -<8DEB> <8DEB> -<8DEC> <8DEC> -<8DED> <8DEE> -<8DEF> <8DEF> -<8DF0> <8DF2> -<8DF3> <8DF3> -<8DF4> <8DF4> -<8DF5> <8DF5> -<8DF6> <8DF6> -<8DF7> <8DF8> -<8DF9> <8DF9> -<8DFA> <8DFA> -<8DFB> <8DFB> -<8DFC> <8DFC> -<8DFD> <8DFD> -<8DFE> <8DFF> -<8E00> <8E04> -<8E05> <8E05> -<8E06> <8E08> -<8E09> <8E09> -<8E0A> <8E0A> -<8E0B> <8E0B> -<8E0C> <8E0C> -<8E0D> <8E0E> -<8E0F> <8E0F> -<8E10> <8E13> -<8E14> <8E14> -<8E15> <8E1C> -<8E1D> <8E1D> -<8E1E> <8E1E> -<8E1F> <8E1F> -<8E20> <8E21> -<8E22> <8E22> -<8E23> <8E23> -<8E24> <8E28> -<8E29> <8E29> -<8E2A> <8E2A> -<8E2B> <8E2B> -<8E2C> <8E2C> -<8E2D> <8E2D> -<8E2E> <8E2E> -<8E2F> <8E2F> -<8E30> <8E30> -<8E31> <8E31> -<8E32> <8E34> -<8E35> <8E35> -<8E36> <8E38> -endbfrange - -100 beginbfrange -<8E39> <8E39> -<8E3A> <8E3A> -<8E3B> <8E3C> -<8E3D> <8E3D> -<8E3E> <8E3E> -<8E3F> <8E3F> -<8E40> <8E40> -<8E41> <8E42> -<8E43> <8E43> -<8E44> <8E44> -<8E45> <8E46> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E4B> <8E4B> -<8E4C> <8E50> -<8E51> <8E52> -<8E53> <8E58> -<8E59> <8E59> -<8E5A> <8E65> -<8E66> <8E66> -<8E67> <8E68> -<8E69> <8E69> -<8E6A> <8E6B> -<8E6C> <8E6C> -<8E6D> <8E6D> -<8E6E> <8E6E> -<8E6F> <8E6F> -<8E70> <8E70> -<8E71> <8E71> -<8E72> <8E72> -<8E73> <8E73> -<8E74> <8E74> -<8E75> <8E75> -<8E76> <8E76> -<8E77> <8E7B> -<8E7C> <8E7C> -<8E7D> <8E7E> -<8E7F> <8E7F> -<8E80> <8E80> -<8E81> <8E81> -<8E82> <8E84> -<8E85> <8E85> -<8E86> <8E86> -<8E87> <8E87> -<8E88> <8E8E> -<8E8F> <8E8F> -<8E90> <8E90> -<8E91> <8E93> -<8E94> <8E94> -<8E95> <8E9B> -<8E9C> <8E9C> -<8E9D> <8E9D> -<8E9E> <8E9E> -<8E9F> <8EAA> -<8EAB> <8EAB> -<8EAC> <8EAC> -<8EAD> <8EAE> -<8EAF> <8EAF> -<8EB0> <8EB1> -<8EB2> <8EB2> -<8EB3> <8EB9> -<8EBA> <8EBA> -<8EBB> <8EC2> -<8EC3> <8ECD> -<8ECE> <8ECE> -<8ECF> <8EE4> -<8EE5> <8EFF> -<8F00> <8F23> -<8F24> <8F44> -<8F45> <8F65> -<8F66> <8F66> -<8F67> <8F67> -<8F68> <8F68> -<8F69> <8F69> -<8F6A> <8F6A> -<8F6B> <8F6B> -<8F6C> <8F6C> -<8F6D> <8F6D> -<8F6E> <8F6E> -<8F6F> <8F6F> -<8F70> <8F70> -<8F71> <8F73> -<8F74> <8F74> -<8F75> <8F76> -<8F77> <8F77> -<8F78> <8F78> -<8F79> <8F7A> -<8F7B> <8F7B> -<8F7C> <8F7C> -<8F7D> <8F7D> -<8F7E> <8F7E> -<8F7F> <8F7F> -<8F80> <8F80> -<8F81> <8F82> -<8F83> <8F83> -<8F84> <8F84> -<8F85> <8F85> -<8F86> <8F86> -endbfrange - -100 beginbfrange -<8F87> <8F87> -<8F88> <8F88> -<8F89> <8F89> -<8F8A> <8F8A> -<8F8B> <8F8B> -<8F8C> <8F8C> -<8F8D> <8F8F> -<8F90> <8F90> -<8F91> <8F91> -<8F92> <8F92> -<8F93> <8F93> -<8F94> <8F94> -<8F95> <8F95> -<8F96> <8F96> -<8F97> <8F97> -<8F98> <8F98> -<8F99> <8F99> -<8F9A> <8F9A> -<8F9B> <8F9B> -<8F9C> <8F9C> -<8F9D> <8F9D> -<8F9E> <8F9E> -<8F9F> <8F9F> -<8FA0> <8FA2> -<8FA3> <8FA3> -<8FA4> <8FA7> -<8FA8> <8FA9> -<8FAA> <8FAA> -<8FAB> <8FAB> -<8FAC> <8FAF> -<8FB0> <8FB0> -<8FB1> <8FB1> -<8FB2> <8FB5> -<8FB6> <8FB6> -<8FB7> <8FB8> -<8FB9> <8FB9> -<8FBA> <8FBC> -<8FBD> <8FBD> -<8FBE> <8FBE> -<8FBF> <8FC0> -<8FC1> <8FC1> -<8FC2> <8FC2> -<8FC3> <8FC3> -<8FC4> <8FC4> -<8FC5> <8FC5> -<8FC6> <8FC6> -<8FC7> <8FC7> -<8FC8> <8FC8> -<8FC9> <8FCD> -<8FCE> <8FCE> -<8FCF> <8FCF> -<8FD0> <8FD0> -<8FD1> <8FD1> -<8FD2> <8FD2> -<8FD3> <8FD3> -<8FD4> <8FD4> -<8FD5> <8FD5> -<8FD6> <8FD7> -<8FD8> <8FD8> -<8FD9> <8FD9> -<8FDA> <8FDA> -<8FDB> <8FDB> -<8FDC> <8FDC> -<8FDD> <8FDD> -<8FDE> <8FDE> -<8FDF> <8FDF> -<8FE0> <8FE1> -<8FE2> <8FE2> -<8FE3> <8FE3> -<8FE4> <8FE4> -<8FE5> <8FE5> -<8FE6> <8FE6> -<8FE7> <8FE7> -<8FE8> <8FE8> -<8FE9> <8FE9> -<8FEA> <8FEA> -<8FEB> <8FEB> -<8FEC> <8FEC> -<8FED> <8FED> -<8FEE> <8FEE> -<8FEF> <8FEF> -<8FF0> <8FF0> -<8FF1> <8FF2> -<8FF3> <8FF3> -<8FF4> <8FF6> -<8FF7> <8FF7> -<8FF8> <8FF8> -<8FF9> <8FF9> -<8FFA> <8FFC> -<8FFD> <8FFD> -<8FFE> <8FFF> -<9000> <9000> -<9001> <9001> -<9002> <9002> -<9003> <9003> -<9004> <9004> -<9005> <9005> -<9006> <9006> -<9007> <9008> -<9009> <9009> -endbfrange - -100 beginbfrange -<900A> <900A> -<900B> <900B> -<900C> <900C> -<900D> <900D> -<900E> <900E> -<900F> <900F> -<9010> <9010> -<9011> <9011> -<9012> <9012> -<9013> <9013> -<9014> <9014> -<9015> <9015> -<9016> <9016> -<9017> <9017> -<9018> <9018> -<9019> <9019> -<901A> <901A> -<901B> <901B> -<901C> <901C> -<901D> <901D> -<901E> <901E> -<901F> <901F> -<9020> <9020> -<9021> <9021> -<9022> <9022> -<9023> <9025> -<9026> <9026> -<9027> <902C> -<902D> <902D> -<902E> <902E> -<902F> <902F> -<9030> <9034> -<9035> <9036> -<9037> <9037> -<9038> <9038> -<9039> <903A> -<903B> <903B> -<903C> <903C> -<903D> <903D> -<903E> <903E> -<903F> <9040> -<9041> <9041> -<9042> <9042> -<9043> <9043> -<9044> <9044> -<9045> <9046> -<9047> <9047> -<9048> <904C> -<904D> <904D> -<904E> <904E> -<904F> <904F> -<9050> <9050> -<9051> <9052> -<9053> <9053> -<9054> <9056> -<9057> <9057> -<9058> <9058> -<9059> <905A> -<905B> <905B> -<905C> <9061> -<9062> <9062> -<9063> <9063> -<9064> <9064> -<9065> <9065> -<9066> <9067> -<9068> <9068> -<9069> <906C> -<906D> <906D> -<906E> <906E> -<906F> <9073> -<9074> <9074> -<9075> <9075> -<9076> <907C> -<907D> <907D> -<907E> <907E> -<907F> <907F> -<9080> <9080> -<9081> <9081> -<9082> <9082> -<9083> <9083> -<9084> <9087> -<9088> <9088> -<9089> <908A> -<908B> <908B> -<908C> <9090> -<9091> <9091> -<9092> <9092> -<9093> <9093> -<9094> <9094> -<9095> <9095> -<9096> <9096> -<9097> <9097> -<9098> <9098> -<9099> <9099> -<909A> <909A> -<909B> <909B> -<909C> <909C> -<909D> <909D> -<909E> <90A0> -<90A1> <90A1> -endbfrange - -100 beginbfrange -<90A2> <90A2> -<90A3> <90A3> -<90A4> <90A5> -<90A6> <90A6> -<90A7> <90A9> -<90AA> <90AA> -<90AB> <90AB> -<90AC> <90AC> -<90AD> <90AD> -<90AE> <90AE> -<90AF> <90AF> -<90B0> <90B0> -<90B1> <90B1> -<90B2> <90B2> -<90B3> <90B3> -<90B4> <90B4> -<90B5> <90B5> -<90B6> <90B6> -<90B7> <90B7> -<90B8> <90B8> -<90B9> <90B9> -<90BA> <90BA> -<90BB> <90BB> -<90BC> <90BD> -<90BE> <90BE> -<90BF> <90C0> -<90C1> <90C1> -<90C2> <90C3> -<90C4> <90C4> -<90C5> <90C5> -<90C6> <90C6> -<90C7> <90C7> -<90C8> <90C9> -<90CA> <90CA> -<90CB> <90CD> -<90CE> <90CE> -<90CF> <90CF> -<90D0> <90D0> -<90D1> <90D1> -<90D2> <90D2> -<90D3> <90D3> -<90D4> <90D6> -<90D7> <90D7> -<90D8> <90DA> -<90DB> <90DB> -<90DC> <90DC> -<90DD> <90DD> -<90DE> <90E0> -<90E1> <90E1> -<90E2> <90E2> -<90E3> <90E5> -<90E6> <90E6> -<90E7> <90E7> -<90E8> <90E8> -<90E9> <90EA> -<90EB> <90EB> -<90EC> <90EC> -<90ED> <90ED> -<90EE> <90EE> -<90EF> <90EF> -<90F0> <90F3> -<90F4> <90F4> -<90F5> <90F7> -<90F8> <90F8> -<90F9> <90FC> -<90FD> <90FD> -<90FE> <90FE> -<90FF> <90FF> -<9100> <9101> -<9102> <9102> -<9103> <9103> -<9104> <9104> -<9105> <9118> -<9119> <9119> -<911A> <911C> -<911D> <911D> -<911E> <911E> -<911F> <9121> -<9122> <9122> -<9123> <9123> -<9124> <912E> -<912F> <912F> -<9130> <9130> -<9131> <9131> -<9132> <9138> -<9139> <9139> -<913A> <9142> -<9143> <9143> -<9144> <9144> -<9145> <9145> -<9146> <9146> -<9147> <9148> -<9149> <9149> -<914A> <914A> -<914B> <914B> -<914C> <914C> -<914D> <914D> -<914E> <914F> -<9150> <9150> -<9151> <9151> -endbfrange - -100 beginbfrange -<9152> <9152> -<9153> <9156> -<9157> <9157> -<9158> <9159> -<915A> <915A> -<915B> <915C> -<915D> <915D> -<915E> <915E> -<915F> <9160> -<9161> <9161> -<9162> <9162> -<9163> <9163> -<9164> <9164> -<9165> <9165> -<9166> <9168> -<9169> <9169> -<916A> <916A> -<916B> <916B> -<916C> <916C> -<916D> <916D> -<916E> <916E> -<916F> <916F> -<9170> <9170> -<9171> <9171> -<9172> <9172> -<9173> <9173> -<9174> <9174> -<9175> <9175> -<9176> <9176> -<9177> <9177> -<9178> <9178> -<9179> <9179> -<917A> <917C> -<917D> <917E> -<917F> <917F> -<9180> <9184> -<9185> <9185> -<9186> <9186> -<9187> <9187> -<9188> <9188> -<9189> <9189> -<918A> <918A> -<918B> <918B> -<918C> <918C> -<918D> <918D> -<918E> <918F> -<9190> <9190> -<9191> <9191> -<9192> <9192> -<9193> <9199> -<919A> <919A> -<919B> <919B> -<919C> <91A1> -<91A2> <91A3> -<91A4> <91A9> -<91AA> <91AA> -<91AB> <91AC> -<91AD> <91AF> -<91B0> <91B3> -<91B4> <91B4> -<91B5> <91B5> -<91B6> <91B9> -<91BA> <91BA> -<91BB> <91BB> -<91BC> <91C6> -<91C7> <91C7> -<91C8> <91C8> -<91C9> <91C9> -<91CA> <91CA> -<91CB> <91CB> -<91CC> <91CC> -<91CD> <91CD> -<91CE> <91CE> -<91CF> <91CF> -<91D0> <91D0> -<91D1> <91D1> -<91D2> <91DB> -<91DC> <91DC> -<91DD> <91E5> -<91E6> <91FF> -<9200> <9224> -<9225> <9245> -<9246> <9273> -<9274> <9274> -<9275> <9285> -<9286> <928D> -<928E> <928E> -<928F> <92A7> -<92A8> <92AD> -<92AE> <92AE> -<92AF> <92C7> -<92C8> <92C8> -<92C9> <92E8> -<92E9> <92FF> -<9300> <9309> -<930A> <933D> -<933E> <933E> -<933F> <9349> -<934A> <9369> -<936A> <936A> -endbfrange - -100 beginbfrange -<936B> <936B> -<936C> <938E> -<938F> <938F> -<9390> <93AB> -<93AC> <93C9> -<93CA> <93CA> -<93CB> <93CD> -<93CE> <93D5> -<93D6> <93D6> -<93D7> <93FF> -<9400> <940D> -<940E> <942E> -<942F> <943D> -<943E> <943E> -<943F> <946A> -<946B> <946B> -<946C> <946F> -<9470> <9484> -<9485> <9487> -<9488> <9488> -<9489> <9489> -<948A> <948A> -<948B> <948B> -<948C> <948D> -<948E> <948E> -<948F> <9490> -<9491> <9491> -<9492> <9492> -<9493> <9493> -<9494> <9494> -<9495> <9495> -<9496> <9496> -<9497> <9497> -<9498> <9498> -<9499> <9499> -<949A> <949C> -<949D> <949D> -<949E> <949E> -<949F> <949F> -<94A0> <94A0> -<94A1> <94A1> -<94A2> <94A2> -<94A3> <94A4> -<94A5> <94A5> -<94A6> <94A6> -<94A7> <94A7> -<94A8> <94A8> -<94A9> <94A9> -<94AA> <94AA> -<94AB> <94AB> -<94AC> <94AC> -<94AD> <94AD> -<94AE> <94AE> -<94AF> <94B0> -<94B1> <94B1> -<94B2> <94B2> -<94B3> <94B3> -<94B4> <94B4> -<94B5> <94B5> -<94B6> <94BA> -<94BB> <94BB> -<94BC> <94BD> -<94BE> <94BE> -<94BF> <94BF> -<94C0> <94C0> -<94C1> <94C1> -<94C2> <94C2> -<94C3> <94C3> -<94C4> <94C4> -<94C5> <94C5> -<94C6> <94C6> -<94C7> <94C7> -<94C8> <94CE> -<94CF> <94CF> -<94D0> <94D2> -<94D3> <94D4> -<94D5> <94D7> -<94D8> <94D8> -<94D9> <94D9> -<94DA> <94DA> -<94DB> <94DB> -<94DC> <94DC> -<94DD> <94DD> -<94DE> <94E0> -<94E1> <94E1> -<94E2> <94E2> -<94E3> <94E3> -<94E4> <94E5> -<94E6> <94E6> -<94E7> <94E8> -<94E9> <94E9> -<94EA> <94EA> -<94EB> <94EB> -<94EC> <94EC> -<94ED> <94ED> -<94EE> <94EF> -<94F0> <94F0> -<94F1> <94F1> -<94F2> <94F2> -<94F3> <94F5> -endbfrange - -100 beginbfrange -<94F6> <94F6> -<94F7> <94F7> -<94F8> <94F8> -<94F9> <94F9> -<94FA> <94FA> -<94FB> <94FB> -<94FC> <94FD> -<94FE> <94FE> -<94FF> <94FF> -<9500> <9500> -<9501> <9501> -<9502> <9502> -<9503> <9503> -<9504> <9504> -<9505> <9505> -<9506> <9507> -<9508> <9508> -<9509> <950A> -<950B> <950B> -<950C> <950C> -<950D> <950F> -<9510> <9510> -<9511> <9511> -<9512> <9516> -<9517> <9517> -<9518> <9518> -<9519> <9519> -<951A> <951A> -<951B> <951B> -<951C> <951C> -<951D> <951F> -<9520> <9520> -<9521> <9521> -<9522> <9522> -<9523> <9523> -<9524> <9524> -<9525> <9525> -<9526> <9526> -<9527> <9527> -<9528> <9528> -<9529> <9529> -<952A> <952B> -<952C> <952C> -<952D> <952D> -<952E> <952E> -<952F> <952F> -<9530> <9530> -<9531> <9532> -<9533> <9533> -<9534> <9534> -<9535> <9535> -<9536> <9538> -<9539> <9539> -<953A> <953A> -<953B> <953B> -<953C> <953C> -<953D> <953D> -<953E> <953F> -<9540> <9540> -<9541> <9541> -<9542> <9542> -<9543> <9543> -<9544> <9546> -<9547> <9547> -<9548> <9548> -<9549> <9549> -<954A> <954A> -<954B> <954B> -<954C> <954C> -<954D> <954D> -<954E> <954F> -<9550> <9550> -<9551> <9551> -<9552> <9554> -<9555> <9555> -<9556> <9559> -<955A> <955A> -<955B> <955B> -<955C> <955C> -<955D> <955D> -<955E> <955F> -<9560> <9560> -<9561> <9562> -<9563> <9563> -<9564> <956C> -<956D> <956D> -<956E> <956E> -<956F> <956F> -<9570> <9570> -<9571> <9573> -<9574> <9575> -<9576> <9576> -<9577> <957E> -<957F> <957F> -<9580> <95AA> -<95AB> <95CB> -<95CC> <95E7> -<95E8> <95E8> -<95E9> <95E9> -<95EA> <95EA> -endbfrange - -100 beginbfrange -<95EB> <95EB> -<95EC> <95EC> -<95ED> <95ED> -<95EE> <95EE> -<95EF> <95EF> -<95F0> <95F0> -<95F1> <95F1> -<95F2> <95F2> -<95F3> <95F3> -<95F4> <95F4> -<95F5> <95F6> -<95F7> <95F7> -<95F8> <95F8> -<95F9> <95F9> -<95FA> <95FA> -<95FB> <95FB> -<95FC> <95FC> -<95FD> <95FD> -<95FE> <95FE> -<95FF> <95FF> -<9600> <9600> -<9601> <9601> -<9602> <9602> -<9603> <9604> -<9605> <9605> -<9606> <9606> -<9607> <9607> -<9608> <9608> -<9609> <9609> -<960A> <960D> -<960E> <960E> -<960F> <960F> -<9610> <9610> -<9611> <9611> -<9612> <9612> -<9613> <9613> -<9614> <9614> -<9615> <9617> -<9618> <9618> -<9619> <961A> -<961B> <961B> -<961C> <961C> -<961D> <961D> -<961E> <961E> -<961F> <961F> -<9620> <9620> -<9621> <9621> -<9622> <9622> -<9623> <9629> -<962A> <962A> -<962B> <962D> -<962E> <962E> -<962F> <9630> -<9631> <9631> -<9632> <9632> -<9633> <9633> -<9634> <9634> -<9635> <9635> -<9636> <9636> -<9637> <963A> -<963B> <963B> -<963C> <963C> -<963D> <963D> -<963E> <963E> -<963F> <963F> -<9640> <9640> -<9641> <9641> -<9642> <9642> -<9643> <9643> -<9644> <9644> -<9645> <9645> -<9646> <9646> -<9647> <9647> -<9648> <9648> -<9649> <9649> -<964A> <964A> -<964B> <964B> -<964C> <964C> -<964D> <964D> -<964E> <964F> -<9650> <9650> -<9651> <9653> -<9654> <9654> -<9655> <9655> -<9656> <9657> -<9658> <965A> -<965B> <965B> -<965C> <965E> -<965F> <965F> -<9660> <9660> -<9661> <9661> -<9662> <9662> -<9663> <9663> -<9664> <9664> -<9665> <9666> -<9667> <9667> -<9668> <9668> -<9669> <9669> -<966A> <966A> -<966B> <966B> -endbfrange - -100 beginbfrange -<966C> <966C> -<966D> <9671> -<9672> <9672> -<9673> <9673> -<9674> <9674> -<9675> <9675> -<9676> <9676> -<9677> <9677> -<9678> <9684> -<9685> <9685> -<9686> <9686> -<9687> <9687> -<9688> <9688> -<9689> <968A> -<968B> <968B> -<968C> <968C> -<968D> <968D> -<968E> <968E> -<968F> <968F> -<9690> <9690> -<9691> <9693> -<9694> <9694> -<9695> <9696> -<9697> <9697> -<9698> <9698> -<9699> <9699> -<969A> <969B> -<969C> <969C> -<969D> <96A6> -<96A7> <96A7> -<96A8> <96AF> -<96B0> <96B0> -<96B1> <96B2> -<96B3> <96B3> -<96B4> <96B5> -<96B6> <96B6> -<96B7> <96B8> -<96B9> <96B9> -<96BA> <96BB> -<96BC> <96BD> -<96BE> <96BE> -<96BF> <96BF> -<96C0> <96C0> -<96C1> <96C1> -<96C2> <96C3> -<96C4> <96C4> -<96C5> <96C5> -<96C6> <96C6> -<96C7> <96C7> -<96C8> <96C8> -<96C9> <96C9> -<96CA> <96CB> -<96CC> <96CC> -<96CD> <96CD> -<96CE> <96CE> -<96CF> <96CF> -<96D0> <96D1> -<96D2> <96D2> -<96D3> <96D4> -<96D5> <96D5> -<96D6> <96DF> -<96E0> <96E0> -<96E1> <96E7> -<96E8> <96E8> -<96E9> <96E9> -<96EA> <96EA> -<96EB> <96EB> -<96EC> <96EE> -<96EF> <96EF> -<96F0> <96F2> -<96F3> <96F3> -<96F4> <96F5> -<96F6> <96F6> -<96F7> <96F7> -<96F8> <96F8> -<96F9> <96F9> -<96FA> <96FD> -<96FE> <96FE> -<96FF> <96FF> -<9700> <9700> -<9701> <9701> -<9702> <9703> -<9704> <9704> -<9705> <9705> -<9706> <9706> -<9707> <9707> -<9708> <9708> -<9709> <9709> -<970A> <970C> -<970D> <970D> -<970E> <970E> -<970F> <970F> -<9710> <9712> -<9713> <9713> -<9714> <9715> -<9716> <9716> -<9717> <971B> -<971C> <971C> -<971D> <971D> -<971E> <971E> -endbfrange - -100 beginbfrange -<971F> <9720> -<9721> <9729> -<972A> <972A> -<972B> <972C> -<972D> <972D> -<972E> <972F> -<9730> <9730> -<9731> <9731> -<9732> <9732> -<9733> <9737> -<9738> <9738> -<9739> <9739> -<973A> <973D> -<973E> <973E> -<973F> <9751> -<9752> <9752> -<9753> <9753> -<9754> <9755> -<9756> <9756> -<9757> <9758> -<9759> <9759> -<975A> <975A> -<975B> <975B> -<975C> <975D> -<975E> <975E> -<975F> <975F> -<9760> <9760> -<9761> <9761> -<9762> <9762> -<9763> <9764> -<9765> <9765> -<9766> <9768> -<9769> <9769> -<976A> <9771> -<9772> <9772> -<9773> <9773> -<9774> <9774> -<9775> <9775> -<9776> <9776> -<9777> <977B> -<977C> <977C> -<977D> <9784> -<9785> <9785> -<9786> <978A> -<978B> <978B> -<978C> <978C> -<978D> <978D> -<978E> <9790> -<9791> <9792> -<9793> <9793> -<9794> <9794> -<9795> <9797> -<9798> <9798> -<9799> <979D> -<979E> <979F> -<97A0> <97A0> -<97A1> <97A2> -<97A3> <97A3> -<97A4> <97AA> -<97AB> <97AB> -<97AC> <97AC> -<97AD> <97AD> -<97AE> <97AE> -<97AF> <97AF> -<97B0> <97B1> -<97B2> <97B2> -<97B3> <97B3> -<97B4> <97B4> -<97B5> <97E3> -<97E4> <97E5> -<97E6> <97E6> -<97E7> <97E7> -<97E8> <97E8> -<97E9> <97E9> -<97EA> <97EC> -<97ED> <97ED> -<97EE> <97F2> -<97F3> <97F3> -<97F4> <97F4> -<97F5> <97F5> -<97F6> <97F6> -<97F7> <97FF> -<9800> <980E> -<980F> <984D> -<984E> <986E> -<986F> <9874> -<9875> <9875> -<9876> <9876> -<9877> <9877> -<9878> <9878> -<9879> <9879> -<987A> <987A> -<987B> <987B> -<987C> <987C> -<987D> <987D> -<987E> <987E> -<987F> <987F> -<9880> <9880> -<9881> <9881> -<9882> <9882> -endbfrange - -100 beginbfrange -<9883> <9883> -<9884> <9884> -<9885> <9885> -<9886> <9886> -<9887> <9887> -<9888> <9888> -<9889> <9889> -<988A> <988A> -<988B> <988B> -<988C> <988D> -<988E> <988E> -<988F> <988F> -<9890> <9890> -<9891> <9891> -<9892> <9892> -<9893> <9893> -<9894> <9894> -<9895> <9895> -<9896> <9896> -<9897> <9897> -<9898> <9898> -<9899> <9899> -<989A> <989B> -<989C> <989C> -<989D> <989D> -<989E> <989F> -<98A0> <98A0> -<98A1> <98A2> -<98A3> <98A3> -<98A4> <98A4> -<98A5> <98A6> -<98A7> <98A7> -<98A8> <98CD> -<98CE> <98CE> -<98CF> <98D0> -<98D1> <98D3> -<98D4> <98D4> -<98D5> <98D5> -<98D6> <98D7> -<98D8> <98D8> -<98D9> <98DA> -<98DB> <98DD> -<98DE> <98DE> -<98DF> <98DF> -<98E0> <98E4> -<98E5> <98E6> -<98E7> <98E7> -<98E8> <98E8> -<98E9> <98FF> -<9900> <9907> -<9908> <990C> -<990D> <990D> -<990E> <990F> -<9910> <9910> -<9911> <992D> -<992E> <992E> -<992F> <9949> -<994A> <9953> -<9954> <9954> -<9955> <9955> -<9956> <9962> -<9963> <9963> -<9964> <9964> -<9965> <9965> -<9966> <9966> -<9967> <996C> -<996D> <996D> -<996E> <996E> -<996F> <996F> -<9970> <9970> -<9971> <9971> -<9972> <9972> -<9973> <9973> -<9974> <9974> -<9975> <9975> -<9976> <9976> -<9977> <9977> -<9978> <9979> -<997A> <997A> -<997B> <997B> -<997C> <997C> -<997D> <997D> -<997E> <997E> -<997F> <997F> -<9980> <9980> -<9981> <9981> -<9982> <9983> -<9984> <9984> -<9985> <9985> -<9986> <9986> -<9987> <9987> -<9988> <9988> -<9989> <9989> -<998A> <998A> -<998B> <998B> -<998C> <998C> -<998D> <998D> -<998E> <998E> -<998F> <998F> -<9990> <9991> -endbfrange - -100 beginbfrange -<9992> <9992> -<9993> <9995> -<9996> <9996> -<9997> <9997> -<9998> <9998> -<9999> <9999> -<999A> <99A4> -<99A5> <99A5> -<99A6> <99A7> -<99A8> <99A8> -<99A9> <99D8> -<99D9> <99F9> -<99FA> <99FF> -<9A00> <9A38> -<9A39> <9A59> -<9A5A> <9A6B> -<9A6C> <9A6C> -<9A6D> <9A6D> -<9A6E> <9A6E> -<9A6F> <9A6F> -<9A70> <9A70> -<9A71> <9A71> -<9A72> <9A72> -<9A73> <9A73> -<9A74> <9A74> -<9A75> <9A75> -<9A76> <9A76> -<9A77> <9A78> -<9A79> <9A79> -<9A7A> <9A7A> -<9A7B> <9A7B> -<9A7C> <9A7C> -<9A7D> <9A7D> -<9A7E> <9A7E> -<9A7F> <9A7F> -<9A80> <9A81> -<9A82> <9A82> -<9A83> <9A83> -<9A84> <9A84> -<9A85> <9A85> -<9A86> <9A86> -<9A87> <9A87> -<9A88> <9A88> -<9A89> <9A89> -<9A8A> <9A8A> -<9A8B> <9A8B> -<9A8C> <9A8C> -<9A8D> <9A8E> -<9A8F> <9A8F> -<9A90> <9A90> -<9A91> <9A91> -<9A92> <9A93> -<9A94> <9A95> -<9A96> <9A96> -<9A97> <9A97> -<9A98> <9A98> -<9A99> <9A99> -<9A9A> <9A9A> -<9A9B> <9A9D> -<9A9E> <9A9E> -<9A9F> <9AA0> -<9AA1> <9AA1> -<9AA2> <9AA3> -<9AA4> <9AA4> -<9AA5> <9AA5> -<9AA6> <9AA6> -<9AA7> <9AA7> -<9AA8> <9AA8> -<9AA9> <9AAF> -<9AB0> <9AB0> -<9AB1> <9AB1> -<9AB2> <9AB5> -<9AB6> <9AB6> -<9AB7> <9AB7> -<9AB8> <9AB8> -<9AB9> <9AB9> -<9ABA> <9ABA> -<9ABB> <9ABB> -<9ABC> <9ABC> -<9ABD> <9ABF> -<9AC0> <9AC0> -<9AC1> <9AC1> -<9AC2> <9AC2> -<9AC3> <9AC4> -<9AC5> <9AC5> -<9AC6> <9ACA> -<9ACB> <9ACC> -<9ACD> <9AD0> -<9AD1> <9AD1> -<9AD2> <9AD2> -<9AD3> <9AD3> -<9AD4> <9AD7> -<9AD8> <9AD8> -<9AD9> <9ADC> -<9ADD> <9ADE> -<9ADF> <9ADF> -<9AE0> <9AE0> -<9AE1> <9AE1> -<9AE2> <9AE5> -<9AE6> <9AE6> -endbfrange - -100 beginbfrange -<9AE7> <9AEA> -<9AEB> <9AEB> -<9AEC> <9AEC> -<9AED> <9AED> -<9AEE> <9AEE> -<9AEF> <9AEF> -<9AF0> <9AF8> -<9AF9> <9AF9> -<9AFA> <9AFA> -<9AFB> <9AFB> -<9AFC> <9AFF> -<9B00> <9B02> -<9B03> <9B03> -<9B04> <9B06> -<9B07> <9B07> -<9B08> <9B08> -<9B09> <9B0E> -<9B0F> <9B0F> -<9B10> <9B12> -<9B13> <9B13> -<9B14> <9B1E> -<9B1F> <9B1F> -<9B20> <9B22> -<9B23> <9B23> -<9B24> <9B2E> -<9B2F> <9B2F> -<9B30> <9B31> -<9B32> <9B32> -<9B33> <9B3A> -<9B3B> <9B3B> -<9B3C> <9B3C> -<9B3D> <9B40> -<9B41> <9B41> -<9B42> <9B42> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> -<9B46> <9B46> -<9B47> <9B47> -<9B48> <9B48> -<9B49> <9B49> -<9B4A> <9B4C> -<9B4D> <9B4D> -<9B4E> <9B4E> -<9B4F> <9B4F> -<9B50> <9B50> -<9B51> <9B51> -<9B52> <9B53> -<9B54> <9B54> -<9B55> <9B5A> -<9B5B> <9B7B> -<9B7C> <9BBA> -<9BBB> <9BDB> -<9BDC> <9BFF> -<9C00> <9C1A> -<9C1B> <9C3B> -<9C3C> <9C7A> -<9C7B> <9C7B> -<9C7C> <9C7C> -<9C7D> <9C7E> -<9C7F> <9C7F> -<9C80> <9C80> -<9C81> <9C81> -<9C82> <9C82> -<9C83> <9C84> -<9C85> <9C88> -<9C89> <9C8A> -<9C8B> <9C8B> -<9C8C> <9C8C> -<9C8D> <9C8D> -<9C8E> <9C8E> -<9C8F> <9C8F> -<9C90> <9C92> -<9C93> <9C93> -<9C94> <9C95> -<9C96> <9C99> -<9C9A> <9C9B> -<9C9C> <9C9C> -<9C9D> <9C9D> -<9C9E> <9CA3> -<9CA4> <9CA4> -<9CA5> <9CA9> -<9CAA> <9CAA> -<9CAB> <9CAB> -<9CAC> <9CAC> -<9CAD> <9CAE> -<9CAF> <9CAF> -<9CB0> <9CB7> -<9CB8> <9CB8> -<9CB9> <9CB9> -<9CBA> <9CBD> -<9CBE> <9CC2> -<9CC3> <9CC3> -<9CC4> <9CC7> -<9CC8> <9CC9> -<9CCA> <9CCB> -<9CCC> <9CD0> -<9CD1> <9CD2> -<9CD3> <9CD5> -<9CD6> <9CD6> -endbfrange - -100 beginbfrange -<9CD7> <9CD9> -<9CDA> <9CDB> -<9CDC> <9CDD> -<9CDE> <9CDE> -<9CDF> <9CDF> -<9CE0> <9CE1> -<9CE2> <9CE2> -<9CE3> <9CFF> -<9D00> <9D21> -<9D22> <9D42> -<9D43> <9D81> -<9D82> <9DA2> -<9DA3> <9DE1> -<9DE2> <9DFF> -<9E00> <9E02> -<9E03> <9E1E> -<9E1F> <9E1F> -<9E20> <9E20> -<9E21> <9E21> -<9E22> <9E22> -<9E23> <9E23> -<9E24> <9E24> -<9E25> <9E25> -<9E26> <9E26> -<9E27> <9E27> -<9E28> <9E2C> -<9E2D> <9E2D> -<9E2E> <9E2E> -<9E2F> <9E2F> -<9E30> <9E30> -<9E31> <9E31> -<9E32> <9E32> -<9E33> <9E33> -<9E34> <9E34> -<9E35> <9E35> -<9E36> <9E36> -<9E37> <9E37> -<9E38> <9E38> -<9E39> <9E3A> -<9E3B> <9E3C> -<9E3D> <9E3D> -<9E3E> <9E3E> -<9E3F> <9E3F> -<9E40> <9E40> -<9E41> <9E42> -<9E43> <9E43> -<9E44> <9E44> -<9E45> <9E45> -<9E46> <9E49> -<9E4A> <9E4A> -<9E4B> <9E4C> -<9E4D> <9E4D> -<9E4E> <9E4E> -<9E4F> <9E4F> -<9E50> <9E50> -<9E51> <9E51> -<9E52> <9E54> -<9E55> <9E55> -<9E56> <9E56> -<9E57> <9E57> -<9E58> <9E58> -<9E59> <9E59> -<9E5A> <9E5C> -<9E5D> <9E5D> -<9E5E> <9E5E> -<9E5F> <9E62> -<9E63> <9E63> -<9E64> <9E64> -<9E65> <9E65> -<9E66> <9E6C> -<9E6D> <9E6D> -<9E6E> <9E6F> -<9E70> <9E70> -<9E71> <9E71> -<9E72> <9E72> -<9E73> <9E73> -<9E74> <9E7D> -<9E7E> <9E7E> -<9E7F> <9E7F> -<9E80> <9E80> -<9E81> <9E81> -<9E82> <9E82> -<9E83> <9E86> -<9E87> <9E88> -<9E89> <9E8A> -<9E8B> <9E8B> -<9E8C> <9E91> -<9E92> <9E92> -<9E93> <9E93> -<9E94> <9E9C> -<9E9D> <9E9D> -<9E9E> <9E9E> -<9E9F> <9E9F> -<9EA0> <9EA5> -<9EA6> <9EA6> -<9EA7> <9EAA> -<9EAB> <9EB3> -<9EB4> <9EB4> -<9EB5> <9EB7> -<9EB8> <9EB8> -endbfrange - -100 beginbfrange -<9EB9> <9EBA> -<9EBB> <9EBB> -<9EBC> <9EBC> -<9EBD> <9EBE> -<9EBF> <9EC3> -<9EC4> <9EC4> -<9EC5> <9EC8> -<9EC9> <9EC9> -<9ECA> <9ECC> -<9ECD> <9ECD> -<9ECE> <9ECE> -<9ECF> <9ECF> -<9ED0> <9ED0> -<9ED1> <9ED1> -<9ED2> <9ED3> -<9ED4> <9ED4> -<9ED5> <9ED7> -<9ED8> <9ED8> -<9ED9> <9EDA> -<9EDB> <9EDD> -<9EDE> <9EDE> -<9EDF> <9EDF> -<9EE0> <9EE0> -<9EE1> <9EE1> -<9EE2> <9EE2> -<9EE3> <9EE4> -<9EE5> <9EE5> -<9EE6> <9EE6> -<9EE7> <9EE7> -<9EE8> <9EE8> -<9EE9> <9EE9> -<9EEA> <9EEA> -<9EEB> <9EEE> -<9EEF> <9EEF> -<9EF0> <9EF8> -<9EF9> <9EF9> -<9EFA> <9EFA> -<9EFB> <9EFC> -<9EFD> <9EFD> -<9EFE> <9EFE> -<9EFF> <9EFF> -<9F00> <9F05> -<9F06> <9F0A> -<9F0B> <9F0B> -<9F0C> <9F0C> -<9F0D> <9F0D> -<9F0E> <9F0E> -<9F0F> <9F0F> -<9F10> <9F10> -<9F11> <9F12> -<9F13> <9F13> -<9F14> <9F16> -<9F17> <9F17> -<9F18> <9F18> -<9F19> <9F19> -<9F1A> <9F1F> -<9F20> <9F20> -<9F21> <9F21> -<9F22> <9F22> -<9F23> <9F2B> -<9F2C> <9F2C> -<9F2D> <9F2E> -<9F2F> <9F2F> -<9F30> <9F31> -<9F32> <9F36> -<9F37> <9F37> -<9F38> <9F38> -<9F39> <9F39> -<9F3A> <9F3A> -<9F3B> <9F3B> -<9F3C> <9F3C> -<9F3D> <9F3E> -<9F3F> <9F43> -<9F44> <9F44> -<9F45> <9F4F> -<9F50> <9F50> -<9F51> <9F51> -<9F52> <9F78> -<9F79> <9F7E> -<9F7F> <9F7F> -<9F80> <9F80> -<9F81> <9F82> -<9F83> <9F83> -<9F84> <9F84> -<9F85> <9F8A> -<9F8B> <9F8B> -<9F8C> <9F8C> -<9F8D> <9F98> -<9F99> <9F99> -<9F9A> <9F9A> -<9F9B> <9F9B> -<9F9C> <9F9E> -<9F9F> <9F9F> -<9FA0> <9FA0> -<9FA1> <9FA5> - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <91D0> - - - - - - - <98B7> - - - - - - - <8179> - - <99DA> - - - - <8DB9> - <9E45> - - - - - - - -endbfrange - -100 beginbfrange - - - <81ED> - - <84DA> - <93EF> - <99A9> - - - - - - - - - - - - - - - - - <89C5> - - - - - - - - <89BE> - <8CD2> - <98C7> - <9C49> - - - - - - - <8443> - - - - - - - <9282> - <98B7> - - - <8C8E> - - - - - - - <8FCD> - - - <94B5> - - <85A2> - - - - - <9AA2> - - - - - - - <83C9> - - - - - - - <84EE> - <85CE> - - <8F5D> - - <9E56> - - - - - - - <95D1> - <9A76> - - - <917A> -endbfrange - -100 beginbfrange - <91D9> - <93D3> - <9D69> - <9F92> - - - - - - - - - - - - - - - - - - <9A9A> - - - - - <8C8E> - <8E58> - - - - - - - - - - - - - - <90BA> - - - - - - <98B7> - - - - - - <959E> - - <84A2> - <9683> - - - - - - - - - - - <8290> - <8D91> - <9C53> - - - <90FC> - - - - - - - - - - - - - - - - - - - - - <9FFB> - - - - - - -endbfrange - -72 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - <8956> - - - - <8444> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-GBpc-EUC b/Resources/cmap/UCS2-GBpc-EUC deleted file mode 100644 index 219f94fc330..00000000000 --- a/Resources/cmap/UCS2-GBpc-EUC +++ /dev/null @@ -1,9098 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-GBpc-EUC) -%%Title: (UCS2-GBpc-EUC) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_GBpc_EUC) def - /Supplement 2 def -end def - -/CMapName /UCS2-GBpc-EUC def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <007F> <00> -<0083> <00A0> <83> -<00A2> <00A3> -<00A4> <00A4> -<00A5> <00A5> -<00A7> <00A7> -<00A8> <00A8> -<00A9> <00A9> -<00AD> <00AD> -<00B0> <00B0> -<00B1> <00B1> -<00B7> <00B7> -<00D7> <00D7> -<00E0> <00E0> -<00E1> <00E1> -<00E8> <00E8> -<00E9> <00E9> -<00EA> <00EA> -<00EC> <00EC> -<00ED> <00ED> -<00F2> <00F2> -<00F3> <00F3> -<00F7> <00F7> -<00F9> <00F9> -<00FA> <00FA> -<00FC> <00FC> -<0101> <0101> -<0113> <0113> -<011B> <011B> -<012B> <012B> -<0144> <0144> -<0148> <0148> -<014D> <014D> -<016B> <016B> -<01CE> <01CE> -<01D0> <01D0> -<01D2> <01D2> -<01D4> <01D4> -<01D6> <01D6> -<01D8> <01D8> -<01DA> <01DA> -<01DC> <01DC> -<0251> <0251> -<0261> <0261> -<02C7> <02C7> -<02C9> <02C9> -<02D0> <02D0> -<0391> <03A1> -<03A3> <03A9> -<03B1> <03C1> -<03C3> <03C9> -<0401> <0401> -<0410> <0415> -<0416> <042F> -<0430> <0435> -<0436> <044F> -<0451> <0451> -<1E3F> <1E3F> -<2010> <2010> -<2013> <2013> -<2014> <2014> -<2016> <2016> -<2018> <2019> -<201C> <201D> -<2022> <2022> -<2026> <2026> -<2027> <2027> -<2030> <2030> -<2032> <2033> -<203B> <203B> -<203E> <203E> -<2103> <2103> -<2116> <2116> -<2122> <2122> -<2160> <216B> -<2190> <2191> -<2192> <2192> -<2193> <2193> -<2208> <2208> -<220F> <220F> -<2211> <2211> -<221A> <221A> -<221D> <221D> -<221E> <221E> -<2220> <2220> -<2225> <2225> -<2227> <2228> -<2229> <2229> -<222A> <222A> -<222B> <222B> -<222E> <222E> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<2237> <2237> -<223C> <223C> -<223D> <223D> -<2248> <2248> -<224C> <224C> -<2260> <2260> -endbfrange - -100 beginbfrange -<2261> <2261> -<2264> <2265> -<226E> <226F> -<2299> <2299> -<22A5> <22A5> -<22EF> <22EF> -<2312> <2312> -<2460> <2469> -<2474> <2487> -<2488> <249B> -<2500> <254B> -<2595> <2595> -<25A0> <25A0> -<25A1> <25A1> -<25B2> <25B2> -<25B3> <25B3> -<25C6> <25C6> -<25C7> <25C7> -<25C9> <25C9> -<25CB> <25CB> -<25CE> <25CE> -<25CF> <25CF> -<2605> <2605> -<2606> <2606> -<2609> <2609> -<2640> <2640> -<2642> <2642> -<3000> <3002> -<3003> <3003> -<3005> <3005> -<3008> <300F> -<3010> <3011> -<3013> <3013> -<3014> <3015> -<3016> <3017> -<301C> <301C> -<3041> <3093> -<30A1> <30F6> -<3105> <3129> -<3220> <3229> -<4E00> <4E00> -<4E01> <4E01> -<4E03> <4E03> -<4E07> <4E07> -<4E08> <4E08> -<4E09> <4E09> -<4E0A> <4E0A> -<4E0B> <4E0B> -<4E0C> <4E0C> -<4E0D> <4E0D> -<4E0E> <4E0E> -<4E10> <4E10> -<4E11> <4E11> -<4E13> <4E13> -<4E14> <4E14> -<4E15> <4E15> -<4E16> <4E16> -<4E18> <4E18> -<4E19> <4E19> -<4E1A> <4E1A> -<4E1B> <4E1B> -<4E1C> <4E1C> -<4E1D> <4E1D> -<4E1E> <4E1E> -<4E22> <4E22> -<4E24> <4E24> -<4E25> <4E25> -<4E27> <4E27> -<4E28> <4E28> -<4E2A> <4E2A> -<4E2B> <4E2B> -<4E2C> <4E2C> -<4E2D> <4E2D> -<4E30> <4E30> -<4E32> <4E32> -<4E34> <4E34> -<4E36> <4E36> -<4E38> <4E38> -<4E39> <4E39> -<4E3A> <4E3A> -<4E3B> <4E3B> -<4E3D> <4E3D> -<4E3E> <4E3E> -<4E3F> <4E3F> -<4E43> <4E43> -<4E45> <4E45> -<4E47> <4E47> -<4E48> <4E48> -<4E49> <4E49> -<4E4B> <4E4B> -<4E4C> <4E4C> -<4E4D> <4E4D> -<4E4E> <4E4E> -<4E4F> <4E4F> -<4E50> <4E50> -<4E52> <4E52> -<4E53> <4E53> -<4E54> <4E54> -<4E56> <4E56> -<4E58> <4E58> -endbfrange - -100 beginbfrange -<4E59> <4E59> -<4E5C> <4E5C> -<4E5D> <4E5D> -<4E5E> <4E5E> -<4E5F> <4E5F> -<4E60> <4E60> -<4E61> <4E61> -<4E66> <4E66> -<4E69> <4E69> -<4E70> <4E70> -<4E71> <4E71> -<4E73> <4E73> -<4E7E> <4E7E> -<4E82> <4E82> -<4E86> <4E86> -<4E88> <4E88> -<4E89> <4E89> -<4E8B> <4E8B> -<4E8C> <4E8C> -<4E8D> <4E8D> -<4E8E> <4E8E> -<4E8F> <4E8F> -<4E91> <4E91> -<4E92> <4E92> -<4E93> <4E93> -<4E94> <4E94> -<4E95> <4E95> -<4E98> <4E98> -<4E9A> <4E9A> -<4E9B> <4E9B> -<4E9E> <4E9E> -<4E9F> <4E9F> -<4EA0> <4EA0> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA4> <4EA4> -<4EA5> <4EA5> -<4EA6> <4EA6> -<4EA7> <4EA7> -<4EA8> <4EA8> -<4EA9> <4EA9> -<4EAB> <4EAB> -<4EAC> <4EAC> -<4EAD> <4EAD> -<4EAE> <4EAE> -<4EB2> <4EB2> -<4EB3> <4EB3> -<4EB5> <4EB5> -<4EBA> <4EBA> -<4EBB> <4EBB> -<4EBF> <4EBF> -<4EC0> <4EC0> -<4EC1> <4EC1> -<4EC2> <4EC2> -<4EC3> <4EC3> -<4EC4> <4EC4> -<4EC5> <4EC5> -<4EC6> <4EC6> -<4EC7> <4EC7> -<4EC9> <4EC9> -<4ECA> <4ECA> -<4ECB> <4ECB> -<4ECD> <4ECD> -<4ECE> <4ECE> -<4ED1> <4ED1> -<4ED3> <4ED3> -<4ED4> <4ED4> -<4ED5> <4ED5> -<4ED6> <4ED6> -<4ED7> <4ED7> -<4ED8> <4ED8> -<4ED9> <4ED9> -<4EDD> <4EDD> -<4EDE> <4EDE> -<4EDF> <4EDF> -<4EE1> <4EE1> -<4EE3> <4EE3> -<4EE4> <4EE4> -<4EE5> <4EE5> -<4EE8> <4EE8> -<4EEA> <4EEA> -<4EEB> <4EEB> -<4EEC> <4EEC> -<4EF0> <4EF0> -<4EF2> <4EF2> -<4EF3> <4EF3> -<4EF5> <4EF5> -<4EF6> <4EF6> -<4EF7> <4EF7> -<4EFB> <4EFB> -<4EFD> <4EFD> -<4EFF> <4EFF> -<4F01> <4F01> -<4F09> <4F09> -<4F0A> <4F0A> -<4F0D> <4F0D> -<4F0E> <4F0E> -<4F0F> <4F0F> -<4F10> <4F10> -<4F11> <4F11> -endbfrange - -100 beginbfrange -<4F17> <4F17> -<4F18> <4F18> -<4F19> <4F19> -<4F1A> <4F1A> -<4F1B> <4F1B> -<4F1E> <4F1E> -<4F1F> <4F1F> -<4F20> <4F20> -<4F22> <4F22> -<4F24> <4F24> -<4F25> <4F25> -<4F26> <4F26> -<4F27> <4F27> -<4F2A> <4F2A> -<4F2B> <4F2B> -<4F2F> <4F2F> -<4F30> <4F30> -<4F32> <4F32> -<4F34> <4F34> -<4F36> <4F36> -<4F38> <4F38> -<4F3A> <4F3A> -<4F3C> <4F3C> -<4F3D> <4F3D> -<4F43> <4F43> -<4F46> <4F46> -<4F4D> <4F4D> -<4F4E> <4F4E> -<4F4F> <4F4F> -<4F50> <4F50> -<4F51> <4F51> -<4F53> <4F53> -<4F55> <4F55> -<4F57> <4F57> -<4F58> <4F58> -<4F59> <4F59> -<4F5A> <4F5A> -<4F5B> <4F5B> -<4F5C> <4F5C> -<4F5D> <4F5D> -<4F5E> <4F5E> -<4F5F> <4F5F> -<4F60> <4F60> -<4F63> <4F63> -<4F64> <4F64> -<4F65> <4F65> -<4F67> <4F67> -<4F69> <4F69> -<4F6C> <4F6C> -<4F6F> <4F6F> -<4F70> <4F70> -<4F73> <4F73> -<4F74> <4F74> -<4F76> <4F76> -<4F7B> <4F7B> -<4F7C> <4F7C> -<4F7E> <4F7E> -<4F7F> <4F7F> -<4F83> <4F83> -<4F84> <4F84> -<4F86> <4F86> -<4F88> <4F88> -<4F89> <4F89> -<4F8B> <4F8B> -<4F8D> <4F8D> -<4F8F> <4F8F> -<4F91> <4F91> -<4F94> <4F94> -<4F96> <4F96> -<4F97> <4F97> -<4F9B> <4F9B> -<4F9D> <4F9D> -<4FA0> <4FA0> -<4FA3> <4FA3> -<4FA5> <4FA5> -<4FA6> <4FA6> -<4FA7> <4FA7> -<4FA8> <4FA8> -<4FA9> <4FA9> -<4FAA> <4FAA> -<4FAC> <4FAC> -<4FAE> <4FAE> -<4FAF> <4FAF> -<4FB5> <4FB5> -<4FBF> <4FBF> -<4FC2> <4FC2> -<4FC3> <4FC3> -<4FC4> <4FC4> -<4FC5> <4FC5> -<4FCA> <4FCA> -<4FCE> <4FCE> -<4FCF> <4FCF> -<4FD0> <4FD0> -<4FD1> <4FD1> -<4FD7> <4FD7> -<4FD8> <4FD8> -<4FDA> <4FDA> -<4FDC> <4FDC> -<4FDD> <4FDD> -<4FDE> <4FDE> -endbfrange - -100 beginbfrange -<4FDF> <4FDF> -<4FE0> <4FE0> -<4FE1> <4FE1> -<4FE3> <4FE3> -<4FE6> <4FE6> -<4FE8> <4FE8> -<4FE9> <4FE9> -<4FEA> <4FEA> -<4FED> <4FED> -<4FEE> <4FEE> -<4FEF> <4FEF> -<4FF1> <4FF1> -<4FF3> <4FF3> -<4FF8> <4FF8> -<4FFA> <4FFA> -<4FFE> <4FFE> -<5000> <5000> -<5006> <5006> -<5009> <5009> -<500B> <500B> -<500C> <500C> -<500D> <500D> -<500F> <500F> -<5011> <5011> -<5012> <5012> -<5014> <5014> -<5018> <5018> -<5019> <5019> -<501A> <501A> -<501C> <501C> -<501F> <501F> -<5021> <5021> -<5025> <5025> -<5026> <5026> -<5028> <5028> -<5029> <5029> -<502A> <502A> -<502B> <502B> -<502C> <502C> -<502D> <502D> -<502E> <502E> -<503A> <503A> -<503C> <503C> -<503E> <503E> -<5043> <5043> -<5047> <5047> -<5048> <5048> -<5049> <5049> -<504C> <504C> -<504E> <504E> -<504F> <504F> -<5055> <5055> -<505A> <505A> -<505C> <505C> -<5065> <5065> -<506C> <506C> -<5074> <5074> -<5075> <5075> -<5076> <5076> -<5077> <5077> -<507B> <507B> -<507E> <507E> -<507F> <507F> -<5080> <5080> -<5085> <5085> -<5088> <5088> -<508D> <508D> -<5096> <5096> -<5098> <5098> -<5099> <5099> -<50A2> <50A2> -<50A3> <50A3> -<50A5> <50A5> -<50A7> <50A7> -<50A8> <50A8> -<50A9> <50A9> -<50AC> <50AC> -<50AD> <50AD> -<50B2> <50B2> -<50B3> <50B3> -<50B4> <50B4> -<50B5> <50B5> -<50B7> <50B7> -<50BA> <50BA> -<50BB> <50BB> -<50BE> <50BE> -<50C2> <50C2> -<50C5> <50C5> -<50C9> <50C9> -<50CF> <50CF> -<50D1> <50D1> -<50D5> <50D5> -<50D6> <50D6> -<50DA> <50DA> -<50DE> <50DE> -<50E5> <50E5> -<50E6> <50E6> -<50E7> <50E7> -<50E8> <50E8> -<50EC> <50EC> -endbfrange - -100 beginbfrange -<50ED> <50ED> -<50EE> <50EE> -<50F3> <50F3> -<50F5> <50F5> -<50F9> <50F9> -<50FB> <50FB> -<5100> <5100> -<5102> <5102> -<5104> <5104> -<5106> <5106> -<5107> <5107> -<5108> <5108> -<5109> <5109> -<510B> <510B> -<5110> <5110> -<5112> <5112> -<5114> <5114> -<5115> <5115> -<5118> <5118> -<511F> <511F> -<5121> <5121> -<512A> <512A> -<5132> <5132> -<5137> <5137> -<513A> <513A> -<513B> <513B> -<513C> <513C> -<513F> <513F> -<5140> <5140> -<5141> <5141> -<5143> <5143> -<5144> <5144> -<5145> <5145> -<5146> <5146> -<5148> <5148> -<5149> <5149> -<514B> <514B> -<514D> <514D> -<5151> <5151> -<5152> <5152> -<5154> <5154> -<5155> <5155> -<5156> <5156> -<515A> <515A> -<515C> <515C> -<5162> <5162> -<5165> <5165> -<5168> <5168> -<5169> <5169> -<516B> <516B> -<516C> <516C> -<516D> <516D> -<516E> <516E> -<5170> <5170> -<5171> <5171> -<5173> <5173> -<5174> <5174> -<5175> <5175> -<5176> <5176> -<5177> <5177> -<5178> <5178> -<5179> <5179> -<517B> <517B> -<517C> <517C> -<517D> <517D> -<5180> <5180> -<5181> <5181> -<5182> <5182> -<5185> <5185> -<5188> <5188> -<5189> <5189> -<518C> <518C> -<518D> <518D> -<5192> <5192> -<5195> <5195> -<5196> <5196> -<5197> <5197> -<5199> <5199> -<519B> <519B> -<519C> <519C> -<51A0> <51A0> -<51A2> <51A2> -<51A4> <51A4> -<51A5> <51A5> -<51AB> <51AB> -<51AC> <51AC> -<51AF> <51AF> -<51B0> <51B0> -<51B1> <51B1> -<51B2> <51B2> -<51B3> <51B3> -<51B5> <51B5> -<51B6> <51B6> -<51B7> <51B7> -<51BB> <51BB> -<51BC> <51BC> -<51BD> <51BD> -<51C0> <51C0> -<51C4> <51C4> -<51C6> <51C6> -endbfrange - -100 beginbfrange -<51C7> <51C7> -<51C9> <51C9> -<51CB> <51CB> -<51CC> <51CC> -<51CD> <51CD> -<51CF> <51CF> -<51D1> <51D1> -<51DB> <51DB> -<51DD> <51DD> -<51E0> <51E0> -<51E1> <51E1> -<51E4> <51E4> -<51EB> <51EB> -<51ED> <51ED> -<51EF> <51EF> -<51F0> <51F0> -<51F1> <51F1> -<51F3> <51F3> -<51F5> <51F5> -<51F6> <51F6> -<51F8> <51F8> -<51F9> <51F9> -<51FA> <51FA> -<51FB> <51FB> -<51FC> <51FC> -<51FD> <51FD> -<51FF> <51FF> -<5200> <5200> -<5201> <5201> -<5202> <5202> -<5203> <5203> -<5206> <5206> -<5207> <5207> -<5208> <5208> -<520A> <520A> -<520D> <520D> -<520E> <520E> -<5211> <5211> -<5212> <5212> -<5216> <5216> -<5217> <5217> -<5218> <5218> -<5219> <5219> -<521A> <521A> -<521B> <521B> -<521D> <521D> -<5220> <5220> -<5224> <5224> -<5228> <5228> -<5229> <5229> -<522B> <522B> -<522D> <522D> -<522E> <522E> -<5230> <5230> -<5233> <5233> -<5236> <5236> -<5237> <5237> -<5238> <5238> -<5239> <5239> -<523A> <523A> -<523B> <523B> -<523D> <523D> -<523F> <5240> -<5241> <5241> -<5242> <5242> -<5243> <5243> -<5244> <5244> -<5247> <5247> -<524A> <524A> -<524B> <524B> -<524C> <524C> -<524D> <524D> -<5250> <5250> -<5251> <5251> -<5254> <5254> -<5256> <5256> -<525B> <525B> -<525C> <525C> -<525E> <525E> -<5261> <5261> -<5265> <5265> -<5267> <5267> -<5269> <5269> -<526A> <526A> -<526E> <526E> -<526F> <526F> -<5272> <5272> -<5274> <5274> -<5275> <5275> -<527D> <527D> -<527F> <527F> -<5281> <5281> -<5282> <5282> -<5283> <5283> -<5287> <5287> -<5288> <5288> -<5289> <5289> -<528A> <528A> -<528C> <528C> -<528D> <528D> -endbfrange - -100 beginbfrange -<5290> <5290> -<5291> <5291> -<5293> <5293> -<529B> <529B> -<529D> <529D> -<529E> <529E> -<529F> <529F> -<52A0> <52A0> -<52A1> <52A1> -<52A2> <52A2> -<52A3> <52A3> -<52A8> <52A8> -<52A9> <52A9> -<52AA> <52AA> -<52AB> <52AB> -<52AC> <52AD> -<52B1> <52B1> -<52B2> <52B2> -<52B3> <52B3> -<52BE> <52BE> -<52BF> <52BF> -<52C1> <52C1> -<52C3> <52C3> -<52C7> <52C7> -<52C9> <52C9> -<52CB> <52CB> -<52D0> <52D0> -<52D2> <52D2> -<52D5> <52D5> -<52D6> <52D6> -<52D8> <52D8> -<52D9> <52D9> -<52DB> <52DB> -<52DD> <52DD> -<52DE> <52DE> -<52DF> <52DF> -<52E2> <52E2> -<52E4> <52E4> -<52F0> <52F0> -<52F1> <52F1> -<52F5> <52F5> -<52F8> <52F8> -<52F9> <52F9> -<52FA> <52FA> -<52FE> <52FE> -<52FF> <52FF> -<5300> <5300> -<5305> <5305> -<5306> <5306> -<5308> <5308> -<530D> <530D> -<530F> <530F> -<5310> <5310> -<5315> <5315> -<5316> <5316> -<5317> <5317> -<5319> <5319> -<531A> <531A> -<531D> <531D> -<5320> <5320> -<5321> <5321> -<5323> <5323> -<5326> <5326> -<532A> <532A> -<532D> <532D> -<532E> <532E> -<532F> <532F> -<5331> <5331> -<5339> <5339> -<533A> <533A> -<533B> <533B> -<533E> <533E> -<533F> <533F> -<5340> <5340> -<5341> <5341> -<5343> <5343> -<5345> <5345> -<5347> <5347> -<5348> <5348> -<5349> <5349> -<534A> <534A> -<534E> <534E> -<534F> <534F> -<5351> <5351> -<5352> <5352> -<5353> <5353> -<5354> <5354> -<5355> <5355> -<5356> <5356> -<5357> <5357> -<535A> <535A> -<535C> <535C> -<535E> <535E> -<535F> <535F> -<5360> <5360> -<5361> <5361> -<5362> <5362> -<5363> <5363> -<5364> <5364> -<5366> <5366> -endbfrange - -100 beginbfrange -<5367> <5367> -<5369> <5369> -<536B> <536B> -<536E> <536E> -<536F> <536F> -<5370> <5370> -<5371> <5371> -<5373> <5373> -<5374> <5374> -<5375> <5375> -<5377> <5377> -<5378> <5378> -<537A> <537A> -<537F> <537F> -<5382> <5382> -<5384> <5384> -<5385> <5385> -<5386> <5386> -<5389> <5389> -<538B> <538B> -<538C> <538C> -<538D> <538D> -<5395> <5395> -<5398> <5398> -<5399> <5399> -<539A> <539A> -<539D> <539D> -<539F> <539F> -<53A0> <53A0> -<53A2> <53A2> -<53A3> <53A3> -<53A5> <53A5> -<53A6> <53A6> -<53A8> <53A8> -<53A9> <53A9> -<53AD> <53AD> -<53AE> <53AE> -<53B2> <53B2> -<53B4> <53B4> -<53B6> <53B6> -<53BB> <53BB> -<53BF> <53BF> -<53C1> <53C1> -<53C2> <53C2> -<53C3> <53C3> -<53C8> <53C8> -<53C9> <53C9> -<53CA> <53CA> -<53CB> <53CB> -<53CC> <53CC> -<53CD> <53CD> -<53D1> <53D1> -<53D4> <53D4> -<53D6> <53D6> -<53D7> <53D7> -<53D8> <53D8> -<53D9> <53D9> -<53DB> <53DB> -<53DF> <53DF> -<53E0> <53E0> -<53E2> <53E2> -<53E3> <53E3> -<53E4> <53E4> -<53E5> <53E5> -<53E6> <53E6> -<53E8> <53E8> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53EC> -<53ED> <53ED> -<53EE> <53EE> -<53EF> <53EF> -<53F0> <53F0> -<53F1> <53F1> -<53F2> <53F2> -<53F3> <53F3> -<53F5> <53F5> -<53F6> <53F6> -<53F7> <53F7> -<53F8> <53F8> -<53F9> <53F9> -<53FB> <53FB> -<53FC> <53FC> -<53FD> <53FD> -<5401> <5401> -<5403> <5403> -<5404> <5404> -<5406> <5406> -<5408> <5408> -<5409> <5409> -<540A> <540A> -<540C> <540C> -<540D> <540D> -<540E> <540E> -<540F> <540F> -<5410> <5410> -<5411> <5411> -<5412> <5412> -<5413> <5413> -endbfrange - -100 beginbfrange -<5415> <5415> -<5416> <5416> -<5417> <5417> -<541B> <541B> -<541D> <541D> -<541E> <541E> -<541F> <541F> -<5420> <5420> -<5421> <5421> -<5423> <5423> -<5426> <5426> -<5427> <5427> -<5428> <5428> -<5429> <5429> -<542B> <542B> -<542C> <542C> -<542D> <542D> -<542E> <542E> -<542F> <542F> -<5431> <5431> -<5432> <5432> -<5434> <5434> -<5435> <5435> -<5438> <5438> -<5439> <5439> -<543B> <543B> -<543C> <543C> -<543E> <543E> -<5440> <5440> -<5443> <5443> -<5446> <5446> -<5448> <5448> -<544A> <544A> -<544B> <544B> -<5450> <5450> -<5452> <5454> -<5455> <5455> -<5456> <5456> -<5457> <5457> -<5458> <5458> -<5459> <5459> -<545B> <545B> -<545C> <545C> -<5462> <5462> -<5464> <5464> -<5466> <5466> -<5468> <5468> -<5471> <5471> -<5472> <5472> -<5473> <5473> -<5475> <5475> -<5476> <5476> -<5477> <5477> -<5478> <5478> -<547B> <547B> -<547C> <547C> -<547D> <547D> -<5480> <5480> -<5482> <5482> -<5484> <5484> -<5486> <5486> -<548B> <548B> -<548C> <548C> -<548E> <548E> -<548F> <548F> -<5490> <5490> -<5492> <5492> -<5494> <5494> -<5495> <5495> -<5496> <5496> -<5499> <5499> -<549A> <549B> -<549D> <549D> -<54A3> <54A3> -<54A4> <54A4> -<54A6> <54A6> -<54A7> <54A7> -<54A8> <54A8> -<54A9> <54AA> -<54AB> <54AB> -<54AC> <54AC> -<54AD> <54AD> -<54AF> <54AF> -<54B1> <54B1> -<54B3> <54B3> -<54B4> <54B4> -<54B8> <54B8> -<54BB> <54BB> -<54BC> <54BC> -<54BD> <54BD> -<54BF> <54BF> -<54C0> <54C0> -<54C1> <54C1> -<54C2> <54C2> -<54C4> <54C4> -<54C6> <54C6> -<54C7> <54C7> -<54C8> <54C8> -<54C9> <54C9> -<54CC> <54CC> -endbfrange - -100 beginbfrange -<54CD> <54CD> -<54CE> <54CE> -<54CF> <54CF> -<54D0> <54D0> -<54D1> <54D1> -<54D2> <54D2> -<54D3> <54D4> -<54D5> <54D5> -<54D7> <54D7> -<54D9> <54DA> -<54DC> <54DC> -<54DD> <54DD> -<54DE> <54DE> -<54DF> <54DF> -<54E1> <54E1> -<54E5> <54E5> -<54E6> <54E6> -<54E7> <54E7> -<54E8> <54E8> -<54E9> <54E9> -<54EA> <54EA> -<54ED> <54ED> -<54EE> <54EE> -<54F2> <54F2> -<54F3> <54F3> -<54FA> <54FA> -<54FC> <54FC> -<54FD> <54FD> -<54FF> <54FF> -<5501> <5501> -<5504> <5504> -<5506> <5506> -<5507> <5507> -<5509> <5509> -<550F> <550F> -<5510> <5510> -<5511> <5511> -<5514> <5514> -<551B> <551B> -<5520> <5520> -<5522> <5523> -<5524> <5524> -<5527> <5527> -<552A> <552A> -<552C> <552C> -<552E> <552E> -<552F> <552F> -<5530> <5530> -<5531> <5531> -<5533> <5533> -<5537> <5537> -<553C> <553C> -<553E> <553E> -<553F> <553F> -<5541> <5541> -<5543> <5543> -<5544> <5544> -<5546> <5546> -<5549> <5549> -<554A> <554A> -<554F> <554F> -<5550> <5550> -<5553> <5553> -<5555> <5555> -<5556> <5556> -<555C> <555C> -<555E> <555E> -<5561> <5561> -<5564> <5564> -<5565> <5565> -<5566> <5566> -<5567> <5567> -<556A> <556A> -<556C> <556C> -<556D> <556D> -<556E> <556E> -<5575> <5577> -<5578> <5578> -<557B> <557B> -<557C> <557C> -<557E> <557E> -<5580> <5580> -<5581> <5581> -<5582> <5582> -<5583> <5583> -<5584> <5584> -<5587> <5587> -<5588> <5588> -<5589> <5589> -<558A> <558A> -<558B> <558B> -<558F> <558F> -<5591> <5591> -<5594> <5594> -<5598> <5598> -<5599> <5599> -<559C> <559C> -<559D> <559D> -<559F> <559F> -<55A7> <55A7> -endbfrange - -100 beginbfrange -<55AA> <55AA> -<55AC> <55AC> -<55AE> <55AE> -<55B1> <55B1> -<55B2> <55B2> -<55B3> <55B3> -<55B5> <55B5> -<55B7> <55B7> -<55B9> <55B9> -<55BB> <55BB> -<55BD> <55BE> -<55C4> <55C4> -<55C5> <55C5> -<55C6> <55C6> -<55C7> <55C7> -<55C9> <55C9> -<55CC> <55CD> -<55CE> <55CE> -<55D1> <55D1> -<55D2> <55D2> -<55D3> <55D3> -<55D4> <55D4> -<55D6> <55D6> -<55DA> <55DA> -<55DC> <55DC> -<55DD> <55DD> -<55DF> <55DF> -<55E1> <55E1> -<55E3> <55E3> -<55E4> <55E4> -<55E5> <55E5> -<55E6> <55E6> -<55E8> <55E8> -<55E9> <55E9> -<55EA> <55EA> -<55EB> <55EC> -<55EF> <55EF> -<55F2> <55F3> -<55F5> <55F5> -<55F6> <55F6> -<55F7> <55F7> -<55FD> <55FD> -<55FE> <55FE> -<5600> <5600> -<5601> <5601> -<5606> <5606> -<5608> <5608> -<5609> <5609> -<560C> <560C> -<560D> <560D> -<560E> <560E> -<560F> <560F> -<5614> <5614> -<5616> <5616> -<5617> <5617> -<5618> <5618> -<561B> <561B> -<561C> <561C> -<561E> <561E> -<561F> <561F> -<5623> <5623> -<5624> <5624> -<5627> <5627> -<5629> <5629> -<562C> <562C> -<562D> <562D> -<562E> <562E> -<562F> <562F> -<5630> <5630> -<5631> <5631> -<5632> <5632> -<5634> <5634> -<5635> <5635> -<5636> <5636> -<5638> <5638> -<5639> <5639> -<563B> <563B> -<563F> <563F> -<5641> <5641> -<564C> <564C> -<564D> <564D> -<564E> <564E> -<5654> <5654> -<5657> <5657> -<5658> <5658> -<5659> <5659> -<565C> <565C> -<565D> <565D> -<5660> <5660> -<5662> <5662> -<5664> <5664> -<5665> <5665> -<5666> <5666> -<5668> <5668> -<5669> <5669> -<566A> <566A> -<566B> <566B> -<566C> <566C> -<566F> <566F> -<5671> <5671> -endbfrange - -100 beginbfrange -<5672> <5672> -<5674> <5674> -<5676> <5676> -<5678> <5678> -<5679> <5679> -<567B> <567C> -<5680> <5680> -<5685> <5685> -<5686> <5686> -<5687> <5687> -<568C> <568C> -<568E> <568E> -<568F> <568F> -<5693> <5693> -<5695> <5695> -<5699> <5699> -<56A3> <56A3> -<56A6> <56A6> -<56A8> <56A8> -<56AE> <56AE> -<56AF> <56AF> -<56B3> <56B3> -<56B4> <56B4> -<56B6> <56B6> -<56B7> <56B7> -<56BC> <56BC> -<56C0> <56C0> -<56C1> <56C1> -<56C2> <56C2> -<56C5> <56C5> -<56C8> <56C8> -<56C9> <56C9> -<56CA> <56CA> -<56CC> <56CC> -<56D1> <56D1> -<56D4> <56D4> -<56D7> <56D7> -<56DA> <56DA> -<56DB> <56DB> -<56DD> <56DD> -<56DE> <56DE> -<56DF> <56DF> -<56E0> <56E0> -<56E1> <56E1> -<56E2> <56E2> -<56E4> <56E4> -<56EB> <56EB> -<56ED> <56ED> -<56F0> <56F0> -<56F1> <56F1> -<56F4> <56F4> -<56F5> <56F5> -<56F9> <56F9> -<56FA> <56FA> -<56FD> <56FD> -<56FE> <56FE> -<56FF> <56FF> -<5703> <5703> -<5704> <5704> -<5706> <5706> -<5707> <5707> -<5708> <5708> -<5709> <5709> -<570A> <570A> -<570B> <570B> -<570D> <570D> -<5712> <5712> -<5713> <5713> -<5716> <5716> -<5718> <5718> -<571C> <571C> -<571F> <571F> -<5723> <5723> -<5728> <5728> -<5729> <5729> -<572A> <572A> -<572C> <572C> -<572D> <572D> -<572E> <572F> -<5730> <5730> -<5733> <5733> -<5739> <5739> -<573A> <573A> -<573B> <573B> -<573E> <573E> -<5740> <5740> -<5742> <5742> -<5747> <5747> -<574A> <574A> -<574C> <574C> -<574D> <574D> -<574E> <574E> -<574F> <574F> -<5750> <5750> -<5751> <5751> -<5757> <5757> -<575A> <575A> -<575B> <575B> -<575C> <575C> -<575D> <575D> -endbfrange - -100 beginbfrange -<575E> <575E> -<575F> <575F> -<5760> <5760> -<5761> <5761> -<5764> <5764> -<5766> <5766> -<5768> <5768> -<5769> <5769> -<576A> <576A> -<576B> <576B> -<576D> <576D> -<576F> <576F> -<5773> <5773> -<5776> <5776> -<5777> <5777> -<577B> <577B> -<577C> <577C> -<5782> <5782> -<5783> <5783> -<5784> <5784> -<5785> <5785> -<5786> <5786> -<578B> <578B> -<578C> <578C> -<5792> <5792> -<5793> <5793> -<579B> <579B> -<57A0> <57A0> -<57A1> <57A1> -<57A2> <57A2> -<57A3> <57A3> -<57A4> <57A4> -<57A6> <57A6> -<57A7> <57A7> -<57A9> <57A9> -<57AB> <57AB> -<57AD> <57AD> -<57AE> <57AE> -<57B2> <57B2> -<57B4> <57B4> -<57B8> <57B8> -<57C2> <57C2> -<57C3> <57C3> -<57CB> <57CB> -<57CE> <57CE> -<57CF> <57CF> -<57D2> <57D2> -<57D4> <57D4> -<57D5> <57D5> -<57D8> <57D8> -<57D9> <57D9> -<57DA> <57DA> -<57DD> <57DD> -<57DF> <57DF> -<57E0> <57E0> -<57E1> <57E1> -<57E4> <57E4> -<57ED> <57ED> -<57EF> <57EF> -<57F4> <57F4> -<57F7> <57F7> -<57F8> <57F8> -<57F9> <57F9> -<57FA> <57FA> -<57FD> <57FD> -<5800> <5800> -<5802> <5802> -<5805> <5805> -<5806> <5806> -<5807> <5807> -<580A> <580A> -<580B> <580B> -<580D> <580D> -<5811> <5811> -<5815> <5815> -<5816> <5816> -<5819> <5819> -<581D> <581D> -<581E> <581E> -<5820> <5820> -<5821> <5821> -<5824> <5824> -<582A> <582A> -<582F> <582F> -<5830> <5830> -<5831> <5831> -<5834> <5834> -<5835> <5835> -<5844> <5844> -<584A> <584A> -<584B> <584B> -<584C> <584C> -<584D> <584D> -<584F> <584F> -<5851> <5851> -<5852> <5852> -<5854> <5854> -<5857> <5857> -<5858> <5858> -<585E> <585E> -endbfrange - -100 beginbfrange -<5862> <5862> -<5864> <5864> -<5865> <5865> -<586B> <586B> -<586C> <586C> -<5875> <5875> -<5879> <5879> -<587E> <587E> -<5880> <5880> -<5881> <5881> -<5883> <5883> -<5885> <5885> -<5889> <5889> -<588A> <588A> -<5892> <5892> -<5893> <5893> -<5899> <5899> -<589A> <589A> -<589C> <589C> -<589E> <589E> -<589F> <589F> -<58A8> <58A8> -<58A9> <58A9> -<58AE> <58AE> -<58B3> <58B3> -<58BB> <58BB> -<58BC> <58BC> -<58BE> <58BE> -<58C1> <58C1> -<58C5> <58C5> -<58C7> <58C7> -<58D1> <58D1> -<58D3> <58D3> -<58D5> <58D5> -<58D8> <58D8> -<58D9> <58D9> -<58DA> <58DA> -<58DE> <58DE> -<58DF> <58DF> -<58E0> <58E0> -<58E2> <58E2> -<58E4> <58E4> -<58E9> <58E9> -<58EB> <58EB> -<58EC> <58EC> -<58EE> <58EE> -<58EF> <58EF> -<58F0> <58F0> -<58F3> <58F3> -<58F6> <58F6> -<58F9> <58F9> -<58FA> <58FA> -<58FD> <58FD> -<5902> <5902> -<5904> <5904> -<5907> <5907> -<590D> <590D> -<590F> <590F> -<5914> <5914> -<5915> <5915> -<5916> <5916> -<5919> <5919> -<591A> <591A> -<591C> <591C> -<591F> <591F> -<5922> <5922> -<5924> <5924> -<5925> <5925> -<5927> <5927> -<5929> <5929> -<592A> <592A> -<592B> <592B> -<592D> <592D> -<592E> <592E> -<592F> <592F> -<5931> <5931> -<5934> <5934> -<5937> <5937> -<5938> <5938> -<5939> <5939> -<593A> <593A> -<593C> <593C> -<593E> <593E> -<5941> <5941> -<5942> <5942> -<5944> <5944> -<5947> <5947> -<5948> <5948> -<5949> <5949> -<594B> <594B> -<594E> <594E> -<594F> <594F> -<5951> <5951> -<5954> <5954> -<5955> <5955> -<5956> <5956> -<5957> <5957> -<5958> <5958> -<595A> <595A> -<5960> <5960> -endbfrange - -100 beginbfrange -<5962> <5962> -<5965> <5965> -<5969> <5969> -<596A> <596A> -<596C> <596C> -<596E> <596E> -<5973> <5973> -<5974> <5974> -<5976> <5976> -<5978> <5978> -<5979> <5979> -<597D> <597D> -<5981> <5981> -<5982> <5982> -<5983> <5983> -<5984> <5984> -<5986> <5986> -<5987> <5987> -<5988> <5988> -<598A> <598A> -<598D> <598D> -<5992> <5992> -<5993> <5993> -<5996> <5996> -<5997> <5997> -<5999> <5999> -<599D> <599D> -<599E> <599E> -<59A3> <59A3> -<59A4> <59A4> -<59A5> <59A5> -<59A8> <59A8> -<59A9> <59AA> -<59AB> <59AB> -<59AE> <59AE> -<59AF> <59AF> -<59B2> <59B2> -<59B9> <59B9> -<59BB> <59BB> -<59BE> <59BE> -<59C6> <59C6> -<59CA> <59CA> -<59CB> <59CB> -<59D0> <59D0> -<59D1> <59D1> -<59D2> <59D2> -<59D3> <59D3> -<59D4> <59D4> -<59D7> <59D7> -<59D8> <59D8> -<59DA> <59DA> -<59DC> <59DC> -<59DD> <59DD> -<59E3> <59E3> -<59E5> <59E5> -<59E8> <59E8> -<59EC> <59EC> -<59F9> <59F9> -<59FB> <59FB> -<59FF> <59FF> -<5A01> <5A01> -<5A03> <5A03> -<5A04> <5A04> -<5A05> <5A06> -<5A07> <5A07> -<5A08> <5A08> -<5A09> <5A09> -<5A0C> <5A0C> -<5A11> <5A11> -<5A13> <5A13> -<5A18> <5A18> -<5A1C> <5A1C> -<5A1F> <5A1F> -<5A20> <5A20> -<5A23> <5A23> -<5A25> <5A25> -<5A29> <5A29> -<5A31> <5A31> -<5A32> <5A32> -<5A34> <5A34> -<5A36> <5A36> -<5A3C> <5A3C> -<5A40> <5A40> -<5A41> <5A41> -<5A46> <5A46> -<5A49> <5A49> -<5A4A> <5A4A> -<5A55> <5A55> -<5A5A> <5A5A> -<5A62> <5A62> -<5A66> <5A66> -<5A67> <5A67> -<5A6A> <5A6A> -<5A6D> <5A6D> -<5A74> <5A74> -<5A75> <5A75> -<5A76> <5A76> -<5A77> <5A77> -<5A7A> <5A7A> -<5A7F> <5A7F> -endbfrange - -100 beginbfrange -<5A92> <5A92> -<5A9A> <5A9A> -<5A9B> <5A9B> -<5AA7> <5AA7> -<5AAA> <5AAA> -<5AB2> <5AB2> -<5AB3> <5AB3> -<5AB5> <5AB5> -<5AB8> <5AB8> -<5ABD> <5ABD> -<5ABE> <5ABE> -<5AC1> <5AC1> -<5AC2> <5AC2> -<5AC9> <5AC9> -<5ACC> <5ACC> -<5AD2> <5AD2> -<5AD4> <5AD4> -<5AD6> <5AD6> -<5AD7> <5AD7> -<5AD8> <5AD8> -<5ADC> <5ADC> -<5AE0> <5AE0> -<5AE1> <5AE1> -<5AE3> <5AE3> -<5AE6> <5AE6> -<5AE9> <5AE9> -<5AEB> <5AEB> -<5AF1> <5AF1> -<5AF5> <5AF5> -<5AFB> <5AFB> -<5B00> <5B00> -<5B08> <5B08> -<5B09> <5B09> -<5B0B> <5B0B> -<5B0C> <5B0C> -<5B16> <5B16> -<5B17> <5B17> -<5B19> <5B19> -<5B21> <5B21> -<5B2A> <5B2A> -<5B30> <5B30> -<5B32> <5B32> -<5B34> <5B34> -<5B37> <5B37> -<5B38> <5B38> -<5B40> <5B40> -<5B4C> <5B4C> -<5B50> <5B50> -<5B51> <5B51> -<5B53> <5B53> -<5B54> <5B54> -<5B55> <5B55> -<5B57> <5B57> -<5B58> <5B58> -<5B59> <5B59> -<5B5A> <5B5A> -<5B5B> <5B5B> -<5B5C> <5B5C> -<5B5D> <5B5D> -<5B5F> <5B5F> -<5B62> <5B62> -<5B63> <5B63> -<5B64> <5B64> -<5B65> <5B65> -<5B66> <5B66> -<5B69> <5B69> -<5B6A> <5B6A> -<5B6B> <5B6B> -<5B6C> <5B6C> -<5B70> <5B70> -<5B71> <5B71> -<5B73> <5B73> -<5B75> <5B75> -<5B78> <5B78> -<5B7A> <5B7A> -<5B7D> <5B7D> -<5B7F> <5B7F> -<5B80> <5B80> -<5B81> <5B81> -<5B83> <5B83> -<5B84> <5B84> -<5B85> <5B85> -<5B87> <5B87> -<5B88> <5B88> -<5B89> <5B89> -<5B8B> <5B8B> -<5B8C> <5B8C> -<5B8F> <5B8F> -<5B93> <5B93> -<5B95> <5B95> -<5B97> <5B97> -<5B98> <5B98> -<5B99> <5B99> -<5B9A> <5B9A> -<5B9B> <5B9B> -<5B9C> <5B9C> -<5B9D> <5B9D> -<5B9E> <5B9E> -<5BA0> <5BA0> -<5BA1> <5BA1> -endbfrange - -100 beginbfrange -<5BA2> <5BA2> -<5BA3> <5BA3> -<5BA4> <5BA4> -<5BA5> <5BA5> -<5BA6> <5BA6> -<5BAA> <5BAA> -<5BAB> <5BAB> -<5BB0> <5BB0> -<5BB3> <5BB3> -<5BB4> <5BB4> -<5BB5> <5BB5> -<5BB6> <5BB6> -<5BB8> <5BB8> -<5BB9> <5BB9> -<5BBD> <5BBD> -<5BBE> <5BBE> -<5BBF> <5BBF> -<5BC2> <5BC2> -<5BC4> <5BC4> -<5BC5> <5BC5> -<5BC6> <5BC6> -<5BC7> <5BC7> -<5BCC> <5BCC> -<5BD0> <5BD0> -<5BD2> <5BD2> -<5BD3> <5BD3> -<5BDD> <5BDD> -<5BDE> <5BDE> -<5BDF> <5BDF> -<5BE1> <5BE1> -<5BE2> <5BE2> -<5BE4> <5BE4> -<5BE5> <5BE5> -<5BE6> <5BE6> -<5BE7> <5BE7> -<5BE8> <5BE8> -<5BE9> <5BE9> -<5BEB> <5BEB> -<5BEC> <5BEC> -<5BEE> <5BEE> -<5BF0> <5BF0> -<5BF5> <5BF5> -<5BF6> <5BF6> -<5BF8> <5BF8> -<5BF9> <5BF9> -<5BFA> <5BFA> -<5BFB> <5BFB> -<5BFC> <5BFC> -<5BFF> <5BFF> -<5C01> <5C01> -<5C04> <5C04> -<5C06> <5C06> -<5C07> <5C07> -<5C08> <5C08> -<5C09> <5C09> -<5C0A> <5C0A> -<5C0B> <5C0B> -<5C0D> <5C0D> -<5C0E> <5C0E> -<5C0F> <5C0F> -<5C11> <5C11> -<5C14> <5C14> -<5C15> <5C15> -<5C16> <5C16> -<5C18> <5C18> -<5C1A> <5C1A> -<5C1C> <5C1C> -<5C1D> <5C1D> -<5C22> <5C22> -<5C24> <5C24> -<5C25> <5C25> -<5C27> <5C27> -<5C2C> <5C2C> -<5C31> <5C31> -<5C34> <5C34> -<5C37> <5C37> -<5C38> <5C38> -<5C39> <5C39> -<5C3A> <5C3A> -<5C3B> <5C3B> -<5C3C> <5C3C> -<5C3D> <5C3D> -<5C3E> <5C3E> -<5C3F> <5C3F> -<5C40> <5C40> -<5C41> <5C41> -<5C42> <5C42> -<5C45> <5C45> -<5C48> <5C48> -<5C49> <5C49> -<5C4A> <5C4A> -<5C4B> <5C4B> -<5C4E> <5C4E> -<5C4F> <5C4F> -<5C50> <5C50> -<5C51> <5C51> -<5C55> <5C55> -<5C59> <5C59> -<5C5E> <5C5E> -<5C60> <5C60> -endbfrange - -100 beginbfrange -<5C61> <5C61> -<5C62> <5C62> -<5C63> <5C63> -<5C64> <5C64> -<5C65> <5C65> -<5C66> <5C66> -<5C68> <5C68> -<5C6C> <5C6C> -<5C6E> <5C6E> -<5C6F> <5C6F> -<5C71> <5C71> -<5C79> <5C79> -<5C7A> <5C7A> -<5C7F> <5C7F> -<5C81> <5C81> -<5C82> <5C82> -<5C88> <5C88> -<5C8C> <5C8C> -<5C8D> <5C8D> -<5C90> <5C90> -<5C91> <5C91> -<5C94> <5C94> -<5C96> <5C96> -<5C97> <5C97> -<5C98> <5C99> -<5C9A> <5C9A> -<5C9B> <5C9B> -<5C9C> <5C9C> -<5CA1> <5CA1> -<5CA2> <5CA2> -<5CA3> <5CA3> -<5CA9> <5CA9> -<5CAB> <5CAB> -<5CAC> <5CAC> -<5CAD> <5CAD> -<5CB1> <5CB1> -<5CB3> <5CB3> -<5CB5> <5CB5> -<5CB7> <5CB7> -<5CB8> <5CB8> -<5CBD> <5CBD> -<5CBF> <5CBF> -<5CC1> <5CC1> -<5CC4> <5CC4> -<5CCB> <5CCB> -<5CD2> <5CD2> -<5CD9> <5CD9> -<5CE1> <5CE1> -<5CE4> <5CE4> -<5CE5> <5CE5> -<5CE6> <5CE6> -<5CE8> <5CE8> -<5CEA> <5CEA> -<5CED> <5CED> -<5CF0> <5CF0> -<5CF4> <5CF4> -<5CF6> <5CF6> -<5CFB> <5CFB> -<5CFD> <5CFD> -<5D02> <5D03> -<5D06> <5D06> -<5D07> <5D07> -<5D0D> <5D0D> -<5D0E> <5D0E> -<5D14> <5D14> -<5D16> <5D16> -<5D17> <5D17> -<5D1B> <5D1B> -<5D1E> <5D1E> -<5D24> <5D24> -<5D26> <5D26> -<5D27> <5D27> -<5D29> <5D29> -<5D2C> <5D2C> -<5D2D> <5D2D> -<5D2E> <5D2E> -<5D34> <5D34> -<5D3D> <5D3D> -<5D3E> <5D3E> -<5D47> <5D47> -<5D4A> <5D4A> -<5D4B> <5D4B> -<5D4C> <5D4C> -<5D50> <5D50> -<5D58> <5D58> -<5D5B> <5D5B> -<5D5D> <5D5D> -<5D69> <5D69> -<5D6B> <5D6B> -<5D6C> <5D6C> -<5D6F> <5D6F> -<5D74> <5D74> -<5D81> <5D81> -<5D82> <5D82> -<5D84> <5D84> -<5D87> <5D87> -<5D97> <5D97> -<5D99> <5D99> -<5D9D> <5D9D> -<5DA0> <5DA0> -endbfrange - -100 beginbfrange -<5DA7> <5DA7> -<5DB7> <5DB7> -<5DB8> <5DB8> -<5DBA> <5DBA> -<5DBC> <5DBC> -<5DC5> <5DC5> -<5DCB> <5DCB> -<5DCD> <5DCD> -<5DD2> <5DD2> -<5DD4> <5DD4> -<5DDB> <5DDB> -<5DDD> <5DDD> -<5DDE> <5DDE> -<5DE1> <5DE1> -<5DE2> <5DE2> -<5DE5> <5DE5> -<5DE6> <5DE6> -<5DE7> <5DE7> -<5DE8> <5DE8> -<5DE9> <5DE9> -<5DEB> <5DEB> -<5DEE> <5DEE> -<5DEF> <5DEF> -<5DF0> <5DF0> -<5DF1> <5DF1> -<5DF2> <5DF2> -<5DF3> <5DF3> -<5DF4> <5DF4> -<5DF7> <5DF7> -<5DFD> <5DFD> -<5DFE> <5DFE> -<5E01> <5E01> -<5E02> <5E02> -<5E03> <5E03> -<5E05> <5E05> -<5E06> <5E06> -<5E08> <5E08> -<5E0C> <5E0C> -<5E0F> <5E0F> -<5E10> <5E10> -<5E11> <5E11> -<5E14> <5E14> -<5E15> <5E15> -<5E16> <5E16> -<5E18> <5E18> -<5E19> <5E19> -<5E1A> <5E1A> -<5E1B> <5E1B> -<5E1C> <5E1C> -<5E1D> <5E1D> -<5E25> <5E25> -<5E26> <5E26> -<5E27> <5E27> -<5E2B> <5E2B> -<5E2D> <5E2D> -<5E2E> <5E2E> -<5E31> <5E31> -<5E33> <5E33> -<5E36> <5E36> -<5E37> <5E37> -<5E38> <5E38> -<5E3B> <5E3C> -<5E3D> <5E3D> -<5E40> <5E40> -<5E42> <5E42> -<5E43> <5E43> -<5E44> <5E44> -<5E45> <5E45> -<5E4C> <5E4C> -<5E54> <5E54> -<5E55> <5E55> -<5E57> <5E57> -<5E58> <5E58> -<5E5B> <5E5B> -<5E5E> <5E5E> -<5E5F> <5E5F> -<5E61> <5E61> -<5E62> <5E62> -<5E63> <5E63> -<5E6B> <5E6B> -<5E6C> <5E6C> -<5E72> <5E72> -<5E73> <5E73> -<5E74> <5E74> -<5E76> <5E76> -<5E78> <5E78> -<5E79> <5E79> -<5E7A> <5E7A> -<5E7B> <5E7B> -<5E7C> <5E7C> -<5E7D> <5E7D> -<5E7E> <5E7E> -<5E7F> <5E7F> -<5E80> <5E80> -<5E84> <5E84> -<5E86> <5E86> -<5E87> <5E87> -<5E8A> <5E8A> -<5E8B> <5E8B> -<5E8F> <5E8F> -endbfrange - -100 beginbfrange -<5E90> <5E90> -<5E91> <5E91> -<5E93> <5E93> -<5E94> <5E94> -<5E95> <5E95> -<5E96> <5E96> -<5E97> <5E97> -<5E99> <5E99> -<5E9A> <5E9A> -<5E9C> <5E9C> -<5E9E> <5E9E> -<5E9F> <5E9F> -<5EA0> <5EA0> -<5EA5> <5EA5> -<5EA6> <5EA6> -<5EA7> <5EA7> -<5EAB> <5EAB> -<5EAD> <5EAD> -<5EB3> <5EB3> -<5EB5> <5EB5> -<5EB6> <5EB6> -<5EB7> <5EB7> -<5EB8> <5EB8> -<5EB9> <5EB9> -<5EBE> <5EBE> -<5EC9> <5EC9> -<5ECA> <5ECA> -<5ED1> <5ED1> -<5ED2> <5ED2> -<5ED3> <5ED3> -<5ED6> <5ED6> -<5EDB> <5EDB> -<5EDF> <5EDF> -<5EE0> <5EE0> -<5EE1> <5EE1> -<5EE2> <5EE2> -<5EE3> <5EE3> -<5EE8> <5EE8> -<5EEA> <5EEA> -<5EEC> <5EEC> -<5EF3> <5EF3> -<5EF4> <5EF4> -<5EF6> <5EF6> -<5EF7> <5EF7> -<5EFA> <5EFA> -<5EFE> <5EFE> -<5EFF> <5EFF> -<5F00> <5F00> -<5F01> <5F01> -<5F02> <5F02> -<5F03> <5F03> -<5F04> <5F04> -<5F08> <5F08> -<5F0A> <5F0A> -<5F0B> <5F0B> -<5F0F> <5F0F> -<5F11> <5F11> -<5F13> <5F13> -<5F15> <5F15> -<5F17> <5F17> -<5F18> <5F18> -<5F1B> <5F1B> -<5F1F> <5F1F> -<5F20> <5F20> -<5F25> <5F25> -<5F26> <5F26> -<5F27> <5F27> -<5F29> <5F29> -<5F2A> <5F2A> -<5F2D> <5F2D> -<5F2F> <5F2F> -<5F31> <5F31> -<5F33> <5F33> -<5F35> <5F35> -<5F39> <5F39> -<5F3A> <5F3A> -<5F3C> <5F3C> -<5F40> <5F40> -<5F46> <5F46> -<5F48> <5F48> -<5F4C> <5F4C> -<5F4E> <5F4E> -<5F50> <5F50> -<5F52> <5F52> -<5F53> <5F53> -<5F55> <5F55> -<5F56> <5F56> -<5F57> <5F57> -<5F58> <5F58> -<5F59> <5F59> -<5F5D> <5F5D> -<5F61> <5F61> -<5F62> <5F62> -<5F64> <5F64> -<5F66> <5F66> -<5F69> <5F69> -<5F6A> <5F6A> -<5F6C> <5F6C> -<5F6D> <5F6D> -<5F70> <5F70> -endbfrange - -100 beginbfrange -<5F71> <5F71> -<5F73> <5F73> -<5F77> <5F77> -<5F79> <5F79> -<5F7B> <5F7B> -<5F7C> <5F7C> -<5F80> <5F80> -<5F81> <5F81> -<5F82> <5F82> -<5F84> <5F84> -<5F85> <5F85> -<5F87> <5F87> -<5F88> <5F88> -<5F89> <5F89> -<5F8A> <5F8A> -<5F8B> <5F8B> -<5F8C> <5F8C> -<5F90> <5F90> -<5F91> <5F91> -<5F92> <5F92> -<5F95> <5F95> -<5F97> <5F97> -<5F98> <5F98> -<5F99> <5F99> -<5F9C> <5F9C> -<5F9E> <5F9E> -<5FA0> <5FA0> -<5FA1> <5FA1> -<5FA8> <5FA8> -<5FA9> <5FA9> -<5FAA> <5FAA> -<5FAD> <5FAD> -<5FAE> <5FAE> -<5FB5> <5FB5> -<5FB7> <5FB7> -<5FB9> <5FB9> -<5FBC> <5FBC> -<5FBD> <5FBD> -<5FC3> <5FC3> -<5FC4> <5FC4> -<5FC5> <5FC5> -<5FC6> <5FC6> -<5FC9> <5FC9> -<5FCC> <5FCC> -<5FCD> <5FCD> -<5FCF> <5FCF> -<5FD0> <5FD0> -<5FD1> <5FD1> -<5FD2> <5FD2> -<5FD6> <5FD6> -<5FD7> <5FD7> -<5FD8> <5FD8> -<5FD9> <5FD9> -<5FDD> <5FDD> -<5FE0> <5FE0> -<5FE1> <5FE1> -<5FE4> <5FE4> -<5FE7> <5FE7> -<5FEA> <5FEA> -<5FEB> <5FEB> -<5FED> <5FED> -<5FEE> <5FEE> -<5FF1> <5FF1> -<5FF5> <5FF5> -<5FF8> <5FF8> -<5FFB> <5FFB> -<5FFD> <5FFD> -<5FFE> <5FFE> -<5FFF> <5FFF> -<6000> <6000> -<6001> <6001> -<6002> <6002> -<6003> <6003> -<6004> <6004> -<6005> <6006> -<600A> <600A> -<600D> <600D> -<600E> <600E> -<600F> <600F> -<6012> <6012> -<6014> <6014> -<6015> <6015> -<6016> <6016> -<6019> <6019> -<601B> <601B> -<601C> <601C> -<601D> <601D> -<6020> <6020> -<6021> <6021> -<6025> <6025> -<6026> <6026> -<6027> <6027> -<6028> <6028> -<6029> <6029> -<602A> <602A> -<602B> <602B> -<602F> <602F> -<6035> <6035> -<603B> <603B> -<603C> <603C> -endbfrange - -100 beginbfrange -<603F> <603F> -<6041> <6041> -<6042> <6042> -<6043> <6043> -<604B> <604B> -<604D> <604D> -<6050> <6050> -<6052> <6052> -<6055> <6055> -<6059> <6059> -<605A> <605A> -<605D> <605D> -<6062> <6062> -<6063> <6063> -<6064> <6064> -<6067> <6067> -<6068> <6068> -<6069> <6069> -<606A> <606A> -<606B> <606B> -<606C> <606C> -<606D> <606D> -<606F> <606F> -<6070> <6070> -<6073> <6073> -<6076> <6076> -<6078> <6079> -<607A> <607A> -<607B> <607B> -<607C> <607C> -<607D> <607D> -<607F> <607F> -<6083> <6083> -<6084> <6084> -<6089> <6089> -<608C> <608C> -<608D> <608D> -<6092> <6092> -<6094> <6094> -<6096> <6096> -<609A> <609A> -<609B> <609B> -<609D> <609D> -<609F> <609F> -<60A0> <60A0> -<60A3> <60A3> -<60A6> <60A6> -<60A8> <60A8> -<60AB> <60AB> -<60AC> <60AC> -<60AD> <60AD> -<60AF> <60AF> -<60B1> <60B1> -<60B2> <60B2> -<60B4> <60B4> -<60B5> <60B5> -<60B6> <60B6> -<60B8> <60B8> -<60BB> <60BB> -<60BC> <60BC> -<60C5> <60C5> -<60C6> <60C6> -<60CA> <60CA> -<60CB> <60CB> -<60D1> <60D1> -<60D5> <60D5> -<60D8> <60D8> -<60DA> <60DA> -<60DC> <60DC> -<60DD> <60DD> -<60DF> <60DF> -<60E0> <60E0> -<60E1> <60E1> -<60E6> <60E6> -<60E7> <60E7> -<60E8> <60E8> -<60E9> <60E9> -<60EB> <60EB> -<60EC> <60EC> -<60ED> <60ED> -<60EE> <60EE> -<60EF> <60EF> -<60F0> <60F0> -<60F1> <60F1> -<60F2> <60F2> -<60F3> <60F3> -<60F4> <60F4> -<60F6> <60F6> -<60F9> <60F9> -<60FA> <60FA> -<60FB> <60FB> -<6100> <6100> -<6101> <6101> -<6106> <6106> -<6108> <6108> -<6109> <6109> -<610D> <610D> -<610E> <610E> -<610F> <610F> -<6115> <6115> -endbfrange - -100 beginbfrange -<611A> <611A> -<611B> <611B> -<611C> <611C> -<611F> <611F> -<6120> <6120> -<6123> <6123> -<6124> <6124> -<6126> <6126> -<6127> <6127> -<612B> <612B> -<6134> <6134> -<6137> <6137> -<613E> <613E> -<613F> <613F> -<6148> <6148> -<614A> <614A> -<614B> <614B> -<614C> <614C> -<614E> <614E> -<6151> <6151> -<6155> <6155> -<6158> <6158> -<615A> <615A> -<615D> <615D> -<615F> <615F> -<6162> <6162> -<6163> <6163> -<6164> <6164> -<6167> <6167> -<6168> <6168> -<616A> <616A> -<616B> <616B> -<616E> <616E> -<6170> <6170> -<6173> <6173> -<6175> <6175> -<6176> <6176> -<6177> <6177> -<6182> <6182> -<618A> <618A> -<618B> <618B> -<618E> <618E> -<6190> <6190> -<6191> <6191> -<6192> <6192> -<6194> <6194> -<619A> <619A> -<619D> <619D> -<61A4> <61A4> -<61A7> <61A7> -<61A8> <61A8> -<61A9> <61A9> -<61AB> <61AB> -<61AC> <61AC> -<61AE> <61AE> -<61B2> <61B2> -<61B6> <61B6> -<61B7> <61B7> -<61BE> <61BE> -<61C2> <61C2> -<61C7> <61C7> -<61C8> <61C8> -<61C9> <61C9> -<61CA> <61CA> -<61CB> <61CB> -<61CC> <61CC> -<61D1> <61D1> -<61D2> <61D2> -<61D4> <61D4> -<61DE> <61DE> -<61DF> <61DF> -<61E3> <61E3> -<61E6> <61E6> -<61E8> <61E8> -<61F2> <61F2> -<61F5> <61F5> -<61F6> <61F6> -<61F7> <61F7> -<61F8> <61F8> -<61FA> <61FA> -<61FC> <61FC> -<61FE> <61FE> -<61FF> <61FF> -<6200> <6200> -<6206> <6206> -<6207> <6207> -<6208> <6208> -<620A> <620A> -<620B> <620B> -<620C> <620C> -<620D> <620D> -<620E> <620E> -<620F> <620F> -<6210> <6210> -<6211> <6211> -<6212> <6212> -<6214> <6214> -<6215> <6215> -<6216> <6216> -<6217> <6217> -endbfrange - -100 beginbfrange -<6218> <6218> -<621A> <621A> -<621B> <621B> -<621F> <621F> -<6221> <6221> -<6222> <6222> -<6224> <6224> -<6225> <6225> -<6227> <6227> -<622A> <622A> -<622C> <622C> -<622E> <622E> -<6230> <6230> -<6232> <6232> -<6233> <6233> -<6234> <6234> -<6237> <6237> -<623D> <623D> -<623E> <623E> -<623F> <623F> -<6240> <6240> -<6241> <6241> -<6243> <6243> -<6247> <6247> -<6248> <6249> -<624B> <624B> -<624C> <624C> -<624D> <624D> -<624E> <624E> -<6251> <6251> -<6252> <6252> -<6253> <6253> -<6254> <6254> -<6258> <6258> -<625B> <625B> -<6263> <6263> -<6266> <6266> -<6267> <6267> -<6269> <6269> -<626A> <626A> -<626B> <626B> -<626C> <626C> -<626D> <626D> -<626E> <626E> -<626F> <626F> -<6270> <6270> -<6273> <6273> -<6276> <6276> -<6279> <6279> -<627C> <627C> -<627E> <627E> -<627F> <627F> -<6280> <6280> -<6284> <6284> -<6289> <6289> -<628A> <628A> -<6291> <6291> -<6292> <6292> -<6293> <6293> -<6295> <6295> -<6296> <6296> -<6297> <6297> -<6298> <6298> -<629A> <629A> -<629B> <629B> -<629F> <629F> -<62A0> <62A0> -<62A1> <62A1> -<62A2> <62A2> -<62A4> <62A4> -<62A5> <62A5> -<62A8> <62A8> -<62AB> <62AB> -<62AC> <62AC> -<62B1> <62B1> -<62B5> <62B5> -<62B9> <62B9> -<62BB> <62BB> -<62BC> <62BC> -<62BD> <62BD> -<62BF> <62BF> -<62C2> <62C2> -<62C4> <62C4> -<62C5> <62C5> -<62C6> <62C6> -<62C7> <62C7> -<62C8> <62C8> -<62C9> <62C9> -<62CA> <62CA> -<62CC> <62CC> -<62CD> <62CD> -<62CE> <62CE> -<62D0> <62D0> -<62D2> <62D2> -<62D3> <62D3> -<62D4> <62D4> -<62D6> <62D6> -<62D7> <62D7> -<62D8> <62D8> -<62D9> <62D9> -endbfrange - -100 beginbfrange -<62DA> <62DA> -<62DB> <62DB> -<62DC> <62DC> -<62DF> <62DF> -<62E2> <62E2> -<62E3> <62E3> -<62E5> <62E5> -<62E6> <62E6> -<62E7> <62E7> -<62E8> <62E8> -<62E9> <62E9> -<62EC> <62EC> -<62ED> <62ED> -<62EE> <62EE> -<62EF> <62EF> -<62F1> <62F1> -<62F3> <62F3> -<62F4> <62F4> -<62F6> <62F6> -<62F7> <62F7> -<62FC> <62FC> -<62FD> <62FD> -<62FE> <62FE> -<62FF> <62FF> -<6301> <6301> -<6302> <6302> -<6307> <6307> -<6308> <6308> -<6309> <6309> -<630E> <630E> -<6311> <6311> -<6316> <6316> -<631A> <631A> -<631B> <631B> -<631D> <631D> -<631E> <631E> -<631F> <631F> -<6320> <6320> -<6321> <6321> -<6322> <6322> -<6323> <6323> -<6324> <6324> -<6325> <6325> -<6328> <6328> -<632A> <632A> -<632B> <632B> -<632F> <632F> -<6332> <6332> -<6339> <6339> -<633A> <633A> -<633D> <633D> -<633E> <633E> -<6342> <6342> -<6343> <6343> -<6345> <6345> -<6346> <6346> -<6349> <6349> -<634B> <634B> -<634C> <634C> -<634D> <634D> -<634E> <634E> -<634F> <634F> -<6350> <6350> -<6355> <6355> -<635E> <635E> -<635F> <635F> -<6361> <6361> -<6362> <6362> -<6363> <6363> -<6367> <6367> -<6368> <6368> -<6369> <6369> -<636B> <636B> -<636D> <636D> -<636E> <636E> -<6371> <6371> -<6372> <6372> -<6376> <6376> -<6377> <6377> -<637A> <637A> -<637B> <637B> -<6380> <6380> -<6382> <6382> -<6383> <6383> -<6384> <6384> -<6387> <6387> -<6388> <6388> -<6389> <6389> -<638A> <638A> -<638C> <638C> -<638E> <638E> -<638F> <638F> -<6390> <6390> -<6392> <6392> -<6396> <6396> -<6398> <6398> -<63A0> <63A0> -<63A2> <63A2> -<63A3> <63A3> -<63A5> <63A5> -endbfrange - -100 beginbfrange -<63A7> <63A7> -<63A8> <63A8> -<63A9> <63A9> -<63AA> <63AA> -<63AC> <63AC> -<63AD> <63AD> -<63AE> <63AE> -<63B0> <63B0> -<63B3> <63B3> -<63B4> <63B4> -<63B7> <63B7> -<63B8> <63B8> -<63BA> <63BA> -<63BC> <63BC> -<63BE> <63BE> -<63C0> <63C0> -<63C4> <63C4> -<63C6> <63C6> -<63C9> <63C9> -<63CD> <63CD> -<63CE> <63CE> -<63CF> <63CF> -<63D0> <63D0> -<63D2> <63D2> -<63D6> <63D6> -<63DA> <63DA> -<63DE> <63DE> -<63E0> <63E0> -<63E1> <63E1> -<63E3> <63E3> -<63E9> <63E9> -<63EA> <63EA> -<63ED> <63ED> -<63EE> <63EE> -<63F2> <63F2> -<63F4> <63F4> -<63F6> <63F6> -<63F8> <63F8> -<63FD> <63FD> -<63FF> <63FF> -<6400> <6400> -<6401> <6401> -<6402> <6402> -<6405> <6405> -<640B> <640B> -<640C> <640C> -<640D> <640D> -<640F> <640F> -<6410> <6410> -<6413> <6413> -<6414> <6414> -<6417> <6417> -<641B> <641B> -<641C> <641C> -<641E> <641E> -<6420> <6420> -<6421> <6421> -<6426> <6426> -<642A> <642A> -<642C> <642C> -<642D> <642D> -<6434> <6434> -<6436> <6436> -<643A> <643A> -<643D> <643D> -<643F> <643F> -<6441> <6441> -<6444> <6444> -<6445> <6445> -<6446> <6446> -<6447> <6447> -<6448> <6448> -<644A> <644A> -<6451> <6451> -<6452> <6452> -<6454> <6454> -<6458> <6458> -<645C> <645C> -<645E> <645E> -<645F> <645F> -<6467> <6467> -<6469> <6469> -<646D> <646D> -<646F> <646F> -<6473> <6473> -<6476> <6476> -<6478> <6478> -<6479> <6479> -<647A> <647A> -<647B> <647B> -<6482> <6482> -<6484> <6484> -<6485> <6485> -<6487> <6487> -<6488> <6488> -<6491> <6491> -<6492> <6492> -<6493> <6493> -<6495> <6495> -<6496> <6496> -endbfrange - -100 beginbfrange -<6499> <6499> -<649E> <649E> -<649F> <649F> -<64A3> <64A3> -<64A4> <64A4> -<64A5> <64A5> -<64A9> <64A9> -<64AB> <64AB> -<64AC> <64AC> -<64AD> <64AD> -<64AE> <64AE> -<64B0> <64B0> -<64B2> <64B2> -<64B3> <64B3> -<64B5> <64B5> -<64B7> <64B8> -<64BA> <64BA> -<64BB> <64BB> -<64BC> <64BC> -<64BE> <64BE> -<64BF> <64BF> -<64C0> <64C0> -<64C1> <64C1> -<64C2> <64C2> -<64C4> <64C4> -<64C5> <64C5> -<64C7> <64C7> -<64CA> <64CA> -<64CB> <64CB> -<64CD> <64CD> -<64CE> <64CE> -<64D0> <64D0> -<64D2> <64D2> -<64D4> <64D4> -<64D7> <64D7> -<64D8> <64D8> -<64DA> <64DA> -<64DE> <64DE> -<64E0> <64E0> -<64E2> <64E2> -<64E4> <64E4> -<64E6> <64E6> -<64EC> <64EC> -<64EF> <64EF> -<64F0> <64F0> -<64F1> <64F1> -<64F2> <64F2> -<64F4> <64F4> -<64F7> <64F7> -<64FA> <64FA> -<64FB> <64FB> -<64FC> <64FC> -<64FE> <64FE> -<6500> <6500> -<6504> <6504> -<6506> <6506> -<6509> <6509> -<650F> <650F> -<6512> <6512> -<6514> <6514> -<6516> <6516> -<6518> <6518> -<6519> <6519> -<651B> <651B> -<651D> <651D> -<6522> <6522> -<6523> <6523> -<6524> <6524> -<6525> <6525> -<652A> <652A> -<652B> <652B> -<652C> <652C> -<652E> <652E> -<652F> <652F> -<6534> <6534> -<6535> <6535> -<6536> <6536> -<6538> <6538> -<6539> <6539> -<653B> <653B> -<653E> <653E> -<653F> <653F> -<6545> <6545> -<6548> <6548> -<6549> <6549> -<654C> <654C> -<654F> <654F> -<6551> <6551> -<6555> <6555> -<6556> <6556> -<6557> <6557> -<6559> <6559> -<655B> <655B> -<655D> <655D> -<655E> <655E> -<6562> <6562> -<6563> <6563> -<6566> <6566> -<656B> <656B> -<656C> <656C> -endbfrange - -100 beginbfrange -<6570> <6570> -<6572> <6572> -<6574> <6574> -<6575> <6575> -<6577> <6577> -<6578> <6578> -<6582> <6582> -<6583> <6583> -<6587> <6587> -<658B> <658B> -<658C> <658C> -<6590> <6590> -<6591> <6591> -<6593> <6593> -<6595> <6595> -<6597> <6597> -<6599> <6599> -<659B> <659B> -<659C> <659C> -<659F> <659F> -<65A1> <65A1> -<65A4> <65A4> -<65A5> <65A5> -<65A7> <65A7> -<65A9> <65A9> -<65AB> <65AB> -<65AC> <65AC> -<65AD> <65AD> -<65AF> <65AF> -<65B0> <65B0> -<65B7> <65B7> -<65B9> <65B9> -<65BC> <65BC> -<65BD> <65BD> -<65C1> <65C1> -<65C3> <65C3> -<65C4> <65C4> -<65C5> <65C5> -<65C6> <65C6> -<65CB> <65CB> -<65CC> <65CC> -<65CE> <65CE> -<65CF> <65CF> -<65D2> <65D2> -<65D6> <65D6> -<65D7> <65D7> -<65E0> <65E0> -<65E2> <65E2> -<65E5> <65E5> -<65E6> <65E6> -<65E7> <65E7> -<65E8> <65E8> -<65E9> <65E9> -<65EC> <65EC> -<65ED> <65ED> -<65EE> <65F0> -<65F1> <65F1> -<65F6> <65F6> -<65F7> <65F7> -<65FA> <65FA> -<6600> <6600> -<6602> <6602> -<6603> <6603> -<6606> <6606> -<660A> <660A> -<660C> <660C> -<660E> <660E> -<660F> <660F> -<6613> <6613> -<6614> <6614> -<6615> <6615> -<6619> <6619> -<661D> <661D> -<661F> <661F> -<6620> <6620> -<6625> <6625> -<6627> <6627> -<6628> <6628> -<662D> <662D> -<662F> <662F> -<6631> <6631> -<6634> <6634> -<6635> <6635> -<6636> <6636> -<663C> <663C> -<663E> <663E> -<6641> <6641> -<6642> <6642> -<6643> <6643> -<664B> <664B> -<664C> <664C> -<664F> <664F> -<6652> <6652> -<6653> <6653> -<6654> <6654> -<6655> <6655> -<6656> <6656> -<6657> <6657> -<665A> <665A> -<665D> <665D> -endbfrange - -100 beginbfrange -<665F> <665F> -<6661> <6661> -<6664> <6664> -<6666> <6666> -<6668> <6668> -<666E> <666E> -<666F> <666F> -<6670> <6670> -<6674> <6674> -<6676> <6676> -<6677> <6677> -<667A> <667A> -<667E> <667E> -<6682> <6682> -<6684> <6684> -<6687> <6687> -<6688> <6688> -<6689> <6689> -<668C> <668C> -<6691> <6691> -<6696> <6696> -<6697> <6697> -<669D> <669D> -<66A2> <66A2> -<66A7> <66A7> -<66A8> <66A8> -<66AB> <66AB> -<66AE> <66AE> -<66B4> <66B4> -<66B9> <66B9> -<66BE> <66BE> -<66C4> <66C4> -<66C6> <66C6> -<66C7> <66C7> -<66C9> <66C9> -<66D6> <66D6> -<66D9> <66D9> -<66DB> <66DC> -<66DD> <66DD> -<66E0> <66E0> -<66E6> <66E6> -<66E9> <66E9> -<66EC> <66EC> -<66F0> <66F0> -<66F2> <66F2> -<66F3> <66F3> -<66F4> <66F4> -<66F7> <66F7> -<66F8> <66F8> -<66F9> <66F9> -<66FC> <66FC> -<66FE> <66FE> -<66FF> <66FF> -<6700> <6700> -<6703> <6703> -<6708> <6708> -<6709> <6709> -<670A> <670A> -<670B> <670B> -<670D> <670D> -<6710> <6710> -<6714> <6714> -<6715> <6715> -<6717> <6717> -<671B> <671B> -<671D> <671D> -<671F> <671F> -<6726> <6726> -<6727> <6727> -<6728> <6728> -<672A> <672A> -<672B> <672B> -<672C> <672C> -<672D> <672D> -<672F> <672F> -<6731> <6731> -<6734> <6734> -<6735> <6735> -<673A> <673A> -<673D> <673D> -<6740> <6740> -<6742> <6742> -<6743> <6743> -<6746> <6746> -<6748> <6748> -<6749> <6749> -<674C> <674C> -<674E> <674E> -<674F> <674F> -<6750> <6750> -<6751> <6751> -<6753> <6753> -<6756> <6756> -<675C> <675C> -<675E> <675E> -<675F> <675F> -<6760> <6760> -<6761> <6761> -<6765> <6765> -<6768> <6768> -endbfrange - -100 beginbfrange -<6769> <6769> -<676A> <676A> -<676D> <676D> -<676F> <676F> -<6770> <6770> -<6771> <6771> -<6772> <6772> -<6773> <6773> -<6775> <6775> -<6777> <6777> -<677C> <677C> -<677E> <677E> -<677F> <677F> -<6781> <6781> -<6784> <6784> -<6787> <6787> -<6789> <6789> -<678B> <678B> -<6790> <6790> -<6795> <6795> -<6797> <6797> -<6798> <6798> -<679A> <679A> -<679C> <679C> -<679D> <679D> -<679E> <679E> -<67A2> <67A2> -<67A3> <67A3> -<67A5> <67A5> -<67A7> <67A7> -<67A8> <67A8> -<67AA> <67AA> -<67AB> <67AB> -<67AD> <67AD> -<67AF> <67AF> -<67B0> <67B0> -<67B3> <67B3> -<67B5> <67B5> -<67B6> <67B6> -<67B7> <67B7> -<67B8> <67B8> -<67C1> <67C1> -<67C3> <67C3> -<67C4> <67C4> -<67CF> <67CF> -<67D0> <67D0> -<67D1> <67D1> -<67D2> <67D2> -<67D3> <67D3> -<67D4> <67D4> -<67D8> <67D8> -<67D9> <67D9> -<67DA> <67DA> -<67DC> <67DC> -<67DD> <67DD> -<67DE> <67DE> -<67E0> <67E0> -<67E2> <67E2> -<67E5> <67E5> -<67E9> <67E9> -<67EC> <67EC> -<67EF> <67EF> -<67F0> <67F0> -<67F1> <67F1> -<67F3> <67F3> -<67F4> <67F4> -<67FD> <67FD> -<67FF> <67FF> -<6800> <6800> -<6805> <6805> -<6807> <6807> -<6808> <6808> -<6809> <6809> -<680A> <680A> -<680B> <680B> -<680C> <680C> -<680E> <680E> -<680F> <680F> -<6811> <6811> -<6813> <6813> -<6816> <6816> -<6817> <6817> -<681D> <681D> -<6821> <6821> -<6829> <6829> -<682A> <682A> -<6832> <6833> -<6837> <6837> -<6838> <6838> -<6839> <6839> -<683C> <683C> -<683D> <683D> -<683E> <683E> -<6840> <6840> -<6841> <6841> -<6842> <6842> -<6843> <6843> -<6844> <6844> -<6845> <6845> -<6846> <6846> -endbfrange - -100 beginbfrange -<6848> <6848> -<6849> <6849> -<684A> <684A> -<684C> <684C> -<684E> <684E> -<6850> <6850> -<6851> <6851> -<6853> <6853> -<6854> <6854> -<6855> <6855> -<6860> <6861> -<6862> <6862> -<6863> <6863> -<6864> <6864> -<6865> <6865> -<6866> <6866> -<6867> <6867> -<6868> <6868> -<6869> <6869> -<686B> <686B> -<6874> <6874> -<6876> <6876> -<6877> <6877> -<6881> <6881> -<6883> <6883> -<6885> <6885> -<6886> <6886> -<688F> <688F> -<6893> <6893> -<6897> <6897> -<6898> <6898> -<689D> <689D> -<689F> <689F> -<68A2> <68A2> -<68A6> <68A6> -<68A7> <68A7> -<68A8> <68A8> -<68AD> <68AD> -<68AF> <68AF> -<68B0> <68B0> -<68B3> <68B3> -<68B5> <68B5> -<68C0> <68C0> -<68C2> <68C2> -<68C9> <68C9> -<68CB> <68CB> -<68CD> <68CD> -<68D2> <68D2> -<68D5> <68D5> -<68D6> <68D6> -<68D7> <68D7> -<68D8> <68D8> -<68DA> <68DA> -<68DF> <68DF> -<68E0> <68E0> -<68E3> <68E3> -<68E7> <68E7> -<68EE> <68EE> -<68F0> <68F0> -<68F1> <68F1> -<68F5> <68F5> -<68F9> <68F9> -<68FA> <68FA> -<68FC> <68FC> -<6901> <6901> -<6905> <6905> -<690B> <690B> -<690D> <690D> -<690E> <690E> -<690F> <690F> -<6910> <6910> -<6912> <6912> -<691F> <6920> -<6924> <6924> -<692D> <692D> -<6930> <6930> -<6934> <6934> -<6939> <6939> -<693D> <693D> -<693F> <693F> -<6942> <6942> -<694A> <694A> -<6953> <6953> -<6954> <6954> -<6957> <6957> -<695A> <695A> -<695D> <695D> -<695E> <695E> -<6960> <6960> -<6963> <6963> -<6966> <6966> -<6968> <6968> -<696B> <696B> -<696D> <696D> -<696E> <696E> -<6971> <6971> -<6975> <6975> -<6977> <6977> -<6978> <6978> -<6979> <6979> -endbfrange - -100 beginbfrange -<697C> <697C> -<6980> <6980> -<6982> <6982> -<6984> <6984> -<6986> <6986> -<6987> <6988> -<6989> <6989> -<698D> <698D> -<6994> <6994> -<6995> <6995> -<6998> <6998> -<699B> <699B> -<699C> <699C> -<69A7> <69A7> -<69A8> <69A8> -<69AA> <69AA> -<69AB> <69AB> -<69AD> <69AD> -<69AE> <69AE> -<69B1> <69B1> -<69B4> <69B4> -<69B7> <69B7> -<69BB> <69BB> -<69BF> <69BF> -<69C1> <69C1> -<69CA> <69CA> -<69CB> <69CB> -<69CC> <69CC> -<69CD> <69CD> -<69CE> <69CE> -<69D0> <69D0> -<69D4> <69D4> -<69DB> <69DB> -<69DF> <69DF> -<69E0> <69E0> -<69E7> <69E7> -<69ED> <69ED> -<69F2> <69F2> -<69F3> <69F3> -<69FD> <69FD> -<69FF> <69FF> -<6A01> <6A01> -<6A02> <6A02> -<6A05> <6A05> -<6A0A> <6A0A> -<6A13> <6A13> -<6A17> <6A18> -<6A19> <6A19> -<6A1E> <6A1E> -<6A1F> <6A1F> -<6A21> <6A21> -<6A23> <6A23> -<6A28> <6A28> -<6A2A> <6A2A> -<6A2F> <6A2F> -<6A31> <6A31> -<6A35> <6A35> -<6A38> <6A38> -<6A39> <6A39> -<6A3A> <6A3A> -<6A3D> <6A3D> -<6A3E> <6A3E> -<6A44> <6A44> -<6A47> <6A47> -<6A48> <6A48> -<6A4B> <6A4B> -<6A50> <6A50> -<6A58> <6A58> -<6A59> <6A59> -<6A5B> <6A5B> -<6A5F> <6A5F> -<6A61> <6A61> -<6A62> <6A62> -<6A65> <6A65> -<6A71> <6A71> -<6A79> <6A79> -<6A7C> <6A7C> -<6A80> <6A80> -<6A84> <6A84> -<6A89> <6A89> -<6A8E> <6A8E> -<6A90> <6A90> -<6A91> <6A91> -<6A94> <6A94> -<6A97> <6A97> -<6A9C> <6A9C> -<6AA0> <6AA0> -<6AA2> <6AA2> -<6AA3> <6AA3> -<6AA9> <6AA9> -<6AAB> <6AAB> -<6AAC> <6AAC> -<6AAF> <6AAF> -<6AB3> <6AB3> -<6AB8> <6AB8> -<6ABB> <6ABB> -<6AC3> <6AC3> -<6AD3> <6AD3> -<6ADA> <6ADA> -<6ADB> <6ADB> -endbfrange - -100 beginbfrange -<6ADD> <6ADD> -<6ADE> <6ADE> -<6ADF> <6ADF> -<6AE7> <6AE7> -<6AE8> <6AE8> -<6AEA> <6AEA> -<6AEC> <6AEC> -<6AF3> <6AF3> -<6AF8> <6AF8> -<6AFB> <6AFB> -<6B04> <6B04> -<6B0A> <6B0A> -<6B0F> <6B0F> -<6B12> <6B12> -<6B16> <6B16> -<6B1E> <6B1E> -<6B20> <6B20> -<6B21> <6B21> -<6B22> <6B22> -<6B23> <6B23> -<6B24> <6B24> -<6B27> <6B27> -<6B32> <6B32> -<6B37> <6B37> -<6B39> <6B39> -<6B3A> <6B3A> -<6B3D> <6B3D> -<6B3E> <6B3E> -<6B43> <6B43> -<6B46> <6B46> -<6B47> <6B47> -<6B49> <6B49> -<6B4C> <6B4C> -<6B50> <6B50> -<6B59> <6B59> -<6B5F> <6B5F> -<6B61> <6B61> -<6B62> <6B62> -<6B63> <6B63> -<6B64> <6B64> -<6B65> <6B65> -<6B66> <6B66> -<6B67> <6B67> -<6B6A> <6B6A> -<6B72> <6B72> -<6B77> <6B77> -<6B78> <6B78> -<6B79> <6B79> -<6B7B> <6B7B> -<6B7C> <6B7C> -<6B81> <6B82> -<6B83> <6B83> -<6B84> <6B84> -<6B86> <6B86> -<6B87> <6B87> -<6B89> <6B89> -<6B8A> <6B8A> -<6B8B> <6B8B> -<6B8D> <6B8D> -<6B92> <6B93> -<6B96> <6B96> -<6B98> <6B98> -<6B9A> <6B9B> -<6B9E> <6B9E> -<6BA1> <6BA1> -<6BA4> <6BA4> -<6BAA> <6BAA> -<6BAB> <6BAB> -<6BAE> <6BAE> -<6BAF> <6BAF> -<6BB2> <6BB2> -<6BB3> <6BB3> -<6BB4> <6BB4> -<6BB5> <6BB5> -<6BB7> <6BB7> -<6BBA> <6BBA> -<6BBB> <6BBB> -<6BBF> <6BBF> -<6BC1> <6BC1> -<6BC2> <6BC2> -<6BC5> <6BC5> -<6BC6> <6BC6> -<6BCB> <6BCB> -<6BCD> <6BCD> -<6BCF> <6BCF> -<6BD2> <6BD2> -<6BD3> <6BD3> -<6BD4> <6BD4> -<6BD5> <6BD5> -<6BD6> <6BD6> -<6BD7> <6BD7> -<6BD9> <6BD9> -<6BDB> <6BDB> -<6BE1> <6BE1> -<6BEA> <6BEA> -<6BEB> <6BEB> -<6BEF> <6BEF> -<6BF3> <6BF3> -<6BF5> <6BF5> -<6BF9> <6BF9> -endbfrange - -100 beginbfrange -<6BFD> <6BFD> -<6BFF> <6BFF> -<6C05> <6C05> -<6C06> <6C06> -<6C07> <6C07> -<6C08> <6C08> -<6C0C> <6C0C> -<6C0D> <6C0D> -<6C0F> <6C0F> -<6C10> <6C10> -<6C11> <6C11> -<6C13> <6C13> -<6C14> <6C14> -<6C15> <6C15> -<6C16> <6C16> -<6C18> <6C1A> -<6C1B> <6C1B> -<6C1F> <6C1F> -<6C21> <6C21> -<6C22> <6C22> -<6C23> <6C23> -<6C24> <6C24> -<6C26> <6C26> -<6C27> <6C27> -<6C28> <6C28> -<6C29> <6C29> -<6C2A> <6C2A> -<6C2B> <6C2B> -<6C2C> <6C2C> -<6C2E> <6C2E> -<6C2F> <6C2F> -<6C30> <6C30> -<6C32> <6C32> -<6C34> <6C34> -<6C35> <6C35> -<6C38> <6C38> -<6C3D> <6C3D> -<6C40> <6C40> -<6C41> <6C41> -<6C42> <6C42> -<6C46> <6C46> -<6C47> <6C47> -<6C49> <6C49> -<6C4A> <6C4A> -<6C50> <6C50> -<6C54> <6C54> -<6C55> <6C55> -<6C57> <6C57> -<6C5B> <6C5B> -<6C5C> <6C5C> -<6C5D> <6C5D> -<6C5E> <6C5E> -<6C5F> <6C5F> -<6C60> <6C60> -<6C61> <6C61> -<6C64> <6C64> -<6C68> <6C69> -<6C6A> <6C6A> -<6C70> <6C70> -<6C72> <6C72> -<6C74> <6C74> -<6C76> <6C76> -<6C79> <6C79> -<6C7D> <6C7D> -<6C7E> <6C7E> -<6C81> <6C81> -<6C82> <6C82> -<6C83> <6C83> -<6C85> <6C85> -<6C86> <6C86> -<6C88> <6C88> -<6C89> <6C89> -<6C8C> <6C8C> -<6C8F> <6C8F> -<6C90> <6C90> -<6C93> <6C93> -<6C94> <6C94> -<6C99> <6C99> -<6C9B> <6C9B> -<6C9F> <6C9F> -<6CA1> <6CA1> -<6CA3> <6CA3> -<6CA4> <6CA4> -<6CA5> <6CA5> -<6CA6> <6CA6> -<6CA7> <6CA7> -<6CA9> <6CA9> -<6CAA> <6CAA> -<6CAB> <6CAB> -<6CAD> <6CAD> -<6CAE> <6CAE> -<6CB1> <6CB1> -<6CB2> <6CB2> -<6CB3> <6CB3> -<6CB8> <6CB8> -<6CB9> <6CB9> -<6CBB> <6CBB> -<6CBC> <6CBC> -<6CBD> <6CBD> -<6CBE> <6CBE> -endbfrange - -100 beginbfrange -<6CBF> <6CBF> -<6CC4> <6CC4> -<6CC5> <6CC5> -<6CC9> <6CC9> -<6CCA> <6CCA> -<6CCC> <6CCC> -<6CD0> <6CD0> -<6CD3> <6CD3> -<6CD4> <6CD4> -<6CD5> <6CD5> -<6CD6> <6CD6> -<6CD7> <6CD7> -<6CDB> <6CDB> -<6CDE> <6CDE> -<6CE0> <6CE0> -<6CE1> <6CE1> -<6CE2> <6CE2> -<6CE3> <6CE3> -<6CE5> <6CE5> -<6CE8> <6CE8> -<6CEA> <6CEA> -<6CEB> <6CEB> -<6CEE> <6CEE> -<6CEF> <6CEF> -<6CF0> <6CF0> -<6CF1> <6CF1> -<6CF3> <6CF3> -<6CF5> <6CF5> -<6CF6> <6CF6> -<6CF7> <6CF8> -<6CFA> <6CFA> -<6CFB> <6CFB> -<6CFC> <6CFC> -<6CFD> <6CFD> -<6CFE> <6CFE> -<6D01> <6D01> -<6D04> <6D04> -<6D07> <6D07> -<6D0B> <6D0B> -<6D0C> <6D0C> -<6D0E> <6D0E> -<6D12> <6D12> -<6D17> <6D17> -<6D19> <6D19> -<6D1A> <6D1A> -<6D1B> <6D1B> -<6D1E> <6D1E> -<6D25> <6D25> -<6D27> <6D27> -<6D2A> <6D2A> -<6D2B> <6D2B> -<6D2E> <6D2E> -<6D31> <6D31> -<6D32> <6D32> -<6D33> <6D33> -<6D35> <6D35> -<6D39> <6D39> -<6D3B> <6D3B> -<6D3C> <6D3C> -<6D3D> <6D3D> -<6D3E> <6D3E> -<6D41> <6D41> -<6D43> <6D43> -<6D45> <6D45> -<6D46> <6D46> -<6D47> <6D47> -<6D48> <6D48> -<6D4A> <6D4A> -<6D4B> <6D4B> -<6D4D> <6D4D> -<6D4E> <6D4E> -<6D4F> <6D4F> -<6D51> <6D51> -<6D52> <6D52> -<6D53> <6D53> -<6D54> <6D54> -<6D59> <6D59> -<6D5A> <6D5A> -<6D5C> <6D5C> -<6D5E> <6D5E> -<6D60> <6D60> -<6D63> <6D63> -<6D66> <6D66> -<6D69> <6D69> -<6D6A> <6D6A> -<6D6E> <6D6E> -<6D6F> <6D6F> -<6D74> <6D74> -<6D77> <6D77> -<6D78> <6D78> -<6D79> <6D79> -<6D7C> <6D7C> -<6D82> <6D82> -<6D85> <6D85> -<6D87> <6D87> -<6D88> <6D88> -<6D89> <6D89> -<6D8C> <6D8C> -<6D8E> <6D8E> -<6D91> <6D91> -endbfrange - -100 beginbfrange -<6D93> <6D94> -<6D95> <6D95> -<6D9B> <6D9B> -<6D9D> <6D9D> -<6D9E> <6D9E> -<6D9F> <6D9F> -<6DA0> <6DA0> -<6DA1> <6DA1> -<6DA3> <6DA3> -<6DA4> <6DA4> -<6DA6> <6DA6> -<6DA7> <6DA7> -<6DA8> <6DA8> -<6DA9> <6DA9> -<6DAA> <6DAA> -<6DAB> <6DAB> -<6DAE> <6DAE> -<6DAF> <6DAF> -<6DB2> <6DB2> -<6DB5> <6DB5> -<6DB8> <6DB8> -<6DBF> <6DBF> -<6DC0> <6DC0> -<6DC4> <6DC4> -<6DC5> <6DC5> -<6DC6> <6DC6> -<6DC7> <6DC7> -<6DCB> <6DCB> -<6DCC> <6DCC> -<6DD1> <6DD1> -<6DD6> <6DD6> -<6DD8> <6DD8> -<6DD9> <6DD9> -<6DDD> <6DDD> -<6DDE> <6DDE> -<6DE0> <6DE0> -<6DE1> <6DE1> -<6DE4> <6DE4> -<6DE6> <6DE6> -<6DEA> <6DEA> -<6DEB> <6DEB> -<6DEC> <6DEC> -<6DEE> <6DEE> -<6DF1> <6DF1> -<6DF3> <6DF3> -<6DF5> <6DF5> -<6DF6> <6DF6> -<6DF7> <6DF7> -<6DF9> <6DF9> -<6DFA> <6DFA> -<6DFB> <6DFB> -<6DFC> <6DFC> -<6E05> <6E05> -<6E0A> <6E0A> -<6E0C> <6E0C> -<6E0D> <6E0D> -<6E0E> <6E0E> -<6E10> <6E10> -<6E11> <6E11> -<6E14> <6E14> -<6E16> <6E16> -<6E17> <6E17> -<6E1A> <6E1A> -<6E1D> <6E1D> -<6E20> <6E20> -<6E21> <6E21> -<6E23> <6E23> -<6E24> <6E24> -<6E25> <6E25> -<6E26> <6E26> -<6E29> <6E29> -<6E2B> <6E2B> -<6E2C> <6E2C> -<6E2D> <6E2D> -<6E2F> <6E2F> -<6E32> <6E32> -<6E34> <6E34> -<6E38> <6E38> -<6E3A> <6E3A> -<6E3E> <6E3E> -<6E43> <6E43> -<6E44> <6E44> -<6E4D> <6E4D> -<6E4E> <6E4E> -<6E53> <6E54> -<6E56> <6E56> -<6E58> <6E58> -<6E5B> <6E5B> -<6E5E> <6E5E> -<6E5F> <6E5F> -<6E6B> <6E6B> -<6E6E> <6E6E> -<6E6F> <6E6F> -<6E7E> <6E7E> -<6E7F> <6E7F> -<6E83> <6E83> -<6E85> <6E85> -<6E86> <6E86> -<6E89> <6E89> -<6E8F> <6E8F> -endbfrange - -100 beginbfrange -<6E90> <6E90> -<6E96> <6E96> -<6E98> <6E98> -<6E9C> <6E9C> -<6E9D> <6E9D> -<6E9F> <6E9F> -<6EA2> <6EA2> -<6EA5> <6EA5> -<6EA7> <6EA7> -<6EAA> <6EAA> -<6EAF> <6EAF> -<6EB1> <6EB1> -<6EB2> <6EB2> -<6EB4> <6EB4> -<6EB6> <6EB6> -<6EB7> <6EB7> -<6EBA> <6EBA> -<6EBB> <6EBB> -<6EBD> <6EBD> -<6EC1> <6EC1> -<6EC2> <6EC2> -<6EC4> <6EC4> -<6EC5> <6EC5> -<6EC7> <6EC7> -<6ECB> <6ECB> -<6ECC> <6ECC> -<6ECE> <6ECE> -<6ECF> <6ECF> -<6ED1> <6ED1> -<6ED3> <6ED3> -<6ED4> <6ED4> -<6ED5> <6ED5> -<6ED7> <6ED7> -<6EDA> <6EDA> -<6EDE> <6EDE> -<6EDF> <6EDF> -<6EE0> <6EE0> -<6EE1> <6EE1> -<6EE2> <6EE2> -<6EE4> <6EE4> -<6EE5> <6EE5> -<6EE6> <6EE6> -<6EE8> <6EE8> -<6EE9> <6EE9> -<6EEC> <6EEC> -<6EEF> <6EEF> -<6EF2> <6EF2> -<6EF4> <6EF4> -<6EF7> <6EF7> -<6EF8> <6EF8> -<6EF9> <6EF9> -<6EFF> <6EFF> -<6F01> <6F01> -<6F02> <6F02> -<6F06> <6F06> -<6F09> <6F09> -<6F0F> <6F0F> -<6F13> <6F13> -<6F14> <6F14> -<6F15> <6F15> -<6F1A> <6F1A> -<6F20> <6F20> -<6F22> <6F22> -<6F23> <6F23> -<6F24> <6F24> -<6F29> <6F29> -<6F2A> <6F2A> -<6F2B> <6F2B> -<6F2C> <6F2C> -<6F2D> <6F2D> -<6F2F> <6F2F> -<6F31> <6F31> -<6F32> <6F32> -<6F33> <6F33> -<6F36> <6F36> -<6F38> <6F38> -<6F3E> <6F3E> -<6F3F> <6F3F> -<6F41> <6F41> -<6F46> <6F47> -<6F4B> <6F4B> -<6F4D> <6F4D> -<6F51> <6F51> -<6F54> <6F54> -<6F58> <6F58> -<6F59> <6F59> -<6F5C> <6F5C> -<6F5E> <6F5E> -<6F62> <6F62> -<6F64> <6F64> -<6F66> <6F66> -<6F6D> <6F6D> -<6F6E> <6F6E> -<6F6F> <6F6F> -<6F70> <6F70> -<6F72> <6F72> -<6F74> <6F74> -<6F77> <6F77> -<6F78> <6F78> -<6F7A> <6F7A> -endbfrange - -100 beginbfrange -<6F7C> <6F7C> -<6F7F> <6F7F> -<6F80> <6F80> -<6F84> <6F84> -<6F86> <6F86> -<6F87> <6F87> -<6F88> <6F88> -<6F89> <6F89> -<6F8C> <6F8C> -<6F8D> <6F8D> -<6F8E> <6F8E> -<6F97> <6F97> -<6F9C> <6F9C> -<6FA0> <6FA0> -<6FA1> <6FA1> -<6FA4> <6FA4> -<6FA7> <6FA7> -<6FA9> <6FA9> -<6FAE> <6FAE> -<6FB1> <6FB1> -<6FB3> <6FB3> -<6FB6> <6FB6> -<6FB9> <6FB9> -<6FC0> <6FC0> -<6FC1> <6FC1> -<6FC2> <6FC2> -<6FC3> <6FC3> -<6FC9> <6FC9> -<6FD1> <6FD1> -<6FD2> <6FD2> -<6FD5> <6FD5> -<6FD8> <6FD8> -<6FDB> <6FDB> -<6FDE> <6FDE> -<6FDF> <6FDF> -<6FE0> <6FE0> -<6FE1> <6FE1> -<6FE4> <6FE4> -<6FEB> <6FEB> -<6FEE> <6FEE> -<6FEF> <6FEF> -<6FF0> <6FF0> -<6FF1> <6FF1> -<6FFA> <6FFA> -<6FFC> <6FFC> -<6FFE> <6FFE> -<7005> <7005> -<7006> <7006> -<7009> <7009> -<700B> <700B> -<700F> <700F> -<7011> <7011> -<7015> <7015> -<7018> <7018> -<701A> <701A> -<701B> <701B> -<701D> <701D> -<701F> <701F> -<7020> <7020> -<7023> <7023> -<7027> <7027> -<7028> <7028> -<7030> <7030> -<7032> <7032> -<7035> <7035> -<7039> <7039> -<703E> <703E> -<7043> <7043> -<7044> <7044> -<704C> <704C> -<704F> <704F> -<7051> <7051> -<7055> <7055> -<7058> <7058> -<705D> <705D> -<705E> <705E> -<7063> <7063> -<7064> <7064> -<7067> <7067> -<706B> <706B> -<706C> <706C> -<706D> <706D> -<706F> <706F> -<7070> <7070> -<7075> <7075> -<7076> <7076> -<7078> <7078> -<707C> <707C> -<707E> <707E> -<707F> <707F> -<7080> <7080> -<7085> <7085> -<7089> <7089> -<708A> <708A> -<708E> <708E> -<7092> <7092> -<7094> <7094> -<7095> <7095> -<7096> <7096> -<7099> <7099> -endbfrange - -100 beginbfrange -<709C> <709C> -<709D> <709D> -<70AB> <70AB> -<70AC> <70AC> -<70AD> <70AD> -<70AE> <70AE> -<70AF> <70AF> -<70B1> <70B1> -<70B3> <70B3> -<70B7> <70B7> -<70B8> <70B8> -<70B9> <70B9> -<70BB> <70BB> -<70BC> <70BC> -<70BD> <70BD> -<70C0> <70C0> -<70C1> <70C1> -<70C2> <70C2> -<70C3> <70C3> -<70C8> <70C8> -<70CA> <70CA> -<70CF> <70CF> -<70D8> <70D8> -<70D9> <70D9> -<70DB> <70DB> -<70DF> <70DF> -<70E4> <70E4> -<70E6> <70E6> -<70E7> <70E7> -<70E8> <70E8> -<70E9> <70E9> -<70EB> <70EB> -<70EC> <70EC> -<70ED> <70ED> -<70EF> <70EF> -<70F4> <70F4> -<70F7> <70F7> -<70F9> <70F9> -<70FD> <70FD> -<7109> <7109> -<710A> <710A> -<7110> <7110> -<7113> <7113> -<7115> <7115> -<7116> <7116> -<7118> <7118> -<7119> <7119> -<711A> <711A> -<7121> <7121> -<7126> <7126> -<712F> <712F> -<7130> <7130> -<7131> <7131> -<7136> <7136> -<7145> <7145> -<7149> <7149> -<714A> <714A> -<714C> <714C> -<714E> <714E> -<7152> <7152> -<715C> <715C> -<715E> <715E> -<7162> <7162> -<7164> <7164> -<7166> <7166> -<7167> <7167> -<7168> <7168> -<7169> <7169> -<716C> <716C> -<716E> <716E> -<7172> <7172> -<7173> <7173> -<7178> <7178> -<717A> <717A> -<717D> <717D> -<7184> <7184> -<718A> <718A> -<718F> <718F> -<7192> <7192> -<7194> <7194> -<7197> <7197> -<7198> <7198> -<7199> <7199> -<719F> <719F> -<71A0> <71A0> -<71A8> <71A8> -<71AC> <71AC> -<71B1> <71B1> -<71B3> <71B3> -<71B5> <71B5> -<71B9> <71B9> -<71BE> <71BE> -<71C1> <71C1> -<71C3> <71C3> -<71C8> <71C8> -<71CE> <71CE> -<71D2> <71D2> -<71D4> <71D4> -<71D5> <71D5> -<71D9> <71D9> -endbfrange - -100 beginbfrange -<71DC> <71DC> -<71DF> <71DF> -<71E0> <71E0> -<71E5> <71E5> -<71E6> <71E6> -<71E7> <71E7> -<71ED> <71ED> -<71EE> <71EE> -<71F4> <71F4> -<71F9> <71F9> -<71FC> <71FC> -<71FE> <71FE> -<7206> <7206> -<720D> <720D> -<7210> <7210> -<721B> <721B> -<721D> <721D> -<7228> <7228> -<722A> <722A> -<722C> <722C> -<7230> <7230> -<7231> <7231> -<7232> <7232> -<7235> <7235> -<7236> <7236> -<7237> <7237> -<7238> <7238> -<7239> <7239> -<723A> <723A> -<723B> <723B> -<723D> <723D> -<723E> <723E> -<723F> <723F> -<7247> <7247> -<7248> <7248> -<724C> <724C> -<724D> <724D> -<7252> <7252> -<7256> <7256> -<7258> <7258> -<7259> <7259> -<725B> <725B> -<725D> <725D> -<725F> <725F> -<7261> <7261> -<7262> <7262> -<7266> <7266> -<7267> <7267> -<7269> <7269> -<726E> <726E> -<726F> <726F> -<7272> <7272> -<7275> <7275> -<7279> <7279> -<727A> <727A> -<727D> <727D> -<727E> <727F> -<7280> <7280> -<7281> <7281> -<7284> <7284> -<728A> <728A> -<728B> <728B> -<728D> <728D> -<728F> <728F> -<7292> <7292> -<7296> <7296> -<729F> <729F> -<72A2> <72A2> -<72A7> <72A7> -<72AC> <72AC> -<72AD> <72AD> -<72AF> <72AF> -<72B0> <72B0> -<72B4> <72B4> -<72B6> <72B6> -<72B7> <72B8> -<72B9> <72B9> -<72C0> <72C0> -<72C1> <72C1> -<72C2> <72C2> -<72C3> <72C3> -<72C4> <72C4> -<72C8> <72C8> -<72CD> <72CD> -<72CE> <72CE> -<72D0> <72D0> -<72D2> <72D2> -<72D7> <72D7> -<72D9> <72D9> -<72DE> <72DE> -<72E0> <72E0> -<72E1> <72E1> -<72E8> <72E8> -<72E9> <72E9> -<72EC> <72EC> -<72ED> <72ED> -<72EE> <72EE> -<72EF> <72EF> -<72F0> <72F0> -<72F1> <72F1> -endbfrange - -100 beginbfrange -<72F2> <72F2> -<72F3> <72F3> -<72F4> <72F4> -<72F7> <72F7> -<72F8> <72F8> -<72F9> <72F9> -<72FA> <72FA> -<72FB> <72FB> -<72FC> <72FC> -<72FD> <72FD> -<7301> <7301> -<7303> <7303> -<730A> <730A> -<730E> <730E> -<7313> <7313> -<7315> <7315> -<7316> <7316> -<7317> <7317> -<731B> <731B> -<731C> <731C> -<731D> <731D> -<731E> <731E> -<7321> <7321> -<7322> <7322> -<7325> <7325> -<7329> <7329> -<732A> <732A> -<732B> <732B> -<732C> <732C> -<732E> <732E> -<7331> <7331> -<7334> <7334> -<7336> <7336> -<7337> <7337> -<7338> <7338> -<7339> <7339> -<733B> <733B> -<733E> <733E> -<733F> <733F> -<7341> <7341> -<7344> <7344> -<7345> <7345> -<734D> <734D> -<7350> <7350> -<7352> <7352> -<7357> <7357> -<7360> <7360> -<7368> <7368> -<736A> <736A> -<736B> <736B> -<736C> <736C> -<736D> <736D> -<736F> <736F> -<7370> <7370> -<7372> <7372> -<7375> <7375> -<7377> <7377> -<7378> <7378> -<737A> <737A> -<737B> <737B> -<737C> <737C> -<737E> <737E> -<7380> <7380> -<7384> <7384> -<7387> <7387> -<7389> <7389> -<738B> <738B> -<738E> <738E> -<7391> <7391> -<7396> <7396> -<739B> <739B> -<739F> <739F> -<73A2> <73A2> -<73A9> <73A9> -<73AB> <73AB> -<73AE> <73AE> -<73AF> <73AF> -<73B0> <73B0> -<73B2> <73B2> -<73B3> <73B3> -<73B7> <73B7> -<73BA> <73BA> -<73BB> <73BB> -<73C0> <73C0> -<73C2> <73C2> -<73C8> <73C8> -<73C9> <73C9> -<73CA> <73CA> -<73CD> <73CD> -<73CF> <73CF> -<73D0> <73D0> -<73D1> <73D1> -<73D9> <73D9> -<73DE> <73DE> -<73E0> <73E0> -<73E5> <73E5> -<73E7> <73E7> -<73E9> <73E9> -<73ED> <73ED> -<73F2> <73F2> -endbfrange - -100 beginbfrange -<73FE> <73FE> -<7403> <7403> -<7405> <7405> -<7406> <7406> -<7409> <7409> -<740A> <740A> -<740F> <740F> -<7410> <7410> -<741A> <741A> -<741B> <741B> -<7422> <7422> -<7425> <7425> -<7426> <7426> -<7428> <7428> -<742A> <742A> -<742C> <742C> -<742E> <742E> -<7430> <7430> -<7433> <7433> -<7434> <7434> -<7435> <7435> -<7436> <7436> -<743C> <743C> -<743F> <743F> -<7441> <7441> -<744B> <744B> -<7455> <7455> -<7457> <7457> -<7459> <7459> -<745A> <745A> -<745B> <745B> -<745C> <745C> -<745E> <745E> -<745F> <745F> -<7463> <7463> -<7469> <7469> -<746A> <746A> -<746D> <746D> -<7470> <7470> -<7476> <7476> -<7477> <7477> -<747E> <747E> -<7480> <7481> -<7483> <7483> -<7487> <7487> -<7489> <7489> -<748B> <748B> -<748E> <748E> -<7490> <7490> -<749C> <749C> -<749E> <749E> -<74A3> <74A3> -<74A6> <74A6> -<74A7> <74A7> -<74A8> <74A9> -<74B0> <74B0> -<74BA> <74BA> -<74BD> <74BD> -<74CA> <74CA> -<74CF> <74CF> -<74D2> <74D2> -<74D4> <74D4> -<74DA> <74DA> -<74DC> <74DC> -<74DE> <74DE> -<74E0> <74E0> -<74E2> <74E2> -<74E3> <74E3> -<74E4> <74E4> -<74E6> <74E6> -<74EE> <74EE> -<74EF> <74EF> -<74F4> <74F4> -<74F6> <74F6> -<74F7> <74F7> -<74FF> <74FF> -<7504> <7504> -<750C> <750C> -<750D> <750D> -<750F> <750F> -<7511> <7511> -<7513> <7513> -<7518> <7518> -<7519> <7519> -<751A> <751A> -<751C> <751C> -<751F> <751F> -<7523> <7523> -<7525> <7525> -<7528> <7528> -<7529> <7529> -<752B> <752B> -<752C> <752C> -<752D> <752D> -<752F> <752F> -<7530> <7530> -<7531> <7531> -<7532> <7532> -<7533> <7533> -<7535> <7535> -endbfrange - -100 beginbfrange -<7537> <7537> -<7538> <7538> -<753A> <753A> -<753B> <753B> -<753E> <753E> -<7540> <7540> -<7545> <7545> -<7548> <7548> -<754B> <754B> -<754C> <754C> -<754E> <754E> -<754F> <754F> -<7554> <7554> -<7559> <7559> -<755A> <755A> -<755B> <755B> -<755C> <755C> -<755D> <755D> -<7562> <7562> -<7565> <7565> -<7566> <7566> -<756A> <756A> -<756B> <756B> -<7572> <7572> -<7574> <7574> -<7576> <7576> -<7578> <7578> -<7579> <7579> -<757F> <757F> -<7583> <7583> -<7586> <7586> -<7587> <7587> -<758B> <758B> -<758F> <758F> -<7591> <7591> -<7592> <7592> -<7594> <7594> -<7596> <7596> -<7597> <7597> -<7599> <7599> -<759A> <759A> -<759D> <759D> -<759F> <759F> -<75A0> <75A0> -<75A1> <75A1> -<75A3> <75A3> -<75A4> <75A4> -<75A5> <75A5> -<75AB> <75AB> -<75AC> <75AC> -<75AE> <75AE> -<75AF> <75AF> -<75B0> <75B0> -<75B1> <75B1> -<75B2> <75B2> -<75B3> <75B4> -<75B5> <75B5> -<75B8> <75B8> -<75B9> <75B9> -<75BC> <75BC> -<75BD> <75BD> -<75BE> <75BE> -<75C2> <75C2> -<75C3> <75C3> -<75C4> <75C4> -<75C5> <75C5> -<75C7> <75C7> -<75C8> <75C8> -<75C9> <75C9> -<75CA> <75CA> -<75CD> <75CD> -<75D2> <75D2> -<75D4> <75D4> -<75D5> <75D5> -<75D6> <75D6> -<75D8> <75D8> -<75D9> <75D9> -<75DB> <75DB> -<75DE> <75DE> -<75E2> <75E2> -<75E3> <75E3> -<75E4> <75E4> -<75E6> <75E6> -<75E7> <75E7> -<75E8> <75E8> -<75EA> <75EA> -<75EB> <75EB> -<75F0> <75F0> -<75F1> <75F1> -<75F4> <75F4> -<75F9> <75F9> -<75FC> <75FC> -<75FF> <75FF> -<7600> <7600> -<7601> <7601> -<7602> <7602> -<7603> <7603> -<7605> <7605> -<760A> <760A> -<760B> <760B> -endbfrange - -100 beginbfrange -<760C> <760C> -<760D> <760D> -<7610> <7610> -<7615> <7615> -<7617> <7617> -<7618> <7618> -<7619> <7619> -<761B> <761B> -<761E> <761E> -<761F> <761F> -<7620> <7620> -<7621> <7621> -<7622> <7622> -<7624> <7624> -<7625> <7625> -<7626> <7626> -<7627> <7627> -<7629> <7629> -<762A> <762A> -<762B> <762B> -<762D> <762D> -<7630> <7630> -<7633> <7633> -<7634> <7634> -<7635> <7635> -<7638> <7638> -<763B> <763B> -<763C> <763C> -<763E> <763E> -<763F> <763F> -<7640> <7640> -<7642> <7642> -<7643> <7643> -<7646> <7646> -<7647> <7647> -<7649> <7649> -<764C> <764C> -<764D> <764D> -<7654> <7654> -<7656> <7656> -<7658> <7658> -<765C> <765C> -<765E> <765E> -<765F> <765F> -<7662> <7662> -<7663> <7663> -<7664> <7664> -<7665> <7665> -<7667> <7667> -<7669> <7669> -<766B> <766B> -<766C> <766C> -<766D> <766D> -<766E> <766E> -<766F> <766F> -<7670> <7670> -<7671> <7671> -<7672> <7672> -<7678> <7678> -<767B> <767B> -<767C> <767C> -<767D> <767D> -<767E> <767E> -<7682> <7682> -<7684> <7684> -<7686> <7686> -<7687> <7687> -<7688> <7688> -<768B> <768B> -<768E> <768E> -<7691> <7691> -<7693> <7693> -<7696> <7696> -<7699> <7699> -<769A> <769A> -<76A4> <76A4> -<76AE> <76AE> -<76B1> <76B1> -<76B2> <76B2> -<76B4> <76B4> -<76B8> <76B8> -<76BA> <76BA> -<76BF> <76BF> -<76C2> <76C2> -<76C5> <76C5> -<76C6> <76C6> -<76C8> <76C8> -<76CA> <76CA> -<76CD> <76CD> -<76CE> <76CE> -<76CF> <76CF> -<76D0> <76D0> -<76D1> <76D1> -<76D2> <76D2> -<76D4> <76D4> -<76D6> <76D6> -<76D7> <76D7> -<76D8> <76D8> -<76DB> <76DB> -<76DE> <76DE> -endbfrange - -100 beginbfrange -<76DF> <76DF> -<76E1> <76E1> -<76E3> <76E3> -<76E4> <76E4> -<76E5> <76E5> -<76E7> <76E7> -<76EE> <76EE> -<76EF> <76EF> -<76F1> <76F1> -<76F2> <76F2> -<76F4> <76F4> -<76F8> <76F8> -<76F9> <76F9> -<76FC> <76FC> -<76FE> <76FE> -<7701> <7701> -<7704> <7704> -<7707> <7708> -<7709> <7709> -<770B> <770B> -<770D> <770D> -<7719> <7719> -<771A> <771A> -<771F> <771F> -<7720> <7720> -<7722> <7722> -<7726> <7726> -<7728> <7728> -<7729> <7729> -<772D> <772D> -<772F> <772F> -<7735> <7735> -<7736> <7736> -<7737> <7737> -<7738> <7738> -<773A> <773A> -<773C> <773C> -<7740> <7740> -<7741> <7741> -<7743> <7743> -<7747> <7747> -<774F> <774F> -<7750> <7751> -<775A> <775A> -<775B> <775B> -<775E> <775E> -<7761> <7761> -<7762> <7762> -<7763> <7763> -<7765> <7765> -<7766> <7766> -<7768> <7768> -<776B> <776B> -<776C> <776C> -<7779> <7779> -<777D> <777D> -<777E> <777E> -<777F> <777F> -<7780> <7780> -<7784> <7784> -<7785> <7785> -<778C> <778C> -<778D> <778D> -<778E> <778E> -<7791> <7791> -<7792> <7792> -<7798> <7798> -<779E> <779E> -<779F> <77A0> -<77A2> <77A2> -<77A5> <77A5> -<77A7> <77A7> -<77A9> <77A9> -<77AA> <77AA> -<77AC> <77AC> -<77AD> <77AD> -<77B0> <77B0> -<77B3> <77B3> -<77B5> <77B5> -<77BB> <77BB> -<77BC> <77BC> -<77BD> <77BD> -<77BF> <77BF> -<77C7> <77C7> -<77CD> <77CD> -<77D7> <77D7> -<77DA> <77DA> -<77DB> <77DB> -<77DC> <77DC> -<77E2> <77E2> -<77E3> <77E3> -<77E5> <77E5> -<77E7> <77E7> -<77E9> <77E9> -<77EB> <77EB> -<77EC> <77EC> -<77ED> <77ED> -<77EE> <77EE> -<77EF> <77EF> -<77F3> <77F3> -endbfrange - -100 beginbfrange -<77F6> <77F6> -<77F8> <77F8> -<77FD> <77FD> -<77FE> <77FE> -<77FF> <77FF> -<7800> <7800> -<7801> <7801> -<7802> <7802> -<7809> <7809> -<780C> <780C> -<780D> <780D> -<7811> <7811> -<7812> <7812> -<7814> <7814> -<7816> <7816> -<7817> <7818> -<781A> <781A> -<781C> <781D> -<781F> <781F> -<7823> <7823> -<7825> <7825> -<7826> <7826> -<7827> <7827> -<7829> <7829> -<782C> <782C> -<782D> <782D> -<7830> <7830> -<7834> <7834> -<7837> <7837> -<7838> <7838> -<7839> <783B> -<783C> <783C> -<783E> <783E> -<7840> <7840> -<7843> <7843> -<7845> <7845> -<7847> <7847> -<784C> <784C> -<784E> <784E> -<7850> <7850> -<7852> <7852> -<7855> <7855> -<7856> <7857> -<785D> <785D> -<7864> <7864> -<7868> <7868> -<786A> <786A> -<786B> <786B> -<786C> <786C> -<786D> <786D> -<786E> <786E> -<786F> <786F> -<7877> <7877> -<787C> <787C> -<7887> <7887> -<7889> <7889> -<788C> <788C> -<788D> <788D> -<788E> <788E> -<7891> <7891> -<7893> <7893> -<7897> <7897> -<7898> <7898> -<789A> <789A> -<789B> <789B> -<789C> <789C> -<789F> <789F> -<78A1> <78A1> -<78A3> <78A3> -<78A5> <78A5> -<78A7> <78A7> -<78A9> <78A9> -<78AD> <78AD> -<78B0> <78B0> -<78B1> <78B1> -<78B2> <78B2> -<78B3> <78B3> -<78B4> <78B4> -<78B8> <78B8> -<78B9> <78B9> -<78BA> <78BA> -<78BC> <78BC> -<78BE> <78BE> -<78C1> <78C1> -<78C5> <78C5> -<78C9> <78C9> -<78CA> <78CA> -<78CB> <78CB> -<78D0> <78D0> -<78D4> <78D4> -<78D5> <78D5> -<78D9> <78D9> -<78DA> <78DA> -<78E3> <78E3> -<78E7> <78E7> -<78E8> <78E8> -<78EC> <78EC> -<78EF> <78EF> -<78F2> <78F2> -<78F4> <78F4> -endbfrange - -100 beginbfrange -<78F7> <78F7> -<78FA> <78FA> -<78FD> <78FD> -<7901> <7901> -<7905> <7905> -<790E> <790E> -<7913> <7913> -<7919> <7919> -<791E> <791E> -<7924> <7924> -<7926> <7926> -<792A> <792A> -<792B> <792B> -<792C> <792C> -<7931> <7931> -<7934> <7934> -<793A> <793A> -<793B> <793B> -<793C> <793C> -<793E> <793E> -<7940> <7940> -<7941> <7941> -<7946> <7946> -<7948> <7948> -<7949> <7949> -<7953> <7953> -<7956> <7956> -<7957> <7957> -<795A> <795A> -<795B> <795C> -<795D> <795D> -<795E> <795E> -<795F> <795F> -<7960> <7960> -<7962> <7962> -<7965> <7965> -<7967> <7967> -<7968> <7968> -<796D> <796D> -<796F> <796F> -<7977> <7977> -<7978> <7978> -<797A> <797A> -<7980> <7980> -<7981> <7981> -<7984> <7984> -<7985> <7985> -<798A> <798A> -<798D> <798D> -<798E> <798E> -<798F> <798F> -<799A> <799A> -<79A6> <79A6> -<79A7> <79A7> -<79AA> <79AA> -<79AE> <79AE> -<79B0> <79B0> -<79B1> <79B1> -<79B3> <79B3> -<79B9> <79B9> -<79BA> <79BA> -<79BB> <79BB> -<79BD> <79BD> -<79BE> <79BE> -<79C0> <79C0> -<79C1> <79C1> -<79C3> <79C3> -<79C6> <79C6> -<79C9> <79C9> -<79CB> <79CB> -<79CD> <79CD> -<79D1> <79D1> -<79D2> <79D2> -<79D5> <79D5> -<79D8> <79D8> -<79DF> <79DF> -<79E3> <79E3> -<79E4> <79E4> -<79E6> <79E6> -<79E7> <79E7> -<79E9> <79E9> -<79EB> <79EB> -<79ED> <79ED> -<79EF> <79EF> -<79F0> <79F0> -<79F8> <79F8> -<79FB> <79FB> -<79FD> <79FD> -<7A00> <7A00> -<7A02> <7A02> -<7A03> <7A03> -<7A06> <7A06> -<7A0B> <7A0B> -<7A0D> <7A0D> -<7A0E> <7A0E> -<7A14> <7A14> -<7A17> <7A17> -<7A1A> <7A1A> -<7A1E> <7A1E> -<7A20> <7A20> -endbfrange - -100 beginbfrange -<7A23> <7A23> -<7A2E> <7A2E> -<7A31> <7A31> -<7A33> <7A33> -<7A37> <7A37> -<7A39> <7A39> -<7A3B> <7A3B> -<7A3C> <7A3C> -<7A3D> <7A3D> -<7A3F> <7A3F> -<7A40> <7A40> -<7A46> <7A46> -<7A4C> <7A4C> -<7A4D> <7A4D> -<7A4E> <7A4E> -<7A51> <7A51> -<7A57> <7A57> -<7A61> <7A61> -<7A62> <7A62> -<7A69> <7A69> -<7A6B> <7A6B> -<7A70> <7A70> -<7A74> <7A74> -<7A76> <7A76> -<7A77> <7A77> -<7A78> <7A79> -<7A7A> <7A7A> -<7A7F> <7A7F> -<7A80> <7A80> -<7A81> <7A81> -<7A83> <7A83> -<7A84> <7A84> -<7A86> <7A86> -<7A88> <7A88> -<7A8D> <7A8D> -<7A91> <7A91> -<7A92> <7A92> -<7A95> <7A95> -<7A96> <7A96> -<7A97> <7A97> -<7A98> <7A98> -<7A9C> <7A9C> -<7A9D> <7A9D> -<7A9F> <7A9F> -<7AA0> <7AA0> -<7AA5> <7AA5> -<7AA6> <7AA6> -<7AA8> <7AA8> -<7AA9> <7AA9> -<7AAA> <7AAA> -<7AAC> <7AAC> -<7AAD> <7AAD> -<7AAE> <7AAE> -<7AB3> <7AB3> -<7AB6> <7AB6> -<7ABA> <7ABA> -<7ABF> <7ABF> -<7AC4> <7AC4> -<7AC5> <7AC5> -<7AC7> <7AC7> -<7AC8> <7AC8> -<7ACA> <7ACA> -<7ACB> <7ACB> -<7AD6> <7AD6> -<7AD9> <7AD9> -<7ADE> <7ADE> -<7ADF> <7ADF> -<7AE0> <7AE0> -<7AE3> <7AE3> -<7AE5> <7AE5> -<7AE6> <7AE6> -<7AEA> <7AEA> -<7AED> <7AED> -<7AEF> <7AEF> -<7AF6> <7AF6> -<7AF9> <7AF9> -<7AFA> <7AFA> -<7AFD> <7AFD> -<7AFF> <7AFF> -<7B03> <7B04> -<7B06> <7B06> -<7B08> <7B08> -<7B0A> <7B0A> -<7B0B> <7B0B> -<7B0F> <7B0F> -<7B11> <7B11> -<7B14> <7B14> -<7B15> <7B15> -<7B19> <7B19> -<7B1B> <7B1B> -<7B1E> <7B1E> -<7B20> <7B20> -<7B24> <7B24> -<7B25> <7B25> -<7B26> <7B26> -<7B28> <7B28> -<7B2A> <7B2A> -<7B2B> <7B2B> -<7B2C> <7B2C> -<7B2E> <7B2E> -endbfrange - -100 beginbfrange -<7B31> <7B31> -<7B33> <7B33> -<7B38> <7B38> -<7B3A> <7B3A> -<7B3C> <7B3C> -<7B3E> <7B3E> -<7B45> <7B45> -<7B46> <7B46> -<7B47> <7B47> -<7B49> <7B49> -<7B4B> <7B4B> -<7B4C> <7B4C> -<7B4F> <7B4F> -<7B50> <7B50> -<7B51> <7B51> -<7B52> <7B52> -<7B54> <7B54> -<7B56> <7B56> -<7B58> <7B58> -<7B5A> <7B5A> -<7B5B> <7B5B> -<7B5D> <7B5D> -<7B60> <7B60> -<7B62> <7B62> -<7B67> <7B67> -<7B6E> <7B6E> -<7B71> <7B71> -<7B72> <7B72> -<7B75> <7B75> -<7B77> <7B77> -<7B79> <7B79> -<7B7B> <7B7B> -<7B7E> <7B7E> -<7B80> <7B80> -<7B85> <7B85> -<7B8B> <7B8B> -<7B8D> <7B8D> -<7B90> <7B90> -<7B94> <7B94> -<7B95> <7B95> -<7B97> <7B97> -<7B9C> <7B9C> -<7B9D> <7B9D> -<7BA1> <7BA1> -<7BA2> <7BA2> -<7BA6> <7BA7> -<7BA8> <7BA8> -<7BA9> <7BA9> -<7BAA> <7BAA> -<7BAB> <7BAB> -<7BAC> <7BAC> -<7BAD> <7BAD> -<7BB1> <7BB1> -<7BB4> <7BB4> -<7BB8> <7BB8> -<7BC0> <7BC0> -<7BC1> <7BC1> -<7BC4> <7BC4> -<7BC6> <7BC6> -<7BC7> <7BC7> -<7BC9> <7BC9> -<7BCB> <7BCB> -<7BCC> <7BCC> -<7BD1> <7BD1> -<7BD3> <7BD3> -<7BD9> <7BD9> -<7BDA> <7BDA> -<7BDD> <7BDD> -<7BE1> <7BE1> -<7BE4> <7BE4> -<7BE5> <7BE6> -<7BE9> <7BE9> -<7BEA> <7BEA> -<7BEE> <7BEE> -<7BF1> <7BF1> -<7BF3> <7BF3> -<7BF7> <7BF7> -<7BFC> <7BFC> -<7BFE> <7BFE> -<7C00> <7C00> -<7C07> <7C07> -<7C0B> <7C0B> -<7C0C> <7C0C> -<7C0D> <7C0D> -<7C0F> <7C0F> -<7C16> <7C16> -<7C1E> <7C1E> -<7C1F> <7C1F> -<7C21> <7C21> -<7C23> <7C23> -<7C26> <7C26> -<7C27> <7C27> -<7C2A> <7C2A> -<7C2B> <7C2B> -<7C38> <7C38> -<7C3D> <7C3D> -<7C3E> <7C3E> -<7C3F> <7C3F> -<7C40> <7C40> -<7C41> <7C41> -endbfrange - -100 beginbfrange -<7C43> <7C43> -<7C4C> <7C4C> -<7C4D> <7C4D> -<7C5C> <7C5C> -<7C5F> <7C5F> -<7C60> <7C60> -<7C64> <7C64> -<7C69> <7C69> -<7C6A> <7C6A> -<7C6C> <7C6C> -<7C6E> <7C6E> -<7C72> <7C72> -<7C73> <7C73> -<7C74> <7C74> -<7C7B> <7C7B> -<7C7C> <7C7C> -<7C7D> <7C7D> -<7C89> <7C89> -<7C91> <7C91> -<7C92> <7C92> -<7C95> <7C95> -<7C97> <7C97> -<7C98> <7C98> -<7C9C> <7C9C> -<7C9D> <7C9D> -<7C9E> <7C9E> -<7C9F> <7C9F> -<7CA2> <7CA2> -<7CA4> <7CA4> -<7CA5> <7CA5> -<7CAA> <7CAA> -<7CAE> <7CAE> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB9> <7CB9> -<7CBC> <7CBD> -<7CBE> <7CBE> -<7CC1> <7CC1> -<7CC5> <7CC5> -<7CC7> <7CC7> -<7CC8> <7CC8> -<7CCA> <7CCA> -<7CCC> <7CCD> -<7CD5> <7CD5> -<7CD6> <7CD6> -<7CD7> <7CD7> -<7CD9> <7CD9> -<7CDC> <7CDC> -<7CDD> <7CDD> -<7CDE> <7CDE> -<7CDF> <7CDF> -<7CE0> <7CE0> -<7CE7> <7CE7> -<7CE8> <7CE8> -<7CEF> <7CEF> -<7CF0> <7CF0> -<7CF2> <7CF2> -<7CF4> <7CF4> -<7CF6> <7CF6> -<7CF8> <7CF8> -<7CF9> <7CF9> -<7CFB> <7CFB> -<7CFE> <7CFE> -<7D00> <7D00> -<7D02> <7D02> -<7D04> <7D04> -<7D05> <7D05> -<7D06> <7D06> -<7D07> <7D07> -<7D08> <7D08> -<7D09> <7D09> -<7D0A> <7D0A> -<7D0B> <7D0B> -<7D0D> <7D0D> -<7D10> <7D10> -<7D13> <7D13> -<7D14> <7D14> -<7D15> <7D15> -<7D17> <7D17> -<7D19> <7D19> -<7D1A> <7D1A> -<7D1B> <7D1B> -<7D1C> <7D1C> -<7D20> <7D20> -<7D21> <7D21> -<7D22> <7D22> -<7D27> <7D27> -<7D2B> <7D2B> -<7D2F> <7D2F> -<7D30> <7D30> -<7D31> <7D31> -<7D32> <7D32> -<7D33> <7D33> -<7D39> <7D39> -<7D3A> <7D3A> -<7D3C> <7D3C> -<7D3F> <7D3F> -<7D40> <7D40> -<7D42> <7D42> -endbfrange - -100 beginbfrange -<7D44> <7D44> -<7D46> <7D46> -<7D4E> <7D4E> -<7D50> <7D50> -<7D5D> <7D5D> -<7D5E> <7D5E> -<7D61> <7D61> -<7D62> <7D62> -<7D66> <7D66> -<7D68> <7D68> -<7D6E> <7D6E> -<7D71> <7D71> -<7D72> <7D72> -<7D73> <7D73> -<7D76> <7D76> -<7D77> <7D77> -<7D79> <7D79> -<7D81> <7D81> -<7D83> <7D83> -<7D86> <7D86> -<7D88> <7D88> -<7D89> <7D89> -<7D8F> <7D8F> -<7D93> <7D93> -<7D9C> <7D9C> -<7D9E> <7D9E> -<7DA2> <7DA2> -<7DA3> <7DA3> -<7DA6> <7DA6> -<7DAB> <7DAB> -<7DAC> <7DAC> -<7DAD> <7DAD> -<7DAE> <7DAE> -<7DB0> <7DB0> -<7DB1> <7DB1> -<7DB2> <7DB2> -<7DB3> <7DB3> -<7DB4> <7DB4> -<7DB8> <7DB8> -<7DB9> <7DB9> -<7DBA> <7DBA> -<7DBB> <7DBB> -<7DBD> <7DBD> -<7DBE> <7DBE> -<7DBF> <7DBF> -<7DC4> <7DC4> -<7DC7> <7DC7> -<7DCA> <7DCA> -<7DCB> <7DCB> -<7DD1> <7DD1> -<7DD2> <7DD2> -<7DD4> <7DD4> -<7DD7> <7DD7> -<7DD8> <7DD8> -<7DD9> <7DD9> -<7DDD> <7DDD> -<7DDE> <7DDE> -<7DE0> <7DE0> -<7DE1> <7DE1> -<7DE3> <7DE3> -<7DE6> <7DE6> -<7DE8> <7DE8> -<7DE9> <7DE9> -<7DEC> <7DEC> -<7DEF> <7DEF> -<7DF1> <7DF1> -<7DF2> <7DF2> -<7DF4> <7DF4> -<7DF6> <7DF6> -<7DF9> <7DF9> -<7DFB> <7DFB> -<7E08> <7E08> -<7E09> <7E09> -<7E0A> <7E0A> -<7E0B> <7E0B> -<7E10> <7E10> -<7E11> <7E11> -<7E1B> <7E1B> -<7E1D> <7E1D> -<7E1E> <7E1E> -<7E1F> <7E1F> -<7E23> <7E23> -<7E27> <7E27> -<7E2B> <7E2B> -<7E2D> <7E2D> -<7E2E> <7E2E> -<7E31> <7E31> -<7E32> <7E32> -<7E34> <7E34> -<7E35> <7E35> -<7E36> <7E36> -<7E37> <7E37> -<7E39> <7E39> -<7E3B> <7E3B> -<7E3D> <7E3D> -<7E3E> <7E3E> -<7E41> <7E41> -<7E45> <7E45> -<7E46> <7E46> -<7E47> <7E47> -endbfrange - -100 beginbfrange -<7E52> <7E52> -<7E54> <7E54> -<7E55> <7E55> -<7E5A> <7E5A> -<7E5E> <7E5E> -<7E62> <7E62> -<7E69> <7E69> -<7E6A> <7E6A> -<7E6B> <7E6B> -<7E6D> <7E6D> -<7E6E> <7E6E> -<7E6F> <7E6F> -<7E70> <7E70> -<7E73> <7E73> -<7E79> <7E79> -<7E7C> <7E7C> -<7E7D> <7E7D> -<7E7E> <7E7E> -<7E82> <7E82> -<7E88> <7E88> -<7E8A> <7E8A> -<7E8C> <7E8C> -<7E8D> <7E8D> -<7E8F> <7E8F> -<7E93> <7E93> -<7E94> <7E94> -<7E96> <7E96> -<7E98> <7E98> -<7E9B> <7E9B> -<7E9C> <7E9C> -<7E9F> <7E9F> -<7EA0> <7EA0> -<7EA1> <7EA1> -<7EA2> <7EA2> -<7EA3> <7EA3> -<7EA4> <7EA4> -<7EA5> <7EA5> -<7EA6> <7EA6> -<7EA7> <7EA7> -<7EA8> <7EA9> -<7EAA> <7EAA> -<7EAB> <7EAB> -<7EAC> <7EAC> -<7EAD> <7EAD> -<7EAF> <7EAF> -<7EB0> <7EB0> -<7EB1> <7EB1> -<7EB2> <7EB2> -<7EB3> <7EB3> -<7EB5> <7EB5> -<7EB6> <7EB6> -<7EB7> <7EB7> -<7EB8> <7EB8> -<7EB9> <7EB9> -<7EBA> <7EBA> -<7EBD> <7EBD> -<7EBE> <7EBE> -<7EBF> <7EBF> -<7EC0> <7EC2> -<7EC3> <7EC3> -<7EC4> <7EC4> -<7EC5> <7EC5> -<7EC6> <7EC6> -<7EC7> <7EC7> -<7EC8> <7EC8> -<7EC9> <7EC9> -<7ECA> <7ECA> -<7ECB> <7ECC> -<7ECD> <7ECD> -<7ECE> <7ECE> -<7ECF> <7ECF> -<7ED0> <7ED0> -<7ED1> <7ED1> -<7ED2> <7ED2> -<7ED3> <7ED3> -<7ED4> <7ED4> -<7ED5> <7ED5> -<7ED7> <7ED7> -<7ED8> <7ED8> -<7ED9> <7ED9> -<7EDA> <7EDA> -<7EDB> <7EDB> -<7EDC> <7EDC> -<7EDD> <7EDD> -<7EDE> <7EDE> -<7EDF> <7EDF> -<7EE0> <7EE1> -<7EE2> <7EE2> -<7EE3> <7EE3> -<7EE5> <7EE5> -<7EE6> <7EE6> -<7EE7> <7EE7> -<7EE8> <7EE8> -<7EE9> <7EE9> -<7EEA> <7EEA> -<7EEB> <7EEB> -<7EED> <7EED> -<7EEE> <7EEF> -<7EF0> <7EF0> -<7EF1> <7EF2> -endbfrange - -100 beginbfrange -<7EF3> <7EF3> -<7EF4> <7EF4> -<7EF5> <7EF5> -<7EF6> <7EF6> -<7EF7> <7EF7> -<7EF8> <7EF8> -<7EFA> <7EFB> -<7EFC> <7EFC> -<7EFD> <7EFD> -<7EFE> <7EFE> -<7EFF> <7EFF> -<7F00> <7F00> -<7F01> <7F03> -<7F04> <7F04> -<7F05> <7F05> -<7F06> <7F06> -<7F07> <7F08> -<7F09> <7F09> -<7F0B> <7F0C> -<7F0D> <7F0D> -<7F0E> <7F0E> -<7F0F> <7F0F> -<7F11> <7F12> -<7F13> <7F13> -<7F14> <7F14> -<7F15> <7F15> -<7F16> <7F16> -<7F17> <7F17> -<7F18> <7F18> -<7F19> <7F19> -<7F1A> <7F1A> -<7F1B> <7F1B> -<7F1C> <7F1C> -<7F1D> <7F1D> -<7F1F> <7F1F> -<7F20> <7F20> -<7F21> <7F27> -<7F28> <7F28> -<7F29> <7F29> -<7F2A> <7F2D> -<7F2E> <7F2E> -<7F2F> <7F33> -<7F34> <7F34> -<7F35> <7F35> -<7F36> <7F36> -<7F38> <7F38> -<7F3A> <7F3A> -<7F42> <7F42> -<7F44> <7F45> -<7F4C> <7F4C> -<7F4E> <7F4E> -<7F50> <7F50> -<7F51> <7F51> -<7F54> <7F54> -<7F55> <7F55> -<7F57> <7F57> -<7F58> <7F58> -<7F5A> <7F5A> -<7F5F> <7F5F> -<7F61> <7F61> -<7F62> <7F62> -<7F68> <7F68> -<7F69> <7F69> -<7F6A> <7F6A> -<7F6E> <7F6E> -<7F70> <7F70> -<7F71> <7F71> -<7F72> <7F72> -<7F74> <7F74> -<7F77> <7F77> -<7F79> <7F79> -<7F7E> <7F7E> -<7F81> <7F81> -<7F85> <7F85> -<7F86> <7F86> -<7F88> <7F88> -<7F8A> <7F8A> -<7F8C> <7F8C> -<7F8E> <7F8E> -<7F94> <7F94> -<7F9A> <7F9A> -<7F9D> <7F9D> -<7F9E> <7F9E> -<7F9F> <7F9F> -<7FA1> <7FA1> -<7FA4> <7FA4> -<7FA5> <7FA5> -<7FA7> <7FA7> -<7FA9> <7FA9> -<7FAF> <7FB0> -<7FB2> <7FB2> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBC> <7FBC> -<7FBD> <7FBD> -<7FBF> <7FBF> -<7FC1> <7FC1> -<7FC5> <7FC5> -<7FCA> <7FCA> -<7FCC> <7FCC> -endbfrange - -100 beginbfrange -<7FCE> <7FCE> -<7FD2> <7FD2> -<7FD4> <7FD4> -<7FD5> <7FD5> -<7FD8> <7FD8> -<7FDF> <7FDF> -<7FE0> <7FE0> -<7FE1> <7FE1> -<7FE5> <7FE5> -<7FE6> <7FE6> -<7FE9> <7FE9> -<7FEE> <7FEE> -<7FF0> <7FF0> -<7FF1> <7FF1> -<7FF3> <7FF3> -<7FF9> <7FF9> -<7FFB> <7FFB> -<7FFC> <7FFC> -<8000> <8000> -<8001> <8001> -<8003> <8003> -<8004> <8004> -<8005> <8005> -<8006> <8006> -<800B> <800B> -<800C> <800C> -<800D> <800D> -<8010> <8010> -<8012> <8012> -<8014> <8014> -<8015> <8015> -<8016> <8016> -<8017> <8017> -<8018> <8018> -<8019> <8019> -<801C> <801C> -<8020> <8020> -<8022> <8022> -<8025> <8027> -<8028> <8028> -<8029> <8029> -<802A> <802A> -<802C> <802C> -<802E> <802E> -<8031> <8031> -<8033> <8033> -<8035> <8035> -<8036> <8036> -<8037> <8037> -<8038> <8038> -<803B> <803B> -<803D> <803D> -<803F> <803F> -<8042> <8042> -<8043> <8043> -<8046> <8046> -<804A> <804A> -<804B> <804B> -<804C> <804C> -<804D> <804D> -<8052> <8052> -<8054> <8054> -<8056> <8056> -<8058> <8058> -<805A> <805A> -<805E> <805E> -<8069> <8069> -<806A> <806A> -<806F> <806F> -<8070> <8070> -<8071> <8071> -<8072> <8072> -<8073> <8073> -<8075> <8075> -<8076> <8076> -<8077> <8077> -<8079> <8079> -<807D> <807D> -<807E> <807E> -<807F> <807F> -<8080> <8080> -<8083> <8083> -<8084> <8084> -<8085> <8085> -<8086> <8086> -<8087> <8087> -<8089> <8089> -<808B> <808B> -<808C> <808C> -<8093> <8093> -<8096> <8096> -<8098> <8098> -<809A> <809A> -<809B> <809B> -<809C> <809C> -<809D> <809D> -<809F> <809F> -<80A0> <80A0> -<80A1> <80A1> -<80A2> <80A2> -endbfrange - -100 beginbfrange -<80A4> <80A4> -<80A5> <80A5> -<80A9> <80A9> -<80AA> <80AA> -<80AB> <80AB> -<80AD> <80AD> -<80AE> <80AE> -<80AF> <80AF> -<80B1> <80B1> -<80B2> <80B2> -<80B4> <80B4> -<80B7> <80B7> -<80BA> <80BA> -<80BC> <80BC> -<80BD> <80BD> -<80BE> <80BE> -<80BF> <80BF> -<80C0> <80C0> -<80C1> <80C1> -<80C2> <80C2> -<80C3> <80C3> -<80C4> <80C4> -<80C6> <80C6> -<80CC> <80CC> -<80CD> <80CD> -<80CE> <80CE> -<80D6> <80D6> -<80D7> <80D7> -<80D9> <80D9> -<80DA> <80DA> -<80DB> <80DB> -<80DC> <80DC> -<80DD> <80DD> -<80DE> <80DE> -<80E1> <80E1> -<80E4> <80E4> -<80E5> <80E5> -<80E7> <80EA> -<80EB> <80EB> -<80EC> <80EC> -<80ED> <80ED> -<80EF> <80EF> -<80F0> <80F0> -<80F1> <80F1> -<80F2> <80F2> -<80F3> <80F3> -<80F4> <80F4> -<80F6> <80F6> -<80F8> <80F8> -<80FA> <80FA> -<80FC> <80FC> -<80FD> <80FD> -<8102> <8102> -<8105> <8105> -<8106> <8106> -<8109> <8109> -<810A> <810A> -<810D> <810E> -<810F> <810F> -<8110> <8110> -<8111> <8111> -<8112> <8112> -<8113> <8113> -<8114> <8114> -<8116> <8116> -<8118> <8118> -<811A> <811A> -<811B> <811B> -<811E> <811E> -<812C> <812C> -<812F> <812F> -<8131> <8131> -<8132> <8132> -<8136> <8136> -<8138> <8138> -<8139> <8139> -<813E> <813E> -<8146> <8146> -<8148> <8148> -<814A> <814A> -<814B> <814B> -<814C> <814C> -<814E> <814E> -<8150> <8150> -<8151> <8151> -<8153> <8153> -<8154> <8154> -<8155> <8155> -<8156> <8156> -<8159> <815A> -<8160> <8160> -<8161> <8161> -<8165> <8165> -<8166> <8166> -<8167> <8167> -<8169> <8169> -<816B> <816B> -<816D> <816D> -<816E> <816E> -<8170> <8170> -endbfrange - -100 beginbfrange -<8171> <8171> -<8174> <8174> -<8178> <8178> -<8179> <8179> -<817A> <817A> -<817B> <817B> -<817C> <817D> -<817E> <817E> -<817F> <817F> -<8180> <8180> -<8182> <8182> -<8188> <8188> -<818A> <818A> -<818F> <818F> -<8191> <8191> -<8198> <8198> -<819A> <819A> -<819B> <819B> -<819C> <819C> -<819D> <819D> -<81A0> <81A0> -<81A3> <81A3> -<81A6> <81A6> -<81A8> <81A8> -<81A9> <81A9> -<81AA> <81AA> -<81B3> <81B3> -<81BA> <81BA> -<81BB> <81BB> -<81BD> <81BD> -<81BE> <81BE> -<81BF> <81BF> -<81C0> <81C0> -<81C1> <81C1> -<81C2> <81C2> -<81C3> <81C3> -<81C6> <81C6> -<81C9> <81C9> -<81CA> <81CA> -<81CC> <81CC> -<81CD> <81CD> -<81CF> <81CF> -<81D8> <81D8> -<81DA> <81DA> -<81DF> <81DF> -<81E0> <81E0> -<81E3> <81E3> -<81E7> <81E7> -<81E8> <81E8> -<81EA> <81EA> -<81EC> <81EC> -<81ED> <81ED> -<81F3> <81F4> -<81FA> <81FA> -<81FB> <81FB> -<81FC> <81FC> -<81FE> <81FE> -<8200> <8200> -<8201> <8202> -<8204> <8204> -<8205> <8205> -<8206> <8206> -<8207> <8207> -<8208> <8208> -<8209> <8209> -<820A> <820A> -<820C> <820D> -<8210> <8210> -<8212> <8212> -<8214> <8214> -<821B> <821B> -<821C> <821C> -<821E> <821E> -<821F> <821F> -<8221> <8223> -<8228> <8228> -<822A> <822A> -<822B> <822B> -<822C> <822C> -<822D> <822D> -<822F> <822F> -<8230> <8230> -<8231> <8231> -<8233> <8234> -<8235> <8235> -<8236> <8236> -<8237> <8237> -<8238> <8238> -<8239> <8239> -<823B> <823B> -<823E> <823E> -<8244> <8244> -<8247> <8247> -<8249> <8249> -<824B> <824B> -<824F> <824F> -<8258> <8258> -<8259> <8259> -<825A> <825A> -<825F> <825F> -endbfrange - -100 beginbfrange -<8264> <8264> -<8266> <8266> -<8268> <8268> -<826B> <826B> -<826E> <826E> -<826F> <826F> -<8270> <8270> -<8271> <8271> -<8272> <8272> -<8273> <8273> -<8274> <8274> -<8277> <8277> -<8279> <8279> -<827A> <827A> -<827D> <827D> -<827E> <827E> -<827F> <827F> -<8282> <8282> -<8284> <8284> -<8288> <8288> -<828A> <828A> -<828B> <828B> -<828D> <828D> -<828E> <828E> -<828F> <828F> -<8291> <8291> -<8292> <8292> -<8297> <8297> -<8298> <8298> -<8299> <8299> -<829C> <829C> -<829D> <829D> -<829F> <829F> -<82A1> <82A1> -<82A4> <82A4> -<82A5> <82A5> -<82A6> <82A6> -<82A8> <82A8> -<82A9> <82A9> -<82AA> <82AA> -<82AB> <82AB> -<82AC> <82AC> -<82AD> <82AD> -<82AE> <82AE> -<82AF> <82AF> -<82B0> <82B0> -<82B1> <82B1> -<82B3> <82B3> -<82B4> <82B4> -<82B7> <82B7> -<82B8> <82B8> -<82B9> <82B9> -<82BB> <82BB> -<82BD> <82BD> -<82BE> <82BE> -<82C1> <82C1> -<82C4> <82C4> -<82C7> <82C7> -<82C8> <82C8> -<82CA> <82CA> -<82CB> <82CC> -<82CD> <82CD> -<82CE> <82CE> -<82CF> <82CF> -<82D1> <82D1> -<82D2> <82D2> -<82D3> <82D3> -<82D4> <82D4> -<82D5> <82D5> -<82D7> <82D7> -<82D8> <82D8> -<82DB> <82DB> -<82DC> <82DC> -<82DE> <82DE> -<82DF> <82DF> -<82E0> <82E0> -<82E1> <82E1> -<82E3> <82E3> -<82E4> <82E4> -<82E5> <82E5> -<82E6> <82E6> -<82E7> <82E7> -<82EB> <82EB> -<82EF> <82EF> -<82F1> <82F1> -<82F4> <82F4> -<82F7> <82F7> -<82F9> <82F9> -<82FB> <82FB> -<8301> <8301> -<8302> <8302> -<8303> <8303> -<8304> <8304> -<8305> <8305> -<8306> <8306> -<8307> <8307> -<8308> <8308> -<8309> <8309> -<830C> <830C> -<830E> <830E> -endbfrange - -100 beginbfrange -<830F> <830F> -<8311> <8311> -<8314> <8315> -<8317> <8317> -<831A> <831A> -<831B> <831B> -<831C> <831C> -<8327> <8327> -<8328> <8328> -<832B> <832B> -<832C> <832C> -<832D> <832D> -<832F> <832F> -<8331> <8331> -<8333> <8333> -<8334> <8334> -<8335> <8335> -<8336> <8336> -<8338> <8338> -<8339> <8339> -<833A> <833A> -<833C> <833C> -<8340> <8340> -<8343> <8343> -<8346> <8346> -<8347> <8347> -<8349> <8349> -<834F> <834F> -<8350> <8350> -<8351> <8351> -<8352> <8352> -<8354> <8354> -<835A> <835A> -<835B> <835C> -<835E> <835E> -<835F> <835F> -<8360> <8360> -<8361> <8361> -<8363> <8363> -<8364> <8364> -<8365> <8365> -<8366> <8366> -<8367> <8367> -<8368> <8368> -<8369> <8369> -<836A> <836A> -<836B> <836B> -<836C> <836C> -<836D> <836E> -<836F> <836F> -<8377> <8377> -<8378> <8378> -<837B> <837B> -<837C> <837C> -<837D> <837D> -<8385> <8385> -<8386> <8386> -<8389> <8389> -<838A> <838A> -<838E> <838E> -<8392> <8392> -<8393> <8393> -<8396> <8396> -<8398> <8398> -<839B> <839B> -<839C> <839C> -<839E> <839E> -<83A0> <83A0> -<83A2> <83A2> -<83A7> <83A7> -<83A8> <83A8> -<83A9> <83A9> -<83AA> <83AA> -<83AB> <83AB> -<83B0> <83B0> -<83B1> <83B1> -<83B2> <83B2> -<83B3> <83B4> -<83B6> <83B6> -<83B7> <83B7> -<83B8> <83B8> -<83B9> <83B9> -<83BA> <83BA> -<83BC> <83BC> -<83BD> <83BD> -<83C0> <83C0> -<83C1> <83C1> -<83C5> <83C5> -<83C7> <83C7> -<83CA> <83CA> -<83CC> <83CC> -<83CF> <83CF> -<83D4> <83D4> -<83D6> <83D6> -<83D8> <83D8> -<83DC> <83DC> -<83DD> <83DD> -<83DF> <83DF> -<83E0> <83E0> -<83E1> <83E1> -endbfrange - -100 beginbfrange -<83E5> <83E5> -<83E9> <83E9> -<83EA> <83EA> -<83EF> <83EF> -<83F0> <83F0> -<83F1> <83F1> -<83F2> <83F2> -<83F8> <83F9> -<83FD> <83FD> -<8401> <8401> -<8403> <8403> -<8404> <8404> -<8406> <8406> -<8407> <8407> -<840A> <840A> -<840B> <840B> -<840C> <840C> -<840D> <840D> -<840E> <840E> -<840F> <840F> -<8411> <8411> -<8418> <8418> -<841C> <841C> -<841D> <841D> -<8424> <8425> -<8426> <8426> -<8427> <8427> -<8428> <8428> -<842C> <842C> -<8431> <8431> -<8435> <8435> -<8438> <8438> -<843C> <843C> -<843D> <843D> -<8446> <8446> -<8449> <8449> -<8451> <8451> -<8452> <8452> -<8457> <8457> -<8459> <8459> -<845A> <845A> -<845B> <845B> -<845C> <845C> -<8461> <8461> -<8463> <8463> -<8464> <8464> -<8466> <8466> -<8469> <8469> -<846B> <846B> -<846C> <846C> -<846D> <846D> -<846F> <846F> -<8471> <8471> -<8473> <8473> -<8475> <8475> -<8476> <8476> -<8477> <8477> -<8478> <8478> -<847A> <847A> -<8482> <8482> -<8487> <8488> -<8489> <8489> -<848B> <848B> -<848C> <848C> -<848E> <848E> -<8493> <8493> -<8494> <8494> -<8497> <8497> -<8499> <8499> -<849C> <849C> -<84A1> <84A1> -<84AF> <84AF> -<84B2> <84B2> -<84B4> <84B4> -<84B8> <84B8> -<84B9> <84B9> -<84BA> <84BA> -<84BC> <84BC> -<84BD> <84BD> -<84BF> <84BF> -<84C0> <84C0> -<84C1> <84C1> -<84C4> <84C4> -<84C9> <84C9> -<84CA> <84CA> -<84CB> <84CB> -<84CD> <84CD> -<84D0> <84D0> -<84D1> <84D1> -<84D3> <84D3> -<84D6> <84D6> -<84DD> <84DD> -<84DF> <84DF> -<84E0> <84E0> -<84E3> <84E3> -<84E5> <84E5> -<84E6> <84E6> -<84EC> <84EC> -<84EE> <84EE> -<84EF> <84EF> -endbfrange - -100 beginbfrange -<84F0> <84F0> -<84FC> <84FC> -<84FD> <84FD> -<84FF> <84FF> -<850C> <850C> -<8511> <8511> -<8513> <8513> -<8514> <8514> -<8517> <8517> -<851A> <851A> -<851E> <851E> -<851F> <851F> -<8521> <8521> -<8523> <8523> -<8526> <8526> -<852B> <852B> -<852C> <852C> -<852D> <852D> -<8537> <8537> -<8538> <8538> -<8539> <8539> -<853A> <853A> -<853B> <853B> -<853C> <853C> -<853D> <853D> -<8541> <8541> -<8543> <8543> -<8546> <8546> -<8548> <8548> -<8549> <8549> -<854A> <854A> -<854E> <854E> -<8552> <8552> -<8553> <8553> -<8555> <8555> -<8556> <8556> -<8558> <8558> -<8559> <8559> -<855E> <855E> -<8562> <8562> -<8564> <8564> -<8568> <8568> -<8569> <8569> -<856A> <856A> -<856D> <856D> -<8572> <8572> -<8574> <8574> -<8577> <8577> -<8579> <8579> -<857A> <857A> -<857B> <857B> -<857E> <857E> -<8584> <8584> -<8585> <8585> -<8587> <8587> -<8588> <8588> -<858A> <858A> -<858C> <858C> -<858F> <858F> -<8591> <8591> -<8594> <8594> -<859B> <859B> -<859C> <859C> -<859F> <859F> -<85A4> <85A4> -<85A6> <85A6> -<85A8> <85A8> -<85A9> <85A9> -<85AA> <85AA> -<85AE> <85AE> -<85AF> <85AF> -<85B0> <85B0> -<85B7> <85B7> -<85B9> <85B9> -<85BA> <85BA> -<85C1> <85C1> -<85C9> <85C9> -<85CD> <85CD> -<85CE> <85CE> -<85CF> <85CF> -<85D0> <85D0> -<85D3> <85D3> -<85D5> <85D5> -<85DC> <85DC> -<85DD> <85DD> -<85E4> <85E4> -<85E5> <85E5> -<85E9> <85E9> -<85EA> <85EA> -<85F4> <85F4> -<85F6> <85F6> -<85F9> <85F9> -<85FA> <85FA> -<85FB> <85FB> -<85FF> <85FF> -<8604> <8604> -<8605> <8605> -<8606> <8606> -<8607> <8607> -<860B> <860B> -endbfrange - -100 beginbfrange -<8611> <8611> -<8616> <8616> -<861A> <861A> -<861E> <861E> -<8622> <8622> -<8627> <8627> -<8629> <8629> -<862D> <862D> -<8638> <8638> -<863A> <863A> -<863C> <863C> -<863F> <863F> -<864D> <864D> -<864E> <864E> -<864F> <864F> -<8650> <8650> -<8651> <8651> -<8654> <8654> -<8655> <8655> -<865A> <865A> -<865C> <865C> -<865E> <865E> -<865F> <865F> -<8662> <8662> -<8667> <8667> -<866B> <866B> -<866C> <866C> -<866E> <866E> -<8671> <8671> -<8679> <8679> -<867A> <867A> -<867B> <867B> -<867C> <867C> -<867D> <867D> -<867E> <867E> -<867F> <867F> -<8680> <8680> -<8681> <8681> -<8682> <8682> -<868A> <868A> -<868B> <868B> -<868C> <868C> -<868D> <868D> -<8693> <8693> -<8695> <8695> -<869C> <869C> -<869D> <869D> -<86A3> <86A3> -<86A4> <86A4> -<86A7> <86A7> -<86A8> <86A8> -<86A9> <86A9> -<86AA> <86AA> -<86AC> <86AC> -<86AF> <86AF> -<86B0> <86B0> -<86B1> <86B1> -<86B4> <86B4> -<86B5> <86B5> -<86B6> <86B6> -<86BA> <86BA> -<86C0> <86C0> -<86C4> <86C4> -<86C6> <86C6> -<86C7> <86C7> -<86C9> <86C9> -<86CA> <86CA> -<86CB> <86CB> -<86CE> <86CE> -<86CF> <86CF> -<86D0> <86D0> -<86D1> <86D1> -<86D4> <86D4> -<86D8> <86D8> -<86D9> <86D9> -<86DB> <86DB> -<86DE> <86DE> -<86DF> <86DF> -<86E4> <86E4> -<86E9> <86E9> -<86ED> <86ED> -<86EE> <86EE> -<86F0> <86F0> -<86F1> <86F2> -<86F3> <86F3> -<86F4> <86F4> -<86F8> <86F8> -<86F9> <86F9> -<86FA> <86FA> -<86FE> <86FE> -<8700> <8700> -<8702> <8702> -<8703> <8703> -<8706> <8706> -<8707> <8707> -<8708> <8708> -<8709> <8709> -<870A> <870A> -<870D> <870D> -<8712> <8712> -endbfrange - -100 beginbfrange -<8713> <8713> -<8715> <8715> -<8717> <8717> -<8718> <8718> -<871A> <871A> -<871C> <871C> -<871E> <871E> -<8721> <8721> -<8722> <8722> -<8723> <8723> -<8725> <8725> -<8729> <8729> -<872E> <872E> -<8731> <8731> -<8734> <8734> -<8737> <8737> -<873B> <873B> -<873E> <873E> -<873F> <873F> -<8747> <8747> -<8748> <8748> -<8749> <8749> -<874C> <874C> -<874E> <874E> -<8753> <8753> -<8755> <8755> -<8757> <8757> -<8759> <8759> -<8760> <8760> -<8763> <8763> -<8764> <8764> -<8765> <8765> -<8766> <8766> -<876E> <876E> -<8770> <8770> -<8774> <8774> -<8776> <8776> -<8778> <8778> -<877B> <877B> -<877C> <877C> -<877D> <877E> -<8782> <8782> -<8783> <8783> -<8784> <8784> -<8785> <8785> -<8788> <8788> -<878B> <878B> -<878D> <878D> -<8793> <8793> -<8797> <8797> -<879E> <879E> -<879F> <879F> -<87A2> <87A2> -<87A8> <87A8> -<87AB> <87AB> -<87AC> <87AC> -<87AD> <87AD> -<87AF> <87AF> -<87B3> <87B3> -<87B5> <87B5> -<87BA> <87BA> -<87BB> <87BB> -<87BD> <87BD> -<87C0> <87C0> -<87C4> <87C4> -<87C6> <87C6> -<87C8> <87C8> -<87CA> <87CA> -<87CB> <87CB> -<87CE> <87CE> -<87D1> <87D1> -<87D2> <87D2> -<87D3> <87D3> -<87DB> <87DB> -<87E0> <87E0> -<87E3> <87E3> -<87E5> <87E5> -<87EA> <87EA> -<87EC> <87EC> -<87EE> <87EE> -<87EF> <87EF> -<87F2> <87F2> -<87F6> <87F6> -<87F9> <87F9> -<87FB> <87FB> -<87FE> <87FE> -<8803> <8803> -<8805> <8805> -<8806> <8806> -<880A> <880A> -<8810> <8810> -<8811> <8811> -<8813> <8813> -<8815> <8815> -<8816> <8816> -<881B> <881B> -<881F> <881F> -<8821> <8821> -<8822> <8822> -<8823> <8823> -endbfrange - -100 beginbfrange -<8831> <8831> -<8832> <8832> -<8836> <8836> -<8839> <8839> -<883B> <883B> -<883C> <883C> -<8840> <8840> -<8844> <8844> -<8845> <8845> -<8846> <8846> -<884A> <884A> -<884C> <884C> -<884D> <884D> -<8853> <8853> -<8854> <8854> -<8857> <8857> -<8859> <8859> -<885B> <885B> -<885D> <885D> -<8861> <8861> -<8862> <8862> -<8863> <8863> -<8864> <8864> -<8865> <8865> -<8868> <8868> -<8869> <8869> -<886B> <886B> -<886C> <886C> -<886E> <886E> -<8870> <8870> -<8872> <8872> -<8877> <8877> -<8879> <8879> -<887D> <887D> -<887E> <887E> -<887F> <887F> -<8881> <8881> -<8882> <8882> -<8884> <8884> -<8885> <8885> -<8888> <8888> -<888B> <888B> -<888D> <888D> -<8892> <8892> -<8896> <8896> -<889C> <889C> -<88A2> <88A2> -<88A4> <88A4> -<88AB> <88AB> -<88AD> <88AD> -<88B1> <88B1> -<88B7> <88B7> -<88BC> <88BC> -<88C1> <88C1> -<88C2> <88C2> -<88C5> <88C5> -<88C6> <88C6> -<88C9> <88C9> -<88CA> <88CA> -<88CE> <88CE> -<88CF> <88CF> -<88D2> <88D2> -<88D4> <88D4> -<88D5> <88D5> -<88D8> <88D8> -<88D9> <88D9> -<88DC> <88DC> -<88DD> <88DD> -<88DF> <88DF> -<88E2> <88E2> -<88E3> <88E3> -<88E4> <88E4> -<88E5> <88E5> -<88E8> <88E8> -<88F0> <88F0> -<88F1> <88F1> -<88F3> <88F3> -<88F4> <88F4> -<88F8> <88F8> -<88F9> <88F9> -<88FC> <88FC> -<88FD> <88FD> -<88FE> <88FE> -<8902> <8902> -<8907> <8907> -<890A> <890A> -<8910> <8910> -<8912> <8912> -<8913> <8913> -<8919> <8919> -<891A> <891A> -<891B> <891B> -<8921> <8921> -<8925> <8925> -<892A> <892A> -<892B> <892B> -<8930> <8930> -<8932> <8932> -<8933> <8933> -<8934> <8934> -endbfrange - -100 beginbfrange -<8936> <8936> -<8938> <8938> -<893B> <893B> -<8941> <8941> -<8944> <8944> -<8947> <8947> -<8956> <8956> -<895D> <895D> -<895E> <895E> -<895F> <895F> -<8960> <8960> -<8964> <8964> -<8966> <8966> -<896A> <896A> -<896C> <896C> -<896F> <896F> -<8972> <8972> -<897B> <897B> -<897F> <897F> -<8981> <8981> -<8983> <8983> -<8986> <8986> -<898B> <898B> -<898F> <898F> -<8993> <8993> -<8996> <8996> -<8998> <8998> -<89A1> <89A1> -<89A6> <89A6> -<89AA> <89AA> -<89AC> <89AC> -<89AF> <89AF> -<89B2> <89B2> -<89B7> <89B7> -<89BA> <89BA> -<89BD> <89BD> -<89BF> <89BF> -<89C0> <89C0> -<89C1> <89C1> -<89C2> <89C2> -<89C4> <89C4> -<89C5> <89C5> -<89C6> <89C6> -<89C7> <89C7> -<89C8> <89C8> -<89C9> <89C9> -<89CA> <89CC> -<89CE> <89D1> -<89D2> <89D2> -<89D6> <89D6> -<89DA> <89DA> -<89DC> <89DC> -<89DE> <89DE> -<89E3> <89E3> -<89E5> <89E5> -<89E6> <89E6> -<89EB> <89EB> -<89EF> <89EF> -<89F3> <89F3> -<89F4> <89F4> -<89F6> <89F6> -<89F8> <89F8> -<8A00> <8A00> -<8A01> <8A01> -<8A02> <8A02> -<8A03> <8A03> -<8A07> <8A07> -<8A08> <8A08> -<8A0A> <8A0A> -<8A0C> <8A0C> -<8A0E> <8A0E> -<8A10> <8A10> -<8A13> <8A13> -<8A15> <8A15> -<8A16> <8A16> -<8A18> <8A18> -<8A1B> <8A1B> -<8A1D> <8A1D> -<8A1F> <8A1F> -<8A23> <8A23> -<8A25> <8A25> -<8A2A> <8A2A> -<8A2D> <8A2D> -<8A31> <8A31> -<8A34> <8A34> -<8A36> <8A36> -<8A3A> <8A3A> -<8A3E> <8A3E> -<8A41> <8A41> -<8A46> <8A46> -<8A48> <8A48> -<8A4E> <8A4E> -<8A50> <8A50> -<8A52> <8A52> -<8A54> <8A54> -<8A55> <8A55> -<8A58> <8A58> -<8A5B> <8A5B> -<8A5E> <8A5E> -<8A61> <8A61> -endbfrange - -100 beginbfrange -<8A62> <8A62> -<8A63> <8A63> -<8A66> <8A66> -<8A69> <8A69> -<8A6B> <8A6B> -<8A6C> <8A6C> -<8A6D> <8A6D> -<8A6E> <8A6E> -<8A70> <8A70> -<8A71> <8A71> -<8A72> <8A72> -<8A73> <8A73> -<8A75> <8A75> -<8A79> <8A79> -<8A7C> <8A7C> -<8A7F> <8A7F> -<8A84> <8A84> -<8A85> <8A85> -<8A86> <8A86> -<8A87> <8A87> -<8A89> <8A89> -<8A8A> <8A8A> -<8A8D> <8A8D> -<8A91> <8A91> -<8A92> <8A92> -<8A93> <8A93> -<8A95> <8A95> -<8A98> <8A98> -<8A9A> <8A9A> -<8A9E> <8A9E> -<8AA0> <8AA0> -<8AA1> <8AA1> -<8AA3> <8AA3> -<8AA4> <8AA4> -<8AA5> <8AA5> -<8AA6> <8AA6> -<8AA8> <8AA8> -<8AAC> <8AAC> -<8AB0> <8AB0> -<8AB2> <8AB2> -<8AB6> <8AB6> -<8AB9> <8AB9> -<8ABC> <8ABC> -<8ABF> <8ABF> -<8AC2> <8AC2> -<8AC4> <8AC4> -<8AC7> <8AC7> -<8AC9> <8AC9> -<8ACB> <8ACB> -<8ACD> <8ACD> -<8ACF> <8ACF> -<8AD1> <8AD1> -<8AD2> <8AD2> -<8AD6> <8AD6> -<8AD7> <8AD7> -<8ADB> <8ADB> -<8ADC> <8ADC> -<8ADE> <8ADE> -<8AE2> <8AE2> -<8AE4> <8AE4> -<8AE6> <8AE6> -<8AE7> <8AE7> -<8AEB> <8AEB> -<8AED> <8AED> -<8AEE> <8AEE> -<8AF1> <8AF1> -<8AF3> <8AF3> -<8AF6> <8AF6> -<8AF7> <8AF7> -<8AF8> <8AF8> -<8AFA> <8AFA> -<8AFC> <8AFC> -<8AFE> <8AFE> -<8B00> <8B00> -<8B01> <8B01> -<8B02> <8B02> -<8B04> <8B04> -<8B05> <8B05> -<8B07> <8B07> -<8B0A> <8B0A> -<8B0E> <8B0E> -<8B10> <8B10> -<8B14> <8B14> -<8B16> <8B16> -<8B17> <8B17> -<8B19> <8B19> -<8B1A> <8B1A> -<8B1B> <8B1B> -<8B1D> <8B1D> -<8B21> <8B21> -<8B26> <8B26> -<8B28> <8B28> -<8B2B> <8B2B> -<8B2C> <8B2C> -<8B2D> <8B2D> -<8B33> <8B33> -<8B39> <8B39> -<8B3E> <8B3E> -<8B49> <8B49> -<8B4E> <8B4E> -endbfrange - -100 beginbfrange -<8B4F> <8B4F> -<8B56> <8B56> -<8B58> <8B58> -<8B59> <8B59> -<8B5A> <8B5A> -<8B5C> <8B5C> -<8B66> <8B66> -<8B6B> <8B6B> -<8B6C> <8B6C> -<8B6F> <8B6F> -<8B70> <8B70> -<8B74> <8B74> -<8B77> <8B77> -<8B7D> <8B7D> -<8B80> <8B80> -<8B8A> <8B8A> -<8B8E> <8B8E> -<8B92> <8B92> -<8B93> <8B93> -<8B95> <8B95> -<8B96> <8B96> -<8B9C> <8B9C> -<8B9E> <8B9E> -<8BA0> <8BA0> -<8BA1> <8BA1> -<8BA2> <8BA2> -<8BA3> <8BA3> -<8BA4> <8BA4> -<8BA5> <8BA5> -<8BA6> <8BA7> -<8BA8> <8BA8> -<8BA9> <8BA9> -<8BAA> <8BAA> -<8BAB> <8BAB> -<8BAD> <8BAD> -<8BAE> <8BAE> -<8BAF> <8BAF> -<8BB0> <8BB0> -<8BB2> <8BB2> -<8BB3> <8BB3> -<8BB4> <8BB5> -<8BB6> <8BB6> -<8BB7> <8BB7> -<8BB8> <8BB8> -<8BB9> <8BB9> -<8BBA> <8BBA> -<8BBC> <8BBC> -<8BBD> <8BBD> -<8BBE> <8BBE> -<8BBF> <8BBF> -<8BC0> <8BC0> -<8BC1> <8BC1> -<8BC2> <8BC3> -<8BC4> <8BC4> -<8BC5> <8BC5> -<8BC6> <8BC6> -<8BC8> <8BC8> -<8BC9> <8BC9> -<8BCA> <8BCA> -<8BCB> <8BCB> -<8BCC> <8BCC> -<8BCD> <8BCD> -<8BCE> <8BCE> -<8BCF> <8BCF> -<8BD1> <8BD1> -<8BD2> <8BD4> -<8BD5> <8BD5> -<8BD6> <8BD6> -<8BD7> <8BD7> -<8BD8> <8BD9> -<8BDA> <8BDA> -<8BDB> <8BDB> -<8BDC> <8BDC> -<8BDD> <8BDD> -<8BDE> <8BDE> -<8BDF> <8BE0> -<8BE1> <8BE1> -<8BE2> <8BE2> -<8BE3> <8BE3> -<8BE4> <8BE4> -<8BE5> <8BE5> -<8BE6> <8BE6> -<8BE7> <8BE7> -<8BE8> <8BE9> -<8BEB> <8BEB> -<8BEC> <8BEC> -<8BED> <8BED> -<8BEE> <8BEE> -<8BEF> <8BEF> -<8BF0> <8BF0> -<8BF1> <8BF1> -<8BF2> <8BF2> -<8BF3> <8BF3> -<8BF4> <8BF4> -<8BF5> <8BF5> -<8BF6> <8BF6> -<8BF7> <8BF7> -<8BF8> <8BF8> -<8BF9> <8BF9> -<8BFA> <8BFA> -endbfrange - -100 beginbfrange -<8BFB> <8BFB> -<8BFC> <8BFC> -<8BFD> <8BFD> -<8BFE> <8BFE> -<8BFF> <8BFF> -<8C00> <8C00> -<8C01> <8C01> -<8C02> <8C02> -<8C03> <8C03> -<8C04> <8C04> -<8C05> <8C05> -<8C06> <8C06> -<8C07> <8C07> -<8C08> <8C08> -<8C0A> <8C0A> -<8C0B> <8C0B> -<8C0C> <8C0C> -<8C0D> <8C0D> -<8C0E> <8C0E> -<8C0F> <8C0F> -<8C10> <8C10> -<8C11> <8C12> -<8C13> <8C13> -<8C14> <8C16> -<8C17> <8C17> -<8C18> <8C18> -<8C19> <8C19> -<8C1A> <8C1A> -<8C1B> <8C1B> -<8C1C> <8C1C> -<8C1D> <8C1D> -<8C1F> <8C21> -<8C22> <8C22> -<8C23> <8C23> -<8C24> <8C24> -<8C25> <8C25> -<8C26> <8C26> -<8C27> <8C27> -<8C28> <8C28> -<8C29> <8C29> -<8C2A> <8C2B> -<8C2C> <8C2C> -<8C2D> <8C2D> -<8C2E> <8C2F> -<8C30> <8C30> -<8C31> <8C31> -<8C32> <8C33> -<8C34> <8C34> -<8C35> <8C36> -<8C37> <8C37> -<8C41> <8C41> -<8C46> <8C46> -<8C47> <8C47> -<8C48> <8C48> -<8C49> <8C49> -<8C4C> <8C4C> -<8C50> <8C50> -<8C55> <8C55> -<8C5A> <8C5A> -<8C61> <8C61> -<8C62> <8C62> -<8C6A> <8C6A> -<8C6B> <8C6B> -<8C73> <8C73> -<8C78> <8C78> -<8C79> <8C79> -<8C7A> <8C7A> -<8C82> <8C82> -<8C85> <8C85> -<8C89> <8C89> -<8C8A> <8C8A> -<8C8C> <8C8C> -<8C94> <8C94> -<8C98> <8C98> -<8C9D> <8C9D> -<8C9E> <8C9E> -<8CA0> <8CA0> -<8CA1> <8CA1> -<8CA2> <8CA2> -<8CA7> <8CA7> -<8CA8> <8CA8> -<8CA9> <8CA9> -<8CAA> <8CAA> -<8CAB> <8CAB> -<8CAC> <8CAC> -<8CAF> <8CAF> -<8CB0> <8CB0> -<8CB2> <8CB2> -<8CB3> <8CB3> -<8CB4> <8CB4> -<8CB6> <8CB6> -<8CB7> <8CB7> -<8CB8> <8CB8> -<8CBA> <8CBA> -<8CBB> <8CBB> -<8CBC> <8CBC> -<8CBD> <8CBD> -<8CBF> <8CBF> -<8CC0> <8CC0> -<8CC1> <8CC1> -endbfrange - -100 beginbfrange -<8CC2> <8CC2> -<8CC3> <8CC3> -<8CC4> <8CC4> -<8CC5> <8CC5> -<8CC7> <8CC7> -<8CC8> <8CC8> -<8CCA> <8CCA> -<8CD1> <8CD1> -<8CD2> <8CD2> -<8CD3> <8CD3> -<8CD5> <8CD5> -<8CDA> <8CDA> -<8CDC> <8CDC> -<8CDE> <8CDE> -<8CE0> <8CE0> -<8CE1> <8CE1> -<8CE2> <8CE2> -<8CE3> <8CE3> -<8CE4> <8CE4> -<8CE6> <8CE6> -<8CE7> <8CE7> -<8CEA> <8CEA> -<8CEB> <8CEB> -<8CEC> <8CEC> -<8CED> <8CED> -<8CF4> <8CF4> -<8CFA> <8CFA> -<8CFB> <8CFB> -<8CFC> <8CFC> -<8CFD> <8CFD> -<8CFE> <8CFE> -<8D04> <8D04> -<8D05> <8D05> -<8D08> <8D08> -<8D0A> <8D0A> -<8D0B> <8D0B> -<8D0D> <8D0D> -<8D0F> <8D0F> -<8D10> <8D10> -<8D16> <8D16> -<8D1B> <8D1B> -<8D1C> <8D1C> -<8D1D> <8D1D> -<8D1E> <8D1E> -<8D1F> <8D1F> -<8D21> <8D21> -<8D22> <8D22> -<8D23> <8D23> -<8D24> <8D24> -<8D25> <8D25> -<8D26> <8D26> -<8D27> <8D27> -<8D28> <8D28> -<8D29> <8D29> -<8D2A> <8D2A> -<8D2B> <8D2B> -<8D2C> <8D2C> -<8D2D> <8D2D> -<8D2E> <8D2E> -<8D2F> <8D2F> -<8D30> <8D30> -<8D31> <8D31> -<8D32> <8D33> -<8D34> <8D34> -<8D35> <8D35> -<8D36> <8D36> -<8D37> <8D37> -<8D38> <8D38> -<8D39> <8D39> -<8D3A> <8D3A> -<8D3B> <8D3B> -<8D3C> <8D3C> -<8D3D> <8D3D> -<8D3E> <8D3E> -<8D3F> <8D3F> -<8D40> <8D40> -<8D41> <8D41> -<8D42> <8D42> -<8D43> <8D43> -<8D44> <8D44> -<8D45> <8D46> -<8D47> <8D47> -<8D48> <8D49> -<8D4A> <8D4A> -<8D4B> <8D4B> -<8D4C> <8D4C> -<8D4D> <8D4D> -<8D4E> <8D4E> -<8D4F> <8D4F> -<8D50> <8D50> -<8D53> <8D53> -<8D54> <8D54> -<8D55> <8D55> -<8D56> <8D56> -<8D58> <8D58> -<8D59> <8D59> -<8D5A> <8D5A> -<8D5B> <8D5B> -<8D5C> <8D5C> -<8D5D> <8D5D> -endbfrange - -100 beginbfrange -<8D5E> <8D5E> -<8D60> <8D60> -<8D61> <8D61> -<8D62> <8D62> -<8D63> <8D63> -<8D64> <8D64> -<8D66> <8D66> -<8D67> <8D67> -<8D6B> <8D6B> -<8D6D> <8D6D> -<8D70> <8D70> -<8D73> <8D73> -<8D74> <8D74> -<8D75> <8D75> -<8D76> <8D76> -<8D77> <8D77> -<8D81> <8D81> -<8D84> <8D84> -<8D85> <8D85> -<8D8A> <8D8A> -<8D8B> <8D8B> -<8D91> <8D91> -<8D94> <8D94> -<8D95> <8D95> -<8D99> <8D99> -<8D9F> <8D9F> -<8DA3> <8DA3> -<8DA8> <8DA8> -<8DB1> <8DB1> -<8DB2> <8DB2> -<8DB3> <8DB3> -<8DB4> <8DB4> -<8DB5> <8DB5> -<8DB8> <8DB8> -<8DBA> <8DBA> -<8DBC> <8DBC> -<8DBE> <8DBE> -<8DBF> <8DBF> -<8DC3> <8DC3> -<8DC4> <8DC4> -<8DC6> <8DC6> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCE> <8DCF> -<8DD1> <8DD1> -<8DD6> <8DD7> -<8DDA> <8DDA> -<8DDB> <8DDB> -<8DDD> <8DDD> -<8DDE> <8DDE> -<8DDF> <8DDF> -<8DE3> <8DE3> -<8DE4> <8DE4> -<8DE8> <8DE8> -<8DEA> <8DEA> -<8DEB> <8DEB> -<8DEC> <8DEC> -<8DEF> <8DEF> -<8DF3> <8DF3> -<8DF5> <8DF5> -<8DF7> <8DF8> -<8DF9> <8DF9> -<8DFA> <8DFA> -<8DFB> <8DFB> -<8DFD> <8DFD> -<8E05> <8E05> -<8E09> <8E09> -<8E0A> <8E0A> -<8E0C> <8E0C> -<8E0F> <8E0F> -<8E10> <8E10> -<8E14> <8E14> -<8E1D> <8E1D> -<8E1E> <8E1E> -<8E1F> <8E1F> -<8E22> <8E22> -<8E23> <8E23> -<8E29> <8E29> -<8E2A> <8E2A> -<8E2C> <8E2C> -<8E2E> <8E2E> -<8E2F> <8E2F> -<8E31> <8E31> -<8E34> <8E34> -<8E35> <8E35> -<8E39> <8E39> -<8E3A> <8E3A> -<8E3D> <8E3D> -<8E40> <8E40> -<8E41> <8E42> -<8E44> <8E44> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E4B> <8E4B> -<8E4C> <8E4C> -<8E51> <8E52> -<8E55> <8E55> -<8E59> <8E59> -endbfrange - -100 beginbfrange -<8E63> <8E63> -<8E66> <8E66> -<8E69> <8E69> -<8E6C> <8E6C> -<8E6D> <8E6D> -<8E6F> <8E6F> -<8E70> <8E70> -<8E72> <8E72> -<8E74> <8E74> -<8E76> <8E76> -<8E7A> <8E7A> -<8E7C> <8E7C> -<8E7F> <8E7F> -<8E81> <8E81> -<8E85> <8E85> -<8E87> <8E87> -<8E89> <8E89> -<8E8A> <8E8A> -<8E8B> <8E8B> -<8E8D> <8E8D> -<8E8F> <8E8F> -<8E90> <8E90> -<8E91> <8E91> -<8E92> <8E92> -<8E93> <8E93> -<8E94> <8E94> -<8E9A> <8E9A> -<8E9C> <8E9C> -<8E9E> <8E9E> -<8EA1> <8EA1> -<8EA5> <8EA5> -<8EA6> <8EA6> -<8EAA> <8EAA> -<8EAB> <8EAB> -<8EAC> <8EAC> -<8EAF> <8EAF> -<8EB2> <8EB2> -<8EBA> <8EBA> -<8EC0> <8EC0> -<8ECA> <8ECA> -<8ECB> <8ECB> -<8ECC> <8ECC> -<8ECD> <8ECD> -<8ECE> <8ECE> -<8ED2> <8ED2> -<8ED4> <8ED4> -<8EDB> <8EDB> -<8EDF> <8EDF> -<8EE4> <8EE4> -<8EEB> <8EEB> -<8EF2> <8EF2> -<8EF8> <8EF8> -<8EF9> <8EF9> -<8EFA> <8EFA> -<8EFB> <8EFB> -<8EFC> <8EFC> -<8EFE> <8EFE> -<8F03> <8F03> -<8F05> <8F05> -<8F07> <8F07> -<8F09> <8F09> -<8F0A> <8F0A> -<8F12> <8F12> -<8F14> <8F14> -<8F15> <8F15> -<8F1B> <8F1B> -<8F1C> <8F1C> -<8F1D> <8F1D> -<8F1E> <8F1E> -<8F1F> <8F1F> -<8F25> <8F25> -<8F26> <8F26> -<8F29> <8F29> -<8F2A> <8F2A> -<8F2F> <8F2F> -<8F33> <8F33> -<8F38> <8F38> -<8F3B> <8F3B> -<8F3E> <8F3E> -<8F3F> <8F3F> -<8F42> <8F42> -<8F44> <8F44> -<8F45> <8F45> -<8F46> <8F46> -<8F49> <8F49> -<8F4D> <8F4D> -<8F4E> <8F4E> -<8F54> <8F54> -<8F5F> <8F5F> -<8F61> <8F61> -<8F62> <8F62> -<8F64> <8F64> -<8F66> <8F66> -<8F67> <8F67> -<8F68> <8F68> -<8F69> <8F69> -<8F6B> <8F6B> -<8F6C> <8F6C> -<8F6D> <8F6D> -<8F6E> <8F6E> -endbfrange - -100 beginbfrange -<8F6F> <8F6F> -<8F70> <8F70> -<8F71> <8F73> -<8F74> <8F74> -<8F75> <8F76> -<8F77> <8F77> -<8F78> <8F78> -<8F79> <8F7A> -<8F7B> <8F7B> -<8F7C> <8F7C> -<8F7D> <8F7D> -<8F7E> <8F7E> -<8F7F> <8F7F> -<8F81> <8F82> -<8F83> <8F83> -<8F84> <8F84> -<8F85> <8F85> -<8F86> <8F86> -<8F87> <8F87> -<8F88> <8F88> -<8F89> <8F89> -<8F8A> <8F8A> -<8F8B> <8F8B> -<8F8D> <8F8F> -<8F90> <8F90> -<8F91> <8F91> -<8F93> <8F93> -<8F94> <8F94> -<8F95> <8F95> -<8F96> <8F96> -<8F97> <8F97> -<8F98> <8F98> -<8F99> <8F99> -<8F9A> <8F9A> -<8F9B> <8F9B> -<8F9C> <8F9C> -<8F9E> <8F9E> -<8F9F> <8F9F> -<8FA3> <8FA3> -<8FA6> <8FA6> -<8FA8> <8FA9> -<8FAB> <8FAB> -<8FAD> <8FAD> -<8FAE> <8FAE> -<8FAF> <8FAF> -<8FB0> <8FB0> -<8FB1> <8FB1> -<8FB2> <8FB2> -<8FB6> <8FB6> -<8FB9> <8FB9> -<8FBD> <8FBD> -<8FBE> <8FBE> -<8FC1> <8FC1> -<8FC2> <8FC2> -<8FC4> <8FC4> -<8FC5> <8FC5> -<8FC7> <8FC7> -<8FC8> <8FC8> -<8FCE> <8FCE> -<8FD0> <8FD0> -<8FD1> <8FD1> -<8FD3> <8FD3> -<8FD4> <8FD4> -<8FD5> <8FD5> -<8FD8> <8FD8> -<8FD9> <8FD9> -<8FDB> <8FDB> -<8FDC> <8FDC> -<8FDD> <8FDD> -<8FDE> <8FDE> -<8FDF> <8FDF> -<8FE2> <8FE2> -<8FE4> <8FE4> -<8FE5> <8FE5> -<8FE6> <8FE6> -<8FE8> <8FE8> -<8FE9> <8FE9> -<8FEA> <8FEA> -<8FEB> <8FEB> -<8FED> <8FED> -<8FEE> <8FEE> -<8FF0> <8FF0> -<8FF3> <8FF3> -<8FF4> <8FF4> -<8FF7> <8FF7> -<8FF8> <8FF8> -<8FF9> <8FF9> -<8FFD> <8FFD> -<9000> <9000> -<9001> <9001> -<9002> <9002> -<9003> <9003> -<9004> <9004> -<9005> <9005> -<9006> <9006> -<9009> <9009> -<900A> <900A> -<900B> <900B> -<900D> <900D> -<900F> <900F> -endbfrange - -100 beginbfrange -<9010> <9010> -<9011> <9011> -<9012> <9012> -<9014> <9014> -<9015> <9015> -<9016> <9016> -<9017> <9017> -<9019> <9019> -<901A> <901A> -<901B> <901B> -<901D> <901D> -<901E> <901E> -<901F> <901F> -<9020> <9020> -<9021> <9021> -<9022> <9022> -<9023> <9023> -<9026> <9026> -<902D> <902D> -<902E> <902E> -<902F> <902F> -<9032> <9032> -<9035> <9036> -<9038> <9038> -<903B> <903B> -<903C> <903C> -<903E> <903E> -<9041> <9041> -<9042> <9042> -<9044> <9044> -<9047> <9047> -<904B> <904B> -<904D> <904D> -<904E> <904E> -<904F> <904F> -<9050> <9050> -<9051> <9052> -<9053> <9053> -<9054> <9054> -<9055> <9055> -<9057> <9057> -<9058> <9058> -<905B> <905B> -<905C> <905C> -<905E> <905E> -<9060> <9060> -<9062> <9062> -<9063> <9063> -<9065> <9065> -<9068> <9068> -<9069> <9069> -<906D> <906D> -<906E> <906E> -<9072> <9072> -<9074> <9074> -<9075> <9075> -<9077> <9077> -<9078> <9078> -<907A> <907A> -<907C> <907C> -<907D> <907D> -<907F> <907F> -<9080> <9080> -<9081> <9081> -<9082> <9082> -<9083> <9083> -<9084> <9084> -<9087> <9087> -<9088> <9088> -<908A> <908A> -<908B> <908B> -<908F> <908F> -<9090> <9090> -<9091> <9091> -<9093> <9093> -<9095> <9095> -<9097> <9097> -<9099> <9099> -<909B> <909B> -<909D> <909D> -<90A1> <90A1> -<90A2> <90A2> -<90A3> <90A3> -<90A6> <90A6> -<90AA> <90AA> -<90AC> <90AC> -<90AE> <90AE> -<90AF> <90AF> -<90B0> <90B0> -<90B1> <90B1> -<90B3> <90B3> -<90B4> <90B4> -<90B5> <90B5> -<90B6> <90B6> -<90B8> <90B8> -<90B9> <90B9> -<90BA> <90BA> -<90BB> <90BB> -<90BE> <90BE> -<90C1> <90C1> -endbfrange - -100 beginbfrange -<90C4> <90C4> -<90C5> <90C5> -<90C7> <90C7> -<90CA> <90CA> -<90CE> <90CE> -<90CF> <90CF> -<90D0> <90D0> -<90D1> <90D1> -<90D3> <90D3> -<90D7> <90D7> -<90DB> <90DB> -<90DC> <90DC> -<90DD> <90DD> -<90DF> <90DF> -<90E1> <90E1> -<90E2> <90E2> -<90E6> <90E6> -<90E7> <90E7> -<90E8> <90E8> -<90EB> <90EB> -<90ED> <90ED> -<90EF> <90EF> -<90F4> <90F4> -<90F5> <90F5> -<90F8> <90F8> -<90FD> <90FD> -<90FE> <90FE> -<9102> <9102> -<9104> <9104> -<9106> <9106> -<9109> <9109> -<9112> <9112> -<9114> <9114> -<9116> <9116> -<9119> <9119> -<911E> <911E> -<9122> <9122> -<9123> <9123> -<9127> <9127> -<912D> <912D> -<912F> <912F> -<9130> <9130> -<9131> <9131> -<9132> <9132> -<9134> <9134> -<9136> <9136> -<9139> <9139> -<913A> <913A> -<9143> <9143> -<9146> <9146> -<9148> <9148> -<9149> <9149> -<914A> <914A> -<914B> <914B> -<914C> <914C> -<914D> <914D> -<914E> <914F> -<9150> <9150> -<9152> <9152> -<9157> <9157> -<915A> <915A> -<915D> <915D> -<915E> <915E> -<9161> <9161> -<9162> <9162> -<9163> <9163> -<9164> <9164> -<9165> <9165> -<9169> <9169> -<916A> <916A> -<916C> <916C> -<916E> <916E> -<916F> <916F> -<9170> <9170> -<9171> <9171> -<9172> <9172> -<9174> <9174> -<9175> <9175> -<9176> <9176> -<9177> <9177> -<9178> <9178> -<9179> <9179> -<917D> <917E> -<917F> <917F> -<9185> <9185> -<9187> <9187> -<9189> <9189> -<918B> <918B> -<918C> <918C> -<918D> <918D> -<9190> <9190> -<9191> <9191> -<9192> <9192> -<9196> <9196> -<919A> <919A> -<919B> <919B> -<919C> <919C> -<91A2> <91A3> -<91AA> <91AA> -<91AB> <91AB> -endbfrange - -100 beginbfrange -<91AC> <91AC> -<91AD> <91AF> -<91B4> <91B4> -<91B5> <91B5> -<91BA> <91BA> -<91C0> <91C0> -<91C1> <91C1> -<91C3> <91C3> -<91C5> <91C5> -<91C7> <91C7> -<91C9> <91C9> -<91CA> <91CA> -<91CB> <91CB> -<91CC> <91CC> -<91CD> <91CD> -<91CE> <91CE> -<91CF> <91CF> -<91D1> <91D1> -<91D2> <91D2> -<91D3> <91D3> -<91D4> <91D4> -<91D5> <91D5> -<91D7> <91D7> -<91D8> <91D8> -<91D9> <91D9> -<91DC> <91DC> -<91DD> <91DD> -<91E3> <91E3> -<91E4> <91E4> -<91E7> <91E7> -<91E9> <91E9> -<91F5> <91F5> -<91F7> <91F7> -<91F9> <91F9> -<91FA> <91FA> -<9200> <9200> -<9201> <9201> -<9204> <9204> -<9208> <9208> -<9209> <9209> -<920D> <920D> -<920E> <920E> -<9210> <9210> -<9211> <9211> -<9214> <9214> -<9215> <9215> -<921E> <921E> -<9223> <9223> -<9225> <9225> -<9226> <9226> -<9227> <9227> -<922E> <922E> -<9230> <9230> -<9233> <9233> -<9234> <9234> -<9237> <9237> -<9238> <9238> -<9239> <9239> -<923A> <923A> -<923D> <923D> -<923E> <923E> -<923F> <923F> -<9240> <9240> -<9245> <9245> -<9248> <9248> -<9249> <9249> -<924D> <924D> -<9251> <9251> -<9255> <9255> -<9257> <9257> -<925A> <925A> -<925B> <925B> -<925E> <925E> -<9262> <9262> -<9266> <9266> -<926C> <926C> -<926D> <926D> -<9274> <9274> -<9278> <9278> -<927A> <927A> -<927B> <927B> -<927F> <927F> -<9280> <9280> -<9283> <9283> -<9285> <9285> -<928E> <928E> -<9291> <9291> -<9293> <9293> -<9296> <9296> -<9298> <9298> -<929A> <929A> -<929C> <929C> -<92A0> <92A0> -<92A3> <92A3> -<92A5> <92A5> -<92A6> <92A6> -<92A8> <92A8> -<92A9> <92A9> -<92AA> <92AA> -<92AB> <92AB> -endbfrange - -100 beginbfrange -<92AC> <92AC> -<92AE> <92AE> -<92B1> <92B1> -<92B7> <92B7> -<92B9> <92B9> -<92BB> <92BB> -<92BC> <92BC> -<92C1> <92C1> -<92C3> <92C3> -<92C5> <92C5> -<92C7> <92C7> -<92C8> <92C8> -<92CC> <92CC> -<92CF> <92CF> -<92D2> <92D2> -<92DD> <92DD> -<92DF> <92DF> -<92E3> <92E3> -<92E4> <92E4> -<92E5> <92E5> -<92E6> <92E6> -<92E8> <92E8> -<92EA> <92EA> -<92ED> <92ED> -<92EE> <92EE> -<92EF> <92EF> -<92F0> <92F0> -<92F1> <92F1> -<92F6> <92F6> -<92F8> <92F8> -<92FC> <92FC> -<9301> <9301> -<9306> <9306> -<9307> <9307> -<9308> <9308> -<9310> <9310> -<9312> <9312> -<9315> <9315> -<9318> <9318> -<9319> <9319> -<931A> <931A> -<931B> <931B> -<931F> <931F> -<9320> <9320> -<9322> <9322> -<9326> <9326> -<9328> <9328> -<932B> <932B> -<932E> <932E> -<932F> <932F> -<9332> <9332> -<9333> <9333> -<9336> <9336> -<9338> <9338> -<933E> <933E> -<9340> <9340> -<9341> <9341> -<9343> <9343> -<9346> <9346> -<9347> <9347> -<934B> <934B> -<934D> <934D> -<9354> <9354> -<9358> <9358> -<935B> <935B> -<9364> <9364> -<9365> <9365> -<9369> <9369> -<936A> <936A> -<936C> <936C> -<9370> <9370> -<9375> <9375> -<9376> <9376> -<937A> <937A> -<937E> <937E> -<9382> <9382> -<9384> <9384> -<9387> <9387> -<938A> <938A> -<938F> <938F> -<9396> <9396> -<9398> <9398> -<93A2> <93A2> -<93A3> <93A3> -<93A6> <93A6> -<93A7> <93A7> -<93A9> <93A9> -<93AA> <93AA> -<93AC> <93AC> -<93AE> <93AE> -<93B0> <93B0> -<93B3> <93B3> -<93B5> <93B5> -<93B8> <93B8> -<93BF> <93BF> -<93C3> <93C3> -<93C7> <93C7> -<93C8> <93C8> -<93CA> <93CA> -<93CC> <93CC> -endbfrange - -100 beginbfrange -<93CD> <93CD> -<93D1> <93D1> -<93D6> <93D6> -<93D7> <93D7> -<93D8> <93D8> -<93DC> <93DC> -<93DD> <93DD> -<93DE> <93DE> -<93DF> <93DF> -<93E1> <93E1> -<93E2> <93E2> -<93E4> <93E4> -<93E8> <93E8> -<93F5> <93F5> -<93F7> <93F7> -<93F9> <93F9> -<9403> <9403> -<940B> <940B> -<9410> <9410> -<9412> <9412> -<9413> <9413> -<9414> <9414> -<9418> <9418> -<9419> <9419> -<941D> <941D> -<9420> <9420> -<9426> <9426> -<9427> <9427> -<9428> <9428> -<942E> <942E> -<9432> <9432> -<9433> <9433> -<9435> <9435> -<9438> <9438> -<943A> <943A> -<943E> <943E> -<943F> <943F> -<9444> <9444> -<944A> <944A> -<944C> <944C> -<9452> <9452> -<9454> <9454> -<9460> <9460> -<9463> <9463> -<9465> <9465> -<946B> <946B> -<946D> <946D> -<9470> <9470> -<9472> <9472> -<9477> <9477> -<9479> <9479> -<947C> <947C> -<947D> <947D> -<947E> <947E> -<947F> <947F> -<9485> <9487> -<9488> <9488> -<9489> <9489> -<948A> <948A> -<948B> <948B> -<948C> <948D> -<948E> <948E> -<948F> <9490> -<9492> <9492> -<9493> <9493> -<9494> <9494> -<9495> <9495> -<9497> <9497> -<9499> <9499> -<949A> <949C> -<949D> <949D> -<949E> <949E> -<949F> <949F> -<94A0> <94A0> -<94A1> <94A1> -<94A2> <94A2> -<94A3> <94A4> -<94A5> <94A5> -<94A6> <94A6> -<94A7> <94A7> -<94A8> <94A8> -<94A9> <94A9> -<94AA> <94AA> -<94AB> <94AB> -<94AC> <94AC> -<94AD> <94AD> -<94AE> <94AE> -<94AF> <94B0> -<94B1> <94B1> -<94B2> <94B2> -<94B3> <94B3> -<94B4> <94B4> -<94B5> <94B5> -<94B6> <94BA> -<94BB> <94BB> -<94BC> <94BD> -<94BE> <94BE> -<94BF> <94BF> -<94C0> <94C0> -<94C1> <94C1> -endbfrange - -100 beginbfrange -<94C2> <94C2> -<94C3> <94C3> -<94C4> <94C4> -<94C5> <94C5> -<94C6> <94C6> -<94C8> <94CE> -<94D0> <94D2> -<94D5> <94D7> -<94D8> <94D8> -<94D9> <94D9> -<94DB> <94DB> -<94DC> <94DC> -<94DD> <94DD> -<94DE> <94E0> -<94E1> <94E1> -<94E2> <94E2> -<94E3> <94E3> -<94E4> <94E5> -<94E7> <94E8> -<94E9> <94E9> -<94EA> <94EA> -<94EB> <94EB> -<94EC> <94EC> -<94ED> <94ED> -<94EE> <94EF> -<94F0> <94F0> -<94F1> <94F1> -<94F2> <94F2> -<94F3> <94F5> -<94F6> <94F6> -<94F7> <94F7> -<94F8> <94F8> -<94F9> <94F9> -<94FA> <94FA> -<94FC> <94FD> -<94FE> <94FE> -<94FF> <94FF> -<9500> <9500> -<9501> <9501> -<9502> <9502> -<9503> <9503> -<9504> <9504> -<9505> <9505> -<9506> <9507> -<9508> <9508> -<9509> <950A> -<950B> <950B> -<950C> <950C> -<950D> <950F> -<9510> <9510> -<9511> <9511> -<9512> <9516> -<9517> <9517> -<9518> <9518> -<9519> <9519> -<951A> <951A> -<951B> <951B> -<951D> <951F> -<9521> <9521> -<9522> <9522> -<9523> <9523> -<9524> <9524> -<9525> <9525> -<9526> <9526> -<9528> <9528> -<9529> <9529> -<952A> <952B> -<952C> <952C> -<952D> <952D> -<952E> <952E> -<952F> <952F> -<9530> <9530> -<9531> <9532> -<9534> <9534> -<9535> <9535> -<9536> <9538> -<9539> <9539> -<953A> <953A> -<953B> <953B> -<953C> <953C> -<953E> <953F> -<9540> <9540> -<9541> <9541> -<9542> <9542> -<9544> <9546> -<9547> <9547> -<9549> <9549> -<954A> <954A> -<954C> <954C> -<954D> <954D> -<954E> <954F> -<9550> <9550> -<9551> <9551> -<9552> <9554> -<9556> <9559> -<955B> <955B> -<955C> <955C> -<955D> <955D> -<955E> <955F> -<9561> <9562> -endbfrange - -100 beginbfrange -<9563> <9563> -<9564> <956C> -<956D> <956D> -<956F> <956F> -<9570> <9570> -<9571> <9573> -<9576> <9576> -<9577> <9577> -<957F> <957F> -<9580> <9580> -<9582> <9582> -<9583> <9583> -<9586> <9586> -<9589> <9589> -<958B> <958B> -<958C> <958C> -<958E> <958E> -<958F> <958F> -<9591> <9591> -<9593> <9593> -<9594> <9594> -<9598> <9598> -<95A1> <95A1> -<95A3> <95A3> -<95A4> <95A4> -<95A5> <95A5> -<95A8> <95A8> -<95A9> <95A9> -<95AB> <95AB> -<95AC> <95AC> -<95AD> <95AD> -<95B2> <95B2> -<95B6> <95B6> -<95B9> <95B9> -<95BB> <95BB> -<95BC> <95BC> -<95BD> <95BD> -<95BE> <95BE> -<95BF> <95BF> -<95C3> <95C3> -<95C6> <95C6> -<95C8> <95C8> -<95CA> <95CA> -<95CB> <95CB> -<95CC> <95CC> -<95D0> <95D0> -<95D4> <95D4> -<95D5> <95D5> -<95D6> <95D6> -<95DC> <95DC> -<95DE> <95DE> -<95E1> <95E1> -<95E2> <95E2> -<95E5> <95E5> -<95E8> <95E8> -<95E9> <95E9> -<95EA> <95EA> -<95EB> <95EB> -<95ED> <95ED> -<95EE> <95EE> -<95EF> <95EF> -<95F0> <95F0> -<95F1> <95F1> -<95F2> <95F2> -<95F3> <95F3> -<95F4> <95F4> -<95F5> <95F6> -<95F7> <95F7> -<95F8> <95F8> -<95F9> <95F9> -<95FA> <95FA> -<95FB> <95FB> -<95FC> <95FC> -<95FD> <95FD> -<95FE> <95FE> -<9600> <9600> -<9601> <9601> -<9602> <9602> -<9603> <9604> -<9605> <9605> -<9606> <9606> -<9608> <9608> -<9609> <9609> -<960A> <960D> -<960E> <960E> -<960F> <960F> -<9610> <9610> -<9611> <9611> -<9612> <9612> -<9614> <9614> -<9615> <9617> -<9619> <961A> -<961C> <961C> -<961D> <961D> -<961F> <961F> -<9621> <9621> -<9622> <9622> -<962A> <962A> -<962E> <962E> -<9631> <9631> -endbfrange - -100 beginbfrange -<9632> <9632> -<9633> <9633> -<9634> <9634> -<9635> <9635> -<9636> <9636> -<963B> <963B> -<963C> <963C> -<963D> <963D> -<963F> <963F> -<9640> <9640> -<9642> <9642> -<9644> <9644> -<9645> <9645> -<9646> <9646> -<9647> <9647> -<9648> <9648> -<9649> <9649> -<964B> <964B> -<964C> <964C> -<964D> <964D> -<9650> <9650> -<9654> <9654> -<9655> <9655> -<9658> <9658> -<965B> <965B> -<965D> <965D> -<965F> <965F> -<9661> <9661> -<9662> <9662> -<9663> <9663> -<9664> <9664> -<9667> <9667> -<9668> <9668> -<9669> <9669> -<966A> <966A> -<966C> <966C> -<9670> <9670> -<9672> <9672> -<9673> <9673> -<9674> <9674> -<9675> <9675> -<9676> <9676> -<9677> <9677> -<9678> <9678> -<967D> <967D> -<9685> <9685> -<9686> <9686> -<9688> <9688> -<968A> <968A> -<968B> <968B> -<968D> <968D> -<968E> <968E> -<968F> <968F> -<9690> <9690> -<9694> <9694> -<9695> <9695> -<9697> <9697> -<9698> <9698> -<9699> <9699> -<969B> <969B> -<969C> <969C> -<96A7> <96A7> -<96A8> <96A8> -<96AA> <96AA> -<96B0> <96B0> -<96B1> <96B1> -<96B3> <96B3> -<96B4> <96B4> -<96B6> <96B6> -<96B8> <96B8> -<96B9> <96B9> -<96BB> <96BB> -<96BC> <96BD> -<96BE> <96BE> -<96C0> <96C0> -<96C1> <96C1> -<96C4> <96C4> -<96C5> <96C5> -<96C6> <96C6> -<96C7> <96C7> -<96C9> <96C9> -<96CC> <96CC> -<96CD> <96CD> -<96CE> <96CE> -<96CF> <96CF> -<96D2> <96D2> -<96D5> <96D5> -<96D6> <96D6> -<96D9> <96D9> -<96DB> <96DB> -<96DC> <96DC> -<96E0> <96E0> -<96E2> <96E2> -<96E3> <96E3> -<96E8> <96E8> -<96E9> <96E9> -<96EA> <96EA> -<96EF> <96EF> -<96F2> <96F2> -<96F3> <96F3> -endbfrange - -100 beginbfrange -<96F6> <96F6> -<96F7> <96F7> -<96F9> <96F9> -<96FB> <96FB> -<96FE> <96FE> -<9700> <9700> -<9701> <9701> -<9704> <9704> -<9706> <9706> -<9707> <9707> -<9708> <9708> -<9709> <9709> -<970D> <970D> -<970E> <970E> -<970F> <970F> -<9713> <9713> -<9716> <9716> -<971C> <971C> -<971E> <971E> -<9727> <9727> -<972A> <972A> -<972D> <972D> -<9730> <9730> -<9732> <9732> -<9738> <9738> -<9739> <9739> -<973D> <973D> -<973E> <973E> -<9742> <9742> -<9744> <9744> -<9748> <9748> -<9752> <9752> -<9753> <9753> -<9756> <9756> -<9759> <9759> -<975A> <975A> -<975B> <975B> -<975E> <975E> -<9760> <9760> -<9761> <9761> -<9762> <9762> -<9765> <9765> -<9768> <9768> -<9769> <9769> -<9773> <9773> -<9774> <9774> -<9776> <9776> -<977C> <977C> -<9785> <9785> -<978B> <978B> -<978D> <978D> -<978F> <978F> -<9791> <9792> -<9794> <9794> -<9798> <9798> -<97A0> <97A0> -<97A3> <97A3> -<97A6> <97A6> -<97AB> <97AB> -<97AD> <97AD> -<97AF> <97AF> -<97B2> <97B2> -<97B4> <97B4> -<97BD> <97BD> -<97C3> <97C3> -<97C6> <97C6> -<97C9> <97C9> -<97CB> <97CB> -<97CC> <97CC> -<97D3> <97D3> -<97D9> <97D9> -<97DC> <97DC> -<97DE> <97DE> -<97E6> <97E6> -<97E7> <97E7> -<97E9> <97E9> -<97EA> <97EC> -<97ED> <97ED> -<97F3> <97F3> -<97F5> <97F5> -<97F6> <97F6> -<97FF> <97FF> -<9801> <9801> -<9802> <9802> -<9803> <9803> -<9805> <9805> -<9806> <9806> -<9807> <9807> -<9808> <9808> -<980A> <980A> -<980C> <980C> -<980E> <980E> -<980F> <980F> -<9810> <9810> -<9811> <9811> -<9812> <9812> -<9813> <9813> -<9817> <9817> -<9818> <9818> -<981C> <981C> -endbfrange - -100 beginbfrange -<9821> <9821> -<9824> <9824> -<9826> <9826> -<982D> <982D> -<9830> <9830> -<9837> <9837> -<9838> <9838> -<983B> <983B> -<983D> <983D> -<9846> <9846> -<984C> <984C> -<984D> <984D> -<984E> <984E> -<9853> <9853> -<9854> <9854> -<9858> <9858> -<9859> <9859> -<985B> <985B> -<985E> <985E> -<9862> <9862> -<9865> <9865> -<9867> <9867> -<986B> <986B> -<986C> <986C> -<986F> <986F> -<9870> <9870> -<9871> <9871> -<9873> <9873> -<9874> <9874> -<9875> <9875> -<9876> <9876> -<9877> <9877> -<9878> <9878> -<9879> <9879> -<987A> <987A> -<987B> <987B> -<987C> <987C> -<987D> <987D> -<987E> <987E> -<987F> <987F> -<9880> <9880> -<9881> <9881> -<9882> <9882> -<9883> <9883> -<9884> <9884> -<9885> <9885> -<9886> <9886> -<9887> <9887> -<9888> <9888> -<9889> <9889> -<988A> <988A> -<988C> <988D> -<988F> <988F> -<9890> <9890> -<9891> <9891> -<9893> <9893> -<9894> <9894> -<9896> <9896> -<9897> <9897> -<9898> <9898> -<989A> <989B> -<989C> <989C> -<989D> <989D> -<989E> <989F> -<98A0> <98A0> -<98A1> <98A2> -<98A4> <98A4> -<98A5> <98A6> -<98A7> <98A7> -<98A8> <98A8> -<98AE> <98AE> -<98AF> <98AF> -<98B1> <98B1> -<98B3> <98B3> -<98B6> <98B6> -<98BC> <98BC> -<98C4> <98C4> -<98C6> <98C6> -<98C8> <98C8> -<98CE> <98CE> -<98D1> <98D3> -<98D5> <98D5> -<98D8> <98D8> -<98D9> <98DA> -<98DB> <98DB> -<98DE> <98DE> -<98DF> <98DF> -<98E0> <98E0> -<98E2> <98E2> -<98E7> <98E7> -<98E8> <98E8> -<98E9> <98E9> -<98EA> <98EA> -<98EB> <98EB> -<98ED> <98ED> -<98EF> <98EF> -<98F2> <98F2> -<98F4> <98F4> -<98FC> <98FC> -<98FD> <98FD> -endbfrange - -100 beginbfrange -<98FE> <98FE> -<9903> <9903> -<9905> <9905> -<9909> <9909> -<990A> <990A> -<990C> <990C> -<990D> <990D> -<9910> <9910> -<9911> <9911> -<9912> <9912> -<9913> <9913> -<9918> <9918> -<991B> <991B> -<991E> <991E> -<9921> <9921> -<9928> <9928> -<992E> <992E> -<9933> <9933> -<9937> <9937> -<993C> <993C> -<993E> <993E> -<993F> <993F> -<9943> <9943> -<9945> <9945> -<9948> <9948> -<9949> <9949> -<994A> <994A> -<994B> <994B> -<994C> <994C> -<9951> <9951> -<9952> <9952> -<9954> <9954> -<9955> <9955> -<9957> <9957> -<995C> <995C> -<995E> <995E> -<9962> <9962> -<9963> <9963> -<9965> <9965> -<9967> <996C> -<996D> <996D> -<996E> <996E> -<996F> <996F> -<9970> <9970> -<9971> <9971> -<9972> <9972> -<9974> <9974> -<9975> <9975> -<9976> <9976> -<9977> <9977> -<997A> <997A> -<997C> <997C> -<997D> <997D> -<997F> <997F> -<9980> <9980> -<9981> <9981> -<9984> <9984> -<9985> <9985> -<9986> <9986> -<9987> <9987> -<9988> <9988> -<998A> <998A> -<998B> <998B> -<998D> <998D> -<998F> <998F> -<9990> <9991> -<9992> <9992> -<9993> <9995> -<9996> <9996> -<9997> <9997> -<9998> <9998> -<9999> <9999> -<99A5> <99A5> -<99A8> <99A8> -<99AC> <99AC> -<99AD> <99AD> -<99AE> <99AE> -<99B1> <99B1> -<99B3> <99B3> -<99B4> <99B4> -<99C1> <99C1> -<99D0> <99D0> -<99D1> <99D1> -<99D2> <99D2> -<99D4> <99D4> -<99D5> <99D5> -<99D8> <99D8> -<99D9> <99D9> -<99DB> <99DB> -<99DD> <99DD> -<99DF> <99DF> -<99E1> <99E1> -<99E2> <99E2> -<99ED> <99ED> -<99F1> <99F1> -<99FF> <99FF> -<9A01> <9A01> -<9A05> <9A05> -<9A0D> <9A0D> -<9A0E> <9A0E> -endbfrange - -100 beginbfrange -<9A0F> <9A0F> -<9A16> <9A16> -<9A19> <9A19> -<9A2B> <9A2B> -<9A2D> <9A2D> -<9A2E> <9A2E> -<9A30> <9A30> -<9A36> <9A36> -<9A37> <9A37> -<9A38> <9A38> -<9A3E> <9A3E> -<9A40> <9A40> -<9A41> <9A41> -<9A42> <9A42> -<9A43> <9A43> -<9A44> <9A44> -<9A45> <9A45> -<9A4A> <9A4A> -<9A4D> <9A4D> -<9A4F> <9A4F> -<9A55> <9A55> -<9A57> <9A57> -<9A5A> <9A5A> -<9A5B> <9A5B> -<9A5F> <9A5F> -<9A62> <9A62> -<9A64> <9A64> -<9A65> <9A65> -<9A6A> <9A6A> -<9A6C> <9A6C> -<9A6D> <9A6D> -<9A6E> <9A6E> -<9A6F> <9A6F> -<9A70> <9A70> -<9A71> <9A71> -<9A73> <9A73> -<9A74> <9A74> -<9A75> <9A75> -<9A76> <9A76> -<9A77> <9A78> -<9A79> <9A79> -<9A7A> <9A7A> -<9A7B> <9A7B> -<9A7C> <9A7C> -<9A7D> <9A7D> -<9A7E> <9A7E> -<9A7F> <9A7F> -<9A80> <9A81> -<9A82> <9A82> -<9A84> <9A84> -<9A85> <9A85> -<9A86> <9A86> -<9A87> <9A87> -<9A88> <9A88> -<9A8A> <9A8A> -<9A8B> <9A8B> -<9A8C> <9A8C> -<9A8F> <9A8F> -<9A90> <9A90> -<9A91> <9A91> -<9A92> <9A93> -<9A96> <9A96> -<9A97> <9A97> -<9A98> <9A98> -<9A9A> <9A9A> -<9A9B> <9A9D> -<9A9E> <9A9E> -<9A9F> <9AA0> -<9AA1> <9AA1> -<9AA2> <9AA3> -<9AA4> <9AA4> -<9AA5> <9AA5> -<9AA7> <9AA7> -<9AA8> <9AA8> -<9AAF> <9AAF> -<9AB0> <9AB0> -<9AB1> <9AB1> -<9AB6> <9AB6> -<9AB7> <9AB7> -<9AB8> <9AB8> -<9ABA> <9ABA> -<9ABC> <9ABC> -<9AC0> <9AC0> -<9AC1> <9AC1> -<9AC2> <9AC2> -<9AC5> <9AC5> -<9ACB> <9ACC> -<9ACF> <9ACF> -<9AD1> <9AD1> -<9AD2> <9AD2> -<9AD3> <9AD3> -<9AD4> <9AD4> -<9AD5> <9AD5> -<9AD6> <9AD6> -<9AD8> <9AD8> -<9ADF> <9ADF> -<9AE1> <9AE1> -<9AE6> <9AE6> -<9AEB> <9AEB> -<9AED> <9AED> -endbfrange - -100 beginbfrange -<9AEE> <9AEE> -<9AEF> <9AEF> -<9AF9> <9AF9> -<9AFB> <9AFB> -<9B03> <9B03> -<9B06> <9B06> -<9B08> <9B08> -<9B0D> <9B0D> -<9B0F> <9B0F> -<9B13> <9B13> -<9B1A> <9B1A> -<9B1F> <9B1F> -<9B22> <9B22> -<9B23> <9B23> -<9B25> <9B25> -<9B27> <9B27> -<9B29> <9B29> -<9B2E> <9B2E> -<9B2F> <9B2F> -<9B31> <9B31> -<9B32> <9B32> -<9B3B> <9B3B> -<9B3C> <9B3C> -<9B41> <9B41> -<9B42> <9B42> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> -<9B47> <9B47> -<9B48> <9B48> -<9B49> <9B49> -<9B4D> <9B4D> -<9B4E> <9B4E> -<9B4F> <9B4F> -<9B51> <9B51> -<9B54> <9B54> -<9B58> <9B58> -<9B5A> <9B5A> -<9B6F> <9B6F> -<9B74> <9B74> -<9B77> <9B77> -<9B81> <9B81> -<9B83> <9B83> -<9B8E> <9B8E> -<9B90> <9B90> -<9B91> <9B91> -<9B92> <9B92> -<9B9A> <9B9A> -<9B9D> <9B9D> -<9B9E> <9B9E> -<9BAA> <9BAA> -<9BAB> <9BAB> -<9BAD> <9BAD> -<9BAE> <9BAE> -<9BC0> <9BC0> -<9BC1> <9BC1> -<9BC7> <9BC7> -<9BC9> <9BC9> -<9BCA> <9BCA> -<9BD4> <9BD4> -<9BD6> <9BD6> -<9BDB> <9BDB> -<9BDD> <9BDD> -<9BE1> <9BE1> -<9BE2> <9BE2> -<9BE4> <9BE4> -<9BE7> <9BE7> -<9BE8> <9BE8> -<9BEA> <9BEA> -<9BEB> <9BEB> -<9BF0> <9BF0> -<9BF4> <9BF4> -<9BFD> <9BFD> -<9BFF> <9BFF> -<9C08> <9C08> -<9C09> <9C09> -<9C0D> <9C0D> -<9C10> <9C10> -<9C12> <9C12> -<9C13> <9C13> -<9C20> <9C20> -<9C23> <9C23> -<9C25> <9C25> -<9C28> <9C28> -<9C29> <9C29> -<9C2D> <9C2D> -<9C31> <9C31> -<9C32> <9C32> -<9C33> <9C33> -<9C35> <9C35> -<9C37> <9C37> -<9C39> <9C39> -<9C3B> <9C3B> -<9C3E> <9C3E> -<9C45> <9C45> -<9C48> <9C48> -<9C49> <9C49> -<9C52> <9C52> -<9C54> <9C54> -<9C56> <9C56> -endbfrange - -100 beginbfrange -<9C57> <9C57> -<9C58> <9C58> -<9C5D> <9C5D> -<9C5F> <9C5F> -<9C67> <9C67> -<9C6D> <9C6D> -<9C78> <9C78> -<9C7A> <9C7A> -<9C7C> <9C7C> -<9C7F> <9C7F> -<9C81> <9C81> -<9C82> <9C82> -<9C85> <9C88> -<9C8B> <9C8B> -<9C8D> <9C8D> -<9C8E> <9C8E> -<9C90> <9C92> -<9C94> <9C95> -<9C9A> <9C9B> -<9C9C> <9C9C> -<9C9E> <9CA3> -<9CA4> <9CA4> -<9CA5> <9CA9> -<9CAB> <9CAB> -<9CAD> <9CAE> -<9CB0> <9CB7> -<9CB8> <9CB8> -<9CBA> <9CBD> -<9CC3> <9CC3> -<9CC4> <9CC7> -<9CCA> <9CCB> -<9CCC> <9CD0> -<9CD3> <9CD5> -<9CD6> <9CD6> -<9CD7> <9CD9> -<9CDC> <9CDD> -<9CDE> <9CDE> -<9CDF> <9CDF> -<9CE2> <9CE2> -<9CE5> <9CE5> -<9CE9> <9CE9> -<9CEC> <9CEC> -<9CF3> <9CF3> -<9CF4> <9CF4> -<9CF6> <9CF6> -<9D06> <9D06> -<9D07> <9D07> -<9D09> <9D09> -<9D15> <9D15> -<9D1B> <9D1B> -<9D1D> <9D1D> -<9D1F> <9D1F> -<9D23> <9D23> -<9D26> <9D26> -<9D28> <9D28> -<9D2F> <9D2F> -<9D30> <9D30> -<9D3B> <9D3B> -<9D3F> <9D3F> -<9D42> <9D42> -<9D51> <9D51> -<9D52> <9D52> -<9D53> <9D53> -<9D5C> <9D5C> -<9D5D> <9D5D> -<9D60> <9D60> -<9D61> <9D61> -<9D6A> <9D6A> -<9D6C> <9D6C> -<9D6F> <9D6F> -<9D72> <9D72> -<9D87> <9D87> -<9D89> <9D89> -<9D93> <9D93> -<9D98> <9D98> -<9D9A> <9D9A> -<9DA5> <9DA5> -<9DA9> <9DA9> -<9DAF> <9DAF> -<9DB4> <9DB4> -<9DBB> <9DBB> -<9DBC> <9DBC> -<9DC0> <9DC0> -<9DC2> <9DC2> -<9DC4> <9DC4> -<9DD3> <9DD3> -<9DD7> <9DD7> -<9DD9> <9DD9> -<9DDA> <9DDA> -<9DE5> <9DE5> -<9DE6> <9DE6> -<9DEF> <9DEF> -<9DF2> <9DF2> -<9DF3> <9DF3> -<9DF8> <9DF8> -<9DF9> <9DF9> -<9DFA> <9DFA> -<9E0C> <9E0C> -<9E15> <9E15> -<9E1A> <9E1A> -endbfrange - -100 beginbfrange -<9E1B> <9E1B> -<9E1D> <9E1D> -<9E1E> <9E1E> -<9E1F> <9E1F> -<9E20> <9E20> -<9E21> <9E21> -<9E22> <9E22> -<9E23> <9E23> -<9E25> <9E25> -<9E26> <9E26> -<9E28> <9E2C> -<9E2D> <9E2D> -<9E2F> <9E2F> -<9E31> <9E31> -<9E32> <9E32> -<9E33> <9E33> -<9E35> <9E35> -<9E36> <9E36> -<9E37> <9E37> -<9E38> <9E38> -<9E39> <9E3A> -<9E3D> <9E3D> -<9E3E> <9E3E> -<9E3F> <9E3F> -<9E41> <9E42> -<9E43> <9E43> -<9E44> <9E44> -<9E45> <9E45> -<9E46> <9E49> -<9E4A> <9E4A> -<9E4B> <9E4C> -<9E4E> <9E4E> -<9E4F> <9E4F> -<9E51> <9E51> -<9E55> <9E55> -<9E57> <9E57> -<9E58> <9E58> -<9E5A> <9E5C> -<9E5E> <9E5E> -<9E63> <9E63> -<9E64> <9E64> -<9E66> <9E6C> -<9E6D> <9E6D> -<9E70> <9E70> -<9E71> <9E71> -<9E73> <9E73> -<9E75> <9E75> -<9E79> <9E79> -<9E7A> <9E7A> -<9E7C> <9E7C> -<9E7D> <9E7D> -<9E7E> <9E7E> -<9E7F> <9E7F> -<9E82> <9E82> -<9E87> <9E88> -<9E8B> <9E8B> -<9E92> <9E92> -<9E93> <9E93> -<9E97> <9E97> -<9E9D> <9E9D> -<9E9F> <9E9F> -<9EA5> <9EA5> -<9EA6> <9EA6> -<9EA9> <9EA9> -<9EAF> <9EAF> -<9EB4> <9EB4> -<9EB5> <9EB5> -<9EB8> <9EB8> -<9EBB> <9EBB> -<9EBD> <9EBE> -<9EC4> <9EC4> -<9EC9> <9EC9> -<9ECC> <9ECC> -<9ECD> <9ECD> -<9ECE> <9ECE> -<9ECF> <9ECF> -<9ED1> <9ED1> -<9ED4> <9ED4> -<9ED8> <9ED8> -<9EDB> <9EDD> -<9EDE> <9EDE> -<9EDF> <9EDF> -<9EE0> <9EE0> -<9EE2> <9EE2> -<9EE5> <9EE5> -<9EE7> <9EE7> -<9EE8> <9EE8> -<9EE9> <9EE9> -<9EEA> <9EEA> -<9EEF> <9EEF> -<9EF2> <9EF2> -<9EF4> <9EF4> -<9EF7> <9EF7> -<9EF9> <9EF9> -<9EFB> <9EFC> -<9EFD> <9EFD> -<9EFE> <9EFE> -<9EFF> <9EFF> -<9F09> <9F09> -<9F0B> <9F0B> -endbfrange - -80 beginbfrange -<9F0D> <9F0D> -<9F0E> <9F0E> -<9F10> <9F10> -<9F13> <9F13> -<9F15> <9F15> -<9F17> <9F17> -<9F19> <9F19> -<9F20> <9F20> -<9F22> <9F22> -<9F2C> <9F2C> -<9F2F> <9F2F> -<9F37> <9F37> -<9F39> <9F39> -<9F3B> <9F3B> -<9F3D> <9F3E> -<9F44> <9F44> -<9F4A> <9F4A> -<9F4B> <9F4B> -<9F4F> <9F4F> -<9F50> <9F50> -<9F51> <9F51> -<9F52> <9F52> -<9F54> <9F54> -<9F59> <9F59> -<9F5C> <9F5C> -<9F5F> <9F5F> -<9F60> <9F60> -<9F61> <9F61> -<9F63> <9F63> -<9F66> <9F66> -<9F6A> <9F6A> -<9F6C> <9F6C> -<9F72> <9F72> -<9F77> <9F77> -<9F7F> <9F7F> -<9F80> <9F80> -<9F83> <9F83> -<9F84> <9F84> -<9F85> <9F8A> -<9F8B> <9F8B> -<9F8C> <9F8C> -<9F8D> <9F8D> -<9F90> <9F90> -<9F94> <9F94> -<9F95> <9F95> -<9F99> <9F99> -<9F9A> <9F9A> -<9F9B> <9F9B> -<9F9C> <9F9C> -<9F9F> <9F9F> -<9FA0> <9FA0> - - <81> - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-KSCms-UHC b/Resources/cmap/UCS2-KSCms-UHC deleted file mode 100644 index e2e445b1adf..00000000000 --- a/Resources/cmap/UCS2-KSCms-UHC +++ /dev/null @@ -1,9070 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-KSCms-UHC) -%%Title: (UCS2-KSCms-UHC) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_KCSms_UHC) def - /Supplement 1 def -end def - -/CMapName /UCS2-KSCms-UHC def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <0080> <00> -<00A1> <00A1> -<00A2> <00A3> -<00A4> <00A4> -<00A5> <00A5> -<00A6> <00A6> <7C> -<00A7> <00A7> -<00A8> <00A8> -<00A9> <00A9> -<00AA> <00AA> -<00AB> <00AB> -<00AC> <00AC> -<00AD> <00AD> -<00AE> <00AE> <52> -<00B0> <00B0> -<00B1> <00B1> -<00B2> <00B3> -<00B4> <00B4> -<00B5> <00B5> -<00B6> <00B6> -<00B7> <00B7> -<00B8> <00B8> -<00B9> <00B9> -<00BA> <00BA> -<00BB> <00BB> -<00BC> <00BC> -<00BD> <00BD> -<00BE> <00BE> -<00BF> <00BF> -<00C0> <00C0> <41> -<00C1> <00C1> <41> -<00C2> <00C2> <41> -<00C3> <00C3> <41> -<00C4> <00C4> <41> -<00C5> <00C5> <41> -<00C6> <00C6> -<00C7> <00C7> <43> -<00C8> <00C8> <45> -<00C9> <00C9> <45> -<00CA> <00CA> <45> -<00CB> <00CB> <45> -<00CC> <00CC> <49> -<00CD> <00CD> <49> -<00CE> <00CE> <49> -<00CF> <00CF> <49> -<00D0> <00D0> -<00D1> <00D2> <4E> -<00D3> <00D3> <4F> -<00D4> <00D4> <4F> -<00D5> <00D5> <4F> -<00D6> <00D6> <4F> -<00D7> <00D7> -<00D8> <00D8> -<00D9> <00D9> <55> -<00DA> <00DA> <55> -<00DB> <00DB> <55> -<00DC> <00DC> <55> -<00DD> <00DD> <59> -<00DE> <00DE> -<00DF> <00DF> -<00E0> <00E0> <61> -<00E1> <00E1> <61> -<00E2> <00E2> <61> -<00E3> <00E3> <61> -<00E4> <00E4> <61> -<00E5> <00E5> <61> -<00E6> <00E6> -<00E7> <00E7> <63> -<00E8> <00E8> <65> -<00E9> <00E9> <65> -<00EA> <00EA> <65> -<00EB> <00EB> <65> -<00EC> <00EC> <69> -<00ED> <00ED> <69> -<00EE> <00EE> <69> -<00EF> <00EF> <69> -<00F0> <00F0> -<00F1> <00F2> <6E> -<00F3> <00F3> <6F> -<00F4> <00F4> <6F> -<00F5> <00F5> <6F> -<00F6> <00F6> <6F> -<00F7> <00F7> -<00F8> <00F8> -<00F9> <00F9> <75> -<00FA> <00FA> <75> -<00FB> <00FB> <75> -<00FC> <00FC> <75> -<00FD> <00FD> <79> -<00FE> <00FE> -<00FF> <00FF> <79> -<0110> <0110> -<0111> <0111> -<0126> <0126> -<0127> <0127> -<0131> <0131> -<0132> <0132> -<0133> <0133> -<0138> <0138> -<013F> <013F> -endbfrange - -100 beginbfrange -<0140> <0140> -<0141> <0141> -<0142> <0142> -<0149> <0149> -<014A> <014A> -<014B> <014B> -<0152> <0152> -<0153> <0153> -<0166> <0166> -<0167> <0167> -<02C7> <02C7> -<02D0> <02D0> -<02D8> <02D8> -<02D9> <02D9> -<02DA> <02DA> -<02DB> <02DB> -<02DC> <02DC> -<02DD> <02DD> -<0391> <03A1> -<03A3> <03A9> -<03B1> <03C1> -<03C3> <03C9> -<0401> <0401> -<0410> <0415> -<0416> <042F> -<0430> <0435> -<0436> <044F> -<0451> <0451> -<1100> <1101> -<1102> <1102> -<1103> <1105> -<1106> <1108> -<1109> <1112> -<1114> <1115> -<111A> <111A> -<111C> <111C> -<111D> <111E> -<1120> <1120> -<1121> <1121> -<1122> <1123> -<1127> <1127> -<1129> <1129> -<112B> <112F> -<1132> <1132> -<1136> <1136> -<113C> <113D> -<113E> <113F> -<1140> <1140> -<1145> <1146> -<1147> <1147> -<114C> <114C> -<114E> <114F> -<1150> <1151> -<1154> <1154> -<1155> <1155> -<1157> <1159> -<115F> <115F> -<1161> <1175> -<1184> <1185> -<1188> <1188> -<1191> <1192> -<1194> <1194> -<119E> <119E> -<11A1> <11A1> -<11A8> <11AE> -<11AF> <11B8> -<11B9> <11BD> -<11BE> <11C2> -<11C6> <11C8> -<11CC> <11CC> -<11CE> <11CE> -<11D3> <11D3> -<11D7> <11D7> -<11D9> <11D9> -<11DC> <11DD> -<11DF> <11DF> -<11E6> <11E6> -<11E7> <11E7> -<11E8> <11E8> -<11EA> <11EA> -<11EB> <11EB> -<11EE> <11EE> -<11F0> <11F0> -<11F1> <11F2> -<11F4> <11F4> -<11F9> <11F9> -<2010> <2010> -<2013> <2014> -<2015> <2016> -<2018> <2019> -<201C> <201D> -<2020> <2021> -<2022> <2022> -<2025> <2026> -<2027> <2027> -<2030> <2030> -<2032> <2033> -<203B> <203B> -<203E> <203E> -<2074> <2074> -endbfrange - -100 beginbfrange -<207F> <207F> -<2081> <2084> -<20A9> <20A9> <5C> -<2103> <2103> -<2109> <2109> -<2113> <2113> -<2116> <2116> -<2121> <2121> -<2122> <2122> -<2126> <2126> -<212B> <212B> -<2153> <2154> -<215B> <215E> -<2160> <2169> -<2170> <2179> -<2190> <2191> -<2192> <2192> -<2193> <2194> -<2195> <2195> -<2196> <2196> -<2197> <2197> -<2198> <2198> -<2199> <2199> -<21D2> <21D2> -<21D4> <21D4> -<2200> <2200> -<2202> <2202> -<2203> <2203> -<2207> <2207> -<2208> <2208> -<220B> <220B> -<220F> <220F> -<2211> <2211> -<221A> <221A> -<221D> <221D> -<221E> <221E> -<2220> <2220> -<2225> <2225> -<2227> <2228> -<2229> <2229> -<222A> <222A> -<222B> <222C> -<222E> <222E> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<223C> <223C> -<223D> <223D> -<2252> <2252> -<2260> <2260> -<2261> <2261> -<2264> <2265> -<226A> <226B> -<2282> <2283> -<2286> <2287> -<2299> <2299> -<22A5> <22A5> -<22EF> <22EF> -<2312> <2312> -<2460> <246E> -<2474> <2482> -<249C> <24B5> -<24B6> <24CF> -<24D0> <24E9> -<2500> <2500> -<2501> <2501> -<2502> <2502> -<2503> <2503> -<250C> <250C> -<250D> <250D> -<250E> <250E> -<250F> <250F> -<2510> <2510> -<2511> <2511> -<2512> <2512> -<2513> <2513> -<2514> <2514> -<2515> <2515> -<2516> <2516> -<2517> <2517> -<2518> <2518> -<2519> <2519> -<251A> <251A> -<251B> <251B> -<251C> <251C> -<251D> <251D> -<251E> <251F> -<2520> <2520> -<2521> <2522> -<2523> <2523> -<2524> <2524> -<2525> <2525> -<2526> <2527> -<2528> <2528> -<2529> <252A> -<252B> <252B> -<252C> <252C> -<252D> <252E> -<252F> <252F> -<2530> <2530> -endbfrange - -100 beginbfrange -<2531> <2532> -<2533> <2533> -<2534> <2534> -<2535> <2536> -<2537> <2537> -<2538> <2538> -<2539> <253A> -<253B> <253B> -<253C> <253C> -<253D> <253E> -<253F> <253F> -<2540> <2541> -<2542> <2542> -<2543> <254A> -<254B> <254B> -<2592> <2592> -<2595> <2595> -<25A0> <25A0> -<25A1> <25A1> -<25A3> <25A3> -<25A4> <25A5> -<25A6> <25A6> -<25A7> <25A7> -<25A8> <25A8> -<25A9> <25A9> -<25B2> <25B2> -<25B3> <25B3> -<25B6> <25B6> -<25B7> <25B7> -<25BC> <25BC> -<25BD> <25BD> -<25C0> <25C0> -<25C1> <25C1> -<25C6> <25C6> -<25C7> <25C7> -<25C8> <25C8> -<25C9> <25C9> -<25CB> <25CB> -<25CE> <25CE> -<25CF> <25CF> -<25D0> <25D1> -<2605> <2605> -<2606> <2606> -<2609> <2609> -<260E> <260E> -<260F> <260F> -<261C> <261C> -<261E> <261E> -<2640> <2640> -<2642> <2642> -<2660> <2661> -<2663> <2663> -<2664> <2664> -<2665> <2665> -<2667> <2667> -<2668> <2668> -<2669> <266A> -<266C> <266C> -<266D> <266D> -<3000> <3002> -<3003> <3003> -<3008> <3011> -<3013> <3013> -<3014> <3015> -<301C> <301C> -<3041> <3093> -<30A1> <30F6> -<30FB> <30FB> -<3131> <318E> -<3192> <3192> -<3193> <3193> -<3194> <3194> -<3195> <3195> -<3196> <3196> -<3197> <3197> -<3198> <3198> -<3199> <3199> -<319A> <319A> -<319B> <319B> -<319C> <319C> -<319D> <319D> -<319E> <319E> -<319F> <319F> -<3200> <321B> -<321C> <321C> -<3220> <3220> -<3221> <3221> -<3222> <3222> -<3223> <3223> -<3224> <3224> -<3225> <3225> -<3226> <3226> -<3227> <3227> -<3228> <3228> -<3229> <3229> -<322A> <322A> -<322B> <322B> -<322C> <322C> -<322D> <322D> -<322E> <322E> -endbfrange - -100 beginbfrange -<322F> <322F> -<3230> <3230> -<3231> <3231> -<3232> <3232> -<3233> <3233> -<3234> <3234> -<3235> <3235> -<3236> <3236> -<3237> <3237> -<3238> <3238> -<3239> <3239> -<323A> <323A> -<323B> <323B> -<323C> <323C> -<323D> <323D> -<323E> <323E> -<323F> <323F> -<3240> <3240> -<3241> <3241> -<3242> <3242> -<3243> <3243> -<3260> <327B> -<327F> <327F> -<3280> <3280> -<3281> <3281> -<3282> <3282> -<3283> <3283> -<3284> <3284> -<3285> <3285> -<3286> <3286> -<3287> <3287> -<3288> <3288> -<3289> <3289> -<328A> <328A> -<328B> <328B> -<328C> <328C> -<328D> <328D> -<328E> <328E> -<328F> <328F> -<3290> <3290> -<3291> <3291> -<3292> <3292> -<3293> <3293> -<3294> <3294> -<3295> <3295> -<3296> <3296> -<3297> <3297> -<3298> <3298> -<3299> <3299> -<329A> <329A> -<329B> <329B> -<329C> <329C> -<329D> <329D> -<329E> <329E> -<329F> <329F> -<32A0> <32A0> -<32A1> <32A1> -<32A2> <32A2> -<32A3> <32A3> -<32A4> <32A4> -<32A5> <32A5> -<32A6> <32A6> -<32A7> <32A7> -<32A8> <32A8> -<32A9> <32A9> -<32AA> <32AA> -<32AB> <32AB> -<32AC> <32AC> -<32AD> <32AD> -<32AE> <32AE> -<32AF> <32AF> -<32B0> <32B0> -<3380> <3384> -<3388> <3389> -<338A> <338C> -<338D> <338F> -<3390> <3394> -<3395> <3397> -<3398> <3398> -<3399> <33A2> -<33A3> <33A6> -<33A7> <33A8> -<33A9> <33AC> -<33AD> <33AF> -<33B0> <33B9> -<33BA> <33BF> -<33C0> <33C1> -<33C2> <33C2> -<33C3> <33C3> -<33C4> <33C4> -<33C5> <33C5> -<33C6> <33C6> -<33C7> <33C7> -<33C8> <33C8> -<33C9> <33C9> -<33CA> <33CA> -<33CF> <33CF> -<33D0> <33D0> -<33D3> <33D3> -<33D6> <33D6> -endbfrange - -100 beginbfrange -<33D8> <33D8> -<33DB> <33DB> -<33DC> <33DC> -<33DD> <33DD> -<4E00> <4E00> -<4E01> <4E01> -<4E03> <4E03> -<4E07> <4E07> -<4E08> <4E08> -<4E09> <4E09> -<4E0A> <4E0A> -<4E0B> <4E0B> -<4E0D> <4E0D> -<4E11> <4E11> -<4E14> <4E14> -<4E15> <4E15> -<4E16> <4E16> -<4E18> <4E18> -<4E19> <4E19> -<4E1E> <4E1E> -<4E2D> <4E2D> -<4E32> <4E32> -<4E38> <4E38> -<4E39> <4E39> -<4E3B> <4E3B> -<4E42> <4E42> -<4E43> <4E43> -<4E45> <4E45> -<4E4B> <4E4B> -<4E4D> <4E4D> -<4E4E> <4E4E> -<4E4F> <4E4F> -<4E56> <4E56> -<4E58> <4E58> -<4E59> <4E59> -<4E5D> <4E5D> -<4E5E> <4E5E> -<4E5F> <4E5F> -<4E6B> <4E6B> -<4E6D> <4E6D> -<4E73> <4E73> -<4E76> <4E76> -<4E77> <4E77> -<4E7E> <4E7E> -<4E82> <4E82> -<4E86> <4E86> -<4E88> <4E88> -<4E8B> <4E8B> -<4E8C> <4E8C> -<4E8E> <4E8E> -<4E90> <4E90> -<4E91> <4E91> -<4E92> <4E92> -<4E94> <4E94> -<4E95> <4E95> -<4E98> <4E98> -<4E9B> <4E9B> -<4E9E> <4E9E> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA4> <4EA4> -<4EA5> <4EA5> -<4EA6> <4EA6> -<4EA8> <4EA8> -<4EAB> <4EAB> -<4EAC> <4EAC> -<4EAD> <4EAD> -<4EAE> <4EAE> -<4EB6> <4EB6> -<4EBA> <4EBA> -<4EC0> <4EC0> -<4EC1> <4EC1> -<4EC4> <4EC4> -<4EC7> <4EC7> -<4ECA> <4ECA> -<4ECB> <4ECB> -<4ECD> <4ECD> -<4ED4> <4ED4> -<4ED5> <4ED5> -<4ED6> <4ED6> -<4ED7> <4ED7> -<4ED8> <4ED8> -<4ED9> <4ED9> -<4EDD> <4EDD> -<4EDF> <4EDF> -<4EE3> <4EE3> -<4EE4> <4EE4> -<4EE5> <4EE5> -<4EF0> <4EF0> -<4EF2> <4EF2> -<4EF6> <4EF6> -<4EF7> <4EF7> -<4EFB> <4EFB> -<4F01> <4F01> -<4F09> <4F09> -<4F0A> <4F0A> -<4F0B> <4F0B> -<4F0D> <4F0D> -<4F0E> <4F0E> -<4F0F> <4F0F> -endbfrange - -100 beginbfrange -<4F10> <4F10> -<4F11> <4F11> -<4F2F> <4F2F> -<4F34> <4F34> -<4F36> <4F36> -<4F38> <4F38> -<4F3A> <4F3A> -<4F3C> <4F3C> -<4F3D> <4F3D> -<4F43> <4F43> -<4F46> <4F46> -<4F47> <4F47> -<4F48> <4F48> -<4F4D> <4F4D> -<4F4E> <4F4E> -<4F4F> <4F4F> -<4F50> <4F50> -<4F51> <4F51> -<4F55> <4F55> -<4F59> <4F59> -<4F5A> <4F5A> -<4F5B> <4F5B> -<4F5C> <4F5C> -<4F69> <4F69> -<4F6F> <4F6F> -<4F70> <4F70> -<4F73> <4F73> -<4F76> <4F76> -<4F7A> <4F7A> -<4F7E> <4F7E> -<4F7F> <4F7F> -<4F81> <4F81> -<4F83> <4F83> -<4F84> <4F84> -<4F86> <4F86> -<4F88> <4F88> -<4F8A> <4F8A> -<4F8B> <4F8B> -<4F8D> <4F8D> -<4F8F> <4F8F> -<4F91> <4F91> -<4F96> <4F96> -<4F98> <4F98> -<4F9B> <4F9B> -<4F9D> <4F9D> -<4FAE> <4FAE> -<4FAF> <4FAF> -<4FB5> <4FB5> -<4FB6> <4FB6> -<4FBF> <4FBF> -<4FC2> <4FC2> -<4FC3> <4FC3> -<4FC4> <4FC4> -<4FC9> <4FC9> -<4FCA> <4FCA> -<4FCE> <4FCE> -<4FD1> <4FD1> -<4FD3> <4FD3> -<4FD4> <4FD4> -<4FD7> <4FD7> -<4FDA> <4FDA> -<4FDD> <4FDD> -<4FDF> <4FDF> -<4FE0> <4FE0> -<4FE1> <4FE1> -<4FEE> <4FEE> -<4FEF> <4FEF> -<4FF1> <4FF1> -<4FF3> <4FF3> -<4FF5> <4FF5> -<4FF8> <4FF8> -<4FFA> <4FFA> -<5002> <5002> -<5006> <5006> -<5009> <5009> -<500B> <500B> -<500D> <500D> -<5011> <5011> -<5012> <5012> -<5016> <5016> -<5019> <5019> -<501A> <501A> -<501C> <501C> -<501E> <501E> -<501F> <501F> -<5021> <5021> -<5023> <5023> -<5024> <5024> -<5026> <5026> -<5027> <5027> -<5028> <5028> -<502A> <502A> -<502B> <502B> -<502C> <502C> -<502D> <502D> -<503B> <503B> -<5043> <5043> -<5047> <5047> -<5048> <5048> -<5049> <5049> -endbfrange - -100 beginbfrange -<504F> <504F> -<5055> <5055> -<505A> <505A> -<505C> <505C> -<5065> <5065> -<5074> <5074> -<5075> <5075> -<5076> <5076> -<5078> <5078> -<5080> <5080> -<5085> <5085> -<508D> <508D> -<5091> <5091> -<5098> <5098> -<5099> <5099> -<50AC> <50AC> -<50AD> <50AD> -<50B2> <50B2> -<50B3> <50B3> -<50B5> <50B5> -<50B7> <50B7> -<50BE> <50BE> -<50C5> <50C5> -<50C9> <50C9> -<50CA> <50CA> -<50CF> <50CF> -<50D1> <50D1> -<50D5> <50D5> -<50D6> <50D6> -<50DA> <50DA> -<50DE> <50DE> -<50E5> <50E5> -<50E7> <50E7> -<50ED> <50ED> -<50F9> <50F9> -<50FB> <50FB> -<50FF> <50FF> -<5100> <5100> -<5101> <5101> -<5104> <5104> -<5106> <5106> -<5109> <5109> -<5112> <5112> -<511F> <511F> -<5121> <5121> -<512A> <512A> -<5132> <5132> -<5137> <5137> -<513A> <513A> -<513C> <513C> -<5140> <5140> -<5141> <5141> -<5143> <5143> -<5144> <5144> -<5145> <5145> -<5146> <5146> -<5147> <5147> -<5148> <5148> -<5149> <5149> -<514B> <514B> -<514C> <514C> -<514D> <514D> -<514E> <514E> -<5152> <5152> -<515C> <515C> -<5162> <5162> -<5165> <5165> -<5167> <5167> -<5168> <5168> -<5169> <5169> -<516A> <516A> -<516B> <516B> -<516C> <516C> -<516D> <516D> -<516E> <516E> -<5171> <5171> -<5175> <5175> -<5176> <5176> -<5177> <5177> -<5178> <5178> -<517C> <517C> -<5180> <5180> -<5186> <5186> -<518A> <518A> -<518D> <518D> -<5192> <5192> -<5195> <5195> -<5197> <5197> -<51A0> <51A0> -<51A5> <51A5> -<51AA> <51AA> -<51AC> <51AC> -<51B6> <51B6> -<51B7> <51B7> -<51BD> <51BD> -<51C4> <51C4> -<51C6> <51C6> -<51C9> <51C9> -<51CB> <51CB> -<51CC> <51CC> -endbfrange - -100 beginbfrange -<51CD> <51CD> -<51DC> <51DC> -<51DD> <51DD> -<51DE> <51DE> -<51E1> <51E1> -<51F0> <51F0> -<51F1> <51F1> -<51F6> <51F6> -<51F8> <51F8> -<51F9> <51F9> -<51FA> <51FA> -<51FD> <51FD> -<5200> <5200> -<5203> <5203> -<5206> <5206> -<5207> <5207> -<5208> <5208> -<520A> <520A> -<520E> <520E> -<5211> <5211> -<5217> <5217> -<521D> <521D> -<5224> <5224> -<5225> <5225> -<5229> <5229> -<522A> <522A> -<522E> <522E> -<5230> <5230> -<5236> <5236> -<5237> <5237> -<5238> <5238> -<5239> <5239> -<523A> <523A> -<523B> <523B> -<5243> <5243> -<5247> <5247> -<524A> <524A> -<524B> <524B> -<524C> <524C> -<524D> <524D> -<5254> <5254> -<5256> <5256> -<525B> <525B> -<525D> <525D> -<5261> <5261> -<5269> <5269> -<526A> <526A> -<526F> <526F> -<5272> <5272> -<5275> <5275> -<527D> <527D> -<527F> <527F> -<5283> <5283> -<5287> <5287> -<5288> <5288> -<5289> <5289> -<528D> <528D> -<5291> <5291> -<5292> <5292> -<529B> <529B> -<529F> <529F> -<52A0> <52A0> -<52A3> <52A3> -<52A4> <52A4> -<52A9> <52A9> -<52AA> <52AA> -<52AB> <52AB> -<52BE> <52BE> -<52C1> <52C1> -<52C3> <52C3> -<52C5> <52C5> -<52C7> <52C7> -<52C9> <52C9> -<52CD> <52CD> -<52D2> <52D2> -<52D5> <52D5> -<52D6> <52D6> -<52D8> <52D8> -<52D9> <52D9> -<52DB> <52DB> -<52DD> <52DD> -<52DE> <52DE> -<52DF> <52DF> -<52E2> <52E2> -<52E3> <52E3> -<52E4> <52E4> -<52F3> <52F3> -<52F5> <52F5> -<52F8> <52F8> -<52FA> <52FA> -<52FB> <52FB> -<52FE> <52FE> -<52FF> <52FF> -<5305> <5305> -<5308> <5308> -<530D> <530D> -<530F> <530F> -<5310> <5310> -<5315> <5315> -<5316> <5316> -endbfrange - -100 beginbfrange -<5317> <5317> -<5319> <5319> -<5320> <5320> -<5321> <5321> -<5323> <5323> -<532A> <532A> -<532F> <532F> -<5339> <5339> -<533F> <533F> -<5340> <5340> -<5341> <5341> -<5343> <5343> -<5344> <5344> -<5347> <5347> -<5348> <5348> -<5349> <5349> -<534A> <534A> -<534D> <534D> -<5351> <5351> -<5352> <5352> -<5353> <5353> -<5354> <5354> -<5357> <5357> -<535A> <535A> -<535C> <535C> -<535E> <535E> -<5360> <5360> -<5366> <5366> -<5368> <5368> -<536F> <536F> -<5370> <5370> -<5371> <5371> -<5374> <5374> -<5375> <5375> -<5377> <5377> -<537D> <537D> -<537F> <537F> -<5384> <5384> -<5393> <5393> -<5398> <5398> -<539A> <539A> -<539F> <539F> -<53A0> <53A0> -<53A5> <53A5> -<53A6> <53A6> -<53AD> <53AD> -<53BB> <53BB> -<53C3> <53C3> -<53C8> <53C8> -<53C9> <53C9> -<53CA> <53CA> -<53CB> <53CB> -<53CD> <53CD> -<53D4> <53D4> -<53D6> <53D6> -<53D7> <53D7> -<53DB> <53DB> -<53E1> <53E1> -<53E2> <53E2> -<53E3> <53E3> -<53E4> <53E4> -<53E5> <53E5> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53EC> -<53ED> <53ED> -<53EF> <53EF> -<53F0> <53F0> -<53F1> <53F1> -<53F2> <53F2> -<53F3> <53F3> -<53F8> <53F8> -<5403> <5403> -<5404> <5404> -<5408> <5408> -<5409> <5409> -<540A> <540A> -<540C> <540C> -<540D> <540D> -<540E> <540E> -<540F> <540F> -<5410> <5410> -<5411> <5411> -<541B> <541B> -<541D> <541D> -<541F> <541F> -<5420> <5420> -<5426> <5426> -<5429> <5429> -<542B> <542B> -<5433> <5433> -<5438> <5438> -<5439> <5439> -<543B> <543B> -<543C> <543C> -<543E> <543E> -<5442> <5442> -<5448> <5448> -<544A> <544A> -endbfrange - -100 beginbfrange -<5451> <5451> -<5468> <5468> -<546A> <546A> -<5471> <5471> -<5473> <5473> -<5475> <5475> -<547B> <547B> -<547C> <547C> -<547D> <547D> -<5480> <5480> -<5486> <5486> -<548C> <548C> -<548E> <548E> -<5490> <5490> -<54A4> <54A4> -<54A8> <54A8> -<54AB> <54AB> -<54AC> <54AC> -<54B3> <54B3> -<54B8> <54B8> -<54BD> <54BD> -<54C0> <54C0> -<54C1> <54C1> -<54C4> <54C4> -<54C8> <54C8> -<54C9> <54C9> -<54E1> <54E1> -<54E5> <54E5> -<54E8> <54E8> -<54ED> <54ED> -<54EE> <54EE> -<54F2> <54F2> -<54FA> <54FA> -<5504> <5504> -<5506> <5506> -<5507> <5507> -<550E> <550E> -<5510> <5510> -<551C> <551C> -<552F> <552F> -<5531> <5531> -<5535> <5535> -<553E> <553E> -<5544> <5544> -<5546> <5546> -<554F> <554F> -<5553> <5553> -<5556> <5556> -<555E> <555E> -<5563> <5563> -<557C> <557C> -<5580> <5580> -<5584> <5584> -<5586> <5586> -<5587> <5587> -<5589> <5589> -<558A> <558A> -<5598> <5598> -<5599> <5599> -<559A> <559A> -<559C> <559C> -<559D> <559D> -<55A7> <55A7> -<55A9> <55A9> -<55AA> <55AA> -<55AB> <55AB> -<55AC> <55AC> -<55AE> <55AE> -<55C5> <55C5> -<55C7> <55C7> -<55D4> <55D4> -<55DA> <55DA> -<55DC> <55DC> -<55DF> <55DF> -<55E3> <55E3> -<55E4> <55E4> -<55FD> <55FD> -<55FE> <55FE> -<5606> <5606> -<5609> <5609> -<5614> <5614> -<5617> <5617> -<562F> <562F> -<5632> <5632> -<5634> <5634> -<5636> <5636> -<5653> <5653> -<5668> <5668> -<566B> <566B> -<5674> <5674> -<5686> <5686> -<56A5> <56A5> -<56AC> <56AC> -<56AE> <56AE> -<56B4> <56B4> -<56BC> <56BC> -<56CA> <56CA> -<56CD> <56CD> -<56D1> <56D1> -<56DA> <56DA> -endbfrange - -100 beginbfrange -<56DB> <56DB> -<56DE> <56DE> -<56E0> <56E0> -<56F0> <56F0> -<56F9> <56F9> -<56FA> <56FA> -<5703> <5703> -<5704> <5704> -<5708> <5708> -<570B> <570B> -<570D> <570D> -<5712> <5712> -<5713> <5713> -<5716> <5716> -<5718> <5718> -<571F> <571F> -<5728> <5728> -<572D> <572D> -<5730> <5730> -<573B> <573B> -<5740> <5740> -<5742> <5742> -<5747> <5747> -<574A> <574A> -<574D> <574D> -<574E> <574E> -<5750> <5750> -<5751> <5751> -<5761> <5761> -<5764> <5764> -<5766> <5766> -<576A> <576A> -<576E> <576E> -<5770> <5770> -<5775> <5775> -<577C> <577C> -<5782> <5782> -<5788> <5788> -<578B> <578B> -<5793> <5793> -<57A0> <57A0> -<57A2> <57A2> -<57A3> <57A3> -<57C3> <57C3> -<57C7> <57C7> -<57C8> <57C8> -<57CB> <57CB> -<57CE> <57CE> -<57DF> <57DF> -<57E0> <57E0> -<57F0> <57F0> -<57F4> <57F4> -<57F7> <57F7> -<57F9> <57F9> -<57FA> <57FA> -<57FC> <57FC> -<5800> <5800> -<5802> <5802> -<5805> <5805> -<5806> <5806> -<5808> <5808> -<5809> <5809> -<580A> <580A> -<581E> <581E> -<5821> <5821> -<5824> <5824> -<5827> <5827> -<582A> <582A> -<582F> <582F> -<5830> <5830> -<5831> <5831> -<5834> <5834> -<5835> <5835> -<583A> <583A> -<584A> <584A> -<584B> <584B> -<584F> <584F> -<5851> <5851> -<5854> <5854> -<5857> <5857> -<5858> <5858> -<585A> <585A> -<585E> <585E> -<5861> <5861> -<5862> <5862> -<5864> <5864> -<5875> <5875> -<5879> <5879> -<587C> <587C> -<587E> <587E> -<5883> <5883> -<5885> <5885> -<5889> <5889> -<5893> <5893> -<589C> <589C> -<589E> <589E> -<589F> <589F> -<58A8> <58A8> -<58A9> <58A9> -<58AE> <58AE> -endbfrange - -100 beginbfrange -<58B3> <58B3> -<58BA> <58BA> -<58BB> <58BB> -<58BE> <58BE> -<58C1> <58C1> -<58C5> <58C5> -<58C7> <58C7> -<58CE> <58CE> -<58D1> <58D1> -<58D3> <58D3> -<58D5> <58D5> -<58D8> <58D8> -<58D9> <58D9> -<58DE> <58DE> -<58DF> <58DF> -<58E4> <58E4> -<58EB> <58EB> -<58EC> <58EC> -<58EF> <58EF> -<58F9> <58F9> -<58FA> <58FA> -<58FB> <58FB> -<58FD> <58FD> -<590F> <590F> -<5914> <5914> -<5915> <5915> -<5916> <5916> -<5919> <5919> -<591A> <591A> -<591C> <591C> -<5922> <5922> -<5927> <5927> -<5929> <5929> -<592A> <592A> -<592B> <592B> -<592D> <592D> -<592E> <592E> -<5931> <5931> -<5937> <5937> -<593E> <593E> -<5944> <5944> -<5947> <5947> -<5948> <5948> -<5949> <5949> -<594E> <594E> -<594F> <594F> -<5950> <5950> -<5951> <5951> -<5954> <5954> -<5955> <5955> -<5957> <5957> -<595A> <595A> -<5960> <5960> -<5962> <5962> -<5967> <5967> -<596A> <596A> -<596B> <596B> -<596C> <596C> -<596D> <596D> -<596E> <596E> -<5973> <5973> -<5974> <5974> -<5978> <5978> -<597D> <597D> -<5982> <5982> -<5983> <5983> -<5984> <5984> -<598A> <598A> -<5993> <5993> -<5996> <5996> -<5997> <5997> -<5999> <5999> -<59A5> <59A5> -<59A8> <59A8> -<59AC> <59AC> -<59B9> <59B9> -<59BB> <59BB> -<59BE> <59BE> -<59C3> <59C3> -<59C6> <59C6> -<59C9> <59C9> -<59CB> <59CB> -<59D0> <59D0> -<59D1> <59D1> -<59D3> <59D3> -<59D4> <59D4> -<59D9> <59D9> -<59DA> <59DA> -<59DC> <59DC> -<59DD> <59DD> -<59E6> <59E6> -<59E8> <59E8> -<59EA> <59EA> -<59EC> <59EC> -<59EE> <59EE> -<59F8> <59F8> -<59FB> <59FB> -<59FF> <59FF> -<5A01> <5A01> -<5A03> <5A03> -endbfrange - -100 beginbfrange -<5A11> <5A11> -<5A18> <5A18> -<5A1B> <5A1B> -<5A1C> <5A1C> -<5A1F> <5A1F> -<5A20> <5A20> -<5A25> <5A25> -<5A29> <5A29> -<5A36> <5A36> -<5A3C> <5A3C> -<5A41> <5A41> -<5A46> <5A46> -<5A49> <5A49> -<5A5A> <5A5A> -<5A62> <5A62> -<5A66> <5A66> -<5A92> <5A92> -<5A9A> <5A9A> -<5A9B> <5A9B> -<5AA4> <5AA4> -<5AC1> <5AC1> -<5AC2> <5AC2> -<5AC4> <5AC4> -<5AC9> <5AC9> -<5ACC> <5ACC> -<5AE1> <5AE1> -<5AE6> <5AE6> -<5AE9> <5AE9> -<5B05> <5B05> -<5B09> <5B09> -<5B0B> <5B0B> -<5B0C> <5B0C> -<5B16> <5B16> -<5B2A> <5B2A> -<5B40> <5B40> -<5B43> <5B43> -<5B50> <5B50> -<5B51> <5B51> -<5B54> <5B54> -<5B55> <5B55> -<5B57> <5B57> -<5B58> <5B58> -<5B5A> <5B5A> -<5B5C> <5B5C> -<5B5D> <5B5D> -<5B5F> <5B5F> -<5B63> <5B63> -<5B64> <5B64> -<5B69> <5B69> -<5B6B> <5B6B> -<5B70> <5B70> -<5B71> <5B71> -<5B75> <5B75> -<5B78> <5B78> -<5B7A> <5B7A> -<5B7C> <5B7C> -<5B85> <5B85> -<5B87> <5B87> -<5B88> <5B88> -<5B89> <5B89> -<5B8B> <5B8B> -<5B8C> <5B8C> -<5B8F> <5B8F> -<5B93> <5B93> -<5B95> <5B95> -<5B96> <5B96> -<5B97> <5B97> -<5B98> <5B98> -<5B99> <5B99> -<5B9A> <5B9A> -<5B9B> <5B9B> -<5B9C> <5B9C> -<5BA2> <5BA2> -<5BA3> <5BA3> -<5BA4> <5BA4> -<5BA5> <5BA5> -<5BA6> <5BA6> -<5BAC> <5BAC> -<5BAE> <5BAE> -<5BB0> <5BB0> -<5BB3> <5BB3> -<5BB4> <5BB4> -<5BB5> <5BB5> -<5BB6> <5BB6> -<5BB8> <5BB8> -<5BB9> <5BB9> -<5BBF> <5BBF> -<5BC0> <5BC0> -<5BC2> <5BC2> -<5BC3> <5BC3> -<5BC4> <5BC4> -<5BC5> <5BC5> -<5BC6> <5BC6> -<5BC7> <5BC7> -<5BCC> <5BCC> -<5BD0> <5BD0> -<5BD2> <5BD2> -<5BD3> <5BD3> -<5BD4> <5BD4> -<5BD7> <5BD7> -endbfrange - -100 beginbfrange -<5BDE> <5BDE> -<5BDF> <5BDF> -<5BE1> <5BE1> -<5BE2> <5BE2> -<5BE4> <5BE4> -<5BE5> <5BE5> -<5BE6> <5BE6> -<5BE7> <5BE7> -<5BE8> <5BE8> -<5BE9> <5BE9> -<5BEB> <5BEB> -<5BEC> <5BEC> -<5BEE> <5BEE> -<5BEF> <5BEF> -<5BF5> <5BF5> -<5BF6> <5BF6> -<5BF8> <5BF8> -<5BFA> <5BFA> -<5C01> <5C01> -<5C04> <5C04> -<5C07> <5C07> -<5C08> <5C08> -<5C09> <5C09> -<5C0A> <5C0A> -<5C0B> <5C0B> -<5C0D> <5C0D> -<5C0E> <5C0E> -<5C0F> <5C0F> -<5C11> <5C11> -<5C16> <5C16> -<5C19> <5C19> -<5C24> <5C24> -<5C28> <5C28> -<5C31> <5C31> -<5C38> <5C38> -<5C39> <5C39> -<5C3A> <5C3A> -<5C3B> <5C3B> -<5C3C> <5C3C> -<5C3E> <5C3E> -<5C3F> <5C3F> -<5C40> <5C40> -<5C45> <5C45> -<5C46> <5C46> -<5C48> <5C48> -<5C4B> <5C4B> -<5C4D> <5C4D> -<5C4E> <5C4E> -<5C51> <5C51> -<5C55> <5C55> -<5C5B> <5C5B> -<5C60> <5C60> -<5C62> <5C62> -<5C64> <5C64> -<5C65> <5C65> -<5C6C> <5C6C> -<5C6F> <5C6F> -<5C71> <5C71> -<5C79> <5C79> -<5C90> <5C90> -<5C91> <5C91> -<5CA1> <5CA1> -<5CA9> <5CA9> -<5CAB> <5CAB> -<5CAC> <5CAC> -<5CB1> <5CB1> -<5CB3> <5CB3> -<5CB5> <5CB5> -<5CB7> <5CB7> -<5CB8> <5CB8> -<5CBA> <5CBA> -<5CBE> <5CBE> -<5CC0> <5CC0> -<5CD9> <5CD9> -<5CE0> <5CE0> -<5CE8> <5CE8> -<5CEF> <5CF0> -<5CF4> <5CF4> -<5CF6> <5CF6> -<5CFB> <5CFB> -<5CFD> <5CFD> -<5D07> <5D07> -<5D0D> <5D0D> -<5D0E> <5D0E> -<5D11> <5D11> -<5D14> <5D14> -<5D16> <5D16> -<5D17> <5D17> -<5D19> <5D19> -<5D27> <5D27> -<5D29> <5D29> -<5D4B> <5D4B> -<5D4C> <5D4C> -<5D50> <5D50> -<5D69> <5D69> -<5D6C> <5D6C> -<5D6F> <5D6F> -<5D87> <5D87> -<5D8B> <5D8B> -<5D9D> <5D9D> -endbfrange - -100 beginbfrange -<5DA0> <5DA0> -<5DA2> <5DA2> -<5DAA> <5DAA> -<5DB8> <5DB8> -<5DBA> <5DBA> -<5DBC> <5DBC> -<5DBD> <5DBD> -<5DCD> <5DCD> -<5DD2> <5DD2> -<5DD6> <5DD6> -<5DDD> <5DDD> -<5DDE> <5DDE> -<5DE1> <5DE1> -<5DE2> <5DE2> -<5DE5> <5DE5> -<5DE6> <5DE6> -<5DE7> <5DE7> -<5DE8> <5DE8> -<5DEB> <5DEB> -<5DEE> <5DEE> -<5DF1> <5DF1> -<5DF2> <5DF2> -<5DF3> <5DF3> -<5DF4> <5DF4> -<5DF7> <5DF7> -<5DFD> <5DFD> -<5DFE> <5DFE> -<5E02> <5E02> -<5E03> <5E03> -<5E06> <5E06> -<5E0C> <5E0C> -<5E11> <5E11> -<5E16> <5E16> -<5E19> <5E19> -<5E1B> <5E1B> -<5E1D> <5E1D> -<5E25> <5E25> -<5E2B> <5E2B> -<5E2D> <5E2D> -<5E33> <5E33> -<5E36> <5E36> -<5E38> <5E38> -<5E3D> <5E3D> -<5E3F> <5E3F> -<5E40> <5E40> -<5E44> <5E44> -<5E45> <5E45> -<5E47> <5E47> -<5E4C> <5E4C> -<5E55> <5E55> -<5E5F> <5E5F> -<5E61> <5E61> -<5E62> <5E62> -<5E63> <5E63> -<5E72> <5E72> -<5E73> <5E73> -<5E74> <5E74> -<5E77> <5E77> -<5E78> <5E78> -<5E79> <5E79> -<5E7B> <5E7B> -<5E7C> <5E7D> -<5E7E> <5E7E> -<5E84> <5E84> -<5E87> <5E87> -<5E8A> <5E8A> -<5E8F> <5E8F> -<5E95> <5E95> -<5E97> <5E97> -<5E9A> <5E9A> -<5E9C> <5E9C> -<5EA0> <5EA0> -<5EA6> <5EA6> -<5EA7> <5EA7> -<5EAB> <5EAB> -<5EAD> <5EAD> -<5EB5> <5EB5> -<5EB6> <5EB6> -<5EB7> <5EB7> -<5EB8> <5EB8> -<5EBE> <5EBE> -<5EC2> <5EC2> -<5EC8> <5EC8> -<5EC9> <5EC9> -<5ECA> <5ECA> -<5ED0> <5ED0> -<5ED3> <5ED3> -<5ED6> <5ED6> -<5EDA> <5EDA> -<5EDB> <5EDB> -<5EDF> <5EDF> -<5EE0> <5EE0> -<5EE2> <5EE2> -<5EE3> <5EE3> -<5EEC> <5EEC> -<5EF3> <5EF3> -<5EF6> <5EF6> -<5EF7> <5EF7> -<5EFA> <5EFA> -<5EFB> <5EFB> -endbfrange - -100 beginbfrange -<5F01> <5F01> -<5F04> <5F04> -<5F0A> <5F0A> -<5F0F> <5F0F> -<5F11> <5F11> -<5F13> <5F13> -<5F14> <5F14> -<5F15> <5F15> -<5F17> <5F17> -<5F18> <5F18> -<5F1B> <5F1B> -<5F1F> <5F1F> -<5F26> <5F26> -<5F27> <5F27> -<5F29> <5F29> -<5F31> <5F31> -<5F35> <5F35> -<5F3A> <5F3A> -<5F3C> <5F3C> -<5F48> <5F48> -<5F4A> <5F4A> -<5F4C> <5F4C> -<5F4E> <5F4E> -<5F56> <5F56> -<5F57> <5F57> -<5F59> <5F59> -<5F5B> <5F5B> -<5F62> <5F62> -<5F66> <5F66> -<5F67> <5F67> -<5F69> <5F69> -<5F6A> <5F6A> -<5F6B> <5F6B> -<5F6C> <5F6C> -<5F6D> <5F6D> -<5F70> <5F70> -<5F71> <5F71> -<5F77> <5F77> -<5F79> <5F79> -<5F7C> <5F7C> -<5F7F> <5F7F> -<5F80> <5F80> -<5F81> <5F81> -<5F85> <5F85> -<5F87> <5F87> -<5F8A> <5F8A> -<5F8B> <5F8B> -<5F8C> <5F8C> -<5F90> <5F90> -<5F91> <5F91> -<5F92> <5F92> -<5F97> <5F97> -<5F98> <5F98> -<5F99> <5F99> -<5F9E> <5F9E> -<5FA0> <5FA0> -<5FA1> <5FA1> -<5FA8> <5FA8> -<5FA9> <5FA9> -<5FAA> <5FAA> -<5FAE> <5FAE> -<5FB5> <5FB5> -<5FB7> <5FB7> -<5FB9> <5FB9> -<5FBD> <5FBD> -<5FC3> <5FC3> -<5FC5> <5FC5> -<5FCC> <5FCC> -<5FCD> <5FCD> -<5FD6> <5FD6> -<5FD7> <5FD7> -<5FD8> <5FD9> -<5FE0> <5FE0> -<5FEB> <5FEB> -<5FF5> <5FF5> -<5FFD> <5FFD> -<5FFF> <5FFF> -<600F> <600F> -<6012> <6012> -<6016> <6016> -<601C> <601C> -<601D> <601D> -<6020> <6020> -<6021> <6021> -<6025> <6025> -<6027> <6027> -<6028> <6028> -<602A> <602A> -<602F> <602F> -<6041> <6041> -<6042> <6042> -<6043> <6043> -<604D> <604D> -<6050> <6050> -<6052> <6052> -<6055> <6055> -<6059> <6059> -<605D> <605D> -<6062> <6062> -<6063> <6063> -endbfrange - -100 beginbfrange -<6064> <6064> -<6065> <6065> -<6068> <6068> -<6069> <6069> -<606A> <606A> -<606C> <606C> -<606D> <606D> -<606F> <606F> -<6070> <6070> -<6085> <6085> -<6089> <6089> -<608C> <608C> -<608D> <608D> -<6094> <6094> -<6096> <6096> -<609A> <609A> -<609B> <609B> -<609F> <609F> -<60A0> <60A0> -<60A3> <60A3> -<60A4> <60A4> -<60A7> <60A7> -<60B0> <60B0> -<60B2> <60B2> -<60B3> <60B3> -<60B4> <60B4> -<60B6> <60B6> -<60B8> <60B8> -<60BC> <60BC> -<60BD> <60BD> -<60C5> <60C5> -<60C7> <60C7> -<60D1> <60D1> -<60DA> <60DA> -<60DC> <60DC> -<60DF> <60DF> -<60E0> <60E0> -<60E1> <60E1> -<60F0> <60F0> -<60F1> <60F1> -<60F3> <60F3> -<60F6> <60F6> -<60F9> <60F9> -<60FA> <60FA> -<60FB> <60FB> -<6101> <6101> -<6106> <6106> -<6108> <6109> -<610D> <610D> -<610E> <610E> -<610F> <610F> -<6115> <6115> -<611A> <611A> -<611B> <611B> -<611F> <611F> -<6127> <6127> -<6130> <6130> -<6134> <6134> -<6137> <6137> -<613C> <613C> -<613E> <613E> -<613F> <613F> -<6142> <6142> -<6144> <6144> -<6147> <6147> -<6148> <6148> -<614A> <614A> -<614B> <614B> -<614C> <614C> -<6153> <6153> -<6155> <6155> -<6158> <6159> -<615D> <615D> -<615F> <615F> -<6162> <6162> -<6163> <6163> -<6164> <6164> -<6167> <6167> -<6168> <6168> -<616B> <616B> -<616E> <616E> -<6170> <6170> -<6176> <6176> -<6177> <6177> -<617D> <617D> -<617E> <617E> -<6181> <6181> -<6182> <6182> -<618A> <618A> -<618E> <618E> -<6190> <6190> -<6191> <6191> -<6194> <6194> -<6198> <6198> -<6199> <6199> -<619A> <619A> -<61A4> <61A4> -<61A7> <61A7> -<61A9> <61A9> -<61AB> <61AB> -endbfrange - -100 beginbfrange -<61AC> <61AC> -<61AE> <61AE> -<61B2> <61B2> -<61B6> <61B6> -<61BA> <61BA> -<61BE> <61BE> -<61C3> <61C3> -<61C7> <61C7> -<61C8> <61C8> -<61C9> <61C9> -<61CA> <61CA> -<61CB> <61CB> -<61E6> <61E6> -<61F2> <61F2> -<61F6> <61F6> -<61F7> <61F7> -<61F8> <61F8> -<61FA> <61FA> -<61FC> <61FC> -<61FF> <61FF> -<6200> <6200> -<6207> <6207> -<6208> <6208> -<620A> <620A> -<620C> <620C> -<620D> <620D> -<620E> <620E> -<6210> <6210> -<6211> <6211> -<6212> <6212> -<6216> <6216> -<621A> <621A> -<621F> <621F> -<6221> <6221> -<622A> <622A> -<622E> <622E> -<6230> <6230> -<6231> <6231> -<6234> <6234> -<6236> <6236> -<623E> <623E> -<623F> <623F> -<6240> <6240> -<6241> <6241> -<6247> <6247> -<6248> <6248> -<6249> <6249> -<624B> <624B> -<624D> <624D> -<6253> <6253> -<6258> <6258> -<626E> <626E> -<6271> <6271> -<6276> <6276> -<6279> <6279> -<627C> <627C> -<627F> <627F> -<6280> <6280> -<6284> <6284> -<6289> <6289> -<628A> <628A> -<6291> <6291> -<6292> <6292> -<6295> <6295> -<6297> <6297> -<6298> <6298> -<629B> <629B> -<62AB> <62AB> -<62B1> <62B1> -<62B5> <62B5> -<62B9> <62B9> -<62BC> <62BC> -<62BD> <62BD> -<62C2> <62C2> -<62C7> <62C7> -<62C8> <62C8> -<62C9> <62C9> -<62CC> <62CC> -<62CD> <62CD> -<62CF> <62CF> -<62D0> <62D0> -<62D2> <62D2> -<62D3> <62D3> -<62D4> <62D4> -<62D6> <62D6> -<62D7> <62D7> -<62D8> <62D8> -<62D9> <62D9> -<62DB> <62DB> -<62DC> <62DC> -<62EC> <62EC> -<62ED> <62ED> -<62EE> <62EE> -<62EF> <62EF> -<62F1> <62F1> -<62F3> <62F3> -<62F7> <62F7> -<62FE> <62FE> -<62FF> <62FF> -<6301> <6301> -endbfrange - -100 beginbfrange -<6307> <6307> -<6309> <6309> -<6311> <6311> -<632B> <632B> -<632F> <632F> -<633A> <633A> -<633B> <633B> -<633D> <633D> -<633E> <633E> -<6349> <6349> -<634C> <634C> -<634F> <634F> -<6350> <6350> -<6355> <6355> -<6367> <6367> -<6368> <6368> -<636E> <636E> -<6372> <6372> -<6377> <6377> -<637A> <637A> -<637B> <637B> -<637F> <637F> -<6383> <6383> -<6388> <6388> -<6389> <6389> -<638C> <638C> -<6392> <6392> -<6396> <6396> -<6398> <6398> -<639B> <639B> -<63A0> <63A0> -<63A1> <63A1> -<63A2> <63A2> -<63A5> <63A5> -<63A7> <63A7> -<63A8> <63A8> -<63A9> <63A9> -<63AA> <63AA> -<63C0> <63C0> -<63C4> <63C4> -<63C6> <63C6> -<63CF> <63CF> -<63D0> <63D0> -<63D6> <63D6> -<63DA> <63DA> -<63DB> <63DB> -<63E1> <63E1> -<63ED> <63ED> -<63EE> <63EE> -<63F4> <63F4> -<63F6> <63F6> -<63F7> <63F7> -<640D> <640D> -<640F> <640F> -<6414> <6414> -<6416> <6416> -<6417> <6417> -<641C> <641C> -<6422> <6422> -<642C> <642C> -<642D> <642D> -<643A> <643A> -<643E> <643E> -<6458> <6458> -<6460> <6460> -<6469> <6469> -<646F> <646F> -<6478> <6479> -<647A> <647A> -<6488> <6488> -<6491> <6491> -<6492> <6492> -<6493> <6493> -<649A> <649A> -<649E> <649E> -<64A4> <64A4> -<64A5> <64A5> -<64AB> <64AB> -<64AD> <64AD> -<64AE> <64AE> -<64B0> <64B0> -<64B2> <64B2> -<64BB> <64BB> -<64C1> <64C1> -<64C4> <64C4> -<64C5> <64C5> -<64C7> <64C7> -<64CA> <64CA> -<64CD> <64CD> -<64CE> <64CE> -<64D2> <64D2> -<64D4> <64D4> -<64D8> <64D8> -<64DA> <64DA> -<64E1> <64E1> -<64E2> <64E2> -<64E5> <64E5> -<64E6> <64E6> -<64E7> <64E7> -<64EC> <64EC> -endbfrange - -100 beginbfrange -<64F2> <64F2> -<64F4> <64F4> -<64FA> <64FA> -<64FE> <64FE> -<6500> <6500> -<6504> <6504> -<6518> <6518> -<651D> <651D> -<6523> <6523> -<652A> <652A> -<652B> <652B> -<652C> <652C> -<652F> <652F> -<6536> <6536> -<6537> <6537> -<6538> <6538> -<6539> <6539> -<653B> <653B> -<653E> <653E> -<653F> <653F> -<6545> <6545> -<6548> <6548> -<654D> <654D> -<654E> <654E> -<654F> <654F> -<6551> <6551> -<6556> <6556> -<6557> <6557> -<655E> <655E> -<6562> <6562> -<6563> <6563> -<6566> <6566> -<656C> <656C> -<656D> <656D> -<6572> <6572> -<6574> <6574> -<6575> <6575> -<6577> <6577> -<6578> <6578> -<657E> <657E> -<6582> <6582> -<6583> <6583> -<6585> <6585> -<6587> <6587> -<658C> <658C> -<6590> <6590> -<6591> <6591> -<6597> <6597> -<6599> <6599> -<659B> <659B> -<659C> <659C> -<659F> <659F> -<65A1> <65A1> -<65A4> <65A4> -<65A5> <65A5> -<65A7> <65A7> -<65AB> <65AB> -<65AC> <65AC> -<65AF> <65AF> -<65B0> <65B0> -<65B7> <65B7> -<65B9> <65B9> -<65BC> <65BC> -<65BD> <65BD> -<65C1> <65C1> -<65C5> <65C5> -<65CB> <65CB> -<65CC> <65CC> -<65CF> <65CF> -<65D2> <65D2> -<65D7> <65D7> -<65E0> <65E0> -<65E3> <65E3> -<65E5> <65E5> -<65E6> <65E6> -<65E8> <65E8> -<65E9> <65E9> -<65EC> <65EC> -<65ED> <65ED> -<65F1> <65F1> -<65F4> <65F4> -<65FA> <65FA> -<65FB> <65FC> -<65FD> <65FD> -<65FF> <65FF> -<6606> <6606> -<6607> <6607> -<6609> <6609> -<660A> <660A> -<660C> <660C> -<660E> <660E> -<660F> <660F> -<6610> <6610> -<6611> <6611> -<6613> <6613> -<6614> <6614> -<6615> <6615> -<661E> <661E> -<661F> <661F> -<6620> <6620> -endbfrange - -100 beginbfrange -<6625> <6625> -<6627> <6627> -<6628> <6628> -<662D> <662D> -<662F> <662F> -<6630> <6630> -<6631> <6631> -<6634> <6634> -<6636> <6636> -<663A> <663A> -<663B> <663B> -<6641> <6641> -<6642> <6642> -<6643> <6644> -<6649> <6649> -<664B> <664B> -<664F> <664F> -<6659> <6659> -<665B> <665B> -<665D> <665D> -<665E> <665E> -<665F> <665F> -<6664> <6664> -<6665> <6665> -<6666> <6666> -<6667> <6667> -<6668> <6668> -<6669> <6669> -<666B> <666B> -<666E> <666E> -<666F> <666F> -<6673> <6673> -<6674> <6674> -<6676> <6676> -<6677> <6677> -<6678> <6678> -<667A> <667A> -<6684> <6684> -<6687> <6687> -<6688> <6688> -<6689> <6689> -<668E> <668E> -<6690> <6690> -<6691> <6691> -<6696> <6696> -<6697> <6697> -<6698> <6698> -<669D> <669D> -<66A0> <66A0> -<66A2> <66A2> -<66AB> <66AB> -<66AE> <66AE> -<66B2> <66B2> -<66B3> <66B3> -<66B4> <66B4> -<66B9> <66B9> -<66BB> <66BB> -<66BE> <66BE> -<66C4> <66C4> -<66C6> <66C6> -<66C7> <66C7> -<66C9> <66C9> -<66D6> <66D6> -<66D9> <66D9> -<66DC> <66DC> -<66DD> <66DD> -<66E0> <66E0> -<66E6> <66E6> -<66F0> <66F0> -<66F2> <66F2> -<66F3> <66F3> -<66F4> <66F4> -<66F7> <66F7> -<66F8> <66F8> -<66F9> <66F9> -<66FA> <66FA> -<66FC> <66FC> -<66FE> <66FE> -<66FF> <66FF> -<6700> <6700> -<6703> <6703> -<6708> <6708> -<6709> <6709> -<670B> <670B> -<670D> <670D> -<6714> <6714> -<6715> <6715> -<6717> <6717> -<671B> <671B> -<671D> <671D> -<671E> <671F> -<6726> <6726> -<6727> <6727> -<6728> <6728> -<672A> <672A> -<672B> <672B> -<672C> <672C> -<672D> <672D> -<672E> <672E> -<6731> <6731> -endbfrange - -100 beginbfrange -<6734> <6734> -<6736> <6736> -<673A> <673A> -<673D> <673D> -<6746> <6746> -<6749> <6749> -<674E> <674E> -<674F> <674F> -<6750> <6750> -<6751> <6751> -<6753> <6753> -<6756> <6756> -<675C> <675C> -<675E> <675E> -<675F> <675F> -<676D> <676D> -<676F> <676F> -<6770> <6770> -<6771> <6771> -<6773> <6773> -<6775> <6775> -<6777> <6777> -<677B> <677B> -<677E> <677E> -<677F> <677F> -<6787> <6787> -<6789> <6789> -<678B> <678B> -<678F> <678F> -<6790> <6790> -<6793> <6793> -<6795> <6795> -<6797> <6797> -<679A> <679A> -<679C> <679C> -<679D> <679D> -<67AF> <67AF> -<67B0> <67B0> -<67B3> <67B3> -<67B6> <67B7> -<67B8> <67B8> -<67BE> <67BE> -<67C4> <67C4> -<67CF> <67CF> -<67D0> <67D0> -<67D1> <67D1> -<67D2> <67D2> -<67D3> <67D3> -<67D4> <67D4> -<67DA> <67DA> -<67DD> <67DD> -<67E9> <67E9> -<67EC> <67EC> -<67EF> <67EF> -<67F0> <67F0> -<67F1> <67F1> -<67F3> <67F3> -<67F4> <67F4> -<67F5> <67F5> -<67F6> <67F6> -<67FB> <67FB> -<67FE> <67FE> -<6812> <6812> -<6813> <6813> -<6816> <6816> -<6817> <6817> -<6821> <6821> -<6822> <6822> -<682A> <682A> -<682F> <682F> -<6838> <6838> -<6839> <6839> -<683C> <683C> -<683D> <683D> -<6840> <6840> -<6841> <6841> -<6842> <6842> -<6843> <6843> -<6848> <6848> -<684E> <684E> -<6850> <6850> -<6851> <6851> -<6853> <6853> -<6854> <6854> -<686D> <686D> -<6876> <6876> -<687F> <687F> -<6881> <6881> -<6885> <6885> -<688F> <688F> -<6893> <6893> -<6894> <6894> -<6897> <6897> -<689D> <689D> -<689F> <689F> -<68A1> <68A1> -<68A2> <68A2> -<68A7> <68A7> -<68A8> <68A8> -<68AD> <68AD> -endbfrange - -100 beginbfrange -<68AF> <68AF> -<68B0> <68B0> -<68B1> <68B1> -<68B3> <68B3> -<68B5> <68B5> -<68B6> <68B6> -<68C4> <68C4> -<68C5> <68C5> -<68C9> <68C9> -<68CB> <68CB> -<68CD> <68CD> -<68D2> <68D2> -<68D5> <68D5> -<68D7> <68D7> -<68D8> <68D8> -<68DA> <68DA> -<68DF> <68DF> -<68E0> <68E0> -<68E7> <68E7> -<68E8> <68E8> -<68EE> <68EE> -<68F2> <68F2> -<68F9> <68F9> -<68FA> <68FA> -<6900> <6900> -<6905> <6905> -<690D> <690D> -<690E> <690E> -<6912> <6912> -<6927> <6927> -<6930> <6930> -<693D> <693D> -<693F> <693F> -<694A> <694A> -<6953> <6953> -<6954> <6954> -<6955> <6955> -<6957> <6957> -<6959> <6959> -<695A> <695A> -<695E> <695E> -<6960> <6960> -<6961> <6962> -<6963> <6963> -<6968> <6968> -<696B> <696B> -<696D> <696D> -<696E> <696E> -<696F> <696F> -<6975> <6975> -<6977> <6977> -<6978> <6978> -<6979> <6979> -<6995> <6995> -<699B> <699B> -<699C> <699C> -<69A5> <69A5> -<69A7> <69A7> -<69AE> <69AE> -<69B4> <69B4> -<69BB> <69BB> -<69C1> <69C1> -<69C3> <69C3> -<69CB> <69CB> -<69CC> <69CC> -<69CD> <69CD> -<69D0> <69D0> -<69E8> <69E8> -<69EA> <69EA> -<69FB> <69FB> -<69FD> <69FD> -<69FF> <69FF> -<6A02> <6A02> -<6A0A> <6A0A> -<6A11> <6A11> -<6A13> <6A13> -<6A17> <6A17> -<6A19> <6A19> -<6A1E> <6A1E> -<6A1F> <6A1F> -<6A21> <6A21> -<6A23> <6A23> -<6A35> <6A35> -<6A38> <6A38> -<6A39> <6A39> -<6A3A> <6A3A> -<6A3D> <6A3D> -<6A44> <6A44> -<6A48> <6A48> -<6A4B> <6A4B> -<6A52> <6A52> -<6A53> <6A53> -<6A58> <6A58> -<6A59> <6A59> -<6A5F> <6A5F> -<6A61> <6A61> -<6A6B> <6A6B> -<6A80> <6A80> -<6A84> <6A84> -<6A89> <6A89> -endbfrange - -100 beginbfrange -<6A8D> <6A8D> -<6A8E> <6A8E> -<6A97> <6A97> -<6A9C> <6A9C> -<6AA2> <6AA2> -<6AA3> <6AA3> -<6AB3> <6AB3> -<6ABB> <6ABB> -<6AC2> <6AC2> -<6AC3> <6AC3> -<6AD3> <6AD3> -<6ADA> <6ADA> -<6ADB> <6ADB> -<6AF6> <6AF6> -<6AFB> <6AFB> -<6B04> <6B04> -<6B0A> <6B0A> -<6B0C> <6B0C> -<6B12> <6B12> -<6B16> <6B16> -<6B20> <6B20> -<6B21> <6B21> -<6B23> <6B23> -<6B32> <6B32> -<6B3A> <6B3A> -<6B3D> <6B3D> -<6B3E> <6B3E> -<6B46> <6B46> -<6B47> <6B47> -<6B4C> <6B4C> -<6B4E> <6B4E> -<6B50> <6B50> -<6B5F> <6B5F> -<6B61> <6B61> -<6B62> <6B62> -<6B63> <6B63> -<6B64> <6B64> -<6B65> <6B65> -<6B66> <6B66> -<6B6A> <6B6A> -<6B72> <6B72> -<6B77> <6B77> -<6B78> <6B78> -<6B7B> <6B7B> -<6B7F> <6B7F> -<6B83> <6B83> -<6B84> <6B84> -<6B86> <6B86> -<6B89> <6B89> -<6B8A> <6B8A> -<6B96> <6B96> -<6B98> <6B98> -<6B9E> <6B9E> -<6BAE> <6BAE> -<6BAF> <6BAF> -<6BB2> <6BB2> -<6BB5> <6BB5> -<6BB7> <6BB7> -<6BBA> <6BBA> -<6BBC> <6BBC> -<6BBF> <6BBF> -<6BC1> <6BC1> -<6BC5> <6BC5> -<6BC6> <6BC6> -<6BCB> <6BCB> -<6BCD> <6BCD> -<6BCF> <6BCF> -<6BD2> <6BD2> -<6BD3> <6BD3> -<6BD4> <6BD4> -<6BD6> <6BD8> -<6BDB> <6BDB> -<6BEB> <6BEB> -<6BEC> <6BEC> -<6C08> <6C08> -<6C0F> <6C0F> -<6C11> <6C11> -<6C13> <6C13> -<6C23> <6C23> -<6C34> <6C34> -<6C37> <6C37> -<6C38> <6C38> -<6C3E> <6C3E> -<6C40> <6C40> -<6C41> <6C41> -<6C42> <6C42> -<6C4E> <6C4E> -<6C50> <6C50> -<6C55> <6C55> -<6C57> <6C57> -<6C5A> <6C5A> -<6C5D> <6C5D> -<6C5E> <6C5E> -<6C5F> <6C5F> -<6C60> <6C60> -<6C68> <6C68> -<6C6A> <6C6A> -<6C6D> <6C6D> -<6C70> <6C70> -<6C72> <6C72> -endbfrange - -100 beginbfrange -<6C76> <6C76> -<6C7A> <6C7A> -<6C7D> <6C7D> -<6C7E> <6C7E> -<6C81> <6C81> -<6C82> <6C82> -<6C83> <6C83> -<6C85> <6C85> -<6C86> <6C86> -<6C87> <6C87> -<6C88> <6C88> -<6C8C> <6C8C> -<6C90> <6C90> -<6C92> <6C92> -<6C93> <6C93> -<6C94> <6C94> -<6C95> <6C95> -<6C96> <6C96> -<6C99> <6C99> -<6C9A> <6C9A> -<6C9B> <6C9B> -<6CAB> <6CAB> -<6CAE> <6CAE> -<6CB3> <6CB3> -<6CB8> <6CB8> -<6CB9> <6CB9> -<6CBB> <6CBB> -<6CBC> <6CBC> -<6CBD> <6CBD> -<6CBE> <6CBE> -<6CBF> <6CBF> -<6CC1> <6CC1> -<6CC2> <6CC2> -<6CC4> <6CC4> -<6CC9> <6CC9> -<6CCA> <6CCA> -<6CCC> <6CCC> -<6CD3> <6CD3> -<6CD5> <6CD5> -<6CD7> <6CD7> -<6CDB> <6CDB> -<6CE1> <6CE1> -<6CE2> <6CE2> -<6CE3> <6CE3> -<6CE5> <6CE5> -<6CE8> <6CE8> -<6CEB> <6CEB> -<6CEE> <6CEE> -<6CEF> <6CEF> -<6CF0> <6CF0> -<6CF3> <6CF3> -<6D0B> <6D0B> -<6D0C> <6D0C> -<6D11> <6D11> -<6D17> <6D17> -<6D19> <6D19> -<6D1B> <6D1B> -<6D1E> <6D1E> -<6D25> <6D25> -<6D27> <6D27> -<6D29> <6D29> -<6D2A> <6D2A> -<6D32> <6D32> -<6D35> <6D35> -<6D36> <6D36> -<6D38> <6D38> -<6D39> <6D39> -<6D3B> <6D3B> -<6D3D> <6D3D> -<6D3E> <6D3E> -<6D41> <6D41> -<6D59> <6D59> -<6D5A> <6D5A> -<6D5C> <6D5C> -<6D63> <6D63> -<6D66> <6D66> -<6D69> <6D69> -<6D6A> <6D6A> -<6D6C> <6D6C> -<6D6E> <6D6E> -<6D74> <6D74> -<6D77> <6D77> -<6D78> <6D78> -<6D79> <6D79> -<6D7F> <6D7F> -<6D85> <6D85> -<6D87> <6D87> -<6D88> <6D88> -<6D89> <6D89> -<6D8C> <6D8C> -<6D8D> <6D8D> -<6D8E> <6D8E> -<6D91> <6D91> -<6D93> <6D93> -<6D95> <6D95> -<6DAF> <6DAF> -<6DB2> <6DB2> -<6DB5> <6DB5> -<6DC0> <6DC0> -<6DC3> <6DC3> -endbfrange - -100 beginbfrange -<6DC4> <6DC4> -<6DC5> <6DC5> -<6DC6> <6DC6> -<6DC7> <6DC7> -<6DCB> <6DCB> -<6DCF> <6DCF> -<6DD1> <6DD1> -<6DD8> <6DD8> -<6DD9> <6DD9> -<6DDA> <6DDA> -<6DDE> <6DDE> -<6DE1> <6DE1> -<6DE8> <6DE8> -<6DEA> <6DEA> -<6DEB> <6DEB> -<6DEE> <6DEE> -<6DF1> <6DF1> -<6DF3> <6DF3> -<6DF5> <6DF5> -<6DF7> <6DF7> -<6DF8> <6DF8> -<6DF9> <6DF9> -<6DFA> <6DFA> -<6DFB> <6DFB> -<6E17> <6E17> -<6E19> <6E19> -<6E1A> <6E1A> -<6E1B> <6E1B> -<6E1F> <6E1F> -<6E20> <6E20> -<6E21> <6E21> -<6E23> <6E23> -<6E24> <6E24> -<6E25> <6E25> -<6E26> <6E26> -<6E2B> <6E2B> -<6E2C> <6E2C> -<6E2D> <6E2D> -<6E2F> <6E2F> -<6E32> <6E32> -<6E34> <6E34> -<6E36> <6E36> -<6E38> <6E38> -<6E3A> <6E3A> -<6E3C> <6E3C> -<6E3D> <6E3D> -<6E3E> <6E3E> -<6E43> <6E43> -<6E44> <6E44> -<6E4A> <6E4A> -<6E4D> <6E4D> -<6E56> <6E56> -<6E58> <6E58> -<6E5B> <6E5B> -<6E5C> <6E5C> -<6E5E> <6E5E> -<6E5F> <6E5F> -<6E67> <6E67> -<6E6B> <6E6B> -<6E6E> <6E6E> -<6E6F> <6E6F> -<6E72> <6E72> -<6E73> <6E73> -<6E7A> <6E7A> -<6E90> <6E90> -<6E96> <6E96> -<6E9C> <6E9C> -<6E9D> <6E9D> -<6E9F> <6E9F> -<6EA2> <6EA2> -<6EA5> <6EA5> -<6EAA> <6EAA> -<6EAB> <6EAB> -<6EAF> <6EAF> -<6EB1> <6EB1> -<6EB6> <6EB6> -<6EBA> <6EBA> -<6EC2> <6EC2> -<6EC4> <6EC4> -<6EC5> <6EC5> -<6EC9> <6EC9> -<6ECB> <6ECB> -<6ECC> <6ECC> -<6ECE> <6ECE> -<6ED1> <6ED1> -<6ED3> <6ED3> -<6ED4> <6ED4> -<6EEF> <6EEF> -<6EF4> <6EF4> -<6EF8> <6EF8> -<6EFE> <6EFE> -<6EFF> <6EFF> -<6F01> <6F01> -<6F02> <6F02> -<6F06> <6F06> -<6F0F> <6F0F> -<6F11> <6F11> -<6F14> <6F14> -<6F15> <6F15> -<6F20> <6F20> -endbfrange - -100 beginbfrange -<6F22> <6F22> -<6F23> <6F23> -<6F2B> <6F2B> -<6F2C> <6F2C> -<6F31> <6F31> -<6F32> <6F32> -<6F38> <6F38> -<6F3F> <6F3F> -<6F41> <6F41> -<6F51> <6F51> -<6F54> <6F54> -<6F57> <6F57> -<6F58> <6F58> -<6F5A> <6F5A> -<6F5B> <6F5B> -<6F5E> <6F5E> -<6F5F> <6F5F> -<6F62> <6F62> -<6F64> <6F64> -<6F6D> <6F6D> -<6F6E> <6F6E> -<6F70> <6F70> -<6F7A> <6F7A> -<6F7C> <6F7C> -<6F7D> <6F7D> -<6F7E> <6F7E> -<6F81> <6F81> -<6F84> <6F84> -<6F88> <6F88> -<6F8D> <6F8D> -<6F8E> <6F8E> -<6F90> <6F90> -<6F94> <6F94> -<6F97> <6F97> -<6FA3> <6FA3> -<6FA4> <6FA4> -<6FA7> <6FA7> -<6FAE> <6FAE> -<6FAF> <6FAF> -<6FB1> <6FB1> -<6FB3> <6FB3> -<6FB9> <6FB9> -<6FBE> <6FBE> -<6FC0> <6FC0> -<6FC1> <6FC1> -<6FC2> <6FC2> -<6FC3> <6FC3> -<6FCA> <6FCA> -<6FD5> <6FD5> -<6FDA> <6FDA> -<6FDF> <6FDF> -<6FE0> <6FE0> -<6FE1> <6FE1> -<6FE4> <6FE4> -<6FE9> <6FE9> -<6FEB> <6FEB> -<6FEC> <6FEC> -<6FEF> <6FEF> -<6FF1> <6FF1> -<6FFE> <6FFE> -<7001> <7001> -<7005> <7005> -<7006> <7006> -<7009> <7009> -<700B> <700B> -<700F> <700F> -<7011> <7011> -<7015> <7015> -<7018> <7018> -<701A> <701A> -<701B> <701B> -<701C> <701C> -<701D> <701D> -<701E> <701E> -<701F> <701F> -<7023> <7023> -<7027> <7027> -<7028> <7028> -<702F> <702F> -<7037> <7037> -<703E> <703E> -<704C> <704C> -<7050> <7050> -<7051> <7051> -<7058> <7058> -<705D> <705D> -<7063> <7063> -<706B> <706B> -<7070> <7070> -<7078> <7078> -<707C> <707C> -<707D> <707D> -<7085> <7085> -<708A> <708A> -<708E> <708E> -<7092> <7092> -<7098> <7098> -<7099> <7099> -<709A> <709A> -<70A1> <70A1> -endbfrange - -100 beginbfrange -<70A4> <70A4> -<70AB> <70AB> -<70AC> <70AC> -<70AD> <70AD> -<70AF> <70AF> -<70B3> <70B3> -<70B7> <70B7> -<70B8> <70B8> -<70B9> <70B9> -<70C8> <70C8> -<70CB> <70CB> -<70CF> <70CF> -<70D8> <70D8> -<70D9> <70D9> -<70DD> <70DD> -<70DF> <70DF> -<70F1> <70F1> -<70F9> <70F9> -<70FD> <70FD> -<7104> <7104> -<7109> <7109> -<710C> <710C> -<7119> <7119> -<711A> <711A> -<711E> <711E> -<7121> <7121> -<7126> <7126> -<7130> <7130> -<7136> <7136> -<7147> <7147> -<7149> <7149> -<714A> <714A> -<714C> <714C> -<714E> <714E> -<7150> <7150> -<7156> <7156> -<7159> <7159> -<715C> <715C> -<715E> <715E> -<7164> <7164> -<7165> <7165> -<7166> <7166> -<7167> <7167> -<7169> <7169> -<716C> <716C> -<716E> <716E> -<717D> <717D> -<7184> <7184> -<7189> <7189> -<718A> <718A> -<718F> <718F> -<7192> <7192> -<7194> <7194> -<7199> <7199> -<719F> <719F> -<71A2> <71A2> -<71AC> <71AC> -<71B1> <71B1> -<71B9> <71BA> -<71BE> <71BE> -<71C1> <71C1> -<71C3> <71C3> -<71C8> <71C8> -<71C9> <71C9> -<71CE> <71CE> -<71D0> <71D0> -<71D2> <71D2> -<71D4> <71D4> -<71D5> <71D5> -<71DF> <71DF> -<71E5> <71E5> -<71E6> <71E6> -<71E7> <71E7> -<71ED> <71ED> -<71EE> <71EE> -<71FB> <71FB> -<71FC> <71FC> -<71FE> <71FE> -<71FF> <71FF> -<7200> <7200> -<7206> <7206> -<7210> <7210> -<721B> <721B> -<722A> <722A> -<722C> <722C> -<722D> <722D> -<7230> <7230> -<7232> <7232> -<7235> <7235> -<7236> <7236> -<723A> <723A> -<723B> <723B> -<723D> <723D> -<723E> <723E> -<7240> <7240> -<7246> <7246> -<7247> <7247> -<7248> <7248> -<724C> <724C> -<7252> <7252> -endbfrange - -100 beginbfrange -<7258> <7258> -<7259> <7259> -<725B> <725B> -<725D> <725D> -<725F> <725F> -<7261> <7261> -<7262> <7262> -<7267> <7267> -<7269> <7269> -<7272> <7272> -<7279> <7279> -<727D> <727D> -<7280> <7280> -<7281> <7281> -<72A2> <72A2> -<72A7> <72A7> -<72AC> <72AC> -<72AF> <72AF> -<72C0> <72C0> -<72C2> <72C2> -<72C4> <72C4> -<72CE> <72CE> -<72D0> <72D0> -<72D7> <72D7> -<72D9> <72D9> -<72E1> <72E1> -<72E9> <72E9> -<72F8> <72F8> -<72F9> <72F9> -<72FC> <72FC> -<72FD> <72FD> -<730A> <730A> -<7316> <7316> -<731B> <731B> -<731C> <731C> -<731D> <731D> -<7325> <7325> -<7329> <7329> -<732A> <732A> -<732B> <732B> -<7336> <7337> -<733E> <733E> -<733F> <733F> -<7344> <7344> -<7345> <7345> -<7350> <7350> -<7352> <7352> -<7357> <7357> -<7368> <7368> -<736A> <736A> -<7370> <7370> -<7372> <7372> -<7375> <7375> -<7378> <7378> -<737A> <737A> -<737B> <737B> -<7384> <7384> -<7386> <7386> -<7387> <7387> -<7389> <7389> -<738B> <738B> -<738E> <738E> -<7394> <7394> -<7396> <7396> -<7397> <7397> -<7398> <7398> -<739F> <739F> -<73A7> <73A7> -<73A9> <73A9> -<73AD> <73AD> -<73B2> <73B2> -<73B3> <73B3> -<73B9> <73B9> -<73C0> <73C0> -<73C2> <73C2> -<73C9> <73C9> -<73CA> <73CA> -<73CC> <73CC> -<73CD> <73CD> -<73CF> <73CF> -<73D6> <73D6> -<73D9> <73D9> -<73DD> <73DD> -<73DE> <73DE> -<73E0> <73E0> -<73E3> <73E3> -<73E4> <73E4> -<73E5> <73E5> -<73E6> <73E6> -<73E9> <73E9> -<73EA> <73EA> -<73ED> <73ED> -<73F7> <73F7> -<73F9> <73F9> -<73FD> <73FD> -<73FE> <73FE> -<7401> <7401> -<7403> <7403> -<7405> <7405> -<7406> <7406> -endbfrange - -100 beginbfrange -<7407> <7407> -<7409> <7409> -<7413> <7413> -<741B> <741B> -<7420> <7420> -<7421> <7421> -<7422> <7422> -<7425> <7425> -<7426> <7426> -<7428> <7428> -<742A> <742A> -<742B> <742B> -<742C> <742C> -<742E> <742E> -<742F> <742F> -<7430> <7430> -<7433> <7433> -<7434> <7434> -<7435> <7435> -<7436> <7436> -<7438> <7438> -<743A> <743A> -<743F> <743F> -<7440> <7440> -<7441> <7441> -<7443> <7443> -<7444> <7444> -<744B> <744B> -<7455> <7455> -<7457> <7457> -<7459> <7459> -<745A> <745A> -<745B> <745B> -<745C> <745C> -<745E> <745E> -<745F> <745F> -<7460> <7460> -<7462> <7462> -<7464> <7464> -<7465> <7465> -<7468> <7468> -<7469> <7469> -<746A> <746A> -<746F> <746F> -<747E> <747E> -<7482> <7482> -<7483> <7483> -<7487> <7487> -<7489> <7489> -<748B> <748B> -<7498> <7498> -<749C> <749C> -<749E> <749E> -<749F> <749F> -<74A1> <74A1> -<74A3> <74A3> -<74A5> <74A5> -<74A7> <74A7> -<74A8> <74A8> -<74AA> <74AA> -<74B0> <74B0> -<74B2> <74B2> -<74B5> <74B5> -<74B9> <74B9> -<74BD> <74BD> -<74BF> <74BF> -<74C6> <74C6> -<74CA> <74CA> -<74CF> <74CF> -<74D4> <74D4> -<74D8> <74D8> -<74DA> <74DA> -<74DC> <74DC> -<74E0> <74E0> -<74E2> <74E2> -<74E3> <74E3> -<74E6> <74E6> -<74EE> <74EE> -<74F7> <74F7> -<7501> <7501> -<7504> <7504> -<7511> <7511> -<7515> <7515> -<7518> <7518> -<751A> <751A> -<751B> <751B> -<751F> <751F> -<7523> <7523> -<7525> <7525> -<7526> <7526> -<7528> <7528> -<752B> <752B> -<752C> <752C> -<7530> <7530> -<7531> <7531> -<7532> <7532> -<7533> <7533> -<7537> <7537> -<7538> <7538> -<753A> <753A> -endbfrange - -100 beginbfrange -<7547> <7547> -<754C> <754C> -<754F> <754F> -<7551> <7551> -<7553> <7553> -<7554> <7554> -<7559> <7559> -<755B> <755B> -<755C> <755C> -<755D> <755D> -<7562> <7562> -<7565> <7565> -<7566> <7566> -<756A> <756A> -<756F> <756F> -<7570> <7570> -<7575> <7575> -<7576> <7576> -<7578> <7578> -<757A> <757A> -<757F> <757F> -<7586> <7586> -<7587> <7587> -<758A> <758A> -<758B> <758B> -<758E> <758E> -<758F> <758F> -<7591> <7591> -<759D> <759D> -<75A5> <75A5> -<75AB> <75AB> -<75B1> <75B1> -<75B2> <75B2> -<75B3> <75B3> -<75B5> <75B5> -<75B8> <75B8> -<75B9> <75B9> -<75BC> <75BC> -<75BD> <75BD> -<75BE> <75BE> -<75C2> <75C2> -<75C5> <75C5> -<75C7> <75C7> -<75CD> <75CD> -<75D2> <75D2> -<75D4> <75D4> -<75D5> <75D5> -<75D8> <75D8> -<75D9> <75D9> -<75DB> <75DB> -<75E2> <75E2> -<75F0> <75F0> -<75F2> <75F2> -<75F4> <75F4> -<75FA> <75FA> -<75FC> <75FC> -<7600> <7600> -<760D> <760D> -<7619> <7619> -<761F> <761F> -<7620> <7620> -<7621> <7621> -<7622> <7622> -<7624> <7624> -<7626> <7626> -<763B> <763B> -<7642> <7642> -<764C> <764C> -<764E> <764E> -<7652> <7652> -<7656> <7656> -<7661> <7661> -<7664> <7664> -<7669> <7669> -<766C> <766C> -<7670> <7670> -<7672> <7672> -<7678> <7678> -<767B> <767B> -<767C> <767C> -<767D> <767E> -<7684> <7684> -<7686> <7686> -<7687> <7687> -<768E> <768E> -<7690> <7690> -<7693> <7693> -<76AE> <76AE> -<76BA> <76BA> -<76BF> <76BF> -<76C2> <76C2> -<76C3> <76C3> -<76C6> <76C6> -<76C8> <76C8> -<76CA> <76CA> -<76D2> <76D2> -<76D6> <76D6> -<76DB> <76DB> -<76DC> <76DC> -<76DE> <76DE> -endbfrange - -100 beginbfrange -<76DF> <76DF> -<76E1> <76E1> -<76E3> <76E3> -<76E4> <76E4> -<76E7> <76E7> -<76EE> <76EE> -<76F2> <76F2> -<76F4> <76F4> -<76F8> <76F8> -<76FC> <76FC> -<76FE> <76FE> -<7701> <7701> -<7704> <7704> -<7708> <7708> -<7709> <7709> -<770B> <770B> -<771E> <771E> -<7720> <7720> -<7729> <7729> -<7737> <7737> -<7738> <7738> -<773A> <773A> -<773C> <773C> -<7740> <7740> -<774D> <774D> -<775B> <775B> -<7761> <7761> -<7763> <7763> -<7766> <7766> -<776B> <776B> -<7779> <7779> -<777E> <777E> -<777F> <777F> -<778B> <778B> -<7791> <7791> -<779E> <779E> -<77A5> <77A5> -<77AC> <77AC> -<77AD> <77AD> -<77B0> <77B0> -<77B3> <77B3> -<77BB> <77BB> -<77BC> <77BC> -<77BF> <77BF> -<77D7> <77D7> -<77DB> <77DB> -<77DC> <77DC> -<77E2> <77E2> -<77E3> <77E3> -<77E5> <77E5> -<77E9> <77E9> -<77ED> <77ED> -<77EE> <77EE> -<77EF> <77EF> -<77F3> <77F3> -<7802> <7802> -<7812> <7812> -<7825> <7825> -<7826> <7826> -<7827> <7827> -<782C> <782C> -<7832> <7832> -<7834> <7834> -<7845> <7845> -<784F> <784F> -<785D> <785D> -<786B> <786B> -<786C> <786C> -<786F> <786F> -<787C> <787C> -<7881> <7881> -<7887> <7887> -<788C> <788C> -<788D> <788D> -<788E> <788E> -<7891> <7891> -<7897> <7897> -<78A3> <78A3> -<78A7> <78A7> -<78A9> <78A9> -<78BA> <78BB> -<78BC> <78BC> -<78C1> <78C1> -<78C5> <78C5> -<78CA> <78CA> -<78CB> <78CB> -<78CE> <78CE> -<78D0> <78D0> -<78E8> <78E8> -<78EC> <78EC> -<78EF> <78EF> -<78F5> <78F5> -<78FB> <78FB> -<7901> <7901> -<790E> <790E> -<7916> <7916> -<792A> <792A> -<792B> <792B> -<792C> <792C> -<793A> <793A> -endbfrange - -100 beginbfrange -<793E> <793E> -<7940> <7940> -<7941> <7941> -<7947> <7948> -<7949> <7949> -<7950> <7950> -<7956> <7956> -<7957> <7957> -<795A> <795A> -<795B> <795B> -<795C> <795C> -<795D> <795D> -<795E> <795E> -<7960> <7960> -<7965> <7965> -<7968> <7968> -<796D> <796D> -<797A> <797A> -<797F> <797F> -<7981> <7981> -<798D> <798D> -<798E> <798E> -<798F> <798F> -<7991> <7991> -<79A6> <79A6> -<79A7> <79A7> -<79AA> <79AA> -<79AE> <79AE> -<79B1> <79B1> -<79B3> <79B3> -<79B9> <79B9> -<79BD> <79BD> -<79BE> <79BE> -<79BF> <79BF> -<79C0> <79C0> -<79C1> <79C1> -<79C9> <79C9> -<79CA> <79CA> -<79CB> <79CB> -<79D1> <79D1> -<79D2> <79D2> -<79D5> <79D5> -<79D8> <79D8> -<79DF> <79DF> -<79E4> <79E4> -<79E6> <79E6> -<79E7> <79E7> -<79E9> <79E9> -<79FB> <79FB> -<7A00> <7A00> -<7A05> <7A05> -<7A08> <7A08> -<7A0B> <7A0B> -<7A0D> <7A0D> -<7A14> <7A14> -<7A17> <7A17> -<7A19> <7A19> -<7A1A> <7A1A> -<7A1C> <7A1C> -<7A1F> <7A1F> -<7A20> <7A20> -<7A2E> <7A2E> -<7A31> <7A31> -<7A36> <7A36> -<7A37> <7A37> -<7A3B> <7A3B> -<7A3C> <7A3C> -<7A3D> <7A3D> -<7A3F> <7A3F> -<7A40> <7A40> -<7A46> <7A46> -<7A49> <7A49> -<7A4D> <7A4D> -<7A4E> <7A4E> -<7A57> <7A57> -<7A61> <7A61> -<7A62> <7A62> -<7A69> <7A69> -<7A6B> <7A6B> -<7A70> <7A70> -<7A74> <7A74> -<7A76> <7A76> -<7A79> <7A79> -<7A7A> <7A7A> -<7A7D> <7A7D> -<7A7F> <7A7F> -<7A81> <7A81> -<7A84> <7A84> -<7A88> <7A88> -<7A92> <7A92> -<7A93> <7A93> -<7A95> <7A95> -<7A98> <7A98> -<7A9F> <7A9F> -<7AA9> <7AAA> -<7AAE> <7AAE> -<7AAF> <7AAF> -<7ABA> <7ABA> -<7AC4> <7AC4> -<7AC5> <7AC5> -endbfrange - -100 beginbfrange -<7AC7> <7AC7> -<7ACA> <7ACA> -<7ACB> <7ACB> -<7AD7> <7AD7> -<7AD9> <7AD9> -<7ADD> <7ADD> -<7ADF> <7ADF> -<7AE0> <7AE0> -<7AE3> <7AE3> -<7AE5> <7AE5> -<7AEA> <7AEA> -<7AED> <7AED> -<7AEF> <7AEF> -<7AF6> <7AF6> -<7AF9> <7AF9> -<7AFA> <7AFA> -<7AFF> <7AFF> -<7B0F> <7B0F> -<7B11> <7B11> -<7B19> <7B19> -<7B1B> <7B1B> -<7B1E> <7B1E> -<7B20> <7B20> -<7B26> <7B26> -<7B2C> <7B2C> -<7B2D> <7B2D> -<7B39> <7B39> -<7B46> <7B46> -<7B49> <7B49> -<7B4B> <7B4B> -<7B4C> <7B4C> -<7B4D> <7B4D> -<7B4F> <7B4F> -<7B50> <7B50> -<7B51> <7B51> -<7B52> <7B52> -<7B54> <7B54> -<7B56> <7B56> -<7B60> <7B60> -<7B6C> <7B6C> -<7B6E> <7B6E> -<7B75> <7B75> -<7B7D> <7B7D> -<7B87> <7B87> -<7B8B> <7B8B> -<7B8F> <7B8F> -<7B94> <7B94> -<7B95> <7B95> -<7B97> <7B97> -<7B9A> <7B9A> -<7B9D> <7B9D> -<7BA1> <7BA1> -<7BAD> <7BAD> -<7BB1> <7BB1> -<7BB4> <7BB4> -<7BB8> <7BB8> -<7BC0> <7BC0> -<7BC1> <7BC1> -<7BC4> <7BC4> -<7BC6> <7BC6> -<7BC7> <7BC7> -<7BC9> <7BC9> -<7BD2> <7BD2> -<7BE0> <7BE0> -<7BE4> <7BE4> -<7BE9> <7BE9> -<7C07> <7C07> -<7C12> <7C12> -<7C1E> <7C1E> -<7C21> <7C21> -<7C27> <7C27> -<7C2A> <7C2A> -<7C2B> <7C2B> -<7C3D> <7C3D> -<7C3E> <7C3E> -<7C3F> <7C3F> -<7C43> <7C43> -<7C4C> <7C4C> -<7C4D> <7C4D> -<7C60> <7C60> -<7C64> <7C64> -<7C6C> <7C6C> -<7C73> <7C73> -<7C83> <7C83> -<7C89> <7C89> -<7C92> <7C92> -<7C95> <7C95> -<7C97> <7C97> -<7C98> <7C98> -<7C9F> <7C9F> -<7CA5> <7CA5> -<7CA7> <7CA7> -<7CAE> <7CAE> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB9> <7CB9> -<7CBE> <7CBE> -<7CCA> <7CCA> -<7CD6> <7CD6> -endbfrange - -100 beginbfrange -<7CDE> <7CDE> -<7CDF> <7CDF> -<7CE0> <7CE0> -<7CE7> <7CE7> -<7CFB> <7CFB> -<7CFE> <7CFE> -<7D00> <7D00> -<7D02> <7D02> -<7D04> <7D04> -<7D05> <7D05> -<7D06> <7D06> -<7D07> <7D07> -<7D08> <7D08> -<7D0A> <7D0B> -<7D0D> <7D0D> -<7D10> <7D10> -<7D14> <7D14> -<7D17> <7D17> -<7D18> <7D18> -<7D19> <7D19> -<7D1A> <7D1A> -<7D1B> <7D1B> -<7D20> <7D20> -<7D21> <7D21> -<7D22> <7D22> -<7D2B> <7D2B> -<7D2C> <7D2C> -<7D2E> <7D2E> -<7D2F> <7D2F> -<7D30> <7D30> -<7D33> <7D33> -<7D35> <7D35> -<7D39> <7D39> -<7D3A> <7D3A> -<7D42> <7D42> -<7D43> <7D43> -<7D44> <7D44> -<7D45> <7D45> -<7D46> <7D46> -<7D50> <7D50> -<7D5E> <7D5E> -<7D61> <7D61> -<7D62> <7D62> -<7D66> <7D66> -<7D68> <7D68> -<7D6A> <7D6A> -<7D6E> <7D6E> -<7D71> <7D71> -<7D72> <7D72> -<7D73> <7D73> -<7D76> <7D76> -<7D79> <7D79> -<7D7F> <7D7F> -<7D8E> <7D8E> -<7D8F> <7D8F> -<7D93> <7D93> -<7D9C> <7D9C> -<7DA0> <7DA0> -<7DA2> <7DA2> -<7DAC> <7DAC> -<7DAD> <7DAD> -<7DB1> <7DB1> -<7DB2> <7DB2> -<7DB4> <7DB4> -<7DB5> <7DB5> -<7DB8> <7DB8> -<7DBA> <7DBA> -<7DBB> <7DBB> -<7DBD> <7DBD> -<7DBE> <7DBE> -<7DBF> <7DBF> -<7DC7> <7DC7> -<7DCA> <7DCA> -<7DCB> <7DCB> -<7DD6> <7DD6> -<7DD8> <7DD8> -<7DDA> <7DDA> -<7DDD> <7DDD> -<7DDE> <7DDE> -<7DE0> <7DE0> -<7DE1> <7DE1> -<7DE3> <7DE3> -<7DE8> <7DE8> -<7DE9> <7DE9> -<7DEC> <7DEC> -<7DEF> <7DEF> -<7DF4> <7DF4> -<7DFB> <7DFB> -<7E09> <7E09> -<7E0A> <7E0A> -<7E15> <7E15> -<7E1B> <7E1B> -<7E1D> <7E1D> -<7E1E> <7E1E> -<7E1F> <7E1F> -<7E21> <7E21> -<7E23> <7E23> -<7E2B> <7E2B> -<7E2E> <7E2E> -<7E2F> <7E2F> -endbfrange - -100 beginbfrange -<7E31> <7E31> -<7E37> <7E37> -<7E3D> <7E3D> -<7E3E> <7E3E> -<7E41> <7E41> -<7E43> <7E43> -<7E46> <7E46> -<7E47> <7E47> -<7E52> <7E52> -<7E54> <7E54> -<7E55> <7E55> -<7E5E> <7E5E> -<7E61> <7E61> -<7E69> <7E69> -<7E6A> <7E6A> -<7E6B> <7E6B> -<7E6D> <7E6D> -<7E70> <7E70> -<7E79> <7E79> -<7E7C> <7E7C> -<7E82> <7E82> -<7E8C> <7E8C> -<7E8F> <7E8F> -<7E93> <7E93> -<7E96> <7E96> -<7E98> <7E98> -<7E9B> <7E9B> -<7E9C> <7E9C> -<7F36> <7F36> -<7F38> <7F38> -<7F3A> <7F3A> -<7F4C> <7F4C> -<7F50> <7F50> -<7F54> <7F54> -<7F55> <7F55> -<7F6A> <7F6A> -<7F6B> <7F6B> -<7F6E> <7F6E> -<7F70> <7F70> -<7F72> <7F72> -<7F75> <7F75> -<7F77> <7F77> -<7F79> <7F79> -<7F85> <7F85> -<7F88> <7F88> -<7F8A> <7F8A> -<7F8C> <7F8C> -<7F8E> <7F8E> -<7F94> <7F94> -<7F9A> <7F9A> -<7F9E> <7F9E> -<7FA4> <7FA4> -<7FA8> <7FA8> -<7FA9> <7FA9> -<7FB2> <7FB2> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBD> <7FBD> -<7FC1> <7FC1> -<7FC5> <7FC5> -<7FCA> <7FCA> -<7FCC> <7FCC> -<7FCE> <7FCE> -<7FD2> <7FD2> -<7FD4> <7FD4> -<7FD5> <7FD5> -<7FDF> <7FDF> -<7FE0> <7FE0> -<7FE1> <7FE1> -<7FE9> <7FE9> -<7FEB> <7FEB> -<7FF0> <7FF0> -<7FF9> <7FF9> -<7FFC> <7FFC> -<8000> <8000> -<8001> <8001> -<8003> <8003> -<8005> <8005> -<8006> <8006> -<8009> <8009> -<800C> <800C> -<8010> <8010> -<8015> <8015> -<8017> <8017> -<8018> <8018> -<802D> <802D> -<8033> <8033> -<8036> <8036> -<803D> <803D> -<803F> <803F> -<8043> <8043> -<8046> <8046> -<804A> <804A> -<8056> <8056> -<8058> <8058> -<805A> <805A> -<805E> <805E> -<806F> <806F> -<8070> <8070> -<8072> <8072> -endbfrange - -100 beginbfrange -<8073> <8073> -<8077> <8077> -<807D> <807D> -<807E> <807E> -<807F> <807F> -<8084> <8084> -<8085> <8085> -<8086> <8086> -<8087> <8087> -<8089> <8089> -<808B> <808B> -<808C> <808C> -<8096> <8096> -<809B> <809B> -<809D> <809D> -<80A1> <80A1> -<80A2> <80A2> -<80A5> <80A5> -<80A9> <80A9> -<80AA> <80AA> -<80AF> <80AF> -<80B1> <80B1> -<80B2> <80B2> -<80B4> <80B4> -<80BA> <80BA> -<80C3> <80C3> -<80C4> <80C4> -<80CC> <80CC> -<80CE> <80CE> -<80DA> <80DA> -<80DB> <80DB> -<80DE> <80DE> -<80E1> <80E1> -<80E4> <80E4> -<80E5> <80E5> -<80F1> <80F1> -<80F4> <80F4> -<80F8> <80F8> -<80FD> <80FD> -<8102> <8102> -<8105> <8105> -<8106> <8106> -<8107> <8107> -<8108> <8108> -<810A> <810A> -<8118> <8118> -<811A> <811A> -<811B> <811B> -<8123> <8123> -<8129> <8129> -<812B> <812B> -<812F> <812F> -<8139> <8139> -<813E> <813E> -<814B> <814B> -<814E> <814E> -<8150> <8151> -<8154> <8154> -<8155> <8155> -<8165> <8165> -<8166> <8166> -<816B> <816B> -<8170> <8170> -<8171> <8171> -<8178> <8178> -<8179> <8179> -<817A> <817A> -<817F> <817F> -<8180> <8180> -<8188> <8188> -<818A> <818A> -<818F> <818F> -<819A> <819A> -<819C> <819C> -<819D> <819D> -<81A0> <81A0> -<81A3> <81A3> -<81A8> <81A8> -<81B3> <81B3> -<81B5> <81B5> -<81BA> <81BA> -<81BD> <81BD> -<81BE> <81BE> -<81BF> <81BF> -<81C0> <81C0> -<81C2> <81C2> -<81C6> <81C6> -<81CD> <81CD> -<81D8> <81D8> -<81DF> <81DF> -<81E3> <81E3> -<81E5> <81E5> -<81E7> <81E7> -<81E8> <81E8> -<81EA> <81EA> -<81ED> <81ED> -<81F3> <81F3> -<81F4> <81F4> -<81FA> <81FA> -<81FB> <81FB> -endbfrange - -100 beginbfrange -<81FC> <81FC> -<81FE> <81FE> -<8205> <8205> -<8207> <8207> -<8208> <8208> -<820A> <820A> -<820C> <820C> -<820D> <820D> -<8212> <8212> -<821B> <821B> -<821C> <821C> -<821E> <821E> -<821F> <821F> -<8221> <8221> -<822A> <822A> -<822B> <822B> -<822C> <822C> -<8235> <8235> -<8236> <8236> -<8237> <8237> -<8239> <8239> -<8240> <8240> -<8245> <8245> -<8247> <8247> -<8259> <8259> -<8264> <8264> -<8266> <8266> -<826E> <826E> -<826F> <826F> -<8271> <8271> -<8272> <8272> -<8276> <8276> -<8278> <8278> -<827E> <827E> -<828B> <828B> -<828D> <828D> -<828E> <828E> -<8292> <8292> -<8299> <8299> -<829A> <829A> -<829D> <829D> -<829F> <829F> -<82A5> <82A5> -<82A6> <82A6> -<82A9> <82A9> -<82AC> <82AC> -<82AD> <82AD> -<82AE> <82AE> -<82AF> <82AF> -<82B1> <82B1> -<82B3> <82B3> -<82B7> <82B7> -<82B8> <82B8> -<82B9> <82B9> -<82BB> <82BB> -<82BC> <82BC> -<82BD> <82BD> -<82BF> <82BF> -<82D1> <82D1> -<82D2> <82D2> -<82D4> <82D4> -<82D5> <82D5> -<82D7> <82D7> -<82DB> <82DB> -<82DE> <82DE> -<82DF> <82DF> -<82E1> <82E1> -<82E5> <82E5> -<82E6> <82E6> -<82E7> <82E7> -<82F1> <82F1> -<82FD> <82FD> -<82FE> <82FE> -<8301> <8301> -<8302> <8302> -<8303> <8303> -<8304> <8304> -<8305> <8305> -<8309> <8309> -<8317> <8317> -<8328> <8328> -<832B> <832B> -<832F> <832F> -<8331> <8331> -<8334> <8334> -<8335> <8335> -<8336> <8336> -<8338> <8338> -<8339> <8339> -<8340> <8340> -<8347> <8347> -<8349> <8349> -<834A> <834A> -<834F> <834F> -<8351> <8351> -<8352> <8352> -<8373> <8373> -<8377> <8377> -<837B> <837B> -<8389> <8389> -endbfrange - -100 beginbfrange -<838A> <838A> -<838E> <838E> -<8396> <8396> -<8398> <8398> -<839E> <839E> -<83A2> <83A2> -<83A9> <83A9> -<83AA> <83AA> -<83AB> <83AB> -<83BD> <83BD> -<83C1> <83C1> -<83C5> <83C5> -<83C9> <83C9> -<83CA> <83CA> -<83CC> <83CC> -<83D3> <83D3> -<83D6> <83D6> -<83DC> <83DC> -<83E9> <83E9> -<83EB> <83EB> -<83EF> <83EF> -<83F0> <83F0> -<83F1> <83F1> -<83F2> <83F2> -<83F4> <83F4> -<83F9> <83F9> -<83FD> <83FD> -<8403> <8403> -<8404> <8404> -<840A> <840A> -<840C> <840C> -<840D> <840D> -<840E> <840E> -<8429> <8429> -<842C> <842C> -<8431> <8431> -<8438> <8438> -<843D> <843D> -<8449> <8449> -<8457> <8457> -<845B> <845B> -<8461> <8461> -<8463> <8463> -<8466> <8466> -<846B> <846B> -<846C> <846C> -<846F> <846F> -<8475> <8475> -<847A> <847A> -<8490> <8490> -<8494> <8494> -<8499> <8499> -<849C> <849C> -<84A1> <84A1> -<84B2> <84B2> -<84B8> <84B8> -<84BB> <84BB> -<84BC> <84BC> -<84BF> <84BF> -<84C0> <84C0> -<84C2> <84C2> -<84C4> <84C4> -<84C6> <84C6> -<84C9> <84C9> -<84CB> <84CB> -<84CD> <84CD> -<84D1> <84D1> -<84DA> <84DA> -<84EC> <84EC> -<84EE> <84EE> -<84F4> <84F4> -<84FC> <84FC> -<8511> <8511> -<8513> <8513> -<8514> <8514> -<8517> <8517> -<8518> <8518> -<851A> <851A> -<851E> <851E> -<8521> <8521> -<8523> <8523> -<8525> <8525> -<852C> <852C> -<852D> <852D> -<852F> <852F> -<853D> <853D> -<853F> <853F> -<8541> <8541> -<8543> <8543> -<8549> <8549> -<854E> <854E> -<8553> <8553> -<8559> <8559> -<8563> <8563> -<8568> <8568> -<8569> <8569> -<856A> <856A> -<856D> <856D> -<8584> <8584> -<8587> <8587> -endbfrange - -100 beginbfrange -<858F> <858F> -<8591> <8591> -<8594> <8594> -<859B> <859B> -<85A6> <85A6> -<85A8> <85A8> -<85A9> <85A9> -<85AA> <85AA> -<85AF> <85AF> -<85B0> <85B0> -<85BA> <85BA> -<85C1> <85C1> -<85C9> <85C9> -<85CD> <85CD> -<85CE> <85CE> -<85CF> <85CF> -<85D5> <85D5> -<85DC> <85DC> -<85DD> <85DD> -<85E4> <85E4> -<85E5> <85E5> -<85E9> <85E9> -<85EA> <85EA> -<85F7> <85F7> -<85FA> <85FA> -<85FB> <85FB> -<85FF> <85FF> -<8602> <8602> -<8606> <8606> -<8607> <8607> -<860A> <860A> -<8616> <8616> -<8617> <8617> -<861A> <861A> -<862D> <862D> -<863F> <863F> -<864E> <864E> -<8650> <8650> -<8654> <8654> -<8655> <8655> -<865B> <865B> -<865C> <865C> -<865E> <865E> -<865F> <865F> -<8667> <8667> -<8679> <8679> -<868A> <868A> -<868C> <868C> -<8693> <8693> -<86A3> <86A3> -<86A4> <86A4> -<86A9> <86A9> -<86C7> <86C7> -<86CB> <86CB> -<86D4> <86D4> -<86D9> <86D9> -<86DB> <86DB> -<86DF> <86DF> -<86E4> <86E4> -<86ED> <86ED> -<86FE> <86FE> -<8700> <8700> -<8702> <8702> -<8703> <8703> -<8708> <8708> -<8718> <8718> -<871A> <871A> -<871C> <871C> -<874E> <874E> -<8755> <8755> -<8757> <8757> -<875F> <875F> -<8766> <8766> -<8768> <8768> -<8774> <8774> -<8776> <8776> -<8778> <8778> -<8782> <8782> -<878D> <878D> -<879F> <879F> -<87A2> <87A2> -<87B3> <87B3> -<87BA> <87BA> -<87C4> <87C4> -<87E0> <87E0> -<87EC> <87EC> -<87EF> <87EF> -<87F2> <87F2> -<87F9> <87F9> -<87FB> <87FB> -<87FE> <87FE> -<8805> <8805> -<881F> <881F> -<8822> <8822> -<8823> <8823> -<8831> <8831> -<8836> <8836> -<883B> <883B> -<8840> <8840> -<8846> <8846> -endbfrange - -100 beginbfrange -<884C> <884C> -<884D> <884D> -<8852> <8852> -<8853> <8853> -<8857> <8857> -<8859> <8859> -<885B> <885B> -<885D> <885D> -<8861> <8861> -<8862> <8862> -<8863> <8863> -<8868> <8868> -<886B> <886B> -<8870> <8870> -<8872> <8872> -<8877> <8877> -<887E> <887F> -<8881> <8881> -<8882> <8882> -<8888> <8888> -<888B> <888B> -<888D> <888D> -<8892> <8892> -<8896> <8896> -<8897> <8897> -<889E> <889E> -<88AB> <88AB> -<88B4> <88B4> -<88C1> <88C1> -<88C2> <88C2> -<88CF> <88CF> -<88D4> <88D4> -<88D5> <88D5> -<88D9> <88D9> -<88DC> <88DC> -<88DD> <88DD> -<88DF> <88DF> -<88E1> <88E1> -<88E8> <88E8> -<88F3> <88F3> -<88F4> <88F5> -<88F8> <88F8> -<88FD> <88FD> -<8907> <8907> -<8910> <8910> -<8912> <8912> -<8913> <8913> -<8918> <8918> -<8919> <8919> -<8925> <8925> -<892A> <892A> -<8936> <8936> -<8938> <8938> -<893B> <893B> -<8941> <8941> -<8944> <8944> -<895F> <895F> -<8964> <8964> -<896A> <896A> -<8972> <8972> -<897F> <897F> -<8981> <8981> -<8983> <8983> -<8986> <8986> -<8987> <8987> -<898B> <898B> -<898F> <898F> -<8993> <8993> -<8996> <8996> -<89A1> <89A1> -<89A9> <89A9> -<89AA> <89AA> -<89B2> <89B2> -<89BA> <89BA> -<89BD> <89BD> -<89C0> <89C0> -<89D2> <89D2> -<89E3> <89E3> -<89F4> <89F4> -<89F8> <89F8> -<8A00> <8A00> -<8A02> <8A02> -<8A03> <8A03> -<8A08> <8A08> -<8A0A> <8A0A> -<8A0C> <8A0C> -<8A0E> <8A0E> -<8A13> <8A13> -<8A16> <8A16> -<8A17> <8A17> -<8A18> <8A18> -<8A1B> <8A1B> -<8A1D> <8A1D> -<8A1F> <8A1F> -<8A23> <8A23> -<8A25> <8A25> -<8A2A> <8A2A> -<8A2D> <8A2D> -<8A31> <8A31> -<8A34> <8A34> -endbfrange - -100 beginbfrange -<8A36> <8A36> -<8A3A> <8A3A> -<8A3B> <8A3B> -<8A50> <8A50> -<8A54> <8A54> -<8A55> <8A55> -<8A5B> <8A5B> -<8A5E> <8A5E> -<8A60> <8A60> -<8A62> <8A62> -<8A63> <8A63> -<8A66> <8A66> -<8A69> <8A69> -<8A6D> <8A6D> -<8A6E> <8A6E> -<8A70> <8A70> -<8A71> <8A71> -<8A72> <8A72> -<8A73> <8A73> -<8A75> <8A75> -<8A79> <8A79> -<8A85> <8A85> -<8A87> <8A87> -<8A8C> <8A8C> -<8A8D> <8A8D> -<8A93> <8A93> -<8A95> <8A95> -<8A98> <8A98> -<8A9E> <8A9E> -<8AA0> <8AA0> -<8AA1> <8AA1> -<8AA3> <8AA3> -<8AA4> <8AA4> -<8AA5> <8AA5> -<8AA6> <8AA6> -<8AA8> <8AA8> -<8AAA> <8AAA> -<8AB0> <8AB0> -<8AB2> <8AB2> -<8AB9> <8AB9> -<8ABC> <8ABC> -<8ABE> <8ABE> -<8ABF> <8ABF> -<8AC2> <8AC2> -<8AC4> <8AC4> -<8AC7> <8AC7> -<8ACB> <8ACB> -<8ACD> <8ACD> -<8ACF> <8ACF> -<8AD2> <8AD2> -<8AD6> <8AD6> -<8ADB> <8ADB> -<8ADC> <8ADC> -<8AE1> <8AE1> -<8AE6> <8AE6> -<8AE7> <8AE7> -<8AEA> <8AEA> -<8AEB> <8AEB> -<8AED> <8AED> -<8AEE> <8AEE> -<8AF1> <8AF1> -<8AF6> <8AF6> -<8AF7> <8AF7> -<8AF8> <8AF8> -<8AFA> <8AFA> -<8AFE> <8AFE> -<8B00> <8B00> -<8B01> <8B01> -<8B02> <8B02> -<8B04> <8B04> -<8B0E> <8B0E> -<8B10> <8B10> -<8B14> <8B14> -<8B16> <8B16> -<8B17> <8B17> -<8B19> <8B19> -<8B1A> <8B1A> -<8B1B> <8B1B> -<8B1D> <8B1D> -<8B20> <8B20> -<8B28> <8B28> -<8B2B> <8B2B> -<8B2C> <8B2C> -<8B33> <8B33> -<8B39> <8B39> -<8B41> <8B41> -<8B49> <8B49> -<8B4E> <8B4E> -<8B4F> <8B4F> -<8B58> <8B58> -<8B5A> <8B5A> -<8B5C> <8B5C> -<8B66> <8B66> -<8B6C> <8B6C> -<8B6F> <8B6F> -<8B70> <8B70> -<8B74> <8B74> -<8B77> <8B77> -<8B7D> <8B7D> -<8B80> <8B80> -endbfrange - -100 beginbfrange -<8B8A> <8B8A> -<8B90> <8B90> -<8B92> <8B92> -<8B93> <8B93> -<8B96> <8B96> -<8B9A> <8B9A> -<8C37> <8C37> -<8C3F> <8C3F> -<8C41> <8C41> -<8C46> <8C46> -<8C48> <8C48> -<8C4A> <8C4A> -<8C4C> <8C4C> -<8C55> <8C55> -<8C5A> <8C5A> -<8C61> <8C61> -<8C6A> <8C6A> -<8C6B> <8C6B> -<8C79> <8C79> -<8C7A> <8C7A> -<8C82> <8C82> -<8C8A> <8C8A> -<8C8C> <8C8C> -<8C9D> <8C9D> -<8C9E> <8C9E> -<8CA0> <8CA0> -<8CA1> <8CA1> -<8CA2> <8CA2> -<8CA7> <8CA7> -<8CA8> <8CA8> -<8CA9> <8CA9> -<8CAA> <8CAA> -<8CAB> <8CAB> -<8CAC> <8CAC> -<8CAF> <8CAF> -<8CB0> <8CB0> -<8CB3> <8CB3> -<8CB4> <8CB4> -<8CB6> <8CB6> -<8CB7> <8CB7> -<8CB8> <8CB8> -<8CBB> <8CBB> -<8CBC> <8CBC> -<8CBD> <8CBD> -<8CBF> <8CBF> -<8CC0> <8CC0> -<8CC1> <8CC1> -<8CC2> <8CC2> -<8CC3> <8CC3> -<8CC4> <8CC4> -<8CC7> <8CC7> -<8CC8> <8CC8> -<8CCA> <8CCA> -<8CD1> <8CD1> -<8CD3> <8CD3> -<8CDA> <8CDA> -<8CDC> <8CDC> -<8CDE> <8CDE> -<8CE0> <8CE0> -<8CE2> <8CE2> -<8CE3> <8CE3> -<8CE4> <8CE4> -<8CE6> <8CE6> -<8CEA> <8CEA> -<8CED> <8CED> -<8CF4> <8CF4> -<8CFB> <8CFB> -<8CFC> <8CFC> -<8CFD> <8CFD> -<8D04> <8D04> -<8D05> <8D05> -<8D07> <8D07> -<8D08> <8D08> -<8D0A> <8D0A> -<8D0D> <8D0D> -<8D13> <8D13> -<8D16> <8D16> -<8D64> <8D64> -<8D66> <8D66> -<8D6B> <8D6B> -<8D70> <8D70> -<8D73> <8D73> -<8D74> <8D74> -<8D77> <8D77> -<8D85> <8D85> -<8D8A> <8D8A> -<8D99> <8D99> -<8DA3> <8DA3> -<8DA8> <8DA8> -<8DB3> <8DB3> -<8DBA> <8DBA> -<8DBE> <8DBE> -<8DC6> <8DC6> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCF> <8DCF> -<8DDB> <8DDB> -<8DDD> <8DDD> -<8DE1> <8DE1> -<8DE3> <8DE3> -endbfrange - -100 beginbfrange -<8DE8> <8DE8> -<8DEF> <8DEF> -<8DF3> <8DF3> -<8E0A> <8E0A> -<8E0F> <8E0F> -<8E10> <8E10> -<8E1E> <8E1E> -<8E2A> <8E2A> -<8E30> <8E30> -<8E35> <8E35> -<8E42> <8E42> -<8E44> <8E44> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E59> <8E59> -<8E5F> <8E5F> -<8E60> <8E60> -<8E74> <8E74> -<8E76> <8E76> -<8E81> <8E81> -<8E87> <8E87> -<8E8A> <8E8A> -<8E8D> <8E8D> -<8EAA> <8EAA> -<8EAB> <8EAB> -<8EAC> <8EAC> -<8EC0> <8EC0> -<8ECA> <8ECA> -<8ECB> <8ECB> -<8ECC> <8ECC> -<8ECD> <8ECD> -<8ED2> <8ED2> -<8EDF> <8EDF> -<8EEB> <8EEB> -<8EF8> <8EF8> -<8EFB> <8EFB> -<8EFE> <8EFE> -<8F03> <8F03> -<8F05> <8F05> -<8F09> <8F09> -<8F12> <8F12> -<8F13> <8F13> -<8F14> <8F14> -<8F15> <8F15> -<8F1B> <8F1B> -<8F1C> <8F1C> -<8F1D> <8F1D> -<8F1E> <8F1E> -<8F1F> <8F1F> -<8F26> <8F26> -<8F27> <8F27> -<8F29> <8F29> -<8F2A> <8F2A> -<8F2F> <8F2F> -<8F33> <8F33> -<8F38> <8F38> -<8F39> <8F39> -<8F3B> <8F3B> -<8F3E> <8F3E> -<8F3F> <8F3F> -<8F44> <8F44> -<8F45> <8F45> -<8F49> <8F49> -<8F4D> <8F4D> -<8F4E> <8F4E> -<8F5D> <8F5D> -<8F5F> <8F5F> -<8F62> <8F62> -<8F9B> <8F9B> -<8F9C> <8F9C> -<8FA3> <8FA3> -<8FA6> <8FA6> -<8FA8> <8FA8> -<8FAD> <8FAD> -<8FAF> <8FAF> -<8FB0> <8FB0> -<8FB1> <8FB1> -<8FB2> <8FB2> -<8FC2> <8FC2> -<8FC5> <8FC5> -<8FCE> <8FCE> -<8FD1> <8FD1> -<8FD4> <8FD4> -<8FE6> <8FE6> -<8FEA> <8FEA> -<8FEB> <8FEB> -<8FED> <8FED> -<8FF0> <8FF0> -<8FF2> <8FF2> -<8FF7> <8FF7> -<8FF9> <8FF9> -<8FFD> <8FFD> -<9000> <9000> -<9001> <9001> -<9002> <9002> -<9003> <9003> -<9005> <9005> -<9006> <9006> -endbfrange - -100 beginbfrange -<9008> <9008> -<900B> <900B> -<900D> <900D> -<900F> <900F> -<9010> <9010> -<9011> <9011> -<9014> <9014> -<9015> <9015> -<9017> <9017> -<9019> <9019> -<901A> <901A> -<901D> <901D> -<901E> <901E> -<901F> <901F> -<9020> <9020> -<9021> <9021> -<9022> <9022> -<9023> <9023> -<902E> <902E> -<9031> <9031> -<9032> <9032> -<9035> <9035> -<9038> <9038> -<903C> <903C> -<903E> <903E> -<9041> <9041> -<9042> <9042> -<9047> <9047> -<904A> <904A> -<904B> <904B> -<904D> <904D> -<904E> <904E> -<9050> <9050> -<9051> <9051> -<9053> <9053> -<9054> <9054> -<9055> <9055> -<9059> <9059> -<905C> <905C> -<905D> <905D> -<905E> <905E> -<9060> <9060> -<9061> <9061> -<9063> <9063> -<9069> <9069> -<906D> <906D> -<906E> <906E> -<906F> <906F> -<9072> <9072> -<9075> <9075> -<9077> <9077> -<9078> <9078> -<907A> <907A> -<907C> <907C> -<907D> <907D> -<907F> <907F> -<9080> <9080> -<9081> <9081> -<9082> <9082> -<9083> <9083> -<9084> <9084> -<9087> <9087> -<9088> <9088> -<908A> <908A> -<908F> <908F> -<9091> <9091> -<9095> <9095> -<9099> <9099> -<90A2> <90A2> -<90A3> <90A3> -<90A6> <90A6> -<90A8> <90A8> -<90AA> <90AA> -<90AF> <90AF> -<90B0> <90B0> -<90B1> <90B1> -<90B5> <90B5> -<90B8> <90B8> -<90C1> <90C1> -<90CA> <90CA> -<90DE> <90DE> -<90E1> <90E1> -<90E8> <90E8> -<90ED> <90ED> -<90F5> <90F5> -<90FD> <90FD> -<9102> <9102> -<9112> <9112> -<9115> <9115> -<9119> <9119> -<9127> <9127> -<912D> <912D> -<9132> <9132> -<9149> <9149> -<914A> <914A> -<914B> <914B> -<914C> <914C> -<914D> <914D> -<914E> <914E> -<9152> <9152> -endbfrange - -100 beginbfrange -<9162> <9162> -<9169> <9169> -<916A> <916A> -<916C> <916C> -<9175> <9175> -<9177> <9177> -<9178> <9178> -<9187> <9187> -<9189> <9189> -<918B> <918B> -<918D> <918D> -<9192> <9192> -<919C> <919C> -<91AB> <91AB> -<91AC> <91AC> -<91AE> <91AE> -<91AF> <91AF> -<91B1> <91B1> -<91B4> <91B4> -<91B5> <91B5> -<91C0> <91C0> -<91C7> <91C7> -<91C9> <91C9> -<91CB> <91CB> -<91CC> <91CC> -<91CD> <91CD> -<91CE> <91CE> -<91CF> <91CF> -<91D0> <91D0> -<91D1> <91D1> -<91D7> <91D7> -<91D8> <91D8> -<91DC> <91DC> -<91DD> <91DD> -<91E3> <91E3> -<91E7> <91E7> -<91EA> <91EA> -<91F5> <91F5> -<920D> <920D> -<9210> <9210> -<9211> <9211> -<9212> <9212> -<9217> <9217> -<921E> <921E> -<9234> <9234> -<923A> <923A> -<923F> <923F> -<9240> <9240> -<9245> <9245> -<9249> <9249> -<9257> <9257> -<925B> <925B> -<925E> <925E> -<9262> <9262> -<9264> <9264> -<9265> <9265> -<9266> <9266> -<9280> <9280> -<9283> <9283> -<9285> <9285> -<9291> <9291> -<9293> <9293> -<9296> <9296> -<9298> <9298> -<929C> <929C> -<92B3> <92B3> -<92B6> <92B6> -<92B7> <92B7> -<92B9> <92B9> -<92CC> <92CC> -<92CF> <92CF> -<92D2> <92D2> -<92E4> <92E4> -<92EA> <92EA> -<92F8> <92F8> -<92FC> <92FC> -<9304> <9304> -<9310> <9310> -<9318> <9318> -<931A> <931A> -<931E> <931E> -<931F> <931F> -<9320> <9320> -<9321> <9321> -<9322> <9322> -<9324> <9324> -<9326> <9326> -<9328> <9328> -<932B> <932B> -<932E> <932E> -<932F> <932F> -<9348> <9348> -<934A> <934A> -<934B> <934B> -<934D> <934D> -<9354> <9354> -<935B> <935B> -<936E> <936E> -<9375> <9375> -<937C> <937C> -endbfrange - -100 beginbfrange -<937E> <937E> -<938C> <938C> -<9394> <9394> -<9396> <9396> -<939A> <939A> -<93A3> <93A3> -<93A7> <93A7> -<93AC> <93AC> -<93AD> <93AD> -<93B0> <93B0> -<93C3> <93C3> -<93D1> <93D1> -<93DE> <93DE> -<93E1> <93E1> -<93E4> <93E4> -<93F6> <93F6> -<9404> <9404> -<9418> <9418> -<9425> <9425> -<942B> <942B> -<9435> <9435> -<9438> <9438> -<9444> <9444> -<9451> <9452> -<945B> <945B> -<947D> <947D> -<947F> <947F> -<9577> <9577> -<9580> <9580> -<9583> <9583> -<9589> <9589> -<958B> <958B> -<958F> <958F> -<9591> <9592> -<9593> <9593> -<9594> <9594> -<9598> <9598> -<95A3> <95A3> -<95A4> <95A4> -<95A5> <95A5> -<95A8> <95A8> -<95AD> <95AD> -<95B1> <95B1> -<95BB> <95BB> -<95BC> <95BC> -<95C7> <95C7> -<95CA> <95CA> -<95D4> <95D4> -<95D5> <95D5> -<95D6> <95D6> -<95DC> <95DC> -<95E1> <95E1> -<95E2> <95E2> -<961C> <961C> -<9621> <9621> -<962A> <962A> -<962E> <962E> -<9632> <9632> -<963B> <963B> -<963F> <963F> -<9640> <9640> -<9642> <9642> -<9644> <9644> -<964B> <964B> -<964C> <964C> -<964D> <964D> -<9650> <9650> -<965B> <965B> -<965C> <965C> -<965D> <965D> -<965E> <965E> -<965F> <965F> -<9662> <9662> -<9663> <9663> -<9664> <9664> -<966A> <966A> -<9670> <9670> -<9673> <9673> -<9675> <9675> -<9676> <9676> -<9677> <9677> -<9678> <9678> -<967D> <967D> -<9685> <9685> -<9686> <9686> -<968A> <968A> -<968B> <968B> -<968D> <968D> -<968E> <968E> -<9694> <9694> -<9695> <9695> -<9698> <9698> -<9699> <9699> -<969B> <969B> -<969C> <969C> -<96A3> <96A3> -<96A7> <96A8> -<96AA> <96AA> -<96B1> <96B1> -<96B7> <96B7> -endbfrange - -100 beginbfrange -<96BB> <96BB> -<96C0> <96C0> -<96C1> <96C1> -<96C4> <96C4> -<96C5> <96C5> -<96C6> <96C6> -<96C7> <96C7> -<96C9> <96C9> -<96CB> <96CB> -<96CC> <96CC> -<96CD> <96CD> -<96CE> <96CE> -<96D5> <96D5> -<96D6> <96D6> -<96D9> <96D9> -<96DB> <96DB> -<96DC> <96DC> -<96E2> <96E2> -<96E3> <96E3> -<96E8> <96E9> -<96EA> <96EA> -<96EF> <96EF> -<96F0> <96F0> -<96F2> <96F2> -<96F6> <96F6> -<96F7> <96F7> -<96F9> <96F9> -<96FB> <96FB> -<9700> <9700> -<9706> <9706> -<9707> <9707> -<9711> <9711> -<9713> <9713> -<9716> <9716> -<9719> <9719> -<971C> <971C> -<971E> <971E> -<9727> <9727> -<9730> <9730> -<9732> <9732> -<9739> <9739> -<973D> <973D> -<9742> <9742> -<9744> <9744> -<9748> <9748> -<9751> <9751> -<9756> <9756> -<975C> <975C> -<975E> <975E> -<9761> <9761> -<9762> <9762> -<9769> <9769> -<976D> <976D> -<9774> <9774> -<9777> <9777> -<977A> <977A> -<978B> <978B> -<978D> <978D> -<978F> <978F> -<97A0> <97A0> -<97A8> <97A8> -<97AB> <97AB> -<97AD> <97AD> -<97C6> <97C6> -<97CB> <97CB> -<97D3> <97D3> -<97DC> <97DC> -<97F3> <97F3> -<97F6> <97F6> -<97FB> <97FB> -<97FF> <97FF> -<9800> <9800> -<9801> <9801> -<9802> <9802> -<9803> <9803> -<9805> <9805> -<9806> <9806> -<9808> <9808> -<980A> <980A> -<980C> <980C> -<9810> <9810> -<9811> <9811> -<9812> <9812> -<9813> <9813> -<9817> <9817> -<9818> <9818> -<982D> <982D> -<9830> <9830> -<9838> <9838> -<9839> <9839> -<983B> <983B> -<9846> <9846> -<984C> <984C> -<984D> <984D> -<984E> <984E> -<9854> <9854> -<9858> <9858> -<985A> <985A> -<985E> <985E> -<9865> <9865> -endbfrange - -100 beginbfrange -<9867> <9867> -<986B> <986B> -<986F> <986F> -<98A8> <98A8> -<98AF> <98AF> -<98B1> <98B1> -<98C4> <98C4> -<98C7> <98C7> -<98DB> <98DB> -<98DC> <98DC> -<98DF> <98DF> -<98E1> <98E1> -<98E2> <98E2> -<98ED> <98ED> -<98EE> <98EE> -<98EF> <98EF> -<98F4> <98F4> -<98FC> <98FC> -<98FD> <98FD> -<98FE> <98FE> -<9903> <9903> -<9909> <9909> -<990A> <990A> -<990C> <990C> -<9910> <9910> -<9913> <9913> -<9918> <9918> -<991E> <991E> -<9920> <9920> -<9928> <9928> -<9945> <9945> -<9949> <9949> -<994B> <994B> -<994C> <994C> -<994D> <994D> -<9951> <9951> -<9952> <9952> -<9954> <9954> -<9957> <9957> -<9996> <9996> -<9999> <9999> -<999D> <999D> -<99A5> <99A5> -<99A8> <99A8> -<99AC> <99AC> -<99AD> <99AD> -<99AE> <99AE> -<99B1> <99B1> -<99B3> <99B3> -<99B4> <99B4> -<99B9> <99B9> -<99C1> <99C1> -<99D0> <99D0> -<99D1> <99D1> -<99D2> <99D2> -<99D5> <99D5> -<99D9> <99D9> -<99DD> <99DD> -<99DF> <99DF> -<99ED> <99ED> -<99F1> <99F1> -<99FF> <99FF> -<9A01> <9A01> -<9A08> <9A08> -<9A0E> <9A0F> -<9A19> <9A19> -<9A2B> <9A2B> -<9A30> <9A30> -<9A36> <9A36> -<9A37> <9A37> -<9A40> <9A40> -<9A43> <9A43> -<9A45> <9A45> -<9A4D> <9A4D> -<9A55> <9A55> -<9A57> <9A57> -<9A5A> <9A5A> -<9A5B> <9A5B> -<9A5F> <9A5F> -<9A62> <9A62> -<9A65> <9A65> -<9A69> <9A69> -<9A6A> <9A6A> -<9AA8> <9AA8> -<9AB8> <9AB8> -<9AD3> <9AD3> -<9AD4> <9AD4> -<9AD8> <9AD8> -<9AE5> <9AE5> -<9AEE> <9AEE> -<9B1A> <9B1A> -<9B27> <9B27> -<9B2A> <9B2A> -<9B31> <9B31> -<9B3C> <9B3C> -<9B41> <9B41> -<9B42> <9B42> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> -endbfrange - -100 beginbfrange -<9B4F> <9B4F> -<9B54> <9B54> -<9B5A> <9B5A> -<9B6F> <9B6F> -<9B8E> <9B8E> -<9B91> <9B91> -<9B9F> <9B9F> -<9BAB> <9BAB> -<9BAE> <9BAE> -<9BC9> <9BC9> -<9BD6> <9BD6> -<9BE4> <9BE4> -<9BE8> <9BE8> -<9C0D> <9C0D> -<9C10> <9C10> -<9C12> <9C12> -<9C15> <9C15> -<9C25> <9C25> -<9C32> <9C32> -<9C3B> <9C3B> -<9C47> <9C47> -<9C49> <9C49> -<9C57> <9C57> -<9CE5> <9CE5> -<9CE7> <9CE7> -<9CE9> <9CE9> -<9CF3> <9CF3> -<9CF4> <9CF4> -<9CF6> <9CF6> -<9D09> <9D09> -<9D1B> <9D1B> -<9D26> <9D26> -<9D28> <9D28> -<9D3B> <9D3B> -<9D51> <9D51> -<9D5D> <9D5D> -<9D60> <9D60> -<9D61> <9D61> -<9D6C> <9D6C> -<9D72> <9D72> -<9DA9> <9DA9> -<9DAF> <9DAF> -<9DB4> <9DB4> -<9DC4> <9DC4> -<9DD7> <9DD7> -<9DF2> <9DF2> -<9DF8> <9DF8> -<9DF9> <9DF9> -<9DFA> <9DFA> -<9E1A> <9E1A> -<9E1E> <9E1E> -<9E75> <9E75> -<9E79> <9E79> -<9E7D> <9E7D> -<9E7F> <9E7F> -<9E92> <9E92> -<9E93> <9E93> -<9E97> <9E97> -<9E9D> <9E9D> -<9E9F> <9E9F> -<9EA5> <9EA5> -<9EB4> <9EB4> -<9EB5> <9EB5> -<9EBB> <9EBB> -<9EBE> <9EBE> -<9EC3> <9EC3> -<9ECD> <9ECD> -<9ECE> <9ECE> -<9ED1> <9ED1> -<9ED4> <9ED4> -<9ED8> <9ED8> -<9EDB> <9EDB> -<9EDC> <9EDC> -<9EDE> <9EDE> -<9EE8> <9EE8> -<9EF4> <9EF4> -<9F07> <9F07> -<9F08> <9F08> -<9F0E> <9F0E> -<9F13> <9F13> -<9F20> <9F20> -<9F3B> <9F3B> -<9F4A> <9F4A> -<9F4B> <9F4B> -<9F4E> <9F4E> -<9F52> <9F52> -<9F5F> <9F5F> -<9F61> <9F61> -<9F67> <9F67> -<9F6A> <9F6A> -<9F6C> <9F6C> -<9F77> <9F77> -<9F8D> <9F8D> -<9F90> <9F90> -<9F95> <9F95> -<9F9C> <9F9C> - - <8141> - - <8143> -endbfrange - -100 beginbfrange - - <8145> - - <814A> - - <814B> - - <814D> - - <8150> - - <8157> - - <8158> - <8161> - - <8164> - - <8166> - - <8169> - - <8173> - - <8174> - - <817A> - <8181> - - <8183> - - <8186> - - <8199> - - <819B> - - <819D> - - <819E> - - <81A3> - - <81A4> - - <81A6> - - <81A9> - - <81AC> - - <81B3> - - <81B4> - - <81BA> - - <81BB> - - <81BD> - - <81C4> - - <81C5> - - <81C8> - - <81CA> - - <81CD> - - <81D0> - - <81D8> - - <81D9> - - <81E1> - - <81E3> - - <81E5> - - <81E6> - - <81E7> - - <81E9> - - <81EA> - - <81EB> - - <81F0> - - <81F2> - - <81F5> - - <81F6> -endbfrange - -100 beginbfrange - - <81FB> - - <81FC> - - <81FD> - <8241> - - <8245> - - <8248> - - <824B> - - <8253> - - <8255> - - <8261> - - <8263> - - <8266> - - <826D> - - <826E> - - <826F> - - <8275> - - <8278> - - <8281> - - <8289> - - <828A> - - <8292> - - <8294> - - <8296> - - <829A> - - <829B> - - <829C> - - <82A1> - - <82A3> - - <82A6> - - <82B1> - - <82B7> - - <82C9> - - <82D1> - - <82D3> - - <82D6> - - <82DD> - - <82DE> - - <82E6> - - <82E9> - - <82EC> - - <8341> - - <8343> - - - <8345> - - <834B> - - <834C> - - <834D> - - <8353> - <8361> - - <8374> - - <8376> - -endbfrange - -100 beginbfrange - <8378> - - <8379> - <8381> - - <8384> - - <8385> - - <8386> - - <8389> - - <838A> - - <838B> - - <838E> - - <838F> - - <8394> - - <8395> - - <8398> - - <839A> - - <839C> - - <839F> - - - <83A6> - - <83A7> - - <83AD> - - <83B3> - - <83E2> - - <83E3> - - <83E6> - - <83ED> - - <83EE> - - <83F4> - - <83F6> - <8441> - - <8443> - - <8445> - - <8446> - - <844C> - - <844F> - - <8452> - <8455> - <8461> - - <8462> - - <8466> - - <8468> - <8481> - - <8489> - - <848B> - - <848C> - - <848D> - - <8494> - - <8495> - - <8496> - - <849A> - - <84A0> - - <84AB> - - <84B1> - -endbfrange - -100 beginbfrange - <84C4> - - <84CA> - - <84CD> - - <84D0> - - <84D7> - - <84DA> - - <84E0> - - <84FB> - - <84FD> - <8541> - - <8542> - - <8548> - - <8549> - - <854A> - - <854F> - - <8556> - <8561> - - <8567> - - <856D> - - <856F> - - <8572> - - <8579> - - <8581> - - <8588> - - <858B> - - <858E> - - <8595> - - <859F> - - <85BA> - - <85BC> - - <85BD> - - <85BE> - - <85BF> - - <85C3> - - <85C4> - - <85C5> - - <85C8> - - <85E6> - - <85E8> - - <85EB> - - <85F2> - - <85F3> - - <85F4> - - <85FA> - - <85FB> - - <85FD> - <8641> - - <8644> - - <8645> - - <8646> - - <8647> - - <8649> -endbfrange - -100 beginbfrange - - <864C> - - <8653> - - <8654> - - <865A> - <8661> - - <8662> - - <8665> - - <866C> - - <8670> - <8681> - <8690> - - <8698> - - <8699> - - <869C> - - <869D> - - <86A1> - - <86A2> - - <86A7> - - <86A9> - - <86AC> - - <86B3> - - <86B4> - - <86BA> - - <86BC> - - <86BF> - - <86C6> - - <86C8> - - <86CA> - - <86CD> - - <86D0> - - <86E7> - - <86E9> - - <86EC> - - <86ED> - - <86F2> - - <86F3> - - <86F4> - - <86F8> - - <86FB> - - <86FE> - <8741> - - <874B> - <8761> - - <8774> - - <8777> - - <877A> - <8781> - - <8787> - - <8788> - - <8790> - - <8792> - - <8795> - - <879D> -endbfrange - -100 beginbfrange - - <879E> - - <879F> - <87A1> - - <87A5> - - <87A7> - - <87A9> - - <87B0> - - <87B1> - - <87B2> - - <87B8> - - <87CB> - - <87D2> - - <87ED> - - <87F0> - - <87F3> - - <87FA> - <8841> - - <8846> - - <884C> - - <8853> - - <8856> - <8861> - - <8862> - - <8864> - - <8867> - - <886C> - - <886D> - - <886E> - - <8871> - - <8872> - - <8875> - - <8878> - <8881> - - <8891> - - <8893> - - <8896> - - <8897> - - <889C> - - <889D> - - <889E> - - <88A2> - - <88A3> - - <88A4> - - <88A6> - - <88A9> - - <88AA> - - - <88AD> - - <88AF> - - <88B2> - - <88B9> - - <88BA> - -endbfrange - -100 beginbfrange - <88C0> - - <88F7> - - <88F8> - - <88FA> - - <88FB> - - <8941> - - <8942> - - <8943> - - <8944> - - <8946> - - <8947> - - <8949> - - <894C> - - <8953> - - <8954> - - <895A> - <8961> - - <8963> - - <8966> - - <8971> - - <8977> - - <897A> - <8981> - - <8997> - - <8999> - - <899B> - - <899C> - - <899D> - - <89A0> - - <89A1> - - <89A2> - - <89A3> - - <89A4> - - <89A6> - - <89A9> - - <89AC> - - <89BF> - <89C2> - - <89D2> - - <89D9> - - <89DC> - - <89DF> - - <89E6> - - <89E7> - - <89EF> - <8A41> - - <8A4C> - - <8A4E> - - <8A51> - - <8A58> - - <8A59> - - <8A5A> - <8A61> -endbfrange - -100 beginbfrange - - <8A66> - - <8A79> - <8A81> - - <8A86> - - <8A9A> - - <8AA0> - - <8AA3> - - <8AA6> - - <8AAE> - - <8AAF> - - <8AB0> - - <8AB6> - - <8AB9> - - <8ABC> - - <8AC3> - - <8AC7> - - <8ACD> - - <8ACF> - - <8AD1> - - <8AD2> - - <8AD7> - - <8AD8> - - <8AD9> - - <8ADF> - <8AE6> - - <8AFA> - - <8AFC> - - <8AFE> - <8B41> - - <8B47> - - <8B48> - - <8B4D> - - <8B4F> - - <8B52> - - <8B59> - - <8B5A> - <8B61> - - <8B65> - - <8B67> - - <8B6A> - - <8B71> - - <8B72> - <8B81> - - <8BB6> - - <8BB8> - - <8BBB> - - <8BBC> - - <8BC0> - - <8BC1> - - <8BC6> - - <8BC8> - - <8BCB> - -endbfrange - -100 beginbfrange - <8BD2> - - <8BD3> - - <8BD9> - - <8BEC> - <8C41> - - <8C51> - - <8C53> - - <8C56> - <8C61> - - <8C68> - - <8C6E> - - <8C75> - <8C81> - - <8C8E> - - <8CA9> - - <8CAC> - - <8CDF> - - <8CE1> - - <8CE4> - - <8CEA> - - <8CEE> - <8D41> - - <8D52> - <8D61> - - <8D73> - - <8D76> - - <8D79> - <8D81> - - <8D86> - - <8D89> - - <8DAB> - - <8DAD> - - <8DAF> - - <8DB6> - - <8DB7> - - <8DBF> - - <8DC2> - - <8DC5> - - <8DCC> - - <8DD6> - - <8DD9> - - <8DDC> - - <8DE3> - - <8DE4> - - <8DE5> - - <8DEB> - - <8DED> - - <8DF0> - - <8DF7> - - <8DF8> - - - <8DFB> - - <8DFD> - <8E41> - -endbfrange - -100 beginbfrange - <8E42> - - <8E49> - - <8E4A> - - <8E50> - - <8E52> - <8E61> - - <8E66> - - <8E67> - <8E81> - - <8E8F> - - <8E91> - - <8E94> - - <8E9B> - - - <8E9C> - - <8EA1> - - <8EA3> - - <8EA6> - - <8EAD> - - <8EAE> - - <8EAF> - - <8EB5> - - <8EB7> - - <8EBA> - - <8EC1> - - <8EC2> - - <8EC8> - - <8ECB> - - <8ED7> - - <8ED8> - - <8EE0> - - <8EE2> - - <8EE5> - - <8EEC> - - <8EED> - - <8EEE> - - <8EF4> - - <8EF7> - <8F41> - - <8F49> - <8F61> - - <8F69> - - <8F70> - - <8F73> - - <8F76> - <8F81> - - <8F83> - - <8F84> - - <8F85> - - <8F8B> - - <8F8E> - - <8F91> - - <8F99> - -endbfrange - -100 beginbfrange - <8F9A> - - <8F9B> - - <8FA1> - - <8FA3> - - <8FA6> - - <8FAD> - - <8FAE> - - <8FAF> - <8FB1> - - <8FB5> - - <8FC8> - - <8FCF> - - <8FEA> - - <8FEC> - - <8FEF> - - <8FF6> - - <8FF8> - - <8FF9> - - <9041> - - <9043> - - <9046> - - <904D> - - <904E> - - <904F> - - <9055> - - <9057> - - <905A> - <9061> - - <9067> - - <9068> - - <9069> - - <906B> - <9081> - - <908E> - - <9090> - - <9093> - - <909A> - - <909B> - - <909C> - - <90A2> - - <90A4> - - <90A5> - - <90AA> - - <90AB> - - <90AC> - - <90AE> - - <90AF> - - <90B1> - - <90B4> - - <90BB> - - <90BC> - - <90C1> -endbfrange - -100 beginbfrange - - <90C7> - - <90D3> - - <90F5> - - <90F7> - - <90FA> - - <90FB> - <9141> - - <9142> - - <9143> - - <9144> - - <9148> - - <914A> - - <914D> - - <9154> - - <9155> - - <9161> - - <9163> - - <9166> - - <9170> - - <9171> - - <9175> - <9181> - - <9196> - - <9197> - - <919A> - - <919B> - - <91A0> - - <91A1> - - <91A2> - - <91A8> - - <91AB> - - <91BA> - - <91DC> - - <91DF> - - <91E2> - - <91EA> - - <91EB> - - <91EC> - - <91F2> - - <91F5> - - <91F8> - <9241> - - <9242> - - <9243> - - <924B> - - <924C> - - <924E> - - <9253> - - <9254> - - <9255> - - <9258> - -endbfrange - -100 beginbfrange - <9259> - <9261> - - <9262> - - <9265> - - <926D> - - <926E> - - <9276> - <9281> - - <9297> - - <929A> - - <929D> - - <92B0> - - <92B3> - - <92B6> - - <92BD> - - <92BF> - - <92C7> - - <92CA> - - <92CD> - - <92D4> - - <92D6> - - <92FA> - - <92FC> - - - <92FE> - - <9341> - - <9346> - - <9347> - - <9348> - - <9349> - - <934B> - - <934D> - - <9351> - - <9352> - - <9353> - - <9356> - - <9358> - - <935A> - <9361> - - <9363> - - <936A> - - <936B> - - <936E> - - <9370> - - <9372> - <9381> - - <9384> - - <93AA> - - <93AC> - - <93AE> - - <93AF> - - <93B4> - - <93B5> -endbfrange - -100 beginbfrange - - <93B6> - - <93BB> - - <93BD> - - <93BF> - - <93C6> - - <93C7> - - <93CD> - - <93CF> - - <93D2> - - <93DA> - - <93DB> - - <93DE> - - <93E0> - - <93E3> - - <93FA> - - <93FB> - - <93FE> - <9441> - <9443> - - <9447> - - <9448> - - <9449> - - <944F> - - <9452> - <9461> - - <9467> - - <946E> - <9481> - - <9487> - - <948E> - - <9490> - - <9493> - - <949A> - - <94A4> - - <94A7> - - <94BE> - - <94C0> - - <94C2> - - <94C7> - - <94C8> - - <94C9> - - <94CC> - - <94CD> - - <94D4> - - <94DF> - - <94E6> - <9541> - - <9543> - - <9545> - - <9548> - - <9554> - - <955A> - <9561> -endbfrange - -100 beginbfrange - - <9563> - - <9566> - - <956D> - - <956F> - - <9570> - - <9576> - - <9578> - - <9581> - - <9588> - - <9589> - - <95AD> - - <95AF> - - <95B2> - - <95B3> - - <95B8> - - <95B9> - - <95BA> - - <95BE> - - <95C0> - - <95C3> - - <95C4> - - <95C9> - - <95CA> - - <95CF> - - <95D1> - - <95D4> - - <95DB> - - <95DC> - - <95E2> - - <95F0> - <9641> - - <9659> - - <9661> - - <9663> - - <966A> - - <966C> - - <9672> - <9681> - <968B> - - <968C> - - <9692> - - <96A0> - - <96A1> - - <96C3> - - <96C5> - - <96C8> - - <96CF> - - <96D2> - <9741> - - <9752> - <9761> - - <9773> - <9781> -endbfrange - -100 beginbfrange - - <978D> - - <9793> - - <9795> - - <9798> - - <979F> - - <97A1> - - <97A2> - <97C0> - - <97FC> - <9841> - - <9852> - - <9858> - - <9861> - - <9864> - - <986B> - <9881> - - <9897> - - <9899> - - <989C> - - <98A3> - - <98A4> - - <98A5> - - <98AB> - - <98AC> - - <98AE> - - <98B3> - - <98B4> - - <98B7> - - <98B9> - - <98BB> - - <98BE> - - <98C5> - - <98C6> - - - <98CC> - - <98CE> - - <98D1> - - <98D8> - - <98D9> - - <98DA> - - <98E0> - - <98E3> - - <98E6> - - <98ED> - - <98F1> - - <98F7> - - <98F9> - - <98FA> - - <98FE> - - <9941> - - <9945> - - <9946> -endbfrange - -100 beginbfrange - - <9948> - - <994B> - - <9952> - - <9953> - - <9959> - - <9961> - - <9964> - - <996B> - - <996C> - - <9972> - - <9975> - - <9978> - <9981> - - <998A> - - <9990> - - <9991> - - <9994> - - <9995> - - <999A> - - <999B> - - <999C> - - <999F> - - <99A1> - - <99A3> - - <99A6> - - <99B2> - - <99B8> - - <99BB> - - <99BE> - - <99C5> - - <99C7> - - <99CE> - - <99D1> - - <99D4> - - <99DB> - - <99DC> - - <99E4> - - <99E6> - - <99E9> - - <99F0> - - <99F1> - - <99F2> - - <99F8> - - <99FA> - - <99FC> - <9A41> - - <9A45> - - <9A46> - - <9A47> - - <9A48> - - <9A49> -endbfrange - -100 beginbfrange - - <9A4A> - <9A61> - - <9A63> - - <9A6A> - - <9A6C> - - <9A6F> - - <9A76> - - <9A7A> - <9A81> - - <9A86> - - <9A88> - - <9A8B> - - <9A92> - - <9A93> - - <9A94> - - <9A9A> - - <9AA0> - - <9AA7> - - <9AA9> - - <9AAA> - - <9AB0> - - <9AB2> - - <9AB5> - - <9ABB> - - <9ABC> - - <9ABD> - - <9ADF> - - <9AE1> - - <9AE3> - - <9AE9> - - <9AEA> - - <9AEB> - - <9AEF> - - <9AF0> - - <9AF1> - - <9AF4> - - <9AFB> - - <9AFD> - <9B41> - - <9B44> - - <9B46> - - <9B49> - - <9B50> - - <9B52> - <9B61> - - <9B73> - <9B81> - - <9B9B> - - <9B9D> - - <9BA0> - - <9BA1> - - <9BA6> - -endbfrange - -100 beginbfrange - <9BA8> - - <9BAE> - - <9BB1> - - <9BB4> - - <9BE7> - - <9BFE> - <9C41> - - <9C42> - - <9C44> - - <9C45> - - <9C4A> - - <9C4D> - - <9C53> - - <9C55> - <9C61> - <9C62> - - <9C6A> - - <9C71> - <9C81> - - <9C8A> - - <9C91> - - <9C94> - - <9C97> - - <9C9E> - - <9CA8> - - <9CC3> - - <9CC5> - - <9CC8> - - <9CCF> - - <9CD2> - - <9CD8> - - <9CEB> - - <9CF2> - <9D41> - - <9D4F> - - <9D52> - <9D61> - <9D81> - - <9D8A> - - <9D90> - - <9D92> - - <9D95> - - <9D96> - - - <9D9A> - - <9DA4> - - <9DA7> - - <9DAA> - - <9DB1> - - <9DBC> - - <9DBE> - - <9DC1> - - <9DC8> - - <9DC9> - -endbfrange - -100 beginbfrange - <9DCA> - - <9DD0> - - <9DD2> - - <9DD3> - - <9DD7> - - <9DD8> - - <9DDB> - - <9DDC> - - <9DDE> - - <9DE1> - - <9DE8> - - <9DE9> - - <9DEF> - - <9DF1> - - <9DF4> - - <9DF6> - - <9DFA> - - <9DFB> - - <9DFC> - - <9E41> - - <9E42> - - <9E45> - - <9E48> - - <9E50> - - <9E5A> - <9E61> - - <9E62> - - <9E63> - - <9E68> - - <9E69> - - <9E6A> - - <9E6B> - - <9E6D> - - <9E70> - - <9E77> - - <9E78> - - <9E79> - <9E81> - - <9E85> - - <9E86> - - <9E89> - - <9E8A> - - - <9E8E> - - <9E91> - - <9E94> - - <9E97> - - <9E9E> - - <9E9F> - - <9EA6> - - <9EA8> - - <9EAB> -endbfrange - -100 beginbfrange - - <9EAC> - - <9EAE> - - <9EAF> - - <9EB0> - - <9EB1> - - <9EB5> - - <9EB7> - - <9EBA> - - <9EC1> - - <9EC2> - - <9EC8> - - <9ECA> - - <9ED5> - - <9ED7> - - <9ED8> - - <9EDE> - - <9EE0> - - <9EE3> - - <9EEA> - - <9EEB> - - <9EEC> - - <9EF2> - - <9EF4> - - <9EF7> - - <9EFE> - - <9F41> - - <9F42> - - <9F48> - - <9F4A> - - <9F4D> - - <9F52> - - <9F53> - - <9F54> - - <9F5A> - <9F61> - - <9F62> - - <9F65> - - <9F6C> - - <9F6E> - - - <9F74> - - <9F76> - - <9F79> - <9F81> - - <9F86> - - <9F89> - <9F8B> - - <9F8F> - - <9F91> - - <9F94> - - <9F9B> - - <9F9C> -endbfrange - -100 beginbfrange - - <9F9D> - - <9FA3> - - <9FA5> - - <9FA8> - - <9FAF> - - <9FB0> - - <9FB1> - - <9FB2> - - <9FB6> - - <9FB8> - - <9FBB> - - <9FC0> - - <9FC1> - - <9FC2> - - <9FC3> - - <9FC6> - - <9FC9> - - <9FD0> - - <9FD2> - - <9FDA> - - <9FDC> - - <9FDF> - - <9FE3> - - <9FE4> - - <9FE7> - - <9FE8> - - <9FEA> - - <9FEB> - - <9FEC> - - <9FF1> - - <9FF2> - - <9FF7> - - <9FF9> - - <9FFC> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -52 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UCS2-KSCpc-EUC b/Resources/cmap/UCS2-KSCpc-EUC deleted file mode 100644 index 62a0fa41bc4..00000000000 --- a/Resources/cmap/UCS2-KSCpc-EUC +++ /dev/null @@ -1,7076 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UCS2-KSCpc-EUC) -%%Title: (UCS2-KSCpc-EUC) -%%Version: 4.002 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (UCS2_KSCpc_EUC) def - /Supplement 1 def -end def - -/CMapName /UCS2-KSCpc-EUC def -/CMapVersion 4.002 def -/CMapType 1 def -/WMode 0 def - -1 begincodespacerange -<0000> -endcodespacerange - -100 beginbfrange -<0000> <007F> <00> -<0085> <009F> <85> -<00A0> <00A0> <80> -<00A1> <00A1> -<00A2> <00A3> -<00A4> <00A4> -<00A5> <00A5> -<00A7> <00A7> -<00A8> <00A8> -<00A9> <00A9> <83> -<00AA> <00AA> -<00AB> <00AB> -<00AC> <00AC> -<00AD> <00AD> -<00B0> <00B0> -<00B1> <00B1> -<00B2> <00B3> -<00B4> <00B4> -<00B6> <00B6> -<00B7> <00B7> -<00B8> <00B8> -<00B9> <00B9> -<00BA> <00BA> -<00BB> <00BB> -<00BC> <00BC> -<00BD> <00BD> -<00BE> <00BE> -<00BF> <00BF> -<00C6> <00C6> -<00D0> <00D0> -<00D7> <00D7> -<00D8> <00D8> -<00DE> <00DE> -<00DF> <00DF> -<00E6> <00E6> -<00F0> <00F0> -<00F7> <00F7> -<00F8> <00F8> -<00FE> <00FE> -<0111> <0111> -<0126> <0126> -<0127> <0127> -<0131> <0131> -<0132> <0132> -<0133> <0133> -<0138> <0138> -<013F> <013F> -<0140> <0140> -<0141> <0141> -<0142> <0142> -<0149> <0149> -<014A> <014A> -<014B> <014B> -<0152> <0152> -<0153> <0153> -<0166> <0166> -<0167> <0167> -<02BC> <02BC> -<02C7> <02C7> -<02D0> <02D0> -<02D8> <02D8> -<02D9> <02D9> -<02DA> <02DA> -<02DB> <02DB> -<02DC> <02DC> -<02DD> <02DD> -<0391> <03A1> -<03A3> <03A9> -<03B1> <03C1> -<03C3> <03C9> -<0401> <0401> -<0410> <0415> -<0416> <042F> -<0430> <0435> -<0436> <044F> -<0451> <0451> -<2010> <2010> <82> -<2013> <2014> -<2015> <2016> -<2018> <2019> -<201B> <201B> -<201C> <201D> -<201F> <201F> -<2020> <2021> -<2022> <2022> -<2025> <2026> -<2027> <2027> -<2030> <2030> -<2032> <2033> -<2034> <2034> -<2035> <2035> -<2036> <2036> -<2039> <203A> -<203B> <203B> -<203C> <203C> -<203E> <203E> -<2042> <2042> -<2074> <2074> -<207A> <207B> -<207C> <207C> -endbfrange - -100 beginbfrange -<207D> <207E> -<207F> <207F> -<2081> <2084> -<20A9> <20A9> <81> -<2103> <2103> -<2109> <2109> -<2113> <2113> -<2116> <2116> -<2121> <2121> -<2122> <2122> -<2126> <2126> -<212B> <212B> -<2153> <2154> -<215B> <215E> -<2160> <2169> -<2170> <2179> -<2190> <2191> -<2192> <2192> -<2193> <2194> -<2195> <2195> -<2196> <2196> -<2197> <2197> -<2198> <2198> -<2199> <2199> -<21B0> <21B0> -<21B1> <21B1> -<21B2> <21B2> -<21B3> <21B3> -<21B4> <21B4> -<21BC> <21BC> -<21C0> <21C0> -<21C4> <21C5> -<21CD> <21CD> -<21CF> <21CF> -<21D0> <21D0> -<21D1> <21D1> -<21D2> <21D2> -<21D3> <21D3> -<21D4> <21D4> -<21E0> <21E0> -<21E1> <21E1> -<21E2> <21E2> -<21E3> <21E3> -<21E6> <21E6> -<21E7> <21E7> -<21E8> <21E8> -<21E9> <21E9> -<2200> <2200> -<2202> <2202> -<2203> <2203> -<2206> <2206> -<2207> <2207> -<2208> <2208> -<2209> <2209> -<220B> <220B> -<220C> <220C> -<220F> <220F> -<2211> <2211> -<2213> <2213> -<221A> <221A> -<221D> <221D> -<221E> <221E> -<221F> <221F> -<2220> <2220> -<2222> <2222> -<2225> <2226> -<2227> <2228> -<2229> <2229> -<222A> <222A> -<222B> <222C> -<222E> <222E> -<2234> <2234> -<2235> <2235> -<2236> <2236> -<2237> <2237> -<223C> <223C> -<223D> <223D> -<2243> <2243> -<2245> <2245> -<2248> <2248> -<2250> <2250> -<2251> <2251> -<2252> <2252> -<2253> <2253> -<225A> <225A> -<2260> <2260> -<2261> <2261> -<2262> <2262> -<2264> <2265> -<2266> <2267> -<226A> <226B> -<226E> <226F> -<2270> <2273> -<2276> <2277> -<2279> <2279> -<227A> <227B> -<2280> <2281> -<2282> <2283> -<2284> <2284> -<2285> <2285> -endbfrange - -100 beginbfrange -<2286> <2287> -<228A> <228A> -<228B> <228B> -<2295> <2297> -<2299> <2299> -<22A3> <22A3> -<22A4> <22A4> -<22A5> <22A5> -<22BB> <22BC> -<22CE> <22CF> -<22DA> <22DB> -<22EE> <22EE> -<22EF> <22EF> -<2306> <2306> -<2312> <2312> -<2314> <2314> -<2460> <246E> -<246F> <2473> -<2474> <2482> -<2483> <2487> -<249C> <24B5> -<24B6> <24CF> -<24D0> <24E9> -<2500> <2500> -<2501> <2501> -<2502> <2502> -<2503> <2503> -<250C> <250C> -<250D> <250D> -<250E> <250E> -<250F> <250F> -<2510> <2510> -<2511> <2511> -<2512> <2512> -<2513> <2513> -<2514> <2514> -<2515> <2515> -<2516> <2516> -<2517> <2517> -<2518> <2518> -<2519> <2519> -<251A> <251A> -<251B> <251B> -<251C> <251C> -<251D> <251D> -<251E> <251F> -<2520> <2520> -<2521> <2522> -<2523> <2523> -<2524> <2524> -<2525> <2525> -<2526> <2527> -<2528> <2528> -<2529> <252A> -<252B> <252B> -<252C> <252C> -<252D> <252E> -<252F> <252F> -<2530> <2530> -<2531> <2532> -<2533> <2533> -<2534> <2534> -<2535> <2536> -<2537> <2537> -<2538> <2538> -<2539> <253A> -<253B> <253B> -<253C> <253C> -<253D> <253E> -<253F> <253F> -<2540> <2541> -<2542> <2542> -<2543> <254A> -<254B> <254B> -<2592> <2592> -<2595> <2595> -<25A0> <25A0> -<25A1> <25A1> -<25A3> <25A3> -<25A4> <25A5> -<25A6> <25A6> -<25A7> <25A7> -<25A8> <25A8> -<25A9> <25A9> -<25B1> <25B1> -<25B2> <25B2> -<25B3> <25B3> -<25B5> <25B5> -<25B6> <25B6> -<25B7> <25B7> -<25B9> <25B9> -<25BC> <25BC> -<25BD> <25BD> -<25BF> <25BF> -<25C0> <25C0> -<25C1> <25C1> -<25C3> <25C3> -<25C6> <25C6> -<25C7> <25C7> -<25C8> <25C8> -endbfrange - -100 beginbfrange -<25C9> <25C9> -<25CA> <25CA> -<25CB> <25CB> -<25CC> <25CC> -<25CE> <25CE> -<25CF> <25CF> -<25D0> <25D1> -<25E6> <25E6> -<25EF> <25EF> -<2605> <2605> -<2606> <2606> -<2609> <2609> -<260E> <260E> -<260F> <260F> -<261C> <261C> -<261D> <261D> -<261E> <261E> -<261F> <261F> -<262F> <262F> -<2640> <2640> -<2642> <2642> -<2660> <2661> -<2663> <2663> -<2664> <2664> -<2665> <2665> -<2667> <2667> -<2668> <2668> -<2669> <266A> -<266C> <266C> -<266D> <266D> -<266F> <266F> -<2716> <2716> -<271A> <271A> -<273D> <273D> -<2756> <2756> -<2776> <277F> -<278A> <2793> -<3000> <3002> -<3003> <3003> -<3008> <3011> -<3012> <3012> -<3013> <3013> -<3014> <3015> -<3016> <3019> -<301C> <301C> -<301E> <301F> -<3020> <3020> -<3036> <3036> -<3041> <3093> -<30A1> <30F6> -<30FB> <30FB> -<3131> <318E> -<3200> <321B> -<321C> <321C> -<3231> <3231> -<3239> <3239> -<3260> <327B> -<327F> <327F> -<328A> <328F> -<3290> <3290> -<3294> <3294> -<329E> <329E> -<32A5> <32A5> -<3380> <3384> -<3388> <3389> -<338A> <338C> -<338D> <338F> -<3390> <3394> -<3395> <3397> -<3398> <3398> -<3399> <33A2> -<33A3> <33A6> -<33A7> <33A8> -<33A9> <33AC> -<33AD> <33AF> -<33B0> <33B9> -<33BA> <33BF> -<33C0> <33C1> -<33C2> <33C2> -<33C3> <33C3> -<33C4> <33C4> -<33C5> <33C5> -<33C6> <33C6> -<33C7> <33C7> -<33C8> <33C8> -<33C9> <33C9> -<33CA> <33CA> -<33CB> <33CB> -<33CF> <33CF> -<33D0> <33D0> -<33D3> <33D3> -<33D6> <33D6> -<33D8> <33D8> -<33DB> <33DB> -<33DC> <33DC> -<33DD> <33DD> -<4E00> <4E00> -<4E01> <4E01> -<4E03> <4E03> -<4E07> <4E07> -endbfrange - -100 beginbfrange -<4E08> <4E08> -<4E09> <4E09> -<4E0A> <4E0A> -<4E0B> <4E0B> -<4E0D> <4E0D> -<4E11> <4E11> -<4E14> <4E14> -<4E15> <4E15> -<4E16> <4E16> -<4E18> <4E18> -<4E19> <4E19> -<4E1E> <4E1E> -<4E2D> <4E2D> -<4E32> <4E32> -<4E38> <4E38> -<4E39> <4E39> -<4E3B> <4E3B> -<4E42> <4E42> -<4E43> <4E43> -<4E45> <4E45> -<4E4B> <4E4B> -<4E4D> <4E4D> -<4E4E> <4E4E> -<4E4F> <4E4F> -<4E56> <4E56> -<4E58> <4E58> -<4E59> <4E59> -<4E5D> <4E5D> -<4E5E> <4E5E> -<4E5F> <4E5F> -<4E6B> <4E6B> -<4E6D> <4E6D> -<4E73> <4E73> -<4E76> <4E76> -<4E77> <4E77> -<4E7E> <4E7E> -<4E82> <4E82> -<4E86> <4E86> -<4E88> <4E88> -<4E8B> <4E8B> -<4E8C> <4E8C> -<4E8E> <4E8E> -<4E90> <4E90> -<4E91> <4E91> -<4E92> <4E92> -<4E94> <4E94> -<4E95> <4E95> -<4E98> <4E98> -<4E9B> <4E9B> -<4E9E> <4E9E> -<4EA1> <4EA1> -<4EA2> <4EA2> -<4EA4> <4EA4> -<4EA5> <4EA5> -<4EA6> <4EA6> -<4EA8> <4EA8> -<4EAB> <4EAB> -<4EAC> <4EAC> -<4EAD> <4EAD> -<4EAE> <4EAE> -<4EB6> <4EB6> -<4EBA> <4EBA> -<4EC0> <4EC0> -<4EC1> <4EC1> -<4EC4> <4EC4> -<4EC7> <4EC7> -<4ECA> <4ECA> -<4ECB> <4ECB> -<4ECD> <4ECD> -<4ED4> <4ED4> -<4ED5> <4ED5> -<4ED6> <4ED6> -<4ED7> <4ED7> -<4ED8> <4ED8> -<4ED9> <4ED9> -<4EDD> <4EDD> -<4EDF> <4EDF> -<4EE3> <4EE3> -<4EE4> <4EE4> -<4EE5> <4EE5> -<4EF0> <4EF0> -<4EF2> <4EF2> -<4EF6> <4EF6> -<4EF7> <4EF7> -<4EFB> <4EFB> -<4F01> <4F01> -<4F09> <4F09> -<4F0A> <4F0A> -<4F0B> <4F0B> -<4F0D> <4F0D> -<4F0E> <4F0E> -<4F0F> <4F0F> -<4F10> <4F10> -<4F11> <4F11> -<4F2F> <4F2F> -<4F34> <4F34> -<4F36> <4F36> -<4F38> <4F38> -<4F3A> <4F3A> -<4F3C> <4F3C> -endbfrange - -100 beginbfrange -<4F3D> <4F3D> -<4F43> <4F43> -<4F46> <4F46> -<4F47> <4F47> -<4F48> <4F48> -<4F4D> <4F4D> -<4F4E> <4F4E> -<4F4F> <4F4F> -<4F50> <4F50> -<4F51> <4F51> -<4F55> <4F55> -<4F59> <4F59> -<4F5A> <4F5A> -<4F5B> <4F5B> -<4F5C> <4F5C> -<4F69> <4F69> -<4F6F> <4F6F> -<4F70> <4F70> -<4F73> <4F73> -<4F76> <4F76> -<4F7A> <4F7A> -<4F7E> <4F7E> -<4F7F> <4F7F> -<4F81> <4F81> -<4F83> <4F83> -<4F84> <4F84> -<4F86> <4F86> -<4F88> <4F88> -<4F8A> <4F8A> -<4F8B> <4F8B> -<4F8D> <4F8D> -<4F8F> <4F8F> -<4F91> <4F91> -<4F96> <4F96> -<4F98> <4F98> -<4F9B> <4F9B> -<4F9D> <4F9D> -<4FAE> <4FAE> -<4FAF> <4FAF> -<4FB5> <4FB5> -<4FB6> <4FB6> -<4FBF> <4FBF> -<4FC2> <4FC2> -<4FC3> <4FC3> -<4FC4> <4FC4> -<4FC9> <4FC9> -<4FCA> <4FCA> -<4FCE> <4FCE> -<4FD1> <4FD1> -<4FD3> <4FD3> -<4FD4> <4FD4> -<4FD7> <4FD7> -<4FDA> <4FDA> -<4FDD> <4FDD> -<4FDF> <4FDF> -<4FE0> <4FE0> -<4FE1> <4FE1> -<4FEE> <4FEE> -<4FEF> <4FEF> -<4FF1> <4FF1> -<4FF3> <4FF3> -<4FF5> <4FF5> -<4FF8> <4FF8> -<4FFA> <4FFA> -<5002> <5002> -<5006> <5006> -<5009> <5009> -<500B> <500B> -<500D> <500D> -<5011> <5011> -<5012> <5012> -<5016> <5016> -<5019> <5019> -<501A> <501A> -<501C> <501C> -<501E> <501E> -<501F> <501F> -<5021> <5021> -<5023> <5023> -<5024> <5024> -<5026> <5026> -<5027> <5027> -<5028> <5028> -<502A> <502A> -<502B> <502B> -<502C> <502C> -<502D> <502D> -<503B> <503B> -<5043> <5043> -<5047> <5047> -<5048> <5048> -<5049> <5049> -<504F> <504F> -<5055> <5055> -<505A> <505A> -<505C> <505C> -<5065> <5065> -<5074> <5074> -<5075> <5075> -<5076> <5076> -endbfrange - -100 beginbfrange -<5078> <5078> -<5080> <5080> -<5085> <5085> -<508D> <508D> -<5091> <5091> -<5098> <5098> -<5099> <5099> -<50AC> <50AC> -<50AD> <50AD> -<50B2> <50B2> -<50B3> <50B3> -<50B5> <50B5> -<50B7> <50B7> -<50BE> <50BE> -<50C5> <50C5> -<50C9> <50C9> -<50CA> <50CA> -<50CF> <50CF> -<50D1> <50D1> -<50D5> <50D5> -<50D6> <50D6> -<50DA> <50DA> -<50DE> <50DE> -<50E5> <50E5> -<50E7> <50E7> -<50ED> <50ED> -<50F9> <50F9> -<50FB> <50FB> -<50FF> <50FF> -<5100> <5100> -<5101> <5101> -<5104> <5104> -<5106> <5106> -<5109> <5109> -<5112> <5112> -<511F> <511F> -<5121> <5121> -<512A> <512A> -<5132> <5132> -<5137> <5137> -<513A> <513A> -<513C> <513C> -<5140> <5140> -<5141> <5141> -<5143> <5143> -<5144> <5144> -<5145> <5145> -<5146> <5146> -<5147> <5147> -<5148> <5148> -<5149> <5149> -<514B> <514B> -<514C> <514C> -<514D> <514D> -<514E> <514E> -<5152> <5152> -<515C> <515C> -<5162> <5162> -<5165> <5165> -<5167> <5167> -<5168> <5168> -<5169> <5169> -<516A> <516A> -<516B> <516B> -<516C> <516C> -<516D> <516D> -<516E> <516E> -<5171> <5171> -<5175> <5175> -<5176> <5176> -<5177> <5177> -<5178> <5178> -<517C> <517C> -<5180> <5180> -<5186> <5186> -<518A> <518A> -<518D> <518D> -<5192> <5192> -<5195> <5195> -<5197> <5197> -<51A0> <51A0> -<51A5> <51A5> -<51AA> <51AA> -<51AC> <51AC> -<51B6> <51B6> -<51B7> <51B7> -<51BD> <51BD> -<51C4> <51C4> -<51C6> <51C6> -<51C9> <51C9> -<51CB> <51CB> -<51CC> <51CC> -<51CD> <51CD> -<51DC> <51DC> -<51DD> <51DD> -<51DE> <51DE> -<51E1> <51E1> -<51F0> <51F0> -<51F1> <51F1> -<51F6> <51F6> -endbfrange - -100 beginbfrange -<51F8> <51F8> -<51F9> <51F9> -<51FA> <51FA> -<51FD> <51FD> -<5200> <5200> -<5203> <5203> -<5206> <5206> -<5207> <5207> -<5208> <5208> -<520A> <520A> -<520E> <520E> -<5211> <5211> -<5217> <5217> -<521D> <521D> -<5224> <5224> -<5225> <5225> -<5229> <5229> -<522A> <522A> -<522E> <522E> -<5230> <5230> -<5236> <5236> -<5237> <5237> -<5238> <5238> -<5239> <5239> -<523A> <523A> -<523B> <523B> -<5243> <5243> -<5247> <5247> -<524A> <524A> -<524B> <524B> -<524C> <524C> -<524D> <524D> -<5254> <5254> -<5256> <5256> -<525B> <525B> -<525D> <525D> -<5261> <5261> -<5269> <5269> -<526A> <526A> -<526F> <526F> -<5272> <5272> -<5275> <5275> -<527D> <527D> -<527F> <527F> -<5283> <5283> -<5287> <5287> -<5288> <5288> -<5289> <5289> -<528D> <528D> -<5291> <5291> -<5292> <5292> -<529B> <529B> -<529F> <529F> -<52A0> <52A0> -<52A3> <52A3> -<52A4> <52A4> -<52A9> <52A9> -<52AA> <52AA> -<52AB> <52AB> -<52BE> <52BE> -<52C1> <52C1> -<52C3> <52C3> -<52C5> <52C5> -<52C7> <52C7> -<52C9> <52C9> -<52CD> <52CD> -<52D2> <52D2> -<52D5> <52D5> -<52D6> <52D6> -<52D8> <52D8> -<52D9> <52D9> -<52DB> <52DB> -<52DD> <52DD> -<52DE> <52DE> -<52DF> <52DF> -<52E2> <52E2> -<52E3> <52E3> -<52E4> <52E4> -<52F3> <52F3> -<52F5> <52F5> -<52F8> <52F8> -<52FA> <52FA> -<52FB> <52FB> -<52FE> <52FE> -<52FF> <52FF> -<5305> <5305> -<5308> <5308> -<530D> <530D> -<530F> <530F> -<5310> <5310> -<5315> <5315> -<5316> <5316> -<5317> <5317> -<5319> <5319> -<5320> <5320> -<5321> <5321> -<5323> <5323> -<532A> <532A> -<532F> <532F> -<5339> <5339> -endbfrange - -100 beginbfrange -<533F> <533F> -<5340> <5340> -<5341> <5341> -<5343> <5343> -<5344> <5344> -<5347> <5347> -<5348> <5348> -<5349> <5349> -<534A> <534A> -<534D> <534D> -<5351> <5351> -<5352> <5352> -<5353> <5353> -<5354> <5354> -<5357> <5357> -<535A> <535A> -<535C> <535C> -<535E> <535E> -<5360> <5360> -<5366> <5366> -<5368> <5368> -<536F> <536F> -<5370> <5370> -<5371> <5371> -<5374> <5374> -<5375> <5375> -<5377> <5377> -<537D> <537D> -<537F> <537F> -<5384> <5384> -<5393> <5393> -<5398> <5398> -<539A> <539A> -<539F> <539F> -<53A0> <53A0> -<53A5> <53A5> -<53A6> <53A6> -<53AD> <53AD> -<53BB> <53BB> -<53C3> <53C3> -<53C8> <53C8> -<53C9> <53C9> -<53CA> <53CA> -<53CB> <53CB> -<53CD> <53CD> -<53D4> <53D4> -<53D6> <53D6> -<53D7> <53D7> -<53DB> <53DB> -<53E1> <53E1> -<53E2> <53E2> -<53E3> <53E3> -<53E4> <53E4> -<53E5> <53E5> -<53E9> <53E9> -<53EA> <53EA> -<53EB> <53EB> -<53EC> <53EC> -<53ED> <53ED> -<53EF> <53EF> -<53F0> <53F0> -<53F1> <53F1> -<53F2> <53F2> -<53F3> <53F3> -<53F8> <53F8> -<5403> <5403> -<5404> <5404> -<5408> <5408> -<5409> <5409> -<540A> <540A> -<540C> <540C> -<540D> <540D> -<540E> <540E> -<540F> <540F> -<5410> <5410> -<5411> <5411> -<541B> <541B> -<541D> <541D> -<541F> <541F> -<5420> <5420> -<5426> <5426> -<5429> <5429> -<542B> <542B> -<5433> <5433> -<5438> <5438> -<5439> <5439> -<543B> <543B> -<543C> <543C> -<543E> <543E> -<5442> <5442> -<5448> <5448> -<544A> <544A> -<5451> <5451> -<5468> <5468> -<546A> <546A> -<5471> <5471> -<5473> <5473> -<5475> <5475> -<547B> <547B> -<547C> <547C> -endbfrange - -100 beginbfrange -<547D> <547D> -<5480> <5480> -<5486> <5486> -<548C> <548C> -<548E> <548E> -<5490> <5490> -<54A4> <54A4> -<54A8> <54A8> -<54AB> <54AB> -<54AC> <54AC> -<54B3> <54B3> -<54B8> <54B8> -<54BD> <54BD> -<54C0> <54C0> -<54C1> <54C1> -<54C4> <54C4> -<54C8> <54C8> -<54C9> <54C9> -<54E1> <54E1> -<54E5> <54E5> -<54E8> <54E8> -<54ED> <54ED> -<54EE> <54EE> -<54F2> <54F2> -<54FA> <54FA> -<5504> <5504> -<5506> <5506> -<5507> <5507> -<550E> <550E> -<5510> <5510> -<551C> <551C> -<552F> <552F> -<5531> <5531> -<5535> <5535> -<553E> <553E> -<5544> <5544> -<5546> <5546> -<554F> <554F> -<5553> <5553> -<5556> <5556> -<555E> <555E> -<5563> <5563> -<557C> <557C> -<5580> <5580> -<5584> <5584> -<5586> <5586> -<5587> <5587> -<5589> <5589> -<558A> <558A> -<5598> <5598> -<5599> <5599> -<559A> <559A> -<559C> <559C> -<559D> <559D> -<55A7> <55A7> -<55A9> <55A9> -<55AA> <55AA> -<55AB> <55AB> -<55AC> <55AC> -<55AE> <55AE> -<55C5> <55C5> -<55C7> <55C7> -<55D4> <55D4> -<55DA> <55DA> -<55DC> <55DC> -<55DF> <55DF> -<55E3> <55E3> -<55E4> <55E4> -<55FD> <55FD> -<55FE> <55FE> -<5606> <5606> -<5609> <5609> -<5614> <5614> -<5617> <5617> -<562F> <562F> -<5632> <5632> -<5634> <5634> -<5636> <5636> -<5653> <5653> -<5668> <5668> -<566B> <566B> -<5674> <5674> -<5686> <5686> -<56A5> <56A5> -<56AC> <56AC> -<56AE> <56AE> -<56B4> <56B4> -<56BC> <56BC> -<56CA> <56CA> -<56CD> <56CD> -<56D1> <56D1> -<56DA> <56DA> -<56DB> <56DB> -<56DE> <56DE> -<56E0> <56E0> -<56F0> <56F0> -<56F9> <56F9> -<56FA> <56FA> -<5703> <5703> -<5704> <5704> -endbfrange - -100 beginbfrange -<5708> <5708> -<570B> <570B> -<570D> <570D> -<5712> <5712> -<5713> <5713> -<5716> <5716> -<5718> <5718> -<571F> <571F> -<5728> <5728> -<572D> <572D> -<5730> <5730> -<573B> <573B> -<5740> <5740> -<5742> <5742> -<5747> <5747> -<574A> <574A> -<574D> <574D> -<574E> <574E> -<5750> <5750> -<5751> <5751> -<5761> <5761> -<5764> <5764> -<5766> <5766> -<576A> <576A> -<576E> <576E> -<5770> <5770> -<5775> <5775> -<577C> <577C> -<5782> <5782> -<5788> <5788> -<578B> <578B> -<5793> <5793> -<57A0> <57A0> -<57A2> <57A2> -<57A3> <57A3> -<57C3> <57C3> -<57C7> <57C7> -<57C8> <57C8> -<57CB> <57CB> -<57CE> <57CE> -<57DF> <57DF> -<57E0> <57E0> -<57F0> <57F0> -<57F4> <57F4> -<57F7> <57F7> -<57F9> <57F9> -<57FA> <57FA> -<57FC> <57FC> -<5800> <5800> -<5802> <5802> -<5805> <5805> -<5806> <5806> -<5808> <5808> -<5809> <5809> -<580A> <580A> -<581E> <581E> -<5821> <5821> -<5824> <5824> -<5827> <5827> -<582A> <582A> -<582F> <582F> -<5830> <5830> -<5831> <5831> -<5834> <5834> -<5835> <5835> -<583A> <583A> -<584A> <584A> -<584B> <584B> -<584F> <584F> -<5851> <5851> -<5854> <5854> -<5857> <5857> -<5858> <5858> -<585A> <585A> -<585E> <585E> -<5861> <5861> -<5862> <5862> -<5864> <5864> -<5875> <5875> -<5879> <5879> -<587C> <587C> -<587E> <587E> -<5883> <5883> -<5885> <5885> -<5889> <5889> -<5893> <5893> -<589C> <589C> -<589E> <589E> -<589F> <589F> -<58A8> <58A8> -<58A9> <58A9> -<58AE> <58AE> -<58B3> <58B3> -<58BA> <58BA> -<58BB> <58BB> -<58BE> <58BE> -<58C1> <58C1> -<58C5> <58C5> -<58C7> <58C7> -<58CE> <58CE> -endbfrange - -100 beginbfrange -<58D1> <58D1> -<58D3> <58D3> -<58D5> <58D5> -<58D8> <58D8> -<58D9> <58D9> -<58DE> <58DE> -<58DF> <58DF> -<58E4> <58E4> -<58EB> <58EB> -<58EC> <58EC> -<58EF> <58EF> -<58F9> <58F9> -<58FA> <58FA> -<58FB> <58FB> -<58FD> <58FD> -<590F> <590F> -<5914> <5914> -<5915> <5915> -<5916> <5916> -<5919> <5919> -<591A> <591A> -<591C> <591C> -<5922> <5922> -<5927> <5927> -<5929> <5929> -<592A> <592A> -<592B> <592B> -<592D> <592D> -<592E> <592E> -<5931> <5931> -<5937> <5937> -<593E> <593E> -<5944> <5944> -<5947> <5947> -<5948> <5948> -<5949> <5949> -<594E> <594E> -<594F> <594F> -<5950> <5950> -<5951> <5951> -<5954> <5954> -<5955> <5955> -<5957> <5957> -<595A> <595A> -<5960> <5960> -<5962> <5962> -<5967> <5967> -<596A> <596A> -<596B> <596B> -<596C> <596C> -<596D> <596D> -<596E> <596E> -<5973> <5973> -<5974> <5974> -<5978> <5978> -<597D> <597D> -<5982> <5982> -<5983> <5983> -<5984> <5984> -<598A> <598A> -<5993> <5993> -<5996> <5996> -<5997> <5997> -<5999> <5999> -<59A5> <59A5> -<59A8> <59A8> -<59AC> <59AC> -<59B9> <59B9> -<59BB> <59BB> -<59BE> <59BE> -<59C3> <59C3> -<59C6> <59C6> -<59C9> <59C9> -<59CB> <59CB> -<59D0> <59D0> -<59D1> <59D1> -<59D3> <59D3> -<59D4> <59D4> -<59D9> <59D9> -<59DA> <59DA> -<59DC> <59DC> -<59DD> <59DD> -<59E6> <59E6> -<59E8> <59E8> -<59EA> <59EA> -<59EC> <59EC> -<59EE> <59EE> -<59F8> <59F8> -<59FB> <59FB> -<59FF> <59FF> -<5A01> <5A01> -<5A03> <5A03> -<5A11> <5A11> -<5A18> <5A18> -<5A1B> <5A1B> -<5A1C> <5A1C> -<5A1F> <5A1F> -<5A20> <5A20> -<5A25> <5A25> -<5A29> <5A29> -endbfrange - -100 beginbfrange -<5A36> <5A36> -<5A3C> <5A3C> -<5A41> <5A41> -<5A46> <5A46> -<5A49> <5A49> -<5A5A> <5A5A> -<5A62> <5A62> -<5A66> <5A66> -<5A92> <5A92> -<5A9A> <5A9A> -<5A9B> <5A9B> -<5AA4> <5AA4> -<5AC1> <5AC1> -<5AC2> <5AC2> -<5AC4> <5AC4> -<5AC9> <5AC9> -<5ACC> <5ACC> -<5AE1> <5AE1> -<5AE6> <5AE6> -<5AE9> <5AE9> -<5B05> <5B05> -<5B09> <5B09> -<5B0B> <5B0B> -<5B0C> <5B0C> -<5B16> <5B16> -<5B2A> <5B2A> -<5B40> <5B40> -<5B43> <5B43> -<5B50> <5B50> -<5B51> <5B51> -<5B54> <5B54> -<5B55> <5B55> -<5B57> <5B57> -<5B58> <5B58> -<5B5A> <5B5A> -<5B5C> <5B5C> -<5B5D> <5B5D> -<5B5F> <5B5F> -<5B63> <5B63> -<5B64> <5B64> -<5B69> <5B69> -<5B6B> <5B6B> -<5B70> <5B70> -<5B71> <5B71> -<5B75> <5B75> -<5B78> <5B78> -<5B7A> <5B7A> -<5B7C> <5B7C> -<5B85> <5B85> -<5B87> <5B87> -<5B88> <5B88> -<5B89> <5B89> -<5B8B> <5B8B> -<5B8C> <5B8C> -<5B8F> <5B8F> -<5B93> <5B93> -<5B95> <5B95> -<5B96> <5B96> -<5B97> <5B97> -<5B98> <5B98> -<5B99> <5B99> -<5B9A> <5B9A> -<5B9B> <5B9B> -<5B9C> <5B9C> -<5BA2> <5BA2> -<5BA3> <5BA3> -<5BA4> <5BA4> -<5BA5> <5BA5> -<5BA6> <5BA6> -<5BAC> <5BAC> -<5BAE> <5BAE> -<5BB0> <5BB0> -<5BB3> <5BB3> -<5BB4> <5BB4> -<5BB5> <5BB5> -<5BB6> <5BB6> -<5BB8> <5BB8> -<5BB9> <5BB9> -<5BBF> <5BBF> -<5BC0> <5BC0> -<5BC2> <5BC2> -<5BC3> <5BC3> -<5BC4> <5BC4> -<5BC5> <5BC5> -<5BC6> <5BC6> -<5BC7> <5BC7> -<5BCC> <5BCC> -<5BD0> <5BD0> -<5BD2> <5BD2> -<5BD3> <5BD3> -<5BD4> <5BD4> -<5BD7> <5BD7> -<5BDE> <5BDE> -<5BDF> <5BDF> -<5BE1> <5BE1> -<5BE2> <5BE2> -<5BE4> <5BE4> -<5BE5> <5BE5> -<5BE6> <5BE6> -<5BE7> <5BE7> -endbfrange - -100 beginbfrange -<5BE8> <5BE8> -<5BE9> <5BE9> -<5BEB> <5BEB> -<5BEC> <5BEC> -<5BEE> <5BEE> -<5BEF> <5BEF> -<5BF5> <5BF5> -<5BF6> <5BF6> -<5BF8> <5BF8> -<5BFA> <5BFA> -<5C01> <5C01> -<5C04> <5C04> -<5C07> <5C07> -<5C08> <5C08> -<5C09> <5C09> -<5C0A> <5C0A> -<5C0B> <5C0B> -<5C0D> <5C0D> -<5C0E> <5C0E> -<5C0F> <5C0F> -<5C11> <5C11> -<5C16> <5C16> -<5C19> <5C19> -<5C24> <5C24> -<5C28> <5C28> -<5C31> <5C31> -<5C38> <5C38> -<5C39> <5C39> -<5C3A> <5C3A> -<5C3B> <5C3B> -<5C3C> <5C3C> -<5C3E> <5C3E> -<5C3F> <5C3F> -<5C40> <5C40> -<5C45> <5C45> -<5C46> <5C46> -<5C48> <5C48> -<5C4B> <5C4B> -<5C4D> <5C4D> -<5C4E> <5C4E> -<5C51> <5C51> -<5C55> <5C55> -<5C5B> <5C5B> -<5C60> <5C60> -<5C62> <5C62> -<5C64> <5C64> -<5C65> <5C65> -<5C6C> <5C6C> -<5C6F> <5C6F> -<5C71> <5C71> -<5C79> <5C79> -<5C90> <5C90> -<5C91> <5C91> -<5CA1> <5CA1> -<5CA9> <5CA9> -<5CAB> <5CAB> -<5CAC> <5CAC> -<5CB1> <5CB1> -<5CB3> <5CB3> -<5CB5> <5CB5> -<5CB7> <5CB7> -<5CB8> <5CB8> -<5CBA> <5CBA> -<5CBE> <5CBE> -<5CC0> <5CC0> -<5CD9> <5CD9> -<5CE0> <5CE0> -<5CE8> <5CE8> -<5CEF> <5CF0> -<5CF4> <5CF4> -<5CF6> <5CF6> -<5CFB> <5CFB> -<5CFD> <5CFD> -<5D07> <5D07> -<5D0D> <5D0D> -<5D0E> <5D0E> -<5D11> <5D11> -<5D14> <5D14> -<5D16> <5D16> -<5D17> <5D17> -<5D19> <5D19> -<5D27> <5D27> -<5D29> <5D29> -<5D4B> <5D4B> -<5D4C> <5D4C> -<5D50> <5D50> -<5D69> <5D69> -<5D6C> <5D6C> -<5D6F> <5D6F> -<5D87> <5D87> -<5D8B> <5D8B> -<5D9D> <5D9D> -<5DA0> <5DA0> -<5DA2> <5DA2> -<5DAA> <5DAA> -<5DB8> <5DB8> -<5DBA> <5DBA> -<5DBC> <5DBC> -<5DBD> <5DBD> -<5DCD> <5DCD> -endbfrange - -100 beginbfrange -<5DD2> <5DD2> -<5DD6> <5DD6> -<5DDD> <5DDD> -<5DDE> <5DDE> -<5DE1> <5DE1> -<5DE2> <5DE2> -<5DE5> <5DE5> -<5DE6> <5DE6> -<5DE7> <5DE7> -<5DE8> <5DE8> -<5DEB> <5DEB> -<5DEE> <5DEE> -<5DF1> <5DF1> -<5DF2> <5DF2> -<5DF3> <5DF3> -<5DF4> <5DF4> -<5DF7> <5DF7> -<5DFD> <5DFD> -<5DFE> <5DFE> -<5E02> <5E02> -<5E03> <5E03> -<5E06> <5E06> -<5E0C> <5E0C> -<5E11> <5E11> -<5E16> <5E16> -<5E19> <5E19> -<5E1B> <5E1B> -<5E1D> <5E1D> -<5E25> <5E25> -<5E2B> <5E2B> -<5E2D> <5E2D> -<5E33> <5E33> -<5E36> <5E36> -<5E38> <5E38> -<5E3D> <5E3D> -<5E3F> <5E3F> -<5E40> <5E40> -<5E44> <5E44> -<5E45> <5E45> -<5E47> <5E47> -<5E4C> <5E4C> -<5E55> <5E55> -<5E5F> <5E5F> -<5E61> <5E61> -<5E62> <5E62> -<5E63> <5E63> -<5E72> <5E72> -<5E73> <5E73> -<5E74> <5E74> -<5E77> <5E77> -<5E78> <5E78> -<5E79> <5E79> -<5E7B> <5E7B> -<5E7C> <5E7D> -<5E7E> <5E7E> -<5E84> <5E84> -<5E87> <5E87> -<5E8A> <5E8A> -<5E8F> <5E8F> -<5E95> <5E95> -<5E97> <5E97> -<5E9A> <5E9A> -<5E9C> <5E9C> -<5EA0> <5EA0> -<5EA6> <5EA6> -<5EA7> <5EA7> -<5EAB> <5EAB> -<5EAD> <5EAD> -<5EB5> <5EB5> -<5EB6> <5EB6> -<5EB7> <5EB7> -<5EB8> <5EB8> -<5EBE> <5EBE> -<5EC2> <5EC2> -<5EC8> <5EC8> -<5EC9> <5EC9> -<5ECA> <5ECA> -<5ED0> <5ED0> -<5ED3> <5ED3> -<5ED6> <5ED6> -<5EDA> <5EDA> -<5EDB> <5EDB> -<5EDF> <5EDF> -<5EE0> <5EE0> -<5EE2> <5EE2> -<5EE3> <5EE3> -<5EEC> <5EEC> -<5EF3> <5EF3> -<5EF6> <5EF6> -<5EF7> <5EF7> -<5EFA> <5EFA> -<5EFB> <5EFB> -<5F01> <5F01> -<5F04> <5F04> -<5F0A> <5F0A> -<5F0F> <5F0F> -<5F11> <5F11> -<5F13> <5F13> -<5F14> <5F14> -<5F15> <5F15> -endbfrange - -100 beginbfrange -<5F17> <5F17> -<5F18> <5F18> -<5F1B> <5F1B> -<5F1F> <5F1F> -<5F26> <5F26> -<5F27> <5F27> -<5F29> <5F29> -<5F31> <5F31> -<5F35> <5F35> -<5F3A> <5F3A> -<5F3C> <5F3C> -<5F48> <5F48> -<5F4A> <5F4A> -<5F4C> <5F4C> -<5F4E> <5F4E> -<5F56> <5F56> -<5F57> <5F57> -<5F59> <5F59> -<5F5B> <5F5B> -<5F62> <5F62> -<5F66> <5F66> -<5F67> <5F67> -<5F69> <5F69> -<5F6A> <5F6A> -<5F6B> <5F6B> -<5F6C> <5F6C> -<5F6D> <5F6D> -<5F70> <5F70> -<5F71> <5F71> -<5F77> <5F77> -<5F79> <5F79> -<5F7C> <5F7C> -<5F7F> <5F7F> -<5F80> <5F80> -<5F81> <5F81> -<5F85> <5F85> -<5F87> <5F87> -<5F8A> <5F8A> -<5F8B> <5F8B> -<5F8C> <5F8C> -<5F90> <5F90> -<5F91> <5F91> -<5F92> <5F92> -<5F97> <5F97> -<5F98> <5F98> -<5F99> <5F99> -<5F9E> <5F9E> -<5FA0> <5FA0> -<5FA1> <5FA1> -<5FA8> <5FA8> -<5FA9> <5FA9> -<5FAA> <5FAA> -<5FAE> <5FAE> -<5FB5> <5FB5> -<5FB7> <5FB7> -<5FB9> <5FB9> -<5FBD> <5FBD> -<5FC3> <5FC3> -<5FC5> <5FC5> -<5FCC> <5FCC> -<5FCD> <5FCD> -<5FD6> <5FD6> -<5FD7> <5FD7> -<5FD8> <5FD9> -<5FE0> <5FE0> -<5FEB> <5FEB> -<5FF5> <5FF5> -<5FFD> <5FFD> -<5FFF> <5FFF> -<600F> <600F> -<6012> <6012> -<6016> <6016> -<601C> <601C> -<601D> <601D> -<6020> <6020> -<6021> <6021> -<6025> <6025> -<6027> <6027> -<6028> <6028> -<602A> <602A> -<602F> <602F> -<6041> <6041> -<6042> <6042> -<6043> <6043> -<604D> <604D> -<6050> <6050> -<6052> <6052> -<6055> <6055> -<6059> <6059> -<605D> <605D> -<6062> <6062> -<6063> <6063> -<6064> <6064> -<6065> <6065> -<6068> <6068> -<6069> <6069> -<606A> <606A> -<606C> <606C> -<606D> <606D> -<606F> <606F> -endbfrange - -100 beginbfrange -<6070> <6070> -<6085> <6085> -<6089> <6089> -<608C> <608C> -<608D> <608D> -<6094> <6094> -<6096> <6096> -<609A> <609A> -<609B> <609B> -<609F> <609F> -<60A0> <60A0> -<60A3> <60A3> -<60A4> <60A4> -<60A7> <60A7> -<60B0> <60B0> -<60B2> <60B2> -<60B3> <60B3> -<60B4> <60B4> -<60B6> <60B6> -<60B8> <60B8> -<60BC> <60BC> -<60BD> <60BD> -<60C5> <60C5> -<60C7> <60C7> -<60D1> <60D1> -<60DA> <60DA> -<60DC> <60DC> -<60DF> <60DF> -<60E0> <60E0> -<60E1> <60E1> -<60F0> <60F0> -<60F1> <60F1> -<60F3> <60F3> -<60F6> <60F6> -<60F9> <60F9> -<60FA> <60FA> -<60FB> <60FB> -<6101> <6101> -<6106> <6106> -<6108> <6109> -<610D> <610D> -<610E> <610E> -<610F> <610F> -<6115> <6115> -<611A> <611A> -<611B> <611B> -<611F> <611F> -<6127> <6127> -<6130> <6130> -<6134> <6134> -<6137> <6137> -<613C> <613C> -<613E> <613E> -<613F> <613F> -<6142> <6142> -<6144> <6144> -<6147> <6147> -<6148> <6148> -<614A> <614A> -<614B> <614B> -<614C> <614C> -<6153> <6153> -<6155> <6155> -<6158> <6159> -<615D> <615D> -<615F> <615F> -<6162> <6162> -<6163> <6163> -<6164> <6164> -<6167> <6167> -<6168> <6168> -<616B> <616B> -<616E> <616E> -<6170> <6170> -<6176> <6176> -<6177> <6177> -<617D> <617D> -<617E> <617E> -<6181> <6181> -<6182> <6182> -<618A> <618A> -<618E> <618E> -<6190> <6190> -<6191> <6191> -<6194> <6194> -<6198> <6198> -<6199> <6199> -<619A> <619A> -<61A4> <61A4> -<61A7> <61A7> -<61A9> <61A9> -<61AB> <61AB> -<61AC> <61AC> -<61AE> <61AE> -<61B2> <61B2> -<61B6> <61B6> -<61BA> <61BA> -<61BE> <61BE> -<61C3> <61C3> -<61C7> <61C7> -endbfrange - -100 beginbfrange -<61C8> <61C8> -<61C9> <61C9> -<61CA> <61CA> -<61CB> <61CB> -<61E6> <61E6> -<61F2> <61F2> -<61F6> <61F6> -<61F7> <61F7> -<61F8> <61F8> -<61FA> <61FA> -<61FC> <61FC> -<61FF> <61FF> -<6200> <6200> -<6207> <6207> -<6208> <6208> -<620A> <620A> -<620C> <620C> -<620D> <620D> -<620E> <620E> -<6210> <6210> -<6211> <6211> -<6212> <6212> -<6216> <6216> -<621A> <621A> -<621F> <621F> -<6221> <6221> -<622A> <622A> -<622E> <622E> -<6230> <6230> -<6231> <6231> -<6234> <6234> -<6236> <6236> -<623E> <623E> -<623F> <623F> -<6240> <6240> -<6241> <6241> -<6247> <6247> -<6248> <6248> -<6249> <6249> -<624B> <624B> -<624D> <624D> -<6253> <6253> -<6258> <6258> -<626E> <626E> -<6271> <6271> -<6276> <6276> -<6279> <6279> -<627C> <627C> -<627F> <627F> -<6280> <6280> -<6284> <6284> -<6289> <6289> -<628A> <628A> -<6291> <6291> -<6292> <6292> -<6295> <6295> -<6297> <6297> -<6298> <6298> -<629B> <629B> -<62AB> <62AB> -<62B1> <62B1> -<62B5> <62B5> -<62B9> <62B9> -<62BC> <62BC> -<62BD> <62BD> -<62C2> <62C2> -<62C7> <62C7> -<62C8> <62C8> -<62C9> <62C9> -<62CC> <62CC> -<62CD> <62CD> -<62CF> <62CF> -<62D0> <62D0> -<62D2> <62D2> -<62D3> <62D3> -<62D4> <62D4> -<62D6> <62D6> -<62D7> <62D7> -<62D8> <62D8> -<62D9> <62D9> -<62DB> <62DB> -<62DC> <62DC> -<62EC> <62EC> -<62ED> <62ED> -<62EE> <62EE> -<62EF> <62EF> -<62F1> <62F1> -<62F3> <62F3> -<62F7> <62F7> -<62FE> <62FE> -<62FF> <62FF> -<6301> <6301> -<6307> <6307> -<6309> <6309> -<6311> <6311> -<632B> <632B> -<632F> <632F> -<633A> <633A> -<633B> <633B> -<633D> <633D> -endbfrange - -100 beginbfrange -<633E> <633E> -<6349> <6349> -<634C> <634C> -<634F> <634F> -<6350> <6350> -<6355> <6355> -<6367> <6367> -<6368> <6368> -<636E> <636E> -<6372> <6372> -<6377> <6377> -<637A> <637A> -<637B> <637B> -<637F> <637F> -<6383> <6383> -<6388> <6388> -<6389> <6389> -<638C> <638C> -<6392> <6392> -<6396> <6396> -<6398> <6398> -<639B> <639B> -<63A0> <63A0> -<63A1> <63A1> -<63A2> <63A2> -<63A5> <63A5> -<63A7> <63A7> -<63A8> <63A8> -<63A9> <63A9> -<63AA> <63AA> -<63C0> <63C0> -<63C4> <63C4> -<63C6> <63C6> -<63CF> <63CF> -<63D0> <63D0> -<63D6> <63D6> -<63DA> <63DA> -<63DB> <63DB> -<63E1> <63E1> -<63ED> <63ED> -<63EE> <63EE> -<63F4> <63F4> -<63F6> <63F6> -<63F7> <63F7> -<640D> <640D> -<640F> <640F> -<6414> <6414> -<6416> <6416> -<6417> <6417> -<641C> <641C> -<6422> <6422> -<642C> <642C> -<642D> <642D> -<643A> <643A> -<643E> <643E> -<6458> <6458> -<6460> <6460> -<6469> <6469> -<646F> <646F> -<6478> <6479> -<647A> <647A> -<6488> <6488> -<6491> <6491> -<6492> <6492> -<6493> <6493> -<649A> <649A> -<649E> <649E> -<64A4> <64A4> -<64A5> <64A5> -<64AB> <64AB> -<64AD> <64AD> -<64AE> <64AE> -<64B0> <64B0> -<64B2> <64B2> -<64BB> <64BB> -<64C1> <64C1> -<64C4> <64C4> -<64C5> <64C5> -<64C7> <64C7> -<64CA> <64CA> -<64CD> <64CD> -<64CE> <64CE> -<64D2> <64D2> -<64D4> <64D4> -<64D8> <64D8> -<64DA> <64DA> -<64E1> <64E1> -<64E2> <64E2> -<64E5> <64E5> -<64E6> <64E6> -<64E7> <64E7> -<64EC> <64EC> -<64F2> <64F2> -<64F4> <64F4> -<64FA> <64FA> -<64FE> <64FE> -<6500> <6500> -<6504> <6504> -<6518> <6518> -<651D> <651D> -endbfrange - -100 beginbfrange -<6523> <6523> -<652A> <652A> -<652B> <652B> -<652C> <652C> -<652F> <652F> -<6536> <6536> -<6537> <6537> -<6538> <6538> -<6539> <6539> -<653B> <653B> -<653E> <653E> -<653F> <653F> -<6545> <6545> -<6548> <6548> -<654D> <654D> -<654E> <654E> -<654F> <654F> -<6551> <6551> -<6556> <6556> -<6557> <6557> -<655E> <655E> -<6562> <6562> -<6563> <6563> -<6566> <6566> -<656C> <656C> -<656D> <656D> -<6572> <6572> -<6574> <6574> -<6575> <6575> -<6577> <6577> -<6578> <6578> -<657E> <657E> -<6582> <6582> -<6583> <6583> -<6585> <6585> -<6587> <6587> -<658C> <658C> -<6590> <6590> -<6591> <6591> -<6597> <6597> -<6599> <6599> -<659B> <659B> -<659C> <659C> -<659F> <659F> -<65A1> <65A1> -<65A4> <65A4> -<65A5> <65A5> -<65A7> <65A7> -<65AB> <65AB> -<65AC> <65AC> -<65AF> <65AF> -<65B0> <65B0> -<65B7> <65B7> -<65B9> <65B9> -<65BC> <65BC> -<65BD> <65BD> -<65C1> <65C1> -<65C5> <65C5> -<65CB> <65CB> -<65CC> <65CC> -<65CF> <65CF> -<65D2> <65D2> -<65D7> <65D7> -<65E0> <65E0> -<65E3> <65E3> -<65E5> <65E5> -<65E6> <65E6> -<65E8> <65E8> -<65E9> <65E9> -<65EC> <65EC> -<65ED> <65ED> -<65F1> <65F1> -<65F4> <65F4> -<65FA> <65FA> -<65FB> <65FC> -<65FD> <65FD> -<65FF> <65FF> -<6606> <6606> -<6607> <6607> -<6609> <6609> -<660A> <660A> -<660C> <660C> -<660E> <660E> -<660F> <660F> -<6610> <6610> -<6611> <6611> -<6613> <6613> -<6614> <6614> -<6615> <6615> -<661E> <661E> -<661F> <661F> -<6620> <6620> -<6625> <6625> -<6627> <6627> -<6628> <6628> -<662D> <662D> -<662F> <662F> -<6630> <6630> -<6631> <6631> -<6634> <6634> -endbfrange - -100 beginbfrange -<6636> <6636> -<663A> <663A> -<663B> <663B> -<6641> <6641> -<6642> <6642> -<6643> <6644> -<6649> <6649> -<664B> <664B> -<664F> <664F> -<6659> <6659> -<665B> <665B> -<665D> <665D> -<665E> <665E> -<665F> <665F> -<6664> <6664> -<6665> <6665> -<6666> <6666> -<6667> <6667> -<6668> <6668> -<6669> <6669> -<666B> <666B> -<666E> <666E> -<666F> <666F> -<6673> <6673> -<6674> <6674> -<6676> <6676> -<6677> <6677> -<6678> <6678> -<667A> <667A> -<6684> <6684> -<6687> <6687> -<6688> <6688> -<6689> <6689> -<668E> <668E> -<6690> <6690> -<6691> <6691> -<6696> <6696> -<6697> <6697> -<6698> <6698> -<669D> <669D> -<66A0> <66A0> -<66A2> <66A2> -<66AB> <66AB> -<66AE> <66AE> -<66B2> <66B2> -<66B3> <66B3> -<66B4> <66B4> -<66B9> <66B9> -<66BB> <66BB> -<66BE> <66BE> -<66C4> <66C4> -<66C6> <66C6> -<66C7> <66C7> -<66C9> <66C9> -<66D6> <66D6> -<66D9> <66D9> -<66DC> <66DC> -<66DD> <66DD> -<66E0> <66E0> -<66E6> <66E6> -<66F0> <66F0> -<66F2> <66F2> -<66F3> <66F3> -<66F4> <66F4> -<66F7> <66F7> -<66F8> <66F8> -<66F9> <66F9> -<66FA> <66FA> -<66FC> <66FC> -<66FE> <66FE> -<66FF> <66FF> -<6700> <6700> -<6703> <6703> -<6708> <6708> -<6709> <6709> -<670B> <670B> -<670D> <670D> -<6714> <6714> -<6715> <6715> -<6717> <6717> -<671B> <671B> -<671D> <671D> -<671E> <671F> -<6726> <6726> -<6727> <6727> -<6728> <6728> -<672A> <672A> -<672B> <672B> -<672C> <672C> -<672D> <672D> -<672E> <672E> -<6731> <6731> -<6734> <6734> -<6736> <6736> -<673A> <673A> -<673D> <673D> -<6746> <6746> -<6749> <6749> -<674E> <674E> -<674F> <674F> -endbfrange - -100 beginbfrange -<6750> <6750> -<6751> <6751> -<6753> <6753> -<6756> <6756> -<675C> <675C> -<675E> <675E> -<675F> <675F> -<676D> <676D> -<676F> <676F> -<6770> <6770> -<6771> <6771> -<6773> <6773> -<6775> <6775> -<6777> <6777> -<677B> <677B> -<677E> <677E> -<677F> <677F> -<6787> <6787> -<6789> <6789> -<678B> <678B> -<678F> <678F> -<6790> <6790> -<6793> <6793> -<6795> <6795> -<6797> <6797> -<679A> <679A> -<679C> <679C> -<679D> <679D> -<67AF> <67AF> -<67B0> <67B0> -<67B3> <67B3> -<67B6> <67B7> -<67B8> <67B8> -<67BE> <67BE> -<67C4> <67C4> -<67CF> <67CF> -<67D0> <67D0> -<67D1> <67D1> -<67D2> <67D2> -<67D3> <67D3> -<67D4> <67D4> -<67DA> <67DA> -<67DD> <67DD> -<67E9> <67E9> -<67EC> <67EC> -<67EF> <67EF> -<67F0> <67F0> -<67F1> <67F1> -<67F3> <67F3> -<67F4> <67F4> -<67F5> <67F5> -<67F6> <67F6> -<67FB> <67FB> -<67FE> <67FE> -<6812> <6812> -<6813> <6813> -<6816> <6816> -<6817> <6817> -<6821> <6821> -<6822> <6822> -<682A> <682A> -<682F> <682F> -<6838> <6838> -<6839> <6839> -<683C> <683C> -<683D> <683D> -<6840> <6840> -<6841> <6841> -<6842> <6842> -<6843> <6843> -<6848> <6848> -<684E> <684E> -<6850> <6850> -<6851> <6851> -<6853> <6853> -<6854> <6854> -<686D> <686D> -<6876> <6876> -<687F> <687F> -<6881> <6881> -<6885> <6885> -<688F> <688F> -<6893> <6893> -<6894> <6894> -<6897> <6897> -<689D> <689D> -<689F> <689F> -<68A1> <68A1> -<68A2> <68A2> -<68A7> <68A7> -<68A8> <68A8> -<68AD> <68AD> -<68AF> <68AF> -<68B0> <68B0> -<68B1> <68B1> -<68B3> <68B3> -<68B5> <68B5> -<68B6> <68B6> -<68C4> <68C4> -<68C5> <68C5> -endbfrange - -100 beginbfrange -<68C9> <68C9> -<68CB> <68CB> -<68CD> <68CD> -<68D2> <68D2> -<68D5> <68D5> -<68D7> <68D7> -<68D8> <68D8> -<68DA> <68DA> -<68DF> <68DF> -<68E0> <68E0> -<68E7> <68E7> -<68E8> <68E8> -<68EE> <68EE> -<68F2> <68F2> -<68F9> <68F9> -<68FA> <68FA> -<6900> <6900> -<6905> <6905> -<690D> <690D> -<690E> <690E> -<6912> <6912> -<6927> <6927> -<6930> <6930> -<693D> <693D> -<693F> <693F> -<694A> <694A> -<6953> <6953> -<6954> <6954> -<6955> <6955> -<6957> <6957> -<6959> <6959> -<695A> <695A> -<695E> <695E> -<6960> <6960> -<6961> <6962> -<6963> <6963> -<6968> <6968> -<696B> <696B> -<696D> <696D> -<696E> <696E> -<696F> <696F> -<6975> <6975> -<6977> <6977> -<6978> <6978> -<6979> <6979> -<6995> <6995> -<699B> <699B> -<699C> <699C> -<69A5> <69A5> -<69A7> <69A7> -<69AE> <69AE> -<69B4> <69B4> -<69BB> <69BB> -<69C1> <69C1> -<69C3> <69C3> -<69CB> <69CB> -<69CC> <69CC> -<69CD> <69CD> -<69D0> <69D0> -<69E8> <69E8> -<69EA> <69EA> -<69FB> <69FB> -<69FD> <69FD> -<69FF> <69FF> -<6A02> <6A02> -<6A0A> <6A0A> -<6A11> <6A11> -<6A13> <6A13> -<6A17> <6A17> -<6A19> <6A19> -<6A1E> <6A1E> -<6A1F> <6A1F> -<6A21> <6A21> -<6A23> <6A23> -<6A35> <6A35> -<6A38> <6A38> -<6A39> <6A39> -<6A3A> <6A3A> -<6A3D> <6A3D> -<6A44> <6A44> -<6A48> <6A48> -<6A4B> <6A4B> -<6A52> <6A52> -<6A53> <6A53> -<6A58> <6A58> -<6A59> <6A59> -<6A5F> <6A5F> -<6A61> <6A61> -<6A6B> <6A6B> -<6A80> <6A80> -<6A84> <6A84> -<6A89> <6A89> -<6A8D> <6A8D> -<6A8E> <6A8E> -<6A97> <6A97> -<6A9C> <6A9C> -<6AA2> <6AA2> -<6AA3> <6AA3> -<6AB3> <6AB3> -<6ABB> <6ABB> -endbfrange - -100 beginbfrange -<6AC2> <6AC2> -<6AC3> <6AC3> -<6AD3> <6AD3> -<6ADA> <6ADA> -<6ADB> <6ADB> -<6AF6> <6AF6> -<6AFB> <6AFB> -<6B04> <6B04> -<6B0A> <6B0A> -<6B0C> <6B0C> -<6B12> <6B12> -<6B16> <6B16> -<6B20> <6B20> -<6B21> <6B21> -<6B23> <6B23> -<6B32> <6B32> -<6B3A> <6B3A> -<6B3D> <6B3D> -<6B3E> <6B3E> -<6B46> <6B46> -<6B47> <6B47> -<6B4C> <6B4C> -<6B4E> <6B4E> -<6B50> <6B50> -<6B5F> <6B5F> -<6B61> <6B61> -<6B62> <6B62> -<6B63> <6B63> -<6B64> <6B64> -<6B65> <6B65> -<6B66> <6B66> -<6B6A> <6B6A> -<6B72> <6B72> -<6B77> <6B77> -<6B78> <6B78> -<6B7B> <6B7B> -<6B7F> <6B7F> -<6B83> <6B83> -<6B84> <6B84> -<6B86> <6B86> -<6B89> <6B89> -<6B8A> <6B8A> -<6B96> <6B96> -<6B98> <6B98> -<6B9E> <6B9E> -<6BAE> <6BAE> -<6BAF> <6BAF> -<6BB2> <6BB2> -<6BB5> <6BB5> -<6BB7> <6BB7> -<6BBA> <6BBA> -<6BBC> <6BBC> -<6BBF> <6BBF> -<6BC1> <6BC1> -<6BC5> <6BC5> -<6BC6> <6BC6> -<6BCB> <6BCB> -<6BCD> <6BCD> -<6BCF> <6BCF> -<6BD2> <6BD2> -<6BD3> <6BD3> -<6BD4> <6BD4> -<6BD6> <6BD8> -<6BDB> <6BDB> -<6BEB> <6BEB> -<6BEC> <6BEC> -<6C08> <6C08> -<6C0F> <6C0F> -<6C11> <6C11> -<6C13> <6C13> -<6C23> <6C23> -<6C34> <6C34> -<6C37> <6C37> -<6C38> <6C38> -<6C3E> <6C3E> -<6C40> <6C40> -<6C41> <6C41> -<6C42> <6C42> -<6C4E> <6C4E> -<6C50> <6C50> -<6C55> <6C55> -<6C57> <6C57> -<6C5A> <6C5A> -<6C5D> <6C5D> -<6C5E> <6C5E> -<6C5F> <6C5F> -<6C60> <6C60> -<6C68> <6C68> -<6C6A> <6C6A> -<6C6D> <6C6D> -<6C70> <6C70> -<6C72> <6C72> -<6C76> <6C76> -<6C7A> <6C7A> -<6C7D> <6C7D> -<6C7E> <6C7E> -<6C81> <6C81> -<6C82> <6C82> -<6C83> <6C83> -<6C85> <6C85> -endbfrange - -100 beginbfrange -<6C86> <6C86> -<6C87> <6C87> -<6C88> <6C88> -<6C8C> <6C8C> -<6C90> <6C90> -<6C92> <6C92> -<6C93> <6C93> -<6C94> <6C94> -<6C95> <6C95> -<6C96> <6C96> -<6C99> <6C99> -<6C9A> <6C9A> -<6C9B> <6C9B> -<6CAB> <6CAB> -<6CAE> <6CAE> -<6CB3> <6CB3> -<6CB8> <6CB8> -<6CB9> <6CB9> -<6CBB> <6CBB> -<6CBC> <6CBC> -<6CBD> <6CBD> -<6CBE> <6CBE> -<6CBF> <6CBF> -<6CC1> <6CC1> -<6CC2> <6CC2> -<6CC4> <6CC4> -<6CC9> <6CC9> -<6CCA> <6CCA> -<6CCC> <6CCC> -<6CD3> <6CD3> -<6CD5> <6CD5> -<6CD7> <6CD7> -<6CDB> <6CDB> -<6CE1> <6CE1> -<6CE2> <6CE2> -<6CE3> <6CE3> -<6CE5> <6CE5> -<6CE8> <6CE8> -<6CEB> <6CEB> -<6CEE> <6CEE> -<6CEF> <6CEF> -<6CF0> <6CF0> -<6CF3> <6CF3> -<6D0B> <6D0B> -<6D0C> <6D0C> -<6D11> <6D11> -<6D17> <6D17> -<6D19> <6D19> -<6D1B> <6D1B> -<6D1E> <6D1E> -<6D25> <6D25> -<6D27> <6D27> -<6D29> <6D29> -<6D2A> <6D2A> -<6D32> <6D32> -<6D35> <6D35> -<6D36> <6D36> -<6D38> <6D38> -<6D39> <6D39> -<6D3B> <6D3B> -<6D3D> <6D3D> -<6D3E> <6D3E> -<6D41> <6D41> -<6D59> <6D59> -<6D5A> <6D5A> -<6D5C> <6D5C> -<6D63> <6D63> -<6D66> <6D66> -<6D69> <6D69> -<6D6A> <6D6A> -<6D6C> <6D6C> -<6D6E> <6D6E> -<6D74> <6D74> -<6D77> <6D77> -<6D78> <6D78> -<6D79> <6D79> -<6D7F> <6D7F> -<6D85> <6D85> -<6D87> <6D87> -<6D88> <6D88> -<6D89> <6D89> -<6D8C> <6D8C> -<6D8D> <6D8D> -<6D8E> <6D8E> -<6D91> <6D91> -<6D93> <6D93> -<6D95> <6D95> -<6DAF> <6DAF> -<6DB2> <6DB2> -<6DB5> <6DB5> -<6DC0> <6DC0> -<6DC3> <6DC3> -<6DC4> <6DC4> -<6DC5> <6DC5> -<6DC6> <6DC6> -<6DC7> <6DC7> -<6DCB> <6DCB> -<6DCF> <6DCF> -<6DD1> <6DD1> -<6DD8> <6DD8> -endbfrange - -100 beginbfrange -<6DD9> <6DD9> -<6DDA> <6DDA> -<6DDE> <6DDE> -<6DE1> <6DE1> -<6DE8> <6DE8> -<6DEA> <6DEA> -<6DEB> <6DEB> -<6DEE> <6DEE> -<6DF1> <6DF1> -<6DF3> <6DF3> -<6DF5> <6DF5> -<6DF7> <6DF7> -<6DF8> <6DF8> -<6DF9> <6DF9> -<6DFA> <6DFA> -<6DFB> <6DFB> -<6E17> <6E17> -<6E19> <6E19> -<6E1A> <6E1A> -<6E1B> <6E1B> -<6E1F> <6E1F> -<6E20> <6E20> -<6E21> <6E21> -<6E23> <6E23> -<6E24> <6E24> -<6E25> <6E25> -<6E26> <6E26> -<6E2B> <6E2B> -<6E2C> <6E2C> -<6E2D> <6E2D> -<6E2F> <6E2F> -<6E32> <6E32> -<6E34> <6E34> -<6E36> <6E36> -<6E38> <6E38> -<6E3A> <6E3A> -<6E3C> <6E3C> -<6E3D> <6E3D> -<6E3E> <6E3E> -<6E43> <6E43> -<6E44> <6E44> -<6E4A> <6E4A> -<6E4D> <6E4D> -<6E56> <6E56> -<6E58> <6E58> -<6E5B> <6E5B> -<6E5C> <6E5C> -<6E5E> <6E5E> -<6E5F> <6E5F> -<6E67> <6E67> -<6E6B> <6E6B> -<6E6E> <6E6E> -<6E6F> <6E6F> -<6E72> <6E72> -<6E73> <6E73> -<6E7A> <6E7A> -<6E90> <6E90> -<6E96> <6E96> -<6E9C> <6E9C> -<6E9D> <6E9D> -<6E9F> <6E9F> -<6EA2> <6EA2> -<6EA5> <6EA5> -<6EAA> <6EAA> -<6EAB> <6EAB> -<6EAF> <6EAF> -<6EB1> <6EB1> -<6EB6> <6EB6> -<6EBA> <6EBA> -<6EC2> <6EC2> -<6EC4> <6EC4> -<6EC5> <6EC5> -<6EC9> <6EC9> -<6ECB> <6ECB> -<6ECC> <6ECC> -<6ECE> <6ECE> -<6ED1> <6ED1> -<6ED3> <6ED3> -<6ED4> <6ED4> -<6EEF> <6EEF> -<6EF4> <6EF4> -<6EF8> <6EF8> -<6EFE> <6EFE> -<6EFF> <6EFF> -<6F01> <6F01> -<6F02> <6F02> -<6F06> <6F06> -<6F0F> <6F0F> -<6F11> <6F11> -<6F14> <6F14> -<6F15> <6F15> -<6F20> <6F20> -<6F22> <6F22> -<6F23> <6F23> -<6F2B> <6F2B> -<6F2C> <6F2C> -<6F31> <6F31> -<6F32> <6F32> -<6F38> <6F38> -<6F3F> <6F3F> -endbfrange - -100 beginbfrange -<6F41> <6F41> -<6F51> <6F51> -<6F54> <6F54> -<6F57> <6F57> -<6F58> <6F58> -<6F5A> <6F5A> -<6F5B> <6F5B> -<6F5E> <6F5E> -<6F5F> <6F5F> -<6F62> <6F62> -<6F64> <6F64> -<6F6D> <6F6D> -<6F6E> <6F6E> -<6F70> <6F70> -<6F7A> <6F7A> -<6F7C> <6F7C> -<6F7D> <6F7D> -<6F7E> <6F7E> -<6F81> <6F81> -<6F84> <6F84> -<6F88> <6F88> -<6F8D> <6F8D> -<6F8E> <6F8E> -<6F90> <6F90> -<6F94> <6F94> -<6F97> <6F97> -<6FA3> <6FA3> -<6FA4> <6FA4> -<6FA7> <6FA7> -<6FAE> <6FAE> -<6FAF> <6FAF> -<6FB1> <6FB1> -<6FB3> <6FB3> -<6FB9> <6FB9> -<6FBE> <6FBE> -<6FC0> <6FC0> -<6FC1> <6FC1> -<6FC2> <6FC2> -<6FC3> <6FC3> -<6FCA> <6FCA> -<6FD5> <6FD5> -<6FDA> <6FDA> -<6FDF> <6FDF> -<6FE0> <6FE0> -<6FE1> <6FE1> -<6FE4> <6FE4> -<6FE9> <6FE9> -<6FEB> <6FEB> -<6FEC> <6FEC> -<6FEF> <6FEF> -<6FF1> <6FF1> -<6FFE> <6FFE> -<7001> <7001> -<7005> <7005> -<7006> <7006> -<7009> <7009> -<700B> <700B> -<700F> <700F> -<7011> <7011> -<7015> <7015> -<7018> <7018> -<701A> <701A> -<701B> <701B> -<701C> <701C> -<701D> <701D> -<701E> <701E> -<701F> <701F> -<7023> <7023> -<7027> <7027> -<7028> <7028> -<702F> <702F> -<7037> <7037> -<703E> <703E> -<704C> <704C> -<7050> <7050> -<7051> <7051> -<7058> <7058> -<705D> <705D> -<7063> <7063> -<706B> <706B> -<7070> <7070> -<7078> <7078> -<707C> <707C> -<707D> <707D> -<7085> <7085> -<708A> <708A> -<708E> <708E> -<7092> <7092> -<7098> <7098> -<7099> <7099> -<709A> <709A> -<70A1> <70A1> -<70A4> <70A4> -<70AB> <70AB> -<70AC> <70AC> -<70AD> <70AD> -<70AF> <70AF> -<70B3> <70B3> -<70B7> <70B7> -<70B8> <70B8> -endbfrange - -100 beginbfrange -<70B9> <70B9> -<70C8> <70C8> -<70CB> <70CB> -<70CF> <70CF> -<70D8> <70D8> -<70D9> <70D9> -<70DD> <70DD> -<70DF> <70DF> -<70F1> <70F1> -<70F9> <70F9> -<70FD> <70FD> -<7104> <7104> -<7109> <7109> -<710C> <710C> -<7119> <7119> -<711A> <711A> -<711E> <711E> -<7121> <7121> -<7126> <7126> -<7130> <7130> -<7136> <7136> -<7147> <7147> -<7149> <7149> -<714A> <714A> -<714C> <714C> -<714E> <714E> -<7150> <7150> -<7156> <7156> -<7159> <7159> -<715C> <715C> -<715E> <715E> -<7164> <7164> -<7165> <7165> -<7166> <7166> -<7167> <7167> -<7169> <7169> -<716C> <716C> -<716E> <716E> -<717D> <717D> -<7184> <7184> -<7189> <7189> -<718A> <718A> -<718F> <718F> -<7192> <7192> -<7194> <7194> -<7199> <7199> -<719F> <719F> -<71A2> <71A2> -<71AC> <71AC> -<71B1> <71B1> -<71B9> <71BA> -<71BE> <71BE> -<71C1> <71C1> -<71C3> <71C3> -<71C8> <71C8> -<71C9> <71C9> -<71CE> <71CE> -<71D0> <71D0> -<71D2> <71D2> -<71D4> <71D4> -<71D5> <71D5> -<71DF> <71DF> -<71E5> <71E5> -<71E6> <71E6> -<71E7> <71E7> -<71ED> <71ED> -<71EE> <71EE> -<71FB> <71FB> -<71FC> <71FC> -<71FE> <71FE> -<71FF> <71FF> -<7200> <7200> -<7206> <7206> -<7210> <7210> -<721B> <721B> -<722A> <722A> -<722C> <722C> -<722D> <722D> -<7230> <7230> -<7232> <7232> -<7235> <7235> -<7236> <7236> -<723A> <723A> -<723B> <723B> -<723D> <723D> -<723E> <723E> -<7240> <7240> -<7246> <7246> -<7247> <7247> -<7248> <7248> -<724C> <724C> -<7252> <7252> -<7258> <7258> -<7259> <7259> -<725B> <725B> -<725D> <725D> -<725F> <725F> -<7261> <7261> -<7262> <7262> -<7267> <7267> -endbfrange - -100 beginbfrange -<7269> <7269> -<7272> <7272> -<7279> <7279> -<727D> <727D> -<7280> <7280> -<7281> <7281> -<72A2> <72A2> -<72A7> <72A7> -<72AC> <72AC> -<72AF> <72AF> -<72C0> <72C0> -<72C2> <72C2> -<72C4> <72C4> -<72CE> <72CE> -<72D0> <72D0> -<72D7> <72D7> -<72D9> <72D9> -<72E1> <72E1> -<72E9> <72E9> -<72F8> <72F8> -<72F9> <72F9> -<72FC> <72FC> -<72FD> <72FD> -<730A> <730A> -<7316> <7316> -<731B> <731B> -<731C> <731C> -<731D> <731D> -<7325> <7325> -<7329> <7329> -<732A> <732A> -<732B> <732B> -<7336> <7337> -<733E> <733E> -<733F> <733F> -<7344> <7344> -<7345> <7345> -<7350> <7350> -<7352> <7352> -<7357> <7357> -<7368> <7368> -<736A> <736A> -<7370> <7370> -<7372> <7372> -<7375> <7375> -<7378> <7378> -<737A> <737A> -<737B> <737B> -<7384> <7384> -<7386> <7386> -<7387> <7387> -<7389> <7389> -<738B> <738B> -<738E> <738E> -<7394> <7394> -<7396> <7396> -<7397> <7397> -<7398> <7398> -<739F> <739F> -<73A7> <73A7> -<73A9> <73A9> -<73AD> <73AD> -<73B2> <73B2> -<73B3> <73B3> -<73B9> <73B9> -<73C0> <73C0> -<73C2> <73C2> -<73C9> <73C9> -<73CA> <73CA> -<73CC> <73CC> -<73CD> <73CD> -<73CF> <73CF> -<73D6> <73D6> -<73D9> <73D9> -<73DD> <73DD> -<73DE> <73DE> -<73E0> <73E0> -<73E3> <73E3> -<73E4> <73E4> -<73E5> <73E5> -<73E6> <73E6> -<73E9> <73E9> -<73EA> <73EA> -<73ED> <73ED> -<73F7> <73F7> -<73F9> <73F9> -<73FD> <73FD> -<73FE> <73FE> -<7401> <7401> -<7403> <7403> -<7405> <7405> -<7406> <7406> -<7407> <7407> -<7409> <7409> -<7413> <7413> -<741B> <741B> -<7420> <7420> -<7421> <7421> -<7422> <7422> -<7425> <7425> -endbfrange - -100 beginbfrange -<7426> <7426> -<7428> <7428> -<742A> <742A> -<742B> <742B> -<742C> <742C> -<742E> <742E> -<742F> <742F> -<7430> <7430> -<7433> <7433> -<7434> <7434> -<7435> <7435> -<7436> <7436> -<7438> <7438> -<743A> <743A> -<743F> <743F> -<7440> <7440> -<7441> <7441> -<7443> <7443> -<7444> <7444> -<744B> <744B> -<7455> <7455> -<7457> <7457> -<7459> <7459> -<745A> <745A> -<745B> <745B> -<745C> <745C> -<745E> <745E> -<745F> <745F> -<7460> <7460> -<7462> <7462> -<7464> <7464> -<7465> <7465> -<7468> <7468> -<7469> <7469> -<746A> <746A> -<746F> <746F> -<747E> <747E> -<7482> <7482> -<7483> <7483> -<7487> <7487> -<7489> <7489> -<748B> <748B> -<7498> <7498> -<749C> <749C> -<749E> <749E> -<749F> <749F> -<74A1> <74A1> -<74A3> <74A3> -<74A5> <74A5> -<74A7> <74A7> -<74A8> <74A8> -<74AA> <74AA> -<74B0> <74B0> -<74B2> <74B2> -<74B5> <74B5> -<74B9> <74B9> -<74BD> <74BD> -<74BF> <74BF> -<74C6> <74C6> -<74CA> <74CA> -<74CF> <74CF> -<74D4> <74D4> -<74D8> <74D8> -<74DA> <74DA> -<74DC> <74DC> -<74E0> <74E0> -<74E2> <74E2> -<74E3> <74E3> -<74E6> <74E6> -<74EE> <74EE> -<74F7> <74F7> -<7501> <7501> -<7504> <7504> -<7511> <7511> -<7515> <7515> -<7518> <7518> -<751A> <751A> -<751B> <751B> -<751F> <751F> -<7523> <7523> -<7525> <7525> -<7526> <7526> -<7528> <7528> -<752B> <752B> -<752C> <752C> -<7530> <7530> -<7531> <7531> -<7532> <7532> -<7533> <7533> -<7537> <7537> -<7538> <7538> -<753A> <753A> -<7547> <7547> -<754C> <754C> -<754F> <754F> -<7551> <7551> -<7553> <7553> -<7554> <7554> -<7559> <7559> -<755B> <755B> -endbfrange - -100 beginbfrange -<755C> <755C> -<755D> <755D> -<7562> <7562> -<7565> <7565> -<7566> <7566> -<756A> <756A> -<756F> <756F> -<7570> <7570> -<7575> <7575> -<7576> <7576> -<7578> <7578> -<757A> <757A> -<757F> <757F> -<7586> <7586> -<7587> <7587> -<758A> <758A> -<758B> <758B> -<758E> <758E> -<758F> <758F> -<7591> <7591> -<759D> <759D> -<75A5> <75A5> -<75AB> <75AB> -<75B1> <75B1> -<75B2> <75B2> -<75B3> <75B3> -<75B5> <75B5> -<75B8> <75B8> -<75B9> <75B9> -<75BC> <75BC> -<75BD> <75BD> -<75BE> <75BE> -<75C2> <75C2> -<75C5> <75C5> -<75C7> <75C7> -<75CD> <75CD> -<75D2> <75D2> -<75D4> <75D4> -<75D5> <75D5> -<75D8> <75D8> -<75D9> <75D9> -<75DB> <75DB> -<75E2> <75E2> -<75F0> <75F0> -<75F2> <75F2> -<75F4> <75F4> -<75FA> <75FA> -<75FC> <75FC> -<7600> <7600> -<760D> <760D> -<7619> <7619> -<761F> <761F> -<7620> <7620> -<7621> <7621> -<7622> <7622> -<7624> <7624> -<7626> <7626> -<763B> <763B> -<7642> <7642> -<764C> <764C> -<764E> <764E> -<7652> <7652> -<7656> <7656> -<7661> <7661> -<7664> <7664> -<7669> <7669> -<766C> <766C> -<7670> <7670> -<7672> <7672> -<7678> <7678> -<767B> <767B> -<767C> <767C> -<767D> <767E> -<7684> <7684> -<7686> <7686> -<7687> <7687> -<768E> <768E> -<7690> <7690> -<7693> <7693> -<76AE> <76AE> -<76BA> <76BA> -<76BF> <76BF> -<76C2> <76C2> -<76C3> <76C3> -<76C6> <76C6> -<76C8> <76C8> -<76CA> <76CA> -<76D2> <76D2> -<76D6> <76D6> -<76DB> <76DB> -<76DC> <76DC> -<76DE> <76DE> -<76DF> <76DF> -<76E1> <76E1> -<76E3> <76E3> -<76E4> <76E4> -<76E7> <76E7> -<76EE> <76EE> -<76F2> <76F2> -<76F4> <76F4> -endbfrange - -100 beginbfrange -<76F8> <76F8> -<76FC> <76FC> -<76FE> <76FE> -<7701> <7701> -<7704> <7704> -<7708> <7708> -<7709> <7709> -<770B> <770B> -<771E> <771E> -<7720> <7720> -<7729> <7729> -<7737> <7737> -<7738> <7738> -<773A> <773A> -<773C> <773C> -<7740> <7740> -<774D> <774D> -<775B> <775B> -<7761> <7761> -<7763> <7763> -<7766> <7766> -<776B> <776B> -<7779> <7779> -<777E> <777E> -<777F> <777F> -<778B> <778B> -<7791> <7791> -<779E> <779E> -<77A5> <77A5> -<77AC> <77AC> -<77AD> <77AD> -<77B0> <77B0> -<77B3> <77B3> -<77BB> <77BB> -<77BC> <77BC> -<77BF> <77BF> -<77D7> <77D7> -<77DB> <77DB> -<77DC> <77DC> -<77E2> <77E2> -<77E3> <77E3> -<77E5> <77E5> -<77E9> <77E9> -<77ED> <77ED> -<77EE> <77EE> -<77EF> <77EF> -<77F3> <77F3> -<7802> <7802> -<7812> <7812> -<7825> <7825> -<7826> <7826> -<7827> <7827> -<782C> <782C> -<7832> <7832> -<7834> <7834> -<7845> <7845> -<784F> <784F> -<785D> <785D> -<786B> <786B> -<786C> <786C> -<786F> <786F> -<787C> <787C> -<7881> <7881> -<7887> <7887> -<788C> <788C> -<788D> <788D> -<788E> <788E> -<7891> <7891> -<7897> <7897> -<78A3> <78A3> -<78A7> <78A7> -<78A9> <78A9> -<78BA> <78BB> -<78BC> <78BC> -<78C1> <78C1> -<78C5> <78C5> -<78CA> <78CA> -<78CB> <78CB> -<78CE> <78CE> -<78D0> <78D0> -<78E8> <78E8> -<78EC> <78EC> -<78EF> <78EF> -<78F5> <78F5> -<78FB> <78FB> -<7901> <7901> -<790E> <790E> -<7916> <7916> -<792A> <792A> -<792B> <792B> -<792C> <792C> -<793A> <793A> -<793E> <793E> -<7940> <7940> -<7941> <7941> -<7947> <7948> -<7949> <7949> -<7950> <7950> -<7956> <7956> -<7957> <7957> -endbfrange - -100 beginbfrange -<795A> <795A> -<795B> <795B> -<795C> <795C> -<795D> <795D> -<795E> <795E> -<7960> <7960> -<7965> <7965> -<7968> <7968> -<796D> <796D> -<797A> <797A> -<797F> <797F> -<7981> <7981> -<798D> <798D> -<798E> <798E> -<798F> <798F> -<7991> <7991> -<79A6> <79A6> -<79A7> <79A7> -<79AA> <79AA> -<79AE> <79AE> -<79B1> <79B1> -<79B3> <79B3> -<79B9> <79B9> -<79BD> <79BD> -<79BE> <79BE> -<79BF> <79BF> -<79C0> <79C0> -<79C1> <79C1> -<79C9> <79C9> -<79CA> <79CA> -<79CB> <79CB> -<79D1> <79D1> -<79D2> <79D2> -<79D5> <79D5> -<79D8> <79D8> -<79DF> <79DF> -<79E4> <79E4> -<79E6> <79E6> -<79E7> <79E7> -<79E9> <79E9> -<79FB> <79FB> -<7A00> <7A00> -<7A05> <7A05> -<7A08> <7A08> -<7A0B> <7A0B> -<7A0D> <7A0D> -<7A14> <7A14> -<7A17> <7A17> -<7A19> <7A19> -<7A1A> <7A1A> -<7A1C> <7A1C> -<7A1F> <7A1F> -<7A20> <7A20> -<7A2E> <7A2E> -<7A31> <7A31> -<7A36> <7A36> -<7A37> <7A37> -<7A3B> <7A3B> -<7A3C> <7A3C> -<7A3D> <7A3D> -<7A3F> <7A3F> -<7A40> <7A40> -<7A46> <7A46> -<7A49> <7A49> -<7A4D> <7A4D> -<7A4E> <7A4E> -<7A57> <7A57> -<7A61> <7A61> -<7A62> <7A62> -<7A69> <7A69> -<7A6B> <7A6B> -<7A70> <7A70> -<7A74> <7A74> -<7A76> <7A76> -<7A79> <7A79> -<7A7A> <7A7A> -<7A7D> <7A7D> -<7A7F> <7A7F> -<7A81> <7A81> -<7A84> <7A84> -<7A88> <7A88> -<7A92> <7A92> -<7A93> <7A93> -<7A95> <7A95> -<7A98> <7A98> -<7A9F> <7A9F> -<7AA9> <7AAA> -<7AAE> <7AAE> -<7AAF> <7AAF> -<7ABA> <7ABA> -<7AC4> <7AC4> -<7AC5> <7AC5> -<7AC7> <7AC7> -<7ACA> <7ACA> -<7ACB> <7ACB> -<7AD7> <7AD7> -<7AD9> <7AD9> -<7ADD> <7ADD> -<7ADF> <7ADF> -<7AE0> <7AE0> -endbfrange - -100 beginbfrange -<7AE3> <7AE3> -<7AE5> <7AE5> -<7AEA> <7AEA> -<7AED> <7AED> -<7AEF> <7AEF> -<7AF6> <7AF6> -<7AF9> <7AF9> -<7AFA> <7AFA> -<7AFF> <7AFF> -<7B0F> <7B0F> -<7B11> <7B11> -<7B19> <7B19> -<7B1B> <7B1B> -<7B1E> <7B1E> -<7B20> <7B20> -<7B26> <7B26> -<7B2C> <7B2C> -<7B2D> <7B2D> -<7B39> <7B39> -<7B46> <7B46> -<7B49> <7B49> -<7B4B> <7B4B> -<7B4C> <7B4C> -<7B4D> <7B4D> -<7B4F> <7B4F> -<7B50> <7B50> -<7B51> <7B51> -<7B52> <7B52> -<7B54> <7B54> -<7B56> <7B56> -<7B60> <7B60> -<7B6C> <7B6C> -<7B6E> <7B6E> -<7B75> <7B75> -<7B7D> <7B7D> -<7B87> <7B87> -<7B8B> <7B8B> -<7B8F> <7B8F> -<7B94> <7B94> -<7B95> <7B95> -<7B97> <7B97> -<7B9A> <7B9A> -<7B9D> <7B9D> -<7BA1> <7BA1> -<7BAD> <7BAD> -<7BB1> <7BB1> -<7BB4> <7BB4> -<7BB8> <7BB8> -<7BC0> <7BC0> -<7BC1> <7BC1> -<7BC4> <7BC4> -<7BC6> <7BC6> -<7BC7> <7BC7> -<7BC9> <7BC9> -<7BD2> <7BD2> -<7BE0> <7BE0> -<7BE4> <7BE4> -<7BE9> <7BE9> -<7C07> <7C07> -<7C12> <7C12> -<7C1E> <7C1E> -<7C21> <7C21> -<7C27> <7C27> -<7C2A> <7C2A> -<7C2B> <7C2B> -<7C3D> <7C3D> -<7C3E> <7C3E> -<7C3F> <7C3F> -<7C43> <7C43> -<7C4C> <7C4C> -<7C4D> <7C4D> -<7C60> <7C60> -<7C64> <7C64> -<7C6C> <7C6C> -<7C73> <7C73> -<7C83> <7C83> -<7C89> <7C89> -<7C92> <7C92> -<7C95> <7C95> -<7C97> <7C97> -<7C98> <7C98> -<7C9F> <7C9F> -<7CA5> <7CA5> -<7CA7> <7CA7> -<7CAE> <7CAE> -<7CB1> <7CB1> -<7CB2> <7CB2> -<7CB3> <7CB3> -<7CB9> <7CB9> -<7CBE> <7CBE> -<7CCA> <7CCA> -<7CD6> <7CD6> -<7CDE> <7CDE> -<7CDF> <7CDF> -<7CE0> <7CE0> -<7CE7> <7CE7> -<7CFB> <7CFB> -<7CFE> <7CFE> -<7D00> <7D00> -<7D02> <7D02> -endbfrange - -100 beginbfrange -<7D04> <7D04> -<7D05> <7D05> -<7D06> <7D06> -<7D07> <7D07> -<7D08> <7D08> -<7D0A> <7D0B> -<7D0D> <7D0D> -<7D10> <7D10> -<7D14> <7D14> -<7D17> <7D17> -<7D18> <7D18> -<7D19> <7D19> -<7D1A> <7D1A> -<7D1B> <7D1B> -<7D20> <7D20> -<7D21> <7D21> -<7D22> <7D22> -<7D2B> <7D2B> -<7D2C> <7D2C> -<7D2E> <7D2E> -<7D2F> <7D2F> -<7D30> <7D30> -<7D33> <7D33> -<7D35> <7D35> -<7D39> <7D39> -<7D3A> <7D3A> -<7D42> <7D42> -<7D43> <7D43> -<7D44> <7D44> -<7D45> <7D45> -<7D46> <7D46> -<7D50> <7D50> -<7D5E> <7D5E> -<7D61> <7D61> -<7D62> <7D62> -<7D66> <7D66> -<7D68> <7D68> -<7D6A> <7D6A> -<7D6E> <7D6E> -<7D71> <7D71> -<7D72> <7D72> -<7D73> <7D73> -<7D76> <7D76> -<7D79> <7D79> -<7D7F> <7D7F> -<7D8E> <7D8E> -<7D8F> <7D8F> -<7D93> <7D93> -<7D9C> <7D9C> -<7DA0> <7DA0> -<7DA2> <7DA2> -<7DAC> <7DAC> -<7DAD> <7DAD> -<7DB1> <7DB1> -<7DB2> <7DB2> -<7DB4> <7DB4> -<7DB5> <7DB5> -<7DB8> <7DB8> -<7DBA> <7DBA> -<7DBB> <7DBB> -<7DBD> <7DBD> -<7DBE> <7DBE> -<7DBF> <7DBF> -<7DC7> <7DC7> -<7DCA> <7DCA> -<7DCB> <7DCB> -<7DD6> <7DD6> -<7DD8> <7DD8> -<7DDA> <7DDA> -<7DDD> <7DDD> -<7DDE> <7DDE> -<7DE0> <7DE0> -<7DE1> <7DE1> -<7DE3> <7DE3> -<7DE8> <7DE8> -<7DE9> <7DE9> -<7DEC> <7DEC> -<7DEF> <7DEF> -<7DF4> <7DF4> -<7DFB> <7DFB> -<7E09> <7E09> -<7E0A> <7E0A> -<7E15> <7E15> -<7E1B> <7E1B> -<7E1D> <7E1D> -<7E1E> <7E1E> -<7E1F> <7E1F> -<7E21> <7E21> -<7E23> <7E23> -<7E2B> <7E2B> -<7E2E> <7E2E> -<7E2F> <7E2F> -<7E31> <7E31> -<7E37> <7E37> -<7E3D> <7E3D> -<7E3E> <7E3E> -<7E41> <7E41> -<7E43> <7E43> -<7E46> <7E46> -<7E47> <7E47> -endbfrange - -100 beginbfrange -<7E52> <7E52> -<7E54> <7E54> -<7E55> <7E55> -<7E5E> <7E5E> -<7E61> <7E61> -<7E69> <7E69> -<7E6A> <7E6A> -<7E6B> <7E6B> -<7E6D> <7E6D> -<7E70> <7E70> -<7E79> <7E79> -<7E7C> <7E7C> -<7E82> <7E82> -<7E8C> <7E8C> -<7E8F> <7E8F> -<7E93> <7E93> -<7E96> <7E96> -<7E98> <7E98> -<7E9B> <7E9B> -<7E9C> <7E9C> -<7F36> <7F36> -<7F38> <7F38> -<7F3A> <7F3A> -<7F4C> <7F4C> -<7F50> <7F50> -<7F54> <7F54> -<7F55> <7F55> -<7F6A> <7F6A> -<7F6B> <7F6B> -<7F6E> <7F6E> -<7F70> <7F70> -<7F72> <7F72> -<7F75> <7F75> -<7F77> <7F77> -<7F79> <7F79> -<7F85> <7F85> -<7F88> <7F88> -<7F8A> <7F8A> -<7F8C> <7F8C> -<7F8E> <7F8E> -<7F94> <7F94> -<7F9A> <7F9A> -<7F9E> <7F9E> -<7FA4> <7FA4> -<7FA8> <7FA8> -<7FA9> <7FA9> -<7FB2> <7FB2> -<7FB8> <7FB8> -<7FB9> <7FB9> -<7FBD> <7FBD> -<7FC1> <7FC1> -<7FC5> <7FC5> -<7FCA> <7FCA> -<7FCC> <7FCC> -<7FCE> <7FCE> -<7FD2> <7FD2> -<7FD4> <7FD4> -<7FD5> <7FD5> -<7FDF> <7FDF> -<7FE0> <7FE0> -<7FE1> <7FE1> -<7FE9> <7FE9> -<7FEB> <7FEB> -<7FF0> <7FF0> -<7FF9> <7FF9> -<7FFC> <7FFC> -<8000> <8000> -<8001> <8001> -<8003> <8003> -<8005> <8005> -<8006> <8006> -<8009> <8009> -<800C> <800C> -<8010> <8010> -<8015> <8015> -<8017> <8017> -<8018> <8018> -<802D> <802D> -<8033> <8033> -<8036> <8036> -<803D> <803D> -<803F> <803F> -<8043> <8043> -<8046> <8046> -<804A> <804A> -<8056> <8056> -<8058> <8058> -<805A> <805A> -<805E> <805E> -<806F> <806F> -<8070> <8070> -<8072> <8072> -<8073> <8073> -<8077> <8077> -<807D> <807D> -<807E> <807E> -<807F> <807F> -<8084> <8084> -<8085> <8085> -<8086> <8086> -endbfrange - -100 beginbfrange -<8087> <8087> -<8089> <8089> -<808B> <808B> -<808C> <808C> -<8096> <8096> -<809B> <809B> -<809D> <809D> -<80A1> <80A1> -<80A2> <80A2> -<80A5> <80A5> -<80A9> <80A9> -<80AA> <80AA> -<80AF> <80AF> -<80B1> <80B1> -<80B2> <80B2> -<80B4> <80B4> -<80BA> <80BA> -<80C3> <80C3> -<80C4> <80C4> -<80CC> <80CC> -<80CE> <80CE> -<80DA> <80DA> -<80DB> <80DB> -<80DE> <80DE> -<80E1> <80E1> -<80E4> <80E4> -<80E5> <80E5> -<80F1> <80F1> -<80F4> <80F4> -<80F8> <80F8> -<80FD> <80FD> -<8102> <8102> -<8105> <8105> -<8106> <8106> -<8107> <8107> -<8108> <8108> -<810A> <810A> -<8118> <8118> -<811A> <811A> -<811B> <811B> -<8123> <8123> -<8129> <8129> -<812B> <812B> -<812F> <812F> -<8139> <8139> -<813E> <813E> -<814B> <814B> -<814E> <814E> -<8150> <8151> -<8154> <8154> -<8155> <8155> -<8165> <8165> -<8166> <8166> -<816B> <816B> -<8170> <8170> -<8171> <8171> -<8178> <8178> -<8179> <8179> -<817A> <817A> -<817F> <817F> -<8180> <8180> -<8188> <8188> -<818A> <818A> -<818F> <818F> -<819A> <819A> -<819C> <819C> -<819D> <819D> -<81A0> <81A0> -<81A3> <81A3> -<81A8> <81A8> -<81B3> <81B3> -<81B5> <81B5> -<81BA> <81BA> -<81BD> <81BD> -<81BE> <81BE> -<81BF> <81BF> -<81C0> <81C0> -<81C2> <81C2> -<81C6> <81C6> -<81CD> <81CD> -<81D8> <81D8> -<81DF> <81DF> -<81E3> <81E3> -<81E5> <81E5> -<81E7> <81E7> -<81E8> <81E8> -<81EA> <81EA> -<81ED> <81ED> -<81F3> <81F3> -<81F4> <81F4> -<81FA> <81FA> -<81FB> <81FB> -<81FC> <81FC> -<81FE> <81FE> -<8205> <8205> -<8207> <8207> -<8208> <8208> -<820A> <820A> -<820C> <820C> -<820D> <820D> -endbfrange - -100 beginbfrange -<8212> <8212> -<821B> <821B> -<821C> <821C> -<821E> <821E> -<821F> <821F> -<8221> <8221> -<822A> <822A> -<822B> <822B> -<822C> <822C> -<8235> <8235> -<8236> <8236> -<8237> <8237> -<8239> <8239> -<8240> <8240> -<8245> <8245> -<8247> <8247> -<8259> <8259> -<8264> <8264> -<8266> <8266> -<826E> <826E> -<826F> <826F> -<8271> <8271> -<8272> <8272> -<8276> <8276> -<8278> <8278> -<827E> <827E> -<828B> <828B> -<828D> <828D> -<828E> <828E> -<8292> <8292> -<8299> <8299> -<829A> <829A> -<829D> <829D> -<829F> <829F> -<82A5> <82A5> -<82A6> <82A6> -<82A9> <82A9> -<82AC> <82AC> -<82AD> <82AD> -<82AE> <82AE> -<82AF> <82AF> -<82B1> <82B1> -<82B3> <82B3> -<82B7> <82B7> -<82B8> <82B8> -<82B9> <82B9> -<82BB> <82BB> -<82BC> <82BC> -<82BD> <82BD> -<82BF> <82BF> -<82D1> <82D1> -<82D2> <82D2> -<82D4> <82D4> -<82D5> <82D5> -<82D7> <82D7> -<82DB> <82DB> -<82DE> <82DE> -<82DF> <82DF> -<82E1> <82E1> -<82E5> <82E5> -<82E6> <82E6> -<82E7> <82E7> -<82F1> <82F1> -<82FD> <82FD> -<82FE> <82FE> -<8301> <8301> -<8302> <8302> -<8303> <8303> -<8304> <8304> -<8305> <8305> -<8309> <8309> -<8317> <8317> -<8328> <8328> -<832B> <832B> -<832F> <832F> -<8331> <8331> -<8334> <8334> -<8335> <8335> -<8336> <8336> -<8338> <8338> -<8339> <8339> -<8340> <8340> -<8347> <8347> -<8349> <8349> -<834A> <834A> -<834F> <834F> -<8351> <8351> -<8352> <8352> -<8373> <8373> -<8377> <8377> -<837B> <837B> -<8389> <8389> -<838A> <838A> -<838E> <838E> -<8396> <8396> -<8398> <8398> -<839E> <839E> -<83A2> <83A2> -<83A9> <83A9> -<83AA> <83AA> -endbfrange - -100 beginbfrange -<83AB> <83AB> -<83BD> <83BD> -<83C1> <83C1> -<83C5> <83C5> -<83C9> <83C9> -<83CA> <83CA> -<83CC> <83CC> -<83D3> <83D3> -<83D6> <83D6> -<83DC> <83DC> -<83E9> <83E9> -<83EB> <83EB> -<83EF> <83EF> -<83F0> <83F0> -<83F1> <83F1> -<83F2> <83F2> -<83F4> <83F4> -<83F9> <83F9> -<83FD> <83FD> -<8403> <8403> -<8404> <8404> -<840A> <840A> -<840C> <840C> -<840D> <840D> -<840E> <840E> -<8429> <8429> -<842C> <842C> -<8431> <8431> -<8438> <8438> -<843D> <843D> -<8449> <8449> -<8457> <8457> -<845B> <845B> -<8461> <8461> -<8463> <8463> -<8466> <8466> -<846B> <846B> -<846C> <846C> -<846F> <846F> -<8475> <8475> -<847A> <847A> -<8490> <8490> -<8494> <8494> -<8499> <8499> -<849C> <849C> -<84A1> <84A1> -<84B2> <84B2> -<84B8> <84B8> -<84BB> <84BB> -<84BC> <84BC> -<84BF> <84BF> -<84C0> <84C0> -<84C2> <84C2> -<84C4> <84C4> -<84C6> <84C6> -<84C9> <84C9> -<84CB> <84CB> -<84CD> <84CD> -<84D1> <84D1> -<84DA> <84DA> -<84EC> <84EC> -<84EE> <84EE> -<84F4> <84F4> -<84FC> <84FC> -<8511> <8511> -<8513> <8513> -<8514> <8514> -<8517> <8517> -<8518> <8518> -<851A> <851A> -<851E> <851E> -<8521> <8521> -<8523> <8523> -<8525> <8525> -<852C> <852C> -<852D> <852D> -<852F> <852F> -<853D> <853D> -<853F> <853F> -<8541> <8541> -<8543> <8543> -<8549> <8549> -<854E> <854E> -<8553> <8553> -<8559> <8559> -<8563> <8563> -<8568> <8568> -<8569> <8569> -<856A> <856A> -<856D> <856D> -<8584> <8584> -<8587> <8587> -<858F> <858F> -<8591> <8591> -<8594> <8594> -<859B> <859B> -<85A6> <85A6> -<85A8> <85A8> -<85A9> <85A9> -<85AA> <85AA> -endbfrange - -100 beginbfrange -<85AF> <85AF> -<85B0> <85B0> -<85BA> <85BA> -<85C1> <85C1> -<85C9> <85C9> -<85CD> <85CD> -<85CE> <85CE> -<85CF> <85CF> -<85D5> <85D5> -<85DC> <85DC> -<85DD> <85DD> -<85E4> <85E4> -<85E5> <85E5> -<85E9> <85E9> -<85EA> <85EA> -<85F7> <85F7> -<85FA> <85FA> -<85FB> <85FB> -<85FF> <85FF> -<8602> <8602> -<8606> <8606> -<8607> <8607> -<860A> <860A> -<8616> <8616> -<8617> <8617> -<861A> <861A> -<862D> <862D> -<863F> <863F> -<864E> <864E> -<8650> <8650> -<8654> <8654> -<8655> <8655> -<865B> <865B> -<865C> <865C> -<865E> <865E> -<865F> <865F> -<8667> <8667> -<8679> <8679> -<868A> <868A> -<868C> <868C> -<8693> <8693> -<86A3> <86A3> -<86A4> <86A4> -<86A9> <86A9> -<86C7> <86C7> -<86CB> <86CB> -<86D4> <86D4> -<86D9> <86D9> -<86DB> <86DB> -<86DF> <86DF> -<86E4> <86E4> -<86ED> <86ED> -<86FE> <86FE> -<8700> <8700> -<8702> <8702> -<8703> <8703> -<8708> <8708> -<8718> <8718> -<871A> <871A> -<871C> <871C> -<874E> <874E> -<8755> <8755> -<8757> <8757> -<875F> <875F> -<8766> <8766> -<8768> <8768> -<8774> <8774> -<8776> <8776> -<8778> <8778> -<8782> <8782> -<878D> <878D> -<879F> <879F> -<87A2> <87A2> -<87B3> <87B3> -<87BA> <87BA> -<87C4> <87C4> -<87E0> <87E0> -<87EC> <87EC> -<87EF> <87EF> -<87F2> <87F2> -<87F9> <87F9> -<87FB> <87FB> -<87FE> <87FE> -<8805> <8805> -<881F> <881F> -<8822> <8822> -<8823> <8823> -<8831> <8831> -<8836> <8836> -<883B> <883B> -<8840> <8840> -<8846> <8846> -<884C> <884C> -<884D> <884D> -<8852> <8852> -<8853> <8853> -<8857> <8857> -<8859> <8859> -<885B> <885B> -<885D> <885D> -endbfrange - -100 beginbfrange -<8861> <8861> -<8862> <8862> -<8863> <8863> -<8868> <8868> -<886B> <886B> -<8870> <8870> -<8872> <8872> -<8877> <8877> -<887E> <887F> -<8881> <8881> -<8882> <8882> -<8888> <8888> -<888B> <888B> -<888D> <888D> -<8892> <8892> -<8896> <8896> -<8897> <8897> -<889E> <889E> -<88AB> <88AB> -<88B4> <88B4> -<88C1> <88C1> -<88C2> <88C2> -<88CF> <88CF> -<88D4> <88D4> -<88D5> <88D5> -<88D9> <88D9> -<88DC> <88DC> -<88DD> <88DD> -<88DF> <88DF> -<88E1> <88E1> -<88E8> <88E8> -<88F3> <88F3> -<88F4> <88F5> -<88F8> <88F8> -<88FD> <88FD> -<8907> <8907> -<8910> <8910> -<8912> <8912> -<8913> <8913> -<8918> <8918> -<8919> <8919> -<8925> <8925> -<892A> <892A> -<8936> <8936> -<8938> <8938> -<893B> <893B> -<8941> <8941> -<8944> <8944> -<895F> <895F> -<8964> <8964> -<896A> <896A> -<8972> <8972> -<897F> <897F> -<8981> <8981> -<8983> <8983> -<8986> <8986> -<8987> <8987> -<898B> <898B> -<898F> <898F> -<8993> <8993> -<8996> <8996> -<89A1> <89A1> -<89A9> <89A9> -<89AA> <89AA> -<89B2> <89B2> -<89BA> <89BA> -<89BD> <89BD> -<89C0> <89C0> -<89D2> <89D2> -<89E3> <89E3> -<89F4> <89F4> -<89F8> <89F8> -<8A00> <8A00> -<8A02> <8A02> -<8A03> <8A03> -<8A08> <8A08> -<8A0A> <8A0A> -<8A0C> <8A0C> -<8A0E> <8A0E> -<8A13> <8A13> -<8A16> <8A16> -<8A17> <8A17> -<8A18> <8A18> -<8A1B> <8A1B> -<8A1D> <8A1D> -<8A1F> <8A1F> -<8A23> <8A23> -<8A25> <8A25> -<8A2A> <8A2A> -<8A2D> <8A2D> -<8A31> <8A31> -<8A34> <8A34> -<8A36> <8A36> -<8A3A> <8A3A> -<8A3B> <8A3B> -<8A50> <8A50> -<8A54> <8A54> -<8A55> <8A55> -<8A5B> <8A5B> -<8A5E> <8A5E> -endbfrange - -100 beginbfrange -<8A60> <8A60> -<8A62> <8A62> -<8A63> <8A63> -<8A66> <8A66> -<8A69> <8A69> -<8A6D> <8A6D> -<8A6E> <8A6E> -<8A70> <8A70> -<8A71> <8A71> -<8A72> <8A72> -<8A73> <8A73> -<8A75> <8A75> -<8A79> <8A79> -<8A85> <8A85> -<8A87> <8A87> -<8A8C> <8A8C> -<8A8D> <8A8D> -<8A93> <8A93> -<8A95> <8A95> -<8A98> <8A98> -<8A9E> <8A9E> -<8AA0> <8AA0> -<8AA1> <8AA1> -<8AA3> <8AA3> -<8AA4> <8AA4> -<8AA5> <8AA5> -<8AA6> <8AA6> -<8AA8> <8AA8> -<8AAA> <8AAA> -<8AB0> <8AB0> -<8AB2> <8AB2> -<8AB9> <8AB9> -<8ABC> <8ABC> -<8ABE> <8ABE> -<8ABF> <8ABF> -<8AC2> <8AC2> -<8AC4> <8AC4> -<8AC7> <8AC7> -<8ACB> <8ACB> -<8ACD> <8ACD> -<8ACF> <8ACF> -<8AD2> <8AD2> -<8AD6> <8AD6> -<8ADB> <8ADB> -<8ADC> <8ADC> -<8AE1> <8AE1> -<8AE6> <8AE6> -<8AE7> <8AE7> -<8AEA> <8AEA> -<8AEB> <8AEB> -<8AED> <8AED> -<8AEE> <8AEE> -<8AF1> <8AF1> -<8AF6> <8AF6> -<8AF7> <8AF7> -<8AF8> <8AF8> -<8AFA> <8AFA> -<8AFE> <8AFE> -<8B00> <8B00> -<8B01> <8B01> -<8B02> <8B02> -<8B04> <8B04> -<8B0E> <8B0E> -<8B10> <8B10> -<8B14> <8B14> -<8B16> <8B16> -<8B17> <8B17> -<8B19> <8B19> -<8B1A> <8B1A> -<8B1B> <8B1B> -<8B1D> <8B1D> -<8B20> <8B20> -<8B28> <8B28> -<8B2B> <8B2B> -<8B2C> <8B2C> -<8B33> <8B33> -<8B39> <8B39> -<8B41> <8B41> -<8B49> <8B49> -<8B4E> <8B4E> -<8B4F> <8B4F> -<8B58> <8B58> -<8B5A> <8B5A> -<8B5C> <8B5C> -<8B66> <8B66> -<8B6C> <8B6C> -<8B6F> <8B6F> -<8B70> <8B70> -<8B74> <8B74> -<8B77> <8B77> -<8B7D> <8B7D> -<8B80> <8B80> -<8B8A> <8B8A> -<8B90> <8B90> -<8B92> <8B92> -<8B93> <8B93> -<8B96> <8B96> -<8B9A> <8B9A> -<8C37> <8C37> -<8C3F> <8C3F> -endbfrange - -100 beginbfrange -<8C41> <8C41> -<8C46> <8C46> -<8C48> <8C48> -<8C4A> <8C4A> -<8C4C> <8C4C> -<8C55> <8C55> -<8C5A> <8C5A> -<8C61> <8C61> -<8C6A> <8C6A> -<8C6B> <8C6B> -<8C79> <8C79> -<8C7A> <8C7A> -<8C82> <8C82> -<8C8A> <8C8A> -<8C8C> <8C8C> -<8C9D> <8C9D> -<8C9E> <8C9E> -<8CA0> <8CA0> -<8CA1> <8CA1> -<8CA2> <8CA2> -<8CA7> <8CA7> -<8CA8> <8CA8> -<8CA9> <8CA9> -<8CAA> <8CAA> -<8CAB> <8CAB> -<8CAC> <8CAC> -<8CAF> <8CAF> -<8CB0> <8CB0> -<8CB3> <8CB3> -<8CB4> <8CB4> -<8CB6> <8CB6> -<8CB7> <8CB7> -<8CB8> <8CB8> -<8CBB> <8CBB> -<8CBC> <8CBC> -<8CBD> <8CBD> -<8CBF> <8CBF> -<8CC0> <8CC0> -<8CC1> <8CC1> -<8CC2> <8CC2> -<8CC3> <8CC3> -<8CC4> <8CC4> -<8CC7> <8CC7> -<8CC8> <8CC8> -<8CCA> <8CCA> -<8CD1> <8CD1> -<8CD3> <8CD3> -<8CDA> <8CDA> -<8CDC> <8CDC> -<8CDE> <8CDE> -<8CE0> <8CE0> -<8CE2> <8CE2> -<8CE3> <8CE3> -<8CE4> <8CE4> -<8CE6> <8CE6> -<8CEA> <8CEA> -<8CED> <8CED> -<8CF4> <8CF4> -<8CFB> <8CFB> -<8CFC> <8CFC> -<8CFD> <8CFD> -<8D04> <8D04> -<8D05> <8D05> -<8D07> <8D07> -<8D08> <8D08> -<8D0A> <8D0A> -<8D0D> <8D0D> -<8D13> <8D13> -<8D16> <8D16> -<8D64> <8D64> -<8D66> <8D66> -<8D6B> <8D6B> -<8D70> <8D70> -<8D73> <8D73> -<8D74> <8D74> -<8D77> <8D77> -<8D85> <8D85> -<8D8A> <8D8A> -<8D99> <8D99> -<8DA3> <8DA3> -<8DA8> <8DA8> -<8DB3> <8DB3> -<8DBA> <8DBA> -<8DBE> <8DBE> -<8DC6> <8DC6> -<8DCB> <8DCB> -<8DCC> <8DCC> -<8DCF> <8DCF> -<8DDB> <8DDB> -<8DDD> <8DDD> -<8DE1> <8DE1> -<8DE3> <8DE3> -<8DE8> <8DE8> -<8DEF> <8DEF> -<8DF3> <8DF3> -<8E0A> <8E0A> -<8E0F> <8E0F> -<8E10> <8E10> -<8E1E> <8E1E> -<8E2A> <8E2A> -endbfrange - -100 beginbfrange -<8E30> <8E30> -<8E35> <8E35> -<8E42> <8E42> -<8E44> <8E44> -<8E47> <8E47> -<8E48> <8E48> -<8E49> <8E49> -<8E4A> <8E4A> -<8E59> <8E59> -<8E5F> <8E5F> -<8E60> <8E60> -<8E74> <8E74> -<8E76> <8E76> -<8E81> <8E81> -<8E87> <8E87> -<8E8A> <8E8A> -<8E8D> <8E8D> -<8EAA> <8EAA> -<8EAB> <8EAB> -<8EAC> <8EAC> -<8EC0> <8EC0> -<8ECA> <8ECA> -<8ECB> <8ECB> -<8ECC> <8ECC> -<8ECD> <8ECD> -<8ED2> <8ED2> -<8EDF> <8EDF> -<8EEB> <8EEB> -<8EF8> <8EF8> -<8EFB> <8EFB> -<8EFE> <8EFE> -<8F03> <8F03> -<8F05> <8F05> -<8F09> <8F09> -<8F12> <8F12> -<8F13> <8F13> -<8F14> <8F14> -<8F15> <8F15> -<8F1B> <8F1B> -<8F1C> <8F1C> -<8F1D> <8F1D> -<8F1E> <8F1E> -<8F1F> <8F1F> -<8F26> <8F26> -<8F27> <8F27> -<8F29> <8F29> -<8F2A> <8F2A> -<8F2F> <8F2F> -<8F33> <8F33> -<8F38> <8F38> -<8F39> <8F39> -<8F3B> <8F3B> -<8F3E> <8F3E> -<8F3F> <8F3F> -<8F44> <8F44> -<8F45> <8F45> -<8F49> <8F49> -<8F4D> <8F4D> -<8F4E> <8F4E> -<8F5D> <8F5D> -<8F5F> <8F5F> -<8F62> <8F62> -<8F9B> <8F9B> -<8F9C> <8F9C> -<8FA3> <8FA3> -<8FA6> <8FA6> -<8FA8> <8FA8> -<8FAD> <8FAD> -<8FAF> <8FAF> -<8FB0> <8FB0> -<8FB1> <8FB1> -<8FB2> <8FB2> -<8FC2> <8FC2> -<8FC5> <8FC5> -<8FCE> <8FCE> -<8FD1> <8FD1> -<8FD4> <8FD4> -<8FE6> <8FE6> -<8FEA> <8FEA> -<8FEB> <8FEB> -<8FED> <8FED> -<8FF0> <8FF0> -<8FF2> <8FF2> -<8FF7> <8FF7> -<8FF9> <8FF9> -<8FFD> <8FFD> -<9000> <9000> -<9001> <9001> -<9002> <9002> -<9003> <9003> -<9005> <9005> -<9006> <9006> -<9008> <9008> -<900B> <900B> -<900D> <900D> -<900F> <900F> -<9010> <9010> -<9011> <9011> -<9014> <9014> -<9015> <9015> -endbfrange - -100 beginbfrange -<9017> <9017> -<9019> <9019> -<901A> <901A> -<901D> <901D> -<901E> <901E> -<901F> <901F> -<9020> <9020> -<9021> <9021> -<9022> <9022> -<9023> <9023> -<902E> <902E> -<9031> <9031> -<9032> <9032> -<9035> <9035> -<9038> <9038> -<903C> <903C> -<903E> <903E> -<9041> <9041> -<9042> <9042> -<9047> <9047> -<904A> <904A> -<904B> <904B> -<904D> <904D> -<904E> <904E> -<9050> <9050> -<9051> <9051> -<9053> <9053> -<9054> <9054> -<9055> <9055> -<9059> <9059> -<905C> <905C> -<905D> <905D> -<905E> <905E> -<9060> <9060> -<9061> <9061> -<9063> <9063> -<9069> <9069> -<906D> <906D> -<906E> <906E> -<906F> <906F> -<9072> <9072> -<9075> <9075> -<9077> <9077> -<9078> <9078> -<907A> <907A> -<907C> <907C> -<907D> <907D> -<907F> <907F> -<9080> <9080> -<9081> <9081> -<9082> <9082> -<9083> <9083> -<9084> <9084> -<9087> <9087> -<9088> <9088> -<908A> <908A> -<908F> <908F> -<9091> <9091> -<9095> <9095> -<9099> <9099> -<90A2> <90A2> -<90A3> <90A3> -<90A6> <90A6> -<90A8> <90A8> -<90AA> <90AA> -<90AF> <90AF> -<90B0> <90B0> -<90B1> <90B1> -<90B5> <90B5> -<90B8> <90B8> -<90C1> <90C1> -<90CA> <90CA> -<90DE> <90DE> -<90E1> <90E1> -<90E8> <90E8> -<90ED> <90ED> -<90F5> <90F5> -<90FD> <90FD> -<9102> <9102> -<9112> <9112> -<9115> <9115> -<9119> <9119> -<9127> <9127> -<912D> <912D> -<9132> <9132> -<9149> <9149> -<914A> <914A> -<914B> <914B> -<914C> <914C> -<914D> <914D> -<914E> <914E> -<9152> <9152> -<9162> <9162> -<9169> <9169> -<916A> <916A> -<916C> <916C> -<9175> <9175> -<9177> <9177> -<9178> <9178> -<9187> <9187> -endbfrange - -100 beginbfrange -<9189> <9189> -<918B> <918B> -<918D> <918D> -<9192> <9192> -<919C> <919C> -<91AB> <91AB> -<91AC> <91AC> -<91AE> <91AE> -<91AF> <91AF> -<91B1> <91B1> -<91B4> <91B4> -<91B5> <91B5> -<91C0> <91C0> -<91C7> <91C7> -<91C9> <91C9> -<91CB> <91CB> -<91CC> <91CC> -<91CD> <91CD> -<91CE> <91CE> -<91CF> <91CF> -<91D0> <91D0> -<91D1> <91D1> -<91D7> <91D7> -<91D8> <91D8> -<91DC> <91DC> -<91DD> <91DD> -<91E3> <91E3> -<91E7> <91E7> -<91EA> <91EA> -<91F5> <91F5> -<920D> <920D> -<9210> <9210> -<9211> <9211> -<9212> <9212> -<9217> <9217> -<921E> <921E> -<9234> <9234> -<923A> <923A> -<923F> <923F> -<9240> <9240> -<9245> <9245> -<9249> <9249> -<9257> <9257> -<925B> <925B> -<925E> <925E> -<9262> <9262> -<9264> <9264> -<9265> <9265> -<9266> <9266> -<9280> <9280> -<9283> <9283> -<9285> <9285> -<9291> <9291> -<9293> <9293> -<9296> <9296> -<9298> <9298> -<929C> <929C> -<92B3> <92B3> -<92B6> <92B6> -<92B7> <92B7> -<92B9> <92B9> -<92CC> <92CC> -<92CF> <92CF> -<92D2> <92D2> -<92E4> <92E4> -<92EA> <92EA> -<92F8> <92F8> -<92FC> <92FC> -<9304> <9304> -<9310> <9310> -<9318> <9318> -<931A> <931A> -<931E> <931E> -<931F> <931F> -<9320> <9320> -<9321> <9321> -<9322> <9322> -<9324> <9324> -<9326> <9326> -<9328> <9328> -<932B> <932B> -<932E> <932E> -<932F> <932F> -<9348> <9348> -<934A> <934A> -<934B> <934B> -<934D> <934D> -<9354> <9354> -<935B> <935B> -<936E> <936E> -<9375> <9375> -<937C> <937C> -<937E> <937E> -<938C> <938C> -<9394> <9394> -<9396> <9396> -<939A> <939A> -<93A3> <93A3> -<93A7> <93A7> -<93AC> <93AC> -endbfrange - -100 beginbfrange -<93AD> <93AD> -<93B0> <93B0> -<93C3> <93C3> -<93D1> <93D1> -<93DE> <93DE> -<93E1> <93E1> -<93E4> <93E4> -<93F6> <93F6> -<9404> <9404> -<9418> <9418> -<9425> <9425> -<942B> <942B> -<9435> <9435> -<9438> <9438> -<9444> <9444> -<9451> <9452> -<945B> <945B> -<947D> <947D> -<947F> <947F> -<9577> <9577> -<9580> <9580> -<9583> <9583> -<9589> <9589> -<958B> <958B> -<958F> <958F> -<9591> <9592> -<9593> <9593> -<9594> <9594> -<9598> <9598> -<95A3> <95A3> -<95A4> <95A4> -<95A5> <95A5> -<95A8> <95A8> -<95AD> <95AD> -<95B1> <95B1> -<95BB> <95BB> -<95BC> <95BC> -<95C7> <95C7> -<95CA> <95CA> -<95D4> <95D4> -<95D5> <95D5> -<95D6> <95D6> -<95DC> <95DC> -<95E1> <95E1> -<95E2> <95E2> -<961C> <961C> -<9621> <9621> -<962A> <962A> -<962E> <962E> -<9632> <9632> -<963B> <963B> -<963F> <963F> -<9640> <9640> -<9642> <9642> -<9644> <9644> -<964B> <964B> -<964C> <964C> -<964D> <964D> -<9650> <9650> -<965B> <965B> -<965C> <965C> -<965D> <965D> -<965E> <965E> -<965F> <965F> -<9662> <9662> -<9663> <9663> -<9664> <9664> -<966A> <966A> -<9670> <9670> -<9673> <9673> -<9675> <9675> -<9676> <9676> -<9677> <9677> -<9678> <9678> -<967D> <967D> -<9685> <9685> -<9686> <9686> -<968A> <968A> -<968B> <968B> -<968D> <968D> -<968E> <968E> -<9694> <9694> -<9695> <9695> -<9698> <9698> -<9699> <9699> -<969B> <969B> -<969C> <969C> -<96A3> <96A3> -<96A7> <96A8> -<96AA> <96AA> -<96B1> <96B1> -<96B7> <96B7> -<96BB> <96BB> -<96C0> <96C0> -<96C1> <96C1> -<96C4> <96C4> -<96C5> <96C5> -<96C6> <96C6> -<96C7> <96C7> -<96C9> <96C9> -endbfrange - -100 beginbfrange -<96CB> <96CB> -<96CC> <96CC> -<96CD> <96CD> -<96CE> <96CE> -<96D5> <96D5> -<96D6> <96D6> -<96D9> <96D9> -<96DB> <96DB> -<96DC> <96DC> -<96E2> <96E2> -<96E3> <96E3> -<96E8> <96E9> -<96EA> <96EA> -<96EF> <96EF> -<96F0> <96F0> -<96F2> <96F2> -<96F6> <96F6> -<96F7> <96F7> -<96F9> <96F9> -<96FB> <96FB> -<9700> <9700> -<9706> <9706> -<9707> <9707> -<9711> <9711> -<9713> <9713> -<9716> <9716> -<9719> <9719> -<971C> <971C> -<971E> <971E> -<9727> <9727> -<9730> <9730> -<9732> <9732> -<9739> <9739> -<973D> <973D> -<9742> <9742> -<9744> <9744> -<9748> <9748> -<9751> <9751> -<9756> <9756> -<975C> <975C> -<975E> <975E> -<9761> <9761> -<9762> <9762> -<9769> <9769> -<976D> <976D> -<9774> <9774> -<9777> <9777> -<977A> <977A> -<978B> <978B> -<978D> <978D> -<978F> <978F> -<97A0> <97A0> -<97A8> <97A8> -<97AB> <97AB> -<97AD> <97AD> -<97C6> <97C6> -<97CB> <97CB> -<97D3> <97D3> -<97DC> <97DC> -<97F3> <97F3> -<97F6> <97F6> -<97FB> <97FB> -<97FF> <97FF> -<9800> <9800> -<9801> <9801> -<9802> <9802> -<9803> <9803> -<9805> <9805> -<9806> <9806> -<9808> <9808> -<980A> <980A> -<980C> <980C> -<9810> <9810> -<9811> <9811> -<9812> <9812> -<9813> <9813> -<9817> <9817> -<9818> <9818> -<982D> <982D> -<9830> <9830> -<9838> <9838> -<9839> <9839> -<983B> <983B> -<9846> <9846> -<984C> <984C> -<984D> <984D> -<984E> <984E> -<9854> <9854> -<9858> <9858> -<985A> <985A> -<985E> <985E> -<9865> <9865> -<9867> <9867> -<986B> <986B> -<986F> <986F> -<98A8> <98A8> -<98AF> <98AF> -<98B1> <98B1> -<98C4> <98C4> -<98C7> <98C7> -endbfrange - -100 beginbfrange -<98DB> <98DB> -<98DC> <98DC> -<98DF> <98DF> -<98E1> <98E1> -<98E2> <98E2> -<98ED> <98ED> -<98EE> <98EE> -<98EF> <98EF> -<98F4> <98F4> -<98FC> <98FC> -<98FD> <98FD> -<98FE> <98FE> -<9903> <9903> -<9909> <9909> -<990A> <990A> -<990C> <990C> -<9910> <9910> -<9913> <9913> -<9918> <9918> -<991E> <991E> -<9920> <9920> -<9928> <9928> -<9945> <9945> -<9949> <9949> -<994B> <994B> -<994C> <994C> -<994D> <994D> -<9951> <9951> -<9952> <9952> -<9954> <9954> -<9957> <9957> -<9996> <9996> -<9999> <9999> -<999D> <999D> -<99A5> <99A5> -<99A8> <99A8> -<99AC> <99AC> -<99AD> <99AD> -<99AE> <99AE> -<99B1> <99B1> -<99B3> <99B3> -<99B4> <99B4> -<99B9> <99B9> -<99C1> <99C1> -<99D0> <99D0> -<99D1> <99D1> -<99D2> <99D2> -<99D5> <99D5> -<99D9> <99D9> -<99DD> <99DD> -<99DF> <99DF> -<99ED> <99ED> -<99F1> <99F1> -<99FF> <99FF> -<9A01> <9A01> -<9A08> <9A08> -<9A0E> <9A0F> -<9A19> <9A19> -<9A2B> <9A2B> -<9A30> <9A30> -<9A36> <9A36> -<9A37> <9A37> -<9A40> <9A40> -<9A43> <9A43> -<9A45> <9A45> -<9A4D> <9A4D> -<9A55> <9A55> -<9A57> <9A57> -<9A5A> <9A5A> -<9A5B> <9A5B> -<9A5F> <9A5F> -<9A62> <9A62> -<9A65> <9A65> -<9A69> <9A69> -<9A6A> <9A6A> -<9AA8> <9AA8> -<9AB8> <9AB8> -<9AD3> <9AD3> -<9AD4> <9AD4> -<9AD8> <9AD8> -<9AE5> <9AE5> -<9AEE> <9AEE> -<9B1A> <9B1A> -<9B27> <9B27> -<9B2A> <9B2A> -<9B31> <9B31> -<9B3C> <9B3C> -<9B41> <9B41> -<9B42> <9B42> -<9B43> <9B43> -<9B44> <9B44> -<9B45> <9B45> -<9B4F> <9B4F> -<9B54> <9B54> -<9B5A> <9B5A> -<9B6F> <9B6F> -<9B8E> <9B8E> -<9B91> <9B91> -<9B9F> <9B9F> -<9BAB> <9BAB> -endbfrange - -100 beginbfrange -<9BAE> <9BAE> -<9BC9> <9BC9> -<9BD6> <9BD6> -<9BE4> <9BE4> -<9BE8> <9BE8> -<9C0D> <9C0D> -<9C10> <9C10> -<9C12> <9C12> -<9C15> <9C15> -<9C25> <9C25> -<9C32> <9C32> -<9C3B> <9C3B> -<9C47> <9C47> -<9C49> <9C49> -<9C57> <9C57> -<9CE5> <9CE5> -<9CE7> <9CE7> -<9CE9> <9CE9> -<9CF3> <9CF3> -<9CF4> <9CF4> -<9CF6> <9CF6> -<9D09> <9D09> -<9D1B> <9D1B> -<9D26> <9D26> -<9D28> <9D28> -<9D3B> <9D3B> -<9D51> <9D51> -<9D5D> <9D5D> -<9D60> <9D60> -<9D61> <9D61> -<9D6C> <9D6C> -<9D72> <9D72> -<9DA9> <9DA9> -<9DAF> <9DAF> -<9DB4> <9DB4> -<9DC4> <9DC4> -<9DD7> <9DD7> -<9DF2> <9DF2> -<9DF8> <9DF8> -<9DF9> <9DF9> -<9DFA> <9DFA> -<9E1A> <9E1A> -<9E1E> <9E1E> -<9E75> <9E75> -<9E79> <9E79> -<9E7D> <9E7D> -<9E7F> <9E7F> -<9E92> <9E92> -<9E93> <9E93> -<9E97> <9E97> -<9E9D> <9E9D> -<9E9F> <9E9F> -<9EA5> <9EA5> -<9EB4> <9EB4> -<9EB5> <9EB5> -<9EBB> <9EBB> -<9EBE> <9EBE> -<9EC3> <9EC3> -<9ECD> <9ECD> -<9ECE> <9ECE> -<9ED1> <9ED1> -<9ED4> <9ED4> -<9ED8> <9ED8> -<9EDB> <9EDB> -<9EDC> <9EDC> -<9EDE> <9EDE> -<9EE8> <9EE8> -<9EF4> <9EF4> -<9F07> <9F07> -<9F08> <9F08> -<9F0E> <9F0E> -<9F13> <9F13> -<9F20> <9F20> -<9F3B> <9F3B> -<9F4A> <9F4A> -<9F4B> <9F4B> -<9F4E> <9F4E> -<9F52> <9F52> -<9F5F> <9F5F> -<9F61> <9F61> -<9F67> <9F67> -<9F6A> <9F6A> -<9F6C> <9F6C> -<9F77> <9F77> -<9F8D> <9F8D> -<9F90> <9F90> -<9F95> <9F95> -<9F9C> <9F9C> - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -100 beginbfrange - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endbfrange - -15 beginbfrange - - - - - - - - - - - - - - - -endbfrange - -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UniCNS-UCS2-H b/Resources/cmap/UniCNS-UCS2-H deleted file mode 100644 index 80061e47cc5..00000000000 --- a/Resources/cmap/UniCNS-UCS2-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (UniCNS-UCS2-H) %%Title: (UniCNS-UCS2-H Adobe CNS1 3) %%Version: 12.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2001 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 3 def end def /CMapName /UniCNS-UCS2-H def /CMapVersion 12.001 def /CMapType 1 def /XUID [1 10 25392] def /WMode 0 def 2 begincodespacerange <0000> endcodespacerange 1 beginnotdefrange <0000> <001f> 1 endnotdefrange 100 begincidrange <0020> <007e> 1 <00a2> <00a3> 262 <00a5> <00a5> 260 <00a7> <00a7> 178 <00a8> <00a8> 13747 <00ac> <00ac> 14049 <00b0> <00b0> 280 <00b1> <00b1> 212 <00b7> <00b7> 115 <00c0> <00c0> 18788 <00c1> <00c1> 18786 <00c8> <00c8> 18792 <00c9> <00c9> 18790 <00ca> <00ca> 18801 <00d2> <00d2> 18796 <00d3> <00d3> 18794 <00d7> <00d7> 210 <00e0> <00e0> 18805 <00e1> <00e1> 18803 <00e8> <00e8> 18810 <00e9> <00e9> 18808 <00ea> <00ea> 18832 <00ec> <00ec> 18814 <00ed> <00ed> 18812 <00f2> <00f2> 18818 <00f3> <00f3> 18816 <00f7> <00f7> 211 <00f8> <00f8> 18840 <00f9> <00f9> 18822 <00fa> <00fa> 18820 <00fc> <00fc> 18827 <0100> <0100> 18785 <0101> <0101> 18802 <0112> <0112> 18789 <0113> <0113> 18807 <011a> <011a> 18791 <011b> <011b> 18809 <012b> <012b> 18811 <014b> <014b> 18841 <014c> <014c> 18793 <014d> <014d> 18815 <0153> <0153> 18839 <016b> <016b> 18819 <01cd> <01cd> 18787 <01ce> <01ce> 18804 <01d0> <01d0> 18813 <01d1> <01d1> 18795 <01d2> <01d2> 18817 <01d4> <01d4> 18821 <01d6> <01d6> 18823 <01d8> <01d8> 18824 <01da> <01da> 18825 <01dc> <01dc> 18826 <0250> <0250> 18835 <0251> <0251> 18806 <0254> <0254> 18837 <025b> <025b> 18836 <0261> <0261> 18833 <026a> <026a> 18843 <0275> <0275> 18838 <0283> <0283> 18834 <028a> <028a> 18842 <02c6> <02c6> 13748 <02c7> <02c7> 504 <02ca> <02ca> 503 <02cb> <02cb> 505 <02d9> <02d9> 502 <0308> <0308> 13747 <0391> <03a1> 417 <03a3> <03a9> 434 <03b1> <03c1> 441 <03c3> <03c9> 458 <0401> <0401> 13936 <0410> <0415> 13930 <0416> <0435> 13937 <0436> <044f> 13970 <0451> <0451> 13969 <1ebe> <1ebe> 18798 <1ebf> <1ebf> 18829 <1ec0> <1ec0> 18800 <1ec1> <1ec1> 18831 <2013> <2013> 121 <2014> <2014> 123 <2018> <2019> 166 <201c> <201d> 168 <2022> <2022> 104 <2025> <2025> 111 <2026> <2026> 110 <2032> <2032> 173 <2035> <2035> 172 <203b> <203b> 177 <203e> <203e> 195 <20ac> <20ac> 17601 <2103> <2103> 266 <2105> <2105> 194 <2109> <2109> 267 <2116> <2116> 14054 <2121> <2121> 14055 <2160> <2169> 343 <2170> <2179> 526 endcidrange 100 begincidrange <2190> <2190> 248 <2191> <2191> 245 <2192> <2192> 247 <2193> <2193> 246 <2196> <2197> 249 <2198> <2198> 252 <2199> <2199> 251 <21b8> <21b9> 13997 <21e7> <21e7> 13996 <221a> <221a> 213 <221e> <221e> 220 <221f> <221f> 233 <2220> <2220> 232 <2223> <2223> 254 <2225> <2225> 253 <2229> <222a> 229 <222b> <222b> 237 <222e> <222e> 238 <2234> <2234> 240 <2235> <2235> 239 <223c> <223c> 228 <2252> <2252> 221 <2260> <2260> 219 <2261> <2261> 222 <2266> <2267> 217 <22a5> <22a5> 231 <22bf> <22bf> 234 <2400> <241f> 562 <2421> <2421> 594 <2460> <2469> 506 <2474> <247d> 516 <2500> <2500> 311 <2502> <2502> 312 <250c> <250c> 314 <2510> <2510> 315 <2514> <2514> 316 <2518> <2518> 317 <251c> <251c> 309 <2524> <2524> 308 <252c> <252c> 307 <2534> <2534> 306 <253c> <253c> 305 <2550> <2550> 322 <2551> <2551> 14090 <2552> <2552> 14072 <2553> <2553> 14081 <2554> <2554> 14063 <2555> <2555> 14074 <2556> <2556> 14083 <2557> <2557> 14065 <2558> <2558> 14078 <2559> <2559> 14087 <255a> <255a> 14069 <255b> <255b> 14080 <255c> <255c> 14089 <255d> <255d> 14071 <255e> <255e> 323 <255f> <255f> 14084 <2560> <2560> 14066 <2561> <2561> 325 <2562> <2562> 14086 <2563> <2563> 14068 <2564> <2564> 14073 <2565> <2565> 14082 <2566> <2566> 14064 <2567> <2567> 14079 <2568> <2568> 14088 <2569> <2569> 14070 <256a> <256a> 324 <256b> <256b> 14085 <256c> <256c> 14067 <256d> <256e> 318 <256f> <256f> 321 <2570> <2570> 320 <2571> <2573> 330 <2581> <2588> 290 <2589> <2589> 304 <258a> <258a> 303 <258b> <258b> 302 <258c> <258c> 301 <258d> <258d> 300 <258e> <258e> 299 <258f> <258f> 298 <2593> <2593> 14096 <2594> <2594> 310 <2595> <2595> 313 <25a0> <25a0> 190 <25a1> <25a1> 189 <25b2> <25b2> 183 <25b3> <25b3> 182 <25bc> <25bc> 192 <25bd> <25bd> 191 <25c6> <25c6> 188 <25c7> <25c7> 187 <25cb> <25cb> 180 <25ce> <25ce> 184 <25cf> <25cf> 181 <25e2> <25e3> 326 <25e4> <25e4> 329 <25e5> <25e5> 328 endcidrange 100 begincidrange <2605> <2605> 186 <2606> <2606> 185 <2609> <2609> 244 <2640> <2640> 241 <2641> <2641> 243 <2642> <2642> 242 <273d> <273d> 13760 <2e80> <2e80> 17608 <2e84> <2e84> 17692 <2e86> <2e88> 17693 <2e8a> <2e8a> 17696 <2e8c> <2e8d> 17697 <2e95> <2e95> 17699 <2e9c> <2e9c> 17700 <2e9d> <2e9d> 732 <2ea5> <2ea5> 17701 <2ea7> <2ea7> 17702 <2eaa> <2eaa> 17703 <2eac> <2eac> 17704 <2eae> <2eae> 17705 <2eb6> <2eb6> 17706 <2ebc> <2ebc> 17707 <2ebe> <2ebe> 17708 <2ec6> <2ec6> 1289 <2eca> <2eca> 17709 <2ecc> <2ecd> 17710 <2ecf> <2ecf> 17712 <2ed6> <2ed7> 17713 <2ede> <2ede> 17715 <2ee3> <2ee3> 2550 <2f33> <2f33> 551 <3000> <3000> 99 <3001> <3002> 101 <3003> <3003> 179 <3005> <3007> 13754 <3008> <3009> 148 <300a> <300b> 144 <300c> <300d> 152 <300e> <300f> 156 <3010> <3011> 140 <3012> <3012> 261 <3014> <3015> 136 <301d> <301e> 170 <3021> <3029> 353 <3041> <3093> 13761 <309b> <309c> 17606 <309d> <309e> 13751 <30a1> <30f6> 13844 <30fc> <30fc> 13757 <30fd> <30fe> 13749 <3105> <3129> 465 <3231> <3231> 14053 <32a3> <32a3> 193 <338e> <338f> 277 <339c> <339e> 272 <33a1> <33a1> 276 <33c4> <33c4> 279 <33ce> <33ce> 275 <33d1> <33d1> 236 <33d2> <33d2> 235 <33d5> <33d5> 271 <3435> <3435> 14781 <3440> <3440> 15463 <344c> <344c> 17811 <3464> <3464> 14981 <3473> <3473> 15813 <347a> <347a> 16435 <347d> <347d> 17815 <347e> <347e> 18083 <3493> <3493> 17310 <3496> <3496> 14300 <34a5> <34a5> 17816 <34af> <34af> 15487 <34bc> <34bc> 17280 <34c1> <34c1> 17659 <34c8> <34c8> 15616 <34df> <34df> 16036 <34e4> <34e4> 15956 <34fb> <34fb> 15818 <3506> <3506> 17206 <353e> <353e> 17639 <3551> <3551> 17825 <3553> <3553> 17317 <3561> <3561> 16600 <356d> <356d> 17828 <3570> <3570> 15151 <3572> <3572> 17829 <3577> <3577> 16075 <3578> <3578> 17273 <3584> <3584> 14843 <3597> <3597> 15149 <3598> <3598> 17840 <35a1> <35a1> 16610 <35a5> <35a5> 17841 <35ad> <35ad> 16124 <35bf> <35bf> 17842 <35c1> <35c1> 17792 <35c5> <35c5> 17844 <35c7> <35c7> 17823 <35ca> <35ca> 15939 endcidrange 100 begincidrange <35ce> <35ce> 16001 <35d2> <35d2> 16329 <35d6> <35d6> 16309 <35db> <35db> 18189 <35dd> <35dd> 17324 <35f1> <35f1> 18070 <35f2> <35f2> 17959 <35f3> <35f3> 16236 <35fb> <35fb> 17864 <35fe> <35fe> 16234 <3609> <3609> 17909 <3618> <3618> 18545 <361a> <361a> 17946 <3623> <3623> 16582 <362d> <362d> 16006 <3635> <3635> 18734 <3639> <3639> 16741 <363e> <363e> 14856 <3647> <3647> 18438 <3648> <3648> 14342 <3649> <3649> 16403 <364e> <364e> 18072 <365f> <365f> 15859 <367a> <367a> 16099 <3681> <3681> 17830 <369a> <369a> 15473 <36a5> <36a5> 18690 <36aa> <36aa> 15152 <36ac> <36ac> 18688 <36b0> <36b0> 15583 <36b1> <36b1> 16589 <36b5> <36b5> 15298 <36b9> <36b9> 18567 <36bc> <36bc> 15615 <36c1> <36c1> 14277 <36c3> <36c3> 16613 <36c4> <36c4> 14597 <36c5> <36c5> 17046 <36c7> <36c7> 15674 <36c8> <36c8> 18464 <36d3> <36d3> 14904 <36d4> <36d4> 15283 <36d6> <36d6> 15628 <36dd> <36dd> 14902 <36e1> <36e1> 14716 <36e2> <36e2> 15581 <36e5> <36e5> 16918 <36e6> <36e6> 16636 <36f5> <36f5> 14872 <3701> <3701> 14900 <3703> <3703> 17935 <3708> <3708> 16639 <370a> <370a> 15573 <370d> <370d> 16952 <371c> <371c> 15870 <3722> <3722> 14713 <3723> <3723> 14720 <3725> <3725> 14409 <372c> <372c> 15500 <372d> <372d> 15671 <3730> <3730> 18780 <3732> <3732> 16646 <3733> <3733> 14743 <373a> <373a> 15958 <3740> <3740> 16898 <3743> <3743> 16438 <3762> <3762> 15798 <376f> <376f> 18379 <3797> <3797> 17901 <37a0> <37a0> 14888 <37b9> <37b9> 17335 <37be> <37be> 14654 <37f2> <37f2> 15265 <37f8> <37f8> 17106 <37fb> <37fb> 16117 <380f> <380f> 17964 <3819> <3819> 14767 <3820> <3820> 17967 <382d> <382d> 16686 <3836> <3836> 16691 <3838> <3838> 17339 <3863> <3863> 18115 <38a0> <38a0> 16709 <38c3> <38c3> 14610 <38cc> <38cc> 16502 <38d1> <38d1> 14997 <38fa> <38fa> 17643 <3908> <3908> 17970 <3914> <3914> 17342 <3927> <3927> 15409 <3932> <3932> 16770 <393f> <393f> 17971 <394d> <394d> 17972 <3963> <3963> 16739 <3980> <3980> 14452 <3989> <3989> 17976 <398a> <398a> 15592 <3992> <3992> 17270 <3999> <3999> 14778 <399b> <399b> 15795 endcidrange 100 begincidrange <39a1> <39a1> 15897 <39a4> <39a4> 15887 <39b8> <39b8> 17979 <39dc> <39dc> 16078 <39e2> <39e2> 18120 <39e5> <39e5> 14651 <39ec> <39ec> 17168 <39f8> <39f8> 17982 <39fb> <39fb> 17221 <39fe> <39fe> 17256 <3a01> <3a01> 16864 <3a03> <3a03> 17984 <3a06> <3a06> 17271 <3a17> <3a17> 16784 <3a18> <3a18> 17295 <3a29> <3a29> 14942 <3a2a> <3a2a> 16095 <3a34> <3a34> 17177 <3a4b> <3a4b> 17988 <3a52> <3a52> 16083 <3a57> <3a57> 16798 <3a5c> <3a5c> 16324 <3a5e> <3a5e> 15111 <3a66> <3a66> 16796 <3a67> <3a67> 17203 <3a97> <3a97> 17991 <3aab> <3aab> 16529 <3abd> <3abd> 17993 <3ade> <3ade> 16716 <3ae0> <3ae0> 14970 <3af0> <3af0> 18098 <3af2> <3af2> 17996 <3afb> <3afb> 15090 <3b0e> <3b0e> 14568 <3b19> <3b19> 18117 <3b22> <3b22> 17998 <3b2b> <3b2b> 18774 <3b39> <3b39> 18251 <3b42> <3b42> 18000 <3b58> <3b58> 18002 <3b60> <3b60> 14650 <3b71> <3b71> 18006 <3b72> <3b72> 18005 <3b7b> <3b7b> 18007 <3b7c> <3b7c> 14426 <3b80> <3b80> 16866 <3b96> <3b96> 15004 <3b99> <3b99> 15000 <3ba1> <3ba1> 16873 <3bbc> <3bbc> 17352 <3bbe> <3bbe> 15793 <3bc2> <3bc2> 16692 <3bc4> <3bc4> 15008 <3bd7> <3bd7> 15020 <3bdd> <3bdd> 18015 <3bec> <3bec> 18020 <3bf2> <3bf2> 18022 <3bf3> <3bf3> 16883 <3bf4> <3bf4> 14958 <3c0d> <3c0d> 16887 <3c11> <3c11> 15936 <3c15> <3c15> 14744 <3c54> <3c54> 15872 <3ccb> <3ccb> 18032 <3ccd> <3ccd> 15589 <3cd1> <3cd1> 16387 <3cd6> <3cd6> 15607 <3cdc> <3cdc> 16462 <3ceb> <3ceb> 16919 <3cef> <3cef> 18037 <3d13> <3d13> 14195 <3d1d> <3d1d> 14652 <3d32> <3d32> 18775 <3d3b> <3d3b> 16965 <3d46> <3d46> 18053 <3d4c> <3d4c> 15595 <3d4e> <3d4e> 16962 <3d51> <3d51> 14570 <3d5f> <3d5f> 16729 <3d62> <3d62> 15454 <3d69> <3d69> 15594 <3d6a> <3d6a> 18057 <3d6f> <3d6f> 15612 <3d75> <3d75> 18058 <3d7d> <3d7d> 15407 <3d85> <3d85> 18763 <3d8a> <3d8a> 18061 <3d8f> <3d8f> 15037 <3d91> <3d91> 18063 <3da5> <3da5> 15702 <3dad> <3dad> 18073 <3db4> <3db4> 16550 <3dbf> <3dbf> 14288 <3dc6> <3dc6> 18654 <3dc7> <3dc7> 16740 <3dcc> <3dcc> 15727 <3dcd> <3dcd> 15091 <3dd3> <3dd3> 14305 <3ddb> <3ddb> 16383 <3de7> <3de7> 14745 endcidrange 100 begincidrange <3de8> <3de8> 16989 <3deb> <3deb> 15962 <3df3> <3df3> 18132 <3df7> <3df7> 18603 <3dfc> <3dfc> 17963 <3dfd> <3dfd> 15380 <3e06> <3e06> 18717 <3e40> <3e40> 16745 <3e43> <3e43> 17261 <3e48> <3e48> 17813 <3e55> <3e55> 17023 <3e74> <3e74> 16098 <3ea8> <3ea8> 17156 <3ea9> <3ea9> 18157 <3eaa> <3eaa> 16501 <3ead> <3ead> 15261 <3eb1> <3eb1> 15064 <3eb8> <3eb8> 14923 <3ebf> <3ebf> 15115 <3ec2> <3ec2> 15320 <3ec7> <3ec7> 14709 <3eca> <3eca> 18161 <3ecc> <3ecc> 15330 <3ed0> <3ed0> 14420 <3ed1> <3ed1> 18162 <3ed6> <3ed6> 15533 <3ed7> <3ed7> 17055 <3eda> <3eda> 15618 <3ede> <3ede> 14834 <3ee1> <3ee1> 15528 <3ee2> <3ee2> 18166 <3ee7> <3ee7> 15324 <3ee9> <3ee9> 15524 <3eeb> <3eeb> 14698 <3ef0> <3ef0> 18167 <3ef3> <3ef3> 15069 <3ef4> <3ef4> 18168 <3efa> <3efa> 18169 <3efc> <3efc> 15336 <3eff> <3eff> 15093 <3f00> <3f00> 15373 <3f04> <3f04> 17091 <3f06> <3f06> 15063 <3f0e> <3f0e> 18171 <3f53> <3f53> 18172 <3f58> <3f58> 15081 <3f59> <3f59> 16521 <3f63> <3f63> 15078 <3f7c> <3f7c> 18176 <3f93> <3f93> 17869 <3fc0> <3fc0> 17359 <3fd7> <3fd7> 17361 <3fdc> <3fdc> 18180 <3fe5> <3fe5> 18143 <3fed> <3fed> 17205 <3ff9> <3ff9> 17879 <3ffa> <3ffa> 17236 <4004> <4004> 16654 <401d> <401d> 18185 <4039> <4039> 18187 <4045> <4045> 18188 <4053> <4053> 17846 <4057> <4057> 14749 <4062> <4062> 15307 <4065> <4065> 16339 <406a> <406a> 18191 <406f> <406f> 18192 <40a8> <40a8> 17365 <40bb> <40bb> 17856 <40bf> <40bf> 16108 <40c8> <40c8> 15118 <40d8> <40d8> 16811 <40df> <40df> 15895 <40fa> <40fa> 16062 <4103> <4103> 17367 <4104> <4104> 16988 <4109> <4109> 18204 <410e> <410e> 15131 <4132> <4132> 15141 <4167> <4167> 18207 <416c> <416c> 14510 <416e> <416e> 15139 <417f> <417f> 15234 <4190> <4190> 18112 <41b2> <41b2> 18208 <41c4> <41c4> 18211 <41ca> <41ca> 14143 <41cf> <41cf> 18214 <41db> <41db> 14271 <41ef> <41ef> 14147 <41f9> <41f9> 15166 <4211> <4211> 15169 <4240> <4240> 14321 <4260> <4260> 18219 <426a> <426a> 15189 <427a> <427a> 18220 <428c> <428c> 18223 <4294> <4294> 18225 <42b5> <42b5> 16400 <42b9> <42b9> 14502 endcidrange 100 begincidrange <42bc> <42bc> 15498 <42f4> <42f4> 15289 <42fb> <42fb> 15598 <42fc> <42fc> 16870 <432b> <432b> 14205 <436e> <436e> 18122 <4397> <4397> 18235 <43ba> <43ba> 17247 <43c1> <43c1> 18069 <43d9> <43d9> 17214 <43df> <43df> 15945 <43ed> <43ed> 18245 <43f2> <43f2> 15944 <4401> <4401> 18250 <4402> <4402> 15219 <4413> <4413> 18255 <4425> <4425> 18257 <442d> <442d> 18258 <447a> <447a> 14255 <448f> <448f> 18264 <449f> <449f> 15074 <44a0> <44a0> 14317 <44a2> <44a2> 16505 <44b0> <44b0> 18268 <44b7> <44b7> 16289 <44c0> <44c0> 15367 <44c5> <44c5> 16912 <44ce> <44ce> 15651 <44dd> <44dd> 14813 <44df> <44df> 15650 <44e4> <44e4> 14306 <44e9> <44e9> 16847 <44ea> <44ea> 15217 <44eb> <44eb> 15602 <44ec> <44ec> 16052 <44f4> <44f4> 14738 <4503> <4503> 18079 <4504> <4504> 18275 <4509> <4509> 15952 <450b> <450b> 14292 <4516> <4516> 14329 <451d> <451d> 14183 <4527> <4527> 14327 <452e> <452e> 15571 <4533> <4533> 15441 <453b> <453b> 18282 <453d> <453d> 14532 <453f> <453f> 15890 <4543> <4543> 14323 <4551> <4551> 15076 <4552> <4552> 16563 <4555> <4555> 16958 <455c> <455c> 14219 <4562> <4562> 18752 <456a> <456a> 14340 <4577> <4577> 18286 <4585> <4585> 14533 <45e9> <45e9> 16100 <4606> <4606> 18291 <460f> <460f> 14357 <4615> <4615> 14403 <4617> <4617> 18292 <465b> <465b> 14365 <467a> <467a> 14825 <4680> <4680> 15617 <46cf> <46cf> 15264 <46d0> <46d0> 15866 <46f5> <46f5> 15263 <4713> <4713> 14387 <4718> <4718> 15815 <474e> <474e> 16060 <477c> <477c> 15821 <4798> <4798> 18305 <47a6> <47a6> 16547 <47b6> <47b6> 16106 <47d5> <47d5> 17178 <47ed> <47ed> 18307 <47f4> <47f4> 17199 <4800> <4800> 17950 <480b> <480b> 17234 <4837> <4837> 18311 <485d> <485d> 16655 <4871> <4871> 15619 <489b> <489b> 15293 <48ad> <48ad> 18321 <48ae> <48ae> 18765 <48d0> <48d0> 15783 <48dd> <48dd> 16672 <48ed> <48ed> 17032 <48f3> <48f3> 16065 <48fa> <48fa> 15940 <4906> <4906> 15303 <4911> <4911> 17796 <491e> <491e> 18324 <4925> <4925> 15375 <492a> <492a> 18094 <492d> <492d> 18125 <4935> <4935> 15555 <493c> <493c> 15352 <493e> <493e> 15622 endcidrange 100 begincidrange <4945> <4945> 18339 <4951> <4951> 18340 <4953> <4953> 17069 <4965> <4965> 14489 <496a> <496a> 18345 <4972> <4972> 14884 <4989> <4989> 14235 <49a1> <49a1> 14519 <49a7> <49a7> 18350 <49df> <49df> 14506 <49e5> <49e5> 18353 <49e7> <49e7> 17953 <4a0f> <4a0f> 14531 <4a1d> <4a1d> 15340 <4a24> <4a24> 18354 <4a35> <4a35> 18356 <4a96> <4a96> 15591 <4ab4> <4ab4> 17249 <4ab8> <4ab8> 15784 <4ad1> <4ad1> 14563 <4ae4> <4ae4> 18359 <4aff> <4aff> 14578 <4b19> <4b19> 18361 <4b2c> <4b2c> 17951 <4b37> <4b37> 16809 <4b6f> <4b6f> 15382 <4b70> <4b70> 18368 <4b72> <4b72> 14588 <4b7b> <4b7b> 15501 <4b7e> <4b7e> 16394 <4b8e> <4b8e> 14839 <4b90> <4b90> 15392 <4b93> <4b93> 14988 <4b96> <4b96> 14658 <4b97> <4b97> 15396 <4b9d> <4b9d> 18370 <4bbd> <4bbd> 15395 <4bbe> <4bbe> 14676 <4bc0> <4bc0> 15836 <4c04> <4c04> 16315 <4c07> <4c07> 16311 <4c0e> <4c0e> 14604 <4c3b> <4c3b> 16188 <4c3e> <4c3e> 17787 <4c5b> <4c5b> 16089 <4c6d> <4c6d> 18377 <4c7d> <4c7d> 15974 <4ca4> <4ca4> 18622 <4cae> <4cae> 15426 <4cb0> <4cb0> 15429 <4cb7> <4cb7> 15905 <4ccd> <4ccd> 17784 <4ce1> <4ce1> 16115 <4ced> <4ced> 16555 <4d09> <4d09> 16086 <4d10> <4d10> 16663 <4d34> <4d34> 14645 <4d91> <4d91> 17397 <4d9c> <4d9c> 18628 <4e00> <4e00> 595 <4e01> <4e01> 597 <4e03> <4e03> 598 <4e04> <4e04> 18686 <4e07> <4e07> 6001 <4e08> <4e08> 617 <4e09> <4e09> 615 <4e0a> <4e0a> 618 <4e0b> <4e0b> 616 <4e0c> <4e0c> 6002 <4e0d> <4e0d> 660 <4e0e> <4e0e> 6010 <4e0f> <4e0f> 6008 <4e10> <4e10> 659 <4e11> <4e11> 658 <4e14> <4e14> 754 <4e15> <4e15> 753 <4e16> <4e16> 752 <4e18> <4e18> 755 <4e19> <4e19> 751 <4e1a> <4e1a> 18685 <4e1c> <4e1c> 18656 <4e1e> <4e1f> 878 <4e21> <4e21> 15725 <4e24> <4e24> 17805 <4e26> <4e26> 1320 <4e28> <4e28> 536 <4e2a> <4e2a> 16215 <4e2b> <4e2b> 619 <4e2c> <4e2c> 17651 <4e2d> <4e2d> 661 <4e2e> <4e2e> 6011 <4e30> <4e30> 662 <4e31> <4e31> 6030 <4e32> <4e32> 1045 <4e33> <4e33> 6388 <4e36> <4e36> 537 <4e37> <4e37> 17687 <4e38> <4e38> 620 <4e39> <4e39> 663 <4e3b> <4e3b> 756 endcidrange 100 begincidrange <4e3c> <4e3c> 6031 <4e3d> <4e3d> 17719 <4e3f> <4e3f> 538 <4e41> <4e41> 13999 <4e42> <4e42> 5996 <4e43> <4e43> 599 <4e45> <4e45> 622 <4e47> <4e47> 6003 <4e48> <4e48> 623 <4e49> <4e49> 16526 <4e4b> <4e4b> 664 <4e4d> <4e4d> 757 <4e4e> <4e4e> 759 <4e4f> <4e4f> 758 <4e52> <4e53> 880 <4e56> <4e56> 1321 <4e58> <4e58> 2097 <4e59> <4e59> 596 <4e5a> <4e5a> 14001 <4e5b> <4e5b> 17637 <4e5c> <4e5c> 5997 <4e5d> <4e5d> 600 <4e5e> <4e5e> 625 <4e5f> <4e5f> 624 <4e69> <4e69> 882 <4e6a> <4e6a> 15845 <4e73> <4e73> 1322 <4e78> <4e78> 15758 <4e7e> <4e7e> 2555 <4e7f> <4e7f> 7733 <4e80> <4e80> 17806 <4e81> <4e81> 17340 <4e82> <4e82> 3518 <4e83> <4e84> 9057 <4e85> <4e85> 539 <4e86> <4e86> 601 <4e87> <4e87> 17807 <4e88> <4e88> 666 <4e89> <4e89> 17820 <4e8b> <4e8b> 1323 <4e8c> <4e8c> 602 <4e8d> <4e8d> 6004 <4e8e> <4e8e> 626 <4e91> <4e91> 667 <4e92> <4e92> 669 <4e93> <4e93> 6012 <4e94> <4e94> 670 <4e95> <4e95> 668 <4e98> <4e98> 14788 <4e99> <4e99> 883 <4e9a> <4e9a> 18645 <4e9b> <4e9b> 1324 <4e9e> <4e9e> 1325 <4e9f> <4e9f> 1699 <4ea0> <4ea0> 540 <4ea1> <4ea1> 627 <4ea2> <4ea2> 671 <4ea4> <4ea4> 884 <4ea5> <4ea5> 886 <4ea6> <4ea6> 885 <4ea8> <4ea8> 1046 <4eab> <4eac> 1326 <4ead> <4eae> 1700 <4eb3> <4eb3> 2098 <4eb6> <4eb6> 9059 <4eb7> <4eb7> 16700 <4eb9> <4eb9> 13175 <4eba> <4eba> 603 <4ebb> <4ebb> 17638 <4ebc> <4ebc> 14769 <4ebf> <4ebf> 17808 <4ec0> <4ec0> 673 <4ec1> <4ec1> 672 <4ec2> <4ec2> 6013 <4ec3> <4ec3> 674 <4ec4> <4ec4> 680 <4ec6> <4ec7> 675 <4ec8> <4ec8> 6015 <4ec9> <4ec9> 6014 <4eca> <4ecb> 678 <4ecd> <4ecd> 677 <4ece> <4ece> 16226 <4ed4> <4ed7> 762 <4ed8> <4ed8> 761 <4ed9> <4ed9> 768 <4eda> <4eda> 6037 <4edc> <4edc> 6033 <4edd> <4edd> 6036 <4ede> <4ede> 769 <4edf> <4edf> 785 <4ee1> <4ee1> 6035 <4ee3> <4ee4> 766 <4ee5> <4ee5> 760 <4ee8> <4ee8> 6032 <4ee9> <4ee9> 6034 <4eea> <4eea> 18635 <4eeb> <4eeb> 17809 <4eee> <4eee> 15734 <4ef0> <4ef0> 899 <4ef1> <4ef1> 6074 endcidrange 100 begincidrange <4ef2> <4ef2> 896 <4ef3> <4ef3> 900 <4ef4> <4ef4> 6084 <4ef5> <4ef5> 6072 <4ef6> <4ef6> 897 <4ef7> <4ef7> 6076 <4ef8> <4ef8> 14765 <4efb> <4efb> 898 <4efd> <4efd> 901 <4eff> <4eff> 887 <4f00> <4f00> 6075 <4f01> <4f01> 902 <4f02> <4f02> 6079 <4f03> <4f03> 14792 <4f04> <4f04> 6083 <4f05> <4f05> 6080 <4f08> <4f08> 6077 <4f09> <4f09> 888 <4f0a> <4f0a> 890 <4f0b> <4f0b> 903 <4f0d> <4f0d> 892 <4f0e> <4f0e> 6069 <4f0f> <4f0f> 895 <4f10> <4f11> 893 <4f12> <4f12> 6085 <4f13> <4f13> 6082 <4f14> <4f14> 6073 <4f15> <4f15> 891 <4f18> <4f18> 6070 <4f19> <4f19> 889 <4f1a> <4f1a> 17724 <4f1d> <4f1d> 6078 <4f22> <4f22> 6081 <4f28> <4f28> 17725 <4f29> <4f29> 14782 <4f2c> <4f2c> 6071 <4f2d> <4f2d> 6191 <4f2f> <4f2f> 1068 <4f30> <4f30> 1055 <4f32> <4f32> 14653 <4f33> <4f33> 6192 <4f34> <4f34> 1052 <4f36> <4f36> 1070 <4f37> <4f37> 17810 <4f38> <4f38> 1060 <4f39> <4f39> 16229 <4f3a> <4f3a> 1059 <4f3b> <4f3b> 6180 <4f3c> <4f3c> 1063 <4f3d> <4f3d> 1058 <4f3e> <4f3e> 6185 <4f3f> <4f3f> 6193 <4f41> <4f41> 6189 <4f42> <4f42> 14795 <4f43> <4f43> 1061 <4f45> <4f45> 15247 <4f46> <4f46> 1064 <4f47> <4f47> 1049 <4f48> <4f48> 1073 <4f49> <4f49> 6182 <4f4b> <4f4b> 14772 <4f4c> <4f4c> 6400 <4f4d> <4f4d> 1047 <4f4e> <4f4e> 1069 <4f4f> <4f4f> 1048 <4f50> <4f51> 1056 <4f52> <4f52> 6187 <4f53> <4f53> 6183 <4f54> <4f54> 1062 <4f55> <4f55> 1054 <4f56> <4f56> 6179 <4f57> <4f57> 1050 <4f58> <4f58> 6190 <4f59> <4f59> 1071 <4f5a> <4f5a> 1074 <4f5b> <4f5b> 1053 <4f5c> <4f5c> 1066 <4f5d> <4f5d> 1072 <4f5e> <4f5e> 1051 <4f5f> <4f5f> 6188 <4f60> <4f60> 1067 <4f61> <4f61> 6194 <4f62> <4f62> 6181 <4f63> <4f63> 1065 <4f64> <4f64> 6184 <4f67> <4f67> 6186 <4f69> <4f69> 1341 <4f6a> <4f6a> 6402 <4f6b> <4f6b> 6414 <4f6c> <4f6c> 1333 <4f6e> <4f6e> 6415 <4f6f> <4f6f> 1328 <4f70> <4f70> 1338 <4f72> <4f72> 15474 <4f73> <4f73> 1331 <4f74> <4f74> 6396 <4f75> <4f75> 1339 <4f76> <4f76> 6395 <4f77> <4f77> 6399 <4f78> <4f78> 6406 endcidrange 100 begincidrange <4f79> <4f79> 6404 <4f7a> <4f7a> 1347 <4f7b> <4f7b> 1342 <4f7c> <4f7c> 6390 <4f7d> <4f7d> 6392 <4f7e> <4f7e> 1344 <4f7f> <4f7f> 1332 <4f80> <4f80> 6393 <4f81> <4f81> 6405 <4f82> <4f82> 6412 <4f83> <4f83> 1337 <4f84> <4f84> 6398 <4f85> <4f85> 6391 <4f86> <4f86> 1336 <4f87> <4f87> 6394 <4f88> <4f88> 1340 <4f89> <4f89> 6397 <4f8a> <4f8a> 14773 <4f8b> <4f8b> 1335 <4f8d> <4f8d> 1330 <4f8f> <4f8f> 1345 <4f90> <4f90> 6407 <4f91> <4f91> 1346 <4f92> <4f92> 6411 <4f94> <4f94> 6409 <4f95> <4f95> 6413 <4f96> <4f96> 1343 <4f97> <4f97> 6401 <4f98> <4f98> 6389 <4f9a> <4f9a> 6403 <4f9b> <4f9b> 1334 <4f9c> <4f9c> 6408 <4f9d> <4f9d> 1329 <4f9e> <4f9e> 6410 <4fa2> <4fa2> 14791 <4fa8> <4fa8> 17726 <4fab> <4fab> 16418 <4fae> <4fae> 1716 <4faf> <4faf> 1704 <4fb0> <4fb0> 15690 <4fb2> <4fb2> 6749 <4fb3> <4fb3> 6757 <4fb5> <4fb5> 1703 <4fb6> <4fb6> 1711 <4fb7> <4fb7> 1723 <4fb9> <4fb9> 6763 <4fba> <4fba> 6761 <4fbb> <4fbb> 6756 <4fbd> <4fbd> 17812 <4fbf> <4fbf> 1705 <4fc0> <4fc0> 6762 <4fc1> <4fc1> 6752 <4fc2> <4fc2> 1719 <4fc3> <4fc3> 1710 <4fc4> <4fc4> 1718 <4fc5> <4fc5> 6747 <4fc7> <4fc7> 6759 <4fc8> <4fc8> 18152 <4fc9> <4fc9> 6750 <4fca> <4fca> 1714 <4fcb> <4fcb> 6751 <4fcc> <4fcc> 14799 <4fcd> <4fcd> 6746 <4fce> <4fce> 1721 <4fcf> <4fcf> 1708 <4fd0> <4fd0> 1717 <4fd1> <4fd1> 1707 <4fd3> <4fd3> 6748 <4fd4> <4fd4> 6753 <4fd6> <4fd6> 6760 <4fd7> <4fd7> 1715 <4fd8> <4fd8> 1712 <4fd9> <4fd9> 6755 <4fda> <4fda> 1720 <4fdb> <4fdb> 6758 <4fdc> <4fdc> 6754 <4fdd> <4fdd> 1709 <4fde> <4fde> 1722 <4fdf> <4fdf> 1713 <4fe0> <4fe0> 1706 <4fe1> <4fe1> 1702 <4fe4> <4fe4> 15462 <4fe5> <4fe5> 14800 <4fec> <4fec> 6764 <4fee> <4fee> 2124 <4fef> <4fef> 2102 <4ff1> <4ff1> 2118 <4ff2> <4ff2> 16168 <4ff3> <4ff3> 2123 <4ff4> <4ff4> 7204 <4ff5> <4ff5> 7203 <4ff6> <4ff7> 7208 <4ff8> <4ff8> 2105 <4ff9> <4ff9> 14259 <4ffa> <4ffa> 2114 <4ffd> <4ffd> 16166 <4ffe> <4ffe> 2127 <5000> <5000> 2115 <5003> <5003> 17814 <5005> <5005> 7197 endcidrange 100 begincidrange <5006> <5006> 2108 <5007> <5007> 7198 <5008> <5008> 16420 <5009> <5009> 2129 <500b> <500b> 2120 <500c> <500d> 2099 <500e> <500e> 7217 <500f> <500f> 2572 <5011> <5011> 2113 <5012> <5012> 2112 <5013> <5013> 7199 <5014> <5014> 2116 <5015> <5015> 7749 <5016> <5016> 2107 <5017> <5017> 7210 <5018> <5018> 2122 <5019> <5019> 2121 <501a> <501a> 2111 <501b> <501b> 7202 <501c> <501c> 7211 <501e> <501e> 7196 <501f> <501f> 2110 <5020> <5020> 7212 <5021> <5021> 2119 <5022> <5022> 7200 <5023> <5023> 2101 <5025> <5025> 2104 <5026> <5026> 2103 <5027> <5027> 7213 <5028> <5028> 2117 <5029> <5029> 2106 <502a> <502a> 2126 <502b> <502b> 2128 <502c> <502c> 7207 <502d> <502d> 2125 <502e> <502e> 14796 <502f> <502f> 7215 <5030> <5030> 7201 <5031> <5031> 7216 <5033> <5033> 7205 <5034> <5034> 14608 <5035> <5035> 7214 <5037> <5037> 7206 <503c> <503c> 2109 <5040> <5040> 7757 <5041> <5041> 7745 <5043> <5043> 2560 <5045> <5045> 7750 <5046> <5046> 7756 <5047> <5047> 2559 <5048> <5048> 7743 <5049> <5049> 2563 <504a> <504a> 7747 <504b> <504b> 7740 <504c> <504c> 2561 <504d> <504d> 7744 <504e> <504e> 2566 <504f> <504f> 2571 <5051> <5051> 7761 <5053> <5053> 7739 <5055> <5055> 2567 <5056> <5056> 16172 <5057> <5057> 7760 <5058> <5058> 14801 <505a> <505a> 2562 <505b> <505b> 7746 <505c> <505c> 2558 <505d> <505d> 7741 <505e> <505e> 7737 <505f> <505f> 7751 <5060> <5060> 7738 <5061> <5061> 7736 <5062> <5062> 7748 <5063> <5064> 7754 <5065> <5065> 2564 <5066> <5066> 15817 <5068> <5068> 8376 <5069> <5069> 7752 <506a> <506a> 7735 <506b> <506b> 7753 <506c> <506c> 14797 <506d> <506d> 2574 <506e> <506e> 7758 <506f> <506f> 2573 <5070> <5070> 7734 <5072> <5072> 7742 <5073> <5073> 7759 <5074> <5074> 2569 <5075> <5075> 2568 <5076> <5076> 2565 <5077> <5077> 2570 <507a> <507a> 2556 <507d> <507d> 2557 <5080> <5080> 3052 <5081> <5081> 14798 <5082> <5082> 8379 <5083> <5083> 8372 <5085> <5085> 3049 <5087> <5087> 8380 <5088> <5088> 17308 endcidrange 100 begincidrange <508b> <508b> 8370 <508c> <508c> 8373 <508d> <508d> 3048 <508e> <508e> 8374 <5090> <5090> 16876 <5091> <5091> 3051 <5092> <5092> 8378 <5094> <5094> 8368 <5095> <5095> 8367 <5096> <5096> 3053 <5098> <5098> 3054 <5099> <5099> 3050 <509a> <509a> 3055 <509b> <509b> 8366 <509c> <509c> 8377 <509d> <509d> 8375 <509e> <509e> 8369 <50a2> <50a2> 3047 <50a3> <50a3> 8371 <50a6> <50a6> 16191 <50ac> <50ac> 3525 <50ad> <50ad> 3519 <50ae> <50ae> 9063 <50af> <50af> 3528 <50b0> <50b0> 9069 <50b1> <50b1> 9072 <50b2> <50b3> 3521 <50b4> <50b4> 9066 <50b5> <50b5> 3520 <50b6> <50b6> 9075 <50b7> <50b7> 3526 <50b8> <50b8> 9076 <50ba> <50ba> 9071 <50bb> <50bb> 3527 <50bd> <50bd> 9060 <50be> <50be> 3524 <50bf> <50bf> 9061 <50c1> <50c1> 9070 <50c2> <50c2> 9068 <50c4> <50c4> 9064 <50c5> <50c5> 3523 <50c6> <50c6> 9062 <50c7> <50c7> 3529 <50c8> <50c8> 9067 <50c9> <50c9> 9074 <50ca> <50ca> 9065 <50cb> <50cb> 9073 <50cd> <50cd> 14789 <50ce> <50ce> 3976 <50cf> <50cf> 3973 <50d0> <50d0> 14545 <50d1> <50d1> 3974 <50d3> <50d3> 9756 <50d4> <50d4> 9748 <50d5> <50d5> 3972 <50d6> <50d6> 3969 <50d7> <50d7> 9749 <50d9> <50d9> 16334 <50da> <50da> 3971 <50db> <50db> 9752 <50dd> <50dd> 9754 <50de> <50de> 16433 <50df> <50df> 15101 <50e0> <50e0> 9761 <50e1> <50e1> 16753 <50e3> <50e3> 9760 <50e4> <50e4> 9755 <50e5> <50e5> 3968 <50e6> <50e6> 9747 <50e7> <50e7> 3966 <50e8> <50e8> 9750 <50e9> <50e9> 3977 <50ea> <50ea> 9753 <50ec> <50ec> 9757 <50ed> <50ed> 3970 <50ee> <50ee> 3967 <50ef> <50ef> 9759 <50f0> <50f0> 9758 <50f1> <50f1> 3975 <50f3> <50f3> 9751 <50f4> <50f4> 15593 <50f5> <50f5> 4357 <50f6> <50f6> 10371 <50f8> <50f8> 10368 <50f9> <50f9> 4358 <50fb> <50fb> 4356 <50fc> <50fc> 14802 <50fd> <50fd> 10375 <50fe> <50fe> 10372 <50ff> <50ff> 10365 <5100> <5100> 4355 <5101> <5101> 16434 <5102> <5102> 4359 <5103> <5103> 10366 <5104> <5104> 4354 <5105> <5105> 4362 <5106> <5107> 10369 <5108> <5109> 4360 <510a> <510a> 10376 <510b> <510c> 10373 endcidrange 100 begincidrange <510d> <510d> 14790 <510e> <510e> 16436 <5110> <5110> 4749 <5111> <5111> 11012 <5112> <5112> 4746 <5113> <5113> 11009 <5114> <5114> 4748 <5115> <5115> 4750 <5117> <5117> 11010 <5118> <5118> 4747 <511a> <511a> 11011 <511c> <511c> 11008 <511f> <511f> 5045 <5120> <5120> 11582 <5121> <5121> 5046 <5122> <5122> 11580 <5124> <5124> 11581 <5125> <5125> 11579 <5126> <5126> 11578 <5129> <5129> 11583 <512a> <512a> 5044 <512b> <512b> 14766 <512d> <512e> 12047 <5130> <5130> 10367 <5131> <5131> 12046 <5132> <5132> 5047 <5133> <5133> 5493 <5134> <5135> 12410 <5137> <5138> 5736 <5139> <5139> 12998 <513a> <513a> 12997 <513b> <513b> 5820 <513c> <513c> 5819 <513d> <513d> 13326 <513f> <513f> 604 <5140> <5140> 628 <5141> <5141> 682 <5143> <5143> 681 <5144> <5144> 771 <5145> <5145> 770 <5146> <5146> 906 <5147> <5147> 905 <5148> <5148> 907 <5149> <5149> 904 <514b> <514b> 1076 <514c> <514c> 1075 <514d> <514d> 1077 <5152> <5152> 1349 <5154> <5154> 1348 <5155> <5155> 1350 <5156> <5156> 17306 <5157> <5157> 1724 <5159> <5159> 281 <515a> <515a> 7218 <515b> <515b> 282 <515c> <515c> 2575 <515d> <515d> 284 <515e> <515e> 283 <515f> <515f> 8381 <5160> <5160> 16442 <5161> <5161> 285 <5162> <5162> 3978 <5163> <5163> 286 <5165> <5165> 605 <5167> <5167> 683 <5168> <5168> 908 <5169> <5169> 1351 <516a> <516a> 16444 <516b> <516b> 606 <516c> <516c> 686 <516d> <516e> 684 <5171> <5171> 909 <5174> <5174> 17727 <5175> <5175> 1078 <5176> <5176> 1353 <5177> <5177> 1352 <5178> <5178> 1354 <5179> <5179> 15054 <517c> <517c> 2130 <5180> <5180> 4751 <5182> <5182> 541 <5186> <5186> 17311 <5187> <5187> 6009 <5188> <5188> 14006 <5189> <518a> 772 <518d> <518d> 910 <518f> <518f> 6195 <5191> <5191> 1726 <5192> <5192> 1725 <5193> <5193> 7220 <5194> <5194> 7219 <5195> <5195> 2576 <5196> <5196> 542 <5197> <5197> 687 <5198> <5198> 6016 <519a> <519a> 16035 <519c> <519c> 17728 <519e> <519e> 6416 <51a0> <51a0> 1727 <51a2> <51a2> 2133 endcidrange 100 begincidrange <51a4> <51a5> 2131 <51a7> <51a7> 16038 <51a8> <51a8> 14810 <51aa> <51aa> 4752 <51ab> <51ab> 543 <51ac> <51ac> 774 <51b0> <51b0> 911 <51b1> <51b1> 6086 <51b2> <51b2> 16456 <51b3> <51b3> 16465 <51b4> <51b4> 15740 <51b5> <51b5> 16402 <51b6> <51b7> 1079 <51b8> <51b8> 16457 <51b9> <51b9> 6196 <51bc> <51bc> 6417 <51bd> <51bd> 1355 <51be> <51be> 6418 <51c3> <51c3> 14811 <51c4> <51c5> 7222 <51c6> <51c6> 2136 <51c7> <51c7> 16938 <51c8> <51c8> 7224 <51c9> <51c9> 16459 <51ca> <51ca> 7221 <51cb> <51cb> 2137 <51cc> <51cc> 2135 <51cd> <51cd> 2134 <51ce> <51ce> 7225 <51cf> <51cf> 16460 <51d0> <51d0> 7762 <51d1> <51d1> 16461 <51d2> <51d2> 15789 <51d3> <51d3> 16463 <51d4> <51d4> 8382 <51d7> <51d7> 9077 <51d8> <51d8> 9762 <51db> <51db> 17818 <51dc> <51dc> 4363 <51dd> <51dd> 4753 <51de> <51de> 11013 <51df> <51df> 16975 <51e0> <51e0> 607 <51e1> <51e1> 621 <51e2> <51e2> 16466 <51e4> <51e4> 17729 <51ed> <51ed> 16468 <51f0> <51f0> 2577 <51f1> <51f1> 3057 <51f3> <51f3> 3979 <51f4> <51f4> 16760 <51f5> <51f5> 5998 <51f6> <51f6> 688 <51f8> <51f8> 777 <51f9> <51fa> 775 <51fc> <51fc> 17819 <51fd> <51fd> 1356 <51fe> <51fe> 16138 <5200> <5201> 608 <5202> <5202> 14003 <5203> <5203> 629 <5205> <5205> 17313 <5206> <5208> 689 <5209> <5209> 6039 <520a> <520a> 778 <520b> <520b> 16473 <520c> <520c> 6038 <520e> <520e> 915 <5210> <5210> 6088 <5211> <5212> 913 <5213> <5213> 6087 <5216> <5216> 916 <5217> <5217> 912 <521c> <521c> 6197 <521d> <521d> 1675 <521e> <521e> 6198 <521f> <521f> 16224 <5220> <5220> 18736 <5221> <5221> 6199 <5224> <5224> 1082 <5225> <5225> 1081 <5226> <5226> 16474 <5227> <5227> 17314 <5228> <5228> 1085 <5229> <522a> 1083 <522e> <522e> 1362 <5230> <5230> 1361 <5231> <5231> 6423 <5232> <5233> 6420 <5234> <5234> 16123 <5235> <5235> 6419 <5236> <5236> 1363 <5237> <5237> 1359 <5238> <5238> 1358 <523a> <523a> 1360 <523b> <523b> 1357 <523c> <523c> 16475 <5241> <5241> 1364 <5243> <5243> 1729 <5244> <5244> 6765 endcidrange 100 begincidrange <5246> <5246> 6422 <5247> <5247> 1734 <5249> <5249> 6766 <524a> <524a> 1730 <524b> <524b> 1733 <524c> <524c> 1732 <524d> <524d> 1731 <524e> <524e> 1728 <5252> <5252> 7228 <5254> <5254> 2140 <5255> <5255> 7231 <5256> <5256> 2138 <5257> <5257> 16477 <5259> <5259> 14820 <525a> <525a> 7227 <525b> <525b> 2141 <525c> <525c> 2139 <525d> <525d> 2142 <525e> <525f> 7229 <5260> <5260> 16169 <5261> <5261> 7226 <5262> <5262> 7232 <5268> <5268> 17945 <5269> <5269> 3061 <526a> <526a> 2578 <526b> <526b> 7763 <526c> <526c> 7765 <526d> <526d> 7764 <526e> <526e> 7766 <526f> <526f> 2579 <5272> <5272> 3058 <5273> <5273> 16195 <5274> <5275> 3059 <5277> <5277> 3531 <5278> <5278> 9079 <5279> <5279> 17315 <527a> <527a> 9078 <527b> <527c> 9080 <527d> <527d> 3532 <527f> <527f> 3530 <5280> <5281> 9763 <5282> <5282> 3981 <5283> <5283> 3980 <5284> <5284> 10102 <5287> <5289> 4364 <528a> <528a> 4368 <528b> <528c> 10377 <528d> <528d> 4367 <528f> <528f> 15807 <5290> <5290> 17821 <5291> <5291> 4754 <5293> <5293> 4755 <5294> <5294> 16478 <5296> <5296> 12412 <5297> <5297> 13000 <5298> <5298> 12999 <5299> <5299> 13327 <529a> <529a> 16232 <529b> <529b> 610 <529f> <529f> 780 <52a0> <52a0> 779 <52a1> <52a1> 17730 <52a3> <52a3> 917 <52a4> <52a4> 14821 <52a6> <52a6> 6089 <52a8> <52a8> 17731 <52a9> <52aa> 1087 <52ab> <52ab> 1086 <52ac> <52ac> 1089 <52ad> <52ae> 6200 <52b5> <52b5> 16476 <52b9> <52b9> 16479 <52bb> <52bb> 1366 <52bc> <52bc> 6424 <52be> <52be> 1365 <52c0> <52c0> 6767 <52c1> <52c1> 1738 <52c2> <52c2> 6768 <52c3> <52c3> 1737 <52c5> <52c5> 16480 <52c7> <52c7> 1735 <52c9> <52c9> 1736 <52cc> <52cc> 16097 <52cd> <52cd> 7233 <52d0> <52d0> 16649 <52d1> <52d1> 16170 <52d2> <52d2> 2580 <52d3> <52d3> 7768 <52d5> <52d5> 2583 <52d6> <52d6> 7767 <52d7> <52d7> 2767 <52d8> <52d8> 2582 <52d9> <52d9> 2581 <52db> <52db> 3064 <52dd> <52dd> 3063 <52de> <52de> 3062 <52df> <52df> 3533 <52e0> <52e0> 16483 <52e1> <52e1> 14823 <52e2> <52e3> 3536 endcidrange 100 begincidrange <52e4> <52e4> 3535 <52e6> <52e6> 3534 <52e9> <52e9> 9765 <52eb> <52eb> 9766 <52ef> <52ef> 10380 <52f0> <52f0> 4369 <52f1> <52f1> 10379 <52f3> <52f3> 4756 <52f4> <52f4> 11584 <52f5> <52f5> 5048 <52f7> <52f7> 12413 <52f8> <52f8> 5641 <52f9> <52f9> 544 <52fa> <52fa> 630 <52fb> <52fb> 692 <52fc> <52fc> 6017 <52fe> <52ff> 693 <5301> <5301> 15737 <5305> <5306> 781 <5308> <5308> 918 <5309> <5309> 6202 <530a> <530b> 6425 <530d> <530d> 1739 <530e> <530e> 7234 <530f> <530f> 2585 <5310> <5310> 2584 <5311> <5311> 8384 <5312> <5312> 8383 <5315> <5315> 611 <5316> <5316> 695 <5317> <5317> 783 <5319> <5319> 2586 <531a> <531a> 5999 <531c> <531c> 6040 <531d> <531d> 784 <531f> <531f> 6091 <5320> <5320> 920 <5321> <5321> 919 <5322> <5322> 6090 <5323> <5323> 1090 <5327> <5327> 17822 <532a> <532a> 2143 <532c> <532c> 16182 <532d> <532d> 7769 <532f> <532f> 3538 <5330> <5330> 9767 <5331> <5331> 3982 <5332> <5332> 16336 <5333> <5333> 16493 <5334> <5334> 11014 <5337> <5337> 12743 <5338> <5338> 545 <5339> <5339> 696 <533b> <533b> 17732 <533c> <533c> 6427 <533d> <533d> 6769 <533e> <533e> 2589 <533f> <5340> 2587 <5341> <5341> 612 <5342> <5342> 18759 <5343> <5343> 631 <5344> <5344> 363 <5345> <5345> 699 <5347> <5347> 698 <5348> <5348> 697 <5349> <5349> 787 <534a> <534a> 786 <534c> <534c> 6041 <534d> <534d> 6092 <534e> <534e> 17733 <5351> <5351> 1370 <5352> <5352> 1367 <5353> <5353> 1369 <5354> <5354> 1368 <5357> <5357> 1740 <535a> <535a> 3065 <535c> <535c> 613 <535d> <535d> 17665 <535e> <535e> 700 <535f> <535f> 17319 <5360> <5360> 789 <5361> <5361> 788 <5363> <5363> 6203 <5364> <5364> 18442 <5366> <5366> 1371 <5367> <5367> 16077 <5369> <5369> 546 <536c> <536c> 6018 <536d> <536d> 16506 <536e> <536e> 791 <536f> <536f> 790 <5370> <5371> 921 <5372> <5372> 6204 <5373> <5373> 1091 <5374> <5374> 16507 <5375> <5375> 1092 <5377> <5379> 1372 <537b> <537b> 1741 <537c> <537c> 6770 <537d> <537d> 18689 endcidrange 100 begincidrange <537e> <537e> 16509 <537f> <537f> 2144 <5382> <5382> 6000 <5384> <5384> 701 <538a> <538a> 6093 <538e> <538f> 6205 <5392> <5392> 6428 <5393> <5393> 16514 <5394> <5394> 6429 <5396> <5396> 6772 <5397> <5397> 6771 <5398> <5398> 6774 <5399> <5399> 6773 <539a> <539a> 1742 <539c> <539c> 7770 <539d> <539d> 2146 <539e> <539e> 7235 <539f> <539f> 2145 <53a0> <53a0> 16516 <53a2> <53a2> 15915 <53a4> <53a4> 8385 <53a5> <53a5> 3066 <53a6> <53a6> 16699 <53a7> <53a7> 8386 <53a8> <53a8> 16702 <53a9> <53a9> 17824 <53aa> <53aa> 16326 <53ab> <53ab> 16517 <53ac> <53ac> 9768 <53ad> <53ad> 3983 <53ae> <53ae> 16518 <53b0> <53b0> 17826 <53b2> <53b2> 4370 <53b4> <53b4> 12414 <53b6> <53b6> 547 <53b9> <53b9> 6019 <53bb> <53bb> 792 <53c1> <53c1> 16523 <53c2> <53c2> 17318 <53c3> <53c3> 2590 <53c5> <53c5> 16524 <53c8> <53c8> 614 <53c9> <53c9> 632 <53ca> <53ca> 703 <53cb> <53cb> 702 <53cc> <53cc> 14518 <53cd> <53cd> 704 <53d0> <53d0> 14842 <53d1> <53d1> 17734 <53d2> <53d2> 15933 <53d4> <53d4> 1376 <53d6> <53d6> 1375 <53d7> <53d7> 1377 <53d8> <53d8> 17735 <53d9> <53d9> 16528 <53da> <53da> 16185 <53db> <53db> 1743 <53df> <53df> 2147 <53e0> <53e0> 16531 <53e1> <53e1> 11015 <53e2> <53e2> 5321 <53e3> <53e3> 633 <53e4> <53e4> 794 <53e5> <53e5> 809 <53e6> <53e6> 804 <53e8> <53e8> 799 <53e9> <53e9> 798 <53ea> <53ea> 805 <53eb> <53eb> 803 <53ec> <53ec> 796 <53ed> <53ed> 810 <53ee> <53ee> 797 <53ef> <53ef> 793 <53f0> <53f0> 808 <53f1> <53f1> 807 <53f2> <53f2> 806 <53f3> <53f3> 795 <53f5> <53f5> 802 <53f6> <53f6> 16534 <53f7> <53f7> 14344 <53f8> <53f8> 801 <53fb> <53fb> 811 <53fc> <53fc> 800 <53fe> <53fe> 16577 <5401> <5401> 928 <5403> <5403> 934 <5404> <5404> 930 <5406> <5406> 936 <5407> <5407> 6094 <5408> <5408> 933 <5409> <5409> 923 <540a> <540a> 926 <540b> <540b> 929 <540c> <540c> 925 <540d> <540d> 932 <540e> <540e> 935 <540f> <540f> 924 <5410> <5410> 927 <5411> <5411> 931 <5412> <5412> 937 endcidrange 100 begincidrange <5413> <5413> 16536 <5414> <5414> 15479 <5416> <5416> 15999 <5418> <5418> 6215 <5419> <5419> 6212 <541a> <541a> 15972 <541b> <541b> 1105 <541c> <541c> 6213 <541d> <541d> 1093 <541e> <541e> 1095 <541f> <541f> 1119 <5420> <5420> 1114 <5421> <5421> 16899 <5423> <5423> 17827 <5424> <5424> 6220 <5425> <5425> 6214 <5426> <5426> 1097 <5427> <5427> 1099 <5428> <5428> 6219 <5429> <5429> 1106 <542a> <542a> 6209 <542b> <542b> 1118 <542c> <542c> 1120 <542d> <542d> 1094 <542e> <542e> 1111 <542f> <542f> 16556 <5430> <5430> 6207 <5431> <5431> 1117 <5432> <5432> 15989 <5433> <5433> 1102 <5435> <5436> 1112 <5437> <5437> 6208 <5438> <5438> 1110 <5439> <5439> 1108 <543b> <543b> 1109 <543c> <543c> 1115 <543d> <543d> 6216 <543e> <543e> 1096 <5440> <5440> 1116 <5441> <5441> 6218 <5442> <5442> 1104 <5443> <5443> 1101 <5445> <5445> 6211 <5446> <5446> 1100 <5447> <5447> 6221 <5448> <5448> 1103 <544a> <544a> 1107 <544b> <544b> 16081 <544d> <544d> 16039 <544e> <544e> 1098 <544f> <544f> 6217 <5454> <5454> 6210 <5460> <5460> 6446 <5461> <5461> 6445 <5462> <5462> 1395 <5463> <5463> 6448 <5464> <5464> 6450 <5465> <5465> 6439 <5466> <5466> 6442 <5467> <5467> 6449 <5468> <5468> 1396 <5469> <5469> 16178 <546a> <546a> 15747 <546b> <546b> 6436 <546c> <546c> 6440 <546d> <546d> 16541 <546f> <546f> 6444 <5470> <5470> 6789 <5471> <5471> 1391 <5472> <5472> 6793 <5473> <5473> 1378 <5474> <5474> 6441 <5475> <5475> 1379 <5476> <5476> 1392 <5477> <5477> 1385 <5478> <5478> 1381 <547a> <547a> 6437 <547b> <547b> 1384 <547c> <547c> 1389 <547d> <547d> 1398 <547e> <547e> 6438 <547f> <547f> 6431 <5480> <5480> 1383 <5481> <5481> 6432 <5482> <5482> 6434 <5484> <5484> 1386 <5485> <5485> 18137 <5486> <5486> 1388 <5487> <5487> 6430 <5488> <5488> 6435 <548b> <548b> 1397 <548c> <548c> 1393 <548d> <548d> 6443 <548e> <548e> 1399 <548f> <548f> 16545 <5490> <5490> 1390 <5491> <5491> 6433 <5492> <5492> 1387 <5493> <5493> 17831 <5494> <5494> 16024 endcidrange 100 begincidrange <5495> <5495> 1382 <5496> <5496> 1380 <5497> <5497> 16010 <5498> <5498> 6447 <549a> <549a> 1394 <549c> <549c> 16230 <549e> <549e> 18413 <54a0> <54a0> 6788 <54a1> <54a1> 6776 <54a2> <54a2> 6791 <54a3> <54a3> 17832 <54a4> <54a4> 16546 <54a5> <54a5> 6778 <54a6> <54a6> 1750 <54a7> <54a7> 1764 <54a8> <54a8> 1746 <54a9> <54a9> 1763 <54aa> <54aa> 1755 <54ab> <54ab> 1760 <54ac> <54ac> 1744 <54ad> <54ad> 6777 <54ae> <54ae> 6783 <54af> <54af> 1759 <54b0> <54b0> 6795 <54b1> <54b1> 1761 <54b2> <54b2> 14148 <54b3> <54b3> 1751 <54b4> <54b4> 17833 <54b6> <54b6> 6785 <54b7> <54b7> 6782 <54b8> <54b8> 1749 <54b9> <54b9> 17834 <54ba> <54ba> 6775 <54bb> <54bb> 1762 <54bc> <54bc> 6790 <54bd> <54bd> 1754 <54be> <54be> 6792 <54bf> <54bf> 1765 <54c0> <54c0> 1745 <54c1> <54c1> 1756 <54c2> <54c2> 1753 <54c3> <54c3> 6780 <54c4> <54c4> 1757 <54c5> <54c6> 6786 <54c7> <54c7> 1752 <54c8> <54c8> 1758 <54c9> <54c9> 1748 <54cb> <54cb> 14755 <54cc> <54cc> 17320 <54cd> <54cd> 14848 <54ce> <54ce> 1747 <54cf> <54cf> 6779 <54d0> <54d0> 17835 <54d6> <54d6> 6784 <54da> <54da> 18723 <54de> <54de> 6794 <54e0> <54e0> 7255 <54e1> <54e1> 2160 <54e2> <54e2> 7237 <54e3> <54e3> 17217 <54e4> <54e4> 7242 <54e5> <54e5> 2153 <54e6> <54e6> 2164 <54e7> <54e7> 7240 <54e8> <54e8> 2148 <54e9> <54e9> 2158 <54ea> <54ea> 2163 <54eb> <54eb> 7247 <54ed> <54ed> 2159 <54ee> <54ee> 2162 <54ef> <54ef> 17836 <54f1> <54f1> 7250 <54f2> <54f2> 2154 <54f3> <54f3> 7241 <54f7> <54f8> 7253 <54fa> <54fa> 2156 <54fb> <54fb> 7252 <54fc> <54fc> 2152 <54fd> <54fd> 2167 <54ff> <54ff> 7244 <5501> <5501> 2150 <5502> <5502> 15564 <5503> <5503> 7257 <5504> <5504> 7245 <5505> <5505> 7249 <5506> <5506> 2155 <5507> <5507> 2166 <5508> <5508> 7246 <5509> <5509> 2161 <550a> <550a> 7251 <550b> <550b> 7258 <550c> <550c> 7785 <550d> <550d> 14963 <550e> <550e> 7256 <550f> <550f> 2168 <5510> <5510> 2149 <5511> <5511> 7248 <5512> <5512> 7239 <5513> <5513> 16041 <5514> <5514> 2157 endcidrange 100 begincidrange <5517> <5517> 7238 <5518> <5518> 17837 <551a> <551a> 7243 <551e> <551e> 16040 <5523> <5523> 17838 <5525> <5525> 17161 <5526> <5526> 7236 <5527> <5527> 2165 <5528> <5528> 17839 <552a> <552a> 7777 <552b> <552b> 16538 <552c> <552c> 2609 <552d> <552d> 7791 <552e> <552e> 2607 <552f> <552f> 2604 <5530> <5530> 7782 <5531> <5531> 2600 <5532> <5532> 7786 <5533> <5533> 2611 <5534> <5534> 7776 <5535> <5535> 7781 <5536> <5536> 7780 <5537> <5537> 2151 <5538> <5538> 2606 <5539> <5539> 7789 <553b> <553b> 7792 <553c> <553c> 7773 <553e> <553e> 3084 <553f> <553f> 17321 <5540> <5540> 7793 <5541> <5541> 2612 <5543> <5543> 2598 <5544> <5544> 2595 <5545> <5545> 7784 <5546> <5546> 2592 <5547> <5547> 16554 <5548> <5548> 7790 <5549> <5549> 16488 <554a> <554a> 2599 <554b> <554b> 7794 <554d> <554d> 7774 <554e> <554e> 7788 <554f> <554f> 2602 <5550> <5550> 7775 <5551> <5551> 7778 <5552> <5552> 7783 <5553> <5553> 17326 <5555> <5555> 2603 <5556> <5556> 2601 <5557> <5557> 2613 <555c> <555c> 2608 <555d> <555d> 16544 <555e> <555e> 2596 <555f> <555f> 2748 <5561> <5561> 2597 <5562> <5562> 7779 <5563> <5563> 2610 <5564> <5564> 2605 <5565> <5565> 7787 <5566> <5566> 2594 <5569> <5569> 16031 <556a> <556a> 2593 <556b> <556b> 15150 <5571> <5571> 15302 <5572> <5572> 16011 <5573> <5573> 16164 <5575> <5576> 7771 <5577> <5577> 8391 <5579> <5579> 17245 <557b> <557b> 3067 <557c> <557c> 3070 <557d> <557d> 8402 <557e> <557e> 3090 <557f> <557f> 8405 <5580> <5580> 3068 <5581> <5581> 8398 <5582> <5582> 3074 <5583> <5583> 3080 <5584> <5584> 3355 <5586> <5586> 16558 <5587> <5587> 3078 <5588> <5588> 8395 <5589> <5589> 3091 <558a> <558a> 3071 <558b> <558b> 3079 <558c> <558c> 8403 <558d> <558d> 9095 <558e> <558e> 8408 <558f> <558f> 8396 <5590> <5590> 17166 <5591> <5591> 8387 <5592> <5592> 8400 <5593> <5593> 8394 <5594> <5594> 3077 <5595> <5595> 8406 <5598> <5598> 3073 <5599> <5599> 3093 <559a> <559a> 3086 <559c> <559c> 3075 <559d> <559d> 3072 endcidrange 100 begincidrange <559f> <559f> 3083 <55a1> <55a1> 8407 <55a2> <55a2> 8393 <55a3> <55a3> 8399 <55a4> <55a4> 8401 <55a5> <55a5> 8389 <55a6> <55a6> 8404 <55a7> <55a7> 3069 <55a8> <55a8> 8388 <55a9> <55a9> 16559 <55aa> <55aa> 3076 <55ab> <55ab> 3092 <55ac> <55ac> 3088 <55ad> <55ad> 8390 <55ae> <55ae> 3082 <55b0> <55b0> 14581 <55b1> <55b1> 3089 <55b2> <55b2> 3085 <55b3> <55b3> 3081 <55b4> <55b4> 14846 <55b5> <55b5> 8397 <55b9> <55b9> 17322 <55ba> <55ba> 16009 <55bb> <55bb> 3087 <55bc> <55bc> 15811 <55bf> <55bf> 9093 <55c0> <55c0> 9089 <55c1> <55c1> 15951 <55c2> <55c2> 9104 <55c3> <55c3> 9082 <55c4> <55c4> 9091 <55c5> <55c6> 3552 <55c7> <55c7> 3545 <55c8> <55c8> 9100 <55c9> <55c9> 3555 <55ca> <55ca> 9087 <55cb> <55cb> 9086 <55cc> <55cc> 9084 <55cd> <55cd> 9102 <55ce> <55ce> 3543 <55cf> <55cf> 9096 <55d0> <55d0> 9085 <55d1> <55d1> 3546 <55d2> <55d2> 9094 <55d3> <55d3> 3541 <55d4> <55d4> 9090 <55d5> <55d5> 9097 <55d6> <55d6> 9099 <55d7> <55d7> 17843 <55d8> <55d8> 17323 <55d9> <55d9> 9103 <55da> <55da> 3550 <55db> <55db> 9083 <55dc> <55dc> 3544 <55dd> <55dd> 9088 <55de> <55de> 16020 <55df> <55df> 3539 <55e1> <55e1> 3551 <55e2> <55e2> 9098 <55e3> <55e4> 3547 <55e5> <55e5> 3554 <55e6> <55e6> 3542 <55e7> <55e7> 287 <55e8> <55e8> 3540 <55e9> <55e9> 9092 <55ea> <55ea> 15996 <55ec> <55ec> 14290 <55ef> <55ef> 3549 <55f0> <55f0> 16008 <55f1> <55f1> 16003 <55f2> <55f2> 9101 <55f5> <55f5> 18310 <55f6> <55f6> 3999 <55f7> <55f7> 3994 <55f9> <55f9> 9783 <55fa> <55fa> 9779 <55fb> <55fb> 17958 <55fc> <55fc> 9773 <55fd> <55fd> 3988 <55fe> <55fe> 3984 <55ff> <55ff> 9782 <5600> <5600> 3985 <5601> <5601> 9776 <5602> <5602> 9778 <5604> <5604> 9781 <5605> <5605> 16002 <5606> <5606> 3990 <5608> <5608> 3997 <5609> <5609> 3991 <560c> <560c> 9771 <560d> <560e> 3992 <560f> <560f> 9774 <5610> <5610> 3998 <5611> <5611> 16205 <5612> <5612> 9772 <5613> <5613> 9777 <5614> <5614> 3989 <5615> <5615> 9770 <5616> <5616> 3995 <5617> <5617> 3987 endcidrange 100 begincidrange <561b> <561b> 3986 <561c> <561c> 9775 <561d> <561d> 9780 <561e> <561e> 15976 <561f> <561f> 3996 <5620> <5620> 16253 <5621> <5621> 17325 <5622> <5622> 15975 <5623> <5623> 18183 <5625> <5625> 15992 <5627> <5627> 9769 <5629> <5629> 4377 <562a> <562a> 10397 <562c> <562c> 10394 <562d> <562d> 15971 <562e> <562e> 4371 <562f> <5630> 4383 <5632> <5632> 4374 <5633> <5633> 10392 <5634> <5634> 4376 <5635> <5635> 10384 <5636> <5636> 4382 <5637> <5637> 16567 <5638> <5638> 10396 <5639> <5639> 4373 <563a> <563a> 10398 <563b> <563b> 4372 <563d> <563d> 10393 <563e> <563e> 10395 <563f> <563f> 4375 <5640> <5640> 10391 <5641> <5641> 10385 <5642> <5642> 10382 <5643> <5643> 15998 <5645> <5645> 8392 <5646> <5646> 10388 <5648> <5648> 10381 <5649> <5649> 10387 <564a> <564a> 10386 <564c> <564c> 10383 <564d> <564d> 16572 <564e> <564e> 4379 <564f> <564f> 16573 <5650> <5650> 18383 <5652> <5652> 17858 <5653> <5653> 4378 <5654> <5654> 17327 <5657> <5657> 4380 <5658> <5658> 10389 <5659> <5659> 4757 <565a> <565a> 10390 <565d> <565d> 16121 <565e> <565e> 11024 <5660> <5660> 11017 <5661> <5661> 14354 <5662> <5662> 4769 <5663> <5663> 11021 <5664> <5664> 4761 <5665> <5665> 4765 <5666> <5666> 11020 <5668> <5668> 4764 <5669> <5669> 4760 <566a> <566a> 4763 <566b> <566b> 4758 <566c> <566c> 4768 <566d> <566d> 11022 <566e> <566e> 11018 <566f> <566f> 4767 <5670> <5670> 11016 <5671> <5671> 4766 <5672> <5672> 11023 <5673> <5673> 11019 <5674> <5674> 4381 <5676> <5676> 4770 <5677> <5677> 11025 <5678> <5678> 4762 <5679> <5679> 4759 <567a> <567a> 15749 <567b> <567b> 16055 <567c> <567c> 16109 <567e> <567e> 11591 <567f> <567f> 11593 <5680> <5680> 5050 <5681> <5681> 11594 <5682> <5682> 11592 <5683> <5683> 11590 <5684> <5684> 11589 <5685> <5685> 5052 <5686> <5686> 11588 <5687> <5687> 5053 <5689> <5689> 17960 <568a> <568a> 14665 <568b> <568b> 15948 <568c> <568d> 11586 <568e> <568e> 5049 <568f> <568f> 5054 <5690> <5690> 5051 <5692> <5692> 14758 <5693> <5693> 11585 <5695> <5695> 5322 endcidrange 100 begincidrange <5697> <5697> 12051 <5698> <5698> 12049 <5699> <5699> 12054 <569a> <569a> 12052 <569c> <569c> 12050 <569d> <569d> 12053 <569e> <569e> 14756 <569f> <569f> 14664 <56a1> <56a1> 17259 <56a4> <56a4> 15560 <56a5> <56a5> 5494 <56a6> <56a7> 12417 <56a8> <56a8> 5495 <56aa> <56aa> 12419 <56ab> <56ab> 12415 <56ac> <56ac> 12420 <56ad> <56ad> 12416 <56ae> <56ae> 5323 <56af> <56af> 17911 <56b1> <56b1> 17983 <56b2> <56b2> 12744 <56b3> <56b3> 12746 <56b4> <56b4> 5644 <56b5> <56b5> 12745 <56b6> <56b6> 5643 <56b7> <56b7> 5642 <56b9> <56b9> 18543 <56bc> <56bc> 5645 <56bd> <56be> 13002 <56bf> <56bf> 15965 <56c0> <56c0> 5739 <56c1> <56c1> 5738 <56c2> <56c2> 5740 <56c3> <56c3> 13001 <56c5> <56c5> 13177 <56c6> <56c6> 13176 <56c8> <56c8> 5821 <56c9> <56c9> 5823 <56ca> <56ca> 5822 <56cb> <56cb> 13178 <56cc> <56cc> 5878 <56cd> <56cd> 13441 <56d1> <56d1> 5919 <56d3> <56d3> 13440 <56d4> <56d4> 13513 <56d6> <56d6> 18570 <56d7> <56d7> 6005 <56da> <56da> 813 <56db> <56db> 812 <56dd> <56dd> 940 <56de> <56de> 939 <56df> <56df> 6096 <56e0> <56e0> 938 <56e1> <56e1> 6095 <56e2> <56e2> 17736 <56e4> <56e4> 1123 <56e5> <56e5> 6224 <56e7> <56e7> 6223 <56ea> <56ea> 1121 <56eb> <56eb> 1124 <56ed> <56ed> 16580 <56ee> <56ee> 6222 <56ef> <56ef> 16579 <56f0> <56f0> 1122 <56f1> <56f1> 16575 <56f7> <56f7> 6451 <56f9> <56f9> 6452 <56fa> <56fa> 1400 <56fd> <56fd> 15716 <56ff> <56ff> 1766 <5700> <5700> 16578 <5701> <5702> 7259 <5703> <5704> 2169 <5707> <5707> 7796 <5708> <5708> 2614 <5709> <5709> 2616 <570a> <570a> 7795 <570b> <570b> 2615 <570c> <570c> 8409 <570d> <570d> 3094 <5712> <5713> 3556 <5714> <5714> 9105 <5715> <5715> 15926 <5716> <5716> 4001 <5718> <5718> 4000 <571a> <571a> 10399 <571b> <571b> 11027 <571c> <571c> 11026 <571d> <571d> 14850 <571e> <571e> 13573 <571f> <571f> 634 <5720> <5720> 6020 <5722> <5723> 6042 <5728> <5728> 943 <5729> <5729> 947 <572a> <572a> 6098 <572c> <572c> 945 <572d> <572d> 944 <572e> <572e> 6097 <572f> <572f> 946 endcidrange 100 begincidrange <5730> <5730> 942 <5732> <5732> 15097 <5733> <5733> 941 <5734> <5734> 6099 <573b> <573b> 1134 <573e> <573e> 1131 <573f> <573f> 18517 <5740> <5740> 1127 <5741> <5741> 6225 <5742> <5742> 16588 <5743> <5743> 16606 <5745> <5745> 6226 <5746> <5746> 16584 <5747> <5747> 1129 <5749> <5749> 6228 <574a> <574a> 1125 <574b> <574b> 6229 <574c> <574c> 6227 <574d> <574d> 1128 <574e> <574e> 1130 <574f> <574f> 1133 <5750> <5750> 1132 <5751> <5751> 1126 <5752> <5752> 6230 <5754> <5754> 18309 <5757> <5757> 18406 <575b> <575b> 14722 <575f> <575f> 16319 <5761> <5761> 1405 <5762> <5762> 6465 <5764> <5764> 1407 <5766> <5766> 1406 <5767> <5767> 16171 <5768> <5768> 6466 <5769> <5769> 1404 <576a> <576a> 1403 <576b> <576b> 6456 <576d> <576d> 6455 <576f> <576f> 6453 <5770> <5770> 6458 <5771> <5771> 6457 <5772> <5772> 6454 <5773> <5774> 6463 <5775> <5775> 6461 <5776> <5776> 6459 <5777> <5777> 1402 <577a> <577a> 16223 <577b> <577b> 6462 <577c> <577c> 1408 <577d> <577d> 6467 <577e> <577e> 18140 <577f> <577f> 14855 <5780> <5780> 6460 <5782> <5782> 1767 <5783> <5783> 1401 <5788> <5788> 18507 <578a> <578a> 15483 <578b> <578b> 1768 <578c> <578c> 6800 <578d> <578d> 14854 <578f> <578f> 6806 <5790> <5790> 16742 <5793> <5793> 1774 <5794> <5794> 6804 <5795> <5795> 6810 <5797> <5797> 6801 <5798> <5798> 6805 <5799> <5799> 6807 <579a> <579a> 6809 <579b> <579b> 6803 <579c> <579c> 17928 <579d> <579d> 6802 <579e> <579f> 6797 <57a0> <57a0> 1769 <57a1> <57a1> 18532 <57a2> <57a2> 1771 <57a3> <57a3> 1770 <57a4> <57a4> 6799 <57a5> <57a5> 6808 <57a7> <57a7> 18708 <57aa> <57aa> 18693 <57ae> <57ae> 1773 <57b4> <57b4> 18241 <57b5> <57b5> 6796 <57b6> <57b6> 7270 <57b8> <57b8> 7269 <57b9> <57b9> 7274 <57ba> <57ba> 7265 <57bb> <57bb> 15481 <57bc> <57bc> 7268 <57bd> <57bd> 7267 <57be> <57be> 14124 <57bf> <57bf> 7271 <57c1> <57c1> 7275 <57c2> <57c2> 2171 <57c3> <57c3> 2174 <57c4> <57c4> 15195 <57c6> <57c6> 7266 <57c7> <57c7> 7272 <57c8> <57c8> 15627 endcidrange 100 begincidrange <57cb> <57cb> 2173 <57cc> <57cc> 7261 <57ce> <57ce> 1772 <57cf> <57cf> 7810 <57d0> <57d0> 7273 <57d2> <57d2> 7264 <57d4> <57d4> 2172 <57d5> <57d5> 7263 <57d7> <57d7> 15485 <57dc> <57dc> 7801 <57dd> <57dd> 14853 <57de> <57de> 16129 <57df> <57df> 2617 <57e0> <57e0> 2621 <57e1> <57e1> 7817 <57e2> <57e2> 7799 <57e3> <57e3> 7813 <57e4> <57e4> 2622 <57e5> <57e5> 7815 <57e6> <57e6> 16591 <57e7> <57e7> 7821 <57e9> <57e9> 7825 <57ec> <57ec> 7816 <57ed> <57ed> 7804 <57ee> <57ee> 7812 <57ef> <57ef> 18260 <57f0> <57f0> 7826 <57f1> <57f1> 7824 <57f2> <57f2> 7814 <57f3> <57f3> 7809 <57f4> <57f4> 7802 <57f5> <57f5> 8417 <57f6> <57f6> 7800 <57f7> <57f7> 2626 <57f8> <57f8> 7807 <57f9> <57f9> 2627 <57fa> <57fa> 2623 <57fb> <57fb> 7797 <57fc> <57fc> 7819 <57fd> <57fd> 7805 <57fe> <57fe> 16527 <5800> <5800> 7803 <5801> <5801> 7822 <5802> <5802> 2624 <5803> <5803> 16593 <5804> <5804> 7828 <5805> <5805> 2618 <5806> <5806> 2620 <5807> <5807> 7811 <5808> <5808> 7806 <5809> <5809> 2175 <580a> <580a> 2619 <580b> <580b> 7808 <580c> <580c> 7823 <580d> <580d> 7827 <580e> <580e> 7818 <5810> <5810> 7820 <5812> <5812> 15626 <5814> <5814> 7798 <5819> <5819> 8412 <581b> <581b> 8421 <581c> <581c> 8420 <581d> <581d> 3102 <581e> <581e> 8413 <5820> <5820> 3103 <5821> <5821> 3101 <5822> <5822> 15400 <5823> <5823> 8415 <5824> <5824> 3098 <5825> <5825> 8419 <5826> <5826> 16596 <5827> <5827> 8414 <5828> <5828> 8416 <5829> <5829> 8410 <582a> <582a> 3096 <582c> <582c> 8429 <582d> <582d> 8428 <582e> <582e> 8425 <582f> <582f> 3095 <5830> <5831> 3099 <5832> <5832> 7262 <5833> <5833> 8422 <5834> <5834> 3097 <5835> <5835> 2625 <5836> <5836> 8424 <5837> <5837> 8411 <5838> <5838> 8427 <5839> <5839> 8426 <583a> <583a> 15730 <583b> <583b> 8430 <583d> <583d> 9119 <583f> <583f> 8423 <5840> <5840> 15746 <5844> <5844> 18363 <5847> <5847> 15042 <5848> <5848> 8418 <5849> <5849> 9111 <584a> <584a> 3567 <584b> <584b> 3570 <584c> <584c> 3565 endcidrange 100 begincidrange <584d> <584d> 9110 <584e> <584e> 9114 <584f> <584f> 9109 <5851> <5851> 3559 <5852> <5852> 3569 <5853> <5853> 9106 <5854> <5854> 3563 <5855> <5855> 9113 <5857> <5857> 3561 <5858> <5858> 3560 <5859> <5859> 9116 <585a> <585a> 3562 <585b> <585b> 9118 <585c> <585c> 18761 <585d> <585d> 9115 <585e> <585e> 3558 <585f> <585f> 17375 <5862> <5862> 3568 <5863> <5863> 9120 <5864> <5864> 9108 <5865> <5865> 9117 <5868> <5868> 9107 <5869> <5869> 15717 <586b> <586b> 3564 <586c> <586c> 14746 <586d> <586d> 3566 <586f> <586f> 9112 <5871> <5871> 9121 <5872> <5872> 15398 <5873> <5873> 17237 <5874> <5874> 9791 <5875> <5875> 4002 <5876> <5876> 9797 <5879> <5879> 4007 <587a> <587a> 9793 <587b> <587b> 9800 <587c> <587c> 9785 <587d> <587d> 4009 <587e> <587e> 4003 <587f> <587f> 9790 <5880> <5880> 4385 <5881> <5881> 9789 <5882> <5882> 9798 <5883> <5883> 4004 <5885> <5885> 4008 <5886> <5886> 9788 <5887> <5887> 9794 <5888> <5888> 9799 <5889> <5889> 9784 <588a> <588a> 4006 <588b> <588b> 9792 <588e> <588e> 9796 <588f> <588f> 9802 <5890> <5890> 9786 <5891> <5891> 9795 <5893> <5893> 4005 <5894> <5894> 9801 <5898> <5898> 9787 <5899> <5899> 17944 <589a> <589a> 18691 <589c> <589c> 4389 <589d> <589d> 10401 <589e> <589e> 4387 <589f> <589f> 4386 <58a0> <58a0> 10403 <58a1> <58a1> 10408 <58a3> <58a3> 10404 <58a5> <58a5> 10407 <58a6> <58a6> 4392 <58a7> <58a7> 16107 <58a8> <58a8> 4744 <58a9> <58a9> 4391 <58aa> <58aa> 16599 <58ab> <58ab> 10400 <58ac> <58ac> 10406 <58ae> <58ae> 4390 <58af> <58af> 10405 <58b0> <58b0> 14244 <58b1> <58b1> 10402 <58b3> <58b3> 4388 <58b5> <58b5> 18496 <58b6> <58b6> 15869 <58ba> <58ba> 11032 <58bb> <58bb> 14059 <58bc> <58bc> 11034 <58bd> <58bd> 11029 <58be> <58be> 4772 <58bf> <58bf> 11031 <58c1> <58c1> 4771 <58c2> <58c2> 11033 <58c5> <58c5> 4774 <58c6> <58c6> 11035 <58c7> <58c7> 4773 <58c8> <58c8> 11028 <58c9> <58c9> 11030 <58cb> <58cb> 14857 <58ce> <58ce> 5058 <58cf> <58cf> 11597 <58d1> <58d1> 5057 <58d2> <58d2> 11598 endcidrange 100 begincidrange <58d3> <58d3> 5056 <58d4> <58d4> 11596 <58d5> <58d5> 5055 <58d6> <58d6> 11595 <58d8> <58d8> 5325 <58d9> <58d9> 5324 <58da> <58da> 12421 <58db> <58db> 12423 <58dc> <58dc> 16602 <58dd> <58dd> 12422 <58de> <58df> 5496 <58e0> <58e0> 16601 <58e2> <58e2> 5498 <58e3> <58e3> 12747 <58e4> <58e4> 5646 <58e7> <58e7> 13329 <58e8> <58e8> 13328 <58e9> <58e9> 5920 <58eb> <58eb> 635 <58ec> <58ec> 705 <58ef> <58ef> 1135 <58f0> <58f0> 17737 <58f2> <58f2> 15720 <58f3> <58f3> 15482 <58f4> <58f4> 6811 <58f9> <58fa> 3104 <58fb> <58fb> 16604 <58fc> <58fc> 9122 <58fd> <58fd> 4010 <58fe> <58fe> 9803 <58ff> <58ff> 10409 <5902> <5902> 548 <5903> <5903> 6021 <5904> <5904> 17738 <5905> <5905> 17817 <5906> <5906> 6231 <5907> <5907> 17739 <590a> <590a> 548 <590c> <590c> 6468 <590d> <590d> 6812 <590e> <590e> 7276 <590f> <590f> 2176 <5911> <5911> 17012 <5912> <5912> 12424 <5914> <5914> 5741 <5915> <5915> 636 <5916> <5916> 814 <5917> <5917> 6044 <5919> <591a> 948 <591c> <591c> 1409 <591f> <591f> 16611 <5920> <5920> 2628 <5922> <5922> 4012 <5924> <5924> 4013 <5925> <5925> 4011 <5927> <5927> 637 <5929> <5929> 706 <592a> <592a> 708 <592b> <592b> 707 <592c> <592c> 6022 <592d> <592d> 709 <592e> <592e> 815 <592f> <592f> 6045 <5931> <5931> 816 <5932> <5932> 17740 <5934> <5934> 17741 <5937> <5938> 950 <593c> <593c> 6100 <593e> <593e> 1136 <5940> <5940> 6232 <5944> <5944> 1413 <5945> <5945> 6469 <5947> <5948> 1411 <5949> <5949> 1410 <594a> <594a> 7277 <594e> <594e> 1778 <594f> <594f> 1777 <5950> <5950> 1779 <5951> <5951> 1776 <5953> <5953> 6813 <5954> <5954> 1414 <5955> <5955> 1775 <5957> <5958> 2177 <595a> <595a> 2179 <595c> <595c> 7829 <5960> <5960> 3106 <5961> <5961> 8431 <5962> <5962> 2629 <5965> <5965> 18514 <5967> <5967> 3571 <5969> <5969> 4015 <596a> <596a> 4014 <596b> <596b> 9804 <596d> <596d> 4393 <596e> <596e> 4775 <5970> <5970> 12055 <5971> <5971> 13179 <5972> <5972> 13330 <5973> <5973> 638 <5974> <5974> 817 endcidrange 100 begincidrange <5975> <5975> 15978 <5976> <5976> 818 <5977> <5977> 6106 <5978> <5978> 953 <5979> <5979> 956 <597b> <597b> 6104 <597c> <597c> 6102 <597d> <597d> 955 <597e> <597e> 6105 <597f> <597f> 6107 <5980> <5980> 6101 <5981> <5981> 958 <5982> <5982> 957 <5983> <5983> 954 <5984> <5984> 952 <5985> <5985> 6103 <5989> <5989> 15664 <598a> <598a> 1147 <598d> <598d> 1144 <598e> <598e> 6237 <598f> <598f> 6240 <5990> <5990> 6239 <5992> <5992> 1138 <5993> <5993> 1146 <5994> <5994> 15513 <5996> <5996> 1143 <5997> <5997> 6236 <5998> <5998> 6234 <5999> <5999> 1142 <599a> <599a> 15280 <599d> <599d> 1137 <599e> <599e> 1140 <599f> <599f> 15791 <59a0> <59a0> 6235 <59a1> <59a1> 6242 <59a2> <59a2> 6238 <59a3> <59a3> 1141 <59a4> <59a4> 1145 <59a5> <59a5> 1148 <59a6> <59a6> 6233 <59a7> <59a7> 6241 <59a8> <59a8> 1139 <59ac> <59ac> 15745 <59ae> <59ae> 1419 <59af> <59af> 1427 <59b0> <59b0> 15576 <59b1> <59b1> 6481 <59b2> <59b2> 6474 <59b3> <59b3> 1428 <59b4> <59b4> 6485 <59b5> <59b5> 6470 <59b6> <59b6> 6477 <59b7> <59b7> 16173 <59b8> <59b8> 14864 <59b9> <59b9> 1418 <59ba> <59ba> 6471 <59bb> <59bb> 1416 <59bc> <59bc> 6478 <59bd> <59bd> 6482 <59be> <59be> 1415 <59c0> <59c0> 6483 <59c1> <59c1> 6476 <59c3> <59c3> 6479 <59c4> <59c4> 15620 <59c5> <59c5> 1430 <59c6> <59c6> 1421 <59c7> <59c7> 6486 <59c8> <59c8> 6484 <59c9> <59c9> 16620 <59ca> <59ca> 1426 <59cb> <59cb> 1424 <59cc> <59cc> 6475 <59cd> <59cd> 1423 <59ce> <59ce> 6473 <59cf> <59cf> 6472 <59d0> <59d0> 1422 <59d1> <59d1> 1420 <59d2> <59d2> 1429 <59d3> <59d3> 1425 <59d4> <59d4> 1417 <59d6> <59d6> 6480 <59d8> <59d8> 1781 <59d9> <59d9> 16625 <59da> <59da> 1788 <59db> <59db> 6827 <59dc> <59dc> 1780 <59dd> <59dd> 6819 <59de> <59de> 6815 <59e0> <59e0> 6831 <59e1> <59e1> 6814 <59e3> <59e3> 1783 <59e4> <59e4> 6824 <59e5> <59e5> 1786 <59e6> <59e6> 1789 <59e8> <59e8> 1784 <59e9> <59e9> 6828 <59ea> <59ea> 1787 <59eb> <59eb> 15705 <59ec> <59ec> 2186 <59ed> <59ed> 6834 endcidrange 100 begincidrange <59ee> <59ee> 6816 <59ef> <59ef> 15672 <59f0> <59f0> 15282 <59f1> <59f1> 6818 <59f2> <59f2> 6825 <59f3> <59f3> 6829 <59f4> <59f4> 6833 <59f5> <59f5> 6830 <59f6> <59f6> 6823 <59f7> <59f7> 6826 <59f8> <59f8> 15946 <59f9> <59f9> 16632 <59fa> <59fa> 6820 <59fb> <59fb> 1791 <59fc> <59fc> 6822 <59fd> <59fd> 6821 <59fe> <59fe> 6832 <59ff> <59ff> 1782 <5a00> <5a00> 6817 <5a01> <5a01> 1790 <5a02> <5a02> 15245 <5a03> <5a03> 1785 <5a09> <5a09> 2192 <5a0a> <5a0a> 7285 <5a0b> <5a0b> 15497 <5a0c> <5a0c> 2191 <5a0d> <5a0d> 15160 <5a0f> <5a0f> 7283 <5a11> <5a11> 2180 <5a12> <5a12> 14867 <5a13> <5a13> 2185 <5a15> <5a15> 7282 <5a16> <5a16> 7279 <5a17> <5a17> 7284 <5a18> <5a18> 2181 <5a19> <5a19> 7278 <5a1b> <5a1b> 2184 <5a1c> <5a1c> 2182 <5a1e> <5a1e> 7286 <5a1f> <5a1f> 2183 <5a20> <5a20> 2187 <5a21> <5a21> 14875 <5a23> <5a23> 2188 <5a24> <5a24> 16616 <5a25> <5a25> 2190 <5a27> <5a27> 15841 <5a29> <5a29> 2189 <5a2a> <5a2a> 15163 <5a2b> <5a2b> 15680 <5a2c> <5a2c> 14863 <5a2d> <5a2e> 7280 <5a33> <5a33> 7287 <5a35> <5a35> 7836 <5a36> <5a36> 2630 <5a37> <5a37> 8445 <5a38> <5a38> 7835 <5a39> <5a39> 7854 <5a3c> <5a3c> 2636 <5a3d> <5a3d> 15040 <5a3e> <5a3e> 7852 <5a40> <5a40> 2635 <5a41> <5a41> 2631 <5a42> <5a42> 7861 <5a43> <5a43> 7845 <5a44> <5a44> 7848 <5a45> <5a45> 14615 <5a46> <5a46> 2639 <5a47> <5a47> 7858 <5a48> <5a48> 7850 <5a49> <5a49> 2632 <5a4a> <5a4a> 2640 <5a4c> <5a4c> 7855 <5a4d> <5a4d> 7853 <5a50> <5a50> 7838 <5a51> <5a51> 7859 <5a52> <5a52> 7847 <5a53> <5a53> 7842 <5a54> <5a54> 17923 <5a55> <5a55> 7832 <5a56> <5a56> 7860 <5a57> <5a57> 7844 <5a58> <5a58> 7831 <5a59> <5a59> 15156 <5a5a> <5a5a> 2638 <5a5b> <5a5b> 7849 <5a5c> <5a5c> 7862 <5a5d> <5a5d> 7846 <5a5e> <5a5e> 7834 <5a5f> <5a5f> 7839 <5a60> <5a60> 7830 <5a61> <5a61> 15667 <5a62> <5a62> 2637 <5a63> <5a63> 16635 <5a64> <5a64> 7843 <5a65> <5a65> 7840 <5a66> <5a66> 2633 <5a67> <5a67> 7833 <5a68> <5a68> 14775 <5a69> <5a69> 7857 <5a6a> <5a6a> 2634 endcidrange 100 begincidrange <5a6b> <5a6b> 14914 <5a6c> <5a6c> 7841 <5a6d> <5a6d> 7837 <5a6e> <5a6e> 15679 <5a70> <5a70> 7856 <5a71> <5a71> 15668 <5a77> <5a77> 3107 <5a78> <5a78> 8438 <5a79> <5a79> 15585 <5a7a> <5a7a> 8435 <5a7b> <5a7b> 8452 <5a7c> <5a7c> 8440 <5a7d> <5a7d> 8453 <5a7e> <5a7e> 14865 <5a7f> <5a7f> 3109 <5a81> <5a81> 14877 <5a82> <5a82> 15665 <5a83> <5a83> 8449 <5a84> <5a84> 8446 <5a86> <5a86> 15233 <5a88> <5a88> 16995 <5a8a> <5a8a> 8447 <5a8b> <5a8b> 8450 <5a8c> <5a8c> 8454 <5a8e> <5a8e> 7851 <5a8f> <5a8f> 8456 <5a90> <5a90> 9142 <5a91> <5a91> 16949 <5a92> <5a92> 3110 <5a93> <5a93> 8457 <5a94> <5a94> 8433 <5a95> <5a95> 8443 <5a96> <5a96> 16640 <5a97> <5a97> 8448 <5a99> <5a99> 14858 <5a9a> <5a9a> 3108 <5a9b> <5a9b> 3111 <5a9c> <5a9c> 8455 <5a9d> <5a9d> 8458 <5a9e> <5a9e> 8437 <5a9f> <5a9f> 8434 <5aa0> <5aa0> 16754 <5aa1> <5aa1> 15580 <5aa2> <5aa2> 8436 <5aa5> <5aa5> 8441 <5aa6> <5aa6> 8439 <5aa7> <5aa7> 3112 <5aa9> <5aa9> 8451 <5aab> <5aab> 16634 <5aac> <5aac> 8442 <5aae> <5aae> 8444 <5aaf> <5aaf> 8432 <5ab0> <5ab0> 9130 <5ab1> <5ab1> 9128 <5ab2> <5ab2> 3580 <5ab3> <5ab3> 3578 <5ab4> <5ab4> 9138 <5ab5> <5ab5> 9129 <5ab6> <5ab6> 9139 <5ab7> <5ab7> 9135 <5ab8> <5ab8> 9127 <5ab9> <5ab9> 9141 <5aba> <5aba> 9126 <5abb> <5abb> 9133 <5abc> <5abc> 3577 <5abd> <5abd> 3576 <5abe> <5abe> 3575 <5abf> <5abf> 9131 <5ac0> <5ac0> 9136 <5ac1> <5ac1> 3572 <5ac2> <5ac2> 3579 <5ac3> <5ac3> 14486 <5ac4> <5ac4> 9124 <5ac6> <5ac6> 9134 <5ac7> <5ac7> 9123 <5ac8> <5ac8> 9132 <5ac9> <5ac9> 3573 <5aca> <5aca> 9137 <5acb> <5acb> 9125 <5acc> <5acc> 3574 <5acd> <5acd> 9140 <5ace> <5ace> 15496 <5acf> <5acf> 17333 <5ad3> <5ad3> 16642 <5ad5> <5ad5> 9808 <5ad6> <5ad6> 4020 <5ad7> <5ad7> 4019 <5ad8> <5ad8> 4021 <5ad9> <5ad9> 9820 <5ada> <5ada> 9810 <5adb> <5adb> 9816 <5adc> <5adc> 9805 <5add> <5add> 9819 <5ade> <5ade> 9818 <5adf> <5adf> 9822 <5ae0> <5ae0> 9815 <5ae1> <5ae1> 4016 <5ae2> <5ae2> 9814 <5ae3> <5ae3> 4022 <5ae4> <5ae4> 15238 endcidrange 100 begincidrange <5ae5> <5ae5> 9807 <5ae6> <5ae6> 4017 <5ae8> <5ae8> 9821 <5ae9> <5ae9> 4018 <5aea> <5aea> 9809 <5aeb> <5aeb> 9812 <5aec> <5aec> 9817 <5aed> <5aed> 9811 <5aee> <5aee> 9806 <5af0> <5af0> 16103 <5af2> <5af2> 14325 <5af3> <5af3> 9813 <5af4> <5af4> 10411 <5af5> <5af5> 4397 <5af6> <5af6> 10414 <5af7> <5af7> 10413 <5af8> <5af8> 10416 <5af9> <5af9> 10418 <5afa> <5afa> 14062 <5afb> <5afb> 4395 <5afd> <5afd> 10412 <5afe> <5afe> 15389 <5aff> <5aff> 10410 <5b01> <5b01> 10419 <5b02> <5b02> 10417 <5b03> <5b03> 10415 <5b05> <5b05> 10421 <5b07> <5b07> 10420 <5b08> <5b08> 4399 <5b09> <5b09> 4394 <5b0b> <5b0b> 4396 <5b0c> <5b0c> 4398 <5b0d> <5b0d> 18687 <5b0f> <5b0f> 10422 <5b10> <5b10> 11042 <5b11> <5b11> 15350 <5b13> <5b13> 11041 <5b14> <5b14> 11040 <5b16> <5b16> 11043 <5b17> <5b17> 11036 <5b19> <5b19> 11037 <5b1a> <5b1a> 11045 <5b1b> <5b1b> 11038 <5b1d> <5b1d> 4776 <5b1e> <5b1e> 11047 <5b1f> <5b1f> 18753 <5b20> <5b20> 11046 <5b21> <5b21> 11039 <5b23> <5b23> 11602 <5b24> <5b24> 5061 <5b25> <5b25> 11600 <5b26> <5b26> 11605 <5b27> <5b27> 11604 <5b28> <5b28> 11044 <5b2a> <5b2a> 5060 <5b2b> <5b2b> 15236 <5b2c> <5b2c> 11603 <5b2d> <5b2d> 11599 <5b2e> <5b2e> 11607 <5b2f> <5b2f> 11606 <5b30> <5b30> 5059 <5b32> <5b32> 11601 <5b34> <5b34> 4777 <5b38> <5b38> 5326 <5b3c> <5b3c> 12056 <5b3d> <5b3f> 12425 <5b40> <5b40> 5647 <5b41> <5b41> 14536 <5b43> <5b43> 5648 <5b44> <5b44> 14916 <5b45> <5b45> 12748 <5b46> <5b46> 17074 <5b47> <5b47> 13005 <5b48> <5b48> 13004 <5b4a> <5b4a> 14541 <5b4b> <5b4c> 13180 <5b4d> <5b4d> 13331 <5b4e> <5b4e> 13442 <5b4f> <5b4f> 14897 <5b50> <5b51> 639 <5b53> <5b53> 641 <5b54> <5b54> 710 <5b55> <5b55> 819 <5b56> <5b56> 6108 <5b57> <5b58> 959 <5b5a> <5b5b> 1151 <5b5c> <5b5c> 1150 <5b5d> <5b5d> 1149 <5b5f> <5b5f> 1431 <5b62> <5b62> 6487 <5b63> <5b63> 1433 <5b64> <5b64> 1432 <5b65> <5b65> 6488 <5b66> <5b66> 17742 <5b68> <5b68> 17949 <5b69> <5b69> 1792 <5b6b> <5b6b> 2193 <5b6c> <5b6c> 7288 <5b6d> <5b6d> 15967 <5b6e> <5b6e> 7864 endcidrange 100 begincidrange <5b70> <5b70> 2641 <5b71> <5b71> 3114 <5b72> <5b72> 7863 <5b73> <5b73> 3113 <5b74> <5b74> 14130 <5b75> <5b75> 4023 <5b76> <5b76> 16650 <5b77> <5b77> 9823 <5b78> <5b78> 4778 <5b7a> <5b7a> 5062 <5b7b> <5b7b> 11608 <5b7c> <5b7c> 16652 <5b7d> <5b7d> 5649 <5b7f> <5b7f> 5824 <5b80> <5b80> 549 <5b81> <5b81> 6046 <5b82> <5b82> 16452 <5b83> <5b83> 820 <5b84> <5b84> 6047 <5b85> <5b85> 963 <5b87> <5b88> 961 <5b89> <5b89> 964 <5b8b> <5b8b> 1154 <5b8c> <5b8c> 1153 <5b8e> <5b8e> 6243 <5b8f> <5b8f> 1155 <5b90> <5b90> 18665 <5b92> <5b92> 6244 <5b93> <5b93> 6489 <5b95> <5b95> 6490 <5b97> <5b97> 1434 <5b98> <5b98> 1436 <5b99> <5b99> 1438 <5b9a> <5b9a> 1435 <5b9b> <5b9b> 1439 <5b9c> <5b9c> 1437 <5b9d> <5b9d> 16662 <5b9e> <5b9f> 17743 <5ba2> <5ba2> 1796 <5ba3> <5ba3> 1793 <5ba4> <5ba4> 1795 <5ba5> <5ba5> 1797 <5ba6> <5ba6> 1794 <5ba7> <5ba7> 7289 <5ba8> <5ba8> 6835 <5baa> <5baa> 16763 <5bac> <5bac> 7291 <5bad> <5bad> 7290 <5bae> <5bae> 2199 <5bb0> <5bb0> 2195 <5bb3> <5bb3> 2196 <5bb4> <5bb4> 2198 <5bb5> <5bb5> 2200 <5bb6> <5bb6> 2197 <5bb8> <5bb8> 2202 <5bb9> <5bb9> 2201 <5bbf> <5bbf> 2646 <5bc0> <5bc0> 7866 <5bc1> <5bc1> 7865 <5bc2> <5bc2> 2645 <5bc3> <5bc3> 16165 <5bc4> <5bc4> 2644 <5bc5> <5bc5> 2643 <5bc6> <5bc6> 2647 <5bc7> <5bc7> 2642 <5bca> <5bca> 8464 <5bcb> <5bcb> 8461 <5bcc> <5bcc> 3116 <5bcd> <5bcd> 8460 <5bce> <5bce> 8465 <5bd0> <5bd0> 3118 <5bd1> <5bd1> 8463 <5bd2> <5bd2> 3115 <5bd3> <5bd3> 3117 <5bd4> <5bd4> 8462 <5bd5> <5bd5> 16657 <5bd6> <5bd6> 9143 <5bd7> <5bd7> 17083 <5bd8> <5bd9> 9144 <5bde> <5bde> 4024 <5bdf> <5bdf> 4032 <5be0> <5be0> 9824 <5be1> <5be1> 4026 <5be2> <5be2> 4030 <5be3> <5be3> 9825 <5be4> <5be4> 4031 <5be5> <5be6> 4027 <5be7> <5be7> 4025 <5be8> <5be8> 4029 <5be9> <5be9> 4402 <5bea> <5bea> 8459 <5beb> <5beb> 4403 <5bec> <5bec> 4401 <5bee> <5bee> 4400 <5bef> <5bef> 11048 <5bf0> <5bf0> 4779 <5bf1> <5bf2> 11609 <5bf3> <5bf3> 16661 <5bf5> <5bf5> 5499 <5bf6> <5bf6> 5650 endcidrange 100 begincidrange <5bf8> <5bf8> 642 <5bfa> <5bfa> 965 <5bff> <5bff> 16605 <5c01> <5c01> 1798 <5c03> <5c03> 7292 <5c04> <5c04> 2203 <5c05> <5c05> 16664 <5c07> <5c07> 2650 <5c08> <5c08> 2649 <5c09> <5c09> 2648 <5c0a> <5c0b> 3119 <5c0c> <5c0c> 8466 <5c0d> <5c0d> 4033 <5c0e> <5c0e> 4780 <5c0f> <5c0f> 643 <5c10> <5c10> 6023 <5c11> <5c11> 711 <5c12> <5c12> 6048 <5c13> <5c13> 16666 <5c14> <5c14> 16668 <5c15> <5c15> 6109 <5c16> <5c16> 966 <5c1a> <5c1a> 1440 <5c1c> <5c1c> 17898 <5c1e> <5c1e> 14889 <5c1f> <5c1f> 9146 <5c20> <5c20> 15753 <5c22> <5c22> 644 <5c23> <5c23> 17640 <5c24> <5c24> 712 <5c25> <5c25> 6110 <5c28> <5c28> 6245 <5c2a> <5c2a> 6246 <5c2c> <5c2c> 1156 <5c30> <5c30> 8467 <5c31> <5c31> 3121 <5c33> <5c33> 9147 <5c37> <5c37> 5063 <5c38> <5c38> 645 <5c39> <5c39> 665 <5c3a> <5c3a> 713 <5c3b> <5c3b> 6049 <5c3c> <5c3c> 821 <5c3e> <5c3e> 1160 <5c3f> <5c3f> 1159 <5c40> <5c41> 1157 <5c44> <5c44> 6491 <5c45> <5c46> 1442 <5c47> <5c47> 6492 <5c48> <5c48> 1441 <5c49> <5c49> 16671 <5c4a> <5c4a> 16220 <5c4b> <5c4b> 1802 <5c4c> <5c4c> 6836 <5c4d> <5c4d> 1801 <5c4e> <5c4f> 1799 <5c50> <5c50> 2206 <5c51> <5c51> 2204 <5c53> <5c53> 16130 <5c54> <5c54> 7294 <5c55> <5c55> 2205 <5c56> <5c56> 7293 <5c58> <5c58> 2194 <5c59> <5c59> 7867 <5c5c> <5c5d> 2652 <5c5e> <5c5e> 15719 <5c60> <5c60> 2651 <5c62> <5c62> 4034 <5c63> <5c63> 9826 <5c64> <5c65> 4404 <5c67> <5c67> 10423 <5c68> <5c68> 5064 <5c69> <5c6a> 12057 <5c6c> <5c6c> 5742 <5c6d> <5c6d> 13443 <5c6e> <5c6e> 6006 <5c6f> <5c6f> 714 <5c71> <5c71> 646 <5c73> <5c73> 6051 <5c74> <5c74> 6050 <5c79> <5c79> 967 <5c7a> <5c7b> 6112 <5c7c> <5c7c> 6111 <5c7e> <5c7e> 6114 <5c85> <5c85> 16673 <5c86> <5c86> 6254 <5c88> <5c88> 6249 <5c89> <5c89> 6251 <5c8a> <5c8a> 6253 <5c8b> <5c8b> 6250 <5c8c> <5c8c> 1164 <5c8d> <5c8d> 6247 <5c8f> <5c8f> 6248 <5c90> <5c91> 1161 <5c92> <5c92> 6252 <5c93> <5c93> 6255 <5c94> <5c94> 1163 <5c95> <5c95> 6256 <5c99> <5c99> 18060 <5c9a> <5c9a> 17745 endcidrange 100 begincidrange <5c9c> <5c9c> 18778 <5c9d> <5c9d> 6506 <5c9e> <5c9e> 14890 <5c9f> <5c9f> 6500 <5ca0> <5ca0> 6495 <5ca1> <5ca1> 1445 <5ca2> <5ca2> 6503 <5ca3> <5ca3> 6501 <5ca4> <5ca4> 6494 <5ca5> <5ca5> 6507 <5ca6> <5ca6> 6510 <5ca7> <5ca7> 6505 <5ca8> <5ca8> 6498 <5ca9> <5ca9> 1447 <5caa> <5caa> 6504 <5cab> <5cab> 1448 <5cac> <5cac> 6499 <5cad> <5cad> 6502 <5cae> <5cae> 6493 <5caf> <5caf> 6497 <5cb0> <5cb0> 6509 <5cb1> <5cb1> 1449 <5cb3> <5cb3> 1450 <5cb5> <5cb5> 6496 <5cb6> <5cb6> 6508 <5cb7> <5cb7> 1444 <5cb8> <5cb8> 1446 <5cba> <5cba> 16683 <5cc1> <5cc1> 17336 <5cc2> <5cc2> 15692 <5cc6> <5cc6> 6853 <5cc7> <5cc7> 6846 <5cc8> <5cc8> 6852 <5cc9> <5cc9> 6845 <5cca> <5cca> 6847 <5ccb> <5ccb> 6841 <5ccc> <5ccc> 6839 <5cce> <5cce> 6854 <5ccf> <5ccf> 6851 <5cd0> <5cd0> 6837 <5cd1> <5cd1> 16147 <5cd2> <5cd2> 1804 <5cd3> <5cd4> 6849 <5cd6> <5cd6> 6848 <5cd7> <5cd7> 6840 <5cd8> <5cd8> 6838 <5cd9> <5cd9> 1803 <5cda> <5cda> 6844 <5cdb> <5cdb> 6842 <5cde> <5cde> 6843 <5cdf> <5cdf> 6855 <5ce5> <5ce5> 17975 <5ce8> <5ce8> 2211 <5ce9> <5ce9> 16674 <5cea> <5cea> 2210 <5cec> <5cec> 7295 <5ced> <5ced> 2207 <5cee> <5cee> 7297 <5cef> <5cef> 16675 <5cf0> <5cf0> 2212 <5cf1> <5cf1> 7298 <5cf4> <5cf4> 2215 <5cf6> <5cf6> 2213 <5cf7> <5cf7> 7299 <5cf8> <5cf8> 6856 <5cf9> <5cf9> 7301 <5cfb> <5cfb> 2209 <5cfd> <5cfd> 2208 <5cff> <5cff> 7296 <5d00> <5d00> 7300 <5d01> <5d01> 2214 <5d06> <5d06> 2655 <5d07> <5d07> 2654 <5d0b> <5d0b> 7869 <5d0c> <5d0c> 7873 <5d0d> <5d0d> 7875 <5d0e> <5d0e> 2656 <5d0f> <5d0f> 7878 <5d10> <5d10> 16679 <5d11> <5d11> 2660 <5d12> <5d12> 7880 <5d14> <5d14> 2662 <5d15> <5d15> 17337 <5d16> <5d16> 2658 <5d17> <5d17> 2666 <5d18> <5d18> 16680 <5d19> <5d19> 2663 <5d1a> <5d1a> 7871 <5d1b> <5d1b> 2657 <5d1d> <5d1d> 7870 <5d1e> <5d1e> 7868 <5d1f> <5d1f> 7882 <5d20> <5d20> 7872 <5d22> <5d22> 2659 <5d23> <5d23> 7881 <5d24> <5d24> 2664 <5d25> <5d25> 7877 <5d26> <5d26> 7876 <5d27> <5d27> 2665 <5d28> <5d28> 7874 endcidrange 100 begincidrange <5d29> <5d29> 2661 <5d2c> <5d2c> 15863 <5d2e> <5d2e> 7883 <5d2f> <5d2f> 18131 <5d30> <5d30> 7879 <5d31> <5d31> 8482 <5d32> <5d32> 8489 <5d33> <5d33> 8478 <5d34> <5d34> 3124 <5d35> <5d35> 8474 <5d36> <5d36> 8490 <5d37> <5d37> 8468 <5d38> <5d38> 8487 <5d39> <5d39> 8485 <5d3a> <5d3a> 8479 <5d3c> <5d3c> 8488 <5d3d> <5d3d> 8481 <5d3e> <5d3e> 17961 <5d3f> <5d3f> 8473 <5d40> <5d40> 8491 <5d41> <5d41> 8471 <5d42> <5d42> 8484 <5d43> <5d43> 8469 <5d45> <5d45> 8492 <5d46> <5d46> 16681 <5d47> <5d47> 3125 <5d48> <5d48> 17962 <5d49> <5d49> 8486 <5d4a> <5d4a> 9150 <5d4b> <5d4b> 8472 <5d4c> <5d4c> 3122 <5d4e> <5d4e> 8476 <5d50> <5d50> 3123 <5d51> <5d51> 8475 <5d52> <5d52> 8480 <5d55> <5d55> 8477 <5d56> <5d56> 17338 <5d57> <5d57> 16330 <5d59> <5d59> 8483 <5d5b> <5d5b> 15829 <5d5e> <5d5e> 9154 <5d62> <5d62> 9157 <5d63> <5d63> 9149 <5d65> <5d65> 9151 <5d67> <5d67> 9156 <5d68> <5d68> 9155 <5d69> <5d69> 3581 <5d6b> <5d6b> 8470 <5d6c> <5d6c> 9153 <5d6f> <5d6f> 3582 <5d70> <5d70> 18148 <5d71> <5d71> 9148 <5d72> <5d72> 9152 <5d74> <5d74> 16111 <5d77> <5d77> 9833 <5d79> <5d79> 9840 <5d7a> <5d7a> 9831 <5d7c> <5d7c> 9838 <5d7d> <5d7d> 9829 <5d7e> <5d7e> 9837 <5d7f> <5d7f> 9841 <5d80> <5d80> 9828 <5d81> <5d81> 9832 <5d82> <5d82> 9827 <5d84> <5d84> 4035 <5d85> <5d85> 15924 <5d86> <5d86> 9830 <5d87> <5d87> 4036 <5d88> <5d88> 9836 <5d89> <5d89> 9835 <5d8a> <5d8a> 9834 <5d8b> <5d8b> 16676 <5d8d> <5d8d> 9839 <5d8e> <5d8e> 16140 <5d92> <5d92> 10427 <5d93> <5d93> 10429 <5d94> <5d94> 4407 <5d95> <5d95> 10430 <5d97> <5d97> 10425 <5d99> <5d99> 10424 <5d9a> <5d9a> 10434 <5d9c> <5d9c> 10432 <5d9d> <5d9d> 4406 <5d9e> <5d9e> 10435 <5d9f> <5d9f> 10426 <5da0> <5da0> 10431 <5da1> <5da1> 10433 <5da2> <5da2> 10428 <5da4> <5da4> 17965 <5da7> <5da7> 11052 <5da8> <5da8> 11057 <5da9> <5da9> 11051 <5daa> <5daa> 11056 <5dab> <5dab> 15929 <5dac> <5dac> 11049 <5dad> <5dad> 11059 <5dae> <5dae> 11055 <5daf> <5daf> 11060 <5db0> <5db0> 11054 <5db1> <5db1> 11050 endcidrange 100 begincidrange <5db2> <5db2> 11058 <5db4> <5db4> 11061 <5db5> <5db5> 11053 <5db6> <5db6> 16728 <5db7> <5db7> 11611 <5db8> <5db8> 5068 <5db9> <5db9> 17966 <5dba> <5dba> 5066 <5dbc> <5dbc> 5065 <5dbd> <5dbd> 5067 <5dc0> <5dc0> 12059 <5dc1> <5dc1> 15359 <5dc2> <5dc2> 12323 <5dc3> <5dc3> 12428 <5dc6> <5dc7> 12749 <5dc9> <5dc9> 5651 <5dcb> <5dcb> 13006 <5dcd> <5dcd> 5743 <5dcf> <5dcf> 13007 <5dd1> <5dd1> 13183 <5dd2> <5dd2> 5826 <5dd4> <5dd4> 5825 <5dd5> <5dd5> 13182 <5dd6> <5dd6> 5879 <5dd7> <5dd7> 16684 <5dd8> <5dd8> 13332 <5ddb> <5ddb> 550 <5ddd> <5ddd> 647 <5dde> <5dde> 968 <5ddf> <5ddf> 6115 <5de0> <5de0> 6257 <5de1> <5de1> 1306 <5de2> <5de2> 2667 <5de5> <5de5> 648 <5de6> <5de6> 824 <5de7> <5de7> 823 <5de8> <5de8> 822 <5deb> <5deb> 1165 <5dee> <5dee> 2216 <5df0> <5df0> 9158 <5df1> <5df3> 649 <5df4> <5df4> 715 <5df5> <5df5> 16225 <5df7> <5df7> 1805 <5df9> <5df9> 6857 <5dfd> <5dfd> 3126 <5dfe> <5dfe> 652 <5dff> <5dff> 6024 <5e02> <5e03> 825 <5e04> <5e04> 6052 <5e06> <5e06> 969 <5e09> <5e09> 16704 <5e0a> <5e0a> 6258 <5e0b> <5e0b> 15754 <5e0c> <5e0c> 1166 <5e0e> <5e0e> 6259 <5e11> <5e11> 1456 <5e12> <5e12> 16174 <5e14> <5e14> 6512 <5e15> <5e15> 1454 <5e16> <5e16> 1453 <5e17> <5e17> 6511 <5e18> <5e18> 1451 <5e19> <5e19> 6513 <5e1a> <5e1a> 1452 <5e1b> <5e1b> 1455 <5e1d> <5e1d> 1806 <5e1f> <5e1f> 1808 <5e20> <5e20> 6861 <5e21> <5e23> 6858 <5e24> <5e24> 6862 <5e25> <5e25> 1807 <5e28> <5e28> 7303 <5e29> <5e29> 7302 <5e2b> <5e2b> 2218 <5e2d> <5e2d> 2217 <5e2e> <5e2e> 16693 <5e33> <5e33> 2670 <5e34> <5e34> 7885 <5e36> <5e36> 2669 <5e37> <5e37> 2671 <5e38> <5e38> 2668 <5e3d> <5e3d> 3128 <5e3e> <5e3e> 7884 <5e40> <5e40> 3129 <5e41> <5e41> 8494 <5e42> <5e42> 17312 <5e43> <5e43> 3130 <5e44> <5e44> 8493 <5e45> <5e45> 3127 <5e48> <5e48> 14892 <5e4a> <5e4a> 9161 <5e4b> <5e4b> 9163 <5e4c> <5e4c> 3583 <5e4d> <5e4d> 9162 <5e4e> <5e4e> 9160 <5e4f> <5e4f> 9159 <5e53> <5e53> 9844 <5e54> <5e54> 4041 <5e55> <5e55> 4039 endcidrange 100 begincidrange <5e57> <5e57> 4040 <5e58> <5e59> 9842 <5e5b> <5e5b> 4037 <5e5c> <5e5c> 10439 <5e5d> <5e5d> 10437 <5e5e> <5e5e> 14891 <5e5f> <5e5f> 4409 <5e60> <5e60> 10438 <5e61> <5e61> 4410 <5e62> <5e62> 4408 <5e63> <5e63> 4038 <5e66> <5e66> 11064 <5e67> <5e68> 11062 <5e69> <5e69> 10436 <5e6a> <5e6a> 11613 <5e6b> <5e6b> 5069 <5e6c> <5e6c> 11612 <5e6d> <5e6e> 12060 <5e6f> <5e6f> 11065 <5e70> <5e70> 12429 <5e72> <5e72> 653 <5e73> <5e73> 827 <5e74> <5e74> 971 <5e75> <5e75> 6116 <5e76> <5e76> 970 <5e78> <5e78> 1457 <5e79> <5e79> 3584 <5e7a> <5e7a> 551 <5e7b> <5e7b> 716 <5e7c> <5e7c> 828 <5e7d> <5e7d> 1809 <5e7e> <5e7e> 3131 <5e7f> <5e7f> 552 <5e80> <5e80> 6053 <5e82> <5e82> 6054 <5e83> <5e83> 16648 <5e84> <5e84> 6117 <5e86> <5e86> 17746 <5e87> <5e87> 1168 <5e88> <5e88> 6263 <5e89> <5e89> 6261 <5e8a> <5e8a> 1169 <5e8b> <5e8b> 6260 <5e8c> <5e8c> 6262 <5e8d> <5e8d> 6264 <5e8f> <5e8f> 1167 <5e95> <5e96> 1461 <5e97> <5e97> 1459 <5e9a> <5e9a> 1458 <5e9b> <5e9b> 6866 <5e9c> <5e9c> 1460 <5ea0> <5ea0> 1810 <5ea2> <5ea2> 6865 <5ea3> <5ea3> 6867 <5ea4> <5ea4> 6864 <5ea5> <5ea5> 6868 <5ea6> <5ea6> 1811 <5ea7> <5ea7> 2221 <5ea8> <5ea8> 7304 <5eaa> <5eaa> 7306 <5eab> <5eab> 2219 <5eac> <5eac> 7307 <5ead> <5ead> 2220 <5eae> <5eae> 7305 <5eb0> <5eb0> 6863 <5eb1> <5eb1> 7886 <5eb2> <5eb3> 7889 <5eb4> <5eb4> 7887 <5eb5> <5eb5> 2675 <5eb6> <5eb6> 2674 <5eb7> <5eb8> 2672 <5eb9> <5eb9> 7888 <5ebd> <5ebd> 17341 <5ebe> <5ebe> 2676 <5ec1> <5ec2> 3133 <5ec4> <5ec4> 3135 <5ec5> <5ec5> 9164 <5ec6> <5ec6> 9166 <5ec7> <5ec7> 9168 <5ec8> <5ec8> 3586 <5ec9> <5ec9> 3585 <5eca> <5eca> 3132 <5ecb> <5ecb> 9167 <5ecc> <5ecc> 9165 <5ecd> <5ecd> 14896 <5ece> <5ece> 9848 <5ed0> <5ed0> 16701 <5ed1> <5ed1> 9846 <5ed2> <5ed2> 9852 <5ed3> <5ed3> 4042 <5ed4> <5ed4> 9853 <5ed5> <5ed5> 9850 <5ed6> <5ed6> 4043 <5ed7> <5ed7> 9847 <5ed8> <5ed8> 9845 <5ed9> <5ed9> 9851 <5eda> <5eda> 4412 <5edb> <5edb> 10441 <5edc> <5edc> 9849 <5edd> <5edd> 4414 endcidrange 100 begincidrange <5ede> <5ede> 10442 <5edf> <5edf> 4413 <5ee0> <5ee0> 4416 <5ee1> <5ee1> 10443 <5ee2> <5ee2> 4411 <5ee3> <5ee3> 4415 <5ee5> <5ee5> 11070 <5ee6> <5ee6> 11068 <5ee7> <5ee7> 11067 <5ee8> <5ee8> 11069 <5ee9> <5ee9> 11066 <5eec> <5eec> 5501 <5eee> <5eef> 12751 <5ef1> <5ef1> 13008 <5ef2> <5ef2> 13184 <5ef3> <5ef3> 5954 <5ef4> <5ef4> 553 <5ef6> <5ef6> 1463 <5ef7> <5ef7> 1170 <5ef8> <5ef8> 14447 <5ef9> <5ef9> 16707 <5efa> <5efa> 1812 <5efb> <5efb> 16708 <5efc> <5efc> 16710 <5efe> <5efe> 654 <5eff> <5eff> 717 <5f01> <5f01> 829 <5f02> <5f02> 6118 <5f04> <5f04> 1171 <5f05> <5f05> 6265 <5f07> <5f07> 6869 <5f08> <5f08> 1813 <5f0a> <5f0a> 4044 <5f0b> <5f0b> 655 <5f0c> <5f0c> 14910 <5f0d> <5f0d> 16713 <5f0e> <5f0e> 14911 <5f0f> <5f0f> 972 <5f12> <5f12> 3587 <5f13> <5f13> 656 <5f14> <5f15> 718 <5f17> <5f17> 831 <5f18> <5f18> 830 <5f1a> <5f1a> 6119 <5f1b> <5f1b> 973 <5f1d> <5f1d> 6266 <5f1f> <5f1f> 1172 <5f22> <5f24> 6515 <5f25> <5f25> 17968 <5f26> <5f27> 1464 <5f28> <5f28> 6514 <5f29> <5f29> 1466 <5f2d> <5f2d> 1814 <5f2e> <5f2e> 6870 <5f30> <5f30> 7309 <5f31> <5f31> 2222 <5f33> <5f33> 7308 <5f35> <5f35> 2677 <5f36> <5f36> 7891 <5f37> <5f37> 2678 <5f38> <5f38> 7892 <5f3a> <5f3a> 16718 <5f3c> <5f3c> 3136 <5f40> <5f40> 9169 <5f43> <5f43> 9855 <5f44> <5f44> 9854 <5f46> <5f46> 4045 <5f48> <5f48> 4417 <5f49> <5f49> 10444 <5f4a> <5f4a> 4781 <5f4b> <5f4b> 11071 <5f4c> <5f4c> 5070 <5f4d> <5f4d> 15269 <5f4e> <5f4e> 5827 <5f4f> <5f4f> 13334 <5f50> <5f50> 554 <5f51> <5f51> 17641 <5f54> <5f54> 6518 <5f56> <5f56> 6871 <5f57> <5f57> 2679 <5f58> <5f58> 8495 <5f59> <5f59> 3588 <5f5c> <5f5c> 15706 <5f5d> <5f5d> 5327 <5f61> <5f61> 555 <5f62> <5f62> 1174 <5f63> <5f63> 16722 <5f64> <5f64> 1173 <5f65> <5f65> 1815 <5f67> <5f67> 7310 <5f69> <5f69> 2681 <5f6a> <5f6a> 2953 <5f6b> <5f6b> 2682 <5f6c> <5f6c> 2680 <5f6d> <5f6d> 3137 <5f6f> <5f6f> 9856 <5f70> <5f70> 4046 <5f71> <5f71> 4418 <5f72> <5f72> 16724 <5f73> <5f73> 6007 endcidrange 100 begincidrange <5f74> <5f74> 6120 <5f76> <5f76> 6268 <5f77> <5f77> 1175 <5f78> <5f78> 6267 <5f79> <5f79> 1176 <5f7b> <5f7b> 16472 <5f7c> <5f7c> 1470 <5f7d> <5f7d> 6521 <5f7e> <5f7e> 6520 <5f7f> <5f7f> 1469 <5f80> <5f81> 1467 <5f82> <5f82> 6519 <5f83> <5f83> 17969 <5f85> <5f85> 1817 <5f86> <5f86> 6872 <5f87> <5f87> 1820 <5f88> <5f88> 1816 <5f89> <5f89> 1822 <5f8a> <5f8b> 1818 <5f8c> <5f8c> 1821 <5f90> <5f90> 2225 <5f91> <5f91> 2224 <5f92> <5f92> 2223 <5f96> <5f96> 7894 <5f97> <5f97> 2683 <5f98> <5f98> 2686 <5f99> <5f99> 2684 <5f9b> <5f9b> 7893 <5f9c> <5f9c> 2689 <5f9e> <5f9e> 2685 <5f9f> <5f9f> 7895 <5fa0> <5fa0> 2688 <5fa1> <5fa1> 2687 <5fa4> <5fa4> 16428 <5fa5> <5fa5> 8497 <5fa6> <5fa6> 8496 <5fa7> <5fa7> 16727 <5fa8> <5fa8> 3140 <5fa9> <5faa> 3138 <5fab> <5fab> 8498 <5fac> <5fac> 3589 <5fad> <5fad> 9171 <5fae> <5fae> 3590 <5faf> <5faf> 9170 <5fb1> <5fb1> 15768 <5fb2> <5fb2> 10445 <5fb5> <5fb5> 4420 <5fb6> <5fb6> 9857 <5fb7> <5fb7> 4419 <5fb9> <5fb9> 4047 <5fba> <5fba> 16287 <5fbb> <5fbb> 11073 <5fbc> <5fbc> 11072 <5fbd> <5fbd> 5071 <5fbe> <5fbe> 11614 <5fbf> <5fbf> 12430 <5fc0> <5fc1> 12753 <5fc3> <5fc3> 720 <5fc4> <5fc4> 17642 <5fc5> <5fc5> 832 <5fc9> <5fc9> 6055 <5fcc> <5fcc> 1178 <5fcd> <5fcd> 1180 <5fcf> <5fcf> 6123 <5fd0> <5fd0> 6271 <5fd1> <5fd1> 6270 <5fd2> <5fd2> 6269 <5fd4> <5fd4> 6122 <5fd5> <5fd5> 6121 <5fd6> <5fd6> 975 <5fd7> <5fd7> 1179 <5fd8> <5fd8> 1177 <5fd9> <5fd9> 974 <5fdb> <5fdb> 14922 <5fdd> <5fdd> 1471 <5fde> <5fde> 6522 <5fdf> <5fdf> 16815 <5fe0> <5fe0> 1472 <5fe1> <5fe1> 6276 <5fe3> <5fe3> 6278 <5fe4> <5fe4> 6277 <5fe5> <5fe5> 6523 <5fe8> <5fe8> 6273 <5fea> <5fea> 1184 <5feb> <5feb> 1182 <5fed> <5fed> 6272 <5fee> <5fee> 6274 <5fef> <5fef> 6280 <5ff1> <5ff1> 1181 <5ff3> <5ff3> 6275 <5ff4> <5ff4> 6284 <5ff5> <5ff5> 1474 <5ff7> <5ff7> 6281 <5ff8> <5ff8> 1183 <5ffa> <5ffa> 6279 <5ffb> <5ffb> 6282 <5ffd> <5ffd> 1473 <5fff> <5fff> 1475 <6000> <6000> 6283 <6009> <6009> 6543 endcidrange 100 begincidrange <600a> <600a> 6530 <600b> <600b> 6528 <600c> <600c> 6542 <600d> <600d> 6537 <600e> <600e> 1827 <600f> <600f> 1476 <6010> <6010> 6538 <6011> <6011> 6541 <6012> <6012> 1823 <6013> <6013> 6540 <6014> <6014> 1477 <6015> <6015> 1482 <6016> <6016> 1480 <6017> <6017> 6531 <6019> <6019> 6526 <601a> <601a> 6533 <601b> <601b> 1487 <601c> <601c> 6544 <601d> <601d> 1824 <601e> <601e> 6534 <6020> <6020> 1825 <6021> <6021> 1483 <6022> <6022> 6536 <6023> <6023> 16773 <6024> <6024> 6887 <6025> <6025> 1826 <6026> <6026> 6525 <6027> <6027> 1484 <6028> <6028> 1828 <6029> <6029> 1485 <602a> <602a> 1481 <602b> <602b> 1486 <602c> <602c> 6535 <602d> <602d> 6524 <602e> <602e> 6539 <602f> <602f> 1478 <6031> <6031> 16737 <6032> <6032> 6527 <6033> <6033> 6532 <6034> <6034> 6529 <6035> <6035> 1479 <6037> <6037> 6873 <6039> <6039> 6874 <603b> <603b> 17747 <6040> <6040> 6884 <6041> <6041> 7314 <6042> <6042> 6885 <6043> <6043> 1834 <6044> <6044> 6888 <6045> <6045> 6878 <6046> <6046> 1833 <6047> <6047> 6880 <6049> <6049> 6881 <604a> <604a> 16500 <604c> <604c> 6883 <604d> <604d> 1829 <6050> <6050> 2229 <6052> <6052> 14060 <6053> <6053> 6879 <6054> <6054> 6875 <6055> <6055> 2230 <6058> <6058> 6889 <6059> <6059> 2226 <605a> <605a> 7312 <605b> <605b> 6882 <605d> <605d> 7311 <605e> <605e> 6877 <605f> <605f> 6886 <6062> <6062> 1832 <6063> <6063> 2227 <6064> <6064> 1838 <6065> <6065> 2228 <6066> <6066> 6890 <6067> <6067> 7313 <6068> <6068> 1831 <6069> <6069> 2232 <606a> <606a> 1837 <606b> <606b> 1836 <606c> <606c> 1835 <606d> <606d> 2231 <606e> <606e> 6891 <606f> <606f> 2233 <6070> <6070> 1830 <6072> <6072> 6876 <6075> <6075> 14934 <6077> <6077> 16389 <607e> <607e> 14919 <607f> <607f> 2690 <6080> <6080> 7317 <6081> <6081> 7319 <6083> <6083> 7321 <6084> <6084> 2234 <6085> <6085> 2240 <6086> <6086> 7898 <6087> <6087> 7325 <6088> <6088> 7316 <6089> <6089> 2692 <608a> <608a> 7896 <608c> <608c> 2239 <608d> <608d> 2237 endcidrange 100 begincidrange <608e> <608e> 7327 <6090> <6090> 7897 <6092> <6092> 7318 <6094> <6094> 2238 <6095> <6095> 7322 <6096> <6096> 2241 <6097> <6097> 7324 <609a> <609a> 2236 <609b> <609b> 7323 <609c> <609c> 7326 <609d> <609d> 7320 <609e> <609e> 16746 <609f> <609f> 2235 <60a0> <60a0> 2693 <60a2> <60a2> 7315 <60a3> <60a3> 2691 <60a4> <60a4> 16385 <60a7> <60a7> 15068 <60a8> <60a8> 2694 <60b0> <60b0> 7900 <60b1> <60b1> 7909 <60b2> <60b2> 3143 <60b3> <60b3> 16748 <60b4> <60b4> 2696 <60b5> <60b5> 2701 <60b6> <60b6> 3144 <60b7> <60b7> 7911 <60b8> <60b8> 2708 <60b9> <60b9> 8500 <60ba> <60ba> 7901 <60bb> <60bb> 2700 <60bc> <60bc> 2703 <60bd> <60bd> 2698 <60be> <60be> 7899 <60bf> <60bf> 7913 <60c0> <60c0> 7916 <60c1> <60c1> 8515 <60c3> <60c3> 7914 <60c4> <60c4> 8504 <60c5> <60c5> 2699 <60c6> <60c6> 2706 <60c7> <60c7> 2710 <60c8> <60c8> 7908 <60c9> <60c9> 8499 <60ca> <60ca> 7912 <60cb> <60cb> 2695 <60cc> <60cc> 8501 <60cd> <60cd> 7915 <60ce> <60ce> 8503 <60cf> <60cf> 7904 <60d1> <60d1> 3141 <60d3> <60d4> 7902 <60d5> <60d5> 2705 <60d7> <60d7> 17973 <60d8> <60d8> 2704 <60d9> <60d9> 7906 <60da> <60da> 2709 <60db> <60db> 7910 <60dc> <60dc> 2702 <60dd> <60dd> 7907 <60de> <60de> 15820 <60df> <60df> 2707 <60e0> <60e0> 3145 <60e1> <60e1> 3142 <60e2> <60e2> 8502 <60e3> <60e3> 15733 <60e4> <60e4> 7905 <60e6> <60e6> 2697 <60e7> <60e7> 15748 <60e8> <60e8> 15739 <60e9> <60e9> 16393 <60f0> <60f0> 3150 <60f1> <60f1> 3154 <60f2> <60f2> 8506 <60f3> <60f3> 3595 <60f4> <60f4> 3152 <60f5> <60f5> 8510 <60f6> <60f6> 3156 <60f7> <60f7> 9172 <60f8> <60f8> 8512 <60f9> <60f9> 3597 <60fa> <60fa> 3148 <60fb> <60fb> 3151 <60fc> <60fc> 8513 <60fd> <60fd> 16296 <60fe> <60fe> 8514 <60ff> <60ff> 8520 <6100> <6100> 3158 <6101> <6101> 3598 <6103> <6103> 8516 <6104> <6104> 8521 <6105> <6105> 8509 <6106> <6106> 3608 <6107> <6107> 15413 <6108> <6108> 3599 <6109> <6109> 3157 <610a> <610a> 8507 <610b> <610b> 8522 <610c> <610c> 15495 <610d> <610d> 3607 endcidrange 100 begincidrange <610e> <610e> 3155 <610f> <610f> 3592 <6110> <6110> 8519 <6112> <6112> 3159 <6113> <6113> 8511 <6114> <6114> 8505 <6115> <6115> 3149 <6116> <6116> 8508 <6118> <6118> 8517 <6119> <6119> 16118 <611a> <611a> 3591 <611b> <611b> 3596 <611c> <611c> 3146 <611d> <611d> 8518 <611f> <611f> 3594 <6123> <6123> 3147 <6127> <6127> 3606 <6128> <6128> 9859 <6129> <6129> 9183 <612b> <612b> 9175 <612c> <612c> 9858 <612e> <612e> 9179 <612f> <612f> 9181 <6130> <6130> 16183 <6132> <6132> 9178 <6134> <6134> 3605 <6136> <6136> 9177 <6137> <6137> 3609 <613b> <613b> 9874 <613d> <613d> 17974 <613e> <613e> 3604 <613f> <613f> 4049 <6140> <6140> 9184 <6141> <6141> 9860 <6142> <6142> 16756 <6144> <6144> 3602 <6145> <6145> 9176 <6146> <6146> 9180 <6147> <6147> 4048 <6148> <6148> 3593 <6149> <614a> 9173 <614b> <614b> 4050 <614c> <614c> 3601 <614d> <614d> 3603 <614e> <614e> 3600 <614f> <614f> 9182 <6150> <6150> 15410 <6152> <6153> 9864 <6154> <6154> 9870 <6155> <6155> 4425 <6156> <6156> 9877 <6158> <6158> 4056 <6159> <6159> 16314 <615a> <615a> 4055 <615b> <615b> 9872 <615c> <615c> 16774 <615d> <615d> 4424 <615e> <615e> 9861 <615f> <615f> 4054 <6160> <6160> 18764 <6161> <6161> 9876 <6162> <6163> 4052 <6164> <6164> 16755 <6165> <6165> 9873 <6166> <6166> 10462 <6167> <6167> 4422 <6168> <6168> 3153 <616a> <616a> 9875 <616b> <616b> 4429 <616c> <616c> 9867 <616e> <616e> 4423 <616f> <616f> 16320 <6170> <6170> 4428 <6171> <6171> 9862 <6172> <6172> 9866 <6173> <6173> 9863 <6174> <6174> 9869 <6175> <6175> 4057 <6176> <6176> 4421 <6177> <6177> 4051 <6179> <6179> 10448 <617a> <617a> 9871 <617c> <617c> 4427 <617d> <617d> 16317 <617e> <617e> 4430 <6180> <6180> 9868 <6181> <6181> 16759 <6182> <6182> 4426 <6183> <6183> 10447 <6187> <6187> 16762 <6189> <6189> 10452 <618a> <618a> 4785 <618b> <618b> 10446 <618c> <618c> 11085 <618d> <618d> 10461 <618e> <618e> 4434 <6190> <6190> 4432 <6191> <6191> 4783 <6192> <6192> 10458 <6193> <6193> 10454 endcidrange 100 begincidrange <6194> <6194> 4438 <6195> <6195> 15840 <6196> <6196> 11076 <6198> <6198> 14933 <6199> <6199> 14932 <619a> <619a> 4436 <619b> <619b> 10453 <619c> <619c> 16386 <619d> <619d> 11074 <619f> <619f> 10457 <61a1> <61a1> 10460 <61a2> <61a2> 10451 <61a4> <61a4> 4437 <61a7> <61a7> 4431 <61a8> <61a8> 11075 <61a9> <61a9> 4784 <61aa> <61aa> 10459 <61ab> <61ab> 4433 <61ac> <61ac> 4435 <61ad> <61ad> 10456 <61ae> <61ae> 4439 <61af> <61af> 10455 <61b0> <61b0> 10450 <61b1> <61b1> 10449 <61b2> <61b2> 4782 <61b3> <61b3> 10463 <61b4> <61b4> 11078 <61b5> <61b5> 11616 <61b6> <61b6> 4787 <61b7> <61b7> 17977 <61b8> <61b8> 11084 <61b9> <61b9> 17343 <61ba> <61ba> 11082 <61bc> <61bc> 11617 <61be> <61be> 4788 <61bf> <61bf> 11083 <61c0> <61c0> 14928 <61c1> <61c1> 11080 <61c2> <61c2> 5073 <61c3> <61c3> 11615 <61c5> <61c5> 11077 <61c6> <61c6> 11079 <61c7> <61c7> 5074 <61c8> <61c8> 4790 <61c9> <61c9> 5072 <61ca> <61ca> 4789 <61cb> <61cb> 5076 <61cc> <61cc> 11081 <61cd> <61cd> 4786 <61cf> <61cf> 17978 <61d0> <61d0> 16769 <61d3> <61d3> 16766 <61d6> <61d6> 12070 <61d8> <61d8> 12062 <61da> <61da> 14513 <61de> <61de> 11623 <61df> <61df> 12063 <61e0> <61e0> 11619 <61e2> <61e2> 16325 <61e3> <61e3> 5328 <61e4> <61e4> 11621 <61e5> <61e5> 11620 <61e6> <61e6> 5075 <61e7> <61e7> 11618 <61e8> <61e8> 11622 <61e9> <61e9> 12071 <61ea> <61ea> 12067 <61eb> <61eb> 12069 <61ed> <61ee> 12064 <61f0> <61f0> 12068 <61f1> <61f1> 12066 <61f2> <61f2> 5502 <61f5> <61f5> 5505 <61f6> <61f6> 5504 <61f7> <61f7> 5503 <61f8> <61f8> 5652 <61f9> <61f9> 12755 <61fa> <61fa> 5653 <61fb> <61fb> 12431 <61fc> <61fc> 5744 <61fd> <61fd> 13009 <61fe> <61fe> 5745 <61ff> <61ff> 5828 <6200> <6200> 5880 <6201> <6201> 13335 <6203> <6204> 13336 <6207> <6207> 13619 <6208> <6208> 721 <6209> <6209> 6056 <620a> <620a> 833 <620c> <620d> 977 <620e> <620e> 976 <6210> <6210> 979 <6211> <6211> 1186 <6212> <6212> 1185 <6214> <6214> 6545 <6215> <6215> 1489 <6216> <6216> 1488 <6219> <6219> 7328 <621a> <621b> 2711 endcidrange 100 begincidrange <621f> <621f> 3160 <6220> <6220> 9185 <6221> <6222> 3610 <6223> <6223> 9187 <6224> <6224> 9189 <6225> <6225> 9188 <6227> <6227> 9879 <6229> <6229> 9878 <622a> <622a> 4058 <622b> <622b> 9880 <622c> <622c> 17980 <622d> <622d> 10464 <622e> <622e> 4440 <6230> <6230> 4791 <6232> <6232> 5077 <6233> <6233> 5329 <6234> <6234> 5078 <6236> <6236> 722 <6237> <6237> 17690 <6239> <6239> 16322 <623a> <623a> 6285 <623d> <623d> 6546 <623e> <623e> 1491 <623f> <623f> 1490 <6240> <6240> 1492 <6241> <6241> 1839 <6242> <6243> 6892 <6246> <6246> 7329 <6247> <6247> 2242 <6248> <6248> 2713 <6249> <6249> 3161 <624a> <624a> 8523 <624b> <624b> 723 <624c> <624c> 17644 <624d> <624d> 657 <624e> <624e> 724 <6250> <6250> 6057 <6251> <6251> 837 <6252> <6252> 836 <6253> <6254> 834 <6258> <6258> 982 <6259> <6259> 6130 <625a> <625a> 6132 <625b> <625b> 981 <625c> <625c> 6124 <625e> <625e> 6125 <6260> <6260> 6131 <6261> <6261> 6127 <6262> <6262> 6129 <6263> <6263> 980 <6264> <6264> 6126 <6265> <6265> 6133 <6266> <6266> 6128 <6268> <6268> 16149 <626d> <626d> 1193 <626e> <626e> 1202 <626f> <626f> 1200 <6270> <6270> 6295 <6271> <6271> 6292 <6272> <6272> 6300 <6273> <6273> 1198 <6274> <6274> 6301 <6276> <6276> 1191 <6277> <6277> 6298 <6279> <6279> 1197 <627a> <627a> 6294 <627b> <627b> 6293 <627c> <627c> 1195 <627d> <627d> 6299 <627e> <627e> 1196 <627f> <627f> 1493 <6280> <6280> 1190 <6281> <6281> 6296 <6282> <6282> 16262 <6283> <6283> 6286 <6284> <6284> 1187 <6285> <6285> 16208 <6286> <6286> 1206 <6287> <6287> 6291 <6288> <6288> 6297 <6289> <6289> 1192 <628a> <628a> 1194 <628c> <628c> 6287 <628e> <628f> 6288 <6290> <6290> 17344 <6291> <6291> 1205 <6292> <6292> 1199 <6293> <6293> 1204 <6294> <6294> 6290 <6295> <6295> 1203 <6296> <6296> 1189 <6297> <6297> 1188 <6298> <6298> 1201 <629d> <629d> 16022 <62a4> <62a4> 14953 <62a6> <62a6> 16321 <62a8> <62a8> 1507 <62a9> <62a9> 6558 <62aa> <62aa> 6551 <62ab> <62ab> 1502 endcidrange 100 begincidrange <62ac> <62ac> 1521 <62ad> <62ad> 6547 <62ae> <62ae> 6554 <62af> <62af> 6556 <62b0> <62b0> 6559 <62b1> <62b1> 1516 <62b3> <62b3> 6555 <62b4> <62b4> 6548 <62b5> <62b5> 1514 <62b6> <62b6> 6552 <62b8> <62b8> 6560 <62b9> <62b9> 1499 <62bb> <62bb> 6557 <62bc> <62bc> 1509 <62bd> <62bd> 1508 <62be> <62be> 6550 <62bf> <62bf> 1497 <62c2> <62c2> 1498 <62c3> <62c3> 15759 <62c4> <62c4> 1496 <62c5> <62c5> 16778 <62c6> <62c6> 1520 <62c7> <62c7> 1512 <62c8> <62c8> 1506 <62c9> <62c9> 1494 <62ca> <62ca> 6553 <62cb> <62cb> 1505 <62cc> <62cc> 1495 <62cd> <62cd> 1513 <62ce> <62ce> 1522 <62cf> <62cf> 6894 <62d0> <62d0> 1510 <62d1> <62d1> 6549 <62d2> <62d2> 1500 <62d3> <62d4> 1503 <62d5> <62d5> 16780 <62d6> <62d7> 1518 <62d8> <62d8> 1517 <62d9> <62d9> 1511 <62da> <62da> 1515 <62db> <62db> 1501 <62dc> <62dc> 1840 <62df> <62df> 16412 <62e5> <62e5> 17981 <62eb> <62eb> 6900 <62ec> <62ec> 1852 <62ed> <62ed> 1844 <62ee> <62ee> 1846 <62ef> <62ef> 1851 <62f0> <62f0> 6912 <62f1> <62f1> 1849 <62f2> <62f2> 7330 <62f3> <62f3> 2243 <62f4> <62f4> 1854 <62f5> <62f5> 6897 <62f6> <62f6> 6905 <62f7> <62f7> 1850 <62f8> <62f8> 6904 <62f9> <62f9> 6901 <62fa> <62fa> 6909 <62fb> <62fb> 6911 <62fc> <62fc> 1843 <62fd> <62fd> 1847 <62fe> <62fe> 1853 <62ff> <62ff> 2245 <6300> <6300> 6906 <6301> <6301> 1845 <6302> <6302> 1856 <6303> <6303> 6899 <6307> <6307> 1848 <6308> <6308> 2244 <6309> <6309> 1842 <630b> <630b> 6896 <630c> <630c> 6903 <630d> <630d> 6895 <630e> <630e> 6898 <630f> <630f> 6902 <6310> <6310> 7331 <6311> <6311> 1855 <6313> <6314> 6907 <6315> <6315> 6910 <6316> <6316> 1841 <6318> <6318> 17345 <6328> <6328> 2259 <6329> <6329> 7343 <632a> <632b> 2257 <632c> <632c> 7333 <632d> <632d> 7349 <632e> <632e> 16093 <632f> <632f> 2248 <6331> <6331> 14949 <6332> <6332> 7917 <6333> <6333> 7351 <6334> <6334> 7345 <6335> <6335> 16150 <6336> <6336> 7336 <6337> <6337> 14947 <6338> <6338> 7354 <6339> <6339> 7339 <633a> <633a> 2254 endcidrange 100 begincidrange <633b> <633b> 7940 <633c> <633c> 7342 <633d> <633d> 2256 <633e> <633e> 2247 <6340> <6340> 7356 <6341> <6341> 7344 <6342> <6342> 2250 <6343> <6343> 7337 <6344> <6345> 7334 <6346> <6346> 2251 <6347> <6347> 7350 <6348> <6348> 7357 <6349> <6349> 2253 <634a> <634a> 7341 <634b> <634b> 7340 <634c> <634c> 2261 <634d> <634d> 2260 <634e> <634e> 2246 <634f> <634f> 2252 <6350> <6350> 2255 <6351> <6351> 7353 <6354> <6354> 7347 <6355> <6355> 2249 <6356> <6356> 7332 <6357> <6357> 7355 <6358> <6358> 7346 <6359> <6359> 7348 <635a> <635a> 7352 <6364> <6364> 16327 <6365> <6365> 7918 <6367> <6367> 2721 <6368> <6368> 2741 <6369> <6369> 2740 <636b> <636b> 2729 <636c> <636c> 16782 <636d> <636d> 7936 <636e> <636e> 7932 <636f> <636f> 7929 <6370> <6370> 7947 <6371> <6371> 2724 <6372> <6372> 2716 <6375> <6375> 7934 <6376> <6376> 3177 <6377> <6377> 2720 <6378> <6378> 7942 <6379> <6379> 17255 <637a> <637a> 2742 <637b> <637b> 2739 <637c> <637c> 7938 <637d> <637d> 7921 <637f> <637f> 16203 <6380> <6380> 2738 <6381> <6381> 7944 <6382> <6382> 7920 <6383> <6383> 2727 <6384> <6384> 2731 <6385> <6385> 7943 <6387> <6387> 7930 <6388> <6388> 2732 <6389> <6389> 2726 <638a> <638a> 7919 <638b> <638b> 16776 <638c> <638c> 3163 <638d> <638d> 7946 <638e> <638e> 7928 <638f> <638f> 2737 <6390> <6390> 7931 <6391> <6391> 7945 <6392> <6392> 2736 <6394> <6394> 8524 <6396> <6396> 2717 <6397> <6397> 7926 <6398> <6398> 2722 <6399> <6399> 2733 <639b> <639b> 2728 <639c> <639c> 7935 <639d> <639d> 7925 <639e> <639e> 7923 <639f> <639f> 7941 <63a0> <63a0> 2714 <63a1> <63a1> 2734 <63a2> <63a2> 2718 <63a3> <63a3> 3162 <63a4> <63a4> 7939 <63a5> <63a5> 2719 <63a7> <63a7> 2715 <63a8> <63a8> 2730 <63a9> <63a9> 2725 <63aa> <63aa> 2723 <63ab> <63ab> 7927 <63ac> <63ac> 2735 <63ad> <63ad> 7924 <63ae> <63ae> 7937 <63af> <63af> 7933 <63b0> <63b0> 8526 <63b1> <63b1> 8525 <63b9> <63b9> 16029 <63bd> <63bd> 7922 <63be> <63be> 8542 <63c0> <63c0> 3165 endcidrange 100 begincidrange <63c1> <63c1> 18088 <63c2> <63c2> 8548 <63c3> <63c3> 8531 <63c4> <63c4> 8545 <63c5> <63c5> 9190 <63c6> <63c6> 3168 <63c7> <63c7> 8549 <63c8> <63c8> 8552 <63c9> <63c9> 3167 <63ca> <63ca> 8534 <63cb> <63cb> 8551 <63cc> <63cc> 8550 <63cd> <63cd> 3169 <63ce> <63ce> 8527 <63cf> <63cf> 3164 <63d0> <63d0> 3172 <63d1> <63d1> 14950 <63d2> <63d2> 3170 <63d3> <63d3> 8547 <63d5> <63d5> 8537 <63d6> <63d6> 3174 <63d7> <63d7> 8554 <63d8> <63d8> 8546 <63d9> <63d9> 8555 <63da> <63da> 3182 <63db> <63db> 3180 <63dc> <63dc> 8544 <63dd> <63dd> 8543 <63de> <63de> 15968 <63df> <63df> 8541 <63e0> <63e0> 8535 <63e1> <63e1> 3173 <63e2> <63e2> 17985 <63e3> <63e3> 3171 <63e4> <63e4> 7338 <63e5> <63e5> 8528 <63e6> <63e6> 18591 <63e7> <63e7> 9220 <63e8> <63e8> 8529 <63e9> <63e9> 3166 <63ea> <63ea> 3179 <63eb> <63eb> 9192 <63ed> <63ee> 3175 <63ef> <63ef> 8530 <63f0> <63f0> 8553 <63f1> <63f1> 9191 <63f2> <63f2> 8538 <63f3> <63f3> 8533 <63f4> <63f4> 3178 <63f5> <63f5> 8539 <63f6> <63f6> 8536 <63f8> <63f8> 16786 <63f9> <63f9> 3183 <63fb> <63fb> 17986 <63fc> <63fc> 16028 <63fe> <63fe> 16030 <6406> <6406> 3626 <6407> <6407> 17987 <6409> <6409> 9195 <640a> <640a> 9214 <640b> <640b> 9219 <640c> <640c> 9207 <640d> <640d> 3622 <640e> <640e> 9224 <640f> <640f> 3619 <6410> <6410> 9193 <6412> <6412> 9194 <6413> <6413> 3612 <6414> <6414> 3621 <6415> <6415> 9201 <6416> <6417> 3624 <6418> <6418> 9202 <641a> <641a> 9215 <641b> <641b> 9221 <641c> <641c> 3620 <641e> <641e> 3614 <641f> <641f> 9200 <6420> <6420> 9196 <6421> <6421> 9223 <6422> <6423> 9205 <6424> <6424> 9197 <6425> <6425> 9217 <6426> <6426> 9208 <6427> <6427> 9218 <6428> <6428> 9210 <642a> <642a> 3615 <642b> <642b> 9881 <642c> <642c> 3618 <642d> <642d> 3616 <642e> <642e> 9222 <642f> <642f> 9213 <6430> <6430> 9209 <6432> <6432> 17881 <6433> <6433> 9198 <6434> <6434> 4068 <6435> <6435> 9212 <6436> <6436> 3623 <6437> <6437> 9204 <6438> <6438> 16785 <6439> <6439> 9203 endcidrange 100 begincidrange <643a> <643a> 16797 <643b> <643b> 14955 <643d> <643d> 3617 <643e> <643e> 3613 <643f> <643f> 9902 <6440> <6440> 9216 <6441> <6441> 9211 <6443> <6443> 9199 <644b> <644b> 9897 <644d> <644d> 9882 <644e> <644e> 9893 <6450> <6450> 9900 <6451> <6451> 4066 <6452> <6452> 3181 <6453> <6453> 9898 <6454> <6454> 4061 <6458> <6458> 4060 <6459> <6459> 9905 <645a> <645a> 17346 <645b> <645b> 9883 <645c> <645c> 9896 <645d> <645d> 9884 <645e> <645e> 9895 <645f> <645f> 4064 <6460> <6460> 9899 <6461> <6461> 8540 <6465> <6465> 9906 <6466> <6466> 9891 <6467> <6467> 4067 <6468> <6468> 10478 <6469> <6469> 4441 <646b> <646b> 9904 <646c> <646c> 9903 <646d> <646d> 4069 <646e> <646e> 10465 <646f> <646f> 4442 <6470> <6470> 10466 <6471> <6471> 14939 <6472> <6473> 9887 <6474> <6474> 9885 <6475> <6475> 9890 <6476> <6476> 9886 <6477> <6477> 9907 <6478> <6478> 4063 <6479> <6479> 4443 <647a> <647a> 4065 <647b> <647b> 4070 <647c> <647c> 17260 <647d> <647d> 9889 <647f> <647f> 9901 <6482> <6482> 9894 <6485> <6485> 10469 <6487> <6487> 4059 <6488> <6488> 4446 <6489> <6489> 11092 <648a> <648a> 10474 <648b> <648b> 10473 <648c> <648c> 10475 <648d> <648d> 17187 <648f> <648f> 10472 <6490> <6490> 4447 <6491> <6491> 17347 <6492> <6492> 4453 <6493> <6493> 4450 <6495> <6495> 4451 <6496> <6496> 10467 <6497> <6497> 10470 <6498> <6498> 10480 <6499> <6499> 4459 <649a> <649a> 4457 <649c> <649c> 10471 <649d> <649d> 8532 <649e> <649e> 4444 <649f> <649f> 10477 <64a0> <64a0> 10468 <64a2> <64a2> 4460 <64a3> <64a3> 10476 <64a4> <64a4> 4062 <64a5> <64a5> 4449 <64a6> <64a6> 9892 <64a9> <64a9> 4452 <64ab> <64ab> 4456 <64ac> <64ac> 4458 <64ad> <64ad> 4455 <64ae> <64ae> 4454 <64af> <64af> 17121 <64b0> <64b0> 4448 <64b1> <64b1> 10479 <64b2> <64b2> 4445 <64b3> <64b3> 4461 <64b4> <64b4> 17216 <64b6> <64b6> 14948 <64bb> <64bc> 4795 <64bd> <64bd> 11091 <64be> <64be> 4805 <64bf> <64bf> 4802 <64c0> <64c0> 17989 <64c1> <64c1> 4793 <64c2> <64c2> 4800 <64c3> <64c3> 11093 endcidrange 100 begincidrange <64c4> <64c4> 4798 <64c5> <64c5> 4792 <64c7> <64c7> 4799 <64c9> <64c9> 11090 <64ca> <64ca> 5080 <64cb> <64cb> 4794 <64cd> <64cd> 4801 <64ce> <64ce> 5079 <64cf> <64cf> 11089 <64d0> <64d0> 11088 <64d2> <64d2> 4803 <64d3> <64d3> 16131 <64d4> <64d4> 4804 <64d6> <64d6> 11087 <64d7> <64d7> 11086 <64d8> <64d8> 5081 <64d9> <64d9> 11096 <64da> <64da> 4797 <64db> <64db> 11094 <64dd> <64dd> 17182 <64e0> <64e0> 5082 <64e1> <64e1> 16793 <64e2> <64e2> 5087 <64e3> <64e3> 11626 <64e4> <64e4> 11628 <64e5> <64e5> 16794 <64e6> <64e6> 5084 <64e7> <64e7> 14248 <64e8> <64e8> 11629 <64e9> <64e9> 11625 <64ea> <64ea> 17226 <64eb> <64eb> 11627 <64ec> <64ec> 5085 <64ed> <64ed> 5088 <64ef> <64ef> 11624 <64f0> <64f0> 5083 <64f1> <64f1> 5086 <64f2> <64f2> 5331 <64f3> <64f3> 11095 <64f4> <64f4> 5330 <64f7> <64f7> 5336 <64f8> <64f8> 12075 <64fa> <64fb> 5334 <64fc> <64fc> 12078 <64fd> <64fd> 12074 <64fe> <64fe> 5332 <64ff> <64ff> 12072 <6500> <6500> 5506 <6501> <6501> 12076 <6503> <6503> 12077 <6504> <6504> 12073 <6506> <6506> 5333 <6507> <6507> 12432 <6509> <6509> 12435 <650a> <650a> 17718 <650c> <650c> 12436 <650d> <650d> 12434 <650e> <650e> 12437 <650f> <650f> 5507 <6510> <6510> 12433 <6511> <6511> 15017 <6513> <6513> 12759 <6514> <6514> 5655 <6515> <6515> 12758 <6516> <6516> 12757 <6517> <6517> 12756 <6518> <6518> 5654 <6519> <6519> 5656 <651b> <651b> 13010 <651c> <651c> 5747 <651d> <651d> 5746 <651e> <651e> 16775 <651f> <651f> 16064 <6520> <6520> 13186 <6521> <6521> 13185 <6522> <6522> 13188 <6523> <6523> 5881 <6524> <6524> 5829 <6525> <6525> 13339 <6526> <6526> 13187 <6529> <6529> 13338 <652a> <652a> 5883 <652b> <652b> 5882 <652c> <652c> 5921 <652d> <652d> 13444 <652e> <652e> 13514 <652f> <652f> 725 <6530> <6530> 15970 <6532> <6532> 8556 <6533> <6533> 11097 <6534> <6534> 556 <6535> <6535> 17645 <6536> <6536> 983 <6537> <6537> 6134 <6538> <6538> 1209 <6539> <6539> 1207 <653b> <653b> 1208 <653d> <653d> 6561 <653e> <653e> 1523 <653f> <653f> 1857 endcidrange 100 begincidrange <6541> <6541> 6913 <6543> <6543> 6914 <6545> <6545> 1858 <6546> <6546> 7359 <6548> <6549> 2262 <654a> <654a> 7358 <654d> <654d> 16799 <654f> <654f> 2749 <6551> <6551> 2745 <6553> <6553> 7948 <6554> <6554> 2752 <6555> <6555> 2751 <6556> <6556> 2744 <6557> <6557> 2747 <6558> <6558> 2750 <6559> <6559> 2746 <655c> <655c> 8560 <655d> <655d> 2743 <655e> <655e> 3184 <655f> <655f> 16805 <6562> <6563> 3186 <6564> <6564> 8559 <6565> <6565> 8562 <6566> <6566> 3185 <6567> <6567> 8557 <6568> <6568> 8561 <656a> <656a> 8558 <656b> <656b> 14956 <656c> <656c> 3627 <656d> <656d> 16804 <656f> <656f> 9225 <6572> <6572> 4071 <6573> <6573> 9908 <6574> <6574> 4806 <6575> <6575> 4462 <6576> <6576> 10481 <6577> <6578> 4463 <6579> <6579> 10483 <657a> <657a> 10482 <657b> <657b> 10484 <657c> <657c> 11099 <657f> <657f> 11098 <6580> <6580> 11631 <6581> <6581> 11630 <6582> <6583> 5089 <6584> <6584> 12438 <6585> <6585> 16803 <6586> <6586> 17992 <6587> <6587> 726 <6588> <6588> 16651 <6589> <6589> 17748 <658c> <658c> 8563 <6590> <6590> 3189 <6591> <6591> 3188 <6592> <6592> 9226 <6594> <6594> 12079 <6595> <6595> 5748 <6596> <6596> 13340 <6597> <6597> 727 <6599> <6599> 2264 <659b> <659b> 2754 <659c> <659c> 2753 <659d> <659e> 8564 <659f> <659f> 3628 <65a0> <65a0> 9909 <65a1> <65a1> 4072 <65a2> <65a2> 11100 <65a4> <65a4> 728 <65a5> <65a5> 838 <65a7> <65a7> 1524 <65a8> <65a8> 6562 <65aa> <65aa> 6915 <65ab> <65ab> 1859 <65ac> <65ac> 2755 <65ae> <65ae> 8566 <65af> <65af> 3190 <65b0> <65b0> 3629 <65b2> <65b3> 10485 <65b5> <65b5> 16807 <65b6> <65b6> 11632 <65b7> <65b7> 5337 <65b8> <65b8> 13515 <65b9> <65b9> 729 <65bb> <65bb> 6563 <65bc> <65bc> 1525 <65bd> <65bd> 1860 <65be> <65be> 15931 <65bf> <65bf> 6916 <65c1> <65c1> 2265 <65c2> <65c2> 7363 <65c3> <65c4> 7361 <65c5> <65c5> 2266 <65c6> <65c6> 7360 <65cb> <65cc> 2757 <65cd> <65cd> 7949 <65ce> <65ce> 2759 <65cf> <65cf> 2756 <65d0> <65d0> 8567 <65d1> <65d1> 16810 <65d2> <65d2> 8568 endcidrange 100 begincidrange <65d3> <65d3> 9227 <65d4> <65d4> 15272 <65d6> <65d6> 4074 <65d7> <65d7> 4073 <65da> <65da> 11633 <65db> <65db> 12080 <65dd> <65dd> 12440 <65de> <65de> 12439 <65df> <65df> 12760 <65e0> <65e0> 557 <65e1> <65e1> 6025 <65e2> <65e2> 1861 <65e3> <65e3> 16814 <65e5> <65e5> 730 <65e6> <65e6> 839 <65e8> <65e8> 985 <65e9> <65e9> 984 <65ec> <65ed> 986 <65ee> <65ee> 6136 <65ef> <65ef> 6135 <65f0> <65f0> 6302 <65f1> <65f1> 1210 <65f2> <65f2> 6305 <65f3> <65f3> 6304 <65f4> <65f4> 6303 <65f5> <65f5> 6306 <65fa> <65fa> 1526 <65fb> <65fb> 6569 <65fc> <65fc> 6565 <65fd> <65fd> 6574 <65ff> <65ff> 17994 <6600> <6600> 1533 <6602> <6602> 1531 <6603> <6603> 6570 <6604> <6604> 6566 <6605> <6605> 6573 <6606> <6606> 1530 <6607> <6607> 1537 <6608> <6608> 6568 <6609> <6609> 6564 <660a> <660a> 1536 <660b> <660b> 6571 <660c> <660c> 1529 <660d> <660d> 6572 <660e> <660e> 1532 <660f> <660f> 1534 <6610> <6610> 6576 <6611> <6611> 6575 <6612> <6612> 6567 <6613> <6613> 1528 <6614> <6614> 1527 <6615> <6615> 1535 <6618> <6618> 16817 <661c> <661c> 6921 <661d> <661d> 6927 <661e> <661e> 14995 <661f> <661f> 1867 <6620> <6620> 1864 <6621> <6621> 6918 <6622> <6622> 6923 <6623> <6623> 17045 <6624> <6624> 1870 <6625> <6625> 1862 <6626> <6626> 6922 <6627> <6627> 1865 <6628> <6628> 1868 <662b> <662b> 6925 <662d> <662d> 1863 <662e> <662e> 6930 <662f> <662f> 1866 <6630> <6630> 14989 <6631> <6631> 1869 <6632> <6632> 6919 <6633> <6633> 6924 <6634> <6634> 6928 <6635> <6635> 6920 <6636> <6636> 6917 <6639> <6639> 6929 <663a> <663a> 6926 <6641> <6641> 2274 <6642> <6642> 2267 <6643> <6643> 2270 <6644> <6644> 16820 <6645> <6645> 2273 <6647> <6647> 7366 <6648> <6648> 15769 <6649> <6649> 2268 <664a> <664a> 7364 <664b> <664b> 16823 <664c> <664c> 2272 <664f> <664f> 2269 <6651> <6651> 7367 <6652> <6652> 2271 <6653> <6653> 17995 <6657> <6657> 16539 <6659> <6659> 7953 <665a> <665a> 2761 <665b> <665b> 7952 <665c> <665c> 7954 <665d> <665d> 2760 endcidrange 100 begincidrange <665e> <665e> 2765 <665f> <665f> 7365 <6661> <6661> 7951 <6662> <6662> 7955 <6663> <6663> 14992 <6664> <6664> 2762 <6665> <6665> 7950 <6666> <6666> 2764 <6667> <6667> 16825 <6668> <6668> 2763 <666a> <666a> 8575 <666b> <666b> 14987 <666c> <666c> 8570 <666e> <666e> 3191 <666f> <666f> 3195 <6670> <6670> 3192 <6671> <6671> 8573 <6672> <6672> 8576 <6673> <6673> 16827 <6674> <6674> 3193 <6676> <6676> 3194 <6677> <6677> 3199 <6678> <6678> 9236 <6679> <6679> 8574 <667a> <667a> 3197 <667b> <667b> 8571 <667c> <667c> 8569 <667d> <667d> 18075 <667e> <667e> 3198 <6680> <6680> 8572 <6684> <6684> 3635 <6685> <6685> 16738 <6686> <6686> 9228 <6687> <6688> 3632 <6689> <6689> 3631 <668a> <668a> 9233 <668b> <668b> 9232 <668c> <668c> 9229 <668d> <668d> 3637 <668e> <668e> 14985 <6690> <6690> 9231 <6691> <6691> 3196 <6692> <6692> 17997 <6694> <6694> 9235 <6695> <6695> 9230 <6696> <6696> 3634 <6697> <6697> 3630 <6698> <6698> 3636 <6699> <6699> 9234 <669a> <669a> 15677 <669d> <669d> 4077 <669f> <669f> 9912 <66a0> <66a0> 9911 <66a1> <66a1> 9910 <66a2> <66a2> 4075 <66a4> <66a4> 16570 <66a8> <66a8> 4076 <66a9> <66a9> 10489 <66aa> <66aa> 10492 <66ab> <66ab> 4466 <66ad> <66ad> 18760 <66ae> <66ae> 4465 <66af> <66af> 10493 <66b0> <66b0> 10488 <66b1> <66b1> 4468 <66b2> <66b2> 10490 <66b3> <66b3> 16565 <66b4> <66b4> 4467 <66b5> <66b5> 10487 <66b6> <66b6> 15891 <66b7> <66b7> 10491 <66b8> <66b8> 4812 <66b9> <66b9> 4809 <66ba> <66ba> 11109 <66bb> <66bb> 11108 <66bd> <66bd> 11107 <66be> <66be> 11102 <66bf> <66bf> 15770 <66c0> <66c0> 11103 <66c4> <66c4> 4810 <66c6> <66c6> 4807 <66c7> <66c7> 4811 <66c8> <66c8> 11101 <66c9> <66c9> 4808 <66ca> <66cb> 11104 <66cc> <66cc> 11110 <66cd> <66cd> 16568 <66ce> <66ce> 14967 <66cf> <66cf> 11106 <66d2> <66d2> 11634 <66d6> <66d6> 5092 <66d8> <66d8> 12083 <66d9> <66d9> 5091 <66da> <66db> 12081 <66dc> <66dc> 5338 <66dd> <66dd> 5509 <66de> <66de> 12441 <66e0> <66e0> 5508 <66e3> <66e4> 12762 <66e6> <66e6> 5657 endcidrange 100 begincidrange <66e8> <66e8> 12761 <66e9> <66e9> 5749 <66eb> <66eb> 13341 <66ec> <66ec> 5884 <66ed> <66ee> 13445 <66f0> <66f0> 731 <66f1> <66f1> 16004 <66f2> <66f3> 988 <66f4> <66f4> 1211 <66f6> <66f6> 6577 <66f7> <66f7> 1871 <66f8> <66f8> 2275 <66f9> <66f9> 2766 <66fc> <66fc> 2591 <66fe> <66ff> 3200 <6700> <6700> 3056 <6701> <6701> 8577 <6702> <6702> 16836 <6703> <6703> 3638 <6704> <6704> 9914 <6705> <6705> 9913 <6708> <6708> 732 <6709> <6709> 990 <670a> <670a> 6578 <670b> <670b> 1539 <670c> <670c> 16354 <670d> <670d> 1538 <670e> <670e> 15777 <670f> <6710> 6931 <6712> <6713> 7368 <6714> <6715> 2276 <6716> <6716> 17999 <6717> <6717> 2278 <6718> <6718> 7956 <671b> <671b> 2768 <671d> <671d> 3203 <671e> <671e> 15755 <671f> <671f> 3202 <6720> <6720> 9237 <6721> <6721> 9506 <6722> <6722> 9915 <6723> <6723> 11111 <6725> <6725> 14239 <6726> <6726> 5339 <6727> <6727> 5658 <6728> <6728> 733 <672a> <672b> 842 <672c> <672c> 841 <672d> <672d> 844 <672e> <672e> 840 <6731> <6731> 993 <6733> <6733> 6144 <6734> <6734> 992 <6735> <6735> 994 <6736> <6736> 15937 <6738> <6738> 6139 <6739> <6739> 6138 <673a> <673a> 6141 <673b> <673b> 6140 <673c> <673c> 6143 <673d> <673d> 991 <673e> <673e> 6137 <673f> <673f> 6142 <6744> <6744> 16411 <6745> <6745> 6307 <6746> <6746> 1221 <6747> <6747> 6308 <6748> <6748> 6312 <6749> <6749> 1220 <674b> <674b> 6316 <674c> <674c> 6311 <674d> <674d> 6314 <674e> <6751> 1213 <6753> <6753> 1223 <6755> <6755> 6310 <6756> <6756> 1218 <6757> <6757> 1224 <6759> <6759> 6309 <675a> <675a> 6315 <675c> <675c> 1217 <675d> <675d> 6313 <675e> <675e> 1219 <675f> <675f> 1212 <6760> <6760> 1222 <6761> <6761> 15718 <6762> <6762> 16843 <6767> <6767> 16842 <676a> <676a> 1560 <676c> <676c> 6580 <676d> <676d> 1540 <676f> <6770> 1550 <6771> <6771> 1543 <6772> <6772> 1561 <6773> <6773> 1545 <6774> <6774> 6588 <6775> <6775> 1556 <6776> <6776> 6583 <6777> <6777> 1546 <6778> <6779> 6598 <677a> <677a> 6591 endcidrange 100 begincidrange <677b> <677b> 6584 <677c> <677c> 1559 <677d> <677d> 6596 <677e> <677e> 1554 <677f> <677f> 1552 <6781> <6781> 6597 <6783> <6783> 6595 <6784> <6784> 6587 <6785> <6785> 6579 <6786> <6786> 6586 <6787> <6787> 1547 <6789> <6789> 1553 <678b> <678b> 1541 <678c> <678c> 6590 <678d> <678d> 6589 <678e> <678e> 6581 <678f> <678f> 18113 <6790> <6790> 1555 <6791> <6791> 6593 <6792> <6792> 6582 <6793> <6793> 1558 <6794> <6794> 6600 <6795> <6795> 1542 <6797> <6797> 1549 <6798> <6798> 6585 <6799> <6799> 6594 <679a> <679a> 1557 <679c> <679c> 1544 <679d> <679d> 1548 <679f> <679f> 6592 <67a0> <67a0> 15738 <67a4> <67a4> 18001 <67ac> <67ac> 16867 <67ae> <67ae> 6964 <67af> <67af> 1879 <67b0> <67b0> 1892 <67b1> <67b1> 16884 <67b2> <67b2> 6959 <67b3> <67b3> 6949 <67b4> <67b4> 1885 <67b5> <67b5> 6947 <67b6> <67b6> 1878 <67b7> <67b7> 6942 <67b8> <67b8> 1888 <67b9> <67b9> 6955 <67ba> <67ba> 6936 <67bb> <67bb> 6938 <67bf> <67bf> 14330 <67c0> <67c0> 6941 <67c1> <67c1> 6933 <67c2> <67c2> 6954 <67c3> <67c3> 6970 <67c4> <67c4> 1883 <67c5> <67c5> 6943 <67c6> <67c6> 6961 <67c8> <67c8> 6935 <67c9> <67ca> 6968 <67cb> <67cb> 6972 <67cc> <67cc> 6963 <67cd> <67cd> 6948 <67ce> <67ce> 6956 <67cf> <67cf> 1889 <67d0> <67d0> 1876 <67d1> <67d1> 1884 <67d2> <67d2> 1896 <67d3> <67d3> 1873 <67d4> <67d4> 1875 <67d6> <67d6> 15192 <67d7> <67d7> 16846 <67d8> <67d8> 6940 <67d9> <67d9> 1893 <67da> <67da> 1886 <67db> <67db> 6966 <67dc> <67dc> 6937 <67dd> <67dd> 1895 <67de> <67de> 1890 <67df> <67df> 6946 <67e2> <67e2> 1894 <67e3> <67e3> 6953 <67e4> <67e4> 6945 <67e5> <67e5> 1887 <67e6> <67e6> 6965 <67e7> <67e7> 6957 <67e9> <67e9> 1881 <67ea> <67ea> 6971 <67eb> <67eb> 6944 <67ec> <67ec> 1877 <67ed> <67ed> 6962 <67ee> <67ee> 6952 <67ef> <67ef> 1882 <67f0> <67f0> 6958 <67f1> <67f1> 1874 <67f2> <67f2> 6934 <67f3> <67f3> 1891 <67f4> <67f4> 2293 <67f5> <67f5> 1880 <67f6> <67f6> 6951 <67f7> <67f7> 6950 <67f8> <67f8> 6939 <67f9> <67f9> 14742 endcidrange 100 begincidrange <67fa> <67fa> 6967 <67fc> <67fc> 6960 <67fe> <67fe> 17749 <67ff> <67ff> 1872 <6800> <6800> 17351 <6801> <6801> 16851 <6802> <6802> 16328 <6803> <6803> 15722 <6804> <6804> 17750 <680d> <680d> 17025 <6810> <6810> 14748 <6812> <6812> 7389 <6813> <6813> 2300 <6814> <6814> 7390 <6816> <6816> 7378 <6817> <6817> 2289 <6818> <6818> 2301 <681a> <681a> 7371 <681b> <681b> 16498 <681c> <681c> 7380 <681d> <681d> 7388 <681e> <681e> 18114 <681f> <681f> 7370 <6820> <6820> 7397 <6821> <6821> 2279 <6822> <6822> 16848 <6825> <6825> 7396 <6826> <6826> 7391 <6828> <6828> 7392 <6829> <6829> 2287 <682a> <682a> 2298 <682b> <682b> 7382 <682d> <682d> 7383 <682e> <682e> 7393 <682f> <682f> 7384 <6831> <6831> 7379 <6832> <6833> 7373 <6834> <6834> 7387 <6835> <6835> 7381 <6836> <6836> 15918 <6837> <6837> 16925 <6838> <6838> 2280 <6839> <6839> 2284 <683a> <683a> 7395 <683b> <683b> 7375 <683c> <683c> 2296 <683d> <683d> 2292 <683e> <683e> 16711 <6840> <6840> 2295 <6841> <6841> 2302 <6842> <6842> 2285 <6843> <6843> 2297 <6844> <6844> 7386 <6845> <6845> 2299 <6846> <6846> 2282 <6847> <6847> 15339 <6848> <6848> 2281 <6849> <6849> 7372 <684a> <684a> 18003 <684b> <684b> 7376 <684c> <684c> 2290 <684d> <684d> 7394 <684e> <684e> 7385 <684f> <684f> 7377 <6850> <6850> 2294 <6851> <6851> 2291 <6853> <6853> 2283 <6854> <6854> 2286 <6855> <6855> 15760 <6856> <6856> 14356 <685d> <685d> 16854 <6865> <6865> 17751 <686b> <686b> 7977 <686d> <686e> 7961 <686f> <686f> 7966 <6871> <6871> 7981 <6872> <6872> 7978 <6874> <6874> 7971 <6875> <6875> 7970 <6876> <6876> 2775 <6877> <6877> 7974 <6878> <6878> 7989 <6879> <6879> 7957 <687b> <687b> 7990 <687c> <687c> 7976 <687d> <687d> 7994 <687e> <687e> 7982 <687f> <687f> 2774 <6880> <6880> 7980 <6881> <6881> 2769 <6882> <6882> 2790 <6883> <6883> 2780 <6884> <6884> 18004 <6885> <6885> 2784 <6886> <6886> 2783 <6887> <6887> 7958 <6888> <6888> 18103 <6889> <6889> 7987 <688a> <688a> 7993 <688b> <688b> 7985 endcidrange 100 begincidrange <688c> <688c> 7992 <688f> <688f> 7973 <6890> <6890> 7959 <6891> <6891> 7991 <6892> <6892> 7975 <6893> <6893> 2772 <6894> <6894> 2785 <6896> <6896> 7984 <6897> <6897> 2778 <6898> <6898> 15018 <689b> <689b> 7983 <689c> <689c> 7960 <689d> <689d> 2786 <689f> <689f> 2788 <68a0> <68a0> 7986 <68a1> <68a1> 2789 <68a2> <68a2> 2771 <68a3> <68a3> 7967 <68a4> <68a4> 7988 <68a6> <68a6> 16612 <68a7> <68a7> 2777 <68a8> <68a8> 2787 <68a9> <68a9> 7969 <68aa> <68aa> 7979 <68ab> <68ab> 7964 <68ac> <68ac> 7968 <68ad> <68ad> 2782 <68ae> <68ae> 7963 <68af> <68af> 2770 <68b0> <68b0> 2779 <68b1> <68b1> 2776 <68b2> <68b2> 7972 <68b3> <68b3> 2288 <68b4> <68b4> 8600 <68b5> <68b5> 2773 <68b6> <68b6> 15006 <68b9> <68b9> 15636 <68bd> <68bd> 17020 <68c3> <68c3> 16860 <68c4> <68c4> 2781 <68c5> <68c5> 15406 <68c6> <68c6> 8603 <68c7> <68c7> 8625 <68c8> <68c8> 8614 <68c9> <68c9> 3223 <68ca> <68ca> 17131 <68cb> <68cb> 3218 <68cc> <68cc> 8597 <68cd> <68cd> 3219 <68ce> <68ce> 8613 <68d0> <68d0> 8606 <68d1> <68d1> 8619 <68d2> <68d2> 3215 <68d3> <68d3> 8579 <68d4> <68d4> 8621 <68d5> <68d5> 3205 <68d6> <68d6> 8587 <68d7> <68d7> 3208 <68d8> <68d8> 3207 <68da> <68da> 3224 <68dc> <68dc> 8581 <68dd> <68de> 8615 <68df> <68df> 3210 <68e0> <68e0> 3206 <68e1> <68e1> 8595 <68e3> <68e3> 3217 <68e4> <68e4> 8590 <68e6> <68e6> 8617 <68e7> <68e7> 3213 <68e8> <68e8> 8609 <68e9> <68e9> 8622 <68ea> <68ea> 8584 <68eb> <68eb> 8589 <68ec> <68ec> 8583 <68ee> <68ee> 3212 <68ef> <68ef> 8602 <68f0> <68f0> 9259 <68f1> <68f1> 8585 <68f2> <68f2> 3216 <68f3> <68f3> 8594 <68f4> <68f4> 8618 <68f5> <68f5> 3211 <68f6> <68f6> 8591 <68f7> <68f7> 8588 <68f8> <68f8> 8605 <68f9> <68f9> 3214 <68fa> <68fa> 3204 <68fb> <68fb> 3226 <68fc> <68fc> 8608 <68fd> <68fd> 8607 <6900> <6900> 16863 <6901> <6901> 16862 <6902> <6902> 17147 <6903> <6903> 17052 <6904> <6904> 8580 <6905> <6905> 3209 <6906> <6906> 8620 <6907> <6907> 8596 <6908> <6908> 8598 <6909> <6909> 18008 endcidrange 100 begincidrange <690a> <690a> 8611 <690b> <690b> 8610 <690c> <690c> 8578 <690d> <690d> 3220 <690e> <690e> 3222 <690f> <690f> 8586 <6910> <6910> 8593 <6911> <6911> 8601 <6912> <6912> 3221 <6913> <6913> 8592 <6914> <6914> 8604 <6915> <6915> 8623 <6917> <6917> 8612 <6918> <6918> 15778 <691a> <691a> 15744 <691b> <691b> 14269 <6925> <6925> 8624 <692a> <692a> 8582 <692c> <692c> 16184 <692f> <692f> 9279 <6930> <6930> 3646 <6932> <6932> 9277 <6933> <6933> 9256 <6934> <6934> 9261 <6935> <6935> 9254 <6936> <6936> 16871 <6937> <6937> 9273 <6938> <6938> 9240 <6939> <6939> 9247 <693b> <693b> 9271 <693c> <693c> 9281 <693d> <693d> 9257 <693e> <693e> 16470 <693f> <693f> 9244 <6940> <6940> 9263 <6941> <6941> 9268 <6942> <6942> 9248 <6943> <6943> 18009 <6944> <6944> 9265 <6945> <6945> 9245 <6946> <6946> 17775 <6948> <6949> 9252 <694a> <694a> 3648 <694b> <694b> 9272 <694c> <694c> 9270 <694e> <694e> 9241 <694f> <694f> 9275 <6951> <6951> 9276 <6952> <6952> 9278 <6953> <6953> 3652 <6954> <6954> 3644 <6955> <6955> 15750 <6956> <6956> 7965 <6957> <6957> 9249 <6958> <6958> 9267 <6959> <6959> 9250 <695a> <695a> 3641 <695b> <695b> 3657 <695c> <695c> 9274 <695d> <695d> 3655 <695e> <695e> 3651 <695f> <695f> 9239 <6960> <6960> 3643 <6961> <6961> 16868 <6962> <6962> 9242 <6963> <6963> 3656 <6964> <6964> 18011 <6965> <6965> 9258 <6966> <6966> 9238 <6967> <6967> 15637 <6968> <6968> 3649 <6969> <6969> 9262 <696a> <696a> 9246 <696b> <696b> 3650 <696c> <696c> 9255 <696d> <696d> 3640 <696e> <696e> 3225 <696f> <696f> 9264 <6970> <6970> 8599 <6971> <6971> 9243 <6972> <6972> 14957 <6973> <6973> 16859 <6974> <6974> 9269 <6975> <6975> 3645 <6976> <6976> 9266 <6977> <6977> 3642 <6978> <6978> 9260 <6979> <6979> 3653 <697a> <697a> 9251 <697b> <697b> 9280 <6980> <6980> 16190 <6982> <6982> 3647 <6983> <6983> 9391 <6985> <6985> 18013 <6986> <6986> 3654 <698a> <698a> 15732 <698d> <698d> 9929 <698e> <698e> 9927 <6990> <6990> 9949 <6991> <6991> 9925 endcidrange 100 begincidrange <6993> <6993> 9943 <6994> <6994> 3639 <6995> <6995> 4080 <6996> <6996> 9921 <6997> <6997> 9948 <6998> <6998> 16872 <6999> <6999> 9926 <699a> <699a> 9940 <699b> <699b> 4085 <699c> <699c> 4078 <699e> <699e> 9946 <699f> <699f> 18012 <69a0> <69a0> 9919 <69a1> <69a1> 9945 <69a2> <69a2> 14128 <69a3> <69a3> 4096 <69a4> <69a4> 9936 <69a5> <69a5> 9952 <69a6> <69a6> 4094 <69a7> <69a7> 9928 <69a8> <69a8> 4079 <69a9> <69a9> 9930 <69aa> <69aa> 9944 <69ab> <69ab> 4088 <69ac> <69ac> 9923 <69ad> <69ad> 4092 <69ae> <69ae> 4082 <69af> <69af> 9932 <69b0> <69b0> 9922 <69b1> <69b1> 9916 <69b2> <69b2> 16374 <69b3> <69b3> 9942 <69b4> <69b4> 4089 <69b5> <69b5> 9951 <69b6> <69b6> 9917 <69b7> <69b7> 4086 <69b9> <69b9> 9938 <69bb> <69bb> 4087 <69bc> <69bc> 9924 <69bd> <69bd> 9935 <69be> <69be> 9931 <69bf> <69bf> 9933 <69c0> <69c0> 16221 <69c1> <69c1> 4081 <69c2> <69c2> 9950 <69c3> <69c3> 4095 <69c4> <69c4> 9934 <69c6> <69c6> 9953 <69c9> <69c9> 9918 <69ca> <69ca> 9939 <69cb> <69cb> 4084 <69cc> <69cc> 4093 <69cd> <69cd> 4091 <69ce> <69ce> 9920 <69cf> <69cf> 9941 <69d0> <69d0> 4090 <69d1> <69d1> 14831 <69d3> <69d3> 4083 <69d4> <69d4> 9937 <69d5> <69d5> 15932 <69d6> <69d6> 18014 <69d9> <69d9> 9947 <69e1> <69e1> 16856 <69e2> <69e2> 10505 <69e4> <69e4> 10501 <69e5> <69e5> 10497 <69e6> <69e6> 10517 <69e7> <69e7> 10514 <69e8> <69e8> 4471 <69e9> <69e9> 15761 <69eb> <69eb> 10521 <69ec> <69ec> 10504 <69ed> <69ed> 4482 <69ee> <69ee> 10511 <69f1> <69f1> 10500 <69f2> <69f2> 10510 <69f3> <69f3> 4479 <69f4> <69f4> 10530 <69f6> <69f6> 10527 <69f7> <69f7> 10513 <69f8> <69f8> 10498 <69f9> <69f9> 16877 <69fa> <69fa> 16839 <69fb> <69fb> 10518 <69fc> <69fc> 10520 <69fd> <69fd> 4475 <69fe> <69fe> 10508 <69ff> <69ff> 10503 <6a00> <6a00> 10494 <6a01> <6a01> 4472 <6a02> <6a02> 4480 <6a03> <6a03> 15913 <6a04> <6a04> 10523 <6a05> <6a05> 4481 <6a06> <6a06> 10495 <6a07> <6a07> 10529 <6a08> <6a08> 10516 <6a09> <6a09> 10522 <6a0a> <6a0a> 4478 <6a0b> <6a0b> 16857 endcidrange 100 begincidrange <6a0c> <6a0c> 15696 <6a0d> <6a0d> 10519 <6a0f> <6a0f> 10526 <6a11> <6a11> 4483 <6a13> <6a13> 4477 <6a14> <6a14> 10512 <6a15> <6a15> 10499 <6a16> <6a16> 10531 <6a17> <6a17> 10496 <6a18> <6a18> 10524 <6a19> <6a19> 4474 <6a1a> <6a1a> 15646 <6a1b> <6a1b> 10506 <6a1c> <6a1c> 15208 <6a1d> <6a1d> 10507 <6a1e> <6a1e> 4473 <6a1f> <6a1f> 4470 <6a20> <6a20> 10502 <6a21> <6a21> 4476 <6a23> <6a23> 4469 <6a25> <6a25> 10525 <6a26> <6a26> 10528 <6a27> <6a27> 10509 <6a28> <6a28> 11124 <6a2b> <6a2b> 15682 <6a2c> <6a2c> 17067 <6a2d> <6a2d> 15135 <6a32> <6a32> 11116 <6a33> <6a33> 15012 <6a34> <6a34> 11112 <6a35> <6a35> 4825 <6a38> <6a38> 4814 <6a39> <6a39> 4819 <6a3a> <6a3a> 4815 <6a3b> <6a3b> 11126 <6a3c> <6a3c> 11137 <6a3d> <6a3d> 4813 <6a3e> <6a3e> 11118 <6a3f> <6a3f> 11127 <6a40> <6a40> 10515 <6a41> <6a41> 11128 <6a44> <6a44> 4820 <6a45> <6a45> 16880 <6a46> <6a46> 11143 <6a47> <6a47> 4824 <6a48> <6a48> 4827 <6a49> <6a49> 11114 <6a4b> <6a4b> 4823 <6a4c> <6a4c> 15019 <6a4d> <6a4e> 11141 <6a4f> <6a4f> 11132 <6a50> <6a50> 11131 <6a51> <6a51> 11123 <6a52> <6a52> 15013 <6a53> <6a53> 14252 <6a54> <6a54> 11133 <6a55> <6a55> 11140 <6a56> <6a56> 11139 <6a57> <6a57> 14298 <6a58> <6a58> 4818 <6a59> <6a59> 4816 <6a5a> <6a5a> 11125 <6a5b> <6a5b> 11122 <6a5d> <6a5d> 11119 <6a5e> <6a5e> 11138 <6a5f> <6a5f> 4826 <6a60> <6a60> 11136 <6a61> <6a61> 4822 <6a62> <6a62> 4821 <6a64> <6a64> 11130 <6a65> <6a65> 18016 <6a66> <6a66> 11113 <6a67> <6a67> 11115 <6a68> <6a68> 11117 <6a69> <6a69> 11135 <6a6a> <6a6a> 11129 <6a6b> <6a6b> 4817 <6a6d> <6a6d> 11120 <6a6f> <6a6f> 11134 <6a71> <6a71> 18018 <6a74> <6a74> 18017 <6a76> <6a76> 11121 <6a7a> <6a7a> 15021 <6a7e> <6a7e> 5100 <6a7f> <6a7f> 11652 <6a80> <6a80> 5093 <6a81> <6a81> 11637 <6a82> <6a82> 18019 <6a83> <6a83> 11648 <6a84> <6a84> 5095 <6a85> <6a85> 11655 <6a87> <6a87> 11644 <6a89> <6a89> 11639 <6a8a> <6a8a> 16694 <6a8c> <6a8c> 11656 <6a8d> <6a8d> 11635 <6a8e> <6a8e> 11646 <6a8f> <6a8f> 15387 <6a90> <6a90> 5102 <6a91> <6a91> 11651 endcidrange 100 begincidrange <6a92> <6a92> 11657 <6a93> <6a93> 11645 <6a94> <6a94> 5094 <6a95> <6a95> 11647 <6a96> <6a96> 11636 <6a97> <6a97> 5101 <6a99> <6a99> 18021 <6a9a> <6a9a> 11654 <6a9b> <6a9b> 11641 <6a9c> <6a9c> 5097 <6a9d> <6a9d> 16882 <6a9e> <6a9e> 11643 <6a9f> <6a9f> 11640 <6aa0> <6aa0> 5103 <6aa1> <6aa1> 11642 <6aa2> <6aa2> 5096 <6aa3> <6aa3> 5099 <6aa4> <6aa4> 11650 <6aa5> <6aa5> 11638 <6aa6> <6aa6> 11653 <6aa7> <6aa7> 14307 <6aa8> <6aa8> 11649 <6aab> <6aab> 18023 <6aac> <6aac> 5341 <6aad> <6aad> 12094 <6aae> <6aaf> 5346 <6ab1> <6ab1> 15955 <6ab2> <6ab2> 15179 <6ab3> <6ab3> 5340 <6ab4> <6ab4> 12093 <6ab5> <6ab5> 18024 <6ab6> <6ab7> 12090 <6ab8> <6ab8> 5344 <6ab9> <6ab9> 12085 <6aba> <6aba> 12089 <6abb> <6abb> 5343 <6abd> <6abd> 12086 <6abe> <6abe> 15009 <6ac2> <6ac2> 5345 <6ac3> <6ac3> 5342 <6ac5> <6ac5> 12084 <6ac6> <6ac6> 12088 <6ac7> <6ac7> 12092 <6ac8> <6ac8> 16885 <6ac9> <6ac9> 15014 <6aca> <6aca> 16204 <6acb> <6acb> 12447 <6acc> <6acc> 12444 <6acd> <6acd> 12453 <6acf> <6acf> 12452 <6ad0> <6ad0> 12450 <6ad1> <6ad1> 12445 <6ad3> <6ad3> 5513 <6ad4> <6ad4> 18025 <6ad8> <6ad8> 15530 <6ad9> <6ad9> 12446 <6ada> <6ada> 5512 <6adb> <6adb> 5098 <6adc> <6adc> 12449 <6add> <6add> 5511 <6ade> <6ade> 12454 <6adf> <6adf> 12448 <6ae0> <6ae0> 12443 <6ae1> <6ae1> 12087 <6ae5> <6ae5> 5510 <6ae7> <6ae7> 12442 <6ae8> <6ae8> 12767 <6aea> <6aea> 12766 <6aeb> <6aeb> 12451 <6aec> <6aec> 5659 <6aee> <6aef> 12770 <6af0> <6af0> 12765 <6af1> <6af1> 12769 <6af3> <6af3> 12764 <6af6> <6af6> 18026 <6af8> <6af8> 13014 <6af9> <6af9> 12768 <6afa> <6afa> 5752 <6afb> <6afb> 5750 <6afc> <6afc> 13012 <6b00> <6b00> 13015 <6b02> <6b02> 13011 <6b03> <6b03> 13013 <6b04> <6b04> 5751 <6b05> <6b05> 15015 <6b08> <6b09> 13190 <6b0a> <6b0a> 5830 <6b0b> <6b0b> 13189 <6b0f> <6b0f> 13344 <6b10> <6b10> 5885 <6b11> <6b12> 13342 <6b13> <6b13> 13447 <6b16> <6b16> 5955 <6b17> <6b17> 13518 <6b18> <6b19> 13516 <6b1a> <6b1a> 13519 <6b1d> <6b1d> 16888 <6b1e> <6b1e> 13620 <6b20> <6b20> 734 <6b21> <6b21> 995 endcidrange 100 begincidrange <6b23> <6b23> 1562 <6b25> <6b25> 6601 <6b28> <6b28> 6973 <6b2c> <6b2c> 7398 <6b2d> <6b2d> 7400 <6b2f> <6b2f> 7399 <6b31> <6b31> 7401 <6b32> <6b32> 2791 <6b33> <6b33> 7996 <6b34> <6b34> 7402 <6b35> <6b35> 16891 <6b36> <6b36> 7995 <6b37> <6b38> 7997 <6b39> <6b39> 8626 <6b3a> <6b3a> 3228 <6b3b> <6b3b> 8627 <6b3c> <6b3c> 8629 <6b3d> <6b3d> 3229 <6b3e> <6b3e> 3227 <6b3f> <6b3f> 8628 <6b41> <6b41> 9287 <6b42> <6b42> 9285 <6b43> <6b43> 9284 <6b45> <6b45> 9283 <6b46> <6b46> 9282 <6b47> <6b47> 3658 <6b48> <6b48> 9286 <6b49> <6b49> 4097 <6b4a> <6b4a> 9954 <6b4b> <6b4b> 9956 <6b4c> <6b4c> 4098 <6b4d> <6b4d> 9955 <6b4e> <6b4e> 4485 <6b50> <6b50> 4484 <6b51> <6b51> 10532 <6b52> <6b52> 16238 <6b54> <6b54> 11145 <6b55> <6b55> 11144 <6b56> <6b56> 11146 <6b57> <6b57> 15022 <6b59> <6b59> 4828 <6b5b> <6b5b> 11658 <6b5c> <6b5c> 5104 <6b5e> <6b5e> 12095 <6b5f> <6b5f> 5348 <6b60> <6b60> 12455 <6b61> <6b61> 5831 <6b62> <6b62> 735 <6b63> <6b63> 845 <6b64> <6b64> 996 <6b65> <6b65> 1225 <6b66> <6b67> 1563 <6b6a> <6b6a> 1897 <6b6d> <6b6d> 7403 <6b6f> <6b6f> 17685 <6b72> <6b72> 3659 <6b74> <6b74> 16892 <6b76> <6b76> 10658 <6b77> <6b77> 4829 <6b78> <6b78> 5349 <6b79> <6b79> 736 <6b7a> <6b7a> 17646 <6b7b> <6b7b> 997 <6b7e> <6b7e> 6603 <6b7f> <6b7f> 1565 <6b80> <6b80> 6602 <6b81> <6b81> 18027 <6b82> <6b82> 6974 <6b83> <6b83> 1898 <6b84> <6b84> 6975 <6b86> <6b86> 1899 <6b88> <6b88> 7405 <6b89> <6b89> 2304 <6b8a> <6b8a> 2303 <6b8c> <6b8c> 8003 <6b8d> <6b8e> 8001 <6b8f> <6b8f> 8000 <6b91> <6b91> 7999 <6b94> <6b94> 8630 <6b95> <6b95> 8633 <6b96> <6b96> 3231 <6b97> <6b97> 8631 <6b98> <6b98> 3230 <6b99> <6b99> 8632 <6b9b> <6b9b> 9288 <6b9e> <6ba0> 9957 <6ba2> <6ba2> 10535 <6ba3> <6ba3> 10534 <6ba4> <6ba4> 4486 <6ba5> <6ba5> 10533 <6ba6> <6ba6> 10536 <6ba7> <6ba7> 11147 <6baa> <6bab> 11148 <6bad> <6bad> 11659 <6bae> <6bae> 5105 <6baf> <6baf> 5350 <6bb0> <6bb0> 12456 <6bb2> <6bb2> 5753 <6bb3> <6bb3> 6026 <6bb5> <6bb5> 1900 endcidrange 100 begincidrange <6bb6> <6bb6> 6976 <6bb7> <6bb7> 2305 <6bba> <6bba> 2792 <6bbc> <6bbc> 3232 <6bbd> <6bbd> 8634 <6bbf> <6bbf> 3661 <6bc0> <6bc0> 3660 <6bc1> <6bc1> 18028 <6bc3> <6bc4> 9960 <6bc5> <6bc6> 4487 <6bc7> <6bc7> 11151 <6bc8> <6bc8> 11150 <6bc9> <6bc9> 12096 <6bca> <6bca> 13345 <6bcb> <6bcb> 737 <6bcc> <6bcc> 6027 <6bcd> <6bcd> 846 <6bcf> <6bcf> 1226 <6bd0> <6bd0> 6317 <6bd2> <6bd2> 1901 <6bd3> <6bd3> 3662 <6bd4> <6bd4> 738 <6bd6> <6bd6> 6977 <6bd7> <6bd7> 1902 <6bd8> <6bd8> 6978 <6bda> <6bda> 5106 <6bdb> <6bdb> 739 <6bdc> <6bdc> 16903 <6bde> <6bde> 6604 <6be0> <6be0> 6979 <6be1> <6be1> 16901 <6be2> <6be2> 7410 <6be3> <6be3> 7409 <6be4> <6be4> 7407 <6be6> <6be6> 7406 <6be7> <6be7> 7411 <6be8> <6be8> 7408 <6bea> <6bea> 18029 <6beb> <6bec> 2793 <6bef> <6bef> 3233 <6bf0> <6bf0> 8635 <6bf2> <6bf3> 8636 <6bf7> <6bf8> 9292 <6bf9> <6bf9> 9291 <6bfa> <6bfa> 16249 <6bfb> <6bfc> 9289 <6bfd> <6bfd> 3663 <6bfe> <6bfe> 9962 <6bff> <6bff> 10539 <6c00> <6c00> 10538 <6c01> <6c01> 10537 <6c02> <6c02> 10540 <6c03> <6c03> 11153 <6c04> <6c04> 11152 <6c05> <6c05> 4830 <6c06> <6c06> 11154 <6c08> <6c08> 5107 <6c09> <6c09> 11660 <6c0b> <6c0b> 12097 <6c0c> <6c0c> 12457 <6c0d> <6c0d> 13192 <6c0f> <6c0f> 740 <6c10> <6c10> 848 <6c11> <6c11> 847 <6c13> <6c13> 1566 <6c14> <6c14> 6028 <6c15> <6c15> 6058 <6c16> <6c16> 998 <6c18> <6c18> 6145 <6c19> <6c1a> 6318 <6c1b> <6c1b> 1567 <6c1c> <6c1c> 14507 <6c1d> <6c1d> 6605 <6c1f> <6c1f> 1903 <6c20> <6c21> 6980 <6c23> <6c23> 2306 <6c24> <6c24> 2310 <6c25> <6c25> 7412 <6c26> <6c26> 2309 <6c27> <6c28> 2307 <6c2a> <6c2a> 8004 <6c2b> <6c2b> 2795 <6c2c> <6c2c> 3236 <6c2e> <6c2f> 3234 <6c30> <6c30> 8638 <6c31> <6c31> 16227 <6c33> <6c33> 4099 <6c34> <6c34> 741 <6c35> <6c35> 17647 <6c36> <6c36> 6059 <6c37> <6c37> 16904 <6c38> <6c38> 849 <6c39> <6c39> 15877 <6c3a> <6c3a> 17648 <6c3b> <6c3b> 6062 <6c3d> <6c3d> 17281 <6c3e> <6c3e> 852 <6c3f> <6c3f> 6061 <6c40> <6c40> 851 <6c41> <6c41> 850 endcidrange 100 begincidrange <6c42> <6c42> 1227 <6c43> <6c43> 6060 <6c46> <6c46> 6146 <6c49> <6c49> 16525 <6c4a> <6c4a> 6150 <6c4b> <6c4c> 6152 <6c4d> <6c4e> 1008 <6c4f> <6c4f> 6149 <6c50> <6c50> 1004 <6c52> <6c52> 6147 <6c54> <6c54> 6151 <6c55> <6c55> 1005 <6c57> <6c57> 1000 <6c58> <6c58> 15290 <6c59> <6c59> 1001 <6c5a> <6c5a> 16908 <6c5b> <6c5b> 1007 <6c5c> <6c5c> 6148 <6c5d> <6c5d> 999 <6c5e> <6c5e> 1228 <6c5f> <6c60> 1002 <6c61> <6c61> 1006 <6c65> <6c65> 6336 <6c66> <6c66> 6334 <6c67> <6c67> 6321 <6c68> <6c68> 1240 <6c69> <6c69> 6328 <6c6a> <6c6a> 1235 <6c6b> <6c6b> 6322 <6c6d> <6c6d> 6330 <6c6e> <6c6e> 16586 <6c6f> <6c6f> 6327 <6c70> <6c70> 1238 <6c71> <6c71> 6326 <6c72> <6c72> 1245 <6c73> <6c73> 6335 <6c74> <6c74> 1247 <6c75> <6c75> 18030 <6c76> <6c76> 1249 <6c78> <6c78> 6320 <6c79> <6c79> 16910 <6c7a> <6c7a> 1236 <6c7b> <6c7b> 6337 <6c7d> <6c7d> 1243 <6c7e> <6c7e> 1246 <6c7f> <6c7f> 14246 <6c80> <6c80> 6628 <6c81> <6c81> 1230 <6c82> <6c82> 1253 <6c83> <6c83> 1244 <6c84> <6c84> 6323 <6c85> <6c85> 1233 <6c86> <6c86> 1248 <6c87> <6c87> 6331 <6c88> <6c89> 1231 <6c8a> <6c8a> 6626 <6c8b> <6c8b> 6324 <6c8c> <6c8c> 1239 <6c8d> <6c8d> 1250 <6c8e> <6c8e> 6338 <6c8f> <6c8f> 6325 <6c90> <6c90> 1237 <6c92> <6c92> 1242 <6c93> <6c93> 6606 <6c94> <6c94> 1251 <6c95> <6c95> 6332 <6c96> <6c96> 1241 <6c98> <6c98> 1252 <6c99> <6c99> 1229 <6c9a> <6c9a> 6329 <6c9b> <6c9b> 1234 <6c9c> <6c9c> 6333 <6c9d> <6c9d> 6627 <6c9f> <6c9f> 14473 <6ca2> <6ca2> 15715 <6caa> <6caa> 18031 <6cab> <6cab> 1579 <6cac> <6cac> 1595 <6cad> <6cad> 6613 <6cae> <6cae> 1586 <6caf> <6caf> 15606 <6cb0> <6cb0> 6634 <6cb1> <6cb1> 1571 <6cb2> <6cb2> 16076 <6cb3> <6cb3> 1574 <6cb4> <6cb4> 6625 <6cb6> <6cb6> 6611 <6cb7> <6cb7> 6615 <6cb8> <6cb8> 1582 <6cb9> <6cb9> 1584 <6cba> <6cba> 6618 <6cbb> <6cbb> 1591 <6cbc> <6cbc> 1577 <6cbd> <6cbe> 1575 <6cbf> <6cbf> 1590 <6cc0> <6cc0> 6630 <6cc1> <6cc1> 1585 <6cc2> <6cc2> 6617 <6cc3> <6cc3> 6619 <6cc4> <6cc4> 1583 endcidrange 100 begincidrange <6cc5> <6cc5> 1588 <6cc6> <6cc6> 6620 <6cc7> <6cc7> 6633 <6cc9> <6cc9> 1904 <6cca> <6cca> 1594 <6ccb> <6ccb> 16496 <6ccc> <6ccc> 1572 <6ccd> <6ccd> 6632 <6cce> <6cce> 16273 <6ccf> <6ccf> 6636 <6cd0> <6cd0> 6616 <6cd1> <6cd1> 6638 <6cd2> <6cd2> 6623 <6cd3> <6cd3> 1581 <6cd4> <6cd4> 6612 <6cd5> <6cd5> 1580 <6cd6> <6cd6> 1598 <6cd7> <6cd7> 1587 <6cd9> <6cd9> 6610 <6cda> <6cda> 6990 <6cdb> <6cdb> 1593 <6cdc> <6cdc> 1597 <6cdd> <6cdd> 6624 <6cde> <6cde> 6629 <6cdf> <6cdf> 15703 <6ce0> <6ce0> 1599 <6ce1> <6ce1> 1592 <6ce2> <6ce2> 1578 <6ce3> <6ce3> 1568 <6ce5> <6ce5> 1573 <6ce7> <6ce7> 6614 <6ce8> <6ce8> 1569 <6ce9> <6ce9> 6637 <6cea> <6cea> 16269 <6ceb> <6ceb> 6608 <6cec> <6cec> 6607 <6ced> <6ced> 6621 <6cee> <6cee> 6609 <6cef> <6cef> 1596 <6cf0> <6cf0> 2311 <6cf1> <6cf1> 1589 <6cf2> <6cf2> 6622 <6cf3> <6cf3> 1570 <6cf5> <6cf5> 1919 <6cf9> <6cf9> 6635 <6d00> <6d00> 6997 <6d01> <6d01> 7000 <6d02> <6d02> 18033 <6d03> <6d03> 7003 <6d04> <6d04> 6992 <6d05> <6d05> 14873 <6d06> <6d06> 18034 <6d07> <6d07> 7006 <6d08> <6d08> 7009 <6d09> <6d09> 7011 <6d0a> <6d0a> 6989 <6d0b> <6d0b> 1905 <6d0c> <6d0c> 1910 <6d0d> <6d0d> 7417 <6d0e> <6d0e> 1926 <6d0f> <6d0f> 7004 <6d10> <6d10> 7012 <6d11> <6d11> 6996 <6d12> <6d12> 6988 <6d16> <6d16> 7444 <6d17> <6d17> 1913 <6d18> <6d18> 7001 <6d19> <6d19> 6993 <6d1a> <6d1a> 6995 <6d1b> <6d1b> 1918 <6d1d> <6d1d> 6998 <6d1e> <6d1e> 1912 <6d1f> <6d1f> 6985 <6d20> <6d20> 7007 <6d22> <6d22> 7010 <6d24> <6d24> 15043 <6d25> <6d25> 1909 <6d26> <6d26> 18035 <6d27> <6d27> 1921 <6d28> <6d28> 6982 <6d29> <6d29> 1923 <6d2a> <6d2a> 1907 <6d2b> <6d2b> 1927 <6d2c> <6d2c> 7008 <6d2d> <6d2d> 6984 <6d2e> <6d2e> 1924 <6d2f> <6d2f> 7438 <6d30> <6d30> 6631 <6d31> <6d31> 1911 <6d32> <6d32> 1906 <6d33> <6d33> 6991 <6d34> <6d34> 6983 <6d35> <6d35> 1925 <6d36> <6d36> 1917 <6d37> <6d37> 7002 <6d38> <6d38> 1922 <6d39> <6d39> 1920 <6d3a> <6d3a> 6994 <6d3b> <6d3b> 1914 <6d3c> <6d3c> 6986 endcidrange 100 begincidrange <6d3d> <6d3e> 1915 <6d3f> <6d3f> 6987 <6d40> <6d40> 7005 <6d41> <6d41> 1908 <6d42> <6d42> 6999 <6d4e> <6d4e> 17752 <6d57> <6d57> 15603 <6d58> <6d58> 7420 <6d59> <6d59> 2319 <6d5a> <6d5a> 2324 <6d5b> <6d5b> 16540 <6d5c> <6d5c> 16930 <6d5e> <6d5e> 7429 <6d5f> <6d5f> 7435 <6d60> <6d60> 7431 <6d61> <6d61> 7418 <6d62> <6d62> 7421 <6d63> <6d64> 7414 <6d65> <6d65> 2331 <6d66> <6d66> 2316 <6d67> <6d67> 7430 <6d68> <6d68> 7439 <6d69> <6d69> 2326 <6d6a> <6d6a> 2312 <6d6c> <6d6c> 2321 <6d6d> <6d6d> 7422 <6d6e> <6d6e> 2323 <6d6f> <6d6f> 7423 <6d70> <6d70> 7433 <6d71> <6d71> 16629 <6d72> <6d72> 14807 <6d74> <6d74> 2325 <6d75> <6d75> 7448 <6d76> <6d76> 7416 <6d77> <6d77> 2318 <6d78> <6d78> 2317 <6d79> <6d79> 2329 <6d7a> <6d7a> 7413 <6d7b> <6d7b> 7446 <6d7c> <6d7c> 7434 <6d7d> <6d7d> 7447 <6d7e> <6d7e> 7441 <6d7f> <6d7f> 7427 <6d80> <6d80> 7442 <6d81> <6d81> 18036 <6d82> <6d82> 7436 <6d83> <6d83> 7445 <6d84> <6d84> 7443 <6d85> <6d85> 2330 <6d86> <6d86> 7428 <6d87> <6d87> 2315 <6d88> <6d88> 2314 <6d89> <6d89> 2322 <6d8a> <6d8a> 2328 <6d8b> <6d8b> 7440 <6d8c> <6d8c> 2327 <6d8d> <6d8d> 7425 <6d8e> <6d8e> 2796 <6d8f> <6d8f> 15848 <6d90> <6d90> 7449 <6d91> <6d91> 7424 <6d92> <6d92> 7419 <6d93> <6d93> 2320 <6d94> <6d94> 2332 <6d95> <6d95> 2313 <6d96> <6d96> 16929 <6d97> <6d97> 7432 <6d98> <6d98> 7437 <6da4> <6da4> 18038 <6da5> <6da5> 15033 <6daa> <6daa> 2830 <6dab> <6dab> 8006 <6dac> <6dac> 8010 <6dae> <6dae> 2811 <6daf> <6daf> 2809 <6db1> <6db1> 18039 <6db2> <6db2> 2800 <6db3> <6db3> 8008 <6db4> <6db4> 8007 <6db5> <6db5> 2820 <6db7> <6db7> 8013 <6db8> <6db8> 2814 <6db9> <6db9> 16379 <6dba> <6dba> 8031 <6dbb> <6dbb> 8043 <6dbc> <6dbc> 2797 <6dbd> <6dbd> 8028 <6dbe> <6dbe> 8021 <6dbf> <6dbf> 2832 <6dc0> <6dc0> 8005 <6dc2> <6dc2> 8033 <6dc4> <6dc4> 2829 <6dc5> <6dc5> 2817 <6dc6> <6dc6> 2828 <6dc7> <6dc7> 2807 <6dc8> <6dc8> 8017 <6dc9> <6dc9> 8035 <6dca> <6dca> 8027 <6dcb> <6dcb> 2808 <6dcc> <6dcc> 2802 endcidrange 100 begincidrange <6dcd> <6dcd> 8041 <6dcf> <6dcf> 8034 <6dd0> <6dd0> 8036 <6dd1> <6dd1> 2810 <6dd2> <6dd2> 2818 <6dd3> <6dd3> 8038 <6dd4> <6dd4> 8015 <6dd5> <6dd5> 8032 <6dd6> <6dd6> 8020 <6dd7> <6dd7> 8040 <6dd8> <6dd8> 2823 <6dd9> <6dd9> 2799 <6dda> <6dda> 2821 <6ddb> <6ddb> 8025 <6ddc> <6ddd> 8023 <6dde> <6dde> 2812 <6ddf> <6ddf> 8019 <6de0> <6de0> 8018 <6de1> <6de1> 2801 <6de2> <6de2> 8012 <6de3> <6de3> 8042 <6de4> <6de4> 2803 <6de5> <6de5> 8022 <6de6> <6de6> 2833 <6de8> <6de8> 2827 <6de9> <6de9> 8011 <6dea> <6dea> 2824 <6deb> <6deb> 2822 <6dec> <6dec> 2831 <6ded> <6ded> 8029 <6dee> <6dee> 2826 <6def> <6def> 7426 <6df0> <6df0> 8030 <6df1> <6df1> 2825 <6df2> <6df2> 8037 <6df3> <6df3> 2798 <6df4> <6df4> 8026 <6df5> <6df5> 2816 <6df6> <6df6> 8014 <6df7> <6df7> 2815 <6df9> <6df9> 2813 <6dfa> <6dfa> 2805 <6dfb> <6dfb> 2804 <6dfc> <6dfc> 8639 <6dfd> <6dfd> 8039 <6e00> <6e00> 8016 <6e02> <6e02> 15610 <6e03> <6e03> 8660 <6e04> <6e04> 15038 <6e05> <6e05> 2806 <6e0a> <6e0a> 15041 <6e0f> <6e0f> 15600 <6e15> <6e15> 18040 <6e18> <6e18> 18041 <6e19> <6e19> 3265 <6e1a> <6e1a> 2819 <6e1b> <6e1b> 3247 <6e1c> <6e1c> 8654 <6e1d> <6e1d> 3261 <6e1f> <6e1f> 8642 <6e20> <6e20> 3244 <6e21> <6e21> 3240 <6e22> <6e22> 8672 <6e23> <6e23> 3246 <6e24> <6e24> 3250 <6e25> <6e25> 3245 <6e26> <6e26> 3254 <6e27> <6e27> 8676 <6e28> <6e28> 8667 <6e29> <6e29> 18042 <6e2a> <6e2a> 17154 <6e2b> <6e2b> 8649 <6e2c> <6e2c> 3259 <6e2d> <6e2d> 3253 <6e2e> <6e2e> 8661 <6e2f> <6e2f> 3237 <6e30> <6e30> 8673 <6e31> <6e31> 8666 <6e32> <6e32> 3241 <6e33> <6e33> 8655 <6e34> <6e34> 3256 <6e35> <6e36> 8684 <6e38> <6e38> 3238 <6e39> <6e39> 8671 <6e3a> <6e3a> 3258 <6e3b> <6e3b> 8659 <6e3c> <6e3d> 8645 <6e3e> <6e3e> 3262 <6e3f> <6e3f> 8650 <6e40> <6e40> 8657 <6e41> <6e41> 8651 <6e43> <6e43> 3260 <6e44> <6e44> 3268 <6e45> <6e45> 8647 <6e46> <6e47> 8640 <6e49> <6e49> 8643 <6e4a> <6e4a> 3243 <6e4b> <6e4b> 8656 <6e4d> <6e4d> 3257 <6e4e> <6e4e> 3266 endcidrange 100 begincidrange <6e4f> <6e4f> 16948 <6e50> <6e50> 16849 <6e51> <6e51> 8658 <6e52> <6e52> 8682 <6e53> <6e53> 8674 <6e54> <6e54> 3239 <6e55> <6e55> 8680 <6e56> <6e56> 3251 <6e58> <6e58> 3249 <6e59> <6e59> 16614 <6e5a> <6e5a> 8686 <6e5b> <6e5b> 3248 <6e5c> <6e5c> 8664 <6e5d> <6e5d> 8652 <6e5e> <6e5e> 8662 <6e5f> <6e5f> 3271 <6e60> <6e60> 8668 <6e61> <6e61> 8665 <6e62> <6e62> 8648 <6e63> <6e63> 3267 <6e64> <6e64> 8678 <6e65> <6e65> 8675 <6e66> <6e66> 8683 <6e67> <6e67> 3242 <6e68> <6e68> 8663 <6e69> <6e69> 3270 <6e6b> <6e6b> 8670 <6e6e> <6e6e> 3252 <6e6f> <6e6f> 3255 <6e71> <6e71> 8669 <6e72> <6e72> 3269 <6e73> <6e73> 8653 <6e74> <6e74> 8009 <6e76> <6e76> 14803 <6e77> <6e77> 8679 <6e78> <6e78> 8677 <6e79> <6e79> 8681 <6e7c> <6e7c> 16931 <6e86> <6e86> 18043 <6e88> <6e88> 8644 <6e89> <6e89> 3264 <6e8b> <6e8b> 15295 <6e8d> <6e8d> 9324 <6e8e> <6e8e> 9323 <6e8f> <6e8f> 9297 <6e90> <6e90> 3669 <6e92> <6e92> 9322 <6e93> <6e94> 9300 <6e96> <6e96> 3679 <6e97> <6e97> 9331 <6e98> <6e98> 3674 <6e99> <6e99> 9321 <6e9a> <6e9a> 17793 <6e9b> <6e9b> 9294 <6e9c> <6e9c> 3680 <6e9d> <6e9d> 3670 <6e9e> <6e9e> 9309 <6e9f> <6e9f> 9299 <6ea0> <6ea0> 9302 <6ea1> <6ea1> 9326 <6ea2> <6ea2> 3664 <6ea3> <6ea3> 9333 <6ea4> <6ea4> 9325 <6ea5> <6ea5> 3673 <6ea6> <6ea6> 9314 <6ea7> <6ea7> 3684 <6eaa> <6eaa> 3683 <6eab> <6eab> 3677 <6eae> <6eae> 9332 <6eaf> <6eaf> 3665 <6eb0> <6eb0> 9312 <6eb1> <6eb1> 9303 <6eb2> <6eb2> 9316 <6eb3> <6eb3> 9328 <6eb4> <6eb4> 3685 <6eb5> <6eb5> 16894 <6eb6> <6eb6> 3667 <6eb7> <6eb7> 9311 <6eb8> <6eb8> 15884 <6eb9> <6eb9> 9304 <6eba> <6eba> 3676 <6ebb> <6ebb> 18045 <6ebc> <6ebc> 3675 <6ebd> <6ebd> 9307 <6ebe> <6ebe> 9317 <6ebf> <6ebf> 9327 <6ec0> <6ec0> 9298 <6ec1> <6ec1> 9308 <6ec2> <6ec2> 3668 <6ec3> <6ec3> 9318 <6ec4> <6ec4> 3681 <6ec5> <6ec5> 3672 <6ec6> <6ec6> 9305 <6ec7> <6ec7> 3671 <6ec8> <6ec8> 9296 <6ec9> <6ec9> 9310 <6eca> <6eca> 9330 <6ecb> <6ecb> 3263 <6ecc> <6ecc> 4127 <6ecd> <6ecd> 9313 endcidrange 100 begincidrange <6ece> <6ece> 9963 <6ecf> <6ecf> 9315 <6ed0> <6ed0> 9329 <6ed1> <6ed1> 3678 <6ed2> <6ed2> 9306 <6ed3> <6ed3> 3666 <6ed4> <6ed4> 3682 <6ed5> <6ed5> 4506 <6ed6> <6ed6> 9295 <6ed8> <6ed8> 9320 <6ed9> <6ed9> 16489 <6eda> <6eda> 18047 <6edb> <6edb> 16431 <6edc> <6edc> 9319 <6edd> <6edd> 17720 <6ee2> <6ee2> 18046 <6ee8> <6ee9> 18049 <6eeb> <6eeb> 9991 <6eec> <6eec> 4124 <6eed> <6eed> 9980 <6eee> <6eee> 9985 <6eef> <6eef> 4113 <6ef1> <6ef1> 9965 <6ef2> <6ef2> 4126 <6ef4> <6ef4> 4104 <6ef5> <6ef5> 9964 <6ef6> <6ef6> 9997 <6ef7> <6ef7> 4128 <6ef8> <6ef8> 9968 <6ef9> <6ef9> 9984 <6efa> <6efa> 16955 <6efb> <6efb> 9970 <6efc> <6efc> 10000 <6efd> <6efd> 9996 <6efe> <6efe> 4102 <6eff> <6eff> 4112 <6f00> <6f00> 10566 <6f01> <6f01> 4125 <6f02> <6f02> 4110 <6f03> <6f03> 9966 <6f04> <6f04> 16932 <6f05> <6f05> 9995 <6f06> <6f06> 4114 <6f07> <6f07> 9992 <6f08> <6f08> 10005 <6f09> <6f09> 9972 <6f0a> <6f0a> 9981 <6f0b> <6f0b> 15034 <6f0c> <6f0c> 15611 <6f0d> <6f0d> 10003 <6f0e> <6f0e> 9993 <6f0f> <6f0f> 4109 <6f12> <6f12> 9979 <6f13> <6f13> 4103 <6f14> <6f14> 4101 <6f15> <6f15> 4119 <6f16> <6f16> 16800 <6f17> <6f17> 18126 <6f18> <6f18> 9977 <6f19> <6f1a> 9974 <6f1c> <6f1c> 9999 <6f1e> <6f1e> 10004 <6f1f> <6f1f> 10002 <6f20> <6f20> 4107 <6f21> <6f21> 10006 <6f22> <6f22> 4111 <6f23> <6f23> 4118 <6f24> <6f24> 18051 <6f25> <6f25> 9967 <6f26> <6f26> 10542 <6f27> <6f27> 9976 <6f29> <6f29> 4105 <6f2a> <6f2a> 4123 <6f2b> <6f2b> 4120 <6f2c> <6f2c> 4108 <6f2d> <6f2d> 9986 <6f2e> <6f2e> 9971 <6f2f> <6f2f> 4121 <6f30> <6f30> 9988 <6f31> <6f31> 4115 <6f32> <6f32> 4117 <6f33> <6f33> 4100 <6f34> <6f34> 18052 <6f35> <6f35> 9990 <6f36> <6f36> 9982 <6f37> <6f37> 9969 <6f38> <6f38> 4116 <6f39> <6f39> 9998 <6f3a> <6f3a> 10001 <6f3b> <6f3b> 9978 <6f3c> <6f3c> 9989 <6f3d> <6f3d> 17026 <6f3e> <6f3e> 4106 <6f3f> <6f3f> 4489 <6f40> <6f40> 9987 <6f41> <6f41> 10541 <6f43> <6f43> 9994 <6f44> <6f44> 16960 <6f4e> <6f4e> 9973 <6f4f> <6f4f> 10551 endcidrange 100 begincidrange <6f50> <6f50> 10561 <6f51> <6f51> 4492 <6f52> <6f52> 10560 <6f53> <6f53> 10572 <6f54> <6f54> 4494 <6f55> <6f55> 10558 <6f56> <6f56> 15954 <6f57> <6f57> 10562 <6f58> <6f58> 4505 <6f5a> <6f5a> 10553 <6f5b> <6f5b> 4497 <6f5c> <6f5c> 16961 <6f5d> <6f5d> 10565 <6f5e> <6f5e> 11162 <6f5f> <6f5f> 4509 <6f60> <6f60> 4508 <6f61> <6f61> 10567 <6f62> <6f62> 10550 <6f63> <6f63> 10577 <6f64> <6f64> 4503 <6f66> <6f66> 4493 <6f67> <6f67> 10570 <6f69> <6f69> 10574 <6f6a> <6f6a> 10579 <6f6b> <6f6b> 10568 <6f6c> <6f6c> 10556 <6f6d> <6f6d> 4496 <6f6e> <6f6e> 4499 <6f6f> <6f6f> 4507 <6f70> <6f70> 4502 <6f72> <6f72> 10559 <6f73> <6f73> 9983 <6f74> <6f74> 16963 <6f76> <6f76> 10555 <6f77> <6f77> 10578 <6f78> <6f78> 4498 <6f79> <6f79> 15294 <6f7a> <6f7a> 4501 <6f7b> <6f7b> 10580 <6f7c> <6f7c> 4490 <6f7d> <6f7d> 10569 <6f7e> <6f7e> 10543 <6f7f> <6f7f> 10575 <6f80> <6f80> 5116 <6f81> <6f81> 18055 <6f82> <6f82> 10557 <6f84> <6f84> 4491 <6f85> <6f85> 10552 <6f86> <6f86> 4495 <6f87> <6f87> 10544 <6f88> <6f88> 4122 <6f89> <6f89> 10548 <6f8a> <6f8a> 16789 <6f8b> <6f8b> 10573 <6f8c> <6f8c> 10549 <6f8d> <6f8d> 10547 <6f8e> <6f8e> 4500 <6f90> <6f90> 10571 <6f92> <6f92> 10546 <6f93> <6f93> 10564 <6f94> <6f94> 10563 <6f95> <6f95> 10576 <6f96> <6f96> 10554 <6f97> <6f97> 4504 <6f9d> <6f9d> 16953 <6f9e> <6f9e> 11165 <6f9f> <6f9f> 16966 <6fa0> <6fa0> 4843 <6fa1> <6fa1> 4833 <6fa2> <6fa2> 11177 <6fa3> <6fa3> 11157 <6fa4> <6fa4> 4835 <6fa5> <6fa5> 11169 <6fa6> <6fa6> 4842 <6fa7> <6fa7> 4837 <6fa8> <6fa8> 11167 <6fa9> <6fa9> 11662 <6faa> <6faa> 11173 <6fab> <6fab> 11179 <6fac> <6fac> 11172 <6fad> <6fad> 11155 <6fae> <6fae> 11170 <6faf> <6faf> 11181 <6fb0> <6fb0> 11183 <6fb1> <6fb1> 4832 <6fb2> <6fb2> 11182 <6fb3> <6fb3> 4838 <6fb4> <6fb4> 4844 <6fb5> <6fb5> 15911 <6fb6> <6fb6> 4841 <6fb8> <6fb8> 11176 <6fb9> <6fb9> 4840 <6fba> <6fba> 11171 <6fbb> <6fbb> 15291 <6fbc> <6fbc> 11159 <6fbd> <6fbd> 11164 <6fbe> <6fbe> 18056 <6fbf> <6fbf> 11175 <6fc0> <6fc0> 4839 <6fc1> <6fc1> 4836 endcidrange 100 begincidrange <6fc2> <6fc2> 4831 <6fc3> <6fc3> 4834 <6fc4> <6fc4> 11163 <6fc6> <6fc6> 10545 <6fc7> <6fc7> 11158 <6fc8> <6fc8> 11161 <6fc9> <6fc9> 11178 <6fca> <6fca> 11166 <6fcb> <6fcb> 11156 <6fcc> <6fcc> 11661 <6fcd> <6fcd> 11180 <6fce> <6fce> 11160 <6fcf> <6fcf> 11174 <6fd3> <6fd3> 16968 <6fd4> <6fd4> 11664 <6fd5> <6fd5> 5120 <6fd8> <6fd8> 5108 <6fd9> <6fd9> 15476 <6fda> <6fda> 15475 <6fdb> <6fdb> 5112 <6fdc> <6fdc> 11666 <6fdd> <6fdd> 11672 <6fde> <6fde> 11670 <6fdf> <6fe0> 5110 <6fe1> <6fe1> 5118 <6fe2> <6fe2> 11673 <6fe3> <6fe3> 11665 <6fe4> <6fe4> 5113 <6fe6> <6fe6> 11669 <6fe7> <6fe7> 11668 <6fe8> <6fe8> 11674 <6fe9> <6fe9> 5119 <6feb> <6feb> 5114 <6fec> <6fec> 5117 <6fed> <6fed> 11667 <6fee> <6fee> 5121 <6fef> <6fef> 5115 <6ff0> <6ff0> 5122 <6ff1> <6ff1> 5109 <6ff2> <6ff2> 11671 <6ff4> <6ff4> 11663 <6ff6> <6ff6> 14501 <6ff7> <6ff7> 12110 <6ff8> <6ff8> 16951 <6ffa> <6ffa> 5355 <6ffb> <6ffb> 12107 <6ffc> <6ffc> 12109 <6ffe> <6ffe> 5353 <6fff> <6fff> 12105 <7000> <7000> 12106 <7001> <7001> 12101 <7003> <7003> 18146 <7004> <7004> 11168 <7005> <7005> 12102 <7006> <7006> 5354 <7007> <7007> 12098 <7009> <7009> 5351 <700a> <700a> 12111 <700b> <700b> 5352 <700c> <700d> 12099 <700e> <700e> 12104 <700f> <700f> 5357 <7011> <7011> 5356 <7014> <7014> 12103 <7015> <7015> 5519 <7016> <7016> 12461 <7017> <7017> 12467 <7018> <7018> 5520 <7019> <7019> 12458 <701a> <701a> 5517 <701b> <701b> 5514 <701c> <701c> 12469 <701d> <701d> 5518 <701e> <701e> 15478 <701f> <701f> 5515 <7020> <7020> 12460 <7021> <7023> 12463 <7024> <7024> 12468 <7026> <7026> 12108 <7027> <7027> 12459 <7028> <7028> 5516 <7029> <7029> 12466 <702a> <702a> 12783 <702b> <702b> 12462 <702c> <702c> 18062 <702f> <702f> 12774 <7030> <7030> 5661 <7031> <7031> 12777 <7032> <7032> 5662 <7033> <7033> 12786 <7034> <7034> 12776 <7035> <7035> 12773 <7037> <7037> 12775 <7038> <7038> 12779 <7039> <7039> 12782 <703a> <703a> 12781 <703b> <703b> 12785 <703c> <703c> 12772 <703e> <703e> 5660 <703f> <703f> 12780 endcidrange 100 begincidrange <7040> <7040> 12784 <7041> <7041> 12787 <7042> <7042> 12778 <7043> <7044> 13016 <7045> <7046> 13021 <7048> <7049> 13019 <704a> <704a> 13018 <704b> <704b> 16980 <704c> <704c> 5754 <7050> <7050> 18064 <7051> <7051> 5832 <7052> <7052> 13196 <7054> <7054> 18065 <7055> <7057> 13193 <7058> <7058> 5833 <705a> <705a> 13347 <705b> <705b> 13346 <705c> <705c> 14418 <705d> <705d> 13450 <705e> <705e> 5922 <705f> <705f> 13448 <7060> <7060> 13451 <7061> <7061> 13449 <7062> <7062> 13520 <7063> <7063> 5956 <7064> <7064> 5970 <7065> <7065> 13596 <7066> <7066> 13574 <7067> <7067> 15605 <7068> <7068> 13595 <7069> <706a> 13639 <706b> <706b> 742 <706c> <706c> 17649 <706f> <706f> 18066 <7070> <7070> 1010 <7071> <7071> 6154 <7074> <7074> 6339 <7075> <7075> 14535 <7076> <7076> 1254 <7078> <7078> 1257 <7079> <7079> 16537 <707a> <707a> 6340 <707c> <707d> 1255 <707e> <707e> 16981 <707f> <707f> 18067 <7081> <7081> 18777 <7082> <7082> 6647 <7083> <7083> 6649 <7084> <7084> 6644 <7085> <7085> 6641 <7086> <7086> 6643 <7089> <7089> 17401 <708a> <708a> 1603 <708b> <708b> 16587 <708e> <708e> 1601 <708f> <708f> 18099 <7091> <7091> 6645 <7092> <7092> 1602 <7093> <7093> 6642 <7094> <7094> 6639 <7095> <7095> 1600 <7096> <7096> 6646 <7098> <7098> 6640 <7099> <7099> 1604 <709a> <709a> 6648 <709f> <709f> 7014 <70a0> <70a0> 18242 <70a1> <70a1> 7018 <70a3> <70a3> 14706 <70a4> <70a4> 1936 <70a5> <70a5> 15543 <70a6> <70a6> 15699 <70a7> <70a7> 16982 <70a9> <70a9> 7021 <70ab> <70ab> 1928 <70ac> <70ac> 1931 <70ad> <70ad> 1933 <70ae> <70ae> 1935 <70af> <70af> 1932 <70b0> <70b0> 7017 <70b1> <70b1> 7016 <70b3> <70b3> 1930 <70b4> <70b5> 7019 <70b7> <70b7> 7013 <70b8> <70b8> 1934 <70b9> <70b9> 15721 <70ba> <70ba> 1929 <70bb> <70bb> 18450 <70bc> <70bc> 17753 <70bd> <70bd> 17008 <70be> <70be> 7015 <70c0> <70c0> 18227 <70c4> <70c4> 15274 <70c5> <70c7> 7463 <70c8> <70c8> 2337 <70ca> <70ca> 2333 <70cb> <70cb> 7454 <70cc> <70cc> 16984 <70cd> <70cd> 7462 <70ce> <70ce> 7467 endcidrange 100 begincidrange <70cf> <70cf> 2338 <70d0> <70d0> 14701 <70d1> <70d1> 7452 <70d2> <70d2> 7458 <70d3> <70d3> 7451 <70d4> <70d4> 7461 <70d5> <70d6> 16985 <70d7> <70d7> 7457 <70d8> <70d8> 2334 <70d9> <70d9> 2336 <70da> <70da> 7466 <70dc> <70dc> 7450 <70dd> <70dd> 7453 <70de> <70de> 7459 <70df> <70df> 16987 <70e0> <70e0> 7460 <70e1> <70e1> 7468 <70e2> <70e2> 7456 <70e4> <70e4> 2335 <70ef> <70ef> 2838 <70f0> <70f0> 8050 <70f1> <70f1> 15048 <70f3> <70f3> 8052 <70f4> <70f4> 8048 <70f5> <70f5> 18272 <70f6> <70f6> 8060 <70f7> <70f7> 8046 <70f8> <70f8> 8059 <70f9> <70f9> 2834 <70fa> <70fa> 8044 <70fb> <70fb> 8690 <70fc> <70fc> 8054 <70fd> <70fd> 2837 <70fe> <70fe> 15630 <70ff> <70ff> 8055 <7100> <7100> 8058 <7102> <7102> 8062 <7104> <7104> 8051 <7105> <7105> 14883 <7106> <7106> 8056 <7109> <710a> 2835 <710b> <710b> 8061 <710c> <710c> 8049 <710d> <710d> 8045 <710e> <710e> 8063 <7110> <7110> 8053 <7113> <7113> 8057 <7117> <7117> 8047 <7119> <711a> 3272 <711b> <711b> 8700 <711c> <711c> 3279 <711d> <711d> 15687 <711e> <711e> 8688 <711f> <711f> 8697 <7120> <7120> 8687 <7121> <7121> 3276 <7122> <7122> 8695 <7123> <7123> 8693 <7125> <7125> 8694 <7126> <7126> 3274 <7128> <7128> 8698 <7129> <7129> 15273 <712b> <712b> 16993 <712c> <712c> 17002 <712e> <712e> 8691 <712f> <712f> 8689 <7130> <7130> 3275 <7131> <7131> 8692 <7132> <7132> 8696 <7133> <7133> 15700 <7134> <7134> 15486 <7135> <7135> 14189 <7136> <7136> 3277 <713a> <713a> 8699 <713b> <713b> 15045 <713e> <713e> 14126 <7140> <7140> 17304 <7141> <7141> 9339 <7142> <7142> 9346 <7143> <7143> 9348 <7144> <7144> 9354 <7145> <7145> 16994 <7146> <7146> 3698 <7147> <7147> 9334 <7149> <7149> 3690 <714a> <714a> 16996 <714b> <714b> 9349 <714c> <714c> 3695 <714d> <714d> 9355 <714e> <714e> 3686 <714f> <714f> 16999 <7150> <7150> 9352 <7151> <7151> 18533 <7152> <7152> 9336 <7153> <7153> 9353 <7154> <7154> 9335 <7156> <7156> 3700 <7158> <7158> 9347 <7159> <7159> 3687 <715a> <715a> 9356 endcidrange 100 begincidrange <715c> <715c> 3692 <715d> <715d> 9340 <715e> <715e> 3697 <715f> <715f> 9351 <7160> <7160> 9338 <7161> <7161> 9345 <7162> <7162> 9341 <7163> <7163> 9337 <7164> <7164> 3689 <7165> <7165> 3696 <7166> <7166> 3694 <7167> <7167> 3691 <7168> <7168> 3699 <7169> <7169> 3688 <716a> <716a> 9344 <716b> <716b> 15557 <716c> <716c> 3693 <716e> <716e> 3278 <7170> <7170> 9350 <7171> <7171> 15808 <7172> <7172> 9342 <7173> <7173> 18407 <7175> <7175> 15597 <7176> <7176> 16384 <7177> <7177> 14679 <7178> <7178> 9343 <717a> <717a> 18724 <717b> <717b> 10014 <717c> <717c> 14389 <717d> <717d> 4131 <717e> <717e> 14704 <7180> <7180> 10010 <7181> <7181> 10016 <7182> <7182> 10012 <7184> <7184> 4133 <7185> <7185> 10011 <7186> <7186> 10015 <7187> <7187> 10007 <7188> <7188> 18182 <7189> <7189> 10009 <718a> <718a> 4132 <718c> <718c> 14826 <718e> <718e> 15675 <718f> <718f> 10013 <7190> <7190> 10008 <7192> <7192> 4134 <7194> <7194> 4129 <7196> <7196> 16991 <7197> <7197> 10017 <7198> <7198> 18461 <7199> <7199> 4130 <719a> <719a> 10586 <719b> <719b> 10583 <719c> <719c> 10595 <719d> <719d> 10589 <719e> <719e> 10591 <719f> <719f> 4510 <71a0> <71a0> 10585 <71a1> <71a1> 10593 <71a2> <71a2> 18625 <71a3> <71a3> 16072 <71a4> <71a4> 10592 <71a5> <71a5> 10590 <71a7> <71a7> 10596 <71a8> <71a8> 4513 <71a9> <71a9> 10587 <71aa> <71aa> 10594 <71ac> <71ac> 4511 <71ad> <71ad> 15901 <71af> <71af> 10582 <71b0> <71b0> 10584 <71b1> <71b1> 4512 <71b2> <71b2> 10581 <71b3> <71b3> 10597 <71b4> <71b4> 16990 <71b5> <71b5> 10588 <71b7> <71b7> 18059 <71b8> <71b8> 11187 <71b9> <71b9> 4851 <71ba> <71ba> 17006 <71bc> <71bc> 11198 <71bd> <71bd> 11196 <71be> <71be> 4845 <71bf> <71bf> 11186 <71c0> <71c1> 11189 <71c2> <71c2> 11185 <71c3> <71c4> 4855 <71c5> <71c5> 11184 <71c6> <71c6> 11199 <71c7> <71c7> 11194 <71c8> <71c8> 4849 <71c9> <71c9> 4846 <71ca> <71ca> 11193 <71cb> <71cb> 11191 <71ce> <71ce> 4852 <71cf> <71cf> 11195 <71d0> <71d0> 4847 <71d1> <71d1> 14141 <71d2> <71d2> 4848 <71d4> <71d4> 11192 endcidrange 100 begincidrange <71d5> <71d5> 4850 <71d6> <71d6> 11188 <71d8> <71d8> 11197 <71d9> <71d9> 4853 <71da> <71db> 11200 <71dc> <71dc> 4854 <71dd> <71dd> 16504 <71df> <71df> 5124 <71e0> <71e0> 5131 <71e1> <71e1> 11675 <71e2> <71e2> 11681 <71e4> <71e4> 11679 <71e5> <71e5> 5127 <71e6> <71e6> 5126 <71e7> <71e7> 5123 <71e8> <71e8> 11677 <71eb> <71eb> 15489 <71ec> <71ec> 5129 <71ed> <71ed> 5128 <71ee> <71ee> 5125 <71f0> <71f0> 11680 <71f1> <71f1> 11676 <71f2> <71f2> 11678 <71f4> <71f4> 5130 <71f5> <71f5> 18158 <71f6> <71f6> 16026 <71f8> <71f8> 5361 <71f9> <71f9> 12114 <71fb> <71fc> 5358 <71fd> <71fd> 12116 <71fe> <71fe> 5360 <71ff> <71ff> 12113 <7201> <7201> 12112 <7202> <7202> 12473 <7203> <7203> 12115 <7205> <7205> 12474 <7206> <7206> 5521 <7207> <7207> 12472 <7209> <7209> 15803 <720a> <720a> 12471 <720c> <720c> 12470 <720d> <720d> 5522 <720e> <720e> 17009 <720f> <720f> 14844 <7210> <7210> 5663 <7213> <7214> 12788 <7215> <7215> 17011 <7216> <7216> 14675 <7217> <7217> 14697 <7219> <7219> 13025 <721a> <721a> 13024 <721b> <721b> 5755 <721d> <721d> 13023 <721e> <721f> 13197 <7222> <7222> 13348 <7223> <7223> 13452 <7224> <7224> 17014 <7226> <7226> 13521 <7227> <7227> 13621 <7228> <7228> 5990 <7229> <7229> 13641 <722a> <722a> 743 <722b> <722b> 17650 <722c> <722d> 1605 <722e> <722e> 17017 <7230> <7230> 1937 <7235> <7235> 5132 <7236> <7236> 744 <7238> <7238> 1607 <7239> <7239> 2339 <723a> <723a> 3701 <723b> <723b> 745 <723d> <723d> 2839 <723e> <723e> 4135 <723f> <723f> 6029 <7240> <7240> 17018 <7241> <7241> 7022 <7242> <7242> 7469 <7244> <7244> 10018 <7246> <7246> 5133 <7247> <7247> 746 <7248> <7248> 1608 <7249> <724a> 7023 <724b> <724b> 8701 <724c> <724c> 3280 <724f> <724f> 9357 <7250> <7250> 15049 <7252> <7252> 3702 <7253> <7253> 10019 <7255> <7255> 17021 <7256> <7256> 4514 <7257> <7257> 17022 <7258> <7258> 5523 <7259> <7259> 747 <725a> <725a> 8702 <725b> <725b> 748 <725c> <725c> 18010 <725d> <725d> 1012 <725e> <725e> 6155 <725f> <725f> 1011 endcidrange 100 begincidrange <7260> <7260> 1260 <7261> <7261> 1259 <7262> <7262> 1258 <7263> <7263> 6341 <7266> <7266> 16059 <7267> <7267> 1609 <7269> <7269> 1610 <726a> <726a> 6650 <726c> <726c> 7025 <726e> <726e> 7028 <726f> <726f> 1939 <7270> <7270> 7026 <7272> <7272> 1938 <7273> <7273> 7027 <7274> <7274> 1940 <7276> <7276> 7472 <7277> <7277> 7471 <7278> <7278> 7470 <7279> <7279> 2340 <727b> <727c> 8065 <727d> <727d> 2840 <727e> <727e> 8064 <727f> <727f> 8067 <7280> <7280> 3282 <7281> <7281> 2841 <7282> <7282> 17027 <7284> <7284> 3281 <7285> <7285> 8706 <7286> <7286> 8705 <7287> <7287> 15050 <7288> <7289> 8703 <728b> <728b> 8707 <728c> <728c> 9359 <728d> <728d> 9358 <728e> <728e> 9362 <728f> <728f> 17353 <7290> <7290> 9361 <7291> <7291> 9360 <7292> <7292> 4136 <7293> <7293> 10022 <7294> <7294> 15051 <7295> <7295> 10021 <7296> <7296> 4137 <7297> <7297> 10020 <7298> <7298> 10598 <729a> <729a> 10599 <729b> <729b> 4515 <729d> <729e> 11202 <729f> <729f> 18234 <72a1> <72a1> 12479 <72a2> <72a2> 5524 <72a3> <72a3> 12478 <72a4> <72a4> 12477 <72a5> <72a6> 12475 <72a7> <72a7> 5756 <72a8> <72a8> 12790 <72a9> <72a9> 13199 <72aa> <72aa> 13522 <72ac> <72ac> 749 <72ad> <72ad> 17652 <72ae> <72ae> 6063 <72af> <72af> 853 <72b0> <72b0> 6064 <72b2> <72b2> 16310 <72b4> <72b5> 6156 <72ba> <72ba> 6347 <72bd> <72bd> 6343 <72bf> <72bf> 6342 <72c0> <72c0> 1611 <72c1> <72c1> 6346 <72c2> <72c2> 1262 <72c3> <72c3> 6344 <72c4> <72c4> 1261 <72c5> <72c5> 6348 <72c6> <72c6> 6345 <72c9> <72c9> 6654 <72ca> <72ca> 7029 <72cb> <72cb> 6652 <72cc> <72cc> 6659 <72cd> <72cd> 17354 <72ce> <72ce> 1612 <72d0> <72d0> 1615 <72d1> <72d1> 6660 <72d2> <72d2> 6656 <72d4> <72d4> 6657 <72d6> <72d6> 6651 <72d7> <72d7> 1614 <72d8> <72d8> 6653 <72d9> <72d9> 1613 <72da> <72da> 6658 <72dc> <72dc> 6655 <72df> <72df> 7033 <72e0> <72e1> 1942 <72e2> <72e2> 16279 <72e3> <72e3> 7036 <72e4> <72e4> 7030 <72e6> <72e6> 7035 <72e8> <72e8> 7031 <72e9> <72e9> 1941 <72ea> <72ea> 7034 endcidrange 100 begincidrange <72eb> <72eb> 7032 <72f3> <72f3> 7478 <72f4> <72f4> 7475 <72f6> <72f6> 7477 <72f7> <72f7> 2345 <72f8> <72f8> 2344 <72f9> <72f9> 2342 <72fa> <72fa> 7474 <72fb> <72fb> 7479 <72fc> <72fc> 2341 <72fd> <72fd> 2343 <72fe> <72fe> 7476 <72ff> <72ff> 8075 <7300> <7300> 7473 <7301> <7301> 7480 <7302> <7302> 16282 <7304> <7304> 16053 <7307> <7307> 8070 <7308> <7308> 8074 <730a> <730a> 8073 <730b> <730b> 8709 <730c> <730c> 8720 <730f> <730f> 8076 <7310> <7310> 18154 <7311> <7311> 8071 <7312> <7312> 8708 <7313> <7313> 2845 <7316> <7316> 2844 <7317> <7317> 8069 <7318> <7318> 8072 <7319> <7319> 2846 <731b> <731b> 2843 <731c> <731c> 2842 <731d> <731d> 8068 <731e> <731e> 8077 <7322> <7322> 8711 <7323> <7323> 8718 <7325> <7325> 3284 <7326> <7326> 8717 <7327> <7327> 8714 <7328> <7328> 17034 <7329> <7329> 3286 <732a> <732a> 15728 <732b> <732b> 17029 <732c> <732c> 16306 <732d> <732d> 8716 <732e> <732e> 17035 <7330> <7330> 8710 <7331> <7331> 8712 <7332> <7332> 8715 <7333> <7333> 8713 <7334> <7334> 3285 <7335> <7335> 8719 <7336> <7336> 3283 <7337> <7337> 3703 <7338> <7338> 18155 <7339> <7339> 17356 <733a> <733a> 9366 <733b> <733b> 9365 <733c> <733c> 9363 <733e> <733e> 3706 <733f> <733f> 3705 <7340> <7340> 9367 <7341> <7341> 18156 <7342> <7342> 9364 <7343> <7343> 10023 <7344> <7344> 4138 <7345> <7345> 3704 <7348> <7348> 17402 <7349> <7349> 9369 <734a> <734a> 9368 <734c> <734c> 10026 <734d> <734d> 10024 <734e> <734e> 4516 <734f> <734f> 16209 <7350> <7350> 4139 <7351> <7351> 10025 <7352> <7352> 10601 <7357> <7357> 4517 <7358> <7358> 10600 <7359> <7359> 10609 <735a> <735a> 10608 <735b> <735b> 10606 <735d> <735d> 10605 <735e> <7360> 10602 <7361> <7361> 10607 <7362> <7362> 10610 <7365> <7365> 11208 <7366> <7367> 11205 <7368> <7368> 4857 <7369> <7369> 11204 <736a> <736a> 11210 <736b> <736b> 11209 <736c> <736c> 11207 <736e> <736f> 11683 <7370> <7370> 5134 <7371> <7371> 16280 <7372> <7372> 5135 <7373> <7373> 11682 <7374> <7374> 16084 endcidrange 100 begincidrange <7375> <7375> 5363 <7376> <7376> 12117 <7377> <7377> 5362 <7378> <7378> 5525 <737a> <737a> 5526 <737b> <737b> 5664 <737c> <737c> 12792 <737d> <737d> 12791 <737e> <737e> 13026 <737f> <737f> 13200 <7380> <7380> 5834 <7381> <7381> 13350 <7382> <7382> 13349 <7383> <7383> 13351 <7384> <7384> 854 <7385> <7385> 7037 <7386> <7386> 2346 <7387> <7387> 2847 <7388> <7388> 8078 <7389> <7389> 855 <738a> <738a> 6065 <738b> <738b> 750 <738e> <738e> 6158 <738f> <738f> 18149 <7392> <7392> 6353 <7393> <7394> 6351 <7395> <7395> 6349 <7396> <7396> 1263 <7397> <7397> 6350 <7398> <7398> 14838 <739c> <739c> 16522 <739d> <739d> 6668 <739e> <739e> 14683 <739f> <739f> 1618 <73a0> <73a0> 6666 <73a1> <73a1> 6662 <73a2> <73a2> 6665 <73a4> <73a4> 6661 <73a5> <73a5> 1620 <73a6> <73a6> 6664 <73a7> <73a7> 16519 <73a8> <73a8> 1617 <73a9> <73a9> 1616 <73aa> <73aa> 17037 <73ab> <73ab> 1619 <73ac> <73ac> 6667 <73ad> <73ad> 6663 <73b2> <73b2> 1947 <73b3> <73b3> 1950 <73b4> <73b4> 7045 <73b5> <73b5> 7044 <73b6> <73b6> 7043 <73b7> <73b7> 1944 <73b8> <73b8> 7052 <73b9> <73b9> 7042 <73bb> <73bb> 1946 <73bc> <73bc> 7485 <73be> <73be> 7049 <73bf> <73bf> 7047 <73c0> <73c0> 1949 <73c2> <73c2> 7039 <73c3> <73c3> 7050 <73c5> <73c5> 7041 <73c6> <73c6> 7051 <73c7> <73c7> 7048 <73c8> <73c8> 7040 <73c9> <73c9> 17040 <73ca> <73ca> 1945 <73cb> <73cb> 7053 <73cc> <73cc> 7038 <73cd> <73cd> 1948 <73ce> <73ce> 16667 <73cf> <73cf> 17036 <73d0> <73d0> 15127 <73d2> <73d2> 7490 <73d3> <73d3> 7481 <73d4> <73d4> 7492 <73d5> <73d5> 16499 <73d6> <73d6> 7484 <73d7> <73d8> 7495 <73d9> <73d9> 7482 <73da> <73da> 7494 <73db> <73db> 7491 <73dc> <73dc> 7489 <73dd> <73dd> 7493 <73de> <73de> 2352 <73e0> <73e0> 2350 <73e1> <73e1> 18160 <73e2> <73e2> 15523 <73e3> <73e3> 7487 <73e4> <73e4> 17061 <73e5> <73e5> 7483 <73e6> <73e6> 15546 <73e7> <73e7> 7486 <73e8> <73e8> 7497 <73e9> <73e9> 7488 <73ea> <73ea> 2351 <73eb> <73eb> 7046 <73ed> <73ed> 2347 <73ee> <73ee> 2349 endcidrange 100 begincidrange <73ef> <73ef> 16401 <73f3> <73f3> 15531 <73f4> <73f4> 8092 <73f5> <73f5> 8081 <73f6> <73f6> 8079 <73f7> <73f7> 17050 <73f8> <73f8> 8080 <73f9> <73f9> 15353 <73fa> <73fa> 8087 <73fb> <73fb> 15532 <73fc> <73fc> 8088 <73fd> <73fd> 8084 <73fe> <73fe> 2852 <73ff> <73ff> 8089 <7400> <7400> 8086 <7401> <7401> 8083 <7403> <7403> 2850 <7404> <7404> 8082 <7405> <7405> 2848 <7406> <7406> 2851 <7407> <7407> 8085 <7408> <7408> 8093 <7409> <7409> 2348 <740a> <740a> 2849 <740b> <740b> 8091 <740c> <740c> 8090 <740d> <740d> 2853 <7411> <7411> 17772 <7412> <7412> 15334 <7414> <7414> 14836 <7415> <7415> 17051 <7416> <7416> 8725 <7417> <7417> 16557 <7419> <7419> 18163 <741a> <741a> 8726 <741b> <741b> 3296 <741c> <741c> 14557 <741d> <741d> 8732 <741e> <741f> 18164 <7420> <7420> 8734 <7421> <7421> 8727 <7422> <7422> 3290 <7423> <7423> 8731 <7424> <7424> 8730 <7425> <7425> 3291 <7426> <7426> 3297 <7428> <7428> 3298 <7429> <7429> 8733 <742a> <742a> 3288 <742b> <742b> 8724 <742c> <742c> 8722 <742d> <742d> 8728 <742e> <742e> 8721 <742f> <742f> 3295 <7430> <7430> 8723 <7431> <7431> 8729 <7432> <7432> 8735 <7433> <7433> 3289 <7434> <7434> 3294 <7435> <7436> 3292 <7437> <7437> 15073 <7438> <7438> 15113 <7439> <7439> 17054 <743a> <743a> 3287 <743c> <743c> 15071 <743f> <743f> 3713 <7440> <7440> 9376 <7441> <7441> 3712 <7442> <7442> 9380 <7443> <7443> 14874 <7444> <7444> 9370 <7445> <7445> 15319 <7446> <7446> 9381 <7447> <7447> 17060 <7448> <7448> 15541 <7449> <7449> 17041 <744a> <744b> 9371 <744d> <744d> 9382 <744e> <744e> 9379 <744f> <7450> 9377 <7451> <7451> 9374 <7452> <7452> 9373 <7453> <7453> 16945 <7454> <7454> 9383 <7455> <7455> 3709 <7456> <7456> 14837 <7457> <7457> 9375 <7459> <7459> 3714 <745a> <745a> 3708 <745b> <745c> 3715 <745d> <745d> 17094 <745e> <745e> 3711 <745f> <745f> 3710 <7460> <7460> 17058 <7462> <7462> 10027 <7463> <7463> 4141 <7464> <7464> 4140 <7465> <7465> 16641 <7467> <7467> 10032 <7468> <7468> 15086 endcidrange 100 begincidrange <7469> <7469> 4518 <746a> <746a> 4142 <746b> <746b> 15335 <746c> <746c> 17064 <746d> <746d> 4144 <746e> <746e> 10033 <746f> <746f> 3707 <7470> <7470> 4143 <7471> <7471> 10029 <7472> <7472> 10031 <7473> <7473> 10028 <7474> <7474> 17065 <7475> <7475> 10030 <7476> <7476> 17062 <7479> <7479> 10620 <747a> <747a> 15057 <747c> <747c> 10619 <747d> <747d> 10616 <747e> <747e> 4521 <747f> <747f> 11211 <7480> <7480> 4522 <7481> <7481> 10615 <7482> <7482> 17068 <7483> <7483> 4520 <7485> <7485> 10617 <7486> <7486> 10614 <7487> <7487> 10611 <7488> <7488> 10618 <7489> <748a> 10612 <748b> <748b> 4519 <748c> <748c> 14881 <748d> <748d> 18077 <7490> <7490> 11688 <7492> <7492> 11215 <7494> <7494> 11214 <7495> <7495> 11216 <7497> <7497> 11685 <7498> <7498> 4860 <7499> <7499> 14835 <749a> <749a> 11212 <749b> <749b> 15114 <749c> <749c> 4858 <749e> <749e> 4862 <749f> <749f> 4861 <74a0> <74a0> 11213 <74a1> <74a1> 11217 <74a3> <74a3> 4859 <74a4> <74a4> 16752 <74a5> <74a5> 11692 <74a6> <74a6> 5138 <74a7> <74a7> 5364 <74a8> <74a8> 5139 <74a9> <74a9> 5136 <74aa> <74aa> 11689 <74ab> <74ab> 11687 <74ad> <74ad> 11690 <74af> <74af> 11693 <74b0> <74b0> 5137 <74b1> <74b1> 11691 <74b2> <74b2> 11686 <74b4> <74b4> 15525 <74b5> <74b5> 12120 <74b6> <74b6> 12123 <74b7> <74b7> 12482 <74b8> <74b8> 12118 <74ba> <74ba> 12793 <74bb> <74bb> 12124 <74bd> <74bd> 5527 <74be> <74be> 12122 <74bf> <74bf> 5365 <74c0> <74c0> 12119 <74c1> <74c1> 12121 <74c2> <74c2> 12125 <74c3> <74c3> 12483 <74c5> <74c5> 12481 <74c8> <74c8> 17077 <74ca> <74ca> 5528 <74cb> <74cb> 12480 <74cc> <74cc> 15070 <74cf> <74cf> 5665 <74d0> <74d0> 15003 <74d3> <74d3> 18170 <74d4> <74d4> 5758 <74d5> <74d5> 13202 <74d6> <74d6> 5757 <74d7> <74d7> 13204 <74d8> <74d8> 13201 <74d9> <74d9> 13203 <74da> <74da> 5886 <74db> <74db> 13453 <74dc> <74dc> 856 <74dd> <74dd> 6669 <74de> <74df> 7498 <74e0> <74e0> 2854 <74e1> <74e1> 9384 <74e2> <74e2> 4863 <74e3> <74e3> 5529 <74e4> <74e4> 5835 <74e5> <74e5> 13454 <74e6> <74e6> 857 endcidrange 100 begincidrange <74e7> <74e7> 16382 <74e8> <74e8> 6670 <74e9> <74e9> 288 <74ec> <74ec> 7054 <74ee> <74ee> 7055 <74f0> <74f0> 16358 <74f1> <74f1> 16283 <74f2> <74f2> 16351 <74f4> <74f5> 7500 <74f6> <74f7> 2855 <74f8> <74f8> 16372 <74fb> <74fb> 8736 <74fd> <74fd> 9387 <74fe> <74fe> 9386 <74ff> <74ff> 9385 <7500> <7500> 10034 <7502> <7503> 10035 <7504> <7504> 4145 <7505> <7505> 16350 <7507> <7507> 10622 <7508> <7508> 10621 <750b> <750b> 11218 <750c> <750d> 4864 <750e> <750e> 17079 <750f> <750f> 11697 <7510> <7512> 11694 <7513> <7513> 12127 <7514> <7514> 12126 <7515> <7515> 5366 <7516> <7516> 12484 <7517> <7517> 13027 <7518> <7518> 858 <7519> <7519> 17795 <751a> <751a> 1951 <751c> <751c> 2857 <751d> <751d> 9388 <751e> <751e> 17080 <751f> <751f> 859 <7521> <7521> 7502 <7522> <7522> 2858 <7525> <7526> 3299 <7528> <7529> 860 <752a> <752a> 6159 <752b> <752b> 1265 <752c> <752c> 1264 <752d> <752d> 1952 <752e> <752e> 7056 <752f> <752f> 8737 <7530> <7533> 862 <7534> <7534> 16007 <7535> <7535> 17754 <7537> <7538> 1266 <7539> <7539> 6355 <753a> <753a> 6354 <753b> <753b> 15867 <753d> <753d> 1621 <753e> <753e> 6673 <753f> <7540> 6671 <7542> <7542> 17357 <7546> <7546> 16192 <7547> <7548> 7057 <754a> <754a> 17087 <754b> <754b> 1956 <754c> <754c> 1954 <754d> <754d> 17086 <754e> <754e> 1955 <754f> <754f> 1953 <7551> <7551> 15614 <7553> <7553> 16363 <7554> <7554> 2353 <7555> <7555> 15082 <7559> <7559> 2357 <755a> <755a> 2356 <755b> <755b> 7503 <755c> <755c> 2355 <755d> <755d> 2354 <755f> <755f> 7504 <7560> <7560> 15729 <7562> <7562> 2861 <7563> <7563> 8095 <7564> <7564> 8094 <7565> <7566> 2859 <7567> <7567> 17088 <756a> <756a> 3302 <756b> <756b> 3301 <756c> <756c> 8739 <756d> <756d> 18173 <756e> <756e> 17089 <756f> <756f> 8738 <7570> <7570> 2862 <7572> <7572> 18174 <7576> <7576> 3717 <7577> <7577> 9390 <7578> <7578> 3718 <7579> <7579> 9389 <757a> <757a> 16207 <757d> <757d> 10037 <757e> <757e> 10623 <757f> <757f> 4523 <7580> <7580> 11219 endcidrange 100 begincidrange <7583> <7583> 15077 <7584> <7584> 11698 <7586> <7586> 5531 <7587> <7587> 5530 <758a> <758a> 5836 <758b> <758b> 866 <758c> <758c> 6674 <758d> <758d> 18175 <758e> <758e> 17093 <758f> <758f> 2863 <7590> <7590> 10038 <7591> <7591> 4146 <7592> <7592> 558 <7594> <7595> 6356 <7598> <7598> 6675 <7599> <759a> 1623 <759d> <759d> 1622 <759e> <759e> 17095 <75a2> <75a3> 1960 <75a4> <75a5> 1958 <75a7> <75a7> 7059 <75aa> <75aa> 7060 <75ab> <75ab> 1957 <75b0> <75b0> 7505 <75b1> <75b1> 16045 <75b2> <75b3> 2361 <75b4> <75b4> 17096 <75b5> <75b5> 2866 <75b6> <75b6> 7511 <75b8> <75b8> 2367 <75b9> <75b9> 2365 <75ba> <75ba> 7512 <75bb> <75bb> 7507 <75bc> <75bc> 2364 <75bd> <75bd> 2363 <75be> <75be> 2358 <75bf> <75bf> 7510 <75c0> <75c0> 7509 <75c1> <75c1> 7506 <75c2> <75c2> 2366 <75c3> <75c3> 16275 <75c4> <75c4> 7508 <75c5> <75c5> 2359 <75c7> <75c7> 2360 <75c8> <75c8> 18177 <75ca> <75ca> 2867 <75cb> <75cc> 8099 <75cd> <75cd> 2868 <75ce> <75ce> 8096 <75cf> <75cf> 8098 <75d0> <75d0> 8102 <75d1> <75d1> 8101 <75d2> <75d2> 8097 <75d4> <75d5> 2864 <75d7> <75d7> 8747 <75d8> <75d8> 3307 <75d9> <75d9> 3306 <75da> <75da> 8741 <75db> <75db> 3304 <75dc> <75dc> 17358 <75dd> <75dd> 8744 <75de> <75de> 3308 <75df> <75df> 8745 <75e0> <75e0> 3309 <75e1> <75e1> 8742 <75e2> <75e2> 3303 <75e3> <75e3> 3305 <75e4> <75e4> 8746 <75e6> <75e6> 8743 <75e7> <75e7> 8740 <75ed> <75ed> 9403 <75ef> <75ef> 9392 <75f0> <75f0> 3720 <75f1> <75f1> 3723 <75f2> <75f2> 3722 <75f3> <75f3> 3727 <75f4> <75f4> 3726 <75f5> <75f5> 9404 <75f6> <75f6> 9402 <75f7> <75f7> 9395 <75f8> <75f8> 9399 <75f9> <75f9> 9398 <75fa> <75fa> 3724 <75fb> <75fb> 9401 <75fc> <75fc> 9397 <75fd> <75fd> 9405 <75fe> <75fe> 9396 <75ff> <75ff> 3725 <7600> <7600> 3719 <7601> <7601> 3721 <7602> <7602> 17097 <7603> <7603> 9394 <7607> <7607> 16271 <7608> <7608> 10040 <7609> <7609> 4150 <760a> <760a> 10044 <760b> <760b> 4149 <760c> <760c> 10041 <760d> <760d> 4148 <760f> <760f> 9393 endcidrange 100 begincidrange <7610> <7610> 9400 <7611> <7611> 10043 <7613> <7613> 4151 <7614> <7614> 10045 <7615> <7615> 10042 <7616> <7616> 10039 <7619> <7619> 10626 <761a> <761a> 10630 <761b> <761b> 10632 <761c> <761c> 10628 <761d> <761d> 10627 <761e> <761e> 10625 <761f> <761f> 4526 <7620> <7620> 4524 <7621> <7622> 4529 <7623> <7623> 10629 <7624> <7624> 4527 <7625> <7625> 10624 <7626> <7626> 4528 <7627> <7627> 4147 <7628> <7628> 10631 <7629> <7629> 4525 <762c> <762c> 17098 <762d> <762d> 11221 <762f> <762f> 11220 <7630> <7630> 11228 <7631> <7631> 11222 <7632> <7632> 11227 <7633> <7633> 11224 <7634> <7634> 4866 <7635> <7635> 11226 <7638> <7638> 4867 <763a> <763a> 4868 <763b> <763b> 15984 <763c> <763c> 11225 <763d> <763d> 11223 <7640> <7640> 16102 <7642> <7642> 5141 <7643> <7643> 11699 <7646> <7646> 5140 <7647> <7647> 11702 <7648> <7649> 11700 <764c> <764c> 5142 <764d> <764d> 18178 <764e> <764e> 15986 <764f> <764f> 17100 <7650> <7650> 12131 <7651> <7651> 17099 <7652> <7652> 5369 <7653> <7653> 12132 <7654> <7654> 16112 <7656> <7656> 5367 <7657> <7657> 12133 <7658> <7658> 5368 <7659> <7659> 12130 <765a> <765a> 12134 <765c> <765c> 12128 <765f> <765f> 5532 <7660> <7660> 12485 <7661> <7661> 5533 <7662> <7662> 5666 <7664> <7664> 12129 <7665> <7665> 5667 <7666> <7666> 16042 <7667> <7667> 16297 <7669> <7669> 5759 <766a> <766a> 13028 <766c> <766c> 5838 <766d> <766d> 13205 <766e> <766e> 5837 <766f> <766f> 17101 <7670> <7670> 13352 <7671> <7672> 5923 <7673> <7673> 15083 <7674> <7674> 18179 <7675> <7675> 13635 <7676> <7676> 559 <7678> <7678> 1962 <7679> <7679> 7061 <767a> <767a> 18181 <767b> <767c> 3310 <767d> <767d> 867 <767e> <767e> 1013 <767f> <767f> 6160 <7680> <7680> 17363 <7681> <7681> 6358 <7682> <7682> 1268 <7684> <7684> 1625 <7686> <7688> 1963 <7689> <7689> 8104 <768a> <768a> 7513 <768b> <768b> 2368 <768c> <768c> 17364 <768e> <768e> 2869 <768f> <768f> 8103 <7690> <7690> 17104 <7692> <7692> 8749 <7693> <7693> 3313 <7695> <7695> 8748 <7696> <7696> 3312 endcidrange 100 begincidrange <7699> <7699> 9406 <769a> <769a> 4531 <769b> <769b> 10636 <769c> <769e> 10633 <76a1> <76a1> 17109 <76a4> <76a4> 11703 <76a5> <76a5> 17110 <76a6> <76a6> 12135 <76aa> <76aa> 12795 <76ab> <76ab> 12794 <76ad> <76ad> 13206 <76ae> <76ae> 868 <76af> <76af> 6676 <76b0> <76b0> 2369 <76b4> <76b4> 3314 <76b5> <76b5> 9407 <76b7> <76b7> 17111 <76b8> <76b8> 10046 <76ba> <76ba> 4532 <76bb> <76bb> 11229 <76bd> <76bd> 12136 <76be> <76be> 12796 <76bf> <76bf> 869 <76c2> <76c2> 1626 <76c3> <76c3> 1968 <76c4> <76c4> 7062 <76c5> <76c5> 1969 <76c6> <76c6> 1967 <76c8> <76c8> 1966 <76c9> <76c9> 7514 <76ca> <76ca> 2370 <76cc> <76cc> 17112 <76cd> <76ce> 2371 <76d2> <76d2> 2871 <76d3> <76d3> 8105 <76d4> <76d4> 2870 <76d6> <76d6> 16213 <76da> <76da> 8750 <76db> <76db> 2872 <76dc> <76dc> 3315 <76dd> <76dd> 9408 <76de> <76df> 3728 <76e1> <76e1> 4152 <76e3> <76e3> 4153 <76e4> <76e4> 4533 <76e5> <76e5> 4870 <76e6> <76e6> 11230 <76e7> <76e7> 4869 <76e9> <76e9> 11704 <76ea> <76ea> 5143 <76ec> <76ec> 12137 <76ed> <76ed> 12797 <76ee> <76ee> 870 <76ef> <76ef> 1269 <76f0> <76f0> 6679 <76f1> <76f1> 6678 <76f2> <76f2> 1627 <76f3> <76f3> 6677 <76f4> <76f4> 1628 <76f5> <76f5> 6680 <76f7> <76f7> 7068 <76f8> <76f8> 1972 <76f9> <76f9> 1971 <76fa> <76fa> 7070 <76fb> <76fb> 7069 <76fc> <76fc> 1976 <76fe> <76fe> 1975 <7701> <7701> 1970 <7703> <7705> 7064 <7707> <7707> 1977 <7708> <7708> 7063 <7709> <7709> 1973 <770a> <770a> 7067 <770b> <770b> 1974 <770c> <770c> 15714 <770e> <770f> 15106 <7710> <7710> 7517 <7711> <7711> 7521 <7712> <7712> 7519 <7713> <7713> 7518 <7715> <7715> 7522 <7719> <771a> 7523 <771b> <771b> 7516 <771d> <771d> 7515 <771e> <771e> 17118 <771f> <7720> 2374 <7722> <7722> 7525 <7723> <7723> 7520 <7724> <7724> 16360 <7725> <7725> 8114 <7726> <7726> 17119 <7727> <7727> 7526 <7728> <7728> 2376 <7729> <7729> 2373 <772b> <772b> 16371 <772d> <772d> 8108 <772f> <772f> 8107 <7731> <7732> 8109 <7733> <7733> 8112 <7734> <7734> 8111 endcidrange 100 begincidrange <7735> <7735> 8116 <7736> <7736> 2876 <7737> <7737> 2873 <7738> <7738> 2877 <7739> <7739> 8106 <773a> <773a> 2878 <773b> <773b> 8115 <773c> <773c> 2875 <773d> <773d> 8113 <773e> <773e> 2874 <7740> <7740> 17120 <7743> <7743> 18186 <7744> <7744> 8753 <7745> <7745> 8755 <7746> <7747> 8751 <774a> <774a> 8756 <774b> <774c> 8758 <774d> <774d> 8754 <774e> <774e> 8757 <774f> <774f> 3316 <7752> <7752> 9412 <7754> <7754> 9417 <7755> <7755> 9409 <7756> <7756> 9413 <7758> <7758> 17123 <7759> <7759> 9418 <775a> <775a> 9414 <775b> <775b> 3730 <775c> <775c> 3738 <775e> <775e> 3733 <775f> <7760> 9410 <7761> <7761> 4157 <7762> <7762> 3741 <7763> <7763> 3734 <7765> <7765> 3739 <7766> <7766> 3732 <7767> <7767> 9416 <7768> <7768> 3740 <7769> <7769> 9415 <776a> <776a> 3736 <776b> <776b> 3731 <776c> <776c> 3737 <776d> <776d> 9419 <776e> <776e> 10051 <776f> <776f> 10053 <7772> <7772> 14699 <7777> <7777> 18089 <7778> <7778> 15104 <7779> <7779> 3735 <777a> <777a> 17175 <777b> <777b> 15108 <777c> <777c> 10048 <777d> <777d> 4155 <777e> <777e> 10054 <777f> <777f> 4156 <7780> <7780> 10052 <7781> <7781> 10047 <7782> <7782> 10050 <7783> <7783> 10055 <7784> <7784> 4154 <7785> <7785> 10049 <7787> <7787> 4535 <7788> <7788> 10640 <7789> <7789> 10639 <778b> <778b> 4538 <778c> <778c> 4536 <778d> <778d> 10637 <778e> <778e> 4534 <778f> <778f> 10638 <7791> <7791> 4537 <7793> <7793> 14381 <7795> <7795> 11238 <7797> <7797> 11240 <7798> <7798> 18190 <7799> <7799> 11239 <779a> <779a> 11231 <779b> <779b> 11235 <779c> <779c> 11234 <779d> <779d> 11232 <779e> <779f> 4872 <77a0> <77a0> 4871 <77a1> <77a1> 11233 <77a2> <77a3> 11236 <77a5> <77a5> 4874 <77a7> <77a7> 5148 <77a8> <77a8> 11712 <77aa> <77aa> 5145 <77ab> <77ab> 11706 <77ac> <77ac> 5147 <77ad> <77ad> 5149 <77af> <77af> 17125 <77b0> <77b0> 5146 <77b1> <77b1> 11711 <77b2> <77b2> 11707 <77b3> <77b3> 5144 <77b4> <77b4> 11710 <77b5> <77b5> 11705 <77b6> <77b6> 11709 <77b7> <77b7> 11708 <77b9> <77b9> 15987 endcidrange 100 begincidrange <77ba> <77ba> 12139 <77bb> <77bc> 5372 <77bd> <77bd> 5370 <77be> <77be> 18193 <77bf> <77bf> 5371 <77c2> <77c2> 12138 <77c3> <77c3> 15281 <77c4> <77c4> 12488 <77c5> <77c5> 16833 <77c7> <77c7> 5534 <77c9> <77ca> 12486 <77cb> <77cb> 18194 <77cc> <77cc> 12798 <77cd> <77cd> 12801 <77ce> <77cf> 12799 <77d0> <77d0> 13029 <77d3> <77d3> 5760 <77d4> <77d4> 13353 <77d5> <77d5> 13455 <77d7> <77d7> 5925 <77d8> <77d9> 13523 <77da> <77da> 5971 <77db> <77db> 871 <77dc> <77dc> 1978 <77de> <77de> 8760 <77e0> <77e0> 9420 <77e2> <77e2> 872 <77e3> <77e3> 1270 <77e5> <77e5> 1629 <77e6> <77e6> 16513 <77e7> <77e8> 7071 <77e9> <77e9> 2377 <77ec> <77ec> 8761 <77ed> <77ed> 3317 <77ee> <77ee> 3742 <77ef> <77ef> 5150 <77f0> <77f0> 11713 <77f1> <77f1> 12489 <77f2> <77f2> 12802 <77f3> <77f3> 873 <77f4> <77f4> 17129 <77f7> <77f7> 6686 <77f8> <77f8> 6681 <77f9> <77f9> 6683 <77fa> <77fa> 6685 <77fb> <77fb> 6684 <77fc> <77fc> 6682 <77fd> <77fd> 1630 <77fe> <77fe> 16341 <7802> <7802> 1979 <7803> <7803> 7081 <7805> <7805> 7076 <7806> <7806> 7073 <7808> <7808> 15942 <7809> <7809> 7080 <780c> <780d> 1981 <780e> <780e> 7079 <780f> <780f> 7078 <7810> <7810> 7077 <7811> <7812> 7074 <7813> <7813> 7082 <7814> <7814> 1980 <7818> <7818> 18195 <781c> <781c> 18196 <781d> <781d> 2381 <781e> <781e> 15123 <781f> <781f> 2387 <7820> <7820> 2386 <7821> <7821> 7535 <7822> <7822> 7529 <7823> <7823> 7527 <7825> <7825> 2384 <7826> <7826> 8123 <7827> <7827> 2379 <7828> <7828> 7532 <7829> <7829> 7536 <782a> <782a> 7538 <782b> <782b> 7534 <782c> <782c> 7528 <782d> <782d> 2385 <782e> <782e> 7533 <782f> <782f> 7531 <7830> <7830> 2378 <7831> <7831> 7539 <7832> <7832> 2388 <7833> <7833> 7537 <7834> <7834> 2382 <7835> <7835> 7530 <7837> <7837> 2383 <7838> <7838> 2380 <7839> <7839> 17366 <783c> <783c> 16410 <783d> <783d> 15466 <7842> <7842> 15044 <7843> <7843> 2880 <7844> <7844> 15403 <7845> <7845> 8124 <7847> <7847> 18197 <7848> <7848> 8117 <7849> <7849> 8119 endcidrange 100 begincidrange <784a> <784a> 8121 <784b> <784b> 15469 <784c> <784c> 8122 <784d> <784d> 8120 <784e> <784e> 2881 <7850> <7850> 8125 <7851> <7851> 18198 <7852> <7852> 8118 <7853> <7853> 16277 <7854> <7854> 15467 <785c> <785c> 8765 <785d> <785d> 3318 <785e> <785e> 8773 <7860> <7860> 8762 <7862> <7862> 8774 <7864> <7865> 8763 <7866> <7866> 18199 <7868> <7868> 8772 <7869> <7869> 8771 <786a> <786a> 8768 <786b> <786b> 2879 <786c> <786c> 3319 <786d> <786d> 8766 <786e> <786e> 8769 <786f> <786f> 3320 <7870> <7870> 8770 <7871> <7871> 8767 <7879> <7879> 9431 <787a> <787a> 16105 <787b> <787b> 9435 <787c> <787c> 3749 <787e> <787e> 10061 <787f> <787f> 3752 <7880> <7880> 9433 <7881> <7881> 14056 <7883> <7883> 9430 <7884> <7884> 9425 <7885> <7886> 9427 <7887> <7887> 9421 <7888> <7888> 15125 <7889> <7889> 3748 <788c> <788c> 3747 <788d> <788d> 15124 <788e> <788e> 3743 <788f> <788f> 9424 <7891> <7891> 3750 <7893> <7893> 3751 <7894> <7894> 9423 <7895> <7895> 9426 <7896> <7896> 9434 <7897> <7898> 3745 <7899> <7899> 9432 <789a> <789a> 9422 <789e> <789e> 10063 <789f> <789f> 4159 <78a0> <78a0> 10065 <78a1> <78a1> 9429 <78a2> <78a2> 10067 <78a3> <78a3> 4163 <78a4> <78a4> 10068 <78a5> <78a5> 10064 <78a7> <78a7> 4160 <78a8> <78a8> 10060 <78a9> <78a9> 4162 <78aa> <78aa> 10057 <78ab> <78ab> 10062 <78ac> <78ac> 10066 <78ad> <78ad> 10059 <78af> <78af> 17132 <78b0> <78b0> 3744 <78b1> <78b1> 17140 <78b2> <78b2> 10056 <78b3> <78b3> 4161 <78b4> <78b4> 10058 <78b6> <78b6> 15468 <78b8> <78b8> 17777 <78b9> <78b9> 15459 <78ba> <78ba> 4541 <78bb> <78bb> 10642 <78bc> <78bc> 4545 <78be> <78be> 4543 <78c1> <78c1> 4158 <78c3> <78c4> 10649 <78c5> <78c5> 4540 <78c7> <78c7> 17133 <78c8> <78c8> 10648 <78c9> <78c9> 10651 <78ca> <78ca> 4542 <78cb> <78cb> 4539 <78cc> <78cc> 10644 <78cd> <78cd> 10641 <78ce> <78ce> 10646 <78cf> <78cf> 10643 <78d0> <78d0> 4546 <78d1> <78d1> 10645 <78d2> <78d2> 15126 <78d3> <78d3> 17134 <78d4> <78d4> 10647 <78d5> <78d5> 4544 <78d7> <78d7> 17138 endcidrange 100 begincidrange <78d8> <78d8> 16268 <78da> <78da> 4876 <78db> <78db> 11247 <78dd> <78dd> 11241 <78de> <78de> 11245 <78df> <78e0> 11251 <78e1> <78e2> 11248 <78e3> <78e3> 11246 <78e5> <78e5> 11243 <78e7> <78e7> 4878 <78e8> <78e8> 4875 <78e9> <78e9> 11242 <78ea> <78ea> 11244 <78ec> <78ec> 4877 <78ed> <78ed> 11250 <78ee> <78ee> 14977 <78ef> <78ef> 5154 <78f0> <78f0> 15162 <78f1> <78f1> 16574 <78f2> <78f2> 11720 <78f3> <78f3> 11714 <78f4> <78f4> 5153 <78f5> <78f5> 14515 <78f7> <78f7> 5151 <78f9> <78f9> 11722 <78fa> <78fa> 5152 <78fb> <78fc> 11717 <78fd> <78fd> 11715 <78fe> <78fe> 11723 <78ff> <78ff> 11719 <7901> <7901> 5155 <7902> <7902> 11716 <7904> <7904> 11724 <7905> <7905> 11721 <7906> <7906> 16335 <7909> <7909> 12143 <790c> <790c> 12140 <790e> <790e> 5374 <7910> <7910> 12144 <7911> <7911> 12146 <7912> <7912> 12145 <7913> <7914> 12141 <7917> <7917> 12494 <7919> <7919> 5535 <791b> <791b> 12491 <791c> <791c> 12493 <791d> <791d> 12490 <791e> <791e> 12495 <7921> <7921> 12492 <7923> <7923> 12804 <7924> <7924> 12807 <7925> <7925> 12803 <7926> <7926> 5668 <7927> <7928> 12805 <7929> <7929> 12808 <792a> <792a> 5669 <792b> <792b> 5671 <792c> <792c> 5670 <792d> <792d> 13030 <792e> <792e> 17136 <792f> <792f> 13032 <7931> <7931> 13031 <7932> <7932> 18203 <7933> <7933> 18202 <7934> <7934> 17139 <7935> <7935> 13207 <7936> <7936> 14211 <7938> <7938> 13456 <7939> <7939> 13525 <793a> <793a> 874 <793b> <793b> 17655 <793c> <793c> 17152 <793d> <793d> 6359 <793e> <793e> 1631 <793f> <793f> 6688 <7940> <7941> 1632 <7942> <7942> 6687 <7944> <7944> 7087 <7945> <7945> 7086 <7946> <7946> 1983 <7947> <7947> 1986 <7948> <7948> 1985 <7949> <7949> 1984 <794a> <794a> 7083 <794b> <794b> 7085 <794c> <794c> 7084 <794f> <794f> 7542 <7950> <7950> 2390 <7951> <7951> 7546 <7952> <7952> 7545 <7953> <7953> 7544 <7954> <7954> 7540 <7955> <7955> 2389 <7956> <7956> 2393 <7957> <7957> 2396 <7958> <7958> 14309 <7959> <7959> 15128 <795a> <795a> 2397 <795b> <795b> 7541 <795c> <795c> 7543 endcidrange 100 begincidrange <795d> <795d> 2395 <795e> <795e> 2394 <795f> <795f> 2392 <7960> <7960> 2391 <7961> <7961> 8132 <7962> <7962> 15997 <7963> <7963> 8130 <7964> <7964> 8126 <7965> <7965> 2882 <7967> <7967> 8127 <7968> <7968> 2883 <7969> <796a> 8128 <796b> <796b> 8131 <796d> <796d> 2884 <7970> <7970> 8778 <7971> <7971> 16744 <7972> <7972> 8777 <7973> <7973> 8776 <7974> <7974> 8775 <7979> <7979> 9439 <797a> <797a> 3753 <797c> <797c> 9436 <797d> <797d> 9438 <797e> <797e> 15910 <797f> <797f> 3754 <7980> <7980> 17148 <7981> <7981> 3755 <7982> <7982> 9437 <7983> <7983> 15862 <7986> <7986> 17145 <7987> <7987> 17800 <7988> <7988> 10077 <798a> <798b> 10070 <798d> <798d> 4166 <798e> <798f> 4164 <7990> <7990> 10079 <7991> <7991> 18205 <7992> <7992> 10078 <7993> <7993> 10075 <7994> <7994> 10074 <7995> <7995> 10073 <7996> <7996> 10072 <7997> <7997> 10076 <7998> <7998> 10069 <7999> <7999> 17404 <799a> <799a> 10652 <799b> <799b> 10657 <799c> <799c> 10655 <799d> <799d> 17150 <799f> <799f> 14686 <79a0> <79a0> 10654 <79a1> <79a1> 10653 <79a2> <79a2> 10656 <79a4> <79a4> 11253 <79a5> <79a5> 15134 <79a6> <79a6> 4879 <79a7> <79a7> 5156 <79a8> <79a8> 11726 <79a9> <79a9> 17153 <79aa> <79aa> 5157 <79ab> <79ab> 11725 <79ac> <79ac> 12148 <79ad> <79ad> 12147 <79ae> <79ae> 5375 <79b0> <79b0> 12496 <79b1> <79b1> 5536 <79b2> <79b2> 12809 <79b3> <79b3> 5839 <79b4> <79b4> 13208 <79b6> <79b6> 13458 <79b7> <79b7> 13457 <79b8> <79b8> 6066 <79b9> <79ba> 1987 <79bb> <79bb> 8133 <79bd> <79bd> 3757 <79be> <79be> 875 <79bf> <79bf> 1273 <79c0> <79c0> 1272 <79c1> <79c1> 1271 <79c4> <79c4> 15565 <79c5> <79c5> 6689 <79c6> <79c6> 17157 <79c8> <79c8> 1635 <79c9> <79c9> 1634 <79cb> <79cb> 1991 <79cc> <79cc> 16947 <79cd> <79cd> 7089 <79ce> <79ce> 7092 <79cf> <79cf> 7090 <79d1> <79d2> 1989 <79d4> <79d4> 17159 <79d5> <79d5> 7088 <79d6> <79d6> 7091 <79d8> <79d8> 2404 <79dc> <79dc> 7553 <79dd> <79dd> 7555 <79de> <79de> 7554 <79df> <79df> 2401 <79e0> <79e0> 7549 <79e2> <79e2> 15450 endcidrange 100 begincidrange <79e3> <79e3> 2399 <79e4> <79e4> 2398 <79e6> <79e6> 2402 <79e7> <79e7> 2400 <79e9> <79e9> 2403 <79ea> <79ea> 7552 <79eb> <79ec> 7547 <79ed> <79ed> 7551 <79ee> <79ee> 7550 <79f1> <79f1> 15143 <79f4> <79f4> 15138 <79f6> <79f7> 8136 <79f8> <79f8> 8135 <79fa> <79fa> 8134 <79fb> <79fb> 2885 <7a00> <7a00> 3325 <7a02> <7a02> 8779 <7a03> <7a03> 8781 <7a04> <7a04> 8783 <7a05> <7a05> 3324 <7a06> <7a06> 18206 <7a08> <7a08> 3322 <7a0a> <7a0a> 8780 <7a0b> <7a0b> 3323 <7a0c> <7a0c> 8782 <7a0d> <7a0d> 3321 <7a10> <7a10> 9449 <7a11> <7a11> 9440 <7a12> <7a12> 9443 <7a13> <7a13> 9447 <7a14> <7a14> 3761 <7a15> <7a15> 9445 <7a17> <7a17> 9444 <7a18> <7a19> 9441 <7a1a> <7a1a> 3759 <7a1b> <7a1b> 9448 <7a1c> <7a1c> 3758 <7a1e> <7a1e> 3763 <7a1f> <7a1f> 3762 <7a20> <7a20> 3760 <7a22> <7a22> 9446 <7a26> <7a26> 10085 <7a28> <7a28> 10084 <7a2b> <7a2b> 10080 <7a2d> <7a2d> 16346 <7a2e> <7a2e> 4167 <7a2f> <7a2f> 10083 <7a30> <7a30> 10082 <7a31> <7a31> 4168 <7a37> <7a37> 4551 <7a39> <7a39> 10659 <7a3a> <7a3a> 15137 <7a3b> <7a3b> 4552 <7a3c> <7a3c> 4548 <7a3d> <7a3d> 4550 <7a3e> <7a3e> 16267 <7a3f> <7a3f> 4547 <7a40> <7a40> 4549 <7a43> <7a43> 14700 <7a44> <7a44> 11254 <7a45> <7a45> 15857 <7a46> <7a46> 4882 <7a47> <7a47> 11256 <7a48> <7a48> 11255 <7a49> <7a49> 14131 <7a4a> <7a4a> 10081 <7a4b> <7a4b> 4884 <7a4c> <7a4c> 4883 <7a4d> <7a4e> 4880 <7a54> <7a54> 11731 <7a56> <7a56> 11729 <7a57> <7a57> 5158 <7a58> <7a58> 11730 <7a5a> <7a5a> 11732 <7a5b> <7a5b> 11728 <7a5c> <7a5c> 11727 <7a5f> <7a5f> 12149 <7a60> <7a60> 5378 <7a61> <7a62> 5376 <7a65> <7a65> 14134 <7a67> <7a68> 12497 <7a69> <7a69> 5538 <7a6b> <7a6b> 5537 <7a6c> <7a6d> 12811 <7a6e> <7a6e> 12810 <7a70> <7a71> 13209 <7a74> <7a74> 876 <7a75> <7a75> 6161 <7a76> <7a76> 1274 <7a78> <7a78> 6690 <7a79> <7a79> 1637 <7a7a> <7a7a> 1636 <7a7b> <7a7b> 6691 <7a7d> <7a7d> 14135 <7a7e> <7a7e> 7094 <7a7f> <7a7f> 1992 <7a80> <7a80> 7093 <7a81> <7a81> 1993 <7a83> <7a83> 15741 <7a84> <7a84> 2405 endcidrange 100 begincidrange <7a85> <7a85> 7558 <7a86> <7a86> 7556 <7a87> <7a87> 7562 <7a88> <7a88> 2406 <7a89> <7a89> 7557 <7a8a> <7a8a> 7561 <7a8b> <7a8c> 7559 <7a8f> <7a8f> 8138 <7a90> <7a90> 8140 <7a91> <7a91> 17368 <7a92> <7a92> 2886 <7a94> <7a94> 8139 <7a95> <7a95> 2887 <7a96> <7a96> 3328 <7a97> <7a97> 3327 <7a98> <7a98> 3326 <7a99> <7a99> 8784 <7a9e> <7a9e> 9452 <7a9f> <7aa0> 3764 <7aa2> <7aa2> 9451 <7aa3> <7aa3> 9450 <7aa8> <7aa8> 10086 <7aa9> <7aa9> 4170 <7aaa> <7aaa> 4169 <7aab> <7aac> 10087 <7aae> <7aae> 4554 <7aaf> <7aaf> 4553 <7ab0> <7ab0> 14138 <7ab1> <7ab1> 11260 <7ab2> <7ab2> 10660 <7ab3> <7ab3> 10662 <7ab4> <7ab4> 10661 <7ab5> <7ab5> 11259 <7ab6> <7ab6> 11257 <7ab7> <7ab7> 11261 <7ab8> <7ab8> 11258 <7aba> <7aba> 4885 <7abb> <7abb> 14137 <7abc> <7abc> 18209 <7abe> <7abe> 11733 <7abf> <7abf> 5159 <7ac0> <7ac1> 11734 <7ac2> <7ac3> 14139 <7ac4> <7ac5> 5379 <7ac7> <7ac7> 5672 <7ac8> <7ac8> 15743 <7ac9> <7ac9> 17776 <7aca> <7aca> 5887 <7acb> <7acb> 877 <7acf> <7acf> 18212 <7ad1> <7ad1> 7095 <7ad3> <7ad3> 16266 <7ad8> <7ad8> 7563 <7ad9> <7ad9> 2407 <7ada> <7ada> 14144 <7adb> <7adb> 18213 <7adc> <7adc> 14673 <7add> <7add> 14145 <7adf> <7adf> 3038 <7ae0> <7ae0> 3037 <7ae2> <7ae2> 15155 <7ae3> <7ae3> 3330 <7ae4> <7ae4> 8786 <7ae5> <7ae5> 3329 <7ae6> <7ae6> 8785 <7ae7> <7ae7> 14429 <7ae9> <7ae9> 14385 <7aea> <7aea> 14146 <7aeb> <7aeb> 9453 <7aed> <7aed> 4171 <7aee> <7aee> 10089 <7aef> <7aef> 4172 <7af6> <7af6> 5673 <7af7> <7af7> 12813 <7af9> <7af9> 1014 <7afa> <7afa> 1638 <7afb> <7afb> 6692 <7afd> <7afd> 1995 <7afe> <7afe> 15165 <7aff> <7aff> 1994 <7b00> <7b01> 7096 <7b04> <7b04> 7565 <7b05> <7b05> 7567 <7b06> <7b06> 2408 <7b08> <7b08> 7569 <7b09> <7b09> 7572 <7b0a> <7b0a> 7570 <7b0b> <7b0b> 14150 <7b0c> <7b0c> 15203 <7b0e> <7b0e> 7571 <7b0f> <7b0f> 7568 <7b10> <7b10> 7564 <7b11> <7b11> 2409 <7b12> <7b12> 7573 <7b13> <7b13> 7566 <7b14> <7b14> 16247 <7b18> <7b18> 8149 <7b19> <7b19> 2893 <7b1a> <7b1a> 8158 <7b1b> <7b1b> 2890 endcidrange 100 begincidrange <7b1d> <7b1d> 8151 <7b1e> <7b1e> 2894 <7b1f> <7b1f> 16145 <7b20> <7b20> 2888 <7b22> <7b22> 8146 <7b23> <7b23> 8159 <7b24> <7b24> 8147 <7b25> <7b25> 8144 <7b26> <7b26> 2892 <7b27> <7b27> 15199 <7b28> <7b28> 2889 <7b29> <7b29> 14152 <7b2a> <7b2a> 8150 <7b2b> <7b2b> 8153 <7b2c> <7b2c> 2891 <7b2d> <7b2d> 8154 <7b2e> <7b2e> 2895 <7b2f> <7b2f> 8155 <7b30> <7b30> 8145 <7b31> <7b31> 8152 <7b32> <7b32> 8156 <7b33> <7b33> 8148 <7b34> <7b34> 8143 <7b35> <7b35> 8141 <7b38> <7b38> 8157 <7b39> <7b39> 15726 <7b3b> <7b3b> 8142 <7b40> <7b40> 8793 <7b42> <7b42> 15853 <7b43> <7b43> 15909 <7b44> <7b44> 8789 <7b45> <7b45> 8795 <7b46> <7b46> 3333 <7b47> <7b47> 8788 <7b48> <7b48> 8790 <7b49> <7b49> 3331 <7b4a> <7b4a> 8787 <7b4b> <7b4b> 3338 <7b4c> <7b4c> 8791 <7b4d> <7b4d> 3337 <7b4e> <7b4e> 8792 <7b4f> <7b4f> 3339 <7b50> <7b50> 3334 <7b51> <7b51> 3340 <7b52> <7b52> 3335 <7b54> <7b54> 3336 <7b55> <7b55> 14151 <7b56> <7b56> 3332 <7b58> <7b58> 8794 <7b60> <7b60> 3768 <7b61> <7b61> 9464 <7b62> <7b62> 18215 <7b63> <7b63> 9467 <7b64> <7b64> 9455 <7b65> <7b65> 9460 <7b66> <7b66> 9454 <7b67> <7b67> 3770 <7b69> <7b69> 9458 <7b6c> <7b6c> 18216 <7b6d> <7b6d> 9456 <7b6e> <7b6e> 3769 <7b6f> <7b6f> 14156 <7b70> <7b70> 9463 <7b71> <7b71> 9462 <7b72> <7b72> 9459 <7b73> <7b73> 9461 <7b74> <7b74> 9457 <7b75> <7b75> 4176 <7b76> <7b76> 9466 <7b77> <7b77> 3766 <7b78> <7b78> 9465 <7b7b> <7b7b> 18217 <7b82> <7b82> 10105 <7b84> <7b84> 4183 <7b85> <7b85> 10100 <7b87> <7b87> 4182 <7b88> <7b88> 10090 <7b8a> <7b8a> 10092 <7b8b> <7b8b> 4175 <7b8c> <7b8c> 10097 <7b8d> <7b8d> 10096 <7b8e> <7b8e> 10099 <7b8f> <7b8f> 4180 <7b90> <7b90> 10094 <7b91> <7b91> 10093 <7b92> <7b92> 14162 <7b94> <7b94> 4179 <7b95> <7b95> 4174 <7b96> <7b96> 10095 <7b97> <7b97> 4177 <7b98> <7b98> 10101 <7b99> <7b99> 10103 <7b9b> <7b9b> 10098 <7b9c> <7b9c> 10091 <7b9d> <7b9d> 4178 <7ba0> <7ba0> 4562 <7ba1> <7ba1> 4173 <7ba2> <7ba2> 14155 <7ba3> <7ba3> 16148 <7ba4> <7ba4> 10104 endcidrange 100 begincidrange <7bac> <7bac> 10666 <7bad> <7bad> 4555 <7baf> <7baf> 10668 <7bb1> <7bb1> 4556 <7bb2> <7bb2> 17948 <7bb4> <7bb4> 4558 <7bb5> <7bb5> 10671 <7bb7> <7bb7> 10663 <7bb8> <7bb8> 4181 <7bb9> <7bb9> 10669 <7bbe> <7bbe> 10665 <7bc0> <7bc0> 3767 <7bc1> <7bc1> 4561 <7bc4> <7bc4> 4557 <7bc6> <7bc7> 4559 <7bc9> <7bc9> 4888 <7bca> <7bca> 10670 <7bcb> <7bcb> 10664 <7bcc> <7bcc> 4563 <7bce> <7bce> 10667 <7bcf> <7bcf> 16152 <7bd0> <7bd0> 14160 <7bd4> <7bd4> 11271 <7bd5> <7bd5> 11266 <7bd8> <7bd8> 11276 <7bd9> <7bd9> 4886 <7bda> <7bda> 11268 <7bdb> <7bdb> 4890 <7bdc> <7bdc> 11274 <7bdd> <7bdd> 11265 <7bde> <7bde> 11262 <7bdf> <7bdf> 11277 <7be0> <7be0> 5165 <7be1> <7be1> 4891 <7be2> <7be2> 11273 <7be3> <7be3> 11263 <7be4> <7be4> 4889 <7be5> <7be5> 11267 <7be6> <7be6> 4893 <7be7> <7be7> 11264 <7be8> <7be8> 11269 <7be9> <7be9> 4892 <7bea> <7bea> 11272 <7beb> <7beb> 11275 <7bf0> <7bf1> 11753 <7bf2> <7bf2> 11738 <7bf3> <7bf3> 11745 <7bf4> <7bf4> 11743 <7bf7> <7bf7> 5163 <7bf8> <7bf8> 11750 <7bf9> <7bf9> 11270 <7bfa> <7bfa> 14167 <7bfb> <7bfb> 11741 <7bfc> <7bfc> 16159 <7bfd> <7bfd> 11751 <7bfe> <7bfe> 5162 <7bff> <7bff> 11740 <7c00> <7c00> 11739 <7c01> <7c01> 11749 <7c02> <7c02> 11746 <7c03> <7c03> 11748 <7c05> <7c05> 11736 <7c06> <7c06> 11752 <7c07> <7c07> 5160 <7c09> <7c09> 11747 <7c0a> <7c0a> 11756 <7c0b> <7c0b> 11744 <7c0c> <7c0c> 5164 <7c0d> <7c0d> 5161 <7c0e> <7c0e> 11742 <7c0f> <7c0f> 11737 <7c10> <7c10> 11755 <7c11> <7c11> 4887 <7c12> <7c12> 18218 <7c15> <7c15> 16481 <7c19> <7c19> 12152 <7c1b> <7c1b> 17369 <7c1c> <7c1c> 12150 <7c1d> <7c1d> 12156 <7c1e> <7c1e> 5384 <7c1f> <7c1f> 12154 <7c20> <7c20> 12153 <7c21> <7c21> 5386 <7c22> <7c22> 12159 <7c23> <7c23> 5385 <7c25> <7c25> 12160 <7c26> <7c26> 12157 <7c27> <7c27> 5382 <7c28> <7c28> 12158 <7c29> <7c29> 12151 <7c2a> <7c2a> 5383 <7c2b> <7c2b> 5381 <7c2c> <7c2c> 12502 <7c2d> <7c2d> 12155 <7c30> <7c30> 12161 <7c33> <7c33> 12499 <7c35> <7c35> 14169 <7c37> <7c37> 5543 <7c38> <7c38> 5541 <7c39> <7c39> 12501 endcidrange 100 begincidrange <7c3b> <7c3b> 12503 <7c3c> <7c3c> 12500 <7c3d> <7c3d> 5542 <7c3e> <7c3f> 5539 <7c40> <7c40> 5544 <7c42> <7c42> 16156 <7c43> <7c43> 5675 <7c44> <7c44> 14171 <7c45> <7c45> 12818 <7c47> <7c47> 12817 <7c48> <7c48> 12815 <7c49> <7c49> 12814 <7c4a> <7c4a> 12816 <7c4c> <7c4c> 5674 <7c4d> <7c4d> 5676 <7c50> <7c50> 5761 <7c51> <7c51> 16312 <7c53> <7c53> 13034 <7c54> <7c54> 13033 <7c56> <7c56> 16127 <7c57> <7c57> 13211 <7c59> <7c59> 13213 <7c5a> <7c5a> 13215 <7c5b> <7c5b> 13214 <7c5c> <7c5c> 13212 <7c5d> <7c5d> 15167 <7c5f> <7c5f> 5841 <7c60> <7c60> 5840 <7c63> <7c63> 5889 <7c64> <7c64> 5888 <7c65> <7c65> 5890 <7c66> <7c66> 13355 <7c67> <7c67> 13354 <7c69> <7c69> 13526 <7c6a> <7c6a> 13459 <7c6b> <7c6b> 13527 <7c6c> <7c6c> 5957 <7c6d> <7c6d> 15168 <7c6e> <7c6e> 5958 <7c6f> <7c6f> 13575 <7c70> <7c70> 16210 <7c72> <7c72> 5995 <7c73> <7c73> 1015 <7c74> <7c74> 18076 <7c75> <7c75> 6693 <7c78> <7c79> 7099 <7c7a> <7c7a> 7098 <7c7b> <7c7b> 18221 <7c7c> <7c7c> 15177 <7c7d> <7c7d> 1996 <7c7e> <7c7e> 16154 <7c7f> <7c81> 7101 <7c83> <7c83> 14172 <7c84> <7c84> 7574 <7c85> <7c85> 7580 <7c86> <7c86> 16157 <7c88> <7c88> 7578 <7c89> <7c89> 2410 <7c8a> <7c8a> 7576 <7c8c> <7c8c> 7577 <7c8d> <7c8d> 7579 <7c8e> <7c8e> 15176 <7c91> <7c91> 7575 <7c92> <7c92> 2896 <7c94> <7c94> 8160 <7c95> <7c95> 2898 <7c96> <7c96> 8162 <7c97> <7c97> 2897 <7c98> <7c98> 8161 <7c9c> <7c9c> 18222 <7c9e> <7c9e> 8797 <7c9f> <7c9f> 3341 <7ca1> <7ca1> 8799 <7ca2> <7ca2> 8796 <7ca3> <7ca3> 8163 <7ca5> <7ca5> 3342 <7ca6> <7ca6> 14174 <7ca7> <7ca7> 14061 <7ca8> <7ca8> 8798 <7cac> <7cac> 14469 <7cae> <7cae> 15178 <7caf> <7caf> 9470 <7cb1> <7cb1> 3771 <7cb2> <7cb2> 9468 <7cb3> <7cb3> 3772 <7cb4> <7cb4> 9469 <7cb5> <7cb5> 3773 <7cb8> <7cb8> 18224 <7cb9> <7cb9> 4184 <7cba> <7cba> 10109 <7cbb> <7cbb> 10106 <7cbc> <7cbc> 10108 <7cbd> <7cbe> 4185 <7cbf> <7cbf> 10107 <7cc2> <7cc2> 16343 <7cc5> <7cc5> 10672 <7cc7> <7cc7> 14177 <7cc8> <7cc8> 10673 <7cc9> <7cc9> 14176 <7cca> <7cca> 4564 endcidrange 100 begincidrange <7ccb> <7ccb> 10675 <7ccc> <7ccc> 10674 <7ccd> <7ccd> 15173 <7cce> <7cce> 289 <7cd0> <7cd1> 11281 <7cd2> <7cd2> 11278 <7cd3> <7cd3> 15708 <7cd4> <7cd4> 11279 <7cd5> <7cd6> 4894 <7cd7> <7cd7> 11280 <7cd9> <7cd9> 5171 <7cda> <7cda> 16345 <7cdc> <7cdc> 5167 <7cdd> <7cdd> 5172 <7cde> <7cde> 5168 <7cdf> <7cdf> 5170 <7ce0> <7ce0> 5166 <7ce2> <7ce2> 5169 <7ce6> <7ce6> 14178 <7ce7> <7ce7> 5387 <7ce8> <7ce8> 11757 <7cea> <7cea> 12505 <7cec> <7cec> 12504 <7ced> <7ced> 17370 <7cee> <7cee> 12819 <7cef> <7cf0> 5677 <7cf1> <7cf1> 13217 <7cf2> <7cf2> 13035 <7cf3> <7cf3> 14180 <7cf4> <7cf4> 13216 <7cf5> <7cf5> 14181 <7cf6> <7cf6> 13528 <7cf7> <7cf7> 13597 <7cf8> <7cf8> 1016 <7cf9> <7cf9> 17656 <7cfb> <7cfb> 1275 <7cfc> <7cfc> 17773 <7cfd> <7cfd> 6694 <7cfe> <7cfe> 1639 <7d00> <7d00> 1999 <7d01> <7d01> 7106 <7d02> <7d02> 1997 <7d03> <7d03> 7104 <7d04> <7d04> 2002 <7d05> <7d05> 1998 <7d06> <7d06> 2003 <7d07> <7d07> 2001 <7d08> <7d08> 7105 <7d09> <7d09> 2000 <7d0a> <7d0a> 2414 <7d0b> <7d0b> 2413 <7d0c> <7d0c> 7591 <7d0d> <7d0d> 2422 <7d0e> <7d0e> 7584 <7d0f> <7d0f> 7590 <7d10> <7d10> 2418 <7d11> <7d11> 7583 <7d12> <7d12> 7589 <7d13> <7d13> 7587 <7d14> <7d14> 2417 <7d15> <7d15> 2419 <7d16> <7d16> 7586 <7d17> <7d17> 2412 <7d18> <7d18> 7585 <7d19> <7d19> 2423 <7d1a> <7d1a> 2420 <7d1b> <7d1b> 2424 <7d1c> <7d1c> 2421 <7d1d> <7d1d> 7582 <7d1e> <7d1e> 7581 <7d1f> <7d1f> 7588 <7d20> <7d20> 2415 <7d21> <7d21> 2411 <7d22> <7d22> 2416 <7d25> <7d25> 16094 <7d28> <7d28> 8178 <7d29> <7d29> 8171 <7d2b> <7d2b> 3347 <7d2c> <7d2c> 8170 <7d2e> <7d2e> 2902 <7d2f> <7d2f> 2909 <7d30> <7d30> 2906 <7d31> <7d31> 2912 <7d32> <7d32> 2911 <7d33> <7d33> 2907 <7d35> <7d35> 8164 <7d36> <7d36> 8167 <7d38> <7d38> 8166 <7d39> <7d39> 2903 <7d3a> <7d3a> 8168 <7d3b> <7d3b> 8177 <7d3c> <7d3c> 2904 <7d3d> <7d3d> 8165 <7d3e> <7d3f> 8174 <7d40> <7d40> 2905 <7d41> <7d41> 8172 <7d42> <7d42> 2910 <7d43> <7d43> 2900 <7d44> <7d44> 2908 <7d45> <7d45> 8169 endcidrange 100 begincidrange <7d46> <7d46> 2899 <7d47> <7d47> 8173 <7d4a> <7d4a> 8176 <7d4d> <7d4d> 16349 <7d4e> <7d4e> 8816 <7d4f> <7d4f> 8807 <7d50> <7d50> 3344 <7d51> <7d51> 8814 <7d52> <7d52> 8811 <7d53> <7d53> 8803 <7d54> <7d54> 8812 <7d55> <7d55> 3346 <7d56> <7d56> 8804 <7d58> <7d58> 8800 <7d5a> <7d5a> 16019 <7d5b> <7d5b> 3779 <7d5c> <7d5c> 8809 <7d5d> <7d5d> 14185 <7d5e> <7d5e> 3343 <7d5f> <7d5f> 8815 <7d61> <7d61> 3350 <7d62> <7d62> 3352 <7d63> <7d63> 8802 <7d66> <7d66> 3351 <7d67> <7d67> 8805 <7d68> <7d68> 3345 <7d69> <7d69> 8813 <7d6a> <7d6a> 8806 <7d6b> <7d6b> 8810 <7d6d> <7d6d> 8808 <7d6e> <7d6e> 3348 <7d6f> <7d6f> 8801 <7d70> <7d70> 3353 <7d71> <7d71> 2901 <7d72> <7d72> 3349 <7d73> <7d73> 3354 <7d79> <7d79> 3775 <7d7a> <7d7a> 9477 <7d7b> <7d7b> 9479 <7d7c> <7d7c> 9481 <7d7d> <7d7d> 9485 <7d7f> <7d7f> 9475 <7d80> <7d80> 9473 <7d81> <7d81> 3777 <7d83> <7d83> 9480 <7d84> <7d84> 9484 <7d85> <7d85> 9476 <7d86> <7d86> 9472 <7d88> <7d88> 9471 <7d89> <7d89> 14187 <7d8c> <7d8c> 9482 <7d8d> <7d8d> 9474 <7d8e> <7d8e> 9478 <7d8f> <7d8f> 3778 <7d91> <7d91> 3776 <7d92> <7d92> 9486 <7d93> <7d93> 3774 <7d94> <7d94> 9483 <7d96> <7d96> 10126 <7d97> <7d97> 15187 <7d9c> <7d9c> 4189 <7d9d> <7d9d> 10118 <7d9e> <7d9e> 4577 <7d9f> <7d9f> 10128 <7da0> <7da0> 4192 <7da1> <7da1> 10132 <7da2> <7da2> 4198 <7da3> <7da3> 10113 <7da4> <7da4> 18135 <7da6> <7da6> 10129 <7da7> <7da7> 10110 <7da8> <7da8> 15516 <7da9> <7da9> 10131 <7daa> <7daa> 10114 <7dab> <7dab> 14188 <7dac> <7dac> 4205 <7dad> <7dad> 4202 <7dae> <7dae> 10130 <7daf> <7daf> 10124 <7db0> <7db0> 4188 <7db1> <7db1> 4196 <7db2> <7db2> 4195 <7db3> <7db3> 14190 <7db4> <7db4> 4194 <7db5> <7db5> 4200 <7db7> <7db7> 10111 <7db8> <7db8> 4201 <7db9> <7db9> 10125 <7dba> <7dba> 4197 <7dbb> <7dbb> 4187 <7dbc> <7dbc> 10127 <7dbd> <7dbe> 4190 <7dbf> <7dbf> 4199 <7dc0> <7dc0> 10116 <7dc1> <7dc1> 10115 <7dc2> <7dc2> 10112 <7dc4> <7dc4> 10120 <7dc5> <7dc5> 10117 <7dc6> <7dc6> 10121 <7dc7> <7dc7> 4204 endcidrange 100 begincidrange <7dc9> <7dc9> 10133 <7dca> <7dca> 4193 <7dcb> <7dcc> 10122 <7dcd> <7dcd> 17774 <7dce> <7dce> 10119 <7dcf> <7dcf> 18229 <7dd0> <7dd0> 18231 <7dd2> <7dd2> 4203 <7dd3> <7dd3> 15182 <7dd4> <7dd4> 18230 <7dd6> <7dd6> 14191 <7dd7> <7dd7> 10680 <7dd8> <7dd8> 4569 <7dd9> <7dd9> 4578 <7dda> <7dda> 4574 <7ddb> <7ddb> 10677 <7ddc> <7ddc> 15180 <7ddd> <7ddd> 4571 <7dde> <7dde> 4575 <7ddf> <7ddf> 10689 <7de0> <7de0> 4565 <7de1> <7de1> 10681 <7de3> <7de3> 4573 <7de4> <7de4> 14194 <7de5> <7de5> 14198 <7de6> <7de6> 10684 <7de7> <7de7> 10679 <7de8> <7de8> 4572 <7de9> <7de9> 4576 <7dea> <7dea> 10678 <7dec> <7dec> 4570 <7dee> <7dee> 10688 <7def> <7def> 4567 <7df0> <7df0> 10687 <7df1> <7df1> 10686 <7df2> <7df2> 4579 <7df3> <7df3> 10440 <7df4> <7df4> 4566 <7df5> <7df5> 14196 <7df6> <7df6> 10685 <7df7> <7df7> 10676 <7df9> <7df9> 4580 <7dfa> <7dfa> 10683 <7dfb> <7dfb> 4568 <7dfd> <7dfd> 18232 <7dfe> <7dfe> 15567 <7e03> <7e03> 10682 <7e07> <7e07> 15181 <7e08> <7e08> 4898 <7e09> <7e09> 4903 <7e0a> <7e0a> 4896 <7e0b> <7e0b> 11295 <7e0c> <7e0c> 11286 <7e0d> <7e0d> 11298 <7e0e> <7e0e> 11290 <7e0f> <7e0f> 11296 <7e10> <7e10> 4904 <7e11> <7e11> 4897 <7e12> <7e12> 11283 <7e13> <7e13> 11289 <7e14> <7e14> 11299 <7e15> <7e15> 11292 <7e16> <7e16> 11297 <7e17> <7e17> 11285 <7e1a> <7e1a> 11293 <7e1b> <7e1b> 4899 <7e1c> <7e1c> 11291 <7e1d> <7e1d> 4902 <7e1e> <7e1e> 4901 <7e1f> <7e20> 11287 <7e21> <7e21> 11284 <7e22> <7e22> 11294 <7e23> <7e23> 4900 <7e24> <7e24> 11301 <7e25> <7e25> 11300 <7e27> <7e27> 14207 <7e29> <7e29> 11768 <7e2a> <7e2a> 11764 <7e2b> <7e2b> 5179 <7e2d> <7e2d> 11758 <7e2e> <7e2e> 5173 <7e2f> <7e2f> 5189 <7e30> <7e30> 11770 <7e31> <7e31> 5181 <7e32> <7e32> 5177 <7e33> <7e33> 11761 <7e34> <7e34> 5184 <7e35> <7e35> 5187 <7e36> <7e36> 11772 <7e37> <7e37> 5176 <7e38> <7e38> 11763 <7e39> <7e39> 5185 <7e3a> <7e3a> 11774 <7e3b> <7e3b> 11771 <7e3c> <7e3c> 11759 <7e3d> <7e3d> 5180 <7e3e> <7e3e> 5174 <7e3f> <7e3f> 5188 <7e40> <7e40> 11766 <7e41> <7e41> 5183 endcidrange 100 begincidrange <7e42> <7e42> 11760 <7e43> <7e43> 5178 <7e44> <7e44> 11773 <7e45> <7e45> 5182 <7e46> <7e46> 5175 <7e47> <7e47> 11767 <7e48> <7e48> 5186 <7e49> <7e49> 11765 <7e4c> <7e4c> 11769 <7e50> <7e50> 12163 <7e51> <7e51> 12169 <7e52> <7e52> 5393 <7e53> <7e53> 12172 <7e54> <7e55> 5388 <7e56> <7e56> 12164 <7e57> <7e57> 12171 <7e58> <7e58> 12166 <7e59> <7e59> 5394 <7e5a> <7e5a> 5391 <7e5c> <7e5c> 12162 <7e5e> <7e5e> 5390 <7e5f> <7e5f> 12168 <7e60> <7e60> 12170 <7e61> <7e61> 5392 <7e62> <7e62> 12167 <7e63> <7e63> 12165 <7e65> <7e65> 18130 <7e67> <7e67> 14182 <7e68> <7e68> 12515 <7e69> <7e6a> 5548 <7e6b> <7e6b> 5545 <7e6d> <7e6d> 5546 <7e6e> <7e6e> 14203 <7e6f> <7e6f> 12511 <7e70> <7e70> 12509 <7e72> <7e72> 12513 <7e73> <7e73> 5550 <7e74> <7e74> 12514 <7e75> <7e75> 12507 <7e76> <7e76> 12506 <7e77> <7e77> 12510 <7e78> <7e78> 12508 <7e79> <7e79> 5547 <7e7a> <7e7a> 12512 <7e7b> <7e7b> 12820 <7e7c> <7e7c> 5681 <7e7d> <7e7d> 5680 <7e7e> <7e7e> 12821 <7e7f> <7e7f> 15953 <7e80> <7e80> 12823 <7e81> <7e81> 12822 <7e82> <7e82> 5682 <7e86> <7e86> 13040 <7e87> <7e88> 13037 <7e8a> <7e8a> 13036 <7e8b> <7e8b> 13039 <7e8c> <7e8c> 5763 <7e8d> <7e8d> 13041 <7e8e> <7e8e> 16073 <7e8f> <7e8f> 5762 <7e91> <7e91> 13218 <7e92> <7e92> 18078 <7e93> <7e93> 5891 <7e94> <7e94> 5893 <7e95> <7e95> 13356 <7e96> <7e96> 5892 <7e97> <7e97> 13460 <7e98> <7e98> 13530 <7e99> <7e99> 13532 <7e9a> <7e9a> 13529 <7e9b> <7e9b> 13531 <7e9c> <7e9c> 5977 <7e9f> <7e9f> 18619 <7ea4> <7ea4> 17755 <7eac> <7eac> 17756 <7eba> <7eba> 17757 <7ec7> <7ec7> 17758 <7ecf> <7ecf> 17759 <7edf> <7edf> 17760 <7f06> <7f06> 17761 <7f36> <7f36> 1017 <7f37> <7f37> 17762 <7f38> <7f38> 2004 <7f39> <7f39> 7455 <7f3a> <7f3a> 2425 <7f3d> <7f3d> 2913 <7f3e> <7f3f> 8817 <7f40> <7f41> 14208 <7f43> <7f43> 11302 <7f44> <7f44> 5190 <7f45> <7f45> 11775 <7f47> <7f47> 14210 <7f48> <7f48> 5395 <7f49> <7f49> 15977 <7f4a> <7f4a> 12517 <7f4b> <7f4b> 12516 <7f4c> <7f4c> 5683 <7f4d> <7f4d> 13042 <7f4e> <7f4e> 15183 <7f4f> <7f4f> 13219 endcidrange 100 begincidrange <7f50> <7f50> 5926 <7f51> <7f51> 6162 <7f52> <7f52> 17654 <7f53> <7f53> 17657 <7f54> <7f54> 1640 <7f55> <7f55> 1276 <7f58> <7f58> 7107 <7f5b> <7f5b> 7597 <7f5c> <7f5c> 7592 <7f5d> <7f5d> 7596 <7f5e> <7f5e> 7594 <7f5f> <7f5f> 2426 <7f60> <7f60> 7595 <7f61> <7f61> 7593 <7f63> <7f63> 8179 <7f65> <7f66> 8819 <7f67> <7f68> 9489 <7f69> <7f6a> 3781 <7f6b> <7f6b> 9488 <7f6c> <7f6c> 9491 <7f6d> <7f6d> 9487 <7f6e> <7f6e> 3780 <7f70> <7f70> 4206 <7f71> <7f71> 16391 <7f72> <7f72> 3783 <7f73> <7f73> 10134 <7f75> <7f75> 4581 <7f76> <7f76> 10690 <7f77> <7f77> 4582 <7f78> <7f78> 16251 <7f79> <7f79> 4905 <7f7a> <7f7a> 11305 <7f7b> <7f7c> 11303 <7f7d> <7f7d> 11778 <7f7e> <7f7e> 11777 <7f7f> <7f7f> 11776 <7f83> <7f83> 12518 <7f85> <7f85> 5551 <7f86> <7f86> 12519 <7f87> <7f87> 13220 <7f88> <7f88> 5927 <7f89> <7f89> 13461 <7f8a> <7f8a> 1018 <7f8b> <7f8b> 1642 <7f8c> <7f8c> 1641 <7f8d> <7f8d> 7109 <7f8e> <7f8e> 2005 <7f8f> <7f8f> 16924 <7f91> <7f91> 7108 <7f92> <7f92> 7599 <7f93> <7f93> 17371 <7f94> <7f94> 2427 <7f95> <7f95> 8180 <7f96> <7f96> 7598 <7f97> <7f97> 14214 <7f9a> <7f9a> 2915 <7f9b> <7f9b> 8183 <7f9c> <7f9d> 8181 <7f9e> <7f9e> 2914 <7fa0> <7fa1> 8822 <7fa2> <7fa2> 8821 <7fa3> <7fa3> 14216 <7fa4> <7fa4> 3786 <7fa5> <7fa5> 9493 <7fa6> <7fa6> 9492 <7fa7> <7fa7> 9494 <7fa8> <7fa8> 3785 <7fa9> <7fa9> 3784 <7fac> <7fac> 10691 <7fad> <7fad> 10693 <7fae> <7fae> 17372 <7faf> <7faf> 4583 <7fb0> <7fb0> 10692 <7fb1> <7fb1> 11306 <7fb2> <7fb2> 4906 <7fb3> <7fb3> 12174 <7fb4> <7fb4> 18233 <7fb5> <7fb5> 12173 <7fb6> <7fb6> 5552 <7fb7> <7fb7> 12520 <7fb8> <7fb8> 5554 <7fb9> <7fb9> 5553 <7fba> <7fba> 12824 <7fbb> <7fbb> 13043 <7fbc> <7fbc> 5764 <7fbd> <7fbd> 1019 <7fbe> <7fbe> 7110 <7fbf> <7fbf> 2006 <7fc0> <7fc0> 7602 <7fc1> <7fc1> 2429 <7fc2> <7fc2> 7601 <7fc3> <7fc3> 7600 <7fc5> <7fc5> 2428 <7fc7> <7fc7> 8189 <7fc9> <7fc9> 8191 <7fca> <7fcb> 8184 <7fcc> <7fcc> 2916 <7fcd> <7fcd> 8186 <7fce> <7fce> 2917 <7fcf> <7fcf> 8190 endcidrange 100 begincidrange <7fd0> <7fd1> 8187 <7fd2> <7fd2> 2918 <7fd4> <7fd5> 3356 <7fd7> <7fd7> 8824 <7fdb> <7fdc> 9495 <7fdd> <7fdd> 15198 <7fde> <7fde> 10138 <7fdf> <7fdf> 4209 <7fe0> <7fe1> 4207 <7fe2> <7fe3> 10135 <7fe5> <7fe5> 10137 <7fe6> <7fe6> 10698 <7fe7> <7fe7> 18153 <7fe8> <7fe8> 10699 <7fe9> <7fe9> 4584 <7fea> <7fea> 10696 <7feb> <7feb> 10695 <7fec> <7fec> 10697 <7fed> <7fed> 10694 <7fee> <7fee> 4909 <7fef> <7fef> 11307 <7ff0> <7ff1> 4907 <7ff2> <7ff2> 11780 <7ff3> <7ff3> 5191 <7ff4> <7ff4> 11779 <7ff5> <7ff5> 12031 <7ff7> <7ff8> 12175 <7ff9> <7ff9> 5396 <7ffa> <7ffa> 14222 <7ffb> <7ffb> 5397 <7ffc> <7ffc> 5192 <7ffd> <7ffe> 12521 <7fff> <7fff> 12825 <8000> <8000> 5684 <8001> <8001> 1020 <8002> <8002> 17661 <8003> <8003> 1021 <8004> <8004> 2431 <8005> <8005> 1643 <8006> <8006> 2430 <8007> <8007> 7111 <8008> <8008> 14225 <800b> <800b> 3358 <800c> <800c> 1022 <800d> <800d> 2008 <800e> <800f> 7112 <8010> <8010> 2007 <8011> <8011> 2009 <8012> <8012> 1023 <8014> <8014> 7114 <8015> <8015> 2433 <8016> <8016> 7603 <8017> <8017> 2435 <8018> <8018> 2432 <8019> <8019> 2434 <801b> <801b> 8194 <801c> <801c> 2919 <801d> <801d> 14226 <801e> <801e> 8193 <801f> <801f> 8192 <8020> <8020> 18236 <8021> <8021> 9497 <8024> <8024> 10139 <8025> <8025> 18237 <8026> <8026> 4585 <8028> <8028> 4910 <8029> <8029> 11309 <802a> <802a> 11308 <802c> <802c> 11781 <802e> <802e> 18238 <802f> <802f> 14228 <8030> <8030> 13044 <8031> <8031> 18239 <8033> <8033> 1024 <8034> <8034> 6360 <8035> <8035> 6695 <8036> <8036> 2010 <8037> <8037> 7115 <8039> <8039> 7605 <803b> <803c> 14231 <803d> <803d> 2436 <803e> <803e> 7604 <803f> <803f> 2437 <8043> <8043> 8196 <8046> <8046> 2921 <8047> <8047> 8195 <8048> <8048> 8197 <804a> <804a> 2920 <804f> <8050> 8826 <8051> <8051> 8825 <8052> <8052> 3359 <8054> <8054> 18240 <8056> <8056> 3787 <8058> <8058> 3788 <805a> <805a> 4211 <805b> <805b> 16357 <805c> <805c> 10141 <805d> <805d> 10140 <805e> <805e> 4210 <8061> <8061> 14233 endcidrange 100 begincidrange <8062> <8062> 16355 <8063> <8063> 16348 <8064> <8064> 10700 <8066> <8066> 16347 <8067> <8067> 10701 <806c> <806c> 11310 <806f> <806f> 5196 <8070> <8070> 5195 <8071> <8072> 5193 <8073> <8073> 5197 <8075> <8075> 12177 <8076> <8076> 5399 <8077> <8077> 5398 <8078> <8078> 12523 <8079> <8079> 12826 <807d> <807d> 5843 <807e> <807e> 5842 <807f> <807f> 1025 <8080> <8080> 17662 <8082> <8082> 7404 <8084> <8084> 3790 <8085> <8085> 3360 <8086> <8086> 3789 <8087> <8087> 4212 <8089> <8089> 1026 <808a> <808a> 6067 <808b> <808c> 1027 <808f> <808f> 6696 <8090> <8090> 6363 <8092> <8092> 6364 <8093> <8093> 1278 <8095> <8095> 6361 <8096> <8096> 1277 <8098> <8098> 1280 <8099> <8099> 6362 <809a> <809a> 1282 <809b> <809b> 1281 <809c> <809c> 6365 <809d> <809d> 1279 <809f> <809f> 17782 <80a1> <80a1> 1648 <80a2> <80a2> 1646 <80a3> <80a3> 6698 <80a5> <80a5> 1645 <80a7> <80a7> 14240 <80a9> <80a9> 1650 <80aa> <80aa> 1652 <80ab> <80ab> 1649 <80ad> <80ad> 6701 <80ae> <80ae> 6697 <80af> <80af> 1653 <80b1> <80b1> 1647 <80b2> <80b2> 1283 <80b4> <80b4> 1651 <80b5> <80b5> 6700 <80b6> <80b6> 16046 <80b7> <80b7> 18243 <80b8> <80b8> 6699 <80ba> <80ba> 1644 <80bc> <80bc> 17778 <80bd> <80bd> 15995 <80c2> <80c2> 7121 <80c3> <80c4> 2014 <80c5> <80c5> 7123 <80c6> <80c6> 15220 <80c7> <80c7> 7117 <80c8> <80c8> 7120 <80c9> <80c9> 7129 <80ca> <80ca> 7127 <80cc> <80cc> 2016 <80cd> <80cd> 7133 <80ce> <80ce> 2019 <80cf> <80cf> 7130 <80d0> <80d0> 7122 <80d1> <80d1> 7119 <80d4> <80d4> 8829 <80d5> <80d5> 7128 <80d6> <80d6> 2011 <80d7> <80d7> 7131 <80d8> <80d8> 7116 <80d9> <80d9> 7125 <80da> <80da> 2013 <80db> <80db> 2018 <80dc> <80dc> 7126 <80dd> <80dd> 2022 <80de> <80de> 2020 <80e0> <80e0> 7118 <80e1> <80e1> 2017 <80e3> <80e3> 7124 <80e4> <80e4> 2021 <80e5> <80e5> 2012 <80e6> <80e6> 7132 <80e9> <80e9> 18244 <80ec> <80ec> 17897 <80ed> <80ed> 2442 <80ef> <80ef> 2451 <80f0> <80f0> 2440 <80f1> <80f1> 2438 <80f2> <80f2> 7607 <80f3> <80f3> 2446 endcidrange 100 begincidrange <80f4> <80f4> 2443 <80f5> <80f5> 7609 <80f6> <80f6> 17780 <80f8> <80f8> 2445 <80f9> <80f9> 7608 <80fa> <80fa> 7606 <80fb> <80fb> 7611 <80fc> <80fc> 2450 <80fd> <80fd> 2448 <80fe> <80fe> 8828 <8100> <8100> 7612 <8101> <8101> 7610 <8102> <8102> 2439 <8103> <8103> 16359 <8105> <8105> 2441 <8106> <8106> 2444 <8107> <8107> 14242 <8108> <8108> 2447 <8109> <8109> 15221 <810a> <810a> 2449 <810c> <810c> 18246 <810e> <810e> 18247 <8112> <8112> 18248 <8114> <8114> 18249 <8115> <8115> 8207 <8116> <8116> 2923 <8117> <8117> 15981 <8118> <8118> 8198 <8119> <8119> 8200 <811a> <811a> 14243 <811b> <811b> 8201 <811d> <811d> 8209 <811e> <811e> 8205 <811f> <811f> 8203 <8121> <8121> 8206 <8122> <8122> 8210 <8123> <8123> 2924 <8124> <8124> 2928 <8125> <8125> 8199 <8127> <8127> 8208 <8129> <8129> 2926 <812a> <812a> 14905 <812b> <812b> 2925 <812c> <812c> 8204 <812d> <812d> 8202 <812f> <812f> 2922 <8130> <8130> 2927 <8132> <8132> 15993 <8134> <8134> 17900 <8137> <8137> 15218 <8139> <8139> 3366 <813a> <813a> 8837 <813d> <813d> 8835 <813e> <813e> 3368 <8142> <8142> 15222 <8143> <8143> 8830 <8144> <8144> 9511 <8146> <8146> 3367 <8147> <8147> 8834 <8148> <8148> 15990 <814a> <814a> 8831 <814b> <814b> 3363 <814c> <814c> 3369 <814d> <814d> 8836 <814e> <814e> 3365 <814f> <814f> 8833 <8150> <8150> 4213 <8151> <8151> 3364 <8152> <8152> 8832 <8153> <8153> 3370 <8154> <8154> 3362 <8155> <8155> 3361 <8156> <8156> 18252 <8159> <815a> 18253 <815b> <815b> 9503 <815c> <815c> 9501 <815e> <815e> 9507 <8160> <8160> 9499 <8161> <8161> 9512 <8162> <8162> 9504 <8164> <8164> 9498 <8165> <8165> 3794 <8166> <8166> 3800 <8167> <8167> 9509 <8169> <8169> 9502 <816b> <816b> 3797 <816d> <816d> 17348 <816e> <816e> 3795 <816f> <816f> 9510 <8170> <8170> 3792 <8171> <8171> 3791 <8172> <8172> 9505 <8173> <8173> 3796 <8174> <8174> 3371 <8176> <8176> 9508 <8177> <8177> 9500 <8178> <8178> 3793 <8179> <817a> 3798 <817c> <817c> 18256 <817f> <817f> 4218 endcidrange 100 begincidrange <8180> <8180> 4214 <8182> <8182> 4219 <8183> <8183> 10144 <8184> <8184> 17349 <8186> <8186> 10143 <8187> <8187> 10145 <8188> <8188> 4216 <8189> <8189> 10142 <818a> <818a> 4217 <818b> <818b> 10148 <818c> <818c> 10147 <818d> <818d> 10146 <818f> <818f> 4215 <8193> <8193> 17350 <8195> <8195> 10705 <8197> <8197> 10708 <8198> <8198> 4591 <8199> <8199> 10707 <819a> <819a> 4590 <819b> <819d> 4586 <819e> <819e> 10704 <819f> <819f> 10703 <81a0> <81a0> 4589 <81a2> <81a2> 10706 <81a3> <81a3> 10702 <81a5> <81a5> 18259 <81a6> <81a6> 11312 <81a7> <81a7> 11322 <81a8> <81a8> 4913 <81a9> <81a9> 4912 <81aa> <81aa> 17252 <81ab> <81ab> 11316 <81ac> <81ac> 11318 <81ae> <81ae> 11313 <81b0> <81b0> 11317 <81b1> <81b1> 11311 <81b2> <81b2> 11320 <81b3> <81b3> 4911 <81b4> <81b4> 11319 <81b5> <81b5> 11315 <81b6> <81b6> 16050 <81b7> <81b7> 11321 <81b9> <81b9> 11314 <81ba> <81ba> 5200 <81bb> <81bb> 11782 <81bc> <81bc> 11788 <81bd> <81bd> 5204 <81be> <81be> 5206 <81bf> <81bf> 5203 <81c0> <81c0> 5202 <81c1> <81c1> 18261 <81c2> <81c2> 5201 <81c3> <81c3> 5199 <81c4> <81c4> 11783 <81c5> <81c5> 11786 <81c6> <81c6> 5198 <81c7> <81c7> 11787 <81c8> <81c8> 16366 <81c9> <81c9> 5205 <81ca> <81ca> 11785 <81cc> <81cc> 11784 <81cd> <81cd> 5400 <81cf> <81cf> 5401 <81d0> <81d0> 12180 <81d1> <81d2> 12178 <81d5> <81d5> 12525 <81d7> <81d7> 12524 <81d8> <81d8> 5555 <81d9> <81d9> 12828 <81da> <81da> 5685 <81db> <81db> 12827 <81dd> <81dd> 13045 <81de> <81de> 13221 <81df> <81df> 5844 <81e0> <81e1> 13533 <81e2> <81e2> 5894 <81e3> <81e3> 1029 <81e4> <81e4> 18262 <81e5> <81e5> 1654 <81e6> <81e6> 8838 <81e7> <81e7> 4220 <81e8> <81e8> 5207 <81e9> <81e9> 11789 <81ea> <81ea> 1030 <81ec> <81ec> 2453 <81ed> <81ed> 2452 <81ee> <81ee> 8839 <81ef> <81ef> 17105 <81f2> <81f2> 11323 <81f3> <81f3> 1031 <81f4> <81f4> 2023 <81f6> <81f6> 15713 <81f7> <81f9> 8840 <81fa> <81fa> 4221 <81fb> <81fb> 4914 <81fc> <81fc> 1032 <81fe> <81fe> 1655 <81ff> <81ff> 7134 <8200> <8200> 2454 <8201> <8201> 7613 endcidrange 100 begincidrange <8202> <8202> 2929 <8204> <8204> 8843 <8205> <8205> 3801 <8207> <8207> 4222 <8208> <8208> 4915 <8209> <8209> 5208 <820a> <820a> 5402 <820b> <820b> 12526 <820c> <820c> 1033 <820d> <820d> 1656 <8210> <8210> 2455 <8211> <8211> 8211 <8212> <8212> 3372 <8214> <8214> 4223 <8215> <8215> 10149 <8216> <8216> 10709 <8218> <8218> 14250 <821a> <821a> 16353 <821b> <821b> 1034 <821c> <821c> 3373 <821d> <821d> 9513 <821e> <821e> 4224 <821f> <821f> 1035 <8220> <8220> 6702 <8221> <8221> 7135 <8222> <8222> 2024 <8225> <8225> 7615 <8226> <8226> 16909 <8228> <8228> 2458 <8229> <8229> 14256 <822a> <822b> 2456 <822c> <822c> 2459 <822d> <822d> 16080 <822f> <822f> 7614 <8232> <8232> 8216 <8233> <8233> 8213 <8234> <8234> 8215 <8235> <8235> 2930 <8236> <8236> 2932 <8237> <8237> 2931 <8238> <8238> 8212 <8239> <8239> 2933 <823a> <823a> 8214 <823c> <823d> 8844 <823e> <823e> 17794 <823f> <823f> 8846 <8240> <8240> 9516 <8242> <8242> 9517 <8244> <8244> 9515 <8245> <8245> 9518 <8247> <8247> 3802 <8249> <8249> 9514 <824b> <824b> 4225 <824e> <824e> 10714 <824f> <824f> 10710 <8250> <8250> 10713 <8251> <8251> 10715 <8252> <8252> 10712 <8253> <8253> 10711 <8254> <8254> 18263 <8255> <8257> 11324 <8258> <8259> 4916 <825a> <825a> 11791 <825b> <825b> 11790 <825c> <825c> 11792 <825e> <825e> 12182 <825f> <825f> 12181 <8261> <8261> 12528 <8262> <8262> 15226 <8263> <8263> 12529 <8264> <8264> 12527 <8265> <8265> 15227 <8266> <8266> 5686 <8268> <8269> 12829 <826b> <826b> 13222 <826c> <826c> 13357 <826d> <826d> 13462 <826e> <826e> 1036 <826f> <826f> 1284 <8271> <8271> 5209 <8272> <8272> 1037 <8274> <8274> 8217 <8275> <8275> 8847 <8276> <8276> 18265 <8277> <8277> 5934 <8278> <8278> 6163 <8279> <8279> 18210 <827a> <827a> 17763 <827b> <827b> 14280 <827c> <827c> 6164 <827d> <827d> 6166 <827e> <827e> 1038 <827f> <827f> 6167 <8280> <8280> 6165 <8283> <8284> 6373 <8285> <8285> 6368 <8287> <8287> 16690 <828a> <828a> 6372 <828b> <828b> 1286 <828d> <828d> 1287 endcidrange 100 begincidrange <828e> <828e> 6369 <828f> <828f> 6367 <8290> <8290> 6366 <8291> <8291> 6370 <8292> <8292> 1285 <8293> <8293> 6371 <8294> <8294> 7136 <8298> <8298> 6707 <8299> <8299> 1659 <829a> <829a> 6706 <829b> <829b> 6708 <829d> <829d> 1658 <829e> <829e> 6713 <829f> <829f> 1662 <82a0> <82a0> 6703 <82a1> <82a1> 6717 <82a2> <82a2> 6723 <82a3> <82a3> 1669 <82a4> <82a4> 6720 <82a5> <82a5> 1666 <82a6> <82a6> 15731 <82a7> <82a7> 6710 <82a8> <82a8> 6716 <82a9> <82a9> 6718 <82aa> <82aa> 14268 <82ab> <82ab> 6705 <82ac> <82ac> 1665 <82ad> <82ad> 1660 <82ae> <82ae> 6711 <82af> <82af> 1667 <82b0> <82b0> 1670 <82b1> <82b1> 1664 <82b3> <82b3> 1657 <82b4> <82b4> 6715 <82b5> <82b5> 6709 <82b6> <82b6> 6722 <82b7> <82b7> 1672 <82b8> <82b8> 1668 <82b9> <82b9> 1663 <82ba> <82ba> 6714 <82bb> <82bb> 2460 <82bc> <82bc> 6712 <82bd> <82bd> 1661 <82be> <82be> 1671 <82c0> <82c0> 6704 <82c2> <82c2> 6719 <82c3> <82c3> 6721 <82c4> <82c4> 17891 <82ca> <82ca> 18266 <82cf> <82cf> 17764 <82d0> <82d0> 14273 <82d1> <82d1> 2041 <82d2> <82d2> 2035 <82d3> <82d3> 2043 <82d4> <82d4> 2040 <82d5> <82d5> 7143 <82d6> <82d6> 7146 <82d7> <82d7> 2036 <82d8> <82d8> 18267 <82d9> <82d9> 7137 <82db> <82db> 2029 <82dc> <82dc> 2039 <82de> <82de> 2042 <82df> <82df> 2044 <82e0> <82e0> 7158 <82e1> <82e1> 7149 <82e2> <82e2> 14281 <82e3> <82e3> 2028 <82e4> <82e4> 7157 <82e5> <82e5> 2032 <82e6> <82e6> 2030 <82e7> <82e7> 2025 <82e8> <82e8> 7141 <82ea> <82ea> 7156 <82eb> <82eb> 7145 <82ec> <82ec> 7148 <82ed> <82ed> 7161 <82ee> <82ee> 16408 <82ef> <82ef> 2045 <82f0> <82f0> 7155 <82f1> <82f1> 2037 <82f2> <82f2> 7150 <82f3> <82f3> 7160 <82f4> <82f4> 7147 <82f5> <82f5> 7151 <82f6> <82f6> 7154 <82f7> <82f7> 15991 <82f9> <82f9> 7139 <82fa> <82fa> 7159 <82fb> <82fb> 7153 <82fc> <82fc> 16685 <82fd> <82fd> 15762 <82fe> <82fe> 7138 <82ff> <82ff> 17374 <8300> <8300> 7142 <8301> <8301> 2038 <8302> <8302> 2033 <8303> <8303> 2026 <8304> <8304> 2031 <8305> <8305> 2027 endcidrange 100 begincidrange <8306> <8306> 2046 <8307> <8307> 7140 <8308> <8308> 7632 <8309> <8309> 2034 <830b> <830b> 16054 <830c> <830c> 7152 <830d> <830d> 6781 <8316> <8316> 7635 <8317> <8317> 2474 <8318> <8318> 14282 <8319> <8319> 7619 <831a> <831a> 14274 <831b> <831b> 7630 <831c> <831c> 7626 <831d> <831d> 14289 <831e> <831e> 7645 <8320> <8320> 7637 <8322> <8322> 7627 <8324> <8324> 7636 <8325> <8325> 7621 <8326> <8326> 7625 <8327> <8327> 7648 <8328> <8328> 2477 <8329> <8329> 7640 <832a> <832a> 7631 <832b> <832b> 2461 <832c> <832c> 7646 <832d> <832d> 7617 <832f> <832f> 7639 <8331> <8331> 2476 <8332> <8332> 2471 <8333> <8333> 7616 <8334> <8334> 2469 <8335> <8335> 2468 <8336> <8336> 2473 <8337> <8337> 7638 <8338> <8338> 2465 <8339> <8339> 2472 <833a> <833a> 7144 <833b> <833b> 8848 <833c> <833c> 7633 <833d> <833d> 15658 <833f> <833f> 7623 <8340> <8340> 2475 <8341> <8341> 7624 <8342> <8342> 7628 <8343> <8343> 2478 <8344> <8344> 7618 <8345> <8345> 7642 <8347> <8347> 7641 <8348> <8348> 7649 <8349> <8349> 2467 <834a> <834a> 2464 <834b> <834b> 7647 <834c> <834c> 7643 <834d> <834d> 7634 <834e> <834e> 7629 <834f> <834f> 2470 <8350> <8350> 2466 <8351> <8351> 7620 <8352> <8352> 2462 <8353> <8353> 7644 <8354> <8354> 2463 <8356> <8356> 7622 <8357> <8357> 18269 <8362> <8362> 14262 <8363> <8363> 16875 <8366> <8366> 15902 <836f> <836f> 17765 <8373> <8373> 8223 <8374> <8374> 8225 <8375> <8375> 8230 <8376> <8376> 8250 <8377> <8377> 2947 <8378> <8378> 2937 <837a> <837a> 8222 <837b> <837c> 2948 <837d> <837d> 8233 <837e> <837e> 8240 <837f> <837f> 8246 <8381> <8381> 8227 <8383> <8383> 8234 <8385> <8385> 14291 <8386> <8386> 2950 <8387> <8387> 8248 <8388> <8388> 8243 <8389> <8389> 2945 <838a> <838a> 2943 <838b> <838b> 8239 <838c> <838c> 8235 <838d> <838d> 8221 <838e> <838e> 2934 <838f> <838f> 8226 <8390> <8390> 8218 <8391> <8391> 14316 <8392> <8392> 2942 <8393> <8393> 2944 <8394> <8394> 8231 <8395> <8395> 8228 <8396> <8396> 2939 endcidrange 100 begincidrange <8397> <8397> 8244 <8398> <8398> 2936 <8399> <8399> 8229 <839a> <839a> 8889 <839b> <839b> 8237 <839c> <839c> 14157 <839d> <839d> 8236 <839e> <839e> 2935 <83a0> <83a0> 2946 <83a2> <83a2> 2938 <83a3> <83a3> 8219 <83a4> <83a4> 8224 <83a5> <83a5> 8241 <83a6> <83a6> 8247 <83a7> <83a7> 2951 <83a8> <83a8> 8220 <83a9> <83a9> 8232 <83aa> <83aa> 8238 <83ab> <83ab> 2941 <83ac> <83ac> 14294 <83ae> <83ae> 8249 <83af> <83af> 8242 <83b0> <83b0> 8245 <83b9> <83b9> 17063 <83bd> <83bd> 2940 <83be> <83be> 16217 <83bf> <83bf> 8864 <83c0> <83c0> 8852 <83c1> <83c1> 3381 <83c2> <83c2> 8881 <83c3> <83c3> 8890 <83c4> <83c4> 8893 <83c5> <83c5> 3379 <83c6> <83c6> 8860 <83c7> <83c7> 8885 <83c8> <83c8> 8861 <83c9> <83c9> 8875 <83ca> <83ca> 3392 <83cb> <83cb> 8871 <83cc> <83cc> 3389 <83cd> <83cd> 16469 <83ce> <83ce> 8872 <83cf> <83cf> 8849 <83d1> <83d1> 8886 <83d3> <83d3> 14296 <83d4> <83d4> 3398 <83d5> <83d5> 8883 <83d6> <83d6> 8873 <83d7> <83d7> 8895 <83d8> <83d8> 8868 <83d9> <83d9> 9550 <83db> <83db> 8898 <83dc> <83dc> 3396 <83dd> <83dd> 8866 <83de> <83de> 8878 <83df> <83df> 3399 <83e0> <83e0> 3378 <83e1> <83e1> 8870 <83e2> <83e2> 8896 <83e3> <83e3> 8863 <83e4> <83e4> 8856 <83e5> <83e5> 8867 <83e7> <83e7> 8855 <83e8> <83e8> 8853 <83e9> <83e9> 3374 <83ea> <83ea> 8887 <83eb> <83eb> 8862 <83ec> <83ec> 8891 <83ed> <83ed> 15660 <83ee> <83ee> 8892 <83ef> <83ef> 3382 <83f0> <83f0> 3387 <83f1> <83f1> 3383 <83f2> <83f2> 3391 <83f3> <83f3> 8882 <83f4> <83f4> 3384 <83f5> <83f5> 8874 <83f6> <83f6> 8858 <83f8> <83f8> 3376 <83f9> <83f9> 8850 <83fa> <83fa> 8884 <83fb> <83fb> 8894 <83fc> <83fc> 8857 <83fd> <83fd> 3390 <83fe> <83fe> 8899 <83ff> <83ff> 8869 <8401> <8401> 8865 <8403> <8403> 3375 <8404> <8404> 3395 <8405> <8405> 18271 <8406> <8406> 8880 <8407> <8407> 3397 <8409> <8409> 8876 <840a> <840a> 3386 <840b> <840b> 3380 <840c> <840c> 3388 <840d> <840d> 3377 <840e> <840e> 3394 <840f> <840f> 8877 <8410> <8410> 8859 endcidrange 100 begincidrange <8411> <8411> 8879 <8412> <8412> 8854 <8413> <8413> 8888 <8414> <8414> 15376 <8416> <8416> 16439 <8418> <8418> 15994 <841b> <841b> 8897 <841c> <841c> 16051 <8420> <8420> 15445 <8421> <8421> 14161 <8423> <8423> 8851 <8424> <8424> 18769 <8426> <8426> 18136 <8429> <8429> 9549 <842b> <842b> 9571 <842c> <842c> 3756 <842d> <842d> 9554 <842e> <842e> 16941 <842f> <842f> 9552 <8430> <8430> 9531 <8431> <8431> 3806 <8432> <8432> 9547 <8433> <8433> 9567 <8434> <8434> 9543 <8435> <8435> 3814 <8436> <8436> 9566 <8437> <8437> 9541 <8438> <8438> 3393 <8439> <8439> 9557 <843a> <843a> 9542 <843b> <843b> 9564 <843c> <843c> 3813 <843d> <843d> 3805 <843e> <843e> 15649 <843f> <843f> 9520 <8440> <8440> 9528 <8442> <8442> 9553 <8443> <8443> 9545 <8444> <8444> 9570 <8445> <8445> 9548 <8446> <8446> 3819 <8447> <8447> 9565 <8448> <8448> 18200 <8449> <8449> 3810 <844a> <844a> 14308 <844b> <844b> 9551 <844c> <844c> 9559 <844d> <844d> 9532 <844e> <844e> 9558 <8450> <8450> 9575 <8451> <8451> 9527 <8452> <8452> 9560 <8453> <8453> 15229 <8454> <8454> 9573 <8455> <8455> 14731 <8456> <8456> 9521 <8457> <8457> 3385 <8458> <8458> 14302 <8459> <8459> 9535 <845a> <845a> 9534 <845b> <845b> 3812 <845c> <845c> 16091 <845d> <845d> 9538 <845e> <845e> 9540 <845f> <845f> 9555 <8460> <8460> 9572 <8461> <8461> 3815 <8462> <8462> 17114 <8463> <8463> 3816 <8464> <8464> 18273 <8465> <8465> 9526 <8466> <8466> 3808 <8467> <8467> 9530 <8468> <8468> 9568 <8469> <8469> 3817 <846b> <846b> 3809 <846c> <846c> 3811 <846d> <846d> 3818 <846e> <846e> 9574 <846f> <846f> 9561 <8470> <8470> 9556 <8471> <8471> 14304 <8472> <8472> 15507 <8473> <8473> 9537 <8474> <8474> 9536 <8475> <8475> 3807 <8476> <8476> 9522 <8477> <8477> 3804 <8478> <8478> 9546 <8479> <8479> 9523 <847a> <847a> 9544 <847d> <847d> 9533 <847e> <847e> 9569 <847f> <847f> 14670 <8480> <8480> 15214 <8482> <8482> 3803 <8486> <8486> 9529 <8488> <8488> 18274 <848d> <848d> 9525 <848e> <848e> 9563 endcidrange 100 begincidrange <848f> <848f> 9524 <8490> <8490> 4238 <8491> <8491> 10189 <8492> <8492> 14166 <8493> <8493> 14318 <8494> <8494> 10172 <8496> <8496> 15133 <8497> <8497> 10150 <8498> <8498> 10180 <8499> <8499> 4230 <849a> <849a> 10165 <849b> <849b> 10175 <849c> <849c> 4233 <849d> <849d> 10168 <849e> <849e> 4231 <849f> <849f> 10153 <84a0> <84a0> 10183 <84a1> <84a1> 10152 <84a2> <84a2> 10171 <84a3> <84a3> 15262 <84a4> <84a4> 10151 <84a7> <84a7> 10169 <84a8> <84a8> 10178 <84a9> <84a9> 10176 <84aa> <84aa> 10164 <84ab> <84ab> 10159 <84ac> <84ac> 10157 <84ad> <84ad> 15756 <84ae> <84ae> 10158 <84af> <84af> 10177 <84b0> <84b0> 10188 <84b1> <84b1> 10166 <84b2> <84b2> 4232 <84b4> <84b4> 10161 <84b6> <84b6> 10181 <84b8> <84b8> 4235 <84b9> <84b9> 10160 <84ba> <84ba> 10154 <84bb> <84bb> 10170 <84bc> <84bc> 4239 <84bd> <84bd> 15436 <84be> <84be> 18276 <84bf> <84bf> 4227 <84c0> <84c0> 4236 <84c1> <84c1> 10162 <84c2> <84c2> 10156 <84c4> <84c4> 4229 <84c5> <84c5> 9562 <84c6> <84c6> 4228 <84c7> <84c7> 10173 <84c9> <84c9> 4226 <84ca> <84ca> 4241 <84cb> <84cb> 4234 <84cc> <84cc> 10174 <84cd> <84cd> 10163 <84ce> <84ce> 10155 <84cf> <84cf> 10182 <84d0> <84d0> 10167 <84d1> <84d1> 4240 <84d2> <84d2> 10186 <84d3> <84d3> 4237 <84d4> <84d4> 10185 <84d6> <84d6> 10179 <84d7> <84d7> 10184 <84da> <84da> 16373 <84db> <84db> 10187 <84de> <84de> 14314 <84e1> <84e1> 18277 <84e2> <84e2> 14261 <84e4> <84e4> 14319 <84e5> <84e5> 15312 <84e7> <84e8> 10755 <84e9> <84e9> 10743 <84ea> <84ea> 10742 <84eb> <84eb> 10738 <84ec> <84ec> 4603 <84ee> <84ee> 4595 <84ef> <84ef> 10758 <84f0> <84f0> 10757 <84f1> <84f1> 9519 <84f2> <84f2> 10735 <84f3> <84f3> 10739 <84f4> <84f4> 10733 <84f6> <84f6> 10752 <84f7> <84f7> 10737 <84f8> <84f8> 18278 <84f9> <84f9> 10759 <84fa> <84fa> 10730 <84fb> <84fb> 10728 <84fc> <84fc> 10740 <84fd> <84fd> 10750 <84fe> <84fe> 10745 <84ff> <84ff> 4605 <8500> <8500> 10719 <8502> <8502> 10749 <8503> <8503> 14730 <8505> <8505> 16619 <8506> <8506> 4606 <8507> <8507> 9539 <8508> <8508> 10731 endcidrange 100 begincidrange <8509> <8509> 10722 <850a> <850a> 10725 <850b> <850b> 10763 <850c> <850c> 10732 <850d> <850d> 10723 <850e> <850e> 10721 <850f> <850f> 10718 <8510> <8510> 18279 <8511> <8511> 4599 <8512> <8512> 10741 <8513> <8513> 4598 <8514> <8514> 4602 <8515> <8515> 10736 <8516> <8516> 10744 <8517> <8517> 4592 <8518> <8518> 10760 <8519> <8519> 10764 <851a> <851a> 4594 <851c> <851c> 10727 <851d> <851d> 10747 <851e> <851e> 10751 <851f> <851f> 10724 <8520> <8520> 10761 <8521> <8521> 4601 <8523> <8523> 4600 <8524> <8524> 10716 <8525> <8525> 4604 <8526> <8526> 10754 <8527> <8527> 10726 <8528> <8528> 10746 <8529> <8529> 10720 <852a> <852a> 10734 <852b> <852b> 10729 <852c> <852d> 4596 <852e> <852e> 10748 <852f> <852f> 10765 <8530> <8530> 10762 <8531> <8531> 10753 <8533> <8533> 16936 <8534> <8534> 14324 <8538> <8538> 18280 <853b> <853b> 10717 <853d> <853d> 4593 <853e> <853e> 11343 <8540> <8540> 11334 <8541> <8541> 11337 <8542> <8542> 16482 <8543> <8543> 4923 <8544> <8544> 11339 <8545> <8545> 11328 <8546> <8546> 11335 <8547> <8547> 11341 <8548> <8548> 4920 <8549> <8549> 4924 <854a> <854a> 4918 <854b> <854b> 14272 <854c> <854c> 16399 <854d> <854d> 11330 <854e> <854e> 11346 <8551> <8551> 11340 <8552> <8552> 18281 <8553> <8553> 11331 <8554> <8554> 11355 <8555> <8555> 11349 <8556> <8556> 11327 <8557> <8557> 11811 <8558> <8558> 11333 <8559> <8559> 4919 <855a> <855a> 14299 <855b> <855b> 11344 <855d> <855d> 11354 <855e> <855e> 4927 <8560> <8560> 11351 <8561> <8561> 11332 <8562> <8562> 11338 <8563> <8563> 11342 <8564> <8564> 11336 <8565> <8565> 11356 <8566> <8566> 11353 <8567> <8567> 11350 <8568> <8569> 4921 <856a> <856a> 4926 <856b> <856b> 11329 <856c> <856c> 11357 <856d> <856d> 4925 <856e> <856e> 11347 <856f> <8570> 18283 <8571> <8571> 11345 <8573> <8573> 14328 <8575> <8575> 11348 <8576> <8576> 11824 <8577> <8577> 11805 <8578> <8578> 11810 <8579> <8579> 11823 <857a> <857a> 11809 <857b> <857b> 11801 <857c> <857c> 11806 <857e> <857e> 5212 <8580> <8580> 11794 <8581> <8581> 11818 endcidrange 100 begincidrange <8582> <8582> 11820 <8583> <8583> 11793 <8584> <8584> 5211 <8585> <8585> 11822 <8586> <8586> 11814 <8587> <8587> 5218 <8588> <8588> 11821 <8589> <8589> 11807 <858a> <858a> 5220 <858b> <858b> 11799 <858c> <858c> 11352 <858d> <858d> 11815 <858e> <858e> 11812 <858f> <858f> 11795 <8590> <8590> 11826 <8591> <8591> 5214 <8594> <8594> 5215 <8595> <8595> 11797 <8596> <8596> 11813 <8598> <8598> 11825 <8599> <8599> 11816 <859a> <859a> 11803 <859b> <859b> 5217 <859c> <859c> 5213 <859d> <859d> 11817 <859e> <859e> 11804 <859f> <859f> 11827 <85a0> <85a0> 11798 <85a1> <85a1> 11808 <85a2> <85a2> 11819 <85a3> <85a3> 11800 <85a4> <85a4> 11802 <85a6> <85a6> 5221 <85a7> <85a7> 11796 <85a8> <85a8> 5219 <85a9> <85a9> 5404 <85aa> <85aa> 5210 <85af> <85af> 5216 <85b0> <85b0> 5408 <85b1> <85b1> 12198 <85b3> <85b3> 12188 <85b4> <85b4> 12183 <85b5> <85b5> 12189 <85b6> <85b6> 12199 <85b7> <85b7> 12203 <85b8> <85b8> 12202 <85b9> <85b9> 5410 <85ba> <85ba> 5409 <85bd> <85bd> 12190 <85be> <85be> 12204 <85bf> <85bf> 12193 <85c0> <85c0> 12185 <85c1> <85c1> 14334 <85c2> <85c2> 12187 <85c3> <85c3> 12186 <85c4> <85c4> 12192 <85c5> <85c5> 12197 <85c6> <85c6> 12184 <85c7> <85c7> 12191 <85c8> <85c8> 12196 <85c9> <85c9> 5407 <85cb> <85cb> 12194 <85cd> <85cd> 5405 <85ce> <85ce> 12195 <85cf> <85cf> 5403 <85d0> <85d0> 5406 <85d1> <85d1> 12545 <85d2> <85d2> 12200 <85d5> <85d5> 5559 <85d7> <85d7> 12537 <85d8> <85d8> 12541 <85d9> <85d9> 12533 <85da> <85da> 12536 <85dc> <85dc> 12544 <85dd> <85dd> 5557 <85de> <85de> 12549 <85df> <85df> 12542 <85e0> <85e0> 18285 <85e1> <85e1> 12534 <85e2> <85e2> 12550 <85e3> <85e3> 12543 <85e4> <85e5> 5560 <85e6> <85e6> 12547 <85e8> <85e8> 12535 <85e9> <85e9> 5556 <85ea> <85ea> 5558 <85eb> <85eb> 12530 <85ec> <85ec> 12538 <85ed> <85ed> 12532 <85ee> <85ee> 15446 <85ef> <85ef> 12548 <85f0> <85f0> 12546 <85f1> <85f1> 12531 <85f2> <85f2> 12539 <85f6> <85f6> 12837 <85f7> <85f7> 5562 <85f8> <85f8> 12540 <85f9> <85f9> 5688 <85fa> <85fa> 5690 <85fb> <85fb> 5687 endcidrange 100 begincidrange <85fc> <85fc> 15440 <85fd> <85fd> 12842 <85fe> <85fe> 12834 <85ff> <85ff> 12832 <8600> <8600> 12836 <8601> <8601> 12833 <8602> <8602> 14336 <8604> <8604> 12838 <8605> <8605> 12840 <8606> <8606> 5691 <8607> <8607> 5693 <8609> <8609> 12839 <860a> <860a> 5694 <860b> <860b> 5692 <860c> <860c> 12841 <860d> <860d> 16484 <8610> <8610> 15231 <8611> <8611> 5689 <8614> <8614> 18110 <8616> <8616> 14331 <8617> <8617> 5765 <8618> <8618> 13046 <8619> <8619> 13052 <861a> <861a> 5767 <861b> <861b> 12835 <861c> <861c> 13051 <861e> <861e> 13058 <861f> <861f> 13049 <8620> <8620> 13056 <8621> <8621> 13055 <8622> <8622> 12831 <8623> <8623> 13050 <8624> <8624> 12201 <8625> <8625> 13059 <8626> <8626> 13048 <8627> <8627> 13053 <8628> <8628> 14341 <8629> <8629> 13057 <862a> <862a> 13047 <862c> <862c> 13226 <862d> <862d> 5766 <862e> <862e> 13054 <862f> <862f> 16286 <8631> <8631> 13362 <8632> <8632> 13227 <8633> <8633> 13225 <8634> <8635> 13223 <8636> <8636> 13228 <8638> <8638> 5895 <8639> <8639> 13360 <863a> <863a> 13358 <863b> <863b> 13363 <863c> <863c> 13361 <863e> <863e> 13364 <863f> <863f> 5896 <8640> <8640> 13359 <8642> <8642> 14529 <8643> <8643> 13463 <8645> <8645> 15206 <8646> <8648> 13535 <864b> <864b> 13630 <864c> <864c> 13622 <864d> <864d> 6168 <864e> <864e> 1673 <8650> <8650> 2047 <8652> <8652> 7651 <8653> <8653> 7650 <8654> <8654> 2479 <8655> <8655> 2952 <8656> <8656> 8252 <8659> <8659> 8251 <865b> <865b> 3400 <865c> <865c> 3821 <865e> <865e> 3820 <865f> <865f> 3822 <8661> <8661> 10190 <8662> <8662> 10766 <8663> <8663> 11358 <8664> <8664> 11360 <8665> <8665> 11359 <8667> <8667> 5222 <8668> <8668> 11828 <8669> <8669> 12205 <866a> <866a> 13598 <866b> <866b> 1039 <866c> <866c> 14355 <866d> <866e> 6726 <866f> <866f> 6725 <8670> <8670> 6724 <8671> <8671> 1674 <8672> <8672> 18287 <8673> <8673> 7165 <8674> <8674> 7163 <8677> <8677> 7162 <8679> <8679> 2048 <867a> <867a> 2050 <867b> <867b> 2049 <867c> <867c> 7164 <867e> <867e> 14346 <8685> <8685> 7663 endcidrange 100 begincidrange <8686> <8686> 7660 <8687> <8687> 7658 <868a> <868a> 2480 <868b> <868b> 7661 <868c> <868c> 2485 <868d> <868d> 7655 <868e> <868e> 7670 <8690> <8690> 7672 <8691> <8691> 7656 <8692> <8692> 18288 <8693> <8693> 2482 <8694> <8694> 7673 <8695> <8695> 7668 <8696> <8696> 7654 <8697> <8697> 7659 <8698> <8698> 7669 <8699> <8699> 7665 <869a> <869a> 7662 <869c> <869c> 2487 <869d> <869d> 7671 <869e> <869e> 7657 <86a0> <86a0> 15240 <86a1> <86a1> 7666 <86a2> <86a2> 7652 <86a3> <86a3> 2486 <86a4> <86a4> 2483 <86a5> <86a5> 7664 <86a7> <86a7> 7667 <86a8> <86a8> 7653 <86a9> <86a9> 2484 <86aa> <86aa> 2481 <86ad> <86ad> 16134 <86af> <86af> 2962 <86b0> <86b0> 8259 <86b1> <86b1> 2961 <86b2> <86b2> 17376 <86b3> <86b3> 8262 <86b4> <86b4> 8265 <86b5> <86b5> 2958 <86b6> <86b6> 2956 <86b7> <86b7> 8254 <86b8> <86b8> 8263 <86b9> <86b9> 8261 <86ba> <86ba> 8258 <86bb> <86bc> 8266 <86bd> <86be> 8269 <86bf> <86bf> 8253 <86c0> <86c0> 2955 <86c1> <86c1> 8256 <86c2> <86c2> 8255 <86c3> <86c3> 8268 <86c4> <86c4> 2957 <86c5> <86c5> 8257 <86c6> <86c6> 2959 <86c7> <86c7> 2954 <86c8> <86c8> 8260 <86c9> <86c9> 2963 <86cb> <86cb> 2960 <86cc> <86cc> 8264 <86d0> <86d0> 3407 <86d1> <86d1> 8914 <86d3> <86d3> 8903 <86d4> <86d4> 3404 <86d6> <86d6> 9581 <86d7> <86d7> 8912 <86d8> <86d8> 8900 <86d9> <86d9> 3402 <86da> <86da> 8905 <86db> <86db> 3405 <86dc> <86dc> 8909 <86dd> <86dd> 8907 <86de> <86de> 3408 <86df> <86df> 3401 <86e2> <86e2> 8901 <86e3> <86e3> 8904 <86e4> <86e4> 3406 <86e6> <86e6> 8902 <86e8> <86e8> 8913 <86e9> <86e9> 8911 <86ea> <86ea> 8906 <86eb> <86eb> 8908 <86ec> <86ec> 8910 <86ed> <86ed> 3403 <86ef> <86ef> 18289 <86f5> <86f5> 9582 <86f6> <86f6> 9588 <86f7> <86f7> 9578 <86f8> <86f8> 9584 <86f9> <86f9> 3823 <86fa> <86fa> 9580 <86fb> <86fb> 3829 <86fe> <86fe> 3828 <8700> <8700> 3827 <8701> <8701> 9587 <8702> <8703> 3830 <8704> <8704> 9577 <8705> <8705> 9590 <8706> <8706> 3832 <8707> <8707> 3826 <8708> <8708> 3825 endcidrange 100 begincidrange <8709> <8709> 9586 <870a> <870a> 3833 <870b> <870b> 9576 <870c> <870c> 9579 <870d> <870d> 9589 <870e> <870e> 9585 <8711> <8711> 10222 <8712> <8712> 10211 <8713> <8713> 3824 <8718> <8718> 4248 <8719> <8719> 10199 <871a> <871a> 10220 <871b> <871b> 10200 <871c> <871c> 4243 <871e> <871e> 10197 <8720> <8720> 10206 <8721> <8721> 10198 <8722> <8722> 4245 <8723> <8723> 10192 <8724> <8724> 10219 <8725> <8725> 4246 <8726> <8727> 10216 <8728> <8728> 10193 <8729> <8729> 4251 <872a> <872a> 10208 <872c> <872c> 10202 <872d> <872d> 10209 <872e> <872e> 10196 <8730> <8730> 10221 <8731> <8731> 10213 <8732> <8732> 10207 <8733> <8733> 10191 <8734> <8734> 4247 <8735> <8735> 10214 <8737> <8737> 4250 <8738> <8738> 10218 <873a> <873a> 10212 <873b> <873b> 4244 <873c> <873c> 10210 <873e> <873e> 10204 <873f> <873f> 4242 <8740> <8740> 10195 <8741> <8741> 10203 <8742> <8742> 10215 <8743> <8743> 10201 <8746> <8746> 10205 <874c> <874c> 4616 <874d> <874d> 9583 <874e> <874e> 10784 <874f> <874f> 10793 <8750> <8750> 10783 <8751> <8751> 10779 <8752> <8752> 10776 <8753> <8753> 4617 <8754> <8754> 10774 <8755> <8755> 4249 <8756> <8756> 10767 <8757> <8757> 4615 <8758> <8758> 10773 <8759> <8759> 4614 <875a> <875a> 10778 <875b> <875b> 10775 <875c> <875c> 10791 <875d> <875d> 10786 <875e> <875e> 10780 <875f> <875f> 10785 <8760> <8760> 4610 <8761> <8761> 10777 <8762> <8762> 10796 <8763> <8764> 10768 <8765> <8765> 10792 <8766> <8766> 4611 <8767> <8767> 10797 <8768> <8768> 4613 <8769> <8769> 10798 <876a> <876a> 10782 <876b> <876b> 10194 <876c> <876c> 10788 <876d> <876d> 10781 <876e> <876e> 10790 <876f> <876f> 10787 <8770> <8770> 15980 <8771> <8771> 14347 <8773> <8773> 10772 <8774> <8774> 4608 <8775> <8775> 10795 <8776> <8776> 4609 <8777> <8777> 10770 <8778> <8778> 4612 <8779> <8779> 11371 <877a> <877a> 10789 <877b> <877b> 10794 <877d> <877d> 16453 <8781> <8781> 11368 <8782> <8782> 4607 <8783> <8783> 4928 <8784> <8784> 11378 <8785> <8785> 11374 <8786> <8786> 16048 <8787> <8787> 11372 endcidrange 100 begincidrange <8788> <8788> 11367 <8789> <8789> 11382 <878b> <878b> 17378 <878c> <878c> 16367 <878d> <878d> 4932 <878f> <878f> 11363 <8790> <8791> 11375 <8792> <8792> 11366 <8793> <8793> 11365 <8794> <8794> 11379 <8796> <8796> 11369 <8797> <8797> 11364 <8798> <8798> 11370 <879a> <879a> 11381 <879b> <879b> 11362 <879c> <879c> 11380 <879d> <879d> 11377 <879e> <879e> 4930 <879f> <879f> 4929 <87a2> <87a2> 4931 <87a3> <87a3> 11373 <87a4> <87a4> 11361 <87a5> <87a5> 15752 <87a9> <87a9> 16364 <87aa> <87aa> 11830 <87ab> <87ab> 5228 <87ac> <87ac> 11834 <87ad> <87ad> 11831 <87ae> <87ae> 11838 <87af> <87af> 11844 <87b0> <87b0> 11833 <87b1> <87b1> 14351 <87b2> <87b2> 11853 <87b3> <87b3> 5225 <87b4> <87b4> 11847 <87b5> <87b5> 11836 <87b6> <87b6> 11848 <87b7> <87b7> 11843 <87b8> <87b8> 11850 <87b9> <87b9> 11835 <87ba> <87ba> 5230 <87bb> <87bb> 5229 <87bc> <87bc> 11837 <87bd> <87bd> 11851 <87be> <87be> 11829 <87bf> <87bf> 11849 <87c0> <87c0> 5223 <87c1> <87c1> 16380 <87c2> <87c2> 11841 <87c3> <87c3> 11840 <87c4> <87c4> 11845 <87c5> <87c5> 11832 <87c6> <87c6> 5227 <87c8> <87c8> 5231 <87c9> <87c9> 11839 <87ca> <87ca> 11846 <87cb> <87cb> 5232 <87cc> <87cc> 11842 <87ce> <87ce> 16365 <87d1> <87d1> 5224 <87d2> <87d2> 5226 <87d3> <87d3> 12218 <87d4> <87d4> 12216 <87d6> <87d6> 16274 <87d7> <87d7> 12222 <87d8> <87d8> 12220 <87d9> <87d9> 12223 <87da> <87da> 14352 <87db> <87db> 12209 <87dc> <87dc> 12217 <87dd> <87dd> 12227 <87de> <87de> 11852 <87df> <87df> 12213 <87e0> <87e0> 5414 <87e1> <87e1> 10771 <87e2> <87e2> 12208 <87e3> <87e3> 12221 <87e4> <87e4> 12215 <87e5> <87e5> 12212 <87e6> <87e6> 12207 <87e7> <87e7> 12206 <87e8> <87e8> 12226 <87ea> <87ea> 12211 <87eb> <87eb> 12210 <87ec> <87ec> 5412 <87ed> <87ed> 12219 <87ee> <87ee> 14349 <87ef> <87ef> 5411 <87f2> <87f2> 5413 <87f3> <87f3> 12214 <87f4> <87f4> 12225 <87f5> <87f5> 16302 <87f6> <87f7> 12554 <87f9> <87f9> 5566 <87fa> <87fa> 12552 <87fb> <87fb> 5563 <87fc> <87fc> 12560 <87fe> <87fe> 5567 <87ff> <87ff> 12562 <8800> <8800> 12551 endcidrange 100 begincidrange <8801> <8801> 12224 <8802> <8802> 12564 <8803> <8803> 12553 <8804> <8804> 16047 <8805> <8805> 5564 <8806> <8806> 12559 <8808> <8808> 12561 <8809> <8809> 12556 <880a> <880a> 12563 <880b> <880b> 12558 <880c> <880c> 12557 <880d> <880d> 5565 <880f> <880f> 14353 <8810> <8811> 12844 <8813> <8813> 12847 <8814> <8815> 5695 <8816> <8816> 12848 <8817> <8817> 12846 <8818> <8818> 16250 <8819> <8819> 12843 <881b> <881b> 13062 <881c> <881c> 13065 <881d> <881d> 13061 <881f> <881f> 5771 <8820> <8820> 13063 <8821> <8821> 5770 <8822> <8822> 5769 <8823> <8823> 5768 <8824> <8824> 13064 <8825> <8825> 13233 <8826> <8826> 13231 <8827> <8827> 15879 <8828> <8828> 13230 <8829> <8829> 13060 <882a> <882a> 13232 <882b> <882b> 13066 <882c> <882c> 13229 <882d> <882d> 15243 <882e> <882e> 13367 <882f> <882f> 13333 <8830> <8830> 13365 <8831> <8831> 5897 <8832> <8832> 13366 <8833> <8833> 13368 <8835> <8835> 13466 <8836> <8836> 5928 <8837> <8837> 13465 <8838> <8838> 13464 <8839> <8839> 5929 <883b> <883b> 5959 <883c> <883c> 13576 <883d> <883d> 13600 <883e> <883e> 13599 <883f> <883f> 13601 <8840> <8840> 1040 <8841> <8841> 7166 <8842> <8842> 16218 <8843> <8844> 7674 <8845> <8846> 14358 <8848> <8848> 8915 <884a> <884a> 13067 <884b> <884b> 13467 <884c> <884c> 1041 <884d> <884d> 2051 <884e> <884e> 7167 <884f> <884f> 14404 <8852> <8852> 8271 <8853> <8853> 2964 <8855> <8855> 8917 <8856> <8856> 8916 <8857> <8857> 3409 <8859> <8859> 3834 <885a> <885a> 10799 <885b> <885b> 4618 <885d> <885d> 4619 <885e> <885e> 14363 <8860> <8860> 14918 <8861> <8861> 4933 <8862> <8862> 5930 <8863> <8863> 1042 <8864> <8864> 17666 <8865> <8865> 15868 <8867> <8867> 7168 <8868> <8868> 1676 <8869> <8869> 7170 <886a> <886a> 7169 <886b> <886b> 2052 <886d> <886d> 7676 <886e> <886e> 15246 <886f> <886f> 7683 <8870> <8870> 2488 <8871> <8871> 7681 <8872> <8872> 7679 <8874> <8874> 7686 <8875> <8876> 7677 <8877> <8877> 2489 <8879> <8879> 2493 <887c> <887c> 7687 <887d> <887d> 2492 <887e> <887e> 7685 endcidrange 100 begincidrange <887f> <887f> 7682 <8880> <8880> 7680 <8881> <8882> 2490 <8883> <8883> 7684 <8884> <8884> 17143 <8887> <8887> 15248 <8888> <8888> 2966 <8889> <8889> 8272 <888b> <888b> 2971 <888c> <888c> 8288 <888d> <888d> 2970 <888e> <888e> 8290 <8891> <8891> 8278 <8892> <8892> 2968 <8893> <8893> 8289 <8895> <8895> 8273 <8896> <8896> 2969 <8897> <8897> 8285 <8898> <8898> 8281 <8899> <8899> 8283 <889a> <889a> 8277 <889b> <889b> 8284 <889c> <889c> 14364 <889e> <889e> 2965 <889f> <889f> 8280 <88a0> <88a0> 16288 <88a1> <88a1> 8279 <88a2> <88a2> 8275 <88a4> <88a4> 8286 <88a7> <88a7> 8282 <88a8> <88a8> 8274 <88aa> <88aa> 8276 <88ab> <88ab> 2967 <88ac> <88ac> 8287 <88ae> <88ae> 18293 <88b1> <88b1> 3412 <88b2> <88b2> 8928 <88b4> <88b5> 14366 <88b6> <88b6> 8924 <88b7> <88b7> 8926 <88b8> <88b8> 8921 <88b9> <88b9> 8920 <88ba> <88ba> 8918 <88bc> <88bc> 8925 <88bd> <88bd> 8927 <88be> <88be> 8923 <88bf> <88bf> 15249 <88c0> <88c0> 8922 <88c1> <88c2> 3410 <88c5> <88c5> 14368 <88c7> <88c7> 16049 <88c9> <88c9> 8930 <88ca> <88ca> 3842 <88cb> <88cb> 9592 <88cc> <88cc> 9598 <88cd> <88ce> 9593 <88cf> <88cf> 14058 <88d0> <88d0> 9599 <88d2> <88d2> 3844 <88d4> <88d4> 3836 <88d5> <88d5> 3843 <88d6> <88d6> 9591 <88d7> <88d7> 8919 <88d8> <88d8> 3839 <88d9> <88d9> 3837 <88da> <88da> 9597 <88db> <88db> 9596 <88dc> <88dc> 3838 <88dd> <88dd> 3840 <88de> <88de> 9595 <88df> <88df> 3835 <88e1> <88e1> 3841 <88e6> <88e6> 15250 <88e7> <88e7> 10224 <88e8> <88e8> 4258 <88eb> <88eb> 10235 <88ec> <88ec> 10234 <88ee> <88ee> 10229 <88ef> <88ef> 4260 <88f0> <88f0> 10233 <88f1> <88f2> 10225 <88f3> <88f3> 4252 <88f4> <88f4> 4254 <88f5> <88f5> 15880 <88f6> <88f6> 10231 <88f7> <88f7> 10223 <88f8> <88f8> 4256 <88f9> <88f9> 4255 <88fa> <88fa> 10227 <88fb> <88fb> 10232 <88fc> <88fc> 10230 <88fd> <88fd> 4257 <88fe> <88fe> 10228 <88ff> <88ff> 18294 <8900> <8900> 17146 <8901> <8901> 8929 <8902> <8902> 4253 <8905> <8905> 10800 <8906> <8906> 10807 <8907> <8907> 4621 endcidrange 100 begincidrange <8909> <8909> 10811 <890a> <890a> 4625 <890b> <890b> 10803 <890c> <890c> 10801 <890e> <890e> 10810 <8910> <8910> 4620 <8911> <8911> 10809 <8912> <8913> 4622 <8914> <8914> 10802 <8915> <8915> 4624 <8916> <8916> 10808 <8917> <8919> 10804 <891a> <891a> 4259 <891e> <891e> 11383 <891f> <891f> 11395 <8921> <8921> 4938 <8922> <8922> 11390 <8923> <8923> 11392 <8924> <8924> 18295 <8925> <8925> 4936 <8926> <8926> 11384 <8927> <8927> 11388 <8929> <8929> 11391 <892a> <892a> 4934 <892b> <892b> 4937 <892c> <892c> 11394 <892d> <892e> 11386 <892f> <892f> 11393 <8930> <8930> 11385 <8931> <8931> 11389 <8932> <8932> 4935 <8933> <8933> 11855 <8935> <8935> 11854 <8936> <8936> 5234 <8937> <8937> 11860 <8938> <8938> 5236 <893b> <893b> 5233 <893c> <893c> 11856 <893d> <893d> 5237 <893e> <893e> 11857 <8941> <8941> 11858 <8942> <8942> 11861 <8943> <8943> 15894 <8944> <8944> 5235 <8946> <8946> 12232 <8947> <8947> 17379 <8949> <8949> 12235 <894b> <894b> 12229 <894c> <894c> 12231 <894d> <894d> 15252 <894f> <894f> 12230 <8950> <8951> 12233 <8952> <8952> 11859 <8953> <8953> 12228 <8954> <8954> 15254 <8956> <8956> 5570 <8957> <8957> 12568 <8958> <8958> 12571 <8959> <8959> 12573 <895a> <895b> 12566 <895c> <895c> 12570 <895d> <895d> 12572 <895e> <895e> 5571 <895f> <895f> 5569 <8960> <8960> 5568 <8961> <8961> 12569 <8962> <8962> 12565 <8963> <8963> 12849 <8964> <8964> 5697 <8965> <8965> 15251 <8966> <8966> 12850 <8969> <8969> 13069 <896a> <896a> 5772 <896b> <896b> 13071 <896c> <896c> 5773 <896d> <896d> 13068 <896e> <896e> 13070 <896f> <896f> 5846 <8971> <8971> 13234 <8972> <8972> 5845 <8973> <8973> 13371 <8974> <8974> 13370 <8976> <8976> 13369 <8977> <8977> 15850 <8979> <897a> 13538 <897b> <897b> 13541 <897c> <897c> 13540 <897e> <897e> 6169 <897f> <897f> 1043 <8980> <8980> 18184 <8981> <8981> 2053 <8982> <8982> 8291 <8983> <8983> 3413 <8985> <8985> 9600 <8986> <8986> 5415 <8987> <8987> 14370 <8988> <8988> 12574 <8989> <8989> 16361 <898a> <898a> 14371 <898b> <898b> 1288 endcidrange 100 begincidrange <898f> <898f> 2973 <8991> <8991> 18296 <8993> <8993> 2972 <8994> <8994> 16352 <8995> <8995> 8931 <8996> <8996> 3414 <8997> <8997> 8933 <8998> <8998> 8932 <899b> <899b> 9601 <899c> <899c> 3845 <899d> <899d> 10236 <899e> <899e> 10239 <899f> <899f> 10238 <89a1> <89a1> 10237 <89a2> <89a2> 10812 <89a3> <89a3> 10814 <89a4> <89a4> 10813 <89a5> <89a5> 15763 <89a6> <89a6> 4940 <89a7> <89a7> 14374 <89a9> <89a9> 14373 <89aa> <89aa> 4939 <89ac> <89ac> 5238 <89ad> <89ad> 11862 <89ae> <89ae> 11864 <89af> <89af> 11863 <89b2> <89b2> 5416 <89b6> <89b6> 12576 <89b7> <89b7> 12575 <89b9> <89b9> 12851 <89ba> <89ba> 5698 <89bc> <89bc> 14375 <89bd> <89bd> 5774 <89be> <89be> 13236 <89bf> <89bf> 13235 <89c0> <89c0> 5960 <89c1> <89c1> 17667 <89c6> <89c6> 17766 <89d2> <89d2> 1289 <89d3> <89d3> 7171 <89d4> <89d4> 2054 <89d5> <89d5> 8294 <89d6> <89d6> 8292 <89d9> <89d9> 8293 <89da> <89db> 8935 <89dc> <89dc> 9608 <89dd> <89dd> 8934 <89df> <89df> 9602 <89e0> <89e0> 9606 <89e1> <89e1> 9605 <89e2> <89e2> 9607 <89e3> <89e3> 3846 <89e4> <89e4> 9604 <89e5> <89e5> 9603 <89e6> <89e6> 9609 <89e7> <89e7> 14377 <89e8> <89e8> 10242 <89e9> <89e9> 10240 <89eb> <89eb> 10241 <89ec> <89ec> 10817 <89ed> <89ed> 10815 <89f0> <89f0> 10816 <89f1> <89f1> 11396 <89f2> <89f3> 11865 <89f4> <89f4> 5417 <89f6> <89f6> 12577 <89f7> <89f7> 12852 <89f8> <89f8> 5699 <89fa> <89fa> 13072 <89fb> <89fb> 13237 <89fc> <89fc> 5847 <89fe> <89fe> 13372 <89ff> <89ff> 13542 <8a00> <8a00> 1290 <8a02> <8a03> 2056 <8a04> <8a04> 7172 <8a07> <8a07> 7173 <8a08> <8a08> 2055 <8a0a> <8a0a> 2499 <8a0c> <8a0c> 2497 <8a0e> <8a0e> 2496 <8a0f> <8a0f> 2503 <8a10> <8a10> 2495 <8a11> <8a11> 2504 <8a12> <8a12> 7688 <8a13> <8a13> 2501 <8a15> <8a15> 2498 <8a16> <8a16> 2502 <8a17> <8a17> 2500 <8a18> <8a18> 2494 <8a1b> <8a1b> 2981 <8a1c> <8a1c> 15267 <8a1d> <8a1d> 2975 <8a1e> <8a1e> 8298 <8a1f> <8a1f> 2980 <8a22> <8a22> 2982 <8a23> <8a23> 2976 <8a25> <8a25> 2977 <8a27> <8a27> 8296 <8a29> <8a29> 17381 endcidrange 100 begincidrange <8a2a> <8a2a> 2974 <8a2b> <8a2b> 15313 <8a2c> <8a2c> 8297 <8a2d> <8a2d> 2979 <8a30> <8a30> 8295 <8a31> <8a31> 2978 <8a34> <8a34> 3425 <8a36> <8a36> 3427 <8a38> <8a38> 18298 <8a39> <8a39> 8939 <8a3a> <8a3a> 3426 <8a3b> <8a3b> 3415 <8a3c> <8a3c> 3419 <8a3d> <8a3d> 15266 <8a3e> <8a3e> 3865 <8a3f> <8a3f> 9614 <8a40> <8a40> 8941 <8a41> <8a41> 3420 <8a44> <8a45> 8944 <8a46> <8a46> 3424 <8a48> <8a48> 8947 <8a49> <8a49> 16368 <8a4a> <8a4a> 8949 <8a4c> <8a4c> 8950 <8a4d> <8a4d> 8938 <8a4e> <8a4e> 8937 <8a4f> <8a4f> 8951 <8a50> <8a50> 3423 <8a51> <8a51> 8948 <8a52> <8a52> 8946 <8a54> <8a54> 3421 <8a55> <8a55> 3417 <8a56> <8a56> 3428 <8a57> <8a58> 8942 <8a59> <8a59> 8940 <8a5b> <8a5b> 3422 <8a5e> <8a5e> 3418 <8a60> <8a60> 3416 <8a61> <8a61> 9613 <8a62> <8a62> 3860 <8a63> <8a63> 3855 <8a66> <8a66> 3850 <8a67> <8a67> 16270 <8a68> <8a68> 3866 <8a69> <8a69> 3851 <8a6b> <8a6b> 3847 <8a6c> <8a6c> 3862 <8a6d> <8a6d> 3859 <8a6e> <8a6e> 3861 <8a70> <8a70> 3852 <8a71> <8a71> 3857 <8a72> <8a73> 3848 <8a74> <8a74> 9621 <8a75> <8a75> 9618 <8a76> <8a76> 9610 <8a77> <8a77> 9615 <8a79> <8a79> 3863 <8a7a> <8a7a> 9622 <8a7b> <8a7b> 3864 <8a7c> <8a7c> 3854 <8a7e> <8a7e> 16293 <8a7f> <8a7f> 9612 <8a81> <8a81> 9620 <8a82> <8a82> 9616 <8a83> <8a83> 9619 <8a84> <8a84> 9617 <8a85> <8a85> 3858 <8a86> <8a86> 9611 <8a87> <8a87> 3853 <8a8b> <8a8b> 10245 <8a8c> <8a8c> 4262 <8a8d> <8a8d> 4265 <8a8f> <8a8f> 10247 <8a90> <8a90> 14383 <8a91> <8a91> 4273 <8a92> <8a92> 10246 <8a93> <8a93> 4267 <8a94> <8a94> 18299 <8a95> <8a95> 4630 <8a96> <8a96> 10248 <8a98> <8a98> 4272 <8a99> <8a99> 10244 <8a9a> <8a9a> 4274 <8a9c> <8a9c> 14380 <8a9e> <8a9e> 4263 <8aa0> <8aa0> 3856 <8aa1> <8aa1> 4266 <8aa3> <8aa3> 4264 <8aa4> <8aa4> 4268 <8aa5> <8aa5> 4270 <8aa6> <8aa6> 4261 <8aa7> <8aa7> 4275 <8aa8> <8aa8> 4271 <8aa9> <8aa9> 14397 <8aaa> <8aaa> 4269 <8aab> <8aab> 10243 <8aaf> <8aaf> 14401 <8ab0> <8ab0> 4637 <8ab2> <8ab2> 4633 <8ab4> <8ab4> 18300 endcidrange 100 begincidrange <8ab6> <8ab6> 4640 <8ab8> <8ab8> 10820 <8ab9> <8ab9> 4641 <8aba> <8aba> 10832 <8abb> <8abb> 10825 <8abc> <8abc> 4626 <8abd> <8abd> 10833 <8abe> <8abe> 10827 <8abf> <8abf> 4636 <8ac0> <8ac0> 10828 <8ac2> <8ac2> 4635 <8ac3> <8ac3> 10831 <8ac4> <8ac4> 4629 <8ac5> <8ac5> 10829 <8ac6> <8ac6> 10819 <8ac7> <8ac7> 4628 <8ac8> <8ac8> 11407 <8ac9> <8ac9> 4634 <8acb> <8acb> 4631 <8acd> <8acd> 4639 <8acf> <8acf> 10818 <8ad1> <8ad1> 10822 <8ad2> <8ad2> 4627 <8ad3> <8ad3> 10821 <8ad4> <8ad5> 10823 <8ad6> <8ad6> 4638 <8ad7> <8ad7> 10826 <8ad8> <8ad8> 10830 <8ad9> <8ad9> 10834 <8ada> <8ada> 14786 <8adb> <8adb> 4642 <8adc> <8adc> 4946 <8add> <8add> 11402 <8ade> <8ade> 11408 <8adf> <8adf> 11405 <8ae0> <8ae0> 11397 <8ae1> <8ae1> 11409 <8ae2> <8ae2> 11398 <8ae4> <8ae4> 11404 <8ae6> <8ae6> 4941 <8ae7> <8ae7> 4947 <8ae8> <8ae8> 11410 <8aea> <8aea> 15833 <8aeb> <8aeb> 4943 <8aed> <8aed> 4953 <8aee> <8aee> 4948 <8aef> <8aef> 11412 <8af0> <8af0> 11406 <8af1> <8af1> 4944 <8af2> <8af2> 11399 <8af3> <8af3> 4954 <8af4> <8af5> 11400 <8af6> <8af6> 4955 <8af7> <8af7> 4952 <8af8> <8af8> 4632 <8afa> <8afa> 4942 <8afb> <8afb> 11413 <8afc> <8afc> 4956 <8afe> <8afe> 4949 <8aff> <8aff> 11411 <8b00> <8b00> 4945 <8b01> <8b02> 4950 <8b04> <8b04> 5246 <8b05> <8b05> 11871 <8b06> <8b06> 11880 <8b07> <8b07> 11877 <8b08> <8b08> 11879 <8b0a> <8b0a> 5243 <8b0b> <8b0b> 11872 <8b0c> <8b0c> 14390 <8b0d> <8b0d> 11878 <8b0e> <8b0e> 5239 <8b0f> <8b0f> 11874 <8b10> <8b10> 5247 <8b11> <8b11> 11870 <8b12> <8b12> 11875 <8b13> <8b13> 11882 <8b14> <8b14> 11403 <8b15> <8b15> 11876 <8b16> <8b16> 11869 <8b17> <8b17> 5240 <8b18> <8b18> 11868 <8b19> <8b19> 5241 <8b1a> <8b1a> 11883 <8b1b> <8b1b> 5242 <8b1c> <8b1c> 11881 <8b1d> <8b1d> 5245 <8b1e> <8b1e> 11867 <8b1f> <8b1f> 14391 <8b20> <8b20> 5244 <8b22> <8b22> 11873 <8b23> <8b23> 12238 <8b24> <8b24> 12252 <8b25> <8b25> 12247 <8b26> <8b26> 12249 <8b27> <8b27> 12237 <8b28> <8b28> 5418 <8b2a> <8b2a> 12236 <8b2b> <8b2b> 5421 <8b2c> <8b2c> 5420 endcidrange 100 begincidrange <8b2d> <8b2d> 16281 <8b2e> <8b2e> 12251 <8b2f> <8b2f> 12243 <8b30> <8b30> 12240 <8b31> <8b31> 12246 <8b33> <8b33> 12239 <8b35> <8b35> 12241 <8b36> <8b36> 12250 <8b37> <8b37> 12248 <8b39> <8b39> 5419 <8b3a> <8b3a> 12255 <8b3b> <8b3b> 12253 <8b3c> <8b3c> 12244 <8b3d> <8b3d> 12254 <8b3e> <8b3e> 12245 <8b3f> <8b3f> 14394 <8b40> <8b40> 12581 <8b41> <8b41> 5572 <8b42> <8b42> 12588 <8b43> <8b43> 16370 <8b45> <8b45> 13075 <8b46> <8b46> 5579 <8b47> <8b47> 12242 <8b48> <8b48> 12579 <8b49> <8b49> 5575 <8b4a> <8b4a> 12580 <8b4b> <8b4b> 12585 <8b4c> <8b4d> 14395 <8b4e> <8b4f> 5577 <8b50> <8b50> 12578 <8b51> <8b51> 12587 <8b52> <8b52> 12589 <8b53> <8b53> 12582 <8b54> <8b54> 12584 <8b55> <8b55> 12586 <8b56> <8b56> 12583 <8b57> <8b57> 12590 <8b58> <8b58> 5574 <8b59> <8b59> 5580 <8b5a> <8b5a> 5576 <8b5c> <8b5c> 5573 <8b5d> <8b5d> 12855 <8b5e> <8b5e> 15800 <8b5f> <8b5f> 5704 <8b60> <8b60> 12853 <8b62> <8b62> 15828 <8b63> <8b63> 12857 <8b65> <8b65> 12858 <8b66> <8b66> 5702 <8b67> <8b67> 12859 <8b68> <8b68> 12856 <8b69> <8b69> 15351 <8b6a> <8b6a> 12854 <8b6b> <8b6b> 5705 <8b6c> <8b6c> 5701 <8b6d> <8b6d> 12860 <8b6f> <8b6f> 5703 <8b70> <8b70> 5700 <8b74> <8b74> 5775 <8b77> <8b77> 5776 <8b78> <8b78> 13074 <8b79> <8b79> 13073 <8b7a> <8b7b> 13076 <8b7d> <8b7d> 5777 <8b7e> <8b7e> 13238 <8b7f> <8b7f> 13243 <8b80> <8b80> 5848 <8b81> <8b81> 15757 <8b82> <8b82> 13240 <8b84> <8b84> 13239 <8b85> <8b85> 13242 <8b86> <8b86> 13241 <8b88> <8b88> 13376 <8b8a> <8b8a> 5898 <8b8b> <8b8b> 13375 <8b8c> <8b8c> 13373 <8b8e> <8b8e> 13374 <8b90> <8b90> 14399 <8b92> <8b92> 5932 <8b93> <8b93> 5931 <8b94> <8b95> 13468 <8b96> <8b96> 5933 <8b98> <8b99> 13543 <8b9a> <8b9a> 5972 <8b9b> <8b9b> 14400 <8b9c> <8b9c> 5978 <8b9e> <8b9e> 13602 <8b9f> <8b9f> 13631 <8ba0> <8ba0> 17669 <8bbe> <8bbe> 17767 <8be2> <8be2> 17768 <8c37> <8c37> 1291 <8c39> <8c39> 8299 <8c3b> <8c3b> 8300 <8c3c> <8c3c> 9623 <8c3d> <8c3d> 10249 <8c3e> <8c3e> 10835 <8c3f> <8c3f> 5249 <8c41> <8c41> 5248 <8c42> <8c42> 12256 endcidrange 100 begincidrange <8c43> <8c43> 12591 <8c45> <8c45> 13377 <8c46> <8c46> 1292 <8c47> <8c47> 7689 <8c48> <8c48> 2505 <8c49> <8c49> 2983 <8c4a> <8c4a> 9625 <8c4b> <8c4b> 9624 <8c4c> <8c4c> 4643 <8c4d> <8c4d> 10836 <8c4e> <8c4e> 4644 <8c4f> <8c4f> 11884 <8c50> <8c50> 5422 <8c51> <8c51> 18301 <8c54> <8c54> 5987 <8c55> <8c55> 1293 <8c56> <8c56> 6728 <8c57> <8c57> 7690 <8c5a> <8c5a> 2984 <8c5c> <8c5d> 8301 <8c5f> <8c5f> 8952 <8c61> <8c61> 3429 <8c62> <8c62> 3867 <8c64> <8c64> 9627 <8c65> <8c65> 9626 <8c66> <8c66> 9628 <8c68> <8c69> 10250 <8c6a> <8c6a> 4276 <8c6b> <8c6b> 4957 <8c6c> <8c6c> 4645 <8c6d> <8c6d> 4958 <8c6f> <8c6f> 11888 <8c70> <8c70> 11885 <8c71> <8c71> 11887 <8c72> <8c72> 11886 <8c73> <8c73> 5250 <8c75> <8c75> 12257 <8c76> <8c76> 12593 <8c77> <8c77> 12592 <8c78> <8c78> 6375 <8c79> <8c79> 2507 <8c7a> <8c7a> 2506 <8c7b> <8c7b> 7691 <8c7d> <8c7d> 8303 <8c80> <8c80> 8954 <8c81> <8c81> 8953 <8c82> <8c82> 3430 <8c84> <8c85> 9630 <8c86> <8c86> 9629 <8c89> <8c89> 3869 <8c8a> <8c8a> 3868 <8c8c> <8c8c> 4278 <8c8d> <8c8d> 4277 <8c8f> <8c8f> 10837 <8c90> <8c90> 11416 <8c91> <8c92> 11414 <8c93> <8c93> 4959 <8c94> <8c94> 11890 <8c95> <8c95> 11889 <8c97> <8c97> 12260 <8c98> <8c98> 12259 <8c99> <8c99> 12258 <8c9a> <8c9a> 12594 <8c9b> <8c9b> 14405 <8c9c> <8c9c> 13603 <8c9d> <8c9d> 1294 <8c9e> <8c9e> 2058 <8c9f> <8c9f> 15277 <8ca0> <8ca0> 2059 <8ca1> <8ca2> 2508 <8ca3> <8ca3> 7693 <8ca4> <8ca4> 7692 <8ca5> <8ca5> 8304 <8ca7> <8ca7> 2990 <8ca8> <8ca8> 2988 <8ca9> <8ca9> 2985 <8caa> <8caa> 2989 <8cab> <8cab> 2987 <8cac> <8cac> 2986 <8cad> <8cad> 16369 <8caf> <8caf> 3431 <8cb0> <8cb0> 8957 <8cb2> <8cb2> 3874 <8cb3> <8cb3> 3433 <8cb4> <8cb4> 3438 <8cb5> <8cb5> 8959 <8cb6> <8cb6> 3440 <8cb7> <8cb7> 3439 <8cb8> <8cb8> 3442 <8cb9> <8cb9> 8958 <8cba> <8cba> 8955 <8cbb> <8cbb> 3436 <8cbc> <8cbc> 3432 <8cbd> <8cbd> 3434 <8cbe> <8cbe> 8956 <8cbf> <8cbf> 3441 <8cc0> <8cc0> 3437 <8cc1> <8cc1> 3435 <8cc2> <8cc2> 3876 <8cc3> <8cc3> 3875 endcidrange 100 begincidrange <8cc4> <8cc4> 3873 <8cc5> <8cc5> 3877 <8cc7> <8cc8> 3871 <8cca> <8cca> 3870 <8ccc> <8ccc> 9632 <8ccd> <8ccd> 16025 <8ccf> <8ccf> 10253 <8cd1> <8cd2> 4280 <8cd3> <8cd3> 4279 <8cd4> <8cd4> 18302 <8cd5> <8cd5> 10252 <8cd6> <8cd6> 14411 <8cd7> <8cd7> 10254 <8cd9> <8cd9> 10840 <8cda> <8cda> 10842 <8cdb> <8cdb> 14417 <8cdc> <8cdc> 4654 <8cdd> <8cdd> 10843 <8cde> <8cde> 4647 <8cdf> <8cdf> 10839 <8ce0> <8ce0> 4646 <8ce1> <8ce1> 4656 <8ce2> <8ce3> 4652 <8ce4> <8ce4> 4649 <8ce5> <8ce5> 10838 <8ce6> <8ce6> 4648 <8ce7> <8ce7> 10844 <8ce8> <8ce8> 10841 <8ce9> <8ce9> 15278 <8cea> <8cea> 4655 <8ceb> <8ceb> 16284 <8cec> <8ced> 4650 <8cee> <8cee> 11418 <8cf0> <8cf0> 11420 <8cf1> <8cf1> 11419 <8cf2> <8cf2> 18303 <8cf3> <8cf3> 11421 <8cf4> <8cf4> 4960 <8cf5> <8cf5> 11417 <8cf7> <8cf7> 16305 <8cf8> <8cf8> 5254 <8cf9> <8cf9> 11891 <8cfa> <8cfa> 5251 <8cfb> <8cfb> 5255 <8cfc> <8cfc> 5253 <8cfd> <8cfd> 5252 <8cfe> <8cfe> 12261 <8d00> <8d00> 12264 <8d02> <8d02> 12263 <8d03> <8d03> 14415 <8d04> <8d04> 12262 <8d05> <8d05> 5423 <8d06> <8d07> 12595 <8d08> <8d08> 5581 <8d09> <8d09> 12597 <8d0a> <8d0a> 5582 <8d0b> <8d0b> 17779 <8d0c> <8d0c> 16278 <8d0d> <8d0d> 5707 <8d0f> <8d0f> 5706 <8d10> <8d10> 13078 <8d11> <8d11> 14419 <8d12> <8d12> 14414 <8d13> <8d13> 5778 <8d14> <8d14> 13079 <8d15> <8d15> 13244 <8d16> <8d17> 5849 <8d18> <8d18> 15983 <8d19> <8d19> 13378 <8d1b> <8d1b> 5935 <8d1c> <8d1c> 18304 <8d1d> <8d1d> 17670 <8d64> <8d64> 1295 <8d66> <8d66> 2992 <8d67> <8d67> 2991 <8d68> <8d69> 9633 <8d6b> <8d6b> 4282 <8d6c> <8d6c> 11422 <8d6d> <8d6d> 4657 <8d6e> <8d6e> 11423 <8d6f> <8d6f> 11892 <8d70> <8d70> 1296 <8d72> <8d72> 7174 <8d73> <8d73> 2061 <8d74> <8d74> 2060 <8d76> <8d76> 7694 <8d77> <8d77> 2510 <8d78> <8d78> 7695 <8d79> <8d79> 8307 <8d7a> <8d7a> 14817 <8d7b> <8d7b> 8306 <8d7d> <8d7d> 8305 <8d80> <8d80> 8961 <8d81> <8d81> 3445 <8d82> <8d82> 16233 <8d84> <8d84> 8960 <8d85> <8d85> 3444 <8d89> <8d89> 8962 <8d8a> <8d8a> 3443 <8d8c> <8d8c> 9636 endcidrange 100 begincidrange <8d8d> <8d8d> 9639 <8d8e> <8d8f> 9637 <8d90> <8d90> 9642 <8d91> <8d91> 9635 <8d92> <8d92> 9643 <8d93> <8d94> 9640 <8d95> <8d95> 4284 <8d96> <8d96> 10255 <8d99> <8d99> 4283 <8d9b> <8d9b> 10848 <8d9c> <8d9c> 10846 <8d9f> <8d9f> 4658 <8da0> <8da0> 10845 <8da1> <8da1> 10847 <8da3> <8da3> 4659 <8da5> <8da5> 11424 <8da6> <8da6> 16375 <8da7> <8da7> 11425 <8da8> <8da8> 5256 <8da9> <8da9> 14422 <8daa> <8daa> 12599 <8dab> <8dab> 12601 <8dac> <8dac> 12598 <8dad> <8dad> 12600 <8dae> <8dae> 12861 <8daf> <8daf> 13080 <8db2> <8db2> 13577 <8db3> <8db3> 1297 <8db4> <8db4> 2062 <8db5> <8db5> 7696 <8db6> <8db6> 7698 <8db7> <8db7> 7697 <8db9> <8db9> 8310 <8dba> <8dba> 2994 <8dbc> <8dbc> 8308 <8dbe> <8dbe> 2993 <8dbf> <8dbf> 8311 <8dc0> <8dc0> 17258 <8dc1> <8dc1> 8312 <8dc2> <8dc2> 8309 <8dc3> <8dc3> 18306 <8dc5> <8dc5> 8974 <8dc6> <8dc6> 3453 <8dc7> <8dc7> 8966 <8dc8> <8dc8> 8972 <8dcb> <8dcb> 3448 <8dcc> <8dcc> 3451 <8dcd> <8dcd> 8965 <8dce> <8dce> 3446 <8dcf> <8dcf> 8969 <8dd0> <8dd0> 9649 <8dd1> <8dd1> 3450 <8dd3> <8dd3> 8964 <8dd4> <8dd4> 16258 <8dd5> <8dd5> 8970 <8dd6> <8dd6> 8967 <8dd7> <8dd7> 8973 <8dd8> <8dd8> 8963 <8dd9> <8dd9> 8971 <8dda> <8dda> 3449 <8ddb> <8ddb> 3452 <8ddc> <8ddc> 8968 <8ddd> <8ddd> 3447 <8ddf> <8ddf> 3879 <8de0> <8de0> 9645 <8de1> <8de1> 3878 <8de2> <8de2> 9652 <8de3> <8de3> 9651 <8de4> <8de4> 3885 <8de6> <8de6> 3886 <8de7> <8de7> 9653 <8de8> <8de8> 3880 <8de9> <8de9> 9650 <8dea> <8dea> 3884 <8deb> <8deb> 9655 <8dec> <8dec> 9646 <8dee> <8dee> 9648 <8def> <8def> 3881 <8df0> <8df0> 9644 <8df1> <8df1> 9647 <8df2> <8df2> 9654 <8df3> <8df3> 3882 <8df4> <8df4> 9656 <8dfa> <8dfa> 3883 <8dfc> <8dfc> 4285 <8dfd> <8dfd> 10260 <8dfe> <8dfe> 10266 <8dff> <8dff> 10258 <8e00> <8e00> 10267 <8e01> <8e01> 16261 <8e02> <8e02> 10257 <8e03> <8e03> 10262 <8e04> <8e04> 10268 <8e05> <8e05> 10265 <8e06> <8e06> 10264 <8e07> <8e07> 10263 <8e09> <8e09> 10256 <8e0a> <8e0a> 10261 <8e0d> <8e0d> 10259 <8e0e> <8e0e> 15966 endcidrange 100 begincidrange <8e0f> <8e0f> 4664 <8e10> <8e10> 4661 <8e11> <8e11> 10857 <8e12> <8e12> 10862 <8e13> <8e13> 10864 <8e14> <8e14> 10861 <8e15> <8e15> 10854 <8e16> <8e16> 10856 <8e17> <8e17> 10866 <8e18> <8e18> 10863 <8e19> <8e19> 10858 <8e1a> <8e1a> 10867 <8e1b> <8e1b> 10855 <8e1c> <8e1c> 10865 <8e1d> <8e1d> 4662 <8e1e> <8e1e> 4668 <8e1f> <8e1f> 4666 <8e20> <8e20> 10849 <8e21> <8e21> 4667 <8e22> <8e22> 4663 <8e23> <8e23> 10850 <8e24> <8e24> 10852 <8e25> <8e25> 10851 <8e26> <8e27> 10859 <8e28> <8e28> 16264 <8e29> <8e29> 4665 <8e2a> <8e2a> 15284 <8e2b> <8e2b> 4660 <8e2d> <8e2d> 16043 <8e2e> <8e2e> 10853 <8e30> <8e30> 11435 <8e31> <8e31> 4962 <8e33> <8e33> 11426 <8e34> <8e34> 4963 <8e35> <8e35> 4966 <8e36> <8e36> 11431 <8e38> <8e38> 11428 <8e39> <8e39> 4965 <8e3a> <8e3a> 18308 <8e3c> <8e3d> 11432 <8e3e> <8e3e> 11427 <8e3f> <8e3f> 11436 <8e40> <8e40> 11429 <8e41> <8e41> 11434 <8e42> <8e42> 4964 <8e44> <8e44> 4961 <8e45> <8e45> 11430 <8e46> <8e46> 17170 <8e47> <8e47> 11898 <8e48> <8e48> 5259 <8e49> <8e49> 5257 <8e4a> <8e4a> 5260 <8e4b> <8e4b> 5258 <8e4c> <8e4c> 11897 <8e4d> <8e4d> 11894 <8e4e> <8e4e> 11893 <8e4f> <8e4f> 16259 <8e50> <8e50> 11896 <8e53> <8e53> 11895 <8e54> <8e54> 12278 <8e55> <8e55> 5429 <8e56> <8e56> 12269 <8e57> <8e57> 12268 <8e59> <8e59> 5424 <8e5a> <8e5a> 12274 <8e5b> <8e5b> 12273 <8e5c> <8e5c> 12265 <8e5d> <8e5d> 12276 <8e5e> <8e5e> 12270 <8e5f> <8e5f> 5428 <8e60> <8e60> 12267 <8e61> <8e61> 12275 <8e62> <8e62> 12266 <8e63> <8e63> 5425 <8e64> <8e64> 5427 <8e65> <8e65> 12271 <8e66> <8e66> 5426 <8e67> <8e67> 12272 <8e68> <8e68> 17229 <8e69> <8e69> 12277 <8e6a> <8e6a> 12605 <8e6c> <8e6c> 5587 <8e6d> <8e6d> 12602 <8e6f> <8e6f> 12606 <8e71> <8e71> 17383 <8e72> <8e72> 5584 <8e73> <8e73> 12604 <8e74> <8e74> 5589 <8e75> <8e75> 16265 <8e76> <8e76> 5586 <8e77> <8e77> 16255 <8e78> <8e78> 12603 <8e7a> <8e7a> 5588 <8e7b> <8e7b> 12607 <8e7c> <8e7c> 5583 <8e7e> <8e7e> 17188 <8e80> <8e80> 15959 <8e81> <8e81> 5709 <8e82> <8e82> 5711 <8e84> <8e84> 12864 endcidrange 100 begincidrange <8e85> <8e85> 5710 <8e86> <8e86> 12862 <8e87> <8e87> 5585 <8e88> <8e88> 12863 <8e89> <8e89> 5708 <8e8a> <8e8a> 5779 <8e8b> <8e8b> 5781 <8e8c> <8e8c> 13082 <8e8d> <8e8d> 5780 <8e8e> <8e8e> 13081 <8e90> <8e90> 13249 <8e91> <8e91> 5851 <8e92> <8e92> 13248 <8e93> <8e93> 5852 <8e94> <8e94> 13246 <8e95> <8e95> 13245 <8e96> <8e97> 13250 <8e98> <8e98> 13379 <8e9a> <8e9a> 13247 <8e9d> <8e9d> 13473 <8e9e> <8ea0> 13470 <8ea1> <8ea1> 5961 <8ea3> <8ea3> 13547 <8ea4> <8ea4> 13546 <8ea5> <8ea5> 13545 <8ea6> <8ea6> 13578 <8ea7> <8ea7> 15285 <8ea8> <8ea8> 13623 <8ea9> <8ea9> 13604 <8eaa> <8eaa> 5979 <8eab> <8eab> 1298 <8eac> <8eac> 2511 <8ead> <8ead> 14430 <8eb0> <8eb0> 17385 <8eb2> <8eb2> 3887 <8eb6> <8eb6> 14431 <8eba> <8eba> 4669 <8ebc> <8ebc> 14496 <8ebd> <8ebd> 11437 <8ec0> <8ec0> 5430 <8ec2> <8ec2> 12608 <8ec3> <8ec3> 14432 <8ec9> <8ec9> 13605 <8eca> <8eca> 1299 <8ecb> <8ecb> 1677 <8ecc> <8ecc> 2064 <8ecd> <8ecd> 2063 <8ece> <8ece> 18312 <8ecf> <8ecf> 2514 <8ed1> <8ed1> 7699 <8ed2> <8ed2> 2512 <8ed3> <8ed3> 7700 <8ed4> <8ed4> 2513 <8ed7> <8ed7> 8317 <8ed8> <8ed8> 8313 <8eda> <8eda> 15806 <8edb> <8edb> 2995 <8edc> <8edc> 8316 <8edd> <8edd> 8315 <8ede> <8ede> 8314 <8edf> <8edf> 2996 <8ee0> <8ee1> 8318 <8ee2> <8ee2> 18313 <8ee4> <8ee4> 18314 <8ee5> <8ee5> 8981 <8ee6> <8ee6> 8979 <8ee7> <8ee8> 8983 <8ee9> <8ee9> 8990 <8eeb> <8eeb> 8986 <8eec> <8eec> 8988 <8eed> <8eed> 18315 <8eee> <8eee> 8980 <8eef> <8eef> 8975 <8ef1> <8ef1> 8987 <8ef2> <8ef2> 18316 <8ef4> <8ef4> 8989 <8ef5> <8ef5> 8982 <8ef6> <8ef6> 8985 <8ef7> <8ef7> 8976 <8ef8> <8ef8> 3455 <8ef9> <8ef9> 8978 <8efa> <8efa> 8977 <8efb> <8efb> 3454 <8efc> <8efc> 3456 <8efe> <8efe> 3890 <8eff> <8eff> 9658 <8f00> <8f00> 9660 <8f01> <8f01> 9659 <8f02> <8f02> 9664 <8f03> <8f03> 3888 <8f05> <8f05> 9661 <8f06> <8f06> 9657 <8f07> <8f08> 9662 <8f09> <8f09> 3889 <8f0a> <8f0a> 3891 <8f0b> <8f0b> 9665 <8f0d> <8f0d> 10272 <8f0e> <8f0e> 10271 <8f10> <8f11> 10269 <8f12> <8f12> 4287 endcidrange 100 begincidrange <8f13> <8f13> 4289 <8f14> <8f14> 4286 <8f15> <8f15> 4288 <8f16> <8f17> 10874 <8f18> <8f18> 10870 <8f19> <8f19> 14434 <8f1a> <8f1a> 10871 <8f1b> <8f1b> 4671 <8f1c> <8f1c> 4676 <8f1d> <8f1d> 4670 <8f1e> <8f1e> 4677 <8f1f> <8f1f> 4672 <8f20> <8f20> 10872 <8f23> <8f23> 10873 <8f24> <8f24> 10869 <8f25> <8f25> 4678 <8f26> <8f26> 4674 <8f29> <8f29> 4673 <8f2a> <8f2a> 4675 <8f2c> <8f2c> 10868 <8f2d> <8f2d> 14435 <8f2e> <8f2e> 11439 <8f2f> <8f2f> 4968 <8f30> <8f30> 15287 <8f32> <8f32> 11441 <8f33> <8f33> 4970 <8f34> <8f34> 11444 <8f35> <8f35> 11440 <8f36> <8f36> 11438 <8f37> <8f37> 11443 <8f38> <8f38> 4969 <8f39> <8f39> 11442 <8f3b> <8f3b> 4967 <8f3e> <8f3e> 5262 <8f3f> <8f3f> 5265 <8f40> <8f40> 11900 <8f41> <8f41> 15623 <8f42> <8f42> 5263 <8f43> <8f43> 11899 <8f44> <8f44> 5261 <8f45> <8f45> 5264 <8f46> <8f48> 12279 <8f49> <8f49> 5431 <8f4a> <8f4a> 15288 <8f4b> <8f4b> 12282 <8f4d> <8f4d> 5432 <8f4e> <8f4e> 5591 <8f4f> <8f50> 12611 <8f51> <8f51> 12610 <8f52> <8f52> 12609 <8f53> <8f53> 12613 <8f54> <8f54> 5590 <8f55> <8f55> 12868 <8f56> <8f57> 12866 <8f58> <8f58> 12869 <8f59> <8f59> 12865 <8f5a> <8f5a> 12870 <8f5b> <8f5b> 13084 <8f5c> <8f5c> 16177 <8f5d> <8f5d> 13085 <8f5e> <8f5e> 13083 <8f5f> <8f5f> 5782 <8f60> <8f60> 13252 <8f61> <8f61> 5853 <8f62> <8f62> 13253 <8f63> <8f63> 13381 <8f64> <8f64> 13380 <8f66> <8f67> 17769 <8f6e> <8f6e> 17771 <8f93> <8f93> 18226 <8f9b> <8f9b> 1300 <8f9c> <8f9c> 3457 <8f9f> <8f9f> 3892 <8fa0> <8fa0> 15764 <8fa3> <8fa3> 4290 <8fa5> <8fa5> 14438 <8fa6> <8fa6> 4972 <8fa8> <8fa8> 4971 <8fad> <8fad> 5592 <8fae> <8fae> 5679 <8faf> <8faf> 5783 <8fb0> <8fb0> 1301 <8fb1> <8fb1> 2515 <8fb2> <8fb2> 3893 <8fb3> <8fb3> 14442 <8fb4> <8fb4> 12614 <8fb5> <8fb5> 560 <8fb6> <8fb6> 18387 <8fb7> <8fb7> 17405 <8fb8> <8fb8> 17142 <8fb9> <8fb9> 18633 <8fba> <8fba> 18631 <8fbb> <8fbc> 15723 <8fbe> <8fbe> 18630 <8fbf> <8fbf> 6377 <8fc1> <8fc1> 18317 <8fc2> <8fc2> 1302 <8fc4> <8fc4> 1305 <8fc5> <8fc5> 1304 <8fc6> <8fc6> 1303 endcidrange 100 begincidrange <8fc9> <8fc9> 6376 <8fca> <8fca> 18318 <8fcb> <8fcb> 6730 <8fcc> <8fcc> 18319 <8fcd> <8fcd> 6732 <8fce> <8fce> 1678 <8fd0> <8fd0> 18606 <8fd1> <8fd1> 1680 <8fd2> <8fd2> 6729 <8fd3> <8fd3> 6731 <8fd4> <8fd4> 1679 <8fd5> <8fd5> 6734 <8fd6> <8fd6> 6733 <8fd7> <8fd7> 6735 <8fda> <8fda> 16331 <8fe0> <8fe0> 7178 <8fe1> <8fe1> 7176 <8fe2> <8fe2> 2067 <8fe3> <8fe3> 7175 <8fe4> <8fe4> 2072 <8fe5> <8fe5> 2069 <8fe6> <8fe6> 2066 <8fe8> <8fe8> 2073 <8fea> <8fea> 2068 <8feb> <8feb> 2071 <8fed> <8fed> 2070 <8fee> <8fee> 7177 <8ff0> <8ff0> 2065 <8ff4> <8ff4> 2521 <8ff5> <8ff5> 7702 <8ff6> <8ff6> 7708 <8ff7> <8ff7> 2518 <8ff8> <8ff8> 2525 <8ff9> <8ff9> 14449 <8ffa> <8ffa> 2520 <8ffb> <8ffb> 7705 <8ffc> <8ffc> 7707 <8ffd> <8ffd> 2523 <8ffe> <8ffe> 7701 <8fff> <8fff> 7704 <9000> <9000> 2519 <9001> <9001> 2516 <9002> <9002> 7703 <9003> <9003> 2522 <9004> <9004> 7706 <9005> <9005> 2524 <9006> <9006> 2517 <9008> <9008> 16096 <900b> <900b> 8321 <900c> <900c> 8324 <900d> <900d> 2998 <900f> <900f> 3008 <9010> <9010> 3004 <9011> <9011> 8322 <9012> <9012> 15950 <9014> <9014> 3012 <9015> <9015> 3005 <9016> <9016> 3010 <9017> <9017> 3000 <9019> <9019> 2997 <901a> <901a> 2999 <901b> <901b> 3011 <901c> <901c> 8323 <901d> <901d> 3003 <901e> <901e> 3006 <901f> <901f> 3002 <9020> <9020> 3007 <9021> <9021> 8325 <9022> <9022> 3009 <9023> <9023> 3001 <9024> <9024> 8320 <902d> <902d> 8991 <902e> <902e> 3458 <902f> <902f> 8993 <9031> <9031> 3460 <9032> <9032> 3462 <9033> <9033> 18320 <9034> <9034> 8992 <9035> <9035> 3459 <9036> <9036> 3463 <9037> <9037> 14454 <9038> <9038> 3461 <903c> <903c> 3899 <903d> <903d> 9670 <903e> <903e> 3907 <903f> <903f> 9667 <9041> <9041> 3908 <9042> <9042> 3897 <9044> <9044> 9668 <9047> <9047> 3902 <9049> <9049> 9669 <904a> <904a> 3895 <904b> <904b> 3894 <904c> <904c> 16144 <904d> <904d> 3905 <904e> <904e> 3904 <904f> <904f> 3903 <9050> <9050> 3901 <9051> <9051> 3906 <9052> <9052> 9666 endcidrange 100 begincidrange <9053> <9053> 3896 <9054> <9054> 3898 <9055> <9055> 3900 <9056> <9056> 15826 <9058> <9058> 4292 <9059> <9059> 4295 <905b> <905b> 4299 <905c> <905c> 4293 <905d> <905d> 4298 <905e> <905e> 4296 <9060> <9060> 4291 <9061> <9061> 14457 <9062> <9062> 4297 <9063> <9063> 4294 <9064> <9064> 15464 <9067> <9067> 10879 <9068> <9068> 4681 <9069> <9069> 4679 <906b> <906b> 10880 <906c> <906c> 15712 <906d> <906d> 4682 <906e> <906e> 4680 <906f> <906f> 10878 <9070> <9070> 10877 <9072> <9072> 4976 <9073> <9073> 10876 <9074> <9074> 4974 <9075> <9075> 4973 <9076> <9076> 11445 <9077> <9077> 4683 <9078> <9078> 4975 <9079> <9079> 11446 <907a> <907a> 4978 <907b> <907b> 11447 <907c> <907c> 4977 <907d> <907d> 5267 <907e> <907e> 11902 <907f> <907f> 5266 <9080> <9080> 5271 <9081> <9082> 5269 <9083> <9083> 5434 <9084> <9084> 5268 <9085> <9085> 11901 <9086> <9086> 11448 <9087> <9087> 5433 <9088> <9088> 5435 <908a> <908b> 5593 <908d> <908d> 12871 <908f> <908f> 5900 <9090> <9090> 5899 <9091> <9091> 1307 <9094> <9094> 6174 <9095> <9095> 2526 <9097> <9098> 6171 <9099> <9099> 6170 <909b> <909b> 6173 <909e> <909e> 6381 <909f> <909f> 6378 <90a0> <90a0> 6383 <90a1> <90a1> 6379 <90a2> <90a2> 1308 <90a3> <90a3> 1311 <90a5> <90a5> 6380 <90a6> <90a6> 1310 <90a7> <90a7> 6382 <90a8> <90a8> 14460 <90aa> <90aa> 1309 <90ae> <90ae> 14464 <90af> <90af> 6738 <90b0> <90b0> 6740 <90b1> <90b1> 1683 <90b2> <90b2> 6736 <90b3> <90b3> 6739 <90b4> <90b4> 6737 <90b5> <90b5> 1681 <90b6> <90b6> 1684 <90b8> <90b8> 1682 <90bb> <90bb> 15300 <90bd> <90bd> 7180 <90be> <90be> 7184 <90bf> <90bf> 7181 <90c1> <90c1> 2076 <90c3> <90c3> 2077 <90c4> <90c4> 14462 <90c5> <90c5> 7183 <90c7> <90c7> 7185 <90c8> <90c8> 7187 <90ca> <90ca> 2074 <90cb> <90cb> 7186 <90ce> <90ce> 2075 <90d4> <90d4> 8332 <90d5> <90d5> 7182 <90d6> <90d6> 7709 <90d7> <90d7> 7718 <90d8> <90d8> 7716 <90d9> <90da> 7711 <90db> <90db> 7717 <90dc> <90dc> 7719 <90dd> <90dd> 2528 <90df> <90df> 7714 endcidrange 100 begincidrange <90e0> <90e0> 7710 <90e1> <90e1> 2527 <90e2> <90e2> 2529 <90e3> <90e3> 7713 <90e4> <90e4> 7720 <90e5> <90e5> 7715 <90e8> <90e8> 3013 <90e9> <90e9> 8335 <90ea> <90ea> 8327 <90eb> <90ec> 8333 <90ed> <90ed> 3014 <90ef> <90ef> 8326 <90f0> <90f0> 8328 <90f1> <90f1> 7179 <90f2> <90f3> 8330 <90f4> <90f4> 8329 <90f5> <90f5> 3465 <90f9> <90f9> 9000 <90fa> <90fa> 11449 <90fb> <90fb> 9001 <90fc> <90fc> 8998 <90fd> <90fd> 3015 <90fe> <90fe> 3467 <90ff> <90ff> 8997 <9100> <9100> 9003 <9101> <9101> 9002 <9102> <9102> 3464 <9103> <9103> 9006 <9104> <9104> 8996 <9105> <9105> 9005 <9106> <9106> 8994 <9107> <9107> 9004 <9108> <9108> 8999 <9109> <9109> 3466 <910b> <910b> 9677 <910d> <910d> 9672 <910e> <910e> 9678 <910f> <910f> 9673 <9110> <9110> 9671 <9111> <9111> 9674 <9112> <9112> 3909 <9114> <9114> 9676 <9116> <9116> 9675 <9117> <9117> 3910 <9118> <9118> 4301 <9119> <9119> 4300 <911a> <911a> 10279 <911b> <911b> 10282 <911c> <911c> 10274 <911d> <911d> 10278 <911e> <911e> 4302 <911f> <911f> 10277 <9120> <9120> 10275 <9121> <9121> 10281 <9122> <9122> 10276 <9123> <9123> 10273 <9124> <9124> 10280 <9126> <9126> 10886 <9127> <9127> 4686 <9128> <9128> 12283 <9129> <912a> 10883 <912b> <912b> 10882 <912c> <912c> 8995 <912d> <912d> 4685 <912e> <912e> 10887 <912f> <912f> 10881 <9130> <9130> 4684 <9131> <9131> 4687 <9132> <9132> 10885 <9133> <9133> 11450 <9134> <9134> 4979 <9135> <9136> 11451 <9138> <9138> 11903 <9139> <9139> 5272 <913a> <913b> 12284 <913e> <913e> 12286 <913f> <913f> 12616 <9140> <9140> 12615 <9141> <9141> 12873 <9143> <9143> 12872 <9144> <9145> 13087 <9146> <9146> 13086 <9147> <9147> 13254 <9148> <9148> 5854 <9149> <9149> 1312 <914a> <914a> 2079 <914b> <914b> 2078 <914c> <914c> 2532 <914d> <914d> 2531 <914e> <914f> 7722 <9150> <9150> 7721 <9151> <9151> 16201 <9152> <9152> 2530 <9153> <9153> 8339 <9155> <9155> 8340 <9156> <9156> 8336 <9157> <9157> 3016 <9158> <9158> 8337 <9159> <9159> 16197 <915a> <915a> 8338 endcidrange 100 begincidrange <915c> <915c> 16199 <915e> <915e> 17387 <915f> <915f> 9009 <9160> <9160> 9011 <9161> <9161> 9007 <9162> <9162> 9010 <9163> <9163> 3468 <9164> <9164> 9008 <9165> <9165> 3469 <9167> <9167> 14466 <9168> <9168> 9186 <9169> <9169> 3913 <916a> <916a> 3912 <916c> <916c> 3911 <916e> <916f> 9679 <9170> <9170> 16056 <9172> <9172> 10284 <9173> <9173> 10286 <9174> <9174> 4306 <9175> <9175> 4303 <9176> <9176> 16027 <9177> <9177> 4305 <9178> <9178> 4304 <9179> <9179> 10285 <917a> <917a> 10283 <917c> <917c> 16239 <9180> <9180> 10894 <9181> <9182> 10891 <9183> <9183> 4691 <9184> <9184> 10893 <9185> <9186> 10888 <9187> <9187> 4688 <9189> <9189> 4689 <918a> <918a> 10890 <918b> <918b> 4690 <918c> <918c> 17388 <918d> <918d> 11456 <918e> <918e> 16206 <918f> <918f> 11457 <9190> <9191> 11454 <9192> <9192> 4980 <9193> <9193> 11453 <9199> <9199> 11907 <919a> <919a> 11904 <919b> <919b> 11906 <919c> <919c> 5275 <919d> <919d> 11910 <919e> <919e> 5274 <919f> <919f> 11908 <91a0> <91a0> 11911 <91a1> <91a1> 11909 <91a2> <91a2> 11905 <91a3> <91a3> 5273 <91a5> <91a5> 12288 <91a7> <91a7> 12289 <91a8> <91a8> 12287 <91a9> <91a9> 14467 <91aa> <91aa> 12291 <91ab> <91ac> 5436 <91ad> <91ad> 12618 <91ae> <91ae> 5596 <91af> <91af> 12290 <91b0> <91b0> 12617 <91b1> <91b1> 5595 <91b2> <91b3> 12876 <91b4> <91b4> 5712 <91b5> <91b5> 12875 <91b6> <91b6> 17903 <91b7> <91b7> 12874 <91b9> <91b9> 13089 <91ba> <91ba> 5784 <91bb> <91bb> 15304 <91bc> <91bc> 13382 <91bd> <91bd> 13475 <91be> <91be> 13474 <91c0> <91c0> 5936 <91c1> <91c1> 5962 <91c2> <91c2> 13476 <91c3> <91c3> 13579 <91c4> <91c4> 14468 <91c5> <91c5> 5980 <91c6> <91c6> 1313 <91c7> <91c7> 1685 <91c9> <91c9> 3914 <91cb> <91cb> 5713 <91cc> <91cc> 1314 <91cd> <91cd> 2080 <91ce> <91ce> 3017 <91cf> <91cf> 3470 <91d0> <91d0> 5438 <91d1> <91d1> 1686 <91d3> <91d3> 7189 <91d4> <91d4> 7188 <91d5> <91d5> 7724 <91d6> <91d6> 16734 <91d7> <91d7> 2535 <91d8> <91d8> 2533 <91d9> <91d9> 2537 <91da> <91da> 7726 <91dc> <91dc> 2536 endcidrange 100 begincidrange <91dd> <91dd> 2534 <91df> <91df> 17722 <91e2> <91e2> 7725 <91e3> <91e3> 3020 <91e4> <91e4> 8346 <91e5> <91e5> 15366 <91e6> <91e6> 3019 <91e7> <91e7> 3021 <91e8> <91e8> 8351 <91e9> <91e9> 3023 <91ea> <91eb> 8348 <91ec> <91ec> 8341 <91ed> <91ed> 3022 <91ee> <91ee> 8352 <91f1> <91f1> 8343 <91f3> <91f3> 8344 <91f4> <91f4> 8342 <91f5> <91f5> 3018 <91f7> <91f7> 8350 <91f8> <91f8> 8345 <91f9> <91f9> 8347 <91fa> <91fa> 15096 <91fd> <91fd> 9023 <91fe> <91fe> 14382 <91ff> <91ff> 9022 <9200> <9200> 9020 <9201> <9201> 9012 <9202> <9202> 9027 <9203> <9203> 9015 <9204> <9204> 9025 <9205> <9205> 9032 <9206> <9206> 9024 <9207> <9207> 3478 <9208> <9208> 16057 <9209> <9209> 3474 <920a> <920a> 9013 <920c> <920c> 9019 <920d> <920d> 3476 <920e> <920e> 14472 <920f> <920f> 9018 <9210> <9210> 3477 <9211> <9211> 3479 <9212> <9212> 9021 <9213> <9213> 18323 <9214> <9215> 3471 <9216> <9216> 9033 <9217> <9217> 9031 <9219> <9219> 9030 <921a> <921a> 9016 <921c> <921c> 9028 <921e> <921e> 3475 <9223> <9223> 3473 <9224> <9224> 9029 <9225> <9225> 9014 <9226> <9226> 9017 <9227> <9227> 9026 <9228> <9228> 18325 <922a> <922a> 15374 <922b> <922b> 15270 <922d> <922d> 10321 <922e> <922e> 9690 <9230> <9230> 9683 <9231> <9231> 9702 <9232> <9232> 9711 <9233> <9233> 9686 <9234> <9234> 3925 <9235> <9235> 15142 <9236> <9236> 9699 <9237> <9237> 3915 <9238> <9238> 3917 <9239> <9239> 3929 <923a> <923a> 9684 <923c> <923c> 16850 <923d> <923d> 3918 <923e> <923e> 3920 <923f> <923f> 3930 <9240> <9240> 3919 <9241> <9241> 14474 <9244> <9244> 14490 <9245> <9245> 3928 <9246> <9246> 9692 <9248> <9248> 9681 <9249> <9249> 3926 <924a> <924a> 9691 <924b> <924b> 3922 <924c> <924c> 9709 <924d> <924d> 3927 <924e> <924e> 9707 <924f> <924f> 9695 <9250> <9250> 9705 <9251> <9251> 3924 <9252> <9252> 9682 <9253> <9253> 9708 <9254> <9254> 9703 <9255> <9255> 15943 <9256> <9256> 9710 <9257> <9257> 3916 <9258> <9258> 18326 <925a> <925a> 3931 <925b> <925b> 3921 endcidrange 100 begincidrange <925d> <925d> 14851 <925e> <925e> 9688 <925f> <925f> 15584 <9260> <9260> 9696 <9261> <9261> 9700 <9262> <9262> 14475 <9263> <9263> 9704 <9264> <9264> 3923 <9265> <9265> 9687 <9266> <9266> 9685 <9267> <9267> 9697 <926b> <926b> 18327 <926c> <926c> 9694 <926d> <926d> 9693 <926e> <926e> 15621 <926f> <926f> 9698 <9270> <9270> 9701 <9272> <9272> 9706 <9276> <9276> 10289 <9277> <9277> 15460 <9278> <9278> 4307 <9279> <9279> 10299 <927a> <927a> 10291 <927b> <927b> 4313 <927c> <927c> 4317 <927d> <927d> 10308 <927e> <927e> 10316 <927f> <927f> 10301 <9280> <9280> 4309 <9281> <9281> 15873 <9282> <9282> 10305 <9283> <9283> 9689 <9284> <9284> 15545 <9285> <9285> 4310 <9286> <9286> 10312 <9287> <9287> 10317 <9288> <9288> 10309 <9289> <9289> 15029 <928a> <928a> 10311 <928b> <928b> 10320 <928c> <928c> 10313 <928d> <928d> 10295 <928e> <928e> 10304 <928f> <928f> 18109 <9291> <9291> 4318 <9293> <9293> 4314 <9294> <9294> 10293 <9295> <9295> 10306 <9296> <9296> 4312 <9297> <9297> 10300 <9298> <9298> 4311 <9299> <9299> 10314 <929a> <929a> 10297 <929b> <929b> 10290 <929c> <929c> 4315 <929d> <929d> 10319 <92a0> <92a0> 10292 <92a1> <92a1> 10310 <92a2> <92a2> 10307 <92a3> <92a3> 10302 <92a4> <92a4> 10288 <92a5> <92a5> 10287 <92a6> <92a6> 10296 <92a7> <92a7> 10315 <92a8> <92a8> 4316 <92a9> <92a9> 10318 <92aa> <92aa> 10294 <92ab> <92ab> 10298 <92ac> <92ac> 4308 <92ae> <92ae> 18329 <92b1> <92b1> 18328 <92b2> <92b2> 4703 <92b3> <92b3> 4698 <92b4> <92b4> 10928 <92b5> <92b5> 10924 <92b6> <92b6> 10900 <92b7> <92b7> 4694 <92b9> <92b9> 14057 <92ba> <92ba> 15349 <92bb> <92bb> 4693 <92bc> <92bc> 4699 <92be> <92be> 15456 <92bf> <92bf> 18330 <92c0> <92c0> 10898 <92c1> <92c1> 4697 <92c2> <92c2> 10910 <92c3> <92c4> 10896 <92c5> <92c5> 4692 <92c6> <92c6> 10927 <92c7> <92c7> 4701 <92c8> <92c8> 10913 <92c9> <92c9> 10918 <92ca> <92ca> 10912 <92cb> <92cb> 11475 <92cc> <92cc> 10908 <92cd> <92cd> 10916 <92ce> <92ce> 10914 <92cf> <92cf> 10901 <92d0> <92d0> 10895 <92d1> <92d1> 10922 endcidrange 100 begincidrange <92d2> <92d2> 4700 <92d3> <92d3> 10923 <92d4> <92d4> 14433 <92d5> <92d5> 10917 <92d7> <92d7> 10906 <92d8> <92d8> 10904 <92d9> <92d9> 10899 <92db> <92db> 16396 <92dd> <92dd> 10907 <92de> <92de> 10920 <92df> <92df> 10903 <92e0> <92e0> 10919 <92e1> <92e1> 10925 <92e3> <92e3> 18331 <92e4> <92e4> 4696 <92e5> <92e5> 15522 <92e6> <92e6> 10915 <92e7> <92e7> 10921 <92e8> <92e8> 10911 <92e9> <92e9> 10905 <92ea> <92ea> 4695 <92eb> <92eb> 18332 <92ec> <92ec> 14692 <92ee> <92ee> 10303 <92ef> <92ef> 10909 <92f0> <92f0> 4702 <92f1> <92f1> 10902 <92f2> <92f2> 15026 <92f3> <92f4> 18333 <92f6> <92f6> 15364 <92f7> <92f7> 11480 <92f8> <92f8> 4983 <92f9> <92f9> 11479 <92fa> <92fa> 11477 <92fb> <92fb> 11495 <92fc> <92fc> 4987 <92fd> <92fd> 18335 <92fe> <92fe> 11492 <92ff> <92ff> 11484 <9300> <9300> 11494 <9301> <9301> 11470 <9302> <9302> 11482 <9303> <9303> 14439 <9304> <9304> 4989 <9306> <9306> 11462 <9307> <9307> 15121 <9308> <9308> 11460 <9309> <9309> 11493 <930b> <930b> 11491 <930c> <930c> 11490 <930d> <930d> 11474 <930e> <930e> 11473 <930f> <930f> 11463 <9310> <9310> 4991 <9312> <9312> 11469 <9313> <9313> 11478 <9314> <9314> 11489 <9315> <9315> 4994 <9316> <9316> 11496 <9318> <9318> 5283 <9319> <9319> 4996 <931a> <931a> 4990 <931b> <931b> 11467 <931d> <931d> 11476 <931e> <931e> 11459 <931f> <931f> 11461 <9320> <9320> 4981 <9321> <9321> 4993 <9322> <9322> 4986 <9323> <9323> 11468 <9324> <9324> 11483 <9325> <9325> 10926 <9326> <9326> 4992 <9327> <9327> 11458 <9328> <9328> 5278 <9329> <9329> 11485 <932a> <932a> 11488 <932b> <932b> 4988 <932c> <932c> 14482 <932d> <932d> 11472 <932e> <932e> 4995 <932f> <932f> 4985 <9330> <9330> 15875 <9331> <9331> 15549 <9333> <9333> 4984 <9334> <9334> 11481 <9335> <9335> 11487 <9336> <9336> 4982 <9338> <9338> 11465 <9339> <9339> 11486 <933c> <933c> 11466 <9340> <9340> 16725 <9341> <9341> 17015 <9342> <9342> 15098 <9343> <9343> 18336 <9344> <9344> 16406 <9345> <9345> 15988 <9346> <9346> 11471 <9347> <9347> 11917 <9348> <9348> 15457 endcidrange 100 begincidrange <9349> <9349> 11922 <934a> <934a> 5280 <934b> <934b> 5282 <934c> <934c> 11928 <934d> <934d> 5276 <934e> <934e> 11942 <934f> <934f> 11934 <9350> <9351> 11923 <9352> <9352> 11933 <9354> <9354> 5289 <9355> <9355> 11932 <9356> <9356> 11916 <9357> <9357> 11931 <9358> <9358> 11919 <9359> <9359> 11943 <935a> <935a> 5288 <935b> <935b> 5286 <935c> <935c> 11920 <935e> <935e> 11939 <935f> <935f> 15547 <9360> <9360> 11925 <9361> <9361> 11938 <9362> <9362> 17000 <9363> <9363> 11940 <9364> <9364> 11915 <9365> <9365> 5281 <9366> <9366> 18108 <9367> <9367> 11941 <9368> <9368> 15344 <9369> <9369> 14689 <936a> <936a> 11929 <936b> <936b> 14483 <936c> <936c> 5285 <936d> <936d> 11926 <936e> <936e> 14824 <9370> <9370> 5287 <9371> <9371> 11935 <9373> <9373> 14494 <9374> <9374> 15588 <9375> <9375> 5279 <9376> <9376> 11921 <9377> <9377> 11936 <9378> <9378> 14585 <9379> <9379> 11930 <937a> <937a> 11464 <937b> <937b> 11937 <937c> <937c> 11918 <937d> <937d> 15397 <937e> <937e> 5284 <9380> <9380> 12308 <9381> <9381> 14693 <9382> <9382> 5277 <9383> <9383> 11913 <9384> <9384> 18337 <9385> <9385> 17085 <9386> <9386> 15552 <9387> <9387> 15072 <9388> <9388> 12305 <9389> <9389> 12298 <938a> <938a> 5440 <938c> <938c> 12293 <938d> <938d> 12309 <938e> <938e> 12300 <938f> <938f> 11927 <9390> <9390> 15676 <9391> <9391> 12311 <9392> <9392> 12294 <9394> <9394> 5439 <9395> <9395> 12304 <9396> <9396> 5441 <9397> <9397> 5449 <9398> <9398> 5447 <9399> <9399> 12306 <939a> <939a> 5448 <939b> <939b> 12296 <939c> <939c> 14764 <939d> <939d> 12297 <939e> <939e> 12302 <939f> <939f> 12307 <93a0> <93a0> 15025 <93a1> <93a1> 11912 <93a2> <93a2> 5442 <93a3> <93a3> 12316 <93a4> <93a4> 12313 <93a5> <93a5> 12640 <93a6> <93a6> 12303 <93a7> <93a7> 12299 <93a8> <93a8> 12314 <93a9> <93a9> 12629 <93aa> <93aa> 12301 <93ac> <93ac> 5445 <93ad> <93ad> 18338 <93ae> <93ae> 5444 <93af> <93af> 11914 <93b0> <93b0> 5446 <93b1> <93b1> 12310 <93b2> <93b2> 12312 <93b3> <93b3> 5443 <93b4> <93b4> 12315 <93b5> <93b5> 12292 endcidrange 100 begincidrange <93b7> <93b7> 12295 <93b8> <93b8> 15504 <93ba> <93ba> 17399 <93bb> <93bb> 15503 <93bd> <93bd> 14887 <93bf> <93bf> 15917 <93c0> <93c0> 12638 <93c2> <93c2> 12622 <93c3> <93c3> 5600 <93c4> <93c4> 12636 <93c6> <93c6> 14762 <93c7> <93c7> 12620 <93c8> <93c8> 5601 <93ca> <93ca> 12631 <93cb> <93cb> 14694 <93cc> <93cc> 12627 <93cd> <93cd> 5606 <93ce> <93ce> 12637 <93cf> <93cf> 12621 <93d0> <93d0> 12624 <93d1> <93d1> 5598 <93d2> <93d2> 12639 <93d3> <93d3> 16609 <93d4> <93d4> 12632 <93d5> <93d5> 12635 <93d6> <93d6> 5604 <93d7> <93d7> 5609 <93d8> <93d8> 5607 <93d9> <93d9> 12628 <93da> <93da> 12623 <93db> <93db> 15455 <93dc> <93dd> 5602 <93de> <93de> 12619 <93df> <93df> 5599 <93e0> <93e0> 14880 <93e1> <93e1> 5597 <93e2> <93e2> 5605 <93e3> <93e3> 12634 <93e4> <93e4> 5608 <93e6> <93e6> 12630 <93e7> <93e7> 12641 <93e8> <93e8> 5610 <93ec> <93ec> 12626 <93ee> <93ee> 12633 <93f0> <93f0> 16959 <93f1> <93f1> 17066 <93f3> <93f3> 14690 <93f5> <93f5> 12890 <93f6> <93f6> 12905 <93f7> <93f7> 12892 <93f8> <93f8> 12899 <93f9> <93f9> 12625 <93fa> <93fa> 12897 <93fb> <93fb> 12880 <93fc> <93fc> 12903 <93fd> <93fd> 5716 <93fe> <93fe> 12884 <93ff> <93ff> 12902 <9400> <9400> 12891 <9401> <9401> 15572 <9403> <9403> 5715 <9404> <9404> 15305 <9406> <9406> 12907 <9407> <9407> 12893 <9408> <9408> 14885 <9409> <9409> 12898 <940a> <940a> 12901 <940b> <940b> 12878 <940c> <940c> 12904 <940d> <940d> 12889 <940e> <940e> 12894 <940f> <940f> 12882 <9410> <9410> 12886 <9411> <9411> 12906 <9412> <9412> 12896 <9413> <9413> 12879 <9414> <9414> 12883 <9415> <9415> 12885 <9416> <9416> 12895 <9417> <9417> 18341 <9418> <9418> 5714 <9419> <9419> 12888 <941b> <941b> 16712 <941d> <941d> 18342 <9420> <9420> 12881 <9424> <9424> 14659 <9425> <9425> 14544 <9426> <9426> 14499 <9427> <9427> 15309 <9428> <9428> 12887 <9429> <9429> 13093 <942a> <942a> 13097 <942b> <942b> 5791 <942c> <942c> 13099 <942d> <942d> 18343 <942e> <942e> 5785 <9430> <9430> 13095 <9431> <9431> 13101 <9432> <9432> 5790 <9433> <9433> 5786 endcidrange 100 begincidrange <9435> <9435> 5787 <9436> <9436> 13092 <9437> <9437> 13098 <9438> <9438> 5789 <9439> <9439> 13096 <943a> <943a> 5788 <943b> <943b> 13091 <943c> <943c> 12900 <943d> <943d> 13094 <943e> <943e> 18344 <943f> <943f> 13090 <9440> <9440> 13100 <9442> <9442> 17010 <9443> <9443> 17013 <9444> <9444> 5855 <9445> <9445> 13261 <9446> <9446> 13264 <9447> <9447> 13260 <9448> <9449> 13262 <944a> <944b> 13257 <944c> <944c> 13255 <944d> <944d> 15461 <944f> <944f> 13259 <9450> <9450> 13256 <9451> <9452> 5856 <9454> <9454> 18346 <9455> <9455> 13384 <9457> <9457> 13386 <9458> <9458> 15408 <945b> <945b> 14495 <945d> <945d> 13385 <945e> <945e> 13387 <9460> <9460> 5902 <9462> <9462> 13383 <9463> <9463> 5901 <9464> <9464> 5903 <9465> <9465> 15838 <9467> <9467> 15032 <9468> <9469> 13478 <946a> <946a> 5937 <946b> <946b> 13477 <946c> <946c> 14206 <946d> <946d> 13549 <946e> <946e> 13548 <946f> <946f> 13550 <9470> <9470> 5964 <9471> <9471> 13551 <9472> <9472> 5963 <9473> <9473> 13552 <9474> <9474> 13580 <9475> <9475> 13583 <9476> <9476> 13582 <9477> <9477> 5973 <9478> <9478> 13581 <9479> <9479> 18347 <947b> <947b> 16795 <947c> <947c> 5983 <947d> <947e> 5981 <947f> <947f> 5988 <9480> <9481> 13625 <9482> <9482> 13624 <9483> <9483> 13632 <9485> <9485> 17671 <949f> <949f> 18565 <94a2> <94a2> 17691 <94c1> <94c1> 18401 <94c3> <94c3> 18399 <94dc> <94dc> 18391 <94f6> <94f6> 18386 <952d> <952d> 18348 <9547> <9547> 18623 <9577> <9577> 1687 <9578> <9578> 17672 <957a> <957a> 8353 <957b> <957b> 9034 <957c> <957c> 10929 <957d> <957d> 12642 <957f> <957f> 17673 <9580> <9580> 1688 <9582> <9582> 2081 <9583> <9583> 2538 <9585> <9585> 14497 <9586> <9586> 8354 <9588> <9588> 8355 <9589> <9589> 3024 <958b> <958b> 3482 <958c> <958c> 9036 <958d> <958d> 9035 <958e> <958e> 3486 <958f> <958f> 3481 <9590> <9590> 9037 <9591> <9591> 3483 <9592> <9592> 3485 <9593> <9593> 3484 <9594> <9594> 3480 <9596> <9596> 15317 <9597> <9597> 15316 <9598> <9598> 3932 <9599> <9599> 15314 <959b> <959b> 9715 endcidrange 100 begincidrange <959c> <959c> 9713 <959e> <959e> 9714 <959f> <959f> 9712 <95a0> <95a0> 14500 <95a1> <95a1> 4319 <95a2> <95a2> 18349 <95a3> <95a3> 4322 <95a4> <95a4> 4324 <95a5> <95a5> 4323 <95a6> <95a6> 14498 <95a7> <95a7> 15315 <95a8> <95a9> 4320 <95aa> <95aa> 17301 <95ab> <95ab> 10931 <95ac> <95ac> 10930 <95ad> <95ad> 4704 <95ae> <95ae> 10932 <95b0> <95b0> 10933 <95b1> <95b1> 4705 <95b5> <95b5> 11504 <95b6> <95b6> 11502 <95b7> <95b7> 11949 <95b9> <95ba> 11500 <95bb> <95bb> 4997 <95bc> <95bc> 11497 <95bd> <95bd> 11505 <95be> <95be> 11499 <95bf> <95bf> 11503 <95c0> <95c0> 11945 <95c3> <95c3> 11947 <95c5> <95c5> 11948 <95c6> <95c6> 5294 <95c7> <95c7> 11944 <95c8> <95c8> 5293 <95c9> <95c9> 11946 <95ca> <95cc> 5290 <95cd> <95cd> 11498 <95d0> <95d0> 5452 <95d1> <95d1> 12319 <95d2> <95d3> 12317 <95d4> <95d4> 5450 <95d5> <95d5> 5453 <95d6> <95d6> 5451 <95da> <95db> 12643 <95dc> <95dc> 5611 <95de> <95de> 12908 <95df> <95df> 12910 <95e0> <95e0> 12909 <95e1> <95e1> 5717 <95e2> <95e2> 5792 <95e3> <95e3> 13104 <95e4> <95e4> 13103 <95e5> <95e5> 13102 <95e8> <95e8> 17674 <95f4> <95f4> 18351 <961c> <961c> 1689 <961d> <961d> 17689 <961e> <961e> 6068 <9620> <9620> 6177 <9621> <9621> 1044 <9622> <9622> 6175 <9623> <9623> 6178 <9624> <9624> 6176 <9628> <9628> 6385 <962a> <962a> 1318 <962c> <962c> 1319 <962d> <962d> 6387 <962e> <962e> 1316 <962f> <962f> 6386 <9630> <9630> 6384 <9631> <9631> 1317 <9632> <9632> 1315 <9633> <9633> 18352 <9638> <9638> 16337 <9639> <9639> 6741 <963a> <963a> 6744 <963b> <963b> 1692 <963c> <963c> 6743 <963d> <963d> 6742 <963f> <963f> 1691 <9640> <9640> 1690 <9641> <9641> 16189 <9642> <9642> 1694 <9643> <9643> 6745 <9644> <9644> 1693 <9645> <9645> 18290 <964a> <964a> 7194 <964b> <964d> 2083 <964e> <964e> 7195 <964f> <964f> 7191 <9650> <9650> 2082 <9651> <9651> 7192 <9653> <9653> 7193 <9654> <9654> 7190 <9656> <9656> 15847 <9658> <9658> 2545 <965b> <965b> 2542 <965c> <965c> 7727 <965d> <965d> 2543 <965e> <965e> 2546 endcidrange 100 begincidrange <965f> <965f> 7728 <9661> <9661> 2541 <9662> <9663> 2539 <9664> <9664> 2544 <9669> <9669> 18270 <966a> <966a> 3025 <966b> <966b> 8358 <966c> <966c> 3033 <966d> <966d> 8357 <966f> <966f> 8360 <9670> <9670> 3029 <9671> <9671> 8359 <9672> <9672> 3494 <9673> <9673> 3027 <9674> <9674> 3030 <9675> <9675> 3026 <9676> <9677> 3031 <9678> <9678> 3028 <967b> <967b> 14508 <967c> <967c> 8356 <967d> <967d> 3490 <967e> <967e> 9039 <9680> <9680> 9043 <9681> <9681> 16198 <9683> <9683> 9042 <9684> <9684> 3495 <9685> <9686> 3491 <9687> <9687> 9038 <9688> <9689> 9040 <968a> <968a> 3487 <968b> <968b> 3489 <968d> <968d> 3493 <968e> <968e> 3488 <968f> <968f> 15326 <9691> <9691> 9718 <9692> <9693> 9716 <9694> <9695> 3934 <9696> <9696> 14509 <9697> <9697> 9719 <9698> <9698> 3933 <9699> <9699> 4325 <969b> <969b> 4327 <969c> <969c> 4326 <969e> <969e> 10322 <96a1> <96a1> 10323 <96a2> <96a2> 10935 <96a3> <96a3> 14511 <96a4> <96a4> 10934 <96a5> <96a5> 17135 <96a7> <96a8> 4998 <96a9> <96a9> 11506 <96aa> <96aa> 5000 <96ac> <96ac> 11952 <96ae> <96ae> 11950 <96b0> <96b0> 11951 <96b1> <96b1> 5295 <96b3> <96b3> 12320 <96b4> <96b4> 5612 <96b6> <96b6> 561 <96b8> <96b8> 5296 <96b9> <96b9> 1695 <96bb> <96bb> 2547 <96bc> <96bc> 7729 <96bd> <96bd> 14517 <96bf> <96bf> 8361 <96c0> <96c0> 3034 <96c1> <96c1> 3496 <96c2> <96c2> 9044 <96c3> <96c3> 9046 <96c4> <96c4> 3498 <96c5> <96c5> 3497 <96c6> <96c7> 3499 <96c8> <96c8> 9045 <96c9> <96ca> 3938 <96cb> <96cb> 3937 <96cc> <96cc> 4328 <96cd> <96cd> 3936 <96ce> <96ce> 9720 <96d2> <96d2> 4329 <96d3> <96d3> 10936 <96d4> <96d4> 11507 <96d5> <96d5> 5001 <96d6> <96d6> 5297 <96d7> <96d7> 12321 <96d8> <96d8> 12325 <96d9> <96d9> 5456 <96da> <96da> 12322 <96db> <96db> 5457 <96dc> <96dc> 5455 <96dd> <96dd> 12326 <96de> <96de> 5458 <96df> <96df> 12324 <96e1> <96e1> 12645 <96e2> <96e2> 5454 <96e3> <96e3> 5613 <96e5> <96e5> 13480 <96e8> <96e8> 1696 <96e9> <96e9> 3036 <96ea> <96ea> 3035 <96ef> <96ef> 3501 endcidrange 100 begincidrange <96f0> <96f0> 9048 <96f1> <96f1> 9047 <96f2> <96f2> 3502 <96f4> <96f4> 14852 <96f5> <96f5> 9724 <96f6> <96f6> 3943 <96f7> <96f7> 3940 <96f8> <96f8> 9723 <96f9> <96f9> 3942 <96fa> <96fa> 9721 <96fb> <96fb> 3941 <96fd> <96fd> 9722 <96ff> <96ff> 10324 <9700> <9700> 4330 <9702> <9702> 10939 <9703> <9703> 16141 <9704> <9704> 4706 <9705> <9705> 10937 <9706> <9707> 4707 <9708> <9708> 10938 <9709> <9709> 4709 <970b> <970b> 11508 <970d> <970d> 5005 <970e> <970e> 5002 <970f> <970f> 5007 <9710> <9710> 11510 <9711> <9711> 5003 <9712> <9712> 11509 <9713> <9713> 5006 <9716> <9716> 5004 <9718> <9718> 11955 <9719> <9719> 11957 <971b> <971b> 14537 <971c> <971c> 5298 <971d> <971d> 11956 <971e> <971e> 5299 <971f> <971f> 11954 <9720> <9720> 11953 <9721> <9721> 16307 <9722> <9722> 12328 <9723> <9723> 12327 <9724> <9724> 5459 <9725> <9725> 12329 <9726> <9726> 12650 <9727> <9727> 5615 <9728> <9728> 12649 <9729> <9729> 12646 <972a> <972a> 5614 <972b> <972c> 12647 <972e> <972f> 12911 <9730> <9730> 5718 <9731> <9731> 14528 <9732> <9732> 5795 <9735> <9735> 13105 <9736> <9736> 14530 <9738> <9739> 5793 <973a> <973a> 13106 <973d> <973e> 5858 <973f> <973f> 13265 <9740> <9740> 18355 <9741> <9741> 15337 <9742> <9742> 5938 <9743> <9743> 13482 <9744> <9744> 5940 <9746> <9746> 13481 <9747> <9747> 13483 <9748> <9748> 5939 <9749> <9749> 13553 <974b> <974b> 13606 <9751> <9751> 17635 <9752> <9752> 1697 <9756> <9756> 3944 <9757> <9757> 14540 <9758> <9758> 10325 <975a> <975a> 10940 <975b> <975c> 5008 <975d> <975d> 15343 <975e> <975e> 1698 <975f> <975f> 14543 <9760> <9760> 4710 <9761> <9761> 5616 <9762> <9762> 2086 <9766> <9766> 5010 <9768> <9768> 5904 <9769> <9769> 2087 <976a> <976a> 8362 <976c> <976c> 9049 <976d> <976d> 16023 <976e> <976e> 9051 <9770> <9770> 9050 <9771> <9771> 15356 <9772> <9772> 9728 <9773> <9773> 9725 <9774> <9774> 3945 <9776> <9776> 3946 <9777> <9778> 9726 <977a> <977a> 10327 <977b> <977b> 10332 <977c> <977c> 4331 <977d> <977d> 10326 endcidrange 100 begincidrange <977e> <977e> 10328 <977f> <977f> 10335 <9780> <9780> 10330 <9781> <9781> 10334 <9782> <9782> 10331 <9783> <9783> 10329 <9784> <9784> 10333 <9785> <9785> 4332 <9787> <9787> 16576 <9788> <9788> 10943 <9789> <9789> 14548 <978a> <978a> 10941 <978b> <978b> 4712 <978d> <978d> 4711 <978e> <978e> 10942 <978f> <978f> 4713 <9794> <9794> 11513 <9797> <9797> 11512 <9798> <9798> 5011 <9799> <9799> 11511 <979a> <979a> 11958 <979b> <979b> 15355 <979c> <979c> 11960 <979d> <979d> 11962 <979e> <979e> 11961 <979f> <979f> 14549 <97a0> <97a0> 5300 <97a1> <97a1> 11959 <97a2> <97a2> 12336 <97a3> <97a3> 5460 <97a4> <97a4> 12334 <97a5> <97a5> 12337 <97a6> <97a6> 5461 <97a8> <97a8> 12332 <97aa> <97aa> 12335 <97ab> <97ab> 12333 <97ac> <97ac> 12330 <97ad> <97ad> 5462 <97ae> <97ae> 12331 <97b1> <97b1> 14550 <97b2> <97b2> 18357 <97b3> <97b3> 12651 <97b4> <97b4> 16179 <97b6> <97b6> 12653 <97b7> <97b7> 12652 <97b8> <97b8> 15765 <97b9> <97b9> 12913 <97ba> <97ba> 16181 <97bb> <97bb> 12914 <97bd> <97bd> 18766 <97be> <97be> 14551 <97bf> <97bf> 13107 <97c0> <97c0> 14552 <97c1> <97c1> 5861 <97c2> <97c2> 18358 <97c3> <97c3> 5860 <97c4> <97c5> 13388 <97c6> <97c6> 5941 <97c7> <97c7> 13484 <97c8> <97c8> 16175 <97c9> <97c9> 5974 <97cb> <97cb> 2088 <97cc> <97cc> 3503 <97cd> <97cd> 10337 <97ce> <97ce> 10336 <97cf> <97cf> 10945 <97d0> <97d0> 10944 <97d2> <97d2> 14553 <97d3> <97d3> 5301 <97d4> <97d4> 11964 <97d5> <97d5> 11963 <97d6> <97d6> 12340 <97d7> <97d7> 12338 <97d8> <97d8> 12341 <97d9> <97d9> 12339 <97dc> <97dc> 5617 <97dd> <97df> 12654 <97e0> <97e0> 14554 <97e1> <97e1> 13108 <97e3> <97e3> 13266 <97e5> <97e5> 13485 <97e6> <97e6> 17676 <97ed> <97ed> 2089 <97ee> <97ee> 14556 <97f0> <97f0> 11514 <97f1> <97f1> 11965 <97f2> <97f2> 14669 <97f3> <97f3> 2090 <97f5> <97f5> 14560 <97f6> <97f6> 4333 <97f8> <97f8> 11515 <97f9> <97f9> 5463 <97fa> <97fa> 12342 <97fb> <97fb> 5618 <97fd> <97fe> 12915 <97ff> <97ff> 5796 <9800> <9800> 13390 <9801> <9801> 2091 <9802> <9803> 3039 <9804> <9804> 8363 endcidrange 100 begincidrange <9805> <9806> 3504 <9807> <9807> 9052 <9808> <9808> 3506 <980a> <980a> 3950 <980c> <980c> 3952 <980d> <980e> 9730 <980f> <980f> 9729 <9810> <9811> 3947 <9812> <9812> 3951 <9813> <9813> 3949 <9814> <9814> 18770 <9815> <9815> 17212 <9816> <9816> 10338 <9817> <9818> 4334 <981b> <981b> 10952 <981c> <981c> 4716 <981d> <981d> 10947 <981e> <981e> 10946 <981f> <981f> 15362 <9820> <9820> 10951 <9821> <9821> 4714 <9823> <9823> 15927 <9824> <9824> 5018 <9826> <9826> 10948 <9827> <9827> 10953 <9828> <9828> 10950 <9829> <9829> 10949 <982b> <982b> 4715 <982d> <982d> 5016 <982e> <982e> 16242 <982f> <982f> 11517 <9830> <9830> 5012 <9832> <9832> 11518 <9833> <9833> 14565 <9834> <9834> 14564 <9835> <9835> 11516 <9837> <9837> 5015 <9838> <9838> 5013 <9839> <9839> 5017 <983b> <983b> 5014 <9841> <9841> 11966 <9843> <9843> 11971 <9844> <9844> 11967 <9845> <9845> 11970 <9846> <9846> 5302 <9847> <9847> 15766 <9848> <9848> 11762 <9849> <9849> 11969 <984a> <984a> 11968 <984b> <984b> 14566 <984c> <984c> 5466 <984d> <984d> 5464 <984e> <984e> 5467 <984f> <984f> 5465 <9850> <9852> 12343 <9853> <9853> 5468 <9857> <9857> 12660 <9858> <9858> 5620 <9859> <9859> 12658 <985b> <985b> 5621 <985c> <985c> 12657 <985d> <985d> 12659 <985e> <985e> 5619 <985f> <985f> 12920 <9860> <9860> 12917 <9862> <9863> 12918 <9864> <9864> 13109 <9865> <9865> 5798 <9866> <9866> 14567 <9867> <9867> 5797 <9869> <9869> 13268 <986a> <986a> 13267 <986b> <986b> 5862 <986c> <986c> 16437 <986f> <986f> 5905 <9870> <9870> 5942 <9871> <9871> 5965 <9872> <9872> 13554 <9873> <9874> 13607 <9875> <9875> 17677 <98a8> <98a8> 2092 <98a9> <98a9> 9053 <98ac> <98ac> 9732 <98ad> <98ae> 10339 <98af> <98af> 4336 <98b1> <98b1> 4337 <98b2> <98b2> 10954 <98b3> <98b3> 4717 <98b4> <98b4> 16243 <98b6> <98b6> 5303 <98b7> <98b7> 14575 <98b8> <98b8> 12346 <98b9> <98b9> 18360 <98ba> <98ba> 5469 <98bb> <98bb> 12663 <98bc> <98bc> 5622 <98bd> <98bd> 12662 <98be> <98be> 12664 <98bf> <98bf> 12661 <98c0> <98c0> 13112 endcidrange 100 begincidrange <98c1> <98c2> 12921 <98c3> <98c3> 15224 <98c4> <98c4> 5719 <98c6> <98c6> 13111 <98c7> <98c7> 14577 <98c8> <98c8> 14576 <98c9> <98c9> 13110 <98ca> <98ca> 14574 <98cb> <98cb> 13269 <98cc> <98cc> 13609 <98ce> <98ce> 17678 <98db> <98db> 2093 <98dc> <98dc> 15371 <98de> <98de> 17679 <98df> <98df> 2094 <98e0> <98e0> 18322 <98e1> <98e1> 14582 <98e2> <98e2> 2548 <98e3> <98e3> 7730 <98e5> <98e5> 8364 <98e6> <98e6> 14583 <98e7> <98e7> 3507 <98e9> <98e9> 3510 <98ea> <98ea> 3508 <98eb> <98eb> 9054 <98ec> <98ec> 14584 <98ed> <98ed> 3512 <98ef> <98ef> 3509 <98f1> <98f1> 18362 <98f2> <98f2> 3511 <98f4> <98f4> 3954 <98f5> <98f5> 17253 <98f6> <98f6> 9733 <98f9> <98f9> 9734 <98fa> <98fa> 10956 <98fc> <98fc> 3953 <98fd> <98fe> 3955 <9900> <9900> 10342 <9902> <9902> 10341 <9903> <9903> 4338 <9905> <9905> 4339 <9907> <9907> 10343 <9908> <9908> 10955 <9909> <9909> 4341 <990a> <990a> 4718 <990c> <990c> 4340 <990e> <990e> 17389 <9910> <9910> 5019 <9911> <9911> 10957 <9912> <9912> 4720 <9913> <9913> 4719 <9914> <9914> 10958 <9915> <9915> 10961 <9916> <9917> 10959 <9918> <9918> 4721 <9919> <9919> 18364 <991a> <991a> 5024 <991b> <991b> 5022 <991c> <991c> 17390 <991e> <991e> 5021 <991f> <991f> 11520 <9921> <9921> 5023 <9924> <9924> 11519 <9925> <9925> 11972 <9927> <9927> 11521 <9928> <9928> 5020 <9929> <9929> 11522 <992a> <992a> 11975 <992b> <992c> 11973 <992d> <992d> 11979 <992e> <992e> 5473 <992f> <992f> 11978 <9930> <9930> 11981 <9931> <9931> 11980 <9932> <9932> 11977 <9933> <9933> 11976 <9935> <9935> 5304 <9937> <9937> 18365 <9938> <9938> 15357 <9939> <9939> 14586 <993a> <993a> 12349 <993b> <993b> 15377 <993c> <993c> 12348 <993d> <993d> 5472 <993e> <993f> 5470 <9940> <9940> 16180 <9941> <9941> 12347 <9942> <9942> 17407 <9943> <9943> 12667 <9945> <9945> 5623 <9947> <9947> 12666 <9948> <9948> 12665 <9949> <9949> 5624 <994a> <994a> 16313 <994b> <994b> 12927 <994c> <994c> 12926 <994d> <994d> 15378 <994e> <994e> 12924 <9950> <9950> 12923 <9951> <9951> 5721 endcidrange 100 begincidrange <9952> <9952> 5720 <9953> <9953> 12928 <9954> <9954> 13270 <9955> <9955> 5863 <9956> <9956> 13114 <9957> <9957> 5799 <9958> <9958> 13113 <9959> <9959> 12925 <995b> <995b> 13271 <995c> <995c> 5906 <995d> <995d> 18366 <995e> <995e> 5966 <995f> <995f> 13555 <9961> <9961> 13610 <9962> <9962> 17391 <9963> <9963> 17680 <9996> <9996> 2095 <9997> <9997> 8365 <9998> <9998> 11982 <9999> <9999> 2096 <999b> <999b> 15381 <999c> <999c> 10345 <999d> <999d> 10344 <999e> <999e> 11523 <99a1> <99a1> 11984 <99a3> <99a3> 11983 <99a4> <99a4> 16835 <99a5> <99a5> 5474 <99a6> <99a7> 12668 <99a8> <99a8> 5722 <99aa> <99aa> 15383 <99ab> <99ab> 13611 <99ac> <99ac> 2549 <99ad> <99ad> 3514 <99ae> <99ae> 3513 <99af> <99af> 9735 <99b0> <99b0> 9737 <99b1> <99b1> 3958 <99b2> <99b2> 9736 <99b3> <99b3> 3957 <99b4> <99b4> 3959 <99b5> <99b5> 9738 <99b8> <99b8> 14667 <99b9> <99b9> 10347 <99ba> <99ba> 10349 <99bb> <99bb> 10348 <99bc> <99bc> 15394 <99bd> <99bd> 10351 <99c1> <99c1> 4342 <99c2> <99c2> 10350 <99c3> <99c3> 10346 <99c4> <99c4> 15735 <99c5> <99c5> 18369 <99c7> <99c7> 10352 <99c9> <99c9> 10968 <99cb> <99cb> 10971 <99cc> <99cc> 10973 <99cd> <99cd> 10963 <99ce> <99ce> 10967 <99cf> <99cf> 10964 <99d0> <99d0> 4723 <99d1> <99d1> 4726 <99d2> <99d2> 4728 <99d3> <99d4> 10965 <99d5> <99d5> 4727 <99d6> <99d6> 10969 <99d7> <99d7> 10972 <99d8> <99d8> 10970 <99d9> <99d9> 4729 <99da> <99da> 16194 <99db> <99db> 4725 <99dc> <99dc> 10962 <99dd> <99dd> 4722 <99df> <99df> 4724 <99e1> <99e1> 14213 <99e2> <99e2> 5026 <99e3> <99e3> 11529 <99e4> <99e4> 11527 <99e5> <99e5> 11526 <99e6> <99e6> 15205 <99e7> <99e7> 11532 <99e9> <99e9> 11531 <99ea> <99ea> 11530 <99ec> <99ec> 11525 <99ed> <99ed> 5025 <99ee> <99ee> 11524 <99f0> <99f0> 11528 <99f1> <99f1> 5027 <99f4> <99f4> 11987 <99f5> <99f5> 14591 <99f6> <99f6> 11991 <99f7> <99f7> 11988 <99f8> <99f8> 11990 <99f9> <99f9> 11989 <99fa> <99fa> 11986 <99fb> <99fb> 11992 <99fc> <99fc> 11995 <99fd> <99fe> 11993 <99ff> <99ff> 5306 <9a01> <9a01> 5305 endcidrange 100 begincidrange <9a02> <9a02> 11985 <9a03> <9a03> 11996 <9a04> <9a04> 12354 <9a05> <9a05> 12357 <9a06> <9a06> 12359 <9a07> <9a07> 12358 <9a09> <9a09> 12352 <9a0a> <9a0a> 12356 <9a0b> <9a0b> 12351 <9a0c> <9a0c> 14592 <9a0d> <9a0d> 12353 <9a0e> <9a0e> 5475 <9a0f> <9a0f> 12350 <9a10> <9a10> 14594 <9a11> <9a11> 12355 <9a14> <9a14> 12682 <9a15> <9a15> 12671 <9a16> <9a16> 5625 <9a19> <9a19> 5626 <9a1a> <9a1a> 12670 <9a1b> <9a1b> 12675 <9a1c> <9a1c> 12681 <9a1d> <9a1d> 12673 <9a1e> <9a1e> 12680 <9a1f> <9a1f> 15212 <9a20> <9a20> 12677 <9a21> <9a21> 15388 <9a22> <9a22> 12676 <9a23> <9a23> 12679 <9a24> <9a24> 12674 <9a25> <9a25> 12672 <9a26> <9a26> 15858 <9a27> <9a27> 12678 <9a29> <9a29> 12935 <9a2a> <9a2a> 12933 <9a2b> <9a2b> 5723 <9a2c> <9a2c> 12932 <9a2d> <9a2d> 12938 <9a2e> <9a2e> 12936 <9a2f> <9a2f> 15390 <9a30> <9a30> 5724 <9a31> <9a31> 12931 <9a32> <9a32> 12929 <9a34> <9a34> 12930 <9a35> <9a35> 5726 <9a36> <9a36> 12934 <9a37> <9a37> 5725 <9a38> <9a38> 12937 <9a39> <9a39> 13115 <9a3a> <9a3a> 13121 <9a3b> <9a3b> 14593 <9a3c> <9a3c> 18371 <9a3d> <9a3d> 13116 <9a3e> <9a3e> 5803 <9a3f> <9a3f> 13122 <9a40> <9a40> 5802 <9a41> <9a41> 13120 <9a42> <9a42> 13119 <9a43> <9a43> 5801 <9a44> <9a44> 13118 <9a45> <9a45> 5800 <9a46> <9a46> 13117 <9a48> <9a48> 13277 <9a49> <9a49> 13279 <9a4a> <9a4a> 13278 <9a4c> <9a4c> 13275 <9a4d> <9a4d> 5865 <9a4e> <9a4e> 13272 <9a4f> <9a4f> 13276 <9a50> <9a50> 13281 <9a52> <9a52> 13280 <9a53> <9a54> 13273 <9a55> <9a55> 5864 <9a56> <9a56> 13391 <9a57> <9a57> 5909 <9a58> <9a58> 14595 <9a59> <9a59> 13392 <9a5a> <9a5b> 5907 <9a5c> <9a5c> 15384 <9a5e> <9a5e> 13486 <9a5f> <9a5f> 5943 <9a60> <9a60> 13584 <9a62> <9a62> 5975 <9a63> <9a63> 15207 <9a64> <9a64> 13612 <9a65> <9a65> 5976 <9a66> <9a67> 13613 <9a68> <9a68> 13628 <9a69> <9a69> 13627 <9a6a> <9a6a> 5991 <9a6b> <9a6b> 13636 <9a6c> <9a6c> 17797 <9a8f> <9a8f> 17798 <9aa8> <9aa8> 2550 <9aab> <9aab> 9740 <9aad> <9aad> 9739 <9aaf> <9ab0> 4343 <9ab1> <9ab1> 10353 <9ab2> <9ab2> 17202 <9ab3> <9ab3> 10974 endcidrange 100 begincidrange <9ab4> <9ab4> 11535 <9ab6> <9ab6> 17392 <9ab7> <9ab7> 4730 <9ab8> <9ab8> 5028 <9ab9> <9ab9> 11533 <9aba> <9aba> 16244 <9abb> <9abb> 11536 <9abc> <9abc> 5029 <9abd> <9abd> 15767 <9abe> <9abe> 11997 <9abf> <9abf> 11534 <9ac0> <9ac0> 12360 <9ac1> <9ac1> 5476 <9ac2> <9ac2> 12683 <9ac6> <9ac6> 12941 <9ac7> <9ac7> 12939 <9aca> <9aca> 12940 <9acd> <9acd> 13123 <9acf> <9acf> 5804 <9ad0> <9ad0> 13282 <9ad1> <9ad1> 5912 <9ad2> <9ad2> 5866 <9ad3> <9ad4> 5910 <9ad5> <9ad5> 13487 <9ad6> <9ad6> 5967 <9ad7> <9ad7> 16298 <9ad8> <9ad8> 2551 <9adc> <9adc> 12361 <9adf> <9adf> 7731 <9ae0> <9ae0> 14600 <9ae1> <9ae1> 3960 <9ae2> <9ae2> 14601 <9ae3> <9ae3> 10354 <9ae6> <9ae6> 4345 <9ae7> <9ae7> 10355 <9aeb> <9aeb> 10976 <9aec> <9aec> 10975 <9aed> <9aed> 5031 <9aee> <9aef> 4731 <9af1> <9af1> 10979 <9af2> <9af2> 10978 <9af3> <9af3> 10977 <9af4> <9af4> 14603 <9af6> <9af6> 11537 <9af7> <9af7> 11540 <9af9> <9af9> 11539 <9afa> <9afa> 11538 <9afb> <9afb> 5030 <9afc> <9afc> 12001 <9afd> <9afd> 11999 <9afe> <9afe> 11998 <9aff> <9aff> 16151 <9b01> <9b01> 12000 <9b02> <9b02> 16146 <9b03> <9b03> 5477 <9b04> <9b05> 12363 <9b06> <9b06> 5478 <9b08> <9b08> 12362 <9b09> <9b09> 16160 <9b0a> <9b0a> 12685 <9b0b> <9b0b> 12684 <9b0c> <9b0c> 12687 <9b0d> <9b0d> 5627 <9b0e> <9b0e> 12686 <9b0f> <9b0f> 18372 <9b10> <9b10> 12942 <9b11> <9b11> 12944 <9b12> <9b12> 12943 <9b14> <9b14> 14605 <9b15> <9b15> 13124 <9b16> <9b16> 13127 <9b17> <9b18> 13125 <9b19> <9b19> 13283 <9b1a> <9b1a> 5867 <9b1e> <9b20> 13393 <9b22> <9b22> 5944 <9b23> <9b23> 5968 <9b24> <9b24> 13615 <9b25> <9b25> 2552 <9b27> <9b27> 4733 <9b28> <9b28> 5032 <9b29> <9b29> 12365 <9b2a> <9b2a> 16153 <9b2b> <9b2b> 13284 <9b2d> <9b2d> 14606 <9b2e> <9b2e> 13585 <9b2f> <9b2f> 7732 <9b31> <9b31> 5992 <9b32> <9b32> 2553 <9b33> <9b33> 11541 <9b34> <9b34> 14609 <9b35> <9b35> 12366 <9b37> <9b37> 12688 <9b39> <9b39> 16128 <9b3a> <9b3a> 13128 <9b3b> <9b3b> 13285 <9b3c> <9b3c> 2554 <9b3e> <9b3f> 10356 <9b40> <9b40> 14613 <9b41> <9b42> 4346 endcidrange 100 begincidrange <9b43> <9b43> 10981 <9b44> <9b44> 4735 <9b45> <9b45> 4734 <9b46> <9b46> 10980 <9b48> <9b48> 12002 <9b4a> <9b4a> 12367 <9b4b> <9b4b> 12369 <9b4c> <9b4c> 12368 <9b4d> <9b4d> 5481 <9b4e> <9b4e> 5480 <9b4f> <9b4f> 5479 <9b50> <9b50> 14612 <9b51> <9b51> 5806 <9b52> <9b52> 13129 <9b54> <9b54> 5805 <9b55> <9b55> 13287 <9b56> <9b56> 13286 <9b58> <9b58> 5945 <9b59> <9b59> 13488 <9b5a> <9b5a> 3041 <9b5b> <9b5b> 9741 <9b5f> <9b5f> 10360 <9b60> <9b61> 10358 <9b64> <9b64> 10990 <9b66> <9b66> 10985 <9b67> <9b67> 10982 <9b68> <9b68> 10989 <9b69> <9b69> 18373 <9b6c> <9b6c> 10991 <9b6f> <9b6f> 4737 <9b70> <9b70> 10988 <9b71> <9b71> 10984 <9b74> <9b74> 10983 <9b75> <9b75> 10987 <9b76> <9b76> 10986 <9b77> <9b77> 4736 <9b7a> <9b7a> 11552 <9b7b> <9b7b> 11547 <9b7c> <9b7c> 11545 <9b7d> <9b7d> 11554 <9b7e> <9b7e> 11546 <9b7f> <9b7f> 15419 <9b80> <9b80> 11542 <9b81> <9b81> 17393 <9b82> <9b82> 11548 <9b83> <9b83> 16921 <9b85> <9b85> 11543 <9b86> <9b86> 12011 <9b87> <9b87> 11544 <9b88> <9b88> 11555 <9b8b> <9b8b> 16110 <9b8d> <9b8d> 17955 <9b8e> <9b8e> 14617 <9b8f> <9b8f> 16301 <9b90> <9b90> 11551 <9b91> <9b91> 5033 <9b92> <9b92> 11550 <9b93> <9b93> 11549 <9b95> <9b95> 11553 <9b97> <9b97> 16241 <9b9a> <9b9a> 12003 <9b9b> <9b9b> 12006 <9b9d> <9b9d> 16214 <9b9e> <9b9e> 12005 <9b9f> <9b9f> 15422 <9ba0> <9ba0> 12013 <9ba1> <9ba1> 12008 <9ba2> <9ba2> 12012 <9ba4> <9ba4> 12010 <9ba5> <9ba5> 12009 <9ba6> <9ba6> 12007 <9ba8> <9ba8> 12004 <9baa> <9baa> 5309 <9bab> <9bab> 5308 <9bad> <9bad> 5310 <9bae> <9bae> 5307 <9baf> <9baf> 12014 <9bb0> <9bb0> 16308 <9bb5> <9bb5> 12375 <9bb6> <9bb6> 12378 <9bb8> <9bb8> 12376 <9bb9> <9bb9> 12380 <9bbd> <9bbd> 12381 <9bbf> <9bbf> 12373 <9bc0> <9bc0> 5486 <9bc1> <9bc1> 12374 <9bc3> <9bc3> 12372 <9bc4> <9bc4> 12379 <9bc6> <9bc6> 12371 <9bc7> <9bc7> 12370 <9bc8> <9bc8> 5485 <9bc9> <9bc9> 5483 <9bca> <9bca> 5482 <9bcf> <9bcf> 15420 <9bd3> <9bd3> 12377 <9bd4> <9bd4> 12697 <9bd5> <9bd5> 12703 <9bd6> <9bd6> 5630 <9bd7> <9bd7> 12698 <9bd9> <9bd9> 12701 endcidrange 100 begincidrange <9bda> <9bda> 12705 <9bdb> <9bdb> 5631 <9bdc> <9bdc> 12700 <9bdd> <9bdd> 18374 <9bde> <9bde> 12692 <9be0> <9be0> 12691 <9be1> <9be1> 12704 <9be2> <9be2> 12695 <9be4> <9be4> 12693 <9be5> <9be5> 12702 <9be6> <9be6> 12694 <9be7> <9be7> 5629 <9be8> <9be8> 5628 <9be9> <9be9> 15297 <9bea> <9beb> 12689 <9bec> <9bec> 12699 <9bed> <9bed> 16087 <9bf0> <9bf0> 12696 <9bf1> <9bf1> 18375 <9bf4> <9bf4> 18376 <9bf7> <9bf7> 12947 <9bf8> <9bf8> 12950 <9bfd> <9bfd> 5484 <9bff> <9bff> 14619 <9c02> <9c02> 14618 <9c05> <9c05> 12948 <9c06> <9c06> 12954 <9c07> <9c07> 12952 <9c08> <9c08> 12946 <9c09> <9c09> 12957 <9c0a> <9c0a> 16186 <9c0b> <9c0b> 12945 <9c0c> <9c0c> 14620 <9c0d> <9c0d> 5728 <9c0e> <9c0e> 12953 <9c10> <9c10> 15418 <9c12> <9c12> 12949 <9c13> <9c13> 5727 <9c14> <9c14> 12956 <9c15> <9c15> 16158 <9c17> <9c17> 12955 <9c1b> <9c1b> 18715 <9c1c> <9c1c> 13132 <9c1d> <9c1d> 13131 <9c1f> <9c1f> 17954 <9c20> <9c20> 18378 <9c21> <9c21> 13138 <9c23> <9c23> 13134 <9c24> <9c24> 13137 <9c25> <9c25> 5808 <9c26> <9c26> 17894 <9c28> <9c29> 13135 <9c2b> <9c2b> 13130 <9c2c> <9c2c> 13133 <9c2d> <9c2d> 5807 <9c2e> <9c2e> 16162 <9c2f> <9c2f> 15751 <9c31> <9c31> 5869 <9c32> <9c32> 13298 <9c33> <9c33> 13293 <9c34> <9c34> 13297 <9c35> <9c35> 15417 <9c36> <9c36> 13300 <9c37> <9c37> 13296 <9c39> <9c39> 13292 <9c3a> <9c3a> 15742 <9c3b> <9c3b> 5871 <9c3c> <9c3c> 13295 <9c3d> <9c3d> 13299 <9c3e> <9c3e> 5870 <9c3f> <9c3f> 13290 <9c40> <9c40> 12951 <9c41> <9c41> 13294 <9c44> <9c44> 13291 <9c45> <9c45> 15985 <9c46> <9c46> 13288 <9c48> <9c48> 13289 <9c49> <9c49> 5868 <9c4a> <9c4a> 13399 <9c4b> <9c4b> 13401 <9c4c> <9c4c> 13404 <9c4d> <9c4d> 13400 <9c4e> <9c4e> 13405 <9c4f> <9c4f> 15414 <9c50> <9c50> 13398 <9c52> <9c52> 13396 <9c53> <9c53> 15415 <9c54> <9c54> 5913 <9c55> <9c55> 13402 <9c56> <9c56> 5915 <9c57> <9c57> 5914 <9c58> <9c58> 13397 <9c59> <9c59> 13403 <9c5d> <9c5d> 16063 <9c5e> <9c5e> 13493 <9c5f> <9c5f> 5946 <9c60> <9c60> 13494 <9c62> <9c62> 13492 <9c63> <9c63> 13489 <9c66> <9c66> 13491 endcidrange 100 begincidrange <9c67> <9c67> 13490 <9c68> <9c68> 13556 <9c6d> <9c6d> 13558 <9c6e> <9c6e> 13557 <9c71> <9c71> 13588 <9c72> <9c72> 16033 <9c73> <9c73> 13587 <9c74> <9c74> 13586 <9c75> <9c75> 13589 <9c77> <9c78> 5984 <9c79> <9c79> 13633 <9c7a> <9c7a> 13637 <9c7b> <9c7b> 15416 <9c7c> <9c7c> 17682 <9ce5> <9ce5> 3042 <9ce6> <9ce6> 9055 <9ce7> <9ce7> 9744 <9ce9> <9ce9> 3961 <9cea> <9cea> 9742 <9ced> <9ced> 9743 <9cf1> <9cf2> 10361 <9cf3> <9cf3> 4350 <9cf4> <9cf4> 4348 <9cf5> <9cf5> 10363 <9cf6> <9cf6> 4349 <9cf7> <9cf7> 10996 <9cf9> <9cf9> 10999 <9cfa> <9cfa> 10993 <9cfb> <9cfb> 11000 <9cfc> <9cfc> 10992 <9cfd> <9cfd> 10994 <9cff> <9cff> 10995 <9d00> <9d00> 10998 <9d02> <9d02> 16187 <9d03> <9d03> 4740 <9d04> <9d04> 11003 <9d05> <9d05> 11002 <9d06> <9d06> 4738 <9d07> <9d07> 10997 <9d08> <9d08> 11001 <9d09> <9d09> 4739 <9d0c> <9d0c> 15430 <9d10> <9d10> 11565 <9d12> <9d12> 5038 <9d14> <9d14> 11560 <9d15> <9d15> 5034 <9d16> <9d16> 15484 <9d17> <9d17> 11557 <9d18> <9d18> 11563 <9d19> <9d19> 11566 <9d1b> <9d1b> 5039 <9d1d> <9d1d> 11562 <9d1e> <9d1e> 11559 <9d1f> <9d1f> 11567 <9d20> <9d20> 11558 <9d21> <9d21> 15425 <9d22> <9d22> 11564 <9d23> <9d23> 5035 <9d25> <9d25> 11556 <9d26> <9d26> 5036 <9d28> <9d28> 5037 <9d29> <9d29> 11561 <9d2d> <9d2d> 12032 <9d2e> <9d2f> 12019 <9d30> <9d30> 12023 <9d31> <9d31> 12021 <9d33> <9d33> 12015 <9d34> <9d34> 16458 <9d36> <9d36> 12018 <9d37> <9d37> 12028 <9d38> <9d38> 12022 <9d39> <9d39> 14638 <9d3b> <9d3b> 5311 <9d3d> <9d3d> 12030 <9d3e> <9d3e> 12027 <9d3f> <9d3f> 5312 <9d40> <9d40> 12029 <9d41> <9d41> 12016 <9d42> <9d43> 12025 <9d44> <9d44> 16299 <9d45> <9d45> 12024 <9d49> <9d49> 18381 <9d4a> <9d4a> 12385 <9d4b> <9d4b> 12387 <9d4c> <9d4c> 12390 <9d4e> <9d4e> 17721 <9d4f> <9d4f> 12384 <9d50> <9d50> 16074 <9d51> <9d51> 5487 <9d52> <9d52> 12392 <9d53> <9d53> 12383 <9d54> <9d54> 12393 <9d56> <9d56> 12389 <9d57> <9d57> 12391 <9d58> <9d58> 12395 <9d59> <9d59> 12388 <9d5a> <9d5a> 12396 <9d5b> <9d5b> 12386 <9d5c> <9d5c> 12382 <9d5d> <9d5d> 5488 endcidrange 100 begincidrange <9d5e> <9d5e> 15982 <9d5f> <9d5f> 12394 <9d60> <9d60> 5489 <9d61> <9d61> 5633 <9d67> <9d67> 12017 <9d68> <9d68> 12731 <9d69> <9d69> 12722 <9d6a> <9d6a> 5635 <9d6b> <9d6b> 12718 <9d6c> <9d6c> 5636 <9d6d> <9d6d> 15276 <9d6e> <9d6e> 17211 <9d6f> <9d6f> 12727 <9d70> <9d70> 12721 <9d71> <9d71> 12711 <9d72> <9d72> 5634 <9d73> <9d73> 12724 <9d74> <9d75> 12719 <9d77> <9d77> 12706 <9d78> <9d78> 12713 <9d79> <9d79> 12728 <9d7b> <9d7b> 12725 <9d7c> <9d7c> 16126 <9d7d> <9d7d> 12717 <9d7e> <9d7e> 14629 <9d7f> <9d7f> 12729 <9d80> <9d80> 12712 <9d81> <9d81> 12707 <9d82> <9d82> 12726 <9d83> <9d83> 14630 <9d84> <9d84> 12709 <9d85> <9d85> 12723 <9d86> <9d86> 12714 <9d87> <9d87> 12730 <9d88> <9d88> 12710 <9d89> <9d89> 5632 <9d8a> <9d8a> 12708 <9d8b> <9d8c> 12715 <9d90> <9d90> 12964 <9d92> <9d92> 12962 <9d93> <9d93> 17395 <9d94> <9d94> 12967 <9d96> <9d96> 12979 <9d97> <9d97> 12970 <9d98> <9d98> 12963 <9d99> <9d99> 12959 <9d9a> <9d9a> 12972 <9d9b> <9d9b> 12965 <9d9c> <9d9c> 12968 <9d9d> <9d9d> 12961 <9d9e> <9d9e> 12975 <9d9f> <9d9f> 12958 <9da0> <9da0> 12966 <9da1> <9da1> 12971 <9da2> <9da2> 12973 <9da3> <9da3> 12976 <9da4> <9da4> 12960 <9da5> <9da5> 15435 <9da6> <9da7> 12980 <9da8> <9da8> 12974 <9da9> <9da9> 12978 <9daa> <9daa> 12969 <9dab> <9dab> 16176 <9dac> <9dac> 13154 <9dad> <9dad> 13157 <9daf> <9daf> 5809 <9db1> <9db1> 13156 <9db2> <9db2> 13161 <9db3> <9db3> 13159 <9db4> <9db4> 5810 <9db5> <9db5> 13150 <9db6> <9db6> 13140 <9db7> <9db7> 13139 <9db8> <9db8> 5812 <9db9> <9dba> 13152 <9dbb> <9dbb> 13149 <9dbc> <9dbc> 13141 <9dbd> <9dbd> 18384 <9dbe> <9dbe> 13146 <9dbf> <9dbf> 12977 <9dc0> <9dc0> 17394 <9dc1> <9dc1> 13142 <9dc2> <9dc2> 5811 <9dc3> <9dc3> 13148 <9dc4> <9dc4> 14633 <9dc5> <9dc5> 13147 <9dc7> <9dc7> 13143 <9dc8> <9dc8> 13155 <9dc9> <9dc9> 17785 <9dca> <9dca> 13144 <9dcb> <9dcb> 13305 <9dcc> <9dcc> 13158 <9dcd> <9dcd> 13160 <9dce> <9dce> 13151 <9dcf> <9dcf> 13145 <9dd0> <9dd0> 13306 <9dd1> <9dd1> 13308 <9dd2> <9dd2> 13302 <9dd3> <9dd3> 5872 <9dd4> <9dd4> 14622 endcidrange 100 begincidrange <9dd5> <9dd5> 13315 <9dd6> <9dd6> 13313 <9dd7> <9dd7> 5873 <9dd8> <9dd8> 13312 <9dd9> <9dd9> 13311 <9dda> <9dda> 13304 <9ddb> <9ddb> 13301 <9ddc> <9ddc> 13307 <9ddd> <9ddd> 13316 <9dde> <9dde> 13303 <9ddf> <9ddf> 13309 <9de1> <9de1> 13414 <9de2> <9de2> 13419 <9de3> <9de3> 13409 <9de4> <9de4> 13412 <9de5> <9de5> 5916 <9de6> <9de6> 13416 <9de8> <9de8> 13423 <9de9> <9de9> 13310 <9deb> <9deb> 13410 <9dec> <9dec> 13420 <9ded> <9ded> 13424 <9dee> <9dee> 13415 <9def> <9def> 13408 <9df0> <9df0> 13418 <9df2> <9df2> 13417 <9df3> <9df3> 13422 <9df4> <9df4> 13421 <9df5> <9df5> 13314 <9df6> <9df6> 13413 <9df7> <9df7> 13407 <9df8> <9df8> 13411 <9df9> <9dfa> 5947 <9dfb> <9dfb> 13406 <9dfc> <9dfc> 18385 <9dfd> <9dfd> 13505 <9dfe> <9dfe> 13496 <9dff> <9dff> 13504 <9e00> <9e01> 13501 <9e02> <9e02> 13495 <9e03> <9e03> 13498 <9e04> <9e04> 13506 <9e05> <9e05> 13500 <9e06> <9e06> 13499 <9e07> <9e07> 13497 <9e09> <9e09> 13503 <9e0a> <9e0a> 17790 <9e0b> <9e0b> 13559 <9e0c> <9e0c> 17786 <9e0d> <9e0d> 13560 <9e0e> <9e0e> 14632 <9e0f> <9e0f> 13562 <9e10> <9e10> 13561 <9e11> <9e11> 13564 <9e12> <9e12> 13563 <9e13> <9e13> 13591 <9e14> <9e14> 13590 <9e15> <9e15> 13616 <9e17> <9e17> 13617 <9e18> <9e18> 15428 <9e19> <9e19> 13629 <9e1a> <9e1a> 5989 <9e1b> <9e1b> 5993 <9e1c> <9e1c> 16260 <9e1d> <9e1d> 13638 <9e1e> <9e1e> 5994 <9e1f> <9e1f> 17683 <9e75> <9e75> 3043 <9e79> <9e79> 5729 <9e7a> <9e7a> 13162 <9e7b> <9e7b> 17400 <9e7c> <9e7d> 5949 <9e7f> <9e7f> 3044 <9e80> <9e80> 9745 <9e81> <9e81> 16143 <9e82> <9e82> 3962 <9e83> <9e83> 11004 <9e84> <9e84> 16246 <9e85> <9e85> 16114 <9e86> <9e87> 11569 <9e88> <9e88> 11568 <9e89> <9e89> 12034 <9e8a> <9e8a> 12033 <9e8b> <9e8b> 5313 <9e8c> <9e8c> 12398 <9e8d> <9e8d> 12035 <9e8e> <9e8e> 12397 <9e90> <9e90> 14641 <9e91> <9e91> 12733 <9e92> <9e92> 5637 <9e93> <9e93> 5639 <9e94> <9e94> 12732 <9e95> <9e95> 14642 <9e96> <9e96> 16316 <9e97> <9e97> 5638 <9e98> <9e98> 16167 <9e99> <9e99> 12982 <9e9a> <9e9a> 12984 <9e9b> <9e9b> 12983 <9e9c> <9e9c> 13163 endcidrange 100 begincidrange <9e9d> <9e9d> 5813 <9e9e> <9e9e> 14643 <9e9f> <9e9f> 5917 <9ea0> <9ea0> 13507 <9ea1> <9ea1> 13565 <9ea2> <9ea2> 14644 <9ea4> <9ea4> 13642 <9ea5> <9ea5> 3045 <9ea6> <9ea6> 18756 <9ea7> <9ea7> 10364 <9ea8> <9ea8> 16245 <9ea9> <9ea9> 4741 <9eaa> <9eaa> 14646 <9eab> <9eab> 16018 <9eac> <9eac> 17396 <9ead> <9ead> 11572 <9eae> <9eae> 11571 <9eaf> <9eaf> 14647 <9eb0> <9eb0> 12036 <9eb1> <9eb1> 18388 <9eb4> <9eb4> 5640 <9eb5> <9eb5> 5730 <9eb6> <9eb6> 13317 <9eb7> <9eb7> 13634 <9ebb> <9ebb> 3046 <9ebc> <9ebc> 4351 <9ebd> <9ebd> 18389 <9ebe> <9ebe> 4742 <9ebf> <9ebf> 15736 <9ec0> <9ec0> 12734 <9ec1> <9ec1> 14649 <9ec2> <9ec2> 13425 <9ec3> <9ec3> 3515 <9ec4> <9ec4> 17684 <9ec6> <9ec6> 18390 <9ec7> <9ec7> 17783 <9ec8> <9ec8> 12037 <9ecc> <9ecc> 5969 <9ecd> <9ecd> 3516 <9ece> <9ece> 4743 <9ecf> <9ecf> 5314 <9ed0> <9ed0> 13426 <9ed1> <9ed1> 3517 <9ed3> <9ed3> 11005 <9ed4> <9ed4> 5041 <9ed5> <9ed6> 11573 <9ed8> <9ed8> 5040 <9eda> <9eda> 12038 <9edb> <9edb> 5318 <9edc> <9edd> 5316 <9ede> <9ede> 5315 <9edf> <9edf> 12399 <9ee0> <9ee0> 5490 <9ee2> <9ee2> 18392 <9ee4> <9ee4> 12986 <9ee5> <9ee5> 12985 <9ee6> <9ee6> 12988 <9ee7> <9ee7> 12987 <9ee8> <9ee8> 5731 <9eeb> <9eeb> 13164 <9eed> <9eed> 13166 <9eee> <9eee> 13165 <9eef> <9eef> 5814 <9ef0> <9ef0> 13318 <9ef1> <9ef1> 18393 <9ef2> <9ef3> 13427 <9ef4> <9ef4> 5918 <9ef5> <9ef5> 13566 <9ef6> <9ef6> 13592 <9ef7> <9ef7> 5986 <9ef8> <9ef8> 18394 <9ef9> <9ef9> 9056 <9efa> <9efa> 11575 <9efb> <9efb> 12039 <9efc> <9efc> 12735 <9efd> <9efd> 9746 <9efe> <9efe> 18382 <9eff> <9eff> 12040 <9f00> <9f00> 12401 <9f01> <9f01> 12400 <9f02> <9f02> 14656 <9f06> <9f06> 13429 <9f07> <9f07> 5951 <9f08> <9f08> 14657 <9f09> <9f09> 13567 <9f0a> <9f0a> 13593 <9f0e> <9f0e> 3963 <9f0f> <9f10> 11006 <9f12> <9f12> 11576 <9f13> <9f13> 3964 <9f15> <9f15> 5491 <9f16> <9f16> 12402 <9f17> <9f17> 14661 <9f18> <9f18> 13168 <9f19> <9f19> 5815 <9f1a> <9f1a> 13169 <9f1b> <9f1b> 13167 <9f1c> <9f1c> 13430 <9f1e> <9f1e> 13508 <9f20> <9f20> 3965 endcidrange 100 begincidrange <9f22> <9f22> 12043 <9f23> <9f23> 12042 <9f24> <9f24> 12041 <9f25> <9f25> 12403 <9f26> <9f26> 16272 <9f27> <9f27> 17952 <9f28> <9f28> 12407 <9f29> <9f29> 12406 <9f2a> <9f2a> 12405 <9f2b> <9f2b> 12404 <9f2c> <9f2c> 5492 <9f2d> <9f2d> 12736 <9f2e> <9f2e> 12990 <9f2f> <9f2f> 5732 <9f30> <9f30> 12989 <9f31> <9f31> 13170 <9f32> <9f32> 13321 <9f33> <9f33> 13320 <9f34> <9f34> 5874 <9f35> <9f35> 13319 <9f36> <9f36> 13433 <9f37> <9f37> 13432 <9f38> <9f38> 13431 <9f39> <9f39> 14663 <9f3b> <9f3b> 4352 <9f3d> <9f3d> 11577 <9f3e> <9f3e> 5319 <9f40> <9f41> 12737 <9f42> <9f42> 13322 <9f43> <9f43> 13434 <9f44> <9f44> 18395 <9f45> <9f45> 14666 <9f46> <9f46> 13509 <9f47> <9f47> 13568 <9f48> <9f48> 13618 <9f49> <9f49> 13644 <9f4a> <9f4a> 4353 <9f4b> <9f4b> 5320 <9f4c> <9f4c> 12408 <9f4d> <9f4d> 12739 <9f4e> <9f4e> 13171 <9f4f> <9f4f> 13435 <9f50> <9f50> 18755 <9f52> <9f52> 4745 <9f53> <9f53> 16256 <9f54> <9f54> 12044 <9f55> <9f55> 12409 <9f56> <9f58> 12740 <9f59> <9f59> 12995 <9f5a> <9f5a> 16163 <9f5b> <9f5b> 12991 <9f5c> <9f5c> 5816 <9f5d> <9f5d> 12994 <9f5e> <9f5e> 12993 <9f5f> <9f5f> 5733 <9f60> <9f60> 12992 <9f61> <9f61> 5735 <9f62> <9f62> 14671 <9f63> <9f63> 5734 <9f64> <9f64> 13173 <9f65> <9f65> 13172 <9f66> <9f67> 5817 <9f69> <9f69> 14672 <9f6a> <9f6a> 5876 <9f6b> <9f6b> 13323 <9f6c> <9f6c> 5875 <9f6e> <9f6f> 13438 <9f70> <9f70> 13437 <9f71> <9f71> 13436 <9f72> <9f72> 5953 <9f74> <9f76> 13510 <9f77> <9f77> 5952 <9f78> <9f78> 13569 <9f79> <9f79> 13572 <9f7a> <9f7a> 13571 <9f7b> <9f7b> 13570 <9f7e> <9f7e> 13643 <9f7f> <9f7f> 18048 <9f8d> <9f8d> 5042 <9f8e> <9f8e> 14674 <9f90> <9f90> 5500 <9f91> <9f91> 12996 <9f92> <9f92> 13174 <9f94> <9f94> 5877 <9f95> <9f95> 13324 <9f98> <9f98> 13645 <9f99> <9f99> 17799 <9f9c> <9f9c> 5043 <9f9f> <9f9f> 17990 <9fa0> <9fa0> 12045 <9fa2> <9fa2> 13325 <9fa4> <9fa4> 13594 <9fa5> <9fa5> 16240 16395 16397 16404 16407 16409 16413 16419 endcidrange 100 begincidrange 16421 16427 16429 16432 16440 16443 16445 16454 16464 16471 16485 16487 16490 16495 16497 16503 16508 16511 16515 16520 16530 16532 16535 16542 16548 16551 16561 16564 16566 16569 16581 16583 16585 16590 16592 16594 16597 16603 16607 16615 16618 16621 16626 16630 16633 16637 16643 16645 16647 16653 16656 16658 16665 16669 16677 16682 16687 16697 16703 16706 16714 16717 16719 16721 16723 16726 16730 16735 18767 16743 16749 16757 16761 16764 16767 16771 16777 16779 16781 16783 16787 16790 18771 16792 16801 18772 16808 16812 16816 16818 16821 16824 16826 18773 16829 16834 16837 16840 16844 16852 endcidrange 100 begincidrange 16855 16858 16861 16865 16869 16874 16878 16881 16886 16889 16893 16895 18776 16897 16900 16902 16905 16911 16913 16920 16922 16926 16933 16937 16942 16944 16946 16950 16954 16956 16964 16967 16969 16976 16992 16998 17001 17003 17007 17016 17019 17024 17030 17033 17038 17042 17047 17053 18779 17057 17059 17070 17075 17078 17081 17084 17090 17092 17103 17107 17113 17115 17122 17124 17126 18781 17137 17141 18783 18784 17144 17149 17151 17155 17158 14123 14125 14127 14129 14132 14136 14142 14149 14153 14158 14164 18074 14170 14173 14175 14184 14186 14192 14197 14199 14201 14212 14215 14217 14220 endcidrange 100 begincidrange 14221 14223 14229 14234 14236 14241 14245 14247 18080 14249 14251 14253 18081 14257 14260 18082 14264 14270 14275 14278 14283 14293 14297 14301 18084 14303 18085 14311 14320 14322 18086 14332 14335 14337 14343 14345 14348 14350 14360 14369 14376 14378 14384 14386 18091 14388 14392 14398 14402 14406 14410 14412 14416 18093 14423 14427 14436 14440 14444 14448 18095 14451 14453 14455 14458 14461 14463 14470 14476 14477 14484 14487 14491 18100 14503 14512 14516 14520 14534 14539 14542 14546 14555 14558 14561 14569 14571 14579 14587 14589 14596 14598 14602 14607 18101 14611 14614 14616 18102 14621 endcidrange 100 begincidrange 14623 14631 18104 14634 14639 14648 14655 14660 14668 14677 14680 14684 14687 14691 14695 14702 14705 14707 14710 14714 14717 14721 14723 14729 14732 14739 14747 14750 14757 14759 14763 14768 14770 18107 14774 14776 14779 14783 14787 14793 14804 14808 14812 14814 14818 14822 14827 14832 14840 14845 14847 14849 14859 14868 14876 14878 14882 14886 14893 14898 14901 14903 14906 14912 14915 14917 14920 14924 14929 14935 14940 14943 18111 14951 14954 14959 14964 14968 14971 14978 14982 14986 14990 14993 14996 14998 15001 15005 15010 15016 15023 15027 15030 18116 15036 15039 15046 15052 15055 15058 endcidrange 100 begincidrange 15065 15075 15079 15084 15087 15092 15094 15099 15102 15105 15109 15112 15116 15119 15122 15129 15136 15140 15144 15153 15157 15161 15164 15170 15174 15184 15188 15190 15193 15196 18119 15200 15204 15209 15210 15213 15215 15223 15225 15228 15230 15232 15235 15237 15239 15241 15244 15253 15255 15268 15271 15275 15279 15286 15292 15296 15299 15306 15308 15310 15318 15321 15325 15327 15331 15338 15341 15345 15346 15354 15358 15360 15363 15365 15368 15372 15379 15385 15391 15393 15399 15401 15404 15411 15421 15423 15427 15431 15437 15442 15447 15451 15453 15458 15465 15470 15480 15488 15490 15493 endcidrange 100 begincidrange 15499 15502 15505 15508 15514 15517 15526 15529 15534 15542 15544 15548 15550 15553 15556 15558 15561 15566 15568 15574 15577 15582 15586 15590 15596 15599 15601 15604 15608 15613 15624 15629 15631 15638 15647 15652 18127 15659 15661 15666 15669 15673 15678 15681 15683 15688 15691 15693 15697 15701 15704 18129 18133 18138 15707 18139 18141 18144 18147 18150 15709 15710 15711 18159 17364 18201 18228 18297 18380 18396 18400 18402 18408 18411 18414 18419 18420 18426 18432 18433 17328 18436 18439 17330 18440 18443 18445 18446 18451 18459 18462 18465 18471 18474 18475 18476 18477 18478 15771 18492 endcidrange 100 begincidrange 15773 18494 15776 18497 15779 18498 15781 18500 15785 18501 15786 18503 15787 15790 15792 15794 18505 18508 18509 15796 15799 15801 18510 18513 15804 17360 18515 15805 18516 18518 15809 18520 15812 18522 15814 18523 18524 15816 18527 15819 18528 15822 18529 15823 18534 15825 18535 15827 18536 15830 18538 15832 15834 18539 15835 18540 18541 15837 15839 15842 15844 18544 15846 15849 18546 15851 18548 18549 15854 18550 18551 18552 18553 15860 18554 15864 18556 18557 18558 15871 18559 18561 15874 18563 18564 15876 18566 15878 15881 15885 15892 18568 15896 15898 18571 15903 15906 18572 15908 18576 endcidrange 100 begincidrange 15912 15914 15916 15920 18577 15921 18578 15925 18579 15928 15930 15934 18580 15938 18583 17384 18584 18589 18592 18593 18594 18595 18598 18599 18601 18604 18607 15949 18608 18620 18624 18626 18627 18629 18632 18634 18636 15957 18638 15960 18639 15961 18641 18642 15963 18643 18646 15964 18647 18648 18650 18652 18653 15973 18655 15979 18657 16000 16005 16012 18660 16015 16021 16032 16034 16037 16044 18663 18664 18666 18667 18673 18674 16058 18677 18678 16061 18679 18680 16066 18681 16069 18683 16071 18684 16079 18692 18694 18696 16085 18697 18699 16090 18701 16092 18702 18704 16101 16104 16113 endcidrange 100 begincidrange 18706 16119 18707 18709 16122 18710 18711 16132 18712 16135 18713 16136 16139 16142 18716 16193 16202 18718 18719 16211 18720 18721 16216 16228 16254 16263 18725 18726 16276 18727 16285 18728 16291 16294 18729 18730 18731 16332 18732 16338 16344 16356 16362 18733 16381 18735 18737 17332 18743 18746 18754 18757 17609 18797 18799 18828 18830 18844 17716 17723 17781 17788 17791 17801 17845 17163 17167 17169 17171 17174 17176 17179 17183 17847 17189 17848 17191 17196 17200 17204 17207 17849 17210 17850 17851 17219 17852 17853 17223 17227 17854 17231 17235 17238 17240 17855 17250 17254 17257 17263 endcidrange 100 begincidrange 17857 17268 17272 17274 17859 17278 17282 17285 17860 17861 17865 17870 17874 17880 17882 17292 17884 17294 17886 17887 17296 17888 17297 17889 17298 17893 17303 17896 17899 17902 17904 17906 17908 17910 17912 17924 17929 17936 17947 17956 17633 17636 17653 17658 17660 17663 17668 17675 17681 17688 18044 18054 18068 18071 13999 14002 14004 14007 628 9089 109 122 13743 13745 130 134 138 142 146 150 154 158 199 203 201 13746 112 114 116 160 205 223 268 108 14052 174 259 264 175 14051 128 176 208 100 209 103 257 333 106 105 endcidrange 18 begincidrange 214 216 215 107 265 365 13758 258 13759 13748 197 391 132 120 133 113 14049 14050 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniCNS-UCS2-V b/Resources/cmap/UniCNS-UCS2-V deleted file mode 100644 index 754e7e4c3ce..00000000000 --- a/Resources/cmap/UniCNS-UCS2-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (UniCNS-UCS2-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (UniCNS-UCS2-H) %%BeginResource: CMap (UniCNS-UCS2-V) %%Title: (UniCNS-UCS2-V Adobe CNS1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /UniCNS-UCS2-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (CNS1) def /Supplement 0 def end def /CMapName /UniCNS-UCS2-V def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25393] def /WMode 1 def 13 begincidrange <2013> <2013> 120 <2014> <2014> 122 <2025> <2025> 109 <300a> <300b> 146 <3008> <3009> 150 <300c> <300d> 154 <300e> <300f> 158 <3010> <3011> 142 <3014> <3015> 138 13745 130 134 135 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniGB-UCS2-H b/Resources/cmap/UniGB-UCS2-H deleted file mode 100644 index 83c3d6912c7..00000000000 --- a/Resources/cmap/UniGB-UCS2-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (UniGB-UCS2-H) %%Title: (UniGB-UCS2-H Adobe GB1 4) %%Version: 12.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 4 def end def /CMapName /UniGB-UCS2-H def /CMapVersion 12.001 def /CMapType 1 def /XUID [1 10 25366] def /WMode 0 def 2 begincodespacerange <0000> endcodespacerange 1 beginnotdefrange <0000> <001f> 1 endnotdefrange 100 begincidrange <0020> <007e> 1 <00a4> <00a4> 167 <00a5> <00a5> 22354 <00a7> <00a7> 171 <00a8> <00a8> 102 <00b0> <00b0> 162 <00b1> <00b1> 127 <00d7> <00d7> 128 <00e0> <00e0> 671 <00e1> <00e1> 669 <00e8> <00e8> 675 <00e9> <00e9> 673 <00ea> <00ea> 693 <00ec> <00ec> 679 <00ed> <00ed> 677 <00f2> <00f2> 683 <00f3> <00f3> 681 <00f7> <00f7> 129 <00f9> <00f9> 687 <00fa> <00fa> 685 <00fc> <00fc> 692 <0101> <0101> 668 <0113> <0113> 672 <011b> <011b> 674 <012b> <012b> 676 <014d> <014d> 680 <016b> <016b> 684 <01ce> <01ce> 670 <01d0> <01d0> 678 <01d2> <01d2> 682 <01d4> <01d4> 686 <01d6> <01d6> 688 <01d8> <01d8> 689 <01da> <01da> 690 <01dc> <01dc> 691 <01f9> <01f9> 698 <02c7> <02c7> 101 <02c9> <02c9> 100 <02ca> <02cb> 9907 <02d9> <02d9> 9909 <0391> <03a1> 525 <03a3> <03a9> 542 <03b1> <03c1> 549 <03c3> <03c9> 566 <0401> <0401> 608 <0410> <0415> 602 <0416> <0435> 609 <0436> <044f> 642 <0451> <0451> 641 <1e3f> <1e3f> 695 <2010> <2010> 10018 <2013> <2013> 9910 <2014> <2014> 105 <2015> <2015> 9911 <2016> <2016> 107 <2018> <2019> 109 <201c> <201d> 111 <2025> <2025> 9912 <2026> <2026> 108 <2030> <2030> 170 <2032> <2033> 163 <2035> <2035> 9913 <203b> <203b> 184 <20ac> <20ac> 22353 <2103> <2103> 165 <2105> <2105> 9914 <2109> <2109> 9915 <2116> <2116> 172 <2121> <2121> 10016 <2160> <216b> 250 <2170> <2179> 9897 <2190> <2191> 186 <2192> <2192> 185 <2193> <2193> 188 <2196> <2199> 9916 <2208> <2208> 137 <220f> <220f> 134 <2211> <2211> 133 <2215> <2215> 9920 <221a> <221a> 139 <221d> <221d> 151 <221e> <221e> 157 <221f> <221f> 9921 <2220> <2220> 142 <2223> <2223> 9922 <2225> <2225> 141 <2227> <2228> 131 <2229> <2229> 136 <222a> <222a> 135 <222b> <222b> 145 <222e> <222e> 146 <2234> <2234> 159 <2235> <2235> 158 <2236> <2236> 130 <2237> <2237> 138 <223d> <223d> 150 <2248> <2248> 149 <224c> <224c> 148 <2252> <2252> 9923 <2260> <2260> 152 endcidrange 100 begincidrange <2261> <2261> 147 <2264> <2265> 155 <2266> <2267> 9924 <226e> <226f> 153 <2295> <2295> 9988 <2299> <2299> 144 <22a5> <22a5> 140 <22bf> <22bf> 9926 <22ef> <22ef> 108 <2312> <2312> 143 <2460> <2469> 230 <2474> <2487> 210 <2488> <249b> 190 <2500> <254b> 738 <2550> <2573> 9927 <2581> <258f> 9963 <2593> <2595> 9978 <25a0> <25a0> 181 <25a1> <25a1> 180 <25b2> <25b2> 183 <25b3> <25b3> 182 <25bc> <25bd> 9981 <25c6> <25c6> 179 <25c7> <25c7> 178 <25cb> <25cb> 175 <25ce> <25ce> 177 <25cf> <25cf> 176 <25e2> <25e5> 9983 <2605> <2605> 174 <2606> <2606> 173 <2609> <2609> 9987 <2640> <2640> 161 <2642> <2642> 160 <2e80> <2e80> 22428 <2e81> <2e81> 22047 <2e82> <2e83> 22429 <2e84> <2e84> 22051 <2e85> <2e87> 22431 <2e88> <2e88> 22054 <2e89> <2e8a> 22434 <2e8b> <2e8b> 22055 <2e8c> <2e8c> 22060 <2e8d> <2e96> 22436 <2e97> <2e97> 22061 <2e98> <2e99> 22446 <2e9b> <2ea6> 22448 <2ea7> <2ea7> 22074 <2ea8> <2ea9> 22460 <2eaa> <2eaa> 22077 <2eab> <2ead> 22462 <2eae> <2eae> 22080 <2eaf> <2eb2> 22465 <2eb3> <2eb3> 22082 <2eb4> <2eb5> 22469 <2eb6> <2eb7> 22083 <2eb8> <2eba> 22471 <2ebb> <2ebb> 22088 <2ebc> <2ec9> 22474 <2eca> <2eca> 22098 <2ecb> <2ef3> 22488 <2f00> <2f00> 4162 <2f01> <2f01> 4707 <2f02> <2f02> 4722 <2f03> <2f03> 4709 <2f04> <2f04> 4185 <2f05> <2f05> 10131 <2f06> <2f06> 1597 <2f07> <2f07> 4867 <2f08> <2f08> 3238 <2f09> <2f09> 1592 <2f0a> <2f0a> 3270 <2f0b> <2f0b> 982 <2f0c> <2f0c> 4765 <2f0d> <2f0d> 4884 <2f0e> <2f0e> 4879 <2f0f> <2f0f> 2091 <2f10> <2f10> 5017 <2f11> <2f11> 1431 <2f12> <2f12> 2543 <2f13> <2f13> 4860 <2f14> <2f14> 4710 <2f15> <2f15> 4740 <2f16> <2f16> 10778 <2f17> <2f17> 3397 <2f18> <2f18> 1150 <2f19> <2f19> 4946 <2f1a> <2f1a> 1228 <2f1b> <2f1b> 5020 <2f1c> <2f1c> 4283 <2f1d> <2f1d> 2407 <2f1e> <2f1e> 5523 <2f1f> <2f1f> 3698 <2f20> <2f20> 3414 <2f21> <2f21> 5660 <2f22> <2f22> 11565 <2f23> <2f23> 3859 <2f24> <2f24> 1398 <2f25> <2f25> 2927 <2f26> <2f26> 4656 <2f27> <2f27> 5934 endcidrange 100 begincidrange <2f28> <2f28> 1386 <2f29> <2f29> 3948 <2f2a> <2f2a> 5302 <2f2b> <2f2b> 3395 <2f2c> <2f2c> 6004 <2f2d> <2f2d> 3318 <2f2e> <2f2e> 6165 <2f2f> <2f2f> 1789 <2f30> <2f30> 2093 <2f31> <2f31> 2238 <2f32> <2f32> 1732 <2f33> <2f33> 6163 <2f34> <2f34> 1852 <2f35> <2f35> 5016 <2f36> <2f36> 5293 <2f37> <2f37> 5366 <2f38> <2f38> 1798 <2f39> <2f39> 5986 <2f3a> <2f3a> 5614 <2f3b> <2f3b> 5600 <2f3c> <2f3c> 3983 <2f3d> <2f3d> 1765 <2f3e> <2f3e> 12946 <2f3f> <2f3f> 3437 <2f40> <2f40> 4518 <2f41> <2f41> 6409 <2f42> <2f42> 3795 <2f43> <2f43> 1526 <2f44> <2f44> 2240 <2f45> <2f45> 1626 <2f46> <2f46> 3821 <2f47> <2f47> 3248 <2f48> <2f48> 4350 <2f49> <2f49> 4357 <2f4a> <2f4a> 2849 <2f4b> <2f4b> 3124 <2f4c> <2f4c> 4536 <2f4d> <2f4d> 1400 <2f4e> <2f4e> 6589 <2f4f> <2f4f> 3826 <2f50> <2f50> 1073 <2f51> <2f51> 2736 <2f52> <2f52> 3430 <2f53> <2f53> 3095 <2f54> <2f54> 3491 <2f55> <2f55> 2053 <2f56> <2f56> 4611 <2f57> <2f57> 1715 <2f58> <2f58> 4713 <2f59> <2f59> 5789 <2f5a> <2f5a> 3019 <2f5b> <2f5b> 4073 <2f5c> <2f5c> 2916 <2f5d> <2f5d> 3209 <2f5e> <2f5e> 4041 <2f5f> <2f5f> 4310 <2f60> <2f60> 1832 <2f61> <2f61> 3728 <2f62> <2f62> 1733 <2f63> <2f63> 3379 <2f64> <2f64> 4264 <2f65> <2f65> 3650 <2f66> <2f66> 7110 <2f67> <2f67> 7008 <2f68> <2f68> 16063 <2f69> <2f69> 994 <2f6a> <2f6a> 3011 <2f6b> <2f6b> 2808 <2f6c> <2f6c> 2850 <2f6d> <2f6d> 2737 <2f6e> <2f6e> 3407 <2f6f> <2f6f> 3398 <2f70> <2f70> 3413 <2f71> <2f71> 16587 <2f72> <2f72> 1923 <2f73> <2f73> 4049 <2f74> <2f74> 2539 <2f75> <2f75> 4592 <2f76> <2f76> 2780 <2f77> <2f77> 7399 <2f78> <2f78> 7262 <2f79> <2f79> 3753 <2f7a> <2f7a> 4123 <2f7b> <2f7b> 4309 <2f7c> <2f7c> 2490 <2f7d> <2f7d> 1591 <2f7e> <2f7e> 7115 <2f7f> <2f7f> 1593 <2f80> <2f80> 6686 <2f81> <2f81> 3261 <2f82> <2f82> 1249 <2f83> <2f83> 4657 <2f84> <2f84> 4544 <2f85> <2f85> 2297 <2f86> <2f86> 3353 <2f87> <2f87> 5656 <2f88> <2f88> 4570 <2f89> <2f89> 7388 <2f8a> <2f8a> 3300 <2f8b> <2f8b> 17826 endcidrange 100 begincidrange <2f8c> <2f8c> 7152 <2f8d> <2f8d> 1291 <2f8e> <2f8e> 4051 <2f8f> <2f8f> 3995 <2f90> <2f90> 4169 <2f91> <2f91> 18908 <2f92> <2f92> 8086 <2f93> <2f93> 2200 <2f94> <2f94> 4093 <2f95> <2f95> 1825 <2f96> <2f96> 1528 <2f97> <2f97> 7445 <2f98> <2f98> 7504 <2f99> <2f99> 7739 <2f9a> <2f9a> 1285 <2f9b> <2f9b> 4668 <2f9c> <2f9c> 4672 <2f9d> <2f9d> 3366 <2f9e> <2f9e> 7803 <2f9f> <2f9f> 3980 <2fa0> <2fa0> 1250 <2fa1> <2fa1> 19731 <2fa2> <2fa2> 4191 <2fa3> <2fa3> 4276 <2fa4> <2fa4> 19992 <2fa5> <2fa5> 2522 <2fa6> <2fa6> 2241 <2fa7> <2fa7> 7797 <2fa8> <2fa8> 8317 <2fa9> <2fa9> 1714 <2faa> <2faa> 2542 <2fab> <2fab> 7545 <2fac> <2fac> 4303 <2fad> <2fad> 20714 <2fae> <2fae> 1636 <2faf> <2faf> 2795 <2fb0> <2fb0> 1770 <2fb1> <2fb1> 8589 <2fb2> <2fb2> 2289 <2fb3> <2fb3> 4219 <2fb4> <2fb4> 8713 <2fb5> <2fb5> 7936 <2fb6> <2fb6> 7924 <2fb7> <2fb7> 3402 <2fb8> <2fb8> 3438 <2fb9> <2fb9> 3920 <2fba> <2fba> 8301 <2fbb> <2fbb> 1824 <2fbc> <2fbc> 1754 <2fbd> <2fbd> 7660 <2fbe> <2fbe> 7888 <2fbf> <2fbf> 5019 <2fc0> <2fc0> 4704 <2fc1> <2fc1> 1862 <2fc2> <2fc2> 8761 <2fc3> <2fc3> 8348 <2fc4> <2fc4> 9864 <2fc5> <2fc5> 2656 <2fc6> <2fc6> 8305 <2fc7> <2fc7> 2704 <2fc8> <2fc8> 21894 <2fc9> <2fc9> 3465 <2fca> <2fca> 1937 <2fcb> <2fcb> 6741 <2fcc> <2fcc> 9752 <2fcd> <2fcd> 1509 <2fce> <2fce> 1821 <2fcf> <2fcf> 3466 <2fd0> <2fd0> 1072 <2fd1> <2fd1> 8390 <2fd2> <2fd2> 7814 <2fd3> <2fd3> 8247 <2fd4> <2fd4> 7988 <2fd5> <2fd5> 4851 <2ff0> <2ffb> 10060 <3000> <3002> 96 <3003> <3003> 103 <3005> <3005> 104 <3006> <3006> 10024 <3007> <3007> 7703 <3008> <300f> 115 <3010> <3011> 125 <3012> <3012> 9989 <3013> <3013> 189 <3014> <3015> 113 <3016> <3017> 123 <301d> <301e> 9990 <3021> <3029> 9992 <3033> <3035> 22395 <3038> <303a> 22398 <303e> <303e> 10059 <303f> <303f> 22357 <3041> <3093> 356 <3094> <3094> 22375 <309b> <309c> 10020 <309d> <309e> 10025 <30a1> <30f6> 439 <30f7> <30fa> 22390 <30fb> <30fb> 99 <30fc> <30fc> 10019 endcidrange 100 begincidrange <30fd> <30fe> 10022 <3105> <3129> 700 <312a> <312c> 22401 <31a0> <31b7> 22404 <3220> <3229> 240 <3231> <3231> 10017 <32a3> <32a3> 10001 <338e> <338f> 10002 <339c> <339e> 10004 <33a1> <33a1> 10007 <33c4> <33c4> 10008 <33ce> <33ce> 10009 <33d1> <33d2> 10010 <33d5> <33d5> 10012 <3400> <3446> 22529 <3447> <3447> 22053 <3448> <3472> 22600 <3473> <3473> 22052 <3474> <34ff> 22643 <3500> <359d> 22783 <359e> <359e> 22057 <359f> <35ff> 22941 <3600> <360d> 23038 <360e> <360e> 22059 <360f> <3619> 23052 <361a> <361a> 22058 <361b> <36ff> 23063 <3700> <37ff> 23292 <3800> <38ff> 23548 <3900> <3917> 23804 <3918> <3918> 22063 <3919> <396d> 23828 <396e> <396e> 22062 <396f> <39ce> 23913 <39cf> <39cf> 22065 <39d0> <39d0> 22068 <39d1> <39de> 24009 <39df> <39df> 22066 <39e0> <39ff> 24023 <3a00> <3a72> 24055 <3a73> <3a73> 22067 <3a74> <3aff> 24170 <3b00> <3b4d> 24310 <3b4e> <3b4e> 22071 <3b4f> <3bff> 24388 <3c00> <3c6d> 24565 <3c6e> <3c6e> 22072 <3c6f> <3cdf> 24675 <3ce0> <3ce0> 22073 <3ce1> <3cff> 24788 <3d00> <3dff> 24819 <3e00> <3eff> 25075 <3f00> <3fff> 25331 <4000> <4055> 25587 <4056> <4056> 22078 <4057> <40ff> 25673 <4100> <415e> 25842 <415f> <415f> 22079 <4160> <41ff> 25937 <4200> <42ff> 26097 <4300> <4336> 26353 <4337> <4337> 22081 <4338> <43ab> 26408 <43ac> <43ac> 22087 <43ad> <43b0> 26524 <43b1> <43b1> 22086 <43b2> <43dc> 26528 <43dd> <43dd> 22089 <43de> <43ff> 26571 <4400> <44d5> 26605 <44d6> <44d6> 22090 <44d7> <44ff> 26819 <4500> <45ff> 26860 <4600> <464b> 27116 <464c> <464c> 22092 <464d> <4660> 27192 <4661> <4661> 22091 <4662> <46ff> 27212 <4700> <4722> 27370 <4723> <4723> 22094 <4724> <4728> 27405 <4729> <4729> 22095 <472a> <477b> 27410 <477c> <477c> 22096 <477d> <478c> 27492 <478d> <478d> 22097 <478e> <47ff> 27508 <4800> <48ff> 27622 <4900> <4946> 27878 <4947> <4947> 22099 <4948> <4979> 27949 <497a> <497a> 22100 <497b> <497c> 27999 <497d> <497d> 22101 <497e> <4981> 28001 <4982> <4983> 22102 <4984> <4984> 28005 <4985> <4986> 22104 <4987> <499a> 28006 <499b> <499b> 22107 endcidrange 100 begincidrange <499c> <499e> 28026 <499f> <499f> 22106 <49a0> <49b5> 28029 <49b6> <49b6> 22109 <49b7> <49b7> 22108 <49b8> <49ff> 28051 <4a00> <4aff> 28123 <4b00> <4bff> 28379 <4c00> <4c76> 28635 <4c77> <4c77> 22116 <4c78> <4c9e> 28754 <4c9f> <4ca1> 22113 <4ca2> <4ca2> 22117 <4ca3> <4ca3> 22112 <4ca4> <4cff> 28793 <4d00> <4d12> 28885 <4d13> <4d19> 22118 <4d1a> <4dad> 28904 <4dae> <4dae> 22125 <4daf> <4db5> 29052 <4e00> <4e00> 4162 <4e01> <4e01> 1504 <4e02> <4e02> 10072 <4e03> <4e03> 3070 <4e04> <4e06> 10073 <4e07> <4e07> 3747 <4e08> <4e08> 4458 <4e09> <4e09> 3288 <4e0a> <4e0a> 3336 <4e0b> <4e0b> 3887 <4e0c> <4e0c> 4696 <4e0d> <4e0d> 1154 <4e0e> <4e0e> 4304 <4e0f> <4e0f> 10076 <4e10> <4e10> 4698 <4e11> <4e11> 1304 <4e12> <4e12> 10077 <4e13> <4e13> 4613 <4e14> <4e14> 3151 <4e15> <4e15> 4701 <4e16> <4e16> 3415 <4e17> <4e17> 10078 <4e18> <4e18> 3181 <4e19> <4e19> 1124 <4e1a> <4e1a> 4156 <4e1b> <4e1b> 1367 <4e1c> <4e1c> 1514 <4e1d> <4e1d> 3508 <4e1e> <4e1e> 4703 <4e1f> <4e21> 10079 <4e22> <4e22> 1513 <4e23> <4e23> 10082 <4e24> <4e24> 2566 <4e25> <4e25> 4088 <4e26> <4e26> 10083 <4e27> <4e27> 3294 <4e28> <4e28> 4707 <4e29> <4e29> 10084 <4e2a> <4e2a> 1777 <4e2b> <4e2b> 4071 <4e2c> <4e2c> 5788 <4e2d> <4e2d> 4559 <4e2e> <4e2f> 10085 <4e30> <4e30> 1662 <4e31> <4e31> 10087 <4e32> <4e32> 1329 <4e33> <4e33> 10088 <4e34> <4e34> 2594 <4e35> <4e35> 10089 <4e36> <4e36> 4722 <4e37> <4e37> 10090 <4e38> <4e38> 3737 <4e39> <4e39> 1413 <4e3a> <4e3a> 3769 <4e3b> <4e3b> 4598 <4e3c> <4e3c> 10091 <4e3d> <4e3d> 2529 <4e3e> <4e3e> 2312 <4e3f> <4e3f> 4709 <4e40> <4e42> 10092 <4e43> <4e43> 2862 <4e44> <4e44> 10095 <4e45> <4e45> 2290 <4e46> <4e46> 10096 <4e47> <4e47> 4711 <4e48> <4e48> 2745 <4e49> <4e49> 4204 <4e4a> <4e4a> 10097 <4e4b> <4e4b> 4525 <4e4c> <4e4c> 3817 <4e4d> <4e4d> 4424 <4e4e> <4e4e> 1964 <4e4f> <4e4f> 1603 <4e50> <4e50> 2497 <4e51> <4e51> 10098 <4e52> <4e52> 3032 <4e53> <4e53> 2963 <4e54> <4e54> 3140 <4e55> <4e55> 10099 <4e56> <4e56> 1837 endcidrange 100 begincidrange <4e57> <4e57> 10100 <4e58> <4e58> 1264 <4e59> <4e59> 4185 <4e5a> <4e5b> 10101 <4e5c> <4e5c> 4725 <4e5d> <4e5d> 2292 <4e5e> <4e5e> 3089 <4e5f> <4e5f> 4153 <4e60> <4e60> 3869 <4e61> <4e61> 3924 <4e62> <4e65> 10103 <4e66> <4e66> 3456 <4e67> <4e68> 10107 <4e69> <4e69> 4726 <4e6a> <4e6f> 10109 <4e70> <4e70> 2713 <4e71> <4e71> 2681 <4e72> <4e72> 10115 <4e73> <4e73> 3268 <4e74> <4e7d> 10116 <4e7e> <4e7e> 3113 <4e7f> <4e81> 10126 <4e82> <4e82> 8281 <4e83> <4e85> 10129 <4e86> <4e86> 2580 <4e87> <4e87> 10132 <4e88> <4e88> 4301 <4e89> <4e89> 4506 <4e8a> <4e8a> 10133 <4e8b> <4e8b> 3417 <4e8c> <4e8c> 1597 <4e8d> <4e8d> 4695 <4e8e> <4e8e> 4287 <4e8f> <4e8f> 2436 <4e90> <4e90> 10134 <4e91> <4e91> 4361 <4e92> <4e92> 1978 <4e93> <4e93> 4727 <4e94> <4e94> 3828 <4e95> <4e95> 2269 <4e96> <4e97> 10135 <4e98> <4e98> 4702 <4e99> <4e99> 10137 <4e9a> <4e9a> 4080 <4e9b> <4e9b> 3956 <4e9c> <4e9d> 10138 <4e9e> <4e9e> 8689 <4e9f> <4e9f> 4723 <4ea0> <4ea0> 4867 <4ea1> <4ea1> 3751 <4ea2> <4ea2> 2375 <4ea3> <4ea3> 10140 <4ea4> <4ea4> 2188 <4ea5> <4ea5> 1884 <4ea6> <4ea6> 4199 <4ea7> <4ea7> 1217 <4ea8> <4ea8> 1943 <4ea9> <4ea9> 2841 <4eaa> <4eaa> 10141 <4eab> <4eab> 3930 <4eac> <4eac> 2264 <4ead> <4ead> 3669 <4eae> <4eae> 2570 <4eaf> <4eb1> 10142 <4eb2> <4eb2> 3156 <4eb3> <4eb3> 4869 <4eb4> <4eb4> 10145 <4eb5> <4eb5> 4872 <4eb6> <4eb9> 10146 <4eba> <4eba> 3238 <4ebb> <4ebb> 4767 <4ebc> <4ebe> 10150 <4ebf> <4ebf> 4193 <4ec0> <4ec0> 3401 <4ec1> <4ec1> 3237 <4ec2> <4ec2> 4770 <4ec3> <4ec3> 4768 <4ec4> <4ec4> 4732 <4ec5> <4ec5> 2247 <4ec6> <4ec6> 3052 <4ec7> <4ec7> 1301 <4ec8> <4ec8> 10153 <4ec9> <4ec9> 4769 <4eca> <4eca> 2242 <4ecb> <4ecb> 2234 <4ecc> <4ecc> 10154 <4ecd> <4ecd> 3247 <4ece> <4ece> 1366 <4ecf> <4ed0> 10155 <4ed1> <4ed1> 2687 <4ed2> <4ed2> 10157 <4ed3> <4ed3> 1181 <4ed4> <4ed4> 4653 <4ed5> <4ed5> 3426 <4ed6> <4ed6> 3568 <4ed7> <4ed7> 4461 <4ed8> <4ed8> 1713 <4ed9> <4ed9> 3894 <4eda> <4edc> 10158 <4edd> <4edd> 4846 endcidrange 100 begincidrange <4ede> <4ede> 4774 <4edf> <4edf> 3111 <4ee0> <4ee0> 10161 <4ee1> <4ee1> 4772 <4ee2> <4ee2> 10162 <4ee3> <4ee3> 1405 <4ee4> <4ee4> 2615 <4ee5> <4ee5> 4187 <4ee6> <4ee7> 10163 <4ee8> <4ee8> 4771 <4ee9> <4ee9> 10165 <4eea> <4eea> 4174 <4eeb> <4eeb> 4773 <4eec> <4eec> 2764 <4eed> <4eef> 10166 <4ef0> <4ef0> 4127 <4ef1> <4ef1> 10169 <4ef2> <4ef2> 4568 <4ef3> <4ef3> 4776 <4ef4> <4ef4> 10170 <4ef5> <4ef5> 4779 <4ef6> <4ef6> 2161 <4ef7> <4ef7> 2126 <4ef8> <4efa> 10171 <4efb> <4efb> 3241 <4efc> <4efc> 10174 <4efd> <4efd> 1658 <4efe> <4efe> 10175 <4eff> <4eff> 1631 <4f00> <4f00> 10176 <4f01> <4f01> 3090 <4f02> <4f08> 10177 <4f09> <4f09> 4782 <4f0a> <4f0a> 4168 <4f0b> <4f0c> 10184 <4f0d> <4f0d> 3832 <4f0e> <4f0e> 2098 <4f0f> <4f0f> 1689 <4f10> <4f10> 1602 <4f11> <4f11> 4008 <4f12> <4f16> 10186 <4f17> <4f17> 4569 <4f18> <4f18> 4266 <4f19> <4f19> 2052 <4f1a> <4f1a> 2038 <4f1b> <4f1b> 4775 <4f1c> <4f1d> 10191 <4f1e> <4f1e> 3290 <4f1f> <4f1f> 3775 <4f20> <4f20> 1326 <4f21> <4f21> 10193 <4f22> <4f22> 4777 <4f23> <4f23> 10194 <4f24> <4f24> 3332 <4f25> <4f25> 4780 <4f26> <4f26> 2686 <4f27> <4f27> 4781 <4f28> <4f29> 10195 <4f2a> <4f2a> 3776 <4f2b> <4f2b> 4783 <4f2c> <4f2e> 10197 <4f2f> <4f2f> 1141 <4f30> <4f30> 1817 <4f31> <4f31> 10200 <4f32> <4f32> 4791 <4f33> <4f33> 10201 <4f34> <4f34> 1012 <4f35> <4f35> 10202 <4f36> <4f36> 2607 <4f37> <4f37> 10203 <4f38> <4f38> 3365 <4f39> <4f39> 10204 <4f3a> <4f3a> 3514 <4f3b> <4f3b> 10205 <4f3c> <4f3c> 3515 <4f3d> <4f3d> 4792 <4f3e> <4f42> 10206 <4f43> <4f43> 1481 <4f44> <4f45> 10211 <4f46> <4f46> 1420 <4f47> <4f4c> 10213 <4f4d> <4f4d> 3786 <4f4e> <4f4e> 1454 <4f4f> <4f4f> 4606 <4f50> <4f50> 4689 <4f51> <4f51> 4280 <4f52> <4f52> 10219 <4f53> <4f53> 3640 <4f54> <4f54> 10220 <4f55> <4f55> 1925 <4f56> <4f56> 10221 <4f57> <4f57> 4790 <4f58> <4f58> 4848 <4f59> <4f59> 4293 <4f5a> <4f5a> 4787 <4f5b> <4f5b> 1677 <4f5c> <4f5c> 4692 <4f5d> <4f5d> 4788 <4f5e> <4f5e> 4784 <4f5f> <4f5f> 4789 endcidrange 100 begincidrange <4f60> <4f60> 2886 <4f61> <4f62> 10222 <4f63> <4f63> 4251 <4f64> <4f64> 4778 <4f65> <4f65> 4849 <4f66> <4f66> 10224 <4f67> <4f67> 4785 <4f68> <4f68> 10225 <4f69> <4f69> 2982 <4f6a> <4f6b> 10226 <4f6c> <4f6c> 2491 <4f6d> <4f6e> 10228 <4f6f> <4f6f> 4121 <4f70> <4f70> 998 <4f71> <4f72> 10230 <4f73> <4f73> 2116 <4f74> <4f74> 4794 <4f75> <4f75> 10232 <4f76> <4f76> 4793 <4f77> <4f7a> 10233 <4f7b> <4f7b> 4800 <4f7c> <4f7c> 4802 <4f7d> <4f7d> 10237 <4f7e> <4f7e> 4799 <4f7f> <4f7f> 3408 <4f80> <4f82> 10238 <4f83> <4f83> 4797 <4f84> <4f84> 4533 <4f85> <4f85> 10241 <4f86> <4f86> 8178 <4f87> <4f87> 10242 <4f88> <4f88> 1283 <4f89> <4f89> 4796 <4f8a> <4f8a> 10243 <4f8b> <4f8b> 2536 <4f8c> <4f8c> 10244 <4f8d> <4f8d> 3427 <4f8e> <4f8e> 10245 <4f8f> <4f8f> 4798 <4f90> <4f90> 10246 <4f91> <4f91> 4795 <4f92> <4f93> 10247 <4f94> <4f94> 4804 <4f95> <4f95> 10249 <4f96> <4f96> 8285 <4f97> <4f97> 1520 <4f98> <4f9a> 10250 <4f9b> <4f9b> 1794 <4f9c> <4f9c> 10253 <4f9d> <4f9d> 4167 <4f9e> <4f9f> 10254 <4fa0> <4fa0> 3885 <4fa1> <4fa2> 10256 <4fa3> <4fa3> 2665 <4fa4> <4fa4> 10258 <4fa5> <4fa5> 2197 <4fa6> <4fa6> 4493 <4fa7> <4fa7> 1191 <4fa8> <4fa8> 3141 <4fa9> <4fa9> 2424 <4faa> <4faa> 4801 <4fab> <4fab> 10259 <4fac> <4fac> 4803 <4fad> <4fad> 10260 <4fae> <4fae> 3833 <4faf> <4faf> 1957 <4fb0> <4fb4> 10261 <4fb5> <4fb5> 3155 <4fb6> <4fbe> 10266 <4fbf> <4fbf> 1100 <4fc0> <4fc1> 10275 <4fc2> <4fc2> 9884 <4fc3> <4fc3> 1372 <4fc4> <4fc4> 1580 <4fc5> <4fc5> 4808 <4fc6> <4fc9> 10277 <4fca> <4fca> 2350 <4fcb> <4fcd> 10281 <4fce> <4fce> 4850 <4fcf> <4fcf> 3147 <4fd0> <4fd0> 2537 <4fd1> <4fd1> 4812 <4fd2> <4fd6> 10284 <4fd7> <4fd7> 3532 <4fd8> <4fd8> 1690 <4fd9> <4fd9> 10289 <4fda> <4fda> 4809 <4fdb> <4fdb> 10290 <4fdc> <4fdc> 4811 <4fdd> <4fdd> 1036 <4fde> <4fde> 4294 <4fdf> <4fdf> 4813 <4fe0> <4fe0> 8629 <4fe1> <4fe1> 3984 <4fe2> <4fe2> 10291 <4fe3> <4fe3> 4810 <4fe4> <4fe5> 10292 <4fe6> <4fe6> 4805 <4fe7> <4fe7> 10294 <4fe8> <4fe8> 4806 endcidrange 100 begincidrange <4fe9> <4fe9> 2546 <4fea> <4fea> 4807 <4feb> <4fec> 10295 <4fed> <4fed> 2150 <4fee> <4fee> 4009 <4fef> <4fef> 1700 <4ff0> <4ff0> 10297 <4ff1> <4ff1> 2322 <4ff2> <4ff2> 10298 <4ff3> <4ff3> 4817 <4ff4> <4ff7> 10299 <4ff8> <4ff8> 4814 <4ff9> <4ff9> 10303 <4ffa> <4ffa> 958 <4ffb> <4ffd> 10304 <4ffe> <4ffe> 4822 <4fff> <4fff> 10307 <5000> <5000> 8908 <5001> <5005> 10308 <5006> <5006> 8214 <5007> <5008> 10313 <5009> <5009> 7778 <500a> <500a> 10315 <500b> <500b> 7968 <500c> <500c> 4824 <500d> <500d> 1055 <500e> <500e> 10316 <500f> <500f> 4819 <5010> <5010> 10317 <5011> <5011> 8319 <5012> <5012> 1434 <5013> <5013> 10318 <5014> <5014> 2338 <5015> <5017> 10319 <5018> <5018> 3611 <5019> <5019> 1961 <501a> <501a> 4183 <501b> <501b> 10322 <501c> <501c> 4823 <501d> <501e> 10323 <501f> <501f> 2233 <5020> <5020> 10325 <5021> <5021> 1232 <5022> <5024> 10326 <5025> <5025> 4825 <5026> <5026> 2330 <5027> <5027> 10329 <5028> <5028> 4826 <5029> <5029> 4815 <502a> <502a> 2882 <502b> <502b> 8284 <502c> <502c> 4818 <502d> <502d> 4821 <502e> <502e> 4820 <502f> <5039> 10330 <503a> <503a> 4431 <503b> <503b> 10341 <503c> <503c> 4532 <503d> <503d> 10342 <503e> <503e> 3168 <503f> <5042> 10343 <5043> <5043> 4828 <5044> <5046> 10347 <5047> <5047> 2124 <5048> <5048> 4830 <5049> <5049> 8596 <504a> <504b> 10350 <504c> <504c> 4816 <504d> <504d> 10352 <504e> <504e> 4831 <504f> <504f> 3018 <5050> <5054> 10353 <5055> <5055> 4829 <5056> <5059> 10358 <505a> <505a> 4691 <505b> <505b> 10362 <505c> <505c> 3668 <505d> <5064> 10363 <5065> <5065> 2162 <5066> <506b> 10371 <506c> <506c> 4832 <506d> <5073> 10377 <5074> <5074> 7781 <5075> <5075> 8833 <5076> <5076> 2941 <5077> <5077> 3686 <5078> <507a> 10384 <507b> <507b> 4833 <507c> <507d> 10387 <507e> <507e> 4827 <507f> <507f> 1226 <5080> <5080> 2443 <5081> <5084> 10389 <5085> <5085> 1712 <5086> <5087> 10393 <5088> <5088> 2535 <5089> <508c> 10395 <508d> <508d> 1027 <508e> <5095> 10399 <5096> <5096> 8909 endcidrange 100 begincidrange <5097> <5097> 10407 <5098> <5098> 8458 <5099> <5099> 7742 <509a> <50a1> 10408 <50a2> <50a2> 9855 <50a3> <50a3> 1401 <50a4> <50a4> 10416 <50a5> <50a5> 4834 <50a6> <50a6> 10417 <50a7> <50a7> 4835 <50a8> <50a8> 1317 <50a9> <50a9> 4836 <50aa> <50ab> 10418 <50ac> <50ac> 1378 <50ad> <50ad> 8750 <50ae> <50b1> 10420 <50b2> <50b2> 972 <50b3> <50b3> 7830 <50b4> <50b4> 8907 <50b5> <50b5> 8812 <50b6> <50b6> 10424 <50b7> <50b7> 8471 <50b8> <50b9> 10425 <50ba> <50ba> 4837 <50bb> <50bb> 3310 <50bc> <50bd> 10427 <50be> <50be> 8424 <50bf> <50c1> 10429 <50c2> <50c2> 8916 <50c3> <50c4> 10432 <50c5> <50c5> 8121 <50c6> <50c8> 10434 <50c9> <50c9> 8920 <50ca> <50ce> 10437 <50cf> <50cf> 3934 <50d0> <50d0> 10442 <50d1> <50d1> 8415 <50d2> <50d4> 10443 <50d5> <50d5> 8386 <50d6> <50d6> 4838 <50d7> <50d9> 10446 <50da> <50da> 2574 <50db> <50dd> 10449 <50de> <50de> 8597 <50df> <50e4> 10452 <50e5> <50e5> 8108 <50e6> <50e6> 4842 <50e7> <50e7> 3303 <50e8> <50e8> 8915 <50e9> <50eb> 10458 <50ec> <50ec> 4841 <50ed> <50ed> 4840 <50ee> <50ee> 4843 <50ef> <50f2> 10461 <50f3> <50f3> 3536 <50f4> <50f4> 10465 <50f5> <50f5> 2170 <50f6> <50f8> 10466 <50f9> <50f9> 8065 <50fa> <50fa> 10469 <50fb> <50fb> 3014 <50fc> <50ff> 10470 <5100> <5100> 8720 <5101> <5101> 10474 <5102> <5102> 8911 <5103> <5103> 10475 <5104> <5104> 8723 <5105> <5105> 10476 <5106> <5106> 4839 <5107> <5107> 4844 <5108> <5108> 8164 <5109> <5109> 8080 <510a> <510a> 10477 <510b> <510b> 4845 <510c> <510f> 10478 <5110> <5110> 8918 <5111> <5111> 10482 <5112> <5112> 3264 <5113> <5113> 10483 <5114> <5114> 8912 <5115> <5115> 8910 <5116> <5117> 10484 <5118> <5118> 9857 <5119> <511e> 10486 <511f> <511f> 7798 <5120> <5120> 10492 <5121> <5121> 2503 <5122> <5129> 10493 <512a> <512a> 8753 <512b> <5131> 10501 <5132> <5132> 7827 <5133> <5136> 10508 <5137> <5137> 8914 <5138> <5139> 10512 <513a> <513a> 8919 <513b> <513b> 8917 <513c> <513c> 8913 <513d> <513e> 10514 <513f> <513f> 1592 <5140> <5140> 4697 endcidrange 100 begincidrange <5141> <5141> 4365 <5142> <5142> 10516 <5143> <5143> 4333 <5144> <5144> 4001 <5145> <5145> 1289 <5146> <5146> 4472 <5147> <5147> 10517 <5148> <5148> 3893 <5149> <5149> 1851 <514a> <514a> 10518 <514b> <514b> 2392 <514c> <514c> 10519 <514d> <514d> 2791 <514e> <5150> 10520 <5151> <5151> 1553 <5152> <5152> 7909 <5153> <5153> 10523 <5154> <5154> 3700 <5155> <5155> 4866 <5156> <5156> 4868 <5157> <5159> 10524 <515a> <515a> 1428 <515b> <515b> 10527 <515c> <515c> 1524 <515d> <5161> 10528 <5162> <5162> 2259 <5163> <5164> 10533 <5165> <5165> 3270 <5166> <5167> 10535 <5168> <5168> 3206 <5169> <5169> 8229 <516a> <516a> 10537 <516b> <516b> 982 <516c> <516c> 1796 <516d> <516d> 2626 <516e> <516e> 4854 <516f> <516f> 10538 <5170> <5170> 2471 <5171> <5171> 1803 <5172> <5172> 10539 <5173> <5173> 1841 <5174> <5174> 3990 <5175> <5175> 1121 <5176> <5176> 3075 <5177> <5177> 2318 <5178> <5178> 1477 <5179> <5179> 4645 <517a> <517a> 10540 <517b> <517b> 4129 <517c> <517c> 2137 <517d> <517d> 3445 <517e> <517f> 10541 <5180> <5180> 2096 <5181> <5181> 4858 <5182> <5182> 4765 <5183> <5184> 10543 <5185> <5185> 2877 <5186> <5187> 10545 <5188> <5188> 1743 <5189> <5189> 3224 <518a> <518b> 10547 <518c> <518c> 1192 <518d> <518d> 4380 <518e> <5191> 10549 <5192> <5192> 2741 <5193> <5194> 10553 <5195> <5195> 2790 <5196> <5196> 4884 <5197> <5197> 3258 <5198> <5198> 10555 <5199> <5199> 3967 <519a> <519a> 10556 <519b> <519b> 2347 <519c> <519c> 2922 <519d> <519f> 10557 <51a0> <51a0> 1843 <51a1> <51a1> 10560 <51a2> <51a2> 4885 <51a3> <51a3> 10561 <51a4> <51a4> 4332 <51a5> <51a5> 4886 <51a6> <51aa> 10562 <51ab> <51ab> 4879 <51ac> <51ac> 1515 <51ad> <51ae> 10567 <51af> <51af> 1672 <51b0> <51b0> 1122 <51b1> <51b1> 4880 <51b2> <51b2> 1290 <51b3> <51b3> 2341 <51b4> <51b4> 10569 <51b5> <51b5> 2435 <51b6> <51b6> 4152 <51b7> <51b7> 2511 <51b8> <51ba> 10570 <51bb> <51bb> 1522 <51bc> <51bc> 4882 <51bd> <51bd> 4881 <51be> <51bf> 10573 <51c0> <51c0> 2282 endcidrange 100 begincidrange <51c1> <51c3> 10575 <51c4> <51c4> 3071 <51c5> <51c5> 10578 <51c6> <51c6> 4633 <51c7> <51c7> 4883 <51c8> <51c8> 10579 <51c9> <51c9> 2562 <51ca> <51ca> 10580 <51cb> <51cb> 1491 <51cc> <51cc> 2609 <51cd> <51cd> 7887 <51ce> <51ce> 10581 <51cf> <51cf> 2152 <51d0> <51d0> 10582 <51d1> <51d1> 1368 <51d2> <51da> 10583 <51db> <51db> 2598 <51dc> <51dc> 10592 <51dd> <51dd> 2912 <51de> <51df> 10593 <51e0> <51e0> 2091 <51e1> <51e1> 1615 <51e2> <51e3> 10595 <51e4> <51e4> 1676 <51e5> <51ea> 10597 <51eb> <51eb> 4864 <51ec> <51ec> 10603 <51ed> <51ed> 3037 <51ee> <51ee> 10604 <51ef> <51ef> 2362 <51f0> <51f0> 2016 <51f1> <51f1> 8153 <51f2> <51f2> 10605 <51f3> <51f3> 1451 <51f4> <51f4> 10606 <51f5> <51f5> 5017 <51f6> <51f6> 4002 <51f7> <51f7> 10607 <51f8> <51f8> 3690 <51f9> <51f9> 967 <51fa> <51fa> 1307 <51fb> <51fb> 2060 <51fc> <51fc> 5018 <51fd> <51fd> 1894 <51fe> <51fe> 10608 <51ff> <51ff> 4391 <5200> <5200> 1431 <5201> <5201> 1492 <5202> <5202> 4748 <5203> <5203> 3243 <5204> <5205> 10609 <5206> <5206> 1651 <5207> <5207> 3149 <5208> <5208> 4749 <5209> <5209> 10611 <520a> <520a> 2364 <520b> <520c> 10612 <520d> <520d> 5003 <520e> <520e> 4750 <520f> <5210> 10614 <5211> <5211> 3991 <5212> <5212> 1987 <5213> <5215> 10616 <5216> <5216> 6510 <5217> <5217> 2585 <5218> <5218> 2622 <5219> <5219> 4405 <521a> <521a> 1744 <521b> <521b> 1335 <521c> <521c> 10619 <521d> <521d> 1306 <521e> <521f> 10620 <5220> <5220> 3319 <5221> <5223> 10622 <5224> <5224> 2961 <5225> <5227> 10625 <5228> <5228> 2970 <5229> <5229> 2534 <522a> <522a> 10628 <522b> <522b> 1113 <522c> <522c> 10629 <522d> <522d> 4751 <522e> <522e> 1831 <522f> <522f> 10630 <5230> <5230> 1438 <5231> <5232> 10631 <5233> <5233> 4752 <5234> <5235> 10633 <5236> <5236> 4549 <5237> <5237> 3479 <5238> <5238> 3210 <5239> <5239> 3307 <523a> <523a> 1359 <523b> <523b> 2393 <523c> <523c> 10635 <523d> <523d> 1869 <523e> <523e> 10636 <523f> <5240> 4753 <5241> <5241> 1574 <5242> <5242> 2100 endcidrange 100 begincidrange <5243> <5243> 3645 <5244> <5244> 8904 <5245> <5246> 10637 <5247> <5247> 8803 <5248> <5249> 10639 <524a> <524a> 3940 <524b> <524b> 9859 <524c> <524c> 4755 <524d> <524d> 3117 <524e> <524f> 10641 <5250> <5250> 1833 <5251> <5251> 2164 <5252> <5253> 10643 <5254> <5254> 3633 <5255> <5255> 10645 <5256> <5256> 3049 <5257> <525a> 10646 <525b> <525b> 7959 <525c> <525c> 4758 <525d> <525d> 10650 <525e> <525e> 4756 <525f> <5260> 10651 <5261> <5261> 4757 <5262> <5264> 10653 <5265> <5265> 1033 <5266> <5266> 10656 <5267> <5267> 2326 <5268> <5268> 10657 <5269> <5269> 3386 <526a> <526a> 2151 <526b> <526d> 10658 <526e> <526e> 7979 <526f> <526f> 1708 <5270> <5271> 10661 <5272> <5272> 1769 <5273> <5273> 10663 <5274> <5274> 8906 <5275> <5275> 7833 <5276> <527c> 10664 <527d> <527d> 4760 <527e> <527e> 10671 <527f> <527f> 2204 <5280> <5280> 10672 <5281> <5281> 4762 <5282> <5282> 4761 <5283> <5283> 8015 <5284> <5286> 10673 <5287> <5287> 8143 <5288> <5288> 3005 <5289> <5289> 8246 <528a> <528a> 7994 <528b> <528b> 10676 <528c> <528c> 8905 <528d> <528d> 8089 <528e> <528f> 10677 <5290> <5290> 4763 <5291> <5291> 8053 <5292> <5292> 10679 <5293> <5293> 4764 <5294> <529a> 10680 <529b> <529b> 2543 <529c> <529c> 10687 <529d> <529d> 3211 <529e> <529e> 1015 <529f> <529f> 1791 <52a0> <52a0> 2118 <52a1> <52a1> 3840 <52a2> <52a2> 5005 <52a3> <52a3> 2588 <52a4> <52a7> 10688 <52a8> <52a8> 1518 <52a9> <52a9> 4601 <52aa> <52aa> 2925 <52ab> <52ab> 2218 <52ac> <52ad> 5006 <52ae> <52b0> 10692 <52b1> <52b1> 2531 <52b2> <52b2> 2257 <52b3> <52b3> 2488 <52b4> <52bd> 10695 <52be> <52be> 5008 <52bf> <52bf> 3421 <52c0> <52c0> 10705 <52c1> <52c1> 8126 <52c2> <52c2> 10706 <52c3> <52c3> 1137 <52c4> <52c6> 10707 <52c7> <52c7> 4263 <52c8> <52c8> 10710 <52c9> <52c9> 2792 <52ca> <52ca> 10711 <52cb> <52cb> 4052 <52cc> <52cf> 10712 <52d0> <52d0> 5010 <52d1> <52d1> 10716 <52d2> <52d2> 2496 <52d3> <52d4> 10717 <52d5> <52d5> 7885 <52d6> <52d6> 5011 <52d7> <52d7> 10719 endcidrange 100 begincidrange <52d8> <52d8> 2366 <52d9> <52d9> 8617 <52da> <52da> 10720 <52db> <52db> 8678 <52dc> <52dc> 10721 <52dd> <52dd> 8487 <52de> <52de> 8195 <52df> <52df> 2847 <52e0> <52e1> 10722 <52e2> <52e2> 8498 <52e3> <52e3> 10724 <52e4> <52e4> 3159 <52e5> <52ef> 10725 <52f0> <52f0> 5012 <52f1> <52f1> 8995 <52f2> <52f4> 10736 <52f5> <52f5> 8209 <52f6> <52f7> 10739 <52f8> <52f8> 8437 <52f9> <52f9> 4860 <52fa> <52fa> 3344 <52fb> <52fd> 10741 <52fe> <52fe> 1805 <52ff> <52ff> 3839 <5300> <5300> 4363 <5301> <5304> 10744 <5305> <5305> 1031 <5306> <5306> 1365 <5307> <5307> 10748 <5308> <5308> 4004 <5309> <530c> 10749 <530d> <530d> 4861 <530e> <530e> 10753 <530f> <530f> 5301 <5310> <5310> 4863 <5311> <5314> 10754 <5315> <5315> 4710 <5316> <5316> 1988 <5317> <5317> 1050 <5318> <5318> 10758 <5319> <5319> 1276 <531a> <531a> 4740 <531b> <531c> 10759 <531d> <531d> 4372 <531e> <531f> 10761 <5320> <5320> 2180 <5321> <5321> 2428 <5322> <5322> 10763 <5323> <5323> 3880 <5324> <5325> 10764 <5326> <5326> 4742 <5327> <5329> 10766 <532a> <532a> 1640 <532b> <532c> 10769 <532d> <532d> 8901 <532e> <532e> 4743 <532f> <532f> 8030 <5330> <5330> 10771 <5331> <5331> 8902 <5332> <5338> 10772 <5339> <5339> 3012 <533a> <533a> 3189 <533b> <533b> 4164 <533c> <533d> 10779 <533e> <533e> 4744 <533f> <533f> 2887 <5340> <5340> 8431 <5341> <5341> 3397 <5342> <5342> 10781 <5343> <5343> 3108 <5344> <5344> 10782 <5345> <5345> 4700 <5346> <5346> 10783 <5347> <5347> 3382 <5348> <5348> 3830 <5349> <5349> 2033 <534a> <534a> 1014 <534b> <534d> 10784 <534e> <534e> 1983 <534f> <534f> 3960 <5350> <5350> 10787 <5351> <5351> 1049 <5352> <5352> 4673 <5353> <5353> 4636 <5354> <5354> 8656 <5355> <5355> 1414 <5356> <5356> 2715 <5357> <5357> 2866 <5358> <5359> 10788 <535a> <535a> 1136 <535b> <535b> 10790 <535c> <535c> 1150 <535d> <535d> 10791 <535e> <535e> 1102 <535f> <535f> 5370 <5360> <5360> 4445 <5361> <5361> 2357 <5362> <5362> 2643 <5363> <5363> 4747 <5364> <5364> 2648 endcidrange 100 begincidrange <5365> <5365> 10792 <5366> <5366> 4746 <5367> <5367> 3811 <5368> <5368> 10793 <5369> <5369> 4946 <536a> <536a> 10794 <536b> <536b> 3791 <536c> <536d> 10795 <536e> <536e> 4714 <536f> <536f> 2739 <5370> <5370> 4230 <5371> <5371> 3762 <5372> <5372> 10797 <5373> <5373> 2087 <5374> <5374> 3215 <5375> <5375> 2680 <5376> <5376> 10798 <5377> <5377> 2332 <5378> <5378> 3969 <5379> <5379> 10799 <537a> <537a> 4947 <537b> <537e> 10800 <537f> <537f> 3169 <5380> <5381> 10804 <5382> <5382> 1228 <5383> <5383> 10806 <5384> <5384> 1585 <5385> <5385> 3663 <5386> <5386> 2533 <5387> <5388> 10807 <5389> <5389> 2530 <538a> <538a> 10809 <538b> <538b> 4066 <538c> <538c> 4106 <538d> <538d> 4733 <538e> <5394> 10810 <5395> <5395> 1189 <5396> <5397> 10817 <5398> <5398> 2512 <5399> <5399> 8897 <539a> <539a> 1960 <539b> <539c> 10819 <539d> <539d> 4734 <539e> <539e> 10821 <539f> <539f> 4336 <53a0> <53a0> 7780 <53a1> <53a1> 10822 <53a2> <53a2> 3918 <53a3> <53a3> 4735 <53a4> <53a4> 10823 <53a5> <53a5> 4736 <53a6> <53a6> 3888 <53a7> <53a7> 10824 <53a8> <53a8> 1309 <53a9> <53a9> 2294 <53aa> <53ac> 10825 <53ad> <53ad> 8697 <53ae> <53ae> 4737 <53af> <53b1> 10828 <53b2> <53b2> 8208 <53b3> <53b3> 10831 <53b4> <53b4> 8898 <53b5> <53b5> 10832 <53b6> <53b6> 5020 <53b7> <53ba> 10833 <53bb> <53bb> 3200 <53bc> <53be> 10837 <53bf> <53bf> 3909 <53c0> <53c0> 10840 <53c1> <53c1> 3289 <53c2> <53c2> 1173 <53c3> <53c3> 7770 <53c4> <53c7> 10841 <53c8> <53c8> 4283 <53c9> <53c9> 1197 <53ca> <53ca> 2083 <53cb> <53cb> 4278 <53cc> <53cc> 3488 <53cd> <53cd> 1617 <53ce> <53d0> 10845 <53d1> <53d1> 1599 <53d2> <53d3> 10848 <53d4> <53d4> 3452 <53d5> <53d5> 10850 <53d6> <53d6> 3196 <53d7> <53d7> 3443 <53d8> <53d8> 1101 <53d9> <53d9> 4027 <53da> <53da> 10851 <53db> <53db> 2962 <53dc> <53de> 10852 <53df> <53df> 5013 <53e0> <53e0> 1503 <53e1> <53e1> 10855 <53e2> <53e2> 7842 <53e3> <53e3> 2407 <53e4> <53e4> 1822 <53e5> <53e5> 2323 <53e6> <53e6> 2614 <53e7> <53e7> 10856 endcidrange 100 begincidrange <53e8> <53e8> 5374 <53e9> <53e9> 5373 <53ea> <53ea> 4538 <53eb> <53eb> 2209 <53ec> <53ec> 4474 <53ed> <53ed> 979 <53ee> <53ee> 1506 <53ef> <53ef> 2390 <53f0> <53f0> 3579 <53f1> <53f1> 5371 <53f2> <53f2> 3406 <53f3> <53f3> 4279 <53f4> <53f4> 10857 <53f5> <53f5> 4741 <53f6> <53f6> 4157 <53f7> <53f7> 1916 <53f8> <53f8> 3507 <53f9> <53f9> 3601 <53fa> <53fa> 10858 <53fb> <53fb> 5375 <53fc> <53fc> 1489 <53fd> <53fd> 5372 <53fe> <53ff> 10859 <5400> <5400> 10861 <5401> <5401> 4314 <5402> <5402> 10862 <5403> <5403> 1273 <5404> <5404> 1778 <5405> <5405> 10863 <5406> <5406> 5378 <5407> <5407> 10864 <5408> <5408> 1926 <5409> <5409> 2077 <540a> <540a> 1494 <540b> <540b> 10865 <540c> <540c> 3677 <540d> <540d> 2816 <540e> <540e> 1962 <540f> <540f> 2527 <5410> <5410> 3699 <5411> <5411> 3935 <5412> <5412> 5376 <5413> <5413> 3890 <5414> <5414> 10866 <5415> <5415> 2663 <5416> <5416> 5377 <5417> <5417> 2711 <5418> <541a> 10867 <541b> <541b> 2348 <541c> <541c> 10870 <541d> <541d> 2600 <541e> <541e> 3709 <541f> <541f> 4222 <5420> <5420> 1642 <5421> <5421> 5385 <5422> <5422> 10871 <5423> <5423> 5388 <5424> <5425> 10872 <5426> <5426> 1678 <5427> <5427> 980 <5428> <5428> 1557 <5429> <5429> 1649 <542a> <542a> 10874 <542b> <542b> 1891 <542c> <542c> 3664 <542d> <542d> 2401 <542e> <542e> 3494 <542f> <542f> 3091 <5430> <5430> 10875 <5431> <5431> 4519 <5432> <5432> 5389 <5433> <5433> 10876 <5434> <5434> 3825 <5435> <5435> 1240 <5436> <5437> 10877 <5438> <5438> 3851 <5439> <5439> 1336 <543a> <543a> 10879 <543b> <543b> 3798 <543c> <543c> 1959 <543d> <543d> 10880 <543e> <543e> 3824 <543f> <543f> 10881 <5440> <5440> 4070 <5441> <5442> 10882 <5443> <5443> 5384 <5444> <5445> 10884 <5446> <5446> 1399 <5447> <5447> 10886 <5448> <5448> 1263 <5449> <5449> 10887 <544a> <544a> 1761 <544b> <544b> 5379 <544c> <544f> 10888 <5450> <5450> 2856 <5451> <5451> 10892 <5452> <5454> 5380 <5455> <5455> 2940 <5456> <5456> 5383 <5457> <5457> 5386 endcidrange 100 begincidrange <5458> <5458> 4340 <5459> <5459> 5387 <545a> <545a> 10893 <545b> <545b> 3127 <545c> <545c> 3815 <545d> <5461> 10894 <5462> <5462> 2875 <5463> <5463> 10899 <5464> <5464> 5394 <5465> <5465> 10900 <5466> <5466> 5399 <5467> <5467> 10901 <5468> <5468> 4571 <5469> <5470> 10902 <5471> <5471> 5393 <5472> <5472> 5410 <5473> <5473> 3781 <5474> <5474> 10910 <5475> <5475> 1918 <5476> <5476> 5398 <5477> <5477> 5392 <5478> <5478> 2975 <5479> <547a> 10911 <547b> <547b> 3364 <547c> <547c> 1963 <547d> <547d> 2817 <547e> <547f> 10913 <5480> <5480> 2310 <5481> <5481> 10915 <5482> <5482> 5390 <5483> <5483> 10916 <5484> <5484> 5397 <5485> <5485> 10917 <5486> <5486> 2969 <5487> <548a> 10918 <548b> <548b> 4423 <548c> <548c> 1924 <548d> <548d> 10922 <548e> <548e> 2299 <548f> <548f> 4258 <5490> <5490> 1723 <5491> <5491> 10923 <5492> <5492> 4579 <5493> <5493> 10924 <5494> <5494> 5391 <5495> <5495> 1815 <5496> <5496> 2356 <5497> <5498> 10925 <5499> <5499> 2629 <549a> <549b> 5395 <549c> <549c> 10927 <549d> <549d> 5400 <549e> <54a2> 10928 <54a3> <54a3> 5411 <54a4> <54a4> 5421 <54a5> <54a5> 10933 <54a6> <54a6> 5407 <54a7> <54a7> 5406 <54a8> <54a8> 4646 <54a9> <54aa> 5419 <54ab> <54ab> 5991 <54ac> <54ac> 4142 <54ad> <54ad> 5402 <54ae> <54ae> 10934 <54af> <54af> 2358 <54b0> <54b0> 10935 <54b1> <54b1> 4382 <54b2> <54b2> 10936 <54b3> <54b3> 2389 <54b4> <54b4> 5404 <54b5> <54b7> 10937 <54b8> <54b8> 3897 <54b9> <54ba> 10940 <54bb> <54bb> 5413 <54bc> <54bc> 9069 <54bd> <54bd> 4083 <54be> <54be> 10942 <54bf> <54bf> 5414 <54c0> <54c0> 946 <54c1> <54c1> 3030 <54c2> <54c2> 5403 <54c3> <54c3> 10943 <54c4> <54c4> 1948 <54c5> <54c5> 10944 <54c6> <54c6> 1566 <54c7> <54c7> 3724 <54c8> <54c8> 1879 <54c9> <54c9> 4376 <54ca> <54cb> 10945 <54cc> <54cc> 5415 <54cd> <54cd> 3929 <54ce> <54ce> 944 <54cf> <54cf> 5423 <54d0> <54d0> 5401 <54d1> <54d1> 4079 <54d2> <54d2> 5405 <54d3> <54d4> 5408 <54d5> <54d5> 5412 <54d6> <54d6> 10947 <54d7> <54d7> 1982 endcidrange 100 begincidrange <54d8> <54d8> 10948 <54d9> <54da> 5416 <54db> <54db> 10949 <54dc> <54dc> 5418 <54dd> <54dd> 5422 <54de> <54de> 5424 <54df> <54df> 4249 <54e0> <54e0> 10950 <54e1> <54e1> 8775 <54e2> <54e4> 10951 <54e5> <54e5> 1762 <54e6> <54e6> 2935 <54e7> <54e7> 5426 <54e8> <54e8> 3347 <54e9> <54e9> 2545 <54ea> <54ea> 2855 <54eb> <54ec> 10954 <54ed> <54ed> 2411 <54ee> <54ee> 3941 <54ef> <54f1> 10956 <54f2> <54f2> 4477 <54f3> <54f3> 5430 <54f4> <54f9> 10959 <54fa> <54fa> 1151 <54fb> <54fb> 10965 <54fc> <54fc> 1942 <54fd> <54fd> 5428 <54fe> <54fe> 10966 <54ff> <54ff> 5009 <5500> <5500> 10967 <5501> <5501> 4109 <5502> <5503> 10968 <5504> <5504> 9068 <5505> <5505> 10970 <5506> <5506> 3561 <5507> <5507> 1344 <5508> <5508> 10971 <5509> <5509> 945 <550a> <550e> 10972 <550f> <550f> 5433 <5510> <5510> 3609 <5511> <5511> 5434 <5512> <5513> 10977 <5514> <5514> 5429 <5515> <551a> 10979 <551b> <551b> 5425 <551c> <551f> 10985 <5520> <5520> 5427 <5521> <5521> 10989 <5522> <5523> 5431 <5524> <5524> 2002 <5525> <5526> 10990 <5527> <5527> 5435 <5528> <5529> 10992 <552a> <552a> 5436 <552b> <552b> 10994 <552c> <552c> 1976 <552d> <552d> 10995 <552e> <552e> 3442 <552f> <552f> 3767 <5530> <5530> 5453 <5531> <5531> 1231 <5532> <5532> 10996 <5533> <5533> 5452 <5534> <5536> 10997 <5537> <5537> 5447 <5538> <553b> 11000 <553c> <553c> 5446 <553d> <553d> 11004 <553e> <553e> 3722 <553f> <553f> 5444 <5540> <5540> 11005 <5541> <5541> 5442 <5542> <5542> 11006 <5543> <5543> 2397 <5544> <5544> 4641 <5545> <5545> 11007 <5546> <5546> 3333 <5547> <5548> 11008 <5549> <5549> 5440 <554a> <554a> 940 <554b> <554e> 11010 <554f> <554f> 8604 <5550> <5550> 5445 <5551> <5552> 11014 <5553> <5553> 8393 <5554> <5554> 11016 <5555> <5555> 5443 <5556> <5556> 5448 <5557> <555b> 11017 <555c> <555c> 5454 <555d> <555d> 11022 <555e> <555e> 8688 <555f> <5560> 11023 <5561> <5561> 1637 <5562> <5563> 11025 <5564> <5564> 3008 <5565> <5565> 3311 <5566> <5566> 2461 <5567> <5567> 5437 endcidrange 100 begincidrange <5568> <5569> 11027 <556a> <556a> 2943 <556b> <556b> 11029 <556c> <556c> 4730 <556d> <556d> 5441 <556e> <556e> 2905 <556f> <5574> 11030 <5575> <5577> 5449 <5578> <5578> 3952 <5579> <557a> 11036 <557b> <557b> 5466 <557c> <557c> 3639 <557d> <557d> 11038 <557e> <557e> 5463 <557f> <557f> 11039 <5580> <5580> 2355 <5581> <5581> 5461 <5582> <5582> 3784 <5583> <5583> 5457 <5584> <5584> 3327 <5585> <5586> 11040 <5587> <5587> 2457 <5588> <5588> 5460 <5589> <5589> 1956 <558a> <558a> 1895 <558b> <558b> 5455 <558c> <558e> 11042 <558f> <558f> 5438 <5590> <5590> 11045 <5591> <5591> 5465 <5592> <5593> 11046 <5594> <5594> 5470 <5595> <5597> 11048 <5598> <5598> 1328 <5599> <5599> 5471 <559a> <559b> 11051 <559c> <559c> 3871 <559d> <559d> 1919 <559e> <559e> 11053 <559f> <559f> 5462 <55a0> <55a6> 11054 <55a7> <55a7> 4037 <55a8> <55a9> 11061 <55aa> <55aa> 8459 <55ab> <55ab> 11063 <55ac> <55ac> 8414 <55ad> <55ad> 11064 <55ae> <55ae> 7850 <55af> <55b0> 11065 <55b1> <55b1> 5458 <55b2> <55b2> 8748 <55b3> <55b3> 4414 <55b4> <55b4> 11067 <55b5> <55b5> 5439 <55b6> <55b6> 11068 <55b7> <55b7> 2984 <55b8> <55b8> 11069 <55b9> <55b9> 5459 <55ba> <55ba> 11070 <55bb> <55bb> 4316 <55bc> <55bc> 11071 <55bd> <55be> 5468 <55bf> <55c3> 11072 <55c4> <55c4> 5482 <55c5> <55c5> 4012 <55c6> <55c6> 8408 <55c7> <55c7> 8896 <55c8> <55c8> 11077 <55c9> <55c9> 5474 <55ca> <55cb> 11078 <55cc> <55cd> 5487 <55ce> <55ce> 8303 <55cf> <55d0> 11080 <55d1> <55d1> 5476 <55d2> <55d2> 5456 <55d3> <55d3> 3293 <55d4> <55d4> 5479 <55d5> <55d5> 11082 <55d6> <55d6> 5464 <55d7> <55d9> 11083 <55da> <55da> 8609 <55db> <55db> 11086 <55dc> <55dc> 3423 <55dd> <55dd> 5481 <55de> <55de> 11087 <55df> <55df> 5467 <55e0> <55e0> 11088 <55e1> <55e1> 3802 <55e2> <55e2> 11089 <55e3> <55e3> 3512 <55e4> <55e4> 5491 <55e5> <55e5> 5484 <55e6> <55e6> 5480 <55e7> <55e7> 11090 <55e8> <55e8> 5489 <55e9> <55e9> 9081 <55ea> <55ea> 5472 <55eb> <55ec> 5477 <55ed> <55ee> 11091 <55ef> <55ef> 5483 endcidrange 100 begincidrange <55f0> <55f1> 11093 <55f2> <55f3> 5485 <55f4> <55f4> 11095 <55f5> <55f5> 5490 <55f6> <55f6> 9074 <55f7> <55f7> 5473 <55f8> <55fc> 11096 <55fd> <55fd> 3529 <55fe> <55fe> 5499 <55ff> <55ff> 11101 <5600> <5600> 5500 <5601> <5601> 5496 <5602> <5605> 11102 <5606> <5606> 8554 <5607> <5607> 11106 <5608> <5608> 5494 <5609> <5609> 2113 <560a> <560b> 11107 <560c> <560c> 5495 <560d> <560d> 9084 <560e> <560e> 1725 <560f> <560f> 4731 <5610> <5613> 11109 <5614> <5614> 8368 <5615> <5615> 11113 <5616> <5616> 9082 <5617> <5617> 7796 <5618> <5618> 4021 <5619> <561a> 11114 <561b> <561b> 2710 <561c> <561c> 9079 <561d> <561d> 11116 <561e> <561e> 5493 <561f> <561f> 5475 <5620> <5622> 11117 <5623> <5623> 5498 <5624> <5624> 5497 <5625> <5626> 11120 <5627> <5627> 5501 <5628> <5628> 11122 <5629> <5629> 8012 <562a> <562b> 11123 <562c> <562c> 5506 <562d> <562d> 5502 <562e> <562e> 9080 <562f> <562f> 8655 <5630> <5630> 9064 <5631> <5631> 4597 <5632> <5632> 1237 <5633> <5633> 11125 <5634> <5634> 4681 <5635> <5635> 9073 <5636> <5636> 3504 <5637> <5637> 11126 <5638> <5638> 9065 <5639> <5639> 5504 <563a> <563a> 11127 <563b> <563b> 3850 <563c> <563e> 11128 <563f> <563f> 1936 <5640> <5640> 11131 <5641> <5641> 9844 <5642> <564b> 11132 <564c> <564c> 5511 <564d> <564d> 5507 <564e> <564e> 4148 <564f> <5653> 11142 <5654> <5654> 5512 <5655> <5656> 11147 <5657> <5657> 5505 <5658> <5658> 5503 <5659> <5659> 5509 <565a> <565b> 11149 <565c> <565c> 5510 <565d> <565d> 9071 <565e> <565f> 11151 <5660> <5660> 9072 <5661> <5661> 11153 <5662> <5662> 5508 <5663> <5663> 11154 <5664> <5664> 5514 <5665> <5665> 9078 <5666> <5666> 9075 <5667> <5667> 11155 <5668> <5668> 3094 <5669> <5669> 4706 <566a> <566a> 4398 <566b> <566b> 5516 <566c> <566c> 3424 <566d> <566e> 11156 <566f> <566f> 9087 <5670> <5670> 11158 <5671> <5671> 5515 <5672> <5672> 9076 <5673> <5673> 11159 <5674> <5674> 8373 <5675> <5675> 11160 <5676> <5676> 1724 <5677> <5677> 11161 <5678> <5678> 7899 endcidrange 100 begincidrange <5679> <5679> 9842 <567a> <567a> 11162 <567b> <567c> 5517 <567d> <567f> 11163 <5680> <5680> 9070 <5681> <5684> 11166 <5685> <5685> 5519 <5686> <5686> 5513 <5687> <5687> 8631 <5688> <568b> 11170 <568c> <568c> 9077 <568d> <568d> 11174 <568e> <568e> 1910 <568f> <568f> 3642 <5690> <5692> 11175 <5693> <5693> 5520 <5694> <5694> 11178 <5695> <5695> 9090 <5696> <5698> 11179 <5699> <5699> 8350 <569a> <56a2> 11182 <56a3> <56a3> 3942 <56a4> <56a5> 11191 <56a6> <56a6> 9067 <56a7> <56a7> 11193 <56a8> <56a8> 8249 <56a9> <56ad> 11194 <56ae> <56ae> 9887 <56af> <56af> 5521 <56b0> <56b2> 11199 <56b3> <56b3> 9085 <56b4> <56b4> 8693 <56b5> <56b5> 11202 <56b6> <56b6> 9089 <56b7> <56b7> 3229 <56b8> <56bb> 11203 <56bc> <56bc> 2193 <56bd> <56bf> 11207 <56c0> <56c0> 9083 <56c1> <56c1> 9086 <56c2> <56c2> 8652 <56c3> <56c4> 11210 <56c5> <56c5> 8923 <56c6> <56c7> 11212 <56c8> <56c8> 9066 <56c9> <56c9> 9865 <56ca> <56ca> 2869 <56cb> <56cb> 11214 <56cc> <56cc> 9879 <56cd> <56d0> 11215 <56d1> <56d1> 8865 <56d2> <56d3> 11219 <56d4> <56d4> 5522 <56d5> <56d6> 11221 <56d7> <56d7> 5523 <56d8> <56d9> 11223 <56da> <56da> 3185 <56db> <56db> 3513 <56dc> <56dc> 11225 <56dd> <56dd> 5524 <56de> <56de> 2029 <56df> <56df> 4716 <56e0> <56e0> 4217 <56e1> <56e1> 5525 <56e2> <56e2> 3702 <56e3> <56e3> 11226 <56e4> <56e4> 1561 <56e5> <56ea> 11227 <56eb> <56eb> 5527 <56ec> <56ec> 11233 <56ed> <56ed> 4339 <56ee> <56ef> 11234 <56f0> <56f0> 2450 <56f1> <56f1> 1364 <56f2> <56f3> 11236 <56f4> <56f4> 3766 <56f5> <56f5> 5526 <56f6> <56f8> 11238 <56f9> <56f9> 5528 <56fa> <56fa> 1829 <56fb> <56fc> 11241 <56fd> <56fd> 1875 <56fe> <56fe> 3693 <56ff> <56ff> 5529 <5700> <5702> 11243 <5703> <5703> 3059 <5704> <5704> 5530 <5705> <5705> 11246 <5706> <5706> 4341 <5707> <5707> 9091 <5708> <5708> 3201 <5709> <5709> 5532 <570a> <570a> 5531 <570b> <570b> 7997 <570c> <570c> 11247 <570d> <570d> 8591 <570e> <5711> 11248 <5712> <5712> 8774 <5713> <5713> 8776 <5714> <5715> 11252 endcidrange 100 begincidrange <5716> <5716> 8574 <5717> <5717> 11254 <5718> <5718> 8576 <5719> <571b> 11255 <571c> <571c> 5533 <571d> <571e> 11258 <571f> <571f> 3698 <5720> <5722> 11260 <5723> <5723> 3388 <5724> <5727> 11263 <5728> <5728> 4381 <5729> <5729> 5031 <572a> <572a> 5033 <572b> <572b> 11267 <572c> <572c> 5032 <572d> <572d> 1856 <572e> <572f> 5036 <5730> <5730> 1465 <5731> <5732> 11268 <5733> <5733> 5034 <5734> <5738> 11270 <5739> <5739> 5035 <573a> <573a> 1222 <573b> <573b> 5039 <573c> <573d> 11275 <573e> <573e> 2061 <573f> <573f> 11277 <5740> <5740> 4534 <5741> <5741> 11278 <5742> <5742> 5040 <5743> <5746> 11279 <5747> <5747> 2344 <5748> <5749> 11283 <574a> <574a> 1624 <574b> <574b> 11285 <574c> <574c> 5024 <574d> <574d> 3585 <574e> <574e> 2367 <574f> <574f> 1994 <5750> <5750> 4693 <5751> <5751> 2400 <5752> <5756> 11286 <5757> <5757> 2422 <5758> <5759> 11291 <575a> <575a> 2132 <575b> <575b> 3590 <575c> <575c> 5038 <575d> <575d> 990 <575e> <575e> 3834 <575f> <575f> 1653 <5760> <5760> 4630 <5761> <5761> 3041 <5762> <5763> 11293 <5764> <5764> 2447 <5765> <5765> 11295 <5766> <5766> 3596 <5767> <5767> 11296 <5768> <5768> 5047 <5769> <5769> 5041 <576a> <576a> 3033 <576b> <576b> 5043 <576c> <576c> 11297 <576d> <576d> 5048 <576e> <576e> 11298 <576f> <576f> 3000 <5770> <5772> 11299 <5773> <5773> 5050 <5774> <5775> 11302 <5776> <5776> 5049 <5777> <5777> 2381 <5778> <577a> 11304 <577b> <577b> 5046 <577c> <577c> 5045 <577d> <5781> 11307 <5782> <5782> 1340 <5783> <5783> 2455 <5784> <5784> 2633 <5785> <5785> 5042 <5786> <5786> 5044 <5787> <578a> 11312 <578b> <578b> 3992 <578c> <578c> 5053 <578d> <5791> 11316 <5792> <5792> 2504 <5793> <5793> 5058 <5794> <579a> 11321 <579b> <579b> 1569 <579c> <579f> 11328 <57a0> <57a0> 5059 <57a1> <57a1> 5026 <57a2> <57a2> 1809 <57a3> <57a3> 4334 <57a4> <57a4> 5052 <57a5> <57a5> 11332 <57a6> <57a6> 2398 <57a7> <57a7> 5056 <57a8> <57a8> 11333 <57a9> <57a9> 5025 <57aa> <57aa> 11334 <57ab> <57ab> 1479 endcidrange 100 begincidrange <57ac> <57ac> 11335 <57ad> <57ad> 5051 <57ae> <57ae> 2418 <57af> <57b1> 11336 <57b2> <57b2> 5054 <57b3> <57b3> 11339 <57b4> <57b4> 5057 <57b5> <57b7> 11340 <57b8> <57b8> 5065 <57b9> <57c1> 11343 <57c2> <57c2> 1786 <57c3> <57c3> 942 <57c4> <57ca> 11352 <57cb> <57cb> 2712 <57cc> <57cd> 11359 <57ce> <57ce> 1260 <57cf> <57cf> 5055 <57d0> <57d1> 11361 <57d2> <57d2> 5064 <57d3> <57d3> 11363 <57d4> <57d4> 3057 <57d5> <57d5> 5060 <57d6> <57d7> 11364 <57d8> <57d8> 5061 <57d9> <57d9> 5063 <57da> <57da> 5062 <57db> <57dc> 11366 <57dd> <57dd> 5070 <57de> <57de> 11368 <57df> <57df> 4311 <57e0> <57e0> 1153 <57e1> <57e1> 9002 <57e2> <57e3> 11369 <57e4> <57e4> 5069 <57e5> <57ec> 11371 <57ed> <57ed> 5074 <57ee> <57ee> 11379 <57ef> <57ef> 5067 <57f0> <57f3> 11380 <57f4> <57f4> 5066 <57f5> <57f6> 11384 <57f7> <57f7> 8843 <57f8> <57f8> 5068 <57f9> <57f9> 2977 <57fa> <57fa> 2062 <57fb> <57fc> 11386 <57fd> <57fd> 5073 <57fe> <57ff> 11388 <5800> <5800> 5075 <5801> <5801> 11390 <5802> <5802> 3606 <5803> <5804> 11391 <5805> <5805> 8069 <5806> <5806> 1552 <5807> <5807> 5196 <5808> <5809> 11393 <580a> <580a> 8997 <580b> <580b> 5071 <580c> <580c> 11395 <580d> <580d> 5072 <580e> <5810> 11396 <5811> <5811> 3122 <5812> <5814> 11399 <5815> <5815> 1576 <5816> <5816> 9004 <5817> <5818> 11402 <5819> <5819> 5077 <581a> <581c> 11404 <581d> <581d> 9006 <581e> <581e> 5076 <581f> <581f> 11407 <5820> <5820> 5079 <5821> <5821> 1037 <5822> <5823> 11408 <5824> <5824> 1453 <5825> <5829> 11410 <582a> <582a> 2365 <582b> <582e> 11415 <582f> <582f> 8709 <5830> <5830> 4104 <5831> <5831> 7736 <5832> <5833> 11419 <5834> <5834> 7795 <5835> <5835> 1537 <5836> <5843> 11421 <5844> <5844> 5078 <5845> <5849> 11435 <584a> <584a> 8163 <584b> <584b> 9017 <584c> <584c> 3567 <584d> <584d> 6563 <584e> <584e> 11440 <584f> <584f> 9003 <5850> <5850> 11441 <5851> <5851> 3537 <5852> <5852> 9005 <5853> <5853> 11442 <5854> <5854> 3571 <5855> <5856> 11443 <5857> <5857> 8575 endcidrange 100 begincidrange <5858> <5858> 3604 <5859> <585d> 11445 <585e> <585e> 3286 <585f> <5861> 11450 <5862> <5862> 8615 <5863> <5863> 11453 <5864> <5864> 9007 <5865> <5865> 5080 <5866> <586a> 11454 <586b> <586b> 3649 <586c> <586c> 5081 <586d> <5874> 11459 <5875> <5875> 7805 <5876> <5878> 11467 <5879> <5879> 8406 <587a> <587d> 11470 <587e> <587e> 5027 <587f> <587f> 11474 <5880> <5880> 5085 <5881> <5881> 5082 <5882> <5882> 11475 <5883> <5883> 2274 <5884> <5884> 11476 <5885> <5885> 3474 <5886> <5888> 11477 <5889> <5889> 5083 <588a> <588a> 7874 <588b> <5891> 11480 <5892> <5892> 3331 <5893> <5893> 2844 <5894> <5898> 11487 <5899> <5899> 3130 <589a> <589a> 5084 <589b> <589b> 11492 <589c> <589c> 8882 <589d> <589d> 11493 <589e> <589e> 4409 <589f> <589f> 4017 <58a0> <58a7> 11494 <58a8> <58a8> 2830 <58a9> <58a9> 1556 <58aa> <58ad> 11502 <58ae> <58ae> 7903 <58af> <58b2> 11506 <58b3> <58b3> 7929 <58b4> <58ba> 11510 <58bb> <58bb> 8409 <58bc> <58bc> 5028 <58bd> <58bd> 11517 <58be> <58be> 8157 <58bf> <58c0> 11518 <58c1> <58c1> 1091 <58c2> <58c4> 11520 <58c5> <58c5> 5029 <58c6> <58c6> 11523 <58c7> <58c7> 8551 <58c8> <58d0> 11524 <58d1> <58d1> 5030 <58d2> <58d2> 11533 <58d3> <58d3> 8685 <58d4> <58d4> 11534 <58d5> <58d5> 1909 <58d6> <58d7> 11535 <58d8> <58d8> 8199 <58d9> <58d9> 8998 <58da> <58da> 9001 <58db> <58dd> 11537 <58de> <58de> 8018 <58df> <58df> 8251 <58e0> <58e0> 9000 <58e1> <58e1> 11540 <58e2> <58e2> 8999 <58e3> <58e3> 11541 <58e4> <58e4> 3227 <58e5> <58e8> 11542 <58e9> <58e9> 7723 <58ea> <58ea> 11546 <58eb> <58eb> 3414 <58ec> <58ec> 3236 <58ed> <58ed> 11547 <58ee> <58ee> 4624 <58ef> <58ef> 8878 <58f0> <58f0> 3378 <58f1> <58f2> 11548 <58f3> <58f3> 2388 <58f4> <58f5> 11550 <58f6> <58f6> 1967 <58f7> <58f8> 11552 <58f9> <58f9> 4163 <58fa> <58fa> 8009 <58fb> <58fc> 11554 <58fd> <58fd> 8504 <58fe> <58ff> 11556 <5900> <5901> 11558 <5902> <5902> 5660 <5903> <5903> 11560 <5904> <5904> 1321 <5905> <5906> 11561 <5907> <5907> 1057 <5908> <590c> 11563 endcidrange 100 begincidrange <590d> <590d> 1711 <590e> <590e> 11568 <590f> <590f> 3889 <5910> <5913> 11569 <5914> <5914> 4859 <5915> <5915> 3859 <5916> <5916> 3731 <5917> <5918> 11573 <5919> <5919> 4865 <591a> <591a> 1567 <591b> <591b> 11575 <591c> <591c> 4160 <591d> <591e> 11576 <591f> <591f> 1812 <5920> <5921> 11578 <5922> <5922> 8321 <5923> <5923> 11580 <5924> <5924> 5659 <5925> <5925> 5657 <5926> <5926> 11581 <5927> <5927> 1398 <5928> <5928> 11582 <5929> <5929> 3647 <592a> <592a> 3582 <592b> <592b> 1679 <592c> <592c> 11583 <592d> <592d> 4712 <592e> <592e> 4116 <592f> <592f> 1906 <5930> <5930> 11584 <5931> <5931> 3390 <5932> <5933> 11585 <5934> <5934> 3688 <5935> <5936> 11587 <5937> <5937> 4171 <5938> <5938> 2417 <5939> <5939> 2115 <593a> <593a> 1568 <593b> <593b> 11589 <593c> <593c> 5295 <593d> <593d> 11590 <593e> <593e> 8060 <593f> <5940> 11591 <5941> <5941> 5296 <5942> <5942> 5004 <5943> <5943> 11593 <5944> <5944> 4098 <5945> <5946> 11594 <5947> <5947> 3077 <5948> <5948> 2865 <5949> <5949> 1675 <594a> <594a> 11596 <594b> <594b> 1657 <594c> <594d> 11597 <594e> <594e> 2441 <594f> <594f> 4669 <5950> <5950> 11599 <5951> <5951> 3092 <5952> <5953> 11600 <5954> <5954> 1061 <5955> <5955> 5298 <5956> <5956> 2178 <5957> <5957> 3626 <5958> <5958> 5300 <5959> <5959> 11602 <595a> <595a> 5299 <595b> <595f> 11603 <5960> <5960> 1485 <5961> <5961> 11608 <5962> <5962> 3350 <5963> <5964> 11609 <5965> <5965> 973 <5966> <5968> 11611 <5969> <5969> 9051 <596a> <596a> 7902 <596b> <596b> 11614 <596c> <596c> 8098 <596d> <596d> 11615 <596e> <596e> 7930 <596f> <5972> 11616 <5973> <5973> 2927 <5974> <5974> 2924 <5975> <5975> 11620 <5976> <5976> 2863 <5977> <5977> 11621 <5978> <5978> 2140 <5979> <5979> 3570 <597a> <597c> 11622 <597d> <597d> 1914 <597e> <5980> 11625 <5981> <5981> 6005 <5982> <5982> 3266 <5983> <5983> 6006 <5984> <5984> 3758 <5985> <5985> 11628 <5986> <5986> 4622 <5987> <5987> 1721 <5988> <5988> 2703 <5989> <5989> 11629 <598a> <598a> 3244 endcidrange 100 begincidrange <598b> <598c> 11630 <598d> <598d> 6007 <598e> <5991> 11632 <5992> <5992> 1545 <5993> <5993> 2110 <5994> <5995> 11636 <5996> <5996> 4134 <5997> <5997> 6011 <5998> <5998> 11638 <5999> <5999> 2803 <599a> <599c> 11639 <599d> <599d> 8877 <599e> <599e> 6014 <599f> <59a2> 11642 <59a3> <59a3> 6010 <59a4> <59a4> 6015 <59a5> <59a5> 3720 <59a6> <59a7> 11646 <59a8> <59a8> 1630 <59a9> <59aa> 6008 <59ab> <59ab> 6013 <59ac> <59ad> 11648 <59ae> <59ae> 2880 <59af> <59af> 6018 <59b0> <59b1> 11650 <59b2> <59b2> 6017 <59b3> <59b8> 11652 <59b9> <59b9> 2760 <59ba> <59ba> 11658 <59bb> <59bb> 3069 <59bc> <59bd> 11659 <59be> <59be> 6020 <59bf> <59c5> 11661 <59c6> <59c6> 2842 <59c7> <59c9> 11668 <59ca> <59ca> 6012 <59cb> <59cb> 3411 <59cc> <59cf> 11671 <59d0> <59d0> 2228 <59d1> <59d1> 1820 <59d2> <59d2> 6016 <59d3> <59d3> 4000 <59d4> <59d4> 3774 <59d5> <59d6> 11675 <59d7> <59d7> 6019 <59d8> <59d8> 6026 <59d9> <59d9> 11677 <59da> <59da> 4141 <59db> <59db> 11678 <59dc> <59dc> 2171 <59dd> <59dd> 6023 <59de> <59e2> 11679 <59e3> <59e3> 6025 <59e4> <59e4> 11684 <59e5> <59e5> 2492 <59e6> <59e7> 11685 <59e8> <59e8> 4179 <59e9> <59eb> 11687 <59ec> <59ec> 2074 <59ed> <59f8> 11690 <59f9> <59f9> 6027 <59fa> <59fa> 11702 <59fb> <59fb> 4221 <59fc> <59fe> 11703 <59ff> <59ff> 4648 <5a00> <5a00> 11706 <5a01> <5a01> 3759 <5a02> <5a02> 11707 <5a03> <5a03> 3727 <5a04> <5a04> 2637 <5a05> <5a06> 6021 <5a07> <5a07> 2192 <5a08> <5a08> 6024 <5a09> <5a09> 6029 <5a0a> <5a0b> 11708 <5a0c> <5a0c> 6028 <5a0d> <5a10> 11710 <5a11> <5a11> 6032 <5a12> <5a12> 11714 <5a13> <5a13> 6034 <5a14> <5a17> 11715 <5a18> <5a18> 2898 <5a19> <5a1b> 11719 <5a1c> <5a1c> 2859 <5a1d> <5a1e> 11722 <5a1f> <5a1f> 2329 <5a20> <5a20> 3368 <5a21> <5a22> 11724 <5a23> <5a23> 6033 <5a24> <5a24> 11726 <5a25> <5a25> 1583 <5a26> <5a28> 11727 <5a29> <5a29> 2793 <5a2a> <5a30> 11730 <5a31> <5a31> 4302 <5a32> <5a32> 6030 <5a33> <5a33> 11737 <5a34> <5a34> 6031 <5a35> <5a35> 11738 <5a36> <5a36> 3197 endcidrange 100 begincidrange <5a37> <5a3b> 11739 <5a3c> <5a3c> 6039 <5a3d> <5a3f> 11744 <5a40> <5a40> 6035 <5a41> <5a41> 8255 <5a42> <5a45> 11747 <5a46> <5a46> 3044 <5a47> <5a48> 11751 <5a49> <5a49> 3746 <5a4a> <5a4a> 6037 <5a4b> <5a54> 11753 <5a55> <5a55> 6038 <5a56> <5a59> 11763 <5a5a> <5a5a> 2046 <5a5b> <5a61> 11767 <5a62> <5a62> 6040 <5a63> <5a65> 11774 <5a66> <5a66> 7950 <5a67> <5a67> 6036 <5a68> <5a69> 11777 <5a6a> <5a6a> 2466 <5a6b> <5a6c> 11779 <5a6d> <5a6d> 9209 <5a6e> <5a73> 11781 <5a74> <5a74> 4233 <5a75> <5a75> 6041 <5a76> <5a76> 3373 <5a77> <5a77> 6045 <5a78> <5a79> 11787 <5a7a> <5a7a> 6046 <5a7b> <5a7e> 11789 <5a7f> <5a7f> 4033 <5a80> <5a91> 11793 <5a92> <5a92> 2754 <5a93> <5a99> 11811 <5a9a> <5a9a> 2761 <5a9b> <5a9b> 6044 <5a9c> <5aa6> 11818 <5aa7> <5aa7> 9212 <5aa8> <5aa9> 11829 <5aaa> <5aaa> 6043 <5aab> <5ab1> 11831 <5ab2> <5ab2> 6049 <5ab3> <5ab3> 3870 <5ab4> <5ab4> 11838 <5ab5> <5ab5> 6564 <5ab6> <5ab7> 11839 <5ab8> <5ab8> 6052 <5ab9> <5abc> 11841 <5abd> <5abd> 8297 <5abe> <5abe> 6047 <5abf> <5ac0> 11845 <5ac1> <5ac1> 2129 <5ac2> <5ac2> 3298 <5ac3> <5ac8> 11847 <5ac9> <5ac9> 2088 <5aca> <5acb> 11853 <5acc> <5acc> 3904 <5acd> <5ad1> 11855 <5ad2> <5ad2> 6050 <5ad3> <5ad3> 11860 <5ad4> <5ad4> 6051 <5ad5> <5ad5> 11861 <5ad6> <5ad6> 6056 <5ad7> <5ad7> 9207 <5ad8> <5ad8> 6058 <5ad9> <5adb> 11862 <5adc> <5adc> 6059 <5add> <5adf> 11865 <5ae0> <5ae0> 6053 <5ae1> <5ae1> 1462 <5ae2> <5ae2> 11868 <5ae3> <5ae3> 6054 <5ae4> <5ae5> 11869 <5ae6> <5ae6> 6057 <5ae7> <5ae8> 11871 <5ae9> <5ae9> 2878 <5aea> <5aea> 11873 <5aeb> <5aeb> 6048 <5aec> <5af0> 11874 <5af1> <5af1> 6055 <5af2> <5af4> 11879 <5af5> <5af5> 9206 <5af6> <5afa> 11882 <5afb> <5afb> 9213 <5afc> <5aff> 11887 <5b00> <5b00> 9208 <5b01> <5b07> 11891 <5b08> <5b08> 9210 <5b09> <5b09> 6060 <5b0a> <5b0a> 11898 <5b0b> <5b0b> 9214 <5b0c> <5b0c> 8104 <5b0d> <5b15> 11899 <5b16> <5b16> 6062 <5b17> <5b17> 6061 <5b18> <5b18> 11908 <5b19> <5b19> 9217 <5b1a> <5b20> 11909 <5b21> <5b21> 9215 endcidrange 100 begincidrange <5b22> <5b29> 11916 <5b2a> <5b2a> 9216 <5b2b> <5b2f> 11924 <5b30> <5b30> 8737 <5b31> <5b31> 11929 <5b32> <5b32> 6063 <5b33> <5b33> 11930 <5b34> <5b34> 4876 <5b35> <5b36> 11931 <5b37> <5b37> 6064 <5b38> <5b38> 8482 <5b39> <5b3f> 11933 <5b40> <5b40> 6065 <5b41> <5b4b> 11940 <5b4c> <5b4c> 9211 <5b4d> <5b4f> 11951 <5b50> <5b50> 4656 <5b51> <5b51> 6071 <5b52> <5b52> 11954 <5b53> <5b53> 6072 <5b54> <5b54> 2404 <5b55> <5b55> 4371 <5b56> <5b56> 11955 <5b57> <5b57> 4659 <5b58> <5b58> 1385 <5b59> <5b59> 3556 <5b5a> <5b5a> 6068 <5b5b> <5b5b> 4729 <5b5c> <5b5c> 4651 <5b5d> <5b5d> 3949 <5b5e> <5b5e> 11956 <5b5f> <5b5f> 2772 <5b60> <5b61> 11957 <5b62> <5b62> 6073 <5b63> <5b63> 2097 <5b64> <5b64> 1819 <5b65> <5b65> 6069 <5b66> <5b66> 4048 <5b67> <5b68> 11959 <5b69> <5b69> 1881 <5b6a> <5b6a> 2678 <5b6b> <5b6b> 8538 <5b6c> <5b6c> 4705 <5b6d> <5b6f> 11961 <5b70> <5b70> 3458 <5b71> <5b71> 5994 <5b72> <5b72> 11964 <5b73> <5b73> 6070 <5b74> <5b74> 11965 <5b75> <5b75> 1682 <5b76> <5b77> 11966 <5b78> <5b78> 8677 <5b79> <5b79> 11968 <5b7a> <5b7a> 3265 <5b7b> <5b7c> 11969 <5b7d> <5b7d> 2904 <5b7e> <5b7e> 11971 <5b7f> <5b7f> 8279 <5b80> <5b80> 5934 <5b81> <5b81> 2913 <5b82> <5b82> 11972 <5b83> <5b83> 3569 <5b84> <5b84> 5935 <5b85> <5b85> 4429 <5b86> <5b86> 11973 <5b87> <5b87> 4307 <5b88> <5b88> 3439 <5b89> <5b89> 957 <5b8a> <5b8a> 11974 <5b8b> <5b8b> 3523 <5b8c> <5b8c> 3739 <5b8d> <5b8e> 11975 <5b8f> <5b8f> 1953 <5b90> <5b92> 11977 <5b93> <5b93> 5937 <5b94> <5b94> 11980 <5b95> <5b95> 5936 <5b96> <5b96> 11981 <5b97> <5b97> 4663 <5b98> <5b98> 1842 <5b99> <5b99> 4581 <5b9a> <5b9a> 1511 <5b9b> <5b9b> 3745 <5b9c> <5b9c> 4178 <5b9d> <5b9d> 1039 <5b9e> <5b9e> 3404 <5b9f> <5b9f> 11982 <5ba0> <5ba0> 1293 <5ba1> <5ba1> 3372 <5ba2> <5ba2> 2394 <5ba3> <5ba3> 4038 <5ba4> <5ba4> 3433 <5ba5> <5ba5> 5938 <5ba6> <5ba6> 2007 <5ba7> <5ba9> 11983 <5baa> <5baa> 3913 <5bab> <5bab> 1797 <5bac> <5baf> 11986 <5bb0> <5bb0> 4378 <5bb1> <5bb2> 11990 endcidrange 100 begincidrange <5bb3> <5bb3> 1885 <5bb4> <5bb4> 4112 <5bb5> <5bb5> 3945 <5bb6> <5bb6> 2117 <5bb7> <5bb7> 11992 <5bb8> <5bb8> 5939 <5bb9> <5bb9> 3256 <5bba> <5bbc> 11993 <5bbd> <5bbd> 2426 <5bbe> <5bbe> 1119 <5bbf> <5bbf> 3539 <5bc0> <5bc1> 11996 <5bc2> <5bc2> 2104 <5bc3> <5bc3> 11998 <5bc4> <5bc4> 2103 <5bc5> <5bc5> 4225 <5bc6> <5bc6> 2785 <5bc7> <5bc7> 2409 <5bc8> <5bcb> 11999 <5bcc> <5bcc> 1718 <5bcd> <5bcf> 12003 <5bd0> <5bd0> 2759 <5bd1> <5bd1> 12006 <5bd2> <5bd2> 1893 <5bd3> <5bd3> 4325 <5bd4> <5bdc> 12007 <5bdd> <5bdd> 3163 <5bde> <5bde> 2834 <5bdf> <5bdf> 1203 <5be0> <5be0> 12016 <5be1> <5be1> 1834 <5be2> <5be2> 8421 <5be3> <5be3> 12017 <5be4> <5be4> 5943 <5be5> <5be5> 2577 <5be6> <5be6> 8495 <5be7> <5be7> 8355 <5be8> <5be8> 4432 <5be9> <5be9> 8481 <5bea> <5bea> 12018 <5beb> <5beb> 8660 <5bec> <5bec> 8165 <5bed> <5bed> 12019 <5bee> <5bee> 5944 <5bef> <5bef> 12020 <5bf0> <5bf0> 5946 <5bf1> <5bf4> 12021 <5bf5> <5bf5> 7818 <5bf6> <5bf6> 7735 <5bf7> <5bf7> 12025 <5bf8> <5bf8> 1386 <5bf9> <5bf9> 1555 <5bfa> <5bfa> 3511 <5bfb> <5bfb> 4057 <5bfc> <5bfc> 1437 <5bfd> <5bfe> 12026 <5bff> <5bff> 3440 <5c00> <5c00> 12028 <5c01> <5c01> 1663 <5c02> <5c03> 12029 <5c04> <5c04> 3357 <5c05> <5c05> 12031 <5c06> <5c06> 2172 <5c07> <5c07> 8094 <5c08> <5c08> 8870 <5c09> <5c09> 3789 <5c0a> <5c0a> 4685 <5c0b> <5c0b> 8680 <5c0c> <5c0c> 12032 <5c0d> <5c0d> 7898 <5c0e> <5c0e> 7865 <5c0f> <5c0f> 3948 <5c10> <5c10> 12033 <5c11> <5c11> 3346 <5c12> <5c13> 12034 <5c14> <5c14> 1594 <5c15> <5c15> 6066 <5c16> <5c16> 2133 <5c17> <5c17> 12036 <5c18> <5c18> 1251 <5c19> <5c19> 12037 <5c1a> <5c1a> 3337 <5c1b> <5c1b> 12038 <5c1c> <5c1c> 6067 <5c1d> <5c1d> 1223 <5c1e> <5c21> 12039 <5c22> <5c22> 5302 <5c23> <5c23> 12043 <5c24> <5c24> 4269 <5c25> <5c25> 5303 <5c26> <5c26> 12044 <5c27> <5c27> 4137 <5c28> <5c2b> 12045 <5c2c> <5c2c> 5304 <5c2d> <5c30> 12049 <5c31> <5c31> 2300 <5c32> <5c33> 12053 <5c34> <5c34> 5305 <5c35> <5c36> 12055 <5c37> <5c37> 9052 endcidrange 100 begincidrange <5c38> <5c38> 3395 <5c39> <5c39> 4227 <5c3a> <5c3a> 1284 <5c3b> <5c3b> 5990 <5c3c> <5c3c> 2884 <5c3d> <5c3d> 2256 <5c3e> <5c3e> 3777 <5c3f> <5c3f> 2901 <5c40> <5c40> 2309 <5c41> <5c41> 3015 <5c42> <5c42> 1194 <5c43> <5c44> 12057 <5c45> <5c45> 2306 <5c46> <5c47> 12059 <5c48> <5c48> 3193 <5c49> <5c49> 3646 <5c4a> <5c4a> 2237 <5c4b> <5c4b> 3820 <5c4c> <5c4d> 12061 <5c4e> <5c4e> 3409 <5c4f> <5c4f> 3040 <5c50> <5c50> 5992 <5c51> <5c51> 3975 <5c52> <5c54> 12063 <5c55> <5c55> 4442 <5c56> <5c58> 12066 <5c59> <5c59> 5993 <5c5a> <5c5d> 12069 <5c5e> <5c5e> 3467 <5c5f> <5c5f> 12073 <5c60> <5c60> 3697 <5c61> <5c61> 2668 <5c62> <5c62> 8272 <5c63> <5c63> 5995 <5c64> <5c64> 7783 <5c65> <5c65> 2667 <5c66> <5c66> 5996 <5c67> <5c67> 12074 <5c68> <5c68> 9204 <5c69> <5c6b> 12075 <5c6c> <5c6c> 8510 <5c6d> <5c6d> 12078 <5c6e> <5c6e> 6004 <5c6f> <5c6f> 3710 <5c70> <5c70> 12079 <5c71> <5c71> 3318 <5c72> <5c78> 12080 <5c79> <5c79> 4192 <5c7a> <5c7a> 5548 <5c7b> <5c7e> 12087 <5c7f> <5c7f> 4305 <5c80> <5c80> 12091 <5c81> <5c81> 3551 <5c82> <5c82> 3088 <5c83> <5c87> 12092 <5c88> <5c88> 5552 <5c89> <5c8b> 12097 <5c8c> <5c8c> 5547 <5c8d> <5c8d> 5549 <5c8e> <5c8f> 12100 <5c90> <5c90> 5550 <5c91> <5c91> 5555 <5c92> <5c93> 12102 <5c94> <5c94> 1204 <5c95> <5c95> 12104 <5c96> <5c96> 5551 <5c97> <5c97> 1749 <5c98> <5c99> 5553 <5c9a> <5c9a> 5556 <5c9b> <5c9b> 1435 <5c9c> <5c9c> 5557 <5c9d> <5ca0> 12105 <5ca1> <5ca1> 7958 <5ca2> <5ca2> 5559 <5ca3> <5ca3> 5564 <5ca4> <5ca8> 12109 <5ca9> <5ca9> 4091 <5caa> <5caa> 12114 <5cab> <5cab> 5562 <5cac> <5cac> 5561 <5cad> <5cad> 2612 <5cae> <5cb0> 12115 <5cb1> <5cb1> 5563 <5cb2> <5cb2> 12118 <5cb3> <5cb3> 4355 <5cb4> <5cb4> 12119 <5cb5> <5cb5> 5558 <5cb6> <5cb6> 12120 <5cb7> <5cb7> 5566 <5cb8> <5cb8> 961 <5cb9> <5cbc> 12121 <5cbd> <5cbd> 5560 <5cbe> <5cbe> 12125 <5cbf> <5cbf> 2438 <5cc0> <5cc0> 12126 <5cc1> <5cc1> 5565 <5cc2> <5cc3> 12127 <5cc4> <5cc4> 5567 <5cc5> <5cca> 12129 <5ccb> <5ccb> 5570 endcidrange 100 begincidrange <5ccc> <5cd1> 12135 <5cd2> <5cd2> 5568 <5cd3> <5cd8> 12141 <5cd9> <5cd9> 4548 <5cda> <5ce0> 12147 <5ce1> <5ce1> 3884 <5ce2> <5ce3> 12154 <5ce4> <5ce4> 5569 <5ce5> <5ce5> 5571 <5ce6> <5ce6> 2676 <5ce7> <5ce7> 12156 <5ce8> <5ce8> 1578 <5ce9> <5ce9> 12157 <5cea> <5cea> 4317 <5ceb> <5cec> 12158 <5ced> <5ced> 3146 <5cee> <5cef> 12160 <5cf0> <5cf0> 1666 <5cf1> <5cf3> 12162 <5cf4> <5cf4> 9097 <5cf5> <5cf5> 12165 <5cf6> <5cf6> 7863 <5cf7> <5cfa> 12166 <5cfb> <5cfb> 2349 <5cfc> <5cfc> 12170 <5cfd> <5cfd> 8628 <5cfe> <5cff> 12171 <5d00> <5d01> 12173 <5d02> <5d03> 5572 <5d04> <5d05> 12175 <5d06> <5d06> 5579 <5d07> <5d07> 1292 <5d08> <5d0c> 12177 <5d0d> <5d0d> 9103 <5d0e> <5d0e> 3080 <5d0f> <5d13> 12182 <5d14> <5d14> 1377 <5d15> <5d15> 12187 <5d16> <5d16> 4075 <5d17> <5d17> 7962 <5d18> <5d1a> 12188 <5d1b> <5d1b> 5580 <5d1c> <5d1d> 12191 <5d1e> <5d1e> 5578 <5d1f> <5d23> 12193 <5d24> <5d24> 5577 <5d25> <5d25> 12198 <5d26> <5d26> 5575 <5d27> <5d27> 5574 <5d28> <5d28> 12199 <5d29> <5d29> 1065 <5d2a> <5d2b> 12200 <5d2c> <5d2c> 9099 <5d2d> <5d2d> 4441 <5d2e> <5d2e> 5576 <5d2f> <5d33> 12202 <5d34> <5d34> 5583 <5d35> <5d3c> 12207 <5d3d> <5d3d> 5584 <5d3e> <5d3e> 5582 <5d3f> <5d46> 12215 <5d47> <5d47> 6946 <5d48> <5d49> 12223 <5d4a> <5d4a> 5591 <5d4b> <5d4b> 5590 <5d4c> <5d4c> 3123 <5d4d> <5d4f> 12225 <5d50> <5d50> 9098 <5d51> <5d57> 12228 <5d58> <5d58> 5581 <5d59> <5d5a> 12235 <5d5b> <5d5b> 5586 <5d5c> <5d5c> 12237 <5d5d> <5d5d> 5588 <5d5e> <5d68> 12238 <5d69> <5d69> 5592 <5d6a> <5d6a> 12249 <5d6b> <5d6b> 5589 <5d6c> <5d6c> 5585 <5d6d> <5d6e> 12250 <5d6f> <5d6f> 5587 <5d70> <5d73> 12252 <5d74> <5d74> 5593 <5d75> <5d80> 12256 <5d81> <5d81> 9105 <5d82> <5d82> 5594 <5d83> <5d83> 12268 <5d84> <5d84> 8817 <5d85> <5d86> 12269 <5d87> <5d87> 9096 <5d88> <5d96> 12271 <5d97> <5d97> 9102 <5d98> <5d98> 12286 <5d99> <5d99> 5595 <5d9a> <5d9c> 12287 <5d9d> <5d9d> 5596 <5d9e> <5d9f> 12290 <5da0> <5da0> 9101 <5da1> <5da6> 12292 <5da7> <5da7> 9100 endcidrange 100 begincidrange <5da8> <5db6> 12298 <5db7> <5db7> 5598 <5db8> <5db8> 9104 <5db9> <5db9> 12313 <5dba> <5dba> 8243 <5dbb> <5dbb> 12314 <5dbc> <5dbc> 8764 <5dbd> <5dc4> 12315 <5dc5> <5dc5> 5599 <5dc6> <5dca> 12323 <5dcb> <5dcb> 8169 <5dcc> <5dcc> 12328 <5dcd> <5dcd> 3760 <5dce> <5dd1> 12329 <5dd2> <5dd2> 8277 <5dd3> <5dd3> 12333 <5dd4> <5dd4> 9106 <5dd5> <5dda> 12334 <5ddb> <5ddb> 6165 <5ddc> <5ddc> 12340 <5ddd> <5ddd> 1323 <5dde> <5dde> 4572 <5ddf> <5de0> 12341 <5de1> <5de1> 4059 <5de2> <5de2> 1239 <5de3> <5de4> 12343 <5de5> <5de5> 1789 <5de6> <5de6> 4688 <5de7> <5de7> 3142 <5de8> <5de8> 2317 <5de9> <5de9> 1799 <5dea> <5dea> 12345 <5deb> <5deb> 3814 <5dec> <5ded> 12346 <5dee> <5dee> 1205 <5def> <5def> 5023 <5df0> <5df0> 8996 <5df1> <5df1> 2093 <5df2> <5df2> 4184 <5df3> <5df3> 3517 <5df4> <5df4> 984 <5df5> <5df6> 12348 <5df7> <5df7> 3932 <5df8> <5dfc> 12350 <5dfd> <5dfd> 4855 <5dfe> <5dfe> 2238 <5dff> <5dff> 12355 <5e00> <5e00> 12356 <5e01> <5e01> 1083 <5e02> <5e02> 3431 <5e03> <5e03> 1155 <5e04> <5e04> 12357 <5e05> <5e05> 3484 <5e06> <5e06> 1608 <5e07> <5e07> 12358 <5e08> <5e08> 3389 <5e09> <5e0b> 12359 <5e0c> <5e0c> 3856 <5e0d> <5e0e> 12362 <5e0f> <5e0f> 5534 <5e10> <5e10> 4459 <5e11> <5e11> 5537 <5e12> <5e13> 12364 <5e14> <5e14> 5536 <5e15> <5e15> 2946 <5e16> <5e16> 3662 <5e17> <5e17> 12366 <5e18> <5e18> 2554 <5e19> <5e19> 5535 <5e1a> <5e1a> 4578 <5e1b> <5e1b> 1142 <5e1c> <5e1c> 4547 <5e1d> <5e1d> 1468 <5e1e> <5e24> 12367 <5e25> <5e25> 8515 <5e26> <5e26> 1403 <5e27> <5e27> 4512 <5e28> <5e2a> 12374 <5e2b> <5e2b> 8489 <5e2c> <5e2c> 12377 <5e2d> <5e2d> 3868 <5e2e> <5e2e> 1018 <5e2f> <5e30> 12378 <5e31> <5e31> 5538 <5e32> <5e32> 12380 <5e33> <5e33> 8823 <5e34> <5e35> 12381 <5e36> <5e36> 7847 <5e37> <5e37> 5541 <5e38> <5e38> 1224 <5e39> <5e3a> 12383 <5e3b> <5e3c> 5539 <5e3d> <5e3d> 2742 <5e3e> <5e3f> 12385 <5e40> <5e40> 8837 <5e41> <5e41> 12387 <5e42> <5e42> 2786 <5e43> <5e43> 9092 <5e44> <5e44> 5542 <5e45> <5e45> 1686 endcidrange 100 begincidrange <5e46> <5e4b> 12388 <5e4c> <5e4c> 2020 <5e4d> <5e53> 12394 <5e54> <5e54> 5543 <5e55> <5e55> 2846 <5e56> <5e56> 12401 <5e57> <5e57> 9095 <5e58> <5e58> 9094 <5e59> <5e5a> 12402 <5e5b> <5e5b> 5544 <5e5c> <5e5d> 12404 <5e5e> <5e5e> 5545 <5e5f> <5e5f> 8848 <5e60> <5e60> 12406 <5e61> <5e61> 5546 <5e62> <5e62> 1332 <5e63> <5e63> 7748 <5e64> <5e6a> 12407 <5e6b> <5e6b> 7730 <5e6c> <5e6c> 9093 <5e6d> <5e71> 12414 <5e72> <5e72> 1732 <5e73> <5e73> 3036 <5e74> <5e74> 2893 <5e75> <5e75> 12419 <5e76> <5e76> 1129 <5e77> <5e77> 12420 <5e78> <5e78> 3997 <5e79> <5e79> 7955 <5e7a> <5e7a> 6163 <5e7b> <5e7b> 2008 <5e7c> <5e7c> 4284 <5e7d> <5e7d> 4265 <5e7e> <5e7e> 8051 <5e7f> <5e7f> 1852 <5e80> <5e80> 5681 <5e81> <5e83> 12421 <5e84> <5e84> 4620 <5e85> <5e85> 12424 <5e86> <5e86> 3177 <5e87> <5e87> 1084 <5e88> <5e89> 12425 <5e8a> <5e8a> 1333 <5e8b> <5e8b> 5683 <5e8c> <5e8e> 12427 <5e8f> <5e8f> 4029 <5e90> <5e90> 2645 <5e91> <5e91> 5682 <5e92> <5e92> 12430 <5e93> <5e93> 2415 <5e94> <5e94> 4235 <5e95> <5e95> 1464 <5e96> <5e96> 5684 <5e97> <5e97> 1483 <5e98> <5e98> 12431 <5e99> <5e99> 2802 <5e9a> <5e9a> 1784 <5e9b> <5e9b> 12432 <5e9c> <5e9c> 1705 <5e9d> <5e9d> 12433 <5e9e> <5e9e> 2964 <5e9f> <5e9f> 1644 <5ea0> <5ea0> 5686 <5ea1> <5ea4> 12434 <5ea5> <5ea5> 5685 <5ea6> <5ea6> 1543 <5ea7> <5ea7> 4694 <5ea8> <5eaa> 12438 <5eab> <5eab> 8160 <5eac> <5eac> 12441 <5ead> <5ead> 3670 <5eae> <5eb2> 12442 <5eb3> <5eb3> 5690 <5eb4> <5eb4> 12447 <5eb5> <5eb5> 5688 <5eb6> <5eb6> 3475 <5eb7> <5eb7> 2370 <5eb8> <5eb8> 4254 <5eb9> <5eb9> 5687 <5eba> <5ebd> 12448 <5ebe> <5ebe> 5689 <5ebf> <5ec8> 12452 <5ec9> <5ec9> 2551 <5eca> <5eca> 2483 <5ecb> <5ed0> 12462 <5ed1> <5ed1> 5693 <5ed2> <5ed2> 5692 <5ed3> <5ed3> 2453 <5ed4> <5ed5> 12468 <5ed6> <5ed6> 2583 <5ed7> <5eda> 12470 <5edb> <5edb> 5694 <5edc> <5ede> 12474 <5edf> <5edf> 8327 <5ee0> <5ee0> 7800 <5ee1> <5ee1> 9134 <5ee2> <5ee2> 7926 <5ee3> <5ee3> 7985 <5ee4> <5ee7> 12477 <5ee8> <5ee8> 5695 endcidrange 100 begincidrange <5ee9> <5ee9> 12481 <5eea> <5eea> 5696 <5eeb> <5eeb> 12482 <5eec> <5eec> 8261 <5eed> <5ef2> 12483 <5ef3> <5ef3> 8568 <5ef4> <5ef4> 5016 <5ef5> <5ef5> 12489 <5ef6> <5ef6> 4092 <5ef7> <5ef7> 3667 <5ef8> <5ef9> 12490 <5efa> <5efa> 2169 <5efb> <5efd> 12492 <5efe> <5efe> 5293 <5eff> <5eff> 4699 <5f00> <5f00> 2359 <5f01> <5f01> 5021 <5f02> <5f02> 4211 <5f03> <5f03> 3097 <5f04> <5f04> 2923 <5f05> <5f07> 12495 <5f08> <5f08> 5294 <5f09> <5f09> 12498 <5f0a> <5f0a> 1088 <5f0b> <5f0b> 5366 <5f0c> <5f0e> 12499 <5f0f> <5f0f> 3412 <5f10> <5f10> 12502 <5f11> <5f11> 5369 <5f12> <5f12> 12503 <5f13> <5f13> 1798 <5f14> <5f14> 12504 <5f15> <5f15> 4228 <5f16> <5f16> 12505 <5f17> <5f17> 1696 <5f18> <5f18> 1954 <5f19> <5f1a> 12506 <5f1b> <5f1b> 1279 <5f1c> <5f1e> 12508 <5f1f> <5f1f> 1469 <5f20> <5f20> 4454 <5f21> <5f24> 12511 <5f25> <5f25> 2779 <5f26> <5f26> 3903 <5f27> <5f27> 1974 <5f28> <5f28> 12515 <5f29> <5f29> 5999 <5f2a> <5f2a> 5998 <5f2b> <5f2c> 12516 <5f2d> <5f2d> 6000 <5f2e> <5f2e> 12518 <5f2f> <5f2f> 3733 <5f30> <5f30> 12519 <5f31> <5f31> 3280 <5f32> <5f32> 12520 <5f33> <5f33> 9205 <5f34> <5f34> 12521 <5f35> <5f35> 8821 <5f36> <5f38> 12522 <5f39> <5f39> 1424 <5f3a> <5f3a> 3132 <5f3b> <5f3b> 12525 <5f3c> <5f3c> 6002 <5f3d> <5f3f> 12526 <5f40> <5f40> 6590 <5f41> <5f45> 12529 <5f46> <5f46> 9838 <5f47> <5f47> 12534 <5f48> <5f48> 7856 <5f49> <5f4b> 12535 <5f4c> <5f4c> 8323 <5f4d> <5f4d> 12538 <5f4e> <5f4e> 8584 <5f4f> <5f4f> 12539 <5f50> <5f50> 5986 <5f51> <5f51> 12540 <5f52> <5f52> 1858 <5f53> <5f53> 1426 <5f54> <5f54> 12541 <5f55> <5f55> 2659 <5f56> <5f56> 5988 <5f57> <5f57> 5987 <5f58> <5f58> 5989 <5f59> <5f59> 9852 <5f5a> <5f5c> 12542 <5f5d> <5f5d> 4180 <5f5e> <5f60> 12545 <5f61> <5f61> 5614 <5f62> <5f62> 3993 <5f63> <5f63> 12548 <5f64> <5f64> 3679 <5f65> <5f65> 12549 <5f66> <5f66> 4110 <5f67> <5f68> 12550 <5f69> <5f69> 1169 <5f6a> <5f6a> 1108 <5f6b> <5f6b> 12552 <5f6c> <5f6c> 1115 <5f6d> <5f6d> 2990 <5f6e> <5f6f> 12553 endcidrange 100 begincidrange <5f70> <5f70> 4452 <5f71> <5f71> 4245 <5f72> <5f72> 12555 <5f73> <5f73> 5600 <5f74> <5f76> 12556 <5f77> <5f77> 5601 <5f78> <5f78> 12559 <5f79> <5f79> 4194 <5f7a> <5f7a> 12560 <5f7b> <5f7b> 1246 <5f7c> <5f7c> 1076 <5f7d> <5f7f> 12561 <5f80> <5f80> 3754 <5f81> <5f81> 4504 <5f82> <5f82> 5602 <5f83> <5f83> 12564 <5f84> <5f84> 2277 <5f85> <5f85> 1408 <5f86> <5f86> 12565 <5f87> <5f87> 5603 <5f88> <5f88> 1939 <5f89> <5f89> 5604 <5f8a> <5f8a> 1991 <5f8b> <5f8b> 2672 <5f8c> <5f8c> 5605 <5f8d> <5f8f> 12566 <5f90> <5f90> 4023 <5f91> <5f91> 8133 <5f92> <5f92> 3694 <5f93> <5f94> 12569 <5f95> <5f95> 5606 <5f96> <5f96> 12571 <5f97> <5f97> 1444 <5f98> <5f98> 2952 <5f99> <5f99> 5607 <5f9a> <5f9b> 12572 <5f9c> <5f9c> 5608 <5f9d> <5f9d> 12574 <5f9e> <5f9e> 7841 <5f9f> <5f9f> 12575 <5fa0> <5fa0> 9107 <5fa1> <5fa1> 4318 <5fa2> <5fa7> 12576 <5fa8> <5fa8> 5609 <5fa9> <5fa9> 7947 <5faa> <5faa> 4054 <5fab> <5fac> 12582 <5fad> <5fad> 5610 <5fae> <5fae> 3761 <5faf> <5fb4> 12584 <5fb5> <5fb5> 5611 <5fb6> <5fb6> 12590 <5fb7> <5fb7> 1443 <5fb8> <5fb8> 12591 <5fb9> <5fb9> 7804 <5fba> <5fbb> 12592 <5fbc> <5fbc> 5612 <5fbd> <5fbd> 2026 <5fbe> <5fc2> 12594 <5fc3> <5fc3> 3983 <5fc4> <5fc4> 5698 <5fc5> <5fc5> 1089 <5fc6> <5fc6> 4203 <5fc7> <5fc8> 12599 <5fc9> <5fc9> 5699 <5fca> <5fcb> 12601 <5fcc> <5fcc> 2108 <5fcd> <5fcd> 3239 <5fce> <5fce> 12603 <5fcf> <5fcf> 5701 <5fd0> <5fd0> 6668 <5fd1> <5fd1> 6667 <5fd2> <5fd2> 5367 <5fd3> <5fd5> 12604 <5fd6> <5fd6> 5700 <5fd7> <5fd7> 4541 <5fd8> <5fd8> 3757 <5fd9> <5fd9> 2731 <5fda> <5fdc> 12607 <5fdd> <5fdd> 5763 <5fde> <5fdf> 12610 <5fe0> <5fe0> 4561 <5fe1> <5fe1> 5705 <5fe2> <5fe3> 12612 <5fe4> <5fe4> 5706 <5fe5> <5fe6> 12614 <5fe7> <5fe7> 4268 <5fe8> <5fe9> 12616 <5fea> <5fea> 5710 <5feb> <5feb> 2425 <5fec> <5fec> 12618 <5fed> <5fed> 5711 <5fee> <5fee> 5703 <5fef> <5ff0> 12619 <5ff1> <5ff1> 1253 <5ff2> <5ff4> 12621 <5ff5> <5ff5> 2897 <5ff6> <5ff7> 12624 <5ff8> <5ff8> 5712 <5ff9> <5ffa> 12626 endcidrange 100 begincidrange <5ffb> <5ffb> 3982 <5ffc> <5ffc> 12628 <5ffd> <5ffd> 1965 <5ffe> <5ffe> 5707 <5fff> <5fff> 1659 <6000> <6000> 1992 <6001> <6001> 3583 <6002> <6002> 3520 <6003> <6003> 5702 <6004> <6004> 5704 <6005> <6006> 5708 <6007> <6009> 12629 <600a> <600a> 5721 <600b> <600c> 12632 <600d> <600d> 5718 <600e> <600e> 4408 <600f> <600f> 5717 <6010> <6011> 12634 <6012> <6012> 2926 <6013> <6013> 12636 <6014> <6014> 4507 <6015> <6015> 2947 <6016> <6016> 1159 <6017> <6018> 12637 <6019> <6019> 5713 <601a> <601a> 12639 <601b> <601b> 5716 <601c> <601c> 2552 <601d> <601d> 3505 <601e> <601f> 12640 <6020> <6020> 1410 <6021> <6021> 5723 <6022> <6024> 12642 <6025> <6025> 2084 <6026> <6026> 5715 <6027> <6027> 3999 <6028> <6028> 4348 <6029> <6029> 5719 <602a> <602a> 1839 <602b> <602b> 5720 <602c> <602e> 12645 <602f> <602f> 3152 <6030> <6034> 12648 <6035> <6035> 5714 <6036> <603a> 12653 <603b> <603b> 4665 <603c> <603c> 6669 <603d> <603e> 12658 <603f> <603f> 5722 <6040> <6040> 12660 <6041> <6041> 6673 <6042> <6042> 5728 <6043> <6043> 3432 <6044> <604a> 12661 <604b> <604b> 2558 <604c> <604c> 12668 <604d> <604d> 2021 <604e> <604f> 12669 <6050> <6050> 2403 <6051> <6051> 12671 <6052> <6052> 1946 <6053> <6054> 12672 <6055> <6055> 3478 <6056> <6058> 12674 <6059> <6059> 6674 <605a> <605a> 6671 <605b> <605c> 12677 <605d> <605d> 6670 <605e> <6061> 12679 <6062> <6062> 2027 <6063> <6063> 6675 <6064> <6064> 4031 <6065> <6066> 12683 <6067> <6067> 6672 <6068> <6068> 1941 <6069> <6069> 1590 <606a> <606a> 5729 <606b> <606b> 1521 <606c> <606c> 3652 <606d> <606d> 1792 <606e> <606e> 12685 <606f> <606f> 3855 <6070> <6070> 3102 <6071> <6072> 12686 <6073> <6073> 2399 <6074> <6075> 12688 <6076> <6076> 1584 <6077> <6077> 12690 <6078> <6079> 5724 <607a> <607a> 5727 <607b> <607b> 5726 <607c> <607c> 2872 <607d> <607d> 5730 <607e> <607e> 12691 <607f> <607f> 4262 <6080> <6082> 12692 <6083> <6083> 5735 <6084> <6084> 3137 <6085> <6088> 12695 <6089> <6089> 3857 endcidrange 100 begincidrange <608a> <608b> 12699 <608c> <608c> 5737 <608d> <608d> 1902 <608e> <6091> 12701 <6092> <6092> 5736 <6093> <6093> 12705 <6094> <6094> 2031 <6095> <6095> 12706 <6096> <6096> 5731 <6097> <6099> 12707 <609a> <609a> 5732 <609b> <609b> 5738 <609c> <609c> 12710 <609d> <609d> 5734 <609e> <609e> 12711 <609f> <609f> 3841 <60a0> <60a0> 4267 <60a1> <60a2> 12712 <60a3> <60a3> 2001 <60a4> <60a5> 12714 <60a6> <60a6> 4358 <60a7> <60a7> 12716 <60a8> <60a8> 2909 <60a9> <60aa> 12717 <60ab> <60ab> 6676 <60ac> <60ac> 4039 <60ad> <60ad> 5733 <60ae> <60ae> 12719 <60af> <60af> 2810 <60b0> <60b0> 12720 <60b1> <60b1> 5741 <60b2> <60b2> 1048 <60b3> <60b3> 12721 <60b4> <60b4> 5746 <60b5> <60b5> 9140 <60b6> <60b6> 8318 <60b7> <60b7> 12722 <60b8> <60b8> 2101 <60b9> <60ba> 12723 <60bb> <60bb> 5740 <60bc> <60bc> 1440 <60bd> <60c4> 12725 <60c5> <60c5> 3174 <60c6> <60c6> 5744 <60c7> <60c9> 12733 <60ca> <60ca> 2265 <60cb> <60cb> 3744 <60cc> <60d0> 12736 <60d1> <60d1> 2056 <60d2> <60d4> 12741 <60d5> <60d5> 3643 <60d6> <60d7> 12744 <60d8> <60d8> 5743 <60d9> <60d9> 12746 <60da> <60da> 5745 <60db> <60db> 12747 <60dc> <60dc> 3860 <60dd> <60dd> 5742 <60de> <60de> 12748 <60df> <60df> 3768 <60e0> <60e0> 2034 <60e1> <60e1> 7907 <60e2> <60e5> 12749 <60e6> <60e6> 1484 <60e7> <60e7> 2324 <60e8> <60e8> 1177 <60e9> <60e9> 1266 <60ea> <60ea> 12753 <60eb> <60eb> 1058 <60ec> <60ec> 5739 <60ed> <60ed> 1176 <60ee> <60ee> 1421 <60ef> <60ef> 1848 <60f0> <60f0> 1575 <60f1> <60f1> 8341 <60f2> <60f2> 9147 <60f3> <60f3> 3928 <60f4> <60f4> 5751 <60f5> <60f5> 12754 <60f6> <60f6> 2017 <60f7> <60f8> 12755 <60f9> <60f9> 3234 <60fa> <60fa> 3989 <60fb> <60fb> 9145 <60fc> <60ff> 12757 <6100> <6100> 5752 <6101> <6101> 1299 <6102> <6105> 12761 <6106> <6106> 6677 <6107> <6107> 12765 <6108> <6108> 4319 <6109> <6109> 4297 <610a> <610c> 12766 <610d> <610d> 6678 <610e> <610e> 5753 <610f> <610f> 4201 <6110> <6114> 12769 <6115> <6115> 5749 <6116> <6119> 12774 <611a> <611a> 4291 endcidrange 100 begincidrange <611b> <611b> 7720 <611c> <611c> 9149 <611d> <611e> 12778 <611f> <611f> 1739 <6120> <6120> 5747 <6121> <6122> 12780 <6123> <6123> 5750 <6124> <6124> 1660 <6125> <6125> 12782 <6126> <6126> 5748 <6127> <6127> 2445 <6128> <612a> 12783 <612b> <612b> 5754 <612c> <6133> 12786 <6134> <6134> 9141 <6135> <6136> 12794 <6137> <6137> 9146 <6138> <613d> 12796 <613e> <613e> 9139 <613f> <613f> 4347 <6140> <6147> 12802 <6148> <6148> 1355 <6149> <6149> 12810 <614a> <614a> 5755 <614b> <614b> 8546 <614c> <614c> 2010 <614d> <614d> 12811 <614e> <614e> 3376 <614f> <6150> 12812 <6151> <6151> 3358 <6152> <6154> 12814 <6155> <6155> 2848 <6156> <6157> 12817 <6158> <6158> 7774 <6159> <6159> 12819 <615a> <615a> 7773 <615b> <615c> 12820 <615d> <615d> 6679 <615e> <615e> 12822 <615f> <615f> 9143 <6160> <6161> 12823 <6162> <6162> 2724 <6163> <6163> 7983 <6164> <6164> 9439 <6165> <6166> 12825 <6167> <6167> 2032 <6168> <6168> 2363 <6169> <6169> 12827 <616a> <616a> 9138 <616b> <616b> 8526 <616c> <616d> 12828 <616e> <616e> 8274 <616f> <616f> 12830 <6170> <6170> 3790 <6171> <6172> 12831 <6173> <6173> 9148 <6174> <6174> 12833 <6175> <6175> 5756 <6176> <6176> 8427 <6177> <6177> 2371 <6178> <6181> 12834 <6182> <6182> 8754 <6183> <6189> 12844 <618a> <618a> 7743 <618b> <618b> 1112 <618c> <618d> 12851 <618e> <618e> 4410 <618f> <618f> 12853 <6190> <6190> 8219 <6191> <6191> 8380 <6192> <6192> 9150 <6193> <6193> 12854 <6194> <6194> 5758 <6195> <6199> 12855 <619a> <619a> 7854 <619b> <619c> 12860 <619d> <619d> 6681 <619e> <61a3> 12862 <61a4> <61a4> 7931 <61a5> <61a6> 12868 <61a7> <61a7> 5759 <61a8> <61a8> 1888 <61a9> <61a9> 6680 <61aa> <61aa> 12870 <61ab> <61ab> 8329 <61ac> <61ac> 5757 <61ad> <61ad> 12871 <61ae> <61ae> 9137 <61af> <61b1> 12872 <61b2> <61b2> 8644 <61b3> <61b5> 12875 <61b6> <61b6> 8724 <61b7> <61b7> 5760 <61b8> <61bd> 12878 <61be> <61be> 1901 <61bf> <61c1> 12884 <61c2> <61c2> 1517 <61c3> <61c6> 12887 <61c7> <61c7> 8158 <61c8> <61c8> 3971 endcidrange 100 begincidrange <61c9> <61c9> 8739 <61ca> <61ca> 974 <61cb> <61cb> 6682 <61cc> <61cc> 9142 <61cd> <61d0> 12891 <61d1> <61d1> 6683 <61d2> <61d2> 2476 <61d3> <61d3> 12895 <61d4> <61d4> 5761 <61d5> <61dd> 12896 <61de> <61de> 9868 <61df> <61df> 9438 <61e0> <61e2> 12905 <61e3> <61e3> 9440 <61e4> <61e5> 12908 <61e6> <61e6> 2932 <61e7> <61e7> 12910 <61e8> <61e8> 9144 <61e9> <61f1> 12911 <61f2> <61f2> 7809 <61f3> <61f4> 12920 <61f5> <61f5> 5762 <61f6> <61f6> 8190 <61f7> <61f7> 8017 <61f8> <61f8> 8673 <61f9> <61f9> 12922 <61fa> <61fa> 9136 <61fb> <61fb> 12923 <61fc> <61fc> 8142 <61fd> <61fd> 12924 <61fe> <61fe> 8478 <61ff> <61ff> 5088 <6200> <6200> 8225 <6201> <6205> 12925 <6206> <6206> 6684 <6207> <6207> 9441 <6208> <6208> 1765 <6209> <6209> 12930 <620a> <620a> 3835 <620b> <620b> 6393 <620c> <620c> 4018 <620d> <620d> 3472 <620e> <620e> 3249 <620f> <620f> 3876 <6210> <6210> 1262 <6211> <6211> 3809 <6212> <6212> 2229 <6213> <6213> 12931 <6214> <6214> 9379 <6215> <6215> 5790 <6216> <6216> 2055 <6217> <6217> 6394 <6218> <6218> 4446 <6219> <6219> 12932 <621a> <621a> 3068 <621b> <621b> 6395 <621c> <621e> 12933 <621f> <621f> 6396 <6220> <6220> 12936 <6221> <6221> 6398 <6222> <6222> 6397 <6223> <6223> 12937 <6224> <6224> 6400 <6225> <6225> 6399 <6226> <6226> 12938 <6227> <6227> 9380 <6228> <6229> 12939 <622a> <622a> 2217 <622b> <622b> 12941 <622c> <622c> 6401 <622d> <622d> 12942 <622e> <622e> 2661 <622f> <622f> 12943 <6230> <6230> 8819 <6231> <6231> 12944 <6232> <6232> 8624 <6233> <6233> 1348 <6234> <6234> 1402 <6235> <6236> 12945 <6237> <6237> 1980 <6238> <623c> 12947 <623d> <623d> 6644 <623e> <623e> 6643 <623f> <623f> 1628 <6240> <6240> 3566 <6241> <6241> 1099 <6242> <6242> 12952 <6243> <6243> 6645 <6244> <6246> 12953 <6247> <6247> 3329 <6248> <6249> 6646 <624a> <624a> 12956 <624b> <624b> 3437 <624c> <624c> 5306 <624d> <624d> 1164 <624e> <624e> 4413 <624f> <6250> 12957 <6251> <6251> 3050 <6252> <6252> 978 <6253> <6253> 1397 endcidrange 100 begincidrange <6254> <6254> 3246 <6255> <6257> 12959 <6258> <6258> 3713 <6259> <625a> 12962 <625b> <625b> 2373 <625c> <6262> 12964 <6263> <6263> 2408 <6264> <6265> 12971 <6266> <6266> 3105 <6267> <6267> 4531 <6268> <6268> 12973 <6269> <6269> 2452 <626a> <626a> 5307 <626b> <626b> 3297 <626c> <626c> 4120 <626d> <626d> 2917 <626e> <626e> 1010 <626f> <626f> 1243 <6270> <6270> 3232 <6271> <6272> 12974 <6273> <6273> 1005 <6274> <6275> 12976 <6276> <6276> 1683 <6277> <6278> 12978 <6279> <6279> 3003 <627a> <627b> 12980 <627c> <627c> 1586 <627d> <627d> 12982 <627e> <627e> 4467 <627f> <627f> 1269 <6280> <6280> 2095 <6281> <6283> 12983 <6284> <6284> 1234 <6285> <6288> 12986 <6289> <6289> 2336 <628a> <628a> 988 <628b> <6290> 12990 <6291> <6291> 4189 <6292> <6292> 3450 <6293> <6293> 4610 <6294> <6294> 12996 <6295> <6295> 3687 <6296> <6296> 1525 <6297> <6297> 2374 <6298> <6298> 4476 <6299> <6299> 12997 <629a> <629a> 1698 <629b> <629b> 2968 <629c> <629e> 12998 <629f> <629f> 5308 <62a0> <62a0> 2406 <62a1> <62a1> 2684 <62a2> <62a2> 3133 <62a3> <62a3> 13001 <62a4> <62a4> 1977 <62a5> <62a5> 1041 <62a6> <62a7> 13002 <62a8> <62a8> 2987 <62a9> <62aa> 13004 <62ab> <62ab> 3004 <62ac> <62ac> 3578 <62ad> <62b0> 13006 <62b1> <62b1> 1040 <62b2> <62b4> 13010 <62b5> <62b5> 1463 <62b6> <62b8> 13013 <62b9> <62b9> 2827 <62ba> <62ba> 13016 <62bb> <62bb> 5309 <62bc> <62bc> 4067 <62bd> <62bd> 1294 <62be> <62be> 13017 <62bf> <62bf> 2807 <62c0> <62c1> 13018 <62c2> <62c2> 1684 <62c3> <62c3> 13020 <62c4> <62c4> 4595 <62c5> <62c5> 1412 <62c6> <62c6> 1207 <62c7> <62c7> 2839 <62c8> <62c8> 2892 <62c9> <62c9> 2456 <62ca> <62ca> 5310 <62cb> <62cb> 13021 <62cc> <62cc> 1011 <62cd> <62cd> 2949 <62ce> <62ce> 2601 <62cf> <62cf> 13022 <62d0> <62d0> 1838 <62d1> <62d1> 13023 <62d2> <62d2> 2315 <62d3> <62d3> 3721 <62d4> <62d4> 985 <62d5> <62d5> 13024 <62d6> <62d6> 3712 <62d7> <62d7> 5312 <62d8> <62d8> 2303 <62d9> <62d9> 4635 <62da> <62da> 5311 <62db> <62db> 4465 endcidrange 100 begincidrange <62dc> <62dc> 1000 <62dd> <62de> 13025 <62df> <62df> 2885 <62e0> <62e1> 13027 <62e2> <62e2> 2634 <62e3> <62e3> 2147 <62e4> <62e4> 13029 <62e5> <62e5> 4250 <62e6> <62e6> 2468 <62e7> <62e7> 2914 <62e8> <62e8> 1133 <62e9> <62e9> 4404 <62ea> <62eb> 13030 <62ec> <62ec> 2451 <62ed> <62ed> 3418 <62ee> <62ee> 5313 <62ef> <62ef> 4509 <62f0> <62f0> 13032 <62f1> <62f1> 1801 <62f2> <62f2> 13033 <62f3> <62f3> 3208 <62f4> <62f4> 3486 <62f5> <62f5> 13034 <62f6> <62f6> 5315 <62f7> <62f7> 2378 <62f8> <62fb> 13035 <62fc> <62fc> 3027 <62fd> <62fd> 4612 <62fe> <62fe> 3399 <62ff> <62ff> 2854 <6300> <6300> 13039 <6301> <6301> 1275 <6302> <6302> 1835 <6303> <6306> 13040 <6307> <6307> 4535 <6308> <6308> 6478 <6309> <6309> 959 <630a> <630d> 13044 <630e> <630e> 2419 <630f> <6310> 13048 <6311> <6311> 3655 <6312> <6315> 13050 <6316> <6316> 3723 <6317> <6319> 13054 <631a> <631a> 4542 <631b> <631b> 2677 <631c> <631c> 13057 <631d> <631d> 3805 <631e> <631e> 3573 <631f> <631f> 3961 <6320> <6320> 2870 <6321> <6321> 1427 <6322> <6322> 5314 <6323> <6323> 4502 <6324> <6324> 2090 <6325> <6325> 2024 <6326> <6327> 13058 <6328> <6328> 943 <6329> <6329> 13060 <632a> <632a> 2931 <632b> <632b> 1391 <632c> <632e> 13061 <632f> <632f> 4498 <6330> <6331> 13064 <6332> <6332> 6479 <6333> <6338> 13066 <6339> <6339> 5316 <633a> <633a> 3671 <633b> <633c> 13072 <633d> <633d> 3741 <633e> <633e> 8657 <633f> <6341> 13074 <6342> <6342> 3829 <6343> <6343> 5318 <6344> <6344> 13077 <6345> <6345> 3682 <6346> <6346> 2449 <6347> <6348> 13078 <6349> <6349> 4634 <634a> <634a> 13080 <634b> <634b> 5317 <634c> <634c> 977 <634d> <634d> 1899 <634e> <634e> 3340 <634f> <634f> 2902 <6350> <6350> 2327 <6351> <6354> 13081 <6355> <6355> 1149 <6356> <635d> 13085 <635e> <635e> 2487 <635f> <635f> 3557 <6360> <6360> 13093 <6361> <6361> 2148 <6362> <6362> 2000 <6363> <6363> 1432 <6364> <6366> 13094 <6367> <6367> 2998 <6368> <6368> 8476 <6369> <6369> 5328 <636a> <636a> 13097 endcidrange 100 begincidrange <636b> <636b> 9053 <636c> <636c> 13098 <636d> <636d> 5325 <636e> <636e> 2316 <636f> <6370> 13099 <6371> <6371> 5321 <6372> <6372> 9858 <6373> <6375> 13101 <6376> <6376> 1338 <6377> <6377> 2222 <6378> <6379> 13104 <637a> <637a> 5322 <637b> <637b> 2896 <637c> <637f> 13106 <6380> <6380> 3891 <6381> <6381> 13110 <6382> <6382> 1473 <6383> <6383> 8461 <6384> <6384> 8282 <6385> <6386> 13111 <6387> <6387> 1565 <6388> <6388> 3441 <6389> <6389> 1493 <638a> <638a> 5327 <638b> <638b> 13113 <638c> <638c> 4455 <638d> <638d> 13114 <638e> <638e> 5323 <638f> <638f> 3616 <6390> <6390> 3101 <6391> <6391> 13115 <6392> <6392> 2950 <6393> <6395> 13116 <6396> <6396> 4155 <6397> <6397> 13119 <6398> <6398> 2337 <6399> <639f> 13120 <63a0> <63a0> 2682 <63a1> <63a1> 13127 <63a2> <63a2> 3600 <63a3> <63a3> 1245 <63a4> <63a4> 13128 <63a5> <63a5> 2212 <63a6> <63a6> 13129 <63a7> <63a7> 2405 <63a8> <63a8> 3703 <63a9> <63a9> 4099 <63aa> <63aa> 1390 <63ab> <63ab> 13130 <63ac> <63ac> 5326 <63ad> <63ad> 5319 <63ae> <63ae> 5329 <63af> <63af> 13131 <63b0> <63b0> 6480 <63b1> <63b2> 13132 <63b3> <63b3> 2647 <63b4> <63b4> 5324 <63b5> <63b6> 13134 <63b7> <63b7> 4543 <63b8> <63b8> 1416 <63b9> <63b9> 13136 <63ba> <63ba> 1211 <63bb> <63bb> 13137 <63bc> <63bc> 5330 <63bd> <63bd> 13138 <63be> <63be> 5340 <63bf> <63bf> 13139 <63c0> <63c0> 8077 <63c1> <63c3> 13140 <63c4> <63c4> 5335 <63c5> <63c5> 13143 <63c6> <63c6> 5339 <63c7> <63c8> 13144 <63c9> <63c9> 3259 <63ca> <63cc> 13146 <63cd> <63cd> 4670 <63ce> <63ce> 5337 <63cf> <63cf> 2797 <63d0> <63d0> 3636 <63d1> <63d1> 13149 <63d2> <63d2> 1196 <63d3> <63d5> 13150 <63d6> <63d6> 4165 <63d7> <63d9> 13153 <63da> <63da> 8703 <63db> <63dd> 13156 <63de> <63de> 5336 <63df> <63df> 13159 <63e0> <63e0> 5333 <63e1> <63e1> 3812 <63e2> <63e2> 13160 <63e3> <63e3> 1322 <63e4> <63e8> 13161 <63e9> <63e9> 2360 <63ea> <63ea> 2285 <63eb> <63ec> 13166 <63ed> <63ed> 2211 <63ee> <63ee> 8024 <63ef> <63f1> 13168 <63f2> <63f2> 5331 endcidrange 100 begincidrange <63f3> <63f3> 13171 <63f4> <63f4> 4337 <63f5> <63f5> 13172 <63f6> <63f6> 5320 <63f7> <63f7> 13173 <63f8> <63f8> 5332 <63f9> <63fc> 13174 <63fd> <63fd> 2474 <63fe> <63fe> 13178 <63ff> <63ff> 5334 <6400> <6400> 1210 <6401> <6401> 1764 <6402> <6402> 2638 <6403> <6404> 13179 <6405> <6405> 2194 <6406> <640a> 13181 <640b> <640b> 5343 <640c> <640c> 5346 <640d> <640d> 8539 <640e> <640e> 13186 <640f> <640f> 1138 <6410> <6410> 1319 <6411> <6412> 13187 <6413> <6413> 1389 <6414> <6414> 3295 <6415> <6416> 13189 <6417> <6417> 7862 <6418> <641a> 13191 <641b> <641b> 5344 <641c> <641c> 3526 <641d> <641d> 13194 <641e> <641e> 1758 <641f> <641f> 13195 <6420> <6420> 5345 <6421> <6421> 5348 <6422> <6425> 13196 <6426> <6426> 5347 <6427> <6429> 13200 <642a> <642a> 3605 <642b> <642b> 13203 <642c> <642c> 1004 <642d> <642d> 1393 <642e> <6433> 13204 <6434> <6434> 5942 <6435> <6435> 13210 <6436> <6436> 8411 <6437> <6439> 13211 <643a> <643a> 3962 <643b> <643c> 13214 <643d> <643d> 1202 <643e> <643e> 13216 <643f> <643f> 6481 <6440> <6440> 13217 <6441> <6441> 5342 <6442> <6443> 13218 <6444> <6444> 3356 <6445> <6445> 5341 <6446> <6446> 997 <6447> <6447> 4136 <6448> <6448> 1120 <6449> <6449> 13220 <644a> <644a> 3586 <644b> <6450> 13221 <6451> <6451> 9056 <6452> <6452> 5338 <6453> <6453> 13227 <6454> <6454> 3481 <6455> <6457> 13228 <6458> <6458> 4427 <6459> <645b> 13231 <645c> <645c> 9057 <645d> <645d> 13234 <645e> <645e> 5349 <645f> <645f> 8256 <6460> <6466> 13235 <6467> <6467> 1376 <6468> <6468> 13242 <6469> <6469> 2825 <646a> <646c> 13243 <646d> <646d> 5351 <646e> <646e> 13246 <646f> <646f> 8846 <6470> <6472> 13247 <6473> <6473> 8159 <6474> <6475> 13250 <6476> <6476> 9054 <6477> <6477> 13252 <6478> <6479> 2819 <647a> <647a> 5353 <647b> <647b> 7786 <647c> <6481> 13253 <6482> <6482> 2581 <6483> <6483> 13259 <6484> <6484> 5350 <6485> <6485> 2334 <6486> <6486> 13260 <6487> <6487> 3025 <6488> <6488> 8194 <6489> <6490> 13261 <6491> <6491> 1258 endcidrange 100 begincidrange <6492> <6492> 3281 <6493> <6493> 8339 <6494> <6494> 13269 <6495> <6495> 3503 <6496> <6496> 5352 <6497> <6498> 13270 <6499> <6499> 5356 <649a> <649d> 13272 <649e> <649e> 4623 <649f> <649f> 9055 <64a0> <64a2> 13276 <64a3> <64a3> 7852 <64a4> <64a4> 1244 <64a5> <64a5> 7764 <64a6> <64a8> 13279 <64a9> <64a9> 2572 <64aa> <64aa> 13282 <64ab> <64ab> 7944 <64ac> <64ac> 3144 <64ad> <64ad> 1132 <64ae> <64ae> 1388 <64af> <64af> 13283 <64b0> <64b0> 4616 <64b1> <64b1> 13284 <64b2> <64b2> 8384 <64b3> <64b3> 9058 <64b4> <64b4> 13285 <64b5> <64b5> 2895 <64b6> <64b6> 13286 <64b7> <64b8> 5354 <64b9> <64b9> 13287 <64ba> <64ba> 5357 <64bb> <64bb> 8544 <64bc> <64bc> 1898 <64bd> <64bd> 13288 <64be> <64be> 8605 <64bf> <64bf> 8078 <64c0> <64c0> 5358 <64c1> <64c1> 8749 <64c2> <64c2> 2505 <64c3> <64c3> 13289 <64c4> <64c4> 8263 <64c5> <64c5> 3324 <64c6> <64c6> 13290 <64c7> <64c7> 8802 <64c8> <64c9> 13291 <64ca> <64ca> 8039 <64cb> <64cb> 7858 <64cc> <64cc> 13293 <64cd> <64cd> 1184 <64ce> <64ce> 3171 <64cf> <64cf> 13294 <64d0> <64d0> 5359 <64d1> <64d1> 13295 <64d2> <64d2> 3161 <64d3> <64d3> 13296 <64d4> <64d4> 7849 <64d5> <64d6> 13297 <64d7> <64d7> 5360 <64d8> <64d8> 6482 <64d9> <64d9> 13299 <64da> <64da> 8140 <64db> <64dd> 13300 <64de> <64de> 3528 <64df> <64df> 13303 <64e0> <64e0> 8050 <64e1> <64e1> 13304 <64e2> <64e2> 5362 <64e3> <64e3> 13305 <64e4> <64e4> 5361 <64e5> <64e5> 13306 <64e6> <64e6> 1160 <64e7> <64eb> 13307 <64ec> <64ec> 8344 <64ed> <64ee> 13312 <64ef> <64ef> 7762 <64f0> <64f0> 8356 <64f1> <64f1> 7964 <64f2> <64f2> 8847 <64f3> <64f3> 13314 <64f4> <64f4> 8173 <64f5> <64f6> 13315 <64f7> <64f7> 9061 <64f8> <64f9> 13317 <64fa> <64fa> 7725 <64fb> <64fb> 8530 <64fc> <64fc> 9062 <64fd> <64fd> 13319 <64fe> <64fe> 8442 <64ff> <64ff> 13320 <6500> <6500> 2955 <6501> <6503> 13321 <6504> <6504> 9059 <6505> <6505> 13324 <6506> <6506> 8346 <6507> <6508> 13325 <6509> <6509> 5363 <650a> <650e> 13327 <650f> <650f> 8252 <6510> <6511> 13332 endcidrange 100 begincidrange <6512> <6512> 4383 <6513> <6513> 13334 <6514> <6514> 8182 <6515> <6515> 13335 <6516> <6516> 9060 <6517> <6517> 13336 <6518> <6518> 3228 <6519> <6519> 7785 <651a> <651a> 13337 <651b> <651b> 9063 <651c> <651c> 13338 <651d> <651d> 8477 <651e> <6521> 13339 <6522> <6522> 8793 <6523> <6523> 8278 <6524> <6524> 8547 <6525> <6525> 5364 <6526> <6529> 13343 <652a> <652a> 8105 <652b> <652b> 2335 <652c> <652c> 8188 <652d> <652d> 13347 <652e> <652e> 5365 <652f> <652f> 4518 <6530> <6533> 13348 <6534> <6534> 6409 <6535> <6535> 6502 <6536> <6536> 3436 <6537> <6537> 13352 <6538> <6538> 4786 <6539> <6539> 1727 <653a> <653a> 13353 <653b> <653b> 1790 <653c> <653d> 13354 <653e> <653e> 1634 <653f> <653f> 4511 <6540> <6544> 13356 <6545> <6545> 1827 <6546> <6547> 13361 <6548> <6548> 3954 <6549> <6549> 7371 <654a> <654b> 13363 <654c> <654c> 1457 <654d> <654e> 13365 <654f> <654f> 2809 <6550> <6550> 13367 <6551> <6551> 2295 <6552> <6554> 13368 <6555> <6555> 6503 <6556> <6556> 968 <6557> <6557> 7726 <6558> <6558> 13371 <6559> <6559> 2205 <655a> <655a> 13372 <655b> <655b> 2555 <655c> <655c> 13373 <655d> <655d> 1087 <655e> <655e> 1229 <655f> <6561> 13374 <6562> <6562> 1741 <6563> <6563> 3291 <6564> <6565> 13377 <6566> <6566> 1559 <6567> <656a> 13379 <656b> <656b> 6504 <656c> <656c> 2275 <656d> <656f> 13383 <6570> <6570> 3476 <6571> <6571> 13386 <6572> <6572> 3136 <6573> <6573> 13387 <6574> <6574> 4508 <6575> <6575> 7868 <6576> <6576> 13388 <6577> <6577> 1680 <6578> <6578> 8514 <6579> <6581> 13389 <6582> <6582> 8222 <6583> <6583> 7747 <6584> <6586> 13398 <6587> <6587> 3795 <6588> <658a> 13401 <658b> <658b> 4428 <658c> <658c> 1116 <658d> <658f> 13404 <6590> <6590> 6593 <6591> <6591> 1002 <6592> <6592> 13407 <6593> <6593> 6595 <6594> <6594> 13408 <6595> <6595> 9428 <6596> <6596> 13409 <6597> <6597> 1526 <6598> <6598> 13410 <6599> <6599> 2584 <659a> <659a> 13411 <659b> <659b> 7510 <659c> <659c> 3964 <659d> <659e> 13412 <659f> <659f> 4486 endcidrange 100 begincidrange <65a0> <65a0> 13414 <65a1> <65a1> 3810 <65a2> <65a3> 13415 <65a4> <65a4> 2240 <65a5> <65a5> 1287 <65a6> <65a6> 13417 <65a7> <65a7> 1702 <65a8> <65a8> 13418 <65a9> <65a9> 4439 <65aa> <65aa> 13419 <65ab> <65ab> 6697 <65ac> <65ac> 8815 <65ad> <65ad> 1550 <65ae> <65ae> 13420 <65af> <65af> 3502 <65b0> <65b0> 3981 <65b1> <65b6> 13421 <65b7> <65b7> 7895 <65b8> <65b8> 13427 <65b9> <65b9> 1626 <65ba> <65bb> 13428 <65bc> <65bc> 6596 <65bd> <65bd> 3392 <65be> <65c0> 13430 <65c1> <65c1> 2965 <65c2> <65c2> 13433 <65c3> <65c3> 6599 <65c4> <65c4> 6598 <65c5> <65c5> 2666 <65c6> <65c6> 6597 <65c7> <65ca> 13434 <65cb> <65cb> 4040 <65cc> <65cc> 6600 <65cd> <65cd> 13438 <65ce> <65ce> 6601 <65cf> <65cf> 4674 <65d0> <65d1> 13439 <65d2> <65d2> 6602 <65d3> <65d5> 13441 <65d6> <65d6> 6603 <65d7> <65d7> 3083 <65d8> <65df> 13444 <65e0> <65e0> 3821 <65e1> <65e1> 13452 <65e2> <65e2> 2107 <65e3> <65e4> 13453 <65e5> <65e5> 3248 <65e6> <65e6> 1418 <65e7> <65e7> 2296 <65e8> <65e8> 4539 <65e9> <65e9> 4394 <65ea> <65eb> 13455 <65ec> <65ec> 4055 <65ed> <65ed> 4028 <65ee> <65f0> 6410 <65f1> <65f1> 1900 <65f2> <65f5> 13457 <65f6> <65f6> 3400 <65f7> <65f7> 2434 <65f8> <65f9> 13461 <65fa> <65fa> 3755 <65fb> <65ff> 13463 <6600> <6600> 6418 <6601> <6601> 13468 <6602> <6602> 965 <6603> <6603> 6416 <6604> <6605> 13469 <6606> <6606> 2448 <6607> <6609> 13471 <660a> <660a> 6413 <660b> <660b> 13474 <660c> <660c> 1220 <660d> <660d> 13475 <660e> <660e> 2812 <660f> <660f> 2045 <6610> <6612> 13476 <6613> <6613> 4190 <6614> <6614> 3843 <6615> <6615> 6417 <6616> <6618> 13479 <6619> <6619> 6414 <661a> <661c> 13482 <661d> <661d> 6421 <661e> <661e> 13485 <661f> <661f> 3986 <6620> <6620> 4248 <6621> <6624> 13486 <6625> <6625> 1341 <6626> <6626> 13490 <6627> <6627> 2758 <6628> <6628> 4687 <6629> <662c> 13491 <662d> <662d> 4466 <662e> <662e> 13495 <662f> <662f> 3422 <6630> <6630> 13496 <6631> <6631> 6423 <6632> <6633> 13497 <6634> <6634> 6422 <6635> <6635> 6425 endcidrange 100 begincidrange <6636> <6636> 6424 <6637> <663b> 13499 <663c> <663c> 4582 <663d> <663d> 13504 <663e> <663e> 3905 <663f> <6640> 13505 <6641> <6641> 6429 <6642> <6642> 8493 <6643> <6643> 2019 <6644> <664a> 13507 <664b> <664b> 2251 <664c> <664c> 3335 <664d> <664e> 13514 <664f> <664f> 6430 <6650> <6651> 13516 <6652> <6652> 3314 <6653> <6653> 3947 <6654> <6654> 6428 <6655> <6655> 4369 <6656> <6656> 6431 <6657> <6657> 6433 <6658> <6659> 13518 <665a> <665a> 3742 <665b> <665c> 13520 <665d> <665d> 8859 <665e> <665e> 13522 <665f> <665f> 6427 <6660> <6660> 13523 <6661> <6661> 6432 <6662> <6663> 13524 <6664> <6664> 3837 <6665> <6665> 13526 <6666> <6666> 2035 <6667> <6667> 13527 <6668> <6668> 1252 <6669> <666d> 13528 <666e> <666e> 3060 <666f> <666f> 2271 <6670> <6670> 3849 <6671> <6673> 13533 <6674> <6674> 3172 <6675> <6675> 13536 <6676> <6676> 2262 <6677> <6677> 6434 <6678> <6679> 13537 <667a> <667a> 4550 <667b> <667d> 13539 <667e> <667e> 2569 <667f> <6681> 13542 <6682> <6682> 4384 <6683> <6683> 13545 <6684> <6684> 6435 <6685> <6686> 13546 <6687> <6687> 3883 <6688> <6688> 8790 <6689> <6689> 9384 <668a> <668b> 13548 <668c> <668c> 6436 <668d> <6690> 13550 <6691> <6691> 3461 <6692> <6695> 13554 <6696> <6696> 2928 <6697> <6697> 960 <6698> <669c> 13558 <669d> <669d> 6438 <669e> <66a1> 13563 <66a2> <66a2> 7801 <66a3> <66a6> 13567 <66a7> <66a7> 6437 <66a8> <66a8> 7389 <66a9> <66aa> 13571 <66ab> <66ab> 8794 <66ac> <66ad> 13573 <66ae> <66ae> 2845 <66af> <66b3> 13575 <66b4> <66b4> 1042 <66b5> <66b8> 13580 <66b9> <66b9> 5979 <66ba> <66bd> 13584 <66be> <66be> 6439 <66bf> <66c3> 13588 <66c4> <66c4> 9383 <66c5> <66c5> 13593 <66c6> <66c6> 9862 <66c7> <66c7> 9382 <66c8> <66c8> 13594 <66c9> <66c9> 8654 <66ca> <66d5> 13595 <66d6> <66d6> 9385 <66d7> <66d8> 13607 <66d9> <66d9> 3462 <66da> <66da> 13609 <66db> <66dc> 6440 <66dd> <66dd> 3063 <66de> <66df> 13610 <66e0> <66e0> 8167 <66e1> <66e5> 13612 <66e6> <66e6> 6442 <66e7> <66e8> 13617 <66e9> <66e9> 6443 endcidrange 100 begincidrange <66ea> <66eb> 13619 <66ec> <66ec> 8466 <66ed> <66ef> 13621 <66f0> <66f0> 4350 <66f1> <66f1> 13624 <66f2> <66f2> 3191 <66f3> <66f3> 4158 <66f4> <66f4> 1783 <66f5> <66f6> 13625 <66f7> <66f7> 6420 <66f8> <66f8> 8508 <66f9> <66f9> 1187 <66fa> <66fb> 13627 <66fc> <66fc> 2723 <66fd> <66fd> 13629 <66fe> <66fe> 4411 <66ff> <66ff> 3641 <6700> <6700> 4683 <6701> <6702> 13630 <6703> <6703> 8028 <6704> <6707> 13632 <6708> <6708> 4357 <6709> <6709> 4277 <670a> <670a> 6515 <670b> <670b> 2996 <670c> <670c> 13636 <670d> <670d> 1691 <670e> <670f> 13637 <6710> <6710> 6532 <6711> <6713> 13639 <6714> <6714> 3500 <6715> <6715> 6542 <6716> <6716> 13642 <6717> <6717> 2485 <6718> <671a> 13643 <671b> <671b> 3756 <671c> <671c> 13646 <671d> <671d> 1236 <671e> <671e> 13647 <671f> <671f> 3065 <6720> <6725> 13648 <6726> <6726> 6572 <6727> <6727> 9412 <6728> <6728> 2849 <6729> <6729> 13654 <672a> <672a> 3779 <672b> <672b> 2828 <672c> <672c> 1063 <672d> <672d> 4416 <672e> <672e> 13655 <672f> <672f> 3468 <6730> <6730> 13656 <6731> <6731> 4587 <6732> <6733> 13657 <6734> <6734> 3058 <6735> <6735> 1571 <6736> <6739> 13659 <673a> <673a> 2063 <673b> <673c> 13663 <673d> <673d> 4011 <673e> <673f> 13665 <6740> <6740> 3306 <6741> <6741> 13667 <6742> <6742> 4374 <6743> <6743> 3203 <6744> <6745> 13668 <6746> <6746> 1734 <6747> <6747> 13670 <6748> <6748> 6228 <6749> <6749> 3317 <674a> <674b> 13671 <674c> <674c> 6225 <674d> <674d> 13673 <674e> <674e> 2521 <674f> <674f> 3998 <6750> <6750> 1163 <6751> <6751> 1384 <6752> <6752> 13674 <6753> <6753> 6226 <6754> <6755> 13675 <6756> <6756> 4457 <6757> <675b> 13677 <675c> <675c> 1540 <675d> <675d> 13682 <675e> <675e> 6227 <675f> <675f> 3471 <6760> <6760> 1751 <6761> <6761> 3656 <6762> <6764> 13683 <6765> <6765> 2463 <6766> <6767> 13686 <6768> <6768> 4119 <6769> <6769> 6229 <676a> <676a> 6232 <676b> <676c> 13688 <676d> <676d> 1907 <676e> <676e> 13690 <676f> <676f> 1046 <6770> <6770> 2221 <6771> <6771> 7884 endcidrange 100 begincidrange <6772> <6772> 6415 <6773> <6773> 6233 <6774> <6774> 13691 <6775> <6775> 6236 <6776> <6776> 13692 <6777> <6777> 6241 <6778> <677b> 13693 <677c> <677c> 6242 <677d> <677d> 13697 <677e> <677e> 3518 <677f> <677f> 1008 <6780> <6780> 13698 <6781> <6781> 2078 <6782> <6783> 13699 <6784> <6784> 1810 <6785> <6786> 13701 <6787> <6787> 6231 <6788> <6788> 13703 <6789> <6789> 3752 <678a> <678a> 13704 <678b> <678b> 6240 <678c> <678f> 13705 <6790> <6790> 3845 <6791> <6794> 13709 <6795> <6795> 4494 <6796> <6796> 13713 <6797> <6797> 2591 <6798> <6798> 6234 <6799> <6799> 13714 <679a> <679a> 2747 <679b> <679b> 13715 <679c> <679c> 1876 <679d> <679d> 4517 <679e> <679e> 6238 <679f> <67a1> 13716 <67a2> <67a2> 3447 <67a3> <67a3> 4393 <67a4> <67a4> 13719 <67a5> <67a5> 6230 <67a6> <67a6> 13720 <67a7> <67a7> 6235 <67a8> <67a8> 6237 <67a9> <67a9> 13721 <67aa> <67aa> 3126 <67ab> <67ab> 1664 <67ac> <67ac> 13722 <67ad> <67ad> 6239 <67ae> <67ae> 13723 <67af> <67af> 2410 <67b0> <67b0> 6248 <67b1> <67b2> 13724 <67b3> <67b3> 6253 <67b4> <67b4> 13726 <67b5> <67b5> 6251 <67b6> <67b6> 2127 <67b7> <67b7> 2114 <67b8> <67b8> 6257 <67b9> <67c0> 13727 <67c1> <67c1> 6260 <67c2> <67c2> 13735 <67c3> <67c3> 6256 <67c4> <67c4> 1123 <67c5> <67ce> 13736 <67cf> <67cf> 995 <67d0> <67d0> 2838 <67d1> <67d1> 1735 <67d2> <67d2> 3073 <67d3> <67d3> 3225 <67d4> <67d4> 3260 <67d5> <67d7> 13746 <67d8> <67d8> 6245 <67d9> <67d9> 6250 <67da> <67da> 6252 <67db> <67db> 13749 <67dc> <67dc> 1866 <67dd> <67dd> 6254 <67de> <67de> 4690 <67df> <67df> 13750 <67e0> <67e0> 2910 <67e1> <67e1> 13751 <67e2> <67e2> 6258 <67e3> <67e4> 13752 <67e5> <67e5> 1200 <67e6> <67e8> 13754 <67e9> <67e9> 6247 <67ea> <67eb> 13757 <67ec> <67ec> 2144 <67ed> <67ee> 13759 <67ef> <67ef> 2383 <67f0> <67f0> 6243 <67f1> <67f1> 4600 <67f2> <67f2> 13761 <67f3> <67f3> 2625 <67f4> <67f4> 1208 <67f5> <67fc> 13762 <67fd> <67fd> 6261 <67fe> <67fe> 13770 <67ff> <67ff> 3416 <6800> <6800> 6255 <6801> <6804> 13771 endcidrange 100 begincidrange <6805> <6805> 4421 <6806> <6806> 13775 <6807> <6807> 1107 <6808> <6808> 4444 <6809> <6809> 6244 <680a> <680a> 6246 <680b> <680b> 1519 <680c> <680c> 6249 <680d> <680d> 13776 <680e> <680e> 6259 <680f> <680f> 2467 <6810> <6810> 13777 <6811> <6811> 3470 <6812> <6812> 13778 <6813> <6813> 3485 <6814> <6815> 13779 <6816> <6816> 3067 <6817> <6817> 2528 <6818> <681c> 13781 <681d> <681d> 6271 <681e> <6820> 13786 <6821> <6821> 3950 <6822> <6828> 13789 <6829> <6829> 6280 <682a> <682a> 4585 <682b> <6831> 13796 <6832> <6833> 6262 <6834> <6836> 13803 <6837> <6837> 4130 <6838> <6838> 1922 <6839> <6839> 1780 <683a> <683b> 13806 <683c> <683c> 1772 <683d> <683d> 4375 <683e> <683e> 6277 <683f> <683f> 13808 <6840> <6840> 6276 <6841> <6841> 6274 <6842> <6842> 1865 <6843> <6843> 3621 <6844> <6844> 6268 <6845> <6845> 3765 <6846> <6846> 2431 <6847> <6847> 13809 <6848> <6848> 963 <6849> <6849> 6279 <684a> <684a> 6278 <684b> <684b> 13810 <684c> <684c> 4637 <684d> <684d> 13811 <684e> <684e> 6266 <684f> <684f> 13812 <6850> <6850> 3674 <6851> <6851> 3292 <6852> <6852> 13813 <6853> <6853> 1997 <6854> <6854> 2220 <6855> <6855> 6272 <6856> <685f> 13814 <6860> <6861> 6264 <6862> <6862> 6267 <6863> <6863> 1430 <6864> <6864> 6269 <6865> <6865> 3138 <6866> <6866> 6273 <6867> <6867> 6275 <6868> <6868> 2177 <6869> <6869> 4619 <686a> <686a> 13824 <686b> <686b> 6286 <686c> <6873> 13825 <6874> <6874> 6283 <6875> <6875> 13833 <6876> <6876> 3681 <6877> <6877> 6284 <6878> <6880> 13834 <6881> <6881> 2563 <6882> <6882> 13843 <6883> <6883> 6270 <6884> <6884> 13844 <6885> <6885> 2748 <6886> <6886> 1019 <6887> <688e> 13845 <688f> <688f> 6282 <6890> <6892> 13853 <6893> <6893> 6285 <6894> <6896> 13856 <6897> <6897> 1788 <6898> <6898> 9322 <6899> <689c> 13859 <689d> <689d> 8565 <689e> <689e> 13863 <689f> <689f> 9325 <68a0> <68a1> 13864 <68a2> <68a2> 3339 <68a3> <68a5> 13866 <68a6> <68a6> 2771 <68a7> <68a7> 3823 <68a8> <68a8> 2513 <68a9> <68ac> 13869 endcidrange 100 begincidrange <68ad> <68ad> 3560 <68ae> <68ae> 13873 <68af> <68af> 3632 <68b0> <68b0> 3968 <68b1> <68b2> 13874 <68b3> <68b3> 3448 <68b4> <68b4> 13876 <68b5> <68b5> 6281 <68b6> <68bf> 13877 <68c0> <68c0> 2143 <68c1> <68c1> 13887 <68c2> <68c2> 6287 <68c3> <68c8> 13888 <68c9> <68c9> 2787 <68ca> <68ca> 13894 <68cb> <68cb> 3076 <68cc> <68cc> 13895 <68cd> <68cd> 1872 <68ce> <68d1> 13896 <68d2> <68d2> 1023 <68d3> <68d4> 13900 <68d5> <68d5> 4661 <68d6> <68d6> 9323 <68d7> <68d7> 8799 <68d8> <68d8> 2079 <68d9> <68d9> 13902 <68da> <68da> 2992 <68db> <68de> 13903 <68df> <68df> 7886 <68e0> <68e0> 3607 <68e1> <68e2> 13907 <68e3> <68e3> 6298 <68e4> <68e6> 13909 <68e7> <68e7> 8818 <68e8> <68ed> 13912 <68ee> <68ee> 3302 <68ef> <68ef> 13918 <68f0> <68f0> 6294 <68f1> <68f1> 2509 <68f2> <68f4> 13919 <68f5> <68f5> 2384 <68f6> <68f8> 13922 <68f9> <68f9> 6292 <68fa> <68fa> 1840 <68fb> <68fb> 13925 <68fc> <68fc> 6289 <68fd> <68ff> 13926 <6900> <6900> 13929 <6901> <6901> 6296 <6902> <6904> 13930 <6905> <6905> 4181 <6906> <690a> 13933 <690b> <690b> 6295 <690c> <690c> 13938 <690d> <690d> 4529 <690e> <690e> 4626 <690f> <690f> 9331 <6910> <6910> 6299 <6911> <6911> 13939 <6912> <6912> 2184 <6913> <691e> 13940 <691f> <6920> 6290 <6921> <6923> 13952 <6924> <6924> 6293 <6925> <692c> 13955 <692d> <692d> 3719 <692e> <692f> 13963 <6930> <6930> 4147 <6931> <6933> 13965 <6934> <6934> 6310 <6935> <6938> 13968 <6939> <6939> 6301 <693a> <693c> 13972 <693d> <693d> 1325 <693e> <693e> 13975 <693f> <693f> 1342 <6940> <6941> 13976 <6942> <6942> 6303 <6943> <6949> 13978 <694a> <694a> 8702 <694b> <6952> 13985 <6953> <6953> 7934 <6954> <6954> 3955 <6955> <6956> 13993 <6957> <6957> 6297 <6958> <6959> 13995 <695a> <695a> 1315 <695b> <695c> 13997 <695d> <695d> 6304 <695e> <695e> 2510 <695f> <695f> 13999 <6960> <6960> 6302 <6961> <6962> 14000 <6963> <6963> 6317 <6964> <6965> 14002 <6966> <6966> 6316 <6967> <6967> 14004 <6968> <6968> 9333 <6969> <696a> 14005 <696b> <696b> 6306 endcidrange 100 begincidrange <696c> <696c> 14007 <696d> <696d> 8714 <696e> <696e> 6288 <696f> <6970> 14008 <6971> <6971> 6300 <6972> <6974> 14010 <6975> <6975> 8047 <6976> <6976> 14013 <6977> <6977> 2361 <6978> <6978> 6309 <6979> <6979> 6318 <697a> <697b> 14014 <697c> <697c> 2636 <697d> <697f> 14016 <6980> <6980> 6307 <6981> <6981> 14019 <6982> <6982> 1728 <6983> <6983> 14020 <6984> <6984> 6305 <6985> <6985> 14021 <6986> <6986> 4289 <6987> <6988> 6312 <6989> <6989> 6315 <698a> <698c> 14022 <698d> <698d> 6331 <698e> <6993> 14025 <6994> <6994> 2481 <6995> <6995> 6329 <6996> <6997> 14031 <6998> <6998> 6308 <6999> <699a> 14033 <699b> <699b> 6319 <699c> <699c> 1020 <699d> <69a6> 14035 <69a7> <69a7> 6320 <69a8> <69a8> 4422 <69a9> <69a9> 14045 <69aa> <69aa> 9320 <69ab> <69ab> 6322 <69ac> <69ac> 14046 <69ad> <69ad> 6323 <69ae> <69ae> 8448 <69af> <69b0> 14047 <69b1> <69b1> 6325 <69b2> <69b3> 14049 <69b4> <69b4> 2618 <69b5> <69b6> 14051 <69b7> <69b7> 3217 <69b8> <69ba> 14053 <69bb> <69bb> 6321 <69bc> <69be> 14056 <69bf> <69bf> 9334 <69c0> <69c0> 14059 <69c1> <69c1> 6326 <69c2> <69c9> 14060 <69ca> <69ca> 6327 <69cb> <69cb> 7975 <69cc> <69cc> 6311 <69cd> <69cd> 8407 <69ce> <69ce> 6314 <69cf> <69cf> 14068 <69d0> <69d0> 1990 <69d1> <69d3> 14069 <69d4> <69d4> 6324 <69d5> <69da> 14072 <69db> <69db> 2154 <69dc> <69de> 14078 <69df> <69df> 6328 <69e0> <69e0> 6330 <69e1> <69e6> 14081 <69e7> <69e7> 9340 <69e8> <69ec> 14087 <69ed> <69ed> 6334 <69ee> <69f1> 14092 <69f2> <69f2> 6338 <69f3> <69f3> 8097 <69f4> <69fc> 14096 <69fd> <69fd> 1186 <69fe> <69fe> 14105 <69ff> <69ff> 6332 <6a00> <6a00> 14106 <6a01> <6a01> 8874 <6a02> <6a02> 8197 <6a03> <6a04> 14107 <6a05> <6a05> 9324 <6a06> <6a09> 14109 <6a0a> <6a0a> 1611 <6a0b> <6a12> 14113 <6a13> <6a13> 8254 <6a14> <6a16> 14121 <6a17> <6a18> 6335 <6a19> <6a19> 7756 <6a1a> <6a1d> 14124 <6a1e> <6a1e> 8506 <6a1f> <6a1f> 4450 <6a20> <6a20> 14128 <6a21> <6a21> 2822 <6a22> <6a22> 14129 <6a23> <6a23> 8708 <6a24> <6a27> 14130 endcidrange 100 begincidrange <6a28> <6a28> 6348 <6a29> <6a29> 14134 <6a2a> <6a2a> 1944 <6a2b> <6a2e> 14135 <6a2f> <6a2f> 6333 <6a30> <6a30> 14139 <6a31> <6a31> 4232 <6a32> <6a34> 14140 <6a35> <6a35> 6344 <6a36> <6a37> 14143 <6a38> <6a38> 8387 <6a39> <6a39> 8512 <6a3a> <6a3a> 9335 <6a3b> <6a3c> 14145 <6a3d> <6a3d> 6347 <6a3e> <6a3e> 6340 <6a3f> <6a43> 14147 <6a44> <6a44> 6339 <6a45> <6a46> 14152 <6a47> <6a47> 3134 <6a48> <6a48> 9332 <6a49> <6a4a> 14154 <6a4b> <6a4b> 8413 <6a4c> <6a4f> 14156 <6a50> <6a50> 6342 <6a51> <6a57> 14160 <6a58> <6a58> 6349 <6a59> <6a59> 1261 <6a5a> <6a5a> 14167 <6a5b> <6a5b> 6343 <6a5c> <6a5e> 14168 <6a5f> <6a5f> 8040 <6a60> <6a60> 14171 <6a61> <6a61> 3933 <6a62> <6a62> 8581 <6a63> <6a64> 14172 <6a65> <6a65> 6337 <6a66> <6a70> 14174 <6a71> <6a71> 1308 <6a72> <6a78> 14185 <6a79> <6a79> 6346 <6a7a> <6a7b> 14192 <6a7c> <6a7c> 6350 <6a7d> <6a7f> 14194 <6a80> <6a80> 3591 <6a81> <6a83> 14197 <6a84> <6a84> 3866 <6a85> <6a88> 14200 <6a89> <6a89> 9330 <6a8a> <6a8d> 14204 <6a8e> <6a8e> 6345 <6a8f> <6a8f> 14208 <6a90> <6a90> 6352 <6a91> <6a91> 6351 <6a92> <6a93> 14209 <6a94> <6a94> 7861 <6a95> <6a96> 14211 <6a97> <6a97> 6354 <6a98> <6a9b> 14213 <6a9c> <6a9c> 9336 <6a9d> <6a9f> 14217 <6aa0> <6aa0> 6341 <6aa1> <6aa1> 14220 <6aa2> <6aa2> 8075 <6aa3> <6aa3> 9348 <6aa4> <6aa8> 14221 <6aa9> <6aa9> 6353 <6aaa> <6aaa> 14226 <6aab> <6aab> 6355 <6aac> <6aac> 2767 <6aad> <6aae> 14227 <6aaf> <6aaf> 9881 <6ab0> <6ab2> 14229 <6ab3> <6ab3> 9346 <6ab4> <6ab7> 14232 <6ab8> <6ab8> 8353 <6ab9> <6aba> 14236 <6abb> <6abb> 8082 <6abc> <6ac2> 14238 <6ac3> <6ac3> 7992 <6ac4> <6ad2> 14245 <6ad3> <6ad3> 9349 <6ad4> <6ad9> 14260 <6ada> <6ada> 9344 <6adb> <6adb> 9326 <6adc> <6adc> 14266 <6add> <6add> 9339 <6ade> <6ade> 9350 <6adf> <6adf> 9329 <6ae0> <6ae6> 14267 <6ae7> <6ae7> 9347 <6ae8> <6ae8> 9328 <6ae9> <6ae9> 14274 <6aea> <6aea> 9321 <6aeb> <6aeb> 14275 <6aec> <6aec> 9343 <6aed> <6af2> 14276 <6af3> <6af3> 9327 <6af4> <6af7> 14282 <6af8> <6af8> 9345 endcidrange 100 begincidrange <6af9> <6afa> 14286 <6afb> <6afb> 8736 <6afc> <6aff> 14288 <6b00> <6b03> 14292 <6b04> <6b04> 8181 <6b05> <6b09> 14296 <6b0a> <6b0a> 8436 <6b0b> <6b0e> 14301 <6b0f> <6b0f> 9341 <6b10> <6b11> 14305 <6b12> <6b12> 9337 <6b13> <6b15> 14307 <6b16> <6b16> 9342 <6b17> <6b1d> 14310 <6b1e> <6b1e> 9338 <6b1f> <6b1f> 14317 <6b20> <6b20> 3124 <6b21> <6b21> 1361 <6b22> <6b22> 1995 <6b23> <6b23> 3979 <6b24> <6b24> 6577 <6b25> <6b26> 14318 <6b27> <6b27> 2936 <6b28> <6b31> 14320 <6b32> <6b32> 4320 <6b33> <6b36> 14330 <6b37> <6b37> 6578 <6b38> <6b38> 14334 <6b39> <6b39> 6579 <6b3a> <6b3a> 3066 <6b3b> <6b3c> 14335 <6b3d> <6b3d> 8419 <6b3e> <6b3e> 2427 <6b3f> <6b42> 14337 <6b43> <6b43> 6580 <6b44> <6b45> 14341 <6b46> <6b46> 6581 <6b47> <6b47> 3957 <6b48> <6b48> 14343 <6b49> <6b49> 3125 <6b4a> <6b4b> 14344 <6b4c> <6b4c> 1763 <6b4d> <6b4f> 14346 <6b50> <6b50> 8365 <6b51> <6b58> 14349 <6b59> <6b59> 6582 <6b5a> <6b5e> 14357 <6b5f> <6b5f> 9419 <6b60> <6b60> 14362 <6b61> <6b61> 8019 <6b62> <6b62> 4536 <6b63> <6b63> 4510 <6b64> <6b64> 1358 <6b65> <6b65> 1156 <6b66> <6b66> 3827 <6b67> <6b67> 3078 <6b68> <6b69> 14363 <6b6a> <6b6a> 3730 <6b6b> <6b71> 14365 <6b72> <6b72> 8537 <6b73> <6b76> 14372 <6b77> <6b77> 8211 <6b78> <6b78> 7987 <6b79> <6b79> 1400 <6b7a> <6b7a> 14376 <6b7b> <6b7b> 3509 <6b7c> <6b7c> 2130 <6b7d> <6b80> 14377 <6b81> <6b82> 6358 <6b83> <6b83> 4115 <6b84> <6b84> 6361 <6b85> <6b85> 14381 <6b86> <6b86> 1404 <6b87> <6b87> 6360 <6b88> <6b88> 14382 <6b89> <6b89> 4060 <6b8a> <6b8a> 3449 <6b8b> <6b8b> 1175 <6b8c> <6b8c> 14383 <6b8d> <6b8d> 6364 <6b8e> <6b91> 14384 <6b92> <6b93> 6362 <6b94> <6b95> 14388 <6b96> <6b96> 4530 <6b97> <6b97> 14390 <6b98> <6b98> 7772 <6b99> <6b99> 14391 <6b9a> <6b9b> 6365 <6b9c> <6b9d> 14392 <6b9e> <6b9e> 9352 <6b9f> <6ba0> 14394 <6ba1> <6ba1> 6367 <6ba2> <6ba3> 14396 <6ba4> <6ba4> 9351 <6ba5> <6ba9> 14398 <6baa> <6baa> 6368 <6bab> <6bab> 9354 <6bac> <6bad> 14403 <6bae> <6bae> 9353 <6baf> <6baf> 9355 endcidrange 100 begincidrange <6bb0> <6bb1> 14405 <6bb2> <6bb2> 8067 <6bb3> <6bb3> 6589 <6bb4> <6bb4> 2938 <6bb5> <6bb5> 1549 <6bb6> <6bb6> 14407 <6bb7> <6bb7> 4218 <6bb8> <6bb9> 14408 <6bba> <6bba> 8463 <6bbb> <6bbb> 8155 <6bbc> <6bbe> 14410 <6bbf> <6bbf> 1487 <6bc0> <6bc0> 14413 <6bc1> <6bc1> 2030 <6bc2> <6bc2> 6591 <6bc3> <6bc4> 14414 <6bc5> <6bc5> 4202 <6bc6> <6bc6> 8367 <6bc7> <6bca> 14416 <6bcb> <6bcb> 3826 <6bcc> <6bcc> 14420 <6bcd> <6bcd> 2843 <6bce> <6bce> 14421 <6bcf> <6bcf> 2756 <6bd0> <6bd1> 14422 <6bd2> <6bd2> 1533 <6bd3> <6bd3> 4719 <6bd4> <6bd4> 1073 <6bd5> <6bd5> 1080 <6bd6> <6bd6> 1082 <6bd7> <6bd7> 3007 <6bd8> <6bd8> 14424 <6bd9> <6bd9> 1081 <6bda> <6bda> 14425 <6bdb> <6bdb> 2736 <6bdc> <6be0> 14426 <6be1> <6be1> 4434 <6be2> <6be9> 14431 <6bea> <6bea> 6484 <6beb> <6beb> 1912 <6bec> <6bee> 14439 <6bef> <6bef> 3597 <6bf0> <6bf2> 14442 <6bf3> <6bf3> 6485 <6bf4> <6bf4> 14445 <6bf5> <6bf5> 6487 <6bf6> <6bf8> 14446 <6bf9> <6bf9> 6488 <6bfa> <6bfc> 14449 <6bfd> <6bfd> 6486 <6bfe> <6bfe> 14452 <6bff> <6bff> 9408 <6c00> <6c04> 14453 <6c05> <6c05> 6489 <6c06> <6c06> 6491 <6c07> <6c07> 6490 <6c08> <6c08> 8813 <6c09> <6c0b> 14458 <6c0c> <6c0c> 9409 <6c0d> <6c0d> 6492 <6c0e> <6c0e> 14461 <6c0f> <6c0f> 3430 <6c10> <6c10> 4715 <6c11> <6c11> 2806 <6c12> <6c12> 14462 <6c13> <6c13> 2730 <6c14> <6c14> 3095 <6c15> <6c15> 6493 <6c16> <6c16> 2861 <6c17> <6c17> 14463 <6c18> <6c1a> 6494 <6c1b> <6c1b> 1650 <6c1c> <6c1e> 14464 <6c1f> <6c1f> 1687 <6c20> <6c20> 14467 <6c21> <6c21> 6497 <6c22> <6c22> 3167 <6c23> <6c23> 8394 <6c24> <6c24> 6499 <6c25> <6c25> 14468 <6c26> <6c26> 1883 <6c27> <6c27> 4126 <6c28> <6c28> 956 <6c29> <6c29> 6498 <6c2a> <6c2a> 6500 <6c2b> <6c2b> 8423 <6c2c> <6c2c> 9410 <6c2d> <6c2d> 14469 <6c2e> <6c2e> 1419 <6c2f> <6c2f> 2671 <6c30> <6c30> 3173 <6c31> <6c31> 14470 <6c32> <6c32> 6501 <6c33> <6c33> 14471 <6c34> <6c34> 3491 <6c35> <6c35> 5791 <6c36> <6c37> 14472 <6c38> <6c38> 4261 <6c39> <6c3c> 14474 <6c3d> <6c3d> 4847 endcidrange 100 begincidrange <6c3e> <6c3f> 14478 <6c40> <6c40> 3666 <6c41> <6c41> 4524 <6c42> <6c42> 3184 <6c43> <6c45> 14480 <6c46> <6c46> 4852 <6c47> <6c47> 2040 <6c48> <6c48> 14483 <6c49> <6c49> 1905 <6c4a> <6c4a> 5794 <6c4b> <6c4f> 14484 <6c50> <6c50> 3864 <6c51> <6c53> 14489 <6c54> <6c54> 5792 <6c55> <6c55> 3328 <6c56> <6c56> 14492 <6c57> <6c57> 1904 <6c58> <6c5a> 14493 <6c5b> <6c5b> 4061 <6c5c> <6c5c> 5793 <6c5d> <6c5d> 3269 <6c5e> <6c5e> 1800 <6c5f> <6c5f> 2174 <6c60> <6c60> 1277 <6c61> <6c61> 3818 <6c62> <6c63> 14496 <6c64> <6c64> 3603 <6c65> <6c67> 14498 <6c68> <6c69> 5800 <6c6a> <6c6a> 3749 <6c6b> <6c6f> 14501 <6c70> <6c70> 3584 <6c71> <6c71> 14506 <6c72> <6c72> 2086 <6c73> <6c73> 14507 <6c74> <6c74> 5802 <6c75> <6c75> 14508 <6c76> <6c76> 5803 <6c77> <6c78> 14509 <6c79> <6c79> 4005 <6c7a> <6c7c> 14511 <6c7d> <6c7d> 3098 <6c7e> <6c7e> 1655 <6c7f> <6c80> 14514 <6c81> <6c81> 3164 <6c82> <6c82> 4177 <6c83> <6c83> 3813 <6c84> <6c84> 14516 <6c85> <6c85> 5796 <6c86> <6c86> 5804 <6c87> <6c87> 14517 <6c88> <6c88> 3371 <6c89> <6c89> 1254 <6c8a> <6c8b> 14518 <6c8c> <6c8c> 5799 <6c8d> <6c8e> 14520 <6c8f> <6c8f> 3074 <6c90> <6c90> 5797 <6c91> <6c92> 14522 <6c93> <6c93> 6687 <6c94> <6c94> 5798 <6c95> <6c98> 14524 <6c99> <6c99> 3308 <6c9a> <6c9a> 14528 <6c9b> <6c9b> 2983 <6c9c> <6c9e> 14529 <6c9f> <6c9f> 1806 <6ca0> <6ca0> 14532 <6ca1> <6ca1> 2752 <6ca2> <6ca2> 14533 <6ca3> <6ca3> 5795 <6ca4> <6ca4> 2942 <6ca5> <6ca5> 2541 <6ca6> <6ca6> 2688 <6ca7> <6ca7> 1182 <6ca8> <6ca8> 14534 <6ca9> <6ca9> 5805 <6caa> <6caa> 1979 <6cab> <6cab> 2832 <6cac> <6cac> 14535 <6cad> <6cad> 5808 <6cae> <6cae> 2313 <6caf> <6cb0> 14536 <6cb1> <6cb1> 5819 <6cb2> <6cb2> 5813 <6cb3> <6cb3> 1930 <6cb4> <6cb7> 14538 <6cb8> <6cb8> 1645 <6cb9> <6cb9> 4274 <6cba> <6cba> 14542 <6cbb> <6cbb> 4557 <6cbc> <6cbc> 4468 <6cbd> <6cbd> 1818 <6cbe> <6cbe> 4437 <6cbf> <6cbf> 4097 <6cc0> <6cc3> 14543 <6cc4> <6cc4> 3972 <6cc5> <6cc5> 3187 <6cc6> <6cc8> 14547 <6cc9> <6cc9> 3205 endcidrange 100 begincidrange <6cca> <6cca> 1147 <6ccb> <6ccb> 14550 <6ccc> <6ccc> 2783 <6ccd> <6ccf> 14551 <6cd0> <6cd0> 5806 <6cd1> <6cd2> 14554 <6cd3> <6cd3> 5820 <6cd4> <6cd4> 5807 <6cd5> <6cd5> 1605 <6cd6> <6cd6> 5815 <6cd7> <6cd7> 5812 <6cd8> <6cda> 14556 <6cdb> <6cdb> 1623 <6cdc> <6cdd> 14559 <6cde> <6cde> 2915 <6cdf> <6cdf> 14561 <6ce0> <6ce0> 5814 <6ce1> <6ce1> 2974 <6ce2> <6ce2> 1135 <6ce3> <6ce3> 3099 <6ce4> <6ce4> 14562 <6ce5> <6ce5> 2883 <6ce6> <6ce7> 14563 <6ce8> <6ce8> 4607 <6ce9> <6ce9> 14565 <6cea> <6cea> 2508 <6ceb> <6ceb> 5817 <6cec> <6ced> 14566 <6cee> <6cee> 5818 <6cef> <6cef> 5821 <6cf0> <6cf0> 3580 <6cf1> <6cf1> 5811 <6cf2> <6cf2> 14568 <6cf3> <6cf3> 4259 <6cf4> <6cf4> 14569 <6cf5> <6cf5> 1068 <6cf6> <6cf6> 6688 <6cf7> <6cf8> 5809 <6cf9> <6cf9> 14570 <6cfa> <6cfa> 5816 <6cfb> <6cfb> 3973 <6cfc> <6cfc> 3042 <6cfd> <6cfd> 4406 <6cfe> <6cfe> 5822 <6cff> <6cff> 14571 <6d00> <6d00> 14572 <6d01> <6d01> 2225 <6d02> <6d03> 14573 <6d04> <6d04> 5829 <6d05> <6d06> 14575 <6d07> <6d07> 5828 <6d08> <6d0a> 14577 <6d0b> <6d0b> 4124 <6d0c> <6d0c> 5825 <6d0d> <6d0d> 14580 <6d0e> <6d0e> 5831 <6d0f> <6d11> 14581 <6d12> <6d12> 3282 <6d13> <6d16> 14584 <6d17> <6d17> 3873 <6d18> <6d18> 14588 <6d19> <6d19> 5830 <6d1a> <6d1a> 5836 <6d1b> <6d1b> 2700 <6d1c> <6d1d> 14589 <6d1e> <6d1e> 1523 <6d1f> <6d24> 14591 <6d25> <6d25> 2243 <6d26> <6d26> 14597 <6d27> <6d27> 5824 <6d28> <6d29> 14598 <6d2a> <6d2a> 1952 <6d2b> <6d2b> 5832 <6d2c> <6d2d> 14600 <6d2e> <6d2e> 5834 <6d2f> <6d30> 14602 <6d31> <6d31> 1596 <6d32> <6d32> 4573 <6d33> <6d33> 5840 <6d34> <6d34> 14604 <6d35> <6d35> 5835 <6d36> <6d38> 14605 <6d39> <6d39> 5823 <6d3a> <6d3a> 14608 <6d3b> <6d3b> 2051 <6d3c> <6d3c> 3726 <6d3d> <6d3d> 3103 <6d3e> <6d3e> 2954 <6d3f> <6d40> 14609 <6d41> <6d41> 2624 <6d42> <6d42> 14611 <6d43> <6d43> 5826 <6d44> <6d44> 14612 <6d45> <6d45> 3120 <6d46> <6d46> 2173 <6d47> <6d47> 2190 <6d48> <6d48> 5827 <6d49> <6d49> 14613 <6d4a> <6d4a> 4644 <6d4b> <6d4b> 1193 endcidrange 100 begincidrange <6d4c> <6d4c> 14614 <6d4d> <6d4d> 5833 <6d4e> <6d4e> 2102 <6d4f> <6d4f> 5837 <6d50> <6d50> 14615 <6d51> <6d51> 2048 <6d52> <6d52> 5838 <6d53> <6d53> 2921 <6d54> <6d54> 5839 <6d55> <6d58> 14616 <6d59> <6d59> 4484 <6d5a> <6d5a> 2352 <6d5b> <6d5b> 14620 <6d5c> <6d5c> 5848 <6d5d> <6d5d> 14621 <6d5e> <6d5e> 5845 <6d5f> <6d5f> 14622 <6d60> <6d60> 5849 <6d61> <6d62> 14623 <6d63> <6d63> 5851 <6d64> <6d65> 14625 <6d66> <6d66> 3061 <6d67> <6d68> 14627 <6d69> <6d69> 1917 <6d6a> <6d6a> 2486 <6d6b> <6d6d> 14629 <6d6e> <6d6e> 1692 <6d6f> <6d6f> 5842 <6d70> <6d73> 14632 <6d74> <6d74> 4324 <6d75> <6d76> 14636 <6d77> <6d77> 1882 <6d78> <6d78> 2255 <6d79> <6d79> 9180 <6d7a> <6d7b> 14638 <6d7c> <6d7c> 5850 <6d7d> <6d81> 14640 <6d82> <6d82> 3696 <6d83> <6d84> 14645 <6d85> <6d85> 2908 <6d86> <6d86> 14647 <6d87> <6d87> 9179 <6d88> <6d88> 3944 <6d89> <6d89> 3359 <6d8a> <6d8b> 14648 <6d8c> <6d8c> 4260 <6d8d> <6d8d> 14650 <6d8e> <6d8e> 3902 <6d8f> <6d90> 14651 <6d91> <6d91> 5841 <6d92> <6d92> 14653 <6d93> <6d94> 5846 <6d95> <6d95> 3644 <6d96> <6d9a> 14654 <6d9b> <6d9b> 3617 <6d9c> <6d9c> 14659 <6d9d> <6d9d> 2495 <6d9e> <6d9e> 5843 <6d9f> <6d9f> 2553 <6da0> <6da0> 5844 <6da1> <6da1> 3807 <6da2> <6da2> 14660 <6da3> <6da3> 2006 <6da4> <6da4> 1460 <6da5> <6da5> 14661 <6da6> <6da6> 3278 <6da7> <6da7> 2168 <6da8> <6da8> 4456 <6da9> <6da9> 3301 <6daa> <6daa> 1693 <6dab> <6dab> 5864 <6dac> <6dad> 14662 <6dae> <6dae> 5866 <6daf> <6daf> 4077 <6db0> <6db1> 14664 <6db2> <6db2> 4161 <6db3> <6db4> 14666 <6db5> <6db5> 1892 <6db6> <6db7> 14668 <6db8> <6db8> 1931 <6db9> <6dbe> 14670 <6dbf> <6dbf> 5857 <6dc0> <6dc0> 1486 <6dc1> <6dc3> 14676 <6dc4> <6dc4> 4650 <6dc5> <6dc5> 5854 <6dc6> <6dc6> 3946 <6dc7> <6dc7> 5853 <6dc8> <6dca> 14679 <6dcb> <6dcb> 2597 <6dcc> <6dcc> 3613 <6dcd> <6dd0> 14682 <6dd1> <6dd1> 3454 <6dd2> <6dd5> 14686 <6dd6> <6dd6> 2874 <6dd7> <6dd7> 14690 <6dd8> <6dd8> 3623 <6dd9> <6dd9> 5862 <6dda> <6ddc> 14691 <6ddd> <6ddd> 5861 endcidrange 100 begincidrange <6dde> <6dde> 5855 <6ddf> <6ddf> 14694 <6de0> <6de0> 5858 <6de1> <6de1> 1422 <6de2> <6de3> 14695 <6de4> <6de4> 4286 <6de5> <6de5> 14697 <6de6> <6de6> 5860 <6de7> <6de9> 14698 <6dea> <6dea> 8286 <6deb> <6deb> 4224 <6dec> <6dec> 1382 <6ded> <6ded> 14701 <6dee> <6dee> 1993 <6def> <6df0> 14702 <6df1> <6df1> 3367 <6df2> <6df2> 14704 <6df3> <6df3> 1345 <6df4> <6df4> 14705 <6df5> <6df5> 8772 <6df6> <6df6> 9186 <6df7> <6df7> 2049 <6df8> <6df8> 14706 <6df9> <6df9> 4086 <6dfa> <6dfa> 8404 <6dfb> <6dfb> 3648 <6dfc> <6dfc> 6689 <6dfd> <6dff> 14707 <6e00> <6e04> 14710 <6e05> <6e05> 3170 <6e06> <6e09> 14715 <6e0a> <6e0a> 4331 <6e0b> <6e0b> 14719 <6e0c> <6e0c> 5865 <6e0d> <6e0d> 4658 <6e0e> <6e0e> 5856 <6e0f> <6e0f> 14720 <6e10> <6e10> 2166 <6e11> <6e11> 5859 <6e12> <6e13> 14721 <6e14> <6e14> 4299 <6e15> <6e15> 14723 <6e16> <6e16> 5863 <6e17> <6e17> 3377 <6e18> <6e19> 14724 <6e1a> <6e1a> 5852 <6e1b> <6e1c> 14726 <6e1d> <6e1d> 4298 <6e1e> <6e1f> 14728 <6e20> <6e20> 3195 <6e21> <6e21> 1544 <6e22> <6e22> 14730 <6e23> <6e23> 4415 <6e24> <6e24> 1146 <6e25> <6e25> 5877 <6e26> <6e26> 8607 <6e27> <6e28> 14731 <6e29> <6e29> 3793 <6e2a> <6e2a> 14733 <6e2b> <6e2b> 5867 <6e2c> <6e2c> 7782 <6e2d> <6e2d> 3787 <6e2e> <6e2e> 14734 <6e2f> <6e2f> 1750 <6e30> <6e31> 14735 <6e32> <6e32> 5876 <6e33> <6e33> 14737 <6e34> <6e34> 2391 <6e35> <6e37> 14738 <6e38> <6e38> 4275 <6e39> <6e39> 14741 <6e3a> <6e3a> 2801 <6e3b> <6e3d> 14742 <6e3e> <6e3e> 8035 <6e3f> <6e42> 14745 <6e43> <6e43> 2953 <6e44> <6e44> 5878 <6e45> <6e4c> 14749 <6e4d> <6e4d> 3701 <6e4e> <6e4e> 5869 <6e4f> <6e52> 14757 <6e53> <6e54> 5874 <6e55> <6e55> 14761 <6e56> <6e56> 1973 <6e57> <6e57> 14762 <6e58> <6e58> 3923 <6e59> <6e5a> 14763 <6e5b> <6e5b> 4448 <6e5c> <6e5d> 14765 <6e5e> <6e5e> 9181 <6e5f> <6e5f> 5872 <6e60> <6e6a> 14767 <6e6b> <6e6b> 5870 <6e6c> <6e6d> 14778 <6e6e> <6e6e> 5868 <6e6f> <6e6f> 8555 <6e70> <6e7d> 14780 <6e7e> <6e7e> 3734 <6e7f> <6e7f> 3393 <6e80> <6e82> 14794 endcidrange 100 begincidrange <6e83> <6e83> 2446 <6e84> <6e84> 14797 <6e85> <6e85> 2167 <6e86> <6e86> 5873 <6e87> <6e88> 14798 <6e89> <6e89> 1731 <6e8a> <6e8e> 14800 <6e8f> <6e8f> 5893 <6e90> <6e90> 4343 <6e91> <6e95> 14805 <6e96> <6e96> 8885 <6e97> <6e97> 14810 <6e98> <6e98> 5881 <6e99> <6e9b> 14811 <6e9c> <6e9c> 2616 <6e9d> <6e9d> 7974 <6e9e> <6e9e> 14814 <6e9f> <6e9f> 5895 <6ea0> <6ea1> 14815 <6ea2> <6ea2> 4206 <6ea3> <6ea4> 14817 <6ea5> <6ea5> 5885 <6ea6> <6ea6> 14819 <6ea7> <6ea7> 5886 <6ea8> <6ea9> 14820 <6eaa> <6eaa> 3863 <6eab> <6eae> 14822 <6eaf> <6eaf> 3538 <6eb0> <6eb0> 14826 <6eb1> <6eb1> 5880 <6eb2> <6eb2> 5871 <6eb3> <6eb3> 14827 <6eb4> <6eb4> 5891 <6eb5> <6eb5> 14828 <6eb6> <6eb6> 3255 <6eb7> <6eb7> 5889 <6eb8> <6eb9> 14829 <6eba> <6eba> 2890 <6ebb> <6ebb> 5888 <6ebc> <6ebc> 14831 <6ebd> <6ebd> 5887 <6ebe> <6ec0> 14832 <6ec1> <6ec1> 1313 <6ec2> <6ec2> 5894 <6ec3> <6ec3> 14835 <6ec4> <6ec4> 7779 <6ec5> <6ec5> 8328 <6ec6> <6ec6> 14836 <6ec7> <6ec7> 1474 <6ec8> <6eca> 14837 <6ecb> <6ecb> 4649 <6ecc> <6ecc> 7869 <6ecd> <6ecd> 14840 <6ece> <6ece> 9025 <6ecf> <6ecf> 5892 <6ed0> <6ed0> 14841 <6ed1> <6ed1> 1985 <6ed2> <6ed2> 14842 <6ed3> <6ed3> 4655 <6ed4> <6ed4> 3618 <6ed5> <6ed5> 6568 <6ed6> <6ed6> 14843 <6ed7> <6ed7> 5890 <6ed8> <6ed9> 14844 <6eda> <6eda> 1871 <6edb> <6edd> 14846 <6ede> <6ede> 4556 <6edf> <6edf> 5879 <6ee0> <6ee0> 5882 <6ee1> <6ee1> 2721 <6ee2> <6ee2> 5884 <6ee3> <6ee3> 14849 <6ee4> <6ee4> 2674 <6ee5> <6ee5> 2479 <6ee6> <6ee6> 2679 <6ee7> <6ee7> 14850 <6ee8> <6ee8> 1118 <6ee9> <6ee9> 3589 <6eea> <6eeb> 14851 <6eec> <6eec> 8011 <6eed> <6eee> 14853 <6eef> <6eef> 8850 <6ef0> <6ef1> 14855 <6ef2> <6ef2> 8484 <6ef3> <6ef3> 14857 <6ef4> <6ef4> 1455 <6ef5> <6ef6> 14858 <6ef7> <6ef7> 8264 <6ef8> <6ef8> 9184 <6ef9> <6ef9> 5901 <6efa> <6efe> 14860 <6eff> <6eff> 8311 <6f00> <6f00> 14865 <6f01> <6f01> 8762 <6f02> <6f02> 3022 <6f03> <6f05> 14866 <6f06> <6f06> 3072 <6f07> <6f08> 14869 <6f09> <6f09> 5907 <6f0a> <6f0e> 14871 endcidrange 100 begincidrange <6f0f> <6f0f> 2640 <6f10> <6f12> 14876 <6f13> <6f13> 2519 <6f14> <6f14> 4102 <6f15> <6f15> 5900 <6f16> <6f19> 14879 <6f1a> <6f1a> 8369 <6f1b> <6f1f> 14883 <6f20> <6f20> 2833 <6f21> <6f21> 14888 <6f22> <6f22> 8001 <6f23> <6f23> 8220 <6f24> <6f24> 5899 <6f25> <6f28> 14889 <6f29> <6f29> 5908 <6f2a> <6f2a> 5906 <6f2b> <6f2b> 2725 <6f2c> <6f2c> 8888 <6f2d> <6f2d> 5883 <6f2e> <6f2e> 14893 <6f2f> <6f2f> 5902 <6f30> <6f30> 14894 <6f31> <6f31> 3477 <6f32> <6f32> 8822 <6f33> <6f33> 4453 <6f34> <6f35> 14895 <6f36> <6f36> 5903 <6f37> <6f37> 14897 <6f38> <6f38> 8091 <6f39> <6f3d> 14898 <6f3e> <6f3e> 4131 <6f3f> <6f3f> 8095 <6f40> <6f40> 14903 <6f41> <6f41> 9674 <6f42> <6f45> 14904 <6f46> <6f47> 5897 <6f48> <6f4a> 14908 <6f4b> <6f4b> 5904 <6f4c> <6f4c> 14911 <6f4d> <6f4d> 3770 <6f4e> <6f50> 14912 <6f51> <6f51> 8382 <6f52> <6f53> 14915 <6f54> <6f54> 8116 <6f55> <6f57> 14917 <6f58> <6f58> 2956 <6f59> <6f59> 9175 <6f5a> <6f5b> 14920 <6f5c> <6f5c> 3118 <6f5d> <6f5d> 14922 <6f5e> <6f5e> 2657 <6f5f> <6f61> 14923 <6f62> <6f62> 5896 <6f63> <6f63> 14926 <6f64> <6f64> 8453 <6f65> <6f65> 14927 <6f66> <6f66> 2579 <6f67> <6f6c> 14928 <6f6d> <6f6d> 3593 <6f6e> <6f6e> 1238 <6f6f> <6f6f> 9185 <6f70> <6f70> 8172 <6f71> <6f71> 14934 <6f72> <6f72> 5913 <6f73> <6f73> 14935 <6f74> <6f74> 5905 <6f75> <6f76> 14936 <6f77> <6f77> 9194 <6f78> <6f78> 5912 <6f79> <6f79> 14938 <6f7a> <6f7a> 5915 <6f7b> <6f7b> 14939 <6f7c> <6f7c> 5914 <6f7d> <6f7e> 14940 <6f7f> <6f7f> 9187 <6f80> <6f80> 8462 <6f81> <6f83> 14942 <6f84> <6f84> 1267 <6f85> <6f85> 14945 <6f86> <6f86> 8102 <6f87> <6f87> 8196 <6f88> <6f88> 1247 <6f89> <6f89> 5909 <6f8a> <6f8b> 14946 <6f8c> <6f8c> 5911 <6f8d> <6f8d> 5910 <6f8e> <6f8e> 2989 <6f8f> <6f96> 14948 <6f97> <6f97> 8093 <6f98> <6f9b> 14956 <6f9c> <6f9c> 2472 <6f9d> <6f9f> 14960 <6fa0> <6fa0> 9189 <6fa1> <6fa1> 4395 <6fa2> <6fa3> 14963 <6fa4> <6fa4> 8804 <6fa5> <6fa6> 14965 <6fa7> <6fa7> 5918 <6fa8> <6fa8> 14967 <6fa9> <6fa9> 9442 endcidrange 100 begincidrange <6faa> <6fad> 14968 <6fae> <6fae> 9182 <6faf> <6fb0> 14972 <6fb1> <6fb1> 7876 <6fb2> <6fb2> 14974 <6fb3> <6fb3> 975 <6fb4> <6fb5> 14975 <6fb6> <6fb6> 5920 <6fb7> <6fb8> 14977 <6fb9> <6fb9> 5919 <6fba> <6fbf> 14979 <6fc0> <6fc0> 2071 <6fc1> <6fc1> 8886 <6fc2> <6fc2> 5921 <6fc3> <6fc3> 8361 <6fc4> <6fc8> 14985 <6fc9> <6fc9> 5917 <6fca> <6fd0> 14990 <6fd1> <6fd1> 5916 <6fd2> <6fd2> 1117 <6fd3> <6fd4> 14997 <6fd5> <6fd5> 8491 <6fd6> <6fd7> 14999 <6fd8> <6fd8> 8357 <6fd9> <6fda> 15001 <6fdb> <6fdb> 9867 <6fdc> <6fdd> 15003 <6fde> <6fde> 5924 <6fdf> <6fdf> 8054 <6fe0> <6fe0> 5925 <6fe1> <6fe1> 5922 <6fe2> <6fe3> 15005 <6fe4> <6fe4> 8557 <6fe5> <6fea> 15007 <6feb> <6feb> 8193 <6fec> <6fed> 15013 <6fee> <6fee> 5923 <6fef> <6fef> 5926 <6ff0> <6ff0> 8593 <6ff1> <6ff1> 7760 <6ff2> <6ff9> 15015 <6ffa> <6ffa> 8092 <6ffb> <6ffb> 15023 <6ffc> <6ffc> 9178 <6ffd> <6ffd> 15024 <6ffe> <6ffe> 8275 <6fff> <6fff> 15025 <7000> <7004> 15026 <7005> <7005> 9193 <7006> <7006> 9188 <7007> <7008> 15031 <7009> <7009> 8661 <700a> <700a> 15033 <700b> <700b> 9190 <700c> <700e> 15034 <700f> <700f> 9183 <7010> <7010> 15037 <7011> <7011> 3064 <7012> <7014> 15038 <7015> <7015> 7759 <7016> <7017> 15041 <7018> <7018> 9177 <7019> <7019> 15043 <701a> <701a> 5927 <701b> <701b> 5929 <701c> <701c> 15044 <701d> <701d> 8212 <701e> <701e> 15045 <701f> <701f> 9196 <7020> <7020> 9195 <7021> <7022> 15046 <7023> <7023> 5928 <7024> <7026> 15048 <7027> <7027> 9176 <7028> <7028> 9198 <7029> <702f> 15051 <7030> <7030> 9870 <7031> <7031> 15058 <7032> <7032> 9197 <7033> <7034> 15059 <7035> <7035> 5931 <7036> <7038> 15061 <7039> <7039> 5930 <703a> <703d> 15064 <703e> <703e> 8186 <703f> <7042> 15068 <7043> <7043> 9174 <7044> <7044> 9192 <7045> <704b> 15072 <704c> <704c> 1849 <704d> <704e> 15079 <704f> <704f> 5932 <7050> <7050> 15081 <7051> <7051> 8454 <7052> <7054> 15082 <7055> <7055> 8203 <7056> <7057> 15085 <7058> <7058> 8550 <7059> <705c> 15087 <705d> <705d> 9199 endcidrange 100 begincidrange <705e> <705e> 5933 <705f> <7062> 15091 <7063> <7063> 8585 <7064> <7064> 8280 <7065> <7066> 15095 <7067> <7067> 9191 <7068> <706a> 15097 <706b> <706b> 2053 <706c> <706c> 6639 <706d> <706d> 2805 <706e> <706e> 15100 <706f> <706f> 1447 <7070> <7070> 2023 <7071> <7074> 15101 <7075> <7075> 2610 <7076> <7076> 4401 <7077> <7077> 15105 <7078> <7078> 2291 <7079> <707b> 15106 <707c> <707c> 4643 <707d> <707d> 15109 <707e> <707e> 4377 <707f> <707f> 1178 <7080> <7080> 6604 <7081> <7084> 15110 <7085> <7085> 6419 <7086> <7088> 15114 <7089> <7089> 2646 <708a> <708a> 1337 <708b> <708d> 15117 <708e> <708e> 4096 <708f> <7091> 15120 <7092> <7092> 1241 <7093> <7093> 15123 <7094> <7094> 3213 <7095> <7095> 2376 <7096> <7096> 6606 <7097> <7098> 15124 <7099> <7099> 4554 <709a> <709b> 15126 <709c> <709c> 6605 <709d> <709d> 6607 <709e> <70aa> 15128 <70ab> <70ab> 6611 <70ac> <70ac> 2325 <70ad> <70ad> 3602 <70ae> <70ae> 2971 <70af> <70af> 2283 <70b0> <70b0> 15141 <70b1> <70b1> 6612 <70b2> <70b2> 15142 <70b3> <70b3> 1127 <70b4> <70b6> 15143 <70b7> <70b7> 6610 <70b8> <70b8> 4425 <70b9> <70b9> 1476 <70ba> <70ba> 15146 <70bb> <70bb> 6608 <70bc> <70bc> 2559 <70bd> <70bd> 1288 <70be> <70bf> 15147 <70c0> <70c0> 6609 <70c1> <70c1> 3501 <70c2> <70c2> 2478 <70c3> <70c3> 3665 <70c4> <70c7> 15149 <70c8> <70c8> 2587 <70c9> <70c9> 15153 <70ca> <70ca> 6614 <70cb> <70ce> 15154 <70cf> <70cf> 8611 <70d0> <70d7> 15158 <70d8> <70d8> 1949 <70d9> <70d9> 2494 <70da> <70da> 15166 <70db> <70db> 4593 <70dc> <70de> 15167 <70df> <70df> 4085 <70e0> <70e3> 15170 <70e4> <70e4> 2379 <70e5> <70e5> 15174 <70e6> <70e6> 1616 <70e7> <70e7> 3342 <70e8> <70e8> 6613 <70e9> <70e9> 2039 <70ea> <70ea> 15175 <70eb> <70eb> 3615 <70ec> <70ec> 2254 <70ed> <70ed> 3235 <70ee> <70ee> 15176 <70ef> <70ef> 3862 <70f0> <70f3> 15177 <70f4> <70f4> 8570 <70f5> <70f6> 15181 <70f7> <70f7> 3738 <70f8> <70f8> 15183 <70f9> <70f9> 2988 <70fa> <70fc> 15184 <70fd> <70fd> 1670 <70fe> <70ff> 15187 endcidrange 100 begincidrange <7100> <7108> 15189 <7109> <7109> 4082 <710a> <710a> 1903 <710b> <710f> 15198 <7110> <7110> 6615 <7111> <7112> 15203 <7113> <7113> 6616 <7114> <7114> 15205 <7115> <7115> 2005 <7116> <7116> 6617 <7117> <7117> 15206 <7118> <7118> 6640 <7119> <7119> 1059 <711a> <711a> 1654 <711b> <7120> 15207 <7121> <7121> 8613 <7122> <7125> 15213 <7126> <7126> 2186 <7127> <712e> 15217 <712f> <712f> 6618 <7130> <7130> 4111 <7131> <7131> 6619 <7132> <7135> 15225 <7136> <7136> 3222 <7137> <7144> 15229 <7145> <7145> 6623 <7146> <7148> 15243 <7149> <7149> 8226 <714a> <714a> 6625 <714b> <714b> 15246 <714c> <714c> 2018 <714d> <714d> 15247 <714e> <714e> 2136 <714f> <7151> 15248 <7152> <7152> 9430 <7153> <715b> 15251 <715c> <715c> 6621 <715d> <715d> 15260 <715e> <715e> 3312 <715f> <7161> 15261 <7162> <7162> 9018 <7163> <7163> 15264 <7164> <7164> 2751 <7165> <7165> 15265 <7166> <7166> 6641 <7167> <7167> 4470 <7168> <7168> 6622 <7169> <7169> 7918 <716a> <716b> 15266 <716c> <716c> 9429 <716d> <716d> 15268 <716e> <716e> 4594 <716f> <7171> 15269 <7172> <7172> 6624 <7173> <7173> 6620 <7174> <7177> 15272 <7178> <7178> 6626 <7179> <7179> 15276 <717a> <717a> 6627 <717b> <717c> 15277 <717d> <717d> 3320 <717e> <7183> 15279 <7184> <7184> 3861 <7185> <7189> 15285 <718a> <718a> 4007 <718b> <718e> 15290 <718f> <718f> 4053 <7190> <7191> 15294 <7192> <7192> 8744 <7193> <7193> 15296 <7194> <7194> 3254 <7195> <7196> 15297 <7197> <7197> 9431 <7198> <7198> 6628 <7199> <7199> 3844 <719a> <719e> 15299 <719f> <719f> 3459 <71a0> <71a0> 6632 <71a1> <71a7> 15304 <71a8> <71a8> 6631 <71a9> <71ab> 15311 <71ac> <71ac> 969 <71ad> <71b0> 15314 <71b1> <71b1> 8444 <71b2> <71b2> 15318 <71b3> <71b3> 6629 <71b4> <71b4> 15319 <71b5> <71b5> 6630 <71b6> <71b8> 15320 <71b9> <71b9> 6642 <71ba> <71bd> 15323 <71be> <71be> 7815 <71bf> <71c0> 15327 <71c1> <71c1> 9432 <71c2> <71c2> 15329 <71c3> <71c3> 3223 <71c4> <71c7> 15330 <71c8> <71c8> 7866 <71c9> <71cd> 15334 <71ce> <71ce> 2576 endcidrange 100 begincidrange <71cf> <71d1> 15339 <71d2> <71d2> 8473 <71d3> <71d3> 15342 <71d4> <71d4> 6634 <71d5> <71d5> 4105 <71d6> <71d8> 15343 <71d9> <71d9> 8556 <71da> <71db> 15346 <71dc> <71dc> 9433 <71dd> <71de> 15348 <71df> <71df> 8743 <71e0> <71e0> 6633 <71e1> <71e4> 15350 <71e5> <71e5> 4402 <71e6> <71e6> 7775 <71e7> <71e7> 6635 <71e8> <71ec> 15354 <71ed> <71ed> 8863 <71ee> <71ee> 5014 <71ef> <71f3> 15359 <71f4> <71f4> 8029 <71f5> <71f8> 15364 <71f9> <71f9> 6636 <71fa> <71fb> 15368 <71fc> <71fc> 8124 <71fd> <71fd> 15370 <71fe> <71fe> 9434 <71ff> <71ff> 15371 <7200> <7205> 15372 <7206> <7206> 1045 <7207> <720c> 15378 <720d> <720d> 8521 <720e> <720f> 15384 <7210> <7210> 8262 <7211> <721a> 15386 <721b> <721b> 8192 <721c> <721c> 15396 <721d> <721d> 6637 <721e> <7227> 15397 <7228> <7228> 6638 <7229> <7229> 15407 <722a> <722a> 4611 <722b> <722b> 15408 <722c> <722c> 2945 <722d> <722f> 15409 <7230> <7230> 6508 <7231> <7231> 953 <7232> <7232> 8592 <7233> <7234> 15412 <7235> <7235> 2339 <7236> <7236> 1715 <7237> <7237> 4150 <7238> <7238> 993 <7239> <7239> 1498 <723a> <723a> 8712 <723b> <723b> 4713 <723c> <723c> 15414 <723d> <723d> 3489 <723e> <723e> 7910 <723f> <723f> 5789 <7240> <7246> 15415 <7247> <7247> 3019 <7248> <7248> 1009 <7249> <724b> 15422 <724c> <724c> 2951 <724d> <724d> 6505 <724e> <7251> 15425 <7252> <7252> 6506 <7253> <7255> 15429 <7256> <7256> 6507 <7257> <7257> 15432 <7258> <7258> 9411 <7259> <7259> 4073 <725a> <725a> 15433 <725b> <725b> 2916 <725c> <725c> 15434 <725d> <725d> 6468 <725e> <725e> 15435 <725f> <725f> 2837 <7260> <7260> 15436 <7261> <7261> 2840 <7262> <7262> 2489 <7263> <7265> 15437 <7266> <7266> 6469 <7267> <7267> 2852 <7268> <7268> 15440 <7269> <7269> 3838 <726a> <726d> 15441 <726e> <726e> 6466 <726f> <726f> 6470 <7270> <7271> 15445 <7272> <7272> 3381 <7273> <7274> 15447 <7275> <7275> 3104 <7276> <7278> 15449 <7279> <7279> 3627 <727a> <727a> 3853 <727b> <727c> 15452 <727d> <727d> 8396 <727e> <727f> 6471 endcidrange 100 begincidrange <7280> <7280> 3865 <7281> <7281> 2514 <7282> <7283> 15454 <7284> <7284> 6473 <7285> <7289> 15456 <728a> <728a> 1534 <728b> <728b> 6474 <728c> <728c> 15461 <728d> <728d> 6475 <728e> <728e> 15462 <728f> <728f> 6476 <7290> <7291> 15463 <7292> <7292> 6477 <7293> <7295> 15465 <7296> <7296> 9024 <7297> <729e> 15468 <729f> <729f> 6467 <72a0> <72a1> 15476 <72a2> <72a2> 7889 <72a3> <72a6> 15478 <72a7> <72a7> 8620 <72a8> <72ab> 15482 <72ac> <72ac> 3209 <72ad> <72ad> 5615 <72ae> <72ae> 15486 <72af> <72af> 1621 <72b0> <72b0> 5616 <72b1> <72b3> 15487 <72b4> <72b4> 5617 <72b5> <72b5> 15490 <72b6> <72b6> 4625 <72b7> <72b8> 5618 <72b9> <72b9> 4273 <72ba> <72bf> 15491 <72c0> <72c0> 8879 <72c1> <72c1> 5621 <72c2> <72c2> 2430 <72c3> <72c3> 5620 <72c4> <72c4> 1459 <72c5> <72c7> 15497 <72c8> <72c8> 1056 <72c9> <72cc> 15500 <72cd> <72cd> 5623 <72ce> <72ce> 5622 <72cf> <72cf> 15504 <72d0> <72d0> 1971 <72d1> <72d1> 15505 <72d2> <72d2> 5624 <72d3> <72d6> 15506 <72d7> <72d7> 1808 <72d8> <72d8> 15510 <72d9> <72d9> 2304 <72da> <72dd> 15511 <72de> <72de> 2911 <72df> <72df> 15515 <72e0> <72e0> 1940 <72e1> <72e1> 2199 <72e2> <72e7> 15516 <72e8> <72e8> 5625 <72e9> <72e9> 5627 <72ea> <72eb> 15522 <72ec> <72ec> 1535 <72ed> <72ed> 3886 <72ee> <72ee> 3391 <72ef> <72ef> 5626 <72f0> <72f0> 4505 <72f1> <72f1> 4321 <72f2> <72f2> 5628 <72f3> <72f3> 5632 <72f4> <72f4> 5629 <72f5> <72f6> 15524 <72f7> <72f7> 5630 <72f8> <72f8> 2517 <72f9> <72f9> 8630 <72fa> <72fb> 5634 <72fc> <72fc> 2482 <72fd> <72fd> 7741 <72fe> <72ff> 15526 <7300> <7300> 15528 <7301> <7301> 5631 <7302> <7302> 15529 <7303> <7303> 5633 <7304> <7309> 15530 <730a> <730a> 5639 <730b> <730d> 15536 <730e> <730e> 2589 <730f> <7312> 15539 <7313> <7313> 5637 <7314> <7314> 15543 <7315> <7315> 5642 <7316> <7316> 1221 <7317> <7317> 5636 <7318> <731a> 15544 <731b> <731b> 2770 <731c> <731c> 1161 <731d> <731d> 5641 <731e> <731e> 5640 <731f> <7320> 15547 <7321> <7321> 5638 <7322> <7322> 5643 endcidrange 100 begincidrange <7323> <7324> 15549 <7325> <7325> 5645 <7326> <7328> 15551 <7329> <7329> 3988 <732a> <732a> 4588 <732b> <732b> 2733 <732c> <732c> 5646 <732d> <732d> 15554 <732e> <732e> 3908 <732f> <7330> 15555 <7331> <7331> 5648 <7332> <7333> 15557 <7334> <7334> 1958 <7335> <7335> 15559 <7336> <7336> 8757 <7337> <7337> 6356 <7338> <7338> 5647 <7339> <7339> 5644 <733a> <733a> 15560 <733b> <733b> 9111 <733c> <733d> 15561 <733e> <733e> 1984 <733f> <733f> 4342 <7340> <7340> 15563 <7341> <7341> 9109 <7342> <7343> 15564 <7344> <7344> 8767 <7345> <7345> 8490 <7346> <734c> 15566 <734d> <734d> 5650 <734e> <734f> 15573 <7350> <7350> 5649 <7351> <7351> 15575 <7352> <7352> 6357 <7353> <7356> 15576 <7357> <7357> 5651 <7358> <735f> 15580 <7360> <7360> 5652 <7361> <7367> 15588 <7368> <7368> 7890 <7369> <7369> 15595 <736a> <736a> 9110 <736b> <736b> 9112 <736c> <736c> 5653 <736d> <736d> 3572 <736e> <736e> 15596 <736f> <736f> 5654 <7370> <7370> 8354 <7371> <7371> 15597 <7372> <7372> 8036 <7373> <7374> 15598 <7375> <7375> 8235 <7376> <7376> 15600 <7377> <7377> 9108 <7378> <7378> 8505 <7379> <7379> 15601 <737a> <737a> 8543 <737b> <737b> 8641 <737c> <737c> 9114 <737d> <737d> 15602 <737e> <737e> 5655 <737f> <737f> 15603 <7380> <7380> 9113 <7381> <7383> 15604 <7384> <7384> 4041 <7385> <7386> 15607 <7387> <7387> 2673 <7388> <7388> 15609 <7389> <7389> 4310 <738a> <738a> 15610 <738b> <738b> 3750 <738c> <738d> 15611 <738e> <738e> 6168 <738f> <7390> 15613 <7391> <7391> 6169 <7392> <7395> 15615 <7396> <7396> 2288 <7397> <739a> 15619 <739b> <739b> 2705 <739c> <739e> 15623 <739f> <739f> 6172 <73a0> <73a1> 15626 <73a2> <73a2> 6171 <73a3> <73a8> 15628 <73a9> <73a9> 3735 <73aa> <73aa> 15634 <73ab> <73ab> 2746 <73ac> <73ad> 15635 <73ae> <73ae> 6170 <73af> <73af> 1996 <73b0> <73b0> 3907 <73b1> <73b1> 15637 <73b2> <73b2> 2602 <73b3> <73b3> 6177 <73b4> <73b6> 15638 <73b7> <73b7> 6176 <73b8> <73b9> 15641 <73ba> <73ba> 6188 <73bb> <73bb> 1130 <73bc> <73bf> 15643 endcidrange 100 begincidrange <73c0> <73c0> 6178 <73c1> <73c1> 15647 <73c2> <73c2> 6174 <73c3> <73c7> 15648 <73c8> <73c8> 6180 <73c9> <73c9> 6179 <73ca> <73ca> 3315 <73cb> <73cc> 15653 <73cd> <73cd> 4485 <73ce> <73ce> 15655 <73cf> <73cf> 6173 <73d0> <73d0> 1606 <73d1> <73d1> 6175 <73d2> <73d8> 15656 <73d9> <73d9> 6182 <73da> <73dd> 15663 <73de> <73de> 6187 <73df> <73df> 15667 <73e0> <73e0> 4584 <73e1> <73e4> 15668 <73e5> <73e5> 6181 <73e6> <73e6> 15672 <73e7> <73e7> 6186 <73e8> <73e8> 15673 <73e9> <73e9> 6185 <73ea> <73ec> 15674 <73ed> <73ed> 1003 <73ee> <73f1> 15677 <73f2> <73f2> 6189 <73f3> <73fd> 15681 <73fe> <73fe> 8640 <73ff> <73ff> 15692 <7400> <7402> 15693 <7403> <7403> 3183 <7404> <7404> 15696 <7405> <7405> 2480 <7406> <7406> 2520 <7407> <7408> 15697 <7409> <7409> 2617 <740a> <740a> 6184 <740b> <740e> 15699 <740f> <740f> 6190 <7410> <7410> 3563 <7411> <7419> 15703 <741a> <741a> 6200 <741b> <741b> 6199 <741c> <7421> 15712 <7422> <7422> 4638 <7423> <7424> 15718 <7425> <7425> 6194 <7426> <7426> 6193 <7427> <7427> 15720 <7428> <7428> 6195 <7429> <7429> 15721 <742a> <742a> 6191 <742b> <742b> 15722 <742c> <742c> 6198 <742d> <742d> 15723 <742e> <742e> 6197 <742f> <742f> 15724 <7430> <7430> 6196 <7431> <7432> 15725 <7433> <7433> 2590 <7434> <7434> 3158 <7435> <7435> 3006 <7436> <7436> 2948 <7437> <743b> 15727 <743c> <743c> 3178 <743d> <743e> 15732 <743f> <743f> 9312 <7440> <7440> 15734 <7441> <7441> 6201 <7442> <744a> 15735 <744b> <744b> 9308 <744c> <7454> 15744 <7455> <7455> 6204 <7456> <7456> 15753 <7457> <7457> 6203 <7458> <7458> 15754 <7459> <7459> 6205 <745a> <745a> 1966 <745b> <745b> 6192 <745c> <745c> 6202 <745d> <745d> 15755 <745e> <745e> 3275 <745f> <745f> 3299 <7460> <7462> 15756 <7463> <7463> 8541 <7464> <7468> 15759 <7469> <7469> 8741 <746a> <746a> 8298 <746b> <746c> 15764 <746d> <746d> 6207 <746e> <746f> 15766 <7470> <7470> 1854 <7471> <7475> 15768 <7476> <7476> 4135 <7477> <7477> 6206 <7478> <747d> 15773 <747e> <747e> 6208 endcidrange 100 begincidrange <747f> <747f> 15779 <7480> <7481> 6211 <7482> <7482> 15780 <7483> <7483> 2544 <7484> <7486> 15781 <7487> <7487> 6213 <7488> <7488> 15784 <7489> <7489> 9313 <748a> <748a> 15785 <748b> <748b> 6214 <748c> <748d> 15786 <748e> <748e> 6210 <748f> <748f> 15788 <7490> <7490> 6218 <7491> <749b> 15789 <749c> <749c> 6209 <749d> <749d> 15800 <749e> <749e> 6215 <749f> <74a2> 15801 <74a3> <74a3> 9307 <74a4> <74a5> 15805 <74a6> <74a6> 9314 <74a7> <74a7> 6219 <74a8> <74a9> 6216 <74aa> <74af> 15807 <74b0> <74b0> 8020 <74b1> <74b9> 15813 <74ba> <74ba> 6221 <74bb> <74bc> 15822 <74bd> <74bd> 9311 <74be> <74c9> 15824 <74ca> <74ca> 8428 <74cb> <74ce> 15836 <74cf> <74cf> 9309 <74d0> <74d1> 15840 <74d2> <74d2> 6220 <74d3> <74d3> 15842 <74d4> <74d4> 9315 <74d5> <74d9> 15843 <74da> <74da> 9316 <74db> <74db> 15848 <74dc> <74dc> 1832 <74dd> <74dd> 15849 <74de> <74de> 6962 <74df> <74df> 15850 <74e0> <74e0> 6963 <74e1> <74e1> 15851 <74e2> <74e2> 3023 <74e3> <74e3> 1013 <74e4> <74e4> 3226 <74e5> <74e5> 15852 <74e6> <74e6> 3728 <74e7> <74ed> 15853 <74ee> <74ee> 3804 <74ef> <74ef> 6403 <74f0> <74f3> 15860 <74f4> <74f4> 6404 <74f5> <74f5> 15864 <74f6> <74f6> 3038 <74f7> <74f7> 1356 <74f8> <74fe> 15865 <74ff> <74ff> 6405 <7500> <7503> 15872 <7504> <7504> 4488 <7505> <750b> 15876 <750c> <750c> 9381 <750d> <750d> 5253 <750e> <750e> 15883 <750f> <750f> 6406 <7510> <7510> 15884 <7511> <7511> 6407 <7512> <7512> 15885 <7513> <7513> 6408 <7514> <7517> 15886 <7518> <7518> 1733 <7519> <7519> 5368 <751a> <751a> 3374 <751b> <751b> 15890 <751c> <751c> 3651 <751d> <751e> 15891 <751f> <751f> 3379 <7520> <7522> 15893 <7523> <7523> 7792 <7524> <7524> 15896 <7525> <7525> 3380 <7526> <7527> 15897 <7528> <7528> 4264 <7529> <7529> 3483 <752a> <752a> 15899 <752b> <752b> 1697 <752c> <752c> 6964 <752d> <752d> 1067 <752e> <752e> 15900 <752f> <752f> 5940 <7530> <7530> 3650 <7531> <7531> 4270 <7532> <7532> 2122 <7533> <7533> 3363 <7534> <7534> 15901 <7535> <7535> 1480 endcidrange 100 begincidrange <7536> <7536> 15902 <7537> <7537> 2867 <7538> <7538> 1482 <7539> <7539> 15903 <753a> <753a> 6776 <753b> <753b> 1986 <753c> <753d> 15904 <753e> <753e> 6166 <753f> <753f> 15906 <7540> <7540> 6777 <7541> <7544> 15907 <7545> <7545> 1230 <7546> <7547> 15911 <7548> <7548> 6780 <7549> <754a> 15913 <754b> <754b> 6779 <754c> <754c> 2232 <754d> <754d> 15915 <754e> <754e> 6778 <754f> <754f> 3782 <7550> <7553> 15916 <7554> <7554> 2960 <7555> <7558> 15920 <7559> <7559> 2621 <755a> <755a> 5022 <755b> <755b> 6781 <755c> <755c> 4030 <755d> <755d> 8335 <755e> <7561> 15924 <7562> <7562> 7746 <7563> <7564> 15928 <7565> <7565> 2683 <7566> <7566> 3079 <7567> <7569> 15930 <756a> <756a> 1609 <756b> <756b> 8014 <756c> <7571> 15933 <7572> <7572> 6782 <7573> <7573> 15939 <7574> <7574> 1296 <7575> <7575> 15940 <7576> <7576> 7857 <7577> <7577> 15941 <7578> <7578> 2064 <7579> <7579> 6783 <757a> <757e> 15942 <757f> <757f> 6164 <7580> <7582> 15947 <7583> <7583> 6784 <7584> <7585> 15950 <7586> <7586> 2175 <7587> <7587> 7819 <7588> <758a> 15952 <758b> <758b> 7110 <758c> <758e> 15955 <758f> <758f> 3455 <7590> <7590> 15958 <7591> <7591> 4176 <7592> <7592> 7008 <7593> <7593> 15959 <7594> <7594> 7009 <7595> <7595> 15960 <7596> <7596> 7010 <7597> <7597> 2575 <7598> <7598> 15961 <7599> <7599> 1768 <759a> <759a> 2301 <759b> <759c> 15962 <759d> <759d> 7012 <759e> <759e> 15964 <759f> <759f> 2930 <75a0> <75a0> 7011 <75a1> <75a1> 4122 <75a2> <75a2> 15965 <75a3> <75a3> 7014 <75a4> <75a4> 983 <75a5> <75a5> 2235 <75a6> <75aa> 15966 <75ab> <75ab> 4198 <75ac> <75ac> 7013 <75ad> <75ad> 15971 <75ae> <75ae> 1330 <75af> <75af> 1669 <75b0> <75b0> 7020 <75b1> <75b1> 7019 <75b2> <75b2> 3010 <75b3> <75b4> 7015 <75b5> <75b5> 1350 <75b6> <75b7> 15972 <75b8> <75b8> 7017 <75b9> <75b9> 4495 <75ba> <75bb> 15974 <75bc> <75bc> 3630 <75bd> <75bd> 2305 <75be> <75be> 2085 <75bf> <75c1> 15976 <75c2> <75c2> 7022 <75c3> <75c3> 7021 <75c4> <75c4> 7018 <75c5> <75c5> 1128 endcidrange 100 begincidrange <75c6> <75c6> 15979 <75c7> <75c7> 4513 <75c8> <75c8> 4253 <75c9> <75c9> 2278 <75ca> <75ca> 3207 <75cb> <75cc> 15980 <75cd> <75cd> 7024 <75ce> <75d1> 15982 <75d2> <75d2> 4128 <75d3> <75d3> 15986 <75d4> <75d4> 4555 <75d5> <75d5> 1938 <75d6> <75d6> 7023 <75d7> <75d7> 15987 <75d8> <75d8> 1530 <75d9> <75d9> 8134 <75da> <75da> 15988 <75db> <75db> 3685 <75dc> <75dd> 15989 <75de> <75de> 3013 <75df> <75e1> 15991 <75e2> <75e2> 2538 <75e3> <75e3> 7025 <75e4> <75e4> 7028 <75e5> <75e5> 15994 <75e6> <75e6> 7027 <75e7> <75e7> 7030 <75e8> <75e8> 7026 <75e9> <75e9> 15995 <75ea> <75ea> 2003 <75eb> <75eb> 7029 <75ec> <75ef> 15996 <75f0> <75f0> 3592 <75f1> <75f1> 7032 <75f2> <75f3> 16000 <75f4> <75f4> 1274 <75f5> <75f8> 16002 <75f9> <75f9> 1085 <75fa> <75fb> 16006 <75fc> <75fc> 7033 <75fd> <75fe> 16008 <75ff> <75ff> 7034 <7600> <7600> 7036 <7601> <7601> 1380 <7602> <7602> 9646 <7603> <7603> 7031 <7604> <7604> 16010 <7605> <7605> 7037 <7606> <7609> 16011 <760a> <760a> 7040 <760b> <760b> 7937 <760c> <760c> 7038 <760d> <760d> 8704 <760e> <760f> 16015 <7610> <7610> 7035 <7611> <7614> 16017 <7615> <7615> 7043 <7616> <7616> 16021 <7617> <7617> 7039 <7618> <7618> 7042 <7619> <7619> 7044 <761a> <761a> 16022 <761b> <761b> 7045 <761c> <761d> 16023 <761e> <761e> 9650 <761f> <761f> 3792 <7620> <7620> 7048 <7621> <7621> 7831 <7622> <7622> 7047 <7623> <7623> 16025 <7624> <7624> 2623 <7625> <7625> 7041 <7626> <7626> 3444 <7627> <7627> 8363 <7628> <7628> 16026 <7629> <7629> 1396 <762a> <762a> 1114 <762b> <762b> 3588 <762c> <762c> 16027 <762d> <762d> 7050 <762e> <762f> 16028 <7630> <7630> 7051 <7631> <7632> 16030 <7633> <7633> 7056 <7634> <7634> 4463 <7635> <7635> 7053 <7636> <7637> 16032 <7638> <7638> 3214 <7639> <763a> 16034 <763b> <763b> 9651 <763c> <763c> 7046 <763d> <763d> 16036 <763e> <763e> 7055 <763f> <763f> 7052 <7640> <7640> 7049 <7641> <7641> 16037 <7642> <7642> 8232 <7643> <7643> 7054 <7644> <7645> 16038 <7646> <7647> 9647 endcidrange 100 begincidrange <7648> <7648> 16040 <7649> <7649> 9649 <764a> <764b> 16041 <764c> <764c> 948 <764d> <764d> 7057 <764e> <7653> 16043 <7654> <7654> 7059 <7655> <7655> 16049 <7656> <7656> 7061 <7657> <7657> 16050 <7658> <7658> 9644 <7659> <765b> 16051 <765c> <765c> 7060 <765d> <765d> 16054 <765e> <765e> 7058 <765f> <765f> 7758 <7660> <7661> 16055 <7662> <7662> 8706 <7663> <7663> 4043 <7664> <7664> 9643 <7665> <7665> 8838 <7666> <7666> 16057 <7667> <7667> 9645 <7668> <7668> 16058 <7669> <7669> 9654 <766a> <766a> 16059 <766b> <766b> 7062 <766c> <766c> 8675 <766d> <766e> 9652 <766f> <766f> 7063 <7670> <7670> 8751 <7671> <7671> 8549 <7672> <7672> 9655 <7673> <7677> 16060 <7678> <7678> 1864 <7679> <767a> 16065 <767b> <767b> 1448 <767c> <767c> 7913 <767d> <767d> 994 <767e> <767e> 996 <767f> <7681> 16067 <7682> <7682> 4400 <7683> <7683> 16070 <7684> <7684> 1445 <7685> <7685> 16071 <7686> <7686> 2213 <7687> <7687> 2015 <7688> <7688> 6957 <7689> <768a> 16072 <768b> <768b> 1753 <768c> <768d> 16074 <768e> <768e> 6958 <768f> <7690> 16076 <7691> <7691> 947 <7692> <7692> 16078 <7693> <7693> 6959 <7694> <7695> 16079 <7696> <7696> 3743 <7697> <7698> 16081 <7699> <7699> 6960 <769a> <769a> 7717 <769b> <76a3> 16083 <76a4> <76a4> 6961 <76a5> <76ad> 16092 <76ae> <76ae> 3011 <76af> <76b0> 16101 <76b1> <76b1> 4580 <76b2> <76b2> 7112 <76b3> <76b3> 16103 <76b4> <76b4> 7113 <76b5> <76b7> 16104 <76b8> <76b8> 9664 <76b9> <76b9> 16107 <76ba> <76ba> 8858 <76bb> <76be> 16108 <76bf> <76bf> 2808 <76c0> <76c1> 16112 <76c2> <76c2> 4288 <76c3> <76c4> 16114 <76c5> <76c5> 4560 <76c6> <76c6> 2985 <76c7> <76c7> 16116 <76c8> <76c8> 4244 <76c9> <76c9> 16117 <76ca> <76ca> 4205 <76cb> <76cc> 16118 <76cd> <76cd> 6795 <76ce> <76ce> 966 <76cf> <76cf> 4438 <76d0> <76d0> 4087 <76d1> <76d1> 2131 <76d2> <76d2> 1927 <76d3> <76d3> 16120 <76d4> <76d4> 2437 <76d5> <76d5> 16121 <76d6> <76d6> 1730 <76d7> <76d7> 1442 <76d8> <76d8> 2957 <76d9> <76da> 16122 <76db> <76db> 3385 endcidrange 100 begincidrange <76dc> <76dd> 16124 <76de> <76de> 8814 <76df> <76df> 2768 <76e0> <76e0> 16126 <76e1> <76e1> 8125 <76e2> <76e2> 16127 <76e3> <76e3> 8068 <76e4> <76e4> 8370 <76e5> <76e5> 6796 <76e6> <76e6> 16128 <76e7> <76e7> 8259 <76e8> <76ed> 16129 <76ee> <76ee> 2850 <76ef> <76ef> 1505 <76f0> <76f0> 16135 <76f1> <76f1> 6744 <76f2> <76f2> 2729 <76f3> <76f3> 16136 <76f4> <76f4> 4528 <76f5> <76f7> 16137 <76f8> <76f8> 3917 <76f9> <76f9> 6747 <76fa> <76fb> 16140 <76fc> <76fc> 2959 <76fd> <76fd> 16142 <76fe> <76fe> 1563 <76ff> <76ff> 16143 <7700> <7700> 16144 <7701> <7701> 3384 <7702> <7703> 16145 <7704> <7704> 6745 <7705> <7706> 16147 <7707> <7708> 6748 <7709> <7709> 2753 <770a> <770a> 16149 <770b> <770b> 2369 <770c> <770c> 16150 <770d> <770d> 6746 <770e> <7718> 16151 <7719> <7719> 6752 <771a> <771a> 6750 <771b> <771e> 16162 <771f> <771f> 4487 <7720> <7720> 2788 <7721> <7721> 16166 <7722> <7722> 6751 <7723> <7725> 16167 <7726> <7726> 6754 <7727> <7727> 16170 <7728> <7728> 4420 <7729> <7729> 4044 <772a> <772c> 16171 <772d> <772d> 6753 <772e> <772e> 16174 <772f> <772f> 2773 <7730> <7734> 16175 <7735> <7735> 6755 <7736> <7736> 2433 <7737> <7737> 2331 <7738> <7738> 6756 <7739> <7739> 16180 <773a> <773a> 3658 <773b> <773b> 16181 <773c> <773c> 4100 <773d> <773f> 16182 <7740> <7740> 4642 <7741> <7741> 4503 <7742> <7742> 16185 <7743> <7743> 6760 <7744> <7746> 16186 <7747> <7747> 6759 <7748> <774e> 16189 <774f> <774f> 9860 <7750> <7751> 6757 <7752> <7759> 16196 <775a> <775a> 6761 <775b> <775b> 2261 <775c> <775d> 16204 <775e> <775e> 9455 <775f> <7760> 16206 <7761> <7761> 3492 <7762> <7762> 6763 <7763> <7763> 1532 <7764> <7764> 16208 <7765> <7765> 6764 <7766> <7766> 2851 <7767> <7767> 16209 <7768> <7768> 6762 <7769> <776a> 16210 <776b> <776b> 2223 <776c> <776c> 1166 <776d> <7778> 16212 <7779> <7779> 1538 <777a> <777c> 16224 <777d> <777d> 6767 <777e> <777e> 4720 <777f> <777f> 6765 <7780> <7780> 6768 <7781> <7783> 16227 <7784> <7784> 2798 endcidrange 100 begincidrange <7785> <7785> 1303 <7786> <778b> 16230 <778c> <778c> 6769 <778d> <778d> 6766 <778e> <778e> 3878 <778f> <7790> 16236 <7791> <7791> 6770 <7792> <7792> 2718 <7793> <7797> 16238 <7798> <7798> 9454 <7799> <779d> 16243 <779e> <779e> 8308 <779f> <77a0> 6771 <77a1> <77a1> 16248 <77a2> <77a2> 5269 <77a3> <77a4> 16249 <77a5> <77a5> 3026 <77a6> <77a6> 16251 <77a7> <77a7> 3139 <77a8> <77a8> 16252 <77a9> <77a9> 4596 <77aa> <77aa> 1450 <77ab> <77ab> 16253 <77ac> <77ac> 3495 <77ad> <77ad> 9863 <77ae> <77af> 16254 <77b0> <77b0> 6773 <77b1> <77b2> 16256 <77b3> <77b3> 3676 <77b4> <77b4> 16258 <77b5> <77b5> 6774 <77b6> <77ba> 16259 <77bb> <77bb> 4433 <77bc> <77bc> 9456 <77bd> <77bd> 6775 <77be> <77be> 16264 <77bf> <77bf> 7550 <77c0> <77c6> 16265 <77c7> <77c7> 9869 <77c8> <77cc> 16272 <77cd> <77cd> 5015 <77ce> <77d6> 16277 <77d7> <77d7> 1318 <77d8> <77d9> 16286 <77da> <77da> 8864 <77db> <77db> 2737 <77dc> <77dc> 7114 <77dd> <77e1> 16288 <77e2> <77e2> 3407 <77e3> <77e3> 4186 <77e4> <77e4> 16293 <77e5> <77e5> 4521 <77e6> <77e6> 16294 <77e7> <77e7> 6938 <77e8> <77e8> 16295 <77e9> <77e9> 2311 <77ea> <77ea> 16296 <77eb> <77eb> 2196 <77ec> <77ec> 6939 <77ed> <77ed> 1547 <77ee> <77ee> 950 <77ef> <77ef> 8107 <77f0> <77f2> 16297 <77f3> <77f3> 3398 <77f4> <77f5> 16300 <77f6> <77f6> 6690 <77f7> <77f7> 16302 <77f8> <77f8> 6691 <77f9> <77fc> 16303 <77fd> <77fd> 3848 <77fe> <77fe> 1612 <77ff> <77ff> 2432 <7800> <7800> 6692 <7801> <7801> 2706 <7802> <7802> 3305 <7803> <7808> 16307 <7809> <7809> 6693 <780a> <780b> 16313 <780c> <780c> 3093 <780d> <780d> 2368 <780e> <7810> 16315 <7811> <7811> 6696 <7812> <7812> 3001 <7813> <7813> 16318 <7814> <7814> 4089 <7815> <7815> 16319 <7816> <7816> 4614 <7817> <7818> 6694 <7819> <7819> 16320 <781a> <781a> 4107 <781b> <781b> 16321 <781c> <781d> 6699 <781e> <781e> 16322 <781f> <781f> 6704 <7820> <7822> 16323 <7823> <7823> 6708 <7824> <7824> 16326 <7825> <7825> 6706 <7826> <7826> 6714 <7827> <7827> 4489 endcidrange 100 begincidrange <7828> <7828> 16327 <7829> <7829> 6709 <782a> <782b> 16328 <782c> <782c> 6707 <782d> <782d> 6698 <782e> <782f> 16330 <7830> <7830> 2986 <7831> <7833> 16332 <7834> <7834> 3045 <7835> <7836> 16335 <7837> <7837> 3362 <7838> <7838> 4373 <7839> <783b> 6701 <783c> <783c> 6705 <783d> <783d> 16337 <783e> <783e> 2532 <783f> <783f> 16338 <7840> <7840> 1316 <7841> <7842> 16339 <7843> <7843> 9896 <7844> <7844> 16341 <7845> <7845> 1857 <7846> <7846> 16342 <7847> <7847> 6716 <7848> <784b> 16343 <784c> <784c> 6717 <784d> <784d> 16347 <784e> <784e> 6710 <784f> <784f> 16348 <7850> <7850> 6715 <7851> <7851> 16349 <7852> <7852> 3847 <7853> <7854> 16350 <7855> <7855> 3499 <7856> <7857> 6712 <7858> <785c> 16352 <785d> <785d> 3938 <785e> <7863> 16357 <7864> <7864> 9449 <7865> <7867> 16363 <7868> <7868> 9445 <7869> <7869> 16366 <786a> <786a> 6718 <786b> <786b> 2619 <786c> <786c> 4247 <786d> <786d> 6711 <786e> <786e> 3218 <786f> <786f> 8698 <7870> <7876> 16367 <7877> <7877> 2146 <7878> <787b> 16374 <787c> <787c> 2993 <787d> <7886> 16378 <7887> <7887> 6722 <7888> <7888> 16388 <7889> <7889> 1488 <788a> <788b> 16389 <788c> <788c> 2652 <788d> <788d> 952 <788e> <788e> 3550 <788f> <7890> 16391 <7891> <7891> 1047 <7892> <7892> 16393 <7893> <7893> 6720 <7894> <7896> 16394 <7897> <7897> 3740 <7898> <7898> 1475 <7899> <7899> 16397 <789a> <789a> 6721 <789b> <789b> 6719 <789c> <789c> 6723 <789d> <789e> 16398 <789f> <789f> 1499 <78a0> <78a0> 16400 <78a1> <78a1> 6724 <78a2> <78a2> 16401 <78a3> <78a3> 6725 <78a4> <78a4> 16402 <78a5> <78a5> 6728 <78a6> <78a6> 16403 <78a7> <78a7> 1077 <78a8> <78a8> 16404 <78a9> <78a9> 8520 <78aa> <78ac> 16405 <78ad> <78ad> 9444 <78ae> <78af> 16408 <78b0> <78b0> 2999 <78b1> <78b1> 2145 <78b2> <78b2> 6726 <78b3> <78b3> 3599 <78b4> <78b4> 1201 <78b5> <78b7> 16410 <78b8> <78b8> 9446 <78b9> <78b9> 6727 <78ba> <78ba> 8439 <78bb> <78bb> 16413 <78bc> <78bc> 8299 <78bd> <78bd> 16414 <78be> <78be> 2894 <78bf> <78c0> 16415 endcidrange 100 begincidrange <78c1> <78c1> 1352 <78c2> <78c4> 16417 <78c5> <78c5> 1024 <78c6> <78c8> 16420 <78c9> <78c9> 6731 <78ca> <78ca> 2501 <78cb> <78cb> 1387 <78cc> <78cf> 16423 <78d0> <78d0> 2958 <78d1> <78d3> 16427 <78d4> <78d4> 6729 <78d5> <78d5> 2385 <78d6> <78d8> 16430 <78d9> <78d9> 6730 <78da> <78da> 8871 <78db> <78e2> 16433 <78e3> <78e3> 9452 <78e4> <78e6> 16441 <78e7> <78e7> 9451 <78e8> <78e8> 2824 <78e9> <78eb> 16444 <78ec> <78ec> 6732 <78ed> <78ee> 16447 <78ef> <78ef> 9443 <78f0> <78f1> 16449 <78f2> <78f2> 6733 <78f3> <78f3> 16451 <78f4> <78f4> 6735 <78f5> <78f6> 16452 <78f7> <78f7> 2592 <78f8> <78f9> 16454 <78fa> <78fa> 2012 <78fb> <78fc> 16456 <78fd> <78fd> 9450 <78fe> <78ff> 16458 <7900> <7900> 16460 <7901> <7901> 2185 <7902> <7904> 16461 <7905> <7905> 6734 <7906> <790d> 16464 <790e> <790e> 7826 <790f> <7912> 16472 <7913> <7913> 6736 <7914> <7918> 16476 <7919> <7919> 7719 <791a> <791d> 16481 <791e> <791e> 6738 <791f> <7923> 16485 <7924> <7924> 6737 <7925> <7925> 16490 <7926> <7926> 8166 <7927> <7929> 16491 <792a> <792a> 9447 <792b> <792b> 8210 <792c> <792c> 7916 <792d> <7930> 16494 <7931> <7931> 9448 <7932> <7933> 16498 <7934> <7934> 6739 <7935> <7939> 16500 <793a> <793a> 3413 <793b> <793b> 6648 <793c> <793c> 2524 <793d> <793d> 16505 <793e> <793e> 3360 <793f> <793f> 16506 <7940> <7940> 6649 <7941> <7941> 3085 <7942> <7945> 16507 <7946> <7946> 6650 <7947> <7947> 16511 <7948> <7948> 3084 <7949> <7949> 6651 <794a> <7952> 16512 <7953> <7953> 6654 <7954> <7955> 16521 <7956> <7956> 4675 <7957> <7957> 6657 <7958> <7959> 16523 <795a> <795a> 6655 <795b> <795c> 6652 <795d> <795d> 4608 <795e> <795e> 3370 <795f> <795f> 3555 <7960> <7960> 6658 <7961> <7961> 16525 <7962> <7962> 6656 <7963> <7964> 16526 <7965> <7965> 3926 <7966> <7966> 16528 <7967> <7967> 6660 <7968> <7968> 3024 <7969> <796c> 16529 <796d> <796d> 2099 <796e> <796e> 16533 <796f> <796f> 6659 <7970> <7976> 16534 <7977> <7977> 1436 <7978> <7978> 2059 <7979> <7979> 16541 endcidrange 100 begincidrange <797a> <797a> 6661 <797b> <797f> 16542 <7980> <7980> 4875 <7981> <7981> 2252 <7982> <7983> 16547 <7984> <7984> 2658 <7985> <7985> 6662 <7986> <7989> 16549 <798a> <798a> 6663 <798b> <798c> 16553 <798d> <798d> 8038 <798e> <798e> 9436 <798f> <798f> 1694 <7990> <7999> 16555 <799a> <799a> 6664 <799b> <79a5> 16565 <79a6> <79a6> 9890 <79a7> <79a7> 6665 <79a8> <79a9> 16576 <79aa> <79aa> 9437 <79ab> <79ad> 16578 <79ae> <79ae> 8206 <79af> <79af> 16581 <79b0> <79b0> 9435 <79b1> <79b1> 7864 <79b2> <79b2> 16582 <79b3> <79b3> 6666 <79b4> <79b8> 16583 <79b9> <79b9> 4306 <79ba> <79ba> 4708 <79bb> <79bb> 2518 <79bc> <79bc> 16588 <79bd> <79bd> 3162 <79be> <79be> 1923 <79bf> <79bf> 16589 <79c0> <79c0> 4014 <79c1> <79c1> 3506 <79c2> <79c2> 16590 <79c3> <79c3> 3691 <79c4> <79c5> 16591 <79c6> <79c6> 1740 <79c7> <79c8> 16593 <79c9> <79c9> 1125 <79ca> <79ca> 16595 <79cb> <79cb> 3180 <79cc> <79cc> 16596 <79cd> <79cd> 4565 <79ce> <79d0> 16597 <79d1> <79d1> 2387 <79d2> <79d2> 2800 <79d3> <79d4> 16600 <79d5> <79d5> 6941 <79d6> <79d7> 16602 <79d8> <79d8> 2781 <79d9> <79de> 16604 <79df> <79df> 4671 <79e0> <79e2> 16610 <79e3> <79e3> 6943 <79e4> <79e4> 1272 <79e5> <79e5> 16613 <79e6> <79e6> 3157 <79e7> <79e7> 4118 <79e8> <79e8> 16614 <79e9> <79e9> 4551 <79ea> <79ea> 16615 <79eb> <79eb> 6944 <79ec> <79ec> 16616 <79ed> <79ed> 6942 <79ee> <79ee> 16617 <79ef> <79ef> 2066 <79f0> <79f0> 1259 <79f1> <79f7> 16618 <79f8> <79f8> 2214 <79f9> <79fa> 16625 <79fb> <79fb> 4173 <79fc> <79fc> 16627 <79fd> <79fd> 2037 <79fe> <79ff> 16628 <7a00> <7a00> 3854 <7a01> <7a01> 16630 <7a02> <7a02> 6948 <7a03> <7a03> 6947 <7a04> <7a05> 16631 <7a06> <7a06> 6945 <7a07> <7a0a> 16633 <7a0b> <7a0b> 1265 <7a0c> <7a0c> 16637 <7a0d> <7a0d> 3341 <7a0e> <7a0e> 3493 <7a0f> <7a13> 16638 <7a14> <7a14> 6950 <7a15> <7a16> 16643 <7a17> <7a17> 1001 <7a18> <7a19> 16645 <7a1a> <7a1a> 4552 <7a1b> <7a1d> 16647 <7a1e> <7a1e> 6949 <7a1f> <7a1f> 16650 <7a20> <7a20> 1298 <7a21> <7a22> 16651 endcidrange 100 begincidrange <7a23> <7a23> 7567 <7a24> <7a2d> 16653 <7a2e> <7a2e> 8853 <7a2f> <7a30> 16663 <7a31> <7a31> 7808 <7a32> <7a32> 16665 <7a33> <7a33> 3799 <7a34> <7a36> 16666 <7a37> <7a37> 6952 <7a38> <7a38> 16669 <7a39> <7a39> 6951 <7a3a> <7a3a> 16670 <7a3b> <7a3b> 1439 <7a3c> <7a3c> 2125 <7a3d> <7a3d> 2065 <7a3e> <7a3e> 16671 <7a3f> <7a3f> 1760 <7a40> <7a40> 9847 <7a41> <7a45> 16672 <7a46> <7a46> 2853 <7a47> <7a4b> 16677 <7a4c> <7a4c> 9764 <7a4d> <7a4d> 8041 <7a4e> <7a4e> 8747 <7a4f> <7a50> 16682 <7a51> <7a51> 6953 <7a52> <7a56> 16684 <7a57> <7a57> 3552 <7a58> <7a60> 16689 <7a61> <7a61> 9599 <7a62> <7a62> 8027 <7a63> <7a68> 16698 <7a69> <7a69> 8603 <7a6a> <7a6a> 16704 <7a6b> <7a6b> 9853 <7a6c> <7a6f> 16705 <7a70> <7a70> 6956 <7a71> <7a73> 16709 <7a74> <7a74> 4049 <7a75> <7a75> 16712 <7a76> <7a76> 2286 <7a77> <7a77> 3179 <7a78> <7a79> 7066 <7a7a> <7a7a> 2402 <7a7b> <7a7e> 16713 <7a7f> <7a7f> 1324 <7a80> <7a80> 7068 <7a81> <7a81> 3692 <7a82> <7a82> 16717 <7a83> <7a83> 3153 <7a84> <7a84> 4430 <7a85> <7a85> 16718 <7a86> <7a86> 7069 <7a87> <7a87> 16719 <7a88> <7a88> 7070 <7a89> <7a8c> 16720 <7a8d> <7a8d> 3148 <7a8e> <7a90> 16724 <7a91> <7a91> 4139 <7a92> <7a92> 4558 <7a93> <7a94> 16727 <7a95> <7a95> 7071 <7a96> <7a96> 2210 <7a97> <7a97> 1331 <7a98> <7a98> 2284 <7a99> <7a9b> 16729 <7a9c> <7a9c> 1375 <7a9d> <7a9d> 3808 <7a9e> <7a9e> 16732 <7a9f> <7a9f> 2412 <7aa0> <7aa0> 7073 <7aa1> <7aa4> 16733 <7aa5> <7aa5> 2439 <7aa6> <7aa6> 7072 <7aa7> <7aa7> 16737 <7aa8> <7aa8> 7075 <7aa9> <7aa9> 8608 <7aaa> <7aaa> 8582 <7aab> <7aab> 16738 <7aac> <7aac> 7074 <7aad> <7aad> 7076 <7aae> <7aae> 8429 <7aaf> <7ab2> 16739 <7ab3> <7ab3> 7077 <7ab4> <7ab5> 16743 <7ab6> <7ab6> 9657 <7ab7> <7ab9> 16745 <7aba> <7aba> 8170 <7abb> <7abe> 16748 <7abf> <7abf> 2631 <7ac0> <7ac3> 16752 <7ac4> <7ac4> 7844 <7ac5> <7ac5> 8417 <7ac6> <7ac6> 16756 <7ac7> <7ac7> 9656 <7ac8> <7ac8> 8800 <7ac9> <7ac9> 16757 <7aca> <7aca> 8418 <7acb> <7acb> 2539 <7acc> <7ad5> 16758 endcidrange 100 begincidrange <7ad6> <7ad6> 3473 <7ad7> <7ad8> 16768 <7ad9> <7ad9> 4447 <7ada> <7add> 16770 <7ade> <7ade> 2281 <7adf> <7adf> 2280 <7ae0> <7ae0> 4451 <7ae1> <7ae2> 16774 <7ae3> <7ae3> 2351 <7ae4> <7ae4> 16776 <7ae5> <7ae5> 3680 <7ae6> <7ae6> 7065 <7ae7> <7ae9> 16777 <7aea> <7aea> 8513 <7aeb> <7aec> 16780 <7aed> <7aed> 2224 <7aee> <7aee> 16782 <7aef> <7aef> 1546 <7af0> <7af5> 16783 <7af6> <7af6> 8135 <7af7> <7af8> 16789 <7af9> <7af9> 4592 <7afa> <7afa> 7267 <7afb> <7afc> 16791 <7afd> <7afd> 7268 <7afe> <7afe> 16793 <7aff> <7aff> 1736 <7b00> <7b02> 16794 <7b03> <7b04> 7270 <7b05> <7b05> 16797 <7b06> <7b06> 981 <7b07> <7b07> 16798 <7b08> <7b08> 7269 <7b09> <7b09> 16799 <7b0a> <7b0a> 7273 <7b0b> <7b0b> 3558 <7b0c> <7b0e> 16800 <7b0f> <7b0f> 7275 <7b10> <7b10> 16803 <7b11> <7b11> 3953 <7b12> <7b13> 16804 <7b14> <7b14> 1075 <7b15> <7b15> 7272 <7b16> <7b18> 16806 <7b19> <7b19> 7279 <7b1a> <7b1a> 16809 <7b1b> <7b1b> 1458 <7b1c> <7b1d> 16810 <7b1e> <7b1e> 7287 <7b1f> <7b1f> 16812 <7b20> <7b20> 7282 <7b21> <7b23> 16813 <7b24> <7b24> 7284 <7b25> <7b25> 7283 <7b26> <7b26> 1688 <7b27> <7b27> 16816 <7b28> <7b28> 1064 <7b29> <7b29> 16817 <7b2a> <7b2a> 7278 <7b2b> <7b2b> 7274 <7b2c> <7b2c> 1467 <7b2d> <7b2d> 16818 <7b2e> <7b2e> 7280 <7b2f> <7b30> 16819 <7b31> <7b31> 7281 <7b32> <7b32> 16821 <7b33> <7b33> 7285 <7b34> <7b37> 16822 <7b38> <7b38> 7277 <7b39> <7b39> 16826 <7b3a> <7b3a> 2134 <7b3b> <7b3b> 16827 <7b3c> <7b3c> 2630 <7b3d> <7b3d> 16828 <7b3e> <7b3e> 7286 <7b3f> <7b44> 16829 <7b45> <7b45> 7290 <7b46> <7b46> 7745 <7b47> <7b47> 7276 <7b48> <7b48> 16835 <7b49> <7b49> 1449 <7b4a> <7b4a> 16836 <7b4b> <7b4b> 2239 <7b4c> <7b4c> 7292 <7b4d> <7b4e> 16837 <7b4f> <7b4f> 1601 <7b50> <7b50> 2429 <7b51> <7b51> 4605 <7b52> <7b52> 3683 <7b53> <7b53> 16839 <7b54> <7b54> 1395 <7b55> <7b55> 16840 <7b56> <7b56> 1190 <7b57> <7b57> 16841 <7b58> <7b58> 7288 <7b59> <7b59> 16842 <7b5a> <7b5a> 7289 <7b5b> <7b5b> 3313 <7b5c> <7b5c> 16843 <7b5d> <7b5d> 7293 endcidrange 100 begincidrange <7b5e> <7b5f> 16844 <7b60> <7b60> 7294 <7b61> <7b61> 16846 <7b62> <7b62> 7297 <7b63> <7b66> 16847 <7b67> <7b67> 9700 <7b68> <7b6d> 16851 <7b6e> <7b6e> 7295 <7b6f> <7b70> 16857 <7b71> <7b71> 7299 <7b72> <7b72> 7298 <7b73> <7b74> 16859 <7b75> <7b75> 7291 <7b76> <7b76> 16861 <7b77> <7b77> 2423 <7b78> <7b78> 16862 <7b79> <7b79> 1300 <7b7a> <7b7a> 16863 <7b7b> <7b7b> 7296 <7b7c> <7b7d> 16864 <7b7e> <7b7e> 3110 <7b7f> <7b7f> 16866 <7b80> <7b80> 2149 <7b81> <7b84> 16867 <7b85> <7b85> 7307 <7b86> <7b8a> 16871 <7b8b> <7b8b> 8070 <7b8c> <7b8c> 16876 <7b8d> <7b8d> 1816 <7b8e> <7b8f> 16877 <7b90> <7b90> 7300 <7b91> <7b93> 16879 <7b94> <7b94> 1140 <7b95> <7b95> 2067 <7b96> <7b96> 16882 <7b97> <7b97> 3544 <7b98> <7b9b> 16883 <7b9c> <7b9c> 7309 <7b9d> <7b9d> 7305 <7b9e> <7ba0> 16887 <7ba1> <7ba1> 1845 <7ba2> <7ba2> 7310 <7ba3> <7ba5> 16890 <7ba6> <7ba7> 7301 <7ba8> <7ba8> 7306 <7ba9> <7ba9> 2696 <7baa> <7baa> 7308 <7bab> <7bab> 7311 <7bac> <7bac> 7304 <7bad> <7bad> 2160 <7bae> <7bb0> 16893 <7bb1> <7bb1> 3921 <7bb2> <7bb3> 16896 <7bb4> <7bb4> 7312 <7bb5> <7bb7> 16898 <7bb8> <7bb8> 7303 <7bb9> <7bbf> 16901 <7bc0> <7bc0> 8115 <7bc1> <7bc1> 7314 <7bc2> <7bc3> 16908 <7bc4> <7bc4> 7919 <7bc5> <7bc5> 16910 <7bc6> <7bc6> 4618 <7bc7> <7bc7> 3017 <7bc8> <7bc8> 16911 <7bc9> <7bc9> 8868 <7bca> <7bca> 16912 <7bcb> <7bcb> 9704 <7bcc> <7bcc> 7315 <7bcd> <7bd0> 16913 <7bd1> <7bd1> 7313 <7bd2> <7bd2> 16917 <7bd3> <7bd3> 2639 <7bd4> <7bd8> 16918 <7bd9> <7bd9> 1752 <7bda> <7bda> 7317 <7bdb> <7bdc> 16923 <7bdd> <7bdd> 7316 <7bde> <7be0> 16925 <7be1> <7be1> 1374 <7be2> <7be3> 16928 <7be4> <7be4> 9699 <7be5> <7be6> 7318 <7be7> <7be8> 16930 <7be9> <7be9> 8465 <7bea> <7bea> 7320 <7beb> <7bed> 16932 <7bee> <7bee> 2469 <7bef> <7bf0> 16935 <7bf1> <7bf1> 2516 <7bf2> <7bf2> 16937 <7bf3> <7bf3> 9702 <7bf4> <7bf6> 16938 <7bf7> <7bf7> 2994 <7bf8> <7bfb> 16941 <7bfc> <7bfc> 7323 <7bfd> <7bfd> 16945 <7bfe> <7bfe> 7322 <7bff> <7bff> 16946 <7c00> <7c00> 9703 endcidrange 100 begincidrange <7c01> <7c06> 16947 <7c07> <7c07> 1371 <7c08> <7c0a> 16953 <7c0b> <7c0b> 7326 <7c0c> <7c0c> 7321 <7c0d> <7c0d> 8257 <7c0e> <7c0e> 16956 <7c0f> <7c0f> 7324 <7c10> <7c15> 16957 <7c16> <7c16> 7325 <7c17> <7c1d> 16963 <7c1e> <7c1e> 9706 <7c1f> <7c1f> 7327 <7c20> <7c20> 16970 <7c21> <7c21> 8079 <7c22> <7c22> 16971 <7c23> <7c23> 9708 <7c24> <7c25> 16972 <7c26> <7c26> 7329 <7c27> <7c27> 2014 <7c28> <7c29> 16974 <7c2a> <7c2a> 7328 <7c2b> <7c2b> 9707 <7c2c> <7c37> 16976 <7c38> <7c38> 7330 <7c39> <7c3c> 16988 <7c3d> <7c3d> 8400 <7c3e> <7c3e> 8221 <7c3f> <7c3f> 1157 <7c40> <7c40> 7332 <7c41> <7c41> 7331 <7c42> <7c42> 16992 <7c43> <7c43> 8183 <7c44> <7c4b> 16993 <7c4c> <7c4c> 7821 <7c4d> <7c4d> 2081 <7c4e> <7c5b> 17001 <7c5c> <7c5c> 9705 <7c5d> <7c5e> 17015 <7c5f> <7c5f> 9710 <7c60> <7c60> 8250 <7c61> <7c63> 17017 <7c64> <7c64> 9875 <7c65> <7c68> 17020 <7c69> <7c69> 9701 <7c6a> <7c6a> 9709 <7c6b> <7c6b> 17024 <7c6c> <7c6c> 8201 <7c6d> <7c6d> 17025 <7c6e> <7c6e> 8293 <7c6f> <7c71> 17026 <7c72> <7c72> 9891 <7c73> <7c73> 2780 <7c74> <7c74> 4853 <7c75> <7c7a> 17029 <7c7b> <7c7b> 2507 <7c7c> <7c7c> 7370 <7c7d> <7c7d> 4654 <7c7e> <7c88> 17035 <7c89> <7c89> 1656 <7c8a> <7c90> 17046 <7c91> <7c91> 7372 <7c92> <7c92> 2540 <7c93> <7c94> 17053 <7c95> <7c95> 3048 <7c96> <7c96> 17055 <7c97> <7c97> 1369 <7c98> <7c98> 4436 <7c99> <7c9b> 17056 <7c9c> <7c9c> 7374 <7c9d> <7c9d> 7373 <7c9e> <7c9e> 7375 <7c9f> <7c9f> 3535 <7ca0> <7ca1> 17059 <7ca2> <7ca2> 7376 <7ca3> <7ca3> 17061 <7ca4> <7ca4> 4356 <7ca5> <7ca5> 4575 <7ca6> <7ca9> 17062 <7caa> <7caa> 1661 <7cab> <7cad> 17066 <7cae> <7cae> 2561 <7caf> <7cb0> 17069 <7cb1> <7cb1> 2564 <7cb2> <7cb2> 7377 <7cb3> <7cb3> 2267 <7cb4> <7cb8> 17071 <7cb9> <7cb9> 1381 <7cba> <7cbb> 17076 <7cbc> <7cbd> 7378 <7cbe> <7cbe> 2266 <7cbf> <7cc0> 17078 <7cc1> <7cc1> 7380 <7cc2> <7cc4> 17080 <7cc5> <7cc5> 7385 <7cc6> <7cc6> 17083 <7cc7> <7cc7> 7381 <7cc8> <7cc8> 7384 <7cc9> <7cc9> 17084 <7cca> <7cca> 1972 endcidrange 100 begincidrange <7ccb> <7ccb> 17085 <7ccc> <7ccd> 7382 <7cce> <7cd4> 17086 <7cd5> <7cd5> 1757 <7cd6> <7cd6> 3610 <7cd7> <7cd7> 7386 <7cd8> <7cd8> 17093 <7cd9> <7cd9> 1185 <7cda> <7cdb> 17094 <7cdc> <7cdc> 2776 <7cdd> <7cdd> 9717 <7cde> <7cde> 7932 <7cdf> <7cdf> 4390 <7ce0> <7ce0> 2372 <7ce1> <7ce6> 17096 <7ce7> <7ce7> 8228 <7ce8> <7ce8> 7387 <7ce9> <7cee> 17102 <7cef> <7cef> 2933 <7cf0> <7cf0> 9883 <7cf1> <7cf1> 17108 <7cf2> <7cf2> 9715 <7cf3> <7cf3> 17109 <7cf4> <7cf4> 8921 <7cf5> <7cf5> 17110 <7cf6> <7cf6> 9716 <7cf7> <7cf7> 17111 <7cf8> <7cf8> 7399 <7cf9> <7cf9> 9243 <7cfa> <7cfa> 17112 <7cfb> <7cfb> 3874 <7cfc> <7cfd> 17113 <7cfe> <7cfe> 8136 <7cff> <7cff> 17115 <7d00> <7d00> 8059 <7d01> <7d01> 17116 <7d02> <7d02> 9245 <7d03> <7d03> 17117 <7d04> <7d04> 8780 <7d05> <7d05> 8008 <7d06> <7d06> 9244 <7d07> <7d08> 9246 <7d09> <7d09> 8447 <7d0a> <7d0a> 3800 <7d0b> <7d0b> 8602 <7d0c> <7d0c> 17118 <7d0d> <7d0d> 8337 <7d0e> <7d0f> 17119 <7d10> <7d10> 8359 <7d11> <7d12> 17121 <7d13> <7d13> 9251 <7d14> <7d14> 7835 <7d15> <7d15> 9250 <7d16> <7d16> 17123 <7d17> <7d17> 8464 <7d18> <7d18> 17124 <7d19> <7d19> 8845 <7d1a> <7d1a> 8049 <7d1b> <7d1b> 7928 <7d1c> <7d1c> 9249 <7d1d> <7d1f> 17125 <7d20> <7d20> 3533 <7d21> <7d21> 7923 <7d22> <7d22> 3564 <7d23> <7d26> 17128 <7d27> <7d27> 2245 <7d28> <7d2a> 17132 <7d2b> <7d2b> 4652 <7d2c> <7d2e> 17135 <7d2f> <7d2f> 2502 <7d30> <7d30> 8625 <7d31> <7d31> 9254 <7d32> <7d32> 9253 <7d33> <7d33> 8480 <7d34> <7d38> 17138 <7d39> <7d39> 8474 <7d3a> <7d3a> 9252 <7d3b> <7d3b> 17143 <7d3c> <7d3c> 9256 <7d3d> <7d3e> 17144 <7d3f> <7d3f> 9258 <7d40> <7d40> 9257 <7d41> <7d41> 17146 <7d42> <7d42> 8852 <7d43> <7d43> 17147 <7d44> <7d44> 8894 <7d45> <7d45> 17148 <7d46> <7d46> 7729 <7d47> <7d4d> 17149 <7d4e> <7d4e> 9260 <7d4f> <7d4f> 17156 <7d50> <7d50> 8117 <7d51> <7d5c> 17157 <7d5d> <7d5d> 9259 <7d5e> <7d5e> 8111 <7d5f> <7d60> 17169 <7d61> <7d61> 8296 <7d62> <7d62> 8676 <7d63> <7d65> 17171 <7d66> <7d66> 7969 endcidrange 100 begincidrange <7d67> <7d67> 17174 <7d68> <7d68> 8449 <7d69> <7d6d> 17175 <7d6e> <7d6e> 4032 <7d6f> <7d70> 17180 <7d71> <7d71> 8572 <7d72> <7d72> 8522 <7d73> <7d73> 9261 <7d74> <7d75> 17182 <7d76> <7d76> 8148 <7d77> <7d77> 7400 <7d78> <7d78> 17184 <7d79> <7d79> 8145 <7d7a> <7d80> 17185 <7d81> <7d81> 7731 <7d82> <7d82> 17192 <7d83> <7d83> 9263 <7d84> <7d85> 17193 <7d86> <7d86> 9262 <7d87> <7d87> 17195 <7d88> <7d88> 9264 <7d89> <7d89> 8667 <7d8a> <7d8e> 17196 <7d8f> <7d8f> 8536 <7d90> <7d92> 17201 <7d93> <7d93> 8130 <7d94> <7d9b> 17204 <7d9c> <7d9c> 8889 <7d9d> <7d9d> 17212 <7d9e> <7d9e> 9270 <7d9f> <7da1> 17213 <7da2> <7da2> 7822 <7da3> <7da3> 9273 <7da4> <7da5> 17216 <7da6> <7da6> 7401 <7da7> <7daa> 17218 <7dab> <7dab> 8645 <7dac> <7dac> 9271 <7dad> <7dad> 8594 <7dae> <7dae> 7402 <7daf> <7daf> 17222 <7db0> <7db0> 9274 <7db1> <7db1> 7961 <7db2> <7db2> 8588 <7db3> <7db3> 7744 <7db4> <7db4> 8883 <7db5> <7db7> 17223 <7db8> <7db8> 8287 <7db9> <7db9> 9272 <7dba> <7dba> 9266 <7dbb> <7dbb> 8820 <7dbc> <7dbc> 17226 <7dbd> <7dbd> 7836 <7dbe> <7dbe> 9265 <7dbf> <7dbf> 8325 <7dc0> <7dc3> 17227 <7dc4> <7dc4> 9269 <7dc5> <7dc6> 17231 <7dc7> <7dc7> 9275 <7dc8> <7dc9> 17233 <7dca> <7dca> 8119 <7dcb> <7dcb> 9267 <7dcc> <7dd0> 17235 <7dd1> <7dd1> 8276 <7dd2> <7dd2> 8670 <7dd3> <7dd3> 17240 <7dd4> <7dd4> 9268 <7dd5> <7dd6> 17241 <7dd7> <7dd7> 9277 <7dd8> <7dd8> 8073 <7dd9> <7dd9> 9276 <7dda> <7ddc> 17243 <7ddd> <7ddd> 8046 <7dde> <7dde> 7896 <7ddf> <7ddf> 17246 <7de0> <7de0> 7871 <7de1> <7de1> 9285 <7de2> <7de2> 17247 <7de3> <7de3> 8777 <7de4> <7de5> 17248 <7de6> <7de6> 9281 <7de7> <7de7> 17250 <7de8> <7de8> 7751 <7de9> <7de9> 8022 <7dea> <7deb> 17251 <7dec> <7dec> 8326 <7ded> <7dee> 17253 <7def> <7def> 8598 <7df0> <7df0> 17255 <7df1> <7df1> 9283 <7df2> <7df2> 9279 <7df3> <7df3> 17256 <7df4> <7df4> 8227 <7df5> <7df5> 17257 <7df6> <7df6> 9282 <7df7> <7df8> 17258 <7df9> <7df9> 9278 <7dfa> <7dfa> 17260 <7dfb> <7dfb> 9894 <7dfc> <7dff> 17261 endcidrange 100 begincidrange <7e00> <7e07> 17265 <7e08> <7e08> 9038 <7e09> <7e09> 9286 <7e0a> <7e0a> 9291 <7e0b> <7e0b> 9284 <7e0c> <7e0f> 17273 <7e10> <7e10> 9255 <7e11> <7e11> 9292 <7e12> <7e1a> 17277 <7e1b> <7e1b> 7951 <7e1c> <7e1c> 17286 <7e1d> <7e1d> 9287 <7e1e> <7e1e> 9289 <7e1f> <7e1f> 9288 <7e20> <7e22> 17287 <7e23> <7e23> 8642 <7e24> <7e26> 17290 <7e27> <7e27> 8558 <7e28> <7e2a> 17293 <7e2b> <7e2b> 7939 <7e2c> <7e2c> 17296 <7e2d> <7e2d> 9290 <7e2e> <7e2e> 8540 <7e2f> <7e30> 17297 <7e31> <7e31> 8891 <7e32> <7e32> 9296 <7e33> <7e33> 17299 <7e34> <7e34> 9876 <7e35> <7e35> 9295 <7e36> <7e36> 9718 <7e37> <7e37> 8273 <7e38> <7e38> 17300 <7e39> <7e39> 9294 <7e3a> <7e3a> 17301 <7e3b> <7e3b> 7675 <7e3c> <7e3c> 17302 <7e3d> <7e3d> 8890 <7e3e> <7e3e> 8045 <7e3f> <7e40> 17303 <7e41> <7e41> 1614 <7e42> <7e44> 17305 <7e45> <7e45> 9298 <7e46> <7e46> 9297 <7e47> <7e47> 7403 <7e48> <7e51> 17308 <7e52> <7e52> 9301 <7e53> <7e53> 17318 <7e54> <7e54> 8841 <7e55> <7e55> 8470 <7e56> <7e59> 17319 <7e5a> <7e5a> 9300 <7e5b> <7e5d> 17323 <7e5e> <7e5e> 8443 <7e5f> <7e61> 17326 <7e62> <7e62> 9280 <7e63> <7e68> 17329 <7e69> <7e69> 8486 <7e6a> <7e6a> 8033 <7e6b> <7e6b> 9885 <7e6c> <7e6c> 17335 <7e6d> <7e6d> 8074 <7e6e> <7e6e> 9302 <7e6f> <7e6f> 9305 <7e70> <7e70> 9304 <7e71> <7e72> 17336 <7e73> <7e73> 8110 <7e74> <7e78> 17338 <7e79> <7e79> 8730 <7e7a> <7e7b> 17343 <7e7c> <7e7c> 8058 <7e7d> <7e7d> 9293 <7e7e> <7e7e> 9303 <7e7f> <7e81> 17345 <7e82> <7e82> 4680 <7e83> <7e87> 17348 <7e88> <7e88> 9299 <7e89> <7e89> 17353 <7e8a> <7e8a> 9248 <7e8b> <7e8b> 17354 <7e8c> <7e8c> 8671 <7e8d> <7e8d> 9861 <7e8e> <7e8e> 17355 <7e8f> <7e8f> 7790 <7e90> <7e92> 17356 <7e93> <7e93> 8740 <7e94> <7e94> 9840 <7e95> <7e95> 17359 <7e96> <7e96> 8634 <7e97> <7e97> 17360 <7e98> <7e98> 9306 <7e99> <7e9a> 17361 <7e9b> <7e9b> 7404 <7e9c> <7e9c> 8191 <7e9d> <7e9e> 17363 <7e9f> <7e9f> 6099 <7ea0> <7ea0> 2287 <7ea1> <7ea1> 6100 <7ea2> <7ea2> 1955 <7ea3> <7ea3> 6101 <7ea4> <7ea4> 3896 endcidrange 100 begincidrange <7ea5> <7ea5> 6102 <7ea6> <7ea6> 4351 <7ea7> <7ea7> 2089 <7ea8> <7ea9> 6103 <7eaa> <7eaa> 2112 <7eab> <7eab> 3245 <7eac> <7eac> 3778 <7ead> <7ead> 6105 <7eae> <7eae> 17365 <7eaf> <7eaf> 1346 <7eb0> <7eb0> 6106 <7eb1> <7eb1> 3309 <7eb2> <7eb2> 1748 <7eb3> <7eb3> 2860 <7eb4> <7eb4> 17366 <7eb5> <7eb5> 4666 <7eb6> <7eb6> 2689 <7eb7> <7eb7> 1652 <7eb8> <7eb8> 4540 <7eb9> <7eb9> 3797 <7eba> <7eba> 1633 <7ebb> <7ebc> 17367 <7ebd> <7ebd> 2919 <7ebe> <7ebe> 6107 <7ebf> <7ebf> 3916 <7ec0> <7ec2> 6108 <7ec3> <7ec3> 2560 <7ec4> <7ec4> 4678 <7ec5> <7ec5> 3369 <7ec6> <7ec6> 3877 <7ec7> <7ec7> 4526 <7ec8> <7ec8> 4564 <7ec9> <7ec9> 6111 <7eca> <7eca> 1016 <7ecb> <7ecc> 6112 <7ecd> <7ecd> 3349 <7ece> <7ece> 4214 <7ecf> <7ecf> 2268 <7ed0> <7ed0> 6114 <7ed1> <7ed1> 1022 <7ed2> <7ed2> 3257 <7ed3> <7ed3> 2226 <7ed4> <7ed4> 6115 <7ed5> <7ed5> 3233 <7ed6> <7ed6> 17369 <7ed7> <7ed7> 6116 <7ed8> <7ed8> 2043 <7ed9> <7ed9> 1779 <7eda> <7eda> 4045 <7edb> <7edb> 6117 <7edc> <7edc> 2702 <7edd> <7edd> 2343 <7ede> <7ede> 2203 <7edf> <7edf> 3684 <7ee0> <7ee1> 6118 <7ee2> <7ee2> 2333 <7ee3> <7ee3> 4016 <7ee4> <7ee4> 17370 <7ee5> <7ee5> 3548 <7ee6> <7ee6> 3619 <7ee7> <7ee7> 2111 <7ee8> <7ee8> 6120 <7ee9> <7ee9> 2075 <7eea> <7eea> 4034 <7eeb> <7eeb> 6121 <7eec> <7eec> 17371 <7eed> <7eed> 4035 <7eee> <7eef> 6122 <7ef0> <7ef0> 1349 <7ef1> <7ef2> 6124 <7ef3> <7ef3> 3383 <7ef4> <7ef4> 3771 <7ef5> <7ef5> 2789 <7ef6> <7ef6> 6127 <7ef7> <7ef7> 1066 <7ef8> <7ef8> 1302 <7ef9> <7ef9> 17372 <7efa> <7efb> 6128 <7efc> <7efc> 4664 <7efd> <7efd> 4449 <7efe> <7efe> 6130 <7eff> <7eff> 2675 <7f00> <7f00> 4631 <7f01> <7f03> 6131 <7f04> <7f04> 2141 <7f05> <7f05> 2794 <7f06> <7f06> 2477 <7f07> <7f08> 6134 <7f09> <7f09> 2076 <7f0a> <7f0a> 17373 <7f0b> <7f0c> 6136 <7f0d> <7f0d> 6126 <7f0e> <7f0e> 1551 <7f0f> <7f0f> 6138 <7f10> <7f10> 17374 <7f11> <7f12> 6139 <7f13> <7f13> 1999 <7f14> <7f14> 1471 <7f15> <7f15> 2669 <7f16> <7f16> 1097 endcidrange 100 begincidrange <7f17> <7f17> 6141 <7f18> <7f18> 4344 <7f19> <7f19> 6142 <7f1a> <7f1a> 1722 <7f1b> <7f1b> 6144 <7f1c> <7f1c> 6143 <7f1d> <7f1d> 1673 <7f1e> <7f1e> 17375 <7f1f> <7f1f> 6145 <7f20> <7f20> 1215 <7f21> <7f27> 6146 <7f28> <7f28> 4236 <7f29> <7f29> 3562 <7f2a> <7f2d> 6153 <7f2e> <7f2e> 3330 <7f2f> <7f33> 6157 <7f34> <7f34> 2202 <7f35> <7f35> 6162 <7f36> <7f36> 7262 <7f37> <7f37> 17376 <7f38> <7f38> 1746 <7f39> <7f39> 17377 <7f3a> <7f3a> 3212 <7f3b> <7f41> 17378 <7f42> <7f42> 7263 <7f43> <7f43> 17385 <7f44> <7f45> 7264 <7f46> <7f4b> 17386 <7f4c> <7f4c> 9698 <7f4d> <7f4d> 17392 <7f4e> <7f4e> 9882 <7f4f> <7f4f> 17393 <7f50> <7f50> 1847 <7f51> <7f51> 3753 <7f52> <7f53> 17394 <7f54> <7f54> 4766 <7f55> <7f55> 1896 <7f56> <7f56> 17396 <7f57> <7f57> 2693 <7f58> <7f58> 6785 <7f59> <7f59> 17397 <7f5a> <7f5a> 1600 <7f5b> <7f5e> 17398 <7f5f> <7f5f> 6787 <7f60> <7f60> 17402 <7f61> <7f61> 6786 <7f62> <7f62> 992 <7f63> <7f67> 17403 <7f68> <7f68> 6789 <7f69> <7f69> 4471 <7f6a> <7f6a> 4684 <7f6b> <7f6d> 17408 <7f6e> <7f6e> 4546 <7f6f> <7f6f> 17411 <7f70> <7f70> 7914 <7f71> <7f71> 6791 <7f72> <7f72> 3463 <7f73> <7f73> 17412 <7f74> <7f74> 6790 <7f75> <7f76> 17413 <7f77> <7f77> 7724 <7f78> <7f78> 17415 <7f79> <7f79> 6792 <7f7a> <7f7d> 17416 <7f7e> <7f7e> 6794 <7f7f> <7f80> 17420 <7f81> <7f81> 6793 <7f82> <7f84> 17422 <7f85> <7f85> 8290 <7f86> <7f86> 9457 <7f87> <7f87> 17425 <7f88> <7f88> 9458 <7f89> <7f89> 17426 <7f8a> <7f8a> 4123 <7f8b> <7f8b> 17427 <7f8c> <7f8c> 3129 <7f8d> <7f8d> 17428 <7f8e> <7f8e> 2757 <7f8f> <7f93> 17429 <7f94> <7f94> 1756 <7f95> <7f99> 17434 <7f9a> <7f9a> 2608 <7f9b> <7f9c> 17439 <7f9d> <7f9d> 7364 <7f9e> <7f9e> 4010 <7f9f> <7f9f> 7365 <7fa0> <7fa0> 17441 <7fa1> <7fa1> 3912 <7fa2> <7fa3> 17442 <7fa4> <7fa4> 3221 <7fa5> <7fa5> 9714 <7fa6> <7fa6> 17444 <7fa7> <7fa7> 7366 <7fa8> <7fa8> 17445 <7fa9> <7fa9> 8725 <7faa> <7fae> 17446 <7faf> <7fb0> 7367 <7fb1> <7fb1> 17451 <7fb2> <7fb2> 7369 <7fb3> <7fb7> 17452 endcidrange 100 begincidrange <7fb8> <7fb8> 4878 <7fb9> <7fb9> 1785 <7fba> <7fbb> 17457 <7fbc> <7fbc> 5997 <7fbd> <7fbd> 4309 <7fbe> <7fbe> 17459 <7fbf> <7fbf> 7390 <7fc0> <7fc0> 17460 <7fc1> <7fc1> 3803 <7fc2> <7fc4> 17461 <7fc5> <7fc5> 1286 <7fc6> <7fc9> 17464 <7fca> <7fca> 7064 <7fcb> <7fcb> 17468 <7fcc> <7fcc> 4213 <7fcd> <7fcd> 17469 <7fce> <7fce> 7391 <7fcf> <7fd1> 17470 <7fd2> <7fd2> 8622 <7fd3> <7fd3> 17473 <7fd4> <7fd4> 3925 <7fd5> <7fd5> 7392 <7fd6> <7fd7> 17474 <7fd8> <7fd8> 3145 <7fd9> <7fde> 17476 <7fdf> <7fdf> 1461 <7fe0> <7fe0> 1383 <7fe1> <7fe1> 7394 <7fe2> <7fe4> 17482 <7fe5> <7fe5> 7393 <7fe6> <7fe6> 7395 <7fe7> <7fe8> 17485 <7fe9> <7fe9> 7396 <7fea> <7fed> 17487 <7fee> <7fee> 7397 <7fef> <7fef> 17491 <7ff0> <7ff0> 1897 <7ff1> <7ff1> 970 <7ff2> <7ff2> 17492 <7ff3> <7ff3> 7398 <7ff4> <7ff8> 17493 <7ff9> <7ff9> 8416 <7ffa> <7ffa> 17498 <7ffb> <7ffb> 1610 <7ffc> <7ffc> 4212 <7ffd> <7fff> 17499 <8000> <8000> 4146 <8001> <8001> 2490 <8002> <8002> 17502 <8003> <8003> 2377 <8004> <8004> 6483 <8005> <8005> 4480 <8006> <8006> 6426 <8007> <800a> 17503 <800b> <800b> 7127 <800c> <800c> 1591 <800d> <800d> 3480 <800e> <800f> 17507 <8010> <8010> 2864 <8011> <8011> 17509 <8012> <8012> 7115 <8013> <8013> 17510 <8014> <8014> 7116 <8015> <8015> 1782 <8016> <8016> 7117 <8017> <8017> 1915 <8018> <8018> 4360 <8019> <8019> 989 <801a> <801b> 17511 <801c> <801c> 7118 <801d> <801f> 17513 <8020> <8020> 7119 <8021> <8021> 17516 <8022> <8022> 7120 <8023> <8024> 17517 <8025> <8027> 7121 <8028> <8028> 7125 <8029> <8029> 7124 <802a> <802a> 2966 <802b> <802b> 17519 <802c> <802c> 9666 <802d> <802d> 17520 <802e> <802e> 9665 <802f> <8030> 17521 <8031> <8031> 7126 <8032> <8032> 17523 <8033> <8033> 1593 <8034> <8034> 17524 <8035> <8035> 7128 <8036> <8036> 4149 <8037> <8037> 5297 <8038> <8038> 3519 <8039> <803a> 17525 <803b> <803b> 1281 <803c> <803c> 17527 <803d> <803d> 1411 <803e> <803e> 17528 <803f> <803f> 1787 <8040> <8041> 17529 <8042> <8042> 2903 endcidrange 100 begincidrange <8043> <8043> 7129 <8044> <8045> 17531 <8046> <8046> 7130 <8047> <8049> 17533 <804a> <804a> 2573 <804b> <804b> 2628 <804c> <804c> 4527 <804d> <804d> 7131 <804e> <8051> 17536 <8052> <8052> 7132 <8053> <8053> 17540 <8054> <8054> 2547 <8055> <8055> 17541 <8056> <8056> 8488 <8057> <8057> 17542 <8058> <8058> 3031 <8059> <8059> 17543 <805a> <805a> 2314 <805b> <805d> 17544 <805e> <805e> 8601 <805f> <8068> 17547 <8069> <8069> 7133 <806a> <806a> 1362 <806b> <806e> 17557 <806f> <806f> 8215 <8070> <8070> 7840 <8071> <8071> 7134 <8072> <8072> 8485 <8073> <8073> 8525 <8074> <8074> 17561 <8075> <8075> 9668 <8076> <8076> 8349 <8077> <8077> 8842 <8078> <8078> 17562 <8079> <8079> 9667 <807a> <807c> 17563 <807d> <807d> 8569 <807e> <807e> 8248 <807f> <807f> 6686 <8080> <8080> 6685 <8081> <8082> 17566 <8083> <8083> 3541 <8084> <8084> 4197 <8085> <8085> 8533 <8086> <8086> 3510 <8087> <8087> 4473 <8088> <8088> 17568 <8089> <8089> 3261 <808a> <808a> 17569 <808b> <808b> 2506 <808c> <808c> 2068 <808d> <8092> 17570 <8093> <8093> 6513 <8094> <8095> 17576 <8096> <8096> 3951 <8097> <8097> 17578 <8098> <8098> 4577 <8099> <8099> 17579 <809a> <809a> 1542 <809b> <809b> 1747 <809c> <809c> 6512 <809d> <809d> 1737 <809e> <809e> 17580 <809f> <809f> 6511 <80a0> <80a0> 1227 <80a1> <80a1> 1826 <80a2> <80a2> 4522 <80a3> <80a3> 17581 <80a4> <80a4> 1681 <80a5> <80a5> 1639 <80a6> <80a8> 17582 <80a9> <80a9> 2138 <80aa> <80aa> 1627 <80ab> <80ab> 6518 <80ac> <80ac> 17585 <80ad> <80ad> 6519 <80ae> <80ae> 964 <80af> <80af> 2396 <80b0> <80b0> 17586 <80b1> <80b1> 6517 <80b2> <80b2> 4322 <80b3> <80b3> 17587 <80b4> <80b4> 6520 <80b5> <80b6> 17588 <80b7> <80b7> 6521 <80b8> <80b9> 17590 <80ba> <80ba> 1643 <80bb> <80bb> 17592 <80bc> <80bc> 6514 <80bd> <80bd> 6516 <80be> <80be> 3375 <80bf> <80bf> 4566 <80c0> <80c0> 4462 <80c1> <80c1> 3965 <80c2> <80c2> 6527 <80c3> <80c3> 3783 <80c4> <80c4> 6528 <80c5> <80c5> 17593 <80c6> <80c6> 1417 <80c7> <80cb> 17594 endcidrange 100 begincidrange <80cc> <80cc> 1052 <80cd> <80cd> 6530 <80ce> <80ce> 3576 <80cf> <80d5> 17599 <80d6> <80d6> 2967 <80d7> <80d7> 6531 <80d8> <80d8> 17606 <80d9> <80d9> 6529 <80da> <80da> 2976 <80db> <80db> 6526 <80dc> <80dc> 3387 <80dd> <80dd> 6533 <80de> <80de> 1030 <80df> <80e0> 17607 <80e1> <80e1> 1969 <80e2> <80e3> 17609 <80e4> <80e4> 4717 <80e5> <80e5> 7111 <80e6> <80e6> 17611 <80e7> <80ea> 6522 <80eb> <80eb> 6534 <80ec> <80ec> 6042 <80ed> <80ed> 6537 <80ee> <80ee> 17612 <80ef> <80ef> 2421 <80f0> <80f0> 4175 <80f1> <80f1> 6535 <80f2> <80f2> 6540 <80f3> <80f3> 1767 <80f4> <80f4> 6536 <80f5> <80f5> 17613 <80f6> <80f6> 2187 <80f7> <80f7> 17614 <80f8> <80f8> 4003 <80f9> <80f9> 17615 <80fa> <80fa> 962 <80fb> <80fb> 17616 <80fc> <80fc> 6541 <80fd> <80fd> 2879 <80fe> <80ff> 17617 <8100> <8101> 17619 <8102> <8102> 4523 <8103> <8104> 17621 <8105> <8105> 8658 <8106> <8106> 1379 <8107> <8108> 17623 <8109> <8109> 2717 <810a> <810a> 2092 <810b> <810c> 17625 <810d> <810e> 6538 <810f> <810f> 4387 <8110> <8110> 3081 <8111> <8111> 2871 <8112> <8112> 6543 <8113> <8113> 2920 <8114> <8114> 4873 <8115> <8115> 17627 <8116> <8116> 1144 <8117> <8117> 17628 <8118> <8118> 6548 <8119> <8119> 17629 <811a> <811a> 2198 <811b> <811b> 9415 <811c> <811d> 17630 <811e> <811e> 6546 <811f> <812b> 17632 <812c> <812c> 6547 <812d> <812e> 17645 <812f> <812f> 1703 <8130> <8130> 17647 <8131> <8131> 3714 <8132> <8132> 6549 <8133> <8135> 17648 <8136> <8136> 6545 <8137> <8137> 17651 <8138> <8138> 2556 <8139> <8139> 8825 <813a> <813d> 17652 <813e> <813e> 3009 <813f> <8145> 17656 <8146> <8146> 3654 <8147> <8147> 17663 <8148> <8148> 6550 <8149> <8149> 17664 <814a> <814a> 2459 <814b> <814b> 4159 <814c> <814c> 6551 <814d> <814d> 17665 <814e> <814e> 8483 <814f> <814f> 17666 <8150> <8150> 1706 <8151> <8151> 1704 <8152> <8152> 17667 <8153> <8153> 6552 <8154> <8154> 3128 <8155> <8155> 3748 <8156> <8156> 9413 <8157> <8158> 17668 <8159> <815a> 6554 <815b> <815f> 17670 endcidrange 100 begincidrange <8160> <8160> 6557 <8161> <8161> 9417 <8162> <8164> 17675 <8165> <8165> 3987 <8166> <8166> 8340 <8167> <8167> 6562 <8168> <8168> 17678 <8169> <8169> 6558 <816a> <816a> 17679 <816b> <816b> 8854 <816c> <816c> 17680 <816d> <816d> 6561 <816e> <816e> 3284 <816f> <816f> 17681 <8170> <8170> 4133 <8171> <8171> 6556 <8172> <8173> 17682 <8174> <8174> 6553 <8175> <8177> 17684 <8178> <8178> 7799 <8179> <8179> 1716 <817a> <817a> 3910 <817b> <817b> 2888 <817c> <817d> 6559 <817e> <817e> 3629 <817f> <817f> 3705 <8180> <8180> 1021 <8181> <8181> 17687 <8182> <8182> 6566 <8183> <8187> 17688 <8188> <8188> 6565 <8189> <8189> 17693 <818a> <818a> 1145 <818b> <818e> 17694 <818f> <818f> 1755 <8190> <8190> 17698 <8191> <8191> 6567 <8192> <8197> 17699 <8198> <8198> 1109 <8199> <8199> 17705 <819a> <819a> 7942 <819b> <819b> 3608 <819c> <819c> 2823 <819d> <819d> 3858 <819e> <819f> 17706 <81a0> <81a0> 8101 <81a1> <81a2> 17708 <81a3> <81a3> 6569 <81a4> <81a5> 17710 <81a6> <81a6> 6576 <81a7> <81a7> 17712 <81a8> <81a8> 2995 <81a9> <81a9> 8345 <81aa> <81aa> 6570 <81ab> <81b2> 17713 <81b3> <81b3> 3326 <81b4> <81b9> 17721 <81ba> <81ba> 5697 <81bb> <81bb> 6574 <81bc> <81bc> 17727 <81bd> <81bd> 7853 <81be> <81be> 9416 <81bf> <81bf> 8360 <81c0> <81c0> 3711 <81c1> <81c1> 6575 <81c2> <81c2> 1092 <81c3> <81c3> 4252 <81c4> <81c5> 17728 <81c6> <81c6> 4195 <81c7> <81c8> 17730 <81c9> <81c9> 8223 <81ca> <81ca> 6573 <81cb> <81cb> 17732 <81cc> <81cc> 6571 <81cd> <81cd> 8389 <81ce> <81ce> 17733 <81cf> <81cf> 9418 <81d0> <81d7> 17734 <81d8> <81d8> 8176 <81d9> <81d9> 17742 <81da> <81da> 9414 <81db> <81de> 17743 <81df> <81df> 8797 <81e0> <81e0> 8926 <81e1> <81e2> 17747 <81e3> <81e3> 1249 <81e4> <81e6> 17749 <81e7> <81e7> 6402 <81e8> <81e8> 8236 <81e9> <81e9> 17752 <81ea> <81ea> 4657 <81eb> <81eb> 17753 <81ec> <81ec> 7337 <81ed> <81ed> 1305 <81ee> <81f2> 17754 <81f3> <81f4> 4544 <81f5> <81f9> 17759 <81fa> <81fa> 8545 <81fb> <81fb> 4490 <81fc> <81fc> 2297 endcidrange 100 begincidrange <81fd> <81fd> 17764 <81fe> <81fe> 7333 <81ff> <81ff> 17765 <8200> <8200> 4143 <8201> <8202> 7334 <8203> <8203> 17766 <8204> <8204> 7336 <8205> <8205> 2298 <8206> <8206> 4292 <8207> <8207> 8763 <8208> <8208> 8665 <8209> <8209> 8139 <820a> <820a> 8137 <820b> <820b> 17767 <820c> <820d> 3353 <820e> <820f> 17768 <8210> <8210> 7266 <8211> <8211> 17770 <8212> <8212> 3453 <8213> <8213> 17771 <8214> <8214> 3653 <8215> <821a> 17772 <821b> <821b> 5656 <821c> <821c> 3497 <821d> <821d> 17778 <821e> <821e> 3831 <821f> <821f> 4570 <8220> <8220> 17779 <8221> <8223> 7339 <8224> <8227> 17780 <8228> <8228> 7344 <8229> <8229> 17784 <822a> <822a> 1908 <822b> <822b> 7345 <822c> <822c> 1006 <822d> <822d> 7342 <822e> <822e> 17785 <822f> <822f> 7343 <8230> <8230> 2163 <8231> <8231> 1180 <8232> <8232> 17786 <8233> <8234> 7348 <8235> <8235> 1573 <8236> <8236> 1143 <8237> <8237> 3900 <8238> <8238> 7346 <8239> <8239> 1327 <823a> <823a> 17787 <823b> <823b> 7347 <823c> <823d> 17788 <823e> <823e> 7350 <823f> <8243> 17790 <8244> <8244> 7351 <8245> <8246> 17795 <8247> <8247> 3672 <8248> <8248> 17797 <8249> <8249> 7352 <824a> <824a> 17798 <824b> <824b> 7353 <824c> <824e> 17799 <824f> <824f> 7354 <8250> <8257> 17802 <8258> <8258> 3527 <8259> <8259> 7777 <825a> <825a> 7355 <825b> <825e> 17810 <825f> <825f> 7356 <8260> <8263> 17814 <8264> <8264> 9711 <8265> <8265> 17818 <8266> <8266> 8088 <8267> <8267> 17819 <8268> <8268> 7357 <8269> <826a> 17820 <826b> <826b> 9712 <826c> <826d> 17822 <826e> <826e> 7388 <826f> <826f> 2565 <8270> <8270> 2139 <8271> <8271> 8072 <8272> <8272> 3300 <8273> <8273> 4103 <8274> <8274> 6001 <8275> <8276> 17824 <8277> <8277> 8696 <8278> <8278> 17826 <8279> <8279> 5089 <827a> <827a> 4188 <827b> <827c> 17827 <827d> <827d> 5090 <827e> <827e> 951 <827f> <827f> 5091 <8280> <8281> 17829 <8282> <8282> 2219 <8283> <8283> 17831 <8284> <8284> 5095 <8285> <8287> 17832 <8288> <8288> 4728 <8289> <8289> 17835 <828a> <828a> 5093 endcidrange 100 begincidrange <828b> <828b> 4312 <828c> <828c> 17836 <828d> <828d> 3343 <828e> <828e> 5096 <828f> <828f> 5092 <8290> <8290> 17837 <8291> <8291> 5097 <8292> <8292> 2727 <8293> <8296> 17838 <8297> <8297> 5098 <8298> <8298> 5107 <8299> <8299> 5099 <829a> <829b> 17842 <829c> <829c> 3822 <829d> <829d> 4516 <829e> <829e> 17844 <829f> <829f> 5117 <82a0> <82a0> 17845 <82a1> <82a1> 5115 <82a2> <82a3> 17846 <82a4> <82a4> 5120 <82a5> <82a5> 2231 <82a6> <82a6> 2642 <82a7> <82a7> 17848 <82a8> <82a8> 5094 <82a9> <82a9> 5113 <82aa> <82aa> 5116 <82ab> <82ab> 5100 <82ac> <82ac> 1647 <82ad> <82ad> 976 <82ae> <82ae> 5109 <82af> <82af> 3977 <82b0> <82b0> 5103 <82b1> <82b1> 1981 <82b2> <82b2> 17849 <82b3> <82b3> 1625 <82b4> <82b4> 5114 <82b5> <82b6> 17850 <82b7> <82b7> 5108 <82b8> <82b8> 5101 <82b9> <82b9> 3160 <82ba> <82ba> 17852 <82bb> <82bb> 8994 <82bc> <82bc> 17853 <82bd> <82bd> 4072 <82be> <82be> 5102 <82bf> <82c0> 17854 <82c1> <82c1> 5112 <82c2> <82c3> 17856 <82c4> <82c4> 5118 <82c5> <82c6> 17858 <82c7> <82c7> 3772 <82c8> <82c8> 5104 <82c9> <82c9> 17860 <82ca> <82ca> 5105 <82cb> <82cc> 5110 <82cd> <82cd> 1179 <82ce> <82ce> 5119 <82cf> <82cf> 3530 <82d0> <82d0> 17861 <82d1> <82d1> 4346 <82d2> <82d2> 5129 <82d3> <82d3> 5133 <82d4> <82d4> 3577 <82d5> <82d5> 5140 <82d6> <82d6> 17862 <82d7> <82d7> 2796 <82d8> <82d8> 5130 <82d9> <82da> 17863 <82db> <82db> 2382 <82dc> <82dc> 5127 <82dd> <82dd> 17865 <82de> <82de> 1029 <82df> <82df> 1807 <82e0> <82e0> 5139 <82e1> <82e1> 5121 <82e2> <82e2> 17866 <82e3> <82e3> 5106 <82e4> <82e4> 5124 <82e5> <82e5> 3279 <82e6> <82e6> 2413 <82e7> <82e7> 9014 <82e8> <82ea> 17867 <82eb> <82eb> 3316 <82ec> <82ee> 17870 <82ef> <82ef> 1062 <82f0> <82f0> 17873 <82f1> <82f1> 4231 <82f2> <82f3> 17874 <82f4> <82f4> 5128 <82f5> <82f6> 17876 <82f7> <82f7> 5123 <82f8> <82f8> 17878 <82f9> <82f9> 3034 <82fa> <82fa> 17879 <82fb> <82fb> 5132 <82fc> <82ff> 17880 <8300> <8300> 17884 <8301> <8301> 4639 <8302> <8302> 2740 endcidrange 100 begincidrange <8303> <8303> 1619 <8304> <8304> 3150 <8305> <8305> 2734 <8306> <8306> 5136 <8307> <8307> 5126 <8308> <8308> 5145 <8309> <8309> 5122 <830a> <830b> 17885 <830c> <830c> 5131 <830d> <830d> 17887 <830e> <830e> 2260 <830f> <830f> 5125 <8310> <8310> 17888 <8311> <8311> 5134 <8312> <8313> 17889 <8314> <8315> 5137 <8316> <8316> 17891 <8317> <8317> 5158 <8318> <8319> 17892 <831a> <831a> 5135 <831b> <831b> 5166 <831c> <831c> 5141 <831d> <8326> 17894 <8327> <8327> 2142 <8328> <8328> 1351 <8329> <832a> 17904 <832b> <832b> 2728 <832c> <832c> 1198 <832d> <832d> 5160 <832e> <832e> 17906 <832f> <832f> 5152 <8330> <8330> 17907 <8331> <8331> 5149 <8332> <8332> 17908 <8333> <8333> 5162 <8334> <8334> 5148 <8335> <8335> 4215 <8336> <8336> 1199 <8337> <8337> 17909 <8338> <8338> 3250 <8339> <8339> 3262 <833a> <833a> 5161 <833b> <833b> 17910 <833c> <833c> 5147 <833d> <833f> 17911 <8340> <8340> 5157 <8341> <8342> 17914 <8343> <8343> 5155 <8344> <8345> 17916 <8346> <8346> 2258 <8347> <8347> 5154 <8348> <8348> 17918 <8349> <8349> 1188 <834a> <834e> 17919 <834f> <834f> 5153 <8350> <8350> 2153 <8351> <8351> 5142 <8352> <8352> 2009 <8353> <8353> 17924 <8354> <8354> 2526 <8355> <8359> 17925 <835a> <835a> 2119 <835b> <835c> 5143 <835d> <835d> 17930 <835e> <835e> 5151 <835f> <835f> 5156 <8360> <8360> 5159 <8361> <8361> 1429 <8362> <8362> 17931 <8363> <8363> 3252 <8364> <8364> 2044 <8365> <8365> 5164 <8366> <8366> 5163 <8367> <8367> 4240 <8368> <8368> 5165 <8369> <8369> 5167 <836a> <836a> 5169 <836b> <836b> 4216 <836c> <836c> 5168 <836d> <836e> 5170 <836f> <836f> 4144 <8370> <8376> 17932 <8377> <8377> 1920 <8378> <8378> 5173 <8379> <837a> 17939 <837b> <837b> 5186 <837c> <837c> 5181 <837d> <837d> 5184 <837e> <8384> 17941 <8385> <8385> 5180 <8386> <8386> 3053 <8387> <8388> 17948 <8389> <8389> 2525 <838a> <838a> 8875 <838b> <838d> 17950 <838e> <838e> 3304 <838f> <8391> 17953 <8392> <8392> 5146 <8393> <8393> 5178 <8394> <8395> 17956 endcidrange 100 begincidrange <8396> <8396> 8127 <8397> <8397> 17958 <8398> <8398> 5187 <8399> <839a> 17959 <839b> <839b> 5150 <839c> <839c> 5179 <839d> <839d> 17961 <839e> <839e> 5188 <839f> <839f> 17962 <83a0> <83a0> 5176 <83a1> <83a1> 17963 <83a2> <83a2> 8061 <83a3> <83a6> 17964 <83a7> <83a7> 9011 <83a8> <83a8> 5189 <83a9> <83a9> 5183 <83aa> <83aa> 5177 <83ab> <83ab> 2829 <83ac> <83af> 17968 <83b0> <83b0> 5172 <83b1> <83b1> 2462 <83b2> <83b2> 2548 <83b3> <83b4> 5174 <83b5> <83b5> 17972 <83b6> <83b6> 5182 <83b7> <83b7> 2054 <83b8> <83b8> 5185 <83b9> <83b9> 4237 <83ba> <83ba> 5190 <83bb> <83bb> 17973 <83bc> <83bc> 5191 <83bd> <83bd> 2732 <83be> <83bf> 17974 <83c0> <83c0> 5214 <83c1> <83c1> 5192 <83c2> <83c4> 17976 <83c5> <83c5> 5213 <83c6> <83c6> 17979 <83c7> <83c7> 1814 <83c8> <83c9> 17980 <83ca> <83ca> 2308 <83cb> <83cb> 17982 <83cc> <83cc> 2345 <83cd> <83ce> 17983 <83cf> <83cf> 1921 <83d0> <83d3> 17985 <83d4> <83d4> 5206 <83d5> <83d5> 17989 <83d6> <83d6> 5201 <83d7> <83d7> 17990 <83d8> <83d8> 5195 <83d9> <83db> 17991 <83dc> <83dc> 1170 <83dd> <83dd> 5199 <83de> <83de> 17994 <83df> <83df> 5207 <83e0> <83e0> 1131 <83e1> <83e1> 5217 <83e2> <83e4> 17995 <83e5> <83e5> 5194 <83e6> <83e8> 17998 <83e9> <83e9> 3055 <83ea> <83ea> 5212 <83eb> <83ee> 18001 <83ef> <83ef> 8013 <83f0> <83f0> 5216 <83f1> <83f1> 2603 <83f2> <83f2> 1635 <83f3> <83f7> 18005 <83f8> <83f9> 5210 <83fa> <83fc> 18010 <83fd> <83fd> 5200 <83fe> <83ff> 18013 <8400> <8400> 18015 <8401> <8401> 5193 <8402> <8402> 18016 <8403> <8403> 5209 <8404> <8404> 3620 <8405> <8405> 18017 <8406> <8406> 5205 <8407> <8407> 9012 <8408> <8409> 18018 <840a> <840a> 8177 <840b> <840b> 5198 <840c> <840c> 2765 <840d> <840d> 3035 <840e> <840e> 3773 <840f> <840f> 5208 <8410> <8410> 18020 <8411> <8411> 5204 <8412> <8417> 18021 <8418> <8418> 5197 <8419> <841b> 18027 <841c> <841c> 5202 <841d> <841d> 2691 <841e> <8423> 18030 <8424> <8425> 4238 <8426> <8426> 5215 <8427> <8427> 3937 <8428> <8428> 3283 endcidrange 100 begincidrange <8429> <842b> 18036 <842c> <842c> 8587 <842d> <8430> 18039 <8431> <8431> 5234 <8432> <8434> 18043 <8435> <8435> 9033 <8436> <8437> 18046 <8438> <8438> 5203 <8439> <843b> 18048 <843c> <843c> 5228 <843d> <843d> 2699 <843e> <8445> 18051 <8446> <8446> 5229 <8447> <8448> 18059 <8449> <8449> 8715 <844a> <8450> 18061 <8451> <8451> 5219 <8452> <8452> 9030 <8453> <8456> 18068 <8457> <8457> 4599 <8458> <8458> 18072 <8459> <8459> 5221 <845a> <845a> 5220 <845b> <845b> 1771 <845c> <845c> 5218 <845d> <8460> 18073 <8461> <8461> 3054 <8462> <8462> 18077 <8463> <8463> 1516 <8464> <8464> 9031 <8465> <8465> 18078 <8466> <8466> 8595 <8467> <8468> 18079 <8469> <8469> 5230 <846a> <846a> 18081 <846b> <846b> 1968 <846c> <846c> 4388 <846d> <846d> 5235 <846e> <846e> 18082 <846f> <846f> 9889 <8470> <8470> 18083 <8471> <8471> 1363 <8472> <8472> 18084 <8473> <8473> 5222 <8474> <8474> 18085 <8475> <8475> 2440 <8476> <8476> 5231 <8477> <8477> 8034 <8478> <8478> 5227 <8479> <8479> 18086 <847a> <847a> 5225 <847b> <8481> 18087 <8482> <8482> 1466 <8483> <8486> 18094 <8487> <8488> 5223 <8489> <8489> 5226 <848a> <848a> 18098 <848b> <848b> 2176 <848c> <848c> 5232 <848d> <848d> 18099 <848e> <848e> 5233 <848f> <8492> 18100 <8493> <8493> 9037 <8494> <8494> 9032 <8495> <8496> 18104 <8497> <8497> 5249 <8498> <8498> 18106 <8499> <8499> 2766 <849a> <849b> 18107 <849c> <849c> 3543 <849d> <84a0> 18109 <84a1> <84a1> 5246 <84a2> <84ae> 18113 <84af> <84af> 4759 <84b0> <84b1> 18126 <84b2> <84b2> 3056 <84b3> <84b3> 18128 <84b4> <84b4> 5248 <84b5> <84b7> 18129 <84b8> <84b8> 4501 <84b9> <84b9> 5247 <84ba> <84ba> 5244 <84bb> <84bb> 18132 <84bc> <84bc> 7776 <84bd> <84bd> 5240 <84be> <84be> 18133 <84bf> <84bf> 5243 <84c0> <84c0> 9029 <84c1> <84c1> 5236 <84c2> <84c3> 18134 <84c4> <84c4> 4025 <84c5> <84c8> 18136 <84c9> <84c9> 3251 <84ca> <84ca> 5242 <84cb> <84cb> 7954 <84cc> <84cc> 18140 <84cd> <84cd> 5237 <84ce> <84cf> 18141 <84d0> <84d0> 5238 <84d1> <84d1> 3559 endcidrange 100 begincidrange <84d2> <84d2> 18143 <84d3> <84d3> 5241 <84d4> <84d5> 18144 <84d6> <84d6> 1078 <84d7> <84dc> 18146 <84dd> <84dd> 2465 <84de> <84de> 18152 <84df> <84df> 2094 <84e0> <84e0> 5245 <84e1> <84e2> 18153 <84e3> <84e3> 5251 <84e4> <84e4> 18155 <84e5> <84e5> 5250 <84e6> <84e6> 5239 <84e7> <84eb> 18156 <84ec> <84ec> 2991 <84ed> <84ed> 18161 <84ee> <84ee> 8216 <84ef> <84ef> 9013 <84f0> <84f0> 5255 <84f1> <84fb> 18162 <84fc> <84fc> 5262 <84fd> <84fd> 9020 <84fe> <84fe> 18173 <84ff> <84ff> 5261 <8500> <850b> 18174 <850c> <850c> 5252 <850d> <8510> 18186 <8511> <8511> 2804 <8512> <8512> 18190 <8513> <8513> 2722 <8514> <8514> 9839 <8515> <8516> 18191 <8517> <8517> 4482 <8518> <8519> 18193 <851a> <851a> 3780 <851b> <851d> 18195 <851e> <851e> 9041 <851f> <851f> 5257 <8520> <8520> 18198 <8521> <8521> 1171 <8522> <8522> 18199 <8523> <8523> 8096 <8524> <8525> 18200 <8526> <8526> 9016 <8527> <852a> 18202 <852b> <852b> 2891 <852c> <852c> 3446 <852d> <852d> 8731 <852e> <8536> 18206 <8537> <8537> 3131 <8538> <8538> 5254 <8539> <8539> 5256 <853a> <853a> 5258 <853b> <853b> 5260 <853c> <853c> 949 <853d> <853d> 1079 <853e> <8540> 18215 <8541> <8541> 9026 <8542> <8542> 18218 <8543> <8543> 5270 <8544> <8545> 18219 <8546> <8546> 9039 <8547> <8547> 18221 <8548> <8548> 5264 <8549> <8549> 2183 <854a> <854a> 3274 <854b> <854d> 18222 <854e> <854e> 9021 <854f> <8551> 18225 <8552> <8552> 9028 <8553> <8553> 9009 <8554> <8554> 18228 <8555> <8555> 9035 <8556> <8556> 5259 <8557> <8557> 18229 <8558> <8558> 9019 <8559> <8559> 5263 <855a> <855d> 18230 <855e> <855e> 5267 <855f> <8561> 18234 <8562> <8562> 9040 <8563> <8563> 18237 <8564> <8564> 5266 <8565> <8567> 18238 <8568> <8568> 5265 <8569> <8569> 7860 <856a> <856a> 8614 <856b> <856c> 18241 <856d> <856d> 8651 <856e> <8571> 18243 <8572> <8572> 5271 <8573> <8573> 18247 <8574> <8574> 4367 <8575> <8576> 18248 <8577> <8577> 9045 <8578> <8578> 18250 <8579> <8579> 5277 <857a> <857a> 5268 <857b> <857b> 5272 endcidrange 100 begincidrange <857c> <857d> 18251 <857e> <857e> 2500 <857f> <8583> 18253 <8584> <8584> 1034 <8585> <8585> 5280 <8586> <8586> 18258 <8587> <8587> 5275 <8588> <8588> 9022 <8589> <8589> 18259 <858a> <858a> 8052 <858b> <858b> 18260 <858c> <858c> 9008 <858d> <858e> 18261 <858f> <858f> 5276 <8590> <8590> 18263 <8591> <8591> 9856 <8592> <8593> 18264 <8594> <8594> 8410 <8595> <859a> 18266 <859b> <859b> 4047 <859c> <859c> 5279 <859d> <859e> 18272 <859f> <859f> 9034 <85a0> <85a3> 18274 <85a4> <85a4> 5273 <85a5> <85a5> 18278 <85a6> <85a6> 8081 <85a7> <85a7> 18279 <85a8> <85a8> 5274 <85a9> <85a9> 8455 <85aa> <85aa> 3976 <85ab> <85ad> 18280 <85ae> <85ae> 5278 <85af> <85af> 3460 <85b0> <85b0> 5283 <85b1> <85b6> 18283 <85b7> <85b7> 5282 <85b8> <85b8> 18289 <85b9> <85b9> 5281 <85ba> <85ba> 9023 <85bb> <85c0> 18290 <85c1> <85c1> 5285 <85c2> <85c8> 18296 <85c9> <85c9> 2230 <85ca> <85cc> 18303 <85cd> <85cd> 8180 <85ce> <85ce> 9027 <85cf> <85cf> 1183 <85d0> <85d0> 2799 <85d1> <85d2> 18306 <85d3> <85d3> 5284 <85d4> <85d4> 18308 <85d5> <85d5> 2939 <85d6> <85db> 18309 <85dc> <85dc> 5286 <85dd> <85dd> 8722 <85de> <85e3> 18315 <85e4> <85e4> 3628 <85e5> <85e5> 8711 <85e6> <85e8> 18321 <85e9> <85e9> 1607 <85ea> <85ea> 9049 <85eb> <85f3> 18324 <85f4> <85f4> 8788 <85f5> <85f5> 18333 <85f6> <85f6> 9010 <85f7> <85f8> 18334 <85f9> <85f9> 7718 <85fa> <85fa> 9047 <85fb> <85fb> 4392 <85fc> <85fe> 18336 <85ff> <85ff> 5287 <8600> <8603> 18339 <8604> <8604> 9048 <8605> <8605> 5289 <8606> <8606> 8258 <8607> <8607> 8531 <8608> <860a> 18343 <860b> <860b> 8379 <860c> <8610> 18346 <8611> <8611> 2821 <8612> <8615> 18351 <8616> <8616> 5291 <8617> <8619> 18355 <861a> <861a> 9050 <861b> <861d> 18358 <861e> <861e> 9046 <861f> <8621> 18361 <8622> <8622> 9015 <8623> <8626> 18364 <8627> <8627> 5288 <8628> <8628> 18368 <8629> <8629> 5290 <862a> <862c> 18369 <862d> <862d> 8185 <862e> <8637> 18372 <8638> <8638> 4443 <8639> <8639> 18382 <863a> <863a> 9043 <863b> <863b> 18383 endcidrange 100 begincidrange <863c> <863c> 5292 <863d> <863e> 18384 <863f> <863f> 8289 <8640> <864c> 18386 <864d> <864d> 7152 <864e> <864e> 1975 <864f> <864f> 2649 <8650> <8650> 2929 <8651> <8651> 2670 <8652> <8653> 18399 <8654> <8654> 7153 <8655> <8655> 7829 <8656> <8659> 18401 <865a> <865a> 4020 <865b> <865b> 18405 <865c> <865c> 8265 <865d> <865d> 18406 <865e> <865e> 4290 <865f> <865f> 8002 <8660> <8661> 18407 <8662> <8662> 6509 <8663> <8666> 18409 <8667> <8667> 8168 <8668> <866a> 18413 <866b> <866b> 1291 <866c> <866c> 7154 <866d> <866d> 18416 <866e> <866e> 7155 <866f> <8670> 18417 <8671> <8671> 3396 <8672> <8678> 18419 <8679> <8679> 1950 <867a> <867a> 7157 <867b> <867b> 7159 <867c> <867c> 7158 <867d> <867d> 3545 <867e> <867e> 3879 <867f> <867f> 7156 <8680> <8680> 3403 <8681> <8681> 4182 <8682> <8682> 2707 <8683> <8689> 18426 <868a> <868a> 3794 <868b> <868b> 7162 <868c> <868c> 1025 <868d> <868d> 7161 <868e> <8692> 18433 <8693> <8693> 7168 <8694> <8694> 18438 <8695> <8695> 1174 <8696> <869b> 18439 <869c> <869c> 4074 <869d> <869d> 7164 <869e> <86a2> 18445 <86a3> <86a3> 7166 <86a4> <86a4> 4396 <86a5> <86a6> 18450 <86a7> <86a7> 7165 <86a8> <86a8> 7160 <86a9> <86a9> 7169 <86aa> <86aa> 7167 <86ab> <86ab> 18452 <86ac> <86ac> 7163 <86ad> <86ae> 18453 <86af> <86af> 7177 <86b0> <86b0> 7174 <86b1> <86b1> 7176 <86b2> <86b3> 18455 <86b4> <86b4> 7180 <86b5> <86b5> 7172 <86b6> <86b6> 7170 <86b7> <86b9> 18457 <86ba> <86ba> 7175 <86bb> <86bf> 18460 <86c0> <86c0> 4602 <86c1> <86c3> 18465 <86c4> <86c4> 7171 <86c5> <86c5> 18468 <86c6> <86c6> 3190 <86c7> <86c7> 3352 <86c8> <86c8> 18469 <86c9> <86c9> 7178 <86ca> <86ca> 1823 <86cb> <86cb> 1425 <86cc> <86cd> 18470 <86ce> <86ce> 7173 <86cf> <86cf> 7179 <86d0> <86d0> 7186 <86d1> <86d1> 7192 <86d2> <86d3> 18472 <86d4> <86d4> 2028 <86d5> <86d7> 18474 <86d8> <86d8> 7191 <86d9> <86d9> 3725 <86da> <86da> 18477 <86db> <86db> 4586 <86dc> <86dd> 18478 <86de> <86de> 7188 <86df> <86df> 7190 <86e0> <86e3> 18480 endcidrange 100 begincidrange <86e4> <86e4> 1773 <86e5> <86e8> 18484 <86e9> <86e9> 7181 <86ea> <86ec> 18488 <86ed> <86ed> 7184 <86ee> <86ee> 2720 <86ef> <86ef> 18491 <86f0> <86f0> 4478 <86f1> <86f2> 7182 <86f3> <86f3> 7185 <86f4> <86f4> 7189 <86f5> <86f7> 18492 <86f8> <86f8> 7195 <86f9> <86f9> 4257 <86fa> <86fa> 9690 <86fb> <86fd> 18495 <86fe> <86fe> 1577 <86ff> <86ff> 18498 <8700> <8700> 3464 <8701> <8701> 18499 <8702> <8702> 1665 <8703> <8703> 7193 <8704> <8705> 18500 <8706> <8706> 9687 <8707> <8707> 7194 <8708> <8708> 7196 <8709> <8709> 7199 <870a> <870a> 7197 <870b> <870c> 18502 <870d> <870d> 7198 <870e> <8711> 18504 <8712> <8712> 4090 <8713> <8713> 7187 <8714> <8714> 18508 <8715> <8715> 3706 <8716> <8716> 18509 <8717> <8717> 3806 <8718> <8718> 4520 <8719> <8719> 18510 <871a> <871a> 7205 <871b> <871b> 18511 <871c> <871c> 2784 <871d> <871d> 18512 <871e> <871e> 7202 <871f> <8720> 18513 <8721> <8721> 2458 <8722> <8722> 7214 <8723> <8723> 7200 <8724> <8724> 18515 <8725> <8725> 7203 <8726> <8728> 18516 <8729> <8729> 7210 <872a> <872d> 18519 <872e> <872e> 7204 <872f> <8730> 18523 <8731> <8731> 7209 <8732> <8733> 18525 <8734> <8734> 7208 <8735> <8736> 18527 <8737> <8737> 7211 <8738> <873a> 18529 <873b> <873b> 7201 <873c> <873d> 18532 <873e> <873e> 7206 <873f> <873f> 7212 <8740> <8746> 18534 <8747> <8747> 4241 <8748> <8748> 7207 <8749> <8749> 1212 <874a> <874b> 18541 <874c> <874c> 7220 <874d> <874d> 18543 <874e> <874e> 3958 <874f> <8752> 18544 <8753> <8753> 7223 <8754> <8754> 18548 <8755> <8755> 8494 <8756> <8756> 18549 <8757> <8757> 2013 <8758> <8758> 18550 <8759> <8759> 7227 <875a> <875f> 18551 <8760> <8760> 7218 <8761> <8762> 18557 <8763> <8763> 7224 <8764> <8764> 7226 <8765> <8765> 7228 <8766> <8766> 8626 <8767> <876d> 18559 <876e> <876e> 7221 <876f> <876f> 18566 <8770> <8770> 7219 <8771> <8773> 18567 <8774> <8774> 1970 <8775> <8775> 18570 <8776> <8776> 1500 <8777> <8777> 18571 <8778> <8778> 8606 <8779> <877a> 18572 <877b> <877b> 7217 endcidrange 100 begincidrange <877c> <877c> 7225 <877d> <877e> 7215 <877f> <8781> 18574 <8782> <8782> 7213 <8783> <8783> 7238 <8784> <8784> 9692 <8785> <8785> 7235 <8786> <8787> 18577 <8788> <8788> 7234 <8789> <878a> 18579 <878b> <878b> 7222 <878c> <878c> 18581 <878d> <878d> 3253 <878e> <8792> 18582 <8793> <8793> 7229 <8794> <8796> 18587 <8797> <8797> 7237 <8798> <879d> 18590 <879e> <879e> 8300 <879f> <879f> 2813 <87a0> <87a1> 18596 <87a2> <87a2> 8742 <87a3> <87a7> 18598 <87a8> <87a8> 7231 <87a9> <87aa> 18603 <87ab> <87ab> 7239 <87ac> <87ac> 7241 <87ad> <87ad> 7236 <87ae> <87ae> 18605 <87af> <87af> 7230 <87b0> <87b2> 18606 <87b3> <87b3> 7243 <87b4> <87b4> 18609 <87b5> <87b5> 7242 <87b6> <87b9> 18610 <87ba> <87ba> 2692 <87bb> <87bb> 9696 <87bc> <87bc> 18614 <87bd> <87bd> 7246 <87be> <87bf> 18615 <87c0> <87c0> 7248 <87c1> <87c3> 18617 <87c4> <87c4> 8827 <87c5> <87c5> 18620 <87c6> <87c6> 7233 <87c7> <87c7> 18621 <87c8> <87c8> 9694 <87c9> <87c9> 18622 <87ca> <87ca> 7249 <87cb> <87cb> 7244 <87cc> <87cd> 18623 <87ce> <87ce> 9697 <87cf> <87d0> 18625 <87d1> <87d1> 7247 <87d2> <87d2> 7232 <87d3> <87d3> 7245 <87d4> <87da> 18627 <87db> <87db> 7250 <87dc> <87df> 18634 <87e0> <87e0> 7252 <87e1> <87e2> 18638 <87e3> <87e3> 9685 <87e4> <87e4> 18640 <87e5> <87e5> 7240 <87e6> <87e9> 18641 <87ea> <87ea> 7251 <87eb> <87eb> 18645 <87ec> <87ec> 7787 <87ed> <87ed> 18646 <87ee> <87ee> 7253 <87ef> <87ef> 9691 <87f0> <87f1> 18647 <87f2> <87f2> 7817 <87f3> <87f5> 18649 <87f6> <87f6> 9689 <87f7> <87f8> 18652 <87f9> <87f9> 3970 <87fa> <87fa> 18654 <87fb> <87fb> 8721 <87fc> <87fd> 18655 <87fe> <87fe> 7256 <87ff> <87ff> 18657 <8800> <8802> 18658 <8803> <8803> 4877 <8804> <8804> 18661 <8805> <8805> 8745 <8806> <8806> 9686 <8807> <8809> 18662 <880a> <880a> 7257 <880b> <880f> 18665 <8810> <8810> 9693 <8811> <8811> 9695 <8812> <8812> 18670 <8813> <8813> 7255 <8814> <8814> 18671 <8815> <8815> 3263 <8816> <8816> 7254 <8817> <881a> 18672 <881b> <881b> 7258 <881c> <881e> 18676 endcidrange 100 begincidrange <881f> <881f> 8175 <8820> <8820> 18679 <8821> <8821> 7259 <8822> <8822> 1347 <8823> <8823> 9688 <8824> <8830> 18680 <8831> <8831> 7977 <8832> <8832> 6797 <8833> <8835> 18693 <8836> <8836> 7771 <8837> <8838> 18696 <8839> <8839> 7260 <883a> <883a> 18698 <883b> <883b> 8310 <883c> <883c> 7261 <883d> <883f> 18699 <8840> <8840> 4051 <8841> <8843> 18702 <8844> <8844> 7338 <8845> <8845> 3985 <8846> <8846> 8855 <8847> <8849> 18705 <884a> <884a> 9872 <884b> <884b> 18708 <884c> <884c> 3995 <884d> <884d> 4101 <884e> <8852> 18709 <8853> <8853> 8511 <8854> <8854> 3899 <8855> <8856> 18714 <8857> <8857> 2215 <8858> <8858> 18716 <8859> <8859> 4076 <885a> <885a> 18717 <885b> <885b> 8600 <885c> <885c> 18718 <885d> <885d> 7816 <885e> <8860> 18719 <8861> <8861> 1945 <8862> <8862> 5613 <8863> <8863> 4169 <8864> <8864> 7078 <8865> <8865> 1152 <8866> <8867> 18722 <8868> <8868> 1110 <8869> <8869> 7079 <886a> <886a> 18724 <886b> <886b> 3321 <886c> <886c> 1257 <886d> <886d> 18725 <886e> <886e> 4870 <886f> <886f> 18726 <8870> <8870> 3482 <8871> <8871> 18727 <8872> <8872> 7080 <8873> <8876> 18728 <8877> <8877> 4563 <8878> <8878> 18732 <8879> <8879> 8844 <887a> <887c> 18733 <887d> <887d> 7081 <887e> <887e> 7358 <887f> <887f> 7082 <8880> <8880> 18736 <8881> <8881> 4335 <8882> <8882> 7083 <8883> <8883> 18737 <8884> <8884> 971 <8885> <8885> 7359 <8886> <8887> 18738 <8888> <8888> 7360 <8889> <888a> 18740 <888b> <888b> 1407 <888c> <888c> 18742 <888d> <888d> 2972 <888e> <8891> 18743 <8892> <8892> 3598 <8893> <8895> 18747 <8896> <8896> 4015 <8897> <889b> 18750 <889c> <889c> 3729 <889d> <88a1> 18755 <88a2> <88a2> 7084 <88a3> <88a3> 18760 <88a4> <88a4> 4871 <88a5> <88aa> 18761 <88ab> <88ab> 1060 <88ac> <88ac> 18767 <88ad> <88ad> 3867 <88ae> <88b0> 18768 <88b1> <88b1> 1695 <88b2> <88b6> 18771 <88b7> <88b7> 7086 <88b8> <88bb> 18776 <88bc> <88bc> 7087 <88bd> <88c0> 18780 <88c1> <88c1> 1162 <88c2> <88c2> 2586 <88c3> <88c4> 18784 <88c5> <88c5> 4621 endcidrange 100 begincidrange <88c6> <88c6> 7085 <88c7> <88c8> 18786 <88c9> <88c9> 7088 <88ca> <88ca> 9713 <88cb> <88cd> 18788 <88ce> <88ce> 7090 <88cf> <88cf> 8204 <88d0> <88d1> 18791 <88d2> <88d2> 4874 <88d3> <88d3> 18793 <88d4> <88d4> 4200 <88d5> <88d5> 4326 <88d6> <88d7> 18794 <88d8> <88d8> 7361 <88d9> <88d9> 3220 <88da> <88db> 18796 <88dc> <88dc> 7768 <88dd> <88dd> 8876 <88de> <88de> 18798 <88df> <88df> 7362 <88e0> <88e1> 18799 <88e2> <88e2> 7089 <88e3> <88e3> 7091 <88e4> <88e4> 2416 <88e5> <88e5> 7092 <88e6> <88e7> 18801 <88e8> <88e8> 7096 <88e9> <88ef> 18803 <88f0> <88f0> 7098 <88f1> <88f1> 7093 <88f2> <88f2> 18810 <88f3> <88f3> 3338 <88f4> <88f4> 2978 <88f5> <88f7> 18811 <88f8> <88f8> 2698 <88f9> <88f9> 1877 <88fa> <88fb> 18814 <88fc> <88fc> 7095 <88fd> <88fd> 9895 <88fe> <88fe> 7097 <88ff> <88ff> 18816 <8900> <8901> 18817 <8902> <8902> 1836 <8903> <8906> 18819 <8907> <8907> 9846 <8908> <8909> 18823 <890a> <890a> 7103 <890b> <890f> 18825 <8910> <8910> 1933 <8911> <8911> 18830 <8912> <8912> 1032 <8913> <8913> 7101 <8914> <8918> 18831 <8919> <8919> 7100 <891a> <891a> 7094 <891b> <891b> 7102 <891c> <8920> 18836 <8921> <8921> 7099 <8922> <8924> 18841 <8925> <8925> 3271 <8926> <8929> 18844 <892a> <892a> 3707 <892b> <892b> 7105 <892c> <892f> 18848 <8930> <8930> 5945 <8931> <8931> 18852 <8932> <8932> 8161 <8933> <8933> 9659 <8934> <8934> 7104 <8935> <8935> 18853 <8936> <8936> 7106 <8937> <8937> 18854 <8938> <8938> 9662 <8939> <893a> 18855 <893b> <893b> 8925 <893c> <8940> 18857 <8941> <8941> 7107 <8942> <8943> 18862 <8944> <8944> 3922 <8945> <8946> 18864 <8947> <8947> 9661 <8948> <8955> 18866 <8956> <8956> 7722 <8957> <895c> 18880 <895d> <895d> 9660 <895e> <895e> 7363 <895f> <895f> 2244 <8960> <8960> 9658 <8961> <8963> 18886 <8964> <8964> 9663 <8965> <8965> 18889 <8966> <8966> 7108 <8967> <8969> 18890 <896a> <896a> 8583 <896b> <896b> 18893 <896c> <896c> 9835 <896d> <896e> 18894 <896f> <896f> 7807 <8970> <8971> 18896 <8972> <8972> 8621 endcidrange 100 begincidrange <8973> <897a> 18898 <897b> <897b> 7109 <897c> <897e> 18906 <897f> <897f> 3846 <8980> <8980> 18909 <8981> <8981> 4145 <8982> <8982> 18910 <8983> <8983> 7135 <8984> <8985> 18911 <8986> <8986> 1709 <8987> <898a> 18913 <898b> <898b> 8086 <898c> <898e> 18917 <898f> <898f> 7986 <8990> <8992> 18920 <8993> <8993> 8324 <8994> <8995> 18923 <8996> <8996> 8502 <8997> <8997> 18925 <8998> <8998> 9400 <8999> <89a0> 18926 <89a1> <89a1> 9402 <89a2> <89a5> 18934 <89a6> <89a6> 9404 <89a7> <89a9> 18938 <89aa> <89aa> 8420 <89ab> <89ab> 18941 <89ac> <89ac> 9401 <89ad> <89ae> 18942 <89af> <89af> 9405 <89b0> <89b1> 18944 <89b2> <89b2> 9406 <89b3> <89b6> 18946 <89b7> <89b7> 9407 <89b8> <89b9> 18950 <89ba> <89ba> 8146 <89bb> <89bc> 18952 <89bd> <89bd> 8189 <89be> <89be> 18954 <89bf> <89bf> 9403 <89c0> <89c0> 7981 <89c1> <89c1> 2158 <89c2> <89c2> 1844 <89c3> <89c3> 18955 <89c4> <89c4> 1855 <89c5> <89c5> 2782 <89c6> <89c6> 3434 <89c7> <89c7> 6458 <89c8> <89c8> 2475 <89c9> <89c9> 2340 <89ca> <89cc> 6459 <89cd> <89cd> 18956 <89ce> <89d1> 6462 <89d2> <89d2> 2200 <89d3> <89d5> 18957 <89d6> <89d6> 7511 <89d7> <89d9> 18960 <89da> <89da> 7513 <89db> <89db> 18963 <89dc> <89dc> 7514 <89dd> <89dd> 18964 <89de> <89de> 7512 <89df> <89e2> 18965 <89e3> <89e3> 2227 <89e4> <89e4> 18969 <89e5> <89e5> 7515 <89e6> <89e6> 1320 <89e7> <89ea> 18970 <89eb> <89eb> 7516 <89ec> <89ee> 18974 <89ef> <89ef> 7517 <89f0> <89f2> 18977 <89f3> <89f3> 6592 <89f4> <89f4> 9737 <89f5> <89f5> 18980 <89f6> <89f6> 9738 <89f7> <89f7> 18981 <89f8> <89f8> 7828 <89f9> <89ff> 18982 <8a00> <8a00> 4093 <8a01> <8a01> 8927 <8a02> <8a02> 7883 <8a03> <8a03> 7949 <8a04> <8a06> 18989 <8a07> <8a07> 4862 <8a08> <8a08> 8055 <8a09> <8a09> 18992 <8a0a> <8a0a> 8683 <8a0b> <8a0b> 18993 <8a0c> <8a0c> 8929 <8a0d> <8a0d> 18994 <8a0e> <8a0e> 8559 <8a0f> <8a0f> 18995 <8a10> <8a10> 8928 <8a11> <8a12> 18996 <8a13> <8a13> 8682 <8a14> <8a14> 18998 <8a15> <8a15> 8930 <8a16> <8a16> 8395 <8a17> <8a17> 18999 endcidrange 100 begincidrange <8a18> <8a18> 8056 <8a19> <8a1a> 19000 <8a1b> <8a1b> 7906 <8a1c> <8a1c> 19002 <8a1d> <8a1d> 8690 <8a1e> <8a1e> 19003 <8a1f> <8a1f> 8528 <8a20> <8a22> 19004 <8a23> <8a23> 8147 <8a24> <8a24> 19007 <8a25> <8a25> 8933 <8a26> <8a29> 19008 <8a2a> <8a2a> 7922 <8a2b> <8a2c> 19012 <8a2d> <8a2d> 8479 <8a2e> <8a30> 19014 <8a31> <8a31> 8669 <8a32> <8a33> 19017 <8a34> <8a34> 8532 <8a35> <8a35> 19019 <8a36> <8a36> 8935 <8a37> <8a39> 19020 <8a3a> <8a3a> 8834 <8a3b> <8a3d> 19023 <8a3e> <8a3e> 7518 <8a3f> <8a40> 19026 <8a41> <8a41> 8934 <8a42> <8a45> 19028 <8a46> <8a46> 8936 <8a47> <8a47> 19032 <8a48> <8a48> 6788 <8a49> <8a4d> 19033 <8a4e> <8a4e> 8932 <8a4f> <8a4f> 19038 <8a50> <8a50> 8810 <8a51> <8a51> 19039 <8a52> <8a52> 8939 <8a53> <8a53> 19040 <8a54> <8a54> 8937 <8a55> <8a55> 8381 <8a56> <8a57> 19041 <8a58> <8a58> 8938 <8a59> <8a5a> 19043 <8a5b> <8a5b> 8893 <8a5c> <8a5d> 19045 <8a5e> <8a5e> 7838 <8a5f> <8a60> 19047 <8a61> <8a61> 8950 <8a62> <8a62> 8679 <8a63> <8a63> 8726 <8a64> <8a65> 19049 <8a66> <8a66> 8503 <8a67> <8a68> 19051 <8a69> <8a69> 8492 <8a6a> <8a6a> 19053 <8a6b> <8a6b> 7784 <8a6c> <8a6c> 8946 <8a6d> <8a6d> 7991 <8a6e> <8a6e> 8947 <8a6f> <8a6f> 19054 <8a70> <8a70> 8943 <8a71> <8a71> 8016 <8a72> <8a72> 7952 <8a73> <8a73> 8648 <8a74> <8a74> 19055 <8a75> <8a75> 8945 <8a76> <8a78> 19056 <8a79> <8a79> 4435 <8a7a> <8a7b> 19059 <8a7c> <8a7c> 8944 <8a7d> <8a7e> 19061 <8a7f> <8a7f> 8942 <8a80> <8a83> 19063 <8a84> <8a84> 8941 <8a85> <8a85> 8862 <8a86> <8a86> 8940 <8a87> <8a87> 8162 <8a88> <8a88> 19067 <8a89> <8a89> 4323 <8a8a> <8a8a> 3631 <8a8b> <8a8c> 19068 <8a8d> <8a8d> 8446 <8a8e> <8a90> 19070 <8a91> <8a92> 8953 <8a93> <8a93> 3419 <8a94> <8a94> 19073 <8a95> <8a95> 7855 <8a96> <8a97> 19074 <8a98> <8a98> 8758 <8a99> <8a99> 19076 <8a9a> <8a9a> 8951 <8a9b> <8a9d> 19077 <8a9e> <8a9e> 8765 <8a9f> <8a9f> 19080 <8aa0> <8aa0> 7810 <8aa1> <8aa1> 8118 <8aa2> <8aa2> 19081 <8aa3> <8aa3> 8612 <8aa4> <8aa4> 8618 <8aa5> <8aa5> 8952 endcidrange 100 begincidrange <8aa6> <8aa6> 8529 <8aa7> <8aa7> 19082 <8aa8> <8aa8> 8032 <8aa9> <8aab> 19083 <8aac> <8aac> 8519 <8aad> <8aaf> 19086 <8ab0> <8ab0> 8517 <8ab1> <8ab1> 19089 <8ab2> <8ab2> 8156 <8ab3> <8ab5> 19090 <8ab6> <8ab6> 8961 <8ab7> <8ab8> 19093 <8ab9> <8ab9> 7925 <8aba> <8abb> 19095 <8abc> <8abc> 8728 <8abd> <8abe> 19097 <8abf> <8abf> 7878 <8ac0> <8ac1> 19099 <8ac2> <8ac2> 8960 <8ac3> <8ac3> 19101 <8ac4> <8ac4> 8884 <8ac5> <8ac6> 19102 <8ac7> <8ac7> 8553 <8ac8> <8ac8> 19104 <8ac9> <8ac9> 8957 <8aca> <8aca> 19105 <8acb> <8acb> 8426 <8acc> <8acc> 19106 <8acd> <8acd> 8948 <8ace> <8ace> 19107 <8acf> <8acf> 8955 <8ad0> <8ad0> 19108 <8ad1> <8ad1> 8956 <8ad2> <8ad2> 8231 <8ad3> <8ad5> 19109 <8ad6> <8ad6> 8288 <8ad7> <8ad7> 8959 <8ad8> <8ada> 19112 <8adb> <8adb> 8958 <8adc> <8adc> 7879 <8add> <8add> 19115 <8ade> <8ade> 8972 <8adf> <8ae1> 19116 <8ae2> <8ae2> 8949 <8ae3> <8ae3> 19119 <8ae4> <8ae4> 8966 <8ae5> <8ae5> 19120 <8ae6> <8ae6> 8970 <8ae7> <8ae7> 8659 <8ae8> <8aea> 19121 <8aeb> <8aeb> 8963 <8aec> <8aec> 19124 <8aed> <8aed> 8967 <8aee> <8aee> 8971 <8aef> <8af0> 19125 <8af1> <8af1> 8031 <8af2> <8af2> 19127 <8af3> <8af3> 8969 <8af4> <8af5> 19128 <8af6> <8af6> 8962 <8af7> <8af7> 7940 <8af8> <8af8> 8861 <8af9> <8af9> 19130 <8afa> <8afa> 8699 <8afb> <8afb> 19131 <8afc> <8afc> 8968 <8afd> <8afd> 19132 <8afe> <8afe> 8364 <8aff> <8aff> 19133 <8b00> <8b00> 8334 <8b01> <8b01> 8965 <8b02> <8b02> 8599 <8b03> <8b03> 19134 <8b04> <8b04> 8561 <8b05> <8b05> 8856 <8b06> <8b06> 19135 <8b07> <8b07> 5948 <8b08> <8b09> 19136 <8b0a> <8b0a> 8023 <8b0b> <8b0d> 19138 <8b0e> <8b0e> 8322 <8b0f> <8b0f> 19141 <8b10> <8b10> 8977 <8b11> <8b13> 19142 <8b14> <8b14> 8964 <8b15> <8b15> 19145 <8b16> <8b16> 8975 <8b17> <8b17> 7733 <8b18> <8b18> 19146 <8b19> <8b19> 8401 <8b1a> <8b1a> 8976 <8b1b> <8b1b> 8099 <8b1c> <8b1c> 19147 <8b1d> <8b1d> 8662 <8b1e> <8b20> 19148 <8b21> <8b21> 8710 <8b22> <8b25> 19151 <8b26> <8b26> 7519 <8b27> <8b27> 19155 <8b28> <8b28> 8973 endcidrange 100 begincidrange <8b29> <8b2a> 19156 <8b2b> <8b2b> 8978 <8b2c> <8b2c> 8333 <8b2d> <8b2d> 8979 <8b2e> <8b32> 19158 <8b33> <8b33> 8931 <8b34> <8b38> 19163 <8b39> <8b39> 8122 <8b3a> <8b3d> 19168 <8b3e> <8b3e> 8312 <8b3f> <8b48> 19172 <8b49> <8b49> 8840 <8b4a> <8b4d> 19182 <8b4e> <8b4e> 8982 <8b4f> <8b4f> 8043 <8b50> <8b55> 19186 <8b56> <8b56> 8980 <8b57> <8b57> 19192 <8b58> <8b58> 8496 <8b59> <8b59> 8981 <8b5a> <8b5a> 8552 <8b5b> <8b5b> 19193 <8b5c> <8b5c> 8388 <8b5d> <8b65> 19194 <8b66> <8b66> 2270 <8b67> <8b6a> 19203 <8b6b> <8b6b> 8984 <8b6c> <8b6c> 3016 <8b6d> <8b6e> 19207 <8b6f> <8b6f> 8729 <8b70> <8b70> 8727 <8b71> <8b73> 19209 <8b74> <8b74> 8405 <8b75> <8b76> 19212 <8b77> <8b77> 8010 <8b78> <8b7c> 19214 <8b7d> <8b7d> 8768 <8b7e> <8b7f> 19219 <8b80> <8b80> 7891 <8b81> <8b89> 19221 <8b8a> <8b8a> 7753 <8b8b> <8b8d> 19230 <8b8e> <8b8e> 9755 <8b8f> <8b91> 19233 <8b92> <8b92> 7789 <8b93> <8b93> 8440 <8b94> <8b94> 19236 <8b95> <8b95> 8187 <8b96> <8b96> 8985 <8b97> <8b9b> 19237 <8b9c> <8b9c> 8974 <8b9d> <8b9d> 19242 <8b9e> <8b9e> 8983 <8b9f> <8b9f> 19243 <8ba0> <8ba0> 4887 <8ba1> <8ba1> 2105 <8ba2> <8ba2> 1512 <8ba3> <8ba3> 1719 <8ba4> <8ba4> 3242 <8ba5> <8ba5> 2072 <8ba6> <8ba7> 4888 <8ba8> <8ba8> 3625 <8ba9> <8ba9> 3230 <8baa> <8baa> 4890 <8bab> <8bab> 3100 <8bac> <8bac> 19244 <8bad> <8bad> 4062 <8bae> <8bae> 4208 <8baf> <8baf> 4063 <8bb0> <8bb0> 2106 <8bb1> <8bb1> 19245 <8bb2> <8bb2> 2179 <8bb3> <8bb3> 2041 <8bb4> <8bb5> 4891 <8bb6> <8bb6> 4081 <8bb7> <8bb7> 4893 <8bb8> <8bb8> 4024 <8bb9> <8bb9> 1582 <8bba> <8bba> 2690 <8bbb> <8bbb> 19246 <8bbc> <8bbc> 3524 <8bbd> <8bbd> 1674 <8bbe> <8bbe> 3361 <8bbf> <8bbf> 1632 <8bc0> <8bc0> 2342 <8bc1> <8bc1> 4515 <8bc2> <8bc3> 4894 <8bc4> <8bc4> 3039 <8bc5> <8bc5> 4676 <8bc6> <8bc6> 3405 <8bc7> <8bc7> 19247 <8bc8> <8bc8> 4426 <8bc9> <8bc9> 3540 <8bca> <8bca> 4496 <8bcb> <8bcb> 4896 <8bcc> <8bcc> 4574 <8bcd> <8bcd> 1357 <8bce> <8bce> 4898 <8bcf> <8bcf> 4897 <8bd0> <8bd0> 19248 endcidrange 100 begincidrange <8bd1> <8bd1> 4210 <8bd2> <8bd4> 4899 <8bd5> <8bd5> 3435 <8bd6> <8bd6> 4902 <8bd7> <8bd7> 3394 <8bd8> <8bd9> 4903 <8bda> <8bda> 1268 <8bdb> <8bdb> 4590 <8bdc> <8bdc> 4905 <8bdd> <8bdd> 1989 <8bde> <8bde> 1423 <8bdf> <8be0> 4906 <8be1> <8be1> 1863 <8be2> <8be2> 4056 <8be3> <8be3> 4207 <8be4> <8be4> 4908 <8be5> <8be5> 1726 <8be6> <8be6> 3927 <8be7> <8be7> 1206 <8be8> <8be9> 4909 <8bea> <8bea> 19249 <8beb> <8beb> 2236 <8bec> <8bec> 3819 <8bed> <8bed> 4308 <8bee> <8bee> 4911 <8bef> <8bef> 3842 <8bf0> <8bf0> 4912 <8bf1> <8bf1> 4282 <8bf2> <8bf2> 2042 <8bf3> <8bf3> 4913 <8bf4> <8bf4> 3498 <8bf5> <8bf5> 3525 <8bf6> <8bf6> 4914 <8bf7> <8bf7> 3176 <8bf8> <8bf8> 4589 <8bf9> <8bf9> 4915 <8bfa> <8bfa> 2934 <8bfb> <8bfb> 1536 <8bfc> <8bfc> 4916 <8bfd> <8bfd> 1641 <8bfe> <8bfe> 2395 <8bff> <8bff> 4917 <8c00> <8c00> 4918 <8c01> <8c01> 3490 <8c02> <8c02> 4919 <8c03> <8c03> 1496 <8c04> <8c04> 4920 <8c05> <8c05> 2571 <8c06> <8c06> 4632 <8c07> <8c07> 4921 <8c08> <8c08> 3595 <8c09> <8c09> 19250 <8c0a> <8c0a> 4209 <8c0b> <8c0b> 2836 <8c0c> <8c0c> 4922 <8c0d> <8c0d> 1502 <8c0e> <8c0e> 2022 <8c0f> <8c0f> 4923 <8c10> <8c10> 3966 <8c11> <8c12> 4924 <8c13> <8c13> 3788 <8c14> <8c16> 4926 <8c17> <8c17> 1214 <8c18> <8c18> 4931 <8c19> <8c19> 4929 <8c1a> <8c1a> 4113 <8c1b> <8c1b> 4930 <8c1c> <8c1c> 2778 <8c1d> <8c1d> 4932 <8c1e> <8c1e> 19251 <8c1f> <8c21> 4933 <8c22> <8c22> 3974 <8c23> <8c23> 4140 <8c24> <8c24> 1028 <8c25> <8c25> 4936 <8c26> <8c26> 3112 <8c27> <8c27> 4937 <8c28> <8c28> 2248 <8c29> <8c29> 2726 <8c2a> <8c2b> 4938 <8c2c> <8c2c> 2818 <8c2d> <8c2d> 3594 <8c2e> <8c2f> 4940 <8c30> <8c30> 2473 <8c31> <8c31> 3062 <8c32> <8c33> 4942 <8c34> <8c34> 3121 <8c35> <8c36> 4944 <8c37> <8c37> 1825 <8c38> <8c40> 19252 <8c41> <8c41> 2050 <8c42> <8c45> 19261 <8c46> <8c46> 1528 <8c47> <8c47> 7414 <8c48> <8c48> 8392 <8c49> <8c49> 7415 <8c4a> <8c4b> 19265 <8c4c> <8c4c> 3732 <8c4d> <8c4f> 19267 <8c50> <8c50> 7933 endcidrange 100 begincidrange <8c51> <8c54> 19270 <8c55> <8c55> 7445 <8c56> <8c59> 19274 <8c5a> <8c5a> 6544 <8c5b> <8c60> 19278 <8c61> <8c61> 3936 <8c62> <8c62> 2004 <8c63> <8c69> 19284 <8c6a> <8c6a> 1911 <8c6b> <8c6b> 4328 <8c6c> <8c72> 19291 <8c73> <8c73> 5597 <8c74> <8c77> 19298 <8c78> <8c78> 7504 <8c79> <8c79> 1043 <8c7a> <8c7a> 1209 <8c7b> <8c81> 19302 <8c82> <8c82> 7505 <8c83> <8c84> 19309 <8c85> <8c85> 7507 <8c86> <8c88> 19311 <8c89> <8c89> 1928 <8c8a> <8c8a> 7506 <8c8b> <8c8b> 19314 <8c8c> <8c8c> 2743 <8c8d> <8c93> 19315 <8c94> <8c94> 7509 <8c95> <8c97> 19322 <8c98> <8c98> 7508 <8c99> <8c9c> 19325 <8c9d> <8c9d> 7739 <8c9e> <8c9e> 8831 <8c9f> <8c9f> 19329 <8ca0> <8ca0> 7948 <8ca1> <8ca1> 7769 <8ca2> <8ca2> 7972 <8ca3> <8ca6> 19330 <8ca7> <8ca7> 8378 <8ca8> <8ca8> 8037 <8ca9> <8ca9> 7920 <8caa> <8caa> 8548 <8cab> <8cab> 7984 <8cac> <8cac> 8801 <8cad> <8cae> 19334 <8caf> <8caf> 8866 <8cb0> <8cb0> 9387 <8cb1> <8cb1> 19336 <8cb2> <8cb2> 9391 <8cb3> <8cb3> 7912 <8cb4> <8cb4> 7993 <8cb5> <8cb5> 19337 <8cb6> <8cb6> 7752 <8cb7> <8cb7> 8304 <8cb8> <8cb8> 7848 <8cb9> <8cb9> 19338 <8cba> <8cba> 9388 <8cbb> <8cbb> 7927 <8cbc> <8cbc> 8566 <8cbd> <8cbd> 9389 <8cbe> <8cbe> 19339 <8cbf> <8cbf> 8315 <8cc0> <8cc0> 8005 <8cc1> <8cc1> 9386 <8cc2> <8cc2> 8267 <8cc3> <8cc3> 8239 <8cc4> <8cc4> 8026 <8cc5> <8cc5> 9392 <8cc6> <8cc6> 19340 <8cc7> <8cc7> 8887 <8cc8> <8cc8> 8063 <8cc9> <8cc9> 19341 <8cca> <8cca> 8805 <8ccb> <8cd0> 19342 <8cd1> <8cd1> 9394 <8cd2> <8cd2> 8475 <8cd3> <8cd3> 7761 <8cd4> <8cd4> 19348 <8cd5> <8cd5> 9396 <8cd6> <8cd9> 19349 <8cda> <8cda> 9395 <8cdb> <8cdb> 19353 <8cdc> <8cdc> 7839 <8cdd> <8cdd> 19354 <8cde> <8cde> 8472 <8cdf> <8cdf> 19355 <8ce0> <8ce0> 8372 <8ce1> <8ce1> 9135 <8ce2> <8ce2> 8635 <8ce3> <8ce3> 8306 <8ce4> <8ce4> 8085 <8ce5> <8ce5> 19356 <8ce6> <8ce6> 7946 <8ce7> <8ce7> 9398 <8ce8> <8ce9> 19357 <8cea> <8cea> 8849 <8ceb> <8ceb> 9397 <8cec> <8cec> 8824 <8ced> <8ced> 7892 <8cee> <8cf3> 19359 <8cf4> <8cf4> 8179 endcidrange 100 begincidrange <8cf5> <8cf9> 19365 <8cfa> <8cfa> 8873 <8cfb> <8cfb> 9399 <8cfc> <8cfc> 7976 <8cfd> <8cfd> 8457 <8cfe> <8cfe> 8903 <8cff> <8cff> 19370 <8d00> <8d03> 19371 <8d04> <8d04> 9390 <8d05> <8d05> 8881 <8d06> <8d07> 19375 <8d08> <8d08> 8806 <8d09> <8d09> 19377 <8d0a> <8d0a> 8795 <8d0b> <8d0b> 8900 <8d0c> <8d0c> 19378 <8d0d> <8d0d> 8469 <8d0e> <8d0e> 19379 <8d0f> <8d0f> 8746 <8d10> <8d10> 9393 <8d11> <8d15> 19380 <8d16> <8d16> 8509 <8d17> <8d1a> 19385 <8d1b> <8d1b> 7957 <8d1c> <8d1c> 8796 <8d1d> <8d1d> 1053 <8d1e> <8d1e> 4491 <8d1f> <8d1f> 1717 <8d20> <8d20> 19389 <8d21> <8d21> 1802 <8d22> <8d22> 1165 <8d23> <8d23> 4403 <8d24> <8d24> 3898 <8d25> <8d25> 999 <8d26> <8d26> 4460 <8d27> <8d27> 2058 <8d28> <8d28> 4553 <8d29> <8d29> 1620 <8d2a> <8d2a> 3587 <8d2b> <8d2b> 3029 <8d2c> <8d2c> 1098 <8d2d> <8d2d> 1811 <8d2e> <8d2e> 4603 <8d2f> <8d2f> 1850 <8d30> <8d30> 1598 <8d31> <8d31> 2157 <8d32> <8d33> 6444 <8d34> <8d34> 3660 <8d35> <8d35> 1868 <8d36> <8d36> 6446 <8d37> <8d37> 1406 <8d38> <8d38> 2744 <8d39> <8d39> 1646 <8d3a> <8d3a> 1935 <8d3b> <8d3b> 6447 <8d3c> <8d3c> 4407 <8d3d> <8d3d> 6448 <8d3e> <8d3e> 2121 <8d3f> <8d3f> 2036 <8d40> <8d40> 6449 <8d41> <8d41> 2599 <8d42> <8d42> 2655 <8d43> <8d43> 4386 <8d44> <8d44> 4647 <8d45> <8d46> 6450 <8d47> <8d47> 6454 <8d48> <8d49> 6452 <8d4a> <8d4a> 3351 <8d4b> <8d4b> 1710 <8d4c> <8d4c> 1539 <8d4d> <8d4d> 6455 <8d4e> <8d4e> 3457 <8d4f> <8d4f> 3334 <8d50> <8d50> 1360 <8d51> <8d52> 19390 <8d53> <8d53> 5691 <8d54> <8d54> 2979 <8d55> <8d55> 6456 <8d56> <8d56> 2464 <8d57> <8d57> 19392 <8d58> <8d58> 4629 <8d59> <8d59> 6457 <8d5a> <8d5a> 4617 <8d5b> <8d5b> 3287 <8d5c> <8d5c> 4745 <8d5d> <8d5d> 4739 <8d5e> <8d5e> 4385 <8d5f> <8d5f> 19393 <8d60> <8d60> 4412 <8d61> <8d61> 3325 <8d62> <8d62> 4243 <8d63> <8d63> 1742 <8d64> <8d64> 1285 <8d65> <8d65> 19394 <8d66> <8d66> 3355 <8d67> <8d67> 7412 <8d68> <8d6a> 19395 <8d6b> <8d6b> 1932 <8d6c> <8d6c> 19398 <8d6d> <8d6d> 7413 endcidrange 100 begincidrange <8d6e> <8d6f> 19399 <8d70> <8d70> 4668 <8d71> <8d72> 19401 <8d73> <8d73> 7407 <8d74> <8d74> 1707 <8d75> <8d75> 4469 <8d76> <8d76> 1738 <8d77> <8d77> 3087 <8d78> <8d80> 19403 <8d81> <8d81> 1256 <8d82> <8d83> 19412 <8d84> <8d84> 7408 <8d85> <8d85> 1233 <8d86> <8d89> 19414 <8d8a> <8d8a> 4352 <8d8b> <8d8b> 3188 <8d8c> <8d90> 19418 <8d91> <8d91> 7410 <8d92> <8d93> 19423 <8d94> <8d94> 7409 <8d95> <8d95> 7956 <8d96> <8d98> 19425 <8d99> <8d99> 8826 <8d9a> <8d9e> 19428 <8d9f> <8d9f> 3614 <8da0> <8da2> 19433 <8da3> <8da3> 3199 <8da4> <8da7> 19436 <8da8> <8da8> 8430 <8da9> <8db0> 19440 <8db1> <8db1> 7411 <8db2> <8db2> 9720 <8db3> <8db3> 4672 <8db4> <8db4> 2944 <8db5> <8db5> 7452 <8db6> <8db7> 19448 <8db8> <8db8> 7447 <8db9> <8db9> 19450 <8dba> <8dba> 7455 <8dbb> <8dbb> 19451 <8dbc> <8dbc> 7454 <8dbd> <8dbd> 19452 <8dbe> <8dbe> 4537 <8dbf> <8dbf> 7453 <8dc0> <8dc2> 19453 <8dc3> <8dc3> 4353 <8dc4> <8dc4> 7456 <8dc5> <8dc5> 19456 <8dc6> <8dc6> 7464 <8dc7> <8dca> 19457 <8dcb> <8dcb> 986 <8dcc> <8dcc> 1497 <8dcd> <8dcd> 19461 <8dce> <8dcf> 7461 <8dd0> <8dd0> 19462 <8dd1> <8dd1> 2973 <8dd2> <8dd5> 19463 <8dd6> <8dd7> 7457 <8dd8> <8dd9> 19467 <8dda> <8dda> 7459 <8ddb> <8ddb> 7463 <8ddc> <8ddc> 19469 <8ddd> <8ddd> 2319 <8dde> <8dde> 7460 <8ddf> <8ddf> 1781 <8de0> <8de2> 19470 <8de3> <8de3> 7468 <8de4> <8de4> 7471 <8de5> <8de7> 19473 <8de8> <8de8> 2420 <8de9> <8de9> 19476 <8dea> <8dea> 1867 <8deb> <8deb> 7448 <8dec> <8dec> 7465 <8ded> <8dee> 19477 <8def> <8def> 2654 <8df0> <8df2> 19479 <8df3> <8df3> 3659 <8df4> <8df4> 19482 <8df5> <8df5> 2156 <8df6> <8df6> 19483 <8df7> <8df8> 7466 <8df9> <8df9> 7469 <8dfa> <8dfa> 1572 <8dfb> <8dfb> 7470 <8dfc> <8dfc> 19484 <8dfd> <8dfd> 7473 <8dfe> <8dff> 19485 <8e00> <8e04> 19487 <8e05> <8e05> 7449 <8e06> <8e08> 19492 <8e09> <8e09> 7472 <8e0a> <8e0a> 4256 <8e0b> <8e0b> 19495 <8e0c> <8e0c> 1297 <8e0d> <8e0e> 19496 <8e0f> <8e0f> 3575 <8e10> <8e10> 8084 <8e11> <8e13> 19498 <8e14> <8e14> 7474 endcidrange 100 begincidrange <8e15> <8e1c> 19501 <8e1d> <8e1d> 7475 <8e1e> <8e1e> 2320 <8e1f> <8e1f> 7476 <8e20> <8e21> 19509 <8e22> <8e22> 3634 <8e23> <8e23> 7479 <8e24> <8e28> 19511 <8e29> <8e29> 1167 <8e2a> <8e2a> 4662 <8e2b> <8e2b> 19516 <8e2c> <8e2c> 7477 <8e2d> <8e2d> 19517 <8e2e> <8e2e> 7478 <8e2f> <8e2f> 7480 <8e30> <8e30> 19518 <8e31> <8e31> 7486 <8e32> <8e33> 19519 <8e34> <8e34> 8752 <8e35> <8e35> 7484 <8e36> <8e38> 19521 <8e39> <8e39> 7483 <8e3a> <8e3a> 7481 <8e3b> <8e3c> 19524 <8e3d> <8e3d> 7485 <8e3e> <8e3f> 19526 <8e40> <8e40> 7482 <8e41> <8e42> 7488 <8e43> <8e43> 19528 <8e44> <8e44> 3638 <8e45> <8e46> 19529 <8e47> <8e47> 5947 <8e48> <8e48> 1433 <8e49> <8e49> 7487 <8e4a> <8e4a> 7492 <8e4b> <8e4b> 3574 <8e4c> <8e4c> 9725 <8e4d> <8e50> 19531 <8e51> <8e52> 7490 <8e53> <8e54> 19535 <8e55> <8e55> 9728 <8e56> <8e58> 19537 <8e59> <8e59> 7450 <8e5a> <8e62> 19540 <8e63> <8e63> 9734 <8e64> <8e65> 19549 <8e66> <8e66> 1069 <8e67> <8e68> 19551 <8e69> <8e69> 7451 <8e6a> <8e6b> 19553 <8e6c> <8e6c> 1446 <8e6d> <8e6d> 1195 <8e6e> <8e6e> 19555 <8e6f> <8e6f> 7496 <8e70> <8e70> 7493 <8e71> <8e71> 19556 <8e72> <8e72> 1558 <8e73> <8e73> 19557 <8e74> <8e74> 7497 <8e75> <8e75> 19558 <8e76> <8e76> 7494 <8e77> <8e79> 19559 <8e7a> <8e7a> 9727 <8e7b> <8e7b> 19562 <8e7c> <8e7c> 7495 <8e7d> <8e7e> 19563 <8e7f> <8e7f> 1373 <8e80> <8e80> 19565 <8e81> <8e81> 4397 <8e82> <8e84> 19566 <8e85> <8e85> 7498 <8e86> <8e86> 19569 <8e87> <8e87> 1310 <8e88> <8e88> 19570 <8e89> <8e89> 9724 <8e8a> <8e8a> 7820 <8e8b> <8e8b> 9730 <8e8c> <8e8c> 19571 <8e8d> <8e8d> 8781 <8e8e> <8e8e> 19572 <8e8f> <8e8f> 7499 <8e90> <8e90> 7501 <8e91> <8e91> 9732 <8e92> <8e92> 9726 <8e93> <8e93> 9731 <8e94> <8e94> 7500 <8e95> <8e99> 19573 <8e9a> <8e9a> 9729 <8e9b> <8e9b> 19578 <8e9c> <8e9c> 7502 <8e9d> <8e9d> 19579 <8e9e> <8e9e> 7503 <8e9f> <8ea0> 19580 <8ea1> <8ea1> 9733 <8ea2> <8ea4> 19582 <8ea5> <8ea5> 7843 <8ea6> <8ea6> 9736 <8ea7> <8ea9> 19585 <8eaa> <8eaa> 9735 <8eab> <8eab> 3366 endcidrange 100 begincidrange <8eac> <8eac> 1795 <8ead> <8eae> 19588 <8eaf> <8eaf> 3192 <8eb0> <8eb1> 19590 <8eb2> <8eb2> 1570 <8eb3> <8eb9> 19592 <8eba> <8eba> 3612 <8ebb> <8ebf> 19599 <8ec0> <8ec0> 8432 <8ec1> <8ec9> 19604 <8eca> <8eca> 7803 <8ecb> <8ecb> 8807 <8ecc> <8ecc> 7990 <8ecd> <8ecd> 8150 <8ece> <8ece> 6392 <8ecf> <8ed1> 19613 <8ed2> <8ed2> 8672 <8ed3> <8ed3> 19616 <8ed4> <8ed4> 9356 <8ed5> <8eda> 19617 <8edb> <8edb> 9357 <8edc> <8ede> 19623 <8edf> <8edf> 8450 <8ee0> <8ee3> 19626 <8ee4> <8ee4> 9364 <8ee5> <8eea> 19630 <8eeb> <8eeb> 9363 <8eec> <8ef1> 19636 <8ef2> <8ef2> 9358 <8ef3> <8ef7> 19642 <8ef8> <8ef8> 8857 <8ef9> <8ef9> 9361 <8efa> <8efa> 9366 <8efb> <8efb> 9359 <8efc> <8efc> 9362 <8efd> <8efd> 19647 <8efe> <8efe> 9367 <8eff> <8eff> 19648 <8f00> <8f02> 19649 <8f03> <8f03> 8113 <8f04> <8f04> 19652 <8f05> <8f05> 9370 <8f06> <8f06> 19653 <8f07> <8f07> 9369 <8f08> <8f08> 19654 <8f09> <8f09> 8792 <8f0a> <8f0a> 9368 <8f0b> <8f11> 19655 <8f12> <8f12> 9371 <8f13> <8f13> 19662 <8f14> <8f14> 7945 <8f15> <8f15> 8422 <8f16> <8f1a> 19663 <8f1b> <8f1b> 8230 <8f1c> <8f1c> 9375 <8f1d> <8f1d> 8025 <8f1e> <8f1f> 9373 <8f20> <8f24> 19668 <8f25> <8f25> 7995 <8f26> <8f26> 9372 <8f27> <8f28> 19673 <8f29> <8f29> 7738 <8f2a> <8f2a> 8283 <8f2b> <8f2e> 19675 <8f2f> <8f2f> 8048 <8f30> <8f32> 19679 <8f33> <8f33> 9376 <8f34> <8f37> 19682 <8f38> <8f38> 8507 <8f39> <8f3a> 19686 <8f3b> <8f3b> 7943 <8f3c> <8f3d> 19688 <8f3e> <8f3e> 8816 <8f3f> <8f3f> 8759 <8f40> <8f41> 19690 <8f42> <8f42> 9426 <8f43> <8f43> 19692 <8f44> <8f44> 8627 <8f45> <8f45> 8773 <8f46> <8f46> 9377 <8f47> <8f48> 19693 <8f49> <8f49> 8872 <8f4a> <8f4c> 19695 <8f4d> <8f4d> 8828 <8f4e> <8f4e> 8112 <8f4f> <8f53> 19698 <8f54> <8f54> 9378 <8f55> <8f5e> 19703 <8f5f> <8f5f> 8006 <8f60> <8f60> 19713 <8f61> <8f61> 9088 <8f62> <8f62> 9365 <8f63> <8f63> 19714 <8f64> <8f64> 9360 <8f65> <8f65> 19715 <8f66> <8f66> 1242 <8f67> <8f67> 4417 <8f68> <8f68> 1861 <8f69> <8f69> 4036 <8f6a> <8f6a> 19716 endcidrange 100 begincidrange <8f6b> <8f6b> 6369 <8f6c> <8f6c> 4615 <8f6d> <8f6d> 6370 <8f6e> <8f6e> 2685 <8f6f> <8f6f> 3272 <8f70> <8f70> 1947 <8f71> <8f73> 6371 <8f74> <8f74> 4576 <8f75> <8f76> 6374 <8f77> <8f77> 6377 <8f78> <8f78> 6376 <8f79> <8f7a> 6378 <8f7b> <8f7b> 3166 <8f7c> <8f7c> 6380 <8f7d> <8f7d> 4379 <8f7e> <8f7e> 6381 <8f7f> <8f7f> 2207 <8f80> <8f80> 19717 <8f81> <8f82> 6382 <8f83> <8f83> 2208 <8f84> <8f84> 6384 <8f85> <8f85> 1699 <8f86> <8f86> 2567 <8f87> <8f87> 6385 <8f88> <8f88> 1051 <8f89> <8f89> 2025 <8f8a> <8f8a> 1870 <8f8b> <8f8b> 6386 <8f8c> <8f8c> 19718 <8f8d> <8f8f> 6387 <8f90> <8f90> 1685 <8f91> <8f91> 2080 <8f92> <8f92> 19719 <8f93> <8f93> 3451 <8f94> <8f94> 5492 <8f95> <8f95> 4338 <8f96> <8f96> 3882 <8f97> <8f97> 4440 <8f98> <8f98> 6390 <8f99> <8f99> 4479 <8f9a> <8f9a> 6391 <8f9b> <8f9b> 3980 <8f9c> <8f9c> 1813 <8f9d> <8f9d> 19720 <8f9e> <8f9e> 1354 <8f9f> <8f9f> 1090 <8fa0> <8fa2> 19721 <8fa3> <8fa3> 2460 <8fa4> <8fa5> 19724 <8fa6> <8fa6> 7728 <8fa7> <8fa7> 19726 <8fa8> <8fa9> 1103 <8faa> <8faa> 19727 <8fab> <8fab> 1105 <8fac> <8fac> 19728 <8fad> <8fad> 7837 <8fae> <8fae> 7755 <8faf> <8faf> 7754 <8fb0> <8fb0> 1250 <8fb1> <8fb1> 3267 <8fb2> <8fb2> 8362 <8fb3> <8fb5> 19729 <8fb6> <8fb6> 5949 <8fb7> <8fb8> 19732 <8fb9> <8fb9> 1096 <8fba> <8fbc> 19734 <8fbd> <8fbd> 2578 <8fbe> <8fbe> 1394 <8fbf> <8fc0> 19737 <8fc1> <8fc1> 3109 <8fc2> <8fc2> 4285 <8fc3> <8fc3> 19739 <8fc4> <8fc4> 3096 <8fc5> <8fc5> 4065 <8fc6> <8fc6> 19740 <8fc7> <8fc7> 1878 <8fc8> <8fc8> 2716 <8fc9> <8fcd> 19741 <8fce> <8fce> 4242 <8fcf> <8fcf> 19746 <8fd0> <8fd0> 4366 <8fd1> <8fd1> 2253 <8fd2> <8fd2> 19747 <8fd3> <8fd3> 5950 <8fd4> <8fd4> 1618 <8fd5> <8fd5> 5951 <8fd6> <8fd7> 19748 <8fd8> <8fd8> 1998 <8fd9> <8fd9> 4483 <8fda> <8fda> 19750 <8fdb> <8fdb> 2249 <8fdc> <8fdc> 4345 <8fdd> <8fdd> 3764 <8fde> <8fde> 2549 <8fdf> <8fdf> 1278 <8fe0> <8fe1> 19751 <8fe2> <8fe2> 3657 <8fe3> <8fe3> 19753 <8fe4> <8fe4> 5954 <8fe5> <8fe5> 5952 endcidrange 100 begincidrange <8fe6> <8fe6> 5956 <8fe7> <8fe7> 19754 <8fe8> <8fe8> 5958 <8fe9> <8fe9> 5955 <8fea> <8fea> 1456 <8feb> <8feb> 3047 <8fec> <8fec> 19755 <8fed> <8fed> 1501 <8fee> <8fee> 5953 <8fef> <8fef> 19756 <8ff0> <8ff0> 3469 <8ff1> <8ff2> 19757 <8ff3> <8ff3> 5957 <8ff4> <8ff4> 9851 <8ff5> <8ff6> 19759 <8ff7> <8ff7> 2777 <8ff8> <8ff8> 1070 <8ff9> <8ff9> 2070 <8ffa> <8ffc> 19761 <8ffd> <8ffd> 4628 <8ffe> <8fff> 19764 <9000> <9000> 3708 <9001> <9001> 3522 <9002> <9002> 3425 <9003> <9003> 3622 <9004> <9004> 5960 <9005> <9005> 5959 <9006> <9006> 2889 <9007> <9008> 19766 <9009> <9009> 4042 <900a> <900a> 4064 <900b> <900b> 5961 <900c> <900c> 19768 <900d> <900d> 5964 <900e> <900e> 19769 <900f> <900f> 3689 <9010> <9010> 4591 <9011> <9011> 5963 <9012> <9012> 1470 <9013> <9013> 19770 <9014> <9014> 3695 <9015> <9015> 9202 <9016> <9016> 5965 <9017> <9017> 1529 <9018> <9018> 19771 <9019> <9019> 8830 <901a> <901a> 3673 <901b> <901b> 1853 <901c> <901c> 19772 <901d> <901d> 3420 <901e> <901e> 1270 <901f> <901f> 3534 <9020> <9020> 4399 <9021> <9021> 5966 <9022> <9022> 1671 <9023> <9023> 8217 <9024> <9025> 19773 <9026> <9026> 5962 <9027> <902c> 19775 <902d> <902d> 5969 <902e> <902e> 1409 <902f> <902f> 5970 <9030> <9031> 19781 <9032> <9032> 8123 <9033> <9034> 19783 <9035> <9036> 5967 <9037> <9037> 19785 <9038> <9038> 4196 <9039> <903a> 19786 <903b> <903b> 2694 <903c> <903c> 1071 <903d> <903d> 19788 <903e> <903e> 4295 <903f> <9040> 19789 <9041> <9041> 1564 <9042> <9042> 3553 <9043> <9043> 19791 <9044> <9044> 5971 <9045> <9046> 19792 <9047> <9047> 4315 <9048> <904a> 19794 <904b> <904b> 8787 <904c> <904c> 19797 <904d> <904d> 1106 <904e> <904e> 7998 <904f> <904f> 1587 <9050> <9050> 5974 <9051> <9052> 5972 <9053> <9053> 1441 <9054> <9054> 7846 <9055> <9055> 8590 <9056> <9056> 19798 <9057> <9057> 4172 <9058> <9058> 5976 <9059> <905a> 19799 <905b> <905b> 5978 <905c> <905c> 8684 <905d> <905d> 19801 <905e> <905e> 7870 <905f> <905f> 19802 endcidrange 100 begincidrange <9060> <9060> 8778 <9061> <9061> 19803 <9062> <9062> 5977 <9063> <9063> 3119 <9064> <9064> 19804 <9065> <9065> 4138 <9066> <9067> 19805 <9068> <9068> 5975 <9069> <9069> 8499 <906a> <906c> 19807 <906d> <906d> 4389 <906e> <906e> 4475 <906f> <9071> 19810 <9072> <9072> 7812 <9073> <9073> 19813 <9074> <9074> 5980 <9075> <9075> 4686 <9076> <9076> 19814 <9077> <9077> 8399 <9078> <9078> 8674 <9079> <9079> 19815 <907a> <907a> 8719 <907b> <907b> 19816 <907c> <907c> 8233 <907d> <907d> 5981 <907e> <907e> 19817 <907f> <907f> 1093 <9080> <9080> 4132 <9081> <9081> 8307 <9082> <9082> 5982 <9083> <9083> 5984 <9084> <9084> 8021 <9085> <9086> 19818 <9087> <9087> 9201 <9088> <9088> 5983 <9089> <9089> 19820 <908a> <908a> 7750 <908b> <908b> 5985 <908c> <908e> 19821 <908f> <908f> 8291 <9090> <9090> 9203 <9091> <9091> 4191 <9092> <9092> 19824 <9093> <9093> 1452 <9094> <9094> 19825 <9095> <9095> 6167 <9096> <9096> 19826 <9097> <9097> 4967 <9098> <9098> 19827 <9099> <9099> 4970 <909a> <909a> 19828 <909b> <909b> 4968 <909c> <909c> 19829 <909d> <909d> 4969 <909e> <90a0> 19830 <90a1> <90a1> 4972 <90a2> <90a2> 3994 <90a3> <90a3> 2858 <90a4> <90a5> 19833 <90a6> <90a6> 1017 <90a7> <90a9> 19835 <90aa> <90aa> 3963 <90ab> <90ab> 19838 <90ac> <90ac> 4971 <90ad> <90ad> 19839 <90ae> <90ae> 4271 <90af> <90af> 1889 <90b0> <90b0> 4978 <90b1> <90b1> 3182 <90b2> <90b2> 19840 <90b3> <90b3> 4974 <90b4> <90b4> 4973 <90b5> <90b5> 3348 <90b6> <90b6> 4975 <90b7> <90b7> 19841 <90b8> <90b8> 4977 <90b9> <90b9> 4667 <90ba> <90ba> 4976 <90bb> <90bb> 2595 <90bc> <90bd> 19842 <90be> <90be> 4981 <90bf> <90c0> 19844 <90c1> <90c1> 4313 <90c2> <90c3> 19846 <90c4> <90c4> 4983 <90c5> <90c5> 4980 <90c6> <90c6> 19848 <90c7> <90c7> 4984 <90c8> <90c9> 19849 <90ca> <90ca> 2189 <90cb> <90cd> 19851 <90ce> <90ce> 2484 <90cf> <90cf> 4979 <90d0> <90d0> 4982 <90d1> <90d1> 4514 <90d2> <90d2> 19854 <90d3> <90d3> 4985 <90d4> <90d6> 19855 <90d7> <90d7> 4989 <90d8> <90da> 19858 endcidrange 100 begincidrange <90db> <90db> 4990 <90dc> <90dc> 4988 <90dd> <90dd> 1913 <90de> <90de> 19861 <90df> <90df> 8990 <90e0> <90e0> 19862 <90e1> <90e1> 2353 <90e2> <90e2> 4987 <90e3> <90e5> 19863 <90e6> <90e6> 4986 <90e7> <90e7> 4362 <90e8> <90e8> 1158 <90e9> <90ea> 19866 <90eb> <90eb> 4991 <90ec> <90ec> 19868 <90ed> <90ed> 1874 <90ee> <90ee> 19869 <90ef> <90ef> 4992 <90f0> <90f3> 19870 <90f4> <90f4> 1248 <90f5> <90f5> 8755 <90f6> <90f7> 19874 <90f8> <90f8> 1415 <90f9> <90fc> 19876 <90fd> <90fd> 1531 <90fe> <90fe> 4993 <90ff> <90ff> 19880 <9100> <9101> 19881 <9102> <9102> 1588 <9103> <9103> 19883 <9104> <9104> 4994 <9105> <9105> 19884 <9106> <9106> 8992 <9107> <9108> 19885 <9109> <9109> 8647 <910a> <9111> 19887 <9112> <9112> 8892 <9113> <9113> 19895 <9114> <9114> 8988 <9115> <9115> 19896 <9116> <9116> 8785 <9117> <9118> 19897 <9119> <9119> 1074 <911a> <911d> 19899 <911e> <911e> 4996 <911f> <9121> 19903 <9122> <9122> 4995 <9123> <9123> 4997 <9124> <9126> 19906 <9127> <9127> 7867 <9128> <912c> 19909 <912d> <912d> 8839 <912e> <912e> 19914 <912f> <912f> 4999 <9130> <9130> 8237 <9131> <9131> 4998 <9132> <9132> 7851 <9133> <9133> 19915 <9134> <9134> 8989 <9135> <9135> 19916 <9136> <9136> 8991 <9137> <9138> 19917 <9139> <9139> 5000 <913a> <913a> 8987 <913b> <9142> 19919 <9143> <9143> 5001 <9144> <9145> 19927 <9146> <9146> 5002 <9147> <9147> 19929 <9148> <9148> 8993 <9149> <9149> 4276 <914a> <914a> 7416 <914b> <914b> 3186 <914c> <914c> 4640 <914d> <914d> 2981 <914e> <914f> 7418 <9150> <9150> 7417 <9151> <9151> 19930 <9152> <9152> 2293 <9153> <9156> 19931 <9157> <9157> 4026 <9158> <9159> 19935 <915a> <915a> 1648 <915b> <915c> 19937 <915d> <915d> 4368 <915e> <915e> 3581 <915f> <9160> 19939 <9161> <9161> 7422 <9162> <9162> 7421 <9163> <9163> 1887 <9164> <9164> 7420 <9165> <9165> 3531 <9166> <9168> 19941 <9169> <9169> 7424 <916a> <916a> 2493 <916b> <916b> 19944 <916c> <916c> 1295 <916d> <916d> 19945 <916e> <916e> 3675 <916f> <916f> 7425 endcidrange 100 begincidrange <9170> <9170> 7423 <9171> <9171> 2181 <9172> <9172> 7428 <9173> <9173> 19946 <9174> <9174> 7429 <9175> <9175> 2206 <9176> <9176> 2749 <9177> <9177> 2414 <9178> <9178> 3542 <9179> <9179> 7430 <917a> <917c> 19947 <917d> <917e> 7426 <917f> <917f> 2899 <9180> <9184> 19950 <9185> <9185> 7432 <9186> <9186> 19955 <9187> <9187> 1343 <9188> <9188> 19956 <9189> <9189> 4682 <918a> <918a> 19957 <918b> <918b> 1370 <918c> <918c> 7431 <918d> <918d> 7434 <918e> <918f> 19958 <9190> <9190> 7433 <9191> <9191> 7435 <9192> <9192> 3996 <9193> <9195> 19960 <9196> <9196> 8789 <9197> <9199> 19963 <919a> <919a> 2774 <919b> <919b> 3204 <919c> <919c> 7823 <919d> <91a1> 19966 <91a2> <91a3> 7436 <91a4> <91a9> 19971 <91aa> <91aa> 7438 <91ab> <91ab> 8716 <91ac> <91ac> 8100 <91ad> <91af> 7439 <91b0> <91b3> 19977 <91b4> <91b4> 7443 <91b5> <91b5> 7442 <91b6> <91b9> 19981 <91ba> <91ba> 7444 <91bb> <91bf> 19985 <91c0> <91c0> 8347 <91c1> <91c1> 8664 <91c2> <91c2> 19990 <91c3> <91c3> 9722 <91c4> <91c4> 19991 <91c5> <91c5> 9721 <91c6> <91c6> 19992 <91c7> <91c7> 1168 <91c8> <91c8> 19993 <91c9> <91c9> 4281 <91ca> <91ca> 3428 <91cb> <91cb> 8500 <91cc> <91cc> 2522 <91cd> <91cd> 4567 <91ce> <91ce> 4151 <91cf> <91cf> 2568 <91d0> <91d0> 19994 <91d1> <91d1> 2241 <91d2> <91d4> 9459 <91d5> <91d5> 9464 <91d6> <91d6> 19995 <91d7> <91d7> 9463 <91d8> <91d8> 7880 <91d9> <91d9> 9462 <91da> <91db> 19996 <91dc> <91dc> 1701 <91dd> <91dd> 8832 <91de> <91e2> 19998 <91e3> <91e3> 7877 <91e4> <91e4> 9467 <91e5> <91e6> 20003 <91e7> <91e7> 9466 <91e8> <91e8> 20005 <91e9> <91e9> 7917 <91ea> <91f4> 20006 <91f5> <91f5> 9469 <91f6> <91f6> 20017 <91f7> <91f7> 9465 <91f8> <91f8> 20018 <91f9> <91f9> 9470 <91fa> <91fa> 8397 <91fb> <91ff> 20019 <9200> <9200> 9480 <9201> <9201> 9476 <9202> <9203> 20024 <9204> <9204> 9478 <9205> <9207> 20026 <9208> <9208> 9471 <9209> <9209> 8336 <920a> <920c> 20029 <920d> <920d> 7901 <920e> <920e> 7973 <920f> <920f> 20032 <9210> <9210> 9475 endcidrange 100 begincidrange <9211> <9211> 9474 <9212> <9213> 20033 <9214> <9214> 7802 <9215> <9215> 8358 <9216> <921d> 20035 <921e> <921e> 8149 <921f> <9222> 20043 <9223> <9223> 7953 <9224> <9224> 20047 <9225> <9225> 9479 <9226> <9226> 9472 <9227> <9227> 9477 <9228> <922d> 20048 <922e> <922e> 9497 <922f> <922f> 20054 <9230> <9230> 9493 <9231> <9232> 20055 <9233> <9233> 9484 <9234> <9234> 8241 <9235> <9236> 20057 <9237> <9237> 9483 <9238> <9238> 9487 <9239> <9239> 9498 <923a> <923a> 9481 <923b> <923c> 20059 <923d> <923d> 9486 <923e> <923e> 8756 <923f> <923f> 9491 <9240> <9240> 8064 <9241> <9244> 20061 <9245> <9245> 9473 <9246> <9247> 20065 <9248> <9248> 9495 <9249> <9249> 9494 <924a> <924c> 20067 <924d> <924d> 9496 <924e> <9250> 20070 <9251> <9251> 7766 <9252> <9254> 20073 <9255> <9255> 9485 <9256> <9256> 20076 <9257> <9257> 8403 <9258> <9259> 20077 <925a> <925a> 8314 <925b> <925b> 8398 <925c> <925d> 20079 <925e> <925e> 9488 <925f> <9261> 20081 <9262> <9262> 7765 <9263> <9265> 20084 <9266> <9266> 9482 <9267> <926b> 20087 <926c> <926d> 9489 <926e> <9273> 20092 <9274> <9274> 2155 <9275> <9277> 20098 <9278> <9278> 8106 <9279> <9279> 20101 <927a> <927a> 9502 <927b> <927b> 7967 <927c> <927e> 20102 <927f> <927f> 9517 <9280> <9280> 8733 <9281> <9282> 20105 <9283> <9283> 9522 <9284> <9284> 20107 <9285> <9285> 8571 <9286> <928d> 20108 <928e> <928e> 7552 <928f> <9290> 20116 <9291> <9291> 8623 <9292> <9292> 20118 <9293> <9293> 9516 <9294> <9295> 20119 <9296> <9296> 9512 <9297> <9297> 20121 <9298> <9298> 8332 <9299> <9299> 20122 <929a> <929a> 9519 <929b> <929b> 20123 <929c> <929c> 8636 <929d> <929f> 20124 <92a0> <92a0> 9501 <92a1> <92a2> 20127 <92a3> <92a3> 9525 <92a4> <92a4> 20129 <92a5> <92a5> 8717 <92a6> <92a6> 9510 <92a7> <92a7> 20130 <92a8> <92a8> 9524 <92a9> <92a9> 9514 <92aa> <92aa> 9503 <92ab> <92ab> 9521 <92ac> <92ac> 9500 <92ad> <92ad> 20131 <92ae> <92ae> 7553 <92af> <92b0> 20132 <92b1> <92b1> 9509 <92b2> <92b6> 20134 <92b7> <92b7> 8653 endcidrange 100 begincidrange <92b8> <92b8> 20139 <92b9> <92b9> 8666 <92ba> <92ba> 20140 <92bb> <92bb> 8562 <92bc> <92bc> 9534 <92bd> <92c0> 20141 <92c1> <92c1> 8271 <92c2> <92c2> 20145 <92c3> <92c3> 9539 <92c4> <92c4> 20146 <92c5> <92c5> 8663 <92c6> <92c6> 20147 <92c7> <92c7> 7740 <92c8> <92c8> 7554 <92c9> <92cb> 20148 <92cc> <92cc> 9513 <92cd> <92ce> 20151 <92cf> <92cf> 9505 <92d0> <92d1> 20153 <92d2> <92d2> 7935 <92d3> <92dc> 20155 <92dd> <92dd> 9535 <92de> <92de> 20165 <92df> <92df> 9540 <92e0> <92e2> 20166 <92e3> <92e3> 9507 <92e4> <92e4> 7824 <92e5> <92e5> 9530 <92e6> <92e6> 9541 <92e7> <92e7> 20169 <92e8> <92e8> 9533 <92e9> <92e9> 20170 <92ea> <92ea> 8385 <92eb> <92ec> 20171 <92ed> <92ed> 8451 <92ee> <92ee> 9504 <92ef> <92ef> 9532 <92f0> <92f0> 9531 <92f1> <92f1> 9528 <92f2> <92f5> 20173 <92f6> <92f6> 9536 <92f7> <92f7> 20177 <92f8> <92f8> 8141 <92f9> <92fb> 20178 <92fc> <92fc> 7960 <92fd> <92ff> 20181 <9300> <9300> 20184 <9301> <9301> 9547 <9302> <9305> 20185 <9306> <9306> 9543 <9307> <9308> 9551 <9309> <930f> 20189 <9310> <9310> 8880 <9311> <9311> 20196 <9312> <9312> 9542 <9313> <9314> 20197 <9315> <9315> 9548 <9316> <9317> 20199 <9318> <9318> 7834 <9319> <9319> 9554 <931a> <931a> 9520 <931b> <931b> 9545 <931c> <931e> 20201 <931f> <931f> 9553 <9320> <9320> 7882 <9321> <9321> 20204 <9322> <9322> 8402 <9323> <9325> 20205 <9326> <9326> 8120 <9327> <9327> 20208 <9328> <9328> 8313 <9329> <932a> 20209 <932b> <932b> 8619 <932c> <932d> 20211 <932e> <932e> 9549 <932f> <932f> 7845 <9330> <9331> 20213 <9332> <9332> 8268 <9333> <9333> 8320 <9334> <9335> 20215 <9336> <9336> 9837 <9337> <9337> 20217 <9338> <9338> 9527 <9339> <933d> 20218 <933e> <933e> 7555 <933f> <933f> 20223 <9340> <9340> 9546 <9341> <9341> 8632 <9342> <9342> 20224 <9343> <9343> 9550 <9344> <9345> 20225 <9346> <9346> 9468 <9347> <9347> 9556 <9348> <934a> 20227 <934b> <934b> 7996 <934c> <934c> 20230 <934d> <934d> 7893 <934e> <9353> 20231 <9354> <9354> 9558 <9355> <9357> 20237 endcidrange 100 begincidrange <9358> <9358> 8808 <9359> <935a> 20240 <935b> <935b> 7894 <935c> <9363> 20242 <9364> <9364> 9559 <9365> <9365> 9555 <9366> <9368> 20250 <9369> <9369> 9544 <936a> <936a> 7556 <936b> <936b> 20253 <936c> <936c> 8412 <936d> <936f> 20254 <9370> <9370> 9561 <9371> <9374> 20257 <9375> <9375> 8087 <9376> <9376> 9557 <9377> <9379> 20261 <937a> <937a> 8829 <937b> <937d> 20264 <937e> <937e> 9598 <937f> <9381> 20267 <9382> <9382> 8316 <9383> <9383> 20270 <9384> <9384> 9562 <9385> <9386> 20271 <9387> <9387> 9566 <9388> <9389> 20273 <938a> <938a> 7732 <938b> <938e> 20275 <938f> <938f> 7558 <9390> <9395> 20279 <9396> <9396> 8542 <9397> <9397> 20285 <9398> <9398> 9568 <9399> <93a1> 20286 <93a2> <93a2> 8610 <93a3> <93a3> 9044 <93a4> <93a5> 20295 <93a6> <93a6> 9571 <93a7> <93a7> 9511 <93a8> <93a8> 20297 <93a9> <93a9> 9518 <93aa> <93aa> 9560 <93ab> <93ab> 20298 <93ac> <93ac> 7963 <93ad> <93ad> 20299 <93ae> <93ae> 8835 <93af> <93af> 20300 <93b0> <93b0> 9572 <93b1> <93b2> 20301 <93b3> <93b3> 8352 <93b4> <93b4> 20303 <93b5> <93b5> 9573 <93b6> <93b7> 20304 <93b8> <93b8> 9569 <93b9> <93be> 20306 <93bf> <93bf> 9570 <93c0> <93c2> 20312 <93c3> <93c3> 9580 <93c4> <93c6> 20315 <93c7> <93c7> 9581 <93c8> <93c8> 8224 <93c9> <93c9> 20318 <93ca> <93ca> 7557 <93cb> <93cb> 20319 <93cc> <93cc> 9567 <93cd> <93cd> 9578 <93ce> <93d0> 20320 <93d1> <93d1> 9582 <93d2> <93d5> 20323 <93d6> <93d6> 7681 <93d7> <93d7> 9529 <93d8> <93d8> 9564 <93d9> <93db> 20327 <93dc> <93dd> 9576 <93de> <93de> 9579 <93df> <93df> 7791 <93e0> <93e0> 20330 <93e1> <93e1> 8132 <93e2> <93e2> 9575 <93e3> <93e3> 20331 <93e4> <93e4> 9563 <93e5> <93e7> 20332 <93e8> <93e8> 9757 <93e9> <93f4> 20335 <93f5> <93f5> 9515 <93f6> <93f6> 20347 <93f7> <93f7> 9585 <93f8> <93f8> 20348 <93f9> <93f9> 9591 <93fa> <93ff> 20349 <9400> <9402> 20355 <9403> <9403> 9506 <9404> <940a> 20358 <940b> <940b> 9523 <940c> <940f> 20365 <9410> <9410> 8234 <9411> <9411> 20369 <9412> <9412> 9526 <9413> <9413> 9587 endcidrange 100 begincidrange <9414> <9414> 9583 <9415> <9417> 20370 <9418> <9418> 8851 <9419> <9419> 9592 <941a> <941c> 20373 <941d> <941d> 9584 <941e> <941f> 20376 <9420> <9420> 9589 <9421> <9425> 20378 <9426> <9427> 9537 <9428> <9428> 9565 <9429> <942d> 20383 <942e> <942e> 8218 <942f> <9431> 20388 <9432> <9432> 9594 <9433> <9433> 8198 <9434> <9434> 20391 <9435> <9435> 8567 <9436> <9437> 20392 <9438> <9438> 9499 <9439> <9439> 20394 <943a> <943a> 9508 <943b> <943d> 20395 <943e> <943e> 7559 <943f> <943f> 9595 <9440> <9443> 20398 <9444> <9444> 8867 <9445> <9449> 20402 <944a> <944a> 9593 <944b> <944b> 20407 <944c> <944c> 9574 <944d> <9451> 20408 <9452> <9452> 8083 <9453> <9453> 20413 <9454> <9454> 9596 <9455> <945f> 20414 <9460> <9460> 9492 <9461> <9462> 20425 <9463> <9463> 9597 <9464> <9464> 20427 <9465> <9465> 9586 <9466> <946a> 20428 <946b> <946b> 7560 <946c> <946c> 20433 <946d> <946d> 9588 <946e> <946f> 20434 <9470> <9470> 8782 <9471> <9471> 20436 <9472> <9472> 8646 <9473> <9476> 20437 <9477> <9477> 8351 <9478> <9478> 20441 <9479> <9479> 9590 <947a> <947b> 20442 <947c> <947c> 8292 <947d> <947d> 8895 <947e> <947e> 9756 <947f> <947f> 8798 <9480> <9484> 20444 <9485> <9487> 6798 <9488> <9488> 4492 <9489> <9489> 1507 <948a> <948a> 6802 <948b> <948b> 6801 <948c> <948d> 6803 <948e> <948e> 3106 <948f> <9490> 6805 <9491> <9491> 20449 <9492> <9492> 1613 <9493> <9493> 1495 <9494> <9494> 6807 <9495> <9495> 6809 <9496> <9496> 20450 <9497> <9497> 6808 <9498> <9498> 20451 <9499> <9499> 1729 <949a> <949c> 6810 <949d> <949d> 1562 <949e> <949e> 1235 <949f> <949f> 4562 <94a0> <94a0> 2857 <94a1> <94a1> 1054 <94a2> <94a2> 1745 <94a3> <94a4> 6813 <94a5> <94a5> 4354 <94a6> <94a6> 3154 <94a7> <94a7> 2346 <94a8> <94a8> 3816 <94a9> <94a9> 1804 <94aa> <94aa> 6816 <94ab> <94ab> 6815 <94ac> <94ac> 6818 <94ad> <94ad> 6817 <94ae> <94ae> 2918 <94af> <94b0> 6819 <94b1> <94b1> 3115 <94b2> <94b2> 6821 <94b3> <94b3> 3116 <94b4> <94b4> 6822 <94b5> <94b5> 1134 endcidrange 100 begincidrange <94b6> <94ba> 6823 <94bb> <94bb> 4679 <94bc> <94bd> 6828 <94be> <94be> 2123 <94bf> <94bf> 6830 <94c0> <94c0> 4272 <94c1> <94c1> 3661 <94c2> <94c2> 1139 <94c3> <94c3> 2606 <94c4> <94c4> 6831 <94c5> <94c5> 3107 <94c6> <94c6> 2738 <94c7> <94c7> 20452 <94c8> <94ce> 6832 <94cf> <94cf> 20453 <94d0> <94d2> 6839 <94d3> <94d4> 20454 <94d5> <94d7> 6842 <94d8> <94d8> 6846 <94d9> <94d9> 6845 <94da> <94da> 20456 <94db> <94db> 6847 <94dc> <94dc> 3678 <94dd> <94dd> 2664 <94de> <94e0> 6848 <94e1> <94e1> 4418 <94e2> <94e2> 6851 <94e3> <94e3> 3872 <94e4> <94e5> 6852 <94e6> <94e6> 20457 <94e7> <94e8> 6854 <94e9> <94e9> 6857 <94ea> <94ea> 6856 <94eb> <94eb> 6858 <94ec> <94ec> 1776 <94ed> <94ed> 2815 <94ee> <94ef> 6859 <94f0> <94f0> 2195 <94f1> <94f1> 4166 <94f2> <94f2> 1216 <94f3> <94f5> 6861 <94f6> <94f6> 4223 <94f7> <94f7> 6864 <94f8> <94f8> 4604 <94f9> <94f9> 6865 <94fa> <94fa> 3051 <94fb> <94fb> 20458 <94fc> <94fd> 6866 <94fe> <94fe> 2557 <94ff> <94ff> 6868 <9500> <9500> 3943 <9501> <9501> 3565 <9502> <9502> 6870 <9503> <9503> 6869 <9504> <9504> 1311 <9505> <9505> 1873 <9506> <9507> 6871 <9508> <9508> 4013 <9509> <950a> 6873 <950b> <950b> 1667 <950c> <950c> 3978 <950d> <950f> 6875 <9510> <9510> 3276 <9511> <9511> 3635 <9512> <9516> 6878 <9517> <9517> 4481 <9518> <9518> 6883 <9519> <9519> 1392 <951a> <951a> 2735 <951b> <951b> 6884 <951c> <951c> 20459 <951d> <951f> 6885 <9520> <9520> 20460 <9521> <9521> 3852 <9522> <9522> 6888 <9523> <9523> 2695 <9524> <9524> 1339 <9525> <9525> 4627 <9526> <9526> 2246 <9527> <9527> 20461 <9528> <9528> 3892 <9529> <9529> 6891 <952a> <952b> 6889 <952c> <952c> 6892 <952d> <952d> 1510 <952e> <952e> 2159 <952f> <952f> 2321 <9530> <9530> 2769 <9531> <9532> 6893 <9533> <9533> 20462 <9534> <9534> 6895 <9535> <9535> 6903 <9536> <9538> 6896 <9539> <9539> 3135 <953a> <953a> 6937 <953b> <953b> 1548 <953c> <953c> 6899 <953d> <953d> 20463 <953e> <953f> 6900 <9540> <9540> 1541 endcidrange 100 begincidrange <9541> <9541> 2755 <9542> <9542> 6902 <9543> <9543> 20464 <9544> <9546> 6904 <9547> <9547> 4499 <9548> <9548> 20465 <9549> <9549> 6907 <954a> <954a> 2906 <954b> <954b> 20466 <954c> <954c> 6908 <954d> <954d> 2907 <954e> <954f> 6909 <9550> <9550> 1759 <9551> <9551> 1026 <9552> <9554> 6911 <9555> <9555> 20467 <9556> <9559> 6914 <955a> <955a> 20468 <955b> <955b> 6918 <955c> <955c> 2276 <955d> <955d> 6921 <955e> <955f> 6919 <9560> <9560> 20469 <9561> <9562> 6922 <9563> <9563> 2582 <9564> <956c> 6924 <956d> <956d> 2499 <956e> <956e> 20470 <956f> <956f> 6933 <9570> <9570> 2550 <9571> <9573> 6934 <9574> <9575> 20471 <9576> <9576> 3919 <9577> <9577> 7797 <9578> <957e> 20473 <957f> <957f> 1225 <9580> <9580> 8317 <9581> <9581> 20480 <9582> <9582> 9151 <9583> <9583> 8467 <9584> <9585> 20481 <9586> <9586> 9152 <9587> <9588> 20483 <9589> <9589> 7749 <958a> <958a> 20485 <958b> <958b> 8152 <958c> <958c> 9156 <958d> <958d> 20486 <958e> <958e> 9154 <958f> <958f> 8452 <9590> <9590> 20487 <9591> <9591> 8637 <9592> <9592> 20488 <9593> <9593> 8071 <9594> <9594> 9155 <9595> <9597> 20489 <9598> <9598> 8809 <9599> <95a0> 20492 <95a1> <95a1> 8003 <95a2> <95a2> 20500 <95a3> <95a3> 7966 <95a4> <95a4> 9849 <95a5> <95a5> 7915 <95a6> <95a7> 20501 <95a8> <95a8> 7989 <95a9> <95a9> 8330 <95aa> <95aa> 20503 <95ab> <95ab> 9159 <95ac> <95ac> 9161 <95ad> <95ad> 9158 <95ae> <95b1> 20504 <95b2> <95b2> 8783 <95b3> <95b5> 20508 <95b6> <95b6> 9163 <95b7> <95b8> 20511 <95b9> <95b9> 8691 <95ba> <95ba> 20513 <95bb> <95bb> 8695 <95bc> <95bc> 9167 <95bd> <95bd> 9166 <95be> <95be> 9162 <95bf> <95bf> 9165 <95c0> <95c2> 20514 <95c3> <95c3> 9168 <95c4> <95c5> 20517 <95c6> <95c6> 9836 <95c7> <95c7> 20519 <95c8> <95c8> 9153 <95c9> <95c9> 20520 <95ca> <95ca> 8174 <95cb> <95cb> 9169 <95cc> <95cc> 8184 <95cd> <95cf> 20521 <95d0> <95d0> 9171 <95d1> <95d3> 20524 <95d4> <95d4> 9170 <95d5> <95d5> 9172 <95d6> <95d6> 7832 <95d7> <95db> 20527 <95dc> <95dc> 7980 endcidrange 100 begincidrange <95dd> <95dd> 20532 <95de> <95de> 9173 <95df> <95e0> 20533 <95e1> <95e1> 7793 <95e2> <95e2> 9873 <95e3> <95e4> 20535 <95e5> <95e5> 9157 <95e6> <95e7> 20537 <95e8> <95e8> 2762 <95e9> <95e9> 5765 <95ea> <95ea> 3322 <95eb> <95eb> 5766 <95ec> <95ec> 20539 <95ed> <95ed> 1086 <95ee> <95ee> 3801 <95ef> <95ef> 1334 <95f0> <95f0> 3277 <95f1> <95f1> 5767 <95f2> <95f2> 3901 <95f3> <95f3> 5768 <95f4> <95f4> 2135 <95f5> <95f6> 5769 <95f7> <95f7> 2763 <95f8> <95f8> 4419 <95f9> <95f9> 2873 <95fa> <95fa> 1860 <95fb> <95fb> 3796 <95fc> <95fc> 5771 <95fd> <95fd> 2811 <95fe> <95fe> 5772 <95ff> <95ff> 20540 <9600> <9600> 1604 <9601> <9601> 1774 <9602> <9602> 1929 <9603> <9604> 5773 <9605> <9605> 4359 <9606> <9606> 5775 <9607> <9607> 20541 <9608> <9608> 5776 <9609> <9609> 4084 <960a> <960d> 5777 <960e> <960e> 4095 <960f> <960f> 5781 <9610> <9610> 1218 <9611> <9611> 2470 <9612> <9612> 5782 <9613> <9613> 20542 <9614> <9614> 2454 <9615> <9617> 5783 <9618> <9618> 20543 <9619> <961a> 5786 <961b> <961b> 20544 <961c> <961c> 1714 <961d> <961d> 4948 <961e> <961e> 20545 <961f> <961f> 1554 <9620> <9620> 20546 <9621> <9621> 4950 <9622> <9622> 4949 <9623> <9629> 20547 <962a> <962a> 4952 <962b> <962d> 20554 <962e> <962e> 3273 <962f> <9630> 20557 <9631> <9631> 4951 <9632> <9632> 1629 <9633> <9633> 4125 <9634> <9634> 4220 <9635> <9635> 4500 <9636> <9636> 2216 <9637> <963a> 20559 <963b> <963b> 4677 <963c> <963c> 4954 <963d> <963d> 4953 <963e> <963e> 20563 <963f> <963f> 941 <9640> <9640> 3716 <9641> <9641> 20564 <9642> <9642> 4955 <9643> <9643> 20565 <9644> <9644> 1720 <9645> <9645> 2109 <9646> <9646> 2660 <9647> <9647> 2635 <9648> <9648> 1255 <9649> <9649> 4956 <964a> <964a> 20566 <964b> <964b> 2641 <964c> <964c> 2835 <964d> <964d> 2182 <964e> <964f> 20567 <9650> <9650> 3915 <9651> <9653> 20569 <9654> <9654> 4957 <9655> <9655> 3323 <9656> <9657> 20572 <9658> <9658> 8986 <9659> <965a> 20574 <965b> <965b> 1094 <965c> <965c> 20576 endcidrange 100 begincidrange <965d> <965d> 8468 <965e> <965e> 20577 <965f> <965f> 4958 <9660> <9660> 20578 <9661> <9661> 1527 <9662> <9662> 4349 <9663> <9663> 8836 <9664> <9664> 1314 <9665> <9666> 20579 <9667> <9667> 4959 <9668> <9668> 4364 <9669> <9669> 3906 <966a> <966a> 2980 <966b> <966b> 20581 <966c> <966c> 4960 <966d> <966f> 20582 <9670> <9670> 8732 <9671> <9671> 20585 <9672> <9672> 4961 <9673> <9673> 7806 <9674> <9674> 4962 <9675> <9675> 2611 <9676> <9676> 3624 <9677> <9677> 3914 <9678> <9678> 8269 <9679> <967c> 20586 <967d> <967d> 8705 <967e> <9684> 20590 <9685> <9685> 4300 <9686> <9686> 2632 <9687> <9687> 20597 <9688> <9688> 4963 <9689> <9689> 20598 <968a> <968a> 7897 <968b> <968b> 3546 <968c> <968c> 20599 <968d> <968d> 4964 <968e> <968e> 8114 <968f> <968f> 3547 <9690> <9690> 4229 <9691> <9693> 20600 <9694> <9694> 1775 <9695> <9695> 8786 <9696> <9696> 20603 <9697> <9697> 4965 <9698> <9698> 954 <9699> <9699> 3875 <969a> <969a> 20604 <969b> <969b> 8057 <969c> <969c> 4464 <969d> <96a6> 20605 <96a7> <96a7> 3554 <96a8> <96a8> 8535 <96a9> <96a9> 20615 <96aa> <96aa> 8639 <96ab> <96af> 20616 <96b0> <96b0> 4966 <96b1> <96b1> 8735 <96b2> <96b2> 20621 <96b3> <96b3> 5764 <96b4> <96b4> 8253 <96b5> <96b5> 20622 <96b6> <96b6> 2542 <96b7> <96b7> 20623 <96b8> <96b8> 8213 <96b9> <96b9> 7545 <96ba> <96ba> 20624 <96bb> <96bb> 9893 <96bc> <96bd> 7546 <96be> <96be> 2868 <96bf> <96bf> 20625 <96c0> <96c0> 3219 <96c1> <96c1> 4108 <96c2> <96c3> 20626 <96c4> <96c4> 4006 <96c5> <96c5> 4078 <96c6> <96c6> 2082 <96c7> <96c7> 1830 <96c8> <96c8> 20628 <96c9> <96c9> 6940 <96ca> <96cb> 20629 <96cc> <96cc> 1353 <96cd> <96cd> 4255 <96ce> <96ce> 7548 <96cf> <96cf> 1312 <96d0> <96d1> 20631 <96d2> <96d2> 7549 <96d3> <96d4> 20633 <96d5> <96d5> 1490 <96d6> <96d6> 8534 <96d7> <96d8> 20635 <96d9> <96d9> 8516 <96da> <96da> 20637 <96db> <96db> 7825 <96dc> <96dc> 8791 <96dd> <96df> 20638 <96e0> <96e0> 7551 <96e1> <96e1> 20641 <96e2> <96e2> 8202 <96e3> <96e3> 8338 endcidrange 100 begincidrange <96e4> <96e7> 20642 <96e8> <96e8> 4303 <96e9> <96e9> 7521 <96ea> <96ea> 4050 <96eb> <96ee> 20646 <96ef> <96ef> 7523 <96f0> <96f1> 20650 <96f2> <96f2> 8784 <96f3> <96f3> 7522 <96f4> <96f5> 20652 <96f6> <96f6> 2604 <96f7> <96f7> 2498 <96f8> <96f8> 20654 <96f9> <96f9> 1035 <96fa> <96fa> 20655 <96fb> <96fb> 7875 <96fc> <96fd> 20656 <96fe> <96fe> 3836 <96ff> <96ff> 20658 <9700> <9700> 4019 <9701> <9701> 7525 <9702> <9703> 20659 <9704> <9704> 3939 <9705> <9705> 20661 <9706> <9706> 7524 <9707> <9707> 4497 <9708> <9708> 7526 <9709> <9709> 2750 <970a> <970c> 20662 <970d> <970d> 2057 <970e> <970e> 7528 <970f> <970f> 7527 <9710> <9712> 20665 <9713> <9713> 2881 <9714> <9715> 20668 <9716> <9716> 2593 <9717> <971b> 20670 <971c> <971c> 3487 <971d> <971d> 20675 <971e> <971e> 3881 <971f> <9726> 20676 <9727> <9727> 8616 <9728> <9729> 20684 <972a> <972a> 7529 <972b> <972c> 20686 <972d> <972d> 7530 <972e> <972f> 20688 <9730> <9730> 7531 <9731> <9731> 20690 <9732> <9732> 2653 <9733> <9737> 20691 <9738> <9738> 991 <9739> <9739> 3002 <973a> <973c> 20696 <973d> <973d> 9741 <973e> <973e> 7532 <973f> <9741> 20699 <9742> <9742> 9740 <9743> <9743> 20702 <9744> <9744> 9742 <9745> <9747> 20703 <9748> <9748> 8242 <9749> <9751> 20706 <9752> <9752> 3165 <9753> <9753> 7520 <9754> <9755> 20715 <9756> <9756> 2279 <9757> <9758> 20717 <9759> <9759> 2273 <975a> <975a> 9739 <975b> <975b> 1478 <975c> <975d> 20719 <975e> <975e> 1636 <975f> <975f> 20721 <9760> <9760> 2380 <9761> <9761> 2775 <9762> <9762> 2795 <9763> <9764> 20722 <9765> <9765> 4738 <9766> <9767> 20724 <9768> <9768> 8899 <9769> <9769> 1770 <976a> <9772> 20726 <9773> <9773> 2250 <9774> <9774> 4046 <9775> <9775> 20735 <9776> <9776> 987 <9777> <977b> 20736 <977c> <977c> 7624 <977d> <9784> 20741 <9785> <9785> 7625 <9786> <978a> 20749 <978b> <978b> 3959 <978c> <978c> 20754 <978d> <978d> 955 <978e> <978e> 20755 <978f> <978f> 7971 <9790> <9790> 20756 <9791> <9792> 7626 <9793> <9793> 20757 endcidrange 100 begincidrange <9794> <9794> 7628 <9795> <9797> 20758 <9798> <9798> 3143 <9799> <979f> 20761 <97a0> <97a0> 2302 <97a1> <97a2> 20768 <97a3> <97a3> 7631 <97a4> <97a5> 20770 <97a6> <97a6> 9877 <97a7> <97aa> 20772 <97ab> <97ab> 7630 <97ac> <97ac> 20776 <97ad> <97ad> 1095 <97ae> <97ae> 20777 <97af> <97af> 7629 <97b0> <97b1> 20778 <97b2> <97b2> 7632 <97b3> <97b3> 20780 <97b4> <97b4> 7633 <97b5> <97bc> 20781 <97bd> <97bd> 9822 <97be> <97c2> 20789 <97c3> <97c3> 9821 <97c4> <97c5> 20794 <97c6> <97c6> 9874 <97c7> <97c8> 20796 <97c9> <97c9> 9823 <97ca> <97ca> 20798 <97cb> <97cb> 8589 <97cc> <97cc> 8445 <97cd> <97d2> 20799 <97d3> <97d3> 8000 <97d4> <97d8> 20805 <97d9> <97d9> 9317 <97da> <97db> 20810 <97dc> <97dc> 9319 <97dd> <97dd> 20812 <97de> <97de> 9318 <97df> <97e5> 20813 <97e6> <97e6> 3763 <97e7> <97e7> 3240 <97e8> <97e8> 20820 <97e9> <97e9> 1890 <97ea> <97ec> 6222 <97ed> <97ed> 2289 <97ee> <97f2> 20821 <97f3> <97f3> 4219 <97f4> <97f4> 20826 <97f5> <97f5> 4370 <97f6> <97f6> 3345 <97f7> <97fe> 20827 <97ff> <97ff> 8649 <9800> <9800> 20835 <9801> <9801> 8713 <9802> <9802> 7881 <9803> <9803> 8425 <9804> <9804> 20836 <9805> <9805> 8650 <9806> <9806> 8518 <9807> <9807> 9669 <9808> <9808> 8668 <9809> <9809> 20837 <980a> <980a> 9310 <980b> <980b> 20838 <980c> <980c> 8527 <980d> <980d> 20839 <980e> <980f> 9670 <9810> <9810> 8769 <9811> <9811> 8586 <9812> <9812> 7727 <9813> <9813> 7900 <9814> <9816> 20840 <9817> <9817> 8383 <9818> <9818> 8244 <9819> <981b> 20843 <981c> <981c> 9673 <981d> <9820> 20846 <9821> <9821> 9672 <9822> <9823> 20850 <9824> <9824> 8718 <9825> <9825> 20852 <9826> <9826> 9675 <9827> <982c> 20853 <982d> <982d> 8573 <982e> <982f> 20859 <9830> <9830> 8062 <9831> <9836> 20861 <9837> <9837> 9676 <9838> <9838> 8131 <9839> <983a> 20867 <983b> <983b> 8377 <983c> <983c> 20869 <983d> <983d> 8577 <983e> <9845> 20870 <9846> <9846> 8154 <9847> <984b> 20878 <984c> <984c> 8563 <984d> <984d> 7905 <984e> <984e> 9677 <984f> <9852> 20883 endcidrange 100 begincidrange <9853> <9853> 9678 <9854> <9854> 8694 <9855> <9857> 20887 <9858> <9858> 8779 <9859> <9859> 9681 <985a> <985a> 20890 <985b> <985b> 7872 <985c> <985d> 20891 <985e> <985e> 8200 <985f> <9861> 20893 <9862> <9862> 9680 <9863> <9864> 20896 <9865> <9865> 9682 <9866> <9866> 20898 <9867> <9867> 7978 <9868> <986a> 20899 <986b> <986b> 7794 <986c> <986c> 9683 <986d> <986e> 20902 <986f> <986f> 8638 <9870> <9870> 9684 <9871> <9871> 8260 <9872> <9872> 20904 <9873> <9873> 9679 <9874> <9874> 8435 <9875> <9875> 4154 <9876> <9876> 1508 <9877> <9877> 3175 <9878> <9878> 7136 <9879> <9879> 3931 <987a> <987a> 3496 <987b> <987b> 4022 <987c> <987c> 6183 <987d> <987d> 3736 <987e> <987e> 1828 <987f> <987f> 1560 <9880> <9880> 7137 <9881> <9881> 1007 <9882> <9882> 3521 <9883> <9883> 7138 <9884> <9884> 4327 <9885> <9885> 2644 <9886> <9886> 2613 <9887> <9887> 3043 <9888> <9888> 2272 <9889> <9889> 7139 <988a> <988a> 2120 <988b> <988b> 20905 <988c> <988d> 7140 <988e> <988e> 20906 <988f> <988f> 7142 <9890> <9890> 4170 <9891> <9891> 3028 <9892> <9892> 20907 <9893> <9893> 3704 <9894> <9894> 7143 <9895> <9895> 20908 <9896> <9896> 4246 <9897> <9897> 2386 <9898> <9898> 3637 <9899> <9899> 20909 <989a> <989b> 7144 <989c> <989c> 4094 <989d> <989d> 1581 <989e> <989f> 7146 <98a0> <98a0> 1472 <98a1> <98a2> 7148 <98a3> <98a3> 20910 <98a4> <98a4> 1219 <98a5> <98a6> 7150 <98a7> <98a7> 3202 <98a8> <98a8> 7936 <98a9> <98ad> 20911 <98ae> <98af> 9420 <98b0> <98b0> 20916 <98b1> <98b1> 9880 <98b2> <98b2> 20917 <98b3> <98b3> 9848 <98b4> <98b5> 20918 <98b6> <98b6> 9422 <98b7> <98bb> 20920 <98bc> <98bc> 9423 <98bd> <98c3> 20925 <98c4> <98c4> 8376 <98c5> <98c5> 20932 <98c6> <98c6> 9424 <98c7> <98c7> 20933 <98c8> <98c8> 9425 <98c9> <98cd> 20934 <98ce> <98ce> 1668 <98cf> <98d0> 20939 <98d1> <98d3> 6583 <98d4> <98d4> 20941 <98d5> <98d5> 6586 <98d6> <98d7> 20942 <98d8> <98d8> 3021 <98d9> <98da> 6587 <98db> <98db> 7924 <98dc> <98dd> 20944 <98de> <98de> 1638 endcidrange 100 begincidrange <98df> <98df> 3402 <98e0> <98e0> 9115 <98e1> <98e1> 20946 <98e2> <98e2> 9854 <98e3> <98e6> 20947 <98e7> <98e7> 5658 <98e8> <98e8> 7655 <98e9> <98e9> 9117 <98ea> <98eb> 9119 <98ec> <98ec> 20951 <98ed> <98ed> 9121 <98ee> <98ee> 20952 <98ef> <98ef> 7921 <98f0> <98f1> 20953 <98f2> <98f2> 8734 <98f3> <98f3> 20955 <98f4> <98f4> 9122 <98f5> <98fb> 20956 <98fc> <98fc> 8523 <98fd> <98fd> 7734 <98fe> <98fe> 8501 <98ff> <98ff> 20963 <9900> <9902> 20964 <9903> <9903> 8109 <9904> <9904> 20967 <9905> <9905> 7763 <9906> <9908> 20968 <9909> <9909> 9123 <990a> <990a> 8707 <990b> <990b> 20971 <990c> <990c> 7911 <990d> <990d> 7656 <990e> <990f> 20972 <9910> <9910> 1172 <9911> <9911> 9124 <9912> <9912> 8343 <9913> <9913> 7908 <9914> <9917> 20974 <9918> <9918> 8760 <9919> <991a> 20978 <991b> <991b> 9125 <991c> <991d> 20980 <991e> <991e> 8090 <991f> <9920> 20982 <9921> <9921> 8643 <9922> <9927> 20984 <9928> <9928> 7982 <9929> <992d> 20990 <992e> <992e> 7657 <992f> <9932> 20995 <9933> <9933> 9116 <9934> <9936> 20999 <9937> <9937> 9126 <9938> <993b> 21002 <993c> <993c> 9118 <993d> <993d> 21006 <993e> <993e> 8245 <993f> <993f> 9127 <9940> <9942> 21007 <9943> <9943> 9128 <9944> <9944> 21010 <9945> <9945> 8309 <9946> <9947> 21011 <9948> <994a> 9129 <994b> <994b> 8171 <994c> <994c> 9132 <994d> <9950> 21013 <9951> <9951> 8042 <9952> <9952> 8441 <9953> <9953> 21017 <9954> <9954> 7659 <9955> <9955> 7658 <9956> <9956> 21018 <9957> <9957> 9830 <9958> <995b> 21019 <995c> <995c> 9831 <995d> <995d> 21023 <995e> <995e> 7788 <995f> <9961> 21024 <9962> <9962> 9133 <9963> <9963> 5661 <9964> <9964> 21027 <9965> <9965> 2069 <9966> <9966> 21028 <9967> <996c> 5662 <996d> <996d> 1622 <996e> <996e> 4226 <996f> <996f> 2165 <9970> <9970> 3429 <9971> <9971> 1038 <9972> <9972> 3516 <9973> <9973> 21029 <9974> <9974> 5668 <9975> <9975> 1595 <9976> <9976> 3231 <9977> <9977> 5669 <9978> <9979> 21030 <997a> <997a> 2201 <997b> <997b> 21032 <997c> <997c> 1126 endcidrange 100 begincidrange <997d> <997d> 5670 <997e> <997e> 21033 <997f> <997f> 1589 <9980> <9980> 5671 <9981> <9981> 2876 <9982> <9983> 21034 <9984> <9984> 5672 <9985> <9985> 3911 <9986> <9986> 1846 <9987> <9987> 5673 <9988> <9988> 2444 <9989> <9989> 21036 <998a> <998a> 5674 <998b> <998b> 1213 <998c> <998c> 21037 <998d> <998d> 5675 <998e> <998e> 21038 <998f> <998f> 2620 <9990> <9991> 5676 <9992> <9992> 2719 <9993> <9995> 5678 <9996> <9996> 3438 <9997> <9997> 4718 <9998> <9998> 4857 <9999> <9999> 3920 <999a> <99a4> 21039 <99a5> <99a5> 6955 <99a6> <99a7> 21050 <99a8> <99a8> 5086 <99a9> <99ab> 21052 <99ac> <99ac> 8301 <99ad> <99ad> 8770 <99ae> <99ae> 7938 <99af> <99b0> 21055 <99b1> <99b1> 8579 <99b2> <99b2> 21057 <99b3> <99b3> 7813 <99b4> <99b4> 8681 <99b5> <99c0> 21058 <99c1> <99c1> 7767 <99c2> <99cf> 21070 <99d0> <99d0> 8869 <99d1> <99d1> 9223 <99d2> <99d2> 8138 <99d3> <99d3> 21084 <99d4> <99d4> 9218 <99d5> <99d5> 8066 <99d6> <99d7> 21085 <99d8> <99d8> 9224 <99d9> <99d9> 9220 <99da> <99da> 21087 <99db> <99db> 8497 <99dc> <99dc> 21088 <99dd> <99dd> 8580 <99de> <99de> 21089 <99df> <99df> 9219 <99e0> <99e0> 21090 <99e1> <99e1> 8302 <99e2> <99e2> 9227 <99e3> <99ec> 21091 <99ed> <99ed> 7999 <99ee> <99f0> 21101 <99f1> <99f1> 8295 <99f2> <99fe> 21104 <99ff> <99ff> 8151 <9a00> <9a00> 21117 <9a01> <9a01> 7811 <9a02> <9a04> 21118 <9a05> <9a05> 9231 <9a06> <9a0c> 21121 <9a0d> <9a0d> 9230 <9a0e> <9a0e> 8391 <9a0f> <9a0f> 9229 <9a10> <9a15> 21128 <9a16> <9a16> 9234 <9a17> <9a18> 21134 <9a19> <9a19> 8375 <9a1a> <9a2a> 21136 <9a2b> <9a2b> 9200 <9a2c> <9a2c> 21153 <9a2d> <9a2d> 9233 <9a2e> <9a2e> 9236 <9a2f> <9a2f> 21154 <9a30> <9a30> 8560 <9a31> <9a35> 21155 <9a36> <9a36> 9221 <9a37> <9a37> 8460 <9a38> <9a38> 9237 <9a39> <9a3d> 21160 <9a3e> <9a3e> 8294 <9a3f> <9a3f> 21165 <9a40> <9a40> 9042 <9a41> <9a41> 9235 <9a42> <9a42> 9232 <9a43> <9a44> 9238 <9a45> <9a45> 8433 <9a46> <9a49> 21166 <9a4a> <9a4a> 9226 <9a4b> <9a4c> 21170 <9a4d> <9a4d> 9225 endcidrange 100 begincidrange <9a4e> <9a4e> 21172 <9a4f> <9a4f> 9240 <9a50> <9a54> 21173 <9a55> <9a55> 8103 <9a56> <9a56> 21178 <9a57> <9a57> 8700 <9a58> <9a59> 21179 <9a5a> <9a5a> 8129 <9a5b> <9a5b> 9222 <9a5c> <9a5e> 21181 <9a5f> <9a5f> 8860 <9a60> <9a61> 21184 <9a62> <9a62> 8270 <9a63> <9a63> 21186 <9a64> <9a64> 9242 <9a65> <9a65> 9241 <9a66> <9a69> 21187 <9a6a> <9a6a> 9228 <9a6b> <9a6b> 21191 <9a6c> <9a6c> 2708 <9a6d> <9a6d> 4329 <9a6e> <9a6e> 3717 <9a6f> <9a6f> 4058 <9a70> <9a70> 1280 <9a71> <9a71> 3194 <9a72> <9a72> 21192 <9a73> <9a73> 1148 <9a74> <9a74> 2662 <9a75> <9a75> 6074 <9a76> <9a76> 3410 <9a77> <9a78> 6075 <9a79> <9a79> 2307 <9a7a> <9a7a> 6077 <9a7b> <9a7b> 4609 <9a7c> <9a7c> 3718 <9a7d> <9a7d> 6079 <9a7e> <9a7e> 2128 <9a7f> <9a7f> 6078 <9a80> <9a81> 6080 <9a82> <9a82> 2709 <9a83> <9a83> 21193 <9a84> <9a84> 2191 <9a85> <9a85> 6082 <9a86> <9a86> 2701 <9a87> <9a87> 1886 <9a88> <9a88> 6083 <9a89> <9a89> 21194 <9a8a> <9a8a> 6084 <9a8b> <9a8b> 1271 <9a8c> <9a8c> 4114 <9a8d> <9a8e> 21195 <9a8f> <9a8f> 2354 <9a90> <9a90> 6085 <9a91> <9a91> 3086 <9a92> <9a93> 6086 <9a94> <9a95> 21197 <9a96> <9a96> 6088 <9a97> <9a97> 3020 <9a98> <9a98> 6089 <9a99> <9a99> 21199 <9a9a> <9a9a> 3296 <9a9b> <9a9d> 6090 <9a9e> <9a9e> 5941 <9a9f> <9aa0> 6093 <9aa1> <9aa1> 2697 <9aa2> <9aa3> 6095 <9aa4> <9aa4> 4583 <9aa5> <9aa5> 6097 <9aa6> <9aa6> 21200 <9aa7> <9aa7> 6098 <9aa8> <9aa8> 1824 <9aa9> <9aae> 21201 <9aaf> <9aaf> 7721 <9ab0> <9ab0> 7635 <9ab1> <9ab1> 7634 <9ab2> <9ab5> 21207 <9ab6> <9ab6> 7638 <9ab7> <9ab7> 7636 <9ab8> <9ab8> 1880 <9ab9> <9ab9> 21211 <9aba> <9aba> 7639 <9abb> <9abb> 21212 <9abc> <9abc> 7640 <9abd> <9abf> 21213 <9ac0> <9ac0> 7642 <9ac1> <9ac1> 7641 <9ac2> <9ac2> 7644 <9ac3> <9ac4> 21216 <9ac5> <9ac5> 7643 <9ac6> <9aca> 21218 <9acb> <9acc> 7645 <9acd> <9ace> 21223 <9acf> <9acf> 9825 <9ad0> <9ad0> 21225 <9ad1> <9ad1> 7647 <9ad2> <9ad2> 9892 <9ad3> <9ad3> 3549 <9ad4> <9ad4> 8564 <9ad5> <9ad5> 9827 <9ad6> <9ad6> 9826 endcidrange 100 begincidrange <9ad7> <9ad7> 21226 <9ad8> <9ad8> 1754 <9ad9> <9ade> 21227 <9adf> <9adf> 7660 <9ae0> <9ae0> 21233 <9ae1> <9ae1> 7661 <9ae2> <9ae5> 21234 <9ae6> <9ae6> 7662 <9ae7> <9aea> 21238 <9aeb> <9aeb> 7664 <9aec> <9aec> 21242 <9aed> <9aed> 7666 <9aee> <9aee> 9845 <9aef> <9aef> 7663 <9af0> <9af8> 21243 <9af9> <9af9> 7667 <9afa> <9afa> 21252 <9afb> <9afb> 7665 <9afc> <9aff> 21253 <9b00> <9b02> 21257 <9b03> <9b03> 4660 <9b04> <9b05> 21260 <9b06> <9b06> 8524 <9b07> <9b07> 21262 <9b08> <9b08> 7668 <9b09> <9b0c> 21263 <9b0d> <9b0d> 9850 <9b0e> <9b0e> 21267 <9b0f> <9b0f> 7669 <9b10> <9b12> 21268 <9b13> <9b13> 7670 <9b14> <9b19> 21271 <9b1a> <9b1a> 9888 <9b1b> <9b1e> 21277 <9b1f> <9b1f> 7671 <9b20> <9b21> 21281 <9b22> <9b22> 9832 <9b23> <9b23> 7672 <9b24> <9b24> 21283 <9b25> <9b25> 7888 <9b26> <9b26> 21284 <9b27> <9b27> 8342 <9b28> <9b28> 21285 <9b29> <9b29> 9164 <9b2a> <9b2d> 21286 <9b2e> <9b2e> 9160 <9b2f> <9b2f> 5019 <9b30> <9b30> 21290 <9b31> <9b31> 8766 <9b32> <9b32> 4704 <9b33> <9b3a> 21291 <9b3b> <9b3b> 6003 <9b3c> <9b3c> 1862 <9b3d> <9b40> 21299 <9b41> <9b41> 2442 <9b42> <9b42> 2047 <9b43> <9b43> 7649 <9b44> <9b44> 3046 <9b45> <9b45> 7648 <9b46> <9b46> 21303 <9b47> <9b47> 7650 <9b48> <9b48> 7652 <9b49> <9b49> 7651 <9b4a> <9b4c> 21304 <9b4d> <9b4d> 7653 <9b4e> <9b4e> 9829 <9b4f> <9b4f> 3785 <9b50> <9b50> 21307 <9b51> <9b51> 7654 <9b52> <9b53> 21308 <9b54> <9b54> 2826 <9b55> <9b57> 21310 <9b58> <9b58> 9828 <9b59> <9b59> 21313 <9b5a> <9b5a> 8761 <9b5b> <9b6e> 21314 <9b6f> <9b6f> 8266 <9b70> <9b73> 21334 <9b74> <9b74> 9759 <9b75> <9b76> 21338 <9b77> <9b77> 9758 <9b78> <9b80> 21340 <9b81> <9b81> 9760 <9b82> <9b82> 21349 <9b83> <9b83> 9761 <9b84> <9b8d> 21350 <9b8e> <9b8e> 9762 <9b8f> <9b8f> 21360 <9b90> <9b90> 9767 <9b91> <9b91> 7737 <9b92> <9b92> 9765 <9b93> <9b99> 21361 <9b9a> <9b9a> 9769 <9b9b> <9b9c> 21368 <9b9d> <9b9d> 9774 <9b9e> <9b9e> 9771 <9b9f> <9ba9> 21370 <9baa> <9baa> 9770 <9bab> <9bab> 9773 <9bac> <9bac> 21381 endcidrange 100 begincidrange <9bad> <9bad> 9768 <9bae> <9bae> 8633 <9baf> <9bbf> 21382 <9bc0> <9bc0> 9782 <9bc1> <9bc1> 9776 <9bc2> <9bc6> 21399 <9bc7> <9bc7> 9784 <9bc8> <9bc8> 21404 <9bc9> <9bc9> 8205 <9bca> <9bca> 9783 <9bcb> <9bd3> 21405 <9bd4> <9bd4> 9797 <9bd5> <9bd5> 21414 <9bd6> <9bd6> 9786 <9bd7> <9bda> 21415 <9bdb> <9bdb> 9795 <9bdc> <9bdc> 21419 <9bdd> <9bdd> 9792 <9bde> <9be0> 21420 <9be1> <9be1> 9789 <9be2> <9be2> 9793 <9be3> <9be3> 21423 <9be4> <9be4> 9790 <9be5> <9be6> 21424 <9be7> <9be7> 9791 <9be8> <9be8> 8128 <9be9> <9be9> 21426 <9bea> <9beb> 9787 <9bec> <9bef> 21427 <9bf0> <9bf0> 9794 <9bf1> <9bf3> 21431 <9bf4> <9bf4> 9796 <9bf5> <9bfc> 21434 <9bfd> <9bfd> 9785 <9bfe> <9bfe> 21442 <9bff> <9bff> 9804 <9c00> <9c07> 21443 <9c08> <9c08> 9799 <9c09> <9c09> 9803 <9c0a> <9c0c> 21451 <9c0d> <9c0d> 9801 <9c0e> <9c0f> 21454 <9c10> <9c10> 9800 <9c11> <9c11> 21456 <9c12> <9c12> 9802 <9c13> <9c13> 8456 <9c14> <9c1f> 21457 <9c20> <9c20> 9805 <9c21> <9c22> 21469 <9c23> <9c23> 9780 <9c24> <9c24> 21471 <9c25> <9c25> 9809 <9c26> <9c27> 21472 <9c28> <9c28> 9808 <9c29> <9c29> 9810 <9c2a> <9c2c> 21474 <9c2d> <9c2d> 9807 <9c2e> <9c30> 21477 <9c31> <9c31> 9778 <9c32> <9c32> 9806 <9c33> <9c33> 9811 <9c34> <9c34> 21480 <9c35> <9c35> 9815 <9c36> <9c36> 21481 <9c37> <9c37> 9781 <9c38> <9c38> 21482 <9c39> <9c39> 9779 <9c3a> <9c3a> 21483 <9c3b> <9c3b> 9814 <9c3c> <9c3d> 21484 <9c3e> <9c3e> 9812 <9c3f> <9c44> 21486 <9c45> <9c45> 9816 <9c46> <9c47> 21492 <9c48> <9c48> 9813 <9c49> <9c49> 7757 <9c4a> <9c51> 21494 <9c52> <9c52> 9819 <9c53> <9c53> 21502 <9c54> <9c54> 9818 <9c55> <9c55> 21503 <9c56> <9c56> 9817 <9c57> <9c57> 8238 <9c58> <9c58> 9775 <9c59> <9c5c> 21504 <9c5d> <9c5d> 9798 <9c5e> <9c5e> 21508 <9c5f> <9c5f> 9766 <9c60> <9c66> 21509 <9c67> <9c67> 9820 <9c68> <9c6c> 21516 <9c6d> <9c6d> 9772 <9c6e> <9c77> 21521 <9c78> <9c78> 9763 <9c79> <9c79> 21531 <9c7a> <9c7a> 9777 <9c7b> <9c7b> 21532 <9c7c> <9c7c> 4296 <9c7d> <9c7e> 21533 <9c7f> <9c7f> 7561 endcidrange 100 begincidrange <9c80> <9c80> 21535 <9c81> <9c81> 2650 <9c82> <9c82> 7562 <9c83> <9c84> 21536 <9c85> <9c88> 7563 <9c89> <9c8a> 21538 <9c8b> <9c8b> 7568 <9c8c> <9c8c> 21540 <9c8d> <9c8d> 1044 <9c8e> <9c8e> 7569 <9c8f> <9c8f> 21541 <9c90> <9c92> 7570 <9c93> <9c93> 21542 <9c94> <9c95> 7573 <9c96> <9c99> 21543 <9c9a> <9c9b> 7575 <9c9c> <9c9c> 3895 <9c9d> <9c9d> 21547 <9c9e> <9ca3> 7577 <9ca4> <9ca4> 2523 <9ca5> <9ca9> 7583 <9caa> <9caa> 21548 <9cab> <9cab> 7588 <9cac> <9cac> 21549 <9cad> <9cae> 7589 <9caf> <9caf> 21550 <9cb0> <9cb7> 7591 <9cb8> <9cb8> 2263 <9cb9> <9cb9> 21551 <9cba> <9cbd> 7599 <9cbe> <9cc2> 21552 <9cc3> <9cc3> 3285 <9cc4> <9cc7> 7603 <9cc8> <9cc9> 21557 <9cca> <9cd0> 7607 <9cd1> <9cd2> 21559 <9cd3> <9cd5> 7614 <9cd6> <9cd6> 1111 <9cd7> <9cd9> 7617 <9cda> <9cdb> 21561 <9cdc> <9cdd> 7620 <9cde> <9cde> 2596 <9cdf> <9cdf> 7622 <9ce0> <9ce1> 21563 <9ce2> <9ce2> 7623 <9ce3> <9ce4> 21565 <9ce5> <9ce5> 8348 <9ce6> <9ce8> 21567 <9ce9> <9ce9> 9600 <9cea> <9ceb> 21570 <9cec> <9cec> 8924 <9ced> <9cf2> 21572 <9cf3> <9cf3> 7941 <9cf4> <9cf4> 8331 <9cf5> <9cf5> 21578 <9cf6> <9cf6> 9601 <9cf7> <9cff> 21579 <9d00> <9d05> 21588 <9d06> <9d06> 9603 <9d07> <9d07> 9602 <9d08> <9d08> 21594 <9d09> <9d09> 8686 <9d0a> <9d14> 21595 <9d15> <9d15> 8578 <9d16> <9d1a> 21606 <9d1b> <9d1b> 8771 <9d1c> <9d1c> 21611 <9d1d> <9d1d> 9607 <9d1e> <9d1e> 21612 <9d1f> <9d1f> 9608 <9d20> <9d22> 21613 <9d23> <9d23> 9604 <9d24> <9d25> 21616 <9d26> <9d26> 8701 <9d27> <9d27> 21618 <9d28> <9d28> 8687 <9d29> <9d2e> 21619 <9d2f> <9d2f> 9610 <9d30> <9d30> 9612 <9d31> <9d3a> 21625 <9d3b> <9d3b> 8007 <9d3c> <9d3e> 21635 <9d3f> <9d3f> 7965 <9d40> <9d41> 21638 <9d42> <9d42> 9613 <9d43> <9d50> 21640 <9d51> <9d51> 8144 <9d52> <9d52> 9618 <9d53> <9d53> 9615 <9d54> <9d5b> 21654 <9d5c> <9d5c> 9620 <9d5d> <9d5d> 7904 <9d5e> <9d5f> 21662 <9d60> <9d60> 9617 <9d61> <9d61> 9621 <9d62> <9d69> 21664 <9d6a> <9d6a> 9623 <9d6b> <9d6b> 21672 <9d6c> <9d6c> 8374 <9d6d> <9d6e> 21673 endcidrange 100 begincidrange <9d6f> <9d6f> 9624 <9d70> <9d71> 21675 <9d72> <9d72> 8438 <9d73> <9d86> 21677 <9d87> <9d87> 9605 <9d88> <9d88> 21697 <9d89> <9d89> 9625 <9d8a> <9d92> 21698 <9d93> <9d93> 9622 <9d94> <9d97> 21707 <9d98> <9d98> 9626 <9d99> <9d99> 21711 <9d9a> <9d9a> 9627 <9d9b> <9da4> 21712 <9da5> <9da5> 9629 <9da6> <9da8> 21722 <9da9> <9da9> 9630 <9daa> <9dae> 21725 <9daf> <9daf> 9036 <9db0> <9db3> 21730 <9db4> <9db4> 8004 <9db5> <9dba> 21734 <9dbb> <9dbb> 9824 <9dbc> <9dbc> 9632 <9dbd> <9dbf> 21740 <9dc0> <9dc0> 9628 <9dc1> <9dc1> 21743 <9dc2> <9dc2> 9631 <9dc3> <9dc3> 21744 <9dc4> <9dc4> 8044 <9dc5> <9dd2> 21745 <9dd3> <9dd3> 9634 <9dd4> <9dd6> 21759 <9dd7> <9dd7> 8366 <9dd8> <9dd8> 21762 <9dd9> <9dd9> 9611 <9dda> <9dda> 9635 <9ddb> <9de4> 21763 <9de5> <9de5> 9609 <9de6> <9de6> 9637 <9de7> <9dee> 21773 <9def> <9def> 9636 <9df0> <9df1> 21781 <9df2> <9df2> 9638 <9df3> <9df3> 9619 <9df4> <9df7> 21783 <9df8> <9df8> 9639 <9df9> <9df9> 8738 <9dfa> <9dfa> 9641 <9dfb> <9dff> 21787 <9e00> <9e0b> 21792 <9e0c> <9e0c> 9640 <9e0d> <9e14> 21804 <9e15> <9e15> 9606 <9e16> <9e19> 21812 <9e1a> <9e1a> 9633 <9e1b> <9e1b> 9642 <9e1c> <9e1c> 21816 <9e1d> <9e1d> 9616 <9e1e> <9e1e> 9614 <9e1f> <9e1f> 2900 <9e20> <9e20> 6965 <9e21> <9e21> 2073 <9e22> <9e22> 6966 <9e23> <9e23> 2814 <9e24> <9e24> 21817 <9e25> <9e25> 2937 <9e26> <9e26> 4068 <9e27> <9e27> 21818 <9e28> <9e2c> 6967 <9e2d> <9e2d> 4069 <9e2e> <9e2e> 21819 <9e2f> <9e2f> 4117 <9e30> <9e30> 21820 <9e31> <9e31> 6973 <9e32> <9e32> 6972 <9e33> <9e33> 4330 <9e34> <9e34> 21821 <9e35> <9e35> 3715 <9e36> <9e36> 6974 <9e37> <9e37> 6976 <9e38> <9e38> 6975 <9e39> <9e3a> 6977 <9e3b> <9e3c> 21822 <9e3d> <9e3d> 1766 <9e3e> <9e3e> 6979 <9e3f> <9e3f> 1951 <9e40> <9e40> 21824 <9e41> <9e42> 6980 <9e43> <9e43> 2328 <9e44> <9e44> 6982 <9e45> <9e45> 1579 <9e46> <9e49> 6983 <9e4a> <9e4a> 3216 <9e4b> <9e4c> 6987 <9e4d> <9e4d> 21825 <9e4e> <9e4e> 6989 <9e4f> <9e4f> 2997 <9e50> <9e50> 21826 <9e51> <9e51> 6990 endcidrange 100 begincidrange <9e52> <9e54> 21827 <9e55> <9e55> 6991 <9e56> <9e56> 21830 <9e57> <9e57> 6992 <9e58> <9e58> 7637 <9e59> <9e59> 21831 <9e5a> <9e5c> 6993 <9e5d> <9e5d> 21832 <9e5e> <9e5e> 6996 <9e5f> <9e62> 21833 <9e63> <9e63> 6997 <9e64> <9e64> 1934 <9e65> <9e65> 21837 <9e66> <9e6c> 6998 <9e6d> <9e6d> 7006 <9e6e> <9e6f> 21838 <9e70> <9e70> 4234 <9e71> <9e71> 7005 <9e72> <9e72> 21840 <9e73> <9e73> 7007 <9e74> <9e74> 21841 <9e75> <9e75> 9864 <9e76> <9e78> 21842 <9e79> <9e79> 9886 <9e7a> <9e7a> 9723 <9e7b> <9e7b> 21845 <9e7c> <9e7c> 8076 <9e7d> <9e7d> 8692 <9e7e> <9e7e> 7446 <9e7f> <9e7f> 2656 <9e80> <9e81> 21846 <9e82> <9e82> 7676 <9e83> <9e86> 21848 <9e87> <9e88> 7677 <9e89> <9e8a> 21852 <9e8b> <9e8b> 7679 <9e8c> <9e91> 21854 <9e92> <9e92> 7680 <9e93> <9e93> 2651 <9e94> <9e96> 21860 <9e97> <9e97> 8207 <9e98> <9e9c> 21863 <9e9d> <9e9d> 7682 <9e9e> <9e9e> 21868 <9e9f> <9e9f> 7683 <9ea0> <9ea4> 21869 <9ea5> <9ea5> 8305 <9ea6> <9ea6> 2714 <9ea7> <9ea8> 21874 <9ea9> <9ea9> 9719 <9eaa> <9eae> 21876 <9eaf> <9eaf> 9878 <9eb0> <9eb3> 21881 <9eb4> <9eb4> 7406 <9eb5> <9eb5> 9871 <9eb6> <9eb7> 21885 <9eb8> <9eb8> 7405 <9eb9> <9eba> 21887 <9ebb> <9ebb> 2704 <9ebc> <9ebc> 21889 <9ebd> <9ebe> 7673 <9ebf> <9ec3> 21890 <9ec4> <9ec4> 2011 <9ec5> <9ec8> 21895 <9ec9> <9ec9> 4856 <9eca> <9ecb> 21899 <9ecc> <9ecc> 8922 <9ecd> <9ecd> 3465 <9ece> <9ece> 2515 <9ecf> <9ecf> 6954 <9ed0> <9ed0> 21901 <9ed1> <9ed1> 1937 <9ed2> <9ed3> 21902 <9ed4> <9ed4> 3114 <9ed5> <9ed7> 21904 <9ed8> <9ed8> 2831 <9ed9> <9eda> 21907 <9edb> <9edd> 7684 <9ede> <9ede> 7873 <9edf> <9edf> 7688 <9ee0> <9ee0> 7687 <9ee1> <9ee1> 21909 <9ee2> <9ee2> 7689 <9ee3> <9ee4> 21910 <9ee5> <9ee5> 7692 <9ee6> <9ee6> 21912 <9ee7> <9ee7> 7691 <9ee8> <9ee8> 7859 <9ee9> <9ee9> 7690 <9eea> <9eea> 7693 <9eeb> <9eee> 21913 <9eef> <9eef> 7694 <9ef0> <9ef1> 21917 <9ef2> <9ef2> 9834 <9ef3> <9ef3> 21919 <9ef4> <9ef4> 9866 <9ef5> <9ef6> 21920 <9ef7> <9ef7> 9833 <9ef8> <9ef8> 21922 <9ef9> <9ef9> 6741 endcidrange 100 begincidrange <9efa> <9efa> 21923 <9efb> <9efc> 6742 <9efd> <9efd> 9752 <9efe> <9efe> 7542 <9eff> <9eff> 9753 <9f00> <9f08> 21924 <9f09> <9f09> 9754 <9f0a> <9f0a> 21933 <9f0b> <9f0b> 7543 <9f0c> <9f0c> 21934 <9f0d> <9f0d> 7544 <9f0e> <9f0e> 1509 <9f0f> <9f0f> 21935 <9f10> <9f10> 4724 <9f11> <9f12> 21936 <9f13> <9f13> 1821 <9f14> <9f14> 21938 <9f15> <9f15> 9843 <9f16> <9f16> 21939 <9f17> <9f17> 4721 <9f18> <9f18> 21940 <9f19> <9f19> 5087 <9f1a> <9f1f> 21941 <9f20> <9f20> 3466 <9f21> <9f21> 21947 <9f22> <9f22> 7695 <9f23> <9f2b> 21948 <9f2c> <9f2c> 7696 <9f2d> <9f2e> 21957 <9f2f> <9f2f> 7697 <9f30> <9f36> 21959 <9f37> <9f37> 7699 <9f38> <9f38> 21966 <9f39> <9f39> 7698 <9f3a> <9f3a> 21967 <9f3b> <9f3b> 1072 <9f3c> <9f3c> 21968 <9f3d> <9f3e> 7700 <9f3f> <9f43> 21969 <9f44> <9f44> 7702 <9f45> <9f49> 21974 <9f4a> <9f4a> 8390 <9f4b> <9f4b> 8811 <9f4c> <9f4e> 21979 <9f4f> <9f4f> 9427 <9f50> <9f50> 3082 <9f51> <9f51> 6594 <9f52> <9f52> 7814 <9f53> <9f53> 21982 <9f54> <9f54> 9743 <9f55> <9f58> 21983 <9f59> <9f59> 9745 <9f5a> <9f5b> 21987 <9f5c> <9f5c> 9747 <9f5d> <9f5e> 21989 <9f5f> <9f5f> 9744 <9f60> <9f60> 9746 <9f61> <9f61> 8240 <9f62> <9f62> 21991 <9f63> <9f63> 9841 <9f64> <9f65> 21992 <9f66> <9f66> 9748 <9f67> <9f69> 21994 <9f6a> <9f6a> 9750 <9f6b> <9f6b> 21997 <9f6c> <9f6c> 9749 <9f6d> <9f71> 21998 <9f72> <9f72> 8434 <9f73> <9f76> 22003 <9f77> <9f77> 9751 <9f78> <9f7e> 22007 <9f7f> <9f7f> 1282 <9f80> <9f80> 7533 <9f81> <9f82> 22014 <9f83> <9f83> 7534 <9f84> <9f84> 2605 <9f85> <9f8a> 7535 <9f8b> <9f8b> 3198 <9f8c> <9f8c> 7541 <9f8d> <9f8d> 8247 <9f8e> <9f8f> 22016 <9f90> <9f90> 8371 <9f91> <9f93> 22018 <9f94> <9f94> 7970 <9f95> <9f95> 9453 <9f96> <9f98> 22021 <9f99> <9f99> 2627 <9f9a> <9f9a> 1793 <9f9b> <9f9b> 6740 <9f9c> <9f9c> 7988 <9f9d> <9f9e> 22024 <9f9f> <9f9f> 1859 <9fa0> <9fa0> 4851 <9fa1> <9fa5> 22026 22048 22056 22064 22069 22075 22085 endcidrange 25 begincidrange 22093 22110 22126 22031 22032 22035 22036 22038 22039 22042 22044 10013 10027 10037 10041 10055 262 166 266 106 168 10014 355 10015 265 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniGB-UCS2-V b/Resources/cmap/UniGB-UCS2-V deleted file mode 100644 index 031523805f3..00000000000 --- a/Resources/cmap/UniGB-UCS2-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (UniGB-UCS2-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (UniGB-UCS2-H) %%BeginResource: CMap (UniGB-UCS2-V) %%Title: (UniGB-UCS2-V Adobe GB1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /UniGB-UCS2-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (GB1) def /Supplement 1 def end def /CMapName /UniGB-UCS2-V def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25367] def /WMode 1 def 24 begincidrange <2014> <2014> 598 <2026> <2026> 599 <2225> <2225> 7708 <3001> <3001> 575 <3002> <3002> 574 <3008> <300f> 584 <3010> <3011> 594 <3013> <3013> 7706 <3014> <3015> 582 <3016> <3017> 592 578 580 573 7707 576 7708 579 7709 7710 600 596 597 7704 7711 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniHojo-UCS2-H b/Resources/cmap/UniHojo-UCS2-H deleted file mode 100644 index 3e121873e60..00000000000 --- a/Resources/cmap/UniHojo-UCS2-H +++ /dev/null @@ -1,4418 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (UniHojo-UCS2-H) -%%Title: (UniHojo-UCS2-H Adobe Japan2 0) -%%Version: 9.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan2) def - /Supplement 0 def -end def - -/CMapName /UniHojo-UCS2-H def -/CMapVersion 9.001 def -/CMapType 1 def - -/XUID [1 10 25424] def - -/WMode 0 def - -2 begincodespacerange - <0000> - -endcodespacerange - -100 begincidrange -<007e> <007e> 9 -<00a1> <00a1> 12 -<00a4> <00a4> 20 -<00a6> <00a6> 13 -<00a9> <00a9> 17 -<00aa> <00aa> 16 -<00ae> <00ae> 18 -<00af> <00af> 6 -<00b8> <00b8> 3 -<00ba> <00ba> 15 -<00bf> <00bf> 14 -<00c0> <00c0> 97 -<00c1> <00c1> 96 -<00c2> <00c2> 99 -<00c3> <00c3> 105 -<00c4> <00c4> 98 -<00c5> <00c5> 104 -<00c6> <00c6> 69 -<00c7> <00c7> 109 -<00c8> <00c8> 113 -<00c9> <00c9> 112 -<00ca> <00ca> 115 -<00cb> <00cb> 114 -<00cc> <00cc> 126 -<00cd> <00cd> 125 -<00ce> <00ce> 128 -<00cf> <00cf> 127 -<00d1> <00d1> 142 -<00d2> <00d2> 144 -<00d3> <00d3> 143 -<00d4> <00d4> 146 -<00d5> <00d5> 150 -<00d6> <00d6> 145 -<00d8> <00d8> 76 -<00d9> <00d9> 161 -<00da> <00da> 160 -<00db> <00db> 163 -<00dc> <00dc> 162 -<00dd> <00dd> 176 -<00de> <00de> 79 -<00df> <00df> 93 -<00e0> <00e0> 183 -<00e1> <00e1> 182 -<00e2> <00e2> 185 -<00e3> <00e3> 191 -<00e4> <00e4> 184 -<00e5> <00e5> 190 -<00e6> <00e6> 80 -<00e7> <00e7> 195 -<00e8> <00e8> 199 -<00e9> <00e9> 198 -<00ea> <00ea> 201 -<00eb> <00eb> 200 -<00ec> <00ec> 212 -<00ed> <00ed> 211 -<00ee> <00ee> 214 -<00ef> <00ef> 213 -<00f0> <00f0> 82 -<00f1> <00f1> 227 -<00f2> <00f2> 229 -<00f3> <00f3> 228 -<00f4> <00f4> 231 -<00f5> <00f5> 235 -<00f6> <00f6> 230 -<00f8> <00f8> 91 -<00f9> <00f9> 246 -<00fa> <00fa> 245 -<00fb> <00fb> 248 -<00fc> <00fc> 247 -<00fd> <00fd> 261 -<00fe> <00fe> 95 -<00ff> <00ff> 262 -<0100> <0100> 102 -<0101> <0101> 188 -<0102> <0102> 100 -<0103> <0103> 186 -<0104> <0104> 103 -<0105> <0105> 189 -<0106> <0106> 106 -<0107> <0107> 192 -<0108> <0108> 107 -<0109> <0109> 193 -<010a> <010a> 110 -<010b> <010b> 196 -<010c> <010c> 108 -<010d> <010d> 194 -<010e> <010e> 111 -<010f> <010f> 197 -<0110> <0110> 70 -<0111> <0111> 81 -<0112> <0112> 118 -<0113> <0113> 204 -<0116> <0116> 117 -<0117> <0117> 203 -<0118> <0118> 119 -<0119> <0119> 205 -<011a> <011a> 116 -<011b> <011b> 202 -<011c> <011c> 120 -<011d> <011d> 207 -endcidrange - -100 begincidrange -<011e> <011e> 121 -<011f> <011f> 208 -<0120> <0120> 123 -<0121> <0121> 209 -<0122> <0122> 122 -<0124> <0124> 124 -<0125> <0125> 210 -<0126> <0126> 71 -<0127> <0127> 83 -<0128> <0128> 133 -<0129> <0129> 218 -<012a> <012a> 131 -<012b> <012b> 216 -<012e> <012e> 132 -<012f> <012f> 217 -<0130> <0130> 130 -<0131> <0131> 84 -<0132> <0132> 72 -<0133> <0133> 85 -<0134> <0134> 134 -<0135> <0135> 219 -<0136> <0136> 135 -<0137> <0137> 220 -<0138> <0138> 86 -<0139> <0139> 136 -<013a> <013a> 221 -<013b> <013b> 138 -<013c> <013c> 223 -<013d> <013d> 137 -<013e> <013e> 222 -<013f> <013f> 74 -<0140> <0140> 88 -<0141> <0141> 73 -<0142> <0142> 87 -<0143> <0143> 139 -<0144> <0144> 224 -<0145> <0145> 141 -<0146> <0146> 226 -<0147> <0147> 140 -<0148> <0148> 225 -<0149> <0149> 89 -<014a> <014a> 75 -<014b> <014b> 90 -<014c> <014c> 149 -<014d> <014d> 234 -<0150> <0150> 148 -<0151> <0151> 233 -<0152> <0152> 77 -<0153> <0153> 92 -<0154> <0154> 151 -<0155> <0155> 236 -<0156> <0156> 153 -<0157> <0157> 238 -<0158> <0158> 152 -<0159> <0159> 237 -<015a> <015a> 154 -<015b> <015b> 239 -<015c> <015c> 155 -<015d> <015d> 240 -<015e> <015e> 157 -<015f> <015f> 242 -<0160> <0160> 156 -<0161> <0161> 241 -<0162> <0162> 159 -<0163> <0163> 244 -<0164> <0164> 158 -<0165> <0165> 243 -<0166> <0166> 78 -<0167> <0167> 94 -<0168> <0168> 170 -<0169> <0169> 255 -<016a> <016a> 167 -<016b> <016b> 252 -<016c> <016c> 164 -<016d> <016d> 249 -<016e> <016e> 169 -<016f> <016f> 254 -<0170> <0170> 166 -<0171> <0171> 251 -<0172> <0172> 168 -<0173> <0173> 253 -<0174> <0174> 175 -<0175> <0175> 260 -<0176> <0176> 178 -<0177> <0177> 263 -<0178> <0178> 177 -<0179> <0179> 179 -<017a> <017a> 264 -<017b> <017b> 181 -<017c> <017c> 266 -<017d> <017d> 180 -<017e> <017e> 265 -<01cd> <01cd> 101 -<01ce> <01ce> 187 -<01cf> <01cf> 129 -<01d0> <01d0> 215 -<01d1> <01d1> 147 -<01d2> <01d2> 232 -<01d3> <01d3> 165 -<01d4> <01d4> 250 -endcidrange - -100 begincidrange -<01d5> <01d5> 174 -<01d6> <01d6> 259 -<01d7> <01d7> 171 -<01d8> <01d8> 256 -<01d9> <01d9> 173 -<01da> <01da> 258 -<01db> <01db> 172 -<01dc> <01dc> 257 -<01f5> <01f5> 206 -<02c7> <02c7> 2 -<02d8> <02d8> 1 -<02d9> <02d9> 4 -<02da> <02da> 8 -<02db> <02db> 7 -<02dd> <02dd> 5 -<0384> <0385> 10 -<0386> <0386> 22 -<0388> <038a> 23 -<038c> <038c> 27 -<038e> <038e> 28 -<038f> <038f> 30 -<0390> <0390> 36 -<03aa> <03aa> 26 -<03ab> <03ab> 29 -<03ac> <03af> 31 -<03b0> <03b0> 41 -<03c2> <03c2> 38 -<03ca> <03ca> 35 -<03cb> <03cb> 40 -<03cc> <03cc> 37 -<03cd> <03cd> 39 -<03ce> <03ce> 42 -<0402> <040c> 43 -<040e> <040f> 54 -<0452> <045c> 56 -<045e> <045f> 67 -<2116> <2116> 21 -<2122> <2122> 19 -<4e02> <4e02> 267 -<4e04> <4e05> 268 -<4e0c> <4e0c> 270 -<4e12> <4e12> 271 -<4e1f> <4e1f> 272 -<4e23> <4e24> 273 -<4e28> <4e28> 275 -<4e2b> <4e2b> 276 -<4e2e> <4e30> 277 -<4e35> <4e35> 280 -<4e40> <4e41> 281 -<4e44> <4e44> 283 -<4e47> <4e47> 284 -<4e51> <4e51> 285 -<4e5a> <4e5a> 286 -<4e5c> <4e5c> 287 -<4e63> <4e63> 288 -<4e68> <4e69> 289 -<4e74> <4e75> 291 -<4e79> <4e79> 293 -<4e7f> <4e7f> 294 -<4e8d> <4e8d> 295 -<4e96> <4e97> 296 -<4e9d> <4e9d> 298 -<4eaf> <4eaf> 299 -<4eb9> <4eb9> 300 -<4ec3> <4ec3> 301 -<4ed0> <4ed0> 302 -<4eda> <4edb> 303 -<4ee0> <4ee2> 305 -<4ee8> <4ee8> 308 -<4eef> <4eef> 309 -<4ef1> <4ef1> 310 -<4ef3> <4ef3> 311 -<4ef5> <4ef5> 312 -<4efd> <4eff> 313 -<4f00> <4f00> 316 -<4f02> <4f03> 317 -<4f08> <4f08> 319 -<4f0b> <4f0c> 320 -<4f12> <4f12> 322 -<4f15> <4f17> 323 -<4f19> <4f19> 326 -<4f2e> <4f2e> 327 -<4f31> <4f31> 328 -<4f33> <4f33> 330 -<4f35> <4f35> 331 -<4f37> <4f37> 332 -<4f39> <4f39> 333 -<4f3b> <4f3b> 334 -<4f3e> <4f3e> 335 -<4f40> <4f40> 336 -<4f42> <4f42> 337 -<4f48> <4f49> 338 -<4f4b> <4f4c> 340 -<4f52> <4f52> 342 -<4f54> <4f54> 343 -<4f56> <4f56> 344 -<4f58> <4f58> 345 -<4f5f> <4f5f> 346 -<4f60> <4f60> 329 -<4f63> <4f63> 347 -endcidrange - -100 begincidrange -<4f6a> <4f6a> 348 -<4f6c> <4f6c> 349 -<4f6e> <4f6e> 350 -<4f71> <4f71> 351 -<4f77> <4f7a> 352 -<4f7d> <4f7e> 356 -<4f81> <4f82> 358 -<4f84> <4f85> 360 -<4f89> <4f8a> 362 -<4f8c> <4f8c> 364 -<4f8e> <4f8e> 365 -<4f90> <4f90> 366 -<4f92> <4f94> 367 -<4f97> <4f97> 370 -<4f99> <4f9a> 371 -<4f9e> <4f9f> 373 -<4fb2> <4fb2> 375 -<4fb7> <4fb7> 376 -<4fb9> <4fb9> 377 -<4fbb> <4fbe> 378 -<4fc0> <4fc1> 382 -<4fc5> <4fc6> 384 -<4fc8> <4fc9> 386 -<4fcb> <4fcd> 388 -<4fcf> <4fcf> 391 -<4fd2> <4fd2> 392 -<4fdc> <4fdc> 393 -<4fe0> <4fe0> 394 -<4fe2> <4fe2> 395 -<4ff0> <4ff0> 396 -<4ff2> <4ff2> 397 -<4ffc> <4ffd> 398 -<4fff> <4fff> 400 -<5000> <5001> 401 -<5004> <5004> 403 -<5007> <5007> 404 -<500a> <500a> 405 -<500c> <500c> 406 -<500e> <500e> 407 -<5010> <5010> 408 -<5013> <5013> 409 -<5017> <5018> 410 -<501b> <501e> 412 -<5022> <5022> 416 -<5027> <5027> 417 -<502e> <502e> 418 -<5030> <5030> 419 -<5032> <5033> 420 -<5035> <5035> 422 -<503b> <503b> 446 -<5040> <5042> 423 -<5045> <5046> 426 -<504a> <504a> 428 -<504c> <504c> 429 -<504e> <504e> 430 -<5051> <5053> 431 -<5057> <5057> 434 -<5059> <5059> 435 -<505f> <5060> 436 -<5062> <5063> 438 -<5066> <5067> 440 -<506a> <506a> 442 -<506d> <506d> 443 -<5070> <5071> 444 -<5081> <5081> 447 -<5083> <5084> 448 -<5086> <5086> 450 -<508a> <508a> 451 -<508e> <5090> 452 -<5092> <5094> 455 -<5096> <5096> 458 -<509b> <509c> 459 -<509e> <50a2> 461 -<50aa> <50aa> 466 -<50af> <50b0> 467 -<50b9> <50ba> 469 -<50bd> <50bd> 471 -<50c0> <50c0> 472 -<50c3> <50c4> 473 -<50c7> <50c7> 475 -<50cc> <50cc> 476 -<50ce> <50ce> 477 -<50d0> <50d0> 478 -<50d3> <50d4> 479 -<50d8> <50d8> 481 -<50dc> <50dd> 482 -<50df> <50df> 484 -<50e2> <50e2> 485 -<50e4> <50e4> 486 -<50e6> <50e6> 487 -<50e8> <50e9> 488 -<50ef> <50ef> 490 -<50f1> <50f1> 491 -<50f2> <50f2> 503 -<50f6> <50f6> 492 -<50fa> <50fa> 493 -<50fe> <50fe> 494 -<5103> <5103> 495 -<5106> <5108> 496 -<510b> <510e> 499 -endcidrange - -100 begincidrange -<5110> <5110> 504 -<5117> <5117> 505 -<5119> <5119> 506 -<511b> <511e> 507 -<5123> <5123> 511 -<5127> <5128> 512 -<512c> <512d> 514 -<512f> <512f> 516 -<5131> <5131> 517 -<5133> <5135> 518 -<5138> <5139> 521 -<5142> <5142> 523 -<514a> <514a> 524 -<514f> <514f> 525 -<5153> <5153> 526 -<5155> <5155> 527 -<5157> <5158> 528 -<515f> <515f> 530 -<5164> <5164> 531 -<5166> <5166> 532 -<517e> <517e> 533 -<5183> <5184> 534 -<518b> <518b> 536 -<518e> <518e> 537 -<5198> <5198> 538 -<519d> <519d> 539 -<51a1> <51a1> 540 -<51a3> <51a3> 541 -<51ad> <51ad> 542 -<51b8> <51b8> 543 -<51ba> <51ba> 544 -<51bc> <51bc> 545 -<51be> <51bf> 546 -<51c2> <51c2> 548 -<51c8> <51c8> 549 -<51cf> <51cf> 550 -<51d1> <51d3> 551 -<51d5> <51d5> 554 -<51d8> <51d8> 555 -<51de> <51de> 556 -<51e2> <51e2> 557 -<51e5> <51e5> 558 -<51ee> <51ee> 559 -<51f2> <51f4> 560 -<51f7> <51f7> 563 -<5201> <5202> 564 -<5205> <5205> 566 -<5212> <5213> 567 -<5215> <5216> 569 -<5218> <5218> 571 -<5222> <5222> 572 -<5228> <5228> 573 -<5231> <5232> 574 -<5235> <5235> 576 -<523c> <523c> 577 -<5245> <5245> 578 -<5249> <5249> 579 -<5255> <5255> 580 -<5257> <5258> 581 -<525a> <525a> 583 -<525c> <525c> 584 -<525f> <5261> 585 -<5266> <5266> 588 -<526e> <526e> 589 -<5277> <5279> 590 -<5280> <5280> 593 -<5282> <5282> 594 -<5285> <5285> 595 -<528a> <528a> 596 -<528c> <528c> 597 -<5293> <5293> 598 -<5295> <5298> 599 -<529a> <529a> 603 -<529c> <529c> 604 -<52a4> <52a7> 605 -<52af> <52b0> 609 -<52b6> <52b8> 611 -<52ba> <52bb> 614 -<52bd> <52bd> 616 -<52c0> <52c0> 617 -<52c4> <52c4> 618 -<52c6> <52c6> 619 -<52c8> <52c8> 620 -<52cc> <52cc> 621 -<52cf> <52cf> 622 -<52d1> <52d1> 623 -<52d4> <52d4> 624 -<52d6> <52d6> 625 -<52db> <52dc> 626 -<52e1> <52e1> 628 -<52e5> <52e5> 629 -<52e8> <52ea> 630 -<52ec> <52ec> 633 -<52f0> <52f1> 634 -<52f4> <52f4> 636 -<52f6> <52f7> 637 -<5300> <5300> 639 -<5303> <5303> 640 -<530a> <530c> 641 -<5311> <5311> 644 -endcidrange - -100 begincidrange -<5313> <5313> 645 -<5318> <5318> 646 -<531b> <531c> 647 -<531e> <531f> 649 -<5325> <5325> 651 -<5327> <5329> 652 -<532b> <532d> 655 -<5330> <5330> 658 -<5332> <5332> 659 -<5335> <5335> 660 -<533c> <533e> 661 -<5342> <5342> 664 -<534b> <534b> 666 -<534c> <534c> 665 -<5359> <5359> 667 -<535b> <535b> 668 -<5361> <5361> 669 -<5363> <5363> 670 -<5365> <5365> 671 -<536c> <536d> 672 -<5372> <5372> 674 -<5379> <5379> 675 -<537e> <537e> 676 -<5383> <5383> 677 -<5387> <5388> 678 -<538e> <538e> 680 -<5393> <5394> 681 -<5399> <5399> 683 -<539d> <539d> 684 -<53a1> <53a1> 685 -<53a4> <53a4> 686 -<53aa> <53ab> 687 -<53af> <53af> 689 -<53b2> <53b2> 690 -<53b4> <53b5> 691 -<53b7> <53b8> 693 -<53ba> <53ba> 695 -<53bd> <53bd> 696 -<53c0> <53c0> 697 -<53c5> <53c5> 698 -<53cf> <53cf> 699 -<53d2> <53d3> 700 -<53d5> <53d5> 702 -<53da> <53da> 703 -<53dd> <53de> 704 -<53e0> <53e0> 706 -<53e6> <53e7> 707 -<53f5> <53f5> 709 -<5402> <5402> 710 -<5413> <5413> 711 -<541a> <541a> 712 -<5421> <5421> 713 -<5427> <5428> 714 -<542a> <542a> 716 -<542f> <542f> 717 -<5431> <5431> 718 -<5434> <5435> 719 -<5443> <5444> 721 -<5447> <5447> 723 -<544d> <544d> 724 -<544f> <544f> 725 -<545e> <545e> 726 -<5462> <5462> 727 -<5464> <5464> 728 -<5466> <5467> 729 -<5469> <5469> 731 -<546b> <546b> 732 -<546d> <546e> 733 -<5474> <5474> 735 -<547f> <547f> 736 -<5481> <5481> 737 -<5483> <5483> 738 -<5485> <5485> 739 -<5488> <5489> 740 -<548d> <548d> 742 -<5491> <5491> 743 -<5495> <5496> 744 -<549c> <549c> 746 -<549f> <549f> 747 -<54a1> <54a1> 748 -<54a6> <54a7> 749 -<54a9> <54aa> 751 -<54ad> <54ae> 753 -<54b1> <54b1> 755 -<54b7> <54b7> 756 -<54b9> <54bb> 757 -<54bf> <54bf> 760 -<54c6> <54c6> 761 -<54ca> <54ca> 762 -<54cd> <54ce> 763 -<54e0> <54e0> 765 -<54ea> <54ea> 766 -<54ec> <54ec> 767 -<54ef> <54ef> 768 -<54f6> <54f6> 769 -<54fc> <54fc> 770 -<54fe> <54ff> 771 -<5500> <5501> 773 -<5505> <5505> 775 -<5508> <5509> 776 -endcidrange - -100 begincidrange -<550c> <550e> 778 -<5515> <5515> 781 -<552a> <552b> 782 -<5532> <5532> 784 -<5535> <5536> 785 -<553b> <553d> 787 -<5541> <5541> 790 -<5547> <5547> 791 -<5549> <554a> 792 -<554d> <554d> 794 -<5550> <5551> 795 -<5558> <5558> 797 -<555a> <555b> 798 -<555e> <555e> 800 -<5560> <5561> 801 -<5564> <5564> 803 -<5566> <5566> 804 -<557f> <557f> 805 -<5581> <5582> 806 -<5586> <5586> 808 -<5588> <5588> 809 -<558e> <558f> 810 -<5591> <5594> 812 -<5597> <5597> 816 -<55a3> <55a4> 817 -<55ad> <55ad> 819 -<55b2> <55b2> 820 -<55bf> <55bf> 821 -<55c1> <55c1> 822 -<55c3> <55c3> 823 -<55c6> <55c6> 824 -<55c9> <55c9> 825 -<55cb> <55cc> 826 -<55ce> <55ce> 828 -<55d1> <55d3> 829 -<55d7> <55d8> 832 -<55db> <55db> 834 -<55de> <55de> 835 -<55e2> <55e2> 836 -<55e9> <55e9> 837 -<55f6> <55f6> 838 -<55ff> <55ff> 839 -<5605> <5605> 840 -<5608> <5608> 841 -<560a> <560a> 842 -<560d> <5612> 843 -<5619> <5619> 849 -<562c> <562c> 850 -<5630> <5630> 851 -<5633> <5633> 852 -<5635> <5635> 853 -<5637> <5637> 854 -<5639> <5639> 855 -<563b> <563d> 856 -<563f> <5641> 859 -<5643> <5644> 862 -<5646> <5646> 864 -<5649> <5649> 865 -<564b> <564b> 866 -<564d> <564d> 867 -<564f> <564f> 868 -<5654> <5654> 869 -<565e> <565e> 870 -<5660> <5663> 871 -<5666> <5666> 875 -<5669> <5669> 876 -<566d> <566d> 877 -<566f> <566f> 878 -<5671> <5672> 879 -<5675> <5675> 881 -<5684> <5685> 882 -<5688> <5688> 884 -<568b> <568c> 885 -<5695> <5695> 887 -<5699> <569a> 888 -<569d> <569f> 890 -<56a6> <56a9> 893 -<56ab> <56ad> 897 -<56b1> <56b1> 900 -<56b3> <56b3> 901 -<56b7> <56b7> 902 -<56be> <56be> 903 -<56c5> <56c5> 904 -<56c9> <56cb> 905 -<56cc> <56cd> 910 -<56cf> <56d0> 908 -<56d9> <56d9> 912 -<56dc> <56dd> 913 -<56df> <56df> 915 -<56e1> <56e1> 916 -<56e4> <56e8> 917 -<56eb> <56eb> 923 -<56ed> <56ed> 924 -<56f1> <56f1> 922 -<56f6> <56f7> 925 -<5701> <5702> 927 -<5707> <5707> 929 -<570a> <570a> 930 -<570c> <570c> 931 -<5711> <5711> 932 -endcidrange - -100 begincidrange -<5715> <5715> 933 -<571a> <571b> 934 -<571d> <571d> 936 -<5720> <5720> 937 -<5722> <5725> 938 -<5729> <572a> 942 -<572c> <572c> 944 -<572e> <572f> 945 -<5733> <5734> 947 -<573d> <573f> 949 -<5745> <5746> 952 -<574c> <574d> 954 -<5752> <5752> 956 -<5762> <5762> 957 -<5765> <5765> 958 -<5767> <5768> 959 -<576b> <576b> 961 -<576d> <5771> 962 -<5773> <5775> 967 -<5777> <5777> 970 -<5779> <577c> 971 -<577e> <577e> 975 -<5781> <5781> 976 -<5783> <5783> 977 -<578c> <578c> 978 -<5794> <5794> 979 -<5795> <5795> 988 -<5797> <5797> 980 -<5799> <579a> 981 -<579c> <579f> 983 -<57a1> <57a1> 987 -<57a7> <57a9> 989 -<57ac> <57ac> 992 -<57b8> <57b8> 993 -<57bd> <57bd> 994 -<57c7> <57c8> 995 -<57cc> <57cc> 997 -<57cf> <57cf> 998 -<57d5> <57d5> 999 -<57dd> <57de> 1000 -<57e1> <57e1> 1018 -<57e4> <57e4> 1002 -<57e6> <57e7> 1003 -<57e9> <57e9> 1005 -<57ed> <57ed> 1006 -<57f0> <57f0> 1007 -<57f5> <57f6> 1008 -<57f8> <57f8> 1010 -<57fd> <57ff> 1011 -<5803> <5804> 1014 -<5808> <5809> 1016 -<580c> <580d> 1019 -<581b> <581b> 1021 -<581e> <5820> 1022 -<5826> <5827> 1025 -<582d> <582d> 1027 -<5832> <5832> 1028 -<5839> <5839> 1029 -<583f> <583f> 1030 -<5849> <5849> 1031 -<584c> <584d> 1032 -<584f> <5850> 1034 -<5855> <5855> 1036 -<585f> <585f> 1037 -<5861> <5861> 1038 -<5864> <5864> 1039 -<5867> <5868> 1040 -<5878> <5878> 1042 -<587c> <587c> 1043 -<587f> <5881> 1044 -<5887> <588a> 1047 -<588c> <588d> 1051 -<588f> <5890> 1053 -<5894> <5894> 1055 -<5896> <5896> 1056 -<589d> <589d> 1057 -<58a0> <58a2> 1058 -<58a6> <58a6> 1061 -<58a9> <58a9> 1062 -<58b1> <58b2> 1063 -<58bc> <58bc> 1066 -<58c2> <58c2> 1067 -<58c4> <58c4> 1065 -<58c8> <58c8> 1068 -<58cd> <58ce> 1069 -<58d0> <58d0> 1071 -<58d2> <58d2> 1072 -<58d4> <58d4> 1073 -<58d6> <58d6> 1074 -<58da> <58da> 1075 -<58dd> <58dd> 1076 -<58e1> <58e2> 1077 -<58e9> <58e9> 1079 -<58f3> <58f3> 1080 -<5905> <5906> 1081 -<590b> <590c> 1083 -<5912> <5914> 1085 -<591d> <591d> 1089 -<5921> <5921> 1090 -<5923> <5924> 1091 -endcidrange - -100 begincidrange -<5928> <5928> 1093 -<592f> <5930> 1094 -<5933> <5933> 1096 -<5935> <5936> 1097 -<593f> <593f> 1099 -<5943> <5943> 1100 -<5946> <5946> 1101 -<5952> <5953> 1102 -<5959> <5959> 1104 -<595b> <595b> 1105 -<595d> <595f> 1106 -<5961> <5961> 1109 -<5963> <5963> 1110 -<596b> <596b> 1111 -<596d> <596d> 1112 -<596f> <596f> 1113 -<5972> <5972> 1114 -<5975> <5976> 1115 -<5979> <5979> 1117 -<597b> <597c> 1118 -<598b> <598c> 1120 -<598e> <598e> 1122 -<5992> <5992> 1123 -<5995> <5995> 1124 -<5997> <5997> 1125 -<599f> <599f> 1126 -<59a4> <59a4> 1127 -<59a7> <59a7> 1128 -<59ad> <59b0> 1129 -<59b3> <59b3> 1133 -<59b7> <59b7> 1134 -<59ba> <59ba> 1135 -<59bc> <59bc> 1136 -<59c1> <59c1> 1137 -<59c3> <59c4> 1138 -<59c8> <59c8> 1140 -<59ca> <59ca> 1141 -<59cd> <59cd> 1142 -<59d2> <59d2> 1143 -<59dd> <59df> 1144 -<59e3> <59e4> 1147 -<59e7> <59e7> 1149 -<59ee> <59ef> 1150 -<59f1> <59f2> 1152 -<59f4> <59f4> 1154 -<59f7> <59f7> 1155 -<5a00> <5a00> 1156 -<5a04> <5a04> 1157 -<5a0c> <5a0e> 1158 -<5a12> <5a13> 1161 -<5a1e> <5a1e> 1163 -<5a23> <5a24> 1164 -<5a27> <5a28> 1166 -<5a2a> <5a2a> 1168 -<5a2d> <5a2d> 1169 -<5a30> <5a30> 1170 -<5a44> <5a45> 1171 -<5a47> <5a48> 1173 -<5a4c> <5a4c> 1175 -<5a50> <5a50> 1176 -<5a55> <5a55> 1177 -<5a5e> <5a5e> 1178 -<5a63> <5a63> 1179 -<5a65> <5a65> 1180 -<5a67> <5a67> 1181 -<5a6d> <5a6d> 1182 -<5a77> <5a77> 1183 -<5a7a> <5a7b> 1184 -<5a7e> <5a7e> 1186 -<5a8b> <5a8b> 1187 -<5a90> <5a90> 1188 -<5a93> <5a93> 1189 -<5a96> <5a96> 1190 -<5a99> <5a99> 1191 -<5a9c> <5a9c> 1192 -<5a9e> <5aa0> 1193 -<5aa2> <5aa2> 1196 -<5aa7> <5aa7> 1197 -<5aac> <5aac> 1198 -<5ab1> <5ab3> 1199 -<5ab5> <5ab5> 1202 -<5ab8> <5ab8> 1203 -<5aba> <5abb> 1204 -<5abf> <5abf> 1206 -<5ac4> <5ac4> 1207 -<5ac6> <5ac6> 1208 -<5ac8> <5ac8> 1209 -<5acf> <5acf> 1210 -<5ada> <5ada> 1211 -<5adc> <5adc> 1212 -<5ae0> <5ae0> 1213 -<5ae5> <5ae5> 1214 -<5aea> <5aea> 1215 -<5aee> <5aee> 1216 -<5af5> <5af6> 1217 -<5afd> <5afd> 1219 -<5b00> <5b01> 1220 -<5b08> <5b08> 1222 -<5b17> <5b17> 1223 -<5b19> <5b19> 1225 -endcidrange - -100 begincidrange -<5b1b> <5b1b> 1226 -<5b1d> <5b1d> 1227 -<5b21> <5b21> 1228 -<5b25> <5b25> 1229 -<5b2d> <5b2d> 1230 -<5b34> <5b34> 1224 -<5b38> <5b38> 1231 -<5b41> <5b41> 1232 -<5b4b> <5b4c> 1233 -<5b52> <5b52> 1235 -<5b56> <5b56> 1236 -<5b5e> <5b5e> 1237 -<5b68> <5b68> 1238 -<5b6e> <5b6f> 1239 -<5b7c> <5b7f> 1241 -<5b81> <5b81> 1245 -<5b84> <5b84> 1246 -<5b86> <5b86> 1247 -<5b8a> <5b8a> 1248 -<5b8e> <5b8e> 1249 -<5b90> <5b91> 1250 -<5b93> <5b94> 1252 -<5b96> <5b96> 1254 -<5ba8> <5ba9> 1255 -<5bac> <5bad> 1257 -<5baf> <5baf> 1259 -<5bb1> <5bb2> 1260 -<5bb7> <5bb7> 1262 -<5bba> <5bba> 1263 -<5bbc> <5bbc> 1264 -<5bc0> <5bc1> 1265 -<5bcd> <5bcd> 1267 -<5bcf> <5bcf> 1268 -<5bd6> <5bda> 1269 -<5be0> <5be0> 1274 -<5bef> <5bef> 1275 -<5bf1> <5bf1> 1276 -<5bf4> <5bf4> 1277 -<5bfd> <5bfd> 1278 -<5c0c> <5c0c> 1279 -<5c17> <5c17> 1280 -<5c1e> <5c1f> 1281 -<5c23> <5c23> 1283 -<5c26> <5c26> 1284 -<5c29> <5c29> 1285 -<5c2b> <5c2c> 1286 -<5c2e> <5c2e> 1288 -<5c30> <5c30> 1289 -<5c32> <5c32> 1290 -<5c35> <5c36> 1291 -<5c59> <5c5a> 1293 -<5c5c> <5c5c> 1295 -<5c62> <5c63> 1296 -<5c67> <5c69> 1298 -<5c6d> <5c6d> 1301 -<5c70> <5c70> 1302 -<5c74> <5c75> 1303 -<5c7a> <5c7d> 1305 -<5c87> <5c88> 1309 -<5c8a> <5c8a> 1311 -<5c8f> <5c8f> 1312 -<5c92> <5c92> 1313 -<5c9d> <5c9d> 1314 -<5c9f> <5ca0> 1315 -<5ca2> <5ca3> 1317 -<5ca6> <5ca6> 1319 -<5caa> <5caa> 1320 -<5cb2> <5cb2> 1321 -<5cb4> <5cb5> 1322 -<5cba> <5cba> 1324 -<5cc9> <5cc9> 1325 -<5ccb> <5ccb> 1326 -<5cd2> <5cd2> 1327 -<5cd7> <5cd7> 1329 -<5cdd> <5cdd> 1328 -<5cee> <5cee> 1330 -<5cf1> <5cf2> 1331 -<5cf4> <5cf4> 1333 -<5d01> <5d01> 1334 -<5d06> <5d06> 1335 -<5d0d> <5d0d> 1336 -<5d12> <5d12> 1337 -<5d23> <5d24> 1339 -<5d26> <5d27> 1341 -<5d2b> <5d2b> 1338 -<5d31> <5d31> 1343 -<5d34> <5d34> 1344 -<5d39> <5d39> 1345 -<5d3d> <5d3d> 1346 -<5d3f> <5d3f> 1347 -<5d42> <5d43> 1348 -<5d46> <5d46> 1350 -<5d48> <5d48> 1351 -<5d4a> <5d4a> 1355 -<5d51> <5d51> 1353 -<5d55> <5d55> 1352 -<5d59> <5d59> 1354 -<5d5f> <5d62> 1356 -<5d64> <5d64> 1360 -<5d6a> <5d6a> 1361 -endcidrange - -100 begincidrange -<5d6d> <5d6d> 1362 -<5d70> <5d70> 1363 -<5d79> <5d7a> 1364 -<5d7e> <5d7f> 1366 -<5d81> <5d81> 1368 -<5d83> <5d83> 1369 -<5d88> <5d88> 1370 -<5d8a> <5d8a> 1371 -<5d92> <5d95> 1372 -<5d99> <5d99> 1376 -<5d9b> <5d9b> 1377 -<5d9f> <5da0> 1378 -<5da7> <5da7> 1380 -<5dab> <5dab> 1381 -<5db0> <5db0> 1382 -<5db2> <5db2> 5426 -<5db4> <5db4> 1383 -<5db8> <5db9> 1384 -<5dc3> <5dc3> 1386 -<5dc7> <5dc7> 1387 -<5dcb> <5dcb> 1388 -<5dce> <5dce> 1390 -<5dd0> <5dd0> 1389 -<5dd8> <5dd9> 1391 -<5de0> <5de0> 1393 -<5de4> <5de4> 1394 -<5de9> <5de9> 1395 -<5df8> <5df9> 1396 -<5e00> <5e00> 1398 -<5e07> <5e07> 1399 -<5e0d> <5e0d> 1400 -<5e12> <5e12> 1401 -<5e14> <5e15> 1402 -<5e18> <5e18> 1404 -<5e1f> <5e20> 1405 -<5e28> <5e28> 1408 -<5e2e> <5e2e> 1407 -<5e32> <5e32> 1409 -<5e35> <5e35> 1410 -<5e3e> <5e3e> 1411 -<5e49> <5e49> 1414 -<5e4b> <5e4b> 1412 -<5e50> <5e50> 1413 -<5e51> <5e51> 1415 -<5e56> <5e56> 1416 -<5e58> <5e58> 1417 -<5e5b> <5e5c> 1418 -<5e5e> <5e5e> 1420 -<5e68> <5e68> 1421 -<5e6a> <5e6e> 1422 -<5e70> <5e70> 1427 -<5e80> <5e80> 1428 -<5e8b> <5e8b> 1429 -<5e8e> <5e8e> 1430 -<5ea2> <5ea2> 1431 -<5ea4> <5ea5> 1432 -<5ea8> <5ea8> 1434 -<5eaa> <5eaa> 1435 -<5eac> <5eac> 1436 -<5eb1> <5eb1> 1437 -<5eb3> <5eb3> 1438 -<5ebd> <5ebf> 1439 -<5ec6> <5ec6> 1442 -<5ecb> <5ecb> 1444 -<5ecc> <5ecc> 1443 -<5ece> <5ece> 1445 -<5ed1> <5ed2> 1446 -<5ed4> <5ed5> 1448 -<5edc> <5edc> 1450 -<5ede> <5ede> 1451 -<5ee5> <5ee5> 1452 -<5eeb> <5eeb> 1453 -<5f02> <5f02> 1454 -<5f06> <5f08> 1455 -<5f0e> <5f0e> 1458 -<5f19> <5f19> 1459 -<5f1c> <5f1d> 1460 -<5f21> <5f24> 1462 -<5f28> <5f28> 1466 -<5f2b> <5f2c> 1467 -<5f2e> <5f2e> 1469 -<5f30> <5f30> 1470 -<5f34> <5f34> 1471 -<5f36> <5f36> 1472 -<5f3b> <5f3b> 1473 -<5f3d> <5f3d> 1474 -<5f3f> <5f40> 1475 -<5f44> <5f45> 1477 -<5f47> <5f47> 1479 -<5f4d> <5f4d> 1480 -<5f50> <5f50> 1481 -<5f54> <5f54> 1482 -<5f58> <5f58> 1483 -<5f5b> <5f5b> 1484 -<5f60> <5f60> 1485 -<5f63> <5f64> 1486 -<5f67> <5f67> 1488 -<5f6f> <5f6f> 1489 -<5f72> <5f72> 1490 -<5f74> <5f75> 1491 -endcidrange - -100 begincidrange -<5f78> <5f78> 1493 -<5f7a> <5f7a> 1494 -<5f7d> <5f7e> 1495 -<5f89> <5f89> 1497 -<5f8d> <5f8d> 1498 -<5f8f> <5f8f> 1499 -<5f96> <5f96> 1500 -<5f9c> <5f9d> 1501 -<5fa2> <5fa2> 1503 -<5fa4> <5fa4> 1506 -<5fa7> <5fa7> 1504 -<5fab> <5fab> 1505 -<5fac> <5fac> 1507 -<5faf> <5fb1> 1508 -<5fb8> <5fb8> 1511 -<5fc4> <5fc4> 1512 -<5fc7> <5fc9> 1513 -<5fcb> <5fcb> 1516 -<5fd0> <5fd4> 1517 -<5fde> <5fde> 1522 -<5fe1> <5fe2> 1523 -<5fe8> <5fea> 1525 -<5fec> <5fef> 1528 -<5ff2> <5ff3> 1532 -<5ff6> <5ff6> 1534 -<5ffa> <5ffa> 1535 -<5ffc> <5ffc> 1536 -<6007> <6007> 1537 -<600a> <600a> 1538 -<600d> <600d> 1539 -<6013> <6014> 1540 -<6017> <6018> 1542 -<601a> <601a> 1544 -<601f> <601f> 1545 -<6024> <6024> 1546 -<602d> <602d> 1547 -<6033> <6033> 1548 -<6035> <6035> 1549 -<6040> <6040> 1550 -<6047> <6049> 1551 -<604c> <604c> 1554 -<6051> <6051> 1555 -<6054> <6054> 1556 -<6056> <6057> 1557 -<605d> <605d> 1559 -<6061> <6061> 1560 -<6067> <6067> 1561 -<6071> <6071> 1562 -<607e> <607f> 1563 -<6082> <6082> 1565 -<6086> <6086> 1566 -<6088> <6088> 1567 -<608a> <608a> 1568 -<608e> <608e> 1569 -<6091> <6091> 1570 -<6093> <6093> 1571 -<6095> <6095> 1572 -<6098> <6098> 1573 -<609d> <609e> 1574 -<60a2> <60a2> 1576 -<60a4> <60a5> 1577 -<60a8> <60a8> 1579 -<60b0> <60b1> 1580 -<60b7> <60b7> 1582 -<60bb> <60bb> 1583 -<60be> <60be> 1584 -<60c2> <60c2> 1585 -<60c4> <60c4> 1586 -<60c8> <60cb> 1587 -<60ce> <60cf> 1591 -<60d4> <60d5> 1593 -<60d9> <60d9> 1595 -<60db> <60db> 1596 -<60dd> <60de> 1597 -<60e2> <60e2> 1599 -<60e5> <60e5> 1600 -<60f2> <60f2> 1601 -<60f5> <60f5> 1602 -<60f8> <60f8> 1603 -<60fc> <60fd> 1604 -<6102> <6102> 1606 -<6107> <6107> 1607 -<610a> <610a> 1608 -<610c> <610c> 1609 -<6110> <6114> 1610 -<6116> <6117> 1615 -<6119> <6119> 1617 -<611c> <611c> 1618 -<611e> <611e> 1619 -<6122> <6122> 1620 -<612a> <612b> 1621 -<6130> <6131> 1623 -<6135> <6137> 1625 -<6139> <6139> 1628 -<6141> <6141> 1629 -<6145> <6146> 1630 -<6149> <6149> 1632 -<615e> <615e> 1633 -<6160> <6160> 1634 -<616c> <616c> 1635 -endcidrange - -100 begincidrange -<6172> <6172> 1636 -<6178> <6178> 1637 -<617b> <617c> 1638 -<617f> <6181> 1640 -<6183> <6184> 1643 -<618b> <618b> 1645 -<618d> <618d> 1646 -<6192> <6193> 1647 -<6197> <6198> 1649 -<619c> <619d> 1651 -<619f> <61a0> 1653 -<61a5> <61a5> 1655 -<61a8> <61a8> 1656 -<61aa> <61aa> 1657 -<61ad> <61ad> 1658 -<61b8> <61b9> 1659 -<61bc> <61bc> 1661 -<61c0> <61c2> 1662 -<61ce> <61cf> 1665 -<61d5> <61d5> 1667 -<61dc> <61df> 1668 -<61e1> <61e2> 1672 -<61e5> <61e5> 1676 -<61e7> <61e7> 1674 -<61e9> <61e9> 1675 -<61ec> <61ed> 1677 -<61ef> <61ef> 1679 -<6201> <6201> 1680 -<6203> <6204> 1681 -<6207> <6207> 1683 -<6213> <6213> 1684 -<6215> <6215> 1685 -<621c> <621c> 1686 -<6220> <6220> 1687 -<6222> <6223> 1688 -<6227> <6227> 1690 -<6229> <6229> 1691 -<622b> <622b> 1692 -<6239> <6239> 1693 -<623d> <623d> 1694 -<6242> <6244> 1695 -<6246> <6246> 1698 -<624c> <624c> 1699 -<6250> <6252> 1700 -<6254> <6254> 1703 -<6256> <6256> 1704 -<625a> <625a> 1705 -<625c> <625c> 1706 -<6264> <6264> 1707 -<626d> <626d> 1708 -<626f> <626f> 1709 -<6273> <6273> 1710 -<627a> <627a> 1711 -<627d> <627d> 1712 -<628d> <6290> 1713 -<62a6> <62a6> 1717 -<62a8> <62a8> 1718 -<62b3> <62b3> 1719 -<62b6> <62b7> 1720 -<62ba> <62ba> 1722 -<62be> <62bf> 1723 -<62c4> <62c4> 1725 -<62ce> <62ce> 1726 -<62d5> <62d6> 1727 -<62da> <62da> 1729 -<62ea> <62ea> 1730 -<62f2> <62f2> 1731 -<62f4> <62f4> 1732 -<62fc> <62fd> 1733 -<6303> <6304> 1735 -<630a> <630b> 1737 -<630d> <630d> 1739 -<6310> <6310> 1740 -<6313> <6313> 1741 -<6316> <6316> 1742 -<6318> <6318> 1743 -<6329> <632a> 1744 -<632d> <632d> 1746 -<6335> <6336> 1747 -<6339> <6339> 1749 -<633c> <633c> 1750 -<6341> <6344> 1751 -<6346> <6346> 1755 -<634a> <634b> 1756 -<634e> <634e> 1758 -<6352> <6354> 1759 -<6358> <6358> 1762 -<635b> <635b> 1763 -<6365> <6366> 1764 -<636c> <636d> 1766 -<6371> <6371> 1768 -<6374> <6375> 1769 -<6378> <6378> 1771 -<637c> <637d> 1772 -<637f> <637f> 1774 -<6382> <6382> 1775 -<6384> <6384> 1776 -<6387> <6387> 1777 -<638a> <638a> 1778 -<6390> <6390> 1779 -endcidrange - -100 begincidrange -<6394> <6395> 1780 -<6399> <639a> 1782 -<639e> <639e> 1784 -<63a4> <63a4> 1785 -<63a6> <63a6> 1786 -<63ad> <63af> 1787 -<63bd> <63bd> 1790 -<63c1> <63c1> 1791 -<63c5> <63c5> 1792 -<63c8> <63c8> 1793 -<63ce> <63ce> 1794 -<63d1> <63d1> 1795 -<63d3> <63d5> 1796 -<63dc> <63dc> 1799 -<63e0> <63e0> 1800 -<63e5> <63e5> 1801 -<63ea> <63ea> 1802 -<63ec> <63ec> 1803 -<63f2> <63f3> 1804 -<63f5> <63f5> 1806 -<63f8> <63f9> 1807 -<6409> <640a> 1809 -<6410> <6410> 1811 -<6412> <6412> 1812 -<6414> <6414> 1813 -<6418> <6418> 1814 -<641e> <641e> 1815 -<6420> <6420> 1816 -<6422> <6422> 1817 -<6424> <6425> 1818 -<6429> <642a> 1820 -<642f> <6430> 1822 -<6435> <6435> 1824 -<643d> <643d> 1825 -<643f> <643f> 1826 -<644b> <644b> 1827 -<644f> <644f> 1828 -<6451> <6454> 1829 -<645a> <645d> 1833 -<645f> <6461> 1837 -<6463> <6463> 1840 -<646d> <646d> 1841 -<6473> <6474> 1842 -<647b> <647b> 1844 -<647d> <647d> 1845 -<6485> <6485> 1846 -<6487> <6487> 1847 -<648f> <6491> 1848 -<6498> <6499> 1851 -<649b> <649b> 1853 -<649d> <649d> 1854 -<649f> <649f> 1855 -<64a1> <64a1> 1856 -<64a3> <64a3> 1857 -<64a6> <64a6> 1858 -<64a8> <64a8> 1859 -<64ac> <64ac> 1860 -<64b3> <64b3> 1861 -<64bd> <64bf> 1862 -<64c4> <64c4> 1865 -<64c9> <64cc> 1866 -<64ce> <64ce> 1870 -<64d0> <64d1> 1871 -<64d5> <64d5> 1873 -<64d7> <64d7> 1874 -<64e4> <64e5> 1875 -<64e9> <64ea> 1877 -<64ed> <64ed> 1879 -<64f0> <64f0> 1880 -<64f5> <64f5> 1881 -<64f7> <64f7> 1882 -<64fb> <64fb> 1883 -<64ff> <64ff> 1884 -<6501> <6501> 1885 -<6504> <6504> 1886 -<6508> <650a> 1887 -<650f> <650f> 1890 -<6513> <6514> 1891 -<6516> <6516> 1893 -<6519> <6519> 1894 -<651b> <651b> 1895 -<651e> <651f> 1896 -<6522> <6522> 1898 -<6526> <6526> 1899 -<6529> <6529> 1900 -<652e> <652e> 1901 -<6531> <6531> 1902 -<653a> <653a> 1903 -<653c> <653d> 1904 -<6543> <6543> 1906 -<6547> <6547> 1907 -<6549> <6549> 1908 -<6550> <6550> 1909 -<6552> <6552> 1910 -<6554> <6554> 1911 -<655f> <6560> 1912 -<6567> <6567> 1914 -<656b> <656b> 1915 -<657a> <657a> 1916 -<657d> <657d> 1917 -endcidrange - -100 begincidrange -<6581> <6581> 1918 -<6585> <6585> 1919 -<658a> <658a> 1920 -<6592> <6592> 1921 -<6595> <6595> 1922 -<6598> <6598> 1923 -<659d> <659d> 1924 -<65a0> <65a0> 1925 -<65a3> <65a3> 1926 -<65a6> <65a6> 1927 -<65ae> <65ae> 1928 -<65b2> <65b4> 1929 -<65bf> <65bf> 1932 -<65c2> <65c2> 1933 -<65c8> <65c9> 1934 -<65ce> <65ce> 1936 -<65d0> <65d0> 1937 -<65d4> <65d4> 1938 -<65d6> <65d6> 1939 -<65d8> <65d8> 1940 -<65df> <65df> 1941 -<65f0> <65f0> 1942 -<65f2> <65f2> 1943 -<65f4> <65f5> 1944 -<65f9> <65f9> 1946 -<65fe> <65ff> 1947 -<6600> <6600> 1949 -<6604> <6604> 1950 -<6608> <6609> 1951 -<660d> <660d> 1953 -<6611> <6612> 1954 -<6615> <6616> 1956 -<661d> <661e> 1958 -<6621> <6624> 1960 -<6626> <6626> 1964 -<6629> <662c> 1965 -<662e> <662e> 1969 -<6630> <6631> 1970 -<6633> <6633> 1972 -<6637> <6637> 1974 -<6639> <6639> 1973 -<6640> <6640> 1975 -<6645> <6646> 1976 -<664a> <664a> 1978 -<664c> <664c> 1979 -<664e> <664e> 1981 -<6651> <6651> 1980 -<6657> <6659> 1982 -<665b> <665c> 1985 -<6660> <6661> 1987 -<666a> <666c> 1990 -<6673> <6673> 1994 -<6675> <6675> 1995 -<6677> <6679> 1997 -<667b> <667b> 2000 -<667c> <667c> 2002 -<667e> <667e> 1993 -<667f> <667f> 1996 -<6680> <6680> 2001 -<668b> <668d> 2003 -<6690> <6690> 2006 -<6692> <6692> 2007 -<6699> <669c> 2008 -<669f> <66a0> 2012 -<66a4> <66a4> 2014 -<66ad> <66ad> 2015 -<66b1> <66b2> 2016 -<66b5> <66b5> 2018 -<66bb> <66bb> 2019 -<66bf> <66c0> 2020 -<66c2> <66c3> 2022 -<66c8> <66c8> 2024 -<66cc> <66cc> 2025 -<66ce> <66cf> 2026 -<66d4> <66d4> 2028 -<66db> <66db> 2029 -<66df> <66df> 2030 -<66e8> <66e8> 2031 -<66eb> <66ec> 2032 -<66ee> <66ee> 2034 -<66fa> <66fa> 2035 -<66fb> <66fb> 1989 -<6705> <6705> 2036 -<6707> <6707> 2037 -<670e> <670e> 2038 -<6713> <6713> 2039 -<6719> <6719> 2040 -<671c> <671c> 2041 -<6720> <6720> 2042 -<6722> <6722> 2043 -<6733> <6733> 2044 -<673e> <673e> 2045 -<6745> <6745> 2046 -<6747> <6748> 2047 -<674c> <674c> 2049 -<6754> <6755> 2050 -<675d> <675d> 2052 -<6766> <6766> 2053 -<676c> <676c> 2054 -<676e> <676e> 2055 -endcidrange - -100 begincidrange -<6774> <6774> 2056 -<6776> <6776> 2057 -<677b> <677b> 2058 -<6781> <6781> 2059 -<6784> <6784> 2060 -<678e> <678f> 2061 -<6791> <6791> 2063 -<6793> <6793> 2064 -<6796> <6796> 2065 -<6798> <6799> 2066 -<679b> <679b> 2068 -<67b0> <67b2> 2069 -<67b5> <67b5> 2072 -<67bb> <67bd> 2073 -<67c0> <67c0> 2077 -<67c2> <67c3> 2078 -<67c5> <67c5> 2080 -<67c8> <67c9> 2081 -<67d2> <67d2> 2083 -<67d7> <67d7> 2084 -<67d9> <67d9> 2085 -<67dc> <67dc> 2086 -<67e1> <67e1> 2087 -<67e6> <67e6> 2088 -<67f0> <67f0> 2089 -<67f2> <67f2> 2090 -<67f6> <67f7> 2091 -<67f9> <67f9> 2076 -<6814> <6814> 2094 -<6819> <6819> 2095 -<681d> <681d> 2096 -<681f> <681f> 2097 -<6827> <6827> 2099 -<6828> <6828> 2098 -<682c> <682d> 2100 -<682f> <6831> 2102 -<6833> <6833> 2105 -<683b> <683b> 2106 -<683f> <683f> 2107 -<6844> <6845> 2108 -<684a> <684a> 2110 -<684c> <684c> 2111 -<6852> <6852> 2093 -<6855> <6855> 2112 -<6857> <6858> 2113 -<685b> <685b> 2115 -<686b> <686b> 2116 -<686e> <6872> 2117 -<6875> <6875> 2122 -<6879> <687c> 2123 -<6882> <6882> 2127 -<6884> <6884> 2128 -<6886> <6886> 2129 -<6888> <6888> 2130 -<6896> <6896> 2131 -<6898> <6898> 2132 -<689a> <689a> 2133 -<689c> <689c> 2134 -<68a1> <68a1> 2135 -<68a3> <68a3> 2136 -<68a5> <68a5> 2137 -<68a9> <68aa> 2138 -<68ae> <68ae> 2140 -<68b2> <68b2> 2141 -<68bb> <68bb> 2142 -<68c5> <68c5> 2143 -<68c8> <68c8> 2144 -<68cc> <68cc> 2145 -<68cf> <68d1> 2146 -<68d3> <68d3> 2149 -<68d6> <68d6> 2150 -<68d9> <68d9> 2151 -<68dc> <68dd> 2152 -<68e5> <68e5> 2154 -<68e8> <68e8> 2155 -<68ea> <68ed> 2156 -<68f0> <68f1> 2160 -<68f5> <68f6> 2162 -<68fb> <68fd> 2164 -<6906> <6906> 2167 -<6909> <690a> 2168 -<6910> <6911> 2170 -<6913> <6913> 2172 -<6916> <6917> 2173 -<6931> <6931> 2175 -<6933> <6933> 2176 -<6935> <6935> 2177 -<6938> <6938> 2178 -<693b> <693b> 2179 -<6942> <6942> 2180 -<6945> <6945> 2181 -<6949> <6949> 2182 -<694e> <694e> 2183 -<6957> <6957> 2184 -<695b> <695b> 2185 -<6963> <6966> 2186 -<6968> <6969> 2190 -<696c> <696c> 2192 -<6970> <6972> 2193 -<697a> <697b> 2196 -endcidrange - -100 begincidrange -<697f> <6980> 2198 -<698d> <698d> 2200 -<6992> <6992> 2201 -<6996> <6996> 2202 -<6998> <6998> 2203 -<69a1> <69a1> 2204 -<69a5> <69a6> 2205 -<69a8> <69a8> 2207 -<69ab> <69ab> 2208 -<69ad> <69ad> 2209 -<69af> <69af> 2210 -<69b7> <69b8> 2211 -<69ba> <69ba> 2213 -<69bc> <69bc> 2214 -<69c5> <69c5> 2215 -<69c8> <69c8> 2216 -<69d1> <69d1> 2217 -<69d6> <69d7> 2218 -<69e2> <69e2> 2220 -<69e5> <69e5> 2221 -<69ee> <69ef> 2222 -<69f1> <69f1> 2224 -<69f3> <69f3> 2225 -<69f5> <69f5> 2226 -<69fe> <69fe> 2227 -<6a00> <6a01> 2228 -<6a03> <6a03> 2230 -<6a0f> <6a0f> 2231 -<6a11> <6a11> 2232 -<6a15> <6a15> 2233 -<6a1a> <6a1a> 2234 -<6a1d> <6a1d> 2235 -<6a20> <6a20> 2236 -<6a24> <6a24> 2237 -<6a28> <6a28> 2238 -<6a30> <6a30> 2239 -<6a32> <6a32> 2240 -<6a34> <6a34> 2241 -<6a37> <6a37> 2242 -<6a3b> <6a3b> 2243 -<6a3e> <6a3f> 2244 -<6a45> <6a46> 2246 -<6a49> <6a4a> 2248 -<6a4e> <6a4e> 2250 -<6a50> <6a52> 2251 -<6a55> <6a56> 2254 -<6a5b> <6a5b> 2256 -<6a64> <6a64> 2257 -<6a67> <6a67> 2258 -<6a6a> <6a6a> 2259 -<6a71> <6a71> 2260 -<6a73> <6a73> 2261 -<6a7e> <6a7e> 2262 -<6a81> <6a81> 2263 -<6a83> <6a83> 2264 -<6a86> <6a87> 2265 -<6a89> <6a89> 2267 -<6a8b> <6a8b> 2268 -<6a91> <6a91> 2269 -<6a9b> <6a9b> 2270 -<6a9d> <6a9f> 2271 -<6aa5> <6aa5> 2274 -<6aab> <6aab> 2275 -<6aaf> <6ab1> 2276 -<6ab4> <6ab4> 2279 -<6abd> <6abf> 2280 -<6ac6> <6ac6> 2283 -<6ac8> <6ac8> 2285 -<6ac9> <6ac9> 2284 -<6acc> <6acc> 2286 -<6ad0> <6ad0> 2287 -<6ad4> <6ad6> 2288 -<6adc> <6add> 2291 -<6ae4> <6ae4> 2293 -<6ae7> <6ae7> 2294 -<6aec> <6aec> 2295 -<6af0> <6af2> 2296 -<6afc> <6afd> 2299 -<6b02> <6b03> 2301 -<6b06> <6b07> 2303 -<6b09> <6b09> 2305 -<6b0f> <6b11> 2306 -<6b17> <6b17> 2309 -<6b1b> <6b1b> 2310 -<6b1e> <6b1e> 2311 -<6b24> <6b24> 2312 -<6b28> <6b28> 2313 -<6b2b> <6b2c> 2314 -<6b2f> <6b2f> 2316 -<6b35> <6b36> 2317 -<6b3b> <6b3b> 2319 -<6b3f> <6b3f> 2320 -<6b46> <6b46> 2321 -<6b4a> <6b4a> 2322 -<6b4d> <6b4d> 2323 -<6b52> <6b52> 2324 -<6b56> <6b56> 2325 -<6b58> <6b58> 2326 -<6b5d> <6b5d> 2327 -<6b60> <6b60> 2328 -endcidrange - -100 begincidrange -<6b67> <6b67> 2329 -<6b6b> <6b6b> 2330 -<6b6e> <6b6e> 2331 -<6b70> <6b70> 2332 -<6b75> <6b75> 2333 -<6b7d> <6b7e> 2334 -<6b82> <6b82> 2336 -<6b85> <6b85> 2337 -<6b97> <6b97> 2338 -<6b9b> <6b9b> 2339 -<6b9f> <6ba0> 2340 -<6ba2> <6ba3> 2342 -<6ba8> <6ba9> 2344 -<6bac> <6bae> 2346 -<6bb0> <6bb0> 2349 -<6bb8> <6bb9> 2350 -<6bbd> <6bbe> 2352 -<6bc3> <6bc4> 2354 -<6bc9> <6bc9> 2356 -<6bcc> <6bcc> 2357 -<6bd6> <6bd6> 2358 -<6bda> <6bda> 2359 -<6be1> <6be1> 2360 -<6be3> <6be3> 2361 -<6be6> <6be7> 2362 -<6bee> <6bee> 2364 -<6bf1> <6bf1> 2365 -<6bf7> <6bf7> 2366 -<6bf9> <6bf9> 2367 -<6bff> <6bff> 2368 -<6c02> <6c02> 2369 -<6c04> <6c05> 2370 -<6c09> <6c09> 2372 -<6c0d> <6c0e> 2373 -<6c10> <6c10> 2375 -<6c12> <6c12> 2376 -<6c19> <6c19> 2377 -<6c1f> <6c1f> 2378 -<6c26> <6c28> 2379 -<6c2c> <6c2c> 2382 -<6c2e> <6c2e> 2383 -<6c33> <6c33> 2384 -<6c35> <6c36> 2385 -<6c3a> <6c3b> 2387 -<6c3f> <6c3f> 2389 -<6c4a> <6c4b> 2390 -<6c4d> <6c4d> 2392 -<6c4f> <6c4f> 2393 -<6c52> <6c52> 2394 -<6c54> <6c54> 2395 -<6c59> <6c59> 2396 -<6c5b> <6c5c> 2397 -<6c67> <6c67> 2450 -<6c6b> <6c6b> 2399 -<6c6d> <6c6d> 2400 -<6c6f> <6c6f> 2401 -<6c74> <6c74> 2402 -<6c76> <6c76> 2403 -<6c78> <6c79> 2404 -<6c7b> <6c7b> 2406 -<6c85> <6c87> 2407 -<6c89> <6c89> 2410 -<6c94> <6c95> 2411 -<6c97> <6c98> 2413 -<6c9c> <6c9c> 2415 -<6c9f> <6c9f> 2416 -<6cb0> <6cb0> 2417 -<6cb2> <6cb2> 2418 -<6cb4> <6cb4> 2419 -<6cc2> <6cc2> 2420 -<6cc6> <6cc6> 2421 -<6ccd> <6ccd> 2422 -<6ccf> <6cd2> 2423 -<6cd4> <6cd4> 2427 -<6cd6> <6cd6> 2428 -<6cda> <6cda> 2429 -<6cdc> <6cdc> 2430 -<6ce0> <6ce0> 2431 -<6ce7> <6ce7> 2432 -<6ce9> <6ce9> 2433 -<6ceb> <6cec> 2434 -<6cee> <6cee> 2436 -<6cf2> <6cf2> 2437 -<6cf4> <6cf4> 2438 -<6d04> <6d04> 2439 -<6d07> <6d07> 2440 -<6d0a> <6d0a> 2441 -<6d0e> <6d0f> 2442 -<6d11> <6d11> 2444 -<6d13> <6d13> 2445 -<6d1a> <6d1a> 2446 -<6d26> <6d28> 2447 -<6d2e> <6d2f> 2451 -<6d31> <6d31> 2453 -<6d39> <6d39> 2454 -<6d3c> <6d3c> 2455 -<6d3f> <6d3f> 2456 -<6d57> <6d57> 2457 -<6d5e> <6d5f> 2458 -<6d61> <6d61> 2460 -endcidrange - -100 begincidrange -<6d65> <6d65> 2461 -<6d67> <6d67> 2462 -<6d6f> <6d70> 2463 -<6d7c> <6d7c> 2465 -<6d82> <6d82> 2466 -<6d87> <6d87> 2467 -<6d91> <6d92> 2468 -<6d94> <6d94> 2470 -<6d96> <6d98> 2471 -<6daa> <6daa> 2474 -<6dac> <6dac> 2475 -<6db4> <6db4> 2476 -<6db7> <6db7> 2477 -<6db9> <6db9> 2478 -<6dbd> <6dbd> 2479 -<6dbf> <6dbf> 2480 -<6dc4> <6dc4> 2481 -<6dc8> <6dc8> 2482 -<6dca> <6dca> 2483 -<6dce> <6dcf> 2484 -<6dd6> <6dd6> 2486 -<6ddb> <6ddb> 2487 -<6ddd> <6ddd> 2488 -<6ddf> <6de0> 2489 -<6de2> <6de2> 2491 -<6de5> <6de5> 2492 -<6de9> <6de9> 2493 -<6def> <6df0> 2494 -<6df4> <6df4> 2496 -<6df6> <6df6> 2497 -<6dfc> <6dfc> 2498 -<6e00> <6e00> 2499 -<6e04> <6e04> 2500 -<6e1e> <6e1e> 2501 -<6e22> <6e22> 2502 -<6e27> <6e27> 2503 -<6e32> <6e32> 2504 -<6e36> <6e36> 2505 -<6e39> <6e39> 2506 -<6e3b> <6e3c> 2507 -<6e44> <6e45> 2509 -<6e48> <6e49> 2511 -<6e4b> <6e4b> 2513 -<6e4f> <6e4f> 2514 -<6e51> <6e54> 2515 -<6e57> <6e57> 2519 -<6e5c> <6e5e> 2520 -<6e62> <6e63> 2523 -<6e68> <6e68> 2525 -<6e73> <6e73> 2526 -<6e7b> <6e7b> 2527 -<6e7d> <6e7d> 2528 -<6e8d> <6e8d> 2529 -<6e93> <6e93> 2530 -<6e99> <6e99> 2531 -<6ea0> <6ea0> 2532 -<6ea7> <6ea7> 2533 -<6ead> <6eae> 2534 -<6eb1> <6eb1> 2536 -<6eb3> <6eb3> 2537 -<6ebb> <6ebb> 2538 -<6ebf> <6ec1> 2539 -<6ec3> <6ec3> 2542 -<6ec7> <6ec8> 2543 -<6eca> <6eca> 2545 -<6ecd> <6ecf> 2546 -<6eeb> <6eeb> 2549 -<6eed> <6eee> 2550 -<6ef9> <6ef9> 2552 -<6efb> <6efb> 2553 -<6efd> <6efd> 2554 -<6f04> <6f04> 2555 -<6f08> <6f08> 2556 -<6f0a> <6f0a> 2557 -<6f0c> <6f0d> 2558 -<6f16> <6f16> 2560 -<6f18> <6f18> 2561 -<6f1a> <6f1b> 2562 -<6f26> <6f26> 2564 -<6f29> <6f2a> 2565 -<6f2d> <6f2d> 2573 -<6f2f> <6f30> 2567 -<6f33> <6f33> 2569 -<6f36> <6f36> 2570 -<6f3b> <6f3c> 2571 -<6f4f> <6f4f> 2574 -<6f51> <6f53> 2575 -<6f57> <6f57> 2578 -<6f59> <6f5a> 2579 -<6f5d> <6f5e> 2581 -<6f61> <6f62> 2583 -<6f68> <6f68> 2585 -<6f6c> <6f6c> 2586 -<6f7d> <6f7e> 2587 -<6f83> <6f83> 2589 -<6f87> <6f88> 2590 -<6f8b> <6f8d> 2592 -<6f90> <6f90> 2595 -<6f92> <6f94> 2596 -<6f96> <6f96> 2599 -endcidrange - -100 begincidrange -<6f9a> <6f9a> 2600 -<6f9f> <6fa0> 2601 -<6fa5> <6fa8> 2603 -<6fae> <6fb0> 2607 -<6fb5> <6fb6> 2610 -<6fbc> <6fbc> 2612 -<6fc5> <6fc5> 2613 -<6fc7> <6fc8> 2614 -<6fca> <6fca> 2616 -<6fda> <6fda> 2617 -<6fde> <6fde> 2618 -<6fe8> <6fe9> 2619 -<6ff0> <6ff0> 2621 -<6ff5> <6ff5> 2622 -<6ff9> <6ff9> 2623 -<6ffc> <6ffd> 2624 -<7000> <7000> 2626 -<7005> <7007> 2627 -<700d> <700d> 2630 -<7017> <7017> 2631 -<7020> <7020> 2632 -<7023> <7023> 2633 -<702f> <702f> 2634 -<7034> <7034> 2635 -<7037> <7037> 2636 -<7039> <7039> 2637 -<703c> <703c> 2638 -<7043> <7044> 2639 -<7048> <704b> 2641 -<704e> <704e> 2649 -<7054> <7055> 2645 -<705d> <705e> 2647 -<7064> <7065> 2650 -<706c> <706c> 2652 -<706e> <706e> 2653 -<7075> <7076> 2654 -<707e> <707e> 2656 -<7081> <7081> 2657 -<7085> <7086> 2658 -<7094> <7098> 2660 -<709b> <709b> 2665 -<70a4> <70a4> 2666 -<70ab> <70ab> 2667 -<70b0> <70b1> 2668 -<70b4> <70b4> 2670 -<70b7> <70b7> 2671 -<70ca> <70ca> 2672 -<70d1> <70d1> 2673 -<70d3> <70d6> 2674 -<70d8> <70d8> 2678 -<70dc> <70dc> 2679 -<70e4> <70e4> 2680 -<70fa> <70fa> 2681 -<7103> <7107> 2682 -<710b> <710c> 2687 -<710f> <710f> 2689 -<711e> <711e> 2690 -<7120> <7120> 2691 -<712b> <712b> 2692 -<712d> <712d> 2693 -<712f> <7131> 2694 -<7138> <7138> 2697 -<7141> <7141> 2698 -<7145> <7147> 2699 -<714a> <714b> 2702 -<7150> <7150> 2704 -<7152> <7152> 2705 -<7157> <7157> 2706 -<715a> <715a> 2707 -<715c> <715c> 2708 -<715e> <715e> 2709 -<7160> <7160> 2710 -<7168> <7168> 2711 -<7179> <7179> 2712 -<7180> <7180> 2713 -<7185> <7185> 2714 -<7187> <7187> 2715 -<718c> <718c> 2716 -<7192> <7192> 2717 -<719a> <719b> 2718 -<71a0> <71a0> 2720 -<71a2> <71a2> 2721 -<71af> <71b0> 2722 -<71b2> <71b3> 2724 -<71ba> <71ba> 2726 -<71bf> <71c1> 2727 -<71c4> <71c4> 2730 -<71cb> <71cc> 2731 -<71d3> <71d3> 2733 -<71d6> <71d6> 2734 -<71d9> <71da> 2735 -<71dc> <71dc> 2737 -<71f8> <71f8> 2738 -<71fe> <71fe> 2739 -<7200> <7200> 2740 -<7207> <7209> 2741 -<7213> <7213> 2744 -<7217> <7217> 2745 -<721a> <721a> 2746 -<721d> <721d> 2747 -endcidrange - -100 begincidrange -<721f> <721f> 2748 -<7224> <7224> 2749 -<722b> <722b> 2750 -<722f> <722f> 2751 -<7234> <7234> 2752 -<7238> <7239> 2753 -<7241> <7243> 2755 -<7245> <7245> 2758 -<724e> <7250> 2759 -<7253> <7253> 2762 -<7255> <7256> 2763 -<725a> <725a> 2765 -<725c> <725c> 2766 -<725e> <725e> 2767 -<7260> <7260> 2768 -<7263> <7263> 2769 -<7268> <7268> 2770 -<726b> <726b> 2771 -<726e> <726f> 2772 -<7271> <7271> 2774 -<7277> <7278> 2775 -<727b> <727c> 2777 -<727f> <727f> 2779 -<7284> <7284> 2780 -<7289> <7289> 2781 -<728d> <728e> 2782 -<7293> <7293> 2784 -<729b> <729b> 2785 -<72a8> <72a8> 2786 -<72ad> <72ae> 2787 -<72b1> <72b1> 2789 -<72b4> <72b4> 2790 -<72be> <72be> 2791 -<72c1> <72c1> 2792 -<72c7> <72c7> 2793 -<72c9> <72c9> 2794 -<72cc> <72cc> 2795 -<72d5> <72d6> 2796 -<72d8> <72d8> 2798 -<72df> <72df> 2799 -<72e5> <72e5> 2800 -<72f3> <72f4> 2801 -<72fa> <72fb> 2803 -<72fe> <72fe> 2805 -<7302> <7302> 2806 -<7304> <7305> 2807 -<7307> <7307> 2809 -<730b> <730b> 2810 -<730d> <730d> 2811 -<7312> <7313> 2812 -<7318> <7319> 2814 -<731e> <731e> 2816 -<7322> <7322> 2817 -<7324> <7324> 2818 -<7327> <7328> 2819 -<732c> <732c> 2821 -<7331> <7332> 2822 -<7335> <7335> 2824 -<733a> <733b> 2825 -<733d> <733d> 2827 -<7343> <7343> 2828 -<734d> <734d> 2829 -<7350> <7350> 2830 -<7352> <7352> 2831 -<7356> <7356> 2832 -<7358> <7358> 2833 -<735d> <7360> 2834 -<7366> <7367> 2838 -<7369> <7369> 2840 -<736b> <736c> 2841 -<736e> <736f> 2843 -<7371> <7371> 2845 -<7377> <7377> 2846 -<7379> <7379> 2847 -<737c> <737c> 2848 -<7380> <7381> 2849 -<7383> <7383> 2851 -<7385> <7386> 2852 -<738e> <738e> 2854 -<7390> <7390> 2855 -<7393> <7393> 2856 -<7395> <7395> 2857 -<7397> <7398> 2858 -<739c> <739c> 2860 -<739e> <73a0> 2861 -<73a2> <73a2> 2864 -<73a5> <73a6> 2865 -<73aa> <73ab> 2867 -<73ad> <73ad> 2869 -<73b5> <73b5> 2870 -<73b7> <73b7> 2871 -<73b9> <73b9> 2872 -<73bc> <73bd> 2873 -<73bf> <73bf> 2875 -<73c5> <73c6> 2876 -<73c9> <73c9> 2878 -<73cb> <73cc> 2879 -<73cf> <73cf> 2881 -<73d2> <73d3> 2882 -<73d6> <73d6> 2884 -endcidrange - -100 begincidrange -<73d9> <73d9> 2885 -<73dd> <73dd> 2886 -<73e1> <73e1> 2887 -<73e3> <73e3> 2888 -<73e6> <73e7> 2889 -<73e9> <73e9> 2891 -<73f4> <73f5> 2892 -<73f7> <73f7> 2894 -<73f9> <73fb> 2895 -<73fd> <73fd> 2898 -<73ff> <73ff> 2899 -<7400> <7401> 2900 -<7404> <7404> 2902 -<7407> <7407> 2903 -<740a> <740a> 2904 -<7411> <7411> 2905 -<741a> <741b> 2906 -<7424> <7424> 2908 -<7426> <7426> 2909 -<7428> <7431> 2910 -<7439> <7439> 2920 -<7440> <7440> 2921 -<7443> <7444> 2922 -<7446> <7447> 2924 -<744b> <744b> 2926 -<744d> <744d> 2927 -<7451> <7452> 2928 -<7457> <7457> 2930 -<745d> <745d> 2931 -<7462> <7462> 2932 -<7466> <7468> 2933 -<746b> <746b> 2936 -<746d> <746e> 2937 -<7471> <7472> 2939 -<7480> <7481> 2941 -<7485> <7487> 2943 -<7489> <7489> 2946 -<748f> <7492> 2947 -<7498> <749a> 2951 -<749c> <749c> 2954 -<749f> <74a1> 2955 -<74a3> <74a3> 2958 -<74a6> <74a6> 2959 -<74a8> <74ab> 2960 -<74ae> <74af> 2964 -<74b1> <74b2> 2966 -<74b5> <74b5> 2968 -<74b9> <74b9> 2969 -<74bb> <74bb> 2970 -<74bf> <74bf> 2971 -<74c8> <74c9> 2972 -<74cc> <74cc> 2974 -<74d0> <74d0> 2975 -<74d3> <74d3> 2976 -<74d8> <74d8> 2977 -<74da> <74db> 2978 -<74de> <74df> 2980 -<74e4> <74e4> 2982 -<74e8> <74e8> 2983 -<74ea> <74eb> 2984 -<74ef> <74ef> 2986 -<74f4> <74f4> 2987 -<74fa> <74fc> 2988 -<74ff> <74ff> 2991 -<7506> <7506> 2992 -<7512> <7512> 2993 -<7516> <7517> 2994 -<7520> <7521> 2996 -<7524> <7524> 2998 -<7527> <7527> 2999 -<7529> <752a> 3000 -<752f> <752f> 3002 -<7536> <7536> 3003 -<7539> <7539> 3004 -<753d> <7540> 3005 -<7543> <7543> 3009 -<7547> <7548> 3010 -<754e> <754e> 3012 -<7550> <7550> 3013 -<7552> <7552> 3014 -<7557> <7557> 3015 -<755e> <755f> 3016 -<7561> <7561> 3018 -<756f> <756f> 3019 -<7571> <7571> 3020 -<7579> <757e> 3021 -<7581> <7581> 3027 -<7585> <7585> 3028 -<7590> <7590> 3029 -<7592> <7593> 3030 -<7595> <7595> 3032 -<7599> <7599> 3033 -<759c> <759c> 3034 -<75a2> <75a2> 3035 -<75a4> <75a4> 3036 -<75b4> <75b4> 3037 -<75ba> <75ba> 3038 -<75bf> <75c1> 3039 -<75c4> <75c4> 3042 -<75c6> <75c6> 3043 -endcidrange - -100 begincidrange -<75cc> <75cc> 3044 -<75ce> <75cf> 3045 -<75d7> <75d7> 3047 -<75dc> <75dc> 3048 -<75df> <75e1> 3049 -<75e4> <75e4> 3052 -<75e7> <75e7> 3053 -<75ec> <75ec> 3054 -<75ee> <75ef> 3055 -<75f1> <75f1> 3057 -<75f9> <75f9> 3058 -<7600> <7600> 3059 -<7602> <7604> 3060 -<7607> <7608> 3063 -<760a> <760a> 3065 -<760c> <760c> 3066 -<760f> <760f> 3067 -<7612> <7613> 3068 -<7615> <7616> 3070 -<7619> <7619> 3072 -<761b> <761e> 3073 -<7623> <7623> 3077 -<7625> <7626> 3078 -<7629> <7629> 3080 -<762d> <762d> 3081 -<7632> <7633> 3082 -<7635> <7635> 3084 -<7638> <763a> 3085 -<763c> <763c> 3088 -<7640> <7641> 3090 -<7643> <7645> 3092 -<7649> <7649> 3095 -<764a> <764a> 3089 -<764b> <764b> 3096 -<7655> <7655> 3097 -<7659> <7659> 3098 -<765f> <765f> 3099 -<7664> <7665> 3100 -<766d> <766f> 3102 -<7671> <7671> 3105 -<7674> <7674> 3106 -<7681> <7681> 3107 -<7685> <7685> 3108 -<768c> <768d> 3109 -<7695> <7695> 3111 -<769b> <769d> 3112 -<769f> <76a0> 3115 -<76a2> <76a8> 3117 -<76aa> <76aa> 3124 -<76ad> <76ad> 3125 -<76bd> <76bd> 3126 -<76c1> <76c1> 3127 -<76c5> <76c5> 3128 -<76c9> <76c9> 3129 -<76cb> <76cc> 3130 -<76ce> <76ce> 3132 -<76d4> <76d4> 3133 -<76d9> <76d9> 3134 -<76e0> <76e0> 3135 -<76e6> <76e6> 3136 -<76e8> <76e8> 3137 -<76ec> <76ec> 3138 -<76f0> <76f1> 3139 -<76f6> <76f6> 3141 -<76f9> <76f9> 3142 -<76fc> <76fc> 3143 -<7700> <7700> 3144 -<7706> <7706> 3145 -<770a> <770a> 3146 -<770e> <770e> 3147 -<7712> <7712> 3148 -<7714> <7715> 3149 -<7717> <7717> 3151 -<7719> <771a> 3152 -<771c> <771c> 3154 -<7722> <7722> 3155 -<7728> <7728> 3156 -<772d> <772f> 3157 -<7734> <7736> 3160 -<7739> <7739> 3163 -<773d> <773e> 3164 -<7742> <7742> 3166 -<7745> <7746> 3167 -<774a> <774a> 3169 -<774d> <774f> 3170 -<7752> <7752> 3173 -<7756> <7757> 3174 -<775c> <775c> 3176 -<775e> <7760> 3177 -<7762> <7762> 3180 -<7764> <7764> 3181 -<7767> <7767> 3182 -<776a> <776a> 3183 -<776c> <776c> 3184 -<7770> <7770> 3185 -<7772> <7774> 3186 -<777a> <777a> 3189 -<777d> <777d> 3190 -<7780> <7780> 3191 -<7784> <7784> 3192 -endcidrange - -100 begincidrange -<778c> <778d> 3193 -<7794> <7796> 3195 -<779a> <779a> 3198 -<779f> <779f> 3199 -<77a2> <77a2> 3200 -<77a7> <77a7> 3201 -<77aa> <77aa> 3202 -<77ae> <77af> 3203 -<77b1> <77b1> 3205 -<77b5> <77b5> 3206 -<77be> <77be> 3207 -<77c3> <77c3> 3208 -<77c9> <77c9> 3209 -<77d1> <77d2> 3210 -<77d5> <77d5> 3212 -<77d9> <77d9> 3213 -<77de> <77e0> 3214 -<77e4> <77e4> 3217 -<77e6> <77e6> 3218 -<77ea> <77ea> 3219 -<77ec> <77ec> 3220 -<77f0> <77f1> 3221 -<77f4> <77f4> 3223 -<77f8> <77f8> 3224 -<77fb> <77fb> 3225 -<7805> <7806> 3226 -<7809> <7809> 3228 -<780d> <780e> 3229 -<7811> <7811> 3231 -<781d> <781d> 3232 -<7821> <7823> 3233 -<782d> <782e> 3236 -<7830> <7830> 3238 -<7835> <7835> 3239 -<7837> <7837> 3240 -<7843> <7844> 3241 -<7847> <7848> 3243 -<784c> <784c> 3245 -<784e> <784e> 3246 -<7852> <7852> 3247 -<785c> <785c> 3248 -<785e> <785e> 3249 -<7860> <7861> 3250 -<7863> <7864> 3252 -<7868> <7868> 3254 -<786a> <786a> 3255 -<786e> <786e> 3256 -<787a> <787a> 3257 -<787e> <787e> 3258 -<788a> <788a> 3259 -<788f> <788f> 3260 -<7894> <7894> 3261 -<7898> <7898> 3262 -<789d> <789f> 3264 -<78a1> <78a1> 3263 -<78a4> <78a4> 3267 -<78a8> <78a8> 3268 -<78ac> <78ad> 3269 -<78b0> <78b3> 3271 -<78bb> <78bb> 3275 -<78bd> <78bd> 3276 -<78bf> <78bf> 3277 -<78c7> <78c9> 3278 -<78cc> <78cc> 3281 -<78ce> <78ce> 3282 -<78d2> <78d3> 3283 -<78d5> <78d6> 3285 -<78db> <78db> 3288 -<78df> <78e1> 3289 -<78e4> <78e4> 3287 -<78e6> <78e6> 3292 -<78ea> <78ea> 3293 -<78f2> <78f3> 3294 -<78f6> <78f7> 3297 -<78fa> <78fb> 3299 -<78ff> <78ff> 3301 -<7900> <7900> 3296 -<7906> <7906> 3302 -<790c> <790c> 3303 -<7910> <7910> 3304 -<791a> <791a> 3305 -<791c> <791c> 3306 -<791e> <7920> 3307 -<7925> <7925> 3310 -<7927> <7927> 3311 -<7929> <7929> 3312 -<792d> <792d> 3313 -<7931> <7931> 3314 -<7934> <7935> 3315 -<793b> <793b> 3317 -<793d> <793d> 3318 -<793f> <793f> 3319 -<7944> <7946> 3320 -<794a> <794b> 3323 -<794f> <794f> 3325 -<7951> <7951> 3326 -<7954> <7954> 3327 -<7958> <7958> 3328 -<795b> <795c> 3329 -<7967> <7967> 3331 -endcidrange - -100 begincidrange -<7969> <7969> 3332 -<796b> <796b> 3333 -<7972> <7972> 3334 -<7979> <7979> 3335 -<797b> <797c> 3336 -<797e> <797e> 3338 -<798b> <798c> 3339 -<7991> <7991> 3341 -<7993> <7996> 3342 -<7998> <7998> 3346 -<799b> <799c> 3347 -<79a1> <79a1> 3349 -<79a8> <79a9> 3350 -<79ab> <79ab> 3352 -<79af> <79af> 3353 -<79b1> <79b1> 3354 -<79b4> <79b4> 3355 -<79b8> <79b8> 3356 -<79bb> <79bb> 3357 -<79c2> <79c2> 3358 -<79c4> <79c4> 3359 -<79c7> <79c8> 3360 -<79ca> <79ca> 3362 -<79cf> <79cf> 3363 -<79d4> <79d4> 3364 -<79d6> <79d6> 3365 -<79da> <79da> 3366 -<79dd> <79de> 3367 -<79e0> <79e0> 3369 -<79e2> <79e2> 3370 -<79e5> <79e5> 3371 -<79ea> <79eb> 3372 -<79ed> <79ed> 3374 -<79f1> <79f1> 3375 -<79f8> <79f8> 3376 -<79fc> <79fc> 3377 -<7a02> <7a03> 3378 -<7a07> <7a07> 3380 -<7a09> <7a0a> 3381 -<7a0c> <7a0c> 3383 -<7a11> <7a11> 3384 -<7a15> <7a15> 3385 -<7a1b> <7a1b> 3386 -<7a1e> <7a1e> 3387 -<7a21> <7a21> 3388 -<7a27> <7a27> 3389 -<7a2b> <7a2b> 3390 -<7a2d> <7a2d> 3391 -<7a2f> <7a30> 3392 -<7a34> <7a35> 3394 -<7a38> <7a3a> 3396 -<7a44> <7a45> 3399 -<7a47> <7a48> 3401 -<7a4c> <7a4c> 3403 -<7a55> <7a56> 3404 -<7a59> <7a59> 3406 -<7a5c> <7a5d> 3407 -<7a5f> <7a60> 3409 -<7a65> <7a65> 3411 -<7a67> <7a67> 3412 -<7a6a> <7a6a> 3413 -<7a6d> <7a6d> 3414 -<7a75> <7a75> 3415 -<7a78> <7a78> 3416 -<7a7e> <7a7e> 3417 -<7a80> <7a80> 3418 -<7a82> <7a82> 3419 -<7a85> <7a86> 3420 -<7a8a> <7a8b> 3422 -<7a90> <7a91> 3424 -<7a94> <7a94> 3426 -<7a9e> <7a9e> 3427 -<7aa0> <7aa0> 3428 -<7aa3> <7aa3> 3429 -<7aac> <7aac> 3430 -<7ab3> <7ab3> 3431 -<7ab5> <7ab5> 3432 -<7ab9> <7ab9> 3433 -<7abb> <7abc> 3434 -<7ac6> <7ac6> 3436 -<7ac9> <7ac9> 3437 -<7acc> <7acc> 3438 -<7ace> <7ace> 3439 -<7ad1> <7ad1> 3440 -<7adb> <7adb> 3441 -<7ae8> <7ae9> 3442 -<7aeb> <7aec> 3444 -<7af1> <7af1> 3446 -<7af4> <7af4> 3447 -<7afb> <7afb> 3448 -<7afd> <7afe> 3449 -<7b07> <7b07> 3451 -<7b14> <7b14> 3452 -<7b1f> <7b1f> 3453 -<7b23> <7b23> 3454 -<7b27> <7b27> 3455 -<7b29> <7b2b> 3456 -<7b2d> <7b31> 3459 -<7b34> <7b34> 3464 -<7b3d> <7b3d> 3465 -endcidrange - -100 begincidrange -<7b3f> <7b41> 3466 -<7b47> <7b47> 3469 -<7b4e> <7b4e> 3470 -<7b55> <7b55> 3471 -<7b60> <7b60> 3472 -<7b64> <7b64> 3473 -<7b66> <7b66> 3474 -<7b69> <7b6a> 3475 -<7b6d> <7b6d> 3477 -<7b6f> <7b6f> 3478 -<7b72> <7b73> 3479 -<7b77> <7b77> 3481 -<7b84> <7b84> 3482 -<7b89> <7b89> 3483 -<7b8e> <7b8e> 3484 -<7b90> <7b91> 3485 -<7b96> <7b96> 3487 -<7b9b> <7b9b> 3488 -<7b9e> <7b9e> 3489 -<7ba0> <7ba0> 3490 -<7ba5> <7ba5> 3491 -<7bac> <7bac> 3492 -<7baf> <7bb0> 3493 -<7bb2> <7bb2> 3495 -<7bb5> <7bb6> 3496 -<7bba> <7bbd> 3498 -<7bc2> <7bc2> 3502 -<7bc5> <7bc5> 3503 -<7bc8> <7bc8> 3504 -<7bca> <7bca> 3505 -<7bd4> <7bd4> 3506 -<7bd6> <7bd7> 3507 -<7bd9> <7bdb> 3509 -<7be8> <7be8> 3512 -<7bea> <7bea> 3513 -<7bf2> <7bf2> 3514 -<7bf4> <7bf5> 3515 -<7bf8> <7bfa> 3517 -<7bfc> <7bfc> 3520 -<7bfe> <7bfe> 3521 -<7c01> <7c04> 3522 -<7c06> <7c06> 3526 -<7c09> <7c09> 3527 -<7c0b> <7c0c> 3528 -<7c0e> <7c0f> 3530 -<7c19> <7c19> 3532 -<7c1b> <7c1b> 3533 -<7c20> <7c20> 3534 -<7c25> <7c26> 3535 -<7c28> <7c28> 3537 -<7c2c> <7c2c> 3538 -<7c31> <7c31> 3539 -<7c33> <7c34> 3540 -<7c36> <7c36> 3542 -<7c39> <7c3a> 3543 -<7c46> <7c46> 3545 -<7c4a> <7c4a> 3546 -<7c51> <7c53> 3548 -<7c55> <7c55> 3547 -<7c59> <7c5e> 3551 -<7c61> <7c61> 3557 -<7c63> <7c63> 3558 -<7c67> <7c67> 3559 -<7c69> <7c69> 3560 -<7c6d> <7c6e> 3561 -<7c70> <7c70> 3563 -<7c72> <7c72> 3564 -<7c79> <7c79> 3565 -<7c7c> <7c7d> 3566 -<7c86> <7c87> 3568 -<7c8f> <7c8f> 3570 -<7c94> <7c94> 3571 -<7c9e> <7c9e> 3572 -<7ca0> <7ca0> 3573 -<7ca6> <7ca6> 3574 -<7cb0> <7cb0> 3575 -<7cb6> <7cb7> 3576 -<7cba> <7cbc> 3578 -<7cbf> <7cbf> 3581 -<7cc4> <7cc4> 3582 -<7cc7> <7cc9> 3583 -<7ccd> <7ccd> 3586 -<7ccf> <7ccf> 3587 -<7cd3> <7cd5> 3588 -<7cd7> <7cd7> 3591 -<7cd9> <7cda> 3592 -<7cdd> <7cdd> 3594 -<7ce6> <7ce6> 3595 -<7ce9> <7ce9> 3596 -<7ceb> <7ceb> 3597 -<7cf5> <7cf5> 3598 -<7d03> <7d03> 3599 -<7d07> <7d09> 3600 -<7d0f> <7d0f> 3603 -<7d11> <7d13> 3604 -<7d16> <7d16> 3607 -<7d1d> <7d1e> 3608 -<7d23> <7d23> 3610 -<7d26> <7d26> 3611 -<7d2a> <7d2a> 3612 -endcidrange - -100 begincidrange -<7d2d> <7d2d> 3613 -<7d31> <7d31> 3614 -<7d3c> <7d3e> 3615 -<7d40> <7d41> 3618 -<7d47> <7d48> 3620 -<7d4d> <7d4d> 3622 -<7d51> <7d51> 3623 -<7d53> <7d53> 3624 -<7d57> <7d57> 3625 -<7d59> <7d5a> 3626 -<7d5c> <7d5d> 3628 -<7d65> <7d65> 3630 -<7d67> <7d67> 3631 -<7d6a> <7d6a> 3632 -<7d70> <7d70> 3633 -<7d78> <7d78> 3634 -<7d7a> <7d7b> 3635 -<7d7f> <7d7f> 3637 -<7d81> <7d83> 3638 -<7d85> <7d86> 3641 -<7d88> <7d88> 3643 -<7d8b> <7d8d> 3644 -<7d91> <7d91> 3647 -<7d96> <7d97> 3648 -<7d9d> <7d9e> 3650 -<7da6> <7da7> 3652 -<7daa> <7daa> 3654 -<7db3> <7db3> 3655 -<7db6> <7db7> 3656 -<7db9> <7db9> 3658 -<7dc2> <7dc6> 3659 -<7dcc> <7dce> 3664 -<7dd7> <7dd7> 3667 -<7dd9> <7dd9> 3668 -<7de2> <7de2> 3670 -<7de5> <7de6> 3671 -<7dea> <7deb> 3673 -<7ded> <7ded> 3675 -<7df1> <7df1> 3676 -<7df5> <7df6> 3677 -<7df9> <7dfa> 3679 -<7e00> <7e00> 3669 -<7e08> <7e08> 3681 -<7e10> <7e11> 3682 -<7e15> <7e15> 3684 -<7e17> <7e17> 3685 -<7e1c> <7e1d> 3686 -<7e20> <7e20> 3688 -<7e27> <7e28> 3689 -<7e2c> <7e2d> 3691 -<7e2f> <7e2f> 3693 -<7e33> <7e33> 3694 -<7e36> <7e36> 3695 -<7e3f> <7e3f> 3696 -<7e44> <7e45> 3697 -<7e47> <7e47> 3699 -<7e4e> <7e4e> 3700 -<7e50> <7e50> 3701 -<7e52> <7e52> 3702 -<7e58> <7e58> 3703 -<7e5f> <7e5f> 3704 -<7e61> <7e62> 3705 -<7e65> <7e65> 3707 -<7e6b> <7e6b> 3708 -<7e6e> <7e6f> 3709 -<7e73> <7e73> 3711 -<7e78> <7e78> 3712 -<7e7e> <7e7e> 3713 -<7e81> <7e81> 3714 -<7e86> <7e87> 3715 -<7e8a> <7e8a> 3717 -<7e8d> <7e8d> 3718 -<7e91> <7e91> 3719 -<7e95> <7e95> 3720 -<7e98> <7e98> 3721 -<7e9a> <7e9a> 3722 -<7e9d> <7e9e> 3723 -<7f3b> <7f3b> 3726 -<7f3c> <7f3c> 3725 -<7f3d> <7f3f> 3727 -<7f43> <7f44> 3730 -<7f47> <7f47> 3732 -<7f4f> <7f4f> 3733 -<7f52> <7f53> 3734 -<7f5b> <7f5d> 3736 -<7f61> <7f61> 3739 -<7f63> <7f66> 3740 -<7f6d> <7f6d> 3744 -<7f71> <7f71> 3745 -<7f7d> <7f80> 3746 -<7f8b> <7f8b> 3750 -<7f8d> <7f8d> 3751 -<7f8f> <7f91> 3752 -<7f96> <7f97> 3755 -<7f9c> <7f9c> 3757 -<7fa1> <7fa2> 3758 -<7fa6> <7fa6> 3760 -<7faa> <7faa> 3761 -<7fad> <7fad> 3762 -<7fb4> <7fb4> 3763 -endcidrange - -100 begincidrange -<7fbc> <7fbc> 3764 -<7fbf> <7fc0> 3765 -<7fc3> <7fc3> 3767 -<7fc8> <7fc8> 3768 -<7fce> <7fcf> 3769 -<7fdb> <7fdb> 3771 -<7fdf> <7fdf> 3772 -<7fe3> <7fe3> 3773 -<7fe5> <7fe5> 3774 -<7fe8> <7fe8> 3775 -<7fec> <7fec> 3776 -<7fee> <7fef> 3777 -<7ff2> <7ff2> 3779 -<7ffa> <7ffa> 3780 -<7ffd> <7fff> 3781 -<8007> <8008> 3784 -<800a> <800a> 3786 -<800d> <800f> 3787 -<8011> <8011> 3790 -<8013> <8014> 3791 -<8016> <8016> 3793 -<801d> <8020> 3794 -<8024> <8024> 3798 -<8026> <8026> 3799 -<802c> <802c> 3800 -<802e> <802e> 3801 -<8030> <8030> 3802 -<8034> <8035> 3803 -<8037> <8037> 3805 -<8039> <803a> 3806 -<803c> <803c> 3808 -<803e> <803e> 3809 -<8040> <8040> 3810 -<8044> <8044> 3811 -<8060> <8060> 3812 -<8064> <8064> 3813 -<8066> <8066> 3814 -<806d> <806d> 3815 -<8071> <8071> 3816 -<8075> <8075> 3817 -<8081> <8081> 3818 -<8088> <8088> 3819 -<808e> <808e> 3820 -<809c> <809c> 3821 -<809e> <809e> 3822 -<80a6> <80a7> 3823 -<80ab> <80ab> 3825 -<80b8> <80b9> 3826 -<80c8> <80c8> 3828 -<80cd> <80cd> 3829 -<80cf> <80cf> 3830 -<80d2> <80d2> 3831 -<80d4> <80d5> 3832 -<80d7> <80d8> 3834 -<80e0> <80e0> 3836 -<80ed> <80ee> 3837 -<80f0> <80f0> 3839 -<80f2> <80f3> 3840 -<80f6> <80f6> 3842 -<80f9> <80fa> 3843 -<80fe> <80fe> 3845 -<8103> <8103> 3846 -<810b> <810b> 3847 -<8116> <8118> 3848 -<811c> <811c> 3851 -<811e> <811e> 3852 -<8120> <8120> 3853 -<8124> <8124> 3854 -<8127> <8127> 3855 -<812c> <812c> 3856 -<8130> <8130> 3857 -<8135> <8135> 3858 -<813a> <813a> 3859 -<813c> <813c> 3860 -<8145> <8145> 3861 -<8147> <8147> 3862 -<814a> <814a> 3863 -<814c> <814c> 3864 -<8152> <8152> 3865 -<8157> <8157> 3866 -<8160> <8161> 3867 -<8167> <8169> 3869 -<816d> <816d> 3872 -<816f> <816f> 3873 -<8177> <8177> 3874 -<8181> <8181> 3875 -<8184> <8186> 3877 -<818b> <818b> 3880 -<818e> <818e> 3881 -<8190> <8190> 3876 -<8196> <8196> 3882 -<8198> <8198> 3883 -<819b> <819b> 3884 -<819e> <819e> 3885 -<81a2> <81a2> 3886 -<81ae> <81ae> 3887 -<81b2> <81b2> 3888 -<81b4> <81b4> 3889 -<81bb> <81bb> 3890 -<81c3> <81c3> 3892 -endcidrange - -100 begincidrange -<81c5> <81c5> 3893 -<81ca> <81ca> 3894 -<81cb> <81cb> 3891 -<81ce> <81cf> 3895 -<81d5> <81d5> 3897 -<81d7> <81d7> 3898 -<81db> <81db> 3899 -<81dd> <81de> 3900 -<81e1> <81e1> 3902 -<81e4> <81e4> 3903 -<81eb> <81ec> 3904 -<81f0> <81f2> 3906 -<81f5> <81f6> 3909 -<81f8> <81f9> 3911 -<81fd> <81fd> 3913 -<81ff> <81ff> 3914 -<8200> <8200> 3915 -<8203> <8203> 3916 -<820f> <820f> 3917 -<8213> <8214> 3918 -<8219> <821a> 3920 -<821d> <821d> 3922 -<8221> <8222> 3923 -<8228> <8228> 3925 -<8232> <8232> 3926 -<8234> <8234> 3927 -<823a> <823a> 3928 -<8243> <8246> 3929 -<824b> <824b> 3933 -<824e> <824f> 3934 -<8251> <8251> 3936 -<8256> <8256> 3937 -<825c> <825c> 3938 -<8260> <8260> 3939 -<8263> <8263> 3940 -<8267> <8267> 3941 -<826d> <826d> 3942 -<8274> <8274> 3943 -<827b> <827b> 3944 -<827d> <827d> 3945 -<827f> <8281> 3946 -<8283> <8284> 3949 -<8287> <8287> 3951 -<8289> <828a> 3952 -<828e> <828e> 3954 -<8291> <8291> 3955 -<8294> <8294> 3956 -<8296> <8296> 3957 -<8298> <8298> 3958 -<829a> <829b> 3959 -<82a0> <82a1> 3961 -<82a3> <82a4> 3963 -<82a7> <82aa> 3965 -<82ae> <82ae> 3969 -<82b0> <82b0> 3970 -<82b2> <82b2> 3971 -<82b4> <82b4> 3972 -<82b7> <82b7> 3973 -<82ba> <82ba> 3974 -<82bc> <82bc> 3975 -<82be> <82bf> 3976 -<82c6> <82c6> 3978 -<82d0> <82d0> 3979 -<82d5> <82d5> 3980 -<82da> <82da> 3981 -<82e0> <82e0> 3982 -<82e2> <82e2> 3983 -<82e4> <82e4> 3984 -<82e8> <82e8> 3985 -<82ea> <82ea> 3986 -<82ed> <82ed> 3987 -<82ef> <82ef> 3988 -<82f6> <82f7> 3989 -<82fd> <82fe> 3991 -<8300> <8301> 3993 -<8307> <8308> 3995 -<830a> <830b> 3997 -<831b> <831b> 4000 -<831d> <831f> 4001 -<8321> <8322> 4004 -<832c> <832e> 4006 -<8330> <8330> 4009 -<8333> <8333> 4010 -<8337> <8337> 4011 -<833a> <833a> 4012 -<833c> <833d> 4013 -<8342> <8344> 4015 -<8347> <8347> 4018 -<834d> <834e> 4019 -<8351> <8351> 4021 -<8353> <8353> 4056 -<8354> <8354> 3999 -<8355> <8357> 4022 -<8370> <8370> 4025 -<8378> <8378> 4026 -<837d> <837d> 4027 -<837f> <8380> 4028 -<8382> <8382> 4030 -<8384> <8384> 4031 -<8386> <8386> 4032 -endcidrange - -100 begincidrange -<838d> <838d> 4033 -<8392> <8392> 4034 -<8394> <8395> 4035 -<8398> <8399> 4037 -<839b> <839d> 4039 -<83a6> <83a7> 4042 -<83a9> <83a9> 4044 -<83ac> <83ac> 4045 -<83ad> <83ad> 4070 -<83be> <83c0> 4046 -<83c7> <83c7> 4049 -<83c9> <83c9> 4050 -<83cf> <83d1> 4051 -<83d4> <83d4> 4054 -<83dd> <83dd> 4055 -<83e8> <83e8> 4057 -<83ea> <83ea> 4058 -<83f6> <83f6> 4059 -<83f8> <83f9> 4060 -<83fc> <83fc> 4062 -<8401> <8401> 4063 -<8406> <8406> 4064 -<840a> <840a> 4065 -<840f> <840f> 4066 -<8411> <8411> 4067 -<8415> <8415> 4068 -<8419> <8419> 4069 -<842f> <842f> 4071 -<8439> <8439> 4072 -<8445> <8445> 4073 -<8447> <8448> 4074 -<844a> <844a> 4076 -<844d> <844d> 4077 -<844f> <844f> 4078 -<8451> <8452> 4079 -<8456> <8456> 4081 -<8458> <845a> 4082 -<845c> <845c> 4085 -<8460> <8460> 4086 -<8464> <8465> 4087 -<8467> <8467> 4089 -<846a> <846a> 4090 -<8470> <8470> 4091 -<8473> <8474> 4092 -<8476> <8476> 4094 -<8478> <8478> 4095 -<847c> <847d> 4096 -<8481> <8481> 4098 -<8485> <8485> 4099 -<8492> <8493> 4100 -<8495> <8495> 4102 -<849e> <849e> 4103 -<84a6> <84a6> 4104 -<84a8> <84aa> 4105 -<84af> <84af> 4108 -<84b1> <84b1> 4109 -<84b4> <84b4> 4110 -<84ba> <84ba> 4111 -<84bd> <84be> 4112 -<84c0> <84c0> 4114 -<84c2> <84c2> 4115 -<84c7> <84c8> 4116 -<84cc> <84cc> 4118 -<84cf> <84cf> 4119 -<84d3> <84d3> 4120 -<84dc> <84dc> 4121 -<84e7> <84e7> 4122 -<84ea> <84ea> 4123 -<84ef> <84f2> 4124 -<84f7> <84f7> 4128 -<84fa> <84fb> 4130 -<84fd> <84fd> 4132 -<8502> <8503> 4133 -<8507> <8507> 4135 -<850c> <850c> 4136 -<850e> <850e> 4137 -<8510> <8510> 4138 -<851c> <851c> 4139 -<851e> <851e> 4140 -<8522> <8525> 4141 -<8527> <8527> 4145 -<852a> <852b> 4146 -<852f> <852f> 4148 -<8532> <8532> 4129 -<8533> <8534> 4149 -<8536> <8536> 4151 -<853f> <853f> 4152 -<8546> <8546> 4153 -<854f> <8553> 4154 -<8556> <8556> 4159 -<8559> <8559> 4160 -<855c> <8562> 4161 -<8564> <8564> 4168 -<856b> <856b> 4169 -<856f> <856f> 4170 -<8579> <857b> 4171 -<857d> <857d> 4174 -<857f> <857f> 4175 -<8581> <8581> 4176 -<8585> <8586> 4177 -endcidrange - -100 begincidrange -<8589> <8589> 4179 -<858b> <858c> 4180 -<858f> <858f> 4182 -<8593> <8593> 4183 -<8598> <8598> 4184 -<859d> <859d> 4185 -<859f> <85a0> 4186 -<85a2> <85a2> 4188 -<85a5> <85a5> 4189 -<85a7> <85a7> 4190 -<85ad> <85ad> 4204 -<85b4> <85b4> 4191 -<85b6> <85b8> 4192 -<85bc> <85bf> 4195 -<85c2> <85c2> 4199 -<85c7> <85c7> 4200 -<85ca> <85cb> 4201 -<85ce> <85ce> 4203 -<85d8> <85d8> 4205 -<85da> <85da> 4206 -<85df> <85e0> 4207 -<85e6> <85e6> 4209 -<85e8> <85e8> 4210 -<85ed> <85ed> 4211 -<85f3> <85f3> 4212 -<85f6> <85f6> 4213 -<85fc> <85fc> 4214 -<85ff> <85ff> 4215 -<8600> <8600> 4216 -<8604> <8605> 4217 -<860d> <860e> 4219 -<8610> <8612> 4221 -<8618> <8619> 4224 -<861b> <861b> 4226 -<861e> <861e> 4227 -<8621> <8621> 4228 -<8627> <8627> 4229 -<8629> <8629> 4230 -<8636> <8636> 4231 -<8638> <8638> 4232 -<863a> <863a> 4233 -<863c> <863d> 4234 -<8640> <8640> 4236 -<8641> <8641> 1088 -<8642> <8642> 4237 -<8646> <8646> 4238 -<8652> <8653> 4239 -<8656> <8659> 4241 -<865d> <865d> 4245 -<8660> <8664> 4246 -<8669> <8669> 4251 -<866c> <866c> 4252 -<866f> <866f> 4253 -<8675> <8677> 4254 -<867a> <867a> 4257 -<8688> <8688> 4291 -<868d> <868d> 4258 -<8691> <8691> 4259 -<8696> <8696> 4260 -<8698> <8698> 4261 -<869a> <869a> 4262 -<869c> <869c> 4263 -<86a1> <86a1> 4264 -<86a6> <86a8> 4265 -<86ad> <86ad> 4268 -<86b1> <86b1> 4269 -<86b3> <86b5> 4270 -<86b7> <86b9> 4273 -<86bf> <86c1> 4276 -<86c3> <86c3> 4279 -<86c5> <86c5> 4280 -<86d1> <86d2> 4281 -<86d5> <86d5> 4283 -<86d7> <86d7> 4284 -<86da> <86da> 4285 -<86dc> <86dc> 4286 -<86e0> <86e0> 4287 -<86e3> <86e3> 4288 -<86e5> <86e5> 4289 -<86e7> <86e7> 4290 -<86fa> <86fa> 4292 -<86fc> <86fd> 4293 -<8704> <8705> 4295 -<8707> <8707> 4297 -<870b> <870b> 4298 -<870e> <8710> 4299 -<8713> <8714> 4302 -<8719> <8719> 4304 -<871e> <871f> 4305 -<8721> <8721> 4307 -<8723> <8723> 4308 -<8728> <8728> 4309 -<872e> <872f> 4310 -<8731> <8732> 4312 -<8739> <873a> 4314 -<873c> <873e> 4316 -<8740> <8740> 4319 -<8743> <8743> 4320 -<8745> <8745> 4321 -<874d> <874d> 4322 -endcidrange - -100 begincidrange -<8758> <8758> 4323 -<875d> <875d> 4324 -<8761> <8761> 4325 -<8764> <8765> 4326 -<876f> <876f> 4328 -<8771> <8772> 4329 -<877b> <877b> 4331 -<8783> <8789> 4332 -<878b> <878c> 4339 -<8790> <8790> 4341 -<8793> <8793> 4342 -<8795> <8795> 4343 -<8797> <8799> 4344 -<879e> <879e> 4347 -<87a0> <87a0> 4348 -<87a3> <87a3> 4349 -<87a7> <87a7> 4350 -<87ac> <87ae> 4351 -<87b1> <87b1> 4354 -<87b5> <87b5> 4355 -<87be> <87bf> 4356 -<87c1> <87c1> 4358 -<87c8> <87ca> 4359 -<87ce> <87ce> 4362 -<87d5> <87d6> 4363 -<87d9> <87da> 4365 -<87dc> <87dc> 4367 -<87df> <87df> 4368 -<87e2> <87e4> 4369 -<87ea> <87eb> 4372 -<87ed> <87ed> 4374 -<87f1> <87f1> 4375 -<87f3> <87f3> 4376 -<87f8> <87f8> 4377 -<87fa> <87fa> 4378 -<87ff> <87ff> 4379 -<8801> <8801> 4380 -<8803> <8803> 4381 -<8806> <8806> 4382 -<8809> <880b> 4383 -<8810> <8810> 4386 -<8812> <8814> 4388 -<8818> <8818> 4391 -<8819> <8819> 4387 -<881a> <881c> 4392 -<881e> <881f> 4395 -<8828> <8828> 4397 -<882d> <882e> 4398 -<8830> <8830> 4400 -<8832> <8832> 4401 -<8835> <8835> 4402 -<883a> <883a> 4403 -<883c> <883c> 4404 -<8841> <8841> 4405 -<8843> <8843> 4406 -<8845> <8845> 4407 -<8848> <884b> 4408 -<884e> <884e> 4412 -<8851> <8851> 4413 -<8855> <8856> 4414 -<8858> <8858> 4416 -<885a> <885a> 4417 -<885c> <885c> 4418 -<885f> <8860> 4419 -<8864> <8864> 4421 -<8869> <8869> 4422 -<8871> <8871> 4423 -<8879> <8879> 4424 -<887b> <887b> 4425 -<8880> <8880> 4426 -<8898> <8898> 4427 -<889a> <889c> 4428 -<889f> <88a0> 4431 -<88a8> <88a8> 4433 -<88aa> <88aa> 4434 -<88ba> <88ba> 4435 -<88bd> <88be> 4436 -<88c0> <88c0> 4438 -<88ca> <88ce> 4439 -<88d1> <88d3> 4444 -<88db> <88db> 4447 -<88de> <88de> 4448 -<88e7> <88e7> 4449 -<88ef> <88f1> 4450 -<88f5> <88f5> 4453 -<88f7> <88f7> 4454 -<8901> <8901> 4455 -<8906> <8906> 4456 -<890d> <890f> 4457 -<8915> <8916> 4460 -<8918> <891a> 4462 -<891c> <891c> 4465 -<8920> <8920> 4466 -<8926> <8928> 4467 -<8930> <8932> 4470 -<8935> <8935> 4473 -<8939> <893a> 4474 -<893e> <893e> 4476 -<8940> <8940> 4477 -<8942> <8942> 4478 -endcidrange - -100 begincidrange -<8945> <8946> 4479 -<8949> <8949> 4481 -<894f> <894f> 4482 -<8952> <8952> 4483 -<8957> <8957> 4484 -<895a> <895c> 4485 -<8961> <8963> 4488 -<896b> <896b> 4491 -<896e> <896e> 4492 -<8970> <8970> 4493 -<8973> <8973> 4494 -<8975> <8975> 4495 -<897a> <897d> 4496 -<8989> <8989> 4500 -<898d> <898d> 4501 -<8990> <8990> 4502 -<8994> <8995> 4503 -<899b> <899c> 4505 -<899f> <89a0> 4507 -<89a5> <89a5> 4509 -<89b0> <89b0> 4510 -<89b4> <89b7> 4511 -<89bc> <89bc> 4515 -<89d4> <89d8> 4516 -<89e5> <89e5> 4521 -<89e9> <89e9> 4522 -<89eb> <89eb> 4523 -<89ed> <89ed> 4524 -<89f1> <89f1> 4525 -<89f3> <89f3> 4526 -<89f6> <89f6> 4527 -<89f9> <89f9> 4528 -<89fd> <89fd> 4529 -<89ff> <89ff> 4530 -<8a04> <8a05> 4531 -<8a07> <8a07> 4533 -<8a0f> <8a0f> 4534 -<8a11> <8a12> 4535 -<8a14> <8a15> 4537 -<8a1e> <8a1e> 4539 -<8a20> <8a20> 4540 -<8a22> <8a22> 4541 -<8a24> <8a24> 4542 -<8a26> <8a26> 4543 -<8a2b> <8a2c> 4544 -<8a2f> <8a2f> 4546 -<8a35> <8a35> 4547 -<8a37> <8a37> 4548 -<8a3d> <8a3e> 4549 -<8a40> <8a40> 4551 -<8a43> <8a43> 4552 -<8a45> <8a45> 4553 -<8a47> <8a47> 4554 -<8a49> <8a49> 4555 -<8a4d> <8a4e> 4556 -<8a53> <8a53> 4558 -<8a56> <8a58> 4559 -<8a5c> <8a5d> 4562 -<8a61> <8a61> 4564 -<8a65> <8a65> 4565 -<8a67> <8a67> 4566 -<8a75> <8a77> 4567 -<8a79> <8a7b> 4570 -<8a7e> <8a80> 4573 -<8a83> <8a83> 4576 -<8a86> <8a86> 4577 -<8a8b> <8a8b> 4578 -<8a8f> <8a90> 4579 -<8a92> <8a92> 4581 -<8a96> <8a97> 4582 -<8a99> <8a99> 4584 -<8a9f> <8a9f> 4585 -<8aa7> <8aa7> 4586 -<8aa9> <8aa9> 4587 -<8aae> <8aaf> 4588 -<8ab3> <8ab3> 4590 -<8ab6> <8ab7> 4591 -<8abb> <8abb> 4593 -<8abe> <8abe> 4594 -<8ac3> <8ac3> 4595 -<8ac6> <8ac6> 4596 -<8ac8> <8aca> 4597 -<8ad1> <8ad1> 4600 -<8ad3> <8ad5> 4601 -<8ad7> <8ad7> 4604 -<8add> <8add> 4605 -<8adf> <8adf> 4606 -<8aec> <8aec> 4607 -<8af0> <8af0> 4608 -<8af4> <8af6> 4609 -<8afc> <8afc> 4612 -<8aff> <8aff> 4613 -<8b05> <8b06> 4614 -<8b0a> <8b0a> 4621 -<8b0b> <8b0b> 4616 -<8b11> <8b11> 4617 -<8b1c> <8b1c> 4618 -<8b1e> <8b1f> 4619 -<8b2d> <8b2d> 4622 -<8b30> <8b30> 4623 -endcidrange - -100 begincidrange -<8b37> <8b37> 4624 -<8b3c> <8b3c> 4625 -<8b42> <8b46> 4626 -<8b48> <8b48> 4631 -<8b4d> <8b4d> 4636 -<8b52> <8b54> 4632 -<8b59> <8b59> 4635 -<8b5e> <8b5e> 4637 -<8b63> <8b63> 4638 -<8b6d> <8b6d> 4639 -<8b76> <8b76> 4640 -<8b78> <8b79> 4641 -<8b7c> <8b7c> 4643 -<8b7e> <8b7e> 4644 -<8b81> <8b81> 4645 -<8b84> <8b85> 4646 -<8b8b> <8b8b> 4648 -<8b8d> <8b8d> 4649 -<8b8f> <8b8f> 4650 -<8b94> <8b95> 4651 -<8b9c> <8b9c> 4653 -<8b9e> <8b9f> 4654 -<8c38> <8c39> 4656 -<8c3d> <8c3e> 4658 -<8c45> <8c45> 4660 -<8c47> <8c47> 4661 -<8c49> <8c49> 4662 -<8c4b> <8c4b> 4663 -<8c4f> <8c4f> 4664 -<8c51> <8c51> 4665 -<8c53> <8c54> 4666 -<8c57> <8c58> 4668 -<8c59> <8c59> 4672 -<8c5b> <8c5b> 4670 -<8c5d> <8c5d> 4671 -<8c63> <8c64> 4673 -<8c66> <8c66> 4675 -<8c68> <8c69> 4676 -<8c6d> <8c6d> 4678 -<8c73> <8c73> 4679 -<8c75> <8c76> 4680 -<8c7b> <8c7b> 4682 -<8c7e> <8c7e> 4683 -<8c86> <8c87> 4684 -<8c8b> <8c8b> 4686 -<8c90> <8c90> 4687 -<8c92> <8c93> 4688 -<8c99> <8c99> 4690 -<8c9b> <8c9c> 4691 -<8ca4> <8ca4> 4693 -<8cb9> <8cba> 4694 -<8cc5> <8cc6> 4696 -<8cc9> <8cc9> 4698 -<8ccb> <8ccb> 4699 -<8ccf> <8ccf> 4700 -<8cd5> <8cd5> 4702 -<8cd6> <8cd6> 4701 -<8cd9> <8cd9> 4703 -<8cdd> <8cdd> 4704 -<8ce1> <8ce1> 4705 -<8ce8> <8ce8> 4706 -<8cec> <8cec> 4707 -<8cef> <8cf0> 4708 -<8cf2> <8cf2> 4710 -<8cf5> <8cf5> 4711 -<8cf7> <8cf8> 4712 -<8cfe> <8cff> 4714 -<8d01> <8d01> 4716 -<8d03> <8d03> 4717 -<8d09> <8d09> 4718 -<8d12> <8d12> 4719 -<8d17> <8d17> 4720 -<8d1b> <8d1b> 4721 -<8d65> <8d65> 4722 -<8d69> <8d69> 4723 -<8d6c> <8d6c> 4724 -<8d6e> <8d6e> 4725 -<8d7f> <8d7f> 4726 -<8d82> <8d82> 4727 -<8d84> <8d84> 4728 -<8d88> <8d88> 4729 -<8d8d> <8d8d> 4730 -<8d90> <8d91> 4731 -<8d95> <8d95> 4733 -<8d9e> <8da0> 4734 -<8da6> <8da6> 4737 -<8dab> <8dac> 4738 -<8daf> <8daf> 4740 -<8db2> <8db2> 4741 -<8db5> <8db5> 4742 -<8db7> <8db7> 4743 -<8db9> <8db9> 4744 -<8dbb> <8dbb> 4745 -<8dbc> <8dbc> 4763 -<8dc0> <8dc0> 4746 -<8dc5> <8dc8> 4747 -<8dca> <8dca> 4751 -<8dce> <8dce> 4752 -<8dd1> <8dd1> 4753 -<8dd4> <8dd5> 4754 -endcidrange - -100 begincidrange -<8dd7> <8dd7> 4756 -<8dd9> <8dd9> 4757 -<8de4> <8de5> 4758 -<8de7> <8de7> 4760 -<8dec> <8dec> 4761 -<8df0> <8df0> 4762 -<8df1> <8df2> 4764 -<8df4> <8df4> 4766 -<8dfd> <8dfd> 4767 -<8e01> <8e01> 4768 -<8e04> <8e06> 4769 -<8e0b> <8e0b> 4772 -<8e11> <8e11> 4773 -<8e14> <8e14> 4774 -<8e16> <8e16> 4775 -<8e20> <8e23> 4776 -<8e26> <8e27> 4780 -<8e31> <8e31> 4782 -<8e33> <8e33> 4783 -<8e36> <8e39> 4784 -<8e3d> <8e3d> 4788 -<8e40> <8e41> 4789 -<8e4b> <8e4b> 4791 -<8e4d> <8e4f> 4792 -<8e54> <8e54> 4795 -<8e5b> <8e5e> 4796 -<8e61> <8e62> 4800 -<8e69> <8e69> 4802 -<8e6c> <8e6d> 4803 -<8e6f> <8e71> 4805 -<8e79> <8e7b> 4808 -<8e82> <8e83> 4811 -<8e89> <8e89> 4813 -<8e90> <8e90> 4814 -<8e92> <8e92> 4815 -<8e95> <8e95> 4816 -<8e9a> <8e9b> 4817 -<8e9d> <8e9e> 4819 -<8ea2> <8ea2> 4821 -<8ea7> <8ea7> 4822 -<8ea9> <8ea9> 4823 -<8ead> <8eae> 4824 -<8eb3> <8eb3> 4826 -<8eb5> <8eb5> 4827 -<8eba> <8ebb> 4828 -<8ec0> <8ec1> 4830 -<8ec3> <8ec4> 4832 -<8ec7> <8ec7> 4834 -<8ecf> <8ecf> 4835 -<8ed1> <8ed1> 4836 -<8ed4> <8ed4> 4837 -<8edc> <8edc> 4838 -<8ee8> <8ee8> 4839 -<8eed> <8eed> 4846 -<8eee> <8eee> 4840 -<8ef0> <8ef1> 4841 -<8ef7> <8ef7> 4843 -<8ef9> <8efa> 4844 -<8f00> <8f00> 4847 -<8f02> <8f02> 4848 -<8f07> <8f08> 4849 -<8f0f> <8f10> 4851 -<8f16> <8f18> 4853 -<8f1e> <8f1e> 4856 -<8f20> <8f21> 4857 -<8f23> <8f23> 4859 -<8f25> <8f25> 4860 -<8f27> <8f28> 4861 -<8f2c> <8f2e> 4863 -<8f34> <8f37> 4866 -<8f3a> <8f3a> 4870 -<8f40> <8f41> 4871 -<8f43> <8f43> 4873 -<8f47> <8f47> 4874 -<8f4f> <8f4f> 4875 -<8f51> <8f55> 4876 -<8f58> <8f58> 4881 -<8f5d> <8f5e> 4882 -<8f65> <8f65> 4884 -<8f9d> <8f9d> 4885 -<8fa0> <8fa1> 4886 -<8fa4> <8fa6> 4888 -<8fb5> <8fb6> 4891 -<8fb8> <8fb8> 4893 -<8fbe> <8fbe> 4894 -<8fc0> <8fc1> 4895 -<8fc6> <8fc6> 4897 -<8fca> <8fcb> 4898 -<8fcd> <8fcd> 4900 -<8fd0> <8fd0> 4901 -<8fd2> <8fd3> 4902 -<8fd5> <8fd5> 4904 -<8fe0> <8fe0> 4905 -<8fe3> <8fe4> 4906 -<8fe8> <8fe8> 4908 -<8fee> <8fee> 4909 -<8ff1> <8ff1> 4910 -<8ff5> <8ff6> 4911 -<8ffb> <8ffb> 4913 -<8ffe> <8ffe> 4914 -endcidrange - -100 begincidrange -<9002> <9002> 4915 -<9004> <9004> 4916 -<9008> <9008> 4917 -<900c> <900c> 4918 -<9018> <9018> 4919 -<901b> <901b> 4920 -<9028> <9029> 4921 -<902a> <902a> 4924 -<902c> <902d> 4925 -<902f> <902f> 4923 -<9033> <9034> 4927 -<9037> <9037> 4929 -<903f> <903f> 4930 -<9043> <9044> 4931 -<904c> <904c> 4933 -<905b> <905b> 4934 -<905d> <905d> 4935 -<9062> <9062> 4936 -<9066> <9067> 4937 -<906c> <906c> 4939 -<9070> <9070> 4940 -<9074> <9074> 4941 -<9079> <9079> 4942 -<9085> <9085> 4943 -<9088> <9088> 4944 -<908b> <908c> 4945 -<908e> <908e> 4947 -<9090> <9090> 4948 -<9095> <9095> 4949 -<9097> <9099> 4950 -<909b> <909b> 4953 -<90a0> <90a2> 4954 -<90a5> <90a5> 4957 -<90b0> <90b0> 4958 -<90b2> <90b4> 4959 -<90b6> <90b6> 4962 -<90bd> <90bd> 4963 -<90be> <90be> 4965 -<90c3> <90c5> 4966 -<90c7> <90c8> 4969 -<90cc> <90cc> 4964 -<90d2> <90d2> 4979 -<90d5> <90d5> 4971 -<90d7> <90d9> 4972 -<90dc> <90dd> 4975 -<90df> <90df> 4977 -<90e5> <90e5> 4978 -<90eb> <90eb> 4981 -<90ef> <90f0> 4982 -<90f4> <90f4> 4984 -<90f6> <90f6> 4980 -<90fe> <90ff> 4985 -<9100> <9100> 4987 -<9104> <9106> 4988 -<9108> <9108> 4991 -<910d> <910d> 4992 -<9110> <9110> 4993 -<9114> <9114> 4994 -<9116> <9118> 4995 -<911a> <911a> 4998 -<911c> <911c> 4999 -<911e> <911e> 5000 -<9120> <9120> 5001 -<9122> <9123> 5003 -<9125> <9125> 5002 -<9127> <9127> 5005 -<9129> <9129> 5006 -<912e> <912f> 5007 -<9131> <9131> 5009 -<9134> <9134> 5010 -<9136> <9137> 5011 -<9139> <913a> 5013 -<913c> <913d> 5015 -<9143> <9143> 5017 -<9147> <9148> 5018 -<914f> <914f> 5020 -<9153> <9153> 5021 -<9157> <9157> 5022 -<9159> <915b> 5023 -<9161> <9161> 5026 -<9164> <9164> 5027 -<9167> <9167> 5028 -<916d> <916d> 5029 -<9174> <9174> 5030 -<9179> <917b> 5031 -<9181> <9181> 5034 -<9183> <9183> 5035 -<9185> <9186> 5036 -<918a> <918a> 5038 -<918e> <918e> 5039 -<9191> <9191> 5040 -<9193> <9195> 5041 -<9198> <9198> 5044 -<919e> <919e> 5045 -<91a1> <91a1> 5046 -<91a6> <91a6> 5047 -<91a8> <91a8> 5048 -<91ac> <91ae> 5049 -<91b0> <91b3> 5052 -<91b6> <91b6> 5056 -endcidrange - -100 begincidrange -<91bb> <91bd> 5057 -<91bf> <91bf> 5060 -<91c2> <91c3> 5061 -<91c5> <91c5> 5063 -<91d3> <91d4> 5064 -<91d7> <91d7> 5066 -<91d9> <91da> 5067 -<91de> <91de> 5069 -<91e4> <91e5> 5070 -<91e9> <91ea> 5072 -<91ec> <91f1> 5074 -<91f7> <91f7> 5080 -<91f9> <91f9> 5081 -<91fb> <91fb> 5082 -<91fd> <91fd> 5083 -<9200> <9201> 5084 -<9204> <9207> 5086 -<9209> <920a> 5090 -<920c> <920c> 5092 -<9210> <9210> 5093 -<9212> <9213> 5094 -<9216> <9216> 5096 -<9218> <9218> 5097 -<921c> <921d> 5098 -<9223> <9226> 5100 -<9228> <9228> 5104 -<922e> <9230> 5105 -<9233> <9233> 5108 -<9235> <9236> 5109 -<9238> <923a> 5111 -<923c> <923c> 5114 -<923e> <923e> 5115 -<9240> <9240> 5116 -<9242> <9243> 5117 -<9246> <9247> 5119 -<924a> <924a> 5121 -<924d> <924f> 5122 -<9251> <9251> 5125 -<9258> <9259> 5126 -<925c> <925d> 5128 -<9260> <9261> 5130 -<9265> <9265> 5132 -<9267> <9269> 5133 -<926e> <9270> 5136 -<9275> <9279> 5139 -<927b> <927d> 5144 -<927f> <927f> 5147 -<9288> <928a> 5148 -<928d> <928e> 5151 -<9292> <9292> 5153 -<9297> <9297> 5154 -<9299> <9299> 5155 -<929f> <92a0> 5156 -<92a4> <92a5> 5158 -<92a7> <92a8> 5160 -<92ab> <92ab> 5162 -<92af> <92af> 5163 -<92b2> <92b2> 5164 -<92b6> <92b6> 5165 -<92b8> <92b8> 5166 -<92ba> <92bd> 5167 -<92bf> <92c3> 5171 -<92c5> <92c8> 5176 -<92cb> <92ce> 5180 -<92d0> <92d0> 5184 -<92d3> <92d3> 5185 -<92d5> <92d5> 5186 -<92d7> <92d9> 5187 -<92dc> <92dd> 5190 -<92df> <92e1> 5192 -<92e3> <92e3> 5195 -<92e5> <92e5> 5196 -<92e7> <92e8> 5197 -<92ec> <92ec> 5199 -<92ee> <92ee> 5200 -<92f0> <92f0> 5201 -<92f9> <92f9> 5202 -<92fb> <92fb> 5203 -<92ff> <92ff> 5204 -<9300> <9300> 5205 -<9302> <9302> 5206 -<9308> <9308> 5207 -<930d> <930d> 5208 -<9311> <9311> 5209 -<9314> <9315> 5210 -<931c> <931f> 5212 -<9321> <9321> 5216 -<9324> <9325> 5217 -<9327> <9327> 5219 -<9329> <932a> 5220 -<9333> <9334> 5222 -<9336> <9337> 5224 -<9347> <9349> 5226 -<9350> <9352> 5229 -<9355> <9355> 5232 -<9357> <9358> 5233 -<935a> <935a> 5235 -<935e> <935e> 5236 -<9364> <9365> 5237 -<9367> <9367> 5239 -endcidrange - -100 begincidrange -<9369> <936a> 5240 -<936d> <936d> 5242 -<936f> <9371> 5243 -<9373> <9374> 5246 -<9376> <9376> 5248 -<937a> <937a> 5249 -<937d> <937d> 5250 -<937f> <9382> 5251 -<9388> <9388> 5255 -<938a> <938b> 5256 -<938d> <938d> 5258 -<938f> <938f> 5259 -<9392> <9392> 5260 -<9395> <9395> 5261 -<9398> <9398> 5262 -<939b> <939b> 5263 -<939e> <939e> 5264 -<93a1> <93a1> 5265 -<93a3> <93a4> 5266 -<93a6> <93a6> 5268 -<93a8> <93a8> 5269 -<93a9> <93a9> 5275 -<93ab> <93ab> 5270 -<93b4> <93b6> 5271 -<93ba> <93ba> 5274 -<93c1> <93c1> 5276 -<93c4> <93c7> 5277 -<93c9> <93cd> 5281 -<93d3> <93d3> 5286 -<93d9> <93d9> 5287 -<93dc> <93dc> 5288 -<93de> <93df> 5289 -<93e2> <93e2> 5291 -<93e6> <93e7> 5292 -<93f7> <93f8> 5295 -<93f9> <93f9> 5294 -<93fa> <93fb> 5297 -<93fd> <93fd> 5299 -<9401> <9402> 5300 -<9404> <9404> 5302 -<9408> <9409> 5303 -<940d> <940f> 5305 -<9415> <9417> 5308 -<941f> <941f> 5311 -<942e> <942f> 5312 -<9431> <9434> 5314 -<943b> <943b> 5318 -<943d> <943d> 5320 -<943f> <943f> 5319 -<9443> <9443> 5321 -<9445> <9445> 5322 -<9448> <9448> 5323 -<944a> <944a> 5324 -<944c> <944c> 5325 -<9455> <9455> 5326 -<9459> <9459> 5327 -<945c> <945c> 5328 -<945f> <945f> 5329 -<9461> <9461> 5330 -<9463> <9463> 5331 -<9468> <9468> 5332 -<946b> <946b> 5333 -<946d> <946f> 5334 -<9471> <9472> 5337 -<9483> <9483> 5340 -<9484> <9484> 5339 -<9578> <9579> 5341 -<957e> <957e> 5343 -<9584> <9584> 5344 -<9588> <9588> 5345 -<958c> <958e> 5346 -<959d> <959f> 5349 -<95a1> <95a1> 5352 -<95a6> <95a6> 5353 -<95a9> <95a9> 5354 -<95ab> <95ac> 5355 -<95b4> <95b4> 5357 -<95b6> <95b6> 5358 -<95ba> <95ba> 5359 -<95bd> <95bd> 5360 -<95bf> <95bf> 5361 -<95c6> <95c6> 5362 -<95c8> <95c9> 5363 -<95cb> <95cb> 5365 -<95d0> <95d3> 5366 -<95d9> <95da> 5370 -<95dd> <95e0> 5372 -<95e4> <95e4> 5376 -<95e6> <95e6> 5377 -<961d> <961e> 5378 -<9622> <9622> 5380 -<9624> <9626> 5381 -<962c> <962c> 5384 -<9631> <9631> 5385 -<9633> <9633> 5386 -<9637> <963a> 5387 -<963c> <963d> 5391 -<9641> <9641> 5393 -<9652> <9652> 5394 -<9654> <9654> 5395 -endcidrange - -100 begincidrange -<9656> <9658> 5396 -<9661> <9661> 5399 -<966e> <966e> 5400 -<9674> <9674> 5401 -<967b> <967c> 5402 -<967e> <967f> 5404 -<9681> <9684> 5406 -<9689> <9689> 5410 -<9691> <9691> 5411 -<9696> <9696> 5412 -<969a> <969a> 5413 -<969d> <969d> 5414 -<969f> <969f> 5415 -<96a4> <96a6> 5416 -<96a9> <96a9> 5419 -<96ae> <96af> 5420 -<96b3> <96b3> 5422 -<96ba> <96ba> 5423 -<96ca> <96ca> 5424 -<96d2> <96d2> 5425 -<96d8> <96d8> 5427 -<96da> <96da> 5428 -<96dd> <96df> 5429 -<96e9> <96e9> 5432 -<96ef> <96ef> 5433 -<96f1> <96f1> 5434 -<96fa> <96fa> 5435 -<9702> <9703> 5436 -<9705> <9705> 5438 -<9709> <9709> 5439 -<971a> <971b> 5440 -<971d> <971d> 5442 -<9721> <9723> 5443 -<9728> <9728> 5446 -<9731> <9731> 5447 -<9733> <9733> 5448 -<9741> <9741> 5449 -<9743> <9743> 5450 -<974a> <974a> 5451 -<974e> <974f> 5452 -<9755> <9755> 5454 -<9757> <9758> 5455 -<975a> <975b> 5457 -<9763> <9763> 5459 -<9767> <9767> 5460 -<976a> <976a> 5461 -<976e> <976e> 5462 -<9773> <9773> 5463 -<9776> <9778> 5464 -<977b> <977b> 5467 -<977d> <977d> 5468 -<977f> <9780> 5469 -<9789> <9789> 5471 -<9795> <9797> 5472 -<9799> <979a> 5475 -<979e> <979f> 5477 -<97a2> <97a2> 5479 -<97ac> <97ac> 5480 -<97ae> <97ae> 5481 -<97b1> <97b2> 5482 -<97b5> <97b6> 5484 -<97b8> <97ba> 5486 -<97bc> <97bc> 5489 -<97be> <97bf> 5490 -<97c1> <97c1> 5492 -<97c4> <97c5> 5493 -<97c7> <97c7> 5495 -<97c9> <97ca> 5496 -<97cc> <97ce> 5498 -<97d0> <97d1> 5501 -<97d4> <97d4> 5503 -<97d7> <97d9> 5504 -<97db> <97db> 5510 -<97dd> <97de> 5507 -<97e0> <97e0> 5509 -<97e1> <97e1> 5511 -<97e4> <97e4> 5512 -<97ef> <97ef> 5513 -<97f1> <97f1> 5514 -<97f4> <97f4> 5515 -<97f7> <97f8> 5516 -<97fa> <97fa> 5518 -<9807> <9807> 5519 -<980a> <980a> 5520 -<980d> <980e> 5522 -<9814> <9814> 5524 -<9816> <9816> 5525 -<9819> <9819> 5521 -<981c> <981c> 5526 -<981e> <981e> 5527 -<9820> <9820> 5528 -<9823> <9823> 5529 -<9825> <9825> 5538 -<9826> <9826> 5530 -<982b> <982b> 5531 -<982e> <9830> 5532 -<9832> <9833> 5535 -<9835> <9835> 5537 -<983e> <983e> 5539 -<9844> <9844> 5540 -endcidrange - -100 begincidrange -<9847> <9847> 5541 -<984a> <984a> 5542 -<9851> <9853> 5543 -<9856> <9857> 5546 -<9859> <985a> 5548 -<9862> <9863> 5550 -<9865> <9866> 5552 -<986a> <986a> 5554 -<986c> <986c> 5555 -<98ab> <98ab> 5556 -<98ad> <98ae> 5557 -<98b0> <98b0> 5559 -<98b4> <98b4> 5560 -<98b7> <98b8> 5561 -<98ba> <98bb> 5563 -<98bf> <98bf> 5565 -<98c2> <98c2> 5566 -<98c5> <98c5> 5567 -<98c8> <98c8> 5568 -<98cc> <98cc> 5569 -<98e1> <98e1> 5570 -<98e3> <98e3> 5571 -<98e5> <98e7> 5572 -<98ea> <98ea> 5575 -<98f3> <98f3> 5576 -<98f6> <98f6> 5577 -<9902> <9902> 5578 -<9907> <9908> 5579 -<9911> <9911> 5581 -<9915> <9917> 5582 -<991a> <991c> 5585 -<991f> <991f> 5588 -<9922> <9922> 5589 -<9926> <9927> 5590 -<992b> <992b> 5592 -<9931> <9935> 5593 -<9939> <993c> 5598 -<9940> <9941> 5602 -<9946> <9948> 5604 -<994d> <994e> 5607 -<9954> <9954> 5609 -<9958> <9959> 5610 -<995b> <995c> 5612 -<995e> <9960> 5614 -<999b> <999b> 5617 -<999d> <999d> 5618 -<999f> <999f> 5619 -<99a6> <99a6> 5620 -<99b0> <99b2> 5621 -<99b5> <99b5> 5624 -<99b9> <99ba> 5625 -<99bd> <99bd> 5627 -<99bf> <99bf> 5628 -<99c3> <99c3> 5629 -<99c9> <99c9> 5630 -<99d3> <99d4> 5631 -<99d9> <99da> 5633 -<99dc> <99dc> 5635 -<99de> <99de> 5636 -<99e7> <99e7> 5637 -<99ea> <99ec> 5638 -<99f0> <99f0> 5641 -<99f4> <99f5> 5642 -<99f9> <99f9> 5644 -<99fd> <99fe> 5645 -<9a02> <9a04> 5647 -<9a0b> <9a0c> 5650 -<9a10> <9a11> 5652 -<9a16> <9a16> 5654 -<9a1e> <9a1e> 5655 -<9a20> <9a20> 5656 -<9a22> <9a24> 5657 -<9a27> <9a27> 5660 -<9a2d> <9a2e> 5661 -<9a33> <9a33> 5663 -<9a35> <9a36> 5664 -<9a38> <9a38> 5666 -<9a41> <9a41> 5668 -<9a44> <9a44> 5669 -<9a47> <9a47> 5667 -<9a4a> <9a4c> 5670 -<9a4e> <9a4e> 5673 -<9a51> <9a51> 5674 -<9a54> <9a54> 5675 -<9a56> <9a56> 5676 -<9a5d> <9a5d> 5677 -<9aaa> <9aaa> 5678 -<9aac> <9aac> 5679 -<9aae> <9aaf> 5680 -<9ab2> <9ab2> 5682 -<9ab4> <9ab6> 5683 -<9ab9> <9ab9> 5686 -<9abb> <9abb> 5687 -<9abe> <9abf> 5688 -<9ac1> <9ac1> 5690 -<9ac3> <9ac3> 5691 -<9ac6> <9ac6> 5692 -<9ac8> <9ac8> 5693 -<9ace> <9ace> 5694 -<9ad0> <9ad0> 5695 -endcidrange - -100 begincidrange -<9ad2> <9ad2> 5696 -<9ad5> <9ad7> 5697 -<9adb> <9adc> 5700 -<9ae0> <9ae0> 5702 -<9ae4> <9ae5> 5703 -<9ae7> <9ae7> 5705 -<9ae9> <9ae9> 5706 -<9aec> <9aec> 5707 -<9af2> <9af3> 5708 -<9af5> <9af5> 5710 -<9af9> <9afa> 5711 -<9afd> <9afd> 5713 -<9aff> <9aff> 5714 -<9b00> <9b05> 5715 -<9b08> <9b09> 5721 -<9b0b> <9b0e> 5723 -<9b10> <9b10> 5727 -<9b12> <9b12> 5728 -<9b16> <9b16> 5729 -<9b19> <9b19> 5730 -<9b1b> <9b1c> 5731 -<9b20> <9b20> 5733 -<9b26> <9b26> 5734 -<9b2b> <9b2b> 5735 -<9b2d> <9b2d> 5736 -<9b33> <9b35> 5737 -<9b37> <9b37> 5740 -<9b39> <9b3a> 5741 -<9b3d> <9b3d> 5743 -<9b48> <9b48> 5744 -<9b4b> <9b4c> 5745 -<9b55> <9b57> 5747 -<9b5b> <9b5b> 5750 -<9b5e> <9b5e> 5751 -<9b61> <9b61> 5752 -<9b63> <9b63> 5753 -<9b65> <9b66> 5754 -<9b68> <9b68> 5756 -<9b6a> <9b6e> 5757 -<9b73> <9b73> 5762 -<9b75> <9b75> 5763 -<9b77> <9b79> 5764 -<9b7f> <9b80> 5767 -<9b84> <9b87> 5769 -<9b89> <9b8b> 5773 -<9b8d> <9b8d> 5776 -<9b8f> <9b90> 5777 -<9b94> <9b94> 5779 -<9b9a> <9b9a> 5780 -<9b9d> <9b9e> 5781 -<9ba6> <9ba7> 5783 -<9ba9> <9ba9> 5785 -<9bac> <9bac> 5786 -<9bb0> <9bb2> 5787 -<9bb7> <9bb8> 5790 -<9bbb> <9bbc> 5792 -<9bbe> <9bbf> 5794 -<9bc1> <9bc1> 5796 -<9bc7> <9bc8> 5797 -<9bce> <9bce> 5799 -<9bd0> <9bd0> 5800 -<9bd7> <9bd8> 5801 -<9bdd> <9bdd> 5803 -<9bdf> <9bdf> 5804 -<9be5> <9be5> 5805 -<9be7> <9be7> 5806 -<9bea> <9beb> 5807 -<9bef> <9bef> 5809 -<9bf3> <9bf3> 5810 -<9bf7> <9bfa> 5811 -<9bfd> <9bfd> 5815 -<9bff> <9bff> 5816 -<9c00> <9c00> 5817 -<9c02> <9c02> 5818 -<9c0b> <9c0b> 5819 -<9c0f> <9c0f> 5820 -<9c11> <9c11> 5821 -<9c16> <9c16> 5822 -<9c18> <9c1a> 5823 -<9c1c> <9c1c> 5826 -<9c1e> <9c1e> 5827 -<9c22> <9c23> 5828 -<9c26> <9c2a> 5830 -<9c31> <9c31> 5835 -<9c35> <9c37> 5836 -<9c3d> <9c3d> 5839 -<9c41> <9c41> 5840 -<9c43> <9c45> 5841 -<9c49> <9c4a> 5844 -<9c4e> <9c50> 5846 -<9c53> <9c54> 5849 -<9c56> <9c56> 5851 -<9c58> <9c58> 5852 -<9c5b> <9c5b> 5853 -<9c5c> <9c5c> 5860 -<9c5d> <9c5f> 5854 -<9c63> <9c63> 5857 -<9c68> <9c68> 5862 -<9c69> <9c6a> 5858 -<9c6b> <9c6b> 5861 -endcidrange - -100 begincidrange -<9c6e> <9c6e> 5863 -<9c70> <9c70> 5864 -<9c72> <9c72> 5865 -<9c75> <9c75> 5866 -<9c77> <9c77> 5867 -<9c7b> <9c7b> 5868 -<9ce6> <9ce6> 5869 -<9cf2> <9cf2> 5870 -<9cf7> <9cf7> 5871 -<9cf9> <9cf9> 5872 -<9d02> <9d02> 5874 -<9d0b> <9d0b> 5873 -<9d11> <9d11> 5875 -<9d17> <9d18> 5876 -<9d1c> <9d1e> 5878 -<9d2f> <9d30> 5881 -<9d32> <9d34> 5883 -<9d3a> <9d3a> 5886 -<9d3c> <9d3c> 5887 -<9d3d> <9d3d> 5889 -<9d42> <9d43> 5890 -<9d45> <9d45> 5888 -<9d47> <9d47> 5892 -<9d4a> <9d4a> 5893 -<9d53> <9d54> 5894 -<9d5f> <9d5f> 5896 -<9d62> <9d62> 5898 -<9d63> <9d63> 5897 -<9d65> <9d65> 5899 -<9d69> <9d6b> 5900 -<9d70> <9d70> 5903 -<9d76> <9d77> 5904 -<9d7b> <9d7c> 5906 -<9d7e> <9d7e> 5908 -<9d83> <9d84> 5909 -<9d86> <9d86> 5911 -<9d8a> <9d8a> 5912 -<9d8d> <9d8e> 5913 -<9d92> <9d93> 5915 -<9d95> <9d98> 5917 -<9da1> <9da1> 5921 -<9daa> <9daa> 5922 -<9dac> <9dac> 5923 -<9dae> <9dae> 5924 -<9db1> <9db1> 5925 -<9db5> <9db5> 5926 -<9db9> <9db9> 5927 -<9dbc> <9dbc> 5928 -<9dbf> <9dbf> 5929 -<9dc3> <9dc3> 5930 -<9dc7> <9dc7> 5931 -<9dc9> <9dca> 5932 -<9dd4> <9dd7> 5934 -<9dda> <9dda> 5938 -<9dde> <9de0> 5939 -<9de5> <9de5> 5942 -<9de7> <9de7> 5943 -<9de9> <9de9> 5944 -<9deb> <9deb> 5945 -<9dee> <9dee> 5946 -<9df0> <9df0> 5947 -<9df3> <9df4> 5948 -<9dfe> <9dfe> 5950 -<9e02> <9e02> 5952 -<9e07> <9e07> 5953 -<9e0a> <9e0a> 5951 -<9e0e> <9e0e> 5954 -<9e10> <9e12> 5955 -<9e15> <9e16> 5958 -<9e19> <9e19> 5960 -<9e1c> <9e1d> 5961 -<9e7a> <9e7c> 5963 -<9e80> <9e80> 5966 -<9e82> <9e85> 5967 -<9e87> <9e87> 5971 -<9e8e> <9e8f> 5972 -<9e96> <9e96> 5974 -<9e98> <9e98> 5975 -<9e9b> <9e9b> 5976 -<9e9e> <9e9e> 5977 -<9ea4> <9ea4> 5978 -<9ea8> <9ea8> 5979 -<9eac> <9eac> 5980 -<9eae> <9eb0> 5981 -<9eb3> <9eb5> 5984 -<9ec6> <9ec6> 5987 -<9ec8> <9ec8> 5988 -<9ecb> <9ecb> 5989 -<9ed5> <9ed5> 5990 -<9edf> <9edf> 5991 -<9ee4> <9ee4> 5992 -<9ee7> <9ee7> 5993 -<9eec> <9eee> 5994 -<9ef0> <9ef2> 5997 -<9ef5> <9ef5> 6000 -<9ef8> <9ef8> 6001 -<9eff> <9eff> 6002 -<9f02> <9f03> 6003 -<9f09> <9f09> 6005 -<9f0f> <9f12> 6006 -endcidrange - -32 begincidrange -<9f14> <9f14> 6010 -<9f16> <9f17> 6011 -<9f19> <9f1b> 6013 -<9f1f> <9f1f> 6016 -<9f22> <9f22> 6017 -<9f26> <9f26> 6018 -<9f2a> <9f2b> 6019 -<9f2f> <9f2f> 6021 -<9f31> <9f32> 6022 -<9f34> <9f34> 6024 -<9f37> <9f37> 6025 -<9f39> <9f3a> 6026 -<9f3c> <9f3d> 6028 -<9f3f> <9f3f> 6030 -<9f41> <9f41> 6031 -<9f43> <9f47> 6032 -<9f53> <9f53> 6037 -<9f55> <9f58> 6038 -<9f5a> <9f5a> 6042 -<9f5d> <9f5e> 6043 -<9f68> <9f69> 6045 -<9f6d> <9f71> 6047 -<9f73> <9f73> 6052 -<9f75> <9f75> 6053 -<9f7a> <9f7a> 6054 -<9f7d> <9f7d> 6055 -<9f8f> <9f92> 6056 -<9f94> <9f94> 6060 -<9f96> <9f97> 6061 -<9f9e> <9f9e> 6063 -<9fa1> <9fa3> 6064 -<9fa5> <9fa5> 6067 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/cmap/UniJIS-UCS2-H b/Resources/cmap/UniJIS-UCS2-H deleted file mode 100644 index 638a66d8972..00000000000 --- a/Resources/cmap/UniJIS-UCS2-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (UniJIS-UCS2-H) %%Title: (UniJIS-UCS2-H Adobe Japan1 4) %%Version: 12.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2001 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 4 def end def /CMapName /UniJIS-UCS2-H def /CMapVersion 12.001 def /CMapType 1 def /XUID [1 10 25356] def /WMode 0 def 2 begincodespacerange <0000> endcodespacerange 1 beginnotdefrange <0000> <001f> 1 endnotdefrange 100 begincidrange <0020> <005b> 1 <005c> <005c> 97 <005d> <007e> 62 <00a1> <00a3> 101 <00a4> <00a4> 107 <00a5> <00a5> 61 <00a6> <00a6> 99 <00a7> <00a7> 720 <00a8> <00a8> 647 <00a9> <00a9> 152 <00aa> <00aa> 140 <00ab> <00ab> 109 <00ac> <00ac> 153 <00ad> <00ad> 151 <00ae> <00ae> 154 <00af> <00af> 129 <00b0> <00b0> 707 <00b1> <00b1> 694 <00b2> <00b3> 157 <00b4> <00b4> 645 <00b5> <00b5> 159 <00b6> <00b6> 778 <00b7> <00b7> 117 <00b8> <00b8> 134 <00b9> <00b9> 160 <00ba> <00ba> 144 <00bb> <00bb> 123 <00bc> <00be> 161 <00bf> <00bf> 126 <00c0> <00c5> 164 <00c6> <00c6> 139 <00c7> <00d6> 170 <00d7> <00d7> 695 <00d8> <00d8> 142 <00d9> <00de> 187 <00df> <00df> 150 <00e0> <00e5> 193 <00e6> <00e6> 145 <00e7> <00f6> 199 <00f7> <00f7> 696 <00f8> <00f8> 148 <00f9> <00ff> 216 <0100> <0100> 9366 <0101> <0101> 9361 <0112> <0112> 9369 <0113> <0113> 9364 <011a> <011a> 9395 <011b> <011b> 9407 <0127> <0127> 12092 <0128> <0128> 9400 <0129> <0129> 9412 <012a> <012a> 9367 <012b> <012b> 9362 <0131> <0131> 146 <0141> <0141> 141 <0142> <0142> 147 <014b> <014b> 9436 <014c> <014c> 9370 <014d> <014d> 9365 <0152> <0152> 143 <0153> <0153> 149 <0160> <0160> 223 <0161> <0161> 227 <0168> <0168> 9405 <0169> <0169> 9417 <016a> <016a> 9368 <016b> <016b> 9363 <016e> <016e> 9404 <016f> <016f> 9416 <0178> <0178> 224 <017d> <017d> 225 <017e> <017e> 229 <01c0> <01c0> 99 <01cd> <01cd> 9394 <01ce> <01ce> 9406 <01cf> <01cf> 9398 <01d0> <01d0> 9410 <01d1> <01d1> 9401 <01d2> <01d2> 9413 <01d3> <01d3> 9403 <01d4> <01d4> 9415 <01fd> <01fd> 9421 <0251> <0251> 9418 <0254> <0254> 9423 <0259> <0259> 9426 <025a> <025a> 9429 <025b> <025b> 9432 <0275> <0275> 9437 <0283> <0283> 9442 <028c> <028c> 9438 <0292> <0292> 9441 <02d0> <02d0> 9443 <0300> <0300> 65 <0301> <0302> 127 <0303> <0303> 95 <0304> <0304> 129 <0305> <0305> 226 <0306> <0308> 130 <030a> <030a> 133 <030b> <030b> 135 endcidrange 100 begincidrange <030c> <030c> 137 <0327> <0327> 134 <0328> <0328> 136 <0332> <0332> 64 <0336> <0336> 138 <0361> <0361> 758 <0391> <03a1> 1011 <03a3> <03a9> 1028 <03b1> <03c1> 1035 <03c3> <03c9> 1052 <03d0> <03d0> 12090 <03d1> <03d1> 12096 <03db> <03db> 12095 <0401> <0401> 1065 <0410> <0415> 1059 <0416> <0435> 1066 <0436> <044f> 1099 <0451> <0451> 1098 <045b> <045b> 12092 <1ebc> <1ebc> 9397 <1ebd> <1ebd> 9409 <2002> <2002> 231 <2003> <2003> 633 <2010> <2010> 662 <2011> <2011> 14 <2012> <2012> 114 <2013> <2013> 114 <2014> <2014> 138 <2015> <2015> 661 <2016> <2016> 666 <2018> <2019> 670 <201a> <201a> 120 <201c> <201d> 672 <201e> <201e> 121 <2020> <2021> 776 <2022> <2022> 119 <2025> <2025> 669 <2026> <2026> 668 <2030> <2030> 772 <2032> <2033> 708 <2039> <203a> 110 <203b> <203b> 734 <203c> <203c> 12111 <203e> <203e> 325 <2044> <2044> 104 <2049> <2049> 12112 <2070> <2070> 9377 <2074> <2079> 9378 <2080> <2089> 9384 <20ac> <20ac> 9354 <20dd> <20dd> 779 <2100> <2100> 11855 <2103> <2103> 710 <2105> <2105> 11859 <2109> <2109> 8305 <210a> <210a> 8304 <210f> <210f> 12092 <2113> <2113> 8025 <2116> <2116> 7610 <2121> <2121> 8055 <2122> <2122> 228 <2126> <2126> 9355 <212b> <212b> 771 <2135> <2135> 12089 <2153> <2154> 9375 <215b> <215e> 9371 <2160> <2169> 7575 <216a> <216b> 8225 <2170> <2179> 8092 <217a> <217b> 8298 <217f> <217f> 8303 <2190> <2191> 737 <2192> <2192> 736 <2193> <2193> 739 <2194> <2194> 12201 <2195> <2195> 12215 <2196> <2197> 12204 <2198> <2199> 12202 <21c4> <21c5> 8310 <21c6> <21c6> 8309 <21cc> <21cc> 12206 <21d0> <21d0> 12200 <21d2> <21d2> 752 <21d4> <21d4> 753 <21e6> <21e6> 8013 <21e7> <21e7> 8012 <21e8> <21e8> 8014 <21e9> <21e9> 8011 <2200> <2200> 754 <2202> <2202> 759 <2203> <2203> 755 <2205> <2205> 12184 <2207> <2207> 760 <2208> <2208> 741 <220a> <220a> 12091 <220b> <220b> 742 <2211> <2211> 7625 <2212> <2212> 693 <2213> <2213> 12118 <221a> <221a> 765 endcidrange 100 begincidrange <221d> <221d> 767 <221e> <221e> 703 <221f> <221f> 7629 <2220> <2220> 756 <2225> <2225> 666 <2227> <2228> 749 <2229> <2229> 748 <222a> <222a> 747 <222b> <222c> 769 <222d> <222d> 8195 <222e> <222e> 7624 <2234> <2234> 704 <2235> <2235> 768 <223c> <223c> 665 <223d> <223d> 766 <2243> <2243> 12120 <2252> <2252> 762 <2260> <2260> 698 <2261> <2261> 761 <2266> <2267> 701 <226a> <226b> 763 <2272> <2273> 12121 <2282> <2283> 745 <2286> <2287> 743 <2295> <2295> 12188 <2296> <2296> 12186 <2297> <2297> 12189 <2298> <2298> 12187 <229d> <229d> 12186 <229e> <229e> 12190 <22a0> <22a0> 12185 <22a5> <22a5> 757 <22bf> <22bf> 7630 <22ee> <22ee> 7897 <22ef> <22ef> 668 <2300> <2300> 12184 <2307> <2307> 12219 <2312> <2312> 758 <244a> <244a> 12116 <2460> <2473> 7555 <2474> <2487> 8071 <2488> <2490> 8062 <249c> <24b5> 8112 <24b6> <24cf> 10339 <24d0> <24e9> 10313 <24ea> <24ea> 8224 <2500> <254b> 7479 <2550> <2550> 8251 <255e> <255e> 8252 <2561> <2561> 8254 <256a> <256a> 8253 <256d> <256e> 8247 <256f> <256f> 8250 <2570> <2570> 8249 <2571> <2573> 8261 <2581> <2588> 8230 <2589> <2589> 8244 <258a> <258a> 8243 <258b> <258b> 8242 <258c> <258c> 8241 <258d> <258d> 8240 <258e> <258e> 8239 <258f> <258f> 8238 <2594> <2595> 8245 <25a0> <25a0> 729 <25a1> <25a1> 728 <25a2> <25a2> 8015 <25aa> <25aa> 12239 <25ab> <25ab> 12237 <25b2> <25b2> 731 <25b3> <25b3> 730 <25b6> <25b6> 12195 <25b7> <25b7> 8010 <25bc> <25bc> 733 <25bd> <25bd> 732 <25c0> <25c0> 12194 <25c1> <25c1> 8009 <25c6> <25c6> 727 <25c7> <25c7> 726 <25c9> <25c9> 8210 <25cb> <25cb> 723 <25cc> <25cc> 10502 <25ce> <25ce> 725 <25cf> <25cf> 724 <25e2> <25e3> 8255 <25e4> <25e4> 8258 <25e5> <25e5> 8257 <25e6> <25e6> 12254 <25ef> <25ef> 779 <2600> <2603> 8215 <2605> <2605> 722 <2606> <2606> 721 <260e> <260e> 8056 <2612> <2612> 12185 <261c> <261d> 8220 <261e> <261e> 8219 <261f> <261f> 8222 <2640> <2640> 706 <2642> <2642> 705 <2660> <2660> 8211 endcidrange 100 begincidrange <2661> <2661> 8017 <2662> <2662> 8019 <2663> <2663> 8213 <2664> <2664> 8018 <2665> <2665> 8212 <2666> <2666> 8214 <2667> <2667> 8016 <2668> <2669> 12098 <266a> <266a> 775 <266c> <266c> 12100 <266d> <266d> 774 <266f> <266f> 773 <2702> <2702> 12176 <271a> <271a> 12241 <2756> <2756> 12259 <2776> <277e> 8286 <27a1> <27a1> 8206 <2e83> <2e83> 14305 <2e85> <2e85> 13856 <2e87> <2e87> 14105 <2e89> <2e89> 14356 <2e8b> <2e8b> 14110 <2e8c> <2e8d> 13833 <2e8e> <2e8e> 4209 <2e8f> <2e8f> 14476 <2e90> <2e90> 4646 <2e92> <2e92> 3762 <2e93> <2e93> 4739 <2e94> <2e94> 4779 <2e95> <2e95> 15391 <2e96> <2e96> 14530 <2e97> <2e97> 13852 <2e98> <2e98> 14561 <2e99> <2e99> 5059 <2e9b> <2e9b> 5089 <2e9f> <2e9f> 3644 <2ea0> <2ea0> 3773 <2ea1> <2ea2> 14689 <2ea3> <2ea3> 14749 <2ea4> <2ea4> 15398 <2ea6> <2ea6> 14157 <2ea8> <2ea8> 14780 <2ea9> <2ea9> 13729 <2eaa> <2eaa> 13995 <2eab> <2eab> 14999 <2eac> <2eac> 2260 <2ead> <2ead> 14905 <2eae> <2eae> 13922 <2eb1> <2eb1> 15000 <2eb2> <2eb2> 14999 <2eb3> <2eb3> 14189 <2eb7> <2eb7> 14078 <2eb9> <2eb9> 14099 <2ebc> <2ebc> 13747 <2ebd> <2ebd> 13646 <2ebe> <2ec0> 14197 <2ec1> <2ec1> 1931 <2ec2> <2ec2> 15114 <2ec3> <2ec3> 13870 <2ec4> <2ec4> 2658 <2ec6> <2ec6> 13682 <2eca> <2eca> 13898 <2ecc> <2ecc> 15403 <2ecd> <2ecd> 15184 <2ecf> <2ecf> 15262 <2ed1> <2ed1> 3029 <2ed2> <2ed2> 15255 <2ed6> <2ed6> 15262 <2ed7> <2ed7> 13645 <2ed8> <2ed8> 2664 <2edd> <2edd> 13847 <2ede> <2ede> 13849 <2edf> <2edf> 13848 <2ee4> <2ee4> 1614 <2ee8> <2ee8> 3380 <2ee9> <2ee9> 1323 <2eeb> <2eeb> 2666 <2eed> <2eed> 2243 <2eef> <2eef> 3965 <2ef2> <2ef2> 1615 <2f00> <2f00> 1200 <2f01> <2f01> 8371 <2f02> <2f02> 4095 <2f03> <2f03> 4097 <2f04> <2f04> 1333 <2f05> <2f05> 4102 <2f06> <2f06> 3275 <2f07> <2f07> 4110 <2f08> <2f08> 2579 <2f09> <2f09> 4208 <2f0a> <2f0a> 3286 <2f0b> <2f0b> 3392 <2f0c> <2f0c> 4219 <2f0d> <2f0d> 4227 <2f0e> <2f0e> 4233 <2f0f> <2f0f> 4243 <2f10> <2f10> 4248 <2f11> <2f11> 3163 <2f12> <2f12> 3991 <2f13> <2f13> 4294 endcidrange 100 begincidrange <2f14> <2f15> 4301 <2f16> <2f16> 4307 <2f17> <2f17> 2375 <2f18> <2f18> 3708 <2f19> <2f19> 4316 <2f1a> <2f1a> 4321 <2f1b> <2f1b> 4328 <2f1c> <2f1c> 3746 <2f1d> <2f1d> 1969 <2f1e> <2f1e> 4459 <2f1f> <2f1f> 3156 <2f20> <2f20> 2204 <2f21> <2f22> 4538 <2f23> <2f23> 3878 <2f24> <2f24> 2887 <2f25> <2f25> 2433 <2f26> <2f26> 2208 <2f27> <2f27> 4622 <2f28> <2f28> 2631 <2f29> <2f29> 2454 <2f2a> <2f2a> 4646 <2f2b> <2f2b> 4648 <2f2c> <2f2c> 4658 <2f2d> <2f2d> 2177 <2f2e> <2f2e> 4716 <2f2f> <2f2f> 1979 <2f30> <2f30> 1918 <2f31> <2f31> 1738 <2f32> <2f32> 1519 <2f33> <2f33> 4739 <2f34> <2f34> 4741 <2f35> <2f35> 4761 <2f36> <2f36> 4763 <2f37> <2f37> 4768 <2f38> <2f38> 1655 <2f39> <2f39> 14521 <2f3a> <2f3a> 4783 <2f3b> <2f3b> 4785 <2f3c> <2f3c> 2554 <2f3d> <2f3d> 4930 <2f3e> <2f3e> 1921 <2f3f> <2f3f> 2326 <2f40> <2f40> 2215 <2f41> <2f41> 5058 <2f42> <2f42> 3592 <2f43> <2f43> 3143 <2f44> <2f44> 1740 <2f45> <2f45> 3661 <2f46> <2f46> 5088 <2f47> <2f47> 3284 <2f48> <2f48> 5132 <2f49> <2f49> 1860 <2f4a> <2f4a> 3814 <2f4b> <2f4b> 1853 <2f4c> <2f4c> 2221 <2f4d> <2f4d> 5349 <2f4e> <2f4e> 5364 <2f4f> <2f4f> 5368 <2f50> <2f50> 3450 <2f51> <2f51> 3807 <2f52> <2f52> 2223 <2f53> <2f53> 5378 <2f54> <2f54> 2603 <2f55> <2f55> 1360 <2f56> <2f56> 3066 <2f57> <2f57> 3541 <2f58> <2f58> 5604 <2f59> <2f59> 5606 <2f5a> <2f5a> 3618 <2f5b> <2f5b> 1383 <2f5c> <2f5c> 1671 <2f5d> <2f5d> 1880 <2f5e> <2f5e> 1904 <2f5f> <2f5f> 1732 <2f60> <2f60> 1245 <2f61> <2f61> 1504 <2f62> <2f62> 1537 <2f63> <2f63> 2652 <2f64> <2f64> 3899 <2f65> <2f65> 3134 <2f66> <2f66> 3479 <2f67> <2f67> 14848 <2f68> <2f68> 5783 <2f69> <2f69> 3368 <2f6a> <2f6a> 3453 <2f6b> <2f6b> 2172 <2f6c> <2f6c> 3816 <2f6d> <2f6d> 3779 <2f6e> <2f6e> 3836 <2f6f> <2f6f> 2676 <2f70> <2f70> 2260 <2f71> <2f71> 14913 <2f72> <2f72> 1363 <2f73> <2f73> 1856 <2f74> <2f74> 3953 <2f75> <2f75> 2971 <2f76> <2f76> 3606 <2f77> <2f77> 2227 <2f78> <2f78> 1544 <2f79> <2f79> 6163 endcidrange 100 begincidrange <2f7a> <2f7a> 3901 <2f7b> <2f7b> 1227 <2f7c> <2f7c> 4061 <2f7d> <2f7d> 2261 <2f7e> <2f7e> 6205 <2f7f> <2f7f> 2262 <2f80> <2f80> 6227 <2f81> <2f81> 3281 <2f82> <2f82> 2569 <2f83> <2f83> 2263 <2f84> <2f84> 2232 <2f85> <2f85> 1235 <2f86> <2f86> 2697 <2f87> <2f87> 2726 <2f88> <2f88> 2360 <2f89> <2f89> 2081 <2f8a> <2f8a> 2541 <2f8b> <2f8b> 6322 <2f8c> <2f8c> 6479 <2f8d> <2f8d> 2988 <2f8e> <2f8e> 1858 <2f8f> <2f8f> 2022 <2f90> <2f90> 1189 <2f91> <2f91> 6635 <2f92> <2f92> 1887 <2f93> <2f93> 1455 <2f94> <2f94> 1908 <2f95> <2f95> 2921 <2f96> <2f96> 3198 <2f97> <2f97> 6742 <2f98> <2f98> 6745 <2f99> <2f99> 1419 <2f9a> <2f9a> 2682 <2f9b> <2f9b> 2808 <2f9c> <2f9c> 2829 <2f9d> <2f9d> 2574 <2f9e> <2f9e> 2306 <2f9f> <2f9f> 2575 <2fa0> <2fa0> 2914 <2fa1> <2fa1> 15183 <2fa2> <2fa2> 3874 <2fa3> <2fa3> 3243 <2fa4> <2fa4> 3428 <2fa5> <2fa5> 3948 <2fa6> <2fa6> 1754 <2fa7> <2fa7> 3029 <2fa8> <2fa8> 3827 <2fa9> <2fa9> 3550 <2faa> <2faa> 7113 <2fab> <2fab> 7115 <2fac> <2fac> 1229 <2fad> <2fad> 8695 <2fae> <2fae> 3463 <2faf> <2faf> 3800 <2fb0> <2fb0> 1461 <2fb1> <2fb1> 7171 <2fb2> <2fb2> 7173 <2fb3> <2fb3> 1339 <2fb4> <2fb4> 3607 <2fb5> <2fb5> 3561 <2fb6> <2fb6> 3464 <2fb7> <2fb7> 2543 <2fb8> <2fb8> 2335 <2fb9> <2fb9> 2035 <2fba> <2fba> 3333 <2fbb> <2fbb> 2062 <2fbc> <2fbc> 2036 <2fbd> <2fbd> 7276 <2fbe> <2fbe> 7293 <2fbf> <2fc0> 7299 <2fc1> <2fc1> 1614 <2fc2> <2fc2> 1685 <2fc3> <2fc3> 3031 <2fc4> <2fc4> 7414 <2fc5> <2fc5> 2267 <2fc6> <2fc6> 7425 <2fc7> <2fc7> 3729 <2fc8> <2fc8> 13323 <2fc9> <2fc9> 1642 <2fca> <2fca> 2055 <2fcb> <2fcb> 7446 <2fcc> <2fcc> 7449 <2fcd> <2fcd> 3102 <2fce> <2fce> 1937 <2fcf> <2fcf> 2767 <2fd0> <2fd0> 3475 <2fd1> <2fd2> 7457 <2fd3> <2fd3> 3966 <2fd4> <2fd5> 7472 <3000> <3002> 633 <3003> <3003> 655 <3004> <3004> 8308 <3005> <3007> 657 <3008> <3011> 682 <3012> <3012> 735 <3013> <3013> 740 <3014> <3015> 676 <301c> <301c> 665 <301d> <301d> 7608 <301f> <301f> 7609 endcidrange 100 begincidrange <3020> <3020> 8058 <3030> <3030> 12218 <3033> <3035> 12108 <3036> <3036> 8057 <3041> <3093> 842 <3094> <3094> 7958 <309b> <309c> 643 <309d> <309e> 653 <30a1> <30f6> 925 <30f7> <30fa> 8313 <30fb> <30fb> 638 <30fc> <30fc> 660 <30fd> <30fe> 651 <3220> <3229> 10126 <322a> <322f> 8198 <3230> <3230> 8197 <3231> <3232> 7618 <3233> <3233> 8143 <3234> <3234> 8141 <3235> <3235> 8148 <3236> <3236> 8147 <3237> <3237> 8204 <3238> <3238> 8142 <3239> <3239> 7620 <323a> <323a> 8151 <323b> <323b> 8149 <323c> <323c> 8144 <323d> <323d> 8139 <323e> <323e> 8146 <323f> <323f> 8140 <3240> <3240> 8150 <3241> <3241> 8205 <3242> <3242> 8145 <3243> <3243> 8138 <3280> <3289> 10461 <328a> <328f> 10472 <3290> <3290> 10471 <3291> <3291> 8161 <3292> <3292> 8160 <3293> <3293> 8162 <3294> <3294> 8156 <3295> <3295> 10495 <3296> <3296> 8165 <3297> <3297> 10492 <3298> <3298> 8158 <3299> <3299> 8223 <329a> <329a> 10489 <329b> <329b> 10488 <329c> <329c> 10494 <329d> <329d> 8319 <329e> <329e> 8191 <329f> <329f> 10479 <32a0> <32a1> 10486 <32a2> <32a2> 10491 <32a3> <32a3> 10490 <32a4> <32a8> 7613 <32a9> <32a9> 8154 <32aa> <32aa> 8157 <32ab> <32ab> 8159 <32ac> <32ac> 8163 <32ad> <32ad> 8153 <32ae> <32ae> 8164 <32af> <32af> 8155 <32b0> <32b0> 8152 <32d0> <32fe> 10413 <3300> <3300> 8048 <3301> <3302> 11874 <3303> <3303> 8042 <3304> <3304> 11876 <3305> <3305> 8183 <3306> <3306> 11877 <3307> <3307> 11881 <3308> <3308> 11879 <3309> <3309> 11884 <330a> <330a> 11882 <330b> <330b> 11886 <330c> <330c> 11888 <330d> <330d> 7595 <330e> <3313> 11889 <3314> <3314> 7586 <3315> <3315> 8041 <3316> <3316> 8039 <3317> <3317> 11896 <3318> <3318> 8040 <3319> <3319> 11898 <331a> <331d> 11900 <331e> <331e> 8051 <331f> <3321> 11904 <3322> <3322> 8038 <3323> <3323> 8043 <3324> <3324> 11907 <3325> <3325> 11909 <3326> <3326> 7596 <3327> <3327> 7590 <3328> <3329> 11912 <332a> <332a> 8052 <332b> <332b> 7598 <332d> <332d> 11915 <332e> <3330> 11918 <3331> <3331> 8049 endcidrange 100 begincidrange <3332> <3332> 11921 <3333> <3333> 8327 <3334> <3335> 11924 <3336> <3336> 7592 <3337> <3337> 11930 <3338> <3338> 11932 <3339> <3339> 8046 <333a> <333a> 11933 <333b> <333b> 8047 <333c> <333c> 11926 <333d> <333d> 11934 <333e> <3340> 11936 <3341> <3341> 11935 <3342> <3342> 8045 <3343> <3346> 11939 <3347> <3347> 8050 <3348> <3348> 11943 <3349> <3349> 7585 <334a> <334a> 7599 <334b> <334c> 11944 <334d> <334d> 7588 <334e> <334e> 8328 <334f> <3350> 11946 <3351> <3351> 7593 <3352> <3352> 11950 <3353> <3353> 11954 <3354> <3354> 11951 <3355> <3356> 11955 <3357> <3357> 8044 <3371> <3371> 11861 <337b> <337b> 8323 <337c> <337c> 7623 <337d> <337d> 7622 <337e> <337e> 7621 <337f> <337f> 8054 <3385> <3387> 8031 <3388> <3389> 8192 <338d> <338d> 11864 <338e> <338f> 7604 <3390> <3390> 8035 <3396> <3396> 8037 <3397> <3397> 8024 <3398> <3398> 8026 <339b> <339b> 11865 <339c> <339e> 7601 <339f> <339f> 8186 <33a0> <33a0> 8020 <33a1> <33a1> 7607 <33a2> <33a2> 8021 <33a3> <33a3> 8187 <33a4> <33a5> 8022 <33a6> <33a6> 8188 <33b0> <33b0> 8030 <33b1> <33b1> 8029 <33b2> <33b2> 8028 <33b3> <33b3> 8027 <33c2> <33c2> 11856 <33c4> <33c4> 7606 <33c8> <33c8> 8194 <33cb> <33cb> 8034 <33cc> <33cc> 8182 <33cd> <33cd> 7611 <33d4> <33d4> 8036 <33d7> <33d8> 11869 <33da> <33da> 11851 <3402> <3402> 13698 <3405> <3405> 15387 <3427> <3427> 13910 <3488> <3488> 15442 <34db> <34db> 15425 <351f> <351f> 13865 <353e> <353e> 14110 <378d> <378d> 13850 <37e2> <37e2> 14123 <3af3> <3af3> 15424 <3b22> <3b22> 15433 <3b88> <3b88> 13965 <3e8a> <3e8a> 15427 <3eda> <3eda> 15432 <3fb1> <3fb1> 14164 <4093> <4093> 15436 <4103> <4103> 15439 <4264> <4264> 14176 <4293> <4293> 15440 <440c> <440c> 15426 <4453> <4453> 14195 <457a> <457a> 15435 <4665> <4665> 15438 <46ae> <46ae> 15441 <4be8> <4be8> 15430 <4e00> <4e00> 1200 <4e01> <4e01> 3000 <4e03> <4e03> 2275 <4e04> <4e05> 14296 <4e07> <4e07> 3754 <4e08> <4e08> 2510 <4e09> <4e09> 2174 <4e0a> <4e0a> 2509 <4e0b> <4e0b> 1340 <4e0d> <4e0d> 3526 endcidrange 100 begincidrange <4e0e> <4e0e> 3881 <4e10> <4e10> 4091 <4e11> <4e11> 1233 <4e14> <4e14> 1484 <4e15> <4e15> 4092 <4e16> <4e16> 2632 <4e17> <4e17> 4311 <4e18> <4e18> 1648 <4e19> <4e19> 3594 <4e1e> <4e1e> 2511 <4e1f> <4e1f> 14298 <4e21> <4e21> 3974 <4e26> <4e26> 3602 <4e28> <4e28> 8371 <4e2a> <4e2a> 4093 <4e2b> <4e2b> 14299 <4e2c> <4e2c> 14157 <4e2d> <4e2d> 2980 <4e2f> <4e30> 14300 <4e31> <4e31> 4094 <4e32> <4e32> 1778 <4e36> <4e36> 4095 <4e37> <4e37> 13981 <4e38> <4e38> 1561 <4e39> <4e39> 2926 <4e3b> <4e3b> 2323 <4e3c> <4e3c> 4096 <4e3f> <4e3f> 4097 <4e40> <4e41> 14302 <4e42> <4e42> 4098 <4e43> <4e43> 3307 <4e44> <4e44> 14304 <4e45> <4e45> 1649 <4e48> <4e48> 14126 <4e4b> <4e4b> 3309 <4e4d> <4e4d> 3259 <4e4e> <4e4e> 1911 <4e4f> <4e4f> 3681 <4e55> <4e55> 6480 <4e56> <4e56> 4099 <4e57> <4e57> 2512 <4e58> <4e58> 4100 <4e59> <4e59> 1333 <4e5a> <4e5a> 14305 <4e5d> <4e5d> 1757 <4e5e> <4e5e> 1956 <4e5f> <4e5f> 3829 <4e62> <4e62> 4659 <4e71> <4e71> 3930 <4e73> <4e73> 3285 <4e7e> <4e7e> 1505 <4e7f> <4e7f> 14306 <4e80> <4e80> 1615 <4e82> <4e82> 4101 <4e85> <4e85> 4102 <4e86> <4e86> 3971 <4e88> <4e88> 3879 <4e89> <4e89> 2794 <4e8a> <4e8a> 4104 <4e8b> <4e8b> 2244 <4e8c> <4e8c> 3275 <4e8d> <4e8d> 14307 <4e8e> <4e8e> 4107 <4e91> <4e91> 1248 <4e92> <4e92> 1939 <4e94> <4e94> 1938 <4e95> <4e95> 1194 <4e96> <4e96> 14308 <4e98> <4e98> 4081 <4e99> <4e99> 4080 <4e9b> <4e9b> 2083 <4e9c> <4e9c> 1125 <4e9e> <4ea0> 4108 <4ea1> <4ea1> 3682 <4ea2> <4ea2> 4111 <4ea4> <4ea4> 1958 <4ea5> <4ea5> 1195 <4ea6> <4ea6> 3744 <4ea8> <4ea8> 1686 <4eab> <4eac> 1687 <4ead> <4ead> 3070 <4eae> <4eae> 3972 <4eb0> <4eb0> 4112 <4eb3> <4eb3> 4113 <4eb6> <4eb6> 4114 <4eb9> <4eb9> 14309 <4eba> <4eba> 2579 <4ebb> <4ebb> 13856 <4ec0> <4ec0> 2372 <4ec1> <4ec1> 2580 <4ec2> <4ec2> 4119 <4ec4> <4ec4> 4117 <4ec6> <4ec6> 4118 <4ec7> <4ec7> 1650 <4eca> <4eca> 2067 <4ecb> <4ecb> 1392 <4ecd> <4ecd> 4116 <4ece> <4ece> 4115 <4ecf> <4ecf> 3577 <4ed0> <4ed0> 14310 endcidrange 100 begincidrange <4ed4> <4ed4> 2196 <4ed5> <4ed5> 2195 <4ed6> <4ed6> 2846 <4ed7> <4ed7> 4120 <4ed8> <4ed8> 3527 <4ed9> <4ed9> 2699 <4edd> <4edd> 656 <4ede> <4ede> 4121 <4edf> <4edf> 4123 <4ee0> <4ee0> 14311 <4ee1> <4ee1> 8372 <4ee3> <4ee3> 2885 <4ee4> <4ee4> 4009 <4ee5> <4ee5> 1166 <4eed> <4eed> 4122 <4eee> <4eee> 1342 <4ef0> <4ef0> 1724 <4ef2> <4ef2> 2981 <4ef6> <4ef6> 1861 <4ef7> <4ef7> 4124 <4efb> <4efb> 3290 <4efc> <4efc> 8373 <4efd> <4efd> 14312 <4eff> <4eff> 14313 <4f00> <4f00> 8374 <4f01> <4f01> 1575 <4f03> <4f03> 8375 <4f09> <4f09> 4125 <4f0a> <4f0a> 1167 <4f0b> <4f0b> 14314 <4f0d> <4f0d> 1940 <4f0e> <4f0e> 1576 <4f0f> <4f0f> 3564 <4f10> <4f10> 3398 <4f11> <4f11> 1651 <4f15> <4f15> 14315 <4f1a> <4f1a> 1393 <4f1c> <4f1c> 4160 <4f1d> <4f1d> 3131 <4f2f> <4f2f> 3362 <4f30> <4f30> 4127 <4f34> <4f34> 3408 <4f36> <4f36> 4010 <4f38> <4f38> 2547 <4f39> <4f39> 8376 <4f3a> <4f3a> 2197 <4f3b> <4f3b> 14317 <4f3c> <4f3c> 2245 <4f3d> <4f3d> 1344 <4f43> <4f43> 3053 <4f46> <4f46> 2912 <4f47> <4f47> 4131 <4f49> <4f49> 14318 <4f4d> <4f4d> 1168 <4f4e> <4f4e> 3071 <4f4f> <4f4f> 2373 <4f50> <4f50> 2084 <4f51> <4f51> 3854 <4f53> <4f53> 2862 <4f54> <4f54> 14319 <4f55> <4f55> 1343 <4f56> <4f56> 8377 <4f57> <4f57> 4130 <4f59> <4f59> 3880 <4f5a> <4f5a> 4126 <4f5b> <4f5b> 4128 <4f5c> <4f5c> 2142 <4f5d> <4f5d> 4129 <4f5e> <4f5e> 4563 <4f60> <4f60> 14316 <4f69> <4f69> 4137 <4f6f> <4f6f> 4140 <4f70> <4f70> 4138 <4f73> <4f73> 1346 <4f75> <4f75> 3595 <4f76> <4f76> 4132 <4f7a> <4f7a> 14320 <4f7b> <4f7b> 4136 <4f7c> <4f7c> 1959 <4f7d> <4f7e> 14321 <4f7f> <4f7f> 2198 <4f83> <4f83> 1506 <4f86> <4f86> 4141 <4f88> <4f88> 4133 <4f8a> <4f8a> 8379 <4f8b> <4f8b> 4011 <4f8d> <4f8d> 2246 <4f8f> <4f8f> 4134 <4f91> <4f91> 4139 <4f92> <4f92> 8378 <4f94> <4f94> 8381 <4f96> <4f96> 4142 <4f97> <4f97> 14323 <4f98> <4f98> 4135 <4f9a> <4f9a> 8380 <4f9b> <4f9b> 1689 <4f9d> <4f9d> 1169 <4fa0> <4fa0> 1690 <4fa1> <4fa1> 1345 <4fab> <4fab> 4564 endcidrange 100 begincidrange <4fad> <4fad> 3751 <4fae> <4fae> 3552 <4faf> <4faf> 1960 <4fb5> <4fb5> 2549 <4fb6> <4fb6> 3967 <4fbe> <4fbe> 14324 <4fbf> <4fbf> 3624 <4fc2> <4fc2> 1806 <4fc3> <4fc3> 2821 <4fc4> <4fc4> 1380 <4fc9> <4fc9> 8364 <4fca> <4fca> 2397 <4fcd> <4fcd> 8382 <4fce> <4fce> 4146 <4fcf> <4fcf> 14325 <4fd0> <4fd0> 4151 <4fd1> <4fd1> 4149 <4fd3> <4fd3> 15407 <4fd4> <4fd4> 4144 <4fd7> <4fd7> 2831 <4fd8> <4fd8> 4147 <4fda> <4fda> 4150 <4fdb> <4fdb> 4148 <4fdd> <4fdd> 3629 <4fdf> <4fdf> 4145 <4fe0> <4fe0> 7660 <4fe1> <4fe1> 2548 <4fe3> <4fe3> 3745 <4fe4> <4fe5> 4152 <4fee> <4fee> 2350 <4fef> <4fef> 4166 <4ff3> <4ff3> 3334 <4ff5> <4ff5> 3496 <4ff6> <4ff6> 4161 <4ff8> <4ff8> 3648 <4ffa> <4ffa> 1334 <4ffd> <4ffd> 14326 <4ffe> <4ffe> 4165 <4fff> <4fff> 8385 <5000> <5001> 14327 <5002> <5002> 13383 <5005> <5005> 4159 <5006> <5006> 4168 <5009> <5009> 2772 <500b> <500b> 1912 <500d> <500d> 3346 <500f> <500f> 5632 <5010> <5010> 14329 <5011> <5011> 4167 <5012> <5012> 3159 <5014> <5014> 4156 <5016> <5016> 1962 <5019> <5019> 1961 <501a> <501a> 4154 <501b> <501b> 14330 <501e> <501e> 8386 <501f> <501f> 2310 <5021> <5021> 4162 <5022> <5022> 8384 <5023> <5023> 3647 <5024> <5024> 2955 <5025> <5025> 4158 <5026> <5026> 1863 <5027> <5027> 14331 <5028> <5028> 4155 <5029> <5029> 4163 <502a> <502a> 4157 <502b> <502b> 3993 <502c> <502c> 4164 <502d> <502d> 4071 <502e> <502e> 14332 <5036> <5036> 1758 <5039> <5039> 1862 <503b> <503b> 14336 <5040> <5040> 8383 <5042> <5042> 8389 <5043> <5043> 4169 <5046> <5046> 8387 <5047> <5047> 4170 <5048> <5048> 4174 <5049> <5049> 1170 <504f> <504f> 3616 <5050> <5050> 4173 <5055> <5055> 4172 <5056> <5056> 4176 <5057> <5057> 14333 <505a> <505a> 4175 <505c> <505c> 3072 <5065> <5065> 1864 <5066> <5066> 14334 <506a> <506a> 14335 <506c> <506c> 4177 <5070> <5070> 8388 <5072> <5072> 2289 <5074> <5074> 2822 <5075> <5075> 3073 <5076> <5076> 1774 <5078> <5078> 4178 <507d> <507d> 1616 <5080> <5080> 4179 endcidrange 100 begincidrange <5085> <5085> 4181 <508d> <508d> 3683 <508f> <508f> 14337 <5091> <5091> 1852 <5094> <5094> 8390 <5096> <5096> 14338 <5098> <5098> 2175 <5099> <5099> 3467 <509a> <509a> 4180 <509c> <509c> 14339 <50ac> <50ac> 2101 <50ad> <50ad> 3885 <50b2> <50b2> 4183 <50b3> <50b3> 4186 <50b4> <50b4> 4182 <50b5> <50b5> 2100 <50b7> <50b7> 2439 <50be> <50be> 1807 <50c2> <50c2> 4187 <50c5> <50c5> 1735 <50c9> <50ca> 4184 <50cc> <50cc> 14340 <50cd> <50cd> 3207 <50cf> <50cf> 2814 <50d1> <50d1> 1691 <50d5> <50d5> 3707 <50d6> <50d6> 4188 <50d8> <50d8> 8392 <50d9> <50d9> 15408 <50da> <50da> 3973 <50de> <50de> 4189 <50e3> <50e3> 4192 <50e5> <50e5> 4190 <50e6> <50e6> 14341 <50e7> <50e7> 2768 <50e9> <50e9> 14342 <50ed> <50ed> 4191 <50ee> <50ee> 4193 <50ef> <50ef> 14343 <50f0> <50f0> 15409 <50f4> <50f4> 8391 <50f5> <50f5> 4195 <50f9> <50f9> 4194 <50fb> <50fb> 3608 <5100> <5100> 1617 <5101> <5102> 4197 <5104> <5104> 1327 <5108> <5108> 14344 <5109> <5109> 4196 <510b> <510b> 14345 <5110> <5110> 14346 <5112> <5112> 2336 <5114> <5114> 4201 <5115> <5115> 4200 <5116> <5116> 4199 <5118> <5118> 4143 <511a> <511a> 4202 <511b> <511b> 14347 <511e> <511e> 14348 <511f> <511f> 2440 <5121> <5121> 4203 <512a> <512a> 3855 <5132> <5132> 3813 <5137> <5137> 4205 <513a> <513a> 4204 <513b> <513b> 4207 <513c> <513c> 4206 <513f> <5140> 4208 <5141> <5141> 1208 <5143> <5143> 1897 <5144> <5144> 1809 <5145> <5145> 2374 <5146> <5146> 3001 <5147> <5147> 1692 <5148> <5148> 2700 <5149> <5149> 1963 <514a> <514a> 8393 <514b> <514b> 2048 <514c> <514c> 4211 <514d> <514d> 3796 <514e> <514e> 3136 <5150> <5150> 2247 <5152> <5152> 4210 <5154> <5154> 4212 <515a> <515a> 3160 <515c> <515c> 1491 <515f> <515f> 14349 <5162> <5162> 4213 <5164> <5164> 8394 <5165> <5165> 3286 <5167> <5167> 13966 <5168> <5168> 2742 <5169> <516a> 4215 <516b> <516b> 3392 <516c> <516c> 1964 <516d> <516d> 4065 <516e> <516e> 4217 <5171> <5171> 1694 <5175> <5175> 3596 <5176> <5176> 2838 endcidrange 100 begincidrange <5177> <5177> 1769 <5178> <5178> 3119 <5179> <5179> 14201 <517c> <517c> 1865 <5180> <5180> 4218 <5182> <5182> 4219 <5185> <5185> 3258 <5186> <5186> 1281 <5189> <5189> 4222 <518a> <518a> 2157 <518c> <518c> 4221 <518d> <518d> 2102 <518f> <518f> 4223 <5190> <5190> 6235 <5191> <5191> 4224 <5192> <5192> 3695 <5193> <5193> 4225 <5195> <5196> 4226 <5197> <5197> 2513 <5199> <5199> 2296 <519d> <519d> 8395 <51a0> <51a0> 1507 <51a1> <51a1> 14350 <51a2> <51a2> 4230 <51a4> <51a4> 4228 <51a5> <51a5> 3785 <51a6> <51a6> 4229 <51a8> <51a8> 3532 <51a9> <51ab> 4231 <51ac> <51ac> 3161 <51b0> <51b0> 4237 <51b1> <51b2> 4235 <51b3> <51b3> 4234 <51b4> <51b4> 2131 <51b5> <51b5> 4238 <51b6> <51b6> 3830 <51b7> <51b7> 4012 <51bc> <51bc> 14351 <51bd> <51bd> 4239 <51be> <51be> 8396 <51c3> <51c3> 15410 <51c4> <51c4> 2636 <51c5> <51c5> 4240 <51c6> <51c6> 2404 <51c9> <51c9> 4241 <51cb> <51cb> 3002 <51cc> <51cc> 3975 <51cd> <51cd> 3162 <51d6> <51d6> 4314 <51db> <51db> 4242 <51dc> <51dc> 8284 <51dd> <51dd> 1725 <51de> <51de> 14352 <51e0> <51e0> 4243 <51e1> <51e1> 3724 <51e6> <51e6> 2418 <51e7> <51e7> 2908 <51e9> <51e9> 4245 <51ea> <51ea> 3260 <51ec> <51ec> 8397 <51ed> <51ed> 4246 <51ee> <51ee> 14353 <51f0> <51f0> 4247 <51f1> <51f1> 1420 <51f4> <51f4> 14354 <51f5> <51f5> 4248 <51f6> <51f6> 1695 <51f8> <51f8> 3236 <51f9> <51f9> 1308 <51fa> <51fa> 2394 <51fd> <51fd> 3381 <51fe> <51fe> 4249 <5200> <5200> 3163 <5201> <5202> 14355 <5203> <5203> 2581 <5204> <5204> 4250 <5206> <5206> 3580 <5207> <5207> 2686 <5208> <5208> 1502 <520a> <520a> 1509 <520b> <520b> 4251 <520e> <520e> 4253 <5211> <5211> 1808 <5213> <5213> 14357 <5214> <5214> 4252 <5215> <5215> 8398 <5217> <5217> 4027 <521d> <521d> 2419 <5224> <5224> 3409 <5225> <5225> 3612 <5227> <5227> 4254 <5229> <5229> 3938 <522a> <522a> 4255 <522e> <522e> 4256 <5230> <5230> 3192 <5233> <5233> 4257 <5236> <5236> 2637 <5237> <5237> 2158 <5238> <5238> 1866 <5239> <5239> 4258 endcidrange 100 begincidrange <523a> <523a> 2199 <523b> <523b> 2049 <5243> <5243> 3074 <5244> <5244> 4260 <5247> <5247> 2823 <5249> <5249> 14358 <524a> <524a> 2143 <524b> <524c> 4261 <524d> <524d> 2738 <524f> <524f> 4259 <5254> <5254> 4264 <5256> <5256> 3684 <525b> <525b> 2038 <525d> <525d> 7774 <525e> <525e> 4263 <5261> <5261> 14359 <5263> <5263> 1867 <5264> <5264> 2126 <5265> <5265> 3363 <5266> <5266> 14360 <5269> <5269> 4267 <526a> <526a> 4265 <526f> <526f> 3565 <5270> <5270> 2514 <5271> <5271> 4274 <5272> <5272> 1474 <5273> <5273> 4268 <5274> <5274> 4266 <5275> <5275> 2769 <527d> <527d> 4270 <527f> <527f> 4269 <5283> <5283> 1442 <5287> <5287> 1846 <5288> <5288> 4275 <5289> <5289> 3957 <528d> <528d> 4271 <5291> <5291> 4276 <5292> <5292> 4273 <5293> <5293> 14361 <5294> <5294> 4272 <529b> <529b> 3991 <529c> <529c> 8399 <529f> <529f> 1965 <52a0> <52a0> 1347 <52a3> <52a3> 4028 <52a6> <52a6> 8400 <52a9> <52a9> 2431 <52aa> <52aa> 3154 <52ab> <52ab> 2039 <52ac> <52ad> 4279 <52af> <52af> 8573 <52b1> <52b1> 4013 <52b4> <52b4> 4049 <52b5> <52b5> 4282 <52b9> <52b9> 1966 <52bc> <52bc> 4281 <52be> <52be> 1421 <52c0> <52c0> 8401 <52c1> <52c1> 4283 <52c3> <52c3> 3716 <52c5> <52c5> 3032 <52c7> <52c7> 3856 <52c8> <52c8> 14362 <52c9> <52c9> 3625 <52cd> <52cd> 4284 <52d0> <52d0> 14056 <52d2> <52d2> 7150 <52d5> <52d5> 3208 <52d7> <52d7> 4285 <52d8> <52d8> 1510 <52d9> <52d9> 3775 <52db> <52db> 8402 <52dd> <52dd> 2441 <52de> <52de> 4286 <52df> <52df> 3639 <52e0> <52e0> 4290 <52e2> <52e2> 2638 <52e3> <52e3> 4287 <52e4> <52e4> 1736 <52e6> <52e6> 4288 <52e7> <52e7> 1511 <52f0> <52f0> 14363 <52f2> <52f2> 1796 <52f3> <52f3> 4291 <52f5> <52f5> 4292 <52f8> <52f9> 4293 <52fa> <52fa> 2311 <52fe> <52fe> 1967 <52ff> <52ff> 3818 <5300> <5300> 8403 <5301> <5301> 3828 <5302> <5302> 3279 <5305> <5305> 3649 <5306> <5306> 4295 <5307> <5307> 8404 <5308> <5308> 4296 <530a> <530b> 14364 <530d> <530d> 4298 <530f> <530f> 4300 <5310> <5310> 4299 endcidrange 100 begincidrange <5315> <5315> 4301 <5316> <5316> 1341 <5317> <5317> 3706 <5319> <5319> 2156 <531a> <531a> 4302 <531d> <531d> 2779 <5320> <5320> 2442 <5321> <5321> 1697 <5323> <5323> 4303 <5324> <5324> 8405 <532a> <532a> 3439 <532f> <532f> 4304 <5331> <5331> 4305 <5333> <5333> 4306 <5338> <5338> 4307 <5339> <5339> 3478 <533a> <533a> 1760 <533b> <533b> 1193 <533e> <533e> 14366 <533f> <533f> 3223 <5340> <5340> 4308 <5341> <5341> 2375 <5343> <5343> 2701 <5345> <5345> 4310 <5346> <5346> 4309 <5347> <5347> 2443 <5348> <5348> 1941 <5349> <5349> 4312 <534a> <534a> 3410 <534b> <534b> 14368 <534c> <534c> 14367 <534d> <534d> 4313 <5351> <5351> 3440 <5352> <5352> 2836 <5353> <5353> 2894 <5354> <5354> 1696 <5357> <5357> 3270 <5358> <5358> 2927 <535a> <535a> 3364 <535c> <535c> 3708 <535e> <535e> 4315 <5360> <5360> 2702 <5361> <5361> 14369 <5366> <5366> 1803 <5369> <5369> 4316 <536c> <536c> 14370 <536e> <536e> 4317 <536f> <536f> 1230 <5370> <5370> 1209 <5371> <5371> 1577 <5372> <5372> 8406 <5373> <5373> 2824 <5374> <5374> 1643 <5375> <5375> 3931 <5377> <5377> 4320 <5378> <5378> 1335 <537b> <537b> 4319 <537d> <537d> 13365 <537f> <537f> 1698 <5382> <5382> 4321 <5384> <5384> 3837 <5389> <5389> 14288 <5393> <5393> 8407 <5396> <5396> 4322 <5398> <5398> 3994 <539a> <539a> 1968 <539f> <539f> 1898 <53a0> <53a0> 4323 <53a5> <53a5> 4325 <53a6> <53a6> 4324 <53a8> <53a8> 2597 <53a9> <53a9> 1243 <53ab> <53ab> 14371 <53ad> <53ad> 1280 <53ae> <53ae> 4326 <53b0> <53b0> 4327 <53b2> <53b2> 8408 <53b3> <53b3> 1899 <53b6> <53b6> 4328 <53bb> <53bb> 1672 <53c2> <53c2> 2176 <53c3> <53c3> 4329 <53c8> <53c8> 3746 <53c9> <53c9> 2085 <53ca> <53ca> 1652 <53cb> <53cb> 3857 <53cc> <53cc> 2770 <53cd> <53cd> 3411 <53ce> <53ce> 2345 <53d4> <53d4> 2385 <53d6> <53d6> 2324 <53d7> <53d7> 2337 <53d9> <53d9> 2432 <53da> <53da> 14372 <53db> <53db> 3412 <53dd> <53dd> 8409 <53df> <53df> 4332 <53e1> <53e1> 1253 <53e2> <53e2> 2771 <53e3> <53e3> 1969 endcidrange 100 begincidrange <53e4> <53e4> 1913 <53e5> <53e5> 1759 <53e6> <53e6> 14373 <53e8> <53e8> 4336 <53e9> <53e9> 2911 <53ea> <53ea> 2910 <53eb> <53eb> 1699 <53ec> <53ec> 2444 <53ed> <53ed> 4337 <53ee> <53ee> 4335 <53ef> <53ef> 1348 <53f0> <53f0> 2886 <53f1> <53f1> 2276 <53f2> <53f2> 2201 <53f3> <53f3> 1224 <53f5> <53f5> 14374 <53f6> <53f6> 1486 <53f7> <53f7> 2040 <53f8> <53f8> 2200 <53fa> <53fa> 4338 <5401> <5401> 4339 <5403> <5403> 1635 <5404> <5404> 1444 <5408> <5408> 2041 <5409> <5409> 1634 <540a> <540a> 3067 <540b> <540b> 1223 <540c> <540c> 3209 <540d> <540d> 3786 <540e> <540e> 1971 <540f> <540f> 3939 <5410> <5410> 3137 <5411> <5411> 1970 <541b> <541b> 1797 <541d> <541d> 4348 <541f> <541f> 1755 <5420> <5420> 3704 <5426> <5426> 3441 <5427> <5427> 14375 <5429> <5429> 4347 <542b> <542b> 1562 <542c> <542d> 4342 <542e> <542e> 4345 <5433> <5433> 13760 <5436> <5436> 4346 <5438> <5438> 1653 <5439> <5439> 2599 <543b> <543b> 3581 <543c> <543c> 4344 <543d> <543d> 4340 <543e> <543e> 1943 <543f> <543f> 13775 <5440> <5440> 4341 <5442> <5442> 4042 <5446> <5446> 3650 <5448> <5448> 3076 <5449> <5449> 1942 <544a> <544a> 2050 <544d> <544d> 14376 <544e> <544e> 4349 <5451> <5451> 3253 <5455> <5455> 14115 <545f> <545f> 4353 <5466> <5466> 14377 <5468> <5468> 2346 <546a> <546a> 2338 <546b> <546b> 14378 <5470> <5470> 4356 <5471> <5471> 4354 <5473> <5473> 3759 <5474> <5474> 14379 <5475> <5475> 4351 <5476> <5476> 4360 <5477> <5477> 4355 <547b> <547b> 4358 <547c> <547c> 1914 <547d> <547d> 3787 <5480> <5480> 4359 <5484> <5484> 4361 <5486> <5486> 4363 <548a> <548a> 8412 <548b> <548b> 2144 <548c> <548c> 4072 <548d> <548d> 14380 <548e> <548e> 4352 <548f> <548f> 4350 <5490> <5490> 4362 <5492> <5492> 4357 <5496> <5496> 14381 <549c> <549c> 8411 <54a1> <54a1> 14382 <54a2> <54a2> 4365 <54a4> <54a4> 4374 <54a5> <54a5> 4367 <54a8> <54a8> 4371 <54a9> <54a9> 8413 <54ab> <54ab> 4372 <54ac> <54ac> 4368 <54ad> <54ad> 14383 <54af> <54af> 4401 endcidrange 100 begincidrange <54b2> <54b2> 2137 <54b3> <54b3> 1423 <54b8> <54b8> 4366 <54b9> <54b9> 14384 <54bc> <54bc> 4376 <54bd> <54bd> 1210 <54be> <54be> 4375 <54bf> <54bf> 14385 <54c0> <54c0> 1129 <54c1> <54c1> 3516 <54c2> <54c2> 4373 <54c4> <54c4> 4369 <54c6> <54c6> 14386 <54c7> <54c7> 4364 <54c8> <54c8> 4370 <54c9> <54c9> 2104 <54cd> <54cd> 14387 <54d8> <54d8> 4377 <54e1> <54e1> 1211 <54e2> <54e2> 4386 <54e5> <54e6> 4378 <54e8> <54e8> 2445 <54e9> <54e9> 3735 <54ed> <54ed> 4384 <54ee> <54ee> 4383 <54f2> <54f2> 3113 <54fa> <54fa> 4385 <54fd> <54fd> 4382 <54ff> <54ff> 8414 <5504> <5504> 1238 <5506> <5506> 2086 <5507> <5507> 2550 <550e> <550e> 14388 <550f> <550f> 4380 <5510> <5510> 3164 <5514> <5514> 4381 <5516> <5516> 1126 <552b> <552b> 14389 <552e> <552e> 4391 <552f> <552f> 3853 <5531> <5531> 2447 <5533> <5533> 4397 <5535> <5535> 14390 <5538> <5538> 4396 <5539> <5539> 4387 <553e> <553e> 2851 <5540> <5540> 4388 <5544> <5544> 2895 <5545> <5545> 4393 <5546> <5546> 2446 <554a> <554a> 14391 <554c> <554c> 4390 <554f> <554f> 3824 <5553> <5553> 1810 <5556> <5557> 4394 <555c> <555c> 4392 <555d> <555d> 4398 <555e> <555e> 7633 <5560> <5561> 14392 <5563> <5563> 4389 <557b> <557b> 4404 <557c> <557c> 4409 <557e> <557e> 4405 <5580> <5580> 4400 <5583> <5583> 4410 <5584> <5584> 2739 <5586> <5586> 8415 <5587> <5587> 4412 <5588> <5588> 14394 <5589> <5589> 1972 <558a> <558a> 4402 <558b> <558b> 3003 <558e> <558e> 14395 <5598> <5598> 4406 <5599> <5599> 4399 <559a> <559a> 1513 <559c> <559c> 1578 <559d> <559d> 1475 <559e> <559e> 4407 <559f> <559f> 4403 <55a7> <55a7> 1868 <55a8> <55a8> 4413 <55a9> <55a9> 4411 <55aa> <55aa> 2773 <55ab> <55ab> 1636 <55ac> <55ac> 1700 <55ae> <55ae> 4408 <55b0> <55b0> 1772 <55b6> <55b6> 1254 <55c4> <55c4> 4417 <55c5> <55c5> 4415 <55c7> <55c7> 4472 <55d4> <55d4> 4420 <55da> <55da> 4414 <55dc> <55dc> 4418 <55df> <55df> 4416 <55e3> <55e3> 2202 <55e4> <55e4> 4419 <55f7> <55f7> 4422 <55f9> <55f9> 4427 endcidrange 100 begincidrange <55fd> <55fd> 4425 <55fe> <55fe> 4424 <5606> <5606> 2928 <5608> <5608> 14396 <5609> <5609> 1349 <560e> <560f> 14397 <5614> <5614> 4421 <5616> <5616> 4423 <5617> <5617> 2448 <5618> <5618> 1237 <561b> <561b> 4426 <5620> <5620> 15389 <5629> <5629> 1374 <562f> <562f> 4437 <5631> <5631> 2532 <5632> <5632> 4433 <5634> <5634> 4431 <5636> <5636> 4432 <5637> <5637> 14399 <5638> <5638> 4434 <563f> <563f> 14400 <5642> <5642> 1247 <5649> <5649> 14401 <564b> <564b> 14402 <564c> <564c> 2747 <564e> <564e> 4428 <564f> <564f> 14403 <5650> <5650> 4429 <5653> <5653> 7963 <565b> <565b> 1496 <5664> <5664> 4436 <5666> <5666> 14404 <5668> <5668> 1579 <5669> <5669> 14405 <566a> <566a> 4439 <566b> <566b> 4435 <566c> <566c> 4438 <566f> <566f> 14406 <5671> <5672> 14407 <5674> <5674> 3582 <5676> <5676> 15411 <5678> <5678> 3245 <567a> <567a> 3404 <5680> <5680> 4441 <5686> <5686> 4440 <5687> <5687> 1443 <568a> <568a> 4442 <568f> <568f> 4445 <5694> <5694> 4444 <5695> <5695> 14409 <5699> <5699> 7654 <569a> <569a> 14410 <56a0> <56a0> 4443 <56a2> <56a2> 3311 <56a5> <56a5> 4446 <56ac> <56ad> 14411 <56ae> <56ae> 4447 <56b1> <56b1> 14413 <56b4> <56b4> 4449 <56b6> <56b6> 4448 <56bc> <56bc> 4451 <56c0> <56c0> 4454 <56c1> <56c1> 4452 <56c2> <56c2> 4450 <56c3> <56c3> 4453 <56c8> <56c8> 4455 <56c9> <56c9> 14414 <56ca> <56ca> 7770 <56ce> <56ce> 4456 <56d1> <56d1> 4457 <56d3> <56d3> 4458 <56d7> <56d7> 4459 <56d8> <56d8> 4220 <56da> <56da> 2344 <56db> <56db> 2203 <56dd> <56dd> 14415 <56de> <56de> 1395 <56e0> <56e0> 1212 <56e3> <56e3> 2946 <56e4> <56e4> 14416 <56ee> <56ee> 4460 <56f0> <56f0> 2068 <56f2> <56f2> 1171 <56f3> <56f3> 2596 <56f9> <56f9> 4461 <56fa> <56fa> 1915 <56fd> <56fd> 2051 <56ff> <56ff> 4463 <5700> <5700> 4462 <5703> <5703> 3632 <5704> <5704> 4464 <5708> <5708> 4466 <5709> <5709> 4465 <570a> <570a> 14417 <570b> <570b> 4467 <570d> <570d> 4468 <570f> <570f> 1869 <5712> <5712> 1282 <5713> <5713> 4469 <5715> <5715> 14418 endcidrange 100 begincidrange <5716> <5716> 4471 <5718> <5718> 4470 <571c> <571c> 4473 <571f> <571f> 3156 <5721> <5721> 13952 <5723> <5723> 14419 <5726> <5726> 4474 <5727> <5727> 1145 <5728> <5728> 2127 <572d> <572d> 1811 <572f> <572f> 14420 <5730> <5730> 2957 <5733> <5734> 14421 <5737> <5738> 4475 <573b> <573b> 4478 <5740> <5740> 4479 <5742> <5742> 2132 <5747> <5747> 1737 <574a> <574a> 3685 <574c> <574c> 14423 <574e> <574e> 4477 <574f> <574f> 4480 <5750> <5750> 2097 <5751> <5751> 1973 <5759> <5759> 8416 <5761> <5761> 4484 <5764> <5764> 2069 <5765> <5765> 8417 <5766> <5766> 2929 <5769> <5769> 4481 <576a> <576a> 3062 <5770> <5770> 14424 <577f> <577f> 4485 <5782> <5782> 2600 <5788> <5788> 4483 <5789> <5789> 4486 <578b> <578b> 1813 <578c> <578c> 14425 <5793> <5793> 4487 <579c> <579c> 14426 <57a0> <57a0> 4488 <57a2> <57a2> 1974 <57a3> <57a3> 1438 <57a4> <57a4> 4490 <57aa> <57aa> 4491 <57ac> <57ac> 8418 <57b0> <57b0> 4492 <57b3> <57b3> 4489 <57b8> <57b8> 14427 <57c0> <57c0> 4482 <57c3> <57c3> 4493 <57c6> <57c6> 4494 <57c7> <57c7> 8420 <57c8> <57c8> 8419 <57cb> <57cb> 3730 <57ce> <57ce> 2515 <57d2> <57d3> 4496 <57d4> <57d4> 4495 <57d6> <57d6> 4499 <57dc> <57dc> 3310 <57df> <57df> 1196 <57e0> <57e0> 3528 <57e3> <57e3> 4500 <57e6> <57e6> 14428 <57ed> <57ed> 14429 <57f4> <57f4> 2533 <57f5> <57f6> 14430 <57f7> <57f7> 2277 <57f9> <57f9> 3347 <57fa> <57fa> 1580 <57fc> <57fc> 2139 <57ff> <57ff> 14432 <5800> <5800> 3719 <5802> <5802> 3210 <5805> <5805> 1870 <5806> <5806> 2863 <5809> <5809> 14433 <580a> <580a> 4498 <580b> <580b> 4501 <5815> <5815> 2852 <5819> <5819> 4502 <581d> <581d> 4503 <5820> <5820> 14434 <5821> <5821> 4505 <5824> <5824> 3077 <582a> <582a> 1514 <582f> <582f> 7474 <5830> <5830> 1283 <5831> <5831> 3651 <5832> <5832> 14435 <5834> <5834> 2516 <5835> <5835> 3138 <583a> <583a> 2134 <583d> <583d> 4511 <5840> <5840> 3597 <5841> <5841> 4005 <584a> <584a> 1396 <584b> <584b> 4507 <5851> <5851> 2748 <5852> <5852> 4510 endcidrange 100 begincidrange <5854> <5854> 3165 <5857> <5857> 3139 <5858> <5858> 3166 <5859> <5859> 3405 <585a> <585a> 3049 <585e> <585e> 2105 <5861> <5861> 7751 <5862> <5862> 4506 <5869> <5869> 1304 <586b> <586b> 3120 <5870> <5870> 4508 <5872> <5872> 4504 <5875> <5875> 2582 <5879> <5879> 4512 <587c> <587c> 14436 <587e> <587e> 2392 <5880> <5880> 14437 <5883> <5883> 1701 <5885> <5885> 4513 <5893> <5893> 3640 <5897> <5897> 2815 <589c> <589c> 3042 <589e> <589e> 8423 <589f> <589f> 4515 <58a8> <58a8> 3709 <58a9> <58a9> 14438 <58ab> <58ab> 4516 <58ae> <58ae> 4521 <58b2> <58b2> 8424 <58b3> <58b3> 3583 <58b8> <58b8> 4520 <58b9> <58b9> 4514 <58ba> <58ba> 4517 <58bb> <58bb> 4519 <58be> <58be> 2070 <58c1> <58c1> 3609 <58c5> <58c5> 4522 <58c7> <58c7> 2947 <58ca> <58ca> 1397 <58cc> <58cc> 2517 <58ce> <58ce> 14439 <58d0> <58d0> 14440 <58d1> <58d1> 4524 <58d3> <58d3> 4523 <58d4> <58d4> 14441 <58d5> <58d5> 2042 <58d7> <58d7> 4525 <58d8> <58d8> 4527 <58d9> <58d9> 4526 <58da> <58da> 14442 <58dc> <58dc> 4529 <58de> <58de> 4518 <58df> <58df> 4531 <58e4> <58e4> 4530 <58e5> <58e5> 4528 <58e9> <58e9> 14443 <58eb> <58eb> 2204 <58ec> <58ec> 2583 <58ee> <58ee> 2774 <58ef> <58ef> 4532 <58f0> <58f0> 2656 <58f1> <58f1> 1201 <58f2> <58f2> 3354 <58f7> <58f7> 3063 <58f9> <58f9> 4534 <58fa> <58fa> 4533 <58fb> <58fd> 4535 <5902> <5902> 4538 <5909> <5909> 3617 <590a> <590a> 4539 <590b> <590b> 8425 <590c> <590c> 14444 <590f> <590f> 1350 <5910> <5910> 4540 <5915> <5915> 3878 <5916> <5916> 1422 <5918> <5918> 4318 <5919> <5919> 2386 <591a> <591a> 2847 <591b> <591b> 4541 <591c> <591c> 3831 <5922> <5922> 3776 <5924> <5924> 14445 <5925> <5925> 4543 <5927> <5927> 2887 <5929> <5929> 3121 <592a> <592a> 2848 <592b> <592b> 3529 <592c> <592d> 4544 <592e> <592e> 1309 <592f> <592f> 14446 <5931> <5931> 2278 <5932> <5932> 4546 <5937> <5937> 1172 <5938> <5938> 4547 <5939> <5939> 14117 <593e> <593e> 4548 <5944> <5944> 1284 <5947> <5947> 1581 <5948> <5948> 3256 endcidrange 100 begincidrange <5949> <5949> 3652 <594e> <594e> 4552 <594f> <594f> 2775 <5950> <5950> 4551 <5951> <5951> 1814 <5953> <5953> 8426 <5954> <5954> 3721 <5955> <5955> 4550 <5957> <5957> 3167 <5958> <5958> 4554 <595a> <595a> 4553 <595b> <595b> 8427 <595d> <595d> 8428 <5960> <5960> 4556 <5961> <5961> 14447 <5962> <5962> 4555 <5963> <5963> 8429 <5965> <5965> 1310 <5967> <5967> 4557 <5968> <5968> 2449 <5969> <5969> 4559 <596a> <596a> 2915 <596c> <596c> 4558 <596d> <596d> 14448 <596e> <596e> 3587 <5973> <5973> 2433 <5974> <5974> 3157 <5978> <5978> 4560 <597d> <597d> 1975 <5981> <5981> 4561 <5982> <5982> 3287 <5983> <5983> 3442 <5984> <5984> 3805 <598a> <598a> 3291 <598d> <598d> 4570 <5993> <5993> 1618 <5996> <5996> 3887 <5999> <5999> 3771 <599b> <599b> 4665 <599d> <599d> 4562 <59a3> <59a3> 4565 <59a4> <59a4> 8430 <59a5> <59a5> 2853 <59a8> <59a8> 3686 <59ac> <59ac> 3140 <59b2> <59b2> 4566 <59b9> <59b9> 3731 <59ba> <59ba> 8431 <59bb> <59bb> 2106 <59be> <59be> 2450 <59c6> <59c6> 4567 <59c9> <59c9> 2206 <59ca> <59ca> 14449 <59cb> <59cb> 2205 <59d0> <59d0> 1149 <59d1> <59d1> 1916 <59d2> <59d2> 14450 <59d3> <59d3> 2639 <59d4> <59d4> 1173 <59d9> <59da> 4571 <59dc> <59dc> 4569 <59dd> <59dd> 14451 <59e3> <59e4> 14452 <59e5> <59e5> 1242 <59e6> <59e6> 1515 <59e8> <59e8> 4568 <59ea> <59ea> 3793 <59eb> <59eb> 3491 <59ec> <59ec> 13997 <59f6> <59f6> 1132 <59fb> <59fb> 1213 <59ff> <59ff> 2207 <5a01> <5a01> 1174 <5a03> <5a03> 1127 <5a04> <5a04> 14454 <5a09> <5a09> 4577 <5a0c> <5a0c> 14455 <5a11> <5a11> 4575 <5a18> <5a18> 3784 <5a1a> <5a1a> 4578 <5a1b> <5a1b> 13761 <5a1c> <5a1c> 4576 <5a1f> <5a1f> 4574 <5a20> <5a20> 2551 <5a23> <5a23> 14456 <5a25> <5a25> 4573 <5a29> <5a29> 3626 <5a2f> <5a2f> 1944 <5a35> <5a36> 4582 <5a3c> <5a3c> 2451 <5a40> <5a40> 4579 <5a41> <5a41> 4050 <5a46> <5a46> 3330 <5a47> <5a47> 14457 <5a49> <5a49> 4581 <5a55> <5a55> 14458 <5a5a> <5a5a> 2071 <5a62> <5a62> 4584 <5a63> <5a63> 14459 <5a66> <5a66> 3530 endcidrange 100 begincidrange <5a6a> <5a6a> 4585 <5a6c> <5a6c> 4580 <5a6d> <5a6d> 14460 <5a7e> <5a7e> 14461 <5a7f> <5a7f> 3783 <5a92> <5a92> 3348 <5a9a> <5a9a> 4586 <5a9b> <5a9b> 3492 <5a9e> <5a9e> 14462 <5aa7> <5aa7> 14463 <5aac> <5aac> 14464 <5ab3> <5ab3> 14465 <5abc> <5abc> 4587 <5abd> <5abd> 4591 <5abe> <5abe> 4588 <5ac1> <5ac1> 1351 <5ac2> <5ac2> 4590 <5ac9> <5ac9> 2279 <5acb> <5acb> 4589 <5acc> <5acc> 1871 <5ad0> <5ad0> 4603 <5ad6> <5ad6> 4596 <5ad7> <5ad7> 4593 <5ae0> <5ae0> 14466 <5ae1> <5ae1> 2978 <5ae3> <5ae3> 4592 <5ae6> <5ae6> 4594 <5ae9> <5ae9> 4595 <5afa> <5afb> 4597 <5b00> <5b00> 14467 <5b09> <5b09> 1582 <5b0b> <5b0b> 4600 <5b0c> <5b0c> 4599 <5b16> <5b16> 4601 <5b19> <5b19> 14468 <5b22> <5b22> 2518 <5b25> <5b25> 14469 <5b2a> <5b2a> 4604 <5b2c> <5b2c> 3064 <5b2d> <5b2d> 14470 <5b30> <5b30> 1255 <5b32> <5b32> 4602 <5b36> <5b36> 4605 <5b3e> <5b3e> 4606 <5b40> <5b40> 4609 <5b41> <5b41> 14471 <5b43> <5b43> 4607 <5b45> <5b45> 4608 <5b50> <5b50> 2208 <5b51> <5b51> 4610 <5b54> <5b54> 1976 <5b55> <5b55> 4611 <5b56> <5b56> 8432 <5b57> <5b57> 2248 <5b58> <5b58> 2840 <5b5a> <5b5b> 4612 <5b5c> <5b5c> 2216 <5b5d> <5b5d> 1977 <5b5f> <5b5f> 3806 <5b63> <5b63> 1602 <5b64> <5b64> 1917 <5b65> <5b65> 4614 <5b66> <5b66> 1462 <5b69> <5b69> 4615 <5b6b> <5b6b> 2841 <5b70> <5b70> 4616 <5b71> <5b71> 4656 <5b73> <5b73> 4617 <5b75> <5b75> 4618 <5b78> <5b78> 4619 <5b7a> <5b7a> 4621 <5b7c> <5b7c> 14472 <5b7e> <5b7f> 14473 <5b80> <5b80> 4622 <5b82> <5b82> 13840 <5b83> <5b83> 4623 <5b85> <5b85> 2896 <5b87> <5b87> 1225 <5b88> <5b88> 2325 <5b89> <5b89> 1158 <5b8a> <5b8a> 14475 <5b8b> <5b8b> 2777 <5b8c> <5b8c> 1516 <5b8d> <5b8d> 2273 <5b8f> <5b8f> 1978 <5b95> <5b95> 3168 <5b97> <5b97> 2347 <5b98> <5b98> 1517 <5b99> <5b99> 2982 <5b9a> <5b9a> 3078 <5b9b> <5b9b> 1148 <5b9c> <5b9c> 1619 <5b9d> <5b9d> 3653 <5b9f> <5b9f> 2286 <5ba2> <5ba2> 1644 <5ba3> <5ba3> 2703 <5ba4> <5ba4> 2280 <5ba5> <5ba5> 3858 <5ba6> <5ba6> 4624 <5bae> <5bae> 1654 endcidrange 100 begincidrange <5bb0> <5bb0> 2107 <5bb3> <5bb3> 1424 <5bb4> <5bb4> 1285 <5bb5> <5bb5> 2452 <5bb6> <5bb6> 1352 <5bb8> <5bb8> 4625 <5bb9> <5bb9> 3888 <5bbf> <5bbf> 2387 <5bc0> <5bc0> 8433 <5bc2> <5bc2> 2320 <5bc3> <5bc3> 4626 <5bc4> <5bc4> 1583 <5bc5> <5bc5> 3242 <5bc6> <5bc6> 3765 <5bc7> <5bc7> 4627 <5bc9> <5bc9> 4628 <5bcc> <5bcc> 3531 <5bd0> <5bd0> 4630 <5bd2> <5bd2> 1508 <5bd3> <5bd3> 1775 <5bd4> <5bd4> 4629 <5bd8> <5bd8> 8435 <5bdb> <5bdb> 1518 <5bdd> <5bdd> 2552 <5bde> <5bde> 4634 <5bdf> <5bdf> 2159 <5be1> <5be1> 1353 <5be2> <5be2> 4633 <5be4> <5be4> 4631 <5be5> <5be5> 4635 <5be6> <5be6> 4632 <5be7> <5be7> 3297 <5be8> <5be8> 5262 <5be9> <5be9> 2553 <5beb> <5beb> 4636 <5bec> <5bec> 8436 <5bee> <5bee> 3976 <5bf0> <5bf0> 4637 <5bf3> <5bf3> 4639 <5bf5> <5bf5> 3004 <5bf6> <5bf6> 4638 <5bf8> <5bf8> 2631 <5bfa> <5bfa> 2249 <5bfe> <5bfe> 2864 <5bff> <5bff> 2339 <5c01> <5c01> 3559 <5c02> <5c02> 2704 <5c04> <5c04> 2297 <5c05> <5c05> 4640 <5c06> <5c06> 2453 <5c07> <5c08> 4641 <5c09> <5c09> 1175 <5c0a> <5c0a> 2842 <5c0b> <5c0b> 2584 <5c0d> <5c0d> 4643 <5c0e> <5c0e> 3211 <5c0f> <5c0f> 2454 <5c11> <5c11> 2455 <5c13> <5c13> 4644 <5c14> <5c14> 14122 <5c16> <5c16> 2705 <5c19> <5c19> 13835 <5c1a> <5c1a> 2456 <5c1e> <5c1e> 8437 <5c20> <5c20> 4645 <5c22> <5c22> 4646 <5c23> <5c23> 14476 <5c24> <5c24> 3820 <5c28> <5c28> 4647 <5c2b> <5c2b> 14477 <5c2d> <5c2d> 1726 <5c30> <5c30> 14478 <5c31> <5c31> 2348 <5c38> <5c39> 4648 <5c3a> <5c3a> 2312 <5c3b> <5c3b> 2546 <5c3c> <5c3c> 3276 <5c3d> <5c3d> 2586 <5c3e> <5c3e> 3468 <5c3f> <5c3f> 3288 <5c40> <5c40> 1729 <5c41> <5c41> 4650 <5c45> <5c45> 1673 <5c46> <5c46> 4651 <5c48> <5c48> 1782 <5c4a> <5c4a> 3239 <5c4b> <5c4b> 1328 <5c4d> <5c4d> 2209 <5c4e> <5c4e> 4652 <5c4f> <5c4f> 4655 <5c50> <5c50> 4654 <5c51> <5c51> 1781 <5c53> <5c53> 4653 <5c55> <5c55> 3122 <5c5b> <5c5b> 7826 <5c5e> <5c5e> 2832 <5c60> <5c60> 3141 <5c61> <5c61> 2292 <5c62> <5c62> 7693 <5c63> <5c63> 14479 endcidrange 100 begincidrange <5c64> <5c64> 2778 <5c65> <5c65> 3940 <5c69> <5c69> 14480 <5c6c> <5c6c> 4657 <5c6e> <5c6e> 4658 <5c6f> <5c6f> 3246 <5c71> <5c71> 2177 <5c76> <5c76> 4660 <5c79> <5c79> 4661 <5c7c> <5c7c> 14481 <5c8c> <5c8c> 4662 <5c90> <5c90> 1584 <5c91> <5c91> 4663 <5c94> <5c94> 4664 <5ca1> <5ca1> 1324 <5ca6> <5ca6> 8438 <5ca8> <5ca8> 2749 <5ca9> <5ca9> 1568 <5cab> <5cab> 4666 <5cac> <5cac> 3764 <5cb1> <5cb1> 2866 <5cb3> <5cb3> 1463 <5cb6> <5cb6> 4668 <5cb7> <5cb7> 4670 <5cb8> <5cb8> 1563 <5cba> <5cba> 8439 <5cbb> <5cbb> 4667 <5cbc> <5cbc> 4669 <5cbe> <5cbe> 4672 <5cc5> <5cc5> 4671 <5cc7> <5cc7> 4673 <5ccb> <5ccb> 14482 <5cd2> <5cd2> 14483 <5cd9> <5cd9> 4674 <5ce0> <5ce0> 3221 <5ce1> <5ce1> 1702 <5ce6> <5ce6> 14124 <5ce8> <5ce8> 1381 <5ce9> <5ce9> 4675 <5cea> <5cea> 4680 <5ced> <5ced> 4678 <5cef> <5cef> 3655 <5cf0> <5cf0> 3654 <5cf4> <5cf4> 14484 <5cf5> <5cf5> 8440 <5cf6> <5cf6> 3169 <5cfa> <5cfa> 4677 <5cfb> <5cfb> 2398 <5cfd> <5cfd> 4676 <5d07> <5d07> 2616 <5d0b> <5d0b> 4681 <5d0e> <5d0e> 2138 <5d11> <5d11> 4687 <5d14> <5d14> 4688 <5d15> <5d15> 4682 <5d16> <5d16> 1425 <5d17> <5d17> 4683 <5d18> <5d18> 4692 <5d19> <5d19> 4691 <5d1a> <5d1a> 4690 <5d1b> <5d1b> 4686 <5d1f> <5d1f> 4685 <5d22> <5d22> 4689 <5d24> <5d24> 14485 <5d26> <5d26> 14486 <5d27> <5d27> 8441 <5d29> <5d29> 3656 <5d42> <5d42> 8444 <5d43> <5d43> 14487 <5d46> <5d46> 14488 <5d4a> <5d4a> 14489 <5d4b> <5d4b> 4696 <5d4c> <5d4c> 4693 <5d4e> <5d4e> 4695 <5d50> <5d50> 3932 <5d52> <5d52> 4694 <5d53> <5d53> 8442 <5d5c> <5d5c> 4684 <5d69> <5d69> 2617 <5d6c> <5d6c> 4697 <5d6d> <5d6d> 8445 <5d6f> <5d6f> 2087 <5d73> <5d73> 4698 <5d76> <5d76> 4699 <5d82> <5d82> 4702 <5d84> <5d84> 4701 <5d87> <5d87> 4700 <5d8b> <5d8b> 3170 <5d8c> <5d8c> 4679 <5d90> <5d90> 4708 <5d92> <5d92> 14490 <5d94> <5d94> 14491 <5d99> <5d99> 14492 <5d9d> <5d9d> 4704 <5da0> <5da0> 14493 <5da2> <5da2> 4703 <5dac> <5dac> 4705 <5dae> <5dae> 4706 <5db2> <5db2> 15269 <5db7> <5db7> 4709 endcidrange 100 begincidrange <5db8> <5db9> 8446 <5dba> <5dba> 4014 <5dbc> <5dbc> 4710 <5dbd> <5dbd> 4707 <5dc9> <5dc9> 4711 <5dcc> <5dcc> 1564 <5dcd> <5dcd> 4712 <5dd0> <5dd0> 8448 <5dd2> <5dd2> 4714 <5dd3> <5dd3> 4713 <5dd6> <5dd6> 4715 <5dd8> <5dd8> 14494 <5ddb> <5ddb> 4716 <5ddd> <5ddd> 2706 <5dde> <5dde> 2349 <5de0> <5de0> 14495 <5de1> <5de1> 2414 <5de2> <5de2> 13362 <5de3> <5de3> 2789 <5de5> <5de5> 1979 <5de6> <5de6> 2088 <5de7> <5de7> 1980 <5de8> <5de8> 1674 <5deb> <5deb> 4717 <5dee> <5dee> 2089 <5df1> <5df1> 1918 <5df2> <5df2> 4718 <5df3> <5df3> 3762 <5df4> <5df4> 3321 <5df5> <5df5> 4719 <5df7> <5df7> 1981 <5df8> <5df8> 14496 <5dfb> <5dfb> 1512 <5dfd> <5dfd> 2917 <5dfe> <5dfe> 1738 <5dff> <5dff> 13794 <5e00> <5e00> 14497 <5e02> <5e02> 2210 <5e03> <5e03> 3533 <5e06> <5e06> 3413 <5e0b> <5e0b> 4720 <5e0c> <5e0c> 1585 <5e11> <5e11> 4723 <5e12> <5e12> 14498 <5e14> <5e15> 14499 <5e16> <5e16> 3005 <5e18> <5e18> 14501 <5e19> <5e19> 4722 <5e1a> <5e1a> 4721 <5e1b> <5e1b> 4724 <5e1d> <5e1d> 3079 <5e25> <5e25> 2601 <5e2b> <5e2b> 2211 <5e2d> <5e2d> 2670 <5e2e> <5e2e> 14502 <5e2f> <5e2f> 2867 <5e30> <5e30> 1596 <5e33> <5e33> 3006 <5e36> <5e37> 4725 <5e38> <5e38> 2519 <5e3d> <5e3d> 3687 <5e40> <5e40> 4729 <5e43> <5e43> 4728 <5e44> <5e44> 4727 <5e45> <5e45> 3567 <5e47> <5e47> 4736 <5e4c> <5e4c> 3720 <5e4e> <5e4e> 4730 <5e54> <5e54> 4732 <5e55> <5e55> 3737 <5e57> <5e57> 4731 <5e58> <5e58> 14503 <5e5f> <5e5f> 4733 <5e61> <5e61> 3388 <5e62> <5e62> 4734 <5e63> <5e63> 3598 <5e64> <5e64> 4735 <5e6b> <5e6c> 14504 <5e72> <5e72> 1519 <5e73> <5e73> 3599 <5e74> <5e74> 3301 <5e75> <5e76> 4737 <5e78> <5e78> 1982 <5e79> <5e79> 1520 <5e7a> <5e7a> 4739 <5e7b> <5e7b> 1900 <5e7c> <5e7c> 3886 <5e7d> <5e7d> 3859 <5e7e> <5e7e> 1586 <5e7f> <5e7f> 4741 <5e81> <5e81> 3007 <5e83> <5e83> 1983 <5e84> <5e84> 2457 <5e87> <5e87> 3443 <5e8a> <5e8a> 2458 <5e8f> <5e8f> 2434 <5e95> <5e95> 3080 <5e96> <5e96> 3657 <5e97> <5e97> 3123 <5e99> <5e99> 14000 endcidrange 100 begincidrange <5e9a> <5e9a> 1984 <5e9c> <5e9c> 3534 <5ea0> <5ea0> 4742 <5ea6> <5ea6> 3155 <5ea7> <5ea7> 2098 <5ea8> <5ea8> 14506 <5eaa> <5eaa> 14507 <5eab> <5eab> 1919 <5ead> <5ead> 3081 <5eb5> <5eb5> 1159 <5eb6> <5eb6> 2424 <5eb7> <5eb7> 1985 <5eb8> <5eb8> 3889 <5ebe> <5ebf> 14508 <5ec1> <5ec2> 4743 <5ec3> <5ec3> 3335 <5ec8> <5ec8> 4745 <5ec9> <5ec9> 4031 <5eca> <5eca> 4051 <5ecb> <5ecb> 14510 <5ecf> <5ecf> 4747 <5ed0> <5ed0> 4746 <5ed2> <5ed2> 14511 <5ed3> <5ed3> 1445 <5ed6> <5ed6> 4748 <5eda> <5edb> 4751 <5edd> <5edd> 4750 <5edf> <5edf> 3506 <5ee0> <5ee0> 2459 <5ee1> <5ee1> 4754 <5ee2> <5ee2> 4753 <5ee3> <5ee3> 4749 <5ee8> <5ee9> 4755 <5eec> <5eec> 4757 <5ef0> <5ef0> 4760 <5ef1> <5ef1> 4758 <5ef3> <5ef3> 4759 <5ef4> <5ef4> 4761 <5ef6> <5ef6> 1286 <5ef7> <5ef7> 3082 <5ef8> <5ef8> 4762 <5efa> <5efa> 1872 <5efb> <5efb> 1398 <5efc> <5efc> 3308 <5efe> <5efe> 4763 <5eff> <5eff> 3283 <5f01> <5f01> 3627 <5f03> <5f03> 4764 <5f04> <5f04> 4052 <5f07> <5f07> 14512 <5f09> <5f09> 4765 <5f0a> <5f0a> 3600 <5f0b> <5f0b> 4768 <5f0c> <5f0c> 4090 <5f0d> <5f0d> 4106 <5f0e> <5f0e> 14513 <5f0f> <5f0f> 2268 <5f10> <5f10> 3277 <5f11> <5f11> 4769 <5f13> <5f13> 1655 <5f14> <5f14> 3008 <5f15> <5f15> 1214 <5f16> <5f16> 4770 <5f17> <5f17> 3574 <5f18> <5f18> 1986 <5f1b> <5f1b> 2958 <5f1c> <5f1d> 14514 <5f1f> <5f1f> 3083 <5f21> <5f21> 8449 <5f22> <5f22> 14516 <5f25> <5f25> 3835 <5f26> <5f26> 1901 <5f27> <5f27> 1920 <5f28> <5f28> 14517 <5f29> <5f29> 4771 <5f2d> <5f2d> 4772 <5f2f> <5f2f> 4778 <5f31> <5f31> 2321 <5f34> <5f34> 8450 <5f35> <5f35> 3009 <5f36> <5f36> 14518 <5f37> <5f37> 1703 <5f38> <5f38> 4773 <5f3a> <5f3a> 13720 <5f3b> <5f3b> 14519 <5f3c> <5f3c> 3485 <5f3e> <5f3e> 2948 <5f40> <5f40> 14520 <5f41> <5f41> 4774 <5f45> <5f45> 8370 <5f48> <5f48> 4775 <5f4a> <5f4a> 1704 <5f4c> <5f4c> 4776 <5f4e> <5f4e> 4777 <5f50> <5f50> 14521 <5f51> <5f51> 4779 <5f53> <5f53> 3184 <5f56> <5f57> 4780 <5f58> <5f58> 14522 <5f59> <5f59> 4782 endcidrange 100 begincidrange <5f5c> <5f5c> 4767 <5f5d> <5f5d> 4766 <5f61> <5f61> 4783 <5f62> <5f62> 1815 <5f64> <5f64> 14523 <5f65> <5f65> 13996 <5f66> <5f66> 3481 <5f67> <5f67> 8451 <5f69> <5f69> 2108 <5f6a> <5f6a> 3497 <5f6b> <5f6b> 3010 <5f6c> <5f6c> 3517 <5f6d> <5f6d> 4784 <5f70> <5f70> 2460 <5f71> <5f71> 1256 <5f73> <5f73> 4785 <5f77> <5f77> 4786 <5f79> <5f79> 3838 <5f7c> <5f7c> 3444 <5f7f> <5f7f> 4789 <5f80> <5f80> 1311 <5f81> <5f81> 2640 <5f82> <5f82> 4788 <5f83> <5f83> 4787 <5f84> <5f84> 1816 <5f85> <5f85> 2868 <5f87> <5f87> 4793 <5f88> <5f88> 4791 <5f89> <5f89> 14524 <5f8a> <5f8a> 4790 <5f8b> <5f8b> 3951 <5f8c> <5f8c> 1945 <5f90> <5f90> 2435 <5f91> <5f91> 4792 <5f92> <5f92> 3142 <5f93> <5f93> 2376 <5f97> <5f97> 3224 <5f98> <5f98> 4796 <5f99> <5f99> 4795 <5f9c> <5f9c> 14525 <5f9e> <5f9e> 4794 <5fa0> <5fa0> 4797 <5fa1> <5fa1> 1946 <5fa4> <5fa4> 14527 <5fa7> <5fa7> 14526 <5fa8> <5fa8> 4798 <5fa9> <5fa9> 3566 <5faa> <5faa> 2405 <5fad> <5fad> 4799 <5fae> <5fae> 3469 <5faf> <5faf> 14528 <5fb3> <5fb3> 3225 <5fb4> <5fb4> 3011 <5fb5> <5fb5> 13368 <5fb7> <5fb7> 8452 <5fb8> <5fb8> 14529 <5fb9> <5fb9> 3114 <5fbc> <5fbc> 4800 <5fbd> <5fbd> 1605 <5fc3> <5fc3> 2554 <5fc4> <5fc4> 14530 <5fc5> <5fc5> 3486 <5fc9> <5fc9> 14531 <5fcc> <5fcc> 1587 <5fcd> <5fcd> 3292 <5fd6> <5fd6> 4801 <5fd7> <5fd7> 2212 <5fd8> <5fd9> 3688 <5fdc> <5fdc> 1312 <5fdd> <5fdd> 4806 <5fde> <5fde> 8453 <5fe0> <5fe0> 2983 <5fe1> <5fe1> 14532 <5fe4> <5fe4> 4803 <5fe9> <5fe9> 14533 <5feb> <5feb> 1399 <5fed> <5fed> 14534 <5ff0> <5ff0> 4854 <5ff1> <5ff1> 4805 <5ff5> <5ff5> 3302 <5ff8> <5ff8> 4804 <5ffb> <5ffb> 4802 <5ffc> <5ffc> 14535 <5ffd> <5ffd> 2060 <5fff> <5fff> 4808 <600e> <600e> 4814 <600f> <600f> 4820 <6010> <6010> 4812 <6012> <6012> 3158 <6015> <6015> 4817 <6016> <6016> 3535 <6017> <6017> 14536 <6019> <6019> 4811 <601a> <601a> 14537 <601b> <601b> 4816 <601c> <601c> 4015 <601d> <601d> 2213 <6020> <6020> 2869 <6021> <6021> 4809 <6025> <6025> 1656 endcidrange 100 begincidrange <6026> <6026> 4819 <6027> <6027> 2641 <6028> <6028> 1287 <6029> <6029> 4813 <602a> <602a> 1400 <602b> <602b> 4818 <602f> <602f> 1705 <6031> <6031> 4815 <6033> <6033> 14538 <603a> <603a> 4821 <6041> <6041> 4823 <6042> <6042> 4833 <6043> <6043> 4831 <6046> <6046> 4828 <604a> <604a> 4827 <604b> <604b> 4032 <604d> <604d> 4829 <6050> <6050> 1706 <6052> <6052> 1987 <6055> <6055> 2436 <6059> <6059> 4836 <605a> <605a> 4822 <605d> <605d> 8454 <605f> <605f> 4826 <6060> <6060> 4810 <6061> <6061> 14539 <6062> <6062> 1402 <6063> <6063> 4830 <6064> <6064> 4832 <6065> <6065> 2959 <6068> <6068> 2072 <6069> <6069> 1336 <606a> <606a> 4824 <606b> <606b> 4835 <606c> <606c> 4834 <606d> <606d> 1707 <606f> <606f> 2825 <6070> <6070> 1476 <6075> <6075> 1817 <6077> <6077> 4825 <607f> <607f> 14540 <6081> <6081> 4837 <6083> <6083> 4840 <6084> <6084> 4842 <6085> <6085> 8455 <6089> <6089> 2281 <608a> <608a> 8456 <608b> <608b> 4848 <608c> <608c> 3084 <608d> <608d> 4838 <6092> <6092> 4846 <6094> <6094> 1401 <6096> <6097> 4844 <609a> <609a> 4841 <609b> <609b> 4843 <609e> <609e> 14541 <609f> <609f> 1947 <60a0> <60a0> 3860 <60a3> <60a3> 1521 <60a4> <60a4> 14542 <60a6> <60a6> 1275 <60a7> <60a7> 4847 <60a9> <60a9> 3312 <60aa> <60aa> 1137 <60b0> <60b0> 14543 <60b2> <60b2> 3445 <60b3> <60b3> 4807 <60b4> <60b4> 4853 <60b5> <60b5> 4857 <60b6> <60b6> 3825 <60b8> <60b8> 4850 <60bc> <60bc> 3171 <60bd> <60bd> 4855 <60c5> <60c5> 2520 <60c6> <60c6> 4856 <60c7> <60c7> 3247 <60cb> <60cb> 14544 <60d1> <60d1> 4077 <60d3> <60d3> 4852 <60d5> <60d5> 8458 <60d8> <60d8> 4858 <60da> <60da> 2061 <60db> <60db> 14545 <60dc> <60dc> 2671 <60de> <60de> 8457 <60df> <60df> 1176 <60e0> <60e0> 4851 <60e1> <60e1> 4849 <60e3> <60e3> 2780 <60e7> <60e7> 4839 <60e8> <60e8> 2178 <60f0> <60f0> 2854 <60f1> <60f1> 4870 <60f2> <60f2> 8460 <60f3> <60f3> 2781 <60f4> <60f4> 4865 <60f6> <60f7> 4862 <60f8> <60f8> 14546 <60f9> <60f9> 2322 <60fa> <60fa> 4866 endcidrange 100 begincidrange <60fb> <60fb> 4869 <6100> <6100> 4864 <6101> <6101> 2351 <6103> <6103> 4867 <6106> <6106> 4861 <6108> <6108> 3848 <6109> <6109> 3847 <610d> <610e> 4871 <610f> <610f> 1177 <6111> <6111> 8461 <6112> <6114> 14547 <6115> <6115> 4860 <611a> <611a> 1770 <611b> <611b> 1130 <611c> <611c> 14550 <611f> <611f> 1522 <6120> <6120> 8459 <6121> <6121> 4868 <6127> <6127> 4876 <6128> <6128> 4875 <612c> <612c> 4880 <6130> <6130> 8463 <6134> <6134> 4881 <6137> <6137> 8462 <613c> <613c> 4879 <613d> <613d> 4882 <613e> <613e> 4874 <613f> <613f> 4878 <6142> <6142> 4883 <6144> <6144> 4884 <6147> <6147> 4873 <6148> <6148> 2250 <614a> <614a> 4877 <614b> <614b> 2870 <614c> <614c> 1988 <614d> <614d> 4859 <614e> <614e> 2555 <6153> <6153> 4897 <6155> <6155> 3641 <6158> <615a> 4887 <615d> <615d> 4896 <615f> <615f> 4895 <6162> <6162> 3755 <6163> <6163> 1523 <6165> <6165> 4893 <6167> <6167> 1819 <6168> <6168> 1426 <616b> <616b> 4890 <616e> <616e> 3968 <616f> <616f> 4892 <6170> <6170> 1178 <6171> <6171> 4894 <6173> <6173> 4885 <6174> <6174> 4891 <6175> <6175> 4898 <6176> <6176> 1818 <6177> <6177> 4886 <617c> <617c> 14551 <617e> <617e> 3911 <6182> <6182> 3861 <6187> <6187> 4901 <618a> <618a> 4905 <618d> <618d> 14552 <618e> <618e> 2816 <6190> <6190> 4033 <6191> <6191> 4906 <6194> <6194> 4903 <6196> <6196> 4900 <6198> <6198> 8464 <6199> <6199> 4899 <619a> <619a> 4904 <619f> <619f> 14553 <61a4> <61a4> 3584 <61a7> <61a7> 3212 <61a8> <61a8> 14554 <61a9> <61a9> 1820 <61ab> <61ab> 4907 <61ac> <61ac> 4902 <61ae> <61ae> 4908 <61b2> <61b2> 1873 <61b6> <61b6> 1329 <61ba> <61ba> 4916 <61be> <61be> 1524 <61c2> <61c2> 14555 <61c3> <61c3> 4914 <61c6> <61c6> 4915 <61c7> <61c7> 2073 <61c8> <61c8> 4913 <61c9> <61c9> 4911 <61ca> <61ca> 4910 <61cb> <61cb> 4917 <61cc> <61cc> 4909 <61cd> <61cd> 4919 <61d0> <61d0> 1403 <61df> <61df> 14556 <61e3> <61e3> 4921 <61e6> <61e6> 4920 <61f2> <61f2> 3012 <61f4> <61f4> 4924 <61f6> <61f6> 4922 endcidrange 100 begincidrange <61f7> <61f7> 4912 <61f8> <61f8> 1874 <61fa> <61fa> 4923 <61fc> <61fc> 4927 <61fd> <61fd> 4926 <61fe> <61fe> 4928 <61ff> <61ff> 4925 <6200> <6200> 4929 <6208> <6209> 4930 <620a> <620a> 3642 <620c> <620c> 4933 <620d> <620d> 4932 <620e> <620e> 2377 <6210> <6210> 2642 <6211> <6211> 1382 <6212> <6212> 1404 <6213> <6213> 8465 <6214> <6214> 4934 <6215> <6215> 14557 <6216> <6216> 1155 <621a> <621a> 2672 <621b> <621b> 4935 <621d> <621d> 6756 <621e> <621e> 4936 <621f> <621f> 1847 <6221> <6221> 4937 <6226> <6226> 2707 <6229> <6229> 14558 <622a> <622a> 4938 <622e> <622e> 4939 <622f> <622f> 1620 <6230> <6230> 4940 <6232> <6233> 4941 <6234> <6234> 2871 <6236> <6236> 13757 <6238> <6238> 1921 <623b> <623b> 3821 <623e> <623e> 13390 <623f> <623f> 3690 <6240> <6240> 2420 <6241> <6241> 4943 <6243> <6243> 14559 <6246> <6246> 14560 <6247> <6247> 2708 <6248> <6248> 6938 <6249> <6249> 3446 <624b> <624b> 2326 <624c> <624c> 14561 <624d> <624d> 2109 <624e> <624e> 4944 <6251> <6251> 14562 <6253> <6253> 2855 <6255> <6255> 3575 <6256> <6256> 14563 <6258> <6258> 2897 <625b> <625b> 4947 <625e> <625e> 4945 <6260> <6260> 4948 <6263> <6263> 4946 <6268> <6268> 4949 <626e> <626e> 3585 <6271> <6271> 1147 <6276> <6276> 3536 <6279> <6279> 3447 <627c> <627c> 4950 <627e> <627e> 4953 <627f> <627f> 2461 <6280> <6280> 1621 <6282> <6282> 4951 <6283> <6283> 4958 <6284> <6284> 2462 <6285> <6285> 13765 <6289> <6289> 4952 <628a> <628a> 3322 <6291> <6291> 3912 <6292> <6293> 4954 <6294> <6294> 4959 <6295> <6295> 3172 <6296> <6296> 4956 <6297> <6297> 1989 <6298> <6298> 2690 <629b> <629b> 4973 <629c> <629c> 3400 <629e> <629e> 2898 <62a6> <62a6> 8466 <62ab> <62ab> 3448 <62ac> <62ac> 5042 <62b1> <62b1> 3658 <62b5> <62b5> 3085 <62b9> <62b9> 3747 <62bb> <62bb> 4962 <62bc> <62bc> 1313 <62bd> <62bd> 2984 <62c2> <62c2> 4971 <62c4> <62c4> 14564 <62c5> <62c5> 2930 <62c6> <62c6> 4965 <62c7> <62c7> 4972 <62c8> <62c8> 4967 <62c9> <62c9> 4974 endcidrange 100 begincidrange <62ca> <62ca> 4970 <62cc> <62cc> 4969 <62cd> <62cd> 3365 <62cf> <62cf> 4963 <62d0> <62d0> 1405 <62d1> <62d1> 4961 <62d2> <62d2> 1675 <62d3> <62d3> 2899 <62d4> <62d4> 4957 <62d7> <62d7> 4960 <62d8> <62d8> 1990 <62d9> <62d9> 2687 <62db> <62db> 2463 <62dc> <62dc> 4968 <62dd> <62dd> 3336 <62e0> <62e0> 1676 <62e1> <62e1> 1446 <62ec> <62ec> 1477 <62ed> <62ed> 2535 <62ee> <62ee> 4976 <62ef> <62ef> 4981 <62f1> <62f1> 4977 <62f3> <62f3> 1875 <62f5> <62f5> 4982 <62f6> <62f6> 2160 <62f7> <62f7> 2043 <62fc> <62fc> 14565 <62fe> <62fe> 2352 <62ff> <62ff> 4964 <6301> <6301> 2251 <6302> <6302> 4979 <6307> <6307> 2214 <6308> <6308> 4980 <6309> <6309> 1160 <630a> <630a> 14566 <630c> <630c> 4975 <630d> <630d> 14567 <6311> <6311> 3013 <6318> <6318> 14568 <6319> <6319> 1677 <631b> <631b> 14135 <631f> <631f> 1708 <6327> <6327> 4978 <6328> <6328> 1131 <632b> <632b> 2099 <632f> <632f> 2556 <6339> <6339> 14569 <633a> <633a> 3086 <633d> <633d> 3432 <633e> <633e> 4984 <633f> <633f> 2784 <6342> <6343> 14570 <6349> <6349> 2826 <634c> <634c> 2169 <634d> <634d> 4985 <634f> <634f> 4987 <6350> <6350> 4983 <6355> <6355> 3633 <6357> <6357> 3033 <635c> <635c> 2782 <6365> <6365> 14572 <6367> <6367> 3659 <6368> <6368> 2298 <6369> <6369> 4999 <636b> <636b> 4998 <636e> <636e> 2622 <6372> <6372> 1876 <6374> <6374> 14573 <6376> <6376> 4992 <6377> <6377> 2465 <637a> <637a> 3264 <637b> <637b> 3303 <637d> <637d> 14574 <6380> <6380> 4990 <6383> <6383> 2783 <6384> <6384> 14575 <6387> <6387> 14576 <6388> <6388> 2340 <6389> <6389> 4995 <638c> <638c> 2464 <638e> <638e> 4989 <638f> <638f> 4994 <6390> <6390> 14577 <6392> <6392> 3337 <6396> <6396> 4988 <6398> <6398> 1783 <639b> <639b> 1467 <639e> <639e> 14578 <639f> <639f> 4996 <63a0> <63a0> 3955 <63a1> <63a1> 2110 <63a2> <63a2> 2931 <63a3> <63a3> 4993 <63a5> <63a5> 2688 <63a7> <63a7> 1991 <63a8> <63a8> 2602 <63a9> <63a9> 1288 <63aa> <63aa> 2750 <63ab> <63ab> 4991 <63ac> <63ac> 1631 endcidrange 100 begincidrange <63b2> <63b2> 1821 <63b4> <63b4> 3051 <63b5> <63b5> 4997 <63bb> <63bb> 2785 <63be> <63be> 5000 <63c0> <63c0> 5002 <63c3> <63c3> 2839 <63c4> <63c4> 5008 <63c6> <63c6> 5003 <63c9> <63c9> 5005 <63cf> <63cf> 3507 <63d0> <63d0> 3087 <63d1> <63d1> 14579 <63d2> <63d2> 5006 <63d6> <63d6> 3862 <63da> <63da> 3890 <63db> <63db> 1525 <63dc> <63dc> 14580 <63e1> <63e1> 1138 <63e3> <63e3> 5004 <63e9> <63e9> 5001 <63ed> <63ed> 13340 <63ee> <63ee> 1588 <63f4> <63f4> 1289 <63f5> <63f5> 8467 <63f6> <63f6> 5007 <63f7> <63f7> 13892 <63fa> <63fa> 3891 <6406> <6406> 5011 <6409> <6409> 14581 <640d> <640d> 2843 <640f> <640f> 5018 <6410> <6410> 14582 <6413> <6413> 5012 <6414> <6414> 7724 <6416> <6416> 5009 <6417> <6417> 5016 <641c> <641c> 4986 <6422> <6422> 14583 <6426> <6426> 5013 <6428> <6428> 5017 <642c> <642c> 3414 <642d> <642d> 3173 <6434> <6434> 5010 <6436> <6436> 5014 <643a> <643a> 1822 <643e> <643e> 2145 <6442> <6442> 2689 <644e> <644e> 5022 <6451> <6451> 7747 <6454> <6454> 14584 <6458> <6458> 3104 <645b> <645b> 14585 <6460> <6460> 8468 <6467> <6467> 5019 <6469> <6469> 3726 <646d> <646d> 14586 <646f> <646f> 5020 <6476> <6476> 5021 <6478> <6478> 3802 <647a> <647a> 2630 <647b> <647b> 14587 <6483> <6483> 1848 <6488> <6488> 5028 <6492> <6492> 2179 <6493> <6493> 5025 <6495> <6495> 5024 <649a> <649a> 3304 <649d> <649d> 8469 <649e> <649e> 3213 <64a4> <64a4> 3115 <64a5> <64a5> 5026 <64a9> <64a9> 5027 <64ab> <64ab> 3553 <64ad> <64ad> 3323 <64ae> <64ae> 2161 <64b0> <64b0> 2709 <64b2> <64b2> 3710 <64b9> <64b9> 1447 <64bb> <64bb> 5034 <64bc> <64bc> 5029 <64be> <64bf> 14588 <64c1> <64c1> 3892 <64c2> <64c2> 5036 <64c5> <64c5> 5032 <64c7> <64c7> 5033 <64ca> <64ca> 13341 <64cd> <64cd> 2786 <64ce> <64ce> 8470 <64d2> <64d2> 5031 <64d4> <64d4> 4966 <64d8> <64d8> 5035 <64da> <64da> 5030 <64e0> <64e1> 5040 <64e2> <64e2> 3105 <64e3> <64e3> 5043 <64e5> <64e5> 14590 <64e6> <64e6> 2162 <64e7> <64e7> 5038 <64ec> <64ec> 1622 endcidrange 100 begincidrange <64ef> <64ef> 5044 <64f1> <64f1> 5037 <64f2> <64f2> 5048 <64f4> <64f4> 5047 <64f6> <64f6> 5046 <64f7> <64f7> 14591 <64fa> <64fa> 5049 <64fb> <64fb> 14592 <64fd> <64fd> 5051 <64fe> <64fe> 2521 <6500> <6500> 5050 <6504> <6504> 14593 <6505> <6505> 5054 <6516> <6516> 14594 <6518> <6518> 5052 <6519> <6519> 14595 <651c> <651c> 5053 <651d> <651d> 5015 <6522> <6522> 7831 <6523> <6523> 5056 <6524> <6524> 5055 <652a> <652a> 5023 <652b> <652b> 5057 <652c> <652c> 5045 <652f> <652f> 2215 <6534> <6535> 5058 <6536> <6536> 5061 <6537> <6537> 5060 <6538> <6538> 5062 <6539> <6539> 1406 <653b> <653b> 1992 <653e> <653e> 3660 <653f> <653f> 2643 <6545> <6545> 1922 <6547> <6547> 14596 <6548> <6548> 5064 <654d> <654d> 5067 <654e> <654e> 8471 <654f> <654f> 3524 <6551> <6551> 1657 <6555> <6555> 5066 <6556> <6556> 5065 <6557> <6557> 3338 <6558> <6558> 5068 <6559> <6559> 1709 <655d> <655d> 5070 <655e> <655e> 5069 <6562> <6562> 1526 <6563> <6563> 2180 <6566> <6566> 3248 <6567> <6567> 14597 <656c> <656c> 1823 <6570> <6570> 2618 <6572> <6572> 5071 <6574> <6574> 2644 <6575> <6575> 3106 <6577> <6577> 3537 <6578> <6578> 5072 <6581> <6581> 14598 <6582> <6583> 5073 <6585> <6585> 14599 <6587> <6587> 3592 <6588> <6588> 4620 <6589> <6589> 2666 <658c> <658c> 3518 <658e> <658e> 2120 <6590> <6590> 3449 <6591> <6591> 3415 <6597> <6597> 3143 <6599> <6599> 3977 <659b> <659b> 5076 <659c> <659c> 2300 <659f> <659f> 5077 <65a1> <65a1> 1146 <65a4> <65a4> 1740 <65a5> <65a5> 2673 <65a7> <65a7> 3538 <65ab> <65ab> 5078 <65ac> <65ac> 2192 <65ad> <65ad> 2949 <65af> <65af> 2217 <65b0> <65b0> 2557 <65b7> <65b7> 5079 <65b9> <65b9> 3661 <65bc> <65bc> 1305 <65bd> <65bd> 2218 <65c1> <65c1> 5082 <65c2> <65c2> 14600 <65c3> <65c3> 5080 <65c4> <65c4> 5083 <65c5> <65c5> 3969 <65c6> <65c6> 5081 <65cb> <65cb> 2719 <65cc> <65cc> 5084 <65cf> <65cf> 2834 <65d2> <65d2> 5085 <65d7> <65d7> 1590 <65d9> <65d9> 5087 <65db> <65db> 5086 <65e0> <65e1> 5088 endcidrange 100 begincidrange <65e2> <65e2> 1591 <65e3> <65e3> 13701 <65e5> <65e5> 3284 <65e6> <65e6> 2932 <65e7> <65e7> 1670 <65e8> <65e8> 2219 <65e9> <65e9> 2787 <65ec> <65ec> 2406 <65ed> <65ed> 1140 <65f0> <65f0> 14601 <65f1> <65f1> 5090 <65f2> <65f2> 14602 <65fa> <65fa> 1314 <65fb> <65fb> 5094 <6600> <6600> 8472 <6602> <6602> 1993 <6603> <6603> 5093 <6606> <6606> 2075 <6607> <6607> 2466 <6609> <6609> 8474 <660a> <660a> 5092 <660c> <660c> 2467 <660e> <660e> 3788 <660f> <660f> 2074 <6613> <6613> 1179 <6614> <6614> 2674 <6615> <6615> 8473 <661c> <661c> 5099 <661e> <661e> 8476 <661f> <661f> 2645 <6620> <6620> 1257 <6624> <6624> 8477 <6625> <6625> 2399 <6627> <6627> 3732 <6628> <6628> 2146 <662c> <662c> 14603 <662d> <662d> 2468 <662e> <662e> 8475 <662f> <662f> 2635 <6631> <6631> 8366 <6634> <6634> 5098 <6635> <6636> 5096 <663b> <663b> 7680 <663c> <663c> 2985 <663f> <663f> 5129 <6641> <6641> 5103 <6642> <6642> 2252 <6643> <6643> 1994 <6644> <6644> 5101 <6649> <6649> 5102 <664b> <664b> 2558 <664c> <664c> 14604 <664f> <664f> 5100 <6652> <6652> 2173 <6657> <6657> 8479 <6659> <6659> 8480 <665b> <665c> 14605 <665d> <665d> 5105 <665e> <665e> 5104 <665f> <665f> 5109 <6661> <6661> 14607 <6662> <6662> 5110 <6663> <6663> 14138 <6664> <6664> 5106 <6665> <6665> 8478 <6666> <6666> 1408 <6667> <6668> 5107 <6669> <6669> 3433 <666b> <666b> 14608 <666e> <666e> 3539 <666f> <666f> 1824 <6670> <6670> 5111 <6673> <6673> 8482 <6674> <6674> 2646 <6676> <6676> 2469 <6677> <6677> 14609 <667a> <667a> 2960 <6681> <6681> 1727 <6683> <6683> 5112 <6684> <6684> 5116 <6687> <6687> 1355 <6688> <6688> 5113 <6689> <6689> 5115 <668e> <668e> 5114 <6691> <6691> 2421 <6696> <6696> 2950 <6697> <6697> 1161 <6698> <6698> 5117 <6699> <6699> 8483 <669d> <669d> 5118 <66a0> <66a0> 8484 <66a2> <66a2> 3014 <66a4> <66a4> 14610 <66a6> <66a6> 4025 <66ab> <66ab> 2193 <66ae> <66ae> 3643 <66b2> <66b2> 8485 <66b4> <66b4> 3691 <66b8> <66b8> 5125 <66b9> <66b9> 5120 endcidrange 100 begincidrange <66bc> <66bc> 5123 <66be> <66be> 5122 <66bf> <66bf> 8486 <66c1> <66c1> 5119 <66c4> <66c4> 5124 <66c6> <66c6> 13397 <66c7> <66c7> 3254 <66c8> <66c8> 14611 <66c9> <66c9> 5121 <66d6> <66d6> 5126 <66d9> <66d9> 2422 <66da> <66da> 5127 <66dc> <66dc> 3893 <66dd> <66dd> 3374 <66e0> <66e0> 5128 <66e6> <66e6> 5130 <66e9> <66e9> 5131 <66ec> <66ec> 14612 <66f0> <66f0> 5132 <66f2> <66f2> 1730 <66f3> <66f3> 1258 <66f4> <66f4> 1995 <66f5> <66f5> 5133 <66f7> <66f7> 5134 <66f8> <66f8> 2427 <66f9> <66f9> 2788 <66fa> <66fa> 8487 <66fb> <66fb> 8369 <66fc> <66fc> 4333 <66fd> <66fd> 2752 <66fe> <66fe> 2751 <66ff> <66ff> 2872 <6700> <6700> 2103 <6703> <6703> 4171 <6705> <6705> 14613 <6708> <6708> 1860 <6709> <6709> 3863 <670b> <670b> 3662 <670d> <670d> 3568 <670e> <670e> 8488 <670f> <670f> 5135 <6713> <6713> 14614 <6714> <6714> 2147 <6715> <6715> 3035 <6716> <6716> 5136 <6717> <6717> 4053 <671b> <671b> 3692 <671d> <671d> 3015 <671e> <671e> 5137 <671f> <671f> 1592 <6726> <6727> 5138 <6728> <6728> 3814 <672a> <672a> 3760 <672b> <672b> 3748 <672c> <672c> 3722 <672d> <672d> 2163 <672e> <672e> 5141 <6731> <6731> 2327 <6733> <6733> 14615 <6734> <6734> 3711 <6736> <6736> 5143 <6737> <6737> 5146 <6738> <6738> 5145 <673a> <673a> 1589 <673d> <673d> 1658 <673f> <673f> 5142 <6741> <6741> 5144 <6743> <6743> 13751 <6746> <6746> 5147 <6748> <6748> 14616 <6749> <6749> 2623 <674c> <674c> 14617 <674e> <674e> 3941 <674f> <674f> 1165 <6750> <6750> 2128 <6751> <6751> 2844 <6753> <6753> 2313 <6756> <6756> 2523 <6759> <6759> 5150 <675c> <675c> 3144 <675e> <675e> 5148 <675f> <675f> 2827 <6760> <6760> 5149 <6761> <6761> 2522 <6762> <6762> 3817 <6763> <6764> 5151 <6765> <6765> 3922 <6766> <6766> 8490 <676a> <676a> 5157 <676d> <676d> 1996 <676e> <676e> 13681 <676f> <676f> 3339 <6770> <6770> 5154 <6771> <6771> 3174 <6772> <6772> 5091 <6773> <6773> 5095 <6775> <6775> 1641 <6776> <6776> 14618 <6777> <6777> 3325 <677b> <677b> 14619 endcidrange 100 begincidrange <677c> <677c> 5156 <677e> <677e> 2470 <677f> <677f> 3416 <6785> <6785> 5162 <6787> <6787> 3470 <6789> <6789> 5153 <678b> <678b> 5159 <678c> <678c> 5158 <6790> <6790> 2675 <6795> <6795> 3739 <6797> <6797> 3995 <679a> <679a> 3733 <679c> <679c> 1356 <679d> <679d> 2220 <67a0> <67a0> 4078 <67a1> <67a1> 5161 <67a2> <67a2> 2619 <67a6> <67a6> 5160 <67a9> <67a9> 5155 <67af> <67af> 1923 <67b0> <67b0> 14620 <67b2> <67b2> 14621 <67b3> <67b3> 5167 <67b4> <67b4> 5165 <67b6> <67b6> 1357 <67b7> <67b7> 5163 <67b8> <67b8> 5169 <67b9> <67b9> 5175 <67bb> <67bb> 8491 <67c0> <67c0> 8493 <67c1> <67c1> 2856 <67c4> <67c4> 3601 <67c6> <67c6> 5177 <67ca> <67ca> 3476 <67ce> <67ce> 5176 <67cf> <67cf> 3366 <67d0> <67d0> 3693 <67d1> <67d1> 1527 <67d3> <67d3> 2715 <67d4> <67d4> 2378 <67d7> <67d7> 14623 <67d8> <67d8> 3055 <67d9> <67d9> 14624 <67da> <67da> 3864 <67dd> <67dd> 5172 <67de> <67de> 5171 <67e2> <67e2> 5173 <67e4> <67e4> 5170 <67e7> <67e7> 5178 <67e9> <67e9> 5168 <67ec> <67ec> 5166 <67ee> <67ee> 5174 <67ef> <67ef> 5164 <67f0> <67f0> 14625 <67f1> <67f1> 2986 <67f3> <67f3> 3844 <67f4> <67f4> 2290 <67f5> <67f5> 2148 <67f9> <67f9> 14622 <67fb> <67fb> 2090 <67fe> <67fe> 3741 <67ff> <67ff> 1439 <6801> <6801> 8494 <6802> <6802> 3050 <6803> <6803> 3234 <6804> <6804> 1259 <6805> <6805> 7687 <6813> <6813> 2710 <6816> <6816> 2648 <6817> <6817> 1792 <681e> <681e> 5180 <6821> <6821> 1997 <6822> <6822> 1498 <6829> <6829> 5182 <682a> <682a> 1490 <682b> <682b> 5188 <682c> <682c> 14626 <6830> <6831> 14627 <6832> <6832> 5185 <6834> <6834> 2711 <6838> <6838> 1449 <6839> <6839> 2076 <683c> <683c> 1448 <683d> <683d> 2111 <6840> <6840> 5183 <6841> <6841> 1851 <6842> <6842> 1825 <6843> <6843> 3175 <6844> <6844> 8495 <6846> <6846> 5181 <6848> <6848> 1162 <684d> <684d> 5184 <684e> <684e> 5186 <6850> <6850> 1733 <6851> <6851> 1794 <6852> <6852> 8492 <6853> <6853> 1528 <6854> <6854> 1637 <6859> <6859> 5189 <685b> <685b> 14629 endcidrange 100 begincidrange <685c> <685c> 2153 <685d> <685d> 3743 <685f> <685f> 2181 <6863> <6863> 5190 <6867> <6867> 3490 <6872> <6872> 14630 <6874> <6874> 5202 <6875> <6875> 14631 <6876> <6876> 1331 <6877> <6877> 5191 <687a> <687a> 14632 <687e> <687e> 5208 <687f> <687f> 5192 <6881> <6881> 3978 <6883> <6883> 5199 <6884> <6884> 14633 <6885> <6885> 3349 <688d> <688d> 5207 <688e> <688e> 7836 <688f> <688f> 5194 <6893> <6893> 1144 <6894> <6894> 5196 <6897> <6897> 1998 <689b> <689b> 5198 <689d> <689d> 5197 <689f> <689f> 5193 <68a0> <68a0> 5204 <68a2> <68a2> 2471 <68a5> <68a5> 14634 <68a6> <68a6> 4542 <68a7> <68a7> 1948 <68a8> <68a8> 3942 <68ad> <68ad> 5195 <68af> <68af> 3088 <68b0> <68b0> 1409 <68b1> <68b1> 2077 <68b2> <68b2> 14635 <68b3> <68b3> 5187 <68b5> <68b5> 5203 <68b6> <68b6> 1471 <68b9> <68b9> 5201 <68ba> <68ba> 5205 <68bc> <68bc> 3176 <68c4> <68c4> 1594 <68c6> <68c6> 5235 <68c8> <68c8> 8367 <68c9> <68c9> 3797 <68ca> <68ca> 5210 <68cb> <68cb> 1593 <68cd> <68cd> 5217 <68cf> <68cf> 8496 <68d0> <68d0> 14636 <68d2> <68d2> 3694 <68d4> <68d4> 5218 <68d5> <68d5> 5220 <68d6> <68d6> 14637 <68d7> <68d7> 5224 <68d8> <68d8> 5212 <68da> <68da> 2920 <68df> <68df> 3177 <68e0> <68e0> 5228 <68e1> <68e1> 5215 <68e3> <68e3> 5225 <68e7> <68e7> 5219 <68e8> <68e8> 14638 <68ed> <68ed> 14639 <68ee> <68ee> 2559 <68ef> <68ef> 5229 <68f0> <68f1> 14640 <68f2> <68f2> 2647 <68f9> <68f9> 5227 <68fa> <68fa> 1529 <68fc> <68fc> 14642 <6900> <6900> 4086 <6901> <6901> 5209 <6904> <6904> 5223 <6905> <6905> 1180 <6908> <6908> 5211 <690b> <690b> 3782 <690c> <690c> 5216 <690d> <690d> 2536 <690e> <690e> 3043 <690f> <690f> 5206 <6911> <6911> 14643 <6912> <6912> 5222 <6913> <6913> 14644 <6919> <6919> 2624 <691a> <691a> 5232 <691b> <691b> 1487 <691c> <691c> 1877 <6921> <6921> 5234 <6922> <6922> 5213 <6923> <6923> 5233 <6925> <6925> 5226 <6926> <6926> 5214 <6928> <6928> 5230 <692a> <692a> 5231 <6930> <6930> 5248 <6934> <6934> 3238 <6935> <6935> 14645 endcidrange 100 begincidrange <6936> <6936> 5221 <6939> <6939> 5244 <693b> <693b> 14646 <693d> <693d> 5246 <693f> <693f> 3060 <694a> <694a> 3894 <6953> <6953> 3560 <6954> <6954> 5241 <6955> <6955> 2858 <6957> <6957> 14647 <6959> <6959> 5247 <695a> <695a> 2753 <695c> <695c> 5238 <695d> <695d> 5251 <695e> <695e> 5250 <6960> <6960> 3271 <6961> <6961> 5249 <6962> <6962> 3266 <6963> <6963> 14648 <6968> <6968> 8498 <696a> <696a> 5253 <696b> <696b> 5240 <696d> <696d> 1728 <696e> <696e> 5243 <696f> <696f> 2407 <6972> <6972> 14649 <6973> <6973> 3350 <6974> <6974> 5245 <6975> <6975> 1731 <6977> <6977> 5237 <6978> <6978> 5239 <6979> <6979> 5236 <697c> <697c> 4054 <697d> <697d> 1464 <697e> <697e> 5242 <697f> <6980> 14650 <6981> <6981> 5252 <6982> <6982> 1427 <698a> <698a> 2135 <698e> <698e> 1279 <6991> <6991> 5269 <6994> <6994> 4055 <6995> <6995> 5272 <6998> <6998> 8500 <699b> <699b> 2560 <699c> <699c> 5271 <69a0> <69a0> 5270 <69a6> <69a6> 14652 <69a7> <69a7> 5267 <69ad> <69ad> 14653 <69ae> <69ae> 5255 <69b1> <69b1> 5284 <69b2> <69b2> 5254 <69b4> <69b4> 5273 <69b7> <69b7> 14654 <69bb> <69bb> 5265 <69be> <69be> 5260 <69bf> <69bf> 5257 <69c1> <69c1> 5258 <69c3> <69c3> 5266 <69c7> <69c7> 7475 <69ca> <69ca> 5263 <69cb> <69cb> 1999 <69cc> <69cc> 3044 <69cd> <69cd> 2790 <69ce> <69ce> 5261 <69d0> <69d0> 5256 <69d3> <69d3> 5259 <69d6> <69d7> 14655 <69d8> <69d8> 3895 <69d9> <69d9> 3736 <69dd> <69dd> 5264 <69de> <69de> 5274 <69e2> <69e2> 8501 <69e7> <69e7> 5282 <69e8> <69e8> 5275 <69ea> <69ea> 13679 <69eb> <69eb> 5288 <69ed> <69ed> 5286 <69f2> <69f2> 5281 <69f6> <69f6> 14143 <69f9> <69f9> 5280 <69fb> <69fb> 3052 <69fd> <69fd> 2791 <69ff> <69ff> 5278 <6a01> <6a01> 14657 <6a02> <6a02> 5276 <6a05> <6a05> 5283 <6a0a> <6a0a> 5289 <6a0b> <6a0b> 3465 <6a0c> <6a0c> 5295 <6a0f> <6a0f> 14658 <6a12> <6a12> 5290 <6a13> <6a13> 5293 <6a14> <6a14> 5287 <6a15> <6a15> 14659 <6a17> <6a17> 2994 <6a19> <6a19> 3498 <6a1b> <6a1b> 5277 <6a1e> <6a1e> 5285 endcidrange 100 begincidrange <6a1f> <6a1f> 2472 <6a21> <6a21> 3803 <6a22> <6a22> 5305 <6a23> <6a23> 5292 <6a28> <6a28> 14660 <6a29> <6a29> 1878 <6a2a> <6a2a> 1315 <6a2b> <6a2b> 1469 <6a2e> <6a2e> 5268 <6a30> <6a30> 8502 <6a34> <6a34> 14661 <6a35> <6a35> 2473 <6a36> <6a36> 5297 <6a38> <6a38> 5304 <6a39> <6a39> 2341 <6a3a> <6a3a> 1488 <6a3d> <6a3d> 2924 <6a3e> <6a3e> 14662 <6a44> <6a44> 5294 <6a45> <6a45> 14663 <6a46> <6a46> 8504 <6a47> <6a47> 5299 <6a48> <6a48> 5303 <6a4b> <6a4b> 1710 <6a50> <6a51> 14664 <6a54> <6a54> 15412 <6a56> <6a56> 14666 <6a58> <6a58> 1638 <6a59> <6a59> 5301 <6a5b> <6a5b> 14667 <6a5f> <6a5f> 1595 <6a61> <6a61> 3235 <6a62> <6a62> 5300 <6a66> <6a66> 5302 <6a6b> <6a6b> 8503 <6a72> <6a72> 5296 <6a73> <6a73> 8505 <6a78> <6a78> 5298 <6a7e> <6a7e> 8506 <6a7f> <6a7f> 1470 <6a80> <6a80> 2951 <6a83> <6a83> 14668 <6a84> <6a84> 5309 <6a89> <6a89> 14669 <6a8d> <6a8d> 5307 <6a8e> <6a8e> 1949 <6a90> <6a90> 5306 <6a91> <6a91> 14670 <6a97> <6a97> 5312 <6a9c> <6a9c> 5179 <6a9d> <6a9f> 14671 <6aa0> <6aa0> 5308 <6aa2> <6aa3> 5310 <6aaa> <6aaa> 5323 <6aac> <6aac> 5319 <6aae> <6aae> 5200 <6ab3> <6ab3> 5318 <6ab8> <6ab8> 5317 <6abb> <6abb> 5314 <6ac1> <6ac1> 5291 <6ac2> <6ac2> 5316 <6ac3> <6ac3> 5315 <6ad1> <6ad1> 5321 <6ad3> <6ad3> 4044 <6ada> <6ada> 5324 <6adb> <6adb> 1779 <6adc> <6adc> 14674 <6ade> <6ade> 5320 <6adf> <6adf> 5322 <6ae2> <6ae2> 8507 <6ae4> <6ae4> 8508 <6ae7> <6ae7> 14675 <6ae8> <6ae8> 3387 <6aea> <6aea> 5325 <6aec> <6aec> 14676 <6afa> <6afa> 5329 <6afb> <6afb> 5326 <6b04> <6b04> 3933 <6b05> <6b05> 5327 <6b0a> <6b0a> 5279 <6b12> <6b12> 5330 <6b16> <6b16> 5331 <6b1d> <6b1d> 1239 <6b1e> <6b1e> 14677 <6b1f> <6b1f> 5333 <6b20> <6b20> 1853 <6b21> <6b21> 2253 <6b23> <6b23> 1741 <6b24> <6b24> 14678 <6b27> <6b27> 1316 <6b32> <6b32> 3913 <6b35> <6b35> 14679 <6b37> <6b37> 5335 <6b38> <6b38> 5334 <6b39> <6b39> 5337 <6b3a> <6b3a> 1623 <6b3d> <6b3d> 1742 <6b3e> <6b3e> 1530 <6b43> <6b43> 5340 <6b46> <6b46> 14680 endcidrange 100 begincidrange <6b47> <6b47> 5339 <6b49> <6b49> 5341 <6b4c> <6b4c> 1358 <6b4e> <6b4e> 2933 <6b50> <6b50> 5342 <6b53> <6b53> 1531 <6b54> <6b54> 5344 <6b56> <6b56> 14681 <6b59> <6b59> 5343 <6b5b> <6b5b> 5345 <6b5f> <6b5f> 5346 <6b60> <6b60> 14682 <6b61> <6b61> 5347 <6b62> <6b62> 2221 <6b63> <6b63> 2649 <6b64> <6b64> 2065 <6b65> <6b65> 13386 <6b66> <6b66> 3554 <6b69> <6b69> 3634 <6b6a> <6b6a> 4074 <6b6f> <6b6f> 2243 <6b72> <6b72> 13785 <6b73> <6b73> 2112 <6b74> <6b74> 4026 <6b77> <6b77> 13398 <6b78> <6b79> 5348 <6b7b> <6b7b> 2222 <6b7f> <6b80> 5350 <6b82> <6b82> 14683 <6b83> <6b83> 5353 <6b84> <6b84> 5352 <6b86> <6b86> 3718 <6b89> <6b89> 2408 <6b8a> <6b8a> 2328 <6b8b> <6b8b> 2194 <6b8d> <6b8d> 5354 <6b95> <6b95> 5356 <6b96> <6b96> 2537 <6b98> <6b98> 5355 <6b9e> <6b9e> 5357 <6ba4> <6ba4> 5358 <6baa> <6bab> 5359 <6baf> <6baf> 5361 <6bb1> <6bb1> 5363 <6bb2> <6bb2> 5362 <6bb3> <6bb3> 5364 <6bb4> <6bb4> 1317 <6bb5> <6bb5> 2952 <6bb7> <6bb7> 5365 <6bba> <6bba> 2164 <6bbb> <6bbb> 1450 <6bbc> <6bbc> 5366 <6bbe> <6bbe> 14684 <6bbf> <6bbf> 3132 <6bc0> <6bc0> 4509 <6bc5> <6bc5> 1597 <6bc6> <6bc6> 5367 <6bcb> <6bcb> 5368 <6bcc> <6bcc> 14148 <6bcd> <6bcd> 3644 <6bce> <6bce> 3734 <6bcf> <6bcf> 13388 <6bd2> <6bd2> 3231 <6bd3> <6bd3> 5369 <6bd4> <6bd4> 3450 <6bd6> <6bd6> 8509 <6bd8> <6bd8> 3471 <6bdb> <6bdb> 3807 <6bdf> <6bdf> 5370 <6be1> <6be1> 14685 <6beb> <6beb> 5372 <6bec> <6bec> 5371 <6bef> <6bef> 5374 <6bf1> <6bf1> 14686 <6bf3> <6bf3> 5373 <6c08> <6c08> 5376 <6c0f> <6c0f> 2223 <6c10> <6c10> 14687 <6c11> <6c11> 3773 <6c13> <6c14> 5377 <6c17> <6c17> 1598 <6c1b> <6c1b> 5379 <6c23> <6c23> 5381 <6c24> <6c24> 5380 <6c33> <6c33> 14688 <6c34> <6c34> 2603 <6c35> <6c35> 14689 <6c37> <6c37> 3499 <6c38> <6c38> 1260 <6c3a> <6c3a> 14690 <6c3e> <6c3e> 3417 <6c3f> <6c3f> 8510 <6c40> <6c40> 3089 <6c41> <6c41> 2379 <6c42> <6c42> 1659 <6c4e> <6c4e> 3418 <6c50> <6c50> 2266 <6c55> <6c55> 5383 <6c57> <6c57> 1532 <6c59> <6c59> 14691 endcidrange 100 begincidrange <6c5a> <6c5a> 1306 <6c5c> <6c5c> 8511 <6c5d> <6c5d> 3274 <6c5e> <6c5e> 5382 <6c5f> <6c5f> 2000 <6c60> <6c60> 2961 <6c62> <6c62> 5384 <6c68> <6c68> 5392 <6c6a> <6c6a> 5385 <6c6f> <6c6f> 8513 <6c70> <6c70> 2849 <6c72> <6c72> 1660 <6c73> <6c73> 5393 <6c76> <6c76> 14692 <6c7a> <6c7a> 1854 <6c7b> <6c7b> 14693 <6c7d> <6c7d> 1599 <6c7e> <6c7e> 5391 <6c81> <6c81> 5389 <6c82> <6c82> 5386 <6c83> <6c83> 3914 <6c85> <6c85> 14694 <6c86> <6c86> 8512 <6c88> <6c88> 3036 <6c8c> <6c8c> 3249 <6c8d> <6c8d> 5387 <6c90> <6c90> 5395 <6c92> <6c92> 5394 <6c93> <6c93> 1785 <6c95> <6c95> 14695 <6c96> <6c96> 1325 <6c99> <6c99> 2091 <6c9a> <6c9a> 5388 <6c9b> <6c9b> 5390 <6c9c> <6c9c> 14696 <6ca1> <6ca1> 3717 <6ca2> <6ca2> 2900 <6caa> <6caa> 14153 <6cab> <6cab> 3749 <6cae> <6cae> 5403 <6cb1> <6cb1> 5404 <6cb3> <6cb3> 1359 <6cb8> <6cb8> 3576 <6cb9> <6cb9> 3849 <6cba> <6cba> 5406 <6cbb> <6cbb> 2255 <6cbc> <6cbc> 2474 <6cbd> <6cbd> 5399 <6cbe> <6cbe> 5405 <6cbf> <6cbf> 1290 <6cc1> <6cc1> 1711 <6cc4> <6cc4> 5396 <6cc5> <6cc5> 5401 <6cc9> <6cc9> 2712 <6cca> <6cca> 3367 <6ccc> <6ccc> 3451 <6cd0> <6cd0> 14697 <6cd3> <6cd3> 5398 <6cd4> <6cd4> 14698 <6cd5> <6cd5> 3663 <6cd6> <6cd6> 14699 <6cd7> <6cd7> 5400 <6cd9> <6cd9> 5409 <6cda> <6cda> 8514 <6cdb> <6cdb> 5407 <6cdd> <6cdd> 5402 <6ce0> <6ce0> 14700 <6ce1> <6ce1> 3664 <6ce2> <6ce2> 3326 <6ce3> <6ce3> 1661 <6ce5> <6ce5> 3103 <6ce8> <6ce8> 2987 <6cea> <6cea> 5410 <6ceb> <6cec> 14701 <6cee> <6cee> 14703 <6cef> <6cef> 5408 <6cf0> <6cf0> 2873 <6cf1> <6cf1> 5397 <6cf3> <6cf3> 1261 <6d01> <6d01> 15413 <6d04> <6d04> 8515 <6d0a> <6d0a> 14704 <6d0b> <6d0b> 3896 <6d0c> <6d0c> 5421 <6d0e> <6d0e> 14705 <6d11> <6d11> 14706 <6d12> <6d12> 5420 <6d17> <6d17> 2714 <6d19> <6d19> 5417 <6d1b> <6d1b> 3926 <6d1e> <6d1e> 3214 <6d1f> <6d1f> 5411 <6d25> <6d25> 3041 <6d29> <6d29> 1262 <6d2a> <6d2a> 2001 <6d2b> <6d2b> 5414 <6d2e> <6d2e> 14707 <6d32> <6d32> 2353 <6d33> <6d33> 5419 <6d35> <6d35> 5418 endcidrange 100 begincidrange <6d36> <6d36> 5413 <6d38> <6d38> 5416 <6d3b> <6d3b> 1478 <6d3d> <6d3d> 5415 <6d3e> <6d3e> 3327 <6d41> <6d41> 3958 <6d44> <6d44> 2524 <6d45> <6d45> 2713 <6d57> <6d57> 14708 <6d59> <6d59> 5427 <6d5a> <6d5a> 5425 <6d5c> <6d5c> 3519 <6d5e> <6d5e> 14709 <6d63> <6d63> 5422 <6d64> <6d64> 5424 <6d65> <6d65> 14710 <6d66> <6d66> 1244 <6d69> <6d69> 2002 <6d6a> <6d6a> 4056 <6d6c> <6d6c> 1435 <6d6e> <6d6e> 3540 <6d6f> <6d6f> 8517 <6d74> <6d74> 3915 <6d77> <6d77> 1410 <6d78> <6d78> 2561 <6d79> <6d79> 5426 <6d82> <6d82> 14711 <6d85> <6d85> 5431 <6d87> <6d87> 8516 <6d88> <6d88> 2475 <6d89> <6d89> 13354 <6d8c> <6d8c> 3866 <6d8e> <6d8e> 5428 <6d93> <6d93> 5423 <6d95> <6d95> 5429 <6d96> <6d96> 8518 <6d99> <6d99> 4006 <6d9b> <6d9b> 3181 <6d9c> <6d9c> 3226 <6dac> <6dac> 8519 <6daf> <6daf> 1428 <6db2> <6db2> 1271 <6db5> <6db5> 5435 <6db8> <6db8> 5438 <6dbc> <6dbc> 3979 <6dbf> <6dbf> 14712 <6dc0> <6dc0> 3918 <6dc4> <6dc4> 14713 <6dc5> <6dc5> 5445 <6dc6> <6dc6> 5439 <6dc7> <6dc7> 5436 <6dca> <6dca> 14714 <6dcb> <6dcb> 3996 <6dcc> <6dcc> 5442 <6dcf> <6dcf> 8520 <6dd0> <6dd0> 15414 <6dd1> <6dd1> 2388 <6dd2> <6dd2> 5444 <6dd5> <6dd5> 5449 <6dd6> <6dd6> 14715 <6dd8> <6dd8> 3179 <6dd9> <6dd9> 5447 <6dda> <6dda> 13395 <6dde> <6dde> 5441 <6de1> <6de1> 2934 <6de4> <6de4> 5448 <6de6> <6de6> 5437 <6de8> <6de8> 5443 <6de9> <6de9> 14716 <6dea> <6dea> 5450 <6deb> <6deb> 1216 <6dec> <6dec> 5440 <6dee> <6dee> 5451 <6df1> <6df1> 2562 <6df2> <6df2> 8522 <6df3> <6df3> 2409 <6df5> <6df5> 3573 <6df7> <6df7> 2078 <6df8> <6df8> 8521 <6df9> <6df9> 5432 <6dfa> <6dfa> 5446 <6dfb> <6dfb> 3124 <6dfc> <6dfc> 8523 <6e05> <6e05> 2650 <6e07> <6e07> 1479 <6e08> <6e08> 2113 <6e09> <6e09> 2476 <6e0a> <6e0a> 5434 <6e0b> <6e0b> 2380 <6e13> <6e13> 1826 <6e15> <6e15> 5433 <6e17> <6e17> 14150 <6e19> <6e19> 5455 <6e1a> <6e1a> 2423 <6e1b> <6e1b> 1902 <6e1d> <6e1d> 5470 <6e1f> <6e1f> 5464 <6e20> <6e20> 1678 <6e21> <6e21> 3145 <6e22> <6e22> 14717 endcidrange 100 begincidrange <6e23> <6e23> 5459 <6e24> <6e24> 5468 <6e25> <6e25> 1139 <6e26> <6e26> 1236 <6e27> <6e27> 8526 <6e29> <6e29> 1337 <6e2b> <6e2b> 5461 <6e2c> <6e2c> 2828 <6e2d> <6e2d> 5452 <6e2e> <6e2e> 5454 <6e2f> <6e2f> 2003 <6e34> <6e34> 13330 <6e38> <6e38> 5471 <6e39> <6e39> 8524 <6e3a> <6e3a> 5466 <6e3c> <6e3c> 8527 <6e3e> <6e3e> 5458 <6e42> <6e42> 15415 <6e43> <6e43> 5465 <6e4a> <6e4a> 3767 <6e4d> <6e4d> 5463 <6e4e> <6e4e> 5467 <6e51> <6e51> 14718 <6e56> <6e56> 1924 <6e58> <6e58> 2477 <6e5b> <6e5b> 2935 <6e5c> <6e5c> 8525 <6e5f> <6e5f> 5457 <6e67> <6e67> 3865 <6e6b> <6e6b> 5460 <6e6e> <6e6e> 5453 <6e6f> <6e6f> 3180 <6e72> <6e72> 5456 <6e76> <6e76> 5462 <6e7e> <6e7e> 4087 <6e7f> <6e7f> 2282 <6e80> <6e80> 3756 <6e82> <6e82> 5472 <6e8c> <6e8c> 3394 <6e8f> <6e8f> 5484 <6e90> <6e90> 1903 <6e96> <6e96> 2410 <6e98> <6e98> 5474 <6e9c> <6e9c> 3959 <6e9d> <6e9d> 2004 <6e9f> <6e9f> 5487 <6ea2> <6ea2> 1202 <6ea5> <6ea5> 5485 <6eaa> <6eaa> 5473 <6eab> <6eab> 13324 <6eaf> <6eaf> 5479 <6eb2> <6eb2> 5481 <6eb6> <6eb6> 3897 <6eb7> <6eb7> 5476 <6eba> <6eba> 3112 <6ebd> <6ebd> 5478 <6ebf> <6ebf> 8528 <6ec2> <6ec2> 5486 <6ec4> <6ec4> 5480 <6ec5> <6ec5> 3795 <6ec7> <6ec7> 14719 <6ec9> <6ec9> 5475 <6eca> <6eca> 14720 <6ecb> <6ecb> 2254 <6ecc> <6ecc> 5499 <6ece> <6ece> 14721 <6ed1> <6ed1> 1480 <6ed3> <6ed3> 5477 <6ed4> <6ed5> 5482 <6ed9> <6ed9> 15416 <6edd> <6edd> 2892 <6ede> <6ede> 2874 <6ee6> <6ee6> 15396 <6eec> <6eec> 5491 <6eef> <6eef> 5497 <6ef2> <6ef2> 5495 <6ef4> <6ef4> 3107 <6ef7> <6ef7> 5502 <6ef8> <6ef8> 5492 <6efd> <6efd> 14722 <6efe> <6efe> 5493 <6eff> <6eff> 5469 <6f01> <6f01> 1683 <6f02> <6f02> 3500 <6f06> <6f06> 2283 <6f09> <6f09> 2057 <6f0f> <6f0f> 4057 <6f11> <6f11> 5489 <6f13> <6f13> 5501 <6f14> <6f14> 1291 <6f15> <6f15> 2792 <6f1a> <6f1a> 14723 <6f20> <6f20> 3375 <6f22> <6f22> 1533 <6f23> <6f23> 4034 <6f2a> <6f2a> 14724 <6f2b> <6f2b> 3757 <6f2c> <6f2c> 3054 <6f2f> <6f2f> 14725 <6f31> <6f31> 5496 endcidrange 100 begincidrange <6f32> <6f32> 5498 <6f33> <6f33> 14726 <6f38> <6f38> 2740 <6f3e> <6f3e> 5500 <6f3f> <6f3f> 5494 <6f41> <6f41> 5488 <6f45> <6f45> 1535 <6f51> <6f51> 7776 <6f54> <6f54> 1855 <6f58> <6f58> 5514 <6f5a> <6f5a> 14727 <6f5b> <6f5b> 5509 <6f5c> <6f5c> 2716 <6f5e> <6f5e> 14728 <6f5f> <6f5f> 1473 <6f62> <6f62> 14729 <6f64> <6f64> 2411 <6f66> <6f66> 5518 <6f6d> <6f6d> 5511 <6f6e> <6f6e> 3016 <6f6f> <6f6f> 5508 <6f70> <6f70> 3061 <6f74> <6f74> 5543 <6f78> <6f78> 5505 <6f7a> <6f7a> 5504 <6f7c> <6f7c> 5513 <6f7d> <6f7d> 14730 <6f80> <6f80> 5507 <6f81> <6f81> 5506 <6f82> <6f82> 5512 <6f84> <6f84> 2629 <6f86> <6f86> 5503 <6f88> <6f88> 8529 <6f8b> <6f8b> 14731 <6f8d> <6f8d> 14732 <6f8e> <6f8e> 5515 <6f91> <6f91> 5516 <6f92> <6f92> 14733 <6f94> <6f94> 14734 <6f97> <6f97> 1534 <6f98> <6f98> 13884 <6f9a> <6f9a> 14735 <6fa1> <6fa1> 5521 <6fa3> <6fa3> 5520 <6fa4> <6fa4> 5522 <6fa7> <6fa8> 14736 <6faa> <6faa> 5525 <6fb1> <6fb1> 3133 <6fb3> <6fb3> 5519 <6fb5> <6fb5> 8530 <6fb6> <6fb6> 14738 <6fb9> <6fb9> 5523 <6fc0> <6fc0> 1849 <6fc1> <6fc1> 2905 <6fc2> <6fc2> 5517 <6fc3> <6fc3> 3313 <6fc6> <6fc6> 5524 <6fd4> <6fd4> 5529 <6fd5> <6fd5> 5527 <6fd8> <6fd8> 5530 <6fda> <6fda> 14739 <6fdb> <6fdb> 5533 <6fde> <6fde> 14740 <6fdf> <6fdf> 5526 <6fe0> <6fe0> 2044 <6fe1> <6fe1> 3294 <6fe4> <6fe4> 5430 <6feb> <6feb> 3934 <6fec> <6fec> 5528 <6fee> <6fee> 5532 <6fef> <6fef> 2901 <6ff1> <6ff1> 5531 <6ff3> <6ff3> 5510 <6ff5> <6ff5> 8531 <6ff6> <6ff6> 7076 <6ff9> <6ff9> 14741 <6ffa> <6ffa> 5536 <6ffe> <6ffe> 5540 <7001> <7001> 5538 <7005> <7005> 8532 <7006> <7006> 7760 <7007> <7007> 8533 <7009> <7009> 5534 <700b> <700b> 5535 <700f> <700f> 5539 <7011> <7011> 5537 <7015> <7015> 3520 <7018> <7018> 5545 <701a> <701a> 5542 <701b> <701b> 5541 <701d> <701d> 5544 <701e> <701e> 3244 <701f> <701f> 5546 <7026> <7026> 2995 <7027> <7027> 2893 <7028> <7028> 8534 <702c> <702c> 2633 <7030> <7030> 5547 <7032> <7032> 5549 <7039> <7039> 14742 endcidrange 100 begincidrange <703c> <703c> 14743 <703e> <703e> 5548 <704a> <704a> 14744 <704c> <704c> 5490 <7051> <7051> 5550 <7054> <7054> 14745 <7058> <7058> 3263 <705d> <705e> 14746 <7063> <7063> 5551 <7064> <7064> 14748 <706b> <706b> 1360 <706c> <706c> 14749 <706f> <706f> 3182 <7070> <7070> 1411 <7078> <7078> 1662 <707c> <707c> 2314 <707d> <707d> 2114 <707e> <707e> 14750 <7081> <7081> 14751 <7085> <7085> 8535 <7089> <7089> 4045 <708a> <708a> 2604 <708e> <708e> 1292 <7092> <7092> 5553 <7095> <7095> 14752 <7099> <7099> 5552 <70ab> <70ab> 8536 <70ac> <70ac> 5556 <70ad> <70ad> 2936 <70ae> <70ae> 5559 <70af> <70af> 5554 <70b3> <70b3> 5558 <70b7> <70b7> 14753 <70b8> <70b8> 5557 <70b9> <70b9> 3130 <70ba> <70ba> 1181 <70bb> <70bb> 8365 <70c8> <70c8> 4029 <70cb> <70cb> 5561 <70cf> <70cf> 1226 <70d3> <70d4> 14754 <70d8> <70d8> 14756 <70d9> <70d9> 5563 <70dc> <70dc> 14757 <70dd> <70dd> 5562 <70df> <70df> 5560 <70f1> <70f1> 5555 <70f9> <70f9> 3665 <70fd> <70fd> 5565 <7104> <7104> 8538 <7107> <7107> 14758 <7109> <7109> 5564 <710f> <710f> 8537 <7114> <7114> 1293 <7119> <7119> 5567 <711a> <711a> 3586 <711c> <711c> 5566 <7120> <7120> 14759 <7121> <7121> 3777 <7126> <7126> 2479 <7130> <7130> 7644 <7131> <7131> 14760 <7136> <7136> 2741 <713c> <713c> 2478 <7146> <7147> 8540 <7149> <7149> 4035 <714a> <714a> 14761 <714c> <714c> 5573 <714e> <714e> 2717 <7152> <7152> 14762 <7155> <7155> 5569 <7156> <7156> 5574 <7159> <7159> 1294 <715c> <715c> 8539 <7160> <7160> 14763 <7162> <7162> 5572 <7164> <7164> 3351 <7165> <7165> 5568 <7166> <7166> 5571 <7167> <7167> 2480 <7169> <7169> 3429 <716c> <716c> 5575 <716e> <716e> 2301 <7179> <7179> 14764 <717d> <717d> 2718 <7184> <7184> 5578 <7188> <7188> 5570 <718a> <718a> 1789 <718f> <718f> 5576 <7192> <7192> 14765 <7194> <7194> 3898 <7195> <7195> 5579 <7199> <7199> 8285 <719f> <719f> 2393 <71a8> <71a8> 5580 <71ac> <71ac> 5581 <71b1> <71b1> 3300 <71b3> <71b3> 14766 <71b9> <71b9> 5583 <71be> <71be> 5584 endcidrange 100 begincidrange <71c1> <71c1> 8543 <71c3> <71c3> 3305 <71c8> <71c8> 3183 <71c9> <71c9> 5586 <71cb> <71cb> 14767 <71ce> <71ce> 5588 <71d0> <71d0> 3997 <71d2> <71d2> 5585 <71d3> <71d3> 14768 <71d4> <71d4> 5587 <71d5> <71d5> 1295 <71d6> <71d6> 14769 <71d7> <71d7> 5582 <71df> <71df> 4430 <71e0> <71e0> 5589 <71e5> <71e5> 2793 <71e6> <71e6> 2182 <71e7> <71e7> 5591 <71ec> <71ec> 5590 <71ed> <71ed> 2538 <71ee> <71ee> 4334 <71f5> <71f5> 5592 <71f9> <71f9> 5594 <71fb> <71fb> 5577 <71fc> <71fc> 5593 <71fe> <71fe> 8544 <71ff> <71ff> 5595 <7200> <7200> 14770 <7206> <7206> 3376 <720d> <720d> 5596 <7210> <7210> 5597 <721b> <721b> 5598 <721d> <721d> 14771 <7228> <7228> 5599 <722a> <722a> 3066 <722b> <722b> 14772 <722c> <722c> 5601 <722d> <722d> 5600 <7230> <7230> 5602 <7232> <7232> 5603 <7235> <7235> 2315 <7236> <7236> 3541 <7238> <7238> 14773 <723a> <723a> 3832 <723b> <723c> 5604 <723d> <723d> 2776 <723e> <723e> 2256 <723f> <7240> 5606 <7241> <7241> 14774 <7246> <7246> 5608 <7247> <7247> 3618 <7248> <7248> 3419 <724b> <724b> 5609 <724c> <724c> 3341 <7252> <7252> 3017 <7253> <7253> 14775 <7255> <7256> 14776 <7258> <7258> 5610 <7259> <7259> 1383 <725b> <725b> 1671 <725c> <725c> 14778 <725d> <725d> 3794 <725f> <725f> 3778 <7261> <7261> 1332 <7262> <7262> 4058 <7267> <7267> 3712 <7269> <7269> 3578 <7272> <7272> 2651 <7274> <7274> 5611 <7279> <7279> 3227 <727d> <727d> 1879 <727e> <727e> 5612 <7280> <7280> 2116 <7281> <7281> 5614 <7282> <7282> 5613 <7287> <7287> 5615 <728d> <728d> 14779 <7292> <7292> 5616 <7296> <7296> 5617 <72a0> <72a0> 1624 <72a2> <72a2> 5618 <72a7> <72a7> 5619 <72ac> <72ac> 1880 <72ad> <72ad> 14780 <72af> <72af> 3420 <72b1> <72b1> 8545 <72b2> <72b2> 5621 <72b4> <72b4> 14781 <72b6> <72b6> 2525 <72b9> <72b9> 5620 <72be> <72be> 8546 <72c0> <72c0> 13355 <72c2> <72c2> 1712 <72c3> <72c3> 5622 <72c4> <72c4> 5624 <72c6> <72c6> 5623 <72c7> <72c7> 14782 <72ce> <72ce> 5625 <72d0> <72d0> 1925 <72d2> <72d2> 5626 endcidrange 100 begincidrange <72d7> <72d7> 1761 <72d9> <72d9> 2754 <72db> <72db> 2063 <72e0> <72e1> 5628 <72e2> <72e2> 5627 <72e9> <72e9> 2329 <72ec> <72ec> 3232 <72ed> <72ed> 1713 <72f7> <72f7> 5631 <72f8> <72f8> 2922 <72f9> <72f9> 5630 <72fb> <72fb> 14783 <72fc> <72fc> 4059 <72fd> <72fd> 3352 <7304> <7305> 14784 <730a> <730a> 5634 <7316> <7316> 5636 <7317> <7317> 5633 <731b> <731b> 3808 <731c> <731c> 5635 <731d> <731d> 5637 <731f> <731f> 3980 <7324> <7324> 8547 <7325> <7325> 5641 <7328> <7328> 14786 <7329> <7329> 5640 <732a> <732a> 2996 <732b> <732b> 3299 <732e> <732e> 1881 <732f> <732f> 5639 <7331> <7331> 14787 <7334> <7334> 5638 <7336> <7337> 3867 <733e> <733e> 5642 <733f> <733f> 1296 <7343> <7343> 14788 <7344> <7344> 2056 <7345> <7345> 2224 <734e> <734f> 5643 <7357> <7357> 5646 <7363> <7363> 2381 <7368> <7368> 5648 <736a> <736a> 5647 <736c> <736c> 14789 <7370> <7370> 5649 <7372> <7372> 1451 <7375> <7375> 5651 <7377> <7377> 8549 <7378> <7378> 5650 <737a> <737a> 5653 <737b> <737b> 5652 <737c> <737c> 14790 <7383> <7383> 14791 <7384> <7384> 1904 <7385> <7386> 14792 <7387> <7387> 3952 <7389> <7389> 1732 <738b> <738b> 1318 <7395> <7395> 14794 <7396> <7396> 1762 <739e> <73a0> 14795 <73a6> <73a6> 14798 <73a8> <73a8> 15423 <73a9> <73a9> 1565 <73ab> <73ab> 14799 <73b2> <73b2> 4016 <73b3> <73b3> 5655 <73b5> <73b5> 14800 <73b7> <73b7> 14801 <73ba> <73ba> 13802 <73bb> <73bb> 5657 <73bc> <73bc> 14802 <73bd> <73bd> 8550 <73c0> <73c0> 5658 <73c2> <73c2> 1361 <73c8> <73c8> 5654 <73c9> <73c9> 8551 <73ca> <73ca> 2183 <73cd> <73cd> 3037 <73ce> <73ce> 5656 <73cf> <73cf> 14803 <73d2> <73d2> 8554 <73d6> <73d6> 8552 <73d9> <73d9> 14804 <73de> <73de> 5661 <73e0> <73e0> 2330 <73e3> <73e3> 8553 <73e4> <73e4> 15417 <73e5> <73e5> 5659 <73e9> <73e9> 14805 <73ea> <73ea> 1812 <73ed> <73ed> 3421 <73ee> <73ee> 5660 <73f1> <73f1> 5687 <73f4> <73f4> 14806 <73f5> <73f5> 8556 <73f8> <73f8> 5666 <73fd> <73fd> 14807 <73fe> <73fe> 1905 <7403> <7403> 1663 endcidrange 100 begincidrange <7404> <7404> 14808 <7405> <7405> 5663 <7406> <7406> 3943 <7407> <7407> 8555 <7409> <7409> 3960 <740a> <740a> 14809 <741a> <741b> 14810 <7421> <7421> 15418 <7422> <7422> 2902 <7424> <7424> 14812 <7425> <7425> 5665 <7426> <7426> 8557 <7428> <7428> 14813 <7429> <7429> 8559 <742a> <742a> 8558 <742c> <742c> 14814 <742e> <742e> 8560 <742f> <7431> 14815 <7432> <7432> 5667 <7433> <7433> 3998 <7434> <7434> 1743 <7435> <7435> 3472 <7436> <7436> 3328 <7439> <7439> 14818 <743a> <743a> 5668 <743f> <743f> 5670 <7441> <7441> 5673 <7444> <7444> 14819 <7447> <7447> 14820 <744b> <744b> 14821 <744d> <744d> 14822 <7451> <7451> 14823 <7455> <7455> 5669 <7457> <7457> 14824 <7459> <7459> 5672 <745a> <745a> 1950 <745b> <745b> 1263 <745c> <745c> 5674 <745e> <745e> 2614 <745f> <745f> 5671 <7460> <7460> 4004 <7462> <7462> 8561 <7463> <7463> 5677 <7464> <7464> 7477 <7466> <7466> 14825 <7469> <7469> 5675 <746a> <746a> 5678 <746b> <746b> 14826 <746f> <746f> 5664 <7470> <7470> 5676 <7471> <7471> 14827 <7473> <7473> 2092 <7476> <7476> 5679 <747e> <747e> 5680 <7480> <7480> 14828 <7483> <7483> 3944 <7485> <7487> 14829 <7489> <7489> 8562 <748b> <748b> 5681 <7490> <7490> 14832 <7498> <7498> 14833 <749c> <749c> 14834 <749e> <749e> 5682 <749f> <749f> 8563 <74a0> <74a0> 14835 <74a2> <74a2> 5662 <74a3> <74a3> 14836 <74a7> <74a7> 5683 <74a8> <74a8> 14837 <74ab> <74ab> 14838 <74b0> <74b0> 1536 <74b5> <74b5> 14839 <74bd> <74bd> 2257 <74bf> <74bf> 14840 <74c8> <74c8> 14841 <74ca> <74ca> 5684 <74cf> <74cf> 5685 <74d4> <74d4> 5686 <74da> <74da> 14842 <74dc> <74dc> 1245 <74de> <74de> 14843 <74e0> <74e0> 5688 <74e2> <74e2> 3501 <74e3> <74e3> 5689 <74e6> <74e6> 1504 <74e7> <74e7> 5690 <74e9> <74e9> 5691 <74ee> <74ee> 5692 <74ef> <74ef> 14160 <74f0> <74f1> 5694 <74f2> <74f2> 5693 <74f6> <74f6> 3525 <74f7> <74f7> 5697 <74f8> <74f8> 5696 <7501> <7501> 8564 <7503> <7503> 5699 <7504> <7504> 5698 <7505> <7505> 5700 <750c> <750c> 5701 <750d> <750d> 5703 endcidrange 100 begincidrange <750e> <750e> 5702 <7511> <7511> 2059 <7513> <7513> 5705 <7515> <7515> 5704 <7518> <7518> 1537 <751a> <751a> 2585 <751c> <751c> 3126 <751e> <751e> 5706 <751f> <751f> 2652 <7522> <7522> 13790 <7523> <7523> 2184 <7525> <7525> 1307 <7526> <7526> 5707 <7528> <7528> 3899 <752b> <752b> 3635 <752c> <752c> 5708 <752f> <752f> 8434 <7530> <7530> 3134 <7531> <7531> 3869 <7532> <7532> 2005 <7533> <7533> 2563 <7537> <7537> 2953 <7538> <7538> 4297 <753a> <753a> 3018 <753b> <753b> 1384 <753c> <753c> 5709 <7544> <7544> 5710 <7546> <7546> 5715 <7549> <7549> 5713 <754a> <754a> 5712 <754b> <754b> 5063 <754c> <754c> 1412 <754d> <754d> 5711 <754e> <754e> 14844 <754f> <754f> 1182 <7551> <7551> 3390 <7554> <7554> 3422 <7559> <7559> 3961 <755a> <755a> 5716 <755b> <755b> 5714 <755c> <755c> 2970 <755d> <755d> 2634 <7560> <7560> 3391 <7562> <7562> 3487 <7564> <7564> 5718 <7565> <7565> 3956 <7566> <7566> 1827 <7567> <7567> 5719 <7569> <7569> 5717 <756a> <756a> 3434 <756b> <756b> 5720 <756c> <756c> 15419 <756d> <756d> 5721 <756f> <756f> 8565 <7570> <7570> 1183 <7573> <7573> 2526 <7574> <7574> 5726 <7575> <7575> 14161 <7576> <7576> 5723 <7577> <7577> 3269 <7578> <7578> 5722 <7579> <7579> 14845 <757f> <757f> 1600 <7581> <7581> 14846 <7582> <7582> 5729 <7586> <7587> 5724 <7589> <7589> 5728 <758a> <758a> 5727 <758b> <758b> 3479 <758e> <758e> 2756 <758f> <758f> 2755 <7590> <7590> 14847 <7591> <7591> 1625 <7592> <7593> 14848 <7594> <7594> 5730 <759a> <759a> 5731 <759d> <759d> 5732 <75a3> <75a3> 5734 <75a5> <75a5> 5733 <75ab> <75ab> 1272 <75b1> <75b1> 5742 <75b2> <75b2> 3452 <75b3> <75b3> 5736 <75b4> <75b4> 14850 <75b5> <75b5> 5738 <75b8> <75b8> 5740 <75b9> <75b9> 2564 <75bc> <75bc> 5741 <75bd> <75bd> 5739 <75be> <75be> 2284 <75c2> <75c2> 5735 <75c3> <75c3> 5737 <75c5> <75c5> 3508 <75c7> <75c7> 2481 <75ca> <75ca> 5744 <75cd> <75cd> 5743 <75d2> <75d2> 5745 <75d4> <75d4> 2258 <75d5> <75d5> 2079 <75d8> <75d8> 3185 endcidrange 100 begincidrange <75d9> <75d9> 5746 <75db> <75db> 3047 <75de> <75de> 5748 <75e2> <75e2> 3945 <75e3> <75e3> 5747 <75e4> <75e4> 14851 <75e9> <75e9> 2795 <75ec> <75ec> 14162 <75f0> <75f0> 5753 <75f2> <75f3> 5755 <75f4> <75f4> 2962 <75f9> <75f9> 14852 <75fa> <75fa> 5754 <75fc> <75fc> 5751 <75fe> <75ff> 5749 <7600> <7600> 14853 <7601> <7601> 5752 <7609> <7609> 5759 <760a> <760a> 14854 <760b> <760b> 5757 <760d> <760d> 5758 <7615> <7616> 14855 <7619> <7619> 14857 <761e> <761e> 14858 <761f> <761f> 5760 <7620> <7622> 5762 <7624> <7624> 5765 <7626> <7626> 7725 <7627> <7627> 5761 <762d> <762d> 14859 <7630> <7630> 5767 <7634> <7634> 5766 <7635> <7635> 14860 <763b> <763b> 5768 <7642> <7642> 3981 <7643> <7643> 14861 <7646> <7646> 5771 <7647> <7648> 5769 <764b> <764b> 14862 <764c> <764c> 1566 <764e> <764e> 14163 <7652> <7652> 3850 <7656> <7656> 3610 <7658> <7658> 5773 <765c> <765c> 5772 <7661> <7662> 5774 <7665> <7665> 14863 <7667> <7667> 5779 <7668> <766a> 5776 <766c> <766c> 5780 <766d> <766d> 14864 <766f> <766f> 14865 <7670> <7670> 5781 <7671> <7671> 14866 <7672> <7672> 5782 <7674> <7674> 14867 <7676> <7676> 5783 <7678> <7678> 5784 <767a> <767a> 3395 <767b> <767b> 3146 <767c> <767c> 5785 <767d> <767d> 3368 <767e> <767e> 3494 <7680> <7680> 5786 <7682> <7682> 8566 <7683> <7683> 5787 <7684> <7684> 3108 <7686> <7686> 1413 <7687> <7687> 2006 <7688> <7688> 5788 <768b> <768b> 5789 <768e> <768e> 5790 <7690> <7690> 2167 <7693> <7693> 5792 <7696> <7696> 5791 <7699> <769a> 5793 <769b> <769b> 8569 <769c> <769c> 8567 <769e> <769e> 8568 <76a4> <76a5> 14868 <76a6> <76a6> 8570 <76ae> <76ae> 3453 <76b0> <76b0> 5795 <76b4> <76b4> 5796 <76b7> <76b7> 7452 <76b8> <76ba> 5797 <76bf> <76bf> 2172 <76c2> <76c2> 5800 <76c3> <76c3> 3340 <76c5> <76c5> 14870 <76c6> <76c6> 3725 <76c8> <76c8> 1264 <76ca> <76ca> 1273 <76cc> <76cc> 14871 <76cd> <76cd> 5801 <76d2> <76d2> 5803 <76d6> <76d6> 5802 <76d7> <76d7> 3178 <76db> <76db> 2653 <76dc> <76dc> 5336 endcidrange 100 begincidrange <76de> <76de> 5804 <76df> <76df> 3789 <76e1> <76e1> 5805 <76e3> <76e3> 1538 <76e4> <76e4> 3435 <76e5> <76e5> 5806 <76e7> <76e7> 5807 <76ea> <76ea> 5808 <76ec> <76ec> 14872 <76ee> <76ee> 3816 <76f2> <76f2> 3809 <76f4> <76f4> 3034 <76f8> <76f8> 2796 <76fb> <76fb> 5810 <76fc> <76fc> 14873 <76fe> <76fe> 2412 <7701> <7701> 2482 <7704> <7704> 5813 <7707> <7707> 5812 <7708> <7708> 5811 <7709> <7709> 3473 <770b> <770b> 1539 <770c> <770c> 1885 <771b> <771b> 5819 <771e> <771e> 5816 <771f> <771f> 2565 <7720> <7720> 3774 <7724> <7724> 5815 <7725> <7726> 5817 <7729> <7729> 5814 <7734> <7734> 14874 <7736> <7736> 14875 <7737> <7738> 5820 <773a> <773a> 3019 <773c> <773c> 1567 <7740> <7740> 2979 <7746> <7746> 8572 <7747> <7747> 5822 <775a> <775a> 5823 <775b> <775b> 5826 <775c> <775c> 14876 <775f> <7760> 14877 <7761> <7761> 2605 <7762> <7762> 7877 <7763> <7763> 3228 <7765> <7765> 5827 <7766> <7766> 3713 <7768> <7768> 5824 <776a> <776a> 14165 <776b> <776b> 5825 <7772> <7772> 14879 <7779> <7779> 5830 <777d> <777d> 14880 <777e> <777e> 5829 <777f> <777f> 5828 <778b> <778b> 5832 <778e> <778e> 5831 <7791> <7791> 5833 <7795> <7795> 14881 <779e> <779e> 5835 <77a0> <77a0> 5834 <77a5> <77a5> 3613 <77a9> <77a9> 14166 <77aa> <77aa> 14882 <77ac> <77ac> 2400 <77ad> <77ad> 3982 <77b0> <77b0> 5836 <77b3> <77b3> 3215 <77b6> <77b6> 5837 <77b9> <77b9> 5838 <77bb> <77bb> 5842 <77bc> <77bd> 5840 <77bf> <77bf> 5839 <77c7> <77c7> 5843 <77cd> <77cd> 5844 <77d7> <77d7> 5845 <77da> <77da> 5846 <77db> <77db> 3779 <77dc> <77dc> 5847 <77e2> <77e2> 3836 <77e3> <77e3> 5848 <77e5> <77e5> 2956 <77e6> <77e6> 14883 <77e7> <77e7> 3360 <77e9> <77e9> 1763 <77ed> <77ed> 2937 <77ee> <77ee> 5849 <77ef> <77ef> 1714 <77f0> <77f0> 14884 <77f3> <77f3> 2676 <77f4> <77f4> 14885 <77fc> <77fc> 5850 <7802> <7802> 2093 <7806> <7806> 14886 <780c> <780c> 5851 <7812> <7812> 5852 <7814> <7814> 1882 <7815> <7815> 2117 <7820> <7820> 5854 <7821> <7821> 8574 endcidrange 100 begincidrange <7822> <7822> 14887 <7825> <7825> 3152 <7826> <7826> 2118 <7827> <7827> 1640 <782d> <782e> 14888 <7830> <7830> 14890 <7832> <7832> 3666 <7834> <7834> 3329 <7835> <7835> 14891 <783a> <783a> 3153 <783f> <783f> 2030 <7845> <7845> 5856 <784e> <784e> 8575 <784f> <784f> 13342 <7851> <7851> 15420 <785d> <785d> 2483 <7864> <7864> 8576 <7868> <7868> 14892 <786b> <786b> 3962 <786c> <786c> 2007 <786f> <786f> 1883 <7872> <7872> 3383 <7874> <7874> 5858 <787a> <787a> 8577 <787c> <787c> 5860 <7881> <7881> 1951 <7886> <7886> 5859 <7887> <7887> 3090 <788c> <788c> 5862 <788d> <788d> 1429 <788e> <788e> 5857 <7891> <7891> 3454 <7893> <7893> 1234 <7895> <7895> 2140 <7897> <7897> 4088 <789a> <789a> 5861 <789e> <789e> 14893 <78a3> <78a3> 5863 <78a7> <78a7> 3611 <78a9> <78a9> 2685 <78aa> <78aa> 5865 <78af> <78af> 5866 <78b5> <78b5> 5864 <78ba> <78ba> 1452 <78bc> <78bc> 5872 <78be> <78be> 5871 <78c1> <78c1> 2259 <78c5> <78c5> 5873 <78c6> <78c6> 5868 <78c8> <78c8> 14894 <78ca> <78ca> 5874 <78cb> <78cb> 5869 <78cc> <78cc> 14895 <78ce> <78ce> 14896 <78d0> <78d0> 3436 <78d1> <78d1> 5867 <78d4> <78d4> 5870 <78da> <78da> 5877 <78e0> <78e1> 14898 <78e4> <78e4> 14897 <78e7> <78e7> 5876 <78e8> <78e8> 3727 <78ec> <78ec> 5875 <78ef> <78ef> 1199 <78f2> <78f2> 14900 <78f4> <78f4> 5879 <78f7> <78f7> 14901 <78fb> <78fb> 14902 <78fd> <78fd> 5878 <7901> <7901> 2484 <7907> <7907> 5880 <790e> <790e> 2757 <7911> <7911> 5882 <7912> <7912> 5881 <7919> <7919> 5883 <7926> <7926> 5853 <792a> <792a> 5855 <792b> <792b> 5885 <792c> <792c> 5884 <7930> <7930> 8578 <7931> <7931> 14903 <7934> <7934> 14904 <793a> <793a> 2260 <793b> <793b> 14905 <793c> <793c> 4017 <793d> <793d> 14906 <793e> <793e> 2302 <7940> <7940> 5886 <7941> <7941> 1805 <7945> <7945> 14907 <7947> <7947> 1626 <7948> <7948> 1601 <7949> <7949> 2225 <7950> <7950> 3870 <7953> <7953> 5892 <7955> <7955> 5891 <7956> <7956> 2758 <7957> <7957> 5888 <795a> <795a> 5890 <795b> <795c> 14908 endcidrange 100 begincidrange <795d> <795d> 2389 <795e> <795e> 2566 <795f> <795f> 5889 <7960> <7960> 5887 <7962> <7962> 3296 <7965> <7965> 2485 <7968> <7968> 3502 <796d> <796d> 2119 <7977> <7977> 3186 <797a> <797a> 5893 <797f> <797f> 5894 <7980> <7980> 5916 <7981> <7981> 1744 <7984> <7984> 4067 <7985> <7985> 2743 <798a> <798a> 5895 <798b> <798b> 14910 <798d> <798d> 1362 <798e> <798e> 3091 <798f> <798f> 3569 <7994> <7994> 8582 <7996> <7996> 14911 <7998> <7998> 14912 <799b> <799b> 8584 <799d> <799d> 5896 <79a6> <79a6> 1684 <79a7> <79a7> 5897 <79aa> <79aa> 5899 <79ae> <79ae> 5900 <79b0> <79b0> 3295 <79b1> <79b1> 7758 <79b3> <79b3> 5901 <79b8> <79b8> 14913 <79b9> <79ba> 5902 <79bb> <79bb> 14914 <79bd> <79bd> 1745 <79be> <79be> 1363 <79bf> <79bf> 3229 <79c0> <79c0> 2354 <79c1> <79c1> 2226 <79c9> <79c9> 5904 <79ca> <79ca> 14915 <79cb> <79cb> 2355 <79d1> <79d1> 1354 <79d2> <79d2> 3509 <79d5> <79d5> 5905 <79d8> <79d8> 3455 <79da> <79da> 14916 <79df> <79df> 2759 <79e1> <79e1> 5908 <79e3> <79e3> 5909 <79e4> <79e4> 3359 <79e6> <79e6> 2567 <79e7> <79e7> 5906 <79e9> <79e9> 2975 <79ec> <79ec> 5907 <79f0> <79f0> 2486 <79fb> <79fb> 1184 <7a00> <7a00> 1603 <7a03> <7a03> 14917 <7a05> <7a05> 13875 <7a08> <7a08> 5910 <7a09> <7a09> 14918 <7a0b> <7a0b> 3092 <7a0d> <7a0d> 5911 <7a0e> <7a0e> 2667 <7a11> <7a11> 14919 <7a14> <7a14> 3769 <7a17> <7a17> 3477 <7a18> <7a19> 5912 <7a1a> <7a1a> 2963 <7a1c> <7a1c> 3983 <7a1e> <7a1e> 14920 <7a1f> <7a1f> 5915 <7a20> <7a20> 5914 <7a2d> <7a2d> 14921 <7a2e> <7a2e> 2331 <7a31> <7a31> 5917 <7a32> <7a32> 1204 <7a37> <7a37> 5920 <7a39> <7a39> 14922 <7a3b> <7a3b> 5918 <7a3c> <7a3c> 1364 <7a3d> <7a3d> 1828 <7a3e> <7a3e> 5919 <7a3f> <7a3f> 2008 <7a40> <7a40> 2052 <7a42> <7a42> 3638 <7a43> <7a43> 5921 <7a45> <7a45> 14923 <7a46> <7a46> 3714 <7a49> <7a49> 5923 <7a4c> <7a4c> 14924 <7a4d> <7a4d> 2677 <7a4e> <7a4e> 1265 <7a4f> <7a4f> 1338 <7a50> <7a50> 1136 <7a57> <7a57> 5922 <7a5d> <7a5d> 14925 <7a60> <7a60> 14926 endcidrange 100 begincidrange <7a61> <7a62> 5924 <7a63> <7a63> 2527 <7a69> <7a69> 5926 <7a6b> <7a6b> 1453 <7a6d> <7a6d> 14927 <7a70> <7a70> 5928 <7a74> <7a74> 1856 <7a76> <7a76> 1664 <7a78> <7a78> 14928 <7a79> <7a79> 5929 <7a7a> <7a7a> 1773 <7a7d> <7a7d> 5930 <7a7f> <7a7f> 2720 <7a81> <7a81> 3237 <7a83> <7a83> 2692 <7a84> <7a84> 2149 <7a88> <7a88> 5931 <7a92> <7a92> 2976 <7a93> <7a93> 2797 <7a95> <7a95> 5933 <7a96> <7a96> 5935 <7a97> <7a97> 5932 <7a98> <7a98> 5934 <7a9f> <7a9f> 1784 <7aa0> <7aa0> 14929 <7aa3> <7aa3> 14930 <7aa9> <7aa9> 5936 <7aaa> <7aaa> 1788 <7aae> <7aae> 1665 <7aaf> <7aaf> 3900 <7ab0> <7ab0> 5938 <7ab3> <7ab3> 14931 <7ab6> <7ab6> 5939 <7aba> <7aba> 1232 <7abb> <7abc> 14932 <7abf> <7abf> 5942 <7ac3> <7ac3> 1492 <7ac4> <7ac4> 5941 <7ac5> <7ac5> 5940 <7ac6> <7ac6> 14934 <7ac7> <7ac7> 5944 <7ac8> <7ac8> 5937 <7aca> <7aca> 5945 <7acb> <7acb> 3953 <7acd> <7acd> 5946 <7acf> <7acf> 5947 <7ad1> <7ad1> 8585 <7ad2> <7ad2> 4549 <7ad3> <7ad3> 5949 <7ad5> <7ad5> 5948 <7ad9> <7ada> 5950 <7adc> <7adc> 3965 <7add> <7add> 5952 <7adf> <7adf> 7176 <7ae0> <7ae0> 2487 <7ae1> <7ae2> 5953 <7ae3> <7ae3> 2401 <7ae5> <7ae5> 3216 <7ae6> <7ae6> 5955 <7ae7> <7ae7> 8586 <7aea> <7aea> 2918 <7aeb> <7aeb> 8588 <7aed> <7aed> 5956 <7aef> <7aef> 2938 <7af0> <7af0> 5957 <7af6> <7af6> 1693 <7af8> <7af8> 4214 <7af9> <7af9> 2971 <7afa> <7afa> 2271 <7aff> <7aff> 1540 <7b02> <7b02> 5958 <7b04> <7b04> 5971 <7b06> <7b06> 5961 <7b07> <7b07> 14935 <7b08> <7b08> 1666 <7b0a> <7b0a> 5960 <7b0b> <7b0b> 5973 <7b0f> <7b0f> 5959 <7b11> <7b11> 2488 <7b14> <7b14> 14936 <7b18> <7b19> 5963 <7b1b> <7b1b> 3109 <7b1e> <7b1e> 5965 <7b20> <7b20> 1468 <7b25> <7b25> 2592 <7b26> <7b26> 3542 <7b27> <7b27> 14937 <7b28> <7b28> 5967 <7b2c> <7b2c> 2888 <7b31> <7b31> 14938 <7b33> <7b33> 5962 <7b35> <7b35> 5966 <7b36> <7b36> 5968 <7b39> <7b39> 2155 <7b45> <7b45> 5975 <7b46> <7b46> 3488 <7b47> <7b47> 14939 <7b48> <7b48> 3386 <7b49> <7b49> 3187 <7b4b> <7b4b> 1746 endcidrange 100 begincidrange <7b4c> <7b4c> 5974 <7b4d> <7b4d> 5972 <7b4e> <7b4e> 14940 <7b4f> <7b4f> 3401 <7b50> <7b50> 5969 <7b51> <7b51> 2972 <7b52> <7b52> 3189 <7b53> <7b53> 14173 <7b54> <7b54> 3188 <7b56> <7b56> 2150 <7b5d> <7b5d> 5993 <7b60> <7b60> 14941 <7b65> <7b65> 5977 <7b67> <7b67> 5979 <7b69> <7b69> 14942 <7b6c> <7b6c> 5982 <7b6d> <7b6d> 14943 <7b6e> <7b6e> 5983 <7b70> <7b71> 5980 <7b72> <7b72> 14944 <7b74> <7b74> 5978 <7b75> <7b75> 5976 <7b7a> <7b7a> 5970 <7b86> <7b86> 3615 <7b87> <7b87> 1365 <7b8b> <7b8b> 5990 <7b8d> <7b8d> 5987 <7b8f> <7b8f> 5992 <7b91> <7b91> 14945 <7b92> <7b92> 5991 <7b94> <7b94> 3369 <7b95> <7b95> 3763 <7b97> <7b97> 2185 <7b98> <7b98> 5985 <7b99> <7b99> 5994 <7b9a> <7b9a> 5989 <7b9c> <7b9c> 5988 <7b9d> <7b9d> 5984 <7b9e> <7b9e> 8589 <7b9f> <7b9f> 5986 <7ba1> <7ba1> 1541 <7baa> <7baa> 2939 <7bad> <7bad> 2721 <7baf> <7baf> 14946 <7bb1> <7bb1> 3382 <7bb4> <7bb4> 5999 <7bb8> <7bb8> 3384 <7bc0> <7bc0> 2693 <7bc1> <7bc1> 5996 <7bc4> <7bc4> 3427 <7bc6> <7bc6> 6000 <7bc7> <7bc7> 3619 <7bc9> <7bc9> 2969 <7bcb> <7bcb> 5995 <7bcc> <7bcc> 5997 <7bcf> <7bcf> 5998 <7bd7> <7bd7> 14947 <7bd9> <7bd9> 14948 <7bdd> <7bdd> 6001 <7be0> <7be0> 2288 <7be4> <7be4> 3230 <7be5> <7be5> 6006 <7be6> <7be6> 6005 <7be9> <7be9> 6002 <7bed> <7bed> 4060 <7bf3> <7bf3> 6011 <7bf6> <7bf6> 6015 <7bf7> <7bf7> 6012 <7c00> <7c00> 6008 <7c07> <7c07> 6009 <7c0b> <7c0b> 14949 <7c0d> <7c0d> 6014 <7c0f> <7c0f> 14950 <7c11> <7c11> 6003 <7c12> <7c12> 4330 <7c13> <7c13> 6010 <7c14> <7c14> 6004 <7c17> <7c17> 6013 <7c1e> <7c1e> 7739 <7c1f> <7c1f> 6019 <7c20> <7c20> 14951 <7c21> <7c21> 1542 <7c23> <7c23> 6016 <7c26> <7c26> 14952 <7c27> <7c27> 6017 <7c2a> <7c2a> 6018 <7c2b> <7c2b> 6021 <7c31> <7c31> 14953 <7c36> <7c36> 14954 <7c37> <7c37> 6020 <7c38> <7c38> 3466 <7c3d> <7c3d> 6022 <7c3e> <7c3e> 4036 <7c3f> <7c3f> 3645 <7c40> <7c40> 6027 <7c43> <7c43> 6024 <7c4c> <7c4c> 6023 <7c4d> <7c4d> 2678 <7c4f> <7c4f> 6026 <7c50> <7c50> 6028 endcidrange 100 begincidrange <7c51> <7c51> 14955 <7c54> <7c54> 6025 <7c56> <7c56> 6032 <7c58> <7c58> 6029 <7c59> <7c59> 14956 <7c5f> <7c5f> 6030 <7c60> <7c60> 6007 <7c64> <7c64> 6031 <7c65> <7c65> 6033 <7c67> <7c67> 14957 <7c6c> <7c6c> 6034 <7c6e> <7c6e> 14958 <7c70> <7c70> 14959 <7c73> <7c73> 3606 <7c75> <7c75> 6035 <7c7b> <7c7b> 14094 <7c7e> <7c7e> 3822 <7c81> <7c81> 1734 <7c82> <7c82> 1791 <7c83> <7c83> 6036 <7c89> <7c89> 3588 <7c8b> <7c8b> 2606 <7c8d> <7c8d> 3772 <7c90> <7c90> 6037 <7c92> <7c92> 3963 <7c95> <7c95> 3370 <7c97> <7c97> 2760 <7c98> <7c98> 3306 <7c9b> <7c9b> 2391 <7c9f> <7c9f> 1156 <7ca1> <7ca1> 6042 <7ca2> <7ca2> 6040 <7ca4> <7ca4> 6038 <7ca5> <7ca5> 1501 <7ca7> <7ca7> 2489 <7ca8> <7ca8> 6043 <7cab> <7cab> 6041 <7cad> <7cad> 6039 <7cae> <7cae> 6047 <7cb1> <7cb1> 6046 <7cb2> <7cb2> 6045 <7cb3> <7cb3> 6044 <7cb9> <7cb9> 6048 <7cbc> <7cbc> 14960 <7cbd> <7cbd> 6049 <7cbe> <7cbe> 2654 <7cbf> <7cbf> 14961 <7cc0> <7cc0> 6050 <7cc2> <7cc2> 6052 <7cc5> <7cc5> 6051 <7cc8> <7cc9> 14962 <7cca> <7cca> 1926 <7cce> <7cce> 2746 <7cd2> <7cd2> 6054 <7cd6> <7cd6> 3190 <7cd7> <7cd7> 14964 <7cd8> <7cd8> 6053 <7cd9> <7cd9> 14965 <7cdc> <7cdc> 6055 <7cdd> <7cdd> 14966 <7cde> <7cde> 3589 <7cdf> <7cdf> 2798 <7ce0> <7ce0> 2009 <7ce2> <7ce2> 6056 <7ce7> <7ce7> 3984 <7ceb> <7ceb> 14967 <7cef> <7cef> 6058 <7cf2> <7cf2> 6059 <7cf4> <7cf4> 6060 <7cf6> <7cf6> 6061 <7cf8> <7cf8> 2227 <7cfa> <7cfa> 6062 <7cfb> <7cfb> 1829 <7cfe> <7cfe> 1668 <7d00> <7d00> 1604 <7d02> <7d02> 6064 <7d04> <7d04> 3839 <7d05> <7d05> 2010 <7d06> <7d06> 6063 <7d07> <7d09> 14968 <7d0a> <7d0a> 6067 <7d0b> <7d0b> 3826 <7d0d> <7d0d> 3314 <7d10> <7d10> 3493 <7d13> <7d13> 14971 <7d14> <7d14> 2413 <7d15> <7d15> 6066 <7d17> <7d17> 2303 <7d18> <7d18> 2011 <7d19> <7d19> 2228 <7d1a> <7d1a> 1667 <7d1b> <7d1b> 3590 <7d1c> <7d1c> 6065 <7d1d> <7d1d> 14972 <7d20> <7d20> 2761 <7d21> <7d21> 3696 <7d22> <7d22> 2151 <7d23> <7d23> 14973 <7d2b> <7d2b> 2229 <7d2c> <7d2c> 3065 endcidrange 100 begincidrange <7d2e> <7d2e> 6070 <7d2f> <7d2f> 4007 <7d30> <7d30> 2121 <7d32> <7d32> 6071 <7d33> <7d33> 2568 <7d35> <7d35> 6073 <7d39> <7d39> 2490 <7d3a> <7d3a> 2080 <7d3f> <7d3f> 6072 <7d41> <7d41> 14974 <7d42> <7d42> 2356 <7d43> <7d43> 1906 <7d44> <7d44> 2762 <7d45> <7d45> 6068 <7d46> <7d46> 6074 <7d48> <7d48> 8591 <7d4b> <7d4b> 6069 <7d4c> <7d4c> 1830 <7d4e> <7d4e> 6077 <7d4f> <7d4f> 6081 <7d50> <7d50> 1857 <7d53> <7d53> 14975 <7d56> <7d56> 6076 <7d59> <7d59> 14976 <7d5b> <7d5b> 6085 <7d5c> <7d5c> 8592 <7d5d> <7d5d> 14977 <7d5e> <7d5e> 2012 <7d61> <7d61> 3927 <7d62> <7d62> 1152 <7d63> <7d63> 6082 <7d66> <7d66> 1669 <7d68> <7d68> 6079 <7d6e> <7d6e> 6080 <7d71> <7d71> 3191 <7d72> <7d72> 6078 <7d73> <7d73> 6075 <7d75> <7d75> 1414 <7d76> <7d76> 2696 <7d79> <7d79> 1884 <7d7a> <7d7a> 14978 <7d7d> <7d7d> 6087 <7d86> <7d86> 14979 <7d89> <7d89> 6084 <7d8b> <7d8c> 14980 <7d8f> <7d8f> 6086 <7d93> <7d93> 6083 <7d99> <7d99> 1831 <7d9a> <7d9a> 2835 <7d9b> <7d9b> 6088 <7d9c> <7d9c> 2800 <7d9f> <7d9f> 6101 <7da0> <7da0> 8594 <7da2> <7da2> 6097 <7da3> <7da3> 6091 <7dab> <7dab> 6095 <7dac> <7dac> 2342 <7dad> <7dad> 1185 <7dae> <7dae> 6090 <7daf> <7daf> 6098 <7db0> <7db0> 6102 <7db1> <7db1> 2013 <7db2> <7db2> 3810 <7db4> <7db4> 3058 <7db5> <7db5> 6092 <7db7> <7db7> 8593 <7db8> <7db8> 6100 <7dba> <7dba> 6089 <7dbb> <7dbb> 2940 <7dbd> <7dbd> 6094 <7dbe> <7dbe> 1153 <7dbf> <7dbf> 3798 <7dc7> <7dc7> 6093 <7dca> <7dca> 1747 <7dcb> <7dcb> 3456 <7dcc> <7dcc> 14982 <7dcf> <7dcf> 2799 <7dd1> <7dd1> 3992 <7dd2> <7dd2> 2425 <7dd5> <7dd5> 6141 <7dd6> <7dd6> 8595 <7dd8> <7dd8> 6103 <7dda> <7dda> 2722 <7ddc> <7ddc> 6099 <7ddd> <7ddd> 6104 <7dde> <7dde> 6106 <7de0> <7de0> 3093 <7de1> <7de1> 6109 <7de3> <7de3> 13322 <7de4> <7de4> 6105 <7de8> <7de8> 3620 <7de9> <7de9> 1543 <7deb> <7deb> 14983 <7dec> <7dec> 3799 <7def> <7def> 1186 <7df1> <7df1> 14984 <7df2> <7df2> 6108 <7df4> <7df4> 4037 <7df9> <7df9> 14985 <7dfb> <7dfb> 6107 endcidrange 100 begincidrange <7e01> <7e01> 1297 <7e04> <7e04> 3268 <7e05> <7e05> 6110 <7e08> <7e08> 14986 <7e09> <7e09> 6117 <7e0a> <7e0a> 6111 <7e0b> <7e0b> 6118 <7e11> <7e11> 14987 <7e12> <7e12> 6114 <7e15> <7e15> 14988 <7e1b> <7e1b> 3377 <7e1e> <7e1e> 2294 <7e1f> <7e1f> 6116 <7e20> <7e20> 14989 <7e21> <7e21> 6113 <7e22> <7e22> 6119 <7e23> <7e23> 6112 <7e26> <7e26> 2382 <7e2b> <7e2b> 3667 <7e2e> <7e2e> 2390 <7e31> <7e31> 6115 <7e32> <7e32> 6127 <7e35> <7e35> 6123 <7e37> <7e37> 6126 <7e39> <7e39> 6124 <7e3a> <7e3a> 6128 <7e3b> <7e3b> 6122 <7e3d> <7e3d> 6096 <7e3e> <7e3e> 2679 <7e41> <7e41> 3423 <7e43> <7e43> 6125 <7e46> <7e46> 6120 <7e47> <7e47> 14990 <7e48> <7e48> 14183 <7e4a> <7e4a> 2723 <7e4b> <7e4b> 1832 <7e4d> <7e4d> 2357 <7e52> <7e52> 8596 <7e54> <7e54> 2539 <7e55> <7e55> 2744 <7e56> <7e56> 6131 <7e59> <7e5a> 6133 <7e5d> <7e5d> 6130 <7e5e> <7e5e> 6132 <7e61> <7e61> 7697 <7e62> <7e62> 14991 <7e66> <7e66> 6121 <7e67> <7e67> 6129 <7e69> <7e69> 6137 <7e6a> <7e6a> 6136 <7e6b> <7e6b> 7671 <7e6d> <7e6d> 3752 <7e6e> <7e6e> 14992 <7e70> <7e70> 1793 <7e73> <7e73> 14993 <7e79> <7e79> 6135 <7e7b> <7e7b> 6139 <7e7c> <7e7c> 6138 <7e7d> <7e7d> 6142 <7e7f> <7e7f> 6144 <7e82> <7e82> 2186 <7e83> <7e83> 6140 <7e88> <7e89> 6145 <7e8a> <7e8a> 8359 <7e8c> <7e8c> 6147 <7e8d> <7e8d> 14994 <7e8e> <7e8e> 6153 <7e8f> <7e8f> 3125 <7e90> <7e90> 6149 <7e91> <7e91> 14995 <7e92> <7e92> 6148 <7e93> <7e94> 6150 <7e96> <7e96> 6152 <7e98> <7e98> 14996 <7e9b> <7e9c> 6154 <7f36> <7f36> 1544 <7f38> <7f38> 6156 <7f3a> <7f3a> 6157 <7f44> <7f44> 14997 <7f45> <7f45> 6158 <7f47> <7f47> 8597 <7f4c> <7f4e> 6159 <7f4f> <7f4f> 14998 <7f50> <7f51> 6162 <7f52> <7f53> 14999 <7f54> <7f54> 6165 <7f55> <7f55> 6164 <7f58> <7f58> 6166 <7f5f> <7f60> 6167 <7f61> <7f61> 15001 <7f67> <7f67> 6171 <7f68> <7f69> 6169 <7f6a> <7f6a> 2129 <7f6b> <7f6b> 1833 <7f6e> <7f6e> 2964 <7f70> <7f70> 3399 <7f72> <7f72> 2426 <7f75> <7f75> 3331 <7f77> <7f77> 3457 <7f78> <7f78> 6172 endcidrange 100 begincidrange <7f79> <7f79> 4918 <7f82> <7f82> 6173 <7f83> <7f83> 6175 <7f85> <7f85> 3919 <7f86> <7f86> 6174 <7f87> <7f87> 6177 <7f88> <7f88> 6176 <7f8a> <7f8a> 3901 <7f8c> <7f8c> 6178 <7f8e> <7f8e> 3474 <7f91> <7f91> 15002 <7f94> <7f94> 6179 <7f9a> <7f9a> 6182 <7f9d> <7f9d> 6181 <7f9e> <7f9e> 6180 <7fa1> <7fa1> 8598 <7fa3> <7fa3> 6183 <7fa4> <7fa4> 1800 <7fa8> <7fa8> 2724 <7fa9> <7fa9> 1627 <7fae> <7fae> 6187 <7faf> <7faf> 6184 <7fb2> <7fb2> 6185 <7fb6> <7fb6> 6188 <7fb8> <7fb8> 6189 <7fb9> <7fb9> 6186 <7fbd> <7fbd> 1227 <7fbf> <7fbf> 15003 <7fc1> <7fc1> 1319 <7fc5> <7fc6> 6191 <7fca> <7fca> 6193 <7fcc> <7fcc> 3916 <7fce> <7fce> 15004 <7fd2> <7fd2> 2358 <7fd4> <7fd4> 6195 <7fd5> <7fd5> 6194 <7fdf> <7fdf> 15005 <7fe0> <7fe0> 2607 <7fe1> <7fe1> 6196 <7fe5> <7fe5> 15006 <7fe6> <7fe6> 6197 <7fe9> <7fe9> 6198 <7feb> <7feb> 1569 <7fec> <7fec> 15007 <7fee> <7fef> 15008 <7ff0> <7ff0> 1545 <7ff3> <7ff3> 6199 <7ff9> <7ff9> 6200 <7ffa> <7ffa> 15010 <7ffb> <7ffb> 3723 <7ffc> <7ffc> 3917 <8000> <8000> 3902 <8001> <8001> 4061 <8002> <8002> 14099 <8003> <8003> 2015 <8004> <8004> 6203 <8005> <8005> 2304 <8006> <8006> 6202 <800b> <800b> 6204 <800c> <800c> 2261 <800e> <800e> 15011 <8010> <8010> 2865 <8011> <8011> 15012 <8012> <8012> 6205 <8014> <8014> 15013 <8015> <8015> 2014 <8017> <8017> 3811 <8018> <8019> 6206 <801c> <801c> 6208 <8021> <8021> 6209 <8024> <8024> 15014 <8026> <8026> 15015 <8028> <8028> 6210 <8033> <8033> 2262 <8036> <8036> 3833 <803a> <803a> 15016 <803b> <803b> 6212 <803c> <803c> 15017 <803d> <803d> 2941 <803f> <803f> 6211 <8046> <8046> 6214 <804a> <804a> 6213 <8052> <8052> 6215 <8056> <8056> 2655 <8058> <8058> 6216 <805a> <805a> 6217 <805e> <805e> 3593 <805f> <805f> 6218 <8060> <8060> 15018 <8061> <8061> 2801 <8062> <8062> 6219 <8068> <8068> 6220 <806f> <806f> 4038 <8070> <8070> 6223 <8071> <8071> 15019 <8072> <8072> 6222 <8073> <8073> 6221 <8074> <8074> 3020 <8075> <8075> 15020 <8076> <8076> 6224 endcidrange 100 begincidrange <8077> <8077> 2540 <8079> <8079> 6225 <807d> <807d> 6226 <807e> <807e> 4062 <807f> <807f> 6227 <8084> <8084> 6228 <8085> <8085> 6230 <8086> <8086> 6229 <8087> <8087> 3385 <8089> <8089> 3281 <808b> <808b> 4068 <808c> <808c> 3389 <8093> <8093> 6232 <8096> <8096> 2491 <8098> <8098> 3484 <809a> <809a> 6233 <809b> <809b> 6231 <809d> <809d> 1546 <809e> <809e> 15021 <80a1> <80a1> 1928 <80a2> <80a2> 2230 <80a5> <80a5> 3458 <80a6> <80a6> 15022 <80a9> <80a9> 1886 <80aa> <80aa> 3697 <80ab> <80ab> 15023 <80ac> <80ac> 6236 <80ad> <80ad> 6234 <80af> <80af> 2016 <80b1> <80b1> 2017 <80b2> <80b2> 1197 <80b4> <80b4> 2136 <80ba> <80ba> 3343 <80c3> <80c3> 1187 <80c4> <80c4> 6241 <80c6> <80c6> 2942 <80cc> <80cc> 3342 <80ce> <80ce> 2875 <80d6> <80d6> 6243 <80d7> <80d8> 15024 <80d9> <80d9> 6239 <80da> <80da> 6242 <80db> <80db> 6237 <80dd> <80dd> 6240 <80de> <80de> 3668 <80e1> <80e1> 1929 <80e4> <80e4> 1217 <80e5> <80e5> 6238 <80ef> <80ef> 6245 <80f1> <80f1> 6246 <80f4> <80f4> 3217 <80f8> <80f8> 1715 <80fc> <80fc> 6257 <80fd> <80fd> 3315 <8102> <8102> 2231 <8105> <8105> 1716 <8106> <8106> 2668 <8107> <8107> 4076 <8108> <8108> 3770 <8109> <8109> 6244 <810a> <810a> 2680 <8116> <8116> 15026 <8118> <8118> 15027 <811a> <811a> 1645 <811b> <811b> 6247 <8123> <8123> 6249 <8129> <8129> 6248 <812b> <812b> 13913 <812f> <812f> 6250 <8131> <8131> 2916 <8133> <8133> 3316 <8139> <8139> 3021 <813a> <813a> 15028 <813e> <813e> 6254 <8141> <8141> 14194 <8146> <8146> 6253 <814a> <814a> 15029 <814b> <814b> 6251 <814c> <814c> 15030 <814e> <814e> 2587 <8150> <8150> 3543 <8151> <8151> 6256 <8153> <8153> 6255 <8154> <8154> 2018 <8155> <8155> 4089 <815f> <815f> 6272 <8165> <8166> 6260 <816b> <816b> 2332 <816e> <816e> 6259 <8170> <8170> 2058 <8171> <8171> 6258 <8174> <8174> 6262 <8178> <8178> 3022 <8179> <8179> 3570 <817a> <817a> 2725 <817f> <817f> 2876 <8180> <8180> 6266 <8181> <8181> 15031 <8182> <8182> 6267 <8183> <8183> 6263 endcidrange 100 begincidrange <8184> <8184> 15032 <8188> <8188> 6264 <818a> <818a> 6265 <818f> <818f> 2019 <8193> <8193> 6273 <8195> <8195> 6269 <819a> <819a> 3544 <819c> <819c> 3738 <819d> <819d> 3482 <81a0> <81a0> 6268 <81a3> <81a3> 6271 <81a4> <81a4> 6270 <81a8> <81a8> 3698 <81a9> <81a9> 6274 <81b0> <81b0> 6275 <81b3> <81b3> 2745 <81b4> <81b4> 15033 <81b5> <81b5> 6276 <81b8> <81b8> 6278 <81ba> <81ba> 6282 <81bd> <81bd> 6279 <81be> <81be> 6277 <81bf> <81bf> 3317 <81c0> <81c0> 6280 <81c2> <81c2> 6281 <81c6> <81c6> 1330 <81c8> <81c8> 6288 <81c9> <81c9> 6283 <81cd> <81cd> 6284 <81cf> <81cf> 15034 <81d1> <81d1> 6285 <81d3> <81d3> 2817 <81d8> <81d8> 6287 <81d9> <81d9> 6286 <81da> <81da> 6289 <81df> <81e0> 6290 <81e3> <81e3> 2569 <81e5> <81e5> 1385 <81e7> <81e7> 6292 <81e8> <81e8> 3999 <81ea> <81ea> 2263 <81ed> <81ed> 2359 <81f3> <81f3> 2232 <81f4> <81f4> 2965 <81f9> <81f9> 15035 <81fa> <81fb> 6293 <81fc> <81fc> 1235 <81fe> <81fe> 6295 <8201> <8202> 6296 <8203> <8203> 15036 <8205> <8205> 6298 <8207> <8207> 6299 <8208> <8208> 1717 <8209> <8209> 5039 <820a> <820a> 6300 <820c> <820c> 2697 <820d> <820d> 6301 <820e> <820e> 2295 <8210> <8210> 6302 <8212> <8212> 4105 <8216> <8216> 6303 <8217> <8217> 3630 <8218> <8218> 1560 <821b> <821b> 2726 <821c> <821c> 2402 <821e> <821e> 3555 <821f> <821f> 2360 <8221> <8221> 15037 <8229> <8229> 6304 <822a> <822a> 2020 <822b> <822b> 6305 <822c> <822c> 3424 <822e> <822e> 6319 <8232> <8232> 15038 <8233> <8233> 6307 <8234> <8234> 15039 <8235> <8235> 2857 <8236> <8236> 3371 <8237> <8237> 1907 <8238> <8238> 6306 <8239> <8239> 2727 <8240> <8240> 6308 <8246> <8246> 15040 <8247> <8247> 3094 <824b> <824b> 15041 <824f> <824f> 15042 <8258> <8258> 6310 <8259> <8259> 6309 <825a> <825a> 6312 <825d> <825d> 6311 <825f> <825f> 6313 <8262> <8262> 6315 <8264> <8264> 6314 <8266> <8266> 1547 <8268> <8268> 6316 <826a> <826b> 6317 <826e> <826e> 2081 <826f> <826f> 3985 <8271> <8271> 6320 <8272> <8272> 2541 endcidrange 100 begincidrange <8276> <8276> 1298 <8277> <8278> 6321 <8279> <8279> 14197 <827e> <827e> 6323 <828b> <828b> 1206 <828d> <828d> 6324 <828e> <828e> 15043 <8292> <8292> 6325 <8299> <8299> 3545 <829d> <829d> 2291 <829f> <829f> 6327 <82a5> <82a5> 1415 <82a6> <82a6> 1142 <82ab> <82ab> 6326 <82ac> <82ac> 6329 <82ad> <82ad> 3332 <82ae> <82ae> 15044 <82af> <82af> 2570 <82b1> <82b1> 1366 <82b3> <82b3> 3669 <82b7> <82b7> 15045 <82b8> <82b8> 1843 <82b9> <82b9> 1748 <82bb> <82bb> 6328 <82bd> <82bd> 1386 <82be> <82be> 15046 <82c5> <82c5> 1503 <82c6> <82c6> 15047 <82d1> <82d1> 1299 <82d2> <82d2> 6333 <82d3> <82d3> 4018 <82d4> <82d4> 2877 <82d7> <82d7> 3510 <82d9> <82d9> 6345 <82db> <82db> 1367 <82dc> <82dc> 6343 <82de> <82de> 6341 <82df> <82df> 6332 <82e1> <82e1> 6330 <82e3> <82e3> 6331 <82e5> <82e5> 2319 <82e6> <82e6> 1764 <82e7> <82e7> 2997 <82eb> <82eb> 3241 <82f1> <82f1> 1267 <82f3> <82f3> 6335 <82f4> <82f4> 6334 <82f9> <82f9> 6340 <82fa> <82fa> 6336 <82fb> <82fb> 6339 <82fe> <82fe> 15048 <8301> <8301> 8600 <8302> <8302> 3804 <8303> <8303> 6338 <8304> <8304> 1368 <8305> <8305> 1499 <8306> <8306> 6342 <8309> <8309> 6344 <830e> <830e> 1834 <8316> <8316> 6348 <8317> <8318> 6357 <831c> <831c> 1135 <8323> <8323> 6365 <8328> <8328> 1205 <832b> <832b> 6356 <832f> <832f> 6355 <8331> <8331> 6350 <8332> <8332> 6349 <8334> <8334> 6347 <8335> <8335> 6346 <8336> <8336> 2977 <8338> <8338> 2907 <8339> <8339> 6352 <8340> <8340> 6351 <8343> <8343> 15049 <8345> <8345> 6354 <8349> <8349> 2802 <834a> <834a> 1835 <834f> <834f> 1251 <8350> <8350> 6353 <8351> <8351> 15050 <8352> <8352> 2021 <8355> <8355> 15051 <8358> <8358> 2803 <8362> <8362> 8601 <8373> <8373> 6371 <8375> <8375> 6372 <8377> <8377> 1369 <837b> <837b> 1326 <837c> <837c> 6369 <837f> <837f> 8602 <8385> <8385> 6359 <8386> <8386> 15052 <8387> <8387> 6367 <8389> <8389> 6374 <838a> <838a> 6368 <838d> <838d> 15053 <838e> <838e> 6366 <8392> <8392> 15054 <8393> <8393> 6337 endcidrange 100 begincidrange <8396> <8396> 6364 <8398> <8398> 15055 <839a> <839a> 6360 <839e> <839e> 1548 <839f> <839f> 6362 <83a0> <83a0> 6373 <83a2> <83a2> 6363 <83a8> <83a8> 6375 <83a9> <83a9> 15056 <83aa> <83aa> 6361 <83ab> <83ab> 3378 <83b1> <83b1> 3923 <83b5> <83b5> 6370 <83bd> <83bd> 6392 <83bf> <83c0> 15057 <83c1> <83c1> 6384 <83c5> <83c5> 2625 <83c7> <83c7> 8603 <83ca> <83ca> 1632 <83cc> <83cc> 1749 <83ce> <83ce> 6379 <83d3> <83d3> 1371 <83d6> <83d6> 2492 <83d8> <83d8> 6382 <83dc> <83dc> 2122 <83df> <83df> 3147 <83e0> <83e0> 6387 <83e9> <83e9> 3646 <83ea> <83ea> 15059 <83eb> <83eb> 6378 <83ef> <83ef> 1370 <83f0> <83f0> 1930 <83f1> <83f1> 3483 <83f2> <83f2> 6388 <83f4> <83f4> 6376 <83f6> <83f6> 8604 <83f7> <83f7> 6385 <83fb> <83fb> 6395 <83fd> <83fd> 6380 <8403> <8403> 6381 <8404> <8404> 3218 <8407> <8407> 6386 <840a> <840a> 7807 <840b> <840b> 6383 <840c> <840c> 3670 <840d> <840d> 6389 <840e> <840e> 1188 <840f> <840f> 15060 <8411> <8411> 15061 <8413> <8413> 6377 <8420> <8420> 6391 <8422> <8422> 6390 <8429> <8429> 3361 <842a> <842a> 6397 <842c> <842c> 6408 <8431> <8431> 1500 <8435> <8435> 6411 <8438> <8438> 6393 <843c> <843c> 6398 <843d> <843d> 3928 <8446> <8446> 6407 <8448> <8448> 8605 <8449> <8449> 3903 <844a> <844a> 15062 <844e> <844e> 3954 <8457> <8457> 2998 <845b> <845b> 1481 <8461> <8461> 3556 <8462> <8462> 6413 <8463> <8463> 3193 <8466> <8466> 1141 <8469> <8469> 6406 <846b> <846b> 6402 <846c> <846c> 2804 <846d> <846d> 6396 <846e> <846e> 6404 <846f> <846f> 6409 <8471> <8471> 3298 <8475> <8475> 1134 <8476> <8476> 15063 <8477> <8477> 6401 <8479> <8479> 6410 <847a> <847a> 3562 <8482> <8482> 6405 <8484> <8484> 6400 <848b> <848b> 2493 <8490> <8490> 2361 <8494> <8494> 2264 <8499> <8499> 3812 <849c> <849c> 3513 <849f> <849f> 6416 <84a1> <84a1> 6425 <84a8> <84a8> 15064 <84ad> <84ad> 6403 <84af> <84af> 15065 <84b2> <84b2> 1493 <84b4> <84b4> 8606 <84b8> <84b8> 2528 <84b9> <84b9> 6414 <84bb> <84bb> 6419 endcidrange 100 begincidrange <84bc> <84bc> 2805 <84bf> <84bf> 6415 <84c0> <84c0> 15066 <84c1> <84c1> 6422 <84c2> <84c2> 15067 <84c4> <84c4> 2973 <84c6> <84c6> 6423 <84c9> <84c9> 3904 <84ca> <84ca> 6412 <84cb> <84cb> 1430 <84cd> <84cd> 6418 <84d0> <84d0> 6421 <84d1> <84d1> 3768 <84d6> <84d6> 6424 <84d9> <84d9> 6417 <84da> <84da> 6420 <84dc> <84dc> 8363 <84ec> <84ec> 3671 <84ee> <84ee> 4039 <84f0> <84f0> 15068 <84f4> <84f4> 6428 <84fc> <84fc> 6435 <84fd> <84fd> 15069 <84ff> <84ff> 6427 <8500> <8500> 2287 <8506> <8506> 6394 <850c> <850c> 15070 <8511> <8511> 3614 <8513> <8513> 3758 <8514> <8514> 6434 <8515> <8515> 6433 <8517> <8518> 6429 <851a> <851a> 1240 <851f> <851f> 6432 <8521> <8521> 6426 <8523> <8523> 7706 <8526> <8526> 3057 <852c> <852c> 6431 <852d> <852d> 1218 <8534> <8534> 15071 <8535> <8535> 2818 <853d> <853d> 3603 <853e> <853e> 7861 <8540> <8540> 6436 <8541> <8541> 6440 <8543> <8543> 3437 <8548> <8548> 6439 <8549> <8549> 2494 <854a> <854a> 2293 <854b> <854b> 6442 <854e> <854e> 1718 <8553> <8553> 8607 <8555> <8555> 6443 <8557> <8557> 3563 <8558> <8558> 6438 <8559> <8559> 8608 <855a> <855a> 6399 <855e> <855e> 15072 <8563> <8563> 6437 <8568> <8568> 4085 <8569> <8569> 3194 <856a> <856a> 3557 <856b> <856b> 8609 <856d> <856d> 6450 <8577> <8577> 6456 <857e> <857e> 6457 <8580> <8580> 6444 <8584> <8584> 3372 <8587> <8587> 6454 <8588> <8588> 6446 <858a> <858a> 6448 <858f> <858f> 15073 <8590> <8590> 6458 <8591> <8591> 6447 <8594> <8594> 6451 <8597> <8597> 1300 <8599> <8599> 3261 <859b> <859b> 6452 <859c> <859c> 6455 <85a4> <85a4> 6445 <85a6> <85a6> 2728 <85a8> <85a8> 6449 <85a9> <85a9> 2165 <85aa> <85aa> 2571 <85ab> <85ab> 1798 <85ac> <85ac> 3840 <85ad> <85ad> 15076 <85ae> <85ae> 3845 <85af> <85af> 2428 <85b0> <85b0> 8611 <85b7> <85b7> 15074 <85b9> <85b9> 6462 <85ba> <85ba> 6460 <85c1> <85c1> 4084 <85c9> <85c9> 6459 <85cd> <85cd> 3935 <85ce> <85ce> 15075 <85cf> <85cf> 6461 <85d0> <85d0> 6463 <85d5> <85d5> 6464 endcidrange 100 begincidrange <85dc> <85dc> 6467 <85dd> <85dd> 6465 <85e4> <85e4> 3195 <85e5> <85e5> 6466 <85e9> <85e9> 3425 <85ea> <85ea> 6453 <85f4> <85f4> 14208 <85f7> <85f7> 2429 <85f9> <85f9> 6468 <85fa> <85fa> 6473 <85fb> <85fb> 2806 <85fe> <85fe> 6472 <8602> <8602> 6441 <8606> <8606> 6474 <8607> <8607> 2763 <860a> <860a> 6469 <860b> <860b> 6471 <8612> <8612> 15077 <8613> <8613> 6470 <8616> <8616> 5328 <8617> <8617> 5313 <861a> <861a> 6476 <8622> <8622> 6475 <8629> <8629> 15078 <862d> <862d> 3936 <862f> <862f> 5809 <8630> <8630> 6477 <863f> <863f> 6478 <864d> <864d> 6479 <864e> <864e> 1931 <8650> <8650> 1646 <8652> <8652> 15079 <8654> <8654> 6481 <8655> <8655> 4244 <865a> <865a> 1679 <865b> <865b> 13336 <865c> <865c> 3970 <865e> <865e> 1771 <865f> <865f> 6482 <8663> <8663> 15080 <8667> <8667> 6483 <866b> <866b> 2988 <866c> <866c> 15081 <866f> <866f> 15082 <8671> <8671> 6484 <8679> <8679> 3282 <867a> <867a> 15083 <867b> <867b> 1150 <867d> <867d> 14214 <868a> <868a> 1379 <868b> <868c> 6489 <868d> <868d> 15084 <8691> <8691> 15085 <8693> <8693> 6485 <8695> <8695> 2187 <8698> <8698> 15086 <86a3> <86a3> 6486 <86a4> <86a4> 3320 <86a7> <86a8> 15087 <86a9> <86aa> 6487 <86ab> <86ab> 6498 <86af> <86af> 6492 <86b0> <86b0> 6495 <86b6> <86b6> 6491 <86c4> <86c4> 6493 <86c6> <86c6> 6494 <86c7> <86c7> 2308 <86c9> <86c9> 6496 <86cb> <86cb> 2943 <86cd> <86cd> 1836 <86ce> <86ce> 1440 <86d4> <86d4> 6499 <86d9> <86d9> 1437 <86db> <86db> 6504 <86de> <86de> 6500 <86df> <86df> 6503 <86e4> <86e4> 3406 <86e9> <86e9> 6501 <86ec> <86ec> 6502 <86ed> <86ed> 3514 <86ee> <86ee> 3438 <86ef> <86ef> 6505 <86f8> <86f8> 2909 <86f9> <86f9> 6515 <86fa> <86fa> 15089 <86fb> <86fb> 6511 <86fd> <86fd> 15090 <86fe> <86fe> 1387 <8700> <8700> 6509 <8702> <8702> 3672 <8703> <8703> 6510 <8706> <8706> 6507 <8708> <8708> 6508 <8709> <8709> 6513 <870a> <870a> 6516 <870b> <870b> 15091 <870d> <870d> 6514 <8711> <8711> 6512 <8712> <8712> 6506 <8713> <8713> 15092 endcidrange 100 begincidrange <8718> <8718> 2966 <8719> <8719> 15093 <871a> <871a> 6523 <871c> <871c> 3766 <871e> <871e> 15094 <8725> <8725> 6521 <8728> <8728> 15095 <8729> <8729> 6522 <8734> <8734> 6517 <8737> <8737> 6519 <873b> <873b> 6520 <873e> <873e> 15096 <873f> <873f> 6518 <8749> <8749> 2698 <874b> <874b> 4063 <874c> <874c> 6527 <874e> <874e> 6528 <8753> <8753> 6534 <8755> <8755> 2544 <8757> <8757> 6530 <8759> <8759> 6533 <875f> <875f> 6525 <8760> <8760> 6524 <8763> <8763> 6535 <8766> <8766> 1372 <8768> <8768> 6531 <876a> <876a> 6536 <876e> <876e> 6532 <8771> <8771> 15097 <8774> <8774> 6529 <8776> <8776> 3023 <8778> <8778> 6526 <877f> <877f> 3358 <8782> <8782> 6540 <8788> <8788> 15098 <878d> <878d> 3877 <8799> <8799> 15099 <879f> <879f> 6539 <87a2> <87a2> 6538 <87ab> <87ab> 6547 <87ac> <87ad> 15100 <87af> <87af> 6541 <87b3> <87b3> 6549 <87b5> <87b5> 15102 <87ba> <87ba> 3920 <87bb> <87bb> 6552 <87bd> <87bd> 6543 <87c0> <87c0> 6544 <87c4> <87c4> 6548 <87c6> <87c6> 6551 <87c7> <87c7> 6550 <87cb> <87cb> 6542 <87d0> <87d0> 6545 <87d2> <87d2> 6562 <87d6> <87d6> 15103 <87e0> <87e0> 6555 <87eb> <87eb> 15104 <87ec> <87ec> 7715 <87ed> <87ed> 15105 <87ef> <87ef> 6553 <87f2> <87f2> 6554 <87f5> <87f5> 15421 <87f6> <87f7> 6559 <87f9> <87f9> 1416 <87fb> <87fb> 1628 <87fe> <87fe> 6558 <8801> <8801> 15106 <8803> <8803> 15107 <8805> <8805> 6537 <8806> <8806> 15108 <8807> <8807> 8614 <880b> <880b> 15109 <880d> <880d> 6557 <880e> <880e> 6561 <880f> <880f> 6556 <8811> <8811> 6563 <8814> <8814> 15110 <8815> <8815> 6565 <8816> <8816> 6564 <881c> <881c> 15111 <881f> <881f> 7813 <8821> <8821> 6567 <8822> <8822> 6566 <8823> <8823> 6497 <8827> <8827> 6571 <8831> <8831> 6568 <8836> <8836> 6569 <8839> <8839> 6570 <883b> <883b> 6572 <8840> <8840> 1858 <8842> <8842> 6574 <8844> <8844> 6573 <8846> <8846> 2362 <884c> <884c> 2022 <884d> <884d> 5412 <8852> <8852> 6575 <8853> <8853> 2395 <8856> <8856> 15112 <8857> <8857> 1431 <8859> <8859> 6576 endcidrange 100 begincidrange <885b> <885b> 1268 <885d> <885d> 2495 <885e> <885e> 6577 <885f> <885f> 15113 <8861> <8861> 2023 <8862> <8862> 6578 <8863> <8863> 1189 <8864> <8864> 15114 <8868> <8868> 3503 <886b> <886b> 6579 <8870> <8870> 2608 <8872> <8872> 6586 <8875> <8875> 6583 <8877> <8877> 2989 <887d> <887d> 6584 <887e> <887e> 6581 <887f> <887f> 1750 <8881> <8881> 6580 <8882> <8882> 6587 <8888> <8888> 1804 <888b> <888b> 2878 <888d> <888d> 6593 <8892> <8892> 6589 <8896> <8896> 2837 <8897> <8897> 6588 <8898> <8898> 15115 <8899> <8899> 6591 <889e> <889e> 6582 <88a2> <88a2> 6592 <88a4> <88a4> 6594 <88aa> <88aa> 15116 <88ab> <88ab> 3459 <88ae> <88ae> 6590 <88b0> <88b0> 6595 <88b1> <88b1> 6597 <88b4> <88b4> 1927 <88b5> <88b5> 6585 <88b7> <88b7> 1157 <88bd> <88be> 15117 <88bf> <88bf> 6596 <88c1> <88c1> 2123 <88c2> <88c2> 4030 <88c3> <88c4> 6598 <88c5> <88c5> 2807 <88c6> <88c6> 14217 <88ca> <88ca> 15119 <88cf> <88cf> 3946 <88d2> <88d2> 15120 <88d4> <88d4> 6600 <88d5> <88d5> 3871 <88d8> <88d9> 6601 <88db> <88db> 15121 <88dc> <88dc> 3636 <88dd> <88dd> 6603 <88df> <88df> 2096 <88e1> <88e1> 3947 <88e8> <88e8> 6608 <88f0> <88f1> 15122 <88f2> <88f2> 6609 <88f3> <88f3> 2496 <88f4> <88f4> 6607 <88f5> <88f5> 8615 <88f8> <88f8> 3921 <88f9> <88f9> 6604 <88fc> <88fc> 6606 <88fd> <88fd> 2657 <88fe> <88fe> 2628 <8902> <8902> 6605 <8904> <8904> 6610 <8906> <8906> 15124 <8907> <8907> 3571 <890a> <890a> 6612 <890c> <890c> 6611 <8910> <8910> 1482 <8912> <8912> 3673 <8913> <8913> 6613 <8918> <891a> 15125 <891c> <891c> 8360 <891d> <891d> 6625 <891e> <891e> 6615 <8925> <8925> 6616 <8927> <8927> 15128 <892a> <892b> 6617 <8930> <8930> 15129 <8936> <8936> 6622 <8938> <8938> 6623 <893b> <893b> 6621 <893e> <893e> 15130 <8941> <8941> 6619 <8943> <8943> 6614 <8944> <8944> 6620 <894c> <894c> 6624 <894d> <894d> 7120 <8956> <8956> 1320 <895e> <895e> 6627 <895f> <895f> 1751 <8960> <8960> 6626 <8964> <8964> 6629 <8966> <8966> 6628 <896a> <896a> 6631 endcidrange 100 begincidrange <896d> <896d> 6630 <896f> <896f> 6632 <8972> <8972> 2363 <8974> <8974> 6633 <8977> <8977> 6634 <897b> <897b> 15131 <897e> <897e> 6635 <897f> <897f> 2658 <8980> <8980> 13870 <8981> <8981> 3905 <8983> <8983> 6636 <8986> <8986> 3572 <8987> <8987> 3324 <8988> <8988> 6637 <898a> <898a> 6638 <898b> <898b> 1887 <898f> <898f> 1606 <8993> <8993> 6639 <8996> <8996> 2233 <8997> <8997> 3319 <8998> <8998> 6640 <899a> <899a> 1454 <89a1> <89a1> 6641 <89a6> <89a6> 6643 <89a7> <89a7> 3937 <89a9> <89a9> 6642 <89aa> <89aa> 2572 <89ac> <89ac> 6644 <89af> <89af> 6645 <89b2> <89b2> 6646 <89b3> <89b3> 1549 <89ba> <89ba> 6647 <89bd> <89bd> 6648 <89bf> <89c0> 6649 <89d2> <89d2> 1455 <89d4> <89d4> 15132 <89d6> <89d6> 15133 <89da> <89da> 6651 <89dc> <89dd> 6652 <89e3> <89e3> 1394 <89e5> <89e5> 15134 <89e6> <89e6> 2542 <89e7> <89e7> 6654 <89f1> <89f1> 15135 <89f4> <89f4> 6655 <89f8> <89f8> 6656 <8a00> <8a00> 1908 <8a01> <8a01> 13756 <8a02> <8a02> 3095 <8a03> <8a03> 6657 <8a07> <8a07> 15136 <8a08> <8a08> 1837 <8a0a> <8a0a> 2588 <8a0c> <8a0c> 6660 <8a0e> <8a0e> 3196 <8a0f> <8a0f> 15137 <8a10> <8a10> 6659 <8a12> <8a12> 8616 <8a13> <8a13> 1799 <8a15> <8a15> 15138 <8a16> <8a16> 6658 <8a17> <8a17> 2903 <8a18> <8a18> 1607 <8a1b> <8a1b> 6661 <8a1d> <8a1d> 6662 <8a1f> <8a1f> 2497 <8a22> <8a22> 15139 <8a23> <8a23> 1859 <8a25> <8a25> 6663 <8a2a> <8a2a> 3674 <8a2d> <8a2d> 2691 <8a31> <8a31> 1680 <8a33> <8a33> 3841 <8a34> <8a34> 2764 <8a36> <8a36> 6664 <8a37> <8a37> 8617 <8a3a> <8a3a> 2573 <8a3b> <8a3b> 2990 <8a3c> <8a3c> 2498 <8a41> <8a41> 6665 <8a46> <8a46> 6668 <8a48> <8a48> 6669 <8a4e> <8a4e> 15140 <8a50> <8a50> 2094 <8a51> <8a51> 2850 <8a52> <8a52> 6667 <8a54> <8a54> 2499 <8a55> <8a55> 3504 <8a5b> <8a5b> 6666 <8a5e> <8a5e> 2234 <8a60> <8a60> 1269 <8a62> <8a62> 6673 <8a63> <8a63> 1838 <8a66> <8a66> 2236 <8a69> <8a69> 2235 <8a6b> <8a6b> 4083 <8a6c> <8a6c> 6672 <8a6d> <8a6d> 6671 <8a6e> <8a6e> 2729 <8a70> <8a70> 1639 endcidrange 100 begincidrange <8a71> <8a71> 4073 <8a72> <8a72> 1432 <8a73> <8a73> 2500 <8a79> <8a79> 8618 <8a7c> <8a7c> 6670 <8a7f> <8a7f> 15141 <8a82> <8a82> 6675 <8a84> <8a84> 6676 <8a85> <8a85> 6674 <8a87> <8a87> 1932 <8a89> <8a89> 3882 <8a8c> <8a8c> 2237 <8a8d> <8a8d> 3293 <8a91> <8a91> 6679 <8a93> <8a93> 2660 <8a95> <8a95> 2944 <8a98> <8a98> 3872 <8a9a> <8a9a> 6682 <8a9e> <8a9e> 1952 <8aa0> <8aa0> 2659 <8aa1> <8aa1> 6678 <8aa3> <8aa3> 6683 <8aa4> <8aa4> 1953 <8aa5> <8aa6> 6680 <8aa7> <8aa7> 8619 <8aa8> <8aa8> 6677 <8aaa> <8aaa> 13880 <8aac> <8aac> 2694 <8aad> <8aad> 3233 <8ab0> <8ab0> 2925 <8ab2> <8ab2> 1373 <8ab9> <8ab9> 3460 <8abc> <8abc> 1629 <8abe> <8abe> 8620 <8abf> <8abf> 3024 <8ac2> <8ac2> 6686 <8ac4> <8ac4> 6684 <8ac7> <8ac7> 2954 <8acb> <8acb> 2661 <8acc> <8acc> 1550 <8acd> <8acd> 6685 <8acf> <8acf> 2593 <8ad2> <8ad2> 3986 <8ad6> <8ad6> 4070 <8ada> <8ada> 6687 <8adb> <8adb> 6698 <8adc> <8adc> 3025 <8ade> <8ade> 6697 <8adf> <8adf> 8621 <8ae0> <8ae0> 6694 <8ae1> <8ae1> 6702 <8ae2> <8ae2> 6695 <8ae4> <8ae4> 6691 <8ae6> <8ae6> 3096 <8ae7> <8ae7> 6690 <8aeb> <8aeb> 6688 <8aed> <8aed> 3851 <8aee> <8aee> 2238 <8af1> <8af1> 6692 <8af3> <8af3> 6689 <8af4> <8af4> 15142 <8af6> <8af6> 8623 <8af7> <8af7> 6696 <8af8> <8af8> 2430 <8afa> <8afa> 1909 <8afe> <8afe> 2906 <8b00> <8b00> 3699 <8b01> <8b01> 1276 <8b02> <8b02> 1190 <8b04> <8b04> 3197 <8b07> <8b07> 6700 <8b0c> <8b0c> 6699 <8b0e> <8b0e> 3262 <8b10> <8b10> 6704 <8b14> <8b14> 6693 <8b16> <8b16> 6703 <8b17> <8b17> 6705 <8b19> <8b19> 1888 <8b1a> <8b1a> 6701 <8b1b> <8b1b> 2024 <8b1d> <8b1d> 2305 <8b1f> <8b1f> 15143 <8b20> <8b20> 6706 <8b21> <8b21> 3906 <8b26> <8b26> 6709 <8b28> <8b28> 6712 <8b2b> <8b2b> 6710 <8b2c> <8b2c> 3495 <8b33> <8b33> 6707 <8b37> <8b37> 15144 <8b39> <8b39> 1752 <8b3e> <8b3e> 6711 <8b41> <8b41> 6713 <8b43> <8b44> 15145 <8b49> <8b49> 6717 <8b4c> <8b4c> 6714 <8b4e> <8b4e> 6716 <8b4f> <8b4f> 6715 <8b53> <8b53> 8624 <8b54> <8b54> 15147 endcidrange 100 begincidrange <8b56> <8b56> 6718 <8b58> <8b58> 2269 <8b5a> <8b5a> 6720 <8b5b> <8b5b> 6719 <8b5c> <8b5c> 3546 <8b5f> <8b5f> 6722 <8b66> <8b66> 1839 <8b6b> <8b6b> 6721 <8b6c> <8b6c> 6723 <8b6f> <8b6f> 6724 <8b70> <8b70> 1630 <8b71> <8b71> 6190 <8b72> <8b72> 2529 <8b74> <8b74> 6725 <8b77> <8b77> 1954 <8b7d> <8b7d> 6726 <8b7f> <8b7f> 8625 <8b80> <8b80> 6727 <8b83> <8b83> 2188 <8b8a> <8b8a> 5075 <8b8c> <8b8c> 6728 <8b8e> <8b8e> 6729 <8b90> <8b90> 2364 <8b92> <8b93> 6730 <8b96> <8b96> 6732 <8b99> <8b9a> 6733 <8b9c> <8b9c> 15148 <8b9e> <8b9e> 15149 <8c37> <8c37> 2921 <8c3a> <8c3a> 6735 <8c3f> <8c3f> 6737 <8c41> <8c41> 6736 <8c46> <8c46> 3198 <8c47> <8c47> 15150 <8c48> <8c48> 6738 <8c4a> <8c4a> 3675 <8c4c> <8c4c> 6739 <8c4e> <8c4e> 6740 <8c50> <8c50> 6741 <8c54> <8c54> 15151 <8c55> <8c55> 6742 <8c5a> <8c5a> 3250 <8c61> <8c61> 2501 <8c62> <8c62> 6743 <8c6a> <8c6a> 2045 <8c6b> <8c6b> 4103 <8c6c> <8c6c> 6744 <8c73> <8c73> 15152 <8c78> <8c78> 6745 <8c79> <8c79> 3505 <8c7a> <8c7a> 6746 <8c7c> <8c7c> 6754 <8c82> <8c82> 6747 <8c85> <8c85> 6749 <8c89> <8c89> 6748 <8c8a> <8c8a> 6750 <8c8c> <8c8c> 3700 <8c8d> <8c8e> 6751 <8c94> <8c94> 6753 <8c98> <8c98> 6755 <8c9d> <8c9d> 1419 <8c9e> <8c9e> 3075 <8ca0> <8ca0> 3547 <8ca1> <8ca1> 2130 <8ca2> <8ca2> 2025 <8ca4> <8ca4> 15153 <8ca7> <8ca7> 3521 <8ca8> <8ca8> 1375 <8ca9> <8ca9> 3426 <8caa> <8caa> 6758 <8cab> <8cab> 1551 <8cac> <8cac> 2681 <8cad> <8cad> 6757 <8cae> <8cae> 6762 <8caf> <8caf> 2999 <8cb0> <8cb0> 3823 <8cb2> <8cb3> 6760 <8cb4> <8cb4> 1608 <8cb6> <8cb6> 6763 <8cb7> <8cb7> 3353 <8cb8> <8cb8> 2879 <8cbb> <8cbb> 3461 <8cbc> <8cbc> 3127 <8cbd> <8cbd> 6759 <8cbf> <8cbf> 3701 <8cc0> <8cc0> 1388 <8cc1> <8cc1> 6765 <8cc2> <8cc2> 4046 <8cc3> <8cc3> 3038 <8cc4> <8cc4> 4075 <8cc7> <8cc7> 2239 <8cc8> <8cc8> 6764 <8cca> <8cca> 2833 <8ccd> <8ccd> 6781 <8cce> <8cce> 2730 <8cd1> <8cd1> 3280 <8cd3> <8cd3> 3522 <8cd9> <8cd9> 15154 <8cda> <8cda> 6768 <8cdb> <8cdb> 2189 endcidrange 100 begincidrange <8cdc> <8cdc> 2240 <8cde> <8cde> 2502 <8ce0> <8ce0> 3355 <8ce1> <8ce1> 15155 <8ce2> <8ce2> 1889 <8ce3> <8ce3> 6767 <8ce4> <8ce4> 6766 <8ce6> <8ce6> 3548 <8cea> <8cea> 2285 <8ced> <8ced> 3148 <8cf0> <8cf0> 8626 <8cf4> <8cf4> 8627 <8cf8> <8cf8> 15156 <8cfa> <8cfb> 6770 <8cfc> <8cfc> 2026 <8cfd> <8cfd> 6769 <8cfe> <8cfe> 15157 <8d04> <8d05> 6772 <8d07> <8d07> 6775 <8d08> <8d08> 2819 <8d0a> <8d0a> 6774 <8d0b> <8d0b> 1570 <8d0d> <8d0d> 6777 <8d0f> <8d0f> 6776 <8d10> <8d10> 6778 <8d12> <8d12> 8628 <8d13> <8d13> 6780 <8d14> <8d14> 6782 <8d16> <8d16> 6783 <8d1b> <8d1b> 15158 <8d64> <8d64> 2682 <8d66> <8d66> 2299 <8d67> <8d67> 6784 <8d69> <8d69> 15159 <8d6b> <8d6b> 1456 <8d6c> <8d6c> 15160 <8d6d> <8d6d> 6785 <8d70> <8d70> 2808 <8d71> <8d71> 6786 <8d73> <8d73> 6787 <8d74> <8d74> 3549 <8d76> <8d76> 8629 <8d77> <8d77> 1609 <8d81> <8d81> 6788 <8d84> <8d84> 15161 <8d85> <8d85> 3026 <8d8a> <8d8a> 1277 <8d8d> <8d8d> 15162 <8d95> <8d95> 15163 <8d99> <8d99> 6789 <8da3> <8da3> 2333 <8da6> <8da6> 15164 <8da8> <8da8> 2620 <8db3> <8db3> 2829 <8dba> <8dba> 6792 <8dbe> <8dbe> 6791 <8dc2> <8dc2> 6790 <8dc6> <8dc6> 15165 <8dcb> <8dcb> 6798 <8dcc> <8dcc> 6796 <8dce> <8dce> 15166 <8dcf> <8dcf> 6793 <8dd6> <8dd6> 6795 <8dda> <8dda> 6794 <8ddb> <8ddb> 6797 <8ddd> <8ddd> 1681 <8ddf> <8ddf> 6801 <8de1> <8de1> 2683 <8de3> <8de3> 6802 <8de4> <8de4> 15167 <8de8> <8de8> 1933 <8dea> <8deb> 6799 <8dec> <8dec> 15168 <8def> <8def> 4047 <8df3> <8df3> 3027 <8df5> <8df5> 2731 <8dfc> <8dfc> 6803 <8dff> <8dff> 6806 <8e08> <8e09> 6804 <8e0a> <8e0a> 3907 <8e0f> <8e0f> 3199 <8e10> <8e10> 6809 <8e1d> <8e1e> 6807 <8e1f> <8e1f> 6810 <8e20> <8e20> 15169 <8e2a> <8e2a> 6824 <8e30> <8e30> 6813 <8e34> <8e34> 6814 <8e35> <8e35> 6812 <8e42> <8e42> 6811 <8e44> <8e44> 3097 <8e47> <8e47> 6816 <8e48> <8e48> 6820 <8e49> <8e49> 6817 <8e4a> <8e4a> 6815 <8e4b> <8e4b> 15170 <8e4c> <8e4c> 6818 <8e50> <8e50> 6819 <8e55> <8e55> 6826 <8e59> <8e59> 6821 endcidrange 100 begincidrange <8e5f> <8e5f> 2684 <8e60> <8e60> 6823 <8e63> <8e63> 6825 <8e64> <8e64> 6822 <8e6c> <8e6c> 15171 <8e70> <8e70> 15172 <8e72> <8e72> 6828 <8e74> <8e74> 2365 <8e76> <8e76> 6827 <8e7a> <8e7a> 15173 <8e7c> <8e7c> 6829 <8e81> <8e81> 6830 <8e84> <8e84> 6833 <8e85> <8e85> 6832 <8e87> <8e87> 6831 <8e8a> <8e8a> 6835 <8e8b> <8e8b> 6834 <8e8d> <8e8d> 3842 <8e91> <8e91> 6837 <8e92> <8e92> 15174 <8e93> <8e93> 6836 <8e94> <8e94> 6838 <8e99> <8e99> 6839 <8ea1> <8ea1> 6841 <8eaa> <8eaa> 6840 <8eab> <8eab> 2574 <8eac> <8eac> 6842 <8eae> <8eae> 15175 <8eaf> <8eaf> 1765 <8eb0> <8eb0> 6843 <8eb1> <8eb1> 6845 <8eb3> <8eb3> 15176 <8eb6> <8eb6> 14083 <8ebe> <8ebe> 6846 <8ec0> <8ec0> 7663 <8ec5> <8ec5> 6847 <8ec6> <8ec6> 6844 <8ec8> <8ec8> 6848 <8eca> <8eca> 2306 <8ecb> <8ecb> 6849 <8ecc> <8ecc> 1610 <8ecd> <8ecd> 1801 <8ecf> <8ecf> 8631 <8ed1> <8ed1> 15177 <8ed2> <8ed2> 1890 <8ed4> <8ed4> 15178 <8edb> <8edb> 6850 <8edf> <8edf> 3272 <8ee2> <8ee2> 3128 <8ee3> <8ee3> 6851 <8eeb> <8eeb> 6854 <8ef8> <8ef8> 2272 <8ef9> <8ef9> 15179 <8efb> <8efb> 6853 <8efc> <8efc> 6852 <8efd> <8efd> 1840 <8efe> <8efe> 6855 <8f03> <8f03> 1457 <8f05> <8f05> 6857 <8f09> <8f09> 2124 <8f0a> <8f0a> 6856 <8f0c> <8f0c> 6865 <8f12> <8f12> 6859 <8f13> <8f13> 6861 <8f14> <8f14> 3637 <8f15> <8f15> 6858 <8f17> <8f17> 15180 <8f19> <8f19> 6860 <8f1b> <8f1b> 6864 <8f1c> <8f1c> 6862 <8f1d> <8f1d> 1611 <8f1f> <8f1f> 6863 <8f26> <8f26> 6866 <8f29> <8f29> 3344 <8f2a> <8f2a> 4000 <8f2f> <8f2f> 2366 <8f33> <8f33> 6867 <8f36> <8f36> 15181 <8f38> <8f38> 3852 <8f39> <8f39> 6869 <8f3b> <8f3b> 6868 <8f3e> <8f3e> 6872 <8f3f> <8f3f> 3883 <8f42> <8f42> 6871 <8f44> <8f44> 1483 <8f45> <8f45> 6870 <8f46> <8f46> 6875 <8f49> <8f49> 6874 <8f4c> <8f4c> 6873 <8f4d> <8f4d> 3116 <8f4e> <8f4e> 6876 <8f57> <8f57> 6877 <8f5c> <8f5c> 6878 <8f5f> <8f5f> 2046 <8f61> <8f61> 1787 <8f62> <8f64> 6879 <8f9b> <8f9b> 2575 <8f9c> <8f9c> 6882 <8f9e> <8f9e> 2265 <8f9f> <8f9f> 6883 endcidrange 100 begincidrange <8fa3> <8fa3> 6884 <8fa6> <8fa6> 15182 <8fa7> <8fa7> 4278 <8fa8> <8fa8> 4277 <8fad> <8fad> 6885 <8fae> <8fae> 6143 <8faf> <8faf> 6886 <8fb0> <8fb0> 2914 <8fb1> <8fb1> 2545 <8fb2> <8fb2> 3318 <8fb5> <8fb6> 15183 <8fb7> <8fb7> 6887 <8fba> <8fba> 3621 <8fbb> <8fbb> 3056 <8fbc> <8fbc> 2064 <8fbf> <8fbf> 2919 <8fc2> <8fc2> 1228 <8fc4> <8fc4> 3750 <8fc5> <8fc5> 2589 <8fc6> <8fc6> 15185 <8fc8> <8fc8> 14233 <8fce> <8fce> 1844 <8fd1> <8fd1> 1753 <8fd4> <8fd4> 3622 <8fda> <8fda> 6888 <8fe0> <8fe0> 15186 <8fe2> <8fe2> 6890 <8fe4> <8fe4> 15187 <8fe5> <8fe5> 6889 <8fe6> <8fe6> 1376 <8fe9> <8fe9> 3278 <8fea> <8fea> 6891 <8feb> <8feb> 3373 <8fed> <8fed> 3117 <8fef> <8fef> 6892 <8ff0> <8ff0> 2396 <8ff4> <8ff4> 6894 <8ff6> <8ff6> 15188 <8ff7> <8ff7> 3790 <8ff8> <8ff8> 6909 <8ff9> <8ffa> 6896 <8ffd> <8ffd> 3045 <9000> <9000> 2880 <9001> <9001> 2809 <9002> <9002> 15189 <9003> <9003> 3200 <9005> <9005> 6895 <9006> <9006> 1647 <900b> <900b> 6904 <900d> <900d> 6901 <900e> <900e> 6914 <900f> <900f> 3201 <9010> <9010> 2974 <9011> <9011> 6898 <9013> <9013> 3098 <9014> <9014> 3149 <9015> <9015> 6899 <9016> <9016> 6903 <9017> <9017> 2598 <9019> <9019> 3357 <901a> <901a> 3048 <901d> <901d> 2662 <901e> <901e> 6902 <901f> <901f> 2830 <9020> <9020> 2820 <9021> <9021> 6900 <9022> <9022> 1133 <9023> <9023> 4040 <9027> <9027> 6905 <902c> <902c> 15190 <902e> <902e> 2881 <9031> <9031> 2367 <9032> <9032> 2576 <9035> <9035> 6907 <9036> <9036> 6906 <9038> <9038> 1203 <9039> <9039> 6908 <903c> <903c> 3489 <903e> <903e> 6916 <9041> <9041> 3251 <9042> <9042> 2609 <9044> <9044> 15191 <9045> <9045> 2967 <9047> <9047> 1776 <9049> <9049> 6915 <904a> <904a> 3873 <904b> <904b> 1249 <904d> <904d> 3623 <904e> <904e> 1377 <904f> <9052> 6910 <9053> <9053> 3219 <9054> <9054> 2913 <9055> <9055> 1191 <9056> <9056> 6917 <9058> <9058> 6918 <9059> <9059> 7476 <905c> <905c> 2845 <905e> <905e> 6919 <9060> <9060> 1301 <9061> <9061> 2766 endcidrange 100 begincidrange <9063> <9063> 1891 <9065> <9065> 3908 <9067> <9067> 8634 <9068> <9068> 6920 <9069> <9069> 3110 <906d> <906d> 2810 <906e> <906e> 2307 <906f> <906f> 6921 <9072> <9072> 6924 <9075> <9075> 2415 <9076> <9076> 6922 <9077> <9077> 2733 <9078> <9078> 2732 <907a> <907a> 1192 <907c> <907c> 3987 <907d> <907d> 6926 <907f> <907f> 3462 <9080> <9080> 6928 <9081> <9081> 6927 <9082> <9082> 6925 <9083> <9083> 5943 <9084> <9084> 1552 <9087> <9087> 6893 <9088> <9088> 15192 <9089> <9089> 6930 <908a> <908a> 6929 <908f> <908f> 6931 <9091> <9091> 3874 <9095> <9095> 15193 <9099> <9099> 15194 <909b> <909b> 15195 <90a2> <90a2> 15196 <90a3> <90a3> 3257 <90a6> <90a6> 3676 <90a8> <90a8> 6932 <90aa> <90aa> 2309 <90af> <90af> 6933 <90b1> <90b1> 6934 <90b4> <90b4> 15197 <90b5> <90b5> 6935 <90b8> <90b8> 3099 <90c1> <90c1> 1198 <90ca> <90ca> 2027 <90ce> <90ce> 4064 <90d7> <90d7> 15198 <90db> <90db> 6939 <90dd> <90dd> 15199 <90de> <90de> 8635 <90e1> <90e1> 1802 <90e2> <90e2> 6936 <90e4> <90e4> 6937 <90e8> <90e8> 3558 <90ed> <90ed> 1458 <90f4> <90f4> 15200 <90f5> <90f5> 3875 <90f7> <90f7> 1719 <90fd> <90fd> 3150 <9102> <9102> 6940 <9112> <9112> 6941 <9115> <9115> 8637 <9117> <9117> 15201 <9119> <9119> 6942 <911c> <911c> 15202 <9127> <9127> 8638 <912d> <912d> 3100 <9130> <9130> 6944 <9131> <9131> 15203 <9132> <9132> 6943 <913a> <913a> 15204 <913d> <913d> 15205 <9148> <9148> 15206 <9149> <9149> 3243 <914a> <914a> 6945 <914b> <914b> 2368 <914c> <914c> 2316 <914d> <914d> 3345 <914e> <914e> 2991 <9152> <9152> 2334 <9154> <9154> 2610 <9156> <9156> 6946 <9158> <9158> 6947 <915b> <915b> 15207 <9161> <9161> 15208 <9162> <9162> 2595 <9163> <9163> 6948 <9164> <9164> 15209 <9165> <9165> 6949 <9169> <9169> 6950 <916a> <916a> 3929 <916c> <916c> 2369 <9172> <9172> 6952 <9173> <9173> 6951 <9175> <9175> 2028 <9177> <9177> 2053 <9178> <9178> 2190 <9182> <9182> 6955 <9187> <9187> 2416 <9189> <9189> 6954 <918b> <918b> 6953 <918d> <918d> 2889 endcidrange 100 begincidrange <918e> <918e> 15210 <9190> <9190> 1955 <9192> <9192> 2663 <9197> <9197> 3396 <919c> <919c> 2371 <919e> <919e> 15211 <91a2> <91a2> 6956 <91a4> <91a4> 2503 <91a8> <91a8> 15212 <91aa> <91aa> 6959 <91ab> <91ab> 6957 <91ac> <91ac> 7707 <91ad> <91ae> 15213 <91af> <91af> 6958 <91b1> <91b1> 7777 <91b2> <91b2> 15215 <91b4> <91b4> 6961 <91b5> <91b5> 6960 <91b8> <91b8> 2530 <91ba> <91ba> 6962 <91bc> <91bc> 15216 <91c0> <91c1> 6963 <91c6> <91c6> 3428 <91c7> <91c7> 2115 <91c8> <91c8> 2317 <91c9> <91c9> 6965 <91cb> <91cb> 6966 <91cc> <91cc> 3948 <91cd> <91cd> 2383 <91ce> <91ce> 3834 <91cf> <91cf> 3988 <91d0> <91d0> 6967 <91d1> <91d1> 1754 <91d6> <91d6> 6968 <91d7> <91d7> 8640 <91d8> <91d8> 3101 <91da> <91da> 8639 <91db> <91db> 6971 <91dc> <91dc> 1494 <91dd> <91dd> 2577 <91de> <91de> 8641 <91df> <91df> 6969 <91e1> <91e1> 6970 <91e3> <91e3> 3068 <91e4> <91e5> 8644 <91e6> <91e6> 3715 <91e7> <91e7> 1780 <91ed> <91ee> 8642 <91f0> <91f0> 15217 <91f5> <91f6> 6973 <91f7> <91f7> 15218 <91fb> <91fb> 15219 <91fc> <91fc> 6972 <91ff> <91ff> 6976 <9206> <9206> 8646 <9207> <9207> 15220 <920a> <920a> 8648 <920d> <920d> 3255 <920e> <920e> 1441 <9210> <9210> 8647 <9211> <9211> 6980 <9214> <9214> 6977 <9215> <9215> 6979 <921e> <921e> 6975 <9228> <9228> 15221 <9229> <9229> 7050 <922c> <922c> 6978 <9233> <9233> 15222 <9234> <9234> 4019 <9237> <9237> 1934 <9238> <9238> 15223 <9239> <9239> 8655 <923a> <923a> 8649 <923c> <923c> 8651 <923f> <923f> 6988 <9240> <9240> 8650 <9243> <9243> 15224 <9244> <9244> 3118 <9245> <9245> 6983 <9247> <9247> 15225 <9248> <9248> 6986 <9249> <9249> 6984 <924b> <924b> 6989 <924e> <924e> 8652 <924f> <924f> 15226 <9250> <9250> 6990 <9251> <9251> 8654 <9257> <9257> 6982 <9259> <9259> 8653 <925a> <925a> 6995 <925b> <925b> 1302 <925e> <925e> 6981 <9260> <9260> 15227 <9262> <9262> 3393 <9264> <9264> 6985 <9266> <9266> 2504 <9267> <9267> 8656 <9271> <9271> 2029 <9277> <9278> 8658 <927e> <927e> 3702 endcidrange 100 begincidrange <9280> <9280> 1756 <9283> <9283> 2384 <9285> <9285> 3220 <9288> <9288> 8362 <9291> <9291> 2735 <9293> <9293> 6993 <9295> <9295> 6987 <9296> <9296> 6992 <9298> <9298> 3791 <929a> <929a> 3028 <929b> <929b> 6994 <929c> <929c> 6991 <92a7> <92a7> 8657 <92ad> <92ad> 2734 <92b3> <92b3> 13652 <92b7> <92b7> 6998 <92b9> <92b9> 6997 <92c2> <92c2> 15228 <92cb> <92cc> 15229 <92cf> <92cf> 6996 <92d0> <92d0> 8663 <92d2> <92d2> 3677 <92d3> <92d3> 8667 <92d5> <92d5> 8665 <92d7> <92d7> 8661 <92d9> <92d9> 8662 <92df> <92df> 15231 <92e0> <92e0> 8666 <92e4> <92e4> 2437 <92e7> <92e7> 8660 <92e9> <92e9> 6999 <92ea> <92ea> 3631 <92ed> <92ed> 1270 <92f2> <92f2> 3512 <92f3> <92f3> 2992 <92f8> <92f8> 1682 <92f9> <92f9> 8368 <92fa> <92fa> 7001 <92fb> <92fb> 8670 <92fc> <92fc> 2031 <92ff> <92ff> 8673 <9302> <9302> 8675 <9304> <9304> 13402 <9306> <9306> 2170 <930d> <930d> 15232 <930f> <930f> 7000 <9310> <9310> 2611 <9315> <9315> 15233 <9318> <9318> 2612 <9319> <9319> 7004 <931a> <931a> 7006 <931d> <931d> 8674 <931e> <931e> 8672 <931f> <931f> 15234 <9320> <9320> 2531 <9321> <9321> 8669 <9322> <9322> 7005 <9323> <9323> 7007 <9325> <9325> 8668 <9326> <9326> 1739 <9327> <9327> 15235 <9328> <9328> 3511 <932b> <932b> 2318 <932c> <932c> 4041 <932e> <932e> 7003 <932f> <932f> 2152 <9332> <9332> 4069 <9335> <9335> 7009 <933a> <933a> 7008 <933b> <933b> 7010 <9344> <9344> 7002 <9347> <9347> 15236 <9348> <9348> 8361 <934a> <934a> 13400 <934b> <934b> 3265 <934d> <934d> 3151 <9352> <9352> 15237 <9354> <9354> 3059 <9356> <9356> 7015 <9357> <9357> 8677 <935b> <935b> 2945 <935c> <935c> 7011 <9360> <9360> 7012 <9365> <9365> 15238 <936a> <936a> 15239 <936c> <936c> 1795 <936d> <936d> 15240 <936e> <936e> 7014 <9370> <9370> 8676 <9375> <9375> 1892 <937c> <937c> 7013 <937e> <937e> 2505 <938c> <938c> 1495 <9394> <9394> 7019 <9396> <9396> 2095 <9397> <9397> 2811 <939a> <939a> 3046 <939b> <939b> 15241 <93a4> <93a4> 8678 <93a7> <93a7> 1433 endcidrange 100 begincidrange <93a9> <93a9> 15243 <93ac> <93ad> 7017 <93ae> <93ae> 3039 <93b0> <93b0> 7016 <93b9> <93b9> 7020 <93ba> <93ba> 15242 <93c1> <93c1> 15244 <93c3> <93c3> 7026 <93c6> <93c6> 8679 <93c8> <93c8> 7029 <93ca> <93ca> 15245 <93d0> <93d0> 7028 <93d1> <93d1> 3111 <93d6> <93d7> 7021 <93d8> <93d8> 7025 <93dd> <93dd> 7027 <93de> <93de> 8680 <93e1> <93e1> 1720 <93e2> <93e2> 15246 <93e4> <93e4> 7030 <93e5> <93e5> 7024 <93e8> <93e8> 7023 <93f8> <93f8> 8681 <93fa> <93fa> 15247 <93fd> <93fd> 15248 <9403> <9403> 7034 <9407> <9407> 7035 <940f> <940f> 15249 <9410> <9410> 7036 <9413> <9413> 7033 <9414> <9414> 7032 <9418> <9418> 2506 <9419> <9419> 3202 <941a> <941a> 7031 <9421> <9421> 7040 <942b> <942b> 7038 <9431> <9431> 8682 <9434> <9434> 15250 <9435> <9435> 7039 <9436> <9436> 7037 <9438> <9438> 2904 <943a> <943a> 7041 <943f> <943f> 15251 <9441> <9441> 7042 <9444> <9444> 7044 <9445> <9445> 8683 <9448> <9448> 8684 <9451> <9451> 1553 <9452> <9452> 7043 <9453> <9453> 3846 <9455> <9455> 15252 <945a> <945a> 7055 <945b> <945b> 7045 <945e> <945e> 7048 <9460> <9460> 7046 <9462> <9462> 7047 <946a> <946a> 7049 <946b> <946b> 15253 <9470> <9470> 7051 <9472> <9472> 15254 <9475> <9475> 7052 <9477> <9477> 7053 <947c> <947c> 7056 <947d> <947d> 7054 <947e> <947e> 7057 <947f> <947f> 7059 <9481> <9481> 7058 <9577> <9577> 3029 <9578> <9578> 15255 <9580> <9580> 3827 <9582> <9582> 7060 <9583> <9583> 2736 <9587> <9587> 7061 <9589> <9589> 3604 <958a> <958a> 7062 <958b> <958b> 1417 <958f> <958f> 1246 <9591> <9591> 1555 <9592> <9592> 8685 <9593> <9593> 1554 <9594> <9594> 7063 <9596> <9596> 7064 <9598> <9599> 7065 <95a0> <95a0> 7067 <95a2> <95a2> 1556 <95a3> <95a3> 1459 <95a4> <95a4> 2032 <95a5> <95a5> 3402 <95a6> <95a6> 15256 <95a7> <95a7> 7069 <95a8> <95a8> 7068 <95a9> <95a9> 15257 <95ab> <95ab> 15258 <95ad> <95ad> 7070 <95b1> <95b1> 13653 <95b2> <95b2> 1278 <95b4> <95b4> 15259 <95b9> <95b9> 7073 <95bb> <95bb> 7072 <95bc> <95bc> 7071 endcidrange 100 begincidrange <95bd> <95bd> 15260 <95be> <95be> 7074 <95c3> <95c3> 7077 <95c7> <95c7> 1163 <95ca> <95ca> 7075 <95cc> <95cc> 7079 <95cd> <95cd> 7078 <95d4> <95d4> 7081 <95d5> <95d5> 7080 <95d6> <95d6> 7082 <95d8> <95d8> 3206 <95da> <95da> 15261 <95dc> <95dc> 7083 <95e1> <95e1> 7084 <95e2> <95e2> 7086 <95e5> <95e5> 7085 <961c> <961c> 3550 <961d> <961d> 15262 <9621> <9621> 7087 <9628> <9628> 7088 <962a> <962a> 2133 <962e> <962f> 7089 <9632> <9632> 3703 <963b> <963b> 2765 <963f> <963f> 1128 <9640> <9640> 2859 <9641> <9641> 15263 <9642> <9642> 7091 <9644> <9644> 3551 <964b> <964b> 7094 <964c> <964c> 7092 <964d> <964d> 2033 <964f> <964f> 7093 <9650> <9650> 1910 <9658> <9658> 15264 <965b> <965b> 3605 <965c> <965c> 7096 <965d> <965d> 7098 <965e> <965e> 7097 <965f> <965f> 7099 <9662> <9662> 1219 <9663> <9663> 2590 <9664> <9664> 2438 <9665> <9665> 1557 <9666> <9666> 7100 <966a> <966a> 3356 <966c> <966c> 7102 <9670> <9670> 1220 <9672> <9672> 7101 <9673> <9673> 3040 <9675> <9675> 3989 <9676> <9676> 3203 <9677> <9677> 7095 <9678> <9678> 3950 <967a> <967a> 1893 <967d> <967d> 3909 <9684> <9684> 15265 <9685> <9685> 1777 <9686> <9686> 3964 <9688> <9688> 1790 <968a> <968a> 2882 <968b> <968b> 6252 <968d> <968d> 7103 <968e> <968e> 1418 <968f> <968f> 2613 <9694> <9694> 1460 <9695> <9695> 7105 <9697> <9697> 7106 <9698> <9698> 7104 <9699> <9699> 1850 <969b> <969b> 2125 <969c> <969c> 2507 <969d> <969d> 8688 <96a0> <96a0> 1221 <96a3> <96a3> 4001 <96a4> <96a4> 15266 <96a7> <96a7> 7108 <96a8> <96a8> 6923 <96a9> <96a9> 15267 <96aa> <96aa> 7107 <96af> <96af> 8689 <96b0> <96b0> 7111 <96b1> <96b2> 7109 <96b4> <96b4> 7112 <96b6> <96b6> 7113 <96b7> <96b7> 4020 <96b8> <96b9> 7114 <96bb> <96bb> 2669 <96bc> <96bc> 3407 <96c0> <96c0> 2627 <96c1> <96c1> 1571 <96c4> <96c4> 3876 <96c5> <96c5> 1389 <96c6> <96c6> 2370 <96c7> <96c7> 1935 <96c9> <96c9> 7118 <96cb> <96cb> 7117 <96cc> <96cc> 2241 <96cd> <96cd> 7119 <96ce> <96ce> 7116 endcidrange 100 begincidrange <96d1> <96d1> 2166 <96d2> <96d2> 15268 <96d5> <96d5> 7123 <96d6> <96d6> 6546 <96d9> <96d9> 4331 <96db> <96db> 2621 <96dc> <96dc> 7121 <96de> <96de> 15270 <96e2> <96e2> 3949 <96e3> <96e3> 3273 <96e8> <96e8> 1229 <96e9> <96e9> 15271 <96ea> <96ea> 2695 <96eb> <96eb> 2274 <96f0> <96f0> 3591 <96f1> <96f1> 15272 <96f2> <96f2> 1250 <96f6> <96f6> 4021 <96f7> <96f7> 3925 <96f9> <96f9> 7124 <96fb> <96fb> 3135 <9700> <9700> 2343 <9702> <9702> 15273 <9704> <9704> 7125 <9706> <9706> 7126 <9707> <9707> 2578 <9708> <9708> 7127 <9709> <9709> 15274 <970a> <970a> 4022 <970d> <970d> 7122 <970e> <970e> 7129 <970f> <970f> 7131 <9711> <9711> 7130 <9713> <9713> 7128 <9716> <9716> 7132 <9719> <9719> 7133 <971c> <971c> 2812 <971e> <971e> 1378 <9724> <9724> 7134 <9727> <9727> 3780 <972a> <972a> 7135 <9730> <9730> 7136 <9732> <9732> 4048 <9733> <9733> 8690 <9738> <9738> 5140 <9739> <9739> 7137 <973b> <973b> 8691 <973d> <973e> 7138 <9742> <9742> 7143 <9743> <9743> 8692 <9744> <9744> 7140 <9746> <9746> 7141 <9748> <9748> 7142 <9749> <9749> 7144 <974d> <974d> 8693 <974f> <974f> 8694 <9751> <9751> 8695 <9752> <9752> 2664 <9755> <9755> 8696 <9756> <9756> 3843 <9759> <9759> 2665 <975a> <975a> 15275 <975c> <975c> 7145 <975e> <975e> 3463 <9760> <9760> 7146 <9761> <9761> 7430 <9762> <9762> 3800 <9763> <9763> 15276 <9764> <9764> 7147 <9766> <9766> 7148 <9768> <9768> 7149 <9769> <9769> 1461 <976b> <976b> 7151 <976d> <976d> 2591 <976e> <976e> 15277 <9771> <9771> 7152 <9773> <9773> 15278 <9774> <9774> 1786 <9779> <9779> 7153 <977a> <977a> 7157 <977c> <977c> 7155 <9781> <9781> 7156 <9784> <9784> 1489 <9785> <9785> 7154 <9786> <9786> 7158 <978b> <978b> 7159 <978d> <978d> 1164 <978f> <9790> 7160 <9798> <9798> 2508 <979a> <979a> 15279 <979c> <979c> 7162 <97a0> <97a0> 1633 <97a2> <97a2> 15280 <97a3> <97a3> 7165 <97a6> <97a6> 7164 <97a8> <97a8> 7163 <97ab> <97ab> 6708 <97ad> <97ad> 3628 <97b3> <97b4> 7166 <97b5> <97b6> 15281 endcidrange 100 begincidrange <97c3> <97c3> 7168 <97c6> <97c6> 7169 <97c8> <97c8> 7170 <97cb> <97cb> 7171 <97d3> <97d3> 1558 <97d9> <97d9> 15283 <97dc> <97dc> 7172 <97de> <97de> 15284 <97ed> <97ed> 7173 <97ee> <97ee> 3289 <97f2> <97f2> 7175 <97f3> <97f3> 1339 <97f4> <97f4> 15285 <97f5> <97f5> 7178 <97f6> <97f6> 7177 <97fb> <97fb> 1222 <97ff> <97ff> 1721 <9801> <9801> 3607 <9802> <9802> 3030 <9803> <9803> 2066 <9805> <9805> 2034 <9806> <9806> 2417 <9808> <9808> 2594 <980a> <980a> 15286 <980c> <980c> 7180 <980e> <980e> 15287 <980f> <980f> 7179 <9810> <9810> 3884 <9811> <9811> 1572 <9812> <9812> 3430 <9813> <9813> 3252 <9817> <9817> 2626 <9818> <9818> 3990 <981a> <981a> 1841 <981e> <981e> 15288 <9821> <9821> 7183 <9823> <9823> 15289 <9824> <9824> 7182 <982b> <982b> 15290 <982c> <982c> 3705 <982d> <982d> 3204 <9830> <9830> 7795 <9834> <9834> 1266 <9837> <9837> 7184 <9838> <9838> 7181 <9839> <9839> 14259 <983b> <983b> 3523 <983c> <983c> 3924 <983d> <983d> 7185 <983e> <983e> 15291 <9846> <9846> 7186 <984b> <984b> 7188 <984c> <984c> 2890 <984d> <984e> 1465 <984f> <984f> 7187 <9852> <9853> 15292 <9854> <9854> 1573 <9855> <9855> 1894 <9857> <9857> 8697 <9858> <9858> 1574 <9859> <9859> 15294 <985a> <985a> 7752 <985b> <985b> 3129 <985e> <985e> 4008 <9865> <9865> 8698 <9867> <9867> 1936 <986b> <986b> 7189 <986c> <986c> 15295 <986f> <9871> 7190 <9873> <9873> 7194 <9874> <9874> 7193 <98a8> <98a8> 3561 <98aa> <98aa> 7195 <98af> <98af> 7196 <98b1> <98b1> 7197 <98b6> <98b6> 7198 <98b8> <98b8> 15296 <98ba> <98ba> 15297 <98bf> <98bf> 15298 <98c3> <98c3> 7200 <98c4> <98c4> 7199 <98c6> <98c6> 7201 <98c8> <98c8> 15299 <98db> <98db> 3464 <98dc> <98dc> 6201 <98df> <98df> 2543 <98e0> <98e0> 13848 <98e2> <98e2> 1612 <98e5> <98e5> 15300 <98e9> <98e9> 7202 <98eb> <98eb> 7203 <98ed> <98ed> 4289 <98ee> <98ee> 5338 <98ef> <98ef> 3431 <98f2> <98f2> 1215 <98f4> <98f4> 1151 <98fc> <98fc> 2242 <98fd> <98fd> 3678 <98fe> <98fe> 2534 <9903> <9903> 7204 endcidrange 100 begincidrange <9905> <9905> 3819 <9909> <9909> 7205 <990a> <990a> 3910 <990c> <990c> 1252 <9910> <9910> 2191 <9912> <9912> 7206 <9913> <9913> 1390 <9914> <9914> 7207 <9918> <9918> 7208 <991d> <991e> 7210 <9920> <9920> 7213 <9921> <9921> 7209 <9924> <9924> 7212 <9927> <9927> 8701 <9928> <9928> 1559 <992c> <992c> 7214 <992e> <992e> 7215 <9932> <9933> 15301 <993d> <993e> 7216 <9940> <9940> 15303 <9942> <9942> 7218 <9945> <9945> 7220 <9949> <9949> 7219 <994b> <994b> 7222 <994c> <994c> 7225 <994d> <994d> 15304 <9950> <9950> 7221 <9951> <9952> 7223 <9955> <9955> 7226 <9957> <9957> 1722 <995c> <995c> 15305 <995f> <995f> 15306 <9996> <9996> 2335 <9997> <9998> 7227 <9999> <9999> 2035 <999e> <999e> 8703 <99a5> <99a5> 7229 <99a8> <99a8> 1436 <99ac> <99ac> 3333 <99ad> <99ae> 7230 <99b1> <99b1> 15307 <99b3> <99b3> 2968 <99b4> <99b4> 3267 <99b9> <99ba> 15308 <99bc> <99bc> 7232 <99c1> <99c1> 3379 <99c4> <99c4> 2860 <99c5> <99c5> 1274 <99c6> <99c6> 1766 <99c8> <99c8> 1767 <99c9> <99c9> 15310 <99d0> <99d0> 2993 <99d1> <99d1> 7237 <99d2> <99d2> 1768 <99d5> <99d5> 1391 <99d8> <99d8> 7236 <99db> <99db> 7234 <99dd> <99dd> 7235 <99df> <99df> 7233 <99e2> <99e2> 7247 <99ed> <99ee> 7238 <99f1> <99f2> 7240 <99f8> <99f8> 7243 <99fb> <99fb> 7242 <99ff> <99ff> 2403 <9a01> <9a01> 7244 <9a02> <9a02> 15311 <9a05> <9a05> 7246 <9a08> <9a08> 14266 <9a0e> <9a0e> 1613 <9a0f> <9a0f> 7245 <9a12> <9a12> 2813 <9a13> <9a13> 1895 <9a16> <9a16> 15312 <9a19> <9a19> 7248 <9a24> <9a24> 15313 <9a27> <9a27> 15314 <9a28> <9a28> 2861 <9a2b> <9a2b> 7249 <9a2d> <9a2e> 15315 <9a30> <9a30> 3205 <9a36> <9a36> 15317 <9a37> <9a37> 7250 <9a38> <9a38> 15318 <9a3e> <9a3e> 7255 <9a40> <9a40> 7253 <9a42> <9a42> 7252 <9a43> <9a43> 7254 <9a45> <9a45> 7251 <9a4a> <9a4a> 15319 <9a4d> <9a4d> 7257 <9a4e> <9a4e> 8704 <9a52> <9a52> 7727 <9a55> <9a55> 7256 <9a56> <9a56> 15320 <9a57> <9a57> 7259 <9a5a> <9a5a> 1723 <9a5b> <9a5b> 7258 <9a5f> <9a5f> 7260 <9a62> <9a62> 7261 endcidrange 100 begincidrange <9a64> <9a64> 7263 <9a65> <9a65> 7262 <9a69> <9a69> 7264 <9a6a> <9a6a> 7266 <9a6b> <9a6b> 7265 <9aa8> <9aa8> 2062 <9aad> <9aad> 7267 <9ab0> <9ab0> 7268 <9ab5> <9ab6> 15321 <9ab8> <9ab8> 1434 <9abc> <9abc> 7269 <9ac0> <9ac0> 7270 <9ac4> <9ac4> 2615 <9acf> <9acf> 7271 <9ad1> <9ad1> 7272 <9ad3> <9ad4> 7273 <9ad8> <9ad8> 2036 <9ad9> <9ad9> 8705 <9adc> <9adc> 8706 <9ade> <9adf> 7275 <9ae2> <9ae3> 7277 <9ae6> <9ae6> 7279 <9aea> <9aea> 3397 <9aeb> <9aeb> 7281 <9aed> <9aed> 3480 <9aee> <9aee> 7282 <9aef> <9aef> 7280 <9af1> <9af1> 7284 <9af4> <9af4> 7283 <9af7> <9af7> 7285 <9af9> <9af9> 15323 <9afb> <9afb> 7286 <9b03> <9b03> 15324 <9b06> <9b06> 7287 <9b18> <9b18> 7288 <9b1a> <9b1a> 7289 <9b1f> <9b1f> 7290 <9b20> <9b20> 15325 <9b22> <9b23> 7291 <9b25> <9b25> 7293 <9b27> <9b2a> 7294 <9b2d> <9b2d> 13372 <9b2e> <9b2f> 7298 <9b31> <9b31> 5332 <9b32> <9b32> 7300 <9b33> <9b34> 15326 <9b3b> <9b3b> 6057 <9b3c> <9b3c> 1614 <9b41> <9b41> 1407 <9b42> <9b42> 2082 <9b43> <9b43> 7302 <9b44> <9b44> 7301 <9b45> <9b45> 3761 <9b4d> <9b4e> 7304 <9b4f> <9b4f> 7303 <9b51> <9b51> 7306 <9b54> <9b54> 3728 <9b58> <9b58> 7307 <9b5a> <9b5a> 1685 <9b6f> <9b6f> 4043 <9b72> <9b72> 8708 <9b73> <9b73> 15328 <9b74> <9b74> 7308 <9b75> <9b75> 8707 <9b79> <9b79> 15329 <9b83> <9b83> 7310 <9b8e> <9b8e> 1154 <9b8f> <9b8f> 8709 <9b91> <9b91> 7311 <9b92> <9b92> 3579 <9b93> <9b93> 7309 <9b96> <9b97> 7312 <9b9f> <9ba0> 7314 <9ba7> <9ba7> 15330 <9ba8> <9ba8> 7316 <9baa> <9baa> 3740 <9bab> <9bab> 2171 <9bad> <9bad> 2154 <9bae> <9bae> 2737 <9bb1> <9bb1> 8710 <9bb4> <9bb4> 7317 <9bb9> <9bb9> 7320 <9bbb> <9bbb> 8711 <9bc0> <9bc0> 7318 <9bc1> <9bc1> 15331 <9bc6> <9bc6> 7321 <9bc7> <9bc7> 15332 <9bc9> <9bc9> 1957 <9bca> <9bca> 7319 <9bcf> <9bcf> 7322 <9bd1> <9bd2> 7323 <9bd4> <9bd4> 7328 <9bd6> <9bd6> 2168 <9bd7> <9bd7> 15333 <9bdb> <9bdb> 2884 <9bdf> <9bdf> 14271 <9be1> <9be1> 7329 <9be2> <9be2> 7326 <9be3> <9be3> 7325 <9be4> <9be4> 7327 endcidrange 100 begincidrange <9be7> <9be7> 15334 <9be8> <9be8> 1845 <9beb> <9beb> 15335 <9bf0> <9bf0> 7333 <9bf1> <9bf1> 7332 <9bf2> <9bf2> 7331 <9bf5> <9bf5> 1143 <9bf7> <9bf7> 15336 <9bfa> <9bfa> 15337 <9bfd> <9bfd> 15338 <9c00> <9c00> 8712 <9c04> <9c04> 7343 <9c06> <9c06> 7339 <9c08> <9c08> 7340 <9c09> <9c09> 7336 <9c0a> <9c0a> 7342 <9c0b> <9c0b> 15339 <9c0c> <9c0c> 7338 <9c0d> <9c0d> 1472 <9c10> <9c10> 4082 <9c12> <9c12> 7341 <9c13> <9c13> 7337 <9c14> <9c14> 7335 <9c15> <9c15> 7334 <9c1b> <9c1b> 7345 <9c21> <9c21> 7348 <9c24> <9c24> 7347 <9c25> <9c25> 7346 <9c27> <9c27> 15340 <9c2a> <9c2a> 15341 <9c2d> <9c2d> 3515 <9c2e> <9c2e> 7344 <9c2f> <9c2f> 1207 <9c30> <9c30> 7349 <9c32> <9c32> 7351 <9c36> <9c36> 15342 <9c39> <9c39> 1485 <9c3a> <9c3a> 7330 <9c3b> <9c3b> 1241 <9c3e> <9c3e> 7353 <9c41> <9c41> 15343 <9c46> <9c46> 7352 <9c47> <9c47> 7350 <9c48> <9c48> 2923 <9c52> <9c52> 3742 <9c53> <9c53> 15344 <9c57> <9c57> 4002 <9c5a> <9c5a> 7354 <9c60> <9c60> 7355 <9c63> <9c63> 15345 <9c67> <9c67> 7356 <9c6a> <9c6a> 15346 <9c76> <9c76> 7357 <9c77> <9c77> 15347 <9c78> <9c78> 7358 <9ce5> <9ce5> 3031 <9ce7> <9ce7> 7359 <9ce9> <9ce9> 3403 <9ceb> <9ceb> 7364 <9cec> <9cec> 7360 <9cf0> <9cf0> 7361 <9cf3> <9cf3> 3679 <9cf4> <9cf4> 3792 <9cf6> <9cf6> 3240 <9d02> <9d02> 15348 <9d03> <9d03> 7365 <9d06> <9d06> 7366 <9d07> <9d07> 3222 <9d08> <9d08> 7363 <9d09> <9d09> 7362 <9d0e> <9d0e> 1322 <9d12> <9d12> 7374 <9d15> <9d15> 7373 <9d1b> <9d1b> 1303 <9d1f> <9d1f> 7371 <9d23> <9d23> 7370 <9d26> <9d26> 7368 <9d28> <9d28> 1497 <9d2a> <9d2a> 7367 <9d2b> <9d2b> 2270 <9d2c> <9d2c> 1321 <9d3b> <9d3b> 2037 <9d3e> <9d3e> 7377 <9d3f> <9d3f> 7376 <9d41> <9d41> 7375 <9d42> <9d42> 15349 <9d44> <9d44> 7372 <9d46> <9d46> 7378 <9d47> <9d47> 15350 <9d48> <9d48> 7379 <9d50> <9d50> 7384 <9d51> <9d51> 7383 <9d59> <9d59> 7385 <9d5c> <9d5c> 1231 <9d5d> <9d5e> 7380 <9d60> <9d60> 2054 <9d61> <9d61> 3781 <9d63> <9d63> 15351 <9d64> <9d64> 7382 <9d69> <9d69> 15352 endcidrange 100 begincidrange <9d6b> <9d6b> 8714 <9d6c> <9d6c> 3680 <9d6f> <9d6f> 7390 <9d70> <9d70> 8713 <9d72> <9d72> 7386 <9d7a> <9d7a> 7391 <9d7c> <9d7c> 15353 <9d7e> <9d7e> 15354 <9d87> <9d87> 7388 <9d89> <9d89> 7387 <9d8d> <9d8d> 15355 <9d8f> <9d8f> 1842 <9d9a> <9d9a> 7392 <9da4> <9da4> 7393 <9da9> <9da9> 7394 <9dab> <9dab> 7389 <9daf> <9daf> 7369 <9db1> <9db1> 15356 <9db2> <9db2> 7395 <9db4> <9db4> 3069 <9db8> <9db8> 7399 <9dba> <9dba> 7400 <9dbb> <9dbb> 7398 <9dc1> <9dc1> 7397 <9dc2> <9dc2> 7403 <9dc3> <9dc3> 15357 <9dc4> <9dc4> 7396 <9dc6> <9dc6> 7401 <9dc7> <9dc7> 15358 <9dcf> <9dcf> 7402 <9dd3> <9dd3> 7405 <9dd6> <9dd6> 15359 <9dd7> <9dd7> 7646 <9dd9> <9dd9> 7404 <9ddf> <9ddf> 15360 <9de6> <9de6> 7407 <9deb> <9deb> 15361 <9ded> <9ded> 7408 <9def> <9def> 7409 <9df2> <9df2> 4079 <9df4> <9df4> 15362 <9df8> <9df8> 7406 <9df9> <9df9> 2891 <9dfa> <9dfa> 2141 <9dfd> <9dfd> 7410 <9e15> <9e15> 15363 <9e19> <9e19> 8716 <9e1a> <9e1b> 7411 <9e1d> <9e1d> 15364 <9e1e> <9e1e> 7413 <9e75> <9e75> 7414 <9e78> <9e78> 1896 <9e79> <9e79> 7415 <9e7c> <9e7c> 7677 <9e7d> <9e7d> 7416 <9e7f> <9e7f> 2267 <9e81> <9e81> 7417 <9e88> <9e88> 7418 <9e8b> <9e8c> 7419 <9e91> <9e91> 7423 <9e92> <9e92> 7421 <9e93> <9e93> 4066 <9e95> <9e95> 7422 <9e97> <9e97> 4023 <9e9d> <9e9d> 7424 <9e9f> <9e9f> 4003 <9ea4> <9ea4> 15365 <9ea5> <9ea5> 7425 <9ea6> <9ea6> 3380 <9ea8> <9ea8> 15366 <9ea9> <9ea9> 7426 <9eaa> <9eaa> 7428 <9eac> <9eac> 15367 <9ead> <9ead> 7429 <9eb4> <9eb4> 7682 <9eb5> <9eb5> 7797 <9eb8> <9eb8> 7427 <9eb9> <9eb9> 2047 <9eba> <9eba> 3801 <9ebb> <9ebb> 3729 <9ebc> <9ebc> 4740 <9ebe> <9ebe> 5375 <9ebf> <9ebf> 3753 <9ec3> <9ec3> 13323 <9ec4> <9ec4> 1323 <9ecc> <9ecc> 7431 <9ecd> <9ecd> 1642 <9ece> <9ed0> 7432 <9ed1> <9ed1> 8717 <9ed2> <9ed2> 2055 <9ed4> <9ed4> 7435 <9ed8> <9ed8> 5645 <9ed9> <9ed9> 3815 <9edb> <9edb> 2883 <9edc> <9edc> 7436 <9edd> <9edd> 7438 <9ede> <9ede> 7437 <9ee0> <9ee0> 7439 <9ee5> <9ee5> 7440 <9ee7> <9ee7> 15368 endcidrange 100 begincidrange <9ee8> <9ee8> 7441 <9eee> <9eee> 15369 <9eef> <9eef> 7442 <9ef4> <9ef4> 7443 <9ef6> <9ef7> 7444 <9ef9> <9ef9> 7446 <9efb> <9efd> 7447 <9f07> <9f08> 7450 <9f0e> <9f0e> 3102 <9f10> <9f10> 15370 <9f12> <9f12> 15371 <9f13> <9f13> 1937 <9f15> <9f15> 7453 <9f17> <9f17> 15372 <9f19> <9f19> 15373 <9f20> <9f20> 2767 <9f21> <9f21> 7454 <9f2c> <9f2c> 7455 <9f2f> <9f2f> 15374 <9f37> <9f37> 15375 <9f39> <9f39> 15376 <9f3b> <9f3b> 3475 <9f3e> <9f3e> 7456 <9f41> <9f41> 15377 <9f45> <9f45> 15378 <9f4a> <9f4a> 7457 <9f4b> <9f4b> 5898 <9f4e> <9f4e> 6779 <9f4f> <9f4f> 7174 <9f52> <9f52> 7458 <9f54> <9f54> 7459 <9f57> <9f57> 15379 <9f5f> <9f61> 7461 <9f62> <9f62> 4024 <9f63> <9f63> 7460 <9f66> <9f67> 7464 <9f68> <9f68> 15380 <9f6a> <9f6a> 7467 <9f6c> <9f6c> 7466 <9f71> <9f71> 15381 <9f72> <9f72> 7469 <9f75> <9f75> 15382 <9f76> <9f76> 7470 <9f77> <9f77> 7468 <9f8d> <9f8d> 3966 <9f90> <9f90> 15383 <9f94> <9f94> 15384 <9f95> <9f95> 7471 <9f9c> <9f9c> 7472 <9f9d> <9f9d> 5927 <9fa0> <9fa0> 7473 <9fa2> <9fa2> 15385 8489 8686 8410 8421 8443 8481 8497 8499 8542 8548 8571 8579 8583 8587 8590 8599 8610 8612 8622 8630 8632 8636 8664 8671 8687 8699 8702 8715 9358 112 9359 7898 7892 7890 7899 7905 7901 7915 7909 7907 7911 642 8007 716 712 715 717 8006 endcidrange 33 begincidrange 674 718 692 636 693 637 663 780 639 699 697 700 641 719 790 678 664 679 648 650 646 816 680 667 681 665 327 713 751 649 8005 711 323 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniJIS-UCS2-HW-H b/Resources/cmap/UniJIS-UCS2-HW-H deleted file mode 100644 index fecf616d69a..00000000000 --- a/Resources/cmap/UniJIS-UCS2-HW-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (UniJIS-UCS2-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (UniJIS-UCS2-H) %%BeginResource: CMap (UniJIS-UCS2-HW-H) %%Title: (UniJIS-UCS2-HW-H Adobe Japan1 2) %%Version: 11.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /UniJIS-UCS2-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 2 def end def /CMapName /UniJIS-UCS2-HW-H def /CMapVersion 11.001 def /CMapType 1 def /XUID [1 10 25448] def /WMode 0 def 4 begincidrange <0020> <005b> 231 <005c> <005c> 8719 <005d> <007e> 292 <00a5> <00a5> 291 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniJIS-UCS2-HW-V b/Resources/cmap/UniJIS-UCS2-HW-V deleted file mode 100644 index 1c9025ad6b5..00000000000 --- a/Resources/cmap/UniJIS-UCS2-HW-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (UniJIS-UCS2-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (UniJIS-UCS2-H) %%BeginResource: CMap (UniJIS-UCS2-HW-V) %%Title: (UniJIS-UCS2-HW-V Adobe Japan1 4) %%Version: 12.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /UniJIS-UCS2-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 4 def end def /CMapName /UniJIS-UCS2-HW-V def /CMapVersion 12.001 def /CMapType 1 def /XUID [1 10 25449] def /WMode 1 def 100 begincidrange <0020> <005b> 231 <005c> <005c> 8719 <005d> <007e> 292 <00a5> <00a5> 291 <00b0> <00b0> 8269 <2010> <2010> 7893 <2015> <2015> 7892 <2016> <2016> 7895 <2018> <2019> 8281 <201c> <201d> 8279 <2025> <2025> 7898 <2026> <2026> 7897 <2032> <2032> 8273 <2033> <2033> 8283 <2190> <2190> 738 <2191> <2191> 736 <2192> <2192> 739 <2193> <2193> 737 <2195> <2195> 12214 <21c4> <21c4> 8311 <21c5> <21c5> 8310 <21c6> <21c6> 8312 <21e6> <21e6> 8012 <21e7> <21e7> 8014 <21e8> <21e8> 8011 <21e9> <21e9> 8013 <2225> <2225> 7895 <223c> <223c> 7894 <22ef> <22ef> 7897 <2500> <2501> 7481 <2502> <2503> 7479 <2504> <2505> 7485 <2506> <2507> 7483 <2508> <2509> 7489 <250a> <250b> 7487 <250c> <250c> 7495 <250d> <250d> 7497 <250e> <250e> 7496 <250f> <250f> 7498 <2510> <2510> 7503 <2511> <2511> 7505 <2512> <2512> 7504 <2513> <2513> 7506 <2514> <2514> 7491 <2515> <2515> 7493 <2516> <2516> 7492 <2517> <2517> 7494 <2518> <2518> 7499 <2519> <2519> 7501 <251a> <251a> 7500 <251b> <251b> 7502 <251c> <251c> 7523 <251d> <251d> 7527 <251e> <251e> 7525 <251f> <251f> 7524 <2520> <2520> 7526 <2521> <2521> 7529 <2522> <2522> 7528 <2523> <2524> 7530 <2525> <2525> 7535 <2526> <2526> 7533 <2527> <2527> 7532 <2528> <2528> 7534 <2529> <2529> 7537 <252a> <252a> 7536 <252b> <252b> 7538 <252c> <252c> 7515 <252d> <252f> 7517 <2530> <2530> 7516 <2531> <2533> 7520 <2534> <2534> 7507 <2535> <2537> 7509 <2538> <2538> 7508 <2539> <253b> 7512 <253d> <253f> 7543 <2540> <2540> 7541 <2541> <2541> 7540 <2542> <2542> 7542 <2543> <2543> 7547 <2544> <2544> 7549 <2545> <2545> 7546 <2546> <2546> 7548 <2547> <2547> 7553 <2548> <2548> 7552 <2549> <254a> 7550 <261c> <261c> 8221 <261d> <261d> 8219 <261e> <261e> 8222 <261f> <261f> 8220 <2702> <2702> 12178 <27a1> <27a1> 8209 <3001> <3002> 7887 <3008> <3011> 7907 <3013> <3013> 8270 <3014> <3015> 7901 <301c> <301c> 7894 <301d> <301d> 7956 <301f> <301f> 7957 <3041> <3041> 7918 <3043> <3043> 7919 endcidrange 99 begincidrange <3045> <3045> 7920 <3047> <3047> 7921 <3049> <3049> 7922 <3063> <3063> 7923 <3083> <3083> 7924 <3085> <3085> 7925 <3087> <3087> 7926 <308e> <308e> 7927 <309b> <309b> 8272 <309c> <309c> 8271 <30a1> <30a1> 7928 <30a3> <30a3> 7929 <30a5> <30a5> 7930 <30a7> <30a7> 7931 <30a9> <30a9> 7932 <30c3> <30c3> 7933 <30e3> <30e3> 7934 <30e5> <30e5> 7935 <30e7> <30e7> 7936 <30ee> <30ee> 7937 <30f5> <30f6> 7938 <30fc> <30fc> 7891 <3300> <3300> 8350 <3301> <3302> 11958 <3303> <3303> 8338 <3304> <3304> 11960 <3305> <3305> 8333 <3306> <3306> 11961 <3307> <3307> 11965 <3308> <3308> 11963 <3309> <3309> 11968 <330a> <330a> 11966 <330b> <330b> 11970 <330c> <330c> 11972 <330d> <330d> 7950 <330e> <3313> 11973 <3314> <3314> 7941 <3315> <3315> 8340 <3316> <3316> 8330 <3317> <3317> 11980 <3318> <3318> 8339 <3319> <3319> 11982 <331a> <331d> 11984 <331e> <331e> 8353 <331f> <3321> 11988 <3322> <3322> 8329 <3323> <3323> 8348 <3324> <3324> 11991 <3325> <3325> 11993 <3326> <3326> 7951 <3327> <3327> 7945 <3328> <3329> 11996 <332a> <332a> 8356 <332b> <332b> 7953 <332d> <332d> 11999 <332e> <3330> 12002 <3331> <3331> 8358 <3332> <3332> 12005 <3333> <3333> 8334 <3334> <3335> 12008 <3336> <3336> 7947 <3337> <3337> 12014 <3338> <3338> 12016 <3339> <3339> 8343 <333a> <333a> 12017 <333b> <333b> 8349 <333c> <333c> 12010 <333d> <333d> 12018 <333e> <3340> 12020 <3341> <3341> 12019 <3342> <3342> 8347 <3343> <3346> 12023 <3347> <3347> 8357 <3348> <3348> 12027 <3349> <3349> 7940 <334a> <334a> 7954 <334b> <334c> 12028 <334d> <334d> 7943 <334e> <334e> 8337 <334f> <3350> 12030 <3351> <3351> 7948 <3352> <3352> 12034 <3353> <3353> 12038 <3354> <3354> 12035 <3355> <3356> 12039 <3357> <3357> 8344 <337f> <337f> 8324 7899 8268 8274 7917 7903 7904 7890 7905 7896 7906 7894 7889 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniJIS-UCS2-V b/Resources/cmap/UniJIS-UCS2-V deleted file mode 100644 index ebf3f1e3ae9..00000000000 --- a/Resources/cmap/UniJIS-UCS2-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (UniJIS-UCS2-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (UniJIS-UCS2-H) %%BeginResource: CMap (UniJIS-UCS2-V) %%Title: (UniJIS-UCS2-V Adobe Japan1 4) %%Version: 12.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /UniJIS-UCS2-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 4 def end def /CMapName /UniJIS-UCS2-V def /CMapVersion 12.001 def /CMapType 1 def /XUID [1 10 25357] def /WMode 1 def 100 begincidrange <00b0> <00b0> 8269 <2010> <2010> 7893 <2015> <2015> 7892 <2016> <2016> 7895 <2018> <2019> 8281 <201c> <201d> 8279 <2025> <2025> 7898 <2026> <2026> 7897 <2032> <2032> 8273 <2033> <2033> 8283 <2190> <2190> 738 <2191> <2191> 736 <2192> <2192> 739 <2193> <2193> 737 <2195> <2195> 12214 <21c4> <21c4> 8311 <21c5> <21c5> 8310 <21c6> <21c6> 8312 <21e6> <21e6> 8012 <21e7> <21e7> 8014 <21e8> <21e8> 8011 <21e9> <21e9> 8013 <2225> <2225> 7895 <223c> <223c> 7894 <22ef> <22ef> 7897 <2500> <2501> 7481 <2502> <2503> 7479 <2504> <2505> 7485 <2506> <2507> 7483 <2508> <2509> 7489 <250a> <250b> 7487 <250c> <250c> 7495 <250d> <250d> 7497 <250e> <250e> 7496 <250f> <250f> 7498 <2510> <2510> 7503 <2511> <2511> 7505 <2512> <2512> 7504 <2513> <2513> 7506 <2514> <2514> 7491 <2515> <2515> 7493 <2516> <2516> 7492 <2517> <2517> 7494 <2518> <2518> 7499 <2519> <2519> 7501 <251a> <251a> 7500 <251b> <251b> 7502 <251c> <251c> 7523 <251d> <251d> 7527 <251e> <251e> 7525 <251f> <251f> 7524 <2520> <2520> 7526 <2521> <2521> 7529 <2522> <2522> 7528 <2523> <2524> 7530 <2525> <2525> 7535 <2526> <2526> 7533 <2527> <2527> 7532 <2528> <2528> 7534 <2529> <2529> 7537 <252a> <252a> 7536 <252b> <252b> 7538 <252c> <252c> 7515 <252d> <252f> 7517 <2530> <2530> 7516 <2531> <2533> 7520 <2534> <2534> 7507 <2535> <2537> 7509 <2538> <2538> 7508 <2539> <253b> 7512 <253d> <253f> 7543 <2540> <2540> 7541 <2541> <2541> 7540 <2542> <2542> 7542 <2543> <2543> 7547 <2544> <2544> 7549 <2545> <2545> 7546 <2546> <2546> 7548 <2547> <2547> 7553 <2548> <2548> 7552 <2549> <254a> 7550 <261c> <261c> 8221 <261d> <261d> 8219 <261e> <261e> 8222 <261f> <261f> 8220 <2702> <2702> 12178 <27a1> <27a1> 8209 <3001> <3002> 7887 <3008> <3011> 7907 <3013> <3013> 8270 <3014> <3015> 7901 <301c> <301c> 7894 <301d> <301d> 7956 <301f> <301f> 7957 <3041> <3041> 7918 <3043> <3043> 7919 <3045> <3045> 7920 <3047> <3047> 7921 <3049> <3049> 7922 <3063> <3063> 7923 endcidrange 95 begincidrange <3083> <3083> 7924 <3085> <3085> 7925 <3087> <3087> 7926 <308e> <308e> 7927 <309b> <309b> 8272 <309c> <309c> 8271 <30a1> <30a1> 7928 <30a3> <30a3> 7929 <30a5> <30a5> 7930 <30a7> <30a7> 7931 <30a9> <30a9> 7932 <30c3> <30c3> 7933 <30e3> <30e3> 7934 <30e5> <30e5> 7935 <30e7> <30e7> 7936 <30ee> <30ee> 7937 <30f5> <30f6> 7938 <30fc> <30fc> 7891 <3300> <3300> 8350 <3301> <3302> 11958 <3303> <3303> 8338 <3304> <3304> 11960 <3305> <3305> 8333 <3306> <3306> 11961 <3307> <3307> 11965 <3308> <3308> 11963 <3309> <3309> 11968 <330a> <330a> 11966 <330b> <330b> 11970 <330c> <330c> 11972 <330d> <330d> 7950 <330e> <3313> 11973 <3314> <3314> 7941 <3315> <3315> 8340 <3316> <3316> 8330 <3317> <3317> 11980 <3318> <3318> 8339 <3319> <3319> 11982 <331a> <331d> 11984 <331e> <331e> 8353 <331f> <3321> 11988 <3322> <3322> 8329 <3323> <3323> 8348 <3324> <3324> 11991 <3325> <3325> 11993 <3326> <3326> 7951 <3327> <3327> 7945 <3328> <3329> 11996 <332a> <332a> 8356 <332b> <332b> 7953 <332d> <332d> 11999 <332e> <3330> 12002 <3331> <3331> 8358 <3332> <3332> 12005 <3333> <3333> 8334 <3334> <3335> 12008 <3336> <3336> 7947 <3337> <3337> 12014 <3338> <3338> 12016 <3339> <3339> 8343 <333a> <333a> 12017 <333b> <333b> 8349 <333c> <333c> 12010 <333d> <333d> 12018 <333e> <3340> 12020 <3341> <3341> 12019 <3342> <3342> 8347 <3343> <3346> 12023 <3347> <3347> 8357 <3348> <3348> 12027 <3349> <3349> 7940 <334a> <334a> 7954 <334b> <334c> 12028 <334d> <334d> 7943 <334e> <334e> 8337 <334f> <3350> 12030 <3351> <3351> 7948 <3352> <3352> 12034 <3353> <3353> 12038 <3354> <3354> 12035 <3355> <3356> 12039 <3357> <3357> 8344 <337f> <337f> 8324 7899 8268 8274 7917 7903 7904 7890 7905 7896 7906 7894 7889 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniKS-UCS2-H b/Resources/cmap/UniKS-UCS2-H deleted file mode 100644 index 67eea6a78aa..00000000000 --- a/Resources/cmap/UniKS-UCS2-H +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (UniKS-UCS2-H) %%Title: (UniKS-UCS2-H Adobe Korea1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 1 def end def /CMapName /UniKS-UCS2-H def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25406] def /WMode 0 def 2 begincodespacerange <0000> endcodespacerange 1 beginnotdefrange <0000> <001f> 1 endnotdefrange 100 begincidrange <0020> <007e> 1 <00a1> <00a1> 208 <00a4> <00a4> 214 <00a7> <00a7> 155 <00a8> <00a8> 107 <00aa> <00aa> 668 <00ab> <00ab> 176 <00b0> <00b0> 138 <00b1> <00b1> 130 <00b2> <00b3> 843 <00b4> <00b4> 199 <00b6> <00b6> 244 <00b8> <00b8> 206 <00b9> <00b9> 842 <00ba> <00ba> 675 <00bb> <00bb> 177 <00bc> <00bc> 751 <00bd> <00bd> 748 <00be> <00be> 752 <00bf> <00bf> 209 <00c6> <00c6> 666 <00d0> <00d0> 667 <00d7> <00d7> 131 <00d8> <00d8> 673 <00de> <00de> 676 <00df> <00df> 768 <00e6> <00e6> 757 <00f0> <00f0> 759 <00f7> <00f7> 132 <00f8> <00f8> 766 <00fe> <00fe> 769 <0111> <0111> 758 <0126> <0126> 669 <0127> <0127> 760 <0131> <0131> 761 <0132> <0132> 670 <0133> <0133> 762 <0138> <0138> 763 <013f> <013f> 671 <0140> <0140> 764 <0141> <0141> 672 <0142> <0142> 765 <0149> <0149> 772 <014a> <014a> 678 <014b> <014b> 771 <0152> <0152> 674 <0153> <0153> 767 <0166> <0166> 677 <0167> <0167> 770 <02bc> <02bc> 8275 <02c7> <02c7> 201 <02d8> <02d8> 202 <02d9> <02d9> 205 <02da> <02da> 204 <02db> <02db> 207 <02dc> <02dc> 200 <02dd> <02dd> 203 <0391> <03a1> 471 <03a3> <03a9> 488 <03b1> <03c1> 495 <03c3> <03c9> 512 <0401> <0401> 1026 <0410> <0415> 1020 <0416> <0435> 1027 <0436> <044f> 1060 <0451> <0451> 1059 <2013> <2014> 109 <2016> <2016> 111 <2018> <2019> 114 <201b> <201b> 8238 <201c> <201d> 116 <201f> <201f> 8237 <2020> <2021> 245 <2022> <2022> 8607 <2025> <2026> 105 <2030> <2030> 216 <2032> <2033> 139 <2034> <2034> 8582 <2035> <2035> 9326 <2036> <2036> 9324 <2039> <203a> 8612 <203b> <203b> 156 <203c> <203c> 8763 <2042> <2042> 8599 <2074> <2074> 845 <207a> <207b> 8239 <207c> <207c> 8248 <207d> <207e> 8250 <207f> <207f> 846 <2081> <2084> 847 <2103> <2103> 141 <2109> <2109> 215 <2113> <2113> 590 <2116> <2116> 258 <2121> <2121> 263 <2122> <2122> 260 <2126> <2126> 643 <212b> <212b> 142 <2153> <2154> 749 <215b> <215e> 753 endcidrange 100 begincidrange <2160> <2169> 461 <2170> <2179> 451 <2190> <2191> 171 <2192> <2192> 170 <2193> <2194> 173 <2195> <2195> 247 <2196> <2196> 250 <2197> <2197> 248 <2198> <2198> 251 <2199> <2199> 249 <21b0> <21b0> 8868 <21b1> <21b1> 8865 <21b2> <21b2> 8864 <21b3> <21b3> 8869 <21b4> <21b4> 8867 <21bc> <21bc> 8884 <21c0> <21c0> 8885 <21c4> <21c5> 8896 <21cd> <21cd> 8816 <21cf> <21cf> 8815 <21d0> <21d0> 8814 <21d1> <21d1> 8854 <21d2> <21d2> 195 <21d3> <21d3> 8855 <21d4> <21d4> 196 <21e0> <21e0> 9190 <21e1> <21e1> 9192 <21e2> <21e2> 9191 <21e3> <21e3> 9193 <21e6> <21e6> 9198 <21e7> <21e7> 9200 <21e8> <21e8> 9199 <21e9> <21e9> 9201 <2200> <2200> 197 <2202> <2202> 151 <2203> <2203> 198 <2206> <2206> 8715 <2207> <2207> 152 <2208> <2208> 184 <2209> <2209> 8749 <220b> <220b> 185 <220c> <220c> 8750 <220f> <220f> 213 <2211> <2211> 212 <2213> <2213> 8726 <221a> <221a> 178 <221d> <221d> 180 <221e> <221e> 136 <221f> <221f> 8717 <2220> <2220> 148 <2222> <2222> 8738 <2225> <2226> 8719 <2227> <2228> 192 <2229> <2229> 191 <222a> <222a> 190 <222b> <222c> 182 <222e> <222e> 211 <2234> <2234> 137 <2235> <2235> 181 <2236> <2236> 210 <2237> <2237> 8321 <223d> <223d> 179 <2243> <2243> 8500 <2245> <2245> 8499 <2248> <2248> 8501 <2250> <2250> 8739 <2251> <2251> 8723 <2252> <2252> 154 <2253> <2253> 8722 <225a> <225a> 8753 <2260> <2260> 133 <2261> <2261> 153 <2262> <2262> 8734 <2264> <2265> 134 <2266> <2267> 8724 <226e> <226f> 8745 <2270> <2273> 8481 <2276> <2277> 8489 <2279> <2279> 8491 <227a> <227b> 8475 <2280> <2281> 8479 <2282> <2283> 188 <2284> <2284> 8748 <2285> <2285> 8747 <2286> <2287> 186 <228a> <228a> 8486 <228b> <228b> 8488 <2295> <2297> 8727 <22a3> <22a3> 8742 <22a4> <22a4> 8503 <22a5> <22a5> 149 <22bb> <22bc> 8751 <22ce> <22cf> 8477 <22da> <22db> 8492 <22ee> <22ee> 8320 <22ef> <22ef> 106 <2306> <2306> 8754 <2312> <2312> 150 <2314> <2314> 8731 <2460> <246e> 733 endcidrange 100 begincidrange <246f> <2473> 8791 <2474> <2482> 827 <2483> <2487> 9042 <249c> <24b5> 801 <24b6> <24cf> 8388 <24d0> <24e9> 707 <2500> <2500> 519 <2501> <2501> 530 <2502> <2502> 520 <2503> <2503> 531 <250c> <250c> 521 <250d> <250d> 558 <250e> <250e> 557 <250f> <250f> 532 <2510> <2510> 522 <2511> <2511> 552 <2512> <2512> 551 <2513> <2513> 533 <2514> <2514> 524 <2515> <2515> 556 <2516> <2516> 555 <2517> <2517> 535 <2518> <2518> 523 <2519> <2519> 554 <251a> <251a> 553 <251b> <251b> 534 <251c> <251c> 525 <251d> <251d> 546 <251e> <251f> 559 <2520> <2520> 541 <2521> <2522> 561 <2523> <2523> 536 <2524> <2524> 527 <2525> <2525> 548 <2526> <2527> 563 <2528> <2528> 543 <2529> <252a> 565 <252b> <252b> 538 <252c> <252c> 526 <252d> <252e> 567 <252f> <252f> 542 <2530> <2530> 547 <2531> <2532> 569 <2533> <2533> 537 <2534> <2534> 528 <2535> <2536> 571 <2537> <2537> 544 <2538> <2538> 549 <2539> <253a> 573 <253b> <253b> 539 <253c> <253c> 529 <253d> <253e> 575 <253f> <253f> 545 <2540> <2541> 577 <2542> <2542> 550 <2543> <254a> 579 <254b> <254b> 540 <2592> <2592> 232 <25a0> <25a0> 165 <25a1> <25a1> 164 <25a3> <25a3> 229 <25a4> <25a5> 233 <25a6> <25a6> 237 <25a7> <25a7> 236 <25a8> <25a8> 235 <25a9> <25a9> 238 <25b1> <25b1> 8736 <25b2> <25b2> 167 <25b3> <25b3> 166 <25b5> <25b5> 8780 <25b6> <25b6> 220 <25b7> <25b7> 219 <25b9> <25b9> 8781 <25bc> <25bc> 169 <25bd> <25bd> 168 <25bf> <25bf> 8779 <25c0> <25c0> 218 <25c1> <25c1> 217 <25c3> <25c3> 8782 <25c6> <25c6> 163 <25c7> <25c7> 162 <25c8> <25c8> 228 <25c9> <25c9> 227 <25ca> <25ca> 8787 <25cb> <25cb> 159 <25cc> <25cc> 8639 <25ce> <25ce> 161 <25cf> <25cf> 160 <25d0> <25d1> 230 <25e6> <25e6> 8775 <25ef> <25ef> 8633 <2605> <2605> 158 <2606> <2606> 157 <260e> <260e> 241 <260f> <260f> 240 <261c> <261c> 242 <261d> <261d> 9222 <261e> <261e> 243 <261f> <261f> 9223 <262f> <262f> 8664 endcidrange 100 begincidrange <2640> <2640> 147 <2642> <2642> 146 <2660> <2661> 222 <2663> <2663> 226 <2664> <2664> 221 <2665> <2665> 224 <2667> <2667> 225 <2668> <2668> 239 <2669> <266a> 253 <266c> <266c> 255 <266d> <266d> 252 <266f> <266f> 8594 <2716> <2716> 8631 <271a> <271a> 8630 <273d> <273d> 8604 <2756> <2756> 8637 <2776> <277f> 8673 <278a> <2793> 8342 <3000> <3002> 101 <3003> <3003> 108 <3008> <3011> 120 <3012> <3012> 8700 <3013> <3013> 175 <3014> <3015> 118 <3016> <3019> 8219 <301e> <301f> 9322 <3020> <3020> 8671 <3036> <3036> 8701 <3041> <3093> 851 <30a1> <30f6> 934 <30fb> <30fb> 104 <30fc> <30fc> 9330 <3131> <3163> 358 <3164> <3164> 101 <3165> <318e> 409 <3200> <321b> 773 <321c> <321c> 257 <3231> <3231> 8788 <3239> <3239> 8789 <3260> <327b> 679 <327f> <327f> 256 <328a> <328f> 9301 <3290> <3290> 9300 <3294> <3294> 9080 <329e> <329e> 8761 <32a5> <32a5> 9096 <3380> <3384> 627 <3388> <3389> 612 <338a> <338c> 646 <338d> <338f> 608 <3390> <3394> 638 <3395> <3397> 587 <3398> <3398> 591 <3399> <33a2> 597 <33a3> <33a6> 593 <33a7> <33a8> 615 <33a9> <33ac> 655 <33ad> <33af> 651 <33b0> <33b9> 617 <33ba> <33bf> 632 <33c0> <33c1> 644 <33c2> <33c2> 261 <33c3> <33c3> 662 <33c4> <33c4> 592 <33c5> <33c5> 650 <33c6> <33c6> 665 <33c7> <33c7> 259 <33c8> <33c8> 614 <33c9> <33c9> 663 <33ca> <33ca> 607 <33cb> <33cb> 8790 <33cf> <33cf> 611 <33d0> <33d0> 660 <33d3> <33d3> 661 <33d6> <33d6> 649 <33d8> <33d8> 262 <33db> <33db> 654 <33dc> <33dc> 664 <33dd> <33dd> 659 <4e00> <4e00> 6460 <4e01> <4e01> 6704 <4e03> <4e03> 7364 <4e07> <4e07> 4670 <4e08> <4e08> 6534 <4e09> <4e09> 5320 <4e0a> <4e0a> 5331 <4e0b> <4e0b> 7616 <4e0d> <4e0d> 5109 <4e11> <4e11> 7288 <4e14> <4e14> 7041 <4e15> <4e15> 5181 <4e16> <4e16> 5492 <4e18> <4e18> 3893 <4e19> <4e19> 5041 <4e1e> <4e1e> 5682 <4e2d> <4e2d> 6922 <4e32> <4e32> 3802 <4e38> <4e38> 7882 <4e39> <4e39> 4192 <4e3b> <4e3b> 6860 endcidrange 100 begincidrange <4e42> <4e42> 6029 <4e43> <4e43> 4154 <4e45> <4e45> 3894 <4e4b> <4e4b> 6942 <4e4d> <4e4d> 5241 <4e4e> <4e4e> 7800 <4e4f> <4e4f> 7614 <4e56> <4e56> 3855 <4e58> <4e58> 5683 <4e59> <4e59> 6380 <4e5d> <4e5d> 3895 <4e5e> <4e5e> 3613 <4e5f> <4e5f> 5862 <4e6b> <4e6b> 3500 <4e6d> <4e6d> 4329 <4e73> <4e73> 6309 <4e76> <4e76> 5092 <4e77> <4e77> 5315 <4e7e> <4e7e> 3601 <4e82> <4e82> 4389 <4e86> <4e86> 4551 <4e88> <4e88> 5934 <4e8b> <4e8b> 5242 <4e8c> <4e8c> 6413 <4e8e> <4e8e> 6197 <4e90> <4e90> 6252 <4e91> <4e91> 6238 <4e92> <4e92> 7801 <4e94> <4e94> 6049 <4e95> <4e95> 6705 <4e98> <4e98> 4058 <4e9b> <4e9b> 5243 <4e9e> <4e9e> 5775 <4ea1> <4ea1> 4696 <4ea2> <4ea2> 7670 <4ea4> <4ea4> 3868 <4ea5> <4ea5> 7685 <4ea6> <4ea6> 5947 <4ea8> <4ea8> 7771 <4eab> <4eab> 7710 <4eac> <4eac> 3660 <4ead> <4ead> 6706 <4eae> <4eae> 4427 <4eb6> <4eb6> 4193 <4eba> <4eba> 6443 <4ec0> <4ec0> 5771 <4ec1> <4ec1> 6444 <4ec4> <4ec4> 7331 <4ec7> <4ec7> 3896 <4eca> <4eca> 4038 <4ecb> <4ecb> 3560 <4ecd> <4ecd> 6479 <4ed4> <4ed4> 6483 <4ed5> <4ed5> 5244 <4ed6> <4ed6> 7380 <4ed7> <4ed7> 6535 <4ed8> <4ed8> 5110 <4ed9> <4ed9> 5418 <4edd> <4edd> 4331 <4edf> <4edf> 7148 <4ee3> <4ee3> 4250 <4ee4> <4ee4> 4489 <4ee5> <4ee5> 6414 <4ef0> <4ef0> 5833 <4ef2> <4ef2> 6923 <4ef6> <4ef6> 3602 <4ef7> <4ef7> 3561 <4efb> <4efb> 6469 <4f01> <4f01> 4062 <4f09> <4f09> 7671 <4f0a> <4f0a> 6415 <4f0b> <4f0b> 4051 <4f0d> <4f0d> 6050 <4f0e> <4f0e> 4063 <4f0f> <4f0f> 5074 <4f10> <4f10> 5005 <4f11> <4f11> 8005 <4f2f> <4f2f> 4988 <4f34> <4f34> 4905 <4f36> <4f36> 4490 <4f38> <4f38> 5735 <4f3a> <4f3a> 5245 <4f3c> <4f3c> 5246 <4f3d> <4f3d> 3436 <4f43> <4f43> 6643 <4f46> <4f46> 4194 <4f47> <4f47> 6591 <4f48> <4f48> 7544 <4f4d> <4f4d> 6284 <4f4e> <4f4e> 6592 <4f4f> <4f4f> 6861 <4f50> <4f50> 6854 <4f51> <4f51> 6198 <4f55> <4f55> 7617 <4f59> <4f59> 5935 <4f5a> <4f5a> 6461 <4f5b> <4f5b> 5171 <4f5c> <4f5c> 6509 <4f69> <4f69> 7502 <4f6f> <4f6f> 5879 endcidrange 100 begincidrange <4f70> <4f70> 4989 <4f73> <4f73> 3437 <4f76> <4f76> 4127 <4f7a> <4f7a> 6644 <4f7e> <4f7e> 6462 <4f7f> <4f7f> 5247 <4f81> <4f81> 5736 <4f83> <4f83> 3476 <4f84> <4f84> 7015 <4f86> <4f86> 4420 <4f88> <4f88> 7336 <4f8a> <4f8a> 3839 <4f8b> <4f8b> 4506 <4f8d> <4f8d> 5692 <4f8f> <4f8f> 6862 <4f91> <4f91> 6310 <4f96> <4f96> 4594 <4f98> <4f98> 7042 <4f9b> <4f9b> 3786 <4f9d> <4f9d> 6394 <4fae> <4fae> 4764 <4faf> <4faf> 7966 <4fb5> <4fb5> 7367 <4fb6> <4fb6> 4440 <4fbf> <4fbf> 7518 <4fc2> <4fc2> 3705 <4fc3> <4fc3> 7241 <4fc4> <4fc4> 5776 <4fc9> <4fc9> 6051 <4fca> <4fca> 6902 <4fce> <4fce> 6782 <4fd1> <4fd1> 6174 <4fd3> <4fd3> 3661 <4fd4> <4fd4> 7734 <4fd7> <4fd7> 5537 <4fda> <4fda> 4613 <4fdd> <4fdd> 5058 <4fdf> <4fdf> 5248 <4fe0> <4fe0> 7759 <4fe1> <4fe1> 5737 <4fee> <4fee> 5567 <4fef> <4fef> 5111 <4ff1> <4ff1> 3897 <4ff3> <4ff3> 4970 <4ff5> <4ff5> 7576 <4ff8> <4ff8> 5093 <4ffa> <4ffa> 5925 <5002> <5002> 5042 <5006> <5006> 4428 <5009> <5009> 7092 <500b> <500b> 3562 <500d> <500d> 4969 <5011> <5011> 4836 <5012> <5012> 4269 <5016> <5016> 7705 <5019> <5019> 7967 <501a> <501a> 6395 <501c> <501c> 7134 <501e> <501e> 3662 <501f> <501f> 7043 <5021> <5021> 7093 <5023> <5023> 4941 <5024> <5024> 7337 <5026> <5026> 3969 <5027> <5027> 6837 <5028> <5028> 3585 <502a> <502a> 6030 <502b> <502b> 4595 <502c> <502c> 7394 <502d> <502d> 6131 <503b> <503b> 5863 <5043> <5043> 5917 <5047> <5047> 3438 <5048> <5048> 3627 <5049> <5049> 6285 <504f> <504f> 7519 <5055> <5055> 7686 <505a> <505a> 6863 <505c> <505c> 6707 <5065> <5065> 3603 <5074> <5074> 7330 <5075> <5075> 6708 <5076> <5076> 6199 <5078> <5078> 7465 <5080> <5080> 3856 <5085> <5085> 5112 <508d> <508d> 4942 <5091> <5091> 3614 <5098> <5098> 5303 <5099> <5099> 5182 <50ac> <50ac> 7262 <50ad> <50ad> 6175 <50b2> <50b2> 6052 <50b3> <50b3> 6645 <50b5> <50b5> 7114 <50b7> <50b7> 5332 <50be> <50be> 3663 <50c5> <50c5> 4023 <50c9> <50c9> 7177 <50ca> <50ca> 5419 endcidrange 100 begincidrange <50cf> <50cf> 5333 <50d1> <50d1> 3869 <50d5> <50d5> 5075 <50d6> <50d6> 8035 <50da> <50da> 4552 <50de> <50de> 6286 <50e5> <50e5> 6140 <50e7> <50e7> 5684 <50ed> <50ed> 7082 <50f9> <50f9> 3439 <50fb> <50fb> 5020 <50ff> <50ff> 5249 <5100> <5100> 6396 <5101> <5101> 6903 <5104> <5104> 5912 <5106> <5106> 3664 <5109> <5109> 3617 <5112> <5112> 6311 <511f> <511f> 5334 <5121> <5121> 4543 <512a> <512a> 6200 <5132> <5132> 6593 <5137> <5137> 4441 <513a> <513a> 4133 <513c> <513c> 5926 <5140> <5140> 6089 <5141> <5141> 6359 <5143> <5143> 6255 <5144> <5144> 7772 <5145> <5145> 7306 <5146> <5146> 6783 <5147> <5147> 8013 <5148> <5148> 5420 <5149> <5149> 3840 <514b> <514b> 4016 <514c> <514c> 7431 <514d> <514d> 4735 <514e> <514e> 7449 <5152> <5152> 5777 <515c> <515c> 4348 <5162> <5162> 4059 <5165> <5165> 6477 <5167> <5167> 4155 <5168> <5168> 6646 <5169> <5169> 4429 <516a> <516a> 6312 <516b> <516b> 7499 <516c> <516c> 3787 <516d> <516d> 4591 <516e> <516e> 7791 <5171> <5171> 3788 <5175> <5175> 5043 <5176> <5176> 4064 <5177> <5177> 3898 <5178> <5178> 6647 <517c> <517c> 3654 <5180> <5180> 4065 <5186> <5186> 5933 <518a> <518a> 7126 <518d> <518d> 6570 <5192> <5192> 4765 <5195> <5195> 4736 <5197> <5197> 6176 <51a0> <51a0> 3819 <51a5> <51a5> 4748 <51aa> <51aa> 4733 <51ac> <51ac> 4332 <51b6> <51b6> 5864 <51b7> <51b7> 4424 <51bd> <51bd> 4477 <51c4> <51c4> 7130 <51c6> <51c6> 6904 <51c9> <51c9> 4430 <51cb> <51cb> 6784 <51cc> <51cc> 4607 <51cd> <51cd> 4333 <51dc> <51dc> 4606 <51dd> <51dd> 6390 <51de> <51de> 8036 <51e1> <51e1> 5009 <51f0> <51f0> 7904 <51f1> <51f1> 3563 <51f6> <51f6> 8014 <51f8> <51f8> 7167 <51f9> <51f9> 6141 <51fa> <51fa> 7303 <51fd> <51fd> 7651 <5200> <5200> 4270 <5203> <5203> 6445 <5206> <5206> 5152 <5207> <5207> 6684 <5208> <5208> 6031 <520a> <520a> 3477 <520e> <520e> 4837 <5211> <5211> 7773 <5217> <5217> 4478 <521d> <521d> 7214 <5224> <5224> 7490 <5225> <5225> 5037 <5229> <5229> 4614 endcidrange 100 begincidrange <522a> <522a> 5304 <522e> <522e> 3835 <5230> <5230> 4271 <5236> <5236> 6759 <5237> <5237> 5561 <5238> <5238> 3970 <5239> <5239> 7077 <523a> <523a> 6484 <523b> <523b> 3465 <5243> <5243> 7205 <5247> <5247> 7360 <524a> <524a> 5301 <524b> <524b> 4017 <524c> <524c> 4397 <524d> <524d> 6648 <5254> <5254> 7135 <5256> <5256> 5113 <525b> <525b> 3536 <525d> <525d> 4886 <5261> <5261> 5463 <5269> <5269> 6480 <526a> <526a> 6649 <526f> <526f> 5114 <5272> <5272> 7649 <5275> <5275> 7094 <527d> <527d> 7577 <527f> <527f> 7215 <5283> <5283> 7948 <5287> <5287> 4018 <5288> <5288> 5021 <5289> <5289> 4577 <528d> <528d> 3618 <5291> <5291> 6760 <5292> <5292> 3619 <529b> <529b> 4458 <529f> <529f> 3789 <52a0> <52a0> 3440 <52a3> <52a3> 4479 <52a4> <52a4> 4024 <52a9> <52a9> 6785 <52aa> <52aa> 4169 <52ab> <52ab> 3624 <52be> <52be> 7703 <52c1> <52c1> 3665 <52c3> <52c3> 4930 <52c5> <52c5> 7361 <52c7> <52c7> 6177 <52c9> <52c9> 4737 <52cd> <52cd> 3666 <52d2> <52d2> 4604 <52d5> <52d5> 4334 <52d6> <52d6> 6229 <52d8> <52d8> 3510 <52d9> <52d9> 4812 <52db> <52db> 7979 <52dd> <52dd> 5685 <52de> <52de> 4511 <52df> <52df> 4766 <52e2> <52e2> 5493 <52e3> <52e3> 6619 <52e4> <52e4> 4025 <52f3> <52f3> 7980 <52f5> <52f5> 4442 <52f8> <52f8> 3971 <52fa> <52fa> 6510 <52fb> <52fb> 4009 <52fe> <52fe> 3899 <52ff> <52ff> 4848 <5305> <5305> 7545 <5308> <5308> 8015 <530d> <530d> 7546 <530f> <530f> 7547 <5310> <5310> 5076 <5315> <5315> 5183 <5316> <5316> 7863 <5317> <5317> 5151 <5319> <5319> 5693 <5320> <5320> 6536 <5321> <5321> 3841 <5323> <5323> 3530 <532a> <532a> 5184 <532f> <532f> 7928 <5339> <5339> 7604 <533f> <533f> 4188 <5340> <5340> 3900 <5341> <5341> 5772 <5343> <5343> 7149 <5344> <5344> 6478 <5347> <5347> 5686 <5348> <5348> 6053 <5349> <5349> 7994 <534a> <534a> 4906 <534d> <534d> 4671 <5351> <5351> 5185 <5352> <5352> 6834 <5353> <5353> 7395 <5354> <5354> 7760 <5357> <5357> 4145 <535a> <535a> 4887 <535c> <535c> 5077 endcidrange 100 begincidrange <535e> <535e> 5031 <5360> <5360> 6692 <5366> <5366> 3852 <5368> <5368> 5450 <536f> <536f> 4800 <5370> <5370> 6446 <5371> <5371> 6287 <5374> <5374> 3466 <5375> <5375> 4390 <5377> <5377> 3972 <537d> <537d> 6926 <537f> <537f> 3667 <5384> <5384> 5851 <5393> <5393> 5840 <5398> <5398> 4615 <539a> <539a> 7968 <539f> <539f> 6256 <53a0> <53a0> 7332 <53a5> <53a5> 3979 <53a6> <53a6> 7618 <53ad> <53ad> 5989 <53bb> <53bb> 3586 <53c3> <53c3> 7083 <53c8> <53c8> 6201 <53c9> <53c9> 7044 <53ca> <53ca> 4052 <53cb> <53cb> 6202 <53cd> <53cd> 4907 <53d4> <53d4> 5628 <53d6> <53d6> 7316 <53d7> <53d7> 5568 <53db> <53db> 4908 <53e1> <53e1> 6032 <53e2> <53e2> 7251 <53e3> <53e3> 3901 <53e4> <53e4> 3729 <53e5> <53e5> 3902 <53e9> <53e9> 3730 <53ea> <53ea> 6943 <53eb> <53eb> 3994 <53ec> <53ec> 5500 <53ed> <53ed> 7500 <53ef> <53ef> 3441 <53f0> <53f0> 7432 <53f1> <53f1> 7016 <53f2> <53f2> 5250 <53f3> <53f3> 6203 <53f8> <53f8> 5251 <5403> <5403> 8023 <5404> <5404> 3467 <5408> <5408> 7663 <5409> <5409> 4128 <540a> <540a> 6620 <540c> <540c> 4335 <540d> <540d> 4749 <540e> <540e> 7969 <540f> <540f> 4616 <5410> <5410> 7450 <5411> <5411> 7711 <541b> <541b> 3953 <541d> <541d> 4638 <541f> <541f> 6381 <5420> <5420> 7534 <5426> <5426> 5115 <5429> <5429> 5153 <542b> <542b> 7652 <5433> <5433> 6055 <5438> <5438> 8030 <5439> <5439> 7317 <543b> <543b> 4838 <543c> <543c> 7970 <543e> <543e> 6054 <5442> <5442> 4443 <5448> <5448> 6709 <544a> <544a> 3731 <5451> <5451> 7408 <5468> <5468> 6867 <546a> <546a> 6866 <5471> <5471> 3732 <5473> <5473> 4851 <5475> <5475> 3442 <547b> <547b> 5738 <547c> <547c> 7802 <547d> <547d> 4750 <5480> <5480> 6594 <5486> <5486> 7548 <548c> <548c> 7864 <548e> <548e> 3903 <5490> <5490> 5116 <54a4> <54a4> 7381 <54a8> <54a8> 6485 <54ab> <54ab> 6944 <54ac> <54ac> 3870 <54b3> <54b3> 7687 <54b8> <54b8> 7653 <54bd> <54bd> 6447 <54c0> <54c0> 5841 <54c1> <54c1> 7590 <54c4> <54c4> 7853 <54c8> <54c8> 7664 endcidrange 100 begincidrange <54c9> <54c9> 6571 <54e1> <54e1> 6257 <54e5> <54e5> 3443 <54e8> <54e8> 7216 <54ed> <54ed> 3767 <54ee> <54ee> 7953 <54f2> <54f2> 7168 <54fa> <54fa> 7549 <5504> <5504> 7503 <5506> <5506> 5252 <5507> <5507> 6980 <550e> <550e> 4617 <5510> <5510> 4239 <551c> <551c> 4689 <552f> <552f> 6313 <5531> <5531> 7095 <5535> <5535> 5821 <553e> <553e> 7382 <5544> <5544> 7396 <5546> <5546> 5335 <554f> <554f> 4839 <5553> <5553> 3706 <5556> <5556> 4217 <555e> <555e> 5778 <5563> <5563> 7654 <557c> <557c> 6761 <5580> <5580> 3579 <5584> <5584> 5421 <5586> <5586> 7169 <5587> <5587> 4374 <5589> <5589> 7971 <558a> <558a> 7655 <5598> <5598> 7150 <5599> <5599> 7995 <559a> <559a> 7883 <559c> <559c> 8037 <559d> <559d> 3501 <55a7> <55a7> 7990 <55a9> <55a9> 6314 <55aa> <55aa> 5336 <55ab> <55ab> 4132 <55ac> <55ac> 3871 <55ae> <55ae> 4195 <55c5> <55c5> 7972 <55c7> <55c7> 5365 <55d4> <55d4> 6981 <55da> <55da> 6056 <55dc> <55dc> 4066 <55df> <55df> 7045 <55e3> <55e3> 5253 <55e4> <55e4> 7338 <55fd> <55fd> 5569 <55fe> <55fe> 6868 <5606> <5606> 7409 <5609> <5609> 3444 <5614> <5614> 3904 <5617> <5617> 5337 <562f> <562f> 5501 <5632> <5632> 6786 <5634> <5634> 7318 <5636> <5636> 5694 <5653> <5653> 7719 <5668> <5668> 4067 <566b> <566b> 8038 <5674> <5674> 5154 <5686> <5686> 7954 <56a5> <56a5> 5956 <56ac> <56ac> 5223 <56ae> <56ae> 7712 <56b4> <56b4> 5927 <56bc> <56bc> 6511 <56ca> <56ca> 4152 <56cd> <56cd> 8039 <56d1> <56d1> 7242 <56da> <56da> 5570 <56db> <56db> 5254 <56de> <56de> 7929 <56e0> <56e0> 6448 <56f0> <56f0> 3774 <56f9> <56f9> 4491 <56fa> <56fa> 3733 <5703> <5703> 7550 <5704> <5704> 5902 <5708> <5708> 3973 <570b> <570b> 3947 <570d> <570d> 6288 <5712> <5712> 6259 <5713> <5713> 6258 <5716> <5716> 4272 <5718> <5718> 4196 <571f> <571f> 7451 <5728> <5728> 6572 <572d> <572d> 3995 <5730> <5730> 6945 <573b> <573b> 4068 <5740> <5740> 6946 <5742> <5742> 7491 <5747> <5747> 4010 <574a> <574a> 4943 <574d> <574d> 4218 endcidrange 100 begincidrange <574e> <574e> 3511 <5750> <5750> 6855 <5751> <5751> 3581 <5761> <5761> 7474 <5764> <5764> 3775 <5766> <5766> 7410 <576a> <576a> 7529 <576e> <576e> 4252 <5770> <5770> 3668 <5775> <5775> 3905 <577c> <577c> 7397 <5782> <5782> 5571 <5788> <5788> 4251 <578b> <578b> 7774 <5793> <5793> 7688 <57a0> <57a0> 6373 <57a2> <57a2> 3906 <57a3> <57a3> 6260 <57c3> <57c3> 5842 <57c7> <57c7> 6178 <57c8> <57c8> 6905 <57cb> <57cb> 4708 <57ce> <57ce> 5474 <57df> <57df> 5948 <57e0> <57e0> 5117 <57f0> <57f0> 7115 <57f4> <57f4> 5720 <57f7> <57f7> 7032 <57f9> <57f9> 4971 <57fa> <57fa> 4069 <57fc> <57fc> 4070 <5800> <5800> 3959 <5802> <5802> 4240 <5805> <5805> 3637 <5806> <5806> 7459 <5808> <5808> 3537 <5809> <5809> 6355 <580a> <580a> 5793 <581e> <581e> 7187 <5821> <5821> 5059 <5824> <5824> 6762 <5827> <5827> 5957 <582a> <582a> 3512 <582f> <582f> 6142 <5830> <5830> 5918 <5831> <5831> 5060 <5834> <5834> 6537 <5835> <5835> 4273 <583a> <583a> 3707 <584a> <584a> 3857 <584b> <584b> 6002 <584f> <584f> 3564 <5851> <5851> 5502 <5854> <5854> 7424 <5857> <5857> 4274 <5858> <5858> 4241 <585a> <585a> 7252 <585e> <585e> 5362 <5861> <5861> 6650 <5862> <5862> 6057 <5864> <5864> 7981 <5875> <5875> 6982 <5879> <5879> 7084 <587c> <587c> 6651 <587e> <587e> 5629 <5883> <5883> 3669 <5885> <5885> 5373 <5889> <5889> 6179 <5893> <5893> 4801 <589c> <589c> 7265 <589e> <589e> 6931 <589f> <589f> 7720 <58a8> <58a8> 4834 <58a9> <58a9> 4319 <58ae> <58ae> 7383 <58b3> <58b3> 5155 <58ba> <58ba> 6058 <58bb> <58bb> 6538 <58be> <58be> 3478 <58c1> <58c1> 5022 <58c5> <58c5> 6090 <58c7> <58c7> 4197 <58ce> <58ce> 7982 <58d1> <58d1> 7630 <58d3> <58d3> 5829 <58d5> <58d5> 7803 <58d8> <58d8> 4564 <58d9> <58d9> 3842 <58de> <58de> 3858 <58df> <58df> 4536 <58e4> <58e4> 5880 <58eb> <58eb> 5255 <58ec> <58ec> 6470 <58ef> <58ef> 6539 <58f9> <58f9> 6463 <58fa> <58fa> 7804 <58fb> <58fb> 5374 <58fd> <58fd> 5572 <590f> <590f> 7619 <5914> <5914> 4071 endcidrange 100 begincidrange <5915> <5915> 5403 <5916> <5916> 6135 <5919> <5919> 5630 <591a> <591a> 4190 <591c> <591c> 5865 <5922> <5922> 4797 <5927> <5927> 4253 <5929> <5929> 7151 <592a> <592a> 7433 <592b> <592b> 5118 <592d> <592d> 6143 <592e> <592e> 5834 <5931> <5931> 5758 <5937> <5937> 6416 <593e> <593e> 7761 <5944> <5944> 5928 <5947> <5947> 4072 <5948> <5948> 4156 <5949> <5949> 5094 <594e> <594e> 3996 <594f> <594f> 6869 <5950> <5950> 7884 <5951> <5951> 3708 <5954> <5954> 5156 <5955> <5955> 7730 <5957> <5957> 7466 <595a> <595a> 7689 <5960> <5960> 6652 <5962> <5962> 5256 <5967> <5967> 6059 <596a> <596a> 7418 <596b> <596b> 6360 <596c> <596c> 6540 <596d> <596d> 5404 <596e> <596e> 5157 <5973> <5973> 4159 <5974> <5974> 4170 <5978> <5978> 3479 <597d> <597d> 7805 <5982> <5982> 5936 <5983> <5983> 5186 <5984> <5984> 4697 <598a> <598a> 6471 <5993> <5993> 4073 <5996> <5996> 6144 <5997> <5997> 4039 <5999> <5999> 4802 <59a5> <59a5> 7384 <59a8> <59a8> 4944 <59ac> <59ac> 7467 <59b9> <59b9> 4709 <59bb> <59bb> 7131 <59be> <59be> 7188 <59c3> <59c3> 6710 <59c6> <59c6> 4767 <59c9> <59c9> 6486 <59cb> <59cb> 5695 <59d0> <59d0> 6595 <59d1> <59d1> 3734 <59d3> <59d3> 5475 <59d4> <59d4> 6289 <59d9> <59d9> 6472 <59da> <59da> 6145 <59dc> <59dc> 3538 <59dd> <59dd> 6864 <59e6> <59e6> 3480 <59e8> <59e8> 6417 <59ea> <59ea> 7017 <59ec> <59ec> 8040 <59ee> <59ee> 7672 <59f8> <59f8> 5958 <59fb> <59fb> 6449 <59ff> <59ff> 6487 <5a01> <5a01> 6290 <5a03> <5a03> 6132 <5a11> <5a11> 5257 <5a18> <5a18> 4153 <5a1b> <5a1b> 6060 <5a1c> <5a1c> 4134 <5a1f> <5a1f> 5959 <5a20> <5a20> 5739 <5a25> <5a25> 5779 <5a29> <5a29> 4672 <5a36> <5a36> 7319 <5a3c> <5a3c> 7096 <5a41> <5a41> 4565 <5a46> <5a46> 7475 <5a49> <5a49> 6107 <5a5a> <5a5a> 7844 <5a62> <5a62> 5187 <5a66> <5a66> 5119 <5a92> <5a92> 4710 <5a9a> <5a9a> 4852 <5a9b> <5a9b> 6261 <5aa4> <5aa4> 5696 <5ac1> <5ac1> 3445 <5ac2> <5ac2> 5573 <5ac4> <5ac4> 6262 <5ac9> <5ac9> 7018 <5acc> <5acc> 7758 endcidrange 100 begincidrange <5ae1> <5ae1> 6621 <5ae6> <5ae6> 7673 <5ae9> <5ae9> 4181 <5b05> <5b05> 7865 <5b09> <5b09> 8041 <5b0b> <5b0b> 5422 <5b0c> <5b0c> 3872 <5b16> <5b16> 7535 <5b2a> <5b2a> 5224 <5b40> <5b40> 5338 <5b43> <5b43> 5881 <5b50> <5b50> 6488 <5b51> <5b51> 7754 <5b54> <5b54> 3790 <5b55> <5b55> 6481 <5b57> <5b57> 6489 <5b58> <5b58> 6832 <5b5a> <5b5a> 5120 <5b5c> <5b5c> 6490 <5b5d> <5b5d> 7955 <5b5f> <5b5f> 4727 <5b63> <5b63> 3709 <5b64> <5b64> 3735 <5b69> <5b69> 7690 <5b6b> <5b6b> 5546 <5b70> <5b70> 5631 <5b71> <5b71> 6522 <5b75> <5b75> 5121 <5b78> <5b78> 7631 <5b7a> <5b7a> 6315 <5b7c> <5b7c> 5923 <5b85> <5b85> 4266 <5b87> <5b87> 6204 <5b88> <5b88> 5574 <5b89> <5b89> 5807 <5b8b> <5b8b> 5553 <5b8c> <5b8c> 6108 <5b8f> <5b8f> 3864 <5b93> <5b93> 5078 <5b95> <5b95> 7427 <5b96> <5b96> 7950 <5b97> <5b97> 6838 <5b98> <5b98> 3820 <5b99> <5b99> 6870 <5b9a> <5b9a> 6711 <5b9b> <5b9b> 6109 <5b9c> <5b9c> 6397 <5ba2> <5ba2> 3580 <5ba3> <5ba3> 5423 <5ba4> <5ba4> 5759 <5ba5> <5ba5> 6316 <5ba6> <5ba6> 7885 <5bac> <5bac> 5476 <5bae> <5bae> 3963 <5bb0> <5bb0> 6573 <5bb3> <5bb3> 7691 <5bb4> <5bb4> 5960 <5bb5> <5bb5> 5503 <5bb6> <5bb6> 3446 <5bb8> <5bb8> 5740 <5bb9> <5bb9> 6180 <5bbf> <5bbf> 5632 <5bc0> <5bc0> 7116 <5bc2> <5bc2> 6622 <5bc3> <5bc3> 6263 <5bc4> <5bc4> 4074 <5bc5> <5bc5> 6450 <5bc6> <5bc6> 4883 <5bc7> <5bc7> 3907 <5bcc> <5bcc> 5122 <5bd0> <5bd0> 4711 <5bd2> <5bd2> 7635 <5bd3> <5bd3> 6205 <5bd4> <5bd4> 5721 <5bd7> <5bd7> 4168 <5bde> <5bde> 4664 <5bdf> <5bdf> 7078 <5be1> <5be1> 3803 <5be2> <5be2> 7368 <5be4> <5be4> 6061 <5be5> <5be5> 6146 <5be6> <5be6> 5760 <5be7> <5be7> 4167 <5be8> <5be8> 7117 <5be9> <5be9> 5762 <5beb> <5beb> 5258 <5bec> <5bec> 3821 <5bee> <5bee> 4553 <5bef> <5bef> 6906 <5bf5> <5bf5> 7253 <5bf6> <5bf6> 5061 <5bf8> <5bf8> 7247 <5bfa> <5bfa> 5259 <5c01> <5c01> 5095 <5c04> <5c04> 5260 <5c07> <5c07> 6541 <5c08> <5c08> 6653 <5c09> <5c09> 6291 <5c0a> <5c0a> 6833 <5c0b> <5c0b> 5763 endcidrange 100 begincidrange <5c0d> <5c0d> 4254 <5c0e> <5c0e> 4275 <5c0f> <5c0f> 5504 <5c11> <5c11> 5505 <5c16> <5c16> 7178 <5c19> <5c19> 5339 <5c24> <5c24> 6206 <5c28> <5c28> 4945 <5c31> <5c31> 7320 <5c38> <5c38> 5697 <5c39> <5c39> 6361 <5c3a> <5c3a> 7136 <5c3b> <5c3b> 3736 <5c3c> <5c3c> 4186 <5c3e> <5c3e> 4853 <5c3f> <5c3f> 4180 <5c40> <5c40> 3948 <5c45> <5c45> 3587 <5c46> <5c46> 3710 <5c48> <5c48> 3960 <5c4b> <5c4b> 6078 <5c4d> <5c4d> 5699 <5c4e> <5c4e> 5698 <5c51> <5c51> 5451 <5c55> <5c55> 6654 <5c5b> <5c5b> 5044 <5c60> <5c60> 4276 <5c62> <5c62> 4566 <5c64> <5c64> 7335 <5c65> <5c65> 4618 <5c6c> <5c6c> 5538 <5c6f> <5c6f> 4358 <5c71> <5c71> 5305 <5c79> <5c79> 8024 <5c90> <5c90> 4075 <5c91> <5c91> 6527 <5ca1> <5ca1> 3539 <5ca9> <5ca9> 5822 <5cab> <5cab> 5575 <5cac> <5cac> 3531 <5cb1> <5cb1> 4255 <5cb3> <5cb3> 5794 <5cb5> <5cb5> 7806 <5cb7> <5cb7> 4870 <5cb8> <5cb8> 5808 <5cba> <5cba> 4492 <5cbe> <5cbe> 6693 <5cc0> <5cc0> 5576 <5cd9> <5cd9> 7339 <5ce0> <5ce0> 5340 <5ce8> <5ce8> 5780 <5cef> <5cf0> 5096 <5cf4> <5cf4> 7735 <5cf6> <5cf6> 4277 <5cfb> <5cfb> 6907 <5cfd> <5cfd> 7762 <5d07> <5d07> 5671 <5d0d> <5d0d> 4421 <5d0e> <5d0e> 4076 <5d11> <5d11> 3776 <5d14> <5d14> 7263 <5d16> <5d16> 5843 <5d17> <5d17> 3540 <5d19> <5d19> 4596 <5d27> <5d27> 5672 <5d29> <5d29> 5175 <5d4b> <5d4b> 4854 <5d4c> <5d4c> 3513 <5d50> <5d50> 4399 <5d69> <5d69> 5673 <5d6c> <5d6c> 6136 <5d6f> <5d6f> 7046 <5d87> <5d87> 3908 <5d8b> <5d8b> 4278 <5d9d> <5d9d> 4365 <5da0> <5da0> 3873 <5da2> <5da2> 6147 <5daa> <5daa> 5931 <5db8> <5db8> 6003 <5dba> <5dba> 4493 <5dbc> <5dbc> 5375 <5dbd> <5dbd> 5795 <5dcd> <5dcd> 6137 <5dd2> <5dd2> 4673 <5dd6> <5dd6> 5823 <5ddd> <5ddd> 7152 <5dde> <5dde> 6871 <5de1> <5de1> 5640 <5de2> <5de2> 5506 <5de5> <5de5> 3791 <5de6> <5de6> 6856 <5de7> <5de7> 3874 <5de8> <5de8> 3588 <5deb> <5deb> 4813 <5dee> <5dee> 7047 <5df1> <5df1> 4077 <5df2> <5df2> 6418 <5df3> <5df3> 5261 <5df4> <5df4> 7476 <5df7> <5df7> 7674 endcidrange 100 begincidrange <5dfd> <5dfd> 5547 <5dfe> <5dfe> 3604 <5e02> <5e02> 5700 <5e03> <5e03> 7551 <5e06> <5e06> 5010 <5e0c> <5e0c> 8042 <5e11> <5e11> 7428 <5e16> <5e16> 7189 <5e19> <5e19> 7019 <5e1b> <5e1b> 4990 <5e1d> <5e1d> 6763 <5e25> <5e25> 5577 <5e2b> <5e2b> 5262 <5e2d> <5e2d> 5405 <5e33> <5e33> 6542 <5e36> <5e36> 4256 <5e38> <5e38> 5341 <5e3d> <5e3d> 4768 <5e3f> <5e3f> 7973 <5e40> <5e40> 6712 <5e44> <5e44> 5796 <5e45> <5e45> 7571 <5e47> <5e47> 4946 <5e4c> <5e4c> 7905 <5e55> <5e55> 4665 <5e5f> <5e5f> 7340 <5e61> <5e61> 4996 <5e62> <5e62> 4242 <5e63> <5e63> 7536 <5e72> <5e72> 3481 <5e73> <5e73> 7530 <5e74> <5e74> 4160 <5e77> <5e77> 5045 <5e78> <5e78> 7706 <5e79> <5e79> 3482 <5e7b> <5e7b> 7886 <5e7c> <5e7d> 6317 <5e7e> <5e7e> 4078 <5e84> <5e84> 6543 <5e87> <5e87> 5188 <5e8a> <5e8a> 5342 <5e8f> <5e8f> 5376 <5e95> <5e95> 6596 <5e97> <5e97> 6694 <5e9a> <5e9a> 3670 <5e9c> <5e9c> 5123 <5ea0> <5ea0> 5343 <5ea6> <5ea6> 4279 <5ea7> <5ea7> 6857 <5eab> <5eab> 3737 <5ead> <5ead> 6713 <5eb5> <5eb5> 5824 <5eb6> <5eb6> 5377 <5eb7> <5eb7> 3541 <5eb8> <5eb8> 6181 <5ebe> <5ebe> 6319 <5ec2> <5ec2> 5344 <5ec8> <5ec8> 7620 <5ec9> <5ec9> 4483 <5eca> <5eca> 4412 <5ed0> <5ed0> 3909 <5ed3> <5ed3> 3815 <5ed6> <5ed6> 4554 <5eda> <5eda> 6872 <5edb> <5edb> 6655 <5edf> <5edf> 4803 <5ee0> <5ee0> 7097 <5ee2> <5ee2> 7537 <5ee3> <5ee3> 3843 <5eec> <5eec> 4444 <5ef3> <5ef3> 7197 <5ef6> <5ef6> 5961 <5ef7> <5ef7> 6714 <5efa> <5efa> 3605 <5efb> <5efb> 7930 <5f01> <5f01> 5032 <5f04> <5f04> 4537 <5f0a> <5f0a> 7538 <5f0f> <5f0f> 5722 <5f11> <5f11> 5701 <5f13> <5f13> 3964 <5f14> <5f14> 6787 <5f15> <5f15> 6451 <5f17> <5f17> 5172 <5f18> <5f18> 7854 <5f1b> <5f1b> 6419 <5f1f> <5f1f> 6764 <5f26> <5f26> 7736 <5f27> <5f27> 7807 <5f29> <5f29> 4171 <5f31> <5f31> 5872 <5f35> <5f35> 6544 <5f3a> <5f3a> 3542 <5f3c> <5f3c> 7605 <5f48> <5f48> 7411 <5f4a> <5f4a> 3543 <5f4c> <5f4c> 4855 <5f4e> <5f4e> 4674 <5f56> <5f56> 4198 <5f57> <5f57> 7792 endcidrange 100 begincidrange <5f59> <5f59> 7997 <5f5b> <5f5b> 6420 <5f62> <5f62> 7775 <5f66> <5f66> 5919 <5f67> <5f67> 6230 <5f69> <5f69> 7118 <5f6a> <5f6a> 7578 <5f6b> <5f6b> 6788 <5f6c> <5f6c> 5225 <5f6d> <5f6d> 7513 <5f70> <5f70> 7098 <5f71> <5f71> 6004 <5f77> <5f77> 4947 <5f79> <5f79> 5949 <5f7c> <5f7c> 7597 <5f7f> <5f7f> 5173 <5f80> <5f80> 6126 <5f81> <5f81> 6715 <5f85> <5f85> 4257 <5f87> <5f87> 5641 <5f8a> <5f8a> 7931 <5f8b> <5f8b> 4600 <5f8c> <5f8c> 7974 <5f90> <5f90> 5378 <5f91> <5f91> 3671 <5f92> <5f92> 4280 <5f97> <5f97> 4364 <5f98> <5f98> 4972 <5f99> <5f99> 5263 <5f9e> <5f9e> 6839 <5fa0> <5fa0> 4422 <5fa1> <5fa1> 5903 <5fa8> <5fa8> 7906 <5fa9> <5fa9> 5079 <5faa> <5faa> 5642 <5fae> <5fae> 4856 <5fb5> <5fb5> 7038 <5fb7> <5fb7> 4267 <5fb9> <5fb9> 7170 <5fbd> <5fbd> 7998 <5fc3> <5fc3> 5764 <5fc5> <5fc5> 7606 <5fcc> <5fcc> 4079 <5fcd> <5fcd> 6452 <5fd6> <5fd6> 7248 <5fd7> <5fd7> 6947 <5fd8> <5fd9> 4698 <5fe0> <5fe0> 7307 <5feb> <5feb> 7379 <5ff5> <5ff5> 4163 <5ffd> <5ffd> 7850 <5fff> <5fff> 5158 <600f> <600f> 5835 <6012> <6012> 4172 <6016> <6016> 7552 <601c> <601c> 4494 <601d> <601d> 5264 <6020> <6020> 7434 <6021> <6021> 6421 <6025> <6025> 4053 <6027> <6027> 5477 <6028> <6028> 6264 <602a> <602a> 3859 <602f> <602f> 3625 <6041> <6041> 6473 <6042> <6042> 5643 <6043> <6043> 5702 <604d> <604d> 7907 <6050> <6050> 3792 <6052> <6052> 7675 <6055> <6055> 5379 <6059> <6059> 5882 <605d> <605d> 3836 <6062> <6062> 7932 <6063> <6063> 6491 <6064> <6064> 8010 <6065> <6065> 7341 <6068> <6068> 7636 <6069> <6069> 6374 <606a> <606a> 3468 <606c> <606c> 4164 <606d> <606d> 3793 <606f> <606f> 5723 <6070> <6070> 8031 <6085> <6085> 5985 <6089> <6089> 5761 <608c> <608c> 6765 <608d> <608d> 7637 <6094> <6094> 7933 <6096> <6096> 7504 <609a> <609a> 5554 <609b> <609b> 6656 <609f> <609f> 6062 <60a0> <60a0> 6320 <60a3> <60a3> 7887 <60a4> <60a4> 7254 <60a7> <60a7> 4619 <60b0> <60b0> 6840 <60b2> <60b2> 5189 <60b3> <60b3> 4268 endcidrange 100 begincidrange <60b4> <60b4> 7312 <60b6> <60b6> 4871 <60b8> <60b8> 3711 <60bc> <60bc> 4281 <60bd> <60bd> 7132 <60c5> <60c5> 6716 <60c7> <60c7> 4320 <60d1> <60d1> 7841 <60da> <60da> 7851 <60dc> <60dc> 5406 <60df> <60df> 6321 <60e0> <60e0> 7793 <60e1> <60e1> 5797 <60f0> <60f0> 7385 <60f1> <60f1> 4178 <60f3> <60f3> 5345 <60f6> <60f6> 7908 <60f9> <60f9> 5866 <60fa> <60fa> 5478 <60fb> <60fb> 7333 <6101> <6101> 5578 <6106> <6106> 3606 <6108> <6109> 6322 <610d> <610d> 4872 <610e> <610e> 7517 <610f> <610f> 6398 <6115> <6115> 5798 <611a> <611a> 6207 <611b> <611b> 5844 <611f> <611f> 3514 <6127> <6127> 3860 <6130> <6130> 7909 <6134> <6134> 7099 <6137> <6137> 3565 <613c> <613c> 5741 <613e> <613e> 3566 <613f> <613f> 6265 <6142> <6142> 6182 <6144> <6144> 4601 <6147> <6147> 6375 <6148> <6148> 6492 <614a> <614a> 3655 <614b> <614b> 7435 <614c> <614c> 7910 <6153> <6153> 7579 <6155> <6155> 4769 <6158> <6159> 7085 <615d> <615d> 7471 <615f> <615f> 7453 <6162> <6162> 4675 <6163> <6163> 3822 <6164> <6164> 3469 <6167> <6167> 7794 <6168> <6168> 3567 <616b> <616b> 6841 <616e> <616e> 4445 <6170> <6170> 6292 <6176> <6176> 3672 <6177> <6177> 3544 <617d> <617d> 7137 <617e> <617e> 6168 <6181> <6181> 7255 <6182> <6182> 6208 <618a> <618a> 5190 <618e> <618e> 6932 <6190> <6190> 4465 <6191> <6191> 5237 <6194> <6194> 7217 <6198> <6198> 8044 <6199> <6199> 8043 <619a> <619a> 7412 <61a4> <61a4> 5159 <61a7> <61a7> 4336 <61a9> <61a9> 3628 <61ab> <61ab> 4873 <61ac> <61ac> 3673 <61ae> <61ae> 4814 <61b2> <61b2> 7723 <61b6> <61b6> 5913 <61ba> <61ba> 4219 <61be> <61be> 3515 <61c3> <61c3> 4026 <61c7> <61c7> 3483 <61c8> <61c8> 7692 <61c9> <61c9> 6391 <61ca> <61ca> 6063 <61cb> <61cb> 4815 <61e6> <61e6> 4135 <61f2> <61f2> 7039 <61f6> <61f6> 4375 <61f7> <61f7> 7934 <61f8> <61f8> 7737 <61fa> <61fa> 7087 <61fc> <61fc> 3910 <61ff> <61ff> 6399 <6200> <6200> 4466 <6207> <6207> 4243 <6208> <6208> 3804 <620a> <620a> 4816 <620c> <620c> 5667 endcidrange 100 begincidrange <620d> <620d> 5579 <620e> <620e> 6369 <6210> <6210> 5479 <6211> <6211> 5781 <6212> <6212> 3712 <6216> <6216> 7842 <621a> <621a> 7138 <621f> <621f> 4019 <6221> <6221> 3516 <622a> <622a> 6685 <622e> <622e> 4592 <6230> <6230> 6657 <6231> <6231> 8045 <6234> <6234> 4258 <6236> <6236> 7808 <623e> <623e> 4446 <623f> <623f> 4948 <6240> <6240> 5507 <6241> <6241> 7520 <6247> <6247> 5424 <6248> <6248> 7809 <6249> <6249> 5191 <624b> <624b> 5580 <624d> <624d> 6574 <6253> <6253> 7386 <6258> <6258> 7398 <626e> <626e> 5160 <6271> <6271> 4054 <6276> <6276> 5124 <6279> <6279> 5192 <627c> <627c> 5852 <627f> <627f> 5687 <6280> <6280> 4080 <6284> <6284> 7218 <6289> <6289> 3648 <628a> <628a> 7477 <6291> <6291> 5914 <6292> <6292> 5380 <6295> <6295> 7468 <6297> <6297> 7676 <6298> <6298> 6686 <629b> <629b> 7553 <62ab> <62ab> 7598 <62b1> <62b1> 7554 <62b5> <62b5> 6597 <62b9> <62b9> 4690 <62bc> <62bc> 5830 <62bd> <62bd> 7266 <62c2> <62c2> 5174 <62c7> <62c7> 4817 <62c8> <62c8> 4165 <62c9> <62c9> 4409 <62cc> <62cc> 4909 <62cd> <62cd> 4888 <62cf> <62cf> 4136 <62d0> <62d0> 3861 <62d2> <62d2> 3589 <62d3> <62d3> 7139 <62d4> <62d4> 4931 <62d6> <62d6> 7387 <62d7> <62d7> 6148 <62d8> <62d8> 3911 <62d9> <62d9> 6835 <62db> <62db> 7219 <62dc> <62dc> 4973 <62ec> <62ec> 3837 <62ed> <62ed> 5724 <62ee> <62ee> 4129 <62ef> <62ef> 6934 <62f1> <62f1> 3794 <62f3> <62f3> 3974 <62f7> <62f7> 3738 <62fe> <62fe> 5678 <62ff> <62ff> 4137 <6301> <6301> 6948 <6307> <6307> 6949 <6309> <6309> 5809 <6311> <6311> 4282 <632b> <632b> 6858 <632f> <632f> 6983 <633a> <633a> 6717 <633b> <633b> 5963 <633d> <633d> 4676 <633e> <633e> 7763 <6349> <6349> 7055 <634c> <634c> 7501 <634f> <634f> 4143 <6350> <6350> 5962 <6355> <6355> 7555 <6367> <6367> 5098 <6368> <6368> 5265 <636e> <636e> 3590 <6372> <6372> 3975 <6377> <6377> 7190 <637a> <637a> 4144 <637b> <637b> 4166 <637f> <637f> 5381 <6383> <6383> 5508 <6388> <6388> 5581 <6389> <6389> 4283 endcidrange 100 begincidrange <638c> <638c> 6545 <6392> <6392> 4974 <6396> <6396> 5853 <6398> <6398> 3961 <639b> <639b> 3853 <63a0> <63a0> 4425 <63a1> <63a1> 7119 <63a2> <63a2> 7420 <63a5> <63a5> 6701 <63a7> <63a7> 3795 <63a8> <63a8> 7267 <63a9> <63a9> 5929 <63aa> <63aa> 6789 <63c0> <63c0> 3484 <63c4> <63c4> 6324 <63c6> <63c6> 3997 <63cf> <63cf> 4804 <63d0> <63d0> 6766 <63d6> <63d6> 6387 <63da> <63da> 5883 <63db> <63db> 7888 <63e1> <63e1> 5799 <63ed> <63ed> 3629 <63ee> <63ee> 7999 <63f4> <63f4> 6266 <63f6> <63f6> 5867 <63f7> <63f7> 5327 <640d> <640d> 5548 <640f> <640f> 4889 <6414> <6414> 5509 <6416> <6416> 6149 <6417> <6417> 4284 <641c> <641c> 5582 <6422> <6422> 6984 <642c> <642c> 4910 <642d> <642d> 7425 <643a> <643a> 8006 <643e> <643e> 7056 <6458> <6458> 6623 <6460> <6460> 7256 <6469> <6469> 4656 <646f> <646f> 6950 <6478> <6479> 4770 <647a> <647a> 6702 <6488> <6488> 4512 <6491> <6491> 7447 <6492> <6492> 5316 <6493> <6493> 6150 <649a> <649a> 4161 <649e> <649e> 4244 <64a4> <64a4> 7171 <64a5> <64a5> 4932 <64ab> <64ab> 4818 <64ad> <64ad> 7478 <64ae> <64ae> 7261 <64b0> <64b0> 7062 <64b2> <64b2> 4890 <64bb> <64bb> 4212 <64c1> <64c1> 6091 <64c4> <64c4> 4513 <64c5> <64c5> 7153 <64c7> <64c7> 7445 <64ca> <64ca> 3630 <64cd> <64cd> 6790 <64ce> <64ce> 3674 <64d2> <64d2> 4040 <64d4> <64d4> 4220 <64d8> <64d8> 5023 <64da> <64da> 3591 <64e1> <64e1> 4259 <64e2> <64e2> 7399 <64e5> <64e5> 4400 <64e6> <64e6> 7079 <64e7> <64e7> 3592 <64ec> <64ec> 6400 <64f2> <64f2> 7140 <64f4> <64f4> 7877 <64fa> <64fa> 7479 <64fe> <64fe> 6151 <6500> <6500> 4911 <6504> <6504> 7448 <6518> <6518> 5884 <651d> <651d> 5471 <6523> <6523> 4467 <652a> <652a> 3875 <652b> <652b> 7878 <652c> <652c> 4401 <652f> <652f> 6951 <6536> <6536> 5583 <6537> <6537> 3739 <6538> <6538> 6325 <6539> <6539> 3568 <653b> <653b> 3796 <653e> <653e> 4949 <653f> <653f> 6718 <6545> <6545> 3740 <6548> <6548> 7956 <654d> <654d> 5382 <654e> <654e> 3876 <654f> <654f> 4874 endcidrange 100 begincidrange <6551> <6551> 3912 <6556> <6556> 6064 <6557> <6557> 7505 <655e> <655e> 7100 <6562> <6562> 3517 <6563> <6563> 5306 <6566> <6566> 4321 <656c> <656c> 3675 <656d> <656d> 5885 <6572> <6572> 3741 <6574> <6574> 6719 <6575> <6575> 6624 <6577> <6577> 5125 <6578> <6578> 5584 <657e> <657e> 5425 <6582> <6582> 4484 <6583> <6583> 7539 <6585> <6585> 7957 <6587> <6587> 4840 <658c> <658c> 5226 <6590> <6590> 5193 <6591> <6591> 4912 <6597> <6597> 4349 <6599> <6599> 4555 <659b> <659b> 3768 <659c> <659c> 5266 <659f> <659f> 7030 <65a1> <65a1> 5817 <65a4> <65a4> 4027 <65a5> <65a5> 7141 <65a7> <65a7> 5126 <65ab> <65ab> 6512 <65ac> <65ac> 7088 <65af> <65af> 5267 <65b0> <65b0> 5742 <65b7> <65b7> 4199 <65b9> <65b9> 4950 <65bc> <65bc> 5904 <65bd> <65bd> 5703 <65c1> <65c1> 4951 <65c5> <65c5> 4447 <65cb> <65cb> 5426 <65cc> <65cc> 6720 <65cf> <65cf> 6828 <65d2> <65d2> 4578 <65d7> <65d7> 4081 <65e0> <65e0> 4819 <65e3> <65e3> 4082 <65e5> <65e5> 6464 <65e6> <65e6> 4200 <65e8> <65e8> 6952 <65e9> <65e9> 6791 <65ec> <65ec> 5644 <65ed> <65ed> 6231 <65f1> <65f1> 7638 <65f4> <65f4> 6209 <65fa> <65fa> 6127 <65fb> <65fc> 4875 <65fd> <65fd> 4322 <65ff> <65ff> 6065 <6606> <6606> 3777 <6607> <6607> 5688 <6609> <6609> 4952 <660a> <660a> 7810 <660c> <660c> 7101 <660e> <660e> 4751 <660f> <660f> 7845 <6610> <6610> 5161 <6611> <6611> 4041 <6613> <6613> 5950 <6614> <6614> 5407 <6615> <6615> 8019 <661e> <661e> 5046 <661f> <661f> 5480 <6620> <6620> 6005 <6625> <6625> 7300 <6627> <6627> 4712 <6628> <6628> 6513 <662d> <662d> 5510 <662f> <662f> 5704 <6630> <6630> 7621 <6631> <6631> 6232 <6634> <6634> 4805 <6636> <6636> 7102 <663a> <663a> 5047 <663b> <663b> 5836 <6641> <6641> 6792 <6642> <6642> 5705 <6643> <6644> 7911 <6649> <6649> 6985 <664b> <664b> 6986 <664f> <664f> 5810 <6659> <6659> 6908 <665b> <665b> 7738 <665d> <665d> 6873 <665e> <665e> 8046 <665f> <665f> 5481 <6664> <6664> 6066 <6665> <6665> 7890 <6666> <6666> 7935 endcidrange 100 begincidrange <6667> <6667> 7811 <6668> <6668> 5743 <6669> <6669> 4677 <666b> <666b> 7400 <666e> <666e> 5062 <666f> <666f> 3676 <6673> <6673> 5408 <6674> <6674> 7198 <6676> <6676> 6721 <6677> <6677> 3990 <6678> <6678> 6722 <667a> <667a> 6953 <6684> <6684> 7991 <6687> <6687> 3447 <6688> <6688> 7988 <6689> <6689> 8000 <668e> <668e> 6006 <6690> <6690> 6293 <6691> <6691> 5383 <6696> <6696> 4140 <6697> <6697> 5825 <6698> <6698> 5886 <669d> <669d> 4752 <66a0> <66a0> 3742 <66a2> <66a2> 7103 <66ab> <66ab> 6528 <66ae> <66ae> 4772 <66b2> <66b2> 6546 <66b3> <66b3> 7795 <66b4> <66b4> 7572 <66b9> <66b9> 5464 <66bb> <66bb> 3677 <66be> <66be> 4323 <66c4> <66c4> 5999 <66c6> <66c6> 4459 <66c7> <66c7> 4221 <66c9> <66c9> 7958 <66d6> <66d6> 5845 <66d9> <66d9> 5384 <66dc> <66dc> 6152 <66dd> <66dd> 7573 <66e0> <66e0> 3844 <66e6> <66e6> 8047 <66f0> <66f0> 6125 <66f2> <66f2> 3769 <66f3> <66f3> 6033 <66f4> <66f4> 3678 <66f7> <66f7> 3502 <66f8> <66f8> 5385 <66f9> <66f9> 6794 <66fa> <66fa> 6793 <66fc> <66fc> 4678 <66fe> <66fe> 6933 <66ff> <66ff> 7206 <6700> <6700> 7264 <6703> <6703> 7936 <6708> <6708> 6281 <6709> <6709> 6326 <670b> <670b> 5176 <670d> <670d> 5080 <6714> <6714> 5302 <6715> <6715> 7031 <6717> <6717> 4413 <671b> <671b> 4700 <671d> <671d> 6795 <671e> <671f> 4083 <6726> <6726> 4798 <6727> <6727> 4538 <6728> <6728> 4788 <672a> <672a> 4857 <672b> <672b> 4691 <672c> <672c> 5091 <672d> <672d> 7080 <672e> <672e> 7304 <6731> <6731> 6874 <6734> <6734> 4891 <6736> <6736> 7388 <673a> <673a> 3984 <673d> <673d> 7975 <6746> <6746> 3485 <6749> <6749> 5321 <674e> <674e> 4620 <674f> <674f> 7707 <6750> <6750> 6575 <6751> <6751> 7249 <6753> <6753> 7580 <6756> <6756> 6547 <675c> <675c> 4350 <675e> <675e> 4085 <675f> <675f> 5539 <676d> <676d> 7677 <676f> <676f> 4975 <6770> <6770> 3615 <6771> <6771> 4337 <6773> <6773> 4806 <6775> <6775> 6598 <6777> <6777> 7480 <677b> <677b> 4183 <677e> <677e> 5555 <677f> <677f> 7492 endcidrange 100 begincidrange <6787> <6787> 5194 <6789> <6789> 6128 <678b> <678b> 4953 <678f> <678f> 4146 <6790> <6790> 5409 <6793> <6793> 4351 <6795> <6795> 7369 <6797> <6797> 4647 <679a> <679a> 4713 <679c> <679c> 3805 <679d> <679d> 6954 <67af> <67af> 3743 <67b0> <67b0> 7531 <67b3> <67b3> 6955 <67b6> <67b7> 3448 <67b8> <67b8> 3913 <67be> <67be> 5706 <67c4> <67c4> 5048 <67cf> <67cf> 4991 <67d0> <67d0> 4773 <67d1> <67d1> 3518 <67d2> <67d2> 7365 <67d3> <67d3> 5990 <67d4> <67d4> 6327 <67da> <67da> 6328 <67dd> <67dd> 7401 <67e9> <67e9> 3914 <67ec> <67ec> 3486 <67ef> <67ef> 3450 <67f0> <67f0> 4157 <67f1> <67f1> 6875 <67f3> <67f3> 4579 <67f4> <67f4> 5707 <67f5> <67f5> 7127 <67f6> <67f6> 5268 <67fb> <67fb> 5269 <67fe> <67fe> 6723 <6812> <6812> 5645 <6813> <6813> 6658 <6816> <6816> 5386 <6817> <6817> 4602 <6821> <6821> 3877 <6822> <6822> 4992 <682a> <682a> 6876 <682f> <682f> 6233 <6838> <6838> 7704 <6839> <6839> 4028 <683c> <683c> 3631 <683d> <683d> 6576 <6840> <6840> 3616 <6841> <6841> 7678 <6842> <6842> 3713 <6843> <6843> 4285 <6848> <6848> 5811 <684e> <684e> 7020 <6850> <6850> 4338 <6851> <6851> 5346 <6853> <6853> 7891 <6854> <6854> 4130 <686d> <686d> 6987 <6876> <6876> 7454 <687f> <687f> 3487 <6881> <6881> 4431 <6885> <6885> 4714 <688f> <688f> 3770 <6893> <6893> 6577 <6894> <6894> 7342 <6897> <6897> 3679 <689d> <689d> 6796 <689f> <689f> 7959 <68a1> <68a1> 6110 <68a2> <68a2> 7220 <68a7> <68a7> 6067 <68a8> <68a8> 4621 <68ad> <68ad> 5270 <68af> <68af> 6767 <68b0> <68b0> 3714 <68b1> <68b1> 3778 <68b3> <68b3> 5511 <68b5> <68b5> 5011 <68b6> <68b6> 4858 <68c4> <68c4> 4087 <68c5> <68c5> 5049 <68c9> <68c9> 4738 <68cb> <68cb> 4086 <68cd> <68cd> 3779 <68d2> <68d2> 5099 <68d5> <68d5> 6842 <68d7> <68d7> 6797 <68d8> <68d8> 4020 <68da> <68da> 5177 <68df> <68df> 4339 <68e0> <68e0> 4245 <68e7> <68e7> 6523 <68e8> <68e8> 3715 <68ee> <68ee> 5322 <68f2> <68f2> 5387 <68f9> <68f9> 4286 <68fa> <68fa> 3823 <6900> <6900> 6111 endcidrange 100 begincidrange <6905> <6905> 6401 <690d> <690d> 5725 <690e> <690e> 7268 <6912> <6912> 7221 <6927> <6927> 4753 <6930> <6930> 5868 <693d> <693d> 5964 <693f> <693f> 7301 <694a> <694a> 5887 <6953> <6953> 7592 <6954> <6954> 5452 <6955> <6955> 7389 <6957> <6957> 3607 <6959> <6959> 4820 <695a> <695a> 7222 <695e> <695e> 4608 <6960> <6960> 4147 <6961> <6962> 6329 <6963> <6963> 4859 <6968> <6968> 6724 <696b> <696b> 6928 <696d> <696d> 5932 <696e> <696e> 6599 <696f> <696f> 5646 <6975> <6975> 4021 <6977> <6977> 7693 <6978> <6978> 7269 <6979> <6979> 6007 <6995> <6995> 6183 <699b> <699b> 6988 <699c> <699c> 4954 <69a5> <69a5> 7913 <69a7> <69a7> 5195 <69ae> <69ae> 6008 <69b4> <69b4> 4580 <69bb> <69bb> 7426 <69c1> <69c1> 3744 <69c3> <69c3> 4913 <69cb> <69cb> 3915 <69cc> <69cc> 7460 <69cd> <69cd> 7104 <69d0> <69d0> 3862 <69e8> <69e8> 3816 <69ea> <69ea> 3569 <69fb> <69fb> 3998 <69fd> <69fd> 6798 <69ff> <69ff> 4029 <6a02> <6a02> 5800 <6a0a> <6a0a> 4997 <6a11> <6a11> 4432 <6a13> <6a13> 4567 <6a17> <6a17> 6600 <6a19> <6a19> 7581 <6a1e> <6a1e> 7270 <6a1f> <6a1f> 6548 <6a21> <6a21> 4774 <6a23> <6a23> 5888 <6a35> <6a35> 7223 <6a38> <6a38> 4892 <6a39> <6a39> 5585 <6a3a> <6a3a> 7866 <6a3d> <6a3d> 6909 <6a44> <6a44> 3519 <6a48> <6a48> 6153 <6a4b> <6a4b> 3878 <6a52> <6a52> 6239 <6a53> <6a53> 5647 <6a58> <6a58> 4015 <6a59> <6a59> 4366 <6a5f> <6a5f> 4088 <6a61> <6a61> 5347 <6a6b> <6a6b> 7951 <6a80> <6a80> 4201 <6a84> <6a84> 3632 <6a89> <6a89> 6725 <6a8d> <6a8d> 5915 <6a8e> <6a8e> 4042 <6a97> <6a97> 5024 <6a9c> <6a9c> 7937 <6aa2> <6aa2> 3620 <6aa3> <6aa3> 6549 <6ab3> <6ab3> 5227 <6abb> <6abb> 7656 <6ac2> <6ac2> 4287 <6ac3> <6ac3> 3985 <6ad3> <6ad3> 4514 <6ada> <6ada> 4448 <6adb> <6adb> 6927 <6af6> <6af6> 7724 <6afb> <6afb> 5858 <6b04> <6b04> 4391 <6b0a> <6b0a> 3976 <6b0c> <6b0c> 6550 <6b12> <6b12> 4392 <6b16> <6b16> 4402 <6b20> <6b20> 8027 <6b21> <6b21> 7048 <6b23> <6b23> 8020 <6b32> <6b32> 6169 <6b3a> <6b3a> 4089 endcidrange 100 begincidrange <6b3d> <6b3d> 8028 <6b3e> <6b3e> 3824 <6b46> <6b46> 8029 <6b47> <6b47> 7727 <6b4c> <6b4c> 3451 <6b4e> <6b4e> 7413 <6b50> <6b50> 3916 <6b5f> <6b5f> 5937 <6b61> <6b61> 7889 <6b62> <6b62> 6956 <6b63> <6b63> 6726 <6b64> <6b64> 7049 <6b65> <6b65> 5063 <6b66> <6b66> 4821 <6b6a> <6b6a> 6133 <6b72> <6b72> 5494 <6b77> <6b77> 4460 <6b78> <6b78> 3991 <6b7b> <6b7b> 5271 <6b7f> <6b7f> 4795 <6b83> <6b83> 5837 <6b84> <6b84> 6989 <6b86> <6b86> 7436 <6b89> <6b89> 5648 <6b8a> <6b8a> 5586 <6b96> <6b96> 5726 <6b98> <6b98> 6524 <6b9e> <6b9e> 6240 <6bae> <6bae> 4485 <6baf> <6baf> 5228 <6bb2> <6bb2> 5465 <6bb5> <6bb5> 4202 <6bb7> <6bb7> 6376 <6bba> <6bba> 5317 <6bbc> <6bbc> 3470 <6bbf> <6bbf> 6659 <6bc1> <6bc1> 7996 <6bc5> <6bc5> 6402 <6bc6> <6bc6> 3917 <6bcb> <6bcb> 4822 <6bcd> <6bcd> 4775 <6bcf> <6bcf> 4715 <6bd2> <6bd2> 4309 <6bd3> <6bd3> 6356 <6bd4> <6bd4> 5196 <6bd6> <6bd8> 5197 <6bdb> <6bdb> 4776 <6beb> <6beb> 7812 <6bec> <6bec> 3918 <6c08> <6c08> 6660 <6c0f> <6c0f> 5774 <6c11> <6c11> 4877 <6c13> <6c13> 4728 <6c23> <6c23> 4090 <6c34> <6c34> 5587 <6c37> <6c37> 5238 <6c38> <6c38> 6009 <6c3e> <6c3e> 5012 <6c40> <6c40> 6727 <6c41> <6c41> 6929 <6c42> <6c42> 3919 <6c4e> <6c4e> 5013 <6c50> <6c50> 5410 <6c55> <6c55> 5307 <6c57> <6c57> 7639 <6c5a> <6c5a> 6068 <6c5d> <6c5d> 5938 <6c5e> <6c5e> 7855 <6c5f> <6c5f> 3545 <6c60> <6c60> 6957 <6c68> <6c68> 3784 <6c6a> <6c6a> 6129 <6c6d> <6c6d> 6034 <6c70> <6c70> 7437 <6c72> <6c72> 4055 <6c76> <6c76> 4841 <6c7a> <6c7a> 3649 <6c7d> <6c7d> 4091 <6c7e> <6c7e> 5162 <6c81> <6c81> 5765 <6c82> <6c82> 4092 <6c83> <6c83> 6079 <6c85> <6c85> 6267 <6c86> <6c86> 7679 <6c87> <6c87> 5965 <6c88> <6c88> 7370 <6c8c> <6c8c> 4324 <6c90> <6c90> 4789 <6c92> <6c92> 4796 <6c93> <6c93> 4234 <6c94> <6c94> 4739 <6c95> <6c95> 4849 <6c96> <6c96> 7308 <6c99> <6c99> 5272 <6c9a> <6c9a> 6958 <6c9b> <6c9b> 7506 <6cab> <6cab> 4692 <6cae> <6cae> 6601 <6cb3> <6cb3> 7622 <6cb8> <6cb8> 5200 endcidrange 100 begincidrange <6cb9> <6cb9> 6331 <6cbb> <6cbb> 7343 <6cbc> <6cbc> 5512 <6cbd> <6cbd> 3745 <6cbe> <6cbe> 7179 <6cbf> <6cbf> 5966 <6cc1> <6cc1> 7914 <6cc2> <6cc2> 7776 <6cc4> <6cc4> 5453 <6cc9> <6cc9> 7154 <6cca> <6cca> 4893 <6ccc> <6ccc> 7607 <6cd3> <6cd3> 7856 <6cd5> <6cd5> 5018 <6cd7> <6cd7> 5273 <6cdb> <6cdb> 5014 <6ce1> <6ce1> 7556 <6ce2> <6ce2> 7481 <6ce3> <6ce3> 6388 <6ce5> <6ce5> 4187 <6ce8> <6ce8> 6877 <6ceb> <6ceb> 7739 <6cee> <6cee> 4914 <6cef> <6cef> 4878 <6cf0> <6cf0> 7438 <6cf3> <6cf3> 6010 <6d0b> <6d0b> 5889 <6d0c> <6d0c> 4480 <6d11> <6d11> 5064 <6d17> <6d17> 5495 <6d19> <6d19> 5588 <6d1b> <6d1b> 4382 <6d1e> <6d1e> 4340 <6d25> <6d25> 6990 <6d27> <6d27> 6332 <6d29> <6d29> 5454 <6d2a> <6d2a> 7857 <6d32> <6d32> 6878 <6d35> <6d35> 5649 <6d36> <6d36> 8016 <6d38> <6d38> 3845 <6d39> <6d39> 6268 <6d3b> <6d3b> 7899 <6d3d> <6d3d> 8032 <6d3e> <6d3e> 7482 <6d41> <6d41> 4581 <6d59> <6d59> 6687 <6d5a> <6d5a> 6910 <6d5c> <6d5c> 5229 <6d63> <6d63> 6112 <6d66> <6d66> 7557 <6d69> <6d69> 7813 <6d6a> <6d6a> 4414 <6d6c> <6d6c> 4622 <6d6e> <6d6e> 5127 <6d74> <6d74> 6170 <6d77> <6d77> 7694 <6d78> <6d78> 7371 <6d79> <6d79> 7764 <6d7f> <6d7f> 7507 <6d85> <6d85> 5986 <6d87> <6d87> 3680 <6d88> <6d88> 5513 <6d89> <6d89> 5472 <6d8c> <6d8c> 6184 <6d8d> <6d8d> 7960 <6d8e> <6d8e> 5967 <6d91> <6d91> 5540 <6d93> <6d93> 5968 <6d95> <6d95> 7207 <6daf> <6daf> 5846 <6db2> <6db2> 5854 <6db5> <6db5> 7657 <6dc0> <6dc0> 6728 <6dc3> <6dc3> 3977 <6dc4> <6dc4> 7344 <6dc5> <6dc5> 5411 <6dc6> <6dc6> 7961 <6dc7> <6dc7> 4093 <6dcb> <6dcb> 4648 <6dcf> <6dcf> 7814 <6dd1> <6dd1> 5633 <6dd8> <6dd8> 4288 <6dd9> <6dd9> 6843 <6dda> <6dda> 4568 <6dde> <6dde> 5556 <6de1> <6de1> 4222 <6de8> <6de8> 6729 <6dea> <6dea> 4597 <6deb> <6deb> 6382 <6dee> <6dee> 7938 <6df1> <6df1> 5766 <6df3> <6df3> 5650 <6df5> <6df5> 5969 <6df7> <6df7> 7846 <6df8> <6df8> 7199 <6df9> <6df9> 5930 <6dfa> <6dfa> 7155 <6dfb> <6dfb> 7180 <6e17> <6e17> 5323 endcidrange 100 begincidrange <6e19> <6e19> 7892 <6e1a> <6e1a> 6602 <6e1b> <6e1b> 3520 <6e1f> <6e1f> 6730 <6e20> <6e20> 3593 <6e21> <6e21> 4289 <6e23> <6e23> 5274 <6e24> <6e24> 4933 <6e25> <6e25> 5801 <6e26> <6e26> 6099 <6e2b> <6e2b> 5455 <6e2c> <6e2c> 7334 <6e2d> <6e2d> 6294 <6e2f> <6e2f> 7680 <6e32> <6e32> 5427 <6e34> <6e34> 3503 <6e36> <6e36> 6011 <6e38> <6e38> 6333 <6e3a> <6e3a> 4807 <6e3c> <6e3c> 4860 <6e3d> <6e3d> 6578 <6e3e> <6e3e> 7847 <6e43> <6e43> 4976 <6e44> <6e44> 4861 <6e4a> <6e4a> 6879 <6e4d> <6e4d> 4203 <6e56> <6e56> 7815 <6e58> <6e58> 5348 <6e5b> <6e5b> 4223 <6e5c> <6e5c> 5727 <6e5e> <6e5e> 6731 <6e5f> <6e5f> 7915 <6e67> <6e67> 6185 <6e6b> <6e6b> 7271 <6e6e> <6e6e> 6453 <6e6f> <6e6f> 7429 <6e72> <6e72> 6269 <6e73> <6e73> 4148 <6e7a> <6e7a> 5065 <6e90> <6e90> 6270 <6e96> <6e96> 6911 <6e9c> <6e9c> 4582 <6e9d> <6e9d> 3920 <6e9f> <6e9f> 4754 <6ea2> <6ea2> 6465 <6ea5> <6ea5> 5128 <6eaa> <6eaa> 3716 <6eab> <6eab> 6083 <6eaf> <6eaf> 5514 <6eb1> <6eb1> 6991 <6eb6> <6eb6> 6186 <6eba> <6eba> 4189 <6ec2> <6ec2> 4955 <6ec4> <6ec4> 7105 <6ec5> <6ec5> 4746 <6ec9> <6ec9> 7916 <6ecb> <6ecb> 6493 <6ecc> <6ecc> 7142 <6ece> <6ece> 7777 <6ed1> <6ed1> 7900 <6ed3> <6ed3> 6579 <6ed4> <6ed4> 4290 <6eef> <6eef> 7208 <6ef4> <6ef4> 6625 <6ef8> <6ef8> 7816 <6efe> <6efe> 3780 <6eff> <6eff> 4679 <6f01> <6f01> 5905 <6f02> <6f02> 7582 <6f06> <6f06> 7366 <6f0f> <6f0f> 4569 <6f11> <6f11> 3570 <6f14> <6f14> 5970 <6f15> <6f15> 6799 <6f20> <6f20> 4666 <6f22> <6f22> 7640 <6f23> <6f23> 4468 <6f2b> <6f2b> 4680 <6f2c> <6f2c> 6959 <6f31> <6f31> 5589 <6f32> <6f32> 7106 <6f38> <6f38> 6695 <6f3f> <6f3f> 6551 <6f41> <6f41> 6012 <6f51> <6f51> 4934 <6f54> <6f54> 3650 <6f57> <6f57> 7033 <6f58> <6f58> 4915 <6f5a> <6f5a> 5634 <6f5b> <6f5b> 6529 <6f5e> <6f5e> 4515 <6f5f> <6f5f> 5412 <6f62> <6f62> 7917 <6f64> <6f64> 6362 <6f6d> <6f6d> 4224 <6f6e> <6f6e> 6800 <6f70> <6f70> 3986 <6f7a> <6f7a> 6525 <6f7c> <6f7c> 4341 <6f7d> <6f7d> 5066 endcidrange 100 begincidrange <6f7e> <6f7e> 4639 <6f81> <6f81> 5328 <6f84> <6f84> 7040 <6f88> <6f88> 7172 <6f8d> <6f8d> 6880 <6f8e> <6f8e> 7514 <6f90> <6f90> 6241 <6f94> <6f94> 7817 <6f97> <6f97> 3488 <6fa3> <6fa3> 7641 <6fa4> <6fa4> 7446 <6fa7> <6fa7> 4507 <6fae> <6fae> 7939 <6faf> <6faf> 7063 <6fb1> <6fb1> 6661 <6fb3> <6fb3> 6069 <6fb9> <6fb9> 4225 <6fbe> <6fbe> 4213 <6fc0> <6fc0> 3633 <6fc1> <6fc1> 7402 <6fc2> <6fc2> 4486 <6fc3> <6fc3> 4175 <6fca> <6fca> 6035 <6fd5> <6fd5> 5677 <6fda> <6fda> 6013 <6fdf> <6fdf> 6768 <6fe0> <6fe0> 7818 <6fe1> <6fe1> 6334 <6fe4> <6fe4> 4291 <6fe9> <6fe9> 7819 <6feb> <6feb> 4403 <6fec> <6fec> 6912 <6fef> <6fef> 7403 <6ff1> <6ff1> 5230 <6ffe> <6ffe> 4449 <7001> <7001> 5890 <7005> <7005> 7778 <7006> <7006> 4310 <7009> <7009> 5275 <700b> <700b> 5767 <700f> <700f> 4583 <7011> <7011> 7574 <7015> <7015> 5231 <7018> <7018> 4516 <701a> <701a> 7642 <701b> <701b> 6014 <701c> <701c> 6370 <701d> <701d> 4461 <701e> <701e> 6732 <701f> <701f> 5515 <7023> <7023> 7695 <7027> <7027> 4539 <7028> <7028> 4544 <702f> <702f> 6015 <7037> <7037> 6437 <703e> <703e> 4393 <704c> <704c> 3825 <7050> <7050> 7779 <7051> <7051> 5562 <7058> <7058> 7414 <705d> <705d> 7820 <7063> <7063> 4681 <706b> <706b> 7867 <7070> <7070> 7940 <7078> <7078> 3921 <707c> <707c> 6514 <707d> <707d> 6580 <7085> <7085> 3681 <708a> <708a> 7321 <708e> <708e> 5991 <7092> <7092> 7224 <7098> <7098> 8021 <7099> <7099> 6494 <709a> <709a> 3846 <70a1> <70a1> 6733 <70a4> <70a4> 5516 <70ab> <70ab> 7740 <70ac> <70ac> 3594 <70ad> <70ad> 7415 <70af> <70af> 7780 <70b3> <70b3> 5050 <70b7> <70b7> 6881 <70b8> <70b8> 6515 <70b9> <70b9> 6696 <70c8> <70c8> 4481 <70cb> <70cb> 8007 <70cf> <70cf> 6070 <70d8> <70d8> 7858 <70d9> <70d9> 4383 <70dd> <70dd> 6935 <70df> <70df> 5971 <70f1> <70f1> 3682 <70f9> <70f9> 7515 <70fd> <70fd> 5100 <7104> <7104> 7983 <7109> <7109> 5920 <710c> <710c> 6913 <7119> <7119> 4977 <711a> <711a> 5163 <711e> <711e> 4325 endcidrange 100 begincidrange <7121> <7121> 4823 <7126> <7126> 7225 <7130> <7130> 5992 <7136> <7136> 5972 <7147> <7147> 8001 <7149> <7149> 4469 <714a> <714a> 7992 <714c> <714c> 7918 <714e> <714e> 6662 <7150> <7150> 6016 <7156> <7156> 4141 <7159> <7159> 5973 <715c> <715c> 6234 <715e> <715e> 5318 <7164> <7164> 4716 <7165> <7165> 7893 <7166> <7166> 7976 <7167> <7167> 6801 <7169> <7169> 4998 <716c> <716c> 5891 <716e> <716e> 6495 <717d> <717d> 5428 <7184> <7184> 5728 <7189> <7189> 6242 <718a> <718a> 6253 <718f> <718f> 7984 <7192> <7192> 7781 <7194> <7194> 6187 <7199> <7199> 8048 <719f> <719f> 5635 <71a2> <71a2> 5101 <71ac> <71ac> 6071 <71b1> <71b1> 5987 <71b9> <71ba> 8049 <71be> <71be> 7345 <71c1> <71c1> 6000 <71c3> <71c3> 5974 <71c8> <71c8> 4367 <71c9> <71c9> 4326 <71ce> <71ce> 4556 <71d0> <71d0> 4640 <71d2> <71d2> 5517 <71d4> <71d4> 4999 <71d5> <71d5> 5975 <71df> <71df> 6017 <71e5> <71e5> 6802 <71e6> <71e6> 7064 <71e7> <71e7> 5590 <71ed> <71ed> 7243 <71ee> <71ee> 5473 <71fb> <71fb> 7985 <71fc> <71fc> 5744 <71fe> <71fe> 4292 <71ff> <71ff> 6154 <7200> <7200> 7731 <7206> <7206> 7575 <7210> <7210> 4517 <721b> <721b> 4394 <722a> <722a> 6803 <722c> <722c> 7483 <722d> <722d> 6587 <7230> <7230> 6271 <7232> <7232> 6295 <7235> <7235> 6516 <7236> <7236> 5129 <723a> <723a> 5869 <723b> <723b> 7962 <723d> <723d> 5349 <723e> <723e> 6422 <7240> <7240> 5350 <7246> <7246> 6552 <7247> <7247> 7521 <7248> <7248> 7493 <724c> <724c> 7508 <7252> <7252> 7191 <7258> <7258> 4311 <7259> <7259> 5782 <725b> <725b> 6210 <725d> <725d> 5232 <725f> <725f> 4777 <7261> <7261> 4778 <7262> <7262> 4545 <7267> <7267> 4790 <7269> <7269> 4850 <7272> <7272> 5369 <7279> <7279> 7472 <727d> <727d> 3638 <7280> <7280> 5388 <7281> <7281> 4623 <72a2> <72a2> 4312 <72a7> <72a7> 8051 <72ac> <72ac> 3639 <72af> <72af> 5015 <72c0> <72c0> 5351 <72c2> <72c2> 3847 <72c4> <72c4> 6626 <72ce> <72ce> 5831 <72d0> <72d0> 7821 <72d7> <72d7> 3922 <72d9> <72d9> 6603 endcidrange 100 begincidrange <72e1> <72e1> 3879 <72e9> <72e9> 5591 <72f8> <72f8> 4624 <72f9> <72f9> 7765 <72fc> <72fc> 4415 <72fd> <72fd> 7509 <730a> <730a> 6036 <7316> <7316> 7107 <731b> <731b> 4729 <731c> <731c> 5708 <731d> <731d> 6836 <7325> <7325> 6138 <7329> <7329> 5482 <732a> <732a> 6604 <732b> <732b> 4808 <7336> <7337> 6335 <733e> <733e> 7901 <733f> <733f> 6272 <7344> <7344> 6080 <7345> <7345> 5276 <7350> <7350> 6553 <7352> <7352> 6072 <7357> <7357> 3980 <7368> <7368> 4313 <736a> <736a> 7941 <7370> <7370> 6018 <7372> <7372> 7949 <7375> <7375> 4488 <7378> <7378> 5592 <737a> <737a> 4214 <737b> <737b> 7725 <7384> <7384> 7741 <7386> <7386> 6496 <7387> <7387> 5552 <7389> <7389> 6081 <738b> <738b> 6130 <738e> <738e> 6734 <7394> <7394> 7156 <7396> <7396> 3923 <7397> <7397> 6211 <7398> <7398> 4094 <739f> <739f> 4879 <73a7> <73a7> 6363 <73a9> <73a9> 6113 <73ad> <73ad> 5233 <73b2> <73b2> 4495 <73b3> <73b3> 4260 <73b9> <73b9> 7742 <73c0> <73c0> 4894 <73c2> <73c2> 3452 <73c9> <73c9> 4880 <73ca> <73ca> 5308 <73cc> <73cc> 7608 <73cd> <73cd> 6992 <73cf> <73cf> 3471 <73d6> <73d6> 3848 <73d9> <73d9> 3797 <73dd> <73dd> 7977 <73de> <73de> 4384 <73e0> <73e0> 6882 <73e3> <73e3> 5651 <73e4> <73e4> 5067 <73e5> <73e5> 6423 <73e6> <73e6> 7713 <73e9> <73e9> 7782 <73ea> <73ea> 3999 <73ed> <73ed> 4916 <73f7> <73f7> 4824 <73f9> <73f9> 5483 <73fd> <73fd> 6735 <73fe> <73fe> 7743 <7401> <7401> 5429 <7403> <7403> 3924 <7405> <7405> 4416 <7406> <7406> 4625 <7407> <7407> 5593 <7409> <7409> 4584 <7413> <7413> 6114 <741b> <741b> 7372 <7420> <7420> 6663 <7421> <7421> 5636 <7422> <7422> 7404 <7425> <7425> 7822 <7426> <7426> 4095 <7428> <7428> 3781 <742a> <742a> 4096 <742b> <742b> 5102 <742c> <742c> 6115 <742e> <742e> 6844 <742f> <742f> 3826 <7430> <7430> 5993 <7433> <7433> 4649 <7434> <7434> 4043 <7435> <7435> 5201 <7436> <7436> 7484 <7438> <7438> 7405 <743a> <743a> 5019 <743f> <743f> 7848 <7440> <7440> 6212 <7441> <7441> 4779 endcidrange 100 begincidrange <7443> <7443> 7302 <7444> <7444> 5430 <744b> <744b> 6296 <7455> <7455> 7623 <7457> <7457> 6273 <7459> <7459> 4173 <745a> <745a> 7823 <745b> <745b> 6019 <745c> <745c> 6337 <745e> <745e> 5389 <745f> <745f> 5674 <7460> <7460> 4585 <7462> <7462> 6188 <7464> <7464> 6155 <7465> <7465> 6084 <7468> <7468> 6993 <7469> <7469> 7783 <746a> <746a> 4657 <746f> <746f> 4417 <747e> <747e> 4030 <7482> <7482> 4097 <7483> <7483> 4626 <7487> <7487> 5431 <7489> <7489> 4470 <748b> <748b> 6554 <7498> <7498> 4641 <749c> <749c> 7919 <749e> <749e> 4895 <749f> <749f> 3683 <74a1> <74a1> 6994 <74a3> <74a3> 4098 <74a5> <74a5> 3684 <74a7> <74a7> 5025 <74a8> <74a8> 7065 <74aa> <74aa> 6804 <74b0> <74b0> 7894 <74b2> <74b2> 5594 <74b5> <74b5> 5939 <74b9> <74b9> 5637 <74bd> <74bd> 5363 <74bf> <74bf> 5432 <74c6> <74c6> 7021 <74ca> <74ca> 3685 <74cf> <74cf> 4540 <74d4> <74d4> 6020 <74d8> <74d8> 3827 <74da> <74da> 7066 <74dc> <74dc> 3806 <74e0> <74e0> 7824 <74e2> <74e2> 7583 <74e3> <74e3> 7494 <74e6> <74e6> 6100 <74ee> <74ee> 6092 <74f7> <74f7> 6497 <7501> <7501> 5051 <7504> <7504> 3640 <7511> <7511> 6936 <7515> <7515> 6093 <7518> <7518> 3521 <751a> <751a> 5768 <751b> <751b> 7181 <751f> <751f> 5370 <7523> <7523> 5309 <7525> <7525> 5371 <7526> <7526> 5518 <7528> <7528> 6189 <752b> <752b> 5068 <752c> <752c> 6190 <7530> <7530> 6664 <7531> <7531> 6338 <7532> <7532> 3532 <7533> <7533> 5745 <7537> <7537> 4149 <7538> <7538> 6665 <753a> <753a> 6736 <7547> <7547> 4011 <754c> <754c> 3717 <754f> <754f> 6139 <7551> <7551> 6666 <7553> <7553> 4235 <7554> <7554> 4917 <7559> <7559> 4586 <755b> <755b> 6995 <755c> <755c> 7289 <755d> <755d> 4825 <7562> <7562> 7609 <7565> <7565> 4426 <7566> <7566> 8008 <756a> <756a> 5000 <756f> <756f> 6914 <7570> <7570> 6424 <7575> <7575> 7868 <7576> <7576> 4246 <7578> <7578> 4099 <757a> <757a> 3546 <757f> <757f> 4100 <7586> <7586> 3547 <7587> <7587> 6883 <758a> <758a> 7192 <758b> <758b> 7610 endcidrange 100 begincidrange <758e> <758e> 5520 <758f> <758f> 5519 <7591> <7591> 6403 <759d> <759d> 5310 <75a5> <75a5> 3571 <75ab> <75ab> 5951 <75b1> <75b1> 7558 <75b2> <75b2> 7599 <75b3> <75b3> 3522 <75b5> <75b5> 6498 <75b8> <75b8> 4215 <75b9> <75b9> 6996 <75bc> <75bc> 4342 <75bd> <75bd> 6605 <75be> <75be> 7022 <75c2> <75c2> 3453 <75c5> <75c5> 5052 <75c7> <75c7> 6937 <75cd> <75cd> 6425 <75d2> <75d2> 5892 <75d4> <75d4> 7346 <75d5> <75d5> 8022 <75d8> <75d8> 4352 <75d9> <75d9> 3686 <75db> <75db> 7455 <75e2> <75e2> 4627 <75f0> <75f0> 4226 <75f2> <75f2> 4658 <75f4> <75f4> 7347 <75fa> <75fa> 5202 <75fc> <75fc> 3746 <7600> <7600> 5906 <760d> <760d> 5893 <7619> <7619> 5521 <761f> <761f> 6085 <7620> <7620> 7143 <7621> <7621> 7108 <7622> <7622> 4918 <7624> <7624> 4587 <7626> <7626> 5595 <763b> <763b> 4570 <7642> <7642> 4557 <764c> <764c> 5826 <764e> <764e> 3489 <7652> <7652> 6339 <7656> <7656> 5026 <7661> <7661> 7348 <7664> <7664> 6688 <7669> <7669> 4376 <766c> <766c> 5433 <7670> <7670> 6094 <7672> <7672> 6667 <7678> <7678> 3718 <767b> <767b> 4368 <767c> <767c> 4935 <767d> <767e> 4993 <7684> <7684> 6627 <7686> <7686> 3572 <7687> <7687> 7920 <768e> <768e> 3880 <7690> <7690> 3747 <7693> <7693> 7825 <76ae> <76ae> 7600 <76ba> <76ba> 7272 <76bf> <76bf> 4755 <76c2> <76c2> 6213 <76c3> <76c3> 4978 <76c6> <76c6> 5164 <76c8> <76c8> 6021 <76ca> <76ca> 6438 <76d2> <76d2> 7665 <76d6> <76d6> 3573 <76db> <76db> 5484 <76dc> <76dc> 4293 <76de> <76de> 6526 <76df> <76df> 4731 <76e1> <76e1> 6997 <76e3> <76e3> 3523 <76e4> <76e4> 4919 <76e7> <76e7> 4518 <76ee> <76ee> 4791 <76f2> <76f2> 4730 <76f4> <76f4> 6975 <76f8> <76f8> 5352 <76fc> <76fc> 4920 <76fe> <76fe> 5652 <7701> <7701> 5485 <7704> <7704> 4740 <7708> <7708> 7421 <7709> <7709> 4862 <770b> <770b> 3490 <771e> <771e> 6998 <7720> <7720> 4741 <7729> <7729> 7744 <7737> <7737> 3978 <7738> <7738> 4780 <773a> <773a> 6805 <773c> <773c> 5812 <7740> <7740> 7057 <774d> <774d> 7745 endcidrange 100 begincidrange <775b> <775b> 6737 <7761> <7761> 5596 <7763> <7763> 4314 <7766> <7766> 4792 <776b> <776b> 7193 <7779> <7779> 4294 <777e> <777e> 3748 <777f> <777f> 6037 <778b> <778b> 6999 <7791> <7791> 4756 <779e> <779e> 4682 <77a5> <77a5> 5038 <77ac> <77ac> 5653 <77ad> <77ad> 4558 <77b0> <77b0> 3524 <77b3> <77b3> 4343 <77bb> <77bb> 7182 <77bc> <77bc> 3621 <77bf> <77bf> 3925 <77d7> <77d7> 7244 <77db> <77db> 4781 <77dc> <77dc> 4060 <77e2> <77e2> 5709 <77e3> <77e3> 6404 <77e5> <77e5> 6960 <77e9> <77e9> 3926 <77ed> <77ed> 4204 <77ee> <77ee> 6134 <77ef> <77ef> 3881 <77f3> <77f3> 5413 <7802> <7802> 5277 <7812> <7812> 5203 <7825> <7825> 6961 <7826> <7826> 7120 <7827> <7827> 7373 <782c> <782c> 4652 <7832> <7832> 7559 <7834> <7834> 7485 <7845> <7845> 4000 <784f> <784f> 5976 <785d> <785d> 7226 <786b> <786b> 4588 <786c> <786c> 3687 <786f> <786f> 5977 <787c> <787c> 5178 <7881> <7881> 4101 <7887> <7887> 6738 <788c> <788c> 4528 <788d> <788d> 5847 <788e> <788e> 5563 <7891> <7891> 5204 <7897> <7897> 6116 <78a3> <78a3> 3504 <78a7> <78a7> 5027 <78a9> <78a9> 5414 <78ba> <78bb> 7879 <78bc> <78bc> 4659 <78c1> <78c1> 6499 <78c5> <78c5> 4956 <78ca> <78ca> 4546 <78cb> <78cb> 7050 <78ce> <78ce> 3719 <78d0> <78d0> 4921 <78e8> <78e8> 4660 <78ec> <78ec> 3688 <78ef> <78ef> 4102 <78f5> <78f5> 3491 <78fb> <78fb> 4922 <7901> <7901> 7227 <790e> <790e> 7228 <7916> <7916> 5940 <792a> <792a> 4450 <792b> <792b> 4462 <792c> <792c> 4923 <793a> <793a> 5710 <793e> <793e> 5278 <7940> <7940> 5279 <7941> <7941> 4103 <7947> <7948> 4104 <7949> <7949> 6962 <7950> <7950> 6214 <7956> <7956> 6806 <7957> <7957> 6963 <795a> <795a> 6807 <795b> <795b> 3595 <795c> <795c> 7826 <795d> <795d> 7290 <795e> <795e> 5746 <7960> <7960> 5280 <7965> <7965> 5353 <7968> <7968> 7584 <796d> <796d> 6769 <797a> <797a> 4106 <797f> <797f> 4529 <7981> <7981> 4044 <798d> <798d> 7869 <798e> <798e> 6739 <798f> <798f> 5081 <7991> <7991> 6215 <79a6> <79a6> 5907 endcidrange 100 begincidrange <79a7> <79a7> 8052 <79aa> <79aa> 5434 <79ae> <79ae> 4508 <79b1> <79b1> 4295 <79b3> <79b3> 5894 <79b9> <79b9> 6216 <79bd> <79bd> 4045 <79be> <79be> 7870 <79bf> <79bf> 4315 <79c0> <79c0> 5597 <79c1> <79c1> 5281 <79c9> <79c9> 5053 <79ca> <79ca> 4162 <79cb> <79cb> 7273 <79d1> <79d1> 3807 <79d2> <79d2> 7229 <79d5> <79d5> 5205 <79d8> <79d8> 5206 <79df> <79df> 6808 <79e4> <79e4> 7377 <79e6> <79e6> 7000 <79e7> <79e7> 5838 <79e9> <79e9> 7023 <79fb> <79fb> 6426 <7a00> <7a00> 8053 <7a05> <7a05> 5496 <7a08> <7a08> 3492 <7a0b> <7a0b> 6740 <7a0d> <7a0d> 7230 <7a14> <7a14> 6474 <7a17> <7a17> 7510 <7a19> <7a19> 6976 <7a1a> <7a1a> 7349 <7a1c> <7a1c> 4609 <7a1f> <7a1f> 7591 <7a20> <7a20> 6809 <7a2e> <7a2e> 6845 <7a31> <7a31> 7378 <7a36> <7a36> 6235 <7a37> <7a37> 6977 <7a3b> <7a3b> 4296 <7a3c> <7a3c> 3454 <7a3d> <7a3d> 3720 <7a3f> <7a3f> 3749 <7a40> <7a40> 3771 <7a46> <7a46> 4793 <7a49> <7a49> 7350 <7a4d> <7a4d> 6628 <7a4e> <7a4e> 6022 <7a57> <7a57> 5598 <7a61> <7a61> 5366 <7a62> <7a62> 6038 <7a69> <7a69> 6086 <7a6b> <7a6b> 7881 <7a70> <7a70> 5895 <7a74> <7a74> 7755 <7a76> <7a76> 3927 <7a79> <7a79> 3965 <7a7a> <7a7a> 3798 <7a7d> <7a7d> 6741 <7a7f> <7a7f> 7157 <7a81> <7a81> 4330 <7a84> <7a84> 7058 <7a88> <7a88> 6156 <7a92> <7a92> 7024 <7a93> <7a93> 7109 <7a95> <7a95> 6810 <7a98> <7a98> 3954 <7a9f> <7a9f> 3962 <7aa9> <7aaa> 6101 <7aae> <7aae> 3966 <7aaf> <7aaf> 6157 <7aba> <7aba> 4001 <7ac4> <7ac4> 7067 <7ac5> <7ac5> 4002 <7ac7> <7ac7> 4353 <7aca> <7aca> 6689 <7acb> <7acb> 4653 <7ad7> <7ad7> 4809 <7ad9> <7ad9> 7089 <7add> <7add> 5054 <7adf> <7adf> 3689 <7ae0> <7ae0> 6555 <7ae3> <7ae3> 6915 <7ae5> <7ae5> 4344 <7aea> <7aea> 5599 <7aed> <7aed> 3505 <7aef> <7aef> 4205 <7af6> <7af6> 3690 <7af9> <7af9> 6900 <7afa> <7afa> 7291 <7aff> <7aff> 3493 <7b0f> <7b0f> 7852 <7b11> <7b11> 5522 <7b19> <7b19> 5372 <7b1b> <7b1b> 6629 <7b1e> <7b1e> 7439 <7b20> <7b20> 4654 <7b26> <7b26> 5130 <7b2c> <7b2c> 6770 endcidrange 100 begincidrange <7b2d> <7b2d> 4496 <7b39> <7b39> 5497 <7b46> <7b46> 7611 <7b49> <7b49> 4369 <7b4b> <7b4b> 4031 <7b4c> <7b4c> 6668 <7b4d> <7b4d> 5654 <7b4f> <7b4f> 5006 <7b50> <7b50> 3849 <7b51> <7b51> 7292 <7b52> <7b52> 7456 <7b54> <7b54> 4236 <7b56> <7b56> 7128 <7b60> <7b60> 4012 <7b6c> <7b6c> 5486 <7b6e> <7b6e> 5390 <7b75> <7b75> 5978 <7b7d> <7b7d> 6073 <7b87> <7b87> 3574 <7b8b> <7b8b> 6669 <7b8f> <7b8f> 6588 <7b94> <7b94> 4896 <7b95> <7b95> 4107 <7b97> <7b97> 5311 <7b9a> <7b9a> 7051 <7b9d> <7b9d> 3656 <7ba1> <7ba1> 3828 <7bad> <7bad> 6670 <7bb1> <7bb1> 5354 <7bb4> <7bb4> 6530 <7bb8> <7bb8> 6606 <7bc0> <7bc0> 6690 <7bc1> <7bc1> 7921 <7bc4> <7bc4> 5016 <7bc6> <7bc6> 6671 <7bc7> <7bc7> 7522 <7bc9> <7bc9> 7293 <7bd2> <7bd2> 5729 <7be0> <7be0> 5523 <7be4> <7be4> 4316 <7be9> <7be9> 5282 <7c07> <7c07> 6829 <7c12> <7c12> 7068 <7c1e> <7c1e> 4206 <7c21> <7c21> 3494 <7c27> <7c27> 7922 <7c2a> <7c2a> 6531 <7c2b> <7c2b> 5524 <7c3d> <7c3d> 7183 <7c3e> <7c3e> 4487 <7c3f> <7c3f> 5131 <7c43> <7c43> 4404 <7c4c> <7c4c> 6884 <7c4d> <7c4d> 6630 <7c60> <7c60> 4541 <7c64> <7c64> 7184 <7c6c> <7c6c> 4628 <7c73> <7c73> 4863 <7c83> <7c83> 5207 <7c89> <7c89> 5165 <7c92> <7c92> 4655 <7c95> <7c95> 4897 <7c97> <7c97> 6811 <7c98> <7c98> 6697 <7c9f> <7c9f> 5541 <7ca5> <7ca5> 6901 <7ca7> <7ca7> 6556 <7cae> <7cae> 4433 <7cb1> <7cb1> 4434 <7cb2> <7cb2> 7070 <7cb3> <7cb3> 3582 <7cb9> <7cb9> 5600 <7cbe> <7cbe> 6742 <7cca> <7cca> 7827 <7cd6> <7cd6> 4247 <7cde> <7cde> 5166 <7cdf> <7cdf> 6812 <7ce0> <7ce0> 3548 <7ce7> <7ce7> 4435 <7cfb> <7cfb> 3721 <7cfe> <7cfe> 4003 <7d00> <7d00> 4108 <7d02> <7d02> 6885 <7d04> <7d04> 5873 <7d05> <7d05> 7859 <7d06> <7d06> 6217 <7d07> <7d07> 8025 <7d08> <7d08> 7895 <7d0a> <7d0b> 4842 <7d0d> <7d0d> 4150 <7d10> <7d10> 4184 <7d14> <7d14> 5655 <7d17> <7d17> 5283 <7d18> <7d18> 3865 <7d19> <7d19> 6964 <7d1a> <7d1a> 4056 <7d1b> <7d1b> 5167 <7d20> <7d20> 5525 <7d21> <7d21> 4957 <7d22> <7d22> 5367 endcidrange 100 begincidrange <7d2b> <7d2b> 6500 <7d2c> <7d2c> 6886 <7d2e> <7d2e> 7081 <7d2f> <7d2f> 4571 <7d30> <7d30> 5498 <7d33> <7d33> 5747 <7d35> <7d35> 6607 <7d39> <7d39> 5526 <7d3a> <7d3a> 3525 <7d42> <7d42> 6846 <7d43> <7d43> 7746 <7d44> <7d44> 6813 <7d45> <7d45> 3691 <7d46> <7d46> 4924 <7d50> <7d50> 3651 <7d5e> <7d5e> 3882 <7d61> <7d61> 4385 <7d62> <7d62> 7747 <7d66> <7d66> 4057 <7d68> <7d68> 6371 <7d6a> <7d6a> 6454 <7d6e> <7d6e> 5391 <7d71> <7d71> 7457 <7d72> <7d72> 5284 <7d73> <7d73> 3549 <7d76> <7d76> 6691 <7d79> <7d79> 3641 <7d7f> <7d7f> 3928 <7d8e> <7d8e> 6743 <7d8f> <7d8f> 5601 <7d93> <7d93> 3692 <7d9c> <7d9c> 6847 <7da0> <7da0> 4530 <7da2> <7da2> 6887 <7dac> <7dac> 5602 <7dad> <7dad> 6340 <7db1> <7db1> 3550 <7db2> <7db2> 4701 <7db4> <7db4> 7173 <7db5> <7db5> 7121 <7db8> <7db8> 4598 <7dba> <7dba> 4109 <7dbb> <7dbb> 7416 <7dbd> <7dbd> 6517 <7dbe> <7dbe> 4610 <7dbf> <7dbf> 4742 <7dc7> <7dc7> 7351 <7dca> <7dca> 4126 <7dcb> <7dcb> 5208 <7dd6> <7dd6> 5392 <7dd8> <7dd8> 7658 <7dda> <7dda> 5435 <7ddd> <7ddd> 7034 <7dde> <7dde> 4207 <7de0> <7de0> 7209 <7de1> <7de1> 4881 <7de3> <7de3> 5979 <7de8> <7de8> 7523 <7de9> <7de9> 6117 <7dec> <7dec> 4743 <7def> <7def> 6297 <7df4> <7df4> 4471 <7dfb> <7dfb> 7352 <7e09> <7e09> 7001 <7e0a> <7e0a> 5855 <7e15> <7e15> 6087 <7e1b> <7e1b> 4898 <7e1d> <7e1d> 7002 <7e1e> <7e1e> 7828 <7e1f> <7e1f> 6171 <7e21> <7e21> 6581 <7e23> <7e23> 7748 <7e2b> <7e2b> 5103 <7e2e> <7e2e> 7294 <7e2f> <7e2f> 5980 <7e31> <7e31> 6848 <7e37> <7e37> 4572 <7e3d> <7e3d> 7257 <7e3e> <7e3e> 6631 <7e41> <7e41> 5001 <7e43> <7e43> 5179 <7e46> <7e46> 4826 <7e47> <7e47> 6158 <7e52> <7e52> 6938 <7e54> <7e54> 6978 <7e55> <7e55> 5436 <7e5e> <7e5e> 6159 <7e61> <7e61> 5603 <7e69> <7e69> 5689 <7e6a> <7e6a> 7942 <7e6b> <7e6b> 3722 <7e6d> <7e6d> 3642 <7e70> <7e70> 6814 <7e79> <7e79> 5952 <7e7c> <7e7c> 3723 <7e82> <7e82> 7069 <7e8c> <7e8c> 5542 <7e8f> <7e8f> 6672 <7e93> <7e93> 6023 <7e96> <7e96> 5466 endcidrange 100 begincidrange <7e98> <7e98> 7071 <7e9b> <7e9b> 4317 <7e9c> <7e9c> 4405 <7f36> <7f36> 5132 <7f38> <7f38> 7681 <7f3a> <7f3a> 3652 <7f4c> <7f4c> 5859 <7f50> <7f50> 3829 <7f54> <7f54> 4702 <7f55> <7f55> 7643 <7f6a> <7f6a> 6859 <7f6b> <7f6b> 3854 <7f6e> <7f6e> 7353 <7f70> <7f70> 5007 <7f72> <7f72> 5393 <7f75> <7f75> 4717 <7f77> <7f77> 7486 <7f79> <7f79> 4629 <7f85> <7f85> 4377 <7f88> <7f88> 4110 <7f8a> <7f8a> 5896 <7f8c> <7f8c> 3551 <7f8e> <7f8e> 4864 <7f94> <7f94> 3750 <7f9a> <7f9a> 4497 <7f9e> <7f9e> 5604 <7fa4> <7fa4> 3955 <7fa8> <7fa8> 5437 <7fa9> <7fa9> 6405 <7fb2> <7fb2> 8054 <7fb8> <7fb8> 4630 <7fb9> <7fb9> 3583 <7fbd> <7fbd> 6218 <7fc1> <7fc1> 6095 <7fc5> <7fc5> 5711 <7fca> <7fca> 6439 <7fcc> <7fcc> 6440 <7fce> <7fce> 4498 <7fd2> <7fd2> 5679 <7fd4> <7fd4> 5355 <7fd5> <7fd5> 8033 <7fdf> <7fdf> 6632 <7fe0> <7fe0> 7322 <7fe1> <7fe1> 5209 <7fe9> <7fe9> 7524 <7feb> <7feb> 6118 <7ff0> <7ff0> 7644 <7ff9> <7ff9> 3883 <7ffc> <7ffc> 6441 <8000> <8000> 6160 <8001> <8001> 4519 <8003> <8003> 3751 <8005> <8005> 6501 <8006> <8006> 4111 <8009> <8009> 3929 <800c> <800c> 6427 <8010> <8010> 4158 <8015> <8015> 3693 <8017> <8017> 4782 <8018> <8018> 6243 <802d> <802d> 4112 <8033> <8033> 6428 <8036> <8036> 5870 <803d> <803d> 7422 <803f> <803f> 3694 <8043> <8043> 4227 <8046> <8046> 4499 <804a> <804a> 4559 <8056> <8056> 5487 <8058> <8058> 5239 <805a> <805a> 7323 <805e> <805e> 4844 <806f> <806f> 4472 <8070> <8070> 7258 <8072> <8072> 5488 <8073> <8073> 6191 <8077> <8077> 6979 <807d> <807d> 7200 <807e> <807e> 4542 <807f> <807f> 6368 <8084> <8084> 6429 <8085> <8085> 5638 <8086> <8086> 5285 <8087> <8087> 6815 <8089> <8089> 6357 <808b> <808b> 4605 <808c> <808c> 4113 <8096> <8096> 7231 <809b> <809b> 7682 <809d> <809d> 3495 <80a1> <80a1> 3752 <80a2> <80a2> 6965 <80a5> <80a5> 5210 <80a9> <80a9> 3643 <80aa> <80aa> 4958 <80af> <80af> 4061 <80b1> <80b1> 3866 <80b2> <80b2> 6358 <80b4> <80b4> 7963 <80ba> <80ba> 7540 endcidrange 100 begincidrange <80c3> <80c3> 6298 <80c4> <80c4> 6865 <80cc> <80cc> 4979 <80ce> <80ce> 7440 <80da> <80da> 4980 <80db> <80db> 3533 <80de> <80de> 7560 <80e1> <80e1> 7829 <80e4> <80e4> 6364 <80e5> <80e5> 5394 <80f1> <80f1> 3850 <80f4> <80f4> 4345 <80f8> <80f8> 8017 <80fd> <80fd> 4185 <8102> <8102> 6966 <8105> <8105> 7766 <8106> <8106> 7324 <8107> <8107> 7767 <8108> <8108> 4722 <810a> <810a> 7144 <8118> <8118> 6119 <811a> <811a> 3472 <811b> <811b> 3695 <8123> <8123> 5656 <8129> <8129> 5605 <812b> <812b> 7419 <812f> <812f> 7561 <8139> <8139> 7110 <813e> <813e> 5211 <814b> <814b> 5856 <814e> <814e> 5748 <8150> <8151> 5133 <8154> <8154> 3552 <8155> <8155> 6120 <8165> <8165> 5489 <8166> <8166> 4179 <816b> <816b> 6849 <8170> <8170> 6161 <8171> <8171> 3608 <8178> <8178> 6557 <8179> <8179> 5082 <817a> <817a> 5438 <817f> <817f> 7461 <8180> <8180> 4959 <8188> <8188> 3634 <818a> <818a> 4899 <818f> <818f> 3753 <819a> <819a> 5135 <819c> <819c> 4667 <819d> <819d> 5675 <81a0> <81a0> 3884 <81a3> <81a3> 7025 <81a8> <81a8> 7516 <81b3> <81b3> 5439 <81b5> <81b5> 7313 <81ba> <81ba> 6392 <81bd> <81bd> 4228 <81be> <81be> 7943 <81bf> <81bf> 4176 <81c0> <81c0> 4359 <81c2> <81c2> 5212 <81c6> <81c6> 5916 <81cd> <81cd> 6771 <81d8> <81d8> 4410 <81df> <81df> 6558 <81e3> <81e3> 5749 <81e5> <81e5> 6103 <81e7> <81e7> 6559 <81e8> <81e8> 4650 <81ea> <81ea> 6502 <81ed> <81ed> 7325 <81f3> <81f3> 6967 <81f4> <81f4> 7354 <81fa> <81fa> 4261 <81fb> <81fb> 7003 <81fc> <81fc> 3930 <81fe> <81fe> 6341 <8205> <8205> 3931 <8207> <8207> 5941 <8208> <8208> 8034 <820a> <820a> 3932 <820c> <820c> 5456 <820d> <820d> 5286 <8212> <8212> 5395 <821b> <821b> 7158 <821c> <821c> 5657 <821e> <821e> 4827 <821f> <821f> 6888 <8221> <8221> 3553 <822a> <822a> 7683 <822b> <822b> 4960 <822c> <822c> 4925 <8235> <8235> 7390 <8236> <8236> 4900 <8237> <8237> 7749 <8239> <8239> 5440 <8240> <8240> 5136 <8245> <8245> 5942 <8247> <8247> 6744 <8259> <8259> 7111 endcidrange 100 begincidrange <8264> <8264> 6406 <8266> <8266> 7659 <826e> <826e> 3496 <826f> <826f> 4436 <8271> <8271> 3497 <8272> <8272> 5368 <8276> <8276> 5994 <8278> <8278> 7232 <827e> <827e> 5848 <828b> <828b> 6219 <828d> <828d> 6518 <828e> <828e> 3967 <8292> <8292> 4703 <8299> <8299> 5137 <829a> <829a> 4360 <829d> <829d> 6968 <829f> <829f> 5324 <82a5> <82a5> 3575 <82a6> <82a6> 7830 <82a9> <82a9> 4046 <82ac> <82ac> 5168 <82ad> <82ad> 7487 <82ae> <82ae> 6039 <82af> <82af> 5769 <82b1> <82b1> 7871 <82b3> <82b3> 4961 <82b7> <82b7> 6969 <82b8> <82b8> 6244 <82b9> <82b9> 4032 <82bb> <82bb> 7274 <82bc> <82bc> 4783 <82bd> <82bd> 5783 <82bf> <82bf> 6482 <82d1> <82d1> 6274 <82d2> <82d2> 5995 <82d4> <82d4> 7441 <82d5> <82d5> 7233 <82d7> <82d7> 4810 <82db> <82db> 3455 <82de> <82de> 7562 <82df> <82df> 3933 <82e1> <82e1> 6430 <82e5> <82e5> 5874 <82e6> <82e6> 3754 <82e7> <82e7> 6608 <82f1> <82f1> 6024 <82fd> <82fd> 3755 <82fe> <82fe> 7612 <8301> <8301> 6921 <8302> <8302> 4828 <8303> <8303> 5017 <8304> <8304> 3456 <8305> <8305> 4784 <8309> <8309> 4693 <8317> <8317> 4757 <8328> <8328> 6503 <832b> <832b> 4704 <832f> <832f> 5083 <8331> <8331> 5606 <8334> <8334> 7944 <8335> <8335> 6455 <8336> <8336> 4191 <8338> <8338> 6192 <8339> <8339> 5943 <8340> <8340> 5658 <8347> <8347> 7708 <8349> <8349> 7234 <834a> <834a> 7784 <834f> <834f> 6475 <8351> <8351> 6431 <8352> <8352> 7923 <8373> <8373> 4354 <8377> <8377> 7624 <837b> <837b> 6633 <8389> <8389> 4631 <838a> <838a> 6560 <838e> <838e> 5287 <8396> <8396> 3696 <8398> <8398> 5750 <839e> <839e> 6121 <83a2> <83a2> 7768 <83a9> <83a9> 5138 <83aa> <83aa> 5784 <83ab> <83ab> 4668 <83bd> <83bd> 4705 <83c1> <83c1> 7201 <83c5> <83c5> 3830 <83c9> <83c9> 4531 <83ca> <83ca> 3949 <83cc> <83cc> 4013 <83d3> <83d3> 3808 <83d6> <83d6> 7112 <83dc> <83dc> 7122 <83e9> <83e9> 5069 <83eb> <83eb> 4033 <83ef> <83ef> 7872 <83f0> <83f0> 3756 <83f1> <83f1> 4611 <83f2> <83f2> 5213 <83f4> <83f4> 5827 endcidrange 100 begincidrange <83f9> <83f9> 6609 <83fd> <83fd> 5639 <8403> <8403> 7314 <8404> <8404> 4297 <840a> <840a> 4423 <840c> <840c> 4732 <840d> <840d> 7532 <840e> <840e> 6299 <8429> <8429> 7275 <842c> <842c> 4683 <8431> <8431> 7993 <8438> <8438> 6342 <843d> <843d> 4386 <8449> <8449> 6001 <8457> <8457> 6610 <845b> <845b> 3506 <8461> <8461> 7563 <8463> <8463> 4346 <8466> <8466> 6300 <846b> <846b> 7831 <846c> <846c> 6561 <846f> <846f> 5875 <8475> <8475> 4004 <847a> <847a> 6930 <8490> <8490> 5607 <8494> <8494> 5712 <8499> <8499> 4799 <849c> <849c> 5312 <84a1> <84a1> 4962 <84b2> <84b2> 7564 <84b8> <84b8> 6939 <84bb> <84bb> 5876 <84bc> <84bc> 7113 <84bf> <84bf> 7832 <84c0> <84c0> 5549 <84c2> <84c2> 4758 <84c4> <84c4> 7295 <84c6> <84c6> 5415 <84c9> <84c9> 6193 <84cb> <84cb> 3576 <84cd> <84cd> 5713 <84d1> <84d1> 5288 <84da> <84da> 5608 <84ec> <84ec> 5104 <84ee> <84ee> 4473 <84f4> <84f4> 5659 <84fc> <84fc> 4560 <8511> <8511> 4747 <8513> <8513> 4684 <8514> <8514> 5084 <8517> <8517> 6504 <8518> <8518> 5325 <851a> <851a> 6250 <851e> <851e> 4573 <8521> <8521> 7123 <8523> <8523> 6562 <8525> <8525> 7259 <852c> <852c> 5527 <852d> <852d> 6383 <852f> <852f> 7004 <853d> <853d> 7541 <853f> <853f> 6301 <8541> <8541> 4229 <8543> <8543> 5002 <8549> <8549> 7235 <854e> <854e> 3885 <8553> <8553> 6245 <8559> <8559> 7796 <8563> <8563> 5660 <8568> <8568> 3981 <8569> <8569> 7430 <856a> <856a> 4829 <856d> <856d> 5528 <8584> <8584> 4901 <8587> <8587> 4865 <858f> <858f> 6407 <8591> <8591> 3554 <8594> <8594> 6563 <859b> <859b> 5457 <85a6> <85a6> 7159 <85a8> <85a8> 7989 <85a9> <85a9> 5319 <85aa> <85aa> 5751 <85af> <85af> 5396 <85b0> <85b0> 7986 <85ba> <85ba> 6772 <85c1> <85c1> 3757 <85c9> <85c9> 6505 <85cd> <85cd> 4406 <85ce> <85ce> 5752 <85cf> <85cf> 6564 <85d5> <85d5> 6220 <85dc> <85dc> 4451 <85dd> <85dd> 6040 <85e4> <85e4> 4370 <85e5> <85e5> 5877 <85e9> <85e9> 5003 <85ea> <85ea> 5609 <85f7> <85f7> 6611 <85fa> <85fa> 4642 endcidrange 100 begincidrange <85fb> <85fb> 6816 <85ff> <85ff> 3817 <8602> <8602> 6041 <8606> <8606> 4520 <8607> <8607> 5529 <860a> <860a> 6088 <8616> <8616> 5924 <8617> <8617> 5028 <861a> <861a> 5441 <862d> <862d> 4395 <863f> <863f> 4378 <864e> <864e> 7833 <8650> <8650> 7632 <8654> <8654> 3609 <8655> <8655> 7133 <865b> <865b> 7721 <865c> <865c> 4521 <865e> <865e> 6221 <865f> <865f> 7834 <8667> <8667> 8009 <8679> <8679> 7860 <868a> <868a> 4845 <868c> <868c> 4963 <8693> <8693> 6456 <86a3> <86a3> 3799 <86a4> <86a4> 6817 <86a9> <86a9> 7355 <86c7> <86c7> 5289 <86cb> <86cb> 4208 <86d4> <86d4> 7945 <86d9> <86d9> 6104 <86db> <86db> 6889 <86df> <86df> 3886 <86e4> <86e4> 7666 <86ed> <86ed> 7026 <86fe> <86fe> 5785 <8700> <8700> 7245 <8702> <8702> 5105 <8703> <8703> 5753 <8708> <8708> 6074 <8718> <8718> 6970 <871a> <871a> 5214 <871c> <871c> 4884 <874e> <874e> 3508 <8755> <8755> 5730 <8757> <8757> 7924 <875f> <875f> 6302 <8766> <8766> 7625 <8768> <8768> 5676 <8774> <8774> 7835 <8776> <8776> 6703 <8778> <8778> 6105 <8782> <8782> 4418 <878d> <878d> 6372 <879f> <879f> 4759 <87a2> <87a2> 7785 <87b3> <87b3> 4248 <87ba> <87ba> 4379 <87c4> <87c4> 7376 <87e0> <87e0> 4926 <87ec> <87ec> 5442 <87ef> <87ef> 6162 <87f2> <87f2> 7309 <87f9> <87f9> 7696 <87fb> <87fb> 6408 <87fe> <87fe> 5467 <8805> <8805> 5690 <881f> <881f> 4411 <8822> <8822> 6916 <8823> <8823> 4452 <8831> <8831> 3758 <8836> <8836> 6532 <883b> <883b> 4685 <8840> <8840> 7756 <8846> <8846> 6924 <884c> <884c> 7709 <884d> <884d> 5981 <8852> <8852> 7750 <8853> <8853> 5668 <8857> <8857> 3457 <8859> <8859> 5786 <885b> <885b> 6303 <885d> <885d> 7310 <8861> <8861> 7786 <8862> <8862> 3934 <8863> <8863> 6409 <8868> <8868> 7585 <886b> <886b> 5326 <8870> <8870> 5565 <8872> <8872> 4151 <8877> <8877> 7311 <887e> <887f> 4047 <8881> <8881> 6275 <8882> <8882> 4763 <8888> <8888> 3458 <888b> <888b> 4262 <888d> <888d> 7565 <8892> <8892> 4209 <8896> <8896> 5610 <8897> <8897> 7005 endcidrange 100 begincidrange <889e> <889e> 3782 <88ab> <88ab> 7601 <88b4> <88b4> 3759 <88c1> <88c1> 6582 <88c2> <88c2> 4482 <88cf> <88cf> 4632 <88d4> <88d4> 6042 <88d5> <88d5> 6343 <88d9> <88d9> 3956 <88dc> <88dc> 5070 <88dd> <88dd> 6565 <88df> <88df> 5290 <88e1> <88e1> 4633 <88e8> <88e8> 5215 <88f3> <88f3> 5356 <88f4> <88f5> 4981 <88f8> <88f8> 4380 <88fd> <88fd> 6773 <8907> <8907> 5085 <8910> <8910> 3507 <8912> <8912> 7566 <8913> <8913> 5071 <8918> <8918> 6304 <8919> <8919> 4983 <8925> <8925> 6172 <892a> <892a> 7462 <8936> <8936> 5680 <8938> <8938> 4574 <893b> <893b> 5458 <8941> <8941> 3555 <8944> <8944> 5897 <895f> <895f> 4049 <8964> <8964> 4407 <896a> <896a> 4694 <8972> <8972> 5681 <897f> <897f> 5397 <8981> <8981> 6163 <8983> <8983> 4230 <8986> <8986> 5086 <8987> <8987> 7511 <898b> <898b> 3644 <898f> <898f> 4005 <8993> <8993> 4734 <8996> <8996> 5714 <89a1> <89a1> 3635 <89a9> <89a9> 4298 <89aa> <89aa> 7363 <89b2> <89b2> 4034 <89ba> <89ba> 3473 <89bd> <89bd> 4408 <89c0> <89c0> 3831 <89d2> <89d2> 3474 <89e3> <89e3> 7697 <89f4> <89f4> 5357 <89f8> <89f8> 7246 <8a00> <8a00> 5921 <8a02> <8a02> 6745 <8a03> <8a03> 5139 <8a08> <8a08> 3724 <8a0a> <8a0a> 5754 <8a0c> <8a0c> 7861 <8a0e> <8a0e> 7452 <8a13> <8a13> 7987 <8a16> <8a16> 8026 <8a17> <8a17> 7406 <8a18> <8a18> 4114 <8a1b> <8a1b> 6106 <8a1d> <8a1d> 5787 <8a1f> <8a1f> 5557 <8a23> <8a23> 3653 <8a25> <8a25> 4182 <8a2a> <8a2a> 4964 <8a2d> <8a2d> 5459 <8a31> <8a31> 7722 <8a34> <8a34> 5530 <8a36> <8a36> 3459 <8a3a> <8a3a> 7006 <8a3b> <8a3b> 6890 <8a50> <8a50> 5291 <8a54> <8a54> 6818 <8a55> <8a55> 7533 <8a5b> <8a5b> 6612 <8a5e> <8a5e> 5292 <8a60> <8a60> 6025 <8a62> <8a62> 5661 <8a63> <8a63> 6043 <8a66> <8a66> 5715 <8a69> <8a69> 5716 <8a6d> <8a6d> 3987 <8a6e> <8a6e> 6673 <8a70> <8a70> 8055 <8a71> <8a71> 7873 <8a72> <8a72> 7698 <8a73> <8a73> 5358 <8a75> <8a75> 5443 <8a79> <8a79> 7185 <8a85> <8a85> 6891 <8a87> <8a87> 3809 <8a8c> <8a8c> 6971 <8a8d> <8a8d> 6457 endcidrange 100 begincidrange <8a93> <8a93> 5398 <8a95> <8a95> 7417 <8a98> <8a98> 6344 <8a9e> <8a9e> 5908 <8aa0> <8aa0> 5490 <8aa1> <8aa1> 3725 <8aa3> <8aa3> 4830 <8aa4> <8aa4> 6075 <8aa5> <8aa5> 3760 <8aa6> <8aa6> 5558 <8aa8> <8aa8> 7946 <8aaa> <8aaa> 5460 <8ab0> <8ab0> 5611 <8ab2> <8ab2> 3810 <8ab9> <8ab9> 5216 <8abc> <8abc> 6410 <8abe> <8abe> 6377 <8abf> <8abf> 6819 <8ac2> <8ac2> 7186 <8ac4> <8ac4> 5662 <8ac7> <8ac7> 4231 <8acb> <8acb> 7202 <8acd> <8acd> 6589 <8acf> <8acf> 7276 <8ad2> <8ad2> 4437 <8ad6> <8ad6> 4535 <8adb> <8adb> 6345 <8adc> <8adc> 7194 <8ae1> <8ae1> 5717 <8ae6> <8ae6> 7210 <8ae7> <8ae7> 7699 <8aea> <8aea> 6746 <8aeb> <8aeb> 3498 <8aed> <8aed> 6346 <8aee> <8aee> 6506 <8af1> <8af1> 8002 <8af6> <8af6> 5770 <8af7> <8af7> 7593 <8af8> <8af8> 6774 <8afa> <8afa> 5922 <8afe> <8afe> 4139 <8b00> <8b00> 4785 <8b01> <8b01> 5818 <8b02> <8b02> 6305 <8b04> <8b04> 4371 <8b0e> <8b0e> 4866 <8b10> <8b10> 4885 <8b14> <8b14> 7633 <8b16> <8b16> 5543 <8b17> <8b17> 4965 <8b19> <8b19> 3657 <8b1a> <8b1a> 6442 <8b1b> <8b1b> 3556 <8b1d> <8b1d> 5293 <8b20> <8b20> 6164 <8b28> <8b28> 4786 <8b2b> <8b2b> 6634 <8b2c> <8b2c> 4589 <8b33> <8b33> 3935 <8b39> <8b39> 4035 <8b41> <8b41> 7874 <8b49> <8b49> 6940 <8b4e> <8b4e> 8011 <8b4f> <8b4f> 4115 <8b58> <8b58> 5731 <8b5a> <8b5a> 4232 <8b5c> <8b5c> 5072 <8b66> <8b66> 3697 <8b6c> <8b6c> 5217 <8b6f> <8b6f> 5953 <8b70> <8b70> 6411 <8b74> <8b74> 3645 <8b77> <8b77> 7836 <8b7d> <8b7d> 6044 <8b80> <8b80> 4318 <8b8a> <8b8a> 5033 <8b90> <8b90> 5612 <8b92> <8b92> 7090 <8b93> <8b93> 5898 <8b96> <8b96> 7091 <8b9a> <8b9a> 7072 <8c37> <8c37> 3772 <8c3f> <8c3f> 3726 <8c41> <8c41> 7902 <8c46> <8c46> 4355 <8c48> <8c48> 4116 <8c4a> <8c4a> 7594 <8c4c> <8c4c> 6122 <8c55> <8c55> 5718 <8c5a> <8c5a> 4327 <8c61> <8c61> 5359 <8c6a> <8c6a> 7837 <8c6b> <8c6b> 6045 <8c79> <8c79> 7586 <8c7a> <8c7a> 5719 <8c82> <8c82> 7236 <8c8a> <8c8a> 4723 <8c8c> <8c8c> 4787 <8c9d> <8c9d> 7512 <8c9e> <8c9e> 6747 endcidrange 100 begincidrange <8ca0> <8ca0> 5140 <8ca1> <8ca1> 6583 <8ca2> <8ca2> 3800 <8ca7> <8ca7> 5234 <8ca8> <8ca8> 7875 <8ca9> <8ca9> 7495 <8caa> <8caa> 7423 <8cab> <8cab> 3832 <8cac> <8cac> 7129 <8caf> <8caf> 6613 <8cb0> <8cb0> 5499 <8cb3> <8cb3> 6433 <8cb4> <8cb4> 3992 <8cb6> <8cb6> 7528 <8cb7> <8cb7> 4718 <8cb8> <8cb8> 4263 <8cbb> <8cbb> 5218 <8cbc> <8cbc> 7195 <8cbd> <8cbd> 6432 <8cbf> <8cbf> 4831 <8cc0> <8cc0> 7626 <8cc1> <8cc1> 5169 <8cc2> <8cc2> 4547 <8cc3> <8cc3> 6476 <8cc4> <8cc4> 7947 <8cc7> <8cc7> 6507 <8cc8> <8cc8> 3460 <8cca> <8cca> 6635 <8cd1> <8cd1> 7007 <8cd3> <8cd3> 5235 <8cda> <8cda> 4548 <8cdc> <8cdc> 5294 <8cde> <8cde> 5360 <8ce0> <8ce0> 4984 <8ce2> <8ce2> 7751 <8ce3> <8ce3> 4719 <8ce4> <8ce4> 7160 <8ce6> <8ce6> 5141 <8cea> <8cea> 7027 <8ced> <8ced> 4299 <8cf4> <8cf4> 4549 <8cfb> <8cfb> 5142 <8cfc> <8cfc> 3936 <8cfd> <8cfd> 5364 <8d04> <8d04> 6972 <8d05> <8d05> 7315 <8d07> <8d07> 6365 <8d08> <8d08> 6941 <8d0a> <8d0a> 7073 <8d0d> <8d0d> 5468 <8d13> <8d13> 6566 <8d16> <8d16> 5544 <8d64> <8d64> 6636 <8d66> <8d66> 5295 <8d6b> <8d6b> 7732 <8d70> <8d70> 6892 <8d73> <8d73> 4006 <8d74> <8d74> 5143 <8d77> <8d77> 4117 <8d85> <8d85> 7237 <8d8a> <8d8a> 6282 <8d99> <8d99> 6820 <8da3> <8da3> 7326 <8da8> <8da8> 7277 <8db3> <8db3> 6830 <8dba> <8dba> 5144 <8dbe> <8dbe> 6973 <8dc6> <8dc6> 7442 <8dcb> <8dcb> 4936 <8dcc> <8dcc> 7028 <8dcf> <8dcf> 3461 <8ddb> <8ddb> 7488 <8ddd> <8ddd> 3596 <8de1> <8de1> 6637 <8de3> <8de3> 5444 <8de8> <8de8> 3811 <8def> <8def> 4522 <8df3> <8df3> 4300 <8e0a> <8e0a> 6194 <8e0f> <8e0f> 4237 <8e10> <8e10> 7161 <8e1e> <8e1e> 3597 <8e2a> <8e2a> 6850 <8e30> <8e30> 6347 <8e35> <8e35> 6851 <8e42> <8e42> 6348 <8e44> <8e44> 6775 <8e47> <8e47> 3610 <8e48> <8e48> 4301 <8e49> <8e49> 7052 <8e4a> <8e4a> 7797 <8e59> <8e59> 7296 <8e5f> <8e5f> 6638 <8e60> <8e60> 7145 <8e74> <8e74> 7297 <8e76> <8e76> 3982 <8e81> <8e81> 6821 <8e87> <8e87> 6614 <8e8a> <8e8a> 6893 <8e8d> <8e8d> 5878 endcidrange 100 begincidrange <8eaa> <8eaa> 4643 <8eab> <8eab> 5755 <8eac> <8eac> 3968 <8ec0> <8ec0> 3937 <8eca> <8eca> 7053 <8ecb> <8ecb> 5819 <8ecc> <8ecc> 3988 <8ecd> <8ecd> 3957 <8ed2> <8ed2> 7726 <8edf> <8edf> 5982 <8eeb> <8eeb> 7008 <8ef8> <8ef8> 7298 <8efb> <8efb> 3462 <8efe> <8efe> 5732 <8f03> <8f03> 3887 <8f05> <8f05> 4523 <8f09> <8f09> 6584 <8f12> <8f12> 7196 <8f13> <8f13> 4686 <8f14> <8f14> 5073 <8f15> <8f15> 3698 <8f1b> <8f1b> 4438 <8f1c> <8f1c> 7356 <8f1d> <8f1d> 8003 <8f1e> <8f1e> 4706 <8f1f> <8f1f> 7174 <8f26> <8f26> 4474 <8f27> <8f27> 5055 <8f29> <8f29> 4985 <8f2a> <8f2a> 4599 <8f2f> <8f2f> 7035 <8f33> <8f33> 6894 <8f38> <8f38> 5613 <8f39> <8f39> 5087 <8f3b> <8f3b> 5088 <8f3e> <8f3e> 6674 <8f3f> <8f3f> 5944 <8f44> <8f44> 7650 <8f45> <8f45> 6276 <8f49> <8f49> 6675 <8f4d> <8f4d> 7175 <8f4e> <8f4e> 3888 <8f5d> <8f5d> 5945 <8f5f> <8f5f> 3867 <8f62> <8f62> 4463 <8f9b> <8f9b> 5756 <8f9c> <8f9c> 3761 <8fa3> <8fa3> 4398 <8fa6> <8fa6> 7496 <8fa8> <8fa8> 5034 <8fad> <8fad> 5296 <8faf> <8faf> 5035 <8fb0> <8fb0> 7009 <8fb1> <8fb1> 6173 <8fb2> <8fb2> 4177 <8fc2> <8fc2> 6222 <8fc5> <8fc5> 5757 <8fce> <8fce> 6026 <8fd1> <8fd1> 4036 <8fd4> <8fd4> 4927 <8fe6> <8fe6> 3463 <8fea> <8fea> 6639 <8feb> <8feb> 4902 <8fed> <8fed> 7029 <8ff0> <8ff0> 5669 <8ff2> <8ff2> 3626 <8ff7> <8ff7> 4867 <8ff9> <8ff9> 6640 <8ffd> <8ffd> 7278 <9000> <9000> 7463 <9001> <9001> 5559 <9002> <9002> 3838 <9003> <9003> 4302 <9005> <9005> 7978 <9006> <9006> 5954 <9008> <9008> 7787 <900b> <900b> 7567 <900d> <900d> 5531 <900f> <900f> 7469 <9010> <9010> 7299 <9011> <9011> 3938 <9014> <9014> 4303 <9015> <9015> 3699 <9017> <9017> 4356 <9019> <9019> 6615 <901a> <901a> 7458 <901d> <901d> 5399 <901e> <901e> 4500 <901f> <901f> 5545 <9020> <9020> 6822 <9021> <9021> 6917 <9022> <9022> 5106 <9023> <9023> 4475 <902e> <902e> 7211 <9031> <9031> 6895 <9032> <9032> 7010 <9035> <9035> 4007 <9038> <9038> 6466 <903c> <903c> 7615 <903e> <903e> 6350 endcidrange 100 begincidrange <9041> <9041> 4361 <9042> <9042> 5614 <9047> <9047> 6223 <904a> <904a> 6349 <904b> <904b> 6246 <904d> <904d> 7525 <904e> <904e> 3812 <9050> <9050> 7627 <9051> <9051> 7925 <9053> <9053> 4304 <9054> <9054> 4216 <9055> <9055> 6306 <9059> <9059> 6165 <905c> <905c> 5550 <905d> <905d> 4238 <905e> <905e> 7212 <9060> <9060> 6277 <9061> <9061> 5532 <9063> <9063> 3646 <9069> <9069> 6641 <906d> <906d> 6823 <906e> <906e> 7054 <906f> <906f> 4362 <9072> <9072> 6974 <9075> <9075> 6918 <9077> <9077> 7162 <9078> <9078> 5445 <907a> <907a> 6351 <907c> <907c> 4561 <907d> <907d> 3598 <907f> <907f> 7602 <9080> <9080> 6166 <9081> <9081> 4720 <9082> <9082> 7700 <9083> <9083> 5615 <9084> <9084> 7896 <9087> <9087> 6434 <9088> <9088> 4669 <908a> <908a> 5036 <908f> <908f> 4381 <9091> <9091> 6389 <9095> <9095> 6096 <9099> <9099> 4707 <90a2> <90a2> 7788 <90a3> <90a3> 4138 <90a6> <90a6> 4966 <90a8> <90a8> 7250 <90aa> <90aa> 5297 <90af> <90af> 3526 <90b0> <90b0> 7443 <90b1> <90b1> 3939 <90b5> <90b5> 5533 <90b8> <90b8> 6616 <90c1> <90c1> 6236 <90ca> <90ca> 3889 <90de> <90de> 4419 <90e1> <90e1> 3958 <90e8> <90e8> 5145 <90ed> <90ed> 3818 <90f5> <90f5> 6224 <90fd> <90fd> 4305 <9102> <9102> 5802 <9112> <9112> 7279 <9115> <9115> 7714 <9119> <9119> 5219 <9127> <9127> 4372 <912d> <912d> 6748 <9132> <9132> 4210 <9149> <9149> 6352 <914a> <914a> 6749 <914b> <914b> 7280 <914c> <914c> 6519 <914d> <914d> 4986 <914e> <914e> 6896 <9152> <9152> 6897 <9162> <9162> 7238 <9169> <9169> 4760 <916a> <916a> 4387 <916c> <916c> 5616 <9175> <9175> 7964 <9177> <9177> 7843 <9178> <9178> 5313 <9187> <9187> 5663 <9189> <9189> 7327 <918b> <918b> 7239 <918d> <918d> 6776 <9192> <9192> 5491 <919c> <919c> 7281 <91ab> <91ab> 6412 <91ac> <91ac> 6567 <91ae> <91ae> 7240 <91af> <91af> 7798 <91b1> <91b1> 4937 <91b4> <91b4> 4509 <91b5> <91b5> 3584 <91c0> <91c0> 5899 <91c7> <91c7> 7124 <91c9> <91c9> 6353 <91cb> <91cb> 5416 <91cc> <91cc> 4634 endcidrange 100 begincidrange <91cd> <91cd> 6925 <91ce> <91ce> 5871 <91cf> <91cf> 4439 <91d0> <91d0> 4635 <91d1> <91d1> 4131 <91d7> <91d7> 5566 <91d8> <91d8> 6750 <91dc> <91dc> 5146 <91dd> <91dd> 7374 <91e3> <91e3> 6824 <91e7> <91e7> 7163 <91ea> <91ea> 6225 <91f5> <91f5> 7125 <920d> <920d> 4363 <9210> <9210> 3622 <9211> <9211> 7497 <9212> <9212> 5329 <9217> <9217> 6366 <921e> <921e> 4014 <9234> <9234> 4501 <923a> <923a> 6082 <923f> <923f> 6676 <9240> <9240> 3534 <9245> <9245> 3599 <9249> <9249> 7752 <9257> <9257> 3658 <925b> <925b> 5983 <925e> <925e> 6283 <9262> <9262> 4938 <9264> <9264> 3940 <9265> <9265> 5670 <9266> <9266> 6751 <9280> <9280> 6378 <9283> <9283> 7260 <9285> <9285> 4347 <9291> <9291> 5446 <9293> <9293> 6677 <9296> <9296> 5617 <9298> <9298> 4761 <929c> <929c> 7660 <92b3> <92b3> 6046 <92b6> <92b6> 3941 <92b7> <92b7> 5534 <92b9> <92b9> 5618 <92cc> <92cc> 6752 <92cf> <92cf> 7769 <92d2> <92d2> 5107 <92e4> <92e4> 5400 <92ea> <92ea> 7568 <92f8> <92f8> 3600 <92fc> <92fc> 3557 <9304> <9304> 4532 <9310> <9310> 7282 <9318> <9318> 7283 <931a> <931a> 6590 <931e> <931e> 5664 <931f> <931f> 4233 <9320> <9320> 6753 <9321> <9321> 4118 <9322> <9322> 6678 <9324> <9324> 4119 <9326> <9326> 4050 <9328> <9328> 4811 <932b> <932b> 5417 <932e> <932e> 3762 <932f> <932f> 7059 <9348> <9348> 6027 <934a> <934a> 4476 <934b> <934b> 3813 <934d> <934d> 4306 <9354> <9354> 5803 <935b> <935b> 4211 <936e> <936e> 6354 <9375> <9375> 3611 <937c> <937c> 7375 <937e> <937e> 6852 <938c> <938c> 3659 <9394> <9394> 6195 <9396> <9396> 5564 <939a> <939a> 7284 <93a3> <93a3> 7789 <93a7> <93a7> 3577 <93ac> <93ac> 7838 <93ad> <93ad> 7011 <93b0> <93b0> 6467 <93c3> <93c3> 6831 <93d1> <93d1> 6642 <93de> <93de> 6196 <93e1> <93e1> 3700 <93e4> <93e4> 4575 <93f6> <93f6> 7036 <9404> <9404> 7952 <9418> <9418> 6853 <9425> <9425> 5447 <942b> <942b> 6679 <9435> <9435> 7176 <9438> <9438> 7407 <9444> <9444> 6898 <9451> <9452> 3527 <945b> <945b> 3851 endcidrange 100 begincidrange <947d> <947d> 7074 <947f> <947f> 7060 <9577> <9577> 6568 <9580> <9580> 4846 <9583> <9583> 5469 <9589> <9589> 7542 <958b> <958b> 3578 <958f> <958f> 6367 <9591> <9592> 7645 <9593> <9593> 3499 <9594> <9594> 4882 <9598> <9598> 3535 <95a3> <95a3> 3475 <95a4> <95a4> 7667 <95a5> <95a5> 5008 <95a8> <95a8> 4008 <95ad> <95ad> 4453 <95b1> <95b1> 5988 <95bb> <95bb> 5996 <95bc> <95bc> 5820 <95c7> <95c7> 5828 <95ca> <95ca> 7903 <95d4> <95d4> 7668 <95d5> <95d5> 3983 <95d6> <95d6> 7473 <95dc> <95dc> 3833 <95e1> <95e1> 7164 <95e2> <95e2> 5029 <961c> <961c> 5147 <9621> <9621> 7165 <962a> <962a> 7498 <962e> <962e> 6123 <9632> <9632> 4967 <963b> <963b> 6825 <963f> <963f> 5788 <9640> <9640> 7391 <9642> <9642> 7603 <9644> <9644> 5148 <964b> <964b> 4576 <964c> <964c> 4724 <964d> <964d> 3558 <9650> <9650> 7647 <965b> <965b> 7543 <965c> <965c> 7669 <965d> <965d> 5470 <965e> <965e> 5691 <965f> <965f> 7146 <9662> <9662> 6278 <9663> <9663> 7012 <9664> <9664> 6777 <966a> <966a> 4987 <9670> <9670> 6384 <9673> <9673> 7013 <9675> <9675> 4612 <9676> <9676> 4307 <9677> <9677> 7661 <9678> <9678> 4593 <967d> <967d> 5900 <9685> <9685> 6226 <9686> <9686> 4603 <968a> <968a> 4264 <968b> <968b> 5619 <968d> <968d> 7926 <968e> <968e> 3727 <9694> <9694> 3636 <9695> <9695> 6247 <9698> <9698> 5849 <9699> <9699> 4022 <969b> <969b> 6778 <969c> <969c> 6569 <96a3> <96a3> 4644 <96a7> <96a8> 5620 <96aa> <96aa> 7728 <96b1> <96b1> 6379 <96b7> <96b7> 4510 <96bb> <96bb> 7147 <96c0> <96c0> 6520 <96c1> <96c1> 5813 <96c4> <96c4> 6254 <96c5> <96c5> 5789 <96c6> <96c6> 7037 <96c7> <96c7> 3763 <96c9> <96c9> 7357 <96cb> <96cb> 6919 <96cc> <96cc> 6508 <96cd> <96cd> 6097 <96ce> <96ce> 6617 <96d5> <96d5> 6826 <96d6> <96d6> 5622 <96d9> <96d9> 5773 <96db> <96db> 7285 <96dc> <96dc> 6533 <96e2> <96e2> 4636 <96e3> <96e3> 4142 <96e8> <96e9> 6227 <96ea> <96ea> 5461 <96ef> <96ef> 4847 <96f0> <96f0> 5170 <96f2> <96f2> 6248 <96f6> <96f6> 4502 endcidrange 100 begincidrange <96f7> <96f7> 4550 <96f9> <96f9> 4903 <96fb> <96fb> 6680 <9700> <9700> 5623 <9706> <9706> 6754 <9707> <9707> 7014 <9711> <9711> 6698 <9713> <9713> 6047 <9716> <9716> 4651 <9719> <9719> 6028 <971c> <971c> 5361 <971e> <971e> 7628 <9727> <9727> 4832 <9730> <9730> 5314 <9732> <9732> 4524 <9739> <9739> 5030 <973d> <973d> 6779 <9742> <9742> 4464 <9744> <9744> 5850 <9748> <9748> 4503 <9751> <9751> 7203 <9756> <9756> 6755 <975c> <975c> 6756 <975e> <975e> 5220 <9761> <9761> 4868 <9762> <9762> 4744 <9769> <9769> 7733 <976d> <976d> 6458 <9774> <9774> 7876 <9777> <9777> 6459 <977a> <977a> 4695 <978b> <978b> 7799 <978d> <978d> 5814 <978f> <978f> 3801 <97a0> <97a0> 3950 <97a8> <97a8> 3509 <97ab> <97ab> 3951 <97ad> <97ad> 7526 <97c6> <97c6> 7166 <97cb> <97cb> 6307 <97d3> <97d3> 7648 <97dc> <97dc> 4308 <97f3> <97f3> 6385 <97f6> <97f6> 5535 <97fb> <97fb> 6249 <97ff> <97ff> 7715 <9800> <9800> 7839 <9801> <9801> 7757 <9802> <9802> 6757 <9803> <9803> 3701 <9805> <9805> 7684 <9806> <9806> 5665 <9808> <9808> 5624 <980a> <980a> 6237 <980c> <980c> 5560 <9810> <9810> 6048 <9811> <9811> 6124 <9812> <9812> 4928 <9813> <9813> 4328 <9817> <9817> 7489 <9818> <9818> 4504 <982d> <982d> 4357 <9830> <9830> 7770 <9838> <9838> 3702 <9839> <9839> 7464 <983b> <983b> 5236 <9846> <9846> 3814 <984c> <984c> 6780 <984d> <984d> 5857 <984e> <984e> 5804 <9854> <9854> 5815 <9858> <9858> 6279 <985a> <985a> 6681 <985e> <985e> 4590 <9865> <9865> 7840 <9867> <9867> 3764 <986b> <986b> 6682 <986f> <986f> 7753 <98a8> <98a8> 7595 <98af> <98af> 5330 <98b1> <98b1> 7444 <98c4> <98c4> 7588 <98c7> <98c7> 7587 <98db> <98db> 5221 <98dc> <98dc> 5004 <98df> <98df> 5733 <98e1> <98e1> 5551 <98e2> <98e2> 4120 <98ed> <98ed> 7362 <98ee> <98ee> 6386 <98ef> <98ef> 4929 <98f4> <98f4> 6435 <98fc> <98fc> 5298 <98fd> <98fd> 7569 <98fe> <98fe> 5734 <9903> <9903> 3890 <9909> <9909> 7716 <990a> <990a> 5901 <990c> <990c> 6436 <9910> <9910> 7075 endcidrange 100 begincidrange <9913> <9913> 5790 <9918> <9918> 5946 <991e> <991e> 6683 <9920> <9920> 5056 <9928> <9928> 3834 <9945> <9945> 4687 <9949> <9949> 4037 <994b> <994b> 3989 <994c> <994c> 7076 <994d> <994d> 5448 <9951> <9951> 4121 <9952> <9952> 6167 <9954> <9954> 6098 <9957> <9957> 7717 <9996> <9996> 5625 <9999> <9999> 7718 <999d> <999d> 7613 <99a5> <99a5> 5089 <99a8> <99a8> 7790 <99ac> <99ac> 4661 <99ad> <99ad> 5909 <99ae> <99ae> 7596 <99b1> <99b1> 7392 <99b3> <99b3> 7358 <99b4> <99b4> 5666 <99b9> <99b9> 6468 <99c1> <99c1> 4904 <99d0> <99d0> 6899 <99d1> <99d1> 4174 <99d2> <99d2> 3942 <99d5> <99d5> 3464 <99d9> <99d9> 5149 <99dd> <99dd> 7393 <99df> <99df> 5299 <99ed> <99ed> 7701 <99f1> <99f1> 4388 <99ff> <99ff> 6920 <9a01> <9a01> 5240 <9a08> <9a08> 5057 <9a0e> <9a0f> 4122 <9a19> <9a19> 7527 <9a2b> <9a2b> 3612 <9a30> <9a30> 4373 <9a36> <9a36> 7286 <9a37> <9a37> 5536 <9a40> <9a40> 4725 <9a43> <9a43> 7589 <9a45> <9a45> 3943 <9a4d> <9a4d> 7965 <9a55> <9a55> 3891 <9a57> <9a57> 7729 <9a5a> <9a5a> 3703 <9a5b> <9a5b> 5955 <9a5f> <9a5f> 7328 <9a62> <9a62> 4454 <9a65> <9a65> 4124 <9a69> <9a69> 7897 <9a6a> <9a6a> 4455 <9aa8> <9aa8> 3785 <9ab8> <9ab8> 7702 <9ad3> <9ad3> 5626 <9ad4> <9ad4> 7213 <9ad8> <9ad8> 3765 <9ae5> <9ae5> 5997 <9aee> <9aee> 4939 <9b1a> <9b1a> 5627 <9b27> <9b27> 4562 <9b2a> <9b2a> 7470 <9b31> <9b31> 6251 <9b3c> <9b3c> 3993 <9b41> <9b41> 3863 <9b42> <9b42> 7849 <9b43> <9b43> 4940 <9b44> <9b44> 4995 <9b45> <9b45> 4721 <9b4f> <9b4f> 6308 <9b54> <9b54> 4662 <9b5a> <9b5a> 5910 <9b6f> <9b6f> 4525 <9b8e> <9b8e> 6699 <9b91> <9b91> 7570 <9b9f> <9b9f> 5816 <9bab> <9bab> 3892 <9bae> <9bae> 5449 <9bc9> <9bc9> 4637 <9bd6> <9bd6> 7204 <9be4> <9be4> 3783 <9be8> <9be8> 3704 <9c0d> <9c0d> 7287 <9c10> <9c10> 5805 <9c12> <9c12> 5090 <9c15> <9c15> 7629 <9c25> <9c25> 7898 <9c32> <9c32> 6076 <9c3b> <9c3b> 4688 <9c47> <9c47> 3559 <9c49> <9c49> 5039 <9c57> <9c57> 4645 <9ce5> <9ce5> 6827 <9ce7> <9ce7> 5150 endcidrange 100 begincidrange <9ce9> <9ce9> 3944 <9cf3> <9cf3> 5108 <9cf4> <9cf4> 4762 <9cf6> <9cf6> 5984 <9d09> <9d09> 5791 <9d1b> <9d1b> 6280 <9d26> <9d26> 5839 <9d28> <9d28> 5832 <9d3b> <9d3b> 7862 <9d51> <9d51> 3647 <9d5d> <9d5d> 5792 <9d60> <9d60> 3773 <9d61> <9d61> 4833 <9d6c> <9d6c> 5180 <9d72> <9d72> 6521 <9da9> <9da9> 4794 <9daf> <9daf> 5860 <9db4> <9db4> 7634 <9dc4> <9dc4> 3728 <9dd7> <9dd7> 3945 <9df2> <9df2> 7329 <9df8> <9df8> 8012 <9df9> <9df9> 6393 <9dfa> <9dfa> 4526 <9e1a> <9e1a> 5861 <9e1e> <9e1e> 4396 <9e75> <9e75> 4527 <9e79> <9e79> 7662 <9e7d> <9e7d> 5998 <9e7f> <9e7f> 4533 <9e92> <9e92> 4125 <9e93> <9e93> 4534 <9e97> <9e97> 4456 <9e9d> <9e9d> 5300 <9e9f> <9e9f> 4646 <9ea5> <9ea5> 4726 <9eb4> <9eb4> 3952 <9eb5> <9eb5> 4745 <9ebb> <9ebb> 4663 <9ebe> <9ebe> 8004 <9ec3> <9ec3> 7927 <9ecd> <9ecd> 5401 <9ece> <9ece> 4457 <9ed1> <9ed1> 8018 <9ed4> <9ed4> 3623 <9ed8> <9ed8> 4835 <9edb> <9edb> 4265 <9edc> <9edc> 7305 <9ede> <9ede> 6700 <9ee8> <9ee8> 4249 <9ef4> <9ef4> 4869 <9f07> <9f07> 6077 <9f08> <9f08> 5040 <9f0e> <9f0e> 6758 <9f13> <9f13> 3766 <9f20> <9f20> 5402 <9f3b> <9f3b> 5222 <9f4a> <9f4a> 6781 <9f4b> <9f4b> 6585 <9f4e> <9f4e> 6586 <9f52> <9f52> 7359 <9f5f> <9f5f> 6618 <9f61> <9f61> 4505 <9f67> <9f67> 5462 <9f6a> <9f6a> 7061 <9f6c> <9f6c> 5911 <9f77> <9f77> 5806 <9f8d> <9f8d> 4563 <9f90> <9f90> 4968 <9f95> <9f95> 3529 <9f9c> <9f9c> 3946 1086 9333 1088 9335 1089 9337 1093 9342 1101 9343 1106 9345 1107 9348 1108 9355 1110 9356 1113 9362 1115 9364 1116 9367 1117 9377 1118 9378 1119 endcidrange 100 begincidrange 9384 1120 9387 1121 9390 1122 9409 1124 9411 1125 9413 1127 9414 1128 9419 1130 9420 1134 9422 1138 9425 1139 9428 1140 9435 1142 9436 1145 9442 1148 9443 1149 9445 1151 9452 1153 9453 1156 9456 1157 9458 1158 9461 1159 9464 1160 9472 1161 9473 1162 9481 1164 9483 1165 9485 1167 9486 1168 9487 1169 9489 1172 9490 1173 9491 1175 9496 1177 9498 1178 9501 1179 9502 1180 9507 1182 9508 1183 9509 1184 9515 1185 9518 1186 9521 1187 9529 1188 9531 1190 9537 1192 9539 1193 9542 1194 9549 1196 9550 1197 endcidrange 100 begincidrange 9551 1198 9557 1199 9560 1200 9563 1201 9571 1202 9572 1203 9580 1205 9582 1206 9584 1210 9588 1213 9589 1214 9590 1216 9595 1218 9597 1219 9600 1220 9611 1222 9617 1223 9635 1224 9643 1226 9645 1227 9648 1228 9655 1230 9656 1231 9664 1232 9667 1233 9670 1234 9689 1236 9691 1237 1238 9693 1240 9699 1242 9700 1243 9701 1244 9707 1245 9734 1247 9736 1248 9738 1250 9739 1251 9744 1253 9745 1254 9746 1256 9749 1257 9750 1260 9751 1261 9754 1262 9755 1263 9760 1265 9761 1268 9764 1269 9766 1271 9768 endcidrange 100 begincidrange 1272 9771 1273 9778 1275 9779 1278 9785 1280 9791 1281 9838 1284 9839 1285 9842 1286 9849 1288 9850 1291 9856 1293 9858 1294 9869 1295 9871 1296 9872 1297 9878 1298 9881 1299 9884 9887 1300 9894 1302 9898 1303 9900 1304 9927 1306 9929 1307 9930 1308 9931 1309 9938 1311 9939 1312 9940 1315 9944 1317 9950 1318 9961 1320 9967 1322 9986 1323 9992 1324 9995 1325 9998 1326 10005 1328 10008 1329 10014 1330 10041 1332 10043 1333 10046 1334 10052 1337 10053 1338 10054 1340 10059 1341 10066 1342 10077 1344 10083 1346 endcidrange 100 begincidrange 10085 1347 10088 1348 10095 1350 10097 1351 10104 1352 10107 1353 10110 1354 10117 1356 10127 1357 10154 1359 10156 1360 10157 1361 10158 1362 10159 1363 10163 1366 10164 1367 10165 1368 10168 1369 10198 1371 10200 1372 10203 1373 10210 1375 10211 1376 10212 1377 10218 1380 10219 1381 10221 1385 10226 1387 10227 1392 10228 1393 10229 1396 10231 1397 10234 1398 10241 1400 10242 1403 10248 1405 10250 1406 10253 1407 10260 1408 10264 10290 1409 10298 1411 10299 1413 10302 1414 10303 1416 10307 1418 10308 1421 10313 1424 10315 1425 10318 1426 10325 endcidrange 100 begincidrange 1428 10326 1431 10332 1433 10334 1434 10337 1435 10344 1437 10346 1439 10348 1440 10351 1441 10354 1442 10377 1444 10379 1445 10382 1446 10383 1447 10388 1449 10389 1450 10390 1451 10394 1454 10397 1455 10400 1456 10411 1457 10446 1458 10449 1459 10452 1460 10459 1462 10460 1463 10468 1465 10470 1466 10473 1467 10481 1468 10482 1469 10483 10485 1470 10489 1472 10491 1473 10493 1475 10500 1477 10501 1478 10502 1479 10508 1480 10527 1481 10534 1482 10561 1483 10564 1484 10567 1485 10574 1487 10584 1489 10590 1490 10597 1492 10600 1493 10606 1495 endcidrange 100 begincidrange 10608 1496 10611 1499 10616 1501 10617 1502 10618 1504 10621 1505 10622 1506 10625 1507 10628 1508 10647 1510 10649 1511 10652 1512 10653 1513 10658 1515 10659 1516 10660 1517 10664 1518 10665 1521 10666 1522 10668 1527 10671 1530 10672 1535 1536 10675 1538 10677 1539 10680 1540 10687 1542 10688 1545 10694 1546 10749 1549 10750 1550 10752 1552 10753 1554 10757 1556 10758 1557 10759 1558 10760 1559 10762 1560 10763 1562 10765 1563 10768 1564 10775 1566 10776 1569 10782 1570 10785 1571 10788 1572 10799 1574 10805 1575 10808 1576 10831 1578 10833 endcidrange 100 begincidrange 1579 10835 1581 10836 1582 10837 1583 10840 1585 10841 1586 10842 1587 10843 1588 10844 1589 10846 1590 10849 1591 10852 1592 10871 10874 1593 10890 1594 10897 1595 10900 1596 10903 1597 10910 1599 10911 1600 10919 1601 10946 1603 10948 1604 10951 1605 10958 1607 10959 1608 10960 1609 10966 1610 10985 1611 10992 1612 11012 1613 11018 1614 11021 1615 11024 1616 11032 1617 11033 1618 11034 1619 11040 1620 11043 1621 11046 1622 11053 1623 11057 1624 11063 1626 11065 1627 11067 1629 11068 1630 11073 1632 11074 1633 11075 1634 11081 11088 1635 11108 endcidrange 100 begincidrange 1637 11110 1638 11112 1640 11119 1642 11120 1646 11125 1648 11127 1649 11130 1650 11137 1652 11138 1655 11143 1658 11145 1659 11148 1660 11155 1662 11156 1665 11218 1667 11220 1668 11223 1669 11224 1671 11228 1673 11229 1676 11234 1679 11236 1680 11239 1681 11246 1683 11247 1686 11253 1687 11272 11291 1688 11307 1690 11309 1691 11312 1692 11324 1693 11330 1694 11337 1695 11356 1696 11383 1697 11386 1698 11437 1700 11439 1701 11442 1702 11448 1704 11452 1705 11486 1706 11513 1707 11516 1708 11519 1709 11526 1711 11529 1712 11563 1714 11565 1715 endcidrange 100 begincidrange 11567 1717 11574 1719 11575 1720 11583 1721 11586 1722 11589 1723 11596 1725 11606 1726 11609 1727 11612 1728 11619 1730 11620 1731 11621 1732 11627 1734 11629 1735 11632 1736 11639 1738 11640 1742 11643 1746 11645 1747 11648 1748 11655 1750 11656 1753 11662 1755 11664 1756 11678 1757 11679 1758 11713 1760 11715 1761 11718 1762 11725 1764 1765 11726 1767 11731 1770 11733 1771 11736 1772 11743 1774 11744 1775 11745 1776 11751 1778 11753 1779 11756 1780 11763 1782 11764 1785 11770 1786 11773 1787 11785 1788 11786 1789 11794 1791 11796 1792 11799 endcidrange 100 begincidrange 1793 11806 1795 11807 1796 11808 1797 11814 1798 11817 1799 11833 1800 11859 1801 11866 1802 11869 1803 11872 1804 11879 1806 11880 1807 11881 1808 11887 1809 11890 1810 11893 1811 11901 1812 11902 1813 11903 1814 11909 1816 11911 1817 11914 1818 11921 1820 11922 1821 11923 11925 1822 11929 1823 11948 1824 11955 1825 11982 1827 11984 1828 11987 1829 11994 1830 11996 1831 11997 1832 12003 1834 12005 1835 12008 1836 12015 1838 12016 1839 12017 1840 12023 1842 12025 1843 12028 1844 12035 1846 12036 1847 12037 1849 12039 1851 12068 1853 12070 1854 endcidrange 100 begincidrange 12073 1855 12080 1857 12081 1858 12082 1859 12088 1861 12090 1862 12091 1867 12096 1869 12097 1870 12098 1872 12100 1873 12101 1876 12103 1877 12106 1878 12113 1880 12114 1884 12119 1886 12125 1887 12137 1888 12171 1890 12173 1891 12176 1892 12177 1893 12182 1895 12183 1896 12184 1898 12188 1901 12190 1902 12193 1903 12200 1905 12201 1908 12207 1910 12209 1911 12212 1912 12222 1915 12223 1916 12227 1917 12254 1919 12255 1921 12258 1922 12259 1923 12264 1925 12265 1926 12266 1927 12272 1928 12275 1929 12290 1931 12324 1932 12327 1933 12330 1934 endcidrange 100 begincidrange 12338 1935 12339 1936 12340 1937 12346 1938 12349 1939 12352 1940 12360 1941 12361 1942 12369 1945 12370 1946 12372 1950 12377 1952 12378 1953 12379 1954 12382 1955 12383 1957 12386 1958 12389 1959 12397 1960 12398 1961 12406 1962 12433 1963 12436 1964 12439 1965 12458 1966 12461 1967 12464 1968 12471 1969 12473 1970 12481 1971 12484 1972 12487 1973 12494 1974 12496 1975 12532 1977 12534 1978 1979 12536 1980 12537 1981 12542 1983 12543 1986 12544 1987 12545 1988 12547 1993 12549 1998 12553 2000 12554 2001 12555 2002 12558 2003 12560 2005 12562 endcidrange 100 begincidrange 2006 12565 2007 12572 2009 12573 2012 12576 2013 12578 2015 12580 2016 12592 2017 12630 2019 12632 2020 12634 2022 12635 2023 12640 2025 12641 2026 12642 2028 12647 2030 12649 2031 12651 2033 12658 2035 12659 2038 12665 2040 12667 2041 12670 2042 12678 2043 12679 2046 12682 2047 12684 2048 12687 2049 12710 2052 12711 2053 12714 12717 2054 12721 2056 12722 2057 12723 2058 12729 2059 12732 2060 12747 2061 12754 2062 12773 2063 12780 2065 12782 2066 12785 2067 12792 2069 12802 2070 12805 2071 12828 2073 12830 2074 12832 2078 12837 2080 12838 2081 endcidrange 100 begincidrange 12839 2082 12842 2084 12843 2085 12850 2086 12861 2087 12868 2088 12895 2090 12897 2091 12900 2092 12912 2093 12918 2094 12921 2095 12924 2096 12931 2097 12933 2098 12934 2099 12940 2101 12942 2102 12945 2103 12952 2105 12953 2106 12989 2108 12991 2109 12994 2110 12995 2111 13000 2113 13001 2114 13002 2117 13006 2119 13008 2120 13011 2121 13012 2122 13017 2124 13018 2127 13023 2130 13025 2131 13028 2132 13035 2134 13036 2137 13042 2139 13056 2140 13095 2142 13097 2143 13099 2145 13106 2146 13108 2149 13114 13133 2150 13134 2151 13140 2153 13154 endcidrange 100 begincidrange 2155 13155 2158 13189 2160 13191 2161 13194 2162 13201 2164 13204 2165 13266 2166 13293 2167 13313 2168 13319 2170 13321 2171 13324 2172 13331 2173 13333 2174 13334 13364 2175 13424 2176 13444 2177 13450 2178 13453 2179 13456 2180 13463 2182 13501 2184 13503 2185 13506 2186 13513 2188 13514 2189 13515 2190 13521 2192 13522 2194 13524 2198 13529 2200 13530 2203 13533 2204 13535 2206 13537 2207 13540 2208 13547 2210 13548 2213 13554 2215 13556 2216 13559 2217 13566 2219 13567 2220 13568 2221 13574 2222 13577 2223 13580 2224 13587 2225 13591 2226 endcidrange 100 begincidrange 13597 2231 13599 2233 13600 2235 13604 2237 13605 2240 13609 2241 13610 2243 13612 2244 13615 2245 13622 2247 13623 2250 13629 2252 13631 2253 13634 2254 13641 2256 13642 2259 13648 2260 13651 2261 13654 2262 13666 2263 13672 2266 13673 2267 13676 2268 13677 2269 13682 2271 13683 2272 13684 2273 13687 2274 13689 2276 13691 2277 13694 2278 13706 2279 13712 2280 13715 2281 13718 2282 13725 2283 13727 2285 13734 2286 13737 2287 13740 2288 13747 2290 13748 2291 13756 2293 13758 2294 13761 2295 13768 2297 13769 2298 13770 2299 13776 2301 13778 2302 endcidrange 100 begincidrange 13780 2304 13787 2306 13788 2307 13789 2308 13790 2309 13791 2311 13792 2312 13811 2313 13818 2315 13820 2316 13823 2317 13830 2318 13834 2319 13840 2321 13842 2322 13845 2323 13852 2325 13853 2326 13854 2327 13860 2329 13866 2330 13873 2331 13875 2332 13876 2333 13882 2335 13884 2336 13887 2338 13893 2340 13894 2341 13895 2342 13929 2344 13931 2345 13933 2347 13939 2350 13940 2351 13941 2352 13945 2353 13946 2355 13947 2357 13950 2358 13957 2360 13959 2362 13964 2365 13966 2366 13969 2367 13976 2369 13978 2371 14005 2372 14039 2374 14041 2375 endcidrange 100 begincidrange 14044 2376 14045 2377 14050 2379 14052 2381 14058 2382 14061 2383 14064 2384 14115 2385 14138 2387 14140 2388 14142 2390 14143 2391 14148 2393 14151 2394 14157 2396 14159 14166 2397 14174 2398 14181 2399 14200 2400 14207 2401 14210 2402 14213 2403 14220 2405 14230 2406 14257 2408 14259 2409 14262 2410 14269 2412 14272 2413 14278 2414 14297 2415 14304 2416 14331 2417 14334 2418 14378 2419 14384 2421 14386 2422 14389 2423 14390 2424 2425 14394 2427 14404 2428 14407 2429 14410 2430 14417 2431 14428 2433 14430 2434 14433 2435 14440 2437 14441 2438 endcidrange 100 begincidrange 14442 2439 14448 2441 14450 2444 14451 2447 14455 2450 14456 2453 14459 2455 14460 2457 14462 2458 14465 2459 14472 2461 14473 2464 14479 2466 14481 2467 14484 2468 14486 2469 14490 2471 14491 2472 14492 2473 14495 2474 14496 2476 14499 2477 14502 2478 14510 2479 14520 2481 14522 2483 14523 2487 14528 2494 14529 2495 14530 2496 14531 2498 14533 2499 14536 2500 14543 2502 14544 2503 14545 2504 14551 2507 14552 2508 14555 2509 14556 2511 2515 14560 2517 14563 2521 14566 2522 14569 2523 14576 2525 14577 2527 14584 2529 14586 2530 14589 2533 14590 endcidrange 100 begincidrange 2534 14592 2537 14593 2538 14594 2539 14595 2540 14599 2542 14601 2543 14604 2544 14611 2546 14612 2549 14618 2551 14620 2552 14631 2553 14633 2554 14634 2555 14640 2557 14642 2558 14645 2559 14652 2561 14653 2562 14654 2563 14660 2565 14662 2566 14665 2567 14672 2569 14673 2570 14674 2571 14680 2573 14682 2574 14685 2577 14690 2579 14691 2580 14692 2581 14698 2583 14700 2584 14703 2585 14710 2587 14712 2589 14718 2591 14720 2592 14723 2593 14730 2595 14733 14735 2596 14739 2598 14741 2599 14744 2600 14751 2602 14752 2603 14753 2604 14759 2606 endcidrange 100 begincidrange 14761 2607 14764 2608 14771 2610 14772 2611 14773 2612 14774 2613 14778 2615 14780 2616 14783 2617 14788 2618 14789 2620 14790 2621 14791 2629 14794 2630 14797 2631 14804 2632 14806 2633 14814 2635 14816 2636 14819 2639 14823 2642 14824 2646 14827 2647 14828 2649 14830 2650 14831 2653 14832 2654 14837 2656 14838 2660 14843 2662 14845 2663 14848 2664 14855 2666 14856 2669 14862 2671 14864 2672 14865 2673 14866 2674 14873 2675 14877 2676 14883 2677 14886 2678 14889 2679 14908 2681 14910 2682 14913 2683 14914 2684 14919 2686 14920 2687 14921 2689 endcidrange 100 begincidrange 14926 2691 14928 2692 14931 2693 14938 2695 14939 2696 14940 2697 14946 2698 14949 2699 14952 2700 14959 2702 14961 2704 14967 2705 14994 2707 14996 2708 14999 2709 15000 2710 15005 2712 15006 2713 15007 2716 15010 2719 15016 2720 15024 2721 15025 2722 15026 2723 15032 2724 15051 2726 15057 2727 15060 2728 15063 2729 15070 2731 15071 2732 15072 2733 15078 2735 15080 2736 15096 2737 15102 2739 15104 2740 15107 2743 15112 2745 15113 2746 15114 2747 15120 2748 15139 2749 15146 2750 15173 2752 15175 2753 15178 2754 15185 2756 15186 2757 15194 2758 endcidrange 100 begincidrange 15197 2759 15200 2760 15207 2761 15218 2763 15220 2764 15223 2765 15230 2767 15231 2768 15232 2769 15266 2771 15268 2772 15270 2774 15271 2775 15276 2777 15277 2778 15278 2780 15280 2782 15281 2784 15283 2785 15284 2786 15285 2787 15287 2788 15291 2790 15292 2793 15298 2795 15300 2796 15303 2797 15310 2799 15311 2802 15317 2803 15320 2804 15336 2805 15370 2807 15372 2808 15375 2809 15382 2811 15383 2814 15389 2815 15409 2816 15415 2817 15434 2818 15469 2820 15471 2821 15474 2822 15481 2824 15482 2825 15483 2826 15484 2827 15488 2829 15494 2830 endcidrange 100 begincidrange 15505 2831 15512 15523 2832 15531 2833 15538 2834 15541 2835 15544 2836 15551 2838 15582 2839 15588 2841 15590 2842 15593 2843 15600 2845 15603 2846 15609 2847 15628 2849 15662 2850 15689 2851 15716 2852 15731 2853 15733 2854 15734 15756 2855 15768 2857 15770 2858 15773 2859 15780 2861 15783 2863 15787 2866 15789 2867 15790 2868 15791 2869 15798 2871 15799 2875 15804 2877 15806 2878 15809 2879 15816 2881 15817 2884 15823 2885 15826 2886 15827 2887 15828 2888 15835 2889 15839 2890 15873 2892 15875 2893 15878 2894 15885 2896 15886 2899 15892 2901 endcidrange 100 begincidrange 15894 2902 15897 2903 15904 2905 15905 2906 15906 2907 15912 2908 15915 2909 15930 2910 15937 2911 15940 15955 2912 15956 2913 15962 2915 15964 2916 15967 2917 15974 2919 15975 2920 15976 2921 15982 2922 15985 2923 15988 2924 16000 2925 16034 2926 16037 2927 16040 2928 16047 2930 16048 2931 16049 2932 16055 2933 16070 2934 16081 2936 16083 2937 16086 2938 16093 2940 16094 2941 16095 2942 16101 2943 16120 2944 16127 2945 16130 2946 16153 2947 16156 2948 16159 2949 16166 2951 16167 2952 16168 16170 2953 16174 2954 16177 2955 16180 2956 16187 2957 endcidrange 100 begincidrange 16191 2958 16197 2960 16199 2961 16202 2962 16209 2964 16210 2965 16211 2966 16245 2968 16247 2969 16249 2972 16255 2974 16256 2975 16257 2976 16263 2978 16265 2979 16268 2980 16275 2982 16276 2983 16277 2984 16283 2986 16285 2987 16288 2988 16295 2990 16296 2993 16302 2995 16321 2996 16355 2998 16357 2999 16359 3001 16366 3003 16367 3006 16373 3008 16375 3009 16378 3010 16385 3012 16386 3013 16387 3014 16393 3015 16396 3016 16399 3017 16406 3019 16407 3022 16413 3023 16440 3025 16442 3026 16445 3027 16452 3029 16453 3030 16454 3031 16460 3033 endcidrange 100 begincidrange 16462 3034 16465 3035 16472 3036 16476 3037 16482 3038 16502 3039 16508 3040 16515 3041 16534 3042 16561 3044 16563 3045 16566 3046 16573 3048 16574 3049 16575 3050 16581 3051 16584 3052 16587 3053 16599 3054 16605 3055 16625 3056 16631 3058 16633 3059 16636 3060 16643 3062 16644 3063 16645 3064 16651 3065 16654 3066 16657 3067 16664 3068 16675 3070 16677 3071 16680 3072 16687 3074 16690 3075 16724 3077 16726 3078 16729 3079 16736 3081 16737 3082 16738 3083 16744 3085 16746 3086 16749 3088 16755 3090 16756 3093 16762 3095 16764 3096 16767 3097 endcidrange 100 begincidrange 16774 3099 16775 3102 16781 16788 3103 16801 3104 16835 3106 16837 3107 16840 3108 16841 3109 16846 3111 16847 3114 16853 3116 16855 3117 16858 3118 16865 3120 16866 3121 16867 3122 16873 3123 16876 3124 16891 3125 16898 3126 16901 3127 16924 3129 16926 3130 16929 3131 16936 3133 16937 3134 16938 3135 16942 3136 16943 3137 16946 3138 16969 3139 16996 3140 16999 17006 3141 17013 3142 17014 3143 17020 3144 17047 3146 17049 3147 17052 3148 17059 3150 17060 3151 17061 3152 17067 3153 17086 3154 17093 3155 17120 3157 17122 3158 17125 3159 17132 3161 endcidrange 100 begincidrange 17135 3162 17141 3163 17144 3164 17147 3165 17154 3166 17158 3167 17164 3169 17166 3170 17168 3172 17169 3173 17174 3175 17175 3176 17183 3177 17186 3178 17189 3179 17196 3181 17206 3183 17208 3184 17211 3185 17218 3187 17219 3188 17220 3189 17226 3192 17227 3193 17230 3194 17231 3195 17236 3197 17237 3200 17240 3201 17242 3203 17244 3204 17247 3205 17254 3207 17255 3210 17261 3212 17315 3214 17317 3215 17320 3216 17327 3218 17328 3221 17334 3223 17336 3224 17339 3225 17346 3227 17347 3228 17348 3229 17354 3230 17357 3231 17360 3232 17367 3234 endcidrange 100 begincidrange 17369 3236 17375 3237 17382 3238 17390 3239 17391 3240 17399 3242 17401 3243 17404 3244 17411 3246 17412 3247 17413 3248 17419 3249 17439 3250 17473 3251 17476 3252 17499 3253 17502 3254 17505 3255 17513 3256 17514 3257 17522 3259 17524 3260 17526 3262 17527 3263 17532 3265 17533 3266 17534 3267 17540 3268 17560 3269 17594 3270 17597 3271 17600 3272 17607 3273 17609 3274 17617 3275 17620 3276 17623 3277 17630 3278 17632 3279 17633 17635 3280 17639 3281 17642 3282 17645 3283 17652 3285 17653 3286 17689 3288 17691 3289 17694 3290 17701 3292 17702 endcidrange 100 begincidrange 3293 17703 3294 17709 3296 17711 3297 17714 3298 17718 3299 17720 3301 17721 3302 17722 3303 17728 3305 17730 3306 17733 3307 17740 3309 17741 3312 17747 3313 17767 3314 17801 3316 17803 3317 17806 3318 17807 3319 17812 3321 17813 3322 17814 3323 17820 3325 17822 3326 17825 3327 17832 3329 17833 3330 17834 3331 17840 3333 17842 3334 17845 3335 17852 3337 17853 3340 17859 3341 17862 3342 17865 3343 17873 3344 17883 3346 17885 3347 17888 3348 17892 3349 17894 3351 17895 3352 17896 3353 17899 3354 17901 3356 17903 3357 17906 3358 17916 3359 17917 endcidrange 100 begincidrange 3360 17923 3362 17925 3363 17939 3364 17940 3365 17946 3367 17948 3368 17951 3369 17959 3370 17960 3371 17961 3372 17967 3373 17970 3374 17973 3375 17981 3376 17982 3377 17990 3379 17992 3380 17995 3381 17999 3382 18001 3383 18003 3384 18004 3385 18010 3386 18013 3387 18016 3388 18023 3389 18027 3390 18033 3392 18035 3393 18038 3394 18050 3395 18056 3397 18058 3398 18061 3399 18068 3401 18069 3402 18070 3403 18076 3405 18078 3406 18081 3407 18088 3408 18090 3409 18091 3410 18097 3412 18099 3413 18100 3417 18106 3419 18107 3420 18108 3421 18111 endcidrange 100 begincidrange 3422 18113 3423 18116 3424 18119 3425 18126 3427 18129 3428 18135 3430 18137 3431 18140 3432 18147 3434 18148 3435 18149 4116 3678 7053 3460 7900 3802 3902 3946 3946 3708 4131 4374 4156 4375 5800 4382 4386 4394 4399 4403 4406 4409 4419 4424 4511 4513 4517 4524 4528 4535 4541 4545 4550 4564 4566 4571 4576 4604 4609 4318 4136 5800 4139 4192 4167 4172 5552 6424 5151 4922 7518 5079 5109 7607 5584 5367 7083 5362 5485 6001 5460 5317 7009 7370 5678 5874 4425 4429 4435 4439 4442 4159 4444 4447 4449 4453 4455 4463 endcidrange 94 begincidrange 4160 4465 4161 4468 4162 4471 4474 4473 4475 4478 6447 4481 5460 4483 4163 4166 4485 4487 4491 4167 4493 7783 4497 4499 4501 4506 4508 5797 4551 4180 4555 5800 4556 4560 4563 7988 6123 4577 4183 4579 4581 4584 4586 4588 4184 4590 4595 4599 5552 4603 4614 4616 4618 5950 4620 4187 4625 4627 4629 4632 4636 4188 4638 4640 4644 4650 4653 5351 6494 5731 5771 4191 6484 6684 4279 7139 4247 4266 4340 7572 5088 7709 3558 3644 3815 264 112 324 113 143 194 357 145 323 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/UniKS-UCS2-V b/Resources/cmap/UniKS-UCS2-V deleted file mode 100644 index 6854e282d04..00000000000 --- a/Resources/cmap/UniKS-UCS2-V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (UniKS-UCS2-H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (UniKS-UCS2-H) %%BeginResource: CMap (UniKS-UCS2-V) %%Title: (UniKS-UCS2-V Adobe Korea1 1) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1999 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /UniKS-UCS2-H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Korea1) def /Supplement 1 def end def /CMapName /UniKS-UCS2-V def /CMapVersion 10.001 def /CMapType 1 def /XUID [1 10 25407] def /WMode 1 def 18 begincidrange <2013> <2014> 8059 <2016> <2016> 8061 <2025> <2025> 8058 <3001> <3002> 8056 <3008> <3011> 8065 <3013> <3013> 8075 <3014> <3015> 8063 8076 8077 8079 8080 8081 8087 8088 8089 8090 8062 8093 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/V b/Resources/cmap/V deleted file mode 100644 index db34b4426ac..00000000000 --- a/Resources/cmap/V +++ /dev/null @@ -1 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%DocumentNeededResources: CMap (H) %%IncludeResource: ProcSet (CIDInit) %%IncludeResource: CMap (H) %%BeginResource: CMap (V) %%Title: (V Adobe Japan1 0) %%Version: 10.001 %%Copyright: ----------------------------------------------------------- %%Copyright: Copyright 1990-1998 Adobe Systems Incorporated. %%Copyright: All Rights Reserved. %%Copyright: %%Copyright: Patents Pending %%Copyright: %%Copyright: NOTICE: All information contained herein is the property %%Copyright: of Adobe Systems Incorporated. %%Copyright: %%Copyright: Permission is granted for redistribution of this file %%Copyright: provided this copyright notice is maintained intact and %%Copyright: that the contents of this file are not altered in any %%Copyright: way from its original form. %%Copyright: %%Copyright: PostScript and Display PostScript are trademarks of %%Copyright: Adobe Systems Incorporated which may be registered in %%Copyright: certain jurisdictions. %%Copyright: ----------------------------------------------------------- %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /H usecmap /CIDSystemInfo 3 dict dup begin /Registry (Adobe) def /Ordering (Japan1) def /Supplement 0 def end def /CMapName /V def /CMapVersion 10.001 def /CMapType 1 def /UIDOffset 850 def /XUID [1 10 25340] def /WMode 1 def 27 begincidrange <2122> <2123> 7887 <2131> <2132> 7889 <213c> <213e> 7891 <2141> <2145> 7894 <214a> <215b> 7899 <2161> <2161> 7917 <2421> <2421> 7918 <2423> <2423> 7919 <2425> <2425> 7920 <2427> <2427> 7921 <2429> <2429> 7922 <2443> <2443> 7923 <2463> <2463> 7924 <2465> <2465> 7925 <2467> <2467> 7926 <246e> <246e> 7927 <2521> <2521> 7928 <2523> <2523> 7929 <2525> <2525> 7930 <2527> <2527> 7931 <2529> <2529> 7932 <2543> <2543> 7933 <2563> <2563> 7934 <2565> <2565> 7935 <2567> <2567> 7936 <256e> <256e> 7937 <2575> <2576> 7938 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF \ No newline at end of file diff --git a/Resources/cmap/WP-Symbol b/Resources/cmap/WP-Symbol deleted file mode 100644 index 881108c0d47..00000000000 --- a/Resources/cmap/WP-Symbol +++ /dev/null @@ -1,87 +0,0 @@ -%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (WP-Symbol) -%%Title: (WP-Symbol Adobe Japan1 0) -%%Version: 6.001 -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-1997 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. -%%Copyright: -%%Copyright: Patents Pending -%%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. -%%Copyright: -%%Copyright: Permission is granted for redistribution of this file -%%Copyright: provided this copyright notice is maintained intact and -%%Copyright: that the contents of this file are not altered in any -%%Copyright: way from its original form. -%%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. -%%Copyright: ----------------------------------------------------------- -%%EndComments - -/CIDInit /ProcSet findresource begin - -12 dict begin - -begincmap - -/CIDSystemInfo 3 dict dup begin - /Registry (Adobe) def - /Ordering (Japan1) def - /Supplement 0 def -end def - -/CMapName /WP-Symbol def -/CMapVersion 6.001 def -/CMapType 1 def - -/UIDOffset 868 def -/XUID [1 10 25352] def - -/WMode 0 def - -1 begincodespacerange - <00> -endcodespacerange - -27 begincidrange -<01> <01> 8056 -<02> <02> 8058 -<03> <03> 8191 -<04> <04> 8196 -<05> <18> 8061 -<19> <22> 8092 -<23> <23> 8186 -<24> <25> 8020 -<26> <26> 8187 -<27> <28> 8022 -<29> <29> 8188 -<2a> <2a> 8037 -<2b> <2d> 8024 -<2e> <2f> 8189 -<30> <31> 8192 -<32> <33> 7899 -<34> <34> 7894 -<35> <35> 8194 -<36> <36> 8035 -<37> <39> 8027 -<3a> <3a> 8195 -<3b> <54> 8112 -<55> <5d> 8197 -<5e> <5e> 8151 -<61> <71> 8206 -<72> <72> 8057 -<73> <77> 8223 -endcidrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end - -%%EndResource -%%EOF diff --git a/Resources/colorspace-profiles/CMY.pf b/Resources/colorspace-profiles/CMY.pf deleted file mode 100644 index acc71ddd9d0..00000000000 Binary files a/Resources/colorspace-profiles/CMY.pf and /dev/null differ diff --git a/Resources/colorspace-profiles/CMYK.pf b/Resources/colorspace-profiles/CMYK.pf deleted file mode 100644 index 24af49e7a16..00000000000 Binary files a/Resources/colorspace-profiles/CMYK.pf and /dev/null differ diff --git a/Resources/colorspace-profiles/README.txt b/Resources/colorspace-profiles/README.txt deleted file mode 100644 index 1c172913ecf..00000000000 --- a/Resources/colorspace-profiles/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -Java[tm] Advanced Imaging 1.1.2 -These color profiles were downloaded from -http://java.sun.com/products/java-media/jai/downloads/download-1_1_2.html - -Please read the license in the licenses directory. - -The only profile that is actually used is the CMYK.pf, the others are unused but the license states -that redistribute must include the complete software package so the other profiles are included -as well. \ No newline at end of file diff --git a/Resources/colorspace-profiles/YCC601.pf b/Resources/colorspace-profiles/YCC601.pf deleted file mode 100644 index 7ee086dbbc5..00000000000 Binary files a/Resources/colorspace-profiles/YCC601.pf and /dev/null differ diff --git a/Resources/colorspace-profiles/YCC601L.pf b/Resources/colorspace-profiles/YCC601L.pf deleted file mode 100644 index 1f7e66ba634..00000000000 Binary files a/Resources/colorspace-profiles/YCC601L.pf and /dev/null differ diff --git a/Resources/colorspace-profiles/YCC709.pf b/Resources/colorspace-profiles/YCC709.pf deleted file mode 100644 index d9f5a5a5df8..00000000000 Binary files a/Resources/colorspace-profiles/YCC709.pf and /dev/null differ diff --git a/Resources/colorspace-profiles/YCC709L.pf b/Resources/colorspace-profiles/YCC709L.pf deleted file mode 100644 index 7d9a90be005..00000000000 Binary files a/Resources/colorspace-profiles/YCC709L.pf and /dev/null differ diff --git a/Resources/colorspace-profiles/YLINEAR.pf b/Resources/colorspace-profiles/YLINEAR.pf deleted file mode 100644 index b42e0cdc4f4..00000000000 Binary files a/Resources/colorspace-profiles/YLINEAR.pf and /dev/null differ diff --git a/Resources/ttf/Arial-BoldItalicMT.ttf b/Resources/ttf/Arial-BoldItalicMT.ttf deleted file mode 100644 index b55eee397ee..00000000000 Binary files a/Resources/ttf/Arial-BoldItalicMT.ttf and /dev/null differ diff --git a/Resources/ttf/Arial-BoldMT.ttf b/Resources/ttf/Arial-BoldMT.ttf deleted file mode 100644 index 51d6111d722..00000000000 Binary files a/Resources/ttf/Arial-BoldMT.ttf and /dev/null differ diff --git a/Resources/ttf/ArialMT.ttf b/Resources/ttf/ArialMT.ttf deleted file mode 100644 index 58cd6b5e61e..00000000000 Binary files a/Resources/ttf/ArialMT.ttf and /dev/null differ diff --git a/app/pom.xml b/app/pom.xml new file mode 100644 index 00000000000..11933709116 --- /dev/null +++ b/app/pom.xml @@ -0,0 +1,79 @@ + + + + + + 4.0.0 + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + ../parent/pom.xml + + + pdfbox-app + bundle + Apache PDFBox application + http://pdfbox.apache.org/ + + + + ${project.groupId} + pdfbox-tools + ${project.version} + provided + + + org.bouncycastle + bcmail-jdk15on + provided + + + org.bouncycastle + bcprov-jdk15on + provided + + + org.apache.pdfbox + jbig2-imageio + provided + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + org.apache.pdfbox.* + true + *;scope=provided;inline=org/apache/**|org/bouncycastle/**|META-INF/services/** + ${project.url} + !junit.framework,!junit.textui,javax.*;resolution:=optional,org.apache.avalon.framework.logger;resolution:=optional,org.apache.log;resolution:=optional,* + org.apache.pdfbox.tools.PDFBox + + + + + + + diff --git a/app/src/main/appended-resources/META-INF/LICENSE b/app/src/main/appended-resources/META-INF/LICENSE new file mode 100644 index 00000000000..f581b421846 --- /dev/null +++ b/app/src/main/appended-resources/META-INF/LICENSE @@ -0,0 +1,166 @@ + +EXTERNAL COMPONENTS + +Apache PDFBox includes a number of components with separate copyright notices +and license terms. Your use of these components is subject to the terms and +conditions of the following licenses. + +Contributions made to the original PDFBox and FontBox projects: + + Copyright (c) 2002-2007, www.pdfbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of pdfbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Bouncy Castle encryption libraries + + Copyright (c) 2000-2015 The Legion Of The Bouncy Castle + (http://www.bouncycastle.org) + + 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. + +Adobe Font Metrics (AFM) for PDF Core 14 Fonts + + 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. + +CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads) + + Copyright 1990-2009 Adobe Systems Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + +Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html) + + Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file to use, copy, publish, distribute, + sublicense, and/or sell copies of the documentation, and to permit + others to do the same, provided that: + - No modification, editing or other alteration of this document is + allowed; and + - The above copyright notice and this permission notice shall be + included in all copies of the documentation. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file, to create their own derivative works + from the content of this document to use, copy, publish, distribute, + sublicense, and/or sell the derivative works, and to permit others to do + the same, provided that the derived work is not represented as being a + copy or version of this document. + + Adobe shall not be liable to any party for any loss of revenue or profit + or for indirect, incidental, special, consequential, or other similar + damages, whether based on tort (including without limitation negligence + or strict liability), contract or other legal or equitable grounds even + if Adobe has been advised or had reason to know of the possibility of + such damages. The Adobe materials are provided on an "AS IS" basis. + Adobe specifically disclaims all express, statutory, or implied + warranties relating to the Adobe materials, including but not limited to + those concerning merchantability or fitness for a particular purpose or + non-infringement of any third party rights regarding the Adobe + materials. + +Twelvemonkeys (https://github.com/haraldk/TwelveMonkeys/) + + Copyright (c) 2008-2016, Harald Kuhr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + o Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + o Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + o Neither the name "TwelveMonkeys" nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/app/src/main/appended-resources/META-INF/NOTICE b/app/src/main/appended-resources/META-INF/NOTICE new file mode 100644 index 00000000000..a0f9eac0893 --- /dev/null +++ b/app/src/main/appended-resources/META-INF/NOTICE @@ -0,0 +1,14 @@ +Based on source code originally developed in the PDFBox and FontBox projects. +Copyright (c) 2002-2007, www.pdfbox.org + +Includes the Adobe Glyph List +Copyright 1997, 1998, 2002, 2007, 2010 Adobe Systems Incorporated. + +Includes the Zapf Dingbats Glyph List +Copyright 2002, 2010 Adobe Systems Incorporated. + +Includes the Bidi Mirroring Glyph Property (BidiMirroring-8.0.0.txt) +Copyright 1991-2015 Unicode, Inc. + +Includes parts of TwelveMonkeys ImageIO +Copyright 2008-2016 Harald Kuhr diff --git a/assembly.xml b/assembly.xml new file mode 100644 index 00000000000..d7b6c5e9c21 --- /dev/null +++ b/assembly.xml @@ -0,0 +1,36 @@ + + + src + + zip + + + + ${project.basedir} + + + **/target/** + **/.*/** + pdfbox/bin/** + pdfbox/download/** + pdfbox/external/** + pdfbox/tools/** + + + + diff --git a/build.properties.example b/build.properties.example deleted file mode 100644 index 544922f30ec..00000000000 --- a/build.properties.example +++ /dev/null @@ -1 +0,0 @@ -#ikvm.dir=C:\\javalib\\ikvm-0.24.0.1 diff --git a/build.xml b/build.xml deleted file mode 100644 index d7e13f6c53d..00000000000 --- a/build.xml +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Building JAI Codec - - - - - - - - - Building JAI Core - - - - - - - - - - Building BC Prov - - - - - - - - - Building BC Mail - - - - - - - - - - Building FontBox - - - - - - - - - Building JempBox - - - - - - - - - - - - - - - - - - - - - - - - - - Building PDFBox - - - - - - - - - - - - - - - - - Building Decrypt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/debugger-app/pom.xml b/debugger-app/pom.xml new file mode 100644 index 00000000000..1293128bb29 --- /dev/null +++ b/debugger-app/pom.xml @@ -0,0 +1,79 @@ + + + + + + 4.0.0 + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + ../parent/pom.xml + + + debugger-app + bundle + Apache PDFBox Debugger application + http://pdfbox.apache.org/ + + + + ${project.groupId} + pdfbox-debugger + ${project.version} + provided + + + org.bouncycastle + bcmail-jdk15on + provided + + + org.bouncycastle + bcprov-jdk15on + provided + + + org.apache.pdfbox + jbig2-imageio + provided + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + org.apache.pdfbox.* + true + *;scope=provided;inline=org/apache/**|org/bouncycastle/**|META-INF/services/** + ${project.url} + !junit.framework,!junit.textui,javax.*;resolution:=optional,org.apache.avalon.framework.logger;resolution:=optional,org.apache.log;resolution:=optional,* + org.apache.pdfbox.debugger.PDFDebugger + + + + + + + diff --git a/debugger-app/src/main/appended-resources/META-INF/LICENSE b/debugger-app/src/main/appended-resources/META-INF/LICENSE new file mode 100644 index 00000000000..f581b421846 --- /dev/null +++ b/debugger-app/src/main/appended-resources/META-INF/LICENSE @@ -0,0 +1,166 @@ + +EXTERNAL COMPONENTS + +Apache PDFBox includes a number of components with separate copyright notices +and license terms. Your use of these components is subject to the terms and +conditions of the following licenses. + +Contributions made to the original PDFBox and FontBox projects: + + Copyright (c) 2002-2007, www.pdfbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of pdfbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Bouncy Castle encryption libraries + + Copyright (c) 2000-2015 The Legion Of The Bouncy Castle + (http://www.bouncycastle.org) + + 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. + +Adobe Font Metrics (AFM) for PDF Core 14 Fonts + + 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. + +CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads) + + Copyright 1990-2009 Adobe Systems Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + +Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html) + + Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file to use, copy, publish, distribute, + sublicense, and/or sell copies of the documentation, and to permit + others to do the same, provided that: + - No modification, editing or other alteration of this document is + allowed; and + - The above copyright notice and this permission notice shall be + included in all copies of the documentation. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file, to create their own derivative works + from the content of this document to use, copy, publish, distribute, + sublicense, and/or sell the derivative works, and to permit others to do + the same, provided that the derived work is not represented as being a + copy or version of this document. + + Adobe shall not be liable to any party for any loss of revenue or profit + or for indirect, incidental, special, consequential, or other similar + damages, whether based on tort (including without limitation negligence + or strict liability), contract or other legal or equitable grounds even + if Adobe has been advised or had reason to know of the possibility of + such damages. The Adobe materials are provided on an "AS IS" basis. + Adobe specifically disclaims all express, statutory, or implied + warranties relating to the Adobe materials, including but not limited to + those concerning merchantability or fitness for a particular purpose or + non-infringement of any third party rights regarding the Adobe + materials. + +Twelvemonkeys (https://github.com/haraldk/TwelveMonkeys/) + + Copyright (c) 2008-2016, Harald Kuhr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + o Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + o Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + o Neither the name "TwelveMonkeys" nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/debugger-app/src/main/appended-resources/META-INF/NOTICE b/debugger-app/src/main/appended-resources/META-INF/NOTICE new file mode 100644 index 00000000000..a0f9eac0893 --- /dev/null +++ b/debugger-app/src/main/appended-resources/META-INF/NOTICE @@ -0,0 +1,14 @@ +Based on source code originally developed in the PDFBox and FontBox projects. +Copyright (c) 2002-2007, www.pdfbox.org + +Includes the Adobe Glyph List +Copyright 1997, 1998, 2002, 2007, 2010 Adobe Systems Incorporated. + +Includes the Zapf Dingbats Glyph List +Copyright 2002, 2010 Adobe Systems Incorporated. + +Includes the Bidi Mirroring Glyph Property (BidiMirroring-8.0.0.txt) +Copyright 1991-2015 Unicode, Inc. + +Includes parts of TwelveMonkeys ImageIO +Copyright 2008-2016 Harald Kuhr diff --git a/debugger/pom.xml b/debugger/pom.xml new file mode 100644 index 00000000000..8d5365a4f66 --- /dev/null +++ b/debugger/pom.xml @@ -0,0 +1,81 @@ + + + + + + 4.0.0 + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + ../parent/pom.xml + + + pdfbox-debugger + + jar + Apache PDFBox Debugger + + The Apache PDFBox library is an open source Java tool for working with PDF documents. + This artefact contains the PDFDebugger. + + 2002 + + + + org.bouncycastle + bcmail-jdk15on + true + + + ${project.groupId} + pdfbox + ${project.version} + + + org.apache.pdfbox + jbig2-imageio + test + + + + com.github.jai-imageio + jai-imageio-core + test + + + com.github.jai-imageio + jai-imageio-jpeg2000 + test + + + + + + + src/main/resources + true + + + + + + diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java new file mode 100644 index 00000000000..d0dff0b9c58 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java @@ -0,0 +1,1495 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FileDialog; +import java.awt.Toolkit; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowEvent; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Properties; +import java.util.Set; +import javax.imageio.spi.IIORegistry; + +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Sides; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JScrollPane; +import javax.swing.KeyStroke; +import javax.swing.TransferHandler; +import javax.swing.UIManager; +import javax.swing.border.BevelBorder; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.filechooser.FileFilter; +import javax.swing.tree.TreePath; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.debugger.colorpane.CSArrayBased; +import org.apache.pdfbox.debugger.colorpane.CSDeviceN; +import org.apache.pdfbox.debugger.colorpane.CSIndexed; +import org.apache.pdfbox.debugger.colorpane.CSSeparation; +import org.apache.pdfbox.debugger.flagbitspane.FlagBitsPane; +import org.apache.pdfbox.debugger.fontencodingpane.FontEncodingPaneController; +import org.apache.pdfbox.debugger.pagepane.PagePane; +import org.apache.pdfbox.debugger.streampane.StreamPane; +import org.apache.pdfbox.debugger.stringpane.StringPane; +import org.apache.pdfbox.debugger.treestatus.TreeStatus; +import org.apache.pdfbox.debugger.treestatus.TreeStatusPane; +import org.apache.pdfbox.debugger.ui.ArrayEntry; +import org.apache.pdfbox.debugger.ui.DocumentEntry; +import org.apache.pdfbox.debugger.ui.ErrorDialog; +import org.apache.pdfbox.debugger.ui.ExtensionFileFilter; +import org.apache.pdfbox.debugger.ui.FileOpenSaveDialog; +import org.apache.pdfbox.debugger.ui.LogDialog; +import org.apache.pdfbox.debugger.ui.MapEntry; +import org.apache.pdfbox.debugger.ui.OSXAdapter; +import org.apache.pdfbox.debugger.ui.PDFTreeCellRenderer; +import org.apache.pdfbox.debugger.ui.PDFTreeModel; +import org.apache.pdfbox.debugger.ui.PageEntry; +import org.apache.pdfbox.debugger.ui.ReaderBottomPanel; +import org.apache.pdfbox.debugger.ui.RecentFiles; +import org.apache.pdfbox.debugger.ui.RotationMenu; +import org.apache.pdfbox.debugger.ui.Tree; +import org.apache.pdfbox.debugger.ui.ViewMenu; +import org.apache.pdfbox.debugger.ui.ZoomMenu; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDPageLabels; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.viewerpreferences.PDViewerPreferences; +import org.apache.pdfbox.printing.PDFPageable; + +/** + * PDF Debugger. + * + * @author wurtz + * @author Ben Litchfield + * @author Khyrul Bashar + */ +public class PDFDebugger extends JFrame +{ + private static final Set SPECIALCOLORSPACES = + new HashSet<>(Arrays.asList(COSName.INDEXED, COSName.SEPARATION, COSName.DEVICEN)); + + private static final Set OTHERCOLORSPACES = + new HashSet<>(Arrays.asList(COSName.ICCBASED, COSName.PATTERN, COSName.CALGRAY, + COSName.CALRGB, COSName.LAB)); + + private static final String PASSWORD = "-password"; + private static final String VIEW_STRUCTURE = "-viewstructure"; + + private static final int SHORCUT_KEY_MASK = + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + private static final String OS_NAME = System.getProperty("os.name").toLowerCase(); + private static final boolean IS_MAC_OS = OS_NAME.startsWith("mac os x"); + + private final JPanel documentPanel = new JPanel(); + private TreeStatusPane statusPane; + private RecentFiles recentFiles; + private boolean isPageMode; + private PDDocument document; + private String currentFilePath; + private JScrollPane jScrollPane1; + private JScrollPane jScrollPane2; + private javax.swing.JSplitPane jSplitPane1; + private javax.swing.JTextPane jTextPane1; + private ReaderBottomPanel statusBar; + private Tree tree; + // file menu + private JMenuItem saveAsMenuItem; + private JMenuItem saveMenuItem; + private JMenu recentFilesMenu; + private JMenuItem printMenuItem; + private JMenuItem reopenMenuItem; + + // edit > find menu + private JMenu findMenu; + private JMenuItem findMenuItem; + private JMenuItem findNextMenuItem; + private JMenuItem findPreviousMenuItem; + + // configuration + public static Properties configuration = new Properties(); + + /** + * Constructor. + */ + public PDFDebugger() + { + this(false); + } + + /** + * Constructor. + * + * @param isPageMode true if pages are to be displayed, false if internal structure is to be + * displayed. + */ + public PDFDebugger(boolean isPageMode) + { + this.isPageMode = isPageMode; + loadConfiguration(); + initComponents(); + } + + /** + * Entry point. + * + * @param args the command line arguments + * @throws Exception If anything goes wrong. + */ + public static void main(String[] args) throws Exception + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + if (System.getProperty("apple.laf.useScreenMenuBar") == null) + { + System.setProperty("apple.laf.useScreenMenuBar", "true"); + } + + // handle uncaught exceptions + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() + { + @Override + public void uncaughtException(Thread thread, Throwable throwable) + { + new ErrorDialog(throwable).setVisible(true); + } + }); + + // open file, if any + String filename = null; + String password = ""; + boolean viewPages = true; + + for( int i = 0; i < args.length; i++ ) + { + switch (args[i]) + { + case PASSWORD: + i++; + if (i >= args.length) + { + usage(); + } + password = args[i]; + break; + case VIEW_STRUCTURE: + viewPages = false; + break; + default: + filename = args[i]; + break; + } + } + final PDFDebugger viewer = new PDFDebugger(viewPages); + + // use our custom logger + // this works only if there is no "LogFactory.getLog()" in this class, + // and if there are no methods that call logging, even invisible + // use reduced file from PDFBOX-3653 to see logging + LogDialog.init(viewer, viewer.statusBar.getLogLabel()); + System.setProperty("org.apache.commons.logging.Log", "org.apache.pdfbox.debugger.ui.DebugLog"); + + // trigger premature initializations for more accurate rendering benchmarks + // See discussion in PDFBOX-3988 + if (PDType1Font.COURIER.isStandard14()) + { + // Yes this is always true + PDDeviceCMYK.INSTANCE.toRGB(new float[] { 0, 0, 0, 0} ); + PDDeviceRGB.INSTANCE.toRGB(new float[] { 0, 0, 0 } ); + IIORegistry.getDefaultInstance(); + FilterFactory.INSTANCE.getFilter(COSName.FLATE_DECODE); + } + + if (filename != null) + { + File file = new File(filename); + if (file.exists()) + { + viewer.readPDFFile(filename, password); + } + } + viewer.setVisible(true); + } + + public boolean isPageMode() + { + return this.isPageMode; + } + + public void setPageMode(boolean isPageMode) + { + this.isPageMode = isPageMode; + } + + public boolean hasDocument() + { + return document != null; + } + + /** + * This will print out a message telling how to use this utility. + */ + private static void usage() + { + String message = "Usage: java -jar pdfbox-app-x.y.z.jar PDFDebugger [options] \n" + + "\nOptions:\n" + + " -password : Password to decrypt the document\n" + + " -viewstructure : activate structure mode on startup\n" + + " : The PDF document to be loaded\n"; + + System.err.println(message); + System.exit(1); + } + + /** + * Loads the local configuration file, if any. + */ + private void loadConfiguration() + { + File file = new File("config.properties"); + if (file.exists()) + { + try + { + try (InputStream is = new FileInputStream(file)) + { + configuration.load(is); + } + } + catch(IOException e) + { + throw new RuntimeException(e); + } + } + } + + /** + * This method is called from within the constructor to initialize the form. + */ + private void initComponents() + { + jSplitPane1 = new javax.swing.JSplitPane(); + jScrollPane1 = new JScrollPane(); + tree = new Tree(this); + jScrollPane2 = new JScrollPane(); + jTextPane1 = new javax.swing.JTextPane(); + + tree.setCellRenderer(new PDFTreeCellRenderer()); + tree.setModel(null); + + setTitle("Apache PDFBox Debugger"); + + addWindowListener(new java.awt.event.WindowAdapter() + { + @Override + public void windowOpened(WindowEvent windowEvent) + { + tree.requestFocusInWindow(); + super.windowOpened(windowEvent); + } + + @Override + public void windowClosing(WindowEvent evt) + { + exitForm(evt); + } + }); + + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + jScrollPane1.setBorder(new BevelBorder(BevelBorder.RAISED)); + jScrollPane1.setPreferredSize(new Dimension(screenSize.width / 8, 500)); + jSplitPane1.setDividerLocation(screenSize.width / 8); + tree.addTreeSelectionListener(new TreeSelectionListener() + { + @Override + public void valueChanged(TreeSelectionEvent evt) + { + jTree1ValueChanged(evt); + } + }); + + jScrollPane1.setViewportView(tree); + + jSplitPane1.setRightComponent(jScrollPane2); + jSplitPane1.setDividerSize(3); + + jScrollPane2.setPreferredSize(new Dimension(screenSize.width / 8 * 7, 500)); + jScrollPane2.setViewportView(jTextPane1); + + jSplitPane1.setLeftComponent(jScrollPane1); + + JScrollPane documentScroller = new JScrollPane(); + documentScroller.setViewportView(documentPanel); + + statusPane = new TreeStatusPane(tree); + statusPane.getPanel().setBorder(new BevelBorder(BevelBorder.RAISED)); + statusPane.getPanel().setPreferredSize(new Dimension(300, 25)); + getContentPane().add(statusPane.getPanel(), BorderLayout.PAGE_START); + + getContentPane().add(jSplitPane1, BorderLayout.CENTER); + + statusBar = new ReaderBottomPanel(); + getContentPane().add(statusBar, BorderLayout.SOUTH); + + // create menus + JMenuBar menuBar = new JMenuBar(); + menuBar.add(createFileMenu()); + menuBar.add(createEditMenu()); + + ViewMenu viewMenu = ViewMenu.getInstance(this); + menuBar.add(viewMenu.getMenu()); + setJMenuBar(menuBar); + + setBounds(screenSize.width / 4, screenSize.height / 4, screenSize.width / 2, screenSize.height / 2); + + // drag and drop to open files + setTransferHandler(new TransferHandler() + { + @Override + public boolean canImport(TransferSupport transferSupport) + { + return transferSupport.isDataFlavorSupported(DataFlavor.javaFileListFlavor); + } + + @Override + @SuppressWarnings("unchecked") + public boolean importData(TransferSupport transferSupport) + { + try + { + Transferable transferable = transferSupport.getTransferable(); + List files = (List) transferable.getTransferData( + DataFlavor.javaFileListFlavor); + readPDFFile(files.get(0), ""); + return true; + } + catch (IOException e) + { + new ErrorDialog(e).setVisible(true); + return true; + } + catch (UnsupportedFlavorException e) + { + throw new RuntimeException(e); + } + } + }); + + initGlobalEventHandlers(); + + } + + /** + * Initialize application global event handlers. + * Protected to allow subclasses to override this method if they + * don't want the global event handler overridden. + */ + @SuppressWarnings("WeakerAccess") + protected void initGlobalEventHandlers() + { + // Mac OS X file open/quit handler + if (IS_MAC_OS) + { + try + { + Method osxOpenFiles = getClass().getDeclaredMethod("osxOpenFiles", String.class); + osxOpenFiles.setAccessible(true); + OSXAdapter.setFileHandler(this, osxOpenFiles); + + Method osxQuit = getClass().getDeclaredMethod("osxQuit"); + osxQuit.setAccessible(true); + OSXAdapter.setQuitHandler(this, osxQuit); + } + catch (NoSuchMethodException e) + { + throw new RuntimeException(e); + } + } + } + + private JMenu createFileMenu() + { + JMenuItem openMenuItem = new JMenuItem("Open..."); + openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORCUT_KEY_MASK)); + openMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent evt) + { + openMenuItemActionPerformed(evt); + } + }); + + JMenu fileMenu = new JMenu("File"); + fileMenu.add(openMenuItem); + fileMenu.setMnemonic('F'); + + JMenuItem openUrlMenuItem = new JMenuItem("Open URL..."); + openUrlMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, SHORCUT_KEY_MASK)); + openUrlMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent evt) + { + String urlString = JOptionPane.showInputDialog("Enter an URL"); + if (urlString == null || urlString.isEmpty()) + { + return; + } + try + { + readPDFurl(urlString, ""); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + }); + fileMenu.add(openUrlMenuItem); + + reopenMenuItem = new JMenuItem("Reopen"); + reopenMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, SHORCUT_KEY_MASK)); + reopenMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent evt) + { + try + { + if (currentFilePath.startsWith("http")) + { + readPDFurl(currentFilePath, ""); + } + else + { + readPDFFile(currentFilePath, ""); + } + } + catch (IOException e) + { + new ErrorDialog(e).setVisible(true); + } + } + }); + reopenMenuItem.setEnabled(false); + fileMenu.add(reopenMenuItem); + + try + { + recentFiles = new RecentFiles(this.getClass(), 5); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + + recentFilesMenu = new JMenu("Open Recent"); + recentFilesMenu.setEnabled(false); + addRecentFileItems(); + fileMenu.add(recentFilesMenu); + + printMenuItem = new JMenuItem("Print"); + printMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, SHORCUT_KEY_MASK)); + printMenuItem.setEnabled(false); + printMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent evt) + { + printMenuItemActionPerformed(evt); + } + }); + + fileMenu.addSeparator(); + fileMenu.add(printMenuItem); + + JMenuItem exitMenuItem = new JMenuItem("Exit"); + exitMenuItem.setAccelerator(KeyStroke.getKeyStroke("alt F4")); + exitMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent evt) + { + exitMenuItemActionPerformed(evt); + } + }); + + if (!IS_MAC_OS) + { + fileMenu.addSeparator(); + fileMenu.add(exitMenuItem); + } + + return fileMenu; + } + + private JMenu createEditMenu() + { + JMenu editMenu = new JMenu("Edit"); + editMenu.setMnemonic('E'); + + JMenuItem cutMenuItem = new JMenuItem("Cut"); + cutMenuItem.setEnabled(false); + editMenu.add(cutMenuItem); + + JMenuItem copyMenuItem = new JMenuItem("Copy"); + copyMenuItem.setEnabled(false); + editMenu.add(copyMenuItem); + + JMenuItem pasteMenuItem = new JMenuItem("Paste"); + pasteMenuItem.setEnabled(false); + editMenu.add(pasteMenuItem); + + JMenuItem deleteMenuItem = new JMenuItem("Delete"); + deleteMenuItem.setEnabled(false); + editMenu.add(deleteMenuItem); + editMenu.addSeparator(); + editMenu.add(createFindMenu()); + + return editMenu; + } + + private JMenu createFindMenu() + { + findMenu = new JMenu("Find"); + findMenu.setEnabled(false); + + findMenuItem = new JMenuItem("Find..."); + findMenuItem.setActionCommand("find"); + findMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, SHORCUT_KEY_MASK)); + + findNextMenuItem = new JMenuItem("Find Next"); + if (IS_MAC_OS) + { + findNextMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, SHORCUT_KEY_MASK)); + } + else + { + findNextMenuItem.setAccelerator(KeyStroke.getKeyStroke("F3")); + } + + findPreviousMenuItem = new JMenuItem("Find Previous"); + if (IS_MAC_OS) + { + findPreviousMenuItem.setAccelerator(KeyStroke.getKeyStroke( + KeyEvent.VK_G, SHORCUT_KEY_MASK | InputEvent.SHIFT_DOWN_MASK)); + } + else + { + findPreviousMenuItem.setAccelerator(KeyStroke.getKeyStroke( + KeyEvent.VK_F3, InputEvent.SHIFT_DOWN_MASK)); + } + + findMenu.add(findMenuItem); + findMenu.add(findNextMenuItem); + findMenu.add(findPreviousMenuItem); + + return findMenu; + } + + /** + * Returns the File menu. + */ + public JMenu getFindMenu() + { + return findMenu; + } + + /** + * Returns the Edit > Find > Find menu item. + */ + public JMenuItem getFindMenuItem() + { + return findMenuItem; + } + + /** + * Returns the Edit > Find > Find Next menu item. + */ + public JMenuItem getFindNextMenuItem() + { + return findNextMenuItem; + } + + /** + * Returns the Edit > Find > Find Previous menu item. + */ + public JMenuItem getFindPreviousMenuItem() + { + return findPreviousMenuItem; + } + + /** + * This method is called via reflection on Mac OS X. + */ + private void osxOpenFiles(String filename) + { + try + { + readPDFFile(filename, ""); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * This method is called via reflection on Mac OS X. + */ + private void osxQuit() + { + exitMenuItemActionPerformed(null); + } + + private void openMenuItemActionPerformed(ActionEvent evt) + { + try + { + if (IS_MAC_OS) + { + FileDialog openDialog = new FileDialog(this, "Open"); + openDialog.setFilenameFilter(new FilenameFilter() + { + @Override + public boolean accept(File dir, String name) + { + return name.toLowerCase().endsWith(".pdf"); + } + }); + openDialog.setVisible(true); + if (openDialog.getFile() != null) + { + readPDFFile(new File(openDialog.getDirectory(),openDialog.getFile()), ""); + } + } + else + { + String[] extensions = new String[] {"pdf", "PDF"}; + FileFilter pdfFilter = new ExtensionFileFilter(extensions, "PDF Files (*.pdf)"); + FileOpenSaveDialog openDialog = new FileOpenSaveDialog(this, pdfFilter); + + File file = openDialog.openFile(); + if (file != null) + { + readPDFFile(file, ""); + } + } + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + private void jTree1ValueChanged(TreeSelectionEvent evt) + { + TreePath path = tree.getSelectionPath(); + if (path != null) + { + try + { + Object selectedNode = path.getLastPathComponent(); + + statusBar.getStatusLabel().setText(""); + + if (isPage(selectedNode)) + { + showPage(selectedNode); + return; + } + + if (isSpecialColorSpace(selectedNode) || isOtherColorSpace(selectedNode)) + { + showColorPane(selectedNode); + return; + } + if (path.getParentPath() != null + && isFlagNode(selectedNode, path.getParentPath().getLastPathComponent())) + { + Object parentNode = path.getParentPath().getLastPathComponent(); + showFlagPane(parentNode, selectedNode); + return; + } + if (isStream(selectedNode)) + { + showStream((COSStream) getUnderneathObject(selectedNode), path); + return; + } + if (isFont(selectedNode)) + { + showFont(selectedNode, path); + return; + } + if (isString(selectedNode)) + { + showString(selectedNode); + return; + } + if (jSplitPane1.getRightComponent() == null + || !jSplitPane1.getRightComponent().equals(jScrollPane2)) + { + replaceRightComponent(jScrollPane2); + } + jTextPane1.setText(convertToString(selectedNode)); + } + catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + } + + private boolean isSpecialColorSpace(Object selectedNode) + { + selectedNode = getUnderneathObject(selectedNode); + + if (selectedNode instanceof COSArray && ((COSArray) selectedNode).size() > 0) + { + COSBase arrayEntry = ((COSArray)selectedNode).get(0); + if (arrayEntry instanceof COSName) + { + COSName name = (COSName) arrayEntry; + return SPECIALCOLORSPACES.contains(name); + } + } + return false; + } + + private boolean isOtherColorSpace(Object selectedNode) + { + selectedNode = getUnderneathObject(selectedNode); + + if (selectedNode instanceof COSArray && ((COSArray) selectedNode).size() > 0) + { + COSBase arrayEntry = ((COSArray)selectedNode).get(0); + if (arrayEntry instanceof COSName) + { + COSName name = (COSName) arrayEntry; + return OTHERCOLORSPACES.contains(name); + } + } + return false; + } + + private boolean isPage(Object selectedNode) + { + selectedNode = getUnderneathObject(selectedNode); + + if (selectedNode instanceof COSDictionary) + { + COSDictionary dict = (COSDictionary) selectedNode; + COSBase typeItem = dict.getItem(COSName.TYPE); + if (COSName.PAGE.equals(typeItem)) + { + return true; + } + } + else if (selectedNode instanceof PageEntry) + { + return true; + } + return false; + } + + private boolean isFlagNode(Object selectedNode, Object parentNode) + { + if (selectedNode instanceof MapEntry) + { + Object key = ((MapEntry) selectedNode).getKey(); + return (COSName.FLAGS.equals(key) && isFontDescriptor(parentNode)) || + (COSName.F.equals(key) && isAnnot(parentNode)) || + COSName.FF.equals(key) || + COSName.PANOSE.equals(key) || + COSName.SIG_FLAGS.equals(key) || + (COSName.P.equals(key) && isEncrypt(parentNode)); + } + return false; + } + + private boolean isEncrypt(Object obj) + { + if (obj instanceof MapEntry) + { + MapEntry entry = (MapEntry) obj; + return COSName.ENCRYPT.equals(entry.getKey()) && entry.getValue() instanceof COSDictionary; + } + return false; + } + + private boolean isFontDescriptor(Object obj) + { + Object underneathObject = getUnderneathObject(obj); + return underneathObject instanceof COSDictionary && + ((COSDictionary) underneathObject).containsKey(COSName.TYPE) && + ((COSDictionary) underneathObject).getCOSName(COSName.TYPE).equals(COSName.FONT_DESC); + } + + private boolean isAnnot(Object obj) + { + Object underneathObject = getUnderneathObject(obj); + return underneathObject instanceof COSDictionary && + ((COSDictionary) underneathObject).containsKey(COSName.TYPE) && + ((COSDictionary) underneathObject).getCOSName(COSName.TYPE).equals(COSName.ANNOT); + } + + private boolean isStream(Object selectedNode) + { + return getUnderneathObject(selectedNode) instanceof COSStream; + } + + private boolean isString(Object selectedNode) + { + return getUnderneathObject(selectedNode) instanceof COSString; + } + + private boolean isFont(Object selectedNode) + { + selectedNode = getUnderneathObject(selectedNode); + if (selectedNode instanceof COSDictionary) + { + COSDictionary dic = (COSDictionary)selectedNode; + return dic.containsKey(COSName.TYPE) && + dic.getCOSName(COSName.TYPE).equals(COSName.FONT) && + !isCIDFont(dic); + } + return false; + } + + private boolean isCIDFont(COSDictionary dic) + { + return dic.containsKey(COSName.SUBTYPE) && + (dic.getCOSName(COSName.SUBTYPE).equals(COSName.CID_FONT_TYPE0) + || dic.getCOSName(COSName.SUBTYPE).equals(COSName.CID_FONT_TYPE2)); + } + + /** + * Show a Panel describing color spaces in more detail and interactive way. + * @param csNode the special color space containing node. + */ + private void showColorPane(Object csNode) + { + csNode = getUnderneathObject(csNode); + + if (csNode instanceof COSArray && ((COSArray) csNode).size() > 0) + { + COSArray array = (COSArray)csNode; + COSBase arrayEntry = array.get(0); + if (arrayEntry instanceof COSName) + { + COSName csName = (COSName) arrayEntry; + if (csName.equals(COSName.SEPARATION)) + { + replaceRightComponent(new CSSeparation(array).getPanel()); + } + else if (csName.equals(COSName.DEVICEN)) + { + replaceRightComponent(new CSDeviceN(array).getPanel()); + } + else if (csName.equals(COSName.INDEXED)) + { + replaceRightComponent(new CSIndexed(array).getPanel()); + } + else if (OTHERCOLORSPACES.contains(csName)) + { + replaceRightComponent(new CSArrayBased(array).getPanel()); + } + } + } + } + + private void showPage(Object selectedNode) + { + selectedNode = getUnderneathObject(selectedNode); + + COSDictionary page; + if (selectedNode instanceof COSDictionary) + { + page = (COSDictionary) selectedNode; + } + else + { + page = ((PageEntry) selectedNode).getDict(); + } + + COSBase typeItem = page.getItem(COSName.TYPE); + if (COSName.PAGE.equals(typeItem)) + { + PagePane pagePane = new PagePane(document, page, statusBar.getStatusLabel()); + replaceRightComponent(new JScrollPane(pagePane.getPanel())); + } + } + + private void showFlagPane(Object parentNode, Object selectedNode) + { + parentNode = getUnderneathObject(parentNode); + if (parentNode instanceof COSDictionary) + { + selectedNode = ((MapEntry)selectedNode).getKey(); + selectedNode = getUnderneathObject(selectedNode); + FlagBitsPane flagBitsPane = new FlagBitsPane(document, + (COSDictionary) parentNode, + (COSName) selectedNode); + replaceRightComponent(flagBitsPane.getPane()); + } + } + + private void showStream(COSStream stream, TreePath path) throws IOException + { + boolean isContentStream = false; + boolean isThumb = false; + + COSName key = getNodeKey(path.getLastPathComponent()); + COSName parentKey = getNodeKey(path.getParentPath().getLastPathComponent()); + COSDictionary resourcesDic = null; + + if (COSName.CONTENTS.equals(key)) + { + Object pageObj = path.getParentPath().getLastPathComponent(); + COSDictionary page = (COSDictionary) getUnderneathObject(pageObj); + resourcesDic = (COSDictionary) page.getDictionaryObject(COSName.RESOURCES); + isContentStream = true; + } + else if (COSName.CONTENTS.equals(parentKey) || COSName.CHAR_PROCS.equals(parentKey)) + { + Object pageObj = path.getParentPath().getParentPath().getLastPathComponent(); + COSDictionary page = (COSDictionary) getUnderneathObject(pageObj); + resourcesDic = (COSDictionary) page.getDictionaryObject(COSName.RESOURCES); + isContentStream = true; + } + else if (COSName.FORM.equals(stream.getCOSName(COSName.SUBTYPE)) || + COSName.PATTERN.equals(stream.getCOSName(COSName.TYPE)) || + stream.getInt(COSName.PATTERN_TYPE) == 1) + { + if (stream.containsKey(COSName.RESOURCES)) + { + resourcesDic = (COSDictionary) stream.getDictionaryObject(COSName.RESOURCES); + } + isContentStream = true; + } + else if (COSName.THUMB.equals(key)) + { + resourcesDic = null; + isThumb = true; + } + else if (COSName.IMAGE.equals((stream).getCOSName(COSName.SUBTYPE))) + { + // not to be used for /Thumb, even if it contains /Subtype /Image + Object resourcesObj = path.getParentPath().getParentPath().getLastPathComponent(); + resourcesDic = (COSDictionary) getUnderneathObject(resourcesObj); + } + StreamPane streamPane = new StreamPane(stream, isContentStream, isThumb, resourcesDic); + replaceRightComponent(streamPane.getPanel()); + } + + private void showFont(Object selectedNode, TreePath path) + { + COSName fontName = getNodeKey(selectedNode); + COSDictionary resourceDic = (COSDictionary) getUnderneathObject(path.getParentPath().getParentPath().getLastPathComponent()); + + FontEncodingPaneController fontEncodingPaneController = new FontEncodingPaneController(fontName, resourceDic); + JPanel pane = fontEncodingPaneController.getPane(); + if (pane == null) + { + // unsupported font type + replaceRightComponent(jScrollPane2); + return; + } + replaceRightComponent(pane); + } + + // replace the right component while keeping divider position + private void replaceRightComponent(Component pane) + { + int div = jSplitPane1.getDividerLocation(); + jSplitPane1.setRightComponent(pane); + jSplitPane1.setDividerLocation(div); + } + + private void showString(Object selectedNode) + { + COSString string = (COSString)getUnderneathObject(selectedNode); + replaceRightComponent(new StringPane(string).getPane()); + } + + private COSName getNodeKey(Object selectedNode) + { + if (selectedNode instanceof MapEntry) + { + return ((MapEntry) selectedNode).getKey(); + } + return null; + } + + private Object getUnderneathObject(Object selectedNode) + { + if (selectedNode instanceof MapEntry) + { + selectedNode = ((MapEntry) selectedNode).getValue(); + } + else if (selectedNode instanceof ArrayEntry) + { + selectedNode = ((ArrayEntry) selectedNode).getValue(); + } + else if (selectedNode instanceof PageEntry) + { + selectedNode = ((PageEntry) selectedNode).getDict(); + } + + if (selectedNode instanceof COSObject) + { + selectedNode = ((COSObject) selectedNode).getObject(); + } + return selectedNode; + } + + private String convertToString( Object selectedNode ) + { + String data = null; + if(selectedNode instanceof COSBoolean) + { + data = "" + ((COSBoolean)selectedNode).getValue(); + } + else if( selectedNode instanceof COSFloat ) + { + data = "" + ((COSFloat)selectedNode).floatValue(); + } + else if( selectedNode instanceof COSNull ) + { + data = "null"; + } + else if( selectedNode instanceof COSInteger ) + { + data = "" + ((COSInteger)selectedNode).intValue(); + } + else if( selectedNode instanceof COSName ) + { + data = "" + ((COSName)selectedNode).getName(); + } + else if( selectedNode instanceof COSString ) + { + String text = ((COSString) selectedNode).getString(); + // display unprintable strings as hex + for (char c : text.toCharArray()) + { + if (Character.isISOControl(c)) + { + text = "<" + ((COSString) selectedNode).toHexString() + ">"; + break; + } + } + data = "" + text; + } + else if( selectedNode instanceof COSStream ) + { + try + { + COSStream stream = (COSStream) selectedNode; + InputStream in = stream.createInputStream(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + IOUtils.copy(in, baos); + data = baos.toString(); + } + catch( IOException e ) + { + throw new RuntimeException(e); + } + } + else if( selectedNode instanceof MapEntry ) + { + data = convertToString( ((MapEntry)selectedNode).getValue() ); + } + else if( selectedNode instanceof ArrayEntry ) + { + data = convertToString( ((ArrayEntry)selectedNode).getValue() ); + } + return data; + } + + private void exitMenuItemActionPerformed(ActionEvent ignored) + { + if( document != null ) + { + try + { + document.close(); + if (!currentFilePath.startsWith("http")) + { + recentFiles.addFile(currentFilePath); + } + recentFiles.close(); + } + catch( IOException e ) + { + throw new RuntimeException(e); + } + } + performApplicationExit(); + } + + /** + * Exit the application after the window is closed. This is protected to + * let subclasses override the behavior. + */ + @SuppressWarnings("WeakerAccess") + protected void performApplicationExit() + { + System.exit(0); + } + + private void printMenuItemActionPerformed(ActionEvent evt) + { + if (document == null) + { + return; + } + AccessPermission ap = document.getCurrentAccessPermission(); + if (!ap.canPrint()) + { + JOptionPane.showMessageDialog(this, "You do not have permission to print"); + return; + } + + try + { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); + PDViewerPreferences vp = document.getDocumentCatalog().getViewerPreferences(); + if (vp != null && vp.getDuplex() != null) + { + String dp = vp.getDuplex(); + if (PDViewerPreferences.DUPLEX.DuplexFlipLongEdge.toString().equals(dp)) + { + pras.add(Sides.TWO_SIDED_LONG_EDGE); + } + else if (PDViewerPreferences.DUPLEX.DuplexFlipShortEdge.toString().equals(dp)) + { + pras.add(Sides.TWO_SIDED_SHORT_EDGE); + } + else if (PDViewerPreferences.DUPLEX.Simplex.toString().equals(dp)) + { + pras.add(Sides.ONE_SIDED); + } + } + if (job.printDialog(pras)) + { + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try + { + job.print(pras); + } + finally + { + setCursor(Cursor.getDefaultCursor()); + } + } + } + catch (PrinterException e) + { + throw new RuntimeException(e); + } + } + + /** + * Exit the Application. + */ + private void exitForm(WindowEvent evt) + { + exitMenuItemActionPerformed(null); + } + + private void readPDFFile(String filePath, String password) throws IOException + { + File file = new File(filePath); + readPDFFile(file, password); + } + + private void readPDFFile(final File file, String password) throws IOException + { + if( document != null ) + { + document.close(); + if (!currentFilePath.startsWith("http")) + { + recentFiles.addFile(currentFilePath); + } + } + currentFilePath = file.getPath(); + recentFiles.removeFile(file.getPath()); + LogDialog.instance().clear(); + + DocumentOpener documentOpener = new DocumentOpener(password) + { + @Override + PDDocument open() throws IOException + { + return PDDocument.load(file, password); + } + }; + document = documentOpener.parse(); + printMenuItem.setEnabled(true); + reopenMenuItem.setEnabled(true); + + initTree(); + + if (IS_MAC_OS) + { + setTitle(file.getName()); + getRootPane().putClientProperty("Window.documentFile", file); + } + else + { + setTitle("PDF Debugger - " + file.getAbsolutePath()); + } + addRecentFileItems(); + } + + private void readPDFurl(final String urlString, String password) throws IOException + { + if (document != null) + { + document.close(); + if (!currentFilePath.startsWith("http")) + { + recentFiles.addFile(currentFilePath); + } + } + currentFilePath = urlString; + LogDialog.instance().clear(); + DocumentOpener documentOpener = new DocumentOpener(password) + { + @Override + PDDocument open() throws IOException + { + return PDDocument.load(new URL(urlString).openStream(), password); + } + }; + document = documentOpener.parse(); + printMenuItem.setEnabled(true); + reopenMenuItem.setEnabled(true); + + initTree(); + + if (IS_MAC_OS) + { + setTitle(urlString); + } + else + { + setTitle("PDF Debugger - " + urlString); + } + addRecentFileItems(); + } + + public void initTree() + { + TreeStatus treeStatus = new TreeStatus(document.getDocument().getTrailer()); + statusPane.updateTreeStatus(treeStatus); + + if (isPageMode) + { + File file = new File(currentFilePath); + DocumentEntry documentEntry = new DocumentEntry(document, file.getName()); + ZoomMenu.getInstance().resetZoom(); + RotationMenu.getInstance().setRotationSelection(RotationMenu.ROTATE_0_DEGREES); + tree.setModel(new PDFTreeModel(documentEntry)); + // Root/Pages/Kids/[0] is not always the first page, so use the first row instead: + tree.setSelectionPath(tree.getPathForRow(1)); + } + else + { + tree.setModel(new PDFTreeModel(document)); + tree.setSelectionPath(treeStatus.getPathForString("Root")); + } + } + + /** + * Internal class to avoid double code in password entry loop. + */ + abstract class DocumentOpener + { + String password; + + DocumentOpener(String password) + { + this.password = password; + } + + /** + * Override to load the actual input type (File, URL, stream), don't call it directly! + * + * @return + * @throws IOException + */ + abstract PDDocument open() throws IOException; + + /** + * Call this! + * + * @return + * @throws IOException + */ + final PDDocument parse() throws IOException + { + while (true) + { + try + { + return open(); + } + catch (InvalidPasswordException ipe) + { + // https://stackoverflow.com/questions/8881213/joptionpane-to-get-password + JPanel panel = new JPanel(); + JLabel label = new JLabel("Password:"); + JPasswordField pass = new JPasswordField(10); + panel.add(label); + panel.add(pass); + String[] options = new String[] + { + "OK", "Cancel" + }; + int option = JOptionPane.showOptionDialog(null, panel, "Enter password", + JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE, + null, options, ""); + if (option == 0) + { + password = new String(pass.getPassword()); + continue; + } + throw ipe; + } + } + } + } + + private void addRecentFileItems() + { + Action recentMenuAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + String filePath = (String) ((JComponent) actionEvent.getSource()).getClientProperty("path"); + try + { + readPDFFile(filePath, ""); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } + }; + if (!recentFiles.isEmpty()) + { + recentFilesMenu.removeAll(); + List files = recentFiles.getFiles(); + for (int i = files.size() - 1; i >= 0; i--) + { + String path = files.get(i); + String name = new File(path).getName(); + JMenuItem recentFileMenuItem = new JMenuItem(name); + recentFileMenuItem.putClientProperty("path", path); + recentFileMenuItem.addActionListener(recentMenuAction); + recentFilesMenu.add(recentFileMenuItem); + } + recentFilesMenu.setEnabled(true); + } + } + + /** + * Convenience method to get the page label if available. + * + * @param document + * @param pageIndex 0-based page number. + * @return a page label or null if not available. + */ + public static String getPageLabel(PDDocument document, int pageIndex) + { + PDPageLabels pageLabels; + try + { + pageLabels = document.getDocumentCatalog().getPageLabels(); + } + catch (IOException ex) + { + return ex.getMessage(); + } + if (pageLabels != null) + { + String[] labels = pageLabels.getLabelsByPageIndices(); + if (labels[pageIndex] != null) + { + return labels[pageIndex]; + } + } + return null; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSArrayBased.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSArrayBased.java new file mode 100644 index 00000000000..b0072df2cc6 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSArrayBased.java @@ -0,0 +1,139 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.color.ColorSpace; +import java.io.IOException; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; + +/** + * + * @author Tilman Hausherr + * + * Simple pane to show a title and detail on the color spaces that have no visual "magic". + */ +public class CSArrayBased +{ + private JPanel panel; + private PDColorSpace colorSpace = null; + private int numberOfComponents = 0; + private String errmsg = ""; + + public CSArrayBased(COSArray array) + { + try + { + colorSpace = PDColorSpace.create(array); + if (!(colorSpace instanceof PDPattern)) + { + numberOfComponents = colorSpace.getNumberOfComponents(); + } + } + catch (IOException ex) + { + errmsg = ex.getMessage(); + } + initUI(); + } + + private void initUI() + { + panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setPreferredSize(new Dimension(300, 500)); + + if (colorSpace == null) + { + JLabel error = new JLabel(errmsg); + error.setAlignmentX(Component.CENTER_ALIGNMENT); + error.setFont(new Font(Font.MONOSPACED, Font.BOLD, 15)); + panel.add(error); + return; + } + + JLabel colorSpaceLabel = new JLabel(colorSpace.getName() + " colorspace"); + colorSpaceLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + colorSpaceLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 30)); + panel.add(colorSpaceLabel); + + if (numberOfComponents > 0) + { + JLabel colorCountLabel = new JLabel("Component Count: " + numberOfComponents); + colorCountLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + colorCountLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20)); + panel.add(colorCountLabel); + } + + if (colorSpace instanceof PDICCBased) + { + PDICCBased icc = (PDICCBased) colorSpace; + int colorSpaceType = icc.getColorSpaceType(); + String cs; + switch (colorSpaceType) + { + case ColorSpace.CS_LINEAR_RGB: + cs = "linear RGB"; + break; + case ColorSpace.CS_CIEXYZ: + cs = "CIEXYZ"; + break; + case ColorSpace.CS_GRAY: + cs = "linear gray"; + break; + case ColorSpace.CS_sRGB: + cs = "sRGB"; + break; + case ColorSpace.TYPE_RGB: + cs = "RGB"; + break; + case ColorSpace.TYPE_GRAY: + cs = "gray"; + break; + case ColorSpace.TYPE_CMYK: + cs = "CMYK"; + break; + default: + cs = "type " + colorSpaceType; + break; + } + JLabel otherLabel = new JLabel("Colorspace type: " + cs); + otherLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + otherLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20)); + panel.add(otherLabel); + } + } + + /** + * return the main panel that hold all the UI elements. + * + * @return JPanel instance + */ + public Component getPanel() + { + return panel; + } + +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSDeviceN.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSDeviceN.java new file mode 100644 index 00000000000..23f1a4e46ff --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSDeviceN.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.util.Arrays; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceN; + + +/** + *@author Khyrul Bashar. + */ + +/** + * A class that provides the necessary UI and functionalities to show the DeviceN color space. + */ +public class CSDeviceN +{ + private PDDeviceN deviceN; + private JPanel panel; + + /** + * Constructor + * + * @param array COSArray instance that holds DeviceN color space + */ + public CSDeviceN(COSArray array) + { + try + { + deviceN = new PDDeviceN(array); + DeviceNColorant[] colorants = getColorantData(); + initUI(colorants); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * Parses the colorant data from the array. + * + * @return the parsed colorants. + * @throws java.io.IOException if the color conversion fails. + */ + private DeviceNColorant[] getColorantData() throws IOException + { + int componentCount = deviceN.getNumberOfComponents(); + DeviceNColorant[] colorants = new DeviceNColorant[componentCount]; + for (int i = 0; i < componentCount; i++) + { + DeviceNColorant colorant = new DeviceNColorant(); + + colorant.setName(deviceN.getColorantNames().get(i)); + float[] maximum = new float[componentCount]; + Arrays.fill(maximum, 0); + float[] minimum = new float[componentCount]; + Arrays.fill(minimum, 0); + maximum[i] = 1; + colorant.setMaximum(getColorObj(deviceN.toRGB(maximum))); + colorant.setMinimum(getColorObj(deviceN.toRGB(minimum))); + colorants[i] = colorant; + } + return colorants; + } + + private void initUI(DeviceNColorant[] colorants) + { + panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setPreferredSize(new Dimension(300, 500)); + + JLabel colorSpaceLabel = new JLabel("DeviceN colorspace"); + colorSpaceLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + colorSpaceLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 30)); + + DeviceNTableModel tableModel = new DeviceNTableModel(colorants); + JTable table = new JTable(tableModel); + table.setDefaultRenderer(Color.class, new ColorBarCellRenderer()); + table.setRowHeight(60); + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setViewportView(table); + + panel.add(colorSpaceLabel); + panel.add(scrollPane); + } + + /** + * return the main panel that hold all the UI elements. + * + * @return JPanel instance + */ + public Component getPanel() + { + return panel; + } + + private Color getColorObj(float[] rgbValues) + { + return new Color(rgbValues[0], rgbValues[1], rgbValues[2]); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSIndexed.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSIndexed.java new file mode 100644 index 00000000000..bba13cb0ee7 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSIndexed.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.io.IOException; +import javax.swing.Box; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.graphics.color.PDIndexed; + +/** + * @author Khyrul Bashar. + */ + +/** + * A class that provides the necessary UI and functionalities to show the Indexed colorspace. + */ +public class CSIndexed +{ + private PDIndexed indexed; + private JPanel panel; + private int colorCount; + + /** + * Constructor. + * @param array COSArray instance for Indexed Colorspace. + */ + public CSIndexed(COSArray array) + { + try + { + indexed = new PDIndexed(array); + colorCount = getHival(array) + 1; + initUI(getColorantData()); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * Parses the colorant data from the array and return. + * + * @return + */ + private IndexedColorant[] getColorantData() + { + IndexedColorant[] colorants = new IndexedColorant[colorCount]; + for (int i = 0; i < colorCount; i++) + { + IndexedColorant colorant = new IndexedColorant(); + colorant.setIndex(i); + + float[] rgbValues = indexed.toRGB(new float[]{i}); + colorant.setRgbValues(rgbValues); + colorants[i] = colorant; + } + return colorants; + } + + private void initUI(IndexedColorant[] colorants) + { + panel = new JPanel(); + panel.setLayout(new GridBagLayout()); + panel.setPreferredSize(new Dimension(300, 500)); + + JLabel colorSpaceLabel = new JLabel("Indexed colorspace"); + colorSpaceLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + colorSpaceLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 30)); + JPanel colorspaceLabelPanel = new JPanel(); + colorspaceLabelPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + colorspaceLabelPanel.add(colorSpaceLabel); + + JLabel colorCountLabel = new JLabel(" Total Color Count: " + colorCount); + colorCountLabel.setAlignmentX(Component.LEFT_ALIGNMENT); + colorCountLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20)); + + IndexedTableModel tableModel = new IndexedTableModel(colorants); + JTable table = new JTable(tableModel); + table.setDefaultRenderer(Color.class, new ColorBarCellRenderer()); + table.setRowHeight(40); + table.getColumnModel().getColumn(0).setMinWidth(30); + table.getColumnModel().getColumn(0).setMaxWidth(50); + table.getColumnModel().getColumn(1).setMinWidth(100); + table.getColumnModel().getColumn(1).setMaxWidth(100); + + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setViewportView(table); + scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT); + + Box box = Box.createVerticalBox(); + box.add(colorCountLabel); + box.add(scrollPane); + box.setAlignmentX(Component.LEFT_ALIGNMENT); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weighty = 0.05; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.anchor = GridBagConstraints.PAGE_START; + + panel.add(colorspaceLabelPanel, gbc); + + gbc.gridy = 2; + gbc.weighty=0.9; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + gbc.anchor = GridBagConstraints.BELOW_BASELINE; + + panel.add(box, gbc); + } + + /** + * return the main panel that hold all the UI elements. + * + * @return JPanel instance + */ + public Component getPanel() + { + return panel; + } + + private int getHival(COSArray array) + { + int hival = ((COSNumber) array.getObject(2).getCOSObject()).intValue(); + return Math.min(hival, 255); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSSeparation.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSSeparation.java new file mode 100644 index 00000000000..5e63bc3bf96 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/CSSeparation.java @@ -0,0 +1,272 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.util.Dictionary; +import java.util.Hashtable; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSlider; +import javax.swing.JTextField; +import javax.swing.border.BevelBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation; + +/** + * @author Khyrul Bashar. + */ + +/** + *A class that provides the necessary UI and functionalities to show the Separation color space. + */ +public class CSSeparation implements ChangeListener, ActionListener +{ + private JSlider slider; + private JTextField tintField; + private JLabel colorBar; + private JPanel panel; + + private PDSeparation separation; + private float tintValue = 1; + + /** + * Constructor + * @param array COSArray instance of the separation color space. + */ + public CSSeparation(COSArray array) + { + try + { + separation = new PDSeparation(array); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + initUI(); + initValues(); + } + + /** + * initialize all the UI elements and arrange them. + */ + private void initUI() + { + Font boldFont = new Font(Font.MONOSPACED, Font.BOLD, 20); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.insets = new Insets(2, 2, 2, 2); + + JPanel inputPanel = new JPanel(new GridBagLayout()); + + slider = new JSlider(0, 100, 50); + slider.setMajorTickSpacing(50); + slider.setPaintTicks(true); + + Dictionary labelTable = new Hashtable<>(); + JLabel lightest = new JLabel("lightest"); + lightest.setFont(new Font(Font.MONOSPACED, Font.BOLD, 10)); + JLabel darkest = new JLabel("darkest"); + darkest.setFont(new Font(Font.MONOSPACED, Font.BOLD, 10)); + JLabel midPoint = new JLabel("0.5"); + midPoint.setFont(new Font(Font.MONOSPACED, Font.BOLD, 10)); + labelTable.put(0, lightest); + labelTable.put(50, midPoint); + labelTable.put(100, darkest); + + slider.setPaintLabels(true); + slider.setLabelTable(labelTable); + slider.addChangeListener(this); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 10; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.HORIZONTAL; + inputPanel.add(slider, gbc); + + JLabel tintLabel = new JLabel("Tint Value:"); + tintLabel.setFont(boldFont); + gbc.gridx = 0; + gbc.gridy = 1; + gbc.weightx = 0.5; + gbc.gridwidth = 1; + gbc.fill = GridBagConstraints.HORIZONTAL; + inputPanel.add(tintLabel, gbc); + + tintField = new JTextField(); + tintField.addActionListener(this); + tintField.setPreferredSize(new Dimension(10, 30)); + gbc.gridx = 1; + gbc.weightx = 0.5; + gbc.gridwidth = 1; + gbc.fill = GridBagConstraints.HORIZONTAL; + inputPanel.add(tintField, gbc); + + JPanel contentPanel = new JPanel(new GridBagLayout()); + GridBagConstraints gbc2 = new GridBagConstraints(); + gbc2.gridx = 0; + gbc2.gridy = 0; + gbc2.gridwidth = 2; + gbc2.weightx = 0.3; + gbc2.weighty = 1; + gbc2.fill = GridBagConstraints.HORIZONTAL; + contentPanel.add(inputPanel, gbc2); + + colorBar = new JLabel(); + colorBar.setOpaque(true); + gbc2.gridx = 2; + gbc2.weightx = 0.7; + gbc2.gridwidth = 4; + gbc2.gridheight = 2; + gbc2.fill = GridBagConstraints.BOTH; + contentPanel.add(colorBar, gbc2); + setColorBarBorder(); + + JPanel mainpanel = new JPanel(new GridBagLayout()); + + JLabel colorantNameLabel = new JLabel("Colorant: " + separation.getColorantName()); + colorantNameLabel.setFont(boldFont); + + GridBagConstraints maingbc = new GridBagConstraints(); + maingbc.gridx = 0; + maingbc.gridy = 0; + maingbc.weightx = 1; + maingbc.weighty = 0.03; + maingbc.anchor = GridBagConstraints.FIRST_LINE_START; + mainpanel.add(colorantNameLabel, maingbc); + + maingbc.gridx = 0; + maingbc.gridy = 1; + maingbc.weighty = 0.97; + maingbc.gridwidth = 10; + maingbc.fill = GridBagConstraints.HORIZONTAL; + mainpanel.add(contentPanel, maingbc); + + panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setPreferredSize(new Dimension(300, 500)); + + JLabel colorSpaceLabel = new JLabel("Separation colorspace"); + colorSpaceLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + colorSpaceLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 30)); + + panel.add(colorSpaceLabel); + panel.add(mainpanel); + } + + private void initValues() + { + slider.setValue(getIntRepresentation(tintValue)); + tintField.setText(Float.toString(tintValue)); + } + + /** + * return the main panel that hold all the UI elements. + * @return JPanel instance + */ + public JPanel getPanel() + { + return panel; + } + + /** + * input changed in slider. + * @param changeEvent + */ + @Override + public void stateChanged(ChangeEvent changeEvent) + { + int value = slider.getValue(); + tintValue = getFloatRepresentation(value); + tintField.setText(Float.toString(tintValue)); + updateColorBar(); + } + + /** + * input changed in text field. + * @param actionEvent + */ + @Override + public void actionPerformed(ActionEvent actionEvent) + { + String input = tintField.getText(); + try + { + tintValue= Float.parseFloat(input); + slider.setValue(getIntRepresentation(tintValue)); + updateColorBar(); + } + catch (NumberFormatException e) + { + tintField.setText(Float.toString(tintValue)); + } + } + + private void updateColorBar() + { + try + { + float[] rgbValues = separation.toRGB(new float[] {tintValue}); + colorBar.setBackground(new Color(rgbValues[0], rgbValues[1], rgbValues[2])); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * Set a little border around colorbar. color of the border is the darkest of the colorant. + */ + private void setColorBarBorder() + { + try + { + float[] rgbValues = separation.toRGB(new float[] {1}); + Color darkest= new Color(rgbValues[0], rgbValues[1], rgbValues[2]); + colorBar.setBorder(new BevelBorder(BevelBorder.LOWERED, darkest, darkest)); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + private float getFloatRepresentation(int value) + { + return (float) value/100; + } + + private int getIntRepresentation(float value) + { + return (int) (value*100); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/ColorBarCellRenderer.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/ColorBarCellRenderer.java new file mode 100644 index 00000000000..1cbbb2f8563 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/ColorBarCellRenderer.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; +import java.awt.Component; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.table.TableCellRenderer; + +/** + * @author Khyrul Bashar. + */ + +/** + * ColorBarCellRenderer class that says how to render color bar columns + */ +public class ColorBarCellRenderer implements TableCellRenderer +{ + @Override + public Component getTableCellRendererComponent( + JTable jTable, Object o, boolean b, boolean b2, int i, int i2) + { + JLabel colorBar = new JLabel(); + colorBar.setOpaque(true); + colorBar.setBackground((Color) o); + return colorBar; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/DeviceNColorant.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/DeviceNColorant.java new file mode 100644 index 00000000000..0e8ebf8405d --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/DeviceNColorant.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; + +/** + * @author Khyrul Bashar. + */ +public class DeviceNColorant +{ + private String name; + private Color maximum; + private Color minimum; + + /** + * Constructor + */ + public DeviceNColorant() + { + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public Color getMaximum() + { + return maximum; + } + + public void setMaximum(Color maximum) + { + this.maximum = maximum; + } + + public Color getMinimum() + { + return minimum; + } + + public void setMinimum(Color minimum) + { + this.minimum = minimum; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/DeviceNTableModel.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/DeviceNTableModel.java new file mode 100644 index 00000000000..346ccb274bb --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/DeviceNTableModel.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; +import javax.swing.table.AbstractTableModel; + +/** + * @author Khyrul Bashar. + */ + +/** + * This the table model for showing DeviceN color space which extends AbstractTableModel. + */ +public class DeviceNTableModel extends AbstractTableModel +{ + private static final String[] COLUMNNAMES = new String[] { "Colorant", "Maximum", "Minimum"}; + private final DeviceNColorant[] data; + + /** + * Constructor + * @param colorants array of DeviceNColorant + */ + public DeviceNTableModel(DeviceNColorant[] colorants) + { + data = colorants; + } + + @Override + public int getRowCount() + { + return data.length; + } + + @Override + public int getColumnCount() + { + return COLUMNNAMES.length; + } + + @Override + public Object getValueAt(int row, int column) + { + switch (column) + { + case 0: + return data[row].getName(); + case 1: + return data[row].getMaximum(); + case 2: + return data[row].getMinimum(); + default: + return null; + } + } + + @Override + public String getColumnName(int column) + { + return COLUMNNAMES[column]; + } + + @Override + public Class getColumnClass(int columnIndex) + { + switch (columnIndex) + { + case 0: + return String.class; + case 1: + case 2: + return Color.class; + default: + return null; + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/IndexedColorant.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/IndexedColorant.java new file mode 100644 index 00000000000..2e73e9677d4 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/IndexedColorant.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; + +/** + * @author Khyrul Bashar. + */ + +/** + * Class to represent Colorant in Indexed color. + */ +public class IndexedColorant +{ + private int index; + private float[] rgbValues; + + /** + * Constructor. + */ + public IndexedColorant(){} + + public int getIndex() + { + return index; + } + + public void setIndex(int index) + { + this.index = index; + } + + public void setRgbValues(float[] rgbValues) + { + this.rgbValues = rgbValues; + } + + public Color getColor() + { + return new Color(rgbValues[0], rgbValues[1], rgbValues[2]); + } + + public String getRGBValuesString() + { + StringBuilder builder = new StringBuilder(); + for (float i: rgbValues) + { + builder.append((int)(i*255)); + builder.append(", "); + } + builder.deleteCharAt(builder.lastIndexOf(",")); + return builder.toString(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/IndexedTableModel.java b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/IndexedTableModel.java new file mode 100644 index 00000000000..fd32f42b4f1 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/colorpane/IndexedTableModel.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.colorpane; + +import java.awt.Color; +import javax.swing.table.AbstractTableModel; + +/** + * @author Khyrul Bashar. + */ + +/** + * This the table model for showing Indexed color space which extends AbstractTableModel. + */ +public class IndexedTableModel extends AbstractTableModel +{ + + private static final String[] COLUMNSNAMES = new String[] {"Index", "RGB value", "Color"}; + private final IndexedColorant[] data; + + /** + * Constructor + * @param colorants array of IndexedColorant + */ + public IndexedTableModel(IndexedColorant[] colorants) + { + data = colorants; + } + + @Override + public int getRowCount() + { + return data.length; + } + + @Override + public int getColumnCount() + { + return COLUMNSNAMES.length; + } + + @Override + public Object getValueAt(int row, int column) + { + switch (column) + { + case 0: + return data[row].getIndex(); + case 1: + return data[row].getRGBValuesString(); + case 2: + return data[row].getColor(); + default: + return null; + } + } + + @Override + public String getColumnName(int column) + { + return COLUMNSNAMES[column]; + } + + @Override + public Class getColumnClass(int columnIndex) + { + switch (columnIndex) + { + case 0: + return Integer.class; + case 1: + return String.class; + case 2: + return Color.class; + default: + return null; + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/AnnotFlag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/AnnotFlag.java new file mode 100644 index 00000000000..24da4bc1a1d --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/AnnotFlag.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; + +/** + * @author Khyrul Bashar + * + * A class that provides Annotation flag bits. + */ +class AnnotFlag extends Flag +{ + private final COSDictionary annotDictionary; + + /** + * Constructor + * @param annotDictionary COSDictionary instance + */ + AnnotFlag(COSDictionary annotDictionary) + { + this.annotDictionary = annotDictionary; + } + + @Override + String getFlagType() + { + return "Annot flag"; + } + + @Override + String getFlagValue() + { + return "Flag value: " + annotDictionary.getInt(COSName.F); + } + + @Override + Object[][] getFlagBits() + { + PDAnnotation annotation = new PDAnnotation(annotDictionary) + { + }; + return new Object[][]{ + new Object[]{1, "Invisible", annotation.isInvisible()}, + new Object[]{2, "Hidden", annotation.isHidden()}, + new Object[]{3, "Print", annotation.isPrinted()}, + new Object[]{4, "NoZoom", annotation.isNoZoom()}, + new Object[]{5, "NoRotate", annotation.isNoRotate()}, + new Object[]{6, "NoView", annotation.isNoView()}, + new Object[]{7, "ReadOnly", annotation.isReadOnly()}, + new Object[]{8, "Locked", annotation.isLocked()}, + new Object[]{9, "ToggleNoView", annotation.isToggleNoView()}, + new Object[]{10, "LockedContents", annotation.isLocked()} + }; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/EncryptFlag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/EncryptFlag.java new file mode 100644 index 00000000000..4ce7aca767c --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/EncryptFlag.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; + +/** + * @author Tilman Hausherr + * + * A class that provides Encrypt flag bits. + */ +public class EncryptFlag extends Flag +{ + private final COSDictionary encryptDictionary; + + /** + * Constructor + * @param encryptDict COSDictionary instance. + */ + EncryptFlag(COSDictionary encryptDict) + { + encryptDictionary = encryptDict; + } + + @Override + String getFlagType() + { + return "Encrypt flag"; + } + + @Override + String getFlagValue() + { + return "Flag value:" + encryptDictionary.getInt(COSName.P); + } + + @Override + Object[][] getFlagBits() + { + AccessPermission ap = new AccessPermission(encryptDictionary.getInt(COSName.P)); + return new Object[][]{ + new Object[]{3, "can print", ap.canPrint()}, + new Object[]{4, "can modify", ap.canModify()}, + new Object[]{5, "can extract content", ap.canExtractContent()}, + new Object[]{6, "can modify annotations", ap.canModifyAnnotations()}, + new Object[]{9, "can fill in form fields", ap.canFillInForm()}, + new Object[]{10, "can extract for accessibility", ap.canExtractForAccessibility()}, + new Object[]{11, "can assemble document", ap.canAssembleDocument()}, + new Object[]{12, "can print degraded", ap.canPrintDegraded()}, + }; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FieldFlag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FieldFlag.java new file mode 100644 index 00000000000..c835308331f --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FieldFlag.java @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * @author Khyrul Bashar + * A class that provides field flag bits. + */ +class FieldFlag extends Flag +{ + private final COSDictionary dictionary; + + /** + * Constructor + * @param dictionary COSDictionary instance + */ + FieldFlag(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + @Override + String getFlagType() + { + COSName fieldType = dictionary.getCOSName(COSName.FT); + if (COSName.TX.equals(fieldType)) + { + return "Text field flag"; + } + else if (COSName.BTN.equals(fieldType)) + { + return "Button field flag"; + } + else if (COSName.CH.equals(fieldType)) + { + return "Choice field flag"; + } + return null; + } + + @Override + String getFlagValue() + { + return "Flag value: " + dictionary.getInt(COSName.FF); + } + + @Override + Object[][] getFlagBits() + { + int flagValue = dictionary.getInt(COSName.FF); + COSName fieldType = dictionary.getCOSName(COSName.FT); + + if (COSName.TX.equals(fieldType)) + { + return getTextFieldFlagBits(flagValue); + } + else if (COSName.BTN.equals(fieldType)) + { + return getButtonFieldFlagBits(flagValue); + } + else if (COSName.CH.equals(fieldType)) + { + return getChoiceFieldFlagBits(flagValue); + } + return null; + } + + private Object[][] getTextFieldFlagBits(final int flagValue) + { + return new Object[][]{ + new Object[]{1, "ReadOnly", isFlagBitSet(flagValue, 1)}, + new Object[]{2, "Required", isFlagBitSet(flagValue, 2)}, + new Object[]{3, "NoExport", isFlagBitSet(flagValue, 3)}, + new Object[]{13, "Multiline", isFlagBitSet(flagValue, 13)}, + new Object[]{14, "Password", isFlagBitSet(flagValue, 14)}, + new Object[]{21, "FileSelect", isFlagBitSet(flagValue, 21)}, + new Object[]{23, "DoNotSpellCheck", isFlagBitSet(flagValue, 23)}, + new Object[]{24, "DoNotScroll", isFlagBitSet(flagValue, 24)}, + new Object[]{25, "Comb", isFlagBitSet(flagValue, 25)}, + new Object[]{26, "RichText", isFlagBitSet(flagValue, 26)} + }; + } + + private Object[][] getButtonFieldFlagBits(final int flagValue) + { + return new Object[][]{ + new Object[]{1, "ReadOnly", isFlagBitSet(flagValue, 1)}, + new Object[]{2, "Required", isFlagBitSet(flagValue, 2)}, + new Object[]{3, "NoExport", isFlagBitSet(flagValue, 3)}, + new Object[]{15, "NoToggleToOff", isFlagBitSet(flagValue, 15)}, + new Object[]{16, "Radio", isFlagBitSet(flagValue, 16)}, + new Object[]{17, "Pushbutton", isFlagBitSet(flagValue, 17)}, + new Object[]{26, "RadiosInUnison", isFlagBitSet(flagValue, 26)} + }; + } + + private Object[][] getChoiceFieldFlagBits(final int flagValue) + { + return new Object[][]{ + new Object[]{1, "ReadOnly", isFlagBitSet(flagValue, 1)}, + new Object[]{2, "Required", isFlagBitSet(flagValue, 2)}, + new Object[]{3, "NoExport", isFlagBitSet(flagValue, 3)}, + new Object[]{18, "Combo", isFlagBitSet(flagValue, 18)}, + new Object[]{19, "Edit", isFlagBitSet(flagValue, 19)}, + new Object[]{20, "Sort", isFlagBitSet(flagValue, 20)}, + new Object[]{22, "MultiSelect", isFlagBitSet(flagValue, 22)}, + new Object[]{23, "DoNotSpellCheck", isFlagBitSet(flagValue, 23)}, + new Object[]{27, "CommitOnSelChange", isFlagBitSet(flagValue, 27)} + }; + } + + /** + * Check the corresponding flag bit if set or not + * @param flagValue the flag integer + * @param bitPosition bit position to check + * @return if set return true else false + */ + private Boolean isFlagBitSet(int flagValue, int bitPosition) + { + int binaryFormat = 1 << (bitPosition - 1); + return (flagValue & binaryFormat) == binaryFormat; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/Flag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/Flag.java new file mode 100644 index 00000000000..914cad25cac --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/Flag.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +/** + * @author Khyrul Bashar + * + * An abstract class that provides Flag bits. + */ +abstract class Flag +{ + abstract String getFlagType(); + abstract String getFlagValue(); + abstract Object[][] getFlagBits(); + String[] getColumnNames() + { + return new String[] {"Bit Position", "Name", "Set"}; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FlagBitsPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FlagBitsPane.java new file mode 100644 index 00000000000..42279080a4a --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FlagBitsPane.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import javax.swing.JPanel; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; + +/** + * @author Khyrul Bashar + * + * A class that displays flag bits in a table in detail. + */ +public class FlagBitsPane +{ + private FlagBitsPaneView view; + private final PDDocument document; + + /** + * Constructor. + * @param dictionary COSDictionary instance. + * @param flagType COSName instance. + */ + public FlagBitsPane(PDDocument document, final COSDictionary dictionary, COSName flagType) + { + this.document = document; + createPane(dictionary, flagType); + } + + private void createPane(final COSDictionary dictionary, final COSName flagType) + { + Flag flag; + if (COSName.FLAGS.equals(flagType)) + { + flag = new FontFlag(dictionary); + view = new FlagBitsPaneView( + flag.getFlagType(), flag.getFlagValue(), flag.getFlagBits(), flag.getColumnNames()); + } + + if (COSName.F.equals(flagType)) + { + flag = new AnnotFlag(dictionary); + view = new FlagBitsPaneView( + flag.getFlagType(), flag.getFlagValue(), flag.getFlagBits(), flag.getColumnNames()); + } + + if (COSName.FF.equals(flagType)) + { + flag = new FieldFlag(dictionary); + view = new FlagBitsPaneView( + flag.getFlagType(), flag.getFlagValue(), flag.getFlagBits(), flag.getColumnNames()); + } + + if (COSName.PANOSE.equals(flagType)) + { + flag = new PanoseFlag(dictionary); + view = new FlagBitsPaneView( + flag.getFlagType(), flag.getFlagValue(), flag.getFlagBits(), flag.getColumnNames()); + } + + if (COSName.P.equals(flagType)) + { + flag = new EncryptFlag(dictionary); + view = new FlagBitsPaneView( + flag.getFlagType(), flag.getFlagValue(), flag.getFlagBits(), flag.getColumnNames()); + } + if (COSName.SIG_FLAGS.equals(flagType)) + { + flag = new SigFlag(document, dictionary); + view = new FlagBitsPaneView( + flag.getFlagType(), flag.getFlagValue(), flag.getFlagBits(), flag.getColumnNames()); + } + } + + /** + * Returns the Pane itself + * @return JPanel instance + */ + public JPanel getPane() + { + return view.getPanel(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FlagBitsPaneView.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FlagBitsPaneView.java new file mode 100644 index 00000000000..6d9b69c01b9 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FlagBitsPaneView.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import javax.swing.Box; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; + +/** + * @author Khyrul Bashar + * + * A class that create the necessary UI for showing Flag bits. + */ +class FlagBitsPaneView +{ + final private JPanel panel; + final private String flagHeader; + final private String flagValue; + final private Object[][] tableData; + final private String[] columnNames; + + /** + * Constructor + * @param flagHeader String instance. Flag type. + * @param flagValue String instance. Flag integer value. + * @param tableRowData Object 2d array for table row data. + * @param columnNames String array for column names. + */ + FlagBitsPaneView(String flagHeader, String flagValue, Object[][] tableRowData, String[] columnNames) + { + this.flagHeader = flagHeader; + this.flagValue = flagValue; + this.tableData = tableRowData; + this.columnNames = columnNames; + panel = new JPanel(); + + if (flagValue != null && tableData != null) + { + createView(); + } + } + + private void createView() + { + panel.setLayout(new GridBagLayout()); + panel.setPreferredSize(new Dimension(300, 500)); + + JLabel flagLabel = new JLabel(flagHeader); + flagLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + flagLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 30)); + JPanel flagLabelPanel = new JPanel(); + flagLabelPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + flagLabelPanel.add(flagLabel); + + JLabel flagValueLabel = new JLabel(flagValue); + flagValueLabel.setAlignmentX(Component.LEFT_ALIGNMENT); + flagValueLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20)); + + JTable table = new JTable(tableData, columnNames); + JScrollPane scrollPane = new JScrollPane(table); + table.setFillsViewportHeight(true); + scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT); + + Box box = Box.createVerticalBox(); + box.add(flagValueLabel); + box.add(scrollPane); + box.setAlignmentX(Component.LEFT_ALIGNMENT); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weighty = 0.05; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.anchor = GridBagConstraints.PAGE_START; + + panel.add(flagLabelPanel, gbc); + + gbc.gridy = 2; + gbc.weighty = 0.9; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + gbc.anchor = GridBagConstraints.BELOW_BASELINE; + + panel.add(box, gbc); + } + + /** + * Returns the view. + * @return JPanel instance. + */ + JPanel getPanel() + { + return panel; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FontFlag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FontFlag.java new file mode 100644 index 00000000000..8013271b685 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/FontFlag.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.font.PDFontDescriptor; + +/** + * @author Khyrul Bashar + * + * A class that provides Font flag bits. + */ +public class FontFlag extends Flag +{ + private final COSDictionary fontDescriptor; + + /** + * Constructor + * @param fontDescDictionary COSDictionary instance. + */ + FontFlag(COSDictionary fontDescDictionary) + { + fontDescriptor = fontDescDictionary; + } + + @Override + String getFlagType() + { + return "Font flag"; + } + + @Override + String getFlagValue() + { + return "Flag value:" + fontDescriptor.getInt(COSName.FLAGS); + } + + @Override + Object[][] getFlagBits() + { + PDFontDescriptor fontDesc = new PDFontDescriptor(fontDescriptor); + return new Object[][]{ + new Object[]{1, "FixedPitch", fontDesc.isFixedPitch()}, + new Object[]{2, "Serif", fontDesc.isSerif()}, + new Object[]{3, "Symbolic", fontDesc.isSymbolic()}, + new Object[]{4, "Script", fontDesc.isScript()}, + new Object[]{6, "NonSymbolic", fontDesc.isNonSymbolic()}, + new Object[]{7, "Italic", fontDesc.isItalic()}, + new Object[]{17, "AllCap", fontDesc.isAllCap()}, + new Object[]{18, "SmallCap", fontDesc.isSmallCap()}, + new Object[]{19, "ForceBold", fontDesc.isForceBold()} + }; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java new file mode 100644 index 00000000000..ffb24e9f058 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java @@ -0,0 +1,267 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.font.PDPanose; +import org.apache.pdfbox.pdmodel.font.PDPanoseClassification; + +/** + * @author Khyrul Bashar + * A class that provide Panose classification data + */ +public class PanoseFlag extends Flag +{ + + private final byte[] bytes; + private final COSString byteValue; + + /** + * Constructor. + * @param dictionary COSDictionary instance. style dictionary that contains panose object. + */ + public PanoseFlag(COSDictionary dictionary) + { + byteValue = (COSString)dictionary.getDictionaryObject(COSName.PANOSE); + bytes = getPanoseBytes(dictionary); + } + + + @Override + String getFlagType() + { + return "Panose classification"; + } + + @Override + String getFlagValue() + { + return "Panose byte :" + byteValue.toHexString(); + } + + @Override + Object[][] getFlagBits() + { + PDPanoseClassification pc = new PDPanose(bytes).getPanose(); + return new Object[][]{ + {2, "Family Kind", pc.getFamilyKind(), getFamilyKindValue(pc.getFamilyKind())}, + {3, "Serif Style", pc.getSerifStyle(), getSerifStyleValue(pc.getSerifStyle())}, + {4, "Weight", pc.getWeight(), getWeightValue(pc.getWeight())}, + {5, "Proportion", pc.getProportion(), getProportionValue(pc.getProportion())}, + {6, "Contrast", pc.getContrast(), getContrastValue(pc.getContrast())}, + {7, "Stroke Variation", pc.getStrokeVariation(), getStrokeVariationValue(pc.getStrokeVariation())}, + {8, "Arm Style", pc.getArmStyle(), getArmStyleValue(pc.getArmStyle())}, + {9, "Letterform", pc.getLetterform(), getLetterformValue(pc.getLetterform())}, + {10, "Midline", pc.getMidline(), getMidlineValue(pc.getMidline())}, + {11, "X-height", pc.getXHeight(), getXHeightValue(pc.getXHeight())}, + }; + } + + @Override + String[] getColumnNames() + { + return new String[] {"Byte Position", "Name", "Byte Value", "Value"}; + } + + private String getFamilyKindValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Latin Text", + "Latin Hand Written", + "Latin Decorative", + "Latin Symbol" + }[index]; + } + + private String getSerifStyleValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Cove", + "Obtuse Cove", + "Square Cove", + "Obtuse Square Cove", + "Square", + "Thin", + "Oval", + "Exaggerated", + "Triangle", + "Normal Sans", + "Obtuse Sans", + "Perpendicular Sans", + "Flared", + "Rounded" + }[index]; + } + + private String getWeightValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Very Light", + "Light", + "Thin", + "Book", + "Medium", + "Demi", + "Bold", + "Heavy", + "Black", + "Extra Black" + }[index]; + } + + private String getProportionValue(int index) + { + return new String[]{ + "Any", + "No fit", + "Old Style", + "Modern", + "Even Width", + "Extended", + "Condensed", + "Very Extended", + "Very Condensed", + "Monospaced" + }[index]; + } + + private String getContrastValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "None", + "Very Low", + "Low", + "Medium Low", + "Medium", + "Medium High", + "High", + "Very High" + }[index]; + } + + private String getStrokeVariationValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "No Variation", + "Gradual/Diagonal", + "Gradual/Transitional", + "Gradual/Vertical", + "Gradual/Horizontal", + "Rapid/Vertical", + "Rapid/Horizontal", + "Instant/Vertical", + "Instant/Horizontal", + }[index]; + } + + private String getArmStyleValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Straight Arms/Horizontal", + "Straight Arms/Wedge", + "Straight Arms/Vertical", + "Straight Arms/Single Serif", + "Straight Arms/Double Serif", + "Non-Straight/Horizontal", + "Non-Straight/Wedge", + "Non-Straight/Vertical", + "Non-Straight/Single Serif", + "Non-Straight/Double Serif", + }[index]; + } + + private String getLetterformValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Normal/Contact", + "Normal/Weighted", + "Normal/Boxed", + "Normal/Flattened", + "Normal/Rounded", + "Normal/Off Center", + "Normal/Square", + "Oblique/Contact", + "Oblique/Weighted", + "Oblique/Boxed", + "Oblique/Flattened", + "Oblique/Rounded", + "Oblique/Off Center", + "Oblique/Square", + }[index]; + } + + private String getMidlineValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Standard/Trimmed", + "Standard/Pointed", + "Standard/Serifed", + "High/Trimmed", + "High/Pointed", + "High/Serifed", + "Constant/Trimmed", + "Constant/Pointed", + "Constant/Serifed", + "Low/Trimmed", + "Low/Pointed", + "Low/Serifed" + }[index]; + } + + private String getXHeightValue(int index) + { + return new String[]{ + "Any", + "No Fit", + "Constant/Small", + "Constant/Standard", + "Constant/Large", + "Ducking/Small", + "Ducking/Standard", + "Ducking/Large", + }[index]; + } + + public final byte[] getPanoseBytes(COSDictionary style) + { + if (style != null) + { + COSString panose = (COSString)style.getDictionaryObject(COSName.PANOSE); + return panose.getBytes(); + } + return null; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/SigFlag.java b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/SigFlag.java new file mode 100644 index 00000000000..4df39c81945 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/SigFlag.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.flagbitspane; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; + +/** + * @author Tilman Hausherr + * + * A class that provides signature flag bits. + */ +public class SigFlag extends Flag +{ + private final PDDocument document; + private final COSDictionary acroFormDictionary; + + /** + * Constructor + * + * @param acroFormDictionary COSDictionary instance. + */ + SigFlag(PDDocument document, COSDictionary acroFormDictionary) + { + this.document = document; + this.acroFormDictionary = acroFormDictionary; + } + + @Override + String getFlagType() + { + return "Signature flag"; + } + + @Override + String getFlagValue() + { + return "Flag value: " + acroFormDictionary.getInt(COSName.SIG_FLAGS); + } + + @Override + Object[][] getFlagBits() + { + PDAcroForm acroForm = new PDAcroForm(document, acroFormDictionary); + return new Object[][]{ + new Object[]{1, "SignaturesExist", acroForm.isSignaturesExist()}, + new Object[]{2, "AppendOnly", acroForm.isAppendOnly()}, + }; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingPaneController.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingPaneController.java new file mode 100644 index 00000000000..2be1f68d225 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingPaneController.java @@ -0,0 +1,115 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.fontencodingpane; + +import java.awt.geom.GeneralPath; +import java.awt.geom.Rectangle2D; +import java.io.IOException; +import javax.swing.JPanel; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDSimpleFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDType3Font; + +abstract class FontPane +{ + abstract JPanel getPanel(); + + /** + * Calculate vertical bounds common to all rendered glyphs. + * + * @param tableData + * @param glyphIndex the table index that has glyphs. + * @return an array with two elements: min lower bound (but max 0), and max upper bound (but min + * 0). + */ + double[] getYBounds(Object[][] tableData, int glyphIndex) + { + double minY = 0; + double maxY = 0; + for (Object[] aTableData : tableData) + { + GeneralPath path = (GeneralPath) aTableData[glyphIndex]; + Rectangle2D bounds2D = path.getBounds2D(); + if (bounds2D.isEmpty()) + { + continue; + } + minY = Math.min(minY, bounds2D.getMinY()); + maxY = Math.max(maxY, bounds2D.getMaxY()); + } + return new double[]{minY, maxY}; + } +} + +/** + * @author Khyrul Bashar + * + * A class that shows the glyph table or CIDToGID map depending on the font type. PDSimple and + * PDType0Font are supported. + */ +public class FontEncodingPaneController +{ + private FontPane fontPane; + + /** + * Constructor. + * @param fontName COSName instance, Font name in the fonts dictionary. + * @param dictionary COSDictionary instance for resources which resides the font. + */ + public FontEncodingPaneController(COSName fontName, COSDictionary dictionary) + { + PDResources resources = new PDResources(dictionary); + try + { + PDFont font = resources.getFont(fontName); + if (font instanceof PDType3Font) + { + fontPane = new Type3Font((PDType3Font) font, resources); + } + else if (font instanceof PDSimpleFont) + { + fontPane = new SimpleFont((PDSimpleFont) font); + } + else if (font instanceof PDType0Font) + { + fontPane = new Type0Font(((PDType0Font) font).getDescendantFont(), (PDType0Font) font); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + /** + * Return a pane to display details of a font. + * + * @return a pane for font information, or null if that font type is not supported. + */ + public JPanel getPane() + { + if (fontPane != null) + { + return fontPane.getPanel(); + } + return null; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java new file mode 100644 index 00000000000..21b7e849865 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java @@ -0,0 +1,253 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.fontencodingpane; + +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.SwingConstants; +import javax.swing.table.TableCellRenderer; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.GraphicsEnvironment; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.Iterator; +import java.util.Map; +import org.apache.pdfbox.debugger.PDFDebugger; +import org.apache.pdfbox.debugger.ui.HighResolutionImageIcon; + +/** + * @author Khyrul Bashar + * @author Tilman Hausherr + * A class that creates the UI for font encoding pane. + */ +class FontEncodingView +{ + private JPanel panel; + + private static final AffineTransform DEFAULT_TRANSFORM = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform(); + + /** + * Constructor. + * @param tableData Object[][] instance as table data. + * @param headerAttributes Map instance which contains info for showing in header + * panel. Here keys will be info type. + * @param columnNames String array containing the columns name. + * @param yBounds min low and max high bound of all glyphs. + */ + FontEncodingView(Object[][] tableData, Map headerAttributes, String[] columnNames, double[] yBounds) + { + createView(getHeaderPanel(headerAttributes), getTable(tableData, columnNames, yBounds)); + } + + private void createView(JPanel headerPanel, JTable table) + { + panel = new JPanel(new GridBagLayout()); + panel.setPreferredSize(new Dimension(300, 500)); + + JScrollPane scrollPane = new JScrollPane(table); + table.setFillsViewportHeight(true); + scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weighty = 0.05; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.anchor = GridBagConstraints.PAGE_START; + + panel.add(headerPanel, gbc); + + gbc.gridy = 2; + gbc.weighty = 0.9; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + gbc.anchor = GridBagConstraints.BELOW_BASELINE; + + panel.add(scrollPane, gbc); + } + + private JTable getTable(Object[][] tableData, String[] columnNames, double[] yBounds) + { + JTable table = new JTable(tableData, columnNames); + table.setRowHeight(40); + table.setDefaultRenderer(Object.class, new GlyphCellRenderer(yBounds)); + return table; + } + + private JPanel getHeaderPanel(Map attributes) + { + JPanel headerPanel = new JPanel(new GridBagLayout()); + headerPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0)); + + if (attributes != null) + { + Iterator keys = attributes.keySet().iterator(); + int row = 0; + while (keys.hasNext()) + { + int fontSize = Integer.parseInt(PDFDebugger.configuration.getProperty( + "headerFontSize", "" + headerPanel.getFont().getSize())); + String key = keys.next(); + JLabel encodingNameLabel = new JLabel(key + ": " + attributes.get(key)); + encodingNameLabel.setFont(new Font(Font.DIALOG, Font.PLAIN, fontSize)); + encodingNameLabel.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = row++; + gbc.weighty = 0.1; + gbc.anchor = GridBagConstraints.LINE_START; + + headerPanel.add(encodingNameLabel, gbc); + } + } + return headerPanel; + } + + JPanel getPanel() + { + return panel; + } + + private static final class GlyphCellRenderer implements TableCellRenderer + { + private final double[] yBounds; + + private GlyphCellRenderer(double[] yBounds) + { + this.yBounds = yBounds; + } + + @Override + public Component getTableCellRendererComponent(JTable jTable, Object o, boolean b, boolean b1, int row, int col) + { + if (o instanceof GeneralPath) + { + GeneralPath path = (GeneralPath) o; + Rectangle2D bounds2D = path.getBounds2D(); + if (bounds2D.isEmpty()) + { + JLabel label = new JLabel(SimpleFont.NO_GLYPH, SwingConstants.CENTER); + int fontSize = Integer.parseInt(PDFDebugger.configuration.getProperty( + "encodingFontSize", "" + label.getFont().getSize())); + label.setFont(new Font(Font.DIALOG, Font.PLAIN, fontSize)); + label.setForeground(Color.GRAY); + return label; + } + Rectangle cellRect = jTable.getCellRect(row, col, false); + BufferedImage bim = renderGlyph(path, bounds2D, cellRect); + return new JLabel(new HighResolutionImageIcon( + bim, + (int) Math.ceil(bim.getWidth() / DEFAULT_TRANSFORM.getScaleX()), + (int) Math.ceil(bim.getHeight() / DEFAULT_TRANSFORM.getScaleY())), + SwingConstants.CENTER); + } + if (o instanceof BufferedImage) + { + Rectangle cellRect = jTable.getCellRect(row, col, false); + BufferedImage glyphImage = (BufferedImage) o; + BufferedImage cellImage = new BufferedImage( + (int) (cellRect.getWidth() * DEFAULT_TRANSFORM.getScaleX()), + (int) (cellRect.getHeight() * DEFAULT_TRANSFORM.getScaleY()), + BufferedImage.TYPE_INT_RGB); + Graphics2D g = (Graphics2D) cellImage.getGraphics(); + g.setBackground(Color.white); + g.clearRect(0, 0, cellImage.getWidth(), cellImage.getHeight()); + + double scale = 1 / (glyphImage.getHeight() / cellRect.getHeight()); + + // horizontal center + g.translate((cellRect.getWidth() - glyphImage.getWidth() * scale) / 2 * DEFAULT_TRANSFORM.getScaleX(), 0); + + // scale from the glyph to the cell + g.scale(scale * DEFAULT_TRANSFORM.getScaleX(), scale * DEFAULT_TRANSFORM.getScaleY()); + + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.drawImage(glyphImage, 0, 0, null); + g.dispose(); + return new JLabel(new HighResolutionImageIcon( + cellImage, + (int) Math.ceil(cellImage.getWidth() / DEFAULT_TRANSFORM.getScaleX()), + (int) Math.ceil(cellImage.getHeight() / DEFAULT_TRANSFORM.getScaleY()))); + } + if (o != null) + { + JLabel label = new JLabel(o.toString(), SwingConstants.CENTER); + int fontSize = Integer.parseInt(PDFDebugger.configuration.getProperty( + "encodingFontSize", "" + label.getFont().getSize())); + label.setFont(new Font(Font.DIALOG, Font.PLAIN, fontSize)); + if (SimpleFont.NO_GLYPH.equals(o) || ".notdef".equals(o)) + { + label.setText(o.toString()); + label.setForeground(Color.GRAY); + } + return label; + } + return new JLabel(); + } + + private BufferedImage renderGlyph(GeneralPath path, Rectangle2D bounds2D, Rectangle cellRect) + { + BufferedImage bim = new BufferedImage( + (int) (cellRect.getWidth() * DEFAULT_TRANSFORM.getScaleX()), + (int) (cellRect.getHeight() * DEFAULT_TRANSFORM.getScaleY()), + BufferedImage.TYPE_INT_RGB); + Graphics2D g = (Graphics2D) bim.getGraphics(); + g.setBackground(Color.white); + g.clearRect(0, 0, bim.getWidth(), bim.getHeight()); + + double scale = 1 / ((yBounds[1] - yBounds[0]) / cellRect.getHeight()); + + // flip + g.scale(1, -1); + g.translate(0, -bim.getHeight()); + + // horizontal center + g.translate((cellRect.getWidth() - bounds2D.getWidth() * scale) / 2 * DEFAULT_TRANSFORM.getScaleX(), 0); + + // scale from the glyph to the cell + g.scale(scale * DEFAULT_TRANSFORM.getScaleX(), scale * DEFAULT_TRANSFORM.getScaleY()); + + // Adjust for negative y min bound + g.translate(0, -yBounds[0]); + + g.setColor(Color.black); + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.fill(path); + g.dispose(); + return bim; + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java new file mode 100644 index 00000000000..02f568bf4d0 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java @@ -0,0 +1,101 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.fontencodingpane; + +import org.apache.pdfbox.pdmodel.font.PDSimpleFont; +import org.apache.pdfbox.pdmodel.font.PDVectorFont; + +import javax.swing.JPanel; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author Khyrul Bashar + * A class that shows the glyph table along with unicode characters for SimpleFont. + */ +class SimpleFont extends FontPane +{ + public static final String NO_GLYPH = "None"; + private final FontEncodingView view; + private int totalAvailableGlyph = 0; + + /** + * Constructor. + * @param font PDSimpleFont instance. + * @throws IOException If fails to parse unicode characters. + */ + SimpleFont(PDSimpleFont font) throws IOException + { + Object[][] tableData = getGlyphs(font); + + double[] yBounds = getYBounds(tableData, 3); + + Map attributes = new LinkedHashMap<>(); + attributes.put("Font", font.getName()); + attributes.put("Encoding", getEncodingName(font)); + attributes.put("Glyphs", Integer.toString(totalAvailableGlyph)); + attributes.put("Standard 14", Boolean.toString(font.isStandard14())); + + view = new FontEncodingView(tableData, attributes, + new String[] {"Code", "Glyph Name", "Unicode Character", "Glyph"}, yBounds); + } + + private Object[][] getGlyphs(PDSimpleFont font) throws IOException + { + Object[][] glyphs = new Object[256][4]; + + for (int index = 0; index <= 255; index++) + { + glyphs[index][0] = index; + if (font.getEncoding().contains(index)) + { + String glyphName = font.getEncoding().getName(index); + glyphs[index][1] = glyphName; + glyphs[index][2] = font.toUnicode(index); + if (font instanceof PDVectorFont) + { + // using names didn't work with the file from PDFBOX-3445 + glyphs[index][3] = ((PDVectorFont) font).getPath(index); + } + else + { + glyphs[index][3] = font.getPath(glyphName); + } + totalAvailableGlyph++; + } + else + { + glyphs[index][1] = NO_GLYPH; + glyphs[index][2] = NO_GLYPH; + glyphs[index][3] = font.getPath(".notdef"); + } + } + return glyphs; + } + + private String getEncodingName(PDSimpleFont font) + { + return font.getEncoding().getClass().getSimpleName(); + } + + @Override + public JPanel getPanel() + { + return view.getPanel(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java new file mode 100644 index 00000000000..1952f58ab82 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java @@ -0,0 +1,158 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.fontencodingpane; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.font.PDCIDFont; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; + +import javax.swing.JPanel; +import java.awt.Dimension; +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author Khyrul Bashar + * A class that shows the CIDToGID table along with unicode characters for Type0Fonts when descendent + * font is of type PDCIDFontType2. + */ +class Type0Font extends FontPane +{ + public static final String NO_GLYPH = "No glyph"; + private final FontEncodingView view; + private int totalAvailableGlyph = 0; + + /** + * Constructor. + * @param descendantFont PDCIDFontType2 instance. + * @param parentFont PDFont instance. + * @throws IOException If fails to parse cidtogid map. + */ + Type0Font(PDCIDFont descendantFont, PDType0Font parentFont) throws IOException + { + Object[][] cidtogid = readCIDToGIDMap(descendantFont, parentFont); + if (cidtogid != null) + { + Map attributes = new LinkedHashMap<>(); + attributes.put("Font", descendantFont.getName()); + attributes.put("CIDs", Integer.toString(cidtogid.length)); + + view = new FontEncodingView(cidtogid, attributes, + new String[]{"CID", "GID", "Unicode Character", "Glyph"}, getYBounds(cidtogid, 3)); + } + else + { + Object[][] tab = readMap(descendantFont, parentFont); + Map attributes = new LinkedHashMap<>(); + attributes.put("Font", descendantFont.getName()); + attributes.put("CIDs", Integer.toString(tab.length)); + attributes.put("Glyphs", Integer.toString(totalAvailableGlyph)); + attributes.put("Standard 14", Boolean.toString(parentFont.isStandard14())); + + view = new FontEncodingView(tab, attributes, + new String[]{"Code", "CID", "GID", "Unicode Character", "Glyph"}, getYBounds(tab, 4)); + } + } + + private Object[][] readMap(PDCIDFont descendantFont, PDType0Font parentFont) throws IOException + { + int codes = 0; + for (int code = 0; code < 65535; ++code) + { + if (descendantFont.hasGlyph(code)) + { + ++codes; + } + } + Object[][] tab = new Object[codes][5]; + int index = 0; + for (int code = 0; code < 65535; ++code) + { + if (descendantFont.hasGlyph(code)) + { + tab[index][0] = code; + tab[index][1] = descendantFont.codeToCID(code); + tab[index][2] = descendantFont.codeToGID(code); + tab[index][3] = parentFont.toUnicode(code); + GeneralPath path = descendantFont.getPath(code); + tab[index][4] = path; + if (!path.getBounds2D().isEmpty()) + { + ++totalAvailableGlyph; + } + ++index; + } + } + return tab; + } + + private Object[][] readCIDToGIDMap(PDCIDFont font, PDFont parentFont) throws IOException + { + Object[][] cid2gid = null; + COSDictionary dict = font.getCOSObject(); + COSBase map = dict.getDictionaryObject(COSName.CID_TO_GID_MAP); + if (map instanceof COSStream) + { + COSStream stream = (COSStream) map; + + InputStream is = stream.createInputStream(); + byte[] mapAsBytes = IOUtils.toByteArray(is); + IOUtils.closeQuietly(is); + int numberOfInts = mapAsBytes.length / 2; + cid2gid = new Object[numberOfInts][4]; + int offset = 0; + for (int index = 0; index < numberOfInts; index++) + { + int gid = (mapAsBytes[offset] & 0xff) << 8 | mapAsBytes[offset + 1] & 0xff; + cid2gid[index][0] = index; + cid2gid[index][1] = gid; + if (gid != 0 && parentFont.toUnicode(index) != null) + { + cid2gid[index][2] = parentFont.toUnicode(index); + } + GeneralPath path = font.getPath(index); + cid2gid[index][3] = path; + if (!path.getBounds2D().isEmpty()) + { + ++totalAvailableGlyph; + } + offset += 2; + } + } + return cid2gid; + } + + @Override + public JPanel getPanel() + { + if (view != null) + { + return view.getPanel(); + } + JPanel panel = new JPanel(); + panel.setPreferredSize(new Dimension(300, 500)); + return panel; + } +} \ No newline at end of file diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type3Font.java b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type3Font.java new file mode 100644 index 00000000000..bde0822c02f --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type3Font.java @@ -0,0 +1,204 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.fontencodingpane; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.swing.JPanel; + +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDSimpleFont; +import org.apache.pdfbox.pdmodel.font.PDType3CharProc; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Matrix; + +/** + * @author Khyrul Bashar + * @author Tilman Hausherr + * + * A class that shows the glyph table along with unicode characters for PDType3Font. + */ +class Type3Font extends FontPane +{ + public static final String NO_GLYPH = "No glyph"; + private final FontEncodingView view; + private int totalAvailableGlyph = 0; + private PDRectangle fontBBox; + private final PDResources resources; + + /** + * Constructor. + * @param font PDSimpleFont instance. + * @throws IOException If fails to parse unicode characters. + */ + Type3Font(PDType3Font font, PDResources resources) throws IOException + { + this.resources = resources; + + calcBBox(font); + + Object[][] tableData = getGlyphs(font); + + Map attributes = new LinkedHashMap<>(); + attributes.put("Font", font.getName()); + attributes.put("Encoding", getEncodingName(font)); + attributes.put("Glyphs", Integer.toString(totalAvailableGlyph)); + + view = new FontEncodingView(tableData, attributes, + new String[] {"Code", "Glyph Name", "Unicode Character", "Glyph"}, null); + } + + private void calcBBox(PDType3Font font) throws IOException + { + double minX = 0; + double maxX = 0; + double minY = 0; + double maxY = 0; + for (int index = 0; index <= 255; ++index) + { + PDType3CharProc charProc = font.getCharProc(index); + if (charProc == null) + { + continue; + } + PDRectangle glyphBBox = charProc.getGlyphBBox(); + if (glyphBBox == null) + { + continue; + } + minX = Math.min(minX, glyphBBox.getLowerLeftX()); + maxX = Math.max(maxX, glyphBBox.getUpperRightX()); + minY = Math.min(minY, glyphBBox.getLowerLeftY()); + maxY = Math.max(maxY, glyphBBox.getUpperRightY()); + } + fontBBox = new PDRectangle((float) minX, (float) minY, (float) (maxX - minX), (float) (maxY - minY)); + if (fontBBox.getWidth() <= 0 || fontBBox.getHeight() <= 0) + { + // less reliable, but good as a fallback solution for PDF.js issue 10717 + BoundingBox boundingBox = font.getBoundingBox(); + fontBBox = new PDRectangle(boundingBox.getLowerLeftX(), + boundingBox.getLowerLeftY(), + boundingBox.getWidth(), + boundingBox.getHeight()); + } + } + + private Object[][] getGlyphs(PDType3Font font) throws IOException + { + boolean isEmpty = fontBBox.toGeneralPath().getBounds2D().isEmpty(); + Object[][] glyphs = new Object[256][4]; + + // map needed to lessen memory footprint for files with duplicates + // e.g. PDF.js issue 10717 + Map map = new HashMap<>(); + + for (int index = 0; index <= 255; index++) + { + glyphs[index][0] = index; + if (font.getEncoding().contains(index)) + { + String name = font.getEncoding().getName(index); + glyphs[index][1] = name; + glyphs[index][2] = font.toUnicode(index); + if (isEmpty) + { + glyphs[index][3] = NO_GLYPH; + } + else if (map.containsKey(name)) + { + glyphs[index][3] = map.get(name); + } + else + { + BufferedImage image = renderType3Glyph(font, index); + map.put(name, image); + glyphs[index][3] = image; + } + totalAvailableGlyph++; + } + else + { + glyphs[index][1] = NO_GLYPH; + glyphs[index][2] = NO_GLYPH; + glyphs[index][3] = NO_GLYPH; + } + } + return glyphs; + } + + // Kindof an overkill to create a PDF for one glyph, but there is no better way at this time. + // Isn't called if no bounds are available + private BufferedImage renderType3Glyph(PDType3Font font, int index) throws IOException + { + try (PDDocument doc = new PDDocument()) + { + int scale = 1; + if (fontBBox.getWidth() < 72 || fontBBox.getHeight() < 72) + { + // e.g. T4 font of PDFBOX-2959 + scale = (int) (72 / Math.min(fontBBox.getWidth(), fontBBox.getHeight())); + } + PDPage page = new PDPage(new PDRectangle(fontBBox.getWidth() * scale, fontBBox.getHeight() * scale)); + page.setResources(resources); + + try (PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.APPEND, false)) + { + // any changes here must be done carefully and each file must be tested again + // just inverting didn't work with + // https://www.treasury.gov/ofac/downloads/sdnlist.pdf (has rotated matrix) + // also test PDFBOX-4228-type3.pdf (identity matrix) + // Root/Pages/Kids/[0]/Resources/XObject/X1/Resources/XObject/X3/Resources/Font/F10 + // PDFBOX-1794-vattenfall.pdf (scale 0.001) + float scalingFactorX = font.getFontMatrix().getScalingFactorX(); + float scalingFactorY = font.getFontMatrix().getScalingFactorY(); + float translateX = scalingFactorX > 0 ? -fontBBox.getLowerLeftX() : fontBBox.getUpperRightX(); + float translateY = scalingFactorY > 0 ? -fontBBox.getLowerLeftY() : fontBBox.getUpperRightY(); + cs.transform(Matrix.getTranslateInstance(translateX * scale, translateY * scale)); + cs.beginText(); + cs.setFont(font, scale / Math.min(Math.abs(scalingFactorX), Math.abs(scalingFactorY))); + // can't use showText() because there's no guarantee we have the unicode + cs.appendRawCommands(String.format("<%02X> Tj\n", index).getBytes(Charsets.ISO_8859_1)); + cs.endText(); + } + doc.addPage(page); + // for debug you can save the PDF here + return new PDFRenderer(doc).renderImage(0); + } + } + + private String getEncodingName(PDSimpleFont font) + { + return font.getEncoding().getClass().getSimpleName(); + } + + @Override + public JPanel getPanel() + { + return view.getPanel(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/ASCIIPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/ASCIIPane.java new file mode 100644 index 00000000000..ce95f1bc616 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/ASCIIPane.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import javax.swing.JComponent; + +/** + * @author Khyrul Bashar + * + * This class shows corresponding ASCII characters for bytes. For every 16 byte there is one line. + * This paints the only visible contents at one time. + */ +class ASCIIPane extends JComponent implements HexModelChangeListener +{ + private final HexModel model; + private int selectedLine = -1; + private int selectedIndexInLine; + + /** + * Constructor. + * @param model HexModel instance. + */ + ASCIIPane(HexModel model) + { + this.model = model; + setPreferredSize(new Dimension(HexView.ASCII_PANE_WIDTH, HexView.CHAR_HEIGHT * (model.totalLine()+1))); + model.addHexModelChangeListener(this); + setFont(HexView.FONT); + } + + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + + Graphics2D g2d = (Graphics2D)g; + g2d.setRenderingHints(HexView.RENDERING_HINTS); + + Rectangle bound = getVisibleRect(); + + int x = HexView.LINE_INSET; + int y = bound.y; + + if (y == 0 || y%HexView.CHAR_HEIGHT != 0) + { + y += HexView.CHAR_HEIGHT - y%HexView.CHAR_HEIGHT; + } + int firstLine = y/HexView.CHAR_HEIGHT; + + for (int line = firstLine; line < firstLine + bound.getHeight()/HexView.CHAR_HEIGHT; line++) + { + if (line > model.totalLine()) + { + break; + } + if (line == selectedLine) + { + paintInSelected(g, x, y); + } + else + { + char[] chars = model.getLineChars(line); + g.drawChars(chars, 0, chars.length, x, y); + } + x = HexView.LINE_INSET; + y += HexView.CHAR_HEIGHT; + } + } + + /** + * Paint a selected line + * @param g Graphics instance. + * @param x int. x axis value. + * @param y int. y axis value. + */ + private void paintInSelected(Graphics g, int x, int y) + { + g.setFont(HexView.BOLD_FONT); + char[] content = model.getLineChars(selectedLine); + g.drawChars(content, 0, selectedIndexInLine - 0, x, y); + + g.setColor(HexView.SELECTED_COLOR); + x += g.getFontMetrics().charsWidth(content, 0, selectedIndexInLine-0); + g.drawChars(content, selectedIndexInLine, 1, x, y); + + g.setColor(Color.black); + x += g.getFontMetrics().charWidth(content[selectedIndexInLine]); + g.drawChars(content, selectedIndexInLine+1, (content.length-1)-selectedIndexInLine, x, y); + g.setFont(HexView.FONT); + } + + @Override + public void hexModelChanged(HexModelChangedEvent event) + { + repaint(); + } + + /** + * Updates the line text for a given index. It is used when a byte is + * selected in hex pane. + * @param index int. + */ + void setSelected(int index) + { + selectedLine = HexModel.lineNumber(index); + selectedIndexInLine = HexModel.elementIndexInLine(index); + repaint(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/AddressPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/AddressPane.java new file mode 100644 index 00000000000..c4a3becff65 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/AddressPane.java @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import javax.swing.JComponent; + +/** + * @author Khyrul Bashar + * + * This class shows the address of the currently selected byte. + */ +class AddressPane extends JComponent +{ + private final int totalLine; + private int selectedLine = -1; + private int selectedIndex = -1; + + /** + * Constructor. + * @param total int. Total line number needed to show all the bytes. + */ + AddressPane(int total) + { + totalLine = total; + setPreferredSize(new Dimension(HexView.ADDRESS_PANE_WIDTH, HexView.CHAR_HEIGHT * (totalLine+1))); + setFont(HexView.FONT); + } + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + + Graphics2D g2d = (Graphics2D)g; + g2d.setRenderingHints(HexView.RENDERING_HINTS); + + Rectangle bound = getVisibleRect(); + + int x = HexView.LINE_INSET; + int y = bound.y; + + if (y == 0 || y%HexView.CHAR_HEIGHT != 0) + { + y += HexView.CHAR_HEIGHT - y%HexView.CHAR_HEIGHT; + } + int firstLine = y/HexView.CHAR_HEIGHT; + + for (int line = firstLine; line < firstLine + bound.getHeight()/HexView.CHAR_HEIGHT; line++) + { + if (line > totalLine) + { + break; + } + if (line == selectedLine) + { + paintSelected(g, x, y); + } + else + { + g.drawString(String.format("%08X", (line - 1)*16), x, y); + } + x = HexView.LINE_INSET; + y += HexView.CHAR_HEIGHT; + } + } + + /** + * Paint a selected line + * @param g Graphics instance. + * @param x int. x axis value. + * @param y int. y axis value. + */ + private void paintSelected(Graphics g, int x, int y) + { + g.setColor(HexView.SELECTED_COLOR); + g.setFont(HexView.BOLD_FONT); + + g.drawString(String.format("%08X", selectedIndex), x, y); + + g.setColor(Color.black); + g.setFont(HexView.FONT); + } + + /** + * Updates the line text (index in hexadecimal) for a given index. It is used when a byte is + * selected in hex pane. + * @param index int. + */ + void setSelected(int index) + { + if (index != selectedIndex) + { + selectedLine = HexModel.lineNumber(index); + selectedIndex = index; + repaint(); + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexChangeListener.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexChangeListener.java new file mode 100644 index 00000000000..842b2d4db32 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexChangeListener.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +/** + * @author Khyrul Bashar + * + * This Interface is used to listen for the byte value changes. + */ +interface HexChangeListener +{ + void hexChanged(HexChangedEvent event); +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexChangedEvent.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexChangedEvent.java new file mode 100644 index 00000000000..2a3d4a085b5 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexChangedEvent.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +/** + * @author Khyrul Bashar + * + * This the event class for byte value changed from the Hex pane. + */ +class HexChangedEvent +{ + private final byte newValue; + private final int byteIndex; + + /** + * Constructor. + * @param newValue byte. The new byte value for the index. + * @param byteIndex int. Index for the changed byte. + */ + HexChangedEvent(byte newValue, int byteIndex) + { + this.newValue = newValue; + this.byteIndex = byteIndex; + } + + public byte getNewValue() + { + return newValue; + } + + public int getByteIndex() + { + return byteIndex; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexEditor.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexEditor.java new file mode 100644 index 00000000000..aa55394582d --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexEditor.java @@ -0,0 +1,226 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.text.NumberFormat; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.BoxLayout; +import javax.swing.JDialog; +import javax.swing.JFormattedTextField; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollBar; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import javax.swing.border.LineBorder; + +/** + * @author Khyrul Bashar + * + * This class hosts all the UI components of Hex view and coordinates among them. + */ +class HexEditor extends JPanel implements SelectionChangeListener +{ + private final HexModel model; + private HexPane hexPane; + private ASCIIPane asciiPane; + private AddressPane addressPane; + private StatusPane statusPane; + private final Action jumpToIndex; + + private int selectedIndex = -1; + + /** + * Constructor. + * @param model HexModel instance. + */ + HexEditor(HexModel model) + { + super(); + this.jumpToIndex = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + createJumpDialog().setVisible(true); + } + }; + this.model = model; + createView(); + } + + private void createView() + { + setLayout(new GridBagLayout()); + + addressPane = new AddressPane(model.totalLine()); + hexPane = new HexPane(model); + hexPane.addHexChangeListeners(model); + asciiPane = new ASCIIPane(model); + UpperPane upperPane = new UpperPane(); + statusPane = new StatusPane(); + + model.addHexModelChangeListener(hexPane); + model.addHexModelChangeListener(asciiPane); + + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); + panel.setPreferredSize(new Dimension(HexView.TOTAL_WIDTH, HexView.CHAR_HEIGHT * (model.totalLine() + 1))); + panel.add(addressPane); + panel.add(hexPane); + panel.add(asciiPane); + + JScrollPane scrollPane = getScrollPane(); + scrollPane.setViewportView(panel); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.anchor = GridBagConstraints.FIRST_LINE_START; + gbc.fill = GridBagConstraints.BOTH; + gbc.weighty = 0.02; + add(upperPane, gbc); + gbc.anchor = GridBagConstraints.LINE_START; + gbc.gridy = 1; + gbc.weighty = 1; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.BOTH; + add(scrollPane, gbc); + gbc.gridy = 2; + gbc.weightx = 0.1; + gbc.weighty = 0.0; + gbc.anchor = GridBagConstraints.LAST_LINE_START; + gbc.fill = GridBagConstraints.HORIZONTAL; + add(statusPane, gbc); + + hexPane.addSelectionChangeListener(this); + + KeyStroke jumpKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_DOWN_MASK); + this.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(jumpKeyStroke, "jump"); + this.getActionMap().put("jump", jumpToIndex); + } + + private JScrollPane getScrollPane() + { + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setBorder(new LineBorder(Color.LIGHT_GRAY)); + + Action blankAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + } + }; + + scrollPane.getActionMap().put("unitScrollDown", blankAction); + scrollPane.getActionMap().put("unitScrollLeft", blankAction); + scrollPane.getActionMap().put("unitScrollRight", blankAction); + scrollPane.getActionMap().put("unitScrollUp", blankAction); + + JScrollBar verticalScrollBar = scrollPane.createVerticalScrollBar(); + verticalScrollBar.setUnitIncrement(HexView.CHAR_HEIGHT); + verticalScrollBar.setBlockIncrement(HexView.CHAR_HEIGHT * 20); + verticalScrollBar.setValues(0, 1, 0, HexView.CHAR_HEIGHT * (model.totalLine()+1)); + scrollPane.setVerticalScrollBar(verticalScrollBar); + + return scrollPane; + } + + @Override + public void selectionChanged(SelectEvent event) + { + int index = event.getHexIndex(); + + switch (event.getNavigation()) + { + case SelectEvent.NEXT: + index += 1; + break; + case SelectEvent.PREVIOUS: + index -= 1; + break; + case SelectEvent.UP: + index -= 16; + break; + case SelectEvent.DOWN: + index += 16; + break; + default: + break; + } + if (index >= 0 && index <= model.size() - 1) + { + hexPane.setSelected(index); + addressPane.setSelected(index); + asciiPane.setSelected(index); + statusPane.updateStatus(index); + selectedIndex = index; + } + } + + private JDialog createJumpDialog() + { + final JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this), "Jump to index"); + dialog.setLocationRelativeTo(this); + final JLabel nowLabel = new JLabel("Present index: " + selectedIndex); + final JLabel label = new JLabel("Index to go:"); + final JTextField field = new JFormattedTextField(NumberFormat.getIntegerInstance()); + field.setPreferredSize(new Dimension(100, 20)); + + field.addActionListener(new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + int index = Integer.parseInt(field.getText(), 10); + if (index >= 0 && index <= model.size() - 1) + { + selectionChanged(new SelectEvent(index, SelectEvent.IN)); + dialog.dispose(); + } + } + }); + + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + panel.add(nowLabel); + + JPanel inputPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + inputPanel.add(label); + inputPanel.add(field); + + JPanel contentPanel = new JPanel(); + contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); + contentPanel.add(panel); + contentPanel.add(inputPanel); + dialog.getContentPane().add(contentPanel); + dialog.pack(); + return dialog; + } + +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModel.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModel.java new file mode 100644 index 00000000000..86650048ec0 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModel.java @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Khyrul Bashar + * + * A class that acts as a model for the hex viewer. It holds the data and provide the data as necessary. + * It'll let listen for any underlying data changes. + */ +class HexModel implements HexChangeListener +{ + private final List data; + private final List modelChangeListeners; + + /** + * Constructor + * @param bytes Byte array. + */ + HexModel(byte[] bytes) + { + data = new ArrayList<>(bytes.length); + + for (byte b: bytes) + { + data.add(b); + } + + modelChangeListeners = new ArrayList<>(); + } + + /** + * provides the byte for a specific index of the byte array. + * @param index int. + * @return byte instance + */ + public byte getByte(int index) + { + return data.get(index); + } + + /** + * Provides a character array of 16 characters on availability. + * @param lineNumber int. The line number of the characters. Line counting starts from 1. + * @return A char array. + */ + public char[] getLineChars(int lineNumber) + { + int start = (lineNumber-1) * 16; + int length = data.size() - start < 16 ? data.size() - start:16; + char[] chars = new char[length]; + + for (int i = 0; i < chars.length; i++) + { + char c = Character.toChars(data.get(start) & 0XFF)[0]; + if (!isAsciiPrintable(c)) + { + c = '.'; + } + chars[i] = c; + start++; + } + return chars; + } + + public byte[] getBytesForLine(int lineNumber) + { + int index = (lineNumber-1) * 16; + int length = Math.min(data.size() - index, 16); + byte[] bytes = new byte[length]; + + for (int i = 0; i < bytes.length; i++) + { + bytes[i] = data.get(index); + index++; + } + return bytes; + } + + /** + * Provides the size of the model i.e. size of the input. + * @return int value. + */ + public int size() + { + return data.size(); + } + + /** + * + * @return + */ + public int totalLine() + { + return size() % 16 != 0 ? size()/16 + 1 : size()/16; + } + + public static int lineNumber(int index) + { + int elementNo = index + 1; + return elementNo % 16 != 0 ? elementNo/16 + 1 : elementNo/16; + } + + public static int elementIndexInLine(int index) + { + return index%16; + } + + private static boolean isAsciiPrintable(char ch) + { + return ch >= 32 && ch < 127; + } + + public void addHexModelChangeListener(HexModelChangeListener listener) + { + modelChangeListeners.add(listener); + } + + public void updateModel(int index, byte value) + { + if (!data.get(index).equals(value)) + { + data.set(index, value); + for (HexModelChangeListener listener: modelChangeListeners) + { + listener.hexModelChanged(new HexModelChangedEvent(index, HexModelChangedEvent.SINGLE_CHANGE)); + } + } + } + + private void fireModelChanged(int index) + { + for (HexModelChangeListener listener:modelChangeListeners) + { + listener.hexModelChanged(new HexModelChangedEvent(index, HexModelChangedEvent.SINGLE_CHANGE)); + } + } + + @Override + public void hexChanged(HexChangedEvent event) + { + int index = event.getByteIndex(); + if (index != -1 && getByte(index) != event.getNewValue()) + { + data.set(index, event.getNewValue()); + } + fireModelChanged(index); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModelChangeListener.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModelChangeListener.java new file mode 100644 index 00000000000..770e9b739ef --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModelChangeListener.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +/** + * @author Khyrul Bashar + */ +interface HexModelChangeListener +{ + void hexModelChanged(HexModelChangedEvent event); +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModelChangedEvent.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModelChangedEvent.java new file mode 100644 index 00000000000..562c12bb851 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexModelChangedEvent.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +/** + * @author Khyrul Bashar + * + * HexModelChangedEvent describes the change in the HexModel. + */ +class HexModelChangedEvent +{ + static final int BULK_CHANGE = 1; + static final int SINGLE_CHANGE = 2; + + private final int startIndex; + private final int changeType; + + /** + * Constructor. + * + * @param startIndex int. From where changes start. + * @param changeType int. Change type if it is only a single change or a bulk change by pasting + * or deleting. Though later features are not yet implemented. + */ + HexModelChangedEvent(int startIndex, int changeType) + { + this.startIndex = startIndex; + this.changeType = changeType; + } + + int getStartIndex() + { + return startIndex; + } + + int getChangeType() + { + return changeType; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexPane.java new file mode 100644 index 00000000000..ed6a83ef538 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexPane.java @@ -0,0 +1,387 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.font.TextAttribute; +import java.text.AttributedString; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JPanel; + +/** + * @author Khyrul Bashar + * + * HexPane shows the byte in a Grid table where every row has 16 bytes. It only draws bytes those are + * only visible at a given time. + */ +class HexPane extends JPanel implements KeyListener, MouseListener, MouseMotionListener, HexModelChangeListener +{ + private final HexModel model; + private int selectedIndex = -1; + private static final byte EDIT = 2; + private static final byte SELECTED = 1; + private static final byte NORMAL = 0; + + private byte state = NORMAL; + private int selectedChar = 0; + + private final List hexChangeListeners = new ArrayList<>(); + private final List selectionChangeListeners = new ArrayList<>(); + + /** + * Constructor. + * @param model HexModel instance. + */ + HexPane(HexModel model) + { + this.model = model; + model.addHexModelChangeListener(this); + setPreferredSize(new Dimension(HexView.HEX_PANE_WIDTH, HexView.CHAR_HEIGHT * (model.totalLine()+1))); + this.addMouseListener(this); + this.addMouseMotionListener(this); + this.addKeyListener(this); + setAutoscrolls(true); + setFont(HexView.FONT); + } + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + + Graphics2D g2d = (Graphics2D)g; + g2d.setRenderingHints(HexView.RENDERING_HINTS); + + Rectangle bound = getVisibleRect(); + g.clearRect(bound.x, bound.y, bound.width, bound.height); + g.setColor(Color.WHITE); + g.fillRect(bound.x, bound.y, bound.width, bound.height); + + int x = HexView.LINE_INSET; + int y = bound.y; + if (y == 0 || y% HexView.CHAR_HEIGHT != 0) + { + y += HexView.CHAR_HEIGHT - y% HexView.CHAR_HEIGHT; + } + int firstLine = y/ HexView.CHAR_HEIGHT; + + g.setColor(Color.BLACK); + for (int i = firstLine; i <= firstLine + bound.height/ HexView.CHAR_HEIGHT; i++) + { + if (i > model.totalLine()) + { + break; + } + byte[] bytes = model.getBytesForLine(i); + int index = (i - 1) * 16; + for (byte by : bytes) + { + String str = String.format("%02X", by); + if (selectedIndex == index && state == SELECTED) + { + g.drawString(getSelectedString(str).getIterator(), x, y); + } + else if (selectedIndex == index && state == EDIT) + { + paintInEdit(g, by, x, y); + } + else + { + g.drawString(str, x, y); + } + x += HexView.CHAR_WIDTH; + index++; + } + x = HexView.LINE_INSET; + y += HexView.CHAR_HEIGHT; + } + } + + private void paintInEdit(Graphics g, byte content, int x, int y) + { + g.setFont(HexView.BOLD_FONT); + g.setColor(Color.white); + + char[] chars = getChars(content); + + if (selectedChar == 0) + { + g.setColor(HexView.SELECTED_COLOR); + g.drawChars(chars, 0, 1, x, y); + + g.setColor(Color.black); + g.drawChars(chars, 1, 1, x + g.getFontMetrics().charWidth(chars[0]), y); + } + else + { + g.setColor(Color.black); + g.drawChars(chars, 0, 1, x, y); + + g.setColor(HexView.SELECTED_COLOR); + g.drawChars(chars, 1, 1,x + g.getFontMetrics().charWidth(chars[0]), y); + } + setDefault(g); + } + + private AttributedString getSelectedString(String str) + { + AttributedString string = new AttributedString(str); + string.addAttribute(TextAttribute.FONT, HexView.BOLD_FONT); + string.addAttribute(TextAttribute.FOREGROUND, HexView.SELECTED_COLOR); + return string; + } + + private void setDefault(Graphics g) + { + g.setColor(Color.black); + g.setFont(this.getFont()); + } + + /** + * Returns the index for a given point If there is any byte in there. + * @param point Point instance. + * @return index. + */ + private int getIndexForPoint(Point point) + { + if (point.x <= 20 || point.x >= (16 * HexView.CHAR_WIDTH)+20 ) + { + return -1; + } + int y = point.y; + int lineNumber = (y+ (HexView.CHAR_HEIGHT -(y % HexView.CHAR_HEIGHT)))/ HexView.CHAR_HEIGHT; + int x = point.x - 20; + int elementNumber = (x / HexView.CHAR_WIDTH); + return (lineNumber-1) * 16 + elementNumber; + } + + /** + * Returns the starting point in the view for any index. + * @param index int. + * @return Point instance. + */ + private Point getPointForIndex(int index) + { + int x = HexView.LINE_INSET + HexModel.elementIndexInLine(index)* HexView.CHAR_WIDTH; + int y = HexModel.lineNumber(index) * HexView.CHAR_HEIGHT; + return new Point(x, y); + } + + /** + * Puts an index in selected state or in other word it selects the byte of the index. + * @param index + */ + private void putInSelected(int index) + { + state = SELECTED; + selectedChar = 0; + Point point = getPointForIndex(index); + //for column one + if (index%16 == 0) + { + scrollRectToVisible(new Rectangle(0, HexModel.lineNumber(index) * HexView.CHAR_HEIGHT, 1, 1)); + } + else if (!getVisibleRect().intersects(point.x, point.y, HexView.CHAR_WIDTH, HexView.CHAR_HEIGHT)) + { + scrollRectToVisible(new Rectangle(point.x, point.y, HexView.CHAR_WIDTH, HexView.CHAR_HEIGHT)); + } + selectedIndex = index; + repaint(); + requestFocusInWindow(); + } + + private void fireSelectionChanged(SelectEvent event) + { + for (SelectionChangeListener listener:selectionChangeListeners) + { + listener.selectionChanged(event); + } + } + + private void fireHexValueChanged(byte value, int index) + { + for (HexChangeListener listener:hexChangeListeners) + { + listener.hexChanged(new HexChangedEvent(value, index)); + } + } + + public void addSelectionChangeListener(SelectionChangeListener listener) + { + selectionChangeListeners.add(listener); + } + + public void addHexChangeListeners(HexChangeListener listener) + { + hexChangeListeners.add(listener); + } + + @Override + public void keyTyped(KeyEvent keyEvent) + { + if (selectedIndex != -1) + { + char c = keyEvent.getKeyChar(); + if (isHexChar(c)) + { + byte previousByte = model.getByte(selectedIndex); + char[] chars = getChars(previousByte); + chars[selectedChar] = c; + byte editByte = getByte(chars); + if (selectedChar == 0) + { + state = EDIT; + selectedChar = 1; + fireHexValueChanged(editByte, selectedIndex); + } + else + { + fireHexValueChanged(editByte, selectedIndex); + fireSelectionChanged(new SelectEvent(selectedIndex, SelectEvent.NEXT)); + } + } + } + } + + @Override + public void keyPressed(KeyEvent keyEvent) + { + if (state == SELECTED || state == EDIT) + { + switch (keyEvent.getKeyCode()) + { + case 37: + if (state == EDIT && selectedChar == 1) + { + selectedChar = 0; + repaint(); + } + else + { + fireSelectionChanged(new SelectEvent(selectedIndex, SelectEvent.PREVIOUS)); + } + break; + case 39: + fireSelectionChanged(new SelectEvent(selectedIndex, SelectEvent.NEXT)); + break; + case 38: + fireSelectionChanged(new SelectEvent(selectedIndex, SelectEvent.UP)); + break; + case 40: + fireSelectionChanged(new SelectEvent(selectedIndex, SelectEvent.DOWN)); + break; + default: + break; + } + } + } + + + @Override + public void keyReleased(KeyEvent keyEvent) + { + + } + + @Override + public void mouseClicked(MouseEvent mouseEvent) + { + int index = getIndexForPoint(mouseEvent.getPoint()); + if (index == -1) + { + fireSelectionChanged(new SelectEvent(-1, SelectEvent.NONE)); + return; + } + fireSelectionChanged(new SelectEvent(index, SelectEvent.IN)); + } + + @Override + public void mousePressed(MouseEvent mouseEvent) + { + + } + + @Override + public void mouseReleased(MouseEvent mouseEvent) + { + } + + @Override + public void mouseEntered(MouseEvent mouseEvent) + { + + } + + @Override + public void mouseExited(MouseEvent mouseEvent) + { + + } + + @Override + public void mouseDragged(MouseEvent mouseEvent) + { + + } + + @Override + public void mouseMoved(MouseEvent mouseEvent) + { + + } + + private static boolean isHexChar(char c) + { + return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); + } + + private char[] getChars(byte b) + { + return String.format("%02X", b & 0XFF).toCharArray(); + } + + private byte getByte(char[] chars) + { + return (byte) (Integer.parseInt(new String(chars), 16) & 0XFF); + } + + public void setSelected(int index) + { + if (index != selectedIndex) + { + putInSelected(index); + } + } + + @Override + public void hexModelChanged(HexModelChangedEvent event) + { + repaint(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexView.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexView.java new file mode 100644 index 00000000000..ea5980c29be --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/HexView.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import java.awt.RenderingHints; +import java.util.HashMap; +import java.util.Map; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.UIManager; + +/** + * @author Khyrul Bashar + * + * HexView takes a byte array or Stream instance and shows them in Hex viewer. + */ +public class HexView +{ + private final JComponent mainPane; + + static final int FONT_SIZE = ((Font)UIManager.get("Label.font")).getSize(); + static final Font FONT = new Font("monospaced", Font.PLAIN, FONT_SIZE); + static final int CHAR_HEIGHT = 20; + static final int CHAR_WIDTH = 35; + static final int LINE_INSET = 20; + static final Color SELECTED_COLOR = UIManager.getColor("textHighlight"); + static final Font BOLD_FONT = new Font("monospaced", Font.BOLD, FONT_SIZE); + static final int HEX_PANE_WIDTH = 600; + static final int ADDRESS_PANE_WIDTH = 120; + static final int ASCII_PANE_WIDTH = 270; + static final int TOTAL_WIDTH = HEX_PANE_WIDTH + ADDRESS_PANE_WIDTH +ASCII_PANE_WIDTH; + static final Map RENDERING_HINTS = new HashMap<>(); + static + { + RENDERING_HINTS.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + RENDERING_HINTS.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP); + } + + public HexView() + { + mainPane = new JPanel(new BorderLayout()); + } + + /** + * Constructor. + * @param bytes takes a byte array. + */ + public HexView(byte[] bytes) + { + mainPane = new JPanel(new BorderLayout()); + mainPane.add(new HexEditor(new HexModel(bytes))); + } + + public void changeData(byte[] bytes) + { + if (mainPane.getComponentCount() > 0) + { + mainPane.removeAll(); + } + HexModel model = new HexModel(bytes); + mainPane.add(new HexEditor(model)); + mainPane.validate(); + } + + public JComponent getPane() + { + return mainPane; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/SelectEvent.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/SelectEvent.java new file mode 100644 index 00000000000..33d7a587af6 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/SelectEvent.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +/** + * @author Khyrul Bashar + * + * This describes any selection event happens in hex view + */ +class SelectEvent +{ + static final String NEXT = "next"; + static final String PREVIOUS = "previous"; + static final String UP = "up"; + static final String DOWN= "down"; + static final String NONE = "none"; + static final String IN = "in"; + static final String EDIT = "edit"; + + private final int hexIndex; + private final String navigation; + + /** + * Constructor. + * @param ind index of present selection. + * @param nav Type of navigation. + */ + SelectEvent(int ind, String nav) + { + hexIndex = ind; + navigation = nav; + } + + public int getHexIndex() + { + return hexIndex; + } + + public String getNavigation() + { + return navigation; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/SelectionChangeListener.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/SelectionChangeListener.java new file mode 100644 index 00000000000..b27fa2b0f29 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/SelectionChangeListener.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +/** + * @author Khyrul Bashar + */ +interface SelectionChangeListener +{ + void selectionChanged(SelectEvent event); +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/StatusPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/StatusPane.java new file mode 100644 index 00000000000..657b45e106b --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/StatusPane.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.Dimension; +import java.awt.FlowLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; + +/** + * @author Khyrul Bashar + * + * This shows the currently selected bytes, index, line number and column number. + */ +class StatusPane extends JPanel +{ + private static final int HEIGHT = 20; + private JLabel lineLabel; + private JLabel colLabel; + private JLabel indexLabel; + + StatusPane() + { + setLayout(new FlowLayout(FlowLayout.LEFT)); + createView(); + } + + private void createView() + { + JLabel line = new JLabel("Line:"); + JLabel column = new JLabel("Column:"); + lineLabel = new JLabel(""); + lineLabel.setPreferredSize(new Dimension(100, HEIGHT)); + colLabel = new JLabel(""); + colLabel.setPreferredSize(new Dimension(100, HEIGHT)); + JLabel index = new JLabel("Index:"); + indexLabel = new JLabel(""); + + add(line); + add(lineLabel); + add(column); + add(colLabel); + add(index); + add(indexLabel); + } + + void updateStatus(int index) + { + lineLabel.setText(String.valueOf(HexModel.lineNumber(index))); + colLabel.setText(String.valueOf(HexModel.elementIndexInLine(index)+1)); + indexLabel.setText(String.valueOf(index)); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/UpperPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/UpperPane.java new file mode 100644 index 00000000000..f549bfb4499 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/hexviewer/UpperPane.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.hexviewer; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import javax.swing.BorderFactory; +import javax.swing.JPanel; + +/** + * @author Khyrul Bashar + * + * This class builds the upper banner in the hex view. + */ +class UpperPane extends JPanel +{ + UpperPane() + { + setFont(HexView.FONT); + setPreferredSize(new Dimension(HexView.TOTAL_WIDTH, 20)); + setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.LIGHT_GRAY)); + } + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + + Graphics2D g2d = (Graphics2D)g; + g2d.setRenderingHints(HexView.RENDERING_HINTS); + + int x = HexView.LINE_INSET-2; + int y = 16; + + g.drawString("Offset", x, y); + + x += HexView.ADDRESS_PANE_WIDTH + 2; + + for (int i = 0; i <= 15; i++) + { + g.drawString(String.format("%02X", i), x, y); + x += HexView.CHAR_WIDTH; + } + + x+=HexView.LINE_INSET*2; + g.drawString("Text", x, y); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPDFRenderer.java b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPDFRenderer.java new file mode 100644 index 00000000000..d0422830aae --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPDFRenderer.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.pagepane; + +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.rendering.PageDrawer; +import org.apache.pdfbox.rendering.PageDrawerParameters; + +/** + * A custom PDFRenderer which creates instances of DebugPageDrawer. + * + * @author John Hewson + */ +final class DebugPDFRenderer extends PDFRenderer +{ + private final boolean showGlyphBounds; + + DebugPDFRenderer(PDDocument document, boolean showGlyphBounds) + { + super(document); + this.showGlyphBounds = showGlyphBounds; + } + + @Override + protected PageDrawer createPageDrawer(PageDrawerParameters parameters) throws IOException + { + return new DebugPageDrawer(parameters, this.showGlyphBounds); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java new file mode 100644 index 00000000000..95231b0f169 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.pagepane; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.pdmodel.font.PDVectorFont; +import org.apache.pdfbox.rendering.PageDrawer; +import org.apache.pdfbox.rendering.PageDrawerParameters; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * A custom PageDrawer with debugging overlays. + * + * @author John Hewson + */ +final class DebugPageDrawer extends PageDrawer +{ + private final boolean showGlyphBounds; + + DebugPageDrawer(PageDrawerParameters parameters, boolean showGlyphBounds) throws IOException + { + super(parameters); + this.showGlyphBounds = showGlyphBounds; + } + + /** + * Glyph bounding boxes. + */ + @Override + protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + // draw glyph + super.showGlyph(textRenderingMatrix, font, code, unicode, displacement); + + if (showGlyphBounds) + { + Shape bbox; + + // compute visual bounds + if (font instanceof PDType3Font) + { + // todo: implement me + return; + } + else + { + AffineTransform at = textRenderingMatrix.createAffineTransform(); + at.concatenate(font.getFontMatrix().createAffineTransform()); + + // get the path + PDVectorFont vectorFont = (PDVectorFont) font; + GeneralPath path = vectorFont.getNormalizedPath(code); + + if (path == null) + { + return; + } + + // stretch non-embedded glyph if it does not match the width contained in the PDF + if (!font.isEmbedded() && !font.isVertical() && !font.isStandard14() && font.hasExplicitWidth(code)) + { + float fontWidth = font.getWidthFromFont(code); + if (fontWidth > 0 && // ignore spaces + Math.abs(fontWidth - displacement.getX() * 1000) > 0.0001) + { + float pdfWidth = displacement.getX() * 1000; + at.scale(pdfWidth / fontWidth, 1); + } + } + + Shape glyph = at.createTransformedShape(path); + bbox = glyph.getBounds2D(); + } + + // save + Graphics2D graphics = getGraphics(); + Color color = graphics.getColor(); + Stroke stroke = graphics.getStroke(); + Shape clip = graphics.getClip(); + + // draw + graphics.setClip(graphics.getDeviceConfiguration().getBounds()); + graphics.setColor(Color.cyan); + graphics.setStroke(new BasicStroke(.5f)); + graphics.draw(bbox); + + // restore + graphics.setStroke(stroke); + graphics.setColor(color); + graphics.setClip(clip); + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java new file mode 100644 index 00000000000..115ac3c6831 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java @@ -0,0 +1,211 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.pagepane; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Rectangle2D; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.List; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDThreadBead; +import org.apache.pdfbox.text.PDFTextStripper; +import org.apache.pdfbox.text.TextPosition; +import org.apache.pdfbox.util.Matrix; + +/** + * Draws an overlay showing the locations of text found by PDFTextStripper and another heuristic. + * + * @author Ben Litchfield + * @author Tilman Hausherr + * @author John Hewson + */ +final class DebugTextOverlay +{ + private final PDDocument document; + private final int pageIndex; + private final float scale; + private final boolean showTextStripper; + private final boolean showTextStripperBeads; + private final boolean showFontBBox; + + private class DebugTextStripper extends PDFTextStripper + { + private final Graphics2D graphics; + private AffineTransform flip; + + DebugTextStripper(Graphics2D graphics) throws IOException + { + this.graphics = graphics; + } + + public void stripPage(PDDocument document, PDPage page, int pageIndex, float scale) throws IOException + { + // flip y-axis + PDRectangle cropBox = page.getCropBox(); + this.flip = new AffineTransform(); + flip.translate(0, cropBox.getHeight()); + flip.scale(1, -1); + + // scale and rotate + transform(graphics, page, scale); + + // set stroke width + graphics.setStroke(new BasicStroke(0.5f)); + + setStartPage(pageIndex + 1); + setEndPage(pageIndex + 1); + + Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream()); + writeText(document, dummy); + + if (DebugTextOverlay.this.showTextStripperBeads) + { + // beads in green + List pageArticles = page.getThreadBeads(); + for (PDThreadBead bead : pageArticles) + { + if (bead == null) + { + continue; + } + PDRectangle r = bead.getRectangle(); + GeneralPath p = r.transform(Matrix.getTranslateInstance(-cropBox.getLowerLeftX(), cropBox.getLowerLeftY())); + Shape s = flip.createTransformedShape(p); + graphics.setColor(Color.green); + graphics.draw(s); + } + } + } + + // scale rotate translate + private void transform(Graphics2D graphics, PDPage page, float scale) + { + graphics.scale(scale, scale); + + int rotationAngle = page.getRotation(); + PDRectangle cropBox = page.getCropBox(); + + if (rotationAngle != 0) + { + float translateX = 0; + float translateY = 0; + switch (rotationAngle) + { + case 90: + translateX = cropBox.getHeight(); + break; + case 270: + translateY = cropBox.getWidth(); + break; + case 180: + translateX = cropBox.getWidth(); + translateY = cropBox.getHeight(); + break; + default: + break; + } + graphics.translate(translateX, translateY); + graphics.rotate((float) Math.toRadians(rotationAngle)); + } + } + + @Override + protected void writeString(String string, List textPositions) throws IOException + { + for (TextPosition text : textPositions) + { + if (DebugTextOverlay.this.showTextStripper) + { + AffineTransform at = (AffineTransform) flip.clone(); + at.concatenate(text.getTextMatrix().createAffineTransform()); + + // in red: + // show rectangles with the "height" (not a real height, but used for text extraction + // heuristics, it is 1/2 of the bounding box height and starts at y=0) + Rectangle2D.Float rect = new Rectangle2D.Float(0, 0, + text.getWidthDirAdj() / text.getTextMatrix().getScalingFactorX(), + text.getHeightDir() / text.getTextMatrix().getScalingFactorY()); + graphics.setColor(Color.red); + graphics.draw(at.createTransformedShape(rect)); + } + + if (DebugTextOverlay.this.showFontBBox) + { + // in blue: + // show rectangle with the real vertical bounds, based on the font bounding box y values + // usually, the height is identical to what you see when marking text in Adobe Reader + PDFont font = text.getFont(); + BoundingBox bbox = font.getBoundingBox(); + + // advance width, bbox height (glyph space) + float xadvance = font.getWidth(text.getCharacterCodes()[0]); // todo: should iterate all chars + Rectangle2D rect = new Rectangle2D.Float(0, bbox.getLowerLeftY(), xadvance, bbox.getHeight()); + + // glyph space -> user space + // note: text.getTextMatrix() is *not* the Text Matrix, it's the Text Rendering Matrix + AffineTransform at = (AffineTransform) flip.clone(); + at.concatenate(text.getTextMatrix().createAffineTransform()); + + if (font instanceof PDType3Font) + { + // bbox and font matrix are unscaled + at.concatenate(font.getFontMatrix().createAffineTransform()); + } + else + { + // bbox and font matrix are already scaled to 1000 + at.scale(1 / 1000f, 1 / 1000f); + } + + graphics.setColor(Color.blue); + graphics.draw(at.createTransformedShape(rect)); + } + } + } + } + + DebugTextOverlay(PDDocument document, int pageIndex, float scale, + boolean showTextStripper, boolean showTextStripperBeads, + boolean showFontBBox) + { + this.document = document; + this.pageIndex = pageIndex; + this.scale = scale; + this.showTextStripper = showTextStripper; + this.showTextStripperBeads = showTextStripperBeads; + this.showFontBBox = showFontBBox; + } + + public void renderTo(Graphics2D graphics) throws IOException + { + DebugTextStripper stripper = new DebugTextStripper(graphics); + stripper.stripPage(this.document, this.document.getPage(pageIndex), this.pageIndex, this.scale); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java new file mode 100644 index 00000000000..6bbdc8b4f46 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java @@ -0,0 +1,468 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.pagepane; + +import java.awt.Graphics2D; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.debugger.PDFDebugger; +import org.apache.pdfbox.debugger.ui.ImageUtil; +import org.apache.pdfbox.debugger.ui.RotationMenu; +import org.apache.pdfbox.debugger.ui.ViewMenu; +import org.apache.pdfbox.debugger.ui.ZoomMenu; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.rendering.PDFRenderer; + +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.SwingWorker; +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; +import java.awt.Component; +import java.awt.Font; +import java.awt.GraphicsEnvironment; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import org.apache.pdfbox.debugger.ui.HighResolutionImageIcon; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDNamedDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; + +/** + * Display the page number and a page rendering. + * + * @author Tilman Hausherr + * @author John Hewson + */ +public class PagePane implements ActionListener, AncestorListener, MouseMotionListener, MouseListener +{ + private final PDDocument document; + private final JLabel statuslabel; + private final PDPage page; + private JPanel panel; + private int pageIndex = -1; + private JLabel label; + private ZoomMenu zoomMenu; + private RotationMenu rotationMenu; + private ViewMenu viewMenu; + private String labelText = ""; + private final Map rectMap = new HashMap<>(); + private final AffineTransform defaultTransform = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform(); + + public PagePane(PDDocument document, COSDictionary pageDict, JLabel statuslabel) + { + page = new PDPage(pageDict); + pageIndex = document.getPages().indexOf(page); + this.document = document; + this.statuslabel = statuslabel; + initUI(); + initRectMap(); + } + + private void initRectMap() + { + try + { + collectFieldLocations(); + collectLinkLocations(); + } + catch (IOException ex) + { + // ignore + } + } + + private void collectLinkLocations() throws IOException + { + for (PDAnnotation annotation : page.getAnnotations()) + { + if (annotation instanceof PDAnnotationLink) + { + PDAnnotationLink linkAnnotation = (PDAnnotationLink) annotation; + PDAction action = linkAnnotation.getAction(); + if (action instanceof PDActionURI) + { + PDActionURI uriAction = (PDActionURI) action; + rectMap.put(annotation.getRectangle(), "URI: " + uriAction.getURI()); + continue; + } + PDDestination destination; + if (action instanceof PDActionGoTo) + { + PDActionGoTo goToAction = (PDActionGoTo) action; + destination = goToAction.getDestination(); + } + else + { + destination = linkAnnotation.getDestination(); + } + if (destination instanceof PDNamedDestination) + { + destination = document.getDocumentCatalog(). + findNamedDestinationPage((PDNamedDestination) destination); + } + if (destination instanceof PDPageDestination) + { + PDPageDestination pageDestination = (PDPageDestination) destination; + int pageNum = pageDestination.retrievePageNumber(); + if (pageNum != -1) + { + rectMap.put(annotation.getRectangle(), "Page destination: " + (pageNum + 1)); + } + } + } + } + } + + private void collectFieldLocations() + { + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + if (acroForm == null) + { + return; + } + for (PDField field : acroForm.getFieldTree()) + { + String fullyQualifiedName = field.getFullyQualifiedName(); + for (PDAnnotationWidget widget : field.getWidgets()) + { + if (page.equals(widget.getPage())) + { + rectMap.put(widget.getRectangle(), "Field name: " + fullyQualifiedName); + } + } + } + } + + private void initUI() + { + panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + + String pageLabelText = pageIndex < 0 ? "Page number not found" : "Page " + (pageIndex + 1); + + // append PDF page label, if available + String lbl = PDFDebugger.getPageLabel(document, pageIndex); + if (lbl != null) + { + pageLabelText += " - " + lbl; + } + + JLabel pageLabel = new JLabel(pageLabelText); + pageLabel.setAlignmentX(Component.CENTER_ALIGNMENT); + pageLabel.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 20)); + pageLabel.setBorder(BorderFactory.createEmptyBorder(5, 0, 10, 0)); + panel.add(pageLabel); + + label = new JLabel(); + label.addMouseMotionListener(this); + label.addMouseListener(this); + label.setAlignmentX(Component.CENTER_ALIGNMENT); + panel.add(label); + panel.addAncestorListener(this); + + zoomMenu = ZoomMenu.getInstance(); + zoomMenu.changeZoomSelection(zoomMenu.getPageZoomScale()); + startRendering(); + } + + /** + * Returns the main panel that hold all the UI elements. + * + * @return JPanel instance + */ + public Component getPanel() + { + return panel; + } + + @Override + public void actionPerformed(ActionEvent actionEvent) + { + String actionCommand = actionEvent.getActionCommand(); + + if (ZoomMenu.isZoomMenu(actionCommand) || + RotationMenu.isRotationMenu(actionCommand) || + ViewMenu.isRenderingOptions(actionCommand)) + { + startRendering(); + } + } + + private void startRendering() + { + // render in a background thread: rendering is read-only, so this should be ok, despite + // the fact that PDDocument is not officially thread safe + new RenderWorker(ZoomMenu.getZoomScale(), + RotationMenu.getRotationDegrees(), + ViewMenu.isShowTextStripper(), + ViewMenu.isShowTextStripperBeads(), + ViewMenu.isShowFontBBox(), + ViewMenu.isShowGlyphBounds(), + ViewMenu.isAllowSubsampling() + ).execute(); + zoomMenu.setPageZoomScale(ZoomMenu.getZoomScale()); + } + + @Override + public void ancestorAdded(AncestorEvent ancestorEvent) + { + zoomMenu.addMenuListeners(this); + zoomMenu.setEnableMenu(true); + + rotationMenu = RotationMenu.getInstance(); + rotationMenu.addMenuListeners(this); + rotationMenu.setEnableMenu(true); + + viewMenu = ViewMenu.getInstance(null); + + JMenu menuInstance = viewMenu.getMenu(); + int itemCount = menuInstance.getItemCount(); + + for (int i = 0; i< itemCount; i++) + { + JMenuItem item = menuInstance.getItem(i); + if (item != null) + { + item.setEnabled(true); + item.addActionListener(this); + } + } + } + + @Override + public void ancestorRemoved(AncestorEvent ancestorEvent) + { + boolean isFirstEntrySkipped = false; + zoomMenu.setEnableMenu(false); + rotationMenu.setEnableMenu(false); + + JMenu menuInstance = viewMenu.getMenu(); + int itemCount = menuInstance.getItemCount(); + + for (int i = 0; i< itemCount; i++) + { + JMenuItem item = menuInstance.getItem(i); + // skip the first JMenuItem as this shall always be shown + if (item != null) + { + if (!isFirstEntrySkipped) + { + isFirstEntrySkipped = true; + } + else + { + item.setEnabled(false); + item.removeActionListener(this); + } + } + } + } + + @Override + public void ancestorMoved(AncestorEvent ancestorEvent) + { + } + + @Override + public void mouseDragged(MouseEvent e) + { + } + + /** + * Catch mouse event to display cursor position in PDF coordinates in the status bar. + * + * @param e mouse event with position + */ + @Override + public void mouseMoved(MouseEvent e) + { + float height = page.getCropBox().getHeight(); + float width = page.getCropBox().getWidth(); + float offsetX = page.getCropBox().getLowerLeftX(); + float offsetY = page.getCropBox().getLowerLeftY(); + float zoomScale = zoomMenu.getPageZoomScale(); + float x = e.getX() / zoomScale * (float) defaultTransform.getScaleX(); + float y = e.getY() / zoomScale * (float) defaultTransform.getScaleY(); + int x1, y1; + switch ((RotationMenu.getRotationDegrees() + page.getRotation()) % 360) + { + case 90: + x1 = (int) (y + offsetX); + y1 = (int) (x + offsetY); + break; + case 180: + x1 = (int) (width - x + offsetX); + y1 = (int) (y - offsetY); + break; + case 270: + x1 = (int) (width - y + offsetX); + y1 = (int) (height - x + offsetY); + break; + case 0: + default: + x1 = (int) (x + offsetX); + y1 = (int) (height - y + offsetY); + break; + } + String text = "x: " + x1 + ", y: " + y1; + + // are we in a field widget? + for (Entry entry : rectMap.entrySet()) + { + if (entry.getKey().contains(x1, y1)) + { + text += ", " + rectMap.get(entry.getKey()); + break; + } + } + + statuslabel.setText(text); + } + + @Override + public void mouseClicked(MouseEvent e) + { + } + + @Override + public void mousePressed(MouseEvent e) + { + } + + @Override + public void mouseReleased(MouseEvent e) + { + } + + @Override + public void mouseEntered(MouseEvent e) + { + } + + @Override + public void mouseExited(MouseEvent e) + { + statuslabel.setText(labelText); + } + + /** + * Note that PDDocument is not officially thread safe, caution advised. + */ + private final class RenderWorker extends SwingWorker + { + private final float scale; + private final int rotation; + private final boolean showTextStripper; + private final boolean showTextStripperBeads; + private final boolean showFontBBox; + private final boolean showGlyphBounds; + private final boolean allowSubsampling; + + private RenderWorker(float scale, int rotation, boolean showTextStripper, + boolean showTextStripperBeads, boolean showFontBBox, + boolean showGlyphBounds, boolean allowSubsampling) + { + this.scale = scale; + this.rotation = rotation; + this.showTextStripper = showTextStripper; + this.showTextStripperBeads = showTextStripperBeads; + this.showFontBBox = showFontBBox; + this.showGlyphBounds = showGlyphBounds; + this.allowSubsampling = allowSubsampling; + } + + @Override + protected BufferedImage doInBackground() throws IOException + { + label.setIcon(null); + labelText = "Rendering..."; + label.setText(labelText); + statuslabel.setText(labelText); + + PDFRenderer renderer = new DebugPDFRenderer(document, this.showGlyphBounds); + renderer.setSubsamplingAllowed(allowSubsampling); + + long t0 = System.nanoTime(); + BufferedImage image = renderer.renderImage(pageIndex, scale); + long t1 = System.nanoTime(); + + long ms = TimeUnit.MILLISECONDS.convert(t1 - t0, TimeUnit.NANOSECONDS); + labelText = "Rendered in " + ms + " ms"; + statuslabel.setText(labelText); + + // debug overlays + DebugTextOverlay debugText = new DebugTextOverlay(document, pageIndex, scale, + showTextStripper, showTextStripperBeads, + showFontBBox); + Graphics2D g = image.createGraphics(); + debugText.renderTo(g); + g.dispose(); + + return ImageUtil.getRotatedImage(image, rotation); + } + + @Override + protected void done() + { + try + { + BufferedImage image = get(); + + // We cannot use "label.setIcon(new ImageIcon(get()))" here + // because of blurry upscaling in JDK9. Instead, the label is now created with + // a smaller size than the image to compensate that the + // image is scaled up with some screen configurations (e.g. 125% on windows). + // See PDFBOX-3665 for more sample code and discussion. + label.setSize((int) Math.ceil(image.getWidth() / defaultTransform.getScaleX()), + (int) Math.ceil(image.getHeight() / defaultTransform.getScaleY())); + label.setIcon(new HighResolutionImageIcon(image, label.getWidth(), label.getHeight())); + label.setText(null); + } + catch (InterruptedException | ExecutionException e) + { + label.setText(e.getMessage()); + throw new RuntimeException(e); + } + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/OperatorMarker.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/OperatorMarker.java new file mode 100644 index 00000000000..02061ca9ac8 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/OperatorMarker.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane; + +import java.awt.Color; +import java.util.HashMap; +import java.util.Map; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyleContext; + +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * @author Khyrul Bashar + */ +final class OperatorMarker +{ + private static final Map operatorStyleMap; + + static + { + StyleContext styleContext = StyleContext.getDefaultStyleContext(); + + Style common = styleContext.addStyle("common", null); + StyleConstants.setBold(common, true); + + Style textObjectStyle = styleContext.addStyle("text_object", common); + StyleConstants.setForeground(textObjectStyle, new Color(0, 100, 0)); + + Style graphicsStyle = styleContext.addStyle("graphics", common); + StyleConstants.setForeground(graphicsStyle, new Color(255, 68, 68)); + + Style concatStyle = styleContext.addStyle("cm", common); + StyleConstants.setForeground(concatStyle, new Color(1, 169, 219)); + + Style inlineImage = styleContext.addStyle("inline_image", common); + StyleConstants.setForeground(inlineImage, new Color(71, 117, 163)); + + Style imageData = styleContext.addStyle("ID", common); + StyleConstants.setForeground(imageData, new Color(255, 165, 0)); + + Map styleMap = new HashMap<>(); + + styleMap.put(OperatorName.BEGIN_TEXT, textObjectStyle); + styleMap.put(OperatorName.END_TEXT, textObjectStyle); + styleMap.put(OperatorName.SAVE, graphicsStyle); + styleMap.put(OperatorName.RESTORE, graphicsStyle); + styleMap.put(OperatorName.CONCAT, concatStyle); + styleMap.put(OperatorName.BEGIN_INLINE_IMAGE, inlineImage); + styleMap.put(OperatorName.BEGIN_INLINE_IMAGE_DATA, imageData); + styleMap.put(OperatorName.END_INLINE_IMAGE, inlineImage); + + operatorStyleMap = styleMap; + } + + private OperatorMarker() + { + } + + public static Style getStyle(String operator) + { + if (operatorStyleMap.containsKey(operator)) + { + return operatorStyleMap.get(operator); + } + return null; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java new file mode 100644 index 00000000000..5819f0927eb --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java @@ -0,0 +1,250 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.streampane; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; + +/** + * @author Khyrul Bashar + * + * A class that provides the COSStream in different version and related informations. + */ +public class Stream +{ + public static final String DECODED = "Decoded (Plain Text)"; + public static final String IMAGE = "Image"; + + private final COSStream stream; + private final boolean isThumb; + private final boolean isImage; + private final boolean isXmlMetadata; + + private final Map> filters; + + /** + * Constructor. + * + * @param cosStream COSStream instance. + * @param isThumb boolean instance says if the stream is thumbnail image. + */ + Stream(COSStream cosStream, boolean isThumb) + { + this.stream = cosStream; + this.isThumb = isThumb; + this.isImage = isImageStream(cosStream, isThumb); + this.isXmlMetadata = isXmlMetadataStream(cosStream); + + filters = createFilterList(cosStream); + } + + /** + * Return if this is stream is an Image XObject. + * + * @return true if this an image and false otherwise. + */ + public boolean isImage() + { + return isImage; + } + + /** + * Return if this is stream is an Metadata stream. + * + * @return true if this a metadata stream and false otherwise. + */ + public boolean isXmlMetadata() + { + return isXmlMetadata; + } + + /** + * Return the available filter list. Only "Unfiltered" is returned if there is no filter and in + * case of XObject image type stream "Image" is also included in the list. + * + * @return An array of String. + */ + public List getFilterList() + { + List list = new ArrayList<>(); + for (Map.Entry> entry : filters.entrySet()) + { + list.add(entry.getKey()); + } + return list; + } + + /** + * Returns the label for the "Unfiltered" menu item. + */ + private String getFilteredLabel() + { + StringBuilder sb = new StringBuilder(); + COSBase base = stream.getFilters(); + if (base instanceof COSName) + { + sb.append(((COSName) base).getName()); + } + else if (base instanceof COSArray) + { + COSArray filterArray = (COSArray) base; + for (int i = 0; i < filterArray.size(); i++) + { + if (i > 0) + { + sb.append(", "); + } + sb.append(((COSName) filterArray.get(i)).getName()); + } + } + return "Encoded (" + sb.toString() + ")"; + } + + /** + * Returns a InputStream of a partially filtered stream. + * + * @param key is an instance of String which tells which version of stream should be returned. + * @return an InputStream. + */ + public InputStream getStream(String key) + { + try + { + if (DECODED.equals(key)) + { + return stream.createInputStream(); + } + else if (getFilteredLabel().equals(key)) + { + return stream.createRawInputStream(); + } + else + { + return new PDStream(stream).createInputStream(filters.get(key)); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return null; + } + + /** + * Provide the image for stream. The stream must be image XObject. + * + * @param resources PDResources for the XObject. + * @return A BufferedImage. + */ + public BufferedImage getImage(PDResources resources) + { + try + { + PDImageXObject imageXObject; + if (isThumb) + { + imageXObject = PDImageXObject.createThumbnail(stream); + } + else + { + imageXObject = new PDImageXObject(new PDStream(stream), resources); + } + return imageXObject.getImage(); + } + catch (IOException e) + { + e.printStackTrace(); + } + return null; + } + + private Map> createFilterList(COSStream stream) + { + Map> filterList = new LinkedHashMap<>(); + + if (isImage) + { + filterList.put(IMAGE, null); + } + + filterList.put(DECODED, null); + PDStream pdStream = new PDStream(stream); + + if (pdStream.getFilters() != null) + { + int filtersSize = pdStream.getFilters().size(); + + for (int i = filtersSize - 1; i >= 1; i--) + { + filterList.put(getPartialStreamCommand(i), getStopFilterList(i)); + } + filterList.put(getFilteredLabel(), null); + } + return filterList; + } + + private String getPartialStreamCommand(final int indexOfStopFilter) + { + List avaiablrFilters = new PDStream(stream).getFilters(); + + StringBuilder nameListBuilder = new StringBuilder(); + for (int i = indexOfStopFilter; i < avaiablrFilters.size(); i++) + { + nameListBuilder.append(avaiablrFilters.get(i).getName()).append(" & "); + } + nameListBuilder.delete(nameListBuilder.lastIndexOf("&"), nameListBuilder.length()); + + return "Keep " + nameListBuilder.toString() + "..."; + } + + private List getStopFilterList(final int stopFilterIndex) + { + List avaiablrFilters = new PDStream(stream).getFilters(); + + final List stopFilters = new ArrayList<>(1); + stopFilters.add(avaiablrFilters.get(stopFilterIndex).getName()); + + return stopFilters; + } + + private boolean isImageStream(COSDictionary dic, boolean isThumb) + { + if (isThumb) + { + return true; + } + return dic.containsKey(COSName.SUBTYPE) && dic.getCOSName(COSName.SUBTYPE).equals(COSName.IMAGE); + } + + private boolean isXmlMetadataStream(COSDictionary dic) + { + return dic.containsKey(COSName.SUBTYPE) && dic.getCOSName(COSName.SUBTYPE).equals(COSName.getPDFName("XML")); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamImageView.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamImageView.java new file mode 100644 index 00000000000..be88653a3f8 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamImageView.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.streampane; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.GraphicsEnvironment; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.border.LineBorder; +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; + +import org.apache.pdfbox.debugger.ui.HighResolutionImageIcon; +import org.apache.pdfbox.debugger.ui.ImageUtil; +import org.apache.pdfbox.debugger.ui.RotationMenu; +import org.apache.pdfbox.debugger.ui.ZoomMenu; + +/** + * @author Khyrul Bashar + * + * A class that provides the container for the image in case of image showing in stream pane. + */ +class StreamImageView implements ActionListener, AncestorListener +{ + private final BufferedImage image; + private JScrollPane scrollPane; + private JLabel label; + private ZoomMenu zoomMenu; + private RotationMenu rotationMenu; + + /** + * constructor. + * @param image instance of BufferedImage. + */ + StreamImageView(BufferedImage image) + { + this.image = image; + initUI(); + } + + private void initUI() + { + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + + zoomMenu = ZoomMenu.getInstance(); + zoomMenu.changeZoomSelection(zoomMenu.getImageZoomScale()); + + label = new JLabel(); + label.setBorder(new LineBorder(Color.BLACK)); + label.setAlignmentX(Component.CENTER_ALIGNMENT); + addImage(zoomImage(image, zoomMenu.getImageZoomScale(), RotationMenu.getRotationDegrees())); + + panel.add(Box.createVerticalGlue()); + panel.add(label); + panel.add(Box.createVerticalGlue()); + + scrollPane = new JScrollPane(); + scrollPane.setPreferredSize(new Dimension(300, 400)); + scrollPane.addAncestorListener(this); + scrollPane.setViewportView(panel); + } + + /** + * Returns the view i.e container containing image. + * @return A JComponent instance. + */ + JComponent getView() + { + return scrollPane; + } + + private Image zoomImage(BufferedImage origin, float scale, int rotation) + { + BufferedImage rotatedImage = ImageUtil.getRotatedImage(origin, rotation); + int resizedWidth = (int) (rotatedImage.getWidth() * scale); + int resizedHeight = (int) (rotatedImage.getHeight() * scale); + return rotatedImage.getScaledInstance(resizedWidth, resizedHeight, BufferedImage.SCALE_SMOOTH); + } + + @Override + public void actionPerformed(ActionEvent actionEvent) + { + String actionCommand = actionEvent.getActionCommand(); + if (ZoomMenu.isZoomMenu(actionCommand) || RotationMenu.isRotationMenu(actionCommand)) + { + addImage(zoomImage(image, ZoomMenu.getZoomScale(), RotationMenu.getRotationDegrees())); + zoomMenu.setImageZoomScale(ZoomMenu.getZoomScale()); + } + } + + private void addImage(Image img) + { + // for JDK9; see explanation in PagePane + AffineTransform tx = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform(); + label.setSize((int) Math.ceil(img.getWidth(null) / tx.getScaleX()), + (int) Math.ceil(img.getHeight(null) / tx.getScaleY())); + label.setIcon(new HighResolutionImageIcon(img, label.getWidth(), label.getHeight())); + label.revalidate(); + } + + @Override + public void ancestorAdded(AncestorEvent ancestorEvent) + { + zoomMenu.addMenuListeners(this); + zoomMenu.setEnableMenu(true); + + rotationMenu = RotationMenu.getInstance(); + rotationMenu.addMenuListeners(this); + rotationMenu.setRotationSelection(RotationMenu.ROTATE_0_DEGREES); + rotationMenu.setEnableMenu(true); + } + + @Override + public void ancestorRemoved(AncestorEvent ancestorEvent) + { + zoomMenu.setEnableMenu(false); + rotationMenu.setEnableMenu(false); + } + + @Override + public void ancestorMoved(AncestorEvent ancestorEvent) + { + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java new file mode 100644 index 00000000000..d935a06c4b5 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java @@ -0,0 +1,496 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.ExecutionException; +import javax.swing.BoxLayout; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.SwingWorker; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultStyledDocument; +import javax.swing.text.Style; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyleContext; +import javax.swing.text.StyledDocument; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.debugger.hexviewer.HexView; +import org.apache.pdfbox.debugger.streampane.tooltip.ToolTipController; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.util.Charsets; + +/** + * @author Khyrul Bashar + * + * A class that shows the COSStream. + */ +public class StreamPane implements ActionListener +{ + private static final StyleContext CONTEXT = StyleContext.getDefaultStyleContext(); + private static final Style OPERATOR_STYLE = CONTEXT.addStyle("operator", null); + private static final Style NUMBER_STYLE = CONTEXT.addStyle("number", null); + private static final Style STRING_STYLE = CONTEXT.addStyle("string", null); + private static final Style ESCAPE_STYLE = CONTEXT.addStyle("escape", null); + private static final Style NAME_STYLE = CONTEXT.addStyle("name", null); + private static final Style INLINE_IMAGE_STYLE = CONTEXT.addStyle("inline_image", null); + + static + { + StyleConstants.setForeground(OPERATOR_STYLE, new Color(25, 55, 156)); + StyleConstants.setForeground(NUMBER_STYLE, new Color(51, 86, 18)); + StyleConstants.setForeground(STRING_STYLE, new Color(128, 35, 32)); + StyleConstants.setForeground(ESCAPE_STYLE, new Color(179, 49, 36)); + StyleConstants.setForeground(NAME_STYLE, new Color(140, 38, 145)); + StyleConstants.setForeground(INLINE_IMAGE_STYLE, new Color(116, 113, 39)); + } + + private final JPanel panel; + private final HexView hexView; + private final JTabbedPane tabbedPane; + private final StreamPaneView view; + private final Stream stream; + private ToolTipController tTController; + private PDResources resources; + private final boolean isContentStream; + + /** + * Constructor. + * + * @param cosStream COSStream instance. + * @param isContentStream boolean instance. This says if a stream is content stream or not. + * @param isThumb This says if a stream is an thumbnail image or not. + * @param resourcesDic COSDictionary instance that holds the resource dictionary for the stream. + * @throws IOException if there is an I/O error during internal data transfer. + */ + public StreamPane(COSStream cosStream, boolean isContentStream, boolean isThumb, + COSDictionary resourcesDic) throws IOException + { + this.isContentStream = isContentStream; + + this.stream = new Stream(cosStream, isThumb); + if (resourcesDic != null) + { + resources = new PDResources(resourcesDic); + tTController = new ToolTipController(resources); + } + + panel = new JPanel(); + panel.setPreferredSize(new Dimension(300, 500)); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + + view = new StreamPaneView(); + hexView = new HexView(); + + if (stream.isImage()) + { + panel.add(createHeaderPanel(stream.getFilterList(), Stream.IMAGE, this)); + requestImageShowing(); + } + else + { + panel.add(createHeaderPanel(stream.getFilterList(), Stream.DECODED, this)); + requestStreamText(Stream.DECODED); + } + + tabbedPane = new JTabbedPane(); + if (stream.isImage()) + { + tabbedPane.add("Image view", view.getStreamPanel()); + } + else + { + tabbedPane.add("Text view", view.getStreamPanel()); + tabbedPane.add("Hex view", hexView.getPane()); + } + + panel.add(tabbedPane); + } + + public JComponent getPanel() + { + return panel; + } + + private JPanel createHeaderPanel(List availableFilters, String i, ActionListener actionListener) + { + JComboBox filters = new JComboBox<>(new Vector<>(availableFilters)); + filters.setSelectedItem(i); + filters.addActionListener(actionListener); + + JPanel headerPanel = new JPanel(new FlowLayout()); + headerPanel.add(filters); + + return headerPanel; + } + + @Override + public void actionPerformed(ActionEvent actionEvent) + { + if (actionEvent.getActionCommand().equals("comboBoxChanged")) + { + JComboBox comboBox = (JComboBox) actionEvent.getSource(); + String currentFilter = (String) comboBox.getSelectedItem(); + + try + { + if (currentFilter.equals(Stream.IMAGE)) + { + requestImageShowing(); + tabbedPane.removeAll(); + tabbedPane.add("Image view", view.getStreamPanel()); + return; + } + tabbedPane.removeAll(); + tabbedPane.add("Text view", view.getStreamPanel()); + tabbedPane.add("Hex view", hexView.getPane()); + requestStreamText(currentFilter); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + + private void requestImageShowing() throws IOException + { + if (stream.isImage()) + { + BufferedImage image; + synchronized (stream) + { + image = stream.getImage(resources); + } + if (image == null) + { + JOptionPane.showMessageDialog(panel, "image not available (filter missing?)"); + return; + } + view.showStreamImage(image); + } + } + + private void requestStreamText(String command) throws IOException + { + new DocumentCreator(command).execute(); + synchronized (stream) + { + InputStream is = stream.getStream(command); + if (is == null) + { + JOptionPane.showMessageDialog(panel, command + " text not available (filter missing?)"); + return; + } + hexView.changeData(IOUtils.toByteArray(is)); + } + } + + /** + * A SwingWorker extended class that convert the stream to text loads in a document. + */ + private final class DocumentCreator extends SwingWorker + { + private final String filterKey; + private int indent; + private boolean needIndent; + + private DocumentCreator(String filterKey) + { + this.filterKey = filterKey; + } + + @Override + protected StyledDocument doInBackground() + { + // default encoding to use when reading text base content + String encoding = "ISO-8859-1"; + synchronized (stream) + { + if (stream.isXmlMetadata()) { + encoding = "UTF-8"; + } + InputStream inputStream = stream.getStream(filterKey); + if (isContentStream && Stream.DECODED.equals(filterKey)) + { + StyledDocument document = getContentStreamDocument(inputStream); + if (document != null) + { + return document; + } + return getDocument(stream.getStream(filterKey), encoding); + } + return getDocument(inputStream, encoding); + } + } + + @Override + protected void done() + { + try + { + view.showStreamText(get(), tTController); + } + catch (InterruptedException | ExecutionException e) + { + e.printStackTrace(); + } + } + + private String getStringOfStream(InputStream in, String encoding) + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try + { + IOUtils.copy(in, baos); + return baos.toString(encoding); + } + catch (IOException e) + { + e.printStackTrace(); + return null; + } + } + + private StyledDocument getDocument(InputStream inputStream, String encoding) + { + StyledDocument docu = new DefaultStyledDocument(); + if (inputStream != null) + { + String data = getStringOfStream(inputStream, encoding); + try + { + docu.insertString(0, data, null); + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + } + return docu; + } + + private StyledDocument getContentStreamDocument(InputStream inputStream) + { + StyledDocument docu = new DefaultStyledDocument(); + + PDFStreamParser parser; + try + { + parser = new PDFStreamParser(IOUtils.toByteArray(inputStream)); + parser.parse(); + } + catch (IOException e) + { + return null; + } + + for (Object obj : parser.getTokens()) + { + writeToken(obj, docu); + } + return docu; + } + + private void writeToken(Object obj, StyledDocument docu) + { + try + { + if (obj instanceof Operator) + { + addOperators(obj, docu); + } + else + { + writeOperand(obj, docu); + } + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + } + + private void writeOperand(Object obj, StyledDocument docu) throws BadLocationException + { + writeIndent(docu); + + if (obj instanceof COSName) + { + String str = "/" + ((COSName) obj).getName(); + docu.insertString(docu.getLength(), str + " ", NAME_STYLE); + } + else if (obj instanceof COSBoolean) + { + String str = obj.toString(); + docu.insertString(docu.getLength(), str + " ", null); + } + else if (obj instanceof COSArray) + { + docu.insertString(docu.getLength(), "[ ", null); + for (COSBase elem : (COSArray) obj) + { + writeOperand(elem, docu); + } + docu.insertString(docu.getLength(), "] ", null); + } + else if (obj instanceof COSString) + { + docu.insertString(docu.getLength(), "(", null); + byte[] bytes = ((COSString) obj).getBytes(); + for (byte b : bytes) + { + int chr = b & 0xff; + if (chr < 0x20 || chr > 0x7e) + { + // non-printable ASCII is shown as an octal escape + String str = String.format("\\%03o", chr); + docu.insertString(docu.getLength(), str, ESCAPE_STYLE); + } + else if (chr == '(' || chr == ')' || chr == '\n' || chr == '\r' || + chr == '\t' || chr == '\b' || chr == '\f' || chr == '\\') + { + // PDF reserved characters must be escaped + String str = "\\" + (char)chr; + docu.insertString(docu.getLength(), str, ESCAPE_STYLE); + } + else + { + String str = "" + (char)chr; + docu.insertString(docu.getLength(), str, STRING_STYLE); + } + } + docu.insertString(docu.getLength(), ") ", null); + } + else if (obj instanceof COSNumber) + { + String str; + if (obj instanceof COSFloat) + { + str = Float.toString(((COSFloat) obj).floatValue()); + } + else + { + str = Integer.toString(((COSNumber) obj).intValue()); + } + docu.insertString(docu.getLength(), str + " ", NUMBER_STYLE); + } + else if (obj instanceof COSDictionary) + { + docu.insertString(docu.getLength(), "<< ", null); + COSDictionary dict = (COSDictionary) obj; + for (Map.Entry entry : dict.entrySet()) + { + writeOperand(entry.getKey(), docu); + writeOperand(entry.getValue(), docu); + } + docu.insertString(docu.getLength(), ">> ", null); + } + else + { + String str = obj.toString(); + str = str.substring(str.indexOf('{') + 1, str.length() - 1); + docu.insertString(docu.getLength(), str + " ", null); + } + } + + private void addOperators(Object obj, StyledDocument docu) throws BadLocationException + { + Operator op = (Operator) obj; + + if (op.getName().equals(OperatorName.END_TEXT) + || op.getName().equals(OperatorName.RESTORE) + || op.getName().equals(OperatorName.END_MARKED_CONTENT)) + { + indent--; + } + writeIndent(docu); + + if (op.getName().equals(OperatorName.BEGIN_INLINE_IMAGE)) + { + docu.insertString(docu.getLength(), OperatorName.BEGIN_INLINE_IMAGE + "\n", OPERATOR_STYLE); + COSDictionary dic = op.getImageParameters(); + for (COSName key : dic.keySet()) + { + Object value = dic.getDictionaryObject(key); + docu.insertString(docu.getLength(), "/" + key.getName() + " ", null); + writeToken(value, docu); + docu.insertString(docu.getLength(), "\n", null); + } + String imageString = new String(op.getImageData(), Charsets.ISO_8859_1); + docu.insertString(docu.getLength(), OperatorName.BEGIN_INLINE_IMAGE_DATA + "\n", INLINE_IMAGE_STYLE); + docu.insertString(docu.getLength(), imageString, null); + docu.insertString(docu.getLength(), "\n", null); + docu.insertString(docu.getLength(), OperatorName.END_INLINE_IMAGE + "\n", OPERATOR_STYLE); + } + else + { + String operator = ((Operator) obj).getName(); + docu.insertString(docu.getLength(), operator + "\n", OPERATOR_STYLE); + + // nested opening operators + if (op.getName().equals(OperatorName.BEGIN_TEXT) || + op.getName().equals(OperatorName.SAVE) || + op.getName().equals(OperatorName.BEGIN_MARKED_CONTENT) || + op.getName().equals(OperatorName.BEGIN_MARKED_CONTENT_SEQ)) + { + indent++; + } + } + needIndent = true; + } + + void writeIndent(StyledDocument docu) throws BadLocationException + { + if (needIndent) + { + for (int i = 0; i < indent; i++) + { + docu.insertString(docu.getLength(), " ", null); + } + needIndent = false; + } + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPaneView.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPaneView.java new file mode 100644 index 00000000000..d82a45ec97b --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPaneView.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.streampane; + +import java.awt.BorderLayout; +import java.awt.image.BufferedImage; +import javax.swing.JPanel; +import javax.swing.text.StyledDocument; + +import org.apache.pdfbox.debugger.streampane.tooltip.ToolTipController; + +/** + * @author Khyrul Bashar + */ +class StreamPaneView +{ + private final JPanel contentPanel; + + /** + * Constructor. + */ + StreamPaneView() + { + contentPanel = new JPanel(new BorderLayout()); + } + + /** + * This shows the stream in text for any of it's filtered or unfiltered version. + * @param document StyledDocument instance that holds the text. + * @param toolTipController ToolTipController instance. + */ + void showStreamText(StyledDocument document, ToolTipController toolTipController) + { + contentPanel.removeAll(); + StreamTextView textView = new StreamTextView(document, toolTipController); + contentPanel.add(textView.getView(), BorderLayout.CENTER); + contentPanel.validate(); + } + + + /** + * This shows the stream as image. + * @param image BufferedImage instance that holds the text. + */ + void showStreamImage(BufferedImage image) + { + contentPanel.removeAll(); + contentPanel.add(new StreamImageView(image).getView(), BorderLayout.CENTER); + contentPanel.validate(); + } + + public JPanel getStreamPanel() + { + return contentPanel; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamTextView.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamTextView.java new file mode 100644 index 00000000000..b0fbda09276 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamTextView.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane; + +import java.awt.Font; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; +import javax.swing.BoxLayout; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.SwingUtilities; +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; +import javax.swing.text.StyledDocument; + +import org.apache.pdfbox.debugger.PDFDebugger; +import org.apache.pdfbox.debugger.streampane.tooltip.ToolTipController; +import org.apache.pdfbox.debugger.ui.textsearcher.Searcher; + +/** + * @author Khyrul Bashar + * A class that provides the container for the texts when stream is shown in stream pane. + */ +class StreamTextView implements MouseMotionListener, AncestorListener +{ + private final ToolTipController tTController; + + private JPanel mainPanel; + private JTextPane textPane; + private Searcher searcher; + + /** + * Constructor. + * @param document StyledDocument instance which is supposed to be shown in the pane. + * @param controller ToolTipController instance. + */ + StreamTextView(StyledDocument document, ToolTipController controller) + { + tTController = controller; + initUI(document); + } + + private void initUI(StyledDocument document) + { + mainPanel = new JPanel(); + + textPane = new JTextPane(document); + textPane.addMouseMotionListener(this); + textPane.setFont(new Font("monospaced", Font.PLAIN, 13)); + searcher = new Searcher(textPane); + + JScrollPane scrollPane = new JScrollPane(textPane); + + BoxLayout boxLayout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS); + + mainPanel.setLayout(boxLayout); + + mainPanel.add(searcher.getSearchPanel()); + mainPanel.add(scrollPane); + + searcher.getSearchPanel().setVisible(false); + + mainPanel.addAncestorListener(this); + + } + + JComponent getView() + { + return mainPanel; + } + + @Override + public void mouseDragged(MouseEvent mouseEvent) + { + } + + @Override + public void mouseMoved(MouseEvent mouseEvent) + { + if (tTController != null) + { + int offset = textPane.viewToModel(mouseEvent.getPoint()); + textPane.setToolTipText(tTController.getToolTip(offset, textPane)); + } + } + + @Override + public void ancestorAdded(AncestorEvent ancestorEvent) + { + if (ancestorEvent.getAncestor().equals(mainPanel)) + { + PDFDebugger debugger = (PDFDebugger) SwingUtilities.getRoot(mainPanel); + debugger.getFindMenu().setEnabled(true); + searcher.addMenuListeners(debugger); + } + } + + @Override + public void ancestorRemoved(AncestorEvent ancestorEvent) + { + if (ancestorEvent.getAncestor().equals(mainPanel)) + { + PDFDebugger debugger = (PDFDebugger) SwingUtilities.getRoot(mainPanel); + debugger.getFindMenu().setEnabled(false); + searcher.removeMenuListeners(debugger); + } + } + + @Override + public void ancestorMoved(AncestorEvent ancestorEvent) + { + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/ColorToolTip.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/ColorToolTip.java new file mode 100644 index 00000000000..4453ae6a572 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/ColorToolTip.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.awt.Color; +import java.util.List; + +/** + * @author Khyrul Bashar + * An abstract class for tooltips of color operators. + */ +abstract class ColorToolTip implements ToolTip +{ + private String toolTipText; + /** + * provides the Hex value for a Color instance. + * @param color + * @return + */ + static String colorHexValue(Color color) + { + return String.format("%02x", color.getRed()) + String.format("%02x", color.getGreen()) + + String.format("%02x", color.getBlue()); + } + + /** + * Extract Color values from the row for which tooltip is going to be shown. + * @param rowtext String instance, + * @return float array containing color values. + */ + float[] extractColorValues(String rowtext) + { + List words = ToolTipController.getWords(rowtext); + words.remove(words.size()-1); + float[] values = new float[words.size()]; + int index = 0; + try + { + for (String word : words) + { + values[index++] = Float.parseFloat(word); + } + } + catch (NumberFormatException e) + { + return null; + } + return values; + } + + /** + * Create a html string that actually shows a colored rect. + * @param hexValue + * @return String instance, In html format. + */ + String getMarkUp(String hexValue) + { + return "\n" + + "\n" + + "
\n" + + ""; + } + + public void setToolTipText(String toolTip) + { + this.toolTipText = toolTip; + } + + @Override + public String getToolTipText() + { + return toolTipText; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/FontToolTip.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/FontToolTip.java new file mode 100644 index 00000000000..20c41a0f0ef --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/FontToolTip.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * @author Khyrul Bashar + * A class that provieds tooltip text for font. This shows the name of the font. + */ +final class FontToolTip implements ToolTip +{ + private String markup; + + /** + * Constructor. + * @param resources PDResources instance. Which corresponds the resource dictionary containing + * the concern font. + * @param rowText String instance of the tooltip row. + */ + FontToolTip(PDResources resources, String rowText) + { + initUI(extractFontReference(rowText), resources); + } + + private void initUI(String fontReferenceName, PDResources resources) + { + PDFont font = null; + for (COSName name: resources.getFontNames()) + { + if (name.getName().equals(fontReferenceName)) + { + try + { + font = resources.getFont(name); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + if (font != null) + { + markup = "" + font.getName() + ""; + } + } + + private String extractFontReference(String rowText) + { + return rowText.trim().split(" ")[0].substring(1); + } + + @Override + public String getToolTipText() + { + return markup; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/GToolTip.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/GToolTip.java new file mode 100644 index 00000000000..a24149d56c9 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/GToolTip.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.awt.Color; + +/** + * @author Khyrul Bashar + * A class that provide tooltip for G and g. + */ +final class GToolTip extends ColorToolTip +{ + /** + * Constructor. + * @param rowText String instance. + */ + GToolTip(String rowText) + { + createMarkUp(rowText); + } + + private void createMarkUp(String rowText) + { + float[] colorValues = extractColorValues(rowText); + if (colorValues != null) + { + Color color = new Color(colorValues[0], colorValues[0], colorValues[0]); + setToolTipText(getMarkUp(colorHexValue(color))); + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/KToolTip.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/KToolTip.java new file mode 100644 index 00000000000..a114f31971e --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/KToolTip.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.awt.Color; +import java.awt.color.ICC_ColorSpace; +import java.awt.color.ICC_Profile; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; + +/** + * @author Khyrul Bashar + * A class that provide tooltip for K and k. + */ +final class KToolTip extends ColorToolTip + +{ + /** + * Constructor. + * @param rowText String instance. + */ + KToolTip(String rowText) + { + createMarkUp(rowText); + } + + private void createMarkUp(String rowText) + { + float[] colorValues = extractColorValues(rowText); + if (colorValues != null) + { + try + { + float[] rgbValues = getICCColorSpace().toRGB(colorValues); + setToolTipText(getMarkUp(colorHexValue(new Color(rgbValues[0], rgbValues[1], rgbValues[2])))); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + + ICC_ColorSpace getICCColorSpace() throws IOException + { + // loads the ICC color profile for CMYK + ICC_Profile iccProfile = getICCProfile(); + if (iccProfile == null) + { + throw new IOException("Default CMYK color profile could not be loaded"); + } + + return new ICC_ColorSpace(iccProfile); + } + + ICC_Profile getICCProfile() throws IOException + { + // Adobe Acrobat uses "U.S. Web Coated (SWOP) v2" as the default + // CMYK profile, however it is not available under an open license. + // Instead, the "ISO Coated v2 300% (basICColor)" is used, which + // is an open alternative to the "ISO Coated v2 300% (ECI)" profile. + + String name = "/org/apache/pdfbox/resources/icc/ISOcoated_v2_300_bas.icc"; + + URL url = PDDeviceCMYK.class.getResource(name); + if (url == null) + { + throw new IOException("Error loading resource: " + name); + } + + try (InputStream input = url.openStream()) + { + return ICC_Profile.getInstance(input); + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/RGToolTip.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/RGToolTip.java new file mode 100644 index 00000000000..7f7919c653c --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/RGToolTip.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.awt.Color; + +/** + * @author Khyrul Bashar + * A class that provide tooltip for RG and rg. + */ +final class RGToolTip extends ColorToolTip +{ + /** + * Constructor. + * @param rowText String instance. + */ + RGToolTip(String rowText) + { + createMarkUp(rowText); + } + + private void createMarkUp(String rowText) + { + float[] rgbValues = extractColorValues(rowText); + if (rgbValues != null) + { + Color color = new Color(rgbValues[0], rgbValues[1], rgbValues[2]); + setToolTipText(getMarkUp(colorHexValue(color))); + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/SCNToolTip.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/SCNToolTip.java new file mode 100644 index 00000000000..160212948bd --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/SCNToolTip.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.awt.Color; +import java.io.IOException; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; + +/** + * @author Khyrul Bashar + * A class that provide tooltip for SCN and scn. + */ +final class SCNToolTip extends ColorToolTip +{ + /** + * Constructor. + * @param rowText String instance. + */ + SCNToolTip(PDResources resources, String colorSpaceName, String rowText) + { + createMarkUp(resources, colorSpaceName.substring(1).trim(), rowText); + } + + private void createMarkUp(PDResources resources, String colorSpaceName, String rowText) + { + PDColorSpace colorSpace = null; + try + { + colorSpace = resources.getColorSpace(COSName.getPDFName(colorSpaceName)); + } + catch (IOException e) + { + e.printStackTrace(); + } + if (colorSpace instanceof PDPattern) + { + setToolTipText("Pattern"); + return; + } + if (colorSpace != null) + { + try + { + float[] rgbValues = colorSpace.toRGB(extractColorValues(rowText)); + if (rgbValues != null) + { + Color color = new Color(rgbValues[0], rgbValues[1], rgbValues[2]); + setToolTipText(getMarkUp(colorHexValue(color))); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/ToolTipController.java b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/ToolTipController.java new file mode 100644 index 00000000000..54aeaca4a83 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/tooltip/ToolTipController.java @@ -0,0 +1,198 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.streampane.tooltip; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.text.BadLocationException; +import javax.swing.text.JTextComponent; +import javax.swing.text.Utilities; +import org.apache.pdfbox.pdmodel.PDResources; + +interface ToolTip +{ + String getToolTipText(); +} + +/** + * @author Khyrul Bashar + * A class that provieds the tooltip for an operator. + */ +public class ToolTipController +{ + private static final String FONT_OPERATOR = "Tf"; + private static final String STROKING_COLOR = "SCN"; + private static final String STROKING_COLOR_SPACE = "CS"; + private static final String NON_STROKING_COLOR_SPACE = "cs"; + private static final String NON_STROKING_COLOR = "scn"; + private static final String RGB_STROKING_COLOR = "RG"; + private static final String RGB_NON_STROKING_COLOR = "rg"; + private static final String CMYK_STROKING_COLOR = "K"; + private static final String CMYK_NON_STROKING_COLOR = "k"; + private static final String GRAY_STROKING_COLOR = "G"; + private static final String GRAY_NON_STROKING_COLOR = "g"; + + private final PDResources resources; + private JTextComponent textComponent; + + /** + * Constructor. + * @param resources PDResources instance. + */ + public ToolTipController(PDResources resources) + { + this.resources = resources; + } + + static List getWords(String str) + { + List words = new ArrayList<>(); + for (String string : str.trim().split(" ")) + { + string = string.trim(); + if (!string.isEmpty() && !string.equals("\n")) + { + words.add(string); + } + } + return words; + } + + /** + * Returns the tooltip text for the operator. null if there isn't any tooltip. + * @param offset The position of the mouse in the text component. + * @param textComponent JTextComponent instance. + * @return Tooltip text, String instance. + */ + public String getToolTip(int offset, JTextComponent textComponent) + { + this.textComponent = textComponent; + + String word = getWord(offset); + String rowText = getRowText(offset); + + if (word != null) + { + ToolTip toolTip; + switch (word) + { + case FONT_OPERATOR: + toolTip = new FontToolTip(resources, rowText); + return toolTip.getToolTipText(); + case STROKING_COLOR: + { + String colorSpaceName = findColorSpace(offset, STROKING_COLOR_SPACE); + if (colorSpaceName != null) + { + toolTip = new SCNToolTip(resources, colorSpaceName, rowText); + return toolTip.getToolTipText(); + } + break; + } + case NON_STROKING_COLOR: + { + String colorSpaceName = findColorSpace(offset, NON_STROKING_COLOR_SPACE); + if (colorSpaceName != null) + { + toolTip = new SCNToolTip(resources, colorSpaceName, rowText); + return toolTip.getToolTipText(); + } + break; + } + case RGB_STROKING_COLOR: + case RGB_NON_STROKING_COLOR: + toolTip = new RGToolTip(rowText); + return toolTip.getToolTipText(); + case CMYK_STROKING_COLOR: + case CMYK_NON_STROKING_COLOR: + toolTip = new KToolTip(rowText); + return toolTip.getToolTipText(); + case GRAY_STROKING_COLOR: + case GRAY_NON_STROKING_COLOR: + toolTip = new GToolTip(rowText); + return toolTip.getToolTipText(); + default: + break; + } + } + return null; + } + + private String findColorSpace(int offset, String colorSpaceType) + { + try + { + while (offset != -1) + { + offset = Utilities.getPositionAbove(textComponent, offset, 0); + String previousRowText = getRowText(offset); + if (previousRowText == null) + { + return null; + } + previousRowText = previousRowText.trim(); + if (isColorSpace(colorSpaceType, previousRowText)) + { + return previousRowText.split(" ")[0]; + } + } + } + catch (BadLocationException e) + { + e.printStackTrace(); + return null; + } + return null; + } + + private boolean isColorSpace(String colorSpaceType, String rowText) + { + List words = getWords(rowText); + return words.size() == 2 && words.get(1).equals(colorSpaceType); + } + + private String getWord(int offset) + { + try + { + int start = Utilities.getWordStart(textComponent, offset); + int end = Utilities.getWordEnd(textComponent, offset); + return textComponent.getDocument().getText(start, end - start + 1).trim(); + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + return null; + } + + private String getRowText(int offset) + { + try + { + int rowStart = Utilities.getRowStart(textComponent, offset); + int rowEnd = Utilities.getRowEnd(textComponent, offset); + return textComponent.getDocument().getText(rowStart, rowEnd - rowStart + 1); + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + return null; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/stringpane/StringPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/stringpane/StringPane.java new file mode 100644 index 00000000000..151e5e591e2 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/stringpane/StringPane.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.stringpane; + +import java.awt.Dimension; +import javax.swing.JComponent; +import javax.swing.JTabbedPane; +import javax.swing.JTextPane; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.debugger.hexviewer.HexView; + +/** + * @author Khyrul Bashar + */ +public class StringPane +{ + private static final String TEXT_TAB = "Text View"; + private static final String HEX_TAB = "Hex view"; + + private final JTabbedPane tabbedPane; + + public StringPane(COSString cosString) + { + tabbedPane = new JTabbedPane(); + tabbedPane.setPreferredSize(new Dimension(300, 500)); + tabbedPane.addTab(TEXT_TAB, createTextView(cosString)); + tabbedPane.addTab(HEX_TAB, createHexView(cosString)); + } + + private JTextPane createTextView(COSString cosString) + { + JTextPane textPane = new JTextPane(); + textPane.setText(getTextString(cosString)); + textPane.setEditable(false); + + return textPane; + } + + private JComponent createHexView(COSString cosString) + { + HexView hexView = new HexView(cosString.getBytes()); + return hexView.getPane(); + } + + private String getTextString(COSString cosString) + { + String text = cosString.getString(); + for (char c : text.toCharArray()) + { + if (Character.isISOControl(c)) + { + text = "<" + cosString.toHexString() + ">"; + break; + } + } + return "" + text; + } + + public JTabbedPane getPane() + { + return tabbedPane; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/treestatus/TreeStatus.java b/debugger/src/main/java/org/apache/pdfbox/debugger/treestatus/TreeStatus.java new file mode 100644 index 00000000000..2c991392d83 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/treestatus/TreeStatus.java @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.treestatus; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.tree.TreePath; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.debugger.ui.ArrayEntry; +import org.apache.pdfbox.debugger.ui.MapEntry; +import org.apache.pdfbox.debugger.ui.PageEntry; + +/** + * @author Khyrul Bashar + */ +public final class TreeStatus +{ + private Object rootNode; + + private TreeStatus() + { + } + + /** + * Constructor. + * + * @param rootNode the root node of the tree which will be used to construct a treepath from a + * tree status string. + */ + public TreeStatus(Object rootNode) + { + this.rootNode = rootNode; + } + + /** + * Provides status string for a TreePath instance. + * @param path TreePath instance. + * @return pathString. + */ + public String getStringForPath(TreePath path) + { + return generatePathString(path); + } + + /** + * Provides TreePath for a given status string. In case of invalid string returns null. + * @param statusString + * @return path. + */ + public TreePath getPathForString(String statusString) + { + return generatePath(statusString); + } + + /** + * Constructs a status string from the path. + * @param path + * @return the status string. + */ + private String generatePathString(TreePath path) + { + StringBuilder pathStringBuilder = new StringBuilder(); + while (path.getParentPath() != null) + { + Object object = path.getLastPathComponent(); + pathStringBuilder.insert(0, "/" + getObjectName(object)); + path = path.getParentPath(); + } + pathStringBuilder.delete(0, 1); + return pathStringBuilder.toString(); + } + + /** + * Constructs TreePath from Status String. + * @param pathString + * @return a TreePath, or null if there is an error. + */ + private TreePath generatePath(String pathString) + { + List nodes = parsePathString(pathString); + if (nodes == null) + { + return null; + } + Object obj = rootNode; + TreePath treePath = new TreePath(obj); + for (String node : nodes) + { + obj = searchNode(obj, node); + if (obj == null) + { + return null; + } + treePath = treePath.pathByAddingChild(obj); + } + return treePath; + } + + /** + * Get the object name of a tree node. If the given node of the tree is a MapEntry, its key is + * used as node identifier; if it is an ArrayEntry, then its index is used as identifier. + * + * @param treeNode node of a tree. + * @return the name of the node. + * @throws IllegalArgumentException if there is an unknown treeNode type. + */ + private String getObjectName(Object treeNode) + { + if (treeNode instanceof MapEntry) + { + MapEntry entry = (MapEntry) treeNode; + COSName key = entry.getKey(); + return key.getName(); + } + else if (treeNode instanceof ArrayEntry) + { + ArrayEntry entry = (ArrayEntry) treeNode; + return "[" + entry.getIndex() + "]"; + } + else if (treeNode instanceof PageEntry) + { + PageEntry entry = (PageEntry) treeNode; + return entry.getPath(); + } + throw new IllegalArgumentException("Unknown treeNode type: " + treeNode.getClass().getName()); + } + + /** + * Parses a string and lists all the nodes. + * + * @param path a tree path. + * @return a list of nodes, or null if there is an empty node. + */ + private List parsePathString(String path) + { + List nodes = new ArrayList<>(); + for (String node : path.split("/")) + { + node = node.trim(); + if (node.startsWith("[")) + { + node = node.replace("]", "").replace("[", ""); + } + node = node.trim(); + if (node.isEmpty()) + { + return null; + } + nodes.add(node); + } + return nodes; + } + + /** + * An object is searched in the tree structure using the identifiers parsed earlier step. + * @param obj + * @param searchStr + * @return + */ + private Object searchNode(Object obj, String searchStr) + { + if (obj instanceof MapEntry) + { + obj = ((MapEntry) obj).getValue(); + } + else if (obj instanceof ArrayEntry) + { + obj = ((ArrayEntry) obj).getValue(); + } + if (obj instanceof COSObject) + { + obj = ((COSObject) obj).getObject(); + } + if (obj instanceof COSDictionary) + { + COSDictionary dic = (COSDictionary) obj; + if (dic.containsKey(searchStr)) + { + MapEntry entry = new MapEntry(); + entry.setKey(COSName.getPDFName(searchStr)); + entry.setValue(dic.getDictionaryObject(searchStr)); + entry.setValue(dic.getItem(searchStr)); + return entry; + } + } + else if (obj instanceof COSArray) + { + int index = Integer.parseInt(searchStr); + COSArray array = (COSArray) obj; + if (index <= array.size() - 1) + { + ArrayEntry entry = new ArrayEntry(); + entry.setIndex(index); + entry.setValue(array.getObject(index)); + entry.setItem(array.get(index)); + return entry; + } + } + return null; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/treestatus/TreeStatusPane.java b/debugger/src/main/java/org/apache/pdfbox/debugger/treestatus/TreeStatusPane.java new file mode 100644 index 00000000000..2a291a80528 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/treestatus/TreeStatusPane.java @@ -0,0 +1,127 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.treestatus; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.JTree; +import javax.swing.border.BevelBorder; +import javax.swing.border.Border; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.TreePath; + +/** + * @author Khyrul Bashar + */ +public class TreeStatusPane implements TreeSelectionListener +{ + private TreeStatus statusObj; + private JTree tree; + + private JTextField statusField; + private JPanel panel; + private Border defaultBorder; + private Border errorBorder; + private final Action textInputAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + TreePath path = statusObj.getPathForString(statusField.getText()); + if (path != null) + { + tree.setSelectionPath(path); + tree.scrollPathToVisible(path); + tree.requestFocusInWindow(); + } + else + { + statusField.setBorder(errorBorder); + } + } + }; + + /** + * Constructor. + * @param targetTree The tree instance that this status pane will correspond. + */ + public TreeStatusPane(JTree targetTree) + { + tree = targetTree; + init(); + } + + private void init() + { + panel = new JPanel(new BorderLayout()); + statusField = new JTextField(); + statusField.setEditable(false); + panel.add(statusField); + defaultBorder = new BevelBorder(BevelBorder.LOWERED); + errorBorder = new BevelBorder(BevelBorder.LOWERED, Color.RED, Color.RED); + statusField.setAction(textInputAction); + tree.addTreeSelectionListener(this); + } + + /** + * Return the panel of this TreeStatusPane. + * @return JPanel instance. + */ + public JPanel getPanel() + { + return panel; + } + + /** + * In case of document changing this should be called to update TreeStatus value of the pane. + * @param statusObj TreeStatus instance. + */ + public void updateTreeStatus(TreeStatus statusObj) + { + statusField.setEditable(true); + this.statusObj = statusObj; + updateText(null); + } + + private void updateText(String statusString) + { + statusField.setText(statusString); + if (!statusField.getBorder().equals(defaultBorder)) + { + statusField.setBorder(defaultBorder); + } + } + + /** + * Tree selection change listener which updates status string. + * @param treeSelectionEvent + */ + + @Override + public void valueChanged(TreeSelectionEvent treeSelectionEvent) + { + TreePath path = treeSelectionEvent.getPath(); + updateText(statusObj.getStringForPath(path)); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ArrayEntry.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ArrayEntry.java new file mode 100644 index 00000000000..7f590acd00b --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ArrayEntry.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import org.apache.pdfbox.cos.COSBase; + +/** + * This is a simple class that will contain an index and a value. + * + * @author Ben Litchfield + */ +public class ArrayEntry +{ + private int index; + private COSBase value; + private COSBase item; + + /** + * This will get the value for this entry. + * + * @return The value for this entry. + */ + public COSBase getValue() + { + return value; + } + + /** + * This will get the value for this entry. + * + * @return The value for this entry. + */ + public COSBase getItem() + { + return item; + } + + /** + * This will set the value for this entry. + * + * @param val the new value for this entry. + */ + public void setValue(COSBase val) + { + this.value = val; + } + + /** + * This will set the value for this entry. + * + * @param val the new value for this entry. + */ + public void setItem(COSBase val) + { + this.item = val; + } + + /** + * This will get the index of the array entry. + * + * @return The 0-based index into the array + */ + public int getIndex() + { + return index; + } + + /** + * This will set the index value. + * + * @param i The new index value. + */ + public void setIndex(int i) + { + index = i; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java new file mode 100644 index 00000000000..2664926be0d --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java @@ -0,0 +1,164 @@ +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import org.apache.commons.logging.Log; + +/** + * Custom Log implementation which forwards to LogDialog. + * + * @author John Hewson + */ +public class DebugLog implements Log +{ + private final String name; + + // hardcoded, but kept to aid with debugging custom builds + private final boolean INFO = true; + private final boolean TRACE = false; + private final boolean DEBUG = false; + + public DebugLog(String name) + { + this.name = name; + } + + @Override + public void debug(Object o) + { + if (DEBUG) + { + LogDialog.instance().log(name, "debug", o, null); + } + } + + @Override + public void debug(Object o, Throwable throwable) + { + if (DEBUG) + { + LogDialog.instance().log(name, "debug", o, throwable); + } + } + + @Override + public void error(Object o) + { + LogDialog.instance().log(name, "error", o, null); + } + + @Override + public void error(Object o, Throwable throwable) + { + LogDialog.instance().log(name, "error", o, throwable); + } + + @Override + public void fatal(Object o) + { + LogDialog.instance().log(name, "fatal", o, null); + } + + @Override + public void fatal(Object o, Throwable throwable) + { + LogDialog.instance().log(name, "fatal", o, throwable); + } + + @Override + public void info(Object o) + { + if (INFO) + { + LogDialog.instance().log(name, "info", o, null); + } + } + + @Override + public void info(Object o, Throwable throwable) + { + if (INFO) + { + LogDialog.instance().log(name, "info", o, throwable); + } + } + + @Override + public boolean isDebugEnabled() + { + return DEBUG; + } + + @Override + public boolean isErrorEnabled() + { + return true; + } + + @Override + public boolean isFatalEnabled() + { + return true; + } + + @Override + public boolean isInfoEnabled() + { + return INFO; + } + + @Override + public boolean isTraceEnabled() + { + return TRACE; + } + + @Override + public boolean isWarnEnabled() + { + return true; + } + + @Override + public void trace(Object o) + { + if (TRACE) + { + LogDialog.instance().log(name, "trace", o, null); + } + } + + @Override + public void trace(Object o, Throwable throwable) + { + if (TRACE) + { + LogDialog.instance().log(name, "trace", o, throwable); + } + } + + @Override + public void warn(Object o) + { + LogDialog.instance().log(name, "warn", o, null); + } + + @Override + public void warn(Object o, Throwable throwable) + { + LogDialog.instance().log(name, "warn", o, throwable); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DocumentEntry.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DocumentEntry.java new file mode 100644 index 00000000000..8dd08cc49eb --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DocumentEntry.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.debugger.PDFDebugger; + +/** + * Represents an abstract view of a document in the tree view. + * + * @author John Hewson + */ +public class DocumentEntry +{ + private final PDDocument doc; + private final String filename; + + public DocumentEntry(PDDocument doc, String filename) + { + this.doc = doc; + this.filename = filename; + } + + public int getPageCount() + { + return doc.getPages().getCount(); + } + + public PageEntry getPage(int index) + { + PDPage page = doc.getPages().get(index); + String pageLabel = PDFDebugger.getPageLabel(doc, index); + return new PageEntry(page.getCOSObject(), index + 1, pageLabel); + } + + public int indexOf(PageEntry page) + { + return page.getPageNum() - 1; + } + + @Override + public String toString() + { + return filename; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ErrorDialog.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ErrorDialog.java new file mode 100644 index 00000000000..d984841f5db --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ErrorDialog.java @@ -0,0 +1,304 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.util.Arrays; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.KeyStroke; + +/** + * A dialog to display a runtime exception stack trace. + * + * @author Pinaki Poddar + * + * Modified from ErrorDialog.java and SwingHelper.java of the Apache OpenJPA + * jpa.tools.swing + * package. + * + */ +@SuppressWarnings("serial") +public class ErrorDialog extends JDialog +{ + private static final List FILTERS = Arrays.asList( + "java.awt.", + "javax.swing.", + "sun.reflect.", + "java.util.concurrent."); + private static final Dimension MESSAGE_SIZE = new Dimension(800, 200); + private static final Dimension STACKTRACE_SIZE = new Dimension(800, 300); + private static final Dimension TOTAL_SIZE = new Dimension(800, 500); + private static final int BORDER_SIZE = 20; + + private static final String NEWLINE = "\r\n"; + private static final String INDENT = " "; + + private boolean showingDetails; + private boolean isFiltering = true; + private JComponent message; + private JComponent main; + private JScrollPane details; + private JTextPane stacktrace; + private final Throwable error; + + /** + * Creates a modal dialog to display the given exception message. + * + * @param t the exception to display + */ + public ErrorDialog(Throwable t) + { + this(null, null, t); + } + + /** + * Creates a modal dialog to display the given exception message. + * + * @param owner if non-null, then the dialog is positioned (centered) w.r.t. this component + * @param t the exception to display + */ + public ErrorDialog(JComponent owner, Throwable t) + { + this(owner, null, t); + } + + /** + * Creates a modal dialog to display the given exception message. + * + * @param owner if non-null, then the dialog is positioned (centered) w.r.t. this component + * @param icon the icon to display + * @param t the exception to display + */ + public ErrorDialog(JComponent owner, Icon icon, Throwable t) + { + setTitle(t.getClass().getName()); + setModal(true); + if (icon instanceof ImageIcon) + { + setIconImage(((ImageIcon) icon).getImage()); + } + setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + error = t; + message = createErrorMessage(error); + main = createContent(); + getContentPane().add(main); + + pack(); + position(this, owner); + } + + /** + * Position the given component at the center of the given parent component or physical screen. + * + * @param c the component to be positioned + * @param parent the component whose center will match the center of the given component. If + * null, the given component will match the screen center. + * + */ + static void position(Component c, Component parent) + { + Dimension d = c.getPreferredSize(); + if (parent == null) + { + Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); + c.setLocation(s.width / 2 - d.width / 2, s.height / 2 - d.height / 2); + } + else + { + Point p = parent.getLocationOnScreen(); + int pw = parent.getWidth(); + int ph = parent.getHeight(); + c.setLocation(p.x + pw / 2 - d.width / 2, p.y + ph / 2 - d.height / 2); + } + } + + /** + * Creates the display with the top-level exception message followed by a pane (that toggles) + * for detailed stack traces. + */ + final JComponent createContent() + { + final JButton showDetails = new JButton("Show Details >>"); + showDetails.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + if (showingDetails) + { + main.remove(details); + main.validate(); + main.setPreferredSize(MESSAGE_SIZE); + } + else + { + if (details == null) + { + details = createDetailedMessage(error); + StringBuilder buffer = new StringBuilder(); + stacktrace.setText(generateStackTrace(error, buffer).toString()); + stacktrace.setCaretPosition(0); + stacktrace.setBackground(main.getBackground()); + stacktrace.setPreferredSize(STACKTRACE_SIZE); + } + main.add(details, BorderLayout.CENTER); + main.validate(); + main.setPreferredSize(TOTAL_SIZE); + } + showingDetails = !showingDetails; + showDetails.setText(showingDetails ? "<< Hide Details" : "Show Details >>"); + ErrorDialog.this.pack(); + } + }); + JPanel messagePanel = new JPanel(); + + final JCheckBox filter = new JCheckBox("Filter stack traces"); + filter.setSelected(isFiltering); + filter.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + isFiltering = filter.isSelected(); + StringBuilder buffer = new StringBuilder(); + stacktrace.setText(generateStackTrace(error, buffer).toString()); + stacktrace.setCaretPosition(0); + stacktrace.repaint(); + } + }); + message.setBackground(messagePanel.getBackground()); + JPanel buttonPanel = new JPanel(); + buttonPanel.add(Box.createHorizontalStrut(BORDER_SIZE)); + buttonPanel.add(showDetails); + buttonPanel.add(filter); + buttonPanel.add(Box.createHorizontalGlue()); + messagePanel.setLayout(new BorderLayout()); + messagePanel.setBorder(BorderFactory.createEmptyBorder(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE)); + messagePanel.add(message, BorderLayout.CENTER); + messagePanel.add(buttonPanel, BorderLayout.SOUTH); + messagePanel.setPreferredSize(MESSAGE_SIZE); + + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.add(messagePanel, BorderLayout.NORTH); + + // allow closing with ESC + ActionListener actionListener = new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + dispose(); + } + }; + KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); + panel.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW); + + return panel; + } + + /** + * Creates a non-editable widget to display the error message. + * + */ + final JComponent createErrorMessage(Throwable t) + { + String txt = t.getLocalizedMessage(); + JEditorPane msg = new JEditorPane(); + msg.setContentType("text/plain"); + msg.setEditable(false); + msg.setText(txt); + return msg; + } + + /** + * Creates a non-editable widget to display the detailed stack trace. + */ + JScrollPane createDetailedMessage(Throwable t) + { + stacktrace = new JTextPane(); + stacktrace.setEditable(false); + JScrollPane pane = new JScrollPane(stacktrace, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + return pane; + } + + /** + * Recursively print the stack trace on the given buffer. + */ + StringBuilder generateStackTrace(Throwable t, StringBuilder buffer) + { + buffer.append(t.getClass().getName()).append(": ").append(t.getMessage()).append(NEWLINE); + buffer.append(toString(t.getStackTrace())); + Throwable cause = t.getCause(); + if (cause != null && !cause.equals(t)) + { + buffer.append("Caused by: "); + generateStackTrace(cause, buffer); + } + return buffer; + } + + StringBuilder toString(StackTraceElement[] traces) + { + StringBuilder err = new StringBuilder(); + for (StackTraceElement e : traces) + { + if (!isFiltering || !isSuppressed(e.getClassName())) + { + String str = e.toString(); + err.append(INDENT).append(str).append(NEWLINE); + } + } + return err; + } + + /** + * Affirms if the error messages from the given class name is to be suppressed. + */ + private boolean isSuppressed(String className) + { + for (String s : FILTERS) + { + if (className.startsWith(s)) + { + return true; + } + } + return false; + } +} diff --git a/src/org/pdfbox/util/ExtensionFileFilter.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ExtensionFileFilter.java similarity index 90% rename from src/org/pdfbox/util/ExtensionFileFilter.java rename to debugger/src/main/java/org/apache/pdfbox/debugger/ui/ExtensionFileFilter.java index 26a965f2815..52a7f9f047b 100644 --- a/src/org/pdfbox/util/ExtensionFileFilter.java +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ExtensionFileFilter.java @@ -14,22 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.util; +package org.apache.pdfbox.debugger.ui; import java.io.File; + import javax.swing.filechooser.FileFilter; /** * A FileFilter that will only accept files of a certain extension. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class ExtensionFileFilter extends FileFilter { private String[] extensions = null; - private String desc; + private final String desc; /** * Constructor. @@ -46,8 +46,13 @@ public ExtensionFileFilter( String[] ext, String description ) /** * {@inheritDoc} */ + @Override public boolean accept(File pathname) { + if (pathname.isDirectory()) + { + return true; + } boolean acceptable = false; String name = pathname.getName().toUpperCase(); for( int i=0; !acceptable && i infos = new ArrayList<>(); + + if (exceptionCount > 0) + { + infos.add(exceptionCount + " exception" + (errorCount > 1 ? "s" : "")); + } + + if (fatalCount > 0) + { + infos.add(errorCount + " error" + (errorCount > 1 ? "s" : "")); + } + + if (errorCount > 0) + { + infos.add(errorCount + " error" + (errorCount > 1 ? "s" : "")); + } + + if (warnCount > 0) + { + infos.add(warnCount + " warning" + (warnCount > 1 ? "s" : "")); + } + + if (otherCount > 0) + { + infos.add(otherCount + " message" + (otherCount > 1 ? "s" : "")); + } + + String info = ""; + for (String str : infos) + { + if (info.length() > 0) + { + info += ", "; + } + info += str; + } + + logLabel.setText(info); + } + + public void clear() + { + fatalCount = 0; + errorCount = 0; + warnCount = 0; + otherCount = 0; + exceptionCount = 0; + textPane.setText(""); + logLabel.setText(""); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/MapEntry.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/MapEntry.java new file mode 100644 index 00000000000..246194b58e3 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/MapEntry.java @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + + +/** + * This is a simple class that will contain a key and a value. + * + * @author Ben Litchfield + */ +public class MapEntry +{ + private COSName key; + private COSBase value; + private COSBase item; + + /** + * Get the key for this entry. + * + * @return The entry's key. + */ + public COSName getKey() + { + return key; + } + + /** + * This will set the key for this entry. + * + * @param k the new key for this entry. + */ + public void setKey(COSName k) + { + key = k; + } + + /** + * This will get the value for this entry. + * + * @return The value for this entry. + */ + public COSBase getValue() + { + return value; + } + + /** + * This will get the value for this entry. + * + * @return The value for this entry. + */ + public COSBase getItem() + { + return item; + } + + /** + * This will set the value for this entry. + * + * @param val the new value for this entry. + */ + public void setValue(COSBase val) + { + this.value = val; + } + + /** + * This will set the value for this entry. + * + * @param val the new value for this entry. + */ + public void setItem(COSBase val) + { + this.item = val; + } + + /** + * This will output a string representation of this class. + * + * @return A string representation of this class. + */ + @Override + public String toString() + { + if (key != null) + { + return key.getName(); + } + return "(null)"; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/MenuBase.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/MenuBase.java new file mode 100644 index 00000000000..41ed2eb202f --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/MenuBase.java @@ -0,0 +1,82 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.awt.Component; +import java.awt.event.ActionListener; +import javax.swing.JMenu; +import javax.swing.JMenuItem; + +/** + * + * @author Khyrul Bashar + * @author Tilman Hausherr + * + * Base class. + */ +abstract class MenuBase +{ + private JMenu menu = null; + + final void setMenu(JMenu menu) + { + this.menu = menu; + } + + /** + * Provide the JMenu instance of the ZoomMenu. + * + * @return JMenu instance. + */ + public JMenu getMenu() + { + return this.menu; + } + + /** + * Set if the menu should be enabled or disabled. + * + * @param isEnable boolean instance. + */ + public void setEnableMenu(boolean isEnable) + { + menu.setEnabled(isEnable); + } + + /** + * Add the ActionListener for the menuitems. + * + * @param listener ActionListener. + */ + public void addMenuListeners(ActionListener listener) + { + for (Component comp : menu.getMenuComponents()) + { + JMenuItem menuItem = (JMenuItem) comp; + removeActionListeners(menuItem); + menuItem.addActionListener(listener); + } + } + + private void removeActionListeners(JMenuItem menuItem) + { + for (ActionListener listener : menuItem.getActionListeners()) + { + menuItem.removeActionListener(listener); + } + } + +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/OSXAdapter.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/OSXAdapter.java new file mode 100644 index 00000000000..45d21b5ccf8 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/OSXAdapter.java @@ -0,0 +1,333 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* + * This file includes code under the following terms: + * + * Version: 2.0 + * + * Disclaimer: IMPORTANT: This Apple software is supplied to you by + * Apple Inc. ("Apple") in consideration of your agreement to the + * following terms, and your use, installation, modification or + * redistribution of this Apple software constitutes acceptance of these + * terms. If you do not agree with these terms, please do not use, + * install, modify or redistribute this Apple software. + * + * In consideration of your agreement to abide by the following terms, and + * subject to these terms, Apple grants you a personal, non-exclusive + * license, under Apple's copyrights in this original Apple software (the + * "Apple Software"), to use, reproduce, modify and redistribute the Apple + * Software, with or without modifications, in source and/or binary forms; + * provided that if you redistribute the Apple Software in its entirety and + * without modifications, you must retain this notice and the following + * text and disclaimers in all such redistributions of the Apple Software. + * Neither the name, trademarks, service marks or logos of Apple Inc. + * may be used to endorse or promote products derived from the Apple + * Software without specific prior written permission from Apple. Except + * as expressly stated in this notice, no other rights or licenses, express + * or implied, are granted by Apple herein, including but not limited to + * any patent rights that may be infringed by your derivative works or by + * other works in which the Apple Software may be incorporated. + * + * The Apple Software is provided by Apple on an "AS IS" basis. APPLE + * MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + * THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + * OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + * + * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + * MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + * AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + * STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Copyright (C) 2003-2007 Apple, Inc., All Rights Reserved + */ + +package org.apache.pdfbox.debugger.ui; + +import java.awt.Desktop; +import java.io.File; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.StringTokenizer; +import java.util.List; + +/** + * Hooks existing preferences/about/quit functionality from an + * existing Java app into handlers for the Mac OS X application menu. + * Uses a Proxy object to dynamically implement the + * com.apple.eawt.ApplicationListener interface and register it with the + * com.apple.eawt.Application object. This allows the complete project + * to be both built and run on any platform without any stubs or + * placeholders. Useful for developers looking to implement Mac OS X + * features while supporting multiple platforms with minimal impact. + */ +public class OSXAdapter implements InvocationHandler +{ + + protected Object targetObject; + protected Method targetMethod; + protected String proxySignature; + + static Object macOSXApplication; + + private static boolean isMinJdk9() + { + // strategy from lucene-solr/lucene/core/src/java/org/apache/lucene/util/Constants.java + String version = System.getProperty("java.specification.version"); + final StringTokenizer st = new StringTokenizer(version, "."); + try + { + int major = Integer.parseInt(st.nextToken()); + int minor = 0; + if (st.hasMoreTokens()) + { + minor = Integer.parseInt(st.nextToken()); + } + return major > 1 || (major == 1 && minor >= 9); + } + catch (NumberFormatException nfe) + { + // maybe some new numbering scheme in the 22nd century + return true; + } + } + + // Pass this method an Object and Method equipped to perform application shutdown logic + // The method passed should return a boolean stating whether or not the quit should occur + public static void setQuitHandler(final Object target, final Method quitHandler) + { + if (isMinJdk9()) + { + try + { + Desktop desktopObject = Desktop.getDesktop(); + Class filesHandlerClass = Class.forName("java.awt.desktop.QuitHandler"); + final Method setQuitHandlerMethod = desktopObject.getClass().getMethod("setQuitHandler", filesHandlerClass); + Object osxAdapterProxy = Proxy.newProxyInstance(OSXAdapter.class.getClassLoader(), + new Class[] + { + filesHandlerClass + }, new InvocationHandler() + { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable + { + if ("handleQuitRequestWith".equals(method.getName())) + { + // We just call our own quit handler + quitHandler.invoke(target); + } + return null; + } + }); + setQuitHandlerMethod.invoke(desktopObject, osxAdapterProxy); + } + catch (Exception e) + { + e.printStackTrace(); + } + return; + } + setHandler(new OSXAdapter("handleQuit", target, quitHandler)); + } + + // Pass this method an Object and Method equipped to display application info + // They will be called when the About menu item is selected from the application menu + public static void setAboutHandler(Object target, Method aboutHandler) { + boolean enableAboutMenu = (target != null && aboutHandler != null); + if (enableAboutMenu) { + setHandler(new OSXAdapter("handleAbout", target, aboutHandler)); + } + // If we're setting a handler, enable the About menu item by calling + // com.apple.eawt.Application reflectively + try { + Method enableAboutMethod = macOSXApplication.getClass().getDeclaredMethod("setEnabledAboutMenu", boolean.class); + enableAboutMethod.invoke(macOSXApplication, Boolean.valueOf(enableAboutMenu)); + } catch (Exception ex) { + System.err.println("OSXAdapter could not access the About Menu"); + throw new RuntimeException(ex); + } + } + + // Pass this method an Object and a Method equipped to display application options + // They will be called when the Preferences menu item is selected from the application menu + public static void setPreferencesHandler(Object target, Method prefsHandler) { + boolean enablePrefsMenu = (target != null && prefsHandler != null); + if (enablePrefsMenu) { + setHandler(new OSXAdapter("handlePreferences", target, prefsHandler)); + } + // If we're setting a handler, enable the Preferences menu item by calling + // com.apple.eawt.Application reflectively + try { + Method enablePrefsMethod = macOSXApplication.getClass().getDeclaredMethod("setEnabledPreferencesMenu", boolean.class); + enablePrefsMethod.invoke(macOSXApplication, enablePrefsMenu); + } catch (Exception ex) { + System.err.println("OSXAdapter could not access the About Menu"); + throw new RuntimeException(ex); + } + } + + // Pass this method an Object and a Method equipped to handle document events from the Finder + // Documents are registered with the Finder via the CFBundleDocumentTypes dictionary in the + // application bundle's Info.plist + public static void setFileHandler(Object target, Method fileHandler) + { + if (isMinJdk9()) + { + try + { + Desktop desktopObject = Desktop.getDesktop(); + Class filesHandlerClass = Class.forName("java.awt.desktop.OpenFilesHandler"); + Method setOpenFileHandlerMethod = desktopObject.getClass().getMethod("setOpenFileHandler", filesHandlerClass); + Object osxAdapterProxy = Proxy.newProxyInstance(OSXAdapter.class.getClassLoader(), + new Class[] + { + filesHandlerClass + }, new OSXAdapter("openFiles", target, fileHandler) + { + // Override OSXAdapter.callTarget to send information on the + // file to be opened + @Override + public boolean callTarget(Object openFilesEvent) + { + if (openFilesEvent != null) + { + try + { + Method getFilesMethod = openFilesEvent.getClass().getDeclaredMethod("getFiles", + (Class[]) null); + @SuppressWarnings("unchecked") + List files = (List) getFilesMethod.invoke(openFilesEvent, + (Object[]) null); + this.targetMethod.invoke(this.targetObject, files.get(0).getAbsolutePath()); + } + catch (Exception ex) + { + throw new RuntimeException(ex); + } + } + return true; + } + }); + setOpenFileHandlerMethod.invoke(desktopObject, osxAdapterProxy); + } + catch (Exception e) + { + e.printStackTrace(); + } + return; + } + /* JDK <= 1.8, using Apple classes */ + setHandler(new OSXAdapter("handleOpenFile", target, fileHandler) { + // Override OSXAdapter.callTarget to send information on the + // file to be opened + @Override + public boolean callTarget(Object appleEvent) { + if (appleEvent != null) { + try { + Method getFilenameMethod = appleEvent.getClass().getDeclaredMethod("getFilename", (Class[])null); + String filename = (String) getFilenameMethod.invoke(appleEvent, (Object[])null); + this.targetMethod.invoke(this.targetObject, filename); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + return true; + } + }); + } + + // setHandler creates a Proxy object from the passed OSXAdapter and adds it as an ApplicationListener + public static void setHandler(OSXAdapter adapter) { + try { + Class applicationClass = Class.forName("com.apple.eawt.Application"); + if (macOSXApplication == null) { + macOSXApplication = applicationClass.getDeclaredConstructor((Class[])null).newInstance((Object[])null); + } + Class applicationListenerClass = Class.forName("com.apple.eawt.ApplicationListener"); + Method addListenerMethod = applicationClass.getDeclaredMethod("addApplicationListener", applicationListenerClass); + // Create a proxy object around this handler that can be reflectively added as an Apple ApplicationListener + Object osxAdapterProxy = Proxy.newProxyInstance(OSXAdapter.class.getClassLoader(), new Class[]{applicationListenerClass}, adapter); + addListenerMethod.invoke(macOSXApplication, osxAdapterProxy); + } catch (ClassNotFoundException cnfe) { + System.err.println("This version of Mac OS X does not support the Apple EAWT. ApplicationEvent handling has been disabled (" + cnfe + ")"); + } catch (Exception ex) { // Likely a NoSuchMethodException or an IllegalAccessException loading/invoking eawt.Application methods + System.err.println("Mac OS X Adapter could not talk to EAWT:"); + throw new RuntimeException(ex); + } + } + + // Each OSXAdapter has the name of the EAWT method it intends to listen for (handleAbout, for example), + // the Object that will ultimately perform the task, and the Method to be called on that Object + protected OSXAdapter(String proxySignature, Object target, Method handler) { + this.proxySignature = proxySignature; + this.targetObject = target; + this.targetMethod = handler; + } + + // Override this method to perform any operations on the event + // that comes with the various callbacks + // See setFileHandler above for an example + public boolean callTarget(Object appleEvent) throws InvocationTargetException, IllegalAccessException { + Object result = targetMethod.invoke(targetObject, (Object[])null); + if (result == null) { + return true; + } + return Boolean.valueOf(result.toString()); + } + + // InvocationHandler implementation + // This is the entry point for our proxy object; it is called every time an ApplicationListener method is invoked + public Object invoke (Object proxy, Method method, Object[] args) throws Throwable { + if (isCorrectMethod(method, args)) { + boolean handled = callTarget(args[0]); + setApplicationEventHandled(args[0], handled); + } + // All of the ApplicationListener methods are void; return null regardless of what happens + return null; + } + + // Compare the method that was called to the intended method when the OSXAdapter instance was created + // (e.g. handleAbout, handleQuit, handleOpenFile, etc.) + protected boolean isCorrectMethod(Method method, Object[] args) { + return (targetMethod != null && proxySignature.equals(method.getName()) && args.length == 1); + } + + // It is important to mark the ApplicationEvent as handled and cancel the default behavior + // This method checks for a boolean result from the proxy method and sets the event accordingly + protected void setApplicationEventHandled(Object event, boolean handled) { + if (event != null) { + try { + Method setHandledMethod = event.getClass().getDeclaredMethod("setHandled", boolean.class); + // If the target method returns a boolean, use that as a hint + setHandledMethod.invoke(event, Boolean.valueOf(handled)); + } catch (Exception ex) { + System.err.println("OSXAdapter was unable to handle an ApplicationEvent: " + event); + throw new RuntimeException(ex); + } + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PDFTreeCellRenderer.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PDFTreeCellRenderer.java new file mode 100644 index 00000000000..ee9c4e01d1d --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PDFTreeCellRenderer.java @@ -0,0 +1,365 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.awt.Component; +import java.awt.Graphics; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import javax.swing.ImageIcon; +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeCellRenderer; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; + +/** + * A class to render tree cells for the pdfviewer. + * + * @author Ben Litchfield + */ +public class PDFTreeCellRenderer extends DefaultTreeCellRenderer +{ + private static final ImageIcon ICON_ARRAY = new ImageIcon(getImageUrl("array")); + private static final ImageIcon ICON_BOOLEAN = new ImageIcon(getImageUrl("boolean")); + private static final ImageIcon ICON_DICT = new ImageIcon(getImageUrl("dict")); + private static final ImageIcon ICON_HEX = new ImageIcon(getImageUrl("hex")); + private static final ImageIcon ICON_INDIRECT = new ImageIcon(getImageUrl("indirect")); + private static final ImageIcon ICON_INTEGER = new ImageIcon(getImageUrl("integer")); + private static final ImageIcon ICON_NAME = new ImageIcon(getImageUrl("name")); + private static final ImageIcon ICON_NULL = new ImageIcon(getImageUrl("null")); + private static final ImageIcon ICON_REAL = new ImageIcon(getImageUrl("real")); + private static final ImageIcon ICON_STREAM_DICT = new ImageIcon(getImageUrl("stream-dict")); + private static final ImageIcon ICON_STRING = new ImageIcon(getImageUrl("string")); + private static final ImageIcon ICON_PDF = new ImageIcon(getImageUrl("pdf")); + private static final ImageIcon ICON_PAGE = new ImageIcon(getImageUrl("page")); + + private static URL getImageUrl(String name) + { + String fullName = "/org/apache/pdfbox/debugger/" + name + ".png"; + return PDFTreeCellRenderer.class.getResource(fullName); + } + + @Override + public Component getTreeCellRendererComponent( + JTree tree, + Object nodeValue, + boolean isSelected, + boolean expanded, + boolean leaf, + int row, + boolean componentHasFocus) + { + Component component = super.getTreeCellRendererComponent(tree, + toTreeObject(nodeValue), + isSelected, expanded, leaf, row, componentHasFocus); + + setIcon(lookupIconWithOverlay(nodeValue)); + + return component; + } + + private Object toTreeObject(Object nodeValue) + { + Object result = nodeValue; + if (nodeValue instanceof MapEntry || nodeValue instanceof ArrayEntry) + { + String key; + Object object; + Object value; + COSBase item; + if (nodeValue instanceof MapEntry) + { + MapEntry entry = (MapEntry) nodeValue; + key = entry.getKey().getName(); + object = toTreeObject(entry.getValue()); + value = entry.getValue(); + item = entry.getItem(); + } + else + { + ArrayEntry entry = (ArrayEntry) nodeValue; + key = "" + entry.getIndex(); + object = toTreeObject(entry.getValue()); + value = entry.getValue(); + item = entry.getItem(); + } + + String stringResult = key; + if (object instanceof String && ((String)object).length() > 0) + { + stringResult += ": " + object; + if (item instanceof COSObject) + { + COSObject indirect = (COSObject)item; + stringResult += " [" + indirect.getObjectNumber() + " " + + indirect.getGenerationNumber() + " R]"; + } + stringResult += toTreePostfix(value); + + } + result = stringResult; + } + else if (nodeValue instanceof COSBoolean) + { + result = "" + ((COSBoolean) nodeValue).getValue(); + } + else if (nodeValue instanceof COSFloat) + { + result = "" + ((COSFloat) nodeValue).floatValue(); + } + else if (nodeValue instanceof COSInteger) + { + result = "" + ((COSInteger) nodeValue).intValue(); + } + else if (nodeValue instanceof COSString) + { + String text = ((COSString) nodeValue).getString(); + // display unprintable strings as hex + for (char c : text.toCharArray()) + { + if (Character.isISOControl(c)) + { + text = "<" + ((COSString) nodeValue).toHexString() + ">"; + break; + } + } + result = text; + } + else if (nodeValue instanceof COSName) + { + result = ((COSName) nodeValue).getName(); + } + else if (nodeValue instanceof COSNull || nodeValue == null) + { + result = ""; + } + else if (nodeValue instanceof COSDictionary) + { + COSDictionary dict = (COSDictionary) nodeValue; + if (COSName.XREF.equals(dict.getCOSName(COSName.TYPE))) + { + result = ""; + } + else + { + result = "(" + dict.size() + ")"; + } + } + else if (nodeValue instanceof COSArray) + { + COSArray array = (COSArray) nodeValue; + result = "(" + array.size() + ")"; + } + else if (nodeValue instanceof DocumentEntry) + { + result = nodeValue.toString(); + } + return result; + } + + private String toTreePostfix(Object nodeValue) + { + if (nodeValue instanceof COSDictionary) + { + StringBuilder sb = new StringBuilder(); + + COSDictionary dict = (COSDictionary)nodeValue; + + if (COSName.ANNOT.equals(dict.getCOSName(COSName.TYPE)) + && COSName.WIDGET.equals(dict.getCOSName(COSName.SUBTYPE)) || + dict.containsKey(COSName.T) && dict.containsKey(COSName.KIDS)) + { + String name = dict.getString(COSName.T); + if (name != null) + { + sb.append(" Name: "); + sb.append(name); + sb.append(' '); + } + } + + if (dict.containsKey(COSName.TYPE)) + { + COSName type = dict.getCOSName(COSName.TYPE); + if (type != null) + { + sb.append(" /T:").append(type.getName()); + } + } + + if (dict.containsKey(COSName.SUBTYPE)) + { + COSName subtype = dict.getCOSName(COSName.SUBTYPE); + if (subtype != null) + { + sb.append(" /S:").append(subtype.getName()); + } + } + return sb.toString(); + } + else + { + return ""; + } + } + + private ImageIcon lookupIconWithOverlay(Object nodeValue) + { + ImageIcon icon = lookupIcon(nodeValue); + boolean isIndirect = false; + boolean isStream = false; + + if (nodeValue instanceof MapEntry) + { + MapEntry entry = (MapEntry) nodeValue; + if (entry.getItem() instanceof COSObject) + { + isIndirect = true; + isStream = entry.getValue() instanceof COSStream; + } + } + else if (nodeValue instanceof ArrayEntry) + { + ArrayEntry entry = (ArrayEntry) nodeValue; + if (entry.getItem() instanceof COSObject) + { + isIndirect = true; + isStream = entry.getValue() instanceof COSStream; + } + } + + if (isIndirect && !isStream) + { + OverlayIcon overlay = new OverlayIcon(icon); + overlay.add(ICON_INDIRECT); + return overlay; + } + return icon; + } + + private ImageIcon lookupIcon(Object nodeValue) + { + if (nodeValue instanceof MapEntry) + { + MapEntry entry = (MapEntry) nodeValue; + return lookupIcon(entry.getValue()); + } + else if (nodeValue instanceof ArrayEntry) + { + ArrayEntry entry = (ArrayEntry) nodeValue; + return lookupIcon(entry.getValue()); + } + else if (nodeValue instanceof COSBoolean) + { + return ICON_BOOLEAN; + } + else if (nodeValue instanceof COSFloat) + { + return ICON_REAL; + } + else if (nodeValue instanceof COSInteger) + { + return ICON_INTEGER; + } + else if (nodeValue instanceof COSString) + { + String text = ((COSString) nodeValue).getString(); + // display unprintable strings as hex + for (char c : text.toCharArray()) + { + if (Character.isISOControl(c)) + { + return ICON_HEX; + } + } + return ICON_STRING; + } + else if (nodeValue instanceof COSName) + { + return ICON_NAME; + } + else if (nodeValue instanceof COSNull || nodeValue == null) + { + return ICON_NULL; + } + else if (nodeValue instanceof COSStream) + { + return ICON_STREAM_DICT; + } + else if (nodeValue instanceof COSDictionary) + { + return ICON_DICT; + } + else if (nodeValue instanceof COSArray) + { + return ICON_ARRAY; + } + else if (nodeValue instanceof DocumentEntry) + { + return ICON_PDF; + } + else if (nodeValue instanceof PageEntry) + { + return ICON_PAGE; + } + else + { + return null; + } + } + + /** + * An ImageIcon which allows other ImageIcon overlays. + */ + private static class OverlayIcon extends ImageIcon + { + private final ImageIcon base; + private final List overlays; + + OverlayIcon(ImageIcon base) + { + super(base.getImage()); + this.base = base; + this.overlays = new ArrayList<>(); + } + + void add(ImageIcon overlay) + { + overlays.add(overlay); + } + + @Override + public synchronized void paintIcon(Component c, Graphics g, int x, int y) + { + base.paintIcon(c, g, x, y); + for (ImageIcon icon: overlays) + { + icon.paintIcon(c, g, x, y); + } + } + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PDFTreeModel.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PDFTreeModel.java new file mode 100644 index 00000000000..c39cd5810de --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PDFTreeModel.java @@ -0,0 +1,348 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +/** + * A tree model that uses a cos document. + * + * + * @author wurtz + * @author Ben Litchfield + */ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.swing.event.TreeModelListener; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.PDDocument; + +/** + * A class to model a PDF document as a tree structure. + * + * @author Ben Litchfield + */ +public class PDFTreeModel implements TreeModel +{ + private Object root; + + /** + * constructor. + */ + public PDFTreeModel() + { + //default constructor + } + + /** + * Constructor to take a document. + * + * @param doc The document to display in the tree. + */ + public PDFTreeModel(PDDocument doc) + { + root = doc.getDocument().getTrailer(); + } + + /** + * Constructor to take a document. + * + * @param docEntry The document to display in the tree. + */ + public PDFTreeModel(DocumentEntry docEntry) + { + root = docEntry; + } + + /** + * Adds a listener for the TreeModelEvent + * posted after the tree changes. + * + * @param l the listener to add + * @see #removeTreeModelListener + * + */ + @Override + public void addTreeModelListener(TreeModelListener l) + { + //required for interface + } + + /** + * Returns the child of parent at index index in the parent's child + * array. parent must be a node previously obtained from this data source. This + * should not return null if index is a valid index for + * parent (that is index >= 0 && + * index < getChildCount(parent)). + * + * @param parent a node in the tree, obtained from this data source + * @param index The index into the parent object to location the child object. + * @return the child of parent at index index + * @throws IllegalArgumentException if an unknown unknown COS type is passed as parent + * parameter. + */ + @Override + public Object getChild(Object parent, int index) + { + Object retval = null; + if( parent instanceof COSArray ) + { + ArrayEntry entry = new ArrayEntry(); + entry.setIndex( index ); + entry.setValue( ((COSArray)parent).getObject(index) ); + entry.setItem(((COSArray) parent).get(index)); + retval = entry; + } + else if( parent instanceof COSDictionary ) + { + COSDictionary dict = (COSDictionary)parent; + List keys = new ArrayList<>(dict.keySet()); + Collections.sort( keys ); + COSName key = keys.get( index ); + COSBase value = dict.getDictionaryObject(key); + MapEntry entry = new MapEntry(); + entry.setKey( key ); + entry.setValue( value ); + entry.setItem(dict.getItem(key)); + retval = entry; + } + else if( parent instanceof MapEntry ) + { + retval = getChild( ((MapEntry)parent).getValue(), index ); + } + else if( parent instanceof ArrayEntry ) + { + retval = getChild( ((ArrayEntry)parent).getValue(), index ); + } + else if( parent instanceof COSDocument ) + { + retval = ((COSDocument)parent).getObjects().get( index ); + } + else if( parent instanceof DocumentEntry) + { + retval = ((DocumentEntry)parent).getPage(index); + } + else if( parent instanceof PageEntry) + { + retval = getChild(((PageEntry)parent).getDict(), index); + } + else if( parent instanceof COSObject ) + { + retval = ((COSObject)parent).getObject(); + } + else + { + throw new IllegalArgumentException("Unknown COS type " + parent.getClass().getName()); + } + return retval; + } + + /** Returns the number of children of parent. + * Returns 0 if the node + * is a leaf or if it has no children. parent must be a node + * previously obtained from this data source. + * + * @param parent a node in the tree, obtained from this data source + * @return the number of children of the node parent + * + */ + @Override + public int getChildCount(Object parent) + { + int retval = 0; + if( parent instanceof COSArray ) + { + retval = ((COSArray)parent).size(); + } + else if( parent instanceof COSDictionary ) + { + retval = ((COSDictionary)parent).size(); + } + else if( parent instanceof MapEntry ) + { + retval = getChildCount(((MapEntry) parent).getValue()); + } + else if( parent instanceof ArrayEntry ) + { + retval = getChildCount(((ArrayEntry) parent).getValue()); + } + else if( parent instanceof COSDocument ) + { + retval = ((COSDocument)parent).getObjects().size(); + } + else if( parent instanceof DocumentEntry ) + { + retval = ((DocumentEntry)parent).getPageCount(); + } + else if( parent instanceof PageEntry) + { + retval = getChildCount(((PageEntry) parent).getDict()); + } + else if( parent instanceof COSObject ) + { + retval = 1; + } + return retval; + } + + /** + * Returns the index of child in parent. If parent is null or + * child is null, returns -1. + * + * @param parent a node in the tree, obtained from this data source + * @param child the node we are interested in + * @return the index of the child in the parent, or -1 if either child or + * parent are null + * @throws IllegalArgumentException if an unknown unknown COS type is passed as parent parameter. + */ + @Override + public int getIndexOfChild(Object parent, Object child) + { + int retval = -1; + if( parent != null && child != null ) + { + if( parent instanceof COSArray ) + { + COSArray array = (COSArray)parent; + if( child instanceof ArrayEntry ) + { + ArrayEntry arrayEntry = (ArrayEntry)child; + retval = arrayEntry.getIndex(); + } + else + { + retval = array.indexOf( (COSBase)child ); + } + } + else if( parent instanceof COSDictionary ) + { + MapEntry entry = (MapEntry)child; + COSDictionary dict = (COSDictionary)parent; + List keys = new ArrayList<>(dict.keySet()); + Collections.sort( keys ); + for( int i=0; retval == -1 && inull + * only if the tree has no nodes. + * + * @return the root of the tree + * + */ + @Override + public Object getRoot() + { + return root; + } + + /** Returns true if node is a leaf. + * It is possible for this method to return false + * even if node has no children. + * A directory in a filesystem, for example, + * may contain no files; the node representing + * the directory is not a leaf, but it also has no children. + * + * @param node a node in the tree, obtained from this data source + * @return true if node is a leaf + * + */ + @Override + public boolean isLeaf(Object node) + { + boolean isLeaf = !(node instanceof COSDictionary || + node instanceof COSArray || + node instanceof COSDocument || + node instanceof DocumentEntry || + node instanceof PageEntry || + node instanceof COSObject || + (node instanceof MapEntry && !isLeaf(((MapEntry)node).getValue()) ) || + (node instanceof ArrayEntry && !isLeaf(((ArrayEntry)node).getValue()) )); + return isLeaf; + } + + /** Removes a listener previously added with + * addTreeModelListener. + * + * @see #addTreeModelListener + * @param l the listener to remove + * + */ + + @Override + public void removeTreeModelListener(TreeModelListener l) + { + //required for interface + } + + /** Messaged when the user has altered the value for the item identified + * by path to newValue. + * If newValue signifies a truly new value + * the model should post a treeNodesChanged event. + * + * @param path path to the node that the user has altered + * @param newValue the new value from the TreeCellEditor + * + */ + @Override + public void valueForPathChanged(TreePath path, Object newValue) + { + //required for interface + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PageEntry.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PageEntry.java new file mode 100644 index 00000000000..2011be41b3e --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/PageEntry.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * Represents an abstract view of a page in the tree view. + * + * @author John Hewson + */ +public class PageEntry +{ + private final COSDictionary dict; + private final int pageNum; + private final String pageLabel; + + public PageEntry(COSDictionary page, int pageNum, String pageLabel) + { + dict = page; + this.pageNum = pageNum; + this.pageLabel = pageLabel; + } + + public COSDictionary getDict() + { + return dict; + } + + public int getPageNum() + { + return pageNum; + } + + @Override + public String toString() + { + return "Page: " + pageNum + (pageLabel == null ? "" : " - " + pageLabel); + } + + public String getPath() + { + StringBuilder sb = new StringBuilder(); + sb.append("Root/Pages"); + + COSDictionary node = dict; + while (node.containsKey(COSName.PARENT)) + { + COSBase base = node.getDictionaryObject(COSName.PARENT); + if (!(base instanceof COSDictionary)) + { + return ""; + } + COSDictionary parent = (COSDictionary) base; + base = parent.getDictionaryObject(COSName.KIDS); + if (!(base instanceof COSArray)) + { + return ""; + } + COSArray kids = (COSArray) base; + int idx = kids.indexOfObject(node); + sb.append("/Kids/[").append(idx).append("]"); + node = parent; + } + return sb.toString(); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ReaderBottomPanel.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ReaderBottomPanel.java new file mode 100644 index 00000000000..80f13ac6b46 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ReaderBottomPanel.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.awt.BorderLayout; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Window; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; + +/** + * A panel to display at the bottom of the window for status and other stuff. + * + * @author Ben Litchfield + */ +public class ReaderBottomPanel extends JPanel +{ + private JLabel statusLabel = null; + private JLabel logLabel = null; + + public ReaderBottomPanel() + { + BorderLayout layout = new BorderLayout(); + this.setLayout(layout); + + statusLabel = new JLabel(); + statusLabel.setText("Ready"); + this.add(statusLabel, BorderLayout.WEST); + + logLabel = new JLabel(); + logLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); + logLabel.addMouseListener(new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + Window viewer = LogDialog.instance().getOwner(); + + // show the log window + LogDialog.instance().setSize(800, 400); + LogDialog.instance().setVisible(true); + LogDialog.instance().setLocation(viewer.getLocationOnScreen().x + viewer.getWidth() / 2, + viewer.getLocationOnScreen().y + viewer.getHeight() / 2); + } + }); + this.add(logLabel, BorderLayout.EAST); + + this.setBorder(new EmptyBorder(0, 5, 0, 5)); + this.setPreferredSize(new Dimension(1000, 24)); + } + + public JLabel getStatusLabel() + { + return statusLabel; + } + + public JLabel getLogLabel() + { + return logLabel; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java new file mode 100644 index 00000000000..c6630ae92a2 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RecentFiles.java @@ -0,0 +1,205 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.List; +import java.util.Queue; +import java.util.prefs.Preferences; + +/** + * A class to save recent file history in preference using java Preference api. + */ +public class RecentFiles +{ + private static final String KEY = "recent_files_"; + private static final String PATH_KEY = "recent_files_%d_%d"; + private static final String PIECES_LENGTH_KEY = "recent_files_%d_length"; + private static final String HISTORY_LENGTH = "history_length"; + + private final Preferences pref; + private Queue filePaths; + private final int maximum; + + /** + * Constructor. + * + * @param className the class for which this Recentfiles object is created and it will be used + * to create preference instance. + * @param maximumFile the number of recent files to remember. + */ + public RecentFiles(Class className, int maximumFile) + { + this.maximum = maximumFile; + this.pref = Preferences.userNodeForPackage(className); + filePaths = readHistoryFromPref(); + if (filePaths == null) + { + filePaths = new ArrayDeque<>(); + } + } + + /** + * Clear the previous recent file history. + */ + public void removeAll() + { + filePaths.clear(); + } + + /** + * Check if file history is empty. + * + * @return if history is empty return true otherwise return false. + */ + public boolean isEmpty() + { + return filePaths.isEmpty(); + } + + /** + * Add a new file in recent file history. + * + * @param path path to the file. this path means File#getPath() method returned String. + */ + public void addFile(String path) + { + if (filePaths.size() >= maximum + 1 && path != null) + { + filePaths.remove(); + } + + filePaths.add(path); + } + + /** + * Remove a file from recent file history. + * + * @param path path string to the file. this path means File#getPath() method returned String. + */ + public void removeFile(String path) + { + if (filePaths.contains(path)) + { + filePaths.remove(path); + } + } + + /** + * This gives the file in descending order where order is according to the time it is added. + * This checks for file's existence in file history. + * + * @return return the file paths in a List. + */ + public List getFiles() + { + if (!isEmpty()) + { + List files = new ArrayList<>(); + for (String path : filePaths) + { + File file = new File(path); + if (file.exists()) + { + files.add(path); + } + } + if (files.size() > maximum) + { + files.remove(0); + } + return files; + } + return null; + } + + /** + * This method save the present recent file history in the preference. To get the recent file + * history in next session this method must be called. + * + * @throws IOException if saving in preference doesn't success. + */ + public void close() throws IOException + { + writeHistoryToPref(filePaths); + } + + private String[] breakString(String fullPath) + { + int allowedStringLength = Preferences.MAX_VALUE_LENGTH; + List pieces = new ArrayList<>(); + int beginIndex = 0; + int remainingLength = fullPath.length(); + int endIndex = 0; + while (remainingLength > 0) + { + endIndex += remainingLength >= allowedStringLength ? allowedStringLength : remainingLength; + pieces.add(fullPath.substring(beginIndex, endIndex)); + beginIndex = endIndex; + remainingLength = fullPath.length() - endIndex; + } + return pieces.toArray(new String[pieces.size()]); + } + + private void writeHistoryToPref(Queue filePaths) + { + if (filePaths.isEmpty()) + { + return; + } + Preferences node = pref.node(KEY); + node.putInt(HISTORY_LENGTH, filePaths.size()); + int fileCount = 1; + for (String path : filePaths) + { + String[] pieces = breakString(path); + node.putInt(String.format(PIECES_LENGTH_KEY, fileCount), pieces.length); + for (int i = 0; i < pieces.length; i++) + { + node.put(String.format(PATH_KEY, fileCount, i), pieces[i]); + } + fileCount++; + } + } + + private Queue readHistoryFromPref() + { + Preferences node = pref.node(KEY); + int historyLength = node.getInt(HISTORY_LENGTH, 0); + if (historyLength == 0) + { + return null; + } + Queue history = new ArrayDeque<>(); + + for (int i = 1; i <= historyLength; i++) + { + int totalPieces = node.getInt(String.format(PIECES_LENGTH_KEY, i), 0); + StringBuilder stringBuilder = new StringBuilder(); + for (int j = 0; j < totalPieces; j++) + { + String piece = node.get(String.format(PATH_KEY, i, j), ""); + stringBuilder.append(piece); + } + history.add(stringBuilder.toString()); + } + return history; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RotationMenu.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RotationMenu.java new file mode 100644 index 00000000000..6b4e90011f5 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/RotationMenu.java @@ -0,0 +1,170 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui; + +import javax.swing.ButtonGroup; +import javax.swing.JMenu; +import javax.swing.JRadioButtonMenuItem; + +/** + * @author Khyrul Bashar + * @author Tilman Hausherr + * + * A singleton class that provides rotation menu which can be used to show rotation menu in the menubar. + * To act upon the menu item selection user of the class must add ActionListener which will check for + * the action command and act accordingly. + */ +public final class RotationMenu extends MenuBase +{ + public static final String ROTATE_0_DEGREES = "0°"; + public static final String ROTATE_90_DEGREES = "90°"; + public static final String ROTATE_180_DEGREES = "180°"; + public static final String ROTATE_270_DEGREES = "270°"; + + private static RotationMenu instance; + private JRadioButtonMenuItem rotate0Item; + private JRadioButtonMenuItem rotate90Item; + private JRadioButtonMenuItem rotate180Item; + private JRadioButtonMenuItem rotate270Item; + + /** + * Constructor. + */ + private RotationMenu() + { + setMenu(createRotationMenu()); + } + + /** + * Provides the RotationMenu instance. + * @return RotationMenu instance. + */ + public static RotationMenu getInstance() + { + if (instance == null) + { + instance = new RotationMenu(); + } + return instance; + } + + /** + * Set the rotation selection. + * @param selection String instance. + */ + public void setRotationSelection(String selection) + { + if (ROTATE_0_DEGREES.equals(selection)) + { + rotate0Item.setSelected(true); + } + else if (ROTATE_90_DEGREES.equals(selection)) + { + rotate90Item.setSelected(true); + } + else if (ROTATE_180_DEGREES.equals(selection)) + { + rotate180Item.setSelected(true); + } + else if (ROTATE_270_DEGREES.equals(selection)) + { + rotate270Item.setSelected(true); + } + else + { + throw new IllegalArgumentException(); + } + } + + public static boolean isRotationMenu(String actionCommand) + { + return ROTATE_0_DEGREES.equals(actionCommand) || ROTATE_90_DEGREES.equals(actionCommand) || + ROTATE_180_DEGREES.equals(actionCommand) || ROTATE_270_DEGREES.equals(actionCommand); + } + + public static int getRotationDegrees() + { + if (instance.rotate90Item.isSelected()) + { + return 90; + } + if (instance.rotate180Item.isSelected()) + { + return 180; + } + if (instance.rotate270Item.isSelected()) + { + return 270; + } + return 0; + } + + public static int getRotationDegrees(String actionCommand) + { + if (ROTATE_0_DEGREES.equals(actionCommand)) + { + return 0; + } + else if (ROTATE_90_DEGREES.equals(actionCommand)) + { + return 90; + } + else if (ROTATE_180_DEGREES.equals(actionCommand)) + { + return 180; + } + else if (ROTATE_270_DEGREES.equals(actionCommand)) + { + return 270; + } + else + { + throw new IllegalArgumentException(); + } + } + + private JMenu createRotationMenu() + { + JMenu menu = new JMenu(); + menu.setText("Rotation"); + + rotate0Item = new JRadioButtonMenuItem(); + rotate90Item = new JRadioButtonMenuItem(); + rotate180Item = new JRadioButtonMenuItem(); + rotate270Item = new JRadioButtonMenuItem(); + rotate0Item.setSelected(true); + + ButtonGroup bg = new ButtonGroup(); + bg.add(rotate0Item); + bg.add(rotate90Item); + bg.add(rotate180Item); + bg.add(rotate270Item); + + rotate0Item.setText(ROTATE_0_DEGREES); + rotate90Item.setText(ROTATE_90_DEGREES); + rotate180Item.setText(ROTATE_180_DEGREES); + rotate270Item.setText(ROTATE_270_DEGREES); + + menu.add(rotate0Item); + menu.add(rotate90Item); + menu.add(rotate180Item); + menu.add(rotate270Item); + + return menu; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java new file mode 100644 index 00000000000..f07ae2a1c54 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java @@ -0,0 +1,397 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.debugger.treestatus.TreeStatus; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.PDStream; + +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.JTree; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.tree.TreePath; +import java.awt.Component; +import java.awt.Desktop; +import java.awt.Point; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Khyrul Bashar + * + * A customized tree for PDFDebugger. + */ +public class Tree extends JTree +{ + private final JPopupMenu treePopupMenu; + private final Component parent; + private final Object rootNode; + + /** + * Constructor. + * @param parentComponent the main UI where the Tree resides. + */ + public Tree(Component parentComponent) + { + treePopupMenu = new JPopupMenu(); + setComponentPopupMenu(treePopupMenu); + parent = parentComponent; + rootNode = this.getModel().getRoot(); + } + + @Override + public Point getPopupLocation(MouseEvent event) + { + if (event != null) + { + TreePath path = getClosestPathForLocation(event.getX(), event.getY()); + if (path == null) + { + return null; + } + setSelectionPath(path); + treePopupMenu.removeAll(); + addPopupMenuItems(path); + return event.getPoint(); + } + return null; + } + + /** + * Produce the popup menu items depending on the node of a certain TreePath. + * @param nodePath is instance of TreePath of the specified Node. + */ + private void addPopupMenuItems(TreePath nodePath) + { + Object obj = nodePath.getLastPathComponent(); + + treePopupMenu.add(getTreePathMenuItem(nodePath)); + + if (obj instanceof MapEntry) + { + obj = ((MapEntry) obj).getValue(); + } + else if (obj instanceof ArrayEntry) + { + obj = ((ArrayEntry) obj).getValue(); + } + + if (obj instanceof COSStream) + { + treePopupMenu.addSeparator(); + + COSStream stream = (COSStream) obj; + treePopupMenu.add(getStreamSaveMenu(stream, nodePath)); + + if (stream.getFilters() != null) + { + if (stream.getFilters() instanceof COSArray && ((COSArray) stream.getFilters()).size() >= 2) + { + for (JMenuItem menuItem : getPartiallyDecodedStreamSaveMenu(stream)) + { + treePopupMenu.add(menuItem); + } + } + treePopupMenu.add(getRawStreamSaveMenu(stream)); + } + + JMenuItem open = getFileOpenMenu(stream, nodePath); + if (open != null) + { + treePopupMenu.addSeparator(); + treePopupMenu.add(open); + } + } + } + + /** + * Produce the JMenuItem that gives way to copy tree path string to clipboard + * @param path the TreePath instance + * @return Menu Item + */ + private JMenuItem getTreePathMenuItem(final TreePath path) + { + JMenuItem copyPathMenuItem = new JMenuItem("Copy Tree Path"); + copyPathMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(new StringSelection(new TreeStatus(rootNode).getStringForPath(path)), null); + } + }); + return copyPathMenuItem; + } + + /** + * Produce JMenuItem that saves the raw stream + * @param cosStream stream to save + * @return JMenuItem for saving the raw stream + */ + private JMenuItem getRawStreamSaveMenu(final COSStream cosStream) + { + JMenuItem saveMenuItem = new JMenuItem("Save Raw Stream (" + getFilters(cosStream) + ") As..."); + saveMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + try + { + byte[] bytes = IOUtils.toByteArray(cosStream.createRawInputStream()); + saveStream(bytes, null, null); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + }); + return saveMenuItem; + } + + /** + * Returns the filters used by the given stream. + */ + private String getFilters(COSStream cosStream) + { + StringBuilder sb = new StringBuilder(); + COSBase filters = cosStream.getFilters(); + if (filters != null) + { + if (filters instanceof COSName) + { + sb.append(((COSName) filters).getName()); + } + else if (filters instanceof COSArray) + { + COSArray filterArray = (COSArray) filters; + for (int i = 0; i < filterArray.size(); i++) + { + if (i > 0) + { + sb.append(", "); + } + sb.append(((COSName) filterArray.get(i)).getName()); + } + } + } + return sb.toString(); + } + + /** + * Produce JMenuItem that saves the stream + * @param cosStream stream to save + * @return JMenuItem for saving stream + */ + private JMenuItem getStreamSaveMenu(final COSStream cosStream, final TreePath nodePath) + { + // set file extension based on stream type + final String extension = getFileExtensionForStream(cosStream, nodePath); + final FileFilter fileFilter; + final String format; + + if (extension != null) + { + switch (extension) + { + case "pdb": + fileFilter = new FileNameExtensionFilter("Type 1 Font (*.pfb)", "pfb"); + break; + case "ttf": + fileFilter = new FileNameExtensionFilter("TrueType Font (*.ttf)", "ttf"); + break; + case "cff": + fileFilter = new FileNameExtensionFilter("Compact Font Format (*.cff)", "cff"); + break; + case "otf": + fileFilter = new FileNameExtensionFilter("OpenType Font (*.otf)", "otf"); + break; + default: + fileFilter = null; + break; + } + format = " " + extension.toUpperCase(); + } + else + { + fileFilter = null; + format = ""; + } + + JMenuItem saveMenuItem = new JMenuItem("Save Stream As" + format + "..."); + saveMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + try + { + byte[] bytes = IOUtils.toByteArray(cosStream.createInputStream()); + saveStream(bytes, fileFilter, extension); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + }); + return saveMenuItem; + } + + /** + * Returns the recommended file extension for the given cos stream. + */ + private String getFileExtensionForStream(final COSStream cosStream, final TreePath nodePath) + { + String name = nodePath.getLastPathComponent().toString(); + switch (name) + { + case "FontFile": + return "pfb"; + case "FontFile2": + return "ttf"; + case "FontFile3": + return cosStream.getCOSName(COSName.SUBTYPE) == COSName.OPEN_TYPE ? "otf" : "cff"; + default: + return null; + } + } + + /** + * Produce JMenuItem that opens the stream with the system's default app. + */ + private JMenuItem getFileOpenMenu(final COSStream cosStream, final TreePath nodePath) + { + // if we know the file type, create a system open menu + final String extension = getFileExtensionForStream(cosStream, nodePath); + if (extension == null) + { + return null; + } + + JMenuItem openMenuItem = new JMenuItem("Open with Default Application"); + openMenuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + try + { + byte[] bytes = IOUtils.toByteArray(cosStream.createInputStream()); + File temp = File.createTempFile("pdfbox", "." + extension); + temp.deleteOnExit(); + + try (FileOutputStream outputStream = new FileOutputStream(temp)) + { + outputStream.write(bytes); + + Desktop.getDesktop().open(temp); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + } + }); + return openMenuItem; + } + + /** + * produce possible partially decoded stream saving menu items + * @param cosStream stream to save + * @return JMenuItems for saving partially decoded streams + */ + private List getPartiallyDecodedStreamSaveMenu(final COSStream cosStream) + { + List menuItems = new ArrayList<>(); + PDStream stream = new PDStream(cosStream); + + List filters = stream.getFilters(); + + for (int i = filters.size() - 1; i >= 1; i--) + { + menuItems.add(getPartialStreamSavingMenuItem(i, stream)); + } + return menuItems; + } + + private JMenuItem getPartialStreamSavingMenuItem(final int indexOfStopFilter, final PDStream stream) + { + List filters = stream.getFilters(); + + final List stopFilters = new ArrayList<>(1); + stopFilters.add(filters.get(indexOfStopFilter).getName()); + + StringBuilder nameListBuilder = new StringBuilder(); + for (int i = indexOfStopFilter; i < filters.size(); i++) + { + nameListBuilder.append(filters.get(i).getName()).append(" & "); + } + nameListBuilder.delete(nameListBuilder.lastIndexOf("&"), nameListBuilder.length()); + JMenuItem menuItem = new JMenuItem("Keep " + nameListBuilder.toString() + "..."); + + menuItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + try + { + InputStream data = stream.createInputStream(stopFilters); + saveStream(IOUtils.toByteArray(data), null, null); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + }); + return menuItem; + } + + /** + * Save the stream. + * @param bytes byte array of the stream. + * @param filter an optional FileFilter + * @throws IOException if there is an error in creation of the file. + */ + private void saveStream(byte[] bytes, FileFilter filter, String extension) throws IOException + { + FileOpenSaveDialog saveDialog = new FileOpenSaveDialog(parent, filter); + saveDialog.saveFile(bytes, extension); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ViewMenu.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ViewMenu.java new file mode 100644 index 00000000000..23931da9328 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ViewMenu.java @@ -0,0 +1,207 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenu; +import javax.swing.JMenuItem; + +import org.apache.pdfbox.debugger.PDFDebugger; + +public class ViewMenu extends MenuBase +{ + private static ViewMenu instance; + + private static final String SHOW_TEXT_STRIPPER = "Show TextStripper TextPositions"; + private static final String SHOW_TEXT_STRIPPER_BEADS = "Show TextStripper Beads"; + private static final String SHOW_FONT_BBOX = "Show Approximate Text Bounds"; + private static final String SHOW_GLYPH_BOUNDS = "Show Glyph Bounds"; + private static final String ALLOW_SUBSAMPLING = "Allow subsampling"; + + private JMenuItem viewModeItem; + private JCheckBoxMenuItem showTextStripper; + private JCheckBoxMenuItem showTextStripperBeads; + private JCheckBoxMenuItem showFontBBox; + private JCheckBoxMenuItem showGlyphBounds; + private JCheckBoxMenuItem allowSubsampling; + + private final PDFDebugger pdfDebugger; + + /** + * Constructor. + */ + private ViewMenu(PDFDebugger pdfDebugger) + { + this.pdfDebugger = pdfDebugger; + setMenu(createViewMenu()); + } + + /** + * Provides the ViewMenu instance. + * + * @param pdfDebugger PDFDebugger instance. + * + * @return ViewMenu instance. + */ + public static ViewMenu getInstance(PDFDebugger pdfDebugger) + { + if (instance == null) + { + instance = new ViewMenu(pdfDebugger); + } + return instance; + } + + /** + * Test if the one of the rendering options has been selected + * + * @param actionCommand the actioCommand of the menu event + * @return true if the actionCommand matches one of the rendering options + */ + public static boolean isRenderingOptions(String actionCommand) + { + return SHOW_TEXT_STRIPPER.equals(actionCommand) || + SHOW_TEXT_STRIPPER_BEADS.equals(actionCommand) || + SHOW_FONT_BBOX.equals(actionCommand) || + SHOW_GLYPH_BOUNDS.equals(actionCommand) || + ALLOW_SUBSAMPLING.equals(actionCommand); + } + + /** + * State if the TextStripper TextPositions shall be shown. + * + * @return the selection state + */ + public static boolean isShowTextStripper() + { + return instance.showTextStripper.isSelected(); + } + + /** + * State if the article beads shall be shown. + * + * @return the selection state + */ + public static boolean isShowTextStripperBeads() + { + return instance.showTextStripperBeads.isSelected(); + } + + /** + * State if the fonts bounding box shall be shown. + * + * @return the selection state + */ + public static boolean isShowFontBBox() + { + return instance.showFontBBox.isSelected(); + } + + /** + * State if the bounds of individual glyphs shall be shown. + * + * @return the selection state + */ + public static boolean isShowGlyphBounds() + { + return instance.showGlyphBounds.isSelected(); + } + + /** + * State if subsampling for image rendering shall be used. + * + * @return the selection state + */ + public static boolean isAllowSubsampling() + { + return instance.allowSubsampling.isSelected(); + } + + private JMenu createViewMenu() + { + JMenu viewMenu = new JMenu("View"); + viewMenu.setMnemonic('V'); + + if (pdfDebugger.isPageMode()) + { + viewModeItem = new JMenuItem("Show Internal Structure"); + } + else + { + viewModeItem = new JMenuItem("Show Pages"); + } + viewModeItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + if (pdfDebugger.isPageMode()) + { + viewModeItem.setText("Show Pages"); + pdfDebugger.setPageMode(false); + } + else + { + viewModeItem.setText("Show Internal Structure"); + pdfDebugger.setPageMode(true); + } + if (pdfDebugger.hasDocument()) + { + pdfDebugger.initTree(); + } + } + }); + viewMenu.add(viewModeItem); + + ZoomMenu zoomMenu = ZoomMenu.getInstance(); + zoomMenu.setEnableMenu(false); + viewMenu.add(zoomMenu.getMenu()); + + RotationMenu rotationMenu = RotationMenu.getInstance(); + rotationMenu.setEnableMenu(false); + viewMenu.add(rotationMenu.getMenu()); + + viewMenu.addSeparator(); + + showTextStripper = new JCheckBoxMenuItem(SHOW_TEXT_STRIPPER); + showTextStripper.setEnabled(false); + viewMenu.add(showTextStripper); + + showTextStripperBeads = new JCheckBoxMenuItem(SHOW_TEXT_STRIPPER_BEADS); + showTextStripperBeads.setEnabled(false); + viewMenu.add(showTextStripperBeads); + + showFontBBox = new JCheckBoxMenuItem(SHOW_FONT_BBOX); + showFontBBox.setEnabled(false); + viewMenu.add(showFontBBox); + + showGlyphBounds = new JCheckBoxMenuItem(SHOW_GLYPH_BOUNDS); + showGlyphBounds.setEnabled(false); + viewMenu.add(showGlyphBounds); + + viewMenu.addSeparator(); + + allowSubsampling = new JCheckBoxMenuItem(ALLOW_SUBSAMPLING); + allowSubsampling.setEnabled(false); + viewMenu.add(allowSubsampling); + + return viewMenu; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ZoomMenu.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ZoomMenu.java new file mode 100644 index 00000000000..274dc2d88bf --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ZoomMenu.java @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.debugger.ui; + +import java.awt.Component; +import java.util.Arrays; +import javax.swing.ButtonGroup; +import javax.swing.JMenu; +import javax.swing.JRadioButtonMenuItem; + +/** + * @author Khyrul Bashar + * + * A singleton class that provides zoom menu which can be used to show zoom menu in the menubar. To + * act upon the menu item selection user of the class must add ActionListener which will check for + * the action command and act accordingly. + */ +public final class ZoomMenu extends MenuBase +{ + private static class ZoomMenuItem extends JRadioButtonMenuItem + { + private final int zoom; + + ZoomMenuItem(String text, int zoom) + { + super(text); + this.zoom = zoom; + } + } + + private float pageZoomScale = 1; + private float imageZoomScale = 1; + private static final int[] ZOOMS = new int[] { 25, 50, 100, 200, 400, 1000 }; + + private static ZoomMenu instance; + private final JMenu menu; + + /** + * Constructor. + */ + private ZoomMenu() + { + menu = new JMenu("Zoom"); + ButtonGroup bg = new ButtonGroup(); + for (int zoom : ZOOMS) + { + ZoomMenuItem zoomItem = new ZoomMenuItem(zoom + "%", zoom); + bg.add(zoomItem); + menu.add(zoomItem); + } + setMenu(menu); + } + + /** + * Provides the ZoomMenu instance. + * + * @return ZoomMenu instance. + */ + public static ZoomMenu getInstance() + { + if (instance == null) + { + instance = new ZoomMenu(); + } + return instance; + } + + /** + * Set the zoom selection. + * + * @param zoomValue, e.g. 1, 0.25, 4. + * @throws IllegalArgumentException if the parameter doesn't belong to a zoom menu item. + */ + public void changeZoomSelection(float zoomValue) + { + String selection = (int)(zoomValue*100) +"%"; + for (Component comp : menu.getMenuComponents()) + { + JRadioButtonMenuItem menuItem = (JRadioButtonMenuItem) comp; + if (menuItem.getText().equals(selection)) + { + menuItem.setSelected(true); + return; + } + } + throw new IllegalArgumentException("no zoom menu item found for: " + selection); + } + + /** + * Tell whether the command belongs to the zoom menu. + * + * @param actionCommand a menu command string. + * @return true if the command is a zoom menu command, e.g. "100%", false if not. + */ + public static boolean isZoomMenu(String actionCommand) + { + if (!actionCommand.matches("^\\d+%$")) + { + return false; + } + int zoom = Integer.parseInt(actionCommand.substring(0, actionCommand.length() - 1)); + return Arrays.binarySearch(ZOOMS, zoom) >= 0; + } + + /** + * Tell the current zoom scale. + * + * @return the current zoom scale. + * @throws IllegalStateException if no zoom menu item is selected. + */ + public static float getZoomScale() + { + for (Component comp : instance.menu.getMenuComponents()) + { + ZoomMenuItem menuItem = (ZoomMenuItem) comp; + if (menuItem.isSelected()) + { + return menuItem.zoom / 100f; + } + } + throw new IllegalStateException("no zoom menu item is selected"); + } + + public float getPageZoomScale() + { + return pageZoomScale; + } + + public void setPageZoomScale(float pageZoomValue) + { + pageZoomScale = pageZoomValue; + } + + public float getImageZoomScale() + { + return imageZoomScale; + } + + public void setImageZoomScale(float imageZoomValue) + { + imageZoomScale = imageZoomValue; + } + + /** + * When a new file is loaded zoom values should be reset. + * + */ + public void resetZoom() + { + setPageZoomScale(1); + setImageZoomScale(1); + changeZoomSelection(1); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/SearchEngine.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/SearchEngine.java new file mode 100644 index 00000000000..78714c0b0b6 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/SearchEngine.java @@ -0,0 +1,106 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui.textsearcher; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Highlighter; +import javax.swing.text.JTextComponent; + +/** + * @author Khyrul Bashar + * A class that search a word in the JTextComponent and if find highlights them. + */ +class SearchEngine +{ + private final Document document; + private final Highlighter highlighter; + private final Highlighter.HighlightPainter painter; + + /** + * Constructor. + * @param textComponent JTextComponent that is to be searched. + * @param painter Highlighter.HighlightPainter instance to paint the highlights. + */ + SearchEngine(JTextComponent textComponent, Highlighter.HighlightPainter painter) + { + this.document = textComponent.getDocument(); + this.highlighter = textComponent.getHighlighter(); + this.painter = painter; + } + + /** + * Search the word. + * @param searchKey String. Search word. + * @param isCaseSensitive boolean. If search is case sensitive. + * @return ArrayList. + */ + public List search(String searchKey, boolean isCaseSensitive) + { + List highlights = new ArrayList<>(); + + if (searchKey != null) + { + highlighter.removeAllHighlights(); + + if ("".equals(searchKey)) + { + return highlights; + } + + String textContent; + + try + { + textContent = document.getText(0, document.getLength()); + } + catch (BadLocationException e) + { + e.printStackTrace(); + return highlights; + } + if (!isCaseSensitive) + { + textContent = textContent.toLowerCase(); + searchKey = searchKey.toLowerCase(); + } + + int searchKeyLength = searchKey.length(); + int startAt = 0; + int resultantOffset; + int indexOfHighLight = 0; + + while ((resultantOffset = textContent.indexOf(searchKey, startAt)) != -1) + { + try + { + highlighter.addHighlight(resultantOffset, resultantOffset + searchKeyLength, painter); + highlights.add(highlighter.getHighlights()[indexOfHighLight++]); + startAt = resultantOffset + searchKeyLength; + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + } + } + return highlights; + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/SearchPanel.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/SearchPanel.java new file mode 100644 index 00000000000..c5ce6115545 --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/SearchPanel.java @@ -0,0 +1,205 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui.textsearcher; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ComponentListener; +import java.awt.event.KeyEvent; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.event.ChangeListener; +import javax.swing.event.DocumentListener; + +import org.apache.pdfbox.debugger.PDFDebugger; + +/** + * @author Khyrul Bashar + * A class that provides the search pane. + */ +class SearchPanel +{ + private final Action nextAction; + private final Action previousAction; + private JCheckBox caseSensitive; + private JTextField searchField; + private JLabel counterLabel; + private JPanel panel; + + private Action closeAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + panel.setVisible(false); + closeAction.setEnabled(false); + panel.getParent().transferFocus(); + } + }; + + private final Action findAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + if (!panel.isVisible()) + { + panel.setVisible(true); + panel.getParent().validate(); + return; + } + reFocus(); + } + }; + + /** + * Constructor. + * @param documentListener DocumentListener instance. + * @param changeListener ChangeListener instance. + * @param compListener ComponentListener instance. + * @param nextAction Action instance for next find. + * @param previousAction Action instance for previous find. + */ + SearchPanel(DocumentListener documentListener, ChangeListener changeListener, + ComponentListener compListener, Action nextAction, Action previousAction) + { + this.nextAction = nextAction; + this.previousAction = previousAction; + initUI(documentListener, changeListener, compListener); + } + + private void initUI(DocumentListener documentListener, ChangeListener changeListener, + ComponentListener compListener) + { + searchField = new JTextField(); + searchField.getDocument().addDocumentListener(documentListener); + + counterLabel = new JLabel(); + counterLabel.setVisible(false); + + JButton nextButton = new JButton(); + nextButton.setAction(nextAction); + nextButton.setText("Next"); + + JButton previousButton = new JButton(); + previousButton.setAction(previousAction); + previousButton.setText("Previous"); + + caseSensitive = new JCheckBox("Match case"); + caseSensitive.setSelected(false); + caseSensitive.addChangeListener(changeListener); + caseSensitive.setToolTipText("Check for case sensitive search"); + + JButton crossButton = new JButton(); + crossButton.setAction(closeAction); + crossButton.setText("Done"); + closeAction.setEnabled(false); + + panel = new JPanel(); + panel.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.LIGHT_GRAY)); + panel.setBackground(new Color(230, 230, 230)); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + + panel.add(Box.createHorizontalGlue()); + panel.add(searchField); + panel.add(counterLabel); + panel.add(previousButton); + panel.add(nextButton); + panel.add(caseSensitive); + panel.add(Box.createRigidArea(new Dimension(5, 0))); + panel.add(crossButton); + + panel.addComponentListener(compListener); + + searchField.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), closeAction); + } + + boolean isCaseSensitive() + { + return caseSensitive.isSelected(); + } + + String getSearchWord() + { + return searchField.getText(); + } + + void reset() + { + counterLabel.setVisible(false); + } + + void updateCounterLabel(int now, int total) + { + if (!counterLabel.isVisible()) + { + counterLabel.setVisible(true); + } + if (total == 0) + { + counterLabel.setText(" No match found "); + nextAction.setEnabled(false); + return; + } + counterLabel.setText(" " + now + " of " + total + " "); + } + + JPanel getPanel() + { + return panel; + } + + public void reFocus() + { + searchField.requestFocus(); + String searchKey = searchField.getText(); + searchField.setText(searchKey); + searchField.setSelectionStart(0); + searchField.setSelectionEnd(searchField.getText().length()); + + closeAction.setEnabled(true); + } + + public void addMenuListeners(PDFDebugger frame) + { + frame.getFindMenu().setEnabled(true); + frame.getFindMenuItem().addActionListener(findAction); + frame.getFindNextMenuItem().addActionListener(nextAction); + frame.getFindPreviousMenuItem().addActionListener(previousAction); + } + + public void removeMenuListeners(PDFDebugger frame) + { + frame.getFindMenu().setEnabled(false); + frame.getFindMenuItem().removeActionListener(findAction); + frame.getFindNextMenuItem().removeActionListener(nextAction); + frame.getFindPreviousMenuItem().removeActionListener(previousAction); + } +} diff --git a/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/Searcher.java b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/Searcher.java new file mode 100644 index 00000000000..5fe983b7c0c --- /dev/null +++ b/debugger/src/main/java/org/apache/pdfbox/debugger/ui/textsearcher/Searcher.java @@ -0,0 +1,267 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.debugger.ui.textsearcher; + +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.util.List; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Highlighter; +import javax.swing.text.JTextComponent; + +import org.apache.pdfbox.debugger.PDFDebugger; + +/** + * @author Khyrul Bashar + */ +public class Searcher implements DocumentListener, ChangeListener, ComponentListener +{ + private static final Highlighter.HighlightPainter PAINTER = + new DefaultHighlighter.DefaultHighlightPainter(Color.yellow); + private static final Highlighter.HighlightPainter SELECTION_PAINTER = + new DefaultHighlighter.DefaultHighlightPainter(new Color(109, 216, 26)); + private final SearchEngine searchEngine; + private final SearchPanel searchPanel; + private final JTextComponent textComponent; + private int totalMatch = 0; + private int currentMatch = -1; + private List highlights; + private final Action previousAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + if (totalMatch != 0 && currentMatch != 0) + { + currentMatch = currentMatch - 1; + int offset = highlights.get(currentMatch).getStartOffset(); + scrollToWord(offset); + + updateHighLighter(currentMatch, currentMatch + 1); + updateNavigationButtons(); + } + } + }; + private final Action nextAction = new AbstractAction() + { + @Override + public void actionPerformed(ActionEvent actionEvent) + { + if (totalMatch != 0 && currentMatch != totalMatch - 1) + { + currentMatch = currentMatch + 1; + int offset = highlights.get(currentMatch).getStartOffset(); + scrollToWord(offset); + + updateHighLighter(currentMatch, currentMatch - 1); + updateNavigationButtons(); + } + } + }; + + /** + * Constructor. + * @param textComponent JTextComponent instance. + */ + public Searcher(JTextComponent textComponent) + { + this.textComponent = textComponent; + searchPanel = new SearchPanel(this, this, this, nextAction, previousAction); + searchEngine = new SearchEngine(textComponent, PAINTER); + + nextAction.setEnabled(false); + previousAction.setEnabled(false); + } + + public JPanel getSearchPanel() + { + return searchPanel.getPanel(); + } + + @Override + public void insertUpdate(DocumentEvent documentEvent) + { + search(documentEvent); + } + + @Override + public void removeUpdate(DocumentEvent documentEvent) + { + search(documentEvent); + } + + @Override + public void changedUpdate(DocumentEvent documentEvent) + { + search(documentEvent); + } + + private void search(DocumentEvent documentEvent) + { + try + { + String word = documentEvent.getDocument().getText(0, documentEvent.getDocument().getLength()); + if (word.isEmpty()) + { + nextAction.setEnabled(false); + previousAction.setEnabled(false); + searchPanel.reset(); + textComponent.getHighlighter().removeAllHighlights(); + return; + } + search(word); + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + } + + private void search(String word) + { + highlights = searchEngine.search(word, searchPanel.isCaseSensitive()); + if (!highlights.isEmpty()) + { + totalMatch = highlights.size(); + currentMatch = 0; + + scrollToWord(highlights.get(0).getStartOffset()); + + updateHighLighter(currentMatch, currentMatch - 1); + updateNavigationButtons(); + } + else + { + searchPanel.updateCounterLabel(0, 0); + } + } + + private void updateNavigationButtons() + { + if (currentMatch == 0) + { + previousAction.setEnabled(false); + } + else if (currentMatch >= 1 && currentMatch <= (totalMatch - 1)) + { + previousAction.setEnabled(true); + } + if (currentMatch == (totalMatch - 1)) + { + nextAction.setEnabled(false); + } + else if (currentMatch < (totalMatch - 1)) + { + nextAction.setEnabled(true); + } + + searchPanel.updateCounterLabel(currentMatch + 1, totalMatch); + } + + private void scrollToWord(int offset) + { + try + { + textComponent.scrollRectToVisible(textComponent.modelToView(offset)); + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + } + + private void updateHighLighter(final int presentIndex, final int previousIndex) + { + if (previousIndex != -1) + { + changeHighlighter(previousIndex, PAINTER); + } + changeHighlighter(presentIndex, SELECTION_PAINTER); + } + + private void changeHighlighter(int index, Highlighter.HighlightPainter newPainter) + { + Highlighter highlighter = textComponent.getHighlighter(); + + Highlighter.Highlight highLight = highlights.get(index); + highlighter.removeHighlight(highLight); + try + { + highlighter.addHighlight(highLight.getStartOffset(), highLight.getEndOffset(), newPainter); + highlights.set(index, highlighter.getHighlights()[highlighter.getHighlights().length - 1]); + } + catch (BadLocationException e) + { + e.printStackTrace(); + } + } + + @Override + public void stateChanged(ChangeEvent changeEvent) + { + if (changeEvent.getSource() instanceof JCheckBox) + { + search(searchPanel.getSearchWord()); + } + } + + @Override + public void componentResized(ComponentEvent componentEvent) + { + + } + + @Override + public void componentMoved(ComponentEvent componentEvent) + { + + } + + @Override + public void componentShown(ComponentEvent componentEvent) + { + searchPanel.reFocus(); + } + + @Override + public void componentHidden(ComponentEvent componentEvent) + { + textComponent.getHighlighter().removeAllHighlights(); + } + + public void addMenuListeners(PDFDebugger frame) + { + searchPanel.addMenuListeners(frame); + } + + public void removeMenuListeners(PDFDebugger frame) + { + searchPanel.removeMenuListeners(frame); + } +} diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/array.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/array.png new file mode 100644 index 00000000000..9b7e6f41f22 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/array.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/boolean.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/boolean.png new file mode 100644 index 00000000000..69f54a3a0e8 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/boolean.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/dict.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/dict.png new file mode 100644 index 00000000000..bb4ce955a65 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/dict.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/hex.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/hex.png new file mode 100644 index 00000000000..b9e3969ea16 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/hex.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/indirect.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/indirect.png new file mode 100644 index 00000000000..d0ba263bf94 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/indirect.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/integer.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/integer.png new file mode 100644 index 00000000000..a3bd86a38af Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/integer.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/name.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/name.png new file mode 100644 index 00000000000..331e5b6a2ec Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/name.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/null.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/null.png new file mode 100644 index 00000000000..901d13dbc88 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/null.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/page.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/page.png new file mode 100644 index 00000000000..84064cc1024 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/page.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/pdf.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/pdf.png new file mode 100644 index 00000000000..8112dcfc3c9 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/pdf.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/real.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/real.png new file mode 100644 index 00000000000..a120b0ea7e6 Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/real.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/stream-dict.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/stream-dict.png new file mode 100644 index 00000000000..8520228f20c Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/stream-dict.png differ diff --git a/debugger/src/main/resources/org/apache/pdfbox/debugger/string.png b/debugger/src/main/resources/org/apache/pdfbox/debugger/string.png new file mode 100644 index 00000000000..871790069bb Binary files /dev/null and b/debugger/src/main/resources/org/apache/pdfbox/debugger/string.png differ diff --git a/examples/pom.xml b/examples/pom.xml new file mode 100644 index 00000000000..ed57a5cb539 --- /dev/null +++ b/examples/pom.xml @@ -0,0 +1,145 @@ + + + + + + 4.0.0 + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + ../parent/pom.xml + + + pdfbox-examples + + jar + Apache PDFBox examples + + The Apache PDFBox library is an open source Java tool for working with PDF documents. + This artefact contains examples on how the library can be used. + + 2002 + + + 5.5.4 + + + + + + + [11,) + + + + javax.xml.bind + jaxb-api + provided + + + + + + + + org.bouncycastle + bcmail-jdk15on + true + + + ${project.groupId} + pdfbox-tools + ${project.version} + + + ${project.groupId} + xmpbox + ${project.version} + + + ${project.groupId} + preflight + ${project.version} + test + + + org.apache.lucene + lucene-core + ${lucene.version} + + + org.apache.lucene + lucene-analyzers-common + ${lucene.version} + + + org.apache.ant + ant + 1.10.6 + + + junit + junit + test + + + javax.servlet + javax.servlet-api + 4.0.1 + test + + + org.apache.geronimo.specs + geronimo-jaxrs_1.1_spec + 1.0 + test + + + + + + + src/main/resources + false + + + + + org.apache.rat + apache-rat-plugin + + + src/test/resources/org/apache/pdfbox/examples/signature/* + src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.* + + + + + + maven-surefire-plugin + + ${addmod} + + + + + + + diff --git a/examples/src/main/appended-resources/META-INF/LICENSE b/examples/src/main/appended-resources/META-INF/LICENSE new file mode 100644 index 00000000000..77e285f61f5 --- /dev/null +++ b/examples/src/main/appended-resources/META-INF/LICENSE @@ -0,0 +1,279 @@ + +EXTERNAL COMPONENTS + +Apache PDFBox includes a number of components with separate copyright notices +and license terms. Your use of these components is subject to the terms and +conditions of the following licenses. + +Contributions made to the original PDFBox and FontBox projects: + + Copyright (c) 2002-2007, www.pdfbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of pdfbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Bouncy Castle encryption libraries + + Copyright (c) 2000-2015 The Legion Of The Bouncy Castle + (http://www.bouncycastle.org) + + 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. + +Adobe Font Metrics (AFM) for PDF Core 14 Fonts + + 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. + +CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads) + + Copyright 1990-2009 Adobe Systems Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + +Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html) + + Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file to use, copy, publish, distribute, + sublicense, and/or sell copies of the documentation, and to permit + others to do the same, provided that: + - No modification, editing or other alteration of this document is + allowed; and + - The above copyright notice and this permission notice shall be + included in all copies of the documentation. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file, to create their own derivative works + from the content of this document to use, copy, publish, distribute, + sublicense, and/or sell the derivative works, and to permit others to do + the same, provided that the derived work is not represented as being a + copy or version of this document. + + Adobe shall not be liable to any party for any loss of revenue or profit + or for indirect, incidental, special, consequential, or other similar + damages, whether based on tort (including without limitation negligence + or strict liability), contract or other legal or equitable grounds even + if Adobe has been advised or had reason to know of the possibility of + such damages. The Adobe materials are provided on an "AS IS" basis. + Adobe specifically disclaims all express, statutory, or implied + warranties relating to the Adobe materials, including but not limited to + those concerning merchantability or fitness for a particular purpose or + non-infringement of any third party rights regarding the Adobe + materials. + +The International Components for Unicode library (http://site.icu-project.org/) + + ICU License - ICU 1.8.1 and later + + COPYRIGHT AND PERMISSION NOTICE + + Copyright (c) 1995-2009 International Business Machines Corporation and others + + All rights reserved. + + 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, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, provided that the above copyright notice(s) and this + permission notice appear in all copies of the Software and that both the + above copyright notice(s) and this permission notice appear in supporting + documentation. + + 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 OF THIRD PARTY RIGHTS. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE + BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Except as contained in this notice, the name of a copyright holder shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in this Software without prior written authorization of the + copyright holder. + +The file "sRGB Color Space Profile.icm" is: + + Copyright (c) 1998 Hewlett-Packard Company + + To anyone who acknowledges that the file "sRGB Color Space Profile.icm" + is provided "AS IS" WITH NO EXPRESS OR IMPLIED WARRANTY: + permission to use, copy and distribute this file for any purpose is hereby + granted without fee, provided that the file is not changed including the HP + copyright notice tag, and that the name of Hewlett-Packard Company not be + used in advertising or publicity pertaining to distribution of the software + without specific, written prior permission. Hewlett-Packard Company makes + no representations about the suitability of this software for any purpose. + +Lohit-Bengali font (https://pagure.io/lohit): + + Copyright 2011-13 Lohit Fonts Project contributors + + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + + ----------------------------------------------------------- + SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + ----------------------------------------------------------- + + PREAMBLE + The goals of the Open Font License (OFL) are to stimulate worldwide + development of collaborative font projects, to support the font creation + efforts of academic and linguistic communities, and to provide a free and + open framework in which fonts may be shared and improved in partnership + with others. + + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. The + fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply + to any document created using the fonts or their derivatives. + + DEFINITIONS + "Font Software" refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. This may + include source files, build scripts and documentation. + + "Reserved Font Name" refers to any names specified as such after the + copyright statement(s). + + "Original Version" refers to the collection of Font Software components as + distributed by the Copyright Holder(s). + + "Modified Version" refers to any derivative made by adding to, deleting, + or substituting -- in part or in whole -- any of the components of the + Original Version, by changing formats or by porting the Font Software to a + new environment. + + "Author" refers to any designer, engineer, programmer, technical + writer or other person who contributed to the Font Software. + + PERMISSION & CONDITIONS + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: + + 1) Neither the Font Software nor any of its individual components, + in Original or Modified Versions, may be sold by itself. + + 2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + + 3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the corresponding + Copyright Holder. This restriction only applies to the primary font name as + presented to the users. + + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + + 5) The Font Software, modified or unmodified, in part or in whole, + must be distributed entirely under this license, and must not be + distributed under any other license. The requirement for fonts to + remain under this license does not apply to any document created + using the Font Software. + + TERMINATION + This license becomes null and void if any of the above conditions are + not met. + + DISCLAIMER + 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 THE + COPYRIGHT HOLDER 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. diff --git a/examples/src/main/appended-resources/META-INF/NOTICE b/examples/src/main/appended-resources/META-INF/NOTICE new file mode 100644 index 00000000000..e8fea2ebf58 --- /dev/null +++ b/examples/src/main/appended-resources/META-INF/NOTICE @@ -0,0 +1,2 @@ +Based on source code originally developed in the PDFBox and FontBox projects. +Copyright (c) 2002-2007, www.pdfbox.org diff --git a/src/org/pdfbox/ant/PDFToTextTask.java b/examples/src/main/java/org/apache/pdfbox/examples/ant/PDFToTextTask.java similarity index 75% rename from src/org/pdfbox/ant/PDFToTextTask.java rename to examples/src/main/java/org/apache/pdfbox/examples/ant/PDFToTextTask.java index 58021ad94b8..ee33eab6c8f 100644 --- a/src/org/pdfbox/ant/PDFToTextTask.java +++ b/examples/src/main/java/org/apache/pdfbox/examples/ant/PDFToTextTask.java @@ -14,29 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.ant; +package org.apache.pdfbox.examples.ant; import java.io.File; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; +import org.apache.pdfbox.tools.ExtractText; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.FileSet; /** - * This is an ant task that will allow pdf documents to be converted using an - * and task. + * This is an Ant task that will allow pdf documents to be converted using an + * Ant task. * - * @author Ben Litchfield - * @version $Revision: 1.8 $ + * @author Ben Litchfield */ public class PDFToTextTask extends Task { - private List fileSets = new ArrayList(); + private final List fileSets = new ArrayList<>(); /** * Adds a set of files (nested fileset attribute). @@ -51,19 +50,19 @@ public void addFileset( FileSet set ) /** * This will perform the execution. */ + @Override public void execute() { log( "PDFToTextTask executing" ); - Iterator fileSetIter = fileSets.iterator(); - while( fileSetIter.hasNext() ) + + for (FileSet fileSet : fileSets) { - FileSet next = (FileSet)fileSetIter.next(); - DirectoryScanner dirScanner = next.getDirectoryScanner( getProject() ); + DirectoryScanner dirScanner = fileSet.getDirectoryScanner(getProject()); dirScanner.scan(); String[] files = dirScanner.getIncludedFiles(); - for( int i=0; i + + + + + + +ANT tasks that utilize PDFBox features can be found in this package. +This is an example of using the PDF2Text task:

+ +<taskdef name="pdf2text" classname="org.apache.pdfbox.ant.PDFToTextTask" classpathref="build.classpath" />
+ +<pdf2text>
+   <fileset dir="test">
+     <include name="**/*.pdf" />
+   </fileset>
+</pdf2text>
+ + diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/AddBorderToField.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/AddBorderToField.java new file mode 100644 index 00000000000..ed4d14277d7 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/AddBorderToField.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; + +/** + * Add a border to an existing field. + * + * This sample adds a border to a field. + * + * This sample builds on the form generated by @link CreateSimpleForm so you need to run that first. + * + */ +public final class AddBorderToField +{ + private AddBorderToField() + { + } + + public static void main(String[] args) throws IOException + { + // Load the PDF document created by SimpleForm.java + try (PDDocument document = PDDocument.load(new File("target/SimpleForm.pdf"))) + { + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + + // Get the field and the widget associated to it. + // Note: there might be multiple widgets + PDField field = acroForm.getField("SampleField"); + PDAnnotationWidget widget = field.getWidgets().get(0); + + // Create the definition for a green border + PDAppearanceCharacteristicsDictionary fieldAppearance = + new PDAppearanceCharacteristicsDictionary(new COSDictionary()); + PDColor green = new PDColor(new float[] { 0, 1, 0 }, PDDeviceRGB.INSTANCE); + fieldAppearance.setBorderColour(green); + + // Set the information to be used by the widget which is responsible + // for the visual style of the form field. + widget.setAppearanceCharacteristics(fieldAppearance); + + document.save("target/AddBorderToField.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateCheckBox.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateCheckBox.java new file mode 100644 index 00000000000..ffa7e415dad --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateCheckBox.java @@ -0,0 +1,191 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.interactive.form; + +import java.awt.geom.Rectangle2D; +import java.io.IOException; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDCheckBox; + +/** + * Example to create a checkbox. + * + * @author Tilman Hausherr + */ +public class CreateCheckBox +{ + private CreateCheckBox() + { + } + + public static void main(String[] args) throws IOException + { + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(); + document.addPage(page); + + PDAcroForm acroForm = new PDAcroForm(document); + document.getDocumentCatalog().setAcroForm(acroForm); + + // if you want to see what Adobe does, activate this, open with Adobe + // save the file, and then open it with PDFDebugger + + //acroForm.setNeedAppearances(true) + + + float x = 50; + float y = page.getMediaBox().getHeight() - 50; + + PDRectangle rect = new PDRectangle(x, y, 20, 20); + + PDCheckBox checkbox = new PDCheckBox(acroForm); + checkbox.setPartialName("MyCheckBox"); + PDAnnotationWidget widget = checkbox.getWidgets().get(0); + widget.setPage(page); + widget.setRectangle(rect); + widget.setPrinted(true); + + PDAppearanceCharacteristicsDictionary appearanceCharacteristics = new PDAppearanceCharacteristicsDictionary(new COSDictionary()); + appearanceCharacteristics.setBorderColour(new PDColor(new float[]{1, 0, 0}, PDDeviceRGB.INSTANCE)); + appearanceCharacteristics.setBackground(new PDColor(new float[]{1, 1, 0}, PDDeviceRGB.INSTANCE)); + // 8 = cross; 4 = checkmark; H = star; u = diamond; n = square, l = dot + appearanceCharacteristics.setNormalCaption("4"); + widget.setAppearanceCharacteristics(appearanceCharacteristics); + + PDBorderStyleDictionary borderStyleDictionary = new PDBorderStyleDictionary(); + borderStyleDictionary.setWidth(1); + borderStyleDictionary.setStyle(PDBorderStyleDictionary.STYLE_SOLID); + widget.setBorderStyle(borderStyleDictionary); + + PDAppearanceDictionary ap = new PDAppearanceDictionary(); + widget.setAppearance(ap); + PDAppearanceEntry normalAppearance = ap.getNormalAppearance(); + + COSDictionary normalAppearanceDict = normalAppearance.getCOSObject(); + normalAppearanceDict.setItem(COSName.Off, createAppearanceStream(document, widget, false)); + normalAppearanceDict.setItem(COSName.YES, createAppearanceStream(document, widget, true)); + + // If we ever decide to implement a /D (down) appearance, just + // replace the background colors c with c * 0.75 + + page.getAnnotations().add(checkbox.getWidgets().get(0)); + acroForm.getFields().add(checkbox); + + checkbox.check(); + + document.save("CheckBoxSample.pdf"); + } + } + + private static PDAppearanceStream createAppearanceStream( + final PDDocument document, PDAnnotationWidget widget, boolean on) throws IOException + { + PDRectangle rect = widget.getRectangle(); + PDAppearanceCharacteristicsDictionary appearanceCharacteristics; + PDAppearanceStream yesAP = new PDAppearanceStream(document); + yesAP.setBBox(new PDRectangle(rect.getWidth(), rect.getHeight())); + yesAP.setResources(new PDResources()); + try (PDAppearanceContentStream yesAPCS = new PDAppearanceContentStream(yesAP)) + { + appearanceCharacteristics = widget.getAppearanceCharacteristics(); + PDColor backgroundColor = appearanceCharacteristics.getBackground(); + PDColor borderColor = appearanceCharacteristics.getBorderColour(); + float lineWidth = getLineWidth(widget); + yesAPCS.setBorderLine(lineWidth, widget.getBorderStyle(), widget.getBorder()); + yesAPCS.setNonStrokingColor(backgroundColor); + yesAPCS.addRect(0, 0, rect.getWidth(), rect.getHeight()); + yesAPCS.fill(); + yesAPCS.setStrokingColor(borderColor); + yesAPCS.addRect(lineWidth / 2, lineWidth / 2, rect.getWidth() - lineWidth, rect.getHeight() - lineWidth); + yesAPCS.stroke(); + if (!on) + { + return yesAP; + } + + yesAPCS.addRect(lineWidth, lineWidth, rect.getWidth() - lineWidth * 2, rect.getHeight() - lineWidth * 2); + yesAPCS.clip(); + + String normalCaption = appearanceCharacteristics.getNormalCaption(); + if (normalCaption == null) + { + normalCaption = "4"; // Adobe behaviour + } + if ("8".equals(normalCaption)) + { + // Adobe paints a cross instead of using the Zapf Dingbats cross symbol + yesAPCS.setStrokingColor(0f); + yesAPCS.moveTo(lineWidth * 2, rect.getHeight() - lineWidth * 2); + yesAPCS.lineTo(rect.getWidth() - lineWidth * 2, lineWidth * 2); + yesAPCS.moveTo(rect.getWidth() - lineWidth * 2, rect.getHeight() - lineWidth * 2); + yesAPCS.lineTo(lineWidth * 2, lineWidth * 2); + yesAPCS.stroke(); + } + else + { + // The caption is not unicode, but the Zapf Dingbats code in the PDF + // Thus convert it back to unicode + // Assume that only the first character is used. + String name = PDType1Font.ZAPF_DINGBATS.codeToName(normalCaption.codePointAt(0)); + String unicode = PDType1Font.ZAPF_DINGBATS.getGlyphList().toUnicode(name); + Rectangle2D bounds = PDType1Font.ZAPF_DINGBATS.getPath(name).getBounds2D(); + float size = (float) Math.min(bounds.getWidth(), bounds.getHeight()) / 1000; + // assume that checkmark has square size + // the calculations approximate what Adobe is doing, i.e. put the glyph in the middle + float fontSize = (rect.getWidth() - lineWidth * 2) / size * 0.6666f; + float xOffset = (float) (rect.getWidth() - (bounds.getWidth()) / 1000 * fontSize) / 2; + xOffset -= bounds.getX() / 1000 * fontSize; + float yOffset = (float) (rect.getHeight() - (bounds.getHeight()) / 1000 * fontSize) / 2; + yOffset -= bounds.getY() / 1000 * fontSize; + yesAPCS.setNonStrokingColor(0); + yesAPCS.beginText(); + yesAPCS.setFont(PDType1Font.ZAPF_DINGBATS, fontSize); + yesAPCS.newLineAtOffset(xOffset, yOffset); + yesAPCS.showText(unicode); + yesAPCS.endText(); + } + } + return yesAP; + } + + static float getLineWidth(PDAnnotationWidget widget) + { + PDBorderStyleDictionary bs = widget.getBorderStyle(); + if (bs != null) + { + return bs.getWidth(); + } + return 1; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateMultiWidgetsForm.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateMultiWidgetsForm.java new file mode 100644 index 00000000000..b05d16122ef --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateMultiWidgetsForm.java @@ -0,0 +1,146 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; + +/** + * An example of creating an AcroForm and a form field from scratch, with two widgets for one field: + * This means that the same field is visible on two separate pages, but can be on different + * positions and different size and colors. Changing the value on one page will also change it on + * the other page. + * + * The form field is created with properties similar to creating a form with default settings in + * Adobe Acrobat. + * + */ +public final class CreateMultiWidgetsForm +{ + private CreateMultiWidgetsForm() + { + } + + public static void main(String[] args) throws IOException + { + // Create a new document with 2 empty pages. + try (PDDocument document = new PDDocument()) + { + PDPage page1 = new PDPage(PDRectangle.A4); + document.addPage(page1); + PDPage page2 = new PDPage(PDRectangle.A4); + document.addPage(page2); + + // Adobe Acrobat uses Helvetica as a default font and + // stores that under the name '/Helv' in the resources dictionary + PDFont font = PDType1Font.HELVETICA; + PDResources resources = new PDResources(); + resources.put(COSName.getPDFName("Helv"), font); + + // Add a new AcroForm and add that to the document + PDAcroForm acroForm = new PDAcroForm(document); + document.getDocumentCatalog().setAcroForm(acroForm); + + // Add and set the resources and default appearance at the form level + acroForm.setDefaultResources(resources); + + // Acrobat sets the font size on the form level to be + // auto sized as default. This is done by setting the font size to '0' + String defaultAppearanceString = "/Helv 0 Tf 0 g"; + acroForm.setDefaultAppearance(defaultAppearanceString); + + // Add a form field to the form. + PDTextField textBox = new PDTextField(acroForm); + textBox.setPartialName("SampleField"); + + // Acrobat sets the font size to 12 as default + // This is done by setting the font size to '12' on the + // field level. + // The text color is set to blue in this example. + // To use black, replace "0 0 1 rg" with "0 0 0 rg" or "0 g". + defaultAppearanceString = "/Helv 12 Tf 0 0 1 rg"; + textBox.setDefaultAppearance(defaultAppearanceString); + + // add the field to the AcroForm + acroForm.getFields().add(textBox); + + // Specify 1st annotation associated with the field + PDAnnotationWidget widget1 = new PDAnnotationWidget(); + PDRectangle rect = new PDRectangle(50, 750, 250, 50); + widget1.setRectangle(rect); + widget1.setPage(page1); + widget1.setParent(textBox); + + // Specify 2nd annotation associated with the field + PDAnnotationWidget widget2 = new PDAnnotationWidget(); + PDRectangle rect2 = new PDRectangle(200, 650, 100, 50); + widget2.setRectangle(rect2); + widget2.setPage(page2); + widget2.setParent(textBox); + + // set green border and yellow background for 1st widget + // if you prefer defaults, just delete this code block + PDAppearanceCharacteristicsDictionary fieldAppearance1 + = new PDAppearanceCharacteristicsDictionary(new COSDictionary()); + fieldAppearance1.setBorderColour(new PDColor(new float[]{0,1,0}, PDDeviceRGB.INSTANCE)); + fieldAppearance1.setBackground(new PDColor(new float[]{1,1,0}, PDDeviceRGB.INSTANCE)); + widget1.setAppearanceCharacteristics(fieldAppearance1); + + // set red border and green background for 2nd widget + // if you prefer defaults, just delete this code block + PDAppearanceCharacteristicsDictionary fieldAppearance2 + = new PDAppearanceCharacteristicsDictionary(new COSDictionary()); + fieldAppearance2.setBorderColour(new PDColor(new float[]{1,0,0}, PDDeviceRGB.INSTANCE)); + fieldAppearance2.setBackground(new PDColor(new float[]{0,1,0}, PDDeviceRGB.INSTANCE)); + widget2.setAppearanceCharacteristics(fieldAppearance2); + + List widgets = new ArrayList<>(); + widgets.add(widget1); + widgets.add(widget2); + textBox.setWidgets(widgets); + + // make sure the annotations are visible on screen and paper + widget1.setPrinted(true); + widget2.setPrinted(true); + + // Add the annotations to the pages + page1.getAnnotations().add(widget1); + page2.getAnnotations().add(widget2); + + // set the field value + textBox.setValue("Sample field"); + + document.save("MultiWidgetsForm.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateRadioButtons.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateRadioButtons.java new file mode 100644 index 00000000000..ac39ffb2e26 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateRadioButtons.java @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDRadioButton; + +/** + * Example to create radio buttons. + * + * @author Tilman Hausherr + */ +public class CreateRadioButtons +{ + private CreateRadioButtons() + { + } + + public static void main(String[] args) throws IOException + { + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(PDRectangle.A4); + document.addPage(page); + PDAcroForm acroForm = new PDAcroForm(document); + + // if you want to see what Adobe does, activate this, open with Adobe + // save the file, and then open it with PDFDebugger + + //acroForm.setNeedAppearances(true) + + document.getDocumentCatalog().setAcroForm(acroForm); + List options = Arrays.asList("a", "b", "c"); + PDRadioButton radioButton = new PDRadioButton(acroForm); + radioButton.setPartialName("MyRadioButton"); + radioButton.setExportValues(options); + + PDAppearanceCharacteristicsDictionary appearanceCharacteristics = new PDAppearanceCharacteristicsDictionary(new COSDictionary()); + appearanceCharacteristics.setBorderColour(new PDColor(new float[] { 1, 0, 0 }, PDDeviceRGB.INSTANCE)); + appearanceCharacteristics.setBackground(new PDColor(new float[]{0, 1, 0.3f}, PDDeviceRGB.INSTANCE)); + // no caption => round + // with caption => see checkbox example + + List widgets = new ArrayList<>(); + for (int i = 0; i < options.size(); i++) + { + PDAnnotationWidget widget = new PDAnnotationWidget(); + widget.setRectangle(new PDRectangle(30, PDRectangle.A4.getHeight() - 40 - i * 35, 30, 30)); + widget.setAppearanceCharacteristics(appearanceCharacteristics); + PDBorderStyleDictionary borderStyleDictionary = new PDBorderStyleDictionary(); + borderStyleDictionary.setWidth(2); + borderStyleDictionary.setStyle(PDBorderStyleDictionary.STYLE_SOLID); + widget.setBorderStyle(borderStyleDictionary); + widget.setPage(page); + + COSDictionary apNDict = new COSDictionary(); + apNDict.setItem(COSName.Off, createAppearanceStream(document, widget, false)); + apNDict.setItem(options.get(i), createAppearanceStream(document, widget, true)); + + PDAppearanceDictionary appearance = new PDAppearanceDictionary(); + PDAppearanceEntry appearanceNEntry = new PDAppearanceEntry(apNDict); + appearance.setNormalAppearance(appearanceNEntry); + widget.setAppearance(appearance); + widget.setAppearanceState("Off"); // don't forget this, or button will be invisible + widgets.add(widget); + page.getAnnotations().add(widget); + } + radioButton.setWidgets(widgets); + + acroForm.getFields().add(radioButton); + + // Set the texts + try (PDPageContentStream contents = new PDPageContentStream(document, page)) + { + for (int i = 0; i < options.size(); i++) + { + contents.beginText(); + contents.setFont(PDType1Font.HELVETICA, 15); + contents.newLineAtOffset(70, PDRectangle.A4.getHeight() - 30 - i * 35); + contents.showText(options.get(i)); + contents.endText(); + } + } + + radioButton.setValue("c"); + + document.save("RadioButtonsSample.pdf"); + } + } + + private static PDAppearanceStream createAppearanceStream( + final PDDocument document, PDAnnotationWidget widget, boolean on) throws IOException + { + PDRectangle rect = widget.getRectangle(); + PDAppearanceStream onAP = new PDAppearanceStream(document); + onAP.setBBox(new PDRectangle(rect.getWidth(), rect.getHeight())); + try (PDAppearanceContentStream onAPCS = new PDAppearanceContentStream(onAP)) + { + PDAppearanceCharacteristicsDictionary appearanceCharacteristics = widget.getAppearanceCharacteristics(); + PDColor backgroundColor = appearanceCharacteristics.getBackground(); + PDColor borderColor = appearanceCharacteristics.getBorderColour(); + float lineWidth = getLineWidth(widget); + onAPCS.setBorderLine(lineWidth, widget.getBorderStyle(), widget.getBorder()); + onAPCS.setNonStrokingColor(backgroundColor); + float radius = Math.min(rect.getWidth() / 2, rect.getHeight() / 2); + drawCircle(onAPCS, rect.getWidth() / 2, rect.getHeight() / 2, radius); + onAPCS.fill(); + onAPCS.setStrokingColor(borderColor); + drawCircle(onAPCS, rect.getWidth() / 2, rect.getHeight() / 2, radius - lineWidth / 2); + onAPCS.stroke(); + if (on) + { + onAPCS.setNonStrokingColor(0f); + drawCircle(onAPCS, rect.getWidth() / 2, rect.getHeight() / 2, (radius - lineWidth) / 2); + onAPCS.fill(); + } + } + return onAP; + } + + static float getLineWidth(PDAnnotationWidget widget) + { + PDBorderStyleDictionary bs = widget.getBorderStyle(); + if (bs != null) + { + return bs.getWidth(); + } + return 1; + } + + static void drawCircle(PDAppearanceContentStream cs, float x, float y, float r) throws IOException + { + // http://stackoverflow.com/a/2007782/535646 + float magic = r * 0.551784f; + cs.moveTo(x, y + r); + cs.curveTo(x + magic, y + r, x + r, y + magic, x + r, y); + cs.curveTo(x + r, y - magic, x + magic, y - r, x, y - r); + cs.curveTo(x - magic, y - r, x - r, y - magic, x - r, y); + cs.curveTo(x - r, y + magic, x - magic, y + r, x, y + r); + cs.closePath(); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleForm.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleForm.java new file mode 100644 index 00000000000..c75a0814b7f --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleForm.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; + +/** + * An example of creating an AcroForm and a form field from scratch. + * + * The form field is created with properties similar to creating + * a form with default settings in Adobe Acrobat. + * + */ +public final class CreateSimpleForm +{ + private CreateSimpleForm() + { + } + + public static void main(String[] args) throws IOException + { + // Create a new document with an empty page. + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(PDRectangle.A4); + document.addPage(page); + + // Adobe Acrobat uses Helvetica as a default font and + // stores that under the name '/Helv' in the resources dictionary + PDFont font = PDType1Font.HELVETICA; + PDResources resources = new PDResources(); + resources.put(COSName.getPDFName("Helv"), font); + + // Add a new AcroForm and add that to the document + PDAcroForm acroForm = new PDAcroForm(document); + document.getDocumentCatalog().setAcroForm(acroForm); + + // Add and set the resources and default appearance at the form level + acroForm.setDefaultResources(resources); + + // Acrobat sets the font size on the form level to be + // auto sized as default. This is done by setting the font size to '0' + String defaultAppearanceString = "/Helv 0 Tf 0 g"; + acroForm.setDefaultAppearance(defaultAppearanceString); + + // Add a form field to the form. + PDTextField textBox = new PDTextField(acroForm); + textBox.setPartialName("SampleField"); + + // Acrobat sets the font size to 12 as default + // This is done by setting the font size to '12' on the + // field level. + // The text color is set to blue in this example. + // To use black, replace "0 0 1 rg" with "0 0 0 rg" or "0 g". + defaultAppearanceString = "/Helv 12 Tf 0 0 1 rg"; + textBox.setDefaultAppearance(defaultAppearanceString); + + // add the field to the acroform + acroForm.getFields().add(textBox); + + // Specify the widget annotation associated with the field + PDAnnotationWidget widget = textBox.getWidgets().get(0); + PDRectangle rect = new PDRectangle(50, 750, 200, 50); + widget.setRectangle(rect); + widget.setPage(page); + + // set green border and yellow background + // if you prefer defaults, just delete this code block + PDAppearanceCharacteristicsDictionary fieldAppearance + = new PDAppearanceCharacteristicsDictionary(new COSDictionary()); + fieldAppearance.setBorderColour(new PDColor(new float[]{0,1,0}, PDDeviceRGB.INSTANCE)); + fieldAppearance.setBackground(new PDColor(new float[]{1,1,0}, PDDeviceRGB.INSTANCE)); + widget.setAppearanceCharacteristics(fieldAppearance); + + // make sure the widget annotation is visible on screen and paper + widget.setPrinted(true); + + // Add the widget annotation to the page + page.getAnnotations().add(widget); + + // set the field value + textBox.setValue("Sample field"); + + document.save("target/SimpleForm.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleFormWithEmbeddedFont.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleFormWithEmbeddedFont.java new file mode 100644 index 00000000000..0f8444c92d5 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleFormWithEmbeddedFont.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; + +/** + * An example of creating an AcroForm and a form field from scratch with a font fully embedded to + * allow non-WinAnsiEncoding input. + * + * The form field is created with properties similar to creating a form with default settings in + * Adobe Acrobat. + * + */ +public class CreateSimpleFormWithEmbeddedFont +{ + private CreateSimpleFormWithEmbeddedFont() + { + } + + public static void main(String[] args) throws IOException + { + // Create a new document with an empty page. + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + PDAcroForm acroForm = new PDAcroForm(doc); + doc.getDocumentCatalog().setAcroForm(acroForm); + + // Note that the font is fully embedded. If you use a different font, make sure that + // its license allows full embedding. + PDFont formFont = PDType0Font.load(doc, CreateSimpleFormWithEmbeddedFont.class.getResourceAsStream( + "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf"), false); + + // Add and set the resources and default appearance at the form level + final PDResources resources = new PDResources(); + acroForm.setDefaultResources(resources); + final String fontName = resources.add(formFont).getName(); + + // Acrobat sets the font size on the form level to be + // auto sized as default. This is done by setting the font size to '0' + acroForm.setDefaultResources(resources); + String defaultAppearanceString = "/" + fontName + " 0 Tf 0 g"; + + PDTextField textBox = new PDTextField(acroForm); + textBox.setPartialName("SampleField"); + textBox.setDefaultAppearance(defaultAppearanceString); + acroForm.getFields().add(textBox); + + // Specify the widget annotation associated with the field + PDAnnotationWidget widget = textBox.getWidgets().get(0); + PDRectangle rect = new PDRectangle(50, 700, 200, 50); + widget.setRectangle(rect); + widget.setPage(page); + page.getAnnotations().add(widget); + + // set the field value. Note that the last character is a turkish capital I with a dot, + // which is not part of WinAnsiEncoding + textBox.setValue("Sample field İ"); + + doc.save("target/SimpleFormWithEmbeddedFont.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java new file mode 100644 index 00000000000..e9055f49e47 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/DetermineTextFitsField.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; + +/** + * Determine if text length fits the field. + * + * This sample builds on the form generated by @link CreateSimpleForm so you need to run that first. + * + */ +public final class DetermineTextFitsField +{ + private DetermineTextFitsField() + { + } + + public static void main(String[] args) throws IOException + { + try (PDDocument document = PDDocument.load(new File("target/SimpleForm.pdf"))) + { + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + + // Get the field and the widget associated to it. + // Note: there might be multiple widgets + PDField field = acroForm.getField("SampleField"); + PDAnnotationWidget widget = field.getWidgets().get(0); + + // Get the width of the fields box + float widthOfField = widget.getRectangle().getWidth(); + + // Get the font and the font size setting + // This is currently a little awkward and needs improvement to have a better API + // for that. In many cases the string will be built like that: + // /Helv 12 Tf 0 g + // We could use PDFStreamParser to do the parsing. For the sample we split the + // string. + String defaultAppearance = ((PDTextField) field).getDefaultAppearance(); + String[] parts = defaultAppearance.split(" "); + + // Get the font name + COSName fontName = COSName.getPDFName(parts[0].substring(1)); + float fontSize = Float.parseFloat(parts[1]); + + // Get the font resource. + // First look up the font from the widgets appearance stream. + // This will be the case if there is already a value. + // If the value hasn't been set yet the font resource needs to be looked up from + // the AcroForm default resources + + PDFont font = null; + PDResources resources = widget.getNormalAppearanceStream().getResources(); + if (resources != null) + { + font = resources.getFont(fontName); + } + if (font == null) + { + font = acroForm.getDefaultResources().getFont(fontName); + } + + String willFit = "short string"; + String willNotFit = "this is a very long string which will not fit the width of the widget"; + + // calculate the string width at a certain font size + float willFitWidth = font.getStringWidth(willFit) * fontSize / 1000; + float willNotFitWidth = font.getStringWidth(willNotFit) * fontSize / 1000; + + assert willFitWidth < widthOfField; + assert willNotFitWidth > widthOfField; + } + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/FieldTriggers.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/FieldTriggers.java new file mode 100644 index 00000000000..86cbdeb84ba --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/FieldTriggers.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript; +import org.apache.pdfbox.pdmodel.interactive.action.PDAnnotationAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; + +/** + * Show usage of different field triggers. + * + * This sample adds a JavaScript to be executed on the different field triggers available. + * + * This sample builds on the form generated by @link CreateSimpleForm so you need to run that first. + * + */ +public final class FieldTriggers +{ + private FieldTriggers() + { + } + + public static void main(String[] args) throws IOException + { + // Load the PDF document created by SimpleForm.java + try (PDDocument document = PDDocument.load(new File("target/SimpleForm.pdf"))) + { + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + + // Get the field and the widget associated to it. + // Note: there might be multiple widgets + PDField field = acroForm.getField("SampleField"); + PDAnnotationWidget widget = field.getWidgets().get(0); + + // Some of the actions are available to the widget, some are available to the form field. + // See Table 8.44 and Table 8.46 in the PDF 1.7 specification + + // Actions for the widget + PDAnnotationAdditionalActions annotationActions = new PDAnnotationAdditionalActions(); + + // Create an action when entering the annotations active area + PDActionJavaScript jsEnterAction = new PDActionJavaScript(); + jsEnterAction.setAction("app.alert(\"On 'enter' action\")"); + annotationActions.setE(jsEnterAction); + + // Create an action when exiting the annotations active area + PDActionJavaScript jsExitAction = new PDActionJavaScript(); + jsExitAction.setAction("app.alert(\"On 'exit' action\")"); + annotationActions.setX(jsExitAction); + + // Create an action when the mouse button is pressed inside the annotations active area + PDActionJavaScript jsMouseDownAction = new PDActionJavaScript(); + jsMouseDownAction.setAction("app.alert(\"On 'mouse down' action\")"); + annotationActions.setD(jsMouseDownAction); + + // Create an action when the mouse button is released inside the annotations active area + PDActionJavaScript jsMouseUpAction = new PDActionJavaScript(); + jsMouseUpAction.setAction("app.alert(\"On 'mouse up' action\")"); + annotationActions.setU(jsMouseUpAction); + + // Create an action when the annotation gets the input focus + PDActionJavaScript jsFocusAction = new PDActionJavaScript(); + jsFocusAction.setAction("app.alert(\"On 'focus' action\")"); + annotationActions.setFo(jsFocusAction); + + // Create an action when the annotation loses the input focus + PDActionJavaScript jsBlurredAction = new PDActionJavaScript(); + jsBlurredAction.setAction("app.alert(\"On 'blurred' action\")"); + annotationActions.setBl(jsBlurredAction); + + widget.setActions(annotationActions); + + // Actions for the field + PDFormFieldAdditionalActions fieldActions = new PDFormFieldAdditionalActions(); + + // Create an action when the user types a keystroke in the field + PDActionJavaScript jsKeystrokeAction = new PDActionJavaScript(); + jsKeystrokeAction.setAction("app.alert(\"On 'keystroke' action\")"); + fieldActions.setK(jsKeystrokeAction); + + // Create an action when the field is formatted to display the current value + PDActionJavaScript jsFormattedAction = new PDActionJavaScript(); + jsFormattedAction.setAction("app.alert(\"On 'formatted' action\")"); + fieldActions.setF(jsFormattedAction); + + // Create an action when the field value changes + PDActionJavaScript jsChangedAction = new PDActionJavaScript(); + jsChangedAction.setAction("app.alert(\"On 'change' action\")"); + // fieldActions.setV(jsChangedAction); + + // Create an action when the field value changes + PDActionJavaScript jsRecalculateAction = new PDActionJavaScript(); + jsRecalculateAction.setAction("app.alert(\"On 'recalculate' action\")"); + fieldActions.setC(jsRecalculateAction); + + // Set the Additional Actions entry for the field + // Note: this is a workaround as if there is only one widget the widget + // and the form field may share the same dictionary. Now setting the + // fields Additional Actions entry directly will overwrite the settings done for + // the widget. + // https://issues.apache.org/jira/browse/PDFBOX-3036 + + field.getActions().getCOSObject().addAll(fieldActions.getCOSObject()); + + document.save("target/FieldTriggers.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/FillFormField.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/FillFormField.java new file mode 100644 index 00000000000..d095bddda5c --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/FillFormField.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; + +/** + * Example to show filling form fields. + * + */ +public final class FillFormField +{ + private FillFormField() + { + } + + public static void main(String[] args) throws IOException + { + String formTemplate = "src/main/resources/org/apache/pdfbox/examples/interactive/form/FillFormField.pdf"; + + try (PDDocument pdfDocument = PDDocument.load(new File(formTemplate))) + { + // get the document catalog + PDAcroForm acroForm = pdfDocument.getDocumentCatalog().getAcroForm(); + + // as there might not be an AcroForm entry a null check is necessary + if (acroForm != null) + { + // Retrieve an individual field and set its value. + PDTextField field = (PDTextField) acroForm.getField( "sampleField" ); + field.setValue("Text Entry"); + + // If a field is nested within the form tree a fully qualified name + // might be provided to access the field. + field = (PDTextField) acroForm.getField( "fieldsContainer.nestedSampleField" ); + field.setValue("Text Entry"); + } + + // Save and close the filled out form. + pdfDocument.save("target/FillFormField.pdf"); + } + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/PrintFields.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/PrintFields.java new file mode 100644 index 00000000000..7704f836f75 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/PrintFields.java @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDNonTerminalField; + +/** + * This example will take a PDF document and print all the fields from the file. + * + * @author Ben Litchfield + * + */ +public class PrintFields +{ + + /** + * This will print all the fields from the document. + * + * @param pdfDocument The PDF to get the fields from. + * + * @throws IOException If there is an error getting the fields. + */ + public void printFields(PDDocument pdfDocument) throws IOException + { + PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog(); + PDAcroForm acroForm = docCatalog.getAcroForm(); + List fields = acroForm.getFields(); + + System.out.println(fields.size() + " top-level fields were found on the form"); + + for (PDField field : fields) + { + processField(field, "|--", field.getPartialName()); + } + } + + private void processField(PDField field, String sLevel, String sParent) throws IOException + { + String partialName = field.getPartialName(); + + if (field instanceof PDNonTerminalField) + { + if (!sParent.equals(field.getPartialName())) + { + if (partialName != null) + { + sParent = sParent + "." + partialName; + } + } + System.out.println(sLevel + sParent); + + for (PDField child : ((PDNonTerminalField)field).getChildren()) + { + processField(child, "| " + sLevel, sParent); + } + } + else + { + String fieldValue = field.getValueAsString(); + StringBuilder outputString = new StringBuilder(sLevel); + outputString.append(sParent); + if (partialName != null) + { + outputString.append(".").append(partialName); + } + outputString.append(" = ").append(fieldValue); + outputString.append(", type=").append(field.getClass().getName()); + System.out.println(outputString); + } + } + + /** + * This will read a PDF file and print out the form elements.
+ * see usage() for commandline + * + * @param args command line arguments + * + * @throws IOException If there is an error importing the FDF document. + */ + public static void main(String[] args) throws IOException + { + PDDocument pdf = null; + try + { + if (args.length != 1) + { + usage(); + } + else + { + pdf = PDDocument.load(new File(args[0])); + PrintFields exporter = new PrintFields(); + exporter.printFields(pdf); + } + } + finally + { + if (pdf != null) + { + pdf.close(); + } + } + } + + /** + * This will print out a message telling how to use this example. + */ + private static void usage() + { + System.err.println("usage: org.apache.pdfbox.examples.interactive.form.PrintFields "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/SetField.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/SetField.java new file mode 100644 index 00000000000..371f62febd5 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/SetField.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDCheckBox; +import org.apache.pdfbox.pdmodel.interactive.form.PDComboBox; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDListBox; +import org.apache.pdfbox.pdmodel.interactive.form.PDRadioButton; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; + +/** + * This example will take a PDF document and set a form field in it. + * + * @author Ben Litchfield + * + */ +public class SetField +{ + /** + * This will set a single field in the document. + * + * @param pdfDocument The PDF to set the field in. + * @param name The name of the field to set. + * @param value The new value of the field. + * + * @throws IOException If there is an error setting the field. + */ + public void setField(PDDocument pdfDocument, String name, String value) throws IOException + { + PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog(); + PDAcroForm acroForm = docCatalog.getAcroForm(); + PDField field = acroForm.getField(name); + if (field != null) + { + if (field instanceof PDCheckBox) + { + field.setValue("Yes"); + } + else if (field instanceof PDComboBox) + { + field.setValue(value); + } + else if (field instanceof PDListBox) + { + field.setValue(value); + } + else if (field instanceof PDRadioButton) + { + field.setValue(value); + } + else if (field instanceof PDTextField) + { + field.setValue(value); + } + } + else + { + System.err.println("No field found with name:" + name); + } + } + + /** + * This will read a PDF file and set a field and then write it the pdf out + * again.
+ * see usage() for commandline + * + * @param args command line arguments + * + * @throws IOException If there is an error importing the FDF document. + */ + public static void main(String[] args) throws IOException + { + SetField setter = new SetField(); + setter.setField(args); + } + + private void setField(String[] args) throws IOException + { + PDDocument pdf = null; + try + { + if (args.length != 3) + { + usage(); + } + else + { + SetField example = new SetField(); + pdf = PDDocument.load(new File(args[0])); + example.setField(pdf, args[1], args[2]); + pdf.save(args[0]); + } + } + finally + { + if (pdf != null) + { + pdf.close(); + } + } + } + + /** + * This will print out a message telling how to use this example. + */ + private static void usage() + { + System.err.println("usage: org.apache.pdfbox.examples.interactive.form.SetField "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/UpdateFieldOnDocumentOpen.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/UpdateFieldOnDocumentOpen.java new file mode 100644 index 00000000000..2f8c9feff12 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/UpdateFieldOnDocumentOpen.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.interactive.form; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript; + +/** + * Update field automatically when the document is opened. + * + * This sample adds document action to automatically update a + * field value with the current date when the document is opened. + * + * This sample builds on the form generated by @link CreateSimpleForm so you need to run that first. + * + */ +public final class UpdateFieldOnDocumentOpen +{ + private UpdateFieldOnDocumentOpen() + { + } + + public static void main(String[] args) throws IOException + { + // Load the PDF document created by SimpleForm.java + try (PDDocument document = PDDocument.load(new File("target/SimpleForm.pdf"))) + { + // Note that the JavaScript will depend on the reader application. + // The classes and methods available to Adobe Reader and Adobe Acrobat + // are documented in the Acrobat SDK. + String javaScript = "var now = util.printd('yyyy-mm-dd', new Date());" + + "var oField = this.getField('SampleField');" + + "oField.value = now;"; + + // Create an action as JavaScript action + PDActionJavaScript jsAction = new PDActionJavaScript(); + jsAction.setAction(javaScript); + + // Set the action to be executed when the document is opened + document.getDocumentCatalog().setOpenAction(jsAction); + + document.save("target/UpdateFieldOnDocumentOpen.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/package-info.java b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/package-info.java new file mode 100644 index 00000000000..d2625b3027b --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/package-info.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * AcroForms samples for PDFBox. + * + */ + +package org.apache.pdfbox.examples.interactive.form; \ No newline at end of file diff --git a/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java b/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java new file mode 100644 index 00000000000..d0e1b587510 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java @@ -0,0 +1,234 @@ +package org.apache.pdfbox.examples.lucene; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Date; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexWriterConfig.OpenMode; +import org.apache.lucene.index.Term; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; + +/** + * Index all pdf files under a directory. + *

+ * This is a command-line application demonstrating simple Lucene indexing. Run it with no command-line arguments for + * usage information. + *

+ * It's based on a demo provided by the lucene project. + */ +public final class IndexPDFFiles +{ + + private IndexPDFFiles() + { + } + + /** + * Index all text files under a directory. + * + * @param args command line arguments + * + */ + public static void main(String[] args) + { + String usage = "java org.apache.pdfbox.lucene.IndexPDFFiles" + + " [-index INDEX_PATH] [-docs DOCS_PATH] [-update]\n\n" + + "This indexes all PDF documents in DOCS_PATH, creating a Lucene index" + + "in INDEX_PATH that can be searched with SearchFiles"; + String indexPath = "index"; + String docsPath = null; + boolean create = true; + for (int i = 0; i < args.length; i++) + { + switch (args[i]) + { + case "-index": + indexPath = args[i + 1]; + i++; + break; + case "-docs": + docsPath = args[i + 1]; + i++; + break; + case "-update": + create = false; + break; + default: + break; + } + } + + if (docsPath == null) + { + System.err.println("Usage: " + usage); + System.exit(1); + } + + final File docDir = new File(docsPath); + if (!docDir.exists() || !docDir.canRead()) + { + System.out.println("Document directory '" + docDir.getAbsolutePath() + + "' does not exist or is not readable, please check the path"); + System.exit(1); + } + + Date start = new Date(); + try + { + System.out.println("Indexing to directory '" + indexPath + "'..."); + + try (Directory dir = FSDirectory.open(new File(indexPath).toPath())) + { + Analyzer analyzer = new StandardAnalyzer(); + IndexWriterConfig iwc = new IndexWriterConfig(analyzer); + if (create) + { + // Create a new index in the directory, removing any + // previously indexed documents: + iwc.setOpenMode(OpenMode.CREATE); + } + else + { + // Add new documents to an existing index: + iwc.setOpenMode(OpenMode.CREATE_OR_APPEND); + } + // Optional: for better indexing performance, if you + // are indexing many documents, increase the RAM + // buffer. But if you do this, increase the max heap + // size to the JVM (eg add -Xmx512m or -Xmx1g): + // + // iwc.setRAMBufferSizeMB(256.0); + try (final IndexWriter writer = new IndexWriter(dir, iwc)) + { + indexDocs(writer, docDir); + + // NOTE: if you want to maximize search performance, + // you can optionally call forceMerge here. This can be + // a terribly costly operation, so generally it's only + // worth it when your index is relatively static (ie + // you're done adding documents to it): + // + // writer.forceMerge(1); + } + } + + Date end = new Date(); + System.out.println(end.getTime() - start.getTime() + " total milliseconds"); + + } + catch (IOException e) + { + System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage()); + } + } + + /** + * Indexes the given file using the given writer, or if a directory is given, recurses over files and directories + * found under the given directory. + * + * NOTE: This method indexes one document per input file. This is slow. For good throughput, put multiple documents + * into your input file(s). An example of this is in the benchmark module, which can create "line doc" files, one + * document per line, using the WriteLineDocTask. + * + * @param writer Writer to the index where the given file/dir info will be stored + * @param file The file to index, or the directory to recurse into to find files to index + * @throws IOException If there is a low-level I/O error + */ + static void indexDocs(IndexWriter writer, File file) throws IOException + { + // do not try to index files that cannot be read + if (file.canRead()) + { + if (file.isDirectory()) + { + String[] files = file.list(); + // an IO error could occur + if (files != null) + { + for (String fileName : files) + { + indexDocs(writer, new File(file, fileName)); + } + } + } + else + { + + FileInputStream fis; + try + { + fis = new FileInputStream(file); + } + catch (FileNotFoundException fnfe) + { + // at least on windows, some temporary files raise this exception with an "access denied" message + // checking if the file can be read doesn't help + return; + } + + try + { + + String path = file.getName().toUpperCase(); + Document doc; + if (path.toLowerCase().endsWith(".pdf")) + { + System.out.println("Indexing PDF document: " + file); + doc = LucenePDFDocument.getDocument(file); + } + else + { + System.out.println("Skipping " + file); + return; + } + + if (writer.getConfig().getOpenMode() == OpenMode.CREATE) + { + // New index, so we just add the document (no old document can be there): + System.out.println("adding " + file); + writer.addDocument(doc); + } + else + { + // Existing index (an old copy of this document may have been indexed) so + // we use updateDocument instead to replace the old one matching the exact + // path, if present: + System.out.println("updating " + file); + writer.updateDocument(new Term("uid", LucenePDFDocument.createUID(file)), doc); + } + } + finally + { + fis.close(); + } + } + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java b/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java new file mode 100644 index 00000000000..51f550fcdf7 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java @@ -0,0 +1,427 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.lucene; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.Calendar; +import java.util.Date; + +import org.apache.lucene.document.DateTools; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.FieldType; +import org.apache.lucene.document.StringField; +import org.apache.lucene.document.TextField; +import org.apache.lucene.index.IndexOptions; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; +import org.apache.pdfbox.text.PDFTextStripper; + +/** + * This class is used to create a document for the lucene search engine. This should easily plug into the IndexPDFFiles + * that comes with the lucene project. This class will populate the following fields. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Lucene Field NameDescription
pathFile system path if loaded from a file
urlURL to PDF document
contentsEntire contents of PDF document, indexed but not stored
summaryFirst 500 characters of content
modifiedThe modified date/time according to the url or path
uidA unique identifier for the Lucene document.
CreationDateFrom PDF meta-data if available
CreatorFrom PDF meta-data if available
KeywordsFrom PDF meta-data if available
ModificationDateFrom PDF meta-data if available
ProducerFrom PDF meta-data if available
SubjectFrom PDF meta-data if available
TrappedFrom PDF meta-data if available
+ * + * @author Ben Litchfield + * + */ +public class LucenePDFDocument +{ + private static final char FILE_SEPARATOR = System.getProperty("file.separator").charAt(0); + + // given caveat of increased search times when using + // MICROSECOND, only use SECOND by default + private static final DateTools.Resolution DATE_TIME_RES = DateTools.Resolution.SECOND; + + private PDFTextStripper stripper = null; + + /** not Indexed, tokenized, stored. */ + public static final FieldType TYPE_STORED_NOT_INDEXED = new FieldType(); + + static + { + TYPE_STORED_NOT_INDEXED.setIndexOptions(IndexOptions.NONE); + TYPE_STORED_NOT_INDEXED.setStored(true); + TYPE_STORED_NOT_INDEXED.setTokenized(true); + TYPE_STORED_NOT_INDEXED.freeze(); + } + + /** + * Constructor. + */ + public LucenePDFDocument() + { + } + + /** + * Set the text stripper that will be used during extraction. + * + * @param aStripper The new pdf text stripper. + */ + public void setTextStripper(PDFTextStripper aStripper) + { + stripper = aStripper; + } + + private static String timeToString(long time) + { + return DateTools.timeToString(time, DATE_TIME_RES); + } + + private void addKeywordField(Document document, String name, String value) + { + if (value != null) + { + document.add(new StringField(name, value, Field.Store.YES)); + } + } + + private void addTextField(Document document, String name, Reader value) + { + if (value != null) + { + document.add(new TextField(name, value)); + } + } + + private void addTextField(Document document, String name, String value) + { + if (value != null) + { + document.add(new TextField(name, value, Field.Store.YES)); + } + } + + private void addTextField(Document document, String name, Date value) + { + if (value != null) + { + addTextField(document, name, DateTools.dateToString(value, DATE_TIME_RES)); + } + } + + private void addTextField(Document document, String name, Calendar value) + { + if (value != null) + { + addTextField(document, name, value.getTime()); + } + } + + private static void addUnindexedField(Document document, String name, String value) + { + if (value != null) + { + document.add(new Field(name, value, TYPE_STORED_NOT_INDEXED)); + } + } + + private void addUnstoredKeywordField(Document document, String name, String value) + { + if (value != null) + { + document.add(new Field(name, value, TextField.TYPE_NOT_STORED)); + } + } + + /** + * Convert the PDF stream to a lucene document. + * + * @param is The input stream. + * @return The input stream converted to a lucene document. + * @throws IOException If there is an error converting the PDF. + */ + public Document convertDocument(InputStream is) throws IOException + { + Document document = new Document(); + addContent(document, is, ""); + return document; + + } + + /** + * This will take a reference to a PDF document and create a lucene document. + * + * @param file A reference to a PDF document. + * @return The converted lucene document. + * + * @throws IOException If there is an exception while converting the document. + */ + public Document convertDocument(File file) throws IOException + { + Document document = new Document(); + + // Add the url as a field named "url". Use an UnIndexed field, so + // that the url is just stored with the document, but is not searchable. + addUnindexedField(document, "path", file.getPath()); + addUnindexedField(document, "url", file.getPath().replace(FILE_SEPARATOR, '/')); + + // Add the last modified date of the file a field named "modified". Use a + // Keyword field, so that it's searchable, but so that no attempt is made + // to tokenize the field into words. + addKeywordField(document, "modified", timeToString(file.lastModified())); + + String uid = createUID(file); + + // Add the uid as a field, so that index can be incrementally maintained. + // This field is not stored with document, it is indexed, but it is not + // tokenized prior to indexing. + addUnstoredKeywordField(document, "uid", uid); + + try (FileInputStream input = new FileInputStream(file)) + { + addContent(document, input, file.getPath()); + } + + // return the document + + return document; + } + + /** + * Convert the document from a PDF to a lucene document. + * + * @param url A url to a PDF document. + * @return The PDF converted to a lucene document. + * @throws IOException If there is an error while converting the document. + */ + public Document convertDocument(URL url) throws IOException + { + Document document = new Document(); + URLConnection connection = url.openConnection(); + connection.connect(); + // Add the url as a field named "url". Use an UnIndexed field, so + // that the url is just stored with the document, but is not searchable. + addUnindexedField(document, "url", url.toExternalForm()); + + // Add the last modified date of the file a field named "modified". Use a + // Keyword field, so that it's searchable, but so that no attempt is made + // to tokenize the field into words. + addKeywordField(document, "modified", timeToString(connection.getLastModified())); + + String uid = createUID(url, connection.getLastModified()); + + // Add the uid as a field, so that index can be incrementally maintained. + // This field is not stored with document, it is indexed, but it is not + // tokenized prior to indexing. + addUnstoredKeywordField(document, "uid", uid); + + try (InputStream input = connection.getInputStream()) + { + addContent(document, input, url.toExternalForm()); + } + + // return the document + return document; + } + + /** + * This will get a lucene document from a PDF file. + * + * @param is The stream to read the PDF from. + * + * @return The lucene document. + * + * @throws IOException If there is an error parsing or indexing the document. + */ + public static Document getDocument(InputStream is) throws IOException + { + LucenePDFDocument converter = new LucenePDFDocument(); + return converter.convertDocument(is); + } + + /** + * This will get a lucene document from a PDF file. + * + * @param file The file to get the document for. + * + * @return The lucene document. + * + * @throws IOException If there is an error parsing or indexing the document. + */ + public static Document getDocument(File file) throws IOException + { + LucenePDFDocument converter = new LucenePDFDocument(); + return converter.convertDocument(file); + } + + /** + * This will get a lucene document from a PDF file. + * + * @param url The file to get the document for. + * + * @return The lucene document. + * + * @throws IOException If there is an error parsing or indexing the document. + */ + public static Document getDocument(URL url) throws IOException + { + LucenePDFDocument converter = new LucenePDFDocument(); + return converter.convertDocument(url); + } + + /** + * This will add the contents to the lucene document. + * + * @param document The document to add the contents to. + * @param is The stream to get the contents from. + * @param documentLocation The location of the document, used just for debug messages. + * + * @throws IOException If there is an error parsing the document. + */ + private void addContent(Document document, InputStream is, String documentLocation) throws IOException + { + try (PDDocument pdfDocument = PDDocument.load(is)) + { + // create a writer where to append the text content. + StringWriter writer = new StringWriter(); + if (stripper == null) + { + stripper = new PDFTextStripper(); + } + stripper.writeText(pdfDocument, writer); + + // Note: the buffer to string operation is costless; + // the char array value of the writer buffer and the content string + // is shared as long as the buffer content is not modified, which will + // not occur here. + String contents = writer.getBuffer().toString(); + + StringReader reader = new StringReader(contents); + + // Add the tag-stripped contents as a Reader-valued Text field so it will + // get tokenized and indexed. + addTextField(document, "contents", reader); + + PDDocumentInformation info = pdfDocument.getDocumentInformation(); + if (info != null) + { + addTextField(document, "Author", info.getAuthor()); + addTextField(document, "CreationDate", info.getCreationDate()); + addTextField(document, "Creator", info.getCreator()); + addTextField(document, "Keywords", info.getKeywords()); + addTextField(document, "ModificationDate", info.getModificationDate()); + addTextField(document, "Producer", info.getProducer()); + addTextField(document, "Subject", info.getSubject()); + addTextField(document, "Title", info.getTitle()); + addTextField(document, "Trapped", info.getTrapped()); + } + int summarySize = Math.min(contents.length(), 500); + String summary = contents.substring(0, summarySize); + // Add the summary as an UnIndexed field, so that it is stored and returned + // with hit documents for display. + addUnindexedField(document, "summary", summary); + } + catch (InvalidPasswordException e) + { + // they didn't suppply a password and the default of "" was wrong. + throw new IOException("Error: The document(" + documentLocation + ") is encrypted and will not be indexed.", e); + } + } + + /** + * Create an UID for the given file using the given time. + * + * @param url the file we have to create an UID for + * @param time the time to used to the UID + * + * @return the created UID + */ + public static String createUID(URL url, long time) + { + return url.toExternalForm().replace(FILE_SEPARATOR, '\u0000') + "\u0000" + timeToString(time); + } + + /** + * Create an UID for the given file. + * + * @param file the file we have to create an UID for + * + * @return the created UID + */ + public static String createUID(File file) + { + return file.getPath().replace(FILE_SEPARATOR, '\u0000') + "\u0000" + timeToString(file.lastModified()); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/lucene/package.html b/examples/src/main/java/org/apache/pdfbox/examples/lucene/package.html new file mode 100644 index 00000000000..8607cfa536d --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/lucene/package.html @@ -0,0 +1,25 @@ + + + + + + + +This example shows how to to integrate the PDFBox project with lucene. + + diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddAnnotations.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddAnnotations.java new file mode 100644 index 00000000000..6411de5908c --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddAnnotations.java @@ -0,0 +1,346 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationCircle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationFreeText; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationHighlight; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationPolygon; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationSquare; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitWidthDestination; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDVariableText; + +/** + * Add annotations to pages of a PDF document. + */ +public final class AddAnnotations +{ + static final float INCH = 72; + + private AddAnnotations() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + System.err.println("Usage: " + AddAnnotations.class.getName() + " "); + System.exit(1); + } + + try (PDDocument document = new PDDocument()) + { + PDPage page1 = new PDPage(); + PDPage page2 = new PDPage(); + PDPage page3 = new PDPage(); + document.addPage(page1); + document.addPage(page2); + document.addPage(page3); + List annotations = page1.getAnnotations(); + + // Some basic reusable objects/constants + // Annotations themselves can only be used once! + PDColor red = new PDColor(new float[] { 1, 0, 0 }, PDDeviceRGB.INSTANCE); + PDColor blue = new PDColor(new float[] { 0, 0, 1 }, PDDeviceRGB.INSTANCE); + PDColor green = new PDColor(new float[] { 0, 1, 0 }, PDDeviceRGB.INSTANCE); + PDColor black = new PDColor(new float[] { 0, 0, 0 }, PDDeviceRGB.INSTANCE); + + PDBorderStyleDictionary borderThick = new PDBorderStyleDictionary(); + borderThick.setWidth(INCH / 12); // 12th inch + + PDBorderStyleDictionary borderThin = new PDBorderStyleDictionary(); + borderThin.setWidth(INCH / 72); // 1 point + + PDBorderStyleDictionary borderULine = new PDBorderStyleDictionary(); + borderULine.setStyle(PDBorderStyleDictionary.STYLE_UNDERLINE); + borderULine.setWidth(INCH / 72); // 1 point + + float pw = page1.getMediaBox().getUpperRightX(); + float ph = page1.getMediaBox().getUpperRightY(); + + // First add some text, two lines we'll add some annotations to this later + PDFont font = PDType1Font.HELVETICA_BOLD; + try (PDPageContentStream contents = new PDPageContentStream(document, page1)) + { + contents.beginText(); + contents.setFont(font, 18); + contents.newLineAtOffset(INCH, ph - INCH - 18); + contents.showText("PDFBox"); + contents.newLineAtOffset(0, -(INCH / 2)); + contents.showText("External URL"); + contents.newLineAtOffset(0, -(INCH / 2)); + contents.showText("Jump to page three"); + contents.endText(); + } + + // Now add the markup annotation, a highlight to PDFBox text + PDAnnotationHighlight txtHighlight = new PDAnnotationHighlight(); + txtHighlight.setColor(new PDColor(new float[] { 0, 1, 1 }, PDDeviceRGB.INSTANCE)); + // 20% transparent + txtHighlight.setConstantOpacity((float)0.2); + + // Set the rectangle containing the markup + float textWidth = font.getStringWidth("PDFBox") / 1000 * 18; + PDRectangle position = new PDRectangle(); + position.setLowerLeftX(INCH); + position.setLowerLeftY(ph - INCH - 18); + position.setUpperRightX(INCH + textWidth); + position.setUpperRightY(ph - INCH); + txtHighlight.setRectangle(position); + + // work out the points forming the four corners of the annotations + // set out in anti clockwise form (Completely wraps the text) + // OK, the below doesn't match that description. + // It's what acrobat 7 does and displays properly! + float[] quads = new float[8]; + quads[0] = position.getLowerLeftX(); // x1 + quads[1] = position.getUpperRightY()-2; // y1 + quads[2] = position.getUpperRightX(); // x2 + quads[3] = quads[1]; // y2 + quads[4] = quads[0]; // x3 + quads[5] = position.getLowerLeftY()-2; // y3 + quads[6] = quads[2]; // x4 + quads[7] = quads[5]; // y5 + + txtHighlight.setQuadPoints(quads); + txtHighlight.setContents("Highlighted since it's important"); + annotations.add(txtHighlight); + + // Now add the link annotation, so the click on "External URL" works + PDAnnotationLink txtLink = new PDAnnotationLink(); + txtLink.setBorderStyle(borderULine); + + // Set the rectangle containing the link + textWidth = font.getStringWidth("External URL") / 1000 * 18; + position = new PDRectangle(); + position.setLowerLeftX(INCH); + position.setLowerLeftY(ph - 1.5f * INCH -20); // down a couple of points + position.setUpperRightX(INCH + textWidth); + position.setUpperRightY(ph - 1.5f * INCH); + txtLink.setRectangle(position); + + // add an action + PDActionURI action = new PDActionURI(); + action.setURI("http://pdfbox.apache.org"); + txtLink.setAction(action); + annotations.add(txtLink); + + // Now draw a few more annotations + PDAnnotationCircle aCircle = new PDAnnotationCircle(); + aCircle.setContents("Circle Annotation"); + aCircle.setInteriorColor(red); // Fill in circle in red + aCircle.setColor(blue); // The border itself will be blue + aCircle.setBorderStyle(borderThin); + + // Place the annotation on the page, we'll make this 1" round + // 3" down, 1" in on the page + position = new PDRectangle(); + position.setLowerLeftX(INCH); + position.setLowerLeftY(ph - 3 * INCH -INCH); // 1" height, 3" down + position.setUpperRightX(2 * INCH); // 1" in, 1" width + position.setUpperRightY(ph - 3*INCH); // 3" down + aCircle.setRectangle(position); + annotations.add(aCircle); + + // Now a square annotation + PDAnnotationSquare aSquare = new PDAnnotationSquare(); + aSquare.setContents("Square Annotation"); + aSquare.setColor(red); // Outline in red, not setting a fill + aSquare.setBorderStyle(borderThick); + + // Place the annotation on the page, we'll make this 1" (72 points) square + // 3.5" down, 1" in from the right on the page + position = new PDRectangle(); // Reuse the variable, but note it's a new object! + position.setLowerLeftX(pw - 2 * INCH); // 1" in from right, 1" wide + position.setLowerLeftY(ph - 3.5f * INCH - INCH); // 1" height, 3.5" down + position.setUpperRightX(pw - INCH); // 1" in from right + position.setUpperRightY(ph - 3.5f * INCH); // 3.5" down + aSquare.setRectangle(position); + annotations.add(aSquare); + + // Now we want to draw a line between the two, one end with an open arrow + PDAnnotationLine aLine = new PDAnnotationLine(); + aLine.setEndPointEndingStyle(PDAnnotationLine.LE_OPEN_ARROW); + aLine.setContents("Circle->Square"); + aLine.setCaption(true); // Make the contents a caption on the line + + // Set the rectangle containing the line + position = new PDRectangle(); // Reuse the variable, but note it's a new object! + position.setLowerLeftX(2 * INCH); // 1" in + width of circle + position.setLowerLeftY(ph - 3.5f * INCH - INCH); // 1" height, 3.5" down + position.setUpperRightX(pw - INCH-INCH); // 1" in from right, and width of square + position.setUpperRightY(ph - 3 * INCH); // 3" down (top of circle) + aLine.setRectangle(position); + + // Now set the line position itself + float[] linepos = new float[4]; + linepos[0] = 2 * INCH; // x1 = rhs of circle + linepos[1] = ph - 3.5f * INCH; // y1 halfway down circle + linepos[2] = pw- 2 * INCH; // x2 = lhs of square + linepos[3] = ph- 4 * INCH; // y2 halfway down square + aLine.setLine(linepos); + + aLine.setBorderStyle(borderThick); + aLine.setColor(black); + annotations.add(aLine); + + + // Now add the link annotation, so the click on "Jump to page three" works + PDAnnotationLink pageLink = new PDAnnotationLink(); + pageLink.setBorderStyle(borderULine); + + // Set the rectangle containing the link + textWidth = font.getStringWidth("Jump to page three") / 1000 * 18; + position = new PDRectangle(); + position.setLowerLeftX(INCH); + position.setLowerLeftY(ph - 2 * INCH - 20); // down a couple of points + position.setUpperRightX(INCH + textWidth); + position.setUpperRightY(ph - 2 * INCH); + pageLink.setRectangle(position); + + // add the GoTo action + PDActionGoTo actionGoto = new PDActionGoTo(); + // see javadoc for other types of PDPageDestination + PDPageDestination dest = new PDPageFitWidthDestination(); + // do not use setPageNumber(), this is for external destinations only + dest.setPage(page3); + actionGoto.setDestination(dest); + pageLink.setAction(actionGoto); + annotations.add(pageLink); + + PDAnnotationFreeText freeTextAnnotation = new PDAnnotationFreeText(); + PDColor yellow = new PDColor(new float[] { 1, 1, 0 }, PDDeviceRGB.INSTANCE); + // this sets background only (contradicts PDF specification) + freeTextAnnotation.setColor(yellow); + position = new PDRectangle(); + position.setLowerLeftX(1 * INCH); + position.setLowerLeftY(ph - 5f * INCH - 3 * INCH); + position.setUpperRightX(pw - INCH); + position.setUpperRightY(ph - 5f * INCH); + freeTextAnnotation.setRectangle(position); + freeTextAnnotation.setTitlePopup("Sophia Lorem"); + freeTextAnnotation.setSubject("Lorem ipsum"); + freeTextAnnotation.setContents("Lorem ipsum dolor sit amet, consetetur sadipscing elitr," + + " sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam " + + "erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea " + + "rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum " + + "dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " + + "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam " + + "erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea " + + "rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum " + + "dolor sit amet."); + // Text and border in blue RGB color, "Helv" font, 20 point + freeTextAnnotation.setDefaultAppearance("0 0 1 rg /Helv 20 Tf"); + // Quadding does not have any effect?! + freeTextAnnotation.setQ(PDVariableText.QUADDING_RIGHT); + freeTextAnnotation.setIntent(PDAnnotationFreeText.IT_FREE_TEXT_CALLOUT); + freeTextAnnotation.setCallout(new float[]{0, ph - 9 * INCH, 3 * INCH, ph - 9 * INCH, 4 * INCH, ph - 8 * INCH}); + freeTextAnnotation.setLineEndingStyle(PDAnnotationLine.LE_OPEN_ARROW); + annotations.add(freeTextAnnotation); + + PDAnnotationPolygon polygon = new PDAnnotationPolygon(); + position = new PDRectangle(); + position.setLowerLeftX(pw - INCH); + position.setLowerLeftY(ph - INCH); + position.setUpperRightX(pw - 2 * INCH); + position.setUpperRightY(ph - 2 * INCH); + polygon.setRectangle(position); + polygon.setColor(blue); + polygon.setInteriorColor(green); + float[] vertices = { pw - INCH, ph - 2 * INCH, + pw - 1.5f * INCH, ph - INCH, + pw - 2 * INCH, ph - 2 * INCH }; + polygon.setVertices(vertices); + polygon.setBorderStyle(borderThick); + polygon.setContents("Polygon annotation"); + annotations.add(polygon); + + + // add the "Helv" font to the default resources + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + if (acroForm == null) + { + acroForm = new PDAcroForm(document); + document.getDocumentCatalog().setAcroForm(acroForm); + } + PDResources dr = acroForm.getDefaultResources(); + if (dr == null) + { + dr = new PDResources(); + acroForm.setDefaultResources(dr); + } + dr.put(COSName.getPDFName("Helv"), PDType1Font.HELVETICA); + + // Create the appearance streams. + // Adobe Reader will always display annotations without appearance streams nicely, + // but other applications may not. + for (PDAnnotation ann : annotations) + { + ann.constructAppearances(); + } + + showPageNo(document, page1, "Page 1"); + showPageNo(document, page2, "Page 2"); + showPageNo(document, page3, "Page 3"); + + // save the PDF + document.save(args[0]); + } + } + + private static void showPageNo(PDDocument document, PDPage page, String pageText) + throws IOException + { + int fontSize = 10; + + try (PDPageContentStream contents = + new PDPageContentStream(document, page, PDPageContentStream.AppendMode.PREPEND, true)) + { + float pageWidth = page.getMediaBox().getWidth(); + float pageHeight = page.getMediaBox().getHeight(); + PDFont font = PDType1Font.HELVETICA; + contents.setFont(font, fontSize); + float textWidth = font.getStringWidth(pageText) / 1000 * fontSize; + contents.beginText(); + contents.newLineAtOffset(pageWidth / 2 - textWidth / 2, pageHeight - INCH / 2); + contents.showText(pageText); + contents.endText(); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java new file mode 100644 index 00000000000..5265e3cba13 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddImageToPDF.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; + +/** + * This is an example that creates a reads a document and adds an image to it.. + * + * The example is taken from the pdf file format specification. + * + * @author Ben Litchfield + */ +public class AddImageToPDF +{ + /** + * Add an image to an existing PDF document. + * + * @param inputFile The input PDF to add the image to. + * @param imagePath The filename of the image to put in the PDF. + * @param outputFile The file to write to the pdf to. + * + * @throws IOException If there is an error writing the data. + */ + public void createPDFFromImage( String inputFile, String imagePath, String outputFile ) + throws IOException + { + try (PDDocument doc = PDDocument.load(new File(inputFile))) + { + //we will add the image to the first page. + PDPage page = doc.getPage(0); + + // createFromFile is the easiest way with an image file + // if you already have the image in a BufferedImage, + // call LosslessFactory.createFromImage() instead + PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, doc); + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true)) + { + // contentStream.drawImage(ximage, 20, 20 ); + // better method inspired by http://stackoverflow.com/a/22318681/535646 + // reduce this value if the image is too large + float scale = 1f; + contentStream.drawImage(pdImage, 20, 20, pdImage.getWidth() * scale, pdImage.getHeight() * scale); + } + doc.save(outputFile); + } + } + + /** + * This will load a PDF document and add a single image on it. + *
+ * see usage() for commandline + * + * @param args Command line arguments. + */ + public static void main(String[] args) throws IOException + { + AddImageToPDF app = new AddImageToPDF(); + if( args.length != 3 ) + { + app.usage(); + } + else + { + app.createPDFFromImage( args[0], args[1], args[2] ); + } + } + + /** + * This will print out a message telling how to use this example. + */ + private void usage() + { + System.err.println( "usage: " + this.getClass().getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddJavascript.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddJavascript.java new file mode 100644 index 00000000000..8621848c23e --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddJavascript.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript; + +import java.io.File; +import java.io.IOException; + +/** + * This is an example of how to set some javascript in the document. + * + * @author Ben Litchfield + */ +public final class AddJavascript +{ + private AddJavascript() + { + //static class, should not be instantiated. + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 2 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PDActionJavaScript javascript = new PDActionJavaScript( + "app.alert( {cMsg: 'PDFBox rocks!', nIcon: 3, nType: 0, cTitle: 'PDFBox Javascript example' } );"); + document.getDocumentCatalog().setOpenAction( javascript ); + if( document.isEncrypted() ) + { + throw new IOException( "Encrypted documents are not supported for this example" ); + } + document.save( args[1] ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + AddJavascript.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java new file mode 100644 index 00000000000..035b9957c19 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMessageToEachPage.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.util.Matrix; + +/** + * This is an example of how to add a message to every page + * in a pdf document. + * + * @author Ben Litchfield + */ +public class AddMessageToEachPage +{ + /** + * Constructor. + */ + public AddMessageToEachPage() + { + super(); + } + + /** + * create the second sample document from the PDF file format specification. + * + * @param file The file to write the PDF to. + * @param message The message to write in the file. + * @param outfile The resulting PDF. + * + * @throws IOException If there is an error writing the data. + */ + public void doIt( String file, String message, String outfile ) throws IOException + { + try (PDDocument doc = PDDocument.load(new File(file))) + { + PDFont font = PDType1Font.HELVETICA_BOLD; + float fontSize = 36.0f; + + for( PDPage page : doc.getPages() ) + { + PDRectangle pageSize = page.getMediaBox(); + float stringWidth = font.getStringWidth( message )*fontSize/1000f; + // calculate to center of the page + int rotation = page.getRotation(); + boolean rotate = rotation == 90 || rotation == 270; + float pageWidth = rotate ? pageSize.getHeight() : pageSize.getWidth(); + float pageHeight = rotate ? pageSize.getWidth() : pageSize.getHeight(); + float centerX = rotate ? pageHeight/2f : (pageWidth - stringWidth)/2f; + float centerY = rotate ? (pageWidth - stringWidth)/2f : pageHeight/2f; + + // append the content to the existing stream + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true)) + { + contentStream.beginText(); + // set font and font size + contentStream.setFont( font, fontSize ); + // set text color to red + contentStream.setNonStrokingColor(255, 0, 0); + if (rotate) + { + // rotate the text according to the page rotation + contentStream.setTextMatrix(Matrix.getRotateInstance(Math.PI / 2, centerX, centerY)); + } + else + { + contentStream.setTextMatrix(Matrix.getTranslateInstance(centerX, centerY)); + } + contentStream.showText(message); + contentStream.endText(); + } + } + + doc.save( outfile ); + } + } + + /** + * This will create a hello world PDF document. + *
+ * see usage() for commandline + * + * @param args Command line arguments. + */ + public static void main(String[] args) throws IOException + { + AddMessageToEachPage app = new AddMessageToEachPage(); + if( args.length != 3 ) + { + app.usage(); + } + else + { + app.doIt( args[0], args[1], args[2] ); + } + } + + /** + * This will print out a message telling how to use this example. + */ + private void usage() + { + System.err.println( "usage: " + this.getClass().getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMetadataFromDocInfo.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMetadataFromDocInfo.java new file mode 100644 index 00000000000..319948b4385 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddMetadataFromDocInfo.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.xmpbox.XMPMetadata; +import org.apache.xmpbox.schema.AdobePDFSchema; +import org.apache.xmpbox.schema.DublinCoreSchema; +import org.apache.xmpbox.schema.XMPBasicSchema; +import org.apache.xmpbox.xml.XmpSerializer; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.GregorianCalendar; +import javax.xml.transform.TransformerException; + +/** + * This is an example on how to add metadata to a document. + * + * @author Ben Litchfield + * + */ +public final class AddMetadataFromDocInfo +{ + private AddMetadataFromDocInfo() + { + //utility class + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + * @throws TransformerException + */ + public static void main( String[] args ) throws IOException, TransformerException + { + if( args.length != 2 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if (document.isEncrypted()) + { + System.err.println( "Error: Cannot add metadata to encrypted document." ); + System.exit( 1 ); + } + PDDocumentCatalog catalog = document.getDocumentCatalog(); + PDDocumentInformation info = document.getDocumentInformation(); + + XMPMetadata metadata = XMPMetadata.createXMPMetadata(); + + AdobePDFSchema pdfSchema = metadata.createAndAddAdobePDFSchema(); + pdfSchema.setKeywords( info.getKeywords() ); + pdfSchema.setProducer( info.getProducer() ); + + XMPBasicSchema basicSchema = metadata.createAndAddXMPBasicSchema(); + basicSchema.setModifyDate( info.getModificationDate() ); + basicSchema.setCreateDate( info.getCreationDate() ); + basicSchema.setCreatorTool( info.getCreator() ); + basicSchema.setMetadataDate( new GregorianCalendar() ); + + DublinCoreSchema dcSchema = metadata.createAndAddDublinCoreSchema(); + dcSchema.setTitle( info.getTitle() ); + dcSchema.addCreator( "PDFBox" ); + dcSchema.setDescription( info.getSubject() ); + + PDMetadata metadataStream = new PDMetadata(document); + catalog.setMetadata( metadataStream ); + + XmpSerializer serializer = new XmpSerializer(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + serializer.serialize(metadata, baos, false); + metadataStream.importXMPMetadata( baos.toByteArray() ); + + document.save( args[1] ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + AddMetadataFromDocInfo.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/BengaliPdfGenerationHelloWorld.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/BengaliPdfGenerationHelloWorld.java new file mode 100644 index 00000000000..555307aa66f --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/BengaliPdfGenerationHelloWorld.java @@ -0,0 +1,207 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.pdmodel; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.util.Charsets; + +/** + * Inspired from PdfBox + * Example. This attempts to correctly demonstrate to what extent Bengali text rendering is + * supported. We read large amount of text from a file and try to render it properly. + * + * @author Palash Ray + * + */ +public class BengaliPdfGenerationHelloWorld +{ + private static final int LINE_GAP = 5; + private static final String LOHIT_BENGALI_TTF = "/org/apache/pdfbox/resources/ttf/Lohit-Bengali.ttf"; + private static final String TEXT_SOURCE_FILE = "/org/apache/pdfbox/resources/ttf/bengali-samples.txt"; + private static final int FONT_SIZE = 20; + private static final int MARGIN = 20; + + private BengaliPdfGenerationHelloWorld() + { + } + + public static void main(String[] args) throws IOException, URISyntaxException + { + if (args.length != 1) + { + System.err.println( + "usage: " + BengaliPdfGenerationHelloWorld.class.getName() + " "); + System.exit(1); + } + + String filename = args[0]; + + System.out.println("The generated pdf filename is: " + filename); + + try (PDDocument doc = new PDDocument()) + { + PDFont font = PDType0Font.load(doc, + BengaliPdfGenerationHelloWorld.class.getResourceAsStream(LOHIT_BENGALI_TTF), + true); + PDRectangle rectangle = getPageSize(); + float workablePageWidth = rectangle.getWidth() - 2 * MARGIN; + float workablePageHeight = rectangle.getHeight() - 2 * MARGIN; + + List> pagedTexts = getReAlignedTextBasedOnPageHeight( + getReAlignedTextBasedOnPageWidth(getBengaliTextFromFile(), font, + workablePageWidth), + font, workablePageHeight); + + for (List linesForPage : pagedTexts) + { + PDPage page = new PDPage(getPageSize()); + doc.addPage(page); + + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + contents.beginText(); + contents.setFont(font, FONT_SIZE); + contents.newLineAtOffset(rectangle.getLowerLeftX() + MARGIN, + rectangle.getUpperRightY() - MARGIN); + + for (String line : linesForPage) + { + contents.showText(line); + contents.newLineAtOffset(0, -(FONT_SIZE + LINE_GAP)); + } + + contents.endText(); + + } + } + + doc.save(filename); + } + } + + private static List> getReAlignedTextBasedOnPageHeight(List originalLines, + PDFont font, float workablePageHeight) + { + final float newLineHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 + * FONT_SIZE + LINE_GAP; + List> realignedTexts = new ArrayList<>(); + float consumedHeight = 0; + List linesInAPage = new ArrayList<>(); + for (String line : originalLines) + { + if (newLineHeight + consumedHeight < workablePageHeight) + { + consumedHeight += newLineHeight; + } + else + { + consumedHeight = newLineHeight; + realignedTexts.add(linesInAPage); + linesInAPage = new ArrayList<>(); + } + + linesInAPage.add(line); + } + realignedTexts.add(linesInAPage); + return realignedTexts; + } + + private static List getReAlignedTextBasedOnPageWidth(List originalLines, + PDFont font, float workablePageWidth) throws IOException + { + List uniformlyWideTexts = new ArrayList<>(); + float consumedWidth = 0; + StringBuilder sb = new StringBuilder(); + for (String line : originalLines) + { + float newTokenWidth = 0; + StringTokenizer st = new StringTokenizer(line, " ", true); + while (st.hasMoreElements()) + { + String token = st.nextToken(); + newTokenWidth = font.getStringWidth(token) / 1000 * FONT_SIZE; + if (newTokenWidth + consumedWidth < workablePageWidth) + { + consumedWidth += newTokenWidth; + } + else + { + // add a new text chunk + uniformlyWideTexts.add(sb.toString()); + consumedWidth = newTokenWidth; + sb = new StringBuilder(); + } + + sb.append(token); + } + + // add a new text chunk + uniformlyWideTexts.add(sb.toString()); + consumedWidth = newTokenWidth; + sb = new StringBuilder(); + } + + return uniformlyWideTexts; + } + + private static PDRectangle getPageSize() + { + return PDRectangle.A4; + } + + private static List getBengaliTextFromFile() throws IOException + { + List lines = new ArrayList<>(); + + try (BufferedReader br = new BufferedReader(new InputStreamReader( + BengaliPdfGenerationHelloWorld.class.getResourceAsStream(TEXT_SOURCE_FILE), Charsets.UTF_8));) + { + while (true) + { + String line = br.readLine(); + + if (line == null) + { + break; + } + + if (!line.startsWith("#")) + { + lines.add(line); + } + } + } + + return lines; + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java new file mode 100644 index 00000000000..043915bcf2d --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBlankPDF.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; + +/** + * Create a blank PDF and write the contents to a file. + */ +public final class CreateBlankPDF +{ + private CreateBlankPDF() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + System.err.println("usage: " + CreateBlankPDF.class.getName() + " "); + System.exit(1); + } + + String filename = args[0]; + + try (PDDocument doc = new PDDocument()) + { + // a valid PDF document requires at least one page + PDPage blankPage = new PDPage(); + doc.addPage(blankPage); + doc.save(filename); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBookmarks.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBookmarks.java new file mode 100644 index 00000000000..89e7b4296d3 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateBookmarks.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PageMode; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitWidthDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; + +/** + * This is an example on how to add bookmarks to a PDF document. It simply + * adds 1 bookmark for every page. + * + * @author Ben Litchfield + */ +public final class CreateBookmarks +{ + private CreateBookmarks() + { + //utility class + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 2 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if (document.isEncrypted()) + { + System.err.println( "Error: Cannot add bookmarks to encrypted document." ); + System.exit( 1 ); + } + PDDocumentOutline outline = new PDDocumentOutline(); + document.getDocumentCatalog().setDocumentOutline( outline ); + PDOutlineItem pagesOutline = new PDOutlineItem(); + pagesOutline.setTitle( "All Pages" ); + outline.addLast( pagesOutline ); + int pageNum = 0; + for( PDPage page : document.getPages() ) + { + pageNum++; + PDPageDestination dest = new PDPageFitWidthDestination(); + // If you want to have several bookmarks pointing to different areas + // on the same page, have a look at the other classes derived from PDPageDestination. + + dest.setPage( page ); + PDOutlineItem bookmark = new PDOutlineItem(); + bookmark.setDestination( dest ); + bookmark.setTitle( "Page " + pageNum ); + pagesOutline.addLast( bookmark ); + } + pagesOutline.openNode(); + outline.openNode(); + + // optional: show the outlines when opening the file + document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES); + + document.save( args[1] ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + CreateBookmarks.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateGradientShadingPDF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateGradientShadingPDF.java new file mode 100644 index 00000000000..a3ae1ef4be9 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateGradientShadingPDF.java @@ -0,0 +1,238 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import javax.imageio.ImageIO; +import javax.imageio.stream.MemoryCacheImageOutputStream; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.function.PDFunctionType2; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType2; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType3; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType4; +import org.apache.pdfbox.rendering.PDFRenderer; + +/** + * This example creates a PDF with type 2 (axial) and type 3 (radial) shadings with a type 2 + * (exponential) function, and a type 4 (gouraud triangle shading) without function. + * + * @author Tilman Hausherr + */ +public class CreateGradientShadingPDF +{ + + /** + * This will create the PDF and write the contents to a file. + * + * @param file The name of the file to write to. + * + * @throws IOException If there is an error writing the data. + */ + public void create(String file) throws IOException + { + PDDocument document = null; + try + { + document = new PDDocument(); + PDPage page = new PDPage(); + document.addPage(page); + + // type 2 (exponential) function with attributes + // can be used by both shadings + COSDictionary fdict = new COSDictionary(); + fdict.setInt(COSName.FUNCTION_TYPE, 2); + COSArray domain = new COSArray(); + domain.add(COSInteger.get(0)); + domain.add(COSInteger.get(1)); + COSArray c0 = new COSArray(); + c0.add(COSFloat.get("1")); + c0.add(COSFloat.get("0")); + c0.add(COSFloat.get("0")); + COSArray c1 = new COSArray(); + c1.add(COSFloat.get("0.5")); + c1.add(COSFloat.get("1")); + c1.add(COSFloat.get("0.5")); + fdict.setItem(COSName.DOMAIN, domain); + fdict.setItem(COSName.C0, c0); + fdict.setItem(COSName.C1, c1); + fdict.setInt(COSName.N, 1); + PDFunctionType2 func = new PDFunctionType2(fdict); + + // axial shading with attributes + PDShadingType2 axialShading = new PDShadingType2(new COSDictionary()); + axialShading.setColorSpace(PDDeviceRGB.INSTANCE); + axialShading.setShadingType(PDShading.SHADING_TYPE2); + COSArray coords1 = new COSArray(); + coords1.add(COSInteger.get(100)); + coords1.add(COSInteger.get(400)); + coords1.add(COSInteger.get(400)); + coords1.add(COSInteger.get(600)); + axialShading.setCoords(coords1); + axialShading.setFunction(func); + + // radial shading with attributes + PDShadingType3 radialShading = new PDShadingType3(new COSDictionary()); + radialShading.setColorSpace(PDDeviceRGB.INSTANCE); + radialShading.setShadingType(PDShading.SHADING_TYPE3); + COSArray coords2 = new COSArray(); + coords2.add(COSInteger.get(100)); + coords2.add(COSInteger.get(400)); + coords2.add(COSInteger.get(50)); // radius1 + coords2.add(COSInteger.get(400)); + coords2.add(COSInteger.get(600)); + coords2.add(COSInteger.get(150)); // radius2 + radialShading.setCoords(coords2); + radialShading.setFunction(func); + + // Gouraud shading + // See PDF 32000 specification, + // 8.7.4.5.5 Type 4 Shadings (Free-Form Gouraud-Shaded Triangle Meshes) + PDShadingType4 gouraudShading = new PDShadingType4(document.getDocument().createCOSStream()); + gouraudShading.setShadingType(PDShading.SHADING_TYPE4); + // we use multiple of 8, so that no padding is needed + gouraudShading.setBitsPerFlag(8); + gouraudShading.setBitsPerCoordinate(16); + gouraudShading.setBitsPerComponent(8); + COSArray decodeArray = new COSArray(); + // coordinates x y map 16 bits 0..FFFF to 0..FFFF to make your life easy + // so no calculation is needed, but you can only use integer coordinates + // for real numbers, you'll need smaller bounds, e.g. 0xFFFF / 0xA = 0x1999 + // would allow 1 point decimal result coordinate. + // See in PDF specification: 8.9.5.2 Decode Arrays + decodeArray.add(COSInteger.ZERO); + decodeArray.add(COSInteger.get(0xFFFF)); + decodeArray.add(COSInteger.ZERO); + decodeArray.add(COSInteger.get(0xFFFF)); + // colors r g b map 8 bits from 0..FF to 0..1 + decodeArray.add(COSInteger.ZERO); + decodeArray.add(COSInteger.ONE); + decodeArray.add(COSInteger.ZERO); + decodeArray.add(COSInteger.ONE); + decodeArray.add(COSInteger.ZERO); + decodeArray.add(COSInteger.ONE); + gouraudShading.setDecodeValues(decodeArray); + gouraudShading.setColorSpace(PDDeviceRGB.INSTANCE); + + // Function is not required for type 4 shadings and not really useful, + // because if a function would be used, each corner "color" of a triangle would be one value, + // which would then transformed into n color components by the function so it is + // difficult to get 3 "extremes". + + // fill the vertex stream + try (OutputStream os = ((COSStream) gouraudShading.getCOSObject()).createOutputStream(); + MemoryCacheImageOutputStream mcos = new MemoryCacheImageOutputStream(os)) + { + // Vertex 1, starts with flag1 + // (flags always 0 for vertices of start triangle) + mcos.writeByte(0); + // x1 y1 (left corner) + mcos.writeShort(0); + mcos.writeShort(0); + // r1 g1 b1 (red) + mcos.writeByte(0xFF); + mcos.writeByte(0); + mcos.writeByte(0); + + // Vertex 2, starts with flag2 + mcos.writeByte(0); + // x2 y2 (top corner) + mcos.writeShort(100); + mcos.writeShort(100); + // r2 g2 b2 (green) + mcos.writeByte(0); + mcos.writeByte(0xFF); + mcos.writeByte(0); + + // Vertex 3, starts with flag3 + mcos.writeByte(0); + // x3 y3 (right corner) + mcos.writeShort(200); + mcos.writeShort(0); + // r3 g3 b3 (blue) + mcos.writeByte(0); + mcos.writeByte(0); + mcos.writeByte(0xFF); + } + + // invoke shading from content stream + // compress parameter is set to false so that you can see the stream in a text editor + try (PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, false)) + { + contentStream.shadingFill(axialShading); + contentStream.shadingFill(radialShading); + contentStream.shadingFill(gouraudShading); + } + + document.save(file); + document.close(); + + // render the PDF and save it into a PNG file + document = PDDocument.load(new File(file)); + BufferedImage bim = new PDFRenderer(document).renderImageWithDPI(0, 100); + ImageIO.write(bim, "png", new File(file + ".png")); + document.close(); + } + finally + { + if (document != null) + { + document.close(); + } + } + } + + /** + * This will create a blank document. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error writing the document data. + */ + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + usage(); + } + else + { + CreateGradientShadingPDF creator = new CreateGradientShadingPDF(); + creator.create(args[0]); + } + } + + /** + * This will print the usage of this class. + */ + private static void usage() + { + System.err.println("usage: java " + CreateGradientShadingPDF.class.getName() + " "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java new file mode 100644 index 00000000000..5d56b085c9d --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreateLandscapePDF.java @@ -0,0 +1,127 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.util.Matrix; + +/** + * This is an example of how to create a page with a landscape orientation. + */ +public class CreateLandscapePDF +{ + /** + * Constructor. + */ + public CreateLandscapePDF() + { + super(); + } + + /** + * creates a sample document with a landscape orientation and some text surrounded by a box. + * + * @param message The message to write in the file. + * @param outfile The resulting PDF. + * + * @throws IOException If there is an error writing the data. + */ + public void doIt( String message, String outfile ) throws IOException + { + try (PDDocument doc = new PDDocument()) + { + PDFont font = PDType1Font.HELVETICA; + PDPage page = new PDPage(PDRectangle.A4); + page.setRotation(90); + doc.addPage(page); + PDRectangle pageSize = page.getMediaBox(); + float pageWidth = pageSize.getWidth(); + float fontSize = 12; + float stringWidth = font.getStringWidth( message )*fontSize/1000f; + float startX = 100; + float startY = 100; + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false)) + { + // add the rotation using the current transformation matrix + // including a translation of pageWidth to use the lower left corner as 0,0 reference + contentStream.transform(new Matrix(0, 1, -1, 0, pageWidth, 0)); + contentStream.setFont( font, fontSize ); + contentStream.beginText(); + contentStream.newLineAtOffset(startX, startY); + contentStream.showText(message); + contentStream.newLineAtOffset(0, 100); + contentStream.showText(message); + contentStream.newLineAtOffset(100, 100); + contentStream.showText(message); + contentStream.endText(); + + contentStream.moveTo(startX-2, startY-2); + contentStream.lineTo(startX-2, startY+200+fontSize); + contentStream.stroke(); + + contentStream.moveTo(startX-2, startY+200+fontSize); + contentStream.lineTo(startX+100+stringWidth+2, startY+200+fontSize); + contentStream.stroke(); + + contentStream.moveTo(startX+100+stringWidth+2, startY+200+fontSize); + contentStream.lineTo(startX+100+stringWidth+2, startY-2); + contentStream.stroke(); + + contentStream.moveTo(startX+100+stringWidth+2, startY-2); + contentStream.lineTo(startX-2, startY-2); + contentStream.stroke(); + } + + doc.save( outfile ); + } + } + + /** + * This will create a PDF document with a landscape orientation and some text surrounded by a box. + * + * @param args Command line arguments. + */ + public static void main(String[] args) throws IOException + { + CreateLandscapePDF app = new CreateLandscapePDF(); + if( args.length != 2 ) + { + app.usage(); + } + else + { + app.doIt( args[0], args[1] ); + } + } + + /** + * This will print out a message telling how to use this example. + */ + private void usage() + { + System.err.println( "usage: " + this.getClass().getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreatePDFA.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreatePDFA.java new file mode 100644 index 00000000000..c4a1c77134e --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreatePDFA.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import javax.xml.transform.TransformerException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent; +import org.apache.xmpbox.XMPMetadata; +import org.apache.xmpbox.schema.DublinCoreSchema; +import org.apache.xmpbox.schema.PDFAIdentificationSchema; +import org.apache.xmpbox.type.BadFieldValueException; +import org.apache.xmpbox.xml.XmpSerializer; + +/** + * Creates a simple PDF/A document. + */ +public final class CreatePDFA +{ + private CreatePDFA() + { + } + + public static void main(String[] args) throws IOException, TransformerException + { + if (args.length != 3) + { + System.err.println("usage: " + CreatePDFA.class.getName() + + " "); + System.exit(1); + } + + String file = args[0]; + String message = args[1]; + String fontfile = args[2]; + + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + // load the font as this needs to be embedded + PDFont font = PDType0Font.load(doc, new File(fontfile)); + + // A PDF/A file needs to have the font embedded if the font is used for text rendering + // in rendering modes other than text rendering mode 3. + // + // This requirement includes the PDF standard fonts, so don't use their static PDFType1Font classes such as + // PDFType1Font.HELVETICA. + // + // As there are many different font licenses it is up to the developer to check if the license terms for the + // font loaded allows embedding in the PDF. + // + if (!font.isEmbedded()) + { + throw new IllegalStateException("PDF/A compliance requires that all fonts used for" + + " text rendering in rendering modes other than rendering mode 3 are embedded."); + } + + // create a page with the message + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + contents.beginText(); + contents.setFont(font, 12); + contents.newLineAtOffset(100, 700); + contents.showText(message); + contents.endText(); + } + + // add XMP metadata + XMPMetadata xmp = XMPMetadata.createXMPMetadata(); + + try + { + DublinCoreSchema dc = xmp.createAndAddDublinCoreSchema(); + dc.setTitle(file); + + PDFAIdentificationSchema id = xmp.createAndAddPFAIdentificationSchema(); + id.setPart(1); + id.setConformance("B"); + + XmpSerializer serializer = new XmpSerializer(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + serializer.serialize(xmp, baos, true); + + PDMetadata metadata = new PDMetadata(doc); + metadata.importXMPMetadata(baos.toByteArray()); + doc.getDocumentCatalog().setMetadata(metadata); + } + catch(BadFieldValueException e) + { + // won't happen here, as the provided value is valid + throw new IllegalArgumentException(e); + } + + // sRGB output intent + InputStream colorProfile = CreatePDFA.class.getResourceAsStream( + "/org/apache/pdfbox/resources/pdfa/sRGB.icc"); + PDOutputIntent intent = new PDOutputIntent(doc, colorProfile); + intent.setInfo("sRGB IEC61966-2.1"); + intent.setOutputCondition("sRGB IEC61966-2.1"); + intent.setOutputConditionIdentifier("sRGB IEC61966-2.1"); + intent.setRegistryName("http://www.color.org"); + doc.getDocumentCatalog().addOutputIntent(intent); + + doc.save(file); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreatePatternsPDF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreatePatternsPDF.java new file mode 100644 index 00000000000..3f050720b70 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/CreatePatternsPDF.java @@ -0,0 +1,130 @@ +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.pdmodel; + +import java.awt.Color; +import java.io.IOException; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPatternContentStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; + +/** + * This is an example of how to create a page that uses patterns to paint areas. + * + * @author Tilman Hausherr + */ +public final class CreatePatternsPDF +{ + private CreatePatternsPDF() + { + } + + public static void main(String[] args) throws IOException + { + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + page.setResources(new PDResources()); + + // Colored pattern, i.e. the pattern content stream will set its own color(s) + try (PDPageContentStream pcs = new PDPageContentStream(doc, page)) + { + // Colored pattern, i.e. the pattern content stream will set its own color(s) + PDColorSpace patternCS1 = new PDPattern(null, PDDeviceRGB.INSTANCE); + + // Table 75 spec + PDTilingPattern tilingPattern1 = new PDTilingPattern(); + tilingPattern1.setBBox(new PDRectangle(0, 0, 10, 10)); + tilingPattern1.setPaintType(PDTilingPattern.PAINT_COLORED); + tilingPattern1.setTilingType(PDTilingPattern.TILING_CONSTANT_SPACING); + tilingPattern1.setXStep(10); + tilingPattern1.setYStep(10); + + COSName patternName1 = page.getResources().add(tilingPattern1); + try (PDPatternContentStream cs1 = new PDPatternContentStream(tilingPattern1)) + { + // Set color, draw diagonal line + 2 more diagonals so that corners look good + cs1.setStrokingColor(Color.red); + cs1.moveTo(0, 0); + cs1.lineTo(10, 10); + cs1.moveTo(-1, 9); + cs1.lineTo(1, 11); + cs1.moveTo(9, -1); + cs1.lineTo(11, 1); + cs1.stroke(); + } + + PDColor patternColor1 = new PDColor(patternName1, patternCS1); + + pcs.addRect(50, 500, 200, 200); + pcs.setNonStrokingColor(patternColor1); + pcs.fill(); + + // Uncolored pattern - the color is passed later + PDTilingPattern tilingPattern2 = new PDTilingPattern(); + tilingPattern2.setBBox(new PDRectangle(0, 0, 10, 10)); + tilingPattern2.setPaintType(PDTilingPattern.PAINT_UNCOLORED); + tilingPattern2.setTilingType(PDTilingPattern.TILING_NO_DISTORTION); + tilingPattern2.setXStep(10); + tilingPattern2.setYStep(10); + + COSName patternName2 = page.getResources().add(tilingPattern2); + try (PDPatternContentStream cs2 = new PDPatternContentStream(tilingPattern2)) + { + // draw a cross + cs2.moveTo(0, 5); + cs2.lineTo(10, 5); + cs2.moveTo(5, 0); + cs2.lineTo(5, 10); + cs2.stroke(); + } + + // Uncolored pattern colorspace needs to know the colorspace + // for the color values that will be passed when painting the fill + PDColorSpace patternCS2 = new PDPattern(null, PDDeviceRGB.INSTANCE); + PDColor patternColor2green = new PDColor( + new float[]{0,1,0}, + patternName2, + patternCS2); + + pcs.addRect(300, 500, 100, 100); + pcs.setNonStrokingColor(patternColor2green); + pcs.fill(); + + // same pattern again but with different color + different pattern start position + PDColor patternColor2blue = new PDColor( + new float[]{0,0,1}, + patternName2, + patternCS2); + pcs.addRect(455, 505, 100, 100); + pcs.setNonStrokingColor(patternColor2blue); + pcs.fill(); + } + doc.save("patterns.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java new file mode 100644 index 00000000000..ea6ded07796 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFiles.java @@ -0,0 +1,144 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.GregorianCalendar; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; +import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; +import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PageMode; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; + +/** + * This is an example that creates a simple document and embeds a file into it.. + * + * @author Ben Litchfield + */ +public class EmbeddedFiles +{ + /** + * Constructor. + */ + private EmbeddedFiles() + { + } + + /** + * create the second sample document from the PDF file format specification. + * + * @param file The file to write the PDF to. + * + * @throws IOException If there is an error writing the data. + */ + public void doIt( String file) throws IOException + { + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage( page ); + PDFont font = PDType1Font.HELVETICA_BOLD; + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page)) + { + contentStream.beginText(); + contentStream.setFont( font, 12 ); + contentStream.newLineAtOffset(100, 700); + contentStream.showText("Go to Document->File Attachments to View Embedded Files"); + contentStream.endText(); + } + + //embedded files are stored in a named tree + PDEmbeddedFilesNameTreeNode efTree = new PDEmbeddedFilesNameTreeNode(); + + //first create the file specification, which holds the embedded file + PDComplexFileSpecification fs = new PDComplexFileSpecification(); + + // use both methods for backwards, cross-platform and cross-language compatibility. + fs.setFile( "Test.txt" ); + fs.setFileUnicode("Test.txt"); + + //create a dummy file stream, this would probably normally be a FileInputStream + byte[] data = "This is the contents of the embedded file".getBytes("ISO-8859-1"); + ByteArrayInputStream fakeFile = new ByteArrayInputStream(data); + PDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile ); + //now lets some of the optional parameters + ef.setSubtype( "text/plain" ); + ef.setSize( data.length ); + ef.setCreationDate( new GregorianCalendar() ); + + // use both methods for backwards, cross-platform and cross-language compatibility. + fs.setEmbeddedFile( ef ); + fs.setEmbeddedFileUnicode(ef); + + // create a new tree node and add the embedded file + PDEmbeddedFilesNameTreeNode treeNode = new PDEmbeddedFilesNameTreeNode(); + treeNode.setNames( Collections.singletonMap( "My first attachment", fs ) ); + // add the new node as kid to the root node + List kids = new ArrayList<>(); + kids.add(treeNode); + efTree.setKids(kids); + // add the tree to the document catalog + PDDocumentNameDictionary names = new PDDocumentNameDictionary( doc.getDocumentCatalog() ); + names.setEmbeddedFiles( efTree ); + doc.getDocumentCatalog().setNames( names ); + + // show attachments panel in some viewers + doc.getDocumentCatalog().setPageMode(PageMode.USE_ATTACHMENTS); + + doc.save( file ); + } + } + + /** + * This will create a hello world PDF document with an embedded file. + *
+ * see usage() for commandline + * + * @param args Command line arguments. + */ + public static void main(String[] args) throws IOException + { + EmbeddedFiles app = new EmbeddedFiles(); + if( args.length != 1 ) + { + app.usage(); + } + else + { + app.doIt( args[0] ); + } + } + + /** + * This will print out a message telling how to use this example. + */ + private void usage() + { + System.err.println( "usage: " + this.getClass().getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFonts.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFonts.java new file mode 100644 index 00000000000..97335136020 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedFonts.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDType0Font; + +/** + * An example of using an embedded TrueType font with Unicode text. + * + * @author Keiji Suzuki + * @author John Hewson + */ +public final class EmbeddedFonts +{ + + private EmbeddedFonts() + { + } + + public static void main(String[] args) throws IOException + { + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(PDRectangle.A4); + document.addPage(page); + + String dir = "../pdfbox/src/main/resources/org/apache/pdfbox/resources/ttf/"; + PDType0Font font = PDType0Font.load(document, new File(dir + "LiberationSans-Regular.ttf")); + + try (PDPageContentStream stream = new PDPageContentStream(document, page)) + { + stream.beginText(); + stream.setFont(font, 12); + stream.setLeading(12 * 1.2f); + + stream.newLineAtOffset(50, 600); + stream.showText("PDFBox's Unicode with Embedded TrueType Font"); + stream.newLine(); + + stream.showText("Supports full Unicode text ☺"); + stream.newLine(); + + stream.showText("English русский язык Tiếng Việt"); + stream.newLine(); + + // ligature + stream.showText("Ligatures: \uFB01lm \uFB02ood"); + + stream.endText(); + } + + document.save("example.pdf"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedMultipleFonts.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedMultipleFonts.java new file mode 100644 index 00000000000..405ebf2c25f --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedMultipleFonts.java @@ -0,0 +1,163 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.fontbox.ttf.TrueTypeCollection; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; + +/** + * Output a text without knowing which font is the right one. One use case is a worldwide address + * list. Only LTR languages are supported, RTL (e.g. Hebrew, Arabic) are not supported so they would + * appear in the wrong direction. Complex scripts (Thai, Arabic, some Indian languages) are also not + * supported, any output will look weird. There is an (unfinished) effort here: + * https://issues.apache.org/jira/browse/PDFBOX-4189 + * + * @author Tilman Hausherr + */ +public class EmbeddedMultipleFonts +{ + private EmbeddedMultipleFonts() + { + } + + public static void main(String[] args) throws IOException + { + try (PDDocument document = new PDDocument(); + TrueTypeCollection ttc2 = new TrueTypeCollection(new File("c:/windows/fonts/batang.ttc")); + TrueTypeCollection ttc3 = new TrueTypeCollection(new File("c:/windows/fonts/mingliu.ttc"))) + { + PDPage page = new PDPage(PDRectangle.A4); + document.addPage(page); + + PDFont font1 = PDType1Font.HELVETICA; // always have a simple font as first one + PDType0Font font2 = PDType0Font.load(document, ttc2.getFontByName("Batang"), true); // Korean + PDType0Font font3 = PDType0Font.load(document, ttc3.getFontByName("MingLiU"), true); // Chinese + PDType0Font font4 = PDType0Font.load(document, new File("c:/windows/fonts/mangal.ttf")); // Indian + PDType0Font font5 = PDType0Font.load(document, new File("c:/windows/fonts/ArialUni.ttf")); // Fallback + + try (PDPageContentStream cs = new PDPageContentStream(document, page)) + { + cs.beginText(); + List fonts = new ArrayList<>(); + fonts.add(font1); + fonts.add(font2); + fonts.add(font3); + fonts.add(font4); + fonts.add(font5); + cs.newLineAtOffset(20, 700); + showTextMultiple(cs, "abc 한국 中国 भारत 日本 abc", fonts, 20); + cs.endText(); + } + + document.save("example.pdf"); + } + } + + static void showTextMultiple(PDPageContentStream cs, String text, List fonts, float size) + throws IOException + { + try + { + // first try all at once + fonts.get(0).encode(text); + cs.setFont(fonts.get(0), size); + cs.showText(text); + return; + } + catch (IllegalArgumentException ex) + { + // do nothing + } + // now try separately + int i = 0; + while (i < text.length()) + { + boolean found = false; + for (PDFont font : fonts) + { + try + { + String s = text.substring(i, i + 1); + font.encode(s); + // it works! Try more with this font + int j = i + 1; + for (; j < text.length(); ++j) + { + String s2 = text.substring(j, j + 1); + + if (isWinAnsiEncoding(s2.codePointAt(0)) && font != fonts.get(0)) + { + // Without this segment, the example would have a flaw: + // This code tries to keep the current font, so + // the second "abc" would appear in a different font + // than the first one, which would be weird. + // This segment assumes that the first font has WinAnsiEncoding. + // (all static PDType1Font Times / Helvetica / Courier fonts) + break; + } + try + { + font.encode(s2); + } + catch (IllegalArgumentException ex) + { + // it's over + break; + } + } + s = text.substring(i, j); + cs.setFont(font, size); + cs.showText(s); + i = j; + found = true; + break; + } + catch (IllegalArgumentException ex) + { + // didn't work, will try next font + } + } + if (!found) + { + throw new IllegalArgumentException("Could not show '" + text.substring(i, i + 1) + + "' with the fonts provided"); + } + } + } + + static boolean isWinAnsiEncoding(int unicode) + { + String name = GlyphList.getAdobeGlyphList().codePointToName(unicode); + if (".notdef".equals(name)) + { + return false; + } + return WinAnsiEncoding.INSTANCE.contains(name); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java new file mode 100644 index 00000000000..d26efd9f7b2 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java @@ -0,0 +1,101 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDType0Font; + +/** + * + * @author Aaron Madlon-Kay + */ +public class EmbeddedVerticalFonts +{ + private EmbeddedVerticalFonts() + { + } + + public static void main(String[] args) throws IOException + { + PDDocument document = new PDDocument(); + PDPage page = new PDPage(); + document.addPage(page); + + // The actual font file + // Download: https://ipafont.ipa.go.jp/old/ipafont/ipag00303.php + // (free license: https://www.gnu.org/licenses/license-list.html#IPAFONT) + File ipafont = new File("ipag.ttf"); + + // You can also use a Windows 7 TrueType font collection, e.g. MingLiU: + // TrueTypeFont ttf = new TrueTypeCollection(new File("C:/windows/fonts/mingliu.ttc")).getFontByName("MingLiU") + // PDType0Font.loadVertical(document, ttf, true) + + // Load as horizontal + PDType0Font hfont = PDType0Font.load(document, ipafont); + + // Load as vertical + PDType0Font vfont = PDType0Font.loadVertical(document, ipafont); + + // Load as vertical, but disable vertical glyph substitution + // (You will usually not want this because it doesn't look good!) + TrueTypeFont ttf = new TTFParser().parse(ipafont); + PDType0Font vfont2 = PDType0Font.loadVertical(document, ttf, true); + ttf.disableGsubFeature("vrt2"); + ttf.disableGsubFeature("vert"); + + try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) + { + contentStream.beginText(); + contentStream.setFont(hfont, 20); + contentStream.setLeading(25); + contentStream.newLineAtOffset(20, 300); + contentStream.showText("Key:"); + contentStream.newLine(); + contentStream.showText("① Horizontal"); + contentStream.newLine(); + contentStream.showText("② Vertical with substitution"); + contentStream.newLine(); + contentStream.showText("③ Vertical without substitution"); + contentStream.endText(); + + contentStream.beginText(); + contentStream.setFont(hfont, 20); + contentStream.newLineAtOffset(20, 650); + contentStream.showText("①「あーだこーだ」"); + contentStream.endText(); + + contentStream.beginText(); + contentStream.setFont(vfont, 20); + contentStream.newLineAtOffset(50, 600); + contentStream.showText("②「あーだこーだ」"); + contentStream.endText(); + + contentStream.beginText(); + contentStream.setFont(vfont2, 20); + contentStream.newLineAtOffset(100, 600); + contentStream.showText("③「あーだこーだ」"); + contentStream.endText(); + } + // result file should look like the one attached to JIRA issue PDFBOX-4106 + document.save("vertical.pdf"); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java new file mode 100644 index 00000000000..7fcc9172812 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java @@ -0,0 +1,177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; +import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; +import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationFileAttachment; + +/** + * This is an example on how to extract all embedded files from a PDF document. + * + */ +public final class ExtractEmbeddedFiles +{ + private ExtractEmbeddedFiles() + { + } + + /** + * This is the main method. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + usage(); + System.exit(1); + } + else + { + PDDocument document = null; + try + { + File pdfFile = new File(args[0]); + String filePath = pdfFile.getParent() + System.getProperty("file.separator"); + document = PDDocument.load(pdfFile ); + PDDocumentNameDictionary namesDictionary = + new PDDocumentNameDictionary( document.getDocumentCatalog() ); + PDEmbeddedFilesNameTreeNode efTree = namesDictionary.getEmbeddedFiles(); + if (efTree != null) + { + Map names = efTree.getNames(); + if (names != null) + { + extractFiles(names, filePath); + } + else + { + List> kids = efTree.getKids(); + for (PDNameTreeNode node : kids) + { + names = node.getNames(); + extractFiles(names, filePath); + } + } + } + + // extract files from annotations + for (PDPage page : document.getPages()) + { + for (PDAnnotation annotation : page.getAnnotations()) + { + if (annotation instanceof PDAnnotationFileAttachment) + { + PDAnnotationFileAttachment annotationFileAttachment = (PDAnnotationFileAttachment) annotation; + PDFileSpecification fileSpec = annotationFileAttachment.getFile(); + if (fileSpec instanceof PDComplexFileSpecification) + { + PDComplexFileSpecification complexFileSpec = (PDComplexFileSpecification) fileSpec; + PDEmbeddedFile embeddedFile = getEmbeddedFile(complexFileSpec); + extractFile(filePath, complexFileSpec.getFilename(), embeddedFile); + } + } + } + } + + } + finally + { + if( document != null ) + { + document.close(); + } + } + } + } + + private static void extractFiles(Map names, String filePath) + throws IOException + { + for (Entry entry : names.entrySet()) + { + String filename = entry.getKey(); + PDComplexFileSpecification fileSpec = entry.getValue(); + PDEmbeddedFile embeddedFile = getEmbeddedFile(fileSpec); + extractFile(filePath, filename, embeddedFile); + } + } + + private static void extractFile(String filePath, String filename, PDEmbeddedFile embeddedFile) + throws IOException + { + String embeddedFilename = filePath + filename; + File file = new File(filePath + filename); + System.out.println("Writing " + embeddedFilename); + try (FileOutputStream fos = new FileOutputStream(file)) + { + fos.write(embeddedFile.toByteArray()); + } + } + + private static PDEmbeddedFile getEmbeddedFile(PDComplexFileSpecification fileSpec ) + { + // search for the first available alternative of the embedded file + PDEmbeddedFile embeddedFile = null; + if (fileSpec != null) + { + embeddedFile = fileSpec.getEmbeddedFileUnicode(); + if (embeddedFile == null) + { + embeddedFile = fileSpec.getEmbeddedFileDos(); + } + if (embeddedFile == null) + { + embeddedFile = fileSpec.getEmbeddedFileMac(); + } + if (embeddedFile == null) + { + embeddedFile = fileSpec.getEmbeddedFileUnix(); + } + if (embeddedFile == null) + { + embeddedFile = fileSpec.getEmbeddedFile(); + } + } + return embeddedFile; + } + + /** + * This will print the usage for this program. + */ + private static void usage() + { + System.err.println( "Usage: java " + ExtractEmbeddedFiles.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractMetadata.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractMetadata.java new file mode 100644 index 00000000000..9edb5c938cb --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractMetadata.java @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.common.PDMetadata; + +import java.io.File; +import java.io.IOException; +import java.text.DateFormat; +import java.util.Calendar; +import java.util.List; + +import org.apache.xmpbox.XMPMetadata; +import org.apache.xmpbox.schema.AdobePDFSchema; +import org.apache.xmpbox.schema.DublinCoreSchema; +import org.apache.xmpbox.schema.XMPBasicSchema; +import org.apache.xmpbox.xml.DomXmpParser; +import org.apache.xmpbox.xml.XmpParsingException; + +/** + * This is an example on how to extract metadata from a PDF document. + * + */ +public final class ExtractMetadata +{ + private ExtractMetadata() + { + // utility class + } + + /** + * This is the main method. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + * @throws XmpParsingException + */ + public static void main(String[] args) throws IOException, XmpParsingException + { + if (args.length != 1) + { + usage(); + System.exit(1); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PDDocumentCatalog catalog = document.getDocumentCatalog(); + PDMetadata meta = catalog.getMetadata(); + if (meta != null) + { + DomXmpParser xmpParser = new DomXmpParser(); + try + { + XMPMetadata metadata = xmpParser.parse(meta.createInputStream()); + + DublinCoreSchema dc = metadata.getDublinCoreSchema(); + if (dc != null) + { + display("Title:", dc.getTitle()); + display("Description:", dc.getDescription()); + listString("Creators: ", dc.getCreators()); + listCalendar("Dates:", dc.getDates()); + listString("Subjects:", dc.getSubjects()); + } + + AdobePDFSchema pdf = metadata.getAdobePDFSchema(); + if (pdf != null) + { + display("Keywords:", pdf.getKeywords()); + display("PDF Version:", pdf.getPDFVersion()); + display("PDF Producer:", pdf.getProducer()); + } + + XMPBasicSchema basic = metadata.getXMPBasicSchema(); + if (basic != null) + { + display("Create Date:", basic.getCreateDate()); + display("Modify Date:", basic.getModifyDate()); + display("Creator Tool:", basic.getCreatorTool()); + } + } + catch (XmpParsingException e) + { + System.err.println("An error ouccred when parsing the meta data: " + + e.getMessage()); + } + } + else + { + // The pdf doesn't contain any metadata, try to use the + // document information instead + PDDocumentInformation information = document.getDocumentInformation(); + if (information != null) + { + showDocumentInformation(information); + } + } + } + } + } + + private static void showDocumentInformation(PDDocumentInformation information) + { + display("Title:", information.getTitle()); + display("Subject:", information.getSubject()); + display("Author:", information.getAuthor()); + display("Creator:", information.getCreator()); + display("Producer:", information.getProducer()); + } + + private static void listString(String title, List list) + { + if (list == null) + { + return; + } + System.out.println(title); + for (String string : list) + { + System.out.println(" " + string); + } + } + + private static void listCalendar(String title, List list) + { + if (list == null) + { + return; + } + System.out.println(title); + for (Calendar calendar : list) + { + System.out.println(" " + format(calendar)); + } + } + + private static String format(Object o) + { + if (o instanceof Calendar) + { + Calendar cal = (Calendar) o; + return DateFormat.getDateInstance().format(cal.getTime()); + } + else + { + return o.toString(); + } + } + + private static void display(String title, Object value) + { + if (value != null) + { + System.out.println(title + " " + format(value)); + } + } + + /** + * This will print the usage for this program. + */ + private static void usage() + { + System.err.println("Usage: java " + ExtractMetadata.class.getName() + " "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java new file mode 100644 index 00000000000..f6d8cea9dbb --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java @@ -0,0 +1,234 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.font.PDCIDFont; +import org.apache.pdfbox.pdmodel.font.PDCIDFontType2; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDFontDescriptor; +import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; + +/** + * This will extract all true type-fonts of a pdf. + * + */ +public final class ExtractTTFFonts +{ + private int fontCounter = 1; + + private static final String PASSWORD = "-password"; + private static final String PREFIX = "-prefix"; + private static final String ADDKEY = "-addkey"; + + private ExtractTTFFonts() + { + } + + /** + * This is the entry point for the application. + * + * @param args The command-line arguments. + * + * @throws IOException If there is an error decrypting the document. + */ + public static void main(String[] args) throws IOException + { + ExtractTTFFonts extractor = new ExtractTTFFonts(); + extractor.extractFonts(args); + } + + private void extractFonts(String[] args) throws IOException + { + if (args.length < 1 || args.length > 4) + { + usage(); + } + else + { + String pdfFile = null; + String password = ""; + String prefix = null; + boolean addKey = false; + for (int i = 0; i < args.length; i++) + { + switch (args[i]) + { + case PASSWORD: + i++; + if (i >= args.length) + { + usage(); + } + password = args[i]; + break; + case PREFIX: + i++; + if (i >= args.length) + { + usage(); + } + prefix = args[i]; + break; + case ADDKEY: + addKey = true; + break; + default: + if (pdfFile == null) + { + pdfFile = args[i]; + } + break; + } + } + if (pdfFile == null) + { + usage(); + } + else + { + if (prefix == null && pdfFile.length() > 4) + { + prefix = pdfFile.substring(0, pdfFile.length() - 4); + } + try (PDDocument document = PDDocument.load(new File(pdfFile), password)) + { + for (PDPage page : document.getPages()) + { + PDResources resources = page.getResources(); + // extract all fonts which are part of the page resources + processResources(resources, prefix, addKey); + } + } + } + } + } + + private void processResources(PDResources resources, String prefix, boolean addKey) throws IOException + { + if (resources == null) + { + return; + } + + for (COSName key : resources.getFontNames()) + { + PDFont font = resources.getFont(key); + // write the font + if (font instanceof PDTrueTypeFont) + { + String name; + if (addKey) + { + name = getUniqueFileName(prefix + "_" + key, "ttf"); + } + else + { + name = getUniqueFileName(prefix, "ttf"); + } + writeFont(font.getFontDescriptor(), name); + } + else if (font instanceof PDType0Font) + { + PDCIDFont descendantFont = ((PDType0Font) font).getDescendantFont(); + if (descendantFont instanceof PDCIDFontType2) + { + String name; + if (addKey) + { + name = getUniqueFileName(prefix + "_" + key, "ttf"); + } + else + { + name = getUniqueFileName(prefix, "ttf"); + } + writeFont(descendantFont.getFontDescriptor(), name); + } + } + } + + for (COSName name : resources.getXObjectNames()) + { + PDXObject xobject = resources.getXObject(name); + if (xobject instanceof PDFormXObject) + { + PDFormXObject xObjectForm = (PDFormXObject) xobject; + PDResources formResources = xObjectForm.getResources(); + processResources(formResources, prefix, addKey); + } + } + + } + + private void writeFont(PDFontDescriptor fd, String name) throws IOException + { + if (fd != null) + { + PDStream ff2Stream = fd.getFontFile2(); + if (ff2Stream != null) + { + System.out.println("Writing font: " + name); + try (OutputStream os = new FileOutputStream(new File(name + ".ttf")); + InputStream is = ff2Stream.createInputStream()) + { + IOUtils.copy(is, os); + } + } + } + } + + private String getUniqueFileName(String prefix, String suffix) + { + String uniqueName = null; + File f = null; + while (f == null || f.exists()) + { + uniqueName = prefix + "-" + fontCounter; + f = new File(uniqueName + "." + suffix); + fontCounter++; + } + return uniqueName; + } + + /** + * This will print the usage requirements and exit. + */ + private static void usage() + { + System.err.println("Usage: java " + ExtractTTFFonts.class.getName() + " [OPTIONS] \n" + + " -password Password to decrypt document\n" + + " -prefix Font prefix(default to pdf name)\n" + + " -addkey add the internal font key to the file name\n" + + " The PDF document to use\n"); + System.exit(1); + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/GoToSecondBookmarkOnOpen.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/GoToSecondBookmarkOnOpen.java new file mode 100644 index 00000000000..28fdcdcc937 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/GoToSecondBookmarkOnOpen.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; + +import java.io.File; +import java.io.IOException; + +/** + * This is an example on how to an action to go to the second page when the PDF is opened. + * + * @author Ben Litchfield + */ +public final class GoToSecondBookmarkOnOpen +{ + private GoToSecondBookmarkOnOpen() + { + //utility class + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 2 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if( document.isEncrypted() ) + { + System.err.println( "Error: Cannot add bookmark destination to encrypted documents." ); + System.exit( 1 ); + } + + if( document.getNumberOfPages() < 2 ) + { + throw new IOException( "Error: The PDF must have at least 2 pages."); + } + PDDocumentOutline bookmarks = document.getDocumentCatalog().getDocumentOutline(); + if( bookmarks == null ) + { + throw new IOException( "Error: The PDF does not contain any bookmarks" ); + } + PDOutlineItem item = bookmarks.getFirstChild().getNextSibling(); + PDDestination dest = item.getDestination(); + PDActionGoTo action = new PDActionGoTo(); + action.setDestination(dest); + document.getDocumentCatalog().setOpenAction(action); + + document.save( args[1] ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + GoToSecondBookmarkOnOpen.class.getName() + + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java new file mode 100644 index 00000000000..9929b2db9ab --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorld.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; + +import org.apache.pdfbox.pdmodel.PDPageContentStream; + +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; + +/** + * Creates a "Hello World" PDF using the built-in Helvetica font. + * + * The example is taken from the PDF file format specification. + */ +public final class HelloWorld +{ + private HelloWorld() + { + } + + public static void main(String[] args) throws IOException + { + if( args.length != 2 ) + { + System.err.println("usage: " + HelloWorld.class.getName() + " "); + System.exit(1); + } + + String filename = args[0]; + String message = args[1]; + + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + PDFont font = PDType1Font.HELVETICA_BOLD; + + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + contents.beginText(); + contents.setFont(font, 12); + contents.newLineAtOffset(100, 700); + contents.showText(message); + contents.endText(); + } + + doc.save(filename); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java new file mode 100644 index 00000000000..d5daa86983f --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldTTF.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; + +/** + * Creates a simple document with a TrueType font. + */ +public final class HelloWorldTTF +{ + private HelloWorldTTF() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 3) + { + System.err.println("usage: " + HelloWorldTTF.class.getName() + + " "); + System.exit(1); + } + + String pdfPath = args[0]; + String message = args[1]; + String ttfPath = args[2]; + + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + PDFont font = PDType0Font.load(doc, new File(ttfPath)); + + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + contents.beginText(); + contents.setFont(font, 12); + contents.newLineAtOffset(100, 700); + contents.showText(message); + contents.endText(); + } + + doc.save(pdfPath); + System.out.println(pdfPath + " created!"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1.java new file mode 100644 index 00000000000..3e18c94d001 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/HelloWorldType1.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.pdmodel; + +import java.io.FileInputStream; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; + +/** + * Creates a simple document with a Type 1 font (.pfb). + */ +public final class HelloWorldType1 +{ + + private HelloWorldType1() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 3) + { + System.err.println("usage: " + HelloWorldType1.class.getName() + + " "); + System.exit(1); + } + + String file = args[0]; + String message = args[1]; + String pfbPath = args[2]; + + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + PDFont font = new PDType1Font(doc, new FileInputStream(pfbPath)); + + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + contents.beginText(); + contents.setFont(font, 12); + contents.newLineAtOffset(100, 700); + contents.showText(message); + contents.endText(); + } + + doc.save(file); + System.out.println(file + " created!"); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java new file mode 100644 index 00000000000..6c37b4b3120 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; + +/** + * Creates a PDF document from an image. + * + * The example is taken from the pdf file format specification. + */ +public final class ImageToPDF +{ + private ImageToPDF() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 2) + { + System.err.println("usage: " + ImageToPDF.class.getName() + " "); + System.exit(1); + } + + String imagePath = args[0]; + String pdfPath = args[1]; + + if (!pdfPath.endsWith(".pdf")) + { + System.err.println("Last argument must be the destination .pdf file"); + System.exit(1); + } + + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + // createFromFile is the easiest way with an image file + // if you already have the image in a BufferedImage, + // call LosslessFactory.createFromImage() instead + PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, doc); + + // draw the image at full size at (x=20, y=20) + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + // draw the image at full size at (x=20, y=20) + contents.drawImage(pdImage, 20, 20); + + // to draw the image at half size at (x=20, y=20) use + // contents.drawImage(pdImage, 20, 20, pdImage.getWidth() / 2, pdImage.getHeight() / 2); + } + doc.save(pdfPath); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintBookmarks.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintBookmarks.java new file mode 100644 index 00000000000..957f7f20213 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintBookmarks.java @@ -0,0 +1,144 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDNamedDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineNode; + +/** + * This is an example on how to access the bookmarks that are part of a pdf document. + * + * @author Ben Litchfield + * + */ +public class PrintBookmarks +{ + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PrintBookmarks meta = new PrintBookmarks(); + PDDocumentOutline outline = document.getDocumentCatalog().getDocumentOutline(); + if( outline != null ) + { + meta.printBookmark(document, outline, ""); + } + else + { + System.out.println( "This document does not contain any bookmarks" ); + } + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + PrintBookmarks.class.getName() + " " ); + } + + /** + * This will print the documents bookmarks to System.out. + * + * @param document The document. + * @param bookmark The bookmark to print out. + * @param indentation A pretty printing parameter + * + * @throws IOException If there is an error getting the page count. + */ + public void printBookmark(PDDocument document, PDOutlineNode bookmark, String indentation) throws IOException + { + PDOutlineItem current = bookmark.getFirstChild(); + while( current != null ) + { + // one could also use current.findDestinationPage(document) to get the page number, + // but this example does it the hard way to explain the different types + // Note that bookmarks can also do completely different things, e.g. link to a website, + // or to an external file. This example focuses on internal pages. + + if (current.getDestination() instanceof PDPageDestination) + { + PDPageDestination pd = (PDPageDestination) current.getDestination(); + System.out.println(indentation + "Destination page: " + (pd.retrievePageNumber() + 1)); + } + else if (current.getDestination() instanceof PDNamedDestination) + { + PDPageDestination pd = document.getDocumentCatalog().findNamedDestinationPage((PDNamedDestination) current.getDestination()); + if (pd != null) + { + System.out.println(indentation + "Destination page: " + (pd.retrievePageNumber() + 1)); + } + } + else if (current.getDestination() != null) + { + System.out.println(indentation + "Destination class: " + current.getDestination().getClass().getSimpleName()); + } + + if (current.getAction() instanceof PDActionGoTo) + { + PDActionGoTo gta = (PDActionGoTo) current.getAction(); + if (gta.getDestination() instanceof PDPageDestination) + { + PDPageDestination pd = (PDPageDestination) gta.getDestination(); + System.out.println(indentation + "Destination page: " + (pd.retrievePageNumber() + 1)); + } + else if (gta.getDestination() instanceof PDNamedDestination) + { + PDPageDestination pd = document.getDocumentCatalog().findNamedDestinationPage((PDNamedDestination) gta.getDestination()); + if (pd != null) + { + System.out.println(indentation + "Destination page: " + (pd.retrievePageNumber() + 1)); + } + } + else + { + System.out.println(indentation + "Destination class: " + gta.getDestination().getClass().getSimpleName()); + } + } + else if (current.getAction() != null) + { + System.out.println(indentation + "Action class: " + current.getAction().getClass().getSimpleName()); + } + System.out.println( indentation + current.getTitle() ); + printBookmark( document, current, indentation + " " ); + current = current.getNextSibling(); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintDocumentMetaData.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintDocumentMetaData.java new file mode 100644 index 00000000000..b89a772d4f3 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintDocumentMetaData.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.common.PDMetadata; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +/** + * This is an example on how to get a documents metadata information. + * + * @author Ben Litchfield + * + */ +public class PrintDocumentMetaData +{ + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PrintDocumentMetaData meta = new PrintDocumentMetaData(); + meta.printMetadata( document ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + PrintDocumentMetaData.class.getName() + " " ); + } + + /** + * This will print the documents data to System.out. + * + * @param document The document to get the metadata from. + * + * @throws IOException If there is an error getting the page count. + */ + public void printMetadata( PDDocument document ) throws IOException + { + PDDocumentInformation info = document.getDocumentInformation(); + PDDocumentCatalog cat = document.getDocumentCatalog(); + PDMetadata metadata = cat.getMetadata(); + System.out.println( "Page Count=" + document.getNumberOfPages() ); + System.out.println( "Title=" + info.getTitle() ); + System.out.println( "Author=" + info.getAuthor() ); + System.out.println( "Subject=" + info.getSubject() ); + System.out.println( "Keywords=" + info.getKeywords() ); + System.out.println( "Creator=" + info.getCreator() ); + System.out.println( "Producer=" + info.getProducer() ); + System.out.println( "Creation Date=" + formatDate( info.getCreationDate() ) ); + System.out.println( "Modification Date=" + formatDate( info.getModificationDate() ) ); + System.out.println( "Trapped=" + info.getTrapped() ); + if( metadata != null ) + { + String string = new String( metadata.toByteArray(), "ISO-8859-1" ); + System.out.println( "Metadata=" + string ); + } + } + + /** + * This will format a date object. + * + * @param date The date to format. + * + * @return A string representation of the date. + */ + private String formatDate( Calendar date ) + { + String retval = null; + if( date != null ) + { + SimpleDateFormat formatter = new SimpleDateFormat(); + retval = formatter.format( date.getTime() ); + } + + return retval; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintURLs.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintURLs.java new file mode 100644 index 00000000000..407309c53c6 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintURLs.java @@ -0,0 +1,163 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.awt.geom.Rectangle2D; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.text.PDFTextStripperByArea; + + +/** + * This is an example of how to access a URL in a PDF document. + * + * @author Ben Litchfield + */ +public final class PrintURLs +{ + /** + * Constructor. + */ + private PrintURLs() + { + //utility class + } + + /** + * This will output all URLs and the texts in the annotation rectangle of a document. + *
+ * see usage() for commandline + * + * @param args Command line arguments. + * + * @throws IOException If there is an error extracting the URLs. + */ + public static void main(String[] args) throws IOException + { + PDDocument doc = null; + try + { + if( args.length != 1 ) + { + usage(); + } + else + { + doc = PDDocument.load( new File(args[0]) ); + int pageNum = 0; + for( PDPage page : doc.getPages() ) + { + pageNum++; + PDFTextStripperByArea stripper = new PDFTextStripperByArea(); + List annotations = page.getAnnotations(); + //first setup text extraction regions + for( int j=0; j" ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RemoveFirstPage.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RemoveFirstPage.java new file mode 100644 index 00000000000..a4fbb54cd3d --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RemoveFirstPage.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; + +import java.io.File; +import java.io.IOException; + +/** + * This is an example on how to remove pages from a PDF document. + * + * @author Ben Litchfield + */ +public final class RemoveFirstPage +{ + private RemoveFirstPage() + { + //utility class, should not be instantiated. + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 2 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if( document.isEncrypted() ) + { + throw new IOException( "Encrypted documents are not supported for this example" ); + } + if( document.getNumberOfPages() <= 1 ) + { + throw new IOException( "Error: A PDF document must have at least one page, " + + "cannot remove the last page!"); + } + document.removePage( 0 ); + document.save( args[1] ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + RemoveFirstPage.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ReplaceURLs.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ReplaceURLs.java new file mode 100644 index 00000000000..682cae7e869 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ReplaceURLs.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; + + +/** + * This is an example of how to replace a URL in a PDF document. This + * will only replace the URL that the text refers to and not the text + * itself. + * + * @author Ben Litchfield + */ +public final class ReplaceURLs +{ + /** + * Constructor. + */ + private ReplaceURLs() + { + //utility class + } + + /** + * This will read in a document and replace all of the urls with + * http://pdfbox.apache.org. + *
+ * see usage() for commandline + * + * @param args Command line arguments. + * + * @throws IOException If there is an error during the process. + */ + public static void main(String[] args) throws IOException + { + PDDocument doc = null; + try + { + if( args.length != 2 ) + { + usage(); + } + else + { + doc = PDDocument.load( new File(args[0]) ); + int pageNum = 0; + for( PDPage page : doc.getPages() ) + { + pageNum++; + List annotations = page.getAnnotations(); + + for (PDAnnotation annotation : annotations) + { + PDAnnotation annot = annotation; + if( annot instanceof PDAnnotationLink ) + { + PDAnnotationLink link = (PDAnnotationLink)annot; + PDAction action = link.getAction(); + if( action instanceof PDActionURI ) + { + PDActionURI uri = (PDActionURI)action; + String oldURI = uri.getURI(); + String newURI = "http://pdfbox.apache.org"; + System.out.println( "Page " + pageNum +": Replacing " + oldURI + " with " + newURI ); + uri.setURI( newURI ); + } + } + } + } + doc.save( args[1] ); + } + } + finally + { + if( doc != null ) + { + doc.close(); + } + } + } + + /** + * This will print out a message telling how to use this example. + */ + private static void usage() + { + System.err.println( "usage: " + ReplaceURLs.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStamp.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStamp.java new file mode 100644 index 00000000000..6b0aede8f4b --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStamp.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationRubberStamp; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * This is an example on how to add annotations to pages of a PDF document. + * + * @author Paul King + */ +public final class RubberStamp +{ + private RubberStamp() + { + //utility class, should not be instantiated. + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 2 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if( document.isEncrypted() ) + { + throw new IOException( "Encrypted documents are not supported for this example" ); + } + for (PDPage page : document.getPages()) + { + List annotations = page.getAnnotations(); + + PDAnnotationRubberStamp rs = new PDAnnotationRubberStamp(); + rs.setName(PDAnnotationRubberStamp.NAME_TOP_SECRET); + rs.setRectangle(new PDRectangle(100, 100)); + rs.setContents("A top secret note"); + + annotations.add(rs); + } + + document.save( args[1] ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + RubberStamp.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java new file mode 100644 index 00000000000..d8de8e29797 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.text.NumberFormat; +import java.util.List; +import java.util.Locale; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationRubberStamp; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; + + +/** + * This is an example on how to add a rubber stamp with an image to pages of a PDF document. + */ +public class RubberStampWithImage +{ + private static final String SAVE_GRAPHICS_STATE = "q\n"; + private static final String RESTORE_GRAPHICS_STATE = "Q\n"; + private static final String CONCATENATE_MATRIX = "cm\n"; + private static final String XOBJECT_DO = "Do\n"; + private static final String SPACE = " "; + + private static final NumberFormat formatDecimal = NumberFormat.getNumberInstance( Locale.US ); + + /** + * Add a rubber stamp with an jpg image to every page of the given document. + * @param args the command line arguments + * @throws IOException an exception is thrown if something went wrong + */ + public void doIt( String[] args ) throws IOException + { + if( args.length != 3 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if( document.isEncrypted() ) + { + throw new IOException( "Encrypted documents are not supported for this example" ); + } + + for (int i = 0; i < document.getNumberOfPages(); i++) + { + PDPage page = document.getPage(i); + List annotations = page.getAnnotations(); + PDAnnotationRubberStamp rubberStamp = new PDAnnotationRubberStamp(); + rubberStamp.setName(PDAnnotationRubberStamp.NAME_TOP_SECRET); + rubberStamp.setRectangle(new PDRectangle(200,100)); + rubberStamp.setContents("A top secret note"); + + // create a PDXObjectImage with the given image file + // if you already have the image in a BufferedImage, + // call LosslessFactory.createFromImage() instead + PDImageXObject ximage = PDImageXObject.createFromFile(args[2], document); + + // define and set the target rectangle + int lowerLeftX = 250; + int lowerLeftY = 550; + int formWidth = 150; + int formHeight = 25; + int imgWidth = 50; + int imgHeight = 25; + + PDRectangle rect = new PDRectangle(); + rect.setLowerLeftX(lowerLeftX); + rect.setLowerLeftY(lowerLeftY); + rect.setUpperRightX(lowerLeftX + formWidth); + rect.setUpperRightY(lowerLeftY + formHeight); + + // Create a PDFormXObject + PDFormXObject form = new PDFormXObject(document); + form.setResources(new PDResources()); + form.setBBox(rect); + form.setFormType(1); + + // adjust the image to the target rectangle and add it to the stream + try (OutputStream os = form.getStream().createOutputStream()) + { + drawXObject(ximage, form.getResources(), os, lowerLeftX, lowerLeftY, imgWidth, imgHeight); + } + + PDAppearanceStream myDic = new PDAppearanceStream(form.getCOSObject()); + PDAppearanceDictionary appearance = new PDAppearanceDictionary(new COSDictionary()); + appearance.setNormalAppearance(myDic); + rubberStamp.setAppearance(appearance); + rubberStamp.setRectangle(rect); + + // add the new RubberStamp to the document + annotations.add(rubberStamp); + + } + document.save( args[1] ); + } + } + } + + private void drawXObject( PDImageXObject xobject, PDResources resources, OutputStream os, + float x, float y, float width, float height ) throws IOException + { + // This is similar to PDPageContentStream.drawXObject() + COSName xObjectId = resources.add(xobject); + + appendRawCommands( os, SAVE_GRAPHICS_STATE ); + appendRawCommands( os, formatDecimal.format( width ) ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, formatDecimal.format( 0 ) ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, formatDecimal.format( 0 ) ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, formatDecimal.format( height ) ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, formatDecimal.format( x ) ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, formatDecimal.format( y ) ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, CONCATENATE_MATRIX ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, "/" ); + appendRawCommands( os, xObjectId.getName() ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, XOBJECT_DO ); + appendRawCommands( os, SPACE ); + appendRawCommands( os, RESTORE_GRAPHICS_STATE ); + } + + private void appendRawCommands(OutputStream os, String commands) throws IOException + { + os.write( commands.getBytes("ISO-8859-1")); + } + + /** + * This creates an instance of RubberStampWithImage. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + RubberStampWithImage rubberStamp = new RubberStampWithImage(); + rubberStamp.doIt(args); + } + + /** + * This will print the usage for this example. + */ + private void usage() + { + System.err.println( "Usage: java "+getClass().getName()+" " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java new file mode 100644 index 00000000000..93fc04f3227 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowColorBoxes.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.awt.Color; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; + +/** + * Creates a simple document. The example is taken from the pdf file format specification. + */ +public final class ShowColorBoxes +{ + + private ShowColorBoxes() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + System.err.println("usage: " +ShowColorBoxes.class.getName() + " "); + System.exit(1); + } + + String filename = args[0]; + + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + // fill the entire background with cyan + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + // fill the entire background with cyan + contents.setNonStrokingColor(Color.CYAN); + contents.addRect(0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight()); + contents.fill(); + + // draw a red box in the lower left hand corner + contents.setNonStrokingColor(Color.RED); + contents.addRect(10, 10, 100, 100); + contents.fill(); + } + doc.save(filename); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java new file mode 100644 index 00000000000..20164fe8376 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ShowTextWithPositioning.java @@ -0,0 +1,168 @@ +/* + * Copyright 2017 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; +import org.apache.pdfbox.util.Matrix; + +/** + * This example shows how to justify a string using the showTextWithPositioning method. First only + * spaces are adjusted, and then every letter. + * + * @author Dan Fickling + */ +public class ShowTextWithPositioning +{ + private static final float FONT_SIZE = 20.0f; + + private ShowTextWithPositioning() + { + } + + public static void main(String[] args) throws IOException + { + doIt("Hello World, this is a test!", "justify-example.pdf"); + } + + public static void doIt(String message, String outfile) throws IOException + { + // the document + try (PDDocument doc = new PDDocument(); + InputStream is = PDDocument.class.getResourceAsStream("/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf")) + { + // Page 1 + PDFont font = PDType0Font.load(doc, is, true); + PDPage page = new PDPage(PDRectangle.A4); + doc.addPage(page); + + // Get the non-justified string width in text space units. + float stringWidth = font.getStringWidth(message) * FONT_SIZE; + + // Get the string height in text space units. + float stringHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() * FONT_SIZE; + + // Get the width we have to justify in. + PDRectangle pageSize = page.getMediaBox(); + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, + page, AppendMode.OVERWRITE, false)) + { + contentStream.beginText(); + contentStream.setFont(font, FONT_SIZE); + + // Start at top of page. + contentStream.setTextMatrix( + Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f)); + + // First show non-justified. + contentStream.showText(message); + + // Move to next line. + contentStream.setTextMatrix( + Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f * 2)); + + // Now show word justified. + // The space we have to make up, in text space units. + float justifyWidth = pageSize.getWidth() * 1000f - stringWidth; + + List text = new ArrayList<>(); + String[] parts = message.split("\\s"); + + float spaceWidth = (justifyWidth / (parts.length - 1)) / FONT_SIZE; + + for (int i = 0; i < parts.length; i++) + { + if (i != 0) + { + text.add(" "); + // Positive values move to the left, negative to the right. + text.add(-spaceWidth); + } + text.add(parts[i]); + } + contentStream.showTextWithPositioning(text.toArray()); + contentStream.setTextMatrix(Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f * 3)); + + // Now show letter justified. + text = new ArrayList<>(); + justifyWidth = pageSize.getWidth() * 1000f - stringWidth; + float extraLetterWidth = (justifyWidth / (message.codePointCount(0, message.length()) - 1)) / FONT_SIZE; + + for (int i = 0; i < message.length(); i += Character.charCount(message.codePointAt(i))) + { + if (i != 0) + { + text.add(-extraLetterWidth); + } + + text.add(String.valueOf(Character.toChars(message.codePointAt(i)))); + } + contentStream.showTextWithPositioning(text.toArray()); + + // PDF specification about word spacing: + // "Word spacing shall be applied to every occurrence of the single-byte character + // code 32 in a string when using a simple font or a composite font that defines + // code 32 as a single-byte code. It shall not apply to occurrences of the byte + // value 32 in multiple-byte codes. + // TrueType font with no word spacing + contentStream.setTextMatrix( + Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f * 4)); + font = PDTrueTypeFont.load(doc, PDDocument.class.getResourceAsStream( + "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf"), WinAnsiEncoding.INSTANCE); + contentStream.setFont(font, FONT_SIZE); + contentStream.showText(message); + + float wordSpacing = (pageSize.getWidth() * 1000f - stringWidth) / (parts.length - 1) / 1000; + + // TrueType font with word spacing + contentStream.setTextMatrix( + Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f * 5)); + font = PDTrueTypeFont.load(doc, PDDocument.class.getResourceAsStream( + "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf"), WinAnsiEncoding.INSTANCE); + contentStream.setFont(font, FONT_SIZE); + contentStream.setWordSpacing(wordSpacing); + contentStream.showText(message); + + // Type0 font with word spacing that has no effect + contentStream.setTextMatrix( + Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f * 6)); + font = PDType0Font.load(doc, PDDocument.class.getResourceAsStream( + "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf")); + contentStream.setFont(font, FONT_SIZE); + contentStream.setWordSpacing(wordSpacing); + contentStream.showText(message); + + // Finish up. + contentStream.endText(); + } + + doc.save(outfile); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/SuperimposePage.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/SuperimposePage.java new file mode 100644 index 00000000000..c3c3ef16589 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/SuperimposePage.java @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.multipdf.LayerUtility; +import org.apache.pdfbox.util.Matrix; + +/** + * Example to show superimposing a PDF page onto another PDF. + */ +public final class SuperimposePage +{ + + private SuperimposePage() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 2) + { + System.err.println("usage: " + SuperimposePage.class.getName() + + " "); + System.exit(1); + } + String sourcePath = args[0]; + String destPath = args[1]; + + try (PDDocument sourceDoc = PDDocument.load(new File(sourcePath))) + { + int sourcePage = 1; + + // create a new PDF and add a blank page + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(); + doc.addPage(page); + + // write some sample text to the new page + try (PDPageContentStream contents = new PDPageContentStream(doc, page)) + { + contents.beginText(); + contents.setFont(PDType1Font.HELVETICA_BOLD, 12); + contents.newLineAtOffset(2, PDRectangle.LETTER.getHeight() - 12); + contents.showText("Sample text"); + contents.endText(); + + // Create a Form XObject from the source document using LayerUtility + LayerUtility layerUtility = new LayerUtility(doc); + PDFormXObject form = layerUtility.importPageAsForm(sourceDoc, sourcePage - 1); + + // draw the full form + contents.drawForm(form); + + // draw a scaled form + contents.saveGraphicsState(); + Matrix matrix = Matrix.getScaleInstance(0.5f, 0.5f); + contents.transform(matrix); + contents.drawForm(form); + contents.restoreGraphicsState(); + + // draw a scaled and rotated form + contents.saveGraphicsState(); + matrix.rotate(1.8 * Math.PI); // radians + contents.transform(matrix); + contents.drawForm(form); + contents.restoreGraphicsState(); + } + doc.save(destPath); + } + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java new file mode 100644 index 00000000000..caf127a6fb2 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/UsingTextMatrix.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.util.Matrix; + +/** + * This is an example of how to use a text matrix. + */ +public class UsingTextMatrix +{ + /** + * Constructor. + */ + public UsingTextMatrix() + { + super(); + } + + /** + * creates a sample document with some text using a text matrix. + * + * @param message The message to write in the file. + * @param outfile The resulting PDF. + * + * @throws IOException If there is an error writing the data. + */ + public void doIt( String message, String outfile ) throws IOException + { + // the document + try (PDDocument doc = new PDDocument()) + { + // Page 1 + PDFont font = PDType1Font.HELVETICA; + PDPage page = new PDPage(PDRectangle.A4); + doc.addPage(page); + float fontSize = 12.0f; + + PDRectangle pageSize = page.getMediaBox(); + float centeredXPosition = (pageSize.getWidth() - fontSize/1000f)/2f; + float stringWidth = font.getStringWidth( message ); + float centeredYPosition = (pageSize.getHeight() - (stringWidth*fontSize)/1000f)/3f; + + PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false); + contentStream.setFont( font, fontSize ); + contentStream.beginText(); + // counterclockwise rotation + for (int i=0;i<8;i++) + { + contentStream.setTextMatrix(Matrix.getRotateInstance(i * Math.PI * 0.25, + centeredXPosition, pageSize.getHeight() - centeredYPosition)); + contentStream.showText(message + " " + i); + } + // clockwise rotation + for (int i=0;i<8;i++) + { + contentStream.setTextMatrix(Matrix.getRotateInstance(-i*Math.PI*0.25, + centeredXPosition, centeredYPosition)); + contentStream.showText(message + " " + i); + } + + contentStream.endText(); + contentStream.close(); + + // Page 2 + page = new PDPage(PDRectangle.A4); + doc.addPage(page); + fontSize = 1.0f; + + contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false); + contentStream.setFont( font, fontSize ); + contentStream.beginText(); + + // text scaling and translation + for (int i=0;i<10;i++) + { + contentStream.setTextMatrix(new Matrix(12 + (i * 6), 0, 0, 12+(i*6), 100, 100+i*50)); + contentStream.showText(message + " " + i); + } + contentStream.endText(); + contentStream.close(); + + // Page 3 + page = new PDPage(PDRectangle.A4); + doc.addPage(page); + fontSize = 1.0f; + + contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false); + contentStream.setFont( font, fontSize ); + contentStream.beginText(); + + int i = 0; + // text scaling combined with rotation + contentStream.setTextMatrix(new Matrix(12, 0, 0, 12, centeredXPosition, centeredYPosition*1.5f)); + contentStream.showText(message + " " + i++); + + contentStream.setTextMatrix(new Matrix(0, 18, -18, 0, centeredXPosition, centeredYPosition*1.5f)); + contentStream.showText(message + " " + i++); + + contentStream.setTextMatrix(new Matrix(-24, 0, 0, -24, centeredXPosition, centeredYPosition*1.5f)); + contentStream.showText(message + " " + i++); + + contentStream.setTextMatrix(new Matrix(0, -30, 30, 0, centeredXPosition, centeredYPosition*1.5f)); + contentStream.showText(message + " " + i++); + + contentStream.endText(); + contentStream.close(); + + doc.save( outfile ); + } + } + + /** + * This will create a PDF document with some examples how to use a text matrix. + * + * @param args Command line arguments. + */ + public static void main(String[] args) throws IOException + { + UsingTextMatrix app = new UsingTextMatrix(); + if( args.length != 2 ) + { + app.usage(); + } + else + { + app.doIt( args[0], args[1] ); + } + } + + /** + * This will print out a message telling how to use this example. + */ + private void usage() + { + System.err.println( "usage: " + this.getClass().getName() + " " ); + } +} diff --git a/src/org/pdfbox/examples/pdmodel/package.html b/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/package.html similarity index 100% rename from src/org/pdfbox/examples/pdmodel/package.html rename to examples/src/main/java/org/apache/pdfbox/examples/pdmodel/package.html diff --git a/examples/src/main/java/org/apache/pdfbox/examples/printing/Printing.java b/examples/src/main/java/org/apache/pdfbox/examples/printing/Printing.java new file mode 100644 index 00000000000..d15f709af88 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/printing/Printing.java @@ -0,0 +1,169 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.printing; + +import java.awt.print.Book; +import java.awt.print.PageFormat; +import java.awt.print.Paper; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; +import java.io.File; +import java.io.IOException; +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.PageRanges; +import javax.print.attribute.standard.Sides; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.viewerpreferences.PDViewerPreferences; +import org.apache.pdfbox.printing.PDFPageable; +import org.apache.pdfbox.printing.PDFPrintable; + +/** + * Examples of various different ways to print PDFs using PDFBox. + */ +public final class Printing +{ + private Printing() + { + } + + /** + * Entry point. + */ + public static void main(String args[]) throws PrinterException, IOException + { + if (args.length != 1) + { + System.err.println("usage: java " + Printing.class.getName() + " "); + System.exit(1); + } + + String filename = args[0]; + try (PDDocument document = PDDocument.load(new File(filename))) + { + // choose your printing method: + print(document); + //printWithAttributes(document); + //printWithDialog(document); + //printWithDialogAndAttributes(document); + //printWithPaper(document); + } + } + + /** + * Prints the document at its actual size. This is the recommended way to print. + */ + private static void print(PDDocument document) throws IOException, PrinterException + { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + job.print(); + } + + /** + * Prints using custom PrintRequestAttribute values. + */ + private static void printWithAttributes(PDDocument document) + throws IOException, PrinterException + { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + + PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); + attr.add(new PageRanges(1, 1)); // pages 1 to 1 + + job.print(attr); + } + + /** + * Prints with a print preview dialog. + */ + private static void printWithDialog(PDDocument document) throws IOException, PrinterException + { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + + if (job.printDialog()) + { + job.print(); + } + } + + /** + * Prints with a print preview dialog and custom PrintRequestAttribute values. + */ + private static void printWithDialogAndAttributes(PDDocument document) + throws IOException, PrinterException + { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + + PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); + attr.add(new PageRanges(1, 1)); // pages 1 to 1 + + PDViewerPreferences vp = document.getDocumentCatalog().getViewerPreferences(); + if (vp != null && vp.getDuplex() != null) + { + String dp = vp.getDuplex(); + if (PDViewerPreferences.DUPLEX.DuplexFlipLongEdge.toString().equals(dp)) + { + attr.add(Sides.TWO_SIDED_LONG_EDGE); + } + else if (PDViewerPreferences.DUPLEX.DuplexFlipShortEdge.toString().equals(dp)) + { + attr.add(Sides.TWO_SIDED_SHORT_EDGE); + } + else if (PDViewerPreferences.DUPLEX.Simplex.toString().equals(dp)) + { + attr.add(Sides.ONE_SIDED); + } + } + + if (job.printDialog(attr)) + { + job.print(attr); + } + } + + /** + * Prints using a custom page size and custom margins. + */ + private static void printWithPaper(PDDocument document) + throws IOException, PrinterException + { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPageable(new PDFPageable(document)); + + // define custom paper + Paper paper = new Paper(); + paper.setSize(306, 396); // 1/72 inch + paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); // no margins + + // custom page format + PageFormat pageFormat = new PageFormat(); + pageFormat.setPaper(paper); + + // override the page format + Book book = new Book(); + // append all pages + book.append(new PDFPrintable(document), pageFormat, document.getNumberOfPages()); + job.setPageable(book); + + job.print(); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/rendering/CustomGraphicsStreamEngine.java b/examples/src/main/java/org/apache/pdfbox/examples/rendering/CustomGraphicsStreamEngine.java new file mode 100644 index 00000000000..b6a47a929bb --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/rendering/CustomGraphicsStreamEngine.java @@ -0,0 +1,198 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.rendering; + +import java.awt.geom.Point2D; +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine; +import org.apache.pdfbox.contentstream.PDFStreamEngine; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.image.PDImage; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * Example of a custom PDFGraphicsStreamEngine subclass. Allows text and graphics to be processed + * in a custom manner. This example simply prints the operations to stdout. + * + *

See {@link PDFStreamEngine} for further methods which may be overridden. + * + * @author John Hewson + */ +public class CustomGraphicsStreamEngine extends PDFGraphicsStreamEngine +{ + public static void main(String[] args) throws IOException + { + File file = new File("src/main/resources/org/apache/pdfbox/examples/rendering/", + "custom-render-demo.pdf"); + + try (PDDocument doc = PDDocument.load(file)) + { + PDPage page = doc.getPage(0); + CustomGraphicsStreamEngine engine = new CustomGraphicsStreamEngine(page); + engine.run(); + } + } + + /** + * Constructor. + * + * @param page PDF Page + */ + protected CustomGraphicsStreamEngine(PDPage page) + { + super(page); + } + + /** + * Runs the engine on the current page. + * + * @throws IOException If there is an IO error while drawing the page. + */ + public void run() throws IOException + { + processPage(getPage()); + + for (PDAnnotation annotation : getPage().getAnnotations()) + { + showAnnotation(annotation); + } + } + + @Override + public void appendRectangle(Point2D p0, Point2D p1, Point2D p2, Point2D p3) throws IOException + { + System.out.printf("appendRectangle %.2f %.2f, %.2f %.2f, %.2f %.2f, %.2f %.2f\n", + p0.getX(), p0.getY(), p1.getX(), p1.getY(), + p2.getX(), p2.getY(), p3.getX(), p3.getY()); + } + + @Override + public void drawImage(PDImage pdImage) throws IOException + { + System.out.println("drawImage"); + } + + @Override + public void clip(int windingRule) throws IOException + { + System.out.println("clip"); + } + + @Override + public void moveTo(float x, float y) throws IOException + { + System.out.printf("moveTo %.2f %.2f\n", x, y); + } + + @Override + public void lineTo(float x, float y) throws IOException + { + System.out.printf("lineTo %.2f %.2f\n", x, y); + } + + @Override + public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) throws IOException + { + System.out.printf("curveTo %.2f %.2f, %.2f %.2f, %.2f %.2f\n", x1, y1, x2, y2, x3, y3); + } + + @Override + public Point2D getCurrentPoint() throws IOException + { + // if you want to build paths, you'll need to keep track of this like PageDrawer does + return new Point2D.Float(0, 0); + } + + @Override + public void closePath() throws IOException + { + System.out.println("closePath"); + } + + @Override + public void endPath() throws IOException + { + System.out.println("endPath"); + } + + @Override + public void strokePath() throws IOException + { + System.out.println("strokePath"); + } + + @Override + public void fillPath(int windingRule) throws IOException + { + System.out.println("fillPath"); + } + + @Override + public void fillAndStrokePath(int windingRule) throws IOException + { + System.out.println("fillAndStrokePath"); + } + + @Override + public void shadingFill(COSName shadingName) throws IOException + { + System.out.println("shadingFill " + shadingName.toString()); + } + + /** + * Overridden from PDFStreamEngine. + */ + @Override + public void showTextString(byte[] string) throws IOException + { + System.out.print("showTextString \""); + super.showTextString(string); + System.out.println("\""); + } + + /** + * Overridden from PDFStreamEngine. + */ + @Override + public void showTextStrings(COSArray array) throws IOException + { + System.out.print("showTextStrings \""); + super.showTextStrings(array); + System.out.println("\""); + } + + /** + * Overridden from PDFStreamEngine. + */ + @Override + protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + System.out.print(unicode); + super.showGlyph(textRenderingMatrix, font, code, unicode, displacement); + } + + // NOTE: there are may more methods in PDFStreamEngine which can be overridden here too. +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/rendering/CustomPageDrawer.java b/examples/src/main/java/org/apache/pdfbox/examples/rendering/CustomPageDrawer.java new file mode 100644 index 00000000000..0f6304f4c9f --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/rendering/CustomPageDrawer.java @@ -0,0 +1,193 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.rendering; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; +import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.rendering.PageDrawer; +import org.apache.pdfbox.rendering.PageDrawerParameters; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * Example showing custom rendering by subclassing PageDrawer. + * + *

If you want to do custom graphics processing rather than Graphics2D rendering, then you should + * subclass {@link PDFGraphicsStreamEngine} instead. Subclassing PageDrawer is only suitable for + * cases where the goal is to render onto a Graphics2D surface. + * + * @author John Hewson + */ +public class CustomPageDrawer +{ + public static void main(String[] args) throws IOException + { + File file = new File("src/main/resources/org/apache/pdfbox/examples/rendering/", + "custom-render-demo.pdf"); + + try (PDDocument doc = PDDocument.load(file)) + { + PDFRenderer renderer = new MyPDFRenderer(doc); + BufferedImage image = renderer.renderImage(0); + ImageIO.write(image, "PNG", new File("custom-render.png")); + } + } + + /** + * Example PDFRenderer subclass, uses MyPageDrawer for custom rendering. + */ + private static class MyPDFRenderer extends PDFRenderer + { + MyPDFRenderer(PDDocument document) + { + super(document); + } + + @Override + protected PageDrawer createPageDrawer(PageDrawerParameters parameters) throws IOException + { + return new MyPageDrawer(parameters); + } + } + + /** + * Example PageDrawer subclass with custom rendering. + */ + private static class MyPageDrawer extends PageDrawer + { + MyPageDrawer(PageDrawerParameters parameters) throws IOException + { + super(parameters); + } + + /** + * Color replacement. + */ + @Override + protected Paint getPaint(PDColor color) throws IOException + { + // if this is the non-stroking color + if (getGraphicsState().getNonStrokingColor() == color) + { + // find red, ignoring alpha channel + if (color.toRGB() == (Color.RED.getRGB() & 0x00FFFFFF)) + { + // replace it with blue + return Color.BLUE; + } + } + return super.getPaint(color); + } + + /** + * Glyph bounding boxes. + */ + @Override + protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + // draw glyph + super.showGlyph(textRenderingMatrix, font, code, unicode, displacement); + + // bbox in EM -> user units + Shape bbox = new Rectangle2D.Float(0, 0, font.getWidth(code) / 1000, 1); + AffineTransform at = textRenderingMatrix.createAffineTransform(); + bbox = at.createTransformedShape(bbox); + + // save + Graphics2D graphics = getGraphics(); + Color color = graphics.getColor(); + Stroke stroke = graphics.getStroke(); + Shape clip = graphics.getClip(); + + // draw + graphics.setClip(graphics.getDeviceConfiguration().getBounds()); + graphics.setColor(Color.RED); + graphics.setStroke(new BasicStroke(.5f)); + graphics.draw(bbox); + + // restore + graphics.setStroke(stroke); + graphics.setColor(color); + graphics.setClip(clip); + } + + /** + * Filled path bounding boxes. + */ + @Override + public void fillPath(int windingRule) throws IOException + { + // bbox in user units + Shape bbox = getLinePath().getBounds2D(); + + // draw path (note that getLinePath() is now reset) + super.fillPath(windingRule); + + // save + Graphics2D graphics = getGraphics(); + Color color = graphics.getColor(); + Stroke stroke = graphics.getStroke(); + Shape clip = graphics.getClip(); + + // draw + graphics.setClip(graphics.getDeviceConfiguration().getBounds()); + graphics.setColor(Color.GREEN); + graphics.setStroke(new BasicStroke(.5f)); + graphics.draw(bbox); + + // restore + graphics.setStroke(stroke); + graphics.setColor(color); + graphics.setClip(clip); + } + + /** + * Custom annotation rendering. + */ + @Override + public void showAnnotation(PDAnnotation annotation) throws IOException + { + // save + saveGraphicsState(); + + // 35% alpha + getGraphicsState().setNonStrokeAlphaConstant(0.35); + super.showAnnotation(annotation); + + // restore + restoreGraphicsState(); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CMSProcessableInputStream.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CMSProcessableInputStream.java new file mode 100644 index 00000000000..64bf51f882f --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CMSProcessableInputStream.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.cms.CMSObjectIdentifiers; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSTypedData; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.pdfbox.io.IOUtils; + +/** + * Wraps a InputStream into a CMSProcessable object for bouncy castle. It's a memory saving + * alternative to the {@link org.bouncycastle.cms.CMSProcessableByteArray CMSProcessableByteArray} + * class. + * + * @author Thomas Chojecki + */ +class CMSProcessableInputStream implements CMSTypedData +{ + private InputStream in; + private final ASN1ObjectIdentifier contentType; + + CMSProcessableInputStream(InputStream is) + { + this(new ASN1ObjectIdentifier(CMSObjectIdentifiers.data.getId()), is); + } + + CMSProcessableInputStream(ASN1ObjectIdentifier type, InputStream is) + { + contentType = type; + in = is; + } + + @Override + public Object getContent() + { + return in; + } + + @Override + public void write(OutputStream out) throws IOException, CMSException + { + // read the content only one time + IOUtils.copy(in, out); + in.close(); + } + + @Override + public ASN1ObjectIdentifier getContentType() + { + return contentType; + } +} \ No newline at end of file diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateEmbeddedTimeStamp.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateEmbeddedTimeStamp.java new file mode 100644 index 00000000000..311e0e5bc3e --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateEmbeddedTimeStamp.java @@ -0,0 +1,269 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.util.Hex; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSSignedData; + +/** + * An example for timestamp-signing a PDF for PADeS-Specification. The document will only be changed + * in its existing signature by a signed timestamp (A timestamp and the Hash-Value of the document + * are signed by a Time Stamp Authority (TSA)). + * + * This method only changes the unsigned parameters of a signature, so that it is kept valid. + * + * Use case: sign offline to avoid zero-day attacks against the signing machine. Once the signature + * is there and the pdf is transferred to a network connected machine, one is likely to want to add + * a timestamp. (Ralf Hauser) + * + * @author Alexis Suter + */ +public class CreateEmbeddedTimeStamp +{ + private final String tsaUrl; + private PDDocument document; + private PDSignature signature; + private byte[] changedEncodedSignature; + + public CreateEmbeddedTimeStamp(String tsaUrl) + { + this.tsaUrl = tsaUrl; + } + + /** + * Embeds the given PDF file with signed timestamp(s). Alters the original file on disk. + * + * @param file the PDF file to sign and to overwrite + * @throws IOException + */ + public void embedTimeStamp(File file) throws IOException + { + embedTimeStamp(file, file); + } + + /** + * Embeds signed timestamp(s) into existing signatures of the given document + * + * @param inFile The pdf file possibly containing signatures + * @param outFile Where the changed document will be saved + * @throws IOException + */ + public void embedTimeStamp(File inFile, File outFile) throws IOException + { + if (inFile == null || !inFile.exists()) + { + throw new FileNotFoundException("Document for signing does not exist"); + } + + // sign + try (PDDocument doc = PDDocument.load(inFile)) + { + document = doc; + processTimeStamping(outFile, inFile.getAbsolutePath()); + } + } + + /** + * Processes the time-stamping of the Signature. + * + * @param outFile Where the new file will be written to + * @param fileName of the existing file containing the pdf + * @throws IOException + */ + private void processTimeStamping(File outFile, String fileName) throws IOException + { + int accessPermissions = SigUtils.getMDPPermission(document); + if (accessPermissions == 1) + { + throw new IllegalStateException( + "No changes to the document are permitted due to DocMDP transform parameters dictionary"); + } + + try + { + byte[] documentBytes; + try (FileInputStream fis = new FileInputStream(fileName)) + { + documentBytes = IOUtils.toByteArray(fis); + } + processRelevantSignatures(documentBytes); + + if (changedEncodedSignature != null) + { + try (FileOutputStream output = new FileOutputStream(outFile)) + { + embedNewSignatureIntoDocument(documentBytes, output); + } + } + } + catch (IOException | NoSuchAlgorithmException | CMSException e) + { + throw new IOException(e); + } + } + + /** + * Create changed Signature with embedded TimeStamp from TSA + * + * @param documentBytes byte[] of the input file + * @throws IOException + * @throws CMSException + * @throws NoSuchAlgorithmException + */ + private void processRelevantSignatures(byte[] documentBytes) + throws IOException, CMSException, NoSuchAlgorithmException + { + getRelevantSignature(document); + if (signature != null) + { + byte[] sigBlock = signature.getContents(documentBytes); + CMSSignedData signedData = new CMSSignedData(sigBlock); + + System.out.println("INFO: Byte Range: " + Arrays.toString(signature.getByteRange())); + + if (tsaUrl != null && tsaUrl.length() > 0) + { + ValidationTimeStamp validation = new ValidationTimeStamp(tsaUrl); + signedData = validation.addSignedTimeStamp(signedData); + } + + byte[] newEncoded = Hex.getBytes(signedData.getEncoded()); + int maxSize = signature.getByteRange()[2] - signature.getByteRange()[1]; + System.out.println( + "INFO: New Signature has Size: " + newEncoded.length + " maxSize: " + maxSize); + + if (newEncoded.length > maxSize - 2) + { + throw new IOException( + "New Signature is too big for existing Signature-Placeholder. Max Place: " + + maxSize); + } + else + { + changedEncodedSignature = newEncoded; + } + } + } + + /** + * Extracts last Document-Signature from the document. The signature will be set on the signature-field. + * + * @param document to get the Signature from + * @throws IOException + */ + private void getRelevantSignature(PDDocument document) throws IOException + { + // we can't use getLastSignatureDictionary() because this will fail (see PDFBOX-3978) + // if a signature is assigned to a pre-defined empty signature field that isn't the last. + // we get the last in time by looking at the offset in the PDF file. + SortedMap sortedMap = new TreeMap<>(); + for (PDSignature sig : document.getSignatureDictionaries()) + { + int sigOffset = sig.getByteRange()[1]; + sortedMap.put(sigOffset, sig); + } + if (sortedMap.size() > 0) + { + PDSignature lastSignature = sortedMap.get(sortedMap.lastKey()); + COSBase type = lastSignature.getCOSObject().getItem(COSName.TYPE); + if (type.equals(COSName.SIG)) + { + signature = lastSignature; + } + } + } + + /** + * Embeds the new signature into the document, by copying the rest of the document + * + * @param docBytes byte array of the document + * @param output target, where the file will be written + * @throws IOException + */ + private void embedNewSignatureIntoDocument(byte[] docBytes, OutputStream output) + throws IOException + { + int[] byteRange = signature.getByteRange(); + output.write(docBytes, byteRange[0], byteRange[1] + 1); + output.write(changedEncodedSignature); + int addingLength = byteRange[2] - byteRange[1] - 2 - changedEncodedSignature.length; + byte[] zeroes = Hex.getBytes(new byte[(addingLength + 1) / 2]); + output.write(zeroes); + output.write(docBytes, byteRange[2] - 1, byteRange[3] + 1); + } + + public static void main(String[] args) throws IOException + { + if (args.length != 3) + { + usage(); + System.exit(1); + } + + String tsaUrl = null; + for (int i = 0; i < args.length; i++) + { + if ("-tsa".equals(args[i])) + { + i++; + if (i >= args.length) + { + usage(); + System.exit(1); + } + tsaUrl = args[i]; + } + } + + File inFile = new File(args[0]); + System.out.println("Input File: " + args[0]); + String name = inFile.getName(); + String substring = name.substring(0, name.lastIndexOf('.')); + + File outFile = new File(inFile.getParent(), substring + "_eTs.pdf"); + System.out.println("Output File: " + outFile.getAbsolutePath()); + + // Embed TimeStamp + CreateEmbeddedTimeStamp signing = new CreateEmbeddedTimeStamp(tsaUrl); + signing.embedTimeStamp(inFile, outFile); + } + + private static void usage() + { + System.err.println("usage: java " + CreateEmbeddedTimeStamp.class.getName() + " " + + "\n" + "mandatory option:\n" + + " -tsa sign timestamp using the given TSA server\n"); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateEmptySignatureForm.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateEmptySignatureForm.java new file mode 100644 index 00000000000..6f3ff68eba9 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateEmptySignatureForm.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; + +/** + * An example of creating an AcroForm and an empty signature field from scratch. + * + * An actual signature can be added by clicking on it in Adobe Reader. + * + */ +public final class CreateEmptySignatureForm +{ + private CreateEmptySignatureForm() + { + } + + public static void main(String[] args) throws IOException + { + // Create a new document with an empty page. + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(PDRectangle.A4); + document.addPage(page); + + // Adobe Acrobat uses Helvetica as a default font and + // stores that under the name '/Helv' in the resources dictionary + PDFont font = PDType1Font.HELVETICA; + PDResources resources = new PDResources(); + resources.put(COSName.getPDFName("Helv"), font); + + // Add a new AcroForm and add that to the document + PDAcroForm acroForm = new PDAcroForm(document); + document.getDocumentCatalog().setAcroForm(acroForm); + + // Add and set the resources and default appearance at the form level + acroForm.setDefaultResources(resources); + + // Acrobat sets the font size on the form level to be + // auto sized as default. This is done by setting the font size to '0' + String defaultAppearanceString = "/Helv 0 Tf 0 g"; + acroForm.setDefaultAppearance(defaultAppearanceString); + // --- end of general AcroForm stuff --- + + // Create empty signature field, it will get the name "Signature1" + PDSignatureField signatureField = new PDSignatureField(acroForm); + PDAnnotationWidget widget = signatureField.getWidgets().get(0); + PDRectangle rect = new PDRectangle(50, 650, 200, 50); + widget.setRectangle(rect); + widget.setPage(page); + page.getAnnotations().add(widget); + + acroForm.getFields().add(signatureField); + + document.save(args[0]); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java new file mode 100644 index 00000000000..dc5b7e3963c --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java @@ -0,0 +1,218 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.util.Calendar; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.ExternalSigningSupport; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions; + +/** + * An example for signing a PDF with bouncy castle. + * A keystore can be created with the java keytool, for example: + * + * {@code keytool -genkeypair -storepass 123456 -storetype pkcs12 -alias test -validity 365 + * -v -keyalg RSA -keystore keystore.p12 } + * + * @author Thomas Chojecki + * @author Vakhtang Koroghlishvili + * @author John Hewson + */ +public class CreateSignature extends CreateSignatureBase +{ + + /** + * Initialize the signature creator with a keystore and certficate password. + * + * @param keystore the pkcs12 keystore containing the signing certificate + * @param pin the password for recovering the key + * @throws KeyStoreException if the keystore has not been initialized (loaded) + * @throws NoSuchAlgorithmException if the algorithm for recovering the key cannot be found + * @throws UnrecoverableKeyException if the given password is wrong + * @throws CertificateException if the certificate is not valid as signing time + * @throws IOException if no certificate could be found + */ + public CreateSignature(KeyStore keystore, char[] pin) + throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, CertificateException, IOException + { + super(keystore, pin); + } + + /** + * Signs the given PDF file. Alters the original file on disk. + * @param file the PDF file to sign + * @throws IOException if the file could not be read or written + */ + public void signDetached(File file) throws IOException + { + signDetached(file, file, null); + } + + /** + * Signs the given PDF file. + * @param inFile input PDF file + * @param outFile output PDF file + * @throws IOException if the input file could not be read + */ + public void signDetached(File inFile, File outFile) throws IOException + { + signDetached(inFile, outFile, null); + } + + /** + * Signs the given PDF file. + * @param inFile input PDF file + * @param outFile output PDF file + * @param tsaUrl optional TSA url + * @throws IOException if the input file could not be read + */ + public void signDetached(File inFile, File outFile, String tsaUrl) throws IOException + { + if (inFile == null || !inFile.exists()) + { + throw new FileNotFoundException("Document for signing does not exist"); + } + + setTsaUrl(tsaUrl); + + // sign + try (FileOutputStream fos = new FileOutputStream(outFile); + PDDocument doc = PDDocument.load(inFile)) + { + signDetached(doc, fos); + } + } + + public void signDetached(PDDocument document, OutputStream output) + throws IOException + { + int accessPermissions = SigUtils.getMDPPermission(document); + if (accessPermissions == 1) + { + throw new IllegalStateException("No changes to the document are permitted due to DocMDP transform parameters dictionary"); + } + + // create signature dictionary + PDSignature signature = new PDSignature(); + signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); + signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED); + signature.setName("Example User"); + signature.setLocation("Los Angeles, CA"); + signature.setReason("Testing"); + // TODO extract the above details from the signing certificate? Reason as a parameter? + + // the signing date, needed for valid signature + signature.setSignDate(Calendar.getInstance()); + + // Optional: certify + if (accessPermissions == 0) + { + SigUtils.setMDPPermission(document, signature, 2); + } + + if (isExternalSigning()) + { + document.addSignature(signature); + ExternalSigningSupport externalSigning = + document.saveIncrementalForExternalSigning(output); + // invoke external signature service + byte[] cmsSignature = sign(externalSigning.getContent()); + // set signature bytes received from the service + externalSigning.setSignature(cmsSignature); + } + else + { + SignatureOptions signatureOptions = new SignatureOptions(); + // Size can vary, but should be enough for purpose. + signatureOptions.setPreferredSignatureSize(SignatureOptions.DEFAULT_SIGNATURE_SIZE * 2); + // register signature dictionary and sign interface + document.addSignature(signature, this, signatureOptions); + + // write incremental (only for signing purpose) + document.saveIncremental(output); + } + } + + public static void main(String[] args) throws IOException, GeneralSecurityException + { + if (args.length < 3) + { + usage(); + System.exit(1); + } + + String tsaUrl = null; + boolean externalSig = false; + for (int i = 0; i < args.length; i++) + { + if (args[i].equals("-tsa")) + { + i++; + if (i >= args.length) + { + usage(); + System.exit(1); + } + tsaUrl = args[i]; + } + if (args[i].equals("-e")) + { + externalSig = true; + } + } + + // load the keystore + KeyStore keystore = KeyStore.getInstance("PKCS12"); + char[] password = args[1].toCharArray(); // TODO use Java 6 java.io.Console.readPassword + keystore.load(new FileInputStream(args[0]), password); + // TODO alias command line argument + + // sign PDF + CreateSignature signing = new CreateSignature(keystore, password); + signing.setExternalSigning(externalSig); + + File inFile = new File(args[2]); + String name = inFile.getName(); + String substring = name.substring(0, name.lastIndexOf('.')); + + File outFile = new File(inFile.getParent(), substring + "_signed.pdf"); + signing.signDetached(inFile, outFile, tsaUrl); + } + + private static void usage() + { + System.err.println("usage: java " + CreateSignature.class.getName() + " " + + " \n" + "" + + "options:\n" + + " -tsa sign timestamp using the given TSA server\n" + + " -e sign using external signature creation scenario"); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignatureBase.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignatureBase.java new file mode 100644 index 00000000000..1c39a85bfec --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignatureBase.java @@ -0,0 +1,174 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature; + +import java.io.IOException; +import java.io.InputStream; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Enumeration; + +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; +import org.bouncycastle.cert.jcajce.JcaCertStore; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSSignedData; +import org.bouncycastle.cms.CMSSignedDataGenerator; +import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder; +import org.bouncycastle.operator.ContentSigner; +import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; +import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; + +public abstract class CreateSignatureBase implements SignatureInterface +{ + private PrivateKey privateKey; + private Certificate[] certificateChain; + private String tsaUrl; + private boolean externalSigning; + + /** + * Initialize the signature creator with a keystore (pkcs12) and pin that should be used for the + * signature. + * + * @param keystore is a pkcs12 keystore. + * @param pin is the pin for the keystore / private key + * @throws KeyStoreException if the keystore has not been initialized (loaded) + * @throws NoSuchAlgorithmException if the algorithm for recovering the key cannot be found + * @throws UnrecoverableKeyException if the given password is wrong + * @throws CertificateException if the certificate is not valid as signing time + * @throws IOException if no certificate could be found + */ + public CreateSignatureBase(KeyStore keystore, char[] pin) + throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, IOException, CertificateException + { + // grabs the first alias from the keystore and get the private key. An + // alternative method or constructor could be used for setting a specific + // alias that should be used. + Enumeration aliases = keystore.aliases(); + String alias; + Certificate cert = null; + while (aliases.hasMoreElements()) + { + alias = aliases.nextElement(); + setPrivateKey((PrivateKey) keystore.getKey(alias, pin)); + Certificate[] certChain = keystore.getCertificateChain(alias); + if (certChain == null) + { + continue; + } + setCertificateChain(certChain); + cert = certChain[0]; + if (cert instanceof X509Certificate) + { + // avoid expired certificate + ((X509Certificate) cert).checkValidity(); + + SigUtils.checkCertificateUsage((X509Certificate) cert); + } + break; + } + + if (cert == null) + { + throw new IOException("Could not find certificate"); + } + } + + public final void setPrivateKey(PrivateKey privateKey) + { + this.privateKey = privateKey; + } + + public final void setCertificateChain(final Certificate[] certificateChain) + { + this.certificateChain = certificateChain; + } + + public Certificate[] getCertificateChain() + { + return certificateChain; + } + + public void setTsaUrl(String tsaUrl) + { + this.tsaUrl = tsaUrl; + } + + /** + * SignatureInterface implementation. + * + * This method will be called from inside of the pdfbox and create the PKCS #7 signature. + * The given InputStream contains the bytes that are given by the byte range. + * + * This method is for internal use only. + * + * Use your favorite cryptographic library to implement PKCS #7 signature creation. + * + * @throws IOException + */ + @Override + public byte[] sign(InputStream content) throws IOException + { + // cannot be done private (interface) + try + { + CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); + X509Certificate cert = (X509Certificate) certificateChain[0]; + ContentSigner sha1Signer = new JcaContentSignerBuilder("SHA256WithRSA").build(privateKey); + gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build()).build(sha1Signer, cert)); + gen.addCertificates(new JcaCertStore(Arrays.asList(certificateChain))); + CMSProcessableInputStream msg = new CMSProcessableInputStream(content); + CMSSignedData signedData = gen.generate(msg, false); + if (tsaUrl != null && tsaUrl.length() > 0) + { + ValidationTimeStamp validation = new ValidationTimeStamp(tsaUrl); + signedData = validation.addSignedTimeStamp(signedData); + } + return signedData.getEncoded(); + } + catch (GeneralSecurityException | CMSException | OperatorCreationException e) + { + throw new IOException(e); + } + } + + /** + * Set if external signing scenario should be used. + * If {@code false}, SignatureInterface would be used for signing. + *

+ * Default: {@code false} + *

+ * @param externalSigning {@code true} if external signing should be performed + */ + public void setExternalSigning(boolean externalSigning) + { + this.externalSigning = externalSigning; + } + + public boolean isExternalSigning() + { + return externalSigning; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignedTimeStamp.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignedTimeStamp.java new file mode 100644 index 00000000000..a5956e65ae3 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignedTimeStamp.java @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.GeneralSecurityException; +import java.security.NoSuchAlgorithmException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; + +/** + * An example for timestamp-signing a PDF for PADeS-Specification. The document will be extended by + * a signed TimeStamp (another kind of signature) (Signed TimeStamp and Hash-Value of the document + * are signed by a Time Stamp Authority (TSA)). + * + * @author Thomas Chojecki + * @author Vakhtang Koroghlishvili + * @author John Hewson + * @author Alexis Suter + */ +public class CreateSignedTimeStamp implements SignatureInterface +{ + private static final Log LOG = LogFactory.getLog(CreateSignedTimeStamp.class); + + private final String tsaUrl; + + /** + * Initialize the signed timestamp creator + * + * @param tsaUrl The url where TS-Request will be done. + */ + public CreateSignedTimeStamp(String tsaUrl) + { + this.tsaUrl = tsaUrl; + } + + /** + * Signs the given PDF file. Alters the original file on disk. + * + * @param file the PDF file to sign + * @throws IOException if the file could not be read or written + */ + public void signDetached(File file) throws IOException + { + signDetached(file, file); + } + + /** + * Signs the given PDF file. + * + * @param inFile input PDF file + * @param outFile output PDF file + * @throws IOException if the input file could not be read + */ + public void signDetached(File inFile, File outFile) throws IOException + { + if (inFile == null || !inFile.exists()) + { + throw new FileNotFoundException("Document for signing does not exist"); + } + + // sign + try (PDDocument doc = PDDocument.load(inFile); + FileOutputStream fos = new FileOutputStream(outFile)) + { + signDetached(doc, fos); + } + } + + /** + * Prepares the TimeStamp-Signature and starts the saving-process. + * + * @param document given Pdf + * @param output Where the file will be written + * @throws IOException + */ + public void signDetached(PDDocument document, OutputStream output) throws IOException + { + int accessPermissions = SigUtils.getMDPPermission(document); + if (accessPermissions == 1) + { + throw new IllegalStateException( + "No changes to the document are permitted due to DocMDP transform parameters dictionary"); + } + + // create signature dictionary + PDSignature signature = new PDSignature(); + signature.setType(COSName.DOC_TIME_STAMP); + signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); + signature.setSubFilter(COSName.getPDFName("ETSI.RFC3161")); + + // No certification allowed because /Reference not allowed in signature directory + // see ETSI EN 319 142-1 Part 1 and ETSI TS 102 778-4 + // http://www.etsi.org/deliver/etsi_en%5C319100_319199%5C31914201%5C01.01.00_30%5Cen_31914201v010100v.pdf + // http://www.etsi.org/deliver/etsi_ts/102700_102799/10277804/01.01.01_60/ts_10277804v010101p.pdf + + // register signature dictionary and sign interface + document.addSignature(signature, this); + + // write incremental (only for signing purpose) + document.saveIncremental(output); + } + + @Override + public byte[] sign(InputStream content) throws IOException + { + ValidationTimeStamp validation; + try + { + validation = new ValidationTimeStamp(tsaUrl); + return validation.getTimeStampToken(content); + } + catch (NoSuchAlgorithmException e) + { + LOG.error("Hashing-Algorithm not found for TimeStamping", e); + } + return new byte[] {}; + } + + public static void main(String[] args) throws IOException, GeneralSecurityException + { + if (args.length != 3) + { + usage(); + System.exit(1); + } + + String tsaUrl = null; + if ("-tsa".equals(args[1])) + { + tsaUrl = args[2]; + } + else + { + usage(); + System.exit(1); + } + + // sign PDF + CreateSignedTimeStamp signing = new CreateSignedTimeStamp(tsaUrl); + + File inFile = new File(args[0]); + String name = inFile.getName(); + String substring = name.substring(0, name.lastIndexOf('.')); + + File outFile = new File(inFile.getParent(), substring + "_timestamped.pdf"); + signing.signDetached(inFile, outFile); + } + + private static void usage() + { + System.err.println("usage: java " + CreateSignedTimeStamp.class.getName() + " " + + "\n" + "mandatory options:\n" + + " -tsa sign timestamp using the given TSA server\n"); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java new file mode 100644 index 00000000000..d3e70fca094 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java @@ -0,0 +1,444 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.util.Calendar; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.ExternalSigningSupport; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigProperties; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSignDesigner; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; +import org.apache.pdfbox.util.Hex; + +/** + * This is an example for visual signing a pdf. + + * @see CreateSignature + * @author Vakhtang Koroghlishvili + */ +public class CreateVisibleSignature extends CreateSignatureBase +{ + private SignatureOptions signatureOptions; + private PDVisibleSignDesigner visibleSignDesigner; + private final PDVisibleSigProperties visibleSignatureProperties = new PDVisibleSigProperties(); + private boolean lateExternalSigning = false; + + public boolean isLateExternalSigning() + { + return lateExternalSigning; + } + + /** + * Set late external signing. Enable this if you want to activate the demo code where the + * signature is kept and added in an extra step without using PDFBox methods. This is disabled + * by default. + * + * @param lateExternalSigning + */ + public void setLateExternalSigning(boolean lateExternalSigning) + { + this.lateExternalSigning = lateExternalSigning; + } + + /** + * Set visible signature designer for a new signature field. + * + * @param filename + * @param x position of the signature field + * @param y position of the signature field + * @param zoomPercent increase (positive value) or decrease (negative value) image with x percent. + * @param imageStream input stream of an image. + * @param page the signature should be placed on + * @throws IOException + */ + public void setVisibleSignDesigner(String filename, int x, int y, int zoomPercent, + InputStream imageStream, int page) + throws IOException + { + visibleSignDesigner = new PDVisibleSignDesigner(filename, imageStream, page); + visibleSignDesigner.xAxis(x).yAxis(y).zoom(zoomPercent).adjustForRotation(); + } + + /** + * Set visible signature designer for an existing signature field. + * + * @param zoomPercent increase (positive value) or decrease (negative value) image with x percent. + * @param imageStream input stream of an image. + * @throws IOException + */ + public void setVisibleSignDesigner(int zoomPercent, InputStream imageStream) + throws IOException + { + visibleSignDesigner = new PDVisibleSignDesigner(imageStream); + visibleSignDesigner.zoom(zoomPercent); + } + + /** + * Set visible signature properties for new signature fields. + * + * @param name + * @param location + * @param reason + * @param preferredSize + * @param page + * @param visualSignEnabled + */ + public void setVisibleSignatureProperties(String name, String location, String reason, int preferredSize, + int page, boolean visualSignEnabled) + { + visibleSignatureProperties.signerName(name).signerLocation(location).signatureReason(reason). + preferredSize(preferredSize).page(page).visualSignEnabled(visualSignEnabled). + setPdVisibleSignature(visibleSignDesigner); + } + + /** + * Set visible signature properties for existing signature fields. + * + * @param name + * @param location + * @param reason + * @param visualSignEnabled + */ + public void setVisibleSignatureProperties(String name, String location, String reason, + boolean visualSignEnabled) + { + visibleSignatureProperties.signerName(name).signerLocation(location).signatureReason(reason). + visualSignEnabled(visualSignEnabled).setPdVisibleSignature(visibleSignDesigner); + } + + /** + * Initialize the signature creator with a keystore (pkcs12) and pin that + * should be used for the signature. + * + * @param keystore is a pkcs12 keystore. + * @param pin is the pin for the keystore / private key + * @throws KeyStoreException if the keystore has not been initialized (loaded) + * @throws NoSuchAlgorithmException if the algorithm for recovering the key cannot be found + * @throws UnrecoverableKeyException if the given password is wrong + * @throws CertificateException if the certificate is not valid as signing time + * @throws IOException if no certificate could be found + */ + public CreateVisibleSignature(KeyStore keystore, char[] pin) + throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, IOException, CertificateException + { + super(keystore, pin); + } + + /** + * Sign pdf file and create new file that ends with "_signed.pdf". + * + * @param inputFile The source pdf document file. + * @param signedFile The file to be signed. + * @param tsaUrl optional TSA url + * @throws IOException + */ + public void signPDF(File inputFile, File signedFile, String tsaUrl) throws IOException + { + this.signPDF(inputFile, signedFile, tsaUrl, null); + } + + /** + * Sign pdf file and create new file that ends with "_signed.pdf". + * + * @param inputFile The source pdf document file. + * @param signedFile The file to be signed. + * @param tsaUrl optional TSA url + * @param signatureFieldName optional name of an existing (unsigned) signature field + * @throws IOException + */ + public void signPDF(File inputFile, File signedFile, String tsaUrl, String signatureFieldName) throws IOException + { + if (inputFile == null || !inputFile.exists()) + { + throw new IOException("Document for signing does not exist"); + } + + setTsaUrl(tsaUrl); + + // creating output document and prepare the IO streams. + + try (FileOutputStream fos = new FileOutputStream(signedFile); + PDDocument doc = PDDocument.load(inputFile)) + { + int accessPermissions = SigUtils.getMDPPermission(doc); + if (accessPermissions == 1) + { + throw new IllegalStateException("No changes to the document are permitted due to DocMDP transform parameters dictionary"); + } + // Note that PDFBox has a bug that visual signing on certified files with permission 2 + // doesn't work properly, see PDFBOX-3699. As long as this issue is open, you may want to + // be careful with such files. + + PDSignature signature; + + // sign a PDF with an existing empty signature, as created by the CreateEmptySignatureForm example. + signature = findExistingSignature(doc, signatureFieldName); + + if (signature == null) + { + // create signature dictionary + signature = new PDSignature(); + } + + // Optional: certify + // can be done only if version is at least 1.5 and if not already set + // doing this on a PDF/A-1b file fails validation by Adobe preflight (PDFBOX-3821) + // PDF/A-1b requires PDF version 1.4 max, so don't increase the version on such files. + if (doc.getVersion() >= 1.5f && accessPermissions == 0) + { + SigUtils.setMDPPermission(doc, signature, 2); + } + + PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm(); + if (acroForm != null && acroForm.getNeedAppearances()) + { + // PDFBOX-3738 NeedAppearances true results in visible signature becoming invisible + // with Adobe Reader + if (acroForm.getFields().isEmpty()) + { + // we can safely delete it if there are no fields + acroForm.getCOSObject().removeItem(COSName.NEED_APPEARANCES); + // note that if you've set MDP permissions, the removal of this item + // may result in Adobe Reader claiming that the document has been changed. + // and/or that field content won't be displayed properly. + // ==> decide what you prefer and adjust your code accordingly. + } + else + { + System.out.println("/NeedAppearances is set, signature may be ignored by Adobe Reader"); + } + } + + // default filter + signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); + + // subfilter for basic and PAdES Part 2 signatures + signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED); + + if (visibleSignatureProperties != null) + { + // this builds the signature structures in a separate document + visibleSignatureProperties.buildSignature(); + + signature.setName(visibleSignatureProperties.getSignerName()); + signature.setLocation(visibleSignatureProperties.getSignerLocation()); + signature.setReason(visibleSignatureProperties.getSignatureReason()); + } + + // the signing date, needed for valid signature + signature.setSignDate(Calendar.getInstance()); + + // do not set SignatureInterface instance, if external signing used + SignatureInterface signatureInterface = isExternalSigning() ? null : this; + + // register signature dictionary and sign interface + if (visibleSignatureProperties != null && visibleSignatureProperties.isVisualSignEnabled()) + { + signatureOptions = new SignatureOptions(); + signatureOptions.setVisualSignature(visibleSignatureProperties.getVisibleSignature()); + signatureOptions.setPage(visibleSignatureProperties.getPage() - 1); + doc.addSignature(signature, signatureInterface, signatureOptions); + } + else + { + doc.addSignature(signature, signatureInterface); + } + + if (isExternalSigning()) + { + ExternalSigningSupport externalSigning = doc.saveIncrementalForExternalSigning(fos); + // invoke external signature service + byte[] cmsSignature = sign(externalSigning.getContent()); + + // Explanation of late external signing (off by default): + // If you want to add the signature in a separate step, then set an empty byte array + // and call signature.getByteRange() and remember the offset signature.getByteRange()[1]+1. + // you can write the ascii hex signature at a later time even if you don't have this + // PDDocument object anymore, with classic java file random access methods. + // If you can't remember the offset value from ByteRange because your context has changed, + // then open the file with PDFBox, find the field with findExistingSignature() or + // PDDocument.getLastSignatureDictionary() and get the ByteRange from there. + // Close the file and then write the signature as explained earlier in this comment. + if (isLateExternalSigning()) + { + // this saves the file with a 0 signature + externalSigning.setSignature(new byte[0]); + + // remember the offset (add 1 because of "<") + int offset = signature.getByteRange()[1] + 1; + + // now write the signature at the correct offset without any PDFBox methods + try (RandomAccessFile raf = new RandomAccessFile(signedFile, "rw")) + { + raf.seek(offset); + raf.write(Hex.getBytes(cmsSignature)); + } + } + else + { + // set signature bytes received from the service and save the file + externalSigning.setSignature(cmsSignature); + } + } + else + { + // write incremental (only for signing purpose) + doc.saveIncremental(fos); + } + } + + // Do not close signatureOptions before saving, because some COSStream objects within + // are transferred to the signed document. + // Do not allow signatureOptions get out of scope before saving, because then the COSDocument + // in signature options might by closed by gc, which would close COSStream objects prematurely. + // See https://issues.apache.org/jira/browse/PDFBOX-3743 + IOUtils.closeQuietly(signatureOptions); + } + + // Find an existing signature (assumed to be empty). You will usually not need this. + private PDSignature findExistingSignature(PDDocument doc, String sigFieldName) + { + PDSignature signature = null; + PDSignatureField signatureField; + PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm(); + if (acroForm != null) + { + signatureField = (PDSignatureField) acroForm.getField(sigFieldName); + if (signatureField != null) + { + // retrieve signature dictionary + signature = signatureField.getSignature(); + if (signature == null) + { + signature = new PDSignature(); + // after solving PDFBOX-3524 + // signatureField.setValue(signature) + // until then: + signatureField.getCOSObject().setItem(COSName.V, signature); + } + else + { + throw new IllegalStateException("The signature field " + sigFieldName + " is already signed."); + } + } + } + return signature; + } + + /** + * Arguments are + * [0] key store + * [1] pin + * [2] document that will be signed + * [3] image of visible signature + * + * @param args + * @throws java.security.KeyStoreException + * @throws java.security.cert.CertificateException + * @throws java.io.IOException + * @throws java.security.NoSuchAlgorithmException + * @throws java.security.UnrecoverableKeyException + */ + public static void main(String[] args) throws KeyStoreException, CertificateException, + IOException, NoSuchAlgorithmException, UnrecoverableKeyException + { + // generate with + // keytool -storepass 123456 -storetype PKCS12 -keystore file.p12 -genkey -alias client -keyalg RSA + if (args.length < 4) + { + usage(); + System.exit(1); + } + + String tsaUrl = null; + // External signing is needed if you are using an external signing service, e.g. to sign + // several files at once. + boolean externalSig = false; + for (int i = 0; i < args.length; i++) + { + if ("-tsa".equals(args[i])) + { + i++; + if (i >= args.length) + { + usage(); + System.exit(1); + } + tsaUrl = args[i]; + } + if ("-e".equals(args[i])) + { + externalSig = true; + } + } + + File ksFile = new File(args[0]); + KeyStore keystore = KeyStore.getInstance("PKCS12"); + char[] pin = args[1].toCharArray(); + keystore.load(new FileInputStream(ksFile), pin); + + File documentFile = new File(args[2]); + + CreateVisibleSignature signing = new CreateVisibleSignature(keystore, pin.clone()); + + File signedDocumentFile; + int page; + try (InputStream imageStream = new FileInputStream(args[3])) + { + String name = documentFile.getName(); + String substring = name.substring(0, name.lastIndexOf('.')); + signedDocumentFile = new File(documentFile.getParent(), substring + "_signed.pdf"); + // page is 1-based here + page = 1; + signing.setVisibleSignDesigner(args[2], 0, 0, -50, imageStream, page); + } + signing.setVisibleSignatureProperties("name", "location", "Security", 0, page, true); + signing.setExternalSigning(externalSig); + signing.signPDF(documentFile, signedDocumentFile, tsaUrl); + } + + /** + * This will print the usage for this program. + */ + private static void usage() + { + System.err.println("Usage: java " + CreateVisibleSignature.class.getName() + + " \n" + "" + + "options:\n" + + " -tsa sign timestamp using the given TSA server\n"+ + " -e sign using external signature creation scenario"); + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature2.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature2.java new file mode 100644 index 00000000000..a5592fe515b --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature2.java @@ -0,0 +1,579 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import java.awt.Color; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Calendar; +import java.util.List; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.ExternalSigningSupport; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; +import org.apache.pdfbox.util.Hex; +import org.apache.pdfbox.util.Matrix; +import org.bouncycastle.asn1.x500.RDN; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x500.style.BCStyle; +import org.bouncycastle.asn1.x500.style.IETFUtils; + +/** + * This is a second example for visual signing a pdf. It doesn't use the "design pattern" influenced + * PDVisibleSignDesigner, and doesn't create its complex multilevel forms described in the Adobe + * document + * Digital + * Signature Appearances, because this isn't required by the PDF specification. See the + * discussion in December 2017 in PDFBOX-3198. + * + * @author Vakhtang Koroghlishvili + * @author Tilman Hausherr + */ +public class CreateVisibleSignature2 extends CreateSignatureBase +{ + private SignatureOptions signatureOptions; + private boolean lateExternalSigning = false; + private File imageFile; + + /** + * Initialize the signature creator with a keystore (pkcs12) and pin that + * should be used for the signature. + * + * @param keystore is a pkcs12 keystore. + * @param pin is the pin for the keystore / private key + * @throws KeyStoreException if the keystore has not been initialized (loaded) + * @throws NoSuchAlgorithmException if the algorithm for recovering the key cannot be found + * @throws UnrecoverableKeyException if the given password is wrong + * @throws CertificateException if the certificate is not valid as signing time + * @throws IOException if no certificate could be found + */ + public CreateVisibleSignature2(KeyStore keystore, char[] pin) + throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, IOException, CertificateException + { + super(keystore, pin); + } + + public File getImageFile() + { + return imageFile; + } + + public void setImageFile(File imageFile) + { + this.imageFile = imageFile; + } + + public boolean isLateExternalSigning() + { + return lateExternalSigning; + } + + /** + * Set late external signing. Enable this if you want to activate the demo code where the + * signature is kept and added in an extra step without using PDFBox methods. This is disabled + * by default. + * + * @param lateExternalSigning + */ + public void setLateExternalSigning(boolean lateExternalSigning) + { + this.lateExternalSigning = lateExternalSigning; + } + + /** + * Sign pdf file and create new file that ends with "_signed.pdf". + * + * @param inputFile The source pdf document file. + * @param signedFile The file to be signed. + * @param humanRect rectangle from a human viewpoint (coordinates start at top left) + * @param tsaUrl optional TSA url + * @throws IOException + */ + public void signPDF(File inputFile, File signedFile, Rectangle2D humanRect, String tsaUrl) throws IOException + { + this.signPDF(inputFile, signedFile, humanRect, tsaUrl, null); + } + + /** + * Sign pdf file and create new file that ends with "_signed.pdf". + * + * @param inputFile The source pdf document file. + * @param signedFile The file to be signed. + * @param humanRect rectangle from a human viewpoint (coordinates start at top left) + * @param tsaUrl optional TSA url + * @param signatureFieldName optional name of an existing (unsigned) signature field + * @throws IOException + */ + public void signPDF(File inputFile, File signedFile, Rectangle2D humanRect, String tsaUrl, String signatureFieldName) throws IOException + { + if (inputFile == null || !inputFile.exists()) + { + throw new IOException("Document for signing does not exist"); + } + + setTsaUrl(tsaUrl); + + // creating output document and prepare the IO streams. + + try (FileOutputStream fos = new FileOutputStream(signedFile); + PDDocument doc = PDDocument.load(inputFile)) + { + int accessPermissions = SigUtils.getMDPPermission(doc); + if (accessPermissions == 1) + { + throw new IllegalStateException("No changes to the document are permitted due to DocMDP transform parameters dictionary"); + } + // Note that PDFBox has a bug that visual signing on certified files with permission 2 + // doesn't work properly, see PDFBOX-3699. As long as this issue is open, you may want to + // be careful with such files. + + PDSignature signature = null; + PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm(); + PDRectangle rect = null; + + // sign a PDF with an existing empty signature, as created by the CreateEmptySignatureForm example. + if (acroForm != null) + { + signature = findExistingSignature(acroForm, signatureFieldName); + if (signature != null) + { + rect = acroForm.getField(signatureFieldName).getWidgets().get(0).getRectangle(); + } + } + + if (signature == null) + { + // create signature dictionary + signature = new PDSignature(); + } + + if (rect == null) + { + rect = createSignatureRectangle(doc, humanRect); + } + + // Optional: certify + // can be done only if version is at least 1.5 and if not already set + // doing this on a PDF/A-1b file fails validation by Adobe preflight (PDFBOX-3821) + // PDF/A-1b requires PDF version 1.4 max, so don't increase the version on such files. + if (doc.getVersion() >= 1.5f && accessPermissions == 0) + { + SigUtils.setMDPPermission(doc, signature, 2); + } + + if (acroForm != null && acroForm.getNeedAppearances()) + { + // PDFBOX-3738 NeedAppearances true results in visible signature becoming invisible + // with Adobe Reader + if (acroForm.getFields().isEmpty()) + { + // we can safely delete it if there are no fields + acroForm.getCOSObject().removeItem(COSName.NEED_APPEARANCES); + // note that if you've set MDP permissions, the removal of this item + // may result in Adobe Reader claiming that the document has been changed. + // and/or that field content won't be displayed properly. + // ==> decide what you prefer and adjust your code accordingly. + } + else + { + System.out.println("/NeedAppearances is set, signature may be ignored by Adobe Reader"); + } + } + + // default filter + signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); + + // subfilter for basic and PAdES Part 2 signatures + signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED); + + signature.setName("Name"); + signature.setLocation("Location"); + signature.setReason("Reason"); + + // the signing date, needed for valid signature + signature.setSignDate(Calendar.getInstance()); + + // do not set SignatureInterface instance, if external signing used + SignatureInterface signatureInterface = isExternalSigning() ? null : this; + + // register signature dictionary and sign interface + signatureOptions = new SignatureOptions(); + signatureOptions.setVisualSignature(createVisualSignatureTemplate(doc, 0, rect, signature)); + signatureOptions.setPage(0); + doc.addSignature(signature, signatureInterface, signatureOptions); + + if (isExternalSigning()) + { + ExternalSigningSupport externalSigning = doc.saveIncrementalForExternalSigning(fos); + // invoke external signature service + byte[] cmsSignature = sign(externalSigning.getContent()); + + // Explanation of late external signing (off by default): + // If you want to add the signature in a separate step, then set an empty byte array + // and call signature.getByteRange() and remember the offset signature.getByteRange()[1]+1. + // you can write the ascii hex signature at a later time even if you don't have this + // PDDocument object anymore, with classic java file random access methods. + // If you can't remember the offset value from ByteRange because your context has changed, + // then open the file with PDFBox, find the field with findExistingSignature() or + // PDDocument.getLastSignatureDictionary() and get the ByteRange from there. + // Close the file and then write the signature as explained earlier in this comment. + if (isLateExternalSigning()) + { + // this saves the file with a 0 signature + externalSigning.setSignature(new byte[0]); + + // remember the offset (add 1 because of "<") + int offset = signature.getByteRange()[1] + 1; + + // now write the signature at the correct offset without any PDFBox methods + try (RandomAccessFile raf = new RandomAccessFile(signedFile, "rw")) + { + raf.seek(offset); + raf.write(Hex.getBytes(cmsSignature)); + } + } + else + { + // set signature bytes received from the service and save the file + externalSigning.setSignature(cmsSignature); + } + } + else + { + // write incremental (only for signing purpose) + doc.saveIncremental(fos); + } + } + + // Do not close signatureOptions before saving, because some COSStream objects within + // are transferred to the signed document. + // Do not allow signatureOptions get out of scope before saving, because then the COSDocument + // in signature options might by closed by gc, which would close COSStream objects prematurely. + // See https://issues.apache.org/jira/browse/PDFBOX-3743 + IOUtils.closeQuietly(signatureOptions); + } + + private PDRectangle createSignatureRectangle(PDDocument doc, Rectangle2D humanRect) + { + float x = (float) humanRect.getX(); + float y = (float) humanRect.getY(); + float width = (float) humanRect.getWidth(); + float height = (float) humanRect.getHeight(); + PDPage page = doc.getPage(0); + PDRectangle pageRect = page.getCropBox(); + PDRectangle rect = new PDRectangle(); + // signing should be at the same position regardless of page rotation. + switch (page.getRotation()) + { + case 90: + rect.setLowerLeftY(x); + rect.setUpperRightY(x + width); + rect.setLowerLeftX(y); + rect.setUpperRightX(y + height); + break; + case 180: + rect.setUpperRightX(pageRect.getWidth() - x); + rect.setLowerLeftX(pageRect.getWidth() - x - width); + rect.setLowerLeftY(y); + rect.setUpperRightY(y + height); + break; + case 270: + rect.setLowerLeftY(pageRect.getHeight() - x - width); + rect.setUpperRightY(pageRect.getHeight() - x); + rect.setLowerLeftX(pageRect.getWidth() - y - height); + rect.setUpperRightX(pageRect.getWidth() - y); + break; + case 0: + default: + rect.setLowerLeftX(x); + rect.setUpperRightX(x + width); + rect.setLowerLeftY(pageRect.getHeight() - y - height); + rect.setUpperRightY(pageRect.getHeight() - y); + break; + } + return rect; + } + + // create a template PDF document with empty signature and return it as a stream. + private InputStream createVisualSignatureTemplate(PDDocument srcDoc, int pageNum, + PDRectangle rect, PDSignature signature) throws IOException + { + try (PDDocument doc = new PDDocument()) + { + PDPage page = new PDPage(srcDoc.getPage(pageNum).getMediaBox()); + doc.addPage(page); + PDAcroForm acroForm = new PDAcroForm(doc); + doc.getDocumentCatalog().setAcroForm(acroForm); + PDSignatureField signatureField = new PDSignatureField(acroForm); + PDAnnotationWidget widget = signatureField.getWidgets().get(0); + List acroFormFields = acroForm.getFields(); + acroForm.setSignaturesExist(true); + acroForm.setAppendOnly(true); + acroForm.getCOSObject().setDirect(true); + acroFormFields.add(signatureField); + + widget.setRectangle(rect); + + // from PDVisualSigBuilder.createHolderForm() + PDStream stream = new PDStream(doc); + PDFormXObject form = new PDFormXObject(stream); + PDResources res = new PDResources(); + form.setResources(res); + form.setFormType(1); + PDRectangle bbox = new PDRectangle(rect.getWidth(), rect.getHeight()); + float height = bbox.getHeight(); + Matrix initialScale = null; + switch (srcDoc.getPage(pageNum).getRotation()) + { + case 90: + form.setMatrix(AffineTransform.getQuadrantRotateInstance(1)); + initialScale = Matrix.getScaleInstance(bbox.getWidth() / bbox.getHeight(), bbox.getHeight() / bbox.getWidth()); + height = bbox.getWidth(); + break; + case 180: + form.setMatrix(AffineTransform.getQuadrantRotateInstance(2)); + break; + case 270: + form.setMatrix(AffineTransform.getQuadrantRotateInstance(3)); + initialScale = Matrix.getScaleInstance(bbox.getWidth() / bbox.getHeight(), bbox.getHeight() / bbox.getWidth()); + height = bbox.getWidth(); + break; + case 0: + default: + break; + } + form.setBBox(bbox); + PDFont font = PDType1Font.HELVETICA_BOLD; + + // from PDVisualSigBuilder.createAppearanceDictionary() + PDAppearanceDictionary appearance = new PDAppearanceDictionary(); + appearance.getCOSObject().setDirect(true); + PDAppearanceStream appearanceStream = new PDAppearanceStream(form.getCOSObject()); + appearance.setNormalAppearance(appearanceStream); + widget.setAppearance(appearance); + + try (PDPageContentStream cs = new PDPageContentStream(doc, appearanceStream)) + { + // for 90° and 270° scale ratio of width / height + // not really sure about this + // why does scale have no effect when done in the form matrix??? + if (initialScale != null) + { + cs.transform(initialScale); + } + + // show background (just for debugging, to see the rect size + position) + cs.setNonStrokingColor(Color.yellow); + cs.addRect(-5000, -5000, 10000, 10000); + cs.fill(); + + // show background image + // save and restore graphics if the image is too large and needs to be scaled + cs.saveGraphicsState(); + cs.transform(Matrix.getScaleInstance(0.25f, 0.25f)); + PDImageXObject img = PDImageXObject.createFromFileByExtension(imageFile, doc); + cs.drawImage(img, 0, 0); + cs.restoreGraphicsState(); + + // show text + float fontSize = 10; + float leading = fontSize * 1.5f; + cs.beginText(); + cs.setFont(font, fontSize); + cs.setNonStrokingColor(Color.black); + cs.newLineAtOffset(fontSize, height - leading); + cs.setLeading(leading); + + X509Certificate cert = (X509Certificate) getCertificateChain()[0]; + + // https://stackoverflow.com/questions/2914521/ + X500Name x500Name = new X500Name(cert.getSubjectX500Principal().getName()); + RDN cn = x500Name.getRDNs(BCStyle.CN)[0]; + String name = IETFUtils.valueToString(cn.getFirst().getValue()); + + // See https://stackoverflow.com/questions/12575990 + // for better date formatting + String date = signature.getSignDate().getTime().toString(); + String reason = signature.getReason(); + + cs.showText("Signer: " + name); + cs.newLine(); + cs.showText(date); + cs.newLine(); + cs.showText("Reason: " + reason); + + cs.endText(); + } + + // no need to set annotations and /P entry + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + doc.save(baos); + return new ByteArrayInputStream(baos.toByteArray()); + } + } + + // Find an existing signature (assumed to be empty). You will usually not need this. + private PDSignature findExistingSignature(PDAcroForm acroForm, String sigFieldName) + { + PDSignature signature = null; + PDSignatureField signatureField; + if (acroForm != null) + { + signatureField = (PDSignatureField) acroForm.getField(sigFieldName); + if (signatureField != null) + { + // retrieve signature dictionary + signature = signatureField.getSignature(); + if (signature == null) + { + signature = new PDSignature(); + // after solving PDFBOX-3524 + // signatureField.setValue(signature) + // until then: + signatureField.getCOSObject().setItem(COSName.V, signature); + } + else + { + throw new IllegalStateException("The signature field " + sigFieldName + " is already signed."); + } + } + } + return signature; + } + + /** + * Arguments are + * [0] key store + * [1] pin + * [2] document that will be signed + * [3] image of visible signature + * + * @param args + * @throws java.security.KeyStoreException + * @throws java.security.cert.CertificateException + * @throws java.io.IOException + * @throws java.security.NoSuchAlgorithmException + * @throws java.security.UnrecoverableKeyException + */ + public static void main(String[] args) throws KeyStoreException, CertificateException, + IOException, NoSuchAlgorithmException, UnrecoverableKeyException + { + // generate with + // keytool -storepass 123456 -storetype PKCS12 -keystore file.p12 -genkey -alias client -keyalg RSA + if (args.length < 4) + { + usage(); + System.exit(1); + } + + String tsaUrl = null; + // External signing is needed if you are using an external signing service, e.g. to sign + // several files at once. + boolean externalSig = false; + for (int i = 0; i < args.length; i++) + { + if ("-tsa".equals(args[i])) + { + i++; + if (i >= args.length) + { + usage(); + System.exit(1); + } + tsaUrl = args[i]; + } + if ("-e".equals(args[i])) + { + externalSig = true; + } + } + + File ksFile = new File(args[0]); + KeyStore keystore = KeyStore.getInstance("PKCS12"); + char[] pin = args[1].toCharArray(); + keystore.load(new FileInputStream(ksFile), pin); + + File documentFile = new File(args[2]); + + CreateVisibleSignature2 signing = new CreateVisibleSignature2(keystore, pin.clone()); + + signing.setImageFile(new File(args[3])); + + File signedDocumentFile; + String name = documentFile.getName(); + String substring = name.substring(0, name.lastIndexOf('.')); + signedDocumentFile = new File(documentFile.getParent(), substring + "_signed.pdf"); + + signing.setExternalSigning(externalSig); + + // Set the signature rectangle + // Although PDF coordinates start from the bottom, humans start from the top. + // So a human would want to position a signature (x,y) units from the + // top left of the displayed page, and the field has a horizontal width and a vertical height + // regardless of page rotation. + Rectangle2D humanRect = new Rectangle2D.Float(100, 200, 150, 50); + + signing.signPDF(documentFile, signedDocumentFile, humanRect, tsaUrl, "Signature1"); + } + + /** + * This will print the usage for this program. + */ + private static void usage() + { + System.err.println("Usage: java " + CreateVisibleSignature2.class.getName() + + " \n" + "" + + "options:\n" + + " -tsa sign timestamp using the given TSA server\n"+ + " -e sign using external signature creation scenario"); + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/ShowSignature.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/ShowSignature.java new file mode 100644 index 00000000000..172dbc3d197 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/ShowSignature.java @@ -0,0 +1,713 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.GeneralSecurityException; +import java.security.InvalidAlgorithmParameterException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateFactory; +import java.security.cert.CertificateNotYetValidException; +import java.security.cert.PKIXParameters; +import java.security.cert.TrustAnchor; +import java.security.cert.X509Certificate; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.examples.signature.cert.CertificateVerificationException; +import org.apache.pdfbox.examples.signature.cert.CertificateVerifier; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream; +import org.apache.pdfbox.pdfparser.PDFParser; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.encryption.SecurityProvider; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Hex; +import org.bouncycastle.asn1.ASN1Object; +import org.bouncycastle.asn1.cms.Attribute; +import org.bouncycastle.asn1.cms.AttributeTable; +import org.bouncycastle.asn1.cms.CMSAttributes; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x509.Time; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cert.jcajce.JcaCertStore; +import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSProcessable; +import org.bouncycastle.cms.CMSProcessableByteArray; +import org.bouncycastle.cms.CMSSignedData; +import org.bouncycastle.cms.SignerInformation; +import org.bouncycastle.cms.SignerInformationVerifier; +import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder; +import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.tsp.TSPException; +import org.bouncycastle.tsp.TimeStampToken; +import org.bouncycastle.util.CollectionStore; +import org.bouncycastle.util.Selector; +import org.bouncycastle.util.Store; + +/** + * This will get the signature(s) from the document, do some verifications and + * show the signature(s) and the certificates. This is a complex topic - the + * code here is an example and not a production-ready solution. + * + * @author Ben Litchfield + */ +public final class ShowSignature +{ + private static final Log LOG = LogFactory.getLog(ShowSignature.class); + + private final SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + + private ShowSignature() + { + } + + /** + * This is the entry point for the application. + * + * @param args The command-line arguments. + * + * @throws IOException If there is an error reading the file. + * @throws org.bouncycastle.tsp.TSPException + * @throws org.apache.pdfbox.examples.signature.cert.CertificateVerificationException + * @throws java.security.GeneralSecurityException + */ + public static void main(String[] args) throws IOException, + TSPException, + CertificateVerificationException, + GeneralSecurityException + { + // register BouncyCastle provider, needed for "exotic" algorithms + Security.addProvider(SecurityProvider.getProvider()); + + ShowSignature show = new ShowSignature(); + show.showSignature( args ); + } + + private void showSignature(String[] args) throws IOException, + GeneralSecurityException, + TSPException, + CertificateVerificationException + { + if( args.length != 2 ) + { + usage(); + } + else + { + String password = args[0]; + File infile = new File(args[1]); + // use old-style document loading to disable leniency + // see also https://www.pdf-insecurity.org/ + RandomAccessBufferedFileInputStream raFile = new RandomAccessBufferedFileInputStream(infile); + PDFParser parser = new PDFParser(raFile, password); + parser.setLenient(false); + parser.parse(); + try (PDDocument document = parser.getPDDocument()) + { + for (PDSignature sig : document.getSignatureDictionaries()) + { + COSDictionary sigDict = sig.getCOSObject(); + COSString contents = (COSString) sigDict.getDictionaryObject(COSName.CONTENTS); + + // download the signed content + byte[] buf; + try (FileInputStream fis = new FileInputStream(infile)) + { + buf = sig.getSignedContent(fis); + } + + System.out.println("Signature found"); + + if (sig.getName() != null) + { + System.out.println("Name: " + sig.getName()); + } + if (sig.getSignDate() != null) + { + System.out.println("Modified: " + sdf.format(sig.getSignDate().getTime())); + } + String subFilter = sig.getSubFilter(); + if (subFilter != null) + { + switch (subFilter) + { + case "adbe.pkcs7.detached": + case "ETSI.CAdES.detached": + verifyPKCS7(buf, contents, sig); + break; + case "adbe.pkcs7.sha1": + { + // example: PDFBOX-1452.pdf + byte[] certData = contents.getBytes(); + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + ByteArrayInputStream certStream = new ByteArrayInputStream(certData); + Collection certs = factory.generateCertificates(certStream); + System.out.println("certs=" + certs); + byte[] hash = MessageDigest.getInstance("SHA1").digest(buf); + verifyPKCS7(hash, contents, sig); + break; + } + case "adbe.x509.rsa_sha1": + { + // example: PDFBOX-2693.pdf + COSString certString = (COSString) sigDict.getDictionaryObject(COSName.CERT); + //TODO this could also be an array. + if (certString == null) + { + System.err.println("The /Cert certificate string is missing in the signature dictionary"); + return; + } + byte[] certData = certString.getBytes(); + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + ByteArrayInputStream certStream = new ByteArrayInputStream(certData); + Collection certs = factory.generateCertificates(certStream); + System.out.println("certs=" + certs); + + X509Certificate cert = (X509Certificate) certs.iterator().next(); + + // to verify signature, see code at + // https://stackoverflow.com/questions/43383859/ + + try + { + if (sig.getSignDate() != null) + { + cert.checkValidity(sig.getSignDate().getTime()); + System.out.println("Certificate valid at signing time"); + } + else + { + System.err.println("Certificate cannot be verified without signing time"); + } + } + catch (CertificateExpiredException ex) + { + System.err.println("Certificate expired at signing time"); + } + catch (CertificateNotYetValidException ex) + { + System.err.println("Certificate not yet valid at signing time"); + } + if (CertificateVerifier.isSelfSigned(cert)) + { + System.err.println("Certificate is self-signed, LOL!"); + } + else + { + System.out.println("Certificate is not self-signed"); + + if (sig.getSignDate() != null) + { + verifyCertificateChain(new JcaCertStore(certs), + cert, + sig.getSignDate().getTime()); + } + } + break; + } + case "ETSI.RFC3161": + // e.g. PDFBOX-1848, file_timestamped.pdf + verifyETSIdotRFC3161(buf, contents); + + // verifyPKCS7(hash, contents, sig) does not work + break; + + default: + System.err.println("Unknown certificate type: " + subFilter); + break; + } + } + else + { + throw new IOException("Missing subfilter for cert dictionary"); + } + + int[] byteRange = sig.getByteRange(); + if (byteRange.length != 4) + { + System.err.println("Signature byteRange must have 4 items"); + } + else + { + long fileLen = infile.length(); + long rangeMax = byteRange[2] + (long) byteRange[3]; + // multiply content length with 2 (because it is in hex in the PDF) and add 2 for < and > + int contentLen = contents.getString().length() * 2 + 2; + if (fileLen != rangeMax || byteRange[0] != 0 || byteRange[1] + contentLen != byteRange[2]) + { + // a false result doesn't necessarily mean that the PDF is a fake + // see this answer why: + // https://stackoverflow.com/a/48185913/535646 + System.out.println("Signature does not cover whole document"); + } + else + { + System.out.println("Signature covers whole document"); + } + checkContentValueWithFile(infile, byteRange, contents); + } + } + analyseDSS(document); + } + catch (CMSException | OperatorCreationException ex) + { + throw new IOException(ex); + } + System.out.println("Analyzed: " + args[1]); + } + } + + private void checkContentValueWithFile(File file, int[] byteRange, COSString contents) throws IOException + { + // https://stackoverflow.com/questions/55049270 + // comment by mkl: check whether gap contains a hex value equal + // byte-by-byte to the Content value, to prevent attacker from using a literal string + // to allow extra space + try (RandomAccessBufferedFileInputStream raf = new RandomAccessBufferedFileInputStream(file)) + { + raf.seek(byteRange[1]); + int c = raf.read(); + if (c != '<') + { + System.err.println("'<' expected at offset " + byteRange[1] + ", but got " + (char) c); + } + byte[] contentFromFile = raf.readFully(byteRange[2] - byteRange[1] - 2); + byte[] contentAsHex = Hex.getString(contents.getBytes()).getBytes(Charsets.US_ASCII); + if (contentFromFile.length != contentAsHex.length) + { + System.err.println("Raw content length from file is " + + contentFromFile.length + + ", but internal content string in hex has length " + + contentAsHex.length); + } + // Compare the two, we can't do byte comparison because of upper/lower case + // also check that it is really hex + for (int i = 0; i < contentFromFile.length; ++i) + { + try + { + if (Integer.parseInt(String.valueOf((char) contentFromFile[i]), 16) != + Integer.parseInt(String.valueOf((char) contentAsHex[i]), 16)) + { + System.err.println("Possible manipulation at file offset " + + (byteRange[1] + i + 1) + " in signature content"); + break; + } + } + catch (NumberFormatException ex) + { + System.err.println("Incorrect hex value"); + System.err.println("Possible manipulation at file offset " + + (byteRange[1] + i + 1) + " in signature content"); + break; + } + } + c = raf.read(); + if (c != '>') + { + System.err.println("'>' expected at offset " + byteRange[2] + ", but got " + (char) c); + } + } + } + + /** + * Verify ETSI.RFC3161 TImeStampToken + * + * @param byteArray the byte sequence that has been signed + * @param contents the /Contents field as a COSString + * @throws CMSException + * @throws NoSuchAlgorithmException + * @throws IOException + * @throws TSPException + * @throws OperatorCreationException + * @throws CertificateVerificationException + * @throws CertificateException + */ + private void verifyETSIdotRFC3161(byte[] buf, COSString contents) + throws CMSException, NoSuchAlgorithmException, IOException, TSPException, + OperatorCreationException, CertificateVerificationException, CertificateException + { + TimeStampToken timeStampToken = new TimeStampToken(new CMSSignedData(contents.getBytes())); + System.out.println("Time stamp gen time: " + timeStampToken.getTimeStampInfo().getGenTime()); + System.out.println("Time stamp tsa name: " + timeStampToken.getTimeStampInfo().getTsa().getName()); + + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + ByteArrayInputStream certStream = new ByteArrayInputStream(contents.getBytes()); + Collection certs = factory.generateCertificates(certStream); + System.out.println("certs=" + certs); + + String hashAlgorithm = timeStampToken.getTimeStampInfo().getMessageImprintAlgOID().getId(); + // compare the hash of the signed content with the hash in + // the timestamp + if (Arrays.equals(MessageDigest.getInstance(hashAlgorithm).digest(buf), + timeStampToken.getTimeStampInfo().getMessageImprintDigest())) + { + System.out.println("ETSI.RFC3161 timestamp signature verified"); + } + else + { + System.err.println("ETSI.RFC3161 timestamp signature verification failed"); + } + + X509Certificate certFromTimeStamp = (X509Certificate) certs.iterator().next(); + SigUtils.checkTimeStampCertificateUsage(certFromTimeStamp); + validateTimestampToken(timeStampToken); + verifyCertificateChain(timeStampToken.getCertificates(), + certFromTimeStamp, + timeStampToken.getTimeStampInfo().getGenTime()); + } + + /** + * Verify a PKCS7 signature. + * + * @param byteArray the byte sequence that has been signed + * @param contents the /Contents field as a COSString + * @param sig the PDF signature (the /V dictionary) + * @throws CMSException + * @throws OperatorCreationException + * @throws GeneralSecurityException + * @throws CertificateVerificationException + */ + private void verifyPKCS7(byte[] byteArray, COSString contents, PDSignature sig) + throws CMSException, OperatorCreationException, + CertificateVerificationException, GeneralSecurityException, + TSPException, IOException + { + // inspiration: + // http://stackoverflow.com/a/26702631/535646 + // http://stackoverflow.com/a/9261365/535646 + CMSProcessable signedContent = new CMSProcessableByteArray(byteArray); + CMSSignedData signedData = new CMSSignedData(signedContent, contents.getBytes()); + Store certificatesStore = signedData.getCertificates(); + if (certificatesStore.getMatches(null).isEmpty()) + { + throw new IOException("No certificates in signature"); + } + Collection signers = signedData.getSignerInfos().getSigners(); + if (signers.isEmpty()) + { + throw new IOException("No signers in signature"); + } + SignerInformation signerInformation = signers.iterator().next(); + @SuppressWarnings("unchecked") + Collection matches = + certificatesStore.getMatches((Selector) signerInformation.getSID()); + if (matches.isEmpty()) + { + throw new IOException("Signer '" + signerInformation.getSID().getIssuer() + + ", serial# " + signerInformation.getSID().getSerialNumber() + + " does not match any certificates"); + } + X509CertificateHolder certificateHolder = matches.iterator().next(); + X509Certificate certFromSignedData = new JcaX509CertificateConverter().getCertificate(certificateHolder); + System.out.println("certFromSignedData: " + certFromSignedData); + + SigUtils.checkCertificateUsage(certFromSignedData); + + // Embedded timestamp + TimeStampToken timeStampToken = extractTimeStampTokenFromSignerInformation(signerInformation); + if (timeStampToken != null) + { + // tested with QV_RCA1_RCA3_CPCPS_V4_11.pdf + // https://www.quovadisglobal.com/~/media/Files/Repository/QV_RCA1_RCA3_CPCPS_V4_11.ashx + // also 021496.pdf and 036351.pdf from digitalcorpora + validateTimestampToken(timeStampToken); + Collection tstMatches = + timeStampToken.getCertificates().getMatches(timeStampToken.getSID()); + X509CertificateHolder tstCertHolder = tstMatches.iterator().next(); + X509Certificate certFromTimeStamp = new JcaX509CertificateConverter().getCertificate(tstCertHolder); + // merge both stores using a set to remove duplicates + HashSet certificateHolderSet = new HashSet<>(); + certificateHolderSet.addAll(certificatesStore.getMatches(null)); + certificateHolderSet.addAll(timeStampToken.getCertificates().getMatches(null)); + verifyCertificateChain(new CollectionStore<>(certificateHolderSet), + certFromTimeStamp, + timeStampToken.getTimeStampInfo().getGenTime()); + SigUtils.checkTimeStampCertificateUsage(certFromTimeStamp); + } + + try + { + if (sig.getSignDate() != null) + { + certFromSignedData.checkValidity(sig.getSignDate().getTime()); + System.out.println("Certificate valid at signing time"); + } + else + { + System.err.println("Certificate cannot be verified without signing time"); + } + } + catch (CertificateExpiredException ex) + { + System.err.println("Certificate expired at signing time"); + } + catch (CertificateNotYetValidException ex) + { + System.err.println("Certificate not yet valid at signing time"); + } + + // usually not available + if (signerInformation.getSignedAttributes() != null) + { + // From SignedMailValidator.getSignatureTime() + Attribute signingTime = signerInformation.getSignedAttributes().get(CMSAttributes.signingTime); + if (signingTime != null) + { + Time timeInstance = Time.getInstance(signingTime.getAttrValues().getObjectAt(0)); + try + { + certFromSignedData.checkValidity(timeInstance.getDate()); + System.out.println("Certificate valid at signing time: " + timeInstance.getDate()); + } + catch (CertificateExpiredException ex) + { + System.err.println("Certificate expired at signing time"); + } + catch (CertificateNotYetValidException ex) + { + System.err.println("Certificate not yet valid at signing time"); + } + } + } + + if (signerInformation.verify(new JcaSimpleSignerInfoVerifierBuilder(). + setProvider(SecurityProvider.getProvider()).build(certFromSignedData))) + { + System.out.println("Signature verified"); + } + else + { + System.out.println("Signature verification failed"); + } + + if (CertificateVerifier.isSelfSigned(certFromSignedData)) + { + System.err.println("Certificate is self-signed, LOL!"); + } + else + { + System.out.println("Certificate is not self-signed"); + + if (sig.getSignDate() != null) + { + verifyCertificateChain(certificatesStore, certFromSignedData, sig.getSignDate().getTime()); + } + else + { + System.err.println("Certificate cannot be verified without signing time"); + } + } + } + + private TimeStampToken extractTimeStampTokenFromSignerInformation(SignerInformation signerInformation) + throws CMSException, IOException, TSPException + { + if (signerInformation.getUnsignedAttributes() == null) + { + return null; + } + AttributeTable unsignedAttributes = signerInformation.getUnsignedAttributes(); + // https://stackoverflow.com/questions/1647759/how-to-validate-if-a-signed-jar-contains-a-timestamp + Attribute attribute = unsignedAttributes.get( + PKCSObjectIdentifiers.id_aa_signatureTimeStampToken); + if (attribute == null) + { + return null; + } + ASN1Object obj = (ASN1Object) attribute.getAttrValues().getObjectAt(0); + CMSSignedData signedTSTData = new CMSSignedData(obj.getEncoded()); + return new TimeStampToken(signedTSTData); + } + + private void verifyCertificateChain(Store certificatesStore, + X509Certificate certFromSignedData, Date signDate) + throws CertificateVerificationException, CertificateException + { + // Verify certificate chain (new since 10/2018) + // Please post bad PDF files that succeed and + // good PDF files that fail in + // https://issues.apache.org/jira/browse/PDFBOX-3017 + Collection certificateHolders = certificatesStore.getMatches(null); + Set additionalCerts = new HashSet<>(); + JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter(); + for (X509CertificateHolder certHolder : certificateHolders) + { + X509Certificate certificate = certificateConverter.getCertificate(certHolder); + if (!certificate.equals(certFromSignedData)) + { + additionalCerts.add(certificate); + } + } + CertificateVerifier.verifyCertificate(certFromSignedData, additionalCerts, true, signDate); + //TODO check whether the root certificate is in our trusted list. + // For the EU, get a list here: + // https://ec.europa.eu/digital-single-market/en/eu-trusted-lists-trust-service-providers + // ( getRootCertificates() is not helpful because these are SSL certificates) + } + + private void validateTimestampToken(TimeStampToken timeStampToken) + throws TSPException, CertificateException, OperatorCreationException, IOException + { + // https://stackoverflow.com/questions/42114742/ + Collection tstMatches = + timeStampToken.getCertificates().getMatches(timeStampToken.getSID()); + X509CertificateHolder holder = tstMatches.iterator().next(); + X509Certificate tstCert = new JcaX509CertificateConverter().getCertificate(holder); + SignerInformationVerifier siv = new JcaSimpleSignerInfoVerifierBuilder().setProvider(SecurityProvider.getProvider()).build(tstCert); + timeStampToken.validate(siv); + System.out.println("TimeStampToken validated"); + } + + // for later use: get all root certificates. Will be used to check + // whether we trust the root in the certificate chain. + private Set getRootCertificates() + throws GeneralSecurityException, IOException + { + Set rootCertificates = new HashSet<>(); + + // https://stackoverflow.com/questions/3508050/ + String filename = System.getProperty("java.home") + "/lib/security/cacerts"; + KeyStore keystore; + try (FileInputStream is = new FileInputStream(filename)) + { + keystore = KeyStore.getInstance(KeyStore.getDefaultType()); + keystore.load(is, null); + } + PKIXParameters params = new PKIXParameters(keystore); + for (TrustAnchor trustAnchor : params.getTrustAnchors()) + { + rootCertificates.add(trustAnchor.getTrustedCert()); + } + + // https://www.oracle.com/technetwork/articles/javase/security-137537.html + try + { + keystore = KeyStore.getInstance("Windows-ROOT"); + keystore.load(null, null); + params = new PKIXParameters(keystore); + for (TrustAnchor trustAnchor : params.getTrustAnchors()) + { + rootCertificates.add(trustAnchor.getTrustedCert()); + } + } + catch (InvalidAlgorithmParameterException | KeyStoreException ex) + { + // empty or not windows + } + + return rootCertificates; + } + + /** + * Analyzes the DSS-Dictionary (Document Security Store) of the document. Which is used for signature validation. + * The DSS is defined in PAdES Part 4 - Long Term Validation. + * + * @param document PDDocument, to get the DSS from + */ + private void analyseDSS(PDDocument document) throws IOException + { + PDDocumentCatalog catalog = document.getDocumentCatalog(); + COSBase dssElement = catalog.getCOSObject().getDictionaryObject("DSS"); + + if (dssElement instanceof COSDictionary) + { + COSDictionary dss = (COSDictionary) dssElement; + System.out.println("DSS Dictionary: " + dss); + COSBase certsElement = dss.getDictionaryObject("Certs"); + if (certsElement instanceof COSArray) + { + printStreamsFromArray((COSArray) certsElement, "Cert"); + } + COSBase ocspsElement = dss.getDictionaryObject("OCSPs"); + if (ocspsElement instanceof COSArray) + { + printStreamsFromArray((COSArray) ocspsElement, "Ocsp"); + } + COSBase crlElement = dss.getDictionaryObject("CRLs"); + if (crlElement instanceof COSArray) + { + printStreamsFromArray((COSArray) crlElement, "CRL"); + } + // TODO: go through VRIs (which indirectly point to the DSS-Data) + } + } + + /** + * Go through the elements of a COSArray containing each an COSStream to print in Hex. + * + * @param elements COSArray of elements containing a COS Stream + * @param description to append on Print + * @throws IOException + */ + private void printStreamsFromArray(COSArray elements, String description) throws IOException + { + for (COSBase baseElem : elements) + { + COSObject streamObj = (COSObject) baseElem; + if (streamObj.getObject() instanceof COSStream) + { + COSStream cosStream = (COSStream) streamObj.getObject(); + try (InputStream is = cosStream.createInputStream()) + { + byte[] streamBytes = IOUtils.toByteArray(is); + System.out.println(description + " (" + elements.indexOf(streamObj) + "): " + + Hex.getString(streamBytes)); + } + } + } + } + + /** + * This will print a usage message. + */ + private static void usage() + { + System.err.println( "usage: java " + ShowSignature.class.getName() + + " " ); + // The password is for encrypted files and has nothing to do with the signature. + // (A PDF can be both encrypted and signed) + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/SigUtils.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/SigUtils.java new file mode 100644 index 00000000000..a2400bf3c4b --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/SigUtils.java @@ -0,0 +1,239 @@ +/* + * Copyright 2017 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature; + +import java.io.IOException; +import java.security.cert.CertificateParsingException; +import java.security.cert.X509Certificate; +import java.util.List; +import java.util.SortedMap; +import java.util.TreeMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.bouncycastle.asn1.x509.KeyPurposeId; + +/** + * Utility class for the signature / timestamp examples. + * + * @author Tilman Hausherr + */ +public class SigUtils +{ + private static final Log LOG = LogFactory.getLog(SigUtils.class); + + private SigUtils() + { + } + + /** + * Get the access permissions granted for this document in the DocMDP transform parameters + * dictionary. Details are described in the table "Entries in the DocMDP transform parameters + * dictionary" in the PDF specification. + * + * @param doc document. + * @return the permission value. 0 means no DocMDP transform parameters dictionary exists. Other + * return values are 1, 2 or 3. 2 is also returned if the DocMDP transform parameters dictionary + * is found but did not contain a /P entry, or if the value is outside the valid range. + */ + public static int getMDPPermission(PDDocument doc) + { + COSBase base = doc.getDocumentCatalog().getCOSObject().getDictionaryObject(COSName.PERMS); + if (base instanceof COSDictionary) + { + COSDictionary permsDict = (COSDictionary) base; + base = permsDict.getDictionaryObject(COSName.DOCMDP); + if (base instanceof COSDictionary) + { + COSDictionary signatureDict = (COSDictionary) base; + base = signatureDict.getDictionaryObject("Reference"); + if (base instanceof COSArray) + { + COSArray refArray = (COSArray) base; + for (int i = 0; i < refArray.size(); ++i) + { + base = refArray.getObject(i); + if (base instanceof COSDictionary) + { + COSDictionary sigRefDict = (COSDictionary) base; + if (COSName.DOCMDP.equals(sigRefDict.getDictionaryObject("TransformMethod"))) + { + base = sigRefDict.getDictionaryObject("TransformParams"); + if (base instanceof COSDictionary) + { + COSDictionary transformDict = (COSDictionary) base; + int accessPermissions = transformDict.getInt(COSName.P, 2); + if (accessPermissions < 1 || accessPermissions > 3) + { + accessPermissions = 2; + } + return accessPermissions; + } + } + } + } + } + } + } + return 0; + } + + /** + * Set the access permissions granted for this document in the DocMDP transform parameters + * dictionary. Details are described in the table "Entries in the DocMDP transform parameters + * dictionary" in the PDF specification. + * + * @param doc The document. + * @param signature The signature object. + * @param accessPermissions The permission value (1, 2 or 3). + */ + static public void setMDPPermission(PDDocument doc, PDSignature signature, int accessPermissions) + { + COSDictionary sigDict = signature.getCOSObject(); + + // DocMDP specific stuff + COSDictionary transformParameters = new COSDictionary(); + transformParameters.setItem(COSName.TYPE, COSName.getPDFName("TransformParams")); + transformParameters.setInt(COSName.P, accessPermissions); + transformParameters.setName(COSName.V, "1.2"); + transformParameters.setNeedToBeUpdated(true); + + COSDictionary referenceDict = new COSDictionary(); + referenceDict.setItem(COSName.TYPE, COSName.getPDFName("SigRef")); + referenceDict.setItem("TransformMethod", COSName.DOCMDP); + referenceDict.setItem("DigestMethod", COSName.getPDFName("SHA1")); + referenceDict.setItem("TransformParams", transformParameters); + referenceDict.setNeedToBeUpdated(true); + + COSArray referenceArray = new COSArray(); + referenceArray.add(referenceDict); + sigDict.setItem("Reference", referenceArray); + referenceArray.setNeedToBeUpdated(true); + + // Catalog + COSDictionary catalogDict = doc.getDocumentCatalog().getCOSObject(); + COSDictionary permsDict = new COSDictionary(); + catalogDict.setItem(COSName.PERMS, permsDict); + permsDict.setItem(COSName.DOCMDP, signature); + catalogDict.setNeedToBeUpdated(true); + permsDict.setNeedToBeUpdated(true); + } + + /** + * Log if the certificate is not valid for signature usage. Doing this + * anyway results in Adobe Reader failing to validate the PDF. + * + * @param x509Certificate + * @throws java.security.cert.CertificateParsingException + */ + public static void checkCertificateUsage(X509Certificate x509Certificate) + throws CertificateParsingException + { + // Check whether signer certificate is "valid for usage" + // https://stackoverflow.com/a/52765021/535646 + // https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSig/changes.html#id1 + boolean[] keyUsage = x509Certificate.getKeyUsage(); + if (keyUsage != null && !keyUsage[0] && !keyUsage[1]) + { + // (unclear what "signTransaction" is) + // https://tools.ietf.org/html/rfc5280#section-4.2.1.3 + LOG.error("Certificate key usage does not include " + + "digitalSignature nor nonRepudiation"); + } + List extendedKeyUsage = x509Certificate.getExtendedKeyUsage(); + if (extendedKeyUsage != null && + !extendedKeyUsage.contains(KeyPurposeId.id_kp_emailProtection.toString()) && + !extendedKeyUsage.contains(KeyPurposeId.id_kp_codeSigning.toString()) && + !extendedKeyUsage.contains(KeyPurposeId.anyExtendedKeyUsage.toString()) && + !extendedKeyUsage.contains("1.2.840.113583.1.1.5") && + // not mentioned in Adobe document, but tolerated in practice + !extendedKeyUsage.contains("1.3.6.1.4.1.311.10.3.12")) + { + LOG.error("Certificate extended key usage does not include " + + "emailProtection, nor codeSigning, nor anyExtendedKeyUsage, " + + "nor 'Adobe Authentic Documents Trust'"); + } + } + + /** + * Log if the certificate is not valid for timestamping. + * + * @param x509Certificate + * @throws java.security.cert.CertificateParsingException + */ + public static void checkTimeStampCertificateUsage(X509Certificate x509Certificate) + throws CertificateParsingException + { + List extendedKeyUsage = x509Certificate.getExtendedKeyUsage(); + // https://tools.ietf.org/html/rfc5280#section-4.2.1.12 + if (extendedKeyUsage != null && + !extendedKeyUsage.contains(KeyPurposeId.id_kp_timeStamping.toString())) + { + LOG.error("Certificate extended key usage does not include timeStamping"); + } + } + + /** + * Log if the certificate is not valid for responding. + * + * @param x509Certificate + * @throws java.security.cert.CertificateParsingException + */ + public static void checkResponderCertificateUsage(X509Certificate x509Certificate) + throws CertificateParsingException + { + List extendedKeyUsage = x509Certificate.getExtendedKeyUsage(); + // https://tools.ietf.org/html/rfc5280#section-4.2.1.12 + if (extendedKeyUsage != null && + !extendedKeyUsage.contains(KeyPurposeId.id_kp_OCSPSigning.toString())) + { + LOG.error("Certificate extended key usage does not include OCSP responding"); + } + } + + /** + * Gets the last relevant signature in the document, i.e. the one with the highest offset. + * + * @param document to get its last signature + * @return last signature or null when none found + * @throws IOException + */ + public static PDSignature getLastRelevantSignature(PDDocument document) throws IOException + { + SortedMap sortedMap = new TreeMap<>(); + for (PDSignature signature : document.getSignatureDictionaries()) + { + int sigOffset = signature.getByteRange()[1]; + sortedMap.put(sigOffset, signature); + } + if (sortedMap.size() > 0) + { + PDSignature lastSignature = sortedMap.get(sortedMap.lastKey()); + COSBase type = lastSignature.getCOSObject().getItem(COSName.TYPE); + if (type.equals(COSName.SIG) || type.equals(COSName.DOC_TIME_STAMP)) + { + return lastSignature; + } + } + return null; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/TSAClient.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/TSAClient.java new file mode 100644 index 00000000000..921e8216c99 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/TSAClient.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.math.BigInteger; +import java.net.URL; +import java.net.URLConnection; +import java.security.MessageDigest; +import java.security.SecureRandom; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.io.IOUtils; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; +import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.tsp.TSPException; +import org.bouncycastle.tsp.TimeStampRequest; +import org.bouncycastle.tsp.TimeStampRequestGenerator; +import org.bouncycastle.tsp.TimeStampResponse; +import org.bouncycastle.tsp.TimeStampToken; + +/** + * Time Stamping Authority (TSA) Client [RFC 3161]. + * @author Vakhtang Koroghlishvili + * @author John Hewson + */ +public class TSAClient +{ + private static final Log LOG = LogFactory.getLog(TSAClient.class); + + private final URL url; + private final String username; + private final String password; + private final MessageDigest digest; + + /** + * + * @param url the URL of the TSA service + * @param username user name of TSA + * @param password password of TSA + * @param digest the message digest to use + */ + public TSAClient(URL url, String username, String password, MessageDigest digest) + { + this.url = url; + this.username = username; + this.password = password; + this.digest = digest; + } + + /** + * + * @param messageImprint imprint of message contents + * @return the encoded time stamp token + * @throws IOException if there was an error with the connection or data from the TSA server, + * or if the time stamp response could not be validated + */ + public byte[] getTimeStampToken(byte[] messageImprint) throws IOException + { + digest.reset(); + byte[] hash = digest.digest(messageImprint); + + // 32-bit cryptographic nonce + SecureRandom random = new SecureRandom(); + int nonce = random.nextInt(); + + // generate TSA request + TimeStampRequestGenerator tsaGenerator = new TimeStampRequestGenerator(); + tsaGenerator.setCertReq(true); + ASN1ObjectIdentifier oid = getHashObjectIdentifier(digest.getAlgorithm()); + TimeStampRequest request = tsaGenerator.generate(oid, hash, BigInteger.valueOf(nonce)); + + // get TSA response + byte[] tsaResponse = getTSAResponse(request.getEncoded()); + + TimeStampResponse response; + try + { + response = new TimeStampResponse(tsaResponse); + response.validate(request); + } + catch (TSPException e) + { + throw new IOException(e); + } + + TimeStampToken token = response.getTimeStampToken(); + if (token == null) + { + throw new IOException("Response does not have a time stamp token"); + } + + return token.getEncoded(); + } + + // gets response data for the given encoded TimeStampRequest data + // throws IOException if a connection to the TSA cannot be established + private byte[] getTSAResponse(byte[] request) throws IOException + { + LOG.debug("Opening connection to TSA server"); + + // todo: support proxy servers + URLConnection connection = url.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setRequestProperty("Content-Type", "application/timestamp-query"); + + LOG.debug("Established connection to TSA server"); + + if (username != null && password != null && !username.isEmpty() && !password.isEmpty()) + { + connection.setRequestProperty(username, password); + } + + // read response + OutputStream output = null; + try + { + output = connection.getOutputStream(); + output.write(request); + } + finally + { + IOUtils.closeQuietly(output); + } + + LOG.debug("Waiting for response from TSA server"); + + InputStream input = null; + byte[] response; + try + { + input = connection.getInputStream(); + response = IOUtils.toByteArray(input); + } + finally + { + IOUtils.closeQuietly(input); + } + + LOG.debug("Received response from TSA server"); + + return response; + } + + // returns the ASN.1 OID of the given hash algorithm + private ASN1ObjectIdentifier getHashObjectIdentifier(String algorithm) + { + switch (algorithm) + { + case "MD2": + return new ASN1ObjectIdentifier(PKCSObjectIdentifiers.md2.getId()); + case "MD5": + return new ASN1ObjectIdentifier(PKCSObjectIdentifiers.md5.getId()); + case "SHA-1": + return new ASN1ObjectIdentifier(OIWObjectIdentifiers.idSHA1.getId()); + case "SHA-224": + return new ASN1ObjectIdentifier(NISTObjectIdentifiers.id_sha224.getId()); + case "SHA-256": + return new ASN1ObjectIdentifier(NISTObjectIdentifiers.id_sha256.getId()); + case "SHA-384": + return new ASN1ObjectIdentifier(NISTObjectIdentifiers.id_sha384.getId()); + case "SHA-512": + return new ASN1ObjectIdentifier(NISTObjectIdentifiers.id_sha512.getId()); + default: + return new ASN1ObjectIdentifier(algorithm); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/ValidationTimeStamp.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/ValidationTimeStamp.java new file mode 100644 index 00000000000..4815a45a2bd --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/ValidationTimeStamp.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.io.IOUtils; +import org.bouncycastle.asn1.ASN1Encodable; +import org.bouncycastle.asn1.ASN1EncodableVector; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DERSet; +import org.bouncycastle.asn1.cms.Attribute; +import org.bouncycastle.asn1.cms.AttributeTable; +import org.bouncycastle.asn1.cms.Attributes; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.cms.CMSSignedData; +import org.bouncycastle.cms.SignerInformation; +import org.bouncycastle.cms.SignerInformationStore; + +/** + * This class wraps the TSAClient and the work that has to be done with it. Like Adding Signed + * TimeStamps to a signature, or creating a CMS timestamp attribute (with a signed timestamp) + * + * @author Others + * @author Alexis Suter + */ +public class ValidationTimeStamp +{ + private TSAClient tsaClient; + + /** + * @param tsaUrl The url where TS-Request will be done. + * @throws NoSuchAlgorithmException + * @throws MalformedURLException + */ + public ValidationTimeStamp(String tsaUrl) throws NoSuchAlgorithmException, MalformedURLException + { + if (tsaUrl != null) + { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + this.tsaClient = new TSAClient(new URL(tsaUrl), null, null, digest); + } + } + + /** + * Creates a signed timestamp token by the given input stream. + * + * @param content InputStream of the content to sign + * @return the byte[] of the timestamp token + * @throws IOException + */ + public byte[] getTimeStampToken(InputStream content) throws IOException + { + return tsaClient.getTimeStampToken(IOUtils.toByteArray(content)); + } + + /** + * Extend cms signed data with TimeStamp first or to all signers + * + * @param signedData Generated CMS signed data + * @return CMSSignedData Extended CMS signed data + * @throws IOException + */ + public CMSSignedData addSignedTimeStamp(CMSSignedData signedData) + throws IOException + { + SignerInformationStore signerStore = signedData.getSignerInfos(); + List newSigners = new ArrayList<>(); + + for (SignerInformation signer : signerStore.getSigners()) + { + // This adds a timestamp to every signer (into his unsigned attributes) in the signature. + newSigners.add(signTimeStamp(signer)); + } + + // Because new SignerInformation is created, new SignerInfoStore has to be created + // and also be replaced in signedData. Which creates a new signedData object. + return CMSSignedData.replaceSigners(signedData, new SignerInformationStore(newSigners)); + } + + /** + * Extend CMS Signer Information with the TimeStampToken into the unsigned Attributes. + * + * @param signer information about signer + * @return information about SignerInformation + * @throws IOException + */ + private SignerInformation signTimeStamp(SignerInformation signer) + throws IOException + { + AttributeTable unsignedAttributes = signer.getUnsignedAttributes(); + + ASN1EncodableVector vector = new ASN1EncodableVector(); + if (unsignedAttributes != null) + { + vector = unsignedAttributes.toASN1EncodableVector(); + } + + byte[] token = tsaClient.getTimeStampToken(signer.getSignature()); + ASN1ObjectIdentifier oid = PKCSObjectIdentifiers.id_aa_signatureTimeStampToken; + ASN1Encodable signatureTimeStamp = new Attribute(oid, + new DERSet(ASN1Primitive.fromByteArray(token))); + + vector.add(signatureTimeStamp); + Attributes signedAttributes = new Attributes(vector); + + // There is no other way changing the unsigned attributes of the signer information. + // result is never null, new SignerInformation always returned, + // see source code of replaceUnsignedAttributes + return SignerInformation.replaceUnsignedAttributes(signer, new AttributeTable(signedAttributes)); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CRLVerifier.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CRLVerifier.java new file mode 100644 index 00000000000..58e11eb53d0 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CRLVerifier.java @@ -0,0 +1,327 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.pdfbox.examples.signature.cert; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.security.GeneralSecurityException; +import java.security.cert.CRLException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509CRL; +import java.security.cert.X509CRLEntry; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; + +import javax.naming.Context; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.encryption.SecurityProvider; + +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.DERIA5String; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.x509.CRLDistPoint; +import org.bouncycastle.asn1.x509.DistributionPoint; +import org.bouncycastle.asn1.x509.DistributionPointName; +import org.bouncycastle.asn1.x509.Extension; +import org.bouncycastle.asn1.x509.GeneralName; +import org.bouncycastle.asn1.x509.GeneralNames; + +/** + * Copied from Apache CXF 2.4.9, initial version: + * https://svn.apache.org/repos/asf/cxf/tags/cxf-2.4.9/distribution/src/main/release/samples/sts_issue_operation/src/main/java/demo/sts/provider/cert/ + * + */ +public final class CRLVerifier +{ + private static final Log LOG = LogFactory.getLog(CRLVerifier.class); + + private CRLVerifier() + { + } + + /** + * Extracts the CRL distribution points from the certificate (if available) + * and checks the certificate revocation status against the CRLs coming from + * the distribution points. Supports HTTP, HTTPS, FTP and LDAP based URLs. + * + * @param cert the certificate to be checked for revocation + * @param signDate the date when the signing took place + * @param additionalCerts set of trusted root CA certificates that will be + * used as "trust anchors" and intermediate CA certificates that will be + * used as part of the certification chain. + * @throws CertificateVerificationException if the certificate could not be verified + * @throws RevokedCertificateException if the certificate is revoked + */ + @SuppressWarnings({"squid:S1141"}) // nested exception needed to try several distribution points + public static void verifyCertificateCRLs(X509Certificate cert, Date signDate, + Set additionalCerts) + throws CertificateVerificationException, RevokedCertificateException + { + try + { + Date now = Calendar.getInstance().getTime(); + Exception firstException = null; + List crlDistributionPointsURLs = getCrlDistributionPoints(cert); + for (String crlDistributionPointsURL : crlDistributionPointsURLs) + { + LOG.info("Checking distribution point URL: " + crlDistributionPointsURL); + + X509CRL crl; + try + { + crl = downloadCRL(crlDistributionPointsURL); + } + catch (IOException | GeneralSecurityException | CertificateVerificationException | NamingException ex) + { + // e.g. LDAP behind corporate proxy + // but couldn't get LDAP to work at all, see e.g. file from PDFBOX-1452 + LOG.warn("Caught " + ex.getClass().getSimpleName() + " downloading CRL, will try next distribution point if available"); + if (firstException == null) + { + firstException = ex; + } + continue; + } + + Set mergedCertSet = CertificateVerifier.downloadExtraCertificates(crl); + mergedCertSet.addAll(additionalCerts); + + // Verify CRL, see wikipedia: + // "To validate a specific CRL prior to relying on it, + // the certificate of its corresponding CA is needed" + X509Certificate crlIssuerCert = null; + for (X509Certificate possibleCert : mergedCertSet) + { + if (crl.getIssuerX500Principal().equals(possibleCert.getSubjectX500Principal())) + { + crlIssuerCert = possibleCert; + break; + } + } + if (crlIssuerCert == null) + { + throw new CertificateVerificationException( + "Certificate for " + crl.getIssuerX500Principal() + + "not found in certificate chain, so the CRL at " + + crlDistributionPointsURL + " could not be verified"); + } + crl.verify(crlIssuerCert.getPublicKey(), SecurityProvider.getProvider().getName()); + + if (!crl.getIssuerX500Principal().equals(cert.getIssuerX500Principal())) + { + LOG.info("CRL issuer certificate is not identical to cert issuer, check needed"); + CertificateVerifier.verifyCertificate(crlIssuerCert, mergedCertSet, true, now); + LOG.info("CRL issuer certificate checked successfully"); + } + else + { + LOG.info("CRL issuer certificate is identical to cert issuer, no extra check needed"); + } + + checkRevocation(crl, cert, signDate, crlDistributionPointsURL); + + // https://tools.ietf.org/html/rfc5280#section-4.2.1.13 + // If the DistributionPointName contains multiple values, + // each name describes a different mechanism to obtain the same + // CRL. For example, the same CRL could be available for + // retrieval through both LDAP and HTTP. + // + // => thus no need to check several protocols + return; + } + if (firstException != null) + { + throw firstException; + } + } + catch (RevokedCertificateException | CertificateVerificationException ex) + { + throw ex; + } + catch (Exception ex) + { + throw new CertificateVerificationException( + "Cannot verify CRL for certificate: " + + cert.getSubjectX500Principal(), ex); + + } + } + + /** + * Check whether the certificate was revoked at signing time. + * + * @param crl certificate revocation list + * @param cert certificate to be checked + * @param signDate date the certificate was used for signing + * @param crlDistributionPointsURL URL for log message or exception text + * @throws RevokedCertificateException if the certificate was revoked at signing time + */ + public static void checkRevocation( + X509CRL crl, X509Certificate cert, Date signDate, String crlDistributionPointsURL) + throws RevokedCertificateException + { + X509CRLEntry revokedCRLEntry = crl.getRevokedCertificate(cert); + if (revokedCRLEntry != null && + revokedCRLEntry.getRevocationDate().compareTo(signDate) <= 0) + { + throw new RevokedCertificateException( + "The certificate was revoked by CRL " + + crlDistributionPointsURL + " on " + revokedCRLEntry.getRevocationDate(), + revokedCRLEntry.getRevocationDate()); + } + else if (revokedCRLEntry != null) + { + LOG.info("The certificate was revoked after signing by CRL " + + crlDistributionPointsURL + " on " + revokedCRLEntry.getRevocationDate()); + } + else + { + LOG.info("The certificate was not revoked by CRL " + crlDistributionPointsURL); + } + } + + /** + * Downloads CRL from given URL. Supports http, https, ftp and ldap based URLs. + */ + private static X509CRL downloadCRL(String crlURL) throws IOException, + CertificateException, CRLException, + CertificateVerificationException, NamingException + { + if (crlURL.startsWith("http://") || crlURL.startsWith("https://") + || crlURL.startsWith("ftp://")) + { + return downloadCRLFromWeb(crlURL); + } + else if (crlURL.startsWith("ldap://")) + { + return downloadCRLFromLDAP(crlURL); + } + else + { + throw new CertificateVerificationException( + "Can not download CRL from certificate " + + "distribution point: " + crlURL); + } + } + + /** + * Downloads a CRL from given LDAP url, e.g. + * ldap://ldap.infonotary.com/dc=identity-ca,dc=infonotary,dc=com + */ + private static X509CRL downloadCRLFromLDAP(String ldapURL) throws CertificateException, + NamingException, CRLException, + CertificateVerificationException + { + Hashtable env = new Hashtable<>(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); + env.put(Context.PROVIDER_URL, ldapURL); + + // https://docs.oracle.com/javase/jndi/tutorial/ldap/connect/create.html + // don't wait forever behind corporate proxy + env.put("com.sun.jndi.ldap.connect.timeout", "1000"); + + DirContext ctx = new InitialDirContext(env); + Attributes avals = ctx.getAttributes(""); + Attribute aval = avals.get("certificateRevocationList;binary"); + byte[] val = (byte[]) aval.get(); + if (val == null || val.length == 0) + { + throw new CertificateVerificationException("Can not download CRL from: " + ldapURL); + } + else + { + InputStream inStream = new ByteArrayInputStream(val); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + return (X509CRL) cf.generateCRL(inStream); + } + } + + /** + * Downloads a CRL from given HTTP/HTTPS/FTP URL, e.g. + * http://crl.infonotary.com/crl/identity-ca.crl + */ + public static X509CRL downloadCRLFromWeb(String crlURL) + throws IOException, CertificateException, CRLException + { + try (InputStream crlStream = new URL(crlURL).openStream()) + { + return (X509CRL) CertificateFactory.getInstance("X.509").generateCRL(crlStream); + } + } + + /** + * Extracts all CRL distribution point URLs from the "CRL Distribution + * Point" extension in a X.509 certificate. If CRL distribution point + * extension is unavailable, returns an empty list. + * @param cert + * @return List of CRL distribution point URLs. + * @throws java.io.IOException + */ + public static List getCrlDistributionPoints(X509Certificate cert) + throws IOException + { + byte[] crldpExt = cert.getExtensionValue(Extension.cRLDistributionPoints.getId()); + if (crldpExt == null) + { + return new ArrayList<>(); + } + ASN1InputStream oAsnInStream = new ASN1InputStream(new ByteArrayInputStream(crldpExt)); + ASN1Primitive derObjCrlDP = oAsnInStream.readObject(); + DEROctetString dosCrlDP = (DEROctetString) derObjCrlDP; + byte[] crldpExtOctets = dosCrlDP.getOctets(); + ASN1InputStream oAsnInStream2 = new ASN1InputStream(new ByteArrayInputStream(crldpExtOctets)); + ASN1Primitive derObj2 = oAsnInStream2.readObject(); + CRLDistPoint distPoint = CRLDistPoint.getInstance(derObj2); + List crlUrls = new ArrayList<>(); + for (DistributionPoint dp : distPoint.getDistributionPoints()) + { + DistributionPointName dpn = dp.getDistributionPoint(); + // Look for URIs in fullName + if (dpn != null && dpn.getType() == DistributionPointName.FULL_NAME) + { + // Look for an URI + for (GeneralName genName : GeneralNames.getInstance(dpn.getName()).getNames()) + { + if (genName.getTagNo() == GeneralName.uniformResourceIdentifier) + { + String url = DERIA5String.getInstance(genName.getName()).getString(); + crlUrls.add(url); + } + } + } + } + return crlUrls; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerificationException.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerificationException.java new file mode 100644 index 00000000000..362cd7b521b --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerificationException.java @@ -0,0 +1,40 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.pdfbox.examples.signature.cert; + +/** + * Copied from Apache CXF 2.4.9, initial version: + * https://svn.apache.org/repos/asf/cxf/tags/cxf-2.4.9/distribution/src/main/release/samples/sts_issue_operation/src/main/java/demo/sts/provider/cert/ + * + */ +public class CertificateVerificationException extends Exception +{ + private static final long serialVersionUID = 1L; + + public CertificateVerificationException(String message, Throwable cause) + { + super(message, cause); + } + + public CertificateVerificationException(String message) + { + super(message); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerificationResult.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerificationResult.java new file mode 100644 index 00000000000..61f7a503fbb --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerificationResult.java @@ -0,0 +1,65 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.pdfbox.examples.signature.cert; + +import java.security.cert.PKIXCertPathBuilderResult; + +/** + * Copied from Apache CXF 2.4.9, initial version: + * https://svn.apache.org/repos/asf/cxf/tags/cxf-2.4.9/distribution/src/main/release/samples/sts_issue_operation/src/main/java/demo/sts/provider/cert/ + * + */ +public class CertificateVerificationResult +{ + private boolean valid; + private PKIXCertPathBuilderResult result; + private Throwable exception; + + /** + * Constructs a certificate verification result for valid certificate by + * given certification path. + */ + public CertificateVerificationResult(PKIXCertPathBuilderResult result) + { + this.valid = true; + this.result = result; + } + + public CertificateVerificationResult(Throwable exception) + { + this.valid = false; + this.exception = exception; + } + + public boolean isValid() + { + return valid; + } + + public PKIXCertPathBuilderResult getResult() + { + return result; + } + + public Throwable getException() + { + return exception; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerifier.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerifier.java new file mode 100644 index 00000000000..38e2875dbb1 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/CertificateVerifier.java @@ -0,0 +1,472 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.pdfbox.examples.signature.cert; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.PublicKey; +import java.security.SignatureException; +import java.security.cert.CertPathBuilder; +import java.security.cert.CertPathBuilderException; +import java.security.cert.CertStore; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.CollectionCertStoreParameters; +import java.security.cert.PKIXBuilderParameters; +import java.security.cert.PKIXCertPathBuilderResult; +import java.security.cert.TrustAnchor; +import java.security.cert.X509CertSelector; +import java.security.cert.X509Certificate; +import java.security.cert.X509Extension; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.encryption.SecurityProvider; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +import org.bouncycastle.asn1.x509.Extension; +import org.bouncycastle.asn1.x509.GeneralName; +import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; +import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils; +import org.bouncycastle.cert.ocsp.BasicOCSPResp; +import org.bouncycastle.cert.ocsp.OCSPException; +import org.bouncycastle.cert.ocsp.OCSPResp; + +/** + * Copied from Apache CXF 2.4.9, initial version: + * https://svn.apache.org/repos/asf/cxf/tags/cxf-2.4.9/distribution/src/main/release/samples/sts_issue_operation/src/main/java/demo/sts/provider/cert/ + * + */ +public final class CertificateVerifier +{ + private static final Log LOG = LogFactory.getLog(CertificateVerifier.class); + + private CertificateVerifier() + { + + } + + /** + * Attempts to build a certification chain for given certificate and to + * verify it. Relies on a set of root CA certificates and intermediate + * certificates that will be used for building the certification chain. The + * verification process assumes that all self-signed certificates in the set + * are trusted root CA certificates and all other certificates in the set + * are intermediate certificates. + * + * @param cert - certificate for validation + * @param additionalCerts - set of trusted root CA certificates that will be + * used as "trust anchors" and intermediate CA certificates that will be + * used as part of the certification chain. All self-signed certificates are + * considered to be trusted root CA certificates. All the rest are + * considered to be intermediate CA certificates. + * @param verifySelfSignedCert true if a self-signed certificate is accepted, false if not. + * @param signDate the date when the signing took place + * @return the certification chain (if verification is successful) + * @throws CertificateVerificationException - if the certification is not + * successful (e.g. certification path cannot be built or some certificate + * in the chain is expired or CRL checks are failed) + */ + public static PKIXCertPathBuilderResult verifyCertificate( + X509Certificate cert, Set additionalCerts, + boolean verifySelfSignedCert, Date signDate) + throws CertificateVerificationException + { + try + { + // Check for self-signed certificate + if (!verifySelfSignedCert && isSelfSigned(cert)) + { + throw new CertificateVerificationException("The certificate is self-signed."); + } + + Set certSet = CertificateVerifier.downloadExtraCertificates(cert); + int downloadSize = certSet.size(); + certSet.addAll(additionalCerts); + if (downloadSize > 0) + { + LOG.info("CA issuers: " + (certSet.size() - additionalCerts.size()) + " downloaded certificate(s) are new"); + } + + // Prepare a set of trust anchors (set of root CA certificates) + // and a set of intermediate certificates + Set intermediateCerts = new HashSet<>(); + Set trustAnchors = new HashSet<>(); + for (X509Certificate additionalCert : certSet) + { + if (isSelfSigned(additionalCert)) + { + trustAnchors.add(new TrustAnchor(additionalCert, null)); + } + else + { + intermediateCerts.add(additionalCert); + } + } + + if (trustAnchors.isEmpty()) + { + throw new CertificateVerificationException("No root certificate in the chain"); + } + + // Attempt to build the certification chain and verify it + PKIXCertPathBuilderResult verifiedCertChain = verifyCertificate( + cert, trustAnchors, intermediateCerts, signDate); + + LOG.info("Certification chain verified successfully"); + + checkRevocations(cert, certSet, signDate); + + return verifiedCertChain; + } + catch (CertPathBuilderException certPathEx) + { + throw new CertificateVerificationException( + "Error building certification path: " + + cert.getSubjectX500Principal(), certPathEx); + } + catch (CertificateVerificationException cvex) + { + throw cvex; + } + catch (IOException | GeneralSecurityException | RevokedCertificateException | OCSPException ex) + { + throw new CertificateVerificationException( + "Error verifying the certificate: " + + cert.getSubjectX500Principal(), ex); + } + } + + private static void checkRevocations(X509Certificate cert, + Set additionalCerts, + Date signDate) + throws IOException, CertificateVerificationException, OCSPException, + RevokedCertificateException, GeneralSecurityException + { + if (isSelfSigned(cert)) + { + // root, we're done + return; + } + X509Certificate issuerCert = null; + for (X509Certificate additionalCert : additionalCerts) + { + if (cert.getIssuerX500Principal().equals(additionalCert.getSubjectX500Principal())) + { + issuerCert = additionalCert; + break; + } + } + // issuerCert is never null here. If it hadn't been found, then there wouldn't be a + // verifiedCertChain earlier. + + // Try checking the certificate through OCSP (faster than CRL) + String ocspURL = extractOCSPURL(cert); + if (ocspURL != null) + { + OcspHelper ocspHelper = new OcspHelper(cert, signDate, issuerCert, additionalCerts, ocspURL); + try + { + verifyOCSP(ocspHelper, additionalCerts); + } + catch (IOException ex) + { + // happens with 021496.pdf because OCSP responder no longer exists + LOG.warn("IOException trying OCSP, will try CRL", ex); + CRLVerifier.verifyCertificateCRLs(cert, signDate, additionalCerts); + } + } + else + { + LOG.info("OCSP not available, will try CRL"); + + // Check whether the certificate is revoked by the CRL + // given in its CRL distribution point extension + CRLVerifier.verifyCertificateCRLs(cert, signDate, additionalCerts); + } + + // now check the issuer + checkRevocations(issuerCert, additionalCerts, signDate); + } + + /** + * Checks whether given X.509 certificate is self-signed. + * @param cert The X.509 certificate to check. + * @return true if the certificate is self-signed, false if not. + * @throws java.security.GeneralSecurityException + */ + public static boolean isSelfSigned(X509Certificate cert) throws GeneralSecurityException + { + try + { + // Try to verify certificate signature with its own public key + PublicKey key = cert.getPublicKey(); + cert.verify(key, SecurityProvider.getProvider().getName()); + return true; + } + catch (SignatureException | InvalidKeyException | IOException ex) + { + // Invalid signature --> not self-signed + LOG.debug("Couldn't get signature information - returning false", ex); + return false; + } + } + + /** + * Download extra certificates from the URI mentioned in id-ad-caIssuers in the "authority + * information access" extension. The method is lenient, i.e. catches all exceptions. + * + * @param ext an X509 object that can have extensions. + * + * @return a certificate set, never null. + */ + public static Set downloadExtraCertificates(X509Extension ext) + { + // https://tools.ietf.org/html/rfc2459#section-4.2.2.1 + // https://tools.ietf.org/html/rfc3280#section-4.2.2.1 + // https://tools.ietf.org/html/rfc4325 + Set resultSet = new HashSet<>(); + byte[] authorityExtensionValue = ext.getExtensionValue(Extension.authorityInfoAccess.getId()); + if (authorityExtensionValue == null) + { + return resultSet; + } + ASN1Primitive asn1Prim; + try + { + asn1Prim = JcaX509ExtensionUtils.parseExtensionValue(authorityExtensionValue); + } + catch (IOException ex) + { + LOG.warn(ex.getMessage(), ex); + return resultSet; + } + if (!(asn1Prim instanceof ASN1Sequence)) + { + LOG.warn("ASN1Sequence expected, got " + asn1Prim.getClass().getSimpleName()); + return resultSet; + } + ASN1Sequence asn1Seq = (ASN1Sequence) asn1Prim; + Enumeration objects = asn1Seq.getObjects(); + while (objects.hasMoreElements()) + { + // AccessDescription + ASN1Sequence obj = (ASN1Sequence) objects.nextElement(); + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) obj.getObjectAt(0); + if (!oid.equals(X509ObjectIdentifiers.id_ad_caIssuers)) + { + continue; + } + DERTaggedObject location = (DERTaggedObject) obj.getObjectAt(1); + DEROctetString uri = (DEROctetString) location.getObject(); + InputStream in = null; + try + { + String urlString = new String(uri.getOctets()); + LOG.info("CA issuers URL: " + urlString); + in = new URL(urlString).openStream(); + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + Collection altCerts = certFactory.generateCertificates(in); + for (Certificate altCert : altCerts) + { + resultSet.add((X509Certificate) altCert); + } + LOG.info("CA issuers URL: " + altCerts.size() + " certificate(s) downloaded"); + } + catch (IOException | CertificateException ex) + { + LOG.warn(ex.getMessage(), ex); + } + finally + { + IOUtils.closeQuietly(in); + } + } + LOG.info("CA issuers: Downloaded " + resultSet.size() + " certificate(s) total"); + return resultSet; + } + + /** + * Attempts to build a certification chain for given certificate and to + * verify it. Relies on a set of root CA certificates (trust anchors) and a + * set of intermediate certificates (to be used as part of the chain). + * + * @param cert - certificate for validation + * @param trustAnchors - set of trust anchors + * @param intermediateCerts - set of intermediate certificates + * @param signDate the date when the signing took place + * @return the certification chain (if verification is successful) + * @throws GeneralSecurityException - if the verification is not successful + * (e.g. certification path cannot be built or some certificate in the chain + * is expired) + */ + private static PKIXCertPathBuilderResult verifyCertificate( + X509Certificate cert, Set trustAnchors, + Set intermediateCerts, Date signDate) + throws GeneralSecurityException + { + // Create the selector that specifies the starting certificate + X509CertSelector selector = new X509CertSelector(); + selector.setCertificate(cert); + + // Configure the PKIX certificate builder algorithm parameters + PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(trustAnchors, selector); + + // Disable CRL checks (this is done manually as additional step) + pkixParams.setRevocationEnabled(false); + + // not doing this brings + // "SunCertPathBuilderException: unable to find valid certification path to requested target" + // (when using -Djava.security.debug=certpath: "critical policy qualifiers present in certificate") + // for files like 021496.pdf that have the "Adobe CDS Certificate Policy" 1.2.840.113583.1.2.1 + // CDS = "Certified Document Services" + // https://www.adobe.com/misc/pdfs/Adobe_CDS_CP.pdf + pkixParams.setPolicyQualifiersRejected(false); + // However, maybe there is still work to do: + // "If the policyQualifiersRejected flag is set to false, it is up to the application + // to validate all policy qualifiers in this manner in order to be PKIX compliant." + + pkixParams.setDate(signDate); + + // Specify a list of intermediate certificates + CertStore intermediateCertStore = CertStore.getInstance("Collection", + new CollectionCertStoreParameters(intermediateCerts)); + pkixParams.addCertStore(intermediateCertStore); + + // Build and verify the certification chain + // If this doesn't work although it should, it can be debugged + // by starting java with -Djava.security.debug=certpath + // see also + // https://docs.oracle.com/javase/8/docs/technotes/guides/security/troubleshooting-security.html + CertPathBuilder builder = CertPathBuilder.getInstance("PKIX"); + return (PKIXCertPathBuilderResult) builder.build(pkixParams); + } + + /** + * Extract the OCSP URL from an X.509 certificate if available. + * + * @param cert X.509 certificate + * @return the URL of the OCSP validation service + * @throws IOException + */ + private static String extractOCSPURL(X509Certificate cert) throws IOException + { + byte[] authorityExtensionValue = cert.getExtensionValue(Extension.authorityInfoAccess.getId()); + if (authorityExtensionValue != null) + { + // copied from CertInformationHelper.getAuthorityInfoExtensionValue() + // DRY refactor should be done some day + ASN1Sequence asn1Seq = (ASN1Sequence) JcaX509ExtensionUtils.parseExtensionValue(authorityExtensionValue); + Enumeration objects = asn1Seq.getObjects(); + while (objects.hasMoreElements()) + { + // AccessDescription + ASN1Sequence obj = (ASN1Sequence) objects.nextElement(); + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) obj.getObjectAt(0); + // accessLocation + DERTaggedObject location = (DERTaggedObject) obj.getObjectAt(1); + if (oid.equals(X509ObjectIdentifiers.id_ad_ocsp) + && location.getTagNo() == GeneralName.uniformResourceIdentifier) + { + DEROctetString url = (DEROctetString) location.getObject(); + String ocspURL = new String(url.getOctets()); + LOG.info("OCSP URL: " + ocspURL); + return ocspURL; + } + } + } + return null; + } + + /** + * Verify whether the certificate has been revoked at signing date, and verify whether + * the certificate of the responder has been revoked now. + * + * @param ocspHelper the OCSP helper. + * @param additionalCerts + * @throws RevokedCertificateException + * @throws IOException + * @throws OCSPException + * @throws CertificateVerificationException + */ + private static void verifyOCSP(OcspHelper ocspHelper, Set additionalCerts) + throws RevokedCertificateException, IOException, OCSPException, CertificateVerificationException + { + Date now = Calendar.getInstance().getTime(); + OCSPResp ocspResponse; + ocspResponse = ocspHelper.getResponseOcsp(); + if (ocspResponse.getStatus() != OCSPResp.SUCCESSFUL) + { + throw new CertificateVerificationException("OCSP check not successful, status: " + + ocspResponse.getStatus()); + } + LOG.info("OCSP check successful"); + + BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResponse.getResponseObject(); + X509Certificate ocspResponderCertificate = ocspHelper.getOcspResponderCertificate(); + if (ocspResponderCertificate.getExtensionValue(OCSPObjectIdentifiers.id_pkix_ocsp_nocheck.getId()) != null) + { + // https://tools.ietf.org/html/rfc6960#section-4.2.2.2.1 + // A CA may specify that an OCSP client can trust a responder for the + // lifetime of the responder's certificate. The CA does so by + // including the extension id-pkix-ocsp-nocheck. + LOG.info("Revocation check of OCSP responder certificate skipped (id-pkix-ocsp-nocheck is set)"); + return; + } + + LOG.info("Check of OCSP responder certificate"); + Set additionalCerts2 = new HashSet<>(additionalCerts); + JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter(); + for (X509CertificateHolder certHolder : basicResponse.getCerts()) + { + try + { + X509Certificate cert = certificateConverter.getCertificate(certHolder); + if (!ocspResponderCertificate.equals(cert)) + { + additionalCerts2.add(cert); + } + } + catch (CertificateException ex) + { + // unlikely to happen because the certificate existed as an object + LOG.error(ex, ex); + } + } + CertificateVerifier.verifyCertificate(ocspResponderCertificate, additionalCerts2, true, now); + LOG.info("Check of OCSP responder certificate done"); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/OcspHelper.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/OcspHelper.java new file mode 100644 index 00000000000..fe30a71223c --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/OcspHelper.java @@ -0,0 +1,604 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature.cert; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateParsingException; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.Random; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.examples.signature.SigUtils; +import org.apache.pdfbox.pdmodel.encryption.SecurityProvider; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DLSequence; +import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +import org.bouncycastle.asn1.ocsp.OCSPResponseStatus; +import org.bouncycastle.asn1.ocsp.ResponderID; +import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; +import org.bouncycastle.asn1.x500.X500Name; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import org.bouncycastle.asn1.x509.Extension; +import org.bouncycastle.asn1.x509.Extensions; +import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; +import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder; +import org.bouncycastle.cert.ocsp.BasicOCSPResp; +import org.bouncycastle.cert.ocsp.CertificateID; +import org.bouncycastle.cert.ocsp.CertificateStatus; +import org.bouncycastle.cert.ocsp.OCSPException; +import org.bouncycastle.cert.ocsp.OCSPReq; +import org.bouncycastle.cert.ocsp.OCSPReqBuilder; +import org.bouncycastle.cert.ocsp.OCSPResp; +import org.bouncycastle.cert.ocsp.RevokedStatus; +import org.bouncycastle.cert.ocsp.SingleResp; +import org.bouncycastle.operator.ContentVerifierProvider; +import org.bouncycastle.operator.DigestCalculator; +import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder; + +/** + * Helper Class for OCSP-Operations with bouncy castle. + * + * @author Alexis Suter + */ +public class OcspHelper +{ + private static final Log LOG = LogFactory.getLog(OcspHelper.class); + + private final X509Certificate issuerCertificate; + private final Date signDate; + private final X509Certificate certificateToCheck; + private final Set additionalCerts; + private final String ocspUrl; + private DEROctetString encodedNonce; + private X509Certificate ocspResponderCertificate; + private final JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter(); + + /** + * @param checkCertificate Certificate to be OCSP-checked + * @param signDate the date when the signing took place + * @param issuerCertificate Certificate of the issuer + * @param additionalCerts Set of trusted root CA certificates that will be used as "trust + * anchors" and intermediate CA certificates that will be used as part of the certification + * chain. All self-signed certificates are considered to be trusted root CA certificates. All + * the rest are considered to be intermediate CA certificates. + * @param ocspUrl where to fetch for OCSP + */ + public OcspHelper(X509Certificate checkCertificate, Date signDate, X509Certificate issuerCertificate, + Set additionalCerts, String ocspUrl) + { + this.certificateToCheck = checkCertificate; + this.signDate = signDate; + this.issuerCertificate = issuerCertificate; + this.additionalCerts = additionalCerts; + this.ocspUrl = ocspUrl; + } + + /** + * Performs and verifies the OCSP-Request + * + * @return the OCSPResp, when the request was successful, else a corresponding exception will be + * thrown. Never returns null. + * + * @throws IOException + * @throws OCSPException + * @throws RevokedCertificateException + */ + public OCSPResp getResponseOcsp() throws IOException, OCSPException, RevokedCertificateException + { + OCSPResp ocspResponse = performRequest(); + verifyOcspResponse(ocspResponse); + return ocspResponse; + } + + /** + * Get responder certificate. This is available after {@link #getResponseOcsp()} has been + * called. This method should be used instead of {@code basicResponse.getCerts()[0]} + * + * @return The certificate of the responder. + */ + public X509Certificate getOcspResponderCertificate() + { + return ocspResponderCertificate; + } + + /** + * Verifies the status and the response itself (including nonce), but not the signature. + * + * @param ocspResponse to be verified + * @throws OCSPException + * @throws RevokedCertificateException + * @throws IOException if the default security provider can't be instantiated + */ + private void verifyOcspResponse(OCSPResp ocspResponse) + throws OCSPException, RevokedCertificateException, IOException + { + verifyRespStatus(ocspResponse); + + BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResponse.getResponseObject(); + if (basicResponse != null) + { + ResponderID responderID = basicResponse.getResponderId().toASN1Primitive(); + // https://tools.ietf.org/html/rfc6960#section-4.2.2.3 + // The basic response type contains: + // (...) + // either the name of the responder or a hash of the responder's + // public key as the ResponderID + // (...) + // The responder MAY include certificates in the certs field of + // BasicOCSPResponse that help the OCSP client verify the responder's + // signature. + X500Name name = responderID.getName(); + if (name != null) + { + findResponderCertificateByName(basicResponse, name); + } + else + { + byte[] keyHash = responderID.getKeyHash(); + if (keyHash != null) + { + findResponderCertificateByKeyHash(basicResponse, keyHash); + } + else + { + throw new OCSPException("OCSP: basic response must provide name or key hash"); + } + } + + if (ocspResponderCertificate == null) + { + throw new OCSPException("OCSP: certificate for responder " + name + " not found"); + } + + try + { + SigUtils.checkResponderCertificateUsage(ocspResponderCertificate); + } + catch (CertificateParsingException ex) + { + // unlikely to happen because the certificate existed as an object + LOG.error(ex, ex); + } + checkOcspSignature(ocspResponderCertificate, basicResponse); + + boolean nonceChecked = checkNonce(basicResponse); + + SingleResp[] responses = basicResponse.getResponses(); + if (responses.length != 1) + { + throw new OCSPException( + "OCSP: Received " + responses.length + " responses instead of 1!"); + } + + SingleResp resp = responses[0]; + Object status = resp.getCertStatus(); + + if (!nonceChecked) + { + // https://tools.ietf.org/html/rfc5019 + // fall back to validating the OCSPResponse based on time + checkOcspResponseFresh(resp); + } + + if (status instanceof RevokedStatus) + { + RevokedStatus revokedStatus = (RevokedStatus) status; + if (revokedStatus.getRevocationTime().compareTo(signDate) <= 0) + { + throw new RevokedCertificateException( + "OCSP: Certificate is revoked since " + + revokedStatus.getRevocationTime(), + revokedStatus.getRevocationTime()); + } + LOG.info("The certificate was revoked after signing by OCSP " + ocspUrl + + " on " + revokedStatus.getRevocationTime()); + } + else if (status != CertificateStatus.GOOD) + { + throw new OCSPException("OCSP: Status of Cert is unknown"); + } + } + } + + private byte[] getKeyHashFromCertHolder(X509CertificateHolder certHolder) throws IOException + { + // https://tools.ietf.org/html/rfc2560#section-4.2.1 + // KeyHash ::= OCTET STRING -- SHA-1 hash of responder's public key + // -- (i.e., the SHA-1 hash of the value of the + // -- BIT STRING subjectPublicKey [excluding + // -- the tag, length, and number of unused + // -- bits] in the responder's certificate) + + // code below inspired by org.bouncycastle.cert.ocsp.CertificateID.createCertID() + // tested with SO52757037-Signed3-OCSP-with-KeyHash.pdf + SubjectPublicKeyInfo info = certHolder.getSubjectPublicKeyInfo(); + try + { + return MessageDigest.getInstance("SHA-1").digest(info.getPublicKeyData().getBytes()); + } + catch (NoSuchAlgorithmException ex) + { + // should not happen + LOG.error("SHA-1 Algorithm not found", ex); + return new byte[0]; + } + } + + private void findResponderCertificateByKeyHash(BasicOCSPResp basicResponse, byte[] keyHash) + throws IOException + { + X509CertificateHolder[] certHolders = basicResponse.getCerts(); + for (X509CertificateHolder certHolder : certHolders) + { + byte[] digest = getKeyHashFromCertHolder(certHolder); + if (Arrays.equals(keyHash, digest)) + { + try + { + ocspResponderCertificate = certificateConverter.getCertificate(certHolder); + return; + } + catch (CertificateException ex) + { + // unlikely to happen because the certificate existed as an object + LOG.error(ex, ex); + } + break; + } + } + + // DO NOT use the certificate found in additionalCerts first. One file had a + // responder certificate in the PDF itself with SHA1withRSA algorithm, but + // the responder delivered a different (newer, more secure) certificate + // with SHA256withRSA (tried with QV_RCA1_RCA3_CPCPS_V4_11.pdf) + // https://www.quovadisglobal.com/~/media/Files/Repository/QV_RCA1_RCA3_CPCPS_V4_11.ashx + for (X509Certificate cert : additionalCerts) + { + try + { + byte[] digest = getKeyHashFromCertHolder(new X509CertificateHolder(cert.getEncoded())); + if (Arrays.equals(keyHash, digest)) + { + ocspResponderCertificate = cert; + return; + } + } + catch (CertificateException ex) + { + // unlikely to happen because the certificate existed as an object + LOG.error(ex, ex); + } + } + } + + private void findResponderCertificateByName(BasicOCSPResp basicResponse, X500Name name) + { + X509CertificateHolder[] certHolders = basicResponse.getCerts(); + for (X509CertificateHolder certHolder : certHolders) + { + if (name.equals(certHolder.getSubject())) + { + try + { + ocspResponderCertificate = certificateConverter.getCertificate(certHolder); + return; + } + catch (CertificateException ex) + { + // unlikely to happen because the certificate existed as an object + LOG.error(ex, ex); + } + } + } + + // DO NOT use the certificate found in additionalCerts first. One file had a + // responder certificate in the PDF itself with SHA1withRSA algorithm, but + // the responder delivered a different (newer, more secure) certificate + // with SHA256withRSA (tried with QV_RCA1_RCA3_CPCPS_V4_11.pdf) + // https://www.quovadisglobal.com/~/media/Files/Repository/QV_RCA1_RCA3_CPCPS_V4_11.ashx + for (X509Certificate cert : additionalCerts) + { + X500Name certSubjectName = new X500Name(cert.getSubjectX500Principal().getName()); + if (certSubjectName.equals(name)) + { + ocspResponderCertificate = cert; + return; + } + } + } + + private void checkOcspResponseFresh(SingleResp resp) throws OCSPException + { + // https://tools.ietf.org/html/rfc5019 + // Clients MUST check for the existence of the nextUpdate field and MUST + // ensure the current time, expressed in GMT time as described in + // Section 2.2.4, falls between the thisUpdate and nextUpdate times. If + // the nextUpdate field is absent, the client MUST reject the response. + + Date curDate = Calendar.getInstance().getTime(); + + Date thisUpdate = resp.getThisUpdate(); + if (thisUpdate == null) + { + throw new OCSPException("OCSP: thisUpdate field is missing in response (RFC 5019 2.2.4.)"); + } + Date nextUpdate = resp.getNextUpdate(); + if (nextUpdate == null) + { + throw new OCSPException("OCSP: nextUpdate field is missing in response (RFC 5019 2.2.4.)"); + } + if (curDate.compareTo(thisUpdate) < 0) + { + LOG.error(curDate + " < " + thisUpdate); + throw new OCSPException("OCSP: current date < thisUpdate field (RFC 5019 2.2.4.)"); + } + if (curDate.compareTo(nextUpdate) > 0) + { + LOG.error(curDate + " > " + nextUpdate); + throw new OCSPException("OCSP: current date > nextUpdate field (RFC 5019 2.2.4.)"); + } + LOG.info("OCSP response is fresh"); + } + + /** + * Checks whether the OCSP response is signed by the given certificate. + * + * @param certificate the certificate to check the signature + * @param basicResponse OCSP response containing the signature + * @throws OCSPException when the signature is invalid or could not be checked + * @throws IOException if the default security provider can't be instantiated + */ + private void checkOcspSignature(X509Certificate certificate, BasicOCSPResp basicResponse) + throws OCSPException, IOException + { + try + { + ContentVerifierProvider verifier = new JcaContentVerifierProviderBuilder() + .setProvider(SecurityProvider.getProvider()).build(certificate); + + if (!basicResponse.isSignatureValid(verifier)) + { + throw new OCSPException("OCSP-Signature is not valid!"); + } + } + catch (OperatorCreationException e) + { + throw new OCSPException("Error checking Ocsp-Signature", e); + } + } + + /** + * Checks if the nonce in the response matches. + * + * @param basicResponse Response to be checked + * @return true if the nonce is present and matches, false if nonce is missing. + * @throws OCSPException if the nonce is different + */ + private boolean checkNonce(BasicOCSPResp basicResponse) throws OCSPException + { + Extension nonceExt = basicResponse.getExtension(OCSPObjectIdentifiers.id_pkix_ocsp_nonce); + if (nonceExt != null) + { + DEROctetString responseNonceString = (DEROctetString) nonceExt.getExtnValue(); + if (!responseNonceString.equals(encodedNonce)) + { + throw new OCSPException("Different nonce found in response!"); + } + else + { + LOG.info("Nonce is good"); + return true; + } + } + // https://tools.ietf.org/html/rfc5019 + // Clients that opt to include a nonce in the + // request SHOULD NOT reject a corresponding OCSPResponse solely on the + // basis of the nonexistent expected nonce, but MUST fall back to + // validating the OCSPResponse based on time. + return false; + } + + /** + * Performs the OCSP-Request, with given data. + * + * @return the OCSPResp, that has been fetched from the ocspUrl + * @throws IOException + * @throws OCSPException + */ + private OCSPResp performRequest() throws IOException, OCSPException + { + OCSPReq request = generateOCSPRequest(); + URL url = new URL(ocspUrl); + HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); + try + { + httpConnection.setRequestProperty("Content-Type", "application/ocsp-request"); + httpConnection.setRequestProperty("Accept", "application/ocsp-response"); + httpConnection.setDoOutput(true); + try (OutputStream out = httpConnection.getOutputStream()) + { + out.write(request.getEncoded()); + } + + if (httpConnection.getResponseCode() != 200) + { + throw new IOException("OCSP: Could not access url, ResponseCode: " + + httpConnection.getResponseCode()); + } + // Get response + try (InputStream in = (InputStream) httpConnection.getContent()) + { + return new OCSPResp(in); + } + } + finally + { + httpConnection.disconnect(); + } + } + + /** + * Helper method to verify response status. + * + * @param resp OCSP response + * @throws OCSPException if the response status is not ok + */ + public void verifyRespStatus(OCSPResp resp) throws OCSPException + { + String statusInfo = ""; + if (resp != null) + { + int status = resp.getStatus(); + switch (status) + { + case OCSPResponseStatus.INTERNAL_ERROR: + statusInfo = "INTERNAL_ERROR"; + LOG.error("An internal error occurred in the OCSP Server!"); + break; + case OCSPResponseStatus.MALFORMED_REQUEST: + // This happened when the "critical" flag was used for extensions + // on a responder known by the committer of this comment. + statusInfo = "MALFORMED_REQUEST"; + LOG.error("Your request did not fit the RFC 2560 syntax!"); + break; + case OCSPResponseStatus.SIG_REQUIRED: + statusInfo = "SIG_REQUIRED"; + LOG.error("Your request was not signed!"); + break; + case OCSPResponseStatus.TRY_LATER: + statusInfo = "TRY_LATER"; + LOG.error("The server was too busy to answer you!"); + break; + case OCSPResponseStatus.UNAUTHORIZED: + statusInfo = "UNAUTHORIZED"; + LOG.error("The server could not authenticate you!"); + break; + case OCSPResponseStatus.SUCCESSFUL: + break; + default: + statusInfo = "UNKNOWN"; + LOG.error("Unknown OCSPResponse status code! " + status); + } + } + if (resp == null || resp.getStatus() != OCSPResponseStatus.SUCCESSFUL) + { + throw new OCSPException("OCSP response unsuccessful, status: " + statusInfo); + } + } + + /** + * Generates an OCSP request and generates the CertificateID. + * + * @return OCSP request, ready to fetch data + * @throws OCSPException + * @throws IOException + */ + private OCSPReq generateOCSPRequest() throws OCSPException, IOException + { + Security.addProvider(SecurityProvider.getProvider()); + + // Generate the ID for the certificate we are looking for + CertificateID certId; + try + { + certId = new CertificateID(new SHA1DigestCalculator(), + new JcaX509CertificateHolder(issuerCertificate), + certificateToCheck.getSerialNumber()); + } + catch (CertificateEncodingException e) + { + throw new IOException("Error creating CertificateID with the Certificate encoding", e); + } + + // https://tools.ietf.org/html/rfc2560#section-4.1.2 + // Support for any specific extension is OPTIONAL. The critical flag + // SHOULD NOT be set for any of them. + + Extension responseExtension = new Extension(OCSPObjectIdentifiers.id_pkix_ocsp_response, + false, new DLSequence(OCSPObjectIdentifiers.id_pkix_ocsp_basic).getEncoded()); + + Random rand = new Random(); + byte[] nonce = new byte[16]; + rand.nextBytes(nonce); + encodedNonce = new DEROctetString(new DEROctetString(nonce)); + Extension nonceExtension = new Extension(OCSPObjectIdentifiers.id_pkix_ocsp_nonce, false, + encodedNonce); + + OCSPReqBuilder builder = new OCSPReqBuilder(); + builder.setRequestExtensions( + new Extensions(new Extension[] { responseExtension, nonceExtension })); + builder.addRequest(certId); + return builder.build(); + } + + /** + * Class to create SHA-1 Digest, used for creation of CertificateID. + */ + private static class SHA1DigestCalculator implements DigestCalculator + { + private final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + + @Override + public AlgorithmIdentifier getAlgorithmIdentifier() + { + return new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1); + } + + @Override + public OutputStream getOutputStream() + { + return bOut; + } + + @Override + public byte[] getDigest() + { + byte[] bytes = bOut.toByteArray(); + bOut.reset(); + + try + { + MessageDigest md = MessageDigest.getInstance("SHA-1"); + return md.digest(bytes); + } + catch (NoSuchAlgorithmException ex) + { + // should not happen + LOG.error("SHA-1 Algorithm not found", ex); + return new byte[0]; + } + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/RevokedCertificateException.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/RevokedCertificateException.java new file mode 100644 index 00000000000..6a4d7160367 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/cert/RevokedCertificateException.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature.cert; + +import java.util.Date; + +/** + * Exception to handle a revoked Certificate explicitly + * + * @author Alexis Suter + */ +public class RevokedCertificateException extends Exception +{ + private static final long serialVersionUID = 3543946618794126654L; + + private final Date revocationTime; + + public RevokedCertificateException(String message) + { + super(message); + this.revocationTime = null; + } + + public RevokedCertificateException(String message, Date revocationTime) + { + super(message); + this.revocationTime = revocationTime; + } + + public Date getRevocationTime() + { + return revocationTime; + } +} diff --git a/src/org/pdfbox/examples/signature/package.html b/examples/src/main/java/org/apache/pdfbox/examples/signature/package.html similarity index 100% rename from src/org/pdfbox/examples/signature/package.html rename to examples/src/main/java/org/apache/pdfbox/examples/signature/package.html diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java new file mode 100644 index 00000000000..8663de52cd2 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java @@ -0,0 +1,586 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature.validation; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.math.BigInteger; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.security.cert.CertificateEncodingException; +import java.security.cert.X509CRL; +import java.security.cert.X509Certificate; +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSUpdateInfo; +import org.apache.pdfbox.examples.signature.SigUtils; +import org.apache.pdfbox.examples.signature.cert.CRLVerifier; +import org.apache.pdfbox.examples.signature.cert.CertificateVerificationException; +import org.apache.pdfbox.examples.signature.cert.OcspHelper; +import org.apache.pdfbox.examples.signature.cert.RevokedCertificateException; +import org.apache.pdfbox.examples.signature.validation.CertInformationCollector.CertSignatureInformation; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.encryption.SecurityProvider; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.util.Hex; +import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +import org.bouncycastle.cert.ocsp.BasicOCSPResp; +import org.bouncycastle.cert.ocsp.OCSPException; +import org.bouncycastle.cert.ocsp.OCSPResp; + +/** + * An example for adding Validation Information to a signed PDF, inspired by ETSI TS 102 778-4 + * V1.1.2 (2009-12), Part 4: PAdES Long Term - PAdES-LTV Profile. This procedure appends the + * Validation Information of the last signature (more precise its signer(s)) to a copy of the + * document. The signature and the signed data will not be touched and stay valid. + * + * @author Alexis Suter + */ +public class AddValidationInformation +{ + private static final Log LOG = LogFactory.getLog(AddValidationInformation.class); + + private CertInformationCollector certInformationHelper; + private COSArray correspondingOCSPs; + private COSArray correspondingCRLs; + private COSDictionary vriBase; + private COSArray ocsps; + private COSArray crls; + private COSArray certs; + private PDDocument document; + private final Set foundRevocationInformation = new HashSet<>(); + private Calendar signDate; + + /** + * Signs the given PDF file. + * + * @param inFile input PDF file + * @param outFile output PDF file + * @throws IOException if the input file could not be read + */ + public void validateSignature(File inFile, File outFile) throws IOException + { + if (inFile == null || !inFile.exists()) + { + throw new FileNotFoundException("Document for signing does not exist"); + } + + try (PDDocument doc = PDDocument.load(inFile); + FileOutputStream fos = new FileOutputStream(outFile)) + { + document = doc; + doValidation(inFile.getAbsolutePath(), fos); + } + } + + /** + * Fetches certificate information from the last signature of the document and appends a DSS + * with the validation information to the document. + * + * @param document containing the Signature + * @param filename in file to extract signature + * @param output where to write the changed document + * @throws IOException + */ + private void doValidation(String filename, OutputStream output) throws IOException + { + certInformationHelper = new CertInformationCollector(); + CertSignatureInformation certInfo = null; + try + { + PDSignature signature = SigUtils.getLastRelevantSignature(document); + if (signature != null) + { + certInfo = certInformationHelper.getLastCertInfo(signature, filename); + signDate = signature.getSignDate(); + } + } + catch (CertificateProccessingException e) + { + throw new IOException("An Error occurred processing the Signature", e); + } + if (certInfo == null) + { + throw new IOException( + "No Certificate information or signature found in the given document"); + } + + PDDocumentCatalog docCatalog = document.getDocumentCatalog(); + COSDictionary catalog = docCatalog.getCOSObject(); + catalog.setNeedToBeUpdated(true); + + COSDictionary dss = getOrCreateDictionaryEntry(COSDictionary.class, catalog, "DSS"); + + addExtensions(docCatalog); + + vriBase = getOrCreateDictionaryEntry(COSDictionary.class, dss, "VRI"); + + ocsps = getOrCreateDictionaryEntry(COSArray.class, dss, "OCSPs"); + + crls = getOrCreateDictionaryEntry(COSArray.class, dss, "CRLs"); + + certs = getOrCreateDictionaryEntry(COSArray.class, dss, "Certs"); + + addRevocationData(certInfo); + + addAllCertsToCertArray(); + + // write incremental + document.saveIncremental(output); + } + + /** + * Gets or creates a dictionary entry. If existing checks for the type and sets need to be + * updated. + * + * @param clazz the class of the dictionary entry, must implement COSUpdateInfo + * @param parent where to find the element + * @param name of the element + * @return a Element of given class, new or existing + * @throws IOException when the type of the element is wrong + */ + private static T getOrCreateDictionaryEntry(Class clazz, + COSDictionary parent, String name) throws IOException + { + T result; + COSBase element = parent.getDictionaryObject(name); + if (element != null && clazz.isInstance(element)) + { + result = clazz.cast(element); + result.setNeedToBeUpdated(true); + } + else if (element != null) + { + throw new IOException("Element " + name + " from dictionary is not of type " + + clazz.getCanonicalName()); + } + else + { + try + { + result = clazz.getDeclaredConstructor().newInstance(); + } + catch (ReflectiveOperationException | SecurityException e) + { + LOG.error("Failed to create new instance of " + clazz.getCanonicalName(), e); + return null; + } + result.setDirect(false); + parent.setItem(COSName.getPDFName(name), result); + } + return result; + } + + /** + * Fetches and adds revocation information based on the certInfo to the DSS. + * + * @param certInfo Certificate information from CertInformationHelper containing certificate + * chains. + * @throws IOException + */ + private void addRevocationData(CertSignatureInformation certInfo) throws IOException + { + COSDictionary vri = new COSDictionary(); + vriBase.setItem(certInfo.getSignatureHash(), vri); + + updateVRI(certInfo, vri); + + if (certInfo.getTsaCerts() != null) + { + // Don't add RevocationInfo from tsa to VRI's + correspondingOCSPs = null; + correspondingCRLs = null; + addRevocationDataRecursive(certInfo.getTsaCerts()); + } + } + + /** + * Tries to get Revocation Data (first OCSP, else CRL) from the given Certificate Chain. + * + * @param certInfo from which to fetch revocation data. Will work recursively through its + * chains. + * @throws IOException when failed to fetch an revocation data. + */ + private void addRevocationDataRecursive(CertSignatureInformation certInfo) throws IOException + { + if (certInfo.isSelfSigned()) + { + return; + } + // To avoid getting same revocation information twice. + boolean isRevocationInfoFound = foundRevocationInformation + .contains(certInfo.getCertificate().getSerialNumber()); + if (!isRevocationInfoFound) + { + if (certInfo.getOcspUrl() != null && certInfo.getIssuerCertificate() != null) + { + isRevocationInfoFound = fetchOcspData(certInfo); + } + if (!isRevocationInfoFound && certInfo.getCrlUrl() != null) + { + fetchCrlData(certInfo); + isRevocationInfoFound = true; + } + + if (certInfo.getOcspUrl() == null && certInfo.getCrlUrl() == null) + { + LOG.info("No revocation information for cert " + certInfo.getCertificate().getSubjectX500Principal()); + } + else if (!isRevocationInfoFound) + { + throw new IOException("Could not fetch Revocation Info for Cert: " + + certInfo.getCertificate().getSubjectX500Principal()); + } + } + + if (certInfo.getAlternativeCertChain() != null) + { + addRevocationDataRecursive(certInfo.getAlternativeCertChain()); + } + + if (certInfo.getCertChain() != null && certInfo.getCertChain().getCertificate() != null) + { + addRevocationDataRecursive(certInfo.getCertChain()); + } + } + + /** + * Tries to fetch and add OCSP Data to its containers. + * + * @param certInfo the certificate info, for it to check OCSP data. + * @return true when the OCSP data has successfully been fetched and added + * @throws IOException when Certificate is revoked. + */ + private boolean fetchOcspData(CertSignatureInformation certInfo) throws IOException + { + try + { + addOcspData(certInfo); + return true; + } + catch (OCSPException | CertificateProccessingException | IOException e) + { + LOG.warn("Failed fetching Ocsp", e); + return false; + } + catch (RevokedCertificateException e) + { + throw new IOException(e); + } + } + + /** + * Tries to fetch and add CRL Data to its containers. + * + * @param certInfo the certificate info, for it to check CRL data. + * @throws IOException when failed to fetch, because no validation data could be fetched for + * data. + */ + private void fetchCrlData(CertSignatureInformation certInfo) throws IOException + { + try + { + addCrlRevocationInfo(certInfo); + } + catch (GeneralSecurityException | IOException | RevokedCertificateException | CertificateVerificationException e) + { + LOG.warn("Failed fetching CRL", e); + throw new IOException(e); + } + } + + /** + * Fetches and adds OCSP data to storage for the given Certificate. + * + * @param certInfo the certificate info, for it to check OCSP data. + * @throws IOException + * @throws OCSPException + * @throws CertificateProccessingException + * @throws RevokedCertificateException + */ + private void addOcspData(CertSignatureInformation certInfo) throws IOException, OCSPException, + CertificateProccessingException, RevokedCertificateException + { + OcspHelper ocspHelper = new OcspHelper( + certInfo.getCertificate(), + signDate.getTime(), + certInfo.getIssuerCertificate(), + new HashSet<>(certInformationHelper.getCertificateSet()), + certInfo.getOcspUrl()); + OCSPResp ocspResp = ocspHelper.getResponseOcsp(); + BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResp.getResponseObject(); + X509Certificate ocspResponderCertificate = ocspHelper.getOcspResponderCertificate(); + certInformationHelper.addAllCertsFromHolders(basicResponse.getCerts()); + byte[] signatureHash; + try + { + signatureHash = MessageDigest.getInstance("SHA-1").digest(basicResponse.getSignature()); + } + catch (NoSuchAlgorithmException ex) + { + throw new CertificateProccessingException(ex); + } + String signatureHashHex = Hex.getString(signatureHash); + + if (!vriBase.containsKey(signatureHashHex)) + { + COSArray savedCorrespondingOCSPs = correspondingOCSPs; + COSArray savedCorrespondingCRLs = correspondingCRLs; + + COSDictionary vri = new COSDictionary(); + vriBase.setItem(signatureHashHex, vri); + CertSignatureInformation ocspCertInfo = certInformationHelper.getCertInfo(ocspResponderCertificate); + + updateVRI(ocspCertInfo, vri); + + correspondingOCSPs = savedCorrespondingOCSPs; + correspondingCRLs = savedCorrespondingCRLs; + } + + byte[] ocspData = ocspResp.getEncoded(); + + COSStream ocspStream = writeDataToStream(ocspData); + ocsps.add(ocspStream); + if (correspondingOCSPs != null) + { + correspondingOCSPs.add(ocspStream); + } + foundRevocationInformation.add(certInfo.getCertificate().getSerialNumber()); + } + + /** + * Fetches and adds CRL data to storage for the given Certificate. + * + * @param certInfo the certificate info, for it to check CRL data. + * @throws IOException + * @throws RevokedCertificateException + * @throws GeneralSecurityException + * @throws CertificateVerificationException + */ + private void addCrlRevocationInfo(CertSignatureInformation certInfo) + throws IOException, RevokedCertificateException, GeneralSecurityException, + CertificateVerificationException + { + X509CRL crl = CRLVerifier.downloadCRLFromWeb(certInfo.getCrlUrl()); + X509Certificate issuerCertificate = certInfo.getIssuerCertificate(); + + // find the issuer certificate (usually issuer of signature certificate) + for (X509Certificate certificate : certInformationHelper.getCertificateSet()) + { + if (certificate.getSubjectX500Principal().equals(crl.getIssuerX500Principal())) + { + issuerCertificate = certificate; + break; + } + } + crl.verify(issuerCertificate.getPublicKey(), SecurityProvider.getProvider().getName()); + CRLVerifier.checkRevocation(crl, certInfo.getCertificate(), signDate.getTime(), certInfo.getCrlUrl()); + COSStream crlStream = writeDataToStream(crl.getEncoded()); + crls.add(crlStream); + if (correspondingCRLs != null) + { + correspondingCRLs.add(crlStream); + + byte[] signatureHash; + try + { + signatureHash = MessageDigest.getInstance("SHA-1").digest(crl.getSignature()); + } + catch (NoSuchAlgorithmException ex) + { + throw new CertificateVerificationException(ex.getMessage(), ex); + } + String signatureHashHex = Hex.getString(signatureHash); + + if (!vriBase.containsKey(signatureHashHex)) + { + COSArray savedCorrespondingOCSPs = correspondingOCSPs; + COSArray savedCorrespondingCRLs = correspondingCRLs; + + COSDictionary vri = new COSDictionary(); + vriBase.setItem(signatureHashHex, vri); + + CertSignatureInformation crlCertInfo; + try + { + crlCertInfo = certInformationHelper.getCertInfo(issuerCertificate); + } + catch (CertificateProccessingException ex) + { + throw new CertificateVerificationException(ex.getMessage(), ex); + } + + updateVRI(crlCertInfo, vri); + + correspondingOCSPs = savedCorrespondingOCSPs; + correspondingCRLs = savedCorrespondingCRLs; + } + } + foundRevocationInformation.add(certInfo.getCertificate().getSerialNumber()); + } + + private void updateVRI(CertSignatureInformation certInfo, COSDictionary vri) throws IOException + { + if (certInfo.getCertificate().getExtensionValue(OCSPObjectIdentifiers.id_pkix_ocsp_nocheck.getId()) == null) + { + correspondingOCSPs = new COSArray(); + correspondingCRLs = new COSArray(); + addRevocationDataRecursive(certInfo); + if (correspondingOCSPs.size() > 0) + { + vri.setItem("OCSP", correspondingOCSPs); + } + if (correspondingCRLs.size() > 0) + { + vri.setItem("CRL", correspondingCRLs); + } + } + + COSArray correspondingCerts = new COSArray(); + CertSignatureInformation ci = certInfo; + do + { + X509Certificate cert = ci.getCertificate(); + try + { + COSStream certStream = writeDataToStream(cert.getEncoded()); + correspondingCerts.add(certStream); + certs.add(certStream); // may lead to duplicate certificates. Important? + } + catch (CertificateEncodingException ex) + { + // should not happen because these are existing certificates + LOG.error(ex, ex); + } + + if (cert.getExtensionValue(OCSPObjectIdentifiers.id_pkix_ocsp_nocheck.getId()) != null) + { + break; + } + ci = ci.getCertChain(); + } + while (ci != null); + vri.setItem(COSName.CERT, correspondingCerts); + + vri.setDate(COSName.TU, Calendar.getInstance()); + } + + /** + * Adds all certs to the certs-array. Make sure, all certificates are inside the + * certificateStore of certInformationHelper + * + * @throws IOException + */ + private void addAllCertsToCertArray() throws IOException + { + try + { + for (X509Certificate cert : certInformationHelper.getCertificateSet()) + { + COSStream stream = writeDataToStream(cert.getEncoded()); + certs.add(stream); + } + } + catch (CertificateEncodingException e) + { + throw new IOException(e); + } + } + + /** + * Creates a Flate encoded COSStream object with the given data. + * + * @param data to write into the COSStream + * @return COSStream a COSStream object that can be added to the document + * @throws IOException + */ + private COSStream writeDataToStream(byte[] data) throws IOException + { + COSStream stream = document.getDocument().createCOSStream(); + try (OutputStream os = stream.createOutputStream(COSName.FLATE_DECODE)) + { + os.write(data); + } + return stream; + } + + /** + * Adds Extensions to the document catalog. So that the use of DSS is identified. Described in + * PAdES Part 4, Chapter 4.4. + * + * @param catalog to add Extensions into + */ + private void addExtensions(PDDocumentCatalog catalog) + { + COSDictionary dssExtensions = new COSDictionary(); + dssExtensions.setDirect(true); + catalog.getCOSObject().setItem("Extensions", dssExtensions); + + COSDictionary adbeExtension = new COSDictionary(); + adbeExtension.setDirect(true); + dssExtensions.setItem("ADBE", adbeExtension); + + adbeExtension.setName("BaseVersion", "1.7"); + adbeExtension.setInt("ExtensionLevel", 5); + + catalog.setVersion("1.7"); + } + + public static void main(String[] args) throws IOException, GeneralSecurityException + { + if (args.length != 1) + { + usage(); + System.exit(1); + } + + // register BouncyCastle provider, needed for "exotic" algorithms + Security.addProvider(SecurityProvider.getProvider()); + + // add ocspInformation + AddValidationInformation addOcspInformation = new AddValidationInformation(); + + File inFile = new File(args[0]); + String name = inFile.getName(); + String substring = name.substring(0, name.lastIndexOf('.')); + + File outFile = new File(inFile.getParent(), substring + "_ocsp.pdf"); + addOcspInformation.validateSignature(inFile, outFile); + } + + private static void usage() + { + System.err.println("usage: java " + AddValidationInformation.class.getName() + " " + + "\n"); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java new file mode 100644 index 00000000000..921cc484f1b --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java @@ -0,0 +1,474 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.examples.signature.validation; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.SignatureException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.examples.signature.cert.CertificateVerifier; +import org.apache.pdfbox.pdmodel.encryption.SecurityProvider; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.bouncycastle.asn1.DERSequence; +import org.bouncycastle.asn1.DERSet; +import org.bouncycastle.asn1.cms.Attribute; +import org.bouncycastle.asn1.cms.AttributeTable; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x509.Extension; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSSignedData; +import org.bouncycastle.cms.SignerInformation; +import org.bouncycastle.tsp.TSPException; +import org.bouncycastle.tsp.TimeStampToken; +import org.bouncycastle.util.Selector; +import org.bouncycastle.util.Store; + +/** + * This class helps to extract data/information from a signature. The information is held in + * CertSignatureInformation. Some information is needed for validation processing of the + * participating certificates. + * + * @author Alexis Suter + * + */ +public class CertInformationCollector +{ + private static final Log LOG = LogFactory.getLog(CertInformationCollector.class); + + private static final int MAX_CERTIFICATE_CHAIN_DEPTH = 5; + + private final Set certificateSet = new HashSet<>(); + + private final JcaX509CertificateConverter certConverter = new JcaX509CertificateConverter(); + + private CertSignatureInformation rootCertInfo; + + /** + * Gets the certificate information of a signature. + * + * @param signature the signature of the document. + * @param fileName of the document. + * @return the CertSignatureInformation containing all certificate information + * @throws CertificateProccessingException when there is an error processing the certificates + * @throws IOException on a data processing error + */ + public CertSignatureInformation getLastCertInfo(PDSignature signature, String fileName) + throws CertificateProccessingException, IOException + { + try (FileInputStream documentInput = new FileInputStream(fileName)) + { + byte[] signatureContent = signature.getContents(documentInput); + return getCertInfo(signatureContent); + } + } + + /** + * Processes one signature and its including certificates. + * + * @param signatureContent the byte[]-Content of the signature + * @return the CertSignatureInformation for this signature + * @throws IOException + * @throws CertificateProccessingException + */ + private CertSignatureInformation getCertInfo(byte[] signatureContent) + throws CertificateProccessingException, IOException + { + rootCertInfo = new CertSignatureInformation(); + + rootCertInfo.signatureHash = CertInformationHelper.getSha1Hash(signatureContent); + + try + { + CMSSignedData signedData = new CMSSignedData(signatureContent); + Store certificatesStore = signedData.getCertificates(); + + SignerInformation signerInformation = processSignerStore(certificatesStore, signedData, + rootCertInfo); + + addTimestampCerts(signerInformation); + } + catch (CMSException e) + { + LOG.error("Error occurred getting Certificate Information from Signature", e); + throw new CertificateProccessingException(e); + } + return rootCertInfo; + } + + /** + * Processes an embedded signed timestamp, that has been placed into a signature. The + * certificates and its chain(s) will be processed the same way as the signature itself. + * + * @param signerInformation of the signature, to get unsigned attributes from it. + * @throws IOException + * @throws CertificateProccessingException + */ + private void addTimestampCerts(SignerInformation signerInformation) + throws IOException, CertificateProccessingException + { + AttributeTable unsignedAttributes = signerInformation.getUnsignedAttributes(); + if (unsignedAttributes == null) + { + return; + } + Attribute tsAttribute = signerInformation.getUnsignedAttributes() + .get(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken); + if (tsAttribute.getAttrValues() instanceof DERSet) + { + DERSet tsSet = (DERSet) tsAttribute.getAttrValues(); + tsSet.getEncoded("DER"); + DERSequence tsSeq = (DERSequence) tsSet.getObjectAt(0); + + try + { + TimeStampToken tsToken = new TimeStampToken( + new CMSSignedData(tsSeq.getEncoded("DER"))); + + rootCertInfo.tsaCerts = new CertSignatureInformation(); + + @SuppressWarnings("unchecked") + Store certificatesStore = tsToken.getCertificates(); + + processSignerStore(certificatesStore, tsToken.toCMSSignedData(), + rootCertInfo.tsaCerts); + } + catch (TSPException | CMSException e) + { + throw new IOException("Error parsing timestamp token", e); + } + } + } + + /** + * Processes a signer store and goes through the signers certificate-chain. Adds the found data + * to the certInfo. Handles only the first signer, although multiple would be possible, but is + * not yet practicable. + * + * @param certificatesStore To get the certificate information from. Certificates will be saved + * in certificateSet. + * @param signedData data from which to get the SignerInformation + * @param certInfo where to add certificate information + * @return Signer Information of the processed certificatesStore for further usage. + * @throws IOException on data-processing error + * @throws CertificateProccessingException on a specific error with a certificate + */ + private SignerInformation processSignerStore(Store certificatesStore, + CMSSignedData signedData, CertSignatureInformation certInfo) + throws IOException, CertificateProccessingException + { + Collection signers = signedData.getSignerInfos().getSigners(); + SignerInformation signerInformation = signers.iterator().next(); + + @SuppressWarnings("unchecked") + Collection matches = certificatesStore + .getMatches((Selector) signerInformation.getSID()); + + X509Certificate certificate = getCertFromHolder(matches.iterator().next()); + certificateSet.add(certificate); + + Collection allCerts = certificatesStore.getMatches(null); + addAllCerts(allCerts); + traverseChain(certificate, certInfo, MAX_CERTIFICATE_CHAIN_DEPTH); + return signerInformation; + } + + /** + * Traverse through the Cert-Chain of the given Certificate and add it to the CertInfo + * recursively. + * + * @param certificate Actual Certificate to be processed + * @param certInfo where to add the Certificate (and chain) information + * @param maxDepth Max depth from this point to go through CertChain (could be infinite) + * @throws IOException on data-processing error + * @throws CertificateProccessingException on a specific error with a certificate + */ + private void traverseChain(X509Certificate certificate, CertSignatureInformation certInfo, + int maxDepth) throws IOException, CertificateProccessingException + { + certInfo.certificate = certificate; + + // Certificate Authority Information Access + // As described in https://tools.ietf.org/html/rfc3280.html#section-4.2.2.1 + byte[] authorityExtensionValue = certificate.getExtensionValue(Extension.authorityInfoAccess.getId()); + if (authorityExtensionValue != null) + { + CertInformationHelper.getAuthorityInfoExtensionValue(authorityExtensionValue, certInfo); + } + + if (certInfo.issuerUrl != null) + { + getAlternativeIssuerCertificate(certInfo, maxDepth); + } + + // As described in https://tools.ietf.org/html/rfc3280.html#section-4.2.1.14 + byte[] crlExtensionValue = certificate.getExtensionValue(Extension.cRLDistributionPoints.getId()); + if (crlExtensionValue != null) + { + certInfo.crlUrl = CertInformationHelper.getCrlUrlFromExtensionValue(crlExtensionValue); + } + + try + { + certInfo.isSelfSigned = CertificateVerifier.isSelfSigned(certificate); + } + catch (GeneralSecurityException ex) + { + throw new CertificateProccessingException(ex); + } + if (maxDepth <= 0 || certInfo.isSelfSigned) + { + return; + } + + for (X509Certificate issuer : certificateSet) + { + if (certificate.getIssuerX500Principal().equals(issuer.getSubjectX500Principal())) + { + try + { + certificate.verify(issuer.getPublicKey(), SecurityProvider.getProvider().getName()); + } + catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException | SignatureException | NoSuchProviderException ex) + { + throw new CertificateProccessingException(ex); + } + LOG.info("Found the right Issuer Cert! for Cert: " + certificate.getSubjectX500Principal() + + "\n" + issuer.getSubjectX500Principal()); + certInfo.issuerCertificate = issuer; + certInfo.certChain = new CertSignatureInformation(); + traverseChain(issuer, certInfo.certChain, maxDepth - 1); + break; + } + } + if (certInfo.issuerCertificate == null) + { + throw new IOException( + "No Issuer Certificate found for Cert: " + certificate.getSubjectX500Principal()); + } + } + + /** + * Get alternative certificate chain, from the Authority Information (a url). If the chain is + * not included in the signature, this is the main chain. Otherwise there might be a second + * chain. Exceptions which happen on this chain will be logged and ignored, because the cert + * might not be available at the time or other reasons. + * + * @param certInfo base Certificate Information, on which to put the alternative Certificate + * @param maxDepth Maximum depth to dig through the chain from here on. + * @throws CertificateProccessingException on a specific error with a certificate + */ + private void getAlternativeIssuerCertificate(CertSignatureInformation certInfo, int maxDepth) + throws CertificateProccessingException + { + LOG.info("Get alternative issuer certificate from: " + certInfo.issuerUrl); + try + { + URL certUrl = new URL(certInfo.issuerUrl); + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + try (InputStream in = certUrl.openStream()) + { + X509Certificate altIssuerCert = (X509Certificate) certFactory + .generateCertificate(in); + certificateSet.add(altIssuerCert); + + certInfo.alternativeCertChain = new CertSignatureInformation(); + traverseChain(altIssuerCert, certInfo.alternativeCertChain, maxDepth - 1); + } + } + catch (IOException | CertificateException e) + { + LOG.error("Error getting alternative issuer certificate from " + certInfo.issuerUrl, e); + } + } + + /** + * Gets the X509Certificate out of the X509CertificateHolder. + * + * @param certificateHolder to get the certificate from + * @return a X509Certificate or null when there was an Error with the Certificate + * @throws CertificateProccessingException on failed conversion from X509CertificateHolder to + * X509Certificate + */ + private X509Certificate getCertFromHolder(X509CertificateHolder certificateHolder) + throws CertificateProccessingException + { + try + { + return certConverter.getCertificate(certificateHolder); + } + catch (CertificateException e) + { + LOG.error("Certificate Exception getting Certificate from certHolder.", e); + throw new CertificateProccessingException(e); + } + } + + /** + * Adds multiple Certificates out of a Collection of X509CertificateHolder into certificateSet. + * + * @param certHolders Collection of X509CertificateHolder + */ + private void addAllCerts(Collection certHolders) + { + for (X509CertificateHolder certificateHolder : certHolders) + { + try + { + X509Certificate certificate = getCertFromHolder(certificateHolder); + certificateSet.add(certificate); + } + catch (CertificateProccessingException e) + { + LOG.warn("Certificate Exception getting Certificate from certHolder.", e); + } + } + } + + /** + * Gets a list of X509Certificate out of an array of X509CertificateHolder. The certificates + * will be added to certificateSet. + * + * @param certHolders Array of X509CertificateHolder + * @throws CertificateProccessingException when one of the Certificates could not be parsed. + */ + public void addAllCertsFromHolders(X509CertificateHolder[] certHolders) + throws CertificateProccessingException + { + addAllCerts(Arrays.asList(certHolders)); + } + + /** + * Traverse a certificate. + * + * @param certificate + * @return + * @throws CertificateProccessingException + */ + CertSignatureInformation getCertInfo(X509Certificate certificate) throws CertificateProccessingException + { + try + { + CertSignatureInformation certSignatureInformation = new CertSignatureInformation(); + traverseChain(certificate, certSignatureInformation, MAX_CERTIFICATE_CHAIN_DEPTH); + return certSignatureInformation; + } + catch (IOException ex) + { + throw new CertificateProccessingException(ex); + } + } + + /** + * Get the set of all processed certificates until now. + * + * @return a set of serial numbers to certificates. + */ + public Set getCertificateSet() + { + return certificateSet; + } + + /** + * Data class to hold Signature, Certificate (and its chain(s)) and revocation Information + */ + public class CertSignatureInformation + { + private X509Certificate certificate; + private String signatureHash; + private boolean isSelfSigned = false; + private String ocspUrl; + private String crlUrl; + private String issuerUrl; + private X509Certificate issuerCertificate; + private CertSignatureInformation certChain; + private CertSignatureInformation tsaCerts; + private CertSignatureInformation alternativeCertChain; + + public String getOcspUrl() + { + return ocspUrl; + } + + public void setOcspUrl(String ocspUrl) + { + this.ocspUrl = ocspUrl; + } + + public void setIssuerUrl(String issuerUrl) + { + this.issuerUrl = issuerUrl; + } + + public String getCrlUrl() + { + return crlUrl; + } + + public X509Certificate getCertificate() + { + return certificate; + } + + public boolean isSelfSigned() + { + return isSelfSigned; + } + + public X509Certificate getIssuerCertificate() + { + return issuerCertificate; + } + + public String getSignatureHash() + { + return signatureHash; + } + + public CertSignatureInformation getCertChain() + { + return certChain; + } + + public CertSignatureInformation getTsaCerts() + { + return tsaCerts; + } + + public CertSignatureInformation getAlternativeCertChain() + { + return alternativeCertChain; + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationHelper.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationHelper.java new file mode 100644 index 00000000000..5d49ab161e2 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationHelper.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature.validation; + +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Enumeration; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.examples.signature.validation.CertInformationCollector.CertSignatureInformation; +import org.apache.pdfbox.util.Hex; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Sequence; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DERTaggedObject; +import org.bouncycastle.asn1.DLSequence; +import org.bouncycastle.asn1.x509.GeneralName; +import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; +import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils; + +public class CertInformationHelper +{ + private static final Log LOG = LogFactory.getLog(CertInformationHelper.class); + + private CertInformationHelper() + { + } + + /** + * Gets the SHA-1-Hash has of given byte[]-content. + * + * @param content to be hashed + * @return SHA-1 hash String + */ + protected static String getSha1Hash(byte[] content) + { + try + { + MessageDigest md = MessageDigest.getInstance("SHA-1"); + return Hex.getString(md.digest(content)); + } + catch (NoSuchAlgorithmException e) + { + LOG.error("No SHA-1 Algorithm found", e); + } + return null; + } + + /** + * Extracts authority information access extension values from the given data. The Data + * structure has to be implemented as described in RFC 2459, 4.2.2.1. + * + * @param extensionValue byte[] of the extension value. + * @param certInfo where to put the found values + * @throws IOException when there is a problem with the extensionValue + */ + protected static void getAuthorityInfoExtensionValue(byte[] extensionValue, + CertSignatureInformation certInfo) throws IOException + { + ASN1Sequence asn1Seq = (ASN1Sequence) JcaX509ExtensionUtils.parseExtensionValue(extensionValue); + Enumeration objects = asn1Seq.getObjects(); + while (objects.hasMoreElements()) + { + // AccessDescription + ASN1Sequence obj = (ASN1Sequence) objects.nextElement(); + ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) obj.getObjectAt(0); + // accessLocation + DERTaggedObject location = (DERTaggedObject) obj.getObjectAt(1); + + if (oid.equals(X509ObjectIdentifiers.id_ad_ocsp) + && location.getTagNo() == GeneralName.uniformResourceIdentifier) + { + DEROctetString url = (DEROctetString) location.getObject(); + certInfo.setOcspUrl(new String(url.getOctets())); + } + else if (oid.equals(X509ObjectIdentifiers.id_ad_caIssuers)) + { + DEROctetString uri = (DEROctetString) location.getObject(); + certInfo.setIssuerUrl(new String(uri.getOctets())); + } + } + } + + /** + * Gets the first CRL URL from given extension value. Structure has to be + * built as in 4.2.1.14 CRL Distribution Points of RFC 2459. + * + * @param extensionValue to get the extension value from + * @return first CRL- URL or null + * @throws IOException when there is a problem with the extensionValue + */ + protected static String getCrlUrlFromExtensionValue(byte[] extensionValue) throws IOException + { + ASN1Sequence asn1Seq = (ASN1Sequence) JcaX509ExtensionUtils.parseExtensionValue(extensionValue); + Enumeration objects = asn1Seq.getObjects(); + + while (objects.hasMoreElements()) + { + DLSequence obj = (DLSequence) objects.nextElement(); + + DERTaggedObject derTagged = (DERTaggedObject) obj.getObjectAt(0); + derTagged = (DERTaggedObject) derTagged.getObject(); + derTagged = (DERTaggedObject) derTagged.getObject(); + if (!(derTagged.getObject() instanceof DEROctetString)) + { + // happens with SampleSignedPDFDocument.pdf + continue; + } + DEROctetString uri = (DEROctetString) derTagged.getObject(); + String url = new String(uri.getOctets()); + // TODO Check for: DistributionPoint ::= SEQUENCE (see RFC 2459), multiples can be possible. + + // return first http(s)-Url for crl + if (url.startsWith("http")) + { + return url; + } + } + return null; + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertificateProccessingException.java b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertificateProccessingException.java new file mode 100644 index 00000000000..96399c6f769 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertificateProccessingException.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.signature.validation; + +/** + * Class to wrap around Certificate Processing exceptions + * + * @author Alexis Suter + */ +public class CertificateProccessingException extends Exception +{ + private static final long serialVersionUID = 814859842830313903L; + + public CertificateProccessingException(Throwable cause) + { + super(cause); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/AddWatermarkText.java b/examples/src/main/java/org/apache/pdfbox/examples/util/AddWatermarkText.java new file mode 100644 index 00000000000..1c092d9943d --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/AddWatermarkText.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.util.Matrix; + +/** + * Add a diagonal watermark text to each page of a PDF. + * + * @author Tilman Hausherr + */ +public class AddWatermarkText +{ + private AddWatermarkText() + { + } + + public static void main(String[] args) throws IOException + { + if (args.length != 3) + { + usage(); + } + else + { + File srcFile = new File(args[0]); + File dstFile = new File(args[1]); + String text = args[2]; + + try (PDDocument doc = PDDocument.load(srcFile)) + { + for (PDPage page : doc.getPages()) + { + PDFont font = PDType1Font.HELVETICA; + addWatermarkText(doc, page, font, text); + } + doc.save(dstFile); + } + } + } + + private static void addWatermarkText(PDDocument doc, PDPage page, PDFont font, String text) + throws IOException + { + try (PDPageContentStream cs + = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true, true)) + { + float fontHeight = 100; // arbitrary for short text + float width = page.getMediaBox().getWidth(); + float height = page.getMediaBox().getHeight(); + float stringWidth = font.getStringWidth(text) / 1000 * fontHeight; + float diagonalLength = (float) Math.sqrt(width * width + height * height); + float angle = (float) Math.atan2(height, width); + float x = (diagonalLength - stringWidth) / 2; // "horizontal" position in rotated world + float y = -fontHeight / 4; // 4 is a trial-and-error thing, this lowers the text a bit + cs.transform(Matrix.getRotateInstance(angle, 0, 0)); + cs.setFont(font, fontHeight); + // cs.setRenderingMode(RenderingMode.STROKE) // for "hollow" effect + + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setNonStrokingAlphaConstant(0.2f); + gs.setStrokingAlphaConstant(0.2f); + gs.setBlendMode(BlendMode.MULTIPLY); + gs.setLineWidth(3f); + cs.setGraphicsStateParameters(gs); + + // some API weirdness here. When int, range is 0..255. + // when float, this would be 0..1f + cs.setNonStrokingColor(255, 0, 0); + cs.setStrokingColor(255, 0, 0); + + cs.beginText(); + cs.newLineAtOffset(x, y); + cs.showText(text); + cs.endText(); + } + } + + /** + * This will print the usage. + */ + private static void usage() + { + System.err.println("Usage: java " + AddWatermarkText.class.getName() + " "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java b/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java new file mode 100644 index 00000000000..21897cb98be --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java @@ -0,0 +1,344 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.List; +import javax.imageio.ImageIO; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDCIDFontType2; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDSimpleFont; +import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDType3CharProc; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.pdmodel.font.PDVectorFont; +import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDThreadBead; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.text.PDFTextStripper; +import org.apache.pdfbox.text.TextPosition; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * This is an example on how to get some x/y coordinates of text and to show them in a rendered + * image. + * + * @author Ben Litchfield + * @author Tilman Hausherr + */ +public class DrawPrintTextLocations extends PDFTextStripper +{ + private BufferedImage image; + private AffineTransform flipAT; + private AffineTransform rotateAT; + private AffineTransform transAT; + private final String filename; + static final int SCALE = 4; + private Graphics2D g2d; + private final PDDocument document; + + /** + * Instantiate a new PDFTextStripper object. + * + * @param document + * @param filename + * @throws IOException If there is an error loading the properties. + */ + public DrawPrintTextLocations(PDDocument document, String filename) throws IOException + { + this.document = document; + this.filename = filename; + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + DrawPrintTextLocations stripper = new DrawPrintTextLocations(document, args[0]); + stripper.setSortByPosition(true); + + for (int page = 0; page < document.getNumberOfPages(); ++page) + { + stripper.stripPage(page); + } + } + } + } + + @Override + protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, Vector displacement) throws IOException + { + super.showGlyph(textRenderingMatrix, font, code, unicode, displacement); + + // in cyan: + // show actual glyph bounds. This must be done here and not in writeString(), + // because writeString processes only the glyphs with unicode, + // see e.g. the file in PDFBOX-3274 + Shape cyanShape = calculateGlyphBounds(textRenderingMatrix, font, code); + + if (cyanShape != null) + { + cyanShape = flipAT.createTransformedShape(cyanShape); + cyanShape = rotateAT.createTransformedShape(cyanShape); + cyanShape = transAT.createTransformedShape(cyanShape); + + g2d.setColor(Color.CYAN); + g2d.draw(cyanShape); + } + } + + // this calculates the real (except for type 3 fonts) individual glyph bounds + private Shape calculateGlyphBounds(Matrix textRenderingMatrix, PDFont font, int code) throws IOException + { + GeneralPath path = null; + AffineTransform at = textRenderingMatrix.createAffineTransform(); + at.concatenate(font.getFontMatrix().createAffineTransform()); + if (font instanceof PDType3Font) + { + // It is difficult to calculate the real individual glyph bounds for type 3 fonts + // because these are not vector fonts, the content stream could contain almost anything + // that is found in page content streams. + PDType3Font t3Font = (PDType3Font) font; + PDType3CharProc charProc = t3Font.getCharProc(code); + if (charProc != null) + { + BoundingBox fontBBox = t3Font.getBoundingBox(); + PDRectangle glyphBBox = charProc.getGlyphBBox(); + if (glyphBBox != null) + { + // PDFBOX-3850: glyph bbox could be larger than the font bbox + glyphBBox.setLowerLeftX(Math.max(fontBBox.getLowerLeftX(), glyphBBox.getLowerLeftX())); + glyphBBox.setLowerLeftY(Math.max(fontBBox.getLowerLeftY(), glyphBBox.getLowerLeftY())); + glyphBBox.setUpperRightX(Math.min(fontBBox.getUpperRightX(), glyphBBox.getUpperRightX())); + glyphBBox.setUpperRightY(Math.min(fontBBox.getUpperRightY(), glyphBBox.getUpperRightY())); + path = glyphBBox.toGeneralPath(); + } + } + } + else if (font instanceof PDVectorFont) + { + PDVectorFont vectorFont = (PDVectorFont) font; + path = vectorFont.getPath(code); + + if (font instanceof PDTrueTypeFont) + { + PDTrueTypeFont ttFont = (PDTrueTypeFont) font; + int unitsPerEm = ttFont.getTrueTypeFont().getHeader().getUnitsPerEm(); + at.scale(1000d / unitsPerEm, 1000d / unitsPerEm); + } + if (font instanceof PDType0Font) + { + PDType0Font t0font = (PDType0Font) font; + if (t0font.getDescendantFont() instanceof PDCIDFontType2) + { + int unitsPerEm = ((PDCIDFontType2) t0font.getDescendantFont()).getTrueTypeFont().getHeader().getUnitsPerEm(); + at.scale(1000d / unitsPerEm, 1000d / unitsPerEm); + } + } + } + else if (font instanceof PDSimpleFont) + { + PDSimpleFont simpleFont = (PDSimpleFont) font; + + // these two lines do not always work, e.g. for the TT fonts in file 032431.pdf + // which is why PDVectorFont is tried first. + String name = simpleFont.getEncoding().getName(code); + path = simpleFont.getPath(name); + } + else + { + // shouldn't happen, please open issue in JIRA + System.out.println("Unknown font class: " + font.getClass()); + } + if (path == null) + { + return null; + } + return at.createTransformedShape(path.getBounds2D()); + } + + private void stripPage(int page) throws IOException + { + PDFRenderer pdfRenderer = new PDFRenderer(document); + image = pdfRenderer.renderImage(page, SCALE); + + PDPage pdPage = document.getPage(page); + PDRectangle cropBox = pdPage.getCropBox(); + + // flip y-axis + flipAT = new AffineTransform(); + flipAT.translate(0, pdPage.getBBox().getHeight()); + flipAT.scale(1, -1); + + // page may be rotated + rotateAT = new AffineTransform(); + int rotation = pdPage.getRotation(); + if (rotation != 0) + { + PDRectangle mediaBox = pdPage.getMediaBox(); + switch (rotation) + { + case 90: + rotateAT.translate(mediaBox.getHeight(), 0); + break; + case 270: + rotateAT.translate(0, mediaBox.getWidth()); + break; + case 180: + rotateAT.translate(mediaBox.getWidth(), mediaBox.getHeight()); + break; + default: + break; + } + rotateAT.rotate(Math.toRadians(rotation)); + } + + // cropbox + transAT = AffineTransform.getTranslateInstance(-cropBox.getLowerLeftX(), cropBox.getLowerLeftY()); + + g2d = image.createGraphics(); + g2d.setStroke(new BasicStroke(0.1f)); + g2d.scale(SCALE, SCALE); + + setStartPage(page + 1); + setEndPage(page + 1); + + Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream()); + writeText(document, dummy); + + // beads in green + g2d.setStroke(new BasicStroke(0.4f)); + List pageArticles = pdPage.getThreadBeads(); + for (PDThreadBead bead : pageArticles) + { + if (bead == null) + { + continue; + } + PDRectangle r = bead.getRectangle(); + Shape s = r.toGeneralPath().createTransformedShape(transAT); + s = flipAT.createTransformedShape(s); + s = rotateAT.createTransformedShape(s); + g2d.setColor(Color.green); + g2d.draw(s); + } + + g2d.dispose(); + + String imageFilename = filename; + int pt = imageFilename.lastIndexOf('.'); + imageFilename = imageFilename.substring(0, pt) + "-marked-" + (page + 1) + ".png"; + ImageIO.write(image, "png", new File(imageFilename)); + } + + /** + * Override the default functionality of PDFTextStripper. + */ + @Override + protected void writeString(String string, List textPositions) throws IOException + { + for (TextPosition text : textPositions) + { + System.out.println("String[" + text.getXDirAdj() + "," + + text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + + text.getXScale() + " height=" + text.getHeightDir() + " space=" + + text.getWidthOfSpace() + " width=" + + text.getWidthDirAdj() + "]" + text.getUnicode()); + + // glyph space -> user space + // note: text.getTextMatrix() is *not* the Text Matrix, it's the Text Rendering Matrix + AffineTransform at = text.getTextMatrix().createAffineTransform(); + + // in red: + // show rectangles with the "height" (not a real height, but used for text extraction + // heuristics, it is 1/2 of the bounding box height and starts at y=0) + Rectangle2D.Float rect = new Rectangle2D.Float(0, 0, + text.getWidthDirAdj() / text.getTextMatrix().getScalingFactorX(), + text.getHeightDir() / text.getTextMatrix().getScalingFactorY()); + Shape s = at.createTransformedShape(rect); + s = flipAT.createTransformedShape(s); + s = rotateAT.createTransformedShape(s); + g2d.setColor(Color.red); + g2d.draw(s); + + // in blue: + // show rectangle with the real vertical bounds, based on the font bounding box y values + // usually, the height is identical to what you see when marking text in Adobe Reader + PDFont font = text.getFont(); + BoundingBox bbox = font.getBoundingBox(); + + // advance width, bbox height (glyph space) + float xadvance = font.getWidth(text.getCharacterCodes()[0]); // todo: should iterate all chars + rect = new Rectangle2D.Float(0, bbox.getLowerLeftY(), xadvance, bbox.getHeight()); + + if (font instanceof PDType3Font) + { + // bbox and font matrix are unscaled + at.concatenate(font.getFontMatrix().createAffineTransform()); + } + else + { + // bbox and font matrix are already scaled to 1000 + at.scale(1/1000f, 1/1000f); + } + s = at.createTransformedShape(rect); + s = flipAT.createTransformedShape(s); + s = rotateAT.createTransformedShape(s); + + g2d.setColor(Color.blue); + g2d.draw(s); + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println("Usage: java " + DrawPrintTextLocations.class.getName() + " "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextByArea.java b/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextByArea.java new file mode 100644 index 00000000000..7369bef060c --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextByArea.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.awt.Rectangle; +import java.io.File; +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.text.PDFTextStripperByArea; + +/** + * This is an example on how to extract text from a specific area on the PDF document. + * + * @author Ben Litchfield + */ +public final class ExtractTextByArea +{ + private ExtractTextByArea() + { + //utility class and should not be constructed. + } + + + /** + * This will print the documents text in a certain area. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PDFTextStripperByArea stripper = new PDFTextStripperByArea(); + stripper.setSortByPosition( true ); + Rectangle rect = new Rectangle( 10, 280, 275, 60 ); + stripper.addRegion( "class1", rect ); + PDPage firstPage = document.getPage(0); + stripper.extractRegions( firstPage ); + System.out.println( "Text in the area:" + rect ); + System.out.println( stripper.getTextForRegion( "class1" ) ); + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + ExtractTextByArea.class.getName() + " " ); + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextSimple.java b/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextSimple.java new file mode 100644 index 00000000000..78a77de7679 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextSimple.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.File; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; +import org.apache.pdfbox.text.PDFTextStripper; + +/** + * This is a simple text extraction example to get started. For more advance usage, see the + * ExtractTextByArea and the DrawPrintTextLocations examples in this subproject, as well as the + * ExtractText tool in the tools subproject. + * + * @author Tilman Hausherr + */ +public class ExtractTextSimple +{ + private ExtractTextSimple() + { + // example class should not be instantiated + } + + /** + * This will print the documents text page by page. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing or extracting the document. + */ + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + usage(); + } + + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + AccessPermission ap = document.getCurrentAccessPermission(); + if (!ap.canExtractContent()) + { + throw new IOException("You do not have permission to extract text"); + } + + PDFTextStripper stripper = new PDFTextStripper(); + + // This example uses sorting, but in some cases it is more useful to switch it off, + // e.g. in some files with columns where the PDF content stream respects the + // column order. + stripper.setSortByPosition(true); + + for (int p = 1; p <= document.getNumberOfPages(); ++p) + { + // Set the page interval to extract. If you don't, then all pages would be extracted. + stripper.setStartPage(p); + stripper.setEndPage(p); + + // let the magic happen + String text = stripper.getText(document); + + // do some nice output with a header + String pageStr = String.format("page %d:", p); + System.out.println(pageStr); + for (int i = 0; i < pageStr.length(); ++i) + { + System.out.print("-"); + } + System.out.println(); + System.out.println(text.trim()); + System.out.println(); + + // If the extracted text is empty or gibberish, please try extracting text + // with Adobe Reader first before asking for help. Also read the FAQ + // on the website: + // https://pdfbox.apache.org/2.0/faq.html#text-extraction + } + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println("Usage: java " + ExtractTextSimple.class.getName() + " "); + System.exit(-1); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/PDFHighlighter.java b/examples/src/main/java/org/apache/pdfbox/examples/util/PDFHighlighter.java new file mode 100644 index 00000000000..5676d0b6f75 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/PDFHighlighter.java @@ -0,0 +1,162 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.text.PDFTextStripper; + + +/** + * Highlighting of words in a PDF document with an XML file. + * + * @author slagraulet (slagraulet@cardiweb.com) + * @author Ben Litchfield + * + * @see + * Adobe Highlight File Format + */ +public class PDFHighlighter extends PDFTextStripper +{ + private Writer highlighterOutput = null; + + private String[] searchedWords; + private ByteArrayOutputStream textOS = null; + private Writer textWriter = null; + private static final String ENCODING = "UTF-16"; + + /** + * Default constructor. + * + * @throws IOException If there is an error constructing this class. + */ + public PDFHighlighter() throws IOException + { + super.setLineSeparator( "" ); + super.setWordSeparator( "" ); + super.setShouldSeparateByBeads( false ); + super.setSuppressDuplicateOverlappingText( false ); + } + + /** + * Generate an XML highlight string based on the PDF. + * + * @param pdDocument The PDF to find words in. + * @param highlightWord The word to search for. + * @param xmlOutput The resulting output xml file. + * + * @throws IOException If there is an error reading from the PDF, or writing to the XML. + */ + public void generateXMLHighlight(PDDocument pdDocument, String highlightWord, Writer xmlOutput ) throws IOException + { + generateXMLHighlight( pdDocument, new String[] { highlightWord }, xmlOutput ); + } + + /** + * Generate an XML highlight string based on the PDF. + * + * @param pdDocument The PDF to find words in. + * @param sWords The words to search for. + * @param xmlOutput The resulting output xml file. + * + * @throws IOException If there is an error reading from the PDF, or writing to the XML. + */ + public void generateXMLHighlight(PDDocument pdDocument, String[] sWords, Writer xmlOutput ) throws IOException + { + highlighterOutput = xmlOutput; + searchedWords = sWords; + highlighterOutput.write("\n\n\n"); + textOS = new ByteArrayOutputStream(); + textWriter = new OutputStreamWriter( textOS, ENCODING); + writeText(pdDocument, textWriter); + highlighterOutput.write("\n\n"); + highlighterOutput.flush(); + } + + /** + * {@inheritDoc} + */ + @Override + protected void endPage( PDPage pdPage ) throws IOException + { + textWriter.flush(); + + String page = new String( textOS.toByteArray(), ENCODING ); + textOS.reset(); + + // Traitement des listes à puces (caractères spéciaux) + if (page.indexOf('a') != -1) + { + page = page.replaceAll("a[0-9]{1,3}", "."); + } + for (String searchedWord : searchedWords) + { + Pattern pattern = Pattern.compile(searchedWord, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(page); + while( matcher.find() ) + { + int begin = matcher.start(); + int end = matcher.end(); + highlighterOutput.write(" \n"); + } + } + } + + /** + * Command line application. + * + * @param args The command line arguments to the application. + * + * @throws IOException If there is an error generating the highlight file. + */ + public static void main(String[] args) throws IOException + { + PDFHighlighter xmlExtractor = new PDFHighlighter(); + if (args.length < 2) + { + usage(); + } + String[] highlightStrings = new String[args.length - 1]; + System.arraycopy(args, 1, highlightStrings, 0, highlightStrings.length); + try (PDDocument doc = PDDocument.load(new File(args[0]))) + { + xmlExtractor.generateXMLHighlight( + doc, + highlightStrings, + new OutputStreamWriter( System.out ) ); + } + } + + private static void usage() + { + System.err.println( "usage: java " + PDFHighlighter.class.getName() + " word1 word2 word3 ..." ); + System.exit( 1 ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/PDFMergerExample.java b/examples/src/main/java/org/apache/pdfbox/examples/util/PDFMergerExample.java new file mode 100644 index 00000000000..a617a4577e6 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/PDFMergerExample.java @@ -0,0 +1,162 @@ +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.multipdf.PDFMergerUtility; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.xmpbox.XMPMetadata; +import org.apache.xmpbox.schema.DublinCoreSchema; +import org.apache.xmpbox.schema.PDFAIdentificationSchema; +import org.apache.xmpbox.schema.XMPBasicSchema; +import org.apache.xmpbox.type.BadFieldValueException; +import org.apache.xmpbox.xml.XmpSerializer; + +import java.util.Calendar; +import java.util.List; +import javax.xml.transform.TransformerException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.io.IOUtils; + +/** + * + * This example demonstrates the use of the new methods {@link PDFMergerUtility#setDestinationDocumentInformation(org.apache.pdfbox.pdmodel.PDDocumentInformation) + * } and {@link PDFMergerUtility#setDestinationMetadata(org.apache.pdfbox.pdmodel.common.PDMetadata) + * } that were added in April 2016. These allow to control the meta data in a merge without having + * to reopen the result file. + * + * @author Alexander Kriegisch + */ +public class PDFMergerExample +{ + private static final Log LOG = LogFactory.getLog(PDFMergerExample.class); + + /** + * Creates a compound PDF document from a list of input documents. + *

+ * The merged document is PDF/A-1b compliant, provided the source documents are as well. It + * contains document properties title, creator and subject, currently hard-coded. + * + * @param sources list of source PDF document streams. + * @return compound PDF document as a readable input stream. + * @throws IOException if anything goes wrong during PDF merge. + */ + public InputStream merge(final List sources) throws IOException + { + String title = "My title"; + String creator = "Alexander Kriegisch"; + String subject = "Subject with umlauts ÄÖÜ"; + + ByteArrayOutputStream mergedPDFOutputStream = null; + COSStream cosStream = null; + try + { + // If you're merging in a servlet, you can modify this example to use the outputStream only + // as the response as shown here: http://stackoverflow.com/a/36894346/535646 + mergedPDFOutputStream = new ByteArrayOutputStream(); + cosStream = new COSStream(); + + PDFMergerUtility pdfMerger = createPDFMergerUtility(sources, mergedPDFOutputStream); + + // PDF and XMP properties must be identical, otherwise document is not PDF/A compliant + PDDocumentInformation pdfDocumentInfo = createPDFDocumentInfo(title, creator, subject); + PDMetadata xmpMetadata = createXMPMetadata(cosStream, title, creator, subject); + pdfMerger.setDestinationDocumentInformation(pdfDocumentInfo); + pdfMerger.setDestinationMetadata(xmpMetadata); + + LOG.info("Merging " + sources.size() + " source documents into one PDF"); + pdfMerger.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); + LOG.info("PDF merge successful, size = {" + mergedPDFOutputStream.size() + "} bytes"); + + return new ByteArrayInputStream(mergedPDFOutputStream.toByteArray()); + } + catch (BadFieldValueException | TransformerException e) + { + throw new IOException("PDF merge problem", e); + } + finally + { + for (InputStream source : sources) + { + IOUtils.closeQuietly(source); + } + IOUtils.closeQuietly(cosStream); + IOUtils.closeQuietly(mergedPDFOutputStream); + } + } + + private PDFMergerUtility createPDFMergerUtility(List sources, ByteArrayOutputStream mergedPDFOutputStream) + { + LOG.info("Initialising PDF merge utility"); + PDFMergerUtility pdfMerger = new PDFMergerUtility(); + pdfMerger.addSources(sources); + pdfMerger.setDestinationStream(mergedPDFOutputStream); + return pdfMerger; + } + + private PDDocumentInformation createPDFDocumentInfo(String title, String creator, String subject) + { + LOG.info("Setting document info (title, author, subject) for merged PDF"); + PDDocumentInformation documentInformation = new PDDocumentInformation(); + documentInformation.setTitle(title); + documentInformation.setCreator(creator); + documentInformation.setSubject(subject); + return documentInformation; + } + + private PDMetadata createXMPMetadata(COSStream cosStream, String title, String creator, String subject) + throws BadFieldValueException, TransformerException, IOException + { + LOG.info("Setting XMP metadata (title, author, subject) for merged PDF"); + XMPMetadata xmpMetadata = XMPMetadata.createXMPMetadata(); + + // PDF/A-1b properties + PDFAIdentificationSchema pdfaSchema = xmpMetadata.createAndAddPFAIdentificationSchema(); + pdfaSchema.setPart(1); + pdfaSchema.setConformance("B"); + + // Dublin Core properties + DublinCoreSchema dublinCoreSchema = xmpMetadata.createAndAddDublinCoreSchema(); + dublinCoreSchema.setTitle(title); + dublinCoreSchema.addCreator(creator); + dublinCoreSchema.setDescription(subject); + + // XMP Basic properties + XMPBasicSchema basicSchema = xmpMetadata.createAndAddXMPBasicSchema(); + Calendar creationDate = Calendar.getInstance(); + basicSchema.setCreateDate(creationDate); + basicSchema.setModifyDate(creationDate); + basicSchema.setMetadataDate(creationDate); + basicSchema.setCreatorTool(creator); + + // Create and return XMP data structure in XML format + try (ByteArrayOutputStream xmpOutputStream = new ByteArrayOutputStream(); + OutputStream cosXMPStream = cosStream.createOutputStream()) + { + new XmpSerializer().serialize(xmpMetadata, xmpOutputStream, true); + cosXMPStream.write(xmpOutputStream.toByteArray()); + return new PDMetadata(cosStream); + } + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java b/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java new file mode 100644 index 00000000000..4a520ba16e6 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.contentstream.operator.DrawObject; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.PDFStreamEngine; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.state.Concatenate; +import org.apache.pdfbox.contentstream.operator.state.Restore; +import org.apache.pdfbox.contentstream.operator.state.Save; +import org.apache.pdfbox.contentstream.operator.state.SetGraphicsStateParameters; +import org.apache.pdfbox.contentstream.operator.state.SetMatrix; + +/** + * This is an example on how to get the x/y coordinates of image locations. + * + * @author Ben Litchfield + */ +public class PrintImageLocations extends PDFStreamEngine +{ + /** + * Default constructor. + * + * @throws IOException If there is an error loading text stripper properties. + */ + public PrintImageLocations() throws IOException + { + addOperator(new Concatenate()); + addOperator(new DrawObject()); + addOperator(new SetGraphicsStateParameters()); + addOperator(new Save()); + addOperator(new Restore()); + addOperator(new SetMatrix()); + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PrintImageLocations printer = new PrintImageLocations(); + int pageNum = 0; + for( PDPage page : document.getPages() ) + { + pageNum++; + System.out.println( "Processing page: " + pageNum ); + printer.processPage(page); + } + } + } + } + + /** + * This is used to handle an operation. + * + * @param operator The operation to perform. + * @param operands The list of arguments. + * + * @throws IOException If there is an error processing the operation. + */ + @Override + protected void processOperator( Operator operator, List operands) throws IOException + { + String operation = operator.getName(); + if (OperatorName.DRAW_OBJECT.equals(operation)) + { + COSName objectName = (COSName) operands.get( 0 ); + PDXObject xobject = getResources().getXObject( objectName ); + if( xobject instanceof PDImageXObject) + { + PDImageXObject image = (PDImageXObject)xobject; + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); + System.out.println("*******************************************************************"); + System.out.println("Found image [" + objectName.getName() + "]"); + + Matrix ctmNew = getGraphicsState().getCurrentTransformationMatrix(); + float imageXScale = ctmNew.getScalingFactorX(); + float imageYScale = ctmNew.getScalingFactorY(); + + // position in user space units. 1 unit = 1/72 inch at 72 dpi + System.out.println("position in PDF = " + ctmNew.getTranslateX() + ", " + ctmNew.getTranslateY() + " in user space units"); + // raw size in pixels + System.out.println("raw image size = " + imageWidth + ", " + imageHeight + " in pixels"); + // displayed size in user space units + System.out.println("displayed size = " + imageXScale + ", " + imageYScale + " in user space units"); + // displayed size in inches at 72 dpi rendering + imageXScale /= 72; + imageYScale /= 72; + System.out.println("displayed size = " + imageXScale + ", " + imageYScale + " in inches at 72 dpi rendering"); + // displayed size in millimeters at 72 dpi rendering + imageXScale *= 25.4; + imageYScale *= 25.4; + System.out.println("displayed size = " + imageXScale + ", " + imageYScale + " in millimeters at 72 dpi rendering"); + System.out.println(); + } + else if(xobject instanceof PDFormXObject) + { + PDFormXObject form = (PDFormXObject)xobject; + showForm(form); + } + } + else + { + super.processOperator( operator, operands); + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + PrintImageLocations.class.getName() + " " ); + } + +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextColors.java b/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextColors.java new file mode 100644 index 00000000000..e7ec6a2f628 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextColors.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColor; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColorN; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColorSpace; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceCMYKColor; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceGrayColor; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceRGBColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingColorN; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingColorSpace; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingDeviceCMYKColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingDeviceGrayColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingDeviceRGBColor; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; +import org.apache.pdfbox.text.PDFTextStripper; +import org.apache.pdfbox.text.TextPosition; + +/** + * This is an example on how to get the colors of text. Note that this will not tell the background, + * and will only work properly if the text is not overwritten later, and only if the text rendering + * modes are 0, 1 or 2. In the PDF 32000 specification, please read 9.3.6 "Text Rendering Mode" to + * know more. Mode 0 (FILL) is the default. Mode 1 (STROKE) will make glyphs look "hollow". Mode 2 + * (FILL_STROKE) will make glyphs look "fat". + * + * @author Ben Litchfield + * @author Tilman Hausherr + */ +public class PrintTextColors extends PDFTextStripper +{ + /** + * Instantiate a new PDFTextStripper object. + * + * @throws IOException If there is an error loading the properties. + */ + public PrintTextColors() throws IOException + { + addOperator(new SetStrokingColorSpace()); + addOperator(new SetNonStrokingColorSpace()); + addOperator(new SetStrokingDeviceCMYKColor()); + addOperator(new SetNonStrokingDeviceCMYKColor()); + addOperator(new SetNonStrokingDeviceRGBColor()); + addOperator(new SetStrokingDeviceRGBColor()); + addOperator(new SetNonStrokingDeviceGrayColor()); + addOperator(new SetStrokingDeviceGrayColor()); + addOperator(new SetStrokingColor()); + addOperator(new SetStrokingColorN()); + addOperator(new SetNonStrokingColor()); + addOperator(new SetNonStrokingColorN()); + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main(String[] args) throws IOException + { + if (args.length != 1) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PDFTextStripper stripper = new PrintTextColors(); + stripper.setSortByPosition(true); + stripper.setStartPage(0); + stripper.setEndPage(document.getNumberOfPages()); + + Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream()); + stripper.writeText(document, dummy); + } + } + } + + @Override + protected void processTextPosition(TextPosition text) + { + super.processTextPosition(text); + + PDColor strokingColor = getGraphicsState().getStrokingColor(); + PDColor nonStrokingColor = getGraphicsState().getNonStrokingColor(); + String unicode = text.getUnicode(); + RenderingMode renderingMode = getGraphicsState().getTextState().getRenderingMode(); + System.out.println("Unicode: " + unicode); + System.out.println("Rendering mode: " + renderingMode); + System.out.println("Stroking color: " + strokingColor); + System.out.println("Non-Stroking color: " + nonStrokingColor); + System.out.println("Non-Stroking color: " + nonStrokingColor); + System.out.println(); + + // See the PrintTextLocations for more attributes + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println("Usage: java " + PrintTextColors.class.getName() + " "); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextLocations.java b/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextLocations.java new file mode 100644 index 00000000000..a1cd9be7455 --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextLocations.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.List; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.text.PDFTextStripper; +import org.apache.pdfbox.text.TextPosition; + +/** + * This is an example on how to get some x/y coordinates of text. + * + * @author Ben Litchfield + */ +public class PrintTextLocations extends PDFTextStripper +{ + /** + * Instantiate a new PDFTextStripper object. + * + * @throws IOException If there is an error loading the properties. + */ + public PrintTextLocations() throws IOException + { + } + + /** + * This will print the documents data. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main( String[] args ) throws IOException + { + if( args.length != 1 ) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + PDFTextStripper stripper = new PrintTextLocations(); + stripper.setSortByPosition( true ); + stripper.setStartPage( 0 ); + stripper.setEndPage( document.getNumberOfPages() ); + + Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream()); + stripper.writeText(document, dummy); + } + } + } + + /** + * Override the default functionality of PDFTextStripper. + */ + @Override + protected void writeString(String string, List textPositions) throws IOException + { + for (TextPosition text : textPositions) + { + System.out.println( "String[" + text.getXDirAdj() + "," + + text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + + text.getXScale() + " height=" + text.getHeightDir() + " space=" + + text.getWidthOfSpace() + " width=" + + text.getWidthDirAdj() + "]" + text.getUnicode() ); + } + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( "Usage: java " + PrintTextLocations.class.getName() + " " ); + } +} diff --git a/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java b/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java new file mode 100644 index 00000000000..dcb6be20dad --- /dev/null +++ b/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java @@ -0,0 +1,173 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.util; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.contentstream.PDContentStream; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdfwriter.ContentStreamWriter; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; + +/** + * This is an example on how to remove all text from PDF document. + * + * @author Ben Litchfield + */ +public final class RemoveAllText +{ + /** + * Default constructor. + */ + private RemoveAllText() + { + // example class should not be instantiated + } + + /** + * This will remove all text from a PDF document. + * + * @param args The command line arguments. + * + * @throws IOException If there is an error parsing the document. + */ + public static void main(String[] args) throws IOException + { + if (args.length != 2) + { + usage(); + } + else + { + try (PDDocument document = PDDocument.load(new File(args[0]))) + { + if (document.isEncrypted()) + { + System.err.println( + "Error: Encrypted documents are not supported for this example."); + System.exit(1); + } + for (PDPage page : document.getPages()) + { + List newTokens = createTokensWithoutText(page); + PDStream newContents = new PDStream(document); + writeTokensToStream(newContents, newTokens); + page.setContents(newContents); + processResources(page.getResources()); + } + document.save(args[1]); + } + } + } + + private static void processResources(PDResources resources) throws IOException + { + for (COSName name : resources.getXObjectNames()) + { + PDXObject xobject = resources.getXObject(name); + if (xobject instanceof PDFormXObject) + { + PDFormXObject formXObject = (PDFormXObject) xobject; + writeTokensToStream(formXObject.getContentStream(), + createTokensWithoutText(formXObject)); + processResources(formXObject.getResources()); + } + } + for (COSName name : resources.getPatternNames()) + { + PDAbstractPattern pattern = resources.getPattern(name); + if (pattern instanceof PDTilingPattern) + { + PDTilingPattern tilingPattern = (PDTilingPattern) pattern; + writeTokensToStream(tilingPattern.getContentStream(), + createTokensWithoutText(tilingPattern)); + processResources(tilingPattern.getResources()); + } + } + } + + private static void writeTokensToStream(PDStream newContents, List newTokens) throws IOException + { + try (OutputStream out = newContents.createOutputStream(COSName.FLATE_DECODE)) + { + ContentStreamWriter writer = new ContentStreamWriter(out); + writer.writeTokens(newTokens); + } + } + + private static List createTokensWithoutText(PDContentStream contentStream) throws IOException + { + PDFStreamParser parser = new PDFStreamParser(contentStream.getContents()); + Object token = parser.parseNextToken(); + List newTokens = new ArrayList<>(); + while (token != null) + { + if (token instanceof Operator) + { + Operator op = (Operator) token; + String opName = op.getName(); + if (OperatorName.SHOW_TEXT_ADJUSTED.equals(opName) + || OperatorName.SHOW_TEXT.equals(opName) + || OperatorName.SHOW_TEXT_LINE.equals(opName)) + { + // remove the argument to this operator + newTokens.remove(newTokens.size() - 1); + + token = parser.parseNextToken(); + continue; + } + else if (OperatorName.SHOW_TEXT_LINE_AND_SPACE.equals(opName)) + { + // remove the 3 arguments to this operator + newTokens.remove(newTokens.size() - 1); + newTokens.remove(newTokens.size() - 1); + newTokens.remove(newTokens.size() - 1); + + token = parser.parseNextToken(); + continue; + } + } + newTokens.add(token); + token = parser.parseNextToken(); + } + return newTokens; + } + + /** + * This will print the usage for this document. + */ + private static void usage() + { + System.err.println( + "Usage: java " + RemoveAllText.class.getName() + " "); + } + +} diff --git a/src/org/pdfbox/examples/util/package.html b/examples/src/main/java/org/apache/pdfbox/examples/util/package.html similarity index 100% rename from src/org/pdfbox/examples/util/package.html rename to examples/src/main/java/org/apache/pdfbox/examples/util/package.html diff --git a/examples/src/main/resources/org/apache/pdfbox/examples/interactive/form/FillFormField.pdf b/examples/src/main/resources/org/apache/pdfbox/examples/interactive/form/FillFormField.pdf new file mode 100644 index 00000000000..99dcebdbf1f Binary files /dev/null and b/examples/src/main/resources/org/apache/pdfbox/examples/interactive/form/FillFormField.pdf differ diff --git a/examples/src/main/resources/org/apache/pdfbox/examples/rendering/custom-render-demo.pdf b/examples/src/main/resources/org/apache/pdfbox/examples/rendering/custom-render-demo.pdf new file mode 100644 index 00000000000..765b8531e5b Binary files /dev/null and b/examples/src/main/resources/org/apache/pdfbox/examples/rendering/custom-render-demo.pdf differ diff --git a/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc new file mode 100644 index 00000000000..6f3efbf02db Binary files /dev/null and b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc differ diff --git a/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.COPYING b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.COPYING new file mode 100644 index 00000000000..2c71be612da --- /dev/null +++ b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.COPYING @@ -0,0 +1,45 @@ +The profiles in the base directory are provided according to different licenses. + + +Group A +sRGB, LCMSLAB.ICM, LCMSXYZ.ICM, the compatibleWithAdobeRGB.icc and the +Gray.icc, CineonLog_M*.icc, CineLogCurve.icc profiles are all zlib licensed. +Even though it is highly recommended to rename them before editing. + + +Group B +The eciRGB*.icc profiles come with their license in license.rtf. + + +Group C +PhotoGamutRGB_avg6c.icc is licensed to be distributed freely. Modifications +are not allowed. + + + +Additionally all profiles come with the following disclaimer. The provided +ICC Profiles in the package are called DATA in the folling statement. + + + NO WARRANTY + + BECAUSE THE DATA IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE DATA, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE DATA "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 DATA IS WITH YOU. SHOULD THE +DATA PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. 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 DATA 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 DATA (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 DATA TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + diff --git a/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.LICENSE-ZLIB b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.LICENSE-ZLIB new file mode 100644 index 00000000000..3b357a1d687 --- /dev/null +++ b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.LICENSE-ZLIB @@ -0,0 +1,23 @@ +The zlib/libpng License + +Copyright (c) 2008 Kai-Uwe Behrmann + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + diff --git a/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.README b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.README new file mode 100644 index 00000000000..7c29edcdacb --- /dev/null +++ b/examples/src/main/resources/org/apache/pdfbox/resources/pdfa/sRGB.icc.README @@ -0,0 +1,12 @@ +Included are profiles created by Marti Maria (littleCMS) : + + # CIE*Lab + # CIE*XYZ + # sRGB + +Various contributors: + + # LStar-RGB from ColorSolutions + # Photogamut-RGB from the Photogamut workgroup + # Cineon and Gray from Kai-Uwe Behrmann + # compatibleWithAdobeRGB1998 from Graeme Gill diff --git a/examples/src/main/resources/org/apache/pdfbox/resources/ttf/Lohit-Bengali.ttf b/examples/src/main/resources/org/apache/pdfbox/resources/ttf/Lohit-Bengali.ttf new file mode 100644 index 00000000000..fa0f51627e7 Binary files /dev/null and b/examples/src/main/resources/org/apache/pdfbox/resources/ttf/Lohit-Bengali.ttf differ diff --git a/examples/src/main/resources/org/apache/pdfbox/resources/ttf/bengali-samples.txt b/examples/src/main/resources/org/apache/pdfbox/resources/ttf/bengali-samples.txt new file mode 100644 index 00000000000..d6b415b08c2 --- /dev/null +++ b/examples/src/main/resources/org/apache/pdfbox/resources/ttf/bengali-samples.txt @@ -0,0 +1,105 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file contains bengali text, and is used for testing the correctness of PDF generation +# using the Gsub system, specially rendering of compound characters +# + + +দুই বিঘা জমি + +শুধু বিঘে দুই ছিল মোর ভুঁই আর সবই গেছে ঋণে। +বাবু বলিলেন , ‘ বুঝেছ উপেন , এ জমি লইব কিনে। ' +কহিলাম আমি , ‘ তুমি ভূস্বামী , ভূমির অন্ত নাই। +চেয়ে দেখো মোর আছে বড়ো - জোর মরিবার মতো ঠাঁই। ' +শুনি রাজা কহে , ‘ বাপু , জানো তো হে , করেছি বাগানখানা +পেলে দুই বিঘে প্রস্থ ও দিঘে সমান হইবে টানা — +ওটা দিতে হবে। ' কহিলাম তবে বক্ষে জুড়িয়া পাণি +সজল চক্ষে , ‘ করুণ রক্ষে গরিবের ভিটেখানি । +সপ্ত পুরুষ যেথায় মানুষ সে মাটি সোনার বাড়া , +দৈন্যের দায়ে বেচিব সে মায়ে এমনি লক্ষ্মীছাড়া ! ' +আঁখি করি লাল রাজা ক্ষণকাল রহিল মৌনভাবে , +কহিলেন শেষে ক্রূর হাসি হেসে , ‘ আচ্ছা , সে দেখা যাবে। ' + +পরে মাস দেড়ে ভিটে মাটি ছেড়ে বাহির হইনু পথে — +করিল ডিক্রি , সকলই বিক্রি মিথ্যা দেনার খতে। +এ জগতে , হায় , সেই বেশি চায় আছে যার ভূরি ভূরি — +রাজার হস্ত করে সমস্ত কাঙালের ধন চুরি। +মনে ভাবিলাম মোরে ভগবান রাখিবে না মোহগর্তে , +তাই লিখি দিল বিশ্বনিখিল দু বিঘার পরিবর্তে । +সন্ন্যাসীবেশে ফিরি দেশে দেশে হইয়া সাধুর শিষ্য +কত হেরিলাম মনোহর ধাম , কত মনোরম দৃশ্য ! +ভূধরে সাগরে বিজনে নগরে যখন যেখানে ভ্রমি +তবু নিশিদিনে ভুলিতে পারি নে সেই দুই বিঘা জমি। +হাটে মাঠে বাটে এই মতো কাটে বছর পনেরো - ষোলো — +একদিন শেষে ফিরিবারে দেশে বড়ই বাসনা হল। + +নমোনমো নম সুন্দরী মম জননী বঙ্গভূমি ! +গঙ্গার তীর স্নিগ্ধ সমীর , জীবন জুড়ালে তুমি। +অবারিত মাঠ , গগনললাট চুমে তব পদধূলি , +ছায়াসুনিবিড় শান্তির নীড় ছোটো ছোটো গ্রামগুলি। + +পল্লবঘন আম্রকানন রাখালের খেলাগেহ , +স্তব্ধ অতল দিঘি কালোজল — নিশীথশীতল স্নেহ। +বুকভরা মধু বঙ্গের বধূ জল লয়ে যায় ঘরে — + +মা বলিতে প্রাণ করে আনচান , চোখে আসে জল ভরে। +দুই দিন পরে দ্বিতীয় প্রহরে প্রবেশিনু নিজগ্রামে — +কুমোরের বাড়ি দক্ষিণে ছাড়ি রথতলা করি বামে , +রাখি হাটখোলা , নন্দীর গোলা , মন্দির করি পাছে +তৃষাতুর শেষে পঁহুছিনু এসে আমার বাড়ির কাছে । + +ধিক্‌ ধিক্‌ ওরে , শতধিক্‌ তোরে , নিলাজ কুলটা ভূমি ! +যখনি যাহার তখনি তাহার , এই কি জননী তুমি ! +সে কি মনে হবে একদিন যবে ছিলে দরিদ্রমাতা +আঁচল ভরিয়া রাখিতে ধরিয়া ফল ফুল শাক পাতা ! +আজ কোন্‌ রীতে কারে ভুলাইতে ধরেছ বিলাসবেশ — +পাঁচরঙা পাতা অঞ্চলে গাঁথা , পুষ্পে খচিত কেশ ! +আমি তোর লাগি ফিরেছি বিবাগি গৃহহারা সুখহীন — +তুই হেথা বসি ওরে রাক্ষসী , হাসিয়া কাটাস দিন ! +ধনীর আদরে গরব না ধরে! এতই হয়েছ ভিন্ন +কোনোখানে লেশ নাহি অবশেষ সেদিনের কোনো চিহ্ন ! +কল্যাণময়ী ছিলে তুমি অয়ি , ক্ষুধাহরা সুধারাশি ! +যত হাসো আজ যত করো সাজ ছিলে দেবী , হলে দাসী। + +বিদীর্ণ হিয়া ফিরিয়া ফিরিয়া চারি দিকে চেয়ে দেখি — +প্রাচীরের কাছে এখনো যে আছে , সেই আমগাছ একি ! +বসি তার তলে নয়নের জলে শান্ত হইল ব্যথা , +একে একে মনে উদিল স্মরণে বালক - কালের কথা । +সেই মনে পড়ে জ্যৈষ্ঠের ঝড়ে রাত্রে নাহিকো ঘুম , +অতি ভোরে উঠি তাড়াতাড়ি ছুটি আম কুড়াবার ধুম । +সেই সুমধুর স্তব্ধ দুপুর , পাঠশালা - পলায়ন — +ভাবিলাম হায় আর কি কোথায় ফিরে পাব সে জীবন ! +সহসা বাতাস ফেলি গেল শ্বাস শাখা দুলাইয়া গাছে , + +দুটি পাকা ফল লভিল ভূতল আমার কোলের কাছে। +ভাবিলাম মনে বুঝি এতখনে আমারে চিনিল মাতা , +স্নেহের সে দানে বহু সম্মানে বারেক ঠেকানু মাথা। + +হেনকালে হায় যমদূত - প্রায় কোথা হতে এল মালী , +ঝুঁটি - বাঁধা উড়ে সপ্তম সুরে পাড়িতে লাগিল গালি। +কহিলাম তবে , ‘ আমি তো নীরবে দিয়েছি আমার সব — + দুটি ফল তার করি অধিকার , এত তারি কলরব ! ' +চিনিল না মোরে , নিয়ে গেল ধরে কাঁধে তুলি লাঠিগাছ — +বাবু ছিপ হাতে পারিষদ - সাথে ধরিতেছিলেন মাছ। +শুনি বিবরণ ক্রোধে তিনি কন , ‘ মারিয়া করিব খুন ! ' +বাবু যত বলে পারিষদ - দলে বলে তার শতগুণ। +আমি কহিলাম , ‘ শুধু দুটি আম ভিখ মাগি মহাশয় ! ' +বাবু কহে হেসে , ‘ বেটা সাধুবেশে পাকা চোর অতিশয়। ' +আমি শুনে হাসি আঁখিজলে ভাসি , এই ছিল মোর ঘটে — +তুমি মহারাজ সাধু হলে আজ , আমি আজ চোর বটে ! + diff --git a/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java b/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java new file mode 100644 index 00000000000..a3e74247056 --- /dev/null +++ b/examples/src/test/java/org/apache/pdfbox/examples/pdfa/CreatePDFATest.java @@ -0,0 +1,84 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdfa; + +import junit.framework.TestCase; + +import java.io.File; +import org.apache.pdfbox.examples.pdmodel.CreatePDFA; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.pdfbox.preflight.PreflightDocument; +import org.apache.pdfbox.preflight.ValidationResult; +import org.apache.pdfbox.preflight.ValidationResult.ValidationError; +import org.apache.pdfbox.preflight.parser.PreflightParser; +import org.apache.xmpbox.XMPMetadata; +import org.apache.xmpbox.schema.DublinCoreSchema; +import org.apache.xmpbox.xml.DomXmpParser; + +/** + * + * @author Tilman Hausherr + */ +public class CreatePDFATest extends TestCase +{ + private final String outDir = "target/test-output"; + + @Override + protected void setUp() throws Exception + { + super.setUp(); + new File(outDir).mkdirs(); + } + + /** + * Test of doIt method of class CreatePDFA. + */ + public void testCreatePDFA() throws Exception + { + System.out.println("testCreatePDFA"); + String pdfaFilename = outDir + "/PDFA.pdf"; + String message = "The quick brown fox jumps over the lazy dog äöüÄÖÜß @°^²³ {[]}"; + String dir = "../pdfbox/src/main/resources/org/apache/pdfbox/resources/ttf/"; + String fontfile = dir + "LiberationSans-Regular.ttf"; + CreatePDFA.main(new String[] { pdfaFilename, message, fontfile }); + + PreflightParser preflightParser = new PreflightParser(new File(pdfaFilename)); + preflightParser.parse(); + try (PreflightDocument preflightDocument = preflightParser.getPreflightDocument()) + { + preflightDocument.validate(); + ValidationResult result = preflightDocument.getResult(); + for (ValidationError ve : result.getErrorsList()) + { + System.err.println(ve.getErrorCode() + ": " + ve.getDetails()); + } + assertTrue("PDF file created with CreatePDFA is not valid PDF/A-1b", result.isValid()); + } + + // check the XMP metadata + try (PDDocument document = PDDocument.load(new File(pdfaFilename))) + { + PDDocumentCatalog catalog = document.getDocumentCatalog(); + PDMetadata meta = catalog.getMetadata(); + DomXmpParser xmpParser = new DomXmpParser(); + XMPMetadata metadata = xmpParser.parse(meta.createInputStream()); + DublinCoreSchema dc = metadata.getDublinCoreSchema(); + assertEquals(pdfaFilename, dc.getTitle()); + } + } +} diff --git a/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java b/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java new file mode 100644 index 00000000000..783426c1573 --- /dev/null +++ b/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestCreateSignature.java @@ -0,0 +1,479 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.examples.interactive.form.CreateSimpleForm; +import org.apache.pdfbox.examples.signature.CreateEmptySignatureForm; +import org.apache.pdfbox.examples.signature.CreateSignature; +import org.apache.pdfbox.examples.signature.CreateVisibleSignature; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.util.Hex; +import org.apache.wink.client.MockHttpServer; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSProcessableByteArray; +import org.bouncycastle.cms.CMSSignedData; +import org.bouncycastle.cms.SignerInformation; +import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder; +import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.tsp.TSPValidationException; +import org.bouncycastle.util.Selector; +import org.bouncycastle.util.Store; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +/** + * Test for CreateSignature. Each test case will run twice: once with SignatureInterface + * and once using external signature creation scenario. + */ +@RunWith(Parameterized.class) +public class TestCreateSignature +{ + private static final String inDir = "src/test/resources/org/apache/pdfbox/examples/signature/"; + private static final String outDir = "target/test-output/"; + private static final String keystorePath = inDir + "keystore.p12"; + private static final String jpegPath = inDir + "stamp.jpg"; + private static final String password = "123456"; + private static Certificate certificate; + + @Parameterized.Parameter + public boolean externallySign; + + /** + * Values for {@link #externallySign} test parameter to specify if signing should be conducted + * using externally signing scenario ({@code true}) or SignatureInterface ({@code false}). + */ + @Parameterized.Parameters + public static Collection signingTypes() + { + return Arrays.asList(false, true); + } + + @BeforeClass + public static void init() throws Exception + { + new File("target/test-output").mkdirs(); + + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(keystorePath), password.toCharArray()); + certificate = keystore.getCertificateChain(keystore.aliases().nextElement())[0]; + } + + /** + * Signs a PDF using the "adbe.pkcs7.detached" SubFilter with the SHA-256 digest. + * + * @throws IOException + * @throws GeneralSecurityException + * @throws CMSException + * @throws OperatorCreationException + */ + @Test + public void testDetachedSHA256() + throws IOException, CMSException, OperatorCreationException, GeneralSecurityException + { + // load the keystore + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(keystorePath), password.toCharArray()); + + // sign PDF + CreateSignature signing = new CreateSignature(keystore, password.toCharArray()); + signing.setExternalSigning(externallySign); + + final String fileName = getOutputFileName("signed{0}.pdf"); + signing.signDetached(new File(inDir + "sign_me.pdf"), new File(outDir + fileName)); + + checkSignature(new File(inDir, "sign_me.pdf"), new File(outDir, fileName)); + } + + /** + * Signs a PDF using the "adbe.pkcs7.detached" SubFilter with the SHA-256 digest and a signed + * timestamp from a Time Stamping Authority (TSA) server. + * + * This is not a complete test because we don't have the ability to return a valid response, so + * we return a cached response which is well-formed, but does not match the timestamp or nonce + * in the request. This allows us to test the basic TSA mechanism and test the nonce, which is a + * good start. + * + * @throws IOException + * @throws GeneralSecurityException + * @throws CMSException + * @throws OperatorCreationException + */ + @Test + public void testDetachedSHA256WithTSA() + throws IOException, CMSException, OperatorCreationException, GeneralSecurityException + { + byte[] content; + // mock TSA response content + try (InputStream input = new FileInputStream(inDir + "tsa_response.asn1")) + { + content = IOUtils.toByteArray(input); + } + + // mock TSA server (RFC 3161) + MockHttpServer mockServer = new MockHttpServer(15371); + mockServer.startServer(); + String tsaUrl = "http://localhost:" + mockServer.getServerPort() + "/"; + MockHttpServer.MockHttpServerResponse response = new MockHttpServer.MockHttpServerResponse(); + response.setMockResponseContent(content); + response.setMockResponseContentType("application/timestamp-reply"); + response.setMockResponseCode(200); + mockServer.setMockHttpServerResponses(response); + + // load the keystore + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(keystorePath), password.toCharArray()); + + // sign PDF (will fail due to nonce and timestamp differing) + try + { + String inPath = inDir + "sign_me_tsa.pdf"; + String outPath = outDir + getOutputFileName("signed{0}_tsa.pdf"); + CreateSignature signing = new CreateSignature(keystore, password.toCharArray()); + signing.setExternalSigning(externallySign); + signing.signDetached(new File(inPath), new File(outPath), tsaUrl); + } + catch (IOException e) + { + Assert.assertTrue(e.getCause() instanceof TSPValidationException); + } + + // TODO verify the signed PDF file + // TODO create a file signed with TSA + } + + /** + * Test creating visual signature. + * + * @throws IOException + * @throws CMSException + * @throws OperatorCreationException + * @throws GeneralSecurityException + */ + @Test + public void testCreateVisibleSignature() + throws IOException, CMSException, OperatorCreationException, GeneralSecurityException + { + // load the keystore + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(keystorePath), password.toCharArray()); + + // sign PDF + String inPath = inDir + "sign_me.pdf"; + File destFile; + try (FileInputStream fis = new FileInputStream(jpegPath)) + { + CreateVisibleSignature signing = new CreateVisibleSignature(keystore, password.toCharArray()); + signing.setVisibleSignDesigner(inPath, 0, 0, -50, fis, 1); + signing.setVisibleSignatureProperties("name", "location", "Security", 0, 1, true); + signing.setExternalSigning(externallySign); + destFile = new File(outDir + getOutputFileName("signed{0}_visible.pdf")); + signing.signPDF(new File(inPath), destFile, null); + } + + checkSignature(new File(inPath), destFile); + } + + /** + * Test when visually signing externally on an existing signature field on a file which has + * been signed before. + * + * @throws IOException + * @throws NoSuchAlgorithmException + * @throws KeyStoreException + * @throws CertificateException + * @throws UnrecoverableKeyException + * @throws CMSException + * @throws OperatorCreationException + * @throws GeneralSecurityException + */ + @Test + public void testPDFBox3978() throws IOException, NoSuchAlgorithmException, KeyStoreException, + CertificateException, UnrecoverableKeyException, + CMSException, OperatorCreationException, GeneralSecurityException + { + String filename = outDir + "EmptySignatureForm.pdf"; + String filenameSigned1 = outDir + "EmptySignatureForm-signed1.pdf"; + String filenameSigned2 = outDir + "EmptySignatureForm-signed2.pdf"; + + if (!externallySign) + { + return; + } + + // load the keystore + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(keystorePath), password.toCharArray()); + + // create file with empty signature + CreateEmptySignatureForm.main(new String[]{filename}); + + // sign PDF + CreateSignature signing1 = new CreateSignature(keystore, password.toCharArray()); + signing1.setExternalSigning(false); + signing1.signDetached(new File(filename), new File(filenameSigned1)); + + checkSignature(new File(filename), new File(filenameSigned1)); + + try (PDDocument doc1 = PDDocument.load(new File(filenameSigned1))) + { + List signatureDictionaries = doc1.getSignatureDictionaries(); + Assert.assertEquals(1, signatureDictionaries.size()); + } + + // do visual signing in the field + try (FileInputStream fis = new FileInputStream(jpegPath)) + { + CreateVisibleSignature signing2 = new CreateVisibleSignature(keystore, password.toCharArray()); + signing2.setVisibleSignDesigner(filenameSigned1, 0, 0, -50, fis, 1); + signing2.setVisibleSignatureProperties("name", "location", "Security", 0, 1, true); + signing2.setExternalSigning(externallySign); + signing2.signPDF(new File(filenameSigned1), new File(filenameSigned2), null, "Signature1"); + } + + checkSignature(new File(filenameSigned1), new File(filenameSigned2)); + + try (PDDocument doc2 = PDDocument.load(new File(filenameSigned2))) + { + List signatureDictionaries = doc2.getSignatureDictionaries(); + Assert.assertEquals(2, signatureDictionaries.size()); + } + } + + private String getOutputFileName(String filePattern) + { + return MessageFormat.format(filePattern,(externallySign ? "_ext" : "")); + } + + // This check fails with a file created with the code before PDFBOX-3011 was solved. + private void checkSignature(File origFile, File signedFile) + throws IOException, CMSException, OperatorCreationException, GeneralSecurityException + { + String origPageKey; + try (PDDocument document = PDDocument.load(origFile)) + { + // get string representation of pages COSObject + origPageKey = document.getDocumentCatalog().getCOSObject().getItem(COSName.PAGES).toString(); + } + try (PDDocument document = PDDocument.load(signedFile)) + { + // PDFBOX-4261: check that object number stays the same + Assert.assertEquals(origPageKey, document.getDocumentCatalog().getCOSObject().getItem(COSName.PAGES).toString()); + + List signatureDictionaries = document.getSignatureDictionaries(); + if (signatureDictionaries.isEmpty()) + { + Assert.fail("no signature found"); + } + for (PDSignature sig : document.getSignatureDictionaries()) + { + COSString contents = (COSString) sig.getCOSObject().getDictionaryObject(COSName.CONTENTS); + byte[] buf; + try (FileInputStream fis = new FileInputStream(signedFile)) + { + buf = sig.getSignedContent(fis); + } + // inspiration: + // http://stackoverflow.com/a/26702631/535646 + // http://stackoverflow.com/a/9261365/535646 + CMSSignedData signedData = new CMSSignedData(new CMSProcessableByteArray(buf), contents.getBytes()); + Store certificatesStore = signedData.getCertificates(); + Collection signers = signedData.getSignerInfos().getSigners(); + SignerInformation signerInformation = signers.iterator().next(); + @SuppressWarnings("unchecked") + Collection matches = certificatesStore.getMatches((Selector) signerInformation.getSID()); + X509CertificateHolder certificateHolder = (X509CertificateHolder) matches.iterator().next(); + X509Certificate certFromSignedData = new JcaX509CertificateConverter().getCertificate(certificateHolder); + Assert.assertEquals(certificate, certFromSignedData); + // CMSVerifierCertificateNotValidException means that the keystore wasn't valid at signing time + if (!signerInformation.verify(new JcaSimpleSignerInfoVerifierBuilder().build(certFromSignedData))) + { + Assert.fail("Signature verification failed"); + } + break; + } + } + } + + private String calculateDigestString(InputStream inputStream) throws NoSuchAlgorithmException, IOException + { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + return Hex.getString(md.digest(IOUtils.toByteArray(inputStream))); + } + + /** + * PDFBOX-3811: make sure that calling saveIncrementalForExternalSigning() more than once + * brings the same result. + * + * @throws IOException + * @throws NoSuchAlgorithmException + */ + @Test + public void testPDFBox3811() throws IOException, NoSuchAlgorithmException + { + if (!externallySign) + { + return; + } + + // create simple PDF + PDDocument document = new PDDocument(); + PDPage page = new PDPage(); + document.addPage(page); + new PDPageContentStream(document, page).close(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + document.save(baos); + document.close(); + + document = PDDocument.load(baos.toByteArray()); + // for stable digest + document.setDocumentId(12345L); + + PDSignature signature = new PDSignature(); + signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); + signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED); + document.addSignature(signature); + int[] reserveByteRange = signature.getByteRange(); + + String digestString = calculateDigestString(document.saveIncrementalForExternalSigning(new ByteArrayOutputStream()).getContent()); + boolean caught = false; + try + { + document.saveIncrementalForExternalSigning(new ByteArrayOutputStream()); + } + catch (IllegalStateException ex) + { + caught = true; + } + Assert.assertTrue("IllegalStateException should have been thrown", caught); + signature.setByteRange(reserveByteRange); + Assert.assertEquals(digestString, calculateDigestString(document.saveIncrementalForExternalSigning(new ByteArrayOutputStream()).getContent())); + } + + /** + * Create a simple form PDF, sign it, reload it, change a field value, incrementally save it. + * This should not break the signature, and the value and its display must have changed as + * expected. Do this both for the old and new incremental save methods. + * + * @throws Exception + */ + @Test + public void testSaveIncrementalAfterSign() throws Exception + { + BufferedImage oldImage, expectedImage1, actualImage1, expectedImage2, actualImage2; + + CreateSimpleForm.main(new String[0]); // creates "target/SimpleForm.pdf" + + // load the keystore + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(keystorePath), password.toCharArray()); + + // sign PDF + CreateSignature signing = new CreateSignature(keystore, password.toCharArray()); + signing.setExternalSigning(externallySign); + + final String fileNameSigned = getOutputFileName("SimpleForm_signed{0}.pdf"); + final String fileNameResaved1 = getOutputFileName("SimpleForm_signed{0}_incrementallyresaved1.pdf"); + final String fileNameResaved2 = getOutputFileName("SimpleForm_signed{0}_incrementallyresaved2.pdf"); + signing.signDetached(new File("target/SimpleForm.pdf"), new File(outDir + fileNameSigned)); + + checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameSigned)); + + try (PDDocument doc = PDDocument.load(new File(outDir, fileNameSigned))) + { + oldImage = new PDFRenderer(doc).renderImage(0); + + FileOutputStream fileOutputStream = new FileOutputStream(new File(outDir, fileNameResaved1)); + PDField field = doc.getDocumentCatalog().getAcroForm().getField("SampleField"); + field.setValue("New Value 1"); + + // Test of PDFBOX-4509: only "Helv" font should be there + Collection fonts = (Collection) field.getWidgets().get(0).getAppearance(). + getNormalAppearance().getAppearanceStream().getResources().getFontNames(); + Assert.assertTrue(fonts.contains(COSName.HELV)); + Assert.assertEquals(1, fonts.size()); + + expectedImage1 = new PDFRenderer(doc).renderImage(0); + + // compare images, image must has changed + Assert.assertEquals(oldImage.getWidth(), expectedImage1.getWidth()); + Assert.assertEquals(oldImage.getHeight(), expectedImage1.getHeight()); + Assert.assertEquals(oldImage.getType(), expectedImage1.getType()); + DataBufferInt expectedData = (DataBufferInt) oldImage.getRaster().getDataBuffer(); + DataBufferInt actualData = (DataBufferInt) expectedImage1.getRaster().getDataBuffer(); + Assert.assertEquals(expectedData.getData().length, actualData.getData().length); + Assert.assertFalse(Arrays.equals(expectedData.getData(), actualData.getData())); + + // old style incremental save: create a "path" from the root to the objects that need an update + doc.getDocumentCatalog().getCOSObject().setNeedToBeUpdated(true); + doc.getDocumentCatalog().getAcroForm().getCOSObject().setNeedToBeUpdated(true); + field.getCOSObject().setNeedToBeUpdated(true); + field.getWidgets().get(0).getAppearance().getCOSObject().setNeedToBeUpdated(true); + ((COSDictionary) field.getWidgets().get(0).getAppearance().getNormalAppearance().getCOSObject()).setNeedToBeUpdated(true); + doc.saveIncremental(fileOutputStream); + } + checkSignature(new File("target/SimpleForm.pdf"), new File(outDir, fileNameResaved1)); + try (PDDocument doc = PDDocument.load(new File(outDir, fileNameResaved1))) + { + PDField field = doc.getDocumentCatalog().getAcroForm().getField("SampleField"); + Assert.assertEquals("New Value 1", field.getValueAsString()); + actualImage1 = new PDFRenderer(doc).renderImage(0); + // compare images, equality proves that the appearance has been updated too + Assert.assertEquals(expectedImage1.getWidth(), actualImage1.getWidth()); + Assert.assertEquals(expectedImage1.getHeight(), actualImage1.getHeight()); + Assert.assertEquals(expectedImage1.getType(), actualImage1.getType()); + DataBufferInt expectedData = (DataBufferInt) expectedImage1.getRaster().getDataBuffer(); + DataBufferInt actualData = (DataBufferInt) actualImage1.getRaster().getDataBuffer(); + Assert.assertArrayEquals(expectedData.getData(), actualData.getData()); + } + } +} diff --git a/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java b/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java new file mode 100644 index 00000000000..5488f8aff9c --- /dev/null +++ b/examples/src/test/java/org/apache/pdfbox/examples/pdmodel/TestRubberStampWithImage.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.examples.pdmodel; + +import junit.framework.TestCase; + +import java.io.File; +import java.io.IOException; + +/** + * Test for RubberStampWithImage + */ +public class TestRubberStampWithImage extends TestCase +{ + public void test() throws IOException + { + String documentFile = "src/test/resources/org/apache/pdfbox/examples/pdmodel/document.pdf"; + String stampFile = "src/test/resources/org/apache/pdfbox/examples/pdmodel/stamp.jpg"; + String outFile = "target/test-output/TestRubberStampWithImage.pdf"; + + new File("target/test-output").mkdirs(); + + String[] args = new String[] { documentFile, outFile, stampFile }; + RubberStampWithImage rubberStamp = new RubberStampWithImage(); + rubberStamp.doIt(args); + } +} diff --git a/examples/src/test/java/org/apache/wink/client/MockHttpServer.java b/examples/src/test/java/org/apache/wink/client/MockHttpServer.java new file mode 100644 index 00000000000..12c23ae9462 --- /dev/null +++ b/examples/src/test/java/org/apache/wink/client/MockHttpServer.java @@ -0,0 +1,546 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *******************************************************************************/ + +package org.apache.wink.client; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.BindException; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.net.ServerSocketFactory; +import javax.net.ssl.SSLServerSocketFactory; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; + +/** + * Copied from + * http://svn.apache.org/repos/asf/wink/trunk/wink-component-test-support/src/main/java/org/apache/wink/client/MockHttpServer.java + * on 28.7.2018. + */ +public class MockHttpServer extends Thread { + + public static class MockHttpServerResponse { + + // mock response data + private int mockResponseCode = 200; + private final Map mockResponseHeaders = new HashMap<>(); + private byte[] mockResponseContent = "received message".getBytes(); + private String mockResponseContentType = "text/plain;charset=utf-8"; + private boolean mockResponseContentEchoRequest; + + public void setMockResponseHeaders(Map headers) { + mockResponseHeaders.clear(); + mockResponseHeaders.putAll(headers); + } + + public void setMockResponseHeader(String name, String value) { + mockResponseHeaders.put(name, value); + } + + public Map getMockResponseHeaders() { + return mockResponseHeaders; + } + + public void setMockResponseCode(int responseCode) { + this.mockResponseCode = responseCode; + } + + public int getMockResponseCode() { + return mockResponseCode; + } + + public void setMockResponseContent(String content) { + mockResponseContent = content.getBytes(); + } + + public void setMockResponseContent(byte[] content) { + mockResponseContent = content; + } + + public byte[] getMockResponseContent() { + return mockResponseContent; + } + + public void setMockResponseContentType(String type) { + mockResponseContentType = type; + } + + public String getMockResponseContentType() { + return mockResponseContentType; + } + + public void setMockResponseContentEchoRequest(boolean echo) { + mockResponseContentEchoRequest = echo; + } + + public boolean getMockResponseContentEchoRequest() { + return mockResponseContentEchoRequest; + } + } + + private Thread serverThread = null; + private ServerSocket serverSocket = null; + private boolean serverStarted = false; + private ServerSocketFactory serverSocketFactory = null; + private int serverPort; + private int readTimeOut = 5000; // 5 + // seconds + private int delayResponseTime = 0; + private static byte[] NEW_LINE = "\r\n".getBytes(); + // request data + private String requestMethod = null; + private String requestUrl = null; + private Map> requestHeaders = new HashMap<>(); + private ByteArrayOutputStream requestContent = new ByteArrayOutputStream(); + private List mockHttpServerResponses = new ArrayList<>(); + private int responseCounter = 0; + + public MockHttpServer(int serverPort) { + this(serverPort, false); + } + + public MockHttpServer(int serverPort, boolean ssl) { + mockHttpServerResponses.add(new MockHttpServerResponse()); // set a + // default + // response + this.serverPort = serverPort; + try { + serverSocketFactory = ServerSocketFactory.getDefault(); + if (ssl) { + serverSocketFactory = SSLServerSocketFactory.getDefault(); + } + while (serverSocket == null) { + try { + serverSocket = serverSocketFactory.createServerSocket(++this.serverPort); + } catch (BindException e) { + + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public synchronized void startServer() { + if (serverStarted) + return; + + // start the server thread + start(); + serverStarted = true; + + // wait for the server thread to start + waitForServerToStart(); + } + + private synchronized void waitForServerToStart() { + try { + wait(5000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + private synchronized void waitForServerToStop() { + try { + wait(5000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + @Override + public void run() { + serverThread = Thread.currentThread(); + executeLoop(); + } + + private void executeLoop() { + serverStarted(); + try { + while (true) { + Socket socket = serverSocket.accept(); + HttpProcessor processor = new HttpProcessor(socket); + processor.run(); + } + } catch (IOException e) { + if (e instanceof SocketException) { + if (!("Socket closed".equalsIgnoreCase(e.getMessage()) || "Socket is closed" + .equalsIgnoreCase(e.getMessage()))) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } else { + e.printStackTrace(); + throw new RuntimeException(e); + } + } finally { + // notify that the server was stopped + serverStopped(); + } + } + + private synchronized void serverStarted() { + // notify the waiting thread that the thread started + notifyAll(); + } + + private synchronized void serverStopped() { + // notify the waiting thread that the thread started + notifyAll(); + } + + public synchronized void stopServer() { + if (!serverStarted) + return; + + try { + serverStarted = false; + // the server may be sleeping somewhere... + serverThread.interrupt(); + // close the server socket + serverSocket.close(); + // wait for the server to stop + waitForServerToStop(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private class HttpProcessor { + + private final Socket socket; + + public HttpProcessor(Socket socket) throws SocketException { + // set the read timeout (5 seconds by default) + socket.setSoTimeout(readTimeOut); + socket.setKeepAlive(false); + this.socket = socket; + } + + public void run() { + try { + processRequest(socket); + processResponse(socket); + } catch (IOException e) { + if (e instanceof SocketException) { + if (!("socket closed".equalsIgnoreCase(e.getMessage()))) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } else { + e.printStackTrace(); + throw new RuntimeException(e); + } + } finally { + try { + socket.shutdownOutput(); + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private void processRequest(Socket socket) throws IOException { + requestContent.reset(); + BufferedInputStream is = new BufferedInputStream(socket.getInputStream()); + String requestMethodHeader = new String(readLine(is)); + processRequestMethod(requestMethodHeader); + processRequestHeaders(is); + processRequestContent(is); + } + + private void processRequestMethod(String requestMethodHeader) { + String[] parts = requestMethodHeader.split(" "); + if (parts.length < 2) { + throw new RuntimeException("illegal http request"); + } + requestMethod = parts[0]; + requestUrl = parts[1]; + } + + private void processRequestHeaders(InputStream is) throws IOException { + requestHeaders.clear(); + byte[] line; + while ((line = readLine(is)) != null) { + String lineStr = new String(line); + // if there are no more headers + if ("".equals(lineStr.trim())) { + break; + } + addRequestHeader(lineStr); + } + } + + private void processRequestContent(InputStream is) throws NumberFormatException, + IOException { + if (!("PUT".equals(requestMethod) || "POST".equals(requestMethod))) { + return; + } + + List transferEncodingValues = requestHeaders.get("Transfer-Encoding"); + String transferEncoding = + (transferEncodingValues == null || transferEncodingValues.isEmpty()) ? null + : transferEncodingValues.get(0); + if ("chunked".equals(transferEncoding)) { + processChunkedContent(is); + } else { + processRegularContent(is); + } + + if (mockHttpServerResponses.get(responseCounter).getMockResponseContentEchoRequest()) { + mockHttpServerResponses.get(responseCounter).setMockResponseContent(requestContent + .toByteArray()); + } + + } + + private void processRegularContent(InputStream is) throws IOException { + List contentLengthValues = requestHeaders.get("Content-Length"); + String contentLength = + (contentLengthValues == null || contentLengthValues.isEmpty()) ? null + : contentLengthValues.get(0); + if (contentLength == null) { + return; + } + int contentLen = Integer.parseInt(contentLength); + byte[] bytes = new byte[contentLen]; + is.read(bytes); + requestContent.write(bytes); + } + + private void processChunkedContent(InputStream is) throws IOException { + requestContent.write("".getBytes()); + byte[] chunk; + byte[] line = null; + boolean lastChunk = false; + // we should exit this loop only after we get to the end of stream + while (!lastChunk && (line = readLine(is)) != null) { + + String lineStr = new String(line); + // a chunk is identified as: + // 1) not an empty line + // 2) not 0. 0 means that there are no more chunks + if ("0".equals(lineStr)) { + lastChunk = true; + } + + if (!lastChunk) { + // get the length of the current chunk (it is in hexadecimal + // form) + int chunkLen = Integer.parseInt(lineStr, 16); + + // get the chunk + chunk = getChunk(is, chunkLen); + + // consume the newline after the chunk that separates + // between + // the chunk content and the next chunk size + readLine(is); + + requestContent.write(chunk); + } + } + + // do one last read to consume the empty line after the last chunk + if (lastChunk) { + readLine(is); + } + } + + private byte[] readLine(InputStream is) throws IOException { + int n; + ByteArrayOutputStream tmpOs = new ByteArrayOutputStream(); + while ((n = is.read()) != -1) { + if (n == '\r') { + n = is.read(); + if (n == '\n') { + return tmpOs.toByteArray(); + } else { + tmpOs.write('\r'); + if (n != -1) { + tmpOs.write(n); + } else { + return tmpOs.toByteArray(); + } + } + } else if (n == '\n') { + return tmpOs.toByteArray(); + } else { + tmpOs.write(n); + } + } + return tmpOs.toByteArray(); + } + + private byte[] getChunk(InputStream is, int len) throws IOException { + ByteArrayOutputStream chunk = new ByteArrayOutputStream(); + int read; + int totalRead = 0; + byte[] bytes = new byte[512]; + // read len bytes as the chunk + while (totalRead < len) { + read = is.read(bytes, 0, Math.min(bytes.length, len - totalRead)); + chunk.write(bytes, 0, read); + totalRead += read; + } + return chunk.toByteArray(); + } + + private void addRequestHeader(String line) { + String[] parts = line.split(": "); + List values = requestHeaders.get(parts[0]); + if (values == null) { + values = new ArrayList<>(); + requestHeaders.put(parts[0], values); + } + values.add(parts[1]); + } + + private void processResponse(Socket socket) throws IOException { + // if delaying the response failed (because it was interrupted) + // then don't send the response + if (!delayResponse()) + return; + + OutputStream sos = socket.getOutputStream(); + BufferedOutputStream os = new BufferedOutputStream(sos); + String reason = ""; + Status statusCode = + Response.Status.fromStatusCode(mockHttpServerResponses.get(responseCounter) + .getMockResponseCode()); + if (statusCode != null) { + reason = statusCode.toString(); + } + os.write(("HTTP/1.1 " + mockHttpServerResponses.get(responseCounter) + .getMockResponseCode() + + " " + reason).getBytes()); + os.write(NEW_LINE); + processResponseHeaders(os); + processResponseContent(os); + os.flush(); + responseCounter++; + } + + // return: + // true - delay was successful + // false - delay was unsuccessful + private boolean delayResponse() { + // delay the response by delayResponseTime milliseconds + if (delayResponseTime > 0) { + try { + Thread.sleep(delayResponseTime); + return true; + } catch (InterruptedException e) { + return false; + } + } + return true; + } + + private void processResponseContent(OutputStream os) throws IOException { + if (mockHttpServerResponses.get(responseCounter).getMockResponseContent() == null) { + return; + } + + os.write(mockHttpServerResponses.get(responseCounter).getMockResponseContent()); + } + + private void processResponseHeaders(OutputStream os) throws IOException { + addServerResponseHeaders(); + for (String header : mockHttpServerResponses.get(responseCounter) + .getMockResponseHeaders().keySet()) { + os.write((header + ": " + mockHttpServerResponses.get(responseCounter) + .getMockResponseHeaders().get(header)).getBytes()); + os.write(NEW_LINE); + } + os.write(NEW_LINE); + } + + private void addServerResponseHeaders() { + Map mockResponseHeaders = + mockHttpServerResponses.get(responseCounter).getMockResponseHeaders(); + mockResponseHeaders.put("Content-Type", mockHttpServerResponses.get(responseCounter) + .getMockResponseContentType()); + mockResponseHeaders.put("Content-Length", mockHttpServerResponses.get(responseCounter) + .getMockResponseContent().length + ""); + mockResponseHeaders.put("Server", "Mock HTTP Server v1.0"); + mockResponseHeaders.put("Connection", "closed"); + } + } + + public void setReadTimeout(int milliseconds) { + readTimeOut = milliseconds; + } + + public void setDelayResponse(int milliseconds) { + delayResponseTime = milliseconds; + } + + public String getRequestContentAsString() { + return requestContent.toString(); + } + + public byte[] getRequestContent() { + return requestContent.toByteArray(); + } + + public Map> getRequestHeaders() { + return requestHeaders; + } + + public String getRequestMethod() { + return requestMethod; + } + + public String getRequestUrl() { + return requestUrl; + } + + public void setMockHttpServerResponses(MockHttpServerResponse... responses) { + mockHttpServerResponses.clear(); + mockHttpServerResponses.addAll(Arrays.asList(responses)); + } + + public List getMockHttpServerResponses() { + return mockHttpServerResponses; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } + + public int getServerPort() { + return serverPort; + } +} diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/pdmodel/document.pdf b/examples/src/test/resources/org/apache/pdfbox/examples/pdmodel/document.pdf new file mode 100644 index 00000000000..d2c523eb579 Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/pdmodel/document.pdf differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/pdmodel/stamp.jpg b/examples/src/test/resources/org/apache/pdfbox/examples/pdmodel/stamp.jpg new file mode 100644 index 00000000000..2332202a694 Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/pdmodel/stamp.jpg differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/signature/keystore.p12 b/examples/src/test/resources/org/apache/pdfbox/examples/signature/keystore.p12 new file mode 100644 index 00000000000..ee7d8065dc9 Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/signature/keystore.p12 differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me.pdf b/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me.pdf new file mode 100644 index 00000000000..49aacad4089 Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me.pdf differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me_tsa.pdf b/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me_tsa.pdf new file mode 100644 index 00000000000..84fd9c400ab Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me_tsa.pdf differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me_visible.pdf b/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me_visible.pdf new file mode 100644 index 00000000000..0616dd68a2c Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/signature/sign_me_visible.pdf differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/signature/stamp.jpg b/examples/src/test/resources/org/apache/pdfbox/examples/signature/stamp.jpg new file mode 100644 index 00000000000..2332202a694 Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/signature/stamp.jpg differ diff --git a/examples/src/test/resources/org/apache/pdfbox/examples/signature/tsa_response.asn1 b/examples/src/test/resources/org/apache/pdfbox/examples/signature/tsa_response.asn1 new file mode 100644 index 00000000000..ff59aabae56 Binary files /dev/null and b/examples/src/test/resources/org/apache/pdfbox/examples/signature/tsa_response.asn1 differ diff --git a/external/FontBox-0.2.0-dev.jar b/external/FontBox-0.2.0-dev.jar deleted file mode 100644 index a0ba4cb0a6b..00000000000 Binary files a/external/FontBox-0.2.0-dev.jar and /dev/null differ diff --git a/external/JempBox-0.2.0.jar b/external/JempBox-0.2.0.jar deleted file mode 100644 index b7de2c8d99e..00000000000 Binary files a/external/JempBox-0.2.0.jar and /dev/null differ diff --git a/external/ant.jar b/external/ant.jar deleted file mode 100644 index 3a676072ae2..00000000000 Binary files a/external/ant.jar and /dev/null differ diff --git a/external/bcmail-jdk14-132.jar b/external/bcmail-jdk14-132.jar deleted file mode 100644 index 680f8c60c1f..00000000000 Binary files a/external/bcmail-jdk14-132.jar and /dev/null differ diff --git a/external/bcprov-jdk14-132.jar b/external/bcprov-jdk14-132.jar deleted file mode 100644 index 552721d0e8d..00000000000 Binary files a/external/bcprov-jdk14-132.jar and /dev/null differ diff --git a/external/checkstyle-all-4.2.jar b/external/checkstyle-all-4.2.jar deleted file mode 100644 index 35865ca55b9..00000000000 Binary files a/external/checkstyle-all-4.2.jar and /dev/null differ diff --git a/external/jai_codec.jar b/external/jai_codec.jar deleted file mode 100644 index 056ecd3a741..00000000000 Binary files a/external/jai_codec.jar and /dev/null differ diff --git a/external/jai_core.jar b/external/jai_core.jar deleted file mode 100644 index b29b8eed5bb..00000000000 Binary files a/external/jai_core.jar and /dev/null differ diff --git a/external/js.jar b/external/js.jar deleted file mode 100644 index 23fd87ffdd1..00000000000 Binary files a/external/js.jar and /dev/null differ diff --git a/external/junit.jar b/external/junit.jar deleted file mode 100644 index 674d71e89ea..00000000000 Binary files a/external/junit.jar and /dev/null differ diff --git a/external/lucene-core-2.2.0.jar b/external/lucene-core-2.2.0.jar deleted file mode 100644 index 2469481c389..00000000000 Binary files a/external/lucene-core-2.2.0.jar and /dev/null differ diff --git a/external/lucene-demos-2.2.0.jar b/external/lucene-demos-2.2.0.jar deleted file mode 100644 index 9856b1998ff..00000000000 Binary files a/external/lucene-demos-2.2.0.jar and /dev/null differ diff --git a/fontbox/README.txt b/fontbox/README.txt new file mode 100644 index 00000000000..5e94779e194 --- /dev/null +++ b/fontbox/README.txt @@ -0,0 +1,42 @@ +==================================================== +Apache FontBox +==================================================== + +The Apache FontBox library is an open source Java tool for working with +PDF fonts. + +You need Java 6 (or higher) and Maven 2 to +build FontBox. The recommended build command is: + + mvn clean install + +The default build will compile the Java sources and package the binary +classes into a jar package. + +See the Maven documentation for all the other available build options. + +See the issue tracker at https://issues.apache.org/jira/browse/PDFBOX +(component FontBox) for the full list of known issues and requested features. + +FontBox is a subproject of Apache PDFBox. PDFBox is a project of the +Apache Software Foundation . + +License (see also LICENSE.txt) +============================== + +Collective work: Copyright 2014 The Apache Software Foundation. + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/fontbox/fontbox-checkstyle.xml b/fontbox/fontbox-checkstyle.xml new file mode 100644 index 00000000000..c44941a5f1b --- /dev/null +++ b/fontbox/fontbox-checkstyle.xml @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fontbox/pom.xml b/fontbox/pom.xml new file mode 100644 index 00000000000..8ec1491aaaf --- /dev/null +++ b/fontbox/pom.xml @@ -0,0 +1,116 @@ + + + + 4.0.0 + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + ../parent/pom.xml + + + fontbox + bundle + + Apache FontBox + + The Apache FontBox library is an open source Java tool to obtain low level information + from font files. FontBox is a subproject of Apache PDFBox. + + + 2008 + http://pdfbox.apache.org/ + + + + commons-logging + commons-logging + + + junit + junit + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + org.apache.rat + apache-rat-plugin + + + src/main/resources/org/apache/fontbox/cmap/* + src/main/resources/org/apache/fontbox/unicode/* + + + + + + + com.googlecode.maven-download-plugin + download-maven-plugin + + + PDFBOX-4038 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12684264/SourceSansProBold.otf + ${project.build.directory}/pdfs + 28a044a2685fbc8da7810d9ac7b6b93a95542d504d7d8e671f009b8ebb2f5b70c974be7ea78974b188d8e6ab17d65b08f276c054927857315d5aad26f6fe36fc + + + + PDFBOX-3997 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12896461/NotoEmoji-Regular.ttf + ${project.build.directory}/pdfs + 51b01ab0794be9f92c59679f6d56d4ce09ed959daeb9ec945bb837eb15a82ab302e83b29aab1972ac9cb648f7196a5f5ff4488a4622b36bedbc9cd0cab6dc3de + + + + PDFBOX-3379 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12809395/DejaVuSansMono.ttf + ${project.build.directory}/pdfs + 1af1ce3e6d34a0b89c93072d8646e92cceb45b276389d2dd0d84457ec1193394d2bcc49bf3ce99c9c6b2658cd1337fc40ee5c61957f74cd45dbc3d51b6aef417 + + + + + + + + + diff --git a/fontbox/src/main/appended-resources/META-INF/LICENSE b/fontbox/src/main/appended-resources/META-INF/LICENSE new file mode 100644 index 00000000000..4e356abd033 --- /dev/null +++ b/fontbox/src/main/appended-resources/META-INF/LICENSE @@ -0,0 +1,129 @@ +CONTRIBUTIONS TO THE ORIGINAL CODEBASE + +Apache FontBox is based on contributions made to the original FontBox project: + + Copyright (c) 2006-2007, www.fontbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of fontbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Lohit-Bengali font (https://pagure.io/lohit): + + Copyright 2011-13 Lohit Fonts Project contributors + + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + + ----------------------------------------------------------- + SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + ----------------------------------------------------------- + + PREAMBLE + The goals of the Open Font License (OFL) are to stimulate worldwide + development of collaborative font projects, to support the font creation + efforts of academic and linguistic communities, and to provide a free and + open framework in which fonts may be shared and improved in partnership + with others. + + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. The + fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply + to any document created using the fonts or their derivatives. + + DEFINITIONS + "Font Software" refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. This may + include source files, build scripts and documentation. + + "Reserved Font Name" refers to any names specified as such after the + copyright statement(s). + + "Original Version" refers to the collection of Font Software components as + distributed by the Copyright Holder(s). + + "Modified Version" refers to any derivative made by adding to, deleting, + or substituting -- in part or in whole -- any of the components of the + Original Version, by changing formats or by porting the Font Software to a + new environment. + + "Author" refers to any designer, engineer, programmer, technical + writer or other person who contributed to the Font Software. + + PERMISSION & CONDITIONS + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: + + 1) Neither the Font Software nor any of its individual components, + in Original or Modified Versions, may be sold by itself. + + 2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + + 3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the corresponding + Copyright Holder. This restriction only applies to the primary font name as + presented to the users. + + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + + 5) The Font Software, modified or unmodified, in part or in whole, + must be distributed entirely under this license, and must not be + distributed under any other license. The requirement for fonts to + remain under this license does not apply to any document created + using the Font Software. + + TERMINATION + This license becomes null and void if any of the above conditions are + not met. + + DISCLAIMER + 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 THE + COPYRIGHT HOLDER 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. diff --git a/fontbox/src/main/appended-resources/META-INF/NOTICE b/fontbox/src/main/appended-resources/META-INF/NOTICE new file mode 100644 index 00000000000..c1f8cdd1aaf --- /dev/null +++ b/fontbox/src/main/appended-resources/META-INF/NOTICE @@ -0,0 +1,5 @@ +Based on source code contributed to the original FontBox project. +Copyright (c) 2006-2007, www.fontbox.org + +Includes the Script Property (Scripts-10.0.0.txt) +Copyright 2017 Unicode, Inc. diff --git a/fontbox/src/main/java/org/apache/fontbox/EncodedFont.java b/fontbox/src/main/java/org/apache/fontbox/EncodedFont.java new file mode 100644 index 00000000000..7994de4aeb5 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/EncodedFont.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox; + +import java.io.IOException; +import org.apache.fontbox.encoding.Encoding; + +/** + * A PostScript font which uses an encoding vector. + * + * @author John Hewson + */ +public interface EncodedFont +{ + /** + * Returns the PostScript Encoding vector for the font. + */ + Encoding getEncoding() throws IOException; +} diff --git a/fontbox/src/main/java/org/apache/fontbox/FontBoxFont.java b/fontbox/src/main/java/org/apache/fontbox/FontBoxFont.java new file mode 100644 index 00000000000..3976a4ca83c --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/FontBoxFont.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.List; +import org.apache.fontbox.util.BoundingBox; + +/** + * Common interface for all FontBox fonts. + * + * @author John Hewson + */ +public interface FontBoxFont +{ + /** + * The PostScript name of the font. + */ + String getName() throws IOException; + + /** + * Returns the font's bounding box in PostScript units. + */ + BoundingBox getFontBBox() throws IOException; + + /** + * Returns the FontMatrix in PostScript units. + */ + List getFontMatrix() throws IOException; + + /** + * Returns the path for the character with the given name. + * + * @return glyph path + * @throws IOException if the path could not be read + */ + GeneralPath getPath(String name) throws IOException; + + /** + * Returns the advance width for the character with the given name. + * + * @return glyph advance width + * @throws IOException if the path could not be read + */ + float getWidth(String name) throws IOException; + + /** + * Returns true if the font contains the given glyph. + * + * @param name PostScript glyph name + */ + boolean hasGlyph(String name) throws IOException; +} diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java b/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java new file mode 100644 index 00000000000..5d89b4658c6 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java @@ -0,0 +1,976 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import org.apache.fontbox.util.BoundingBox; +import org.apache.fontbox.util.Charsets; + +/** + * This class is used to parse AFM(Adobe Font Metrics) documents. + * + * @see AFM Documentation + * + * @author Ben Litchfield + * + */ +public class AFMParser +{ + /** + * This is a comment in a AFM file. + */ + public static final String COMMENT = "Comment"; + /** + * This is the constant used in the AFM file to start a font metrics item. + */ + public static final String START_FONT_METRICS = "StartFontMetrics"; + /** + * This is the constant used in the AFM file to end a font metrics item. + */ + public static final String END_FONT_METRICS = "EndFontMetrics"; + /** + * This is the font name. + */ + public static final String FONT_NAME = "FontName"; + /** + * This is the full name. + */ + public static final String FULL_NAME = "FullName"; + /** + * This is the Family name. + */ + public static final String FAMILY_NAME = "FamilyName"; + /** + * This is the weight. + */ + public static final String WEIGHT = "Weight"; + /** + * This is the font bounding box. + */ + public static final String FONT_BBOX = "FontBBox"; + /** + * This is the version of the font. + */ + public static final String VERSION = "Version"; + /** + * This is the notice. + */ + public static final String NOTICE = "Notice"; + /** + * This is the encoding scheme. + */ + public static final String ENCODING_SCHEME = "EncodingScheme"; + /** + * This is the mapping scheme. + */ + public static final String MAPPING_SCHEME = "MappingScheme"; + /** + * This is the escape character. + */ + public static final String ESC_CHAR = "EscChar"; + /** + * This is the character set. + */ + public static final String CHARACTER_SET = "CharacterSet"; + /** + * This is the characters attribute. + */ + public static final String CHARACTERS = "Characters"; + /** + * This will determine if this is a base font. + */ + public static final String IS_BASE_FONT = "IsBaseFont"; + /** + * This is the V Vector attribute. + */ + public static final String V_VECTOR = "VVector"; + /** + * This will tell if the V is fixed. + */ + public static final String IS_FIXED_V = "IsFixedV"; + /** + * This is the cap height attribute. + */ + public static final String CAP_HEIGHT = "CapHeight"; + /** + * This is the X height. + */ + public static final String X_HEIGHT = "XHeight"; + /** + * This is ascender attribute. + */ + public static final String ASCENDER = "Ascender"; + /** + * This is the descender attribute. + */ + public static final String DESCENDER = "Descender"; + + /** + * The underline position. + */ + public static final String UNDERLINE_POSITION = "UnderlinePosition"; + /** + * This is the Underline thickness. + */ + public static final String UNDERLINE_THICKNESS = "UnderlineThickness"; + /** + * This is the italic angle. + */ + public static final String ITALIC_ANGLE = "ItalicAngle"; + /** + * This is the char width. + */ + public static final String CHAR_WIDTH = "CharWidth"; + /** + * This will determine if this is fixed pitch. + */ + public static final String IS_FIXED_PITCH = "IsFixedPitch"; + /** + * This is the start of character metrics. + */ + public static final String START_CHAR_METRICS = "StartCharMetrics"; + /** + * This is the end of character metrics. + */ + public static final String END_CHAR_METRICS = "EndCharMetrics"; + /** + * The character metrics c value. + */ + public static final String CHARMETRICS_C = "C"; + /** + * The character metrics c value. + */ + public static final String CHARMETRICS_CH = "CH"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_WX = "WX"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W0X = "W0X"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W1X = "W1X"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_WY = "WY"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W0Y = "W0Y"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W1Y = "W1Y"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W = "W"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W0 = "W0"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_W1 = "W1"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_VV = "VV"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_N = "N"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_B = "B"; + /** + * The character metrics value. + */ + public static final String CHARMETRICS_L = "L"; + /** + * The character metrics value. + */ + public static final String STD_HW = "StdHW"; + /** + * The character metrics value. + */ + public static final String STD_VW = "StdVW"; + /** + * This is the start of track kern data. + */ + public static final String START_TRACK_KERN = "StartTrackKern"; + /** + * This is the end of track kern data. + */ + public static final String END_TRACK_KERN = "EndTrackKern"; + /** + * This is the start of kern data. + */ + public static final String START_KERN_DATA = "StartKernData"; + /** + * This is the end of kern data. + */ + public static final String END_KERN_DATA = "EndKernData"; + /** + * This is the start of kern pairs data. + */ + public static final String START_KERN_PAIRS = "StartKernPairs"; + /** + * This is the end of kern pairs data. + */ + public static final String END_KERN_PAIRS = "EndKernPairs"; + /** + * This is the start of kern pairs data. + */ + public static final String START_KERN_PAIRS0 = "StartKernPairs0"; + /** + * This is the start of kern pairs data. + */ + public static final String START_KERN_PAIRS1 = "StartKernPairs1"; + /** + * This is the start compisites data section. + */ + public static final String START_COMPOSITES = "StartComposites"; + /** + * This is the end compisites data section. + */ + public static final String END_COMPOSITES = "EndComposites"; + /** + * This is a composite character. + */ + public static final String CC = "CC"; + /** + * This is a composite charater part. + */ + public static final String PCC = "PCC"; + /** + * This is a kern pair. + */ + public static final String KERN_PAIR_KP = "KP"; + /** + * This is a kern pair. + */ + public static final String KERN_PAIR_KPH = "KPH"; + /** + * This is a kern pair. + */ + public static final String KERN_PAIR_KPX = "KPX"; + /** + * This is a kern pair. + */ + public static final String KERN_PAIR_KPY = "KPY"; + + private static final int BITS_IN_HEX = 16; + + + private final InputStream input; + + /** + * Constructor. + * + * @param in The input stream to read the AFM document from. + */ + public AFMParser( InputStream in ) + { + input = in; + } + + /** + * This will parse the AFM document. The input stream is closed + * when the parsing is finished. + * + * @return the parsed FontMetric + * + * @throws IOException If there is an IO error reading the document. + */ + public FontMetrics parse() throws IOException + { + return parseFontMetric(false); + } + + /** + * This will parse the AFM document. The input stream is closed + * when the parsing is finished. + * + * @param reducedDataset parse a reduced subset of data if set to true + * @return the parsed FontMetric + * + * @throws IOException If there is an IO error reading the document. + */ + public FontMetrics parse(boolean reducedDataset) throws IOException + { + return parseFontMetric(reducedDataset); + } + /** + * This will parse a font metrics item. + * + * @return The parse font metrics item. + * + * @throws IOException If there is an error reading the AFM file. + */ + private FontMetrics parseFontMetric(boolean reducedDataset) throws IOException + { + FontMetrics fontMetrics = new FontMetrics(); + String startFontMetrics = readString(); + if( !START_FONT_METRICS.equals( startFontMetrics ) ) + { + throw new IOException( "Error: The AFM file should start with " + START_FONT_METRICS + + " and not '" + startFontMetrics + "'" ); + } + fontMetrics.setAFMVersion( readFloat() ); + String nextCommand; + boolean charMetricsRead = false; + while (!END_FONT_METRICS.equals(nextCommand = readString())) + { + switch (nextCommand) + { + case FONT_NAME: + fontMetrics.setFontName( readLine() ); + break; + case FULL_NAME: + fontMetrics.setFullName( readLine() ); + break; + case FAMILY_NAME: + fontMetrics.setFamilyName( readLine() ); + break; + case WEIGHT: + fontMetrics.setWeight( readLine() ); + break; + case FONT_BBOX: + BoundingBox bBox = new BoundingBox(); + bBox.setLowerLeftX( readFloat() ); + bBox.setLowerLeftY( readFloat() ); + bBox.setUpperRightX( readFloat() ); + bBox.setUpperRightY( readFloat() ); + fontMetrics.setFontBBox( bBox ); + break; + case VERSION: + fontMetrics.setFontVersion( readLine() ); + break; + case NOTICE: + fontMetrics.setNotice( readLine() ); + break; + case ENCODING_SCHEME: + fontMetrics.setEncodingScheme( readLine() ); + break; + case MAPPING_SCHEME: + fontMetrics.setMappingScheme( readInt() ); + break; + case ESC_CHAR: + fontMetrics.setEscChar( readInt() ); + break; + case CHARACTER_SET: + fontMetrics.setCharacterSet( readLine() ); + break; + case CHARACTERS: + fontMetrics.setCharacters( readInt() ); + break; + case IS_BASE_FONT: + fontMetrics.setIsBaseFont( readBoolean() ); + break; + case V_VECTOR: + float[] vector = new float[2]; + vector[0] = readFloat(); + vector[1] = readFloat(); + fontMetrics.setVVector( vector ); + break; + case IS_FIXED_V: + fontMetrics.setIsFixedV( readBoolean() ); + break; + case CAP_HEIGHT: + fontMetrics.setCapHeight( readFloat() ); + break; + case X_HEIGHT: + fontMetrics.setXHeight( readFloat() ); + break; + case ASCENDER: + fontMetrics.setAscender( readFloat() ); + break; + case DESCENDER: + fontMetrics.setDescender( readFloat() ); + break; + case STD_HW: + fontMetrics.setStandardHorizontalWidth( readFloat() ); + break; + case STD_VW: + fontMetrics.setStandardVerticalWidth( readFloat() ); + break; + case COMMENT: + fontMetrics.addComment( readLine() ); + break; + case UNDERLINE_POSITION: + fontMetrics.setUnderlinePosition( readFloat() ); + break; + case UNDERLINE_THICKNESS: + fontMetrics.setUnderlineThickness( readFloat() ); + break; + case ITALIC_ANGLE: + fontMetrics.setItalicAngle( readFloat() ); + break; + case CHAR_WIDTH: + float[] widths = new float[2]; + widths[0] = readFloat(); + widths[1] = readFloat(); + fontMetrics.setCharWidth( widths ); + break; + case IS_FIXED_PITCH: + fontMetrics.setFixedPitch( readBoolean() ); + break; + case START_CHAR_METRICS: + int countMetrics = readInt(); + List charMetrics = new ArrayList<>(countMetrics); + for (int i = 0; i < countMetrics; i++) + { + CharMetric charMetric = parseCharMetric(); + charMetrics.add( charMetric ); + } + String endCharMetrics = readString(); + if (!endCharMetrics.equals(END_CHAR_METRICS)) + { + throw new IOException( "Error: Expected '" + END_CHAR_METRICS + "' actual '" + + endCharMetrics + "'"); + } + charMetricsRead = true; + fontMetrics.setCharMetrics(charMetrics); + break; + case START_COMPOSITES: + if( !reducedDataset) + { + int countComposites = readInt(); + for (int i = 0; i < countComposites; i++) + { + Composite part = parseComposite(); + fontMetrics.addComposite( part ); + } + String endComposites = readString(); + if (!endComposites.equals(END_COMPOSITES)) + { + throw new IOException( "Error: Expected '" + END_COMPOSITES + "' actual '" + + endComposites + "'"); + } + } + break; + case START_KERN_DATA: + if( !reducedDataset) + { + parseKernData( fontMetrics ); + } + break; + default: + if (reducedDataset && charMetricsRead) + { + break; + } + throw new IOException( "Unknown AFM key '" + nextCommand + "'" ); + } + } + return fontMetrics; + } + + /** + * This will parse the kern data. + * + * @param fontMetrics The metrics class to put the parsed data into. + * + * @throws IOException If there is an error parsing the data. + */ + private void parseKernData( FontMetrics fontMetrics ) throws IOException + { + String nextCommand; + while( !(nextCommand = readString()).equals( END_KERN_DATA ) ) + { + switch(nextCommand) + { + case START_TRACK_KERN: + int countTrackKern = readInt(); + for (int i = 0; i < countTrackKern; i++) + { + TrackKern kern = new TrackKern(); + kern.setDegree( readInt() ); + kern.setMinPointSize( readFloat() ); + kern.setMinKern( readFloat() ); + kern.setMaxPointSize( readFloat() ); + kern.setMaxKern( readFloat() ); + fontMetrics.addTrackKern( kern ); + } + String endTrackKern = readString(); + if (!endTrackKern.equals(END_TRACK_KERN)) + { + throw new IOException( "Error: Expected '" + END_TRACK_KERN + "' actual '" + + endTrackKern + "'"); + } + break; + case START_KERN_PAIRS: + int countKernPairs = readInt(); + for (int i = 0; i < countKernPairs; i++) + { + KernPair pair = parseKernPair(); + fontMetrics.addKernPair( pair ); + } + String endKernPairs = readString(); + if (!endKernPairs.equals(END_KERN_PAIRS)) + { + throw new IOException( "Error: Expected '" + END_KERN_PAIRS + "' actual '" + + endKernPairs + "'"); + } + break; + case START_KERN_PAIRS0: + int countKernPairs0 = readInt(); + for (int i = 0; i < countKernPairs0; i++) + { + KernPair pair = parseKernPair(); + fontMetrics.addKernPair0( pair ); + } + String endKernPairs0 = readString(); + if (!endKernPairs0.equals(END_KERN_PAIRS)) + { + throw new IOException( "Error: Expected '" + END_KERN_PAIRS + "' actual '" + + endKernPairs0 + "'"); + } + break; + case START_KERN_PAIRS1: + int countKernPairs1 = readInt(); + for (int i = 0; i < countKernPairs1; i++) + { + KernPair pair = parseKernPair(); + fontMetrics.addKernPair1( pair ); + } + String endKernPairs1 = readString(); + if (!endKernPairs1.equals(END_KERN_PAIRS)) + { + throw new IOException( "Error: Expected '" + END_KERN_PAIRS + "' actual '" + + endKernPairs1 + "'"); + } + break; + default: + throw new IOException( "Unknown kerning data type '" + nextCommand + "'" ); + } + } + } + + /** + * This will parse a kern pair from the data stream. + * + * @return The kern pair that was parsed from the stream. + * + * @throws IOException If there is an error reading from the stream. + */ + private KernPair parseKernPair() throws IOException + { + KernPair kernPair = new KernPair(); + String cmd = readString(); + switch(cmd) + { + case KERN_PAIR_KP: + kernPair.setFirstKernCharacter(readString()); + kernPair.setSecondKernCharacter(readString()); + kernPair.setX(readFloat()); + kernPair.setY(readFloat()); + break; + case KERN_PAIR_KPH: + kernPair.setFirstKernCharacter(hexToString(readString())); + kernPair.setSecondKernCharacter(hexToString(readString())); + kernPair.setX(readFloat()); + kernPair.setY(readFloat()); + break; + case KERN_PAIR_KPX: + kernPair.setFirstKernCharacter(readString()); + kernPair.setSecondKernCharacter(readString()); + kernPair.setX(readFloat()); + kernPair.setY( 0 ); + break; + case KERN_PAIR_KPY: + kernPair.setFirstKernCharacter(readString()); + kernPair.setSecondKernCharacter(readString()); + kernPair.setX( 0 ); + kernPair.setY(readFloat()); + break; + default: + throw new IOException( "Error expected kern pair command actual='" + cmd + "'" ); + } + return kernPair; + } + + /** + * This will convert and angle bracket hex string to a string. + * + * @param hexString An angle bracket string. + * + * @return The bytes of the hex string. + * + * @throws IOException If the string is in an invalid format. + */ + private String hexToString( String hexString ) throws IOException + { + if( hexString.length() < 2 ) + { + throw new IOException( "Error: Expected hex string of length >= 2 not='" + hexString ); + } + if( hexString.charAt( 0 ) != '<' || + hexString.charAt( hexString.length() -1 ) != '>' ) + { + throw new IOException( "String should be enclosed by angle brackets '" + hexString+ "'" ); + } + hexString = hexString.substring( 1, hexString.length() -1 ); + byte[] data = new byte[hexString.length() / 2]; + for( int i=0; i or FF, the spec is a little + //unclear, wait and see if it breaks anything. + String charCodeCH = metricsTokenizer.nextToken(); + charMetric.setCharacterCode(Integer.parseInt(charCodeCH, BITS_IN_HEX)); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_WX: + charMetric.setWx(Float.parseFloat(metricsTokenizer.nextToken())); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W0X: + charMetric.setW0x(Float.parseFloat(metricsTokenizer.nextToken())); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W1X: + charMetric.setW1x(Float.parseFloat(metricsTokenizer.nextToken())); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_WY: + charMetric.setWy(Float.parseFloat(metricsTokenizer.nextToken())); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W0Y: + charMetric.setW0y(Float.parseFloat(metricsTokenizer.nextToken())); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W1Y: + charMetric.setW1y(Float.parseFloat(metricsTokenizer.nextToken())); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W: + float[] w = new float[2]; + w[0] = Float.parseFloat(metricsTokenizer.nextToken()); + w[1] = Float.parseFloat(metricsTokenizer.nextToken()); + charMetric.setW( w ); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W0: + float[] w0 = new float[2]; + w0[0] = Float.parseFloat(metricsTokenizer.nextToken()); + w0[1] = Float.parseFloat(metricsTokenizer.nextToken()); + charMetric.setW0( w0 ); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_W1: + float[] w1 = new float[2]; + w1[0] = Float.parseFloat(metricsTokenizer.nextToken()); + w1[1] = Float.parseFloat(metricsTokenizer.nextToken()); + charMetric.setW1( w1 ); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_VV: + float[] vv = new float[2]; + vv[0] = Float.parseFloat(metricsTokenizer.nextToken()); + vv[1] = Float.parseFloat(metricsTokenizer.nextToken()); + charMetric.setVv( vv ); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_N: + charMetric.setName(metricsTokenizer.nextToken()); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_B: + BoundingBox box = new BoundingBox(); + box.setLowerLeftX(Float.parseFloat(metricsTokenizer.nextToken())); + box.setLowerLeftY(Float.parseFloat(metricsTokenizer.nextToken())); + box.setUpperRightX(Float.parseFloat(metricsTokenizer.nextToken())); + box.setUpperRightY(Float.parseFloat(metricsTokenizer.nextToken())); + charMetric.setBoundingBox( box ); + verifySemicolon( metricsTokenizer ); + break; + case CHARMETRICS_L: + Ligature lig = new Ligature(); + lig.setSuccessor(metricsTokenizer.nextToken()); + lig.setLigature(metricsTokenizer.nextToken()); + charMetric.addLigature( lig ); + verifySemicolon( metricsTokenizer ); + break; + default: + throw new IOException( "Unknown CharMetrics command '" + nextCommand + "'" ); + } + } + } + catch( NumberFormatException e ) + { + throw new IOException( "Error: Corrupt AFM document:" + e ); + } + return charMetric; + } + + /** + * This is used to verify that a semicolon is the next token in the stream. + * + * @param tokenizer The tokenizer to read from. + * + * @throws IOException If the semicolon is missing. + */ + private void verifySemicolon( StringTokenizer tokenizer ) throws IOException + { + if( tokenizer.hasMoreTokens() ) + { + String semicolon = tokenizer.nextToken(); + if (!";".equals(semicolon)) + { + throw new IOException( "Error: Expected semicolon in stream actual='" + + semicolon + "'" ); + } + } + else + { + throw new IOException( "CharMetrics is missing a semicolon after a command" ); + } + } + + /** + * This will read a boolean from the stream. + * + * @return The boolean in the stream. + */ + private boolean readBoolean() throws IOException + { + String theBoolean = readString(); + return Boolean.valueOf( theBoolean ); + } + + /** + * This will read an integer from the stream. + * + * @return The integer in the stream. + */ + private int readInt() throws IOException + { + String theInt = readString(); + try + { + return Integer.parseInt( theInt ); + } + catch( NumberFormatException e ) + { + throw new IOException( "Error parsing AFM document:" + e ); + } + } + + /** + * This will read a float from the stream. + * + * @return The float in the stream. + */ + private float readFloat() throws IOException + { + String theFloat = readString(); + return Float.parseFloat( theFloat ); + } + + /** + * This will read until the end of a line. + * + * @return The string that is read. + */ + private String readLine() throws IOException + { + //First skip the whitespace + StringBuilder buf = new StringBuilder(60); + int nextByte = input.read(); + while( isWhitespace( nextByte ) ) + { + nextByte = input.read(); + //do nothing just skip the whitespace. + } + buf.append( (char)nextByte ); + + //now read the data + nextByte = input.read(); + while (nextByte != -1 && !isEOL(nextByte)) + { + buf.append((char) nextByte); + nextByte = input.read(); + } + return buf.toString(); + } + + /** + * This will read a string from the input stream and stop at any whitespace. + * + * @return The string read from the stream. + * + * @throws IOException If an IO error occurs when reading from the stream. + */ + private String readString() throws IOException + { + //First skip the whitespace + StringBuilder buf = new StringBuilder(24); + int nextByte = input.read(); + while( isWhitespace( nextByte ) ) + { + nextByte = input.read(); + //do nothing just skip the whitespace. + } + buf.append( (char)nextByte ); + + //now read the data + nextByte = input.read(); + while (nextByte != -1 && !isWhitespace(nextByte)) + { + buf.append((char) nextByte); + nextByte = input.read(); + } + return buf.toString(); + } + + /** + * This will determine if the byte is a whitespace character or not. + * + * @param character The character to test for whitespace. + * + * @return true If the character is whitespace as defined by the AFM spec. + */ + private boolean isEOL( int character ) + { + return character == 0x0D || + character == 0x0A; + } + + /** + * This will determine if the byte is a whitespace character or not. + * + * @param character The character to test for whitespace. + * + * @return true If the character is whitespace as defined by the AFM spec. + */ + private boolean isWhitespace( int character ) + { + return character == ' ' || + character == '\t' || + character == 0x0D || + character == 0x0A; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/CharMetric.java b/fontbox/src/main/java/org/apache/fontbox/afm/CharMetric.java new file mode 100644 index 00000000000..db096a3bb8c --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/CharMetric.java @@ -0,0 +1,284 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.fontbox.util.BoundingBox; + +/** + * This class represents a single character metric. + * + * @author Ben Litchfield + */ +public class CharMetric +{ + private int characterCode; + + private float wx; + private float w0x; + private float w1x; + + private float wy; + private float w0y; + private float w1y; + + private float[] w; + private float[] w0; + private float[] w1; + private float[] vv; + + private String name; + private BoundingBox boundingBox; + private List ligatures = new ArrayList<>(); + + /** Getter for property boundingBox. + * @return Value of property boundingBox. + */ + public BoundingBox getBoundingBox() + { + return boundingBox; + } + + /** Setter for property boundingBox. + * @param bBox New value of property boundingBox. + */ + public void setBoundingBox(BoundingBox bBox) + { + boundingBox = bBox; + } + + /** Getter for property characterCode. + * @return Value of property characterCode. + */ + public int getCharacterCode() + { + return characterCode; + } + + /** Setter for property characterCode. + * @param cCode New value of property characterCode. + */ + public void setCharacterCode(int cCode) + { + characterCode = cCode; + } + + /** + * This will add an entry to the list of ligatures. + * + * @param ligature The ligature to add. + */ + public void addLigature( Ligature ligature ) + { + ligatures.add( ligature ); + } + + /** Getter for property ligatures. + * @return Value of property ligatures. + */ + public List getLigatures() + { + return ligatures; + } + + /** Setter for property ligatures. + * @param lig New value of property ligatures. + */ + public void setLigatures(List lig) + { + this.ligatures = lig; + } + + /** Getter for property name. + * @return Value of property name. + */ + public String getName() + { + return name; + } + + /** Setter for property name. + * @param n New value of property name. + */ + public void setName(String n) + { + this.name = n; + } + + /** Getter for property vv. + * @return Value of property vv. + */ + public float[] getVv() + { + return this.vv; + } + + /** Setter for property vv. + * @param vvValue New value of property vv. + */ + public void setVv(float[] vvValue) + { + this.vv = vvValue; + } + + /** Getter for property w. + * @return Value of property w. + */ + public float[] getW() + { + return this.w; + } + + /** Setter for property w. + * @param wValue New value of property w. + */ + public void setW(float[] wValue) + { + this.w = wValue; + } + + /** Getter for property w0. + * @return Value of property w0. + */ + public float[] getW0() + { + return this.w0; + } + + /** Setter for property w0. + * @param w0Value New value of property w0. + */ + public void setW0(float[] w0Value) + { + w0 = w0Value; + } + + /** Getter for property w0x. + * @return Value of property w0x. + */ + public float getW0x() + { + return w0x; + } + + /** Setter for property w0x. + * @param w0xValue New value of property w0x. + */ + public void setW0x(float w0xValue) + { + w0x = w0xValue; + } + + /** Getter for property w0y. + * @return Value of property w0y. + */ + public float getW0y() + { + return w0y; + } + + /** Setter for property w0y. + * @param w0yValue New value of property w0y. + */ + public void setW0y(float w0yValue) + { + w0y = w0yValue; + } + + /** Getter for property w1. + * @return Value of property w1. + */ + public float[] getW1() + { + return this.w1; + } + + /** Setter for property w1. + * @param w1Value New value of property w1. + */ + public void setW1(float[] w1Value) + { + w1 = w1Value; + } + + /** Getter for property w1x. + * @return Value of property w1x. + */ + public float getW1x() + { + return w1x; + } + + /** Setter for property w1x. + * @param w1xValue New value of property w1x. + */ + public void setW1x(float w1xValue) + { + w1x = w1xValue; + } + + /** Getter for property w1y. + * @return Value of property w1y. + */ + public float getW1y() + { + return w1y; + } + + /** Setter for property w1y. + * @param w1yValue New value of property w1y. + */ + public void setW1y(float w1yValue) + { + w1y = w1yValue; + } + + /** Getter for property wx. + * @return Value of property wx. + */ + public float getWx() + { + return wx; + } + + /** Setter for property wx. + * @param wxValue New value of property wx. + */ + public void setWx(float wxValue) + { + wx = wxValue; + } + + /** Getter for property wy. + * @return Value of property wy. + */ + public float getWy() + { + return wy; + } + + /** Setter for property wy. + * @param wyValue New value of property wy. + */ + public void setWy(float wyValue) + { + this.wy = wyValue; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/Composite.java b/fontbox/src/main/java/org/apache/fontbox/afm/Composite.java new file mode 100644 index 00000000000..12159051468 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/Composite.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class represents composite character data. + * + * @author Ben Litchfield + */ +public class Composite +{ + private String name; + private List parts = new ArrayList<>(); + + /** Getter for property name. + * @return Value of property name. + */ + public String getName() + { + return name; + } + + /** Setter for property name. + * @param nameValue New value of property name. + */ + public void setName(String nameValue) + { + this.name = nameValue; + } + + /** + * This will add a composite part. + * + * @param part The composite part to add. + */ + public void addPart( CompositePart part ) + { + parts.add( part ); + } + + /** Getter for property parts. + * @return Value of property parts. + */ + public List getParts() + { + return parts; + } + + /** Setter for property parts. + * @param partsList New value of property parts. + */ + public void setParts(List partsList) + { + this.parts = partsList; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/CompositePart.java b/fontbox/src/main/java/org/apache/fontbox/afm/CompositePart.java new file mode 100644 index 00000000000..0042350c019 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/CompositePart.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +/** + * This class represents a part of composite character data. + * + * @author Ben Litchfield + */ +public class CompositePart +{ + private String name; + private int xDisplacement; + private int yDisplacement; + + /** Getter for property name. + * @return Value of property name. + */ + public java.lang.String getName() + { + return name; + } + + /** Setter for property name. + * @param nameValue New value of property name. + */ + public void setName(String nameValue) + { + name = nameValue; + } + + /** Getter for property xDisplacement. + * @return Value of property xDisplacement. + */ + public int getXDisplacement() + { + return xDisplacement; + } + + /** Setter for property xDisplacement. + * @param xDisp New value of property xDisplacement. + */ + public void setXDisplacement(int xDisp) + { + xDisplacement = xDisp; + } + + /** Getter for property yDisplacement. + * @return Value of property yDisplacement. + */ + public int getYDisplacement() + { + return yDisplacement; + } + + /** Setter for property yDisplacement. + * @param yDisp New value of property yDisplacement. + */ + public void setYDisplacement(int yDisp) + { + yDisplacement = yDisp; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java b/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java new file mode 100644 index 00000000000..36133dca9af --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/FontMetrics.java @@ -0,0 +1,888 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.fontbox.util.BoundingBox; + +/** + * This is the outermost AFM type. This can be created by the afmparser with a valid AFM document. + * + * @author Ben Litchfield + */ +public class FontMetrics +{ + /** + * This is the version of the FontMetrics. + */ + private float afmVersion; + private int metricSets = 0; + private String fontName; + private String fullName; + private String familyName; + private String weight; + private BoundingBox fontBBox; + private String fontVersion; + private String notice; + private String encodingScheme; + private int mappingScheme; + private int escChar; + private String characterSet; + private int characters; + private boolean isBaseFont; + private float[] vVector; + private boolean isFixedV; + private float capHeight; + private float xHeight; + private float ascender; + private float descender; + private final List comments = new ArrayList<>(); + + private float underlinePosition; + private float underlineThickness; + private float italicAngle; + private float[] charWidth; + private boolean isFixedPitch; + private float standardHorizontalWidth; + private float standardVerticalWidth; + + private List charMetrics = new ArrayList<>(); + private Map charMetricsMap = new HashMap<>(); + private List trackKern = new ArrayList<>(); + private List composites = new ArrayList<>(); + private List kernPairs = new ArrayList<>(); + private List kernPairs0 = new ArrayList<>(); + private List kernPairs1 = new ArrayList<>(); + + /** + * Constructor. + */ + public FontMetrics() + { + } + + /** + * This will get the width of a character. + * + * @param name The character to get the width for. + * + * @return The width of the character. + */ + public float getCharacterWidth( String name ) + { + float result = 0; + CharMetric metric = charMetricsMap.get( name ); + if( metric != null ) + { + result = metric.getWx(); + } + return result; + } + + /** + * This will get the width of a character. + * + * @param name The character to get the width for. + * @return The width of the character. + */ + public float getCharacterHeight( String name ) + { + float result = 0; + CharMetric metric = charMetricsMap.get( name ); + if( metric != null ) + { + result = metric.getWy(); + if( Float.compare(result, 0) == 0 ) + { + result = metric.getBoundingBox().getHeight(); + } + } + return result; + } + + + /** + * This will get the average width of a character. + * + * @return The width of the character. + */ + public float getAverageCharacterWidth() + { + float average = 0; + float totalWidths = 0; + float characterCount = 0; + for (CharMetric metric : charMetrics) + { + if( metric.getWx() > 0 ) + { + totalWidths += metric.getWx(); + characterCount += 1; + } + } + if( totalWidths > 0 ) + { + average = totalWidths / characterCount; + } + return average; + } + + /** + * This will add a new comment. + * + * @param comment The comment to add to this metric. + */ + public void addComment( String comment ) + { + comments.add( comment ); + } + + /** + * This will get all comments. + * + * @return The list of all comments. + */ + public List getComments() + { + return Collections.unmodifiableList(comments); + } + + /** + * This will get the version of the AFM document. + * + * @return The version of the document. + */ + public float getAFMVersion() + { + return afmVersion; + } + + /** + * This will get the metricSets attribute. + * + * @return The value of the metric sets. + */ + public int getMetricSets() + { + return metricSets; + } + + /** + * This will set the version of the AFM document. + * + * @param afmVersionValue The version of the document. + */ + public void setAFMVersion( float afmVersionValue ) + { + afmVersion = afmVersionValue; + } + + /** + * This will set the metricSets attribute. This value must be 0,1, or 2. + * + * @param metricSetsValue The new metric sets attribute. + * @throws IllegalArgumentException If the metricSets attribute is not 0,1, or 2. + */ + public void setMetricSets( int metricSetsValue ) + { + if( metricSetsValue < 0 || metricSetsValue > 2 ) + { + throw new IllegalArgumentException("The metricSets attribute must be in the " + + "set {0,1,2} and not '" + metricSetsValue + "'"); + } + metricSets = metricSetsValue; + } + + /** + * Getter for property fontName. + * + * @return Value of property fontName. + */ + public String getFontName() + { + return fontName; + } + + /** + * Setter for property fontName. + * + * @param name New value of property fontName. + */ + public void setFontName(String name) + { + fontName = name; + } + + /** + * Getter for property fullName. + * + * @return Value of property fullName. + */ + public String getFullName() + { + return fullName; + } + + /** + * Setter for property fullName. + * + * @param fullNameValue New value of property fullName. + */ + public void setFullName(String fullNameValue) + { + fullName = fullNameValue; + } + + /** + * Getter for property familyName. + * + * @return Value of property familyName. + */ + public String getFamilyName() + { + return familyName; + } + + /** + * Setter for property familyName. + * + * @param familyNameValue New value of property familyName. + */ + public void setFamilyName(String familyNameValue) + { + familyName = familyNameValue; + } + + /** + * Getter for property weight. + * + * @return Value of property weight. + */ + public String getWeight() + { + return weight; + } + + /** + * Setter for property weight. + * + * @param weightValue New value of property weight. + */ + public void setWeight(String weightValue) + { + weight = weightValue; + } + + /** + * Getter for property fontBBox. + * + * @return Value of property fontBBox. + */ + public BoundingBox getFontBBox() + { + return fontBBox; + } + + /** + * Setter for property fontBBox. + * + * @param bBox New value of property fontBBox. + */ + public void setFontBBox(BoundingBox bBox) + { + this.fontBBox = bBox; + } + + /** + * Getter for property notice. + * + * @return Value of property notice. + */ + public String getNotice() + { + return notice; + } + + /** + * Setter for property notice. + * + * @param noticeValue New value of property notice. + */ + public void setNotice(String noticeValue) + { + notice = noticeValue; + } + + /** + * Getter for property encodingScheme. + * + * @return Value of property encodingScheme. + */ + public String getEncodingScheme() + { + return encodingScheme; + } + + /** + * Setter for property encodingScheme. + * + * @param encodingSchemeValue New value of property encodingScheme. + */ + public void setEncodingScheme(String encodingSchemeValue) + { + encodingScheme = encodingSchemeValue; + } + + /** + * Getter for property mappingScheme. + * + * @return Value of property mappingScheme. + */ + public int getMappingScheme() + { + return mappingScheme; + } + + /** + * Setter for property mappingScheme. + * + * @param mappingSchemeValue New value of property mappingScheme. + */ + public void setMappingScheme(int mappingSchemeValue) + { + mappingScheme = mappingSchemeValue; + } + + /** + * Getter for property escChar. + * + * @return Value of property escChar. + */ + public int getEscChar() + { + return escChar; + } + + /** + * Setter for property escChar. + * + * @param escCharValue New value of property escChar. + */ + public void setEscChar(int escCharValue) + { + escChar = escCharValue; + } + + /** + * Getter for property characterSet. + * + * @return Value of property characterSet. + */ + public String getCharacterSet() + { + return characterSet; + } + + /** + * Setter for property characterSet. + * + * @param characterSetValue New value of property characterSet. + */ + public void setCharacterSet(String characterSetValue) + { + characterSet = characterSetValue; + } + + /** + * Getter for property characters. + * + * @return Value of property characters. + */ + public int getCharacters() + { + return characters; + } + + /** + * Setter for property characters. + * + * @param charactersValue New value of property characters. + */ + public void setCharacters(int charactersValue) + { + characters = charactersValue; + } + + /** + * Getter for property isBaseFont. + * + * @return Value of property isBaseFont. + */ + public boolean isBaseFont() + { + return isBaseFont; + } + + /** + * Setter for property isBaseFont. + * + * @param isBaseFontValue New value of property isBaseFont. + */ + public void setIsBaseFont(boolean isBaseFontValue) + { + isBaseFont = isBaseFontValue; + } + + /** + * Getter for property vVector. + * + * @return Value of property vVector. + */ + public float[] getVVector() + { + return this.vVector; + } + + /** + * Setter for property vVector. + * + * @param vVectorValue New value of property vVector. + */ + public void setVVector(float[] vVectorValue) + { + vVector = vVectorValue; + } + + /** + * Getter for property isFixedV. + * + * @return Value of property isFixedV. + */ + public boolean isFixedV() + { + return isFixedV; + } + + /** + * Setter for property isFixedV. + * + * @param isFixedVValue New value of property isFixedV. + */ + public void setIsFixedV(boolean isFixedVValue) + { + isFixedV = isFixedVValue; + } + + /** + * Getter for property capHeight. + * + * @return Value of property capHeight. + */ + public float getCapHeight() + { + return capHeight; + } + + /** + * Setter for property capHeight. + * + * @param capHeightValue New value of property capHeight. + */ + public void setCapHeight(float capHeightValue) + { + capHeight = capHeightValue; + } + + /** + * Getter for property xHeight. + * + * @return Value of property xHeight. + */ + public float getXHeight() + { + return xHeight; + } + + /** + * Setter for property xHeight. + * + * @param xHeightValue New value of property xHeight. + */ + public void setXHeight( float xHeightValue ) + { + xHeight = xHeightValue; + } + + /** + * Getter for property ascender. + * + * @return Value of property ascender. + */ + public float getAscender() + { + return ascender; + } + + /** + * Setter for property ascender. + * + * @param ascenderValue New value of property ascender. + */ + public void setAscender( float ascenderValue ) + { + ascender = ascenderValue; + } + + /** + * Getter for property descender. + * + * @return Value of property descender. + */ + public float getDescender() + { + return descender; + } + + /** + * Setter for property descender. + * + * @param descenderValue New value of property descender. + */ + public void setDescender( float descenderValue ) + { + descender = descenderValue; + } + + /** + * Getter for property fontVersion. + * + * @return Value of property fontVersion. + */ + public String getFontVersion() + { + return fontVersion; + } + + /** + * Setter for property fontVersion. + * + * @param fontVersionValue New value of property fontVersion. + */ + public void setFontVersion(String fontVersionValue) + { + fontVersion = fontVersionValue; + } + + /** + * Getter for property underlinePosition. + * + * @return Value of property underlinePosition. + */ + public float getUnderlinePosition() + { + return underlinePosition; + } + + /** + * Setter for property underlinePosition. + * + * @param underlinePositionValue New value of property underlinePosition. + */ + public void setUnderlinePosition(float underlinePositionValue) + { + underlinePosition = underlinePositionValue; + } + + /** + * Getter for property underlineThickness. + * + * @return Value of property underlineThickness. + */ + public float getUnderlineThickness() + { + return underlineThickness; + } + + /** + * Setter for property underlineThickness. + * + * @param underlineThicknessValue New value of property underlineThickness. + */ + public void setUnderlineThickness(float underlineThicknessValue) + { + underlineThickness = underlineThicknessValue; + } + + /** + * Getter for property italicAngle. + * + * @return Value of property italicAngle. + */ + public float getItalicAngle() + { + return italicAngle; + } + + /** + * Setter for property italicAngle. + * + * @param italicAngleValue New value of property italicAngle. + */ + public void setItalicAngle(float italicAngleValue) + { + italicAngle = italicAngleValue; + } + + /** + * Getter for property charWidth. + * + * @return Value of property charWidth. + */ + public float[] getCharWidth() + { + return this.charWidth; + } + + /** + * Setter for property charWidth. + * + * @param charWidthValue New value of property charWidth. + */ + public void setCharWidth(float[] charWidthValue) + { + charWidth = charWidthValue; + } + + /** + * Getter for property isFixedPitch. + * + * @return Value of property isFixedPitch. + */ + public boolean isFixedPitch() + { + return isFixedPitch; + } + + /** + * Setter for property isFixedPitch. + * + * @param isFixedPitchValue New value of property isFixedPitch. + */ + public void setFixedPitch(boolean isFixedPitchValue) + { + isFixedPitch = isFixedPitchValue; + } + + /** Getter for property charMetrics. + * @return Value of property charMetrics. + */ + public List getCharMetrics() + { + return Collections.unmodifiableList(charMetrics); + } + + /** Setter for property charMetrics. + * @param charMetricsValue New value of property charMetrics. + */ + public void setCharMetrics(List charMetricsValue) + { + charMetrics = charMetricsValue; + charMetricsMap = new HashMap<>(charMetrics.size()); + for (CharMetric metric : charMetricsValue) + { + charMetricsMap.put( metric.getName(), metric ); + } + } + + /** + * This will add another character metric. + * + * @param metric The character metric to add. + */ + public void addCharMetric( CharMetric metric ) + { + charMetrics.add( metric ); + charMetricsMap.put( metric.getName(), metric ); + } + + /** Getter for property trackKern. + * @return Value of property trackKern. + */ + public List getTrackKern() + { + return Collections.unmodifiableList(trackKern); + } + + /** Setter for property trackKern. + * @param trackKernValue New value of property trackKern. + */ + public void setTrackKern(List trackKernValue) + { + trackKern = trackKernValue; + } + + /** + * This will add another track kern. + * + * @param kern The track kerning data. + */ + public void addTrackKern( TrackKern kern ) + { + trackKern.add( kern ); + } + + /** Getter for property composites. + * @return Value of property composites. + */ + public List getComposites() + { + return Collections.unmodifiableList(composites); + } + + /** Setter for property composites. + * @param compositesList New value of property composites. + */ + public void setComposites(List compositesList) + { + composites = compositesList; + } + + /** + * This will add a single composite part to the picture. + * + * @param composite The composite info to add. + */ + public void addComposite( Composite composite ) + { + composites.add( composite ); + } + + /** Getter for property kernPairs. + * @return Value of property kernPairs. + */ + public List getKernPairs() + { + return Collections.unmodifiableList(kernPairs); + } + + /** + * This will add a kern pair. + * + * @param kernPair The kern pair to add. + */ + public void addKernPair( KernPair kernPair ) + { + kernPairs.add( kernPair ); + } + + /** Setter for property kernPairs. + * @param kernPairsList New value of property kernPairs. + */ + public void setKernPairs(List kernPairsList) + { + kernPairs = kernPairsList; + } + + /** Getter for property kernPairs0. + * @return Value of property kernPairs0. + */ + public List getKernPairs0() + { + return Collections.unmodifiableList(kernPairs0); + } + + /** + * This will add a kern pair. + * + * @param kernPair The kern pair to add. + */ + public void addKernPair0( KernPair kernPair ) + { + kernPairs0.add( kernPair ); + } + + /** Setter for property kernPairs0. + * @param kernPairs0List New value of property kernPairs0. + */ + public void setKernPairs0(List kernPairs0List) + { + kernPairs0 = kernPairs0List; + } + + /** Getter for property kernPairs1. + * @return Value of property kernPairs1. + */ + public List getKernPairs1() + { + return Collections.unmodifiableList(kernPairs1); + } + + /** + * This will add a kern pair. + * + * @param kernPair The kern pair to add. + */ + public void addKernPair1( KernPair kernPair ) + { + kernPairs1.add( kernPair ); + } + + /** Setter for property kernPairs1. + * @param kernPairs1List New value of property kernPairs1. + */ + public void setKernPairs1(List kernPairs1List) + { + kernPairs1 = kernPairs1List; + } + + /** Getter for property standardHorizontalWidth. + * @return Value of property standardHorizontalWidth. + */ + public float getStandardHorizontalWidth() + { + return standardHorizontalWidth; + } + + /** Setter for property standardHorizontalWidth. + * @param standardHorizontalWidthValue New value of property standardHorizontalWidth. + */ + public void setStandardHorizontalWidth(float standardHorizontalWidthValue) + { + standardHorizontalWidth = standardHorizontalWidthValue; + } + + /** Getter for property standardVerticalWidth. + * @return Value of property standardVerticalWidth. + */ + public float getStandardVerticalWidth() + { + return standardVerticalWidth; + } + + /** Setter for property standardVerticalWidth. + * @param standardVerticalWidthValue New value of property standardVerticalWidth. + */ + public void setStandardVerticalWidth(float standardVerticalWidthValue) + { + standardVerticalWidth = standardVerticalWidthValue; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/KernPair.java b/fontbox/src/main/java/org/apache/fontbox/afm/KernPair.java new file mode 100644 index 00000000000..4a11ea7700e --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/KernPair.java @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +/** + * This represents some kern pair data. + * + * @author Ben Litchfield + */ +public class KernPair +{ + private String firstKernCharacter; + private String secondKernCharacter; + private float x; + private float y; + + /** Getter for property firstKernCharacter. + * @return Value of property firstKernCharacter. + */ + public java.lang.String getFirstKernCharacter() + { + return firstKernCharacter; + } + + /** Setter for property firstKernCharacter. + * @param firstKernCharacterValue New value of property firstKernCharacter. + */ + public void setFirstKernCharacter(String firstKernCharacterValue) + { + firstKernCharacter = firstKernCharacterValue; + } + + /** Getter for property secondKernCharacter. + * @return Value of property secondKernCharacter. + */ + public java.lang.String getSecondKernCharacter() + { + return secondKernCharacter; + } + + /** Setter for property secondKernCharacter. + * @param secondKernCharacterValue New value of property secondKernCharacter. + */ + public void setSecondKernCharacter(String secondKernCharacterValue) + { + secondKernCharacter = secondKernCharacterValue; + } + + /** Getter for property x. + * @return Value of property x. + */ + public float getX() + { + return x; + } + + /** Setter for property x. + * @param xValue New value of property x. + */ + public void setX(float xValue) + { + x = xValue; + } + + /** Getter for property y. + * @return Value of property y. + */ + public float getY() + { + return y; + } + + /** Setter for property y. + * @param yValue New value of property y. + */ + public void setY(float yValue) + { + y = yValue; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/Ligature.java b/fontbox/src/main/java/org/apache/fontbox/afm/Ligature.java new file mode 100644 index 00000000000..8dcc3890783 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/Ligature.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +/** + * This class represents a ligature, which is an entry of the CharMetrics. + * + * @author Ben Litchfield + */ +public class Ligature +{ + private String successor; + private String ligature; + + /** Getter for property ligature. + * @return Value of property ligature. + */ + public String getLigature() + { + return ligature; + } + + /** Setter for property ligature. + * @param lig New value of property ligature. + */ + public void setLigature(String lig) + { + ligature = lig; + } + + /** Getter for property successor. + * @return Value of property successor. + */ + public String getSuccessor() + { + return successor; + } + + /** Setter for property successor. + * @param successorValue New value of property successor. + */ + public void setSuccessor(String successorValue) + { + successor = successorValue; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/TrackKern.java b/fontbox/src/main/java/org/apache/fontbox/afm/TrackKern.java new file mode 100644 index 00000000000..921607a8e39 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/TrackKern.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.afm; + +/** + * This class represents a piece of track kerning data. + * + * @author Ben Litchfield + */ +public class TrackKern +{ + private int degree; + private float minPointSize; + private float minKern; + private float maxPointSize; + private float maxKern; + + /** Getter for property degree. + * @return Value of property degree. + */ + public int getDegree() + { + return degree; + } + + /** Setter for property degree. + * @param degreeValue New value of property degree. + */ + public void setDegree(int degreeValue) + { + degree = degreeValue; + } + + /** Getter for property maxKern. + * @return Value of property maxKern. + */ + public float getMaxKern() + { + return maxKern; + } + + /** Setter for property maxKern. + * @param maxKernValue New value of property maxKern. + */ + public void setMaxKern(float maxKernValue) + { + maxKern = maxKernValue; + } + + /** Getter for property maxPointSize. + * @return Value of property maxPointSize. + */ + public float getMaxPointSize() + { + return maxPointSize; + } + + /** Setter for property maxPointSize. + * @param maxPointSizeValue New value of property maxPointSize. + */ + public void setMaxPointSize(float maxPointSizeValue) + { + maxPointSize = maxPointSizeValue; + } + + /** Getter for property minKern. + * @return Value of property minKern. + */ + public float getMinKern() + { + return minKern; + } + + /** Setter for property minKern. + * @param minKernValue New value of property minKern. + */ + public void setMinKern(float minKernValue) + { + minKern = minKernValue; + } + + /** Getter for property minPointSize. + * @return Value of property minPointSize. + */ + public float getMinPointSize() + { + return minPointSize; + } + + /** Setter for property minPointSize. + * @param minPointSizeValue New value of property minPointSize. + */ + public void setMinPointSize(float minPointSizeValue) + { + minPointSize = minPointSizeValue; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/afm/package.html b/fontbox/src/main/java/org/apache/fontbox/afm/package.html new file mode 100644 index 00000000000..d8ae7bd94c8 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/afm/package.html @@ -0,0 +1,28 @@ + + + + + + + +This package holds classes used to parse AFM(Adobe Font Metrics) files. +
+More information about AFM files can be found at +http://partners.adobe.com/asn/developer/type/ + + diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java new file mode 100644 index 00000000000..d9c598db99c --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java @@ -0,0 +1,296 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.cff; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.fontbox.type1.Type1CharStringReader; + +/** + * A Type 0 CIDFont represented in a CFF file. Thread safe. + * + * @author Villu Ruusmann + * @author John Hewson + */ +public class CFFCIDFont extends CFFFont +{ + private String registry; + private String ordering; + private int supplement; + + private List> fontDictionaries = new LinkedList<>(); + private List> privateDictionaries = new LinkedList<>(); + private FDSelect fdSelect; + + private final Map charStringCache = + new ConcurrentHashMap<>(); + + private final PrivateType1CharStringReader reader = new PrivateType1CharStringReader(); + + /** + * Returns the registry value. + * * @return the registry + */ + public String getRegistry() + { + return registry; + } + + /** + * Sets the registry value. + * + * @param registry the registry to set + */ + void setRegistry(String registry) + { + this.registry = registry; + } + + /** + * Returns the ordering value. + * + * @return the ordering + */ + public String getOrdering() + { + return ordering; + } + + /** + * Sets the ordering value. + * + * @param ordering the ordering to set + */ + void setOrdering(String ordering) + { + this.ordering = ordering; + } + + /** + * Returns the supplement value. + * + * @return the supplement + */ + public int getSupplement() + { + return supplement; + } + + /** + * Sets the supplement value. + * + * @param supplement the supplement to set + */ + void setSupplement(int supplement) + { + this.supplement = supplement; + } + + /** + * Returns the font dictionaries. + * + * @return the fontDict + */ + public List> getFontDicts() + { + return fontDictionaries; + } + + /** + * Sets the font dictionaries. + * + * @param fontDict the fontDict to set + */ + void setFontDict(List> fontDict) + { + this.fontDictionaries = fontDict; + } + + /** + * Returns the private dictionary. + * + * @return the privDict + */ + public List> getPrivDicts() + { + return privateDictionaries; + } + + /** + * Sets the private dictionary. + * + * @param privDict the privDict to set + */ + void setPrivDict(List> privDict) + { + this.privateDictionaries = privDict; + } + + /** + * Returns the fdSelect value. + * + * @return the fdSelect + */ + public FDSelect getFdSelect() + { + return fdSelect; + } + + /** + * Sets the fdSelect value. + * + * @param fdSelect the fdSelect to set + */ + void setFdSelect(FDSelect fdSelect) + { + this.fdSelect = fdSelect; + } + + /** + * Returns the defaultWidthX for the given GID. + * + * @param gid GID + */ + private int getDefaultWidthX(int gid) + { + int fdArrayIndex = this.fdSelect.getFDIndex(gid); + if (fdArrayIndex == -1) + { + return 1000; + } + Map privDict = this.privateDictionaries.get(fdArrayIndex); + return privDict.containsKey("defaultWidthX") ? ((Number)privDict.get("defaultWidthX")).intValue() : 1000; + } + + /** + * Returns the nominalWidthX for the given GID. + * + * @param gid GID + */ + private int getNominalWidthX(int gid) + { + int fdArrayIndex = this.fdSelect.getFDIndex(gid); + if (fdArrayIndex == -1) + { + return 0; + } + Map privDict = this.privateDictionaries.get(fdArrayIndex); + return privDict.containsKey("nominalWidthX") ? ((Number)privDict.get("nominalWidthX")).intValue() : 0; + } + + /** + * Returns the LocalSubrIndex for the given GID. + * + * @param gid GID + */ + private byte[][] getLocalSubrIndex(int gid) + { + int fdArrayIndex = this.fdSelect.getFDIndex(gid); + if (fdArrayIndex == -1) + { + return null; + } + Map privDict = this.privateDictionaries.get(fdArrayIndex); + return (byte[][])privDict.get("Subrs"); + } + + /** + * Returns the Type 2 charstring for the given CID. + * + * @param cid CID + * @throws IOException if the charstring could not be read + */ + @Override + public CIDKeyedType2CharString getType2CharString(int cid) throws IOException + { + CIDKeyedType2CharString type2 = charStringCache.get(cid); + if (type2 == null) + { + int gid = charset.getGIDForCID(cid); + + byte[] bytes = charStrings[gid]; + if (bytes == null) + { + bytes = charStrings[0]; // .notdef + } + Type2CharStringParser parser = new Type2CharStringParser(fontName, cid); + List type2seq = parser.parse(bytes, globalSubrIndex, getLocalSubrIndex(gid)); + type2 = new CIDKeyedType2CharString(reader, fontName, cid, gid, type2seq, + getDefaultWidthX(gid), getNominalWidthX(gid)); + charStringCache.put(cid, type2); + } + return type2; + } + + @Override + public List getFontMatrix() + { + // our parser guarantees that FontMatrix will be present and correct in the Top DICT + return (List)topDict.get("FontMatrix"); + } + + @Override + public GeneralPath getPath(String selector) throws IOException + { + int cid = selectorToCID(selector); + return getType2CharString(cid).getPath(); + } + + @Override + public float getWidth(String selector) throws IOException + { + int cid = selectorToCID(selector); + return getType2CharString(cid).getWidth(); + } + + @Override + public boolean hasGlyph(String selector) throws IOException + { + int cid = selectorToCID(selector); + return cid != 0; + } + + /** + * Parses a CID selector of the form \ddddd. + */ + private int selectorToCID(String selector) + { + if (!selector.startsWith("\\")) + { + throw new IllegalArgumentException("Invalid selector"); + } + return Integer.parseInt(selector.substring(1)); + } + + /** + * Private implementation of Type1CharStringReader, because only CFFType1Font can + * expose this publicly, as CIDFonts only support this for legacy 'seac' commands. + */ + private class PrivateType1CharStringReader implements Type1CharStringReader + { + @Override + public Type1CharString getType1CharString(String name) throws IOException + { + return CFFCIDFont.this.getType2CharString(0); // .notdef + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java new file mode 100644 index 00000000000..2768dde7e45 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFCharset.java @@ -0,0 +1,210 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.util.HashMap; +import java.util.Map; + +/** + * A CFF charset. A charset is an array of SIDs/CIDs for all glyphs in the font. + * + * todo: split this into two? CFFCharsetType1 and CFFCharsetCID ? + * + * @author John Hewson + */ +public abstract class CFFCharset +{ + private final boolean isCIDFont; + private final Map sidOrCidToGid = new HashMap<>(250); + private final Map gidToSid = new HashMap<>(250); + private final Map nameToSid = new HashMap<>(250); + + // inverse + private final Map gidToCid = new HashMap<>(); + private final Map gidToName = new HashMap<>(250); + + /** + * Package-private constructor for use by subclasses. + * + * @param isCIDFont true if the parent font is a CIDFont + */ + CFFCharset(boolean isCIDFont) + { + this.isCIDFont = isCIDFont; + } + + /** + * Indicates if the charset belongs to a CID font. + * + * @return true for CID fonts + */ + public boolean isCIDFont() + { + return isCIDFont; + } + + /** + * Adds a new GID/SID/name combination to the charset. + * + * @param gid GID + * @param sid SID + */ + public void addSID(int gid, int sid, String name) + { + if (isCIDFont) + { + throw new IllegalStateException("Not a Type 1-equivalent font"); + } + sidOrCidToGid.put(sid, gid); + gidToSid.put(gid, sid); + nameToSid.put(name, sid); + gidToName.put(gid, name); + } + + /** + * Adds a new GID/CID combination to the charset. + * + * @param gid GID + * @param cid CID + */ + public void addCID(int gid, int cid) + { + if (!isCIDFont) + { + throw new IllegalStateException("Not a CIDFont"); + } + sidOrCidToGid.put(cid, gid); + gidToCid.put(gid, cid); + } + + /** + * Returns the SID for a given GID. SIDs are internal to the font and are not public. + * + * @param sid SID + * @return GID + */ + int getSIDForGID(int sid) + { + if (isCIDFont) + { + throw new IllegalStateException("Not a Type 1-equivalent font"); + } + Integer gid = gidToSid.get(sid); + if (gid == null) + { + return 0; + } + return gid; + } + + /** + * Returns the GID for the given SID. SIDs are internal to the font and are not public. + * + * @param sid SID + * @return GID + */ + int getGIDForSID(int sid) + { + if (isCIDFont) + { + throw new IllegalStateException("Not a Type 1-equivalent font"); + } + Integer gid = sidOrCidToGid.get(sid); + if (gid == null) + { + return 0; + } + return gid; + } + + /** + * Returns the GID for a given CID. Returns 0 if the CID is missing. + * + * @param cid CID + * @return GID + */ + public int getGIDForCID(int cid) + { + if (!isCIDFont) + { + throw new IllegalStateException("Not a CIDFont"); + } + Integer gid = sidOrCidToGid.get(cid); + if (gid == null) + { + return 0; + } + return gid; + } + + /** + * Returns the SID for a given PostScript name, you would think this is not needed, + * but some fonts have glyphs beyond their encoding with charset SID names. + * + * @param name PostScript glyph name + * @return SID + */ + int getSID(String name) + { + if (isCIDFont) + { + throw new IllegalStateException("Not a Type 1-equivalent font"); + } + Integer sid = nameToSid.get(name); + if (sid == null) + { + return 0; + } + return sid; + } + + /** + * Returns the PostScript glyph name for the given GID. + * + * @param gid GID + * @return PostScript glyph name + */ + public String getNameForGID(int gid) + { + if (isCIDFont) + { + throw new IllegalStateException("Not a Type 1-equivalent font"); + } + return gidToName.get(gid); + } + + /** + * Returns the CID for the given GID. + * + * @param gid GID + * @return CID + */ + public int getCIDForGID(int gid) + { + if (!isCIDFont) + { + throw new IllegalStateException("Not a CIDFont"); + } + + Integer cid = gidToCid.get(gid); + if (cid != null) + { + return cid; + } + return 0; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFDataInput.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFDataInput.java new file mode 100644 index 00000000000..fff70596448 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFDataInput.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.IOException; + +/** + * This is specialized DataInput. It's used to parse a CFFFont. + * + * @author Villu Ruusmann + */ +public class CFFDataInput extends DataInput +{ + + /** + * Constructor. + * @param buffer the buffer to be read + */ + public CFFDataInput(byte[] buffer) + { + super(buffer); + } + + /** + * Read one single Card8 value from the buffer. + * @return the card8 value + * @throws IOException if an error occurs during reading + */ + public int readCard8() throws IOException + { + return readUnsignedByte(); + } + + /** + * Read one single Card16 value from the buffer. + * @return the card16 value + * @throws IOException if an error occurs during reading + */ + public int readCard16() throws IOException + { + return readUnsignedShort(); + } + + /** + * Read the offset from the buffer. + * @param offSize the given offsize + * @return the offset + * @throws IOException if an error occurs during reading + */ + public int readOffset(int offSize) throws IOException + { + int value = 0; + for (int i = 0; i < offSize; i++) + { + value = value << 8 | readUnsignedByte(); + } + return value; + } + + /** + * Read the offsize from the buffer. + * @return the offsize + * @throws IOException if an error occurs during reading + */ + public int readOffSize() throws IOException + { + return readUnsignedByte(); + } + + /** + * Read a SID from the buffer. + * @return the SID + * @throws IOException if an error occurs during reading + */ + public int readSID() throws IOException + { + return readUnsignedShort(); + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java new file mode 100644 index 00000000000..330123ef033 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFEncoding.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import org.apache.fontbox.encoding.Encoding; + +import java.util.HashMap; +import java.util.Map; + +/** + * A CFF Type 1-equivalent Encoding. An encoding is an array of codes associated with some or all + * glyphs in a font + * + * @author John Hewson + */ +public abstract class CFFEncoding extends Encoding +{ + private final Map codeToName = new HashMap<>(250); + + /** + * Package-private constructor for subclasses. + */ + CFFEncoding() + { + } + + /** + * Returns the name of the glyph for the given character code. + * + * @param code character code + * @return PostScript glyph name + */ + @Override + public String getName(int code) + { + String name = codeToName.get(code); + if (name == null) + { + return ".notdef"; + } + return name; + } + + /** + * Adds a new code/SID combination to the encoding. + * @param code the given code + * @param sid the given SID + */ + public void add(int code, int sid, String name) + { + codeToName.put(code, name); + addCharacterEncoding(code, name); + } + + /** + * For use by subclasses only. + */ + protected void add(int code, int sid) + { + String name = CFFStandardString.getName(sid); + codeToName.put(code, name); + addCharacterEncoding(code, name); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java new file mode 100644 index 00000000000..2d9af866203 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertCharset.java @@ -0,0 +1,225 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +/** + * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 1. + * + * @author Villu Ruusmann + */ +public final class CFFExpertCharset extends CFFCharset +{ + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of character codes and their corresponding names. + */ + private static final Object[][] CFF_EXPERT_CHARSET_TABLE = { + {0, ".notdef"}, + {1, "space"}, + {229, "exclamsmall"}, + {230, "Hungarumlautsmall"}, + {231, "dollaroldstyle"}, + {232, "dollarsuperior"}, + {233, "ampersandsmall"}, + {234, "Acutesmall"}, + {235, "parenleftsuperior"}, + {236, "parenrightsuperior"}, + {237, "twodotenleader"}, + {238, "onedotenleader"}, + {13, "comma"}, + {14, "hyphen"}, + {15, "period"}, + {99, "fraction"}, + {239, "zerooldstyle"}, + {240, "oneoldstyle"}, + {241, "twooldstyle"}, + {242, "threeoldstyle"}, + {243, "fouroldstyle"}, + {244, "fiveoldstyle"}, + {245, "sixoldstyle"}, + {246, "sevenoldstyle"}, + {247, "eightoldstyle"}, + {248, "nineoldstyle"}, + {27, "colon"}, + {28, "semicolon"}, + {249, "commasuperior"}, + {250, "threequartersemdash"}, + {251, "periodsuperior"}, + {252, "questionsmall"}, + {253, "asuperior"}, + {254, "bsuperior"}, + {255, "centsuperior"}, + {256, "dsuperior"}, + {257, "esuperior"}, + {258, "isuperior"}, + {259, "lsuperior"}, + {260, "msuperior"}, + {261, "nsuperior"}, + {262, "osuperior"}, + {263, "rsuperior"}, + {264, "ssuperior"}, + {265, "tsuperior"}, + {266, "ff"}, + {109, "fi"}, + {110, "fl"}, + {267, "ffi"}, + {268, "ffl"}, + {269, "parenleftinferior"}, + {270, "parenrightinferior"}, + {271, "Circumflexsmall"}, + {272, "hyphensuperior"}, + {273, "Gravesmall"}, + {274, "Asmall"}, + {275, "Bsmall"}, + {276, "Csmall"}, + {277, "Dsmall"}, + {278, "Esmall"}, + {279, "Fsmall"}, + {280, "Gsmall"}, + {281, "Hsmall"}, + {282, "Ismall"}, + {283, "Jsmall"}, + {284, "Ksmall"}, + {285, "Lsmall"}, + {286, "Msmall"}, + {287, "Nsmall"}, + {288, "Osmall"}, + {289, "Psmall"}, + {290, "Qsmall"}, + {291, "Rsmall"}, + {292, "Ssmall"}, + {293, "Tsmall"}, + {294, "Usmall"}, + {295, "Vsmall"}, + {296, "Wsmall"}, + {297, "Xsmall"}, + {298, "Ysmall"}, + {299, "Zsmall"}, + {300, "colonmonetary"}, + {301, "onefitted"}, + {302, "rupiah"}, + {303, "Tildesmall"}, + {304, "exclamdownsmall"}, + {305, "centoldstyle"}, + {306, "Lslashsmall"}, + {307, "Scaronsmall"}, + {308, "Zcaronsmall"}, + {309, "Dieresissmall"}, + {310, "Brevesmall"}, + {311, "Caronsmall"}, + {312, "Dotaccentsmall"}, + {313, "Macronsmall"}, + {314, "figuredash"}, + {315, "hypheninferior"}, + {316, "Ogoneksmall"}, + {317, "Ringsmall"}, + {318, "Cedillasmall"}, + {158, "onequarter"}, + {155, "onehalf"}, + {163, "threequarters"}, + {319, "questiondownsmall"}, + {320, "oneeighth"}, + {321, "threeeighths"}, + {322, "fiveeighths"}, + {323, "seveneighths"}, + {324, "onethird"}, + {325, "twothirds"}, + {326, "zerosuperior"}, + {150, "onesuperior"}, + {164, "twosuperior"}, + {169, "threesuperior"}, + {327, "foursuperior"}, + {328, "fivesuperior"}, + {329, "sixsuperior"}, + {330, "sevensuperior"}, + {331, "eightsuperior"}, + {332, "ninesuperior"}, + {333, "zeroinferior"}, + {334, "oneinferior"}, + {335, "twoinferior"}, + {336, "threeinferior"}, + {337, "fourinferior"}, + {338, "fiveinferior"}, + {339, "sixinferior"}, + {340, "seveninferior"}, + {341, "eightinferior"}, + {342, "nineinferior"}, + {343, "centinferior"}, + {344, "dollarinferior"}, + {345, "periodinferior"}, + {346, "commainferior"}, + {347, "Agravesmall"}, + {348, "Aacutesmall"}, + {349, "Acircumflexsmall"}, + {350, "Atildesmall"}, + {351, "Adieresissmall"}, + {352, "Aringsmall"}, + {353, "AEsmall"}, + {354, "Ccedillasmall"}, + {355, "Egravesmall"}, + {356, "Eacutesmall"}, + {357, "Ecircumflexsmall"}, + {358, "Edieresissmall"}, + {359, "Igravesmall"}, + {360, "Iacutesmall"}, + {361, "Icircumflexsmall"}, + {362, "Idieresissmall"}, + {363, "Ethsmall"}, + {364, "Ntildesmall"}, + {365, "Ogravesmall"}, + {366, "Oacutesmall"}, + {367, "Ocircumflexsmall"}, + {368, "Otildesmall"}, + {369, "Odieresissmall"}, + {370, "OEsmall"}, + {371, "Oslashsmall"}, + {372, "Ugravesmall"}, + {373, "Uacutesmall"}, + {374, "Ucircumflexsmall"}, + {375, "Udieresissmall"}, + {376, "Yacutesmall"}, + {377, "Thornsmall"}, + {378, "Ydieresissmall"} + }; + + private CFFExpertCharset() + { + super(false); + } + + /** + * Returns an instance of the CFFExpertCharset class. + * @return an instance of CFFExpertCharset + */ + public static CFFExpertCharset getInstance() + { + return CFFExpertCharset.INSTANCE; + } + + private static final CFFExpertCharset INSTANCE = new CFFExpertCharset(); + + static + { + int gid = 0; + for (Object[] charsetEntry : CFF_EXPERT_CHARSET_TABLE) + { + INSTANCE.addSID(gid++, (Integer) charsetEntry[CHAR_CODE], charsetEntry[CHAR_NAME].toString()); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java new file mode 100644 index 00000000000..79079fd73a5 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertEncoding.java @@ -0,0 +1,314 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +/** + * This is specialized CFFEncoding. It's used if the EncodingId of a font is set to 1. + * + * @author Villu Ruusmann + */ +public final class CFFExpertEncoding extends CFFEncoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_SID = 1; + + /** + * Table of character codes and their corresponding sid. + */ + private static final int[][] CFF_EXPERT_ENCODING_TABLE = { + {0, 0}, + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {5, 0}, + {6, 0}, + {7, 0}, + {8, 0}, + {9, 0}, + {10, 0}, + {11, 0}, + {12, 0}, + {13, 0}, + {14, 0}, + {15, 0}, + {16, 0}, + {17, 0}, + {18, 0}, + {19, 0}, + {20, 0}, + {21, 0}, + {22, 0}, + {23, 0}, + {24, 0}, + {25, 0}, + {26, 0}, + {27, 0}, + {28, 0}, + {29, 0}, + {30, 0}, + {31, 0}, + {32, 1}, + {33, 229}, + {34, 230}, + {35, 0}, + {36, 231}, + {37, 232}, + {38, 233}, + {39, 234}, + {40, 235}, + {41, 236}, + {42, 237}, + {43, 238}, + {44, 13}, + {45, 14}, + {46, 15}, + {47, 99}, + {48, 239}, + {49, 240}, + {50, 241}, + {51, 242}, + {52, 243}, + {53, 244}, + {54, 245}, + {55, 246}, + {56, 247}, + {57, 248}, + {58, 27}, + {59, 28}, + {60, 249}, + {61, 250}, + {62, 251}, + {63, 252}, + {64, 0}, + {65, 253}, + {66, 254}, + {67, 255}, + {68, 256}, + {69, 257}, + {70, 0}, + {71, 0}, + {72, 0}, + {73, 258}, + {74, 0}, + {75, 0}, + {76, 259}, + {77, 260}, + {78, 261}, + {79, 262}, + {80, 0}, + {81, 0}, + {82, 263}, + {83, 264}, + {84, 265}, + {85, 0}, + {86, 266}, + {87, 109}, + {88, 110}, + {89, 267}, + {90, 268}, + {91, 269}, + {92, 0}, + {93, 270}, + {94, 271}, + {95, 272}, + {96, 273}, + {97, 274}, + {98, 275}, + {99, 276}, + {100, 277}, + {101, 278}, + {102, 279}, + {103, 280}, + {104, 281}, + {105, 282}, + {106, 283}, + {107, 284}, + {108, 285}, + {109, 286}, + {110, 287}, + {111, 288}, + {112, 289}, + {113, 290}, + {114, 291}, + {115, 292}, + {116, 293}, + {117, 294}, + {118, 295}, + {119, 296}, + {120, 297}, + {121, 298}, + {122, 299}, + {123, 300}, + {124, 301}, + {125, 302}, + {126, 303}, + {127, 0}, + {128, 0}, + {129, 0}, + {130, 0}, + {131, 0}, + {132, 0}, + {133, 0}, + {134, 0}, + {135, 0}, + {136, 0}, + {137, 0}, + {138, 0}, + {139, 0}, + {140, 0}, + {141, 0}, + {142, 0}, + {143, 0}, + {144, 0}, + {145, 0}, + {146, 0}, + {147, 0}, + {148, 0}, + {149, 0}, + {150, 0}, + {151, 0}, + {152, 0}, + {153, 0}, + {154, 0}, + {155, 0}, + {156, 0}, + {157, 0}, + {158, 0}, + {159, 0}, + {160, 0}, + {161, 304}, + {162, 305}, + {163, 306}, + {164, 0}, + {165, 0}, + {166, 307}, + {167, 308}, + {168, 309}, + {169, 310}, + {170, 311}, + {171, 0}, + {172, 312}, + {173, 0}, + {174, 0}, + {175, 313}, + {176, 0}, + {177, 0}, + {178, 314}, + {179, 315}, + {180, 0}, + {181, 0}, + {182, 316}, + {183, 317}, + {184, 318}, + {185, 0}, + {186, 0}, + {187, 0}, + {188, 158}, + {189, 155}, + {190, 163}, + {191, 319}, + {192, 320}, + {193, 321}, + {194, 322}, + {195, 323}, + {196, 324}, + {197, 325}, + {198, 0}, + {199, 0}, + {200, 326}, + {201, 150}, + {202, 164}, + {203, 169}, + {204, 327}, + {205, 328}, + {206, 329}, + {207, 330}, + {208, 331}, + {209, 332}, + {210, 333}, + {211, 334}, + {212, 335}, + {213, 336}, + {214, 337}, + {215, 338}, + {216, 339}, + {217, 340}, + {218, 341}, + {219, 342}, + {220, 343}, + {221, 344}, + {222, 345}, + {223, 346}, + {224, 347}, + {225, 348}, + {226, 349}, + {227, 350}, + {228, 351}, + {229, 352}, + {230, 353}, + {231, 354}, + {232, 355}, + {233, 356}, + {234, 357}, + {235, 358}, + {236, 359}, + {237, 360}, + {238, 361}, + {239, 362}, + {240, 363}, + {241, 364}, + {242, 365}, + {243, 366}, + {244, 367}, + {245, 368}, + {246, 369}, + {247, 370}, + {248, 371}, + {249, 372}, + {250, 373}, + {251, 374}, + {252, 375}, + {253, 376}, + {254, 377}, + {255, 378} + }; + + private CFFExpertEncoding() + { + } + + /** + * Returns an instance of the CFFExportEncoding class. + * @return an instance of CFFExportEncoding + */ + public static CFFExpertEncoding getInstance() + { + return CFFExpertEncoding.INSTANCE; + } + + private static final CFFExpertEncoding INSTANCE = new CFFExpertEncoding(); + + static + { + for (int[] encodingEntry : CFF_EXPERT_ENCODING_TABLE) + { + INSTANCE.add(encodingEntry[CHAR_CODE], encodingEntry[CHAR_SID]); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java new file mode 100644 index 00000000000..63c4638a789 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFExpertSubsetCharset.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + + +/** + * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 2. + * + * @author Villu Ruusmann + */ +public final class CFFExpertSubsetCharset extends CFFCharset +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of character codes and their corresponding names. + */ + private static final Object[][] CFF_EXPERT_SUBSET_CHARSET_TABLE = { + {0, ".notdef"}, + {1, "space"}, + {231, "dollaroldstyle"}, + {232, "dollarsuperior"}, + {235, "parenleftsuperior"}, + {236, "parenrightsuperior"}, + {237, "twodotenleader"}, + {238, "onedotenleader"}, + {13, "comma"}, + {14, "hyphen"}, + {15, "period"}, + {99, "fraction"}, + {239, "zerooldstyle"}, + {240, "oneoldstyle"}, + {241, "twooldstyle"}, + {242, "threeoldstyle"}, + {243, "fouroldstyle"}, + {244, "fiveoldstyle"}, + {245, "sixoldstyle"}, + {246, "sevenoldstyle"}, + {247, "eightoldstyle"}, + {248, "nineoldstyle"}, + {27, "colon"}, + {28, "semicolon"}, + {249, "commasuperior"}, + {250, "threequartersemdash"}, + {251, "periodsuperior"}, + {253, "asuperior"}, + {254, "bsuperior"}, + {255, "centsuperior"}, + {256, "dsuperior"}, + {257, "esuperior"}, + {258, "isuperior"}, + {259, "lsuperior"}, + {260, "msuperior"}, + {261, "nsuperior"}, + {262, "osuperior"}, + {263, "rsuperior"}, + {264, "ssuperior"}, + {265, "tsuperior"}, + {266, "ff"}, + {109, "fi"}, + {110, "fl"}, + {267, "ffi"}, + {268, "ffl"}, + {269, "parenleftinferior"}, + {270, "parenrightinferior"}, + {272, "hyphensuperior"}, + {300, "colonmonetary"}, + {301, "onefitted"}, + {302, "rupiah"}, + {305, "centoldstyle"}, + {314, "figuredash"}, + {315, "hypheninferior"}, + {158, "onequarter"}, + {155, "onehalf"}, + {163, "threequarters"}, + {320, "oneeighth"}, + {321, "threeeighths"}, + {322, "fiveeighths"}, + {323, "seveneighths"}, + {324, "onethird"}, + {325, "twothirds"}, + {326, "zerosuperior"}, + {150, "onesuperior"}, + {164, "twosuperior"}, + {169, "threesuperior"}, + {327, "foursuperior"}, + {328, "fivesuperior"}, + {329, "sixsuperior"}, + {330, "sevensuperior"}, + {331, "eightsuperior"}, + {332, "ninesuperior"}, + {333, "zeroinferior"}, + {334, "oneinferior"}, + {335, "twoinferior"}, + {336, "threeinferior"}, + {337, "fourinferior"}, + {338, "fiveinferior"}, + {339, "sixinferior"}, + {340, "seveninferior"}, + {341, "eightinferior"}, + {342, "nineinferior"}, + {343, "centinferior"}, + {344, "dollarinferior"}, + {345, "periodinferior"}, + {346, "commainferior"} + }; + + private CFFExpertSubsetCharset() + { + super(false); + } + + /** + * Returns an instance of the CFFExpertSubsetCharset class. + * @return an instance of CFFExpertSubsetCharset + */ + public static CFFExpertSubsetCharset getInstance() + { + return CFFExpertSubsetCharset.INSTANCE; + } + + private static final CFFExpertSubsetCharset INSTANCE = new CFFExpertSubsetCharset(); + + static + { + int gid = 0; + for (Object[] charsetEntry : CFF_EXPERT_SUBSET_CHARSET_TABLE) + { + INSTANCE.addSID(gid++, (Integer) charsetEntry[CHAR_CODE], charsetEntry[CHAR_NAME].toString()); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java new file mode 100644 index 00000000000..268add274ef --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java @@ -0,0 +1,193 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.util.BoundingBox; + +/** + * An Adobe Compact Font Format (CFF) font. Thread safe. + * + * @author Villu Ruusmann + * @author John Hewson + */ +public abstract class CFFFont implements FontBoxFont +{ + protected String fontName; + protected final Map topDict = new LinkedHashMap<>(); + protected CFFCharset charset; + protected byte[][] charStrings; + protected byte[][] globalSubrIndex; + private CFFParser.ByteSource source; + + /** + * The name of the font. + * + * @return the name of the font + */ + @Override + public String getName() + { + return fontName; + } + + /** + * Sets the name of the font. + * + * @param name the name of the font + */ + void setName(String name) + { + fontName = name; + } + + /** + * Adds the given key/value pair to the top dictionary. + * + * @param name the given key + * @param value the given value + */ + public void addValueToTopDict(String name, Object value) + { + if (value != null) + { + topDict.put(name, value); + } + } + + /** + * Returns the top dictionary. + * + * @return the dictionary + */ + public Map getTopDict() + { + return topDict; + } + + /** + * Returns the FontMatrix. + */ + @Override + public abstract List getFontMatrix(); + + /** + * Returns the FontBBox. + */ + @Override + public BoundingBox getFontBBox() + { + List numbers = (List)topDict.get("FontBBox"); + return new BoundingBox(numbers); + } + + /** + * Returns the CFFCharset of the font. + * + * @return the charset + */ + public CFFCharset getCharset() + { + return charset; + } + + /** + * Sets the CFFCharset of the font. + * + * @param charset the given CFFCharset + */ + void setCharset(CFFCharset charset) + { + this.charset = charset; + } + + /** + * Returns the character strings dictionary. For expert users only. + * + * @return the dictionary + */ + public final List getCharStringBytes() + { + return Arrays.asList(charStrings); + } + + /** + * Sets a byte source to re-read the CFF data in the future. + */ + final void setData(CFFParser.ByteSource source) + { + this.source = source; + } + + /** + * Returns the CFF data. + */ + public byte[] getData() throws IOException + { + return source.getBytes(); + } + + /** + * Returns the number of charstrings in the font. + */ + public int getNumCharStrings() + { + return charStrings.length; + } + + /** + * Sets the global subroutine index data. + * + * @param globalSubrIndexValue an list containing the global subroutines + */ + void setGlobalSubrIndex(byte[][] globalSubrIndexValue) + { + globalSubrIndex = globalSubrIndexValue; + } + + /** + * Returns the list containing the global subroutine . + * + * @return the dictionary + */ + public List getGlobalSubrIndex() + { + return Arrays.asList(globalSubrIndex); + } + + /** + * Returns the Type 2 charstring for the given CID. + * + * @param cidOrGid CID for CIFFont, or GID for Type 1 font + * @throws IOException if the charstring could not be read + */ + public abstract Type2CharString getType2CharString(int cidOrGid) throws IOException; + + @Override + public String toString() + { + return getClass().getSimpleName() + "[name=" + fontName + ", topDict=" + topDict + + ", charset=" + charset + ", charStrings=" + Arrays.deepToString(charStrings) + + "]"; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFISOAdobeCharset.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFISOAdobeCharset.java new file mode 100644 index 00000000000..1a810e3f748 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFISOAdobeCharset.java @@ -0,0 +1,289 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + + +/** + * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 0. + * + * @author Villu Ruusmann + */ +public final class CFFISOAdobeCharset extends CFFCharset +{ + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of character codes and their corresponding names. + */ + private static final Object[][] CFF_ISO_ADOBE_CHARSET_TABLE = { + {0, ".notdef"}, + {1, "space"}, + {2, "exclam"}, + {3, "quotedbl"}, + {4, "numbersign"}, + {5, "dollar"}, + {6, "percent"}, + {7, "ampersand"}, + {8, "quoteright"}, + {9, "parenleft"}, + {10, "parenright"}, + {11, "asterisk"}, + {12, "plus"}, + {13, "comma"}, + {14, "hyphen"}, + {15, "period"}, + {16, "slash"}, + {17, "zero"}, + {18, "one"}, + {19, "two"}, + {20, "three"}, + {21, "four"}, + {22, "five"}, + {23, "six"}, + {24, "seven"}, + {25, "eight"}, + {26, "nine"}, + {27, "colon"}, + {28, "semicolon"}, + {29, "less"}, + {30, "equal"}, + {31, "greater"}, + {32, "question"}, + {33, "at"}, + {34, "A"}, + {35, "B"}, + {36, "C"}, + {37, "D"}, + {38, "E"}, + {39, "F"}, + {40, "G"}, + {41, "H"}, + {42, "I"}, + {43, "J"}, + {44, "K"}, + {45, "L"}, + {46, "M"}, + {47, "N"}, + {48, "O"}, + {49, "P"}, + {50, "Q"}, + {51, "R"}, + {52, "S"}, + {53, "T"}, + {54, "U"}, + {55, "V"}, + {56, "W"}, + {57, "X"}, + {58, "Y"}, + {59, "Z"}, + {60, "bracketleft"}, + {61, "backslash"}, + {62, "bracketright"}, + {63, "asciicircum"}, + {64, "underscore"}, + {65, "quoteleft"}, + {66, "a"}, + {67, "b"}, + {68, "c"}, + {69, "d"}, + {70, "e"}, + {71, "f"}, + {72, "g"}, + {73, "h"}, + {74, "i"}, + {75, "j"}, + {76, "k"}, + {77, "l"}, + {78, "m"}, + {79, "n"}, + {80, "o"}, + {81, "p"}, + {82, "q"}, + {83, "r"}, + {84, "s"}, + {85, "t"}, + {86, "u"}, + {87, "v"}, + {88, "w"}, + {89, "x"}, + {90, "y"}, + {91, "z"}, + {92, "braceleft"}, + {93, "bar"}, + {94, "braceright"}, + {95, "asciitilde"}, + {96, "exclamdown"}, + {97, "cent"}, + {98, "sterling"}, + {99, "fraction"}, + {100, "yen"}, + {101, "florin"}, + {102, "section"}, + {103, "currency"}, + {104, "quotesingle"}, + {105, "quotedblleft"}, + {106, "guillemotleft"}, + {107, "guilsinglleft"}, + {108, "guilsinglright"}, + {109, "fi"}, + {110, "fl"}, + {111, "endash"}, + {112, "dagger"}, + {113, "daggerdbl"}, + {114, "periodcentered"}, + {115, "paragraph"}, + {116, "bullet"}, + {117, "quotesinglbase"}, + {118, "quotedblbase"}, + {119, "quotedblright"}, + {120, "guillemotright"}, + {121, "ellipsis"}, + {122, "perthousand"}, + {123, "questiondown"}, + {124, "grave"}, + {125, "acute"}, + {126, "circumflex"}, + {127, "tilde"}, + {128, "macron"}, + {129, "breve"}, + {130, "dotaccent"}, + {131, "dieresis"}, + {132, "ring"}, + {133, "cedilla"}, + {134, "hungarumlaut"}, + {135, "ogonek"}, + {136, "caron"}, + {137, "emdash"}, + {138, "AE"}, + {139, "ordfeminine"}, + {140, "Lslash"}, + {141, "Oslash"}, + {142, "OE"}, + {143, "ordmasculine"}, + {144, "ae"}, + {145, "dotlessi"}, + {146, "lslash"}, + {147, "oslash"}, + {148, "oe"}, + {149, "germandbls"}, + {150, "onesuperior"}, + {151, "logicalnot"}, + {152, "mu"}, + {153, "trademark"}, + {154, "Eth"}, + {155, "onehalf"}, + {156, "plusminus"}, + {157, "Thorn"}, + {158, "onequarter"}, + {159, "divide"}, + {160, "brokenbar"}, + {161, "degree"}, + {162, "thorn"}, + {163, "threequarters"}, + {164, "twosuperior"}, + {165, "registered"}, + {166, "minus"}, + {167, "eth"}, + {168, "multiply"}, + {169, "threesuperior"}, + {170, "copyright"}, + {171, "Aacute"}, + {172, "Acircumflex"}, + {173, "Adieresis"}, + {174, "Agrave"}, + {175, "Aring"}, + {176, "Atilde"}, + {177, "Ccedilla"}, + {178, "Eacute"}, + {179, "Ecircumflex"}, + {180, "Edieresis"}, + {181, "Egrave"}, + {182, "Iacute"}, + {183, "Icircumflex"}, + {184, "Idieresis"}, + {185, "Igrave"}, + {186, "Ntilde"}, + {187, "Oacute"}, + {188, "Ocircumflex"}, + {189, "Odieresis"}, + {190, "Ograve"}, + {191, "Otilde"}, + {192, "Scaron"}, + {193, "Uacute"}, + {194, "Ucircumflex"}, + {195, "Udieresis"}, + {196, "Ugrave"}, + {197, "Yacute"}, + {198, "Ydieresis"}, + {199, "Zcaron"}, + {200, "aacute"}, + {201, "acircumflex"}, + {202, "adieresis"}, + {203, "agrave"}, + {204, "aring"}, + {205, "atilde"}, + {206, "ccedilla"}, + {207, "eacute"}, + {208, "ecircumflex"}, + {209, "edieresis"}, + {210, "egrave"}, + {211, "iacute"}, + {212, "icircumflex"}, + {213, "idieresis"}, + {214, "igrave"}, + {215, "ntilde"}, + {216, "oacute"}, + {217, "ocircumflex"}, + {218, "odieresis"}, + {219, "ograve"}, + {220, "otilde"}, + {221, "scaron"}, + {222, "uacute"}, + {223, "ucircumflex"}, + {224, "udieresis"}, + {225, "ugrave"}, + {226, "yacute"}, + {227, "ydieresis"}, + {228, "zcaron"} + }; + + private CFFISOAdobeCharset() + { + super(false); + } + + /** + * Returns an instance of the CFFExpertSubsetCharset class. + * @return an instance of CFFExpertSubsetCharset + */ + public static CFFISOAdobeCharset getInstance() + { + return CFFISOAdobeCharset.INSTANCE; + } + + private static final CFFISOAdobeCharset INSTANCE = new CFFISOAdobeCharset(); + + static + { + int gid = 0; + for (Object[] charsetEntry : CFF_ISO_ADOBE_CHARSET_TABLE) + { + INSTANCE.addSID(gid++, (Integer) charsetEntry[CHAR_CODE], charsetEntry[CHAR_NAME].toString()); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFOperator.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFOperator.java new file mode 100644 index 00000000000..7b9d9b7d493 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFOperator.java @@ -0,0 +1,266 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * This class represents a CFF operator. + * @author Villu Ruusmann + */ +public final class CFFOperator +{ + + private Key operatorKey = null; + private String operatorName = null; + + private CFFOperator(Key key, String name) + { + setKey(key); + setName(name); + } + + /** + * The key of the operator. + * @return the key + */ + public Key getKey() + { + return operatorKey; + } + + private void setKey(Key key) + { + operatorKey = key; + } + + /** + * The name of the operator. + * @return the name + */ + public String getName() + { + return operatorName; + } + + private void setName(String name) + { + operatorName = name; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return getName(); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return getKey().hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) + { + if (object instanceof CFFOperator) + { + CFFOperator that = (CFFOperator) object; + return getKey().equals(that.getKey()); + } + return false; + } + + private static void register(Key key, String name) + { + CFFOperator operator = new CFFOperator(key, name); + keyMap.put(key, operator); + nameMap.put(name, operator); + } + + /** + * Returns the operator corresponding to the given key. + * @param key the given key + * @return the corresponding operator + */ + public static CFFOperator getOperator(Key key) + { + return keyMap.get(key); + } + + /** + * Returns the operator corresponding to the given name. + * @param name the given name + * @return the corresponding operator + */ + public static CFFOperator getOperator(String name) + { + return nameMap.get(name); + } + + /** + * This class is a holder for a key value. It consists of one or two bytes. + * @author Villu Ruusmann + */ + public static class Key + { + private int[] value = null; + + /** + * Constructor. + * @param b0 the one byte value + */ + public Key(int b0) + { + this(new int[] { b0 }); + } + + /** + * Constructor. + * @param b0 the first byte of a two byte value + * @param b1 the second byte of a two byte value + */ + public Key(int b0, int b1) + { + this(new int[] { b0, b1 }); + } + + private Key(int[] value) + { + setValue(value); + } + + /** + * Returns the value of the key. + * @return the value + */ + public int[] getValue() + { + return value; + } + + private void setValue(int[] value) + { + this.value = value; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return Arrays.toString(getValue()); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return Arrays.hashCode(getValue()); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) + { + if (object instanceof Key) + { + Key that = (Key) object; + return Arrays.equals(getValue(), that.getValue()); + } + return false; + } + } + + private static Map keyMap = new LinkedHashMap<>(52); + private static Map nameMap = new LinkedHashMap<>(52); + + static + { + // Top DICT + register(new Key(0), "version"); + register(new Key(1), "Notice"); + register(new Key(12, 0), "Copyright"); + register(new Key(2), "FullName"); + register(new Key(3), "FamilyName"); + register(new Key(4), "Weight"); + register(new Key(12, 1), "isFixedPitch"); + register(new Key(12, 2), "ItalicAngle"); + register(new Key(12, 3), "UnderlinePosition"); + register(new Key(12, 4), "UnderlineThickness"); + register(new Key(12, 5), "PaintType"); + register(new Key(12, 6), "CharstringType"); + register(new Key(12, 7), "FontMatrix"); + register(new Key(13), "UniqueID"); + register(new Key(5), "FontBBox"); + register(new Key(12, 8), "StrokeWidth"); + register(new Key(14), "XUID"); + register(new Key(15), "charset"); + register(new Key(16), "Encoding"); + register(new Key(17), "CharStrings"); + register(new Key(18), "Private"); + register(new Key(12, 20), "SyntheticBase"); + register(new Key(12, 21), "PostScript"); + register(new Key(12, 22), "BaseFontName"); + register(new Key(12, 23), "BaseFontBlend"); + register(new Key(12, 30), "ROS"); + register(new Key(12, 31), "CIDFontVersion"); + register(new Key(12, 32), "CIDFontRevision"); + register(new Key(12, 33), "CIDFontType"); + register(new Key(12, 34), "CIDCount"); + register(new Key(12, 35), "UIDBase"); + register(new Key(12, 36), "FDArray"); + register(new Key(12, 37), "FDSelect"); + register(new Key(12, 38), "FontName"); + + // Private DICT + register(new Key(6), "BlueValues"); + register(new Key(7), "OtherBlues"); + register(new Key(8), "FamilyBlues"); + register(new Key(9), "FamilyOtherBlues"); + register(new Key(12, 9), "BlueScale"); + register(new Key(12, 10), "BlueShift"); + register(new Key(12, 11), "BlueFuzz"); + register(new Key(10), "StdHW"); + register(new Key(11), "StdVW"); + register(new Key(12, 12), "StemSnapH"); + register(new Key(12, 13), "StemSnapV"); + register(new Key(12, 14), "ForceBold"); + register(new Key(12, 15), "LanguageGroup"); + register(new Key(12, 16), "ExpansionFactor"); + register(new Key(12, 17), "initialRandomSeed"); + register(new Key(19), "Subrs"); + register(new Key(20), "defaultWidthX"); + register(new Key(21), "nominalWidthX"); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java new file mode 100644 index 00000000000..99257a7ccce --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java @@ -0,0 +1,1576 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.fontbox.util.Charsets; + +/** + * This class represents a parser for a CFF font. + * @author Villu Ruusmann + */ +public class CFFParser +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(CFFParser.class); + + private static final String TAG_OTTO = "OTTO"; + private static final String TAG_TTCF = "ttcf"; + private static final String TAG_TTFONLY = "\u0000\u0001\u0000\u0000"; + + private String[] stringIndex = null; + private ByteSource source; + + // for debugging only + private String debugFontName; + + /** + * Source from which bytes may be read in the future. + */ + public interface ByteSource + { + /** + * Returns the source bytes. May be called more than once. + */ + byte[] getBytes() throws IOException; + } + + /** + * Parse CFF font using byte array, also passing in a byte source for future use. + * + * @param bytes source bytes + * @param source source to re-read bytes from in the future + * @return the parsed CFF fonts + * @throws IOException If there is an error reading from the stream + */ + public List parse(byte[] bytes, ByteSource source) throws IOException + { + this.source = source; + return parse(bytes); + } + + /** + * Parse CFF font using a byte array as input. + * + * @param bytes the given byte array + * @return the parsed CFF fonts + * @throws IOException If there is an error reading from the stream + */ + public List parse(byte[] bytes) throws IOException + { + CFFDataInput input = new CFFDataInput(bytes); + + String firstTag = readTagName(input); + // try to determine which kind of font we have + switch (firstTag) + { + case TAG_OTTO: + input = createTaggedCFFDataInput(input, bytes); + break; + case TAG_TTCF: + throw new IOException("True Type Collection fonts are not supported."); + case TAG_TTFONLY: + throw new IOException("OpenType fonts containing a true type font are not supported."); + default: + input.setPosition(0); + break; + } + + @SuppressWarnings("unused") + Header header = readHeader(input); + String[] nameIndex = readStringIndexData(input); + if (nameIndex == null) + { + throw new IOException("Name index missing in CFF font"); + } + byte[][] topDictIndex = readIndexData(input); + if (topDictIndex == null) + { + throw new IOException("Top DICT INDEX missing in CFF font"); + } + + stringIndex = readStringIndexData(input); + byte[][] globalSubrIndex = readIndexData(input); + + List fonts = new ArrayList<>(); + for (int i = 0; i < nameIndex.length; i++) + { + CFFFont font = parseFont(input, nameIndex[i], topDictIndex[i]); + font.setGlobalSubrIndex(globalSubrIndex); + font.setData(source); + fonts.add(font); + } + return fonts; + } + + private CFFDataInput createTaggedCFFDataInput(CFFDataInput input, byte[] bytes) throws IOException + { + // this is OpenType font containing CFF data + // so find CFF tag + short numTables = input.readShort(); + @SuppressWarnings({"unused", "squid:S1854"}) + short searchRange = input.readShort(); + @SuppressWarnings({"unused", "squid:S1854"}) + short entrySelector = input.readShort(); + @SuppressWarnings({"unused", "squid:S1854"}) + short rangeShift = input.readShort(); + for (int q = 0; q < numTables; q++) + { + String tagName = readTagName(input); + @SuppressWarnings("unused") + long checksum = readLong(input); + long offset = readLong(input); + long length = readLong(input); + if ("CFF ".equals(tagName)) + { + byte[] bytes2 = Arrays.copyOfRange(bytes, (int) offset, (int) (offset + length)); + return new CFFDataInput(bytes2); + } + } + throw new IOException("CFF tag not found in this OpenType font."); + } + + private static String readTagName(CFFDataInput input) throws IOException + { + byte[] b = input.readBytes(4); + return new String(b, Charsets.ISO_8859_1); + } + + private static long readLong(CFFDataInput input) throws IOException + { + return (input.readCard16() << 16) | input.readCard16(); + } + + private static Header readHeader(CFFDataInput input) throws IOException + { + Header cffHeader = new Header(); + cffHeader.major = input.readCard8(); + cffHeader.minor = input.readCard8(); + cffHeader.hdrSize = input.readCard8(); + cffHeader.offSize = input.readOffSize(); + return cffHeader; + } + + private static int[] readIndexDataOffsets(CFFDataInput input) throws IOException + { + int count = input.readCard16(); + if (count == 0) + { + return null; + } + int offSize = input.readOffSize(); + int[] offsets = new int[count+1]; + for (int i = 0; i <= count; i++) + { + int offset = input.readOffset(offSize); + if (offset > input.length()) + { + throw new IOException("illegal offset value " + offset + " in CFF font"); + } + offsets[i] = offset; + } + return offsets; + } + + private static byte[][] readIndexData(CFFDataInput input) throws IOException + { + int[] offsets = readIndexDataOffsets(input); + if (offsets == null) + { + return null; + } + int count = offsets.length-1; + byte[][] indexDataValues = new byte[count][]; + for (int i = 0; i < count; i++) + { + int length = offsets[i + 1] - offsets[i]; + indexDataValues[i] = input.readBytes(length); + } + return indexDataValues; + } + + private static String[] readStringIndexData(CFFDataInput input) throws IOException + { + int[] offsets = readIndexDataOffsets(input); + if (offsets == null) + { + return null; + } + int count = offsets.length-1; + String[] indexDataValues = new String[count]; + for (int i = 0; i < count; i++) + { + int length = offsets[i + 1] - offsets[i]; + if (length < 0) + { + throw new IOException("Negative index data length + " + length + " at " + + i + ": offsets[" + (i + 1) + "]=" + offsets[i + 1] + + ", offsets[" + i + "]=" + offsets[i]); + } + indexDataValues[i] = new String(input.readBytes(length), Charsets.ISO_8859_1); + } + return indexDataValues; + } + + private static DictData readDictData(CFFDataInput input) throws IOException + { + DictData dict = new DictData(); + while (input.hasRemaining()) + { + dict.add(readEntry(input)); + } + return dict; + } + + private static DictData readDictData(CFFDataInput input, int dictSize) throws IOException + { + DictData dict = new DictData(); + int endPosition = input.getPosition() + dictSize; + while (input.getPosition() < endPosition) + { + dict.add(readEntry(input)); + } + return dict; + } + + private static DictData.Entry readEntry(CFFDataInput input) throws IOException + { + DictData.Entry entry = new DictData.Entry(); + while (true) + { + int b0 = input.readUnsignedByte(); + + if (b0 >= 0 && b0 <= 21) + { + entry.operator = readOperator(input, b0); + break; + } + else if (b0 == 28 || b0 == 29) + { + entry.operands.add(readIntegerNumber(input, b0)); + } + else if (b0 == 30) + { + entry.operands.add(readRealNumber(input, b0)); + } + else if (b0 >= 32 && b0 <= 254) + { + entry.operands.add(readIntegerNumber(input, b0)); + } + else + { + throw new IOException("invalid DICT data b0 byte: " + b0); + } + } + return entry; + } + + private static CFFOperator readOperator(CFFDataInput input, int b0) throws IOException + { + CFFOperator.Key key = readOperatorKey(input, b0); + return CFFOperator.getOperator(key); + } + + private static CFFOperator.Key readOperatorKey(CFFDataInput input, int b0) throws IOException + { + if (b0 == 12) + { + int b1 = input.readUnsignedByte(); + return new CFFOperator.Key(b0, b1); + } + return new CFFOperator.Key(b0); + } + + private static Integer readIntegerNumber(CFFDataInput input, int b0) throws IOException + { + if (b0 == 28) + { + return (int) input.readShort(); + } + else if (b0 == 29) + { + return input.readInt(); + } + else if (b0 >= 32 && b0 <= 246) + { + return b0 - 139; + } + else if (b0 >= 247 && b0 <= 250) + { + int b1 = input.readUnsignedByte(); + return (b0 - 247) * 256 + b1 + 108; + } + else if (b0 >= 251 && b0 <= 254) + { + int b1 = input.readUnsignedByte(); + return -(b0 - 251) * 256 - b1 - 108; + } + else + { + throw new IllegalArgumentException(); + } + } + + /** + * @param b0 + */ + private static Double readRealNumber(CFFDataInput input, int b0) throws IOException + { + StringBuilder sb = new StringBuilder(); + boolean done = false; + boolean exponentMissing = false; + boolean hasExponent = false; + while (!done) + { + int b = input.readUnsignedByte(); + int[] nibbles = { b / 16, b % 16 }; + for (int nibble : nibbles) + { + switch (nibble) + { + case 0x0: + case 0x1: + case 0x2: + case 0x3: + case 0x4: + case 0x5: + case 0x6: + case 0x7: + case 0x8: + case 0x9: + sb.append(nibble); + exponentMissing = false; + break; + case 0xa: + sb.append("."); + break; + case 0xb: + if (hasExponent) + { + LOG.warn("duplicate 'E' ignored after " + sb); + break; + } + sb.append("E"); + exponentMissing = true; + hasExponent = true; + break; + case 0xc: + if (hasExponent) + { + LOG.warn("duplicate 'E-' ignored after " + sb); + break; + } + sb.append("E-"); + exponentMissing = true; + hasExponent = true; + break; + case 0xd: + break; + case 0xe: + sb.append("-"); + break; + case 0xf: + done = true; + break; + default: + throw new IllegalArgumentException(); + } + } + } + if (exponentMissing) + { + // the exponent is missing, just append "0" to avoid an exception + // not sure if 0 is the correct value, but it seems to fit + // see PDFBOX-1522 + sb.append("0"); + } + if (sb.length() == 0) + { + return 0d; + } + return Double.valueOf(sb.toString()); + } + + private CFFFont parseFont(CFFDataInput input, String name, byte[] topDictIndex) throws IOException + { + // top dict + CFFDataInput topDictInput = new CFFDataInput(topDictIndex); + DictData topDict = readDictData(topDictInput); + + // we dont't support synthetic fonts + DictData.Entry syntheticBaseEntry = topDict.getEntry("SyntheticBase"); + if (syntheticBaseEntry != null) + { + throw new IOException("Synthetic Fonts are not supported"); + } + + // determine if this is a Type 1-equivalent font or a CIDFont + CFFFont font; + boolean isCIDFont = topDict.getEntry("ROS") != null; + if (isCIDFont) + { + font = new CFFCIDFont(); + DictData.Entry rosEntry = topDict.getEntry("ROS"); + ((CFFCIDFont) font).setRegistry(readString(rosEntry.getNumber(0).intValue())); + ((CFFCIDFont) font).setOrdering(readString(rosEntry.getNumber(1).intValue())); + ((CFFCIDFont) font).setSupplement(rosEntry.getNumber(2).intValue()); + } + else + { + font = new CFFType1Font(); + } + + // name + debugFontName = name; + font.setName(name); + + // top dict + font.addValueToTopDict("version", getString(topDict, "version")); + font.addValueToTopDict("Notice", getString(topDict, "Notice")); + font.addValueToTopDict("Copyright", getString(topDict, "Copyright")); + font.addValueToTopDict("FullName", getString(topDict, "FullName")); + font.addValueToTopDict("FamilyName", getString(topDict, "FamilyName")); + font.addValueToTopDict("Weight", getString(topDict, "Weight")); + font.addValueToTopDict("isFixedPitch", topDict.getBoolean("isFixedPitch", false)); + font.addValueToTopDict("ItalicAngle", topDict.getNumber("ItalicAngle", 0)); + font.addValueToTopDict("UnderlinePosition", topDict.getNumber("UnderlinePosition", -100)); + font.addValueToTopDict("UnderlineThickness", topDict.getNumber("UnderlineThickness", 50)); + font.addValueToTopDict("PaintType", topDict.getNumber("PaintType", 0)); + font.addValueToTopDict("CharstringType", topDict.getNumber("CharstringType", 2)); + font.addValueToTopDict("FontMatrix", topDict.getArray("FontMatrix", Arrays.asList( + 0.001, (double) 0, (double) 0, 0.001, + (double) 0, (double) 0))); + font.addValueToTopDict("UniqueID", topDict.getNumber("UniqueID", null)); + font.addValueToTopDict("FontBBox", topDict.getArray("FontBBox", + Arrays. asList(0, 0, 0, 0))); + font.addValueToTopDict("StrokeWidth", topDict.getNumber("StrokeWidth", 0)); + font.addValueToTopDict("XUID", topDict.getArray("XUID", null)); + + // charstrings index + DictData.Entry charStringsEntry = topDict.getEntry("CharStrings"); + int charStringsOffset = charStringsEntry.getNumber(0).intValue(); + input.setPosition(charStringsOffset); + byte[][] charStringsIndex = readIndexData(input); + + // charset + DictData.Entry charsetEntry = topDict.getEntry("charset"); + CFFCharset charset; + if (charsetEntry != null) + { + int charsetId = charsetEntry.getNumber(0).intValue(); + if (!isCIDFont && charsetId == 0) + { + charset = CFFISOAdobeCharset.getInstance(); + } + else if (!isCIDFont && charsetId == 1) + { + charset = CFFExpertCharset.getInstance(); + } + else if (!isCIDFont && charsetId == 2) + { + charset = CFFExpertSubsetCharset.getInstance(); + } + else if (charStringsIndex != null) + { + input.setPosition(charsetId); + charset = readCharset(input, charStringsIndex.length, isCIDFont); + } + // that should not happen + else + { + LOG.debug("Couldn't read CharStrings index - returning empty charset instead"); + charset = new EmptyCharset(0); + } + + } + else + { + if (isCIDFont) + { + // CharStrings index could be null if the index data couldnÄt be read + int numEntries = charStringsIndex == null ? 0 : charStringsIndex.length; + // a CID font with no charset does not default to any predefined charset + charset = new EmptyCharset(numEntries); + } + else + { + charset = CFFISOAdobeCharset.getInstance(); + } + } + font.setCharset(charset); + + // charstrings dict + font.charStrings = charStringsIndex; + + // format-specific dictionaries + if (isCIDFont) + { + + // CharStrings index could be null if the index data couldn't be read + int numEntries = 0; + if (charStringsIndex == null) + { + LOG.debug("Couldn't read CharStrings index - parsing CIDFontDicts with number of char strings set to 0"); + } + else + { + numEntries = charStringsIndex.length; + } + + parseCIDFontDicts(input, topDict, (CFFCIDFont) font, numEntries); + + List privMatrix = null; + List> fontDicts = ((CFFCIDFont) font).getFontDicts(); + if (!fontDicts.isEmpty() && fontDicts.get(0).containsKey("FontMatrix")) + { + privMatrix = (List) fontDicts.get(0).get("FontMatrix"); + } + // some malformed fonts have FontMatrix in their Font DICT, see PDFBOX-2495 + List matrix = topDict.getArray("FontMatrix", null); + if (matrix == null) + { + if (privMatrix != null) + { + font.addValueToTopDict("FontMatrix", privMatrix); + } + else + { + // default + font.addValueToTopDict("FontMatrix", topDict.getArray("FontMatrix", + Arrays.asList(0.001, (double) 0, (double) 0, 0.001, + (double) 0, (double) 0))); + } + } + else if (privMatrix != null) + { + // we have to multiply the font matrix from the top directory with the font matrix + // from the private directory. This should be done for synthetic fonts only but in + // case of PDFBOX-3579 it's needed as well to get the right scaling + concatenateMatrix(matrix, privMatrix); + } + + } + else + { + parseType1Dicts(input, topDict, (CFFType1Font) font, charset); + } + + return font; + } + + private void concatenateMatrix(List matrixDest, List matrixConcat) + { + // concatenate matrices + // (a b 0) + // (c d 0) + // (x y 1) + double a1 = matrixDest.get(0).doubleValue(); + double b1 = matrixDest.get(1).doubleValue(); + double c1 = matrixDest.get(2).doubleValue(); + double d1 = matrixDest.get(3).doubleValue(); + double x1 = matrixDest.get(4).doubleValue(); + double y1 = matrixDest.get(5).doubleValue(); + + double a2 = matrixConcat.get(0).doubleValue(); + double b2 = matrixConcat.get(1).doubleValue(); + double c2 = matrixConcat.get(2).doubleValue(); + double d2 = matrixConcat.get(3).doubleValue(); + double x2 = matrixConcat.get(4).doubleValue(); + double y2 = matrixConcat.get(5).doubleValue(); + + matrixDest.set(0, a1 * a2 + b1 * c2); + matrixDest.set(1, a1 * b2 + b1 * d1); + matrixDest.set(2, c1 * a2 + d1 * c2); + matrixDest.set(3, c1 * b2 + d1 * d2); + matrixDest.set(4, x1 * a2 + y1 * c2 + x2); + matrixDest.set(5, x1 * b2 + y1 * d2 + y2); + } + + /** + * Parse dictionaries specific to a CIDFont. + */ + private void parseCIDFontDicts(CFFDataInput input, DictData topDict, CFFCIDFont font, int nrOfcharStrings) + throws IOException + { + // In a CIDKeyed Font, the Private dictionary isn't in the Top Dict but in the Font dict + // which can be accessed by a lookup using FDArray and FDSelect + DictData.Entry fdArrayEntry = topDict.getEntry("FDArray"); + if (fdArrayEntry == null) + { + throw new IOException("FDArray is missing for a CIDKeyed Font."); + } + + // font dict index + int fontDictOffset = fdArrayEntry.getNumber(0).intValue(); + input.setPosition(fontDictOffset); + byte[][] fdIndex = readIndexData(input); + + List> privateDictionaries = new LinkedList<>(); + List> fontDictionaries = new LinkedList<>(); + + for (byte[] bytes : fdIndex) + { + CFFDataInput fontDictInput = new CFFDataInput(bytes); + DictData fontDict = readDictData(fontDictInput); + + // read private dict + DictData.Entry privateEntry = fontDict.getEntry("Private"); + if (privateEntry == null) + { + throw new IOException("Font DICT invalid without \"Private\" entry"); + } + + // font dict + Map fontDictMap = new LinkedHashMap<>(4); + fontDictMap.put("FontName", getString(fontDict, "FontName")); + fontDictMap.put("FontType", fontDict.getNumber("FontType", 0)); + fontDictMap.put("FontBBox", fontDict.getArray("FontBBox", null)); + fontDictMap.put("FontMatrix", fontDict.getArray("FontMatrix", null)); + // TODO OD-4 : Add here other keys + fontDictionaries.add(fontDictMap); + + int privateOffset = privateEntry.getNumber(1).intValue(); + input.setPosition(privateOffset); + int privateSize = privateEntry.getNumber(0).intValue(); + DictData privateDict = readDictData(input, privateSize); + + // populate private dict + Map privDict = readPrivateDict(privateDict); + privateDictionaries.add(privDict); + + // local subrs + int localSubrOffset = (Integer) privateDict.getNumber("Subrs", 0); + if (localSubrOffset > 0) + { + input.setPosition(privateOffset + localSubrOffset); + privDict.put("Subrs", readIndexData(input)); + } + } + + // font-dict (FD) select + DictData.Entry fdSelectEntry = topDict.getEntry("FDSelect"); + int fdSelectPos = fdSelectEntry.getNumber(0).intValue(); + input.setPosition(fdSelectPos); + FDSelect fdSelect = readFDSelect(input, nrOfcharStrings, font); + + // TODO almost certainly erroneous - CIDFonts do not have a top-level private dict + // font.addValueToPrivateDict("defaultWidthX", 1000); + // font.addValueToPrivateDict("nominalWidthX", 0); + + font.setFontDict(fontDictionaries); + font.setPrivDict(privateDictionaries); + font.setFdSelect(fdSelect); + } + + private Map readPrivateDict(DictData privateDict) + { + Map privDict = new LinkedHashMap<>(17); + privDict.put("BlueValues", privateDict.getDelta("BlueValues", null)); + privDict.put("OtherBlues", privateDict.getDelta("OtherBlues", null)); + privDict.put("FamilyBlues", privateDict.getDelta("FamilyBlues", null)); + privDict.put("FamilyOtherBlues", privateDict.getDelta("FamilyOtherBlues", null)); + privDict.put("BlueScale", privateDict.getNumber("BlueScale", 0.039625)); + privDict.put("BlueShift", privateDict.getNumber("BlueShift", 7)); + privDict.put("BlueFuzz", privateDict.getNumber("BlueFuzz", 1)); + privDict.put("StdHW", privateDict.getNumber("StdHW", null)); + privDict.put("StdVW", privateDict.getNumber("StdVW", null)); + privDict.put("StemSnapH", privateDict.getDelta("StemSnapH", null)); + privDict.put("StemSnapV", privateDict.getDelta("StemSnapV", null)); + privDict.put("ForceBold", privateDict.getBoolean("ForceBold", false)); + privDict.put("LanguageGroup", privateDict.getNumber("LanguageGroup", 0)); + privDict.put("ExpansionFactor", privateDict.getNumber("ExpansionFactor", 0.06)); + privDict.put("initialRandomSeed", privateDict.getNumber("initialRandomSeed", 0)); + privDict.put("defaultWidthX", privateDict.getNumber("defaultWidthX", 0)); + privDict.put("nominalWidthX", privateDict.getNumber("nominalWidthX", 0)); + return privDict; + } + + /** + * Parse dictionaries specific to a Type 1-equivalent font. + */ + private void parseType1Dicts(CFFDataInput input, DictData topDict, CFFType1Font font, CFFCharset charset) + throws IOException + { + // encoding + DictData.Entry encodingEntry = topDict.getEntry("Encoding"); + CFFEncoding encoding; + int encodingId = encodingEntry != null ? encodingEntry.getNumber(0).intValue() : 0; + switch (encodingId) + { + case 0: + encoding = CFFStandardEncoding.getInstance(); + break; + case 1: + encoding = CFFExpertEncoding.getInstance(); + break; + default: + input.setPosition(encodingId); + encoding = readEncoding(input, charset); + break; + } + font.setEncoding(encoding); + + // read private dict + DictData.Entry privateEntry = topDict.getEntry("Private"); + if (privateEntry == null) + { + throw new IOException("Private dictionary entry missing for font " + font.fontName); + } + int privateOffset = privateEntry.getNumber(1).intValue(); + input.setPosition(privateOffset); + int privateSize = privateEntry.getNumber(0).intValue(); + DictData privateDict = readDictData(input, privateSize); + + // populate private dict + Map privDict = readPrivateDict(privateDict); + for (Map.Entry entry : privDict.entrySet()) + { + font.addToPrivateDict(entry.getKey(), entry.getValue()); + } + + // local subrs + int localSubrOffset = (Integer) privateDict.getNumber("Subrs", 0); + if (localSubrOffset > 0) + { + input.setPosition(privateOffset + localSubrOffset); + font.addToPrivateDict("Subrs", readIndexData(input)); + } + } + + private String readString(int index) throws IOException + { + if (index >= 0 && index <= 390) + { + return CFFStandardString.getName(index); + } + if (index - 391 < stringIndex.length) + { + return stringIndex[index - 391]; + } + else + { + // technically this maps to .notdef, but we need a unique sid name + return "SID" + index; + } + } + + private String getString(DictData dict, String name) throws IOException + { + DictData.Entry entry = dict.getEntry(name); + return entry != null ? readString(entry.getNumber(0).intValue()) : null; + } + + private CFFEncoding readEncoding(CFFDataInput dataInput, CFFCharset charset) throws IOException + { + int format = dataInput.readCard8(); + int baseFormat = format & 0x7f; + + switch (baseFormat) + { + case 0: + return readFormat0Encoding(dataInput, charset, format); + case 1: + return readFormat1Encoding(dataInput, charset, format); + default: + throw new IllegalArgumentException(); + } + } + + private Format0Encoding readFormat0Encoding(CFFDataInput dataInput, CFFCharset charset, + int format) throws IOException + { + Format0Encoding encoding = new Format0Encoding(); + encoding.format = format; + encoding.nCodes = dataInput.readCard8(); + encoding.add(0, 0, ".notdef"); + for (int gid = 1; gid <= encoding.nCodes; gid++) + { + int code = dataInput.readCard8(); + int sid = charset.getSIDForGID(gid); + encoding.add(code, sid, readString(sid)); + } + if ((format & 0x80) != 0) + { + readSupplement(dataInput, encoding); + } + return encoding; + } + + private Format1Encoding readFormat1Encoding(CFFDataInput dataInput, CFFCharset charset, + int format) throws IOException + { + Format1Encoding encoding = new Format1Encoding(); + encoding.format = format; + encoding.nRanges = dataInput.readCard8(); + encoding.add(0, 0, ".notdef"); + int gid = 1; + for (int i = 0; i < encoding.nRanges; i++) + { + int rangeFirst = dataInput.readCard8(); + int rangeLeft = dataInput.readCard8(); + for (int j = 0; j < 1 + rangeLeft; j++) + { + int sid = charset.getSIDForGID(gid); + int code = rangeFirst + j; + encoding.add(code, sid, readString(sid)); + gid++; + } + } + if ((format & 0x80) != 0) + { + readSupplement(dataInput, encoding); + } + return encoding; + } + + private void readSupplement(CFFDataInput dataInput, CFFBuiltInEncoding encoding) throws IOException + { + encoding.nSups = dataInput.readCard8(); + encoding.supplement = new CFFBuiltInEncoding.Supplement[encoding.nSups]; + for (int i = 0; i < encoding.supplement.length; i++) + { + CFFBuiltInEncoding.Supplement supplement = new CFFBuiltInEncoding.Supplement(); + supplement.code = dataInput.readCard8(); + supplement.sid = dataInput.readSID(); + supplement.name = readString(supplement.sid); + encoding.supplement[i] = supplement; + encoding.add(supplement.code, supplement.sid, readString(supplement.sid)); + } + } + + /** + * Read the FDSelect Data according to the format. + * @param dataInput + * @param nGlyphs + * @param ros + * @return the FDSelect data + * @throws IOException + */ + private static FDSelect readFDSelect(CFFDataInput dataInput, int nGlyphs, CFFCIDFont ros) throws IOException + { + int format = dataInput.readCard8(); + switch (format) + { + case 0: + return readFormat0FDSelect(dataInput, format, nGlyphs, ros); + case 3: + return readFormat3FDSelect(dataInput, format, nGlyphs, ros); + default: + throw new IllegalArgumentException(); + } + } + + /** + * Read the Format 0 of the FDSelect data structure. + * @param dataInput + * @param format + * @param nGlyphs + * @param ros + * @return the Format 0 of the FDSelect data + * @throws IOException + */ + private static Format0FDSelect readFormat0FDSelect(CFFDataInput dataInput, int format, int nGlyphs, CFFCIDFont ros) + throws IOException + { + Format0FDSelect fdselect = new Format0FDSelect(ros); + fdselect.format = format; + fdselect.fds = new int[nGlyphs]; + for (int i = 0; i < fdselect.fds.length; i++) + { + fdselect.fds[i] = dataInput.readCard8(); + } + return fdselect; + } + + /** + * Read the Format 3 of the FDSelect data structure. + * + * @param dataInput + * @param format + * @param nGlyphs + * @param ros + * @return the Format 3 of the FDSelect data + * @throws IOException + */ + private static Format3FDSelect readFormat3FDSelect(CFFDataInput dataInput, int format, int nGlyphs, CFFCIDFont ros) + throws IOException + { + Format3FDSelect fdselect = new Format3FDSelect(ros); + fdselect.format = format; + fdselect.nbRanges = dataInput.readCard16(); + + fdselect.range3 = new Range3[fdselect.nbRanges]; + for (int i = 0; i < fdselect.nbRanges; i++) + { + Range3 r3 = new Range3(); + r3.first = dataInput.readCard16(); + r3.fd = dataInput.readCard8(); + fdselect.range3[i] = r3; + + } + + fdselect.sentinel = dataInput.readCard16(); + return fdselect; + } + + /** + * Format 3 FDSelect data. + */ + private static final class Format3FDSelect extends FDSelect + { + private int format; + private int nbRanges; + private Range3[] range3; + private int sentinel; + + private Format3FDSelect(CFFCIDFont owner) + { + super(owner); + } + + @Override + public int getFDIndex(int gid) + { + for (int i = 0; i < nbRanges; ++i) + { + if (range3[i].first <= gid) + { + if (i + 1 < nbRanges) + { + if (range3[i + 1].first > gid) + { + return range3[i].fd; + } + // go to next range + } + else + { + // last range reach, the sentinel must be greater than gid + if (sentinel > gid) + { + return range3[i].fd; + } + return -1; + } + } + } + return 0; + } + + @Override + public String toString() + { + return getClass().getName() + "[format=" + format + " nbRanges=" + nbRanges + ", range3=" + + Arrays.toString(range3) + " sentinel=" + sentinel + "]"; + } + } + + /** + * Structure of a Range3 element. + */ + private static final class Range3 + { + private int first; + private int fd; + + @Override + public String toString() + { + return getClass().getName() + "[first=" + first + ", fd=" + fd + "]"; + } + } + + /** + * Format 0 FDSelect. + */ + private static class Format0FDSelect extends FDSelect + { + @SuppressWarnings("unused") + private int format; + private int[] fds; + + private Format0FDSelect(CFFCIDFont owner) + { + super(owner); + } + + @Override + public int getFDIndex(int gid) + { + if (gid < fds.length) + { + return fds[gid]; + } + return 0; + } + + @Override + public String toString() + { + return getClass().getName() + "[fds=" + Arrays.toString(fds) + "]"; + } + } + + private CFFCharset readCharset(CFFDataInput dataInput, int nGlyphs, boolean isCIDFont) + throws IOException + { + int format = dataInput.readCard8(); + switch (format) + { + case 0: + return readFormat0Charset(dataInput, format, nGlyphs, isCIDFont); + case 1: + return readFormat1Charset(dataInput, format, nGlyphs, isCIDFont); + case 2: + return readFormat2Charset(dataInput, format, nGlyphs, isCIDFont); + default: + throw new IllegalArgumentException(); + } + } + + private Format0Charset readFormat0Charset(CFFDataInput dataInput, int format, int nGlyphs, + boolean isCIDFont) throws IOException + { + Format0Charset charset = new Format0Charset(isCIDFont); + charset.format = format; + if (isCIDFont) + { + charset.addCID(0, 0); + } + else + { + charset.addSID(0, 0, ".notdef"); + } + + for (int gid = 1; gid < nGlyphs; gid++) + { + int sid = dataInput.readSID(); + if (isCIDFont) + { + charset.addCID(gid, sid); + } + else + { + charset.addSID(gid, sid, readString(sid)); + } + } + return charset; + } + + private Format1Charset readFormat1Charset(CFFDataInput dataInput, int format, int nGlyphs, + boolean isCIDFont) throws IOException + { + Format1Charset charset = new Format1Charset(isCIDFont); + charset.format = format; + if (isCIDFont) + { + charset.addCID(0, 0); + charset.rangesCID2GID = new ArrayList<>(); + } + else + { + charset.addSID(0, 0, ".notdef"); + } + + for (int gid = 1; gid < nGlyphs; gid++) + { + int rangeFirst = dataInput.readSID(); + int rangeLeft = dataInput.readCard8(); + if (!isCIDFont) + { + for (int j = 0; j < 1 + rangeLeft; j++) + { + int sid = rangeFirst + j; + charset.addSID(gid + j, sid, readString(sid)); + } + } + else + { + charset.rangesCID2GID.add(new RangeMapping(gid, rangeFirst, rangeLeft)); + } + gid += rangeLeft; + } + return charset; + } + + private Format2Charset readFormat2Charset(CFFDataInput dataInput, int format, int nGlyphs, + boolean isCIDFont) throws IOException + { + Format2Charset charset = new Format2Charset(isCIDFont); + charset.format = format; + if (isCIDFont) + { + charset.addCID(0, 0); + charset.rangesCID2GID = new ArrayList<>(); + } + else + { + charset.addSID(0, 0, ".notdef"); + } + + for (int gid = 1; gid < nGlyphs; gid++) + { + int first = dataInput.readSID(); + int nLeft = dataInput.readCard16(); + if (!isCIDFont) + { + for (int j = 0; j < 1 + nLeft; j++) + { + int sid = first + j; + charset.addSID(gid + j, sid, readString(sid)); + } + } + else + { + charset.rangesCID2GID.add(new RangeMapping(gid, first, nLeft)); + } + gid += nLeft; + } + return charset; + } + + /** + * Inner class holding the header of a CFF font. + */ + private static class Header + { + private int major; + private int minor; + private int hdrSize; + private int offSize; + + @Override + public String toString() + { + return getClass().getName() + "[major=" + major + ", minor=" + minor + ", hdrSize=" + hdrSize + + ", offSize=" + offSize + "]"; + } + } + + /** + * Inner class holding the DictData of a CFF font. + */ + private static class DictData + { + private final Map entries = new HashMap<>(); + + public void add(Entry entry) + { + if (entry.operator != null) + { + entries.put(entry.operator.getName(), entry); + } + } + + public Entry getEntry(String name) + { + return entries.get(name); + } + + public Boolean getBoolean(String name, boolean defaultValue) + { + Entry entry = getEntry(name); + return entry != null && !entry.getArray().isEmpty() ? entry.getBoolean(0) : defaultValue; + } + + public List getArray(String name, List defaultValue) + { + Entry entry = getEntry(name); + return entry != null && !entry.getArray().isEmpty() ? entry.getArray() : defaultValue; + } + + public Number getNumber(String name, Number defaultValue) + { + Entry entry = getEntry(name); + return entry != null && !entry.getArray().isEmpty() ? entry.getNumber(0) : defaultValue; + } + + public List getDelta(String name, List defaultValue) + { + Entry entry = getEntry(name); + return entry != null && !entry.getArray().isEmpty() ? entry.getDelta() : defaultValue; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return getClass().getName() + "[entries=" + entries + "]"; + } + + /** + * Inner class holding an operand of a CFF font. + */ + private static class Entry + { + private List operands = new ArrayList<>(); + private CFFOperator operator = null; + + public Number getNumber(int index) + { + return operands.get(index); + } + + public Boolean getBoolean(int index) + { + Number operand = operands.get(index); + if (operand instanceof Integer) + { + switch (operand.intValue()) + { + case 0: + return Boolean.FALSE; + case 1: + return Boolean.TRUE; + default: + break; + } + } + throw new IllegalArgumentException(); + } + + public List getArray() + { + return operands; + } + + public List getDelta() + { + List result = new ArrayList<>(operands); + for (int i = 1; i < result.size(); i++) + { + Number previous = result.get(i - 1); + Number current = result.get(i); + Integer sum = previous.intValue() + current.intValue(); + result.set(i, sum); + } + return result; + } + + @Override + public String toString() + { + return getClass().getName() + "[operands=" + operands + ", operator=" + operator + "]"; + } + } + } + + /** + * Inner class representing a font's built-in CFF encoding. + */ + abstract static class CFFBuiltInEncoding extends CFFEncoding + { + private int nSups; + private Supplement[] supplement; + + /** + * Inner class representing a supplement for an encoding. + */ + static class Supplement + { + private int code; + private int sid; + private String name; + + public int getCode() + { + return code; + } + + public int getSID() + { + return sid; + } + + public String getName() + { + return name; + } + + @Override + public String toString() + { + return getClass().getName() + "[code=" + code + ", sid=" + sid + "]"; + } + } + } + + /** + * Inner class representing a Format0 encoding. + */ + private static class Format0Encoding extends CFFBuiltInEncoding + { + private int format; + private int nCodes; + + @Override + public String toString() + { + return getClass().getName() + "[format=" + format + ", nCodes=" + nCodes + + ", supplement=" + Arrays.toString(super.supplement) + "]"; + } + } + + /** + * Inner class representing a Format1 encoding. + */ + private static class Format1Encoding extends CFFBuiltInEncoding + { + private int format; + private int nRanges; + + @Override + public String toString() + { + return getClass().getName() + "[format=" + format + ", nRanges=" + nRanges + + ", supplement=" + Arrays.toString(super.supplement) + "]"; + } + } + + /** + * Inner class representing an embedded CFF charset. + */ + abstract static class EmbeddedCharset extends CFFCharset + { + protected EmbeddedCharset(boolean isCIDFont) + { + super(isCIDFont); + } + } + + /** + * An empty charset in a malformed CID font. + */ + private static class EmptyCharset extends EmbeddedCharset + { + protected EmptyCharset(int numCharStrings) + { + super(true); + addCID(0, 0); // .notdef + + // Adobe Reader treats CID as GID, PDFBOX-2571 p11. + for (int i = 1; i <= numCharStrings; i++) + { + addCID(i, i); + } + } + + @Override + public String toString() + { + return getClass().getName(); + } + } + + /** + * Inner class representing a Format0 charset. + */ + private static class Format0Charset extends EmbeddedCharset + { + private int format; + + protected Format0Charset(boolean isCIDFont) + { + super(isCIDFont); + } + + @Override + public String toString() + { + return getClass().getName() + "[format=" + format + "]"; + } + } + + /** + * Inner class representing a Format1 charset. + */ + private static class Format1Charset extends EmbeddedCharset + { + private int format; + private List rangesCID2GID; + + protected Format1Charset(boolean isCIDFont) + { + super(isCIDFont); + } + + @Override + public int getCIDForGID(int gid) + { + if (isCIDFont()) + { + for (RangeMapping mapping : rangesCID2GID) + { + if (mapping.isInRange(gid)) + { + return mapping.mapValue(gid); + } + } + } + return super.getCIDForGID(gid); + } + + @Override + public int getGIDForCID(int cid) + { + if (isCIDFont()) + { + for (RangeMapping mapping : rangesCID2GID) + { + if (mapping.isInReverseRange(cid)) + { + return mapping.mapReverseValue(cid); + } + } + } + return super.getGIDForCID(cid); + } + + @Override + public String toString() + { + return getClass().getName() + "[format=" + format + "]"; + } + } + + /** + * Inner class representing a Format2 charset. + */ + private static class Format2Charset extends EmbeddedCharset + { + private int format; + private List rangesCID2GID; + + protected Format2Charset(boolean isCIDFont) + { + super(isCIDFont); + } + + @Override + public int getCIDForGID(int gid) + { + for (RangeMapping mapping : rangesCID2GID) + { + if (mapping.isInRange(gid)) + { + return mapping.mapValue(gid); + } + } + return super.getCIDForGID(gid); + } + + @Override + public int getGIDForCID(int cid) + { + for (RangeMapping mapping : rangesCID2GID) + { + if (mapping.isInReverseRange(cid)) + { + return mapping.mapReverseValue(cid); + } + } + return super.getGIDForCID(cid); + } + + @Override + public String toString() + { + return getClass().getName() + "[format=" + format + "]"; + } + + } + + /** + * Inner class representing a rang mapping for a CID charset. + */ + private static final class RangeMapping + { + private final int startValue; + private final int endValue; + private final int startMappedValue; + private final int endMappedValue; + + private RangeMapping(int startGID, int first, int nLeft) + { + this.startValue = startGID; + endValue = startValue + nLeft; + this.startMappedValue = first; + endMappedValue = startMappedValue + nLeft; + } + + boolean isInRange(int value) + { + return value >= startValue && value <= endValue; + } + + boolean isInReverseRange(int value) + { + return value >= startMappedValue && value <= endMappedValue; + } + + int mapValue(int value) + { + if (isInRange(value)) + { + return startMappedValue + (value - startValue); + } + else + { + return 0; + } + } + + int mapReverseValue(int value) + { + if (isInReverseRange(value)) + { + return startValue + (value - startMappedValue); + } + else + { + return 0; + } + } + + @Override + public String toString() + { + return getClass().getName() + "[start value=" + startValue + ", end value=" + endValue + ", start mapped-value=" + startMappedValue + ", end mapped-value=" + endMappedValue +"]"; + } + } + + @Override + public String toString() + { + return getClass().getSimpleName() + "[" + debugFontName + "]"; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardEncoding.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardEncoding.java new file mode 100644 index 00000000000..737d267c662 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardEncoding.java @@ -0,0 +1,313 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +/** + * This is specialized CFFEncoding. It's used if the EncodingId of a font is set to 0. + * + * @author Villu Ruusmann + */ +public final class CFFStandardEncoding extends CFFEncoding +{ + private static final int CHAR_CODE = 0; + private static final int CHAR_SID = 1; + + /** + * Table of character codes and their corresponding sid. + */ + private static final int[][] CFF_STANDARD_ENCODING_TABLE = { + {0, 0}, + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {5, 0}, + {6, 0}, + {7, 0}, + {8, 0}, + {9, 0}, + {10, 0}, + {11, 0}, + {12, 0}, + {13, 0}, + {14, 0}, + {15, 0}, + {16, 0}, + {17, 0}, + {18, 0}, + {19, 0}, + {20, 0}, + {21, 0}, + {22, 0}, + {23, 0}, + {24, 0}, + {25, 0}, + {26, 0}, + {27, 0}, + {28, 0}, + {29, 0}, + {30, 0}, + {31, 0}, + {32, 1}, + {33, 2}, + {34, 3}, + {35, 4}, + {36, 5}, + {37, 6}, + {38, 7}, + {39, 8}, + {40, 9}, + {41, 10}, + {42, 11}, + {43, 12}, + {44, 13}, + {45, 14}, + {46, 15}, + {47, 16}, + {48, 17}, + {49, 18}, + {50, 19}, + {51, 20}, + {52, 21}, + {53, 22}, + {54, 23}, + {55, 24}, + {56, 25}, + {57, 26}, + {58, 27}, + {59, 28}, + {60, 29}, + {61, 30}, + {62, 31}, + {63, 32}, + {64, 33}, + {65, 34}, + {66, 35}, + {67, 36}, + {68, 37}, + {69, 38}, + {70, 39}, + {71, 40}, + {72, 41}, + {73, 42}, + {74, 43}, + {75, 44}, + {76, 45}, + {77, 46}, + {78, 47}, + {79, 48}, + {80, 49}, + {81, 50}, + {82, 51}, + {83, 52}, + {84, 53}, + {85, 54}, + {86, 55}, + {87, 56}, + {88, 57}, + {89, 58}, + {90, 59}, + {91, 60}, + {92, 61}, + {93, 62}, + {94, 63}, + {95, 64}, + {96, 65}, + {97, 66}, + {98, 67}, + {99, 68}, + {100, 69}, + {101, 70}, + {102, 71}, + {103, 72}, + {104, 73}, + {105, 74}, + {106, 75}, + {107, 76}, + {108, 77}, + {109, 78}, + {110, 79}, + {111, 80}, + {112, 81}, + {113, 82}, + {114, 83}, + {115, 84}, + {116, 85}, + {117, 86}, + {118, 87}, + {119, 88}, + {120, 89}, + {121, 90}, + {122, 91}, + {123, 92}, + {124, 93}, + {125, 94}, + {126, 95}, + {127, 0}, + {128, 0}, + {129, 0}, + {130, 0}, + {131, 0}, + {132, 0}, + {133, 0}, + {134, 0}, + {135, 0}, + {136, 0}, + {137, 0}, + {138, 0}, + {139, 0}, + {140, 0}, + {141, 0}, + {142, 0}, + {143, 0}, + {144, 0}, + {145, 0}, + {146, 0}, + {147, 0}, + {148, 0}, + {149, 0}, + {150, 0}, + {151, 0}, + {152, 0}, + {153, 0}, + {154, 0}, + {155, 0}, + {156, 0}, + {157, 0}, + {158, 0}, + {159, 0}, + {160, 0}, + {161, 96}, + {162, 97}, + {163, 98}, + {164, 99}, + {165, 100}, + {166, 101}, + {167, 102}, + {168, 103}, + {169, 104}, + {170, 105}, + {171, 106}, + {172, 107}, + {173, 108}, + {174, 109}, + {175, 110}, + {176, 0}, + {177, 111}, + {178, 112}, + {179, 113}, + {180, 114}, + {181, 0}, + {182, 115}, + {183, 116}, + {184, 117}, + {185, 118}, + {186, 119}, + {187, 120}, + {188, 121}, + {189, 122}, + {190, 0}, + {191, 123}, + {192, 0}, + {193, 124}, + {194, 125}, + {195, 126}, + {196, 127}, + {197, 128}, + {198, 129}, + {199, 130}, + {200, 131}, + {201, 0}, + {202, 132}, + {203, 133}, + {204, 0}, + {205, 134}, + {206, 135}, + {207, 136}, + {208, 137}, + {209, 0}, + {210, 0}, + {211, 0}, + {212, 0}, + {213, 0}, + {214, 0}, + {215, 0}, + {216, 0}, + {217, 0}, + {218, 0}, + {219, 0}, + {220, 0}, + {221, 0}, + {222, 0}, + {223, 0}, + {224, 0}, + {225, 138}, + {226, 0}, + {227, 139}, + {228, 0}, + {229, 0}, + {230, 0}, + {231, 0}, + {232, 140}, + {233, 141}, + {234, 142}, + {235, 143}, + {236, 0}, + {237, 0}, + {238, 0}, + {239, 0}, + {240, 0}, + {241, 144}, + {242, 0}, + {243, 0}, + {244, 0}, + {245, 145}, + {246, 0}, + {247, 0}, + {248, 146}, + {249, 147}, + {250, 148}, + {251, 149}, + {252, 0}, + {253, 0}, + {254, 0}, + {255, 0} + }; + + private CFFStandardEncoding() + { + } + + /** + * Returns an instance of the CFFStandardEncoding class. + * @return an instance of CFFStandardEncoding + */ + public static CFFStandardEncoding getInstance() + { + return CFFStandardEncoding.INSTANCE; + } + + private static final CFFStandardEncoding INSTANCE = new CFFStandardEncoding(); + + static + { + for (int[] encodingEntry : CFF_STANDARD_ENCODING_TABLE) + { + INSTANCE.add(encodingEntry[CHAR_CODE], encodingEntry[CHAR_SID]); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardString.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardString.java new file mode 100644 index 00000000000..4854422963f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFStandardString.java @@ -0,0 +1,434 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +/** + * This class represents a standard SID to String mapping. + * @author Villu Ruusmann + */ +public final class CFFStandardString +{ + + private CFFStandardString() + { + } + + /** + * This will return the string mapped to the given SID. + * @param sid the given SID + * @return the mapped string + */ + public static String getName(int sid) + { + return SID2STR[sid]; + } + + private static final String[] SID2STR = + { + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "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", + "quoteleft", + "a", + "b", + "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", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold", + }; +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java b/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java new file mode 100644 index 00000000000..0a5c5663cea --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java @@ -0,0 +1,235 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.fontbox.EncodedFont; +import org.apache.fontbox.type1.Type1CharStringReader; + +/** + * A Type 1-equivalent font program represented in a CFF file. Thread safe. + * + * @author Villu Ruusmann + * @author John Hewson + */ +public class CFFType1Font extends CFFFont implements EncodedFont +{ + private final Map privateDict = new LinkedHashMap<>(); + private CFFEncoding encoding; + + private final Map charStringCache = + new ConcurrentHashMap<>(); + + private final PrivateType1CharStringReader reader = new PrivateType1CharStringReader(); + + /** + * Private implementation of Type1CharStringReader, because only CFFType1Font can + * expose this publicly, as CIDFonts only support this for legacy 'seac' commands. + */ + private class PrivateType1CharStringReader implements Type1CharStringReader + { + @Override + public Type1CharString getType1CharString(String name) throws IOException + { + return CFFType1Font.this.getType1CharString(name); + } + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + return getType1CharString(name).getPath(); + } + + @Override + public float getWidth(String name) throws IOException + { + return getType1CharString(name).getWidth(); + } + + @Override + public boolean hasGlyph(String name) + { + int sid = charset.getSID(name); + int gid = charset.getGIDForSID(sid); + return gid != 0; + } + + @Override + public List getFontMatrix() + { + return (List)topDict.get("FontMatrix"); + } + + /** + * Returns the Type 1 charstring for the given PostScript glyph name. + * + * @param name PostScript glyph name + * @throws IOException if the charstring could not be read + */ + public Type1CharString getType1CharString(String name) throws IOException + { + // lookup via charset + int gid = nameToGID(name); + + // lookup in CharStrings INDEX + return getType2CharString(gid, name); + } + + /** + * Returns the GID for the given PostScript glyph name. + * + * @param name a PostScript glyph name. + * @return GID + */ + public int nameToGID(String name) + { + // some fonts have glyphs beyond their encoding, so we look up by charset SID + int sid = charset.getSID(name); + return charset.getGIDForSID(sid); + } + + /** + * Returns the Type 1 charstring for the given GID. + * + * @param gid GID + * @throws IOException if the charstring could not be read + */ + @Override + public Type2CharString getType2CharString(int gid) throws IOException + { + String name = "GID+" + gid; // for debugging only + return getType2CharString(gid, name); + } + + // Returns the Type 2 charstring for the given GID, with name for debugging + private Type2CharString getType2CharString(int gid, String name) throws IOException + { + Type2CharString type2 = charStringCache.get(gid); + if (type2 == null) + { + byte[] bytes = null; + if (gid < charStrings.length) + { + bytes = charStrings[gid]; + } + if (bytes == null) + { + // .notdef + bytes = charStrings[0]; + } + Type2CharStringParser parser = new Type2CharStringParser(fontName, name); + List type2seq = parser.parse(bytes, globalSubrIndex, getLocalSubrIndex()); + type2 = new Type2CharString(reader, fontName, name, gid, type2seq, getDefaultWidthX(), + getNominalWidthX()); + charStringCache.put(gid, type2); + } + return type2; + } + + /** + * Returns the private dictionary. + * + * @return the dictionary + */ + public Map getPrivateDict() + { + return privateDict; + } + + /** + * Adds the given key/value pair to the private dictionary. + * + * @param name the given key + * @param value the given value + */ + // todo: can't we just accept a Map? + void addToPrivateDict(String name, Object value) + { + if (value != null) + { + privateDict.put(name, value); + } + } + + /** + * Returns the CFFEncoding of the font. + * + * @return the encoding + */ + @Override + public CFFEncoding getEncoding() + { + return encoding; + } + + /** + * Sets the CFFEncoding of the font. + * + * @param encoding the given CFFEncoding + */ + void setEncoding(CFFEncoding encoding) + { + this.encoding = encoding; + } + + private byte[][] getLocalSubrIndex() + { + return (byte[][])privateDict.get("Subrs"); + } + + // helper for looking up keys/values + private Object getProperty(String name) + { + Object topDictValue = topDict.get(name); + if (topDictValue != null) + { + return topDictValue; + } + Object privateDictValue = privateDict.get(name); + if (privateDictValue != null) + { + return privateDictValue; + } + return null; + } + + private int getDefaultWidthX() + { + Number num = (Number)getProperty("defaultWidthX"); + if (num == null) + { + return 1000; + } + return num.intValue(); + } + + private int getNominalWidthX() + { + Number num = (Number)getProperty("nominalWidthX"); + if (num == null) + { + return 0; + } + return num.intValue(); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CIDKeyedType2CharString.java b/fontbox/src/main/java/org/apache/fontbox/cff/CIDKeyedType2CharString.java new file mode 100644 index 00000000000..68745a7c5c0 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CIDKeyedType2CharString.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import org.apache.fontbox.type1.Type1CharStringReader; + +import java.util.List; +import java.util.Locale; + +/** + * A CID-Keyed Type 2 CharString. + * + * @author John Hewson + */ +public class CIDKeyedType2CharString extends Type2CharString +{ + private final int cid; + + /** + * Constructor. + * + * @param font Parent CFF font + * @param fontName font name + * @param cid CID + * @param gid GID + * @param sequence Type 2 char string sequence + * @param defaultWidthX default width + * @param nomWidthX nominal width + */ + public CIDKeyedType2CharString(Type1CharStringReader font, String fontName, int cid, int gid, List sequence, int defaultWidthX, int nomWidthX) + { + // glyph name is for debugging only + super(font, fontName, String.format(Locale.US, "%04x", cid), gid, sequence, defaultWidthX, nomWidthX); + this.cid = cid; + } + + /** + * Returns the CID (character id) of this charstring. + */ + public int getCID() + { + return cid; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java b/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java new file mode 100644 index 00000000000..84abdef9f09 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java @@ -0,0 +1,317 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * This class represents a CharStringCommand. + * + * @author Villu Ruusmann + */ +public class CharStringCommand +{ + + private Key commandKey = null; + + /** + * Constructor with one value. + * + * @param b0 value + */ + public CharStringCommand(int b0) + { + setKey(new Key(b0)); + } + + /** + * Constructor with two values. + * + * @param b0 value1 + * @param b1 value2 + */ + public CharStringCommand(int b0, int b1) + { + setKey(new Key(b0, b1)); + } + + /** + * Constructor with an array as values. + * + * @param values array of values + */ + public CharStringCommand(int[] values) + { + setKey(new Key(values)); + } + + /** + * The key of the CharStringCommand. + * @return the key + */ + public Key getKey() + { + return commandKey; + } + + private void setKey(Key key) + { + commandKey = key; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + String str = TYPE2_VOCABULARY.get(getKey()); + if (str == null) + { + str = TYPE1_VOCABULARY.get(getKey()); + } + if (str == null) + { + return getKey().toString() + '|'; + } + return str + '|'; + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return getKey().hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) + { + if (object instanceof CharStringCommand) + { + CharStringCommand that = (CharStringCommand) object; + return getKey().equals(that.getKey()); + } + return false; + } + + /** + * A static class to hold one or more int values as key. + */ + public static class Key + { + + private int[] keyValues = null; + + /** + * Constructor with one value. + * + * @param b0 value + */ + public Key(int b0) + { + setValue(new int[] { b0 }); + } + + /** + * Constructor with two values. + * + * @param b0 value1 + * @param b1 value2 + */ + public Key(int b0, int b1) + { + setValue(new int[] { b0, b1 }); + } + + /** + * Constructor with an array as values. + * + * @param values array of values + */ + public Key(int[] values) + { + setValue(values); + } + + /** + * Array the with the values. + * + * @return array with the values + */ + public int[] getValue() + { + return keyValues; + } + + private void setValue(int[] value) + { + keyValues = value; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return Arrays.toString(getValue()); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + if (keyValues[0] == 12 && keyValues.length > 1) + { + return keyValues[0] ^ keyValues[1]; + } + return keyValues[0]; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) + { + if (object instanceof Key) + { + Key that = (Key) object; + if (keyValues[0] == 12 && that.keyValues[0] == 12) + { + if (keyValues.length > 1 && that.keyValues.length > 1) + { + return keyValues[1] == that.keyValues[1]; + } + return keyValues.length == that.keyValues.length; + } + return keyValues[0] == that.keyValues[0]; + } + return false; + } + } + + /** + * A map with the Type1 vocabulary. + */ + public static final Map TYPE1_VOCABULARY; + + static + { + Map map = new LinkedHashMap<>(26); + map.put(new Key(1), "hstem"); + map.put(new Key(3), "vstem"); + map.put(new Key(4), "vmoveto"); + map.put(new Key(5), "rlineto"); + map.put(new Key(6), "hlineto"); + map.put(new Key(7), "vlineto"); + map.put(new Key(8), "rrcurveto"); + map.put(new Key(9), "closepath"); + map.put(new Key(10), "callsubr"); + map.put(new Key(11), "return"); + map.put(new Key(12), "escape"); + map.put(new Key(12, 0), "dotsection"); + map.put(new Key(12, 1), "vstem3"); + map.put(new Key(12, 2), "hstem3"); + map.put(new Key(12, 6), "seac"); + map.put(new Key(12, 7), "sbw"); + map.put(new Key(12, 12), "div"); + map.put(new Key(12, 16), "callothersubr"); + map.put(new Key(12, 17), "pop"); + map.put(new Key(12, 33), "setcurrentpoint"); + map.put(new Key(13), "hsbw"); + map.put(new Key(14), "endchar"); + map.put(new Key(21), "rmoveto"); + map.put(new Key(22), "hmoveto"); + map.put(new Key(30), "vhcurveto"); + map.put(new Key(31), "hvcurveto"); + + TYPE1_VOCABULARY = Collections.unmodifiableMap(map); + } + + /** + * A map with the Type2 vocabulary. + */ + public static final Map TYPE2_VOCABULARY; + + static + { + Map map = new LinkedHashMap<>(48); + map.put(new Key(1), "hstem"); + map.put(new Key(3), "vstem"); + map.put(new Key(4), "vmoveto"); + map.put(new Key(5), "rlineto"); + map.put(new Key(6), "hlineto"); + map.put(new Key(7), "vlineto"); + map.put(new Key(8), "rrcurveto"); + map.put(new Key(10), "callsubr"); + map.put(new Key(11), "return"); + map.put(new Key(12), "escape"); + map.put(new Key(12, 3), "and"); + map.put(new Key(12, 4), "or"); + map.put(new Key(12, 5), "not"); + map.put(new Key(12, 9), "abs"); + map.put(new Key(12, 10), "add"); + map.put(new Key(12, 11), "sub"); + map.put(new Key(12, 12), "div"); + map.put(new Key(12, 14), "neg"); + map.put(new Key(12, 15), "eq"); + map.put(new Key(12, 18), "drop"); + map.put(new Key(12, 20), "put"); + map.put(new Key(12, 21), "get"); + map.put(new Key(12, 22), "ifelse"); + map.put(new Key(12, 23), "random"); + map.put(new Key(12, 24), "mul"); + map.put(new Key(12, 26), "sqrt"); + map.put(new Key(12, 27), "dup"); + map.put(new Key(12, 28), "exch"); + map.put(new Key(12, 29), "index"); + map.put(new Key(12, 30), "roll"); + map.put(new Key(12, 34), "hflex"); + map.put(new Key(12, 35), "flex"); + map.put(new Key(12, 36), "hflex1"); + map.put(new Key(12, 37), "flex1"); + map.put(new Key(14), "endchar"); + map.put(new Key(18), "hstemhm"); + map.put(new Key(19), "hintmask"); + map.put(new Key(20), "cntrmask"); + map.put(new Key(21), "rmoveto"); + map.put(new Key(22), "hmoveto"); + map.put(new Key(23), "vstemhm"); + map.put(new Key(24), "rcurveline"); + map.put(new Key(25), "rlinecurve"); + map.put(new Key(26), "vvcurveto"); + map.put(new Key(27), "hhcurveto"); + map.put(new Key(28), "shortint"); + map.put(new Key(29), "callgsubr"); + map.put(new Key(30), "vhcurveto"); + map.put(new Key(31), "hvcurveto"); + + TYPE2_VOCABULARY = Collections.unmodifiableMap(map); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/CharStringHandler.java b/fontbox/src/main/java/org/apache/fontbox/cff/CharStringHandler.java new file mode 100644 index 00000000000..66fb94736a9 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/CharStringHandler.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + + +import java.util.List; +import java.util.Stack; + +/** + * A Handler for CharStringCommands. + * + * @author Villu Ruusmann + * @author John Hewson + * + */ +public abstract class CharStringHandler +{ + /** + * Handler for a sequence of CharStringCommands. + * + * @param sequence of CharStringCommands + * + */ + public List handleSequence(List sequence) + { + Stack stack = new Stack<>(); + for (Object obj : sequence) + { + if (obj instanceof CharStringCommand) + { + List results = handleCommand(stack, (CharStringCommand)obj); + stack.clear(); // this is basically returning the new stack + stack.addAll(results); + } + else + { + stack.push((Number)obj); + } + } + return stack; + } + + /** + * Handler for CharStringCommands. + * + * @param numbers a list of numbers + * @param command the CharStringCommand + * @return a list of commands. This can be empty but never be null. + */ + public abstract List handleCommand(List numbers, CharStringCommand command); +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/DataInput.java b/fontbox/src/main/java/org/apache/fontbox/cff/DataInput.java new file mode 100644 index 00000000000..bd05a2a0905 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/DataInput.java @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.EOFException; +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.fontbox.util.Charsets; + +/** + * This class contains some functionality to read a byte buffer. + * + * @author Villu Ruusmann + */ +public class DataInput +{ + + private byte[] inputBuffer = null; + private int bufferPosition = 0; + + private static final Log LOG = LogFactory.getLog(DataInput.class); + + /** + * Constructor. + * @param buffer the buffer to be read + */ + public DataInput(byte[] buffer) + { + inputBuffer = buffer; + } + + /** + * Determines if there are any bytes left to read or not. + * @return true if there are any bytes left to read + */ + public boolean hasRemaining() + { + return bufferPosition < inputBuffer.length; + } + + /** + * Returns the current position. + * @return current position + */ + public int getPosition() + { + return bufferPosition; + } + + /** + * Sets the current position to the given value. + * @param position the given position + */ + public void setPosition(int position) + { + bufferPosition = position; + } + + /** + * Returns the buffer as an ISO-8859-1 string. + * @return the buffer as string + * @throws IOException if an error occurs during reading + */ + public String getString() throws IOException + { + return new String(inputBuffer, Charsets.ISO_8859_1); + } + + /** + * Read one single byte from the buffer. + * @return the byte + * @throws IOException if an error occurs during reading + */ + public byte readByte() throws IOException + { + try + { + byte value = inputBuffer[bufferPosition]; + bufferPosition++; + return value; + } + catch (RuntimeException re) + { + LOG.debug("An error occured reading a byte - returning -1", re); + return -1; + } + } + + /** + * Read one single unsigned byte from the buffer. + * @return the unsigned byte as int + * @throws IOException if an error occurs during reading + */ + public int readUnsignedByte() throws IOException + { + int b = read(); + if (b < 0) + { + throw new EOFException(); + } + return b; + } + + /** + * Peeks one single unsigned byte from the buffer. + * @return the unsigned byte as int + * @throws IOException if an error occurs during reading + */ + public int peekUnsignedByte(int offset) throws IOException + { + int b = peek(offset); + if (b < 0) + { + throw new EOFException(); + } + return b; + } + + /** + * Read one single short value from the buffer. + * @return the short value + * @throws IOException if an error occurs during reading + */ + public short readShort() throws IOException + { + return (short) readUnsignedShort(); + } + + /** + * Read one single unsigned short (2 bytes) value from the buffer. + * @return the unsigned short value as int + * @throws IOException if an error occurs during reading + */ + public int readUnsignedShort() throws IOException + { + int b1 = read(); + int b2 = read(); + if ((b1 | b2) < 0) + { + throw new EOFException(); + } + return b1 << 8 | b2; + } + + /** + * Read one single int (4 bytes) from the buffer. + * @return the int value + * @throws IOException if an error occurs during reading + */ + public int readInt() throws IOException + { + int b1 = read(); + int b2 = read(); + int b3 = read(); + int b4 = read(); + if ((b1 | b2 | b3 | b4) < 0) + { + throw new EOFException(); + } + return b1 << 24 | b2 << 16 | b3 << 8 | b4; + } + + /** + * Read a number of single byte values from the buffer. + * @param length the number of bytes to be read + * @return an array with containing the bytes from the buffer + * @throws IOException if an error occurs during reading + */ + public byte[] readBytes(int length) throws IOException + { + if (inputBuffer.length - bufferPosition < length) + { + throw new EOFException(); + } + byte[] bytes = new byte[length]; + System.arraycopy(inputBuffer, bufferPosition, bytes, 0, length); + bufferPosition += length; + return bytes; + } + + private int read() + { + try + { + int value = inputBuffer[bufferPosition] & 0xff; + bufferPosition++; + return value; + } + catch (RuntimeException re) + { + LOG.debug("An error occured reading an int - returning -1", re); + return -1; + } + } + + private int peek(int offset) + { + try + { + int value = inputBuffer[bufferPosition + offset] & 0xff; + return value; + } + catch (RuntimeException re) + { + LOG.debug("An error occured peeking at offset " + offset + " - returning -1", re); + return -1; + } + } + + public int length() + { + return inputBuffer.length; + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/DataOutput.java b/fontbox/src/main/java/org/apache/fontbox/cff/DataOutput.java new file mode 100644 index 00000000000..0cc14e148a0 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/DataOutput.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * @author Villu Ruusmann + */ +public class DataOutput +{ + + private ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(); + + private String outputEncoding = null; + + /** + * Constructor. + */ + public DataOutput() + { + this("ISO-8859-1"); + } + + /** + * Constructor with a given encoding. + * @param encoding the encoding to be used for writing + */ + public DataOutput(String encoding) + { + this.outputEncoding = encoding; + } + + /** + * Returns the written data buffer as byte array. + * @return the data buffer as byte array + */ + public byte[] getBytes() + { + return outputBuffer.toByteArray(); + } + + /** + * Write an int value to the buffer. + * @param value the given value + */ + public void write(int value) + { + outputBuffer.write(value); + } + + /** + * Write a byte array to the buffer. + * @param buffer the given byte array + */ + public void write(byte[] buffer) + { + outputBuffer.write(buffer, 0, buffer.length); + } + + /** + * Write a part of a byte array to the buffer. + * @param buffer the given byte buffer + * @param offset the offset where to start + * @param length the amount of bytes to be written from the array + */ + public void write(byte[] buffer, int offset, int length) + { + outputBuffer.write(buffer, offset, length); + } + + /** + * Write the given string to the buffer using the given encoding. + * @param string the given string + * @throws IOException If an error occurs during writing the data to the buffer + */ + public void print(String string) throws IOException + { + write(string.getBytes(outputEncoding)); + } + + /** + * Write the given string to the buffer using the given encoding. + * A newline is added after the given string + * @param string the given string + * @throws IOException If an error occurs during writing the data to the buffer + */ + public void println(String string) throws IOException + { + write(string.getBytes(outputEncoding)); + write('\n'); + } + + /** + * Add a newline to the given string. + */ + public void println() + { + write('\n'); + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/FDSelect.java b/fontbox/src/main/java/org/apache/fontbox/cff/FDSelect.java new file mode 100644 index 00000000000..91c0a916e7f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/FDSelect.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.cff; + +public abstract class FDSelect +{ + protected final CFFCIDFont owner; + + /** + * Constructor. + * + * @param owner the owner of the FDSelect data. + */ + public FDSelect(CFFCIDFont owner) + { + this.owner = owner; + } + + /** + * Returns the Font DICT index for the given GID. + * + * @param gid GID + */ + public abstract int getFDIndex(int gid); +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java b/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java new file mode 100644 index 00000000000..11fc25f5f34 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java @@ -0,0 +1,516 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.awt.Point; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.encoding.StandardEncoding; +import org.apache.fontbox.type1.Type1CharStringReader; + +/** + * This class represents and renders a Type 1 CharString. + * + * @author Villu Ruusmann + * @author John Hewson + */ +public class Type1CharString +{ + private static final Log LOG = LogFactory.getLog(Type1CharString.class); + + private Type1CharStringReader font; + private final String fontName, glyphName; + private GeneralPath path = null; + private int width = 0; + private Point2D.Float leftSideBearing = null; + private Point2D.Float current = null; + private boolean isFlex = false; + private final List flexPoints = new ArrayList<>(); + protected List type1Sequence; + protected int commandCount; + + /** + * Constructs a new Type1CharString object. + * + * @param font Parent Type 1 CharString font. + * @param fontName Name of the font. + * @param glyphName Name of the glyph. + * @param sequence Type 1 char string sequence + */ + public Type1CharString(Type1CharStringReader font, String fontName, String glyphName, + List sequence) + { + this(font, fontName, glyphName); + type1Sequence = sequence; + } + + /** + * Constructor for use in subclasses. + * + * @param font Parent Type 1 CharString font. + * @param fontName Name of the font. + * @param glyphName Name of the glyph. + */ + protected Type1CharString(Type1CharStringReader font, String fontName, String glyphName) + { + this.font = font; + this.fontName = fontName; + this.glyphName = glyphName; + this.current = new Point2D.Float(0, 0); + } + + // todo: NEW name (or CID as hex) + public String getName() + { + return glyphName; + } + + /** + * Returns the bounds of the renderer path. + * @return the bounds as Rectangle2D + */ + public Rectangle2D getBounds() + { + synchronized(LOG) + { + if (path == null) + { + render(); + } + } + return path.getBounds2D(); + } + + /** + * Returns the advance width of the glyph. + * @return the width + */ + public int getWidth() + { + synchronized(LOG) + { + if (path == null) + { + render(); + } + } + return width; + } + + /** + * Returns the path of the character. + * @return the path + */ + public GeneralPath getPath() + { + synchronized(LOG) + { + if (path == null) + { + render(); + } + } + return path; + } + + /** + * Returns the Type 1 char string sequence. + * @return the Type 1 sequence + */ + public List getType1Sequence() + { + return type1Sequence; + } + + /** + * Renders the Type 1 char string sequence to a GeneralPath. + */ + private void render() + { + path = new GeneralPath(); + leftSideBearing = new Point2D.Float(0, 0); + width = 0; + CharStringHandler handler = new CharStringHandler() { + @Override + public List handleCommand(List numbers, CharStringCommand command) + { + return Type1CharString.this.handleCommand(numbers, command); + } + }; + handler.handleSequence(type1Sequence); + } + + private List handleCommand(List numbers, CharStringCommand command) + { + commandCount++; + String name = CharStringCommand.TYPE1_VOCABULARY.get(command.getKey()); + + if ("rmoveto".equals(name)) + { + if (numbers.size() >= 2) + { + if (isFlex) + { + flexPoints.add(new Point2D.Float(numbers.get(0).floatValue(), numbers.get(1).floatValue())); + } + else + { + rmoveTo(numbers.get(0), numbers.get(1)); + } + } + } + else if ("vmoveto".equals(name)) + { + if (numbers.size() >= 1) + { + if (isFlex) + { + // not in the Type 1 spec, but exists in some fonts + flexPoints.add(new Point2D.Float(0f, numbers.get(0).floatValue())); + } + else + { + rmoveTo(0, numbers.get(0)); + } + } + } + else if ("hmoveto".equals(name)) + { + if (numbers.size() >= 1) + { + if (isFlex) + { + // not in the Type 1 spec, but exists in some fonts + flexPoints.add(new Point2D.Float(numbers.get(0).floatValue(), 0f)); + } + else + { + rmoveTo(numbers.get(0), 0); + } + } + } + else if ("rlineto".equals(name)) + { + if (numbers.size() >= 2) + { + rlineTo(numbers.get(0), numbers.get(1)); + } + } + else if ("hlineto".equals(name)) + { + if (numbers.size() >= 1) + { + rlineTo(numbers.get(0), 0); + } + } + else if ("vlineto".equals(name)) + { + if (numbers.size() >= 1) + { + rlineTo(0, numbers.get(0)); + } + } + else if ("rrcurveto".equals(name)) + { + if (numbers.size() >= 6) + { + rrcurveTo(numbers.get(0), numbers.get(1), numbers.get(2), + numbers.get(3), numbers.get(4), numbers.get(5)); + } + } + else if ("closepath".equals(name)) + { + closepath(); + } + else if ("sbw".equals(name)) + { + if (numbers.size() >= 3) + { + leftSideBearing = new Point2D.Float(numbers.get(0).floatValue(), numbers.get(1).floatValue()); + width = numbers.get(2).intValue(); + current.setLocation(leftSideBearing); + } + } + else if ("hsbw".equals(name)) + { + if (numbers.size() >= 2) + { + leftSideBearing = new Point2D.Float(numbers.get(0).floatValue(), 0); + width = numbers.get(1).intValue(); + current.setLocation(leftSideBearing); + } + } + else if ("vhcurveto".equals(name)) + { + if (numbers.size() >= 4) + { + rrcurveTo(0, numbers.get(0), numbers.get(1), + numbers.get(2), numbers.get(3), 0); + } + } + else if ("hvcurveto".equals(name)) + { + if (numbers.size() >= 4) + { + rrcurveTo(numbers.get(0), 0, numbers.get(1), + numbers.get(2), 0, numbers.get(3)); + } + } + else if ("seac".equals(name)) + { + if (numbers.size() >= 5) + { + seac(numbers.get(0), numbers.get(1), numbers.get(2), numbers.get(3), numbers.get(4)); + } + } + else if ("setcurrentpoint".equals(name)) + { + if (numbers.size() >= 2) + { + setcurrentpoint(numbers.get(0), numbers.get(1)); + } + } + else if ("callothersubr".equals(name)) + { + if (numbers.size() >= 1) + { + callothersubr(numbers.get(0).intValue()); + } + } + else if ("div".equals(name)) + { + float b = numbers.get(numbers.size() -1).floatValue(); + float a = numbers.get(numbers.size() -2).floatValue(); + + float result = a / b; + + List list = new ArrayList<>(numbers); + list.remove(list.size() - 1); + list.remove(list.size() - 1); + list.add(result); + return list; + } + else if ("hstem".equals(name) || "vstem".equals(name) || + "hstem3".equals(name) || "vstem3".equals(name) || "dotsection".equals(name)) + { + // ignore hints + } + else if ("endchar".equals(name)) + { + // end + } + else if ("return".equals(name)) + { + // indicates an invalid charstring + LOG.warn("Unexpected charstring command: " + command.getKey() + " in glyph " + + glyphName + " of font " + fontName); + } + else if (name != null) + { + // indicates a PDFBox bug + throw new IllegalArgumentException("Unhandled command: " + name); + } + else + { + // indicates an invalid charstring + LOG.warn("Unknown charstring command: " + command.getKey() + " in glyph " + glyphName + + " of font " + fontName); + } + return Collections.emptyList(); + } + + /** + * Sets the current absolute point without performing a moveto. + * Used only with results from callothersubr + */ + private void setcurrentpoint(Number x, Number y) + { + current.setLocation(x.floatValue(), y.floatValue()); + } + + /** + * Flex (via OtherSubrs) + * @param num OtherSubrs entry number + */ + private void callothersubr(int num) + { + if (num == 0) + { + // end flex + isFlex = false; + + if (flexPoints.size() < 7) + { + LOG.warn("flex without moveTo in font " + fontName + ", glyph " + glyphName + + ", command " + commandCount); + return; + } + + // reference point is relative to start point + Point.Float reference = flexPoints.get(0); + reference.setLocation(current.getX() + reference.getX(), + current.getY() + reference.getY()); + + // first point is relative to reference point + Point.Float first = flexPoints.get(1); + first.setLocation(reference.getX() + first.getX(), reference.getY() + first.getY()); + + // make the first point relative to the start point + first.setLocation(first.getX() - current.getX(), first.getY() - current.getY()); + + rrcurveTo(flexPoints.get(1).getX(), flexPoints.get(1).getY(), + flexPoints.get(2).getX(), flexPoints.get(2).getY(), + flexPoints.get(3).getX(), flexPoints.get(3).getY()); + + rrcurveTo(flexPoints.get(4).getX(), flexPoints.get(4).getY(), + flexPoints.get(5).getX(), flexPoints.get(5).getY(), + flexPoints.get(6).getX(), flexPoints.get(6).getY()); + + flexPoints.clear(); + } + else if (num == 1) + { + // begin flex + isFlex = true; + } + else + { + // indicates a PDFBox bug + throw new IllegalArgumentException("Unexpected other subroutine: " + num); + } + } + + /** + * Relative moveto. + */ + private void rmoveTo(Number dx, Number dy) + { + float x = (float)current.getX() + dx.floatValue(); + float y = (float)current.getY() + dy.floatValue(); + path.moveTo(x, y); + current.setLocation(x, y); + } + + /** + * Relative lineto. + */ + private void rlineTo(Number dx, Number dy) + { + float x = (float)current.getX() + dx.floatValue(); + float y = (float)current.getY() + dy.floatValue(); + if (path.getCurrentPoint() == null) + { + LOG.warn("rlineTo without initial moveTo in font " + fontName + ", glyph " + glyphName); + path.moveTo(x, y); + } + else + { + path.lineTo(x, y); + } + current.setLocation(x, y); + } + + /** + * Relative curveto. + */ + private void rrcurveTo(Number dx1, Number dy1, Number dx2, Number dy2, + Number dx3, Number dy3) + { + float x1 = (float) current.getX() + dx1.floatValue(); + float y1 = (float) current.getY() + dy1.floatValue(); + float x2 = x1 + dx2.floatValue(); + float y2 = y1 + dy2.floatValue(); + float x3 = x2 + dx3.floatValue(); + float y3 = y2 + dy3.floatValue(); + if (path.getCurrentPoint() == null) + { + LOG.warn("rrcurveTo without initial moveTo in font " + fontName + ", glyph " + glyphName); + path.moveTo(x3, y3); + } + else + { + path.curveTo(x1, y1, x2, y2, x3, y3); + } + current.setLocation(x3, y3); + } + + /** + * Close path. + */ + private void closepath() + { + if (path.getCurrentPoint() == null) + { + LOG.warn("closepath without initial moveTo in font " + fontName + ", glyph " + glyphName); + } + else + { + path.closePath(); + } + path.moveTo(current.getX(), current.getY()); + } + + /** + * Standard Encoding Accented Character + * + * Makes an accented character from two other characters. + * @param asb + */ + private void seac(Number asb, Number adx, Number ady, Number bchar, Number achar) + { + // base character + String baseName = StandardEncoding.INSTANCE.getName(bchar.intValue()); + try + { + Type1CharString base = font.getType1CharString(baseName); + path.append(base.getPath().getPathIterator(null), false); + } + catch (IOException e) + { + LOG.warn("invalid seac character in glyph " + glyphName + " of font " + fontName, e); + } + // accent character + String accentName = StandardEncoding.INSTANCE.getName(achar.intValue()); + try + { + Type1CharString accent = font.getType1CharString(accentName); + AffineTransform at = AffineTransform.getTranslateInstance( + leftSideBearing.getX() + adx.floatValue() - asb.floatValue(), + leftSideBearing.getY() + ady.floatValue()); + path.append(accent.getPath().getPathIterator(at), false); + } + catch (IOException e) + { + LOG.warn("invalid seac character in glyph " + glyphName + " of font " + fontName, e); + } + } + + @Override + public String toString() + { + return type1Sequence.toString().replace("|","\n").replace(",", " "); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharStringParser.java b/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharStringParser.java new file mode 100644 index 00000000000..cb4ee3d00ad --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharStringParser.java @@ -0,0 +1,239 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class represents a converter for a mapping into a Type 1 sequence. + * + * @see "Adobe Type 1 Font Format, Adobe Systems (1999)" + * + * @author Villu Ruusmann + * @author John Hewson + */ +public class Type1CharStringParser +{ + private static final Log LOG = LogFactory.getLog(Type1CharStringParser.class); + + // 1-byte commands + static final int RETURN = 11; + static final int CALLSUBR = 10; + + // 2-byte commands + static final int TWO_BYTE = 12; + static final int CALLOTHERSUBR = 16; + static final int POP = 17; + + private final String fontName, glyphName; + + /** + * Constructs a new Type1CharStringParser object. + * + * @param fontName font name + * @param glyphName glyph name + */ + public Type1CharStringParser(String fontName, String glyphName) + { + this.fontName = fontName; + this.glyphName = glyphName; + } + + /** + * The given byte array will be parsed and converted to a Type1 sequence. + * + * @param bytes the given mapping as byte array + * @param subrs list of local subroutines + * @return the Type1 sequence + * @throws IOException if an error occurs during reading + */ + public List parse(byte[] bytes, List subrs) throws IOException + { + return parse(bytes, subrs, new ArrayList<>()); + } + + private List parse(byte[] bytes, List subrs, List sequence) throws IOException + { + DataInput input = new DataInput(bytes); + while (input.hasRemaining()) + { + int b0 = input.readUnsignedByte(); + if (b0 == CALLSUBR) + { + // callsubr command + Object obj = sequence.remove(sequence.size() - 1); + if (!(obj instanceof Integer)) + { + LOG.warn("Parameter " + obj + " for CALLSUBR is ignored, integer expected in glyph '" + + glyphName + "' of font " + fontName); + continue; + } + Integer operand = (Integer) obj; + + if (operand >= 0 && operand < subrs.size()) + { + byte[] subrBytes = subrs.get(operand); + parse(subrBytes, subrs, sequence); + Object lastItem = sequence.get(sequence.size()-1); + if (lastItem instanceof CharStringCommand && + ((CharStringCommand)lastItem).getKey().getValue()[0] == RETURN) + { + sequence.remove(sequence.size()-1); // remove "return" command + } + } + else + { + LOG.warn("CALLSUBR is ignored, operand: " + operand + + ", subrs.size(): " + subrs.size() + " in glyph '" + + glyphName + "' of font " + fontName); + // remove all parameters (there can be more than one) + while (sequence.get(sequence.size() - 1) instanceof Integer) + { + sequence.remove(sequence.size() - 1); + } + } + } + else if (b0 == TWO_BYTE && input.peekUnsignedByte(0) == CALLOTHERSUBR) + { + // callothersubr command (needed in order to expand Subrs) + input.readByte(); + + Integer othersubrNum = (Integer)sequence.remove(sequence.size()-1); + Integer numArgs = (Integer)sequence.remove(sequence.size()-1); + + // othersubrs 0-3 have their own semantics + Stack results = new Stack<>(); + switch (othersubrNum) + { + case 0: + results.push(removeInteger(sequence)); + results.push(removeInteger(sequence)); + sequence.remove(sequence.size() - 1); + // end flex + sequence.add(0); + sequence.add(new CharStringCommand(TWO_BYTE, CALLOTHERSUBR)); + break; + case 1: + // begin flex + sequence.add(1); + sequence.add(new CharStringCommand(TWO_BYTE, CALLOTHERSUBR)); + break; + case 3: + // allows hint replacement + results.push(removeInteger(sequence)); + break; + default: + // all remaining othersubrs use this fallback mechanism + for (int i = 0; i < numArgs; i++) + { + results.push(removeInteger(sequence)); + } + break; + } + + // pop must follow immediately + while (input.peekUnsignedByte(0) == TWO_BYTE && input.peekUnsignedByte(1) == POP) + { + input.readByte(); // B0_POP + input.readByte(); // B1_POP + sequence.add(results.pop()); + } + + if (results.size() > 0) + { + LOG.warn("Value left on the PostScript stack in glyph " + glyphName + " of font " + fontName); + } + } + else if (b0 >= 0 && b0 <= 31) + { + sequence.add(readCommand(input, b0)); + } + else if (b0 >= 32 && b0 <= 255) + { + sequence.add(readNumber(input, b0)); + } + else + { + throw new IllegalArgumentException(); + } + } + return sequence; + } + + // this method is a workaround for the fact that Type1CharStringParser assumes that subrs and + // othersubrs can be unrolled without executing the 'div' operator, which isn't true + private static Integer removeInteger(List sequence) throws IOException + { + Object item = sequence.remove(sequence.size() - 1); + if (item instanceof Integer) + { + return (Integer)item; + } + CharStringCommand command = (CharStringCommand) item; + + // div + if (command.getKey().getValue()[0] == 12 && command.getKey().getValue()[1] == 12) + { + int a = (Integer) sequence.remove(sequence.size() - 1); + int b = (Integer) sequence.remove(sequence.size() - 1); + return b / a; + } + throw new IOException("Unexpected char string command: " + command.getKey()); + } + + private CharStringCommand readCommand(DataInput input, int b0) throws IOException + { + if (b0 == 12) + { + int b1 = input.readUnsignedByte(); + return new CharStringCommand(b0, b1); + } + return new CharStringCommand(b0); + } + + private Integer readNumber(DataInput input, int b0) throws IOException + { + if (b0 >= 32 && b0 <= 246) + { + return b0 - 139; + } + else if (b0 >= 247 && b0 <= 250) + { + int b1 = input.readUnsignedByte(); + return (b0 - 247) * 256 + b1 + 108; + } + else if (b0 >= 251 && b0 <= 254) + { + int b1 = input.readUnsignedByte(); + return -(b0 - 251) * 256 - b1 - 108; + } + else if (b0 == 255) + { + return input.readInt(); + } + else + { + throw new IllegalArgumentException(); + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/Type1FontUtil.java b/fontbox/src/main/java/org/apache/fontbox/cff/Type1FontUtil.java new file mode 100644 index 00000000000..7b5d2019e96 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/Type1FontUtil.java @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.util.Locale; + +/** + * This class contains some helper methods handling Type1-Fonts. + * + * @author Villu Ruusmann + */ +public final class Type1FontUtil +{ + + private Type1FontUtil() + { + } + + /** + * Converts a byte-array into a string with the corresponding hex value. + * @param bytes the byte array + * @return the string with the hex value + */ + public static String hexEncode(byte[] bytes) + { + StringBuilder sb = new StringBuilder(); + for (byte aByte : bytes) + { + String string = Integer.toHexString(aByte & 0xff); + if (string.length() == 1) + { + sb.append("0"); + } + sb.append(string.toUpperCase(Locale.US)); + } + return sb.toString(); + } + + /** + * Converts a string representing a hex value into a byte array. + * @param string the string representing the hex value + * @return the hex value as byte array + */ + public static byte[] hexDecode(String string) + { + if (string.length() % 2 != 0) + { + throw new IllegalArgumentException(); + } + byte[] bytes = new byte[string.length() / 2]; + for (int i = 0; i < string.length(); i += 2) + { + bytes[i / 2] = (byte) Integer.parseInt(string.substring(i, i + 2), 16); + } + return bytes; + } + + /** + * Encrypt eexec. + * @param buffer the given data + * @return the encrypted data + */ + public static byte[] eexecEncrypt(byte[] buffer) + { + return encrypt(buffer, 55665, 4); + } + + /** + * Encrypt charstring. + * @param buffer the given data + * @param n blocksize? + * @return the encrypted data + */ + public static byte[] charstringEncrypt(byte[] buffer, int n) + { + return encrypt(buffer, 4330, n); + } + + private static byte[] encrypt(byte[] plaintextBytes, int r, int n) + { + byte[] buffer = new byte[plaintextBytes.length + n]; + + for (int i = 0; i < n; i++) + { + buffer[i] = 0; + } + + System.arraycopy(plaintextBytes, 0, buffer, n, buffer.length - n); + + int c1 = 52845; + int c2 = 22719; + + byte[] ciphertextBytes = new byte[buffer.length]; + + for (int i = 0; i < buffer.length; i++) + { + int plain = buffer[i] & 0xff; + int cipher = plain ^ r >> 8; + + ciphertextBytes[i] = (byte) cipher; + + r = (cipher + r) * c1 + c2 & 0xffff; + } + + return ciphertextBytes; + } + + /** + * Decrypt eexec. + * @param buffer the given encrypted data + * @return the decrypted data + */ + public static byte[] eexecDecrypt(byte[] buffer) + { + return decrypt(buffer, 55665, 4); + } + + /** + * Decrypt charstring. + * @param buffer the given encrypted data + * @param n blocksize? + * @return the decrypted data + */ + public static byte[] charstringDecrypt(byte[] buffer, int n) + { + return decrypt(buffer, 4330, n); + } + + private static byte[] decrypt(byte[] ciphertextBytes, int r, int n) + { + byte[] buffer = new byte[ciphertextBytes.length]; + + int c1 = 52845; + int c2 = 22719; + + for (int i = 0; i < ciphertextBytes.length; i++) + { + int cipher = ciphertextBytes[i] & 0xff; + int plain = cipher ^ r >> 8; + + buffer[i] = (byte) plain; + + r = (cipher + r) * c1 + c2 & 0xffff; + } + + byte[] plaintextBytes = new byte[ciphertextBytes.length - n]; + System.arraycopy(buffer, n, plaintextBytes, 0, plaintextBytes.length); + + return plaintextBytes; + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java b/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java new file mode 100644 index 00000000000..f2e48da76cb --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java @@ -0,0 +1,385 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.apache.fontbox.type1.Type1CharStringReader; + +/** + * Represents a Type 2 CharString by converting it into an equivalent Type 1 CharString. + * + * @author Villu Ruusmann + * @author John Hewson + */ +public class Type2CharString extends Type1CharString +{ + private float defWidthX = 0; + private float nominalWidthX = 0; + private int pathCount = 0; + private final List type2sequence; + private final int gid; + + /** + * Constructor. + * @param font Parent CFF font + * @param fontName font name + * @param glyphName glyph name (or CID as hex string) + * @param gid GID + * @param sequence Type 2 char string sequence + * @param defaultWidthX default width + * @param nomWidthX nominal width + */ + public Type2CharString(Type1CharStringReader font, String fontName, String glyphName, int gid, List sequence, + int defaultWidthX, int nomWidthX) + { + super(font, fontName, glyphName); + this.gid = gid; + type2sequence = sequence; + defWidthX = defaultWidthX; + nominalWidthX = nomWidthX; + convertType1ToType2(sequence); + } + + /** + * Return the GID (glyph id) of this charstring. + */ + public int getGID() + { + return gid; + } + + /** + * Returns the Type 2 charstring sequence. + */ + public List getType2Sequence() + { + return type2sequence; + } + + /** + * Converts a sequence of Type 2 commands into a sequence of Type 1 commands. + * @param sequence the Type 2 char string sequence + */ + private void convertType1ToType2(List sequence) + { + type1Sequence = new ArrayList<>(); + pathCount = 0; + CharStringHandler handler = new CharStringHandler() { + @Override + public List handleCommand(List numbers, CharStringCommand command) + { + return Type2CharString.this.handleCommand(numbers, command); + } + }; + handler.handleSequence(sequence); + } + + @SuppressWarnings(value = { "unchecked" }) + private List handleCommand(List numbers, CharStringCommand command) + { + commandCount++; + String name = CharStringCommand.TYPE2_VOCABULARY.get(command.getKey()); + + if (name == null) + { + addCommand(numbers, command); + return Collections.emptyList(); + } + switch (name) + { + case "hstem": + numbers = clearStack(numbers, numbers.size() % 2 != 0); + expandStemHints(numbers, true); + break; + case "vstem": + numbers = clearStack(numbers, numbers.size() % 2 != 0); + expandStemHints(numbers, false); + break; + case "vmoveto": + numbers = clearStack(numbers, numbers.size() > 1); + markPath(); + addCommand(numbers, command); + break; + case "rlineto": + addCommandList(split(numbers, 2), command); + break; + case "hlineto": + drawAlternatingLine(numbers, true); + break; + case "vlineto": + drawAlternatingLine(numbers, false); + break; + case "rrcurveto": + addCommandList(split(numbers, 6), command); + break; + case "endchar": + numbers = clearStack(numbers, numbers.size() == 5 || numbers.size() == 1); + closePath(); + if (numbers.size() == 4) + { + // deprecated "seac" operator + numbers.add(0, 0); + addCommand(numbers, new CharStringCommand(12, 6)); + } + else + { + addCommand(numbers, command); + } + break; + case "rmoveto": + numbers = clearStack(numbers, numbers.size() > 2); + markPath(); + addCommand(numbers, command); + break; + case "hmoveto": + numbers = clearStack(numbers, numbers.size() > 1); + markPath(); + addCommand(numbers, command); + break; + case "vhcurveto": + drawAlternatingCurve(numbers, false); + break; + case "hvcurveto": + drawAlternatingCurve(numbers, true); + break; + case "hflex": + { + List first = Arrays.asList(numbers.get(0), 0, + numbers.get(1), numbers.get(2), numbers.get(3), 0); + List second = Arrays.asList(numbers.get(4), 0, + numbers.get(5), -(numbers.get(2).floatValue()), + numbers.get(6), 0); + addCommandList(Arrays.asList(first, second), new CharStringCommand(8)); + break; + } + case "flex": + { + List first = numbers.subList(0, 6); + List second = numbers.subList(6, 12); + addCommandList(Arrays.asList(first, second), new CharStringCommand(8)); + break; + } + case "hflex1": + { + List first = Arrays.asList(numbers.get(0), numbers.get(1), + numbers.get(2), numbers.get(3), numbers.get(4), 0); + List second = Arrays.asList(numbers.get(5), 0, + numbers.get(6), numbers.get(7), numbers.get(8), 0); + addCommandList(Arrays.asList(first, second), new CharStringCommand(8)); + break; + } + case "flex1": + { + int dx = 0; + int dy = 0; + for (int i = 0; i < 5; i++) + { + dx += numbers.get(i * 2).intValue(); + dy += numbers.get(i * 2 + 1).intValue(); + } + List first = numbers.subList(0, 6); + List second = Arrays.asList(numbers.get(6), numbers.get(7), numbers.get(8), + numbers.get(9), (Math.abs(dx) > Math.abs(dy) ? numbers.get(10) : -dx), + (Math.abs(dx) > Math.abs(dy) ? -dy : numbers.get(10))); + addCommandList(Arrays.asList(first, second), new CharStringCommand(8)); + break; + } + case "hstemhm": + numbers = clearStack(numbers, numbers.size() % 2 != 0); + expandStemHints(numbers, true); + break; + case "hintmask": + case "cntrmask": + numbers = clearStack(numbers, numbers.size() % 2 != 0); + if (numbers.size() > 0) + { + expandStemHints(numbers, false); + } + break; + case "vstemhm": + numbers = clearStack(numbers, numbers.size() % 2 != 0); + expandStemHints(numbers, false); + break; + case "rcurveline": + if (numbers.size() >= 2) + { + addCommandList(split(numbers.subList(0, numbers.size() - 2), 6), + new CharStringCommand(8)); + addCommand(numbers.subList(numbers.size() - 2, numbers.size()), + new CharStringCommand(5)); + } + break; + case "rlinecurve": + if (numbers.size() >= 6) + { + addCommandList(split(numbers.subList(0, numbers.size() - 6), 2), + new CharStringCommand(5)); + addCommand(numbers.subList(numbers.size() - 6, numbers.size()), + new CharStringCommand(8)); + } + break; + case "vvcurveto": + drawCurve(numbers, false); + break; + case "hhcurveto": + drawCurve(numbers, true); + break; + default: + addCommand(numbers, command); + break; + } + return Collections.emptyList(); + } + + private List clearStack(List numbers, boolean flag) + { + if (type1Sequence.isEmpty()) + { + if (flag) + { + addCommand(Arrays.asList((Number) 0f, numbers.get(0).floatValue() + nominalWidthX), + new CharStringCommand(13)); + numbers = numbers.subList(1, numbers.size()); + } + else + { + addCommand(Arrays.asList((Number) 0f, defWidthX), + new CharStringCommand(13)); + } + } + return numbers; + } + + /** + * @param numbers + * @param horizontal + */ + private void expandStemHints(List numbers, boolean horizontal) + { + // TODO + } + + private void markPath() + { + if (pathCount > 0) + { + closePath(); + } + pathCount++; + } + + private void closePath() + { + CharStringCommand command = pathCount > 0 ? (CharStringCommand) type1Sequence + .get(type1Sequence.size() - 1) + : null; + + CharStringCommand closepathCommand = new CharStringCommand(9); + if (command != null && !closepathCommand.equals(command)) + { + addCommand(Collections. emptyList(), closepathCommand); + } + } + + private void drawAlternatingLine(List numbers, boolean horizontal) + { + while (numbers.size() > 0) + { + addCommand(numbers.subList(0, 1), new CharStringCommand( + horizontal ? 6 : 7)); + numbers = numbers.subList(1, numbers.size()); + horizontal = !horizontal; + } + } + + private void drawAlternatingCurve(List numbers, boolean horizontal) + { + while (numbers.size() >= 4) + { + boolean last = numbers.size() == 5; + if (horizontal) + { + addCommand(Arrays.asList(numbers.get(0), 0, + numbers.get(1), numbers.get(2), last ? numbers.get(4) + : 0, numbers.get(3)), + new CharStringCommand(8)); + } + else + { + addCommand(Arrays.asList(0, numbers.get(0), + numbers.get(1), numbers.get(2), numbers.get(3), + last ? numbers.get(4) : 0), + new CharStringCommand(8)); + } + numbers = numbers.subList(last ? 5 : 4, numbers.size()); + horizontal = !horizontal; + } + } + + private void drawCurve(List numbers, boolean horizontal) + { + while (numbers.size() >= 4) + { + boolean first = numbers.size() % 4 == 1; + + if (horizontal) + { + addCommand(Arrays.asList(numbers.get(first ? 1 : 0), + first ? numbers.get(0) : 0, numbers + .get(first ? 2 : 1), + numbers.get(first ? 3 : 2), numbers.get(first ? 4 : 3), + 0), new CharStringCommand(8)); + } + else + { + addCommand(Arrays.asList(first ? numbers.get(0) : 0, numbers.get(first ? 1 : 0), numbers + .get(first ? 2 : 1), numbers.get(first ? 3 : 2), + 0, numbers.get(first ? 4 : 3)), + new CharStringCommand(8)); + } + numbers = numbers.subList(first ? 5 : 4, numbers.size()); + } + } + + private void addCommandList(List> numbers, CharStringCommand command) + { + for (List ns : numbers) + { + addCommand(ns, command); + } + } + + private void addCommand(List numbers, CharStringCommand command) + { + type1Sequence.addAll(numbers); + type1Sequence.add(command); + } + + private static List> split(List list, int size) + { + List> result = new ArrayList<>(); + for (int i = 0; i < list.size() / size; i++) + { + result.add(list.subList(i * size, (i + 1) * size)); + } + return result; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java b/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java new file mode 100644 index 00000000000..45c5d3260db --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java @@ -0,0 +1,274 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +/** + * This class represents a converter for a mapping into a Type2-sequence. + * @author Villu Ruusmann + */ +public class Type2CharStringParser +{ + private int hstemCount = 0; + private int vstemCount = 0; + private List sequence = null; + @SuppressWarnings("unused") + private final String fontName, glyphName; + + /** + * Constructs a new Type1CharStringParser object for a Type 1-equivalent font. + * + * @param fontName font name + * @param glyphName glyph name + */ + public Type2CharStringParser(String fontName, String glyphName) + { + this.fontName = fontName; + this.glyphName = glyphName; + } + + /** + * Constructs a new Type1CharStringParser object for a CID-Keyed font. + * + * @param fontName font name + * @param cid CID + */ + public Type2CharStringParser(String fontName, int cid) + { + this.fontName = fontName; + this.glyphName = String.format(Locale.US, "%04x", cid); // for debugging only + } + + /** + * The given byte array will be parsed and converted to a Type2 sequence. + * @param bytes the given mapping as byte array + * @param globalSubrIndex array containing all global subroutines + * @param localSubrIndex array containing all local subroutines + * + * @return the Type2 sequence + * @throws IOException if an error occurs during reading + */ + public List parse(byte[] bytes, byte[][] globalSubrIndex, byte[][] localSubrIndex) throws IOException + { + return parse(bytes, globalSubrIndex, localSubrIndex, true); + } + + private List parse(byte[] bytes, byte[][] globalSubrIndex, byte[][] localSubrIndex, boolean init) throws IOException + { + if (init) + { + hstemCount = 0; + vstemCount = 0; + sequence = new ArrayList<>(); + } + DataInput input = new DataInput(bytes); + boolean localSubroutineIndexProvided = localSubrIndex != null && localSubrIndex.length > 0; + boolean globalSubroutineIndexProvided = globalSubrIndex != null && globalSubrIndex.length > 0; + + while (input.hasRemaining()) + { + int b0 = input.readUnsignedByte(); + if (b0 == 10 && localSubroutineIndexProvided) + { // process subr command + Integer operand=(Integer)sequence.remove(sequence.size()-1); + //get subrbias + int bias = 0; + int nSubrs = localSubrIndex.length; + + if (nSubrs < 1240) + { + bias = 107; + } + else if (nSubrs < 33900) + { + bias = 1131; + } + else + { + bias = 32768; + } + int subrNumber = bias+operand; + if (subrNumber < localSubrIndex.length) + { + byte[] subrBytes = localSubrIndex[subrNumber]; + parse(subrBytes, globalSubrIndex, localSubrIndex, false); + Object lastItem=sequence.get(sequence.size()-1); + if (lastItem instanceof CharStringCommand && ((CharStringCommand)lastItem).getKey().getValue()[0] == 11) + { + sequence.remove(sequence.size()-1); // remove "return" command + } + } + + } + else if (b0 == 29 && globalSubroutineIndexProvided) + { // process globalsubr command + Integer operand=(Integer)sequence.remove(sequence.size()-1); + //get subrbias + int bias; + int nSubrs = globalSubrIndex.length; + + if (nSubrs < 1240) + { + bias = 107; + } + else if (nSubrs < 33900) + { + bias = 1131; + } + else + { + bias = 32768; + } + + int subrNumber = bias+operand; + if (subrNumber < globalSubrIndex.length) + { + byte[] subrBytes = globalSubrIndex[subrNumber]; + parse(subrBytes, globalSubrIndex, localSubrIndex, false); + Object lastItem=sequence.get(sequence.size()-1); + if (lastItem instanceof CharStringCommand && ((CharStringCommand)lastItem).getKey().getValue()[0]==11) + { + sequence.remove(sequence.size()-1); // remove "return" command + } + } + + } + else if (b0 >= 0 && b0 <= 27) + { + sequence.add(readCommand(b0, input)); + } + else if (b0 == 28) + { + sequence.add(readNumber(b0, input)); + } + else if (b0 >= 29 && b0 <= 31) + { + sequence.add(readCommand(b0, input)); + } + else if (b0 >= 32 && b0 <= 255) + { + sequence.add(readNumber(b0, input)); + } + else + { + throw new IllegalArgumentException(); + } + } + return sequence; + } + + private CharStringCommand readCommand(int b0, DataInput input) throws IOException + { + + if (b0 == 1 || b0 == 18) + { + hstemCount += peekNumbers().size() / 2; + } + else if (b0 == 3 || b0 == 19 || b0 == 20 || b0 == 23) + { + vstemCount += peekNumbers().size() / 2; + } // End if + + if (b0 == 12) + { + int b1 = input.readUnsignedByte(); + + return new CharStringCommand(b0, b1); + } + else if (b0 == 19 || b0 == 20) + { + int[] value = new int[1 + getMaskLength()]; + value[0] = b0; + + for (int i = 1; i < value.length; i++) + { + value[i] = input.readUnsignedByte(); + } + + return new CharStringCommand(value); + } + + return new CharStringCommand(b0); + } + + private Number readNumber(int b0, DataInput input) throws IOException + { + + if (b0 == 28) + { + return (int) input.readShort(); + } + else if (b0 >= 32 && b0 <= 246) + { + return b0 - 139; + } + else if (b0 >= 247 && b0 <= 250) + { + int b1 = input.readUnsignedByte(); + + return (b0 - 247) * 256 + b1 + 108; + } + else if (b0 >= 251 && b0 <= 254) + { + int b1 = input.readUnsignedByte(); + + return -(b0 - 251) * 256 - b1 - 108; + } + else if (b0 == 255) + { + short value = input.readShort(); + // The lower bytes are representing the digits after the decimal point + double fraction = input.readUnsignedShort() / 65535d; + return value + fraction; + } + else + { + throw new IllegalArgumentException(); + } + } + + private int getMaskLength() + { + int hintCount = hstemCount + vstemCount; + int length = hintCount / 8; + if (hintCount % 8 > 0) + { + length++; + } + return length; + } + + private List peekNumbers() + { + List numbers = new ArrayList<>(); + for (int i = sequence.size() - 1; i > -1; i--) + { + Object object = sequence.get(i); + + if (!(object instanceof Number)) + { + return numbers; + } + numbers.add(0, (Number) object); + } + return numbers; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cff/package.html b/fontbox/src/main/java/org/apache/fontbox/cff/package.html new file mode 100644 index 00000000000..107badad6ad --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cff/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package holds classes used to parse CFF/Type2-Fonts (aka Type1C-Fonts). + + diff --git a/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java b/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java new file mode 100644 index 00000000000..dbdf9329ffd --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cmap; + + +/** + * Range of continuous CIDs between two Unicode characters. + */ +class CIDRange +{ + + private final char from; + + private char to; + + private final int cid; + + CIDRange(char from, char to, int cid) + { + this.from = from; + this.to = to; + this.cid = cid; + } + + /** + * Maps the given Unicode character to the corresponding CID in this range. + * + * @param ch Unicode character + * @return corresponding CID, or -1 if the character is out of range + */ + public int map(char ch) + { + if (from <= ch && ch <= to) + { + return cid + (ch - from); + } + return -1; + } + + /** + * Maps the given CID to the corresponding Unicode character in this range. + * + * @param code CID + * @return corresponding Unicode character, or -1 if the CID is out of range + */ + public int unmap(int code) + { + if (cid <= code && code <= cid + (to - from)) + { + return from + (code - cid); + } + return -1; + } + + /** + * Check if the given values represent a consecutive range of the given range. If so, extend the given range instead + * of creating a new one. + * + * @param newFrom start value of the new range + * @param newTo end value of the new range + * @param newCid start CID value of the range + * @return true if the given range was extended + */ + public boolean extend(char newFrom, char newTo, int newCid) + { + if ((newFrom == to + 1) && (newCid == cid + to - from + 1)) + { + to = newTo; + return true; + } + return false; + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java b/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java new file mode 100644 index 00000000000..fe76c2166d1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java @@ -0,0 +1,428 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cmap; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class represents a CMap file. + * + * @author Ben Litchfield + */ +public class CMap +{ + private static final Log LOG = LogFactory.getLog(CMap.class); + + private int wmode = 0; + private String cmapName = null; + private String cmapVersion = null; + private int cmapType = -1; + + private String registry = null; + private String ordering = null; + private int supplement = 0; + + private int minCodeLength = 4; + private int maxCodeLength; + + // code lengths + private final List codespaceRanges = new ArrayList<>(); + + // Unicode mappings + private final Map charToUnicode = new HashMap<>(); + + // CID mappings + private final Map codeToCid = new HashMap<>(); + private final List codeToCidRanges = new ArrayList<>(); + + private static final String SPACE = " "; + private int spaceMapping = -1; + + /** + * Creates a new instance of CMap. + */ + CMap() + { + } + + /** + * This will tell if this cmap has any CID mappings. + * + * @return true If there are any CID mappings, false otherwise. + */ + public boolean hasCIDMappings() + { + return !codeToCid.isEmpty() || !codeToCidRanges.isEmpty(); + } + + /** + * This will tell if this cmap has any Unicode mappings. + * + * @return true If there are any Unicode mappings, false otherwise. + */ + public boolean hasUnicodeMappings() + { + return !charToUnicode.isEmpty(); + } + + /** + * Returns the sequence of Unicode characters for the given character code. + * + * @param code character code + * @return Unicode characters (may be more than one, e.g "fi" ligature) + */ + public String toUnicode(int code) + { + return charToUnicode.get(code); + } + + /** + * Reads a character code from a string in the content stream. + *

See "CMap Mapping" and "Handling Undefined Characters" in PDF32000 for more details. + * + * @param in string stream + * @return character code + * @throws IOException if there was an error reading the stream or CMap + */ + public int readCode(InputStream in) throws IOException + { + byte[] bytes = new byte[maxCodeLength]; + in.read(bytes,0,minCodeLength); + for (int i = minCodeLength-1; i < maxCodeLength; i++) + { + final int byteCount = i+1; + for (CodespaceRange range : codespaceRanges) + { + if (range.isFullMatch(bytes, byteCount)) + { + return toInt(bytes, byteCount); + } + } + if (byteCount < maxCodeLength) + { + bytes[byteCount] = (byte)in.read(); + } + } + String seq = ""; + for (int i = 0; i < maxCodeLength; ++i) + { + seq += String.format("0x%02X (%04o) ", bytes[i], bytes[i]); + } + LOG.warn("Invalid character code sequence " + seq + "in CMap " + cmapName); + return 0; + } + + /** + * Returns an int for the given byte array + */ + static int toInt(byte[] data, int dataLen) + { + int code = 0; + for (int i = 0; i < dataLen; ++i) + { + code <<= 8; + code |= (data[i] & 0xFF); + } + return code; + } + + /** + * Returns the CID for the given character code. + * + * @param code character code + * @return CID + */ + public int toCID(int code) + { + Integer cid = codeToCid.get(code); + if (cid != null) + { + return cid; + } + for (CIDRange range : codeToCidRanges) + { + int ch = range.map((char)code); + if (ch != -1) + { + return ch; + } + } + return 0; + } + + /** + * Convert the given part of a byte array to an integer. + * @param data the byte array + * @param offset The offset into the byte array. + * @param length The length of the data we are getting. + * @return the resulting integer + */ + private int getCodeFromArray( byte[] data, int offset, int length ) + { + int code = 0; + for( int i=0; i 255) + { + // PDFBOX-4550: likely corrupt stream + break; + } + nextToken = parseNextToken(cmapStream); + if (nextToken instanceof List) + { + List array = (List) nextToken; + // ignore empty and malformed arrays + if (!array.isEmpty() && array.size() >= end - start) + { + addMappingFrombfrange(result, startCode, array); + } + } + // PDFBOX-3807: ignore null + else if (nextToken instanceof byte[]) + { + byte[] tokenBytes = (byte[]) nextToken; + // PDFBOX-3450: ignore <> + if (tokenBytes.length > 0) + { + addMappingFrombfrange(result, startCode, end - start + 1, tokenBytes); + } + } + } + } + + private void addMappingFrombfrange(CMap cmap, byte[] startCode, List tokenBytesList) + { + for (byte[] tokenBytes : tokenBytesList) + { + String value = createStringFromBytes(tokenBytes); + cmap.addCharMapping(startCode, value); + increment(startCode); + } + } + + private void addMappingFrombfrange(CMap cmap, byte[] startCode, int values, + byte[] tokenBytes) + { + for (int i = 0; i < values; i++) + { + String value = createStringFromBytes(tokenBytes); + cmap.addCharMapping(startCode, value); + increment(startCode); + increment(tokenBytes); + } + } + + /** + * Returns an input stream containing the given "use" CMap. + * + * @param name Name of the given "use" CMap resource. + * @throws IOException if the CMap resource doesn't exist or if there is an error opening its + * stream. + */ + protected InputStream getExternalCMap(String name) throws IOException + { + InputStream is = getClass().getResourceAsStream(name); + if (is == null) + { + throw new IOException("Error: Could not find referenced cmap stream " + name); + } + return is; + } + + private Object parseNextToken(PushbackInputStream is) throws IOException + { + Object retval = null; + int nextByte = is.read(); + // skip whitespace + while (nextByte == 0x09 || nextByte == 0x20 || nextByte == 0x0D || nextByte == 0x0A) + { + nextByte = is.read(); + } + switch (nextByte) + { + case '%': + { + // header operations, for now return the entire line + // may need to smarter in the future + StringBuilder buffer = new StringBuilder(); + buffer.append((char) nextByte); + readUntilEndOfLine(is, buffer); + retval = buffer.toString(); + break; + } + case '(': + { + StringBuilder buffer = new StringBuilder(); + int stringByte = is.read(); + + while (stringByte != -1 && stringByte != ')') + { + buffer.append((char) stringByte); + stringByte = is.read(); + } + retval = buffer.toString(); + break; + } + case '>': + { + int secondCloseBrace = is.read(); + if (secondCloseBrace == '>') + { + retval = MARK_END_OF_DICTIONARY; + } + else + { + throw new IOException("Error: expected the end of a dictionary."); + } + break; + } + case ']': + { + retval = MARK_END_OF_ARRAY; + break; + } + case '[': + { + List list = new ArrayList<>(); + + Object nextToken = parseNextToken(is); + while (nextToken != null && !MARK_END_OF_ARRAY.equals(nextToken)) + { + list.add(nextToken); + nextToken = parseNextToken(is); + } + retval = list; + break; + } + case '<': + { + int theNextByte = is.read(); + if (theNextByte == '<') + { + Map result = new HashMap<>(); + // we are reading a dictionary + Object key = parseNextToken(is); + while (key instanceof LiteralName && !MARK_END_OF_DICTIONARY.equals(key)) + { + Object value = parseNextToken(is); + result.put(((LiteralName) key).name, value); + key = parseNextToken(is); + } + retval = result; + } + else + { + // won't read more than 512 bytes + + int multiplyer = 16; + int bufferIndex = -1; + while (theNextByte != -1 && theNextByte != '>') + { + int intValue = 0; + if (theNextByte >= '0' && theNextByte <= '9') + { + intValue = theNextByte - '0'; + } + else if (theNextByte >= 'A' && theNextByte <= 'F') + { + intValue = 10 + theNextByte - 'A'; + } + else if (theNextByte >= 'a' && theNextByte <= 'f') + { + intValue = 10 + theNextByte - 'a'; + } + // all kind of whitespaces may occur in malformed CMap files + // see PDFBOX-2035 + else if (isWhitespaceOrEOF(theNextByte)) + { + // skipping whitespaces + theNextByte = is.read(); + continue; + } + else + { + throw new IOException("Error: expected hex character and not " + (char) theNextByte + ":" + + theNextByte); + } + intValue *= multiplyer; + if (multiplyer == 16) + { + bufferIndex++; + tokenParserByteBuffer[bufferIndex] = 0; + multiplyer = 1; + } + else + { + multiplyer = 16; + } + tokenParserByteBuffer[bufferIndex] += intValue; + theNextByte = is.read(); + } + byte[] finalResult = new byte[bufferIndex + 1]; + System.arraycopy(tokenParserByteBuffer, 0, finalResult, 0, bufferIndex + 1); + retval = finalResult; + } + break; + } + case '/': + { + StringBuilder buffer = new StringBuilder(); + int stringByte = is.read(); + + while (!isWhitespaceOrEOF(stringByte) && !isDelimiter(stringByte)) + { + buffer.append((char) stringByte); + stringByte = is.read(); + } + if (isDelimiter( stringByte)) + { + is.unread(stringByte); + } + retval = new LiteralName(buffer.toString()); + break; + } + case -1: + { + // EOF returning null + break; + } + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + StringBuilder buffer = new StringBuilder(); + buffer.append((char) nextByte); + nextByte = is.read(); + + while (!isWhitespaceOrEOF(nextByte) && (Character.isDigit((char) nextByte) || nextByte == '.')) + { + buffer.append((char) nextByte); + nextByte = is.read(); + } + is.unread(nextByte); + String value = buffer.toString(); + if (value.indexOf('.') >= 0) + { + retval = Double.valueOf(value); + } + else + { + retval = Integer.valueOf(value); + } + break; + } + default: + { + StringBuilder buffer = new StringBuilder(); + buffer.append((char) nextByte); + nextByte = is.read(); + + // newline separator may be missing in malformed CMap files + // see PDFBOX-2035 + while (!isWhitespaceOrEOF(nextByte) && !isDelimiter(nextByte) && !Character.isDigit(nextByte)) + { + buffer.append((char) nextByte); + nextByte = is.read(); + } + if (isDelimiter(nextByte) || Character.isDigit(nextByte)) + { + is.unread(nextByte); + } + retval = new Operator(buffer.toString()); + + break; + } + } + return retval; + } + + private void readUntilEndOfLine(InputStream is, StringBuilder buf) throws IOException + { + int nextByte = is.read(); + while (nextByte != -1 && nextByte != 0x0D && nextByte != 0x0A) + { + buf.append((char) nextByte); + nextByte = is.read(); + } + } + + private boolean isWhitespaceOrEOF(int aByte) + { + return aByte == -1 || aByte == 0x20 || aByte == 0x0D || aByte == 0x0A; + } + + /** Is this a standard PDF delimiter character? */ + private boolean isDelimiter(int aByte) + { + switch (aByte) + { + case '(': + case ')': + case '<': + case '>': + case '[': + case ']': + case '{': + case '}': + case '/': + case '%': + return true; + default: + return false; + } + } + + private void increment(byte[] data) + { + increment(data, data.length - 1); + } + + private void increment(byte[] data, int position) + { + if (position > 0 && (data[position] & 0xFF) == 255) + { + data[position] = 0; + increment(data, position - 1); + } + else + { + data[position] = (byte) (data[position] + 1); + } + } + + private int createIntFromBytes(byte[] bytes) + { + int intValue = bytes[0] & 0xFF; + if (bytes.length == 2) + { + intValue <<= 8; + intValue += bytes[1] & 0xFF; + } + return intValue; + } + + private String createStringFromBytes(byte[] bytes) + { + return new String(bytes, bytes.length == 1 ? Charsets.ISO_8859_1 : Charsets.UTF_16BE); + } + + /** + * Internal class. + */ + private static final class LiteralName + { + private String name; + + private LiteralName(String theName) + { + name = theName; + } + } + + /** + * Internal class. + */ + private static final class Operator + { + private String op; + + private Operator(String theOp) + { + op = theOp; + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java b/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java new file mode 100644 index 00000000000..5a26ee67b98 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cmap; + +import static org.apache.fontbox.cmap.CMap.toInt; + +/** + * This represents a single entry in the codespace range. + * + * @author Ben Litchfield + */ +public class CodespaceRange +{ + private byte[] start; + private byte[] end; + private int startInt; + private int endInt; + private int codeLength = 0; + + /** + * Creates a new instance of CodespaceRange. + */ + public CodespaceRange() + { + } + + /** + * Returns the length of the codes of the codespace. + * + * @return the code length + */ + public int getCodeLength() + { + return codeLength; + } + + /** Getter for property end. + * @return Value of property end. + * + */ + public byte[] getEnd() + { + return end; + } + + /** Setter for property end. + * @param endBytes New value of property end. + * + */ + void setEnd(byte[] endBytes) + { + end = endBytes; + endInt = toInt(endBytes, endBytes.length); + } + + /** Getter for property start. + * @return Value of property start. + * + */ + public byte[] getStart() + { + return start; + } + + /** Setter for property start. + * @param startBytes New value of property start. + * + */ + void setStart(byte[] startBytes) + { + start = startBytes; + codeLength = start.length; + startInt = toInt(startBytes, startBytes.length); + } + + /** + * Returns true if the given code bytes match this codespace range. + */ + public boolean matches(byte[] code) + { + return isFullMatch(code, code.length); + } + + /** + * Returns true if the given code bytes match this codespace range. + */ + public boolean isFullMatch(byte[] code, int codeLen) + { + // code must be the same length as the bounding codes + if (codeLen == codeLength) + { + int value = toInt(code, codeLen); + if (value >= startInt && value <=endInt) + { + return true; + } + } + return false; + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/cmap/package.html b/fontbox/src/main/java/org/apache/fontbox/cmap/package.html new file mode 100644 index 00000000000..cb43354d6b3 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/cmap/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package holds classes that are necessary to parse cmap files. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/encoding/BuiltInEncoding.java b/fontbox/src/main/java/org/apache/fontbox/encoding/BuiltInEncoding.java new file mode 100644 index 00000000000..8cd382909ff --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/encoding/BuiltInEncoding.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.encoding; + +import java.util.Map; + +/** + * A font's built-in encoding. This is a custom encoding embedded in a font. + * + * @author John Hewson + */ +public class BuiltInEncoding extends Encoding +{ + /** + * Constructor. + * + * @param codeToName the given code to name mapping + */ + public BuiltInEncoding(Map codeToName) + { + for (Map.Entry entry : codeToName.entrySet()) + { + addCharacterEncoding(entry.getKey(), entry.getValue()); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java b/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java new file mode 100644 index 00000000000..bf2e5a0364f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/encoding/Encoding.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.encoding; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * A PostScript Encoding vector. + * + * @author Ben Litchfield + */ +public abstract class Encoding +{ + /** + * This is a mapping from a character code to a character name. + */ + protected Map codeToName = new HashMap<>(250); + + /** + * This is a mapping from a character name to a character code. + */ + protected Map nameToCode = new HashMap<>(250); + + /** + * This will add a character encoding. + * + * @param code The character code that matches the character. + * @param name The name of the character. + */ + protected void addCharacterEncoding( int code, String name ) + { + codeToName.put( code, name ); + nameToCode.put( name, code ); + } + + /** + * This will get the character code for the name. + * + * @param name The name of the character. + * @return The code for the character or null if it is not in the encoding. + */ + public Integer getCode( String name ) + { + return nameToCode.get( name ); + } + + /** + * This will take a character code and get the name from the code. This method will never return + * null. + * + * @param code The character code. + * @return The name of the character, or ".notdef" if the bame doesn't exist. + */ + public String getName( int code ) + { + String name = codeToName.get( code ); + if (name != null) + { + return name; + } + return ".notdef"; + } + + /** + * Returns an unmodifiable view of the code to name mapping. + * + * @return the Code2Name map + */ + public Map getCodeToNameMap() + { + return Collections.unmodifiableMap(codeToName); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java b/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java new file mode 100644 index 00000000000..a7090872365 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/encoding/MacRomanEncoding.java @@ -0,0 +1,262 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.encoding; + + +/** + * This is the MacRomanEncoding. + * + * @author Ben Litchfield + * + */ +public class MacRomanEncoding extends Encoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] MAC_ROMAN_ENCODING_TABLE = { + {0101, "A"}, + {0256, "AE"}, + {0347, "Aacute"}, + {0345, "Acircumflex"}, + {0200, "Adieresis"}, + {0313, "Agrave"}, + {0201, "Aring"}, + {0314, "Atilde"}, + {0102, "B"}, + {0103, "C"}, + {0202, "Ccedilla"}, + {0104, "D"}, + {0105, "E"}, + {0203, "Eacute"}, + {0346, "Ecircumflex"}, + {0350, "Edieresis"}, + {0351, "Egrave"}, + {0106, "F"}, + {0107, "G"}, + {0110, "H"}, + {0111, "I"}, + {0352, "Iacute"}, + {0353, "Icircumflex"}, + {0354, "Idieresis"}, + {0355, "Igrave"}, + {0112, "J"}, + {0113, "K"}, + {0114, "L"}, + {0115, "M"}, + {0116, "N"}, + {0204, "Ntilde"}, + {0117, "O"}, + {0316, "OE"}, + {0356, "Oacute"}, + {0357, "Ocircumflex"}, + {0205, "Odieresis"}, + {0361, "Ograve"}, + {0257, "Oslash"}, + {0315, "Otilde"}, + {0120, "P"}, + {0121, "Q"}, + {0122, "R"}, + {0123, "S"}, + {0124, "T"}, + {0125, "U"}, + {0362, "Uacute"}, + {0363, "Ucircumflex"}, + {0206, "Udieresis"}, + {0364, "Ugrave"}, + {0126, "V"}, + {0127, "W"}, + {0130, "X"}, + {0131, "Y"}, + {0331, "Ydieresis"}, + {0132, "Z"}, + {0141, "a"}, + {0207, "aacute"}, + {0211, "acircumflex"}, + {0253, "acute"}, + {0212, "adieresis"}, + {0276, "ae"}, + {0210, "agrave"}, + {046, "ampersand"}, + {0214, "aring"}, + {0136, "asciicircum"}, + {0176, "asciitilde"}, + {052, "asterisk"}, + {0100, "at"}, + {0213, "atilde"}, + {0142, "b"}, + {0134, "backslash"}, + {0174, "bar"}, + {0173, "braceleft"}, + {0175, "braceright"}, + {0133, "bracketleft"}, + {0135, "bracketright"}, + {0371, "breve"}, + {0245, "bullet"}, + {0143, "c"}, + {0377, "caron"}, + {0215, "ccedilla"}, + {0374, "cedilla"}, + {0242, "cent"}, + {0366, "circumflex"}, + {072, "colon"}, + {054, "comma"}, + {0251, "copyright"}, + {0333, "currency"}, + {0144, "d"}, + {0240, "dagger"}, + {0340, "daggerdbl"}, + {0241, "degree"}, + {0254, "dieresis"}, + {0326, "divide"}, + {044, "dollar"}, + {0372, "dotaccent"}, + {0365, "dotlessi"}, + {0145, "e"}, + {0216, "eacute"}, + {0220, "ecircumflex"}, + {0221, "edieresis"}, + {0217, "egrave"}, + {070, "eight"}, + {0311, "ellipsis"}, + {0321, "emdash"}, + {0320, "endash"}, + {075, "equal"}, + {041, "exclam"}, + {0301, "exclamdown"}, + {0146, "f"}, + {0336, "fi"}, + {065, "five"}, + {0337, "fl"}, + {0304, "florin"}, + {064, "four"}, + {0332, "fraction"}, + {0147, "g"}, + {0247, "germandbls"}, + {0140, "grave"}, + {076, "greater"}, + {0307, "guillemotleft"}, + {0310, "guillemotright"}, + {0334, "guilsinglleft"}, + {0335, "guilsinglright"}, + {0150, "h"}, + {0375, "hungarumlaut"}, + {055, "hyphen"}, + {0151, "i"}, + {0222, "iacute"}, + {0224, "icircumflex"}, + {0225, "idieresis"}, + {0223, "igrave"}, + {0152, "j"}, + {0153, "k"}, + {0154, "l"}, + {074, "less"}, + {0302, "logicalnot"}, + {0155, "m"}, + {0370, "macron"}, + {0265, "mu"}, + {0156, "n"}, + {071, "nine"}, + {0226, "ntilde"}, + {043, "numbersign"}, + {0157, "o"}, + {0227, "oacute"}, + {0231, "ocircumflex"}, + {0232, "odieresis"}, + {0317, "oe"}, + {0376, "ogonek"}, + {0230, "ograve"}, + {061, "one"}, + {0273, "ordfeminine"}, + {0274, "ordmasculine"}, + {0277, "oslash"}, + {0233, "otilde"}, + {0160, "p"}, + {0246, "paragraph"}, + {050, "parenleft"}, + {051, "parenright"}, + {045, "percent"}, + {056, "period"}, + {0341, "periodcentered"}, + {0344, "perthousand"}, + {053, "plus"}, + {0261, "plusminus"}, + {0161, "q"}, + {077, "question"}, + {0300, "questiondown"}, + {042, "quotedbl"}, + {0343, "quotedblbase"}, + {0322, "quotedblleft"}, + {0323, "quotedblright"}, + {0324, "quoteleft"}, + {0325, "quoteright"}, + {0342, "quotesinglbase"}, + {047, "quotesingle"}, + {0162, "r"}, + {0250, "registered"}, + {0373, "ring"}, + {0163, "s"}, + {0244, "section"}, + {073, "semicolon"}, + {067, "seven"}, + {066, "six"}, + {057, "slash"}, + {040, "space"}, + {0243, "sterling"}, + {0164, "t"}, + {063, "three"}, + {0367, "tilde"}, + {0252, "trademark"}, + {062, "two"}, + {0165, "u"}, + {0234, "uacute"}, + {0236, "ucircumflex"}, + {0237, "udieresis"}, + {0235, "ugrave"}, + {0137, "underscore"}, + {0166, "v"}, + {0167, "w"}, + {0170, "x"}, + {0171, "y"}, + {0330, "ydieresis"}, + {0264, "yen"}, + {0172, "z"}, + {060, "zero"} + + }; + + /** + * Singleton instance of this class. + * + */ + public static final MacRomanEncoding INSTANCE = new MacRomanEncoding(); + + /** + * Constructor. + */ + public MacRomanEncoding() + { + for (Object[] encodingEntry : MAC_ROMAN_ENCODING_TABLE) + { + addCharacterEncoding((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/encoding/StandardEncoding.java b/fontbox/src/main/java/org/apache/fontbox/encoding/StandardEncoding.java new file mode 100644 index 00000000000..428b3078221 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/encoding/StandardEncoding.java @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.encoding; + + +/** + * Adobe Standard Encoding + * + * @author Ben Litchfield + * + */ +public class StandardEncoding extends Encoding +{ + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] STANDARD_ENCODING_TABLE = { + {0101, "A"}, + {0341, "AE"}, + {0102, "B"}, + {0103, "C"}, + {0104, "D"}, + {0105, "E"}, + {0106, "F"}, + {0107, "G"}, + {0110, "H"}, + {0111, "I"}, + {0112, "J"}, + {0113, "K"}, + {0114, "L"}, + {0350, "Lslash"}, + {0115, "M"}, + {0116, "N"}, + {0117, "O"}, + {0352, "OE"}, + {0351, "Oslash"}, + {0120, "P"}, + {0121, "Q"}, + {0122, "R"}, + {0123, "S"}, + {0124, "T"}, + {0125, "U"}, + {0126, "V"}, + {0127, "W"}, + {0130, "X"}, + {0131, "Y"}, + {0132, "Z"}, + {0141, "a"}, + {0302, "acute"}, + {0361, "ae"}, + {0046, "ampersand"}, + {0136, "asciicircum"}, + {0176, "asciitilde"}, + {0052, "asterisk"}, + {0100, "at"}, + {0142, "b"}, + {0134, "backslash"}, + {0174, "bar"}, + {0173, "braceleft"}, + {0175, "braceright"}, + {0133, "bracketleft"}, + {0135, "bracketright"}, + {0306, "breve"}, + {0267, "bullet"}, + {0143, "c"}, + {0317, "caron"}, + {0313, "cedilla"}, + {0242, "cent"}, + {0303, "circumflex"}, + {0072, "colon"}, + {0054, "comma"}, + {0250, "currency"}, + {0144, "d"}, + {0262, "dagger"}, + {0263, "daggerdbl"}, + {0310, "dieresis"}, + {0044, "dollar"}, + {0307, "dotaccent"}, + {0365, "dotlessi"}, + {0145, "e"}, + {0070, "eight"}, + {0274, "ellipsis"}, + {0320, "emdash"}, + {0261, "endash"}, + {0075, "equal"}, + {0041, "exclam"}, + {0241, "exclamdown"}, + {0146, "f"}, + {0256, "fi"}, + {0065, "five"}, + {0257, "fl"}, + {0246, "florin"}, + {0064, "four"}, + {0244, "fraction"}, + {0147, "g"}, + {0373, "germandbls"}, + {0301, "grave"}, + {0076, "greater"}, + {0253, "guillemotleft"}, + {0273, "guillemotright"}, + {0254, "guilsinglleft"}, + {0255, "guilsinglright"}, + {0150, "h"}, + {0315, "hungarumlaut"}, + {0055, "hyphen"}, + {0151, "i"}, + {0152, "j"}, + {0153, "k"}, + {0154, "l"}, + {0074, "less"}, + {0370, "lslash"}, + {0155, "m"}, + {0305, "macron"}, + {0156, "n"}, + {0071, "nine"}, + {0043, "numbersign"}, + {0157, "o"}, + {0372, "oe"}, + {0316, "ogonek"}, + {0061, "one"}, + {0343, "ordfeminine"}, + {0353, "ordmasculine"}, + {0371, "oslash"}, + {0160, "p"}, + {0266, "paragraph"}, + {0050, "parenleft"}, + {0051, "parenright"}, + {0045, "percent"}, + {0056, "period"}, + {0264, "periodcentered"}, + {0275, "perthousand"}, + {0053, "plus"}, + {0161, "q"}, + {0077, "question"}, + {0277, "questiondown"}, + {0042, "quotedbl"}, + {0271, "quotedblbase"}, + {0252, "quotedblleft"}, + {0272, "quotedblright"}, + {0140, "quoteleft"}, + {0047, "quoteright"}, + {0270, "quotesinglbase"}, + {0251, "quotesingle"}, + {0162, "r"}, + {0312, "ring"}, + {0163, "s"}, + {0247, "section"}, + {0073, "semicolon"}, + {0067, "seven"}, + {0066, "six"}, + {0057, "slash"}, + {0040, "space"}, + {0243, "sterling"}, + {0164, "t"}, + {0063, "three"}, + {0304, "tilde"}, + {0062, "two"}, + {0165, "u"}, + {0137, "underscore"}, + {0166, "v"}, + {0167, "w"}, + {0170, "x"}, + {0171, "y"}, + {0245, "yen"}, + {0172, "z"}, + {0060, "zero"} + }; + /** + * Singleton instance of this class. + */ + public static final StandardEncoding INSTANCE = new StandardEncoding(); + + /** + * Constructor. + */ + public StandardEncoding() + { + for (Object[] encodingEntry : STANDARD_ENCODING_TABLE) + { + addCharacterEncoding((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } +} \ No newline at end of file diff --git a/src/org/pdfbox/encoding/package.html b/fontbox/src/main/java/org/apache/fontbox/encoding/package.html similarity index 100% rename from src/org/pdfbox/encoding/package.html rename to fontbox/src/main/java/org/apache/fontbox/encoding/package.html diff --git a/fontbox/src/main/java/org/apache/fontbox/pfb/PfbParser.java b/fontbox/src/main/java/org/apache/fontbox/pfb/PfbParser.java new file mode 100644 index 00000000000..9774e8eb717 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/pfb/PfbParser.java @@ -0,0 +1,229 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.pfb; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; + +/** + * Parser for a pfb-file. + * + * @author Ben Litchfield + * @author Michael Niedermair + */ +public class PfbParser +{ + /** + * the pdf header length. + * (start-marker (1 byte), ascii-/binary-marker (1 byte), size (4 byte)) + * 3*6 == 18 + */ + private static final int PFB_HEADER_LENGTH = 18; + + /** + * the start marker. + */ + private static final int START_MARKER = 0x80; + + /** + * the ascii marker. + */ + private static final int ASCII_MARKER = 0x01; + + /** + * the binary marker. + */ + private static final int BINARY_MARKER = 0x02; + + /** + * The record types in the pfb-file. + */ + private static final int[] PFB_RECORDS = {ASCII_MARKER, BINARY_MARKER, + ASCII_MARKER}; + + /** + * buffersize. + */ + private static final int BUFFER_SIZE = 0xffff; + + /** + * the parsed pfb-data. + */ + private byte[] pfbdata; + + /** + * the lengths of the records. + */ + private int[] lengths; + + // sample (pfb-file) + // 00000000 80 01 8b 15 00 00 25 21 50 53 2d 41 64 6f 62 65 + // ......%!PS-Adobe + + + /** + * Create a new object. + * @param filename the file name + * @throws IOException if an IO-error occurs. + */ + public PfbParser(final String filename) throws IOException + { + this( new BufferedInputStream(new FileInputStream(filename),BUFFER_SIZE) ); + } + + /** + * Create a new object. + * @param in The input. + * @throws IOException if an IO-error occurs. + */ + public PfbParser(final InputStream in) throws IOException + { + byte[] pfb = readPfbInput(in); + parsePfb(pfb); + } + + /** + * Create a new object. + * @param bytes The input. + * @throws IOException if an IO-error occurs. + */ + public PfbParser(final byte[] bytes) throws IOException + { + parsePfb(bytes); + } + + /** + * Parse the pfb-array. + * @param pfb The pfb-Array + * @throws IOException in an IO-error occurs. + */ + private void parsePfb(final byte[] pfb) throws IOException + { + + ByteArrayInputStream in = new ByteArrayInputStream(pfb); + pfbdata = new byte[pfb.length - PFB_HEADER_LENGTH]; + lengths = new int[PFB_RECORDS.length]; + int pointer = 0; + for (int records = 0; records < PFB_RECORDS.length; records++) + { + if (in.read() != START_MARKER) + { + throw new IOException("Start marker missing"); + } + + if (in.read() != PFB_RECORDS[records]) + { + throw new IOException("Incorrect record type"); + } + + int size = in.read(); + size += in.read() << 8; + size += in.read() << 16; + size += in.read() << 24; + lengths[records] = size; + if (pointer >= pfbdata.length) + { + throw new EOFException("attempted to read past EOF"); + } + int got = in.read(pfbdata, pointer, size); + if (got < 0) + { + throw new EOFException(); + } + pointer += got; + } + } + + /** + * Read the pdf input. + * @param in The input. + * @return Returns the pdf-array. + * @throws IOException if an IO-error occurs. + */ + private byte[] readPfbInput(final InputStream in) throws IOException + { + // copy into an array + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] tmpbuf = new byte[BUFFER_SIZE]; + int amountRead = -1; + while ((amountRead = in.read(tmpbuf)) != -1) + { + out.write(tmpbuf, 0, amountRead); + } + return out.toByteArray(); + } + + /** + * Returns the lengths. + * @return Returns the lengths. + */ + public int[] getLengths() + { + return lengths; + } + + /** + * Returns the pfbdata. + * @return Returns the pfbdata. + */ + public byte[] getPfbdata() + { + return pfbdata; + } + + /** + * Returns the pfb data as stream. + * @return Returns the pfb data as stream. + */ + public InputStream getInputStream() + { + return new ByteArrayInputStream(pfbdata); + } + + /** + * Returns the size of the pfb-data. + * @return Returns the size of the pfb-data. + */ + public int size() + { + return pfbdata.length; + } + + /** + * Returns the first segment + * @return first segment bytes + */ + public byte[] getSegment1() + { + return Arrays.copyOfRange(pfbdata, 0, lengths[0]); + } + + /** + * Returns the second segment + * @return second segment bytes + */ + public byte[] getSegment2() + { + return Arrays.copyOfRange(pfbdata, lengths[0], lengths[0] + lengths[1]); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/pfb/package.html b/fontbox/src/main/java/org/apache/fontbox/pfb/package.html new file mode 100644 index 00000000000..9c3ddea509b --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/pfb/package.html @@ -0,0 +1,25 @@ + + + + + + + +Classes that are used to parse pfb files. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java b/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java new file mode 100644 index 00000000000..2670d9ef31e --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java @@ -0,0 +1,197 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * This class is a version of the one published at + * https://code.google.com/p/jmzreader/wiki/BufferedRandomAccessFile augmented to handle unsigned + * bytes. The original class is published under Apache 2.0 license. Fix is marked below + * + * This is an optimized version of the RandomAccessFile class as described by Nick Zhang on + * JavaWorld.com. The article can be found at + * http://www.javaworld.com/javaworld/javatips/jw-javatip26.html + * + * @author jg + */ +public class BufferedRandomAccessFile extends RandomAccessFile +{ + /** + * Uses a byte instead of a char buffer for efficiency reasons. + */ + private final byte buffer[]; + private int bufend = 0; + private int bufpos = 0; + + /** + * The position inside the actual file. + */ + private long realpos = 0; + + /** + * Buffer size. + */ + private final int BUFSIZE; + + /** + * Creates a new instance of the BufferedRandomAccessFile. + * + * @param filename The path of the file to open. + * @param mode Specifies the mode to use ("r", "rw", etc.) See the BufferedLineReader + * documentation for more information. + * @param bufsize The buffer size (in bytes) to use. + * @throws FileNotFoundException If the mode is "r" but the given string does not denote an + * existing regular file, or if the mode begins with "rw" but the given string does not denote + * an existing, writable regular file and a new regular file of that name cannot be created, or + * if some other error occurs while opening or creating the file. + */ + public BufferedRandomAccessFile(String filename, String mode, int bufsize) + throws FileNotFoundException + { + super(filename, mode); + BUFSIZE = bufsize; + buffer = new byte[BUFSIZE]; + } + + /** + * Creates a new instance of the BufferedRandomAccessFile. + * + * @param file The file to open. + * @param mode Specifies the mode to use ("r", "rw", etc.) See the BufferedLineReader + * documentation for more information. + * @param bufsize The buffer size (in bytes) to use. + * @throws FileNotFoundException If the mode is "r" but the given file path does not denote an + * existing regular file, or if the mode begins with "rw" but the given file path does not denote + * an existing, writable regular file and a new regular file of that name cannot be created, or + * if some other error occurs while opening or creating the file. + */ + public BufferedRandomAccessFile(File file, String mode, int bufsize) + throws FileNotFoundException + { + super(file, mode); + BUFSIZE = bufsize; + buffer = new byte[BUFSIZE]; + } + + /** + * {@inheritDoc} + */ + @Override + public final int read() throws IOException + { + if (bufpos >= bufend && fillBuffer() < 0) + { + return -1; + } + if (bufend == 0) + { + return -1; + } + // FIX to handle unsigned bytes + return (buffer[bufpos++] + 256) & 0xFF; + // End of fix + } + + /** + * Reads the next BUFSIZE bytes into the internal buffer. + * + * @return The total number of bytes read into the buffer, or -1 if there is no more data + * because the end of the file has been reached. + * @throws IOException If the first byte cannot be read for any reason other than end of file, + * or if the random access file has been closed, or if some other I/O error occurs. + */ + private int fillBuffer() throws IOException + { + int n = super.read(buffer, 0, BUFSIZE); + + if (n >= 0) + { + realpos += n; + bufend = n; + bufpos = 0; + } + return n; + } + + /** + * Clears the local buffer. + * + * @throws IOException If an I/O error occurs. + */ + private void invalidate() throws IOException + { + bufend = 0; + bufpos = 0; + realpos = super.getFilePointer(); + } + + /** + * {@inheritDoc} + */ + @Override + public int read(byte b[], int off, int len) throws IOException + { + int leftover = bufend - bufpos; + if (len <= leftover) + { + System.arraycopy(buffer, bufpos, b, off, len); + bufpos += len; + return len; + } + System.arraycopy(buffer, bufpos, b, off, leftover); + bufpos += leftover; + if (fillBuffer() > 0) + { + int bytesRead = read(b, off + leftover, len - leftover); + if (bytesRead > 0) + { + leftover += bytesRead; + } + } + return leftover > 0 ? leftover : -1; + } + + /** + * {@inheritDoc} + */ + @Override + public long getFilePointer() throws IOException + { + return realpos - bufend + bufpos; + } + + /** + * {@inheritDoc} + */ + @Override + public void seek(long pos) throws IOException + { + int n = (int) (realpos - pos); + if (n >= 0 && n <= bufend) + { + bufpos = bufend - n; + } + else + { + super.seek(pos); + invalidate(); + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java new file mode 100644 index 00000000000..e846788f867 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.io.IOException; +import org.apache.fontbox.cff.CFFFont; +import org.apache.fontbox.cff.CFFParser; + +/** + * PostScript font program (compact font format). + */ +public class CFFTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "CFF "; + + private CFFFont cffFont; + + CFFTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws java.io.IOException If there is an error reading the data. + */ + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + byte[] bytes = data.read((int)getLength()); + + CFFParser parser = new CFFParser(); + cffFont = parser.parse(bytes, new ByteSource(font)).get(0); + + initialized = true; + } + + /** + * Returns the CFF font, which is a compact representation of a PostScript Type 1, or CIDFont + */ + public CFFFont getFont() + { + return cffFont; + } + + /** + * Allows bytes to be re-read later by CFFParser. + */ + private static class ByteSource implements CFFParser.ByteSource + { + private final TrueTypeFont ttf; + + ByteSource(TrueTypeFont ttf) + { + this.ttf = ttf; + } + + @Override + public byte[] getBytes() throws IOException + { + return ttf.getTableBytes(ttf.getTableMap().get(CFFTable.TAG)); + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/CmapLookup.java b/fontbox/src/main/java/org/apache/fontbox/ttf/CmapLookup.java new file mode 100644 index 00000000000..953aca7f504 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/CmapLookup.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.util.List; + +/** + * An interface that abstracts the cid <-> codepoint lookup functionality of cmap. + * + * @author Aaron Madlon-Kay + */ +public interface CmapLookup +{ + + /** + * Returns the GlyphId linked with the given character code. + * + * @param codePointAt the given character code to be mapped + * @return glyphId the corresponding glyph id for the given character code + */ + int getGlyphId(int codePointAt); + + /** + * Returns all possible character codes for the given gid, or null if there is none. + * + * @param gid glyph id + * @return a list with all character codes the given gid maps to + */ + List getCharCodes(int gid); + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/CmapSubtable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/CmapSubtable.java new file mode 100644 index 00000000000..048dc3a2566 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/CmapSubtable.java @@ -0,0 +1,745 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A "cmap" subtable. + * + * @author Ben Litchfield + */ +public class CmapSubtable implements CmapLookup +{ + private static final Log LOG = LogFactory.getLog(CmapSubtable.class); + + private static final long LEAD_OFFSET = 0xD800 - (0x10000 >> 10); + private static final long SURROGATE_OFFSET = 0x10000 - (0xD800 << 10) - 0xDC00; + + private int platformId; + private int platformEncodingId; + private long subTableOffset; + private int[] glyphIdToCharacterCode; + private final Map> glyphIdToCharacterCodeMultiple = new HashMap<>(); + private Map characterCodeToGlyphId = new HashMap<>(); + + /** + * This will read the required data from the stream. + * + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + public void initData(TTFDataStream data) throws IOException + { + platformId = data.readUnsignedShort(); + platformEncodingId = data.readUnsignedShort(); + subTableOffset = data.readUnsignedInt(); + } + + /** + * This will read the required data from the stream. + * + * @param cmap the CMAP this encoding belongs to. + * @param numGlyphs number of glyphs. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + public void initSubtable(CmapTable cmap, int numGlyphs, TTFDataStream data) throws IOException + { + data.seek(cmap.getOffset() + subTableOffset); + int subtableFormat = data.readUnsignedShort(); + long length; + long version; + if (subtableFormat < 8) + { + length = data.readUnsignedShort(); + version = data.readUnsignedShort(); + } + else + { + // read an other UnsignedShort to read a Fixed32 + data.readUnsignedShort(); + length = data.readUnsignedInt(); + version = data.readUnsignedInt(); + } + + switch (subtableFormat) + { + case 0: + processSubtype0(data); + break; + case 2: + processSubtype2(data, numGlyphs); + break; + case 4: + processSubtype4(data, numGlyphs); + break; + case 6: + processSubtype6(data, numGlyphs); + break; + case 8: + processSubtype8(data, numGlyphs); + break; + case 10: + processSubtype10(data, numGlyphs); + break; + case 12: + processSubtype12(data, numGlyphs); + break; + case 13: + processSubtype13(data, numGlyphs); + break; + case 14: + processSubtype14(data, numGlyphs); + break; + default: + throw new IOException("Unknown cmap format:" + subtableFormat); + } + } + + /** + * Reads a format 8 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype8(TTFDataStream data, int numGlyphs) throws IOException + { + // --- is32 is a 65536 BITS array ( = 8192 BYTES) + int[] is32 = data.readUnsignedByteArray(8192); + long nbGroups = data.readUnsignedInt(); + + // --- nbGroups shouldn't be greater than 65536 + if (nbGroups > 65536) + { + throw new IOException("CMap ( Subtype8 ) is invalid"); + } + + glyphIdToCharacterCode = newGlyphIdToCharacterCode(numGlyphs); + characterCodeToGlyphId = new HashMap<>(numGlyphs); + // -- Read all sub header + for (long i = 0; i < nbGroups; ++i) + { + long firstCode = data.readUnsignedInt(); + long endCode = data.readUnsignedInt(); + long startGlyph = data.readUnsignedInt(); + + // -- process simple validation + if (firstCode > endCode || 0 > firstCode) + { + throw new IOException("Range invalid"); + } + + for (long j = firstCode; j <= endCode; ++j) + { + // -- Convert the Character code in decimal + if (j > Integer.MAX_VALUE) + { + throw new IOException("[Sub Format 8] Invalid Character code"); + } + + int currentCharCode; + if ((is32[(int) j / 8] & (1 << ((int) j % 8))) == 0) + { + currentCharCode = (int) j; + } + else + { + // the character code uses a 32bits format + // convert it in decimal : see http://www.unicode.org/faq//utf_bom.html#utf16-4 + long lead = LEAD_OFFSET + (j >> 10); + long trail = 0xDC00 + (j & 0x3FF); + + long codepoint = (lead << 10) + trail + SURROGATE_OFFSET; + if (codepoint > Integer.MAX_VALUE) + { + throw new IOException("[Sub Format 8] Invalid Character code"); + } + currentCharCode = (int) codepoint; + } + + long glyphIndex = startGlyph + (j - firstCode); + if (glyphIndex > numGlyphs || glyphIndex > Integer.MAX_VALUE) + { + throw new IOException("CMap contains an invalid glyph index"); + } + + glyphIdToCharacterCode[(int) glyphIndex] = currentCharCode; + characterCodeToGlyphId.put(currentCharCode, (int) glyphIndex); + } + } + } + + /** + * Reads a format 10 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype10(TTFDataStream data, int numGlyphs) throws IOException + { + long startCode = data.readUnsignedInt(); + long numChars = data.readUnsignedInt(); + if (numChars > Integer.MAX_VALUE) + { + throw new IOException("Invalid number of Characters"); + } + + if (startCode < 0 || startCode > 0x0010FFFF || (startCode + numChars) > 0x0010FFFF + || ((startCode + numChars) >= 0x0000D800 && (startCode + numChars) <= 0x0000DFFF)) + { + throw new IOException("Invalid Characters codes"); + + } + } + + /** + * Reads a format 12 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype12(TTFDataStream data, int numGlyphs) throws IOException + { + long nbGroups = data.readUnsignedInt(); + glyphIdToCharacterCode = newGlyphIdToCharacterCode(numGlyphs); + characterCodeToGlyphId = new HashMap<>(numGlyphs); + for (long i = 0; i < nbGroups; ++i) + { + long firstCode = data.readUnsignedInt(); + long endCode = data.readUnsignedInt(); + long startGlyph = data.readUnsignedInt(); + + if (firstCode < 0 || firstCode > 0x0010FFFF || + firstCode >= 0x0000D800 && firstCode <= 0x0000DFFF) + { + throw new IOException("Invalid characters codes"); + } + + if (endCode > 0 && endCode < firstCode || + endCode > 0x0010FFFF || + endCode >= 0x0000D800 && endCode <= 0x0000DFFF) + { + throw new IOException("Invalid characters codes"); + } + + for (long j = 0; j <= endCode - firstCode; ++j) + { + long glyphIndex = startGlyph + j; + if (glyphIndex >= numGlyphs) + { + LOG.warn("Format 12 cmap contains an invalid glyph index"); + break; + } + + if (firstCode + j > 0x10FFFF) + { + LOG.warn("Format 12 cmap contains character beyond UCS-4"); + } + + glyphIdToCharacterCode[(int) glyphIndex] = (int) (firstCode + j); + characterCodeToGlyphId.put((int) (firstCode + j), (int) glyphIndex); + } + } + } + + /** + * Reads a format 13 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype13(TTFDataStream data, int numGlyphs) throws IOException + { + long nbGroups = data.readUnsignedInt(); + characterCodeToGlyphId = new HashMap<>(numGlyphs); + for (long i = 0; i < nbGroups; ++i) + { + long firstCode = data.readUnsignedInt(); + long endCode = data.readUnsignedInt(); + long glyphId = data.readUnsignedInt(); + + if (glyphId > numGlyphs) + { + LOG.warn("Format 13 cmap contains an invalid glyph index"); + break; + } + + if (firstCode < 0 || firstCode > 0x0010FFFF || (firstCode >= 0x0000D800 && firstCode <= 0x0000DFFF)) + { + throw new IOException("Invalid Characters codes"); + } + + if ((endCode > 0 && endCode < firstCode) || endCode > 0x0010FFFF + || (endCode >= 0x0000D800 && endCode <= 0x0000DFFF)) + { + throw new IOException("Invalid Characters codes"); + } + + for (long j = 0; j <= endCode - firstCode; ++j) + { + if (firstCode + j > Integer.MAX_VALUE) + { + throw new IOException("Character Code greater than Integer.MAX_VALUE"); + } + + if (firstCode + j > 0x10FFFF) + { + LOG.warn("Format 13 cmap contains character beyond UCS-4"); + } + + glyphIdToCharacterCode[(int) glyphId] = (int) (firstCode + j); + characterCodeToGlyphId.put((int) (firstCode + j), (int) glyphId); + } + } + } + + /** + * Reads a format 14 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype14(TTFDataStream data, int numGlyphs) throws IOException + { + // Unicode Variation Sequences (UVS) + // see http://blogs.adobe.com/CCJKType/2013/05/opentype-cmap-table-ramblings.html + LOG.warn("Format 14 cmap table is not supported and will be ignored"); + } + + /** + * Reads a format 6 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype6(TTFDataStream data, int numGlyphs) throws IOException + { + int firstCode = data.readUnsignedShort(); + int entryCount = data.readUnsignedShort(); + // skip emtpy tables + if (entryCount == 0) + { + return; + } + characterCodeToGlyphId = new HashMap<>(numGlyphs); + int[] glyphIdArray = data.readUnsignedShortArray(entryCount); + int maxGlyphId = 0; + for (int i = 0; i < entryCount; i++) + { + maxGlyphId = Math.max(maxGlyphId, glyphIdArray[i]); + characterCodeToGlyphId.put(firstCode + i, glyphIdArray[i]); + } + buildGlyphIdToCharacterCodeLookup(maxGlyphId); + } + + /** + * Reads a format 4 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype4(TTFDataStream data, int numGlyphs) throws IOException + { + int segCountX2 = data.readUnsignedShort(); + int segCount = segCountX2 / 2; + int searchRange = data.readUnsignedShort(); + int entrySelector = data.readUnsignedShort(); + int rangeShift = data.readUnsignedShort(); + int[] endCount = data.readUnsignedShortArray(segCount); + int reservedPad = data.readUnsignedShort(); + int[] startCount = data.readUnsignedShortArray(segCount); + int[] idDelta = data.readUnsignedShortArray(segCount); + long idRangeOffsetPosition = data.getCurrentPosition(); + int[] idRangeOffset = data.readUnsignedShortArray(segCount); + + characterCodeToGlyphId = new HashMap<>(numGlyphs); + int maxGlyphId = 0; + + for (int i = 0; i < segCount; i++) + { + int start = startCount[i]; + int end = endCount[i]; + int delta = idDelta[i]; + int rangeOffset = idRangeOffset[i]; + long segmentRangeOffset = idRangeOffsetPosition + (i * 2) + rangeOffset; + if (start != 65535 && end != 65535) + { + for (int j = start; j <= end; j++) + { + if (rangeOffset == 0) + { + int glyphid = (j + delta) & 0xFFFF; + maxGlyphId = Math.max(glyphid, maxGlyphId); + characterCodeToGlyphId.put(j, glyphid); + } + else + { + long glyphOffset = segmentRangeOffset + ((j - start) * 2); + data.seek(glyphOffset); + int glyphIndex = data.readUnsignedShort(); + if (glyphIndex != 0) + { + glyphIndex = (glyphIndex + delta) & 0xFFFF; + maxGlyphId = Math.max(glyphIndex, maxGlyphId); + characterCodeToGlyphId.put(j, glyphIndex); + } + } + } + } + } + + /* + * this is the final result key=glyphId, value is character codes Create an array that contains MAX(GlyphIds) + * element, or -1 + */ + if (characterCodeToGlyphId.isEmpty()) + { + LOG.warn("cmap format 4 subtable is empty"); + return; + } + buildGlyphIdToCharacterCodeLookup(maxGlyphId); + } + + private void buildGlyphIdToCharacterCodeLookup(int maxGlyphId) + { + glyphIdToCharacterCode = newGlyphIdToCharacterCode(maxGlyphId + 1); + for (Entry entry : characterCodeToGlyphId.entrySet()) + { + if (glyphIdToCharacterCode[entry.getValue()] == -1) + { + // add new value to the array + glyphIdToCharacterCode[entry.getValue()] = entry.getKey(); + } + else + { + // there is already a mapping for the given glyphId + List mappedValues = glyphIdToCharacterCodeMultiple.get(entry.getValue()); + if (mappedValues == null) + { + mappedValues = new ArrayList<>(); + glyphIdToCharacterCodeMultiple.put(entry.getValue(), mappedValues); + mappedValues.add(glyphIdToCharacterCode[entry.getValue()]); + // mark value as multiple mapping + glyphIdToCharacterCode[entry.getValue()] = Integer.MIN_VALUE; + } + mappedValues.add(entry.getKey()); + } + } + } + + /** + * Read a format 2 subtable. + * + * @param data the data stream of the to be parsed ttf font + * @param numGlyphs number of glyphs to be read + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype2(TTFDataStream data, int numGlyphs) throws IOException + { + int[] subHeaderKeys = new int[256]; + // ---- keep the Max Index of the SubHeader array to know its length + int maxSubHeaderIndex = 0; + for (int i = 0; i < 256; i++) + { + subHeaderKeys[i] = data.readUnsignedShort(); + maxSubHeaderIndex = Math.max(maxSubHeaderIndex, subHeaderKeys[i] / 8); + } + + // ---- Read all SubHeaders to avoid useless seek on DataSource + SubHeader[] subHeaders = new SubHeader[maxSubHeaderIndex + 1]; + for (int i = 0; i <= maxSubHeaderIndex; ++i) + { + int firstCode = data.readUnsignedShort(); + int entryCount = data.readUnsignedShort(); + short idDelta = data.readSignedShort(); + int idRangeOffset = data.readUnsignedShort() - (maxSubHeaderIndex + 1 - i - 1) * 8 - 2; + subHeaders[i] = new SubHeader(firstCode, entryCount, idDelta, idRangeOffset); + } + long startGlyphIndexOffset = data.getCurrentPosition(); + glyphIdToCharacterCode = newGlyphIdToCharacterCode(numGlyphs); + characterCodeToGlyphId = new HashMap<>(numGlyphs); + for (int i = 0; i <= maxSubHeaderIndex; ++i) + { + SubHeader sh = subHeaders[i]; + int firstCode = sh.getFirstCode(); + int idRangeOffset = sh.getIdRangeOffset(); + int idDelta = sh.getIdDelta(); + int entryCount = sh.getEntryCount(); + data.seek(startGlyphIndexOffset + idRangeOffset); + for (int j = 0; j < entryCount; ++j) + { + // ---- compute the Character Code + int charCode = i; + charCode = (charCode << 8) + (firstCode + j); + + // ---- Go to the CharacterCOde position in the Sub Array + // of the glyphIndexArray + // glyphIndexArray contains Unsigned Short so add (j * 2) bytes + // at the index position + int p = data.readUnsignedShort(); + // ---- compute the glyphIndex + if (p > 0) + { + p = (p + idDelta) % 65536; + if (p < 0) + { + p += 65536; + } + } + + if (p >= numGlyphs) + { + LOG.warn("glyphId " + p + " for charcode " + charCode + " ignored, numGlyphs is " + numGlyphs); + continue; + } + + glyphIdToCharacterCode[p] = charCode; + characterCodeToGlyphId.put(charCode, p); + } + } + } + + /** + * Initialize the CMapEntry when it is a subtype 0. + * + * @param data the data stream of the to be parsed ttf font + * @throws IOException If there is an error parsing the true type font. + */ + protected void processSubtype0(TTFDataStream data) throws IOException + { + byte[] glyphMapping = data.read(256); + glyphIdToCharacterCode = newGlyphIdToCharacterCode(256); + characterCodeToGlyphId = new HashMap<>(glyphMapping.length); + for (int i = 0; i < glyphMapping.length; i++) + { + int glyphIndex = glyphMapping[i] & 0xFF; + glyphIdToCharacterCode[glyphIndex] = i; + characterCodeToGlyphId.put(i, glyphIndex); + } + } + + /** + * Workaround for the fact that glyphIdToCharacterCode doesn't distinguish between + * missing character codes and code 0. + */ + private int[] newGlyphIdToCharacterCode(int size) + { + int[] gidToCode = new int[size]; + Arrays.fill(gidToCode, -1); + return gidToCode; + } + + /** + * @return Returns the platformEncodingId. + */ + public int getPlatformEncodingId() + { + return platformEncodingId; + } + + /** + * @param platformEncodingIdValue The platformEncodingId to set. + */ + public void setPlatformEncodingId(int platformEncodingIdValue) + { + platformEncodingId = platformEncodingIdValue; + } + + /** + * @return Returns the platformId. + */ + public int getPlatformId() + { + return platformId; + } + + /** + * @param platformIdValue The platformId to set. + */ + public void setPlatformId(int platformIdValue) + { + platformId = platformIdValue; + } + + /** + * Returns the GlyphId linked with the given character code. + * + * @param characterCode the given character code to be mapped + * @return glyphId the corresponding glyph id for the given character code + */ + @Override + public int getGlyphId(int characterCode) + { + Integer glyphId = characterCodeToGlyphId.get(characterCode); + return glyphId == null ? 0 : glyphId; + } + + /** + * Returns the character code for the given GID, or null if there is none. + * + * @param gid glyph id + * @return character code + * + * @deprecated the mapping may be ambiguous, see {@link #getCharCodes(int)}. The first mapped value is returned by + * default. + */ + public Integer getCharacterCode(int gid) + { + int code = getCharCode(gid); + if (code == -1) + { + return null; + } + // ambiguous mapping + if (code == Integer.MIN_VALUE) + { + List mappedValues = glyphIdToCharacterCodeMultiple.get(gid); + if (mappedValues != null) + { + // use the first mapping + return mappedValues.get(0); + } + } + return code; + } + + private int getCharCode(int gid) + { + if (gid < 0 || gid >= glyphIdToCharacterCode.length) + { + return -1; + } + return glyphIdToCharacterCode[gid]; + } + + /** + * Returns all possible character codes for the given gid, or null if there is none. + * + * @param gid glyph id + * @return a list with all character codes the given gid maps to + * + */ + @Override + public List getCharCodes(int gid) + { + int code = getCharCode(gid); + if (code == -1) + { + return null; + } + List codes = null; + if (code == Integer.MIN_VALUE) + { + List mappedValues = glyphIdToCharacterCodeMultiple.get(gid); + if (mappedValues != null) + { + codes = new ArrayList<>(mappedValues); + // sort the list to provide a reliable order + Collections.sort(codes); + } + } + else + { + codes = new ArrayList<>(1); + codes.add(code); + } + return codes; + } + + @Override + public String toString() + { + return "{" + getPlatformId() + " " + getPlatformEncodingId() + "}"; + } + + /** + * + * Class used to manage CMap - Format 2. + * + */ + private static class SubHeader + { + private final int firstCode; + private final int entryCount; + /** + * used to compute the GlyphIndex : P = glyphIndexArray.SubArray[pos] GlyphIndex = P + idDelta % 65536. + */ + private final short idDelta; + /** + * Number of bytes to skip to reach the firstCode in the glyphIndexArray. + */ + private final int idRangeOffset; + + private SubHeader(int firstCodeValue, int entryCountValue, short idDeltaValue, int idRangeOffsetValue) + { + firstCode = firstCodeValue; + entryCount = entryCountValue; + idDelta = idDeltaValue; + idRangeOffset = idRangeOffsetValue; + } + + /** + * @return the firstCode + */ + private int getFirstCode() + { + return firstCode; + } + + /** + * @return the entryCount + */ + private int getEntryCount() + { + return entryCount; + } + + /** + * @return the idDelta + */ + private short getIdDelta() + { + return idDelta; + } + + /** + * @return the idRangeOffset + */ + private int getIdRangeOffset() + { + return idRangeOffset; + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/CmapTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/CmapTable.java new file mode 100644 index 00000000000..323196a96f1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/CmapTable.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * The "cmap" table of a true type font. + * + * @author Ben Litchfield + */ +public class CmapTable extends TTFTable +{ + /** + * A tag used to identify this table. + */ + public static final String TAG = "cmap"; + + // platform + public static final int PLATFORM_UNICODE = 0; + public static final int PLATFORM_MACINTOSH = 1; + public static final int PLATFORM_WINDOWS = 3; + + // Mac encodings + public static final int ENCODING_MAC_ROMAN = 0; + + // Windows encodings + public static final int ENCODING_WIN_SYMBOL = 0; // Unicode, non-standard character set + public static final int ENCODING_WIN_UNICODE_BMP = 1; // Unicode BMP (UCS-2) + public static final int ENCODING_WIN_SHIFT_JIS = 2; + public static final int ENCODING_WIN_BIG5 = 3; + public static final int ENCODING_WIN_PRC = 4; + public static final int ENCODING_WIN_WANSUNG = 5; + public static final int ENCODING_WIN_JOHAB = 6; + public static final int ENCODING_WIN_UNICODE_FULL = 10; // Unicode Full (UCS-4) + + // Unicode encodings + public static final int ENCODING_UNICODE_1_0 = 0; + public static final int ENCODING_UNICODE_1_1 = 1; + public static final int ENCODING_UNICODE_2_0_BMP = 3; + public static final int ENCODING_UNICODE_2_0_FULL = 4; + + private CmapSubtable[] cmaps; + + CmapTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + @SuppressWarnings({"unused", "squid:S1854", "squid:S1481"}) + int version = data.readUnsignedShort(); + int numberOfTables = data.readUnsignedShort(); + cmaps = new CmapSubtable[numberOfTables]; + for (int i = 0; i < numberOfTables; i++) + { + CmapSubtable cmap = new CmapSubtable(); + cmap.initData(data); + cmaps[i] = cmap; + } + for (int i = 0; i < numberOfTables; i++) + { + cmaps[i].initSubtable(this, ttf.getNumberOfGlyphs(), data); + } + initialized = true; + } + + /** + * @return Returns the cmaps. + */ + public CmapSubtable[] getCmaps() + { + return cmaps; + } + + /** + * @param cmapsValue The cmaps to set. + */ + public void setCmaps(CmapSubtable[] cmapsValue) + { + cmaps = cmapsValue; + } + + /** + * Returns the subtable, if any, for the given platform and encoding. + */ + public CmapSubtable getSubtable(int platformId, int platformEncodingId) + { + for (CmapSubtable cmap : cmaps) + { + if (cmap.getPlatformId() == platformId && + cmap.getPlatformEncodingId() == platformEncodingId) + { + return cmap; + } + } + return null; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/DigitalSignatureTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/DigitalSignatureTable.java new file mode 100644 index 00000000000..cac398e83d4 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/DigitalSignatureTable.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class DigitalSignatureTable extends TTFTable +{ + /** + * Tag to identify this table. + */ + public static final String TAG = "DSIG"; + + DigitalSignatureTable(TrueTypeFont font) + { + super(font); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeComp.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeComp.java new file mode 100644 index 00000000000..a4cada8cad1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeComp.java @@ -0,0 +1,318 @@ +/* + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * This class is based on code from Apache Batik a subproject of Apache XMLGraphics. see + * http://xmlgraphics.apache.org/batik/ for further details. + */ +public class GlyfCompositeComp +{ + + // Flags for composite glyphs. + + /** + * If set, the arguments are words; otherwise, they are bytes. + */ + protected static final short ARG_1_AND_2_ARE_WORDS = 0x0001; + /** + * If set, the arguments are xy values; otherwise they are points. + */ + protected static final short ARGS_ARE_XY_VALUES = 0x0002; + /** + * If set, xy values are rounded to those of the closest grid lines. + */ + protected static final short ROUND_XY_TO_GRID = 0x0004; + /** + * If set, there is a simple scale; otherwise, scale = 1.0. + */ + protected static final short WE_HAVE_A_SCALE = 0x0008; + /** + * Indicates at least one more glyph after this one. + */ + protected static final short MORE_COMPONENTS = 0x0020; + /** + * The x direction will use a different scale from the y direction. + */ + protected static final short WE_HAVE_AN_X_AND_Y_SCALE = 0x0040; + /** + * There is a 2 by2 transformation that will be used to scale the component. + */ + protected static final short WE_HAVE_A_TWO_BY_TWO = 0x0080; + /** + * Following the last component are instructions for the composite character. + */ + protected static final short WE_HAVE_INSTRUCTIONS = 0x0100; + /** + * If set, this forces the aw and lsb (and rsb) for the composite to be equal to those from this original glyph. + */ + protected static final short USE_MY_METRICS = 0x0200; + + private int firstIndex; + private int firstContour; + private final short argument1; + private final short argument2; + private final short flags; + private final int glyphIndex; + private double xscale = 1.0; + private double yscale = 1.0; + private double scale01 = 0.0; + private double scale10 = 0.0; + private int xtranslate = 0; + private int ytranslate = 0; + private int point1 = 0; + private int point2 = 0; + + /** + * Constructor. + * + * @param bais the stream to be read + * @throws IOException is thrown if something went wrong + */ + protected GlyfCompositeComp(TTFDataStream bais) throws IOException + { + flags = bais.readSignedShort(); + glyphIndex = bais.readUnsignedShort();// number of glyph in a font is uint16 + + // Get the arguments as just their raw values + if ((flags & ARG_1_AND_2_ARE_WORDS) != 0) + { + // If this is set, the arguments are 16-bit (uint16 or int16) + argument1 = bais.readSignedShort(); + argument2 = bais.readSignedShort(); + } + else + { + // otherwise, they are bytes (uint8 or int8). + argument1 = (short) bais.readSignedByte(); + argument2 = (short) bais.readSignedByte(); + } + + // Assign the arguments according to the flags + if ((flags & ARGS_ARE_XY_VALUES) != 0) + { + // If this is set, the arguments are signed xy values + xtranslate = argument1; + ytranslate = argument2; + } + else + { + // otherwise, they are unsigned point numbers. + //TODO why unused? + // https://docs.microsoft.com/en-us/typography/opentype/spec/glyf + // "In the latter case, the first point number indicates the point that is to be matched + // to the new glyph. The second number indicates the new glyph’s “matched” point. + // Once a glyph is added, its point numbers begin directly after the last glyphs + // (endpoint of first glyph + 1). + point1 = argument1; + point2 = argument2; + } + + // Get the scale values (if any) + if ((flags & WE_HAVE_A_SCALE) != 0) + { + int i = bais.readSignedShort(); + xscale = yscale = i / (double) 0x4000; + } + else if ((flags & WE_HAVE_AN_X_AND_Y_SCALE) != 0) + { + short i = bais.readSignedShort(); + xscale = i / (double) 0x4000; + i = bais.readSignedShort(); + yscale = i / (double) 0x4000; + } + else if ((flags & WE_HAVE_A_TWO_BY_TWO) != 0) + { + int i = bais.readSignedShort(); + xscale = i / (double) 0x4000; + i = bais.readSignedShort(); + scale01 = i / (double) 0x4000; + i = bais.readSignedShort(); + scale10 = i / (double) 0x4000; + i = bais.readSignedShort(); + yscale = i / (double) 0x4000; + } + } + + /** + * Sets the first index. + * + * @param idx the first index + */ + public void setFirstIndex(int idx) + { + firstIndex = idx; + } + + /** + * Returns the first index. + * + * @return the first index. + */ + public int getFirstIndex() + { + return firstIndex; + } + + /** + * Sets the index for the first contour. + * + * @param idx the index of the first contour + */ + public void setFirstContour(int idx) + { + firstContour = idx; + } + + /** + * Returns the index of the first contour. + * + * @return the index of the first contour. + */ + public int getFirstContour() + { + return firstContour; + } + + /** + * Returns argument 1. + * + * @return argument 1. + */ + public short getArgument1() + { + return argument1; + } + + /** + * Returns argument 2. + * + * @return argument 2. + */ + public short getArgument2() + { + return argument2; + } + + /** + * Returns the flags of the glyph. + * + * @return the flags. + */ + public short getFlags() + { + return flags; + } + + /** + * Returns the index of the first contour. + * + * @return index of the first contour. + */ + public int getGlyphIndex() + { + return glyphIndex; + } + + /** + * Returns the scale-01 value. + * + * @return the scale-01 value. + */ + public double getScale01() + { + return scale01; + } + + /** + * Returns the scale-10 value. + * + * @return the scale-10 value. + */ + public double getScale10() + { + return scale10; + } + + /** + * Returns the x-scaling value. + * + * @return the x-scaling value. + */ + public double getXScale() + { + return xscale; + } + + /** + * Returns the y-scaling value. + * + * @return the y-scaling value. + */ + public double getYScale() + { + return yscale; + } + + /** + * Returns the x-translation value. + * + * @return the x-translation value. + */ + public int getXTranslate() + { + return xtranslate; + } + + /** + * Returns the y-translation value. + * + * @return the y-translation value. + */ + public int getYTranslate() + { + return ytranslate; + } + + /** + * Transforms an x-coordinate of a point for this component. + * + * @param x The x-coordinate of the point to transform + * @param y The y-coordinate of the point to transform + * @return The transformed x-coordinate + */ + public int scaleX(int x, int y) + { + return Math.round((float) (x * xscale + y * scale10)); + } + + /** + * Transforms a y-coordinate of a point for this component. + * + * @param x The x-coordinate of the point to transform + * @param y The y-coordinate of the point to transform + * @return The transformed y-coordinate + */ + public int scaleY(int x, int y) + { + return Math.round((float) (x * scale01 + y * yscale)); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java new file mode 100644 index 00000000000..fcd103a5aae --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java @@ -0,0 +1,299 @@ +/* + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Glyph description for composite glyphs. Composite glyphs are made up of one + * or more simple glyphs, usually with some sort of transformation applied to + * each. + * + * This class is based on code from Apache Batik a subproject of Apache + * XMLGraphics. see http://xmlgraphics.apache.org/batik/ for further details. + */ +public class GlyfCompositeDescript extends GlyfDescript +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(GlyfCompositeDescript.class); + + private final List components = new ArrayList<>(); + private final Map descriptions = new HashMap<>(); + private GlyphTable glyphTable = null; + private boolean beingResolved = false; + private boolean resolved = false; + private int pointCount = -1; + private int contourCount = -1; + + /** + * Constructor. + * + * @param bais the stream to be read + * @param glyphTable the Glyphtable containing all glyphs + * @throws IOException is thrown if something went wrong + */ + public GlyfCompositeDescript(TTFDataStream bais, GlyphTable glyphTable) throws IOException + { + super((short) -1, bais); + + this.glyphTable = glyphTable; + + // Get all of the composite components + GlyfCompositeComp comp; + do + { + comp = new GlyfCompositeComp(bais); + components.add(comp); + } + while ((comp.getFlags() & GlyfCompositeComp.MORE_COMPONENTS) != 0); + + // Are there hinting instructions to read? + if ((comp.getFlags() & GlyfCompositeComp.WE_HAVE_INSTRUCTIONS) != 0) + { + readInstructions(bais, (bais.readUnsignedShort())); + } + initDescriptions(); + } + + /** + * {@inheritDoc} + */ + @Override + public void resolve() + { + if (resolved) + { + return; + } + if (beingResolved) + { + LOG.error("Circular reference in GlyfCompositeDesc"); + return; + } + beingResolved = true; + + int firstIndex = 0; + int firstContour = 0; + + for (GlyfCompositeComp comp : components) + { + comp.setFirstIndex(firstIndex); + comp.setFirstContour(firstContour); + + GlyphDescription desc = descriptions.get(comp.getGlyphIndex()); + if (desc != null) + { + desc.resolve(); + firstIndex += desc.getPointCount(); + firstContour += desc.getContourCount(); + } + } + resolved = true; + beingResolved = false; + } + + /** + * {@inheritDoc} + */ + @Override + public int getEndPtOfContours(int i) + { + GlyfCompositeComp c = getCompositeCompEndPt(i); + if (c != null) + { + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + return gd.getEndPtOfContours(i - c.getFirstContour()) + c.getFirstIndex(); + } + return 0; + } + + /** + * {@inheritDoc} + */ + @Override + public byte getFlags(int i) + { + GlyfCompositeComp c = getCompositeComp(i); + if (c != null) + { + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + return gd.getFlags(i - c.getFirstIndex()); + } + return 0; + } + + /** + * {@inheritDoc} + */ + @Override + public short getXCoordinate(int i) + { + GlyfCompositeComp c = getCompositeComp(i); + if (c != null) + { + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + int n = i - c.getFirstIndex(); + int x = gd.getXCoordinate(n); + int y = gd.getYCoordinate(n); + short x1 = (short) c.scaleX(x, y); + x1 += c.getXTranslate(); + return x1; + } + return 0; + } + + /** + * {@inheritDoc} + */ + @Override + public short getYCoordinate(int i) + { + GlyfCompositeComp c = getCompositeComp(i); + if (c != null) + { + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + int n = i - c.getFirstIndex(); + int x = gd.getXCoordinate(n); + int y = gd.getYCoordinate(n); + short y1 = (short) c.scaleY(x, y); + y1 += c.getYTranslate(); + return y1; + } + return 0; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isComposite() + { + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public int getPointCount() + { + if (!resolved) + { + LOG.error("getPointCount called on unresolved GlyfCompositeDescript"); + } + if (pointCount < 0) + { + GlyfCompositeComp c = components.get(components.size() - 1); + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + if (gd == null) + { + LOG.error("GlyphDescription for index " + c.getGlyphIndex() + " is null, returning 0"); + pointCount = 0; + } + else + { + pointCount = c.getFirstIndex() + gd.getPointCount(); + } + } + return pointCount; + } + + /** + * {@inheritDoc} + */ + @Override + public int getContourCount() + { + if (!resolved) + { + LOG.error("getContourCount called on unresolved GlyfCompositeDescript"); + } + if (contourCount < 0) + { + GlyfCompositeComp c = components.get(components.size() - 1); + contourCount = c.getFirstContour() + descriptions.get(c.getGlyphIndex()).getContourCount(); + } + return contourCount; + } + + /** + * Get number of components. + * + * @return the number of components + */ + public int getComponentCount() + { + return components.size(); + } + + private GlyfCompositeComp getCompositeComp(int i) + { + for (GlyfCompositeComp c : components) + { + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + if (c.getFirstIndex() <= i && gd != null && i < (c.getFirstIndex() + gd.getPointCount())) + { + return c; + } + } + return null; + } + + private GlyfCompositeComp getCompositeCompEndPt(int i) + { + for (GlyfCompositeComp c : components) + { + GlyphDescription gd = descriptions.get(c.getGlyphIndex()); + if (c.getFirstContour() <= i && gd != null && i < (c.getFirstContour() + gd.getContourCount())) + { + return c; + } + } + return null; + } + + private void initDescriptions() + { + for (GlyfCompositeComp component : components) + { + try + { + int index = component.getGlyphIndex(); + GlyphData glyph = glyphTable.getGlyph(index); + if (glyph != null) + { + descriptions.put(index, glyph.getDescription()); + } + } + catch (IOException e) + { + LOG.error(e); + } + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfDescript.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfDescript.java new file mode 100644 index 00000000000..c577516567d --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfDescript.java @@ -0,0 +1,120 @@ +/* + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * This class is based on code from Apache Batik a subproject of Apache XMLGraphics. + * see http://xmlgraphics.apache.org/batik/ for further details. + * + */ +public abstract class GlyfDescript implements GlyphDescription +{ + + // Flags describing a coordinate of a glyph. + /** + * if set, the point is on the curve. + */ + public static final byte ON_CURVE = 0x01; + /** + * if set, the x-coordinate is 1 byte long. + */ + public static final byte X_SHORT_VECTOR = 0x02; + /** + * if set, the y-coordinate is 1 byte long. + */ + public static final byte Y_SHORT_VECTOR = 0x04; + /** + * if set, the next byte specifies the number of additional + * times this set of flags is to be repeated. + */ + public static final byte REPEAT = 0x08; + /** + * This flag as two meanings, depending on how the + * x-short vector flags is set. + * If the x-short vector is set, this bit describes the sign + * of the value, with 1 equaling positive and 0 positive. + * If the x-short vector is not set and this bit is also not + * set, the current x-coordinate is a signed 16-bit delta vector. + */ + public static final byte X_DUAL = 0x10; + /** + * This flag as two meanings, depending on how the + * y-short vector flags is set. + * If the y-short vector is set, this bit describes the sign + * of the value, with 1 equaling positive and 0 positive. + * If the y-short vector is not set and this bit is also not + * set, the current y-coordinate is a signed 16-bit delta vector. + */ + public static final byte Y_DUAL = 0x20; + + private int[] instructions; + private final int contourCount; + + /** + * Constructor. + * + * @param numberOfContours the number of contours + * @param bais the stream to be read + * @throws IOException is thrown if something went wrong + */ + protected GlyfDescript(short numberOfContours, TTFDataStream bais) throws IOException + { + contourCount = numberOfContours; + } + + /** + * {@inheritDoc} + */ + @Override + public void resolve() + { + } + + /** + * {@inheritDoc} + */ + @Override + public int getContourCount() + { + return contourCount; + } + + /** + * Returns the hinting instructions. + * @return an array containing the hinting instructions. + */ + public int[] getInstructions() + { + return instructions; + } + + /** + * Read the hinting instructions. + * @param bais the stream to be read + * @param count the number of instructions to be read + * @throws IOException is thrown if something went wrong + */ + protected void readInstructions(TTFDataStream bais, int count) throws IOException + { + instructions = bais.readUnsignedByteArray(count); + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfSimpleDescript.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfSimpleDescript.java new file mode 100644 index 00000000000..e7963a83c76 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfSimpleDescript.java @@ -0,0 +1,216 @@ +/* + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class is based on code from Apache Batik a subproject of Apache XMLGraphics. see + * http://xmlgraphics.apache.org/batik/ for further details. + */ +public class GlyfSimpleDescript extends GlyfDescript +{ + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(GlyfSimpleDescript.class); + + private int[] endPtsOfContours; + private byte[] flags; + private short[] xCoordinates; + private short[] yCoordinates; + private final int pointCount; + + /** + * Constructor. + * + * @param numberOfContours number of contours + * @param bais the stream to be read + * @param x0 the initial X-position + * @throws IOException is thrown if something went wrong + */ + public GlyfSimpleDescript(short numberOfContours, TTFDataStream bais, short x0) throws IOException + { + super(numberOfContours, bais); + + /* + * https://developer.apple.com/fonts/TTRefMan/RM06/Chap6glyf.html + * "If a glyph has zero contours, it need not have any glyph data." set the pointCount to zero to initialize + * attributes and avoid nullpointer but maybe there shouldn't have GlyphDescript in the GlyphData? + */ + if (numberOfContours == 0) + { + pointCount = 0; + return; + } + + // Simple glyph description + endPtsOfContours = bais.readUnsignedShortArray(numberOfContours); + + int lastEndPt = endPtsOfContours[numberOfContours - 1]; + if (numberOfContours == 1 && lastEndPt == 65535) + { + // PDFBOX-2939: assume an empty glyph + pointCount = 0; + return; + } + // The last end point index reveals the total number of points + pointCount = lastEndPt + 1; + + flags = new byte[pointCount]; + xCoordinates = new short[pointCount]; + yCoordinates = new short[pointCount]; + + int instructionCount = bais.readUnsignedShort(); + readInstructions(bais, instructionCount); + readFlags(pointCount, bais); + readCoords(pointCount, bais, x0); + } + + /** + * {@inheritDoc} + */ + @Override + public int getEndPtOfContours(int i) + { + return endPtsOfContours[i]; + } + + /** + * {@inheritDoc} + */ + @Override + public byte getFlags(int i) + { + return flags[i]; + } + + /** + * {@inheritDoc} + */ + @Override + public short getXCoordinate(int i) + { + return xCoordinates[i]; + } + + /** + * {@inheritDoc} + */ + @Override + public short getYCoordinate(int i) + { + return yCoordinates[i]; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isComposite() + { + return false; + } + + /** + * {@inheritDoc} + */ + @Override + public int getPointCount() + { + return pointCount; + } + + /** + * The table is stored as relative values, but we'll store them as absolutes. + */ + private void readCoords(int count, TTFDataStream bais, short x0) throws IOException + { + short x = x0; + short y = 0; + for (int i = 0; i < count; i++) + { + if ((flags[i] & X_DUAL) != 0) + { + if ((flags[i] & X_SHORT_VECTOR) != 0) + { + x += (short) bais.readUnsignedByte(); + } + } + else + { + if ((flags[i] & X_SHORT_VECTOR) != 0) + { + x += (short) -((short) bais.readUnsignedByte()); + } + else + { + x += bais.readSignedShort(); + } + } + xCoordinates[i] = x; + } + + for (int i = 0; i < count; i++) + { + if ((flags[i] & Y_DUAL) != 0) + { + if ((flags[i] & Y_SHORT_VECTOR) != 0) + { + y += (short) bais.readUnsignedByte(); + } + } + else + { + if ((flags[i] & Y_SHORT_VECTOR) != 0) + { + y += (short) -((short) bais.readUnsignedByte()); + } + else + { + y += bais.readSignedShort(); + } + } + yCoordinates[i] = y; + } + } + + /** + * The flags are run-length encoded. + */ + private void readFlags(int flagCount, TTFDataStream bais) throws IOException + { + for (int index = 0; index < flagCount; index++) + { + flags[index] = (byte) bais.readUnsignedByte(); + if ((flags[index] & REPEAT) != 0) + { + int repeats = bais.readUnsignedByte(); + for (int i = 1; i <= repeats && index + i < flags.length; i++) + { + flags[index + i] = flags[index]; + } + index += repeats; + } + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphData.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphData.java new file mode 100644 index 00000000000..7e1c89de1da --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphData.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.awt.geom.GeneralPath; +import java.io.IOException; + +import org.apache.fontbox.util.BoundingBox; + +/** + * A glyph data record in the glyf table. + * + * @author Ben Litchfield + */ +public class GlyphData +{ + private short xMin; + private short yMin; + private short xMax; + private short yMax; + private BoundingBox boundingBox = null; + private short numberOfContours; + private GlyfDescript glyphDescription = null; + + /** + * This will read the required data from the stream. + * + * @param glyphTable The glyph table this glyph belongs to. + * @param data The stream to read the data from. + * @param leftSideBearing The left side bearing for this glyph. + * @throws IOException If there is an error reading the data. + */ + public void initData( GlyphTable glyphTable, TTFDataStream data, int leftSideBearing ) throws IOException + { + numberOfContours = data.readSignedShort(); + xMin = data.readSignedShort(); + yMin = data.readSignedShort(); + xMax = data.readSignedShort(); + yMax = data.readSignedShort(); + boundingBox = new BoundingBox(xMin, yMin, xMax, yMax); + + if (numberOfContours >= 0) + { + // create a simple glyph + short x0 = (short) (leftSideBearing - xMin); + glyphDescription = new GlyfSimpleDescript(numberOfContours, data, x0); + } + else + { + // create a composite glyph + glyphDescription = new GlyfCompositeDescript(data, glyphTable); + } + } + + /** + * @return Returns the boundingBox. + */ + public BoundingBox getBoundingBox() + { + return boundingBox; + } + + /** + * @param boundingBoxValue The boundingBox to set. + */ + public void setBoundingBox(BoundingBox boundingBoxValue) + { + this.boundingBox = boundingBoxValue; + } + + /** + * @return Returns the numberOfContours. + */ + public short getNumberOfContours() + { + return numberOfContours; + } + + /** + * @param numberOfContoursValue The numberOfContours to set. + */ + public void setNumberOfContours(short numberOfContoursValue) + { + this.numberOfContours = numberOfContoursValue; + } + + /** + * Returns the description of the glyph. + * @return the glyph description + */ + public GlyphDescription getDescription() + { + return glyphDescription; + } + + /** + * Returns the path of the glyph. + * @return the path + */ + public GeneralPath getPath() + { + return new GlyphRenderer(glyphDescription).getPath(); + } + + /** + * Returns the xMax value. + * @return the XMax value + */ + public short getXMaximum() + { + return xMax; + } + + /** + * Returns the xMin value. + * @return the xMin value + */ + public short getXMinimum() + { + return xMin; + } + + /** + * Returns the yMax value. + * @return the yMax value + */ + public short getYMaximum() + { + return yMax; + } + + /** + * Returns the yMin value. + * @return the yMin value + */ + public short getYMinimum() + { + return yMin; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphDescription.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphDescription.java new file mode 100644 index 00000000000..cb4c00cf0d0 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphDescription.java @@ -0,0 +1,85 @@ +/* + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + */ +package org.apache.fontbox.ttf; + +/** + * Specifies access to glyph description classes, simple and composite. + * + * This class is based on code from Apache Batik a subproject of Apache XMLGraphics. + * see http://xmlgraphics.apache.org/batik/ for further details. + * + */ +public interface GlyphDescription +{ + /** + * Returns the index of the ending point of the given contour. + * + * @param i the number of the contour + * @return the index of the ending point of the given contour + */ + int getEndPtOfContours(int i); + + /** + * Returns the flags of the given point. To decode these bit flags, use the static elements of + * {@link GlyfDescript}. See also "Outline flags" in + * The + * 'glyf' table in the TrueType Reference Manual. + * + * @param i the given point + * @return the flags value for the given point + */ + byte getFlags(int i); + + /** + * Returns the x coordinate of the given point. + * @param i the given point + * @return the x coordinate value for the given point + */ + short getXCoordinate(int i); + + /** + * Returns the y coordinate of the given point. + * @param i the given point + * @return the y coordinate value for the given point + */ + short getYCoordinate(int i); + + /** + * Returns whether this point is a composite or not. + * @return true if this point is a composite + */ + boolean isComposite(); + + /** + * Returns the number of points. + * @return the number of points + */ + int getPointCount(); + + /** + * Returns the number of contours. + * @return the number of contours + */ + int getContourCount(); + + /** + * Resolve all parts of an composite glyph. + */ + void resolve(); +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphRenderer.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphRenderer.java new file mode 100644 index 00000000000..c9d5b1dcdaf --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphRenderer.java @@ -0,0 +1,222 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.awt.geom.GeneralPath; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +/** + * This class provides a glyph to GeneralPath conversion for true type fonts. + * Based on code from Apache Batik, a subproject of Apache XMLGraphics. + * + * @see + * http://xmlgraphics.apache.org/batik + * + * Contour rendering ported from PDF.js, viewed on 14.2.2015, rev 2e97c0d + * + * @see + * pdf.js/src/core/font_renderer.js + * + */ +class GlyphRenderer +{ + private static final Log LOG = LogFactory.getLog(GlyphRenderer.class); + + private GlyphDescription glyphDescription; + + GlyphRenderer(GlyphDescription glyphDescription) + { + this.glyphDescription = glyphDescription; + } + + /** + * Returns the path of the glyph. + * @return the path + */ + public GeneralPath getPath() + { + Point[] points = describe(glyphDescription); + return calculatePath(points); + } + + /** + * Set the points of a glyph from the GlyphDescription. + */ + private Point[] describe(GlyphDescription gd) + { + int endPtIndex = 0; + int endPtOfContourIndex = -1; + Point[] points = new Point[gd.getPointCount()]; + for (int i = 0; i < gd.getPointCount(); i++) + { + if (endPtOfContourIndex == -1) + { + endPtOfContourIndex = gd.getEndPtOfContours(endPtIndex); + } + boolean endPt = endPtOfContourIndex == i; + if (endPt) + { + endPtIndex++; + endPtOfContourIndex = -1; + } + points[i] = new Point(gd.getXCoordinate(i), gd.getYCoordinate(i), + (gd.getFlags(i) & GlyfDescript.ON_CURVE) != 0, endPt); + } + return points; + } + + /** + * Use the given points to calculate a GeneralPath. + * + * @param points the points to be used to generate the GeneralPath + * + * @return the calculated GeneralPath + */ + private GeneralPath calculatePath(Point[] points) + { + GeneralPath path = new GeneralPath(); + int start = 0; + for (int p = 0, len = points.length; p < len; ++p) + { + if (points[p].endOfContour) + { + Point firstPoint = points[start]; + Point lastPoint = points[p]; + List contour = new ArrayList<>(); + for (int q = start; q <= p; ++q) + { + contour.add(points[q]); + } + if (points[start].onCurve) + { + // using start point at the contour end + contour.add(firstPoint); + } + else if (points[p].onCurve) + { + // first is off-curve point, trying to use one from the end + contour.add(0, lastPoint); + } + else + { + // start and end are off-curve points, creating implicit one + Point pmid = midValue(firstPoint, lastPoint); + contour.add(0, pmid); + contour.add(pmid); + } + moveTo(path, contour.get(0)); + for (int j = 1, clen = contour.size(); j < clen; j++) + { + Point pnow = contour.get(j); + if (pnow.onCurve) + { + lineTo(path, pnow); + } + else if (contour.get(j + 1).onCurve) + { + quadTo(path, pnow, contour.get(j + 1)); + ++j; + } + else + { + quadTo(path, pnow, midValue(pnow, contour.get(j + 1))); + } + } + path.closePath(); + start = p + 1; + } + } + return path; + } + + private void moveTo(GeneralPath path, Point point) + { + path.moveTo(point.x, point.y); + if (LOG.isDebugEnabled()) + { + LOG.trace("moveTo: " + String.format(Locale.US, "%d,%d", point.x, point.y)); + } + } + + private void lineTo(GeneralPath path, Point point) + { + path.lineTo(point.x, point.y); + if (LOG.isDebugEnabled()) + { + LOG.trace("lineTo: " + String.format(Locale.US, "%d,%d", point.x, point.y)); + } + } + + private void quadTo(GeneralPath path, Point ctrlPoint, Point point) + { + path.quadTo(ctrlPoint.x, ctrlPoint.y, point.x, point.y); + if (LOG.isDebugEnabled()) + { + LOG.trace("quadTo: " + String.format(Locale.US, "%d,%d %d,%d", ctrlPoint.x, ctrlPoint.y, + point.x, point.y)); + } + } + + private int midValue(int a, int b) + { + return a + (b - a) / 2; + } + + // this creates an onCurve point that is between point1 and point2 + private Point midValue(Point point1, Point point2) + { + return new Point(midValue(point1.x, point2.x), midValue(point1.y, point2.y)); + } + + /** + * This class represents one point of a glyph. + */ + private static class Point + { + private int x = 0; + private int y = 0; + private boolean onCurve = true; + private boolean endOfContour = false; + + Point(int xValue, int yValue, boolean onCurveValue, boolean endOfContourValue) + { + x = xValue; + y = yValue; + onCurve = onCurveValue; + endOfContour = endOfContourValue; + } + + // this constructs an on-curve, non-endofcountour point + Point(int xValue, int yValue) + { + this(xValue, yValue, true, false); + } + + @Override + public String toString() + { + return String.format(Locale.US, "Point(%d,%d,%s,%s)", x, y, onCurve ? "onCurve" : "", + endOfContour ? "endOfContour" : ""); + } + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java new file mode 100644 index 00000000000..a1493092a69 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphSubstitutionTable.java @@ -0,0 +1,694 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.ttf.gsub.GlyphSubstitutionDataExtractor; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.ttf.table.common.CoverageTable; +import org.apache.fontbox.ttf.table.common.CoverageTableFormat1; +import org.apache.fontbox.ttf.table.common.CoverageTableFormat2; +import org.apache.fontbox.ttf.table.common.FeatureListTable; +import org.apache.fontbox.ttf.table.common.FeatureRecord; +import org.apache.fontbox.ttf.table.common.FeatureTable; +import org.apache.fontbox.ttf.table.common.LangSysRecord; +import org.apache.fontbox.ttf.table.common.LangSysTable; +import org.apache.fontbox.ttf.table.common.LookupListTable; +import org.apache.fontbox.ttf.table.common.LookupSubTable; +import org.apache.fontbox.ttf.table.common.LookupTable; +import org.apache.fontbox.ttf.table.common.RangeRecord; +import org.apache.fontbox.ttf.table.common.ScriptRecord; +import org.apache.fontbox.ttf.table.common.ScriptTable; +import org.apache.fontbox.ttf.table.gsub.LigatureSetTable; +import org.apache.fontbox.ttf.table.gsub.LigatureTable; +import org.apache.fontbox.ttf.table.gsub.LookupTypeLigatureSubstitutionSubstFormat1; +import org.apache.fontbox.ttf.table.gsub.LookupTypeSingleSubstFormat1; +import org.apache.fontbox.ttf.table.gsub.LookupTypeSingleSubstFormat2; + +/** + * A glyph substitution 'GSUB' table in a TrueType or OpenType font. + * + * @author Aaron Madlon-Kay + */ +public class GlyphSubstitutionTable extends TTFTable +{ + private static final Log LOG = LogFactory.getLog(GlyphSubstitutionTable.class); + + public static final String TAG = "GSUB"; + + private Map scriptList; + // featureList and lookupList are not maps because we need to index into them + private FeatureListTable featureListTable; + private LookupListTable lookupListTable; + + private final Map lookupCache = new HashMap<>(); + private final Map reverseLookup = new HashMap<>(); + + private String lastUsedSupportedScript; + + private GsubData gsubData; + + GlyphSubstitutionTable(TrueTypeFont font) + { + super(font); + } + + @Override + @SuppressWarnings({"squid:S1854"}) + void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + long start = data.getCurrentPosition(); + @SuppressWarnings({"unused"}) + int majorVersion = data.readUnsignedShort(); + int minorVersion = data.readUnsignedShort(); + int scriptListOffset = data.readUnsignedShort(); + int featureListOffset = data.readUnsignedShort(); + int lookupListOffset = data.readUnsignedShort(); + @SuppressWarnings({"unused"}) + long featureVariationsOffset = -1L; + if (minorVersion == 1L) + { + featureVariationsOffset = data.readUnsignedInt(); + } + + scriptList = readScriptList(data, start + scriptListOffset); + featureListTable = readFeatureList(data, start + featureListOffset); + lookupListTable = readLookupList(data, start + lookupListOffset); + + GlyphSubstitutionDataExtractor glyphSubstitutionDataExtractor = new GlyphSubstitutionDataExtractor(); + + gsubData = glyphSubstitutionDataExtractor + .getGsubData(scriptList, featureListTable, lookupListTable); + } + + private Map readScriptList(TTFDataStream data, long offset) + throws IOException + { + data.seek(offset); + int scriptCount = data.readUnsignedShort(); + ScriptTable[] scriptTables= new ScriptTable[scriptCount]; + int[] scriptOffsets = new int[scriptCount]; + String[] scriptTags = new String[scriptCount]; + for (int i = 0; i < scriptCount; i++) + { + scriptTags[i] = data.readString(4); + scriptOffsets[i] = data.readUnsignedShort(); + } + for (int i = 0; i < scriptCount; i++) + { + scriptTables[i] = readScriptTable(data, offset + scriptOffsets[i]); + } + Map resultScriptList = new LinkedHashMap<>(scriptCount); + for (int i = 0; i < scriptCount; i++) + { + ScriptRecord scriptRecord = new ScriptRecord(scriptTags[i], scriptTables[i]); + resultScriptList.put(scriptRecord.getScriptTag(), scriptRecord.getScriptTable()); + } + return Collections.unmodifiableMap(resultScriptList); + } + + private ScriptTable readScriptTable(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int defaultLangSys = data.readUnsignedShort(); + int langSysCount = data.readUnsignedShort(); + LangSysRecord[] langSysRecords = new LangSysRecord[langSysCount]; + String[] langSysTags = new String[langSysCount]; + int[] langSysOffsets = new int[langSysCount]; + for (int i = 0; i < langSysCount; i++) + { + langSysTags[i] = data.readString(4); + if (i > 0 && langSysTags[i].compareTo(langSysTags[i-1]) <= 0) + { + // PDFBOX-4489: catch corrupt file + // https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#slTbl_sRec + LOG.error("LangSysRecords not alphabetically sorted by LangSys tag: " + + langSysTags[i] + " <= " + langSysTags[i - 1]); + return new ScriptTable(null, new LinkedHashMap()); + } + langSysOffsets[i] = data.readUnsignedShort(); + } + + LangSysTable defaultLangSysTable = null; + + if (defaultLangSys != 0) + { + defaultLangSysTable = readLangSysTable(data, offset + defaultLangSys); + } + for (int i = 0; i < langSysCount; i++) + { + LangSysTable langSysTable = readLangSysTable(data, offset + langSysOffsets[i]); + langSysRecords[i] = new LangSysRecord(langSysTags[i], langSysTable); + } + Map langSysTables = new LinkedHashMap<>(langSysCount); + for (LangSysRecord langSysRecord : langSysRecords) + { + langSysTables.put(langSysRecord.getLangSysTag(), + langSysRecord.getLangSysTable()); + } + return new ScriptTable(defaultLangSysTable, Collections.unmodifiableMap(langSysTables)); + } + + private LangSysTable readLangSysTable(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int lookupOrder = data.readUnsignedShort(); + int requiredFeatureIndex = data.readUnsignedShort(); + int featureIndexCount = data.readUnsignedShort(); + int[] featureIndices = new int[featureIndexCount]; + for (int i = 0; i < featureIndexCount; i++) + { + featureIndices[i] = data.readUnsignedShort(); + } + return new LangSysTable(lookupOrder, requiredFeatureIndex, featureIndexCount, + featureIndices); + } + + private FeatureListTable readFeatureList(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int featureCount = data.readUnsignedShort(); + FeatureRecord[] featureRecords = new FeatureRecord[featureCount]; + int[] featureOffsets = new int[featureCount]; + String[] featureTags = new String[featureCount]; + for (int i = 0; i < featureCount; i++) + { + featureTags[i] = data.readString(4); + featureOffsets[i] = data.readUnsignedShort(); + } + for (int i = 0; i < featureCount; i++) + { + FeatureTable featureTable = readFeatureTable(data, offset + featureOffsets[i]); + featureRecords[i] = new FeatureRecord(featureTags[i], featureTable); + } + return new FeatureListTable(featureCount, featureRecords); + } + + private FeatureTable readFeatureTable(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int featureParams = data.readUnsignedShort(); + int lookupIndexCount = data.readUnsignedShort(); + int[] lookupListIndices = new int[lookupIndexCount]; + for (int i = 0; i < lookupIndexCount; i++) + { + lookupListIndices[i] = data.readUnsignedShort(); + } + return new FeatureTable(featureParams, lookupIndexCount, lookupListIndices); + } + + private LookupListTable readLookupList(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int lookupCount = data.readUnsignedShort(); + int[] lookups = new int[lookupCount]; + for (int i = 0; i < lookupCount; i++) + { + lookups[i] = data.readUnsignedShort(); + } + LookupTable[] lookupTables = new LookupTable[lookupCount]; + for (int i = 0; i < lookupCount; i++) + { + lookupTables[i] = readLookupTable(data, offset + lookups[i]); + } + return new LookupListTable(lookupCount, lookupTables); + } + + private LookupTable readLookupTable(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int lookupType = data.readUnsignedShort(); + int lookupFlag = data.readUnsignedShort(); + int subTableCount = data.readUnsignedShort(); + int[] subTableOffets = new int[subTableCount]; + for (int i = 0; i < subTableCount; i++) + { + subTableOffets[i] = data.readUnsignedShort(); + } + + int markFilteringSet; + if ((lookupFlag & 0x0010) != 0) + { + markFilteringSet = data.readUnsignedShort(); + } + else + { + markFilteringSet = 0; + } + LookupSubTable[] subTables = new LookupSubTable[subTableCount]; + switch (lookupType) + { + case 1: // Single + for (int i = 0; i < subTableCount; i++) + { + subTables[i] = readLookupSubTable(data, offset + subTableOffets[i]); + } + break; + case 4: // Ligature Substitution Subtable + for (int i = 0; i < subTableCount; i++) + { + subTables[i] = readLigatureSubstitutionSubtable(data, offset + subTableOffets[i]); + } + break; + default: + // Other lookup types are not supported + LOG.debug("Type " + lookupType + + " GSUB lookup table is not supported and will be ignored"); + } + return new LookupTable(lookupType, lookupFlag, markFilteringSet, subTables); + } + + private LookupSubTable readLookupSubTable(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int substFormat = data.readUnsignedShort(); + switch (substFormat) + { + case 1: + { + int coverageOffset = data.readUnsignedShort(); + short deltaGlyphID = data.readSignedShort(); + CoverageTable coverageTable = readCoverageTable(data, offset + coverageOffset); + return new LookupTypeSingleSubstFormat1(substFormat, coverageTable, deltaGlyphID); + } + case 2: + { + int coverageOffset = data.readUnsignedShort(); + int glyphCount = data.readUnsignedShort(); + int[] substituteGlyphIDs = new int[glyphCount]; + for (int i = 0; i < glyphCount; i++) + { + substituteGlyphIDs[i] = data.readUnsignedShort(); + } + CoverageTable coverageTable = readCoverageTable(data, offset + coverageOffset); + return new LookupTypeSingleSubstFormat2(substFormat, coverageTable, substituteGlyphIDs); + } + default: + throw new IllegalArgumentException("Unknown substFormat: " + substFormat); + } + } + + private LookupSubTable readLigatureSubstitutionSubtable(TTFDataStream data, long offset) + throws IOException + { + data.seek(offset); + int substFormat = data.readUnsignedShort(); + + if (substFormat != 1) + { + throw new IllegalArgumentException( + "The expected SubstFormat for LigatureSubstitutionTable is 1"); + } + + int coverage = data.readUnsignedShort(); + int ligSetCount = data.readUnsignedShort(); + + int[] ligatureOffsets = new int[ligSetCount]; + + for (int i = 0; i < ligSetCount; i++) + { + ligatureOffsets[i] = data.readUnsignedShort(); + } + + CoverageTable coverageTable = readCoverageTable(data, offset + coverage); + + if (ligSetCount != coverageTable.getSize()) + { + throw new IllegalArgumentException( + "According to the OpenTypeFont specifications, the coverage count should be equal to the no. of LigatureSetTables"); + } + + LigatureSetTable[] ligatureSetTables = new LigatureSetTable[ligSetCount]; + + for (int i = 0; i < ligSetCount; i++) + { + + int coverageGlyphId = coverageTable.getGlyphId(i); + + ligatureSetTables[i] = readLigatureSetTable(data, + offset + ligatureOffsets[i], coverageGlyphId); + } + + return new LookupTypeLigatureSubstitutionSubstFormat1(substFormat, coverageTable, + ligatureSetTables); + } + + private LigatureSetTable readLigatureSetTable(TTFDataStream data, long ligatureSetTableLocation, + int coverageGlyphId) throws IOException + { + data.seek(ligatureSetTableLocation); + + int ligatureCount = data.readUnsignedShort(); + LOG.debug("ligatureCount=" + ligatureCount); + + int[] ligatureOffsets = new int[ligatureCount]; + LigatureTable[] ligatureTables = new LigatureTable[ligatureCount]; + + for (int i = 0; i < ligatureOffsets.length; i++) + { + ligatureOffsets[i] = data.readUnsignedShort(); + } + + for (int i = 0; i < ligatureOffsets.length; i++) + { + int ligatureOffset = ligatureOffsets[i]; + ligatureTables[i] = readLigatureTable(data, + ligatureSetTableLocation + ligatureOffset, coverageGlyphId); + } + + return new LigatureSetTable(ligatureCount, ligatureTables); + } + + private LigatureTable readLigatureTable(TTFDataStream data, long ligatureTableLocation, + int coverageGlyphId) throws IOException + { + data.seek(ligatureTableLocation); + + int ligatureGlyph = data.readUnsignedShort(); + + int componentCount = data.readUnsignedShort(); + + int[] componentGlyphIDs = new int[componentCount]; + + componentGlyphIDs[0] = coverageGlyphId; + + for (int i = 1; i <= componentCount - 1; i++) + { + componentGlyphIDs[i] = data.readUnsignedShort(); + } + + return new LigatureTable(ligatureGlyph, componentCount, componentGlyphIDs); + + } + + private CoverageTable readCoverageTable(TTFDataStream data, long offset) throws IOException + { + data.seek(offset); + int coverageFormat = data.readUnsignedShort(); + switch (coverageFormat) + { + case 1: + { + int glyphCount = data.readUnsignedShort(); + int[] glyphArray = new int[glyphCount]; + for (int i = 0; i < glyphCount; i++) + { + glyphArray[i] = data.readUnsignedShort(); + } + return new CoverageTableFormat1(coverageFormat, glyphArray); + } + case 2: + { + int rangeCount = data.readUnsignedShort(); + RangeRecord[] rangeRecords = new RangeRecord[rangeCount]; + + + for (int i = 0; i < rangeCount; i++) + { + rangeRecords[i] = readRangeRecord(data); + } + + return new CoverageTableFormat2(coverageFormat, rangeRecords); + } + default: + // Should not happen (the spec indicates only format 1 and format 2) + throw new IllegalArgumentException("Unknown coverage format: " + coverageFormat); + } + } + + /** + * Choose from one of the supplied OpenType script tags, depending on what the font supports and potentially on + * context. + * + * @param tags + * @return The best OpenType script tag + */ + private String selectScriptTag(String[] tags) + { + if (tags.length == 1) + { + String tag = tags[0]; + if (OpenTypeScript.INHERITED.equals(tag) + || (OpenTypeScript.TAG_DEFAULT.equals(tag) && !scriptList.containsKey(tag))) + { + // We don't know what script this should be. + if (lastUsedSupportedScript == null) + { + // We have no past context and (currently) no way to get future context so we guess. + lastUsedSupportedScript = scriptList.keySet().iterator().next(); + } + // else use past context + + return lastUsedSupportedScript; + } + } + for (String tag : tags) + { + if (scriptList.containsKey(tag)) + { + // Use the first recognized tag. We assume a single font only recognizes one version ("ver. 2") + // of a single script, or if it recognizes more than one that it prefers the latest one. + lastUsedSupportedScript = tag; + return lastUsedSupportedScript; + } + } + return tags[0]; + } + + private Collection getLangSysTables(String scriptTag) + { + Collection result = Collections.emptyList(); + ScriptTable scriptTable = scriptList.get(scriptTag); + if (scriptTable != null) + { + if (scriptTable.getDefaultLangSysTable() == null) + { + result = scriptTable.getLangSysTables().values(); + } + else + { + result = new ArrayList<>(scriptTable.getLangSysTables().values()); + result.add(scriptTable.getDefaultLangSysTable()); + } + } + return result; + } + + /** + * Get a list of {@code FeatureRecord}s from a collection of {@code LangSysTable}s. Optionally + * filter the returned features by supplying a list of allowed feature tags in + * {@code enabledFeatures}. + * + * Note that features listed as required ({@code LangSysTable#requiredFeatureIndex}) will be + * included even if not explicitly enabled. + * + * @param langSysTables The {@code LangSysTable}s indicating {@code FeatureRecord}s to search + * for + * @param enabledFeatures An optional whitelist of feature tags ({@code null} to allow all) + * @return The indicated {@code FeatureRecord}s + */ + private List getFeatureRecords(Collection langSysTables, + final List enabledFeatures) + { + if (langSysTables.isEmpty()) + { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + for (LangSysTable langSysTable : langSysTables) + { + int required = langSysTable.getRequiredFeatureIndex(); + if (required != 0xffff) // if no required features = 0xFFFF + { + result.add(featureListTable.getFeatureRecords()[required]); + } + for (int featureIndex : langSysTable.getFeatureIndices()) + { + if (enabledFeatures == null + || enabledFeatures.contains( + featureListTable.getFeatureRecords()[featureIndex].getFeatureTag())) + { + result.add(featureListTable.getFeatureRecords()[featureIndex]); + } + } + } + + // 'vrt2' supersedes 'vert' and they should not be used together + // https://www.microsoft.com/typography/otspec/features_uz.htm + if (containsFeature(result, "vrt2")) + { + removeFeature(result, "vert"); + } + + if (enabledFeatures != null && result.size() > 1) + { + Collections.sort(result, new Comparator() + { + @Override + public int compare(FeatureRecord o1, FeatureRecord o2) + { + return Integer.compare(enabledFeatures.indexOf(o1.getFeatureTag()), + enabledFeatures.indexOf(o2.getFeatureTag())); + } + }); + } + + return result; + } + + private boolean containsFeature(List featureRecords, String featureTag) + { + for (FeatureRecord featureRecord : featureRecords) + { + if (featureRecord.getFeatureTag().equals(featureTag)) + { + return true; + } + } + return false; + } + + private void removeFeature(List featureRecords, String featureTag) + { + Iterator iter = featureRecords.iterator(); + while (iter.hasNext()) + { + if (iter.next().getFeatureTag().equals(featureTag)) + { + iter.remove(); + } + } + } + + private int applyFeature(FeatureRecord featureRecord, int gid) + { + int lookupResult = gid; + for (int lookupListIndex : featureRecord.getFeatureTable().getLookupListIndices()) + { + LookupTable lookupTable = lookupListTable.getLookups()[lookupListIndex]; + if (lookupTable.getLookupType() != 1) + { + LOG.debug("Skipping GSUB feature '" + featureRecord.getFeatureTag() + + "' because it requires unsupported lookup table type " + + lookupTable.getLookupType()); + continue; + } + lookupResult = doLookup(lookupTable, lookupResult); + } + return lookupResult; + } + + private int doLookup(LookupTable lookupTable, int gid) + { + for (LookupSubTable lookupSubtable : lookupTable.getSubTables()) + { + int coverageIndex = lookupSubtable.getCoverageTable().getCoverageIndex(gid); + if (coverageIndex >= 0) + { + return lookupSubtable.doSubstitution(gid, coverageIndex); + } + } + return gid; + } + + /** + * Apply glyph substitutions to the supplied gid. The applicable substitutions are determined by + * the {@code scriptTags} which indicate the language of the gid, and by the + * {@code enabledFeatures} which acts as a whitelist. + * + * To ensure that a single gid isn't mapped to multiple substitutions, subsequent invocations + * with the same gid will return the same result as the first, regardless of script or enabled + * features. + * + * @param gid GID + * @param scriptTags Script tags applicable to the gid (see {@link OpenTypeScript}) + * @param enabledFeatures Whitelist of features to apply + */ + public int getSubstitution(int gid, String[] scriptTags, List enabledFeatures) + { + if (gid == -1) + { + return -1; + } + Integer cached = lookupCache.get(gid); + if (cached != null) + { + // Because script detection for indeterminate scripts (COMMON, INHERIT, etc.) depends on context, + // it is possible to return a different substitution for the same input. However we don't want that, + // as we need a one-to-one mapping. + return cached; + } + String scriptTag = selectScriptTag(scriptTags); + Collection langSysTables = getLangSysTables(scriptTag); + List featureRecords = getFeatureRecords(langSysTables, enabledFeatures); + int sgid = gid; + for (FeatureRecord featureRecord : featureRecords) + { + sgid = applyFeature(featureRecord, sgid); + } + lookupCache.put(gid, sgid); + reverseLookup.put(sgid, gid); + return sgid; + } + + /** + * For a substitute-gid (obtained from {@link #getSubstitution(int, String[], List)}), retrieve + * the original gid. + * + * Only gids previously substituted by this instance can be un-substituted. If you are trying to + * unsubstitute before you substitute, something is wrong. + * + * @param sgid Substitute GID + */ + public int getUnsubstitution(int sgid) + { + Integer gid = reverseLookup.get(sgid); + if (gid == null) + { + LOG.warn("Trying to un-substitute a never-before-seen gid: " + sgid); + return sgid; + } + return gid; + } + + public GsubData getGsubData() + { + return gsubData; + } + + private RangeRecord readRangeRecord(TTFDataStream data) throws IOException + { + int startGlyphID = data.readUnsignedShort(); + int endGlyphID = data.readUnsignedShort(); + int startCoverageIndex = data.readUnsignedShort(); + return new RangeRecord(startGlyphID, endGlyphID, startCoverageIndex); + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java new file mode 100644 index 00000000000..3833407d187 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/GlyphTable.java @@ -0,0 +1,210 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class GlyphTable extends TTFTable +{ + /** + * Tag to identify this table. + */ + public static final String TAG = "glyf"; + + private GlyphData[] glyphs; + + // lazy table reading + private TTFDataStream data; + private IndexToLocationTable loca; + private int numGlyphs; + + private int cached = 0; + + /** + * Don't even bother to cache huge fonts. + */ + private static final int MAX_CACHE_SIZE = 5000; + + /** + * Don't cache more glyphs than this. + */ + private static final int MAX_CACHED_GLYPHS = 100; + + GlyphTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + loca = ttf.getIndexToLocation(); + numGlyphs = ttf.getNumberOfGlyphs(); + + if (numGlyphs < MAX_CACHE_SIZE) + { + // don't cache the huge fonts to save memory + glyphs = new GlyphData[numGlyphs]; + } + + // we don't actually read the complete table here because it can contain tens of thousands of glyphs + this.data = data; + initialized = true; + } + + /** + * Returns all glyphs. This method can be very slow. + * + * @throws IOException If there is an error reading the data. + */ + public GlyphData[] getGlyphs() throws IOException + { + // PDFBOX-4219: synchronize on data because it is accessed by several threads + // when PDFBox is accessing a standard 14 font for the first time + synchronized (data) + { + // the glyph offsets + long[] offsets = loca.getOffsets(); + + // the end of the glyph table + // should not be 0, but sometimes is, see PDFBOX-2044 + // structure of this table: see + // https://developer.apple.com/fonts/TTRefMan/RM06/Chap6loca.html + long endOfGlyphs = offsets[numGlyphs]; + long offset = getOffset(); + if (glyphs == null) + { + glyphs = new GlyphData[numGlyphs]; + } + + for (int gid = 0; gid < numGlyphs; gid++) + { + // end of glyphs reached? + if (endOfGlyphs != 0 && endOfGlyphs == offsets[gid]) + { + break; + } + // the current glyph isn't defined + // if the next offset is equal or smaller to the current offset + if (offsets[gid + 1] <= offsets[gid]) + { + continue; + } + if (glyphs[gid] != null) + { + // already cached + continue; + } + + data.seek(offset + offsets[gid]); + + if (glyphs[gid] == null) + { + ++cached; + } + glyphs[gid] = getGlyphData(gid); + } + initialized = true; + return glyphs; + } + } + + /** + * @param glyphsValue The glyphs to set. + */ + public void setGlyphs(GlyphData[] glyphsValue) + { + glyphs = glyphsValue; + } + + /** + * Returns the data for the glyph with the given GID. + * + * @param gid GID + * @throws IOException if the font cannot be read + */ + public GlyphData getGlyph(int gid) throws IOException + { + if (gid < 0 || gid >= numGlyphs) + { + return null; + } + + if (glyphs != null && glyphs[gid] != null) + { + return glyphs[gid]; + } + + // PDFBOX-4219: synchronize on data because it is accessed by several threads + // when PDFBox is accessing a standard 14 font for the first time + synchronized (data) + { + // read a single glyph + long[] offsets = loca.getOffsets(); + + if (offsets[gid] == offsets[gid + 1]) + { + // no outline + return null; + } + + // save + long currentPosition = data.getCurrentPosition(); + + data.seek(getOffset() + offsets[gid]); + + GlyphData glyph = getGlyphData(gid); + + // restore + data.seek(currentPosition); + + if (glyphs != null && glyphs[gid] == null && cached < MAX_CACHED_GLYPHS) + { + glyphs[gid] = glyph; + ++cached; + } + + return glyph; + } + } + + private GlyphData getGlyphData(int gid) throws IOException + { + GlyphData glyph = new GlyphData(); + HorizontalMetricsTable hmt = font.getHorizontalMetrics(); + int leftSideBearing = hmt == null ? 0 : hmt.getLeftSideBearing(gid); + glyph.initData(this, data, leftSideBearing); + // resolve composite glyph + if (glyph.getDescription().isComposite()) + { + glyph.getDescription().resolve(); + } + return glyph; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/HeaderTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/HeaderTable.java new file mode 100644 index 00000000000..a9ba6c9d483 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/HeaderTable.java @@ -0,0 +1,334 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.util.Calendar; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class HeaderTable extends TTFTable +{ + /** + * Tag to identify this table. + */ + public static final String TAG = "head"; + + /** + * Bold macStyle flag. + */ + public static final int MAC_STYLE_BOLD = 1; + + /** + * Italic macStyle flag. + */ + public static final int MAC_STYLE_ITALIC = 2; + + private float version; + private float fontRevision; + private long checkSumAdjustment; + private long magicNumber; + private int flags; + private int unitsPerEm; + private Calendar created; + private Calendar modified; + private short xMin; + private short yMin; + private short xMax; + private short yMax; + private int macStyle; + private int lowestRecPPEM; + private short fontDirectionHint; + private short indexToLocFormat; + private short glyphDataFormat; + + HeaderTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + version = data.read32Fixed(); + fontRevision = data.read32Fixed(); + checkSumAdjustment = data.readUnsignedInt(); + magicNumber = data.readUnsignedInt(); + flags = data.readUnsignedShort(); + unitsPerEm = data.readUnsignedShort(); + created = data.readInternationalDate(); + modified = data.readInternationalDate(); + xMin = data.readSignedShort(); + yMin = data.readSignedShort(); + xMax = data.readSignedShort(); + yMax = data.readSignedShort(); + macStyle = data.readUnsignedShort(); + lowestRecPPEM = data.readUnsignedShort(); + fontDirectionHint = data.readSignedShort(); + indexToLocFormat = data.readSignedShort(); + glyphDataFormat = data.readSignedShort(); + initialized = true; + } + /** + * @return Returns the checkSumAdjustment. + */ + public long getCheckSumAdjustment() + { + return checkSumAdjustment; + } + /** + * @param checkSumAdjustmentValue The checkSumAdjustment to set. + */ + public void setCheckSumAdjustment(long checkSumAdjustmentValue) + { + this.checkSumAdjustment = checkSumAdjustmentValue; + } + /** + * @return Returns the created. + */ + public Calendar getCreated() + { + return created; + } + /** + * @param createdValue The created to set. + */ + public void setCreated(Calendar createdValue) + { + this.created = createdValue; + } + /** + * @return Returns the flags. + */ + public int getFlags() + { + return flags; + } + /** + * @param flagsValue The flags to set. + */ + public void setFlags(int flagsValue) + { + this.flags = flagsValue; + } + /** + * @return Returns the fontDirectionHint. + */ + public short getFontDirectionHint() + { + return fontDirectionHint; + } + /** + * @param fontDirectionHintValue The fontDirectionHint to set. + */ + public void setFontDirectionHint(short fontDirectionHintValue) + { + this.fontDirectionHint = fontDirectionHintValue; + } + /** + * @return Returns the fontRevision. + */ + public float getFontRevision() + { + return fontRevision; + } + /** + * @param fontRevisionValue The fontRevision to set. + */ + public void setFontRevision(float fontRevisionValue) + { + this.fontRevision = fontRevisionValue; + } + /** + * @return Returns the glyphDataFormat. + */ + public short getGlyphDataFormat() + { + return glyphDataFormat; + } + /** + * @param glyphDataFormatValue The glyphDataFormat to set. + */ + public void setGlyphDataFormat(short glyphDataFormatValue) + { + this.glyphDataFormat = glyphDataFormatValue; + } + /** + * @return Returns the indexToLocFormat. + */ + public short getIndexToLocFormat() + { + return indexToLocFormat; + } + /** + * @param indexToLocFormatValue The indexToLocFormat to set. + */ + public void setIndexToLocFormat(short indexToLocFormatValue) + { + this.indexToLocFormat = indexToLocFormatValue; + } + /** + * @return Returns the lowestRecPPEM. + */ + public int getLowestRecPPEM() + { + return lowestRecPPEM; + } + /** + * @param lowestRecPPEMValue The lowestRecPPEM to set. + */ + public void setLowestRecPPEM(int lowestRecPPEMValue) + { + this.lowestRecPPEM = lowestRecPPEMValue; + } + /** + * @return Returns the macStyle. + */ + public int getMacStyle() + { + return macStyle; + } + /** + * @param macStyleValue The macStyle to set. + */ + public void setMacStyle(int macStyleValue) + { + this.macStyle = macStyleValue; + } + /** + * @return Returns the magicNumber. + */ + public long getMagicNumber() + { + return magicNumber; + } + /** + * @param magicNumberValue The magicNumber to set. + */ + public void setMagicNumber(long magicNumberValue) + { + this.magicNumber = magicNumberValue; + } + /** + * @return Returns the modified. + */ + public Calendar getModified() + { + return modified; + } + /** + * @param modifiedValue The modified to set. + */ + public void setModified(Calendar modifiedValue) + { + this.modified = modifiedValue; + } + /** + * @return Returns the unitsPerEm. + */ + public int getUnitsPerEm() + { + return unitsPerEm; + } + /** + * @param unitsPerEmValue The unitsPerEm to set. + */ + public void setUnitsPerEm(int unitsPerEmValue) + { + this.unitsPerEm = unitsPerEmValue; + } + /** + * @return Returns the version. + */ + public float getVersion() + { + return version; + } + /** + * @param versionValue The version to set. + */ + public void setVersion(float versionValue) + { + this.version = versionValue; + } + /** + * @return Returns the xMax. + */ + public short getXMax() + { + return xMax; + } + /** + * @param maxValue The xMax to set. + */ + public void setXMax(short maxValue) + { + xMax = maxValue; + } + /** + * @return Returns the xMin. + */ + public short getXMin() + { + return xMin; + } + /** + * @param minValue The xMin to set. + */ + public void setXMin(short minValue) + { + xMin = minValue; + } + /** + * @return Returns the yMax. + */ + public short getYMax() + { + return yMax; + } + /** + * @param maxValue The yMax to set. + */ + public void setYMax(short maxValue) + { + yMax = maxValue; + } + /** + * @return Returns the yMin. + */ + public short getYMin() + { + return yMin; + } + /** + * @param minValue The yMin to set. + */ + public void setYMin(short minValue) + { + yMin = minValue; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalHeaderTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalHeaderTable.java new file mode 100644 index 00000000000..7aac4ed5302 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalHeaderTable.java @@ -0,0 +1,323 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class HorizontalHeaderTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "hhea"; + + private float version; + private short ascender; + private short descender; + private short lineGap; + private int advanceWidthMax; + private short minLeftSideBearing; + private short minRightSideBearing; + private short xMaxExtent; + private short caretSlopeRise; + private short caretSlopeRun; + private short reserved1; + private short reserved2; + private short reserved3; + private short reserved4; + private short reserved5; + private short metricDataFormat; + private int numberOfHMetrics; + + HorizontalHeaderTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + version = data.read32Fixed(); + ascender = data.readSignedShort(); + descender = data.readSignedShort(); + lineGap = data.readSignedShort(); + advanceWidthMax = data.readUnsignedShort(); + minLeftSideBearing = data.readSignedShort(); + minRightSideBearing = data.readSignedShort(); + xMaxExtent = data.readSignedShort(); + caretSlopeRise = data.readSignedShort(); + caretSlopeRun = data.readSignedShort(); + reserved1 = data.readSignedShort(); + reserved2 = data.readSignedShort(); + reserved3 = data.readSignedShort(); + reserved4 = data.readSignedShort(); + reserved5 = data.readSignedShort(); + metricDataFormat = data.readSignedShort(); + numberOfHMetrics = data.readUnsignedShort(); + initialized = true; + } + + /** + * @return Returns the advanceWidthMax. + */ + public int getAdvanceWidthMax() + { + return advanceWidthMax; + } + /** + * @param advanceWidthMaxValue The advanceWidthMax to set. + */ + public void setAdvanceWidthMax(int advanceWidthMaxValue) + { + this.advanceWidthMax = advanceWidthMaxValue; + } + /** + * @return Returns the ascender. + */ + public short getAscender() + { + return ascender; + } + /** + * @param ascenderValue The ascender to set. + */ + public void setAscender(short ascenderValue) + { + this.ascender = ascenderValue; + } + /** + * @return Returns the caretSlopeRise. + */ + public short getCaretSlopeRise() + { + return caretSlopeRise; + } + /** + * @param caretSlopeRiseValue The caretSlopeRise to set. + */ + public void setCaretSlopeRise(short caretSlopeRiseValue) + { + this.caretSlopeRise = caretSlopeRiseValue; + } + /** + * @return Returns the caretSlopeRun. + */ + public short getCaretSlopeRun() + { + return caretSlopeRun; + } + /** + * @param caretSlopeRunValue The caretSlopeRun to set. + */ + public void setCaretSlopeRun(short caretSlopeRunValue) + { + this.caretSlopeRun = caretSlopeRunValue; + } + /** + * @return Returns the descender. + */ + public short getDescender() + { + return descender; + } + /** + * @param descenderValue The descender to set. + */ + public void setDescender(short descenderValue) + { + this.descender = descenderValue; + } + /** + * @return Returns the lineGap. + */ + public short getLineGap() + { + return lineGap; + } + /** + * @param lineGapValue The lineGap to set. + */ + public void setLineGap(short lineGapValue) + { + this.lineGap = lineGapValue; + } + /** + * @return Returns the metricDataFormat. + */ + public short getMetricDataFormat() + { + return metricDataFormat; + } + /** + * @param metricDataFormatValue The metricDataFormat to set. + */ + public void setMetricDataFormat(short metricDataFormatValue) + { + this.metricDataFormat = metricDataFormatValue; + } + /** + * @return Returns the minLeftSideBearing. + */ + public short getMinLeftSideBearing() + { + return minLeftSideBearing; + } + /** + * @param minLeftSideBearingValue The minLeftSideBearing to set. + */ + public void setMinLeftSideBearing(short minLeftSideBearingValue) + { + this.minLeftSideBearing = minLeftSideBearingValue; + } + /** + * @return Returns the minRightSideBearing. + */ + public short getMinRightSideBearing() + { + return minRightSideBearing; + } + /** + * @param minRightSideBearingValue The minRightSideBearing to set. + */ + public void setMinRightSideBearing(short minRightSideBearingValue) + { + this.minRightSideBearing = minRightSideBearingValue; + } + /** + * @return Returns the numberOfHMetrics. + */ + public int getNumberOfHMetrics() + { + return numberOfHMetrics; + } + /** + * @param numberOfHMetricsValue The numberOfHMetrics to set. + */ + public void setNumberOfHMetrics(int numberOfHMetricsValue) + { + this.numberOfHMetrics = numberOfHMetricsValue; + } + /** + * @return Returns the reserved1. + */ + public short getReserved1() + { + return reserved1; + } + /** + * @param reserved1Value The reserved1 to set. + */ + public void setReserved1(short reserved1Value) + { + this.reserved1 = reserved1Value; + } + /** + * @return Returns the reserved2. + */ + public short getReserved2() + { + return reserved2; + } + /** + * @param reserved2Value The reserved2 to set. + */ + public void setReserved2(short reserved2Value) + { + this.reserved2 = reserved2Value; + } + /** + * @return Returns the reserved3. + */ + public short getReserved3() + { + return reserved3; + } + /** + * @param reserved3Value The reserved3 to set. + */ + public void setReserved3(short reserved3Value) + { + this.reserved3 = reserved3Value; + } + /** + * @return Returns the reserved4. + */ + public short getReserved4() + { + return reserved4; + } + /** + * @param reserved4Value The reserved4 to set. + */ + public void setReserved4(short reserved4Value) + { + this.reserved4 = reserved4Value; + } + /** + * @return Returns the reserved5. + */ + public short getReserved5() + { + return reserved5; + } + /** + * @param reserved5Value The reserved5 to set. + */ + public void setReserved5(short reserved5Value) + { + this.reserved5 = reserved5Value; + } + /** + * @return Returns the version. + */ + public float getVersion() + { + return version; + } + /** + * @param versionValue The version to set. + */ + public void setVersion(float versionValue) + { + this.version = versionValue; + } + /** + * @return Returns the xMaxExtent. + */ + public short getXMaxExtent() + { + return xMaxExtent; + } + /** + * @param maxExtentValue The xMaxExtent to set. + */ + public void setXMaxExtent(short maxExtentValue) + { + xMaxExtent = maxExtentValue; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java new file mode 100644 index 00000000000..d950c85e285 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class HorizontalMetricsTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "hmtx"; + + private int[] advanceWidth; + private short[] leftSideBearing; + private short[] nonHorizontalLeftSideBearing; + private int numHMetrics; + + HorizontalMetricsTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + HorizontalHeaderTable hHeader = ttf.getHorizontalHeader(); + numHMetrics = hHeader.getNumberOfHMetrics(); + int numGlyphs = ttf.getNumberOfGlyphs(); + + int bytesRead = 0; + advanceWidth = new int[ numHMetrics ]; + leftSideBearing = new short[ numHMetrics ]; + for( int i=0; i= 0) + { + r = g; + break; + } + } + kerning[i] = getKerning(l, r); + } + } + else + { + LOG.warn("No kerning subtable data available due to an unsupported kerning subtable version"); + } + return kerning; + } + + /** + * Obtain kerning adjustment for glyph pair {L,R}. + * + * @param l left member of glyph pair + * @param r right member of glyph pair + * @return a (possibly zero) kerning adjustment + */ + public int getKerning(int l, int r) + { + if (pairs == null) + { + LOG.warn("No kerning subtable data available due to an unsupported kerning subtable version"); + return 0; + } + return pairs.getKerning(l, r); + } + + private void readSubtable0(TTFDataStream data) throws IOException + { + int version = data.readUnsignedShort(); + if (version != 0) + { + LOG.info("Unsupported kerning sub-table version: " + version); + return; + } + int length = data.readUnsignedShort(); + if (length < 6) + { + throw new IOException("Kerning sub-table too short, got " + length + + " bytes, expect 6 or more."); + } + int coverage = data.readUnsignedShort(); + if (isBitsSet(coverage, COVERAGE_HORIZONTAL, COVERAGE_HORIZONTAL_SHIFT)) + { + this.horizontal = true; + } + if (isBitsSet(coverage, COVERAGE_MINIMUMS, COVERAGE_MINIMUMS_SHIFT)) + { + this.minimums = true; + } + if (isBitsSet(coverage, COVERAGE_CROSS_STREAM, COVERAGE_CROSS_STREAM_SHIFT)) + { + this.crossStream = true; + } + int format = getBits(coverage, COVERAGE_FORMAT, COVERAGE_FORMAT_SHIFT); + if (format == 0) + { + readSubtable0Format0(data); + } + else if (format == 2) + { + readSubtable0Format2(data); + } + else + { + LOG.debug("Skipped kerning subtable due to an unsupported kerning subtable version: " + format); + } + } + + private void readSubtable0Format0(TTFDataStream data) throws IOException + { + pairs = new PairData0Format0(); + pairs.read(data); + } + + private void readSubtable0Format2(TTFDataStream data) throws IOException + { + LOG.info("Kerning subtable format 2 not yet supported."); + } + + private void readSubtable1(TTFDataStream data) throws IOException + { + LOG.info("Kerning subtable format 1 not yet supported."); + } + + private static boolean isBitsSet(int bits, int mask, int shift) + { + return getBits(bits, mask, shift) != 0; + } + + private static int getBits(int bits, int mask, int shift) + { + return (bits & mask) >> shift; + } + + private interface PairData + { + void read(TTFDataStream data) throws IOException; + + int getKerning(int l, int r); + } + + private static class PairData0Format0 implements Comparator, PairData + { + private int searchRange; + private int[][] pairs; + + @Override + public void read(TTFDataStream data) throws IOException + { + int numPairs = data.readUnsignedShort(); + searchRange = data.readUnsignedShort()/6; + int entrySelector = data.readUnsignedShort(); + int rangeShift = data.readUnsignedShort(); + pairs = new int[numPairs][3]; + for (int i = 0; i < numPairs; ++i) + { + int left = data.readUnsignedShort(); + int right = data.readUnsignedShort(); + int value = data.readSignedShort(); + pairs[i][0] = left; + pairs[i][1] = right; + pairs[i][2] = value; + } + } + + @Override + public int getKerning(int l, int r) + { + int[] key = new int[] { l, r, 0 }; + int index = Arrays.binarySearch(pairs, key, this); + if (index >= 0) + { + return pairs[index][2]; + } + return 0; + } + + @Override + public int compare(int[] p1, int[] p2) + { + assert p1 != null; + assert p1.length >= 2; + assert p2 != null; + assert p2.length >= 2; + int cmp1 = Integer.compare(p1[0], p2[0]); + if (cmp1 != 0) + { + return cmp1; + } + return Integer.compare(p1[1], p2[1]); + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/KerningTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/KerningTable.java new file mode 100644 index 00000000000..5664e2ad7ec --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/KerningTable.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A 'kern' table in a true type font. + * + * @author Glenn Adams + */ +public class KerningTable extends TTFTable +{ + + private static final Log LOG = LogFactory.getLog(KerningTable.class); + + /** + * Tag to identify this table. + */ + public static final String TAG = "kern"; + + private KerningSubtable[] subtables; + + KerningTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + int version = data.readUnsignedShort(); + if (version != 0) + { + version = (version << 16) | data.readUnsignedShort(); + } + int numSubtables = 0; + if (version == 0) + { + numSubtables = data.readUnsignedShort(); + } + else if (version == 1) + { + numSubtables = (int) data.readUnsignedInt(); + } + else + { + LOG.debug("Skipped kerning table due to an unsupported kerning table version: " + version); + } + if (numSubtables > 0) + { + subtables = new KerningSubtable[numSubtables]; + for (int i = 0; i < numSubtables; ++i) + { + KerningSubtable subtable = new KerningSubtable(); + subtable.read(data, version); + subtables[i] = subtable; + } + } + initialized = true; + } + + /** + * Obtain first subtable that supports non-cross-stream horizontal kerning. + * + * @return first matching subtable or null if none found + */ + public KerningSubtable getHorizontalKerningSubtable() + { + return getHorizontalKerningSubtable(false); + } + + /** + * Obtain first subtable that supports horizontal kerning with specificed cross stream. + * + * @param cross true if requesting cross stream horizontal kerning + * @return first matching subtable or null if none found + */ + public KerningSubtable getHorizontalKerningSubtable(boolean cross) + { + if (subtables != null) + { + for (KerningSubtable s : subtables) + { + if (s.isHorizontalKerning(cross)) + { + return s; + } + } + } + return null; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java new file mode 100644 index 00000000000..7a8e976ee16 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/MaximumProfileTable.java @@ -0,0 +1,291 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class MaximumProfileTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "maxp"; + + private float version; + private int numGlyphs; + private int maxPoints; + private int maxContours; + private int maxCompositePoints; + private int maxCompositeContours; + private int maxZones; + private int maxTwilightPoints; + private int maxStorage; + private int maxFunctionDefs; + private int maxInstructionDefs; + private int maxStackElements; + private int maxSizeOfInstructions; + private int maxComponentElements; + private int maxComponentDepth; + + MaximumProfileTable(TrueTypeFont font) + { + super(font); + } + + /** + * @return Returns the maxComponentDepth. + */ + public int getMaxComponentDepth() + { + return maxComponentDepth; + } + /** + * @param maxComponentDepthValue The maxComponentDepth to set. + */ + public void setMaxComponentDepth(int maxComponentDepthValue) + { + this.maxComponentDepth = maxComponentDepthValue; + } + /** + * @return Returns the maxComponentElements. + */ + public int getMaxComponentElements() + { + return maxComponentElements; + } + /** + * @param maxComponentElementsValue The maxComponentElements to set. + */ + public void setMaxComponentElements(int maxComponentElementsValue) + { + this.maxComponentElements = maxComponentElementsValue; + } + /** + * @return Returns the maxCompositeContours. + */ + public int getMaxCompositeContours() + { + return maxCompositeContours; + } + /** + * @param maxCompositeContoursValue The maxCompositeContours to set. + */ + public void setMaxCompositeContours(int maxCompositeContoursValue) + { + this.maxCompositeContours = maxCompositeContoursValue; + } + /** + * @return Returns the maxCompositePoints. + */ + public int getMaxCompositePoints() + { + return maxCompositePoints; + } + /** + * @param maxCompositePointsValue The maxCompositePoints to set. + */ + public void setMaxCompositePoints(int maxCompositePointsValue) + { + this.maxCompositePoints = maxCompositePointsValue; + } + /** + * @return Returns the maxContours. + */ + public int getMaxContours() + { + return maxContours; + } + /** + * @param maxContoursValue The maxContours to set. + */ + public void setMaxContours(int maxContoursValue) + { + this.maxContours = maxContoursValue; + } + /** + * @return Returns the maxFunctionDefs. + */ + public int getMaxFunctionDefs() + { + return maxFunctionDefs; + } + /** + * @param maxFunctionDefsValue The maxFunctionDefs to set. + */ + public void setMaxFunctionDefs(int maxFunctionDefsValue) + { + this.maxFunctionDefs = maxFunctionDefsValue; + } + /** + * @return Returns the maxInstructionDefs. + */ + public int getMaxInstructionDefs() + { + return maxInstructionDefs; + } + /** + * @param maxInstructionDefsValue The maxInstructionDefs to set. + */ + public void setMaxInstructionDefs(int maxInstructionDefsValue) + { + this.maxInstructionDefs = maxInstructionDefsValue; + } + /** + * @return Returns the maxPoints. + */ + public int getMaxPoints() + { + return maxPoints; + } + /** + * @param maxPointsValue The maxPoints to set. + */ + public void setMaxPoints(int maxPointsValue) + { + this.maxPoints = maxPointsValue; + } + /** + * @return Returns the maxSizeOfInstructions. + */ + public int getMaxSizeOfInstructions() + { + return maxSizeOfInstructions; + } + /** + * @param maxSizeOfInstructionsValue The maxSizeOfInstructions to set. + */ + public void setMaxSizeOfInstructions(int maxSizeOfInstructionsValue) + { + this.maxSizeOfInstructions = maxSizeOfInstructionsValue; + } + /** + * @return Returns the maxStackElements. + */ + public int getMaxStackElements() + { + return maxStackElements; + } + /** + * @param maxStackElementsValue The maxStackElements to set. + */ + public void setMaxStackElements(int maxStackElementsValue) + { + this.maxStackElements = maxStackElementsValue; + } + /** + * @return Returns the maxStorage. + */ + public int getMaxStorage() + { + return maxStorage; + } + /** + * @param maxStorageValue The maxStorage to set. + */ + public void setMaxStorage(int maxStorageValue) + { + this.maxStorage = maxStorageValue; + } + /** + * @return Returns the maxTwilightPoints. + */ + public int getMaxTwilightPoints() + { + return maxTwilightPoints; + } + /** + * @param maxTwilightPointsValue The maxTwilightPoints to set. + */ + public void setMaxTwilightPoints(int maxTwilightPointsValue) + { + this.maxTwilightPoints = maxTwilightPointsValue; + } + /** + * @return Returns the maxZones. + */ + public int getMaxZones() + { + return maxZones; + } + /** + * @param maxZonesValue The maxZones to set. + */ + public void setMaxZones(int maxZonesValue) + { + this.maxZones = maxZonesValue; + } + /** + * @return Returns the numGlyphs. + */ + public int getNumGlyphs() + { + return numGlyphs; + } + /** + * @param numGlyphsValue The numGlyphs to set. + */ + public void setNumGlyphs(int numGlyphsValue) + { + this.numGlyphs = numGlyphsValue; + } + /** + * @return Returns the version. + */ + public float getVersion() + { + return version; + } + /** + * @param versionValue The version to set. + */ + public void setVersion(float versionValue) + { + this.version = versionValue; + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + version = data.read32Fixed(); + numGlyphs = data.readUnsignedShort(); + maxPoints = data.readUnsignedShort(); + maxContours = data.readUnsignedShort(); + maxCompositePoints = data.readUnsignedShort(); + maxCompositeContours = data.readUnsignedShort(); + maxZones = data.readUnsignedShort(); + maxTwilightPoints = data.readUnsignedShort(); + maxStorage = data.readUnsignedShort(); + maxFunctionDefs = data.readUnsignedShort(); + maxInstructionDefs = data.readUnsignedShort(); + maxStackElements = data.readUnsignedShort(); + maxSizeOfInstructions = data.readUnsignedShort(); + maxComponentElements = data.readUnsignedShort(); + maxComponentDepth = data.readUnsignedShort(); + initialized = true; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java b/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java new file mode 100644 index 00000000000..e111e5ae52e --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; + +/** + * An interface into a data stream. + * + * @author Ben Litchfield + * + */ +class MemoryTTFDataStream extends TTFDataStream +{ + private byte[] data = null; + private int currentPosition = 0; + + /** + * Constructor from a stream. + * @param is The stream to read from. It will be closed by this method. + * @throws IOException If an error occurs while reading from the stream. + */ + MemoryTTFDataStream(InputStream is) throws IOException + { + try (ByteArrayOutputStream output = new ByteArrayOutputStream(is.available())) + { + byte[] buffer = new byte[1024]; + int amountRead; + while ((amountRead = is.read(buffer)) != -1) + { + output.write(buffer, 0, amountRead); + } + data = output.toByteArray(); + } + finally + { + is.close(); + } + } + + /** + * Read an unsigned byte. + * @return An unsigned byte. + * @throws IOException If there is an error reading the data. + */ + @Override + public long readLong() throws IOException + { + return ((long)(readSignedInt()) << 32) + (readSignedInt() & 0xFFFFFFFFL); + } + + /** + * Read a signed integer. + * + * @return A signed integer. + * @throws IOException If there is a problem reading the file. + */ + public int readSignedInt() throws IOException + { + int ch1 = read(); + int ch2 = read(); + int ch3 = read(); + int ch4 = read(); + if( (ch1 | ch2 | ch3 | ch4) < 0) + { + throw new EOFException(); + } + return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); + } + + /** + * Read an unsigned byte. + * @return An unsigned byte. + * @throws IOException If there is an error reading the data. + */ + @Override + public int read() throws IOException + { + if (currentPosition >= data.length) + { + return -1; + } + int retval = data[currentPosition]; + currentPosition++; + return (retval+256)%256; + } + + /** + * Read an unsigned short. + * + * @return An unsigned short. + * @throws IOException If there is an error reading the data. + */ + @Override + public int readUnsignedShort() throws IOException + { + int ch1 = this.read(); + int ch2 = this.read(); + if ((ch1 | ch2) < 0) + { + throw new EOFException(); + } + return (ch1 << 8) + (ch2 << 0); + } + + /** + * Read an signed short. + * + * @return An signed short. + * @throws IOException If there is an error reading the data. + */ + @Override + public short readSignedShort() throws IOException + { + int ch1 = this.read(); + int ch2 = this.read(); + if ((ch1 | ch2) < 0) + { + throw new EOFException(); + } + return (short)((ch1 << 8) + (ch2 << 0)); + } + + /** + * Close the underlying resources. + * + * @throws IOException If there is an error closing the resources. + */ + @Override + public void close() throws IOException + { + } + + /** + * Seek into the datasource. + * + * @param pos The position to seek to. + * @throws IOException If there is an error seeking to that position. + */ + @Override + public void seek(long pos) throws IOException + { + currentPosition = (int)pos; + } + + /** + * @see java.io.InputStream#read( byte[], int, int ) + * + * @param b The buffer to write to. + * @param off The offset into the buffer. + * @param len The length into the buffer. + * + * @return The number of bytes read, or -1 at the end of the stream + * + * @throws IOException If there is an error reading from the stream. + */ + @Override + public int read(byte[] b, int off, int len) throws IOException + { + if (currentPosition < data.length) + { + int amountRead = Math.min( len, data.length-currentPosition ); + System.arraycopy(data,currentPosition,b, off, amountRead ); + currentPosition+=amountRead; + return amountRead; + } + else + { + return -1; + } + } + + /** + * Get the current position in the stream. + * @return The current position in the stream. + * @throws IOException If an error occurs while reading the stream. + */ + @Override + public long getCurrentPosition() throws IOException + { + return currentPosition; + } + + /** + * {@inheritDoc} + */ + @Override + public InputStream getOriginalData() throws IOException + { + return new ByteArrayInputStream( data ); + } + + /** + * {@inheritDoc} + */ + @Override + public long getOriginalDataSize() + { + return data.length; + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/NameRecord.java b/fontbox/src/main/java/org/apache/fontbox/ttf/NameRecord.java new file mode 100644 index 00000000000..56ae0d5a871 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/NameRecord.java @@ -0,0 +1,206 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A name record in the name table. + * + * @author Ben Litchfield + */ +public class NameRecord +{ + // platform ids + public static final int PLATFORM_UNICODE = 0; + public static final int PLATFORM_MACINTOSH = 1; + public static final int PLATFORM_ISO = 2; + public static final int PLATFORM_WINDOWS = 3; + + // Unicode encoding ids + public static final int ENCODING_UNICODE_1_0 = 0; + public static final int ENCODING_UNICODE_1_1 = 1; + public static final int ENCODING_UNICODE_2_0_BMP = 3; + public static final int ENCODING_UNICODE_2_0_FULL = 4; + + // Unicode encoding ids + public static final int LANGUGAE_UNICODE = 0; + + // Windows encoding ids + public static final int ENCODING_WINDOWS_SYMBOL = 0; + public static final int ENCODING_WINDOWS_UNICODE_BMP = 1; + public static final int ENCODING_WINDOWS_UNICODE_UCS4 = 10; + + // Windows language ids + public static final int LANGUGAE_WINDOWS_EN_US = 0x0409; + + // Macintosh encoding ids + public static final int ENCODING_MACINTOSH_ROMAN = 0; + + // Macintosh language ids + public static final int LANGUGAE_MACINTOSH_ENGLISH = 0; + + // name ids + public static final int NAME_COPYRIGHT = 0; + public static final int NAME_FONT_FAMILY_NAME = 1; + public static final int NAME_FONT_SUB_FAMILY_NAME = 2; + public static final int NAME_UNIQUE_FONT_ID = 3; + public static final int NAME_FULL_FONT_NAME = 4; + public static final int NAME_VERSION = 5; + public static final int NAME_POSTSCRIPT_NAME = 6; + public static final int NAME_TRADEMARK = 7; + + private int platformId; + private int platformEncodingId; + private int languageId; + private int nameId; + private int stringLength; + private int stringOffset; + private String string; + + /** + * @return Returns the stringLength. + */ + public int getStringLength() + { + return stringLength; + } + /** + * @param stringLengthValue The stringLength to set. + */ + public void setStringLength(int stringLengthValue) + { + this.stringLength = stringLengthValue; + } + /** + * @return Returns the stringOffset. + */ + public int getStringOffset() + { + return stringOffset; + } + /** + * @param stringOffsetValue The stringOffset to set. + */ + public void setStringOffset(int stringOffsetValue) + { + this.stringOffset = stringOffsetValue; + } + + /** + * @return Returns the languageId. + */ + public int getLanguageId() + { + return languageId; + } + /** + * @param languageIdValue The languageId to set. + */ + public void setLanguageId(int languageIdValue) + { + this.languageId = languageIdValue; + } + /** + * @return Returns the nameId. + */ + public int getNameId() + { + return nameId; + } + /** + * @param nameIdValue The nameId to set. + */ + public void setNameId(int nameIdValue) + { + this.nameId = nameIdValue; + } + /** + * @return Returns the platformEncodingId. + */ + public int getPlatformEncodingId() + { + return platformEncodingId; + } + /** + * @param platformEncodingIdValue The platformEncodingId to set. + */ + public void setPlatformEncodingId(int platformEncodingIdValue) + { + this.platformEncodingId = platformEncodingIdValue; + } + /** + * @return Returns the platformId. + */ + public int getPlatformId() + { + return platformId; + } + /** + * @param platformIdValue The platformId to set. + */ + public void setPlatformId(int platformIdValue) + { + this.platformId = platformIdValue; + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + public void initData( TrueTypeFont ttf, TTFDataStream data ) throws IOException + { + platformId = data.readUnsignedShort(); + platformEncodingId = data.readUnsignedShort(); + languageId = data.readUnsignedShort(); + nameId = data.readUnsignedShort(); + stringLength = data.readUnsignedShort(); + stringOffset = data.readUnsignedShort(); + } + + /** + * Return a string representation of this class. + * + * @return A string for this class. + */ + public String toString() + { + return + "platform=" + platformId + + " pEncoding=" + platformEncodingId + + " language=" + languageId + + " name=" + nameId + + " " + string; + } + /** + * @return Returns the string. + */ + public String getString() + { + return string; + } + /** + * @param stringValue The string to set. + */ + public void setString(String stringValue) + { + this.string = stringValue; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/NamingTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/NamingTable.java new file mode 100644 index 00000000000..19bbe0c44ae --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/NamingTable.java @@ -0,0 +1,282 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.fontbox.util.Charsets; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class NamingTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "name"; + + private List nameRecords; + + private Map>>> lookupTable; + + private String fontFamily = null; + private String fontSubFamily = null; + private String psName = null; + + NamingTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + int formatSelector = data.readUnsignedShort(); + int numberOfNameRecords = data.readUnsignedShort(); + int offsetToStartOfStringStorage = data.readUnsignedShort(); + nameRecords = new ArrayList<>(numberOfNameRecords); + for (int i=0; i< numberOfNameRecords; i++) + { + NameRecord nr = new NameRecord(); + nr.initData(ttf, data); + nameRecords.add(nr); + } + + for (NameRecord nr : nameRecords) + { + // don't try to read invalid offsets, see PDFBOX-2608 + if (nr.getStringOffset() > getLength()) + { + nr.setString(null); + continue; + } + + data.seek(getOffset() + (2*3)+numberOfNameRecords*2*6+nr.getStringOffset()); + int platform = nr.getPlatformId(); + int encoding = nr.getPlatformEncodingId(); + Charset charset = Charsets.ISO_8859_1; + if (platform == NameRecord.PLATFORM_WINDOWS && (encoding == NameRecord.ENCODING_WINDOWS_SYMBOL || encoding == NameRecord.ENCODING_WINDOWS_UNICODE_BMP)) + { + charset = Charsets.UTF_16; + } + else if (platform == NameRecord.PLATFORM_UNICODE) + { + charset = Charsets.UTF_16; + } + else if (platform == NameRecord.PLATFORM_ISO) + { + switch (encoding) + { + case 0: + charset = Charsets.US_ASCII; + break; + case 1: + //not sure is this is correct?? + charset = Charsets.ISO_10646; + break; + case 2: + charset = Charsets.ISO_8859_1; + break; + default: + break; + } + } + String string = data.readString(nr.getStringLength(), charset); + nr.setString(string); + } + + // build multi-dimensional lookup table + lookupTable = new HashMap<>(nameRecords.size()); + for (NameRecord nr : nameRecords) + { + // name id + Map>> platformLookup = lookupTable.get(nr.getNameId()); + if (platformLookup == null) + { + platformLookup = new HashMap<>(); + lookupTable.put(nr.getNameId(), platformLookup); + } + // platform id + Map> encodingLookup = platformLookup.get(nr.getPlatformId()); + if (encodingLookup == null) + { + encodingLookup = new HashMap<>(); + platformLookup.put(nr.getPlatformId(), encodingLookup); + } + // encoding id + Map languageLookup = encodingLookup.get(nr.getPlatformEncodingId()); + if (languageLookup == null) + { + languageLookup = new HashMap<>(); + encodingLookup.put(nr.getPlatformEncodingId(), languageLookup); + } + // language id / string + languageLookup.put(nr.getLanguageId(), nr.getString()); + } + + // extract strings of interest + fontFamily = getEnglishName(NameRecord.NAME_FONT_FAMILY_NAME); + fontSubFamily = getEnglishName(NameRecord.NAME_FONT_SUB_FAMILY_NAME); + + // extract PostScript name, only these two formats are valid + psName = getName(NameRecord.NAME_POSTSCRIPT_NAME, + NameRecord.PLATFORM_MACINTOSH, + NameRecord.ENCODING_MACINTOSH_ROMAN, + NameRecord.LANGUGAE_MACINTOSH_ENGLISH); + if (psName == null) + { + psName = getName(NameRecord.NAME_POSTSCRIPT_NAME, + NameRecord.PLATFORM_WINDOWS, + NameRecord.ENCODING_WINDOWS_UNICODE_BMP, + NameRecord.LANGUGAE_WINDOWS_EN_US); + } + if (psName != null) + { + psName = psName.trim(); + } + + initialized = true; + } + + /** + * Helper to get English names by best effort. + */ + private String getEnglishName(int nameId) + { + // Unicode, Full, BMP, 1.1, 1.0 + for (int i = 4; i >= 0; i--) + { + String nameUni = + getName(nameId, + NameRecord.PLATFORM_UNICODE, + i, + NameRecord.LANGUGAE_UNICODE); + if (nameUni != null) + { + return nameUni; + } + } + + // Windows, Unicode BMP, EN-US + String nameWin = + getName(nameId, + NameRecord.PLATFORM_WINDOWS, + NameRecord.ENCODING_WINDOWS_UNICODE_BMP, + NameRecord.LANGUGAE_WINDOWS_EN_US); + if (nameWin != null) + { + return nameWin; + } + + // Macintosh, Roman, English + String nameMac = + getName(nameId, + NameRecord.PLATFORM_MACINTOSH, + NameRecord.ENCODING_MACINTOSH_ROMAN, + NameRecord.LANGUGAE_MACINTOSH_ENGLISH); + if (nameMac != null) + { + return nameMac; + } + + return null; + } + + /** + * Returns a name from the table, or null it it does not exist. + * + * @param nameId Name ID from NameRecord constants. + * @param platformId Platform ID from NameRecord constants. + * @param encodingId Platform Encoding ID from NameRecord constants. + * @param languageId Language ID from NameRecord constants. + * @return name, or null + */ + public String getName(int nameId, int platformId, int encodingId, int languageId) + { + Map>> platforms = lookupTable.get(nameId); + if (platforms == null) + { + return null; + } + Map> encodings = platforms.get(platformId); + if (encodings == null) + { + return null; + } + Map languages = encodings.get(encodingId); + if (languages == null) + { + return null; + } + return languages.get(languageId); + } + + /** + * This will get the name records for this naming table. + * + * @return A list of NameRecord objects. + */ + public List getNameRecords() + { + return nameRecords; + } + + /** + * Returns the font family name, in English. + * + * @return the font family name, in English + */ + public String getFontFamily() + { + return fontFamily; + } + + /** + * Returns the font sub family name, in English. + * + * @return the font sub family name, in English + */ + public String getFontSubFamily() + { + return fontSubFamily; + } + + /** + * Returns the PostScript name. + * + * @return the PostScript name + */ + public String getPostScriptName() + { + return psName; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java new file mode 100644 index 00000000000..0af94604b77 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java @@ -0,0 +1,834 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + * + */ +public class OS2WindowsMetricsTable extends TTFTable +{ + + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_THIN = 100; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_ULTRA_LIGHT = 200; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_LIGHT = 300; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_NORMAL = 400; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_MEDIUM = 500; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_SEMI_BOLD = 600; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_BOLD = 700; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_EXTRA_BOLD = 800; + /** + * Weight class constant. + */ + public static final int WEIGHT_CLASS_BLACK = 900; + + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_ULTRA_CONDENSED = 1; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_EXTRA_CONDENSED = 2; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_CONDENSED = 3; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_SEMI_CONDENSED = 4; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_MEDIUM = 5; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_SEMI_EXPANDED = 6; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_EXPANDED = 7; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_EXTRA_EXPANDED = 8; + /** + * Width class constant. + */ + public static final int WIDTH_CLASS_ULTRA_EXPANDED = 9; + + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_NO_CLASSIFICATION = 0; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_OLDSTYLE_SERIFS = 1; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_TRANSITIONAL_SERIFS = 2; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_MODERN_SERIFS = 3; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_CLAREDON_SERIFS = 4; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_SLAB_SERIFS = 5; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_FREEFORM_SERIFS = 7; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_SANS_SERIF = 8; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_ORNAMENTALS = 9; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_SCRIPTS = 10; + /** + * Family class constant. + */ + public static final int FAMILY_CLASS_SYMBOLIC = 12; + + /** + * Restricted License embedding: must not be modified, embedded or exchanged in any manner. + * + *

For Restricted License embedding to take effect, it must be the only level of embedding + * selected. + */ + public static final short FSTYPE_RESTRICTED = 0x0001; + + /** + * Preview and Print embedding: the font may be embedded, and temporarily loaded on the + * remote system. No edits can be applied to the document. + */ + public static final short FSTYPE_PREVIEW_AND_PRINT = 0x0004; + + /** + * Editable embedding: the font may be embedded but must only be installed temporarily on other + * systems. Documents may be edited and changes saved. + */ + public static final short FSTYPE_EDITIBLE = 0x0008; + + /** + * No subsetting: the font must not be subsetted prior to embedding. + */ + public static final short FSTYPE_NO_SUBSETTING = 0x0100; + + /** + * Bitmap embedding only: only bitmaps contained in the font may be embedded. No outline data + * may be embedded. Other embedding restrictions specified in bits 0-3 and 8 also apply. + */ + public static final short FSTYPE_BITMAP_ONLY = 0x0200; + + OS2WindowsMetricsTable(TrueTypeFont font) + { + super(font); + } + + /** + * @return Returns the achVendId. + */ + public String getAchVendId() + { + return achVendId; + } + + /** + * @param achVendIdValue The achVendId to set. + */ + public void setAchVendId(String achVendIdValue) + { + this.achVendId = achVendIdValue; + } + + /** + * @return Returns the averageCharWidth. + */ + public short getAverageCharWidth() + { + return averageCharWidth; + } + + /** + * @param averageCharWidthValue The averageCharWidth to set. + */ + public void setAverageCharWidth(short averageCharWidthValue) + { + this.averageCharWidth = averageCharWidthValue; + } + + /** + * @return Returns the codePageRange1. + */ + public long getCodePageRange1() + { + return codePageRange1; + } + + /** + * @param codePageRange1Value The codePageRange1 to set. + */ + public void setCodePageRange1(long codePageRange1Value) + { + this.codePageRange1 = codePageRange1Value; + } + + /** + * @return Returns the codePageRange2. + */ + public long getCodePageRange2() + { + return codePageRange2; + } + + /** + * @param codePageRange2Value The codePageRange2 to set. + */ + public void setCodePageRange2(long codePageRange2Value) + { + this.codePageRange2 = codePageRange2Value; + } + + /** + * @return Returns the familyClass. + */ + public int getFamilyClass() + { + return familyClass; + } + + /** + * @param familyClassValue The familyClass to set. + */ + public void setFamilyClass(int familyClassValue) + { + this.familyClass = familyClassValue; + } + + /** + * @return Returns the firstCharIndex. + */ + public int getFirstCharIndex() + { + return firstCharIndex; + } + + /** + * @param firstCharIndexValue The firstCharIndex to set. + */ + public void setFirstCharIndex(int firstCharIndexValue) + { + this.firstCharIndex = firstCharIndexValue; + } + + /** + * @return Returns the fsSelection. + */ + public int getFsSelection() + { + return fsSelection; + } + + /** + * @param fsSelectionValue The fsSelection to set. + */ + public void setFsSelection(int fsSelectionValue) + { + this.fsSelection = fsSelectionValue; + } + + /** + * @return Returns the fsType. + */ + public short getFsType() + { + return fsType; + } + + /** + * @param fsTypeValue The fsType to set. + */ + public void setFsType(short fsTypeValue) + { + this.fsType = fsTypeValue; + } + + /** + * @return Returns the lastCharIndex. + */ + public int getLastCharIndex() + { + return lastCharIndex; + } + + /** + * @param lastCharIndexValue The lastCharIndex to set. + */ + public void setLastCharIndex(int lastCharIndexValue) + { + this.lastCharIndex = lastCharIndexValue; + } + + /** + * @return Returns the panose. + */ + public byte[] getPanose() + { + return panose; + } + + /** + * @param panoseValue The panose to set. + */ + public void setPanose(byte[] panoseValue) + { + this.panose = panoseValue; + } + + /** + * @return Returns the strikeoutPosition. + */ + public short getStrikeoutPosition() + { + return strikeoutPosition; + } + + /** + * @param strikeoutPositionValue The strikeoutPosition to set. + */ + public void setStrikeoutPosition(short strikeoutPositionValue) + { + this.strikeoutPosition = strikeoutPositionValue; + } + + /** + * @return Returns the strikeoutSize. + */ + public short getStrikeoutSize() + { + return strikeoutSize; + } + + /** + * @param strikeoutSizeValue The strikeoutSize to set. + */ + public void setStrikeoutSize(short strikeoutSizeValue) + { + this.strikeoutSize = strikeoutSizeValue; + } + + /** + * @return Returns the subscriptXOffset. + */ + public short getSubscriptXOffset() + { + return subscriptXOffset; + } + + /** + * @param subscriptXOffsetValue The subscriptXOffset to set. + */ + public void setSubscriptXOffset(short subscriptXOffsetValue) + { + this.subscriptXOffset = subscriptXOffsetValue; + } + + /** + * @return Returns the subscriptXSize. + */ + public short getSubscriptXSize() + { + return subscriptXSize; + } + + /** + * @param subscriptXSizeValue The subscriptXSize to set. + */ + public void setSubscriptXSize(short subscriptXSizeValue) + { + this.subscriptXSize = subscriptXSizeValue; + } + + /** + * @return Returns the subscriptYOffset. + */ + public short getSubscriptYOffset() + { + return subscriptYOffset; + } + + /** + * @param subscriptYOffsetValue The subscriptYOffset to set. + */ + public void setSubscriptYOffset(short subscriptYOffsetValue) + { + this.subscriptYOffset = subscriptYOffsetValue; + } + + /** + * @return Returns the subscriptYSize. + */ + public short getSubscriptYSize() + { + return subscriptYSize; + } + + /** + * @param subscriptYSizeValue The subscriptYSize to set. + */ + public void setSubscriptYSize(short subscriptYSizeValue) + { + this.subscriptYSize = subscriptYSizeValue; + } + + /** + * @return Returns the superscriptXOffset. + */ + public short getSuperscriptXOffset() + { + return superscriptXOffset; + } + + /** + * @param superscriptXOffsetValue The superscriptXOffset to set. + */ + public void setSuperscriptXOffset(short superscriptXOffsetValue) + { + this.superscriptXOffset = superscriptXOffsetValue; + } + + /** + * @return Returns the superscriptXSize. + */ + public short getSuperscriptXSize() + { + return superscriptXSize; + } + + /** + * @param superscriptXSizeValue The superscriptXSize to set. + */ + public void setSuperscriptXSize(short superscriptXSizeValue) + { + this.superscriptXSize = superscriptXSizeValue; + } + + /** + * @return Returns the superscriptYOffset. + */ + public short getSuperscriptYOffset() + { + return superscriptYOffset; + } + + /** + * @param superscriptYOffsetValue The superscriptYOffset to set. + */ + public void setSuperscriptYOffset(short superscriptYOffsetValue) + { + this.superscriptYOffset = superscriptYOffsetValue; + } + + /** + * @return Returns the superscriptYSize. + */ + public short getSuperscriptYSize() + { + return superscriptYSize; + } + + /** + * @param superscriptYSizeValue The superscriptYSize to set. + */ + public void setSuperscriptYSize(short superscriptYSizeValue) + { + this.superscriptYSize = superscriptYSizeValue; + } + + /** + * @return Returns the typoLineGap. + */ + public int getTypoLineGap() + { + return typoLineGap; + } + + /** + * @param typeLineGapValue The typoLineGap to set. + */ + public void setTypoLineGap(int typeLineGapValue) + { + this.typoLineGap = typeLineGapValue; + } + + /** + * @return Returns the typoAscender. + */ + public int getTypoAscender() + { + return typoAscender; + } + + /** + * @param typoAscenderValue The typoAscender to set. + */ + public void setTypoAscender(int typoAscenderValue) + { + this.typoAscender = typoAscenderValue; + } + + /** + * @return Returns the typoDescender. + */ + public int getTypoDescender() + { + return typoDescender; + } + + /** + * @param typoDescenderValue The typoDescender to set. + */ + public void setTypoDescender(int typoDescenderValue) + { + this.typoDescender = typoDescenderValue; + } + + /** + * @return Returns the unicodeRange1. + */ + public long getUnicodeRange1() + { + return unicodeRange1; + } + + /** + * @param unicodeRange1Value The unicodeRange1 to set. + */ + public void setUnicodeRange1(long unicodeRange1Value) + { + this.unicodeRange1 = unicodeRange1Value; + } + + /** + * @return Returns the unicodeRange2. + */ + public long getUnicodeRange2() + { + return unicodeRange2; + } + + /** + * @param unicodeRange2Value The unicodeRange2 to set. + */ + public void setUnicodeRange2(long unicodeRange2Value) + { + this.unicodeRange2 = unicodeRange2Value; + } + + /** + * @return Returns the unicodeRange3. + */ + public long getUnicodeRange3() + { + return unicodeRange3; + } + + /** + * @param unicodeRange3Value The unicodeRange3 to set. + */ + public void setUnicodeRange3(long unicodeRange3Value) + { + this.unicodeRange3 = unicodeRange3Value; + } + + /** + * @return Returns the unicodeRange4. + */ + public long getUnicodeRange4() + { + return unicodeRange4; + } + + /** + * @param unicodeRange4Value The unicodeRange4 to set. + */ + public void setUnicodeRange4(long unicodeRange4Value) + { + this.unicodeRange4 = unicodeRange4Value; + } + + /** + * @return Returns the version. + */ + public int getVersion() + { + return version; + } + + /** + * @param versionValue The version to set. + */ + public void setVersion(int versionValue) + { + this.version = versionValue; + } + + /** + * @return Returns the weightClass. + */ + public int getWeightClass() + { + return weightClass; + } + + /** + * @param weightClassValue The weightClass to set. + */ + public void setWeightClass(int weightClassValue) + { + this.weightClass = weightClassValue; + } + + /** + * @return Returns the widthClass. + */ + public int getWidthClass() + { + return widthClass; + } + + /** + * @param widthClassValue The widthClass to set. + */ + public void setWidthClass(int widthClassValue) + { + this.widthClass = widthClassValue; + } + + /** + * @return Returns the winAscent. + */ + public int getWinAscent() + { + return winAscent; + } + + /** + * @param winAscentValue The winAscent to set. + */ + public void setWinAscent(int winAscentValue) + { + this.winAscent = winAscentValue; + } + + /** + * @return Returns the winDescent. + */ + public int getWinDescent() + { + return winDescent; + } + + /** + * @param winDescentValue The winDescent to set. + */ + public void setWinDescent(int winDescentValue) + { + this.winDescent = winDescentValue; + } + + /** + * Returns the sxHeight. + */ + public int getHeight() + { + return sxHeight; + } + + /** + * Returns the sCapHeight. + */ + public int getCapHeight() + { + return sCapHeight; + } + + /** + * Returns the usDefaultChar. + */ + public int getDefaultChar() + { + return usDefaultChar; + } + + /** + * Returns the usBreakChar. + */ + public int getBreakChar() + { + return usBreakChar; + } + + /** + * Returns the usMaxContext. + */ + public int getMaxContext() + { + return usMaxContext; + } + + private int version; + private short averageCharWidth; + private int weightClass; + private int widthClass; + private short fsType; + private short subscriptXSize; + private short subscriptYSize; + private short subscriptXOffset; + private short subscriptYOffset; + private short superscriptXSize; + private short superscriptYSize; + private short superscriptXOffset; + private short superscriptYOffset; + private short strikeoutSize; + private short strikeoutPosition; + private int familyClass; + private byte[] panose = new byte[10]; + private long unicodeRange1; + private long unicodeRange2; + private long unicodeRange3; + private long unicodeRange4; + private String achVendId = "XXXX"; + private int fsSelection; + private int firstCharIndex; + private int lastCharIndex; + private int typoAscender; + private int typoDescender; + private int typoLineGap; + private int winAscent; + private int winDescent; + private long codePageRange1 = -1; + private long codePageRange2 = -1; + private int sxHeight; + private int sCapHeight; + private int usDefaultChar; + private int usBreakChar; + private int usMaxContext; + + /** + * A tag that identifies this table type. + */ + public static final String TAG = "OS/2"; + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + version = data.readUnsignedShort(); + averageCharWidth = data.readSignedShort(); + weightClass = data.readUnsignedShort(); + widthClass = data.readUnsignedShort(); + fsType = data.readSignedShort(); + subscriptXSize = data.readSignedShort(); + subscriptYSize = data.readSignedShort(); + subscriptXOffset = data.readSignedShort(); + subscriptYOffset = data.readSignedShort(); + superscriptXSize = data.readSignedShort(); + superscriptYSize = data.readSignedShort(); + superscriptXOffset = data.readSignedShort(); + superscriptYOffset = data.readSignedShort(); + strikeoutSize = data.readSignedShort(); + strikeoutPosition = data.readSignedShort(); + familyClass = data.readSignedShort(); + panose = data.read(10); + unicodeRange1 = data.readUnsignedInt(); + unicodeRange2 = data.readUnsignedInt(); + unicodeRange3 = data.readUnsignedInt(); + unicodeRange4 = data.readUnsignedInt(); + achVendId = data.readString(4); + fsSelection = data.readUnsignedShort(); + firstCharIndex = data.readUnsignedShort(); + lastCharIndex = data.readUnsignedShort(); + typoAscender = data.readSignedShort(); + typoDescender = data.readSignedShort(); + typoLineGap = data.readSignedShort(); + winAscent = data.readUnsignedShort(); + winDescent = data.readUnsignedShort(); + if (version >= 1) + { + codePageRange1 = data.readUnsignedInt(); + codePageRange2 = data.readUnsignedInt(); + } + if (version >= 1.2) + { + sxHeight = data.readSignedShort(); + sCapHeight = data.readSignedShort(); + usDefaultChar = data.readUnsignedShort(); + usBreakChar = data.readUnsignedShort(); + usMaxContext = data.readUnsignedShort(); + } + initialized = true; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java b/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java new file mode 100644 index 00000000000..0ac98a1bafa --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/** + * OpenType font file parser. + */ +public final class OTFParser extends TTFParser +{ + /** + * Constructor. + */ + public OTFParser() + { + super(); + } + + /** + * Constructor. + * + * @param isEmbedded true if the font is embedded in PDF + */ + public OTFParser(boolean isEmbedded) + { + this(isEmbedded, false); + } + + /** + * Constructor. + * + * @param isEmbedded true if the font is embedded in PDF + * @param parseOnDemand true if the tables of the font should be parsed on demand + */ + public OTFParser(boolean isEmbedded, boolean parseOnDemand) + { + super(isEmbedded, parseOnDemand); + } + + @Override + public OpenTypeFont parse(String file) throws IOException + { + return (OpenTypeFont)super.parse(file); + } + + @Override + public OpenTypeFont parse(File file) throws IOException + { + return (OpenTypeFont)super.parse(file); + } + + @Override + public OpenTypeFont parse(InputStream data) throws IOException + { + return (OpenTypeFont)super.parse(data); + } + + @Override + OpenTypeFont parse(TTFDataStream raf) throws IOException + { + return (OpenTypeFont)super.parse(raf); + } + + @Override + OpenTypeFont newFont(TTFDataStream raf) + { + return new OpenTypeFont(raf); + } + + @Override + protected TTFTable readTable(TrueTypeFont font, String tag) + { + // todo: this is a stub, a full implementation is needed + switch (tag) + { + case "BASE": + case "GDEF": + case "GPOS": + case "GSUB": + case "JSTF": + return new OTLTable(font); + case "CFF ": + return new CFFTable(font); + default: + return super.readTable(font, tag); + } + } + + @Override + protected boolean allowCFF() + { + return true; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java new file mode 100644 index 00000000000..c7e35dc58bd --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +/** + * OpenType Layout (OTL) table. Uses the OpenType Layout Common Table Format. + */ +public class OTLTable extends TTFTable +{ + // todo: this is a stub, a full implementation is needed + + OTLTable(TrueTypeFont font) + { + super(font); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java b/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java new file mode 100644 index 00000000000..39c6ee82797 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.awt.geom.GeneralPath; +import java.io.IOException; + +/** + * An OpenType (OTF/TTF) font. + */ +public class OpenTypeFont extends TrueTypeFont +{ + private boolean isPostScript; + + /** + * Constructor. Clients should use the OTFParser to create a new OpenTypeFont object. + * + * @param fontData The font data. + */ + OpenTypeFont(TTFDataStream fontData) + { + super(fontData); + } + + @Override + void setVersion(float versionValue) + { + isPostScript = Float.floatToIntBits(versionValue) == 0x469EA8A9; // OTTO + super.setVersion(versionValue); + } + + /** + * Get the "CFF" table for this OTF. + * + * @return The "CFF" table. + */ + public CFFTable getCFF() throws IOException + { + if (!isPostScript) + { + throw new UnsupportedOperationException("TTF fonts do not have a CFF table"); + } + return (CFFTable) getTable(CFFTable.TAG); + } + + @Override + public GlyphTable getGlyph() throws IOException + { + if (isPostScript) + { + throw new UnsupportedOperationException("OTF fonts do not have a glyf table"); + } + return super.getGlyph(); + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + int gid = nameToGID(name); + return getCFF().getFont().getType2CharString(gid).getPath(); + } + + /** + * Returns true if this font is a PostScript outline font. + */ + public boolean isPostScript() + { + return tables.containsKey(CFFTable.TAG); + } + + /** + * Returns true if this font uses OpenType Layout (Advanced Typographic) tables. + */ + public boolean hasLayoutTables() + { + return tables.containsKey("BASE") || + tables.containsKey("GDEF") || + tables.containsKey("GPOS") || + tables.containsKey("GSUB") || + tables.containsKey("JSTF"); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeScript.java b/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeScript.java new file mode 100644 index 00000000000..4e001b241be --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeScript.java @@ -0,0 +1,371 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.StringTokenizer; +import java.util.TreeMap; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A class for mapping Unicode codepoints to OpenType script tags + * + * @author Aaron Madlon-Kay + * + * @see Microsoft Typography: + * Script Tags + * @see Unicode Script Property + */ +public final class OpenTypeScript +{ + private static final Log LOG = LogFactory.getLog(OpenTypeScript.class); + + public static final String INHERITED = "Inherited"; + public static final String UNKNOWN = "Unknown"; + public static final String TAG_DEFAULT = "DFLT"; + + /** + * A map associating Unicode scripts with one or more OpenType script tags. Script tags are not + * necessarily the same as Unicode scripts. A single Unicode script may correspond to multiple + * tags, especially when there has been a revision to the latter (e.g. Bengali -> [bng2, beng]). + * When there are multiple tags, they are ordered from newest to oldest. + * + * @see Microsoft + * Typography: Script Tags + */ + private static final Map UNICODE_SCRIPT_TO_OPENTYPE_TAG_MAP; + + static + { + Object[][] table = + { + {"Adlam", new String[] { "adlm" }}, + {"Ahom", new String[] { "ahom" }}, + {"Anatolian_Hieroglyphs", new String[] { "hluw" }}, + {"Arabic", new String[] { "arab" }}, + {"Armenian", new String[] { "armn" }}, + {"Avestan", new String[] { "avst" }}, + {"Balinese", new String[] { "bali" }}, + {"Bamum", new String[] { "bamu" }}, + {"Bassa_Vah", new String[] { "bass" }}, + {"Batak", new String[] { "batk" }}, + {"Bengali", new String[] { "bng2", "beng" }}, + {"Bhaiksuki", new String[] { "bhks" }}, + {"Bopomofo", new String[] { "bopo" }}, + {"Brahmi", new String[] { "brah" }}, + {"Braille", new String[] { "brai" }}, + {"Buginese", new String[] { "bugi" }}, + {"Buhid", new String[] { "buhd" }}, + // Byzantine Music: byzm + {"Canadian_Aboriginal", new String[] { "cans" }}, + {"Carian", new String[] { "cari" }}, + {"Caucasian_Albanian", new String[] { "aghb" }}, + {"Chakma", new String[] { "cakm" }}, + {"Cham", new String[] { "cham" }}, + {"Cherokee", new String[] { "cher" }}, + {"Common", new String[] { TAG_DEFAULT }}, // "Default" in OpenType + {"Coptic", new String[] { "copt" }}, + {"Cuneiform", new String[] { "xsux" }}, // "Sumero-Akkadian Cuneiform" in OpenType + {"Cypriot", new String[] { "cprt" }}, + {"Cyrillic", new String[] { "cyrl" }}, + {"Deseret", new String[] { "dsrt" }}, + {"Devanagari", new String[] { "dev2", "deva" }}, + {"Duployan", new String[] { "dupl" }}, + {"Egyptian_Hieroglyphs", new String[] { "egyp" }}, + {"Elbasan", new String[] { "elba" }}, + {"Ethiopic", new String[] { "ethi" }}, + {"Georgian", new String[] { "geor" }}, + {"Glagolitic", new String[] { "glag" }}, + {"Gothic", new String[] { "goth" }}, + {"Grantha", new String[] { "gran" }}, + {"Greek", new String[] { "grek" }}, + {"Gujarati", new String[] { "gjr2", "gujr" }}, + {"Gurmukhi", new String[] { "gur2", "guru" }}, + {"Han", new String[] { "hani" }}, // "CJK Ideographic" in OpenType + {"Hangul", new String[] { "hang" }}, + // Hangul Jamo: jamo + {"Hanunoo", new String[] { "hano" }}, + {"Hatran", new String[] { "hatr" }}, + {"Hebrew", new String[] { "hebr" }}, + {"Hiragana", new String[] { "kana" }}, + {"Imperial_Aramaic", new String[] { "armi" }}, + {INHERITED, new String[] { INHERITED }}, + {"Inscriptional_Pahlavi", new String[] { "phli" }}, + {"Inscriptional_Parthian", new String[] { "prti" }}, + {"Javanese", new String[] { "java" }}, + {"Kaithi", new String[] { "kthi" }}, + {"Kannada", new String[] { "knd2", "knda" }}, + {"Katakana", new String[] { "kana" }}, + {"Kayah_Li", new String[] { "kali" }}, + {"Kharoshthi", new String[] { "khar" }}, + {"Khmer", new String[] { "khmr" }}, + {"Khojki", new String[] { "khoj" }}, + {"Khudawadi", new String[] { "sind" }}, + {"Lao", new String[] { "lao " }}, + {"Latin", new String[] { "latn" }}, + {"Lepcha", new String[] { "lepc" }}, + {"Limbu", new String[] { "limb" }}, + {"Linear_A", new String[] { "lina" }}, + {"Linear_B", new String[] { "linb" }}, + {"Lisu", new String[] { "lisu" }}, + {"Lycian", new String[] { "lyci" }}, + {"Lydian", new String[] { "lydi" }}, + {"Mahajani", new String[] { "mahj" }}, + {"Malayalam", new String[] { "mlm2", "mlym" }}, + {"Mandaic", new String[] { "mand" }}, + {"Manichaean", new String[] { "mani" }}, + {"Marchen", new String[] { "marc" }}, + // Mathematical Alphanumeric Symbols: math + {"Meetei_Mayek", new String[] { "mtei" }}, + {"Mende_Kikakui", new String[] { "mend" }}, + {"Meroitic_Cursive", new String[] { "merc" }}, + {"Meroitic_Hieroglyphs", new String[] { "mero" }}, + {"Miao", new String[] { "plrd" }}, + {"Modi", new String[] { "modi" }}, + {"Mongolian", new String[] { "mong" }}, + {"Mro", new String[] { "mroo" }}, + {"Multani", new String[] { "mult" }}, + // Musical Symbols: musc + {"Myanmar", new String[] { "mym2", "mymr" }}, + {"Nabataean", new String[] { "nbat" }}, + {"Newa", new String[] { "newa" }}, + {"New_Tai_Lue", new String[] { "talu" }}, + {"Nko", new String[] { "nko " }}, + {"Ogham", new String[] { "ogam" }}, + {"Ol_Chiki", new String[] { "olck" }}, + {"Old_Italic", new String[] { "ital" }}, + {"Old_Hungarian", new String[] { "hung" }}, + {"Old_North_Arabian", new String[] { "narb" }}, + {"Old_Permic", new String[] { "perm" }}, + {"Old_Persian", new String[] { "xpeo" }}, + {"Old_South_Arabian", new String[] { "sarb" }}, + {"Old_Turkic", new String[] { "orkh" }}, + {"Oriya", new String[] { "ory2", "orya" }}, // "Odia (formerly Oriya)" in OpenType + {"Osage", new String[] { "osge" }}, + {"Osmanya", new String[] { "osma" }}, + {"Pahawh_Hmong", new String[] { "hmng" }}, + {"Palmyrene", new String[] { "palm" }}, + {"Pau_Cin_Hau", new String[] { "pauc" }}, + {"Phags_Pa", new String[] { "phag" }}, + {"Phoenician", new String[] { "phnx" }}, + {"Psalter_Pahlavi", new String[] { "phlp" }}, + {"Rejang", new String[] { "rjng" }}, + {"Runic", new String[] { "runr" }}, + {"Samaritan", new String[] { "samr" }}, + {"Saurashtra", new String[] { "saur" }}, + {"Sharada", new String[] { "shrd" }}, + {"Shavian", new String[] { "shaw" }}, + {"Siddham", new String[] { "sidd" }}, + {"SignWriting", new String[] { "sgnw" }}, + {"Sinhala", new String[] { "sinh" }}, + {"Sora_Sompeng", new String[] { "sora" }}, + {"Sundanese", new String[] { "sund" }}, + {"Syloti_Nagri", new String[] { "sylo" }}, + {"Syriac", new String[] { "syrc" }}, + {"Tagalog", new String[] { "tglg" }}, + {"Tagbanwa", new String[] { "tagb" }}, + {"Tai_Le", new String[] { "tale" }}, + {"Tai_Tham", new String[] { "lana" }}, + {"Tai_Viet", new String[] { "tavt" }}, + {"Takri", new String[] { "takr" }}, + {"Tamil", new String[] { "tml2", "taml" }}, + {"Tangut", new String[] { "tang" }}, + {"Telugu", new String[] { "tel2", "telu" }}, + {"Thaana", new String[] { "thaa" }}, + {"Thai", new String[] { "thai" }}, + {"Tibetan", new String[] { "tibt" }}, + {"Tifinagh", new String[] { "tfng" }}, + {"Tirhuta", new String[] { "tirh" }}, + {"Ugaritic", new String[] { "ugar" }}, + {UNKNOWN, new String[] { TAG_DEFAULT }}, + {"Vai", new String[] { "vai " }}, + {"Warang_Citi", new String[] { "wara" }}, + {"Yi", new String[] { "yi " }} + }; + UNICODE_SCRIPT_TO_OPENTYPE_TAG_MAP = new HashMap<>(table.length); + for (Object obj : table) + { + Object[] array = (Object[]) obj; + UNICODE_SCRIPT_TO_OPENTYPE_TAG_MAP.put((String) array[0], (String[]) array[1]); + } + } + + private static int[] unicodeRangeStarts; + private static String[] unicodeRangeScripts; + + static + { + String path = "/org/apache/fontbox/unicode/Scripts.txt"; + try (InputStream input = OpenTypeScript.class.getResourceAsStream(path)) + { + if (input != null) + { + parseScriptsFile(input); + } + else + { + LOG.warn("Could not find '" + path + "', mirroring char map will be empty: "); + } + } + catch (IOException e) + { + LOG.warn("Could not parse Scripts.txt, mirroring char map will be empty: " + + e.getMessage(), e); + } + } + + private OpenTypeScript() + { + } + + private static void parseScriptsFile(InputStream inputStream) throws IOException + { + Map unicodeRanges = new TreeMap<>(new Comparator() + { + @Override + public int compare(int[] o1, int[] o2) + { + return Integer.compare(o1[0], o2[0]); + }; + }); + try (LineNumberReader rd = new LineNumberReader(new InputStreamReader(inputStream))) + { + int[] lastRange = { Integer.MIN_VALUE, Integer.MIN_VALUE }; + String lastScript = null; + do + { + String s = rd.readLine(); + if (s == null) + { + break; + } + + // ignore comments + int comment = s.indexOf('#'); + if (comment != -1) + { + s = s.substring(0, comment); + } + + if (s.length() < 2) + { + continue; + } + + StringTokenizer st = new StringTokenizer(s, ";"); + int nFields = st.countTokens(); + if (nFields < 2) + { + continue; + } + String characters = st.nextToken().trim(); + String script = st.nextToken().trim(); + int[] range = new int[2]; + int rangeDelim = characters.indexOf(".."); + if (rangeDelim == -1) + { + range[0] = range[1] = Integer.parseInt(characters, 16); + } + else + { + range[0] = Integer.parseInt(characters.substring(0, rangeDelim), 16); + range[1] = Integer.parseInt(characters.substring(rangeDelim + 2), 16); + } + if (range[0] == lastRange[1] + 1 && script.equals(lastScript)) + { + // Combine with previous range + lastRange[1] = range[1]; + } + else + { + unicodeRanges.put(range, script); + lastRange = range; + lastScript = script; + } + } + while (true); + } + + unicodeRangeStarts = new int[unicodeRanges.size()]; + unicodeRangeScripts = new String[unicodeRanges.size()]; + int i = 0; + for (Entry e : unicodeRanges.entrySet()) + { + unicodeRangeStarts[i] = e.getKey()[0]; + unicodeRangeScripts[i] = e.getValue(); + i++; + } + } + + /** + * Obtain the Unicode script associated with the given Unicode codepoint. + * + * @param codePoint + * @return A Unicode script string, or {@code #UNKNOWN} if unknown + */ + private static String getUnicodeScript(int codePoint) + { + ensureValidCodePoint(codePoint); + int type = Character.getType(codePoint); + if (type == Character.UNASSIGNED) + { + return UNKNOWN; + } + int scriptIndex = Arrays.binarySearch(unicodeRangeStarts, codePoint); + if (scriptIndex < 0) + { + scriptIndex = -scriptIndex - 2; + } + return unicodeRangeScripts[scriptIndex]; + } + + /** + * Obtain the OpenType script tags associated with the given Unicode codepoint. + * + * The result may contain the special value {@code #INHERITED}, which indicates that the + * codepoint's script can only be determined by its context. + * + * Unknown codepoints are mapped to {@code #TAG_DEFAULT}. + * + * @param codePoint + * @return An array of four-char script tags + */ + public static String[] getScriptTags(int codePoint) + { + ensureValidCodePoint(codePoint); + String unicode = getUnicodeScript(codePoint); + return UNICODE_SCRIPT_TO_OPENTYPE_TAG_MAP.get(unicode); + } + + private static void ensureValidCodePoint(int codePoint) + { + if (codePoint < Character.MIN_CODE_POINT || codePoint > Character.MAX_CODE_POINT) + { + throw new IllegalArgumentException("Invalid codepoint: " + codePoint); + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java new file mode 100644 index 00000000000..6764dcdd400 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/PostScriptTable.java @@ -0,0 +1,324 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class PostScriptTable extends TTFTable +{ + private static final Log LOG = LogFactory.getLog(PostScriptTable.class); + private float formatType; + private float italicAngle; + private short underlinePosition; + private short underlineThickness; + private long isFixedPitch; + private long minMemType42; + private long maxMemType42; + private long mimMemType1; + private long maxMemType1; + private String[] glyphNames = null; + + /** + * A tag that identifies this table type. + */ + public static final String TAG = "post"; + + PostScriptTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + formatType = data.read32Fixed(); + italicAngle = data.read32Fixed(); + underlinePosition = data.readSignedShort(); + underlineThickness = data.readSignedShort(); + isFixedPitch = data.readUnsignedInt(); + minMemType42 = data.readUnsignedInt(); + maxMemType42 = data.readUnsignedInt(); + mimMemType1 = data.readUnsignedInt(); + maxMemType1 = data.readUnsignedInt(); + + if (Float.compare(formatType, 1.0f) == 0) + { + /* + * This TrueType font file contains exactly the 258 glyphs in the standard Macintosh TrueType. + */ + glyphNames = new String[WGL4Names.NUMBER_OF_MAC_GLYPHS]; + System.arraycopy(WGL4Names.MAC_GLYPH_NAMES, 0, glyphNames, 0, WGL4Names.NUMBER_OF_MAC_GLYPHS); + } + else if (Float.compare(formatType, 2.0f) == 0) + { + int numGlyphs = data.readUnsignedShort(); + int[] glyphNameIndex = new int[numGlyphs]; + glyphNames = new String[numGlyphs]; + int maxIndex = Integer.MIN_VALUE; + for (int i = 0; i < numGlyphs; i++) + { + int index = data.readUnsignedShort(); + glyphNameIndex[i] = index; + // PDFBOX-808: Index numbers between 32768 and 65535 are + // reserved for future use, so we should just ignore them + if (index <= 32767) + { + maxIndex = Math.max(maxIndex, index); + } + } + String[] nameArray = null; + if (maxIndex >= WGL4Names.NUMBER_OF_MAC_GLYPHS) + { + nameArray = new String[maxIndex - WGL4Names.NUMBER_OF_MAC_GLYPHS + 1]; + for (int i = 0; i < maxIndex - WGL4Names.NUMBER_OF_MAC_GLYPHS + 1; i++) + { + int numberOfChars = data.readUnsignedByte(); + nameArray[i] = data.readString(numberOfChars); + } + } + for (int i = 0; i < numGlyphs; i++) + { + int index = glyphNameIndex[i]; + if (index < WGL4Names.NUMBER_OF_MAC_GLYPHS) + { + glyphNames[i] = WGL4Names.MAC_GLYPH_NAMES[index]; + } + else if (index >= WGL4Names.NUMBER_OF_MAC_GLYPHS && index <= 32767 && nameArray != null) + { + glyphNames[i] = nameArray[index - WGL4Names.NUMBER_OF_MAC_GLYPHS]; + } + else + { + // PDFBOX-808: Index numbers between 32768 and 65535 are + // reserved for future use, so we should just ignore them + glyphNames[i] = ".undefined"; + } + } + } + else if (Float.compare(formatType, 2.5f) == 0) + { + int[] glyphNameIndex = new int[ttf.getNumberOfGlyphs()]; + for (int i = 0; i < glyphNameIndex.length; i++) + { + int offset = data.readSignedByte(); + glyphNameIndex[i] = i + 1 + offset; + } + glyphNames = new String[glyphNameIndex.length]; + for (int i = 0; i < glyphNames.length; i++) + { + String name = WGL4Names.MAC_GLYPH_NAMES[glyphNameIndex[i]]; + if (name != null) + { + glyphNames[i] = name; + } + } + + } + else if (Float.compare(formatType, 3.0f) == 0) + { + // no postscript information is provided. + LOG.debug("No PostScript name information is provided for the font " + font.getName()); + } + initialized = true; + } + + /** + * @return Returns the formatType. + */ + public float getFormatType() + { + return formatType; + } + + /** + * @param formatTypeValue The formatType to set. + */ + public void setFormatType(float formatTypeValue) + { + this.formatType = formatTypeValue; + } + + /** + * @return Returns the isFixedPitch. + */ + public long getIsFixedPitch() + { + return isFixedPitch; + } + + /** + * @param isFixedPitchValue The isFixedPitch to set. + */ + public void setIsFixedPitch(long isFixedPitchValue) + { + this.isFixedPitch = isFixedPitchValue; + } + + /** + * @return Returns the italicAngle. + */ + public float getItalicAngle() + { + return italicAngle; + } + + /** + * @param italicAngleValue The italicAngle to set. + */ + public void setItalicAngle(float italicAngleValue) + { + this.italicAngle = italicAngleValue; + } + + /** + * @return Returns the maxMemType1. + */ + public long getMaxMemType1() + { + return maxMemType1; + } + + /** + * @param maxMemType1Value The maxMemType1 to set. + */ + public void setMaxMemType1(long maxMemType1Value) + { + this.maxMemType1 = maxMemType1Value; + } + + /** + * @return Returns the maxMemType42. + */ + public long getMaxMemType42() + { + return maxMemType42; + } + + /** + * @param maxMemType42Value The maxMemType42 to set. + */ + public void setMaxMemType42(long maxMemType42Value) + { + this.maxMemType42 = maxMemType42Value; + } + + /** + * @return Returns the mimMemType1. + */ + public long getMinMemType1() + { + return mimMemType1; + } + + /** + * @param mimMemType1Value The mimMemType1 to set. + */ + public void setMimMemType1(long mimMemType1Value) + { + this.mimMemType1 = mimMemType1Value; + } + + /** + * @return Returns the minMemType42. + */ + public long getMinMemType42() + { + return minMemType42; + } + + /** + * @param minMemType42Value The minMemType42 to set. + */ + public void setMinMemType42(long minMemType42Value) + { + this.minMemType42 = minMemType42Value; + } + + /** + * @return Returns the underlinePosition. + */ + public short getUnderlinePosition() + { + return underlinePosition; + } + + /** + * @param underlinePositionValue The underlinePosition to set. + */ + public void setUnderlinePosition(short underlinePositionValue) + { + this.underlinePosition = underlinePositionValue; + } + + /** + * @return Returns the underlineThickness. + */ + public short getUnderlineThickness() + { + return underlineThickness; + } + + /** + * @param underlineThicknessValue The underlineThickness to set. + */ + public void setUnderlineThickness(short underlineThicknessValue) + { + this.underlineThickness = underlineThicknessValue; + } + + /** + * @return Returns the glyphNames. + */ + public String[] getGlyphNames() + { + return glyphNames; + } + + /** + * @param glyphNamesValue The glyphNames to set. + */ + public void setGlyphNames(String[] glyphNamesValue) + { + this.glyphNames = glyphNamesValue; + } + + /** + * @return Returns the glyph name. + */ + public String getName(int gid) + { + if (gid < 0 || glyphNames == null || gid >= glyphNames.length) + { + return null; + } + return glyphNames[gid]; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/RAFDataStream.java b/fontbox/src/main/java/org/apache/fontbox/ttf/RAFDataStream.java new file mode 100644 index 00000000000..0e54827ccdc --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/RAFDataStream.java @@ -0,0 +1,190 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; + +/** + * An implementation of the TTFDataStream that goes against a RAF. + * + * @author Ben Litchfield + */ +class RAFDataStream extends TTFDataStream +{ + private RandomAccessFile raf = null; + private File ttfFile = null; + private static final int BUFFERSIZE = 16384; + + /** + * Constructor. + * + * @param name The raf file. + * @param mode The mode to open the RAF. + * + * @throws IOException If there is a problem creating the RAF. + * + * @see RandomAccessFile#RandomAccessFile( String, String ) + */ + RAFDataStream(String name, String mode) throws IOException + { + this( new File( name ), mode ); + } + + /** + * Constructor. + * + * @param file The raf file. + * @param mode The mode to open the RAF. + * + * @throws IOException If there is a problem creating the RAF. + * + * @see RandomAccessFile#RandomAccessFile( File, String ) + */ + RAFDataStream(File file, String mode) throws IOException + { + raf = new BufferedRandomAccessFile(file, mode, BUFFERSIZE); + ttfFile = file; + } + + /** + * Read a signed short. + * + * @return An signed short. + * @throws IOException If there is an error reading the data. + * @see RandomAccessFile#readShort() + */ + @Override + public short readSignedShort() throws IOException + { + return raf.readShort(); + } + + /** + * Get the current position in the stream. + * @return The current position in the stream. + * @throws IOException If an error occurs while reading the stream. + */ + @Override + public long getCurrentPosition() throws IOException + { + return raf.getFilePointer(); + } + + /** + * Close the underlying resources. + * + * @throws IOException If there is an error closing the resources. + */ + @Override + public void close() throws IOException + { + if (raf != null) + { + raf.close(); + raf = null; + } + } + + /** + * Read an unsigned byte. + * @return An unsigned byte. + * @throws IOException If there is an error reading the data. + * @see RandomAccessFile#read() + */ + @Override + public int read() throws IOException + { + return raf.read(); + } + + /** + * Read an unsigned short. + * + * @return An unsigned short. + * @throws IOException If there is an error reading the data. + * @see RandomAccessFile#readUnsignedShort() + */ + @Override + public int readUnsignedShort() throws IOException + { + return raf.readUnsignedShort(); + } + + /** + * Read a signed 64-bit integer. + * + * @return eight bytes interpreted as a long. + * @throws IOException If there is an error reading the data. + * @see RandomAccessFile#readLong() + */ + @Override + public long readLong() throws IOException + { + return raf.readLong(); + } + + /** + * Seek into the datasource. + * + * @param pos The position to seek to. + * @throws IOException If there is an error seeking to that position. + */ + @Override + public void seek(long pos) throws IOException + { + raf.seek( pos ); + } + + /** + * @see java.io.InputStream#read( byte[], int, int ) + * + * @param b The buffer to write to. + * @param off The offset into the buffer. + * @param len The length into the buffer. + * + * @return The number of bytes read. + * + * @throws IOException If there is an error reading from the stream. + */ + @Override + public int read(byte[] b, int off, int len) throws IOException + { + return raf.read(b, off, len); + } + + /** + * {@inheritDoc} + */ + @Override + public InputStream getOriginalData() throws IOException + { + return new FileInputStream( ttfFile ); + } + + /** + * {@inheritDoc} + */ + @Override + public long getOriginalDataSize() + { + return ttfFile.length(); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/SubstitutingCmapLookup.java b/fontbox/src/main/java/org/apache/fontbox/ttf/SubstitutingCmapLookup.java new file mode 100644 index 00000000000..a053cf10ea4 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/SubstitutingCmapLookup.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.util.List; + +/** + * A cmap lookup that performs substitution via the 'GSUB' table. + * + * @author Aaron Madlon-Kay + */ +public class SubstitutingCmapLookup implements CmapLookup +{ + private final CmapSubtable cmap; + private final GlyphSubstitutionTable gsub; + private final List enabledFeatures; + + public SubstitutingCmapLookup(CmapSubtable cmap, GlyphSubstitutionTable gsub, + List enabledFeatures) + { + this.cmap = cmap; + this.gsub = gsub; + this.enabledFeatures = enabledFeatures; + } + + @Override + public int getGlyphId(int characterCode) + { + int gid = cmap.getGlyphId(characterCode); + String[] scriptTags = OpenTypeScript.getScriptTags(characterCode); + return gsub.getSubstitution(gid, scriptTags, enabledFeatures); + } + + @Override + public List getCharCodes(int gid) + { + return cmap.getCharCodes(gsub.getUnsubstitution(gid)); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TTCDataStream.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TTCDataStream.java new file mode 100644 index 00000000000..96abcfb0b7f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TTCDataStream.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.io.IOException; +import java.io.InputStream; + +/** + * A wrapper for a TTF stream inside a TTC file, does not close the underlying shared stream. + * + * @author John Hewson + */ +class TTCDataStream extends TTFDataStream +{ + private final TTFDataStream stream; + + TTCDataStream(TTFDataStream stream) + { + this.stream = stream; + } + + @Override + public int read() throws IOException + { + return stream.read(); + } + + @Override + public long readLong() throws IOException + { + return stream.readLong(); + } + + @Override + public int readUnsignedShort() throws IOException + { + return stream.readUnsignedShort(); + } + + @Override + public short readSignedShort() throws IOException + { + return stream.readSignedShort(); + } + + @Override + public void close() throws IOException + { + // don't close the underlying stream, as it is shared by all fonts from the same TTC + // TrueTypeCollection.close() must be called instead + } + + @Override + public void seek(long pos) throws IOException + { + stream.seek(pos); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException + { + return stream.read(b, off, len); + } + + @Override + public long getCurrentPosition() throws IOException + { + return stream.getCurrentPosition(); + } + + @Override + public InputStream getOriginalData() throws IOException + { + return stream.getOriginalData(); + } + + @Override + public long getOriginalDataSize() + { + return stream.getOriginalDataSize(); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java new file mode 100644 index 00000000000..bf1e19351d1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java @@ -0,0 +1,314 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.Closeable; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +import org.apache.fontbox.util.Charsets; + +/** + * An interface into a data stream. + * + * @author Ben Litchfield + */ +abstract class TTFDataStream implements Closeable +{ + TTFDataStream() + { + } + + /** + * Read a 16.16 fixed value, where the first 16 bits are the decimal and the last 16 bits are the fraction. + * + * @return A 32 bit value. + * @throws IOException If there is an error reading the data. + */ + public float read32Fixed() throws IOException + { + float retval = 0; + retval = readSignedShort(); + retval += (readUnsignedShort() / 65536.0); + return retval; + } + + /** + * Read a fixed length ascii string. + * + * @param length The length of the string to read. + * @return A string of the desired length. + * @throws IOException If there is an error reading the data. + */ + public String readString(int length) throws IOException + { + return readString(length, Charsets.ISO_8859_1); + } + + /** + * Read a fixed length string. + * + * @param length The length of the string to read in bytes. + * @param charset The expected character set of the string. + * @return A string of the desired length. + * @throws IOException If there is an error reading the data. + */ + public String readString(int length, String charset) throws IOException + { + byte[] buffer = read(length); + return new String(buffer, charset); + } + + /** + * Read a fixed length string. + * + * @param length The length of the string to read in bytes. + * @param charset The expected character set of the string. + * @return A string of the desired length. + * @throws IOException If there is an error reading the data. + */ + public String readString(int length, Charset charset) throws IOException + { + byte[] buffer = read(length); + return new String(buffer, charset); + } + /** + * Read an unsigned byte. + * + * @return An unsigned byte. + * @throws IOException If there is an error reading the data. + */ + public abstract int read() throws IOException; + + /** + * Read an unsigned byte. + * + * @return An unsigned byte. + * @throws IOException If there is an error reading the data. + */ + public abstract long readLong() throws IOException; + + /** + * Read a signed byte. + * + * @return A signed byte. + * @throws IOException If there is an error reading the data. + */ + public int readSignedByte() throws IOException + { + int signedByte = read(); + return signedByte <= 127 ? signedByte : signedByte - 256; + } + + /** + * Read a unsigned byte. Similar to {@link #read()}, but throws an exception if EOF is unexpectedly reached. + * + * @return A unsigned byte. + * @throws IOException If there is an error reading the data. + */ + public int readUnsignedByte() throws IOException + { + int unsignedByte = read(); + if (unsignedByte == -1) + { + throw new EOFException("premature EOF"); + } + return unsignedByte; + } + + /** + * Read an unsigned integer. + * + * @return An unsiged integer. + * @throws IOException If there is an error reading the data. + */ + public long readUnsignedInt() throws IOException + { + long byte1 = read(); + long byte2 = read(); + long byte3 = read(); + long byte4 = read(); + if (byte4 < 0) + { + throw new EOFException(); + } + return (byte1 << 24) + (byte2 << 16) + (byte3 << 8) + (byte4 << 0); + } + + /** + * Read an unsigned short. + * + * @return An unsigned short. + * @throws IOException If there is an error reading the data. + */ + public abstract int readUnsignedShort() throws IOException; + + /** + * Read an unsigned byte array. + * + * @param length the length of the array to be read + * @return An unsigned byte array. + * @throws IOException If there is an error reading the data. + */ + public int[] readUnsignedByteArray(int length) throws IOException + { + int[] array = new int[length]; + for (int i = 0; i < length; i++) + { + array[i] = read(); + } + return array; + } + + /** + * Read an unsigned short array. + * + * @param length The length of the array to read. + * @return An unsigned short array. + * @throws IOException If there is an error reading the data. + */ + public int[] readUnsignedShortArray(int length) throws IOException + { + int[] array = new int[length]; + for (int i = 0; i < length; i++) + { + array[i] = readUnsignedShort(); + } + return array; + } + + /** + * Read an signed short. + * + * @return An signed short. + * @throws IOException If there is an error reading the data. + */ + public abstract short readSignedShort() throws IOException; + + /** + * Read an eight byte international date. + * + * @return An signed short. + * @throws IOException If there is an error reading the data. + */ + public Calendar readInternationalDate() throws IOException + { + long secondsSince1904 = readLong(); + Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC")); + cal.set(1904, 0, 1, 0, 0, 0); + cal.set(Calendar.MILLISECOND, 0); + long millisFor1904 = cal.getTimeInMillis(); + millisFor1904 += (secondsSince1904 * 1000); + cal.setTimeInMillis(millisFor1904); + return cal; + } + + /** + * Reads a tag, an arrau of four uint8s used to identify a script, language system, feature, + * or baseline. + */ + public String readTag() throws IOException + { + return new String(read(4), Charsets.US_ASCII); + } + + /** + * Close the underlying resources. + * + * @throws IOException If there is an error closing the resources. + */ + @Override + public abstract void close() throws IOException; + + /** + * Seek into the datasource. + * + * @param pos The position to seek to. + * @throws IOException If there is an error seeking to that position. + */ + public abstract void seek(long pos) throws IOException; + + /** + * Read a specific number of bytes from the stream. + * + * @param numberOfBytes The number of bytes to read. + * @return The byte buffer. + * @throws IOException If there is an error while reading. + */ + public byte[] read(int numberOfBytes) throws IOException + { + byte[] data = new byte[numberOfBytes]; + int amountRead = 0; + int totalAmountRead = 0; + // read at most numberOfBytes bytes from the stream. + while (totalAmountRead < numberOfBytes + && (amountRead = read(data, totalAmountRead, numberOfBytes - totalAmountRead)) != -1) + { + totalAmountRead += amountRead; + } + if (totalAmountRead == numberOfBytes) + { + return data; + } + else + { + throw new IOException("Unexpected end of TTF stream reached"); + } + } + + /** + * @see java.io.InputStream#read(byte[], int, int ) + * + * @param b The buffer to write to. + * @param off The offset into the buffer. + * @param len The length into the buffer. + * + * @return The number of bytes read, or -1 at the end of the stream + * + * @throws IOException If there is an error reading from the stream. + */ + public abstract int read(byte[] b, int off, int len) throws IOException; + + /** + * Get the current position in the stream. + * + * @return The current position in the stream. + * @throws IOException If an error occurs while reading the stream. + */ + public abstract long getCurrentPosition() throws IOException; + + /** + * This will get the original data file that was used for this stream. + * + * @return The data that was read from. + * @throws IOException If there is an issue reading the data. + */ + public abstract InputStream getOriginalData() throws IOException; + + /** + * This will get the original data size that was used for this stream. + * + * @return The size of the original data. + * @throws IOException If there is an issue reading the data. + */ + public abstract long getOriginalDataSize(); +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java new file mode 100644 index 00000000000..42252e299ea --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java @@ -0,0 +1,316 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/** + * TrueType font file parser. + * + * @author Ben Litchfield + */ +public class TTFParser +{ + private boolean isEmbedded = false; + private boolean parseOnDemandOnly = false; + + /** + * Constructor. + */ + public TTFParser() + { + this(false); + } + + /** + * Constructor. + * + * @param isEmbedded true if the font is embedded in PDF + */ + public TTFParser(boolean isEmbedded) + { + this(isEmbedded, false); + } + + /** + * Constructor. + * + * @param isEmbedded true if the font is embedded in PDF + * @param parseOnDemand true if the tables of the font should be parsed on demand + */ + public TTFParser(boolean isEmbedded, boolean parseOnDemand) + { + this.isEmbedded = isEmbedded; + parseOnDemandOnly = parseOnDemand; + } + + /** + * Parse a file and return a TrueType font. + * + * @param ttfFile The TrueType font filename. + * @return A TrueType font. + * @throws IOException If there is an error parsing the TrueType font. + */ + public TrueTypeFont parse(String ttfFile) throws IOException + { + return parse(new File(ttfFile)); + } + + /** + * Parse a file and return a TrueType font. + * + * @param ttfFile The TrueType font file. + * @return A TrueType font. + * @throws IOException If there is an error parsing the TrueType font. + */ + public TrueTypeFont parse(File ttfFile) throws IOException + { + RAFDataStream raf = new RAFDataStream(ttfFile, "r"); + try + { + return parse(raf); + } + catch (IOException ex) + { + // close only on error (file is still being accessed later) + raf.close(); + throw ex; + } + } + + /** + * Parse an input stream and return a TrueType font. + * + * @param inputStream The TTF data stream to parse from. It will be closed before returning. + * @return A TrueType font. + * @throws IOException If there is an error parsing the TrueType font. + */ + public TrueTypeFont parse(InputStream inputStream) throws IOException + { + return parse(new MemoryTTFDataStream(inputStream)); + } + + /** + * Parse an input stream and return a TrueType font that is to be embedded. + * + * @param inputStream The TTF data stream to parse from. It will be closed before returning. + * @return A TrueType font. + * @throws IOException If there is an error parsing the TrueType font. + */ + public TrueTypeFont parseEmbedded(InputStream inputStream) throws IOException + { + this.isEmbedded = true; + return parse(new MemoryTTFDataStream(inputStream)); + } + + /** + * Parse a file and get a true type font. + * + * @param raf The TTF file. + * @return A TrueType font. + * @throws IOException If there is an error parsing the TrueType font. + */ + TrueTypeFont parse(TTFDataStream raf) throws IOException + { + TrueTypeFont font = newFont(raf); + font.setVersion(raf.read32Fixed()); + int numberOfTables = raf.readUnsignedShort(); + int searchRange = raf.readUnsignedShort(); + int entrySelector = raf.readUnsignedShort(); + int rangeShift = raf.readUnsignedShort(); + for (int i = 0; i < numberOfTables; i++) + { + TTFTable table = readTableDirectory(font, raf); + + // skip tables with zero length + if (table != null) + { + font.addTable(table); + } + } + // parse tables if wanted + if (!parseOnDemandOnly) + { + parseTables(font); + } + + return font; + } + + TrueTypeFont newFont(TTFDataStream raf) + { + return new TrueTypeFont(raf); + } + + /** + * Parse all tables and check if all needed tables are present. + * + * @param font the TrueTypeFont instance holding the parsed data. + * @throws IOException If there is an error parsing the TrueType font. + */ + private void parseTables(TrueTypeFont font) throws IOException + { + for (TTFTable table : font.getTables()) + { + if (!table.getInitialized()) + { + font.readTable(table); + } + } + + boolean isPostScript = allowCFF() && font.tables.containsKey(CFFTable.TAG); + + HeaderTable head = font.getHeader(); + if (head == null) + { + throw new IOException("head is mandatory"); + } + + HorizontalHeaderTable hh = font.getHorizontalHeader(); + if (hh == null) + { + throw new IOException("hhead is mandatory"); + } + + MaximumProfileTable maxp = font.getMaximumProfile(); + if (maxp == null) + { + throw new IOException("maxp is mandatory"); + } + + PostScriptTable post = font.getPostScript(); + if (post == null && !isEmbedded) + { + // in an embedded font this table is optional + throw new IOException("post is mandatory"); + } + + if (!isPostScript) + { + IndexToLocationTable loc = font.getIndexToLocation(); + if (loc == null) + { + throw new IOException("loca is mandatory"); + } + + if (font.getGlyph() == null) + { + throw new IOException("glyf is mandatory"); + } + } + + if (font.getNaming() == null && !isEmbedded) + { + throw new IOException("name is mandatory"); + } + + if (font.getHorizontalMetrics() == null) + { + throw new IOException("hmtx is mandatory"); + } + + if (!isEmbedded && font.getCmap() == null) + { + throw new IOException("cmap is mandatory"); + } + } + + protected boolean allowCFF() + { + return false; + } + + private TTFTable readTableDirectory(TrueTypeFont font, TTFDataStream raf) throws IOException + { + TTFTable table; + String tag = raf.readString(4); + switch (tag) + { + case CmapTable.TAG: + table = new CmapTable(font); + break; + case GlyphTable.TAG: + table = new GlyphTable(font); + break; + case HeaderTable.TAG: + table = new HeaderTable(font); + break; + case HorizontalHeaderTable.TAG: + table = new HorizontalHeaderTable(font); + break; + case HorizontalMetricsTable.TAG: + table = new HorizontalMetricsTable(font); + break; + case IndexToLocationTable.TAG: + table = new IndexToLocationTable(font); + break; + case MaximumProfileTable.TAG: + table = new MaximumProfileTable(font); + break; + case NamingTable.TAG: + table = new NamingTable(font); + break; + case OS2WindowsMetricsTable.TAG: + table = new OS2WindowsMetricsTable(font); + break; + case PostScriptTable.TAG: + table = new PostScriptTable(font); + break; + case DigitalSignatureTable.TAG: + table = new DigitalSignatureTable(font); + break; + case KerningTable.TAG: + table = new KerningTable(font); + break; + case VerticalHeaderTable.TAG: + table = new VerticalHeaderTable(font); + break; + case VerticalMetricsTable.TAG: + table = new VerticalMetricsTable(font); + break; + case VerticalOriginTable.TAG: + table = new VerticalOriginTable(font); + break; + case GlyphSubstitutionTable.TAG: + table = new GlyphSubstitutionTable(font); + break; + default: + table = readTable(font, tag); + break; + } + table.setTag(tag); + table.setCheckSum(raf.readUnsignedInt()); + table.setOffset(raf.readUnsignedInt()); + table.setLength(raf.readUnsignedInt()); + + // skip tables with zero length (except glyf) + if (table.getLength() == 0 && !tag.equals(GlyphTable.TAG)) + { + return null; + } + + return table; + } + + protected TTFTable readTable(TrueTypeFont font, String tag) + { + // unknown table type but read it anyway. + return new TTFTable(font); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java new file mode 100755 index 00000000000..391983452f1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java @@ -0,0 +1,1137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TimeZone; +import java.util.TreeMap; +import java.util.TreeSet; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Subsetter for TrueType (TTF) fonts. + * + *

Originally developed by Wolfgang Glas for + * Sketch. + * + * @author Wolfgang Glas + */ +public final class TTFSubsetter +{ + private static final Log LOG = LogFactory.getLog(TTFSubsetter.class); + + private static final byte[] PAD_BUF = new byte[] { 0, 0, 0 }; + + private final TrueTypeFont ttf; + private final CmapLookup unicodeCmap; + private final SortedMap uniToGID; + + private final List keepTables; + private final SortedSet glyphIds; // new glyph ids + private String prefix; + private boolean hasAddedCompoundReferences; + + /** + * Creates a subsetter for the given font. + * + * @param ttf the font to be subset + */ + public TTFSubsetter(TrueTypeFont ttf) throws IOException + { + this(ttf, null); + } + + /** + * Creates a subsetter for the given font. + * + * @param ttf the font to be subset + * @param tables optional tables to keep if present + */ + public TTFSubsetter(TrueTypeFont ttf, List tables) throws IOException + { + this.ttf = ttf; + this.keepTables = tables; + + uniToGID = new TreeMap<>(); + glyphIds = new TreeSet<>(); + + // find the best Unicode cmap + this.unicodeCmap = ttf.getUnicodeCmapLookup(); + + // always copy GID 0 + glyphIds.add(0); + } + + /** + * Sets the prefix to add to the font's PostScript name. + * + * @param prefix + */ + public void setPrefix(String prefix) + { + this.prefix = prefix; + } + + /** + * Add the given character code to the subset. + * + * @param unicode character code + */ + public void add(int unicode) + { + int gid = unicodeCmap.getGlyphId(unicode); + if (gid != 0) + { + uniToGID.put(unicode, gid); + glyphIds.add(gid); + } + } + + /** + * Add the given character codes to the subset. + * + * @param unicodeSet character code set + */ + public void addAll(Set unicodeSet) + { + for (int unicode : unicodeSet) + { + add(unicode); + } + } + + /** + * Returns the map of new -> old GIDs. + */ + public Map getGIDMap() throws IOException + { + addCompoundReferences(); + + Map newToOld = new HashMap<>(); + int newGID = 0; + for (int oldGID : glyphIds) + { + newToOld.put(newGID, oldGID); + newGID++; + } + return newToOld; + } + + /** + * @param out The data output stream. + * @param nTables The number of table. + * @return The file offset of the first TTF table to write. + * @throws IOException Upon errors. + */ + private long writeFileHeader(DataOutputStream out, int nTables) throws IOException + { + out.writeInt(0x00010000); + out.writeShort(nTables); + + int mask = Integer.highestOneBit(nTables); + int searchRange = mask * 16; + out.writeShort(searchRange); + + int entrySelector = log2(mask); + + out.writeShort(entrySelector); + + // numTables * 16 - searchRange + int last = 16 * nTables - searchRange; + out.writeShort(last); + + return 0x00010000L + toUInt32(nTables, searchRange) + toUInt32(entrySelector, last); + } + + private long writeTableHeader(DataOutputStream out, String tag, long offset, byte[] bytes) + throws IOException + { + long checksum = 0; + for (int nup = 0, n = bytes.length; nup < n; nup++) + { + checksum += (bytes[nup] & 0xffL) << 24 - nup % 4 * 8; + } + checksum &= 0xffffffffL; + + byte[] tagbytes = tag.getBytes("US-ASCII"); + + out.write(tagbytes, 0, 4); + out.writeInt((int)checksum); + out.writeInt((int)offset); + out.writeInt(bytes.length); + + // account for the checksum twice, once for the header field, once for the content itself + return toUInt32(tagbytes) + checksum + checksum + offset + bytes.length; + } + + private void writeTableBody(OutputStream os, byte[] bytes) throws IOException + { + int n = bytes.length; + os.write(bytes); + if (n % 4 != 0) + { + os.write(PAD_BUF, 0, 4 - n % 4); + } + } + + private byte[] buildHeadTable() throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + HeaderTable h = ttf.getHeader(); + writeFixed(out, h.getVersion()); + writeFixed(out, h.getFontRevision()); + writeUint32(out, 0); // h.getCheckSumAdjustment() + writeUint32(out, h.getMagicNumber()); + writeUint16(out, h.getFlags()); + writeUint16(out, h.getUnitsPerEm()); + writeLongDateTime(out, h.getCreated()); + writeLongDateTime(out, h.getModified()); + writeSInt16(out, h.getXMin()); + writeSInt16(out, h.getYMin()); + writeSInt16(out, h.getXMax()); + writeSInt16(out, h.getYMax()); + writeUint16(out, h.getMacStyle()); + writeUint16(out, h.getLowestRecPPEM()); + writeSInt16(out, h.getFontDirectionHint()); + // force long format of 'loca' table + writeSInt16(out, (short)1); // h.getIndexToLocFormat() + writeSInt16(out, h.getGlyphDataFormat()); + out.flush(); + + return bos.toByteArray(); + } + + private byte[] buildHheaTable() throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + HorizontalHeaderTable h = ttf.getHorizontalHeader(); + writeFixed(out, h.getVersion()); + writeSInt16(out, h.getAscender()); + writeSInt16(out, h.getDescender()); + writeSInt16(out, h.getLineGap()); + writeUint16(out, h.getAdvanceWidthMax()); + writeSInt16(out, h.getMinLeftSideBearing()); + writeSInt16(out, h.getMinRightSideBearing()); + writeSInt16(out, h.getXMaxExtent()); + writeSInt16(out, h.getCaretSlopeRise()); + writeSInt16(out, h.getCaretSlopeRun()); + writeSInt16(out, h.getReserved1()); // caretOffset + writeSInt16(out, h.getReserved2()); + writeSInt16(out, h.getReserved3()); + writeSInt16(out, h.getReserved4()); + writeSInt16(out, h.getReserved5()); + writeSInt16(out, h.getMetricDataFormat()); + + // is there a GID >= numberOfHMetrics ? Then keep the last entry of original hmtx table, + // (add if it isn't in our set of GIDs), see also in buildHmtxTable() + int hmetrics = glyphIds.subSet(0, h.getNumberOfHMetrics()).size(); + if (glyphIds.last() >= h.getNumberOfHMetrics() && !glyphIds.contains(h.getNumberOfHMetrics()-1)) + { + ++hmetrics; + } + writeUint16(out, hmetrics); + + out.flush(); + return bos.toByteArray(); + } + + private boolean shouldCopyNameRecord(NameRecord nr) + { + return nr.getPlatformId() == NameRecord.PLATFORM_WINDOWS + && nr.getPlatformEncodingId() == NameRecord.ENCODING_WINDOWS_UNICODE_BMP + && nr.getLanguageId() == NameRecord.LANGUGAE_WINDOWS_EN_US + && nr.getNameId() >= 0 && nr.getNameId() < 7; + } + + private byte[] buildNameTable() throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + NamingTable name = ttf.getNaming(); + if (name == null || keepTables != null && !keepTables.contains("name")) + { + return null; + } + + List nameRecords = name.getNameRecords(); + int numRecords = 0; + for (NameRecord record : nameRecords) + { + if (shouldCopyNameRecord(record)) + { + numRecords++; + } + } + writeUint16(out, 0); + writeUint16(out, numRecords); + writeUint16(out, 2*3 + 2*6 * numRecords); + + if (numRecords == 0) + { + return null; + } + + byte[][] names = new byte[numRecords][]; + int j = 0; + for (NameRecord record : nameRecords) + { + if (shouldCopyNameRecord(record)) + { + int platform = record.getPlatformId(); + int encoding = record.getPlatformEncodingId(); + String charset = "ISO-8859-1"; + + if (platform == CmapTable.PLATFORM_WINDOWS && + encoding == CmapTable.ENCODING_WIN_UNICODE_BMP) + { + charset = "UTF-16BE"; + } + else if (platform == 2) // ISO [deprecated]= + { + if (encoding == 0) // 7-bit ASCII + { + charset = "US-ASCII"; + } + else if (encoding == 1) // ISO 10646= + { + //not sure is this is correct?? + charset = "UTF16-BE"; + } + else if (encoding == 2) // ISO 8859-1 + { + charset = "ISO-8859-1"; + } + } + String value = record.getString(); + if (record.getNameId() == 6 && prefix != null) + { + value = prefix + value; + } + names[j] = value.getBytes(charset); + j++; + } + } + + int offset = 0; + j = 0; + for (NameRecord nr : nameRecords) + { + if (shouldCopyNameRecord(nr)) + { + writeUint16(out, nr.getPlatformId()); + writeUint16(out, nr.getPlatformEncodingId()); + writeUint16(out, nr.getLanguageId()); + writeUint16(out, nr.getNameId()); + writeUint16(out, names[j].length); + writeUint16(out, offset); + offset += names[j].length; + j++; + } + } + + for (int i = 0; i < numRecords; i++) + { + out.write(names[i]); + } + + out.flush(); + return bos.toByteArray(); + } + + private byte[] buildMaxpTable() throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + MaximumProfileTable p = ttf.getMaximumProfile(); + writeFixed(out, 1.0); + writeUint16(out, glyphIds.size()); + writeUint16(out, p.getMaxPoints()); + writeUint16(out, p.getMaxContours()); + writeUint16(out, p.getMaxCompositePoints()); + writeUint16(out, p.getMaxCompositeContours()); + writeUint16(out, p.getMaxZones()); + writeUint16(out, p.getMaxTwilightPoints()); + writeUint16(out, p.getMaxStorage()); + writeUint16(out, p.getMaxFunctionDefs()); + writeUint16(out, p.getMaxInstructionDefs()); + writeUint16(out, p.getMaxStackElements()); + writeUint16(out, p.getMaxSizeOfInstructions()); + writeUint16(out, p.getMaxComponentElements()); + writeUint16(out, p.getMaxComponentDepth()); + + out.flush(); + return bos.toByteArray(); + } + + private byte[] buildOS2Table() throws IOException + { + OS2WindowsMetricsTable os2 = ttf.getOS2Windows(); + if (os2 == null || uniToGID.isEmpty() || keepTables != null && !keepTables.contains("OS/2")) + { + return null; + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + writeUint16(out, os2.getVersion()); + writeSInt16(out, os2.getAverageCharWidth()); + writeUint16(out, os2.getWeightClass()); + writeUint16(out, os2.getWidthClass()); + + writeSInt16(out, os2.getFsType()); + + writeSInt16(out, os2.getSubscriptXSize()); + writeSInt16(out, os2.getSubscriptYSize()); + writeSInt16(out, os2.getSubscriptXOffset()); + writeSInt16(out, os2.getSubscriptYOffset()); + + writeSInt16(out, os2.getSuperscriptXSize()); + writeSInt16(out, os2.getSuperscriptYSize()); + writeSInt16(out, os2.getSuperscriptXOffset()); + writeSInt16(out, os2.getSuperscriptYOffset()); + + writeSInt16(out, os2.getStrikeoutSize()); + writeSInt16(out, os2.getStrikeoutPosition()); + writeSInt16(out, (short)os2.getFamilyClass()); + out.write(os2.getPanose()); + + writeUint32(out, 0); + writeUint32(out, 0); + writeUint32(out, 0); + writeUint32(out, 0); + + out.write(os2.getAchVendId().getBytes("US-ASCII")); + + writeUint16(out, os2.getFsSelection()); + writeUint16(out, uniToGID.firstKey()); + writeUint16(out, uniToGID.lastKey()); + writeUint16(out, os2.getTypoAscender()); + writeUint16(out, os2.getTypoDescender()); + writeUint16(out, os2.getTypoLineGap()); + writeUint16(out, os2.getWinAscent()); + writeUint16(out, os2.getWinDescent()); + + out.flush(); + return bos.toByteArray(); + } + + // never returns null + private byte[] buildLocaTable(long[] newOffsets) throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + for (long offset : newOffsets) + { + writeUint32(out, offset); + } + + out.flush(); + return bos.toByteArray(); + } + + /** + * Resolve compound glyph references. + */ + private void addCompoundReferences() throws IOException + { + if (hasAddedCompoundReferences) + { + return; + } + hasAddedCompoundReferences = true; + + boolean hasNested; + do + { + GlyphTable g = ttf.getGlyph(); + long[] offsets = ttf.getIndexToLocation().getOffsets(); + InputStream is = ttf.getOriginalData(); + Set glyphIdsToAdd = null; + try + { + long isResult = is.skip(g.getOffset()); + + if (Long.compare(isResult, g.getOffset()) != 0) + { + LOG.debug("Tried skipping " + g.getOffset() + " bytes but skipped only " + isResult + " bytes"); + } + + long lastOff = 0L; + for (Integer glyphId : glyphIds) + { + long offset = offsets[glyphId]; + long len = offsets[glyphId + 1] - offset; + isResult = is.skip(offset - lastOff); + + if (Long.compare(isResult, offset - lastOff) != 0) + { + LOG.debug("Tried skipping " + (offset - lastOff) + " bytes but skipped only " + isResult + " bytes"); + } + + byte[] buf = new byte[(int)len]; + isResult = is.read(buf); + + if (Long.compare(isResult, len) != 0) + { + LOG.debug("Tried reading " + len + " bytes but only " + isResult + " bytes read"); + } + + // rewrite glyphIds for compound glyphs + if (buf.length >= 2 && buf[0] == -1 && buf[1] == -1) + { + int off = 2*5; + int flags; + do + { + flags = (buf[off] & 0xff) << 8 | buf[off + 1] & 0xff; + off +=2; + int ogid = (buf[off] & 0xff) << 8 | buf[off + 1] & 0xff; + if (!glyphIds.contains(ogid)) + { + if (glyphIdsToAdd == null) + { + glyphIdsToAdd = new TreeSet<>(); + } + glyphIdsToAdd.add(ogid); + } + off += 2; + // ARG_1_AND_2_ARE_WORDS + if ((flags & 1 << 0) != 0) + { + off += 2 * 2; + } + else + { + off += 2; + } + // WE_HAVE_A_TWO_BY_TWO + if ((flags & 1 << 7) != 0) + { + off += 2 * 4; + } + // WE_HAVE_AN_X_AND_Y_SCALE + else if ((flags & 1 << 6) != 0) + { + off += 2 * 2; + } + // WE_HAVE_A_SCALE + else if ((flags & 1 << 3) != 0) + { + off += 2; + } + } + while ((flags & 1 << 5) != 0); // MORE_COMPONENTS + + } + lastOff = offsets[glyphId + 1]; + } + } + finally + { + is.close(); + } + if (glyphIdsToAdd != null) + { + glyphIds.addAll(glyphIdsToAdd); + } + hasNested = glyphIdsToAdd != null; + } + while (hasNested); + } + + // never returns null + private byte[] buildGlyfTable(long[] newOffsets) throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + GlyphTable g = ttf.getGlyph(); + long[] offsets = ttf.getIndexToLocation().getOffsets(); + try (InputStream is = ttf.getOriginalData()) + { + long isResult = is.skip(g.getOffset()); + + if (Long.compare(isResult, g.getOffset()) != 0) + { + LOG.debug("Tried skipping " + g.getOffset() + " bytes but skipped only " + isResult + " bytes"); + } + + long prevEnd = 0; // previously read glyph offset + long newOffset = 0; // new offset for the glyph in the subset font + int newGid = 0; // new GID in subset font + + // for each glyph in the subset + for (Integer gid : glyphIds) + { + long offset = offsets[gid]; + long length = offsets[gid + 1] - offset; + + newOffsets[newGid++] = newOffset; + isResult = is.skip(offset - prevEnd); + + if (Long.compare(isResult, offset - prevEnd) != 0) + { + LOG.debug("Tried skipping " + (offset - prevEnd) + " bytes but skipped only " + isResult + " bytes"); + } + + byte[] buf = new byte[(int)length]; + isResult = is.read(buf); + + if (Long.compare(isResult, length) != 0) + { + LOG.debug("Tried reading " + length + " bytes but only " + isResult + " bytes read"); + } + + // detect glyph type + if (buf.length >= 2 && buf[0] == -1 && buf[1] == -1) + { + // compound glyph + int off = 2*5; + int flags; + do + { + // flags + flags = (buf[off] & 0xff) << 8 | buf[off + 1] & 0xff; + off += 2; + + // glyphIndex + int componentGid = (buf[off] & 0xff) << 8 | buf[off + 1] & 0xff; + if (!glyphIds.contains(componentGid)) + { + glyphIds.add(componentGid); + } + + int newComponentGid = getNewGlyphId(componentGid); + buf[off] = (byte)(newComponentGid >>> 8); + buf[off + 1] = (byte)newComponentGid; + off += 2; + + // ARG_1_AND_2_ARE_WORDS + if ((flags & 1 << 0) != 0) + { + off += 2 * 2; + } + else + { + off += 2; + } + // WE_HAVE_A_TWO_BY_TWO + if ((flags & 1 << 7) != 0) + { + off += 2 * 4; + } + // WE_HAVE_AN_X_AND_Y_SCALE + else if ((flags & 1 << 6) != 0) + { + off += 2 * 2; + } + // WE_HAVE_A_SCALE + else if ((flags & 1 << 3) != 0) + { + off += 2; + } + } + while ((flags & 1 << 5) != 0); // MORE_COMPONENTS + + // WE_HAVE_INSTRUCTIONS + if ((flags & 0x0100) == 0x0100) + { + // USHORT numInstr + int numInstr = (buf[off] & 0xff) << 8 | buf[off + 1] & 0xff; + off += 2; + + // BYTE instr[numInstr] + off += numInstr; + } + + // write the compound glyph + bos.write(buf, 0, off); + + // offset to start next glyph + newOffset += off; + } + else if (buf.length > 0) + { + // copy the entire glyph + bos.write(buf, 0, buf.length); + + // offset to start next glyph + newOffset += buf.length; + } + + // 4-byte alignment + if (newOffset % 4 != 0) + { + int len = 4 - (int)(newOffset % 4); + bos.write(PAD_BUF, 0, len); + newOffset += len; + } + + prevEnd = offset + length; + } + newOffsets[newGid++] = newOffset; + } + + return bos.toByteArray(); + } + + private int getNewGlyphId(Integer oldGid) + { + return glyphIds.headSet(oldGid).size(); + } + + private byte[] buildCmapTable() throws IOException + { + if (ttf.getCmap() == null || uniToGID.isEmpty() || keepTables != null && !keepTables.contains("cmap")) + { + return null; + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + // cmap header + writeUint16(out, 0); // version + writeUint16(out, 1); // numberSubtables + + // encoding record + writeUint16(out, CmapTable.PLATFORM_WINDOWS); // platformID + writeUint16(out, CmapTable.ENCODING_WIN_UNICODE_BMP); // platformSpecificID + writeUint32(out, 4 * 2 + 4); // offset + + // build Format 4 subtable (Unicode BMP) + Iterator> it = uniToGID.entrySet().iterator(); + Entry lastChar = it.next(); + Entry prevChar = lastChar; + int lastGid = getNewGlyphId(lastChar.getValue()); + + // +1 because .notdef is missing in uniToGID + int[] startCode = new int[uniToGID.size()+1]; + int[] endCode = new int[uniToGID.size()+1]; + int[] idDelta = new int[uniToGID.size()+1]; + int segCount = 0; + while(it.hasNext()) + { + Entry curChar2Gid = it.next(); + int curGid = getNewGlyphId(curChar2Gid.getValue()); + + // todo: need format Format 12 for non-BMP + if (curChar2Gid.getKey() > 0xFFFF) + { + throw new UnsupportedOperationException("non-BMP Unicode character"); + } + + if (curChar2Gid.getKey() != prevChar.getKey()+1 || + curGid - lastGid != curChar2Gid.getKey() - lastChar.getKey()) + { + if (lastGid != 0) + { + // don't emit ranges, which map to GID 0, the + // undef glyph is emitted a the very last segment + startCode[segCount] = lastChar.getKey(); + endCode[segCount] = prevChar.getKey(); + idDelta[segCount] = lastGid - lastChar.getKey(); + segCount++; + } + else if (!lastChar.getKey().equals(prevChar.getKey())) + { + // shorten ranges which start with GID 0 by one + startCode[segCount] = lastChar.getKey() + 1; + endCode[segCount] = prevChar.getKey(); + idDelta[segCount] = lastGid - lastChar.getKey(); + segCount++; + } + lastGid = curGid; + lastChar = curChar2Gid; + } + prevChar = curChar2Gid; + } + + // trailing segment + startCode[segCount] = lastChar.getKey(); + endCode[segCount] = prevChar.getKey(); + idDelta[segCount] = lastGid -lastChar.getKey(); + segCount++; + + // GID 0 + startCode[segCount] = 0xffff; + endCode[segCount] = 0xffff; + idDelta[segCount] = 1; + segCount++; + + // write format 4 subtable + int searchRange = 2 * (int)Math.pow(2, log2(segCount)); + writeUint16(out, 4); // format + writeUint16(out, 8 * 2 + segCount * 4*2); // length + writeUint16(out, 0); // language + writeUint16(out, segCount * 2); // segCountX2 + writeUint16(out, searchRange); // searchRange + writeUint16(out, log2(searchRange / 2)); // entrySelector + writeUint16(out, 2 * segCount - searchRange); // rangeShift + + // endCode[segCount] + for (int i = 0; i < segCount; i++) + { + writeUint16(out, endCode[i]); + } + + // reservedPad + writeUint16(out, 0); + + // startCode[segCount] + for (int i = 0; i < segCount; i++) + { + writeUint16(out, startCode[i]); + } + + // idDelta[segCount] + for (int i = 0; i < segCount; i++) + { + writeUint16(out, idDelta[i]); + } + + for (int i = 0; i < segCount; i++) + { + writeUint16(out, 0); + } + + return bos.toByteArray(); + } + + private byte[] buildPostTable() throws IOException + { + PostScriptTable post = ttf.getPostScript(); + if (post == null || keepTables != null && !keepTables.contains("post")) + { + return null; + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bos); + + writeFixed(out, 2.0); // version + writeFixed(out, post.getItalicAngle()); + writeSInt16(out, post.getUnderlinePosition()); + writeSInt16(out, post.getUnderlineThickness()); + writeUint32(out, post.getIsFixedPitch()); + writeUint32(out, post.getMinMemType42()); + writeUint32(out, post.getMaxMemType42()); + writeUint32(out, post.getMinMemType1()); + writeUint32(out, post.getMaxMemType1()); + + // version 2.0 + + // numberOfGlyphs + writeUint16(out, glyphIds.size()); + + // glyphNameIndex[numGlyphs] + Map names = new LinkedHashMap<>(); + for (int gid : glyphIds) + { + String name = post.getName(gid); + Integer macId = WGL4Names.MAC_GLYPH_NAMES_INDICES.get(name); + if (macId != null) + { + // the name is implicit, as it's from MacRoman + writeUint16(out, macId); + } + else + { + // the name will be written explicitly + Integer ordinal = names.get(name); + if (ordinal == null) + { + ordinal = names.size(); + names.put(name, ordinal); + } + writeUint16(out, 258 + ordinal); + } + } + + // names[numberNewGlyphs] + for (String name : names.keySet()) + { + byte[] buf = name.getBytes(Charset.forName("US-ASCII")); + writeUint8(out, buf.length); + out.write(buf); + } + + out.flush(); + return bos.toByteArray(); + } + + private byte[] buildHmtxTable() throws IOException + { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + HorizontalHeaderTable h = ttf.getHorizontalHeader(); + HorizontalMetricsTable hm = ttf.getHorizontalMetrics(); + InputStream is = ttf.getOriginalData(); + + // more info: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6hmtx.html + int lastgid = h.getNumberOfHMetrics() - 1; + // true if lastgid is not in the set: we'll need its width (but not its left side bearing) later + boolean needLastGidWidth = false; + if (glyphIds.last() > lastgid && !glyphIds.contains(lastgid)) + { + needLastGidWidth = true; + } + + try + { + long isResult = is.skip(hm.getOffset()); + + if (Long.compare(isResult, hm.getOffset()) != 0) + { + LOG.debug("Tried skipping " + hm.getOffset() + " bytes but only " + isResult + " bytes skipped"); + } + + long lastOffset = 0; + for (Integer glyphId : glyphIds) + { + // offset in original file + long offset; + if (glyphId <= lastgid) + { + // copy width and lsb + offset = glyphId * 4; + lastOffset = copyBytes(is, bos, offset, lastOffset, 4); + } + else + { + if (needLastGidWidth) + { + // one time only: copy width from lastgid, whose width applies + // to all later glyphs + needLastGidWidth = false; + offset = lastgid * 4; + lastOffset = copyBytes(is, bos, offset, lastOffset, 2); + + // then go on with lsb from actual glyph (lsb are individual even in monotype fonts) + } + + // copy lsb only, as we are beyond numOfHMetrics + offset = h.getNumberOfHMetrics() * 4 + (glyphId - h.getNumberOfHMetrics()) * 2; + lastOffset = copyBytes(is, bos, offset, lastOffset, 2); + } + } + + return bos.toByteArray(); + } + finally + { + is.close(); + } + } + + private long copyBytes(InputStream is, OutputStream os, long newOffset, long lastOffset, int count) + throws IOException + { + // skip over from last original offset + long nskip = newOffset - lastOffset; + if (nskip != is.skip(nskip)) + { + throw new EOFException("Unexpected EOF exception parsing glyphId of hmtx table."); + } + byte[] buf = new byte[count]; + if (count != is.read(buf, 0, count)) + { + throw new EOFException("Unexpected EOF exception parsing glyphId of hmtx table."); + } + os.write(buf, 0, count); + return newOffset + count; + } + + /** + * Write the subfont to the given output stream. + * + * @param os the stream used for writing. It will be closed by this method. + * @throws IOException if something went wrong. + * @throws IllegalStateException if the subset is empty. + */ + public void writeToStream(OutputStream os) throws IOException + { + if (glyphIds.isEmpty() && uniToGID.isEmpty()) + { + LOG.info("font subset is empty"); + } + + addCompoundReferences(); + + try (DataOutputStream out = new DataOutputStream(os)) + { + long[] newLoca = new long[glyphIds.size() + 1]; + + // generate tables in dependency order + byte[] head = buildHeadTable(); + byte[] hhea = buildHheaTable(); + byte[] maxp = buildMaxpTable(); + byte[] name = buildNameTable(); + byte[] os2 = buildOS2Table(); + byte[] glyf = buildGlyfTable(newLoca); + byte[] loca = buildLocaTable(newLoca); + byte[] cmap = buildCmapTable(); + byte[] hmtx = buildHmtxTable(); + byte[] post = buildPostTable(); + + // save to TTF in optimized order + Map tables = new TreeMap<>(); + if (os2 != null) + { + tables.put("OS/2", os2); + } + if (cmap != null) + { + tables.put("cmap", cmap); + } + tables.put("glyf", glyf); + tables.put("head", head); + tables.put("hhea", hhea); + tables.put("hmtx", hmtx); + tables.put("loca", loca); + tables.put("maxp", maxp); + if (name != null) + { + tables.put("name", name); + } + if (post != null) + { + tables.put("post", post); + } + + // copy all other tables + for (Map.Entry entry : ttf.getTableMap().entrySet()) + { + String tag = entry.getKey(); + TTFTable table = entry.getValue(); + + if (!tables.containsKey(tag) && (keepTables == null || keepTables.contains(tag))) + { + tables.put(tag, ttf.getTableBytes(table)); + } + } + + // calculate checksum + long checksum = writeFileHeader(out, tables.size()); + long offset = 12L + 16L * tables.size(); + for (Map.Entry entry : tables.entrySet()) + { + checksum += writeTableHeader(out, entry.getKey(), offset, entry.getValue()); + offset += (entry.getValue().length + 3) / 4 * 4; + } + checksum = 0xB1B0AFBAL - (checksum & 0xffffffffL); + + // update checksumAdjustment in 'head' table + head[8] = (byte)(checksum >>> 24); + head[9] = (byte)(checksum >>> 16); + head[10] = (byte)(checksum >>> 8); + head[11] = (byte)checksum; + for (byte[] bytes : tables.values()) + { + writeTableBody(out, bytes); + } + } + } + + private void writeFixed(DataOutputStream out, double f) throws IOException + { + double ip = Math.floor(f); + double fp = (f-ip) * 65536.0; + out.writeShort((int)ip); + out.writeShort((int)fp); + } + + private void writeUint32(DataOutputStream out, long l) throws IOException + { + out.writeInt((int)l); + } + + private void writeUint16(DataOutputStream out, int i) throws IOException + { + out.writeShort(i); + } + + private void writeSInt16(DataOutputStream out, short i) throws IOException + { + out.writeShort(i); + } + + private void writeUint8(DataOutputStream out, int i) throws IOException + { + out.writeByte(i); + } + + private void writeLongDateTime(DataOutputStream out, Calendar calendar) throws IOException + { + // inverse operation of TTFDataStream.readInternationalDate() + Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC")); + cal.set(1904, 0, 1, 0, 0, 0); + cal.set(Calendar.MILLISECOND, 0); + long millisFor1904 = cal.getTimeInMillis(); + long secondsSince1904 = (calendar.getTimeInMillis() - millisFor1904) / 1000L; + out.writeLong(secondsSince1904); + } + + private long toUInt32(int high, int low) + { + return (high & 0xffffL) << 16 | low & 0xffffL; + } + + private long toUInt32(byte[] bytes) + { + return (bytes[0] & 0xffL) << 24 + | (bytes[1] & 0xffL) << 16 + | (bytes[2] & 0xffL) << 8 + | bytes[3] & 0xffL; + } + + private int log2(int num) + { + return (int)Math.round(Math.log(num) / Math.log(2)); + } + + public void addGlyphIds(Set allGlyphIds) + { + glyphIds.addAll(allGlyphIds); + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java new file mode 100644 index 00000000000..6fd4415cc30 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A table in a true type font. + * + * @author Ben Litchfield + */ +public class TTFTable +{ + private String tag; + private long checkSum; + private long offset; + private long length; + + /** + * Indicates if the table is initialized or not. + */ + protected boolean initialized; + + /** + * The font which contains this table. + */ + protected final TrueTypeFont font; + + /** + * Constructor. + * + * @param font The font which contains this table. + */ + TTFTable(TrueTypeFont font) + { + this.font = font; + } + + /** + * @return Returns the checkSum. + */ + public long getCheckSum() + { + return checkSum; + } + + /** + * @param checkSumValue The checkSum to set. + */ + void setCheckSum(long checkSumValue) + { + this.checkSum = checkSumValue; + } + + /** + * @return Returns the length. + */ + public long getLength() + { + return length; + } + + /** + * @param lengthValue The length to set. + */ + void setLength(long lengthValue) + { + this.length = lengthValue; + } + + /** + * @return Returns the offset. + */ + public long getOffset() + { + return offset; + } + + /** + * @param offsetValue The offset to set. + */ + void setOffset(long offsetValue) + { + this.offset = offsetValue; + } + + /** + * @return Returns the tag. + */ + public String getTag() + { + return tag; + } + + /** + * @param tagValue The tag to set. + */ + void setTag(String tagValue) + { + this.tag = tagValue; + } + + /** + * Indicates if the table is already initialized. + * + * @return true if the table is initialized + */ + public boolean getInitialized() + { + return initialized; + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeCollection.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeCollection.java new file mode 100644 index 00000000000..75268d6f6c3 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeCollection.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/** + * A TrueType Collection, now more properly known as a "Font Collection" as it may contain either + * TrueType or OpenType fonts. + * + * @author John Hewson + */ +public class TrueTypeCollection implements Closeable +{ + private final TTFDataStream stream; + private final int numFonts; + private final long[] fontOffsets; + + /** + * Creates a new TrueTypeCollection from a .ttc file. + * + * @param file The TTC file. + * @throws IOException If the font could not be parsed. + */ + public TrueTypeCollection(File file) throws IOException + { + this(new RAFDataStream(file, "r")); + } + + /** + * Creates a new TrueTypeCollection from a .ttc input stream. + * + * @param stream A TTC input stream. + * @throws IOException If the font could not be parsed. + */ + public TrueTypeCollection(InputStream stream) throws IOException + { + this(new MemoryTTFDataStream(stream)); + } + + /** + * Creates a new TrueTypeCollection from a TTC stream. + * + * @param stream The TTF file. + * @throws IOException If the font could not be parsed. + */ + TrueTypeCollection(TTFDataStream stream) throws IOException + { + this.stream = stream; + + // TTC header + String tag = stream.readTag(); + if (!tag.equals("ttcf")) + { + throw new IOException("Missing TTC header"); + } + float version = stream.read32Fixed(); + numFonts = (int)stream.readUnsignedInt(); + fontOffsets = new long[numFonts]; + for (int i = 0; i < numFonts; i++) + { + fontOffsets[i] = stream.readUnsignedInt(); + } + if (version >= 2) + { + // not used at this time + int ulDsigTag = stream.readUnsignedShort(); + int ulDsigLength = stream.readUnsignedShort(); + int ulDsigOffset = stream.readUnsignedShort(); + } + } + + /** + * Run the callback for each TT font in the collection. + * + * @param trueTypeFontProcessor the object with the callback method. + * @throws IOException + */ + public void processAllFonts(TrueTypeFontProcessor trueTypeFontProcessor) throws IOException + { + for (int i = 0; i < numFonts; i++) + { + TrueTypeFont font = getFontAtIndex(i); + trueTypeFontProcessor.process(font); + } + } + + private TrueTypeFont getFontAtIndex(int idx) throws IOException + { + stream.seek(fontOffsets[idx]); + TTFParser parser; + if (stream.readTag().equals("OTTO")) + { + parser = new OTFParser(false, true); + } + else + { + parser = new TTFParser(false, true); + } + stream.seek(fontOffsets[idx]); + return parser.parse(new TTCDataStream(stream)); + } + + /** + * Get a TT font from a collection. + * + * @param name The postscript name of the font. + * @return The found font, nor null if none is found. + * @throws IOException + */ + public TrueTypeFont getFontByName(String name) throws IOException + { + for (int i = 0; i < numFonts; i++) + { + TrueTypeFont font = getFontAtIndex(i); + if (font.getName().equals(name)) + { + return font; + } + } + return null; + } + + /** + * Implement the callback method to call {@link TrueTypeCollection#processAllFonts(TrueTypeFontProcessor)}. + */ + public interface TrueTypeFontProcessor + { + void process(TrueTypeFont ttf) throws IOException; + } + + @Override + public void close() throws IOException + { + stream.close(); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java b/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java new file mode 100644 index 00000000000..20b0b4f977a --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java @@ -0,0 +1,807 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.awt.geom.GeneralPath; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.util.BoundingBox; + +/** + * A TrueType font file. + * + * @author Ben Litchfield + */ +public class TrueTypeFont implements FontBoxFont, Closeable +{ + + private static final Log LOG = LogFactory.getLog(TrueTypeFont.class); + + private float version; + private int numberOfGlyphs = -1; + private int unitsPerEm = -1; + protected Map tables = new HashMap<>(); + private final TTFDataStream data; + private volatile Map postScriptNames; + + private final Object lockReadtable = new Object(); + private final Object lockPSNames = new Object(); + private final List enabledGsubFeatures = new ArrayList<>(); + + /** + * Constructor. Clients should use the TTFParser to create a new TrueTypeFont object. + * + * @param fontData The font data. + */ + TrueTypeFont(TTFDataStream fontData) + { + data = fontData; + } + + @Override + public void close() throws IOException + { + data.close(); + } + + /** + * @return Returns the version. + */ + public float getVersion() + { + return version; + } + + /** + * Set the version. Package-private, used by TTFParser only. + * @param versionValue The version to set. + */ + void setVersion(float versionValue) + { + version = versionValue; + } + + /** + * Add a table definition. Package-private, used by TTFParser only. + * + * @param table The table to add. + */ + void addTable( TTFTable table ) + { + tables.put( table.getTag(), table ); + } + + /** + * Get all of the tables. + * + * @return All of the tables. + */ + public Collection getTables() + { + return tables.values(); + } + + /** + * Get all of the tables. + * + * @return All of the tables. + */ + public Map getTableMap() + { + return tables; + } + + /** + * Returns the raw bytes of the given table. + * @param table the table to read. + * @throws IOException if there was an error accessing the table. + */ + public byte[] getTableBytes(TTFTable table) throws IOException + { + synchronized (lockReadtable) + { + // save current position + long currentPosition = data.getCurrentPosition(); + data.seek(table.getOffset()); + + // read all data + byte[] bytes = data.read((int) table.getLength()); + + // restore current position + data.seek(currentPosition); + return bytes; + } + } + + /** + * This will get the table for the given tag. + * + * @param tag the name of the table to be returned + * @return The table with the given tag. + * @throws IOException if there was an error reading the table. + */ + protected TTFTable getTable(String tag) throws IOException + { + // after the initial parsing of the ttf there aren't any write operations + // to the HashMap anymore, so that we don't have to synchronize the read access + TTFTable ttfTable = tables.get(tag); + if (ttfTable != null) + { + if (!ttfTable.initialized) + { + synchronized (lockReadtable) + { + if (!ttfTable.initialized) + { + readTable(ttfTable); + } + } + } + } + return ttfTable; + } + + /** + * This will get the naming table for the true type font. + * + * @return The naming table. + * @throws IOException if there was an error reading the table. + */ + public NamingTable getNaming() throws IOException + { + return (NamingTable) getTable(NamingTable.TAG); + } + + /** + * Get the postscript table for this TTF. + * + * @return The postscript table. + * @throws IOException if there was an error reading the table. + */ + public PostScriptTable getPostScript() throws IOException + { + return (PostScriptTable) getTable(PostScriptTable.TAG); + } + + /** + * Get the OS/2 table for this TTF. + * + * @return The OS/2 table. + * @throws IOException if there was an error reading the table. + */ + public OS2WindowsMetricsTable getOS2Windows() throws IOException + { + return (OS2WindowsMetricsTable) getTable(OS2WindowsMetricsTable.TAG); + } + + /** + * Get the maxp table for this TTF. + * + * @return The maxp table. + * @throws IOException if there was an error reading the table. + */ + public MaximumProfileTable getMaximumProfile() throws IOException + { + return (MaximumProfileTable) getTable(MaximumProfileTable.TAG); + } + + /** + * Get the head table for this TTF. + * + * @return The head table. + * @throws IOException if there was an error reading the table. + */ + public HeaderTable getHeader() throws IOException + { + return (HeaderTable) getTable(HeaderTable.TAG); + } + + /** + * Get the hhea table for this TTF. + * + * @return The hhea table. + * @throws IOException if there was an error reading the table. + */ + public HorizontalHeaderTable getHorizontalHeader() throws IOException + { + return (HorizontalHeaderTable) getTable(HorizontalHeaderTable.TAG); + } + + /** + * Get the hmtx table for this TTF. + * + * @return The hmtx table. + * @throws IOException if there was an error reading the table. + */ + public HorizontalMetricsTable getHorizontalMetrics() throws IOException + { + return (HorizontalMetricsTable) getTable(HorizontalMetricsTable.TAG); + } + + /** + * Get the loca table for this TTF. + * + * @return The loca table. + * @throws IOException if there was an error reading the table. + */ + public IndexToLocationTable getIndexToLocation() throws IOException + { + return (IndexToLocationTable) getTable(IndexToLocationTable.TAG); + } + + /** + * Get the glyf table for this TTF. + * + * @return The glyf table. + * @throws IOException if there was an error reading the table. + */ + public GlyphTable getGlyph() throws IOException + { + return (GlyphTable) getTable(GlyphTable.TAG); + } + + /** + * Get the "cmap" table for this TTF. + * + * @return The "cmap" table. + * @throws IOException if there was an error reading the table. + */ + public CmapTable getCmap() throws IOException + { + return (CmapTable) getTable(CmapTable.TAG); + } + + /** + * Get the vhea table for this TTF. + * + * @return The vhea table. + * @throws IOException if there was an error reading the table. + */ + public VerticalHeaderTable getVerticalHeader() throws IOException + { + return (VerticalHeaderTable) getTable(VerticalHeaderTable.TAG); + } + + /** + * Get the vmtx table for this TTF. + * + * @return The vmtx table. + * @throws IOException if there was an error reading the table. + */ + public VerticalMetricsTable getVerticalMetrics() throws IOException + { + return (VerticalMetricsTable) getTable(VerticalMetricsTable.TAG); + } + + /** + * Get the VORG table for this TTF. + * + * @return The VORG table. + * @throws IOException if there was an error reading the table. + */ + public VerticalOriginTable getVerticalOrigin() throws IOException + { + return (VerticalOriginTable) getTable(VerticalOriginTable.TAG); + } + + /** + * Get the "kern" table for this TTF. + * + * @return The "kern" table. + * @throws IOException if there was an error reading the table. + */ + public KerningTable getKerning() throws IOException + { + return (KerningTable) getTable(KerningTable.TAG); + } + + /** + * Get the "gsub" table for this TTF. + * + * @return The "gsub" table. + * @throws IOException if there was an error reading the table. + */ + public GlyphSubstitutionTable getGsub() throws IOException + { + return (GlyphSubstitutionTable) getTable(GlyphSubstitutionTable.TAG); + } + + /** + * Get the data of the TrueType Font + * program representing the stream used to build this + * object (normally from the TTFParser object). + * + * @return COSStream TrueType font program stream + * + * @throws IOException If there is an error getting the font data. + */ + public InputStream getOriginalData() throws IOException + { + return data.getOriginalData(); + } + + /** + * Get the data size of the TrueType Font program representing the stream used to build this + * object (normally from the TTFParser object). + * + * @return the size. + */ + public long getOriginalDataSize() + { + return data.getOriginalDataSize(); + } + + /** + * Read the given table if necessary. Package-private, used by TTFParser only. + * + * @param table the table to be initialized + * + * @throws IOException if there was an error reading the table. + */ + void readTable(TTFTable table) throws IOException + { + // PDFBOX-4219: synchronize on data because it is accessed by several threads + // when PDFBox is accessing a standard 14 font for the first time + synchronized (data) + { + // save current position + long currentPosition = data.getCurrentPosition(); + data.seek(table.getOffset()); + table.read(this, data); + // restore current position + data.seek(currentPosition); + } + } + + /** + * Returns the number of glyphs (MaximumProfile.numGlyphs). + * + * @return the number of glyphs + * @throws IOException if there was an error reading the table. + */ + public int getNumberOfGlyphs() throws IOException + { + if (numberOfGlyphs == -1) + { + MaximumProfileTable maximumProfile = getMaximumProfile(); + if (maximumProfile != null) + { + numberOfGlyphs = maximumProfile.getNumGlyphs(); + } + else + { + // this should never happen + numberOfGlyphs = 0; + } + } + return numberOfGlyphs; + } + + /** + * Returns the units per EM (Header.unitsPerEm). + * + * @return units per EM + * @throws IOException if there was an error reading the table. + */ + public int getUnitsPerEm() throws IOException + { + if (unitsPerEm == -1) + { + HeaderTable header = getHeader(); + if (header != null) + { + unitsPerEm = header.getUnitsPerEm(); + } + else + { + // this should never happen + unitsPerEm = 0; + } + } + return unitsPerEm; + } + + /** + * Returns the width for the given GID. + * + * @param gid the GID + * @return the width + * @throws IOException if there was an error reading the metrics table. + */ + public int getAdvanceWidth(int gid) throws IOException + { + HorizontalMetricsTable hmtx = getHorizontalMetrics(); + if (hmtx != null) + { + return hmtx.getAdvanceWidth(gid); + } + else + { + // this should never happen + return 250; + } + } + + /** + * Returns the height for the given GID. + * + * @param gid the GID + * @return the height + * @throws IOException if there was an error reading the metrics table. + */ + public int getAdvanceHeight(int gid) throws IOException + { + VerticalMetricsTable vmtx = getVerticalMetrics(); + if (vmtx != null) + { + return vmtx.getAdvanceHeight(gid); + } + else + { + // this should never happen + return 250; + } + } + + @Override + public String getName() throws IOException + { + if (getNaming() != null) + { + return getNaming().getPostScriptName(); + } + else + { + return null; + } + } + + private void readPostScriptNames() throws IOException + { + Map psnames = postScriptNames; + if (psnames == null) + { + // the getter is already synchronized + PostScriptTable post = getPostScript(); + synchronized (lockPSNames) + { + psnames = postScriptNames; + if (psnames == null) + { + String[] names = post != null ? post.getGlyphNames() : null; + if (names != null) + { + psnames = new HashMap<>(names.length); + for (int i = 0; i < names.length; i++) + { + psnames.put(names[i], i); + } + } + else + { + psnames = new HashMap<>(); + } + postScriptNames = psnames; + } + } + } + } + + /** + * Returns the best Unicode from the font (the most general). The PDF spec says that "The means + * by which this is accomplished are implementation-dependent." + * + * @throws IOException if the font could not be read + * @deprecated Use {@link #getUnicodeCmapLookup()} instead + */ + @Deprecated + public CmapSubtable getUnicodeCmap() throws IOException + { + return getUnicodeCmap(true); + } + + /** + * Returns the best Unicode from the font (the most general). The PDF spec says that "The means + * by which this is accomplished are implementation-dependent." + * + * @param isStrict False if we allow falling back to any cmap, even if it's not Unicode. + * @throws IOException if the font could not be read, or there is no Unicode cmap + * @deprecated Use {@link #getUnicodeCmapLookup(boolean)} instead + */ + @Deprecated + public CmapSubtable getUnicodeCmap(boolean isStrict) throws IOException + { + return getUnicodeCmapImpl(isStrict); + } + + /** + * Returns the best Unicode from the font (the most general). The PDF spec says that "The means + * by which this is accomplished are implementation-dependent." + * + * The returned cmap will perform glyph substitution. + * + * @throws IOException if the font could not be read + */ + public CmapLookup getUnicodeCmapLookup() throws IOException + { + return getUnicodeCmapLookup(true); + } + + /** + * Returns the best Unicode from the font (the most general). The PDF spec says that "The means + * by which this is accomplished are implementation-dependent." + * + * The returned cmap will perform glyph substitution. + * + * @param isStrict False if we allow falling back to any cmap, even if it's not Unicode. + * @throws IOException if the font could not be read, or there is no Unicode cmap + */ + public CmapLookup getUnicodeCmapLookup(boolean isStrict) throws IOException + { + CmapSubtable cmap = getUnicodeCmapImpl(isStrict); + if (!enabledGsubFeatures.isEmpty()) + { + GlyphSubstitutionTable table = getGsub(); + if (table != null) + { + return new SubstitutingCmapLookup(cmap, table, + Collections.unmodifiableList(enabledGsubFeatures)); + } + } + return cmap; + } + + private CmapSubtable getUnicodeCmapImpl(boolean isStrict) throws IOException + { + CmapTable cmapTable = getCmap(); + if (cmapTable == null) + { + if (isStrict) + { + throw new IOException("The TrueType font " + getName() + " does not contain a 'cmap' table"); + } + else + { + return null; + } + } + + CmapSubtable cmap = cmapTable.getSubtable(CmapTable.PLATFORM_UNICODE, + CmapTable.ENCODING_UNICODE_2_0_FULL); + if (cmap == null) + { + cmap = cmapTable.getSubtable(CmapTable.PLATFORM_WINDOWS, + CmapTable.ENCODING_WIN_UNICODE_FULL); + } + if (cmap == null) + { + cmap = cmapTable.getSubtable(CmapTable.PLATFORM_UNICODE, + CmapTable.ENCODING_UNICODE_2_0_BMP); + } + if (cmap == null) + { + cmap = cmapTable.getSubtable(CmapTable.PLATFORM_WINDOWS, + CmapTable.ENCODING_WIN_UNICODE_BMP); + } + if (cmap == null) + { + // Microsoft's "Recommendations for OpenType Fonts" says that "Symbol" encoding + // actually means "Unicode, non-standard character set" + cmap = cmapTable.getSubtable(CmapTable.PLATFORM_WINDOWS, + CmapTable.ENCODING_WIN_SYMBOL); + } + if (cmap == null) + { + if (isStrict) + { + throw new IOException("The TrueType font does not contain a Unicode cmap"); + } + else if (cmapTable.getCmaps().length > 0) + { + // fallback to the first cmap (may not be Unicode, so may produce poor results) + cmap = cmapTable.getCmaps()[0]; + } + } + return cmap; + } + + /** + * Returns the GID for the given PostScript name, if the "post" table is present. + * @param name the PostScript name. + */ + public int nameToGID(String name) throws IOException + { + // look up in 'post' table + readPostScriptNames(); + if (postScriptNames != null) + { + Integer gid = postScriptNames.get(name); + if (gid != null && gid > 0 && gid < getMaximumProfile().getNumGlyphs()) + { + return gid; + } + } + + // look up in 'cmap' + int uni = parseUniName(name); + if (uni > -1) + { + CmapLookup cmap = getUnicodeCmapLookup(false); + return cmap.getGlyphId(uni); + } + + return 0; + } + + public GsubData getGsubData() throws IOException + { + GlyphSubstitutionTable table = getGsub(); + if (table == null) + { + return GsubData.NO_DATA_FOUND; + } + + return table.getGsubData(); + } + + /** + * Parses a Unicode PostScript name in the format uniXXXX. + */ + private int parseUniName(String name) throws IOException + { + if (name.startsWith("uni") && name.length() == 7) + { + int nameLength = name.length(); + StringBuilder uniStr = new StringBuilder(); + try + { + for (int chPos = 3; chPos + 4 <= nameLength; chPos += 4) + { + int codePoint = Integer.parseInt(name.substring(chPos, chPos + 4), 16); + if (codePoint <= 0xD7FF || codePoint >= 0xE000) // disallowed code area + { + uniStr.append((char) codePoint); + } + } + String unicode = uniStr.toString(); + if (unicode.length() == 0) + { + return -1; + } + return unicode.codePointAt(0); + } + catch (NumberFormatException e) + { + return -1; + } + } + return -1; + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + int gid = nameToGID(name); + + // some glyphs have no outlines (e.g. space, table, newline) + GlyphData glyph = getGlyph().getGlyph(gid); + if (glyph == null) + { + return new GeneralPath(); + } + else + { + // must scaled by caller using FontMatrix + return glyph.getPath(); + } + } + + @Override + public float getWidth(String name) throws IOException + { + Integer gid = nameToGID(name); + return getAdvanceWidth(gid); + } + + @Override + public boolean hasGlyph(String name) throws IOException + { + return nameToGID(name) != 0; + } + + @Override + public BoundingBox getFontBBox() throws IOException + { + short xMin = getHeader().getXMin(); + short xMax = getHeader().getXMax(); + short yMin = getHeader().getYMin(); + short yMax = getHeader().getYMax(); + float scale = 1000f / getUnitsPerEm(); + return new BoundingBox(xMin * scale, yMin * scale, xMax * scale, yMax * scale); + } + + @Override + public List getFontMatrix() throws IOException + { + float scale = 1000f / getUnitsPerEm(); + return Arrays.asList(0.001f * scale, 0, 0, 0.001f * scale, 0, 0); + } + + /** + * Enable a particular glyph substitution feature. This feature might not be supported by the + * font, or might not be implemented in PDFBox yet. + * + * @param featureTag The GSUB feature to enable + */ + public void enableGsubFeature(String featureTag) + { + enabledGsubFeatures.add(featureTag); + } + + /** + * Disable a particular glyph substitution feature. + * + * @param featureTag The GSUB feature to disable + */ + public void disableGsubFeature(String featureTag) + { + enabledGsubFeatures.remove(featureTag); + } + + /** + * Enable glyph substitutions for vertical writing. + */ + public void enableVerticalSubstitutions() + { + enableGsubFeature("vrt2"); + enableGsubFeature("vert"); + } + + @Override + public String toString() + { + try + { + if (getNaming() != null) + { + return getNaming().getPostScriptName(); + } + else + { + return "(null)"; + } + } + catch (IOException e) + { + LOG.debug("Error getting the NamingTable for the font", e); + return "(null - " + e.getMessage() + ")"; + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalHeaderTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalHeaderTable.java new file mode 100644 index 00000000000..5d54beb64d7 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalHeaderTable.java @@ -0,0 +1,215 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A vertical header 'vhea' table in a TrueType or OpenType font. + * + * Supports versions 1.0 and 1.1, for which the only difference is changing + * the specification names and descriptions of the ascender, descender, + * and lineGap fields to vertTypoAscender, vertTypoDescender, vertTypeLineGap. + * + * This table is required by the OpenType CJK Font Guidelines for "all + * OpenType fonts that are used for vertical writing". + * + * This table is specified in both the TrueType and OpenType specifications. + * + * @author Glenn Adams + * + */ +public class VerticalHeaderTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "vhea"; + + private float version; + private short ascender; + private short descender; + private short lineGap; + private int advanceHeightMax; + private short minTopSideBearing; + private short minBottomSideBearing; + private short yMaxExtent; + private short caretSlopeRise; + private short caretSlopeRun; + private short caretOffset; + private short reserved1; + private short reserved2; + private short reserved3; + private short reserved4; + private short metricDataFormat; + private int numberOfVMetrics; + + VerticalHeaderTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + version = data.read32Fixed(); + ascender = data.readSignedShort(); + descender = data.readSignedShort(); + lineGap = data.readSignedShort(); + advanceHeightMax = data.readUnsignedShort(); + minTopSideBearing = data.readSignedShort(); + minBottomSideBearing = data.readSignedShort(); + yMaxExtent = data.readSignedShort(); + caretSlopeRise = data.readSignedShort(); + caretSlopeRun = data.readSignedShort(); + caretOffset = data.readSignedShort(); + reserved1 = data.readSignedShort(); + reserved2 = data.readSignedShort(); + reserved3 = data.readSignedShort(); + reserved4 = data.readSignedShort(); + metricDataFormat = data.readSignedShort(); + numberOfVMetrics = data.readUnsignedShort(); + initialized = true; + } + + /** + * @return Returns the advanceHeightMax. + */ + public int getAdvanceHeightMax() + { + return advanceHeightMax; + } + /** + * @return Returns the ascender. + */ + public short getAscender() + { + return ascender; + } + /** + * @return Returns the caretSlopeRise. + */ + public short getCaretSlopeRise() + { + return caretSlopeRise; + } + /** + * @return Returns the caretSlopeRun. + */ + public short getCaretSlopeRun() + { + return caretSlopeRun; + } + /** + * @return Returns the caretOffset. + */ + public short getCaretOffset() + { + return caretOffset; + } + /** + * @return Returns the descender. + */ + public short getDescender() + { + return descender; + } + /** + * @return Returns the lineGap. + */ + public short getLineGap() + { + return lineGap; + } + /** + * @return Returns the metricDataFormat. + */ + public short getMetricDataFormat() + { + return metricDataFormat; + } + /** + * @return Returns the minTopSideBearing. + */ + public short getMinTopSideBearing() + { + return minTopSideBearing; + } + /** + * @return Returns the minBottomSideBearing. + */ + public short getMinBottomSideBearing() + { + return minBottomSideBearing; + } + /** + * @return Returns the numberOfVMetrics. + */ + public int getNumberOfVMetrics() + { + return numberOfVMetrics; + } + /** + * @return Returns the reserved1. + */ + public short getReserved1() + { + return reserved1; + } + /** + * @return Returns the reserved2. + */ + public short getReserved2() + { + return reserved2; + } + /** + * @return Returns the reserved3. + */ + public short getReserved3() + { + return reserved3; + } + /** + * @return Returns the reserved4. + */ + public short getReserved4() + { + return reserved4; + } + /** + * @return Returns the version. + */ + public float getVersion() + { + return version; + } + /** + * @return Returns the yMaxExtent. + */ + public short getYMaxExtent() + { + return yMaxExtent; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalMetricsTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalMetricsTable.java new file mode 100644 index 00000000000..dd00a40a100 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalMetricsTable.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; + +/** + * A vertical metrics 'vmtx' table in a TrueType or OpenType font. + * + * This table is required by the OpenType CJK Font Guidelines for "all + * OpenType fonts that are used for vertical writing". + * + * This table is specified in both the TrueType and OpenType specifications. + * + * @author Glenn Adams + * + */ +public class VerticalMetricsTable extends TTFTable +{ + /** + * A tag that identifies this table type. + */ + public static final String TAG = "vmtx"; + + private int[] advanceHeight; + private short[] topSideBearing; + private short[] additionalTopSideBearing; + private int numVMetrics; + + VerticalMetricsTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + VerticalHeaderTable vHeader = ttf.getVerticalHeader(); + numVMetrics = vHeader.getNumberOfVMetrics(); + int numGlyphs = ttf.getNumberOfGlyphs(); + + int bytesRead = 0; + advanceHeight = new int[ numVMetrics ]; + topSideBearing = new short[ numVMetrics ]; + for( int i=0; i origins; + + VerticalOriginTable(TrueTypeFont font) + { + super(font); + } + + /** + * This will read the required data from the stream. + * + * @param ttf The font that is being read. + * @param data The stream to read the data from. + * @throws IOException If there is an error reading the data. + */ + @Override + public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException + { + version = data.read32Fixed(); + defaultVertOriginY = data.readSignedShort(); + int numVertOriginYMetrics = data.readUnsignedShort(); + origins = new ConcurrentHashMap<>(numVertOriginYMetrics); + for (int i = 0; i < numVertOriginYMetrics; ++i) + { + int g = data.readUnsignedShort(); + int y = data.readSignedShort(); + origins.put(g, y); + } + initialized = true; + } + + /** + * @return Returns the version. + */ + public float getVersion() + { + return version; + } + + /** + * Returns the y-coordinate of the vertical origin for the given GID if known, + * or returns the default value if not specified in table data. + * + * @param gid GID + * @return Returns the y-coordinate of the vertical origin. + */ + public int getOriginY(int gid) + { + if (origins.containsKey(gid)) + { + return origins.get(gid); + } + else + { + return defaultVertOriginY; + } + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/WGL4Names.java b/fontbox/src/main/java/org/apache/fontbox/ttf/WGL4Names.java new file mode 100644 index 00000000000..a7cbdf9c0a6 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/WGL4Names.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.util.HashMap; +import java.util.Map; + +/** + * Windows Glyph List 4 (WGL4) names for Mac glyphs. + */ +public final class WGL4Names +{ + /** + * The number of standard mac glyph names. + */ + public static final int NUMBER_OF_MAC_GLYPHS = 258; + + /** + * The 258 standard mac glyph names a used in 'post' format 1 and 2. + */ + public static final String[] MAC_GLYPH_NAMES = new String[] + { + ".notdef",".null", "nonmarkingreturn", "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", "Delta", "guillemotleft", "guillemotright", + "ellipsis", "nonbreakingspace", "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", + "apple", "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", + "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", + "ccaron", "dcroat" + }; + + /** + * The indices of the standard mac glyph names. + */ + public static final Map MAC_GLYPH_NAMES_INDICES; + + static + { + MAC_GLYPH_NAMES_INDICES = new HashMap<>(NUMBER_OF_MAC_GLYPHS); + for (int i = 0; i < NUMBER_OF_MAC_GLYPHS; ++i) + { + MAC_GLYPH_NAMES_INDICES.put(MAC_GLYPH_NAMES[i],i); + } + } + + private WGL4Names() + { + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/CompoundCharacterTokenizer.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/CompoundCharacterTokenizer.java new file mode 100644 index 00000000000..41a5e652ed9 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/CompoundCharacterTokenizer.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Takes in the given text having compound-glyphs to substitute, and splits it into chunks consisting of parts that + * should be substituted and the ones that can be processed normally. + * + * @author Palash Ray + * + */ +public class CompoundCharacterTokenizer +{ + + private final Pattern regexExpression; + + public CompoundCharacterTokenizer(Set compoundWords) + { + regexExpression = Pattern.compile(getRegexFromTokens(compoundWords)); + } + + public CompoundCharacterTokenizer(String singleRegex) + { + regexExpression = Pattern.compile(singleRegex); + } + + public List tokenize(String text) + { + List tokens = new ArrayList<>(); + + Matcher regexMatcher = regexExpression.matcher(text); + + int lastIndexOfPrevMatch = 0; + + while (regexMatcher.find()) + { + + int beginIndexOfNextMatch = regexMatcher.start(); + + String prevToken = text.substring(lastIndexOfPrevMatch, beginIndexOfNextMatch); + + if (prevToken.length() > 0) + { + tokens.add(prevToken); + } + + String currentMatch = regexMatcher.group(); + + tokens.add(currentMatch); + + lastIndexOfPrevMatch = regexMatcher.end(); + + } + + String tail = text.substring(lastIndexOfPrevMatch, text.length()); + + if (tail.length() > 0) + { + tokens.add(tail); + } + + return tokens; + } + + private String getRegexFromTokens(Set compoundWords) + { + StringBuilder sb = new StringBuilder(); + + for (String compoundWord : compoundWords) + { + sb.append("("); + sb.append(compoundWord); + sb.append(")|"); + } + + sb.setLength(sb.length() - 1); + + return sb.toString(); + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitter.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitter.java new file mode 100644 index 00000000000..fcb91afa23c --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitter.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.List; + +/** + * This class splits an array of GlyphIds with a prospective match. + * + * @author Palash Ray + * + */ +public interface GlyphArraySplitter +{ + + List> split(List glyphIds); + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitterRegexImpl.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitterRegexImpl.java new file mode 100644 index 00000000000..8cf324fb0d5 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitterRegexImpl.java @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * This is an in-efficient implementation based on regex, which helps split the array. + * + * @author Palash Ray + * + */ +public class GlyphArraySplitterRegexImpl implements GlyphArraySplitter +{ + private static final String GLYPH_ID_SEPARATOR = "_"; + + private final CompoundCharacterTokenizer compoundCharacterTokenizer; + + public GlyphArraySplitterRegexImpl(Set> matchers) + { + compoundCharacterTokenizer = new CompoundCharacterTokenizer(getMatchersAsStrings(matchers)); + } + + @Override + public List> split(List glyphIds) + { + String originalGlyphsAsText = convertGlyphIdsToString(glyphIds); + List tokens = compoundCharacterTokenizer.tokenize(originalGlyphsAsText); + + List> modifiedGlyphs = new ArrayList<>(); + + for (String token : tokens) + { + modifiedGlyphs.add(convertGlyphIdsToList(token)); + } + + return modifiedGlyphs; + } + + private Set getMatchersAsStrings(Set> matchers) + { + Set stringMatchers = new HashSet<>(matchers.size()); + for (List glyphIds : matchers) + { + stringMatchers.add(convertGlyphIdsToString(glyphIds)); + } + return stringMatchers; + } + + private String convertGlyphIdsToString(List glyphIds) + { + StringBuilder sb = new StringBuilder(20); + sb.append(GLYPH_ID_SEPARATOR); + for (Integer glyphId : glyphIds) + { + sb.append(glyphId).append(GLYPH_ID_SEPARATOR); + } + return sb.toString(); + } + + private List convertGlyphIdsToList(String glyphIdsAsString) + { + List gsubProcessedGlyphsIds = new ArrayList<>(); + + for (String glyphId : glyphIdsAsString.split(GLYPH_ID_SEPARATOR)) + { + if (glyphId.trim().length() == 0) + { + continue; + } + gsubProcessedGlyphsIds.add(Integer.valueOf(glyphId)); + } + + return gsubProcessedGlyphsIds; + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java new file mode 100644 index 00000000000..dd6db9410de --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GlyphSubstitutionDataExtractor.java @@ -0,0 +1,275 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.ttf.model.Language; +import org.apache.fontbox.ttf.model.MapBackedGsubData; +import org.apache.fontbox.ttf.table.common.CoverageTable; +import org.apache.fontbox.ttf.table.common.FeatureListTable; +import org.apache.fontbox.ttf.table.common.FeatureRecord; +import org.apache.fontbox.ttf.table.common.LangSysTable; +import org.apache.fontbox.ttf.table.common.LookupListTable; +import org.apache.fontbox.ttf.table.common.LookupSubTable; +import org.apache.fontbox.ttf.table.common.LookupTable; +import org.apache.fontbox.ttf.table.common.ScriptTable; +import org.apache.fontbox.ttf.table.gsub.LigatureSetTable; +import org.apache.fontbox.ttf.table.gsub.LigatureTable; +import org.apache.fontbox.ttf.table.gsub.LookupTypeLigatureSubstitutionSubstFormat1; +import org.apache.fontbox.ttf.table.gsub.LookupTypeSingleSubstFormat1; +import org.apache.fontbox.ttf.table.gsub.LookupTypeSingleSubstFormat2; + +/** + * This class has utility methods to extract meaningful data from the highly obfuscated GSUB Tables. This data is then + * used to determine which combination of Glyphs or words have to be replaced. + * + * @author Palash Ray + * + */ +public class GlyphSubstitutionDataExtractor +{ + + private static final Log LOG = LogFactory.getLog(GlyphSubstitutionDataExtractor.class); + + public GsubData getGsubData(Map scriptList, + FeatureListTable featureListTable, LookupListTable lookupListTable) + { + + ScriptTableDetails scriptTableDetails = getSupportedLanguage(scriptList); + + if (scriptTableDetails == null) + { + return GsubData.NO_DATA_FOUND; + } + + ScriptTable scriptTable = scriptTableDetails.getScriptTable(); + + Map, Integer>> gsubData = new LinkedHashMap<>(); + // the starting point is really the scriptTags + if (scriptTable.getDefaultLangSysTable() != null) + { + populateGsubData(gsubData, scriptTable.getDefaultLangSysTable(), featureListTable, + lookupListTable); + } + for (LangSysTable langSysTable : scriptTable.getLangSysTables().values()) + { + populateGsubData(gsubData, langSysTable, featureListTable, lookupListTable); + } + + return new MapBackedGsubData(scriptTableDetails.getLanguage(), + scriptTableDetails.getFeatureName(), gsubData); + } + + private ScriptTableDetails getSupportedLanguage(Map scriptList) + { + for (Language lang : Language.values()) + { + for (String scriptName : lang.getScriptNames()) + { + if (scriptList.containsKey(scriptName)) + { + return new ScriptTableDetails(lang, scriptName, scriptList.get(scriptName)); + } + } + } + return null; + } + + private void populateGsubData(Map, Integer>> gsubData, + LangSysTable langSysTable, FeatureListTable featureListTable, + LookupListTable lookupListTable) + { + for (int featureIndex : langSysTable.getFeatureIndices()) + { + FeatureRecord featureRecord = featureListTable.getFeatureRecords()[featureIndex]; + populateGsubData(gsubData, featureRecord, lookupListTable); + } + } + + private void populateGsubData(Map, Integer>> gsubData, + FeatureRecord featureRecord, LookupListTable lookupListTable) + { + + Map, Integer> glyphSubstitutionMap = new LinkedHashMap<>(); + for (int lookupIndex : featureRecord.getFeatureTable().getLookupListIndices()) + { + LookupTable lookupTable = lookupListTable.getLookups()[lookupIndex]; + extractData(glyphSubstitutionMap, lookupTable); + } + + LOG.debug("*********** extracting GSUB data for the feature: " + + featureRecord.getFeatureTag() + ", glyphSubstitutionMap: " + + glyphSubstitutionMap); + + gsubData.put(featureRecord.getFeatureTag(), + Collections.unmodifiableMap(glyphSubstitutionMap)); + } + + private void extractData(Map, Integer> glyphSubstitutionMap, + LookupTable lookupTable) + { + + for (LookupSubTable lookupSubTable : lookupTable.getSubTables()) + { + if (lookupSubTable instanceof LookupTypeLigatureSubstitutionSubstFormat1) + { + extractDataFromLigatureSubstitutionSubstFormat1Table(glyphSubstitutionMap, + (LookupTypeLigatureSubstitutionSubstFormat1) lookupSubTable); + } + else if (lookupSubTable instanceof LookupTypeSingleSubstFormat1) + { + extractDataFromSingleSubstTableFormat1Table(glyphSubstitutionMap, + (LookupTypeSingleSubstFormat1) lookupSubTable); + } + else if (lookupSubTable instanceof LookupTypeSingleSubstFormat2) + { + extractDataFromSingleSubstTableFormat2Table(glyphSubstitutionMap, + (LookupTypeSingleSubstFormat2) lookupSubTable); + } + else + { + LOG.warn("The type " + lookupSubTable + " is not yet supported, will be ignored"); + } + } + + } + + private void extractDataFromSingleSubstTableFormat1Table( + Map, Integer> glyphSubstitutionMap, + LookupTypeSingleSubstFormat1 singleSubstTableFormat1) + { + CoverageTable coverageTable = singleSubstTableFormat1.getCoverageTable(); + for (int i = 0; i < coverageTable.getSize(); i++) + { + int coverageGlyphId = coverageTable.getGlyphId(i); + int substituteGlyphId = coverageGlyphId + singleSubstTableFormat1.getDeltaGlyphID(); + putNewSubstitutionEntry(glyphSubstitutionMap, substituteGlyphId, + Arrays.asList(coverageGlyphId)); + } + } + + private void extractDataFromSingleSubstTableFormat2Table( + Map, Integer> glyphSubstitutionMap, + LookupTypeSingleSubstFormat2 singleSubstTableFormat2) + { + + CoverageTable coverageTable = singleSubstTableFormat2.getCoverageTable(); + + if (coverageTable.getSize() != singleSubstTableFormat2.getSubstituteGlyphIDs().length) + { + throw new IllegalArgumentException( + "The no. coverage table entries should be the same as the size of the substituteGlyphIDs"); + } + + for (int i = 0; i < coverageTable.getSize(); i++) + { + int coverageGlyphId = coverageTable.getGlyphId(i); + int substituteGlyphId = coverageGlyphId + + singleSubstTableFormat2.getSubstituteGlyphIDs()[i]; + putNewSubstitutionEntry(glyphSubstitutionMap, substituteGlyphId, + Arrays.asList(coverageGlyphId)); + } + } + + private void extractDataFromLigatureSubstitutionSubstFormat1Table( + Map, Integer> glyphSubstitutionMap, + LookupTypeLigatureSubstitutionSubstFormat1 ligatureSubstitutionTable) + { + + for (LigatureSetTable ligatureSetTable : ligatureSubstitutionTable.getLigatureSetTables()) + { + for (LigatureTable ligatureTable : ligatureSetTable.getLigatureTables()) + { + extractDataFromLigatureTable(glyphSubstitutionMap, ligatureTable); + } + + } + + } + + private void extractDataFromLigatureTable(Map, Integer> glyphSubstitutionMap, + LigatureTable ligatureTable) + { + + List glyphsToBeSubstituted = new ArrayList<>(); + + for (int componentGlyphID : ligatureTable.getComponentGlyphIDs()) + { + glyphsToBeSubstituted.add(componentGlyphID); + } + + LOG.debug("glyphsToBeSubstituted: " + glyphsToBeSubstituted); + + putNewSubstitutionEntry(glyphSubstitutionMap, ligatureTable.getLigatureGlyph(), + glyphsToBeSubstituted); + + } + + private void putNewSubstitutionEntry(Map, Integer> glyphSubstitutionMap, + int newGlyph, List glyphsToBeSubstituted) + { + Integer oldValue = glyphSubstitutionMap.put(glyphsToBeSubstituted, newGlyph); + + if (oldValue != null) + { + String message = "For the newGlyph: " + newGlyph + ", newValue: " + + glyphsToBeSubstituted + " is trying to override the oldValue: " + oldValue; + LOG.warn(message); + } + } + + private static class ScriptTableDetails + { + private final Language language; + private final String featureName; + private final ScriptTable scriptTable; + + private ScriptTableDetails(Language language, String featureName, ScriptTable scriptTable) + { + this.language = language; + this.featureName = featureName; + this.scriptTable = scriptTable; + } + + public Language getLanguage() + { + return language; + } + + public String getFeatureName() + { + return featureName; + } + + public ScriptTable getScriptTable() + { + return scriptTable; + } + + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorker.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorker.java new file mode 100644 index 00000000000..23060ed519a --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorker.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.List; + +/** + * This class is responsible for replacing GlyphIDs with new ones according to the GSUB tables. Each language should + * have an implementation of this. + * + * @author Palash Ray + * + */ +public interface GsubWorker +{ + /** + * Applies language-specific transforms including GSUB and any other pre or post-processing necessary for displaying + * Glyphs correctly. + * + */ + List applyTransforms(List originalGlyphIds); + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerFactory.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerFactory.java new file mode 100644 index 00000000000..872ccfd9a93 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerFactory.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.ttf.model.Language; + +/** + * Gets a {@link Language} specific instance of a {@link GsubWorker} + * + * @author Palash Ray + * + */ +public class GsubWorkerFactory +{ + + public GsubWorker getGsubWorker(CmapLookup cmapLookup, GsubData gsubData) + { + switch (gsubData.getLanguage()) + { + case BENGALI: + return new GsubWorkerForBengali(cmapLookup, gsubData); + default: + throw new UnsupportedOperationException( + "The language " + gsubData.getLanguage() + " is not yet supported"); + } + + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java new file mode 100644 index 00000000000..eefaed5910a --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java @@ -0,0 +1,240 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.ttf.model.ScriptFeature; + +/** + * + * Bengali-specific implementation of GSUB system + * + * @author Palash Ray + * + */ +public class GsubWorkerForBengali implements GsubWorker +{ + + private static final Log LOG = LogFactory.getLog(GsubWorkerForBengali.class); + + private static final String INIT_FEATURE = "init"; + + /** + * This sequence is very important. This has been taken from https://docs.microsoft.com/en-us/typography/script-development/bengali + */ + private static final List FEATURES_IN_ORDER = Arrays.asList("locl", "nukt", "akhn", + "rphf", "blwf", "pstf", "half", "vatu", "cjct", INIT_FEATURE, "pres", "abvs", "blws", + "psts", "haln", "calt"); + + private static final char[] BEFORE_HALF_CHARS = new char[] { '\u09BF', '\u09C7', '\u09C8' }; + private static final BeforeAndAfterSpanComponent[] BEFORE_AND_AFTER_SPAN_CHARS = new BeforeAndAfterSpanComponent[] { + new BeforeAndAfterSpanComponent('\u09CB', '\u09C7', '\u09BE'), + new BeforeAndAfterSpanComponent('\u09CC', '\u09C7', '\u09D7') }; + + private final CmapLookup cmapLookup; + private final GsubData gsubData; + + private final List beforeHalfGlyphIds; + private final Map beforeAndAfterSpanGlyphIds; + + + GsubWorkerForBengali(CmapLookup cmapLookup, GsubData gsubData) + { + this.cmapLookup = cmapLookup; + this.gsubData = gsubData; + beforeHalfGlyphIds = getBeforeHalfGlyphIds(); + beforeAndAfterSpanGlyphIds = getBeforeAndAfterSpanGlyphIds(); + } + + @Override + public List applyTransforms(List originalGlyphIds) + { + List intermediateGlyphsFromGsub = originalGlyphIds; + + for (String feature : FEATURES_IN_ORDER) + { + if (!gsubData.isFeatureSupported(feature)) + { + LOG.debug("the feature " + feature + " was not found"); + continue; + } + + LOG.debug("applying the feature " + feature); + + ScriptFeature scriptFeature = gsubData.getFeature(feature); + + intermediateGlyphsFromGsub = applyGsubFeature(scriptFeature, + intermediateGlyphsFromGsub); + } + + return Collections.unmodifiableList(repositionGlyphs(intermediateGlyphsFromGsub)); + } + + private List repositionGlyphs(List originalGlyphIds) + { + List glyphsRepositionedByBeforeHalf = repositionBeforeHalfGlyphIds( + originalGlyphIds); + return repositionBeforeAndAfterSpanGlyphIds(glyphsRepositionedByBeforeHalf); + } + + private List repositionBeforeHalfGlyphIds(List originalGlyphIds) + { + List repositionedGlyphIds = new ArrayList<>(originalGlyphIds); + + for (int index = 1; index < originalGlyphIds.size(); index++) + { + int glyphId = originalGlyphIds.get(index); + if (beforeHalfGlyphIds.contains(glyphId)) + { + int previousGlyphId = originalGlyphIds.get(index - 1); + repositionedGlyphIds.set(index, previousGlyphId); + repositionedGlyphIds.set(index - 1, glyphId); + } + } + return repositionedGlyphIds; + } + + private List repositionBeforeAndAfterSpanGlyphIds(List originalGlyphIds) + { + List repositionedGlyphIds = new ArrayList<>(originalGlyphIds); + + for (int index = 1; index < originalGlyphIds.size(); index++) + { + int glyphId = originalGlyphIds.get(index); + if (beforeAndAfterSpanGlyphIds.containsKey(glyphId)) + { + BeforeAndAfterSpanComponent beforeAndAfterSpanComponent = beforeAndAfterSpanGlyphIds + .get(glyphId); + int previousGlyphId = originalGlyphIds.get(index - 1); + repositionedGlyphIds.set(index, previousGlyphId); + repositionedGlyphIds.set(index - 1, + getGlyphId(beforeAndAfterSpanComponent.beforeComponentCharacter)); + repositionedGlyphIds.add(index + 1, + getGlyphId(beforeAndAfterSpanComponent.afterComponentCharacter)); + } + } + return repositionedGlyphIds; + } + + private List applyGsubFeature(ScriptFeature scriptFeature, + List originalGlyphs) + { + + GlyphArraySplitter glyphArraySplitter = new GlyphArraySplitterRegexImpl( + scriptFeature.getAllGlyphIdsForSubstitution()); + + List> tokens = glyphArraySplitter.split(originalGlyphs); + + List gsubProcessedGlyphs = new ArrayList<>(); + + for (List chunk : tokens) + { + if (scriptFeature.canReplaceGlyphs(chunk)) + { + // gsub system kicks in, you get the glyphId directly + int glyphId = scriptFeature.getReplacementForGlyphs(chunk); + gsubProcessedGlyphs.add(glyphId); + } + else + { + gsubProcessedGlyphs.addAll(chunk); + } + } + + LOG.debug("originalGlyphs: " + originalGlyphs + ", gsubProcessedGlyphs: " + + gsubProcessedGlyphs); + + return gsubProcessedGlyphs; + } + + private List getBeforeHalfGlyphIds() + { + List glyphIds = new ArrayList<>(); + + for (char character : BEFORE_HALF_CHARS) + { + glyphIds.add(getGlyphId(character)); + } + + if (gsubData.isFeatureSupported(INIT_FEATURE)) + { + ScriptFeature feature = gsubData.getFeature(INIT_FEATURE); + for (List glyphCluster : feature.getAllGlyphIdsForSubstitution()) + { + glyphIds.add(feature.getReplacementForGlyphs(glyphCluster)); + } + } + + return Collections.unmodifiableList(glyphIds); + + } + + private Integer getGlyphId(char character) + { + return cmapLookup.getGlyphId(character); + } + + private Map getBeforeAndAfterSpanGlyphIds() + { + Map result = new HashMap<>(); + + for (BeforeAndAfterSpanComponent beforeAndAfterSpanComponent : BEFORE_AND_AFTER_SPAN_CHARS) + { + result.put( + getGlyphId(beforeAndAfterSpanComponent.originalCharacter), + beforeAndAfterSpanComponent); + } + + return Collections.unmodifiableMap(result); + } + + /** + * Models characters like O-kar (\u09CB) and OU-kar (\u09CC). Since these 2 characters is + * represented by 2 components, one before and one after the Vyanjan Varna on which this is + * used, this glyph has to be replaced by these 2 glyphs. For O-kar, it has to be replaced by + * E-kar (\u09C7) and AA-kar (\u09BE). For OU-kar, it has be replaced by E-kar (\u09C7) and + * \u09D7. + * + */ + private static class BeforeAndAfterSpanComponent { + private final char originalCharacter; + private final char beforeComponentCharacter; + private final char afterComponentCharacter; + + BeforeAndAfterSpanComponent(char originalCharacter, char beforeComponentCharacter, + char afterComponentCharacter) + { + this.originalCharacter = originalCharacter; + this.beforeComponentCharacter = beforeComponentCharacter; + this.afterComponentCharacter = afterComponentCharacter; + } + + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/package.html b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/package.html new file mode 100644 index 00000000000..a3349107e78 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains utility classes which extract meanigful data from the highly obfuscated GSUB table structures. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/model/GsubData.java b/fontbox/src/main/java/org/apache/fontbox/ttf/model/GsubData.java new file mode 100644 index 00000000000..425d14b807c --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/model/GsubData.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.model; + +import java.util.Set; + +/** + * Model for data from the GSUB tables + * + * @author Palash Ray + * + */ +public interface GsubData +{ + /** + * To be used when there is no GSUB data available + */ + GsubData NO_DATA_FOUND = new GsubData() + { + + @Override + public boolean isFeatureSupported(String featureName) + { + throw new UnsupportedOperationException(); + } + + @Override + public Language getLanguage() + { + throw new UnsupportedOperationException(); + } + + @Override + public ScriptFeature getFeature(String featureName) + { + throw new UnsupportedOperationException(); + } + + @Override + public String getActiveScriptName() + { + throw new UnsupportedOperationException(); + } + + @Override + public Set getSupportedFeatures() + { + throw new UnsupportedOperationException(); + } + }; + + Language getLanguage(); + + /** + * A {@link Language} can have more than one script that is supported. However, at any given + * point, only one of the many scripts are active. + * + * @return The name of the script that is active. + */ + String getActiveScriptName(); + + boolean isFeatureSupported(String featureName); + + ScriptFeature getFeature(String featureName); + + Set getSupportedFeatures(); + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/model/Language.java b/fontbox/src/main/java/org/apache/fontbox/ttf/model/Language.java new file mode 100644 index 00000000000..9e360813dc9 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/model/Language.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.model; + +import org.apache.fontbox.ttf.gsub.GsubWorker; +import org.apache.fontbox.ttf.gsub.GsubWorkerFactory; +import org.apache.fontbox.ttf.table.common.ScriptRecord; + +/** + * Enumerates the languages supported for GSUB operation. In order to support a new language, you + * need to add it here and then implement the {@link GsubWorker} for the given language and return + * the same from the + * {@link GsubWorkerFactory#getGsubWorker(org.apache.fontbox.ttf.CmapLookup, GsubData)} + * + * @author Palash Ray + * + */ +public enum Language +{ + + BENGALI(new String[] { "bng2", "beng" }); + + private final String[] scriptNames; + + private Language(String[] scriptNames) + { + this.scriptNames = scriptNames; + } + + /** + * ScriptNames form the basis of identification of the language. This method gets the ScriptNames that the given + * Language supports, in the order of preference, Index 0 being the most preferred. These names should match the + * {@link ScriptRecord} in the GSUB system. + */ + public String[] getScriptNames() + { + return scriptNames; + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/model/MapBackedGsubData.java b/fontbox/src/main/java/org/apache/fontbox/ttf/model/MapBackedGsubData.java new file mode 100644 index 00000000000..a795588caa3 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/model/MapBackedGsubData.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.model; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * + * A {@link Map} based simple implementation of the {@link GsubData} + * + * @author Palash Ray + * + */ +public class MapBackedGsubData implements GsubData +{ + + private final Language language; + private final String activeScriptName; + private final Map, Integer>> glyphSubstitutionMap; + + public MapBackedGsubData(Language language, String activeScriptName, + Map, Integer>> glyphSubstitutionMap) + { + this.language = language; + this.activeScriptName = activeScriptName; + this.glyphSubstitutionMap = glyphSubstitutionMap; + } + + @Override + public Language getLanguage() + { + return language; + } + + @Override + public String getActiveScriptName() + { + return activeScriptName; + } + + @Override + public boolean isFeatureSupported(String featureName) + { + return glyphSubstitutionMap.containsKey(featureName); + } + + @Override + public ScriptFeature getFeature(String featureName) + { + if (!isFeatureSupported(featureName)) + { + throw new UnsupportedOperationException( + "The feature " + featureName + " is not supported!"); + } + + return new MapBackedScriptFeature(featureName, glyphSubstitutionMap.get(featureName)); + } + + @Override + public Set getSupportedFeatures() + { + return glyphSubstitutionMap.keySet(); + } + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/model/MapBackedScriptFeature.java b/fontbox/src/main/java/org/apache/fontbox/ttf/model/MapBackedScriptFeature.java new file mode 100644 index 00000000000..ba2791c1426 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/model/MapBackedScriptFeature.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.model; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * + * A {@link Map} based simple implementation of the {@link ScriptFeature} + * + * @author Palash Ray + * + */ +public class MapBackedScriptFeature implements ScriptFeature +{ + + private final String name; + private final Map, Integer> featureMap; + + public MapBackedScriptFeature(String name, Map, Integer> featureMap) + { + this.name = name; + this.featureMap = featureMap; + } + + @Override + public String getName() + { + return name; + } + + @Override + public Set> getAllGlyphIdsForSubstitution() + { + return featureMap.keySet(); + } + + @Override + public boolean canReplaceGlyphs(List glyphIds) + { + return featureMap.containsKey(glyphIds); + } + + @Override + public Integer getReplacementForGlyphs(List glyphIds) + { + if (!canReplaceGlyphs(glyphIds)) + { + throw new UnsupportedOperationException( + "The glyphs " + glyphIds + " cannot be replaced"); + } + return featureMap.get(glyphIds); + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((featureMap == null) ? 0 : featureMap.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (obj == null) + { + return false; + } + if (getClass() != obj.getClass()) + { + return false; + } + MapBackedScriptFeature other = (MapBackedScriptFeature) obj; + if (featureMap == null) + { + if (other.featureMap != null) + { + return false; + } + } + else if (!featureMap.equals(other.featureMap)) + { + return false; + } + if (name == null) + { + if (other.name != null) + { + return false; + } + } + else if (!name.equals(other.name)) + { + return false; + } + return true; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/model/ScriptFeature.java b/fontbox/src/main/java/org/apache/fontbox/ttf/model/ScriptFeature.java new file mode 100644 index 00000000000..1efad551b8d --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/model/ScriptFeature.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.model; + +import java.util.List; +import java.util.Set; + +import org.apache.fontbox.ttf.table.common.FeatureRecord; + +/** + * Models a {@link FeatureRecord} + * + * @author Palash Ray + * + */ +public interface ScriptFeature +{ + + String getName(); + + Set> getAllGlyphIdsForSubstitution(); + + boolean canReplaceGlyphs(List glyphIds); + + Integer getReplacementForGlyphs(List glyphIds); + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/model/package.html b/fontbox/src/main/java/org/apache/fontbox/ttf/model/package.html new file mode 100644 index 00000000000..4878a8b2f06 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/model/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains a more logical model for the various font tables like GSUB. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/package.html b/fontbox/src/main/java/org/apache/fontbox/ttf/package.html new file mode 100644 index 00000000000..eff307a04c1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains classes to parse a TTF file. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTable.java new file mode 100644 index 00000000000..8dcb5a271f2 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTable.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Coverage Table in the + * Open Type layout common tables. + * + * @author Palash Ray + * + */ +public abstract class CoverageTable +{ + private final int coverageFormat; + + public CoverageTable(int coverageFormat) + { + this.coverageFormat = coverageFormat; + } + + public abstract int getCoverageIndex(int gid); + + public abstract int getGlyphId(int index); + + public abstract int getSize(); + + public int getCoverageFormat() + { + return coverageFormat; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTableFormat1.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTableFormat1.java new file mode 100644 index 00000000000..7d3888403a4 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTableFormat1.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +import java.util.Arrays; + +/** + * This class models the + * Coverage format 1 + * in the Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class CoverageTableFormat1 extends CoverageTable +{ + + private final int[] glyphArray; + + public CoverageTableFormat1(int coverageFormat, int[] glyphArray) + { + super(coverageFormat); + this.glyphArray = glyphArray; + } + + @Override + public int getCoverageIndex(int gid) + { + return Arrays.binarySearch(glyphArray, gid); + } + + @Override + public int getGlyphId(int index) + { + return glyphArray[index]; + } + + @Override + public int getSize() + { + return glyphArray.length; + } + + public int[] getGlyphArray() + { + return glyphArray; + } + + @Override + public String toString() + { + return String.format("CoverageTableFormat1[coverageFormat=%d,glyphArray=%s]", + getCoverageFormat(), Arrays.toString(glyphArray)); + } + + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTableFormat2.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTableFormat2.java new file mode 100644 index 00000000000..2f27b75afe5 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/CoverageTableFormat2.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class models the + * Coverage format 2 + * in the Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class CoverageTableFormat2 extends CoverageTableFormat1 +{ + private final RangeRecord[] rangeRecords; + + public CoverageTableFormat2(int coverageFormat, RangeRecord[] rangeRecords) + { + super(coverageFormat, getRangeRecordsAsArray(rangeRecords)); + this.rangeRecords = rangeRecords; + } + + public RangeRecord[] getRangeRecords() + { + return rangeRecords; + } + + private static int[] getRangeRecordsAsArray(RangeRecord[] rangeRecords) + { + + List glyphIds = new ArrayList<>(); + + for (int i = 0; i < rangeRecords.length; i++) + { + for (int glyphId = rangeRecords[i].getStartGlyphID(); glyphId <= rangeRecords[i] + .getEndGlyphID(); glyphId++) + { + glyphIds.add(glyphId); + } + } + + int[] glyphArray = new int[glyphIds.size()]; + + for (int i = 0; i < glyphArray.length; i++) + { + glyphArray[i] = glyphIds.get(i); + } + + return glyphArray; + } + + @Override + public String toString() + { + return String.format("CoverageTableFormat2[coverageFormat=%d]", getCoverageFormat()); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureListTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureListTable.java new file mode 100644 index 00000000000..0f05d8eeae7 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureListTable.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Feature List + * table in the Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class FeatureListTable +{ + private final int featureCount; + private final FeatureRecord[] featureRecords; + + public FeatureListTable(int featureCount, FeatureRecord[] featureRecords) + { + this.featureCount = featureCount; + this.featureRecords = featureRecords; + } + + public int getFeatureCount() + { + return featureCount; + } + + public FeatureRecord[] getFeatureRecords() + { + return featureRecords; + } + + + @Override + public String toString() + { + return String.format("%s[featureCount=%d]", FeatureListTable.class.getSimpleName(), + featureCount); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureRecord.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureRecord.java new file mode 100644 index 00000000000..b6e9c609e08 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureRecord.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Features and + * lookups in the Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class FeatureRecord +{ + private final String featureTag; + private final FeatureTable featureTable; + + public FeatureRecord(String featureTag, FeatureTable featureTable) + { + this.featureTag = featureTag; + this.featureTable = featureTable; + } + + public String getFeatureTag() + { + return featureTag; + } + + public FeatureTable getFeatureTable() + { + return featureTable; + } + + @Override + public String toString() + { + return String.format("FeatureRecord[featureTag=%s]", featureTag); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureTable.java new file mode 100644 index 00000000000..56101cd4875 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/FeatureTable.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Feature table in the + * Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class FeatureTable +{ + private final int featureParams; + private final int lookupIndexCount; + private final int[] lookupListIndices; + + public FeatureTable(int featureParams, int lookupIndexCount, int[] lookupListIndices) + { + this.featureParams = featureParams; + this.lookupIndexCount = lookupIndexCount; + this.lookupListIndices = lookupListIndices; + } + + public int getFeatureParams() + { + return featureParams; + } + + public int getLookupIndexCount() + { + return lookupIndexCount; + } + + public int[] getLookupListIndices() + { + return lookupListIndices; + } + + @Override + public String toString() + { + return String.format("FeatureTable[lookupListIndiciesCount=%d]", lookupListIndices.length); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LangSysRecord.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LangSysRecord.java new file mode 100644 index 00000000000..04a5fdc3283 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LangSysRecord.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the Language + * system tags in the Open Type Font specs. + * + * @author Palash Ray + * + */ +public class LangSysRecord +{ + private final String langSysTag; + private final LangSysTable langSysTable; + + public LangSysRecord(String langSysTag, LangSysTable langSysTable) + { + this.langSysTag = langSysTag; + this.langSysTable = langSysTable; + } + + public String getLangSysTag() + { + return langSysTag; + } + + public LangSysTable getLangSysTable() + { + return langSysTable; + } + + @Override + public String toString() + { + return String.format("LangSysRecord[langSysTag=%s]", langSysTag); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LangSysTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LangSysTable.java new file mode 100644 index 00000000000..9cbe24572cf --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LangSysTable.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the Language + * system tags in the Open Type Font specs. + * + * @author Palash Ray + * + */ +public class LangSysTable +{ + private final int lookupOrder; + private final int requiredFeatureIndex; + private final int featureIndexCount; + private final int[] featureIndices; + + public LangSysTable(int lookupOrder, int requiredFeatureIndex, int featureIndexCount, + int[] featureIndices) + { + this.lookupOrder = lookupOrder; + this.requiredFeatureIndex = requiredFeatureIndex; + this.featureIndexCount = featureIndexCount; + this.featureIndices = featureIndices; + } + + public int getLookupOrder() + { + return lookupOrder; + } + + public int getRequiredFeatureIndex() + { + return requiredFeatureIndex; + } + + public int getFeatureIndexCount() + { + return featureIndexCount; + } + + public int[] getFeatureIndices() + { + return featureIndices; + } + + @Override + public String toString() + { + return String.format("LangSysTable[requiredFeatureIndex=%d]", requiredFeatureIndex); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupListTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupListTable.java new file mode 100644 index 00000000000..5a07b4cd4f3 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupListTable.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Lookup List Table + * in the Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class LookupListTable +{ + private final int lookupCount; + private final LookupTable[] lookups; + + public LookupListTable(int lookupCount, LookupTable[] lookups) + { + this.lookupCount = lookupCount; + this.lookups = lookups; + } + + public int getLookupCount() + { + return lookupCount; + } + + public LookupTable[] getLookups() + { + return lookups; + } + + @Override + public String toString() + { + return String.format("%s[lookupCount=%d]", LookupListTable.class.getSimpleName(), + lookupCount); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupSubTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupSubTable.java new file mode 100644 index 00000000000..3d090fe04f3 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupSubTable.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Lookup Sub-Table in the + * Open Type layout common tables. + * + * @author Palash Ray + * + */ +public abstract class LookupSubTable +{ + private final int substFormat; + private final CoverageTable coverageTable; + + public LookupSubTable(int substFormat, CoverageTable coverageTable) + { + this.substFormat = substFormat; + this.coverageTable = coverageTable; + } + + public abstract int doSubstitution(int gid, int coverageIndex); + + public int getSubstFormat() + { + return substFormat; + } + + public CoverageTable getCoverageTable() + { + return coverageTable; + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupTable.java new file mode 100644 index 00000000000..1f7dc29ef78 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/LookupTable.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Lookup Table in the + * Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class LookupTable +{ + private final int lookupType; + private final int lookupFlag; + private final int markFilteringSet; + private final LookupSubTable[] subTables; + + public LookupTable(int lookupType, int lookupFlag, int markFilteringSet, + LookupSubTable[] subTables) + { + this.lookupType = lookupType; + this.lookupFlag = lookupFlag; + this.markFilteringSet = markFilteringSet; + this.subTables = subTables; + } + + public int getLookupType() + { + return lookupType; + } + + public int getLookupFlag() + { + return lookupFlag; + } + + public int getMarkFilteringSet() + { + return markFilteringSet; + } + + public LookupSubTable[] getSubTables() + { + return subTables; + } + + @Override + public String toString() + { + return String.format("LookupTable[lookupType=%d,lookupFlag=%d,markFilteringSet=%d]", + lookupType, lookupFlag, markFilteringSet); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/RangeRecord.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/RangeRecord.java new file mode 100644 index 00000000000..8e374039978 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/RangeRecord.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the + * Range Record in the + * Coverage format 2 in the Open Type layout common tables. + * + * @author Palash Ray + * + */ +public class RangeRecord +{ + private final int startGlyphID; + private final int endGlyphID; + private final int startCoverageIndex; + + public RangeRecord(int startGlyphID, int endGlyphID, int startCoverageIndex) + { + this.startGlyphID = startGlyphID; + this.endGlyphID = endGlyphID; + this.startCoverageIndex = startCoverageIndex; + } + + public int getStartGlyphID() + { + return startGlyphID; + } + + public int getEndGlyphID() + { + return endGlyphID; + } + + public int getStartCoverageIndex() + { + return startCoverageIndex; + } + + @Override + public String toString() + { + return String.format("RangeRecord[startGlyphID=%d,endGlyphID=%d,startCoverageIndex=%d]", + startGlyphID, endGlyphID, startCoverageIndex); + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/ScriptRecord.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/ScriptRecord.java new file mode 100644 index 00000000000..e8524ef32b7 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/ScriptRecord.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +/** + * This class models the Script tags + * in the Open Type Font specs. + * + * @author Palash Ray + * + */ +public class ScriptRecord +{ + private final String scriptTag; + private final ScriptTable scriptTable; + + public ScriptRecord(String scriptTag, ScriptTable scriptTable) + { + this.scriptTag = scriptTag; + this.scriptTable = scriptTable; + } + + public String getScriptTag() + { + return scriptTag; + } + + public ScriptTable getScriptTable() + { + return scriptTable; + } + + @Override + public String toString() + { + return String.format("ScriptRecord[scriptTag=%s]", scriptTag); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/ScriptTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/ScriptTable.java new file mode 100644 index 00000000000..24fe97d9d86 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/ScriptTable.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.common; + +import java.util.Map; + +/** + * This class models the Script tags + * in the Open Type Font specs. + * + * @author Palash Ray + * + */ +public class ScriptTable +{ + private final LangSysTable defaultLangSysTable; + private final Map langSysTables; + + public ScriptTable(LangSysTable defaultLangSysTable, Map langSysTables) + { + this.defaultLangSysTable = defaultLangSysTable; + this.langSysTables = langSysTables; + } + + public LangSysTable getDefaultLangSysTable() + { + return defaultLangSysTable; + } + + public Map getLangSysTables() + { + return langSysTables; + } + + @Override + public String toString() + { + return String.format("ScriptTable[hasDefault=%s,langSysRecordsCount=%d]", + defaultLangSysTable != null, langSysTables.size()); + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/package.html b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/package.html new file mode 100644 index 00000000000..dce4f43fd85 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/common/package.html @@ -0,0 +1,26 @@ + + + + + + + +This package contains the highly obfuscated Layout Common Table Formats system of tables from the Open Type Font specs. +This package makes an honest attempt to closely model these highly obfuscated OTF Tables, in their raw glory, as close as possible to their original nonsensical forms, without any spite or bias. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LigatureSetTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LigatureSetTable.java new file mode 100644 index 00000000000..a3844387031 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LigatureSetTable.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.gsub; + +/** + * This class is a part of the GSUB — Glyph + * Substitution Table system of tables in the Open Type Font specs. This is a part of the LookupType + * 4: Ligature Substitution Subtable. It specifically models the LigatureSet table: + * All ligatures beginning with the same glyph. + * + * @author Palash Ray + * + */ +public class LigatureSetTable +{ + private final int ligatureCount; + private final LigatureTable[] ligatureTables; + + public LigatureSetTable(int ligatureCount, LigatureTable[] ligatureTables) + { + this.ligatureCount = ligatureCount; + this.ligatureTables = ligatureTables; + } + + public int getLigatureCount() + { + return ligatureCount; + } + + public LigatureTable[] getLigatureTables() + { + return ligatureTables; + } + + @Override + public String toString() + { + return String.format("%s[ligatureCount=%d]", LigatureSetTable.class.getSimpleName(), + ligatureCount); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LigatureTable.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LigatureTable.java new file mode 100644 index 00000000000..34607ca9ee6 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LigatureTable.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.gsub; + +/** + * This class is a part of the GSUB — Glyph + * Substitution Table system of tables in the Open Type Font specs. This is a part of the LookupType + * 4: Ligature Substitution Subtable. It specifically models the + * Ligature + * table: Glyph components for one ligature. + * + * @author Palash Ray + * + */ +public class LigatureTable +{ + private final int ligatureGlyph; + private final int componentCount; + private final int[] componentGlyphIDs; + + public LigatureTable(int ligatureGlyph, int componentCount, int[] componentGlyphIDs) + { + this.ligatureGlyph = ligatureGlyph; + this.componentCount = componentCount; + this.componentGlyphIDs = componentGlyphIDs; + } + + public int getLigatureGlyph() + { + return ligatureGlyph; + } + + public int getComponentCount() + { + return componentCount; + } + + public int[] getComponentGlyphIDs() + { + return componentGlyphIDs; + } + + @Override + public String toString() + { + return String.format("%s[ligatureGlyph=%d, componentCount=%d]", + LigatureTable.class.getSimpleName(), ligatureGlyph, componentCount); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeLigatureSubstitutionSubstFormat1.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeLigatureSubstitutionSubstFormat1.java new file mode 100644 index 00000000000..8a776b0482b --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeLigatureSubstitutionSubstFormat1.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.gsub; + +import org.apache.fontbox.ttf.table.common.CoverageTable; +import org.apache.fontbox.ttf.table.common.LookupSubTable; + +/** + * This class is a part of the GSUB — Glyph + * Substitution Table system of tables in the Open Type Font specs. This is a part of the LookupType + * 4: Ligature Substitution Subtable. It specifically models the + * Ligature + * Substitution Format 1. + * + * @author Palash Ray + * + */ +public class LookupTypeLigatureSubstitutionSubstFormat1 extends LookupSubTable +{ + private final LigatureSetTable[] ligatureSetTables; + + public LookupTypeLigatureSubstitutionSubstFormat1(int substFormat, CoverageTable coverageTable, + LigatureSetTable[] ligatureSetTables) + { + super(substFormat, coverageTable); + this.ligatureSetTables = ligatureSetTables; + } + + @Override + public int doSubstitution(int gid, int coverageIndex) + { + throw new UnsupportedOperationException(); + } + + public LigatureSetTable[] getLigatureSetTables() + { + return ligatureSetTables; + } + + @Override + public String toString() + { + return String.format("%s[substFormat=%d]", + LookupTypeLigatureSubstitutionSubstFormat1.class.getSimpleName(), getSubstFormat()); + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeSingleSubstFormat1.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeSingleSubstFormat1.java new file mode 100644 index 00000000000..b7bfdeec67e --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeSingleSubstFormat1.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.gsub; + +import org.apache.fontbox.ttf.table.common.CoverageTable; +import org.apache.fontbox.ttf.table.common.LookupSubTable; + +/** + * This class is a part of the GSUB — Glyph + * Substitution Table system of tables in the Open Type Font specs. This is a part of the LookupType + * 1: Single Substitution Subtable. It specifically models the + * Single + * Substitution Format 1. + * + * @author Palash Ray + * + */ +public class LookupTypeSingleSubstFormat1 extends LookupSubTable +{ + private final short deltaGlyphID; + + public LookupTypeSingleSubstFormat1(int substFormat, CoverageTable coverageTable, + short deltaGlyphID) + { + super(substFormat, coverageTable); + this.deltaGlyphID = deltaGlyphID; + } + + @Override + public int doSubstitution(int gid, int coverageIndex) + { + return coverageIndex < 0 ? gid : gid + deltaGlyphID; + } + + public short getDeltaGlyphID() + { + return deltaGlyphID; + } + + @Override + public String toString() + { + return String.format("LookupTypeSingleSubstFormat1[substFormat=%d,deltaGlyphID=%d]", + getSubstFormat(), deltaGlyphID); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeSingleSubstFormat2.java b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeSingleSubstFormat2.java new file mode 100644 index 00000000000..38841ec7f5f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/LookupTypeSingleSubstFormat2.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.table.gsub; + +import java.util.Arrays; + +import org.apache.fontbox.ttf.table.common.CoverageTable; +import org.apache.fontbox.ttf.table.common.LookupSubTable; + +/** + * This class is a part of the GSUB — Glyph + * Substitution Table system of tables in the Open Type Font specs. This is a part of the LookupType + * 1: Single Substitution Subtable. It specifically models the + * Single + * Substitution Format 2. + * + * @author Palash Ray + * + */ +public class LookupTypeSingleSubstFormat2 extends LookupSubTable +{ + private final int[] substituteGlyphIDs; + + public LookupTypeSingleSubstFormat2(int substFormat, CoverageTable coverageTable, + int[] substituteGlyphIDs) + { + super(substFormat, coverageTable); + this.substituteGlyphIDs = substituteGlyphIDs; + } + + @Override + public int doSubstitution(int gid, int coverageIndex) + { + return coverageIndex < 0 ? gid : substituteGlyphIDs[coverageIndex]; + } + + public int[] getSubstituteGlyphIDs() + { + return substituteGlyphIDs; + } + + @Override + public String toString() + { + return String.format( + "LookupTypeSingleSubstFormat2[substFormat=%d,substituteGlyphIDs=%s]", + getSubstFormat(), Arrays.toString(substituteGlyphIDs)); + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/package.html b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/package.html new file mode 100644 index 00000000000..749617e1d6f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/gsub/package.html @@ -0,0 +1,26 @@ + + + + + + + +This package contains the highly obfuscated GSUB, aka, Glyph Substitution Table system of tables from the Open Type Font specs. +This package makes an honest attempt to closely model these highly obfuscated OTF Tables in the GSUB sub-category, in their raw glory, as close as possible to their original nonsensical forms, without any spite or bias. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/ttf/table/package.html b/fontbox/src/main/java/org/apache/fontbox/ttf/table/package.html new file mode 100644 index 00000000000..026cc99847b --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/ttf/table/package.html @@ -0,0 +1,26 @@ + + + + + + + +This package contains the highly obfuscated Font tables from the Open Type Font specs. +This package makes an honest attempt to closely model these highly obfuscated OTF Tables, in their raw glory, as close as possible to their original nonsensical forms, without any spite or bias. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java b/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java new file mode 100644 index 00000000000..b1032b766ea --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.type1; + +import java.io.IOException; + +/** + * Thrown when a font is damaged and cannot be read. + * + * @author John Hewson + */ +public class DamagedFontException extends IOException +{ + public DamagedFontException(String message) + { + super(message); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/Token.java b/fontbox/src/main/java/org/apache/fontbox/type1/Token.java new file mode 100644 index 00000000000..1f3cba2bbc2 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/Token.java @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.type1; + +/** + * A lexical token in an Adobe Type 1 font. + * + * @see Type1Lexer + * + * @author John Hewson + */ +class Token +{ + /** + * All different types of tokens. + * + */ + enum Kind + { + NONE, STRING, NAME, LITERAL, REAL, INTEGER, + START_ARRAY, END_ARRAY, + START_PROC, END_PROC, + START_DICT, END_DICT, + CHARSTRING + } + + // exposed statically for convenience + static final Kind STRING = Kind.STRING; + static final Kind NAME = Kind.NAME; + static final Kind LITERAL = Kind.LITERAL; + static final Kind REAL = Kind.REAL; + static final Kind INTEGER = Kind.INTEGER; + static final Kind START_ARRAY = Kind.START_ARRAY; + static final Kind END_ARRAY = Kind.END_ARRAY; + static final Kind START_PROC = Kind.START_PROC; + static final Kind END_PROC = Kind.END_PROC; + static final Kind CHARSTRING = Kind.CHARSTRING; + static final Kind START_DICT = Kind.START_DICT; + static final Kind END_DICT = Kind.END_DICT; + + private String text; + private byte[] data; + private final Kind kind; + + /** + * Constructs a new Token object given its text and kind. + * @param text + * @param type + */ + Token(String text, Kind type) + { + this.text = text; + this.kind = type; + } + + /** + * Constructs a new Token object given its single-character text and kind. + * @param character + * @param type + */ + Token(char character, Kind type) + { + this.text = Character.toString(character); + this.kind = type; + } + + /** + * Constructs a new Token object given its raw data and kind. + * This is for CHARSTRING tokens only. + * @param data + * @param type + */ + Token(byte[] data, Kind type) + { + this.data = data; + this.kind = type; + } + + public String getText() + { + return text; + } + + public Kind getKind() + { + return kind; + } + + public int intValue() + { + // some fonts have reals where integers should be, so we tolerate it + return (int)Float.parseFloat(text); + } + + public float floatValue() + { + return Float.parseFloat(text); + } + + public boolean booleanValue() + { + return text.equals("true"); + } + + public byte[] getData() + { + return data; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + if (kind == CHARSTRING) + { + return "Token[kind=CHARSTRING, data=" + data.length + " bytes]"; + } + else + { + return "Token[kind=" + kind + ", text=" + text + "]"; + } + } +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/Type1CharStringReader.java b/fontbox/src/main/java/org/apache/fontbox/type1/Type1CharStringReader.java new file mode 100644 index 00000000000..c905e0a8299 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/Type1CharStringReader.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.type1; + +import org.apache.fontbox.cff.Type1CharString; +import java.io.IOException; + +/** + * Something which can read Type 1 CharStrings, namely Type 1 and CFF fonts. + * + * @author John Hewson + */ +public interface Type1CharStringReader +{ + /** + * Returns the Type 1 CharString for the character with the given name. + * + * @return Type 1 CharString + * @throws IOException if something went wrong + */ + Type1CharString getType1CharString(String name) throws IOException; +} diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/Type1Font.java b/fontbox/src/main/java/org/apache/fontbox/type1/Type1Font.java new file mode 100644 index 00000000000..2c93960b82a --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/Type1Font.java @@ -0,0 +1,554 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.type1; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.EncodedFont; +import org.apache.fontbox.cff.Type1CharString; +import org.apache.fontbox.cff.Type1CharStringParser; +import org.apache.fontbox.encoding.Encoding; +import org.apache.fontbox.pfb.PfbParser; +import org.apache.fontbox.util.BoundingBox; + +/** + * Represents an Adobe Type 1 (.pfb) font. Thread safe. + * + * @author John Hewson + */ +public final class Type1Font implements Type1CharStringReader, EncodedFont, FontBoxFont +{ + /** + * Constructs a new Type1Font object from a .pfb stream. + * + * @param pfbStream .pfb input stream, including headers + * @return a type1 font + * + * @throws IOException if something went wrong + */ + public static Type1Font createWithPFB(InputStream pfbStream) throws IOException + { + PfbParser pfb = new PfbParser(pfbStream); + Type1Parser parser = new Type1Parser(); + return parser.parse(pfb.getSegment1(), pfb.getSegment2()); + } + + /** + * Constructs a new Type1Font object from a .pfb stream. + * + * @param pfbBytes .pfb data, including headers + * @return a type1 font + * + * @throws IOException if something went wrong + */ + public static Type1Font createWithPFB(byte[] pfbBytes) throws IOException + { + PfbParser pfb = new PfbParser(pfbBytes); + Type1Parser parser = new Type1Parser(); + return parser.parse(pfb.getSegment1(), pfb.getSegment2()); + } + + /** + * Constructs a new Type1Font object from two header-less .pfb segments. + * + * @param segment1 The first segment, without header + * @param segment2 The second segment, without header + * @return A new Type1Font instance + * @throws IOException if something went wrong + */ + public static Type1Font createWithSegments(byte[] segment1, byte[] segment2) throws IOException + { + Type1Parser parser = new Type1Parser(); + return parser.parse(segment1, segment2); + } + + // font dictionary + String fontName = ""; + Encoding encoding = null; + int paintType; + int fontType; + List fontMatrix = new ArrayList<>(); + List fontBBox = new ArrayList<>(); + int uniqueID; + float strokeWidth; + String fontID = ""; + + // FontInfo dictionary + String version = ""; + String notice = ""; + String fullName = ""; + String familyName = ""; + String weight = ""; + float italicAngle; + boolean isFixedPitch; + float underlinePosition; + float underlineThickness; + + // Private dictionary + List blueValues = new ArrayList<>(); + List otherBlues = new ArrayList<>(); + List familyBlues = new ArrayList<>(); + List familyOtherBlues = new ArrayList<>(); + float blueScale; + int blueShift, blueFuzz; + List stdHW = new ArrayList<>(); + List stdVW = new ArrayList<>(); + List stemSnapH = new ArrayList<>(); + List stemSnapV = new ArrayList<>(); + boolean forceBold; + int languageGroup; + + // Subrs array, and CharStrings dictionary + final List subrs = new ArrayList<>(); + final Map charstrings = new LinkedHashMap<>(); + + // private caches + private final Map charStringCache = + new ConcurrentHashMap<>(); + + // raw data + private final byte[] segment1, segment2; + + /** + * Constructs a new Type1Font, called by Type1Parser. + */ + Type1Font(byte[] segment1, byte[] segment2) + { + this.segment1 = segment1; + this.segment2 = segment2; + } + + /** + * Returns the /Subrs array as raw bytes. + * + * @return Type 1 char string bytes + */ + public List getSubrsArray() + { + return Collections.unmodifiableList(subrs); + } + + /** + * Returns the /CharStrings dictionary as raw bytes. + * + * @return Type 1 char string bytes + */ + public Map getCharStringsDict() + { + return Collections.unmodifiableMap(charstrings); + } + + @Override + public String getName() + { + return fontName; + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + return getType1CharString(name).getPath(); + } + + @Override + public float getWidth(String name) throws IOException + { + return getType1CharString(name).getWidth(); + } + + @Override + public boolean hasGlyph(String name) + { + return charstrings.get(name) != null; + } + + @Override + public Type1CharString getType1CharString(String name) throws IOException + { + Type1CharString type1 = charStringCache.get(name); + if (type1 == null) + { + byte[] bytes = charstrings.get(name); + if (bytes == null) + { + bytes = charstrings.get(".notdef"); + } + Type1CharStringParser parser = new Type1CharStringParser(fontName, name); + List sequence = parser.parse(bytes, subrs); + type1 = new Type1CharString(this, fontName, name, sequence); + charStringCache.put(name, type1); + } + return type1; + } + + // font dictionary + + /** + * Returns the font name. + * + * @return the font name + */ + public String getFontName() + { + return fontName; + } + + /** + * Returns the Encoding, if present. + * @return the encoding or null + */ + @Override + public Encoding getEncoding() + { + return encoding; + } + + /** + * Returns the paint type. + * + * @return the paint type + */ + public int getPaintType() + { + return paintType; + } + + /** + * Returns the font type. + * + * @return the font type + */ + public int getFontType() + { + return fontType; + } + + /** + * Returns the font matrix. + * + * @return the font matrix + */ + public List getFontMatrix() + { + return Collections.unmodifiableList(fontMatrix); + } + + /** + * Returns the font bounding box. + * + * @return the font bounding box + */ + @Override + public BoundingBox getFontBBox() + { + return new BoundingBox(fontBBox); + } + + /** + * Returns unique ID. + * + * @return the unique ID + */ + public int getUniqueID() + { + return uniqueID; + } + + /** + * Returns the stroke width. + * + * @return the stroke width + */ + public float getStrokeWidth() + { + return strokeWidth; + } + + /** + * Returns the font ID. + * + * @return the font ID + */ + public String getFontID() + { + return fontID; + } + + // FontInfo dictionary + + /** + * Returns the version. + * + * @return the version + */ + public String getVersion() + { + return version; + } + + /** + * Returns the notice. + * + * @return the notice + */ + public String getNotice() + { + return notice; + } + + /** + * Returns the full name. + * + * @return the full name + */ + public String getFullName() + { + return fullName; + } + + /** + * Returns the family name. + * + * @return the family name + */ + public String getFamilyName() + { + return familyName; + } + + /** + * Returns the weight. + * + * @return the weight + */ + public String getWeight() + { + return weight; + } + + /** + * Returns the italic angle. + * + * @return the italic angle + */ + public float getItalicAngle() + { + return italicAngle; + } + + /** + * Determines if the font has a fixed pitch. + * + * @return true if the font has a fixed pitch + */ + public boolean isFixedPitch() + { + return isFixedPitch; + } + + /** + * Returns the underline position + * + * @return the underline position + */ + public float getUnderlinePosition() + { + return underlinePosition; + } + + /** + * Returns the underline thickness. + * + * @return the underline thickness + */ + public float getUnderlineThickness() + { + return underlineThickness; + } + + // Private dictionary + + /** + * Returns the blues values. + * + * @return the blues values + */ + public List getBlueValues() + { + return Collections.unmodifiableList(blueValues); + } + + /** + * Returns the other blues values. + * + * @return the other blues values + */ + public List getOtherBlues() + { + return Collections.unmodifiableList(otherBlues); + } + + /** + * Returns the family blues values. + * + * @return the family blues values + */ + public List getFamilyBlues() + { + return Collections.unmodifiableList(familyBlues); + } + + /** + * Returns the other family blues values. + * + * @return the other family blues values + */ + public List getFamilyOtherBlues() + { + return Collections.unmodifiableList(familyOtherBlues); + } + + /** + * Returns the blue scale. + * + * @return the blue scale + */ + public float getBlueScale() + { + return blueScale; + } + + /** + * Returns the blue shift. + * + * @return the blue shift + */ + public int getBlueShift() + { + return blueShift; + } + + /** + * Returns the blue fuzz. + * + * @return the blue fuzz + */ + public int getBlueFuzz() + { + return blueFuzz; + } + + /** + * Returns the StdHW value. + * + * @return the StdHW value + */ + public List getStdHW() + { + return Collections.unmodifiableList(stdHW); + } + + /** + * Returns the StdVW value. + * + * @return the StdVW value + */ + public List getStdVW() + { + return Collections.unmodifiableList(stdVW); + } + + /** + * Returns the StemSnapH value. + * + * @return the StemSnapH value + */ + public List getStemSnapH() + { + return Collections.unmodifiableList(stemSnapH); + } + + /** + * Returns the StemSnapV value. + * + * @return the StemSnapV value + */ + public List getStemSnapV() + { + return Collections.unmodifiableList(stemSnapV); + } + + /** + * Determines if the font is bold. + * + * @return true if the font is bold + */ + public boolean isForceBold() + { + return forceBold; + } + + /** + * Returns the language group. + * + * @return the language group + */ + public int getLanguageGroup() + { + return languageGroup; + } + + /** + * Returns the ASCII segment. + * + * @return the ASCII segment. + */ + public byte[] getASCIISegment() + { + return segment1; + } + + /** + * Returns the binary segment. + * + * @return the binary segment. + */ + public byte[] getBinarySegment() + { + return segment2; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return getClass().getName() + "[fontName=" + fontName + ", fullName=" + fullName + + ", encoding=" + encoding + ", charStringsDict=" + charstrings + + "]"; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java b/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java new file mode 100644 index 00000000000..ba0eebaa333 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java @@ -0,0 +1,469 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.fontbox.type1; + +import java.io.IOException; +import java.nio.ByteBuffer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Lexer for the ASCII portions of an Adobe Type 1 font. + * + * @see Type1Parser + * + * The PostScript language, of which Type 1 fonts are a subset, has a + * somewhat awkward lexical structure. It is neither regular nor + * context-free, and the execution of the program can modify the + * the behaviour of the lexer/parser. + * + * Nevertheless, this class represents an attempt to artificially seperate + * the PostScript parsing process into separate lexing and parsing phases + * in order to reduce the complexity of the parsing phase. + * + * @see "PostScript Language Reference 3rd ed, Adobe Systems (1999)" + * + * @author John Hewson + */ +class Type1Lexer +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(Type1Lexer.class); + + private final ByteBuffer buffer; + private Token aheadToken; + private int openParens = 0; + + /** + * Constructs a new Type1Lexer given a header-less .pfb segment. + * @param bytes Header-less .pfb segment + * @throws IOException + */ + Type1Lexer(byte[] bytes) throws IOException + { + buffer = ByteBuffer.wrap(bytes); + aheadToken = readToken(null); + } + + /** + * Returns the next token and consumes it. + * @return The next token. + */ + public Token nextToken() throws IOException + { + Token curToken = aheadToken; + //System.out.println(curToken); // for debugging + aheadToken = readToken(curToken); + return curToken; + } + + /** + * Returns the next token without consuming it. + * @return The next token + */ + public Token peekToken() + { + return aheadToken; + } + + /** + * Reads an ASCII char from the buffer. + */ + private char getChar() + { + return (char) buffer.get(); + } + + /** + * Reads a single token. + * @param prevToken the previous token + */ + private Token readToken(Token prevToken) throws IOException + { + boolean skip; + do + { + skip = false; + while (buffer.hasRemaining()) + { + char c = getChar(); + + // delimiters + if (c == '%') + { + // comment + readComment(); + } + else if (c == '(') + { + return readString(); + } + else if (c == ')') + { + // not allowed outside a string context + throw new IOException("unexpected closing parenthesis"); + } + else if (c == '[') + { + return new Token(c, Token.START_ARRAY); + } + else if (c == '{') + { + return new Token(c, Token.START_PROC); + } + else if (c == ']') + { + return new Token(c, Token.END_ARRAY); + } + else if (c == '}') + { + return new Token(c, Token.END_PROC); + } + else if (c == '/') + { + return new Token(readRegular(), Token.LITERAL); + } + else if (c == '<') + { + char c2 = getChar(); + if (c2 == c) + { + return new Token("<<", Token.START_DICT); + } + else + { + // code may have to be changed in something better, maybe new token type + buffer.position(buffer.position() - 1); + return new Token(c, Token.NAME); + } + } + else if (c == '>') + { + char c2 = getChar(); + if (c2 == c) + { + return new Token(">>", Token.END_DICT); + } + else + { + // code may have to be changed in something better, maybe new token type + buffer.position(buffer.position() - 1); + return new Token(c, Token.NAME); + } + } + else if (Character.isWhitespace(c)) + { + skip = true; + } + else if (c == 0) + { + LOG.warn("NULL byte in font, skipped"); + skip = true; + } + else + { + buffer.position(buffer.position() -1); + + // regular character: try parse as number + Token number = tryReadNumber(); + if (number != null) + { + return number; + } + else + { + // otherwise this must be a name + String name = readRegular(); + if (name == null) + { + // the stream is corrupt + throw new DamagedFontException("Could not read token at position " + + buffer.position()); + } + + if (name.equals("RD") || name.equals("-|")) + { + // return the next CharString instead + if (prevToken.getKind() == Token.INTEGER) + { + return readCharString(prevToken.intValue()); + } + else + { + throw new IOException("expected INTEGER before -| or RD"); + } + } + else + { + return new Token(name, Token.NAME); + } + } + } + } + } + while (skip); + return null; + } + + /** + * Reads a number or returns null. + */ + private Token tryReadNumber() + { + buffer.mark(); + + StringBuilder sb = new StringBuilder(); + StringBuilder radix = null; + char c = getChar(); + boolean hasDigit = false; + + // optional + or - + if (c == '+' || c == '-') + { + sb.append(c); + c = getChar(); + } + + // optional digits + while (Character.isDigit(c)) + { + sb.append(c); + c = getChar(); + hasDigit = true; + } + + // optional . + if (c == '.') + { + sb.append(c); + c = getChar(); + } + else if (c == '#') + { + // PostScript radix number takes the form base#number + radix = sb; + sb = new StringBuilder(); + c = getChar(); + } + else if (sb.length() == 0 || !hasDigit) + { + // failure + buffer.reset(); + return null; + } + else + { + // integer + buffer.position(buffer.position() -1); + return new Token(sb.toString(), Token.INTEGER); + } + + // required digit + if (Character.isDigit(c)) + { + sb.append(c); + c = getChar(); + } + else + { + // failure + buffer.reset(); + return null; + } + + // optional digits + while (Character.isDigit(c)) + { + sb.append(c); + c = getChar(); + } + + // optional E + if (c == 'E') + { + sb.append(c); + c = getChar(); + + // optional minus + if (c == '-') + { + sb.append(c); + c = getChar(); + } + + // required digit + if (Character.isDigit(c)) + { + sb.append(c); + c = getChar(); + } + else + { + // failure + buffer.reset(); + return null; + } + + // optional digits + while (Character.isDigit(c)) + { + sb.append(c); + c = getChar(); + } + } + + buffer.position(buffer.position() - 1); + if (radix != null) + { + Integer val = Integer.parseInt(sb.toString(), Integer.parseInt(radix.toString())); + return new Token(val.toString(), Token.INTEGER); + } + return new Token(sb.toString(), Token.REAL); + } + + /** + * Reads a sequence of regular characters, i.e. not delimiters + * or whitespace + */ + private String readRegular() + { + StringBuilder sb = new StringBuilder(); + while (buffer.hasRemaining()) + { + buffer.mark(); + char c = getChar(); + if (Character.isWhitespace(c) || + c == '(' || c == ')' || + c == '<' || c == '>' || + c == '[' || c == ']' || + c == '{' || c == '}' || + c == '/' || c == '%' ) + { + buffer.reset(); + break; + } + else + { + sb.append(c); + } + } + String regular = sb.toString(); + if (regular.length() == 0) + { + return null; + } + return regular; + } + + /** + * Reads a line comment. + */ + private String readComment() + { + StringBuilder sb = new StringBuilder(); + while (buffer.hasRemaining()) + { + char c = getChar(); + if (c == '\r' || c == '\n') + { + break; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * Reads a (string). + */ + private Token readString() + { + StringBuilder sb = new StringBuilder(); + + while (buffer.hasRemaining()) + { + char c = getChar(); + + // string context + switch (c) + { + case '(': + openParens++; + sb.append('('); + break; + case ')': + if (openParens == 0) + { + // end of string + return new Token(sb.toString(), Token.STRING); + } + sb.append(')'); + openParens--; + break; + case '\\': + // escapes: \n \r \t \b \f \\ \( \) + char c1 = getChar(); + switch (c1) + { + case 'n': + case 'r': sb.append("\n"); break; + case 't': sb.append('\t'); break; + case 'b': sb.append('\b'); break; + case 'f': sb.append('\f'); break; + case '\\': sb.append('\\'); break; + case '(': sb.append('('); break; + case ')': sb.append(')'); break; + } + // octal \ddd + if (Character.isDigit(c1)) + { + String num = String.valueOf(new char[] { c1, getChar(), getChar() }); + Integer code = Integer.parseInt(num, 8); + sb.append((char)(int)code); + } + break; + case '\r': + case '\n': + sb.append("\n"); + break; + default: + sb.append(c); + break; + } + } + return null; + } + + /** + * Reads a binary CharString. + */ + private Token readCharString(int length) + { + buffer.get(); // space + byte[] data = new byte[length]; + buffer.get(data); + return new Token(data, Token.CHARSTRING); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java b/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java new file mode 100644 index 00000000000..b05a0d40567 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/Type1Parser.java @@ -0,0 +1,935 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.type1; + +import org.apache.fontbox.encoding.BuiltInEncoding; +import org.apache.fontbox.encoding.StandardEncoding; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Parses an Adobe Type 1 (.pfb) font. It is used exclusively by Type1Font. + * + * The Type 1 font format is a free-text format which is somewhat difficult + * to parse. This is made worse by the fact that many Type 1 font files do + * not conform to the specification, especially those embedded in PDFs. This + * parser therefore tries to be as forgiving as possible. + * + * @see "Adobe Type 1 Font Format, Adobe Systems (1999)" + * + * @author John Hewson + */ +final class Type1Parser +{ + // constants for encryption + private static final int EEXEC_KEY = 55665; + private static final int CHARSTRING_KEY = 4330; + + // state + private Type1Lexer lexer; + private Type1Font font; + + /** + * Parses a Type 1 font and returns a Type1Font class which represents it. + * + * @param segment1 Segment 1: ASCII + * @param segment2 Segment 2: Binary + * @throws IOException + */ + public Type1Font parse(byte[] segment1, byte[] segment2) throws IOException + { + font = new Type1Font(segment1, segment2); + parseASCII(segment1); + if (segment2.length > 0) + { + parseBinary(segment2); + } + return font; + } + + /** + * Parses the ASCII portion of a Type 1 font. + */ + private void parseASCII(byte[] bytes) throws IOException + { + if (bytes.length == 0) + { + throw new IllegalArgumentException("byte[] is empty"); + } + + // %!FontType1-1.0 + // %!PS-AdobeFont-1.0 + if (bytes.length < 2 || (bytes[0] != '%' && bytes[1] != '!')) + { + throw new IOException("Invalid start of ASCII segment"); + } + + lexer = new Type1Lexer(bytes); + + // (corrupt?) synthetic font + if (lexer.peekToken().getText().equals("FontDirectory")) + { + read(Token.NAME, "FontDirectory"); + read(Token.LITERAL); // font name + read(Token.NAME, "known"); + read(Token.START_PROC); + readProc(); + read(Token.START_PROC); + readProc(); + read(Token.NAME, "ifelse"); + } + + // font dict + int length = read(Token.INTEGER).intValue(); + read(Token.NAME, "dict"); + // found in some TeX fonts + readMaybe(Token.NAME, "dup"); + // if present, the "currentdict" is not required + read(Token.NAME, "begin"); + + for (int i = 0; i < length; i++) + { + // premature end + Token token = lexer.peekToken(); + if (token == null) + { + break; + } + if (token.getKind() == Token.NAME && + ("currentdict".equals(token.getText()) || "end".equals(token.getText()))) + { + break; + } + + // key/value + String key = read(Token.LITERAL).getText(); + switch (key) + { + case "FontInfo": + case "Fontinfo": + readFontInfo(readSimpleDict()); + break; + case "Metrics": + readSimpleDict(); + break; + case "Encoding": + readEncoding(); + break; + default: + readSimpleValue(key); + break; + } + } + + readMaybe(Token.NAME, "currentdict"); + read(Token.NAME, "end"); + + read(Token.NAME, "currentfile"); + read(Token.NAME, "eexec"); + } + + private void readSimpleValue(String key) throws IOException + { + List value = readDictValue(); + + switch (key) + { + case "FontName": + font.fontName = value.get(0).getText(); + break; + case "PaintType": + font.paintType = value.get(0).intValue(); + break; + case "FontType": + font.fontType = value.get(0).intValue(); + break; + case "FontMatrix": + font.fontMatrix = arrayToNumbers(value); + break; + case "FontBBox": + font.fontBBox = arrayToNumbers(value); + break; + case "UniqueID": + font.uniqueID = value.get(0).intValue(); + break; + case "StrokeWidth": + font.strokeWidth = value.get(0).floatValue(); + break; + case "FID": + font.fontID = value.get(0).getText(); + break; + default: + break; + } + } + + private void readEncoding() throws IOException + { + if (lexer.peekToken().getKind() == Token.NAME) + { + String name = lexer.nextToken().getText(); + + if (name.equals("StandardEncoding")) + { + font.encoding = StandardEncoding.INSTANCE; + } + else + { + throw new IOException("Unknown encoding: " + name); + } + readMaybe(Token.NAME, "readonly"); + read(Token.NAME, "def"); + } + else + { + read(Token.INTEGER).intValue(); + readMaybe(Token.NAME, "array"); + + // 0 1 255 {1 index exch /.notdef put } for + // we have to check "readonly" and "def" too + // as some fonts don't provide any dup-values, see PDFBOX-2134 + while (!(lexer.peekToken().getKind() == Token.NAME && + (lexer.peekToken().getText().equals("dup") || + lexer.peekToken().getText().equals("readonly") || + lexer.peekToken().getText().equals("def")))) + { + lexer.nextToken(); + } + + Map codeToName = new HashMap<>(); + while (lexer.peekToken().getKind() == Token.NAME && + lexer.peekToken().getText().equals("dup")) + { + read(Token.NAME, "dup"); + int code = read(Token.INTEGER).intValue(); + String name = read(Token.LITERAL).getText(); + read(Token.NAME, "put"); + codeToName.put(code, name); + } + font.encoding = new BuiltInEncoding(codeToName); + readMaybe(Token.NAME, "readonly"); + read(Token.NAME, "def"); + } + } + + /** + * Extracts values from an array as numbers. + */ + private List arrayToNumbers(List value) throws IOException + { + List numbers = new ArrayList<>(); + for (int i = 1, size = value.size() - 1; i < size; i++) + { + Token token = value.get(i); + if (token.getKind() == Token.REAL) + { + numbers.add(token.floatValue()); + } + else if (token.getKind() == Token.INTEGER) + { + numbers.add(token.intValue()); + } + else + { + throw new IOException("Expected INTEGER or REAL but got " + token.getKind()); + } + } + return numbers; + } + + /** + * Extracts values from the /FontInfo dictionary. + */ + private void readFontInfo(Map> fontInfo) + { + for (Map.Entry> entry : fontInfo.entrySet()) + { + String key = entry.getKey(); + List value = entry.getValue(); + + switch (key) + { + case "version": + font.version = value.get(0).getText(); + break; + case "Notice": + font.notice = value.get(0).getText(); + break; + case "FullName": + font.fullName = value.get(0).getText(); + break; + case "FamilyName": + font.familyName = value.get(0).getText(); + break; + case "Weight": + font.weight = value.get(0).getText(); + break; + case "ItalicAngle": + font.italicAngle = value.get(0).floatValue(); + break; + case "isFixedPitch": + font.isFixedPitch = value.get(0).booleanValue(); + break; + case "UnderlinePosition": + font.underlinePosition = value.get(0).floatValue(); + break; + case "UnderlineThickness": + font.underlineThickness = value.get(0).floatValue(); + break; + default: + break; + } + } + } + + /** + * Reads a dictionary whose values are simple, i.e., do not contain + * nested dictionaries. + */ + private Map> readSimpleDict() throws IOException + { + Map> dict = new HashMap<>(); + + int length = read(Token.INTEGER).intValue(); + read(Token.NAME, "dict"); + readMaybe(Token.NAME, "dup"); + read(Token.NAME, "begin"); + + for (int i = 0; i < length; i++) + { + if (lexer.peekToken() == null) + { + break; + } + if (lexer.peekToken().getKind() == Token.NAME && + !lexer.peekToken().getText().equals("end")) + { + read(Token.NAME); + } + // premature end + if (lexer.peekToken() == null) + { + break; + } + if (lexer.peekToken().getKind() == Token.NAME && + lexer.peekToken().getText().equals("end")) + { + break; + } + + // simple value + String key = read(Token.LITERAL).getText(); + List value = readDictValue(); + dict.put(key, value); + } + + read(Token.NAME, "end"); + readMaybe(Token.NAME, "readonly"); + read(Token.NAME, "def"); + + return dict; + } + + /** + * Reads a simple value from a dictionary. + */ + private List readDictValue() throws IOException + { + List value = readValue(); + readDef(); + return value; + } + + /** + * Reads a simple value. This is either a number, a string, + * a name, a literal name, an array, a procedure, or a charstring. + * This method does not support reading nested dictionaries unless they're empty. + */ + private List readValue() throws IOException + { + List value = new ArrayList<>(); + Token token = lexer.nextToken(); + if (lexer.peekToken() == null) + { + return value; + } + value.add(token); + + if (token.getKind() == Token.START_ARRAY) + { + int openArray = 1; + while (true) + { + if (lexer.peekToken() == null) + { + return value; + } + if (lexer.peekToken().getKind() == Token.START_ARRAY) + { + openArray++; + } + + token = lexer.nextToken(); + value.add(token); + + if (token.getKind() == Token.END_ARRAY) + { + openArray--; + if (openArray == 0) + { + break; + } + } + } + } + else if (token.getKind() == Token.START_PROC) + { + value.addAll(readProc()); + } + else if (token.getKind() == Token.START_DICT) + { + // skip "/GlyphNames2HostCode << >> def" + read(Token.END_DICT); + return value; + } + + readPostScriptWrapper(value); + return value; + } + + private void readPostScriptWrapper(List value) throws IOException + { + // postscript wrapper (not in the Type 1 spec) + if (lexer.peekToken().getText().equals("systemdict")) + { + read(Token.NAME, "systemdict"); + read(Token.LITERAL, "internaldict"); + read(Token.NAME, "known"); + + read(Token.START_PROC); + readProc(); + + read(Token.START_PROC); + readProc(); + + read(Token.NAME, "ifelse"); + + // replace value + read(Token.START_PROC); + read(Token.NAME, "pop"); + value.clear(); + value.addAll(readValue()); + read(Token.END_PROC); + + read(Token.NAME, "if"); + } + } + + /** + * Reads a procedure. + */ + private List readProc() throws IOException + { + List value = new ArrayList<>(); + + int openProc = 1; + while (true) + { + if (lexer.peekToken().getKind() == Token.START_PROC) + { + openProc++; + } + + Token token = lexer.nextToken(); + value.add(token); + + if (token.getKind() == Token.END_PROC) + { + openProc--; + if (openProc == 0) + { + break; + } + } + } + Token executeonly = readMaybe(Token.NAME, "executeonly"); + if (executeonly != null) + { + value.add(executeonly); + } + + return value; + } + + /** + * Parses the binary portion of a Type 1 font. + */ + private void parseBinary(byte[] bytes) throws IOException + { + byte[] decrypted; + // Sometimes, fonts use the hex format, so this needs to be converted before decryption + if (isBinary(bytes)) + { + decrypted = decrypt(bytes, EEXEC_KEY, 4); + } + else + { + decrypted = decrypt(hexToBinary(bytes), EEXEC_KEY, 4); + } + lexer = new Type1Lexer(decrypted); + + // find /Private dict + Token peekToken = lexer.peekToken(); + while (peekToken != null && !peekToken.getText().equals("Private")) + { + // for a more thorough validation, the presence of "begin" before Private + // determines how code before and following charstrings should look + // it is not currently checked anyway + lexer.nextToken(); + peekToken = lexer.peekToken(); + } + if (peekToken == null) + { + throw new IOException("/Private token not found"); + } + + // Private dict + read(Token.LITERAL, "Private"); + int length = read(Token.INTEGER).intValue(); + read(Token.NAME, "dict"); + // actually could also be "/Private 10 dict def Private begin" + // instead of the "dup" + readMaybe(Token.NAME, "dup"); + read(Token.NAME, "begin"); + + int lenIV = 4; // number of random bytes at start of charstring + + for (int i = 0; i < length; i++) + { + // premature end + if (lexer.peekToken() == null || lexer.peekToken().getKind() != Token.LITERAL) + { + break; + } + + // key/value + String key = read(Token.LITERAL).getText(); + + switch (key) + { + case "Subrs": + readSubrs(lenIV); + break; + case "OtherSubrs": + readOtherSubrs(); + break; + case "lenIV": + lenIV = readDictValue().get(0).intValue(); + break; + case "ND": + read(Token.START_PROC); + // the access restrictions are not mandatory + readMaybe(Token.NAME, "noaccess"); + read(Token.NAME, "def"); + read(Token.END_PROC); + readMaybe(Token.NAME, "executeonly"); + read(Token.NAME, "def"); + break; + case "NP": + read(Token.START_PROC); + readMaybe(Token.NAME, "noaccess"); + read(Token.NAME); + read(Token.END_PROC); + readMaybe(Token.NAME, "executeonly"); + read(Token.NAME, "def"); + break; + case "RD": + // /RD {string currentfile exch readstring pop} bind executeonly def + read(Token.START_PROC); + readProc(); + readMaybe(Token.NAME, "bind"); + readMaybe(Token.NAME, "executeonly"); + read(Token.NAME, "def"); + break; + default: + readPrivate(key, readDictValue()); + break; + } + } + + // some fonts have "2 index" here, others have "end noaccess put" + // sometimes followed by "put". Either way, we just skip until + // the /CharStrings dict is found + while (!(lexer.peekToken().getKind() == Token.LITERAL && + lexer.peekToken().getText().equals("CharStrings"))) + { + lexer.nextToken(); + } + + // CharStrings dict + read(Token.LITERAL, "CharStrings"); + readCharStrings(lenIV); + } + + /** + * Extracts values from the /Private dictionary. + */ + private void readPrivate(String key, List value) throws IOException + { + switch (key) + { + case "BlueValues": + font.blueValues = arrayToNumbers(value); + break; + case "OtherBlues": + font.otherBlues = arrayToNumbers(value); + break; + case "FamilyBlues": + font.familyBlues = arrayToNumbers(value); + break; + case "FamilyOtherBlues": + font.familyOtherBlues = arrayToNumbers(value); + break; + case "BlueScale": + font.blueScale = value.get(0).floatValue(); + break; + case "BlueShift": + font.blueShift = value.get(0).intValue(); + break; + case "BlueFuzz": + font.blueFuzz = value.get(0).intValue(); + break; + case "StdHW": + font.stdHW = arrayToNumbers(value); + break; + case "StdVW": + font.stdVW = arrayToNumbers(value); + break; + case "StemSnapH": + font.stemSnapH = arrayToNumbers(value); + break; + case "StemSnapV": + font.stemSnapV = arrayToNumbers(value); + break; + case "ForceBold": + font.forceBold = value.get(0).booleanValue(); + break; + case "LanguageGroup": + font.languageGroup = value.get(0).intValue(); + break; + default: + break; + } + } + + /** + * Reads the /Subrs array. + * @param lenIV The number of random bytes used in charstring encryption. + */ + private void readSubrs(int lenIV) throws IOException + { + // allocate size (array indexes may not be in-order) + int length = read(Token.INTEGER).intValue(); + for (int i = 0; i < length; i++) + { + font.subrs.add(null); + } + read(Token.NAME, "array"); + + for (int i = 0; i < length; i++) + { + // premature end + if (lexer.peekToken() == null) + { + break; + } + if (!(lexer.peekToken().getKind() == Token.NAME && + lexer.peekToken().getText().equals("dup"))) + { + break; + } + + read(Token.NAME, "dup"); + Token index = read(Token.INTEGER); + read(Token.INTEGER); + + // RD + Token charstring = read(Token.CHARSTRING); + font.subrs.set(index.intValue(), decrypt(charstring.getData(), CHARSTRING_KEY, lenIV)); + readPut(); + } + readDef(); + } + + // OtherSubrs are embedded PostScript procedures which we can safely ignore + private void readOtherSubrs() throws IOException + { + if (lexer.peekToken().getKind() == Token.START_ARRAY) + { + readValue(); + readDef(); + } + else + { + int length = read(Token.INTEGER).intValue(); + read(Token.NAME, "array"); + + for (int i = 0; i < length; i++) + { + read(Token.NAME, "dup"); + read(Token.INTEGER); // index + readValue(); // PostScript + readPut(); + } + readDef(); + } + } + + /** + * Reads the /CharStrings dictionary. + * @param lenIV The number of random bytes used in charstring encryption. + */ + private void readCharStrings(int lenIV) throws IOException + { + int length = read(Token.INTEGER).intValue(); + read(Token.NAME, "dict"); + // could actually be a sequence ending in "CharStrings begin", too + // instead of the "dup begin" + read(Token.NAME, "dup"); + read(Token.NAME, "begin"); + + for (int i = 0; i < length; i++) + { + // premature end + if (lexer.peekToken() == null) + { + break; + } + if (lexer.peekToken().getKind() == Token.NAME && + lexer.peekToken().getText().equals("end")) + { + break; + } + // key/value + String name = read(Token.LITERAL).getText(); + + // RD + read(Token.INTEGER); + Token charstring = read(Token.CHARSTRING); + font.charstrings.put(name, decrypt(charstring.getData(), CHARSTRING_KEY, lenIV)); + readDef(); + } + + // some fonts have one "end", others two + read(Token.NAME, "end"); + // since checking ends here, this does not matter .... + // more thorough checking would see whether there is "begin" before /Private + // and expect a "def" somewhere, otherwise a "put" + } + + /** + * Reads the sequence "noaccess def" or equivalent. + */ + private void readDef() throws IOException + { + readMaybe(Token.NAME, "readonly"); + readMaybe(Token.NAME, "noaccess"); // allows "noaccess ND" (not in the Type 1 spec) + + Token token = read(Token.NAME); + switch (token.getText()) + { + case "ND": + case "|-": + return; + case "noaccess": + token = read(Token.NAME); + break; + default: + break; + } + + if (token.getText().equals("def")) + { + return; + } + throw new IOException("Found " + token + " but expected ND"); + } + + /** + * Reads the sequence "noaccess put" or equivalent. + */ + private void readPut() throws IOException + { + readMaybe(Token.NAME, "readonly"); + + Token token = read(Token.NAME); + switch (token.getText()) + { + case "NP": + case "|": + return; + case "noaccess": + token = read(Token.NAME); + break; + default: + break; + } + + if (token.getText().equals("put")) + { + return; + } + throw new IOException("Found " + token + " but expected NP"); + } + + /** + * Reads the next token and throws an error if it is not of the given kind. + */ + private Token read(Token.Kind kind) throws IOException + { + Token token = lexer.nextToken(); + if (token == null || token.getKind() != kind) + { + throw new IOException("Found " + token + " but expected " + kind); + } + return token; + } + + /** + * Reads the next token and throws an error if it is not of the given kind + * and does not have the given value. + */ + private void read(Token.Kind kind, String name) throws IOException + { + Token token = read(kind); + if (!token.getText().equals(name)) + { + throw new IOException("Found " + token + " but expected " + name); + } + } + + /** + * Reads the next token if and only if it is of the given kind and + * has the given value. + */ + private Token readMaybe(Token.Kind kind, String name) throws IOException + { + Token token = lexer.peekToken(); + if (token != null && token.getKind() == kind && token.getText().equals(name)) + { + return lexer.nextToken(); + } + return null; + } + + /** + * Type 1 Decryption (eexec, charstring). + * + * @param cipherBytes cipher text + * @param r key + * @param n number of random bytes (lenIV) + * @return plain text + */ + private byte[] decrypt(byte[] cipherBytes, int r, int n) + { + // lenIV of -1 means no encryption (not documented) + if (n == -1) + { + return cipherBytes; + } + // empty charstrings and charstrings of insufficient length + if (cipherBytes.length == 0 || n > cipherBytes.length) + { + return new byte[] {}; + } + // decrypt + int c1 = 52845; + int c2 = 22719; + byte[] plainBytes = new byte[cipherBytes.length - n]; + for (int i = 0; i < cipherBytes.length; i++) + { + int cipher = cipherBytes[i] & 0xFF; + int plain = cipher ^ r >> 8; + if (i >= n) + { + plainBytes[i - n] = (byte) plain; + } + r = (cipher + r) * c1 + c2 & 0xffff; + } + return plainBytes; + } + + // Check whether binary or hex encoded. See Adobe Type 1 Font Format specification + // 7.2 eexec encryption + private boolean isBinary(byte[] bytes) + { + if (bytes.length < 4) + { + return true; + } + // "At least one of the first 4 ciphertext bytes must not be one of + // the ASCII hexadecimal character codes (a code for 0-9, A-F, or a-f)." + for (int i = 0; i < 4; ++i) + { + byte by = bytes[i]; + if (by != 0x0a && by != 0x0d && by != 0x20 && by != '\t' && + Character.digit((char) by, 16) == -1) + { + return true; + } + } + return false; + } + + private byte[] hexToBinary(byte[] bytes) + { + // calculate needed length + int len = 0; + for (byte by : bytes) + { + if (Character.digit((char) by, 16) != -1) + { + ++len; + } + } + byte[] res = new byte[len / 2]; + int r = 0; + int prev = -1; + for (byte by : bytes) + { + int digit = Character.digit((char) by, 16); + if (digit != -1) + { + if (prev == -1) + { + prev = digit; + } + else + { + res[r++] = (byte) (prev * 16 + digit); + prev = -1; + } + } + } + return res; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/type1/package.html b/fontbox/src/main/java/org/apache/fontbox/type1/package.html new file mode 100644 index 00000000000..9eadeba996b --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/type1/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package holds classes used to parse Type1-Fonts. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/util/BoundingBox.java b/fontbox/src/main/java/org/apache/fontbox/util/BoundingBox.java new file mode 100644 index 00000000000..d8647b9074d --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/BoundingBox.java @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.util; + + +import java.util.List; + +/** + * This is an implementation of a bounding box. This was originally written for the + * AMF parser. + * + * @author Ben Litchfield + */ +public class BoundingBox +{ + private float lowerLeftX; + private float lowerLeftY; + private float upperRightX; + private float upperRightY; + + /** + * Default constructor. + */ + public BoundingBox() + { + } + + /** + * Constructor. + * + * @param minX lower left x value + * @param minY lower left y value + * @param maxX upper right x value + * @param maxY upper right y value + */ + public BoundingBox(float minX, float minY, float maxX, float maxY) + { + lowerLeftX = minX; + lowerLeftY = minY; + upperRightX = maxX; + upperRightY = maxY; + } + + /** + * Constructor. + * + * @param numbers list of four numbers + */ + public BoundingBox(List numbers) + { + lowerLeftX = numbers.get(0).floatValue(); + lowerLeftY = numbers.get(1).floatValue(); + upperRightX = numbers.get(2).floatValue(); + upperRightY = numbers.get(3).floatValue(); + } + + /** + * Getter for property lowerLeftX. + * + * @return Value of property lowerLeftX. + */ + public float getLowerLeftX() + { + return lowerLeftX; + } + + /** + * Setter for property lowerLeftX. + * + * @param lowerLeftXValue New value of property lowerLeftX. + */ + public void setLowerLeftX(float lowerLeftXValue) + { + this.lowerLeftX = lowerLeftXValue; + } + + /** + * Getter for property lowerLeftY. + * + * @return Value of property lowerLeftY. + */ + public float getLowerLeftY() + { + return lowerLeftY; + } + + /** + * Setter for property lowerLeftY. + * + * @param lowerLeftYValue New value of property lowerLeftY. + */ + public void setLowerLeftY(float lowerLeftYValue) + { + this.lowerLeftY = lowerLeftYValue; + } + + /** + * Getter for property upperRightX. + * + * @return Value of property upperRightX. + */ + public float getUpperRightX() + { + return upperRightX; + } + + /** + * Setter for property upperRightX. + * + * @param upperRightXValue New value of property upperRightX. + */ + public void setUpperRightX(float upperRightXValue) + { + this.upperRightX = upperRightXValue; + } + + /** + * Getter for property upperRightY. + * + * @return Value of property upperRightY. + */ + public float getUpperRightY() + { + return upperRightY; + } + + /** + * Setter for property upperRightY. + * + * @param upperRightYValue New value of property upperRightY. + */ + public void setUpperRightY(float upperRightYValue) + { + this.upperRightY = upperRightYValue; + } + + /** + * This will get the width of this rectangle as calculated by + * upperRightX - lowerLeftX. + * + * @return The width of this rectangle. + */ + public float getWidth() + { + return getUpperRightX() - getLowerLeftX(); + } + + /** + * This will get the height of this rectangle as calculated by + * upperRightY - lowerLeftY. + * + * @return The height of this rectangle. + */ + public float getHeight() + { + return getUpperRightY() - getLowerLeftY(); + } + + /** + * Checks if a point is inside this rectangle. + * + * @param x The x coordinate. + * @param y The y coordinate. + * + * @return true If the point is on the edge or inside the rectangle bounds. + */ + public boolean contains( float x, float y ) + { + return x >= lowerLeftX && x <= upperRightX && + y >= lowerLeftY && y <= upperRightY; + } + + /** + * This will return a string representation of this rectangle. + * + * @return This object as a string. + */ + @Override + public String toString() + { + return "[" + getLowerLeftX() + "," + getLowerLeftY() + "," + + getUpperRightX() + "," + getUpperRightY() +"]"; + } + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/util/Charsets.java b/fontbox/src/main/java/org/apache/fontbox/util/Charsets.java new file mode 100644 index 00000000000..e0688fab4f1 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/Charsets.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.util; + +import java.nio.charset.Charset; + +/** + * This class provides an instance of all common charsets used to transform byte arrays into strings. + * + */ +public final class Charsets +{ + private Charsets() {} + + /** + * ISO-8859-1 Charset + */ + public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); + /** + * UTF-16 Charset + */ + public static final Charset UTF_16 = Charset.forName("UTF-16"); + /** + * UTF-16BE Charset + */ + public static final Charset UTF_16BE = Charset.forName("UTF-16BE"); + /** + * US-ASCII Charset + */ + public static final Charset US_ASCII = Charset.forName("US-ASCII"); + /** + * ISO-10646 Charset + */ + public static final Charset ISO_10646 = Charset.forName("ISO-10646-UCS-2"); + +} \ No newline at end of file diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontDirFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontDirFinder.java new file mode 100644 index 00000000000..673020b67d4 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontDirFinder.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +import java.io.File; +import java.util.List; + +/** + * Implementers provide find method for searching native operating system for available fonts. + * This class is based on a class provided by Apache FOP. + * + * See org.apache.fop.fonts.autodetect.FontDirFinder + */ +public interface FontDirFinder +{ + /** + * Finds a list of font files. + * + * @return list of font files. + */ + List find(); +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontFileFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontFileFinder.java new file mode 100644 index 00000000000..b33879d0c1a --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/FontFileFinder.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +import java.io.File; +import java.net.URI; +import java.util.List; +import java.util.Locale; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Helps to autodetect/locate available operating system fonts. This class is based on a class provided by Apache FOP. + * see org.apache.fop.fonts.autodetect.FontFileFinder + */ +public class FontFileFinder +{ + private static final Log LOG = LogFactory.getLog(FontFileFinder.class); + + private FontDirFinder fontDirFinder = null; + + /** + * Default constructor. + */ + public FontFileFinder() + { + } + + private FontDirFinder determineDirFinder() + { + final String osName = System.getProperty("os.name"); + if (osName.startsWith("Windows")) + { + return new WindowsFontDirFinder(); + } + else if (osName.startsWith("Mac")) + { + return new MacFontDirFinder(); + } + else if (osName.startsWith("OS/400")) + { + return new OS400FontDirFinder(); + } + else + { + return new UnixFontDirFinder(); + } + } + + /** + * Automagically finds a list of font files on local system. + * + * @return List<URI> of font files + */ + public List find() + { + if (fontDirFinder == null) + { + fontDirFinder = determineDirFinder(); + } + List fontDirs = fontDirFinder.find(); + List results = new java.util.ArrayList<>(); + for (File dir : fontDirs) + { + walk(dir, results); + } + return results; + } + + /** + * Searches a given directory for font files. + * + * @param dir directory to search + * @return list<URI> of font files + */ + public List find(String dir) + { + List results = new java.util.ArrayList<>(); + File directory = new File(dir); + if (directory.isDirectory()) + { + walk(directory, results); + } + return results; + } + + /** + * walk down the directory tree and search for font files. + * + * @param directory the directory to start at + * @param results names of all found font files + */ + private void walk(File directory, List results) + { + // search for font files recursively in the given directory + if (directory.isDirectory()) + { + File[] filelist = directory.listFiles(); + if (filelist != null) + { + for (File file : filelist) + { + if (file.isDirectory()) + { + // skip hidden directories + if (file.getName().startsWith(".")) + { + continue; + } + walk(file, results); + } + else + { + if (LOG.isDebugEnabled()) + { + LOG.debug("checkFontfile check " + file); + } + if (checkFontfile(file)) + { + if (LOG.isDebugEnabled()) + { + LOG.debug("checkFontfile found " + file); + } + results.add(file.toURI()); + } + } + } + } + } + } + + /** + * Check if the given name belongs to a font file. + * + * @param file the given file + * @return true if the given filename has a typical font file ending + */ + private boolean checkFontfile(File file) + { + String name = file.getName().toLowerCase(Locale.US); + return (name.endsWith(".ttf") || name.endsWith(".otf") || name.endsWith(".pfb") || name.endsWith(".ttc")) + // PDFBOX-3377 exclude weird files in AIX + && !name.startsWith("fonts."); + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/MacFontDirFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/MacFontDirFinder.java new file mode 100644 index 00000000000..7ec28327f78 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/MacFontDirFinder.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +/** + * Mac font directory finder. This class is based on a class provided by Apache FOP. see + * org.apache.fop.fonts.autodetect.MacFontDirFinder + */ +public class MacFontDirFinder extends NativeFontDirFinder +{ + + /** + * Some guesses at possible unix font directory locations. + * + * @return a array of possible font directory locations + */ + @Override + protected String[] getSearchableDirectories() + { + return new String[] { System.getProperty("user.home") + "/Library/Fonts/", // user + "/Library/Fonts/", // local + "/System/Library/Fonts/", // system + "/Network/Library/Fonts/" // network + }; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/NativeFontDirFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/NativeFontDirFinder.java new file mode 100644 index 00000000000..f2b0bfe6a72 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/NativeFontDirFinder.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +import java.io.File; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Native font finder base class. This class is based on a class provided by Apache FOP. see + * org.apache.fop.fonts.autodetect.NativeFontDirFinder + */ +public abstract class NativeFontDirFinder implements FontDirFinder +{ + + private static final Log LOG = LogFactory.getLog(NativeFontDirFinder.class); + + /** + * Generic method used by Mac and Unix font finders. + * + * @return list of natively existing font directories {@inheritDoc} + */ + @Override + public List find() + { + List fontDirList = new java.util.ArrayList<>(); + String[] searchableDirectories = getSearchableDirectories(); + if (searchableDirectories != null) + { + for (String searchableDirectorie : searchableDirectories) + { + File fontDir = new File(searchableDirectorie); + try + { + if (fontDir.exists() && fontDir.canRead()) + { + fontDirList.add(fontDir); + } + } + catch (SecurityException e) + { + LOG.debug("Couldn't get native font directories - ignoring", e); + // should continue if this fails + } + } + } + return fontDirList; + } + + /** + * Returns an array of directories to search for fonts in. + * + * @return an array of directories + */ + protected abstract String[] getSearchableDirectories(); + +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/OS400FontDirFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/OS400FontDirFinder.java new file mode 100644 index 00000000000..32744ac4439 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/OS400FontDirFinder.java @@ -0,0 +1,31 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +/** + * Font finder for OS/400 systems. + */ +public class OS400FontDirFinder extends NativeFontDirFinder +{ + @Override + protected String[] getSearchableDirectories() + { + return new String[] { System.getProperty("user.home") + "/.fonts", // user + "/QIBM/ProdData/OS400/Fonts" + }; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/UnixFontDirFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/UnixFontDirFinder.java new file mode 100644 index 00000000000..e2f5356cf0b --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/UnixFontDirFinder.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +/** + * Unix font directory finder. This class is based on a class provided by Apache FOP. see + * org.apache.fop.fonts.autodetect.UnixFontDirFinder + */ +public class UnixFontDirFinder extends NativeFontDirFinder +{ + + /** + * Some guesses at possible unix font directory locations. + * + * @return a list of possible font locations + */ + @Override + protected String[] getSearchableDirectories() + { + return new String[] { System.getProperty("user.home") + "/.fonts", // user + "/usr/local/fonts", // local + "/usr/local/share/fonts", // local shared + "/usr/share/fonts", // system + "/usr/X11R6/lib/X11/fonts" // X + }; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/WindowsFontDirFinder.java b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/WindowsFontDirFinder.java new file mode 100644 index 00000000000..e3a3c6a7efa --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/WindowsFontDirFinder.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.util.autodetect; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.fontbox.util.Charsets; + +/** + * FontFinder for native Windows platforms. This class is based on a class provided by Apache FOP. see + * org.apache.fop.fonts.autodetect.WindowsFontDirFinder + */ +public class WindowsFontDirFinder implements FontDirFinder +{ + + private static final Log LOG = LogFactory.getLog(WindowsFontDirFinder.class); + + /** + * Attempts to read windir environment variable on windows (disclaimer: This is a bit dirty but seems to work + * nicely). + */ + private String getWinDir(String osName) throws IOException + { + Process process; + Runtime runtime = Runtime.getRuntime(); + if (osName.startsWith("Windows 9")) + { + process = runtime.exec("command.com /c echo %windir%"); + } + else + { + process = runtime.exec("cmd.exe /c echo %windir%"); + } + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( + process.getInputStream(), Charsets.ISO_8859_1))) + { + return bufferedReader.readLine(); + } + } + + /** + * {@inheritDoc} + * + * @return a list of detected font files + */ + @Override + public List find() + { + List fontDirList = new java.util.ArrayList<>(); + String windir = null; + try + { + windir = System.getProperty("env.windir"); + } + catch (SecurityException e) + { + LOG.debug("Couldn't get Windows font directories - ignoring", e); + // should continue if this fails + } + String osName = System.getProperty("os.name"); + if (windir == null) + { + try + { + windir = getWinDir(osName); + } + catch (IOException | SecurityException e) + { + LOG.debug("Couldn't get Windows font directories - ignoring", e); + // should continue if this fails + } + } + File osFontsDir; + File psFontsDir; + if (windir != null) + { + // remove any trailing '/' + if (windir.endsWith("/")) + { + windir = windir.substring(0, windir.length() - 1); + } + osFontsDir = new File(windir + File.separator + "FONTS"); + if (osFontsDir.exists() && osFontsDir.canRead()) + { + fontDirList.add(osFontsDir); + } + psFontsDir = new File(windir.substring(0, 2) + File.separator + "PSFONTS"); + if (psFontsDir.exists() && psFontsDir.canRead()) + { + fontDirList.add(psFontsDir); + } + } + else + { + String windowsDirName = osName.endsWith("NT") ? "WINNT" : "WINDOWS"; + // look for true type font folder + for (char driveLetter = 'C'; driveLetter <= 'E'; driveLetter++) + { + osFontsDir = new File(driveLetter + ":" + File.separator + windowsDirName + + File.separator + "FONTS"); + try + { + if (osFontsDir.exists() && osFontsDir.canRead()) + { + fontDirList.add(osFontsDir); + break; + } + } + catch (SecurityException e) + { + LOG.debug("Couldn't get Windows font directories - ignoring", e); + // should continue if this fails + } + } + // look for type 1 font folder + for (char driveLetter = 'C'; driveLetter <= 'E'; driveLetter++) + { + psFontsDir = new File(driveLetter + ":" + File.separator + "PSFONTS"); + try + { + if (psFontsDir.exists() && psFontsDir.canRead()) + { + fontDirList.add(psFontsDir); + break; + } + } + catch (SecurityException e) + { + LOG.debug("Couldn't get Windows font directories - ignoring", e); + // should continue if this fails + } + } + } + return fontDirList; + } +} diff --git a/fontbox/src/main/java/org/apache/fontbox/util/autodetect/package.html b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/package.html new file mode 100644 index 00000000000..1727ba5e806 --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/autodetect/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains utility classes to manage local fonts. + + diff --git a/fontbox/src/main/java/org/apache/fontbox/util/package.html b/fontbox/src/main/java/org/apache/fontbox/util/package.html new file mode 100644 index 00000000000..a4cf2cede6f --- /dev/null +++ b/fontbox/src/main/java/org/apache/fontbox/util/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains utility classes used by various font types. + + diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/83pv-RKSJ-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/83pv-RKSJ-H new file mode 100644 index 00000000000..a8db4259181 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/83pv-RKSJ-H @@ -0,0 +1,314 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (83pv-RKSJ-H) +%%Title: (83pv-RKSJ-H Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /83pv-RKSJ-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 0 def +/XUID [1 10 25324] def + +/WMode 0 def + +5 begincodespacerange + <00> <80> + <8140> <9FFC> + + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<80> <80> 97 +<8140> <817e> 633 +<8180> <81ac> 696 +<81b8> <81bf> 741 +<81c8> <81ce> 749 +<81da> <81e8> 756 +<81f0> <81f7> 771 +<81fc> <81fc> 779 +<824f> <8258> 780 +<8260> <8279> 790 +<8281> <829a> 816 +<829f> <82f1> 842 +<8340> <837e> 925 +<8380> <8396> 988 +<839f> <83b6> 1011 +<83bf> <83d6> 1035 +<8440> <8460> 1059 +<8470> <847e> 1092 +<8480> <8491> 1107 +<849f> <849f> 7479 +<84a0> <84a0> 7481 +<84a1> <84a1> 7491 +<84a2> <84a2> 7495 +<84a3> <84a3> 7503 +<84a4> <84a4> 7499 +<84a5> <84a5> 7507 +<84a6> <84a6> 7523 +<84a7> <84a7> 7515 +<84a8> <84a8> 7531 +<84a9> <84a9> 7539 +<84aa> <84aa> 7480 +<84ab> <84ab> 7482 +<84ac> <84ac> 7494 +<84ad> <84ad> 7498 +<84ae> <84ae> 7506 +<84af> <84af> 7502 +<84b0> <84b0> 7514 +<84b1> <84b1> 7530 +<84b2> <84b2> 7522 +<84b3> <84b3> 7538 +<84b4> <84b4> 7554 +<84b5> <84b5> 7511 +<84b6> <84b6> 7526 +<84b7> <84b7> 7519 +<84b8> <84b8> 7534 +<84b9> <84b9> 7542 +<84ba> <84ba> 7508 +<84bb> <84bb> 7527 +<84bc> <84bc> 7516 +<84bd> <84bd> 7535 +<84be> <84be> 7545 +<8540> <857e> 232 +<8580> <8580> 390 +<8581> <859e> 296 +<859f> <85dd> 327 +<85de> <85fc> 391 +<8640> <867e> 422 +<8680> <8691> 485 +<8692> <8692> 295 +<8693> <869e> 503 +<86a2> <86ed> 7479 +<8740> <875d> 7555 +<875f> <8775> 7585 +<8780> <878f> 7608 +<8790> <8790> 762 +<8791> <8791> 761 +<8792> <8792> 769 +<8793> <8799> 7624 +<879a> <879a> 768 +<879b> <879c> 7631 +<889f> <88fc> 1125 +<8940> <897e> 1219 +<8980> <89fc> 1282 +<8a40> <8a7e> 1407 +<8a80> <8afc> 1470 +<8b40> <8b7e> 1595 +<8b80> <8bfc> 1658 +<8c40> <8c7e> 1783 +<8c80> <8cfc> 1846 +<8d40> <8d7e> 1971 +<8d80> <8dfc> 2034 +<8e40> <8e7e> 2159 +<8e80> <8efc> 2222 +<8f40> <8f7e> 2347 +<8f80> <8ffc> 2410 +<9040> <907e> 2535 +<9080> <90fc> 2598 +<9140> <917e> 2723 +<9180> <91fc> 2786 +<9240> <927e> 2911 +<9280> <92fc> 2974 +<9340> <937e> 3099 +<9380> <93fc> 3162 +<9440> <947e> 3287 +<9480> <94fc> 3350 +<9540> <957e> 3475 +<9580> <95fc> 3538 +<9640> <967e> 3663 +<9680> <96fc> 3726 +endcidrange + +100 begincidrange +<9740> <977e> 3851 +<9780> <97fc> 3914 +<9840> <9872> 4039 +<989f> <98fc> 4090 +<9940> <997e> 4184 +<9980> <99fc> 4247 +<9a40> <9a7e> 4372 +<9a80> <9afc> 4435 +<9b40> <9b7e> 4560 +<9b80> <9bfc> 4623 +<9c40> <9c7e> 4748 +<9c80> <9cfc> 4811 +<9d40> <9d7e> 4936 +<9d80> <9dfc> 4999 +<9e40> <9e7e> 5124 +<9e80> <9efc> 5187 +<9f40> <9f7e> 5312 +<9f80> <9ffc> 5375 + 326 + 5500 + 5563 + 5688 + 5751 + 5876 + 5939 + 6064 + 6127 + 6252 + 6315 + 6440 + 6503 + 6628 + 6691 + 6816 + 6879 + 7004 + 7067 + 7192 + 7255 + 7380 + 7443 + 8284 + 633 + 7887 + 636 + 7889 + 651 + 7891 + 663 + 7894 + 670 + 7899 + 692 + 696 + 7917 + 698 + 741 + 749 + 756 + 771 + 779 + 780 + 790 + 816 + 7918 + 843 + 7919 + 845 + 7920 + 847 + 7921 + 849 + 7922 + 851 + 7923 + 877 + 7924 + 909 + 7925 + 911 + 7926 + 913 + 7927 + 920 + 7928 + 926 + 7929 + 928 + 7930 + 930 + 7931 + 932 + 7932 + 934 + 7933 + 960 + 988 + 7934 + 992 + 7935 +endcidrange + +22 begincidrange + 994 + 7936 + 996 + 7937 + 1003 + 7938 + 1011 + 1035 + 7555 + 7940 + 7601 + 7956 + 7610 + 762 + 761 + 769 + 7624 + 768 + 7631 + 152 + 228 + 124 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/90ms-RKSJ-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/90ms-RKSJ-H new file mode 100644 index 00000000000..06006607e49 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/90ms-RKSJ-H @@ -0,0 +1,259 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (90ms-RKSJ-H) +%%Title: (90ms-RKSJ-H Adobe Japan1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /90ms-RKSJ-H def +/CMapVersion 11.003 def +/CMapType 1 def + +/UIDOffset 950 def +/XUID [1 10 25343] def + +/WMode 0 def + +4 begincodespacerange + <00> <80> + <8140> <9FFC> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 231 +endnotdefrange + +100 begincidrange +<20> <7d> 231 +<7e> <7e> 631 +<8140> <817e> 633 +<8180> <81ac> 696 +<81b8> <81bf> 741 +<81c8> <81ce> 749 +<81da> <81e8> 756 +<81f0> <81f7> 771 +<81fc> <81fc> 779 +<824f> <8258> 780 +<8260> <8279> 790 +<8281> <829a> 816 +<829f> <82f1> 842 +<8340> <837e> 925 +<8380> <8396> 988 +<839f> <83b6> 1011 +<83bf> <83d6> 1035 +<8440> <8460> 1059 +<8470> <847e> 1092 +<8480> <8491> 1107 +<849f> <849f> 7479 +<84a0> <84a0> 7481 +<84a1> <84a1> 7491 +<84a2> <84a2> 7495 +<84a3> <84a3> 7503 +<84a4> <84a4> 7499 +<84a5> <84a5> 7507 +<84a6> <84a6> 7523 +<84a7> <84a7> 7515 +<84a8> <84a8> 7531 +<84a9> <84a9> 7539 +<84aa> <84aa> 7480 +<84ab> <84ab> 7482 +<84ac> <84ac> 7494 +<84ad> <84ad> 7498 +<84ae> <84ae> 7506 +<84af> <84af> 7502 +<84b0> <84b0> 7514 +<84b1> <84b1> 7530 +<84b2> <84b2> 7522 +<84b3> <84b3> 7538 +<84b4> <84b4> 7554 +<84b5> <84b5> 7511 +<84b6> <84b6> 7526 +<84b7> <84b7> 7519 +<84b8> <84b8> 7534 +<84b9> <84b9> 7542 +<84ba> <84ba> 7508 +<84bb> <84bb> 7527 +<84bc> <84bc> 7516 +<84bd> <84bd> 7535 +<84be> <84be> 7545 +<8740> <875d> 7555 +<875f> <8760> 7585 +<8761> <8761> 8038 +<8762> <8762> 7588 +<8763> <8763> 8040 +<8764> <8764> 7590 +<8765> <8765> 8042 +<8766> <8767> 7592 +<8768> <8768> 8044 +<8769> <876a> 7595 +<876b> <876b> 8043 +<876c> <876d> 7598 +<876e> <876e> 8047 +<876f> <8775> 7601 +<877e> <877e> 8323 +<8780> <8783> 7608 +<8784> <8784> 8055 +<8785> <878f> 7613 +<8790> <8790> 762 +<8791> <8791> 761 +<8792> <8792> 769 +<8793> <8799> 7624 +<879a> <879a> 768 +<879b> <879c> 7631 +<889f> <88fc> 1125 +<8940> <897e> 1219 +<8980> <89fc> 1282 +<8a40> <8a7e> 1407 +<8a80> <8afc> 1470 +<8b40> <8b7e> 1595 +<8b80> <8bfc> 1658 +<8c40> <8c7e> 1783 +<8c80> <8cfc> 1846 +<8d40> <8d7e> 1971 +<8d80> <8dfc> 2034 +<8e40> <8e7e> 2159 +<8e80> <8efc> 2222 +<8f40> <8f7e> 2347 +<8f80> <8ffc> 2410 +<9040> <907e> 2535 +<9080> <90fc> 2598 +<9140> <917e> 2723 +<9180> <91fc> 2786 +<9240> <927e> 2911 +<9280> <92fc> 2974 +<9340> <937e> 3099 +<9380> <93fc> 3162 +<9440> <947e> 3287 +endcidrange + +71 begincidrange +<9480> <94fc> 3350 +<9540> <957e> 3475 +<9580> <95fc> 3538 +<9640> <967e> 3663 +<9680> <96fc> 3726 +<9740> <977e> 3851 +<9780> <97fc> 3914 +<9840> <9872> 4039 +<989f> <98fc> 4090 +<9940> <997e> 4184 +<9980> <99fc> 4247 +<9a40> <9a7e> 4372 +<9a80> <9afc> 4435 +<9b40> <9b7e> 4560 +<9b80> <9bfc> 4623 +<9c40> <9c7e> 4748 +<9c80> <9cfc> 4811 +<9d40> <9d7e> 4936 +<9d80> <9dfc> 4999 +<9e40> <9e7e> 5124 +<9e80> <9efc> 5187 +<9f40> <9f7e> 5312 +<9f80> <9ffc> 5375 + 326 + 5500 + 5563 + 5688 + 5751 + 5876 + 5939 + 6064 + 6127 + 6252 + 6315 + 6440 + 6503 + 6628 + 6691 + 6816 + 6879 + 7004 + 7067 + 7192 + 7255 + 7380 + 7443 + 8284 + 8359 + 8422 + 1993 + 8474 + 8546 + 8609 + 8092 + 751 + 8005 + 8092 + 7575 + 751 + 8005 + 7618 + 7610 + 8055 + 768 + 8359 + 8394 + 1993 + 8474 + 8518 + 8581 + 8706 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/90ms-RKSJ-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/90ms-RKSJ-V new file mode 100644 index 00000000000..248b2f91c97 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/90ms-RKSJ-V @@ -0,0 +1,156 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (90ms-RKSJ-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (90ms-RKSJ-H) +%%BeginResource: CMap (90ms-RKSJ-V) +%%Title: (90ms-RKSJ-V Adobe Japan1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/90ms-RKSJ-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /90ms-RKSJ-V def +/CMapVersion 11.003 def +/CMapType 1 def + +/UIDOffset 1020 def +/XUID [1 10 25344] def + +/WMode 1 def + +78 begincidrange +<8141> <8142> 7887 +<8143> <8143> 8268 +<8144> <8144> 8274 +<8150> <8151> 7889 +<815b> <815d> 7891 +<8160> <8164> 7894 +<8169> <817a> 7899 +<8181> <8181> 7917 +<81a8> <81a8> 739 +<81a9> <81a9> 738 +<81aa> <81ab> 736 +<81ac> <81ac> 8270 +<829f> <829f> 7918 +<82a1> <82a1> 7919 +<82a3> <82a3> 7920 +<82a5> <82a5> 7921 +<82a7> <82a7> 7922 +<82c1> <82c1> 7923 +<82e1> <82e1> 7924 +<82e3> <82e3> 7925 +<82e5> <82e5> 7926 +<82ec> <82ec> 7927 +<8340> <8340> 7928 +<8342> <8342> 7929 +<8344> <8344> 7930 +<8346> <8346> 7931 +<8348> <8348> 7932 +<8362> <8362> 7933 +<8383> <8383> 7934 +<8385> <8385> 7935 +<8387> <8387> 7936 +<838e> <838e> 7937 +<8395> <8396> 7938 +<849f> <849f> 7481 +<84a0> <84a0> 7479 +<84a1> <84a1> 7495 +<84a2> <84a2> 7503 +<84a3> <84a3> 7499 +<84a4> <84a4> 7491 +<84a5> <84a5> 7523 +<84a6> <84a6> 7515 +<84a7> <84a7> 7531 +<84a8> <84a8> 7507 +<84a9> <84a9> 7539 +<84aa> <84aa> 7482 +<84ab> <84ab> 7480 +<84ac> <84ac> 7498 +<84ad> <84ad> 7506 +<84ae> <84ae> 7502 +<84af> <84af> 7494 +<84b0> <84b0> 7530 +<84b1> <84b1> 7522 +<84b2> <84b2> 7538 +<84b3> <84b3> 7514 +<84b4> <84b4> 7554 +<84b5> <84b5> 7526 +<84b6> <84b6> 7519 +<84b7> <84b7> 7534 +<84b8> <84b8> 7511 +<84b9> <84b9> 7545 +<84ba> <84ba> 7527 +<84bb> <84bb> 7516 +<84bc> <84bc> 7535 +<84bd> <84bd> 7508 +<84be> <84be> 7542 +<875f> <8760> 7940 +<8761> <8761> 8329 +<8762> <8762> 7943 +<8763> <8763> 8339 +<8764> <8764> 7945 +<8765> <8765> 8338 +<8766> <8767> 7947 +<8768> <8768> 8344 +<8769> <876a> 7950 +<876b> <876b> 8348 +<876c> <876d> 7953 +<876e> <876e> 8349 +<8780> <8781> 7956 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/90msp-RKSJ-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/90msp-RKSJ-H new file mode 100644 index 00000000000..f94d195f0aa --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/90msp-RKSJ-H @@ -0,0 +1,257 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (90msp-RKSJ-H) +%%Title: (90msp-RKSJ-H Adobe Japan1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /90msp-RKSJ-H def +/CMapVersion 11.003 def +/CMapType 1 def + +/XUID [1 10 25445] def + +/WMode 0 def + +4 begincodespacerange + <00> <80> + <8140> <9FFC> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<8140> <817e> 633 +<8180> <81ac> 696 +<81b8> <81bf> 741 +<81c8> <81ce> 749 +<81da> <81e8> 756 +<81f0> <81f7> 771 +<81fc> <81fc> 779 +<824f> <8258> 780 +<8260> <8279> 790 +<8281> <829a> 816 +<829f> <82f1> 842 +<8340> <837e> 925 +<8380> <8396> 988 +<839f> <83b6> 1011 +<83bf> <83d6> 1035 +<8440> <8460> 1059 +<8470> <847e> 1092 +<8480> <8491> 1107 +<849f> <849f> 7479 +<84a0> <84a0> 7481 +<84a1> <84a1> 7491 +<84a2> <84a2> 7495 +<84a3> <84a3> 7503 +<84a4> <84a4> 7499 +<84a5> <84a5> 7507 +<84a6> <84a6> 7523 +<84a7> <84a7> 7515 +<84a8> <84a8> 7531 +<84a9> <84a9> 7539 +<84aa> <84aa> 7480 +<84ab> <84ab> 7482 +<84ac> <84ac> 7494 +<84ad> <84ad> 7498 +<84ae> <84ae> 7506 +<84af> <84af> 7502 +<84b0> <84b0> 7514 +<84b1> <84b1> 7530 +<84b2> <84b2> 7522 +<84b3> <84b3> 7538 +<84b4> <84b4> 7554 +<84b5> <84b5> 7511 +<84b6> <84b6> 7526 +<84b7> <84b7> 7519 +<84b8> <84b8> 7534 +<84b9> <84b9> 7542 +<84ba> <84ba> 7508 +<84bb> <84bb> 7527 +<84bc> <84bc> 7516 +<84bd> <84bd> 7535 +<84be> <84be> 7545 +<8740> <875d> 7555 +<875f> <8760> 7585 +<8761> <8761> 8038 +<8762> <8762> 7588 +<8763> <8763> 8040 +<8764> <8764> 7590 +<8765> <8765> 8042 +<8766> <8767> 7592 +<8768> <8768> 8044 +<8769> <876a> 7595 +<876b> <876b> 8043 +<876c> <876d> 7598 +<876e> <876e> 8047 +<876f> <8775> 7601 +<877e> <877e> 8323 +<8780> <8783> 7608 +<8784> <8784> 8055 +<8785> <878f> 7613 +<8790> <8790> 762 +<8791> <8791> 761 +<8792> <8792> 769 +<8793> <8799> 7624 +<879a> <879a> 768 +<879b> <879c> 7631 +<889f> <88fc> 1125 +<8940> <897e> 1219 +<8980> <89fc> 1282 +<8a40> <8a7e> 1407 +<8a80> <8afc> 1470 +<8b40> <8b7e> 1595 +<8b80> <8bfc> 1658 +<8c40> <8c7e> 1783 +<8c80> <8cfc> 1846 +<8d40> <8d7e> 1971 +<8d80> <8dfc> 2034 +<8e40> <8e7e> 2159 +<8e80> <8efc> 2222 +<8f40> <8f7e> 2347 +<8f80> <8ffc> 2410 +<9040> <907e> 2535 +<9080> <90fc> 2598 +<9140> <917e> 2723 +<9180> <91fc> 2786 +<9240> <927e> 2911 +<9280> <92fc> 2974 +<9340> <937e> 3099 +<9380> <93fc> 3162 +<9440> <947e> 3287 +<9480> <94fc> 3350 +endcidrange + +70 begincidrange +<9540> <957e> 3475 +<9580> <95fc> 3538 +<9640> <967e> 3663 +<9680> <96fc> 3726 +<9740> <977e> 3851 +<9780> <97fc> 3914 +<9840> <9872> 4039 +<989f> <98fc> 4090 +<9940> <997e> 4184 +<9980> <99fc> 4247 +<9a40> <9a7e> 4372 +<9a80> <9afc> 4435 +<9b40> <9b7e> 4560 +<9b80> <9bfc> 4623 +<9c40> <9c7e> 4748 +<9c80> <9cfc> 4811 +<9d40> <9d7e> 4936 +<9d80> <9dfc> 4999 +<9e40> <9e7e> 5124 +<9e80> <9efc> 5187 +<9f40> <9f7e> 5312 +<9f80> <9ffc> 5375 + 326 + 5500 + 5563 + 5688 + 5751 + 5876 + 5939 + 6064 + 6127 + 6252 + 6315 + 6440 + 6503 + 6628 + 6691 + 6816 + 6879 + 7004 + 7067 + 7192 + 7255 + 7380 + 7443 + 8284 + 8359 + 8422 + 1993 + 8474 + 8546 + 8609 + 8092 + 751 + 8005 + 8092 + 7575 + 751 + 8005 + 7618 + 7610 + 8055 + 768 + 8359 + 8394 + 1993 + 8474 + 8518 + 8581 + 8706 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/90msp-RKSJ-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/90msp-RKSJ-V new file mode 100644 index 00000000000..fa9de7ea972 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/90msp-RKSJ-V @@ -0,0 +1,155 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (90msp-RKSJ-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (90msp-RKSJ-H) +%%BeginResource: CMap (90msp-RKSJ-V) +%%Title: (90msp-RKSJ-V Adobe Japan1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/90msp-RKSJ-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /90msp-RKSJ-V def +/CMapVersion 11.003 def +/CMapType 1 def + +/XUID [1 10 25446] def + +/WMode 1 def + +78 begincidrange +<8141> <8142> 7887 +<8143> <8143> 8268 +<8144> <8144> 8274 +<8150> <8151> 7889 +<815b> <815d> 7891 +<8160> <8164> 7894 +<8169> <817a> 7899 +<8181> <8181> 7917 +<81a8> <81a8> 739 +<81a9> <81a9> 738 +<81aa> <81ab> 736 +<81ac> <81ac> 8270 +<829f> <829f> 7918 +<82a1> <82a1> 7919 +<82a3> <82a3> 7920 +<82a5> <82a5> 7921 +<82a7> <82a7> 7922 +<82c1> <82c1> 7923 +<82e1> <82e1> 7924 +<82e3> <82e3> 7925 +<82e5> <82e5> 7926 +<82ec> <82ec> 7927 +<8340> <8340> 7928 +<8342> <8342> 7929 +<8344> <8344> 7930 +<8346> <8346> 7931 +<8348> <8348> 7932 +<8362> <8362> 7933 +<8383> <8383> 7934 +<8385> <8385> 7935 +<8387> <8387> 7936 +<838e> <838e> 7937 +<8395> <8396> 7938 +<849f> <849f> 7481 +<84a0> <84a0> 7479 +<84a1> <84a1> 7495 +<84a2> <84a2> 7503 +<84a3> <84a3> 7499 +<84a4> <84a4> 7491 +<84a5> <84a5> 7523 +<84a6> <84a6> 7515 +<84a7> <84a7> 7531 +<84a8> <84a8> 7507 +<84a9> <84a9> 7539 +<84aa> <84aa> 7482 +<84ab> <84ab> 7480 +<84ac> <84ac> 7498 +<84ad> <84ad> 7506 +<84ae> <84ae> 7502 +<84af> <84af> 7494 +<84b0> <84b0> 7530 +<84b1> <84b1> 7522 +<84b2> <84b2> 7538 +<84b3> <84b3> 7514 +<84b4> <84b4> 7554 +<84b5> <84b5> 7526 +<84b6> <84b6> 7519 +<84b7> <84b7> 7534 +<84b8> <84b8> 7511 +<84b9> <84b9> 7545 +<84ba> <84ba> 7527 +<84bb> <84bb> 7516 +<84bc> <84bc> 7535 +<84bd> <84bd> 7508 +<84be> <84be> 7542 +<875f> <8760> 7940 +<8761> <8761> 8329 +<8762> <8762> 7943 +<8763> <8763> 8339 +<8764> <8764> 7945 +<8765> <8765> 8338 +<8766> <8767> 7947 +<8768> <8768> 8344 +<8769> <876a> 7950 +<876b> <876b> 8348 +<876c> <876d> 7953 +<876e> <876e> 8349 +<8780> <8781> 7956 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/90pv-RKSJ-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/90pv-RKSJ-H new file mode 100644 index 00000000000..7c2aa656189 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/90pv-RKSJ-H @@ -0,0 +1,355 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (90pv-RKSJ-H) +%%Title: (90pv-RKSJ-H Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /90pv-RKSJ-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 870 def +/XUID [1 10 25341] def + +/WMode 0 def + +5 begincodespacerange + <00> <80> + <8140> <9FFC> + + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<80> <80> 97 +<8140> <817e> 633 +<8180> <81ac> 696 +<81b8> <81bf> 741 +<81c8> <81ce> 749 +<81da> <81e8> 756 +<81f0> <81f7> 771 +<81fc> <81fc> 779 +<824f> <8258> 780 +<8260> <8279> 790 +<8281> <829a> 816 +<829f> <82f1> 842 +<8340> <837e> 925 +<8380> <8396> 988 +<839f> <83b6> 1011 +<83bf> <83d6> 1035 +<8440> <8460> 1059 +<8470> <847e> 1092 +<8480> <8491> 1107 +<849f> <849f> 7479 +<84a0> <84a0> 7481 +<84a1> <84a1> 7491 +<84a2> <84a2> 7495 +<84a3> <84a3> 7503 +<84a4> <84a4> 7499 +<84a5> <84a5> 7507 +<84a6> <84a6> 7523 +<84a7> <84a7> 7515 +<84a8> <84a8> 7531 +<84a9> <84a9> 7539 +<84aa> <84aa> 7480 +<84ab> <84ab> 7482 +<84ac> <84ac> 7494 +<84ad> <84ad> 7498 +<84ae> <84ae> 7506 +<84af> <84af> 7502 +<84b0> <84b0> 7514 +<84b1> <84b1> 7530 +<84b2> <84b2> 7522 +<84b3> <84b3> 7538 +<84b4> <84b4> 7554 +<84b5> <84b5> 7511 +<84b6> <84b6> 7526 +<84b7> <84b7> 7519 +<84b8> <84b8> 7534 +<84b9> <84b9> 7542 +<84ba> <84ba> 7508 +<84bb> <84bb> 7527 +<84bc> <84bc> 7516 +<84bd> <84bd> 7535 +<84be> <84be> 7545 +<8540> <8553> 7555 +<855e> <8571> 8071 +<857c> <857e> 8286 +<8580> <8585> 8289 +<8591> <859a> 8061 +<859f> <85a8> 7575 +<85a9> <85aa> 8225 +<85ab> <85ad> 8295 +<85b3> <85bc> 8092 +<85bd> <85c1> 8298 +<85db> <85f4> 8112 +<8640> <8640> 7601 +<8641> <8641> 8186 +<8642> <8642> 7602 +<8643> <8643> 8020 +<8644> <8644> 8022 +<8645> <8645> 8303 +<8646> <8646> 7607 +<8647> <8647> 8023 +<8648> <8648> 7603 +<8649> <8649> 8021 +<864a> <864a> 7604 +<864b> <864b> 8304 +<864c> <864d> 7605 +<864e> <864e> 8037 +<864f> <8655> 8024 +<8656> <8656> 8305 +<8657> <8657> 8036 +<8658> <8659> 8034 +<865a> <865c> 8031 +<865d> <865d> 8306 +<869b> <869d> 7610 +<869e> <869e> 8307 +<869f> <869f> 8018 +<86a0> <86a1> 8016 +<86a2> <86a2> 8019 +<86a3> <86a3> 8211 +<86a4> <86a4> 8213 +<86a5> <86a5> 8212 +<86a6> <86a6> 8214 +<86b3> <86b3> 8058 +<86b4> <86b4> 8056 +<86b5> <86b5> 8308 +<86c7> <86ca> 8219 +<86cb> <86ce> 8309 +<86cf> <86cf> 8014 +<86d0> <86d0> 8013 +<86d1> <86d1> 8012 +endcidrange + +100 begincidrange +<86d2> <86d2> 8011 +<86d3> <86d6> 8206 +<8740> <8746> 8197 +<8747> <8747> 8150 +<8748> <8748> 8204 +<8749> <8749> 8145 +<874a> <874a> 8138 +<874b> <874b> 7620 +<874c> <874c> 8151 +<874d> <874d> 7618 +<874e> <874e> 8146 +<874f> <874f> 8141 +<8750> <8750> 7619 +<8751> <8751> 8149 +<8752> <8752> 8147 +<8753> <8753> 8143 +<8754> <8754> 8148 +<8755> <8755> 8144 +<8756> <8757> 8139 +<8758> <8758> 8142 +<8791> <8792> 8317 +<8793> <8797> 7613 +<8798> <8798> 8154 +<8799> <8799> 8165 +<879a> <879a> 8319 +<879b> <879b> 8158 +<879c> <879c> 8191 +<879d> <879d> 8320 +<879e> <879e> 8223 +<879f> <879f> 7585 +<87a0> <87a0> 8038 +<87a1> <87a1> 7588 +<87a2> <87a2> 7586 +<87a3> <87a3> 8039 +<87a4> <87a4> 8183 +<87a5> <87a6> 8327 +<87a7> <87a7> 8042 +<87a8> <87a8> 7592 +<87a9> <87aa> 8040 +<87ab> <87ab> 7590 +<87ac> <87ac> 7593 +<87ad> <87ad> 7599 +<87ae> <87ae> 8046 +<87af> <87af> 8044 +<87b0> <87b0> 7595 +<87b1> <87b1> 8045 +<87b2> <87b2> 8043 +<87b3> <87b3> 7596 +<87b4> <87b4> 8047 +<87b5> <87b5> 7598 +<87bd> <87bd> 8048 +<87be> <87bf> 8051 +<87c0> <87c1> 8049 +<87e5> <87e7> 7621 +<87e8> <87e8> 8323 +<87fa> <87fa> 8054 +<87fb> <87fc> 8321 +<8840> <8840> 7624 +<8841> <8842> 7629 +<8854> <8855> 7608 +<8868> <8868> 7958 +<886a> <886d> 8313 +<889f> <88fc> 1125 +<8940> <897e> 1219 +<8980> <89fc> 1282 +<8a40> <8a7e> 1407 +<8a80> <8afc> 1470 +<8b40> <8b7e> 1595 +<8b80> <8bfc> 1658 +<8c40> <8c7e> 1783 +<8c80> <8cfc> 1846 +<8d40> <8d7e> 1971 +<8d80> <8dfc> 2034 +<8e40> <8e7e> 2159 +<8e80> <8efc> 2222 +<8f40> <8f7e> 2347 +<8f80> <8ffc> 2410 +<9040> <907e> 2535 +<9080> <90fc> 2598 +<9140> <917e> 2723 +<9180> <91fc> 2786 +<9240> <927e> 2911 +<9280> <92fc> 2974 +<9340> <937e> 3099 +<9380> <93fc> 3162 +<9440> <947e> 3287 +<9480> <94fc> 3350 +<9540> <957e> 3475 +<9580> <95fc> 3538 +<9640> <967e> 3663 +<9680> <96fc> 3726 +<9740> <977e> 3851 +<9780> <97fc> 3914 +<9840> <9872> 4039 +<989f> <98fc> 4090 +<9940> <997e> 4184 +<9980> <99fc> 4247 +<9a40> <9a7e> 4372 +<9a80> <9afc> 4435 +<9b40> <9b7e> 4560 +endcidrange + +63 begincidrange +<9b80> <9bfc> 4623 +<9c40> <9c7e> 4748 +<9c80> <9cfc> 4811 +<9d40> <9d7e> 4936 +<9d80> <9dfc> 4999 +<9e40> <9e7e> 5124 +<9e80> <9efc> 5187 +<9f40> <9f7e> 5312 +<9f80> <9ffc> 5375 + 326 + 5500 + 5563 + 5688 + 5751 + 5876 + 5939 + 6064 + 6127 + 6252 + 6315 + 6440 + 6503 + 6628 + 6691 + 6816 + 6879 + 7004 + 7067 + 7192 + 7255 + 7380 + 7443 + 8284 + 7887 + 7889 + 7891 + 7894 + 7899 + 7917 + 7918 + 7919 + 7920 + 7921 + 7922 + 7923 + 7924 + 7925 + 7926 + 7927 + 7928 + 7929 + 7930 + 7931 + 7932 + 7933 + 7934 + 7935 + 7936 + 7937 + 7938 + 152 + 228 + 124 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/90pv-RKSJ-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/90pv-RKSJ-V new file mode 100644 index 00000000000..6b6197feb0c --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/90pv-RKSJ-V @@ -0,0 +1,129 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (90pv-RKSJ-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (90pv-RKSJ-H) +%%BeginResource: CMap (90pv-RKSJ-V) +%%Title: (90pv-RKSJ-V Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/90pv-RKSJ-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /90pv-RKSJ-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 940 def +/XUID [1 10 25342] def + +/WMode 1 def + +51 begincidrange +<8141> <8142> 7887 +<8150> <8151> 7889 +<815b> <815d> 7891 +<8160> <8164> 7894 +<8169> <817a> 7899 +<8181> <8181> 7917 +<829f> <829f> 7918 +<82a1> <82a1> 7919 +<82a3> <82a3> 7920 +<82a5> <82a5> 7921 +<82a7> <82a7> 7922 +<82c1> <82c1> 7923 +<82e1> <82e1> 7924 +<82e3> <82e3> 7925 +<82e5> <82e5> 7926 +<82ec> <82ec> 7927 +<8340> <8340> 7928 +<8342> <8342> 7929 +<8344> <8344> 7930 +<8346> <8346> 7931 +<8348> <8348> 7932 +<8362> <8362> 7933 +<8383> <8383> 7934 +<8385> <8385> 7935 +<8387> <8387> 7936 +<838e> <838e> 7937 +<8395> <8396> 7938 +<879f> <879f> 7940 +<87a0> <87a0> 8329 +<87a1> <87a1> 7943 +<87a2> <87a2> 7941 +<87a3> <87a3> 8330 +<87a4> <87a5> 8333 +<87a6> <87a7> 8337 +<87a8> <87a8> 7947 +<87a9> <87aa> 8339 +<87ab> <87ab> 7945 +<87ac> <87ac> 7948 +<87ad> <87ad> 7954 +<87ae> <87af> 8343 +<87b0> <87b0> 7950 +<87b1> <87b2> 8347 +<87b3> <87b3> 7951 +<87b4> <87b4> 8349 +<87b5> <87b5> 7953 +<87bd> <87bd> 8350 +<87be> <87be> 8353 +<87bf> <87bf> 8356 +<87c0> <87c0> 8358 +<87c1> <87c1> 8357 +<87fa> <87fc> 8324 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Add-RKSJ-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/Add-RKSJ-H new file mode 100644 index 00000000000..548cb729c91 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Add-RKSJ-H @@ -0,0 +1,738 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Add-RKSJ-H) +%%Title: (Add-RKSJ-H Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /Add-RKSJ-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 140 def +/XUID [1 10 25326] def + +/WMode 0 def + +4 begincodespacerange + <00> <80> + <8140> <9FFC> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 231 +endnotdefrange + +100 begincidrange +<20> <7e> 231 +<8140> <817e> 633 +<8180> <81ac> 696 +<81b8> <81bf> 741 +<81c8> <81ce> 749 +<81da> <81e8> 756 +<81f0> <81f7> 771 +<81fc> <81fc> 779 +<824f> <8258> 780 +<8260> <8279> 790 +<8281> <829a> 816 +<829f> <82f1> 842 +<82f2> <82f4> 7958 +<8340> <837e> 925 +<8380> <8396> 988 +<839f> <83b6> 1011 +<83bf> <83d6> 1035 +<8440> <8460> 1059 +<8470> <847e> 1092 +<8480> <8491> 1107 +<849f> <849f> 7479 +<84a0> <84a0> 7481 +<84a1> <84a1> 7491 +<84a2> <84a2> 7495 +<84a3> <84a3> 7503 +<84a4> <84a4> 7499 +<84a5> <84a5> 7507 +<84a6> <84a6> 7523 +<84a7> <84a7> 7515 +<84a8> <84a8> 7531 +<84a9> <84a9> 7539 +<84aa> <84aa> 7480 +<84ab> <84ab> 7482 +<84ac> <84ac> 7494 +<84ad> <84ad> 7498 +<84ae> <84ae> 7506 +<84af> <84af> 7502 +<84b0> <84b0> 7514 +<84b1> <84b1> 7530 +<84b2> <84b2> 7522 +<84b3> <84b3> 7538 +<84b4> <84b4> 7554 +<84b5> <84b5> 7511 +<84b6> <84b6> 7526 +<84b7> <84b7> 7519 +<84b8> <84b8> 7534 +<84b9> <84b9> 7542 +<84ba> <84ba> 7508 +<84bb> <84bb> 7527 +<84bc> <84bc> 7516 +<84bd> <84bd> 7535 +<84be> <84be> 7545 +<889f> <889f> 1125 +<88a0> <88a0> 7633 +<88a1> <88af> 1127 +<88b0> <88b0> 7961 +<88b1> <88b8> 1143 +<88b9> <88b9> 7634 +<88ba> <88eb> 1152 +<88ec> <88ec> 7635 +<88ed> <88ee> 1203 +<88ef> <88ef> 7962 +<88f0> <88f0> 1206 +<88f1> <88f1> 7636 +<88f2> <88f9> 1208 +<88fa> <88fa> 7637 +<88fb> <88fc> 1217 +<8940> <8948> 1219 +<8949> <8949> 7638 +<894a> <8951> 1229 +<8952> <8952> 7963 +<8953> <8953> 1238 +<8954> <8954> 7639 +<8955> <8957> 1240 +<8958> <8958> 7964 +<8959> <895b> 1244 +<895c> <895c> 7642 +<895d> <8960> 1248 +<8961> <8961> 7643 +<8962> <897e> 1253 +<8980> <898a> 1282 +<898b> <898b> 7644 +<898c> <89a5> 1294 +<89a6> <89a6> 7645 +<89a7> <89a7> 1321 +<89a8> <89a8> 7646 +<89a9> <89dd> 1323 +<89de> <89de> 7647 +<89df> <89e4> 1377 +<89e5> <89e5> 7965 +<89e6> <89f7> 1384 +<89f8> <89f8> 7648 +<89f9> <89fc> 1403 +<8a40> <8a40> 1407 +<8a41> <8a41> 7650 +<8a42> <8a7e> 1409 +<8a80> <8a8a> 1470 +<8a8b> <8a8b> 7652 +<8a8c> <8a92> 1482 +<8a93> <8a93> 7653 +endcidrange + +100 begincidrange +<8a94> <8a99> 1490 +<8a9a> <8a9a> 7654 +<8a9b> <8abf> 1497 +<8ac0> <8ac0> 7655 +<8ac1> <8aca> 1535 +<8acb> <8acb> 7656 +<8acc> <8ae2> 1546 +<8ae3> <8ae3> 7657 +<8ae4> <8afc> 1570 +<8b40> <8b49> 1595 +<8b4a> <8b4a> 7658 +<8b4b> <8b5e> 1606 +<8b5f> <8b5f> 7659 +<8b60> <8b7e> 1627 +<8b80> <8b81> 1658 +<8b82> <8b82> 7966 +<8b83> <8b87> 1661 +<8b88> <8b88> 7967 +<8b89> <8b9f> 1667 +<8ba0> <8ba0> 7660 +<8ba1> <8ba7> 1691 +<8ba8> <8ba8> 7661 +<8ba9> <8bbf> 1699 +<8bc0> <8bc0> 7968 +<8bc1> <8bcc> 1723 +<8bcd> <8bcd> 7662 +<8bce> <8bea> 1736 +<8beb> <8beb> 7663 +<8bec> <8bf1> 1766 +<8bf2> <8bf2> 7664 +<8bf3> <8bf8> 1773 +<8bf9> <8bf9> 7665 +<8bfa> <8bfa> 1780 +<8bfb> <8bfb> 7666 +<8bfc> <8bfc> 1782 +<8c40> <8c55> 1783 +<8c56> <8c56> 7668 +<8c57> <8c70> 1806 +<8c71> <8c71> 7671 +<8c72> <8c7e> 1833 +<8c80> <8c90> 1846 +<8c91> <8c91> 7674 +<8c92> <8c9c> 1864 +<8c9d> <8c9d> 7969 +<8c9e> <8c9e> 7676 +<8c9f> <8cb1> 1877 +<8cb2> <8cb2> 7677 +<8cb3> <8cbe> 1897 +<8cbf> <8cbf> 7678 +<8cc0> <8cfc> 1910 +<8d40> <8d49> 1971 +<8d4a> <8d4a> 7679 +<8d4b> <8d7e> 1982 +<8d80> <8d8c> 2034 +<8d8d> <8d8d> 7682 +<8d8e> <8d93> 2048 +<8d94> <8d94> 7683 +<8d95> <8d98> 2055 +<8d99> <8d99> 7684 +<8d9a> <8dd0> 2060 +<8dd1> <8dd1> 7685 +<8dd2> <8de4> 2116 +<8de5> <8de5> 7686 +<8de6> <8df1> 2136 +<8df2> <8df2> 7687 +<8df3> <8dfc> 2149 +<8e40> <8e45> 2159 +<8e46> <8e46> 7688 +<8e47> <8e48> 2166 +<8e49> <8e49> 7689 +<8e4a> <8e4a> 2169 +<8e4b> <8e4b> 7690 +<8e4c> <8e57> 2171 +<8e58> <8e58> 7691 +<8e59> <8e5f> 2184 +<8e60> <8e60> 7970 +<8e61> <8e7e> 2192 +<8e80> <8ec5> 2222 +<8ec6> <8ec6> 7693 +<8ec7> <8eda> 2293 +<8edb> <8edc> 7695 +<8edd> <8efc> 2315 +<8f40> <8f49> 2347 +<8f4a> <8f4a> 7697 +<8f4b> <8f54> 2358 +<8f55> <8f55> 7698 +<8f56> <8f7e> 2369 +<8f80> <8f8b> 2410 +<8f8c> <8f8c> 7699 +<8f8d> <8f91> 2423 +<8f92> <8f93> 7701 +<8f94> <8fa2> 2430 +<8fa3> <8fa3> 7703 +<8fa4> <8fb0> 2446 +<8fb1> <8fb1> 7704 +<8fb2> <8fd2> 2460 +<8fd3> <8fd3> 7706 +<8fd4> <8fdc> 2494 +<8fdd> <8fdd> 7707 +<8fde> <8fe1> 2504 +endcidrange + +100 begincidrange +<8fe2> <8fe2> 7708 +<8fe3> <8ffc> 2509 +<9040> <9048> 2535 +<9049> <9049> 7709 +<904a> <9077> 2545 +<9078> <9078> 7971 +<9079> <907e> 2592 +<9080> <9080> 7711 +<9081> <909f> 2599 +<90a0> <90a0> 7713 +<90a1> <90e3> 2631 +<90e4> <90e4> 7715 +<90e5> <90ee> 2699 +<90ef> <90ef> 7716 +<90f0> <90f6> 2710 +<90f7> <90f7> 7718 +<90f8> <90f8> 7972 +<90f9> <90f9> 2719 +<90fa> <90fb> 7973 +<90fc> <90fc> 2722 +<9140> <9145> 2723 +<9146> <9146> 7720 +<9147> <9157> 2730 +<9158> <9158> 7721 +<9159> <916a> 2748 +<916b> <916b> 7722 +<916c> <916d> 2767 +<916e> <916e> 7723 +<916f> <917d> 2770 +<917e> <917e> 7724 +<9180> <9188> 2786 +<9189> <9189> 7725 +<918a> <91b4> 2796 +<91b5> <91b5> 7975 +<91b6> <91ba> 2840 +<91bb> <91bb> 7726 +<91bc> <91ca> 2846 +<91cb> <91cb> 7727 +<91cc> <91d9> 2862 +<91da> <91da> 7728 +<91db> <91e0> 2877 +<91e1> <91e1> 7729 +<91e2> <91ec> 2884 +<91ed> <91ed> 7730 +<91ee> <91fa> 2896 +<91fb> <91fb> 7733 +<91fc> <91fc> 2910 +<9240> <9245> 2911 +<9246> <9246> 7734 +<9247> <9247> 2918 +<9248> <9248> 7735 +<9249> <924b> 2920 +<924c> <924d> 7737 +<924e> <925b> 2925 +<925c> <925c> 7739 +<925d> <927e> 2940 +<9280> <928f> 2974 +<9290> <9290> 7740 +<9291> <9294> 2991 +<9295> <9295> 7741 +<9296> <929b> 2996 +<929c> <929c> 7742 +<929d> <92ba> 3003 +<92bb> <92bb> 7743 +<92bc> <92c5> 3034 +<92c6> <92c6> 7744 +<92c7> <92c7> 3045 +<92c8> <92c8> 7745 +<92c9> <92cc> 3047 +<92cd> <92cd> 7747 +<92ce> <92fc> 3052 +<9340> <9340> 3099 +<9341> <9341> 7748 +<9342> <9345> 3101 +<9346> <9346> 7749 +<9347> <934c> 3106 +<934d> <934d> 7750 +<934e> <9354> 3113 +<9355> <9355> 7751 +<9356> <935d> 3121 +<935e> <935e> 7752 +<935f> <9366> 3130 +<9367> <9367> 7753 +<9368> <9369> 3139 +<936a> <936a> 7754 +<936b> <936f> 3142 +<9370> <9370> 7976 +<9371> <9371> 7756 +<9372> <937e> 3149 +<9380> <9383> 3162 +<9384> <9384> 7757 +<9385> <9397> 3167 +<9398> <9398> 7758 +<9399> <93bf> 3187 +<93c0> <93c0> 7760 +<93c1> <93d1> 3227 +<93d2> <93d2> 7761 +<93d3> <93d8> 3245 +<93d9> <93d9> 7763 +<93da> <93e3> 3252 +endcidrange + +100 begincidrange +<93e4> <93e5> 7766 +<93e6> <93e7> 3264 +<93e8> <93e8> 7768 +<93e9> <93f3> 3267 +<93f4> <93f4> 7872 +<93f5> <93fc> 3279 +<9440> <9447> 3287 +<9448> <9448> 7769 +<9449> <9449> 7977 +<944a> <9457> 3297 +<9458> <9458> 7770 +<9459> <9475> 3312 +<9476> <9476> 7771 +<9477> <947e> 3342 +<9480> <9486> 3350 +<9487> <9487> 7772 +<9488> <9488> 3358 +<9489> <9489> 7773 +<948a> <948c> 3360 +<948d> <948d> 7774 +<948e> <94a1> 3364 +<94a2> <94a2> 7775 +<94a3> <94ab> 3385 +<94ac> <94ac> 7776 +<94ad> <94ad> 3395 +<94ae> <94ae> 7777 +<94af> <94bd> 3397 +<94be> <94be> 7978 +<94bf> <94d1> 3413 +<94d2> <94d2> 7778 +<94d3> <94f2> 3433 +<94f3> <94f3> 7780 +<94f4> <94fc> 3466 +<9540> <9540> 3475 +<9541> <9542> 7781 +<9543> <954d> 3478 +<954e> <954e> 7783 +<954f> <9550> 3490 +<9551> <9551> 7784 +<9552> <9553> 3493 +<9554> <9554> 7785 +<9555> <955e> 3496 +<955f> <955f> 7786 +<9560> <956c> 3507 +<956d> <956d> 7787 +<956e> <957e> 3521 +<9580> <95c0> 3538 +<95c1> <95c1> 7789 +<95c2> <95ca> 3604 +<95cb> <95cb> 7790 +<95cc> <95d0> 3614 +<95d1> <95d1> 7979 +<95d2> <95d7> 3620 +<95d8> <95d8> 7791 +<95d9> <95f6> 3627 +<95f7> <95f7> 7792 +<95f8> <95fc> 3658 +<9640> <9647> 3663 +<9648> <9648> 7794 +<9649> <9669> 3672 +<966a> <966a> 7795 +<966b> <967e> 3706 +<9680> <968f> 3726 +<9690> <9690> 7796 +<9691> <9697> 3743 +<9698> <9698> 7980 +<9699> <96ca> 3751 +<96cb> <96cb> 7797 +<96cc> <96d6> 3802 +<96d7> <96d7> 7798 +<96d8> <96dc> 3814 +<96dd> <96dd> 7799 +<96de> <96df> 3820 +<96e0> <96e0> 7800 +<96e1> <96f7> 3823 +<96f8> <96f8> 7801 +<96f9> <96f9> 3847 +<96fa> <96fa> 7802 +<96fb> <96fc> 3849 +<9740> <9750> 3851 +<9751> <9751> 7804 +<9752> <976e> 3869 +<976f> <976f> 7805 +<9770> <9772> 3899 +<9773> <9773> 7806 +<9774> <977e> 3903 +<9780> <9788> 3914 +<9789> <9789> 7807 +<978a> <97f7> 3924 +<97f8> <97f9> 7809 +<97fa> <97fa> 7981 +<97fb> <97fc> 4037 +<9840> <9840> 7811 +<9841> <984f> 4040 +<9850> <9850> 7812 +<9851> <9857> 4056 +<9858> <9858> 7813 +<9859> <9872> 4064 +<989f> <98fc> 4090 +<9940> <9940> 4184 +endcidrange + +100 begincidrange +<9941> <9941> 7982 +<9942> <995b> 4186 +<995c> <995c> 7814 +<995d> <996b> 4213 +<996c> <996c> 7817 +<996d> <997e> 4229 +<9980> <99b5> 4247 +<99b6> <99b6> 7983 +<99b7> <99fc> 4302 +<9a40> <9a4e> 4372 +<9a4f> <9a4f> 7818 +<9a50> <9a58> 4388 +<9a59> <9a59> 7819 +<9a5a> <9a66> 4398 +<9a67> <9a67> 7984 +<9a68> <9a7c> 4412 +<9a7d> <9a7d> 7821 +<9a7e> <9a7e> 4434 +<9a80> <9a8a> 4435 +<9a8b> <9a8b> 7822 +<9a8c> <9a8c> 7985 +<9a8d> <9ac1> 4448 +<9ac2> <9ac2> 7823 +<9ac3> <9ac3> 7986 +<9ac4> <9ae9> 4503 +<9aea> <9aea> 7987 +<9aeb> <9afc> 4542 +<9b40> <9b5b> 4560 +<9b5c> <9b5c> 7824 +<9b5d> <9b7e> 4589 +<9b80> <9b82> 4623 +<9b83> <9b83> 7825 +<9b84> <9b97> 4627 +<9b98> <9b98> 7988 +<9b99> <9b9f> 4648 +<9ba0> <9ba0> 7826 +<9ba1> <9bfa> 4656 +<9bfb> <9bfc> 7989 +<9c40> <9c7e> 4748 +<9c80> <9ca1> 4811 +<9ca2> <9ca2> 7828 +<9ca3> <9cfc> 4846 +<9d40> <9d46> 4936 +<9d47> <9d47> 7991 +<9d48> <9d7e> 4944 +<9d80> <9d80> 7829 +<9d81> <9d8b> 5000 +<9d8c> <9d8c> 7830 +<9d8d> <9db6> 5012 +<9db7> <9db7> 7831 +<9db8> <9df7> 5055 +<9df8> <9df8> 7992 +<9df9> <9dfc> 5120 +<9e40> <9e63> 5124 +<9e64> <9e64> 7833 +<9e65> <9e7e> 5161 +<9e80> <9e8a> 5187 +<9e8b> <9e8b> 7835 +<9e8c> <9efc> 5199 +<9f40> <9f7e> 5312 +<9f80> <9f80> 5375 +<9f81> <9f81> 7993 +<9f82> <9fcd> 5377 +<9fce> <9fce> 7837 +<9fcf> <9fd3> 5454 +<9fd4> <9fd4> 7994 +<9fd5> <9ff3> 5460 +<9ff4> <9ff4> 7995 +<9ff5> <9ffc> 5492 + 326 + 5500 + 5563 + 7838 + 5583 + 7839 + 5600 + 7840 + 5657 + 5688 + 7841 + 5699 + 5751 + 7845 + 5861 + 5876 + 7846 + 5918 + 7847 + 5928 + 7996 + 5933 + 5939 + 7848 + 5995 + 7997 + 6002 + 7849 + 6038 + 7850 + 6048 +endcidrange + +100 begincidrange + 6064 + 7851 + 6089 + 7852 + 6091 + 7853 + 6102 + 6127 + 7998 + 6199 + 6252 + 6315 + 7855 + 6320 + 7856 + 6325 + 7857 + 6334 + 7859 + 6373 + 7999 + 6391 + 6440 + 6503 + 8000 + 6534 + 8001 + 6563 + 7864 + 6613 + 6628 + 7865 + 6646 + 6691 + 7866 + 6698 + 7868 + 6795 + 6816 + 7870 + 6862 + 6879 + 7873 + 6919 + 7874 + 6939 + 7004 + 7067 + 7879 + 7147 + 7192 + 8003 + 7249 + 7255 + 7882 + 7299 + 7883 + 7314 + 7884 + 7332 + 7380 + 7885 + 8004 + 7430 + 7443 + 7886 + 7473 + 8284 + 8005 + 8008 + 768 + 762 + 761 + 8009 + 7601 + 8020 + 7607 + 8021 + 7604 + 8024 + 771 + 8034 + 772 + 8035 + 8037 + 7588 + 7585 + 8038 + 7586 + 8039 + 7590 + 8042 + 7592 + 7596 + 8043 + 7598 + 7595 + 8044 + 7599 + 8046 +endcidrange + +35 begincidrange + 8053 + 7610 + 8059 + 8060 + 8061 + 8071 + 7555 + 8091 + 7575 + 8092 + 8112 + 7958 + 8138 + 7620 + 8140 + 7619 + 8143 + 7618 + 8148 + 8152 + 8155 + 8166 + 7887 + 8268 + 8274 + 7889 + 8282 + 8275 + 8280 + 8277 + 7899 + 7918 + 8264 + 736 + 8182 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Add-RKSJ-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/Add-RKSJ-V new file mode 100644 index 00000000000..d28dc2dc5c7 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Add-RKSJ-V @@ -0,0 +1,135 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (Add-RKSJ-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (Add-RKSJ-H) +%%BeginResource: CMap (Add-RKSJ-V) +%%Title: (Add-RKSJ-V Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/Add-RKSJ-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /Add-RKSJ-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 780 def +/XUID [1 10 25327] def + +/WMode 1 def + +57 begincidrange +<8141> <8142> 7887 +<8143> <8143> 8268 +<8144> <8144> 8274 +<8150> <8151> 7889 +<815b> <815d> 7891 +<8160> <8164> 7894 +<8165> <8165> 8282 +<8166> <8166> 8275 +<8167> <8167> 8280 +<8168> <8168> 8277 +<8169> <817a> 7899 +<829f> <829f> 7918 +<82a1> <82a1> 7919 +<82a3> <82a3> 7920 +<82a5> <82a5> 7921 +<82a7> <82a7> 7922 +<82c1> <82c1> 7923 +<82e1> <82e1> 7924 +<82e3> <82e3> 7925 +<82e5> <82e5> 7926 +<82ec> <82ec> 7927 +<82f3> <82f4> 8264 +<8340> <8340> 7928 +<8342> <8342> 7929 +<8344> <8344> 7930 +<8346> <8346> 7931 +<8348> <8348> 7932 +<8362> <8362> 7933 +<8383> <8383> 7934 +<8385> <8385> 7935 +<8387> <8387> 7936 +<838e> <838e> 7937 +<8395> <8396> 7938 + 7943 + 7940 + 8329 + 7941 + 8330 + 8339 + 7945 + 8338 + 7947 + 7951 + 8348 + 7953 + 7950 + 8344 + 8347 + 7954 + 8343 + 8349 + 8358 + 8357 + 8353 + 8356 + 8324 + 8333 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-0 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-0 new file mode 100644 index 00000000000..45803204c36 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-0 @@ -0,0 +1,136 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /Adobe-CNS1-0 def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 960 def +/XUID [1 10 25394] def + +/WMode 0 def + +/CIDCount 14099 def + +1 begincodespacerange + <0000> <37FF> +endcodespacerange + +56 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <3712> 14080 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-1 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-1 new file mode 100644 index 00000000000..c875cb526ae --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-1 @@ -0,0 +1,147 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 1) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 1 def +end def + +/CMapName /Adobe-CNS1-1 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25590] def + +/WMode 0 def + +/CIDCount 17408 def + +1 begincodespacerange + <0000> <43FF> +endcodespacerange + +68 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-2 new file mode 100644 index 00000000000..1ecd4f307a4 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-2 @@ -0,0 +1,148 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 2) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 2 def +end def + +/CMapName /Adobe-CNS1-2 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25586] def + +/WMode 0 def + +/CIDCount 17601 def + +1 begincodespacerange + <0000> <44FF> +endcodespacerange + +69 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44c0> 17408 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-3 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-3 new file mode 100644 index 00000000000..977b6ec0222 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-3 @@ -0,0 +1,153 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 3) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 3 def +end def + +/CMapName /Adobe-CNS1-3 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25587] def + +/WMode 0 def + +/CIDCount 18846 def + +1 begincodespacerange + <0000> <49FF> +endcodespacerange + +74 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <499d> 18688 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-4 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-4 new file mode 100644 index 00000000000..b354570fb9e --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-4 @@ -0,0 +1,154 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 4) +%%Version: 1.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 4 def +end def + +/CMapName /Adobe-CNS1-4 def +/CMapVersion 1.003 def +/CMapType 1 def + +/XUID [1 10 25595] def + +/WMode 0 def + +/CIDCount 18965 def + +1 begincodespacerange + <0000> <4AFF> +endcodespacerange + +75 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4a14> 18944 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-5 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-5 new file mode 100644 index 00000000000..c6368378a6a --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-5 @@ -0,0 +1,154 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 5) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 5 def +end def + +/CMapName /Adobe-CNS1-5 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25598] def + +/WMode 0 def + +/CIDCount 19088 def + +1 begincodespacerange + <0000> <4AFF> +endcodespacerange + +75 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4a8f> 18944 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-6 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-6 new file mode 100644 index 00000000000..4727c27ff5e --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-6 @@ -0,0 +1,154 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe CNS1 6) +%%Version: 1.000 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 6 def +end def + +/CMapName /Adobe-CNS1-6 def +/CMapVersion 1.000 def +/CMapType 1 def + +/XUID [1 10 25599] def + +/WMode 0 def + +/CIDCount 19156 def + +1 begincodespacerange + <0000> <4AFF> +endcodespacerange + +75 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4ad3> 18944 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-UCS2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-UCS2 new file mode 100644 index 00000000000..c0030c39a55 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-CNS1-UCS2 @@ -0,0 +1,18209 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Adobe-CNS1-UCS2) +%%Title: (Adobe-CNS1-UCS2 Adobe CNS1 5) +%%Version: 13.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin +/Registry (Adobe) def +/Ordering (Adobe_CNS1_UCS2) def +/Supplement 5 def +end def + +/CMapName /Adobe-CNS1-UCS2 def + +/CMapVersion 13.003 def +/CMapType 2 def + +/XUID [1 10 25335 1212] def + +/WMode 0 def + +1 begincodespacerange + <0000> +endcodespacerange + +100 beginbfchar +<0000> +<0060> <00a9> +<0061> <2122> +<0062> <2026> +<0063> <3000> +<0064> +<0067> +<0068> <2027> +<0069> +<006a> +<006b> +<006c> +<006d> +<006e> <22ef> +<006f> <2025> +<0073> <00b7> +<0078> +<0079> <2013> +<007a> +<007b> <2014> +<007c> +<007d> +<007e> +<007f> +<0084> +<0085> +<00ac> <2035> +<00ad> <2032> +<00ae> +<00af> +<00b0> +<00b1> <203b> +<00b2> <00a7> +<00b3> <3003> +<00b4> <25cb> +<00b5> <25cf> +<00b6> <25b3> +<00b7> <25b2> +<00b8> <25ce> +<00b9> <2606> +<00ba> <2605> +<00bb> <25c7> +<00bc> <25c6> +<00bd> <25a1> +<00be> <25a0> +<00bf> <25bd> +<00c0> <25bc> +<00c1> <32a3> +<00c2> <2105> +<00c3> <203e> +<00c4> +<00c5> +<00c6> <02cd> +<00d0> +<00d1> +<00d2> <00d7> +<00d3> <00f7> +<00d4> <00b1> +<00d5> <221a> +<00d6> +<00d7> +<00d8> +<00db> <2260> +<00dc> <221e> +<00dd> <2252> +<00de> <2261> +<00e4> <223c> +<00e7> <22a5> +<00e8> <2220> +<00e9> <221f> +<00ea> <22bf> +<00eb> <33d2> +<00ec> <33d1> +<00ed> <222b> +<00ee> <222e> +<00ef> <2235> +<00f0> <2234> +<00f1> <2640> +<00f2> <2642> +<00f3> <2295> +<00f4> <2609> +<00f5> <2191> +<00f6> <2193> +<00f7> <2192> +<00f8> <2190> +<00fb> <2199> +<00fc> <2198> +<00fd> <2225> +<00fe> <2223> +<00ff> +<0100> +<0101> +<0102> +<0103> +<0104> <00a5> +<0105> <3012> +<0108> +<0109> +<010a> <2103> +<010b> <2109> +endbfchar + +100 beginbfchar +<010f> <33d5> +<0113> <33ce> +<0114> <33a1> +<0117> <33c4> +<0118> <00b0> +<0119> <5159> +<011a> <515b> +<011b> <515e> +<011c> <515d> +<011d> <5161> +<011e> <5163> +<011f> <55e7> +<0120> <74e9> +<0121> <7cce> +<012a> <258f> +<012b> <258e> +<012c> <258d> +<012d> <258c> +<012e> <258b> +<012f> <258a> +<0130> <2589> +<0131> <253c> +<0132> <2534> +<0133> <252c> +<0134> <2524> +<0135> <251c> +<0136> <2594> +<0137> <2500> +<0138> <2502> +<0139> <2595> +<013a> <250c> +<013b> <2510> +<013c> <2514> +<013d> <2518> +<0140> <2570> +<0141> <256f> +<0142> <2550> +<0143> <255e> +<0144> <256a> +<0145> <2561> +<0148> <25e5> +<0149> <25e4> +<016a> <3038> +<016b> <5344> +<016c> <303a> +<01f6> <02d9> +<01f7> <02ca> +<01f8> <02c7> +<01f9> <02cb> +<0218> <4e28> +<0219> <4e36> +<021a> <4e3f> +<021b> <4e85> +<021c> <4ea0> +<021d> <5182> +<021e> <5196> +<021f> <51ab> +<0220> <52f9> +<0221> <5338> +<0222> <5369> +<0223> <53b6> +<0224> <5902> +<0225> <5b80> +<0226> <5ddb> +<0227> <5e7a> +<0228> <5e7f> +<0229> <5ef4> +<022a> <5f50> +<022b> <5f61> +<022c> <6534> +<022d> <65e0> +<022e> <7592> +<022f> <7676> +<0230> <8fb5> +<0231> <96b6> +<0252> <2421> +<0253> <4e00> +<0254> <4e59> +<0255> <4e01> +<0256> <4e03> +<0257> <4e43> +<0258> <4e5d> +<0259> <4e86> +<025a> <4e8c> +<025b> <4eba> +<025c> <513f> +<025d> <5165> +<025e> <516b> +<025f> <51e0> +<0262> <529b> +<0263> <5315> +<0264> <5341> +<0265> <535c> +<0266> <53c8> +<0267> <4e09> +<0268> <4e0b> +<0269> <4e08> +<026a> <4e0a> +<026b> <4e2b> +<026c> <4e38> +endbfchar + +100 beginbfchar +<026d> <51e1> +<026e> <4e45> +<026f> <4e48> +<0270> <4e5f> +<0271> <4e5e> +<0272> <4e8e> +<0273> <4ea1> +<0274> <5140> +<0275> <5203> +<0276> <52fa> +<0277> <5343> +<0278> <53c9> +<0279> <53e3> +<027a> <571f> +<027b> <58eb> +<027c> <5915> +<027d> <5927> +<027e> <5973> +<0281> <5b53> +<0282> <5bf8> +<0283> <5c0f> +<0284> <5c22> +<0285> <5c38> +<0286> <5c71> +<0287> <5ddd> +<0288> <5de5> +<028c> <5dfe> +<028d> <5e72> +<028e> <5efe> +<028f> <5f0b> +<0290> <5f13> +<0291> <624d> +<0292> <4e11> +<0293> <4e10> +<0294> <4e0d> +<0295> <4e2d> +<0296> <4e30> +<0297> <4e39> +<0298> <4e4b> +<0299> <5c39> +<029a> <4e88> +<029b> <4e91> +<029c> <4e95> +<029d> <4e92> +<029e> <4e94> +<029f> <4ea2> +<02a0> <4ec1> +<02a1> <4ec0> +<02a2> <4ec3> +<02a5> <4ecd> +<02a8> <4ec4> +<02a9> <5143> +<02aa> <5141> +<02ab> <5167> +<02ae> <516c> +<02af> <5197> +<02b0> <51f6> +<02b4> <52fb> +<02b7> <5316> +<02b8> <5339> +<02b9> <5348> +<02ba> <5347> +<02bb> <5345> +<02bc> <535e> +<02bd> <5384> +<02be> <53cb> +<02bf> <53ca> +<02c0> <53cd> +<02c1> <58ec> +<02c2> <5929> +<02c3> <592b> +<02c4> <592a> +<02c5> <592d> +<02c6> <5b54> +<02c7> <5c11> +<02c8> <5c24> +<02c9> <5c3a> +<02ca> <5c6f> +<02cb> <5df4> +<02cc> <5e7b> +<02cd> <5eff> +<02d0> <5fc3> +<02d1> <6208> +<02d2> <6236> +<02d3> <624b> +<02d4> <624e> +<02d5> <652f> +<02d6> <6587> +<02d7> <6597> +<02d8> <65a4> +<02d9> <65b9> +<02da> <65e5> +<02db> <66f0> +<02dc> <6708> +<02dd> <6728> +<02de> <6b20> +<02df> <6b62> +<02e0> <6b79> +<02e1> <6bcb> +<02e2> <6bd4> +endbfchar + +100 beginbfchar +<02e3> <6bdb> +<02e4> <6c0f> +<02e5> <6c34> +<02e6> <706b> +<02e7> <722a> +<02e8> <7236> +<02e9> <723b> +<02ea> <7247> +<02eb> <7259> +<02ec> <725b> +<02ed> <72ac> +<02ee> <738b> +<02ef> <4e19> +<02f0> <4e16> +<02f1> <4e15> +<02f2> <4e14> +<02f3> <4e18> +<02f4> <4e3b> +<02f5> <4e4d> +<02f6> <4e4f> +<02f7> <4e4e> +<02f8> <4ee5> +<02f9> <4ed8> +<0300> <4ed9> +<0301> <4ede> +<0302> <5145> +<0303> <5144> +<0306> <51ac> +<0309> <51f8> +<030a> <520a> +<030b> <52a0> +<030c> <529f> +<030f> <5317> +<0310> <531d> +<0311> <4edf> +<0312> <534a> +<0313> <5349> +<0314> <5361> +<0315> <5360> +<0316> <536f> +<0317> <536e> +<0318> <53bb> +<0319> <53ef> +<031a> <53e4> +<031b> <53f3> +<031c> <53ec> +<031d> <53ee> +<031e> <53e9> +<031f> <53e8> +<0320> <53fc> +<0321> <53f8> +<0322> <53f5> +<0323> <53eb> +<0324> <53e6> +<0325> <53ea> +<0326> <53f2> +<0327> <53f1> +<0328> <53f0> +<0329> <53e5> +<032a> <53ed> +<032b> <53fb> +<032c> <56db> +<032d> <56da> +<032e> <5916> +<032f> <592e> +<0330> <5931> +<0331> <5974> +<0332> <5976> +<0333> <5b55> +<0334> <5b83> +<0335> <5c3c> +<0336> <5de8> +<0337> <5de7> +<0338> <5de6> +<033b> <5e73> +<033c> <5e7c> +<033d> <5f01> +<033e> <5f18> +<033f> <5f17> +<0340> <5fc5> +<0341> <620a> +<0344> <6252> +<0345> <6251> +<0346> <65a5> +<0347> <65e6> +<0348> <672e> +<0349> <672c> +<034c> <672d> +<034d> <6b63> +<034e> <6bcd> +<034f> <6c11> +<0350> <6c10> +<0351> <6c38> +<0352> <6c41> +<0353> <6c40> +<0354> <6c3e> +<0355> <72af> +<0356> <7384> +<0357> <7389> +<0358> <74dc> +endbfchar + +100 beginbfchar +<0359> <74e6> +<035a> <7518> +<035b> <751f> +<0362> <758b> +<0363> <767d> +<0364> <76ae> +<0365> <76bf> +<0366> <76ee> +<0367> <77db> +<0368> <77e2> +<0369> <77f3> +<036a> <793a> +<036b> <79be> +<036c> <7a74> +<036d> <7acb> +<0372> <4e69> +<0373> <4e99> +<0374> <4ea4> +<0375> <4ea6> +<0376> <4ea5> +<0377> <4eff> +<0378> <4f09> +<0379> <4f19> +<037a> <4f0a> +<037b> <4f15> +<037c> <4f0d> +<037f> <4f0f> +<0380> <4ef2> +<0381> <4ef6> +<0382> <4efb> +<0383> <4ef0> +<0384> <4ef3> +<0385> <4efd> +<0386> <4f01> +<0387> <4f0b> +<0388> <5149> +<0389> <5147> +<038a> <5146> +<038b> <5148> +<038c> <5168> +<038d> <5171> +<038e> <518d> +<038f> <51b0> +<0390> <5217> +<0393> <520e> +<0394> <5216> +<0395> <52a3> +<0396> <5308> +<0397> <5321> +<0398> <5320> +<039b> <5409> +<039c> <540f> +<039d> <540c> +<039e> <540a> +<039f> <5410> +<03a0> <5401> +<03a1> <540b> +<03a2> <5404> +<03a3> <5411> +<03a4> <540d> +<03a5> <5408> +<03a6> <5403> +<03a7> <540e> +<03a8> <5406> +<03a9> <5412> +<03aa> <56e0> +<03ab> <56de> +<03ac> <56dd> +<03ad> <5733> +<03ae> <5730> +<03af> <5728> +<03b0> <572d> +<03b1> <572c> +<03b2> <572f> +<03b3> <5729> +<03b8> <5984> +<03b9> <5978> +<03ba> <5983> +<03bb> <597d> +<03bc> <5979> +<03bd> <5982> +<03be> <5981> +<03c3> <5b85> +<03c4> <5b89> +<03c5> <5bfa> +<03c6> <5c16> +<03c7> <5c79> +<03c8> <5dde> +<03c9> <5e06> +<03ca> <5e76> +<03cb> <5e74> +<03cc> <5f0f> +<03cd> <5f1b> +<03ce> <5fd9> +<03cf> <5fd6> +<03d0> <620e> +<03d3> <6210> +<03d4> <6263> +<03d5> <625b> +<03d6> <6258> +endbfchar + +100 beginbfchar +<03d7> <6536> +<03d8> <65e9> +<03d9> <65e8> +<03de> <6709> +<03df> <673d> +<03e0> <6734> +<03e1> <6731> +<03e2> <6735> +<03e3> <6b21> +<03e4> <6b64> +<03e5> <6b7b> +<03e6> <6c16> +<03e7> <6c5d> +<03e8> <6c57> +<03e9> <6c59> +<03ec> <6c50> +<03ed> <6c55> +<03ee> <6c61> +<03ef> <6c5b> +<03f2> <7070> +<03f3> <725f> +<03f4> <725d> +<03f5> <767e> +<03f6> <7af9> +<03f7> <7c73> +<03f8> <7cf8> +<03f9> <7f36> +<03fa> <7f8a> +<03fb> <7fbd> +<03fc> <8001> +<03fd> <8003> +<03fe> <800c> +<03ff> <8012> +<0400> <8033> +<0401> <807f> +<0402> <8089> +<0405> <81e3> +<0406> <81ea> +<0407> <81f3> +<0408> <81fc> +<0409> <820c> +<040a> <821b> +<040b> <821f> +<040c> <826e> +<040d> <8272> +<040e> <827e> +<040f> <866b> +<0410> <8840> +<0411> <884c> +<0412> <8863> +<0413> <897f> +<0414> <9621> +<0415> <4e32> +<0416> <4ea8> +<0417> <4f4d> +<0418> <4f4f> +<0419> <4f47> +<041a> <4f57> +<041b> <4f5e> +<041c> <4f34> +<041d> <4f5b> +<041e> <4f55> +<041f> <4f30> +<0422> <4f3d> +<0423> <4f3a> +<0424> <4f38> +<0425> <4f43> +<0426> <4f54> +<0427> <4f3c> +<0428> <4f46> +<0429> <4f63> +<042a> <4f5c> +<042b> <4f60> +<042c> <4f2f> +<042d> <4f4e> +<042e> <4f36> +<042f> <4f59> +<0430> <4f5d> +<0431> <4f48> +<0432> <4f5a> +<0433> <514c> +<0434> <514b> +<0435> <514d> +<0436> <5175> +<0439> <5225> +<043a> <5224> +<043d> <5228> +<043e> <52ab> +<0441> <52ac> +<0442> <5323> +<0443> <5373> +<0444> <5375> +<0445> <541d> +<0446> <542d> +<0447> <541e> +<0448> <543e> +<0449> <5426> +<044a> <544e> +<044b> <5427> +<044c> <5446> +endbfchar + +100 beginbfchar +<044d> <5443> +<044e> <5433> +<044f> <5448> +<0450> <5442> +<0451> <541b> +<0452> <5429> +<0453> <544a> +<0454> <5439> +<0455> <543b> +<0456> <5438> +<0457> <542e> +<045a> <5420> +<045b> <543c> +<045c> <5440> +<045d> <5431> +<045e> <542b> +<045f> <541f> +<0460> <542c> +<0461> <56ea> +<0462> <56f0> +<0463> <56e4> +<0464> <56eb> +<0465> <574a> +<0466> <5751> +<0467> <5740> +<0468> <574d> +<0469> <5747> +<046a> <574e> +<046b> <573e> +<046c> <5750> +<046d> <574f> +<046e> <573b> +<046f> <58ef> +<0470> <593e> +<0471> <599d> +<0472> <5992> +<0473> <59a8> +<0474> <599e> +<0475> <59a3> +<0476> <5999> +<0477> <5996> +<0478> <598d> +<0479> <59a4> +<047a> <5993> +<047b> <598a> +<047c> <59a5> +<047d> <5b5d> +<047e> <5b5c> +<0481> <5b8c> +<0482> <5b8b> +<0483> <5b8f> +<0484> <5c2c> +<0487> <5c3f> +<0488> <5c3e> +<048b> <5c94> +<048c> <5c8c> +<048d> <5deb> +<048e> <5e0c> +<048f> <5e8f> +<0490> <5e87> +<0491> <5e8a> +<0492> <5ef7> +<0493> <5f04> +<0494> <5f1f> +<0495> <5f64> +<0496> <5f62> +<0497> <5f77> +<0498> <5f79> +<0499> <5fd8> +<049a> <5fcc> +<049b> <5fd7> +<049c> <5fcd> +<049d> <5ff1> +<049e> <5feb> +<049f> <5ff8> +<04a0> <5fea> +<04a1> <6212> +<04a2> <6211> +<04a3> <6284> +<04a4> <6297> +<04a5> <6296> +<04a6> <6280> +<04a7> <6276> +<04a8> <6289> +<04a9> <626d> +<04aa> <628a> +<04ab> <627c> +<04ac> <627e> +<04ad> <6279> +<04ae> <6273> +<04af> <6292> +<04b0> <626f> +<04b1> <6298> +<04b2> <626e> +<04b3> <6295> +<04b4> <6293> +<04b5> <6291> +<04b6> <6286> +<04b7> <6539> +<04b8> <653b> +endbfchar + +100 beginbfchar +<04b9> <6538> +<04ba> <65f1> +<04bb> <66f4> +<04bc> <675f> +<04c1> <675c> +<04c2> <6756> +<04c3> <675e> +<04c4> <6749> +<04c5> <6746> +<04c6> <6760> +<04c7> <6753> +<04c8> <6757> +<04c9> <6b65> +<04ca> <6bcf> +<04cb> <6c42> +<04cc> <6c5e> +<04cd> <6c99> +<04ce> <6c81> +<04d1> <6c85> +<04d2> <6c9b> +<04d3> <6c6a> +<04d4> <6c7a> +<04d5> <6c90> +<04d6> <6c70> +<04d7> <6c8c> +<04d8> <6c68> +<04d9> <6c96> +<04da> <6c92> +<04db> <6c7d> +<04dc> <6c83> +<04dd> <6c72> +<04de> <6c7e> +<04df> <6c74> +<04e0> <6c86> +<04e1> <6c76> +<04e2> <6c8d> +<04e3> <6c94> +<04e4> <6c98> +<04e5> <6c82> +<04e6> <7076> +<04e9> <7078> +<04ea> <7262> +<04eb> <7261> +<04ec> <7260> +<04ed> <72c4> +<04ee> <72c2> +<04ef> <7396> +<04f0> <752c> +<04f1> <752b> +<04f4> <7682> +<04f5> <76ef> +<04f6> <77e3> +<04f7> <79c1> +<04f8> <79c0> +<04f9> <79bf> +<04fa> <7a76> +<04fb> <7cfb> +<04fc> <7f55> +<04fd> <8096> +<04fe> <8093> +<04ff> <809d> +<0500> <8098> +<0501> <809b> +<0502> <809a> +<0503> <80b2> +<0504> <826f> +<0505> <8292> +<0506> <828b> +<0507> <828d> +<0508> <898b> +<0509> <89d2> +<050a> <8a00> +<050b> <8c37> +<050c> <8c46> +<050d> <8c55> +<050e> <8c9d> +<050f> <8d64> +<0510> <8d70> +<0511> <8db3> +<0512> <8eab> +<0513> <8eca> +<0514> <8f9b> +<0515> <8fb0> +<0516> <8fc2> +<0517> <8fc6> +<0518> <8fc5> +<0519> <8fc4> +<051a> <5de1> +<051b> <9091> +<051c> <90a2> +<051d> <90aa> +<051e> <90a6> +<051f> <90a3> +<0520> <9149> +<0521> <91c6> +<0522> <91cc> +<0523> <9632> +<0524> <962e> +<0525> <9631> +<0526> <962a> +endbfchar + +100 beginbfchar +<0527> <962c> +<0528> <4e26> +<0529> <4e56> +<052a> <4e73> +<052b> <4e8b> +<052c> <4e9b> +<052d> <4e9e> +<0530> <4f6f> +<0531> <4f9d> +<0532> <4f8d> +<0533> <4f73> +<0534> <4f7f> +<0535> <4f6c> +<0536> <4f9b> +<0537> <4f8b> +<0538> <4f86> +<0539> <4f83> +<053a> <4f70> +<053b> <4f75> +<053c> <4f88> +<053d> <4f69> +<053e> <4f7b> +<053f> <4f96> +<0540> <4f7e> +<0541> <4f8f> +<0542> <4f91> +<0543> <4f7a> +<0544> <5154> +<0545> <5152> +<0546> <5155> +<0547> <5169> +<0548> <5177> +<0549> <5176> +<054a> <5178> +<054b> <51bd> +<054c> <51fd> +<054d> <523b> +<054e> <5238> +<054f> <5237> +<0550> <523a> +<0551> <5230> +<0552> <522e> +<0553> <5236> +<0554> <5241> +<0555> <52be> +<0556> <52bb> +<0557> <5352> +<0558> <5354> +<0559> <5353> +<055a> <5351> +<055b> <5366> +<055f> <53d6> +<0560> <53d4> +<0561> <53d7> +<0562> <5473> +<0563> <5475> +<0564> <5496> +<0565> <5478> +<0566> <5495> +<0567> <5480> +<0568> <547b> +<0569> <5477> +<056a> <5484> +<056b> <5492> +<056c> <5486> +<056d> <547c> +<056e> <5490> +<056f> <5471> +<0570> <5476> +<0571> <548c> +<0572> <549a> +<0573> <5462> +<0574> <5468> +<0575> <548b> +<0576> <547d> +<0577> <548e> +<0578> <56fa> +<0579> <5783> +<057a> <5777> +<057b> <576a> +<057c> <5769> +<057d> <5761> +<057e> <5766> +<057f> <5764> +<0580> <577c> +<0581> <591c> +<0582> <5949> +<0585> <5944> +<0586> <5954> +<0587> <59be> +<0588> <59bb> +<0589> <59d4> +<058a> <59b9> +<058b> <59ae> +<058c> <59d1> +<058d> <59c6> +<058e> <59d0> +<058f> <59cd> +<0590> <59cb> +<0591> <59d3> +endbfchar + +100 beginbfchar +<0592> <59ca> +<0593> <59af> +<0594> <59b3> +<0595> <59d2> +<0596> <59c5> +<0597> <5b5f> +<0598> <5b64> +<0599> <5b63> +<059a> <5b97> +<059b> <5b9a> +<059c> <5b98> +<059d> <5b9c> +<059e> <5b99> +<059f> <5b9b> +<05a0> <5c1a> +<05a1> <5c48> +<05a4> <5cb7> +<05a5> <5ca1> +<05a6> <5cb8> +<05a7> <5ca9> +<05a8> <5cab> +<05a9> <5cb1> +<05aa> <5cb3> +<05ab> <5e18> +<05ac> <5e1a> +<05ad> <5e16> +<05ae> <5e15> +<05af> <5e1b> +<05b0> <5e11> +<05b1> <5e78> +<05b2> <5e9a> +<05b3> <5e97> +<05b4> <5e9c> +<05b7> <5ef6> +<05ba> <5f29> +<05bd> <5f7f> +<05be> <5f7c> +<05bf> <5fdd> +<05c0> <5fe0> +<05c1> <5ffd> +<05c2> <5ff5> +<05c3> <5fff> +<05c4> <600f> +<05c5> <6014> +<05c6> <602f> +<05c7> <6035> +<05c8> <6016> +<05c9> <602a> +<05ca> <6015> +<05cb> <6021> +<05cc> <6027> +<05cd> <6029> +<05ce> <602b> +<05cf> <601b> +<05d0> <6216> +<05d1> <6215> +<05d2> <623f> +<05d3> <623e> +<05d4> <6240> +<05d5> <627f> +<05d6> <62c9> +<05d7> <62cc> +<05d8> <62c4> +<05d9> <62bf> +<05da> <62c2> +<05db> <62b9> +<05dc> <62d2> +<05dd> <62db> +<05de> <62ab> +<05e1> <62cb> +<05e2> <62c8> +<05e3> <62a8> +<05e4> <62bd> +<05e5> <62bc> +<05e6> <62d0> +<05e7> <62d9> +<05e8> <62c7> +<05e9> <62cd> +<05ea> <62b5> +<05eb> <62da> +<05ec> <62b1> +<05ed> <62d8> +<05f0> <62c6> +<05f1> <62ac> +<05f2> <62ce> +<05f3> <653e> +<05f4> <65a7> +<05f5> <65bc> +<05f6> <65fa> +<05f7> <6614> +<05f8> <6613> +<05f9> <660c> +<05fa> <6606> +<05fb> <6602> +<05fc> <660e> +<05fd> <6600> +<05fe> <660f> +<05ff> <6615> +<0600> <660a> +<0601> <6607> +endbfchar + +100 beginbfchar +<0602> <670d> +<0603> <670b> +<0604> <676d> +<0605> <678b> +<0606> <6795> +<0607> <6771> +<0608> <679c> +<0609> <6773> +<060a> <6777> +<060b> <6787> +<060c> <679d> +<060d> <6797> +<0610> <677f> +<0611> <6789> +<0612> <677e> +<0613> <6790> +<0614> <6775> +<0615> <679a> +<0616> <6793> +<0617> <677c> +<0618> <676a> +<0619> <6772> +<061a> <6b23> +<061d> <6b7f> +<061e> <6c13> +<061f> <6c1b> +<0620> <6ce3> +<0621> <6ce8> +<0622> <6cf3> +<0623> <6cb1> +<0624> <6ccc> +<0625> <6ce5> +<0626> <6cb3> +<0629> <6cbc> +<062a> <6ce2> +<062b> <6cab> +<062c> <6cd5> +<062d> <6cd3> +<062e> <6cb8> +<062f> <6cc4> +<0630> <6cb9> +<0631> <6cc1> +<0632> <6cae> +<0633> <6cd7> +<0634> <6cc5> +<0635> <6cf1> +<0636> <6cbf> +<0637> <6cbb> +<0638> <6ce1> +<0639> <6cdb> +<063a> <6cca> +<063b> <6cac> +<063c> <6cef> +<063d> <6cdc> +<063e> <6cd6> +<063f> <6ce0> +<0640> <7095> +<0641> <708e> +<0642> <7092> +<0643> <708a> +<0644> <7099> +<0647> <7238> +<0648> <7248> +<0649> <7267> +<064a> <7269> +<064b> <72c0> +<064c> <72ce> +<064d> <72d9> +<064e> <72d7> +<064f> <72d0> +<0650> <73a9> +<0651> <73a8> +<0652> <739f> +<0653> <73ab> +<0654> <73a5> +<0655> <753d> +<0656> <759d> +<0659> <7684> +<065a> <76c2> +<065b> <76f2> +<065c> <76f4> +<065d> <77e5> +<065e> <77fd> +<065f> <793e> +<0662> <79c9> +<0663> <79c8> +<0664> <7a7a> +<0665> <7a79> +<0666> <7afa> +<0667> <7cfe> +<0668> <7f54> +<0669> <7f8c> +<066a> <7f8b> +<066b> <8005> +<066c> <80ba> +<066d> <80a5> +<066e> <80a2> +<066f> <80b1> +<0670> <80a1> +<0671> <80ab> +endbfchar + +100 beginbfchar +<0672> <80a9> +<0673> <80b4> +<0674> <80aa> +<0675> <80af> +<0676> <81e5> +<0677> <81fe> +<0678> <820d> +<0679> <82b3> +<067a> <829d> +<067b> <8299> +<067c> <82ad> +<067d> <82bd> +<067e> <829f> +<067f> <82b9> +<0680> <82b1> +<0681> <82ac> +<0682> <82a5> +<0683> <82af> +<0684> <82b8> +<0685> <82a3> +<0686> <82b0> +<0687> <82be> +<0688> <82b7> +<0689> <864e> +<068a> <8671> +<068b> <521d> +<068c> <8868> +<068d> <8ecb> +<068e> <8fce> +<068f> <8fd4> +<0690> <8fd1> +<0691> <90b5> +<0692> <90b8> +<0693> <90b1> +<0694> <90b6> +<0695> <91c7> +<0696> <91d1> +<0697> <9577> +<0698> <9580> +<0699> <961c> +<069a> <9640> +<069b> <963f> +<069c> <963b> +<069d> <9644> +<069e> <9642> +<069f> <96b9> +<06a0> <96e8> +<06a1> <9752> +<06a2> <975e> +<06a3> <4e9f> +<06a6> <4fe1> +<06a7> <4fb5> +<06a8> <4faf> +<06a9> <4fbf> +<06aa> <4fe0> +<06ab> <4fd1> +<06ac> <4fcf> +<06ad> <4fdd> +<06ae> <4fc3> +<06af> <4fb6> +<06b0> <4fd8> +<06b1> <4fdf> +<06b2> <4fca> +<06b3> <4fd7> +<06b4> <4fae> +<06b5> <4fd0> +<06b6> <4fc4> +<06b7> <4fc2> +<06b8> <4fda> +<06b9> <4fce> +<06ba> <4fde> +<06bb> <4fb7> +<06bc> <5157> +<06bd> <5192> +<06be> <5191> +<06bf> <51a0> +<06c0> <524e> +<06c1> <5243> +<06c2> <524a> +<06c3> <524d> +<06c4> <524c> +<06c5> <524b> +<06c6> <5247> +<06c7> <52c7> +<06c8> <52c9> +<06c9> <52c3> +<06ca> <52c1> +<06cb> <530d> +<06cc> <5357> +<06cd> <537b> +<06ce> <539a> +<06cf> <53db> +<06d0> <54ac> +<06d1> <54c0> +<06d2> <54a8> +<06d3> <54ce> +<06d4> <54c9> +<06d5> <54b8> +<06d6> <54a6> +<06d7> <54b3> +endbfchar + +100 beginbfchar +<06d8> <54c7> +<06d9> <54c2> +<06da> <54bd> +<06db> <54aa> +<06dc> <54c1> +<06dd> <54c4> +<06de> <54c8> +<06df> <54af> +<06e0> <54ab> +<06e1> <54b1> +<06e2> <54bb> +<06e3> <54a9> +<06e4> <54a7> +<06e5> <54bf> +<06e6> <56ff> +<06e7> <5782> +<06e8> <578b> +<06e9> <57a0> +<06ea> <57a3> +<06eb> <57a2> +<06ec> <57ce> +<06ed> <57ae> +<06ee> <5793> +<06ef> <5955> +<06f0> <5951> +<06f1> <594f> +<06f2> <594e> +<06f3> <5950> +<06f4> <59dc> +<06f5> <59d8> +<06f6> <59ff> +<06f7> <59e3> +<06f8> <59e8> +<06f9> <5a03> +<06fa> <59e5> +<06fb> <59ea> +<06fc> <59da> +<06fd> <59e6> +<06fe> <5a01> +<06ff> <59fb> +<0700> <5b69> +<0701> <5ba3> +<0702> <5ba6> +<0703> <5ba4> +<0704> <5ba2> +<0705> <5ba5> +<0706> <5c01> +<0709> <5c4d> +<070a> <5c4b> +<070b> <5cd9> +<070c> <5cd2> +<070d> <5df7> +<070e> <5e1d> +<070f> <5e25> +<0710> <5e1f> +<0711> <5e7d> +<0712> <5ea0> +<0713> <5ea6> +<0714> <5efa> +<0715> <5f08> +<0716> <5f2d> +<0717> <5f65> +<0718> <5f88> +<0719> <5f85> +<071c> <5f87> +<071d> <5f8c> +<071e> <5f89> +<071f> <6012> +<0720> <601d> +<0721> <6020> +<0722> <6025> +<0723> <600e> +<0724> <6028> +<0725> <604d> +<0726> <6070> +<0727> <6068> +<0728> <6062> +<0729> <6046> +<072a> <6043> +<072b> <606c> +<072c> <606b> +<072d> <606a> +<072e> <6064> +<072f> <6241> +<0730> <62dc> +<0731> <6316> +<0732> <6309> +<0733> <62fc> +<0734> <62ed> +<0735> <6301> +<0736> <62ee> +<0737> <62fd> +<0738> <6307> +<0739> <62f1> +<073a> <62f7> +<073b> <62ef> +<073c> <62ec> +<073d> <62fe> +<073e> <62f4> +<073f> <6311> +endbfchar + +100 beginbfchar +<0740> <6302> +<0741> <653f> +<0742> <6545> +<0743> <65ab> +<0744> <65bd> +<0745> <65e2> +<0746> <6625> +<0747> <662d> +<0748> <6620> +<0749> <6627> +<074a> <662f> +<074b> <661f> +<074c> <6628> +<074d> <6631> +<074e> <6624> +<074f> <66f7> +<0750> <67ff> +<0751> <67d3> +<0752> <67f1> +<0753> <67d4> +<0754> <67d0> +<0755> <67ec> +<0756> <67b6> +<0757> <67af> +<0758> <67f5> +<0759> <67e9> +<075a> <67ef> +<075b> <67c4> +<075c> <67d1> +<075d> <67b4> +<075e> <67da> +<075f> <67e5> +<0760> <67b8> +<0761> <67cf> +<0762> <67de> +<0763> <67f3> +<0764> <67b0> +<0765> <67d9> +<0766> <67e2> +<0767> <67dd> +<0768> <67d2> +<0769> <6b6a> +<076a> <6b83> +<076b> <6b86> +<076c> <6bb5> +<076d> <6bd2> +<076e> <6bd7> +<076f> <6c1f> +<0770> <6cc9> +<0771> <6d0b> +<0772> <6d32> +<0773> <6d2a> +<0774> <6d41> +<0775> <6d25> +<0776> <6d0c> +<0777> <6d31> +<0778> <6d1e> +<0779> <6d17> +<077a> <6d3b> +<077d> <6d36> +<077e> <6d1b> +<077f> <6cf5> +<0780> <6d39> +<0781> <6d27> +<0782> <6d38> +<0783> <6d29> +<0784> <6d2e> +<0785> <6d35> +<0786> <6d0e> +<0787> <6d2b> +<0788> <70ab> +<0789> <70ba> +<078a> <70b3> +<078b> <70ac> +<078c> <70af> +<078d> <70ad> +<078e> <70b8> +<078f> <70ae> +<0790> <70a4> +<0791> <7230> +<0792> <7272> +<0793> <726f> +<0794> <7274> +<0795> <72e9> +<0798> <73b7> +<0799> <73ca> +<079a> <73bb> +<079b> <73b2> +<079c> <73cd> +<079d> <73c0> +<079e> <73b3> +<079f> <751a> +<07a0> <752d> +<07a1> <754f> +<07a2> <754c> +<07a3> <754e> +<07a4> <754b> +<07a5> <75ab> +<07aa> <7678> +<07ae> <76c8> +endbfchar + +100 beginbfchar +<07af> <76c6> +<07b0> <76c3> +<07b1> <76c5> +<07b2> <7701> +<07b3> <76f9> +<07b4> <76f8> +<07b5> <7709> +<07b6> <770b> +<07b7> <76fe> +<07b8> <76fc> +<07b9> <7707> +<07ba> <77dc> +<07bb> <7802> +<07bc> <7814> +<07bf> <7946> +<07c0> <7949> +<07c1> <7948> +<07c2> <7947> +<07c7> <79cb> +<07c8> <7a7f> +<07c9> <7a81> +<07ca> <7aff> +<07cb> <7afd> +<07cc> <7c7d> +<07cd> <7d02> +<07ce> <7d05> +<07cf> <7d00> +<07d0> <7d09> +<07d1> <7d07> +<07d2> <7d04> +<07d3> <7d06> +<07d4> <7f38> +<07d5> <7f8e> +<07d6> <7fbf> +<07d7> <8010> +<07d8> <800d> +<07d9> <8011> +<07da> <8036> +<07db> <80d6> +<07dc> <80e5> +<07dd> <80da> +<07e0> <80cc> +<07e1> <80e1> +<07e2> <80db> +<07e3> <80ce> +<07e4> <80de> +<07e5> <80e4> +<07e6> <80dd> +<07e7> <81f4> +<07e8> <8222> +<07e9> <82e7> +<07ea> <8303> +<07eb> <8305> +<07ec> <82e3> +<07ed> <82db> +<07ee> <82e6> +<07ef> <8304> +<07f0> <82e5> +<07f1> <8302> +<07f2> <8309> +<07f3> <82d2> +<07f4> <82d7> +<07f5> <82f1> +<07f6> <8301> +<07f7> <82dc> +<07f8> <82d4> +<07f9> <82d1> +<07fa> <82de> +<07fb> <82d3> +<07fc> <82df> +<07fd> <82ef> +<07fe> <8306> +<07ff> <8650> +<0800> <8679> +<0801> <867b> +<0802> <867a> +<0803> <884d> +<0804> <886b> +<0805> <8981> +<0806> <89d4> +<0807> <8a08> +<080a> <8c9e> +<080b> <8ca0> +<080c> <8d74> +<080d> <8d73> +<080e> <8db4> +<080f> <8ecd> +<0810> <8ecc> +<0811> <8ff0> +<0812> <8fe6> +<0813> <8fe2> +<0814> <8fea> +<0815> <8fe5> +<0816> <8fed> +<0817> <8feb> +<0818> <8fe4> +<0819> <8fe8> +<081a> <90ca> +<081b> <90ce> +<081c> <90c1> +endbfchar + +100 beginbfchar +<081d> <90c3> +<081e> <914b> +<081f> <914a> +<0820> <91cd> +<0821> <9582> +<0822> <9650> +<0826> <9762> +<0827> <9769> +<0828> <97cb> +<0829> <97ed> +<082a> <97f3> +<082b> <9801> +<082c> <98a8> +<082d> <98db> +<082e> <98df> +<082f> <9996> +<0830> <9999> +<0831> <4e58> +<0832> <4eb3> +<0835> <5023> +<0836> <4fef> +<0837> <5026> +<0838> <5025> +<0839> <4ff8> +<083a> <5029> +<083b> <5016> +<083c> <5006> +<083d> <503c> +<083e> <501f> +<083f> <501a> +<0840> <5012> +<0841> <5011> +<0842> <4ffa> +<0843> <5000> +<0844> <5014> +<0845> <5028> +<0846> <4ff1> +<0847> <5021> +<0848> <500b> +<0849> <5019> +<084a> <5018> +<084b> <4ff3> +<084c> <4fee> +<084d> <502d> +<084e> <502a> +<084f> <4ffe> +<0850> <502b> +<0851> <5009> +<0852> <517c> +<0855> <51a2> +<0856> <51cd> +<0857> <51cc> +<0858> <51c6> +<0859> <51cb> +<085a> <5256> +<085b> <525c> +<085c> <5254> +<085d> <525b> +<085e> <525d> +<085f> <532a> +<0860> <537f> +<0861> <539f> +<0862> <539d> +<0863> <53df> +<0864> <54e8> +<0865> <5510> +<0866> <5501> +<0867> <5537> +<0868> <54fc> +<0869> <54e5> +<086a> <54f2> +<086b> <5506> +<086c> <54fa> +<086d> <5514> +<086e> <54e9> +<086f> <54ed> +<0870> <54e1> +<0871> <5509> +<0872> <54ee> +<0873> <54ea> +<0874> <54e6> +<0875> <5527> +<0876> <5507> +<0877> <54fd> +<0878> <550f> +<087b> <57c2> +<087c> <57d4> +<087d> <57cb> +<087e> <57c3> +<087f> <5809> +<0880> <590f> +<0883> <595a> +<0884> <5a11> +<0885> <5a18> +<0886> <5a1c> +<0887> <5a1f> +<0888> <5a1b> +<0889> <5a13> +<088a> <59ec> +<088b> <5a20> +endbfchar + +100 beginbfchar +<088c> <5a23> +<088d> <5a29> +<088e> <5a25> +<088f> <5a0c> +<0890> <5a09> +<0891> <5b6b> +<0892> <5c58> +<0893> <5bb0> +<0894> <5bb3> +<0895> <5bb6> +<0896> <5bb4> +<0897> <5bae> +<0898> <5bb5> +<0899> <5bb9> +<089a> <5bb8> +<089b> <5c04> +<089c> <5c51> +<089d> <5c55> +<089e> <5c50> +<089f> <5ced> +<08a0> <5cfd> +<08a1> <5cfb> +<08a2> <5cea> +<08a3> <5ce8> +<08a4> <5cf0> +<08a5> <5cf6> +<08a6> <5d01> +<08a7> <5cf4> +<08a8> <5dee> +<08a9> <5e2d> +<08aa> <5e2b> +<08ab> <5eab> +<08ac> <5ead> +<08ad> <5ea7> +<08ae> <5f31> +<08af> <5f92> +<08b0> <5f91> +<08b1> <5f90> +<08b2> <6059> +<08b3> <6063> +<08b4> <6065> +<08b5> <6050> +<08b6> <6055> +<08b7> <606d> +<08b8> <6069> +<08b9> <606f> +<08ba> <6084> +<08bb> <609f> +<08bc> <609a> +<08bd> <608d> +<08be> <6094> +<08bf> <608c> +<08c0> <6085> +<08c1> <6096> +<08c2> <6247> +<08c3> <62f3> +<08c4> <6308> +<08c5> <62ff> +<08c6> <634e> +<08c7> <633e> +<08c8> <632f> +<08c9> <6355> +<08ca> <6342> +<08cb> <6346> +<08cc> <634f> +<08cd> <6349> +<08ce> <633a> +<08cf> <6350> +<08d0> <633d> +<08d3> <6328> +<08d4> <634d> +<08d5> <634c> +<08d8> <6599> +<08d9> <65c1> +<08da> <65c5> +<08db> <6642> +<08dc> <6649> +<08dd> <664f> +<08de> <6643> +<08df> <6652> +<08e0> <664c> +<08e1> <6645> +<08e2> <6641> +<08e3> <66f8> +<08e6> <6717> +<08e7> <6821> +<08e8> <6838> +<08e9> <6848> +<08ea> <6846> +<08eb> <6853> +<08ec> <6839> +<08ed> <6842> +<08ee> <6854> +<08ef> <6829> +<08f0> <68b3> +<08f1> <6817> +<08f2> <684c> +<08f3> <6851> +<08f4> <683d> +<08f5> <67f4> +endbfchar + +100 beginbfchar +<08f6> <6850> +<08f7> <6840> +<08f8> <683c> +<08f9> <6843> +<08fa> <682a> +<08fb> <6845> +<08fc> <6813> +<08fd> <6818> +<08fe> <6841> +<08ff> <6b8a> +<0900> <6b89> +<0901> <6bb7> +<0902> <6c23> +<0905> <6c26> +<0906> <6c24> +<0907> <6cf0> +<0908> <6d6a> +<0909> <6d95> +<090a> <6d88> +<090b> <6d87> +<090c> <6d66> +<090d> <6d78> +<090e> <6d77> +<090f> <6d59> +<0910> <6d93> +<0911> <6d6c> +<0912> <6d89> +<0913> <6d6e> +<0914> <6d5a> +<0915> <6d74> +<0916> <6d69> +<0917> <6d8c> +<0918> <6d8a> +<0919> <6d79> +<091a> <6d85> +<091b> <6d65> +<091c> <6d94> +<091d> <70ca> +<091e> <70d8> +<091f> <70e4> +<0920> <70d9> +<0921> <70c8> +<0922> <70cf> +<0923> <7239> +<0924> <7279> +<0925> <72fc> +<0926> <72f9> +<0927> <72fd> +<0928> <72f8> +<0929> <72f7> +<092a> <7386> +<092b> <73ed> +<092c> <7409> +<092d> <73ee> +<092e> <73e0> +<092f> <73ea> +<0930> <73de> +<0931> <7554> +<0932> <755d> +<0933> <755c> +<0934> <755a> +<0935> <7559> +<0936> <75be> +<0937> <75c5> +<0938> <75c7> +<093b> <75bd> +<093c> <75bc> +<093d> <75b9> +<093e> <75c2> +<093f> <75b8> +<0940> <768b> +<0941> <76b0> +<0942> <76ca> +<0945> <7729> +<0948> <7728> +<0949> <77e9> +<094a> <7830> +<094b> <7827> +<094c> <7838> +<094d> <781d> +<094e> <7834> +<094f> <7837> +<0950> <7825> +<0951> <782d> +<0952> <7820> +<0953> <781f> +<0954> <7832> +<0955> <7955> +<0956> <7950> +<0957> <7960> +<0958> <795f> +<0959> <7956> +<095a> <795e> +<095b> <795d> +<095c> <7957> +<095d> <795a> +<095e> <79e4> +<095f> <79e3> +<0960> <79e7> +<0961> <79df> +endbfchar + +100 beginbfchar +<0962> <79e6> +<0963> <79e9> +<0964> <79d8> +<0965> <7a84> +<0966> <7a88> +<0967> <7ad9> +<0968> <7b06> +<0969> <7b11> +<096a> <7c89> +<096b> <7d21> +<096c> <7d17> +<096d> <7d0b> +<096e> <7d0a> +<096f> <7d20> +<0970> <7d22> +<0971> <7d14> +<0972> <7d10> +<0973> <7d15> +<0974> <7d1a> +<0975> <7d1c> +<0976> <7d0d> +<0977> <7d19> +<0978> <7d1b> +<0979> <7f3a> +<097a> <7f5f> +<097b> <7f94> +<097c> <7fc5> +<097d> <7fc1> +<097e> <8006> +<097f> <8004> +<0980> <8018> +<0981> <8015> +<0982> <8019> +<0983> <8017> +<0984> <803d> +<0985> <803f> +<0986> <80f1> +<0987> <8102> +<0988> <80f0> +<0989> <8105> +<098a> <80ed> +<098b> <80f4> +<098c> <8106> +<098d> <80f8> +<098e> <80f3> +<098f> <8108> +<0990> <80fd> +<0991> <810a> +<0992> <80fc> +<0993> <80ef> +<0994> <81ed> +<0995> <81ec> +<0996> <8200> +<0997> <8210> +<099a> <8228> +<099b> <822c> +<099c> <82bb> +<099d> <832b> +<099e> <8352> +<099f> <8354> +<09a0> <834a> +<09a1> <8338> +<09a2> <8350> +<09a3> <8349> +<09a4> <8335> +<09a5> <8334> +<09a6> <834f> +<09a7> <8332> +<09a8> <8339> +<09a9> <8336> +<09aa> <8317> +<09ab> <8340> +<09ac> <8331> +<09ad> <8328> +<09ae> <8343> +<09af> <8654> +<09b0> <868a> +<09b1> <86aa> +<09b2> <8693> +<09b3> <86a4> +<09b4> <86a9> +<09b5> <868c> +<09b6> <86a3> +<09b7> <869c> +<09b8> <8870> +<09b9> <8877> +<09bc> <887d> +<09bd> <8879> +<09be> <8a18> +<09bf> <8a10> +<09c0> <8a0e> +<09c1> <8a0c> +<09c2> <8a15> +<09c3> <8a0a> +<09c4> <8a17> +<09c5> <8a13> +<09c6> <8a16> +<09c7> <8a0f> +<09c8> <8a11> +<09c9> <8c48> +endbfchar + +100 beginbfchar +<09ca> <8c7a> +<09cb> <8c79> +<09ce> <8d77> +<09cf> <8eac> +<09d0> <8ed2> +<09d1> <8ed4> +<09d2> <8ecf> +<09d3> <8fb1> +<09d4> <9001> +<09d5> <9006> +<09d6> <8ff7> +<09d7> <9000> +<09d8> <8ffa> +<09d9> <8ff4> +<09da> <9003> +<09db> <8ffd> +<09dc> <9005> +<09dd> <8ff8> +<09de> <9095> +<09df> <90e1> +<09e0> <90dd> +<09e1> <90e2> +<09e2> <9152> +<09e3> <914d> +<09e4> <914c> +<09e5> <91d8> +<09e6> <91dd> +<09e7> <91d7> +<09e8> <91dc> +<09e9> <91d9> +<09ea> <9583> +<09ed> <9661> +<09ee> <965b> +<09ef> <965d> +<09f0> <9664> +<09f1> <9658> +<09f2> <965e> +<09f3> <96bb> +<09f4> <98e2> +<09f5> <99ac> +<09f6> <9aa8> +<09f7> <9ad8> +<09f8> <9b25> +<09f9> <9b32> +<09fa> <9b3c> +<09fb> <4e7e> +<09fc> <507a> +<09fd> <507d> +<09fe> <505c> +<09ff> <5047> +<0a00> <5043> +<0a01> <504c> +<0a02> <505a> +<0a03> <5049> +<0a04> <5065> +<0a05> <5076> +<0a06> <504e> +<0a07> <5055> +<0a08> <5075> +<0a09> <5074> +<0a0a> <5077> +<0a0b> <504f> +<0a0c> <500f> +<0a0d> <506f> +<0a0e> <506d> +<0a0f> <515c> +<0a10> <5195> +<0a11> <51f0> +<0a12> <526a> +<0a13> <526f> +<0a14> <52d2> +<0a15> <52d9> +<0a16> <52d8> +<0a17> <52d5> +<0a18> <5310> +<0a19> <530f> +<0a1a> <5319> +<0a1d> <533e> +<0a1e> <53c3> +<0a1f> <66fc> +<0a20> <5546> +<0a21> <556a> +<0a22> <5566> +<0a23> <5544> +<0a24> <555e> +<0a25> <5561> +<0a26> <5543> +<0a27> <554a> +<0a28> <5531> +<0a29> <5556> +<0a2a> <554f> +<0a2b> <5555> +<0a2c> <552f> +<0a2d> <5564> +<0a2e> <5538> +<0a2f> <552e> +<0a30> <555c> +<0a31> <552c> +<0a32> <5563> +<0a33> <5533> +endbfchar + +100 beginbfchar +<0a34> <5541> +<0a35> <5557> +<0a36> <5708> +<0a37> <570b> +<0a38> <5709> +<0a39> <57df> +<0a3a> <5805> +<0a3b> <580a> +<0a3c> <5806> +<0a3d> <57e0> +<0a3e> <57e4> +<0a3f> <57fa> +<0a40> <5802> +<0a41> <5835> +<0a42> <57f7> +<0a43> <57f9> +<0a44> <5920> +<0a45> <5962> +<0a46> <5a36> +<0a47> <5a41> +<0a48> <5a49> +<0a49> <5a66> +<0a4a> <5a6a> +<0a4b> <5a40> +<0a4c> <5a3c> +<0a4d> <5a62> +<0a4e> <5a5a> +<0a4f> <5a46> +<0a50> <5a4a> +<0a51> <5b70> +<0a52> <5bc7> +<0a53> <5bc5> +<0a54> <5bc4> +<0a55> <5bc2> +<0a56> <5bbf> +<0a57> <5bc6> +<0a58> <5c09> +<0a59> <5c08> +<0a5a> <5c07> +<0a5b> <5c60> +<0a5e> <5d07> +<0a5f> <5d06> +<0a60> <5d0e> +<0a61> <5d1b> +<0a62> <5d16> +<0a63> <5d22> +<0a64> <5d11> +<0a65> <5d29> +<0a66> <5d14> +<0a67> <5d19> +<0a68> <5d24> +<0a69> <5d27> +<0a6a> <5d17> +<0a6b> <5de2> +<0a6c> <5e38> +<0a6d> <5e36> +<0a6e> <5e33> +<0a6f> <5e37> +<0a72> <5eb6> +<0a73> <5eb5> +<0a74> <5ebe> +<0a75> <5f35> +<0a76> <5f37> +<0a77> <5f57> +<0a78> <5f6c> +<0a79> <5f69> +<0a7a> <5f6b> +<0a7b> <5f97> +<0a7c> <5f99> +<0a7d> <5f9e> +<0a7e> <5f98> +<0a7f> <5fa1> +<0a80> <5fa0> +<0a81> <5f9c> +<0a82> <607f> +<0a83> <60a3> +<0a84> <6089> +<0a85> <60a0> +<0a86> <60a8> +<0a87> <60cb> +<0a88> <60b4> +<0a89> <60e6> +<0a8a> <60bd> +<0a8b> <60c5> +<0a8c> <60bb> +<0a8d> <60b5> +<0a8e> <60dc> +<0a8f> <60bc> +<0a90> <60d8> +<0a91> <60d5> +<0a92> <60c6> +<0a93> <60df> +<0a94> <60b8> +<0a95> <60da> +<0a96> <60c7> +<0a99> <6248> +<0a9a> <63a0> +<0a9b> <63a7> +<0a9c> <6372> +<0a9d> <6396> +endbfchar + +100 beginbfchar +<0a9e> <63a2> +<0a9f> <63a5> +<0aa0> <6377> +<0aa1> <6367> +<0aa2> <6398> +<0aa3> <63aa> +<0aa4> <6371> +<0aa5> <63a9> +<0aa6> <6389> +<0aa7> <6383> +<0aa8> <639b> +<0aa9> <636b> +<0aaa> <63a8> +<0aab> <6384> +<0aac> <6388> +<0aad> <6399> +<0aae> <63a1> +<0aaf> <63ac> +<0ab0> <6392> +<0ab1> <638f> +<0ab2> <6380> +<0ab3> <637b> +<0ab4> <6369> +<0ab5> <6368> +<0ab6> <637a> +<0ab7> <655d> +<0ab8> <6556> +<0ab9> <6551> +<0aba> <6559> +<0abb> <6557> +<0abc> <555f> +<0abd> <654f> +<0abe> <6558> +<0abf> <6555> +<0ac0> <6554> +<0ac1> <659c> +<0ac2> <659b> +<0ac3> <65ac> +<0ac4> <65cf> +<0ac7> <65ce> +<0ac8> <665d> +<0ac9> <665a> +<0aca> <6664> +<0acb> <6668> +<0acc> <6666> +<0acd> <665e> +<0ace> <66f9> +<0acf> <52d7> +<0ad0> <671b> +<0ad1> <6881> +<0ad2> <68af> +<0ad3> <68a2> +<0ad4> <6893> +<0ad5> <68b5> +<0ad6> <687f> +<0ad7> <6876> +<0ad8> <68b1> +<0ad9> <68a7> +<0ada> <6897> +<0adb> <68b0> +<0adc> <6883> +<0add> <68c4> +<0ade> <68ad> +<0adf> <6886> +<0ae0> <6885> +<0ae1> <6894> +<0ae2> <689d> +<0ae3> <68a8> +<0ae4> <689f> +<0ae5> <68a1> +<0ae6> <6882> +<0ae7> <6b32> +<0ae8> <6bba> +<0aeb> <6c2b> +<0aec> <6d8e> +<0aed> <6dbc> +<0aee> <6df3> +<0aef> <6dd9> +<0af0> <6db2> +<0af1> <6de1> +<0af2> <6dcc> +<0af3> <6de4> +<0af4> <6dfb> +<0af5> <6dfa> +<0af6> <6e05> +<0af7> <6dc7> +<0af8> <6dcb> +<0af9> <6daf> +<0afa> <6dd1> +<0afb> <6dae> +<0afc> <6dde> +<0afd> <6df9> +<0afe> <6db8> +<0aff> <6df7> +<0b00> <6df5> +<0b01> <6dc5> +<0b02> <6dd2> +<0b03> <6e1a> +<0b04> <6db5> +<0b05> <6dda> +endbfchar + +100 beginbfchar +<0b06> <6deb> +<0b07> <6dd8> +<0b08> <6dea> +<0b09> <6df1> +<0b0a> <6dee> +<0b0b> <6de8> +<0b0c> <6dc6> +<0b0d> <6dc4> +<0b0e> <6daa> +<0b0f> <6dec> +<0b10> <6dbf> +<0b11> <6de6> +<0b12> <70f9> +<0b15> <70fd> +<0b16> <70ef> +<0b17> <723d> +<0b18> <727d> +<0b19> <7281> +<0b1a> <731c> +<0b1b> <731b> +<0b1c> <7316> +<0b1d> <7313> +<0b1e> <7319> +<0b1f> <7387> +<0b20> <7405> +<0b21> <740a> +<0b22> <7403> +<0b23> <7406> +<0b24> <73fe> +<0b25> <740d> +<0b26> <74e0> +<0b29> <751c> +<0b2a> <7522> +<0b2d> <7562> +<0b2e> <7570> +<0b2f> <758f> +<0b32> <75b5> +<0b33> <75ca> +<0b34> <75cd> +<0b35> <768e> +<0b36> <76d4> +<0b37> <76d2> +<0b38> <76db> +<0b39> <7737> +<0b3a> <773e> +<0b3b> <773c> +<0b3c> <7736> +<0b3d> <7738> +<0b3e> <773a> +<0b3f> <786b> +<0b40> <7843> +<0b41> <784e> +<0b42> <7965> +<0b43> <7968> +<0b44> <796d> +<0b45> <79fb> +<0b46> <7a92> +<0b47> <7a95> +<0b48> <7b20> +<0b49> <7b28> +<0b4a> <7b1b> +<0b4b> <7b2c> +<0b4c> <7b26> +<0b4d> <7b19> +<0b4e> <7b1e> +<0b4f> <7b2e> +<0b50> <7c92> +<0b51> <7c97> +<0b52> <7c95> +<0b53> <7d46> +<0b54> <7d43> +<0b55> <7d71> +<0b56> <7d2e> +<0b57> <7d39> +<0b58> <7d3c> +<0b59> <7d40> +<0b5a> <7d30> +<0b5b> <7d33> +<0b5c> <7d44> +<0b5d> <7d2f> +<0b5e> <7d42> +<0b5f> <7d32> +<0b60> <7d31> +<0b61> <7f3d> +<0b62> <7f9e> +<0b63> <7f9a> +<0b64> <7fcc> +<0b65> <7fce> +<0b66> <7fd2> +<0b67> <801c> +<0b68> <804a> +<0b69> <8046> +<0b6a> <812f> +<0b6b> <8116> +<0b6c> <8123> +<0b6d> <812b> +<0b6e> <8129> +<0b6f> <8130> +<0b70> <8124> +<0b71> <8202> +endbfchar + +100 beginbfchar +<0b72> <8235> +<0b73> <8237> +<0b74> <8236> +<0b75> <8239> +<0b76> <838e> +<0b77> <839e> +<0b78> <8398> +<0b79> <8378> +<0b7a> <83a2> +<0b7b> <8396> +<0b7c> <83bd> +<0b7d> <83ab> +<0b7e> <8392> +<0b7f> <838a> +<0b80> <8393> +<0b81> <8389> +<0b82> <83a0> +<0b83> <8377> +<0b86> <8386> +<0b87> <83a7> +<0b88> <8655> +<0b89> <5f6a> +<0b8a> <86c7> +<0b8b> <86c0> +<0b8c> <86b6> +<0b8d> <86c4> +<0b8e> <86b5> +<0b8f> <86c6> +<0b90> <86cb> +<0b91> <86b1> +<0b92> <86af> +<0b93> <86c9> +<0b94> <8853> +<0b95> <889e> +<0b96> <8888> +<0b97> <88ab> +<0b98> <8892> +<0b99> <8896> +<0b9a> <888d> +<0b9b> <888b> +<0b9c> <8993> +<0b9d> <898f> +<0b9e> <8a2a> +<0b9f> <8a1d> +<0ba0> <8a23> +<0ba1> <8a25> +<0ba2> <8a31> +<0ba3> <8a2d> +<0ba4> <8a1f> +<0ba5> <8a1b> +<0ba6> <8a22> +<0ba7> <8c49> +<0ba8> <8c5a> +<0ba9> <8ca9> +<0baa> <8cac> +<0bab> <8cab> +<0bac> <8ca8> +<0bad> <8caa> +<0bae> <8ca7> +<0baf> <8d67> +<0bb0> <8d66> +<0bb1> <8dbe> +<0bb2> <8dba> +<0bb3> <8edb> +<0bb4> <8edf> +<0bb5> <9019> +<0bb6> <900d> +<0bb7> <901a> +<0bb8> <9017> +<0bb9> <9023> +<0bba> <901f> +<0bbb> <901d> +<0bbc> <9010> +<0bbd> <9015> +<0bbe> <901e> +<0bbf> <9020> +<0bc0> <900f> +<0bc1> <9022> +<0bc2> <9016> +<0bc3> <901b> +<0bc4> <9014> +<0bc5> <90e8> +<0bc6> <90ed> +<0bc7> <90fd> +<0bc8> <9157> +<0bc9> <91ce> +<0bca> <91f5> +<0bcb> <91e6> +<0bcc> <91e3> +<0bcd> <91e7> +<0bce> <91ed> +<0bcf> <91e9> +<0bd0> <9589> +<0bd1> <966a> +<0bd2> <9675> +<0bd3> <9673> +<0bd4> <9678> +<0bd5> <9670> +<0bd6> <9674> +<0bd9> <966c> +endbfchar + +100 beginbfchar +<0bda> <96c0> +<0bdb> <96ea> +<0bdc> <96e9> +<0bdd> <7ae0> +<0bde> <7adf> +<0be1> <9b5a> +<0be2> <9ce5> +<0be3> <9e75> +<0be4> <9e7f> +<0be5> <9ea5> +<0be6> <9ebb> +<0be7> <50a2> +<0be8> <508d> +<0be9> <5085> +<0bea> <5099> +<0beb> <5091> +<0bec> <5080> +<0bed> <5096> +<0bee> <5098> +<0bef> <509a> +<0bf0> <6700> +<0bf1> <51f1> +<0bf2> <5272> +<0bf5> <5269> +<0bf6> <52de> +<0bf7> <52dd> +<0bf8> <52db> +<0bf9> <535a> +<0bfa> <53a5> +<0bfb> <557b> +<0bfc> <5580> +<0bfd> <55a7> +<0bfe> <557c> +<0bff> <558a> +<0c00> <559d> +<0c01> <5598> +<0c02> <5582> +<0c03> <559c> +<0c04> <55aa> +<0c05> <5594> +<0c06> <5587> +<0c07> <558b> +<0c08> <5583> +<0c09> <55b3> +<0c0a> <55ae> +<0c0b> <559f> +<0c0c> <553e> +<0c0d> <55b2> +<0c0e> <559a> +<0c0f> <55bb> +<0c10> <55ac> +<0c11> <55b1> +<0c12> <557e> +<0c13> <5589> +<0c14> <55ab> +<0c15> <5599> +<0c16> <570d> +<0c17> <582f> +<0c18> <582a> +<0c19> <5834> +<0c1a> <5824> +<0c1d> <5821> +<0c1e> <581d> +<0c1f> <5820> +<0c22> <5960> +<0c23> <5a77> +<0c24> <5a9a> +<0c25> <5a7f> +<0c26> <5a92> +<0c27> <5a9b> +<0c28> <5aa7> +<0c29> <5b73> +<0c2a> <5b71> +<0c2b> <5bd2> +<0c2c> <5bcc> +<0c2d> <5bd3> +<0c2e> <5bd0> +<0c31> <5c31> +<0c32> <5d4c> +<0c33> <5d50> +<0c34> <5d34> +<0c35> <5d47> +<0c36> <5dfd> +<0c37> <5e45> +<0c38> <5e3d> +<0c39> <5e40> +<0c3a> <5e43> +<0c3b> <5e7e> +<0c3c> <5eca> +<0c3f> <5ec4> +<0c40> <5f3c> +<0c41> <5f6d> +<0c44> <5fa8> +<0c45> <60d1> +<0c46> <60e1> +<0c47> <60b2> +<0c48> <60b6> +<0c49> <60e0> +<0c4a> <611c> +<0c4b> <6123> +endbfchar + +100 beginbfchar +<0c4c> <60fa> +<0c4d> <6115> +<0c4e> <60f0> +<0c4f> <60fb> +<0c50> <60f4> +<0c51> <6168> +<0c52> <60f1> +<0c53> <610e> +<0c54> <60f6> +<0c55> <6109> +<0c56> <6100> +<0c57> <6112> +<0c58> <621f> +<0c59> <6249> +<0c5a> <63a3> +<0c5b> <638c> +<0c5c> <63cf> +<0c5d> <63c0> +<0c5e> <63e9> +<0c5f> <63c9> +<0c60> <63c6> +<0c61> <63cd> +<0c62> <63d2> +<0c63> <63e3> +<0c64> <63d0> +<0c65> <63e1> +<0c66> <63d6> +<0c69> <6376> +<0c6a> <63f4> +<0c6b> <63ea> +<0c6c> <63db> +<0c6d> <6452> +<0c6e> <63da> +<0c6f> <63f9> +<0c70> <655e> +<0c71> <6566> +<0c74> <6591> +<0c75> <6590> +<0c76> <65af> +<0c77> <666e> +<0c78> <6670> +<0c79> <6674> +<0c7a> <6676> +<0c7b> <666f> +<0c7c> <6691> +<0c7d> <667a> +<0c7e> <667e> +<0c7f> <6677> +<0c82> <671f> +<0c83> <671d> +<0c84> <68fa> +<0c85> <68d5> +<0c86> <68e0> +<0c87> <68d8> +<0c88> <68d7> +<0c89> <6905> +<0c8a> <68df> +<0c8b> <68f5> +<0c8c> <68ee> +<0c8d> <68e7> +<0c8e> <68f9> +<0c8f> <68d2> +<0c90> <68f2> +<0c91> <68e3> +<0c92> <68cb> +<0c93> <68cd> +<0c94> <690d> +<0c95> <6912> +<0c96> <690e> +<0c97> <68c9> +<0c98> <68da> +<0c99> <696e> +<0c9a> <68fb> +<0c9b> <6b3e> +<0c9c> <6b3a> +<0c9d> <6b3d> +<0c9e> <6b98> +<0c9f> <6b96> +<0ca0> <6bbc> +<0ca1> <6bef> +<0ca4> <6c2c> +<0ca5> <6e2f> +<0ca6> <6e38> +<0ca7> <6e54> +<0ca8> <6e21> +<0ca9> <6e32> +<0caa> <6e67> +<0cab> <6e4a> +<0cac> <6e20> +<0cad> <6e25> +<0cae> <6e23> +<0caf> <6e1b> +<0cb0> <6e5b> +<0cb1> <6e58> +<0cb2> <6e24> +<0cb3> <6e56> +<0cb4> <6e6e> +<0cb5> <6e2d> +<0cb6> <6e26> +<0cb7> <6e6f> +endbfchar + +100 beginbfchar +<0cb8> <6e34> +<0cb9> <6e4d> +<0cba> <6e3a> +<0cbb> <6e2c> +<0cbc> <6e43> +<0cbd> <6e1d> +<0cbe> <6e3e> +<0cbf> <6ecb> +<0cc0> <6e89> +<0cc1> <6e19> +<0cc2> <6e4e> +<0cc3> <6e63> +<0cc4> <6e44> +<0cc5> <6e72> +<0cc6> <6e69> +<0cc7> <6e5f> +<0cca> <7126> +<0ccb> <7130> +<0ccc> <7121> +<0ccd> <7136> +<0cce> <716e> +<0ccf> <711c> +<0cd0> <724c> +<0cd1> <7284> +<0cd2> <7280> +<0cd3> <7336> +<0cd4> <7325> +<0cd5> <7334> +<0cd6> <7329> +<0cd7> <743a> +<0cd8> <742a> +<0cd9> <7433> +<0cda> <7422> +<0cdb> <7425> +<0cde> <7434> +<0cdf> <742f> +<0ce0> <741b> +<0ce1> <7426> +<0ce2> <7428> +<0ce5> <756b> +<0ce6> <756a> +<0ce7> <75e2> +<0ce8> <75db> +<0ce9> <75e3> +<0cea> <75d9> +<0ceb> <75d8> +<0cec> <75de> +<0ced> <75e0> +<0cf0> <7696> +<0cf1> <7693> +<0cf2> <76b4> +<0cf3> <76dc> +<0cf4> <774f> +<0cf5> <77ed> +<0cf6> <785d> +<0cf7> <786c> +<0cf8> <786f> +<0cf9> <7a0d> +<0cfa> <7a08> +<0cfb> <7a0b> +<0cfc> <7a05> +<0cfd> <7a00> +<0cfe> <7a98> +<0cff> <7a97> +<0d00> <7a96> +<0d01> <7ae5> +<0d02> <7ae3> +<0d03> <7b49> +<0d04> <7b56> +<0d05> <7b46> +<0d06> <7b50> +<0d07> <7b52> +<0d08> <7b54> +<0d09> <7b4d> +<0d0a> <7b4b> +<0d0b> <7b4f> +<0d0c> <7b51> +<0d0d> <7c9f> +<0d0e> <7ca5> +<0d0f> <7d5e> +<0d10> <7d50> +<0d11> <7d68> +<0d12> <7d55> +<0d13> <7d2b> +<0d14> <7d6e> +<0d15> <7d72> +<0d16> <7d61> +<0d17> <7d66> +<0d18> <7d62> +<0d19> <7d70> +<0d1a> <7d73> +<0d1b> <5584> +<0d1e> <800b> +<0d1f> <8052> +<0d20> <8085> +<0d21> <8155> +<0d22> <8154> +<0d23> <814b> +<0d24> <8151> +<0d25> <814e> +endbfchar + +100 beginbfchar +<0d26> <8139> +<0d27> <8146> +<0d28> <813e> +<0d29> <814c> +<0d2a> <8153> +<0d2b> <8174> +<0d2c> <8212> +<0d2d> <821c> +<0d2e> <83e9> +<0d2f> <8403> +<0d30> <83f8> +<0d31> <840d> +<0d32> <83e0> +<0d33> <83c5> +<0d34> <840b> +<0d35> <83c1> +<0d36> <83ef> +<0d37> <83f1> +<0d38> <83f4> +<0d39> <8457> +<0d3a> <840a> +<0d3b> <83f0> +<0d3c> <840c> +<0d3d> <83cc> +<0d3e> <83fd> +<0d3f> <83f2> +<0d40> <83ca> +<0d41> <8438> +<0d42> <840e> +<0d43> <8404> +<0d44> <83dc> +<0d45> <8407> +<0d46> <83d4> +<0d47> <83df> +<0d48> <865b> +<0d49> <86df> +<0d4a> <86d9> +<0d4b> <86ed> +<0d4c> <86d4> +<0d4d> <86db> +<0d4e> <86e4> +<0d4f> <86d0> +<0d50> <86de> +<0d51> <8857> +<0d54> <88b1> +<0d55> <8983> +<0d56> <8996> +<0d57> <8a3b> +<0d58> <8a60> +<0d59> <8a55> +<0d5a> <8a5e> +<0d5b> <8a3c> +<0d5c> <8a41> +<0d5d> <8a54> +<0d5e> <8a5b> +<0d5f> <8a50> +<0d60> <8a46> +<0d61> <8a34> +<0d62> <8a3a> +<0d63> <8a36> +<0d64> <8a56> +<0d65> <8c61> +<0d66> <8c82> +<0d67> <8caf> +<0d68> <8cbc> +<0d69> <8cb3> +<0d6a> <8cbd> +<0d6b> <8cc1> +<0d6c> <8cbb> +<0d6d> <8cc0> +<0d6e> <8cb4> +<0d6f> <8cb7> +<0d70> <8cb6> +<0d71> <8cbf> +<0d72> <8cb8> +<0d73> <8d8a> +<0d74> <8d85> +<0d75> <8d81> +<0d76> <8dce> +<0d77> <8ddd> +<0d78> <8dcb> +<0d79> <8dda> +<0d7a> <8dd1> +<0d7b> <8dcc> +<0d7c> <8ddb> +<0d7d> <8dc6> +<0d7e> <8efb> +<0d7f> <8ef8> +<0d80> <8efc> +<0d81> <8f9c> +<0d82> <902e> +<0d83> <9035> +<0d84> <9031> +<0d85> <9038> +<0d86> <9032> +<0d87> <9036> +<0d88> <9102> +<0d89> <90f5> +<0d8a> <9109> +<0d8b> <90fe> +endbfchar + +100 beginbfchar +<0d8c> <9163> +<0d8d> <9165> +<0d8e> <91cf> +<0d91> <9223> +<0d92> <9209> +<0d93> <921e> +<0d94> <920d> +<0d95> <9210> +<0d96> <9207> +<0d97> <9211> +<0d98> <9594> +<0d99> <958f> +<0d9a> <958b> +<0d9b> <9591> +<0d9c> <9593> +<0d9d> <9592> +<0d9e> <958e> +<0d9f> <968a> +<0da0> <968e> +<0da1> <968b> +<0da2> <967d> +<0da5> <968d> +<0da6> <9672> +<0da7> <9684> +<0da8> <96c1> +<0da9> <96c5> +<0daa> <96c4> +<0dad> <96ef> +<0dae> <96f2> +<0daf> <97cc> +<0db2> <9808> +<0db3> <98e7> +<0db4> <98ea> +<0db5> <98ef> +<0db6> <98e9> +<0db7> <98f2> +<0db8> <98ed> +<0db9> <99ae> +<0dba> <99ad> +<0dbb> <9ec3> +<0dbc> <9ecd> +<0dbd> <9ed1> +<0dbe> <4e82> +<0dbf> <50ad> +<0dc0> <50b5> +<0dc3> <50c5> +<0dc4> <50be> +<0dc5> <50ac> +<0dc6> <50b7> +<0dc7> <50bb> +<0dc8> <50af> +<0dc9> <50c7> +<0dca> <527f> +<0dcb> <5277> +<0dcc> <527d> +<0dcd> <52df> +<0dce> <52e6> +<0dcf> <52e4> +<0dd2> <532f> +<0dd3> <55df> +<0dd4> <55e8> +<0dd5> <55d3> +<0dd6> <55e6> +<0dd7> <55ce> +<0dd8> <55dc> +<0dd9> <55c7> +<0dda> <55d1> +<0ddd> <55ef> +<0dde> <55da> +<0ddf> <55e1> +<0de2> <55e5> +<0de3> <55c9> +<0de6> <585e> +<0de7> <5851> +<0de8> <5858> +<0de9> <5857> +<0dea> <585a> +<0deb> <5854> +<0dec> <586b> +<0ded> <584c> +<0dee> <586d> +<0def> <584a> +<0df0> <5862> +<0df1> <5852> +<0df2> <584b> +<0df3> <5967> +<0df4> <5ac1> +<0df5> <5ac9> +<0df6> <5acc> +<0df7> <5abe> +<0df8> <5abd> +<0df9> <5abc> +<0dfa> <5ab3> +<0dfb> <5ac2> +<0dfc> <5ab2> +<0dfd> <5d69> +<0dfe> <5d6f> +<0dff> <5e4c> +<0e00> <5e79> +<0e01> <5ec9> +endbfchar + +100 beginbfchar +<0e02> <5ec8> +<0e03> <5f12> +<0e04> <5f59> +<0e05> <5fac> +<0e06> <5fae> +<0e07> <611a> +<0e08> <610f> +<0e09> <6148> +<0e0a> <611f> +<0e0b> <60f3> +<0e0c> <611b> +<0e0d> <60f9> +<0e0e> <6101> +<0e0f> <6108> +<0e10> <614e> +<0e11> <614c> +<0e12> <6144> +<0e13> <614d> +<0e14> <613e> +<0e15> <6134> +<0e16> <6127> +<0e17> <610d> +<0e18> <6106> +<0e19> <6137> +<0e1c> <6413> +<0e1d> <643e> +<0e1e> <641e> +<0e1f> <642a> +<0e20> <642d> +<0e21> <643d> +<0e22> <642c> +<0e23> <640f> +<0e24> <641c> +<0e25> <6414> +<0e26> <640d> +<0e27> <6436> +<0e2a> <6406> +<0e2b> <656c> +<0e2c> <659f> +<0e2d> <65b0> +<0e2e> <6697> +<0e2f> <6689> +<0e32> <6696> +<0e33> <6684> +<0e34> <6698> +<0e35> <668d> +<0e36> <6703> +<0e37> <6994> +<0e38> <696d> +<0e39> <695a> +<0e3a> <6977> +<0e3b> <6960> +<0e3c> <6954> +<0e3d> <6975> +<0e3e> <6930> +<0e3f> <6982> +<0e40> <694a> +<0e41> <6968> +<0e42> <696b> +<0e43> <695e> +<0e44> <6953> +<0e45> <6979> +<0e46> <6986> +<0e47> <695d> +<0e48> <6963> +<0e49> <695b> +<0e4a> <6b47> +<0e4b> <6b72> +<0e4c> <6bc0> +<0e4d> <6bbf> +<0e4e> <6bd3> +<0e4f> <6bfd> +<0e50> <6ea2> +<0e51> <6eaf> +<0e52> <6ed3> +<0e53> <6eb6> +<0e54> <6ec2> +<0e55> <6e90> +<0e56> <6e9d> +<0e57> <6ec7> +<0e58> <6ec5> +<0e59> <6ea5> +<0e5a> <6e98> +<0e5b> <6ebc> +<0e5c> <6eba> +<0e5d> <6eab> +<0e5e> <6ed1> +<0e5f> <6e96> +<0e60> <6e9c> +<0e61> <6ec4> +<0e62> <6ed4> +<0e63> <6eaa> +<0e64> <6ea7> +<0e65> <6eb4> +<0e66> <714e> +<0e67> <7159> +<0e68> <7169> +<0e69> <7164> +<0e6a> <7149> +<0e6b> <7167> +endbfchar + +100 beginbfchar +<0e6c> <715c> +<0e6d> <716c> +<0e6e> <7166> +<0e6f> <714c> +<0e70> <7165> +<0e71> <715e> +<0e72> <7146> +<0e73> <7168> +<0e74> <7156> +<0e75> <723a> +<0e76> <7252> +<0e77> <7337> +<0e78> <7345> +<0e79> <733f> +<0e7a> <733e> +<0e7b> <746f> +<0e7c> <745a> +<0e7d> <7455> +<0e7e> <745f> +<0e7f> <745e> +<0e80> <7441> +<0e81> <743f> +<0e82> <7459> +<0e85> <7576> +<0e86> <7578> +<0e87> <7600> +<0e88> <75f0> +<0e89> <7601> +<0e8a> <75f2> +<0e8b> <75f1> +<0e8c> <75fa> +<0e8d> <75ff> +<0e8e> <75f4> +<0e8f> <75f3> +<0e92> <775b> +<0e93> <776b> +<0e94> <7766> +<0e95> <775e> +<0e96> <7763> +<0e97> <7779> +<0e98> <776a> +<0e99> <776c> +<0e9a> <775c> +<0e9b> <7765> +<0e9c> <7768> +<0e9d> <7762> +<0e9e> <77ee> +<0e9f> <788e> +<0ea0> <78b0> +<0ea3> <788c> +<0ea4> <7889> +<0ea5> <787c> +<0ea6> <7891> +<0ea7> <7893> +<0ea8> <787f> +<0ea9> <797a> +<0eaa> <797f> +<0eab> <7981> +<0eac> <842c> +<0ead> <79bd> +<0eae> <7a1c> +<0eaf> <7a1a> +<0eb0> <7a20> +<0eb1> <7a14> +<0eb2> <7a1f> +<0eb3> <7a1e> +<0eb6> <7b77> +<0eb7> <7bc0> +<0eb8> <7b60> +<0eb9> <7b6e> +<0eba> <7b67> +<0ebb> <7cb1> +<0ebc> <7cb3> +<0ebd> <7cb5> +<0ebe> <7d93> +<0ebf> <7d79> +<0ec0> <7d91> +<0ec1> <7d81> +<0ec2> <7d8f> +<0ec3> <7d5b> +<0ec4> <7f6e> +<0ec7> <7f72> +<0ec8> <7fa9> +<0ec9> <7fa8> +<0eca> <7fa4> +<0ecb> <8056> +<0ecc> <8058> +<0ecd> <8086> +<0ece> <8084> +<0ecf> <8171> +<0ed0> <8170> +<0ed1> <8178> +<0ed2> <8165> +<0ed3> <816e> +<0ed4> <8173> +<0ed5> <816b> +<0ed8> <8166> +<0ed9> <8205> +<0eda> <8247> +<0edb> <8482> +endbfchar + +100 beginbfchar +<0edc> <8477> +<0edd> <843d> +<0ede> <8431> +<0edf> <8475> +<0ee0> <8466> +<0ee1> <846b> +<0ee2> <8449> +<0ee3> <846c> +<0ee4> <845b> +<0ee5> <843c> +<0ee6> <8435> +<0ee7> <8461> +<0ee8> <8463> +<0ee9> <8469> +<0eea> <846d> +<0eeb> <8446> +<0eec> <865e> +<0eed> <865c> +<0eee> <865f> +<0eef> <86f9> +<0ef0> <8713> +<0ef1> <8708> +<0ef2> <8707> +<0ef3> <8700> +<0ef4> <86fe> +<0ef5> <86fb> +<0ef8> <8706> +<0ef9> <870a> +<0efa> <8859> +<0efb> <88df> +<0efc> <88d4> +<0efd> <88d9> +<0efe> <88dc> +<0eff> <88d8> +<0f00> <88dd> +<0f01> <88e1> +<0f02> <88ca> +<0f03> <88d5> +<0f04> <88d2> +<0f05> <899c> +<0f06> <89e3> +<0f07> <8a6b> +<0f0a> <8a66> +<0f0b> <8a69> +<0f0c> <8a70> +<0f0d> <8a87> +<0f0e> <8a7c> +<0f0f> <8a63> +<0f10> <8aa0> +<0f11> <8a71> +<0f12> <8a85> +<0f13> <8a6d> +<0f14> <8a62> +<0f15> <8a6e> +<0f16> <8a6c> +<0f17> <8a79> +<0f18> <8a7b> +<0f19> <8a3e> +<0f1a> <8a68> +<0f1b> <8c62> +<0f1c> <8c8a> +<0f1d> <8c89> +<0f1e> <8cca> +<0f21> <8cc4> +<0f22> <8cb2> +<0f23> <8cc3> +<0f24> <8cc2> +<0f25> <8cc5> +<0f26> <8de1> +<0f27> <8ddf> +<0f28> <8de8> +<0f29> <8def> +<0f2a> <8df3> +<0f2b> <8dfa> +<0f2c> <8dea> +<0f2d> <8de4> +<0f2e> <8de6> +<0f2f> <8eb2> +<0f30> <8f03> +<0f31> <8f09> +<0f32> <8efe> +<0f33> <8f0a> +<0f34> <8f9f> +<0f35> <8fb2> +<0f36> <904b> +<0f37> <904a> +<0f38> <9053> +<0f39> <9042> +<0f3a> <9054> +<0f3b> <903c> +<0f3c> <9055> +<0f3d> <9050> +<0f3e> <9047> +<0f3f> <904f> +<0f40> <904e> +<0f41> <904d> +<0f42> <9051> +<0f43> <903e> +<0f44> <9041> +<0f45> <9112> +endbfchar + +100 beginbfchar +<0f46> <9117> +<0f47> <916c> +<0f48> <916a> +<0f49> <9169> +<0f4a> <91c9> +<0f4b> <9237> +<0f4c> <9257> +<0f4d> <9238> +<0f4e> <923d> +<0f4f> <9240> +<0f50> <923e> +<0f51> <925b> +<0f52> <924b> +<0f53> <9264> +<0f54> <9251> +<0f55> <9234> +<0f56> <9249> +<0f57> <924d> +<0f58> <9245> +<0f59> <9239> +<0f5a> <923f> +<0f5b> <925a> +<0f5c> <9598> +<0f5d> <9698> +<0f60> <96cd> +<0f61> <96cb> +<0f64> <96f7> +<0f65> <96fb> +<0f66> <96f9> +<0f67> <96f6> +<0f68> <9756> +<0f69> <9774> +<0f6a> <9776> +<0f6d> <9813> +<0f6e> <980a> +<0f6f> <9812> +<0f70> <980c> +<0f71> <98fc> +<0f72> <98f4> +<0f75> <99b3> +<0f76> <99b1> +<0f77> <99b4> +<0f78> <9ae1> +<0f79> <9ce9> +<0f7a> <9e82> +<0f7b> <9f0e> +<0f7c> <9f13> +<0f7d> <9f20> +<0f7e> <50e7> +<0f7f> <50ee> +<0f80> <50e5> +<0f81> <50d6> +<0f82> <50ed> +<0f83> <50da> +<0f84> <50d5> +<0f85> <50cf> +<0f86> <50d1> +<0f87> <50f1> +<0f88> <50ce> +<0f89> <50e9> +<0f8a> <5162> +<0f8b> <51f3> +<0f8c> <5283> +<0f8d> <5282> +<0f8e> <5331> +<0f8f> <53ad> +<0f90> <55fe> +<0f91> <5600> +<0f92> <561b> +<0f93> <5617> +<0f94> <55fd> +<0f95> <5614> +<0f96> <5606> +<0f97> <5609> +<0f9a> <55f7> +<0f9b> <5616> +<0f9c> <561f> +<0f9d> <5608> +<0f9e> <5610> +<0f9f> <55f6> +<0fa0> <5718> +<0fa1> <5716> +<0fa2> <5875> +<0fa3> <587e> +<0fa4> <5883> +<0fa5> <5893> +<0fa6> <588a> +<0fa7> <5879> +<0fa8> <5885> +<0fa9> <587d> +<0faa> <58fd> +<0fab> <5925> +<0fac> <5922> +<0fad> <5924> +<0fae> <596a> +<0faf> <5969> +<0fb0> <5ae1> +<0fb1> <5ae6> +<0fb2> <5ae9> +<0fb3> <5ad7> +endbfchar + +100 beginbfchar +<0fb4> <5ad6> +<0fb5> <5ad8> +<0fb6> <5ae3> +<0fb7> <5b75> +<0fb8> <5bde> +<0fb9> <5be7> +<0fba> <5be1> +<0fbd> <5be8> +<0fbe> <5be2> +<0fbf> <5be4> +<0fc0> <5bdf> +<0fc1> <5c0d> +<0fc2> <5c62> +<0fc3> <5d84> +<0fc4> <5d87> +<0fc5> <5e5b> +<0fc6> <5e63> +<0fc7> <5e55> +<0fc8> <5e57> +<0fc9> <5e54> +<0fca> <5ed3> +<0fcb> <5ed6> +<0fcc> <5f0a> +<0fcd> <5f46> +<0fce> <5f70> +<0fcf> <5fb9> +<0fd0> <6147> +<0fd1> <613f> +<0fd2> <614b> +<0fd3> <6177> +<0fd6> <615f> +<0fd7> <615a> +<0fd8> <6158> +<0fd9> <6175> +<0fda> <622a> +<0fdb> <6487> +<0fdc> <6458> +<0fdd> <6454> +<0fde> <64a4> +<0fdf> <6478> +<0fe0> <645f> +<0fe1> <647a> +<0fe2> <6451> +<0fe3> <6467> +<0fe4> <6434> +<0fe5> <646d> +<0fe6> <647b> +<0fe7> <6572> +<0fe8> <65a1> +<0fe9> <65d7> +<0fea> <65d6> +<0feb> <66a2> +<0fec> <66a8> +<0fed> <669d> +<0fee> <699c> +<0fef> <69a8> +<0ff0> <6995> +<0ff1> <69c1> +<0ff2> <69ae> +<0ff3> <69d3> +<0ff4> <69cb> +<0ff5> <699b> +<0ff6> <69b7> +<0ff7> <69bb> +<0ff8> <69ab> +<0ff9> <69b4> +<0ffa> <69d0> +<0ffb> <69cd> +<0ffc> <69ad> +<0ffd> <69cc> +<0ffe> <69a6> +<0fff> <69c3> +<1000> <69a3> +<1001> <6b49> +<1002> <6b4c> +<1003> <6c33> +<1004> <6f33> +<1005> <6f14> +<1006> <6efe> +<1007> <6f13> +<1008> <6ef4> +<1009> <6f29> +<100a> <6f3e> +<100b> <6f20> +<100c> <6f2c> +<100d> <6f0f> +<100e> <6f02> +<100f> <6f22> +<1010> <6eff> +<1011> <6eef> +<1012> <6f06> +<1013> <6f31> +<1014> <6f38> +<1015> <6f32> +<1016> <6f23> +<1017> <6f15> +<1018> <6f2b> +<1019> <6f2f> +<101a> <6f88> +<101b> <6f2a> +endbfchar + +100 beginbfchar +<101c> <6eec> +<101d> <6f01> +<101e> <6ef2> +<101f> <6ecc> +<1020> <6ef7> +<1021> <7194> +<1022> <7199> +<1023> <717d> +<1024> <718a> +<1025> <7184> +<1026> <7192> +<1027> <723e> +<1028> <7292> +<1029> <7296> +<102a> <7344> +<102b> <7350> +<102c> <7464> +<102d> <7463> +<102e> <746a> +<102f> <7470> +<1030> <746d> +<1031> <7504> +<1032> <7591> +<1033> <7627> +<1034> <760d> +<1035> <760b> +<1036> <7609> +<1037> <7613> +<1038> <76e1> +<1039> <76e3> +<103a> <7784> +<103b> <777d> +<103c> <777f> +<103d> <7761> +<103e> <78c1> +<103f> <789f> +<1040> <78a7> +<1041> <78b3> +<1042> <78a9> +<1043> <78a3> +<1046> <798d> +<1047> <7a2e> +<1048> <7a31> +<1049> <7aaa> +<104a> <7aa9> +<104b> <7aed> +<104c> <7aef> +<104d> <7ba1> +<104e> <7b95> +<104f> <7b8b> +<1050> <7b75> +<1051> <7b97> +<1052> <7b9d> +<1053> <7b94> +<1054> <7b8f> +<1055> <7bb8> +<1056> <7b87> +<1057> <7b84> +<1058> <7cb9> +<105b> <7dbb> +<105c> <7db0> +<105d> <7d9c> +<1060> <7da0> +<1061> <7dca> +<1062> <7db4> +<1063> <7db2> +<1064> <7db1> +<1065> <7dba> +<1066> <7da2> +<1067> <7dbf> +<1068> <7db5> +<1069> <7db8> +<106a> <7dad> +<106b> <7dd2> +<106c> <7dc7> +<106d> <7dac> +<106e> <7f70> +<1071> <7fdf> +<1072> <805e> +<1073> <805a> +<1074> <8087> +<1075> <8150> +<1076> <8180> +<1077> <818f> +<1078> <8188> +<1079> <818a> +<107a> <817f> +<107b> <8182> +<107c> <81e7> +<107d> <81fa> +<107e> <8207> +<107f> <8214> +<1080> <821e> +<1081> <824b> +<1082> <84c9> +<1083> <84bf> +<1084> <84c6> +<1085> <84c4> +<1086> <8499> +<1087> <849e> +endbfchar + +100 beginbfchar +<1088> <84b2> +<1089> <849c> +<108a> <84cb> +<108b> <84b8> +<108c> <84c0> +<108d> <84d3> +<108e> <8490> +<108f> <84bc> +<1090> <84d1> +<1091> <84ca> +<1092> <873f> +<1093> <871c> +<1094> <873b> +<1095> <8722> +<1096> <8725> +<1097> <8734> +<1098> <8718> +<1099> <8755> +<109a> <8737> +<109b> <8729> +<109c> <88f3> +<109d> <8902> +<109e> <88f4> +<109f> <88f9> +<10a0> <88f8> +<10a1> <88fd> +<10a2> <88e8> +<10a3> <891a> +<10a4> <88ef> +<10a5> <8aa6> +<10a6> <8a8c> +<10a7> <8a9e> +<10a8> <8aa3> +<10a9> <8a8d> +<10aa> <8aa1> +<10ab> <8a93> +<10ac> <8aa4> +<10ad> <8aaa> +<10ae> <8aa5> +<10af> <8aa8> +<10b0> <8a98> +<10b1> <8a91> +<10b2> <8a9a> +<10b3> <8aa7> +<10b4> <8c6a> +<10b5> <8c8d> +<10b6> <8c8c> +<10b7> <8cd3> +<10ba> <8d6b> +<10bb> <8d99> +<10bc> <8d95> +<10bd> <8dfc> +<10be> <8f14> +<10bf> <8f12> +<10c0> <8f15> +<10c1> <8f13> +<10c2> <8fa3> +<10c3> <9060> +<10c4> <9058> +<10c5> <905c> +<10c6> <9063> +<10c7> <9059> +<10c8> <905e> +<10c9> <9062> +<10ca> <905d> +<10cb> <905b> +<10cc> <9119> +<10cd> <9118> +<10ce> <911e> +<10cf> <9175> +<10d0> <9178> +<10d1> <9177> +<10d2> <9174> +<10d3> <9278> +<10d4> <92ac> +<10d5> <9280> +<10d6> <9285> +<10d7> <9298> +<10d8> <9296> +<10d9> <927b> +<10da> <9293> +<10db> <929c> +<10dc> <92a8> +<10dd> <927c> +<10de> <9291> +<10df> <95a1> +<10e2> <95a3> +<10e3> <95a5> +<10e4> <95a4> +<10e5> <9699> +<10e6> <969c> +<10e7> <969b> +<10e8> <96cc> +<10e9> <96d2> +<10ea> <9700> +<10eb> <977c> +<10ec> <9785> +<10ed> <97f6> +<10f0> <98af> +<10f1> <98b1> +endbfchar + +100 beginbfchar +<10f2> <9903> +<10f3> <9905> +<10f4> <990c> +<10f5> <9909> +<10f6> <99c1> +<10f9> <9ae6> +<10fc> <9cf4> +<10fd> <9cf6> +<10fe> <9cf3> +<10ff> <9ebc> +<1100> <9f3b> +<1101> <9f4a> +<1102> <5104> +<1103> <5100> +<1104> <50fb> +<1105> <50f5> +<1106> <50f9> +<1107> <5102> +<110a> <5105> +<110b> <51dc> +<110f> <528d> +<1110> <528a> +<1111> <52f0> +<1112> <53b2> +<1113> <562e> +<1114> <563b> +<1115> <5639> +<1116> <5632> +<1117> <563f> +<1118> <5634> +<1119> <5629> +<111a> <5653> +<111b> <564e> +<111c> <5657> +<111d> <5674> +<111e> <5636> +<1121> <5880> +<1122> <589f> +<1123> <589e> +<1124> <58b3> +<1125> <589c> +<1126> <58ae> +<1127> <58a9> +<1128> <58a6> +<1129> <596d> +<112a> <5b09> +<112b> <5afb> +<112c> <5b0b> +<112d> <5af5> +<112e> <5b0c> +<112f> <5b08> +<1130> <5bee> +<1131> <5bec> +<1132> <5be9> +<1133> <5beb> +<1136> <5d9d> +<1137> <5d94> +<1138> <5e62> +<1139> <5e5f> +<113a> <5e61> +<113b> <5ee2> +<113c> <5eda> +<113d> <5edf> +<113e> <5edd> +<113f> <5ee3> +<1140> <5ee0> +<1141> <5f48> +<1142> <5f71> +<1143> <5fb7> +<1144> <5fb5> +<1145> <6176> +<1146> <6167> +<1147> <616e> +<1148> <615d> +<1149> <6155> +<114a> <6182> +<114b> <617c> +<114c> <6170> +<114d> <616b> +<114e> <617e> +<114f> <61a7> +<1150> <6190> +<1151> <61ab> +<1152> <618e> +<1153> <61ac> +<1154> <619a> +<1155> <61a4> +<1156> <6194> +<1157> <61ae> +<1158> <622e> +<1159> <6469> +<115a> <646f> +<115b> <6479> +<115c> <649e> +<115d> <64b2> +<115e> <6488> +<115f> <6490> +<1160> <64b0> +<1161> <64a5> +<1162> <6493> +endbfchar + +100 beginbfchar +<1163> <6495> +<1164> <64a9> +<1165> <6492> +<1166> <64ae> +<1167> <64ad> +<1168> <64ab> +<1169> <649a> +<116a> <64ac> +<116b> <6499> +<116c> <64a2> +<116d> <64b3> +<116e> <6575> +<1171> <66ae> +<1172> <66ab> +<1173> <66b4> +<1174> <66b1> +<1175> <6a23> +<1176> <6a1f> +<1177> <69e8> +<1178> <6a01> +<1179> <6a1e> +<117a> <6a19> +<117b> <69fd> +<117c> <6a21> +<117d> <6a13> +<117e> <6a0a> +<117f> <69f3> +<1180> <6a02> +<1181> <6a05> +<1182> <69ed> +<1183> <6a11> +<1184> <6b50> +<1185> <6b4e> +<1186> <6ba4> +<1189> <6f3f> +<118a> <6f7c> +<118b> <6f84> +<118c> <6f51> +<118d> <6f66> +<118e> <6f54> +<118f> <6f86> +<1190> <6f6d> +<1191> <6f5b> +<1192> <6f78> +<1193> <6f6e> +<1194> <6f8e> +<1195> <6f7a> +<1196> <6f70> +<1197> <6f64> +<1198> <6f97> +<1199> <6f58> +<119a> <6ed5> +<119b> <6f6f> +<119c> <6f60> +<119d> <6f5f> +<119e> <719f> +<119f> <71ac> +<11a0> <71b1> +<11a1> <71a8> +<11a2> <7256> +<11a3> <729b> +<11a4> <734e> +<11a5> <7357> +<11a6> <7469> +<11a7> <748b> +<11a8> <7483> +<11a9> <747e> +<11aa> <7480> +<11ab> <757f> +<11ac> <7620> +<11ad> <7629> +<11ae> <761f> +<11af> <7624> +<11b0> <7626> +<11b3> <769a> +<11b4> <76ba> +<11b5> <76e4> +<11b6> <778e> +<11b7> <7787> +<11b8> <778c> +<11b9> <7791> +<11ba> <778b> +<11bb> <78cb> +<11bc> <78c5> +<11bd> <78ba> +<11be> <78ca> +<11bf> <78be> +<11c0> <78d5> +<11c1> <78bc> +<11c2> <78d0> +<11c3> <7a3f> +<11c4> <7a3c> +<11c5> <7a40> +<11c6> <7a3d> +<11c7> <7a37> +<11c8> <7a3b> +<11c9> <7aaf> +<11ca> <7aae> +<11cb> <7bad> +<11cc> <7bb1> +endbfchar + +100 beginbfchar +<11cd> <7bc4> +<11ce> <7bb4> +<11d1> <7bc1> +<11d2> <7ba0> +<11d3> <7bcc> +<11d4> <7cca> +<11d5> <7de0> +<11d6> <7df4> +<11d7> <7def> +<11d8> <7dfb> +<11d9> <7dd8> +<11da> <7dec> +<11db> <7ddd> +<11dc> <7de8> +<11dd> <7de3> +<11de> <7dda> +<11df> <7dde> +<11e0> <7de9> +<11e1> <7d9e> +<11e2> <7dd9> +<11e3> <7df2> +<11e4> <7df9> +<11e5> <7f75> +<11e6> <7f77> +<11e7> <7faf> +<11e8> <7fe9> +<11e9> <8026> +<11ed> <81a0> +<11ee> <819a> +<11ef> <8198> +<11f0> <8517> +<11f1> <853d> +<11f2> <851a> +<11f3> <84ee> +<11f6> <8513> +<11f7> <8511> +<11f8> <8523> +<11f9> <8521> +<11fa> <8514> +<11fb> <84ec> +<11fc> <8525> +<11fd> <84ff> +<11fe> <8506> +<11ff> <8782> +<1200> <8774> +<1201> <8776> +<1202> <8760> +<1203> <8766> +<1204> <8778> +<1205> <8768> +<1206> <8759> +<1207> <8757> +<1208> <874c> +<1209> <8753> +<120a> <885b> +<120b> <885d> +<120c> <8910> +<120d> <8907> +<1210> <8915> +<1211> <890a> +<1212> <8abc> +<1213> <8ad2> +<1214> <8ac7> +<1215> <8ac4> +<1216> <8a95> +<1217> <8acb> +<1218> <8af8> +<1219> <8ab2> +<121a> <8ac9> +<121b> <8ac2> +<121c> <8abf> +<121d> <8ab0> +<121e> <8ad6> +<121f> <8acd> +<1220> <8ab6> +<1221> <8ab9> +<1222> <8adb> +<1223> <8c4c> +<1224> <8c4e> +<1225> <8c6c> +<1226> <8ce0> +<1227> <8cde> +<1228> <8ce6> +<1229> <8ce4> +<122e> <8cdc> +<122f> <8cea> +<1230> <8ce1> +<1231> <8d6d> +<1232> <8d9f> +<1233> <8da3> +<1234> <8e2b> +<1235> <8e10> +<1236> <8e1d> +<1237> <8e22> +<1238> <8e0f> +<1239> <8e29> +<123a> <8e1f> +<123b> <8e21> +<123c> <8e1e> +<123d> <8eba> +endbfchar + +100 beginbfchar +<123e> <8f1d> +<123f> <8f1b> +<1240> <8f1f> +<1241> <8f29> +<1242> <8f26> +<1243> <8f2a> +<1244> <8f1c> +<1245> <8f1e> +<1246> <8f25> +<1247> <9069> +<1248> <906e> +<1249> <9068> +<124a> <906d> +<124b> <9077> +<124c> <9130> +<124d> <912d> +<124e> <9127> +<124f> <9131> +<1250> <9187> +<1251> <9189> +<1252> <918b> +<1253> <9183> +<1254> <92c5> +<1255> <92bb> +<1256> <92b7> +<1257> <92ea> +<1258> <92e4> +<1259> <92c1> +<125a> <92b3> +<125b> <92bc> +<125c> <92d2> +<125d> <92c7> +<125e> <92f0> +<125f> <92b2> +<1260> <95ad> +<1261> <95b1> +<1262> <9704> +<1265> <9709> +<1266> <9760> +<1267> <978d> +<1268> <978b> +<1269> <978f> +<126a> <9821> +<126b> <982b> +<126c> <981c> +<126d> <98b3> +<126e> <990a> +<126f> <9913> +<1270> <9912> +<1271> <9918> +<1272> <99dd> +<1273> <99d0> +<1274> <99df> +<1275> <99db> +<1276> <99d1> +<1277> <99d5> +<1278> <99d2> +<1279> <99d9> +<127a> <9ab7> +<127d> <9b27> +<127e> <9b45> +<127f> <9b44> +<1280> <9b77> +<1281> <9b6f> +<1282> <9d06> +<1283> <9d09> +<1284> <9d03> +<1285> <9ea9> +<1286> <9ebe> +<1287> <9ece> +<1288> <58a8> +<1289> <9f52> +<128a> <5112> +<128b> <5118> +<128c> <5114> +<128d> <5110> +<128e> <5115> +<128f> <5180> +<1290> <51aa> +<1291> <51dd> +<1292> <5291> +<1293> <5293> +<1294> <52f3> +<1295> <5659> +<1296> <566b> +<1297> <5679> +<1298> <5669> +<1299> <5664> +<129a> <5678> +<129b> <566a> +<129c> <5668> +<129d> <5665> +<129e> <5671> +<129f> <566f> +<12a0> <566c> +<12a1> <5662> +<12a2> <5676> +<12a3> <58c1> +<12a4> <58be> +<12a5> <58c7> +endbfchar + +100 beginbfchar +<12a6> <58c5> +<12a7> <596e> +<12a8> <5b1d> +<12a9> <5b34> +<12aa> <5b78> +<12ab> <5bf0> +<12ac> <5c0e> +<12ad> <5f4a> +<12ae> <61b2> +<12af> <6191> +<12b0> <61a9> +<12b1> <618a> +<12b2> <61cd> +<12b3> <61b6> +<12b4> <61be> +<12b5> <61ca> +<12b6> <61c8> +<12b7> <6230> +<12b8> <64c5> +<12b9> <64c1> +<12ba> <64cb> +<12bd> <64da> +<12be> <64c4> +<12bf> <64c7> +<12c0> <64c2> +<12c1> <64cd> +<12c2> <64bf> +<12c3> <64d2> +<12c4> <64d4> +<12c5> <64be> +<12c6> <6574> +<12c7> <66c6> +<12c8> <66c9> +<12c9> <66b9> +<12ca> <66c4> +<12cb> <66c7> +<12cc> <66b8> +<12cd> <6a3d> +<12ce> <6a38> +<12cf> <6a3a> +<12d0> <6a59> +<12d1> <6a6b> +<12d2> <6a58> +<12d3> <6a39> +<12d4> <6a44> +<12d5> <6a62> +<12d6> <6a61> +<12d7> <6a4b> +<12d8> <6a47> +<12d9> <6a35> +<12da> <6a5f> +<12db> <6a48> +<12dc> <6b59> +<12dd> <6b77> +<12de> <6c05> +<12df> <6fc2> +<12e0> <6fb1> +<12e1> <6fa1> +<12e2> <6fc3> +<12e3> <6fa4> +<12e4> <6fc1> +<12e5> <6fa7> +<12e6> <6fb3> +<12e7> <6fc0> +<12e8> <6fb9> +<12e9> <6fb6> +<12ea> <6fa6> +<12eb> <6fa0> +<12ec> <6fb4> +<12ed> <71be> +<12ee> <71c9> +<12ef> <71d0> +<12f0> <71d2> +<12f1> <71c8> +<12f2> <71d5> +<12f3> <71b9> +<12f4> <71ce> +<12f5> <71d9> +<12f6> <71dc> +<12f9> <7368> +<12fa> <749c> +<12fb> <74a3> +<12fc> <7498> +<12fd> <749f> +<12fe> <749e> +<12ff> <74e2> +<1302> <7634> +<1303> <7638> +<1304> <763a> +<1305> <76e7> +<1306> <76e5> +<1307> <77a0> +<130a> <77a5> +<130b> <78e8> +<130c> <78da> +<130d> <78ec> +<130e> <78e7> +<130f> <79a6> +<1312> <7a46> +<1313> <7a4c> +endbfchar + +100 beginbfchar +<1314> <7a4b> +<1315> <7aba> +<1316> <7bd9> +<1317> <7c11> +<1318> <7bc9> +<1319> <7be4> +<131a> <7bdb> +<131b> <7be1> +<131c> <7be9> +<131d> <7be6> +<1320> <7e0a> +<1321> <7e11> +<1322> <7e08> +<1323> <7e1b> +<1324> <7e23> +<1325> <7e1e> +<1326> <7e1d> +<1327> <7e09> +<1328> <7e10> +<1329> <7f79> +<132a> <7fb2> +<132d> <7fee> +<132e> <8028> +<132f> <81b3> +<1330> <81a9> +<1331> <81a8> +<1332> <81fb> +<1333> <8208> +<1336> <854a> +<1337> <8559> +<1338> <8548> +<133b> <8543> +<133c> <8549> +<133d> <856d> +<133e> <856a> +<133f> <855e> +<1340> <8783> +<1341> <879f> +<1342> <879e> +<1343> <87a2> +<1344> <878d> +<1345> <8861> +<1346> <892a> +<1347> <8932> +<1348> <8925> +<1349> <892b> +<134a> <8921> +<134b> <89aa> +<134c> <89a6> +<134d> <8ae6> +<134e> <8afa> +<134f> <8aeb> +<1350> <8af1> +<1351> <8b00> +<1352> <8adc> +<1353> <8ae7> +<1354> <8aee> +<1355> <8afe> +<1358> <8af7> +<1359> <8aed> +<135a> <8af3> +<135b> <8af6> +<135c> <8afc> +<135d> <8c6b> +<135e> <8c6d> +<135f> <8c93> +<1360> <8cf4> +<1361> <8e44> +<1362> <8e31> +<1363> <8e34> +<1364> <8e42> +<1365> <8e39> +<1366> <8e35> +<1367> <8f3b> +<1368> <8f2f> +<1369> <8f38> +<136a> <8f33> +<136b> <8fa8> +<136c> <8fa6> +<136d> <9075> +<136e> <9074> +<136f> <9078> +<1370> <9072> +<1371> <907c> +<1372> <907a> +<1373> <9134> +<1374> <9192> +<1375> <9320> +<1376> <9336> +<1377> <92f8> +<1378> <9333> +<1379> <932f> +<137a> <9322> +<137b> <92fc> +<137c> <932b> +<137d> <9304> +<137e> <931a> +<137f> <9310> +<1380> <9326> +<1381> <9321> +endbfchar + +100 beginbfchar +<1382> <9315> +<1383> <932e> +<1384> <9319> +<1385> <95bb> +<1388> <96aa> +<1389> <96d5> +<138a> <970e> +<138b> <9711> +<138c> <9716> +<138d> <970d> +<138e> <9713> +<138f> <970f> +<1392> <9766> +<1393> <9798> +<1394> <9830> +<1395> <9838> +<1396> <983b> +<1397> <9837> +<1398> <982d> +<1399> <9839> +<139a> <9824> +<139b> <9910> +<139c> <9928> +<139d> <991e> +<139e> <991b> +<139f> <9921> +<13a0> <991a> +<13a1> <99ed> +<13a2> <99e2> +<13a3> <99f1> +<13a4> <9ab8> +<13a5> <9abc> +<13a6> <9afb> +<13a7> <9aed> +<13a8> <9b28> +<13a9> <9b91> +<13aa> <9d15> +<13ab> <9d23> +<13ac> <9d26> +<13ad> <9d28> +<13ae> <9d12> +<13af> <9d1b> +<13b0> <9ed8> +<13b1> <9ed4> +<13b2> <9f8d> +<13b3> <9f9c> +<13b4> <512a> +<13b5> <511f> +<13b6> <5121> +<13b7> <5132> +<13b8> <52f5> +<13b9> <568e> +<13ba> <5680> +<13bb> <5690> +<13bc> <5685> +<13bd> <5687> +<13be> <568f> +<13bf> <58d5> +<13c0> <58d3> +<13c1> <58d1> +<13c2> <58ce> +<13c3> <5b30> +<13c4> <5b2a> +<13c5> <5b24> +<13c6> <5b7a> +<13c7> <5c37> +<13c8> <5c68> +<13c9> <5dbc> +<13ca> <5dba> +<13cb> <5dbd> +<13cc> <5db8> +<13cd> <5e6b> +<13ce> <5f4c> +<13cf> <5fbd> +<13d0> <61c9> +<13d1> <61c2> +<13d2> <61c7> +<13d3> <61e6> +<13d4> <61cb> +<13d5> <6232> +<13d6> <6234> +<13d7> <64ce> +<13d8> <64ca> +<13d9> <64d8> +<13da> <64e0> +<13db> <64f0> +<13dc> <64e6> +<13dd> <64ec> +<13de> <64f1> +<13df> <64e2> +<13e0> <64ed> +<13e3> <66d9> +<13e4> <66d6> +<13e5> <6a80> +<13e6> <6a94> +<13e7> <6a84> +<13e8> <6aa2> +<13e9> <6a9c> +<13ea> <6adb> +<13eb> <6aa3> +endbfchar + +100 beginbfchar +<13ec> <6a7e> +<13ed> <6a97> +<13ee> <6a90> +<13ef> <6aa0> +<13f0> <6b5c> +<13f1> <6bae> +<13f2> <6bda> +<13f3> <6c08> +<13f4> <6fd8> +<13f5> <6ff1> +<13f8> <6fdb> +<13f9> <6fe4> +<13fa> <6feb> +<13fb> <6fef> +<13fc> <6f80> +<13fd> <6fec> +<13fe> <6fe1> +<13ff> <6fe9> +<1400> <6fd5> +<1401> <6fee> +<1402> <6ff0> +<1403> <71e7> +<1404> <71df> +<1405> <71ee> +<1406> <71e6> +<1407> <71e5> +<1408> <71ed> +<1409> <71ec> +<140a> <71f4> +<140b> <71e0> +<140c> <7235> +<140d> <7246> +<140e> <7370> +<140f> <7372> +<1410> <74a9> +<1411> <74b0> +<1412> <74a6> +<1413> <74a8> +<1414> <7646> +<1415> <7642> +<1416> <764c> +<1417> <76ea> +<1418> <77b3> +<1419> <77aa> +<141a> <77b0> +<141b> <77ac> +<141c> <77a7> +<141d> <77ad> +<141e> <77ef> +<141f> <78f7> +<1420> <78fa> +<1421> <78f4> +<1422> <78ef> +<1423> <7901> +<1424> <79a7> +<1425> <79aa> +<1426> <7a57> +<1427> <7abf> +<1428> <7c07> +<1429> <7c0d> +<142a> <7bfe> +<142b> <7bf7> +<142c> <7c0c> +<142d> <7be0> +<142e> <7ce0> +<142f> <7cdc> +<1430> <7cde> +<1431> <7ce2> +<1432> <7cdf> +<1433> <7cd9> +<1434> <7cdd> +<1435> <7e2e> +<1436> <7e3e> +<1437> <7e46> +<1438> <7e37> +<1439> <7e32> +<143a> <7e43> +<143b> <7e2b> +<143c> <7e3d> +<143d> <7e31> +<143e> <7e45> +<143f> <7e41> +<1440> <7e34> +<1441> <7e39> +<1442> <7e48> +<1443> <7e35> +<1444> <7e3f> +<1445> <7e2f> +<1446> <7f44> +<1447> <7ff3> +<1448> <7ffc> +<144b> <8070> +<144c> <806f> +<144d> <8073> +<144e> <81c6> +<144f> <81c3> +<1450> <81ba> +<1451> <81c2> +<1452> <81c0> +<1453> <81bf> +endbfchar + +100 beginbfchar +<1454> <81bd> +<1455> <81c9> +<1456> <81be> +<1457> <81e8> +<1458> <8209> +<1459> <8271> +<145a> <85aa> +<145b> <8584> +<145c> <857e> +<145d> <859c> +<145e> <8591> +<145f> <8594> +<1460> <85af> +<1461> <859b> +<1462> <8587> +<1463> <85a8> +<1464> <858a> +<1465> <85a6> +<1466> <8667> +<1467> <87c0> +<1468> <87d1> +<1469> <87b3> +<146a> <87d2> +<146b> <87c6> +<146c> <87ab> +<146d> <87bb> +<146e> <87ba> +<146f> <87c8> +<1470> <87cb> +<1471> <893b> +<1472> <8936> +<1473> <8944> +<1474> <8938> +<1475> <893d> +<1476> <89ac> +<1477> <8b0e> +<1478> <8b17> +<1479> <8b19> +<147a> <8b1b> +<147b> <8b0a> +<147c> <8b20> +<147d> <8b1d> +<147e> <8b04> +<147f> <8b10> +<1480> <8c41> +<1481> <8c3f> +<1482> <8c73> +<1483> <8cfa> +<1484> <8cfd> +<1485> <8cfc> +<1486> <8cf8> +<1487> <8cfb> +<1488> <8da8> +<1489> <8e49> +<148a> <8e4b> +<148b> <8e48> +<148c> <8e4a> +<148d> <8f44> +<148e> <8f3e> +<148f> <8f42> +<1490> <8f45> +<1491> <8f3f> +<1492> <907f> +<1493> <907d> +<1494> <9084> +<1497> <9080> +<1498> <9139> +<1499> <91a3> +<149a> <919e> +<149b> <919c> +<149c> <934d> +<149d> <9382> +<149e> <9328> +<149f> <9375> +<14a0> <934a> +<14a1> <9365> +<14a2> <934b> +<14a3> <9318> +<14a4> <937e> +<14a5> <936c> +<14a6> <935b> +<14a7> <9370> +<14a8> <935a> +<14a9> <9354> +<14ad> <95c8> +<14ae> <95c6> +<14af> <96b1> +<14b0> <96b8> +<14b1> <96d6> +<14b2> <971c> +<14b3> <971e> +<14b4> <97a0> +<14b5> <97d3> +<14b6> <9846> +<14b7> <98b6> +<14b8> <9935> +<14b9> <9a01> +<14ba> <99ff> +<14bb> <9bae> +<14bc> <9bab> +endbfchar + +100 beginbfchar +<14bd> <9baa> +<14be> <9bad> +<14bf> <9d3b> +<14c0> <9d3f> +<14c1> <9e8b> +<14c2> <9ecf> +<14c3> <9ede> +<14c6> <9edb> +<14c7> <9f3e> +<14c8> <9f4b> +<14c9> <53e2> +<14ca> <5695> +<14cb> <56ae> +<14cc> <58d9> +<14cd> <58d8> +<14ce> <5b38> +<14cf> <5f5d> +<14d0> <61e3> +<14d1> <6233> +<14d2> <64f4> +<14d3> <64f2> +<14d4> <64fe> +<14d5> <6506> +<14d8> <64f7> +<14d9> <65b7> +<14da> <66dc> +<14db> <6726> +<14dc> <6ab3> +<14dd> <6aac> +<14de> <6ac3> +<14df> <6abb> +<14e0> <6ab8> +<14e1> <6ac2> +<14e4> <6b5f> +<14e5> <6b78> +<14e6> <6baf> +<14e7> <7009> +<14e8> <700b> +<14e9> <6ffe> +<14ea> <7006> +<14eb> <6ffa> +<14ec> <7011> +<14ed> <700f> +<14f0> <71fe> +<14f1> <71f8> +<14f2> <7377> +<14f3> <7375> +<14f4> <74a7> +<14f5> <74bf> +<14f6> <7515> +<14f7> <7656> +<14f8> <7658> +<14f9> <7652> +<14fa> <77bd> +<14fb> <77bf> +<14fe> <790e> +<14ff> <79ae> +<1502> <7a60> +<1505> <7c2b> +<1506> <7c27> +<1507> <7c2a> +<1508> <7c1e> +<1509> <7c23> +<150a> <7c21> +<150b> <7ce7> +<150e> <7e5e> +<150f> <7e5a> +<1510> <7e61> +<1511> <7e52> +<1512> <7e59> +<1513> <7f48> +<1514> <7ff9> +<1515> <7ffb> +<1516> <8077> +<1517> <8076> +<1518> <81cd> +<1519> <81cf> +<151a> <820a> +<151b> <85cf> +<151c> <85a9> +<151d> <85cd> +<151e> <85d0> +<151f> <85c9> +<1520> <85b0> +<1521> <85ba> +<1522> <85b9> +<1523> <87ef> +<1524> <87ec> +<1525> <87f2> +<1526> <87e0> +<1527> <8986> +<1528> <89b2> +<1529> <89f4> +<152a> <8b28> +<152b> <8b39> +<152c> <8b2c> +<152d> <8b2b> +<152e> <8c50> +<152f> <8d05> +<1530> <8e59> +endbfchar + +100 beginbfchar +<1531> <8e63> +<1532> <8e66> +<1533> <8e64> +<1534> <8e5f> +<1535> <8e55> +<1536> <8ec0> +<1537> <8f49> +<1538> <8f4d> +<1539> <9087> +<153a> <9083> +<153b> <9088> +<153e> <91d0> +<153f> <9394> +<1540> <938a> +<1541> <9396> +<1542> <93a2> +<1543> <93b3> +<1544> <93ae> +<1545> <93ac> +<1546> <93b0> +<1547> <9398> +<1548> <939a> +<1549> <9397> +<154a> <95d4> +<154b> <95d6> +<154c> <95d0> +<154d> <95d5> +<154e> <96e2> +<154f> <96dc> +<1550> <96d9> +<1551> <96db> +<1552> <96de> +<1553> <9724> +<1554> <97a3> +<1555> <97a6> +<1556> <97ad> +<1557> <97f9> +<1558> <984d> +<1559> <984f> +<155a> <984c> +<155b> <984e> +<155c> <9853> +<155d> <98ba> +<1560> <993d> +<1561> <992e> +<1562> <99a5> +<1563> <9a0e> +<1564> <9ac1> +<1565> <9b03> +<1566> <9b06> +<1567> <9b4f> +<1568> <9b4e> +<1569> <9b4d> +<156a> <9bca> +<156b> <9bc9> +<156c> <9bfd> +<156d> <9bc8> +<156e> <9bc0> +<156f> <9d51> +<1570> <9d5d> +<1571> <9d60> +<1572> <9ee0> +<1573> <9f15> +<1574> <9f2c> +<1575> <5133> +<1576> <56a5> +<1577> <56a8> +<157a> <58e2> +<157b> <5bf5> +<157c> <9f90> +<157d> <5eec> +<157e> <61f2> +<157f> <61f7> +<1580> <61f6> +<1581> <61f5> +<1582> <6500> +<1583> <650f> +<1584> <66e0> +<1585> <66dd> +<1586> <6ae5> +<1587> <6add> +<1588> <6ada> +<1589> <6ad3> +<158a> <701b> +<158b> <701f> +<158c> <7028> +<158d> <701a> +<158e> <701d> +<158f> <7015> +<1590> <7018> +<1591> <7206> +<1592> <720d> +<1593> <7258> +<1594> <72a2> +<1595> <7378> +<1596> <737a> +<1597> <74bd> +<1598> <74ca> +<1599> <74e3> +<159a> <7587> +endbfchar + +100 beginbfchar +<159b> <7586> +<159c> <765f> +<159d> <7661> +<159e> <77c7> +<159f> <7919> +<15a0> <79b1> +<15a1> <7a6b> +<15a2> <7a69> +<15a5> <7c38> +<15a6> <7c3d> +<15a7> <7c37> +<15a8> <7c40> +<15a9> <7e6b> +<15aa> <7e6d> +<15ab> <7e79> +<15ae> <7e73> +<15af> <7f85> +<15b0> <7fb6> +<15b1> <7fb9> +<15b2> <7fb8> +<15b3> <81d8> +<15b4> <85e9> +<15b5> <85dd> +<15b6> <85ea> +<15b7> <85d5> +<15ba> <85f7> +<15bb> <87fb> +<15bc> <8805> +<15bd> <880d> +<15be> <87f9> +<15bf> <87fe> +<15c0> <8960> +<15c1> <895f> +<15c2> <8956> +<15c3> <895e> +<15c4> <8b41> +<15c5> <8b5c> +<15c6> <8b58> +<15c7> <8b49> +<15c8> <8b5a> +<15cb> <8b46> +<15cc> <8b59> +<15cd> <8d08> +<15ce> <8d0a> +<15cf> <8e7c> +<15d0> <8e72> +<15d1> <8e87> +<15d2> <8e76> +<15d3> <8e6c> +<15d4> <8e7a> +<15d5> <8e74> +<15d6> <8f54> +<15d7> <8f4e> +<15d8> <8fad> +<15db> <91b1> +<15dc> <91ae> +<15dd> <93e1> +<15de> <93d1> +<15df> <93df> +<15e0> <93c3> +<15e1> <93c8> +<15e4> <93d6> +<15e5> <93e2> +<15e6> <93cd> +<15e7> <93d8> +<15e8> <93e4> +<15e9> <93d7> +<15ea> <93e8> +<15eb> <95dc> +<15ec> <96b4> +<15ed> <96e3> +<15ee> <972a> +<15ef> <9727> +<15f0> <9761> +<15f1> <97dc> +<15f2> <97fb> +<15f3> <985e> +<15f4> <9858> +<15f5> <985b> +<15f6> <98bc> +<15f7> <9945> +<15f8> <9949> +<15f9> <9a16> +<15fa> <9a19> +<15fb> <9b0d> +<15fc> <9be8> +<15fd> <9be7> +<15fe> <9bd6> +<15ff> <9bdb> +<1600> <9d89> +<1601> <9d61> +<1602> <9d72> +<1603> <9d6a> +<1604> <9d6c> +<1605> <9e92> +<1606> <9e97> +<1607> <9e93> +<1608> <9eb4> +<1609> <52f8> +<160a> <56b7> +endbfchar + +100 beginbfchar +<160b> <56b6> +<160c> <56b4> +<160d> <56bc> +<160e> <58e4> +<160f> <5b40> +<1610> <5b43> +<1611> <5b7d> +<1612> <5bf6> +<1613> <5dc9> +<1614> <61f8> +<1615> <61fa> +<1616> <6518> +<1617> <6514> +<1618> <6519> +<1619> <66e6> +<161a> <6727> +<161b> <6aec> +<161c> <703e> +<161d> <7030> +<161e> <7032> +<161f> <7210> +<1620> <737b> +<1621> <74cf> +<1622> <7662> +<1623> <7665> +<1624> <7926> +<1625> <792a> +<1626> <792c> +<1627> <792b> +<1628> <7ac7> +<1629> <7af6> +<162a> <7c4c> +<162b> <7c43> +<162c> <7c4d> +<162f> <8fae> +<1630> <7e7d> +<1631> <7e7c> +<1632> <7e82> +<1633> <7f4c> +<1634> <8000> +<1635> <81da> +<1636> <8266> +<1637> <85fb> +<1638> <85f9> +<1639> <8611> +<163a> <85fa> +<163b> <8606> +<163c> <860b> +<163d> <8607> +<163e> <860a> +<1641> <8964> +<1642> <89ba> +<1643> <89f8> +<1644> <8b70> +<1645> <8b6c> +<1646> <8b66> +<1647> <8b6f> +<1648> <8b5f> +<1649> <8b6b> +<164a> <8d0f> +<164b> <8d0d> +<164c> <8e89> +<164d> <8e81> +<164e> <8e85> +<164f> <8e82> +<1650> <91b4> +<1651> <91cb> +<1652> <9418> +<1653> <9403> +<1654> <93fd> +<1655> <95e1> +<1656> <9730> +<1657> <98c4> +<1658> <9952> +<1659> <9951> +<165a> <99a8> +<165b> <9a2b> +<165c> <9a30> +<165d> <9a37> +<165e> <9a35> +<165f> <9c13> +<1660> <9c0d> +<1661> <9e79> +<1662> <9eb5> +<1663> <9ee8> +<1664> <9f2f> +<1665> <9f5f> +<1666> <9f63> +<1667> <9f61> +<166a> <56c1> +<166b> <56c0> +<166c> <56c2> +<166d> <5914> +<166e> <5c6c> +<166f> <5dcd> +<1670> <61fc> +<1671> <61fe> +<1672> <651d> +<1673> <651c> +<1674> <6595> +endbfchar + +100 beginbfchar +<1675> <66e9> +<1676> <6afb> +<1677> <6b04> +<1678> <6afa> +<1679> <6bb2> +<167a> <704c> +<167b> <721b> +<167c> <72a7> +<167d> <74d6> +<167e> <74d4> +<167f> <7669> +<1680> <77d3> +<1681> <7c50> +<1682> <7e8f> +<1683> <7e8c> +<1684> <7fbc> +<1685> <8617> +<1686> <862d> +<1687> <861a> +<1688> <8823> +<1689> <8822> +<168a> <8821> +<168b> <881f> +<168c> <896a> +<168d> <896c> +<168e> <89bd> +<168f> <8b74> +<1690> <8b77> +<1691> <8b7d> +<1692> <8d13> +<1693> <8e8a> +<1694> <8e8d> +<1695> <8e8b> +<1696> <8f5f> +<1697> <8faf> +<1698> <91ba> +<1699> <942e> +<169a> <9433> +<169b> <9435> +<169c> <943a> +<169d> <9438> +<169e> <9432> +<169f> <942b> +<16a0> <95e2> +<16a3> <9732> +<16a4> <97ff> +<16a5> <9867> +<16a6> <9865> +<16a7> <9957> +<16a8> <9a45> +<16a9> <9a43> +<16aa> <9a40> +<16ab> <9a3e> +<16ac> <9acf> +<16ad> <9b54> +<16ae> <9b51> +<16af> <9c2d> +<16b0> <9c25> +<16b1> <9daf> +<16b2> <9db4> +<16b3> <9dc2> +<16b4> <9db8> +<16b5> <9e9d> +<16b6> <9eef> +<16b7> <9f19> +<16b8> <9f5c> +<16bb> <513c> +<16bc> <513b> +<16bd> <56c8> +<16be> <56ca> +<16bf> <56c9> +<16c0> <5b7f> +<16c1> <5dd4> +<16c2> <5dd2> +<16c3> <5f4e> +<16c4> <61ff> +<16c5> <6524> +<16c6> <6b0a> +<16c7> <6b61> +<16c8> <7051> +<16c9> <7058> +<16ca> <7380> +<16cb> <74e4> +<16cc> <758a> +<16cd> <766e> +<16ce> <766c> +<16cf> <79b3> +<16d0> <7c60> +<16d1> <7c5f> +<16d2> <807e> +<16d3> <807d> +<16d4> <81df> +<16d5> <8972> +<16d6> <896f> +<16d7> <89fc> +<16d8> <8b80> +<16db> <8e91> +<16dc> <8e93> +<16dd> <8f61> +<16de> <9148> +endbfchar + +100 beginbfchar +<16df> <9444> +<16e4> <97c3> +<16e5> <97c1> +<16e6> <986b> +<16e7> <9955> +<16e8> <9a55> +<16e9> <9a4d> +<16ea> <9ad2> +<16eb> <9b1a> +<16ec> <9c49> +<16ed> <9c31> +<16ee> <9c3e> +<16ef> <9c3b> +<16f0> <9dd3> +<16f1> <9dd7> +<16f2> <9f34> +<16f3> <9f6c> +<16f4> <9f6a> +<16f5> <9f94> +<16f6> <56cc> +<16f7> <5dd6> +<16f8> <6200> +<16f9> <6523> +<16fa> <652b> +<16fb> <652a> +<16fc> <66ec> +<16fd> <6b10> +<16fe> <74da> +<16ff> <7aca> +<1700> <7c64> +<1701> <7c63> +<1702> <7c65> +<1703> <7e93> +<1704> <7e96> +<1705> <7e94> +<1706> <81e2> +<1707> <8638> +<1708> <863f> +<1709> <8831> +<170a> <8b8a> +<170b> <9090> +<170c> <908f> +<170d> <9463> +<170e> <9460> +<170f> <9464> +<1710> <9768> +<1711> <986f> +<1712> <995c> +<1715> <9a57> +<1718> <9ad1> +<1719> <9c54> +<171a> <9c57> +<171b> <9c56> +<171c> <9de5> +<171d> <9e9f> +<171e> <9ef4> +<171f> <56d1> +<1720> <58e9> +<1721> <652c> +<1722> <705e> +<1725> <77d7> +<1726> <7f50> +<1727> <7f88> +<1728> <8836> +<1729> <8839> +<172a> <8862> +<172b> <8b93> +<172c> <8b92> +<172d> <8b96> +<172e> <8277> +<172f> <8d1b> +<1730> <91c0> +<1731> <946a> +<1732> <9742> +<1733> <9748> +<1734> <9744> +<1735> <97c6> +<1736> <9870> +<1737> <9a5f> +<1738> <9b22> +<1739> <9b58> +<173a> <9c5f> +<173f> <9f07> +<1740> <9f77> +<1741> <9f72> +<1742> <5ef3> +<1743> <6b16> +<1744> <7063> +<1745> <7c6c> +<1746> <7c6e> +<1747> <883b> +<1748> <89c0> +<1749> <8ea1> +<174a> <91c1> +<174b> <9472> +<174c> <9470> +<174d> <9871> +<174e> <995e> +<174f> <9ad6> +<1750> <9b23> +endbfchar + +100 beginbfchar +<1751> <9ecc> +<1752> <7064> +<1753> <77da> +<1754> <8b9a> +<1755> <9477> +<1756> <97c9> +<1757> <9a62> +<1758> <9a65> +<1759> <7e9c> +<175a> <8b9c> +<175b> <8eaa> +<175c> <91c5> +<175f> <947c> +<1762> <9ef7> +<1763> <8c54> +<1764> <947f> +<1765> <9e1a> +<1766> <7228> +<1767> <9a6a> +<1768> <9b31> +<1769> <9e1b> +<176a> <9e1e> +<176b> <7c72> +<176c> <4e42> +<176d> <4e5c> +<176e> <51f5> +<176f> <531a> +<1770> <5382> +<1771> <4e07> +<1772> <4e0c> +<1773> <4e47> +<1774> <4e8d> +<1775> <56d7> +<1776> <5c6e> +<1777> <5f73> +<1778> <4e0f> +<1779> <5187> +<177a> <4e0e> +<177b> <4e2e> +<177c> <4e93> +<177d> <4ec2> +<177e> <4ec9> +<177f> <4ec8> +<1780> <5198> +<1781> <52fc> +<1782> <536c> +<1783> <53b9> +<1784> <5720> +<1785> <5903> +<1786> <592c> +<1787> <5c10> +<1788> <5dff> +<1789> <65e1> +<178a> <6bb3> +<178b> <6bcc> +<178c> <6c14> +<178d> <723f> +<178e> <4e31> +<178f> <4e3c> +<1790> <4ee8> +<1791> <4edc> +<1792> <4ee9> +<1793> <4ee1> +<1794> <4edd> +<1795> <4eda> +<1796> <520c> +<1797> <5209> +<1798> <531c> +<1799> <534c> +<179c> <5917> +<179d> <592f> +<179e> <5b81> +<179f> <5b84> +<17a0> <5c12> +<17a1> <5c3b> +<17a2> <5c74> +<17a3> <5c73> +<17a4> <5e04> +<17a5> <5e80> +<17a6> <5e82> +<17a7> <5fc9> +<17a8> <6209> +<17a9> <6250> +<17aa> <6c15> +<17ab> <6c36> +<17ac> <6c43> +<17ad> <6c3f> +<17ae> <6c3b> +<17af> <72ae> +<17b0> <72b0> +<17b1> <738a> +<17b2> <79b8> +<17b3> <808a> +<17b4> <961e> +<17b5> <4f0e> +<17b6> <4f18> +<17b7> <4f2c> +<17b8> <4ef5> +<17b9> <4f14> +<17ba> <4ef1> +endbfchar + +100 beginbfchar +<17bb> <4f00> +<17bc> <4ef7> +<17bd> <4f08> +<17be> <4f1d> +<17bf> <4f02> +<17c0> <4f05> +<17c1> <4f22> +<17c2> <4f13> +<17c3> <4f04> +<17c4> <4ef4> +<17c5> <4f12> +<17c6> <51b1> +<17c7> <5213> +<17c8> <5210> +<17c9> <52a6> +<17ca> <5322> +<17cb> <531f> +<17cc> <534d> +<17cd> <538a> +<17ce> <5407> +<17cf> <56e1> +<17d0> <56df> +<17d1> <572e> +<17d2> <572a> +<17d3> <5734> +<17d4> <593c> +<17d5> <5980> +<17d6> <597c> +<17d7> <5985> +<17d8> <597b> +<17d9> <597e> +<17da> <5977> +<17db> <597f> +<17dc> <5b56> +<17dd> <5c15> +<17de> <5c25> +<17df> <5c7c> +<17e2> <5c7e> +<17e3> <5ddf> +<17e4> <5e75> +<17e5> <5e84> +<17e6> <5f02> +<17e7> <5f1a> +<17e8> <5f74> +<17e9> <5fd5> +<17ea> <5fd4> +<17eb> <5fcf> +<17ec> <625c> +<17ed> <625e> +<17ee> <6264> +<17ef> <6261> +<17f0> <6266> +<17f1> <6262> +<17f2> <6259> +<17f3> <6260> +<17f4> <625a> +<17f5> <6265> +<17f6> <6537> +<17f7> <65ef> +<17f8> <65ee> +<17f9> <673e> +<17fa> <6739> +<17fb> <6738> +<17fc> <673b> +<17fd> <673a> +<17fe> <673f> +<17ff> <673c> +<1800> <6733> +<1801> <6c18> +<1802> <6c46> +<1803> <6c52> +<1804> <6c5c> +<1805> <6c4f> +<1806> <6c4a> +<1807> <6c54> +<180a> <7071> +<180b> <725e> +<180e> <738e> +<180f> <752a> +<1810> <767f> +<1811> <7a75> +<1812> <7f51> +<1813> <8278> +<1814> <827c> +<1815> <8280> +<1816> <827d> +<1817> <827f> +<1818> <864d> +<1819> <897e> +<181a> <9099> +<181d> <909b> +<181e> <9094> +<181f> <9622> +<1820> <9624> +<1821> <9620> +<1822> <9623> +<1823> <4f56> +<1824> <4f3b> +<1825> <4f62> +<1826> <4f49> +endbfchar + +100 beginbfchar +<1827> <4f53> +<1828> <4f64> +<1829> <4f3e> +<182a> <4f67> +<182b> <4f52> +<182c> <4f5f> +<182d> <4f41> +<182e> <4f58> +<182f> <4f2d> +<1830> <4f33> +<1831> <4f3f> +<1832> <4f61> +<1833> <518f> +<1834> <51b9> +<1835> <521c> +<1836> <521e> +<1837> <5221> +<183a> <5309> +<183b> <5363> +<183c> <5372> +<183f> <5430> +<1840> <5437> +<1841> <542a> +<1842> <5454> +<1843> <5445> +<1844> <5419> +<1845> <541c> +<1846> <5425> +<1847> <5418> +<1848> <543d> +<1849> <544f> +<184a> <5441> +<184b> <5428> +<184c> <5424> +<184d> <5447> +<184e> <56ee> +<184f> <56e7> +<1850> <56e5> +<1851> <5741> +<1852> <5745> +<1853> <574c> +<1854> <5749> +<1855> <574b> +<1856> <5752> +<1857> <5906> +<1858> <5940> +<1859> <59a6> +<185a> <5998> +<185b> <59a0> +<185c> <5997> +<185d> <598e> +<185e> <59a2> +<185f> <5990> +<1860> <598f> +<1861> <59a7> +<1862> <59a1> +<1863> <5b8e> +<1864> <5b92> +<1865> <5c28> +<1866> <5c2a> +<1867> <5c8d> +<1868> <5c8f> +<1869> <5c88> +<186a> <5c8b> +<186b> <5c89> +<186c> <5c92> +<186d> <5c8a> +<186e> <5c86> +<186f> <5c93> +<1870> <5c95> +<1871> <5de0> +<1872> <5e0a> +<1873> <5e0e> +<1874> <5e8b> +<1875> <5e89> +<1876> <5e8c> +<1877> <5e88> +<1878> <5e8d> +<1879> <5f05> +<187a> <5f1d> +<187b> <5f78> +<187c> <5f76> +<187d> <5fd2> +<187e> <5fd1> +<187f> <5fd0> +<1880> <5fed> +<1881> <5fe8> +<1882> <5fee> +<1883> <5ff3> +<1884> <5fe1> +<1885> <5fe4> +<1886> <5fe3> +<1887> <5ffa> +<1888> <5fef> +<1889> <5ff7> +<188a> <5ffb> +<188b> <6000> +<188c> <5ff4> +<188d> <623a> +<188e> <6283> +endbfchar + +100 beginbfchar +<188f> <628c> +<1892> <6294> +<1893> <6287> +<1894> <6271> +<1895> <627b> +<1896> <627a> +<1897> <6270> +<1898> <6281> +<1899> <6288> +<189a> <6277> +<189b> <627d> +<189c> <6272> +<189d> <6274> +<189e> <65f0> +<189f> <65f4> +<18a0> <65f3> +<18a1> <65f2> +<18a2> <65f5> +<18a3> <6745> +<18a4> <6747> +<18a5> <6759> +<18a6> <6755> +<18a7> <674c> +<18a8> <6748> +<18a9> <675d> +<18aa> <674d> +<18ab> <675a> +<18ac> <674b> +<18ad> <6bd0> +<18b0> <6c78> +<18b1> <6c67> +<18b2> <6c6b> +<18b3> <6c84> +<18b4> <6c8b> +<18b5> <6c8f> +<18b6> <6c71> +<18b7> <6c6f> +<18b8> <6c69> +<18b9> <6c9a> +<18ba> <6c6d> +<18bb> <6c87> +<18bc> <6c95> +<18bd> <6c9c> +<18be> <6c66> +<18bf> <6c73> +<18c0> <6c65> +<18c1> <6c7b> +<18c2> <6c8e> +<18c3> <7074> +<18c4> <707a> +<18c5> <7263> +<18c6> <72bf> +<18c7> <72bd> +<18c8> <72c3> +<18c9> <72c6> +<18ca> <72c1> +<18cb> <72ba> +<18cc> <72c5> +<18cd> <7395> +<18ce> <7397> +<18d1> <7392> +<18d2> <753a> +<18d3> <7539> +<18d6> <7681> +<18d7> <793d> +<18d8> <8034> +<18d9> <8095> +<18da> <8099> +<18db> <8090> +<18dc> <8092> +<18dd> <809c> +<18de> <8290> +<18df> <828f> +<18e0> <8285> +<18e1> <828e> +<18e2> <8291> +<18e3> <8293> +<18e4> <828a> +<18e7> <8c78> +<18e8> <8fc9> +<18e9> <8fbf> +<18ea> <909f> +<18eb> <90a1> +<18ec> <90a5> +<18ed> <909e> +<18ee> <90a7> +<18ef> <90a0> +<18f0> <9630> +<18f1> <9628> +<18f2> <962f> +<18f3> <962d> +<18f4> <4e33> +<18f5> <4f98> +<18f6> <4f7c> +<18f7> <4f85> +<18f8> <4f7d> +<18f9> <4f80> +<18fa> <4f87> +<18fb> <4f76> +<18fc> <4f74> +endbfchar + +100 beginbfchar +<18fd> <4f89> +<18fe> <4f84> +<18ff> <4f77> +<1900> <4f4c> +<1901> <4f97> +<1902> <4f6a> +<1903> <4f9a> +<1904> <4f79> +<1905> <4f81> +<1906> <4f78> +<1907> <4f90> +<1908> <4f9c> +<1909> <4f94> +<190a> <4f9e> +<190b> <4f92> +<190c> <4f82> +<190d> <4f95> +<190e> <4f6b> +<190f> <4f6e> +<1910> <519e> +<1911> <51bc> +<1912> <51be> +<1913> <5235> +<1916> <5246> +<1917> <5231> +<1918> <52bc> +<191b> <533c> +<191c> <5392> +<191d> <5394> +<191e> <5487> +<191f> <547f> +<1920> <5481> +<1921> <5491> +<1922> <5482> +<1923> <5488> +<1924> <546b> +<1925> <547a> +<1926> <547e> +<1927> <5465> +<1928> <546c> +<1929> <5474> +<192a> <5466> +<192b> <548d> +<192c> <546f> +<192d> <5461> +<192e> <5460> +<192f> <5498> +<1930> <5463> +<1931> <5467> +<1932> <5464> +<1933> <56f7> +<1934> <56f9> +<1935> <576f> +<1936> <5772> +<1937> <576d> +<1938> <576b> +<1939> <5771> +<193a> <5770> +<193b> <5776> +<193c> <5780> +<193d> <5775> +<193e> <577b> +<1941> <5762> +<1942> <5768> +<1943> <577d> +<1944> <590c> +<1945> <5945> +<1946> <59b5> +<1947> <59ba> +<1948> <59cf> +<1949> <59ce> +<194a> <59b2> +<194b> <59cc> +<194c> <59c1> +<194d> <59b6> +<194e> <59bc> +<194f> <59c3> +<1950> <59d6> +<1951> <59b1> +<1952> <59bd> +<1953> <59c0> +<1954> <59c8> +<1955> <59b4> +<1956> <59c7> +<1957> <5b62> +<1958> <5b65> +<1959> <5b93> +<195a> <5b95> +<195b> <5c44> +<195c> <5c47> +<195d> <5cae> +<195e> <5ca4> +<195f> <5ca0> +<1960> <5cb5> +<1961> <5caf> +<1962> <5ca8> +<1963> <5cac> +<1964> <5c9f> +<1965> <5ca3> +<1966> <5cad> +endbfchar + +100 beginbfchar +<1967> <5ca2> +<1968> <5caa> +<1969> <5ca7> +<196a> <5c9d> +<196b> <5ca5> +<196c> <5cb6> +<196d> <5cb0> +<196e> <5ca6> +<196f> <5e17> +<1970> <5e14> +<1971> <5e19> +<1972> <5f28> +<1976> <5f54> +<1977> <5f82> +<1978> <5f7e> +<1979> <5f7d> +<197a> <5fde> +<197b> <5fe5> +<197c> <602d> +<197d> <6026> +<197e> <6019> +<197f> <6032> +<1980> <600b> +<1981> <6034> +<1982> <600a> +<1983> <6017> +<1984> <6033> +<1985> <601a> +<1986> <601e> +<1987> <602c> +<1988> <6022> +<1989> <600d> +<198a> <6010> +<198b> <602e> +<198c> <6013> +<198d> <6011> +<198e> <600c> +<198f> <6009> +<1990> <601c> +<1991> <6214> +<1992> <623d> +<1993> <62ad> +<1994> <62b4> +<1995> <62d1> +<1996> <62be> +<1997> <62aa> +<1998> <62b6> +<1999> <62ca> +<199a> <62ae> +<199b> <62b3> +<199c> <62af> +<199d> <62bb> +<199e> <62a9> +<199f> <62b0> +<19a0> <62b8> +<19a1> <653d> +<19a2> <65a8> +<19a3> <65bb> +<19a4> <6609> +<19a5> <65fc> +<19a6> <6604> +<19a7> <6612> +<19a8> <6608> +<19a9> <65fb> +<19aa> <6603> +<19ab> <660b> +<19ac> <660d> +<19ad> <6605> +<19ae> <65fd> +<19af> <6611> +<19b0> <6610> +<19b1> <66f6> +<19b2> <670a> +<19b3> <6785> +<19b4> <676c> +<19b5> <678e> +<19b6> <6792> +<19b7> <6776> +<19b8> <677b> +<19b9> <6798> +<19ba> <6786> +<19bb> <6784> +<19bc> <6774> +<19bd> <678d> +<19be> <678c> +<19bf> <677a> +<19c0> <679f> +<19c1> <6791> +<19c2> <6799> +<19c3> <6783> +<19c4> <677d> +<19c5> <6781> +<19c8> <6794> +<19c9> <6b25> +<19ca> <6b80> +<19cb> <6b7e> +<19cc> <6bde> +<19cd> <6c1d> +<19ce> <6c93> +<19cf> <6cec> +endbfchar + +100 beginbfchar +<19d0> <6ceb> +<19d1> <6cee> +<19d2> <6cd9> +<19d3> <6cb6> +<19d4> <6cd4> +<19d5> <6cad> +<19d6> <6ce7> +<19d7> <6cb7> +<19d8> <6cd0> +<19d9> <6cc2> +<19da> <6cba> +<19db> <6cc3> +<19dc> <6cc6> +<19dd> <6ced> +<19de> <6cf2> +<19df> <6cd2> +<19e0> <6cdd> +<19e1> <6cb4> +<19e2> <6c8a> +<19e3> <6c9d> +<19e4> <6c80> +<19e5> <6cde> +<19e6> <6cc0> +<19e7> <6d30> +<19e8> <6ccd> +<19e9> <6cc7> +<19ea> <6cb0> +<19eb> <6cf9> +<19ec> <6ccf> +<19ed> <6ce9> +<19ee> <6cd1> +<19ef> <7094> +<19f0> <7098> +<19f1> <7085> +<19f2> <7093> +<19f3> <7086> +<19f4> <7084> +<19f5> <7091> +<19f6> <7096> +<19f7> <7082> +<19f8> <709a> +<19f9> <7083> +<19fa> <726a> +<19fb> <72d6> +<19fc> <72cb> +<19fd> <72d8> +<19fe> <72c9> +<19ff> <72dc> +<1a00> <72d2> +<1a01> <72d4> +<1a02> <72da> +<1a03> <72cc> +<1a04> <72d1> +<1a05> <73a4> +<1a06> <73a1> +<1a07> <73ad> +<1a08> <73a6> +<1a09> <73a2> +<1a0a> <73a0> +<1a0b> <73ac> +<1a0c> <739d> +<1a0d> <74dd> +<1a0e> <74e8> +<1a11> <753e> +<1a12> <758c> +<1a13> <7598> +<1a14> <76af> +<1a15> <76f3> +<1a16> <76f1> +<1a17> <76f0> +<1a18> <76f5> +<1a19> <77f8> +<1a1a> <77fc> +<1a1b> <77f9> +<1a1c> <77fb> +<1a1d> <77fa> +<1a1e> <77f7> +<1a1f> <7942> +<1a20> <793f> +<1a21> <79c5> +<1a22> <7a78> +<1a23> <7a7b> +<1a24> <7afb> +<1a25> <7c75> +<1a26> <7cfd> +<1a27> <8035> +<1a28> <808f> +<1a29> <80ae> +<1a2a> <80a3> +<1a2b> <80b8> +<1a2c> <80b5> +<1a2d> <80ad> +<1a2e> <8220> +<1a2f> <82a0> +<1a30> <82c0> +<1a31> <82ab> +<1a32> <829a> +<1a33> <8298> +<1a34> <829b> +<1a35> <82b5> +endbfchar + +100 beginbfchar +<1a36> <82a7> +<1a37> <82ae> +<1a38> <82bc> +<1a39> <829e> +<1a3a> <82ba> +<1a3b> <82b4> +<1a3c> <82a8> +<1a3d> <82a1> +<1a3e> <82a9> +<1a3f> <82c2> +<1a40> <82a4> +<1a41> <82c3> +<1a42> <82b6> +<1a43> <82a2> +<1a44> <8670> +<1a45> <866f> +<1a48> <8c56> +<1a49> <8fd2> +<1a4a> <8fcb> +<1a4b> <8fd3> +<1a4c> <8fcd> +<1a4d> <8fd6> +<1a4e> <8fd5> +<1a4f> <8fd7> +<1a50> <90b2> +<1a51> <90b4> +<1a52> <90af> +<1a53> <90b3> +<1a54> <90b0> +<1a55> <9639> +<1a56> <963d> +<1a57> <963c> +<1a58> <963a> +<1a59> <9643> +<1a5a> <4fcd> +<1a5b> <4fc5> +<1a5c> <4fd3> +<1a5d> <4fb2> +<1a5e> <4fc9> +<1a5f> <4fcb> +<1a60> <4fc1> +<1a61> <4fd4> +<1a62> <4fdc> +<1a63> <4fd9> +<1a64> <4fbb> +<1a65> <4fb3> +<1a66> <4fdb> +<1a67> <4fc7> +<1a68> <4fd6> +<1a69> <4fba> +<1a6a> <4fc0> +<1a6b> <4fb9> +<1a6c> <4fec> +<1a6d> <5244> +<1a6e> <5249> +<1a6f> <52c0> +<1a70> <52c2> +<1a71> <533d> +<1a72> <537c> +<1a73> <5397> +<1a74> <5396> +<1a75> <5399> +<1a76> <5398> +<1a77> <54ba> +<1a78> <54a1> +<1a79> <54ad> +<1a7a> <54a5> +<1a7b> <54cf> +<1a7c> <54c3> +<1a7d> <830d> +<1a7e> <54b7> +<1a7f> <54ae> +<1a80> <54d6> +<1a81> <54b6> +<1a84> <54a0> +<1a85> <5470> +<1a86> <54bc> +<1a87> <54a2> +<1a88> <54be> +<1a89> <5472> +<1a8a> <54de> +<1a8b> <54b0> +<1a8c> <57b5> +<1a8f> <57a4> +<1a90> <578c> +<1a91> <5797> +<1a92> <579d> +<1a93> <579b> +<1a94> <5794> +<1a95> <5798> +<1a96> <578f> +<1a97> <5799> +<1a98> <57a5> +<1a99> <579a> +<1a9a> <5795> +<1a9b> <58f4> +<1a9c> <590d> +<1a9d> <5953> +<1a9e> <59e1> +<1a9f> <59de> +endbfchar + +100 beginbfchar +<1aa0> <59ee> +<1aa1> <5a00> +<1aa2> <59f1> +<1aa3> <59dd> +<1aa4> <59fa> +<1aa5> <59fd> +<1aa6> <59fc> +<1aa7> <59f6> +<1aa8> <59e4> +<1aa9> <59f2> +<1aaa> <59f7> +<1aab> <59db> +<1aac> <59e9> +<1aad> <59f3> +<1aae> <59f5> +<1aaf> <59e0> +<1ab0> <59fe> +<1ab1> <59f4> +<1ab2> <59ed> +<1ab3> <5ba8> +<1ab4> <5c4c> +<1ab5> <5cd0> +<1ab6> <5cd8> +<1ab7> <5ccc> +<1ab8> <5cd7> +<1ab9> <5ccb> +<1aba> <5cdb> +<1abb> <5cde> +<1abc> <5cda> +<1abd> <5cc9> +<1abe> <5cc7> +<1abf> <5cca> +<1ac0> <5cd6> +<1ac3> <5ccf> +<1ac4> <5cc8> +<1ac5> <5cc6> +<1ac6> <5cce> +<1ac7> <5cdf> +<1ac8> <5cf8> +<1ac9> <5df9> +<1acd> <5e20> +<1ace> <5e24> +<1acf> <5eb0> +<1ad0> <5ea4> +<1ad1> <5ea2> +<1ad2> <5e9b> +<1ad3> <5ea3> +<1ad4> <5ea5> +<1ad5> <5f07> +<1ad6> <5f2e> +<1ad7> <5f56> +<1ad8> <5f86> +<1ad9> <6037> +<1ada> <6039> +<1adb> <6054> +<1adc> <6072> +<1add> <605e> +<1ade> <6045> +<1adf> <6053> +<1ae0> <6047> +<1ae1> <6049> +<1ae2> <605b> +<1ae3> <604c> +<1ae4> <6040> +<1ae5> <6042> +<1ae6> <605f> +<1ae7> <6024> +<1ae8> <6044> +<1ae9> <6058> +<1aea> <6066> +<1aeb> <606e> +<1aee> <62cf> +<1aef> <630d> +<1af0> <630b> +<1af1> <62f5> +<1af2> <630e> +<1af3> <6303> +<1af4> <62eb> +<1af5> <62f9> +<1af6> <630f> +<1af7> <630c> +<1af8> <62f8> +<1af9> <62f6> +<1afa> <6300> +<1afd> <62fa> +<1afe> <6315> +<1aff> <62fb> +<1b00> <62f0> +<1b01> <6541> +<1b02> <6543> +<1b03> <65aa> +<1b04> <65bf> +<1b05> <6636> +<1b06> <6621> +<1b07> <6632> +<1b08> <6635> +<1b09> <661c> +<1b0a> <6626> +<1b0b> <6622> +<1b0c> <6633> +endbfchar + +100 beginbfchar +<1b0d> <662b> +<1b0e> <663a> +<1b0f> <661d> +<1b10> <6634> +<1b11> <6639> +<1b12> <662e> +<1b15> <67c1> +<1b16> <67f2> +<1b17> <67c8> +<1b18> <67ba> +<1b19> <67dc> +<1b1a> <67bb> +<1b1b> <67f8> +<1b1c> <67d8> +<1b1d> <67c0> +<1b1e> <67b7> +<1b1f> <67c5> +<1b20> <67eb> +<1b21> <67e4> +<1b22> <67df> +<1b23> <67b5> +<1b24> <67cd> +<1b25> <67b3> +<1b26> <67f7> +<1b27> <67f6> +<1b28> <67ee> +<1b29> <67e3> +<1b2a> <67c2> +<1b2b> <67b9> +<1b2c> <67ce> +<1b2d> <67e7> +<1b2e> <67f0> +<1b2f> <67b2> +<1b30> <67fc> +<1b31> <67c6> +<1b32> <67ed> +<1b33> <67cc> +<1b34> <67ae> +<1b35> <67e6> +<1b36> <67db> +<1b37> <67fa> +<1b3a> <67c3> +<1b3b> <67ea> +<1b3c> <67cb> +<1b3d> <6b28> +<1b3e> <6b82> +<1b3f> <6b84> +<1b40> <6bb6> +<1b41> <6bd6> +<1b42> <6bd8> +<1b43> <6be0> +<1b46> <6d28> +<1b47> <6d34> +<1b48> <6d2d> +<1b49> <6d1f> +<1b4a> <6d3c> +<1b4b> <6d3f> +<1b4c> <6d12> +<1b4d> <6d0a> +<1b4e> <6cda> +<1b4f> <6d33> +<1b50> <6d04> +<1b51> <6d19> +<1b52> <6d3a> +<1b53> <6d1a> +<1b54> <6d11> +<1b55> <6d00> +<1b56> <6d1d> +<1b57> <6d42> +<1b58> <6d01> +<1b59> <6d18> +<1b5a> <6d37> +<1b5b> <6d03> +<1b5c> <6d0f> +<1b5d> <6d40> +<1b5e> <6d07> +<1b5f> <6d20> +<1b60> <6d2c> +<1b61> <6d08> +<1b62> <6d22> +<1b63> <6d09> +<1b64> <6d10> +<1b65> <70b7> +<1b66> <709f> +<1b67> <70be> +<1b68> <70b1> +<1b69> <70b0> +<1b6a> <70a1> +<1b6d> <70a9> +<1b6e> <7241> +<1b71> <726c> +<1b72> <7270> +<1b73> <7273> +<1b74> <726e> +<1b75> <72ca> +<1b76> <72e4> +<1b77> <72e8> +<1b78> <72eb> +<1b79> <72df> +<1b7a> <72ea> +endbfchar + +100 beginbfchar +<1b7b> <72e6> +<1b7c> <72e3> +<1b7d> <7385> +<1b7e> <73cc> +<1b7f> <73c2> +<1b80> <73c8> +<1b81> <73c5> +<1b82> <73b9> +<1b83> <73b6> +<1b84> <73b5> +<1b85> <73b4> +<1b86> <73eb> +<1b87> <73bf> +<1b88> <73c7> +<1b89> <73be> +<1b8a> <73c3> +<1b8b> <73c6> +<1b8c> <73b8> +<1b8d> <73cb> +<1b8e> <74ec> +<1b8f> <74ee> +<1b90> <752e> +<1b93> <75a7> +<1b94> <75aa> +<1b95> <7679> +<1b96> <76c4> +<1b97> <7708> +<1b9b> <770a> +<1b9c> <76f7> +<1b9d> <76fb> +<1b9e> <76fa> +<1ba1> <7806> +<1ba4> <7805> +<1ba5> <7810> +<1ba6> <780f> +<1ba7> <780e> +<1ba8> <7809> +<1ba9> <7803> +<1baa> <7813> +<1bab> <794a> +<1bac> <794c> +<1bad> <794b> +<1bae> <7945> +<1baf> <7944> +<1bb0> <79d5> +<1bb1> <79cd> +<1bb2> <79cf> +<1bb3> <79d6> +<1bb4> <79ce> +<1bb5> <7a80> +<1bb6> <7a7e> +<1bb7> <7ad1> +<1bba> <7c7a> +<1bc0> <7d03> +<1bc1> <7d08> +<1bc2> <7d01> +<1bc3> <7f58> +<1bc4> <7f91> +<1bc5> <7f8d> +<1bc6> <7fbe> +<1bc7> <8007> +<1bca> <8014> +<1bcb> <8037> +<1bcc> <80d8> +<1bcd> <80c7> +<1bce> <80e0> +<1bcf> <80d1> +<1bd0> <80c8> +<1bd1> <80c2> +<1bd2> <80d0> +<1bd3> <80c5> +<1bd4> <80e3> +<1bd5> <80d9> +<1bd6> <80dc> +<1bd7> <80ca> +<1bd8> <80d5> +<1bd9> <80c9> +<1bda> <80cf> +<1bdb> <80d7> +<1bdc> <80e6> +<1bdd> <80cd> +<1bde> <81ff> +<1bdf> <8221> +<1be0> <8294> +<1be1> <82d9> +<1be2> <82fe> +<1be3> <82f9> +<1be4> <8307> +<1be5> <82e8> +<1be6> <8300> +<1be7> <82d5> +<1be8> <833a> +<1be9> <82eb> +<1bea> <82d6> +<1beb> <82f4> +<1bec> <82ec> +<1bed> <82e1> +<1bee> <82f2> +<1bef> <82f5> +<1bf0> <830c> +endbfchar + +100 beginbfchar +<1bf1> <82fb> +<1bf2> <82f6> +<1bf3> <82f0> +<1bf4> <82ea> +<1bf5> <82e4> +<1bf6> <82e0> +<1bf7> <82fa> +<1bf8> <82f3> +<1bf9> <82ed> +<1bfa> <8677> +<1bfb> <8674> +<1bfc> <867c> +<1bfd> <8673> +<1bfe> <8841> +<1bff> <884e> +<1c00> <8867> +<1c01> <886a> +<1c02> <8869> +<1c03> <89d3> +<1c04> <8a04> +<1c05> <8a07> +<1c06> <8d72> +<1c07> <8fe3> +<1c08> <8fe1> +<1c09> <8fee> +<1c0a> <8fe0> +<1c0b> <90f1> +<1c0c> <90bd> +<1c0d> <90bf> +<1c0e> <90d5> +<1c0f> <90c5> +<1c10> <90be> +<1c11> <90c7> +<1c12> <90cb> +<1c13> <90c8> +<1c14> <91d4> +<1c15> <91d3> +<1c16> <9654> +<1c17> <964f> +<1c18> <9651> +<1c19> <9653> +<1c1a> <964a> +<1c1b> <964e> +<1c1c> <501e> +<1c1d> <5005> +<1c1e> <5007> +<1c1f> <5013> +<1c20> <5022> +<1c21> <5030> +<1c22> <501b> +<1c23> <4ff5> +<1c24> <4ff4> +<1c25> <5033> +<1c26> <5037> +<1c27> <502c> +<1c2a> <5017> +<1c2b> <501c> +<1c2c> <5020> +<1c2d> <5027> +<1c2e> <5035> +<1c2f> <502f> +<1c30> <5031> +<1c31> <500e> +<1c32> <515a> +<1c33> <5194> +<1c34> <5193> +<1c35> <51ca> +<1c38> <51c8> +<1c39> <51ce> +<1c3a> <5261> +<1c3b> <525a> +<1c3c> <5252> +<1c3f> <5255> +<1c40> <5262> +<1c41> <52cd> +<1c42> <530e> +<1c43> <539e> +<1c44> <5526> +<1c45> <54e2> +<1c46> <5517> +<1c47> <5512> +<1c48> <54e7> +<1c49> <54f3> +<1c4a> <54e4> +<1c4b> <551a> +<1c4c> <54ff> +<1c4d> <5504> +<1c4e> <5508> +<1c4f> <54eb> +<1c50> <5511> +<1c51> <5505> +<1c52> <54f1> +<1c53> <550a> +<1c54> <54fb> +<1c57> <54e0> +<1c58> <550e> +<1c59> <5503> +<1c5a> <550b> +<1c5d> <57cc> +<1c5e> <5832> +endbfchar + +100 beginbfchar +<1c5f> <57d5> +<1c60> <57d2> +<1c61> <57ba> +<1c62> <57c6> +<1c63> <57bd> +<1c64> <57bc> +<1c65> <57b8> +<1c66> <57b6> +<1c67> <57bf> +<1c68> <57c7> +<1c69> <57d0> +<1c6a> <57b9> +<1c6b> <57c1> +<1c6c> <590e> +<1c6d> <594a> +<1c6e> <5a19> +<1c6f> <5a16> +<1c72> <5a15> +<1c73> <5a0f> +<1c74> <5a17> +<1c75> <5a0a> +<1c76> <5a1e> +<1c77> <5a33> +<1c78> <5b6c> +<1c79> <5ba7> +<1c7a> <5bad> +<1c7b> <5bac> +<1c7c> <5c03> +<1c7d> <5c56> +<1c7e> <5c54> +<1c7f> <5cec> +<1c80> <5cff> +<1c81> <5cee> +<1c82> <5cf1> +<1c83> <5cf7> +<1c84> <5d00> +<1c85> <5cf9> +<1c86> <5e29> +<1c87> <5e28> +<1c88> <5ea8> +<1c89> <5eae> +<1c8a> <5eaa> +<1c8b> <5eac> +<1c8c> <5f33> +<1c8d> <5f30> +<1c8e> <5f67> +<1c8f> <605d> +<1c90> <605a> +<1c91> <6067> +<1c92> <6041> +<1c93> <60a2> +<1c94> <6088> +<1c95> <6080> +<1c96> <6092> +<1c97> <6081> +<1c98> <609d> +<1c99> <6083> +<1c9a> <6095> +<1c9b> <609b> +<1c9c> <6097> +<1c9d> <6087> +<1c9e> <609c> +<1c9f> <608e> +<1ca0> <6219> +<1ca1> <6246> +<1ca2> <62f2> +<1ca3> <6310> +<1ca4> <6356> +<1ca5> <632c> +<1ca8> <6336> +<1ca9> <6343> +<1caa> <63e4> +<1cab> <6339> +<1cac> <634b> +<1cad> <634a> +<1cae> <633c> +<1caf> <6329> +<1cb0> <6341> +<1cb1> <6334> +<1cb2> <6358> +<1cb3> <6354> +<1cb4> <6359> +<1cb5> <632d> +<1cb6> <6347> +<1cb7> <6333> +<1cb8> <635a> +<1cb9> <6351> +<1cba> <6338> +<1cbb> <6357> +<1cbc> <6340> +<1cbd> <6348> +<1cbe> <654a> +<1cbf> <6546> +<1cc0> <65c6> +<1cc3> <65c2> +<1cc4> <664a> +<1cc5> <665f> +<1cc6> <6647> +<1cc7> <6651> +<1cca> <681f> +endbfchar + +100 beginbfchar +<1ccb> <681a> +<1ccc> <6849> +<1ccf> <683b> +<1cd0> <684b> +<1cd1> <684f> +<1cd2> <6816> +<1cd3> <6831> +<1cd4> <681c> +<1cd5> <6835> +<1cd6> <682b> +<1cd7> <682d> +<1cd8> <682f> +<1cd9> <684e> +<1cda> <6844> +<1cdb> <6834> +<1cdc> <681d> +<1cdd> <6812> +<1cde> <6814> +<1cdf> <6826> +<1ce0> <6828> +<1ce1> <682e> +<1ce2> <684d> +<1ce3> <683a> +<1ce4> <6825> +<1ce5> <6820> +<1ce6> <6b2c> +<1ce7> <6b2f> +<1ce8> <6b2d> +<1ce9> <6b31> +<1cea> <6b34> +<1ceb> <6b6d> +<1cec> <8082> +<1ced> <6b88> +<1cee> <6be6> +<1cef> <6be4> +<1cf0> <6be8> +<1cf1> <6be3> +<1cf2> <6be2> +<1cf3> <6be7> +<1cf4> <6c25> +<1cf5> <6d7a> +<1cf8> <6d76> +<1cf9> <6d0d> +<1cfa> <6d61> +<1cfb> <6d92> +<1cfc> <6d58> +<1cfd> <6d62> +<1cfe> <6d6d> +<1cff> <6d6f> +<1d00> <6d91> +<1d01> <6d8d> +<1d02> <6def> +<1d03> <6d7f> +<1d04> <6d86> +<1d05> <6d5e> +<1d06> <6d67> +<1d07> <6d60> +<1d08> <6d97> +<1d09> <6d70> +<1d0a> <6d7c> +<1d0b> <6d5f> +<1d0c> <6d82> +<1d0d> <6d98> +<1d0e> <6d2f> +<1d0f> <6d68> +<1d10> <6d8b> +<1d11> <6d7e> +<1d12> <6d80> +<1d13> <6d84> +<1d14> <6d16> +<1d15> <6d83> +<1d16> <6d7b> +<1d17> <6d7d> +<1d18> <6d75> +<1d19> <6d90> +<1d1a> <70dc> +<1d1b> <70d3> +<1d1c> <70d1> +<1d1d> <70dd> +<1d1e> <70cb> +<1d1f> <7f39> +<1d20> <70e2> +<1d21> <70d7> +<1d22> <70d2> +<1d23> <70de> +<1d24> <70e0> +<1d25> <70d4> +<1d26> <70cd> +<1d2a> <70da> +<1d2b> <70ce> +<1d2c> <70e1> +<1d2d> <7242> +<1d2e> <7278> +<1d2f> <7277> +<1d30> <7276> +<1d31> <7300> +<1d32> <72fa> +<1d33> <72f4> +<1d34> <72fe> +<1d35> <72f6> +endbfchar + +100 beginbfchar +<1d36> <72f3> +<1d37> <72fb> +<1d38> <7301> +<1d39> <73d3> +<1d3a> <73d9> +<1d3b> <73e5> +<1d3c> <73d6> +<1d3d> <73bc> +<1d3e> <73e7> +<1d3f> <73e3> +<1d40> <73e9> +<1d41> <73dc> +<1d42> <73d2> +<1d43> <73db> +<1d44> <73d4> +<1d45> <73dd> +<1d46> <73da> +<1d49> <73e8> +<1d4e> <7521> +<1d4f> <755b> +<1d50> <755f> +<1d51> <75b0> +<1d52> <75c1> +<1d53> <75bb> +<1d54> <75c4> +<1d55> <75c0> +<1d56> <75bf> +<1d57> <75b6> +<1d58> <75ba> +<1d59> <768a> +<1d5a> <76c9> +<1d5b> <771d> +<1d5c> <771b> +<1d5d> <7710> +<1d5e> <7713> +<1d5f> <7712> +<1d60> <7723> +<1d61> <7711> +<1d62> <7715> +<1d65> <7722> +<1d66> <7727> +<1d67> <7823> +<1d68> <782c> +<1d69> <7822> +<1d6a> <7835> +<1d6b> <782f> +<1d6c> <7828> +<1d6d> <782e> +<1d6e> <782b> +<1d6f> <7821> +<1d70> <7829> +<1d71> <7833> +<1d72> <782a> +<1d73> <7831> +<1d74> <7954> +<1d75> <795b> +<1d76> <794f> +<1d77> <795c> +<1d78> <7953> +<1d79> <7952> +<1d7a> <7951> +<1d7d> <79e0> +<1d7e> <79ee> +<1d7f> <79ed> +<1d80> <79ea> +<1d81> <79dc> +<1d82> <79de> +<1d83> <79dd> +<1d84> <7a86> +<1d85> <7a89> +<1d86> <7a85> +<1d89> <7a8a> +<1d8a> <7a87> +<1d8b> <7ad8> +<1d8c> <7b10> +<1d8d> <7b04> +<1d8e> <7b13> +<1d8f> <7b05> +<1d90> <7b0f> +<1d91> <7b08> +<1d92> <7b0a> +<1d93> <7b0e> +<1d94> <7b09> +<1d95> <7b12> +<1d96> <7c84> +<1d97> <7c91> +<1d98> <7c8a> +<1d99> <7c8c> +<1d9a> <7c88> +<1d9b> <7c8d> +<1d9c> <7c85> +<1d9d> <7d1e> +<1d9e> <7d1d> +<1d9f> <7d11> +<1da0> <7d0e> +<1da1> <7d18> +<1da2> <7d16> +<1da3> <7d13> +<1da4> <7d1f> +<1da5> <7d12> +endbfchar + +100 beginbfchar +<1da6> <7d0f> +<1da7> <7d0c> +<1da8> <7f5c> +<1da9> <7f61> +<1daa> <7f5e> +<1dab> <7f60> +<1dac> <7f5d> +<1dad> <7f5b> +<1dae> <7f96> +<1daf> <7f92> +<1db0> <7fc3> +<1db1> <7fc2> +<1db2> <7fc0> +<1db3> <8016> +<1db4> <803e> +<1db5> <8039> +<1db6> <80fa> +<1db7> <80f2> +<1db8> <80f9> +<1db9> <80f5> +<1dba> <8101> +<1dbb> <80fb> +<1dbc> <8100> +<1dbd> <8201> +<1dbe> <822f> +<1dbf> <8225> +<1dc0> <8333> +<1dc1> <832d> +<1dc2> <8344> +<1dc3> <8319> +<1dc4> <8351> +<1dc5> <8325> +<1dc6> <8356> +<1dc7> <833f> +<1dc8> <8341> +<1dc9> <8326> +<1dca> <831c> +<1dcb> <8322> +<1dcc> <8342> +<1dcd> <834e> +<1dce> <831b> +<1dcf> <832a> +<1dd0> <8308> +<1dd1> <833c> +<1dd2> <834d> +<1dd3> <8316> +<1dd4> <8324> +<1dd5> <8320> +<1dd6> <8337> +<1dd7> <832f> +<1dd8> <8329> +<1dd9> <8347> +<1dda> <8345> +<1ddb> <834c> +<1ddc> <8353> +<1ddd> <831e> +<1dde> <832c> +<1ddf> <834b> +<1de0> <8327> +<1de1> <8348> +<1de2> <8653> +<1de3> <8652> +<1de4> <86a2> +<1de5> <86a8> +<1de6> <8696> +<1de7> <868d> +<1de8> <8691> +<1de9> <869e> +<1dea> <8687> +<1deb> <8697> +<1dec> <8686> +<1ded> <868b> +<1dee> <869a> +<1def> <8685> +<1df0> <86a5> +<1df1> <8699> +<1df2> <86a1> +<1df3> <86a7> +<1df4> <8695> +<1df5> <8698> +<1df6> <868e> +<1df7> <869d> +<1df8> <8690> +<1df9> <8694> +<1dfc> <886d> +<1dff> <8872> +<1e00> <8880> +<1e01> <8871> +<1e02> <887f> +<1e03> <886f> +<1e04> <8883> +<1e05> <887e> +<1e06> <8874> +<1e07> <887c> +<1e08> <8a12> +<1e09> <8c47> +<1e0a> <8c57> +<1e0b> <8c7b> +<1e0c> <8ca4> +<1e0d> <8ca3> +endbfchar + +100 beginbfchar +<1e0e> <8d76> +<1e0f> <8d78> +<1e10> <8db5> +<1e11> <8db7> +<1e12> <8db6> +<1e13> <8ed1> +<1e14> <8ed3> +<1e15> <8ffe> +<1e16> <8ff5> +<1e17> <9002> +<1e18> <8fff> +<1e19> <8ffb> +<1e1a> <9004> +<1e1b> <8ffc> +<1e1c> <8ff6> +<1e1d> <90d6> +<1e1e> <90e0> +<1e21> <90e3> +<1e22> <90df> +<1e23> <90e5> +<1e24> <90d8> +<1e25> <90db> +<1e26> <90d7> +<1e27> <90dc> +<1e28> <90e4> +<1e29> <9150> +<1e2c> <91d5> +<1e2d> <91e2> +<1e2e> <91da> +<1e2f> <965c> +<1e30> <965f> +<1e31> <96bc> +<1e32> <98e3> +<1e33> <9adf> +<1e34> <9b2f> +<1e35> <4e7f> +<1e36> <5070> +<1e37> <506a> +<1e38> <5061> +<1e39> <505e> +<1e3a> <5060> +<1e3b> <5053> +<1e3c> <504b> +<1e3d> <505d> +<1e3e> <5072> +<1e3f> <5048> +<1e40> <504d> +<1e41> <5041> +<1e42> <505b> +<1e43> <504a> +<1e44> <5062> +<1e45> <5015> +<1e46> <5045> +<1e47> <505f> +<1e48> <5069> +<1e49> <506b> +<1e4c> <5046> +<1e4d> <5040> +<1e4e> <506e> +<1e4f> <5073> +<1e50> <5057> +<1e51> <5051> +<1e52> <51d0> +<1e53> <526b> +<1e54> <526d> +<1e55> <526c> +<1e56> <526e> +<1e57> <52d6> +<1e58> <52d3> +<1e59> <532d> +<1e5a> <539c> +<1e5d> <553c> +<1e5e> <554d> +<1e5f> <5550> +<1e60> <5534> +<1e61> <552a> +<1e62> <5551> +<1e63> <5562> +<1e64> <5536> +<1e65> <5535> +<1e66> <5530> +<1e67> <5552> +<1e68> <5545> +<1e69> <550c> +<1e6a> <5532> +<1e6b> <5565> +<1e6c> <554e> +<1e6d> <5539> +<1e6e> <5548> +<1e6f> <552d> +<1e70> <553b> +<1e71> <5540> +<1e72> <554b> +<1e73> <570a> +<1e74> <5707> +<1e75> <57fb> +<1e76> <5814> +<1e77> <57e2> +<1e78> <57f6> +<1e79> <57dc> +endbfchar + +100 beginbfchar +<1e7a> <57f4> +<1e7b> <5800> +<1e7c> <57ed> +<1e7d> <57fd> +<1e7e> <5808> +<1e7f> <57f8> +<1e80> <580b> +<1e81> <57f3> +<1e82> <57cf> +<1e83> <5807> +<1e84> <57ee> +<1e85> <57e3> +<1e86> <57f2> +<1e87> <57e5> +<1e88> <57ec> +<1e89> <57e1> +<1e8a> <580e> +<1e8b> <57fc> +<1e8c> <5810> +<1e8d> <57e7> +<1e8e> <5801> +<1e8f> <580c> +<1e90> <57f1> +<1e91> <57e9> +<1e92> <57f0> +<1e93> <580d> +<1e94> <5804> +<1e95> <595c> +<1e96> <5a60> +<1e97> <5a58> +<1e98> <5a55> +<1e99> <5a67> +<1e9a> <5a5e> +<1e9b> <5a38> +<1e9c> <5a35> +<1e9d> <5a6d> +<1e9e> <5a50> +<1e9f> <5a5f> +<1ea0> <5a65> +<1ea1> <5a6c> +<1ea2> <5a53> +<1ea3> <5a64> +<1ea4> <5a57> +<1ea5> <5a43> +<1ea6> <5a5d> +<1ea7> <5a52> +<1ea8> <5a44> +<1ea9> <5a5b> +<1eaa> <5a48> +<1eab> <5a8e> +<1eac> <5a3e> +<1ead> <5a4d> +<1eae> <5a39> +<1eaf> <5a4c> +<1eb0> <5a70> +<1eb1> <5a69> +<1eb2> <5a47> +<1eb3> <5a51> +<1eb4> <5a56> +<1eb5> <5a42> +<1eb6> <5a5c> +<1eb7> <5b72> +<1eb8> <5b6e> +<1eb9> <5bc1> +<1eba> <5bc0> +<1ebb> <5c59> +<1ebc> <5d1e> +<1ebd> <5d0b> +<1ebe> <5d1d> +<1ebf> <5d1a> +<1ec0> <5d20> +<1ec1> <5d0c> +<1ec2> <5d28> +<1ec3> <5d0d> +<1ec4> <5d26> +<1ec5> <5d25> +<1ec6> <5d0f> +<1ec7> <5d30> +<1ec8> <5d12> +<1ec9> <5d23> +<1eca> <5d1f> +<1ecb> <5d2e> +<1ecc> <5e3e> +<1ecd> <5e34> +<1ece> <5eb1> +<1ecf> <5eb4> +<1ed0> <5eb9> +<1ed3> <5f36> +<1ed4> <5f38> +<1ed5> <5f9b> +<1ed6> <5f96> +<1ed7> <5f9f> +<1ed8> <608a> +<1ed9> <6090> +<1eda> <6086> +<1edb> <60be> +<1edc> <60b0> +<1edd> <60ba> +<1ee0> <60cf> +<1ee1> <60e4> +endbfchar + +100 beginbfchar +<1ee2> <60d9> +<1ee3> <60dd> +<1ee4> <60c8> +<1ee5> <60b1> +<1ee6> <60db> +<1ee7> <60b7> +<1ee8> <60ca> +<1ee9> <60bf> +<1eea> <60c3> +<1eeb> <60cd> +<1eec> <60c0> +<1eed> <6332> +<1eee> <6365> +<1eef> <638a> +<1ef0> <6382> +<1ef1> <637d> +<1ef2> <63bd> +<1ef3> <639e> +<1ef4> <63ad> +<1ef5> <639d> +<1ef6> <6397> +<1ef7> <63ab> +<1ef8> <638e> +<1ef9> <636f> +<1efa> <6387> +<1efb> <6390> +<1efc> <636e> +<1efd> <63af> +<1efe> <6375> +<1eff> <639c> +<1f00> <636d> +<1f01> <63ae> +<1f02> <637c> +<1f03> <63a4> +<1f04> <633b> +<1f05> <639f> +<1f06> <6378> +<1f07> <6385> +<1f08> <6381> +<1f09> <6391> +<1f0a> <638d> +<1f0b> <6370> +<1f0c> <6553> +<1f0d> <65cd> +<1f0e> <6665> +<1f0f> <6661> +<1f10> <665b> +<1f11> <6659> +<1f12> <665c> +<1f13> <6662> +<1f14> <6718> +<1f15> <6879> +<1f16> <6887> +<1f17> <6890> +<1f18> <689c> +<1f1b> <68ae> +<1f1c> <68ab> +<1f1d> <6956> +<1f1e> <686f> +<1f1f> <68a3> +<1f20> <68ac> +<1f21> <68a9> +<1f22> <6875> +<1f23> <6874> +<1f24> <68b2> +<1f25> <688f> +<1f26> <6877> +<1f27> <6892> +<1f28> <687c> +<1f29> <686b> +<1f2a> <6872> +<1f2b> <68aa> +<1f2c> <6880> +<1f2d> <6871> +<1f2e> <687e> +<1f2f> <689b> +<1f30> <6896> +<1f31> <688b> +<1f32> <68a0> +<1f33> <6889> +<1f34> <68a4> +<1f35> <6878> +<1f36> <687b> +<1f37> <6891> +<1f38> <688c> +<1f39> <688a> +<1f3a> <687d> +<1f3b> <6b36> +<1f3c> <6b33> +<1f3f> <6b91> +<1f40> <6b8f> +<1f43> <6b8c> +<1f44> <6c2a> +<1f45> <6dc0> +<1f46> <6dab> +<1f47> <6db4> +<1f48> <6db3> +<1f49> <6e74> +<1f4a> <6dac> +<1f4b> <6de9> +endbfchar + +100 beginbfchar +<1f4c> <6de2> +<1f4d> <6db7> +<1f4e> <6df6> +<1f4f> <6dd4> +<1f50> <6e00> +<1f51> <6dc8> +<1f52> <6de0> +<1f53> <6ddf> +<1f54> <6dd6> +<1f55> <6dbe> +<1f56> <6de5> +<1f59> <6ddb> +<1f5a> <6df4> +<1f5b> <6dca> +<1f5c> <6dbd> +<1f5d> <6ded> +<1f5e> <6df0> +<1f5f> <6dba> +<1f60> <6dd5> +<1f61> <6dc2> +<1f62> <6dcf> +<1f63> <6dc9> +<1f64> <6dd0> +<1f65> <6df2> +<1f66> <6dd3> +<1f67> <6dfd> +<1f68> <6dd7> +<1f69> <6dcd> +<1f6a> <6de3> +<1f6b> <6dbb> +<1f6c> <70fa> +<1f6d> <710d> +<1f6e> <70f7> +<1f6f> <7117> +<1f70> <70f4> +<1f71> <710c> +<1f72> <70f0> +<1f73> <7104> +<1f74> <70f3> +<1f75> <7110> +<1f76> <70fc> +<1f77> <70ff> +<1f78> <7106> +<1f79> <7113> +<1f7a> <7100> +<1f7b> <70f8> +<1f7c> <70f6> +<1f7d> <710b> +<1f7e> <7102> +<1f7f> <710e> +<1f80> <727e> +<1f83> <727f> +<1f84> <731d> +<1f85> <7317> +<1f86> <7307> +<1f87> <7311> +<1f88> <7318> +<1f89> <730a> +<1f8a> <7308> +<1f8b> <72ff> +<1f8c> <730f> +<1f8d> <731e> +<1f8e> <7388> +<1f8f> <73f6> +<1f90> <73f8> +<1f91> <73f5> +<1f92> <7404> +<1f93> <7401> +<1f94> <73fd> +<1f95> <7407> +<1f96> <7400> +<1f97> <73fa> +<1f98> <73fc> +<1f99> <73ff> +<1f9a> <740c> +<1f9b> <740b> +<1f9c> <73f4> +<1f9d> <7408> +<1f9e> <7564> +<1f9f> <7563> +<1fa0> <75ce> +<1fa1> <75d2> +<1fa2> <75cf> +<1fa5> <75d1> +<1fa6> <75d0> +<1fa7> <768f> +<1fa8> <7689> +<1fa9> <76d3> +<1faa> <7739> +<1fab> <772f> +<1fac> <772d> +<1faf> <7734> +<1fb0> <7733> +<1fb1> <773d> +<1fb2> <7725> +<1fb3> <773b> +<1fb4> <7735> +<1fb5> <7848> +<1fb6> <7852> +<1fb7> <7849> +endbfchar + +100 beginbfchar +<1fb8> <784d> +<1fb9> <784a> +<1fba> <784c> +<1fbb> <7826> +<1fbc> <7845> +<1fbd> <7850> +<1fbe> <7964> +<1fbf> <7967> +<1fc2> <7963> +<1fc3> <796b> +<1fc4> <7961> +<1fc5> <79bb> +<1fc6> <79fa> +<1fc7> <79f8> +<1fca> <7a8f> +<1fcb> <7a94> +<1fcc> <7a90> +<1fcd> <7b35> +<1fce> <7b3b> +<1fcf> <7b34> +<1fd0> <7b25> +<1fd1> <7b30> +<1fd2> <7b22> +<1fd3> <7b24> +<1fd4> <7b33> +<1fd5> <7b18> +<1fd6> <7b2a> +<1fd7> <7b1d> +<1fd8> <7b31> +<1fd9> <7b2b> +<1fda> <7b2d> +<1fdb> <7b2f> +<1fdc> <7b32> +<1fdd> <7b38> +<1fde> <7b1a> +<1fdf> <7b23> +<1fe0> <7c94> +<1fe1> <7c98> +<1fe2> <7c96> +<1fe3> <7ca3> +<1fe4> <7d35> +<1fe5> <7d3d> +<1fe6> <7d38> +<1fe7> <7d36> +<1fe8> <7d3a> +<1fe9> <7d45> +<1fea> <7d2c> +<1feb> <7d29> +<1fec> <7d41> +<1fed> <7d47> +<1ff0> <7d4a> +<1ff1> <7d3b> +<1ff2> <7d28> +<1ff3> <7f63> +<1ff4> <7f95> +<1ff7> <7f9b> +<1ffa> <7fcd> +<1ffd> <7fc7> +<1ffe> <7fcf> +<1fff> <7fc9> +<2000> <801f> +<2001> <801e> +<2002> <801b> +<2003> <8047> +<2004> <8043> +<2005> <8048> +<2006> <8118> +<2007> <8125> +<2008> <8119> +<2009> <811b> +<200a> <812d> +<200b> <811f> +<200c> <812c> +<200d> <811e> +<200e> <8121> +<200f> <8115> +<2010> <8127> +<2011> <811d> +<2012> <8122> +<2013> <8211> +<2014> <8238> +<2015> <8233> +<2016> <823a> +<2017> <8234> +<2018> <8232> +<2019> <8274> +<201a> <8390> +<201b> <83a3> +<201c> <83a8> +<201d> <838d> +<201e> <837a> +<201f> <8373> +<2020> <83a4> +<2021> <8374> +<2022> <838f> +<2023> <8381> +<2024> <8395> +<2025> <8399> +<2026> <8375> +<2027> <8394> +endbfchar + +100 beginbfchar +<2028> <83a9> +<2029> <837d> +<202a> <8383> +<202b> <838c> +<202c> <839d> +<202d> <839b> +<202e> <83aa> +<202f> <838b> +<2030> <837e> +<2031> <83a5> +<2032> <83af> +<2033> <8388> +<2034> <8397> +<2035> <83b0> +<2036> <837f> +<2037> <83a6> +<2038> <8387> +<2039> <83ae> +<203a> <8376> +<203b> <8659> +<203c> <8656> +<203d> <86bf> +<203e> <86b7> +<203f> <86c2> +<2040> <86c1> +<2041> <86c5> +<2042> <86ba> +<2043> <86b0> +<2044> <86c8> +<2045> <86b9> +<2046> <86b3> +<2047> <86b8> +<2048> <86cc> +<2049> <86b4> +<204c> <86c3> +<204f> <8852> +<2050> <8889> +<2051> <8895> +<2052> <88a8> +<2053> <88a2> +<2054> <88aa> +<2055> <889a> +<2056> <8891> +<2057> <88a1> +<2058> <889f> +<2059> <8898> +<205a> <88a7> +<205b> <8899> +<205c> <889b> +<205d> <8897> +<205e> <88a4> +<205f> <88ac> +<2060> <888c> +<2061> <8893> +<2062> <888e> +<2063> <8982> +<2064> <89d6> +<2065> <89d9> +<2066> <89d5> +<2067> <8a30> +<2068> <8a27> +<2069> <8a2c> +<206a> <8a1e> +<206b> <8c39> +<206c> <8c3b> +<206f> <8c7d> +<2070> <8ca5> +<2071> <8d7d> +<2072> <8d7b> +<2073> <8d79> +<2074> <8dbc> +<2075> <8dc2> +<2076> <8db9> +<2077> <8dbf> +<2078> <8dc1> +<2079> <8ed8> +<207a> <8ede> +<207b> <8edd> +<207c> <8edc> +<207d> <8ed7> +<2080> <9024> +<2081> <900b> +<2082> <9011> +<2083> <901c> +<2084> <900c> +<2085> <9021> +<2086> <90ef> +<2087> <90ea> +<2088> <90f0> +<2089> <90f4> +<208c> <90d4> +<208f> <90e9> +<2090> <9156> +<2091> <9158> +<2092> <915a> +<2093> <9153> +<2094> <9155> +<2095> <91ec> +<2096> <91f4> +<2097> <91f1> +endbfchar + +100 beginbfchar +<2098> <91f3> +<2099> <91f8> +<209a> <91e4> +<209b> <91f9> +<209e> <91f7> +<209f> <91e8> +<20a0> <91ee> +<20a1> <957a> +<20a2> <9586> +<20a3> <9588> +<20a4> <967c> +<20a5> <966d> +<20a6> <966b> +<20a7> <9671> +<20a8> <966f> +<20a9> <96bf> +<20aa> <976a> +<20ab> <9804> +<20ac> <98e5> +<20ad> <9997> +<20ae> <509b> +<20af> <5095> +<20b0> <5094> +<20b1> <509e> +<20b2> <508b> +<20b3> <50a3> +<20b4> <5083> +<20b5> <508c> +<20b6> <508e> +<20b7> <509d> +<20b8> <5068> +<20b9> <509c> +<20ba> <5092> +<20bb> <5082> +<20bc> <5087> +<20bd> <515f> +<20be> <51d4> +<20bf> <5312> +<20c0> <5311> +<20c1> <53a4> +<20c2> <53a7> +<20c3> <5591> +<20c4> <55a8> +<20c5> <55a5> +<20c6> <55ad> +<20c7> <5577> +<20c8> <5645> +<20c9> <55a2> +<20ca> <5593> +<20cb> <5588> +<20cc> <558f> +<20cd> <55b5> +<20ce> <5581> +<20cf> <55a3> +<20d0> <5592> +<20d1> <55a4> +<20d2> <557d> +<20d3> <558c> +<20d4> <55a6> +<20d5> <557f> +<20d6> <5595> +<20d7> <55a1> +<20d8> <558e> +<20d9> <570c> +<20da> <5829> +<20db> <5837> +<20dc> <5819> +<20dd> <581e> +<20de> <5827> +<20df> <5823> +<20e0> <5828> +<20e1> <57f5> +<20e2> <5848> +<20e3> <5825> +<20e4> <581c> +<20e5> <581b> +<20e6> <5833> +<20e7> <583f> +<20e8> <5836> +<20e9> <582e> +<20ea> <5839> +<20eb> <5838> +<20ec> <582d> +<20ed> <582c> +<20ee> <583b> +<20ef> <5961> +<20f0> <5aaf> +<20f1> <5a94> +<20f2> <5a9f> +<20f3> <5a7a> +<20f4> <5aa2> +<20f5> <5a9e> +<20f6> <5a78> +<20f7> <5aa6> +<20f8> <5a7c> +<20f9> <5aa5> +<20fa> <5aac> +<20fb> <5a95> +<20fc> <5aae> +<20fd> <5a37> +endbfchar + +100 beginbfchar +<20fe> <5a84> +<20ff> <5a8a> +<2100> <5a97> +<2101> <5a83> +<2102> <5a8b> +<2103> <5aa9> +<2104> <5a7b> +<2105> <5a7d> +<2106> <5a8c> +<2107> <5a9c> +<2108> <5a8f> +<2109> <5a93> +<210a> <5a9d> +<210b> <5bea> +<210c> <5bcd> +<210d> <5bcb> +<210e> <5bd4> +<210f> <5bd1> +<2110> <5bca> +<2111> <5bce> +<2112> <5c0c> +<2113> <5c30> +<2114> <5d37> +<2115> <5d43> +<2116> <5d6b> +<2117> <5d41> +<2118> <5d4b> +<2119> <5d3f> +<211a> <5d35> +<211b> <5d51> +<211c> <5d4e> +<211d> <5d55> +<211e> <5d33> +<211f> <5d3a> +<2120> <5d52> +<2121> <5d3d> +<2122> <5d31> +<2123> <5d59> +<2124> <5d42> +<2125> <5d39> +<2126> <5d49> +<2127> <5d38> +<2128> <5d3c> +<2129> <5d32> +<212a> <5d36> +<212b> <5d40> +<212c> <5d45> +<212d> <5e44> +<212e> <5e41> +<212f> <5f58> +<2130> <5fa6> +<2131> <5fa5> +<2132> <5fab> +<2133> <60c9> +<2134> <60b9> +<2135> <60cc> +<2136> <60e2> +<2137> <60ce> +<2138> <60c4> +<2139> <6114> +<213a> <60f2> +<213b> <610a> +<213c> <6116> +<213d> <6105> +<213e> <60f5> +<213f> <6113> +<2140> <60f8> +<2141> <60fc> +<2142> <60fe> +<2143> <60c1> +<2144> <6103> +<2145> <6118> +<2146> <611d> +<2147> <6110> +<2148> <60ff> +<2149> <6104> +<214a> <610b> +<214b> <624a> +<214c> <6394> +<214d> <63b1> +<214e> <63b0> +<214f> <63ce> +<2150> <63e5> +<2151> <63e8> +<2152> <63ef> +<2153> <63c3> +<2154> <649d> +<2155> <63f3> +<2156> <63ca> +<2157> <63e0> +<2158> <63f6> +<2159> <63d5> +<215a> <63f2> +<215b> <63f5> +<215c> <6461> +<215d> <63df> +<215e> <63be> +<215f> <63dd> +<2160> <63dc> +<2161> <63c4> +endbfchar + +100 beginbfchar +<2162> <63d8> +<2163> <63d3> +<2164> <63c2> +<2165> <63c7> +<2166> <63cc> +<2167> <63cb> +<2168> <63c8> +<2169> <63f0> +<216a> <63d7> +<216b> <63d9> +<216c> <6532> +<216d> <6567> +<216e> <656a> +<216f> <6564> +<2170> <655c> +<2171> <6568> +<2172> <6565> +<2173> <658c> +<2176> <65ae> +<2177> <65d0> +<2178> <65d2> +<2179> <667c> +<217a> <666c> +<217b> <667b> +<217c> <6680> +<217d> <6671> +<217e> <6679> +<217f> <666a> +<2180> <6672> +<2181> <6701> +<2182> <690c> +<2183> <68d3> +<2184> <6904> +<2185> <68dc> +<2186> <692a> +<2187> <68ec> +<2188> <68ea> +<2189> <68f1> +<218a> <690f> +<218b> <68d6> +<218c> <68f7> +<218d> <68eb> +<218e> <68e4> +<218f> <68f6> +<2190> <6913> +<2191> <6910> +<2192> <68f3> +<2193> <68e1> +<2194> <6907> +<2195> <68cc> +<2196> <6908> +<2197> <6970> +<2198> <68b4> +<2199> <6911> +<219a> <68ef> +<219b> <68c6> +<219c> <6914> +<219d> <68f8> +<219e> <68d0> +<219f> <68fd> +<21a0> <68fc> +<21a1> <68e8> +<21a2> <690b> +<21a3> <690a> +<21a4> <6917> +<21a5> <68ce> +<21a6> <68c8> +<21a9> <68e6> +<21aa> <68f4> +<21ab> <68d1> +<21ac> <6906> +<21ad> <68d4> +<21ae> <68e9> +<21af> <6915> +<21b0> <6925> +<21b1> <68c7> +<21b2> <6b39> +<21b3> <6b3b> +<21b4> <6b3f> +<21b5> <6b3c> +<21b6> <6b94> +<21b7> <6b97> +<21b8> <6b99> +<21b9> <6b95> +<21ba> <6bbd> +<21bb> <6bf0> +<21be> <6c30> +<21bf> <6dfc> +<21c2> <6e1f> +<21c3> <6e49> +<21c4> <6e88> +<21c7> <6e45> +<21c8> <6e62> +<21c9> <6e2b> +<21ca> <6e3f> +<21cb> <6e41> +<21cc> <6e5d> +<21cd> <6e73> +<21ce> <6e1c> +<21cf> <6e33> +endbfchar + +100 beginbfchar +<21d0> <6e4b> +<21d1> <6e40> +<21d2> <6e51> +<21d3> <6e3b> +<21d4> <6e03> +<21d5> <6e2e> +<21d6> <6e5e> +<21d7> <6e68> +<21d8> <6e5c> +<21d9> <6e61> +<21da> <6e31> +<21db> <6e28> +<21dc> <6e60> +<21dd> <6e71> +<21de> <6e6b> +<21df> <6e39> +<21e0> <6e22> +<21e1> <6e30> +<21e2> <6e53> +<21e3> <6e65> +<21e4> <6e27> +<21e5> <6e78> +<21e6> <6e64> +<21e7> <6e77> +<21e8> <6e55> +<21e9> <6e79> +<21ea> <6e52> +<21eb> <6e66> +<21ee> <6e5a> +<21ef> <7120> +<21f0> <711e> +<21f1> <712f> +<21f2> <70fb> +<21f3> <712e> +<21f4> <7131> +<21f5> <7123> +<21f6> <7125> +<21f7> <7122> +<21f8> <7132> +<21f9> <711f> +<21fa> <7128> +<21fb> <713a> +<21fc> <711b> +<21fd> <724b> +<21fe> <725a> +<21ff> <7288> +<2200> <7289> +<2201> <7286> +<2202> <7285> +<2203> <728b> +<2204> <7312> +<2205> <730b> +<2206> <7330> +<2207> <7322> +<2208> <7331> +<2209> <7333> +<220a> <7327> +<220b> <7332> +<220c> <732d> +<220d> <7326> +<220e> <7323> +<220f> <7335> +<2210> <730c> +<2211> <742e> +<2212> <742c> +<2213> <7430> +<2214> <742b> +<2215> <7416> +<2216> <741a> +<2217> <7421> +<2218> <742d> +<2219> <7431> +<221a> <7424> +<221b> <7423> +<221c> <741d> +<221d> <7429> +<221e> <7420> +<221f> <7432> +<2220> <74fb> +<2221> <752f> +<2222> <756f> +<2223> <756c> +<2224> <75e7> +<2225> <75da> +<2226> <75e1> +<2227> <75e6> +<2228> <75dd> +<2229> <75df> +<222a> <75e4> +<222b> <75d7> +<222c> <7695> +<222d> <7692> +<222e> <76da> +<2231> <7744> +<2232> <774d> +<2233> <7745> +<2234> <774a> +<2235> <774e> +<2238> <77de> +<2239> <77ec> +endbfchar + +100 beginbfchar +<223a> <7860> +<223d> <785c> +<223e> <786d> +<223f> <7871> +<2240> <786a> +<2241> <786e> +<2242> <7870> +<2243> <7869> +<2244> <7868> +<2245> <785e> +<2246> <7862> +<2247> <7974> +<2248> <7973> +<2249> <7972> +<224a> <7970> +<224b> <7a02> +<224c> <7a0a> +<224d> <7a03> +<224e> <7a0c> +<224f> <7a04> +<2250> <7a99> +<2251> <7ae6> +<2252> <7ae4> +<2253> <7b4a> +<2254> <7b47> +<2255> <7b44> +<2256> <7b48> +<2257> <7b4c> +<2258> <7b4e> +<2259> <7b40> +<225a> <7b58> +<225b> <7b45> +<225c> <7ca2> +<225d> <7c9e> +<225e> <7ca8> +<225f> <7ca1> +<2260> <7d58> +<2261> <7d6f> +<2262> <7d63> +<2263> <7d53> +<2264> <7d56> +<2265> <7d67> +<2266> <7d6a> +<2267> <7d4f> +<2268> <7d6d> +<2269> <7d5c> +<226a> <7d6b> +<226b> <7d52> +<226c> <7d54> +<226d> <7d69> +<226e> <7d51> +<226f> <7d5f> +<2270> <7d4e> +<2275> <7fa2> +<2278> <7fd7> +<2279> <8051> +<227c> <80fe> +<227d> <80d4> +<227e> <8143> +<227f> <814a> +<2280> <8152> +<2281> <814f> +<2282> <8147> +<2283> <813d> +<2284> <814d> +<2285> <813a> +<2286> <81e6> +<2287> <81ee> +<228b> <8204> +<228e> <823f> +<228f> <8275> +<2290> <833b> +<2291> <83cf> +<2292> <83f9> +<2293> <8423> +<2294> <83c0> +<2295> <83e8> +<2296> <8412> +<2297> <83e7> +<2298> <83e4> +<2299> <83fc> +<229a> <83f6> +<229b> <8410> +<229c> <83c6> +<229d> <83c8> +<229e> <83eb> +<229f> <83e3> +<22a0> <83bf> +<22a1> <8401> +<22a2> <83dd> +<22a3> <83e5> +<22a4> <83d8> +<22a5> <83ff> +<22a6> <83e1> +<22a7> <83cb> +<22a8> <83ce> +<22a9> <83d6> +<22aa> <83f5> +<22ab> <83c9> +<22ac> <8409> +endbfchar + +100 beginbfchar +<22ad> <840f> +<22ae> <83de> +<22af> <8411> +<22b0> <8406> +<22b1> <83c2> +<22b2> <83f3> +<22b3> <83d5> +<22b4> <83fa> +<22b5> <83c7> +<22b6> <83d1> +<22b7> <83ea> +<22b8> <8413> +<22b9> <839a> +<22ba> <83c3> +<22bb> <83ec> +<22bc> <83ee> +<22bd> <83c4> +<22be> <83fb> +<22bf> <83d7> +<22c0> <83e2> +<22c1> <841b> +<22c2> <83db> +<22c3> <83fe> +<22c4> <86d8> +<22c5> <86e2> +<22c6> <86e6> +<22c7> <86d3> +<22c8> <86e3> +<22c9> <86da> +<22ca> <86ea> +<22cb> <86dd> +<22cc> <86eb> +<22cd> <86dc> +<22ce> <86ec> +<22cf> <86e9> +<22d0> <86d7> +<22d1> <86e8> +<22d2> <86d1> +<22d3> <8848> +<22d4> <8856> +<22d5> <8855> +<22d6> <88ba> +<22d7> <88d7> +<22d8> <88b9> +<22d9> <88b8> +<22da> <88c0> +<22db> <88be> +<22dc> <88b6> +<22dd> <88bc> +<22de> <88b7> +<22df> <88bd> +<22e0> <88b2> +<22e1> <8901> +<22e2> <88c9> +<22e3> <8995> +<22e4> <8998> +<22e5> <8997> +<22e6> <89dd> +<22e9> <8a4e> +<22ea> <8a4d> +<22eb> <8a39> +<22ec> <8a59> +<22ed> <8a40> +<22f2> <8a52> +<22f3> <8a48> +<22f4> <8a51> +<22f5> <8a4a> +<22f6> <8a4c> +<22f7> <8a4f> +<22f8> <8c5f> +<22f9> <8c81> +<22fa> <8c80> +<22fb> <8cba> +<22fc> <8cbe> +<22fd> <8cb0> +<22fe> <8cb9> +<22ff> <8cb5> +<2300> <8d84> +<2301> <8d80> +<2302> <8d89> +<2303> <8dd8> +<2304> <8dd3> +<2305> <8dcd> +<2306> <8dc7> +<2307> <8dd6> +<2308> <8ddc> +<2309> <8dcf> +<230a> <8dd5> +<230b> <8dd9> +<230c> <8dc8> +<230d> <8dd7> +<230e> <8dc5> +<230f> <8eef> +<2310> <8ef7> +<2311> <8efa> +<2312> <8ef9> +<2313> <8ee6> +<2314> <8eee> +<2315> <8ee5> +<2316> <8ef5> +endbfchar + +100 beginbfchar +<2319> <8ef6> +<231a> <8eeb> +<231b> <8ef1> +<231c> <8eec> +<231d> <8ef4> +<231e> <8ee9> +<231f> <902d> +<2320> <9034> +<2321> <902f> +<2322> <9106> +<2323> <912c> +<2324> <9104> +<2325> <90ff> +<2326> <90fc> +<2327> <9108> +<2328> <90f9> +<2329> <90fb> +<232a> <9101> +<232b> <9100> +<232c> <9107> +<232d> <9105> +<232e> <9103> +<232f> <9161> +<2330> <9164> +<2331> <915f> +<2332> <9162> +<2333> <9160> +<2334> <9201> +<2335> <920a> +<2336> <9225> +<2337> <9203> +<2338> <921a> +<2339> <9226> +<233a> <920f> +<233b> <920c> +<233c> <9200> +<233d> <9212> +<233e> <91ff> +<233f> <91fd> +<2340> <9206> +<2341> <9204> +<2342> <9227> +<2343> <9202> +<2344> <921c> +<2345> <9224> +<2346> <9219> +<2347> <9217> +<2348> <9205> +<2349> <9216> +<234a> <957b> +<234b> <958d> +<234c> <958c> +<234d> <9590> +<234e> <9687> +<234f> <967e> +<2352> <9683> +<2353> <9680> +<2354> <96c2> +<2355> <96c8> +<2356> <96c3> +<2357> <96f1> +<2358> <96f0> +<2359> <976c> +<235a> <9770> +<235b> <976e> +<235c> <9807> +<235d> <98a9> +<235e> <98eb> +<235f> <9ce6> +<2360> <9ef9> +<2363> <4eb6> +<2364> <50bd> +<2365> <50bf> +<2366> <50c6> +<2367> <50ae> +<2368> <50c4> +<2369> <50ca> +<236a> <50b4> +<236b> <50c8> +<236c> <50c2> +<236d> <50b0> +<236e> <50c1> +<236f> <50ba> +<2370> <50b1> +<2371> <50cb> +<2372> <50c9> +<2373> <50b6> +<2374> <50b8> +<2375> <51d7> +<2376> <527a> +<2377> <5278> +<237a> <55c3> +<237b> <55db> +<237c> <55cc> +<237d> <55d0> +<237e> <55cb> +<237f> <55ca> +<2380> <55dd> +<2381> <55c0> +<2382> <55d4> +endbfchar + +100 beginbfchar +<2383> <55c4> +<2384> <55e9> +<2385> <55bf> +<2386> <55d2> +<2387> <558d> +<2388> <55cf> +<2389> <55d5> +<238a> <55e2> +<238b> <55d6> +<238c> <55c8> +<238d> <55f2> +<238e> <55cd> +<238f> <55d9> +<2390> <55c2> +<2391> <5714> +<2392> <5853> +<2393> <5868> +<2394> <5864> +<2395> <584f> +<2396> <584d> +<2397> <5849> +<2398> <586f> +<2399> <5855> +<239a> <584e> +<239b> <585d> +<239c> <5859> +<239d> <5865> +<239e> <585b> +<239f> <583d> +<23a0> <5863> +<23a1> <5871> +<23a2> <58fc> +<23a3> <5ac7> +<23a4> <5ac4> +<23a5> <5acb> +<23a6> <5aba> +<23a7> <5ab8> +<23a8> <5ab1> +<23a9> <5ab5> +<23aa> <5ab0> +<23ab> <5abf> +<23ac> <5ac8> +<23ad> <5abb> +<23ae> <5ac6> +<23af> <5ab7> +<23b0> <5ac0> +<23b1> <5aca> +<23b2> <5ab4> +<23b3> <5ab6> +<23b4> <5acd> +<23b5> <5ab9> +<23b6> <5a90> +<23b7> <5bd6> +<23ba> <5c1f> +<23bb> <5c33> +<23bc> <5d71> +<23bd> <5d63> +<23be> <5d4a> +<23bf> <5d65> +<23c0> <5d72> +<23c1> <5d6c> +<23c2> <5d5e> +<23c3> <5d68> +<23c4> <5d67> +<23c5> <5d62> +<23c6> <5df0> +<23c7> <5e4f> +<23c8> <5e4e> +<23c9> <5e4a> +<23ca> <5e4d> +<23cb> <5e4b> +<23cc> <5ec5> +<23cd> <5ecc> +<23ce> <5ec6> +<23cf> <5ecb> +<23d0> <5ec7> +<23d1> <5f40> +<23d2> <5faf> +<23d3> <5fad> +<23d4> <60f7> +<23d7> <612b> +<23d8> <6145> +<23d9> <6136> +<23da> <6132> +<23db> <612e> +<23dc> <6146> +<23dd> <612f> +<23de> <614f> +<23df> <6129> +<23e0> <6140> +<23e1> <6220> +<23e2> <9168> +<23e3> <6223> +<23e4> <6225> +<23e5> <6224> +<23e6> <63c5> +<23e7> <63f1> +<23e8> <63eb> +<23e9> <6410> +<23ea> <6412> +endbfchar + +100 beginbfchar +<23eb> <6409> +<23ec> <6420> +<23ed> <6424> +<23ee> <6433> +<23ef> <6443> +<23f0> <641f> +<23f1> <6415> +<23f2> <6418> +<23f3> <6439> +<23f4> <6437> +<23f7> <640c> +<23f8> <6426> +<23f9> <6430> +<23fa> <6428> +<23fb> <6441> +<23fc> <6435> +<23fd> <642f> +<23fe> <640a> +<23ff> <641a> +<2400> <6440> +<2401> <6425> +<2402> <6427> +<2403> <640b> +<2404> <63e7> +<2405> <641b> +<2406> <642e> +<2407> <6421> +<2408> <640e> +<2409> <656f> +<240a> <6592> +<240b> <65d3> +<240c> <6686> +<240d> <668c> +<240e> <6695> +<240f> <6690> +<2410> <668b> +<2411> <668a> +<2412> <6699> +<2413> <6694> +<2414> <6678> +<2415> <6720> +<2416> <6966> +<2417> <695f> +<2418> <6938> +<2419> <694e> +<241a> <6962> +<241b> <6971> +<241c> <693f> +<241d> <6945> +<241e> <696a> +<241f> <6939> +<2420> <6942> +<2421> <6957> +<2422> <6959> +<2423> <697a> +<2426> <6935> +<2427> <696c> +<2428> <6933> +<2429> <693d> +<242a> <6965> +<242b> <68f0> +<242c> <6978> +<242d> <6934> +<242e> <6969> +<242f> <6940> +<2430> <696f> +<2431> <6944> +<2432> <6976> +<2433> <6958> +<2434> <6941> +<2435> <6974> +<2436> <694c> +<2437> <693b> +<2438> <694b> +<2439> <6937> +<243a> <695c> +<243b> <694f> +<243c> <6951> +<243d> <6932> +<243e> <6952> +<243f> <692f> +<2440> <697b> +<2441> <693c> +<2442> <6b46> +<2443> <6b45> +<2444> <6b43> +<2445> <6b42> +<2446> <6b48> +<2447> <6b41> +<2448> <6b9b> +<244b> <6bf9> +<244e> <6e9b> +<244f> <6ed6> +<2450> <6ec8> +<2451> <6e8f> +<2452> <6ec0> +<2453> <6e9f> +<2456> <6ea0> +<2457> <6eb1> +<2458> <6eb9> +endbfchar + +100 beginbfchar +<2459> <6ec6> +<245a> <6ed2> +<245b> <6ebd> +<245c> <6ec1> +<245d> <6e9e> +<245e> <6ec9> +<245f> <6eb7> +<2460> <6eb0> +<2461> <6ecd> +<2462> <6ea6> +<2463> <6ecf> +<2464> <6eb2> +<2465> <6ebe> +<2466> <6ec3> +<2467> <6edc> +<2468> <6ed8> +<2469> <6e99> +<246a> <6e92> +<246b> <6e8e> +<246c> <6e8d> +<246d> <6ea4> +<246e> <6ea1> +<246f> <6ebf> +<2470> <6eb3> +<2471> <6ed0> +<2472> <6eca> +<2473> <6e97> +<2474> <6eae> +<2475> <6ea3> +<2476> <7147> +<2477> <7154> +<2478> <7152> +<2479> <7163> +<247a> <7160> +<247b> <7141> +<247c> <715d> +<247d> <7162> +<247e> <7172> +<247f> <7178> +<2480> <716a> +<2481> <7161> +<2482> <7142> +<2483> <7158> +<2484> <7143> +<2485> <714b> +<2486> <7170> +<2487> <715f> +<2488> <7150> +<2489> <7153> +<248a> <7144> +<248b> <714d> +<248c> <715a> +<248d> <724f> +<248e> <728d> +<248f> <728c> +<2490> <7291> +<2491> <7290> +<2492> <728e> +<2493> <733c> +<2494> <7342> +<2495> <733b> +<2496> <733a> +<2497> <7340> +<2498> <734a> +<2499> <7349> +<249a> <7444> +<249d> <7452> +<249e> <7451> +<249f> <7457> +<24a0> <7440> +<24a3> <744e> +<24a4> <7442> +<24a5> <7446> +<24a6> <744d> +<24a7> <7454> +<24a8> <74e1> +<24a9> <74ff> +<24aa> <74fe> +<24ab> <74fd> +<24ac> <751d> +<24ad> <7579> +<24ae> <7577> +<24af> <6983> +<24b0> <75ef> +<24b1> <760f> +<24b2> <7603> +<24b3> <75f7> +<24b4> <75fe> +<24b5> <75fc> +<24b6> <75f9> +<24b7> <75f8> +<24b8> <7610> +<24b9> <75fb> +<24ba> <75f6> +<24bb> <75ed> +<24bc> <75f5> +<24bd> <75fd> +<24be> <7699> +<24bf> <76b5> +<24c0> <76dd> +endbfchar + +100 beginbfchar +<24c1> <7755> +<24c4> <7752> +<24c5> <7756> +<24c6> <775a> +<24c7> <7769> +<24c8> <7767> +<24c9> <7754> +<24ca> <7759> +<24cb> <776d> +<24cc> <77e0> +<24cd> <7887> +<24ce> <789a> +<24cf> <7894> +<24d0> <788f> +<24d1> <7884> +<24d2> <7895> +<24d5> <78a1> +<24d6> <7883> +<24d7> <7879> +<24d8> <7899> +<24d9> <7880> +<24da> <7896> +<24db> <787b> +<24dc> <797c> +<24dd> <7982> +<24de> <797d> +<24df> <7979> +<24e0> <7a11> +<24e3> <7a12> +<24e4> <7a17> +<24e5> <7a15> +<24e6> <7a22> +<24e7> <7a13> +<24e8> <7a1b> +<24e9> <7a10> +<24ea> <7aa3> +<24eb> <7aa2> +<24ec> <7a9e> +<24ed> <7aeb> +<24ee> <7b66> +<24ef> <7b64> +<24f0> <7b6d> +<24f1> <7b74> +<24f2> <7b69> +<24f3> <7b72> +<24f4> <7b65> +<24f5> <7b73> +<24f6> <7b71> +<24f7> <7b70> +<24f8> <7b61> +<24f9> <7b78> +<24fa> <7b76> +<24fb> <7b63> +<24fc> <7cb2> +<24fd> <7cb4> +<24fe> <7caf> +<24ff> <7d88> +<2500> <7d86> +<2501> <7d80> +<2502> <7d8d> +<2503> <7d7f> +<2504> <7d85> +<2505> <7d7a> +<2506> <7d8e> +<2507> <7d7b> +<2508> <7d83> +<2509> <7d7c> +<250a> <7d8c> +<250b> <7d94> +<250c> <7d84> +<250d> <7d7d> +<250e> <7d92> +<250f> <7f6d> +<2510> <7f6b> +<2513> <7f6c> +<2514> <7fa6> +<2515> <7fa5> +<2516> <7fa7> +<2519> <8021> +<251a> <8164> +<251b> <8160> +<251c> <8177> +<251d> <815c> +<251e> <8169> +<251f> <815b> +<2520> <8162> +<2521> <8172> +<2522> <6721> +<2523> <815e> +<2524> <8176> +<2525> <8167> +<2526> <816f> +<2527> <8144> +<2528> <8161> +<2529> <821d> +<252a> <8249> +<252b> <8244> +<252c> <8240> +<252d> <8242> +<252e> <8245> +endbfchar + +100 beginbfchar +<252f> <84f1> +<2530> <843f> +<2531> <8456> +<2532> <8476> +<2533> <8479> +<2534> <848f> +<2535> <848d> +<2536> <8465> +<2537> <8451> +<2538> <8440> +<2539> <8486> +<253a> <8467> +<253b> <8430> +<253c> <844d> +<253d> <847d> +<253e> <845a> +<253f> <8459> +<2540> <8474> +<2541> <8473> +<2542> <845d> +<2543> <8507> +<2544> <845e> +<2545> <8437> +<2546> <843a> +<2547> <8434> +<2548> <847a> +<2549> <8443> +<254a> <8478> +<254b> <8432> +<254c> <8445> +<254d> <8429> +<254e> <83d9> +<254f> <844b> +<2550> <842f> +<2551> <8442> +<2552> <842d> +<2553> <845f> +<2554> <8470> +<2555> <8439> +<2556> <844e> +<2557> <844c> +<2558> <8452> +<2559> <846f> +<255a> <84c5> +<255b> <848e> +<255c> <843b> +<255d> <8447> +<255e> <8436> +<255f> <8433> +<2560> <8468> +<2561> <847e> +<2562> <8444> +<2563> <842b> +<2564> <8460> +<2565> <8454> +<2566> <846e> +<2567> <8450> +<2568> <870b> +<2569> <8704> +<256a> <86f7> +<256b> <870c> +<256c> <86fa> +<256d> <86d6> +<256e> <86f5> +<256f> <874d> +<2570> <86f8> +<2571> <870e> +<2572> <8709> +<2573> <8701> +<2574> <86f6> +<2575> <870d> +<2576> <8705> +<2577> <88d6> +<2578> <88cb> +<257b> <88de> +<257c> <88db> +<257d> <88da> +<257e> <88cc> +<257f> <88d0> +<2580> <8985> +<2581> <899b> +<2582> <89df> +<2583> <89e5> +<2584> <89e4> +<2585> <89e1> +<2586> <89e0> +<2587> <89e2> +<2588> <89dc> +<2589> <89e6> +<258a> <8a76> +<258b> <8a86> +<258c> <8a7f> +<258d> <8a61> +<258e> <8a3f> +<258f> <8a77> +<2590> <8a82> +<2591> <8a84> +<2592> <8a75> +<2593> <8a83> +<2594> <8a81> +endbfchar + +100 beginbfchar +<2595> <8a74> +<2596> <8a7a> +<2597> <8c3c> +<2598> <8c4b> +<2599> <8c4a> +<259a> <8c65> +<259b> <8c64> +<259c> <8c66> +<259d> <8c86> +<25a0> <8ccc> +<25a3> <8d91> +<25a4> <8d8c> +<25a7> <8d8d> +<25aa> <8d90> +<25ab> <8d92> +<25ac> <8df0> +<25ad> <8de0> +<25ae> <8dec> +<25af> <8df1> +<25b0> <8dee> +<25b1> <8dd0> +<25b2> <8de9> +<25b3> <8de3> +<25b4> <8de2> +<25b5> <8de7> +<25b6> <8df2> +<25b7> <8deb> +<25b8> <8df4> +<25b9> <8f06> +<25ba> <8eff> +<25bb> <8f01> +<25bc> <8f00> +<25bd> <8f05> +<25c0> <8f02> +<25c1> <8f0b> +<25c2> <9052> +<25c3> <903f> +<25c4> <9044> +<25c5> <9049> +<25c6> <903d> +<25c7> <9110> +<25c8> <910d> +<25c9> <910f> +<25ca> <9111> +<25cb> <9116> +<25cc> <9114> +<25cd> <910b> +<25ce> <910e> +<25d1> <9248> +<25d2> <9252> +<25d3> <9230> +<25d4> <923a> +<25d5> <9266> +<25d6> <9233> +<25d7> <9265> +<25d8> <925e> +<25d9> <9283> +<25da> <922e> +<25db> <924a> +<25dc> <9246> +<25dd> <926d> +<25de> <926c> +<25df> <924f> +<25e0> <9260> +<25e1> <9267> +<25e2> <926f> +<25e3> <9236> +<25e4> <9261> +<25e5> <9270> +<25e6> <9231> +<25e7> <9254> +<25e8> <9263> +<25e9> <9250> +<25ea> <9272> +<25eb> <924e> +<25ec> <9253> +<25ed> <924c> +<25ee> <9256> +<25ef> <9232> +<25f0> <959f> +<25f1> <959c> +<25f2> <959e> +<25f3> <959b> +<25f6> <9691> +<25f7> <9697> +<25f8> <96ce> +<25f9> <96fa> +<25fa> <96fd> +<25fb> <96f8> +<25fc> <96f5> +<25fd> <9773> +<2600> <9772> +<2601> <980f> +<2604> <98ac> +<2605> <98f6> +<2606> <98f9> +<2607> <99af> +<2608> <99b2> +<2609> <99b0> +<260a> <99b5> +endbfchar + +100 beginbfchar +<260b> <9aad> +<260c> <9aab> +<260d> <9b5b> +<260e> <9cea> +<260f> <9ced> +<2610> <9ce7> +<2611> <9e80> +<2612> <9efd> +<2613> <50e6> +<2614> <50d4> +<2615> <50d7> +<2616> <50e8> +<2617> <50f3> +<2618> <50db> +<2619> <50ea> +<261a> <50dd> +<261b> <50e4> +<261c> <50d3> +<261d> <50ec> +<261e> <50f0> +<261f> <50ef> +<2620> <50e3> +<2621> <50e0> +<2622> <51d8> +<2625> <52e9> +<2626> <52eb> +<2627> <5330> +<2628> <53ac> +<2629> <5627> +<262a> <5615> +<262b> <560c> +<262c> <5612> +<262d> <55fc> +<262e> <560f> +<262f> <561c> +<2630> <5601> +<2631> <5613> +<2632> <5602> +<2633> <55fa> +<2634> <561d> +<2635> <5604> +<2636> <55ff> +<2637> <55f9> +<2638> <5889> +<2639> <587c> +<263a> <5890> +<263b> <5898> +<263c> <5886> +<263d> <5881> +<263e> <587f> +<263f> <5874> +<2640> <588b> +<2641> <587a> +<2642> <5887> +<2643> <5891> +<2644> <588e> +<2645> <5876> +<2646> <5882> +<2647> <5888> +<2648> <587b> +<2649> <5894> +<264a> <588f> +<264b> <58fe> +<264c> <596b> +<264d> <5adc> +<264e> <5aee> +<264f> <5ae5> +<2650> <5ad5> +<2651> <5aea> +<2652> <5ada> +<2653> <5aed> +<2654> <5aeb> +<2655> <5af3> +<2656> <5ae2> +<2657> <5ae0> +<2658> <5adb> +<2659> <5aec> +<265a> <5ade> +<265b> <5add> +<265c> <5ad9> +<265d> <5ae8> +<265e> <5adf> +<265f> <5b77> +<2660> <5be0> +<2661> <5be3> +<2662> <5c63> +<2663> <5d82> +<2664> <5d80> +<2665> <5d7d> +<2666> <5d86> +<2667> <5d7a> +<2668> <5d81> +<2669> <5d77> +<266a> <5d8a> +<266b> <5d89> +<266c> <5d88> +<266d> <5d7e> +<266e> <5d7c> +<266f> <5d8d> +<2670> <5d79> +endbfchar + +100 beginbfchar +<2671> <5d7f> +<2674> <5e53> +<2675> <5ed8> +<2676> <5ed1> +<2677> <5ed7> +<2678> <5ece> +<2679> <5edc> +<267a> <5ed5> +<267b> <5ed9> +<267c> <5ed2> +<267d> <5ed4> +<267e> <5f44> +<267f> <5f43> +<2680> <5f6f> +<2681> <5fb6> +<2682> <612c> +<2683> <6128> +<2684> <6141> +<2685> <615e> +<2686> <6171> +<2687> <6173> +<268a> <6172> +<268b> <616c> +<268c> <6180> +<268d> <6174> +<268e> <6154> +<268f> <617a> +<2690> <615b> +<2691> <6165> +<2692> <613b> +<2693> <616a> +<2694> <6161> +<2695> <6156> +<2696> <6229> +<2697> <6227> +<2698> <622b> +<2699> <642b> +<269a> <644d> +<269b> <645b> +<269c> <645d> +<269d> <6474> +<269e> <6476> +<26a1> <647d> +<26a2> <6475> +<26a3> <6466> +<26a4> <64a6> +<26a5> <644e> +<26a6> <6482> +<26a7> <645e> +<26a8> <645c> +<26a9> <644b> +<26aa> <6453> +<26ab> <6460> +<26ac> <6450> +<26ad> <647f> +<26ae> <643f> +<26af> <646c> +<26b0> <646b> +<26b1> <6459> +<26b2> <6465> +<26b3> <6477> +<26b4> <6573> +<26b5> <65a0> +<26b6> <66a1> +<26b7> <66a0> +<26b8> <669f> +<26b9> <6705> +<26ba> <6704> +<26bb> <6722> +<26bc> <69b1> +<26bd> <69b6> +<26be> <69c9> +<26bf> <69a0> +<26c0> <69ce> +<26c1> <6996> +<26c2> <69b0> +<26c3> <69ac> +<26c4> <69bc> +<26c5> <6991> +<26c6> <6999> +<26c7> <698e> +<26c8> <69a7> +<26c9> <698d> +<26ca> <69a9> +<26cb> <69be> +<26cc> <69af> +<26cd> <69bf> +<26ce> <69c4> +<26cf> <69bd> +<26d0> <69a4> +<26d1> <69d4> +<26d2> <69b9> +<26d3> <69ca> +<26d4> <699a> +<26d5> <69cf> +<26d6> <69b3> +<26d7> <6993> +<26d8> <69aa> +<26d9> <69a1> +<26da> <699e> +endbfchar + +100 beginbfchar +<26db> <69d9> +<26dc> <6997> +<26dd> <6990> +<26de> <69c2> +<26df> <69b5> +<26e0> <69a5> +<26e1> <69c6> +<26e2> <6b4a> +<26e3> <6b4d> +<26e4> <6b4b> +<26ea> <6bfe> +<26eb> <6ece> +<26ec> <6ef5> +<26ed> <6ef1> +<26ee> <6f03> +<26ef> <6f25> +<26f0> <6ef8> +<26f1> <6f37> +<26f2> <6efb> +<26f3> <6f2e> +<26f4> <6f09> +<26f5> <6f4e> +<26f8> <6f27> +<26f9> <6f18> +<26fa> <6f3b> +<26fb> <6f12> +<26fc> <6eed> +<26fd> <6f0a> +<26fe> <6f36> +<26ff> <6f73> +<2700> <6ef9> +<2701> <6eee> +<2702> <6f2d> +<2703> <6f40> +<2704> <6f30> +<2705> <6f3c> +<2706> <6f35> +<2707> <6eeb> +<2708> <6f07> +<2709> <6f0e> +<270a> <6f43> +<270b> <6f05> +<270c> <6efd> +<270d> <6ef6> +<270e> <6f39> +<270f> <6f1c> +<2710> <6efc> +<2711> <6f3a> +<2712> <6f1f> +<2713> <6f0d> +<2714> <6f1e> +<2715> <6f08> +<2716> <6f21> +<2717> <7187> +<2718> <7190> +<2719> <7189> +<271a> <7180> +<271b> <7185> +<271c> <7182> +<271d> <718f> +<271e> <717b> +<271f> <7186> +<2720> <7181> +<2721> <7197> +<2722> <7244> +<2723> <7253> +<2724> <7297> +<2725> <7295> +<2726> <7293> +<2727> <7343> +<2728> <734d> +<2729> <7351> +<272a> <734c> +<272b> <7462> +<272c> <7473> +<272d> <7471> +<272e> <7475> +<272f> <7472> +<2730> <7467> +<2731> <746e> +<2732> <7500> +<2735> <757d> +<2736> <7590> +<2737> <7616> +<2738> <7608> +<2739> <760c> +<273a> <7615> +<273b> <7611> +<273c> <760a> +<273d> <7614> +<273e> <76b8> +<273f> <7781> +<2740> <777c> +<2741> <7785> +<2742> <7782> +<2743> <776e> +<2744> <7780> +<2745> <776f> +<2746> <777e> +<2747> <7783> +endbfchar + +100 beginbfchar +<2748> <78b2> +<2749> <78aa> +<274a> <78b4> +<274b> <78ad> +<274c> <78a8> +<274d> <787e> +<274e> <78ab> +<274f> <789e> +<2750> <78a5> +<2751> <78a0> +<2752> <78ac> +<2753> <78a2> +<2754> <78a4> +<2755> <7998> +<2758> <7996> +<2759> <7995> +<275a> <7994> +<275b> <7993> +<275c> <7997> +<275d> <7988> +<275e> <7992> +<275f> <7990> +<2760> <7a2b> +<2761> <7a4a> +<2762> <7a30> +<2763> <7a2f> +<2764> <7a28> +<2765> <7a26> +<2766> <7aa8> +<2769> <7aee> +<276a> <7b88> +<276b> <7b9c> +<276c> <7b8a> +<276d> <7b91> +<276e> <7b90> +<276f> <7b96> +<2770> <7b8d> +<2771> <7b8c> +<2772> <7b9b> +<2773> <7b8e> +<2774> <7b85> +<2775> <7b98> +<2776> <5284> +<2777> <7b99> +<2778> <7ba4> +<2779> <7b82> +<277a> <7cbb> +<277b> <7cbf> +<277c> <7cbc> +<277d> <7cba> +<277e> <7da7> +<277f> <7db7> +<2780> <7dc2> +<2781> <7da3> +<2782> <7daa> +<2783> <7dc1> +<2784> <7dc0> +<2785> <7dc5> +<2786> <7d9d> +<2787> <7dce> +<2788> <7dc4> +<2789> <7dc6> +<278c> <7daf> +<278d> <7db9> +<278e> <7d96> +<278f> <7dbc> +<2790> <7d9f> +<2791> <7da6> +<2792> <7dae> +<2793> <7da9> +<2794> <7da1> +<2795> <7dc9> +<2796> <7f73> +<2799> <7fe5> +<279a> <7fde> +<279b> <8024> +<279c> <805d> +<279d> <805c> +<279e> <8189> +<279f> <8186> +<27a0> <8183> +<27a1> <8187> +<27a2> <818d> +<27a3> <818c> +<27a4> <818b> +<27a5> <8215> +<27a6> <8497> +<27a7> <84a4> +<27a8> <84a1> +<27a9> <849f> +<27aa> <84ba> +<27ab> <84ce> +<27ac> <84c2> +<27ad> <84ac> +<27ae> <84ae> +<27af> <84ab> +<27b0> <84b9> +<27b1> <84b4> +<27b2> <84c1> +<27b3> <84cd> +endbfchar + +100 beginbfchar +<27b4> <84aa> +<27b5> <849a> +<27b6> <84b1> +<27b7> <84d0> +<27b8> <849d> +<27b9> <84a7> +<27ba> <84bb> +<27bb> <84a2> +<27bc> <8494> +<27bd> <84c7> +<27be> <84cc> +<27bf> <849b> +<27c0> <84a9> +<27c1> <84af> +<27c2> <84a8> +<27c3> <84d6> +<27c4> <8498> +<27c5> <84b6> +<27c6> <84cf> +<27c7> <84a0> +<27c8> <84d7> +<27c9> <84d4> +<27ca> <84d2> +<27cb> <84db> +<27cc> <84b0> +<27cd> <8491> +<27ce> <8661> +<27cf> <8733> +<27d0> <8723> +<27d1> <8728> +<27d2> <876b> +<27d3> <8740> +<27d4> <872e> +<27d5> <871e> +<27d6> <8721> +<27d7> <8719> +<27d8> <871b> +<27d9> <8743> +<27da> <872c> +<27db> <8741> +<27dc> <873e> +<27dd> <8746> +<27de> <8720> +<27df> <8732> +<27e0> <872a> +<27e1> <872d> +<27e2> <873c> +<27e3> <8712> +<27e4> <873a> +<27e5> <8731> +<27e6> <8735> +<27e7> <8742> +<27ea> <8738> +<27eb> <8724> +<27ec> <871a> +<27ed> <8730> +<27ee> <8711> +<27ef> <88f7> +<27f0> <88e7> +<27f3> <88fa> +<27f4> <88fe> +<27f5> <88ee> +<27f6> <88fc> +<27f7> <88f6> +<27f8> <88fb> +<27f9> <88f0> +<27fa> <88ec> +<27fb> <88eb> +<27fc> <899d> +<27fd> <89a1> +<27fe> <899f> +<27ff> <899e> +<2800> <89e9> +<2801> <89eb> +<2802> <89e8> +<2803> <8aab> +<2804> <8a99> +<2805> <8a8b> +<2806> <8a92> +<2807> <8a8f> +<2808> <8a96> +<2809> <8c3d> +<280c> <8cd5> +<280d> <8ccf> +<280e> <8cd7> +<280f> <8d96> +<2810> <8e09> +<2811> <8e02> +<2812> <8dff> +<2813> <8e0d> +<2814> <8dfd> +<2815> <8e0a> +<2816> <8e03> +<2817> <8e07> +<2818> <8e06> +<2819> <8e05> +<281a> <8dfe> +<281b> <8e00> +<281c> <8e04> +<281f> <8f0e> +endbfchar + +100 beginbfchar +<2820> <8f0d> +<2821> <9123> +<2822> <911c> +<2823> <9120> +<2824> <9122> +<2825> <911f> +<2826> <911d> +<2827> <911a> +<2828> <9124> +<2829> <9121> +<282a> <911b> +<282b> <917a> +<282c> <9172> +<282d> <9179> +<282e> <9173> +<282f> <92a5> +<2830> <92a4> +<2831> <9276> +<2832> <929b> +<2833> <927a> +<2834> <92a0> +<2835> <9294> +<2836> <92aa> +<2837> <928d> +<2838> <92a6> +<2839> <929a> +<283a> <92ab> +<283b> <9279> +<283c> <9297> +<283d> <927f> +<283e> <92a3> +<283f> <92ee> +<2840> <928e> +<2841> <9282> +<2842> <9295> +<2843> <92a2> +<2844> <927d> +<2845> <9288> +<2846> <92a1> +<2847> <928a> +<2848> <9286> +<2849> <928c> +<284a> <9299> +<284b> <92a7> +<284c> <927e> +<284d> <9287> +<284e> <92a9> +<284f> <929d> +<2850> <928b> +<2851> <922d> +<2852> <969e> +<2853> <96a1> +<2854> <96ff> +<2855> <9758> +<2856> <977d> +<2857> <977a> +<2858> <977e> +<2859> <9783> +<285a> <9780> +<285b> <9782> +<285c> <977b> +<285d> <9784> +<285e> <9781> +<285f> <977f> +<2860> <97ce> +<2861> <97cd> +<2862> <9816> +<2865> <9902> +<2866> <9900> +<2867> <9907> +<2868> <999d> +<2869> <999c> +<286a> <99c3> +<286b> <99b9> +<286c> <99bb> +<286d> <99ba> +<286e> <99c2> +<286f> <99bd> +<2870> <99c7> +<2871> <9ab1> +<2872> <9ae3> +<2873> <9ae7> +<2878> <9b5f> +<287b> <9cf5> +<287c> <9ea7> +<287d> <50ff> +<287e> <5103> +<287f> <5130> +<2880> <50f8> +<2883> <50f6> +<2884> <50fe> +<2887> <50fd> +<2888> <510a> +<288b> <52f1> +<288c> <52ef> +<288d> <5648> +<288e> <5642> +<288f> <564c> +<2890> <5635> +<2891> <5641> +endbfchar + +100 beginbfchar +<2892> <564a> +<2893> <5649> +<2894> <5646> +<2895> <5658> +<2896> <565a> +<2897> <5640> +<2898> <5633> +<2899> <563d> +<289a> <562c> +<289b> <563e> +<289c> <5638> +<289d> <562a> +<289e> <563a> +<289f> <571a> +<28a0> <58ab> +<28a1> <589d> +<28a2> <58b1> +<28a3> <58a0> +<28a4> <58a3> +<28a5> <58af> +<28a6> <58ac> +<28a7> <58a5> +<28a8> <58a1> +<28a9> <58ff> +<28aa> <5aff> +<28ab> <5af4> +<28ac> <5afd> +<28ad> <5af7> +<28ae> <5af6> +<28af> <5b03> +<28b0> <5af8> +<28b1> <5b02> +<28b2> <5af9> +<28b3> <5b01> +<28b4> <5b07> +<28b5> <5b05> +<28b6> <5b0f> +<28b7> <5c67> +<28b8> <5d99> +<28b9> <5d97> +<28ba> <5d9f> +<28bb> <5d92> +<28bc> <5da2> +<28bd> <5d93> +<28be> <5d95> +<28bf> <5da0> +<28c0> <5d9c> +<28c1> <5da1> +<28c2> <5d9a> +<28c3> <5d9e> +<28c4> <5e69> +<28c5> <5e5d> +<28c6> <5e60> +<28c7> <5e5c> +<28c8> <7df3> +<28c9> <5edb> +<28ca> <5ede> +<28cb> <5ee1> +<28cc> <5f49> +<28cd> <5fb2> +<28ce> <618b> +<28cf> <6183> +<28d0> <6179> +<28d1> <61b1> +<28d2> <61b0> +<28d3> <61a2> +<28d4> <6189> +<28d5> <619b> +<28d6> <6193> +<28d7> <61af> +<28d8> <61ad> +<28d9> <619f> +<28da> <6192> +<28db> <61aa> +<28dc> <61a1> +<28dd> <618d> +<28de> <6166> +<28df> <61b3> +<28e0> <622d> +<28e1> <646e> +<28e2> <6470> +<28e3> <6496> +<28e4> <64a0> +<28e5> <6485> +<28e6> <6497> +<28e7> <649c> +<28e8> <648f> +<28e9> <648b> +<28ea> <648a> +<28eb> <648c> +<28ec> <64a3> +<28ed> <649f> +<28ee> <6468> +<28ef> <64b1> +<28f0> <6498> +<28f1> <6576> +<28f2> <657a> +<28f3> <6579> +<28f4> <657b> +<28f7> <66b5> +endbfchar + +100 beginbfchar +<28f8> <66b0> +<28f9> <66a9> +<28fa> <66b2> +<28fb> <66b7> +<28fc> <66aa> +<28fd> <66af> +<28fe> <6a00> +<28ff> <6a06> +<2900> <6a17> +<2901> <69e5> +<2902> <69f8> +<2903> <6a15> +<2904> <69f1> +<2905> <69e4> +<2906> <6a20> +<2907> <69ff> +<2908> <69ec> +<2909> <69e2> +<290a> <6a1b> +<290b> <6a1d> +<290c> <69fe> +<290d> <6a27> +<290e> <69f2> +<290f> <69ee> +<2910> <6a14> +<2911> <69f7> +<2912> <69e7> +<2913> <6a40> +<2914> <6a08> +<2915> <69e6> +<2916> <69fb> +<2917> <6a0d> +<2918> <69fc> +<2919> <69eb> +<291a> <6a09> +<291b> <6a04> +<291c> <6a18> +<291d> <6a25> +<291e> <6a0f> +<291f> <69f6> +<2920> <6a26> +<2921> <6a07> +<2922> <69f4> +<2923> <6a16> +<2924> <6b51> +<2925> <6ba5> +<2926> <6ba3> +<2927> <6ba2> +<2928> <6ba6> +<2929> <6c01> +<292a> <6c00> +<292b> <6bff> +<292c> <6c02> +<292d> <6f41> +<292e> <6f26> +<292f> <6f7e> +<2930> <6f87> +<2931> <6fc6> +<2932> <6f92> +<2933> <6f8d> +<2934> <6f89> +<2935> <6f8c> +<2936> <6f62> +<2937> <6f4f> +<2938> <6f85> +<2939> <6f5a> +<293a> <6f96> +<293b> <6f76> +<293c> <6f6c> +<293d> <6f82> +<293e> <6f55> +<293f> <6f72> +<2940> <6f52> +<2941> <6f50> +<2942> <6f57> +<2943> <6f94> +<2944> <6f93> +<2945> <6f5d> +<2946> <6f00> +<2947> <6f61> +<2948> <6f6b> +<2949> <6f7d> +<294a> <6f67> +<294b> <6f90> +<294c> <6f53> +<294d> <6f8b> +<294e> <6f69> +<294f> <6f7f> +<2950> <6f95> +<2951> <6f63> +<2952> <6f77> +<2953> <6f6a> +<2954> <6f7b> +<2955> <71b2> +<2956> <71af> +<2957> <719b> +<2958> <71b0> +<2959> <71a0> +<295a> <719a> +<295b> <71a9> +endbfchar + +100 beginbfchar +<295c> <71b5> +<295d> <719d> +<295e> <71a5> +<295f> <719e> +<2960> <71a4> +<2961> <71a1> +<2962> <71aa> +<2963> <719c> +<2964> <71a7> +<2965> <71b3> +<2966> <7298> +<2967> <729a> +<2968> <7358> +<2969> <7352> +<296d> <735d> +<296e> <735b> +<296f> <7361> +<2970> <735a> +<2971> <7359> +<2972> <7362> +<2973> <7487> +<2976> <7486> +<2977> <7481> +<2978> <747d> +<2979> <7485> +<297a> <7488> +<297b> <747c> +<297c> <7479> +<297d> <7508> +<297e> <7507> +<297f> <757e> +<2980> <7625> +<2981> <761e> +<2982> <7619> +<2983> <761d> +<2984> <761c> +<2985> <7623> +<2986> <761a> +<2987> <7628> +<2988> <761b> +<298c> <769b> +<298d> <778d> +<298e> <778f> +<298f> <7789> +<2990> <7788> +<2991> <78cd> +<2992> <78bb> +<2993> <78cf> +<2994> <78cc> +<2995> <78d1> +<2996> <78ce> +<2997> <78d4> +<2998> <78c8> +<299b> <78c9> +<299c> <799a> +<299d> <79a1> +<299e> <79a0> +<299f> <799c> +<29a0> <79a2> +<29a1> <799b> +<29a2> <6b76> +<29a3> <7a39> +<29a4> <7ab2> +<29a5> <7ab4> +<29a6> <7ab3> +<29a7> <7bb7> +<29a8> <7bcb> +<29a9> <7bbe> +<29aa> <7bac> +<29ab> <7bce> +<29ac> <7baf> +<29ad> <7bb9> +<29ae> <7bca> +<29af> <7bb5> +<29b0> <7cc5> +<29b1> <7cc8> +<29b2> <7ccc> +<29b3> <7ccb> +<29b4> <7df7> +<29b5> <7ddb> +<29b6> <7dea> +<29b7> <7de7> +<29b8> <7dd7> +<29b9> <7de1> +<29ba> <7e03> +<29bb> <7dfa> +<29bc> <7de6> +<29bd> <7df6> +<29be> <7df1> +<29bf> <7df0> +<29c0> <7dee> +<29c1> <7ddf> +<29c2> <7f76> +<29c3> <7fac> +<29c4> <7fb0> +<29c5> <7fad> +<29c6> <7fed> +<29c7> <7feb> +<29c8> <7fea> +<29c9> <7fec> +endbfchar + +100 beginbfchar +<29ca> <7fe6> +<29cb> <7fe8> +<29cc> <8064> +<29cd> <8067> +<29ce> <81a3> +<29cf> <819f> +<29d0> <819e> +<29d1> <8195> +<29d2> <81a2> +<29d3> <8199> +<29d4> <8197> +<29d5> <8216> +<29d6> <824f> +<29d7> <8253> +<29d8> <8252> +<29d9> <8250> +<29da> <824e> +<29db> <8251> +<29dc> <8524> +<29dd> <853b> +<29de> <850f> +<29df> <8500> +<29e0> <8529> +<29e1> <850e> +<29e2> <8509> +<29e3> <850d> +<29e4> <851f> +<29e5> <850a> +<29e6> <8527> +<29e7> <851c> +<29e8> <84fb> +<29e9> <852b> +<29ea> <84fa> +<29eb> <8508> +<29ec> <850c> +<29ed> <84f4> +<29ee> <852a> +<29ef> <84f2> +<29f0> <8515> +<29f1> <84f7> +<29f2> <84eb> +<29f3> <84f3> +<29f4> <84fc> +<29f5> <8512> +<29f6> <84ea> +<29f7> <84e9> +<29f8> <8516> +<29f9> <84fe> +<29fa> <8528> +<29fb> <851d> +<29fc> <852e> +<29fd> <8502> +<29fe> <84fd> +<29ff> <851e> +<2a00> <84f6> +<2a01> <8531> +<2a02> <8526> +<2a05> <84f0> +<2a06> <84ef> +<2a07> <84f9> +<2a08> <8518> +<2a09> <8520> +<2a0a> <8530> +<2a0b> <850b> +<2a0c> <8519> +<2a0d> <852f> +<2a0e> <8662> +<2a0f> <8756> +<2a12> <8777> +<2a13> <87e1> +<2a14> <8773> +<2a15> <8758> +<2a16> <8754> +<2a17> <875b> +<2a18> <8752> +<2a19> <8761> +<2a1a> <875a> +<2a1b> <8751> +<2a1c> <875e> +<2a1d> <876d> +<2a1e> <876a> +<2a1f> <8750> +<2a20> <874e> +<2a21> <875f> +<2a22> <875d> +<2a23> <876f> +<2a24> <876c> +<2a25> <877a> +<2a26> <876e> +<2a27> <875c> +<2a28> <8765> +<2a29> <874f> +<2a2a> <877b> +<2a2b> <8775> +<2a2c> <8762> +<2a2d> <8767> +<2a2e> <8769> +<2a2f> <885a> +<2a30> <8905> +<2a31> <890c> +endbfchar + +100 beginbfchar +<2a32> <8914> +<2a33> <890b> +<2a37> <8906> +<2a38> <8916> +<2a39> <8911> +<2a3a> <890e> +<2a3b> <8909> +<2a3c> <89a2> +<2a3d> <89a4> +<2a3e> <89a3> +<2a3f> <89ed> +<2a40> <89f0> +<2a41> <89ec> +<2a42> <8acf> +<2a43> <8ac6> +<2a44> <8ab8> +<2a45> <8ad3> +<2a46> <8ad1> +<2a49> <8abb> +<2a4a> <8ad7> +<2a4b> <8abe> +<2a4c> <8ac0> +<2a4d> <8ac5> +<2a4e> <8ad8> +<2a4f> <8ac3> +<2a50> <8aba> +<2a51> <8abd> +<2a52> <8ad9> +<2a53> <8c3e> +<2a54> <8c4d> +<2a55> <8c8f> +<2a56> <8ce5> +<2a57> <8cdf> +<2a58> <8cd9> +<2a59> <8ce8> +<2a5a> <8cda> +<2a5b> <8cdd> +<2a5c> <8ce7> +<2a5d> <8da0> +<2a5e> <8d9c> +<2a5f> <8da1> +<2a60> <8d9b> +<2a61> <8e20> +<2a62> <8e23> +<2a63> <8e25> +<2a64> <8e24> +<2a65> <8e2e> +<2a66> <8e15> +<2a67> <8e1b> +<2a68> <8e16> +<2a69> <8e11> +<2a6a> <8e19> +<2a6d> <8e14> +<2a6e> <8e12> +<2a6f> <8e18> +<2a70> <8e13> +<2a71> <8e1c> +<2a72> <8e17> +<2a73> <8e1a> +<2a74> <8f2c> +<2a75> <8f24> +<2a76> <8f18> +<2a77> <8f1a> +<2a78> <8f20> +<2a79> <8f23> +<2a7c> <9073> +<2a7d> <9070> +<2a7e> <906f> +<2a7f> <9067> +<2a80> <906b> +<2a81> <912f> +<2a82> <912b> +<2a85> <9132> +<2a86> <9126> +<2a87> <912e> +<2a8a> <918a> +<2a8d> <9184> +<2a8e> <9180> +<2a8f> <92d0> +<2a92> <92c0> +<2a93> <92d9> +<2a94> <92b6> +<2a95> <92cf> +<2a96> <92f1> +<2a97> <92df> +<2a98> <92d8> +<2a99> <92e9> +<2a9a> <92d7> +<2a9b> <92dd> +<2a9c> <92cc> +<2a9d> <92ef> +<2a9e> <92c2> +<2a9f> <92e8> +<2aa0> <92ca> +<2aa1> <92c8> +<2aa2> <92ce> +<2aa3> <92e6> +<2aa4> <92cd> +<2aa5> <92d5> +<2aa6> <92c9> +endbfchar + +100 beginbfchar +<2aa7> <92e0> +<2aa8> <92de> +<2aa9> <92e7> +<2aaa> <92d1> +<2aab> <92d3> +<2aac> <92b5> +<2aad> <92e1> +<2aae> <9325> +<2aaf> <92c6> +<2ab0> <92b4> +<2ab1> <957c> +<2ab2> <95ac> +<2ab3> <95ab> +<2ab4> <95ae> +<2ab5> <95b0> +<2ab6> <96a4> +<2ab7> <96a2> +<2ab8> <96d3> +<2ab9> <9705> +<2aba> <9708> +<2abb> <9702> +<2abc> <975a> +<2abd> <978a> +<2abe> <978e> +<2abf> <9788> +<2ac0> <97d0> +<2ac1> <97cf> +<2ac2> <981e> +<2ac3> <981d> +<2ac4> <9826> +<2ac5> <9829> +<2ac6> <9828> +<2ac7> <9820> +<2ac8> <981b> +<2ac9> <9827> +<2aca> <98b2> +<2acb> <9908> +<2acc> <98fa> +<2acd> <9911> +<2ace> <9914> +<2ad1> <9915> +<2ad2> <99dc> +<2ad3> <99cd> +<2ad4> <99cf> +<2ad7> <99ce> +<2ad8> <99c9> +<2ad9> <99d6> +<2ada> <99d8> +<2adb> <99cb> +<2adc> <99d7> +<2add> <99cc> +<2ade> <9ab3> +<2adf> <9aec> +<2ae0> <9aeb> +<2ae1> <9af3> +<2ae2> <9af2> +<2ae3> <9af1> +<2ae4> <9b46> +<2ae5> <9b43> +<2ae6> <9b67> +<2ae7> <9b74> +<2ae8> <9b71> +<2ae9> <9b66> +<2aea> <9b76> +<2aeb> <9b75> +<2aec> <9b70> +<2aed> <9b68> +<2aee> <9b64> +<2aef> <9b6c> +<2af0> <9cfc> +<2af1> <9cfa> +<2af2> <9cfd> +<2af3> <9cff> +<2af4> <9cf7> +<2af5> <9d07> +<2af6> <9d00> +<2af7> <9cf9> +<2af8> <9cfb> +<2af9> <9d08> +<2afa> <9d05> +<2afb> <9d04> +<2afc> <9e83> +<2afd> <9ed3> +<2b00> <511c> +<2b01> <5113> +<2b02> <5117> +<2b03> <511a> +<2b04> <5111> +<2b05> <51de> +<2b06> <5334> +<2b07> <53e1> +<2b08> <5670> +<2b09> <5660> +<2b0a> <566e> +<2b0b> <5673> +<2b0c> <5666> +<2b0d> <5663> +<2b0e> <566d> +<2b0f> <5672> +<2b10> <565e> +endbfchar + +100 beginbfchar +<2b11> <5677> +<2b12> <571c> +<2b13> <571b> +<2b14> <58c8> +<2b15> <58bd> +<2b16> <58c9> +<2b17> <58bf> +<2b18> <58ba> +<2b19> <58c2> +<2b1a> <58bc> +<2b1b> <58c6> +<2b1c> <5b17> +<2b1d> <5b19> +<2b1e> <5b1b> +<2b1f> <5b21> +<2b20> <5b14> +<2b21> <5b13> +<2b22> <5b10> +<2b23> <5b16> +<2b24> <5b28> +<2b25> <5b1a> +<2b26> <5b20> +<2b27> <5b1e> +<2b28> <5bef> +<2b29> <5dac> +<2b2a> <5db1> +<2b2b> <5da9> +<2b2c> <5da7> +<2b2d> <5db5> +<2b2e> <5db0> +<2b2f> <5dae> +<2b30> <5daa> +<2b31> <5da8> +<2b32> <5db2> +<2b33> <5dad> +<2b34> <5daf> +<2b35> <5db4> +<2b38> <5e66> +<2b39> <5e6f> +<2b3a> <5ee9> +<2b3b> <5ee7> +<2b3c> <5ee6> +<2b3d> <5ee8> +<2b3e> <5ee5> +<2b3f> <5f4b> +<2b40> <5fbc> +<2b41> <5fbb> +<2b42> <619d> +<2b43> <61a8> +<2b44> <6196> +<2b45> <61c5> +<2b46> <61b4> +<2b47> <61c6> +<2b48> <61c1> +<2b49> <61cc> +<2b4a> <61ba> +<2b4b> <61bf> +<2b4c> <61b8> +<2b4d> <618c> +<2b4e> <64d7> +<2b4f> <64d6> +<2b50> <64d0> +<2b51> <64cf> +<2b52> <64c9> +<2b53> <64bd> +<2b54> <6489> +<2b55> <64c3> +<2b56> <64db> +<2b57> <64f3> +<2b58> <64d9> +<2b59> <6533> +<2b5a> <657f> +<2b5b> <657c> +<2b5c> <65a2> +<2b5d> <66c8> +<2b5e> <66be> +<2b5f> <66c0> +<2b62> <66cf> +<2b63> <66bd> +<2b64> <66bb> +<2b65> <66ba> +<2b66> <66cc> +<2b67> <6723> +<2b68> <6a34> +<2b69> <6a66> +<2b6a> <6a49> +<2b6b> <6a67> +<2b6c> <6a32> +<2b6d> <6a68> +<2b6e> <6a3e> +<2b6f> <6a5d> +<2b70> <6a6d> +<2b71> <6a76> +<2b72> <6a5b> +<2b73> <6a51> +<2b74> <6a28> +<2b75> <6a5a> +<2b76> <6a3b> +<2b77> <6a3f> +<2b78> <6a41> +endbfchar + +100 beginbfchar +<2b79> <6a6a> +<2b7a> <6a64> +<2b7b> <6a50> +<2b7c> <6a4f> +<2b7d> <6a54> +<2b7e> <6a6f> +<2b7f> <6a69> +<2b80> <6a60> +<2b81> <6a3c> +<2b82> <6a5e> +<2b83> <6a56> +<2b84> <6a55> +<2b87> <6a46> +<2b88> <6b55> +<2b89> <6b54> +<2b8a> <6b56> +<2b8b> <6ba7> +<2b8e> <6bc8> +<2b8f> <6bc7> +<2b90> <6c04> +<2b91> <6c03> +<2b92> <6c06> +<2b93> <6fad> +<2b94> <6fcb> +<2b95> <6fa3> +<2b96> <6fc7> +<2b97> <6fbc> +<2b98> <6fce> +<2b99> <6fc8> +<2b9a> <6f5e> +<2b9b> <6fc4> +<2b9c> <6fbd> +<2b9d> <6f9e> +<2b9e> <6fca> +<2b9f> <6fa8> +<2ba0> <7004> +<2ba1> <6fa5> +<2ba2> <6fae> +<2ba3> <6fba> +<2ba4> <6fac> +<2ba5> <6faa> +<2ba6> <6fcf> +<2ba7> <6fbf> +<2ba8> <6fb8> +<2ba9> <6fa2> +<2baa> <6fc9> +<2bab> <6fab> +<2bac> <6fcd> +<2bad> <6faf> +<2bae> <6fb2> +<2baf> <6fb0> +<2bb0> <71c5> +<2bb1> <71c2> +<2bb2> <71bf> +<2bb3> <71b8> +<2bb4> <71d6> +<2bb7> <71cb> +<2bb8> <71d4> +<2bb9> <71ca> +<2bba> <71c7> +<2bbb> <71cf> +<2bbc> <71bd> +<2bbd> <71d8> +<2bbe> <71bc> +<2bbf> <71c6> +<2bc4> <7369> +<2bc7> <736c> +<2bc8> <7365> +<2bc9> <736b> +<2bca> <736a> +<2bcb> <747f> +<2bcc> <749a> +<2bcd> <74a0> +<2bce> <7494> +<2bcf> <7492> +<2bd0> <7495> +<2bd1> <74a1> +<2bd2> <750b> +<2bd3> <7580> +<2bd4> <762f> +<2bd5> <762d> +<2bd6> <7631> +<2bd7> <763d> +<2bd8> <7633> +<2bd9> <763c> +<2bda> <7635> +<2bdb> <7632> +<2bdc> <7630> +<2bdd> <76bb> +<2bde> <76e6> +<2bdf> <779a> +<2be0> <779d> +<2be1> <77a1> +<2be2> <779c> +<2be3> <779b> +<2be6> <7795> +<2be7> <7799> +<2be8> <7797> +<2be9> <78dd> +<2bea> <78e9> +endbfchar + +100 beginbfchar +<2beb> <78e5> +<2bec> <78ea> +<2bed> <78de> +<2bee> <78e3> +<2bef> <78db> +<2bf2> <78ed> +<2bf5> <79a4> +<2bf6> <7a44> +<2bf7> <7a48> +<2bf8> <7a47> +<2bf9> <7ab6> +<2bfa> <7ab8> +<2bfb> <7ab5> +<2bfc> <7ab1> +<2bfd> <7ab7> +<2bfe> <7bde> +<2bff> <7be3> +<2c00> <7be7> +<2c01> <7bdd> +<2c02> <7bd5> +<2c03> <7be5> +<2c04> <7bda> +<2c05> <7be8> +<2c06> <7bf9> +<2c07> <7bd4> +<2c08> <7bea> +<2c09> <7be2> +<2c0a> <7bdc> +<2c0b> <7beb> +<2c0c> <7bd8> +<2c0d> <7bdf> +<2c0e> <7cd2> +<2c0f> <7cd4> +<2c10> <7cd7> +<2c13> <7e12> +<2c14> <7e21> +<2c15> <7e17> +<2c16> <7e0c> +<2c19> <7e13> +<2c1a> <7e0e> +<2c1b> <7e1c> +<2c1c> <7e15> +<2c1d> <7e1a> +<2c1e> <7e22> +<2c1f> <7e0b> +<2c20> <7e0f> +<2c21> <7e16> +<2c22> <7e0d> +<2c23> <7e14> +<2c24> <7e25> +<2c25> <7e24> +<2c26> <7f43> +<2c29> <7f7a> +<2c2a> <7fb1> +<2c2b> <7fef> +<2c2c> <802a> +<2c2d> <8029> +<2c2e> <806c> +<2c2f> <81b1> +<2c30> <81a6> +<2c31> <81ae> +<2c32> <81b9> +<2c33> <81b5> +<2c34> <81ab> +<2c35> <81b0> +<2c36> <81ac> +<2c37> <81b4> +<2c38> <81b2> +<2c39> <81b7> +<2c3a> <81a7> +<2c3b> <81f2> +<2c3f> <8556> +<2c40> <8545> +<2c41> <856b> +<2c42> <854d> +<2c43> <8553> +<2c44> <8561> +<2c45> <8558> +<2c46> <8540> +<2c47> <8546> +<2c48> <8564> +<2c49> <8541> +<2c4a> <8562> +<2c4b> <8544> +<2c4c> <8551> +<2c4d> <8547> +<2c4e> <8563> +<2c4f> <853e> +<2c50> <855b> +<2c51> <8571> +<2c52> <854e> +<2c53> <856e> +<2c54> <8575> +<2c55> <8555> +<2c56> <8567> +<2c57> <8560> +<2c58> <858c> +<2c59> <8566> +<2c5a> <855d> +<2c5b> <8554> +endbfchar + +100 beginbfchar +<2c5c> <8565> +<2c5d> <856c> +<2c5e> <8663> +<2c5f> <8665> +<2c60> <8664> +<2c61> <87a4> +<2c62> <879b> +<2c63> <878f> +<2c64> <8797> +<2c65> <8793> +<2c66> <8792> +<2c67> <8788> +<2c68> <8781> +<2c69> <8796> +<2c6a> <8798> +<2c6b> <8779> +<2c6c> <8787> +<2c6d> <87a3> +<2c6e> <8785> +<2c71> <879d> +<2c72> <8784> +<2c73> <8794> +<2c74> <879c> +<2c75> <879a> +<2c76> <8789> +<2c77> <891e> +<2c78> <8926> +<2c79> <8930> +<2c7c> <8927> +<2c7d> <8931> +<2c7e> <8922> +<2c7f> <8929> +<2c80> <8923> +<2c81> <892f> +<2c82> <892c> +<2c83> <891f> +<2c84> <89f1> +<2c85> <8ae0> +<2c86> <8ae2> +<2c87> <8af2> +<2c8a> <8add> +<2c8b> <8b14> +<2c8c> <8ae4> +<2c8d> <8adf> +<2c8e> <8af0> +<2c8f> <8ac8> +<2c90> <8ade> +<2c91> <8ae1> +<2c92> <8ae8> +<2c93> <8aff> +<2c94> <8aef> +<2c95> <8afb> +<2c98> <8c90> +<2c99> <8cf5> +<2c9a> <8cee> +<2c9b> <8cf1> +<2c9c> <8cf0> +<2c9d> <8cf3> +<2c9e> <8d6c> +<2c9f> <8d6e> +<2ca0> <8da5> +<2ca1> <8da7> +<2ca2> <8e33> +<2ca3> <8e3e> +<2ca4> <8e38> +<2ca5> <8e40> +<2ca6> <8e45> +<2ca7> <8e36> +<2caa> <8e41> +<2cab> <8e30> +<2cac> <8e3f> +<2cad> <8ebd> +<2cae> <8f36> +<2caf> <8f2e> +<2cb0> <8f35> +<2cb1> <8f32> +<2cb2> <8f39> +<2cb3> <8f37> +<2cb4> <8f34> +<2cb5> <9076> +<2cb6> <9079> +<2cb7> <907b> +<2cb8> <9086> +<2cb9> <90fa> +<2cba> <9133> +<2cbd> <9193> +<2cc0> <918d> +<2cc1> <918f> +<2cc2> <9327> +<2cc3> <931e> +<2cc4> <9308> +<2cc5> <931f> +<2cc6> <9306> +<2cc7> <930f> +<2cc8> <937a> +<2cc9> <9338> +<2cca> <933c> +<2ccb> <931b> +<2ccc> <9323> +<2ccd> <9312> +endbfchar + +100 beginbfchar +<2cce> <9301> +<2ccf> <9346> +<2cd0> <932d> +<2cd1> <930e> +<2cd2> <930d> +<2cd3> <92cb> +<2cd4> <931d> +<2cd5> <92fa> +<2cd6> <9313> +<2cd7> <92f9> +<2cd8> <92f7> +<2cd9> <9334> +<2cda> <9302> +<2cdb> <9324> +<2cdc> <92ff> +<2cdd> <9329> +<2cde> <9339> +<2cdf> <9335> +<2ce0> <932a> +<2ce1> <9314> +<2ce2> <930c> +<2ce3> <930b> +<2ce4> <92fe> +<2ce5> <9309> +<2ce6> <9300> +<2ce7> <92fb> +<2ce8> <9316> +<2ce9> <95bc> +<2cea> <95cd> +<2ceb> <95be> +<2cee> <95b6> +<2cef> <95bf> +<2cf0> <95b5> +<2cf1> <95bd> +<2cf2> <96a9> +<2cf3> <96d4> +<2cf4> <970b> +<2cf5> <9712> +<2cf6> <9710> +<2cf7> <9799> +<2cf8> <9797> +<2cf9> <9794> +<2cfa> <97f0> +<2cfb> <97f8> +<2cfc> <9835> +<2cfd> <982f> +<2cfe> <9832> +<2cff> <9924> +<2d00> <991f> +<2d01> <9927> +<2d02> <9929> +<2d03> <999e> +<2d04> <99ee> +<2d05> <99ec> +<2d06> <99e5> +<2d07> <99e4> +<2d08> <99f0> +<2d09> <99e3> +<2d0a> <99ea> +<2d0b> <99e9> +<2d0c> <99e7> +<2d0d> <9ab9> +<2d0e> <9abf> +<2d0f> <9ab4> +<2d10> <9abb> +<2d11> <9af6> +<2d12> <9afa> +<2d13> <9af9> +<2d14> <9af7> +<2d15> <9b33> +<2d16> <9b80> +<2d17> <9b85> +<2d18> <9b87> +<2d19> <9b7c> +<2d1a> <9b7e> +<2d1b> <9b7b> +<2d1c> <9b82> +<2d1d> <9b93> +<2d1e> <9b92> +<2d1f> <9b90> +<2d20> <9b7a> +<2d21> <9b95> +<2d22> <9b7d> +<2d23> <9b88> +<2d24> <9d25> +<2d25> <9d17> +<2d26> <9d20> +<2d27> <9d1e> +<2d28> <9d14> +<2d29> <9d29> +<2d2a> <9d1d> +<2d2b> <9d18> +<2d2c> <9d22> +<2d2d> <9d10> +<2d2e> <9d19> +<2d2f> <9d1f> +<2d30> <9e88> +<2d33> <9eae> +<2d34> <9ead> +<2d37> <9efa> +endbfchar + +100 beginbfchar +<2d38> <9f12> +<2d39> <9f3d> +<2d3a> <5126> +<2d3b> <5125> +<2d3c> <5122> +<2d3d> <5124> +<2d3e> <5120> +<2d3f> <5129> +<2d40> <52f4> +<2d41> <5693> +<2d44> <5686> +<2d45> <5684> +<2d46> <5683> +<2d47> <567e> +<2d48> <5682> +<2d49> <567f> +<2d4a> <5681> +<2d4b> <58d6> +<2d4c> <58d4> +<2d4d> <58cf> +<2d4e> <58d2> +<2d4f> <5b2d> +<2d50> <5b25> +<2d51> <5b32> +<2d52> <5b23> +<2d53> <5b2c> +<2d54> <5b27> +<2d55> <5b26> +<2d56> <5b2f> +<2d57> <5b2e> +<2d58> <5b7b> +<2d5b> <5db7> +<2d5c> <5e6c> +<2d5d> <5e6a> +<2d5e> <5fbe> +<2d5f> <61c3> +<2d60> <61b5> +<2d61> <61bc> +<2d62> <61e7> +<2d63> <61e0> +<2d64> <61e5> +<2d65> <61e4> +<2d66> <61e8> +<2d67> <61de> +<2d68> <64ef> +<2d69> <64e9> +<2d6a> <64e3> +<2d6b> <64eb> +<2d6c> <64e4> +<2d6d> <64e8> +<2d6e> <6581> +<2d6f> <6580> +<2d70> <65b6> +<2d71> <65da> +<2d72> <66d2> +<2d73> <6a8d> +<2d74> <6a96> +<2d75> <6a81> +<2d76> <6aa5> +<2d77> <6a89> +<2d78> <6a9f> +<2d79> <6a9b> +<2d7a> <6aa1> +<2d7b> <6a9e> +<2d7c> <6a87> +<2d7d> <6a93> +<2d7e> <6a8e> +<2d7f> <6a95> +<2d80> <6a83> +<2d81> <6aa8> +<2d82> <6aa4> +<2d83> <6a91> +<2d84> <6a7f> +<2d85> <6aa6> +<2d86> <6a9a> +<2d87> <6a85> +<2d88> <6a8c> +<2d89> <6a92> +<2d8a> <6b5b> +<2d8b> <6bad> +<2d8c> <6c09> +<2d8d> <6fcc> +<2d8e> <6fa9> +<2d8f> <6ff4> +<2d90> <6fd4> +<2d91> <6fe3> +<2d92> <6fdc> +<2d93> <6fed> +<2d94> <6fe7> +<2d95> <6fe6> +<2d96> <6fde> +<2d97> <6ff2> +<2d98> <6fdd> +<2d99> <6fe2> +<2d9a> <6fe8> +<2d9b> <71e1> +<2d9c> <71f1> +<2d9d> <71e8> +<2d9e> <71f2> +<2d9f> <71e4> +endbfchar + +100 beginbfchar +<2da0> <71f0> +<2da1> <71e2> +<2da2> <7373> +<2da5> <7497> +<2da6> <74b2> +<2da7> <74ab> +<2da8> <7490> +<2da9> <74aa> +<2daa> <74ad> +<2dab> <74b1> +<2dac> <74a5> +<2dad> <74af> +<2db1> <750f> +<2db2> <7584> +<2db3> <7643> +<2db6> <7647> +<2db7> <76a4> +<2db8> <76e9> +<2db9> <77b5> +<2dba> <77ab> +<2dbb> <77b2> +<2dbc> <77b7> +<2dbd> <77b6> +<2dbe> <77b4> +<2dbf> <77b1> +<2dc0> <77a8> +<2dc1> <77f0> +<2dc2> <78f3> +<2dc3> <78fd> +<2dc4> <7902> +<2dc7> <78ff> +<2dc8> <78f2> +<2dc9> <7905> +<2dca> <78f9> +<2dcb> <78fe> +<2dcc> <7904> +<2dcd> <79ab> +<2dce> <79a8> +<2dcf> <7a5c> +<2dd0> <7a5b> +<2dd1> <7a56> +<2dd2> <7a58> +<2dd3> <7a54> +<2dd4> <7a5a> +<2dd5> <7abe> +<2dd8> <7c05> +<2dd9> <7c0f> +<2dda> <7bf2> +<2ddb> <7c00> +<2ddc> <7bff> +<2ddd> <7bfb> +<2dde> <7c0e> +<2ddf> <7bf4> +<2de0> <7c0b> +<2de1> <7bf3> +<2de2> <7c02> +<2de3> <7c09> +<2de4> <7c03> +<2de5> <7c01> +<2de6> <7bf8> +<2de7> <7bfd> +<2de8> <7c06> +<2deb> <7c10> +<2dec> <7c0a> +<2ded> <7ce8> +<2dee> <7e2d> +<2def> <7e3c> +<2df0> <7e42> +<2df1> <7e33> +<2df2> <9848> +<2df3> <7e38> +<2df4> <7e2a> +<2df5> <7e49> +<2df6> <7e40> +<2df7> <7e47> +<2df8> <7e29> +<2df9> <7e4c> +<2dfa> <7e30> +<2dfb> <7e3b> +<2dfc> <7e36> +<2dfd> <7e44> +<2dfe> <7e3a> +<2dff> <7f45> +<2e00> <7f7f> +<2e01> <7f7e> +<2e02> <7f7d> +<2e03> <7ff4> +<2e04> <7ff2> +<2e05> <802c> +<2e06> <81bb> +<2e07> <81c4> +<2e08> <81cc> +<2e09> <81ca> +<2e0a> <81c5> +<2e0b> <81c7> +<2e0c> <81bc> +<2e0d> <81e9> +<2e0e> <825b> +<2e0f> <825a> +<2e10> <825c> +endbfchar + +100 beginbfchar +<2e11> <8583> +<2e12> <8580> +<2e13> <858f> +<2e14> <85a7> +<2e15> <8595> +<2e16> <85a0> +<2e17> <858b> +<2e18> <85a3> +<2e19> <857b> +<2e1a> <85a4> +<2e1b> <859a> +<2e1c> <859e> +<2e1d> <8577> +<2e1e> <857c> +<2e1f> <8589> +<2e20> <85a1> +<2e21> <857a> +<2e22> <8578> +<2e23> <8557> +<2e24> <858e> +<2e25> <8596> +<2e26> <8586> +<2e27> <858d> +<2e28> <8599> +<2e29> <859d> +<2e2a> <8581> +<2e2b> <85a2> +<2e2c> <8582> +<2e2d> <8588> +<2e2e> <8585> +<2e2f> <8579> +<2e30> <8576> +<2e31> <8598> +<2e32> <8590> +<2e33> <859f> +<2e34> <8668> +<2e35> <87be> +<2e36> <87aa> +<2e37> <87ad> +<2e38> <87c5> +<2e39> <87b0> +<2e3a> <87ac> +<2e3b> <87b9> +<2e3c> <87b5> +<2e3d> <87bc> +<2e3e> <87ae> +<2e3f> <87c9> +<2e40> <87c3> +<2e41> <87c2> +<2e42> <87cc> +<2e43> <87b7> +<2e44> <87af> +<2e45> <87c4> +<2e46> <87ca> +<2e47> <87b4> +<2e48> <87b6> +<2e49> <87bf> +<2e4a> <87b8> +<2e4b> <87bd> +<2e4c> <87de> +<2e4d> <87b2> +<2e4e> <8935> +<2e4f> <8933> +<2e50> <893c> +<2e51> <893e> +<2e52> <8941> +<2e53> <8952> +<2e54> <8937> +<2e55> <8942> +<2e56> <89ad> +<2e57> <89af> +<2e58> <89ae> +<2e5b> <8b1e> +<2e5c> <8b18> +<2e5d> <8b16> +<2e5e> <8b11> +<2e5f> <8b05> +<2e60> <8b0b> +<2e61> <8b22> +<2e62> <8b0f> +<2e63> <8b12> +<2e64> <8b15> +<2e65> <8b07> +<2e66> <8b0d> +<2e67> <8b08> +<2e68> <8b06> +<2e69> <8b1c> +<2e6a> <8b13> +<2e6b> <8b1a> +<2e6c> <8c4f> +<2e6d> <8c70> +<2e6e> <8c72> +<2e6f> <8c71> +<2e70> <8c6f> +<2e71> <8c95> +<2e72> <8c94> +<2e73> <8cf9> +<2e74> <8d6f> +<2e75> <8e4e> +<2e76> <8e4d> +endbfchar + +100 beginbfchar +<2e77> <8e53> +<2e78> <8e50> +<2e79> <8e4c> +<2e7a> <8e47> +<2e7b> <8f43> +<2e7c> <8f40> +<2e7d> <9085> +<2e7e> <907e> +<2e7f> <9138> +<2e80> <919a> +<2e81> <91a2> +<2e82> <919b> +<2e83> <9199> +<2e84> <919f> +<2e85> <91a1> +<2e86> <919d> +<2e87> <91a0> +<2e88> <93a1> +<2e89> <9383> +<2e8a> <93af> +<2e8b> <9364> +<2e8c> <9356> +<2e8d> <9347> +<2e8e> <937c> +<2e8f> <9358> +<2e90> <935c> +<2e91> <9376> +<2e92> <9349> +<2e95> <9360> +<2e96> <936d> +<2e97> <938f> +<2e98> <934c> +<2e99> <936a> +<2e9a> <9379> +<2e9b> <9357> +<2e9c> <9355> +<2e9d> <9352> +<2e9e> <934f> +<2e9f> <9371> +<2ea0> <9377> +<2ea1> <937b> +<2ea2> <9361> +<2ea3> <935e> +<2ea4> <9363> +<2ea5> <9367> +<2ea6> <934e> +<2ea7> <9359> +<2ea8> <95c7> +<2ea9> <95c0> +<2eaa> <95c9> +<2eab> <95c3> +<2eac> <95c5> +<2ead> <95b7> +<2eae> <96ae> +<2eaf> <96b0> +<2eb0> <96ac> +<2eb1> <9720> +<2eb2> <971f> +<2eb3> <9718> +<2eb4> <971d> +<2eb5> <9719> +<2eb6> <979a> +<2eb7> <97a1> +<2eb8> <979c> +<2eb9> <979e> +<2eba> <979d> +<2ebb> <97d5> +<2ebc> <97d4> +<2ebd> <97f1> +<2ebe> <9841> +<2ebf> <9844> +<2ec0> <984a> +<2ec1> <9849> +<2ec2> <9845> +<2ec3> <9843> +<2ec4> <9925> +<2ec7> <992a> +<2ec8> <9933> +<2ec9> <9932> +<2eca> <992f> +<2ecb> <992d> +<2ecc> <9931> +<2ecd> <9930> +<2ece> <9998> +<2ecf> <99a3> +<2ed0> <99a1> +<2ed1> <9a02> +<2ed2> <99fa> +<2ed3> <99f4> +<2ed4> <99f7> +<2ed5> <99f9> +<2ed6> <99f8> +<2ed7> <99f6> +<2ed8> <99fb> +<2edb> <99fc> +<2edc> <9a03> +<2edd> <9abe> +<2ede> <9afe> +<2edf> <9afd> +<2ee0> <9b01> +endbfchar + +100 beginbfchar +<2ee1> <9afc> +<2ee2> <9b48> +<2ee3> <9b9a> +<2ee4> <9ba8> +<2ee5> <9b9e> +<2ee6> <9b9b> +<2ee7> <9ba6> +<2ee8> <9ba1> +<2ee9> <9ba5> +<2eea> <9ba4> +<2eeb> <9b86> +<2eec> <9ba2> +<2eed> <9ba0> +<2eee> <9baf> +<2eef> <9d33> +<2ef0> <9d41> +<2ef1> <9d67> +<2ef2> <9d36> +<2ef5> <9d31> +<2ef6> <9d38> +<2ef7> <9d30> +<2ef8> <9d45> +<2efb> <9d3e> +<2efc> <9d37> +<2efd> <9d40> +<2efe> <9d3d> +<2eff> <7ff5> +<2f00> <9d2d> +<2f01> <9e8a> +<2f02> <9e89> +<2f03> <9e8d> +<2f04> <9eb0> +<2f05> <9ec8> +<2f06> <9eda> +<2f07> <9efb> +<2f08> <9eff> +<2f09> <9f24> +<2f0a> <9f23> +<2f0b> <9f22> +<2f0c> <9f54> +<2f0d> <9fa0> +<2f0e> <5131> +<2f11> <5698> +<2f12> <569c> +<2f13> <5697> +<2f14> <569a> +<2f15> <569d> +<2f16> <5699> +<2f17> <5970> +<2f18> <5b3c> +<2f1b> <5dc0> +<2f1e> <61d8> +<2f1f> <61df> +<2f22> <61f1> +<2f23> <61ea> +<2f24> <61f0> +<2f25> <61eb> +<2f26> <61d6> +<2f27> <61e9> +<2f28> <64ff> +<2f29> <6504> +<2f2a> <64fd> +<2f2b> <64f8> +<2f2c> <6501> +<2f2d> <6503> +<2f2e> <64fc> +<2f2f> <6594> +<2f30> <65db> +<2f33> <66d8> +<2f34> <6ac5> +<2f35> <6ab9> +<2f36> <6abd> +<2f37> <6ae1> +<2f38> <6ac6> +<2f39> <6aba> +<2f3c> <6ac7> +<2f3d> <6ab4> +<2f3e> <6aad> +<2f3f> <6b5e> +<2f40> <6bc9> +<2f41> <6c0b> +<2f42> <7007> +<2f45> <7001> +<2f46> <7005> +<2f47> <7014> +<2f48> <700e> +<2f4b> <6ffb> +<2f4c> <7026> +<2f4d> <6ffc> +<2f4e> <6ff7> +<2f4f> <700a> +<2f50> <7201> +<2f51> <71ff> +<2f52> <71f9> +<2f53> <7203> +<2f54> <71fd> +<2f55> <7376> +<2f56> <74b8> +<2f57> <74c0> +<2f58> <74b5> +endbfchar + +100 beginbfchar +<2f59> <74c1> +<2f5a> <74be> +<2f5b> <74b6> +<2f5c> <74bb> +<2f5d> <74c2> +<2f5e> <7514> +<2f5f> <7513> +<2f60> <765c> +<2f61> <7664> +<2f62> <7659> +<2f63> <7650> +<2f64> <7653> +<2f65> <7657> +<2f66> <765a> +<2f67> <76a6> +<2f68> <76bd> +<2f69> <76ec> +<2f6a> <77c2> +<2f6b> <77ba> +<2f6c> <790c> +<2f6f> <7909> +<2f70> <7910> +<2f71> <7912> +<2f72> <7911> +<2f73> <79ad> +<2f74> <79ac> +<2f75> <7a5f> +<2f76> <7c1c> +<2f77> <7c29> +<2f78> <7c19> +<2f79> <7c20> +<2f7a> <7c1f> +<2f7b> <7c2d> +<2f7c> <7c1d> +<2f7d> <7c26> +<2f7e> <7c28> +<2f7f> <7c22> +<2f80> <7c25> +<2f81> <7c30> +<2f82> <7e5c> +<2f83> <7e50> +<2f84> <7e56> +<2f85> <7e63> +<2f86> <7e58> +<2f87> <7e62> +<2f88> <7e5f> +<2f89> <7e51> +<2f8a> <7e60> +<2f8b> <7e57> +<2f8c> <7e53> +<2f8d> <7fb5> +<2f8e> <7fb3> +<2f91> <8075> +<2f94> <81d0> +<2f95> <825f> +<2f96> <825e> +<2f97> <85b4> +<2f98> <85c6> +<2f99> <85c0> +<2f9a> <85c3> +<2f9b> <85c2> +<2f9c> <85b3> +<2f9d> <85b5> +<2f9e> <85bd> +<2f9f> <85c7> +<2fa0> <85c4> +<2fa1> <85bf> +<2fa2> <85cb> +<2fa3> <85ce> +<2fa4> <85c8> +<2fa5> <85c5> +<2fa6> <85b1> +<2fa7> <85b6> +<2fa8> <85d2> +<2fa9> <8624> +<2faa> <85b8> +<2fab> <85b7> +<2fac> <85be> +<2fad> <8669> +<2fae> <87e7> +<2faf> <87e6> +<2fb0> <87e2> +<2fb1> <87db> +<2fb2> <87eb> +<2fb3> <87ea> +<2fb4> <87e5> +<2fb5> <87df> +<2fb6> <87f3> +<2fb7> <87e4> +<2fb8> <87d4> +<2fb9> <87dc> +<2fba> <87d3> +<2fbb> <87ed> +<2fbc> <87d8> +<2fbd> <87e3> +<2fbe> <87d7> +<2fbf> <87d9> +<2fc0> <8801> +<2fc1> <87f4> +<2fc2> <87e8> +endbfchar + +100 beginbfchar +<2fc3> <87dd> +<2fc4> <8953> +<2fc5> <894b> +<2fc6> <894f> +<2fc7> <894c> +<2fc8> <8946> +<2fcb> <8949> +<2fcc> <8b2a> +<2fcd> <8b27> +<2fce> <8b23> +<2fcf> <8b33> +<2fd0> <8b30> +<2fd1> <8b35> +<2fd2> <8b47> +<2fd3> <8b2f> +<2fd4> <8b3c> +<2fd5> <8b3e> +<2fd6> <8b31> +<2fd7> <8b25> +<2fd8> <8b37> +<2fd9> <8b26> +<2fda> <8b36> +<2fdb> <8b2e> +<2fdc> <8b24> +<2fdd> <8b3b> +<2fde> <8b3d> +<2fdf> <8b3a> +<2fe0> <8c42> +<2fe1> <8c75> +<2fe2> <8c99> +<2fe3> <8c98> +<2fe4> <8c97> +<2fe5> <8cfe> +<2fe6> <8d04> +<2fe7> <8d02> +<2fe8> <8d00> +<2fe9> <8e5c> +<2fea> <8e62> +<2feb> <8e60> +<2fec> <8e57> +<2fed> <8e56> +<2fee> <8e5e> +<2fef> <8e65> +<2ff0> <8e67> +<2ff1> <8e5b> +<2ff2> <8e5a> +<2ff3> <8e61> +<2ff4> <8e5d> +<2ff5> <8e69> +<2ff6> <8e54> +<2ffa> <8f4b> +<2ffb> <9128> +<2ffe> <913e> +<2fff> <91a8> +<3000> <91a5> +<3001> <91a7> +<3002> <91af> +<3003> <91aa> +<3004> <93b5> +<3005> <938c> +<3006> <9392> +<3007> <93b7> +<3008> <939b> +<3009> <939d> +<300a> <9389> +<300b> <93a7> +<300c> <938e> +<300d> <93aa> +<300e> <939e> +<300f> <93a6> +<3010> <9395> +<3011> <9388> +<3012> <9399> +<3013> <939f> +<3014> <9380> +<3015> <938d> +<3016> <93b1> +<3017> <9391> +<3018> <93b2> +<3019> <93a4> +<301a> <93a8> +<301b> <93b4> +<301c> <93a3> +<301f> <95d1> +<3020> <96b3> +<3021> <96d7> +<3022> <96da> +<3023> <5dc2> +<3024> <96df> +<3025> <96d8> +<3026> <96dd> +<3027> <9723> +<3028> <9722> +<3029> <9725> +<302a> <97ac> +<302b> <97ae> +<302c> <97a8> +<302d> <97ab> +<302e> <97a4> +<302f> <97aa> +endbfchar + +100 beginbfchar +<3030> <97a2> +<3031> <97a5> +<3032> <97d7> +<3033> <97d9> +<3034> <97d6> +<3035> <97d8> +<3036> <97fa> +<303a> <98b8> +<303b> <9941> +<303c> <993c> +<303d> <993a> +<303e> <9a0f> +<303f> <9a0b> +<3040> <9a09> +<3041> <9a0d> +<3042> <9a04> +<3043> <9a11> +<3044> <9a0a> +<3045> <9a05> +<3046> <9a07> +<3047> <9a06> +<3048> <9ac0> +<3049> <9adc> +<304a> <9b08> +<304d> <9b29> +<304e> <9b35> +<304f> <9b4a> +<3050> <9b4c> +<3051> <9b4b> +<3052> <9bc7> +<3053> <9bc6> +<3054> <9bc3> +<3055> <9bbf> +<3056> <9bc1> +<3057> <9bb5> +<3058> <9bb8> +<3059> <9bd3> +<305a> <9bb6> +<305b> <9bc4> +<305c> <9bb9> +<305d> <9bbd> +<305e> <9d5c> +<305f> <9d53> +<3060> <9d4f> +<3061> <9d4a> +<3062> <9d5b> +<3063> <9d4b> +<3064> <9d59> +<3065> <9d56> +<3066> <9d4c> +<3067> <9d57> +<3068> <9d52> +<3069> <9d54> +<306a> <9d5f> +<306b> <9d58> +<306c> <9d5a> +<306d> <9e8e> +<306e> <9e8c> +<306f> <9edf> +<3070> <9f01> +<3071> <9f00> +<3072> <9f16> +<3073> <9f25> +<3074> <9f2b> +<3075> <9f2a> +<3076> <9f29> +<3077> <9f28> +<3078> <9f4c> +<3079> <9f55> +<307c> <5296> +<307d> <52f7> +<307e> <53b4> +<307f> <56ab> +<3080> <56ad> +<3083> <56aa> +<3084> <56ac> +<3085> <58da> +<3086> <58dd> +<3087> <58db> +<3088> <5912> +<308c> <5dc3> +<308d> <5e70> +<308e> <5fbf> +<308f> <61fb> +<3090> <6507> +<3091> <6510> +<3092> <650d> +<3093> <6509> +<3094> <650c> +<3095> <650e> +<3096> <6584> +<3097> <65de> +<3098> <65dd> +<3099> <66de> +<309a> <6ae7> +<309b> <6ae0> +<309c> <6acc> +<309d> <6ad1> +<309e> <6ad9> +<309f> <6acb> +endbfchar + +100 beginbfchar +<30a0> <6adf> +<30a1> <6adc> +<30a2> <6ad0> +<30a3> <6aeb> +<30a4> <6acf> +<30a5> <6acd> +<30a6> <6ade> +<30a7> <6b60> +<30a8> <6bb0> +<30a9> <6c0c> +<30aa> <7019> +<30ab> <7027> +<30ac> <7020> +<30ad> <7016> +<30ae> <702b> +<30b2> <7029> +<30b3> <7017> +<30b4> <7024> +<30b5> <701c> +<30b6> <720c> +<30b7> <720a> +<30b8> <7207> +<30b9> <7202> +<30ba> <7205> +<30bd> <72a4> +<30be> <72a3> +<30bf> <72a1> +<30c0> <74cb> +<30c1> <74c5> +<30c2> <74b7> +<30c3> <74c3> +<30c4> <7516> +<30c5> <7660> +<30c8> <77c4> +<30c9> <77f1> +<30ca> <791d> +<30cb> <791b> +<30cc> <7921> +<30cd> <791c> +<30ce> <7917> +<30cf> <791e> +<30d0> <79b0> +<30d3> <7c33> +<30d4> <7c3c> +<30d5> <7c39> +<30d6> <7c2c> +<30d7> <7c3b> +<30d8> <7cec> +<30d9> <7cea> +<30da> <7e76> +<30db> <7e75> +<30dc> <7e78> +<30dd> <7e70> +<30de> <7e77> +<30df> <7e6f> +<30e0> <7e7a> +<30e1> <7e72> +<30e2> <7e74> +<30e3> <7e68> +<30e4> <7f4b> +<30e5> <7f4a> +<30e6> <7f83> +<30e7> <7f86> +<30e8> <7fb7> +<30eb> <8078> +<30ec> <81d7> +<30ed> <81d5> +<30ee> <820b> +<30ef> <8264> +<30f0> <8261> +<30f1> <8263> +<30f2> <85eb> +<30f3> <85f1> +<30f4> <85ed> +<30f5> <85d9> +<30f6> <85e1> +<30f7> <85e8> +<30f8> <85da> +<30f9> <85d7> +<30fa> <85ec> +<30fb> <85f2> +<30fc> <85f8> +<30fd> <85d8> +<30fe> <85df> +<30ff> <85e3> +<3100> <85dc> +<3101> <85d1> +<3102> <85f0> +<3103> <85e6> +<3104> <85ef> +<3105> <85de> +<3106> <85e2> +<3107> <8800> +<3108> <87fa> +<3109> <8803> +<310c> <8809> +<310d> <880c> +<310e> <880b> +<310f> <8806> +<3110> <87fc> +endbfchar + +100 beginbfchar +<3111> <8808> +<3112> <87ff> +<3113> <880a> +<3114> <8802> +<3115> <8962> +<3118> <8957> +<3119> <8961> +<311a> <895c> +<311b> <8958> +<311c> <895d> +<311d> <8959> +<311e> <8988> +<311f> <89b7> +<3120> <89b6> +<3121> <89f6> +<3122> <8b50> +<3123> <8b48> +<3124> <8b4a> +<3125> <8b40> +<3126> <8b53> +<3127> <8b56> +<3128> <8b54> +<3129> <8b4b> +<312a> <8b55> +<312b> <8b51> +<312c> <8b42> +<312d> <8b52> +<312e> <8b57> +<312f> <8c43> +<3130> <8c77> +<3131> <8c76> +<3132> <8c9a> +<3135> <8d09> +<3136> <8dac> +<3137> <8daa> +<3138> <8dad> +<3139> <8dab> +<313a> <8e6d> +<313b> <8e78> +<313c> <8e73> +<313d> <8e6a> +<313e> <8e6f> +<313f> <8e7b> +<3140> <8ec2> +<3141> <8f52> +<3142> <8f51> +<3145> <8f53> +<3146> <8fb4> +<3147> <9140> +<3148> <913f> +<3149> <91b0> +<314a> <91ad> +<314b> <93de> +<314c> <93c7> +<314d> <93cf> +<314e> <93c2> +<314f> <93da> +<3150> <93d0> +<3151> <93f9> +<3152> <93ec> +<3153> <93cc> +<3154> <93d9> +<3155> <93a9> +<3156> <93e6> +<3157> <93ca> +<3158> <93d4> +<3159> <93ee> +<315a> <93e3> +<315b> <93d5> +<315c> <93c4> +<315d> <93ce> +<315e> <93c0> +<315f> <93d2> +<3160> <93a5> +<3161> <93e7> +<3162> <957d> +<3165> <96e1> +<3166> <9729> +<3169> <9728> +<316a> <9726> +<316b> <97b3> +<316c> <97b7> +<316d> <97b6> +<3171> <985c> +<3172> <9859> +<3173> <985d> +<3174> <9857> +<3175> <98bf> +<3176> <98bd> +<3177> <98bb> +<3178> <98be> +<3179> <9948> +<317a> <9947> +<317b> <9943> +<317e> <9a1a> +<317f> <9a15> +<3180> <9a25> +<3181> <9a1d> +<3182> <9a24> +<3183> <9a1b> +endbfchar + +100 beginbfchar +<3184> <9a22> +<3185> <9a20> +<3186> <9a27> +<3187> <9a23> +<3188> <9a1e> +<3189> <9a1c> +<318a> <9a14> +<318b> <9ac2> +<318c> <9b0b> +<318d> <9b0a> +<318e> <9b0e> +<318f> <9b0c> +<3190> <9b37> +<3193> <9be0> +<3194> <9bde> +<3195> <9be4> +<3196> <9be6> +<3197> <9be2> +<3198> <9bf0> +<3199> <9bd4> +<319a> <9bd7> +<319b> <9bec> +<319c> <9bdc> +<319d> <9bd9> +<319e> <9be5> +<319f> <9bd5> +<31a0> <9be1> +<31a1> <9bda> +<31a2> <9d77> +<31a3> <9d81> +<31a4> <9d8a> +<31a5> <9d84> +<31a6> <9d88> +<31a7> <9d71> +<31a8> <9d80> +<31a9> <9d78> +<31aa> <9d86> +<31ad> <9d7d> +<31ae> <9d6b> +<31b1> <9d70> +<31b2> <9d69> +<31b3> <9d85> +<31b4> <9d73> +<31b5> <9d7b> +<31b6> <9d82> +<31b7> <9d6f> +<31b8> <9d79> +<31b9> <9d7f> +<31ba> <9d87> +<31bb> <9d68> +<31bc> <9e94> +<31bd> <9e91> +<31be> <9ec0> +<31bf> <9efc> +<31c0> <9f2d> +<31c3> <9f4d> +<31c7> <5337> +<31c8> <56b2> +<31c9> <56b5> +<31ca> <56b3> +<31cb> <58e3> +<31cc> <5b45> +<31d3> <61f9> +<31d4> <6517> +<31d5> <6516> +<31d6> <6515> +<31d7> <6513> +<31d8> <65df> +<31d9> <66e8> +<31dc> <6af3> +<31dd> <6af0> +<31de> <6aea> +<31df> <6ae8> +<31e0> <6af9> +<31e1> <6af1> +<31e4> <703c> +<31e5> <7035> +<31e6> <702f> +<31e7> <7037> +<31e8> <7034> +<31e9> <7031> +<31ea> <7042> +<31eb> <7038> +<31ec> <703f> +<31ed> <703a> +<31ee> <7039> +<31ef> <702a> +<31f0> <7040> +<31f1> <703b> +<31f2> <7033> +<31f3> <7041> +<31f6> <72a8> +<31f7> <737d> +<31f8> <737c> +<31f9> <74ba> +<31fa> <76ab> +<31fb> <76aa> +<31fc> <76be> +<31fd> <76ed> +<31fe> <77cc> +endbfchar + +100 beginbfchar +<31ff> <77ce> +<3200> <77cf> +<3201> <77cd> +<3202> <77f2> +<3203> <7925> +<3204> <7923> +<3207> <7924> +<3208> <7929> +<3209> <79b2> +<320a> <7a6e> +<320d> <7af7> +<320e> <7c49> +<320f> <7c48> +<3210> <7c4a> +<3211> <7c47> +<3212> <7c45> +<3213> <7cee> +<3214> <7e7b> +<3215> <7e7e> +<3216> <7e81> +<3217> <7e80> +<3218> <7fba> +<3219> <7fff> +<321a> <8079> +<321b> <81db> +<321c> <81d9> +<321f> <8622> +<3220> <85ff> +<3221> <8601> +<3222> <85fe> +<3223> <861b> +<3224> <8600> +<3225> <85f6> +<3226> <8604> +<3227> <8609> +<3228> <8605> +<3229> <860c> +<322a> <85fd> +<322b> <8819> +<322e> <8817> +<322f> <8813> +<3230> <8816> +<3231> <8963> +<3232> <8966> +<3233> <89b9> +<3234> <89f7> +<3235> <8b60> +<3236> <8b6a> +<3237> <8b5d> +<3238> <8b68> +<3239> <8b63> +<323a> <8b65> +<323b> <8b67> +<323c> <8b6d> +<323d> <8dae> +<323e> <8e86> +<323f> <8e88> +<3240> <8e84> +<3241> <8f59> +<3244> <8f55> +<3245> <8f58> +<3246> <8f5a> +<3247> <908d> +<3248> <9143> +<3249> <9141> +<324a> <91b7> +<324b> <91b5> +<324e> <940b> +<324f> <9413> +<3250> <93fb> +<3251> <9420> +<3252> <940f> +<3253> <9414> +<3254> <93fe> +<3255> <9415> +<3256> <9410> +<3257> <9428> +<3258> <9419> +<3259> <940d> +<325a> <93f5> +<325b> <9400> +<325c> <93f7> +<325d> <9407> +<325e> <940e> +<325f> <9416> +<3260> <9412> +<3261> <93fa> +<3262> <9409> +<3263> <93f8> +<3264> <943c> +<3265> <940a> +<3266> <93ff> +<3267> <93fc> +<3268> <940c> +<3269> <93f6> +<326a> <9411> +<326b> <9406> +<326c> <95de> +<326d> <95e0> +<326e> <95df> +endbfchar + +100 beginbfchar +<3271> <97b9> +<3272> <97bb> +<3275> <9860> +<3278> <985f> +<327b> <9950> +<327c> <994e> +<327d> <9959> +<327e> <994c> +<327f> <994b> +<3280> <9953> +<3281> <9a32> +<3282> <9a34> +<3283> <9a31> +<3284> <9a2c> +<3285> <9a2a> +<3286> <9a36> +<3287> <9a29> +<3288> <9a2e> +<3289> <9a38> +<328a> <9a2d> +<328b> <9ac7> +<328c> <9aca> +<328d> <9ac6> +<328e> <9b10> +<328f> <9b12> +<3290> <9b11> +<3291> <9c0b> +<3292> <9c08> +<3293> <9bf7> +<3294> <9c05> +<3295> <9c12> +<3296> <9bf8> +<3297> <9c40> +<3298> <9c07> +<3299> <9c0e> +<329a> <9c06> +<329b> <9c17> +<329c> <9c14> +<329d> <9c09> +<329e> <9d9f> +<329f> <9d99> +<32a0> <9da4> +<32a1> <9d9d> +<32a2> <9d92> +<32a3> <9d98> +<32a4> <9d90> +<32a5> <9d9b> +<32a6> <9da0> +<32a7> <9d94> +<32a8> <9d9c> +<32a9> <9daa> +<32aa> <9d97> +<32ab> <9da1> +<32ac> <9d9a> +<32ad> <9da2> +<32ae> <9da8> +<32af> <9d9e> +<32b0> <9da3> +<32b1> <9dbf> +<32b2> <9da9> +<32b3> <9d96> +<32b6> <9e99> +<32b7> <9e9b> +<32b8> <9e9a> +<32b9> <9ee5> +<32ba> <9ee4> +<32bb> <9ee7> +<32bc> <9ee6> +<32bd> <9f30> +<32be> <9f2e> +<32bf> <9f5b> +<32c0> <9f60> +<32c1> <9f5e> +<32c2> <9f5d> +<32c3> <9f59> +<32c4> <9f91> +<32c5> <513a> +<32c6> <5139> +<32c7> <5298> +<32c8> <5297> +<32c9> <56c3> +<32cc> <5b48> +<32cd> <5b47> +<32ce> <5dcb> +<32cf> <5dcf> +<32d0> <5ef1> +<32d1> <61fd> +<32d2> <651b> +<32d3> <6b02> +<32d4> <6afc> +<32d5> <6b03> +<32d6> <6af8> +<32d7> <6b00> +<32da> <704a> +<32df> <721d> +<32e0> <721a> +<32e1> <7219> +<32e2> <737e> +<32e3> <7517> +<32e4> <766a> +endbfchar + +100 beginbfchar +<32e5> <77d0> +<32e6> <792d> +<32e7> <7931> +<32e8> <792f> +<32e9> <7c54> +<32ea> <7c53> +<32eb> <7cf2> +<32ec> <7e8a> +<32ef> <7e8b> +<32f0> <7e86> +<32f1> <7e8d> +<32f2> <7f4d> +<32f3> <7fbb> +<32f4> <8030> +<32f5> <81dd> +<32f6> <8618> +<32f7> <862a> +<32f8> <8626> +<32f9> <861f> +<32fa> <8623> +<32fb> <861c> +<32fc> <8619> +<32fd> <8627> +<32fe> <862e> +<32ff> <8621> +<3300> <8620> +<3301> <8629> +<3302> <861e> +<3303> <8625> +<3304> <8829> +<3305> <881d> +<3306> <881b> +<3307> <8820> +<3308> <8824> +<3309> <881c> +<330a> <882b> +<330b> <884a> +<330c> <896d> +<330d> <8969> +<330e> <896e> +<330f> <896b> +<3310> <89fa> +<3311> <8b79> +<3312> <8b78> +<3313> <8b45> +<3316> <8d10> +<3317> <8d14> +<3318> <8daf> +<3319> <8e8e> +<331a> <8e8c> +<331b> <8f5e> +<331c> <8f5b> +<331d> <8f5d> +<331e> <9146> +<3321> <91b9> +<3322> <943f> +<3323> <943b> +<3324> <9436> +<3325> <9429> +<3326> <943d> +<3327> <9430> +<3328> <9439> +<3329> <942a> +<332a> <9437> +<332b> <942c> +<332c> <9440> +<332d> <9431> +<332e> <95e5> +<332f> <95e4> +<3330> <95e3> +<3331> <9735> +<3332> <973a> +<3333> <97bf> +<3334> <97e1> +<3335> <9864> +<3336> <98c9> +<3337> <98c6> +<3338> <98c0> +<3339> <9958> +<333a> <9956> +<333b> <9a39> +<333c> <9a3d> +<333d> <9a46> +<333e> <9a44> +<333f> <9a42> +<3340> <9a41> +<3341> <9a3a> +<3342> <9a3f> +<3343> <9acd> +<3344> <9b15> +<3347> <9b16> +<3348> <9b3a> +<3349> <9b52> +<334a> <9c2b> +<334b> <9c1d> +<334c> <9c1c> +<334d> <9c2c> +<334e> <9c23> +<3351> <9c24> +<3352> <9c21> +endbfchar + +100 beginbfchar +<3353> <9db7> +<3354> <9db6> +<3355> <9dbc> +<3356> <9dc1> +<3357> <9dc7> +<3358> <9dca> +<3359> <9dcf> +<335a> <9dbe> +<335b> <9dc5> +<335c> <9dc3> +<335d> <9dbb> +<335e> <9db5> +<335f> <9dce> +<3362> <9dac> +<3363> <9dc8> +<3364> <9db1> +<3365> <9dad> +<3366> <9dcc> +<3367> <9db3> +<3368> <9dcd> +<3369> <9db2> +<336a> <9e7a> +<336b> <9e9c> +<336c> <9eeb> +<336d> <9eee> +<336e> <9eed> +<336f> <9f1b> +<3370> <9f18> +<3371> <9f1a> +<3372> <9f31> +<3373> <9f4e> +<3374> <9f65> +<3375> <9f64> +<3376> <9f92> +<3377> <4eb9> +<3378> <56c6> +<3379> <56c5> +<337a> <56cb> +<337b> <5971> +<337e> <5dd5> +<337f> <5dd1> +<3380> <5ef2> +<3381> <6521> +<3382> <6520> +<3383> <6526> +<3384> <6522> +<3385> <6b0b> +<3388> <6c0d> +<338c> <7052> +<338f> <72a9> +<3390> <737f> +<3391> <74d8> +<3392> <74d5> +<3393> <74d9> +<3394> <74d7> +<3395> <766d> +<3396> <76ad> +<3397> <7935> +<3398> <79b4> +<339b> <7c57> +<339c> <7c5c> +<339d> <7c59> +<339e> <7c5b> +<339f> <7c5a> +<33a0> <7cf4> +<33a1> <7cf1> +<33a2> <7e91> +<33a3> <7f4f> +<33a4> <7f87> +<33a5> <81de> +<33a6> <826b> +<33a9> <8633> +<33aa> <862c> +<33ab> <8632> +<33ac> <8636> +<33ad> <882c> +<33ae> <8828> +<33af> <8826> +<33b0> <882a> +<33b1> <8825> +<33b2> <8971> +<33b3> <89bf> +<33b4> <89be> +<33b5> <89fb> +<33b6> <8b7e> +<33b7> <8b84> +<33b8> <8b82> +<33b9> <8b86> +<33ba> <8b85> +<33bb> <8b7f> +<33bc> <8d15> +<33bd> <8e95> +<33be> <8e94> +<33bf> <8e9a> +<33c0> <8e92> +<33c1> <8e90> +<33c4> <8f60> +<33c5> <8f62> +<33c6> <9147> +<33c7> <944c> +endbfchar + +100 beginbfchar +<33c8> <9450> +<33cb> <944f> +<33cc> <9447> +<33cd> <9445> +<33d0> <9446> +<33d1> <973f> +<33d2> <97e3> +<33d3> <986a> +<33d4> <9869> +<33d5> <98cb> +<33d6> <9954> +<33d7> <995b> +<33d8> <9a4e> +<33db> <9a4c> +<33dc> <9a4f> +<33dd> <9a48> +<33de> <9a4a> +<33df> <9a49> +<33e0> <9a52> +<33e1> <9a50> +<33e2> <9ad0> +<33e3> <9b19> +<33e4> <9b2b> +<33e5> <9b3b> +<33e6> <9b56> +<33e7> <9b55> +<33e8> <9c46> +<33e9> <9c48> +<33ea> <9c3f> +<33eb> <9c44> +<33ec> <9c39> +<33ed> <9c33> +<33ee> <9c41> +<33ef> <9c3c> +<33f0> <9c37> +<33f1> <9c34> +<33f2> <9c32> +<33f3> <9c3d> +<33f4> <9c36> +<33f5> <9ddb> +<33f6> <9dd2> +<33f7> <9dde> +<33f8> <9dda> +<33f9> <9dcb> +<33fa> <9dd0> +<33fb> <9ddc> +<33fc> <9dd1> +<33fd> <9ddf> +<33fe> <9de9> +<33ff> <9dd9> +<3400> <9dd8> +<3401> <9dd6> +<3402> <9df5> +<3403> <9dd5> +<3404> <9ddd> +<3405> <9eb6> +<3406> <9ef0> +<3407> <9f35> +<3408> <9f33> +<3409> <9f32> +<340a> <9f42> +<340b> <9f6b> +<340c> <9f95> +<340d> <9fa2> +<340e> <513d> +<340f> <5299> +<3410> <58e8> +<3411> <58e7> +<3412> <5972> +<3413> <5b4d> +<3414> <5dd8> +<3415> <882f> +<3416> <5f4f> +<3417> <6201> +<341a> <6529> +<341b> <6525> +<341c> <6596> +<341d> <66eb> +<3420> <6b0f> +<3421> <6bca> +<3422> <705b> +<3423> <705a> +<3424> <7222> +<3425> <7382> +<3426> <7381> +<3427> <7383> +<3428> <7670> +<3429> <77d4> +<342a> <7c67> +<342b> <7c66> +<342c> <7e95> +<342d> <826c> +<342e> <863a> +<342f> <8640> +<3430> <8639> +<3431> <863c> +<3432> <8631> +<3433> <863b> +<3434> <863e> +<3435> <8830> +endbfchar + +100 beginbfchar +<3436> <8832> +<3437> <882e> +<3438> <8833> +<3439> <8976> +<343a> <8974> +<343b> <8973> +<343c> <89fe> +<343d> <8b8c> +<343e> <8b8e> +<343f> <8b8b> +<3440> <8b88> +<3441> <8c45> +<3442> <8d19> +<3443> <8e98> +<3444> <8f64> +<3445> <8f63> +<3446> <91bc> +<3447> <9462> +<3448> <9455> +<3449> <945d> +<344a> <9457> +<344b> <945e> +<344e> <9800> +<344f> <9a56> +<3450> <9a59> +<3454> <9c52> +<3455> <9c58> +<3456> <9c50> +<3457> <9c4a> +<3458> <9c4d> +<3459> <9c4b> +<345a> <9c55> +<345b> <9c59> +<345c> <9c4c> +<345d> <9c4e> +<345e> <9dfb> +<345f> <9df7> +<3460> <9def> +<3461> <9de3> +<3462> <9deb> +<3463> <9df8> +<3464> <9de4> +<3465> <9df6> +<3466> <9de1> +<3467> <9dee> +<3468> <9de6> +<3469> <9df2> +<346a> <9df0> +<346b> <9de2> +<346c> <9dec> +<346d> <9df4> +<346e> <9df3> +<346f> <9de8> +<3470> <9ded> +<3471> <9ec2> +<3472> <9ed0> +<3475> <9f06> +<3476> <9f1c> +<3477> <9f38> +<3478> <9f37> +<3479> <9f36> +<347a> <9f43> +<347b> <9f4f> +<347c> <9f71> +<347d> <9f70> +<3480> <56d3> +<3481> <56cd> +<3482> <5b4e> +<3483> <5c6d> +<3484> <652d> +<3487> <6b13> +<3488> <705f> +<3489> <7061> +<348a> <705d> +<348b> <7060> +<348c> <7223> +<348d> <74db> +<348e> <74e5> +<348f> <77d5> +<3490> <7938> +<3491> <79b7> +<3492> <79b6> +<3493> <7c6a> +<3494> <7e97> +<3495> <7f89> +<3496> <826d> +<3497> <8643> +<3498> <8838> +<3499> <8837> +<349a> <8835> +<349b> <884b> +<34a1> <8e9d> +<34a2> <91be> +<34a3> <91bd> +<34a4> <91c2> +<34a5> <946b> +<34a8> <96e5> +<34a9> <9746> +<34aa> <9743> +<34ab> <9747> +endbfchar + +100 beginbfchar +<34ac> <97c7> +<34ad> <97e5> +<34ae> <9a5e> +<34af> <9ad5> +<34b0> <9b59> +<34b1> <9c63> +<34b2> <9c67> +<34b3> <9c66> +<34b4> <9c62> +<34b5> <9c5e> +<34b6> <9c60> +<34b7> <9e02> +<34b8> <9dfe> +<34b9> <9e07> +<34ba> <9e03> +<34bb> <9e06> +<34bc> <9e05> +<34bf> <9e09> +<34c0> <9dff> +<34c1> <9dfd> +<34c2> <9e04> +<34c3> <9ea0> +<34c4> <9f1e> +<34c5> <9f46> +<34c9> <56d4> +<34ca> <652e> +<34cb> <65b8> +<34ce> <6b17> +<34cf> <6b1a> +<34d0> <7062> +<34d1> <7226> +<34d2> <72aa> +<34d5> <7939> +<34d6> <7c69> +<34d7> <7c6b> +<34d8> <7cf6> +<34d9> <7e9a> +<34da> <7e98> +<34db> <7e9b> +<34dc> <7e99> +<34e4> <897c> +<34e5> <897b> +<34e6> <89ff> +<34e9> <8ea5> +<34ea> <8ea4> +<34eb> <8ea3> +<34ec> <946e> +<34ed> <946d> +<34ee> <946f> +<34ef> <9471> +<34f0> <9473> +<34f1> <9749> +<34f2> <9872> +<34f3> <995f> +<34f4> <9c68> +<34f5> <9c6e> +<34f6> <9c6d> +<34f7> <9e0b> +<34f8> <9e0d> +<34f9> <9e10> +<34fa> <9e0f> +<34fb> <9e12> +<34fc> <9e11> +<34fd> <9ea1> +<34fe> <9ef5> +<34ff> <9f09> +<3500> <9f47> +<3501> <9f78> +<3502> <9f7b> +<3503> <9f7a> +<3504> <9f79> +<3505> <571e> +<3506> <7066> +<3507> <7c6f> +<3508> <883c> +<3509> <8db2> +<350a> <8ea6> +<350b> <91c3> +<350c> <9474> +<350d> <9478> +<350e> <9476> +<350f> <9475> +<3510> <9a60> +<3511> <9b2e> +<3512> <9c74> +<3513> <9c73> +<3514> <9c71> +<3515> <9c75> +<3516> <9e14> +<3517> <9e13> +<3518> <9ef6> +<3519> <9f0a> +<351a> <9fa4> +<351b> <7068> +<351c> <7065> +<351d> <7cf7> +<351e> <866a> +<351f> <883e> +<3520> <883d> +<3521> <883f> +endbfchar + +100 beginbfchar +<3522> <8b9e> +<3523> <8c9c> +<3524> <8ea9> +<3525> <8ec9> +<3526> <974b> +<3529> <98cc> +<352a> <9961> +<352b> <99ab> +<352c> <9a64> +<352f> <9b24> +<3530> <9e15> +<3531> <9e17> +<3532> <9f48> +<3533> <6207> +<3534> <6b1e> +<3535> <7227> +<3536> <864c> +<3537> <8ea8> +<3538> <9482> +<353b> <9a69> +<353c> <9a68> +<353d> <9e19> +<353e> <864b> +<353f> <8b9f> +<3540> <9483> +<3541> <9c79> +<3542> <9eb7> +<3543> <7675> +<3544> <9a6b> +<3545> <9c7a> +<3546> <9e1d> +<3549> <7229> +<354a> <9ea4> +<354b> <9f7e> +<354c> <9f49> +<354d> <9f98> +<354e> +<354f> <223c> +<35af> +<35b0> <2574> +<35b1> +<35b2> +<35b3> <0308> +<35b4> +<35b9> +<35bd> <30fc> +<35be> +<35bf> +<35c0> <273d> +<3670> <0401> +<3691> <0451> +<36ac> <21e7> +<36af> <4e41> +<36b0> +<36b1> <4e5a> +<36b2> +<36b3> <5202> +<36b4> <4491> +<36b5> <9fb0> +<36b6> <5188> +<36b7> <9fb1> +<36b8> +<36b9> +<36ba> +<36bb> +<36bc> +<36bd> +<36be> +<36bf> +<36c0> +<36c1> +<36c2> +<36c3> +<36c4> +<36c5> +<36c6> +<36c7> +<36c8> +<36c9> +<36ca> +<36cb> +<36cc> +<36cd> +<36ce> +<36cf> +<36d0> +<36d1> +<36d2> +<36d3> +<36d4> +<36d5> +<36d6> +<36d7> +<36d8> +<36d9> +<36da> +<36db> +<36dc> +<36dd> +<36de> +endbfchar + +100 beginbfchar +<36df> +<36e0> +<36e1> <00ac> +<36e2> +<36e3> +<36e4> +<36e5> <3231> +<36e6> <2116> +<36e7> <2121> +<36e8> <7881> +<36e9> <92b9> +<36ea> <88cf> +<36eb> <58bb> +<36ec> <6052> +<36ed> <7ca7> +<36ee> <5afa> +<36ef> <2554> +<36f0> <2566> +<36f1> <2557> +<36f2> <2560> +<36f3> <256c> +<36f4> <2563> +<36f5> <255a> +<36f6> <2569> +<36f7> <255d> +<36f8> <2552> +<36f9> <2564> +<36fa> <2555> +<36fb> +<36fc> +<36fd> +<36fe> <2558> +<36ff> <2567> +<3700> <255b> +<3701> <2553> +<3702> <2565> +<3703> <2556> +<3704> <255f> +<3705> <256b> +<3706> <2562> +<3707> <2559> +<3708> <2568> +<3709> <255c> +<370a> <2551> +<370b> +<370c> +<370d> +<370e> +<370f> +<3710> <2593> +<3711> +<3712> +<3716> +<3717> +<3718> +<3719> +<371a> +<371b> +<371c> +<371d> +<371e> +<371f> +<3720> +<3721> +<3722> +<3723> +<3724> +<3725> +<3726> +<3727> +<3728> +<3729> +<372a> +<372b> +<372c> <57be> +<372d> +<372e> <713e> +<372f> +<3730> <69a2> +<3731> +<3732> <5b74> +<3733> <7a49> +<3734> +<3735> +<3736> <7a65> +<3737> <7a7d> +<3738> +<3739> <7abb> +<373a> <7ab0> +<373d> <71d1> +<373e> +<373f> <41ca> +<3740> <7ada> +<3741> <7add> +<3742> <7aea> +<3743> <41ef> +<3744> <54b2> +<3745> +<3746> <7b0b> +<3747> <7b55> +endbfchar + +100 beginbfchar +<3748> <7b29> +<3749> +<374a> +<374b> <7ba2> +<374c> <7b6f> +<374d> <839c> +<374e> +<374f> +<3750> <7bd0> +<3751> <8421> +<3752> <7b92> +<3753> +<3754> +<3755> +<3756> <8492> +<3757> <7bfa> +<3758> +<3759> <7c35> +<375a> +<375b> <7c44> +<375c> <7c83> +<375d> +<375e> <7ca6> +<375f> +<3760> <7cc9> +<3761> <7cc7> +<3762> <7ce6> +<3763> +<3764> <7cf3> +<3765> <7cf5> +<3766> <7e67> +<3767> <451d> +<3768> +<3769> <7d5d> +<376a> +<376b> <7d89> +<376c> <7dab> +<376d> <7135> +<376e> <7db3> +<376f> <7dd6> +<3770> +<3771> +<3772> <7de4> +<3773> <3d13> +<3774> <7df5> +<3775> +<3776> <7de5> +<3777> +<3778> +<3779> +<377a> +<377b> <7e6e> +<377c> +<377d> <432b> +<377e> <946c> +<377f> <7e27> +<3782> <7f47> +<3783> <7936> +<3784> +<3785> <99e1> +<3786> <7f97> +<3787> +<3788> <7fa3> +<3789> +<378a> +<378b> <455c> +<378c> +<378d> +<378e> <7ffa> +<378f> +<3790> +<3791> <8008> +<3792> <801d> +<3793> +<3794> <802f> +<3795> +<3796> +<3799> <8061> +<379a> +<379b> <4989> +<379c> +<379d> +<379e> +<379f> <6725> +<37a0> <80a7> +<37a1> +<37a2> <8107> +<37a3> <811a> +<37a4> <58b0> +<37a5> +<37a6> <6c7f> +<37a7> +<37a8> <64e7> +<37a9> +<37aa> <8218> +<37ab> +<37ac> <6a53> +<37ad> +<37ae> +<37af> <447a> +endbfchar + +100 beginbfchar +<37b0> <8229> +<37b1> +<37b2> +<37b3> <4ff9> +<37b4> +<37b5> <84e2> +<37b6> <8362> +<37b7> +<37b8> +<37b9> +<37ba> +<37bb> +<37bc> <82aa> +<37bd> <691b> +<37be> +<37bf> <41db> +<37c0> <854b> +<37c1> <82d0> +<37c2> <831a> +<37c3> +<37c4> +<37c5> <36c1> +<37c6> +<37c7> +<37c8> <827b> +<37c9> <82e2> +<37ca> <8318> +<37cb> +<37cc> +<37cd> +<37ce> +<37cf> +<37d0> <3dbf> +<37d1> <831d> +<37d2> <55ec> +<37d3> <8385> +<37d4> <450b> +<37d5> +<37d6> <83ac> +<37d7> +<37d8> <83d3> +<37d9> +<37da> <6a57> +<37db> <855a> +<37dc> <3496> +<37dd> +<37de> <8458> +<37df> +<37e0> <8471> +<37e1> <3dd3> +<37e2> <44e4> +<37e3> <6aa7> +<37e4> <844a> +<37e5> <7958> +<37e6> +<37e7> +<37e8> +<37e9> +<37ea> <84de> +<37eb> +<37ec> <8391> +<37ed> <44a0> +<37ee> <8493> +<37ef> <84e4> +<37f0> +<37f1> <4240> +<37f2> +<37f3> <4543> +<37f4> <8534> +<37f5> <5af2> +<37f6> <4523> +<37f7> <4527> +<37f8> <8573> +<37f9> <4516> +<37fa> <67bf> +<37fb> <8616> +<37fc> +<37fd> +<37fe> <85c1> +<37ff> +<3800> <8602> +<3801> +<3802> +<3803> +<3804> <456a> +<3805> <8628> +<3806> <3648> +<3807> +<3808> <53f7> +<3809> +<380a> <867e> +<380b> +<380c> +<380d> <87ee> +<380e> +<380f> <87b1> +<3810> <87da> +<3811> <880f> +<3812> <5661> +<3813> <866c> +endbfchar + +100 beginbfchar +<3814> <6856> +<3815> <460f> +<3818> +<3819> +<381a> +<381b> <885e> +<381c> <889c> +<381d> <465b> +<3820> <88c5> +<3821> +<3822> <8987> +<3823> +<3824> +<3825> +<3826> <89a7> +<3827> <89bc> +<3828> +<3829> <89e7> +<382a> +<382b> +<382c> <8a9c> +<382d> <7793> +<382e> <91fe> +<382f> <8a90> +<3830> +<3831> <7ae9> +<3832> +<3833> <4713> +<3834> +<3835> <717c> +<3836> <8b0c> +<3837> <8b1f> +<3838> +<3839> +<383a> <8b3f> +<383b> +<383c> <8b4d> +<383d> <8aa9> +<383e> +<383f> <8b90> +<3840> <8b9b> +<3841> <8aaf> +<3842> +<3843> <4615> +<3844> <884f> +<3845> <8c9b> +<3846> +<3847> +<3848> +<3849> <3725> +<384a> +<384b> <8cd6> +<384c> +<384d> +<384e> <8d12> +<384f> <8d03> +<3850> +<3851> <8cdb> +<3852> <705c> +<3853> <8d11> +<3854> <3ed0> +<3855> +<3856> <8da9> +<3857> +<3858> +<3859> +<385a> <3b7c> +<385b> +<385c> +<385d> <7ae7> +<385e> <8ead> +<385f> <8eb6> +<3860> <8ec3> +<3861> <92d4> +<3862> <8f19> +<3863> <8f2d> +<3864> +<3865> +<3866> <8fa5> +<3867> <9303> +<3868> +<3869> +<386a> <8fb3> +<386b> +<386c> +<386d> +<386e> +<386f> <5ef8> +<3870> +<3871> <8ff9> +<3872> +<3873> +<3874> <3980> +<3875> +<3876> <9037> +<3877> +<3878> +<3879> <9061> +<387a> +<387b> +endbfchar + +100 beginbfchar +<387c> <90a8> +<387d> +<387e> <90c4> +<387f> +<3880> <90ae> +<3881> +<3882> <9167> +<3883> <91a9> +<3884> <91c4> +<3885> <7cac> +<3886> +<3887> +<3888> <920e> +<3889> <6c9f> +<388a> <9241> +<388b> <9262> +<388c> +<388d> +<388e> +<388f> +<3890> +<3891> +<3892> <932c> +<3893> <936b> +<3894> +<3895> +<3896> <5ac3> +<3897> +<3898> +<3899> <4965> +<389a> <9244> +<389b> +<389c> +<389d> +<389e> <9373> +<389f> <945b> +<38a0> <8ebc> +<38a1> <9585> +<38a2> <95a6> +<38a3> <9426> +<38a4> <95a0> +<38a5> <6ff6> +<38a6> <42b9> +<38a7> +<38a8> +<38a9> +<38aa> <49df> +<38ab> <6c1c> +<38ac> <967b> +<38ad> <9696> +<38ae> <416c> +<38af> <96a3> +<38b0> +<38b1> <61da> +<38b2> +<38b3> <78f5> +<38b4> +<38b5> <96bd> +<38b6> <53cc> +<38b7> <49a1> +<38b8> +<38b9> +<38ba> +<38bb> +<38bc> +<38bd> +<38be> +<38bf> +<38c0> <9731> +<38c1> <8642> +<38c2> <9736> +<38c3> <4a0f> +<38c4> <453d> +<38c5> <4585> +<38c6> +<38c7> <7075> +<38c8> <5b41> +<38c9> <971b> +<38ca> +<38cb> +<38cc> <9757> +<38cd> <5b4a> +<38ce> +<38cf> <975f> +<38d0> <9425> +<38d1> <50d0> +<38d2> +<38d3> +<38d4> <9789> +<38d5> <979f> +<38d6> <97b1> +<38d7> <97be> +<38d8> <97c0> +<38d9> <97d2> +<38da> <97e0> +<38db> +<38dc> <97ee> +<38dd> <741c> +<38de> +<38df> +endbfchar + +100 beginbfchar +<38e0> <97f5> +<38e1> +<38e2> +<38e3> <4ad1> +<38e4> <9834> +<38e5> <9833> +<38e6> <984b> +<38e7> <9866> +<38e8> <3b0e> +<38e9> +<38ea> <3d51> +<38eb> +<38ec> +<38ed> +<38ee> <98ca> +<38ef> <98b7> +<38f0> <98c8> +<38f1> <98c7> +<38f2> <4aff> +<38f3> +<38f4> +<38f5> <55b0> +<38f6> <98e1> +<38f7> <98e6> +<38f8> <98ec> +<38f9> <9378> +<38fa> <9939> +<38fb> +<38fc> <4b72> +<38fd> +<38fe> +<38ff> <99f5> +<3900> <9a0c> +<3901> <9a3b> +<3902> <9a10> +<3903> <9a58> +<3904> +<3905> <36c4> +<3906> +<3907> +<3908> <9ae0> +<3909> <9ae2> +<390a> +<390b> <9af4> +<390c> <4c0e> +<390d> <9b14> +<390e> <9b2d> +<390f> +<3910> <5034> +<3911> <9b34> +<3912> <38c3> +<3913> +<3914> <9b50> +<3915> <9b40> +<3916> +<3917> <5a45> +<3918> +<3919> <9b8e> +<391a> <9c02> +<391b> <9bff> +<391c> <9c0c> +<391d> +<391e> <9dd4> +<391f> +<3920> +<3921> +<3922> +<3923> +<3924> +<3925> <9d7e> +<3926> <9d83> +<3927> +<3928> <9e0e> +<3929> <9dc4> +<392a> +<392b> +<392c> +<392d> +<392e> <9d39> +<392f> +<3930> +<3931> <9e90> +<3932> <9e95> +<3933> <9e9e> +<3934> <9ea2> +<3935> <4d34> +<3936> <9eaa> +<3937> <9eaf> +<3938> +<3939> <9ec1> +<393a> <3b60> +<393b> <39e5> +<393c> <3d1d> +<393d> <4f32> +<393e> <37be> +<393f> +<3940> <9f02> +<3941> <9f08> +<3942> <4b96> +<3943> <9424> +endbfchar + +100 beginbfchar +<3944> +<3945> <9f17> +<3946> +<3947> <9f39> +<3948> <569f> +<3949> <568a> +<394a> <9f45> +<394b> <99b8> +<394c> +<394d> <97f2> +<394e> <847f> +<394f> +<3950> <9f69> +<3951> <7adc> +<3952> <9f8e> +<3953> <7216> +<3954> <4bbe> +<3955> +<3956> +<3957> <7177> +<3958> +<3959> +<395a> +<395b> <739e> +<395c> +<395d> +<395e> <799f> +<395f> +<3960> +<3961> <9369> +<3962> <93f3> +<3963> +<3964> <92ec> +<3965> <9381> +<3966> <93cb> +<3967> +<3968> +<3969> <7217> +<396a> <3eeb> +<396b> <7772> +<396c> <7a43> +<396d> <70d0> +<396e> +<396f> +<3970> <717e> +<3971> +<3972> <70a3> +<3973> +<3974> +<3975> <3ec7> +<3976> +<3977> +<3978> +<3979> <3722> +<397a> +<397b> +<397c> <36e1> +<397d> +<397e> +<397f> +<3980> <3723> +<3981> +<3982> <575b> +<3983> +<3984> +<3985> +<3986> +<3987> +<3988> <8503> +<3989> +<398a> +<398b> <8455> +<398c> +<398d> +<398e> +<398f> +<3990> +<3991> +<3992> <44f4> +<3993> +<3994> +<3995> +<3996> <67f9> +<3997> <3733> +<3998> <3c15> +<3999> <3de7> +<399a> <586c> +<399b> +<399c> <6810> +<399d> <4057> +<399e> +<399f> +<39a0> +<39a1> +<39a2> +<39a3> <54cb> +<39a4> <569e> +<39a5> +<39a6> <5692> +<39a7> +endbfchar + +100 beginbfchar +<39a8> +<39a9> +<39aa> +<39ab> +<39ac> <939c> +<39ad> <4ef8> +<39ae> <512b> +<39af> <3819> +<39b0> +<39b1> <4ebc> +<39b2> +<39b3> +<39b4> <4f4b> +<39b5> <4f8a> +<39b6> +<39b7> <5a68> +<39b8> +<39b9> +<39ba> <3999> +<39bb> +<39bc> +<39bd> <3435> +<39be> <4f29> +<39bf> +<39c0> +<39c1> +<39c2> <8ada> +<39c3> +<39c4> <4e98> +<39c5> <50cd> +<39c6> <510d> +<39c7> <4fa2> +<39c8> <4f03> +<39c9> +<39ca> +<39cb> <4f42> +<39cc> <502e> +<39cd> <506c> +<39ce> <5081> +<39cf> <4fcc> +<39d0> <4fe5> +<39d1> <5058> +<39d2> <50fc> +<39d3> <6e76> +<39d4> +<39d5> +<39d6> +<39d7> <6d72> +<39d8> +<39d9> +<39da> <51a8> +<39db> <51c3> +<39dc> +<39dd> <44dd> +<39de> +<39df> +<39e0> +<39e1> <8d7a> +<39e2> +<39e3> +<39e4> <5259> +<39e5> <52a4> +<39e6> +<39e7> <52e1> +<39e8> +<39e9> <467a> +<39ea> <718c> +<39eb> +<39ec> +<39ed> +<39ee> +<39ef> <69d1> +<39f0> +<39f1> +<39f2> <3ede> +<39f3> <7499> +<39f4> <7414> +<39f5> <7456> +<39f6> <7398> +<39f7> <4b8e> +<39f8> +<39f9> +<39fa> <53d0> +<39fb> <3584> +<39fc> <720f> +<39fd> +<39fe> <55b4> +<39ff> +<3a00> <54cd> +<3a01> +<3a02> <571d> +<3a03> <925d> +<3a04> <96f4> +<3a05> <57dd> +<3a06> <578d> +<3a07> <577f> +<3a08> <363e> +<3a09> <58cb> +<3a0a> <5a99> +<3a0b> +endbfchar + +100 beginbfchar +<3a0c> +<3a0d> +<3a0e> +<3a0f> <5a2c> +<3a10> <59b8> +<3a11> <5a7e> +<3a12> <5acf> +<3a13> <5a12> +<3a14> +<3a15> +<3a16> +<3a17> +<3a18> <36f5> +<3a19> <6d05> +<3a1a> <7443> +<3a1b> <5a21> +<3a1c> +<3a1d> <5a81> +<3a1e> +<3a1f> +<3a20> <93e0> +<3a21> <748c> +<3a22> +<3a23> <7105> +<3a24> <4972> +<3a25> <9408> +<3a26> +<3a27> <93bd> +<3a28> <37a0> +<3a29> <5c1e> +<3a2a> <5c9e> +<3a2b> <5e5e> +<3a2c> <5e48> +<3a2d> +<3a2e> +<3a2f> +<3a30> <5ecd> +<3a31> <5b4f> +<3a34> <3701> +<3a35> +<3a36> <36dd> +<3a37> +<3a38> <36d3> +<3a39> <812a> +<3a3a> +<3a3b> +<3a3c> +<3a3d> +<3a3e> <5f0c> +<3a3f> <5f0e> +<3a40> +<3a41> +<3a42> <5a6b> +<3a43> +<3a44> <5b44> +<3a45> +<3a46> <8860> +<3a47> <607e> +<3a48> +<3a49> +<3a4a> <5fdb> +<3a4b> <3eb8> +<3a4c> +<3a4d> +<3a4e> +<3a4f> +<3a50> <61c0> +<3a51> +<3a52> +<3a53> +<3a54> <6199> +<3a55> <6198> +<3a56> <6075> +<3a57> +<3a58> +<3a59> +<3a5a> +<3a5b> <6471> +<3a5c> +<3a5d> +<3a5e> <3a29> +<3a5f> +<3a60> +<3a61> +<3a62> +<3a63> <6337> +<3a64> <64b6> +<3a65> <6331> +<3a66> <63d1> +<3a67> +<3a68> +<3a69> <62a4> +<3a6a> +<3a6b> <643b> +<3a6c> <656b> +<3a6d> <6972> +<3a6e> <3bf4> +<3a6f> +<3a70> +<3a71> +endbfchar + +100 beginbfchar +<3a72> +<3a73> <550d> +<3a74> +<3a75> +<3a76> +<3a77> <66ce> +<3a78> +<3a79> +<3a7a> <3ae0> +<3a7b> +<3a7c> +<3a7d> +<3a7e> +<3a7f> +<3a80> +<3a81> <78ee> +<3a82> +<3a83> +<3a84> +<3a85> <3464> +<3a86> +<3a87> +<3a88> +<3a89> <668e> +<3a8a> +<3a8b> <666b> +<3a8c> <4b93> +<3a8d> <6630> +<3a8e> +<3a8f> +<3a90> <6663> +<3a91> +<3a92> +<3a93> <661e> +<3a94> +<3a95> <38d1> +<3a96> +<3a97> +<3a98> <3b99> +<3a99> +<3a9a> +<3a9b> <74d0> +<3a9c> <3b96> +<3a9d> +<3a9e> <68b6> +<3a9f> +<3aa0> <3bc4> +<3aa1> <6abe> +<3aa2> +<3aa3> +<3aa4> <6a33> +<3aa5> <6a52> +<3aa6> <6ac9> +<3aa7> <6b05> +<3aa8> +<3aa9> <6511> +<3aaa> <6898> +<3aab> <6a4c> +<3aac> <3bd7> +<3aad> <6a7a> +<3aae> <6b57> +<3aaf> +<3ab0> +<3ab1> <93a0> +<3ab2> <92f2> +<3ab3> +<3ab4> +<3ab5> <9289> +<3ab6> +<3ab7> +<3ab8> <9467> +<3ab9> <6da5> +<3aba> <6f0b> +<3abb> +<3abc> +<3abd> <3d8f> +<3abe> <6e04> +<3abf> +<3ac0> <5a3d> +<3ac1> <6e0a> +<3ac2> <5847> +<3ac3> <6d24> +<3ac4> <7842> +<3ac5> <713b> +<3ac6> +<3ac7> +<3ac8> <70f1> +<3ac9> <7250> +<3aca> <7287> +<3acb> <7294> +<3acc> +<3acd> +<3ace> <5179> +<3acf> +<3ad0> +<3ad1> <747a> +<3ad2> +<3ad3> +<3ad4> +<3ad5> +endbfchar + +100 beginbfchar +<3ad6> +<3ad7> <3f06> +<3ad8> <3eb1> +<3ad9> +<3ada> +<3adb> +<3adc> <60a7> +<3add> <3ef3> +<3ade> <74cc> +<3adf> <743c> +<3ae0> <9387> +<3ae1> <7437> +<3ae2> <449f> +<3ae3> +<3ae4> <4551> +<3ae5> <7583> +<3ae6> <3f63> +<3ae7> +<3ae8> +<3ae9> <3f58> +<3aea> <7555> +<3aeb> <7673> +<3aec> +<3aed> +<3aee> <7468> +<3aef> +<3af0> +<3af1> +<3af2> <3afb> +<3af3> <3dcd> +<3af4> +<3af5> <3eff> +<3af6> +<3af7> +<3af8> <91fa> +<3af9> <5732> +<3afa> <9342> +<3afb> +<3afc> +<3afd> <50df> +<3afe> +<3aff> +<3b00> <7778> +<3b01> +<3b04> <777b> +<3b05> +<3b06> +<3b07> <3a5e> +<3b08> +<3b09> <7438> +<3b0a> <749b> +<3b0b> <3ebf> +<3b0c> +<3b0d> +<3b0e> <40c8> +<3b0f> +<3b10> +<3b11> <9307> +<3b12> +<3b13> <781e> +<3b14> <788d> +<3b15> <7888> +<3b16> <78d2> +<3b17> <73d0> +<3b18> <7959> +<3b19> +<3b1a> +<3b1b> <410e> +<3b1c> +<3b1d> +<3b1e> <79a5> +<3b1f> <6a2d> +<3b20> +<3b21> <7a3a> +<3b22> <79f4> +<3b23> <416e> +<3b24> +<3b25> <4132> +<3b26> <9235> +<3b27> <79f1> +<3b28> +<3b29> +<3b2a> +<3b2b> +<3b2c> +<3b2d> <3597> +<3b2e> <556b> +<3b2f> <3570> +<3b30> <36aa> +<3b31> +<3b32> +<3b33> <7ae2> +<3b34> <5a59> +<3b35> +<3b36> +<3b37> +<3b38> <5a0d> +<3b39> +<3b3a> <78f0> +<3b3b> <5a2a> +endbfchar + +100 beginbfchar +<3b3c> +<3b3d> <7afe> +<3b3e> <41f9> +<3b3f> <7c5d> +<3b40> <7c6d> +<3b41> <4211> +<3b42> +<3b43> +<3b44> +<3b45> <7ccd> +<3b46> +<3b47> +<3b48> <7c8e> +<3b49> <7c7c> +<3b4a> <7cae> +<3b4b> <6ab2> +<3b4c> <7ddc> +<3b4d> <7e07> +<3b4e> <7dd3> +<3b4f> <7f4e> +<3b50> +<3b51> +<3b52> +<3b53> <7d97> +<3b54> +<3b55> <426a> +<3b56> +<3b57> +<3b58> <67d6> +<3b59> +<3b5a> +<3b5b> <57c4> +<3b5c> +<3b5d> +<3b5e> <7fdd> +<3b5f> <7b27> +<3b60> +<3b61> +<3b62> +<3b63> <7b0c> +<3b64> +<3b65> <99e6> +<3b66> <8645> +<3b67> <9a63> +<3b68> <6a1c> +<3b69> +<3b6a> +<3b6b> +<3b6c> <9a1f> +<3b6d> +<3b6e> <8495> +<3b6f> +<3b70> +<3b71> <44ea> +<3b72> <8137> +<3b73> <4402> +<3b74> <80c6> +<3b75> <8109> +<3b76> <8142> +<3b77> +<3b78> <98c3> +<3b79> +<3b7a> <8262> +<3b7b> <8265> +<3b7c> +<3b7d> <8453> +<3b7e> +<3b7f> <8610> +<3b80> +<3b81> <5a86> +<3b82> <417f> +<3b83> +<3b84> <5b2b> +<3b85> +<3b86> <5ae4> +<3b87> +<3b88> <86a0> +<3b89> +<3b8a> +<3b8b> <882d> +<3b8c> +<3b8d> <5a02> +<3b8e> <886e> +<3b8f> <4f45> +<3b90> <8887> +<3b91> <88bf> +<3b92> <88e6> +<3b93> <8965> +<3b94> <894d> +<3b95> +<3b96> <8954> +<3b97> +<3b98> +<3b99> +<3b9a> +<3b9b> +<3b9c> +<3b9d> <3ead> +<3b9e> <84a3> +<3b9f> <46f5> +endbfchar + +100 beginbfchar +<3ba0> <46cf> +<3ba1> <37f2> +<3ba2> <8a3d> +<3ba3> <8a1c> +<3ba4> +<3ba5> <5f4d> +<3ba6> <922b> +<3ba7> +<3ba8> <65d4> +<3ba9> <7129> +<3baa> <70c4> +<3bab> +<3bac> <9d6d> +<3bad> <8c9f> +<3bae> <8ce9> +<3baf> +<3bb0> <599a> +<3bb1> <77c3> +<3bb2> <59f0> +<3bb3> <36d4> +<3bb4> <8e2a> +<3bb5> <8ea7> +<3bb6> +<3bb7> <8f30> +<3bb8> <8f4a> +<3bb9> <42f4> +<3bba> <6c58> +<3bbb> <6fbb> +<3bbc> +<3bbd> <489b> +<3bbe> <6f79> +<3bbf> <6e8b> +<3bc0> +<3bc1> <9be9> +<3bc2> <36b5> +<3bc3> +<3bc4> <90bb> +<3bc5> <48b4> +<3bc6> <5571> +<3bc7> <4906> +<3bc8> <91bb> +<3bc9> <9404> +<3bca> +<3bcb> <4062> +<3bcc> +<3bcd> <9427> +<3bce> +<3bcf> +<3bd0> <84e5> +<3bd1> <8a2b> +<3bd2> <9599> +<3bd3> <95a7> +<3bd4> <9597> +<3bd5> <9596> +<3bd6> +<3bd7> <7445> +<3bd8> <3ec2> +<3bd9> +<3bda> +<3bdb> +<3bdc> <3ee7> +<3bdd> +<3bde> <968f> +<3bdf> +<3be0> +<3be1> +<3be2> <3ecc> +<3be3> +<3be4> +<3be5> +<3be6> <7412> +<3be7> <746b> +<3be8> <3efc> +<3be9> <9741> +<3bea> +<3beb> <6847> +<3bec> <4a1d> +<3bed> +<3bee> +<3bef> +<3bf0> <9368> +<3bf1> +<3bf2> +<3bf3> +<3bf4> +<3bf5> <92ba> +<3bf6> <5b11> +<3bf7> <8b69> +<3bf8> <493c> +<3bf9> <73f9> +<3bfa> +<3bfb> <979b> +<3bfc> +<3bfd> <9938> +<3bfe> +<3bff> <5dc1> +<3c00> +<3c01> +<3c02> <981f> +<3c03> +endbfchar + +100 beginbfchar +<3c04> <92f6> +<3c05> +<3c06> <91e5> +<3c07> <44c0> +<3c08> +<3c09> +<3c0a> +<3c0b> <98dc> +<3c0c> +<3c0d> <3f00> +<3c0e> <922a> +<3c0f> <4925> +<3c10> <8414> +<3c11> <993b> +<3c12> <994d> +<3c13> +<3c14> <3dfd> +<3c15> +<3c16> <4b6f> +<3c17> <99aa> +<3c18> <9a5c> +<3c19> +<3c1a> +<3c1b> <6a8f> +<3c1c> <9a21> +<3c1d> <5afe> +<3c1e> <9a2f> +<3c1f> +<3c20> <4b90> +<3c21> +<3c22> <99bc> +<3c23> <4bbd> +<3c24> <4b97> +<3c25> <937d> +<3c26> <5872> +<3c27> +<3c28> <5822> +<3c29> +<3c2a> +<3c2b> <7844> +<3c2c> +<3c2d> +<3c2e> <68c5> +<3c2f> <3d7d> +<3c30> <9458> +<3c31> <3927> +<3c32> <6150> +<3c33> +<3c34> +<3c35> <6107> +<3c36> <9c4f> +<3c37> <9c53> +<3c38> <9c7b> +<3c39> <9c35> +<3c3a> <9c10> +<3c3b> <9b7f> +<3c3c> <9bcf> +<3c3d> +<3c3e> <9b9f> +<3c3f> +<3c40> +<3c41> <9d21> +<3c42> <4cae> +<3c43> +<3c44> <9e18> +<3c45> <4cb0> +<3c46> <9d0c> +<3c47> +<3c48> +<3c49> +<3c4a> +<3c4b> <9da5> +<3c4c> <84bd> +<3c4d> +<3c4e> +<3c4f> +<3c50> <85fc> +<3c51> <4533> +<3c52> +<3c53> +<3c54> +<3c55> <8420> +<3c56> <85ee> +<3c57> +<3c58> +<3c59> +<3c5a> <79e2> +<3c5b> +<3c5c> +<3c5d> +<3c5e> <3d62> +<3c5f> <93db> +<3c60> <92be> +<3c61> <9348> +<3c62> +<3c63> <78b9> +<3c64> <9277> +<3c65> <944d> +<3c66> <4fe4> +<3c67> <3440> +endbfchar + +100 beginbfchar +<3c68> <9064> +<3c69> +<3c6a> <783d> +<3c6b> <7854> +<3c6c> <78b6> +<3c6d> <784b> +<3c6e> +<3c6f> +<3c70> +<3c71> <369a> +<3c72> <4f72> +<3c73> <6fda> +<3c74> <6fd9> +<3c75> +<3c76> <701e> +<3c77> <5414> +<3c78> +<3c79> <57bb> +<3c7a> <58f3> +<3c7b> <578a> +<3c7c> <9d16> +<3c7d> <57d7> +<3c7e> <7134> +<3c7f> <34af> +<3c80> +<3c81> <71eb> +<3c82> +<3c83> +<3c84> +<3c85> +<3c86> +<3c87> <610c> +<3c88> <5ace> +<3c89> <5a0b> +<3c8a> <42bc> +<3c8b> +<3c8c> <372c> +<3c8d> <4b7b> +<3c8e> +<3c8f> <93bb> +<3c90> <93b8> +<3c91> +<3c92> +<3c93> <8472> +<3c94> +<3c95> +<3c96> +<3c97> +<3c98> +<3c99> <5994> +<3c9a> +<3c9b> +<3c9c> <7da8> +<3c9d> +<3c9e> +<3c9f> +<3ca0> +<3ca1> +<3ca2> <92e5> +<3ca3> <73e2> +<3ca4> <3ee9> +<3ca5> <74b4> +<3ca6> +<3ca7> +<3ca8> <3ee1> +<3ca9> +<3caa> <6ad8> +<3cab> <73f3> +<3cac> <73fb> +<3cad> <3ed6> +<3cae> +<3caf> +<3cb0> +<3cb1> +<3cb2> +<3cb3> +<3cb4> +<3cb5> <7448> +<3cb6> +<3cb7> <70a5> +<3cb8> +<3cb9> <9284> +<3cba> <73e6> +<3cbb> <935f> +<3cbc> +<3cbd> <9331> +<3cbe> +<3cbf> +<3cc0> <9386> +<3cc1> +<3cc2> +<3cc3> <4935> +<3cc4> +<3cc5> <716b> +<3cc6> +<3cc7> +<3cc8> <56a4> +<3cc9> +<3cca> +<3ccb> +endbfchar + +100 beginbfchar +<3ccc> <5502> +<3ccd> <79c4> +<3cce> +<3ccf> <7dfe> +<3cd0> +<3cd1> +<3cd2> +<3cd3> <452e> +<3cd4> <9401> +<3cd5> <370a> +<3cd6> +<3cd7> +<3cd8> <59b0> +<3cd9> +<3cda> +<3cdb> +<3cdc> <5aa1> +<3cdd> <36e2> +<3cde> +<3cdf> <36b0> +<3ce0> <925f> +<3ce1> <5a79> +<3ce2> +<3ce3> +<3ce4> <9374> +<3ce5> <3ccd> +<3ce6> +<3ce7> <4a96> +<3ce8> <398a> +<3ce9> <50f4> +<3cea> <3d69> +<3ceb> <3d4c> +<3cec> +<3ced> <7175> +<3cee> <42fb> +<3cef> +<3cf0> <6e0f> +<3cf1> +<3cf2> <44eb> +<3cf3> <6d57> +<3cf4> +<3cf5> <7067> +<3cf6> <6caf> +<3cf7> <3cd6> +<3cf8> +<3cf9> +<3cfa> <6e02> +<3cfb> <6f0c> +<3cfc> <3d6f> +<3cfd> +<3cfe> <7551> +<3cff> <36bc> +<3d00> <34c8> +<3d01> <4680> +<3d02> <3eda> +<3d03> <4871> +<3d04> <59c4> +<3d05> <926e> +<3d06> <493e> +<3d07> <8f41> +<3d08> +<3d09> +<3d0a> <5812> +<3d0b> <57c8> +<3d0c> <36d6> +<3d0d> +<3d0e> <70fe> +<3d0f> +<3d10> +<3d11> +<3d12> +<3d13> +<3d14> <68b9> +<3d15> <6967> +<3d16> +<3d17> +<3d18> +<3d19> +<3d1a> +<3d1b> +<3d1c> +<3d1d> +<3d1e> <6a1a> +<3d1f> +<3d20> +<3d21> <843e> +<3d22> <44df> +<3d23> <44ce> +<3d24> +<3d25> +<3d26> +<3d27> +<3d28> +<3d29> +<3d2a> <833d> +<3d2b> +<3d2c> <83ed> +<3d2d> +<3d2e> +<3d2f> +endbfchar + +100 beginbfchar +<3d30> <5989> +<3d31> <5a82> +<3d32> +<3d33> <5a61> +<3d34> <5a71> +<3d35> +<3d36> +<3d37> <372d> +<3d38> <59ef> +<3d39> +<3d3a> <36c7> +<3d3b> <718e> +<3d3c> <9390> +<3d3d> <669a> +<3d3e> +<3d3f> <5a6e> +<3d40> <5a2b> +<3d41> +<3d42> <6a2b> +<3d43> +<3d44> +<3d45> +<3d46> +<3d47> <711d> +<3d48> +<3d49> +<3d4a> <4fb0> +<3d4b> +<3d4c> <5cc2> +<3d4d> +<3d4e> +<3d4f> +<3d50> <6a0c> +<3d51> +<3d52> +<3d53> +<3d54> <7133> +<3d55> +<3d56> <3da5> +<3d57> <6cdf> +<3d58> +<3d59> <59eb> +<3d5a> <5f5c> +<3d5b> +<3d5c> <7cd3> +<3d5d> +<3d5e> +<3d5f> +<3d60> <906c> +<3d61> <81f6> +<3d62> <770c> +<3d63> <6ca2> +<3d64> <56fd> +<3d65> <5869> +<3d66> <6761> +<3d67> <5c5e> +<3d68> <58f2> +<3d69> <70b9> +<3d6a> <6803> +<3d6d> <4e21> +<3d6e> <7b39> +<3d6f> <3dcc> +<3d70> <732a> +<3d71> <7560> +<3d72> <583a> +<3d73> <82a6> +<3d74> <698a> +<3d75> <60e3> +<3d76> <4eee> +<3d77> <99c4> +<3d78> <9ebf> +<3d79> <5301> +<3d7a> <67a0> +<3d7b> <60e8> +<3d7c> <51b4> +<3d7d> <7a83> +<3d7e> <9c3a> +<3d7f> <7ac8> +<3d80> <691a> +<3d81> <59ac> +<3d82> <5840> +<3d83> <546a> +<3d84> <60e7> +<3d85> <567a> +<3d86> <6955> +<3d87> <9c2f> +<3d88> <87a5> +<3d89> <5c20> +<3d8a> <5e0b> +<3d8b> <671e> +<3d8c> <84ad> +<3d8d> <8b81> +<3d8e> <4e78> +<3d8f> <62c3> +<3d90> <6855> +<3d91> +<3d92> <82fd> +<3d93> <89a5> +<3d94> <8fa0> +<3d95> <97b8> +endbfchar + +100 beginbfchar +<3d96> <9847> +<3d97> <9abd> +<3d98> <5fb1> +<3d99> <6648> +<3d9a> <66bf> +<3d9b> +<3d9c> +<3d9d> +<3d9e> +<3d9f> +<3da0> +<3da1> <670e> +<3da2> <6918> +<3da3> +<3da4> +<3da5> +<3da6> +<3da7> <48d0> +<3da8> <4ab8> +<3da9> +<3daa> +<3dab> +<3dac> +<3dad> <51d2> +<3dae> +<3daf> <599f> +<3db0> +<3db1> <3bbe> +<3db2> +<3db3> <399b> +<3db4> +<3db5> +<3db6> <3762> +<3db7> +<3db8> <8b5e> +<3db9> +<3dba> +<3dbb> <7209> +<3dbc> +<3dbd> +<3dbe> <8eda> +<3dbf> <528f> +<3dc0> <7171> +<3dc1> +<3dc2> +<3dc3> <55bc> +<3dc4> +<3dc5> <3473> +<3dc6> +<3dc7> <4718> +<3dc8> +<3dc9> <5066> +<3dca> <34fb> +<3dcb> +<3dcc> +<3dcd> <477c> +<3dce> +<3dcf> +<3dd0> +<3dd1> +<3dd2> <9056> +<3dd3> +<3dd4> <8b62> +<3dd5> <5d5b> +<3dd6> +<3dd7> +<3dd8> +<3dd9> <8aea> +<3dda> +<3ddb> +<3ddc> <4bc0> +<3ddd> +<3dde> <9465> +<3ddf> +<3de0> <6195> +<3de1> <5a27> +<3de2> +<3de3> +<3de4> +<3de5> <4e6a> +<3de6> +<3de7> <9656> +<3de8> <6d8f> +<3de9> +<3dea> <8977> +<3deb> +<3dec> +<3ded> <7b42> +<3dee> +<3def> +<3df0> +<3df1> <7a45> +<3df2> <9a26> +<3df3> <365f> +<3df4> +<3df5> +<3df6> <7983> +<3df7> <5d2c> +<3df8> +<3df9> +endbfchar + +100 beginbfchar +<3dfa> <46d0> +<3dfb> <753b> +<3dfc> <8865> +<3dfd> <58b6> +<3dfe> <371c> +<3dff> +<3e00> <3c54> +<3e01> <9281> +<3e02> +<3e03> <9330> +<3e04> +<3e05> <6c39> +<3e06> +<3e07> <8827> +<3e08> <88f5> +<3e09> +<3e0a> +<3e0b> +<3e0c> <6eb8> +<3e0d> +<3e0e> +<3e0f> <39a4> +<3e10> +<3e11> +<3e12> <453f> +<3e13> <66b6> +<3e14> +<3e15> +<3e16> <8943> +<3e17> <40df> +<3e18> +<3e19> <39a1> +<3e1a> +<3e1b> +<3e1c> +<3e1d> <71ad> +<3e1e> <8366> +<3e1f> +<3e20> +<3e21> <4cb7> +<3e22> +<3e23> +<3e24> +<3e25> <7b43> +<3e26> <797e> +<3e27> <6fb5> +<3e28> +<3e29> <6a03> +<3e2a> +<3e2b> <53a2> +<3e2c> +<3e2d> <93bf> +<3e2e> <6836> +<3e2f> <975d> +<3e30> +<3e31> +<3e32> +<3e33> +<3e34> <5d85> +<3e35> +<3e36> <5715> +<3e37> <9823> +<3e38> +<3e39> <5dab> +<3e3a> +<3e3b> <65be> +<3e3c> <69d5> +<3e3d> <53d2> +<3e3e> +<3e3f> +<3e40> <3c11> +<3e41> <6736> +<3e42> +<3e43> <35ca> +<3e44> <48fa> +<3e45> +<3e46> <7808> +<3e47> <9255> +<3e48> <43f2> +<3e49> <43df> +<3e4a> <59f8> +<3e4b> +<3e4c> <568b> +<3e4d> +<3e4e> <9012> +<3e4f> <55c1> +<3e50> <4509> +<3e51> <7e7f> +<3e52> <6f56> +<3e53> <6ab1> +<3e54> <34e4> +<3e55> +<3e56> <373a> +<3e57> +<3e58> +<3e59> +<3e5a> <3deb> +<3e5b> +<3e5c> +<3e5d> <56bf> +endbfchar + +100 beginbfchar +<3e5e> <8e0e> +<3e5f> <5b6d> +<3e60> <63de> +<3e61> +<3e62> <6530> +<3e63> <562d> +<3e64> <541a> +<3e65> +<3e66> <4c7d> +<3e67> <5622> +<3e68> <561e> +<3e69> <7f49> +<3e6a> <5975> +<3e6b> +<3e6c> <8770> +<3e6d> <8117> +<3e6e> <9d5e> +<3e6f> <8d18> +<3e70> <763b> +<3e71> <9c45> +<3e72> <764e> +<3e73> <77b9> +<3e74> <9345> +<3e75> <5432> +<3e76> <8148> +<3e77> <82f7> +<3e78> <5625> +<3e79> <8132> +<3e7a> <8418> +<3e7b> <80bd> +<3e7c> <55ea> +<3e7d> <7962> +<3e7e> <5643> +<3e7f> <5416> +<3e80> +<3e81> <35ce> +<3e82> <5605> +<3e83> <55f1> +<3e84> <66f1> +<3e85> +<3e86> <362d> +<3e87> <7534> +<3e88> <55f0> +<3e89> <55ba> +<3e8a> <5497> +<3e8b> <5572> +<3e8c> +<3e8d> +<3e8e> <5ed0> +<3e8f> +<3e90> +<3e91> +<3e92> <9eab> +<3e93> <7d5a> +<3e94> +<3e95> +<3e96> <629d> +<3e97> <976d> +<3e98> <5494> +<3e99> <8ccd> +<3e9a> <71f6> +<3e9b> <9176> +<3e9c> <63fc> +<3e9d> <63b9> +<3e9e> <63fe> +<3e9f> <5569> +<3ea0> +<3ea1> <9c72> +<3ea2> +<3ea3> <519a> +<3ea4> <34df> +<3ea5> +<3ea6> <51a7> +<3ea7> <544d> +<3ea8> <551e> +<3ea9> <5513> +<3eaa> <7666> +<3eab> <8e2d> +<3eac> +<3ead> <75b1> +<3eae> <80b6> +<3eaf> <8804> +<3eb0> +<3eb1> <88c7> +<3eb2> <81b6> +<3eb3> <841c> +<3eb4> <44ec> +<3eb5> <7304> +<3eb6> <830b> +<3eb7> <567b> +<3eb8> <9170> +<3eb9> <9208> +<3eba> +<3ebb> <7266> +<3ebc> <474e> +<3ebd> +<3ebe> <40fa> +<3ebf> <9c5d> +<3ec0> <651f> +<3ec1> <48f3> +endbfchar + +100 beginbfchar +<3ec2> +<3ec3> +<3ec4> +<3ec5> +<3ec6> +<3ec7> +<3ec8> <71a3> +<3ec9> <7e8e> +<3eca> <9d50> +<3ecb> <3577> +<3ecc> <6cb2> +<3ecd> <5367> +<3ece> <39dc> +<3ecf> +<3ed0> <822d> +<3ed1> <544b> +<3ed2> +<3ed3> <3a52> +<3ed4> <7374> +<3ed5> +<3ed6> <4d09> +<3ed7> <9bed> +<3ed8> +<3ed9> <4c5b> +<3eda> +<3edb> <845c> +<3edc> +<3edd> <632e> +<3ede> <7d25> +<3edf> <3a2a> +<3ee0> <9008> +<3ee1> <52cc> +<3ee2> <3e74> +<3ee3> <367a> +<3ee4> <45e9> +<3ee5> +<3ee6> <7640> +<3ee7> <5af0> +<3ee8> +<3ee9> <787a> +<3eea> +<3eeb> <58a7> +<3eec> <40bf> +<3eed> <567c> +<3eee> <9b8b> +<3eef> <5d74> +<3ef0> <7654> +<3ef1> +<3ef2> <9e85> +<3ef3> <4ce1> +<3ef4> +<3ef5> <37fb> +<3ef6> <6119> +<3ef7> +<3ef8> +<3ef9> <565d> +<3efa> +<3efb> <5234> +<3efc> <35ad> +<3efd> +<3efe> <9d7c> +<3eff> <7c56> +<3f00> <9b39> +<3f01> <57de> +<3f02> <5c53> +<3f03> <64d3> +<3f04> +<3f05> +<3f06> <86ad> +<3f07> +<3f08> +<3f09> +<3f0a> <51fe> +<3f0b> +<3f0c> <5d8e> +<3f0d> <9703> +<3f0e> +<3f0f> <9e81> +<3f10> <904c> +<3f11> <7b1f> +<3f12> <9b02> +<3f13> <5cd1> +<3f14> <7ba3> +<3f15> <6268> +<3f16> <6335> +<3f17> <9aff> +<3f18> <7bcf> +<3f19> <9b2a> +<3f1a> <7c7e> +<3f1b> +<3f1c> <7c42> +<3f1d> <7c86> +<3f1e> <9c15> +<3f1f> <7bfc> +<3f20> <9b09> +<3f21> +<3f22> <9c2e> +<3f23> <9f5a> +<3f24> <5573> +<3f25> <5bc3> +endbfchar + +100 beginbfchar +<3f26> <4ffd> +<3f27> <9e98> +<3f28> <4ff2> +<3f29> <5260> +<3f2a> <52d1> +<3f2b> <5767> +<3f2c> <5056> +<3f2d> <59b7> +<3f2e> <5e12> +<3f2f> <97c8> +<3f30> <9dab> +<3f31> <8f5c> +<3f32> <5469> +<3f33> <97b4> +<3f34> <9940> +<3f35> <97ba> +<3f36> <532c> +<3f37> <6130> +<3f38> <692c> +<3f39> <53da> +<3f3a> <9c0a> +<3f3b> <9d02> +<3f3c> <4c3b> +<3f3d> <9641> +<3f3e> <6980> +<3f3f> <50a6> +<3f40> <7546> +<3f41> +<3f42> <99da> +<3f43> <5273> +<3f44> +<3f45> <9159> +<3f46> <9681> +<3f47> <915c> +<3f48> +<3f49> <9151> +<3f4a> +<3f4b> <637f> +<3f4c> <6aca> +<3f4d> <5611> +<3f4e> <918e> +<3f4f> <757a> +<3f50> <6285> +<3f51> <734f> +<3f52> <7c70> +<3f53> +<3f54> +<3f55> <76d6> +<3f56> <9b9d> +<3f57> <4e2a> +<3f58> +<3f59> <83be> +<3f5a> <8842> +<3f5b> +<3f5c> <5c4a> +<3f5d> <69c0> +<3f5e> +<3f5f> +<3f60> <521f> +<3f61> <5df5> +<3f62> <4ece> +<3f63> <6c31> +<3f64> +<3f65> <4f39> +<3f66> <549c> +<3f67> +<3f68> <529a> +<3f69> <8d82> +<3f6a> <35fe> +<3f6b> +<3f6c> <35f3> +<3f6d> +<3f6e> <6b52> +<3f6f> <917c> +<3f70> <9fa5> +<3f71> <9b97> +<3f72> <982e> +<3f73> <98b4> +<3f74> <9aba> +<3f75> <9ea8> +<3f76> <9e84> +<3f77> <7b14> +<3f78> +<3f79> <6bfa> +<3f7a> <8818> +<3f7b> <7f78> +<3f7c> +<3f7d> <5620> +<3f7e> +<3f7f> <8e77> +<3f80> <9f53> +<3f81> +<3f82> <8dd4> +<3f83> <8e4f> +<3f84> <9e1c> +<3f85> <8e01> +<3f86> <6282> +<3f87> +<3f88> <8e28> +<3f89> <8e75> +endbfchar + +100 beginbfchar +<3f8a> <7ad3> +<3f8b> <7a3e> +<3f8c> <78d8> +<3f8d> <6cea> +<3f8e> <8a67> +<3f8f> <7607> +<3f90> <9f26> +<3f91> <6cce> +<3f92> <87d6> +<3f93> <75c3> +<3f94> +<3f95> <7853> +<3f96> <8d0c> +<3f97> <72e2> +<3f98> <7371> +<3f99> <8b2d> +<3f9a> <7302> +<3f9b> <74f1> +<3f9c> <8ceb> +<3f9d> +<3f9e> <862f> +<3f9f> <5fba> +<3fa0> <88a0> +<3fa1> <44b7> +<3fa2> +<3fa3> +<3fa4> +<3fa5> <8a7e> +<3fa6> +<3fa7> +<3fa8> <60fd> +<3fa9> <7667> +<3faa> <9ad7> +<3fab> <9d44> +<3fac> <936e> +<3fad> <9b8f> +<3fae> <87f5> +<3faf> +<3fb0> +<3fb1> <8cf7> +<3fb2> <732c> +<3fb3> <9721> +<3fb4> <9bb0> +<3fb5> <35d6> +<3fb6> <72b2> +<3fb7> <4c07> +<3fb8> <7c51> +<3fb9> <994a> +<3fba> <6159> +<3fbb> <4c04> +<3fbc> <9e96> +<3fbd> <617d> +<3fbe> +<3fbf> <575f> +<3fc0> <616f> +<3fc1> <62a6> +<3fc2> <6239> +<3fc3> +<3fc4> <3a5c> +<3fc5> <61e2> +<3fc6> <53aa> +<3fc7> <6364> +<3fc8> <6802> +<3fc9> <35d2> +<3fca> <5d57> +<3fcb> <8fda> +<3fcc> +<3fcd> +<3fce> <50d9> +<3fcf> <7906> +<3fd0> <5332> +<3fd1> <9638> +<3fd2> +<3fd3> <4065> +<3fd4> +<3fd5> <77fe> +<3fd6> +<3fd7> <7cc2> +<3fd8> +<3fd9> <7cda> +<3fda> <7a2d> +<3fdb> <8066> +<3fdc> <8063> +<3fdd> <7d4d> +<3fde> <7505> +<3fdf> <74f2> +<3fe0> <8994> +<3fe1> <821a> +<3fe2> <670c> +<3fe3> <8062> +<3fe4> +<3fe5> <805b> +<3fe6> <74f0> +<3fe7> <8103> +<3fe8> <7724> +<3fe9> <8989> +<3fea> +<3feb> <7553> +<3fec> <87a9> +<3fed> <87ce> +endbfchar + +100 beginbfchar +<3fee> <81c8> +<3fef> <878c> +<3ff0> <8a49> +<3ff1> <8cad> +<3ff2> <8b43> +<3ff3> <772b> +<3ff4> <74f8> +<3ff5> <84da> +<3ff6> <69b2> +<3ff7> <8da6> +<3ff8> +<3ff9> <89a9> +<3ffa> +<3ffb> <6db9> +<3ffc> <87c1> +<3ffd> +<3ffe> <74e7> +<3fff> <3ddb> +<4000> <7176> +<4001> <60a4> +<4002> <619c> +<4003> <3cd1> +<4004> +<4005> <6077> +<4006> +<4007> <7f71> +<4008> +<4009> <60e9> +<400a> <4b7e> +<400b> +<400c> <92db> +<400d> +<400e> +<400f> <854c> +<4010> <42b5> +<4011> <73ef> +<4012> <51b5> +<4013> <3649> +<4014> +<4015> +<4016> <9344> +<4017> +<4018> <82ee> +<4019> +<401a> <783c> +<401b> <6744> +<401c> <62df> +<401d> +<401e> +<401f> +<4020> +<4021> +<4022> <4fab> +<4023> +<4024> <5008> +<4025> +<4026> +<4027> +<4028> +<4029> +<402a> +<402b> +<402c> <5fa4> +<402d> +<402e> +<402f> <6edb> +<4030> +<4031> <50de> +<4032> <5101> +<4033> <347a> +<4034> <510e> +<4035> <986c> +<4036> <3743> +<4037> <8416> +<4038> +<4039> +<403a> <5160> +<403b> +<403c> <516a> +<403d> +<403e> +<403f> +<4040> +<4041> +<4042> +<4043> +<4044> <5b82> +<4045> <877d> +<4046> +<4047> +<4048> <51b2> +<4049> <51b8> +<404a> <9d34> +<404b> <51c9> +<404c> <51cf> +<404d> <51d1> +<404e> <3cdc> +<404f> <51d3> +<4050> +<4051> <51b3> +endbfchar + +100 beginbfchar +<4052> +<4053> +<4054> <51ed> +<4055> <83cd> +<4056> <693e> +<4057> +<4058> <5f7b> +<4059> <520b> +<405a> <5226> +<405b> <523c> +<405c> <52b5> +<405d> <5257> +<405e> <5294> +<405f> <52b9> +<4060> <52c5> +<4061> <7c15> +<4062> <8542> +<4063> <52e0> +<4064> <860d> +<4065> +<4066> +<4067> +<4068> <5549> +<4069> <6ed9> +<406a> +<406b> +<406c> +<406d> <5333> +<406e> +<406f> +<4070> <6ccb> +<4071> +<4072> <681b> +<4073> <73d5> +<4074> <604a> +<4075> <3eaa> +<4076> <38cc> +<4077> +<4078> <71dd> +<4079> <44a2> +<407a> <536d> +<407b> <5374> +<407c> +<407d> <537e> +<407e> +<407f> +<4080> +<4081> <77e6> +<4082> <5393> +<4083> +<4084> <53a0> +<4085> <53ab> +<4086> <53ae> +<4087> <73a7> +<4088> +<4089> <3f59> +<408a> <739c> +<408b> <53c1> +<408c> <53c5> +<408d> <6c49> +<408e> <4e49> +<408f> <57fe> +<4090> <53d9> +<4091> <3aab> +<4092> +<4093> <53e0> +<4094> +<4095> +<4096> <53f6> +<4097> +<4098> <5413> +<4099> <7079> +<409a> <552b> +<409b> <6657> +<409c> <6d5b> +<409d> <546d> +<409e> +<409f> +<40a0> <555d> +<40a1> <548f> +<40a2> <54a4> +<40a3> <47a6> +<40a4> +<40a5> +<40a6> <3db4> +<40a7> +<40a8> +<40a9> +<40aa> <5547> +<40ab> <4ced> +<40ac> <542f> +<40ad> <7417> +<40ae> <5586> +<40af> <55a9> +<40b0> +<40b1> +<40b2> +<40b3> <4552> +<40b4> +<40b5> <66b3> +endbfchar + +100 beginbfchar +<40b6> +<40b7> <5637> +<40b8> <66cd> +<40b9> +<40ba> <66a4> +<40bb> +<40bc> <564d> +<40bd> <564f> +<40be> <78f1> +<40bf> <56f1> +<40c0> <9787> +<40c1> <53fe> +<40c2> <5700> +<40c3> <56ef> +<40c4> <56ed> +<40c5> +<40c6> <3623> +<40c7> +<40c8> <5746> +<40c9> +<40ca> <6c6e> +<40cb> <708b> +<40cc> <5742> +<40cd> <36b1> +<40ce> +<40cf> <57e6> +<40d0> +<40d1> <5803> +<40d2> +<40d3> +<40d4> <5826> +<40d5> +<40d6> <581f> +<40d7> <58aa> +<40d8> <3561> +<40d9> <58e0> +<40da> <58dc> +<40db> +<40dc> <58fb> +<40dd> <5bff> +<40de> <5743> +<40df> +<40e0> +<40e1> <93d3> +<40e2> <35a1> +<40e3> <591f> +<40e4> <68a6> +<40e5> <36c3> +<40e6> <6e59> +<40e7> +<40e8> <5a24> +<40e9> +<40ea> +<40eb> <8505> +<40ec> <59c9> +<40ed> +<40ee> +<40ef> +<40f0> +<40f1> <59d9> +<40f2> +<40f3> +<40f4> +<40f5> <6d71> +<40f6> +<40f7> +<40f8> <59f9> +<40f9> +<40fa> <5aab> +<40fb> <5a63> +<40fc> <36e6> +<40fd> +<40fe> +<40ff> <3708> +<4100> <5a96> +<4101> <7465> +<4102> <5ad3> +<4103> +<4104> +<4105> +<4106> <3732> +<4107> +<4108> <5e83> +<4109> <52d0> +<410a> <5b76> +<410b> <6588> +<410c> <5b7c> +<410d> +<410e> <4004> +<410f> <485d> +<4110> +<4111> <5bd5> +<4112> +<4113> +<4114> +<4115> <5bf3> +<4116> <5b9d> +<4117> <4d10> +<4118> <5c05> +<4119> +endbfchar + +100 beginbfchar +<411a> <5c13> +<411b> <73ce> +<411c> <5c14> +<411d> +<411e> +<411f> <5c49> +<4120> <48dd> +<4121> <5c85> +<4122> <5ce9> +<4123> <5cef> +<4124> <5d8b> +<4125> +<4126> +<4127> <5d10> +<4128> <5d18> +<4129> <5d46> +<412a> +<412b> <5cba> +<412c> <5dd7> +<412d> <82fc> +<412e> <382d> +<412f> +<4130> +<4131> +<4132> <8287> +<4133> <3836> +<4134> <3bc2> +<4135> <5e2e> +<4136> <6a8a> +<4137> +<4138> +<4139> +<413a> +<413b> <53a6> +<413c> <4eb7> +<413d> +<413e> <53a8> +<413f> +<4140> <5e09> +<4141> +<4142> +<4143> <5ef9> +<4144> <5efb> +<4145> <38a0> +<4146> <5efc> +<4147> <683e> +<4148> <941b> +<4149> <5f0d> +<414a> +<414b> +<414c> <3ade> +<414d> +<414e> <5f3a> +<414f> +<4150> +<4151> +<4152> <5f63> +<4153> +<4154> <5f72> +<4155> <9340> +<4156> +<4157> <5fa7> +<4158> <5db6> +<4159> <3d5f> +<415a> +<415b> +<415c> +<415d> +<415e> <91d6> +<415f> +<4160> +<4161> <6031> +<4162> <6685> +<4163> <3963> +<4164> <3dc7> +<4165> <3639> +<4166> <5790> +<4167> +<4168> <7971> +<4169> <3e40> +<416a> <609e> +<416b> +<416c> <60ea> +<416d> +<416e> +<416f> +<4170> <74a4> +<4171> <50e1> +<4172> <5aa0> +<4173> <6164> +<4174> <6142> +<4175> +<4176> +<4177> <6181> +<4178> <51f4> +<4179> +<417a> <6187> +<417b> <5baa> +<417c> +<417d> +endbfchar + +100 beginbfchar +<417e> <61d3> +<417f> +<4180> +<4181> <61d0> +<4182> <3932> +<4183> +<4184> +<4185> <6023> +<4186> <615c> +<4187> <651e> +<4188> <638b> +<4189> +<418a> <62c5> +<418b> +<418c> <62d5> +<418d> +<418e> <636c> +<418f> +<4190> <3a17> +<4191> <6438> +<4192> <63f8> +<4193> +<4194> +<4195> <6f8a> +<4196> +<4197> +<4198> +<4199> <64e1> +<419a> <64e5> +<419b> <947b> +<419c> <3a66> +<419d> <643a> +<419e> <3a57> +<419f> <654d> +<41a0> <6f16> +<41a1> +<41a2> +<41a3> <6585> +<41a4> <656d> +<41a5> <655f> +<41a6> +<41a7> <65b5> +<41a8> +<41a9> <4b37> +<41aa> <65d1> +<41ab> <40d8> +<41ac> +<41ad> +<41ae> <65e3> +<41af> <5fdf> +<41b0> +<41b1> <6618> +<41b4> <6644> +<41b7> <664b> +<41b8> +<41b9> <6667> +<41ba> +<41bb> <6673> +<41bc> +<41bd> +<41be> +<41bf> +<41c0> +<41c1> <77c5> +<41c2> +<41c3> <99a4> +<41c4> <6702> +<41c5> +<41c6> +<41c7> <69fa> +<41c8> +<41c9> +<41ca> <6767> +<41cb> <6762> +<41cc> +<41cd> +<41ce> <67d7> +<41cf> <44e9> +<41d0> <6822> +<41d1> <6e50> +<41d2> <923c> +<41d3> <6801> +<41d4> +<41d5> +<41d6> <685d> +<41d7> +<41d8> <69e1> +<41d9> <6a0b> +<41da> +<41db> <6973> +<41dc> <68c3> +<41dd> +<41de> <6901> +<41df> <6900> +<41e0> <3a01> +<41e1> +<41e2> <3b80> +<41e3> <67ac> +<41e4> <6961> +<41e5> +endbfchar + +100 beginbfchar +<41e6> <42fc> +<41e7> <6936> +<41e8> <6998> +<41e9> <3ba1> +<41ea> +<41eb> <8363> +<41ec> <5090> +<41ed> <69f9> +<41ee> +<41ef> +<41f0> <6a45> +<41f1> +<41f2> <6a9d> +<41f3> <3bf3> +<41f4> <67b1> +<41f5> <6ac8> +<41f6> +<41f7> <3c0d> +<41f8> <6b1d> +<41f9> +<41fa> <60de> +<41fb> <6b35> +<41fc> <6b74> +<41fd> +<41fe> <6eb5> +<41ff> +<4200> +<4201> +<4202> <3740> +<4203> <5421> +<4204> +<4205> <6be1> +<4206> +<4207> <6bdc> +<4208> <6c37> +<4209> +<420a> +<420b> +<420c> <6c5a> +<420d> <8226> +<420e> <6c79> +<420f> +<4210> <44c5> +<4211> +<4212> +<4213> +<4214> +<4215> +<4216> <36e5> +<4217> <3ceb> +<4218> +<4219> <9b83> +<421a> +<421b> +<421c> <7f8f> +<421d> <6837> +<421e> +<421f> +<4220> +<4221> <6d96> +<4222> <6d5c> +<4223> <6e7c> +<4224> <6f04> +<4225> +<4226> +<4227> +<4228> <8533> +<4229> +<422a> <51c7> +<422b> +<422c> +<422d> <842e> +<422e> +<422f> +<4230> +<4231> <7453> +<4232> +<4233> <79cc> +<4234> <6e4f> +<4235> <5a91> +<4236> +<4237> <6ff8> +<4238> <370d> +<4239> <6f9d> +<423a> +<423b> <6efa> +<423c> +<423d> +<423e> <4555> +<423f> <93f0> +<4240> <6f44> +<4241> <6f5c> +<4242> <3d4e> +<4243> <6f74> +<4244> +<4245> <3d3b> +<4246> <6f9f> +<4247> +<4248> <6fd3> +<4249> +endbfchar + +100 beginbfchar +<424a> +<424b> +<424c> +<424d> +<424e> +<424f> <51df> +<4252> +<4253> +<4254> <704b> +<4255> <707e> +<4256> <70a7> +<4257> +<4258> <70cc> +<425b> <70df> +<425c> <4104> +<425d> <3de8> +<425e> <71b4> +<425f> <7196> +<4260> +<4261> <712b> +<4262> <7145> +<4263> <5a88> +<4264> <714a> +<4265> +<4266> +<4267> <714f> +<4268> <9362> +<4269> +<426a> <712c> +<426b> +<426c> +<426d> +<426e> <71ba> +<426f> +<4270> <70bd> +<4271> <720e> +<4272> <9442> +<4273> <7215> +<4274> <5911> +<4275> <9443> +<4276> <7224> +<4277> <9341> +<4278> +<4279> <722e> +<427a> <7240> +<427b> +<427c> <68bd> +<427d> <7255> +<427e> <7257> +<427f> <3e55> +<4280> +<4281> <680d> +<4282> <6f3d> +<4283> <7282> +<4284> +<4285> <732b> +<4286> +<4287> +<4288> <48ed> +<4289> +<428a> <7328> +<428b> <732e> +<428c> <73cf> +<428d> <73aa> +<428e> +<428f> +<4290> <73c9> +<4291> <7449> +<4292> +<4293> +<4294> +<4295> <6623> +<4296> <36c5> +<4297> +<4298> +<4299> +<429a> <73f7> +<429b> <7415> +<429c> <6903> +<429d> +<429e> <7439> +<429f> <3ed7> +<42a0> +<42a1> +<42a2> <7460> +<42a3> +<42a4> <7447> +<42a5> <73e4> +<42a6> <7476> +<42a7> <83b9> +<42a8> <746c> +<42a9> <7474> +<42aa> <93f1> +<42ab> <6a2c> +<42ac> <7482> +<42ad> <4953> +<42ae> +<42af> +<42b0> +<42b1> +endbfchar + +100 beginbfchar +<42b2> <5b46> +<42b3> +<42b4> +<42b5> <74c8> +<42b6> +<42b7> <750e> +<42b8> <751e> +<42b9> +<42ba> +<42bb> <5bd7> +<42bc> +<42bd> <9385> +<42be> <754d> +<42bf> <754a> +<42c0> <7567> +<42c1> <756e> +<42c2> +<42c3> <3f04> +<42c4> +<42c5> <758e> +<42c6> <745d> +<42c7> <759e> +<42c8> <75b4> +<42c9> <7602> +<42ca> <762c> +<42cb> <7651> +<42cc> <764f> +<42cd> <766f> +<42ce> +<42cf> +<42d0> <7690> +<42d1> <81ef> +<42d2> <37f8> +<42d3> +<42d4> +<42d5> <76a1> +<42d6> <76a5> +<42d7> <76b7> +<42d8> <76cc> +<42d9> +<42da> <8462> +<42db> +<42dc> +<42dd> +<42de> <771e> +<42df> <7726> +<42e0> <7740> +<42e1> <64af> +<42e2> +<42e3> <7758> +<42e4> +<42e5> <77af> +<42e6> +<42e7> +<42e8> +<42e9> <77f4> +<42ea> +<42eb> <68ca> +<42ec> <78af> +<42ed> <78c7> +<42ee> <78d3> +<42ef> <96a5> +<42f0> <792e> +<42f1> +<42f2> <78d7> +<42f3> <7934> +<42f4> <78b1> +<42f5> +<42f6> <8fb8> +<42f7> <8884> +<42f8> +<42f9> <7986> +<42fa> <8900> +<42fb> <6902> +<42fc> <7980> +<42fd> +<42fe> <799d> +<42ff> +<4300> <793c> +<4301> <79a9> +<4302> <6e2a> +<4303> +<4304> <3ea8> +<4305> <79c6> +<4306> +<4307> <79d4> +<4308> +<4309> <5525> +<430a> +<430b> +<430c> +<430d> +<430e> <5590> +<430f> +<4310> <39ec> +<4311> +<4312> <8e46> +<4313> +<4314> +<4315> +endbfchar + +100 beginbfchar +<4316> +<4317> <777a> +<4318> +<4319> <3a34> +<431a> <47d5> +<431b> +<431c> +<431d> +<431e> <64dd> +<431f> +<4320> +<4321> +<4322> +<4323> <648d> +<4324> <8e7e> +<4325> +<4326> +<4327> +<4328> +<4329> +<432a> +<432b> +<432c> +<432d> +<432e> +<432f> <47f4> +<4330> +<4331> +<4332> <9ab2> +<4333> <3a67> +<4334> +<4335> <3fed> +<4336> <3506> +<4337> +<4338> +<4339> +<433a> +<433b> <9d6e> +<433c> <9815> +<433d> +<433e> <43d9> +<433f> +<4340> <64b4> +<4341> <54e3> +<4342> +<4343> +<4344> +<4345> <39fb> +<4346> +<4347> +<4348> +<4349> +<434a> <64ea> +<434b> +<434c> +<434d> <8e68> +<434e> +<434f> +<4350> +<4351> +<4352> <480b> +<4353> +<4354> <3ffa> +<4355> <5873> +<4356> +<4357> +<4358> +<4359> +<435a> +<435b> +<435c> +<435d> <5579> +<435e> +<435f> <43ba> +<4360> +<4361> <4ab4> +<4362> +<4363> +<4364> <81aa> +<4365> <98f5> +<4366> +<4367> <6379> +<4368> <39fe> +<4369> +<436a> <8dc0> +<436b> <56a1> +<436c> <647c> +<436d> <3e43> +<436e> +<436f> +<4370> +<4371> +<4372> +<4373> +<4374> +<4375> +<4376> <3992> +<4377> <3a06> +<4378> +<4379> <3578> +endbfchar + +100 beginbfchar +<437a> +<437b> +<437c> +<437d> +<437e> +<437f> +<4380> <34bc> +<4381> <6c3d> +<4382> +<4383> +<4384> +<4385> +<4386> +<4387> +<4388> +<4389> +<438a> +<438b> +<438c> +<438d> +<438e> +<438f> <3a18> +<4390> +<4391> +<4392> +<4393> +<4394> +<4395> <95aa> +<4396> +<4397> +<4398> <7140> +<4399> +<439a> <5156> +<439b> <4efe> +<439c> <5088> +<439d> +<439e> <3493> +<439f> <5186> +<43a0> <5e42> +<43a1> <5205> +<43a2> <5227> +<43a3> <5279> +<43a4> +<43a5> <3553> +<43a6> <53c2> +<43a7> <535f> +<43a8> +<43a9> <553f> +<43aa> +<43ab> <55d8> +<43ac> <35dd> +<43ad> <5621> +<43ae> +<43af> <5654> +<43b0> +<43b1> +<43b2> +<43b3> +<43b4> +<43b5> +<43b6> +<43b7> <37b9> +<43b8> <5cc1> +<43b9> <5d15> +<43ba> <5d56> +<43bb> <3838> +<43bc> <4e81> +<43bd> <5ebd> +<43be> <3914> +<43bf> <61b9> +<43c0> <6290> +<43c1> <6318> +<43c2> <645a> +<43c3> <6491> +<43c4> <816d> +<43c5> <8184> +<43c6> <8193> +<43c7> <6800> +<43c8> <3bbc> +<43c9> <728f> +<43ca> <72cd> +<43cb> +<43cc> <7339> +<43cd> <7542> +<43ce> <75dc> +<43cf> <3fc0> +<43d0> +<43d1> <3fd7> +<43d2> +<43d3> <7680> +<43d4> <768c> +<43d5> <40a8> +<43d6> <7839> +<43d7> <4103> +<43d8> <7a91> +<43d9> <7c1b> +<43da> <7ced> +<43db> <7f93> +<43dc> <7fae> +<43dd> +endbfchar + +100 beginbfchar +<43de> <82ff> +<43df> <585f> +<43e0> <86b2> +<43e1> <45ac> +<43e2> <878b> +<43e3> <8947> +<43e4> +<43e5> <8a29> +<43e6> +<43e7> <8e71> +<43e8> +<43e9> <8eb0> +<43ea> +<43eb> <915e> +<43ec> <918c> +<43ed> <990e> +<43ee> <991c> +<43ef> +<43f0> +<43f1> <9b81> +<43f2> <9dc0> +<43f3> <9d93> +<43f4> <9eac> +<43f5> <4d91> +<43f6> +<43f7> <93ba> +<43f8> <9e7b> +<43f9> <7089> +<43fa> <7348> +<43fb> +<43fc> <7999> +<43fd> <8fb7> +<43fe> +<43ff> <9942> +<445f> <00a9> +<4460> <2122> +<4461> <2026> +<44c1> <20ac> +<44c2> <20ac> +<44c3> <2110> +<44c4> <20ac> +<44c5> <20ac> +<44c8> <2e80> +<44ce> +<44cf> <31c5> +<44d0> +<44d1> +<44d4> +<44d5> +<44d6> <31c8> +<44d7> +<44dc> +<44e1> +<44e2> +<44e3> <9751> +<44e4> +<44e5> <4e5b> +<44e6> <4ebb> +<44e7> <353e> +<44e8> <5c23> +<44e9> <5f51> +<44ea> <5fc4> +<44eb> <38fa> +<44ec> <624c> +<44ed> <6535> +<44ee> <6b7a> +<44ef> <6c35> +<44f0> <6c3a> +<44f1> <706c> +<44f2> <722b> +<44f3> <4e2c> +<44f4> <72ad> +<44f5> +<44f6> <7f52> +<44f7> <793b> +<44f8> <7cf9> +<44f9> <7f53> +<44fa> +<44fb> <34c1> +<44fc> +<44fd> <8002> +<44fe> <8080> +<44ff> +<4500> +<4501> <535d> +<4502> <8864> +<4503> <89c1> +<4504> +<4505> <8ba0> +<4506> <8d1d> +<4507> <9485> +<4508> <9578> +<4509> <957f> +<450a> <95e8> +<450b> +<450c> <97e6> +<450d> <9875> +<450e> <98ce> +<450f> <98de> +<4510> <9963> +endbfchar + +100 beginbfchar +<4511> +<4512> <9c7c> +<4513> <9e1f> +<4514> <9ec4> +<4515> <6b6f> +<4516> +<4517> <4e37> +<4518> +<4519> <961d> +<451a> <6237> +<451b> <94a2> +<451c> <2e84> +<4520> <2e8a> +<4523> <2e95> +<4524> <2e9c> +<4525> <2ea5> +<4526> <2ea7> +<4527> <2eaa> +<4528> <2eac> +<4529> <2eae> +<452a> <2eb6> +<452b> <2ebc> +<452c> <2ebe> +<452d> <2eca> +<4530> <2ecf> +<4533> <2ede> +<4534> +<4535> +<4536> <650a> +<4537> <4e3d> +<4538> <6edd> +<4539> <9d4e> +<453a> <91df> +<453b> +<453c> <4f1a> +<453d> <4f28> +<453e> <4fa8> +<453f> <5174> +<4540> <519c> +<4541> <51e4> +<4542> <52a1> +<4543> <52a8> +<4544> <533b> +<4545> <534e> +<4546> <53d1> +<4547> <53d8> +<4548> <56e2> +<4549> <58f0> +<454a> <5904> +<454b> <5907> +<454c> <5932> +<454d> <5934> +<454e> <5b66> +<4551> <5c9a> +<4552> <5e86> +<4553> <603b> +<4554> <6589> +<4555> <67fe> +<4556> <6804> +<4557> <6865> +<4558> <6d4e> +<4559> <70bc> +<455a> <7535> +<455b> <7ea4> +<455c> <7eac> +<455d> <7eba> +<455e> <7ec7> +<455f> <7ecf> +<4560> <7edf> +<4561> <7f06> +<4562> <7f37> +<4563> <827a> +<4564> <82cf> +<4565> <836f> +<4566> <89c6> +<4567> <8bbe> +<4568> <8be2> +<456b> <8f6e> +<456c> <7411> +<456d> <7cfc> +<456e> <7dcd> +<456f> <6946> +<4570> <7ac9> +<4571> <78b8> +<4572> <80bc> +<4573> <8d0b> +<4574> <80f6> +<4575> +<4576> <809f> +<4577> <9ec7> +<4578> <4ccd> +<4579> <9dc9> +<457a> <9e0c> +<457b> <4c3e> +<457c> +<457d> +<457e> <9e0a> +<457f> +<4580> <35c1> +<4581> <6e9a> +endbfchar + +100 beginbfchar +<4582> <823e> +<4583> <7519> +<4584> <4911> +<4585> <9a6c> +<4586> <9a8f> +<4587> <9f99> +<4588> <7987> +<4589> +<458a> +<458b> +<458c> +<458d> <4e24> +<458e> <4e80> +<458f> <4e87> +<4590> <4ebf> +<4591> <4eeb> +<4592> <4f37> +<4593> <344c> +<4594> <4fbd> +<4595> <3e48> +<4596> <5003> +<4597> <347d> +<4598> <34a5> +<4599> <5905> +<459a> <51db> +<459b> <51fc> +<459c> <4e89> +<459d> <5290> +<459e> <5327> +<459f> <35c7> +<45a0> <53a9> +<45a1> <3551> +<45a2> <53b0> +<45a3> <5423> +<45a4> <356d> +<45a5> <3572> +<45a6> <3681> +<45a7> <5493> +<45a8> <54a3> +<45a9> <54b4> +<45aa> <54b9> +<45ab> <54d0> +<45ac> <54ef> +<45ad> <5518> +<45ae> <5523> +<45af> <5528> +<45b0> <3598> +<45b1> <35a5> +<45b2> <35bf> +<45b3> <55d7> +<45b4> <35c5> +<45b5> +<45b6> <4053> +<45b7> +<45b8> +<45b9> +<45ba> +<45bb> +<45bc> +<45bd> +<45be> +<45bf> +<45c0> <40bb> +<45c1> +<45c2> <5652> +<45c3> +<45c4> +<45c5> +<45c6> +<45c7> +<45c8> <35fb> +<45c9> +<45ca> +<45cb> +<45cc> +<45cd> <3f93> +<45ce> +<45cf> +<45d0> +<45d1> +<45d2> +<45d3> +<45d4> +<45d5> +<45d6> +<45d7> <3ff9> +<45d8> +<45d9> <6432> +<45da> +<45db> +<45de> +<45df> +<45e0> +<45e1> +<45e2> <54cc> +<45e3> <82c4> +<45e4> <55b9> +<45e5> +<45e6> <9c26> +<45e7> <9ab6> +endbfchar + +100 beginbfchar +<45e8> +<45e9> <80ec> +<45ea> <5c1c> +<45eb> +<45ec> <8134> +<45ed> <3797> +<45ee> +<45ef> <91b6> +<45f0> +<45f1> +<45f2> +<45f3> +<45f4> +<45f5> <3609> +<45f6> +<45f7> <56af> +<45f8> +<45f9> +<45fa> +<45fb> +<45fc> +<45fd> +<45fe> +<45ff> +<4600> +<4601> +<4602> +<4603> <5a54> +<4608> <579c> +<4609> +<460a> +<460b> +<460c> +<460d> +<460e> +<460f> <3703> +<4610> +<4611> +<4612> +<4613> +<4614> +<4615> +<4616> +<4617> +<4618> <5899> +<4619> <5268> +<461a> <361a> +<461b> +<461c> <7bb2> +<461d> <5b68> +<461e> <4800> +<461f> <4b2c> +<4620> <9f27> +<4621> <49e7> +<4622> <9c1f> +<4623> <9b8d> +<4624> +<4625> +<4626> <55fb> +<4627> <35f2> +<4628> <5689> +<4629> <5d3e> +<462a> <5d48> +<462b> <3dfc> +<462c> <380f> +<462d> <5da4> +<462e> <5db9> +<462f> <3820> +<4630> <5f25> +<4631> <5f83> +<4632> <3908> +<4633> <393f> +<4634> <394d> +<4635> <60d7> +<4636> <613d> +<4637> <5ce5> +<4638> <3989> +<4639> <61b7> +<463a> <61cf> +<463b> <39b8> +<463c> <622c> +<463d> <62e5> +<463e> <39f8> +<463f> <56b1> +<4640> <3a03> +<4641> <63e2> +<4642> <63fb> +<4643> <6407> +<4644> <3a4b> +<4645> <64c0> +<4646> <9f9f> +<4647> <3a97> +<4648> <6586> +<4649> <3abd> +<464a> <65ff> +<464b> <6653> +<464c> <3af2> +<464d> <6692> +<464e> <3b22> +<464f> <6716> +endbfchar + +100 beginbfchar +<4650> <3b42> +<4651> <67a4> +<4652> <3b58> +<4653> <684a> +<4654> <6884> +<4655> <3b72> +<4656> <3b71> +<4657> <3b7b> +<4658> <6909> +<4659> <6943> +<465a> <725c> +<465b> <6964> +<465c> <699f> +<465d> <6985> +<465e> <69d6> +<465f> <3bdd> +<4660> <6a65> +<4661> <6a74> +<4662> <6a71> +<4663> <6a82> +<4664> <3bec> +<4665> <6a99> +<4666> <3bf2> +<4667> <6aab> +<4668> <6ab5> +<4669> <6ad4> +<466a> <6af6> +<466b> <6b81> +<466c> <6bc1> +<466d> <6bea> +<466e> <6c75> +<466f> <6caa> +<4670> <3ccb> +<4671> <6d02> +<4672> <6d06> +<4673> <6d26> +<4674> <6d81> +<4675> <3cef> +<4676> <6da4> +<4677> <6db1> +<4678> <6e15> +<4679> <6e18> +<467a> <6e29> +<467b> <6e86> +<467c> +<467d> <6ebb> +<467e> <6ee2> +<467f> <6eda> +<4680> <9f7f> +<4683> <6f24> +<4684> <6f34> +<4685> <3d46> +<4686> +<4687> <6f81> +<4688> <6fbe> +<4689> <3d6a> +<468a> <3d75> +<468b> <71b7> +<468c> <5c99> +<468d> <3d8a> +<468e> <702c> +<468f> <3d91> +<4690> <7050> +<4691> <7054> +<4692> <706f> +<4693> <707f> +<4694> +<4695> <43c1> +<4696> <35f1> +<4697> +<4698> <364e> +<4699> <3dad> +<469a> +<469b> <667d> +<469c> <7c74> +<469d> <748d> +<469e> <7e92> +<469f> <4503> +<46a0> +<46a1> +<46a2> +<46a3> <347e> +<46a4> +<46a5> +<46a6> +<46a7> <8771> +<46a8> <63c1> +<46a9> <7777> +<46aa> <898a> +<46ab> +<46ac> <8b4c> +<46ad> +<46ae> <492a> +<46af> +<46b0> +<46b1> +<46b2> <3af0> +<46b3> <708f> +<46b4> +<46b5> +endbfchar + +100 beginbfchar +<46b6> +<46b7> <6888> +<46b8> +<46b9> <9f62> +<46ba> <93c6> +<46bb> +<46bc> <9366> +<46bd> <928f> +<46be> <8614> +<46bf> +<46c0> <4190> +<46c1> <678f> +<46c2> <681e> +<46c3> <3863> +<46c4> +<46c5> <3b19> +<46c6> <8496> +<46c7> +<46c8> <39e2> +<46c9> <8480> +<46ca> <436e> +<46cb> <9771> +<46cc> <999b> +<46cd> <492d> +<46ce> <6f17> +<46cf> +<46d0> <70a6> +<46d1> +<46d2> <7e65> +<46d3> <5d2f> +<46d4> <3df3> +<46d5> +<46d6> +<46d7> <7da4> +<46d8> <8426> +<46d9> <5485> +<46da> +<46db> +<46dc> <577e> +<46dd> +<46de> +<46df> <3fe5> +<46e0> +<46e1> +<46e2> <7003> +<46e3> +<46e4> <5d70> +<46e5> <738f> +<46e6> +<46e7> +<46e8> <4fc8> +<46e9> <7fe7> +<46ea> <7310> +<46eb> <7338> +<46ec> <7341> +<46ed> <3ea9> +<46ee> <71f5> +<46ef> +<46f0> <73e1> +<46f1> <3eca> +<46f2> <3ed1> +<46f3> <7419> +<46f6> <3ee2> +<46f7> <3ef0> +<46f8> <3ef4> +<46f9> <3efa> +<46fa> <74d3> +<46fb> <3f0e> +<46fc> <3f53> +<46fd> <756d> +<46fe> <7572> +<46ff> <758d> +<4700> <3f7c> +<4701> <75c8> +<4702> <764d> +<4703> <7674> +<4704> <3fdc> +<4705> <767a> +<4706> <7188> +<4707> <5623> +<4708> <8980> +<4709> <401d> +<470a> <7743> +<470b> <4039> +<470c> <4045> +<470d> <35db> +<470e> <7798> +<470f> <406a> +<4710> <406f> +<4711> <77be> +<4712> <77cb> +<4713> <7818> +<4714> <781c> +<4715> <7847> +<4716> <7851> +<4717> <7866> +<4718> <8448> +<4719> +<471a> <7933> +<471b> <7932> +endbfchar + +100 beginbfchar +<471c> <4109> +<471d> <7991> +<471e> <7a06> +<471f> <4167> +<4720> <41b2> +<4721> <7abc> +<4722> <8279> +<4723> <41c4> +<4724> <7acf> +<4725> <7adb> +<4726> <41cf> +<4727> <7b62> +<4728> <7b6c> +<4729> <7b7b> +<472a> <7c12> +<472b> <4260> +<472c> <427a> +<472d> <7c7b> +<472e> <7c9c> +<472f> <428c> +<4730> <7cb8> +<4731> <4294> +<4732> <8f93> +<4733> <70c0> +<4734> +<4735> <7dcf> +<4736> <7dd4> +<4737> <7dd0> +<4738> <7dfd> +<4739> <7fb4> +<473a> <729f> +<473b> <4397> +<473c> <8020> +<473d> <8025> +<473e> <802e> +<473f> <8031> +<4740> <8054> +<4741> <57b4> +<4742> <70a0> +<4743> <80b7> +<4744> <80e9> +<4745> <43ed> +<4746> <810c> +<4747> <810e> +<4748> <8112> +<4749> <8114> +<474a> <4401> +<474b> <3b39> +<474c> <8156> +<474f> <4413> +<4750> <817c> +<4751> <4425> +<4752> <442d> +<4753> <81a5> +<4754> <57ef> +<4755> <81c1> +<4756> <81e4> +<4757> <8254> +<4758> <448f> +<4759> <8276> +<475a> <82ca> +<475b> <82d8> +<475c> <44b0> +<475d> <8357> +<475e> <9669> +<475f> <8405> +<4760> <70f5> +<4761> <8464> +<4762> <8488> +<4763> <4504> +<4764> <84be> +<4765> <84e1> +<4766> <84f8> +<4767> <8510> +<4768> <8538> +<4769> <8552> +<476a> <453b> +<476d> <85e0> +<476e> <4577> +<476f> <8672> +<4770> <8692> +<4771> <86ef> +<4772> <9645> +<4773> <4606> +<4774> <4617> +<4775> <88ae> +<4776> <88ff> +<4777> <8924> +<4778> <8991> +<4779> +<477a> <8a38> +<477b> <8a94> +<477c> <8ab4> +<477d> <8c51> +<477e> <8cd4> +<477f> <8cf2> +<4780> <8d1c> +<4781> <4798> +<4782> <8dc3> +<4783> <47ed> +endbfchar + +100 beginbfchar +<4784> <8e3a> +<4785> <5754> +<4786> <55f5> +<4787> <4837> +<4788> <8ece> +<4789> <8ee2> +<478a> <8ee4> +<478b> <8eed> +<478c> <8ef2> +<478d> <8fc1> +<478e> <8fca> +<478f> <8fcc> +<4790> <9033> +<4791> <48ad> +<4792> <98e0> +<4793> <9213> +<4794> <491e> +<4795> <9228> +<4796> <9258> +<4797> <926b> +<4798> <92b1> +<4799> <92ae> +<479a> <92bf> +<479b> <92e3> +<479c> <92eb> +<479f> <92fd> +<47a0> <9343> +<47a1> <9384> +<47a2> <93ad> +<47a3> <4945> +<47a4> <4951> +<47a5> <9417> +<47a6> <941d> +<47a7> <942d> +<47a8> <943e> +<47a9> <496a> +<47aa> <9454> +<47ab> <9479> +<47ac> <952d> +<47ad> <95a2> +<47ae> <49a7> +<47af> <95f4> +<47b0> <9633> +<47b1> <49e5> +<47b2> <4a24> +<47b3> <9740> +<47b4> <4a35> +<47b5> <97b2> +<47b6> <97c2> +<47b7> <4ae4> +<47b8> <98b9> +<47b9> <4b19> +<47ba> <98f1> +<47bb> <5844> +<47bc> <9919> +<47bd> <9937> +<47be> <995d> +<47bf> <9962> +<47c0> <4b70> +<47c1> <99c5> +<47c2> <4b9d> +<47c3> <9a3c> +<47c4> <9b0f> +<47c5> <9b69> +<47c6> <9bdd> +<47c7> <9bf1> +<47c8> <9bf4> +<47c9> <4c6d> +<47ca> <9c20> +<47cb> <376f> +<47cc> +<47cd> <9d49> +<47ce> <9efe> +<47cf> <5650> +<47d0> <9dbd> +<47d1> <9dfc> +<47d2> <94f6> +<47d3> <8fb6> +<47d4> <9eb1> +<47d5> <9ebd> +<47d6> <9ec6> +<47d7> <94dc> +<47d8> <9ee2> +<47d9> <9ef1> +<47da> <9ef8> +<47db> <9f44> +<47dc> +<47dd> +<47de> +<47df> <94c3> +<47e0> +<47e1> <94c1> +<47e2> +<47e3> +<47e4> +<47e5> +<47e6> <5757> +<47e7> <7173> +<47e8> +<47e9> +endbfchar + +100 beginbfchar +<47ea> +<47eb> +<47ec> +<47ed> <549e> +<47ee> +<47ef> +<47f0> +<47f1> +<47f2> +<47f3> +<47f4> +<47f5> +<47f6> +<47f7> +<47f8> +<47f9> +<47fa> +<47fb> +<47fc> +<47fd> +<47fe> +<47ff> +<4800> +<4801> +<4802> +<4803> +<4804> +<4805> +<4806> <3647> +<4807> +<4808> +<4809> +<480a> <5364> +<480b> +<480c> +<480d> +<480e> +<480f> +<4810> +<4811> +<4812> <70bb> +<4813> +<4814> +<4815> +<4816> +<4817> +<4818> +<4819> +<481a> +<481b> +<481c> +<481d> <7198> +<481e> +<481f> <69e9> +<4820> <36c8> +<4821> +<4822> +<4823> +<4824> +<4825> +<4826> +<4827> +<4828> +<4829> +<482a> +<482b> +<482c> +<482d> +<482e> +<482f> +<4830> +<4831> +<4832> +<4833> +<4834> +<4835> +<4836> +<4837> +<4838> +<4839> +<483a> +<483b> +<483c> +<483d> +<483e> +<483f> +<4840> <58b5> +<4841> +<4842> +<4843> +<4844> +<4845> +<4846> +<4847> +<4848> +<4849> +<484a> +<484b> <5788> +<484c> +<484d> +endbfchar + +100 beginbfchar +<484e> +<484f> +<4850> +<4851> +<4852> <5965> +<4853> +<4854> +<4855> <573f> +<4856> +<4857> +<4858> +<4859> +<485a> +<485b> +<485c> +<485d> +<485e> +<485f> +<4860> +<4861> +<4862> +<4863> +<4864> <57a1> +<4865> <7151> +<4866> +<4867> +<4868> +<4869> +<486a> +<486b> +<486c> +<486d> +<486e> +<486f> <56b9> +<4870> +<4871> <3618> +<4872> +<4873> +<4874> +<4875> +<4876> +<4877> +<4878> +<4879> +<487a> +<487b> +<487c> +<487d> +<487e> +<487f> +<4880> +<4881> +<4882> +<4883> +<4884> +<4885> <949f> +<4886> +<4887> <36b9> +<4888> +<4889> +<488a> <56d6> +<488b> +<488c> +<488d> +<488e> +<488f> +<4890> +<4891> +<4892> +<4893> +<4894> +<4895> +<4896> +<4897> +<4898> +<4899> +<489a> +<489b> +<489c> +<489d> +<489e> +<489f> <63e6> +<48a0> +<48a1> +<48a4> +<48a5> +<48a6> +<48a7> +<48a8> +<48a9> +<48aa> +<48ab> <3df7> +<48ac> +<48ad> +<48ae> <8fd0> +<48af> +<48b0> +<48b1> +<48b2> +<48b3> +endbfchar + +100 beginbfchar +<48b4> +<48b5> +<48b6> +<48b7> +<48b8> +<48b9> +<48ba> +<48bb> <7e9f> +<48bc> +<48bd> +<48be> <4ca4> +<48bf> <9547> +<48c0> +<48c1> <71a2> +<48c2> +<48c3> +<48c4> <4d9c> +<48c5> +<48c6> <8fbe> +<48c7> <8fba> +<48c8> +<48c9> <8fb9> +<48ca> +<48cb> <4eea> +<48cc> +<48cd> <8e80> +<48ce> +<48cf> +<48d0> +<48d1> +<48d2> +<48d3> +<48d4> +<48d5> <4e9a> +<48d6> +<48d7> +<48d8> +<48d9> +<48da> +<48db> +<48dc> +<48dd> +<48de> <3dc6> +<48df> +<48e0> <4e1c> +<48e1> +<48e2> +<48e3> +<48e4> +<48e5> <55de> +<48e6> <8786> +<48e7> +<48e8> +<48e9> <5b90> +<48ea> +<48eb> +<48ec> +<48ed> +<48ee> +<48ef> +<48f0> +<48f1> +<48f2> +<48f3> +<48f4> +<48f5> +<48f6> +<48f7> +<48f8> +<48f9> +<48fa> +<48fb> +<48fc> +<48fd> <4e1a> +<48fe> <4e04> +<48ff> <5b0d> +<4900> <36ac> +<4901> <537d> +<4902> <36a5> +<4903> <589a> +<4904> +<4905> <57aa> +<4906> +<4907> +<4908> +<4909> +<490a> +<490b> +<490c> +<490d> +<490e> +<490f> +<4910> +<4911> +<4912> +<4913> +<4914> <57a7> +<4915> +<4916> +<4917> +endbfchar + +100 beginbfchar +<4918> +<4919> +<491a> +<491b> <9c1b> +<491c> +<491d> <3e06> +<491e> +<491f> +<4920> +<4921> +<4922> <577a> +<4923> <54da> +<4924> <717a> +<4925> +<4926> +<4927> +<4928> +<4929> +<492a> +<492b> +<492c> +<492d> +<492e> <3635> +<492f> +<4930> <5220> +<4931> <3c18> +<4932> +<4933> +<4934> +<4935> +<4936> +<4937> +<4938> +<4939> +<493a> +<493b> +<493c> +<493d> +<493e> +<493f> +<4940> <4562> +<4941> <5b1f> +<4942> +<4943> <9f50> +<4944> <9ea6> +<4945> +<4946> <51e2> +<4947> <5342> +<4948> <66ad> +<4949> <585c> +<494a> <5553> +<494b> <3d85> +<494c> <6160> +<494d> <48ae> +<494e> <97bd> +<494f> +<4950> <60b3> +<4951> <8424> +<4952> <9814> +<4953> +<4954> +<4955> +<4956> <3b2b> +<4957> <3d32> +<4958> +<4959> <7081> +<495a> <5c9c> +<495b> +<495c> <3730> +<495d> +<495e> +<495f> +<4960> +<4961> <0100> +<4962> <00c1> +<4963> <01cd> +<4964> <00c0> +<4965> <0112> +<4966> <00c9> +<4967> <011a> +<4968> <00c8> +<4969> <014c> +<496a> <00d3> +<496b> <01d1> +<496c> <00d2> +<496d> +<496e> <1ebe> +<496f> +<4970> <1ec0> +<4971> <00ca> +<4972> <0101> +<4973> <00e1> +<4974> <01ce> +<4975> <00e0> +<4976> <0251> +<4977> <0113> +<4978> <00e9> +<4979> <011b> +<497a> <00e8> +<497b> <012b> +endbfchar + +100 beginbfchar +<497c> <00ed> +<497d> <01d0> +<497e> <00ec> +<497f> <014d> +<4980> <00f3> +<4981> <01d2> +<4982> <00f2> +<4983> <016b> +<4984> <00fa> +<4985> <01d4> +<4986> <00f9> +<4987> <01d6> +<4988> <01d8> +<4989> <01da> +<498a> <01dc> +<498b> <00fc> +<498c> +<498d> <1ebf> +<498e> +<498f> <1ec1> +<4990> <00ea> +<4991> <0261> +<4992> <0283> +<4993> <0250> +<4994> <025b> +<4995> <0254> +<4996> <0275> +<4997> <0153> +<4998> <00f8> +<4999> <014b> +<499a> <028a> +<499b> <026a> +<499e> <2e9d> +<499f> <2ec6> +<49a0> <2ee3> +<49a1> <503b> +<49a2> <6dfe> +<49a3> +<49a4> <9fa6> +<49a5> <3dc9> +<49a6> <888f> +<49a7> +<49a8> <7077> +<49a9> <5cf5> +<49aa> <4b20> +<49ab> +<49ac> <3559> +<49ad> +<49ae> <6122> +<49af> +<49b0> <8fa7> +<49b1> <91f6> +<49b2> <7191> +<49b3> <6719> +<49b4> <73ba> +<49b5> +<49b6> +<49b7> <3c8b> +<49b8> +<49b9> <4b10> +<49ba> <78e4> +<49bb> <7402> +<49bc> <51ae> +<49bd> +<49be> <4009> +<49bf> <6a63> +<49c0> +<49c1> <4223> +<49c2> <860f> +<49c3> <7a2a> +<49c4> +<49c5> +<49c6> <9755> +<49c7> <704d> +<49c8> <5324> +<49c9> +<49ca> <93f4> +<49cb> <76d9> +<49cc> +<49cd> <9fa7> +<49ce> <77dd> +<49cf> <4ea3> +<49d0> <4ff0> +<49d1> <50bc> +<49d2> <4e2f> +<49d3> <4f17> +<49d4> <9fa8> +<49d5> <5434> +<49d6> <7d8b> +<49d7> <5892> +<49d8> <58d0> +<49d9> +<49da> <5e92> +<49db> <5e99> +<49dc> <5fc2> +<49dd> +<49de> <658b> +<49df> +<49e0> <6919> +<49e1> <6a43> +endbfchar + +100 beginbfchar +<49e2> +<49e3> <6cff> +<49e4> <7200> +<49e5> +<49e6> <738c> +<49e7> <3edb> +<49e8> +<49e9> <5b15> +<49ea> <74b9> +<49eb> <8b83> +<49ec> +<49ed> +<49ee> <7a93> +<49ef> <7bec> +<49f0> <7cc3> +<49f1> <7e6c> +<49f2> <82f8> +<49f3> <8597> +<49f4> <9fa9> +<49f5> <8890> +<49f6> <9faa> +<49f7> <8eb9> +<49f8> <9fab> +<49f9> <8fcf> +<49fa> <855f> +<49fb> <99e0> +<49fc> <9221> +<49fd> <9fac> +<49fe> +<49ff> +<4a00> <4071> +<4a01> <42a2> +<4a02> <5a1a> +<4a03> <9868> +<4a04> <676b> +<4a05> <4276> +<4a06> <573d> +<4a07> <85d6> +<4a08> +<4a09> <82bf> +<4a0a> +<4a0b> <4c81> +<4a0c> +<4a0d> <5d7b> +<4a0e> +<4a0f> +<4a12> <5b96> +<4a13> <9faf> +<4a14> <7e5b> +<4a15> <43f0> +<4a16> <4c32> +<4a17> <4603> +<4a18> <45a6> +<4a19> <4578> +<4a1a> +<4a1b> <4d77> +<4a1c> <45b3> +<4a1d> +<4a1e> <4ce2> +<4a1f> +<4a20> <3b95> +<4a21> <4736> +<4a22> <4744> +<4a23> <4c47> +<4a24> <4c40> +<4a25> +<4a26> +<4a27> +<4a28> +<4a29> +<4a2a> <4c57> +<4a2b> +<4a2c> <474f> +<4a2d> <45da> +<4a2e> <4c85> +<4a2f> +<4a30> <4d07> +<4a31> <4aa4> +<4a32> <46a1> +<4a33> +<4a34> <7225> +<4a35> +<4a36> +<4a37> +<4a38> +<4a39> <664d> +<4a3a> <56fb> +<4a3b> <7d95> +<4a3c> <591d> +<4a3d> +<4a3e> <3df4> +<4a3f> <9734> +<4a40> +<4a41> <5bdb> +<4a42> +<4a43> <5aa4> +<4a44> <3625> +<4a45> +<4a46> <5ad1> +<4a47> <5bb7> +endbfchar + +72 beginbfchar +<4a48> <5cfc> +<4a49> <676e> +<4a4a> <8593> +<4a4b> +<4a4c> <7461> +<4a4d> <749d> +<4a4e> +<4a4f> <66e7> +<4a50> <6e57> +<4a51> <79ca> +<4a52> <3d88> +<4a53> <44c3> +<4a54> +<4a55> +<4a56> <439a> +<4a57> <4536> +<4a58> <5cd5> +<4a59> +<4a5a> <8af9> +<4a5b> <5c78> +<4a5c> <3d12> +<4a5d> +<4a5e> <5d78> +<4a5f> <9fb2> +<4a60> <7157> +<4a61> <4558> +<4a62> +<4a63> +<4a64> <4c77> +<4a65> <3978> +<4a66> <344a> +<4a67> +<4a68> +<4a69> <8acc> +<4a6a> <4fb4> +<4a6b> +<4a6c> <59bf> +<4a6d> <816c> +<4a6e> <9856> +<4a6f> +<4a70> <5f3b> +<4a71> +<4a72> +<4a73> +<4a74> <4102> +<4a75> <46bb> +<4a76> +<4a77> <3f07> +<4a78> <9fb3> +<4a79> +<4a7a> <40f8> +<4a7b> <37d6> +<4a7c> <46f7> +<4a7d> +<4a7e> <417c> +<4a7f> +<4a80> +<4a81> <456d> +<4a82> <38d4> +<4a83> +<4a84> <4561> +<4a85> <451b> +<4a86> <4d89> +<4a87> <4c7b> +<4a88> <4d76> +<4a89> <45ea> +<4a8a> <3fc8> +<4a8b> +<4a8c> <3661> +<4a8d> <44de> +<4a8e> <44bd> +<4a8f> <41ed> +endbfchar + +100 beginbfrange +<0001> <005f> <0020> +<0065> <0066> <3001> +<0070> <0072> +<0074> <0077> +<0080> <0081> +<0082> <0083> +<0086> <0087> +<0088> <0089> <3014> +<008a> <008b> +<008c> <008d> <3010> +<008e> <008f> +<0090> <0091> <300a> +<0092> <0093> +<0094> <0095> <3008> +<0096> <0097> +<0098> <0099> <300c> +<009a> <009b> +<009c> <009d> <300e> +<009e> <009f> +<00a0> <00a5> +<00a6> <00a7> <2018> +<00a8> <00a9> <201c> +<00aa> <00ab> <301d> +<00c7> <00c8> +<00c9> <00ca> +<00cb> <00cc> +<00cd> <00cf> +<00d9> <00da> <2266> +<00df> <00e3> +<00e5> <00e6> <2229> +<00f9> <00fa> <2196> +<0106> <0107> <00a2> +<010c> <010e> +<0110> <0112> <339c> +<0115> <0116> <338e> +<0122> <0129> <2581> +<013e> <013f> <256d> +<0146> <0147> <25e2> +<014a> <014c> <2571> +<014d> <0156> +<0157> <0160> <2160> +<0161> <0169> <3021> +<016d> <0186> +<0187> <01a0> +<01a1> <01b1> <0391> +<01b2> <01b8> <03a3> +<01b9> <01c9> <03b1> +<01ca> <01d0> <03c3> +<01d1> <01f5> <3105> +<01fa> <01ff> <2460> +<0200> <0203> <2466> +<0204> <020d> <2474> +<020e> <0217> <2170> +<0232> <0251> <2400> +<0260> <0261> <5200> +<027f> <0280> <5b50> +<0289> <028b> <5df1> +<02a3> <02a4> <4ec6> +<02a6> <02a7> <4eca> +<02ac> <02ad> <516d> +<02b1> <02b3> <5206> +<02b5> <02b6> <52fe> +<02ce> <02cf> <5f14> +<02fa> <02fd> <4ed4> +<02fe> <02ff> <4ee3> +<0304> <0305> <5189> +<0307> <0308> <51f9> +<030d> <030e> <5305> +<0339> <033a> <5e02> +<0342> <0343> <6253> +<034a> <034b> <672a> +<035c> <035d> <7528> +<035e> <0361> <7530> +<036e> <036f> <4e1e> +<0370> <0371> <4e52> +<037d> <037e> <4f10> +<0391> <0392> <5211> +<0399> <039a> <5370> +<03b4> <03b5> <5919> +<03b6> <03b7> <5937> +<03bf> <03c0> <5b57> +<03c1> <03c2> <5b87> +<03d1> <03d2> <620c> +<03da> <03db> <65ec> +<03dc> <03dd> <66f2> +<03ea> <03eb> <6c5f> +<03f0> <03f1> <6c4d> +<0403> <0404> <808b> +<0420> <0421> <4f50> +<0437> <0438> <51b6> +<043b> <043c> <5229> +<043f> <0440> <52a9> +<0458> <0459> <5435> +<047f> <0480> <5b5a> +<0485> <0486> <5c40> +<0489> <048a> <5c90> +<04bd> <04c0> <674e> +<04cf> <04d0> <6c88> +<04e7> <04e8> <707c> +<04f2> <04f3> <7537> +endbfrange + +100 beginbfrange +<052e> <052f> <4eab> +<055c> <055e> <5377> +<0583> <0584> <5947> +<05a2> <05a3> <5c45> +<05b5> <05b6> <5e95> +<05b8> <05b9> <5f26> +<05bb> <05bc> <5f80> +<05df> <05e0> <62d3> +<05ee> <05ef> <62d6> +<060e> <060f> <676f> +<061b> <061c> <6b66> +<0627> <0628> <6cbd> +<0645> <0646> <722c> +<0657> <0658> <7599> +<0660> <0661> <7940> +<06a4> <06a5> <4ead> +<0707> <0708> <5c4e> +<071a> <071b> <5f8a> +<077b> <077c> <6d3d> +<0796> <0797> <72e0> +<07a6> <07a7> <75a4> +<07a8> <07a9> <75a2> +<07ab> <07ad> <7686> +<07bd> <07be> <780c> +<07c3> <07c4> <79b9> +<07c5> <07c6> <79d1> +<07de> <07df> <80c3> +<0808> <0809> <8a02> +<0823> <0825> <964b> +<0833> <0834> <500c> +<0853> <0854> <51a4> +<0879> <087a> <5703> +<0881> <0882> <5957> +<08d1> <08d2> <632a> +<08d6> <08d7> <6548> +<08e4> <08e5> <6714> +<0903> <0904> <6c27> +<0939> <093a> <75b2> +<0943> <0944> <76cd> +<0946> <0947> <771f> +<0998> <0999> <822a> +<09ba> <09bb> <8881> +<09cc> <09cd> <8ca1> +<09eb> <09ec> <9662> +<0a1b> <0a1c> <533f> +<0a5c> <0a5d> <5c5c> +<0a70> <0a71> <5eb7> +<0a97> <0a98> <621a> +<0ac5> <0ac6> <65cb> +<0ae9> <0aea> <6beb> +<0b13> <0b14> <7109> +<0b27> <0b28> <74f6> +<0b2b> <0b2c> <7565> +<0b30> <0b31> <75d4> +<0b84> <0b85> <837b> +<0bd7> <0bd8> <9676> +<0bdf> <0be0> <9802> +<0bf3> <0bf4> <5274> +<0c1b> <0c1c> <5830> +<0c20> <0c21> <58f9> +<0c2f> <0c30> <5c0a> +<0c3d> <0c3e> <5ec1> +<0c42> <0c43> <5fa9> +<0c67> <0c68> <63ed> +<0c72> <0c73> <6562> +<0c80> <0c81> <66fe> +<0ca2> <0ca3> <6c2e> +<0cc8> <0cc9> <7119> +<0cdc> <0cdd> <7435> +<0ce3> <0ce4> <7525> +<0cee> <0cef> <767b> +<0d1c> <0d1d> <7fd4> +<0d52> <0d53> <88c1> +<0d8f> <0d90> <9214> +<0da3> <0da4> <9685> +<0dab> <0dac> <96c6> +<0db0> <0db1> <9805> +<0dc1> <0dc2> <50b2> +<0dd0> <0dd1> <52e2> +<0ddb> <0ddc> <55e3> +<0de0> <0de1> <55c5> +<0de4> <0de5> <5712> +<0e1a> <0e1b> <6221> +<0e28> <0e29> <6416> +<0e30> <0e31> <6687> +<0e83> <0e84> <745b> +<0e90> <0e91> <76de> +<0ea1> <0ea2> <7897> +<0eb4> <0eb5> <7a9f> +<0ec5> <0ec6> <7f69> +<0ed6> <0ed7> <8179> +<0ef6> <0ef7> <8702> +<0f08> <0f09> <8a72> +<0f1f> <0f20> <8cc7> +<0f5e> <0f5f> <9694> +<0f62> <0f63> <96c9> +<0f6b> <0f6c> <9810> +<0f73> <0f74> <98fd> +<0f98> <0f99> <560d> +<0fbb> <0fbc> <5be5> +endbfrange + +100 beginbfrange +<0fd4> <0fd5> <6162> +<1044> <1045> <798e> +<1059> <105a> <7cbd> +<105e> <105f> <7dbd> +<106f> <1070> <7fe0> +<10b8> <10b9> <8cd1> +<10e0> <10e1> <95a8> +<10ee> <10ef> <9817> +<10f7> <10f8> <9aaf> +<10fa> <10fb> <9b41> +<1108> <1109> <5108> +<110c> <110e> <5287> +<111f> <1120> <562f> +<1134> <1135> <5c64> +<116f> <1170> <6577> +<1187> <1188> <6bc5> +<11b1> <11b2> <7621> +<11cf> <11d0> <7bc6> +<11ea> <11ec> <819b> +<11f4> <11f5> <852c> +<120e> <120f> <8912> +<122a> <122b> <8cec> +<122c> <122d> <8ce2> +<1263> <1264> <9706> +<127b> <127c> <9aee> +<12bb> <12bc> <64bb> +<12f7> <12f8> <71c3> +<1300> <1301> <750c> +<1308> <1309> <779e> +<1310> <1311> <7a4d> +<131e> <131f> <7cd5> +<132b> <132c> <7ff0> +<1334> <1335> <8258> +<1339> <133a> <8568> +<1356> <1357> <8b01> +<1386> <1387> <96a7> +<1390> <1391> <975b> +<13e1> <13e2> <6582> +<13f6> <13f7> <6fdf> +<1449> <144a> <8071> +<1495> <1496> <9081> +<14aa> <14ac> <95ca> +<14c4> <14c5> <9edc> +<14d6> <14d7> <64fa> +<14e2> <14e3> <6aae> +<14ee> <14ef> <71fb> +<14fc> <14fd> <77bb> +<1500> <1501> <7a61> +<1503> <1504> <7ac4> +<150c> <150d> <7e54> +<153c> <153d> <91ab> +<155e> <155f> <993e> +<1578> <1579> <58de> +<15a3> <15a4> <7c3e> +<15ac> <15ad> <7e69> +<15b8> <15b9> <85e4> +<15c9> <15ca> <8b4e> +<15d9> <15da> <908a> +<15e2> <15e3> <93dc> +<162d> <162e> <7cef> +<163f> <1640> <8814> +<1668> <1669> <5137> +<16a1> <16a2> <9738> +<16b9> <16ba> <9f66> +<16d9> <16da> <8d16> +<16e0> <16e1> <9451> +<16e2> <16e3> <973d> +<1713> <1714> <9a5a> +<1716> <1717> <9ad3> +<1723> <1724> <7671> +<173b> <173c> <9df9> +<173d> <173e> <9e7c> +<175d> <175e> <947d> +<1760> <1761> <9c77> +<179a> <179b> <5722> +<17e0> <17e1> <5c7a> +<1808> <1809> <6c4b> +<180c> <180d> <72b4> +<181b> <181c> <9097> +<1838> <1839> <52ad> +<183d> <183e> <538e> +<1890> <1891> <628e> +<18ae> <18af> <6c19> +<18cf> <18d0> <7393> +<18d4> <18d5> <7594> +<18e5> <18e6> <8283> +<1914> <1915> <5232> +<1919> <191a> <530a> +<193f> <1940> <5773> +<1973> <1975> <5f22> +<19c6> <19c7> <6778> +<1a0f> <1a10> <753f> +<1a46> <1a47> <866d> +<1a82> <1a83> <54c5> +<1a8d> <1a8e> <579e> +<1ac1> <1ac2> <5cd3> +<1aca> <1acc> <5e21> +<1aec> <1aed> <6242> +<1afb> <1afc> <6313> +<1b13> <1b14> <670f> +endbfrange + +100 beginbfrange +<1b38> <1b39> <67c9> +<1b44> <1b45> <6c20> +<1b6b> <1b6c> <70b4> +<1b6f> <1b70> <7249> +<1b91> <1b92> <7547> +<1b98> <1b9a> <7703> +<1b9f> <1ba0> <77e7> +<1ba2> <1ba3> <7811> +<1bb8> <1bb9> <7b00> +<1bbb> <1bbc> <7c78> +<1bbd> <1bbf> <7c7f> +<1bc8> <1bc9> <800e> +<1c28> <1c29> <4ff6> +<1c36> <1c37> <51c4> +<1c3d> <1c3e> <525e> +<1c55> <1c56> <54f7> +<1c5b> <1c5c> <5701> +<1c70> <1c71> <5a2d> +<1ca6> <1ca7> <6344> +<1cc1> <1cc2> <65c3> +<1cc8> <1cc9> <6712> +<1ccd> <1cce> <6832> +<1cf6> <1cf7> <6d63> +<1d27> <1d29> <70c5> +<1d47> <1d48> <73d7> +<1d4a> <1d4b> <74de> +<1d4c> <1d4d> <74f4> +<1d63> <1d64> <7719> +<1d7b> <1d7c> <79eb> +<1d87> <1d88> <7a8b> +<1dfa> <1dfb> <8843> +<1dfd> <1dfe> <8875> +<1e1f> <1e20> <90d9> +<1e2a> <1e2b> <914e> +<1e4a> <1e4b> <5063> +<1e5b> <1e5c> <5575> +<1ed1> <1ed2> <5eb2> +<1ede> <1edf> <60d3> +<1f19> <1f1a> <686d> +<1f3d> <1f3e> <6b37> +<1f41> <1f42> <6b8d> +<1f57> <1f58> <6ddc> +<1f81> <1f82> <727b> +<1fa3> <1fa4> <75cb> +<1fad> <1fae> <7731> +<1fc0> <1fc1> <7969> +<1fc8> <1fc9> <79f6> +<1fee> <1fef> <7d3e> +<1ff5> <1ff6> <7f9c> +<1ff8> <1ff9> <7fca> +<1ffb> <1ffc> <7fd0> +<204a> <204b> <86bb> +<204d> <204e> <86bd> +<206d> <206e> <8c5c> +<207e> <207f> <8ee0> +<208a> <208b> <90f2> +<208d> <208e> <90eb> +<209c> <209d> <91ea> +<2174> <2175> <659d> +<21a7> <21a8> <68dd> +<21bc> <21bd> <6bf2> +<21c0> <21c1> <6e46> +<21c5> <21c6> <6e3c> +<21ec> <21ed> <6e35> +<222f> <2230> <7746> +<2236> <2237> <774b> +<223b> <223c> <7864> +<2271> <2272> <7f3e> +<2273> <2274> <7f65> +<2276> <2277> <7fa0> +<227a> <227b> <804f> +<2288> <228a> <81f7> +<228c> <228d> <823c> +<22e7> <22e8> <89da> +<22ee> <22ef> <8a57> +<22f0> <22f1> <8a44> +<2317> <2318> <8ee7> +<2350> <2351> <9688> +<2361> <2362> <4e83> +<2378> <2379> <527b> +<23b8> <23b9> <5bd8> +<23d5> <23d6> <6149> +<23f5> <23f6> <6422> +<2424> <2425> <6948> +<2449> <244a> <6bfb> +<244c> <244d> <6bf7> +<2454> <2455> <6e93> +<249b> <249c> <744a> +<24a1> <24a2> <744f> +<24c2> <24c3> <775f> +<24d3> <24d4> <7885> +<24e1> <24e2> <7a18> +<2511> <2512> <7f67> +<2517> <2518> <7fdb> +<2579> <257a> <88cd> +<259e> <259f> <8c84> +<25a1> <25a2> <8d68> +<25a5> <25a6> <8d8e> +<25a8> <25a9> <8d93> +<25be> <25bf> <8f07> +endbfrange + +100 beginbfrange +<25cf> <25d0> <916e> +<25f4> <25f5> <9692> +<25fe> <25ff> <9777> +<2602> <2603> <980d> +<2623> <2624> <5280> +<2672> <2673> <5e58> +<2688> <2689> <6152> +<269f> <26a0> <6472> +<26e5> <26e7> <6b9e> +<26e8> <26e9> <6bc3> +<26f6> <26f7> <6f19> +<2733> <2734> <7502> +<2756> <2757> <798a> +<2767> <2768> <7aab> +<278a> <278b> <7dcb> +<2797> <2798> <7fe2> +<27e8> <27e9> <8726> +<27f1> <27f2> <88f1> +<280a> <280b> <8c68> +<281d> <281e> <8f10> +<2863> <2864> <98ad> +<2874> <2875> <9b3e> +<2876> <2877> <9b60> +<2879> <287a> <9cf1> +<2881> <2882> <5106> +<2885> <2886> <510b> +<2889> <288a> <528b> +<28f5> <28f6> <65b2> +<296a> <296c> <735e> +<2974> <2975> <7489> +<2989> <298b> <769c> +<2999> <299a> <78c3> +<2a03> <2a04> <84e7> +<2a10> <2a11> <8763> +<2a34> <2a36> <8917> +<2a47> <2a48> <8ad4> +<2a6b> <2a6c> <8e26> +<2a7a> <2a7b> <8f16> +<2a83> <2a84> <9129> +<2a88> <2a89> <9185> +<2a8b> <2a8c> <9181> +<2a90> <2a91> <92c3> +<2acf> <2ad0> <9916> +<2ad5> <2ad6> <99d3> +<2afe> <2aff> <9f0f> +<2b36> <2b37> <5e67> +<2b60> <2b61> <66ca> +<2b85> <2b86> <6a4d> +<2b8c> <2b8d> <6baa> +<2bb5> <2bb6> <71c0> +<2bc0> <2bc1> <71da> +<2bc2> <2bc3> <729d> +<2bc5> <2bc6> <7366> +<2be4> <2be5> <77a2> +<2bf0> <2bf1> <78e1> +<2bf3> <2bf4> <78df> +<2c11> <2c12> <7cd0> +<2c17> <2c18> <7e1f> +<2c27> <2c28> <7f7b> +<2c3c> <2c3e> <8255> +<2c6f> <2c70> <8790> +<2c7a> <2c7b> <892d> +<2c88> <2c89> <8af4> +<2c96> <2c97> <8c91> +<2ca8> <2ca9> <8e3c> +<2cbb> <2cbc> <9135> +<2cbe> <2cbf> <9190> +<2cec> <2ced> <95b9> +<2d31> <2d32> <9e86> +<2d35> <2d36> <9ed5> +<2d42> <2d43> <568c> +<2d59> <2d5a> <5bf1> +<2da3> <2da4> <736e> +<2dae> <2db0> <7510> +<2db4> <2db5> <7648> +<2dc5> <2dc6> <78fb> +<2dd6> <2dd7> <7ac0> +<2de9> <2dea> <7bf0> +<2e59> <2e5a> <89f2> +<2e93> <2e94> <9350> +<2ec5> <2ec6> <992b> +<2ed9> <2eda> <99fd> +<2ef3> <2ef4> <9d2e> +<2ef9> <2efa> <9d42> +<2f0f> <2f10> <512d> +<2f19> <2f1a> <5c69> +<2f1c> <2f1d> <5e6d> +<2f20> <2f21> <61ed> +<2f31> <2f32> <66da> +<2f3a> <2f3b> <6ab6> +<2f43> <2f44> <700c> +<2f49> <2f4a> <6fff> +<2f6d> <2f6e> <7913> +<2f8f> <2f90> <7ff7> +<2f92> <2f93> <81d1> +<2fc9> <2fca> <8950> +<2ff7> <2ff9> <8f46> +<2ffc> <2ffd> <913a> +<301d> <301e> <95d2> +<3037> <3039> <9850> +endbfrange + +100 beginbfrange +<304b> <304c> <9b04> +<307a> <307b> <5134> +<3081> <3082> <56a6> +<3089> <308b> <5b3d> +<30af> <30b1> <7021> +<30bb> <30bc> <72a5> +<30c6> <30c7> <77c9> +<30d1> <30d2> <7a67> +<30e9> <30ea> <7ffd> +<310a> <310b> <87f6> +<3116> <3117> <895a> +<3133> <3134> <8d06> +<3143> <3144> <8f4f> +<3163> <3164> <95da> +<3167> <3168> <972b> +<316e> <3170> <97dd> +<317c> <317d> <99a6> +<3191> <3192> <9bea> +<31ab> <31ac> <9d8b> +<31af> <31b0> <9d74> +<31c1> <31c2> <9f40> +<31c4> <31c6> <9f56> +<31cd> <31ce> <5dc6> +<31cf> <31d0> <5eee> +<31d1> <31d2> <5fc0> +<31da> <31db> <66e3> +<31e2> <31e3> <6aee> +<31f4> <31f5> <7213> +<3205> <3206> <7927> +<320b> <320c> <7a6c> +<321d> <321e> <8268> +<322c> <322d> <8810> +<3242> <3243> <8f56> +<324c> <324d> <91b2> +<326f> <3270> <972e> +<3273> <3274> <97fd> +<3276> <3277> <9862> +<3279> <327a> <98c1> +<32b4> <32b5> <9da6> +<32ca> <32cb> <56bd> +<32d8> <32d9> <7043> +<32db> <32dc> <7048> +<32dd> <32de> <7045> +<32ed> <32ee> <7e87> +<3314> <3315> <8b7a> +<331f> <3320> <9144> +<3345> <3346> <9b17> +<334f> <3350> <9c28> +<3360> <3361> <9db9> +<337c> <337d> <5b4b> +<3386> <3387> <6b08> +<3389> <338b> <7055> +<338d> <338e> <721e> +<3399> <339a> <7a70> +<33a7> <33a8> <8634> +<33c2> <33c3> <8e96> +<33c9> <33ca> <944a> +<33ce> <33cf> <9448> +<33d9> <33da> <9a53> +<3418> <3419> <6203> +<341e> <341f> <6b11> +<344c> <344d> <97c4> +<3451> <3453> <9b1e> +<3473> <3474> <9ef2> +<347e> <347f> <9f6e> +<3485> <3486> <66ed> +<349c> <349d> <8b94> +<349e> <34a0> <8e9e> +<34a6> <34a7> <9468> +<34bd> <34be> <9e00> +<34c6> <34c8> <9f74> +<34cc> <34cd> <6b18> +<34d3> <34d4> <77d8> +<34dd> <34de> <81e0> +<34df> <34e1> <8646> +<34e2> <34e3> <8979> +<34e7> <34e8> <8b98> +<3527> <3528> <9873> +<352d> <352e> <9a66> +<3539> <353a> <9480> +<3547> <3548> <7069> +<3550> <35ae> <0020> +<35b5> <35b6> <30fd> +<35b7> <35b8> <309d> +<35ba> <35bc> <3005> +<35c1> <35ff> <3041> +<3600> <3613> <3080> +<3614> <3669> <30a1> +<366a> <366f> <0410> +<3671> <3690> <0416> +<3692> <36ab> <0436> +<36ad> <36ae> <21b8> +<3713> <3715> +<373b> <373c> <7ac2> +<3780> <3781> <7f40> +<3797> <3798> <803b> +<3816> <3817> <8845> +<381e> <381f> <88b4> +<3a32> <3a33> +<3b02> <3b03> <770e> +endbfrange + +30 beginbfrange +<3d6b> <3d6c> <8fbb> +<41b2> <41b3> +<41b5> <41b6> +<4250> <4251> +<4259> <425a> <70d5> +<4400> <445e> <0020> +<4462> <44c0> <0020> +<44c6> <44c7> <309b> +<44c9> <44cd> <31c0> +<44d2> <44d3> <31c6> +<44d8> <44db> <31c9> +<44dd> <44de> <31cd> +<44df> <44e0> +<451d> <451f> <2e86> +<4521> <4522> <2e8c> +<452e> <452f> <2ecc> +<4531> <4532> <2ed6> +<454f> <4550> <5b9e> +<4569> <456a> <8f66> +<45dc> <45dd> +<4604> <4605> +<4606> <4607> +<4681> <4682> <6ee8> +<46f4> <46f5> <741e> +<474d> <474e> <8159> +<476b> <476c> <856f> +<479d> <479e> <92f3> +<48a2> <48a3> +<499c> <499d> <23da> +<4a10> <4a11> <9fad> +endbfrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-0 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-0 new file mode 100644 index 00000000000..0887d4d2e6b --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-0 @@ -0,0 +1,111 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe GB1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 0 def +end def + +/CMapName /Adobe-GB1-0 def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 330 def +/XUID [1 10 25368] def + +/WMode 0 def + +/CIDCount 7717 def + +1 begincodespacerange + <0000> <1EFF> +endcodespacerange + +31 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1e24> 7680 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-1 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-1 new file mode 100644 index 00000000000..4888c5a98f9 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-1 @@ -0,0 +1,119 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe GB1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 1 def +end def + +/CMapName /Adobe-GB1-1 def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 710 def +/XUID [1 10 25453] def + +/WMode 0 def + +/CIDCount 9897 def + +1 begincodespacerange + <0000> <26FF> +endcodespacerange + +39 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26a8> 9728 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-2 new file mode 100644 index 00000000000..256066bc98b --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-2 @@ -0,0 +1,167 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe GB1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 2 def +end def + +/CMapName /Adobe-GB1-2 def +/CMapVersion 11.003 def +/CMapType 1 def + +/UIDOffset 750 def +/XUID [1 10 25454] def + +/WMode 0 def + +/CIDCount 22127 def + +1 begincodespacerange + <0000> <56FF> +endcodespacerange + +87 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4aff> 18944 +<4b00> <4bff> 19200 +<4c00> <4cff> 19456 +<4d00> <4dff> 19712 +<4e00> <4eff> 19968 +<4f00> <4fff> 20224 +<5000> <50ff> 20480 +<5100> <51ff> 20736 +<5200> <52ff> 20992 +<5300> <53ff> 21248 +<5400> <54ff> 21504 +<5500> <55ff> 21760 +<5600> <566e> 22016 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-3 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-3 new file mode 100644 index 00000000000..548f799026d --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-3 @@ -0,0 +1,167 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe GB1 3) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 3 def +end def + +/CMapName /Adobe-GB1-3 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25457] def + +/WMode 0 def + +/CIDCount 22353 def + +1 begincodespacerange + <0000> <57FF> +endcodespacerange + +88 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4aff> 18944 +<4b00> <4bff> 19200 +<4c00> <4cff> 19456 +<4d00> <4dff> 19712 +<4e00> <4eff> 19968 +<4f00> <4fff> 20224 +<5000> <50ff> 20480 +<5100> <51ff> 20736 +<5200> <52ff> 20992 +<5300> <53ff> 21248 +<5400> <54ff> 21504 +<5500> <55ff> 21760 +<5600> <56ff> 22016 +<5700> <5750> 22272 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-4 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-4 new file mode 100644 index 00000000000..525a71dda57 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-4 @@ -0,0 +1,197 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe GB1 4) +%%Version: 1.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 4 def +end def + +/CMapName /Adobe-GB1-4 def +/CMapVersion 1.003 def +/CMapType 1 def + +/XUID [1 10 25458] def + +/WMode 0 def + +/CIDCount 29064 def + +1 begincodespacerange + <0000> <71FF> +endcodespacerange + +100 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4aff> 18944 +<4b00> <4bff> 19200 +<4c00> <4cff> 19456 +<4d00> <4dff> 19712 +<4e00> <4eff> 19968 +<4f00> <4fff> 20224 +<5000> <50ff> 20480 +<5100> <51ff> 20736 +<5200> <52ff> 20992 +<5300> <53ff> 21248 +<5400> <54ff> 21504 +<5500> <55ff> 21760 +<5600> <56ff> 22016 +<5700> <57ff> 22272 +<5800> <58ff> 22528 +<5900> <59ff> 22784 +<5a00> <5aff> 23040 +<5b00> <5bff> 23296 +<5c00> <5cff> 23552 +<5d00> <5dff> 23808 +<5e00> <5eff> 24064 +<5f00> <5fff> 24320 +<6000> <60ff> 24576 +<6100> <61ff> 24832 +<6200> <62ff> 25088 +<6300> <63ff> 25344 +endcidrange + +14 begincidrange +<6400> <64ff> 25600 +<6500> <65ff> 25856 +<6600> <66ff> 26112 +<6700> <67ff> 26368 +<6800> <68ff> 26624 +<6900> <69ff> 26880 +<6a00> <6aff> 27136 +<6b00> <6bff> 27392 +<6c00> <6cff> 27648 +<6d00> <6dff> 27904 +<6e00> <6eff> 28160 +<6f00> <6fff> 28416 +<7000> <70ff> 28672 +<7100> <7187> 28928 +endcidrange +endcmap + +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-5 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-5 new file mode 100644 index 00000000000..bfa909d9bd8 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-5 @@ -0,0 +1,202 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe GB1 5) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 5 def +end def + +/CMapName /Adobe-GB1-5 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25605] def + +/WMode 0 def + +/CIDCount 30284 def + +1 begincodespacerange + <0000> <76FF> +endcodespacerange + +100 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4aff> 18944 +<4b00> <4bff> 19200 +<4c00> <4cff> 19456 +<4d00> <4dff> 19712 +<4e00> <4eff> 19968 +<4f00> <4fff> 20224 +<5000> <50ff> 20480 +<5100> <51ff> 20736 +<5200> <52ff> 20992 +<5300> <53ff> 21248 +<5400> <54ff> 21504 +<5500> <55ff> 21760 +<5600> <56ff> 22016 +<5700> <57ff> 22272 +<5800> <58ff> 22528 +<5900> <59ff> 22784 +<5a00> <5aff> 23040 +<5b00> <5bff> 23296 +<5c00> <5cff> 23552 +<5d00> <5dff> 23808 +<5e00> <5eff> 24064 +<5f00> <5fff> 24320 +<6000> <60ff> 24576 +<6100> <61ff> 24832 +<6200> <62ff> 25088 +<6300> <63ff> 25344 +endcidrange + +19 begincidrange +<6400> <64ff> 25600 +<6500> <65ff> 25856 +<6600> <66ff> 26112 +<6700> <67ff> 26368 +<6800> <68ff> 26624 +<6900> <69ff> 26880 +<6a00> <6aff> 27136 +<6b00> <6bff> 27392 +<6c00> <6cff> 27648 +<6d00> <6dff> 27904 +<6e00> <6eff> 28160 +<6f00> <6fff> 28416 +<7000> <70ff> 28672 +<7100> <71ff> 28928 +<7200> <72ff> 29184 +<7300> <73ff> 29440 +<7400> <74ff> 29696 +<7500> <75ff> 29952 +<7600> <764b> 30208 +endcidrange +endcmap + +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-UCS2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-UCS2 new file mode 100644 index 00000000000..23a0f538b2b --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-GB1-UCS2 @@ -0,0 +1,14267 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Adobe-GB1-UCS2) +%%Title: (Adobe-GB1-UCS2 Adobe GB1 5) +%%Version: 8.001 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Adobe_GB1_UCS2) def + /Supplement 5 def +end def + +/CMapName /Adobe-GB1-UCS2 def +/CMapVersion 8.001 def +/CMapType 2 def + +/XUID [1 10 25335 1212] def + +/WMode 0 def + +1 begincodespacerange + <0000> +endcodespacerange + +100 beginbfchar +<0000> +<0063> <00b7> +<0064> <02c9> +<0065> <02c7> +<0066> <00a8> +<0067> <3003> +<0068> <3005> +<0069> <2014> +<006a> +<006b> <2016> +<006c> <22ef> +<007f> <00b1> +<0080> <00d7> +<0081> <00f7> +<0082> <2236> +<0085> <2211> +<0086> <220f> +<0087> <222a> +<0088> <2229> +<0089> <2208> +<008a> <2237> +<008b> <221a> +<008c> <22a5> +<008d> <2225> +<008e> <2220> +<008f> <2312> +<0090> <2299> +<0091> <222b> +<0092> <222e> +<0093> <2261> +<0094> <224c> +<0095> <2248> +<0096> <223d> +<0097> <221d> +<0098> <2260> +<009d> <221e> +<009e> <2235> +<009f> <2234> +<00a0> <2642> +<00a1> <2640> +<00a2> <00b0> +<00a5> <2103> +<00a6> +<00a7> <00a4> +<00aa> <2030> +<00ab> <00a7> +<00ac> <2116> +<00ad> <2606> +<00ae> <2605> +<00af> <25cb> +<00b0> <25cf> +<00b1> <25ce> +<00b2> <25c7> +<00b3> <25c6> +<00b4> <25a1> +<00b5> <25a0> +<00b6> <25b3> +<00b7> <25b2> +<00b8> <203b> +<00b9> <2192> +<00bc> <2193> +<00bd> <3013> +<0109> +<0163> +<023d> +<023e> <3002> +<023f> <3001> +<0242> +<0243> +<0256> +<0257> <2026> +<0260> <0401> +<0281> <0451> +<029c> <0101> +<029d> <00e1> +<029e> <01ce> +<029f> <00e0> +<02a0> <0113> +<02a1> <00e9> +<02a2> <011b> +<02a3> <00e8> +<02a4> <012b> +<02a5> <00ed> +<02a6> <01d0> +<02a7> <00ec> +<02a8> <014d> +<02a9> <00f3> +<02aa> <01d2> +<02ab> <00f2> +<02ac> <016b> +<02ad> <00fa> +<02ae> <01d4> +<02af> <00f9> +<02b0> <01d6> +<02b1> <01d8> +<02b2> <01da> +<02b3> <01dc> +<02b4> <00fc> +<02b5> <00ea> +<02b6> <0251> +endbfchar + +100 beginbfchar +<02b7> <1e3f> +<02b8> <0144> +<02b9> <0148> +<02ba> <01f9> +<02bb> <0261> +<02e1> +<038c> <0101> +<038d> <00e1> +<038e> <01ce> +<038f> <00e0> +<0390> <0113> +<0391> <00e9> +<0392> <011b> +<0393> <00e8> +<0394> <012b> +<0395> <00ed> +<0396> <01d0> +<0397> <00ec> +<0398> <014d> +<0399> <00f3> +<039a> <01d2> +<039b> <00f2> +<039c> <016b> +<039d> <00fa> +<039e> <01d4> +<039f> <00f9> +<03a0> <01d6> +<03a1> <01d8> +<03a2> <01da> +<03a3> <01dc> +<03a4> <00fc> +<03a5> <00ea> +<03a6> <0251> +<03a7> <1e3f> +<03a8> <0144> +<03a9> <0148> +<03aa> <01f9> +<03ab> <0261> +<03ac> <554a> +<03ad> <963f> +<03ae> <57c3> +<03af> <6328> +<03b0> <54ce> +<03b1> <5509> +<03b2> <54c0> +<03b3> <7691> +<03b4> <764c> +<03b5> <853c> +<03b6> <77ee> +<03b7> <827e> +<03b8> <788d> +<03b9> <7231> +<03ba> <9698> +<03bb> <978d> +<03bc> <6c28> +<03bd> <5b89> +<03be> <4ffa> +<03bf> <6309> +<03c0> <6697> +<03c1> <5cb8> +<03c2> <80fa> +<03c3> <6848> +<03c4> <80ae> +<03c5> <6602> +<03c6> <76ce> +<03c7> <51f9> +<03c8> <6556> +<03c9> <71ac> +<03ca> <7ff1> +<03cb> <8884> +<03cc> <50b2> +<03cd> <5965> +<03ce> <61ca> +<03cf> <6fb3> +<03d0> <82ad> +<03d1> <634c> +<03d2> <6252> +<03d3> <53ed> +<03d4> <5427> +<03d5> <7b06> +<03d6> <516b> +<03d7> <75a4> +<03d8> <5df4> +<03d9> <62d4> +<03da> <8dcb> +<03db> <9776> +<03dc> <628a> +<03dd> <8019> +<03de> <575d> +<03df> <9738> +<03e0> <7f62> +<03e1> <7238> +<03e2> <767d> +<03e3> <67cf> +<03e4> <767e> +<03e5> <6446> +<03e6> <4f70> +<03e7> <8d25> +<03e8> <62dc> +<03e9> <7a17> +endbfchar + +100 beginbfchar +<03ea> <6591> +<03eb> <73ed> +<03ec> <642c> +<03ed> <6273> +<03ee> <822c> +<03ef> <9881> +<03f0> <677f> +<03f1> <7248> +<03f2> <626e> +<03f3> <62cc> +<03f4> <4f34> +<03f5> <74e3> +<03f6> <534a> +<03f7> <529e> +<03f8> <7eca> +<03f9> <90a6> +<03fa> <5e2e> +<03fb> <6886> +<03fc> <699c> +<03fd> <8180> +<03fe> <7ed1> +<03ff> <68d2> +<0400> <78c5> +<0401> <868c> +<0402> <9551> +<0403> <508d> +<0404> <8c24> +<0405> <82de> +<0406> <80de> +<0407> <5305> +<0408> <8912> +<0409> <5265> +<040a> <8584> +<040b> <96f9> +<040c> <4fdd> +<040d> <5821> +<040e> <9971> +<040f> <5b9d> +<0410> <62b1> +<0411> <62a5> +<0412> <66b4> +<0413> <8c79> +<0414> <9c8d> +<0415> <7206> +<0416> <676f> +<0417> <7891> +<0418> <60b2> +<0419> <5351> +<041a> <5317> +<041b> <8f88> +<041c> <80cc> +<041d> <8d1d> +<041e> <94a1> +<041f> <500d> +<0420> <72c8> +<0421> <5907> +<0422> <60eb> +<0423> <7119> +<0424> <88ab> +<0425> <5954> +<0426> <82ef> +<0427> <672c> +<0428> <7b28> +<0429> <5d29> +<042a> <7ef7> +<042b> <752d> +<042c> <6cf5> +<042d> <8e66> +<042e> <8ff8> +<042f> <903c> +<0430> <9f3b> +<0431> <6bd4> +<0432> <9119> +<0433> <7b14> +<0434> <5f7c> +<0435> <78a7> +<0436> <84d6> +<0437> <853d> +<0438> <6bd5> +<0439> <6bd9> +<043a> <6bd6> +<043b> <5e01> +<043c> <5e87> +<043d> <75f9> +<043e> <95ed> +<043f> <655d> +<0440> <5f0a> +<0441> <5fc5> +<0442> <8f9f> +<0443> <58c1> +<0444> <81c2> +<0445> <907f> +<0446> <965b> +<0447> <97ad> +<0448> <8fb9> +<0449> <7f16> +<044a> <8d2c> +<044b> <6241> +<044c> <4fbf> +<044d> <53d8> +endbfchar + +100 beginbfchar +<044e> <535e> +<0451> <8fab> +<0452> <904d> +<0453> <6807> +<0454> <5f6a> +<0455> <8198> +<0456> <8868> +<0457> <9cd6> +<0458> <618b> +<0459> <522b> +<045a> <762a> +<045b> <5f6c> +<045c> <658c> +<045d> <6fd2> +<045e> <6ee8> +<045f> <5bbe> +<0460> <6448> +<0461> <5175> +<0462> <51b0> +<0463> <67c4> +<0464> <4e19> +<0465> <79c9> +<0466> <997c> +<0467> <70b3> +<0468> <75c5> +<0469> <5e76> +<046a> <73bb> +<046b> <83e0> +<046c> <64ad> +<046d> <62e8> +<046e> <94b5> +<046f> <6ce2> +<0470> <535a> +<0471> <52c3> +<0472> <640f> +<0473> <94c2> +<0474> <7b94> +<0475> <4f2f> +<0476> <5e1b> +<0477> <8236> +<0478> <8116> +<0479> <818a> +<047a> <6e24> +<047b> <6cca> +<047c> <9a73> +<047d> <6355> +<047e> <535c> +<047f> <54fa> +<0480> <8865> +<0481> <57e0> +<0482> <4e0d> +<0483> <5e03> +<0484> <6b65> +<0485> <7c3f> +<0486> <90e8> +<0487> <6016> +<0488> <64e6> +<0489> <731c> +<048a> <88c1> +<048b> <6750> +<048c> <624d> +<048d> <8d22> +<048e> <776c> +<048f> <8e29> +<0490> <91c7> +<0491> <5f69> +<0492> <83dc> +<0493> <8521> +<0494> <9910> +<0495> <53c2> +<0496> <8695> +<0497> <6b8b> +<0498> <60ed> +<0499> <60e8> +<049a> <707f> +<049b> <82cd> +<049c> <8231> +<049d> <4ed3> +<049e> <6ca7> +<049f> <85cf> +<04a0> <64cd> +<04a1> <7cd9> +<04a2> <69fd> +<04a3> <66f9> +<04a4> <8349> +<04a5> <5395> +<04a6> <7b56> +<04a7> <4fa7> +<04a8> <518c> +<04a9> <6d4b> +<04aa> <5c42> +<04ab> <8e6d> +<04ac> <63d2> +<04ad> <53c9> +<04ae> <832c> +<04af> <8336> +<04b0> <67e5> +<04b1> <78b4> +<04b2> <643d> +<04b3> <5bdf> +endbfchar + +100 beginbfchar +<04b4> <5c94> +<04b5> <5dee> +<04b6> <8be7> +<04b7> <62c6> +<04b8> <67f4> +<04b9> <8c7a> +<04ba> <6400> +<04bb> <63ba> +<04bc> <8749> +<04bd> <998b> +<04be> <8c17> +<04bf> <7f20> +<04c0> <94f2> +<04c1> <4ea7> +<04c2> <9610> +<04c3> <98a4> +<04c4> <660c> +<04c5> <7316> +<04c6> <573a> +<04c7> <5c1d> +<04c8> <5e38> +<04c9> <957f> +<04ca> <507f> +<04cb> <80a0> +<04cc> <5382> +<04cd> <655e> +<04ce> <7545> +<04cf> <5531> +<04d0> <5021> +<04d1> <8d85> +<04d2> <6284> +<04d3> <949e> +<04d4> <671d> +<04d5> <5632> +<04d6> <6f6e> +<04d7> <5de2> +<04d8> <5435> +<04d9> <7092> +<04da> <8f66> +<04db> <626f> +<04dc> <64a4> +<04dd> <63a3> +<04de> <5f7b> +<04df> <6f88> +<04e0> <90f4> +<04e1> <81e3> +<04e2> <8fb0> +<04e3> <5c18> +<04e4> <6668> +<04e5> <5ff1> +<04e6> <6c89> +<04e7> <9648> +<04e8> <8d81> +<04e9> <886c> +<04ea> <6491> +<04eb> <79f0> +<04ec> <57ce> +<04ed> <6a59> +<04ee> <6210> +<04ef> <5448> +<04f0> <4e58> +<04f1> <7a0b> +<04f2> <60e9> +<04f3> <6f84> +<04f4> <8bda> +<04f5> <627f> +<04f6> <901e> +<04f7> <9a8b> +<04f8> <79e4> +<04f9> <5403> +<04fa> <75f4> +<04fb> <6301> +<04fc> <5319> +<04fd> <6c60> +<04fe> <8fdf> +<04ff> <5f1b> +<0500> <9a70> +<0501> <803b> +<0502> <9f7f> +<0503> <4f88> +<0504> <5c3a> +<0505> <8d64> +<0506> <7fc5> +<0507> <65a5> +<0508> <70bd> +<0509> <5145> +<050a> <51b2> +<050b> <866b> +<050c> <5d07> +<050d> <5ba0> +<050e> <62bd> +<050f> <916c> +<0510> <7574> +<0511> <8e0c> +<0512> <7a20> +<0513> <6101> +<0514> <7b79> +<0515> <4ec7> +<0516> <7ef8> +<0517> <7785> +endbfchar + +100 beginbfchar +<0518> <4e11> +<0519> <81ed> +<051a> <521d> +<051b> <51fa> +<051c> <6a71> +<051d> <53a8> +<051e> <8e87> +<051f> <9504> +<0520> <96cf> +<0521> <6ec1> +<0522> <9664> +<0523> <695a> +<0524> <7840> +<0525> <50a8> +<0526> <77d7> +<0527> <6410> +<0528> <89e6> +<0529> <5904> +<052a> <63e3> +<052b> <5ddd> +<052c> <7a7f> +<052d> <693d> +<052e> <4f20> +<052f> <8239> +<0530> <5598> +<0531> <4e32> +<0532> <75ae> +<0533> <7a97> +<0534> <5e62> +<0535> <5e8a> +<0536> <95ef> +<0537> <521b> +<0538> <5439> +<0539> <708a> +<053a> <6376> +<053b> <9524> +<053c> <5782> +<053d> <6625> +<053e> <693f> +<053f> <9187> +<0540> <5507> +<0541> <6df3> +<0542> <7eaf> +<0543> <8822> +<0544> <6233> +<0545> <7ef0> +<0546> <75b5> +<0547> <8328> +<0548> <78c1> +<0549> <96cc> +<054a> <8f9e> +<054b> <6148> +<054c> <74f7> +<054d> <8bcd> +<054e> <6b64> +<054f> <523a> +<0550> <8d50> +<0551> <6b21> +<0552> <806a> +<0553> <8471> +<0554> <56f1> +<0555> <5306> +<0556> <4ece> +<0557> <4e1b> +<0558> <51d1> +<0559> <7c97> +<055a> <918b> +<055b> <7c07> +<055c> <4fc3> +<055d> <8e7f> +<055e> <7be1> +<055f> <7a9c> +<0560> <6467> +<0561> <5d14> +<0562> <50ac> +<0563> <8106> +<0564> <7601> +<0565> <7cb9> +<0566> <6dec> +<0567> <7fe0> +<0568> <6751> +<0569> <5b58> +<056a> <5bf8> +<056b> <78cb> +<056c> <64ae> +<056d> <6413> +<056e> <63aa> +<056f> <632b> +<0570> <9519> +<0571> <642d> +<0572> <8fbe> +<0573> <7b54> +<0574> <7629> +<0575> <6253> +<0576> <5927> +<0577> <5446> +<0578> <6b79> +<0579> <50a3> +<057a> <6234> +<057b> <5e26> +endbfchar + +100 beginbfchar +<057c> <6b86> +<057d> <4ee3> +<057e> <8d37> +<057f> <888b> +<0580> <5f85> +<0581> <902e> +<0582> <6020> +<0583> <803d> +<0584> <62c5> +<0585> <4e39> +<0586> <5355> +<0587> <90f8> +<0588> <63b8> +<0589> <80c6> +<058a> <65e6> +<058b> <6c2e> +<058c> <4f46> +<058d> <60ee> +<058e> <6de1> +<058f> <8bde> +<0590> <5f39> +<0591> <86cb> +<0592> <5f53> +<0593> <6321> +<0594> <515a> +<0595> <8361> +<0596> <6863> +<0597> <5200> +<0598> <6363> +<0599> <8e48> +<059a> <5012> +<059b> <5c9b> +<059c> <7977> +<059d> <5bfc> +<059e> <5230> +<059f> <7a3b> +<05a0> <60bc> +<05a1> <9053> +<05a2> <76d7> +<05a3> <5fb7> +<05a4> <5f97> +<05a5> <7684> +<05a6> <8e6c> +<05a7> <706f> +<05a8> <767b> +<05a9> <7b49> +<05aa> <77aa> +<05ab> <51f3> +<05ac> <9093> +<05ad> <5824> +<05ae> <4f4e> +<05af> <6ef4> +<05b0> <8fea> +<05b1> <654c> +<05b2> <7b1b> +<05b3> <72c4> +<05b4> <6da4> +<05b5> <7fdf> +<05b6> <5ae1> +<05b7> <62b5> +<05b8> <5e95> +<05b9> <5730> +<05ba> <8482> +<05bb> <7b2c> +<05bc> <5e1d> +<05bd> <5f1f> +<05be> <9012> +<05bf> <7f14> +<05c0> <98a0> +<05c1> <6382> +<05c2> <6ec7> +<05c3> <7898> +<05c4> <70b9> +<05c5> <5178> +<05c6> <975b> +<05c7> <57ab> +<05c8> <7535> +<05c9> <4f43> +<05ca> <7538> +<05cb> <5e97> +<05cc> <60e6> +<05cd> <5960> +<05ce> <6dc0> +<05cf> <6bbf> +<05d0> <7889> +<05d1> <53fc> +<05d2> <96d5> +<05d3> <51cb> +<05d4> <5201> +<05d5> <6389> +<05d6> <540a> +<05d7> <9493> +<05d8> <8c03> +<05d9> <8dcc> +<05da> <7239> +<05db> <789f> +<05dc> <8776> +<05dd> <8fed> +<05de> <8c0d> +<05df> <53e0> +endbfchar + +100 beginbfchar +<05e0> <4e01> +<05e1> <76ef> +<05e2> <53ee> +<05e3> <9489> +<05e4> <9876> +<05e5> <9f0e> +<05e6> <952d> +<05e7> <5b9a> +<05e8> <8ba2> +<05e9> <4e22> +<05ea> <4e1c> +<05eb> <51ac> +<05ec> <8463> +<05ed> <61c2> +<05ee> <52a8> +<05ef> <680b> +<05f0> <4f97> +<05f1> <606b> +<05f2> <51bb> +<05f3> <6d1e> +<05f4> <515c> +<05f5> <6296> +<05f6> <6597> +<05f7> <9661> +<05f8> <8c46> +<05f9> <9017> +<05fa> <75d8> +<05fb> <90fd> +<05fc> <7763> +<05fd> <6bd2> +<05fe> <728a> +<05ff> <72ec> +<0600> <8bfb> +<0601> <5835> +<0602> <7779> +<0603> <8d4c> +<0604> <675c> +<0605> <9540> +<0606> <809a> +<0607> <5ea6> +<0608> <6e21> +<0609> <5992> +<060a> <7aef> +<060b> <77ed> +<060c> <953b> +<060d> <6bb5> +<060e> <65ad> +<060f> <7f0e> +<0610> <5806> +<0611> <5151> +<0612> <961f> +<0613> <5bf9> +<0614> <58a9> +<0615> <5428> +<0616> <8e72> +<0617> <6566> +<0618> <987f> +<0619> <56e4> +<061a> <949d> +<061b> <76fe> +<061c> <9041> +<061d> <6387> +<061e> <54c6> +<061f> <591a> +<0620> <593a> +<0621> <579b> +<0622> <8eb2> +<0623> <6735> +<0624> <8dfa> +<0625> <8235> +<0626> <5241> +<0627> <60f0> +<0628> <5815> +<0629> <86fe> +<062a> <5ce8> +<062b> <9e45> +<062c> <4fc4> +<062d> <989d> +<062e> <8bb9> +<062f> <5a25> +<0630> <6076> +<0631> <5384> +<0632> <627c> +<0633> <904f> +<0634> <9102> +<0635> <997f> +<0636> <6069> +<0637> <800c> +<0638> <513f> +<0639> <8033> +<063a> <5c14> +<063b> <9975> +<063c> <6d31> +<063d> <4e8c> +<063e> <8d30> +<063f> <53d1> +<0640> <7f5a> +<0641> <7b4f> +<0642> <4f10> +<0643> <4e4f> +endbfchar + +100 beginbfchar +<0644> <9600> +<0645> <6cd5> +<0646> <73d0> +<0647> <85e9> +<0648> <5e06> +<0649> <756a> +<064a> <7ffb> +<064b> <6a0a> +<064c> <77fe> +<064d> <9492> +<064e> <7e41> +<064f> <51e1> +<0650> <70e6> +<0651> <53cd> +<0652> <8fd4> +<0653> <8303> +<0654> <8d29> +<0655> <72af> +<0656> <996d> +<0657> <6cdb> +<0658> <574a> +<0659> <82b3> +<065a> <65b9> +<065b> <80aa> +<065c> <623f> +<065d> <9632> +<065e> <59a8> +<065f> <4eff> +<0660> <8bbf> +<0661> <7eba> +<0662> <653e> +<0663> <83f2> +<0664> <975e> +<0665> <5561> +<0666> <98de> +<0667> <80a5> +<0668> <532a> +<0669> <8bfd> +<066a> <5420> +<066b> <80ba> +<066c> <5e9f> +<066d> <6cb8> +<066e> <8d39> +<066f> <82ac> +<0670> <915a> +<0671> <5429> +<0672> <6c1b> +<0673> <5206> +<0674> <7eb7> +<0675> <575f> +<0676> <711a> +<0677> <6c7e> +<0678> <7c89> +<0679> <594b> +<067a> <4efd> +<067b> <5fff> +<067c> <6124> +<067d> <7caa> +<067e> <4e30> +<067f> <5c01> +<0680> <67ab> +<0681> <8702> +<0682> <5cf0> +<0683> <950b> +<0684> <98ce> +<0685> <75af> +<0686> <70fd> +<0687> <9022> +<0688> <51af> +<0689> <7f1d> +<068a> <8bbd> +<068b> <5949> +<068c> <51e4> +<068d> <4f5b> +<068e> <5426> +<068f> <592b> +<0690> <6577> +<0691> <80a4> +<0692> <5b75> +<0693> <6276> +<0694> <62c2> +<0695> <8f90> +<0696> <5e45> +<0697> <6c1f> +<0698> <7b26> +<0699> <4f0f> +<069a> <4fd8> +<069b> <670d> +<069c> <6d6e> +<069d> <6daa> +<069e> <798f> +<069f> <88b1> +<06a0> <5f17> +<06a1> <752b> +<06a2> <629a> +<06a3> <8f85> +<06a4> <4fef> +<06a5> <91dc> +<06a6> <65a7> +<06a7> <812f> +endbfchar + +100 beginbfchar +<06a8> <8151> +<06a9> <5e9c> +<06aa> <8150> +<06ab> <8d74> +<06ac> <526f> +<06ad> <8986> +<06ae> <8d4b> +<06af> <590d> +<06b0> <5085> +<06b1> <4ed8> +<06b2> <961c> +<06b3> <7236> +<06b4> <8179> +<06b5> <8d1f> +<06b6> <5bcc> +<06b7> <8ba3> +<06b8> <9644> +<06b9> <5987> +<06ba> <7f1a> +<06bb> <5490> +<06bc> <5676> +<06bd> <560e> +<06be> <8be5> +<06bf> <6539> +<06c0> <6982> +<06c1> <9499> +<06c2> <76d6> +<06c3> <6e89> +<06c4> <5e72> +<06c5> <7518> +<06c6> <6746> +<06c7> <67d1> +<06c8> <7aff> +<06c9> <809d> +<06ca> <8d76> +<06cb> <611f> +<06cc> <79c6> +<06cd> <6562> +<06ce> <8d63> +<06cf> <5188> +<06d0> <521a> +<06d1> <94a2> +<06d2> <7f38> +<06d3> <809b> +<06d4> <7eb2> +<06d5> <5c97> +<06d6> <6e2f> +<06d7> <6760> +<06d8> <7bd9> +<06d9> <768b> +<06da> <9ad8> +<06db> <818f> +<06dc> <7f94> +<06dd> <7cd5> +<06de> <641e> +<06df> <9550> +<06e0> <7a3f> +<06e1> <544a> +<06e2> <54e5> +<06e3> <6b4c> +<06e4> <6401> +<06e5> <6208> +<06e6> <9e3d> +<06e7> <80f3> +<06e8> <7599> +<06e9> <5272> +<06ea> <9769> +<06eb> <845b> +<06ec> <683c> +<06ed> <86e4> +<06ee> <9601> +<06ef> <9694> +<06f0> <94ec> +<06f1> <4e2a> +<06f2> <5404> +<06f3> <7ed9> +<06f4> <6839> +<06f5> <8ddf> +<06f6> <8015> +<06f7> <66f4> +<06f8> <5e9a> +<06f9> <7fb9> +<06fa> <57c2> +<06fb> <803f> +<06fc> <6897> +<06fd> <5de5> +<06fe> <653b> +<06ff> <529f> +<0700> <606d> +<0701> <9f9a> +<0702> <4f9b> +<0703> <8eac> +<0704> <516c> +<0705> <5bab> +<0706> <5f13> +<0707> <5de9> +<0708> <6c5e> +<0709> <62f1> +<070a> <8d21> +<070b> <5171> +endbfchar + +100 beginbfchar +<070c> <94a9> +<070d> <52fe> +<070e> <6c9f> +<070f> <82df> +<0710> <72d7> +<0711> <57a2> +<0712> <6784> +<0713> <8d2d> +<0714> <591f> +<0715> <8f9c> +<0716> <83c7> +<0717> <5495> +<0718> <7b8d> +<0719> <4f30> +<071a> <6cbd> +<071b> <5b64> +<071c> <59d1> +<071d> <9f13> +<071e> <53e4> +<071f> <86ca> +<0720> <9aa8> +<0721> <8c37> +<0722> <80a1> +<0723> <6545> +<0724> <987e> +<0725> <56fa> +<0726> <96c7> +<0727> <522e> +<0728> <74dc> +<0729> <5250> +<072a> <5be1> +<072b> <6302> +<072c> <8902> +<072d> <4e56> +<072e> <62d0> +<072f> <602a> +<0730> <68fa> +<0731> <5173> +<0732> <5b98> +<0733> <51a0> +<0734> <89c2> +<0735> <7ba1> +<0736> <9986> +<0737> <7f50> +<0738> <60ef> +<0739> <704c> +<073a> <8d2f> +<073b> <5149> +<073c> <5e7f> +<073d> <901b> +<073e> <7470> +<073f> <89c4> +<0740> <572d> +<0741> <7845> +<0742> <5f52> +<0743> <9f9f> +<0744> <95fa> +<0745> <8f68> +<0746> <9b3c> +<0747> <8be1> +<0748> <7678> +<0749> <6842> +<074a> <67dc> +<074b> <8dea> +<074c> <8d35> +<074d> <523d> +<074e> <8f8a> +<074f> <6eda> +<0750> <68cd> +<0751> <9505> +<0752> <90ed> +<0753> <56fd> +<0754> <679c> +<0755> <88f9> +<0756> <8fc7> +<0757> <54c8> +<0758> <9ab8> +<0759> <5b69> +<075a> <6d77> +<075b> <6c26> +<075c> <4ea5> +<075d> <5bb3> +<075e> <9a87> +<075f> <9163> +<0760> <61a8> +<0761> <90af> +<0762> <97e9> +<0763> <542b> +<0764> <6db5> +<0765> <5bd2> +<0766> <51fd> +<0767> <558a> +<0768> <7f55> +<0769> <7ff0> +<076a> <64bc> +<076b> <634d> +<076c> <65f1> +<076d> <61be> +<076e> <608d> +<076f> <710a> +endbfchar + +100 beginbfchar +<0770> <6c57> +<0771> <6c49> +<0772> <592f> +<0773> <676d> +<0774> <822a> +<0775> <58d5> +<0776> <568e> +<0777> <8c6a> +<0778> <6beb> +<0779> <90dd> +<077a> <597d> +<077b> <8017> +<077c> <53f7> +<077d> <6d69> +<077e> <5475> +<077f> <559d> +<0780> <8377> +<0781> <83cf> +<0782> <6838> +<0783> <79be> +<0784> <548c> +<0785> <4f55> +<0786> <5408> +<0787> <76d2> +<0788> <8c89> +<0789> <9602> +<078a> <6cb3> +<078b> <6db8> +<078c> <8d6b> +<078d> <8910> +<078e> <9e64> +<078f> <8d3a> +<0790> <563f> +<0791> <9ed1> +<0792> <75d5> +<0793> <5f88> +<0794> <72e0> +<0795> <6068> +<0796> <54fc> +<0797> <4ea8> +<0798> <6a2a> +<0799> <8861> +<079a> <6052> +<079b> <8f70> +<079c> <54c4> +<079d> <70d8> +<079e> <8679> +<079f> <9e3f> +<07a0> <6d2a> +<07a1> <5b8f> +<07a2> <5f18> +<07a3> <7ea2> +<07a4> <5589> +<07a5> <4faf> +<07a6> <7334> +<07a7> <543c> +<07a8> <539a> +<07a9> <5019> +<07aa> <540e> +<07ab> <547c> +<07ac> <4e4e> +<07ad> <5ffd> +<07ae> <745a> +<07af> <58f6> +<07b0> <846b> +<07b1> <80e1> +<07b2> <8774> +<07b3> <72d0> +<07b4> <7cca> +<07b5> <6e56> +<07b6> <5f27> +<07b7> <864e> +<07b8> <552c> +<07b9> <62a4> +<07ba> <4e92> +<07bb> <6caa> +<07bc> <6237> +<07bd> <82b1> +<07be> <54d7> +<07bf> <534e> +<07c0> <733e> +<07c1> <6ed1> +<07c2> <753b> +<07c3> <5212> +<07c4> <5316> +<07c5> <8bdd> +<07c6> <69d0> +<07c7> <5f8a> +<07c8> <6000> +<07c9> <6dee> +<07ca> <574f> +<07cb> <6b22> +<07cc> <73af> +<07cd> <6853> +<07ce> <8fd8> +<07cf> <7f13> +<07d0> <6362> +<07d1> <60a3> +<07d2> <5524> +<07d3> <75ea> +endbfchar + +100 beginbfchar +<07d4> <8c62> +<07d5> <7115> +<07d6> <6da3> +<07d7> <5ba6> +<07d8> <5e7b> +<07d9> <8352> +<07da> <614c> +<07db> <9ec4> +<07dc> <78fa> +<07dd> <8757> +<07de> <7c27> +<07df> <7687> +<07e0> <51f0> +<07e1> <60f6> +<07e2> <714c> +<07e3> <6643> +<07e4> <5e4c> +<07e5> <604d> +<07e6> <8c0e> +<07e7> <7070> +<07e8> <6325> +<07e9> <8f89> +<07ea> <5fbd> +<07eb> <6062> +<07ec> <86d4> +<07ed> <56de> +<07ee> <6bc1> +<07ef> <6094> +<07f0> <6167> +<07f1> <5349> +<07f2> <60e0> +<07f3> <6666> +<07f4> <8d3f> +<07f5> <79fd> +<07f6> <4f1a> +<07f7> <70e9> +<07f8> <6c47> +<07f9> <8bb3> +<07fa> <8bf2> +<07fb> <7ed8> +<07fc> <8364> +<07fd> <660f> +<07fe> <5a5a> +<07ff> <9b42> +<0800> <6d51> +<0801> <6df7> +<0802> <8c41> +<0803> <6d3b> +<0804> <4f19> +<0805> <706b> +<0806> <83b7> +<0807> <6216> +<0808> <60d1> +<0809> <970d> +<080a> <8d27> +<080b> <7978> +<080c> <51fb> +<080d> <573e> +<080e> <57fa> +<080f> <673a> +<0810> <7578> +<0811> <7a3d> +<0812> <79ef> +<0813> <7b95> +<0814> <808c> +<0815> <9965> +<0816> <8ff9> +<0817> <6fc0> +<0818> <8ba5> +<0819> <9e21> +<081a> <59ec> +<081b> <7ee9> +<081c> <7f09> +<081d> <5409> +<081e> <6781> +<081f> <68d8> +<0820> <8f91> +<0821> <7c4d> +<0822> <96c6> +<0823> <53ca> +<0824> <6025> +<0825> <75be> +<0826> <6c72> +<0827> <5373> +<0828> <5ac9> +<0829> <7ea7> +<082a> <6324> +<082b> <51e0> +<082c> <810a> +<082d> <5df1> +<082e> <84df> +<082f> <6280> +<0830> <5180> +<0831> <5b63> +<0832> <4f0e> +<0833> <796d> +<0834> <5242> +<0835> <60b8> +<0836> <6d4e> +<0837> <5bc4> +endbfchar + +100 beginbfchar +<0838> <5bc2> +<0839> <8ba1> +<083a> <8bb0> +<083b> <65e2> +<083c> <5fcc> +<083d> <9645> +<083e> <5993> +<083f> <7ee7> +<0840> <7eaa> +<0841> <5609> +<0842> <67b7> +<0843> <5939> +<0844> <4f73> +<0845> <5bb6> +<0846> <52a0> +<0847> <835a> +<0848> <988a> +<0849> <8d3e> +<084a> <7532> +<084b> <94be> +<084c> <5047> +<084d> <7a3c> +<084e> <4ef7> +<084f> <67b6> +<0850> <9a7e> +<0851> <5ac1> +<0852> <6b7c> +<0853> <76d1> +<0854> <575a> +<0855> <5c16> +<0856> <7b3a> +<0857> <95f4> +<0858> <714e> +<0859> <517c> +<085a> <80a9> +<085b> <8270> +<085c> <5978> +<085d> <7f04> +<085e> <8327> +<085f> <68c0> +<0860> <67ec> +<0861> <78b1> +<0862> <7877> +<0863> <62e3> +<0864> <6361> +<0865> <7b80> +<0866> <4fed> +<0867> <526a> +<0868> <51cf> +<0869> <8350> +<086a> <69db> +<086b> <9274> +<086c> <8df5> +<086d> <8d31> +<086e> <89c1> +<086f> <952e> +<0870> <7bad> +<0871> <4ef6> +<0872> <5065> +<0873> <8230> +<0874> <5251> +<0875> <996f> +<0876> <6e10> +<0877> <6e85> +<0878> <6da7> +<0879> <5efa> +<087a> <50f5> +<087b> <59dc> +<087c> <5c06> +<087d> <6d46> +<087e> <6c5f> +<087f> <7586> +<0880> <848b> +<0881> <6868> +<0882> <5956> +<0883> <8bb2> +<0884> <5320> +<0885> <9171> +<0886> <964d> +<0887> <8549> +<0888> <6912> +<0889> <7901> +<088a> <7126> +<088b> <80f6> +<088c> <4ea4> +<088d> <90ca> +<088e> <6d47> +<088f> <9a84> +<0890> <5a07> +<0891> <56bc> +<0892> <6405> +<0893> <94f0> +<0894> <77eb> +<0895> <4fa5> +<0896> <811a> +<0897> <72e1> +<0898> <89d2> +<0899> <997a> +<089a> <7f34> +<089b> <7ede> +endbfchar + +100 beginbfchar +<089c> <527f> +<089d> <6559> +<089e> <9175> +<089f> <8f7f> +<08a0> <8f83> +<08a1> <53eb> +<08a2> <7a96> +<08a3> <63ed> +<08a4> <63a5> +<08a5> <7686> +<08a6> <79f8> +<08a7> <8857> +<08a8> <9636> +<08a9> <622a> +<08aa> <52ab> +<08ab> <8282> +<08ac> <6854> +<08ad> <6770> +<08ae> <6377> +<08af> <776b> +<08b0> <7aed> +<08b1> <6d01> +<08b2> <7ed3> +<08b3> <89e3> +<08b4> <59d0> +<08b5> <6212> +<08b6> <85c9> +<08b7> <82a5> +<08b8> <754c> +<08b9> <501f> +<08ba> <4ecb> +<08bb> <75a5> +<08bc> <8beb> +<08bd> <5c4a> +<08be> <5dfe> +<08bf> <7b4b> +<08c0> <65a4> +<08c1> <91d1> +<08c2> <4eca> +<08c3> <6d25> +<08c4> <895f> +<08c5> <7d27> +<08c6> <9526> +<08c7> <4ec5> +<08c8> <8c28> +<08c9> <8fdb> +<08ca> <9773> +<08cb> <664b> +<08cc> <7981> +<08cd> <8fd1> +<08ce> <70ec> +<08cf> <6d78> +<08d0> <5c3d> +<08d1> <52b2> +<08d2> <8346> +<08d3> <5162> +<08d4> <830e> +<08d5> <775b> +<08d6> <6676> +<08d7> <9cb8> +<08d8> <4eac> +<08d9> <60ca> +<08da> <7cbe> +<08db> <7cb3> +<08dc> <7ecf> +<08dd> <4e95> +<08de> <8b66> +<08df> <666f> +<08e0> <9888> +<08e1> <9759> +<08e2> <5883> +<08e3> <656c> +<08e4> <955c> +<08e5> <5f84> +<08e6> <75c9> +<08e7> <9756> +<08e8> <7adf> +<08e9> <7ade> +<08ea> <51c0> +<08eb> <70af> +<08ec> <7a98> +<08ed> <63ea> +<08ee> <7a76> +<08ef> <7ea0> +<08f0> <7396> +<08f1> <97ed> +<08f2> <4e45> +<08f3> <7078> +<08f4> <4e5d> +<08f5> <9152> +<08f6> <53a9> +<08f7> <6551> +<08f8> <65e7> +<08f9> <81fc> +<08fa> <8205> +<08fb> <548e> +<08fc> <5c31> +<08fd> <759a> +<08fe> <97a0> +<08ff> <62d8> +endbfchar + +100 beginbfchar +<0900> <72d9> +<0901> <75bd> +<0902> <5c45> +<0903> <9a79> +<0904> <83ca> +<0905> <5c40> +<0906> <5480> +<0907> <77e9> +<0908> <4e3e> +<0909> <6cae> +<090a> <805a> +<090b> <62d2> +<090c> <636e> +<090d> <5de8> +<090e> <5177> +<090f> <8ddd> +<0910> <8e1e> +<0911> <952f> +<0912> <4ff1> +<0913> <53e5> +<0914> <60e7> +<0915> <70ac> +<0916> <5267> +<0917> <6350> +<0918> <9e43> +<0919> <5a1f> +<091a> <5026> +<091b> <7737> +<091c> <5377> +<091d> <7ee2> +<091e> <6485> +<091f> <652b> +<0920> <6289> +<0921> <6398> +<0922> <5014> +<0923> <7235> +<0924> <89c9> +<0925> <51b3> +<0926> <8bc0> +<0927> <7edd> +<0928> <5747> +<0929> <83cc> +<092a> <94a7> +<092b> <519b> +<092c> <541b> +<092d> <5cfb> +<092e> <4fca> +<092f> <7ae3> +<0930> <6d5a> +<0931> <90e1> +<0932> <9a8f> +<0933> <5580> +<0934> <5496> +<0935> <5361> +<0936> <54af> +<0937> <5f00> +<0938> <63e9> +<0939> <6977> +<093a> <51ef> +<093b> <6168> +<093c> <520a> +<093d> <582a> +<093e> <52d8> +<093f> <574e> +<0940> <780d> +<0941> <770b> +<0942> <5eb7> +<0943> <6177> +<0944> <7ce0> +<0945> <625b> +<0946> <6297> +<0947> <4ea2> +<0948> <7095> +<0949> <8003> +<094a> <62f7> +<094b> <70e4> +<094c> <9760> +<094d> <5777> +<094e> <82db> +<094f> <67ef> +<0950> <68f5> +<0951> <78d5> +<0952> <9897> +<0953> <79d1> +<0954> <58f3> +<0955> <54b3> +<0956> <53ef> +<0957> <6e34> +<0958> <514b> +<0959> <523b> +<095a> <5ba2> +<095b> <8bfe> +<095c> <80af> +<095d> <5543> +<095e> <57a6> +<095f> <6073> +<0960> <5751> +<0961> <542d> +<0962> <7a7a> +<0963> <6050> +endbfchar + +100 beginbfchar +<0964> <5b54> +<0965> <63a7> +<0966> <62a0> +<0967> <53e3> +<0968> <6263> +<0969> <5bc7> +<096a> <67af> +<096b> <54ed> +<096c> <7a9f> +<096d> <82e6> +<096e> <9177> +<096f> <5e93> +<0970> <88e4> +<0971> <5938> +<0972> <57ae> +<0973> <630e> +<0974> <8de8> +<0975> <80ef> +<0976> <5757> +<0977> <7b77> +<0978> <4fa9> +<0979> <5feb> +<097a> <5bbd> +<097b> <6b3e> +<097c> <5321> +<097d> <7b50> +<097e> <72c2> +<097f> <6846> +<0980> <77ff> +<0981> <7736> +<0982> <65f7> +<0983> <51b5> +<0984> <4e8f> +<0985> <76d4> +<0986> <5cbf> +<0987> <7aa5> +<0988> <8475> +<0989> <594e> +<098a> <9b41> +<098b> <5080> +<098c> <9988> +<098d> <6127> +<098e> <6e83> +<098f> <5764> +<0990> <6606> +<0991> <6346> +<0992> <56f0> +<0993> <62ec> +<0994> <6269> +<0995> <5ed3> +<0996> <9614> +<0997> <5783> +<0998> <62c9> +<0999> <5587> +<099a> <8721> +<099b> <814a> +<099c> <8fa3> +<099d> <5566> +<099e> <83b1> +<099f> <6765> +<09a0> <8d56> +<09a1> <84dd> +<09a2> <5a6a> +<09a3> <680f> +<09a4> <62e6> +<09a5> <7bee> +<09a6> <9611> +<09a7> <5170> +<09a8> <6f9c> +<09a9> <8c30> +<09aa> <63fd> +<09ab> <89c8> +<09ac> <61d2> +<09ad> <7f06> +<09ae> <70c2> +<09af> <6ee5> +<09b0> <7405> +<09b1> <6994> +<09b2> <72fc> +<09b3> <5eca> +<09b4> <90ce> +<09b5> <6717> +<09b6> <6d6a> +<09b7> <635e> +<09b8> <52b3> +<09b9> <7262> +<09ba> <8001> +<09bb> <4f6c> +<09bc> <59e5> +<09bd> <916a> +<09be> <70d9> +<09bf> <6d9d> +<09c0> <52d2> +<09c1> <4e50> +<09c2> <96f7> +<09c3> <956d> +<09c4> <857e> +<09c5> <78ca> +<09c6> <7d2f> +<09c7> <5121> +endbfchar + +100 beginbfchar +<09c8> <5792> +<09c9> <64c2> +<09ca> <808b> +<09cb> <7c7b> +<09cc> <6cea> +<09cd> <68f1> +<09ce> <695e> +<09cf> <51b7> +<09d0> <5398> +<09d1> <68a8> +<09d2> <7281> +<09d3> <9ece> +<09d4> <7bf1> +<09d5> <72f8> +<09d6> <79bb> +<09d7> <6f13> +<09d8> <7406> +<09d9> <674e> +<09da> <91cc> +<09db> <9ca4> +<09dc> <793c> +<09dd> <8389> +<09de> <8354> +<09df> <540f> +<09e0> <6817> +<09e1> <4e3d> +<09e2> <5389> +<09e3> <52b1> +<09e4> <783e> +<09e5> <5386> +<09e6> <5229> +<09e7> <5088> +<09e8> <4f8b> +<09e9> <4fd0> +<09ea> <75e2> +<09eb> <7acb> +<09ec> <7c92> +<09ed> <6ca5> +<09ee> <96b6> +<09ef> <529b> +<09f0> <7483> +<09f1> <54e9> +<09f2> <4fe9> +<09f3> <8054> +<09f4> <83b2> +<09f5> <8fde> +<09f6> <9570> +<09f7> <5ec9> +<09f8> <601c> +<09f9> <6d9f> +<09fa> <5e18> +<09fb> <655b> +<09fc> <8138> +<09fd> <94fe> +<09fe> <604b> +<09ff> <70bc> +<0a00> <7ec3> +<0a01> <7cae> +<0a02> <51c9> +<0a03> <6881> +<0a04> <7cb1> +<0a05> <826f> +<0a06> <4e24> +<0a07> <8f86> +<0a08> <91cf> +<0a09> <667e> +<0a0a> <4eae> +<0a0b> <8c05> +<0a0c> <64a9> +<0a0d> <804a> +<0a0e> <50da> +<0a0f> <7597> +<0a10> <71ce> +<0a11> <5be5> +<0a12> <8fbd> +<0a13> <6f66> +<0a14> <4e86> +<0a15> <6482> +<0a16> <9563> +<0a17> <5ed6> +<0a18> <6599> +<0a19> <5217> +<0a1a> <88c2> +<0a1b> <70c8> +<0a1c> <52a3> +<0a1d> <730e> +<0a1e> <7433> +<0a1f> <6797> +<0a20> <78f7> +<0a21> <9716> +<0a22> <4e34> +<0a23> <90bb> +<0a24> <9cde> +<0a25> <6dcb> +<0a26> <51db> +<0a27> <8d41> +<0a28> <541d> +<0a29> <62ce> +<0a2a> <73b2> +<0a2b> <83f1> +endbfchar + +100 beginbfchar +<0a2c> <96f6> +<0a2d> <9f84> +<0a2e> <94c3> +<0a2f> <4f36> +<0a30> <7f9a> +<0a31> <51cc> +<0a32> <7075> +<0a33> <9675> +<0a34> <5cad> +<0a35> <9886> +<0a36> <53e6> +<0a37> <4ee4> +<0a38> <6e9c> +<0a39> <7409> +<0a3a> <69b4> +<0a3b> <786b> +<0a3c> <998f> +<0a3d> <7559> +<0a3e> <5218> +<0a3f> <7624> +<0a40> <6d41> +<0a41> <67f3> +<0a42> <516d> +<0a43> <9f99> +<0a44> <804b> +<0a45> <5499> +<0a46> <7b3c> +<0a47> <7abf> +<0a48> <9686> +<0a49> <5784> +<0a4a> <62e2> +<0a4b> <9647> +<0a4c> <697c> +<0a4d> <5a04> +<0a4e> <6402> +<0a4f> <7bd3> +<0a50> <6f0f> +<0a51> <964b> +<0a52> <82a6> +<0a53> <5362> +<0a54> <9885> +<0a55> <5e90> +<0a56> <7089> +<0a57> <63b3> +<0a58> <5364> +<0a59> <864f> +<0a5a> <9c81> +<0a5b> <9e93> +<0a5c> <788c> +<0a5d> <9732> +<0a5e> <8def> +<0a5f> <8d42> +<0a60> <9e7f> +<0a61> <6f5e> +<0a62> <7984> +<0a63> <5f55> +<0a64> <9646> +<0a65> <622e> +<0a66> <9a74> +<0a67> <5415> +<0a68> <94dd> +<0a69> <4fa3> +<0a6a> <65c5> +<0a6b> <5c65> +<0a6c> <5c61> +<0a6d> <7f15> +<0a6e> <8651> +<0a6f> <6c2f> +<0a70> <5f8b> +<0a71> <7387> +<0a72> <6ee4> +<0a73> <7eff> +<0a74> <5ce6> +<0a75> <631b> +<0a76> <5b6a> +<0a77> <6ee6> +<0a78> <5375> +<0a79> <4e71> +<0a7a> <63a0> +<0a7b> <7565> +<0a7c> <62a1> +<0a7d> <8f6e> +<0a7e> <4f26> +<0a7f> <4ed1> +<0a80> <6ca6> +<0a81> <7eb6> +<0a82> <8bba> +<0a83> <841d> +<0a84> <87ba> +<0a85> <7f57> +<0a86> <903b> +<0a87> <9523> +<0a88> <7ba9> +<0a89> <9aa1> +<0a8a> <88f8> +<0a8b> <843d> +<0a8c> <6d1b> +<0a8d> <9a86> +<0a8e> <7edc> +<0a8f> <5988> +endbfchar + +100 beginbfchar +<0a90> <9ebb> +<0a91> <739b> +<0a92> <7801> +<0a93> <8682> +<0a94> <9a6c> +<0a95> <9a82> +<0a96> <561b> +<0a97> <5417> +<0a98> <57cb> +<0a99> <4e70> +<0a9a> <9ea6> +<0a9b> <5356> +<0a9c> <8fc8> +<0a9d> <8109> +<0a9e> <7792> +<0a9f> <9992> +<0aa0> <86ee> +<0aa1> <6ee1> +<0aa2> <8513> +<0aa3> <66fc> +<0aa4> <6162> +<0aa5> <6f2b> +<0aa6> <8c29> +<0aa7> <8292> +<0aa8> <832b> +<0aa9> <76f2> +<0aaa> <6c13> +<0aab> <5fd9> +<0aac> <83bd> +<0aad> <732b> +<0aae> <8305> +<0aaf> <951a> +<0ab0> <6bdb> +<0ab1> <77db> +<0ab2> <94c6> +<0ab3> <536f> +<0ab4> <8302> +<0ab5> <5192> +<0ab6> <5e3d> +<0ab7> <8c8c> +<0ab8> <8d38> +<0ab9> <4e48> +<0aba> <73ab> +<0abb> <679a> +<0abc> <6885> +<0abd> <9176> +<0abe> <9709> +<0abf> <7164> +<0ac0> <6ca1> +<0ac1> <7709> +<0ac2> <5a92> +<0ac3> <9541> +<0ac4> <6bcf> +<0ac5> <7f8e> +<0ac6> <6627> +<0ac7> <5bd0> +<0ac8> <59b9> +<0ac9> <5a9a> +<0aca> <95e8> +<0acb> <95f7> +<0acc> <4eec> +<0acd> <840c> +<0ace> <8499> +<0acf> <6aac> +<0ad0> <76df> +<0ad1> <9530> +<0ad2> <731b> +<0ad3> <68a6> +<0ad4> <5b5f> +<0ad5> <772f> +<0ad6> <919a> +<0ad7> <9761> +<0ad8> <7cdc> +<0ad9> <8ff7> +<0ada> <8c1c> +<0adb> <5f25> +<0adc> <7c73> +<0add> <79d8> +<0ade> <89c5> +<0adf> <6ccc> +<0ae0> <871c> +<0ae1> <5bc6> +<0ae2> <5e42> +<0ae3> <68c9> +<0ae4> <7720> +<0ae5> <7ef5> +<0ae6> <5195> +<0ae7> <514d> +<0ae8> <52c9> +<0ae9> <5a29> +<0aea> <7f05> +<0aeb> <9762> +<0aec> <82d7> +<0aed> <63cf> +<0aee> <7784> +<0aef> <85d0> +<0af0> <79d2> +<0af1> <6e3a> +<0af2> <5e99> +<0af3> <5999> +endbfchar + +100 beginbfchar +<0af4> <8511> +<0af5> <706d> +<0af6> <6c11> +<0af7> <62bf> +<0af8> <76bf> +<0af9> <654f> +<0afa> <60af> +<0afb> <95fd> +<0afc> <660e> +<0afd> <879f> +<0afe> <9e23> +<0aff> <94ed> +<0b00> <540d> +<0b01> <547d> +<0b02> <8c2c> +<0b05> <8611> +<0b06> <6a21> +<0b07> <819c> +<0b08> <78e8> +<0b09> <6469> +<0b0a> <9b54> +<0b0b> <62b9> +<0b0c> <672b> +<0b0d> <83ab> +<0b0e> <58a8> +<0b0f> <9ed8> +<0b10> <6cab> +<0b11> <6f20> +<0b12> <5bde> +<0b13> <964c> +<0b14> <8c0b> +<0b15> <725f> +<0b16> <67d0> +<0b17> <62c7> +<0b18> <7261> +<0b19> <4ea9> +<0b1a> <59c6> +<0b1b> <6bcd> +<0b1c> <5893> +<0b1d> <66ae> +<0b1e> <5e55> +<0b1f> <52df> +<0b20> <6155> +<0b21> <6728> +<0b22> <76ee> +<0b23> <7766> +<0b24> <7267> +<0b25> <7a46> +<0b26> <62ff> +<0b27> <54ea> +<0b28> <5450> +<0b29> <94a0> +<0b2a> <90a3> +<0b2b> <5a1c> +<0b2c> <7eb3> +<0b2d> <6c16> +<0b2e> <4e43> +<0b2f> <5976> +<0b30> <8010> +<0b31> <5948> +<0b32> <5357> +<0b33> <7537> +<0b34> <96be> +<0b35> <56ca> +<0b36> <6320> +<0b37> <8111> +<0b38> <607c> +<0b39> <95f9> +<0b3a> <6dd6> +<0b3b> <5462> +<0b3c> <9981> +<0b3d> <5185> +<0b3e> <5ae9> +<0b3f> <80fd> +<0b40> <59ae> +<0b41> <9713> +<0b42> <502a> +<0b43> <6ce5> +<0b44> <5c3c> +<0b45> <62df> +<0b46> <4f60> +<0b47> <533f> +<0b48> <817b> +<0b49> <9006> +<0b4a> <6eba> +<0b4b> <852b> +<0b4c> <62c8> +<0b4d> <5e74> +<0b4e> <78be> +<0b4f> <64b5> +<0b50> <637b> +<0b51> <5ff5> +<0b52> <5a18> +<0b53> <917f> +<0b54> <9e1f> +<0b55> <5c3f> +<0b56> <634f> +<0b57> <8042> +<0b58> <5b7d> +<0b59> <556e> +endbfchar + +100 beginbfchar +<0b5a> <954a> +<0b5b> <954d> +<0b5c> <6d85> +<0b5d> <60a8> +<0b5e> <67e0> +<0b5f> <72de> +<0b60> <51dd> +<0b61> <5b81> +<0b62> <62e7> +<0b63> <6cde> +<0b64> <725b> +<0b65> <626d> +<0b66> <94ae> +<0b67> <7ebd> +<0b68> <8113> +<0b69> <6d53> +<0b6a> <519c> +<0b6b> <5f04> +<0b6c> <5974> +<0b6d> <52aa> +<0b6e> <6012> +<0b6f> <5973> +<0b70> <6696> +<0b71> <8650> +<0b72> <759f> +<0b73> <632a> +<0b74> <61e6> +<0b75> <7cef> +<0b76> <8bfa> +<0b77> <54e6> +<0b78> <6b27> +<0b79> <9e25> +<0b7a> <6bb4> +<0b7b> <85d5> +<0b7c> <5455> +<0b7d> <5076> +<0b7e> <6ca4> +<0b7f> <556a> +<0b80> <8db4> +<0b81> <722c> +<0b82> <5e15> +<0b83> <6015> +<0b84> <7436> +<0b85> <62cd> +<0b86> <6392> +<0b87> <724c> +<0b88> <5f98> +<0b89> <6e43> +<0b8a> <6d3e> +<0b8b> <6500> +<0b8c> <6f58> +<0b8d> <76d8> +<0b8e> <78d0> +<0b8f> <76fc> +<0b90> <7554> +<0b91> <5224> +<0b92> <53db> +<0b93> <4e53> +<0b94> <5e9e> +<0b95> <65c1> +<0b96> <802a> +<0b97> <80d6> +<0b98> <629b> +<0b99> <5486> +<0b9a> <5228> +<0b9b> <70ae> +<0b9c> <888d> +<0b9d> <8dd1> +<0b9e> <6ce1> +<0b9f> <5478> +<0ba0> <80da> +<0ba1> <57f9> +<0ba2> <88f4> +<0ba3> <8d54> +<0ba4> <966a> +<0ba5> <914d> +<0ba6> <4f69> +<0ba7> <6c9b> +<0ba8> <55b7> +<0ba9> <76c6> +<0baa> <7830> +<0bab> <62a8> +<0bac> <70f9> +<0bad> <6f8e> +<0bae> <5f6d> +<0baf> <84ec> +<0bb0> <68da> +<0bb1> <787c> +<0bb2> <7bf7> +<0bb3> <81a8> +<0bb4> <670b> +<0bb5> <9e4f> +<0bb6> <6367> +<0bb7> <78b0> +<0bb8> <576f> +<0bb9> <7812> +<0bba> <9739> +<0bbb> <6279> +<0bbc> <62ab> +<0bbd> <5288> +endbfchar + +100 beginbfchar +<0bbe> <7435> +<0bbf> <6bd7> +<0bc0> <5564> +<0bc1> <813e> +<0bc2> <75b2> +<0bc3> <76ae> +<0bc4> <5339> +<0bc5> <75de> +<0bc6> <50fb> +<0bc7> <5c41> +<0bc8> <8b6c> +<0bc9> <7bc7> +<0bca> <504f> +<0bcb> <7247> +<0bcc> <9a97> +<0bcd> <98d8> +<0bce> <6f02> +<0bcf> <74e2> +<0bd0> <7968> +<0bd1> <6487> +<0bd2> <77a5> +<0bd3> <62fc> +<0bd4> <9891> +<0bd5> <8d2b> +<0bd6> <54c1> +<0bd7> <8058> +<0bd8> <4e52> +<0bd9> <576a> +<0bda> <82f9> +<0bdb> <840d> +<0bdc> <5e73> +<0bdd> <51ed> +<0bde> <74f6> +<0bdf> <8bc4> +<0be0> <5c4f> +<0be1> <5761> +<0be2> <6cfc> +<0be3> <9887> +<0be4> <5a46> +<0be5> <7834> +<0be6> <9b44> +<0be7> <8feb> +<0be8> <7c95> +<0be9> <5256> +<0bea> <6251> +<0beb> <94fa> +<0bec> <4ec6> +<0bed> <8386> +<0bee> <8461> +<0bef> <83e9> +<0bf0> <84b2> +<0bf1> <57d4> +<0bf2> <6734> +<0bf3> <5703> +<0bf4> <666e> +<0bf5> <6d66> +<0bf6> <8c31> +<0bf7> <66dd> +<0bf8> <7011> +<0bf9> <671f> +<0bfa> <6b3a> +<0bfb> <6816> +<0bfc> <621a> +<0bfd> <59bb> +<0bfe> <4e03> +<0bff> <51c4> +<0c00> <6f06> +<0c01> <67d2> +<0c02> <6c8f> +<0c03> <5176> +<0c04> <68cb> +<0c05> <5947> +<0c06> <6b67> +<0c07> <7566> +<0c08> <5d0e> +<0c09> <8110> +<0c0a> <9f50> +<0c0b> <65d7> +<0c0c> <7948> +<0c0d> <7941> +<0c0e> <9a91> +<0c0f> <8d77> +<0c10> <5c82> +<0c11> <4e5e> +<0c12> <4f01> +<0c13> <542f> +<0c14> <5951> +<0c15> <780c> +<0c16> <5668> +<0c17> <6c14> +<0c18> <8fc4> +<0c19> <5f03> +<0c1a> <6c7d> +<0c1b> <6ce3> +<0c1c> <8bab> +<0c1d> <6390> +<0c1e> <6070> +<0c1f> <6d3d> +<0c20> <7275> +<0c21> <6266> +endbfchar + +100 beginbfchar +<0c22> <948e> +<0c23> <94c5> +<0c24> <5343> +<0c25> <8fc1> +<0c26> <7b7e> +<0c27> <4edf> +<0c28> <8c26> +<0c29> <4e7e> +<0c2a> <9ed4> +<0c2b> <94b1> +<0c2c> <94b3> +<0c2d> <524d> +<0c2e> <6f5c> +<0c2f> <9063> +<0c30> <6d45> +<0c31> <8c34> +<0c32> <5811> +<0c33> <5d4c> +<0c34> <6b20> +<0c35> <6b49> +<0c36> <67aa> +<0c37> <545b> +<0c38> <8154> +<0c39> <7f8c> +<0c3a> <5899> +<0c3b> <8537> +<0c3c> <5f3a> +<0c3d> <62a2> +<0c3e> <6a47> +<0c3f> <9539> +<0c40> <6572> +<0c41> <6084> +<0c42> <6865> +<0c43> <77a7> +<0c44> <4e54> +<0c45> <4fa8> +<0c46> <5de7> +<0c47> <9798> +<0c48> <64ac> +<0c49> <7fd8> +<0c4a> <5ced> +<0c4b> <4fcf> +<0c4c> <7a8d> +<0c4d> <5207> +<0c4e> <8304> +<0c4f> <4e14> +<0c50> <602f> +<0c51> <7a83> +<0c52> <94a6> +<0c53> <4fb5> +<0c54> <4eb2> +<0c55> <79e6> +<0c56> <7434> +<0c57> <52e4> +<0c58> <82b9> +<0c59> <64d2> +<0c5a> <79bd> +<0c5b> <5bdd> +<0c5c> <6c81> +<0c5d> <9752> +<0c5e> <8f7b> +<0c5f> <6c22> +<0c60> <503e> +<0c61> <537f> +<0c62> <6e05> +<0c63> <64ce> +<0c64> <6674> +<0c65> <6c30> +<0c66> <60c5> +<0c67> <9877> +<0c68> <8bf7> +<0c69> <5e86> +<0c6a> <743c> +<0c6b> <7a77> +<0c6c> <79cb> +<0c6d> <4e18> +<0c6e> <90b1> +<0c6f> <7403> +<0c70> <6c42> +<0c71> <56da> +<0c72> <914b> +<0c73> <6cc5> +<0c74> <8d8b> +<0c75> <533a> +<0c76> <86c6> +<0c77> <66f2> +<0c78> <8eaf> +<0c79> <5c48> +<0c7a> <9a71> +<0c7b> <6e20> +<0c7c> <53d6> +<0c7d> <5a36> +<0c7e> <9f8b> +<0c7f> <8da3> +<0c80> <53bb> +<0c81> <5708> +<0c82> <98a7> +<0c83> <6743> +<0c84> <919b> +<0c85> <6cc9> +endbfchar + +100 beginbfchar +<0c86> <5168> +<0c87> <75ca> +<0c88> <62f3> +<0c89> <72ac> +<0c8a> <5238> +<0c8b> <529d> +<0c8c> <7f3a> +<0c8d> <7094> +<0c8e> <7638> +<0c8f> <5374> +<0c90> <9e4a> +<0c91> <69b7> +<0c92> <786e> +<0c93> <96c0> +<0c94> <88d9> +<0c95> <7fa4> +<0c96> <7136> +<0c97> <71c3> +<0c98> <5189> +<0c99> <67d3> +<0c9a> <74e4> +<0c9b> <58e4> +<0c9c> <6518> +<0c9d> <56b7> +<0c9e> <8ba9> +<0c9f> <9976> +<0ca0> <6270> +<0ca1> <7ed5> +<0ca2> <60f9> +<0ca3> <70ed> +<0ca4> <58ec> +<0ca5> <4ec1> +<0ca6> <4eba> +<0ca7> <5fcd> +<0ca8> <97e7> +<0ca9> <4efb> +<0caa> <8ba4> +<0cab> <5203> +<0cac> <598a> +<0cad> <7eab> +<0cae> <6254> +<0caf> <4ecd> +<0cb0> <65e5> +<0cb1> <620e> +<0cb2> <8338> +<0cb3> <84c9> +<0cb4> <8363> +<0cb5> <878d> +<0cb6> <7194> +<0cb7> <6eb6> +<0cb8> <5bb9> +<0cb9> <7ed2> +<0cba> <5197> +<0cbb> <63c9> +<0cbc> <67d4> +<0cbd> <8089> +<0cbe> <8339> +<0cbf> <8815> +<0cc0> <5112> +<0cc1> <5b7a> +<0cc2> <5982> +<0cc3> <8fb1> +<0cc4> <4e73> +<0cc5> <6c5d> +<0cc6> <5165> +<0cc7> <8925> +<0cc8> <8f6f> +<0cc9> <962e> +<0cca> <854a> +<0ccb> <745e> +<0ccc> <9510> +<0ccd> <95f0> +<0cce> <6da6> +<0ccf> <82e5> +<0cd0> <5f31> +<0cd1> <6492> +<0cd2> <6d12> +<0cd3> <8428> +<0cd4> <816e> +<0cd5> <9cc3> +<0cd6> <585e> +<0cd7> <8d5b> +<0cd8> <4e09> +<0cd9> <53c1> +<0cda> <4f1e> +<0cdb> <6563> +<0cdc> <6851> +<0cdd> <55d3> +<0cde> <4e27> +<0cdf> <6414> +<0ce0> <9a9a> +<0ce1> <626b> +<0ce2> <5ac2> +<0ce3> <745f> +<0ce4> <8272> +<0ce5> <6da9> +<0ce6> <68ee> +<0ce7> <50e7> +<0ce8> <838e> +<0ce9> <7802> +endbfchar + +100 beginbfchar +<0cea> <6740> +<0ceb> <5239> +<0cec> <6c99> +<0ced> <7eb1> +<0cee> <50bb> +<0cef> <5565> +<0cf0> <715e> +<0cf1> <7b5b> +<0cf2> <6652> +<0cf3> <73ca> +<0cf4> <82eb> +<0cf5> <6749> +<0cf6> <5c71> +<0cf7> <5220> +<0cf8> <717d> +<0cf9> <886b> +<0cfa> <95ea> +<0cfb> <9655> +<0cfc> <64c5> +<0cfd> <8d61> +<0cfe> <81b3> +<0cff> <5584> +<0d00> <6c55> +<0d01> <6247> +<0d02> <7f2e> +<0d03> <5892> +<0d04> <4f24> +<0d05> <5546> +<0d06> <8d4f> +<0d07> <664c> +<0d08> <4e0a> +<0d09> <5c1a> +<0d0a> <88f3> +<0d0b> <68a2> +<0d0c> <634e> +<0d0d> <7a0d> +<0d0e> <70e7> +<0d0f> <828d> +<0d10> <52fa> +<0d11> <97f6> +<0d12> <5c11> +<0d13> <54e8> +<0d14> <90b5> +<0d15> <7ecd> +<0d16> <5962> +<0d17> <8d4a> +<0d18> <86c7> +<0d1b> <8d66> +<0d1c> <6444> +<0d1d> <5c04> +<0d1e> <6151> +<0d1f> <6d89> +<0d20> <793e> +<0d21> <8bbe> +<0d22> <7837> +<0d23> <7533> +<0d24> <547b> +<0d25> <4f38> +<0d26> <8eab> +<0d27> <6df1> +<0d28> <5a20> +<0d29> <7ec5> +<0d2a> <795e> +<0d2b> <6c88> +<0d2c> <5ba1> +<0d2d> <5a76> +<0d2e> <751a> +<0d2f> <80be> +<0d30> <614e> +<0d31> <6e17> +<0d32> <58f0> +<0d33> <751f> +<0d34> <7525> +<0d35> <7272> +<0d36> <5347> +<0d37> <7ef3> +<0d38> <7701> +<0d39> <76db> +<0d3a> <5269> +<0d3b> <80dc> +<0d3c> <5723> +<0d3d> <5e08> +<0d3e> <5931> +<0d3f> <72ee> +<0d40> <65bd> +<0d41> <6e7f> +<0d42> <8bd7> +<0d43> <5c38> +<0d44> <8671> +<0d45> <5341> +<0d46> <77f3> +<0d47> <62fe> +<0d48> <65f6> +<0d49> <4ec0> +<0d4a> <98df> +<0d4b> <8680> +<0d4c> <5b9e> +<0d4d> <8bc6> +<0d4e> <53f2> +<0d4f> <77e2> +endbfchar + +100 beginbfchar +<0d50> <4f7f> +<0d51> <5c4e> +<0d52> <9a76> +<0d53> <59cb> +<0d54> <5f0f> +<0d55> <793a> +<0d56> <58eb> +<0d57> <4e16> +<0d58> <67ff> +<0d59> <4e8b> +<0d5a> <62ed> +<0d5b> <8a93> +<0d5c> <901d> +<0d5d> <52bf> +<0d5e> <662f> +<0d5f> <55dc> +<0d60> <566c> +<0d61> <9002> +<0d62> <4ed5> +<0d63> <4f8d> +<0d64> <91ca> +<0d65> <9970> +<0d66> <6c0f> +<0d67> <5e02> +<0d68> <6043> +<0d69> <5ba4> +<0d6a> <89c6> +<0d6b> <8bd5> +<0d6c> <6536> +<0d6d> <624b> +<0d6e> <9996> +<0d6f> <5b88> +<0d70> <5bff> +<0d71> <6388> +<0d72> <552e> +<0d73> <53d7> +<0d74> <7626> +<0d75> <517d> +<0d76> <852c> +<0d77> <67a2> +<0d78> <68b3> +<0d79> <6b8a> +<0d7a> <6292> +<0d7b> <8f93> +<0d7c> <53d4> +<0d7d> <8212> +<0d7e> <6dd1> +<0d7f> <758f> +<0d80> <4e66> +<0d81> <8d4e> +<0d82> <5b70> +<0d83> <719f> +<0d84> <85af> +<0d85> <6691> +<0d86> <66d9> +<0d87> <7f72> +<0d88> <8700> +<0d89> <9ecd> +<0d8a> <9f20> +<0d8b> <5c5e> +<0d8c> <672f> +<0d8d> <8ff0> +<0d8e> <6811> +<0d8f> <675f> +<0d90> <620d> +<0d91> <7ad6> +<0d92> <5885> +<0d93> <5eb6> +<0d94> <6570> +<0d95> <6f31> +<0d96> <6055> +<0d97> <5237> +<0d98> <800d> +<0d99> <6454> +<0d9a> <8870> +<0d9b> <7529> +<0d9c> <5e05> +<0d9d> <6813> +<0d9e> <62f4> +<0d9f> <971c> +<0da0> <53cc> +<0da1> <723d> +<0da2> <8c01> +<0da3> <6c34> +<0da4> <7761> +<0da5> <7a0e> +<0da6> <542e> +<0da7> <77ac> +<0da8> <987a> +<0da9> <821c> +<0daa> <8bf4> +<0dab> <7855> +<0dac> <6714> +<0dad> <70c1> +<0dae> <65af> +<0daf> <6495> +<0db0> <5636> +<0db1> <601d> +<0db2> <79c1> +<0db3> <53f8> +endbfchar + +100 beginbfchar +<0db4> <4e1d> +<0db5> <6b7b> +<0db6> <8086> +<0db7> <5bfa> +<0db8> <55e3> +<0db9> <56db> +<0dba> <4f3a> +<0dbb> <4f3c> +<0dbc> <9972> +<0dbd> <5df3> +<0dbe> <677e> +<0dbf> <8038> +<0dc0> <6002> +<0dc1> <9882> +<0dc2> <9001> +<0dc3> <5b8b> +<0dc4> <8bbc> +<0dc5> <8bf5> +<0dc6> <641c> +<0dc7> <8258> +<0dc8> <64de> +<0dc9> <55fd> +<0dca> <82cf> +<0dcb> <9165> +<0dcc> <4fd7> +<0dcd> <7d20> +<0dce> <901f> +<0dcf> <7c9f> +<0dd0> <50f3> +<0dd1> <5851> +<0dd2> <6eaf> +<0dd3> <5bbf> +<0dd4> <8bc9> +<0dd5> <8083> +<0dd6> <9178> +<0dd7> <849c> +<0dd8> <7b97> +<0dd9> <867d> +<0dda> <968b> +<0ddb> <968f> +<0ddc> <7ee5> +<0ddd> <9ad3> +<0dde> <788e> +<0ddf> <5c81> +<0de0> <7a57> +<0de1> <9042> +<0de2> <96a7> +<0de3> <795f> +<0de4> <5b59> +<0de5> <635f> +<0de6> <7b0b> +<0de7> <84d1> +<0de8> <68ad> +<0de9> <5506> +<0dea> <7f29> +<0deb> <7410> +<0dec> <7d22> +<0ded> <9501> +<0dee> <6240> +<0def> <584c> +<0df0> <4ed6> +<0df1> <5b83> +<0df2> <5979> +<0df3> <5854> +<0df4> <736d> +<0df5> <631e> +<0df6> <8e4b> +<0df7> <8e0f> +<0df8> <80ce> +<0df9> <82d4> +<0dfa> <62ac> +<0dfb> <53f0> +<0dfc> <6cf0> +<0dfd> <915e> +<0dfe> <592a> +<0dff> <6001> +<0e00> <6c70> +<0e01> <574d> +<0e02> <644a> +<0e03> <8d2a> +<0e04> <762b> +<0e05> <6ee9> +<0e06> <575b> +<0e07> <6a80> +<0e08> <75f0> +<0e09> <6f6d> +<0e0a> <8c2d> +<0e0b> <8c08> +<0e0c> <5766> +<0e0d> <6bef> +<0e0e> <8892> +<0e0f> <78b3> +<0e10> <63a2> +<0e11> <53f9> +<0e12> <70ad> +<0e13> <6c64> +<0e14> <5858> +<0e15> <642a> +<0e16> <5802> +<0e17> <68e0> +endbfchar + +100 beginbfchar +<0e18> <819b> +<0e19> <5510> +<0e1a> <7cd6> +<0e1b> <5018> +<0e1c> <8eba> +<0e1d> <6dcc> +<0e1e> <8d9f> +<0e1f> <70eb> +<0e20> <638f> +<0e21> <6d9b> +<0e22> <6ed4> +<0e23> <7ee6> +<0e24> <8404> +<0e25> <6843> +<0e26> <9003> +<0e27> <6dd8> +<0e28> <9676> +<0e29> <8ba8> +<0e2a> <5957> +<0e2b> <7279> +<0e2c> <85e4> +<0e2d> <817e> +<0e2e> <75bc> +<0e2f> <8a8a> +<0e30> <68af> +<0e31> <5254> +<0e32> <8e22> +<0e33> <9511> +<0e34> <63d0> +<0e35> <9898> +<0e36> <8e44> +<0e37> <557c> +<0e38> <4f53> +<0e39> <66ff> +<0e3a> <568f> +<0e3b> <60d5> +<0e3c> <6d95> +<0e3d> <5243> +<0e3e> <5c49> +<0e3f> <5929> +<0e40> <6dfb> +<0e41> <586b> +<0e42> <7530> +<0e43> <751c> +<0e44> <606c> +<0e45> <8214> +<0e46> <8146> +<0e47> <6311> +<0e48> <6761> +<0e49> <8fe2> +<0e4a> <773a> +<0e4b> <8df3> +<0e4c> <8d34> +<0e4d> <94c1> +<0e4e> <5e16> +<0e4f> <5385> +<0e50> <542c> +<0e51> <70c3> +<0e52> <6c40> +<0e53> <5ef7> +<0e54> <505c> +<0e55> <4ead> +<0e56> <5ead> +<0e57> <633a> +<0e58> <8247> +<0e59> <901a> +<0e5a> <6850> +<0e5b> <916e> +<0e5c> <77b3> +<0e5d> <540c> +<0e5e> <94dc> +<0e5f> <5f64> +<0e60> <7ae5> +<0e61> <6876> +<0e62> <6345> +<0e63> <7b52> +<0e64> <7edf> +<0e65> <75db> +<0e66> <5077> +<0e67> <6295> +<0e68> <5934> +<0e69> <900f> +<0e6a> <51f8> +<0e6b> <79c3> +<0e6c> <7a81> +<0e6d> <56fe> +<0e6e> <5f92> +<0e6f> <9014> +<0e70> <6d82> +<0e71> <5c60> +<0e72> <571f> +<0e73> <5410> +<0e74> <5154> +<0e75> <6e4d> +<0e76> <56e2> +<0e77> <63a8> +<0e78> <9893> +<0e79> <817f> +<0e7a> <8715> +<0e7b> <892a> +endbfchar + +100 beginbfchar +<0e7c> <9000> +<0e7d> <541e> +<0e7e> <5c6f> +<0e7f> <81c0> +<0e80> <62d6> +<0e81> <6258> +<0e82> <8131> +<0e83> <9e35> +<0e84> <9640> +<0e85> <9a6e> +<0e86> <9a7c> +<0e87> <692d> +<0e88> <59a5> +<0e89> <62d3> +<0e8a> <553e> +<0e8b> <6316> +<0e8c> <54c7> +<0e8d> <86d9> +<0e8e> <6d3c> +<0e8f> <5a03> +<0e90> <74e6> +<0e91> <889c> +<0e92> <6b6a> +<0e93> <5916> +<0e94> <8c4c> +<0e95> <5f2f> +<0e96> <6e7e> +<0e97> <73a9> +<0e98> <987d> +<0e99> <4e38> +<0e9a> <70f7> +<0e9b> <5b8c> +<0e9c> <7897> +<0e9d> <633d> +<0e9e> <665a> +<0e9f> <7696> +<0ea0> <60cb> +<0ea1> <5b9b> +<0ea2> <5a49> +<0ea3> <4e07> +<0ea4> <8155> +<0ea5> <6c6a> +<0ea6> <738b> +<0ea7> <4ea1> +<0ea8> <6789> +<0ea9> <7f51> +<0eaa> <5f80> +<0eab> <65fa> +<0eac> <671b> +<0ead> <5fd8> +<0eae> <5984> +<0eaf> <5a01> +<0eb0> <5dcd> +<0eb1> <5fae> +<0eb2> <5371> +<0eb3> <97e6> +<0eb4> <8fdd> +<0eb5> <6845> +<0eb6> <56f4> +<0eb7> <552f> +<0eb8> <60df> +<0eb9> <4e3a> +<0eba> <6f4d> +<0ebb> <7ef4> +<0ebc> <82c7> +<0ebd> <840e> +<0ebe> <59d4> +<0ebf> <4f1f> +<0ec0> <4f2a> +<0ec1> <5c3e> +<0ec2> <7eac> +<0ec3> <672a> +<0ec4> <851a> +<0ec5> <5473> +<0ec6> <754f> +<0ec7> <80c3> +<0ec8> <5582> +<0ec9> <9b4f> +<0eca> <4f4d> +<0ecb> <6e2d> +<0ecc> <8c13> +<0ecd> <5c09> +<0ece> <6170> +<0ecf> <536b> +<0ed0> <761f> +<0ed1> <6e29> +<0ed2> <868a> +<0ed3> <6587> +<0ed4> <95fb> +<0ed5> <7eb9> +<0ed6> <543b> +<0ed7> <7a33> +<0ed8> <7d0a> +<0ed9> <95ee> +<0eda> <55e1> +<0edb> <7fc1> +<0edc> <74ee> +<0edd> <631d> +<0ede> <8717> +<0edf> <6da1> +endbfchar + +100 beginbfchar +<0ee0> <7a9d> +<0ee1> <6211> +<0ee2> <65a1> +<0ee3> <5367> +<0ee4> <63e1> +<0ee5> <6c83> +<0ee6> <5deb> +<0ee7> <545c> +<0ee8> <94a8> +<0ee9> <4e4c> +<0eea> <6c61> +<0eeb> <8bec> +<0eec> <5c4b> +<0eed> <65e0> +<0eee> <829c> +<0eef> <68a7> +<0ef0> <543e> +<0ef1> <5434> +<0ef2> <6bcb> +<0ef3> <6b66> +<0ef4> <4e94> +<0ef5> <6342> +<0ef6> <5348> +<0ef7> <821e> +<0ef8> <4f0d> +<0ef9> <4fae> +<0efa> <575e> +<0efb> <620a> +<0efc> <96fe> +<0efd> <6664> +<0efe> <7269> +<0eff> <52ff> +<0f00> <52a1> +<0f01> <609f> +<0f02> <8bef> +<0f03> <6614> +<0f04> <7199> +<0f05> <6790> +<0f06> <897f> +<0f07> <7852> +<0f08> <77fd> +<0f09> <6670> +<0f0a> <563b> +<0f0b> <5438> +<0f0c> <9521> +<0f0d> <727a> +<0f0e> <7a00> +<0f0f> <606f> +<0f10> <5e0c> +<0f11> <6089> +<0f12> <819d> +<0f13> <5915> +<0f14> <60dc> +<0f15> <7184> +<0f16> <70ef> +<0f17> <6eaa> +<0f18> <6c50> +<0f19> <7280> +<0f1a> <6a84> +<0f1b> <88ad> +<0f1c> <5e2d> +<0f1d> <4e60> +<0f1e> <5ab3> +<0f1f> <559c> +<0f20> <94e3> +<0f21> <6d17> +<0f22> <7cfb> +<0f23> <9699> +<0f24> <620f> +<0f25> <7ec6> +<0f26> <778e> +<0f27> <867e> +<0f28> <5323> +<0f29> <971e> +<0f2a> <8f96> +<0f2b> <6687> +<0f2c> <5ce1> +<0f2d> <4fa0> +<0f2e> <72ed> +<0f2f> <4e0b> +<0f30> <53a6> +<0f31> <590f> +<0f32> <5413> +<0f33> <6380> +<0f34> <9528> +<0f35> <5148> +<0f36> <4ed9> +<0f37> <9c9c> +<0f38> <7ea4> +<0f39> <54b8> +<0f3a> <8d24> +<0f3b> <8854> +<0f3c> <8237> +<0f3d> <95f2> +<0f3e> <6d8e> +<0f3f> <5f26> +<0f40> <5acc> +<0f41> <663e> +<0f42> <9669> +<0f43> <73b0> +endbfchar + +100 beginbfchar +<0f44> <732e> +<0f45> <53bf> +<0f46> <817a> +<0f47> <9985> +<0f48> <7fa1> +<0f49> <5baa> +<0f4a> <9677> +<0f4b> <9650> +<0f4c> <7ebf> +<0f4d> <76f8> +<0f4e> <53a2> +<0f4f> <9576> +<0f50> <9999> +<0f51> <7bb1> +<0f52> <8944> +<0f53> <6e58> +<0f54> <4e61> +<0f55> <7fd4> +<0f56> <7965> +<0f57> <8be6> +<0f58> <60f3> +<0f59> <54cd> +<0f5a> <4eab> +<0f5b> <9879> +<0f5c> <5df7> +<0f5d> <6a61> +<0f5e> <50cf> +<0f5f> <5411> +<0f60> <8c61> +<0f61> <8427> +<0f62> <785d> +<0f63> <9704> +<0f64> <524a> +<0f65> <54ee> +<0f66> <56a3> +<0f67> <9500> +<0f68> <6d88> +<0f69> <5bb5> +<0f6a> <6dc6> +<0f6b> <6653> +<0f6c> <5c0f> +<0f6d> <5b5d> +<0f6e> <6821> +<0f6f> <8096> +<0f70> <5578> +<0f71> <7b11> +<0f72> <6548> +<0f73> <6954> +<0f74> <4e9b> +<0f75> <6b47> +<0f76> <874e> +<0f77> <978b> +<0f78> <534f> +<0f79> <631f> +<0f7a> <643a> +<0f7b> <90aa> +<0f7c> <659c> +<0f7d> <80c1> +<0f7e> <8c10> +<0f7f> <5199> +<0f80> <68b0> +<0f81> <5378> +<0f82> <87f9> +<0f83> <61c8> +<0f84> <6cc4> +<0f85> <6cfb> +<0f86> <8c22> +<0f87> <5c51> +<0f88> <85aa> +<0f89> <82af> +<0f8a> <950c> +<0f8b> <6b23> +<0f8c> <8f9b> +<0f8d> <65b0> +<0f8e> <5ffb> +<0f8f> <5fc3> +<0f90> <4fe1> +<0f91> <8845> +<0f92> <661f> +<0f93> <8165> +<0f94> <7329> +<0f95> <60fa> +<0f96> <5174> +<0f97> <5211> +<0f98> <578b> +<0f99> <5f62> +<0f9a> <90a2> +<0f9b> <884c> +<0f9c> <9192> +<0f9d> <5e78> +<0f9e> <674f> +<0f9f> <6027> +<0fa0> <59d3> +<0fa1> <5144> +<0fa2> <51f6> +<0fa3> <80f8> +<0fa4> <5308> +<0fa5> <6c79> +<0fa6> <96c4> +<0fa7> <718a> +endbfchar + +100 beginbfchar +<0fa8> <4f11> +<0fa9> <4fee> +<0faa> <7f9e> +<0fab> <673d> +<0fac> <55c5> +<0fad> <9508> +<0fae> <79c0> +<0faf> <8896> +<0fb0> <7ee3> +<0fb1> <589f> +<0fb2> <620c> +<0fb3> <9700> +<0fb4> <865a> +<0fb5> <5618> +<0fb6> <987b> +<0fb7> <5f90> +<0fb8> <8bb8> +<0fb9> <84c4> +<0fba> <9157> +<0fbb> <53d9> +<0fbc> <65ed> +<0fbd> <5e8f> +<0fbe> <755c> +<0fbf> <6064> +<0fc0> <7d6e> +<0fc1> <5a7f> +<0fc2> <7eea> +<0fc3> <7eed> +<0fc4> <8f69> +<0fc5> <55a7> +<0fc6> <5ba3> +<0fc7> <60ac> +<0fc8> <65cb> +<0fc9> <7384> +<0fca> <9009> +<0fcb> <7663> +<0fcc> <7729> +<0fcd> <7eda> +<0fce> <9774> +<0fcf> <859b> +<0fd0> <5b66> +<0fd1> <7a74> +<0fd2> <96ea> +<0fd3> <8840> +<0fd4> <52cb> +<0fd5> <718f> +<0fd6> <5faa> +<0fd7> <65ec> +<0fd8> <8be2> +<0fd9> <5bfb> +<0fda> <9a6f> +<0fdb> <5de1> +<0fdc> <6b89> +<0fdd> <6c5b> +<0fde> <8bad> +<0fdf> <8baf> +<0fe0> <900a> +<0fe1> <8fc5> +<0fe2> <538b> +<0fe3> <62bc> +<0fe4> <9e26> +<0fe5> <9e2d> +<0fe6> <5440> +<0fe7> <4e2b> +<0fe8> <82bd> +<0fe9> <7259> +<0fea> <869c> +<0feb> <5d16> +<0fec> <8859> +<0fed> <6daf> +<0fee> <96c5> +<0fef> <54d1> +<0ff0> <4e9a> +<0ff1> <8bb6> +<0ff2> <7109> +<0ff3> <54bd> +<0ff4> <9609> +<0ff5> <70df> +<0ff6> <6df9> +<0ff7> <76d0> +<0ff8> <4e25> +<0ff9> <7814> +<0ffa> <8712> +<0ffb> <5ca9> +<0ffc> <5ef6> +<0ffd> <8a00> +<0ffe> <989c> +<0fff> <960e> +<1000> <708e> +<1001> <6cbf> +<1002> <5944> +<1003> <63a9> +<1004> <773c> +<1005> <884d> +<1006> <6f14> +<1007> <8273> +<1008> <5830> +<1009> <71d5> +<100a> <538c> +<100b> <781a> +endbfchar + +100 beginbfchar +<100c> <96c1> +<100d> <5501> +<100e> <5f66> +<100f> <7130> +<1010> <5bb4> +<1011> <8c1a> +<1012> <9a8c> +<1013> <6b83> +<1014> <592e> +<1015> <9e2f> +<1016> <79e7> +<1017> <6768> +<1018> <626c> +<1019> <4f6f> +<101a> <75a1> +<101b> <7f8a> +<101c> <6d0b> +<101d> <9633> +<101e> <6c27> +<101f> <4ef0> +<1020> <75d2> +<1021> <517b> +<1022> <6837> +<1023> <6f3e> +<1024> <9080> +<1025> <8170> +<1026> <5996> +<1027> <7476> +<1028> <6447> +<1029> <5c27> +<102a> <9065> +<102b> <7a91> +<102c> <8c23> +<102d> <59da> +<102e> <54ac> +<102f> <8200> +<1030> <836f> +<1031> <8981> +<1032> <8000> +<1033> <6930> +<1034> <564e> +<1035> <8036> +<1036> <7237> +<1037> <91ce> +<1038> <51b6> +<1039> <4e5f> +<103a> <9875> +<103b> <6396> +<103c> <4e1a> +<103d> <53f6> +<103e> <66f3> +<103f> <814b> +<1040> <591c> +<1041> <6db2> +<1042> <4e00> +<1043> <58f9> +<1044> <533b> +<1045> <63d6> +<1046> <94f1> +<1047> <4f9d> +<1048> <4f0a> +<1049> <8863> +<104a> <9890> +<104b> <5937> +<104c> <9057> +<104d> <79fb> +<104e> <4eea> +<104f> <80f0> +<1050> <7591> +<1051> <6c82> +<1052> <5b9c> +<1053> <59e8> +<1054> <5f5d> +<1055> <6905> +<1056> <8681> +<1057> <501a> +<1058> <5df2> +<1059> <4e59> +<105a> <77e3> +<105b> <4ee5> +<105c> <827a> +<105d> <6291> +<105e> <6613> +<105f> <9091> +<1060> <5c79> +<1061> <4ebf> +<1062> <5f79> +<1063> <81c6> +<1064> <9038> +<1065> <8084> +<1066> <75ab> +<1067> <4ea6> +<1068> <88d4> +<1069> <610f> +<106a> <6bc5> +<106b> <5fc6> +<106c> <4e49> +<106d> <76ca> +<106e> <6ea2> +<106f> <8be3> +endbfchar + +100 beginbfchar +<1070> <8bae> +<1071> <8c0a> +<1072> <8bd1> +<1073> <5f02> +<1074> <7ffc> +<1075> <7fcc> +<1076> <7ece> +<1077> <8335> +<1078> <836b> +<1079> <56e0> +<107a> <6bb7> +<107b> <97f3> +<107c> <9634> +<107d> <59fb> +<107e> <541f> +<107f> <94f6> +<1080> <6deb> +<1081> <5bc5> +<1082> <996e> +<1083> <5c39> +<1084> <5f15> +<1085> <9690> +<1086> <5370> +<1087> <82f1> +<1088> <6a31> +<1089> <5a74> +<108a> <9e70> +<108b> <5e94> +<108c> <7f28> +<108d> <83b9> +<1090> <8367> +<1091> <8747> +<1092> <8fce> +<1093> <8d62> +<1094> <76c8> +<1095> <5f71> +<1096> <9896> +<1097> <786c> +<1098> <6620> +<1099> <54df> +<109a> <62e5> +<109b> <4f63> +<109c> <81c3> +<109d> <75c8> +<109e> <5eb8> +<109f> <96cd> +<10a0> <8e0a> +<10a1> <86f9> +<10a2> <548f> +<10a3> <6cf3> +<10a4> <6d8c> +<10a5> <6c38> +<10a6> <607f> +<10a7> <52c7> +<10a8> <7528> +<10a9> <5e7d> +<10aa> <4f18> +<10ab> <60a0> +<10ac> <5fe7> +<10ad> <5c24> +<10ae> <7531> +<10af> <90ae> +<10b0> <94c0> +<10b1> <72b9> +<10b2> <6cb9> +<10b3> <6e38> +<10b4> <9149> +<10b5> <6709> +<10b6> <53cb> +<10b7> <53f3> +<10b8> <4f51> +<10b9> <91c9> +<10ba> <8bf1> +<10bb> <53c8> +<10bc> <5e7c> +<10bd> <8fc2> +<10be> <6de4> +<10bf> <4e8e> +<10c0> <76c2> +<10c1> <6986> +<10c2> <865e> +<10c3> <611a> +<10c4> <8206> +<10c5> <4f59> +<10c6> <4fde> +<10c7> <903e> +<10c8> <9c7c> +<10c9> <6109> +<10ca> <6e1d> +<10cb> <6e14> +<10cc> <9685> +<10cd> <4e88> +<10ce> <5a31> +<10cf> <96e8> +<10d0> <4e0e> +<10d1> <5c7f> +<10d2> <79b9> +<10d3> <5b87> +<10d4> <8bed> +<10d5> <7fbd> +endbfchar + +100 beginbfchar +<10d6> <7389> +<10d7> <57df> +<10d8> <828b> +<10d9> <90c1> +<10da> <5401> +<10db> <9047> +<10dc> <55bb> +<10dd> <5cea> +<10de> <5fa1> +<10df> <6108> +<10e0> <6b32> +<10e1> <72f1> +<10e2> <80b2> +<10e3> <8a89> +<10e4> <6d74> +<10e5> <5bd3> +<10e6> <88d5> +<10e7> <9884> +<10e8> <8c6b> +<10e9> <9a6d> +<10ea> <9e33> +<10eb> <6e0a> +<10ec> <51a4> +<10ed> <5143> +<10ee> <57a3> +<10ef> <8881> +<10f0> <539f> +<10f1> <63f4> +<10f2> <8f95> +<10f3> <56ed> +<10f4> <5458> +<10f5> <5706> +<10f6> <733f> +<10f7> <6e90> +<10f8> <7f18> +<10f9> <8fdc> +<10fa> <82d1> +<10fb> <613f> +<10fc> <6028> +<10fd> <9662> +<10fe> <66f0> +<10ff> <7ea6> +<1100> <8d8a> +<1101> <8dc3> +<1102> <94a5> +<1103> <5cb3> +<1104> <7ca4> +<1105> <6708> +<1106> <60a6> +<1107> <9605> +<1108> <8018> +<1109> <4e91> +<110a> <90e7> +<110b> <5300> +<110c> <9668> +<110d> <5141> +<110e> <8fd0> +<110f> <8574> +<1110> <915d> +<1111> <6655> +<1112> <97f5> +<1113> <5b55> +<1114> <531d> +<1115> <7838> +<1116> <6742> +<1117> <683d> +<1118> <54c9> +<1119> <707e> +<111a> <5bb0> +<111b> <8f7d> +<111c> <518d> +<111d> <5728> +<111e> <54b1> +<111f> <6512> +<1120> <6682> +<1121> <8d5e> +<1122> <8d43> +<1123> <810f> +<1124> <846c> +<1125> <906d> +<1126> <7cdf> +<1127> <51ff> +<1128> <85fb> +<1129> <67a3> +<112a> <65e9> +<112b> <6fa1> +<112c> <86a4> +<112d> <8e81> +<112e> <566a> +<112f> <9020> +<1130> <7682> +<1131> <7076> +<1132> <71e5> +<1133> <8d23> +<1134> <62e9> +<1135> <5219> +<1136> <6cfd> +<1137> <8d3c> +<1138> <600e> +<1139> <589e> +endbfchar + +100 beginbfchar +<113a> <618e> +<113b> <66fe> +<113c> <8d60> +<113d> <624e> +<113e> <55b3> +<113f> <6e23> +<1140> <672d> +<1141> <8f67> +<1142> <94e1> +<1143> <95f8> +<1144> <7728> +<1145> <6805> +<1146> <69a8> +<1147> <548b> +<1148> <4e4d> +<1149> <70b8> +<114a> <8bc8> +<114b> <6458> +<114c> <658b> +<114d> <5b85> +<114e> <7a84> +<114f> <503a> +<1150> <5be8> +<1151> <77bb> +<1152> <6be1> +<1153> <8a79> +<1154> <7c98> +<1155> <6cbe> +<1156> <76cf> +<1157> <65a9> +<1158> <8f97> +<1159> <5d2d> +<115a> <5c55> +<115b> <8638> +<115c> <6808> +<115d> <5360> +<115e> <6218> +<115f> <7ad9> +<1160> <6e5b> +<1161> <7efd> +<1162> <6a1f> +<1163> <7ae0> +<1164> <5f70> +<1165> <6f33> +<1166> <5f20> +<1167> <638c> +<1168> <6da8> +<1169> <6756> +<116a> <4e08> +<116b> <5e10> +<116c> <8d26> +<116d> <4ed7> +<116e> <80c0> +<116f> <7634> +<1170> <969c> +<1171> <62db> +<1172> <662d> +<1173> <627e> +<1174> <6cbc> +<1175> <8d75> +<1176> <7167> +<1177> <7f69> +<1178> <5146> +<1179> <8087> +<117a> <53ec> +<117b> <906e> +<117c> <6298> +<117d> <54f2> +<117e> <86f0> +<117f> <8f99> +<1180> <8005> +<1181> <9517> +<1182> <8517> +<1183> <8fd9> +<1184> <6d59> +<1185> <73cd> +<1186> <659f> +<1187> <771f> +<1188> <7504> +<1189> <7827> +<118a> <81fb> +<118b> <8d1e> +<118c> <9488> +<118d> <4fa6> +<118e> <6795> +<118f> <75b9> +<1190> <8bca> +<1191> <9707> +<1192> <632f> +<1193> <9547> +<1194> <9635> +<1195> <84b8> +<1196> <6323> +<1197> <7741> +<1198> <5f81> +<1199> <72f0> +<119a> <4e89> +<119b> <6014> +<119c> <6574> +<119d> <62ef> +endbfchar + +100 beginbfchar +<119e> <6b63> +<119f> <653f> +<11a0> <5e27> +<11a1> <75c7> +<11a2> <90d1> +<11a3> <8bc1> +<11a4> <829d> +<11a5> <679d> +<11a6> <652f> +<11a7> <5431> +<11a8> <8718> +<11a9> <77e5> +<11aa> <80a2> +<11ab> <8102> +<11ac> <6c41> +<11ad> <4e4b> +<11ae> <7ec7> +<11af> <804c> +<11b0> <76f4> +<11b1> <690d> +<11b2> <6b96> +<11b3> <6267> +<11b4> <503c> +<11b5> <4f84> +<11b6> <5740> +<11b7> <6307> +<11b8> <6b62> +<11b9> <8dbe> +<11ba> <53ea> +<11bb> <65e8> +<11bc> <7eb8> +<11bd> <5fd7> +<11be> <631a> +<11bf> <63b7> +<11c2> <7f6e> +<11c3> <5e1c> +<11c4> <5cd9> +<11c5> <5236> +<11c6> <667a> +<11c7> <79e9> +<11c8> <7a1a> +<11c9> <8d28> +<11ca> <7099> +<11cb> <75d4> +<11cc> <6ede> +<11cd> <6cbb> +<11ce> <7a92> +<11cf> <4e2d> +<11d0> <76c5> +<11d1> <5fe0> +<11d2> <949f> +<11d3> <8877> +<11d4> <7ec8> +<11d5> <79cd> +<11d6> <80bf> +<11d7> <91cd> +<11d8> <4ef2> +<11d9> <4f17> +<11da> <821f> +<11db> <5468> +<11dc> <5dde> +<11dd> <6d32> +<11de> <8bcc> +<11df> <7ca5> +<11e0> <8f74> +<11e1> <8098> +<11e2> <5e1a> +<11e3> <5492> +<11e4> <76b1> +<11e5> <5b99> +<11e6> <663c> +<11e7> <9aa4> +<11e8> <73e0> +<11e9> <682a> +<11ea> <86db> +<11eb> <6731> +<11ec> <732a> +<11ed> <8bf8> +<11ee> <8bdb> +<11ef> <9010> +<11f0> <7af9> +<11f1> <70db> +<11f2> <716e> +<11f3> <62c4> +<11f4> <77a9> +<11f5> <5631> +<11f6> <4e3b> +<11f7> <8457> +<11f8> <67f1> +<11f9> <52a9> +<11fa> <86c0> +<11fb> <8d2e> +<11fc> <94f8> +<11fd> <7b51> +<11fe> <4f4f> +<11ff> <6ce8> +<1200> <795d> +<1201> <9a7b> +<1202> <6293> +<1203> <722a> +endbfchar + +100 beginbfchar +<1204> <62fd> +<1205> <4e13> +<1206> <7816> +<1207> <8f6c> +<1208> <64b0> +<1209> <8d5a> +<120a> <7bc6> +<120b> <6869> +<120c> <5e84> +<120d> <88c5> +<120e> <5986> +<120f> <649e> +<1210> <58ee> +<1211> <72b6> +<1212> <690e> +<1213> <9525> +<1214> <8ffd> +<1215> <8d58> +<1216> <5760> +<1217> <7f00> +<1218> <8c06> +<1219> <51c6> +<121a> <6349> +<121b> <62d9> +<121c> <5353> +<121d> <684c> +<121e> <7422> +<121f> <8301> +<1220> <914c> +<1221> <5544> +<1222> <7740> +<1223> <707c> +<1224> <6d4a> +<1225> <5179> +<1226> <54a8> +<1227> <8d44> +<1228> <59ff> +<1229> <6ecb> +<122a> <6dc4> +<122b> <5b5c> +<122c> <7d2b> +<122d> <4ed4> +<122e> <7c7d> +<122f> <6ed3> +<1230> <5b50> +<1231> <81ea> +<1232> <6e0d> +<1233> <5b57> +<1234> <9b03> +<1235> <68d5> +<1236> <8e2a> +<1237> <5b97> +<1238> <7efc> +<1239> <603b> +<123a> <7eb5> +<123b> <90b9> +<123c> <8d70> +<123d> <594f> +<123e> <63cd> +<123f> <79df> +<1240> <8db3> +<1241> <5352> +<1242> <65cf> +<1243> <7956> +<1244> <8bc5> +<1245> <963b> +<1246> <7ec4> +<1247> <94bb> +<1248> <7e82> +<1249> <5634> +<124a> <9189> +<124b> <6700> +<124c> <7f6a> +<124d> <5c0a> +<124e> <9075> +<124f> <6628> +<1250> <5de6> +<1251> <4f50> +<1252> <67de> +<1253> <505a> +<1254> <4f5c> +<1255> <5750> +<1256> <5ea7> +<1257> <4e8d> +<1258> <4e0c> +<1259> <5140> +<125a> <4e10> +<125b> <5eff> +<125c> <5345> +<125d> <4e15> +<125e> <4e98> +<125f> <4e1e> +<1260> <9b32> +<1261> <5b6c> +<1262> <5669> +<1263> <4e28> +<1264> <79ba> +<1265> <4e3f> +<1266> <5315> +<1267> <4e47> +endbfchar + +100 beginbfchar +<1268> <592d> +<1269> <723b> +<126a> <536e> +<126b> <6c10> +<126c> <56df> +<126d> <80e4> +<126e> <9997> +<126f> <6bd3> +<1270> <777e> +<1271> <9f17> +<1272> <4e36> +<1273> <4e9f> +<1274> <9f10> +<1275> <4e5c> +<1276> <4e69> +<1277> <4e93> +<1278> <8288> +<1279> <5b5b> +<127a> <556c> +<127b> <560f> +<127c> <4ec4> +<127d> <538d> +<127e> <539d> +<127f> <53a3> +<1280> <53a5> +<1281> <53ae> +<1282> <9765> +<1283> <8d5d> +<1284> <531a> +<1285> <53f5> +<1286> <5326> +<1287> <532e> +<1288> <533e> +<1289> <8d5c> +<128a> <5366> +<128b> <5363> +<128c> <5202> +<128d> <5208> +<128e> <520e> +<128f> <522d> +<1290> <5233> +<1293> <524c> +<1294> <525e> +<1295> <5261> +<1296> <525c> +<1297> <84af> +<1298> <527d> +<1299> <5282> +<129a> <5281> +<129b> <5290> +<129c> <5293> +<129d> <5182> +<129e> <7f54> +<129f> <4ebb> +<12a0> <4ec3> +<12a1> <4ec9> +<12a2> <4ec2> +<12a3> <4ee8> +<12a4> <4ee1> +<12a5> <4eeb> +<12a6> <4ede> +<12a7> <4f1b> +<12a8> <4ef3> +<12a9> <4f22> +<12aa> <4f64> +<12ab> <4ef5> +<12ac> <4f25> +<12ad> <4f27> +<12ae> <4f09> +<12af> <4f2b> +<12b0> <4f5e> +<12b1> <4f67> +<12b2> <6538> +<12b3> <4f5a> +<12b4> <4f5d> +<12b5> <4f5f> +<12b6> <4f57> +<12b7> <4f32> +<12b8> <4f3d> +<12b9> <4f76> +<12ba> <4f74> +<12bb> <4f91> +<12bc> <4f89> +<12bd> <4f83> +<12be> <4f8f> +<12bf> <4f7e> +<12c0> <4f7b> +<12c1> <4faa> +<12c2> <4f7c> +<12c3> <4fac> +<12c4> <4f94> +<12c5> <4fe6> +<12c6> <4fe8> +<12c7> <4fea> +<12c8> <4fc5> +<12c9> <4fda> +<12ca> <4fe3> +<12cb> <4fdc> +<12cc> <4fd1> +<12cd> <4fdf> +endbfchar + +100 beginbfchar +<12ce> <4ff8> +<12cf> <5029> +<12d0> <504c> +<12d1> <4ff3> +<12d2> <502c> +<12d3> <500f> +<12d4> <502e> +<12d5> <502d> +<12d6> <4ffe> +<12d7> <501c> +<12d8> <500c> +<12d9> <5025> +<12da> <5028> +<12db> <507e> +<12dc> <5043> +<12dd> <5055> +<12de> <5048> +<12df> <504e> +<12e0> <506c> +<12e1> <507b> +<12e2> <50a5> +<12e3> <50a7> +<12e4> <50a9> +<12e5> <50ba> +<12e6> <50d6> +<12e7> <5106> +<12e8> <50ed> +<12e9> <50ec> +<12ea> <50e6> +<12eb> <50ee> +<12ec> <5107> +<12ed> <510b> +<12ee> <4edd> +<12ef> <6c3d> +<12f0> <4f58> +<12f1> <4f65> +<12f2> <4fce> +<12f3> <9fa0> +<12f4> <6c46> +<12f5> <7c74> +<12f6> <516e> +<12f7> <5dfd> +<12f8> <9ec9> +<12f9> <9998> +<12fa> <5181> +<12fb> <5914> +<12fc> <52f9> +<12fd> <530d> +<12fe> <8a07> +<12ff> <5310> +<1300> <51eb> +<1301> <5919> +<1302> <5155> +<1303> <4ea0> +<1304> <5156> +<1305> <4eb3> +<1306> <886e> +<1307> <88a4> +<1308> <4eb5> +<1309> <8114> +<130a> <88d2> +<130b> <7980> +<130c> <5b34> +<130d> <8803> +<130e> <7fb8> +<130f> <51ab> +<1310> <51b1> +<1311> <51bd> +<1312> <51bc> +<1313> <51c7> +<1314> <5196> +<1315> <51a2> +<1316> <51a5> +<1317> <8ba0> +<131a> <8baa> +<131d> <8bb7> +<1320> <8bcb> +<1321> <8bcf> +<1322> <8bce> +<1326> <8bd6> +<1329> <8bdc> +<132c> <8be4> +<132f> <8bee> +<1330> <8bf0> +<1331> <8bf3> +<1332> <8bf6> +<1333> <8bf9> +<1334> <8bfc> +<1337> <8c02> +<1338> <8c04> +<1339> <8c07> +<133a> <8c0c> +<133b> <8c0f> +<1341> <8c19> +<1342> <8c1b> +<1343> <8c18> +<1344> <8c1d> +<1348> <8c25> +<1349> <8c27> +<1352> <5369> +endbfchar + +100 beginbfchar +<1353> <537a> +<1354> <961d> +<1355> <9622> +<1356> <9621> +<1357> <9631> +<1358> <962a> +<1359> <963d> +<135a> <963c> +<135b> <9642> +<135c> <9649> +<135d> <9654> +<135e> <965f> +<135f> <9667> +<1360> <966c> +<1361> <9672> +<1362> <9674> +<1363> <9688> +<1364> <968d> +<1365> <9697> +<1366> <96b0> +<1367> <9097> +<1368> <909b> +<1369> <909d> +<136a> <9099> +<136b> <90ac> +<136c> <90a1> +<136d> <90b4> +<136e> <90b3> +<136f> <90b6> +<1370> <90ba> +<1371> <90b8> +<1372> <90b0> +<1373> <90cf> +<1374> <90c5> +<1375> <90be> +<1376> <90d0> +<1377> <90c4> +<1378> <90c7> +<1379> <90d3> +<137a> <90e6> +<137b> <90e2> +<137c> <90dc> +<137d> <90d7> +<137e> <90db> +<137f> <90eb> +<1380> <90ef> +<1381> <90fe> +<1382> <9104> +<1383> <9122> +<1384> <911e> +<1385> <9123> +<1386> <9131> +<1387> <912f> +<1388> <9139> +<1389> <9143> +<138a> <9146> +<138b> <520d> +<138c> <5942> +<138d> <52a2> +<1390> <52be> +<1391> <54ff> +<1392> <52d0> +<1393> <52d6> +<1394> <52f0> +<1395> <53df> +<1396> <71ee> +<1397> <77cd> +<1398> <5ef4> +<1399> <51f5> +<139a> <51fc> +<139b> <9b2f> +<139c> <53b6> +<139d> <5f01> +<139e> <755a> +<139f> <5def> +<13a0> <574c> +<13a1> <57a9> +<13a2> <57a1> +<13a3> <587e> +<13a4> <58bc> +<13a5> <58c5> +<13a6> <58d1> +<13a7> <5729> +<13a8> <572c> +<13a9> <572a> +<13aa> <5733> +<13ab> <5739> +<13ae> <575c> +<13af> <573b> +<13b0> <5742> +<13b1> <5769> +<13b2> <5785> +<13b3> <576b> +<13b4> <5786> +<13b5> <577c> +<13b6> <577b> +<13b7> <5768> +<13b8> <576d> +<13b9> <5776> +<13ba> <5773> +endbfchar + +100 beginbfchar +<13bb> <57ad> +<13bc> <57a4> +<13bd> <578c> +<13be> <57b2> +<13bf> <57cf> +<13c0> <57a7> +<13c1> <57b4> +<13c2> <5793> +<13c3> <57a0> +<13c4> <57d5> +<13c5> <57d8> +<13c6> <57da> +<13c7> <57d9> +<13c8> <57d2> +<13c9> <57b8> +<13ca> <57f4> +<13cb> <57ef> +<13cc> <57f8> +<13cd> <57e4> +<13ce> <57dd> +<13cf> <580b> +<13d0> <580d> +<13d1> <57fd> +<13d2> <57ed> +<13d3> <5800> +<13d4> <581e> +<13d5> <5819> +<13d6> <5844> +<13d7> <5820> +<13d8> <5865> +<13d9> <586c> +<13da> <5881> +<13db> <5889> +<13dc> <589a> +<13dd> <5880> +<13de> <99a8> +<13df> <9f19> +<13e0> <61ff> +<13e1> <8279> +<13e2> <827d> +<13e3> <827f> +<13e4> <828f> +<13e5> <828a> +<13e6> <82a8> +<13e7> <8284> +<13e8> <828e> +<13e9> <8291> +<13ea> <8297> +<13eb> <8299> +<13ec> <82ab> +<13ed> <82b8> +<13ee> <82be> +<13ef> <82b0> +<13f0> <82c8> +<13f1> <82ca> +<13f2> <82e3> +<13f3> <8298> +<13f4> <82b7> +<13f5> <82ae> +<13f8> <82c1> +<13f9> <82a9> +<13fa> <82b4> +<13fb> <82a1> +<13fc> <82aa> +<13fd> <829f> +<13fe> <82c4> +<13ff> <82ce> +<1400> <82a4> +<1401> <82e1> +<1402> <8309> +<1403> <82f7> +<1404> <82e4> +<1405> <830f> +<1406> <8307> +<1407> <82dc> +<1408> <82f4> +<1409> <82d2> +<140a> <82d8> +<140b> <830c> +<140c> <82fb> +<140d> <82d3> +<140e> <8311> +<140f> <831a> +<1410> <8306> +<1413> <82e0> +<1414> <82d5> +<1415> <831c> +<1416> <8351> +<1419> <8308> +<141a> <8392> +<141b> <833c> +<141c> <8334> +<141d> <8331> +<141e> <839b> +<141f> <835e> +<1420> <832f> +<1421> <834f> +<1422> <8347> +<1423> <8343> +<1424> <835f> +endbfchar + +100 beginbfchar +<1425> <8340> +<1426> <8317> +<1427> <8360> +<1428> <832d> +<1429> <833a> +<142a> <8333> +<142b> <8366> +<142c> <8365> +<142d> <8368> +<142e> <831b> +<142f> <8369> +<1430> <836c> +<1431> <836a> +<1434> <83b0> +<1435> <8378> +<1438> <83a0> +<1439> <83aa> +<143a> <8393> +<143b> <839c> +<143c> <8385> +<143d> <837c> +<143e> <83b6> +<143f> <83a9> +<1440> <837d> +<1441> <83b8> +<1442> <837b> +<1443> <8398> +<1444> <839e> +<1445> <83a8> +<1446> <83ba> +<1447> <83bc> +<1448> <83c1> +<1449> <8401> +<144a> <83e5> +<144b> <83d8> +<144c> <5807> +<144d> <8418> +<144e> <840b> +<144f> <83dd> +<1450> <83fd> +<1451> <83d6> +<1452> <841c> +<1453> <8438> +<1454> <8411> +<1455> <8406> +<1456> <83d4> +<1457> <83df> +<1458> <840f> +<1459> <8403> +<145c> <83ea> +<145d> <83c5> +<145e> <83c0> +<145f> <8426> +<1460> <83f0> +<1461> <83e1> +<1462> <845c> +<1463> <8451> +<1464> <845a> +<1465> <8459> +<1466> <8473> +<1469> <847a> +<146a> <8489> +<146b> <8478> +<146c> <843c> +<146d> <8446> +<146e> <8469> +<146f> <8476> +<1470> <848c> +<1471> <848e> +<1472> <8431> +<1473> <846d> +<1474> <84c1> +<1475> <84cd> +<1476> <84d0> +<1477> <84e6> +<1478> <84bd> +<1479> <84d3> +<147a> <84ca> +<147b> <84bf> +<147c> <84ba> +<147d> <84e0> +<147e> <84a1> +<147f> <84b9> +<1480> <84b4> +<1481> <8497> +<1482> <84e5> +<1483> <84e3> +<1484> <850c> +<1485> <750d> +<1486> <8538> +<1487> <84f0> +<1488> <8539> +<1489> <851f> +<148a> <853a> +<148b> <8556> +<148c> <853b> +<148d> <84ff> +<148e> <84fc> +<148f> <8559> +<1490> <8548> +endbfchar + +100 beginbfchar +<1491> <8568> +<1492> <8564> +<1493> <855e> +<1494> <857a> +<1495> <77a2> +<1496> <8543> +<1497> <8572> +<1498> <857b> +<1499> <85a4> +<149a> <85a8> +<149b> <8587> +<149c> <858f> +<149d> <8579> +<149e> <85ae> +<149f> <859c> +<14a0> <8585> +<14a1> <85b9> +<14a2> <85b7> +<14a3> <85b0> +<14a4> <85d3> +<14a5> <85c1> +<14a6> <85dc> +<14a7> <85ff> +<14a8> <8627> +<14a9> <8605> +<14aa> <8629> +<14ab> <8616> +<14ac> <863c> +<14ad> <5efe> +<14ae> <5f08> +<14af> <593c> +<14b0> <5941> +<14b1> <8037> +<14b2> <5955> +<14b3> <595a> +<14b4> <5958> +<14b5> <530f> +<14b6> <5c22> +<14b7> <5c25> +<14b8> <5c2c> +<14b9> <5c34> +<14ba> <624c> +<14bb> <626a> +<14bc> <629f> +<14bd> <62bb> +<14be> <62ca> +<14bf> <62da> +<14c0> <62d7> +<14c1> <62ee> +<14c2> <6322> +<14c3> <62f6> +<14c4> <6339> +<14c5> <634b> +<14c6> <6343> +<14c7> <63ad> +<14c8> <63f6> +<14c9> <6371> +<14ca> <637a> +<14cb> <638e> +<14cc> <63b4> +<14cd> <636d> +<14ce> <63ac> +<14cf> <638a> +<14d0> <6369> +<14d1> <63ae> +<14d2> <63bc> +<14d3> <63f2> +<14d4> <63f8> +<14d5> <63e0> +<14d6> <63ff> +<14d7> <63c4> +<14d8> <63de> +<14d9> <63ce> +<14da> <6452> +<14db> <63c6> +<14dc> <63be> +<14dd> <6445> +<14de> <6441> +<14df> <640b> +<14e0> <641b> +<14e1> <6420> +<14e2> <640c> +<14e3> <6426> +<14e4> <6421> +<14e5> <645e> +<14e6> <6484> +<14e7> <646d> +<14e8> <6496> +<14e9> <647a> +<14ec> <6499> +<14ed> <64ba> +<14ee> <64c0> +<14ef> <64d0> +<14f0> <64d7> +<14f1> <64e4> +<14f2> <64e2> +<14f3> <6509> +<14f4> <6525> +<14f5> <652e> +<14f6> <5f0b> +endbfchar + +100 beginbfchar +<14f7> <5fd2> +<14f8> <7519> +<14f9> <5f11> +<14fa> <535f> +<14fb> <53f1> +<14fc> <53fd> +<14fd> <53e9> +<14fe> <53e8> +<14ff> <53fb> +<1500> <5412> +<1501> <5416> +<1502> <5406> +<1503> <544b> +<1507> <5456> +<1508> <5443> +<1509> <5421> +<150a> <5457> +<150b> <5459> +<150c> <5423> +<150d> <5432> +<150e> <5482> +<150f> <5494> +<1510> <5477> +<1511> <5471> +<1512> <5464> +<1515> <5484> +<1516> <5476> +<1517> <5466> +<1518> <549d> +<1519> <54d0> +<151a> <54ad> +<151b> <54c2> +<151c> <54b4> +<151d> <54d2> +<151e> <54a7> +<151f> <54a6> +<1522> <5472> +<1523> <54a3> +<1524> <54d5> +<1525> <54bb> +<1526> <54bf> +<1527> <54cc> +<152a> <54dc> +<152d> <54a4> +<152e> <54dd> +<152f> <54cf> +<1530> <54de> +<1531> <551b> +<1532> <54e7> +<1533> <5520> +<1534> <54fd> +<1535> <5514> +<1536> <54f3> +<1539> <550f> +<153a> <5511> +<153b> <5527> +<153c> <552a> +<153d> <5567> +<153e> <558f> +<153f> <55b5> +<1540> <5549> +<1541> <556d> +<1542> <5541> +<1543> <5555> +<1544> <553f> +<1545> <5550> +<1546> <553c> +<1547> <5537> +<1548> <5556> +<154c> <5533> +<154d> <5530> +<154e> <555c> +<154f> <558b> +<1550> <55d2> +<1551> <5583> +<1552> <55b1> +<1553> <55b9> +<1554> <5588> +<1555> <5581> +<1556> <559f> +<1557> <557e> +<1558> <55d6> +<1559> <5591> +<155a> <557b> +<155b> <55df> +<155e> <5594> +<155f> <5599> +<1560> <55ea> +<1561> <55f7> +<1562> <55c9> +<1563> <561f> +<1564> <55d1> +<1567> <55d4> +<1568> <55e6> +<1569> <55dd> +<156a> <55c4> +<156b> <55ef> +<156c> <55e5> +<1571> <55e8> +<1572> <55f5> +endbfchar + +100 beginbfchar +<1573> <55e4> +<1574> <8f94> +<1575> <561e> +<1576> <5608> +<1577> <560c> +<1578> <5601> +<1579> <5624> +<157a> <5623> +<157b> <55fe> +<157c> <5600> +<157d> <5627> +<157e> <562d> +<157f> <5658> +<1580> <5639> +<1581> <5657> +<1582> <562c> +<1583> <564d> +<1584> <5662> +<1585> <5659> +<1586> <565c> +<1587> <564c> +<1588> <5654> +<1589> <5686> +<158a> <5664> +<158b> <5671> +<158c> <566b> +<158f> <5685> +<1590> <5693> +<1591> <56af> +<1592> <56d4> +<1593> <56d7> +<1594> <56dd> +<1595> <56e1> +<1596> <56f5> +<1597> <56eb> +<1598> <56f9> +<1599> <56ff> +<159a> <5704> +<159b> <570a> +<159c> <5709> +<159d> <571c> +<159e> <5e0f> +<159f> <5e19> +<15a0> <5e14> +<15a1> <5e11> +<15a2> <5e31> +<15a5> <5e37> +<15a6> <5e44> +<15a7> <5e54> +<15a8> <5e5b> +<15a9> <5e5e> +<15aa> <5e61> +<15ab> <5c8c> +<15ac> <5c7a> +<15ad> <5c8d> +<15ae> <5c90> +<15af> <5c96> +<15b0> <5c88> +<15b3> <5c91> +<15b4> <5c9a> +<15b5> <5c9c> +<15b6> <5cb5> +<15b7> <5ca2> +<15b8> <5cbd> +<15b9> <5cac> +<15ba> <5cab> +<15bb> <5cb1> +<15bc> <5ca3> +<15bd> <5cc1> +<15be> <5cb7> +<15bf> <5cc4> +<15c0> <5cd2> +<15c1> <5ce4> +<15c2> <5ccb> +<15c3> <5ce5> +<15c6> <5d27> +<15c7> <5d26> +<15c8> <5d2e> +<15c9> <5d24> +<15ca> <5d1e> +<15cb> <5d06> +<15cc> <5d1b> +<15cd> <5d58> +<15ce> <5d3e> +<15cf> <5d34> +<15d0> <5d3d> +<15d1> <5d6c> +<15d2> <5d5b> +<15d3> <5d6f> +<15d4> <5d5d> +<15d5> <5d6b> +<15d6> <5d4b> +<15d7> <5d4a> +<15d8> <5d69> +<15d9> <5d74> +<15da> <5d82> +<15db> <5d99> +<15dc> <5d9d> +<15dd> <8c73> +<15de> <5db7> +endbfchar + +100 beginbfchar +<15df> <5dc5> +<15e0> <5f73> +<15e1> <5f77> +<15e2> <5f82> +<15e3> <5f87> +<15e4> <5f89> +<15e5> <5f8c> +<15e6> <5f95> +<15e7> <5f99> +<15e8> <5f9c> +<15e9> <5fa8> +<15ea> <5fad> +<15eb> <5fb5> +<15ec> <5fbc> +<15ed> <8862> +<15ee> <5f61> +<15ef> <72ad> +<15f0> <72b0> +<15f1> <72b4> +<15f4> <72c3> +<15f5> <72c1> +<15f6> <72ce> +<15f7> <72cd> +<15f8> <72d2> +<15f9> <72e8> +<15fa> <72ef> +<15fb> <72e9> +<15fc> <72f2> +<15fd> <72f4> +<15fe> <72f7> +<15ff> <7301> +<1600> <72f3> +<1601> <7303> +<1604> <7317> +<1605> <7313> +<1606> <7321> +<1607> <730a> +<1608> <731e> +<1609> <731d> +<160a> <7315> +<160b> <7322> +<160c> <7339> +<160d> <7325> +<160e> <732c> +<160f> <7338> +<1610> <7331> +<1611> <7350> +<1612> <734d> +<1613> <7357> +<1614> <7360> +<1615> <736c> +<1616> <736f> +<1617> <737e> +<1618> <821b> +<1619> <5925> +<161a> <98e7> +<161b> <5924> +<161c> <5902> +<161d> <9963> +<1624> <9974> +<1625> <9977> +<1626> <997d> +<1627> <9980> +<1628> <9984> +<1629> <9987> +<162a> <998a> +<162b> <998d> +<1631> <5e80> +<1632> <5e91> +<1633> <5e8b> +<1634> <5e96> +<1635> <5ea5> +<1636> <5ea0> +<1637> <5eb9> +<1638> <5eb5> +<1639> <5ebe> +<163a> <5eb3> +<163b> <8d53> +<163c> <5ed2> +<163d> <5ed1> +<163e> <5edb> +<163f> <5ee8> +<1640> <5eea> +<1641> <81ba> +<1642> <5fc4> +<1643> <5fc9> +<1644> <5fd6> +<1645> <5fcf> +<1646> <6003> +<1647> <5fee> +<1648> <6004> +<1649> <5fe1> +<164a> <5fe4> +<164b> <5ffe> +<164e> <5fea> +<164f> <5fed> +<1650> <5ff8> +<1651> <6019> +<1652> <6035> +<1653> <6026> +endbfchar + +100 beginbfchar +<1654> <601b> +<1655> <600f> +<1656> <600d> +<1657> <6029> +<1658> <602b> +<1659> <600a> +<165a> <603f> +<165b> <6021> +<165e> <607b> +<165f> <607a> +<1660> <6042> +<1661> <606a> +<1662> <607d> +<1663> <6096> +<1664> <609a> +<1665> <60ad> +<1666> <609d> +<1667> <6083> +<1668> <6092> +<1669> <608c> +<166a> <609b> +<166b> <60ec> +<166c> <60bb> +<166d> <60b1> +<166e> <60dd> +<166f> <60d8> +<1670> <60c6> +<1671> <60da> +<1672> <60b4> +<1673> <6120> +<1674> <6126> +<1675> <6115> +<1676> <6123> +<1677> <60f4> +<1678> <6100> +<1679> <610e> +<167a> <612b> +<167b> <614a> +<167c> <6175> +<167d> <61ac> +<167e> <6194> +<167f> <61a7> +<1680> <61b7> +<1681> <61d4> +<1682> <61f5> +<1683> <5fdd> +<1684> <96b3> +<1685> <95e9> +<1686> <95eb> +<1687> <95f1> +<1688> <95f3> +<168b> <95fc> +<168c> <95fe> +<168f> <9606> +<1690> <9608> +<1695> <960f> +<1696> <9612> +<169c> <4e2c> +<169d> <723f> +<169e> <6215> +<169f> <6c35> +<16a0> <6c54> +<16a1> <6c5c> +<16a2> <6c4a> +<16a3> <6ca3> +<16a4> <6c85> +<16a5> <6c90> +<16a6> <6c94> +<16a7> <6c8c> +<16aa> <6c74> +<16ab> <6c76> +<16ac> <6c86> +<16ad> <6ca9> +<16ae> <6cd0> +<16af> <6cd4> +<16b0> <6cad> +<16b3> <6cf1> +<16b4> <6cd7> +<16b5> <6cb2> +<16b6> <6ce0> +<16b7> <6cd6> +<16b8> <6cfa> +<16b9> <6ceb> +<16ba> <6cee> +<16bb> <6cb1> +<16bc> <6cd3> +<16bd> <6cef> +<16be> <6cfe> +<16bf> <6d39> +<16c0> <6d27> +<16c1> <6d0c> +<16c2> <6d43> +<16c3> <6d48> +<16c4> <6d07> +<16c5> <6d04> +<16c6> <6d19> +<16c7> <6d0e> +<16c8> <6d2b> +<16c9> <6d4d> +<16ca> <6d2e> +endbfchar + +100 beginbfchar +<16cb> <6d35> +<16cc> <6d1a> +<16cd> <6d4f> +<16ce> <6d52> +<16cf> <6d54> +<16d0> <6d33> +<16d1> <6d91> +<16d2> <6d6f> +<16d3> <6d9e> +<16d4> <6da0> +<16d5> <6d5e> +<16d8> <6d5c> +<16d9> <6d60> +<16da> <6d7c> +<16db> <6d63> +<16dc> <6e1a> +<16dd> <6dc7> +<16de> <6dc5> +<16df> <6dde> +<16e0> <6e0e> +<16e1> <6dbf> +<16e2> <6de0> +<16e3> <6e11> +<16e4> <6de6> +<16e5> <6ddd> +<16e6> <6dd9> +<16e7> <6e16> +<16e8> <6dab> +<16e9> <6e0c> +<16ea> <6dae> +<16eb> <6e2b> +<16ec> <6e6e> +<16ed> <6e4e> +<16ee> <6e6b> +<16ef> <6eb2> +<16f0> <6e5f> +<16f1> <6e86> +<16f4> <6e32> +<16f5> <6e25> +<16f6> <6e44> +<16f7> <6edf> +<16f8> <6eb1> +<16f9> <6e98> +<16fa> <6ee0> +<16fb> <6f2d> +<16fc> <6ee2> +<16fd> <6ea5> +<16fe> <6ea7> +<16ff> <6ebd> +<1700> <6ebb> +<1701> <6eb7> +<1702> <6ed7> +<1703> <6eb4> +<1704> <6ecf> +<1705> <6e8f> +<1706> <6ec2> +<1707> <6e9f> +<1708> <6f62> +<170b> <6f24> +<170c> <6f15> +<170d> <6ef9> +<170e> <6f2f> +<170f> <6f36> +<1710> <6f4b> +<1711> <6f74> +<1712> <6f2a> +<1713> <6f09> +<1714> <6f29> +<1715> <6f89> +<1716> <6f8d> +<1717> <6f8c> +<1718> <6f78> +<1719> <6f72> +<171a> <6f7c> +<171b> <6f7a> +<171c> <6fd1> +<171d> <6fc9> +<171e> <6fa7> +<171f> <6fb9> +<1720> <6fb6> +<1721> <6fc2> +<1722> <6fe1> +<1723> <6fee> +<1724> <6fde> +<1725> <6fe0> +<1726> <6fef> +<1727> <701a> +<1728> <7023> +<1729> <701b> +<172a> <7039> +<172b> <7035> +<172c> <704f> +<172d> <705e> +<172e> <5b80> +<172f> <5b84> +<1730> <5b95> +<1731> <5b93> +<1732> <5ba5> +<1733> <5bb8> +<1734> <752f> +endbfchar + +100 beginbfchar +<1735> <9a9e> +<1736> <6434> +<1737> <5be4> +<1738> <5bee> +<1739> <8930> +<173a> <5bf0> +<173b> <8e47> +<173c> <8b07> +<173d> <8fb6> +<173e> <8fd3> +<173f> <8fd5> +<1740> <8fe5> +<1741> <8fee> +<1742> <8fe4> +<1743> <8fe9> +<1744> <8fe6> +<1745> <8ff3> +<1746> <8fe8> +<1747> <9005> +<1748> <9004> +<1749> <900b> +<174a> <9026> +<174b> <9011> +<174c> <900d> +<174d> <9016> +<174e> <9021> +<1751> <902d> +<1752> <902f> +<1753> <9044> +<1756> <9050> +<1757> <9068> +<1758> <9058> +<1759> <9062> +<175a> <905b> +<175b> <66b9> +<175c> <9074> +<175d> <907d> +<175e> <9082> +<175f> <9088> +<1760> <9083> +<1761> <908b> +<1762> <5f50> +<1763> <5f57> +<1764> <5f56> +<1765> <5f58> +<1766> <5c3b> +<1767> <54ab> +<1768> <5c50> +<1769> <5c59> +<176a> <5b71> +<176b> <5c63> +<176c> <5c66> +<176d> <7fbc> +<176e> <5f2a> +<176f> <5f29> +<1770> <5f2d> +<1771> <8274> +<1772> <5f3c> +<1773> <9b3b> +<1774> <5c6e> +<1775> <5981> +<1776> <5983> +<1777> <598d> +<177a> <59a3> +<177b> <5997> +<177c> <59ca> +<177d> <59ab> +<177e> <599e> +<177f> <59a4> +<1780> <59d2> +<1781> <59b2> +<1782> <59af> +<1783> <59d7> +<1784> <59be> +<1787> <59dd> +<1788> <5a08> +<1789> <59e3> +<178a> <59d8> +<178b> <59f9> +<178c> <5a0c> +<178d> <5a09> +<178e> <5a32> +<178f> <5a34> +<1790> <5a11> +<1791> <5a23> +<1792> <5a13> +<1793> <5a40> +<1794> <5a67> +<1795> <5a4a> +<1796> <5a55> +<1797> <5a3c> +<1798> <5a62> +<1799> <5a75> +<179a> <80ec> +<179b> <5aaa> +<179c> <5a9b> +<179d> <5a77> +<179e> <5a7a> +<179f> <5abe> +<17a0> <5aeb> +endbfchar + +100 beginbfchar +<17a1> <5ab2> +<17a2> <5ad2> +<17a3> <5ad4> +<17a4> <5ab8> +<17a5> <5ae0> +<17a6> <5ae3> +<17a7> <5af1> +<17a8> <5ad6> +<17a9> <5ae6> +<17aa> <5ad8> +<17ab> <5adc> +<17ac> <5b09> +<17ad> <5b17> +<17ae> <5b16> +<17af> <5b32> +<17b0> <5b37> +<17b1> <5b40> +<17b2> <5c15> +<17b3> <5c1c> +<17b4> <5b5a> +<17b5> <5b65> +<17b6> <5b73> +<17b7> <5b51> +<17b8> <5b53> +<17b9> <5b62> +<17ba> <9a75> +<17bd> <9a7a> +<17be> <9a7f> +<17bf> <9a7d> +<17c2> <9a85> +<17c3> <9a88> +<17c4> <9a8a> +<17c5> <9a90> +<17c8> <9a96> +<17c9> <9a98> +<17d1> <9aa5> +<17d2> <9aa7> +<17d3> <7e9f> +<17d4> <7ea1> +<17d5> <7ea3> +<17d6> <7ea5> +<17d9> <7ead> +<17da> <7eb0> +<17db> <7ebe> +<17df> <7ec9> +<17e2> <7ed0> +<17e3> <7ed4> +<17e4> <7ed7> +<17e5> <7edb> +<17e8> <7ee8> +<17e9> <7eeb> +<17ee> <7f0d> +<17ef> <7ef6> +<17f2> <7efe> +<17fa> <7f0f> +<17fd> <7f17> +<17fe> <7f19> +<17ff> <7f1c> +<1800> <7f1b> +<1801> <7f1f> +<1812> <7f35> +<1813> <5e7a> +<1814> <757f> +<1815> <5ddb> +<1816> <753e> +<1817> <9095> +<1818> <738e> +<1819> <7391> +<181a> <73ae> +<181b> <73a2> +<181c> <739f> +<181d> <73cf> +<181e> <73c2> +<181f> <73d1> +<1820> <73b7> +<1821> <73b3> +<1822> <73c0> +<1823> <73c9> +<1824> <73c8> +<1825> <73e5> +<1826> <73d9> +<1827> <987c> +<1828> <740a> +<1829> <73e9> +<182a> <73e7> +<182b> <73de> +<182c> <73ba> +<182d> <73f2> +<182e> <740f> +<182f> <742a> +<1830> <745b> +<1831> <7426> +<1832> <7425> +<1833> <7428> +<1834> <7430> +<1835> <742e> +<1836> <742c> +<1837> <741b> +<1838> <741a> +<1839> <7441> +endbfchar + +100 beginbfchar +<183a> <745c> +<183b> <7457> +<183c> <7455> +<183d> <7459> +<183e> <7477> +<183f> <746d> +<1840> <747e> +<1841> <749c> +<1842> <748e> +<1845> <7487> +<1846> <748b> +<1847> <749e> +<184a> <7490> +<184b> <74a7> +<184c> <74d2> +<184d> <74ba> +<1851> <674c> +<1852> <6753> +<1853> <675e> +<1854> <6748> +<1855> <6769> +<1856> <67a5> +<1857> <6787> +<1858> <676a> +<1859> <6773> +<185a> <6798> +<185b> <67a7> +<185c> <6775> +<185d> <67a8> +<185e> <679e> +<185f> <67ad> +<1860> <678b> +<1861> <6777> +<1862> <677c> +<1863> <67f0> +<1864> <6809> +<1865> <67d8> +<1866> <680a> +<1867> <67e9> +<1868> <67b0> +<1869> <680c> +<186a> <67d9> +<186b> <67b5> +<186c> <67da> +<186d> <67b3> +<186e> <67dd> +<186f> <6800> +<1870> <67c3> +<1871> <67b8> +<1872> <67e2> +<1873> <680e> +<1874> <67c1> +<1875> <67fd> +<187a> <684e> +<187b> <6862> +<187c> <6844> +<187d> <6864> +<187e> <6883> +<187f> <681d> +<1880> <6855> +<1881> <6866> +<1882> <6841> +<1883> <6867> +<1884> <6840> +<1885> <683e> +<1886> <684a> +<1887> <6849> +<1888> <6829> +<1889> <68b5> +<188a> <688f> +<188b> <6874> +<188c> <6877> +<188d> <6893> +<188e> <686b> +<188f> <68c2> +<1890> <696e> +<1891> <68fc> +<1894> <68f9> +<1895> <6924> +<1896> <68f0> +<1897> <690b> +<1898> <6901> +<1899> <6957> +<189a> <68e3> +<189b> <6910> +<189c> <6971> +<189d> <6939> +<189e> <6960> +<189f> <6942> +<18a0> <695d> +<18a1> <6984> +<18a2> <696b> +<18a3> <6980> +<18a4> <6998> +<18a5> <6978> +<18a6> <6934> +<18a7> <69cc> +<18aa> <69ce> +<18ab> <6989> +<18ac> <6966> +endbfchar + +100 beginbfchar +<18ad> <6963> +<18ae> <6979> +<18af> <699b> +<18b0> <69a7> +<18b1> <69bb> +<18b2> <69ab> +<18b3> <69ad> +<18b4> <69d4> +<18b5> <69b1> +<18b6> <69c1> +<18b7> <69ca> +<18b8> <69df> +<18b9> <6995> +<18ba> <69e0> +<18bb> <698d> +<18bc> <69ff> +<18bd> <6a2f> +<18be> <69ed> +<18c1> <6a65> +<18c2> <69f2> +<18c3> <6a44> +<18c4> <6a3e> +<18c5> <6aa0> +<18c6> <6a50> +<18c7> <6a5b> +<18c8> <6a35> +<18c9> <6a8e> +<18ca> <6a79> +<18cb> <6a3d> +<18cc> <6a28> +<18cd> <6a58> +<18ce> <6a7c> +<18cf> <6a91> +<18d0> <6a90> +<18d1> <6aa9> +<18d2> <6a97> +<18d3> <6aab> +<18d4> <7337> +<18d5> <7352> +<18d8> <6b87> +<18d9> <6b84> +<18dc> <6b8d> +<18df> <6ba1> +<18e0> <6baa> +<18e1> <8f6b> +<18e2> <8f6d> +<18e8> <8f78> +<18e9> <8f77> +<18ec> <8f7c> +<18ed> <8f7e> +<18f0> <8f84> +<18f1> <8f87> +<18f2> <8f8b> +<18f6> <8f98> +<18f7> <8f9a> +<18f8> <8ece> +<18f9> <620b> +<18fa> <6217> +<18fb> <621b> +<18fc> <621f> +<18fd> <6222> +<18fe> <6221> +<18ff> <6225> +<1900> <6224> +<1901> <622c> +<1902> <81e7> +<1903> <74ef> +<1904> <74f4> +<1905> <74ff> +<1906> <750f> +<1907> <7511> +<1908> <7513> +<1909> <6534> +<190d> <660a> +<190e> <6619> +<190f> <6772> +<1910> <6603> +<1911> <6615> +<1912> <6600> +<1913> <7085> +<1914> <66f7> +<1915> <661d> +<1916> <6634> +<1917> <6631> +<1918> <6636> +<1919> <6635> +<191a> <8006> +<191b> <665f> +<191c> <6654> +<191d> <6641> +<191e> <664f> +<191f> <6656> +<1920> <6661> +<1921> <6657> +<1922> <6677> +<1923> <6684> +<1924> <668c> +<1925> <66a7> +<1926> <669d> +<1927> <66be> +endbfchar + +100 beginbfchar +<192a> <66e6> +<192b> <66e9> +<192e> <8d36> +<192f> <8d3b> +<1930> <8d3d> +<1931> <8d40> +<1936> <8d47> +<1937> <8d4d> +<1938> <8d55> +<1939> <8d59> +<193a> <89c7> +<1942> <726e> +<1943> <729f> +<1944> <725d> +<1945> <7266> +<1946> <726f> +<1949> <7284> +<194a> <728b> +<194b> <728d> +<194c> <728f> +<194d> <7292> +<194e> <6308> +<194f> <6332> +<1950> <63b0> +<1951> <643f> +<1952> <64d8> +<1953> <8004> +<1954> <6bea> +<1955> <6bf3> +<1956> <6bfd> +<1957> <6bf5> +<1958> <6bf9> +<1959> <6c05> +<195a> <6c07> +<195b> <6c06> +<195c> <6c0d> +<195d> <6c15> +<1961> <6c21> +<1962> <6c29> +<1963> <6c24> +<1964> <6c2a> +<1965> <6c32> +<1966> <6535> +<1967> <6555> +<1968> <656b> +<1969> <724d> +<196a> <7252> +<196b> <7256> +<196c> <7230> +<196d> <8662> +<196e> <5216> +<196f> <809f> +<1970> <809c> +<1971> <8093> +<1972> <80bc> +<1973> <670a> +<1974> <80bd> +<1975> <80b1> +<1976> <80ab> +<1977> <80ad> +<1978> <80b4> +<1979> <80b7> +<197e> <80db> +<197f> <80c2> +<1980> <80c4> +<1981> <80d9> +<1982> <80cd> +<1983> <80d7> +<1984> <6710> +<1985> <80dd> +<1986> <80eb> +<1987> <80f1> +<1988> <80f4> +<1989> <80ed> +<198c> <80f2> +<198d> <80fc> +<198e> <6715> +<198f> <8112> +<1990> <8c5a> +<1991> <8136> +<1992> <811e> +<1993> <812c> +<1994> <8118> +<1995> <8132> +<1996> <8148> +<1997> <814c> +<1998> <8153> +<1999> <8174> +<199c> <8171> +<199d> <8160> +<199e> <8169> +<19a1> <816d> +<19a2> <8167> +<19a3> <584d> +<19a4> <5ab5> +<19a5> <8188> +<19a6> <8182> +<19a7> <8191> +<19a8> <6ed5> +<19a9> <81a3> +endbfchar + +100 beginbfchar +<19aa> <81aa> +<19ab> <81cc> +<19ac> <6726> +<19ad> <81ca> +<19ae> <81bb> +<19af> <81c1> +<19b0> <81a6> +<19b1> <6b24> +<19b2> <6b37> +<19b3> <6b39> +<19b4> <6b43> +<19b5> <6b46> +<19b6> <6b59> +<19ba> <98d5> +<19bd> <6bb3> +<19be> <5f40> +<19bf> <6bc2> +<19c0> <89f3> +<19c1> <6590> +<19c2> <9f51> +<19c3> <6593> +<19c4> <65bc> +<19c5> <65c6> +<19c6> <65c4> +<19c7> <65c3> +<19c8> <65cc> +<19c9> <65ce> +<19ca> <65d2> +<19cb> <65d6> +<19cc> <7080> +<19cd> <709c> +<19ce> <7096> +<19cf> <709d> +<19d0> <70bb> +<19d1> <70c0> +<19d2> <70b7> +<19d3> <70ab> +<19d4> <70b1> +<19d5> <70e8> +<19d6> <70ca> +<19d7> <7110> +<19d8> <7113> +<19d9> <7116> +<19da> <712f> +<19db> <7131> +<19dc> <7173> +<19dd> <715c> +<19de> <7168> +<19df> <7145> +<19e0> <7172> +<19e1> <714a> +<19e2> <7178> +<19e3> <717a> +<19e4> <7198> +<19e5> <71b3> +<19e6> <71b5> +<19e7> <71a8> +<19e8> <71a0> +<19e9> <71e0> +<19ea> <71d4> +<19eb> <71e7> +<19ec> <71f9> +<19ed> <721d> +<19ee> <7228> +<19ef> <706c> +<19f0> <7118> +<19f1> <7166> +<19f2> <71b9> +<19f3> <623e> +<19f4> <623d> +<19f5> <6243> +<19f8> <793b> +<19f9> <7940> +<19fa> <7946> +<19fb> <7949> +<19fe> <7953> +<19ff> <795a> +<1a00> <7962> +<1a01> <7957> +<1a02> <7960> +<1a03> <796f> +<1a04> <7967> +<1a05> <797a> +<1a06> <7985> +<1a07> <798a> +<1a08> <799a> +<1a09> <79a7> +<1a0a> <79b3> +<1a0b> <5fd1> +<1a0c> <5fd0> +<1a0d> <603c> +<1a0e> <605d> +<1a0f> <605a> +<1a10> <6067> +<1a11> <6041> +<1a12> <6059> +<1a13> <6063> +<1a14> <60ab> +<1a15> <6106> +<1a16> <610d> +endbfchar + +100 beginbfchar +<1a17> <615d> +<1a18> <61a9> +<1a19> <619d> +<1a1a> <61cb> +<1a1b> <61d1> +<1a1c> <6206> +<1a1d> <8080> +<1a1e> <807f> +<1a1f> <6c93> +<1a20> <6cf6> +<1a21> <6dfc> +<1a22> <77f6> +<1a23> <77f8> +<1a24> <7800> +<1a25> <7809> +<1a28> <7811> +<1a29> <65ab> +<1a2a> <782d> +<1a30> <781f> +<1a31> <783c> +<1a32> <7825> +<1a33> <782c> +<1a34> <7823> +<1a35> <7829> +<1a36> <784e> +<1a37> <786d> +<1a3a> <7826> +<1a3b> <7850> +<1a3c> <7847> +<1a3d> <784c> +<1a3e> <786a> +<1a3f> <789b> +<1a40> <7893> +<1a41> <789a> +<1a42> <7887> +<1a43> <789c> +<1a44> <78a1> +<1a45> <78a3> +<1a46> <78b2> +<1a47> <78b9> +<1a48> <78a5> +<1a49> <78d4> +<1a4a> <78d9> +<1a4b> <78c9> +<1a4c> <78ec> +<1a4d> <78f2> +<1a4e> <7905> +<1a4f> <78f4> +<1a50> <7913> +<1a51> <7924> +<1a52> <791e> +<1a53> <7934> +<1a54> <9f9b> +<1a55> <9ef9> +<1a58> <76f1> +<1a59> <7704> +<1a5a> <770d> +<1a5b> <76f9> +<1a5e> <771a> +<1a5f> <7722> +<1a60> <7719> +<1a61> <772d> +<1a62> <7726> +<1a63> <7735> +<1a64> <7738> +<1a67> <7747> +<1a68> <7743> +<1a69> <775a> +<1a6a> <7768> +<1a6b> <7762> +<1a6c> <7765> +<1a6d> <777f> +<1a6e> <778d> +<1a6f> <777d> +<1a70> <7780> +<1a71> <778c> +<1a72> <7791> +<1a75> <77b0> +<1a76> <77b5> +<1a77> <77bd> +<1a78> <753a> +<1a79> <7540> +<1a7a> <754e> +<1a7b> <754b> +<1a7c> <7548> +<1a7d> <755b> +<1a7e> <7572> +<1a7f> <7579> +<1a80> <7583> +<1a81> <7f58> +<1a82> <7f61> +<1a83> <7f5f> +<1a84> <8a48> +<1a85> <7f68> +<1a86> <7f74> +<1a87> <7f71> +<1a88> <7f79> +<1a89> <7f81> +<1a8a> <7f7e> +<1a8b> <76cd> +endbfchar + +100 beginbfchar +<1a8c> <76e5> +<1a8d> <8832> +<1a91> <948b> +<1a92> <948a> +<1a97> <9494> +<1a98> <9497> +<1a99> <9495> +<1a9f> <94ab> +<1aa0> <94aa> +<1aa1> <94ad> +<1aa2> <94ac> +<1aa5> <94b2> +<1aa6> <94b4> +<1aae> <94bf> +<1aaf> <94c4> +<1abd> <94d9> +<1abe> <94d8> +<1abf> <94db> +<1ac3> <94e2> +<1ac8> <94ea> +<1ac9> <94e9> +<1aca> <94eb> +<1ad0> <94f7> +<1ad1> <94f9> +<1ad4> <94ff> +<1ad5> <9503> +<1ad6> <9502> +<1ae3> <9518> +<1ae4> <951b> +<1ae8> <9522> +<1aeb> <9529> +<1aec> <952c> +<1aef> <9534> +<1af3> <953c> +<1af6> <9542> +<1af7> <9535> +<1afb> <9549> +<1afc> <954c> +<1aff> <9552> +<1b06> <955b> +<1b09> <955d> +<1b15> <956f> +<1b19> <953a> +<1b1a> <77e7> +<1b1b> <77ec> +<1b1c> <96c9> +<1b1d> <79d5> +<1b1e> <79ed> +<1b1f> <79e3> +<1b20> <79eb> +<1b21> <7a06> +<1b22> <5d47> +<1b23> <7a03> +<1b24> <7a02> +<1b25> <7a1e> +<1b26> <7a14> +<1b27> <7a39> +<1b28> <7a37> +<1b29> <7a51> +<1b2a> <9ecf> +<1b2b> <99a5> +<1b2c> <7a70> +<1b2d> <7688> +<1b2e> <768e> +<1b2f> <7693> +<1b30> <7699> +<1b31> <76a4> +<1b32> <74de> +<1b33> <74e0> +<1b34> <752c> +<1b35> <9e20> +<1b36> <9e22> +<1b3c> <9e32> +<1b3d> <9e31> +<1b3e> <9e36> +<1b3f> <9e38> +<1b40> <9e37> +<1b43> <9e3e> +<1b46> <9e44> +<1b4d> <9e4e> +<1b4e> <9e51> +<1b4f> <9e55> +<1b50> <9e57> +<1b54> <9e5e> +<1b55> <9e63> +<1b5d> <9e71> +<1b5e> <9e6d> +<1b5f> <9e73> +<1b60> <7592> +<1b61> <7594> +<1b62> <7596> +<1b63> <75a0> +<1b64> <759d> +<1b65> <75ac> +<1b66> <75a3> +<1b69> <75b8> +<1b6a> <75c4> +<1b6b> <75b1> +<1b6c> <75b0> +<1b6d> <75c3> +endbfchar + +100 beginbfchar +<1b6e> <75c2> +<1b6f> <75d6> +<1b70> <75cd> +<1b71> <75e3> +<1b72> <75e8> +<1b73> <75e6> +<1b74> <75e4> +<1b75> <75eb> +<1b76> <75e7> +<1b77> <7603> +<1b78> <75f1> +<1b79> <75fc> +<1b7a> <75ff> +<1b7b> <7610> +<1b7c> <7600> +<1b7d> <7605> +<1b7e> <760c> +<1b7f> <7617> +<1b80> <760a> +<1b81> <7625> +<1b82> <7618> +<1b83> <7615> +<1b84> <7619> +<1b85> <761b> +<1b86> <763c> +<1b87> <7622> +<1b88> <7620> +<1b89> <7640> +<1b8a> <762d> +<1b8b> <7630> +<1b8c> <763f> +<1b8d> <7635> +<1b8e> <7643> +<1b8f> <763e> +<1b90> <7633> +<1b91> <764d> +<1b92> <765e> +<1b93> <7654> +<1b94> <765c> +<1b95> <7656> +<1b96> <766b> +<1b97> <766f> +<1b98> <7fca> +<1b99> <7ae6> +<1b9c> <7a80> +<1b9d> <7a86> +<1b9e> <7a88> +<1b9f> <7a95> +<1ba0> <7aa6> +<1ba1> <7aa0> +<1ba2> <7aac> +<1ba3> <7aa8> +<1ba4> <7aad> +<1ba5> <7ab3> +<1ba6> <8864> +<1ba7> <8869> +<1ba8> <8872> +<1ba9> <887d> +<1baa> <887f> +<1bab> <8882> +<1bac> <88a2> +<1bad> <88c6> +<1bae> <88b7> +<1baf> <88bc> +<1bb0> <88c9> +<1bb1> <88e2> +<1bb2> <88ce> +<1bb3> <88e3> +<1bb4> <88e5> +<1bb5> <88f1> +<1bb6> <891a> +<1bb7> <88fc> +<1bb8> <88e8> +<1bb9> <88fe> +<1bba> <88f0> +<1bbb> <8921> +<1bbc> <8919> +<1bbd> <8913> +<1bbe> <891b> +<1bbf> <890a> +<1bc0> <8934> +<1bc1> <892b> +<1bc2> <8936> +<1bc3> <8941> +<1bc4> <8966> +<1bc5> <897b> +<1bc6> <758b> +<1bc7> <80e5> +<1bc8> <76b2> +<1bc9> <76b4> +<1bca> <77dc> +<1bcb> <8012> +<1bcc> <8014> +<1bcd> <8016> +<1bce> <801c> +<1bcf> <8020> +<1bd0> <8022> +<1bd4> <8029> +<1bd5> <8028> +<1bd6> <8031> +endbfchar + +100 beginbfchar +<1bd7> <800b> +<1bd8> <8035> +<1bd9> <8043> +<1bda> <8046> +<1bdb> <804d> +<1bdc> <8052> +<1bdd> <8069> +<1bde> <8071> +<1bdf> <8983> +<1be0> <9878> +<1be1> <9880> +<1be2> <9883> +<1be3> <9889> +<1be6> <988f> +<1be7> <9894> +<1bf0> <864d> +<1bf1> <8654> +<1bf2> <866c> +<1bf3> <866e> +<1bf4> <867f> +<1bf5> <867a> +<1bf6> <867c> +<1bf7> <867b> +<1bf8> <86a8> +<1bf9> <868d> +<1bfa> <868b> +<1bfb> <86ac> +<1bfc> <869d> +<1bfd> <86a7> +<1bfe> <86a3> +<1bff> <86aa> +<1c00> <8693> +<1c01> <86a9> +<1c02> <86b6> +<1c03> <86c4> +<1c04> <86b5> +<1c05> <86ce> +<1c06> <86b0> +<1c07> <86ba> +<1c08> <86b1> +<1c09> <86af> +<1c0a> <86c9> +<1c0b> <86cf> +<1c0c> <86b4> +<1c0d> <86e9> +<1c10> <86ed> +<1c11> <86f3> +<1c12> <86d0> +<1c13> <8713> +<1c14> <86de> +<1c15> <86f4> +<1c16> <86df> +<1c17> <86d8> +<1c18> <86d1> +<1c19> <8703> +<1c1a> <8707> +<1c1b> <86f8> +<1c1c> <8708> +<1c1d> <870a> +<1c1e> <870d> +<1c1f> <8709> +<1c20> <8723> +<1c21> <873b> +<1c22> <871e> +<1c23> <8725> +<1c24> <872e> +<1c25> <871a> +<1c26> <873e> +<1c27> <8748> +<1c28> <8734> +<1c29> <8731> +<1c2a> <8729> +<1c2b> <8737> +<1c2c> <873f> +<1c2d> <8782> +<1c2e> <8722> +<1c31> <877b> +<1c32> <8760> +<1c33> <8770> +<1c34> <874c> +<1c35> <876e> +<1c36> <878b> +<1c37> <8753> +<1c38> <8763> +<1c39> <877c> +<1c3a> <8764> +<1c3b> <8759> +<1c3c> <8765> +<1c3d> <8793> +<1c3e> <87af> +<1c3f> <87a8> +<1c40> <87d2> +<1c41> <87c6> +<1c42> <8788> +<1c43> <8785> +<1c44> <87ad> +<1c45> <8797> +<1c46> <8783> +<1c47> <87ab> +<1c48> <87e5> +endbfchar + +100 beginbfchar +<1c49> <87ac> +<1c4a> <87b5> +<1c4b> <87b3> +<1c4c> <87cb> +<1c4d> <87d3> +<1c4e> <87bd> +<1c4f> <87d1> +<1c50> <87c0> +<1c51> <87ca> +<1c52> <87db> +<1c53> <87ea> +<1c54> <87e0> +<1c55> <87ee> +<1c56> <8816> +<1c57> <8813> +<1c58> <87fe> +<1c59> <880a> +<1c5a> <881b> +<1c5b> <8821> +<1c5c> <8839> +<1c5d> <883c> +<1c5e> <7f36> +<1c5f> <7f42> +<1c62> <8210> +<1c63> <7afa> +<1c64> <7afd> +<1c65> <7b08> +<1c68> <7b15> +<1c69> <7b0a> +<1c6a> <7b2b> +<1c6b> <7b0f> +<1c6c> <7b47> +<1c6d> <7b38> +<1c6e> <7b2a> +<1c6f> <7b19> +<1c70> <7b2e> +<1c71> <7b31> +<1c72> <7b20> +<1c73> <7b25> +<1c74> <7b24> +<1c75> <7b33> +<1c76> <7b3e> +<1c77> <7b1e> +<1c78> <7b58> +<1c79> <7b5a> +<1c7a> <7b45> +<1c7b> <7b75> +<1c7c> <7b4c> +<1c7d> <7b5d> +<1c7e> <7b60> +<1c7f> <7b6e> +<1c80> <7b7b> +<1c81> <7b62> +<1c82> <7b72> +<1c83> <7b71> +<1c84> <7b90> +<1c87> <7bb8> +<1c88> <7bac> +<1c89> <7b9d> +<1c8a> <7ba8> +<1c8b> <7b85> +<1c8c> <7baa> +<1c8d> <7b9c> +<1c8e> <7ba2> +<1c8f> <7bab> +<1c90> <7bb4> +<1c91> <7bd1> +<1c92> <7bc1> +<1c93> <7bcc> +<1c94> <7bdd> +<1c95> <7bda> +<1c98> <7bea> +<1c99> <7c0c> +<1c9a> <7bfe> +<1c9b> <7bfc> +<1c9c> <7c0f> +<1c9d> <7c16> +<1c9e> <7c0b> +<1c9f> <7c1f> +<1ca0> <7c2a> +<1ca1> <7c26> +<1ca2> <7c38> +<1ca3> <7c41> +<1ca4> <7c40> +<1ca5> <81fe> +<1ca8> <8204> +<1ca9> <81ec> +<1caa> <8844> +<1cae> <822d> +<1caf> <822f> +<1cb0> <8228> +<1cb1> <822b> +<1cb2> <8238> +<1cb3> <823b> +<1cb6> <823e> +<1cb7> <8244> +<1cb8> <8249> +<1cb9> <824b> +<1cba> <824f> +<1cbb> <825a> +endbfchar + +100 beginbfchar +<1cbc> <825f> +<1cbd> <8268> +<1cbe> <887e> +<1cbf> <8885> +<1cc0> <8888> +<1cc1> <88d8> +<1cc2> <88df> +<1cc3> <895e> +<1cc4> <7f9d> +<1cc5> <7f9f> +<1cc6> <7fa7> +<1cc9> <7fb2> +<1cca> <7c7c> +<1ccb> <6549> +<1ccc> <7c91> +<1ccd> <7c9d> +<1cce> <7c9c> +<1ccf> <7c9e> +<1cd0> <7ca2> +<1cd1> <7cb2> +<1cd4> <7cc1> +<1cd5> <7cc7> +<1cd8> <7cc8> +<1cd9> <7cc5> +<1cda> <7cd7> +<1cdb> <7ce8> +<1cdc> <826e> +<1cdd> <66a8> +<1cde> <7fbf> +<1cdf> <7fce> +<1ce0> <7fd5> +<1ce1> <7fe5> +<1ce2> <7fe1> +<1ce3> <7fe6> +<1ce4> <7fe9> +<1ce5> <7fee> +<1ce6> <7ff3> +<1ce7> <7cf8> +<1ce8> <7d77> +<1ce9> <7da6> +<1cea> <7dae> +<1ceb> <7e47> +<1cec> <7e9b> +<1ced> <9eb8> +<1cee> <9eb4> +<1cef> <8d73> +<1cf0> <8d84> +<1cf1> <8d94> +<1cf2> <8d91> +<1cf3> <8db1> +<1cf4> <8d67> +<1cf5> <8d6d> +<1cf6> <8c47> +<1cf7> <8c49> +<1cf8> <914a> +<1cf9> <9150> +<1cfc> <9164> +<1cfd> <9162> +<1cfe> <9161> +<1cff> <9170> +<1d00> <9169> +<1d01> <916f> +<1d04> <9172> +<1d05> <9174> +<1d06> <9179> +<1d07> <918c> +<1d08> <9185> +<1d09> <9190> +<1d0a> <918d> +<1d0b> <9191> +<1d0e> <91aa> +<1d12> <91b5> +<1d13> <91b4> +<1d14> <91ba> +<1d15> <8c55> +<1d16> <9e7e> +<1d17> <8db8> +<1d18> <8deb> +<1d19> <8e05> +<1d1a> <8e59> +<1d1b> <8e69> +<1d1c> <8db5> +<1d1d> <8dbf> +<1d1e> <8dbc> +<1d1f> <8dba> +<1d20> <8dc4> +<1d23> <8dda> +<1d24> <8dde> +<1d27> <8ddb> +<1d28> <8dc6> +<1d29> <8dec> +<1d2c> <8de3> +<1d2d> <8df9> +<1d2e> <8dfb> +<1d2f> <8de4> +<1d30> <8e09> +<1d31> <8dfd> +<1d32> <8e14> +<1d33> <8e1d> +<1d34> <8e1f> +endbfchar + +100 beginbfchar +<1d35> <8e2c> +<1d36> <8e2e> +<1d37> <8e23> +<1d38> <8e2f> +<1d39> <8e3a> +<1d3a> <8e40> +<1d3b> <8e39> +<1d3c> <8e35> +<1d3d> <8e3d> +<1d3e> <8e31> +<1d3f> <8e49> +<1d44> <8e4a> +<1d45> <8e70> +<1d46> <8e76> +<1d47> <8e7c> +<1d48> <8e6f> +<1d49> <8e74> +<1d4a> <8e85> +<1d4b> <8e8f> +<1d4c> <8e94> +<1d4d> <8e90> +<1d4e> <8e9c> +<1d4f> <8e9e> +<1d50> <8c78> +<1d51> <8c82> +<1d52> <8c8a> +<1d53> <8c85> +<1d54> <8c98> +<1d55> <8c94> +<1d56> <659b> +<1d57> <89d6> +<1d58> <89de> +<1d59> <89da> +<1d5a> <89dc> +<1d5b> <89e5> +<1d5c> <89eb> +<1d5d> <89ef> +<1d5e> <8a3e> +<1d5f> <8b26> +<1d60> <9753> +<1d61> <96e9> +<1d62> <96f3> +<1d63> <96ef> +<1d64> <9706> +<1d65> <9701> +<1d66> <9708> +<1d67> <970f> +<1d68> <970e> +<1d69> <972a> +<1d6a> <972d> +<1d6b> <9730> +<1d6c> <973e> +<1d6d> <9f80> +<1d6e> <9f83> +<1d75> <9f8c> +<1d76> <9efe> +<1d77> <9f0b> +<1d78> <9f0d> +<1d79> <96b9> +<1d7c> <96ce> +<1d7d> <96d2> +<1d7e> <77bf> +<1d7f> <96e0> +<1d80> <928e> +<1d81> <92ae> +<1d82> <92c8> +<1d83> <933e> +<1d84> <936a> +<1d85> <93ca> +<1d86> <938f> +<1d87> <943e> +<1d88> <946b> +<1d89> <9c7f> +<1d8a> <9c82> +<1d8f> <7a23> +<1d90> <9c8b> +<1d91> <9c8e> +<1da4> <9cab> +<1dc6> <9cdf> +<1dc7> <9ce2> +<1dc8> <977c> +<1dc9> <9785> +<1dcc> <9794> +<1dcd> <97af> +<1dce> <97ab> +<1dcf> <97a3> +<1dd0> <97b2> +<1dd1> <97b4> +<1dd2> <9ab1> +<1dd3> <9ab0> +<1dd4> <9ab7> +<1dd5> <9e58> +<1dd6> <9ab6> +<1dd7> <9aba> +<1dd8> <9abc> +<1dd9> <9ac1> +<1dda> <9ac0> +<1ddb> <9ac5> +<1ddc> <9ac2> +<1ddf> <9ad1> +endbfchar + +100 beginbfchar +<1de0> <9b45> +<1de1> <9b43> +<1de2> <9b47> +<1de3> <9b49> +<1de4> <9b48> +<1de5> <9b4d> +<1de6> <9b51> +<1de7> <98e8> +<1de8> <990d> +<1de9> <992e> +<1dea> <9955> +<1deb> <9954> +<1dec> <9adf> +<1ded> <9ae1> +<1dee> <9ae6> +<1def> <9aef> +<1df0> <9aeb> +<1df1> <9afb> +<1df2> <9aed> +<1df3> <9af9> +<1df4> <9b08> +<1df5> <9b0f> +<1df6> <9b13> +<1df7> <9b1f> +<1df8> <9b23> +<1dfb> <7e3b> +<1dfc> <9e82> +<1dff> <9e8b> +<1e00> <9e92> +<1e01> <93d6> +<1e02> <9e9d> +<1e03> <9e9f> +<1e07> <9ee0> +<1e08> <9edf> +<1e09> <9ee2> +<1e0a> <9ee9> +<1e0b> <9ee7> +<1e0c> <9ee5> +<1e0d> <9eea> +<1e0e> <9eef> +<1e0f> <9f22> +<1e10> <9f2c> +<1e11> <9f2f> +<1e12> <9f39> +<1e13> <9f37> +<1e16> <9f44> +<1e17> <3007> +<1e18> +<1e19> <2016> +<1e1a> <3013> +<1e1b> +<1e1c> +<1e1d> +<1e1e> +<1e1f> +<1e20> <00fc> +<1e21> <00a9> +<1e22> <2122> +<1e23> <2026> +<1e24> <0020> +<1e25> <769a> +<1e26> <85f9> +<1e27> <7919> +<1e28> <611b> +<1e29> <9aaf> +<1e2a> <8956> +<1e2b> <58e9> +<1e2c> <7f77> +<1e2d> <64fa> +<1e2e> <6557> +<1e2f> <9812> +<1e30> <8fa6> +<1e31> <7d46> +<1e32> <5e6b> +<1e33> <7d81> +<1e34> <938a> +<1e35> <8b17> +<1e36> <98fd> +<1e37> <5bf6> +<1e38> <5831> +<1e39> <9b91> +<1e3a> <8f29> +<1e3b> <8c9d> +<1e3c> <92c7> +<1e3d> <72fd> +<1e3e> <5099> +<1e3f> <618a> +<1e40> <7db3> +<1e41> <7b46> +<1e42> <7562> +<1e43> <6583> +<1e44> <5e63> +<1e45> <9589> +<1e46> <908a> +<1e47> <7de8> +<1e48> <8cb6> +<1e49> <8b8a> +<1e4a> <8faf> +<1e4b> <8fae> +<1e4c> <6a19> +endbfchar + +100 beginbfchar +<1e4d> <9c49> +<1e4e> <765f> +<1e4f> <7015> +<1e50> <6ff1> +<1e51> <8cd3> +<1e52> <64ef> +<1e53> <9905> +<1e54> <64a5> +<1e55> <9262> +<1e56> <9251> +<1e57> <99c1> +<1e58> <88dc> +<1e59> <8ca1> +<1e5a> <53c3> +<1e5b> <8836> +<1e5c> <6b98> +<1e5d> <615a> +<1e5e> <6158> +<1e5f> <71e6> +<1e60> <84bc> +<1e61> <8259> +<1e62> <5009> +<1e63> <6ec4> +<1e64> <53a0> +<1e65> <5074> +<1e66> <6e2c> +<1e67> <5c64> +<1e68> <8a6b> +<1e69> <6519> +<1e6a> <647b> +<1e6b> <87ec> +<1e6c> <995e> +<1e6d> <8b92> +<1e6e> <7e8f> +<1e6f> <93df> +<1e70> <7523> +<1e71> <95e1> +<1e72> <986b> +<1e73> <5834> +<1e74> <5617> +<1e75> <9577> +<1e76> <511f> +<1e77> <8178> +<1e78> <5ee0> +<1e79> <66a2> +<1e7a> <9214> +<1e7b> <8eca> +<1e7c> <5fb9> +<1e7d> <5875> +<1e7e> <9673> +<1e7f> <896f> +<1e80> <7a31> +<1e81> <61f2> +<1e82> <8aa0> +<1e83> <9a01> +<1e84> <9072> +<1e85> <99b3> +<1e86> <9f52> +<1e87> <71be> +<1e88> <885d> +<1e89> <87f2> +<1e8a> <5bf5> +<1e8b> <7587> +<1e8c> <8e8a> +<1e8d> <7c4c> +<1e8e> <7da2> +<1e8f> <919c> +<1e90> <92e4> +<1e91> <96db> +<1e92> <790e> +<1e93> <5132> +<1e94> <89f8> +<1e95> <8655> +<1e96> <50b3> +<1e97> <7621> +<1e98> <95d6> +<1e99> <5275> +<1e9a> <9318> +<1e9b> <7d14> +<1e9c> <7dbd> +<1e9d> <8fad> +<1e9e> <8a5e> +<1e9f> <8cdc> +<1ea0> <8070> +<1ea1> <5f9e> +<1ea2> <53e2> +<1ea3> <8ea5> +<1ea4> <7ac4> +<1ea5> <932f> +<1ea6> <9054> +<1ea7> <5e36> +<1ea8> <8cb8> +<1ea9> <64d4> +<1eaa> <55ae> +<1eab> <9132> +<1eac> <64a3> +<1ead> <81bd> +<1eae> <619a> +<1eaf> <8a95> +<1eb0> <5f48> +endbfchar + +100 beginbfchar +<1eb1> <7576> +<1eb2> <64cb> +<1eb3> <9ee8> +<1eb4> <8569> +<1eb5> <6a94> +<1eb6> <6417> +<1eb7> <5cf6> +<1eb8> <79b1> +<1eb9> <5c0e> +<1eba> <71c8> +<1ebb> <9127> +<1ebc> <6575> +<1ebd> <6ecc> +<1ebe> <905e> +<1ebf> <7de0> +<1ec0> <985b> +<1ec1> <9ede> +<1ec2> <588a> +<1ec3> <96fb> +<1ec4> <6fb1> +<1ec5> <91e3> +<1ec6> <8abf> +<1ec7> <8adc> +<1ec8> <91d8> +<1ec9> <9802> +<1eca> <9320> +<1ecb> <8a02> +<1ecc> <6771> +<1ecd> <52d5> +<1ece> <68df> +<1ecf> <51cd> +<1ed0> <9b25> +<1ed1> <72a2> +<1ed2> <7368> +<1ed3> <8b80> +<1ed4> <8ced> +<1ed5> <934d> +<1ed6> <935b> +<1ed7> <65b7> +<1ed8> <7dde> +<1ed9> <968a> +<1eda> <5c0d> +<1edb> <5678> +<1edc> <9813> +<1edd> <920d> +<1ede> <596a> +<1edf> <58ae> +<1ee0> <9d5d> +<1ee1> <984d> +<1ee2> <8a1b> +<1ee3> <60e1> +<1ee4> <9913> +<1ee5> <5152> +<1ee6> <723e> +<1ee7> <990c> +<1ee8> <8cb3> +<1ee9> <767c> +<1eea> <7f70> +<1eeb> <95a5> +<1eec> <792c> +<1eed> <91e9> +<1eee> <7169> +<1eef> <7bc4> +<1ef0> <8ca9> +<1ef1> <98ef> +<1ef2> <8a2a> +<1ef3> <7d21> +<1ef4> <98db> +<1ef5> <8ab9> +<1ef6> <5ee2> +<1ef7> <8cbb> +<1ef8> <7d1b> +<1ef9> <58b3> +<1efa> <596e> +<1efb> <61a4> +<1efc> <7cde> +<1efd> <8c50> +<1efe> <6953> +<1eff> <92d2> +<1f00> <98a8> +<1f01> <760b> +<1f02> <99ae> +<1f03> <7e2b> +<1f04> <8af7> +<1f05> <9cf3> +<1f06> <819a> +<1f07> <8f3b> +<1f08> <64ab> +<1f09> <8f14> +<1f0a> <8ce6> +<1f0b> <5fa9> +<1f0c> <8ca0> +<1f0d> <8a03> +<1f0e> <5a66> +<1f0f> <7e1b> +<1f10> <8a72> +<1f11> <9223> +<1f12> <84cb> +<1f13> <5e79> +<1f14> <8d95> +endbfchar + +100 beginbfchar +<1f15> <8d1b> +<1f16> <5ca1> +<1f17> <525b> +<1f18> <92fc> +<1f19> <7db1> +<1f1a> <5d17> +<1f1b> <93ac> +<1f1c> <64f1> +<1f1d> <9d3f> +<1f1e> <95a3> +<1f1f> <927b> +<1f20> <500b> +<1f21> <7d66> +<1f22> <9f94> +<1f23> <978f> +<1f24> <8ca2> +<1f25> <920e> +<1f26> <6e9d> +<1f27> <69cb> +<1f28> <8cfc> +<1f29> <8831> +<1f2a> <9867> +<1f2b> <526e> +<1f2c> <95dc> +<1f2d> <89c0> +<1f2e> <9928> +<1f2f> <6163> +<1f30> <8cab> +<1f31> <5ee3> +<1f32> <898f> +<1f33> <6b78> +<1f34> <9f9c> +<1f35> <95a8> +<1f36> <8ecc> +<1f37> <8a6d> +<1f38> <6ac3> +<1f39> <8cb4> +<1f3a> <528a> +<1f3b> <8f25> +<1f3c> <934b> +<1f3d> <570b> +<1f3e> <904e> +<1f3f> <99ed> +<1f40> <97d3> +<1f41> <6f22> +<1f42> <865f> +<1f43> <95a1> +<1f44> <9db4> +<1f45> <8cc0> +<1f46> <8f5f> +<1f47> <9d3b> +<1f48> <7d05> +<1f49> <58fa> +<1f4a> <8b77> +<1f4b> <6eec> +<1f4c> <5629> +<1f4d> <83ef> +<1f4e> <756b> +<1f4f> <5283> +<1f50> <8a71> +<1f51> <61f7> +<1f52> <58de> +<1f53> <6b61> +<1f54> <74b0> +<1f55> <9084> +<1f56> <7de9> +<1f57> <8b0a> +<1f58> <63ee> +<1f59> <8f1d> +<1f5a> <8cc4> +<1f5b> <7a62> +<1f5c> <6703> +<1f5d> <71f4> +<1f5e> <532f> +<1f5f> <8af1> +<1f60> <8aa8> +<1f61> <7e6a> +<1f62> <8477> +<1f63> <6e3e> +<1f64> <7372> +<1f65> <8ca8> +<1f66> <798d> +<1f67> <64ca> +<1f68> <6a5f> +<1f69> <7a4d> +<1f6a> <9951> +<1f6b> <8b4f> +<1f6c> <9dc4> +<1f6d> <7e3e> +<1f6e> <7ddd> +<1f6f> <6975> +<1f70> <8f2f> +<1f71> <7d1a> +<1f72> <64e0> +<1f73> <5e7e> +<1f74> <858a> +<1f75> <5291> +<1f76> <6fdf> +<1f77> <8a08> +<1f78> <8a18> +endbfchar + +100 beginbfchar +<1f79> <969b> +<1f7a> <7e7c> +<1f7b> <7d00> +<1f7c> <593e> +<1f7d> <83a2> +<1f7e> <9830> +<1f7f> <8cc8> +<1f80> <9240> +<1f81> <50f9> +<1f82> <99d5> +<1f83> <6bb2> +<1f84> <76e3> +<1f85> <5805> +<1f86> <7b8b> +<1f87> <9593> +<1f88> <8271> +<1f89> <7dd8> +<1f8a> <7e6d> +<1f8b> <6aa2> +<1f8c> <9e7c> +<1f8d> <63c0> +<1f8e> <64bf> +<1f8f> <7c21> +<1f90> <5109> +<1f91> <85a6> +<1f92> <6abb> +<1f93> <9452> +<1f94> <8e10> +<1f95> <8ce4> +<1f96> <898b> +<1f97> <9375> +<1f98> <8266> +<1f99> <528d> +<1f9a> <991e> +<1f9b> <6f38> +<1f9c> <6ffa> +<1f9d> <6f97> +<1f9e> <5c07> +<1f9f> <6f3f> +<1fa0> <8523> +<1fa1> <69f3> +<1fa2> <596c> +<1fa3> <8b1b> +<1fa4> <91ac> +<1fa5> <81a0> +<1fa6> <6f86> +<1fa7> <9a55> +<1fa8> <5b0c> +<1fa9> <652a> +<1faa> <9278> +<1fab> <77ef> +<1fac> <50e5> +<1fad> <9903> +<1fae> <7e73> +<1faf> <7d5e> +<1fb0> <8f4e> +<1fb1> <8f03> +<1fb2> <968e> +<1fb3> <7bc0> +<1fb4> <6f54> +<1fb5> <7d50> +<1fb6> <8aa1> +<1fb7> <7dca> +<1fb8> <9326> +<1fb9> <50c5> +<1fba> <8b39> +<1fbb> <9032> +<1fbc> <71fc> +<1fbd> <76e1> +<1fbe> <52c1> +<1fbf> <8396> +<1fc0> <9be8> +<1fc1> <9a5a> +<1fc2> <7d93> +<1fc3> <9838> +<1fc4> <93e1> +<1fc5> <5f91> +<1fc6> <75d9> +<1fc7> <7af6> +<1fc8> <7cfe> +<1fc9> <820a> +<1fca> <99d2> +<1fcb> <8209> +<1fcc> <64da> +<1fcd> <92f8> +<1fce> <61fc> +<1fcf> <5287> +<1fd0> <9d51> +<1fd1> <7d79> +<1fd2> <89ba> +<1fd3> <8a23> +<1fd4> <7d76> +<1fd5> <921e> +<1fd6> <8ecd> +<1fd7> <99ff> +<1fd8> <958b> +<1fd9> <51f1> +<1fda> <9846> +<1fdb> <6bbb> +<1fdc> <8ab2> +endbfchar + +100 beginbfchar +<1fdd> <58be> +<1fde> <61c7> +<1fdf> <6473> +<1fe0> <5eab> +<1fe1> <8932> +<1fe2> <8a87> +<1fe3> <584a> +<1fe4> <5108> +<1fe5> <5bec> +<1fe6> <7926> +<1fe7> <66e0> +<1fe8> <8667> +<1fe9> <5dcb> +<1fea> <7aba> +<1feb> <994b> +<1fec> <6f70> +<1fed> <64f4> +<1fee> <95ca> +<1fef> <881f> +<1ff0> <81d8> +<1ff1> <840a> +<1ff2> <4f86> +<1ff3> <8cf4> +<1ff4> <85cd> +<1ff5> <6b04> +<1ff6> <6514> +<1ff7> <7c43> +<1ff8> <95cc> +<1ff9> <862d> +<1ffa> <703e> +<1ffb> <8b95> +<1ffc> <652c> +<1ffd> <89bd> +<1ffe> <61f6> +<1fff> <7e9c> +<2000> <721b> +<2001> <6feb> +<2002> <6488> +<2003> <52de> +<2004> <6f87> +<2005> <6a02> +<2006> <9433> +<2007> <58d8> +<2008> <985e> +<2009> <7c6c> +<200a> <96e2> +<200b> <7055> +<200c> <88cf> +<200d> <9bc9> +<200e> <79ae> +<200f> <9e97> +<2010> <53b2> +<2011> <52f5> +<2012> <792b> +<2013> <6b77> +<2014> <701d> +<2015> <96b8> +<2016> <5006> +<2017> <806f> +<2018> <84ee> +<2019> <9023> +<201a> <942e> +<201b> <6190> +<201c> <6f23> +<201d> <7c3e> +<201e> <6582> +<201f> <81c9> +<2020> <93c8> +<2021> <6200> +<2022> <7149> +<2023> <7df4> +<2024> <7ce7> +<2025> <5169> +<2026> <8f1b> +<2027> <8ad2> +<2028> <7642> +<2029> <907c> +<202a> <9410> +<202b> <7375> +<202c> <81e8> +<202d> <9130> +<202e> <9c57> +<202f> <8cc3> +<2030> <9f61> +<2031> <9234> +<2032> <9748> +<2033> <5dba> +<2034> <9818> +<2035> <993e> +<2036> <5289> +<2037> <9f8d> +<2038> <807e> +<2039> <56a8> +<203a> <7c60> +<203b> <58df> +<203c> <650f> +<203d> <96b4> +<203e> <6a13> +<203f> <5a41> +<2040> <645f> +endbfchar + +100 beginbfchar +<2041> <7c0d> +<2042> <8606> +<2043> <76e7> +<2044> <9871> +<2045> <5eec> +<2046> <7210> +<2047> <64c4> +<2048> <6ef7> +<2049> <865c> +<204a> <9b6f> +<204b> <8cc2> +<204c> <9332> +<204d> <9678> +<204e> <9a62> +<204f> <92c1> +<2050> <5c62> +<2051> <7e37> +<2052> <616e> +<2053> <6ffe> +<2054> <7dd1> +<2055> <5dd2> +<2056> <6523> +<2057> <5b7f> +<2058> <7064> +<2059> <4e82> +<205a> <6384> +<205b> <8f2a> +<205c> <502b> +<205d> <4f96> +<205e> <6dea> +<205f> <7db8> +<2060> <8ad6> +<2061> <863f> +<2062> <7f85> +<2063> <908f> +<2064> <947c> +<2065> <7c6e> +<2066> <9a3e> +<2067> <99f1> +<2068> <7d61> +<2069> <5abd> +<206a> <746a> +<206b> <78bc> +<206c> <879e> +<206d> <99ac> +<206e> <99e1> +<206f> <55ce> +<2070> <8cb7> +<2071> <9ea5> +<2072> <8ce3> +<2073> <9081> +<2074> <779e> +<2075> <9945> +<2076> <883b> +<2077> <6eff> +<2078> <8b3e> +<2079> <9328> +<207a> <925a> +<207b> <8cbf> +<207c> <9382> +<207d> <9580> +<207e> <60b6> +<207f> <5011> +<2080> <9333> +<2081> <5922> +<2082> <8b0e> +<2083> <5f4c> +<2084> <8993> +<2085> <7dbf> +<2086> <7dec> +<2087> <5edf> +<2088> <6ec5> +<2089> <61ab> +<208a> <95a9> +<208b> <9cf4> +<208c> <9298> +<208d> <8b2c> +<208e> <8b00> +<208f> <755d> +<2090> <9209> +<2091> <7d0d> +<2092> <96e3> +<2093> <6493> +<2094> <8166> +<2095> <60f1> +<2096> <9b27> +<2097> <9912> +<2098> <64ec> +<2099> <81a9> +<209a> <6506> +<209b> <91c0> +<209c> <9ce5> +<209d> <8076> +<209e> <5699> +<209f> <9477> +<20a0> <93b3> +<20a1> <6ab8> +<20a2> <7370> +<20a3> <5be7> +<20a4> <64f0> +endbfchar + +100 beginbfchar +<20a5> <6fd8> +<20a6> <9215> +<20a7> <7d10> +<20a8> <81bf> +<20a9> <6fc3> +<20aa> <8fb2> +<20ab> <7627> +<20ac> <8afe> +<20ad> <6b50> +<20ae> <9dd7> +<20af> <6bc6> +<20b0> <5614> +<20b1> <6f1a> +<20b2> <76e4> +<20b3> <9f90> +<20b4> <8ce0> +<20b5> <5674> +<20b6> <9d6c> +<20b7> <9a19> +<20b8> <98c4> +<20b9> <983b> +<20ba> <8ca7> +<20bb> <860b> +<20bc> <6191> +<20bd> <8a55> +<20be> <6f51> +<20bf> <9817> +<20c0> <64b2> +<20c1> <92ea> +<20c2> <50d5> +<20c3> <6a38> +<20c4> <8b5c> +<20c5> <81cd> +<20c6> <9f4a> +<20c7> <9a0e> +<20c8> <8c48> +<20c9> <5553> +<20ca> <6c23> +<20cb> <8a16> +<20cc> <727d> +<20cd> <91fa> +<20ce> <925b> +<20cf> <9077> +<20d0> <7c3d> +<20d1> <8b19> +<20d2> <9322> +<20d3> <9257> +<20d4> <6dfa> +<20d5> <8b74> +<20d6> <5879> +<20d7> <69cd> +<20d8> <55c6> +<20d9> <58bb> +<20da> <8594> +<20db> <6436> +<20dc> <936c> +<20dd> <6a4b> +<20de> <55ac> +<20df> <50d1> +<20e0> <7ff9> +<20e1> <7ac5> +<20e2> <7aca> +<20e3> <6b3d> +<20e4> <89aa> +<20e5> <5be2> +<20e6> <8f15> +<20e7> <6c2b> +<20e8> <50be> +<20e9> <9803> +<20ea> <8acb> +<20eb> <6176> +<20ec> <74ca> +<20ed> <7aae> +<20ee> <8da8> +<20ef> <5340> +<20f0> <8ec0> +<20f1> <9a45> +<20f2> <9f72> +<20f3> <9874> +<20f4> <6b0a> +<20f5> <52f8> +<20f6> <9d72> +<20f7> <78ba> +<20f8> <8b93> +<20f9> <9952> +<20fa> <64fe> +<20fb> <7e5e> +<20fc> <71b1> +<20fd> <97cc> +<20fe> <8a8d> +<20ff> <7d09> +<2100> <69ae> +<2101> <7d68> +<2102> <8edf> +<2103> <92ed> +<2104> <958f> +<2105> <6f64> +<2106> <7051> +<2107> <85a9> +<2108> <9c13> +endbfchar + +100 beginbfchar +<2109> <8cfd> +<210a> <5098> +<210b> <55aa> +<210c> <9a37> +<210d> <6383> +<210e> <6f80> +<210f> <6bba> +<2110> <7d17> +<2111> <7be9> +<2112> <66ec> +<2113> <9583> +<2114> <965d> +<2115> <8d0d> +<2116> <7e55> +<2117> <50b7> +<2118> <8cde> +<2119> <71d2> +<211a> <7d39> +<211b> <8cd2> +<211c> <6368> +<211d> <651d> +<211e> <61fe> +<211f> <8a2d> +<2120> <7d33> +<2121> <5be9> +<2122> <5b38> +<2123> <814e> +<2124> <6ef2> +<2125> <8072> +<2126> <7e69> +<2127> <52dd> +<2128> <8056> +<2129> <5e2b> +<212a> <7345> +<212b> <6fd5> +<212c> <8a69> +<212d> <6642> +<212e> <8755> +<212f> <5be6> +<2130> <8b58> +<2131> <99db> +<2132> <52e2> +<2133> <9069> +<2134> <91cb> +<2135> <98fe> +<2136> <8996> +<2137> <8a66> +<2138> <58fd> +<2139> <7378> +<213a> <6a1e> +<213b> <8f38> +<213c> <66f8> +<213d> <8d16> +<213e> <5c6c> +<213f> <8853> +<2140> <6a39> +<2141> <7aea> +<2142> <6578> +<2143> <5e25> +<2144> <96d9> +<2145> <8ab0> +<2146> <9806> +<2147> <8aac> +<2148> <78a9> +<2149> <720d> +<214a> <7d72> +<214b> <98fc> +<214c> <9b06> +<214d> <8073> +<214e> <616b> +<214f> <980c> +<2150> <8a1f> +<2151> <8aa6> +<2152> <64fb> +<2153> <8607> +<2154> <8a34> +<2155> <8085> +<2156> <96d6> +<2157> <96a8> +<2158> <7d8f> +<2159> <6b72> +<215a> <5b6b> +<215b> <640d> +<215c> <7e2e> +<215d> <7463> +<215e> <9396> +<215f> <737a> +<2160> <64bb> +<2161> <81fa> +<2162> <614b> +<2163> <6524> +<2164> <8caa> +<2165> <7671> +<2166> <7058> +<2167> <58c7> +<2168> <8b5a> +<2169> <8ac7> +<216a> <5606> +<216b> <6e6f> +<216c> <71d9> +endbfchar + +100 beginbfchar +<216d> <6fe4> +<216e> <7e27> +<216f> <8a0e> +<2170> <9a30> +<2171> <8b04> +<2172> <92bb> +<2173> <984c> +<2174> <9ad4> +<2175> <689d> +<2176> <8cbc> +<2177> <9435> +<2178> <5ef3> +<2179> <807d> +<217a> <70f4> +<217b> <9285> +<217c> <7d71> +<217d> <982d> +<217e> <5716> +<217f> <5857> +<2180> <5718> +<2181> <983d> +<2182> <9d15> +<2183> <99b1> +<2184> <99dd> +<2185> <6a62> +<2186> <7aaa> +<2187> <896a> +<2188> <5f4e> +<2189> <7063> +<218a> <9811> +<218b> <842c> +<218c> <7db2> +<218d> <97cb> +<218e> <9055> +<218f> <570d> +<2190> <7232> +<2191> <6ff0> +<2192> <7dad> +<2193> <8466> +<2194> <5049> +<2195> <50de> +<2196> <7def> +<2197> <8b02> +<2198> <885b> +<2199> <805e> +<219a> <7d0b> +<219b> <7a69> +<219c> <554f> +<219d> <64be> +<219e> <8778> +<219f> <6e26> +<21a0> <7aa9> +<21a1> <55da> +<21a2> <93a2> +<21a3> <70cf> +<21a4> <8aa3> +<21a5> <7121> +<21a6> <856a> +<21a7> <5862> +<21a8> <9727> +<21a9> <52d9> +<21aa> <8aa4> +<21ab> <932b> +<21ac> <72a7> +<21ad> <8972> +<21ae> <7fd2> +<21af> <9291> +<21b0> <6232> +<21b1> <7d30> +<21b2> <8766> +<21b3> <8f44> +<21b4> <5cfd> +<21b5> <4fe0> +<21b6> <72f9> +<21b7> <5687> +<21b8> <9341> +<21b9> <9bae> +<21ba> <7e96> +<21bb> <8ce2> +<21bc> <929c> +<21bd> <9591> +<21be> <986f> +<21bf> <96aa> +<21c0> <73fe> +<21c1> <737b> +<21c2> <7e23> +<21c3> <9921> +<21c4> <61b2> +<21c5> <7dab> +<21c6> <9472> +<21c7> <9109> +<21c8> <8a73> +<21c9> <97ff> +<21ca> <9805> +<21cb> <856d> +<21cc> <56c2> +<21cd> <92b7> +<21ce> <66c9> +<21cf> <562f> +<21d0> <5354> +endbfchar + +100 beginbfchar +<21d1> <633e> +<21d2> <8105> +<21d3> <8ae7> +<21d4> <5beb> +<21d5> <7009> +<21d6> <8b1d> +<21d7> <92c5> +<21d8> <91c1> +<21d9> <8208> +<21da> <92b9> +<21db> <7d89> +<21dc> <9808> +<21dd> <8a31> +<21de> <7dd2> +<21df> <7e8c> +<21e0> <8ed2> +<21e1> <61f8> +<21e2> <9078> +<21e3> <766c> +<21e4> <7d62> +<21e5> <5b78> +<21e6> <52db> +<21e7> <8a62> +<21e8> <5c0b> +<21e9> <99b4> +<21ea> <8a13> +<21eb> <8a0a> +<21ec> <905c> +<21ed> <58d3> +<21ee> <9d09> +<21ef> <9d28> +<21f0> <555e> +<21f1> <4e9e> +<21f2> <8a1d> +<21f3> <95b9> +<21f4> <9e7d> +<21f5> <56b4> +<21f6> <9854> +<21f7> <95bb> +<21f8> <8277> +<21f9> <53ad> +<21fa> <786f> +<21fb> <8afa> +<21fc> <9a57> +<21fd> <9d26> +<21fe> <694a> +<21ff> <63da> +<2200> <760d> +<2201> <967d> +<2202> <7662> +<2203> <990a> +<2204> <6a23> +<2205> <582f> +<2206> <8b21> +<2207> <85e5> +<2208> <723a> +<2209> <9801> +<220a> <696d> +<220b> <8449> +<220c> <91ab> +<220d> <92a5> +<220e> <9824> +<220f> <907a> +<2210> <5100> +<2211> <87fb> +<2212> <85dd> +<2213> <5104> +<2214> <61b6> +<2215> <7fa9> +<2216> <8a63> +<2217> <8b70> +<2218> <8abc> +<2219> <8b6f> +<221a> <7e79> +<221b> <852d> +<221c> <9670> +<221d> <9280> +<221e> <98f2> +<221f> <96b1> +<2220> <6afb> +<2221> <5b30> +<2222> <9df9> +<2223> <61c9> +<2224> <7e93> +<2225> <7469> +<2226> <87a2> +<2227> <71df> +<2228> <7192> +<2229> <8805> +<222a> <8d0f> +<222b> <7a4e> +<222c> <55b2> +<222d> <64c1> +<222e> <50ad> +<222f> <7670> +<2230> <8e34> +<2231> <512a> +<2232> <6182> +<2233> <90f5> +<2234> <923e> +endbfchar + +100 beginbfchar +<2235> <7336> +<2236> <8a98> +<2237> <8f3f> +<2238> <9918> +<2239> <9b5a> +<223a> <6f01> +<223b> <8207> +<223c> <5dbc> +<223d> <8a9e> +<223e> <9b31> +<223f> <7344> +<2240> <8b7d> +<2241> <9810> +<2242> <99ad> +<2243> <9d1b> +<2244> <6df5> +<2245> <8f45> +<2246> <5712> +<2247> <54e1> +<2248> <5713> +<2249> <7de3> +<224a> <9060> +<224b> <9858> +<224c> <7d04> +<224d> <8e8d> +<224e> <9470> +<224f> <95b2> +<2250> <96f2> +<2251> <9116> +<2252> <9695> +<2253> <904b> +<2254> <85f4> +<2255> <9196> +<2256> <6688> +<2257> <96dc> +<2258> <8f09> +<2259> <6522> +<225a> <66ab> +<225b> <8d0a> +<225c> <8d1c> +<225d> <81df> +<225e> <947f> +<225f> <68d7> +<2260> <7ac8> +<2261> <8cac> +<2262> <64c7> +<2263> <5247> +<2264> <6fa4> +<2265> <8cca> +<2266> <8d08> +<2267> <8ecb> +<2268> <9358> +<2269> <9598> +<226a> <8a50> +<226b> <9f4b> +<226c> <50b5> +<226d> <6c08> +<226e> <76de> +<226f> <65ac> +<2270> <8f3e> +<2271> <5d84> +<2272> <68e7> +<2273> <6230> +<2274> <7dbb> +<2275> <5f35> +<2276> <6f32> +<2277> <5e33> +<2278> <8cec> +<2279> <8139> +<227a> <8d99> +<227b> <87c4> +<227c> <8f4d> +<227d> <937a> +<227e> <9019> +<227f> <8c9e> +<2280> <91dd> +<2281> <5075> +<2282> <8a3a> +<2283> <93ae> +<2284> <9663> +<2285> <5e40> +<2286> <7665> +<2287> <912d> +<2288> <8b49> +<2289> <7e54> +<228a> <8077> +<228b> <57f7> +<228c> <8879> +<228d> <7d19> +<228e> <646f> +<228f> <64f2> +<2290> <5e5f> +<2291> <8cea> +<2292> <6eef> +<2293> <9418> +<2294> <7d42> +<2295> <7a2e> +<2296> <816b> +<2297> <8846> +<2298> <8b05> +endbfchar + +100 beginbfchar +<2299> <8ef8> +<229a> <76ba> +<229b> <665d> +<229c> <9a5f> +<229d> <8af8> +<229e> <8a85> +<229f> <71ed> +<22a0> <77da> +<22a1> <56d1> +<22a2> <8caf> +<22a3> <9444> +<22a4> <7bc9> +<22a5> <99d0> +<22a6> <5c08> +<22a7> <78da> +<22a8> <8f49> +<22a9> <8cfa> +<22aa> <6a01> +<22ab> <838a> +<22ac> <88dd> +<22ad> <599d> +<22ae> <58ef> +<22af> <72c0> +<22b0> <9310> +<22b1> <8d05> +<22b2> <589c> +<22b3> <7db4> +<22b4> <8ac4> +<22b5> <6e96> +<22b6> <6fc1> +<22b7> <8cc7> +<22b8> <6f2c> +<22b9> <7d9c> +<22ba> <7e3d> +<22bb> <7e31> +<22bc> <9112> +<22bd> <8a5b> +<22be> <7d44> +<22bf> <947d> +<22c0> <55c7> +<22c1> <5399> +<22c2> <53b4> +<22c3> <9768> +<22c4> <8d0b> +<22c5> <532d> +<22c6> <5331> +<22c7> <8cfe> +<22c8> <5244> +<22c9> <528c> +<22ca> <5274> +<22cb> <50b4> +<22cc> <5000> +<22cd> <5096> +<22ce> <5115> +<22cf> <5102> +<22d0> <5114> +<22d1> <513c> +<22d2> <5137> +<22d3> <50e8> +<22d4> <50c2> +<22d5> <513b> +<22d6> <5110> +<22d7> <513a> +<22d8> <50c9> +<22d9> <7cf4> +<22da> <9ecc> +<22db> <56c5> +<22dc> <9cec> +<22dd> <893b> +<22de> <81e0> +<22df> <8a01> +<22e0> <8a10> +<22e1> <8a0c> +<22e2> <8a15> +<22e3> <8b33> +<22e4> <8a4e> +<22e5> <8a25> +<22e6> <8a41> +<22e7> <8a36> +<22e8> <8a46> +<22e9> <8a54> +<22ea> <8a58> +<22eb> <8a52> +<22ec> <8a86> +<22ed> <8a84> +<22ee> <8a7f> +<22ef> <8a70> +<22f0> <8a7c> +<22f1> <8a75> +<22f2> <8a6c> +<22f3> <8a6e> +<22f4> <8acd> +<22f5> <8ae2> +<22f6> <8a61> +<22f7> <8a9a> +<22f8> <8aa5> +<22fb> <8acf> +<22fc> <8ad1> +<22fd> <8ac9> +<22fe> <8adb> +endbfchar + +100 beginbfchar +<22ff> <8ad7> +<2300> <8ac2> +<2301> <8ab6> +<2302> <8af6> +<2303> <8aeb> +<2304> <8b14> +<2305> <8b01> +<2306> <8ae4> +<2307> <8aed> +<2308> <8afc> +<2309> <8af3> +<230a> <8ae6> +<230b> <8aee> +<230c> <8ade> +<230d> <8b28> +<230e> <8b9c> +<230f> <8b16> +<2310> <8b1a> +<2311> <8b10> +<2312> <8b2b> +<2313> <8b2d> +<2314> <8b56> +<2315> <8b59> +<2316> <8b4e> +<2317> <8b9e> +<2318> <8b6b> +<2319> <8b96> +<231a> <9658> +<231b> <913a> +<231c> <9114> +<231d> <9134> +<231e> <90df> +<231f> <9136> +<2320> <9106> +<2321> <9148> +<2322> <82bb> +<2323> <52f1> +<2324> <5df0> +<2325> <580a> +<2326> <58d9> +<2327> <58e2> +<2328> <58e0> +<2329> <58da> +<232a> <57e1> +<232b> <584f> +<232c> <5816> +<232d> <5852> +<232e> <581d> +<232f> <5864> +<2330> <858c> +<2331> <8553> +<2332> <85f6> +<2333> <83a7> +<2334> <8407> +<2335> <84ef> +<2336> <82e7> +<2337> <8622> +<2338> <8526> +<2339> <584b> +<233a> <7162> +<233b> <8558> +<233c> <84fd> +<233d> <854e> +<233e> <8588> +<233f> <85ba> +<2340> <7296> +<2341> <6ece> +<2342> <8541> +<2343> <85ce> +<2344> <8552> +<2345> <84c0> +<2346> <8452> +<2347> <8464> +<2348> <8494> +<2349> <8435> +<234a> <859f> +<234b> <8555> +<234c> <9daf> +<234d> <8493> +<234e> <7e08> +<234f> <8546> +<2350> <8562> +<2351> <851e> +<2352> <9a40> +<2353> <863a> +<2354> <93a3> +<2355> <8577> +<2356> <861e> +<2357> <85fa> +<2358> <8604> +<2359> <85ea> +<235a> <861a> +<235b> <5969> +<235c> <5c37> +<235d> <636b> +<235e> <6476> +<235f> <649f> +<2360> <6451> +<2361> <645c> +<2362> <64b3> +endbfchar + +100 beginbfchar +<2363> <6504> +<2364> <6516> +<2365> <64f7> +<2366> <64fc> +<2367> <651b> +<2368> <5630> +<2369> <5638> +<236a> <56c8> +<236b> <56a6> +<236c> <5504> +<236d> <54bc> +<236e> <5680> +<236f> <565d> +<2370> <5660> +<2371> <5635> +<2372> <55f6> +<2373> <5666> +<2374> <5672> +<2375> <568c> +<2376> <5665> +<2377> <561c> +<2378> <562e> +<2379> <55e9> +<237a> <5616> +<237b> <56c0> +<237c> <560d> +<237d> <56b3> +<237e> <56c1> +<237f> <566f> +<2380> <8f61> +<2381> <56b6> +<2382> <5695> +<2383> <5707> +<2384> <5e43> +<2385> <5e6c> +<2386> <5e58> +<2387> <5e57> +<2388> <5d87> +<2389> <5cf4> +<238a> <5d50> +<238b> <5d2c> +<238c> <5da7> +<238d> <5da0> +<238e> <5d97> +<238f> <5d0d> +<2390> <5db8> +<2391> <5d81> +<2392> <5dd4> +<2393> <5fa0> +<2394> <7377> +<2395> <7341> +<2396> <736a> +<2397> <733b> +<2398> <736b> +<2399> <7380> +<239a> <737c> +<239b> <98e0> +<239c> <9933> +<239d> <98e9> +<239e> <993c> +<23a1> <98ed> +<23a2> <98f4> +<23a3> <9909> +<23a4> <9911> +<23a5> <991b> +<23a6> <9937> +<23a7> <993f> +<23a8> <9943> +<23ac> <994c> +<23ad> <9962> +<23ae> <5ee1> +<23af> <8ce1> +<23b0> <61fa> +<23b1> <61ae> +<23b2> <616a> +<23b3> <613e> +<23b4> <60b5> +<23b5> <6134> +<23b6> <61cc> +<23b7> <615f> +<23b8> <61e8> +<23b9> <60fb> +<23ba> <6137> +<23bb> <60f2> +<23bc> <6173> +<23bd> <611c> +<23be> <6192> +<23bf> <9582> +<23c0> <9586> +<23c1> <95c8> +<23c2> <958e> +<23c3> <9594> +<23c4> <958c> +<23c5> <95e5> +<23c6> <95ad> +<23c7> <95ab> +<23c8> <9b2e> +<23c9> <95ac> +<23ca> <95be> +<23cb> <95b6> +endbfchar + +100 beginbfchar +<23cc> <9b29> +<23cd> <95bf> +<23ce> <95bd> +<23cf> <95bc> +<23d0> <95c3> +<23d1> <95cb> +<23d2> <95d4> +<23d3> <95d0> +<23d4> <95d5> +<23d5> <95de> +<23d6> <7043> +<23d7> <6f59> +<23d8> <7027> +<23d9> <7018> +<23da> <6ffc> +<23db> <6d87> +<23dc> <6d79> +<23dd> <6e5e> +<23de> <6fae> +<23df> <700f> +<23e0> <6ef8> +<23e1> <6f6f> +<23e2> <6df6> +<23e3> <6f7f> +<23e4> <7006> +<23e5> <6fa0> +<23e6> <700b> +<23e7> <7067> +<23e8> <7044> +<23e9> <7005> +<23ea> <6f77> +<23eb> <7020> +<23ec> <701f> +<23ed> <7032> +<23ee> <7028> +<23ef> <705d> +<23f0> <9a2b> +<23f1> <9087> +<23f2> <9015> +<23f3> <9090> +<23f4> <5c68> +<23f5> <5f33> +<23f6> <5af5> +<23f7> <5ad7> +<23f8> <5b00> +<23f9> <5a6d> +<23fa> <5b08> +<23fb> <5b4c> +<23fc> <5aa7> +<23fd> <5afb> +<23fe> <5b0b> +<23ff> <5b21> +<2400> <5b2a> +<2401> <5b19> +<2402> <99d4> +<2403> <99df> +<2404> <99d9> +<2405> <9a36> +<2406> <9a5b> +<2407> <99d1> +<2408> <99d8> +<2409> <9a4d> +<240a> <9a4a> +<240b> <99e2> +<240c> <9a6a> +<240d> <9a0f> +<240e> <9a0d> +<240f> <9a05> +<2410> <9a42> +<2411> <9a2d> +<2412> <9a16> +<2413> <9a41> +<2414> <9a2e> +<2415> <9a38> +<2418> <9a4f> +<2419> <9a65> +<241a> <9a64> +<241b> <7cf9> +<241c> <7d06> +<241d> <7d02> +<2420> <7e8a> +<2421> <7d1c> +<2422> <7d15> +<2423> <7d13> +<2424> <7d3a> +<2425> <7d32> +<2426> <7d31> +<2427> <7e10> +<2428> <7d3c> +<2429> <7d40> +<242a> <7d3f> +<242b> <7d5d> +<242c> <7d4e> +<242d> <7d73> +<242e> <7d86> +<242f> <7d83> +<2430> <7d88> +<2431> <7dbe> +<2432> <7dba> +<2433> <7dcb> +endbfchar + +100 beginbfchar +<2434> <7dd4> +<2435> <7dc4> +<2436> <7d9e> +<2437> <7dac> +<2438> <7db9> +<2439> <7da3> +<243a> <7db0> +<243b> <7dc7> +<243c> <7dd9> +<243d> <7dd7> +<243e> <7df9> +<243f> <7df2> +<2440> <7e62> +<2441> <7de6> +<2442> <7df6> +<2443> <7df1> +<2444> <7e0b> +<2445> <7de1> +<2446> <7e09> +<2447> <7e1d> +<2448> <7e1f> +<2449> <7e1e> +<244a> <7e2d> +<244b> <7e0a> +<244c> <7e11> +<244d> <7e7d> +<244e> <7e39> +<244f> <7e35> +<2450> <7e32> +<2451> <7e46> +<2452> <7e45> +<2453> <7e88> +<2454> <7e5a> +<2455> <7e52> +<2456> <7e6e> +<2457> <7e7e> +<2458> <7e70> +<2459> <7e6f> +<245a> <7e98> +<245b> <74a3> +<245c> <744b> +<245d> <74cf> +<245e> <980a> +<245f> <74bd> +<2460> <743f> +<2461> <7489> +<2462> <74a6> +<2463> <74d4> +<2464> <74da> +<2465> <97d9> +<2466> <97de> +<2467> <97dc> +<2468> <69aa> +<2469> <6aea> +<246a> <6898> +<246b> <68d6> +<246c> <6a05> +<246d> <689f> +<246e> <6adb> +<246f> <6af3> +<2470> <6ae8> +<2471> <6adf> +<2472> <6a89> +<2473> <690f> +<2474> <6a48> +<2475> <6968> +<2476> <69bf> +<2477> <6a3a> +<2478> <6a9c> +<2479> <6b12> +<247a> <6b1e> +<247b> <6add> +<247c> <69e7> +<247d> <6b0f> +<247e> <6b16> +<247f> <6aec> +<2480> <6ada> +<2481> <6af8> +<2482> <6ab3> +<2483> <6ae7> +<2484> <6aa3> +<2485> <6ad3> +<2486> <6ade> +<2487> <6ba4> +<2488> <6b9e> +<2489> <6bae> +<248a> <6bab> +<248b> <6baf> +<248c> <8ed4> +<248d> <8edb> +<248e> <8ef2> +<248f> <8efb> +<2490> <8f64> +<2491> <8ef9> +<2492> <8efc> +<2493> <8eeb> +<2494> <8ee4> +<2495> <8f62> +<2496> <8efa> +<2497> <8efe> +endbfchar + +100 beginbfchar +<2498> <8f0a> +<2499> <8f07> +<249a> <8f05> +<249b> <8f12> +<249c> <8f26> +<249f> <8f1c> +<24a0> <8f33> +<24a1> <8f46> +<24a2> <8f54> +<24a3> <6214> +<24a4> <6227> +<24a5> <750c> +<24a6> <66c7> +<24a7> <66c4> +<24a8> <6689> +<24a9> <66d6> +<24aa> <8cc1> +<24ab> <8cb0> +<24ac> <8cba> +<24ad> <8cbd> +<24ae> <8d04> +<24af> <8cb2> +<24b0> <8cc5> +<24b1> <8d10> +<24b2> <8cd1> +<24b3> <8cda> +<24b4> <8cd5> +<24b5> <8ceb> +<24b6> <8ce7> +<24b7> <8cfb> +<24b8> <8998> +<24b9> <89ac> +<24ba> <89a1> +<24bb> <89bf> +<24bc> <89a6> +<24bd> <89af> +<24be> <89b2> +<24bf> <89b7> +<24c0> <6bff> +<24c1> <6c0c> +<24c2> <6c2c> +<24c3> <7258> +<24c4> <6727> +<24c5> <8156> +<24c6> <81da> +<24c7> <811b> +<24c8> <81be> +<24c9> <8161> +<24ca> <81cf> +<24cb> <6b5f> +<24ce> <98b6> +<24cf> <98bc> +<24d0> <98c6> +<24d1> <98c8> +<24d2> <8f42> +<24d3> <9f4f> +<24d4> <6595> +<24d5> <716c> +<24d6> <7152> +<24d7> <7197> +<24d8> <71c1> +<24d9> <71dc> +<24da> <71fe> +<24db> <79b0> +<24dc> <798e> +<24dd> <79aa> +<24de> <61df> +<24df> <6164> +<24e0> <61e3> +<24e1> <6207> +<24e2> <6fa9> +<24e3> <78ef> +<24e4> <78ad> +<24e5> <7868> +<24e6> <78b8> +<24e7> <792a> +<24e8> <7931> +<24e9> <7864> +<24ea> <78fd> +<24eb> <78e7> +<24ec> <78e3> +<24ed> <9f95> +<24ee> <7798> +<24ef> <775e> +<24f0> <77bc> +<24f1> <7f86> +<24f2> <7f88> +<24f6> <91d9> +<24f7> <91d7> +<24f8> <91d5> +<24f9> <91f7> +<24fa> <91e7> +<24fb> <91e4> +<24fc> <9346> +<24fd> <91f5> +<24fe> <91f9> +<24ff> <9208> +<2500> <9226> +<2501> <9245> +<2502> <9211> +endbfchar + +100 beginbfchar +<2503> <9210> +<2504> <9201> +<2505> <9227> +<2506> <9204> +<2507> <9225> +<2508> <9200> +<2509> <923a> +<250a> <9266> +<250b> <9237> +<250c> <9233> +<250d> <9255> +<250e> <923d> +<250f> <9238> +<2510> <925e> +<2513> <923f> +<2514> <9460> +<2515> <9230> +<2516> <9249> +<2517> <9248> +<2518> <924d> +<2519> <922e> +<251a> <9239> +<251b> <9438> +<251c> <92ac> +<251d> <92a0> +<251e> <927a> +<251f> <92aa> +<2520> <92ee> +<2521> <92cf> +<2522> <9403> +<2523> <92e3> +<2524> <943a> +<2525> <92b1> +<2526> <92a6> +<2527> <93a7> +<2528> <9296> +<2529> <92cc> +<252a> <92a9> +<252b> <93f5> +<252c> <9293> +<252d> <927f> +<252e> <93a9> +<252f> <929a> +<2530> <931a> +<2531> <92ab> +<2532> <9283> +<2533> <940b> +<2534> <92a8> +<2535> <92a3> +<2536> <9412> +<2537> <9338> +<2538> <92f1> +<2539> <93d7> +<253a> <92e5> +<253b> <92f0> +<253c> <92ef> +<253d> <92e8> +<253e> <92bc> +<253f> <92dd> +<2540> <92f6> +<2543> <92c3> +<2544> <92df> +<2545> <92e6> +<2546> <9312> +<2547> <9306> +<2548> <9369> +<2549> <931b> +<254a> <9340> +<254b> <9301> +<254c> <9315> +<254d> <932e> +<254e> <9343> +<2551> <931f> +<2552> <9319> +<2553> <9365> +<2554> <9347> +<2555> <9376> +<2556> <9354> +<2557> <9364> +<2558> <93aa> +<2559> <9370> +<255a> <9384> +<255b> <93e4> +<255c> <93d8> +<255d> <9428> +<255e> <9387> +<255f> <93cc> +<2560> <9398> +<2561> <93b8> +<2562> <93bf> +<2563> <93a6> +<2564> <93b0> +<2565> <93b5> +<2566> <944c> +<2567> <93e2> +<256a> <93cd> +<256b> <93de> +<256c> <93c3> +<256d> <93c7> +<256e> <93d1> +endbfchar + +100 beginbfchar +<256f> <9414> +<2570> <941d> +<2571> <93f7> +<2572> <9465> +<2573> <9413> +<2574> <946d> +<2575> <9420> +<2576> <9479> +<2577> <93f9> +<2578> <9419> +<2579> <944a> +<257a> <9432> +<257b> <943f> +<257c> <9454> +<257d> <9463> +<257e> <937e> +<257f> <7a61> +<2580> <9ce9> +<2581> <9cf6> +<2582> <9d07> +<2583> <9d06> +<2584> <9d23> +<2585> <9d87> +<2586> <9e15> +<2587> <9d1d> +<2588> <9d1f> +<2589> <9de5> +<258a> <9d2f> +<258b> <9dd9> +<258c> <9d30> +<258d> <9d42> +<258e> <9e1e> +<258f> <9d53> +<2590> <9e1d> +<2591> <9d60> +<2592> <9d52> +<2593> <9df3> +<2594> <9d5c> +<2595> <9d61> +<2596> <9d93> +<2597> <9d6a> +<2598> <9d6f> +<2599> <9d89> +<259a> <9d98> +<259b> <9d9a> +<259c> <9dc0> +<259d> <9da5> +<259e> <9da9> +<259f> <9dc2> +<25a0> <9dbc> +<25a1> <9e1a> +<25a2> <9dd3> +<25a3> <9dda> +<25a4> <9def> +<25a5> <9de6> +<25a6> <9df2> +<25a7> <9df8> +<25a8> <9e0c> +<25a9> <9dfa> +<25aa> <9e1b> +<25ab> <7664> +<25ac> <7658> +<25ad> <7667> +<25ae> <7602> +<25b1> <7649> +<25b2> <761e> +<25b3> <763b> +<25b6> <7669> +<25b7> <7672> +<25b8> <7ac7> +<25b9> <7ab6> +<25ba> <8960> +<25bb> <8933> +<25bc> <895d> +<25bd> <8947> +<25be> <8938> +<25bf> <8964> +<25c0> <76b8> +<25c1> <802e> +<25c2> <802c> +<25c3> <8079> +<25c4> <8075> +<25c5> <9807> +<25c8> <9821> +<25c9> <981c> +<25ca> <6f41> +<25cb> <9826> +<25cc> <9837> +<25cd> <984e> +<25ce> <9853> +<25cf> <9873> +<25d0> <9862> +<25d1> <9859> +<25d2> <9865> +<25d3> <986c> +<25d4> <9870> +<25d5> <87e3> +<25d6> <8806> +<25d7> <8706> +<25d8> <8823> +endbfchar + +100 beginbfchar +<25d9> <87f6> +<25da> <86fa> +<25db> <87ef> +<25dc> <8784> +<25dd> <8810> +<25de> <87c8> +<25df> <8811> +<25e0> <87bb> +<25e1> <87ce> +<25e2> <7f4c> +<25e3> <7be4> +<25e4> <7b67> +<25e5> <7c69> +<25e6> <7bf3> +<25e7> <7c00> +<25e8> <7bcb> +<25e9> <7c5c> +<25ea> <7c1e> +<25eb> <7c2b> +<25ec> <7c23> +<25ed> <7c6a> +<25ee> <7c5f> +<25ef> <8264> +<25f0> <826b> +<25f1> <88ca> +<25f2> <7fa5> +<25f3> <7cf2> +<25f4> <7cf6> +<25f5> <7cdd> +<25f6> <7e36> +<25f7> <9ea9> +<25f8> <8db2> +<25f9> <91c5> +<25fa> <91c3> +<25fb> <9e7a> +<25fc> <8e89> +<25fd> <8e4c> +<25fe> <8e92> +<25ff> <8e7a> +<2600> <8e55> +<2601> <8e9a> +<2602> <8e8b> +<2603> <8e93> +<2604> <8e91> +<2605> <8ea1> +<2606> <8e63> +<2607> <8eaa> +<2608> <8ea6> +<2609> <89f4> +<260a> <89f6> +<260b> <975a> +<260c> <9742> +<260d> <973d> +<260e> <9744> +<260f> <9f54> +<2610> <9f5f> +<2611> <9f59> +<2612> <9f60> +<2613> <9f5c> +<2614> <9f66> +<2615> <9f6c> +<2616> <9f6a> +<2617> <9f77> +<2618> <9efd> +<2619> <9eff> +<261a> <9f09> +<261b> <8b8e> +<261c> <947e> +<261d> <93e8> +<261e> <9b77> +<261f> <9b74> +<2620> <9b81> +<2621> <9b83> +<2622> <9b8e> +<2623> <9c78> +<2624> <7a4c> +<2625> <9b92> +<2626> <9c5f> +<2627> <9b90> +<2628> <9bad> +<2629> <9b9a> +<262a> <9baa> +<262b> <9b9e> +<262c> <9c6d> +<262d> <9bab> +<262e> <9b9d> +<262f> <9c58> +<2630> <9bc1> +<2631> <9c7a> +<2632> <9c31> +<2633> <9c39> +<2634> <9c23> +<2635> <9c37> +<2636> <9bc0> +<2637> <9bca> +<2638> <9bc7> +<2639> <9bfd> +<263a> <9bd6> +<263d> <9be1> +<263e> <9be4> +endbfchar + +100 beginbfchar +<263f> <9be7> +<2640> <9bdd> +<2641> <9be2> +<2642> <9bf0> +<2643> <9bdb> +<2644> <9bf4> +<2645> <9bd4> +<2646> <9c5d> +<2647> <9c08> +<2648> <9c10> +<2649> <9c0d> +<264a> <9c12> +<264b> <9c09> +<264c> <9bff> +<264d> <9c20> +<264e> <9c32> +<264f> <9c2d> +<2650> <9c28> +<2651> <9c25> +<2652> <9c29> +<2653> <9c33> +<2654> <9c3e> +<2655> <9c48> +<2656> <9c3b> +<2657> <9c35> +<2658> <9c45> +<2659> <9c56> +<265a> <9c54> +<265b> <9c52> +<265c> <9c67> +<265d> <97c3> +<265e> <97bd> +<265f> <97c9> +<2660> <9dbb> +<2661> <9acf> +<2662> <9ad6> +<2663> <9ad5> +<2664> <9b58> +<2665> <9b4e> +<2666> <9957> +<2667> <995c> +<2668> <9b22> +<2669> <9ef7> +<266a> <9ef2> +<266b> <896c> +<266c> <95c6> +<266d> <9336> +<266e> <5f46> +<266f> <8514> +<2670> <7e94> +<2671> <9f63> +<2672> <5679> +<2673> <9f15> +<2674> <5641> +<2675> <9aee> +<2676> <8907> +<2677> <7a40> +<2678> <98b3> +<2679> <95a4> +<267a> <9b0d> +<267b> <8ff4> +<267c> <5f59> +<267d> <7a6b> +<267e> <98e2> +<267f> <50a2> +<2680> <8591> +<2681> <5118> +<2682> <6372> +<2683> <524b> +<2684> <774f> +<2685> <7e8d> +<2686> <66c6> +<2687> <77ad> +<2688> <9e75> +<2689> <56c9> +<268a> <9ef4> +<268b> <6fdb> +<268c> <61de> +<268d> <77c7> +<268e> <7030> +<268f> <9eb5> +<2690> <884a> +<2691> <95e2> +<2692> <97c6> +<2693> <7c64> +<2694> <7e34> +<2695> <97a6> +<2696> <9eaf> +<2697> <56cc> +<2698> <98b1> +<2699> <6aaf> +<269a> <7f4e> +<269b> <7cf0> +<269c> <4fc2> +<269d> <7e6b> +<269e> <9e79> +<269f> <56ae> +<26a0> <9b1a> +<26a1> <846f> +<26a2> <79a6> +endbfchar + +100 beginbfchar +<26a3> <7c72> +<26a4> <9ad2> +<26a5> <96bb> +<26a6> <7dfb> +<26a7> <88fd> +<26a8> <7843> +<26b5> <02d9> +<26b6> <2013> +<26b7> <2015> +<26b8> <2025> +<26b9> <2035> +<26ba> <2105> +<26bb> <2109> +<26c0> <2215> +<26c1> <221f> +<26c2> <2223> +<26c3> <2252> +<26c6> <22bf> +<26ff> <25e2> +<2703> <2609> +<2704> <2295> +<2705> <3012> +<2711> <32a3> +<2717> <33a1> +<2718> <33c4> +<2719> <33ce> +<271c> <33d5> +<271d> +<271e> +<271f> +<2720> <2121> +<2721> <3231> +<2722> <2010> +<2723> <30fc> +<2728> <3006> +<274b> <303e> +<2758> <4e02> +<275c> <4e0f> +<275d> <4e12> +<275e> <4e17> +<2762> <4e23> +<2763> <4e26> +<2764> <4e29> +<2767> <4e31> +<2768> <4e33> +<2769> <4e35> +<276a> <4e37> +<276b> <4e3c> +<276f> <4e44> +<2770> <4e46> +<2771> <4e4a> +<2772> <4e51> +<2773> <4e55> +<2774> <4e57> +<2783> <4e72> +<2794> <4e87> +<2795> <4e8a> +<2796> <4e90> +<2799> <4e99> +<279c> <4ea3> +<279d> <4eaa> +<27a1> <4eb4> +<27a9> <4ec8> +<27aa> <4ecc> +<27ad> <4ed2> +<27b1> <4ee0> +<27b2> <4ee2> +<27b5> <4ee9> +<27b9> <4ef1> +<27ba> <4ef4> +<27be> <4efc> +<27bf> <4efe> +<27c0> <4f00> +<27d1> <4f21> +<27d2> <4f23> +<27d8> <4f31> +<27d9> <4f33> +<27da> <4f35> +<27db> <4f37> +<27dc> <4f39> +<27dd> <4f3b> +<27eb> <4f52> +<27ec> <4f54> +<27ed> <4f56> +<27f0> <4f66> +<27f1> <4f68> +<27f8> <4f75> +<27fd> <4f7d> +<2800> <4f82> +<2801> <4f85> +<2802> <4f87> +<2803> <4f8a> +<2804> <4f8c> +<2805> <4f8e> +<2806> <4f90> +<2809> <4f95> +<280d> <4f9c> +<2812> <4fa4> +<2813> <4fab> +<2814> <4fad> +endbfchar + +100 beginbfchar +<2831> <4fd9> +<2832> <4fdb> +<2833> <4fe2> +<2836> <4fe7> +<2839> <4ff0> +<283a> <4ff2> +<283f> <4ff9> +<2843> <4fff> +<284b> <500a> +<284c> <500e> +<284d> <5010> +<284e> <5013> +<2852> <501b> +<2855> <5020> +<2859> <5027> +<2865> <503b> +<2866> <503d> +<2870> <504d> +<287a> <505b> +<28a7> <5097> +<28b0> <50a4> +<28b1> <50a6> +<28b8> <50b6> +<28ca> <50d0> +<28e1> <50f4> +<28e5> <50fa> +<28ea> <5101> +<28eb> <5103> +<28ec> <5105> +<28ed> <510a> +<28f2> <5111> +<28f3> <5113> +<28fc> <5120> +<2914> <5142> +<2915> <5147> +<2916> <514a> +<2917> <514c> +<291b> <5153> +<291f> <515b> +<2929> <516a> +<292a> <516f> +<292b> <5172> +<292c> <517a> +<293b> <5198> +<293c> <519a> +<2940> <51a1> +<2941> <51a3> +<2949> <51b4> +<2952> <51c5> +<2953> <51c8> +<2954> <51ca> +<2955> <51ce> +<2956> <51d0> +<2960> <51dc> +<296b> <51ec> +<296c> <51ee> +<296d> <51f2> +<296e> <51f4> +<296f> <51f7> +<2970> <51fe> +<2973> <5209> +<297b> <521c> +<2984> <522a> +<2985> <522c> +<2986> <522f> +<298b> <523c> +<298c> <523e> +<2995> <5255> +<299a> <525d> +<29a0> <5266> +<29a1> <5268> +<29a7> <5273> +<29af> <527e> +<29b0> <5280> +<29b4> <528b> +<29b7> <5292> +<29bf> <529c> +<29d1> <52c0> +<29d2> <52c2> +<29d6> <52c8> +<29d7> <52ca> +<29dc> <52d1> +<29df> <52d7> +<29e0> <52da> +<29e1> <52dc> +<29e4> <52e3> +<29fc> <5307> +<2a00> <530c> +<2a01> <530e> +<2a06> <5318> +<2a0b> <5322> +<2a13> <5330> +<2a1d> <5342> +<2a1e> <5344> +<2a1f> <5346> +<2a23> <5350> +<2a26> <535b> +<2a27> <535d> +<2a28> <5365> +<2a29> <5368> +endbfchar + +100 beginbfchar +<2a2a> <536a> +<2a2d> <5372> +<2a2e> <5376> +<2a2f> <5379> +<2a36> <5383> +<2a39> <538a> +<2a45> <539e> +<2a46> <53a1> +<2a47> <53a4> +<2a48> <53a7> +<2a4f> <53b3> +<2a50> <53b5> +<2a58> <53c0> +<2a62> <53d5> +<2a63> <53da> +<2a67> <53e1> +<2a68> <53e7> +<2a69> <53f4> +<2a6a> <53fa> +<2a6e> <5402> +<2a6f> <5405> +<2a70> <5407> +<2a71> <540b> +<2a72> <5414> +<2a76> <541c> +<2a77> <5422> +<2a7a> <542a> +<2a7b> <5430> +<2a7c> <5433> +<2a7f> <543a> +<2a80> <543d> +<2a81> <543f> +<2a86> <5447> +<2a87> <5449> +<2a8c> <5451> +<2a8d> <545a> +<2a93> <5463> +<2a94> <5465> +<2a95> <5467> +<2a9e> <5474> +<2aa3> <5481> +<2aa4> <5483> +<2aa5> <5485> +<2aaa> <548d> +<2aab> <5491> +<2aac> <5493> +<2aaf> <549c> +<2ab5> <54a5> +<2ab6> <54ae> +<2ab7> <54b0> +<2ab8> <54b2> +<2abe> <54be> +<2abf> <54c3> +<2ac0> <54c5> +<2ac3> <54d6> +<2ac4> <54d8> +<2ac5> <54db> +<2ac6> <54e0> +<2ad5> <54fb> +<2ad6> <54fe> +<2ad7> <5500> +<2ada> <5505> +<2adb> <5508> +<2aed> <5521> +<2af2> <552b> +<2af3> <552d> +<2af4> <5532> +<2afc> <553d> +<2afd> <5540> +<2afe> <5542> +<2aff> <5545> +<2b08> <5554> +<2b0e> <555d> +<2b15> <556b> +<2b1e> <557d> +<2b1f> <557f> +<2b25> <5590> +<2b2d> <559e> +<2b37> <55ab> +<2b38> <55ad> +<2b3b> <55b4> +<2b3c> <55b6> +<2b3d> <55b8> +<2b3e> <55ba> +<2b3f> <55bc> +<2b45> <55c8> +<2b4a> <55d5> +<2b4e> <55db> +<2b4f> <55de> +<2b50> <55e0> +<2b51> <55e2> +<2b52> <55e7> +<2b57> <55f4> +<2b5d> <55ff> +<2b62> <5607> +<2b69> <5615> +<2b6c> <561d> +<2b72> <5628> +<2b75> <5633> +<2b76> <5637> +endbfchar + +100 beginbfchar +<2b77> <563a> +<2b7b> <5640> +<2b91> <5661> +<2b92> <5663> +<2b93> <5667> +<2b96> <5670> +<2b97> <5673> +<2b98> <5675> +<2b99> <5677> +<2b9a> <567a> +<2ba6> <568d> +<2baa> <5694> +<2bb9> <56a7> +<2bc2> <56b5> +<2bce> <56cb> +<2bd9> <56dc> +<2bda> <56e3> +<2be1> <56ec> +<2bee> <5705> +<2bef> <570c> +<2bf6> <5717> +<2bff> <5724> +<2c03> <572b> +<2c0d> <573f> +<2c0e> <5741> +<2c15> <574b> +<2c1f> <5765> +<2c20> <5767> +<2c21> <576c> +<2c22> <576e> +<2c44> <57a5> +<2c45> <57a8> +<2c46> <57aa> +<2c47> <57ac> +<2c4b> <57b3> +<2c63> <57d3> +<2c68> <57de> +<2c73> <57ee> +<2c7e> <5801> +<2c83> <580c> +<2c8f> <581f> +<2cb0> <584e> +<2cb1> <5850> +<2cb2> <5853> +<2cbd> <5863> +<2cd2> <587f> +<2cd3> <5882> +<2cd4> <5884> +<2ce4> <589b> +<2ce5> <589d> +<2cfd> <58bd> +<2d03> <58c6> +<2d0d> <58d2> +<2d0e> <58d4> +<2d14> <58e1> +<2d15> <58e3> +<2d1a> <58ea> +<2d1b> <58ed> +<2d28> <5903> +<2d30> <590e> +<2d37> <591b> +<2d3c> <5923> +<2d3d> <5926> +<2d3e> <5928> +<2d3f> <592c> +<2d40> <5930> +<2d45> <593b> +<2d46> <593d> +<2d49> <5943> +<2d4c> <594a> +<2d4f> <5950> +<2d52> <5959> +<2d58> <5961> +<2d5e> <596b> +<2d5f> <596d> +<2d64> <5975> +<2d65> <5977> +<2d6c> <5985> +<2d6d> <5989> +<2d76> <5998> +<2d8a> <59ba> +<2d9d> <59d9> +<2d9e> <59db> +<2da4> <59e4> +<2db6> <59fa> +<2dba> <5a00> +<2dbb> <5a02> +<2dc2> <5a12> +<2dce> <5a24> +<2dd9> <5a33> +<2dda> <5a35> +<2e00> <5a65> +<2e3e> <5ab4> +<2e54> <5ad3> +<2e55> <5ad5> +<2e5c> <5ae2> +<2e61> <5aea> +<2e7a> <5b0a> +<2e84> <5b18> +<2e99> <5b31> +endbfchar + +100 beginbfchar +<2e9a> <5b33> +<2eb2> <5b52> +<2eb3> <5b56> +<2eb4> <5b5e> +<2ebc> <5b72> +<2ebd> <5b74> +<2ec0> <5b79> +<2ec3> <5b7e> +<2ec4> <5b82> +<2ec5> <5b86> +<2ec6> <5b8a> +<2ecc> <5b94> +<2ecd> <5b96> +<2ece> <5b9f> +<2ed8> <5bb7> +<2ede> <5bc3> +<2ee6> <5bd1> +<2ef0> <5be0> +<2ef1> <5be3> +<2ef2> <5bea> +<2ef3> <5bed> +<2ef4> <5bef> +<2ef9> <5bf7> +<2efc> <5c00> +<2eff> <5c05> +<2f00> <5c0c> +<2f01> <5c10> +<2f04> <5c17> +<2f05> <5c19> +<2f06> <5c1b> +<2f0b> <5c23> +<2f0c> <5c26> +<2f29> <5c5f> +<2f2a> <5c67> +<2f2e> <5c6d> +<2f2f> <5c70> +<2f3b> <5c80> +<2f48> <5c95> +<2f52> <5caa> +<2f56> <5cb2> +<2f57> <5cb4> +<2f58> <5cb6> +<2f5d> <5cbe> +<2f5e> <5cc0> +<2f7c> <5ce7> +<2f7d> <5ce9> +<2f85> <5cf5> +<2f8a> <5cfc> +<2f9b> <5d15> +<2fa6> <5d25> +<2fa7> <5d28> +<2fcd> <5d5c> +<2fd9> <5d6a> +<2fec> <5d83> +<2ffe> <5d98> +<2fff> <5d9a> +<3019> <5db9> +<301a> <5dbb> +<3028> <5dcc> +<302d> <5dd3> +<3034> <5ddc> +<3039> <5dea> +<3045> <5e04> +<3046> <5e07> +<304e> <5e17> +<3059> <5e2c> +<305c> <5e32> +<3063> <5e41> +<3071> <5e56> +<3076> <5e60> +<3083> <5e75> +<3084> <5e77> +<3088> <5e85> +<308e> <5e92> +<308f> <5e98> +<3090> <5e9b> +<3091> <5e9d> +<3099> <5eac> +<309f> <5eb4> +<30c1> <5ee9> +<30c2> <5eeb> +<30c9> <5ef5> +<30d2> <5f09> +<30d6> <5f10> +<30d7> <5f12> +<30d8> <5f14> +<30d9> <5f16> +<30e3> <5f28> +<30e6> <5f2e> +<30e7> <5f30> +<30e8> <5f32> +<30e9> <5f34> +<30ed> <5f3b> +<30f6> <5f47> +<30fa> <5f4d> +<30fb> <5f4f> +<30fc> <5f51> +<30fd> <5f54> +<3100> <5f5c> +<3104> <5f63> +endbfchar + +100 beginbfchar +<3105> <5f65> +<3108> <5f6b> +<310b> <5f72> +<310f> <5f78> +<3110> <5f7a> +<3114> <5f83> +<3115> <5f86> +<311b> <5f96> +<311e> <5f9d> +<311f> <5f9f> +<312e> <5fb6> +<312f> <5fb8> +<313b> <5fce> +<314a> <5fec> +<3154> <5ffc> +<315c> <6013> +<315f> <601a> +<3174> <6040> +<317c> <604c> +<317f> <6051> +<318d> <606e> +<3192> <6077> +<3193> <607e> +<31a1> <6093> +<31a2> <6095> +<31a6> <609c> +<31a7> <609e> +<31ac> <60a7> +<31af> <60ae> +<31b0> <60b0> +<31b1> <60b3> +<31b2> <60b7> +<31ca> <60d9> +<31cb> <60db> +<31cc> <60de> +<31d1> <60ea> +<31d2> <60f5> +<31dd> <6107> +<31ee> <6125> +<320a> <6149> +<320b> <614d> +<3213> <6159> +<3216> <615e> +<321b> <6169> +<321e> <616f> +<3221> <6174> +<3235> <618f> +<3236> <6193> +<3246> <61aa> +<3247> <61ad> +<325f> <61d3> +<326e> <61e7> +<327a> <61f9> +<327b> <61fb> +<327c> <61fd> +<3282> <6209> +<3283> <6213> +<3284> <6219> +<3288> <6220> +<3289> <6223> +<328a> <6226> +<328d> <622b> +<328e> <622d> +<328f> <622f> +<3290> <6231> +<3298> <6242> +<329c> <624a> +<32ad> <6268> +<32b6> <627d> +<32c4> <6294> +<32c5> <6299> +<32c9> <62a3> +<32d8> <62ba> +<32d9> <62be> +<32dc> <62c3> +<32dd> <62cb> +<32de> <62cf> +<32df> <62d1> +<32e0> <62d5> +<32e5> <62e4> +<32e8> <62f0> +<32e9> <62f2> +<32ea> <62f5> +<32ef> <6300> +<3300> <6319> +<3301> <631c> +<3304> <6329> +<3315> <6344> +<3318> <634a> +<3325> <6360> +<3329> <636a> +<332a> <636c> +<3336> <6381> +<3339> <638b> +<333a> <638d> +<333b> <6391> +<333f> <6397> +<3347> <63a1> +<3348> <63a4> +<3349> <63a6> +endbfchar + +100 beginbfchar +<334a> <63ab> +<334b> <63af> +<3350> <63b9> +<3351> <63bb> +<3352> <63bd> +<3353> <63bf> +<3357> <63c5> +<335d> <63d1> +<3367> <63df> +<3368> <63e2> +<3373> <63f3> +<3374> <63f5> +<3375> <63f7> +<337a> <63fe> +<3382> <640e> +<338a> <641d> +<338b> <641f> +<3393> <642b> +<339a> <6435> +<33a0> <643e> +<33a1> <6440> +<33a4> <6449> +<33ab> <6453> +<33b2> <645d> +<33ba> <6468> +<33be> <646e> +<33c4> <6477> +<33cb> <6483> +<33cc> <6486> +<33d5> <6494> +<33e2> <64aa> +<33e3> <64af> +<33e4> <64b1> +<33e5> <64b4> +<33e6> <64b6> +<33e7> <64b9> +<33e8> <64bd> +<33e9> <64c3> +<33ea> <64c6> +<33ed> <64cc> +<33ee> <64cf> +<33ef> <64d1> +<33f0> <64d3> +<33f3> <64d9> +<33f7> <64df> +<33f8> <64e1> +<33f9> <64e3> +<33fa> <64e5> +<3402> <64f3> +<3407> <64fd> +<3408> <64ff> +<340c> <6505> +<3416> <6513> +<3417> <6515> +<3418> <6517> +<3419> <651a> +<341a> <651c> +<3423> <652d> +<3428> <6537> +<3429> <653a> +<3437> <6550> +<343b> <6558> +<343c> <655a> +<343d> <655c> +<344a> <6571> +<344b> <6573> +<344c> <6576> +<345f> <6592> +<3460> <6594> +<3461> <6596> +<3462> <6598> +<3463> <659a> +<3466> <65a0> +<3469> <65a6> +<346a> <65a8> +<346b> <65aa> +<346c> <65ae> +<3473> <65b8> +<3479> <65c2> +<347e> <65cd> +<348c> <65e1> +<349c> <6601> +<34a2> <660b> +<34a3> <660d> +<34ad> <661e> +<34b2> <6626> +<34b7> <662e> +<34b8> <6630> +<34c0> <663d> +<34d2> <665e> +<34d3> <6660> +<34d6> <6665> +<34d7> <6667> +<34e0> <6675> +<34e9> <6683> +<34ff> <66a3> +<3519> <66c5> +<351a> <66c8> +<3529> <66da> +<3538> <66f1> +endbfchar + +100 beginbfchar +<353d> <66fd> +<3544> <670c> +<354a> <6716> +<354e> <671c> +<354f> <671e> +<3556> <6729> +<3557> <672e> +<3558> <6730> +<3563> <6741> +<3566> <6747> +<3569> <674d> +<356a> <6752> +<3572> <675d> +<357a> <676e> +<357b> <6774> +<357c> <6776> +<3581> <677d> +<3582> <6780> +<3587> <6788> +<3588> <678a> +<3591> <6796> +<3592> <6799> +<3593> <679b> +<3597> <67a4> +<3598> <67a6> +<3599> <67a9> +<359a> <67ac> +<359b> <67ae> +<359e> <67b4> +<35a7> <67c2> +<35b5> <67db> +<35b6> <67df> +<35b7> <67e1> +<35c1> <67f2> +<35ca> <67fe> +<35cf> <6806> +<35d0> <680d> +<35d1> <6810> +<35d2> <6812> +<35f0> <683f> +<35f1> <6847> +<35f2> <684b> +<35f3> <684d> +<35f4> <684f> +<35f5> <6852> +<3600> <686a> +<3609> <6875> +<3613> <6882> +<3614> <6884> +<3627> <689e> +<3631> <68ae> +<3634> <68b4> +<363f> <68c1> +<3646> <68ca> +<3647> <68cc> +<364e> <68d9> +<365e> <68ef> +<3665> <68fb> +<3672> <690c> +<3673> <6911> +<3697> <693e> +<36af> <695f> +<36b4> <6967> +<36b7> <696c> +<36bd> <6976> +<36c3> <6981> +<36c4> <6983> +<36c5> <6985> +<36dd> <69a9> +<36de> <69ac> +<36eb> <69c0> +<36f4> <69cf> +<3700> <69de> +<3719> <69fe> +<371a> <6a00> +<3730> <6a20> +<3731> <6a22> +<3736> <6a29> +<373b> <6a30> +<3757> <6a5a> +<375b> <6a60> +<3780> <6a8f> +<378c> <6aa1> +<3792> <6aaa> +<37ba> <6adc> +<37c2> <6ae9> +<37c3> <6aeb> +<37ed> <6b1f> +<37fe> <6b38> +<37ff> <6b3b> +<3800> <6b3c> +<3807> <6b48> +<381a> <6b60> +<3828> <6b7a> +<382d> <6b85> +<382e> <6b88> +<382f> <6b8c> +<3836> <6b97> +<3837> <6b99> +<3847> <6bb6> +endbfchar + +100 beginbfchar +<384d> <6bc0> +<3854> <6bcc> +<3855> <6bce> +<3858> <6bd8> +<3859> <6bda> +<386d> <6bf4> +<3874> <6bfe> +<387d> <6c0e> +<387e> <6c12> +<387f> <6c17> +<3883> <6c20> +<3884> <6c25> +<3885> <6c2d> +<3886> <6c31> +<3887> <6c33> +<3893> <6c48> +<389c> <6c56> +<38aa> <6c71> +<38ab> <6c73> +<38ac> <6c75> +<38b4> <6c84> +<38b5> <6c87> +<38c0> <6c9a> +<38c4> <6ca0> +<38c5> <6ca2> +<38c6> <6ca8> +<38c7> <6cac> +<38ce> <6cba> +<38d6> <6ccb> +<38e1> <6cdf> +<38e2> <6ce4> +<38e5> <6ce9> +<38e8> <6cf2> +<38e9> <6cf4> +<38ea> <6cf9> +<38f4> <6d0d> +<38fc> <6d18> +<38ff> <6d1f> +<3905> <6d26> +<390c> <6d34> +<3910> <6d3a> +<3913> <6d42> +<3914> <6d44> +<3915> <6d49> +<3916> <6d4c> +<3917> <6d50> +<391c> <6d5b> +<391d> <6d5d> +<391e> <6d5f> +<3937> <6d86> +<393a> <6d8d> +<393d> <6d92> +<3943> <6d9c> +<3944> <6da2> +<3945> <6da5> +<3962> <6dd7> +<3966> <6ddf> +<3969> <6de5> +<396d> <6ded> +<3970> <6df2> +<3971> <6df4> +<3972> <6df8> +<397f> <6e0b> +<3980> <6e0f> +<3983> <6e15> +<398a> <6e22> +<398d> <6e2a> +<398e> <6e2e> +<3991> <6e33> +<3995> <6e39> +<39a9> <6e55> +<39aa> <6e57> +<39cd> <6e84> +<39da> <6e97> +<39de> <6e9e> +<39e3> <6ea6> +<39ea> <6eb0> +<39eb> <6eb3> +<39ec> <6eb5> +<39ef> <6ebc> +<39f3> <6ec3> +<39f4> <6ec6> +<39f8> <6ecd> +<39f9> <6ed0> +<39fa> <6ed2> +<39fb> <6ed6> +<3a00> <6edd> +<3a01> <6ee3> +<3a02> <6ee7> +<3a09> <6ef3> +<3a11> <6f00> +<3a28> <6f21> +<3a2d> <6f2e> +<3a2e> <6f30> +<3a31> <6f37> +<3a37> <6f40> +<3a3f> <6f4c> +<3a4a> <6f5d> +<3a4e> <6f63> +<3a4f> <6f65> +endbfchar + +100 beginbfchar +<3a56> <6f71> +<3a57> <6f73> +<3a5a> <6f79> +<3a5b> <6f7b> +<3a61> <6f85> +<3a77> <6fa8> +<3a7e> <6fb2> +<3aaf> <6ffb> +<3ab0> <6ffd> +<3ab9> <700a> +<3abd> <7010> +<3ac3> <7019> +<3ac4> <701c> +<3ac5> <701e> +<3ad2> <7031> +<3ae9> <7050> +<3afc> <706e> +<3b00> <7074> +<3b01> <7077> +<3b05> <707d> +<3b13> <7093> +<3b25> <70b0> +<3b26> <70b2> +<3b2a> <70ba> +<3b31> <70c9> +<3b3e> <70da> +<3b46> <70e5> +<3b47> <70ea> +<3b48> <70ee> +<3b4f> <70f8> +<3b65> <7114> +<3b66> <7117> +<3b8e> <714b> +<3b8f> <714d> +<3b9c> <715d> +<3ba0> <7163> +<3ba1> <7165> +<3ba4> <716d> +<3bac> <7179> +<3bc0> <7193> +<3bd6> <71b2> +<3bd7> <71b4> +<3be1> <71c2> +<3bee> <71d3> +<3bff> <71ef> +<3c0a> <71fd> +<3c24> <721c> +<3c2f> <7229> +<3c30> <722b> +<3c36> <723c> +<3c48> <7257> +<3c49> <725a> +<3c4a> <725c> +<3c4b> <725e> +<3c4c> <7260> +<3c50> <7268> +<3c65> <728c> +<3c66> <728e> +<3c7e> <72ae> +<3c82> <72b5> +<3c90> <72cf> +<3c91> <72d1> +<3c96> <72d8> +<3c9b> <72df> +<3ca9> <7302> +<3cb7> <7314> +<3cc2> <732d> +<3cc7> <7335> +<3cc8> <733a> +<3ccb> <7340> +<3cd7> <7351> +<3ceb> <7369> +<3cec> <736e> +<3ced> <7371> +<3cf0> <7376> +<3cf1> <7379> +<3cf2> <737d> +<3cf3> <737f> +<3cf9> <7388> +<3cfa> <738a> +<3cff> <7392> +<3d12> <73aa> +<3d15> <73b1> +<3d1f> <73c1> +<3d27> <73ce> +<3d33> <73df> +<3d38> <73e6> +<3d39> <73e8> +<3d50> <7404> +<3d68> <7427> +<3d69> <7429> +<3d6a> <742b> +<3d6b> <742d> +<3d6c> <742f> +<3d76> <7440> +<3d89> <7456> +<3d8a> <7458> +<3d8b> <745d> +<3da3> <747f> +<3da4> <7482> +endbfchar + +100 beginbfchar +<3da8> <7488> +<3da9> <748a> +<3dac> <748f> +<3db8> <749d> +<3de2> <74d3> +<3de8> <74db> +<3de9> <74dd> +<3dea> <74df> +<3deb> <74e1> +<3dec> <74e5> +<3df8> <74f5> +<3e0b> <750e> +<3e0c> <7510> +<3e0d> <7512> +<3e12> <751b> +<3e18> <7524> +<3e1b> <752a> +<3e1c> <752e> +<3e1d> <7534> +<3e1e> <7536> +<3e1f> <7539> +<3e22> <753f> +<3e2b> <754d> +<3e43> <7573> +<3e44> <7575> +<3e45> <7577> +<3e56> <7590> +<3e57> <7593> +<3e58> <7595> +<3e59> <7598> +<3e5c> <759e> +<3e5d> <75a2> +<3e63> <75ad> +<3e6b> <75c6> +<3e72> <75d3> +<3e73> <75d7> +<3e74> <75da> +<3e7a> <75e5> +<3e7b> <75e9> +<3e8a> <7604> +<3e95> <7616> +<3e96> <761a> +<3e99> <7623> +<3e9a> <7628> +<3e9b> <762c> +<3ea4> <763d> +<3ea5> <7641> +<3ea8> <7648> +<3eb1> <7655> +<3eb2> <7657> +<3eb6> <765d> +<3eb9> <7666> +<3eba> <7668> +<3ebb> <766a> +<3ec6> <7683> +<3ec7> <7685> +<3ece> <7692> +<3ee7> <76b3> +<3eeb> <76b9> +<3ef4> <76c7> +<3ef5> <76c9> +<3ef8> <76d3> +<3ef9> <76d5> +<3efe> <76e0> +<3eff> <76e2> +<3f00> <76e6> +<3f07> <76f0> +<3f08> <76f3> +<3f0e> <76fd> +<3f15> <770a> +<3f16> <770c> +<3f26> <7721> +<3f2a> <7727> +<3f2e> <772e> +<3f34> <7739> +<3f35> <773b> +<3f39> <7742> +<3f50> <7764> +<3f51> <7767> +<3f78> <77a1> +<3f7b> <77a6> +<3f7c> <77a8> +<3f7d> <77ab> +<3f82> <77b4> +<3f88> <77be> +<3fa5> <77e4> +<3fa6> <77e6> +<3fa7> <77e8> +<3fa8> <77ea> +<3fae> <77f7> +<3fbe> <7813> +<3fbf> <7815> +<3fc0> <7819> +<3fc1> <781b> +<3fc2> <781e> +<3fc6> <7824> +<3fc7> <7828> +<3fd1> <783d> +<3fd2> <783f> +<3fd5> <7844> +endbfchar + +100 beginbfchar +<3fd6> <7846> +<3fdb> <784d> +<3fdc> <784f> +<3fdd> <7851> +<3fee> <7869> +<4004> <7888> +<4009> <7892> +<400d> <7899> +<4010> <78a0> +<4011> <78a2> +<4012> <78a4> +<4013> <78a6> +<4014> <78a8> +<401d> <78bb> +<401e> <78bd> +<4043> <78f3> +<406a> <7925> +<4079> <793d> +<407a> <793f> +<407f> <7947> +<408d> <7961> +<4090> <7966> +<4095> <796e> +<409d> <7979> +<40c5> <79af> +<40c6> <79b2> +<40cc> <79bc> +<40cd> <79bf> +<40ce> <79c2> +<40d3> <79ca> +<40d4> <79cc> +<40e5> <79e5> +<40e6> <79e8> +<40e7> <79ea> +<40e8> <79ec> +<40e9> <79ee> +<40f3> <79fc> +<40f6> <7a01> +<40fd> <7a0c> +<410a> <7a1f> +<4119> <7a32> +<411d> <7a38> +<411e> <7a3a> +<411f> <7a3e> +<4140> <7a6a> +<4148> <7a75> +<414d> <7a82> +<414e> <7a85> +<414f> <7a87> +<415c> <7a9e> +<4161> <7aa7> +<4162> <7aab> +<4174> <7ac6> +<4175> <7ac9> +<4188> <7ae4> +<418e> <7aee> +<4199> <7afe> +<419d> <7b05> +<419e> <7b07> +<419f> <7b09> +<41a3> <7b10> +<41a9> <7b1a> +<41ac> <7b1f> +<41b0> <7b27> +<41b1> <7b29> +<41b2> <7b2d> +<41b5> <7b32> +<41ba> <7b39> +<41bb> <7b3b> +<41bc> <7b3d> +<41c3> <7b48> +<41c4> <7b4a> +<41c7> <7b53> +<41c8> <7b55> +<41c9> <7b57> +<41ca> <7b59> +<41cb> <7b5c> +<41ce> <7b61> +<41dd> <7b76> +<41de> <7b78> +<41df> <7b7a> +<41e2> <7b7f> +<41ec> <7b8c> +<41f2> <7b96> +<420e> <7bc5> +<420f> <7bc8> +<4210> <7bca> +<4215> <7bd2> +<4229> <7bf2> +<4231> <7bfd> +<4232> <7bff> +<423c> <7c0e> +<424a> <7c20> +<424b> <7c22> +<4260> <7c42> +<4280> <7c6b> +<4281> <7c6d> +<429f> <7c96> +<42a5> <7ca3> +<42bb> <7cc6> +endbfchar + +100 beginbfchar +<42bc> <7cc9> +<42bd> <7ccb> +<42c5> <7cd8> +<42d4> <7cf1> +<42d5> <7cf3> +<42d6> <7cf5> +<42d7> <7cf7> +<42d8> <7cfa> +<42db> <7cff> +<42dc> <7d01> +<42dd> <7d03> +<42de> <7d0c> +<42e3> <7d16> +<42e4> <7d18> +<42f7> <7d3b> +<42fa> <7d41> +<42fb> <7d43> +<42fc> <7d45> +<4304> <7d4f> +<4316> <7d67> +<4320> <7d78> +<4328> <7d82> +<432b> <7d87> +<433c> <7d9d> +<4346> <7daf> +<434a> <7dbc> +<4358> <7dd3> +<435e> <7ddf> +<435f> <7de2> +<4362> <7de7> +<4367> <7df0> +<4368> <7df3> +<4369> <7df5> +<436c> <7dfa> +<4386> <7e1c> +<4390> <7e2c> +<4393> <7e33> +<4394> <7e38> +<4395> <7e3a> +<4396> <7e3c> +<43a6> <7e53> +<43b7> <7e6c> +<43c9> <7e89> +<43ca> <7e8b> +<43cb> <7e8e> +<43cf> <7e95> +<43d0> <7e97> +<43d5> <7eae> +<43d6> <7eb4> +<43d9> <7ed6> +<43da> <7ee4> +<43db> <7eec> +<43dc> <7ef9> +<43dd> <7f0a> +<43de> <7f10> +<43df> <7f1e> +<43e0> <7f37> +<43e1> <7f39> +<43e9> <7f43> +<43f0> <7f4d> +<43f1> <7f4f> +<43f4> <7f56> +<43f5> <7f59> +<43fa> <7f60> +<4403> <7f6f> +<4404> <7f73> +<4407> <7f78> +<4411> <7f87> +<4412> <7f89> +<4413> <7f8b> +<4414> <7f8d> +<4421> <7fa0> +<4424> <7fa6> +<4425> <7fa8> +<442b> <7fb1> +<4433> <7fbe> +<4434> <7fc0> +<443c> <7fcb> +<443d> <7fcd> +<4441> <7fd3> +<4453> <7fef> +<4454> <7ff2> +<445a> <7ffa> +<445e> <8002> +<4465> <8011> +<4466> <8013> +<446c> <8021> +<446f> <802b> +<4470> <802d> +<4473> <8032> +<4474> <8034> +<4477> <803c> +<4478> <803e> +<4484> <8053> +<4485> <8055> +<4486> <8057> +<4487> <8059> +<4499> <8074> +<449a> <8078> +<44a0> <8088> +endbfchar + +100 beginbfchar +<44a1> <808a> +<44aa> <8097> +<44ab> <8099> +<44ac> <809e> +<44ad> <80a3> +<44b1> <80ac> +<44b2> <80b0> +<44b3> <80b3> +<44b8> <80bb> +<44b9> <80c5> +<44c6> <80d8> +<44cb> <80e6> +<44cc> <80ee> +<44cd> <80f5> +<44ce> <80f7> +<44cf> <80f9> +<44d0> <80fb> +<44db> <8115> +<44dc> <8117> +<44dd> <8119> +<44ef> <8130> +<44f3> <8137> +<44ff> <8147> +<4500> <8149> +<4501> <814d> +<4502> <814f> +<4503> <8152> +<450e> <8168> +<450f> <816a> +<4510> <816c> +<4511> <816f> +<4517> <8181> +<451d> <8189> +<4522> <8190> +<4529> <8199> +<4530> <81a7> +<453f> <81bc> +<4544> <81cb> +<4545> <81ce> +<454e> <81d9> +<4558> <81e9> +<4559> <81eb> +<4564> <81fd> +<4565> <81ff> +<4566> <8203> +<4567> <820b> +<456a> <8211> +<456b> <8213> +<4572> <821d> +<4573> <8220> +<4578> <8229> +<4579> <822e> +<457a> <8232> +<457b> <823a> +<4585> <8248> +<4586> <824a> +<459a> <8265> +<459b> <8267> +<45a2> <8278> +<45a7> <8283> +<45ab> <8289> +<45ac> <828c> +<45ad> <8290> +<45b4> <829e> +<45b5> <82a0> +<45b8> <82a7> +<45b9> <82b2> +<45bc> <82ba> +<45bd> <82bc> +<45c4> <82c9> +<45c5> <82d0> +<45c6> <82d6> +<45c9> <82dd> +<45ca> <82e2> +<45d1> <82f0> +<45d6> <82f8> +<45d7> <82fa> +<45df> <830d> +<45e0> <8310> +<45e3> <8316> +<45f2> <832e> +<45f3> <8330> +<45f4> <8332> +<45f5> <8337> +<45f6> <833b> +<45fe> <8348> +<45ff> <834a> +<4604> <8353> +<460a> <835d> +<460b> <8362> +<4626> <8397> +<4629> <839d> +<462a> <839f> +<462b> <83a1> +<4634> <83b5> +<4635> <83bb> +<463b> <83c6> +<463e> <83cb> +<4645> <83d5> +<4646> <83d7> +endbfchar + +100 beginbfchar +<464a> <83de> +<4660> <8402> +<4661> <8405> +<4664> <8410> +<4698> <8458> +<469d> <8462> +<469e> <8465> +<46a1> <846a> +<46a2> <846e> +<46a3> <8470> +<46a4> <8472> +<46a5> <8474> +<46a6> <8479> +<46b2> <848a> +<46b3> <848d> +<46ba> <8498> +<46d0> <84b3> +<46d4> <84bb> +<46d5> <84be> +<46dc> <84cc> +<46df> <84d2> +<46e8> <84de> +<46eb> <84e4> +<46f1> <84ed> +<46fd> <84fe> +<470e> <8512> +<4716> <8520> +<4717> <8522> +<472a> <8542> +<472d> <8547> +<4734> <8554> +<4735> <8557> +<473d> <8563> +<4747> <8573> +<474a> <8578> +<4752> <8586> +<4753> <8589> +<4754> <858b> +<4757> <8590> +<4766> <85a5> +<4767> <85a7> +<4771> <85b8> +<4784> <85d4> +<479d> <85f5> +<47c0> <8628> +<47ce> <8639> +<47cf> <863b> +<47e5> <865b> +<47e6> <865d> +<47f0> <866d> +<4800> <8689> +<4806> <8694> +<4814> <86ab> +<4824> <86c5> +<4825> <86c8> +<482d> <86da> +<483b> <86ef> +<4842> <86ff> +<4843> <8701> +<484c> <8714> +<484d> <8716> +<484e> <8719> +<484f> <871b> +<4850> <871d> +<4853> <8724> +<486f> <874d> +<4874> <8754> +<4875> <8756> +<4876> <8758> +<4886> <876f> +<488a> <8775> +<488b> <8777> +<4895> <878c> +<48ad> <87ae> +<48b1> <87b4> +<48b6> <87bc> +<48bc> <87c5> +<48bd> <87c7> +<48be> <87c9> +<48d0> <87e4> +<48d5> <87eb> +<48d6> <87ed> +<48de> <87fa> +<48e5> <8804> +<48ee> <8812> +<48ef> <8814> +<48f7> <8820> +<490a> <883a> +<4914> <884b> +<491c> <8858> +<491d> <885a> +<491e> <885c> +<4924> <886a> +<4925> <886d> +<4926> <886f> +<4927> <8871> +<492c> <8878> +<4930> <8880> +<4931> <8883> +<4936> <888c> +endbfchar + +100 beginbfchar +<4948> <88a3> +<494f> <88ac> +<4969> <88d3> +<496e> <88de> +<497a> <88f2> +<498e> <8911> +<49a4> <8931> +<49a5> <8935> +<49a6> <8937> +<49c9> <8965> +<49cd> <896b> +<49dd> <8980> +<49de> <8982> +<49ed> <8997> +<49fd> <89ab> +<4a0a> <89be> +<4a0b> <89c3> +<4a0c> <89cd> +<4a13> <89db> +<4a14> <89dd> +<4a19> <89e4> +<4a24> <89f5> +<4a25> <89f7> +<4a30> <8a09> +<4a31> <8a0b> +<4a32> <8a0d> +<4a33> <8a0f> +<4a36> <8a14> +<4a37> <8a17> +<4a3a> <8a1c> +<4a3b> <8a1e> +<4a3f> <8a24> +<4a4b> <8a35> +<4a58> <8a47> +<4a5e> <8a4f> +<4a5f> <8a51> +<4a60> <8a53> +<4a6d> <8a6a> +<4a6e> <8a6f> +<4a6f> <8a74> +<4a7b> <8a88> +<4a81> <8a94> +<4a84> <8a99> +<4a88> <8a9f> +<4a89> <8aa2> +<4a8a> <8aa7> +<4a91> <8ab1> +<4a9d> <8ac3> +<4aa0> <8ac8> +<4aa1> <8aca> +<4aa2> <8acc> +<4aa3> <8ace> +<4aa4> <8ad0> +<4aab> <8add> +<4aaf> <8ae3> +<4ab0> <8ae5> +<4ab4> <8aec> +<4ab7> <8af2> +<4aba> <8af9> +<4abb> <8afb> +<4abc> <8afd> +<4abd> <8aff> +<4abe> <8b03> +<4abf> <8b06> +<4ac5> <8b0f> +<4ac9> <8b15> +<4aca> <8b18> +<4acb> <8b1c> +<4ad3> <8b27> +<4af8> <8b57> +<4af9> <8b5b> +<4b24> <8b94> +<4b2a> <8b9d> +<4b2b> <8b9f> +<4b2c> <8bac> +<4b2d> <8bb1> +<4b2e> <8bbb> +<4b2f> <8bc7> +<4b30> <8bd0> +<4b31> <8bea> +<4b32> <8c09> +<4b33> <8c1e> +<4b72> <8c8b> +<4b81> <8c9f> +<4b88> <8cb1> +<4b89> <8cb5> +<4b8a> <8cb9> +<4b8b> <8cbe> +<4b8c> <8cc6> +<4b8d> <8cc9> +<4b94> <8cd4> +<4b99> <8cdb> +<4b9a> <8cdd> +<4b9b> <8cdf> +<4b9c> <8ce5> +<4bb1> <8d09> +<4bb2> <8d0c> +<4bb3> <8d0e> +<4bbd> <8d20> +<4bc0> <8d57> +endbfchar + +100 beginbfchar +<4bc1> <8d5f> +<4bc2> <8d65> +<4bc6> <8d6c> +<4bfa> <8db9> +<4bfb> <8dbb> +<4bfc> <8dbd> +<4c00> <8dc5> +<4c05> <8dcd> +<4c06> <8dd0> +<4c0d> <8ddc> +<4c14> <8de9> +<4c1a> <8df4> +<4c1b> <8df6> +<4c1c> <8dfc> +<4c27> <8e0b> +<4c3c> <8e2b> +<4c3d> <8e2d> +<4c3e> <8e30> +<4c48> <8e43> +<4c63> <8e6e> +<4c64> <8e71> +<4c65> <8e73> +<4c66> <8e75> +<4c6a> <8e7b> +<4c6d> <8e80> +<4c71> <8e86> +<4c72> <8e88> +<4c73> <8e8c> +<4c74> <8e8e> +<4c7a> <8e9b> +<4c7b> <8e9d> +<4ca0> <8ed3> +<4cbf> <8efd> +<4cc4> <8f04> +<4cc5> <8f06> +<4cc6> <8f08> +<4cce> <8f13> +<4cec> <8f43> +<4d00> <8f5e> +<4d01> <8f60> +<4d02> <8f63> +<4d03> <8f65> +<4d04> <8f6a> +<4d05> <8f80> +<4d06> <8f8c> +<4d07> <8f92> +<4d08> <8f9d> +<4d0e> <8fa7> +<4d0f> <8faa> +<4d10> <8fac> +<4d1b> <8fc3> +<4d1c> <8fc6> +<4d22> <8fcf> +<4d23> <8fd2> +<4d26> <8fda> +<4d29> <8fe3> +<4d2a> <8fe7> +<4d2b> <8fec> +<4d2c> <8fef> +<4d38> <900c> +<4d39> <900e> +<4d3a> <9013> +<4d3b> <9018> +<4d3c> <901c> +<4d49> <9037> +<4d4c> <903d> +<4d4f> <9043> +<4d55> <904c> +<4d56> <9056> +<4d59> <905d> +<4d5a> <905f> +<4d5b> <9061> +<4d5c> <9064> +<4d65> <9073> +<4d66> <9076> +<4d67> <9079> +<4d68> <907b> +<4d69> <907e> +<4d6c> <9089> +<4d70> <9092> +<4d71> <9094> +<4d72> <9096> +<4d73> <9098> +<4d74> <909a> +<4d75> <909c> +<4d7e> <90ab> +<4d7f> <90ad> +<4d80> <90b2> +<4d81> <90b7> +<4d88> <90c6> +<4d8e> <90d2> +<4d95> <90de> +<4d96> <90e0> +<4d9c> <90ec> +<4d9d> <90ee> +<4dab> <9103> +<4dac> <9105> +<4db7> <9113> +<4db8> <9115> +<4dca> <912e> +endbfchar + +100 beginbfchar +<4dcb> <9133> +<4dcc> <9135> +<4dd9> <9147> +<4dda> <9151> +<4de8> <916b> +<4de9> <916d> +<4dea> <9173> +<4df3> <9186> +<4df4> <9188> +<4df5> <918a> +<4e16> <91c2> +<4e17> <91c4> +<4e18> <91c6> +<4e19> <91c8> +<4e1a> <91d0> +<4e1b> <91d6> +<4e25> <91e8> +<4e31> <91f6> +<4e32> <91f8> +<4e40> <920f> +<4e4f> <9224> +<4e56> <922f> +<4e6c> <9256> +<4e85> <9279> +<4e8b> <9284> +<4e96> <9292> +<4e99> <9297> +<4e9a> <9299> +<4e9b> <929b> +<4ea1> <92a4> +<4ea2> <92a7> +<4ea3> <92ad> +<4eab> <92b8> +<4eac> <92ba> +<4eb1> <92c2> +<4eb2> <92c4> +<4eb3> <92c6> +<4ec5> <92de> +<4ec9> <92e7> +<4eca> <92e9> +<4ed1> <92f7> +<4ee4> <9311> +<4eec> <9321> +<4ef0> <9327> +<4ef9> <9337> +<4eff> <933f> +<4f00> <9342> +<4f06> <934c> +<4f1d> <936b> +<4f2e> <9383> +<4f3d> <9397> +<4f49> <93a8> +<4f4a> <93ab> +<4f4b> <93ad> +<4f4c> <93af> +<4f4f> <93b4> +<4f5e> <93c9> +<4f5f> <93cb> +<4f6a> <93e0> +<4f6b> <93e3> +<4f7b> <93f6> +<4f7c> <93f8> +<4f91> <9411> +<4fa7> <9434> +<4faa> <9439> +<4fb7> <944b> +<4fbd> <9453> +<4fcb> <9464> +<4fd1> <946c> +<4fd4> <9471> +<4fd9> <9478> +<4fe1> <9491> +<4fe2> <9496> +<4fe3> <9498> +<4fe4> <94c7> +<4fe5> <94cf> +<4fe8> <94da> +<4fe9> <94e6> +<4fea> <94fb> +<4feb> <951c> +<4fec> <9520> +<4fed> <9527> +<4fee> <9533> +<4fef> <953d> +<4ff0> <9543> +<4ff1> <9548> +<4ff2> <954b> +<4ff3> <9555> +<4ff4> <955a> +<4ff5> <9560> +<4ff6> <956e> +<5000> <9581> +<5005> <958a> +<5006> <958d> +<5007> <9590> +<5008> <9592> +<5014> <95a2> +<5017> <95aa> +<5021> <95ba> +<5027> <95c7> +endbfchar + +100 beginbfchar +<5028> <95c9> +<5034> <95dd> +<503b> <95ec> +<503c> <95ff> +<503d> <9607> +<503e> <9613> +<503f> <9618> +<5040> <961b> +<5041> <961e> +<5042> <9620> +<5053> <963e> +<5054> <9641> +<5055> <9643> +<5056> <964a> +<5060> <965c> +<5061> <965e> +<5062> <9660> +<5065> <966b> +<5069> <9671> +<5075> <9687> +<5076> <9689> +<5077> <968c> +<507b> <9696> +<507c> <969a> +<5087> <96a9> +<508d> <96b2> +<508e> <96b5> +<508f> <96b7> +<5090> <96ba> +<5091> <96bf> +<5094> <96c8> +<509d> <96da> +<50a1> <96e1> +<50ae> <96f8> +<50af> <96fa> +<50b2> <96ff> +<50b5> <9705> +<50c3> <971d> +<50d2> <9731> +<50de> <9743> +<50f1> <975f> +<50ff> <9775> +<5112> <978c> +<5113> <978e> +<5114> <9790> +<5115> <9793> +<5128> <97ac> +<5129> <97ae> +<512c> <97b3> +<513e> <97ca> +<514c> <97dd> +<5154> <97e8> +<515a> <97f4> +<5163> <9800> +<5164> <9804> +<5165> <9809> +<5166> <980b> +<5167> <980d> +<5174> <9825> +<5185> <983c> +<519a> <985a> +<51a2> <9866> +<51a8> <9872> +<51a9> <988b> +<51aa> <988e> +<51ab> <9892> +<51ac> <9895> +<51ad> <9899> +<51ae> <98a3> +<51b4> <98b0> +<51b5> <98b2> +<51c4> <98c5> +<51c5> <98c7> +<51cd> <98d4> +<51d2> <98e1> +<51d7> <98ec> +<51d8> <98ee> +<51db> <98f3> +<51e7> <9904> +<51eb> <990b> +<520e> <993d> +<5212> <9944> +<5219> <9953> +<521a> <9956> +<521f> <995d> +<5223> <9964> +<5224> <9966> +<5225> <9973> +<5228> <997b> +<5229> <997e> +<522c> <9989> +<522d> <998c> +<522e> <998e> +<5241> <99b2> +<525c> <99d3> +<525f> <99da> +<5260> <99dc> +<5261> <99de> +<5262> <99e0> +<527d> <9a00> +endbfchar + +100 beginbfchar +<52a1> <9a2c> +<52a2> <9a2f> +<52ad> <9a3f> +<52b4> <9a4e> +<52ba> <9a56> +<52c2> <9a63> +<52c7> <9a6b> +<52c8> <9a72> +<52c9> <9a83> +<52ca> <9a89> +<52cf> <9a99> +<52d0> <9aa6> +<52db> <9ab9> +<52dc> <9abb> +<52e9> <9ad0> +<52ea> <9ad7> +<52f1> <9ae0> +<52fa> <9aec> +<5304> <9afa> +<530e> <9b07> +<5313> <9b0e> +<5323> <9b24> +<5324> <9b26> +<5325> <9b28> +<532a> <9b30> +<5337> <9b46> +<533b> <9b50> +<5341> <9b59> +<5365> <9b82> +<5370> <9b8f> +<5385> <9bac> +<539c> <9bc8> +<53a6> <9bd5> +<53ab> <9bdc> +<53af> <9be3> +<53b2> <9be9> +<53c2> <9bfe> +<53d0> <9c11> +<53df> <9c24> +<53e8> <9c34> +<53e9> <9c36> +<53ea> <9c38> +<53eb> <9c3a> +<53fe> <9c53> +<53ff> <9c55> +<5404> <9c5e> +<541b> <9c79> +<541c> <9c7b> +<541f> <9c80> +<5424> <9c8c> +<5425> <9c8f> +<5426> <9c93> +<542b> <9c9d> +<542c> <9caa> +<542d> <9cac> +<542e> <9caf> +<542f> <9cb9> +<544a> <9cf5> +<545a> <9d08> +<546b> <9d1c> +<546c> <9d1e> +<5472> <9d27> +<54a8> <9d6b> +<54c1> <9d88> +<54cf> <9d99> +<54ef> <9dc1> +<54f0> <9dc3> +<54ff> <9dd4> +<5502> <9dd8> +<5538> <9e1c> +<5539> <9e24> +<553a> <9e27> +<553b> <9e2e> +<553c> <9e30> +<553d> <9e34> +<5540> <9e40> +<5541> <9e4d> +<5542> <9e50> +<5546> <9e56> +<5547> <9e59> +<5548> <9e5d> +<554d> <9e65> +<5550> <9e72> +<5551> <9e74> +<5555> <9e7b> +<556c> <9e9e> +<5581> <9ebc> +<558d> <9ed0> +<5595> <9ee1> +<5598> <9ee6> +<559f> <9ef3> +<55a2> <9ef8> +<55a3> <9efa> +<55ad> <9f0a> +<55ae> <9f0c> +<55af> <9f0f> +<55b2> <9f14> +<55b3> <9f16> +<55b4> <9f18> +<55bb> <9f21> +endbfchar + +100 beginbfchar +<55ce> <9f38> +<55cf> <9f3a> +<55d0> <9f3c> +<55de> <9f53> +<55e7> <9f62> +<55ed> <9f6b> +<560f> +<5613> +<5616> +<561f> <2e81> +<5620> +<5621> +<5622> +<5623> <2e84> +<5624> <3473> +<5625> <3447> +<5626> <2e88> +<5627> <2e8b> +<5628> <9fb4> +<5629> <359e> +<562a> <361a> +<562b> <360e> +<562c> <2e8c> +<562d> <2e97> +<562e> <396e> +<562f> <3918> +<5630> <9fb5> +<5631> <39cf> +<5632> <39df> +<5633> <3a73> +<5634> <39d0> +<5637> <3b4e> +<5638> <3c6e> +<5639> <3ce0> +<563a> <2ea7> +<563b> +<563c> <9fb8> +<563d> <2eaa> +<563e> <4056> +<563f> <415f> +<5640> <2eae> +<5641> <4337> +<5642> <2eb3> +<5645> +<5646> <43b1> +<5647> <43ac> +<5648> <2ebb> +<5649> <43dd> +<564a> <44d6> +<564b> <4661> +<564c> <464c> +<564d> <9fb9> +<564e> <4723> +<564f> <4729> +<5650> <477c> +<5651> <478d> +<5652> <2eca> +<5653> <4947> +<5654> <497a> +<5655> <497d> +<565a> <499f> +<565b> <499b> +<565c> <49b7> +<565d> <49b6> +<565e> <9fba> +<565f> +<5660> <4ca3> +<5664> <4c77> +<5665> <4ca2> +<566d> <4dae> +<566e> <9fbb> +<56ce> <00fc> +<56cf> <00a9> +<56d0> <2122> +<56d1> <2026> +<5730> <0101> +<5731> <00e1> +<5732> <01ce> +<5733> <00e0> +<5734> <0113> +<5735> <00e9> +<5736> <011b> +<5737> <00e8> +<5738> <012b> +<5739> <00ed> +<573a> <01d0> +<573b> <00ec> +<573c> <014d> +<573d> <00f3> +<573e> <01d2> +<573f> <00f2> +<5740> <016b> +<5741> <00fa> +<5742> <01d4> +<5743> <00f9> +<5744> <01d6> +<5745> <01d8> +<5746> <01da> +<5747> <01dc> +<5748> <00fc> +endbfchar + +56 beginbfchar +<5749> <00ea> +<574a> <0251> +<574b> <1e3f> +<574c> <0144> +<574d> <0148> +<574e> <01f9> +<574f> <0261> +<5750> <0020> +<5751> <20ac> +<5752> <00a5> +<5753> <20ac> +<5754> <0024> +<5755> <303f> +<5756> <20ac> +<5757> <3041> +<5758> <3047> +<5759> <3043> +<575a> <304b> +<575b> <304b> +<575c> <3051> +<575d> <3051> +<575e> <3053> +<575f> <3053> +<5760> <3049> +<5761> <3064> +<5762> <3045> +<5763> <308e> +<5764> <3083> +<5765> <3087> +<5766> <3085> +<5767> <3094> +<5768> <30a1> +<5769> <30a7> +<576a> <30a3> +<576d> <30b3> +<576e> <30b3> +<576f> <30a9> +<5770> <30c3> +<5771> <30a5> +<5772> <30ee> +<5773> <30e3> +<5774> <30e7> +<5775> <30e5> +<5776> <30f7> +<5777> <30f9> +<5778> <30f8> +<5779> <30fa> +<577a> <30fc> +<579c> <2e80> +<5800> <2ef3> +<6d65> <4984> +<7183> <20ac> +<7184> <00a5> +<7185> <20ac> +<7186> <0024> +<7187> <303f> +endbfchar + +100 beginbfrange +<0001> <005f> <0020> +<0060> <0062> <3000> +<006d> <006e> <2018> +<006f> <0070> <201c> +<0071> <0072> <3014> +<0073> <007a> <3008> +<007b> <007c> <3016> +<007d> <007e> <3010> +<0083> <0084> <2227> +<0099> <009a> <226e> +<009b> <009c> <2264> +<00a3> <00a4> <2032> +<00a8> <00a9> +<00ba> <00bb> <2190> +<00be> <00d1> <2488> +<00d2> <00e5> <2474> +<00e6> <00ef> <2460> +<00f0> <00f9> <3220> +<00fa> <00ff> <2160> +<0100> <0105> <2166> +<0106> <0108> +<010a> <0162> +<0164> <01b6> <3041> +<01b7> <01ff> <30a1> +<0200> <020c> <30ea> +<020d> <021d> <0391> +<021e> <0224> <03a3> +<0225> <0235> <03b1> +<0236> <023c> <03c3> +<0240> <0241> +<0244> <0245> +<0246> <0247> +<0248> <0249> +<024a> <024b> +<024c> <024f> +<0250> <0251> <3016> +<0252> <0253> +<0254> <0255> +<0258> <0259> +<025a> <025f> <0410> +<0261> <0280> <0416> +<0282> <029b> <0436> +<02bc> <02e0> <3105> +<02e2> <02ff> <2500> +<0300> <032d> <251e> +<032e> <038b> <0021> +<044f> <0450> <8fa8> +<0b03> <0b04> <6478> +<0d19> <0d1a> <820c> +<108e> <108f> <8424> +<11c0> <11c1> <81f3> +<1291> <1292> <523f> +<1318> <1319> <8ba6> +<131b> <131c> <8bb4> +<131e> <131f> <8bc2> +<1323> <1325> <8bd2> +<1327> <1328> <8bd8> +<132a> <132b> <8bdf> +<132d> <132e> <8be8> +<1335> <1336> <8bff> +<133c> <133d> <8c11> +<133e> <1340> <8c14> +<1345> <1347> <8c1f> +<134a> <134b> <8c2a> +<134c> <134d> <8c2e> +<134e> <134f> <8c32> +<1350> <1351> <8c35> +<138e> <138f> <52ac> +<13ac> <13ad> <572e> +<13f6> <13f7> <82cb> +<1411> <1412> <8314> +<1417> <1418> <835b> +<1432> <1433> <836d> +<1436> <1437> <83b3> +<145a> <145b> <83f8> +<1467> <1468> <8487> +<14ea> <14eb> <64b7> +<1504> <1506> <5452> +<1513> <1514> <549a> +<1520> <1521> <54d3> +<1528> <1529> <54d9> +<152b> <152c> <54a9> +<1537> <1538> <5522> +<1549> <154b> <5575> +<155c> <155d> <55bd> +<1565> <1566> <55eb> +<156d> <156e> <55f2> +<156f> <1570> <55cc> +<158d> <158e> <567b> +<15a3> <15a4> <5e3b> +<15b1> <15b2> <5c98> +<15c4> <15c5> <5d02> +<15f2> <15f3> <72b7> +<1602> <1603> <72fa> +<161e> <1623> <9967> +<162c> <162d> <9990> +<162e> <1630> <9993> +<164c> <164d> <6005> +<165c> <165d> <6078> +<1689> <168a> <95f5> +endbfrange + +100 beginbfrange +<168d> <168e> <9603> +<1691> <1694> <960a> +<1697> <1699> <9615> +<169a> <169b> <9619> +<16a8> <16a9> <6c68> +<16b1> <16b2> <6cf7> +<16d6> <16d7> <6d93> +<16f2> <16f3> <6e53> +<1709> <170a> <6f46> +<174f> <1750> <9035> +<1754> <1755> <9051> +<1778> <1779> <59a9> +<1785> <1786> <5a05> +<17bb> <17bc> <9a77> +<17c0> <17c1> <9a80> +<17c6> <17c7> <9a92> +<17ca> <17cc> <9a9b> +<17cd> <17ce> <9a9f> +<17cf> <17d0> <9aa2> +<17d7> <17d8> <7ea8> +<17dc> <17de> <7ec0> +<17e0> <17e1> <7ecb> +<17e6> <17e7> <7ee0> +<17ea> <17eb> <7eee> +<17ec> <17ed> <7ef1> +<17f0> <17f1> <7efa> +<17f3> <17f5> <7f01> +<17f6> <17f7> <7f07> +<17f8> <17f9> <7f0b> +<17fb> <17fc> <7f11> +<1802> <1808> <7f21> +<1809> <180c> <7f2a> +<180d> <1811> <7f2f> +<1843> <1844> <7480> +<1848> <1849> <74a8> +<184e> <1850> <97ea> +<1876> <1877> <6832> +<1878> <1879> <6860> +<1892> <1893> <691f> +<18a8> <18a9> <6987> +<18bf> <18c0> <6a17> +<18d6> <18d7> <6b81> +<18da> <18db> <6b92> +<18dd> <18de> <6b9a> +<18e3> <18e5> <8f71> +<18e6> <18e7> <8f75> +<18ea> <18eb> <8f79> +<18ee> <18ef> <8f81> +<18f3> <18f5> <8f8d> +<190a> <190c> <65ee> +<1928> <1929> <66db> +<192c> <192d> <8d32> +<1932> <1933> <8d45> +<1934> <1935> <8d48> +<193b> <193d> <89ca> +<193e> <1941> <89ce> +<1947> <1948> <727e> +<195e> <1960> <6c18> +<197a> <197d> <80e7> +<198a> <198b> <810d> +<199a> <199b> <8159> +<199f> <19a0> <817c> +<19b7> <19b9> <98d1> +<19bb> <19bc> <98d9> +<19f6> <19f7> <6248> +<19fc> <19fd> <795b> +<1a26> <1a27> <7817> +<1a2b> <1a2c> <781c> +<1a2d> <1a2f> <7839> +<1a38> <1a39> <7856> +<1a56> <1a57> <9efb> +<1a5c> <1a5d> <7707> +<1a65> <1a66> <7750> +<1a73> <1a74> <779f> +<1a8e> <1a90> <9485> +<1a93> <1a94> <948c> +<1a95> <1a96> <948f> +<1a9a> <1a9c> <949a> +<1a9d> <1a9e> <94a3> +<1aa3> <1aa4> <94af> +<1aa7> <1aab> <94b6> +<1aac> <1aad> <94bc> +<1ab0> <1ab6> <94c8> +<1ab7> <1ab9> <94d0> +<1aba> <1abc> <94d5> +<1ac0> <1ac2> <94de> +<1ac4> <1ac5> <94e4> +<1ac6> <1ac7> <94e7> +<1acb> <1acc> <94ee> +<1acd> <1acf> <94f3> +<1ad2> <1ad3> <94fc> +<1ad7> <1ad8> <9506> +<1ad9> <1ada> <9509> +<1adb> <1add> <950d> +<1ade> <1ae2> <9512> +<1ae5> <1ae7> <951d> +<1ae9> <1aea> <952a> +<1aed> <1aee> <9531> +<1af0> <1af2> <9536> +<1af4> <1af5> <953e> +endbfrange + +100 beginbfrange +<1af8> <1afa> <9544> +<1afd> <1afe> <954e> +<1b00> <1b01> <9553> +<1b02> <1b05> <9556> +<1b07> <1b08> <955e> +<1b0a> <1b0b> <9561> +<1b0c> <1b14> <9564> +<1b16> <1b18> <9571> +<1b37> <1b3b> <9e28> +<1b41> <1b42> <9e39> +<1b44> <1b45> <9e41> +<1b47> <1b4a> <9e46> +<1b4b> <1b4c> <9e4b> +<1b51> <1b53> <9e5a> +<1b56> <1b5c> <9e66> +<1b67> <1b68> <75b3> +<1b9a> <1b9b> <7a78> +<1bd1> <1bd3> <8025> +<1be4> <1be5> <988c> +<1be8> <1be9> <989a> +<1bea> <1beb> <989e> +<1bec> <1bed> <98a1> +<1bee> <1bef> <98a5> +<1c0e> <1c0f> <86f1> +<1c2f> <1c30> <877d> +<1c60> <1c61> <7f44> +<1c66> <1c67> <7b03> +<1c85> <1c86> <7ba6> +<1c96> <1c97> <7be5> +<1ca6> <1ca7> <8201> +<1cab> <1cad> <8221> +<1cb4> <1cb5> <8233> +<1cc7> <1cc8> <7faf> +<1cd2> <1cd3> <7cbc> +<1cd6> <1cd7> <7ccc> +<1cfa> <1cfb> <914e> +<1d02> <1d03> <917d> +<1d0c> <1d0d> <91a2> +<1d0f> <1d11> <91ad> +<1d21> <1d22> <8dd6> +<1d25> <1d26> <8dce> +<1d2a> <1d2b> <8df7> +<1d40> <1d41> <8e41> +<1d42> <1d43> <8e51> +<1d6f> <1d74> <9f85> +<1d7a> <1d7b> <96bc> +<1d8b> <1d8e> <9c85> +<1d92> <1d94> <9c90> +<1d95> <1d96> <9c94> +<1d97> <1d98> <9c9a> +<1d99> <1d9e> <9c9e> +<1d9f> <1da3> <9ca5> +<1da5> <1da6> <9cad> +<1da7> <1dae> <9cb0> +<1daf> <1db2> <9cba> +<1db3> <1db6> <9cc4> +<1db7> <1dbd> <9cca> +<1dbe> <1dc0> <9cd3> +<1dc1> <1dc3> <9cd7> +<1dc4> <1dc5> <9cdc> +<1dca> <1dcb> <9791> +<1ddd> <1dde> <9acb> +<1df9> <1dfa> <9ebd> +<1dfd> <1dfe> <9e87> +<1e04> <1e06> <9edb> +<1e14> <1e15> <9f3d> +<22f9> <22fa> <8a91> +<239f> <23a0> <98ea> +<23a9> <23ab> <9948> +<2416> <2417> <9a43> +<241e> <241f> <7d07> +<249d> <249e> <8f1e> +<24cc> <24cd> <98ae> +<24f3> <24f5> <91d2> +<2511> <2512> <926c> +<2541> <2542> <9426> +<254f> <2550> <9307> +<2568> <2569> <93dc> +<25af> <25b0> <7646> +<25b4> <25b5> <766d> +<25c6> <25c7> <980e> +<263b> <263c> <9bea> +<26a9> <26b2> <2170> +<26b3> <26b4> <02ca> +<26bc> <26bf> <2196> +<26c4> <26c5> <2266> +<26c7> <26ea> <2550> +<26eb> <26f9> <2581> +<26fa> <26fc> <2593> +<26fd> <26fe> <25bc> +<2700> <2702> <25e3> +<2706> <2707> <301d> +<2708> <2710> <3021> +<2712> <2713> <338e> +<2714> <2716> <339c> +<271a> <271b> <33d1> +<2724> <2725> <309b> +<2726> <2727> <30fd> +<2729> <272a> <309d> +<272b> <2734> +endbfrange + +100 beginbfrange +<2735> <2738> +<2739> <2746> +<2747> <274a> +<274c> <2757> <2ff0> +<2759> <275b> <4e04> +<275f> <2761> <4e1f> +<2765> <2766> <4e2e> +<276c> <276e> <4e40> +<2775> <2776> <4e5a> +<2777> <277a> <4e62> +<277b> <277c> <4e67> +<277d> <2782> <4e6a> +<2784> <278d> <4e74> +<278e> <2790> <4e7f> +<2791> <2793> <4e83> +<2797> <2798> <4e96> +<279a> <279b> <4e9c> +<279e> <27a0> <4eaf> +<27a2> <27a5> <4eb6> +<27a6> <27a8> <4ebc> +<27ab> <27ac> <4ecf> +<27ae> <27b0> <4eda> +<27b3> <27b4> <4ee6> +<27b6> <27b8> <4eed> +<27bb> <27bd> <4ef8> +<27c1> <27c7> <4f02> +<27c8> <27c9> <4f0b> +<27ca> <27ce> <4f12> +<27cf> <27d0> <4f1c> +<27d3> <27d4> <4f28> +<27d5> <27d7> <4f2c> +<27de> <27e2> <4f3e> +<27e3> <27e4> <4f44> +<27e5> <27ea> <4f47> +<27ee> <27ef> <4f61> +<27f2> <27f3> <4f6a> +<27f4> <27f5> <4f6d> +<27f6> <27f7> <4f71> +<27f9> <27fc> <4f77> +<27fe> <27ff> <4f80> +<2807> <2808> <4f92> +<280a> <280c> <4f98> +<280e> <280f> <4f9e> +<2810> <2811> <4fa1> +<2815> <2819> <4fb0> +<281a> <2822> <4fb6> +<2823> <2824> <4fc0> +<2825> <2828> <4fc6> +<2829> <282b> <4fcb> +<282c> <2830> <4fd2> +<2834> <2835> <4fe4> +<2837> <2838> <4feb> +<283b> <283e> <4ff4> +<2840> <2842> <4ffb> +<2844> <2848> <5001> +<2849> <284a> <5007> +<284f> <2851> <5015> +<2853> <2854> <501d> +<2856> <2858> <5022> +<285a> <2864> <502f> +<2867> <286a> <503f> +<286b> <286d> <5044> +<286e> <286f> <504a> +<2871> <2875> <5050> +<2876> <2879> <5056> +<287b> <2882> <505d> +<2883> <2888> <5066> +<2889> <288f> <506d> +<2890> <2892> <5078> +<2893> <2894> <507c> +<2895> <2898> <5081> +<2899> <289a> <5086> +<289b> <289e> <5089> +<289f> <28a6> <508e> +<28a8> <28af> <509a> +<28b2> <28b3> <50aa> +<28b4> <28b7> <50ae> +<28b9> <28ba> <50b8> +<28bb> <28bc> <50bc> +<28bd> <28bf> <50bf> +<28c0> <28c1> <50c3> +<28c2> <28c4> <50c6> +<28c5> <28c9> <50ca> +<28cb> <28cd> <50d2> +<28ce> <28d0> <50d7> +<28d1> <28d3> <50db> +<28d4> <28d9> <50df> +<28da> <28dc> <50e9> +<28dd> <28e0> <50ef> +<28e2> <28e4> <50f6> +<28e6> <28e9> <50fc> +<28ee> <28f1> <510c> +<28f4> <28f5> <5116> +<28f6> <28fb> <5119> +<28fd> <28ff> <5122> +<2900> <2904> <5125> +<2905> <290b> <512b> +<290c> <290f> <5133> +<2910> <2911> <5138> +<2912> <2913> <513d> +endbfrange + +100 beginbfrange +<2918> <291a> <514e> +<291c> <291e> <5157> +<2920> <2924> <515d> +<2925> <2926> <5163> +<2927> <2928> <5166> +<292d> <292e> <517e> +<292f> <2930> <5183> +<2931> <2932> <5186> +<2933> <2934> <518a> +<2935> <2938> <518e> +<2939> <293a> <5193> +<293d> <293f> <519d> +<2942> <2946> <51a6> +<2947> <2948> <51ad> +<294a> <294c> <51b8> +<294d> <294e> <51be> +<294f> <2951> <51c1> +<2957> <295f> <51d2> +<2961> <2962> <51de> +<2963> <2964> <51e2> +<2965> <296a> <51e5> +<2971> <2972> <5204> +<2974> <2975> <520b> +<2976> <2977> <520f> +<2978> <297a> <5213> +<297c> <297d> <521e> +<297e> <2980> <5221> +<2981> <2983> <5225> +<2987> <2988> <5231> +<2989> <298a> <5234> +<298d> <298e> <5245> +<298f> <2990> <5248> +<2991> <2992> <524e> +<2993> <2994> <5252> +<2996> <2999> <5257> +<299b> <299c> <525f> +<299d> <299f> <5262> +<29a2> <29a4> <526b> +<29a5> <29a6> <5270> +<29a8> <29ae> <5276> +<29b1> <29b3> <5284> +<29b5> <29b6> <528e> +<29b8> <29be> <5294> +<29c0> <29c3> <52a4> +<29c4> <29c6> <52ae> +<29c7> <29d0> <52b4> +<29d3> <29d5> <52c4> +<29d8> <29db> <52cc> +<29dd> <29de> <52d3> +<29e2> <29e3> <52e0> +<29e5> <29ef> <52e5> +<29f0> <29f2> <52f2> +<29f3> <29f4> <52f6> +<29f5> <29f7> <52fb> +<29f8> <29fb> <5301> +<29fd> <29ff> <5309> +<2a02> <2a05> <5311> +<2a07> <2a08> <531b> +<2a09> <2a0a> <531e> +<2a0c> <2a0d> <5324> +<2a0e> <2a10> <5327> +<2a11> <2a12> <532b> +<2a14> <2a1a> <5332> +<2a1b> <2a1c> <533c> +<2a20> <2a22> <534b> +<2a24> <2a25> <5358> +<2a2b> <2a2c> <536c> +<2a30> <2a33> <537b> +<2a34> <2a35> <5380> +<2a37> <2a38> <5387> +<2a3a> <2a40> <538e> +<2a41> <2a42> <5396> +<2a43> <2a44> <539b> +<2a49> <2a4b> <53aa> +<2a4c> <2a4e> <53af> +<2a51> <2a54> <53b7> +<2a55> <2a57> <53bc> +<2a59> <2a5c> <53c4> +<2a5d> <2a5f> <53ce> +<2a60> <2a61> <53d2> +<2a64> <2a66> <53dc> +<2a6b> <2a6d> <53fe> +<2a73> <2a75> <5418> +<2a78> <2a79> <5424> +<2a7d> <2a7e> <5436> +<2a82> <2a83> <5441> +<2a84> <2a85> <5444> +<2a88> <2a8b> <544c> +<2a8e> <2a92> <545d> +<2a96> <2a9d> <5469> +<2a9f> <2aa0> <5479> +<2aa1> <2aa2> <547e> +<2aa6> <2aa9> <5487> +<2aad> <2aae> <5497> +<2ab0> <2ab4> <549e> +<2ab9> <2abb> <54b5> +<2abc> <2abd> <54b9> +<2ac1> <2ac2> <54ca> +<2ac7> <2ac9> <54e2> +<2aca> <2acb> <54eb> +endbfrange + +100 beginbfrange +<2acc> <2ace> <54ef> +<2acf> <2ad4> <54f4> +<2ad8> <2ad9> <5502> +<2adc> <2ae0> <550a> +<2ae1> <2ae2> <5512> +<2ae3> <2ae8> <5515> +<2ae9> <2aec> <551c> +<2aee> <2aef> <5525> +<2af0> <2af1> <5528> +<2af5> <2af7> <5534> +<2af8> <2afb> <5538> +<2b00> <2b01> <5547> +<2b02> <2b05> <554b> +<2b06> <2b07> <5551> +<2b09> <2b0d> <5557> +<2b0f> <2b10> <555f> +<2b11> <2b12> <5562> +<2b13> <2b14> <5568> +<2b16> <2b1b> <556f> +<2b1c> <2b1d> <5579> +<2b20> <2b21> <5585> +<2b22> <2b24> <558c> +<2b26> <2b27> <5592> +<2b28> <2b2a> <5595> +<2b2b> <2b2c> <559a> +<2b2e> <2b34> <55a0> +<2b35> <2b36> <55a8> +<2b39> <2b3a> <55af> +<2b40> <2b44> <55bf> +<2b46> <2b47> <55ca> +<2b48> <2b49> <55cf> +<2b4b> <2b4d> <55d7> +<2b53> <2b54> <55ed> +<2b55> <2b56> <55f0> +<2b58> <2b5c> <55f8> +<2b5e> <2b61> <5602> +<2b63> <2b64> <560a> +<2b65> <2b68> <5610> +<2b6a> <2b6b> <5619> +<2b6d> <2b6f> <5620> +<2b70> <2b71> <5625> +<2b73> <2b74> <562a> +<2b78> <2b7a> <563c> +<2b7c> <2b85> <5642> +<2b86> <2b8a> <564f> +<2b8b> <2b8c> <5655> +<2b8d> <2b8e> <565a> +<2b8f> <2b90> <565e> +<2b94> <2b95> <566d> +<2b9b> <2b9d> <567d> +<2b9e> <2ba1> <5681> +<2ba2> <2ba5> <5688> +<2ba7> <2ba9> <5690> +<2bab> <2bad> <5696> +<2bae> <2bb6> <569a> +<2bb7> <2bb8> <56a4> +<2bba> <2bbe> <56a9> +<2bbf> <2bc1> <56b0> +<2bc3> <2bc6> <56b8> +<2bc7> <2bc9> <56bd> +<2bca> <2bcb> <56c3> +<2bcc> <2bcd> <56c6> +<2bcf> <2bd2> <56cd> +<2bd3> <2bd4> <56d2> +<2bd5> <2bd6> <56d5> +<2bd7> <2bd8> <56d8> +<2bdb> <2be0> <56e5> +<2be2> <2be3> <56ee> +<2be4> <2be5> <56f2> +<2be6> <2be8> <56f6> +<2be9> <2bea> <56fb> +<2beb> <2bed> <5700> +<2bf0> <2bf3> <570e> +<2bf4> <2bf5> <5714> +<2bf7> <2bf9> <5719> +<2bfa> <2bfb> <571d> +<2bfc> <2bfe> <5720> +<2c00> <2c02> <5725> +<2c04> <2c05> <5731> +<2c06> <2c0a> <5734> +<2c0b> <2c0c> <573c> +<2c0f> <2c12> <5743> +<2c13> <2c14> <5748> +<2c16> <2c1a> <5752> +<2c1b> <2c1c> <5758> +<2c1d> <2c1e> <5762> +<2c23> <2c25> <5770> +<2c26> <2c27> <5774> +<2c28> <2c2a> <5778> +<2c2b> <2c2f> <577d> +<2c30> <2c33> <5787> +<2c34> <2c38> <578d> +<2c39> <2c3f> <5794> +<2c40> <2c43> <579c> +<2c48> <2c4a> <57af> +<2c4c> <2c4e> <57b5> +<2c4f> <2c57> <57b9> +<2c58> <2c5e> <57c4> +<2c5f> <2c60> <57cc> +<2c61> <2c62> <57d0> +endbfrange + +100 beginbfrange +<2c64> <2c65> <57d6> +<2c66> <2c67> <57db> +<2c69> <2c6a> <57e2> +<2c6b> <2c72> <57e5> +<2c74> <2c77> <57f0> +<2c78> <2c79> <57f5> +<2c7a> <2c7b> <57fb> +<2c7c> <2c7d> <57fe> +<2c7f> <2c80> <5803> +<2c81> <2c82> <5808> +<2c84> <2c86> <580e> +<2c87> <2c89> <5812> +<2c8a> <2c8b> <5817> +<2c8c> <2c8e> <581a> +<2c90> <2c91> <5822> +<2c92> <2c96> <5825> +<2c97> <2c9a> <582b> +<2c9b> <2c9c> <5832> +<2c9d> <2caa> <5836> +<2cab> <2caf> <5845> +<2cb3> <2cb4> <5855> +<2cb5> <2cb9> <5859> +<2cba> <2cbc> <585f> +<2cbe> <2cc2> <5866> +<2cc3> <2cca> <586d> +<2ccb> <2ccd> <5876> +<2cce> <2cd1> <587a> +<2cd5> <2cd7> <5886> +<2cd8> <2cde> <588b> +<2cdf> <2ce3> <5894> +<2ce6> <2ced> <58a0> +<2cee> <2cf1> <58aa> +<2cf2> <2cf5> <58af> +<2cf6> <2cfc> <58b4> +<2cfe> <2cff> <58bf> +<2d00> <2d02> <58c2> +<2d04> <2d0c> <58c8> +<2d0f> <2d10> <58d6> +<2d11> <2d13> <58db> +<2d16> <2d19> <58e5> +<2d1c> <2d1d> <58f1> +<2d1e> <2d1f> <58f4> +<2d20> <2d21> <58f7> +<2d22> <2d23> <58fb> +<2d24> <2d27> <58fe> +<2d29> <2d2a> <5905> +<2d2b> <2d2f> <5908> +<2d31> <2d34> <5910> +<2d35> <2d36> <5917> +<2d38> <2d39> <591d> +<2d3a> <2d3b> <5920> +<2d41> <2d42> <5932> +<2d43> <2d44> <5935> +<2d47> <2d48> <593f> +<2d4a> <2d4b> <5945> +<2d4d> <2d4e> <594c> +<2d50> <2d51> <5952> +<2d53> <2d57> <595b> +<2d59> <2d5a> <5963> +<2d5b> <2d5d> <5966> +<2d60> <2d63> <596f> +<2d66> <2d68> <597a> +<2d69> <2d6b> <597e> +<2d6e> <2d6f> <598b> +<2d70> <2d73> <598e> +<2d74> <2d75> <5994> +<2d77> <2d79> <599a> +<2d7a> <2d7d> <599f> +<2d7e> <2d7f> <59a6> +<2d80> <2d81> <59ac> +<2d82> <2d83> <59b0> +<2d84> <2d89> <59b3> +<2d8b> <2d8c> <59bc> +<2d8d> <2d93> <59bf> +<2d94> <2d96> <59c7> +<2d97> <2d9a> <59cc> +<2d9b> <2d9c> <59d5> +<2d9f> <2da3> <59de> +<2da5> <2da6> <59e6> +<2da7> <2da9> <59e9> +<2daa> <2db5> <59ed> +<2db7> <2db9> <59fc> +<2dbc> <2dbd> <5a0a> +<2dbe> <2dc1> <5a0d> +<2dc3> <2dc6> <5a14> +<2dc7> <2dc9> <5a19> +<2dca> <2dcb> <5a1d> +<2dcc> <2dcd> <5a21> +<2dcf> <2dd1> <5a26> +<2dd2> <2dd8> <5a2a> +<2ddb> <2ddf> <5a37> +<2de0> <2de2> <5a3d> +<2de3> <2de6> <5a42> +<2de7> <2de8> <5a47> +<2de9> <2df2> <5a4b> +<2df3> <2df6> <5a56> +<2df7> <2dfd> <5a5b> +<2dfe> <2dff> <5a63> +<2e01> <2e02> <5a68> +<2e03> <2e04> <5a6b> +endbfrange + +100 beginbfrange +<2e05> <2e0a> <5a6e> +<2e0b> <2e0c> <5a78> +<2e0d> <2e10> <5a7b> +<2e11> <2e22> <5a80> +<2e23> <2e29> <5a93> +<2e2a> <2e34> <5a9c> +<2e35> <2e36> <5aa8> +<2e37> <2e3d> <5aab> +<2e3f> <2e40> <5ab6> +<2e41> <2e44> <5ab9> +<2e45> <2e46> <5abf> +<2e47> <2e4c> <5ac3> +<2e4d> <2e4e> <5aca> +<2e4f> <2e53> <5acd> +<2e56> <2e58> <5ad9> +<2e59> <2e5b> <5add> +<2e5d> <2e5e> <5ae4> +<2e5f> <2e60> <5ae7> +<2e62> <2e66> <5aec> +<2e67> <2e69> <5af2> +<2e6a> <2e6e> <5af6> +<2e6f> <2e72> <5afc> +<2e73> <2e79> <5b01> +<2e7b> <2e83> <5b0d> +<2e85> <2e8b> <5b1a> +<2e8c> <2e93> <5b22> +<2e94> <2e98> <5b2b> +<2e9b> <2e9c> <5b35> +<2e9d> <2ea3> <5b39> +<2ea4> <2eae> <5b41> +<2eaf> <2eb1> <5b4d> +<2eb5> <2eb6> <5b60> +<2eb7> <2eb8> <5b67> +<2eb9> <2ebb> <5b6d> +<2ebe> <2ebf> <5b76> +<2ec1> <2ec2> <5b7b> +<2ec7> <2ec8> <5b8d> +<2ec9> <2ecb> <5b90> +<2ecf> <2ed1> <5ba7> +<2ed2> <2ed5> <5bac> +<2ed6> <2ed7> <5bb1> +<2ed9> <2edb> <5bba> +<2edc> <2edd> <5bc0> +<2edf> <2ee2> <5bc8> +<2ee3> <2ee5> <5bcd> +<2ee7> <2eef> <5bd4> +<2ef5> <2ef8> <5bf1> +<2efa> <2efb> <5bfd> +<2efd> <2efe> <5c02> +<2f02> <2f03> <5c12> +<2f07> <2f0a> <5c1e> +<2f0d> <2f10> <5c28> +<2f11> <2f14> <5c2d> +<2f15> <2f16> <5c32> +<2f17> <2f18> <5c35> +<2f19> <2f1a> <5c43> +<2f1b> <2f1c> <5c46> +<2f1d> <2f1e> <5c4c> +<2f1f> <2f21> <5c52> +<2f22> <2f24> <5c56> +<2f25> <2f28> <5c5a> +<2f2b> <2f2d> <5c69> +<2f30> <2f36> <5c72> +<2f37> <2f3a> <5c7b> +<2f3c> <2f40> <5c83> +<2f41> <2f43> <5c89> +<2f44> <2f45> <5c8e> +<2f46> <2f47> <5c92> +<2f49> <2f4c> <5c9d> +<2f4d> <2f51> <5ca4> +<2f53> <2f55> <5cae> +<2f59> <2f5c> <5cb9> +<2f5f> <2f60> <5cc2> +<2f61> <2f66> <5cc5> +<2f67> <2f6c> <5ccc> +<2f6d> <2f72> <5cd3> +<2f73> <2f79> <5cda> +<2f7a> <2f7b> <5ce2> +<2f7e> <2f7f> <5ceb> +<2f80> <2f81> <5cee> +<2f82> <2f84> <5cf1> +<2f86> <2f89> <5cf7> +<2f8b> <2f8e> <5cfe> +<2f8f> <2f90> <5d04> +<2f91> <2f95> <5d08> +<2f96> <2f9a> <5d0f> +<2f9c> <2f9e> <5d18> +<2f9f> <2fa0> <5d1c> +<2fa1> <2fa5> <5d1f> +<2fa8> <2fa9> <5d2a> +<2faa> <2fae> <5d2f> +<2faf> <2fb6> <5d35> +<2fb7> <2fbe> <5d3f> +<2fbf> <2fc0> <5d48> +<2fc1> <2fc3> <5d4d> +<2fc4> <2fca> <5d51> +<2fcb> <2fcc> <5d59> +<2fce> <2fd8> <5d5e> +<2fda> <2fdb> <5d6d> +<2fdc> <2fdf> <5d70> +endbfrange + +100 beginbfrange +<2fe0> <2feb> <5d75> +<2fed> <2fee> <5d85> +<2fef> <2ffd> <5d88> +<3000> <3001> <5d9b> +<3002> <3003> <5d9e> +<3004> <3009> <5da1> +<300a> <3018> <5da8> +<301b> <3022> <5dbd> +<3023> <3027> <5dc6> +<3029> <302c> <5dce> +<302e> <3033> <5dd5> +<3035> <3036> <5ddf> +<3037> <3038> <5de3> +<303a> <303b> <5dec> +<303c> <303d> <5df5> +<303e> <3042> <5df8> +<3043> <3044> <5dff> +<3047> <3049> <5e09> +<304a> <304b> <5e0d> +<304c> <304d> <5e12> +<304f> <3055> <5e1e> +<3056> <3058> <5e28> +<305a> <305b> <5e2f> +<305d> <305e> <5e34> +<305f> <3060> <5e39> +<3061> <3062> <5e3e> +<3064> <3069> <5e46> +<306a> <3070> <5e4d> +<3072> <3073> <5e59> +<3074> <3075> <5e5c> +<3077> <307d> <5e64> +<307e> <3082> <5e6d> +<3085> <3087> <5e81> +<3089> <308a> <5e88> +<308b> <308d> <5e8c> +<3092> <3095> <5ea1> +<3096> <3098> <5ea8> +<309a> <309e> <5eae> +<30a0> <30a3> <5eba> +<30a4> <30ad> <5ebf> +<30ae> <30b3> <5ecb> +<30b4> <30b5> <5ed4> +<30b6> <30b9> <5ed7> +<30ba> <30bc> <5edc> +<30bd> <30c0> <5ee4> +<30c3> <30c8> <5eed> +<30ca> <30cb> <5ef8> +<30cc> <30ce> <5efb> +<30cf> <30d1> <5f05> +<30d3> <30d5> <5f0c> +<30da> <30db> <5f19> +<30dc> <30de> <5f1c> +<30df> <30e2> <5f21> +<30e4> <30e5> <5f2b> +<30ea> <30ec> <5f36> +<30ee> <30f0> <5f3d> +<30f1> <30f5> <5f41> +<30f7> <30f9> <5f49> +<30fe> <30ff> <5f5a> +<3101> <3103> <5f5e> +<3106> <3107> <5f67> +<3109> <310a> <5f6e> +<310c> <310e> <5f74> +<3111> <3113> <5f7d> +<3116> <3118> <5f8d> +<3119> <311a> <5f93> +<311c> <311d> <5f9a> +<3120> <3125> <5fa2> +<3126> <3127> <5fab> +<3128> <312d> <5faf> +<3130> <3131> <5fba> +<3132> <3136> <5fbe> +<3137> <3138> <5fc7> +<3139> <313a> <5fca> +<313c> <313e> <5fd3> +<313f> <3141> <5fda> +<3142> <3143> <5fde> +<3144> <3145> <5fe2> +<3146> <3147> <5fe5> +<3148> <3149> <5fe8> +<314b> <314c> <5fef> +<314d> <314f> <5ff2> +<3150> <3151> <5ff6> +<3152> <3153> <5ff9> +<3155> <3157> <6007> +<3158> <3159> <600b> +<315a> <315b> <6010> +<315d> <315e> <6017> +<3160> <3161> <601e> +<3162> <3164> <6022> +<3165> <3167> <602c> +<3168> <316c> <6030> +<316d> <3171> <6036> +<3172> <3173> <603d> +<3175> <317b> <6044> +<317d> <317e> <604e> +<3180> <3181> <6053> +<3182> <3184> <6056> +<3185> <3186> <605b> +<3187> <318a> <605e> +endbfrange + +100 beginbfrange +<318b> <318c> <6065> +<318e> <318f> <6071> +<3190> <3191> <6074> +<3194> <3196> <6080> +<3197> <319a> <6085> +<319b> <319c> <608a> +<319d> <31a0> <608e> +<31a3> <31a5> <6097> +<31a8> <31a9> <60a1> +<31aa> <31ab> <60a4> +<31ad> <31ae> <60a9> +<31b3> <31b4> <60b9> +<31b5> <31bc> <60bd> +<31bd> <31bf> <60c7> +<31c0> <31c4> <60cc> +<31c5> <31c7> <60d2> +<31c8> <31c9> <60d6> +<31cd> <31d0> <60e2> +<31d3> <31d4> <60f7> +<31d5> <31d8> <60fc> +<31d9> <31dc> <6102> +<31de> <31e0> <610a> +<31e1> <31e5> <6110> +<31e6> <31e9> <6116> +<31ea> <31eb> <611d> +<31ec> <31ed> <6121> +<31ef> <31f1> <6128> +<31f2> <31f9> <612c> +<31fa> <31fb> <6135> +<31fc> <31ff> <6138> +<3200> <3201> <613c> +<3202> <3209> <6140> +<320c> <320d> <614f> +<320e> <3210> <6152> +<3211> <3212> <6156> +<3214> <3215> <615b> +<3217> <3218> <6160> +<3219> <321a> <6165> +<321c> <321d> <616c> +<321f> <3220> <6171> +<3222> <322b> <6178> +<322c> <3232> <6183> +<3233> <3234> <618c> +<3237> <323b> <6195> +<323c> <323d> <619b> +<323e> <3243> <619e> +<3244> <3245> <61a5> +<3248> <324a> <61af> +<324b> <324d> <61b3> +<324e> <3253> <61b8> +<3254> <3256> <61bf> +<3257> <325a> <61c3> +<325b> <325e> <61cd> +<3260> <3268> <61d5> +<3269> <326b> <61e0> +<326c> <326d> <61e4> +<326f> <3277> <61e9> +<3278> <3279> <61f3> +<327d> <3281> <6201> +<3285> <3287> <621c> +<328b> <328c> <6228> +<3291> <3292> <6235> +<3293> <3297> <6238> +<3299> <329b> <6244> +<329d> <329e> <624f> +<329f> <32a1> <6255> +<32a2> <32a3> <6259> +<32a4> <32aa> <625c> +<32ab> <32ac> <6264> +<32ae> <32af> <6271> +<32b0> <32b1> <6274> +<32b2> <32b3> <6277> +<32b4> <32b5> <627a> +<32b7> <32b9> <6281> +<32ba> <32bd> <6285> +<32be> <32c3> <628b> +<32c6> <32c8> <629c> +<32ca> <32cb> <62a6> +<32cc> <32cd> <62a9> +<32ce> <32d1> <62ad> +<32d2> <32d4> <62b2> +<32d5> <32d7> <62b6> +<32da> <32db> <62c0> +<32e1> <32e2> <62dd> +<32e3> <32e4> <62e0> +<32e6> <32e7> <62ea> +<32eb> <32ee> <62f8> +<32f0> <32f3> <6303> +<32f4> <32f7> <630a> +<32f8> <32f9> <630f> +<32fa> <32fd> <6312> +<32fe> <32ff> <6317> +<3302> <3303> <6326> +<3305> <3307> <632c> +<3308> <3309> <6330> +<330a> <330f> <6333> +<3310> <3311> <633b> +<3312> <3314> <633f> +<3316> <3317> <6347> +<3319> <331c> <6351> +endbfrange + +100 beginbfrange +<331d> <3324> <6356> +<3326> <3328> <6364> +<332b> <332c> <636f> +<332d> <332f> <6373> +<3330> <3331> <6378> +<3332> <3335> <637c> +<3337> <3338> <6385> +<333c> <333e> <6393> +<3340> <3346> <6399> +<334c> <334d> <63b1> +<334e> <334f> <63b5> +<3354> <3356> <63c1> +<3358> <3359> <63c7> +<335a> <335c> <63ca> +<335e> <3360> <63d3> +<3361> <3363> <63d7> +<3364> <3366> <63db> +<3369> <336d> <63e4> +<336e> <336f> <63eb> +<3370> <3372> <63ef> +<3376> <3379> <63f9> +<337b> <337c> <6403> +<337d> <3381> <6406> +<3383> <3384> <6411> +<3385> <3386> <6415> +<3387> <3389> <6418> +<338c> <338f> <6422> +<3390> <3392> <6427> +<3394> <3399> <642e> +<339b> <339d> <6437> +<339e> <339f> <643b> +<33a2> <33a3> <6442> +<33a5> <33aa> <644b> +<33ac> <33ae> <6455> +<33af> <33b1> <6459> +<33b3> <33b9> <6460> +<33bb> <33bd> <646a> +<33bf> <33c1> <6470> +<33c2> <33c3> <6474> +<33c5> <33ca> <647c> +<33cd> <33d4> <6489> +<33d6> <33d7> <6497> +<33d8> <33db> <649a> +<33dc> <33de> <64a0> +<33df> <33e1> <64a6> +<33eb> <33ec> <64c8> +<33f1> <33f2> <64d5> +<33f4> <33f6> <64db> +<33fb> <33ff> <64e7> +<3400> <3401> <64ed> +<3403> <3404> <64f5> +<3405> <3406> <64f8> +<3409> <340b> <6501> +<340d> <340e> <6507> +<340f> <3413> <650a> +<3414> <3415> <6510> +<341b> <341e> <651e> +<341f> <3422> <6526> +<3424> <3427> <6530> +<342a> <342b> <653c> +<342c> <3430> <6540> +<3431> <3432> <6546> +<3433> <3434> <654a> +<3435> <3436> <654d> +<3438> <343a> <6552> +<343e> <3440> <655f> +<3441> <3442> <6564> +<3443> <3446> <6567> +<3447> <3449> <656d> +<344d> <3455> <6579> +<3456> <3458> <6584> +<3459> <345b> <6588> +<345c> <345e> <658d> +<3464> <3465> <659d> +<3467> <3468> <65a2> +<346d> <3472> <65b1> +<3474> <3475> <65ba> +<3476> <3478> <65be> +<347a> <347d> <65c7> +<347f> <3480> <65d0> +<3481> <3483> <65d3> +<3484> <348b> <65d8> +<348d> <348e> <65e3> +<348f> <3490> <65ea> +<3491> <3494> <65f2> +<3495> <3496> <65f8> +<3497> <349b> <65fb> +<349d> <349e> <6604> +<349f> <34a1> <6607> +<34a4> <34a6> <6610> +<34a7> <34a9> <6616> +<34aa> <34ac> <661a> +<34ae> <34b1> <6621> +<34b3> <34b6> <6629> +<34b9> <34ba> <6632> +<34bb> <34bf> <6637> +<34c1> <34c2> <663f> +<34c3> <34c9> <6644> +<34ca> <34cb> <664d> +<34cc> <34cd> <6650> +endbfrange + +100 beginbfrange +<34ce> <34cf> <6658> +<34d0> <34d1> <665b> +<34d4> <34d5> <6662> +<34d8> <34dc> <6669> +<34dd> <34df> <6671> +<34e1> <34e2> <6678> +<34e3> <34e5> <667b> +<34e6> <34e8> <667f> +<34ea> <34eb> <6685> +<34ec> <34ed> <668a> +<34ee> <34f1> <668d> +<34f2> <34f5> <6692> +<34f6> <34fa> <6698> +<34fb> <34fe> <669e> +<3500> <3502> <66a4> +<3503> <3504> <66a9> +<3505> <3506> <66ac> +<3507> <350b> <66af> +<350c> <350f> <66b5> +<3510> <3513> <66ba> +<3514> <3518> <66bf> +<351b> <3526> <66ca> +<3527> <3528> <66d7> +<352a> <352b> <66de> +<352c> <3530> <66e1> +<3531> <3532> <66e7> +<3533> <3534> <66ea> +<3535> <3537> <66ed> +<3539> <353a> <66f5> +<353b> <353c> <66fa> +<353e> <353f> <6701> +<3540> <3543> <6704> +<3545> <3546> <670e> +<3547> <3549> <6711> +<354b> <354d> <6718> +<3550> <3555> <6720> +<3559> <355a> <6732> +<355b> <355e> <6736> +<355f> <3560> <673b> +<3561> <3562> <673e> +<3564> <3565> <6744> +<3567> <3568> <674a> +<356b> <356c> <6754> +<356d> <3571> <6757> +<3573> <3575> <6762> +<3576> <3577> <6766> +<3578> <3579> <676b> +<357d> <3580> <6778> +<3583> <3584> <6782> +<3585> <3586> <6785> +<3589> <358c> <678c> +<358d> <3590> <6791> +<3594> <3596> <679f> +<359c> <359d> <67b1> +<359f> <35a6> <67b9> +<35a8> <35b1> <67c5> +<35b2> <35b4> <67d5> +<35b8> <35b9> <67e3> +<35ba> <35bc> <67e6> +<35bd> <35be> <67ea> +<35bf> <35c0> <67ed> +<35c2> <35c9> <67f5> +<35cb> <35ce> <6801> +<35d3> <35d4> <6814> +<35d5> <35d9> <6818> +<35da> <35dc> <681e> +<35dd> <35e3> <6822> +<35e4> <35ea> <682b> +<35eb> <35ed> <6834> +<35ee> <35ef> <683a> +<35f6> <35ff> <6856> +<3601> <3608> <686c> +<360a> <3612> <6878> +<3615> <361c> <6887> +<361d> <361f> <6890> +<3620> <3622> <6894> +<3623> <3626> <6899> +<3628> <3629> <68a0> +<362a> <362c> <68a3> +<362d> <3630> <68a9> +<3632> <3633> <68b1> +<3635> <363e> <68b6> +<3640> <3645> <68c3> +<3648> <364b> <68ce> +<364c> <364d> <68d3> +<364f> <3652> <68db> +<3653> <3654> <68e1> +<3655> <3657> <68e4> +<3658> <365d> <68e8> +<365f> <3661> <68f2> +<3662> <3664> <68f6> +<3666> <3669> <68fd> +<366a> <366c> <6902> +<366d> <3671> <6906> +<3674> <367f> <6913> +<3680> <3682> <6921> +<3683> <368a> <6925> +<368b> <368c> <692e> +<368d> <368f> <6931> +<3690> <3693> <6935> +endbfrange + +100 beginbfrange +<3694> <3696> <693a> +<3698> <3699> <6940> +<369a> <36a0> <6943> +<36a1> <36a8> <694b> +<36a9> <36aa> <6955> +<36ab> <36ac> <6958> +<36ad> <36ae> <695b> +<36b0> <36b1> <6961> +<36b2> <36b3> <6964> +<36b5> <36b6> <6969> +<36b8> <36b9> <696f> +<36ba> <36bc> <6972> +<36be> <36bf> <697a> +<36c0> <36c2> <697d> +<36c6> <36c8> <698a> +<36c9> <36ce> <698e> +<36cf> <36d0> <6996> +<36d1> <36d2> <6999> +<36d3> <36dc> <699d> +<36df> <36e0> <69af> +<36e1> <36e2> <69b2> +<36e3> <36e4> <69b5> +<36e5> <36e7> <69b8> +<36e8> <36ea> <69bc> +<36ec> <36f3> <69c2> +<36f5> <36f7> <69d1> +<36f8> <36fd> <69d5> +<36fe> <36ff> <69dc> +<3701> <3706> <69e1> +<3707> <370b> <69e8> +<370c> <370f> <69ee> +<3710> <3718> <69f4> +<371b> <371c> <6a03> +<371d> <3720> <6a06> +<3721> <3728> <6a0b> +<3729> <372b> <6a14> +<372c> <372f> <6a1a> +<3732> <3735> <6a24> +<3737> <373a> <6a2b> +<373c> <373e> <6a32> +<373f> <3740> <6a36> +<3741> <3742> <6a3b> +<3743> <3747> <6a3f> +<3748> <3749> <6a45> +<374a> <374b> <6a49> +<374c> <374f> <6a4c> +<3750> <3756> <6a51> +<3758> <375a> <6a5c> +<375c> <375d> <6a63> +<375e> <3768> <6a66> +<3769> <376f> <6a72> +<3770> <3771> <6a7a> +<3772> <3774> <6a7d> +<3775> <3777> <6a81> +<3778> <377b> <6a85> +<377c> <377f> <6a8a> +<3781> <3782> <6a92> +<3783> <3784> <6a95> +<3785> <3788> <6a98> +<3789> <378b> <6a9d> +<378d> <3791> <6aa4> +<3793> <3794> <6aad> +<3795> <3797> <6ab0> +<3798> <379b> <6ab4> +<379c> <379d> <6ab9> +<379e> <37a4> <6abc> +<37a5> <37b3> <6ac4> +<37b4> <37b9> <6ad4> +<37bb> <37c1> <6ae0> +<37c4> <37c9> <6aed> +<37ca> <37cd> <6af4> +<37ce> <37cf> <6af9> +<37d0> <37d7> <6afc> +<37d8> <37dc> <6b05> +<37dd> <37e0> <6b0b> +<37e1> <37e2> <6b10> +<37e3> <37e5> <6b13> +<37e6> <37ec> <6b17> +<37ee> <37ef> <6b25> +<37f0> <37f9> <6b28> +<37fa> <37fd> <6b33> +<3801> <3804> <6b3f> +<3805> <3806> <6b44> +<3808> <3809> <6b4a> +<380a> <380c> <6b4d> +<380d> <3814> <6b51> +<3815> <3819> <6b5a> +<381b> <381c> <6b68> +<381d> <3823> <6b6b> +<3824> <3827> <6b73> +<3829> <382c> <6b7d> +<3830> <3833> <6b8e> +<3834> <3835> <6b94> +<3838> <3839> <6b9c> +<383a> <383b> <6b9f> +<383c> <383d> <6ba2> +<383e> <3842> <6ba5> +<3843> <3844> <6bac> +<3845> <3846> <6bb0> +<3848> <3849> <6bb8> +endbfrange + +100 beginbfrange +<384a> <384c> <6bbc> +<384e> <384f> <6bc3> +<3850> <3853> <6bc7> +<3856> <3857> <6bd0> +<385a> <385e> <6bdc> +<385f> <3866> <6be2> +<3867> <3869> <6bec> +<386a> <386c> <6bf0> +<386e> <3870> <6bf6> +<3871> <3873> <6bfa> +<3875> <3879> <6c00> +<387a> <387c> <6c09> +<3880> <3882> <6c1c> +<3888> <3889> <6c36> +<388a> <388d> <6c39> +<388e> <388f> <6c3e> +<3890> <3892> <6c43> +<3894> <3898> <6c4b> +<3899> <389b> <6c51> +<389d> <389f> <6c58> +<38a0> <38a1> <6c62> +<38a2> <38a4> <6c65> +<38a5> <38a9> <6c6b> +<38ad> <38ae> <6c77> +<38af> <38b1> <6c7a> +<38b2> <38b3> <6c7f> +<38b6> <38b7> <6c8a> +<38b8> <38b9> <6c8d> +<38ba> <38bb> <6c91> +<38bc> <38bf> <6c95> +<38c1> <38c3> <6c9c> +<38c8> <38c9> <6caf> +<38ca> <38cd> <6cb4> +<38cf> <38d2> <6cc0> +<38d3> <38d5> <6cc6> +<38d7> <38d9> <6ccd> +<38da> <38db> <6cd1> +<38dc> <38de> <6cd8> +<38df> <38e0> <6cdc> +<38e3> <38e4> <6ce6> +<38e6> <38e7> <6cec> +<38eb> <38ec> <6cff> +<38ed> <38ee> <6d02> +<38ef> <38f0> <6d05> +<38f1> <38f3> <6d08> +<38f5> <38f7> <6d0f> +<38f8> <38fb> <6d13> +<38fd> <38fe> <6d1c> +<3900> <3904> <6d20> +<3906> <3907> <6d28> +<3908> <3909> <6d2c> +<390a> <390b> <6d2f> +<390d> <390f> <6d36> +<3911> <3912> <6d3f> +<3918> <391b> <6d55> +<391f> <3920> <6d61> +<3921> <3922> <6d64> +<3923> <3924> <6d67> +<3925> <3927> <6d6b> +<3928> <392b> <6d70> +<392c> <392d> <6d75> +<392e> <392f> <6d7a> +<3930> <3934> <6d7d> +<3935> <3936> <6d83> +<3938> <3939> <6d8a> +<393b> <393c> <6d8f> +<393e> <3942> <6d96> +<3946> <3947> <6dac> +<3948> <3949> <6db0> +<394a> <394b> <6db3> +<394c> <394d> <6db6> +<394e> <3953> <6db9> +<3954> <3956> <6dc1> +<3957> <3959> <6dc8> +<395a> <395d> <6dcd> +<395e> <3961> <6dd2> +<3963> <3965> <6dda> +<3967> <3968> <6de2> +<396a> <396c> <6de7> +<396e> <396f> <6def> +<3973> <397a> <6dfd> +<397b> <397e> <6e06> +<3981> <3982> <6e12> +<3984> <3985> <6e18> +<3986> <3987> <6e1b> +<3988> <3989> <6e1e> +<398b> <398c> <6e27> +<398f> <3990> <6e30> +<3992> <3994> <6e35> +<3996> <3998> <6e3b> +<3999> <399c> <6e3f> +<399d> <39a4> <6e45> +<39a5> <39a8> <6e4f> +<39ab> <39ac> <6e59> +<39ad> <39ae> <6e5c> +<39af> <39b9> <6e60> +<39ba> <39bb> <6e6c> +<39bc> <39c9> <6e70> +<39ca> <39cc> <6e80> +<39ce> <39cf> <6e87> +endbfrange + +100 beginbfrange +<39d0> <39d4> <6e8a> +<39d5> <39d9> <6e91> +<39db> <39dd> <6e99> +<39df> <39e0> <6ea0> +<39e1> <39e2> <6ea3> +<39e4> <39e5> <6ea8> +<39e6> <39e9> <6eab> +<39ed> <39ee> <6eb8> +<39f0> <39f2> <6ebe> +<39f5> <39f7> <6ec8> +<39fc> <39fd> <6ed8> +<39fe> <39ff> <6edb> +<3a03> <3a04> <6eea> +<3a05> <3a06> <6eed> +<3a07> <3a08> <6ef0> +<3a0a> <3a0b> <6ef5> +<3a0c> <3a10> <6efa> +<3a12> <3a14> <6f03> +<3a15> <3a16> <6f07> +<3a17> <3a1b> <6f0a> +<3a1c> <3a1e> <6f10> +<3a1f> <3a22> <6f16> +<3a23> <3a27> <6f1b> +<3a29> <3a2c> <6f25> +<3a2f> <3a30> <6f34> +<3a32> <3a36> <6f39> +<3a38> <3a3b> <6f42> +<3a3c> <3a3e> <6f48> +<3a40> <3a42> <6f4e> +<3a43> <3a44> <6f52> +<3a45> <3a47> <6f55> +<3a48> <3a49> <6f5a> +<3a4b> <3a4d> <6f5f> +<3a50> <3a55> <6f67> +<3a58> <3a59> <6f75> +<3a5c> <3a5d> <6f7d> +<3a5e> <3a60> <6f81> +<3a62> <3a63> <6f8a> +<3a64> <3a6b> <6f8f> +<3a6c> <3a6f> <6f98> +<3a70> <3a72> <6f9d> +<3a73> <3a74> <6fa2> +<3a75> <3a76> <6fa5> +<3a78> <3a7b> <6faa> +<3a7c> <3a7d> <6faf> +<3a7f> <3a80> <6fb4> +<3a81> <3a82> <6fb7> +<3a83> <3a88> <6fba> +<3a89> <3a8d> <6fc4> +<3a8e> <3a94> <6fca> +<3a95> <3a96> <6fd3> +<3a97> <3a98> <6fd6> +<3a99> <3a9a> <6fd9> +<3a9b> <3a9c> <6fdc> +<3a9d> <3a9e> <6fe2> +<3a9f> <3aa4> <6fe5> +<3aa5> <3aa6> <6fec> +<3aa7> <3aae> <6ff2> +<3ab1> <3ab6> <6fff> +<3ab7> <3ab8> <7007> +<3aba> <3abc> <700c> +<3abe> <3ac0> <7012> +<3ac1> <3ac2> <7016> +<3ac6> <3ac7> <7021> +<3ac8> <3aca> <7024> +<3acb> <3ad1> <7029> +<3ad3> <3ad4> <7033> +<3ad5> <3ad7> <7036> +<3ad8> <3adb> <703a> +<3adc> <3adf> <703f> +<3ae0> <3ae6> <7045> +<3ae7> <3ae8> <704d> +<3aea> <3aec> <7052> +<3aed> <3aee> <7056> +<3aef> <3af2> <7059> +<3af3> <3af6> <705f> +<3af7> <3af8> <7065> +<3af9> <3afb> <7068> +<3afd> <3aff> <7071> +<3b02> <3b04> <7079> +<3b06> <3b09> <7081> +<3b0a> <3b0c> <7086> +<3b0d> <3b0f> <708b> +<3b10> <3b12> <708f> +<3b14> <3b15> <7097> +<3b16> <3b17> <709a> +<3b18> <3b24> <709e> +<3b27> <3b29> <70b4> +<3b2b> <3b2c> <70be> +<3b2d> <3b30> <70c4> +<3b32> <3b35> <70cb> +<3b36> <3b3d> <70d0> +<3b3f> <3b41> <70dc> +<3b42> <3b45> <70e0> +<3b49> <3b4c> <70f0> +<3b4d> <3b4e> <70f5> +<3b50> <3b52> <70fa> +<3b53> <3b5d> <70fe> +<3b5e> <3b62> <710b> +<3b63> <3b64> <7111> +endbfrange + +100 beginbfrange +<3b67> <3b6c> <711b> +<3b6d> <3b70> <7122> +<3b71> <3b78> <7127> +<3b79> <3b7c> <7132> +<3b7d> <3b8a> <7137> +<3b8b> <3b8d> <7146> +<3b90> <3b92> <714f> +<3b93> <3b9b> <7153> +<3b9d> <3b9f> <715f> +<3ba2> <3ba3> <716a> +<3ba5> <3ba7> <716f> +<3ba8> <3bab> <7174> +<3bad> <3bae> <717b> +<3baf> <3bb4> <717e> +<3bb5> <3bb9> <7185> +<3bba> <3bbd> <718b> +<3bbe> <3bbf> <7190> +<3bc1> <3bc2> <7195> +<3bc3> <3bc7> <719a> +<3bc8> <3bce> <71a1> +<3bcf> <3bd1> <71a9> +<3bd2> <3bd5> <71ad> +<3bd8> <3bda> <71b6> +<3bdb> <3bde> <71ba> +<3bdf> <3be0> <71bf> +<3be2> <3be5> <71c4> +<3be6> <3bea> <71c9> +<3beb> <3bed> <71cf> +<3bef> <3bf1> <71d6> +<3bf2> <3bf3> <71da> +<3bf4> <3bf5> <71dd> +<3bf6> <3bf9> <71e1> +<3bfa> <3bfe> <71e8> +<3c00> <3c03> <71f0> +<3c04> <3c07> <71f5> +<3c08> <3c09> <71fa> +<3c0b> <3c11> <71ff> +<3c12> <3c17> <7207> +<3c18> <3c19> <720e> +<3c1a> <3c23> <7211> +<3c25> <3c2e> <721e> +<3c31> <3c33> <722d> +<3c34> <3c35> <7233> +<3c37> <3c3d> <7240> +<3c3e> <3c40> <7249> +<3c41> <3c44> <724e> +<3c45> <3c47> <7253> +<3c4d> <3c4f> <7263> +<3c51> <3c54> <726a> +<3c55> <3c56> <7270> +<3c57> <3c58> <7273> +<3c59> <3c5b> <7276> +<3c5c> <3c5d> <727b> +<3c5e> <3c5f> <7282> +<3c60> <3c64> <7285> +<3c67> <3c68> <7290> +<3c69> <3c6b> <7293> +<3c6c> <3c73> <7297> +<3c74> <3c75> <72a0> +<3c76> <3c79> <72a3> +<3c7a> <3c7d> <72a8> +<3c7f> <3c81> <72b1> +<3c83> <3c88> <72ba> +<3c89> <3c8b> <72c5> +<3c8c> <3c8f> <72c9> +<3c92> <3c95> <72d3> +<3c97> <3c9a> <72da> +<3c9c> <3ca1> <72e2> +<3ca2> <3ca3> <72ea> +<3ca4> <3ca5> <72f5> +<3ca6> <3ca8> <72fe> +<3caa> <3caf> <7304> +<3cb0> <3cb2> <730b> +<3cb3> <3cb6> <730f> +<3cb8> <3cba> <7318> +<3cbb> <3cbc> <731f> +<3cbd> <3cbe> <7323> +<3cbf> <3cc1> <7326> +<3cc3> <3cc4> <732f> +<3cc5> <3cc6> <7332> +<3cc9> <3cca> <733c> +<3ccc> <3ccd> <7342> +<3cce> <3cd4> <7346> +<3cd5> <3cd6> <734e> +<3cd8> <3cdb> <7353> +<3cdc> <3ce3> <7358> +<3ce4> <3cea> <7361> +<3cee> <3cef> <7373> +<3cf4> <3cf6> <7381> +<3cf7> <3cf8> <7385> +<3cfb> <3cfc> <738c> +<3cfd> <3cfe> <738f> +<3d00> <3d02> <7393> +<3d03> <3d06> <7397> +<3d07> <3d09> <739c> +<3d0a> <3d0b> <73a0> +<3d0c> <3d11> <73a3> +<3d13> <3d14> <73ac> +<3d16> <3d18> <73b4> +<3d19> <3d1a> <73b8> +endbfrange + +100 beginbfrange +<3d1b> <3d1e> <73bc> +<3d20> <3d24> <73c3> +<3d25> <3d26> <73cb> +<3d28> <3d2e> <73d2> +<3d2f> <3d32> <73da> +<3d34> <3d37> <73e1> +<3d3a> <3d3c> <73ea> +<3d3d> <3d40> <73ee> +<3d41> <3d4b> <73f3> +<3d4c> <3d4f> <73ff> +<3d51> <3d52> <7407> +<3d53> <3d56> <740b> +<3d57> <3d5f> <7411> +<3d60> <3d65> <741c> +<3d66> <3d67> <7423> +<3d6d> <3d6e> <7431> +<3d6f> <3d73> <7437> +<3d74> <3d75> <743d> +<3d77> <3d7f> <7442> +<3d80> <3d88> <744c> +<3d8c> <3d8e> <7460> +<3d8f> <3d93> <7464> +<3d94> <3d95> <746b> +<3d96> <3d97> <746e> +<3d98> <3d9c> <7471> +<3d9d> <3da2> <7478> +<3da5> <3da7> <7484> +<3daa> <3dab> <748c> +<3dad> <3db7> <7491> +<3db9> <3dbc> <749f> +<3dbd> <3dbe> <74a4> +<3dbf> <3dc4> <74aa> +<3dc5> <3dcd> <74b1> +<3dce> <3dcf> <74bb> +<3dd0> <3ddb> <74be> +<3ddc> <3ddf> <74cb> +<3de0> <3de1> <74d0> +<3de3> <3de7> <74d5> +<3ded> <3df3> <74e7> +<3df4> <3df7> <74f0> +<3df9> <3dff> <74f8> +<3e00> <3e03> <7500> +<3e04> <3e0a> <7505> +<3e0e> <3e11> <7514> +<3e13> <3e14> <751d> +<3e15> <3e17> <7520> +<3e19> <3e1a> <7526> +<3e20> <3e21> <753c> +<3e23> <3e26> <7541> +<3e27> <3e28> <7546> +<3e29> <3e2a> <7549> +<3e2c> <3e2f> <7550> +<3e30> <3e33> <7555> +<3e34> <3e37> <755e> +<3e38> <3e39> <7563> +<3e3a> <3e3c> <7567> +<3e3d> <3e42> <756c> +<3e46> <3e4a> <757a> +<3e4b> <3e4d> <7580> +<3e4e> <3e4f> <7584> +<3e50> <3e52> <7588> +<3e53> <3e55> <758c> +<3e5a> <3e5b> <759b> +<3e5e> <3e62> <75a6> +<3e64> <3e65> <75b6> +<3e66> <3e67> <75ba> +<3e68> <3e6a> <75bf> +<3e6c> <3e6d> <75cb> +<3e6e> <3e71> <75ce> +<3e75> <3e76> <75dc> +<3e77> <3e79> <75df> +<3e7c> <3e7f> <75ec> +<3e80> <3e81> <75f2> +<3e82> <3e85> <75f5> +<3e86> <3e87> <75fa> +<3e88> <3e89> <75fd> +<3e8b> <3e8e> <7606> +<3e8f> <3e90> <760e> +<3e91> <3e94> <7611> +<3e97> <3e98> <761c> +<3e9c> <3e9d> <762e> +<3e9e> <3e9f> <7631> +<3ea0> <3ea1> <7636> +<3ea2> <3ea3> <7639> +<3ea6> <3ea7> <7644> +<3ea9> <3eaa> <764a> +<3eab> <3eb0> <764e> +<3eb3> <3eb5> <7659> +<3eb7> <3eb8> <7660> +<3ebc> <3ec0> <7673> +<3ec1> <3ec2> <7679> +<3ec3> <3ec5> <767f> +<3ec8> <3ec9> <7689> +<3eca> <3ecb> <768c> +<3ecc> <3ecd> <768f> +<3ecf> <3ed0> <7694> +<3ed1> <3ed2> <7697> +<3ed3> <3edb> <769b> +<3edc> <3ee4> <76a5> +<3ee5> <3ee6> <76af> +endbfrange + +100 beginbfrange +<3ee8> <3eea> <76b5> +<3eec> <3eef> <76bb> +<3ef0> <3ef1> <76c0> +<3ef2> <3ef3> <76c3> +<3ef6> <3ef7> <76cb> +<3efa> <3efb> <76d9> +<3efc> <3efd> <76dc> +<3f01> <3f06> <76e8> +<3f09> <3f0b> <76f5> +<3f0c> <3f0d> <76fa> +<3f0f> <3f10> <76ff> +<3f11> <3f12> <7702> +<3f13> <3f14> <7705> +<3f17> <3f21> <770e> +<3f22> <3f25> <771b> +<3f27> <3f29> <7723> +<3f2b> <3f2d> <772a> +<3f2f> <3f33> <7730> +<3f36> <3f38> <773d> +<3f3a> <3f3c> <7744> +<3f3d> <3f43> <7748> +<3f44> <3f4b> <7752> +<3f4c> <3f4d> <775c> +<3f4e> <3f4f> <775f> +<3f52> <3f53> <7769> +<3f54> <3f5f> <776d> +<3f60> <3f62> <777a> +<3f63> <3f65> <7781> +<3f66> <3f6b> <7786> +<3f6c> <3f6d> <778f> +<3f6e> <3f72> <7793> +<3f73> <3f77> <7799> +<3f79> <3f7a> <77a3> +<3f7e> <3f7f> <77ae> +<3f80> <3f81> <77b1> +<3f83> <3f87> <77b6> +<3f89> <3f8f> <77c0> +<3f90> <3f94> <77c8> +<3f95> <3f9d> <77ce> +<3f9e> <3f9f> <77d8> +<3fa0> <3fa4> <77dd> +<3fa9> <3fab> <77f0> +<3fac> <3fad> <77f4> +<3faf> <3fb2> <77f9> +<3fb3> <3fb8> <7803> +<3fb9> <3fba> <780a> +<3fbb> <3fbd> <780e> +<3fc3> <3fc5> <7820> +<3fc8> <3fc9> <782a> +<3fca> <3fcb> <782e> +<3fcc> <3fce> <7831> +<3fcf> <3fd0> <7835> +<3fd3> <3fd4> <7841> +<3fd7> <3fda> <7848> +<3fde> <3fdf> <7853> +<3fe0> <3fe4> <7858> +<3fe5> <3fea> <785e> +<3feb> <3fed> <7865> +<3fef> <3ff5> <7870> +<3ff6> <3ff9> <7878> +<3ffa> <3fff> <787d> +<4000> <4003> <7883> +<4005> <4006> <788a> +<4007> <4008> <788f> +<400a> <400c> <7894> +<400e> <400f> <789d> +<4015> <4017> <78aa> +<4018> <4019> <78ae> +<401a> <401c> <78b5> +<401f> <4020> <78bf> +<4021> <4023> <78c2> +<4024> <4026> <78c6> +<4027> <402a> <78cc> +<402b> <402d> <78d1> +<402e> <4030> <78d6> +<4031> <4038> <78db> +<4039> <403b> <78e4> +<403c> <403e> <78e9> +<403f> <4040> <78ed> +<4041> <4042> <78f0> +<4044> <4045> <78f5> +<4046> <4047> <78f8> +<4048> <4049> <78fb> +<404a> <404c> <78fe> +<404d> <404f> <7902> +<4050> <4057> <7906> +<4058> <405b> <790f> +<405c> <4060> <7914> +<4061> <4064> <791a> +<4065> <4069> <791f> +<406b> <406d> <7927> +<406e> <4071> <792d> +<4072> <4073> <7932> +<4074> <4078> <7935> +<407b> <407e> <7942> +<4080> <4088> <794a> +<4089> <408a> <7954> +<408b> <408c> <7958> +<408e> <408f> <7963> +<4091> <4094> <7969> +endbfrange + +100 beginbfrange +<4096> <409c> <7970> +<409e> <40a2> <797b> +<40a3> <40a4> <7982> +<40a5> <40a8> <7986> +<40a9> <40aa> <798b> +<40ab> <40b4> <7990> +<40b5> <40bf> <799b> +<40c0> <40c1> <79a8> +<40c2> <40c4> <79ab> +<40c7> <40cb> <79b4> +<40cf> <40d0> <79c4> +<40d1> <40d2> <79c7> +<40d5> <40d7> <79ce> +<40d8> <40d9> <79d3> +<40da> <40db> <79d6> +<40dc> <40e1> <79d9> +<40e2> <40e4> <79e0> +<40ea> <40f0> <79f1> +<40f1> <40f2> <79f9> +<40f4> <40f5> <79fe> +<40f7> <40f8> <7a04> +<40f9> <40fc> <7a07> +<40fe> <40ff> <7a0f> +<4100> <4102> <7a11> +<4103> <4104> <7a15> +<4105> <4106> <7a18> +<4107> <4109> <7a1b> +<410b> <410c> <7a21> +<410d> <4116> <7a24> +<4117> <4118> <7a2f> +<411a> <411c> <7a34> +<4120> <4124> <7a41> +<4125> <4129> <7a47> +<412a> <412b> <7a4f> +<412c> <4130> <7a52> +<4131> <4139> <7a58> +<413a> <413f> <7a63> +<4141> <4144> <7a6c> +<4145> <4147> <7a71> +<4149> <414c> <7a7b> +<4150> <4153> <7a89> +<4154> <4156> <7a8e> +<4157> <4158> <7a93> +<4159> <415b> <7a99> +<415d> <4160> <7aa1> +<4163> <4166> <7aaf> +<4167> <4168> <7ab4> +<4169> <416b> <7ab7> +<416c> <416f> <7abb> +<4170> <4173> <7ac0> +<4176> <417f> <7acc> +<4180> <4181> <7ad7> +<4182> <4185> <7ada> +<4186> <4187> <7ae1> +<4189> <418b> <7ae7> +<418c> <418d> <7aeb> +<418f> <4194> <7af0> +<4195> <4196> <7af7> +<4197> <4198> <7afb> +<419a> <419c> <7b00> +<41a0> <41a2> <7b0c> +<41a4> <41a5> <7b12> +<41a6> <41a8> <7b16> +<41aa> <41ab> <7b1c> +<41ad> <41af> <7b21> +<41b3> <41b4> <7b2f> +<41b6> <41b9> <7b34> +<41bd> <41c2> <7b3f> +<41c5> <41c6> <7b4d> +<41cc> <41cd> <7b5e> +<41cf> <41d2> <7b63> +<41d3> <41d8> <7b68> +<41d9> <41da> <7b6f> +<41db> <41dc> <7b73> +<41e0> <41e1> <7b7c> +<41e3> <41e6> <7b81> +<41e7> <41eb> <7b86> +<41ed> <41ee> <7b8e> +<41ef> <41f1> <7b91> +<41f3> <41f6> <7b98> +<41f7> <41f9> <7b9e> +<41fa> <41fc> <7ba3> +<41fd> <41ff> <7bae> +<4200> <4201> <7bb2> +<4202> <4204> <7bb5> +<4205> <420b> <7bb9> +<420c> <420d> <7bc2> +<4211> <4214> <7bcd> +<4216> <421a> <7bd4> +<421b> <421c> <7bdb> +<421d> <421f> <7bde> +<4220> <4221> <7be2> +<4222> <4223> <7be7> +<4224> <4226> <7beb> +<4227> <4228> <7bef> +<422a> <422c> <7bf4> +<422d> <4230> <7bf8> +<4233> <4238> <7c01> +<4239> <423b> <7c08> +<423d> <4242> <7c10> +endbfrange + +100 beginbfrange +<4243> <4249> <7c17> +<424c> <424d> <7c24> +<424e> <424f> <7c28> +<4250> <425b> <7c2c> +<425c> <425f> <7c39> +<4261> <4268> <7c44> +<4269> <4276> <7c4e> +<4277> <4278> <7c5d> +<4279> <427b> <7c61> +<427c> <427f> <7c65> +<4282> <4284> <7c6f> +<4285> <428a> <7c75> +<428b> <4295> <7c7e> +<4296> <429c> <7c8a> +<429d> <429e> <7c93> +<42a0> <42a2> <7c99> +<42a3> <42a4> <7ca0> +<42a6> <42a9> <7ca6> +<42aa> <42ac> <7cab> +<42ad> <42ae> <7caf> +<42af> <42b3> <7cb4> +<42b4> <42b5> <7cba> +<42b6> <42b7> <7cbf> +<42b8> <42ba> <7cc2> +<42be> <42c4> <7cce> +<42c6> <42c7> <7cda> +<42c8> <42cd> <7ce1> +<42ce> <42d3> <7ce9> +<42d9> <42da> <7cfc> +<42df> <42e0> <7d0e> +<42e1> <42e2> <7d11> +<42e5> <42e7> <7d1d> +<42e8> <42eb> <7d23> +<42ec> <42ee> <7d28> +<42ef> <42f1> <7d2c> +<42f2> <42f6> <7d34> +<42f8> <42f9> <7d3d> +<42fd> <42ff> <7d47> +<4300> <4303> <7d4a> +<4305> <4310> <7d51> +<4311> <4312> <7d5f> +<4313> <4315> <7d63> +<4317> <431b> <7d69> +<431c> <431d> <7d6f> +<431e> <431f> <7d74> +<4321> <4327> <7d7a> +<4329> <432a> <7d84> +<432c> <4330> <7d8a> +<4331> <4333> <7d90> +<4334> <433b> <7d94> +<433d> <433f> <7d9f> +<4340> <4341> <7da4> +<4342> <4345> <7da7> +<4347> <4349> <7db5> +<434b> <434e> <7dc0> +<434f> <4350> <7dc5> +<4351> <4352> <7dc8> +<4353> <4357> <7dcc> +<4359> <435a> <7dd5> +<435b> <435d> <7dda> +<4360> <4361> <7de4> +<4363> <4364> <7dea> +<4365> <4366> <7ded> +<436a> <436b> <7df7> +<436d> <4378> <7dfc> +<4379> <437c> <7e0c> +<437d> <4385> <7e12> +<4387> <4389> <7e20> +<438a> <438c> <7e24> +<438d> <438f> <7e28> +<4391> <4392> <7e2f> +<4397> <4398> <7e3f> +<4399> <439b> <7e42> +<439c> <43a5> <7e48> +<43a7> <43aa> <7e56> +<43ab> <43ad> <7e5b> +<43ae> <43b0> <7e5f> +<43b1> <43b6> <7e63> +<43b8> <43b9> <7e71> +<43ba> <43be> <7e74> +<43bf> <43c0> <7e7a> +<43c1> <43c3> <7e7f> +<43c4> <43c8> <7e83> +<43cc> <43ce> <7e90> +<43d1> <43d2> <7e99> +<43d3> <43d4> <7e9d> +<43d7> <43d8> <7ebb> +<43e2> <43e8> <7f3b> +<43ea> <43ef> <7f46> +<43f2> <43f3> <7f52> +<43f6> <43f9> <7f5b> +<43fb> <43ff> <7f63> +<4400> <4402> <7f6b> +<4405> <4406> <7f75> +<4408> <440b> <7f7a> +<440c> <440d> <7f7f> +<440e> <4410> <7f82> +<4415> <4419> <7f8f> +<441a> <441e> <7f95> +<441f> <4420> <7f9b> +endbfrange + +100 beginbfrange +<4422> <4423> <7fa2> +<4426> <442a> <7faa> +<442c> <4430> <7fb3> +<4431> <4432> <7fba> +<4435> <4437> <7fc2> +<4438> <443b> <7fc6> +<443e> <4440> <7fcf> +<4442> <4443> <7fd6> +<4444> <4449> <7fd9> +<444a> <444c> <7fe2> +<444d> <444e> <7fe7> +<444f> <4452> <7fea> +<4455> <4459> <7ff4> +<445b> <445d> <7ffd> +<445f> <4462> <8007> +<4463> <4464> <800e> +<4467> <4468> <801a> +<4469> <446b> <801d> +<446d> <446e> <8023> +<4471> <4472> <802f> +<4475> <4476> <8039> +<4479> <447a> <8040> +<447b> <447c> <8044> +<447d> <447f> <8047> +<4480> <4483> <804e> +<4488> <448a> <805b> +<448b> <4494> <805f> +<4495> <4498> <806b> +<449b> <449d> <807a> +<449e> <449f> <8081> +<44a2> <44a7> <808d> +<44a8> <44a9> <8094> +<44ae> <44b0> <80a6> +<44b4> <44b5> <80b5> +<44b6> <44b7> <80b8> +<44ba> <44be> <80c7> +<44bf> <44c5> <80cf> +<44c7> <44c8> <80df> +<44c9> <44ca> <80e2> +<44d1> <44d4> <80fe> +<44d5> <44d6> <8103> +<44d7> <44d8> <8107> +<44d9> <44da> <810b> +<44de> <44df> <811c> +<44e0> <44ec> <811f> +<44ed> <44ee> <812d> +<44f0> <44f2> <8133> +<44f4> <44f7> <813a> +<44f8> <44fe> <813f> +<4504> <4505> <8157> +<4506> <450a> <815b> +<450b> <450d> <8162> +<4512> <4513> <8172> +<4514> <4516> <8175> +<4518> <451c> <8183> +<451e> <4521> <818b> +<4523> <4528> <8192> +<452a> <452b> <819e> +<452c> <452d> <81a1> +<452e> <452f> <81a4> +<4531> <4538> <81ab> +<4539> <453e> <81b4> +<4540> <4541> <81c4> +<4542> <4543> <81c7> +<4546> <454d> <81d0> +<454f> <4552> <81db> +<4553> <4554> <81e1> +<4555> <4557> <81e4> +<455a> <455e> <81ee> +<455f> <4563> <81f5> +<4568> <4569> <820e> +<456c> <4571> <8215> +<4574> <4577> <8224> +<457c> <457d> <823c> +<457e> <4582> <823f> +<4583> <4584> <8245> +<4587> <4589> <824c> +<458a> <4591> <8250> +<4592> <4595> <825b> +<4596> <4599> <8260> +<459c> <459d> <8269> +<459e> <459f> <826c> +<45a0> <45a1> <8275> +<45a3> <45a4> <827b> +<45a5> <45a6> <8280> +<45a8> <45aa> <8285> +<45ae> <45b1> <8293> +<45b2> <45b3> <829a> +<45b6> <45b7> <82a2> +<45ba> <45bb> <82b5> +<45be> <45bf> <82bf> +<45c0> <45c1> <82c2> +<45c2> <45c3> <82c5> +<45c7> <45c8> <82d9> +<45cb> <45cd> <82e8> +<45ce> <45d0> <82ec> +<45d2> <45d3> <82f2> +<45d4> <45d5> <82f5> +<45d8> <45dc> <82fc> +<45dd> <45de> <830a> +endbfrange + +100 beginbfrange +<45e1> <45e2> <8312> +<45e4> <45e5> <8318> +<45e6> <45ef> <831d> +<45f0> <45f1> <8329> +<45f7> <45f9> <833d> +<45fa> <45fb> <8341> +<45fc> <45fd> <8344> +<4600> <4603> <834b> +<4605> <4609> <8355> +<460c> <4612> <8370> +<4613> <4614> <8379> +<4615> <461b> <837e> +<461c> <461d> <8387> +<461e> <4620> <838b> +<4621> <4623> <838f> +<4624> <4625> <8394> +<4627> <4628> <8399> +<462c> <462f> <83a3> +<4630> <4633> <83ac> +<4636> <4637> <83be> +<4638> <463a> <83c2> +<463c> <463d> <83c8> +<463f> <4640> <83cd> +<4641> <4644> <83d0> +<4647> <4649> <83d9> +<464b> <464d> <83e2> +<464e> <4650> <83e6> +<4651> <4654> <83eb> +<4655> <4659> <83f3> +<465a> <465c> <83fa> +<465d> <465f> <83fe> +<4662> <4663> <8408> +<4665> <466a> <8412> +<466b> <466d> <8419> +<466e> <4673> <841e> +<4674> <4676> <8429> +<4677> <467a> <842d> +<467b> <467d> <8432> +<467e> <467f> <8436> +<4680> <4682> <8439> +<4683> <468a> <843e> +<468b> <468c> <8447> +<468d> <4693> <844a> +<4694> <4697> <8453> +<4699> <469c> <845d> +<469f> <46a0> <8467> +<46a7> <46ad> <847b> +<46ae> <46b1> <8483> +<46b4> <46b7> <848f> +<46b8> <46b9> <8495> +<46bb> <46bc> <849a> +<46bd> <46c0> <849d> +<46c1> <46cd> <84a2> +<46ce> <46cf> <84b0> +<46d1> <46d3> <84b5> +<46d6> <46d7> <84c2> +<46d8> <46db> <84c5> +<46dd> <46de> <84ce> +<46e0> <46e1> <84d4> +<46e2> <46e7> <84d7> +<46e9> <46ea> <84e1> +<46ec> <46f0> <84e7> +<46f2> <46fc> <84f1> +<46fe> <46ff> <8500> +<4700> <4709> <8502> +<470a> <470d> <850d> +<470f> <4710> <8515> +<4711> <4712> <8518> +<4713> <4715> <851b> +<4718> <4719> <8524> +<471a> <471d> <8527> +<471e> <4726> <852e> +<4727> <4729> <853e> +<472b> <472c> <8544> +<472e> <4730> <854b> +<4731> <4733> <854f> +<4736> <4739> <855a> +<473a> <473c> <855f> +<473e> <4740> <8565> +<4741> <4742> <856b> +<4743> <4746> <856e> +<4748> <4749> <8575> +<474b> <474c> <857c> +<474d> <4751> <857f> +<4755> <4756> <858d> +<4758> <4759> <8592> +<475a> <475f> <8595> +<4760> <4761> <859d> +<4762> <4765> <85a0> +<4768> <476a> <85ab> +<476b> <4770> <85b1> +<4772> <4777> <85bb> +<4778> <477e> <85c2> +<477f> <4781> <85ca> +<4782> <4783> <85d1> +<4785> <478a> <85d6> +<478b> <4790> <85de> +<4791> <4793> <85e6> +<4794> <479c> <85eb> +<479e> <479f> <85f7> +endbfrange + +100 beginbfrange +<47a0> <47a2> <85fc> +<47a3> <47a6> <8600> +<47a7> <47a9> <8608> +<47aa> <47ae> <860c> +<47af> <47b2> <8612> +<47b3> <47b5> <8617> +<47b6> <47b8> <861b> +<47b9> <47bb> <861f> +<47bc> <47bf> <8623> +<47c1> <47c3> <862a> +<47c4> <47cd> <862e> +<47d0> <47d1> <863d> +<47d2> <47de> <8640> +<47df> <47e0> <8652> +<47e1> <47e4> <8656> +<47e7> <47e8> <8660> +<47e9> <47ec> <8663> +<47ed> <47ef> <8668> +<47f1> <47f2> <866f> +<47f3> <47f9> <8672> +<47fa> <47ff> <8683> +<4801> <4805> <868e> +<4807> <480c> <8696> +<480d> <4811> <869e> +<4812> <4813> <86a5> +<4815> <4816> <86ad> +<4817> <4818> <86b2> +<4819> <481b> <86b7> +<481c> <4820> <86bb> +<4821> <4823> <86c1> +<4826> <4827> <86cc> +<4828> <4829> <86d2> +<482a> <482c> <86d5> +<482e> <482f> <86dc> +<4830> <4833> <86e0> +<4834> <4837> <86e5> +<4838> <483a> <86ea> +<483c> <483e> <86f5> +<483f> <4841> <86fb> +<4844> <4845> <8704> +<4846> <4847> <870b> +<4848> <484b> <870e> +<4851> <4852> <871f> +<4854> <4856> <8726> +<4857> <485a> <872a> +<485b> <485c> <872f> +<485d> <485e> <8732> +<485f> <4860> <8735> +<4861> <4863> <8738> +<4864> <4865> <873c> +<4866> <486c> <8740> +<486d> <486e> <874a> +<4870> <4873> <874f> +<4877> <487c> <875a> +<487d> <487e> <8761> +<487f> <4885> <8767> +<4887> <4889> <8771> +<488c> <488d> <8779> +<488e> <4890> <877f> +<4891> <4892> <8786> +<4893> <4894> <8789> +<4896> <489a> <878e> +<489b> <489d> <8794> +<489e> <48a3> <8798> +<48a4> <48a5> <87a0> +<48a6> <48aa> <87a3> +<48ab> <48ac> <87a9> +<48ae> <48b0> <87b0> +<48b2> <48b5> <87b6> +<48b7> <48b8> <87be> +<48b9> <48bb> <87c1> +<48bf> <48c0> <87cc> +<48c1> <48c2> <87cf> +<48c3> <48c9> <87d4> +<48ca> <48cd> <87dc> +<48ce> <48cf> <87e1> +<48d1> <48d4> <87e6> +<48d7> <48d8> <87f0> +<48d9> <48db> <87f3> +<48dc> <48dd> <87f7> +<48df> <48e0> <87fc> +<48e1> <48e4> <87ff> +<48e6> <48e8> <8807> +<48e9> <48ed> <880b> +<48f0> <48f3> <8817> +<48f4> <48f6> <881c> +<48f8> <48ff> <8824> +<4900> <4904> <882c> +<4905> <4907> <8833> +<4908> <4909> <8837> +<490b> <490d> <883d> +<490e> <4910> <8841> +<4911> <4913> <8847> +<4915> <4919> <884e> +<491a> <491b> <8855> +<491f> <4921> <885e> +<4922> <4923> <8866> +<4928> <492b> <8873> +<492d> <492f> <887a> +<4932> <4933> <8886> +endbfrange + +100 beginbfrange +<4934> <4935> <8889> +<4937> <493a> <888e> +<493b> <493d> <8893> +<493e> <4942> <8897> +<4943> <4947> <889d> +<4949> <494e> <88a5> +<4950> <4952> <88ae> +<4953> <4957> <88b2> +<4958> <495b> <88b8> +<495c> <495f> <88bd> +<4960> <4961> <88c3> +<4962> <4963> <88c7> +<4964> <4966> <88cb> +<4967> <4968> <88d0> +<496a> <496b> <88d6> +<496c> <496d> <88da> +<496f> <4970> <88e0> +<4971> <4972> <88e6> +<4973> <4979> <88e9> +<497b> <497d> <88f5> +<497e> <497f> <88fa> +<4980> <4982> <88ff> +<4983> <4986> <8903> +<4987> <4988> <8908> +<4989> <498d> <890b> +<498f> <4993> <8914> +<4994> <4998> <891c> +<4999> <499b> <8922> +<499c> <499f> <8926> +<49a0> <49a3> <892c> +<49a7> <49a8> <8939> +<49a9> <49ad> <893c> +<49ae> <49af> <8942> +<49b0> <49b1> <8945> +<49b2> <49bf> <8948> +<49c0> <49c5> <8957> +<49c6> <49c8> <8961> +<49ca> <49cc> <8967> +<49ce> <49cf> <896d> +<49d0> <49d1> <8970> +<49d2> <49d9> <8973> +<49da> <49dc> <897c> +<49df> <49e0> <8984> +<49e1> <49e4> <8987> +<49e5> <49e7> <898c> +<49e8> <49ea> <8990> +<49eb> <49ec> <8994> +<49ee> <49f5> <8999> +<49f6> <49f9> <89a2> +<49fa> <49fc> <89a7> +<49fe> <49ff> <89ad> +<4a00> <4a01> <89b0> +<4a02> <4a05> <89b3> +<4a06> <4a07> <89b8> +<4a08> <4a09> <89bb> +<4a0d> <4a0f> <89d3> +<4a10> <4a12> <89d7> +<4a15> <4a18> <89df> +<4a1a> <4a1d> <89e7> +<4a1e> <4a20> <89ec> +<4a21> <4a23> <89f0> +<4a26> <4a2c> <89f9> +<4a2d> <4a2f> <8a04> +<4a34> <4a35> <8a11> +<4a38> <4a39> <8a19> +<4a3c> <4a3e> <8a20> +<4a40> <4a43> <8a26> +<4a44> <4a45> <8a2b> +<4a46> <4a48> <8a2e> +<4a49> <4a4a> <8a32> +<4a4c> <4a4e> <8a37> +<4a4f> <4a51> <8a3b> +<4a52> <4a53> <8a3f> +<4a54> <4a57> <8a42> +<4a59> <4a5d> <8a49> +<4a61> <4a62> <8a56> +<4a63> <4a64> <8a59> +<4a65> <4a66> <8a5c> +<4a67> <4a68> <8a5f> +<4a69> <4a6a> <8a64> +<4a6b> <4a6c> <8a67> +<4a70> <4a72> <8a76> +<4a73> <4a74> <8a7a> +<4a75> <4a76> <8a7d> +<4a77> <4a7a> <8a80> +<4a7c> <4a7d> <8a8b> +<4a7e> <4a80> <8a8e> +<4a82> <4a83> <8a96> +<4a85> <4a87> <8a9b> +<4a8b> <4a8d> <8aa9> +<4a8e> <4a90> <8aad> +<4a92> <4a94> <8ab3> +<4a95> <4a96> <8ab7> +<4a97> <4a98> <8aba> +<4a99> <4a9a> <8abd> +<4a9b> <4a9c> <8ac0> +<4a9e> <4a9f> <8ac5> +<4aa5> <4aa7> <8ad3> +<4aa8> <4aaa> <8ad8> +<4aac> <4aae> <8adf> +endbfrange + +100 beginbfrange +<4ab1> <4ab3> <8ae8> +<4ab5> <4ab6> <8aef> +<4ab8> <4ab9> <8af4> +<4ac0> <4ac1> <8b08> +<4ac2> <4ac4> <8b0b> +<4ac6> <4ac8> <8b11> +<4acc> <4ace> <8b1e> +<4acf> <4ad2> <8b22> +<4ad4> <4ad5> <8b29> +<4ad6> <4ada> <8b2e> +<4adb> <4adf> <8b34> +<4ae0> <4ae3> <8b3a> +<4ae4> <4aed> <8b3f> +<4aee> <4af1> <8b4a> +<4af2> <4af7> <8b50> +<4afa> <4aff> <8b5d> +<4b00> <4b02> <8b63> +<4b03> <4b06> <8b67> +<4b07> <4b08> <8b6d> +<4b09> <4b0b> <8b71> +<4b0c> <4b0d> <8b75> +<4b0e> <4b12> <8b78> +<4b13> <4b14> <8b7e> +<4b15> <4b1d> <8b81> +<4b1e> <4b20> <8b8b> +<4b21> <4b23> <8b8f> +<4b25> <4b29> <8b97> +<4b34> <4b3c> <8c38> +<4b3d> <4b40> <8c42> +<4b41> <4b42> <8c4a> +<4b43> <4b45> <8c4d> +<4b46> <4b49> <8c51> +<4b4a> <4b4d> <8c56> +<4b4e> <4b53> <8c5b> +<4b54> <4b5a> <8c63> +<4b5b> <4b61> <8c6c> +<4b62> <4b65> <8c74> +<4b66> <4b6c> <8c7b> +<4b6d> <4b6e> <8c83> +<4b6f> <4b71> <8c86> +<4b73> <4b79> <8c8d> +<4b7a> <4b7c> <8c95> +<4b7d> <4b80> <8c99> +<4b82> <4b85> <8ca3> +<4b86> <4b87> <8cad> +<4b8e> <4b93> <8ccb> +<4b95> <4b98> <8cd6> +<4b9d> <4b9e> <8ce8> +<4b9f> <4ba4> <8cee> +<4ba5> <4ba9> <8cf5> +<4baa> <4bae> <8cff> +<4baf> <4bb0> <8d06> +<4bb4> <4bb8> <8d11> +<4bb9> <4bbc> <8d17> +<4bbe> <4bbf> <8d51> +<4bc3> <4bc5> <8d68> +<4bc7> <4bc8> <8d6e> +<4bc9> <4bca> <8d71> +<4bcb> <4bd3> <8d78> +<4bd4> <4bd5> <8d82> +<4bd6> <4bd9> <8d86> +<4bda> <4bde> <8d8c> +<4bdf> <4be0> <8d92> +<4be1> <4be3> <8d96> +<4be4> <4be8> <8d9a> +<4be9> <4beb> <8da0> +<4bec> <4bef> <8da4> +<4bf0> <4bf7> <8da9> +<4bf8> <4bf9> <8db6> +<4bfd> <4bff> <8dc0> +<4c01> <4c04> <8dc7> +<4c07> <4c0a> <8dd2> +<4c0b> <4c0c> <8dd8> +<4c0e> <4c10> <8de0> +<4c11> <4c13> <8de5> +<4c15> <4c16> <8ded> +<4c17> <4c19> <8df0> +<4c1d> <4c23> <8dfe> +<4c24> <4c26> <8e06> +<4c28> <4c29> <8e0d> +<4c2a> <4c2c> <8e11> +<4c2d> <4c34> <8e15> +<4c35> <4c36> <8e20> +<4c37> <4c3b> <8e24> +<4c3f> <4c40> <8e32> +<4c41> <4c43> <8e36> +<4c44> <4c45> <8e3b> +<4c46> <4c47> <8e3e> +<4c49> <4c4a> <8e45> +<4c4b> <4c4e> <8e4d> +<4c4f> <4c50> <8e53> +<4c51> <4c53> <8e56> +<4c54> <4c5c> <8e5a> +<4c5d> <4c5e> <8e64> +<4c5f> <4c60> <8e67> +<4c61> <4c62> <8e6a> +<4c67> <4c69> <8e77> +<4c6b> <4c6c> <8e7d> +<4c6e> <4c70> <8e82> +<4c75> <4c79> <8e95> +endbfrange + +100 beginbfrange +<4c7c> <4c7d> <8e9f> +<4c7e> <4c80> <8ea2> +<4c81> <4c83> <8ea7> +<4c84> <4c85> <8ead> +<4c86> <4c87> <8eb0> +<4c88> <4c8e> <8eb3> +<4c8f> <4c93> <8ebb> +<4c94> <4c9c> <8ec1> +<4c9d> <4c9f> <8ecf> +<4ca1> <4ca6> <8ed5> +<4ca7> <4ca9> <8edc> +<4caa> <4cad> <8ee0> +<4cae> <4cb3> <8ee5> +<4cb4> <4cb9> <8eec> +<4cba> <4cbe> <8ef3> +<4cc0> <4cc3> <8eff> +<4cc7> <4ccd> <8f0b> +<4ccf> <4cd3> <8f16> +<4cd4> <4cd8> <8f20> +<4cd9> <4cda> <8f27> +<4cdb> <4cde> <8f2b> +<4cdf> <4ce1> <8f30> +<4ce2> <4ce5> <8f34> +<4ce6> <4ce7> <8f39> +<4ce8> <4ce9> <8f3c> +<4cea> <4ceb> <8f40> +<4ced> <4cee> <8f47> +<4cef> <4cf1> <8f4a> +<4cf2> <4cf6> <8f4f> +<4cf7> <4cff> <8f55> +<4d09> <4d0b> <8fa0> +<4d0c> <4d0d> <8fa4> +<4d11> <4d13> <8fb3> +<4d14> <4d15> <8fb7> +<4d16> <4d18> <8fba> +<4d19> <4d1a> <8fbf> +<4d1d> <4d21> <8fc9> +<4d24> <4d25> <8fd6> +<4d27> <4d28> <8fe0> +<4d2d> <4d2e> <8ff1> +<4d2f> <4d30> <8ff5> +<4d31> <4d33> <8ffa> +<4d34> <4d35> <8ffe> +<4d36> <4d37> <9007> +<4d3d> <4d3e> <9024> +<4d3f> <4d44> <9027> +<4d45> <4d46> <9030> +<4d47> <4d48> <9033> +<4d4a> <4d4b> <9039> +<4d4d> <4d4e> <903f> +<4d50> <4d51> <9045> +<4d52> <4d54> <9048> +<4d57> <4d58> <9059> +<4d5d> <4d5e> <9066> +<4d5f> <4d61> <906a> +<4d62> <4d64> <906f> +<4d6a> <4d6b> <9085> +<4d6d> <4d6f> <908c> +<4d76> <4d78> <909e> +<4d79> <4d7a> <90a4> +<4d7b> <4d7d> <90a7> +<4d82> <4d83> <90bc> +<4d84> <4d85> <90bf> +<4d86> <4d87> <90c2> +<4d89> <4d8a> <90c8> +<4d8b> <4d8d> <90cb> +<4d8f> <4d91> <90d4> +<4d92> <4d94> <90d8> +<4d97> <4d99> <90e3> +<4d9a> <4d9b> <90e9> +<4d9e> <4da1> <90f0> +<4da2> <4da3> <90f6> +<4da4> <4da7> <90f9> +<4da8> <4daa> <90ff> +<4dad> <4dae> <9107> +<4daf> <4db6> <910a> +<4db9> <4dba> <9117> +<4dbb> <4dbe> <911a> +<4dbf> <4dc1> <911f> +<4dc2> <4dc4> <9124> +<4dc5> <4dc9> <9128> +<4dcd> <4dce> <9137> +<4dcf> <4dd6> <913b> +<4dd7> <4dd8> <9144> +<4ddb> <4dde> <9153> +<4ddf> <4de0> <9158> +<4de1> <4de2> <915b> +<4de3> <4de4> <915f> +<4de5> <4de7> <9166> +<4deb> <4ded> <917a> +<4dee> <4df2> <9180> +<4df6> <4df7> <918e> +<4df8> <4dfa> <9193> +<4dfb> <4dfd> <9197> +<4dfe> <4dff> <919d> +<4e00> <4e02> <919f> +<4e03> <4e08> <91a4> +<4e09> <4e0c> <91b0> +<4e0d> <4e10> <91b6> +<4e11> <4e15> <91bb> +endbfrange + +100 beginbfrange +<4e1c> <4e1d> <91da> +<4e1e> <4e22> <91de> +<4e23> <4e24> <91e5> +<4e26> <4e30> <91ea> +<4e33> <4e37> <91fb> +<4e38> <4e39> <9202> +<4e3a> <4e3c> <9205> +<4e3d> <4e3f> <920a> +<4e41> <4e42> <9212> +<4e43> <4e4a> <9216> +<4e4b> <4e4e> <921f> +<4e50> <4e55> <9228> +<4e57> <4e58> <9231> +<4e59> <4e5a> <9235> +<4e5b> <4e5c> <923b> +<4e5d> <4e60> <9241> +<4e61> <4e62> <9246> +<4e63> <4e65> <924a> +<4e66> <4e68> <924e> +<4e69> <4e6b> <9252> +<4e6d> <4e6e> <9258> +<4e6f> <4e70> <925c> +<4e71> <4e73> <925f> +<4e74> <4e76> <9263> +<4e77> <4e7b> <9267> +<4e7c> <4e81> <926e> +<4e82> <4e84> <9275> +<4e86> <4e88> <927c> +<4e89> <4e8a> <9281> +<4e8c> <4e93> <9286> +<4e94> <4e95> <928f> +<4e97> <4e98> <9294> +<4e9c> <4e9e> <929d> +<4e9f> <4ea0> <92a1> +<4ea4> <4ea5> <92af> +<4ea6> <4eaa> <92b2> +<4ead> <4eb0> <92bd> +<4eb4> <4eb6> <92c9> +<4eb7> <4eb8> <92cd> +<4eb9> <4eba> <92d0> +<4ebb> <4ec4> <92d3> +<4ec6> <4ec8> <92e0> +<4ecb> <4ecc> <92eb> +<4ecd> <4ed0> <92f2> +<4ed2> <4ed4> <92f9> +<4ed5> <4ed8> <92fd> +<4ed9> <4edc> <9302> +<4edd> <4ee3> <9309> +<4ee5> <4ee6> <9313> +<4ee7> <4ee8> <9316> +<4ee9> <4eeb> <931c> +<4eed> <4eef> <9323> +<4ef1> <4ef2> <9329> +<4ef3> <4ef4> <932c> +<4ef5> <4ef6> <9330> +<4ef7> <4ef8> <9334> +<4efa> <4efe> <9339> +<4f01> <4f02> <9344> +<4f03> <4f05> <9348> +<4f07> <4f0c> <934e> +<4f0d> <4f0f> <9355> +<4f10> <4f11> <9359> +<4f12> <4f19> <935c> +<4f1a> <4f1c> <9366> +<4f1e> <4f20> <936d> +<4f21> <4f24> <9371> +<4f25> <4f27> <9377> +<4f28> <4f2a> <937b> +<4f2b> <4f2d> <937f> +<4f2f> <4f30> <9385> +<4f31> <4f32> <9388> +<4f33> <4f36> <938b> +<4f37> <4f3c> <9390> +<4f3e> <4f46> <9399> +<4f47> <4f48> <93a4> +<4f4d> <4f4e> <93b1> +<4f50> <4f51> <93b6> +<4f52> <4f57> <93b9> +<4f58> <4f5a> <93c0> +<4f5b> <4f5d> <93c4> +<4f60> <4f62> <93ce> +<4f63> <4f66> <93d2> +<4f67> <4f69> <93d9> +<4f6c> <4f6e> <93e5> +<4f6f> <4f7a> <93e9> +<4f7d> <4f85> <93fa> +<4f86> <4f8c> <9404> +<4f8d> <4f90> <940c> +<4f92> <4f94> <9415> +<4f95> <4f97> <941a> +<4f98> <4f99> <941e> +<4f9a> <4f9e> <9421> +<4f9f> <4fa3> <9429> +<4fa4> <4fa6> <942f> +<4fa8> <4fa9> <9436> +<4fab> <4fad> <943b> +<4fae> <4fb1> <9440> +<4fb2> <4fb6> <9445> +<4fb8> <4fbc> <944d> +<4fbe> <4fc8> <9455> +endbfrange + +100 beginbfrange +<4fc9> <4fca> <9461> +<4fcc> <4fd0> <9466> +<4fd2> <4fd3> <946e> +<4fd5> <4fd8> <9473> +<4fda> <4fdb> <947a> +<4fdc> <4fe0> <9480> +<4fe6> <4fe7> <94d3> +<4ff7> <4ff8> <9574> +<4ff9> <4fff> <9578> +<5001> <5002> <9584> +<5003> <5004> <9587> +<5009> <500b> <9595> +<500c> <5013> <9599> +<5015> <5016> <95a6> +<5018> <501b> <95ae> +<501c> <501e> <95b3> +<501f> <5020> <95b7> +<5022> <5024> <95c0> +<5025> <5026> <95c4> +<5029> <502b> <95cd> +<502c> <502e> <95d1> +<502f> <5033> <95d7> +<5035> <5036> <95df> +<5037> <5038> <95e3> +<5039> <503a> <95e6> +<5043> <5049> <9623> +<504a> <504c> <962b> +<504d> <504e> <962f> +<504f> <5052> <9637> +<5057> <5058> <964e> +<5059> <505b> <9651> +<505c> <505d> <9656> +<505e> <505f> <9659> +<5063> <5064> <9665> +<5066> <5068> <966d> +<506a> <506d> <9679> +<506e> <5074> <967e> +<5078> <507a> <9691> +<507d> <5086> <969d> +<5088> <508c> <96ab> +<5092> <5093> <96c2> +<5095> <5096> <96ca> +<5097> <5098> <96d0> +<5099> <509a> <96d3> +<509b> <509c> <96d7> +<509e> <50a0> <96dd> +<50a2> <50a5> <96e4> +<50a6> <50a9> <96eb> +<50aa> <50ab> <96f0> +<50ac> <50ad> <96f4> +<50b0> <50b1> <96fc> +<50b3> <50b4> <9702> +<50b6> <50b8> <970a> +<50b9> <50bb> <9710> +<50bc> <50bd> <9714> +<50be> <50c2> <9717> +<50c4> <50cb> <971f> +<50cc> <50cd> <9728> +<50ce> <50cf> <972b> +<50d0> <50d1> <972e> +<50d3> <50d7> <9733> +<50d8> <50da> <973a> +<50db> <50dd> <973f> +<50df> <50e1> <9745> +<50e2> <50ea> <9749> +<50eb> <50ec> <9754> +<50ed> <50ee> <9757> +<50ef> <50f0> <975c> +<50f2> <50f3> <9763> +<50f4> <50f5> <9766> +<50f6> <50fe> <976a> +<5100> <5104> <9777> +<5105> <510c> <977d> +<510d> <5111> <9786> +<5116> <5118> <9795> +<5119> <511f> <9799> +<5120> <5121> <97a1> +<5122> <5123> <97a4> +<5124> <5127> <97a7> +<512a> <512b> <97b0> +<512d> <5134> <97b5> +<5135> <5139> <97be> +<513a> <513b> <97c4> +<513c> <513d> <97c7> +<513f> <5144> <97cd> +<5145> <5149> <97d4> +<514a> <514b> <97da> +<514d> <5153> <97df> +<5155> <5159> <97ee> +<515b> <5162> <97f7> +<5168> <516a> <9814> +<516b> <516d> <9819> +<516e> <5171> <981d> +<5172> <5173> <9822> +<5175> <517a> <9827> +<517b> <517c> <982e> +<517d> <5182> <9831> +<5183> <5184> <9839> +<5186> <518d> <983e> +<518e> <5192> <9847> +endbfrange + +100 beginbfrange +<5193> <5196> <984f> +<5197> <5199> <9855> +<519b> <519c> <985c> +<519d> <519f> <985f> +<51a0> <51a1> <9863> +<51a3> <51a5> <9868> +<51a6> <51a7> <986d> +<51af> <51b3> <98a9> +<51b6> <51b7> <98b4> +<51b8> <51bc> <98b7> +<51bd> <51c3> <98bd> +<51c6> <51ca> <98c9> +<51cb> <51cc> <98cf> +<51ce> <51cf> <98d6> +<51d0> <51d1> <98dc> +<51d3> <51d6> <98e3> +<51d9> <51da> <98f0> +<51dc> <51e2> <98f5> +<51e3> <51e6> <98ff> +<51e8> <51ea> <9906> +<51ec> <51ed> <990e> +<51ee> <51f1> <9914> +<51f2> <51f3> <9919> +<51f4> <51f5> <991c> +<51f6> <51f7> <991f> +<51f8> <51fd> <9922> +<51fe> <51ff> <9929> +<5200> <5202> <992b> +<5203> <5206> <992f> +<5207> <5209> <9934> +<520a> <520d> <9938> +<520f> <5211> <9940> +<5213> <5214> <9946> +<5215> <5218> <994d> +<521b> <521e> <9958> +<5220> <5222> <995f> +<5226> <5227> <9978> +<522a> <522b> <9982> +<522f> <5239> <999a> +<523a> <523b> <99a6> +<523c> <523e> <99a9> +<523f> <5240> <99af> +<5242> <524d> <99b5> +<524e> <525b> <99c2> +<525d> <525e> <99d6> +<5263> <526c> <99e3> +<526d> <526f> <99ee> +<5270> <527c> <99f2> +<527e> <5280> <9a02> +<5281> <5287> <9a06> +<5288> <528d> <9a10> +<528e> <528f> <9a17> +<5290> <52a0> <9a1a> +<52a3> <52a7> <9a31> +<52a8> <52ac> <9a39> +<52ae> <52b1> <9a46> +<52b2> <52b3> <9a4b> +<52b5> <52b9> <9a50> +<52bb> <52bc> <9a58> +<52bd> <52bf> <9a5c> +<52c0> <52c1> <9a60> +<52c3> <52c6> <9a66> +<52cb> <52cc> <9a8d> +<52cd> <52ce> <9a94> +<52d1> <52d6> <9aa9> +<52d7> <52da> <9ab2> +<52dd> <52df> <9abd> +<52e0> <52e1> <9ac3> +<52e2> <52e6> <9ac6> +<52e7> <52e8> <9acd> +<52eb> <52f0> <9ad9> +<52f2> <52f5> <9ae2> +<52f6> <52f9> <9ae7> +<52fb> <52ff> <9af0> +<5300> <5303> <9af5> +<5305> <530b> <9afc> +<530c> <530d> <9b04> +<530f> <5312> <9b09> +<5314> <5316> <9b10> +<5317> <531c> <9b14> +<531d> <5320> <9b1b> +<5321> <5322> <9b20> +<5326> <5329> <9b2a> +<532b> <5332> <9b33> +<5333> <5336> <9b3d> +<5338> <533a> <9b4a> +<533c> <533d> <9b52> +<533e> <5340> <9b55> +<5342> <5355> <9b5b> +<5356> <5359> <9b70> +<535a> <535b> <9b75> +<535c> <5364> <9b78> +<5366> <536f> <9b84> +<5371> <5377> <9b93> +<5378> <5379> <9b9b> +<537a> <5384> <9b9f> +<5386> <5396> <9baf> +<5397> <539b> <9bc2> +<539d> <53a5> <9bcb> +<53a7> <53aa> <9bd7> +endbfrange + +100 beginbfrange +<53ac> <53ae> <9bde> +<53b0> <53b1> <9be5> +<53b3> <53b6> <9bec> +<53b7> <53b9> <9bf1> +<53ba> <53c1> <9bf5> +<53c3> <53ca> <9c00> +<53cb> <53cd> <9c0a> +<53ce> <53cf> <9c0e> +<53d1> <53dc> <9c14> +<53dd> <53de> <9c21> +<53e0> <53e1> <9c26> +<53e2> <53e4> <9c2a> +<53e5> <53e7> <9c2e> +<53ec> <53ed> <9c3c> +<53ee> <53f3> <9c3f> +<53f4> <53f5> <9c46> +<53f6> <53fd> <9c4a> +<5400> <5403> <9c59> +<5405> <540b> <9c60> +<540c> <5410> <9c68> +<5411> <541a> <9c6e> +<541d> <541e> <9c7d> +<5420> <5421> <9c83> +<5422> <5423> <9c89> +<5427> <542a> <9c96> +<5430> <5434> <9cbe> +<5435> <5436> <9cc8> +<5437> <5438> <9cd1> +<5439> <543a> <9cda> +<543b> <543c> <9ce0> +<543d> <543e> <9ce3> +<543f> <5441> <9ce6> +<5442> <5443> <9cea> +<5444> <5449> <9ced> +<544b> <5459> <9cf7> +<545b> <5465> <9d0a> +<5466> <546a> <9d16> +<546d> <546f> <9d20> +<5470> <5471> <9d24> +<5473> <5478> <9d29> +<5479> <5482> <9d31> +<5483> <5485> <9d3c> +<5486> <5487> <9d40> +<5488> <5495> <9d43> +<5496> <549d> <9d54> +<549e> <549f> <9d5e> +<54a0> <54a7> <9d62> +<54a9> <54aa> <9d6d> +<54ab> <54ac> <9d70> +<54ad> <54c0> <9d73> +<54c2> <54ca> <9d8a> +<54cb> <54ce> <9d94> +<54d0> <54d9> <9d9b> +<54da> <54dc> <9da6> +<54dd> <54e1> <9daa> +<54e2> <54e5> <9db0> +<54e6> <54eb> <9db5> +<54ec> <54ee> <9dbd> +<54f1> <54fe> <9dc5> +<5500> <5501> <9dd5> +<5503> <550c> <9ddb> +<550d> <5514> <9de7> +<5515> <5516> <9df0> +<5517> <551a> <9df4> +<551b> <552b> <9dfb> +<552c> <5533> <9e0d> +<5534> <5537> <9e16> +<553e> <553f> <9e3b> +<5543> <5545> <9e52> +<5549> <554c> <9e5f> +<554e> <554f> <9e6e> +<5552> <5554> <9e76> +<5556> <5557> <9e80> +<5558> <555b> <9e83> +<555c> <555d> <9e89> +<555e> <5563> <9e8c> +<5564> <5566> <9e94> +<5567> <556b> <9e98> +<556d> <5571> <9ea0> +<5572> <5573> <9ea7> +<5574> <5578> <9eaa> +<5579> <557c> <9eb0> +<557d> <557e> <9eb6> +<557f> <5580> <9eb9> +<5582> <5586> <9ebf> +<5587> <558a> <9ec5> +<558b> <558c> <9eca> +<558e> <558f> <9ed2> +<5590> <5592> <9ed5> +<5593> <5594> <9ed9> +<5596> <5597> <9ee3> +<5599> <559c> <9eeb> +<559d> <559e> <9ef0> +<55a0> <55a1> <9ef5> +<55a4> <55ac> <9f00> +<55b0> <55b1> <9f11> +<55b5> <55ba> <9f1a> +<55bc> <55c4> <9f23> +<55c5> <55c6> <9f2d> +<55c7> <55cd> <9f30> +endbfrange + +100 beginbfrange +<55d1> <55d5> <9f3f> +<55d6> <55da> <9f45> +<55db> <55dd> <9f4c> +<55df> <55e2> <9f55> +<55e3> <55e4> <9f5a> +<55e5> <55e6> <9f5d> +<55e8> <55e9> <9f64> +<55ea> <55ec> <9f67> +<55ee> <55f2> <9f6d> +<55f3> <55f6> <9f73> +<55f7> <55fd> <9f78> +<55fe> <55ff> <9f81> +<5600> <5601> <9f8e> +<5602> <5604> <9f91> +<5605> <5607> <9f96> +<5608> <5609> <9f9d> +<560a> <560e> <9fa1> +<5610> <5612> +<5614> <5615> +<5617> <5619> +<561a> <561b> +<561c> <561e> +<5635> <5636> <9fb6> +<5643> <5644> <2eb6> +<5656> <5657> <4982> +<5658> <5659> <4985> +<5661> <5663> <4c9f> +<5666> <566c> <4d13> +<566f> <56cd> <0020> +<56d2> <56ff> <0021> +<5700> <572f> <004f> +<576b> <576c> <30f5> +<577b> <577d> <3033> +<577e> <5780> <3038> +<5781> <5783> <312a> +<5784> <579b> <31a0> +<579d> <579e> <2e82> +<579f> <57a1> <2e85> +<57a2> <57a3> <2e89> +<57a4> <57ad> <2e8d> +<57ae> <57af> <2e98> +<57b0> <57bb> <2e9b> +<57bc> <57bd> <2ea8> +<57be> <57c0> <2eab> +<57c1> <57c4> <2eaf> +<57c5> <57c6> <2eb4> +<57c7> <57c9> <2eb8> +<57ca> <57d7> <2ebc> +<57d8> <57ff> <2ecb> +<5801> <5847> <3400> +<5848> <5872> <3448> +<5873> <58ff> <3474> +<5900> <599c> <3501> +<599d> <59ff> <359f> +<5a00> <5a0b> <3602> +<5a0c> <5a16> <360f> +<5a17> <5aff> <361b> +<5b00> <5bff> <3704> +<5c00> <5cff> <3804> +<5d00> <5d13> <3904> +<5d14> <5d68> <3919> +<5d69> <5dc8> <396f> +<5dc9> <5dd6> <39d1> +<5dd7> <5dff> <39e0> +<5e00> <5e69> <3a09> +<5e6a> <5eff> <3a74> +<5f00> <5f43> <3b0a> +<5f44> <5fff> <3b4f> +<6000> <6062> <3c0b> +<6063> <60d3> <3c6f> +<60d4> <60ff> <3ce1> +<6100> <61ff> <3d0d> +<6200> <62ff> <3e0d> +<6300> <63ff> <3f0d> +<6400> <6448> <400d> +<6449> <64ff> <4057> +<6500> <6550> <410e> +<6551> <65ff> <4160> +<6600> <66ff> <420f> +<6700> <6727> <430f> +<6728> <679b> <4338> +<679c> <679f> <43ad> +<67a0> <67ca> <43b2> +<67cb> <67ff> <43de> +<6800> <68c2> <4413> +<68c3> <68ff> <44d7> +<6900> <69ff> <4514> +<6a00> <6a37> <4614> +<6a38> <6a4b> <464d> +<6a4c> <6aff> <4662> +<6b00> <6b0c> <4716> +<6b0d> <6b11> <4724> +<6b12> <6b63> <472a> +<6b64> <6b73> <477d> +<6b74> <6bff> <478e> +<6c00> <6cff> <481a> +<6d00> <6d2c> <491a> +<6d2d> <6d5e> <4948> +<6d5f> <6d60> <497b> +<6d61> <6d64> <497e> +endbfrange + +19 beginbfrange +<6d66> <6d79> <4987> +<6d7a> <6d7c> <499c> +<6d7d> <6d92> <49a0> +<6d93> <6dff> <49b8> +<6e00> <6eff> <4a25> +<6f00> <6fff> <4b25> +<7000> <7051> <4c25> +<7052> <7078> <4c78> +<7079> <70e7> <4ca4> +<70e8> <70ff> <4d1a> +<7100> <717b> <4d32> +<717c> <7182> <4daf> +<7188> <71ff> +<7200> <72ff> +<7300> <73ff> +<7400> <74ff> +<7500> <75ff> +<7600> <7614> +<7615> <764b> +endbfrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-0 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-0 new file mode 100644 index 00000000000..a7f08bbd7f0 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-0 @@ -0,0 +1,113 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 0 def +end def + +/CMapName /Adobe-Japan1-0 def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 480 def +/XUID [1 10 25358] def + +/WMode 0 def + +/CIDCount 8284 def + +1 begincodespacerange + <0000> <20FF> +endcodespacerange + +33 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <205b> 8192 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-1 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-1 new file mode 100644 index 00000000000..1719256c751 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-1 @@ -0,0 +1,113 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /Adobe-Japan1-1 def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 1030 def +/XUID [1 10 25530] def + +/WMode 0 def + +/CIDCount 8359 def + +1 begincodespacerange + <0000> <20FF> +endcodespacerange + +33 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20a6> 8192 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-2 new file mode 100644 index 00000000000..f7a14e6cc34 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-2 @@ -0,0 +1,115 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /Adobe-Japan1-2 def +/CMapVersion 11.003 def +/CMapType 1 def + +/UIDOffset 1065 def +/XUID [1 10 25531] def + +/WMode 0 def + +/CIDCount 8720 def + +1 begincodespacerange + <0000> <22FF> +endcodespacerange + +35 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <220f> 8704 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-3 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-3 new file mode 100644 index 00000000000..d315f7f7517 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-3 @@ -0,0 +1,116 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 3) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 3 def +end def + +/CMapName /Adobe-Japan1-3 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25534] def + +/WMode 0 def + +/CIDCount 9354 def + +1 begincodespacerange + <0000> <24FF> +endcodespacerange + +37 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <2489> 9216 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-4 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-4 new file mode 100644 index 00000000000..2bd49735eda --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-4 @@ -0,0 +1,140 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 4) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 4 def +end def + +/CMapName /Adobe-Japan1-4 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25537] def + +/WMode 0 def + +/CIDCount 15444 def + +1 begincodespacerange + <0000> <3CFF> +endcodespacerange + +61 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3c53> 15360 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-5 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-5 new file mode 100644 index 00000000000..8197ed12b01 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-5 @@ -0,0 +1,159 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 5) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 5 def +end def + +/CMapName /Adobe-Japan1-5 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25613] def + +/WMode 0 def + +/CIDCount 20317 def + +1 begincodespacerange + <0000> <4FFF> +endcodespacerange + +80 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4aff> 18944 +<4b00> <4bff> 19200 +<4c00> <4cff> 19456 +<4d00> <4dff> 19712 +<4e00> <4eff> 19968 +<4f00> <4f5c> 20224 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-6 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-6 new file mode 100644 index 00000000000..de12bccb9d4 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-6 @@ -0,0 +1,170 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan1 6) +%%Version: 1.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 6 def +end def + +/CMapName /Adobe-Japan1-6 def +/CMapVersion 1.003 def +/CMapType 1 def + +/XUID [1 10 25614] def + +/WMode 0 def + +/CIDCount 23058 def + +1 begincodespacerange + <0000> <5AFF> +endcodespacerange + +91 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47ff> 18176 +<4800> <48ff> 18432 +<4900> <49ff> 18688 +<4a00> <4aff> 18944 +<4b00> <4bff> 19200 +<4c00> <4cff> 19456 +<4d00> <4dff> 19712 +<4e00> <4eff> 19968 +<4f00> <4fff> 20224 +<5000> <50ff> 20480 +<5100> <51ff> 20736 +<5200> <52ff> 20992 +<5300> <53ff> 21248 +<5400> <54ff> 21504 +<5500> <55ff> 21760 +<5600> <56ff> 22016 +<5700> <57ff> 22272 +<5800> <58ff> 22528 +<5900> <59ff> 22784 +<5a00> <5a11> 23040 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-UCS2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-UCS2 new file mode 100644 index 00000000000..58a0b577f64 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan1-UCS2 @@ -0,0 +1,19159 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Adobe-Japan1-UCS2) +%%Title: (Adobe-Japan1-UCS2 Adobe Japan1 6) +%%Version: 8.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Adobe_Japan1_UCS2) def + /Supplement 6 def +end def + +/CMapName /Adobe-Japan1-UCS2 def +/CMapVersion 8.002 def +/CMapType 2 def + +/XUID [1 10 25335 1212] def + +/WMode 0 def + +1 begincodespacerange + <0000> +endcodespacerange + +100 beginbfchar +<0000> +<003d> <00a5> +<005d> <00a6> +<005e> <007d> +<005f> <0303> +<0060> <2019> +<0061> <005c> +<0062> <2018> +<0063> <007c> +<0064> <007e> +<0068> <2044> +<0069> <0192> +<006a> <00a7> +<006b> <00a4> +<006c> <201c> +<006d> <00ab> +<0072> <2012> +<0075> <00b7> +<0076> <00b6> +<0077> <2022> +<0078> <201a> +<0079> <201e> +<007a> <201d> +<007b> <00bb> +<007c> <2026> +<007d> <2030> +<007e> <00bf> +<0081> <00af> +<0085> <030a> +<0086> <00b8> +<0087> <030b> +<0088> <0328> +<0089> <030c> +<008a> <0336> +<008b> <00c6> +<008c> <00aa> +<008d> <0141> +<008e> <00d8> +<008f> <0152> +<0090> <00ba> +<0091> <00e6> +<0092> <0131> +<0093> <0142> +<0094> <00f8> +<0095> <0153> +<0096> <00df> +<0097> <002d> +<0098> <00a9> +<0099> <00ac> +<009a> <00ae> +<009f> <00b5> +<00a0> <00b9> +<00df> <0160> +<00e0> <0178> +<00e1> <017d> +<00e2> <0305> +<00e3> <0161> +<00e4> <2122> +<00e5> <017e> +<00e6> <0030> +<0123> <00a5> +<0145> <203e> +<0186> +<0189> <30ee> +<018a> <30ab> +<018b> <30b1> +<018c> <30f4> +<018d> <30ac> +<018e> <30ae> +<018f> <30b0> +<0190> <30b2> +<0191> <30b4> +<0192> <30b6> +<0193> <30b8> +<0194> <30ba> +<0195> <30bc> +<0196> <30be> +<0197> <30c0> +<0198> <30c2> +<0199> <30c5> +<019a> <30c7> +<019b> <30c9> +<01a6> +<01f5> <2032> +<01f6> <00a8> +<01f7> <2036> +<01f8> <005b> +<01f9> <005d> +<0202> <2012> +<0203> +<0204> <3092> +<0205> <3041> +<0206> <3043> +<0207> <3045> +<0208> <3047> +<0209> <3049> +<020a> <3083> +<020b> <3085> +<020c> <3087> +<020d> <3063> +endbfchar + +100 beginbfchar +<020e> <3042> +<020f> <3044> +<0210> <3046> +<0211> <3048> +<0214> <304d> +<0215> <304f> +<0216> <3051> +<0217> <3053> +<0218> <3055> +<0219> <3057> +<021a> <3059> +<021b> <305b> +<021c> <305d> +<021d> <305f> +<021e> <3061> +<021f> <3064> +<0220> <3066> +<0221> <3068> +<0228> <3072> +<0229> <3075> +<022a> <3078> +<022b> <307b> +<0231> <3084> +<0232> <3086> +<0239> <308f> +<023a> <3093> +<023d> <308e> +<023e> <304c> +<023f> <304e> +<0240> <3050> +<0241> <3052> +<0242> <3054> +<0243> <3056> +<0244> <3068> +<0245> <305a> +<0246> <305c> +<0247> <305e> +<0248> <3060> +<0249> <3062> +<024a> <3065> +<024b> <3067> +<024c> <3069> +<0257> <00c4> +<0258> <00f9> +<0259> <00e9> +<025a> <00ed> +<025b> <00df> +<025c> <00e7> +<025d> <00c7> +<025e> <00d1> +<025f> <00f1> +<0262> <00f3> +<0263> <00fa> +<0264> <00a1> +<0265> <00bf> +<0266> <00bd> +<0267> <00d6> +<0268> <00dc> +<0269> <00e4> +<026a> <00eb> +<026b> <00ef> +<026c> <00f6> +<026d> <00dc> +<026e> <00e2> +<026f> <00ea> +<0270> <00ee> +<0271> <00f4> +<0272> <00fc> +<0273> <00e0> +<0274> <00e9> +<0275> <25b2> +<0276> <00e1> +<0277> <007e> +<0278> <0030> +<027c> +<027d> +<027e> <30fb> +<0281> +<0282> +<0285> <00b4> +<0286> +<0287> <00a8> +<0288> +<0289> <203e> +<028a> +<028f> <3003> +<0290> <4edd> +<0294> <30fc> +<0295> <2015> +<0296> <2010> +<0297> +<0298> +<0299> +<029a> <2016> +<029b> +<029c> <2026> +<029d> <2025> +<02a6> +<02a7> +<02a8> +endbfchar + +100 beginbfchar +<02a9> +<02b4> +<02b5> +<02b6> <00b1> +<02b7> <00d7> +<02b8> <00f7> +<02b9> +<02ba> <2260> +<02bb> +<02bc> +<02bf> <221e> +<02c0> <2234> +<02c1> <2642> +<02c2> <2640> +<02c3> <00b0> +<02c6> <2103> +<02c7> +<02c8> +<02cb> +<02cc> +<02cd> +<02ce> +<02cf> +<02d0> <00a7> +<02d1> <2606> +<02d2> <2605> +<02d3> <25cb> +<02d4> <25cf> +<02d5> <25ce> +<02d6> <25c7> +<02d7> <25c6> +<02d8> <25a1> +<02d9> <25a0> +<02da> <25b3> +<02db> <25b2> +<02dc> <25bd> +<02dd> <25bc> +<02de> <203b> +<02df> <3012> +<02e0> <2192> +<02e3> <2193> +<02e4> <3013> +<02e5> <2208> +<02e6> <220b> +<02eb> <222a> +<02ec> <2229> +<02ef> <00ac> +<02f0> <21d2> +<02f1> <21d4> +<02f2> <2200> +<02f3> <2203> +<02f4> <2220> +<02f5> <22a5> +<02f6> <2312> +<02f7> <2202> +<02f8> <2207> +<02f9> <2261> +<02fa> <2252> +<02fd> <221a> +<02fe> <223d> +<02ff> <221d> +<0300> <2235> +<0303> <212b> +<0304> <2030> +<0305> <266f> +<0306> <266d> +<0307> <266a> +<030a> <00b6> +<030b> <25ef> +<0429> <0401> +<044a> <0451> +<0465> <4e9c> +<0466> <5516> +<0467> <5a03> +<0468> <963f> +<0469> <54c0> +<046a> <611b> +<046b> <6328> +<046c> <59f6> +<046d> <9022> +<046e> <8475> +<046f> <831c> +<0470> <7a50> +<0471> <60aa> +<0472> <63e1> +<0473> <6e25> +<0474> <65ed> +<0475> <8466> +<0476> <82a6> +<0477> <9bf5> +<0478> <6893> +<0479> <5727> +<047a> <65a1> +<047b> <6271> +<047c> <5b9b> +<047d> <59d0> +<047e> <867b> +<047f> <98f4> +<0480> <7d62> +<0481> <7dbe> +endbfchar + +100 beginbfchar +<0482> <9b8e> +<0483> <6216> +<0484> <7c9f> +<0485> <88b7> +<0486> <5b89> +<0487> <5eb5> +<0488> <6309> +<0489> <6697> +<048a> <6848> +<048b> <95c7> +<048c> <978d> +<048d> <674f> +<048e> <4ee5> +<048f> <4f0a> +<0490> <4f4d> +<0491> <4f9d> +<0492> <5049> +<0493> <56f2> +<0494> <5937> +<0495> <59d4> +<0496> <5a01> +<0497> <5c09> +<0498> <60df> +<0499> <610f> +<049a> <6170> +<049b> <6613> +<049c> <6905> +<049d> <70ba> +<049e> <754f> +<049f> <7570> +<04a0> <79fb> +<04a1> <7dad> +<04a2> <7def> +<04a3> <80c3> +<04a4> <840e> +<04a5> <8863> +<04a6> <8b02> +<04a7> <9055> +<04a8> <907a> +<04a9> <533b> +<04aa> <4e95> +<04ab> <4ea5> +<04ac> <57df> +<04ad> <80b2> +<04ae> <90c1> +<04af> <78ef> +<04b0> <4e00> +<04b1> <58f1> +<04b2> <6ea2> +<04b3> <9038> +<04b4> <7a32> +<04b5> <8328> +<04b6> <828b> +<04b7> <9c2f> +<04b8> <5141> +<04b9> <5370> +<04ba> <54bd> +<04bb> <54e1> +<04bc> <56e0> +<04bd> <59fb> +<04be> <5f15> +<04bf> <98f2> +<04c0> <6deb> +<04c1> <80e4> +<04c2> <852d> +<04c3> <9662> +<04c4> <9670> +<04c5> <96a0> +<04c6> <97fb> +<04c7> <540b> +<04c8> <53f3> +<04c9> <5b87> +<04ca> <70cf> +<04cb> <7fbd> +<04cc> <8fc2> +<04cd> <96e8> +<04ce> <536f> +<04cf> <9d5c> +<04d0> <7aba> +<04d1> <4e11> +<04d2> <7893> +<04d3> <81fc> +<04d4> <6e26> +<04d5> <5618> +<04d6> <5504> +<04d7> <6b1d> +<04d8> <851a> +<04d9> <9c3b> +<04da> <59e5> +<04db> <53a9> +<04dc> <6d66> +<04dd> <74dc> +<04de> <958f> +<04df> <5642> +<04e0> <4e91> +<04e1> <904b> +<04e2> <96f2> +<04e3> <834f> +<04e4> <990c> +<04e5> <53e1> +endbfchar + +100 beginbfchar +<04e6> <55b6> +<04e7> <5b30> +<04e8> <5f71> +<04e9> <6620> +<04ea> <66f3> +<04eb> <6804> +<04ec> <6c38> +<04ed> <6cf3> +<04ee> <6d29> +<04ef> <745b> +<04f0> <76c8> +<04f1> <7a4e> +<04f2> <9834> +<04f3> <82f1> +<04f4> <885b> +<04f5> <8a60> +<04f6> <92ed> +<04f7> <6db2> +<04f8> <75ab> +<04f9> <76ca> +<04fa> <99c5> +<04fb> <60a6> +<04fc> <8b01> +<04fd> <8d8a> +<04fe> <95b2> +<04ff> <698e> +<0500> <53ad> +<0501> <5186> +<0502> <5712> +<0503> <5830> +<0504> <5944> +<0505> <5bb4> +<0506> <5ef6> +<0507> <6028> +<0508> <63a9> +<0509> <63f4> +<050a> <6cbf> +<050b> <6f14> +<050c> <708e> +<050d> <7114> +<050e> <7159> +<050f> <71d5> +<0510> <733f> +<0511> <7e01> +<0512> <8276> +<0513> <82d1> +<0514> <8597> +<0515> <9060> +<0516> <925b> +<0517> <9d1b> +<0518> <5869> +<0519> <65bc> +<051a> <6c5a> +<051b> <7525> +<051c> <51f9> +<051d> <592e> +<051e> <5965> +<051f> <5f80> +<0520> <5fdc> +<0521> <62bc> +<0522> <65fa> +<0523> <6a2a> +<0524> <6b27> +<0525> <6bb4> +<0526> <738b> +<0527> <7fc1> +<0528> <8956> +<0529> <9d2c> +<052a> <9d0e> +<052b> <9ec4> +<052c> <5ca1> +<052d> <6c96> +<052e> <837b> +<052f> <5104> +<0530> <5c4b> +<0531> <61b6> +<0532> <81c6> +<0533> <6876> +<0534> <7261> +<0535> <4e59> +<0536> <4ffa> +<0537> <5378> +<0538> <6069> +<0539> <6e29> +<053a> <7a4f> +<053b> <97f3> +<053c> <4e0b> +<053d> <5316> +<053e> <4eee> +<053f> <4f55> +<0540> <4f3d> +<0541> <4fa1> +<0542> <4f73> +<0543> <52a0> +<0544> <53ef> +<0545> <5609> +<0546> <590f> +<0547> <5ac1> +<0548> <5bb6> +<0549> <5be1> +endbfchar + +100 beginbfchar +<054a> <79d1> +<054b> <6687> +<054c> <679c> +<054d> <67b6> +<054e> <6b4c> +<054f> <6cb3> +<0550> <706b> +<0551> <73c2> +<0552> <798d> +<0553> <79be> +<0554> <7a3c> +<0555> <7b87> +<0556> <82b1> +<0557> <82db> +<0558> <8304> +<0559> <8377> +<055a> <83ef> +<055b> <83d3> +<055c> <8766> +<055d> <8ab2> +<055e> <5629> +<055f> <8ca8> +<0560> <8fe6> +<0561> <904e> +<0562> <971e> +<0563> <868a> +<0564> <4fc4> +<0565> <5ce8> +<0566> <6211> +<0567> <7259> +<0568> <753b> +<0569> <81e5> +<056a> <82bd> +<056b> <86fe> +<056c> <8cc0> +<056d> <96c5> +<056e> <9913> +<056f> <99d5> +<0570> <4ecb> +<0571> <4f1a> +<0572> <89e3> +<0573> <56de> +<0574> <584a> +<0575> <58ca> +<0576> <5efb> +<0577> <5feb> +<0578> <602a> +<0579> <6094> +<057a> <6062> +<057b> <61d0> +<057c> <6212> +<057d> <62d0> +<057e> <6539> +<057f> <9b41> +<0580> <6666> +<0581> <68b0> +<0582> <6d77> +<0583> <7070> +<0584> <754c> +<0585> <7686> +<0586> <7d75> +<0587> <82a5> +<0588> <87f9> +<0589> <958b> +<058a> <968e> +<058b> <8c9d> +<058c> <51f1> +<058d> <52be> +<058e> <5916> +<058f> <54b3> +<0590> <5bb3> +<0591> <5d16> +<0592> <6168> +<0593> <6982> +<0594> <6daf> +<0595> <788d> +<0596> <84cb> +<0597> <8857> +<0598> <8a72> +<0599> <93a7> +<059a> <9ab8> +<059b> <6d6c> +<059c> <99a8> +<059d> <86d9> +<059e> <57a3> +<059f> <67ff> +<05a0> <86ce> +<05a1> <920e> +<05a2> <5283> +<05a3> <5687> +<05a4> <5404> +<05a5> <5ed3> +<05a6> <62e1> +<05a7> <64b9> +<05a8> <683c> +<05a9> <6838> +<05aa> <6bbb> +<05ab> <7372> +<05ac> <78ba> +<05ad> <7a6b> +endbfchar + +100 beginbfchar +<05ae> <899a> +<05af> <89d2> +<05b0> <8d6b> +<05b1> <8f03> +<05b2> <90ed> +<05b3> <95a3> +<05b4> <9694> +<05b5> <9769> +<05b6> <5b66> +<05b7> <5cb3> +<05b8> <697d> +<05bb> <639b> +<05bc> <7b20> +<05bd> <6a2b> +<05be> <6a7f> +<05bf> <68b6> +<05c0> <9c0d> +<05c1> <6f5f> +<05c2> <5272> +<05c3> <559d> +<05c4> <6070> +<05c5> <62ec> +<05c6> <6d3b> +<05c7> <6e07> +<05c8> <6ed1> +<05c9> <845b> +<05ca> <8910> +<05cb> <8f44> +<05cc> <4e14> +<05cd> <9c39> +<05ce> <53f6> +<05cf> <691b> +<05d0> <6a3a> +<05d1> <9784> +<05d2> <682a> +<05d3> <515c> +<05d4> <7ac3> +<05d5> <84b2> +<05d6> <91dc> +<05d7> <938c> +<05d8> <565b> +<05d9> <9d28> +<05da> <6822> +<05db> <8305> +<05dc> <8431> +<05dd> <7ca5> +<05de> <5208> +<05df> <82c5> +<05e0> <74e6> +<05e1> <4e7e> +<05e2> <4f83> +<05e3> <51a0> +<05e4> <5bd2> +<05e5> <520a> +<05e6> <52d8> +<05e7> <52e7> +<05e8> <5dfb> +<05e9> <559a> +<05ea> <582a> +<05eb> <59e6> +<05ec> <5b8c> +<05ed> <5b98> +<05ee> <5bdb> +<05ef> <5e72> +<05f0> <5e79> +<05f1> <60a3> +<05f2> <611f> +<05f3> <6163> +<05f4> <61be> +<05f5> <63db> +<05f6> <6562> +<05f7> <67d1> +<05f8> <6853> +<05f9> <68fa> +<05fa> <6b3e> +<05fb> <6b53> +<05fc> <6c57> +<05fd> <6f22> +<05fe> <6f97> +<05ff> <6f45> +<0600> <74b0> +<0601> <7518> +<0602> <76e3> +<0603> <770b> +<0604> <7aff> +<0605> <7ba1> +<0606> <7c21> +<0607> <7de9> +<0608> <7f36> +<0609> <7ff0> +<060a> <809d> +<060b> <8266> +<060c> <839e> +<060d> <89b3> +<060e> <8acc> +<060f> <8cab> +<0610> <9084> +<0611> <9451> +<0612> <9593> +<0613> <9591> +endbfchar + +100 beginbfchar +<0614> <95a2> +<0615> <9665> +<0616> <97d3> +<0617> <9928> +<0618> <8218> +<0619> <4e38> +<061a> <542b> +<061b> <5cb8> +<061c> <5dcc> +<061d> <73a9> +<061e> <764c> +<061f> <773c> +<0620> <5ca9> +<0621> <7feb> +<0622> <8d0b> +<0623> <96c1> +<0624> <9811> +<0625> <9854> +<0626> <9858> +<0627> <4f01> +<0628> <4f0e> +<0629> <5371> +<062a> <559c> +<062b> <5668> +<062c> <57fa> +<062d> <5947> +<062e> <5b09> +<062f> <5bc4> +<0630> <5c90> +<0631> <5e0c> +<0632> <5e7e> +<0633> <5fcc> +<0634> <63ee> +<0635> <673a> +<0636> <65d7> +<0637> <65e2> +<0638> <671f> +<0639> <68cb> +<063a> <68c4> +<063b> <6a5f> +<063c> <5e30> +<063d> <6bc5> +<063e> <6c17> +<063f> <6c7d> +<0640> <757f> +<0641> <7948> +<0642> <5b63> +<0643> <7a00> +<0644> <7d00> +<0645> <5fbd> +<0646> <898f> +<0647> <8a18> +<0648> <8cb4> +<0649> <8d77> +<064a> <8ecc> +<064b> <8f1d> +<064c> <98e2> +<064d> <9a0e> +<064e> <9b3c> +<064f> <4e80> +<0650> <507d> +<0651> <5100> +<0652> <5993> +<0653> <5b9c> +<0654> <622f> +<0655> <6280> +<0656> <64ec> +<0657> <6b3a> +<0658> <72a0> +<0659> <7591> +<065a> <7947> +<065b> <7fa9> +<065c> <87fb> +<065d> <8abc> +<065e> <8b70> +<065f> <63ac> +<0660> <83ca> +<0661> <97a0> +<0662> <5409> +<0663> <5403> +<0664> <55ab> +<0665> <6854> +<0666> <6a58> +<0667> <8a70> +<0668> <7827> +<0669> <6775> +<066a> <9ecd> +<066b> <5374> +<066c> <5ba2> +<066d> <811a> +<066e> <8650> +<066f> <9006> +<0670> <4e18> +<0671> <4e45> +<0672> <4ec7> +<0673> <4f11> +<0674> <53ca> +<0675> <5438> +<0676> <5bae> +<0677> <5f13> +endbfchar + +100 beginbfchar +<0678> <6025> +<0679> <6551> +<067a> <673d> +<067b> <6c42> +<067c> <6c72> +<067d> <6ce3> +<067e> <7078> +<067f> <7403> +<0680> <7a76> +<0681> <7aae> +<0682> <7b08> +<0683> <7d1a> +<0684> <7cfe> +<0685> <7d66> +<0686> <65e7> +<0687> <725b> +<0688> <53bb> +<0689> <5c45> +<068a> <5de8> +<068b> <62d2> +<068c> <62e0> +<068d> <6319> +<068e> <6e20> +<068f> <865a> +<0690> <8a31> +<0691> <8ddd> +<0692> <92f8> +<0693> <6f01> +<0694> <79a6> +<0695> <9b5a> +<0696> <4ea8> +<0699> <4f9b> +<069a> <4fa0> +<069b> <50d1> +<069c> <5147> +<069d> <7af6> +<069e> <5171> +<069f> <51f6> +<06a0> <5354> +<06a1> <5321> +<06a2> <537f> +<06a3> <53eb> +<06a4> <55ac> +<06a5> <5883> +<06a6> <5ce1> +<06a7> <5f37> +<06a8> <5f4a> +<06a9> <602f> +<06aa> <6050> +<06ab> <606d> +<06ac> <631f> +<06ad> <6559> +<06ae> <6a4b> +<06af> <6cc1> +<06b0> <72c2> +<06b1> <72ed> +<06b2> <77ef> +<06b3> <80f8> +<06b4> <8105> +<06b5> <8208> +<06b6> <854e> +<06b7> <90f7> +<06b8> <93e1> +<06b9> <97ff> +<06ba> <9957> +<06bb> <9a5a> +<06bc> <4ef0> +<06bd> <51dd> +<06be> <5c2d> +<06bf> <6681> +<06c0> <696d> +<06c1> <5c40> +<06c2> <66f2> +<06c3> <6975> +<06c4> <7389> +<06c5> <6850> +<06c6> <7c81> +<06c7> <50c5> +<06c8> <52e4> +<06c9> <5747> +<06ca> <5dfe> +<06cb> <9326> +<06cc> <65a4> +<06cd> <6b23> +<06ce> <6b3d> +<06cf> <7434> +<06d0> <7981> +<06d1> <79bd> +<06d2> <7b4b> +<06d3> <7dca> +<06d4> <82b9> +<06d5> <83cc> +<06d6> <887f> +<06d7> <895f> +<06d8> <8b39> +<06d9> <8fd1> +<06da> <91d1> +<06db> <541f> +<06dc> <9280> +<06dd> <4e5d> +endbfchar + +100 beginbfchar +<06de> <5036> +<06df> <53e5> +<06e0> <533a> +<06e1> <72d7> +<06e2> <7396> +<06e3> <77e9> +<06e4> <82e6> +<06e5> <8eaf> +<06e6> <99c6> +<06e7> <99c8> +<06e8> <99d2> +<06e9> <5177> +<06ea> <611a> +<06eb> <865e> +<06ec> <55b0> +<06ed> <7a7a> +<06ee> <5076> +<06ef> <5bd3> +<06f0> <9047> +<06f1> <9685> +<06f2> <4e32> +<06f3> <6adb> +<06f4> <91e7> +<06f5> <5c51> +<06f6> <5c48> +<06f7> <6398> +<06f8> <7a9f> +<06f9> <6c93> +<06fa> <9774> +<06fb> <8f61> +<06fc> <7aaa> +<06fd> <718a> +<06fe> <9688> +<06ff> <7c82> +<0700> <6817> +<0701> <7e70> +<0702> <6851> +<0703> <936c> +<0704> <52f2> +<0705> <541b> +<0706> <85ab> +<0707> <8a13> +<0708> <7fa4> +<0709> <8ecd> +<070a> <90e1> +<070b> <5366> +<070c> <8888> +<070d> <7941> +<070e> <4fc2> +<070f> <50be> +<0710> <5211> +<0711> <5144> +<0712> <5553> +<0713> <572d> +<0714> <73ea> +<0715> <578b> +<0716> <5951> +<0717> <5f62> +<0718> <5f84> +<0719> <6075> +<071a> <6176> +<071b> <6167> +<071c> <61a9> +<071d> <63b2> +<071e> <643a> +<071f> <656c> +<0720> <666f> +<0721> <6842> +<0722> <6e13> +<0723> <7566> +<0724> <7a3d> +<0725> <7cfb> +<0726> <7d4c> +<0727> <7d99> +<0728> <7e4b> +<0729> <7f6b> +<072a> <830e> +<072b> <834a> +<072c> <86cd> +<072d> <8a08> +<072e> <8a63> +<072f> <8b66> +<0730> <8efd> +<0731> <981a> +<0732> <9d8f> +<0733> <82b8> +<0734> <8fce> +<0735> <9be8> +<0736> <5287> +<0737> <621f> +<0738> <6483> +<0739> <6fc0> +<073a> <9699> +<073b> <6841> +<073c> <5091> +<073d> <6b20> +<073e> <6c7a> +<073f> <6f54> +<0740> <7a74> +<0741> <7d50> +endbfchar + +100 beginbfchar +<0742> <8840> +<0743> <8a23> +<0744> <6708> +<0745> <4ef6> +<0746> <5039> +<0747> <5026> +<0748> <5065> +<0749> <517c> +<074a> <5238> +<074b> <5263> +<074c> <55a7> +<074d> <570f> +<074e> <5805> +<074f> <5acc> +<0750> <5efa> +<0751> <61b2> +<0752> <61f8> +<0753> <62f3> +<0754> <6372> +<0755> <691c> +<0756> <6a29> +<0757> <727d> +<0758> <72ac> +<0759> <732e> +<075a> <7814> +<075b> <786f> +<075c> <7d79> +<075d> <770c> +<075e> <80a9> +<075f> <898b> +<0760> <8b19> +<0761> <8ce2> +<0762> <8ed2> +<0763> <9063> +<0764> <9375> +<0765> <967a> +<0766> <9855> +<0767> <9a13> +<0768> <9e78> +<0769> <5143> +<076a> <539f> +<076b> <53b3> +<076c> <5e7b> +<076d> <5f26> +<076e> <6e1b> +<076f> <6e90> +<0770> <7384> +<0771> <73fe> +<0772> <7d43> +<0773> <8237> +<0774> <8a00> +<0775> <8afa> +<0776> <9650> +<0777> <4e4e> +<0778> <500b> +<0779> <53e4> +<077a> <547c> +<077b> <56fa> +<077c> <59d1> +<077d> <5b64> +<077e> <5df1> +<077f> <5eab> +<0780> <5f27> +<0781> <6238> +<0782> <6545> +<0783> <67af> +<0784> <6e56> +<0785> <72d0> +<0786> <7cca> +<0787> <88b4> +<0788> <80a1> +<0789> <80e1> +<078a> <83f0> +<078b> <864e> +<078c> <8a87> +<078d> <8de8> +<078e> <9237> +<078f> <96c7> +<0790> <9867> +<0791> <9f13> +<0792> <4e94> +<0793> <4e92> +<0794> <4f0d> +<0795> <5348> +<0796> <5449> +<0797> <543e> +<0798> <5a2f> +<0799> <5f8c> +<079a> <5fa1> +<079b> <609f> +<079c> <68a7> +<079d> <6a8e> +<079e> <745a> +<079f> <7881> +<07a0> <8a9e> +<07a1> <8aa4> +<07a2> <8b77> +<07a3> <9190> +<07a4> <4e5e> +<07a5> <9bc9> +endbfchar + +100 beginbfchar +<07a6> <4ea4> +<07a7> <4f7c> +<07a8> <4faf> +<07a9> <5019> +<07aa> <5016> +<07ab> <5149> +<07ac> <516c> +<07ad> <529f> +<07ae> <52b9> +<07af> <52fe> +<07b0> <539a> +<07b1> <53e3> +<07b2> <5411> +<07b3> <540e> +<07b4> <5589> +<07b5> <5751> +<07b6> <57a2> +<07b7> <597d> +<07b8> <5b54> +<07b9> <5b5d> +<07ba> <5b8f> +<07bb> <5de5> +<07bc> <5de7> +<07bd> <5df7> +<07be> <5e78> +<07bf> <5e83> +<07c0> <5e9a> +<07c1> <5eb7> +<07c2> <5f18> +<07c3> <6052> +<07c4> <614c> +<07c5> <6297> +<07c6> <62d8> +<07c7> <63a7> +<07c8> <653b> +<07c9> <6602> +<07ca> <6643> +<07cb> <66f4> +<07cc> <676d> +<07cd> <6821> +<07ce> <6897> +<07cf> <69cb> +<07d0> <6c5f> +<07d1> <6d2a> +<07d2> <6d69> +<07d3> <6e2f> +<07d4> <6e9d> +<07d5> <7532> +<07d6> <7687> +<07d7> <786c> +<07d8> <7a3f> +<07d9> <7ce0> +<07da> <7d05> +<07db> <7d18> +<07dc> <7d5e> +<07dd> <7db1> +<07de> <8015> +<07df> <8003> +<07e0> <80af> +<07e1> <80b1> +<07e2> <8154> +<07e3> <818f> +<07e4> <822a> +<07e5> <8352> +<07e6> <884c> +<07e7> <8861> +<07e8> <8b1b> +<07e9> <8ca2> +<07ea> <8cfc> +<07eb> <90ca> +<07ec> <9175> +<07ed> <9271> +<07ee> <783f> +<07ef> <92fc> +<07f0> <95a4> +<07f1> <964d> +<07f2> <9805> +<07f3> <9999> +<07f4> <9ad8> +<07f5> <9d3b> +<07f6> <525b> +<07f7> <52ab> +<07f8> <53f7> +<07f9> <5408> +<07fa> <58d5> +<07fb> <62f7> +<07fc> <6fe0> +<07fd> <8c6a> +<07fe> <8f5f> +<07ff> <9eb9> +<0800> <514b> +<0801> <523b> +<0802> <544a> +<0803> <56fd> +<0804> <7a40> +<0805> <9177> +<0806> <9d60> +<0807> <9ed2> +<0808> <7344> +<0809> <6f09> +endbfchar + +100 beginbfchar +<080a> <8170> +<080b> <7511> +<080c> <5ffd> +<080d> <60da> +<080e> <9aa8> +<080f> <72db> +<0810> <8fbc> +<0811> <6b64> +<0812> <9803> +<0813> <4eca> +<0814> <56f0> +<0815> <5764> +<0816> <58be> +<0817> <5a5a> +<0818> <6068> +<0819> <61c7> +<081a> <660f> +<081b> <6606> +<081c> <6839> +<081d> <68b1> +<081e> <6df7> +<081f> <75d5> +<0820> <7d3a> +<0821> <826e> +<0822> <9b42> +<0823> <4e9b> +<0824> <4f50> +<0825> <53c9> +<0826> <5506> +<0827> <5d6f> +<0828> <5de6> +<0829> <5dee> +<082a> <67fb> +<082b> <6c99> +<082c> <7473> +<082d> <7802> +<082e> <8a50> +<082f> <9396> +<0830> <88df> +<0831> <5750> +<0832> <5ea7> +<0833> <632b> +<0834> <50b5> +<0835> <50ac> +<0836> <518d> +<0837> <6700> +<0838> <54c9> +<0839> <585e> +<083a> <59bb> +<083b> <5bb0> +<083c> <5f69> +<083d> <624d> +<083e> <63a1> +<083f> <683d> +<0840> <6b73> +<0841> <6e08> +<0842> <707d> +<0843> <91c7> +<0844> <7280> +<0845> <7815> +<0846> <7826> +<0847> <796d> +<0848> <658e> +<0849> <7d30> +<084a> <83dc> +<084b> <88c1> +<084c> <8f09> +<084d> <969b> +<084e> <5264> +<084f> <5728> +<0850> <6750> +<0851> <7f6a> +<0852> <8ca1> +<0853> <51b4> +<0854> <5742> +<0855> <962a> +<0856> <583a> +<0857> <698a> +<0858> <80b4> +<0859> <54b2> +<085a> <5d0e> +<085b> <57fc> +<085c> <7895> +<085d> <9dfa> +<085e> <4f5c> +<085f> <524a> +<0860> <548b> +<0861> <643e> +<0862> <6628> +<0863> <6714> +<0864> <67f5> +<0865> <7a84> +<0866> <7b56> +<0867> <7d22> +<0868> <932f> +<0869> <685c> +<086a> <9bad> +<086b> <7b39> +<086c> <5319> +<086d> <518a> +endbfchar + +100 beginbfchar +<086e> <5237> +<086f> <5bdf> +<0870> <62f6> +<0871> <64ae> +<0872> <64e6> +<0873> <672d> +<0874> <6bba> +<0875> <85a9> +<0876> <96d1> +<0877> <7690> +<0878> <9bd6> +<0879> <634c> +<087a> <9306> +<087b> <9bab> +<087c> <76bf> +<087d> <6652> +<087e> <4e09> +<087f> <5098> +<0880> <53c2> +<0881> <5c71> +<0882> <60e8> +<0883> <6492> +<0884> <6563> +<0885> <685f> +<0886> <71e6> +<0887> <73ca> +<0888> <7523> +<0889> <7b97> +<088a> <7e82> +<088b> <8695> +<088c> <8b83> +<088d> <8cdb> +<088e> <9178> +<088f> <9910> +<0890> <65ac> +<0891> <66ab> +<0892> <6b8b> +<0893> <4ed5> +<0894> <4ed4> +<0895> <4f3a> +<0896> <4f7f> +<0897> <523a> +<0898> <53f8> +<0899> <53f2> +<089a> <55e3> +<089b> <56db> +<089c> <58eb> +<089d> <59cb> +<089e> <59c9> +<089f> <59ff> +<08a0> <5b50> +<08a1> <5c4d> +<08a2> <5e02> +<08a3> <5e2b> +<08a4> <5fd7> +<08a5> <601d> +<08a6> <6307> +<08a7> <652f> +<08a8> <5b5c> +<08a9> <65af> +<08aa> <65bd> +<08ab> <65e8> +<08ac> <679d> +<08ad> <6b62> +<08ae> <6b7b> +<08af> <6c0f> +<08b0> <7345> +<08b1> <7949> +<08b2> <79c1> +<08b3> <7cf8> +<08b4> <7d19> +<08b5> <7d2b> +<08b6> <80a2> +<08b7> <8102> +<08b8> <81f3> +<08b9> <8996> +<08ba> <8a5e> +<08bb> <8a69> +<08bc> <8a66> +<08bd> <8a8c> +<08be> <8aee> +<08bf> <8cc7> +<08c0> <8cdc> +<08c1> <96cc> +<08c2> <98fc> +<08c3> <6b6f> +<08c4> <4e8b> +<08c5> <4f3c> +<08c6> <4f8d> +<08c7> <5150> +<08c8> <5b57> +<08c9> <5bfa> +<08ca> <6148> +<08cb> <6301> +<08cc> <6642> +<08cd> <6b21> +<08ce> <6ecb> +<08cf> <6cbb> +<08d0> <723e> +<08d1> <74bd> +endbfchar + +100 beginbfchar +<08d2> <75d4> +<08d3> <78c1> +<08d4> <793a> +<08d5> <800c> +<08d6> <8033> +<08d7> <81ea> +<08d8> <8494> +<08d9> <8f9e> +<08da> <6c50> +<08db> <9e7f> +<08dc> <5f0f> +<08dd> <8b58> +<08de> <9d2b> +<08df> <7afa> +<08e0> <8ef8> +<08e1> <5b8d> +<08e2> <96eb> +<08e3> <4e03> +<08e4> <53f1> +<08e5> <57f7> +<08e6> <5931> +<08e7> <5ac9> +<08e8> <5ba4> +<08e9> <6089> +<08ea> <6e7f> +<08eb> <6f06> +<08ec> <75be> +<08ed> <8cea> +<08ee> <5b9f> +<08ef> <8500> +<08f0> <7be0> +<08f1> <5072> +<08f2> <67f4> +<08f3> <829d> +<08f4> <5c61> +<08f5> <854a> +<08f6> <7e1e> +<08f7> <820e> +<08f8> <5199> +<08f9> <5c04> +<08fa> <6368> +<08fb> <8d66> +<08fc> <659c> +<08fd> <716e> +<08fe> <793e> +<08ff> <7d17> +<0900> <8005> +<0901> <8b1d> +<0902> <8eca> +<0903> <906e> +<0904> <86c7> +<0905> <90aa> +<0906> <501f> +<0907> <52fa> +<0908> <5c3a> +<0909> <6753> +<090a> <707c> +<090b> <7235> +<090c> <914c> +<090d> <91c8> +<090e> <932b> +<090f> <82e5> +<0910> <5bc2> +<0911> <5f31> +<0912> <60f9> +<0913> <4e3b> +<0914> <53d6> +<0915> <5b88> +<0916> <624b> +<0917> <6731> +<0918> <6b8a> +<0919> <72e9> +<091a> <73e0> +<091b> <7a2e> +<091c> <816b> +<091d> <8da3> +<091e> <9152> +<091f> <9996> +<0920> <5112> +<0921> <53d7> +<0922> <546a> +<0923> <5bff> +<0924> <6388> +<0925> <6a39> +<0926> <7dac> +<0927> <9700> +<0928> <56da> +<0929> <53ce> +<092a> <5468> +<092b> <5b97> +<092c> <5c31> +<092d> <5dde> +<092e> <4fee> +<092f> <6101> +<0930> <62fe> +<0931> <6d32> +<0932> <79c0> +<0933> <79cb> +<0934> <7d42> +<0935> <7e4d> +endbfchar + +100 beginbfchar +<0936> <7fd2> +<0937> <81ed> +<0938> <821f> +<0939> <8490> +<093a> <8846> +<093b> <8972> +<093c> <8b90> +<093d> <8e74> +<093e> <8f2f> +<093f> <9031> +<0940> <914b> +<0941> <916c> +<0942> <96c6> +<0943> <919c> +<0944> <4ec0> +<0945> <4f4f> +<0946> <5145> +<0947> <5341> +<0948> <5f93> +<0949> <620e> +<094a> <67d4> +<094b> <6c41> +<094c> <6e0b> +<094d> <7363> +<094e> <7e26> +<094f> <91cd> +<0950> <9283> +<0951> <53d4> +<0952> <5919> +<0953> <5bbf> +<0954> <6dd1> +<0955> <795d> +<0956> <7e2e> +<0957> <7c9b> +<0958> <587e> +<0959> <719f> +<095a> <51fa> +<095b> <8853> +<095c> <8ff0> +<095d> <4fca> +<095e> <5cfb> +<095f> <6625> +<0960> <77ac> +<0961> <7ae3> +<0962> <821c> +<0963> <99ff> +<0964> <51c6> +<0965> <5faa> +<0966> <65ec> +<0967> <696f> +<0968> <6b89> +<0969> <6df3> +<096a> <6e96> +<096b> <6f64> +<096c> <76fe> +<096d> <7d14> +<096e> <5de1> +<096f> <9075> +<0970> <9187> +<0971> <9806> +<0972> <51e6> +<0973> <521d> +<0974> <6240> +<0975> <6691> +<0976> <66d9> +<0977> <6e1a> +<0978> <5eb6> +<0979> <7dd2> +<097a> <7f72> +<097b> <66f8> +<097c> <85af> +<097d> <85f7> +<097e> <8af8> +<097f> <52a9> +<0980> <53d9> +<0981> <5973> +<0982> <5e8f> +<0983> <5f90> +<0984> <6055> +<0985> <92e4> +<0986> <9664> +<0987> <50b7> +<0988> <511f> +<0989> <52dd> +<098a> <5320> +<098b> <5347> +<098c> <53ec> +<098d> <54e8> +<098e> <5546> +<098f> <5531> +<0990> <5617> +<0991> <5968> +<0992> <59be> +<0993> <5a3c> +<0994> <5bb5> +<0995> <5c06> +<0996> <5c0f> +<0997> <5c11> +<0998> <5c1a> +<0999> <5e84> +endbfchar + +100 beginbfchar +<099a> <5e8a> +<099b> <5ee0> +<099c> <5f70> +<099d> <627f> +<099e> <6284> +<099f> <62db> +<09a0> <638c> +<09a1> <6377> +<09a2> <6607> +<09a3> <660c> +<09a4> <662d> +<09a5> <6676> +<09a6> <677e> +<09a7> <68a2> +<09a8> <6a1f> +<09a9> <6a35> +<09aa> <6cbc> +<09ab> <6d88> +<09ac> <6e09> +<09ad> <6e58> +<09ae> <713c> +<09af> <7126> +<09b0> <7167> +<09b1> <75c7> +<09b2> <7701> +<09b3> <785d> +<09b4> <7901> +<09b5> <7965> +<09b6> <79f0> +<09b7> <7ae0> +<09b8> <7b11> +<09b9> <7ca7> +<09ba> <7d39> +<09bb> <8096> +<09bc> <83d6> +<09bd> <848b> +<09be> <8549> +<09bf> <885d> +<09c0> <88f3> +<09c1> <8a1f> +<09c2> <8a3c> +<09c3> <8a54> +<09c4> <8a73> +<09c5> <8c61> +<09c6> <8cde> +<09c7> <91a4> +<09c8> <9266> +<09c9> <937e> +<09ca> <9418> +<09cb> <969c> +<09cc> <9798> +<09cd> <4e0a> +<09ce> <4e08> +<09cf> <4e1e> +<09d0> <4e57> +<09d1> <5197> +<09d2> <5270> +<09d3> <57ce> +<09d4> <5834> +<09d5> <58cc> +<09d6> <5b22> +<09d7> <5e38> +<09d8> <60c5> +<09d9> <64fe> +<09da> <6761> +<09db> <6756> +<09dc> <6d44> +<09dd> <72b6> +<09de> <7573> +<09df> <7a63> +<09e0> <84b8> +<09e1> <8b72> +<09e2> <91b8> +<09e3> <9320> +<09e4> <5631> +<09e5> <57f4> +<09e6> <98fe> +<09e7> <62ed> +<09e8> <690d> +<09e9> <6b96> +<09ea> <71ed> +<09eb> <7e54> +<09ec> <8077> +<09ed> <8272> +<09ee> <89e6> +<09ef> <98df> +<09f0> <8755> +<09f1> <8fb1> +<09f2> <5c3b> +<09f3> <4f38> +<09f4> <4fe1> +<09f5> <4fb5> +<09f6> <5507> +<09f7> <5a20> +<09f8> <5bdd> +<09f9> <5be9> +<09fa> <5fc3> +<09fb> <614e> +<09fc> <632f> +<09fd> <65b0> +endbfchar + +100 beginbfchar +<09fe> <664b> +<09ff> <68ee> +<0a00> <699b> +<0a01> <6d78> +<0a02> <6df1> +<0a03> <7533> +<0a04> <75b9> +<0a05> <771f> +<0a06> <795e> +<0a07> <79e6> +<0a08> <7d33> +<0a09> <81e3> +<0a0a> <82af> +<0a0b> <85aa> +<0a0c> <89aa> +<0a0d> <8a3a> +<0a0e> <8eab> +<0a0f> <8f9b> +<0a10> <9032> +<0a11> <91dd> +<0a12> <9707> +<0a13> <4eba> +<0a14> <4ec1> +<0a15> <5203> +<0a16> <5875> +<0a17> <58ec> +<0a18> <5c0b> +<0a19> <751a> +<0a1a> <5c3d> +<0a1b> <814e> +<0a1c> <8a0a> +<0a1d> <8fc5> +<0a1e> <9663> +<0a1f> <976d> +<0a20> <7b25> +<0a21> <8acf> +<0a22> <9808> +<0a23> <9162> +<0a24> <56f3> +<0a25> <53a8> +<0a26> <9017> +<0a27> <5439> +<0a28> <5782> +<0a29> <5e25> +<0a2a> <63a8> +<0a2b> <6c34> +<0a2c> <708a> +<0a2d> <7761> +<0a2e> <7c8b> +<0a2f> <7fe0> +<0a30> <8870> +<0a31> <9042> +<0a32> <9154> +<0a33> <9310> +<0a34> <9318> +<0a35> <968f> +<0a36> <745e> +<0a37> <9ac4> +<0a38> <5d07> +<0a39> <5d69> +<0a3a> <6570> +<0a3b> <67a2> +<0a3c> <8da8> +<0a3d> <96db> +<0a3e> <636e> +<0a3f> <6749> +<0a40> <6919> +<0a41> <83c5> +<0a42> <9817> +<0a43> <96c0> +<0a44> <88fe> +<0a45> <6f84> +<0a46> <647a> +<0a47> <5bf8> +<0a48> <4e16> +<0a49> <702c> +<0a4a> <755d> +<0a4b> <662f> +<0a4c> <51c4> +<0a4d> <5236> +<0a4e> <52e2> +<0a4f> <59d3> +<0a50> <5f81> +<0a51> <6027> +<0a52> <6210> +<0a53> <653f> +<0a54> <6574> +<0a55> <661f> +<0a56> <6674> +<0a57> <68f2> +<0a58> <6816> +<0a59> <6b63> +<0a5a> <6e05> +<0a5b> <7272> +<0a5c> <751f> +<0a5d> <76db> +<0a5e> <7cbe> +<0a5f> <8056> +<0a60> <58f0> +<0a61> <88fd> +endbfchar + +100 beginbfchar +<0a62> <897f> +<0a63> <8aa0> +<0a64> <8a93> +<0a65> <8acb> +<0a66> <901d> +<0a67> <9192> +<0a68> <9752> +<0a69> <9759> +<0a6a> <6589> +<0a6b> <7a0e> +<0a6c> <8106> +<0a6d> <96bb> +<0a6e> <5e2d> +<0a6f> <60dc> +<0a70> <621a> +<0a71> <65a5> +<0a72> <6614> +<0a73> <6790> +<0a74> <77f3> +<0a75> <7a4d> +<0a76> <7c4d> +<0a77> <7e3e> +<0a78> <810a> +<0a79> <8cac> +<0a7a> <8d64> +<0a7b> <8de1> +<0a7c> <8e5f> +<0a7d> <78a9> +<0a7e> <5207> +<0a7f> <62d9> +<0a80> <63a5> +<0a81> <6442> +<0a82> <6298> +<0a83> <8a2d> +<0a84> <7a83> +<0a85> <7bc0> +<0a86> <8aac> +<0a87> <96ea> +<0a88> <7d76> +<0a89> <820c> +<0a8a> <8749> +<0a8b> <4ed9> +<0a8c> <5148> +<0a8d> <5343> +<0a8e> <5360> +<0a8f> <5ba3> +<0a90> <5c02> +<0a91> <5c16> +<0a92> <5ddd> +<0a93> <6226> +<0a94> <6247> +<0a95> <64b0> +<0a96> <6813> +<0a97> <6834> +<0a98> <6cc9> +<0a99> <6d45> +<0a9a> <6d17> +<0a9b> <67d3> +<0a9c> <6f5c> +<0a9d> <714e> +<0a9e> <717d> +<0a9f> <65cb> +<0aa0> <7a7f> +<0aa1> <7bad> +<0aa2> <7dda> +<0aa3> <7e4a> +<0aa4> <7fa8> +<0aa5> <817a> +<0aa6> <821b> +<0aa7> <8239> +<0aa8> <85a6> +<0aa9> <8a6e> +<0aaa> <8cce> +<0aab> <8df5> +<0aac> <9078> +<0aad> <9077> +<0aae> <92ad> +<0aaf> <9291> +<0ab0> <9583> +<0ab1> <9bae> +<0ab2> <524d> +<0ab3> <5584> +<0ab4> <6f38> +<0ab5> <7136> +<0ab6> <5168> +<0ab7> <7985> +<0ab8> <7e55> +<0ab9> <81b3> +<0aba> <7cce> +<0abb> <564c> +<0abc> <5851> +<0abd> <5ca8> +<0abe> <63aa> +<0abf> <66fe> +<0ac0> <66fd> +<0ac1> <695a> +<0ac2> <72d9> +<0ac3> <758f> +<0ac4> <758e> +<0ac5> <790e> +endbfchar + +100 beginbfchar +<0ac6> <7956> +<0ac7> <79df> +<0ac8> <7c97> +<0ac9> <7d20> +<0aca> <7d44> +<0acb> <8607> +<0acc> <8a34> +<0acd> <963b> +<0ace> <9061> +<0acf> <9f20> +<0ad0> <50e7> +<0ad1> <5275> +<0ad2> <53cc> +<0ad3> <53e2> +<0ad4> <5009> +<0ad5> <55aa> +<0ad6> <58ee> +<0ad7> <594f> +<0ad8> <723d> +<0ad9> <5b8b> +<0ada> <5c64> +<0adb> <531d> +<0adc> <60e3> +<0add> <60f3> +<0ade> <635c> +<0adf> <6383> +<0ae0> <633f> +<0ae1> <63bb> +<0ae2> <64cd> +<0ae3> <65e9> +<0ae4> <66f9> +<0ae5> <5de3> +<0ae6> <69cd> +<0ae7> <69fd> +<0ae8> <6f15> +<0ae9> <71e5> +<0aea> <4e89> +<0aeb> <75e9> +<0aec> <76f8> +<0aed> <7a93> +<0aee> <7cdf> +<0aef> <7dcf> +<0af0> <7d9c> +<0af1> <8061> +<0af2> <8349> +<0af3> <8358> +<0af4> <846c> +<0af5> <84bc> +<0af6> <85fb> +<0af7> <88c5> +<0af8> <8d70> +<0af9> <9001> +<0afa> <906d> +<0afb> <9397> +<0afc> <971c> +<0afd> <9a12> +<0afe> <50cf> +<0aff> <5897> +<0b00> <618e> +<0b01> <81d3> +<0b02> <8535> +<0b03> <8d08> +<0b04> <9020> +<0b05> <4fc3> +<0b06> <5074> +<0b07> <5247> +<0b08> <5373> +<0b09> <606f> +<0b0a> <6349> +<0b0b> <675f> +<0b0c> <6e2c> +<0b0d> <8db3> +<0b0e> <901f> +<0b0f> <4fd7> +<0b10> <5c5e> +<0b11> <8cca> +<0b12> <65cf> +<0b13> <7d9a> +<0b14> <5352> +<0b15> <8896> +<0b16> <5176> +<0b17> <63c3> +<0b18> <5b58> +<0b19> <5b6b> +<0b1a> <5c0a> +<0b1b> <640d> +<0b1c> <6751> +<0b1d> <905c> +<0b1e> <4ed6> +<0b1f> <591a> +<0b20> <592a> +<0b21> <6c70> +<0b22> <8a51> +<0b23> <553e> +<0b24> <5815> +<0b25> <59a5> +<0b26> <60f0> +<0b27> <6253> +<0b28> <67c1> +<0b29> <8235> +endbfchar + +100 beginbfchar +<0b2a> <6955> +<0b2b> <9640> +<0b2c> <99c4> +<0b2d> <9a28> +<0b2e> <4f53> +<0b2f> <5806> +<0b30> <5bfe> +<0b31> <8010> +<0b32> <5cb1> +<0b33> <5e2f> +<0b34> <5f85> +<0b35> <6020> +<0b36> <614b> +<0b37> <6234> +<0b38> <66ff> +<0b39> <6cf0> +<0b3a> <6ede> +<0b3b> <80ce> +<0b3c> <817f> +<0b3d> <82d4> +<0b3e> <888b> +<0b3f> <8cb8> +<0b40> <9000> +<0b41> <902e> +<0b42> <968a> +<0b43> <9edb> +<0b44> <9bdb> +<0b45> <4ee3> +<0b46> <53f0> +<0b47> <5927> +<0b48> <7b2c> +<0b49> <918d> +<0b4a> <984c> +<0b4b> <9df9> +<0b4c> <6edd> +<0b4d> <7027> +<0b4e> <5353> +<0b4f> <5544> +<0b50> <5b85> +<0b51> <6258> +<0b52> <629e> +<0b53> <62d3> +<0b54> <6ca2> +<0b55> <6fef> +<0b56> <7422> +<0b57> <8a17> +<0b58> <9438> +<0b59> <6fc1> +<0b5a> <8afe> +<0b5b> <8338> +<0b5c> <51e7> +<0b5d> <86f8> +<0b5e> <53ea> +<0b5f> <53e9> +<0b60> <4f46> +<0b61> <9054> +<0b62> <8fb0> +<0b63> <596a> +<0b64> <8131> +<0b65> <5dfd> +<0b66> <7aea> +<0b67> <8fbf> +<0b68> <68da> +<0b69> <8c37> +<0b6a> <72f8> +<0b6b> <9c48> +<0b6c> <6a3d> +<0b6d> <8ab0> +<0b6e> <4e39> +<0b6f> <5358> +<0b70> <5606> +<0b71> <5766> +<0b72> <62c5> +<0b73> <63a2> +<0b74> <65e6> +<0b75> <6b4e> +<0b76> <6de1> +<0b77> <6e5b> +<0b78> <70ad> +<0b79> <77ed> +<0b7a> <7aef> +<0b7b> <7baa> +<0b7c> <7dbb> +<0b7d> <803d> +<0b7e> <80c6> +<0b7f> <86cb> +<0b80> <8a95> +<0b81> <935b> +<0b82> <56e3> +<0b83> <58c7> +<0b84> <5f3e> +<0b85> <65ad> +<0b86> <6696> +<0b87> <6a80> +<0b88> <6bb5> +<0b89> <7537> +<0b8a> <8ac7> +<0b8b> <5024> +<0b8c> <77e5> +<0b8d> <5730> +endbfchar + +100 beginbfchar +<0b8e> <5f1b> +<0b8f> <6065> +<0b90> <667a> +<0b91> <6c60> +<0b92> <75f4> +<0b93> <7a1a> +<0b94> <7f6e> +<0b95> <81f4> +<0b96> <8718> +<0b97> <9045> +<0b98> <99b3> +<0b99> <7bc9> +<0b9a> <755c> +<0b9b> <7af9> +<0b9c> <7b51> +<0b9d> <84c4> +<0b9e> <9010> +<0b9f> <79e9> +<0ba0> <7a92> +<0ba1> <8336> +<0ba2> <5ae1> +<0ba3> <7740> +<0ba4> <4e2d> +<0ba5> <4ef2> +<0ba6> <5b99> +<0ba7> <5fe0> +<0ba8> <62bd> +<0ba9> <663c> +<0baa> <67f1> +<0bab> <6ce8> +<0bac> <866b> +<0bad> <8877> +<0bae> <8a3b> +<0baf> <914e> +<0bb0> <92f3> +<0bb1> <99d0> +<0bb2> <6a17> +<0bb3> <7026> +<0bb4> <732a> +<0bb5> <82e7> +<0bb6> <8457> +<0bb7> <8caf> +<0bb8> <4e01> +<0bb9> <5146> +<0bba> <51cb> +<0bbb> <558b> +<0bbc> <5bf5> +<0bbd> <5e16> +<0bbe> <5e33> +<0bbf> <5e81> +<0bc0> <5f14> +<0bc1> <5f35> +<0bc2> <5f6b> +<0bc3> <5fb4> +<0bc4> <61f2> +<0bc5> <6311> +<0bc6> <66a2> +<0bc7> <671d> +<0bc8> <6f6e> +<0bc9> <7252> +<0bca> <753a> +<0bcb> <773a> +<0bcc> <8074> +<0bcd> <8139> +<0bce> <8178> +<0bcf> <8776> +<0bd0> <8abf> +<0bd1> <8adc> +<0bd2> <8d85> +<0bd3> <8df3> +<0bd4> <929a> +<0bd5> <9577> +<0bd6> <9802> +<0bd7> <9ce5> +<0bd8> <52c5> +<0bd9> <6357> +<0bda> <76f4> +<0bdb> <6715> +<0bdc> <6c88> +<0bdd> <73cd> +<0bde> <8cc3> +<0bdf> <93ae> +<0be0> <9673> +<0be1> <6d25> +<0be2> <589c> +<0be3> <690e> +<0be4> <69cc> +<0be5> <8ffd> +<0be6> <939a> +<0be7> <75db> +<0be8> <901a> +<0be9> <585a> +<0bea> <6802> +<0beb> <63b4> +<0bec> <69fb> +<0bed> <4f43> +<0bee> <6f2c> +<0bef> <67d8> +<0bf0> <8fbb> +<0bf1> <8526> +endbfchar + +100 beginbfchar +<0bf2> <7db4> +<0bf3> <9354> +<0bf4> <693f> +<0bf5> <6f70> +<0bf6> <576a> +<0bf7> <58f7> +<0bf8> <5b2c> +<0bf9> <7d2c> +<0bfa> <722a> +<0bfb> <540a> +<0bfc> <91e3> +<0bfd> <9db4> +<0bfe> <4ead> +<0bff> <4f4e> +<0c00> <505c> +<0c01> <5075> +<0c02> <5243> +<0c03> <8c9e> +<0c04> <5448> +<0c05> <5824> +<0c06> <5b9a> +<0c07> <5e1d> +<0c08> <5e95> +<0c09> <5ead> +<0c0a> <5ef7> +<0c0b> <5f1f> +<0c0c> <608c> +<0c0d> <62b5> +<0c0e> <633a> +<0c0f> <63d0> +<0c10> <68af> +<0c11> <6c40> +<0c12> <7887> +<0c13> <798e> +<0c14> <7a0b> +<0c15> <7de0> +<0c16> <8247> +<0c17> <8a02> +<0c18> <8ae6> +<0c19> <8e44> +<0c1a> <9013> +<0c1b> <90b8> +<0c1c> <912d> +<0c1d> <91d8> +<0c1e> <9f0e> +<0c1f> <6ce5> +<0c20> <6458> +<0c21> <64e2> +<0c22> <6575> +<0c23> <6ef4> +<0c24> <7684> +<0c25> <7b1b> +<0c26> <9069> +<0c27> <93d1> +<0c28> <6eba> +<0c29> <54f2> +<0c2a> <5fb9> +<0c2b> <64a4> +<0c2c> <8f4d> +<0c2d> <8fed> +<0c2e> <9244> +<0c2f> <5178> +<0c30> <586b> +<0c31> <5929> +<0c32> <5c55> +<0c33> <5e97> +<0c34> <6dfb> +<0c35> <7e8f> +<0c36> <751c> +<0c37> <8cbc> +<0c38> <8ee2> +<0c39> <985b> +<0c3a> <70b9> +<0c3b> <4f1d> +<0c3c> <6bbf> +<0c3d> <6fb1> +<0c3e> <7530> +<0c3f> <96fb> +<0c40> <514e> +<0c41> <5410> +<0c42> <5835> +<0c43> <5857> +<0c44> <59ac> +<0c45> <5c60> +<0c46> <5f92> +<0c47> <6597> +<0c48> <675c> +<0c49> <6e21> +<0c4a> <767b> +<0c4b> <83df> +<0c4c> <8ced> +<0c4d> <9014> +<0c4e> <90fd> +<0c4f> <934d> +<0c50> <7825> +<0c51> <783a> +<0c52> <52aa> +<0c53> <5ea6> +<0c54> <571f> +<0c55> <5974> +endbfchar + +100 beginbfchar +<0c56> <6012> +<0c57> <5012> +<0c58> <515a> +<0c59> <51ac> +<0c5a> <51cd> +<0c5b> <5200> +<0c5c> <5510> +<0c5d> <5854> +<0c5e> <5858> +<0c5f> <5957> +<0c60> <5b95> +<0c61> <5cf6> +<0c62> <5d8b> +<0c63> <60bc> +<0c64> <6295> +<0c65> <642d> +<0c66> <6771> +<0c67> <6843> +<0c68> <68bc> +<0c69> <68df> +<0c6a> <76d7> +<0c6b> <6dd8> +<0c6c> <6e6f> +<0c6d> <6d9b> +<0c6e> <706f> +<0c6f> <71c8> +<0c70> <5f53> +<0c71> <75d8> +<0c72> <7977> +<0c73> <7b49> +<0c74> <7b54> +<0c75> <7b52> +<0c76> <7cd6> +<0c77> <7d71> +<0c78> <5230> +<0c79> <8463> +<0c7a> <8569> +<0c7b> <85e4> +<0c7c> <8a0e> +<0c7d> <8b04> +<0c7e> <8c46> +<0c7f> <8e0f> +<0c80> <9003> +<0c81> <900f> +<0c82> <9419> +<0c83> <9676> +<0c84> <982d> +<0c85> <9a30> +<0c86> <95d8> +<0c87> <50cd> +<0c88> <52d5> +<0c89> <540c> +<0c8a> <5802> +<0c8b> <5c0e> +<0c8c> <61a7> +<0c8d> <649e> +<0c8e> <6d1e> +<0c8f> <77b3> +<0c90> <7ae5> +<0c91> <80f4> +<0c92> <8404> +<0c93> <9053> +<0c94> <9285> +<0c95> <5ce0> +<0c96> <9d07> +<0c97> <533f> +<0c98> <5f97> +<0c99> <5fb3> +<0c9a> <6d9c> +<0c9b> <7279> +<0c9c> <7763> +<0c9d> <79bf> +<0c9e> <7be4> +<0c9f> <6bd2> +<0ca0> <72ec> +<0ca1> <8aad> +<0ca2> <6803> +<0ca3> <6a61> +<0ca4> <51f8> +<0ca5> <7a81> +<0ca6> <6934> +<0ca7> <5c4a> +<0ca8> <9cf6> +<0ca9> <82eb> +<0caa> <5bc5> +<0cab> <9149> +<0cac> <701e> +<0cad> <5678> +<0cae> <5c6f> +<0caf> <60c7> +<0cb0> <6566> +<0cb1> <6c8c> +<0cb2> <8c5a> +<0cb3> <9041> +<0cb4> <9813> +<0cb5> <5451> +<0cb6> <66c7> +<0cb7> <920d> +<0cb8> <5948> +<0cb9> <90a3> +endbfchar + +100 beginbfchar +<0cba> <5185> +<0cbb> <4e4d> +<0cbc> <51ea> +<0cbd> <8599> +<0cbe> <8b0e> +<0cbf> <7058> +<0cc0> <637a> +<0cc1> <934b> +<0cc2> <6962> +<0cc3> <99b4> +<0cc4> <7e04> +<0cc5> <7577> +<0cc6> <5357> +<0cc7> <6960> +<0cc8> <8edf> +<0cc9> <96e3> +<0cca> <6c5d> +<0ccb> <4e8c> +<0ccc> <5c3c> +<0ccd> <5f10> +<0cce> <8fe9> +<0ccf> <5302> +<0cd0> <8cd1> +<0cd1> <8089> +<0cd2> <8679> +<0cd3> <5eff> +<0cd4> <65e5> +<0cd5> <4e73> +<0cd6> <5165> +<0cd7> <5982> +<0cd8> <5c3f> +<0cd9> <97ee> +<0cda> <4efb> +<0cdb> <598a> +<0cdc> <5fcd> +<0cdd> <8a8d> +<0cde> <6fe1> +<0cdf> <79b0> +<0ce0> <7962> +<0ce1> <5be7> +<0ce2> <8471> +<0ce3> <732b> +<0ce4> <71b1> +<0ce5> <5e74> +<0ce6> <5ff5> +<0ce7> <637b> +<0ce8> <649a> +<0ce9> <71c3> +<0cea> <7c98> +<0ceb> <4e43> +<0cec> <5efc> +<0ced> <4e4b> +<0cee> <57dc> +<0cef> <56a2> +<0cf0> <60a9> +<0cf1> <6fc3> +<0cf2> <7d0d> +<0cf3> <80fd> +<0cf4> <8133> +<0cf5> <81bf> +<0cf6> <8fb2> +<0cf7> <8997> +<0cf8> <86a4> +<0cf9> <5df4> +<0cfa> <628a> +<0cfb> <64ad> +<0cfc> <8987> +<0cfd> <6777> +<0cfe> <6ce2> +<0cff> <6d3e> +<0d00> <7436> +<0d01> <7834> +<0d02> <5a46> +<0d03> <7f75> +<0d04> <82ad> +<0d05> <99ac> +<0d06> <4ff3> +<0d07> <5ec3> +<0d08> <62dd> +<0d09> <6392> +<0d0a> <6557> +<0d0b> <676f> +<0d0c> <76c3> +<0d0d> <724c> +<0d0e> <80cc> +<0d0f> <80ba> +<0d10> <8f29> +<0d11> <914d> +<0d12> <500d> +<0d13> <57f9> +<0d14> <5a92> +<0d15> <6885> +<0d16> <6973> +<0d17> <7164> +<0d18> <72fd> +<0d19> <8cb7> +<0d1a> <58f2> +<0d1b> <8ce0> +<0d1c> <966a> +<0d1d> <9019> +endbfchar + +100 beginbfchar +<0d1e> <877f> +<0d1f> <79e4> +<0d20> <77e7> +<0d21> <8429> +<0d22> <4f2f> +<0d23> <5265> +<0d24> <535a> +<0d25> <62cd> +<0d26> <67cf> +<0d27> <6cca> +<0d28> <767d> +<0d29> <7b94> +<0d2a> <7c95> +<0d2b> <8236> +<0d2c> <8584> +<0d2d> <8feb> +<0d2e> <66dd> +<0d2f> <6f20> +<0d30> <7206> +<0d31> <7e1b> +<0d32> <83ab> +<0d33> <99c1> +<0d34> <9ea6> +<0d35> <51fd> +<0d36> <7bb1> +<0d37> <7872> +<0d38> <7bb8> +<0d39> <8087> +<0d3a> <7b48> +<0d3b> <6ae8> +<0d3c> <5e61> +<0d3d> <808c> +<0d3e> <7551> +<0d3f> <7560> +<0d40> <516b> +<0d41> <9262> +<0d42> <6e8c> +<0d43> <767a> +<0d44> <9197> +<0d45> <9aea> +<0d46> <4f10> +<0d47> <7f70> +<0d48> <629c> +<0d49> <7b4f> +<0d4a> <95a5> +<0d4b> <9ce9> +<0d4c> <567a> +<0d4d> <5859> +<0d4e> <86e4> +<0d4f> <96bc> +<0d50> <4f34> +<0d51> <5224> +<0d52> <534a> +<0d53> <53cd> +<0d54> <53db> +<0d55> <5e06> +<0d56> <642c> +<0d57> <6591> +<0d58> <677f> +<0d59> <6c3e> +<0d5a> <6c4e> +<0d5b> <7248> +<0d5c> <72af> +<0d5d> <73ed> +<0d5e> <7554> +<0d5f> <7e41> +<0d60> <822c> +<0d61> <85e9> +<0d62> <8ca9> +<0d63> <7bc4> +<0d64> <91c6> +<0d65> <7169> +<0d66> <9812> +<0d67> <98ef> +<0d68> <633d> +<0d69> <6669> +<0d6a> <756a> +<0d6b> <76e4> +<0d6c> <78d0> +<0d6d> <8543> +<0d6e> <86ee> +<0d6f> <532a> +<0d70> <5351> +<0d71> <5426> +<0d72> <5983> +<0d73> <5e87> +<0d74> <5f7c> +<0d75> <60b2> +<0d76> <6249> +<0d77> <6279> +<0d78> <62ab> +<0d79> <6590> +<0d7a> <6bd4> +<0d7b> <6ccc> +<0d7c> <75b2> +<0d7d> <76ae> +<0d7e> <7891> +<0d7f> <79d8> +<0d80> <7dcb> +<0d81> <7f77> +endbfchar + +100 beginbfchar +<0d82> <80a5> +<0d83> <88ab> +<0d84> <8ab9> +<0d85> <8cbb> +<0d86> <907f> +<0d87> <975e> +<0d88> <98db> +<0d89> <6a0b> +<0d8a> <7c38> +<0d8b> <5099> +<0d8c> <5c3e> +<0d8d> <5fae> +<0d8e> <6787> +<0d8f> <6bd8> +<0d90> <7435> +<0d91> <7709> +<0d92> <7f8e> +<0d93> <9f3b> +<0d94> <67ca> +<0d95> <7a17> +<0d96> <5339> +<0d97> <758b> +<0d98> <9aed> +<0d99> <5f66> +<0d9a> <819d> +<0d9b> <83f1> +<0d9c> <8098> +<0d9d> <5f3c> +<0d9e> <5fc5> +<0d9f> <7562> +<0da0> <7b46> +<0da1> <903c> +<0da2> <6867> +<0da3> <59eb> +<0da4> <5a9b> +<0da5> <7d10> +<0da6> <767e> +<0da7> <8b2c> +<0da8> <4ff5> +<0da9> <5f6a> +<0daa> <6a19> +<0dab> <6c37> +<0dac> <6f02> +<0dad> <74e2> +<0dae> <7968> +<0daf> <8868> +<0db0> <8a55> +<0db1> <8c79> +<0db2> <5edf> +<0db3> <63cf> +<0db4> <75c5> +<0db5> <79d2> +<0db6> <82d7> +<0db7> <9328> +<0db8> <92f2> +<0db9> <849c> +<0dba> <86ed> +<0dbb> <9c2d> +<0dbc> <54c1> +<0dbd> <5f6c> +<0dbe> <658c> +<0dbf> <6d5c> +<0dc0> <7015> +<0dc1> <8ca7> +<0dc2> <8cd3> +<0dc3> <983b> +<0dc4> <654f> +<0dc5> <74f6> +<0dc6> <4e0d> +<0dc7> <4ed8> +<0dc8> <57e0> +<0dc9> <592b> +<0dca> <5a66> +<0dcb> <5bcc> +<0dcc> <51a8> +<0dcd> <5e03> +<0dce> <5e9c> +<0dcf> <6016> +<0dd0> <6276> +<0dd1> <6577> +<0dd2> <65a7> +<0dd3> <666e> +<0dd4> <6d6e> +<0dd5> <7236> +<0dd6> <7b26> +<0dd7> <8150> +<0dd8> <819a> +<0dd9> <8299> +<0dda> <8b5c> +<0ddb> <8ca0> +<0ddc> <8ce6> +<0ddd> <8d74> +<0dde> <961c> +<0ddf> <9644> +<0de0> <4fae> +<0de1> <64ab> +<0de2> <6b66> +<0de3> <821e> +<0de4> <8461> +<0de5> <856a> +endbfchar + +100 beginbfchar +<0de6> <90e8> +<0de7> <5c01> +<0de8> <6953> +<0de9> <98a8> +<0dea> <847a> +<0deb> <8557> +<0dec> <4f0f> +<0ded> <526f> +<0dee> <5fa9> +<0def> <5e45> +<0df0> <670d> +<0df1> <798f> +<0df2> <8179> +<0df3> <8907> +<0df4> <8986> +<0df5> <6df5> +<0df6> <5f17> +<0df7> <6255> +<0df8> <6cb8> +<0df9> <4ecf> +<0dfa> <7269> +<0dfb> <9b92> +<0dfc> <5206> +<0dfd> <543b> +<0dfe> <5674> +<0dff> <58b3> +<0e00> <61a4> +<0e01> <626e> +<0e02> <711a> +<0e03> <596e> +<0e04> <7c89> +<0e05> <7cde> +<0e06> <7d1b> +<0e07> <96f0> +<0e08> <6587> +<0e09> <805e> +<0e0a> <4e19> +<0e0b> <4f75> +<0e0c> <5175> +<0e0d> <5840> +<0e0e> <5e63> +<0e0f> <5e73> +<0e10> <5f0a> +<0e11> <67c4> +<0e12> <4e26> +<0e13> <853d> +<0e14> <9589> +<0e15> <965b> +<0e16> <7c73> +<0e17> <9801> +<0e18> <50fb> +<0e19> <58c1> +<0e1a> <7656> +<0e1b> <78a7> +<0e1c> <5225> +<0e1d> <77a5> +<0e1e> <8511> +<0e1f> <7b86> +<0e20> <504f> +<0e21> <5909> +<0e22> <7247> +<0e23> <7bc7> +<0e24> <7de8> +<0e25> <8fba> +<0e26> <8fd4> +<0e27> <904d> +<0e28> <4fbf> +<0e29> <52c9> +<0e2a> <5a29> +<0e2b> <5f01> +<0e2c> <97ad> +<0e2d> <4fdd> +<0e2e> <8217> +<0e2f> <92ea> +<0e30> <5703> +<0e31> <6355> +<0e32> <6b69> +<0e33> <752b> +<0e34> <88dc> +<0e35> <8f14> +<0e36> <7a42> +<0e37> <52df> +<0e38> <5893> +<0e39> <6155> +<0e3a> <620a> +<0e3b> <66ae> +<0e3c> <6bcd> +<0e3d> <7c3f> +<0e3e> <83e9> +<0e3f> <5023> +<0e40> <4ff8> +<0e41> <5305> +<0e42> <5446> +<0e43> <5831> +<0e44> <5949> +<0e45> <5b9d> +<0e46> <5cf0> +<0e47> <5cef> +<0e48> <5d29> +<0e49> <5e96> +endbfchar + +100 beginbfchar +<0e4a> <62b1> +<0e4b> <6367> +<0e4c> <653e> +<0e4d> <65b9> +<0e4e> <670b> +<0e4f> <6cd5> +<0e50> <6ce1> +<0e51> <70f9> +<0e52> <7832> +<0e53> <7e2b> +<0e54> <80de> +<0e55> <82b3> +<0e56> <840c> +<0e57> <84ec> +<0e58> <8702> +<0e59> <8912> +<0e5a> <8a2a> +<0e5b> <8c4a> +<0e5c> <90a6> +<0e5d> <92d2> +<0e5e> <98fd> +<0e5f> <9cf3> +<0e60> <9d6c> +<0e61> <4e4f> +<0e62> <4ea1> +<0e63> <508d> +<0e64> <5256> +<0e65> <574a> +<0e66> <59a8> +<0e67> <5e3d> +<0e6a> <623f> +<0e6b> <66b4> +<0e6c> <671b> +<0e6d> <67d0> +<0e6e> <68d2> +<0e6f> <5192> +<0e70> <7d21> +<0e71> <80aa> +<0e72> <81a8> +<0e73> <8b00> +<0e74> <8c8c> +<0e75> <8cbf> +<0e76> <927e> +<0e77> <9632> +<0e78> <5420> +<0e79> <982c> +<0e7a> <5317> +<0e7b> <50d5> +<0e7c> <535c> +<0e7d> <58a8> +<0e7e> <64b2> +<0e7f> <6734> +<0e80> <7267> +<0e81> <7766> +<0e82> <7a46> +<0e83> <91e6> +<0e84> <52c3> +<0e85> <6ca1> +<0e86> <6b86> +<0e87> <5800> +<0e88> <5e4c> +<0e89> <5954> +<0e8a> <672c> +<0e8b> <7ffb> +<0e8c> <51e1> +<0e8d> <76c6> +<0e8e> <6469> +<0e8f> <78e8> +<0e90> <9b54> +<0e91> <9ebb> +<0e92> <57cb> +<0e93> <59b9> +<0e94> <6627> +<0e95> <679a> +<0e96> <6bce> +<0e97> <54e9> +<0e98> <69d9> +<0e99> <5e55> +<0e9a> <819c> +<0e9b> <6795> +<0e9c> <9baa> +<0e9d> <67fe> +<0e9e> <9c52> +<0e9f> <685d> +<0ea0> <4ea6> +<0ea1> <4fe3> +<0ea2> <53c8> +<0ea3> <62b9> +<0ea4> <672b> +<0ea5> <6cab> +<0ea6> <8fc4> +<0ea7> <4fad> +<0ea8> <7e6d> +<0ea9> <9ebf> +<0eaa> <4e07> +<0eab> <6162> +<0eac> <6e80> +<0ead> <6f2b> +<0eae> <8513> +<0eaf> <5473> +endbfchar + +100 beginbfchar +<0eb0> <672a> +<0eb1> <9b45> +<0eb2> <5df3> +<0eb3> <7b95> +<0eb4> <5cac> +<0eb5> <5bc6> +<0eb6> <871c> +<0eb7> <6e4a> +<0eb8> <84d1> +<0eb9> <7a14> +<0eba> <8108> +<0ebb> <5999> +<0ebc> <7c8d> +<0ebd> <6c11> +<0ebe> <7720> +<0ebf> <52d9> +<0ec0> <5922> +<0ec1> <7121> +<0ec2> <725f> +<0ec3> <77db> +<0ec4> <9727> +<0ec5> <9d61> +<0ec6> <690b> +<0ec7> <5a7f> +<0ec8> <5a18> +<0ec9> <51a5> +<0eca> <540d> +<0ecb> <547d> +<0ecc> <660e> +<0ecd> <76df> +<0ece> <8ff7> +<0ecf> <9298> +<0ed0> <9cf4> +<0ed1> <59ea> +<0ed2> <725d> +<0ed3> <6ec5> +<0ed4> <514d> +<0ed5> <68c9> +<0ed6> <7dbf> +<0ed7> <7dec> +<0ed8> <9762> +<0ed9> <9eba> +<0eda> <6478> +<0edb> <6a21> +<0edc> <8302> +<0edd> <5984> +<0ede> <5b5f> +<0edf> <6bdb> +<0ee0> <731b> +<0ee1> <76f2> +<0ee2> <7db2> +<0ee3> <8017> +<0ee4> <8499> +<0ee5> <5132> +<0ee6> <6728> +<0ee7> <9ed9> +<0ee8> <76ee> +<0ee9> <6762> +<0eea> <52ff> +<0eeb> <9905> +<0eec> <5c24> +<0eed> <623b> +<0eee> <7c7e> +<0eef> <8cb0> +<0ef0> <554f> +<0ef1> <60b6> +<0ef2> <7d0b> +<0ef3> <9580> +<0ef4> <5301> +<0ef5> <4e5f> +<0ef6> <51b6> +<0ef7> <591c> +<0ef8> <723a> +<0ef9> <8036> +<0efa> <91ce> +<0efb> <5f25> +<0efc> <77e2> +<0efd> <5384> +<0efe> <5f79> +<0eff> <7d04> +<0f00> <85ac> +<0f01> <8a33> +<0f02> <8e8d> +<0f03> <9756> +<0f04> <67f3> +<0f05> <85ae> +<0f06> <9453> +<0f07> <6109> +<0f08> <6108> +<0f09> <6cb9> +<0f0a> <7652> +<0f0b> <8aed> +<0f0c> <8f38> +<0f0d> <552f> +<0f0e> <4f51> +<0f0f> <512a> +<0f10> <52c7> +<0f11> <53cb> +<0f12> <5ba5> +<0f13> <5e7d> +endbfchar + +100 beginbfchar +<0f14> <60a0> +<0f15> <6182> +<0f16> <63d6> +<0f17> <6709> +<0f18> <67da> +<0f19> <6e67> +<0f1a> <6d8c> +<0f1d> <7531> +<0f1e> <7950> +<0f1f> <88d5> +<0f20> <8a98> +<0f21> <904a> +<0f22> <9091> +<0f23> <90f5> +<0f24> <96c4> +<0f25> <878d> +<0f26> <5915> +<0f27> <4e88> +<0f28> <4f59> +<0f29> <4e0e> +<0f2a> <8a89> +<0f2b> <8f3f> +<0f2c> <9810> +<0f2d> <50ad> +<0f2e> <5e7c> +<0f2f> <5996> +<0f30> <5bb9> +<0f31> <5eb8> +<0f32> <63da> +<0f33> <63fa> +<0f34> <64c1> +<0f35> <66dc> +<0f36> <694a> +<0f37> <69d8> +<0f38> <6d0b> +<0f39> <6eb6> +<0f3a> <7194> +<0f3b> <7528> +<0f3c> <7aaf> +<0f3d> <7f8a> +<0f3e> <8000> +<0f3f> <8449> +<0f40> <84c9> +<0f41> <8981> +<0f42> <8b21> +<0f43> <8e0a> +<0f44> <9065> +<0f45> <967d> +<0f46> <990a> +<0f47> <617e> +<0f48> <6291> +<0f49> <6b32> +<0f4a> <6c83> +<0f4b> <6d74> +<0f4c> <7fcc> +<0f4d> <7ffc> +<0f4e> <6dc0> +<0f4f> <7f85> +<0f50> <87ba> +<0f51> <88f8> +<0f52> <6765> +<0f53> <83b1> +<0f54> <983c> +<0f55> <96f7> +<0f56> <6d1b> +<0f57> <7d61> +<0f58> <843d> +<0f59> <916a> +<0f5a> <4e71> +<0f5b> <5375> +<0f5c> <5d50> +<0f5d> <6b04> +<0f5e> <6feb> +<0f5f> <85cd> +<0f60> <862d> +<0f61> <89a7> +<0f62> <5229> +<0f63> <540f> +<0f64> <5c65> +<0f65> <674e> +<0f66> <68a8> +<0f67> <7406> +<0f68> <7483> +<0f69> <75e2> +<0f6a> <88cf> +<0f6b> <88e1> +<0f6c> <91cc> +<0f6d> <96e2> +<0f6e> <9678> +<0f6f> <5f8b> +<0f70> <7387> +<0f71> <7acb> +<0f72> <844e> +<0f73> <63a0> +<0f74> <7565> +<0f75> <5289> +<0f76> <6d41> +<0f77> <6e9c> +<0f78> <7409> +<0f79> <7559> +endbfchar + +100 beginbfchar +<0f7a> <786b> +<0f7b> <7c92> +<0f7c> <9686> +<0f7d> <7adc> +<0f7e> <9f8d> +<0f7f> <4fb6> +<0f80> <616e> +<0f81> <65c5> +<0f82> <865c> +<0f83> <4e86> +<0f84> <4eae> +<0f85> <50da> +<0f86> <4e21> +<0f87> <51cc> +<0f88> <5bee> +<0f89> <6599> +<0f8a> <6881> +<0f8b> <6dbc> +<0f8c> <731f> +<0f8d> <7642> +<0f8e> <77ad> +<0f8f> <7a1c> +<0f90> <7ce7> +<0f91> <826f> +<0f92> <8ad2> +<0f93> <907c> +<0f94> <91cf> +<0f95> <9675> +<0f96> <9818> +<0f97> <529b> +<0f98> <7dd1> +<0f99> <502b> +<0f9a> <5398> +<0f9b> <6797> +<0f9c> <6dcb> +<0f9d> <71d0> +<0f9e> <7433> +<0f9f> <81e8> +<0fa0> <8f2a> +<0fa1> <96a3> +<0fa2> <9c57> +<0fa3> <9e9f> +<0fa4> <7460> +<0fa5> <5841> +<0fa6> <6d99> +<0fa7> <7d2f> +<0fa8> <985e> +<0fa9> <4ee4> +<0faa> <4f36> +<0fab> <4f8b> +<0fac> <51b7> +<0fad> <52b1> +<0fae> <5dba> +<0faf> <601c> +<0fb0> <73b2> +<0fb1> <793c> +<0fb2> <82d3> +<0fb3> <9234> +<0fb4> <96b7> +<0fb5> <96f6> +<0fb6> <970a> +<0fb7> <9e97> +<0fb8> <9f62> +<0fb9> <66a6> +<0fba> <6b74> +<0fbb> <5217> +<0fbc> <52a3> +<0fbd> <70c8> +<0fbe> <88c2> +<0fbf> <5ec9> +<0fc0> <604b> +<0fc1> <6190> +<0fc2> <6f23> +<0fc3> <7149> +<0fc4> <7c3e> +<0fc5> <7df4> +<0fc6> <806f> +<0fc7> <84ee> +<0fc8> <9023> +<0fc9> <932c> +<0fca> <5442> +<0fcb> <9b6f> +<0fcc> <6ad3> +<0fcd> <7089> +<0fce> <8cc2> +<0fcf> <8def> +<0fd0> <9732> +<0fd1> <52b4> +<0fd2> <5a41> +<0fd3> <5eca> +<0fd4> <5f04> +<0fd5> <6717> +<0fd6> <697c> +<0fd7> <6994> +<0fd8> <6d6a> +<0fd9> <6f0f> +<0fda> <7262> +<0fdb> <72fc> +<0fdc> <7bed> +<0fdd> <8001> +endbfchar + +100 beginbfchar +<0fde> <807e> +<0fdf> <874b> +<0fe0> <90ce> +<0fe1> <516d> +<0fe2> <9e93> +<0fe3> <7984> +<0fe4> <808b> +<0fe5> <9332> +<0fe6> <8ad6> +<0fe7> <502d> +<0fe8> <548c> +<0fe9> <8a71> +<0fea> <6b6a> +<0feb> <8cc4> +<0fec> <8107> +<0fed> <60d1> +<0fee> <67a0> +<0fef> <9df2> +<0ff0> <4e99> +<0ff1> <4e98> +<0ff2> <9c10> +<0ff3> <8a6b> +<0ff4> <85c1> +<0ff5> <8568> +<0ff6> <6900> +<0ff7> <6e7e> +<0ff8> <7897> +<0ff9> <8155> +<0ffa> <5f0c> +<0ffb> <4e10> +<0ffc> <4e15> +<0ffd> <4e2a> +<0ffe> <4e31> +<0fff> <4e36> +<1000> <4e3c> +<1001> <4e3f> +<1002> <4e42> +<1003> <4e56> +<1004> <4e58> +<1005> <4e82> +<1006> <4e85> +<1007> <8c6b> +<1008> <4e8a> +<1009> <8212> +<100a> <5f0d> +<100b> <4e8e> +<100f> <4ea2> +<1010> <4eb0> +<1011> <4eb3> +<1012> <4eb6> +<1013> <4ece> +<1014> <4ecd> +<1015> <4ec4> +<1016> <4ec6> +<1017> <4ec2> +<1018> <4ed7> +<1019> <4ede> +<101a> <4eed> +<101b> <4edf> +<101c> <4ef7> +<101d> <4f09> +<101e> <4f5a> +<101f> <4f30> +<1020> <4f5b> +<1021> <4f5d> +<1022> <4f57> +<1023> <4f47> +<1024> <4f76> +<1025> <4f88> +<1026> <4f8f> +<1027> <4f98> +<1028> <4f7b> +<1029> <4f69> +<102a> <4f70> +<102b> <4f91> +<102c> <4f6f> +<102d> <4f86> +<102e> <4f96> +<102f> <5118> +<1030> <4fd4> +<1031> <4fdf> +<1032> <4fce> +<1033> <4fd8> +<1034> <4fdb> +<1035> <4fd1> +<1036> <4fda> +<1037> <4fd0> +<103a> <501a> +<103b> <5028> +<103c> <5014> +<103d> <502a> +<103e> <5025> +<103f> <5005> +<1040> <4f1c> +<1041> <4ff6> +<1042> <5021> +<1043> <5029> +<1044> <502c> +<1045> <4ffe> +<1046> <4fef> +endbfchar + +100 beginbfchar +<1047> <5011> +<1048> <5006> +<1049> <5043> +<104a> <5047> +<104b> <6703> +<104c> <5055> +<104d> <5050> +<104e> <5048> +<104f> <505a> +<1050> <5056> +<1051> <506c> +<1052> <5078> +<1053> <5080> +<1054> <509a> +<1055> <5085> +<1056> <50b4> +<1057> <50b2> +<105a> <50b3> +<105b> <50c2> +<105c> <50d6> +<105d> <50de> +<105e> <50e5> +<105f> <50ed> +<1060> <50e3> +<1061> <50ee> +<1062> <50f9> +<1063> <50f5> +<1064> <5109> +<1067> <5116> +<1068> <5115> +<1069> <5114> +<106a> <511a> +<106b> <5121> +<106c> <513a> +<106d> <5137> +<106e> <513c> +<106f> <513b> +<1072> <5152> +<1073> <514c> +<1074> <5154> +<1075> <5162> +<1076> <7af8> +<1079> <516e> +<107a> <5180> +<107b> <5182> +<107c> <56d8> +<107d> <518c> +<107e> <5189> +<107f> <518f> +<1080> <5191> +<1081> <5193> +<1084> <51a4> +<1085> <51a6> +<1086> <51a2> +<108a> <51b3> +<108d> <51b0> +<108e> <51b5> +<108f> <51bd> +<1090> <51c5> +<1091> <51c9> +<1092> <51db> +<1093> <51e0> +<1094> <8655> +<1095> <51e9> +<1096> <51ed> +<1097> <51f0> +<1098> <51f5> +<1099> <51fe> +<109a> <5204> +<109b> <520b> +<109c> <5214> +<109d> <520e> +<109e> <5227> +<109f> <522a> +<10a0> <522e> +<10a1> <5233> +<10a2> <5239> +<10a3> <524f> +<10a4> <5244> +<10a7> <525e> +<10a8> <5254> +<10a9> <526a> +<10aa> <5274> +<10ab> <5269> +<10ac> <5273> +<10ad> <527f> +<10ae> <527d> +<10af> <528d> +<10b0> <5294> +<10b1> <5292> +<10b2> <5271> +<10b3> <5288> +<10b4> <5291> +<10b5> <8fa8> +<10b6> <8fa7> +<10b9> <52bc> +<10ba> <52b5> +<10bb> <52c1> +<10bc> <52cd> +<10bd> <52d7> +endbfchar + +100 beginbfchar +<10be> <52de> +<10bf> <52e3> +<10c0> <52e6> +<10c1> <98ed> +<10c2> <52e0> +<10c3> <52f3> +<10c4> <52f5> +<10c7> <5306> +<10c8> <5308> +<10c9> <7538> +<10ca> <530d> +<10cb> <5310> +<10cc> <530f> +<10cd> <5315> +<10ce> <531a> +<10cf> <5323> +<10d0> <532f> +<10d1> <5331> +<10d2> <5333> +<10d3> <5338> +<10d4> <5340> +<10d5> <5346> +<10d6> <5345> +<10d7> <4e17> +<10d8> <5349> +<10d9> <534d> +<10da> <51d6> +<10db> <535e> +<10dc> <5369> +<10dd> <536e> +<10de> <5918> +<10df> <537b> +<10e0> <5377> +<10e1> <5382> +<10e2> <5396> +<10e3> <53a0> +<10e4> <53a6> +<10e5> <53a5> +<10e6> <53ae> +<10e7> <53b0> +<10e8> <53b6> +<10e9> <53c3> +<10ea> <7c12> +<10eb> <96d9> +<10ec> <53df> +<10ed> <66fc> +<10ee> <71ee> +<10ef> <53ee> +<10f0> <53e8> +<10f1> <53ed> +<10f2> <53fa> +<10f3> <5401> +<10f4> <543d> +<10f5> <5440> +<10f8> <543c> +<10f9> <542e> +<10fa> <5436> +<10fb> <5429> +<10fc> <541d> +<10fd> <544e> +<10fe> <548f> +<10ff> <5475> +<1100> <548e> +<1101> <545f> +<1102> <5471> +<1103> <5477> +<1104> <5470> +<1105> <5492> +<1106> <547b> +<1107> <5480> +<1108> <5476> +<1109> <5484> +<110a> <5490> +<110b> <5486> +<110c> <54c7> +<110d> <54a2> +<110e> <54b8> +<110f> <54a5> +<1110> <54ac> +<1111> <54c4> +<1112> <54c8> +<1113> <54a8> +<1114> <54ab> +<1115> <54c2> +<1116> <54a4> +<1117> <54be> +<1118> <54bc> +<1119> <54d8> +<111c> <550f> +<111d> <5514> +<111e> <54fd> +<111f> <54ee> +<1120> <54ed> +<1121> <54fa> +<1122> <54e2> +<1123> <5539> +<1124> <5540> +<1125> <5563> +<1126> <554c> +<1127> <552e> +endbfchar + +100 beginbfchar +<1128> <555c> +<1129> <5545> +<112c> <5538> +<112d> <5533> +<112e> <555d> +<112f> <5599> +<1130> <5580> +<1131> <54af> +<1132> <558a> +<1133> <559f> +<1134> <557b> +<1135> <557e> +<1136> <5598> +<1137> <559e> +<1138> <55ae> +<1139> <557c> +<113a> <5583> +<113b> <55a9> +<113c> <5587> +<113d> <55a8> +<113e> <55da> +<113f> <55c5> +<1140> <55df> +<1141> <55c4> +<1142> <55dc> +<1143> <55e4> +<1144> <55d4> +<1145> <5614> +<1146> <55f7> +<1147> <5616> +<1148> <55fe> +<1149> <55fd> +<114a> <561b> +<114b> <55f9> +<114c> <564e> +<114d> <5650> +<114e> <71df> +<114f> <5634> +<1150> <5636> +<1151> <5632> +<1152> <5638> +<1153> <566b> +<1154> <5664> +<1155> <562f> +<1156> <566c> +<1157> <566a> +<1158> <5686> +<1159> <5680> +<115a> <568a> +<115b> <56a0> +<115c> <5694> +<115d> <568f> +<115e> <56a5> +<115f> <56ae> +<1160> <56b6> +<1161> <56b4> +<1162> <56c2> +<1163> <56bc> +<1164> <56c1> +<1165> <56c3> +<1166> <56c0> +<1167> <56c8> +<1168> <56ce> +<1169> <56d1> +<116a> <56d3> +<116b> <56d7> +<116c> <56ee> +<116d> <56f9> +<116e> <5700> +<116f> <56ff> +<1170> <5704> +<1171> <5709> +<1172> <5708> +<1173> <570b> +<1174> <570d> +<1175> <5713> +<1176> <5718> +<1177> <5716> +<1178> <55c7> +<1179> <571c> +<117a> <5726> +<117d> <574e> +<117e> <573b> +<117f> <5740> +<1180> <574f> +<1181> <5769> +<1182> <57c0> +<1183> <5788> +<1184> <5761> +<1185> <577f> +<1186> <5789> +<1187> <5793> +<1188> <57a0> +<1189> <57b3> +<118a> <57a4> +<118b> <57aa> +<118c> <57b0> +<118d> <57c3> +<118e> <57c6> +<118f> <57d4> +endbfchar + +100 beginbfchar +<1192> <580a> +<1193> <57d6> +<1194> <57e3> +<1195> <580b> +<1196> <5819> +<1197> <581d> +<1198> <5872> +<1199> <5821> +<119a> <5862> +<119b> <584b> +<119c> <5870> +<119d> <6bc0> +<119e> <5852> +<119f> <583d> +<11a0> <5879> +<11a1> <5885> +<11a2> <58b9> +<11a3> <589f> +<11a4> <58ab> +<11a5> <58ba> +<11a6> <58de> +<11a7> <58bb> +<11a8> <58b8> +<11a9> <58ae> +<11aa> <58c5> +<11ab> <58d3> +<11ac> <58d1> +<11ad> <58d7> +<11ae> <58d9> +<11af> <58d8> +<11b0> <58e5> +<11b1> <58dc> +<11b2> <58e4> +<11b3> <58df> +<11b4> <58ef> +<11b5> <58fa> +<11b6> <58f9> +<11ba> <5902> +<11bb> <590a> +<11bc> <5910> +<11bd> <591b> +<11be> <68a6> +<11bf> <5925> +<11c2> <5932> +<11c3> <5938> +<11c4> <593e> +<11c5> <7ad2> +<11c6> <5955> +<11c7> <5950> +<11c8> <594e> +<11c9> <595a> +<11ca> <5958> +<11cb> <5962> +<11cc> <5960> +<11cd> <5967> +<11ce> <596c> +<11cf> <5969> +<11d0> <5978> +<11d1> <5981> +<11d2> <599d> +<11d3> <4f5e> +<11d4> <4fab> +<11d5> <59a3> +<11d6> <59b2> +<11d7> <59c6> +<11d8> <59e8> +<11d9> <59dc> +<11da> <598d> +<11dd> <5a25> +<11de> <5a1f> +<11df> <5a11> +<11e0> <5a1c> +<11e1> <5a09> +<11e2> <5a1a> +<11e3> <5a40> +<11e4> <5a6c> +<11e5> <5a49> +<11e8> <5a62> +<11e9> <5a6a> +<11ea> <5a9a> +<11eb> <5abc> +<11ec> <5abe> +<11ed> <5acb> +<11ee> <5ac2> +<11ef> <5abd> +<11f0> <5ae3> +<11f1> <5ad7> +<11f2> <5ae6> +<11f3> <5ae9> +<11f4> <5ad6> +<11f7> <5b0c> +<11f8> <5b0b> +<11f9> <5b16> +<11fa> <5b32> +<11fb> <5ad0> +<11fc> <5b2a> +<11fd> <5b36> +<11fe> <5b3e> +<11ff> <5b43> +<1200> <5b45> +endbfchar + +100 beginbfchar +<1201> <5b40> +<1202> <5b51> +<1203> <5b55> +<1206> <5b65> +<1207> <5b69> +<1208> <5b70> +<1209> <5b73> +<120a> <5b75> +<120b> <5b78> +<120c> <6588> +<120d> <5b7a> +<120e> <5b80> +<120f> <5b83> +<1210> <5ba6> +<1211> <5bb8> +<1212> <5bc3> +<1213> <5bc7> +<1214> <5bc9> +<1215> <5bd4> +<1216> <5bd0> +<1217> <5be4> +<1218> <5be6> +<1219> <5be2> +<121a> <5bde> +<121b> <5be5> +<121c> <5beb> +<121d> <5bf0> +<121e> <5bf6> +<121f> <5bf3> +<1220> <5c05> +<1223> <5c0d> +<1224> <5c13> +<1225> <5c20> +<1226> <5c22> +<1227> <5c28> +<122a> <5c41> +<122b> <5c46> +<122c> <5c4e> +<122d> <5c53> +<122e> <5c50> +<122f> <5c4f> +<1230> <5b71> +<1231> <5c6c> +<1232> <5c6e> +<1233> <4e62> +<1234> <5c76> +<1235> <5c79> +<1236> <5c8c> +<1237> <5c91> +<1238> <5c94> +<1239> <599b> +<123a> <5cab> +<123b> <5cbb> +<123c> <5cb6> +<123d> <5cbc> +<123e> <5cb7> +<123f> <5cc5> +<1240> <5cbe> +<1241> <5cc7> +<1242> <5cd9> +<1243> <5ce9> +<1244> <5cfd> +<1245> <5cfa> +<1246> <5ced> +<1247> <5d8c> +<1248> <5cea> +<1249> <5d0b> +<124a> <5d15> +<124b> <5d17> +<124c> <5d5c> +<124d> <5d1f> +<124e> <5d1b> +<124f> <5d11> +<1250> <5d14> +<1251> <5d22> +<1252> <5d1a> +<1253> <5d19> +<1254> <5d18> +<1255> <5d4c> +<1256> <5d52> +<1257> <5d4e> +<1258> <5d4b> +<1259> <5d6c> +<125a> <5d73> +<125b> <5d76> +<125c> <5d87> +<125d> <5d84> +<125e> <5d82> +<125f> <5da2> +<1260> <5d9d> +<1261> <5dac> +<1262> <5dae> +<1263> <5dbd> +<1264> <5d90> +<1265> <5db7> +<1266> <5dbc> +<1267> <5dc9> +<1268> <5dcd> +<1269> <5dd3> +<126a> <5dd2> +endbfchar + +100 beginbfchar +<126b> <5dd6> +<126c> <5ddb> +<126d> <5deb> +<126e> <5df2> +<126f> <5df5> +<1270> <5e0b> +<1271> <5e1a> +<1272> <5e19> +<1273> <5e11> +<1274> <5e1b> +<1277> <5e44> +<1278> <5e43> +<1279> <5e40> +<127a> <5e4e> +<127b> <5e57> +<127c> <5e54> +<127d> <5e5f> +<127e> <5e62> +<127f> <5e64> +<1280> <5e47> +<1283> <5e7a> +<1284> <9ebc> +<1285> <5e7f> +<1286> <5ea0> +<1289> <5ec8> +<128a> <5ed0> +<128b> <5ecf> +<128c> <5ed6> +<128d> <5ee3> +<128e> <5edd> +<1291> <5ee2> +<1292> <5ee1> +<1295> <5eec> +<1296> <5ef1> +<1297> <5ef3> +<1298> <5ef0> +<1299> <5ef4> +<129a> <5ef8> +<129b> <5efe> +<129c> <5f03> +<129d> <5f09> +<129e> <5f5d> +<129f> <5f5c> +<12a0> <5f0b> +<12a1> <5f11> +<12a2> <5f16> +<12a3> <5f29> +<12a4> <5f2d> +<12a5> <5f38> +<12a6> <5f41> +<12a7> <5f48> +<12a8> <5f4c> +<12a9> <5f4e> +<12aa> <5f2f> +<12ab> <5f51> +<12ae> <5f59> +<12af> <5f61> +<12b0> <5f6d> +<12b1> <5f73> +<12b2> <5f77> +<12b3> <5f83> +<12b4> <5f82> +<12b5> <5f7f> +<12b6> <5f8a> +<12b7> <5f88> +<12b8> <5f91> +<12b9> <5f87> +<12ba> <5f9e> +<12bb> <5f99> +<12bc> <5f98> +<12bd> <5fa0> +<12be> <5fa8> +<12bf> <5fad> +<12c0> <5fbc> +<12c1> <5fd6> +<12c2> <5ffb> +<12c3> <5fe4> +<12c4> <5ff8> +<12c5> <5ff1> +<12c6> <5fdd> +<12c7> <60b3> +<12c8> <5fff> +<12c9> <6021> +<12ca> <6060> +<12cb> <6019> +<12cc> <6010> +<12cd> <6029> +<12ce> <600e> +<12cf> <6031> +<12d0> <601b> +<12d1> <6015> +<12d2> <602b> +<12d3> <6026> +<12d4> <600f> +<12d5> <603a> +<12d6> <605a> +<12d7> <6041> +<12d8> <606a> +<12d9> <6077> +<12da> <605f> +endbfchar + +100 beginbfchar +<12db> <604a> +<12dc> <6046> +<12dd> <604d> +<12de> <6063> +<12df> <6043> +<12e0> <6064> +<12e1> <6042> +<12e2> <606c> +<12e3> <606b> +<12e4> <6059> +<12e5> <6081> +<12e6> <608d> +<12e7> <60e7> +<12e8> <6083> +<12e9> <609a> +<12ea> <6084> +<12eb> <609b> +<12ee> <6092> +<12ef> <60a7> +<12f0> <608b> +<12f1> <60e1> +<12f2> <60b8> +<12f3> <60e0> +<12f4> <60d3> +<12f5> <60b4> +<12f6> <5ff0> +<12f7> <60bd> +<12f8> <60c6> +<12f9> <60b5> +<12fa> <60d8> +<12fb> <614d> +<12fc> <6115> +<12fd> <6106> +<1300> <6100> +<1301> <60f4> +<1302> <60fa> +<1303> <6103> +<1304> <6121> +<1305> <60fb> +<1306> <60f1> +<1309> <6147> +<130a> <613e> +<130b> <6128> +<130c> <6127> +<130d> <614a> +<130e> <613f> +<130f> <613c> +<1310> <612c> +<1311> <6134> +<1312> <613d> +<1313> <6142> +<1314> <6144> +<1315> <6173> +<1316> <6177> +<131a> <616b> +<131b> <6174> +<131c> <616f> +<131d> <6165> +<131e> <6171> +<131f> <615f> +<1320> <615d> +<1321> <6153> +<1322> <6175> +<1323> <6199> +<1324> <6196> +<1325> <6187> +<1326> <61ac> +<1327> <6194> +<1328> <619a> +<1329> <618a> +<132a> <6191> +<132b> <61ab> +<132c> <61ae> +<132d> <61cc> +<132e> <61ca> +<132f> <61c9> +<1330> <61f7> +<1331> <61c8> +<1332> <61c3> +<1333> <61c6> +<1334> <61ba> +<1335> <61cb> +<1336> <7f79> +<1337> <61cd> +<1338> <61e6> +<1339> <61e3> +<133a> <61f6> +<133b> <61fa> +<133c> <61f4> +<133d> <61ff> +<133e> <61fd> +<133f> <61fc> +<1340> <61fe> +<1341> <6200> +<1344> <620d> +<1345> <620c> +<1346> <6214> +<1347> <621b> +<1348> <621e> +<1349> <6221> +endbfchar + +100 beginbfchar +<134a> <622a> +<134b> <622e> +<134c> <6230> +<134f> <6241> +<1350> <624e> +<1351> <625e> +<1352> <6263> +<1353> <625b> +<1354> <6260> +<1355> <6268> +<1356> <627c> +<1357> <6282> +<1358> <6289> +<1359> <627e> +<135c> <6296> +<135d> <62d4> +<135e> <6283> +<135f> <6294> +<1360> <62d7> +<1361> <62d1> +<1362> <62bb> +<1363> <62cf> +<1364> <62ff> +<1365> <62c6> +<1366> <64d4> +<1367> <62c8> +<1368> <62dc> +<1369> <62cc> +<136a> <62ca> +<136b> <62c2> +<136c> <62c7> +<136d> <629b> +<136e> <62c9> +<136f> <630c> +<1370> <62ee> +<1371> <62f1> +<1372> <6327> +<1373> <6302> +<1374> <6308> +<1375> <62ef> +<1376> <62f5> +<1377> <6350> +<1378> <633e> +<1379> <634d> +<137a> <641c> +<137b> <634f> +<137c> <6396> +<137d> <638e> +<137e> <6380> +<137f> <63ab> +<1380> <6376> +<1381> <63a3> +<1382> <638f> +<1383> <6389> +<1384> <639f> +<1385> <63b5> +<1386> <636b> +<1387> <6369> +<1388> <63be> +<1389> <63e9> +<138a> <63c0> +<138b> <63c6> +<138c> <63e3> +<138d> <63c9> +<138e> <63d2> +<138f> <63f6> +<1390> <63c4> +<1391> <6416> +<1392> <6434> +<1393> <6406> +<1394> <6413> +<1395> <6426> +<1396> <6436> +<1397> <651d> +<1398> <6417> +<1399> <6428> +<139a> <640f> +<139b> <6467> +<139c> <646f> +<139d> <6476> +<139e> <644e> +<139f> <652a> +<13a0> <6495> +<13a1> <6493> +<13a2> <64a5> +<13a3> <64a9> +<13a4> <6488> +<13a5> <64bc> +<13a6> <64da> +<13a7> <64d2> +<13a8> <64c5> +<13a9> <64c7> +<13aa> <64bb> +<13ab> <64d8> +<13ac> <64c2> +<13ad> <64f1> +<13ae> <64e7> +<13af> <8209> +<13b2> <62ac> +<13b3> <64e3> +endbfchar + +100 beginbfchar +<13b4> <64ef> +<13b5> <652c> +<13b6> <64f6> +<13b7> <64f4> +<13b8> <64f2> +<13b9> <64fa> +<13ba> <6500> +<13bb> <64fd> +<13bc> <6518> +<13bd> <651c> +<13be> <6505> +<13bf> <6524> +<13c0> <6523> +<13c1> <652b> +<13c4> <6537> +<13c5> <6536> +<13c6> <6538> +<13c7> <754b> +<13c8> <6548> +<13c9> <6556> +<13ca> <6555> +<13cb> <654d> +<13cc> <6558> +<13cd> <655e> +<13ce> <655d> +<13cf> <6572> +<13d0> <6578> +<13d3> <8b8a> +<13d4> <659b> +<13d5> <659f> +<13d6> <65ab> +<13d7> <65b7> +<13d8> <65c3> +<13d9> <65c6> +<13da> <65c1> +<13db> <65c4> +<13dc> <65cc> +<13dd> <65d2> +<13de> <65db> +<13df> <65d9> +<13e2> <65f1> +<13e3> <6772> +<13e4> <660a> +<13e5> <6603> +<13e6> <65fb> +<13e7> <6773> +<13ea> <6634> +<13eb> <661c> +<13ec> <664f> +<13ed> <6644> +<13ee> <6649> +<13ef> <6641> +<13f0> <665e> +<13f1> <665d> +<13f2> <6664> +<13f5> <665f> +<13f6> <6662> +<13f7> <6670> +<13f8> <6683> +<13f9> <6688> +<13fa> <668e> +<13fb> <6689> +<13fc> <6684> +<13fd> <6698> +<13fe> <669d> +<13ff> <66c1> +<1400> <66b9> +<1401> <66c9> +<1402> <66be> +<1403> <66bc> +<1404> <66c4> +<1405> <66b8> +<1406> <66d6> +<1407> <66da> +<1408> <66e0> +<1409> <663f> +<140a> <66e6> +<140b> <66e9> +<140c> <66f0> +<140d> <66f5> +<140e> <66f7> +<140f> <670f> +<1410> <6716> +<1411> <671e> +<1414> <9738> +<1415> <672e> +<1416> <673f> +<1417> <6736> +<1418> <6741> +<1419> <6738> +<141a> <6737> +<141b> <6746> +<141c> <675e> +<141d> <6760> +<141e> <6759> +<1421> <6789> +<1422> <6770> +<1423> <67a9> +<1424> <677c> +<1425> <676a> +endbfchar + +100 beginbfchar +<1426> <678c> +<1427> <678b> +<1428> <67a6> +<1429> <67a1> +<142a> <6785> +<142b> <67b7> +<142c> <67ef> +<142d> <67b4> +<142e> <67ec> +<142f> <67b3> +<1430> <67e9> +<1431> <67b8> +<1432> <67e4> +<1433> <67de> +<1434> <67dd> +<1435> <67e2> +<1436> <67ee> +<1437> <67b9> +<1438> <67ce> +<1439> <67c6> +<143a> <67e7> +<143b> <6a9c> +<143c> <681e> +<143d> <6846> +<143e> <6829> +<143f> <6840> +<1440> <684d> +<1441> <6832> +<1442> <684e> +<1443> <68b3> +<1444> <682b> +<1445> <6859> +<1446> <6863> +<1447> <6877> +<1448> <687f> +<1449> <689f> +<144a> <688f> +<144b> <68ad> +<144c> <6894> +<144d> <689d> +<144e> <689b> +<144f> <6883> +<1450> <6aae> +<1451> <68b9> +<1452> <6874> +<1453> <68b5> +<1454> <68a0> +<1455> <68ba> +<1456> <690f> +<1457> <688d> +<1458> <687e> +<1459> <6901> +<145a> <68ca> +<145b> <6908> +<145c> <68d8> +<145d> <6922> +<145e> <6926> +<145f> <68e1> +<1460> <690c> +<1461> <68cd> +<1462> <68d4> +<1463> <68e7> +<1464> <68d5> +<1465> <6936> +<1466> <6912> +<1467> <6904> +<1468> <68d7> +<1469> <68e3> +<146a> <6925> +<146b> <68f9> +<146c> <68e0> +<146d> <68ef> +<146e> <6928> +<146f> <692a> +<1470> <691a> +<1471> <6923> +<1472> <6921> +<1473> <68c6> +<1474> <6979> +<1475> <6977> +<1476> <695c> +<1477> <6978> +<1478> <696b> +<1479> <6954> +<147a> <697e> +<147b> <696e> +<147c> <6939> +<147d> <6974> +<147e> <693d> +<147f> <6959> +<1480> <6930> +<1481> <6961> +<1482> <695e> +<1483> <695d> +<1484> <6981> +<1485> <696a> +<1486> <69b2> +<1487> <69ae> +<1488> <69d0> +<1489> <69bf> +endbfchar + +100 beginbfchar +<148a> <69c1> +<148b> <69d3> +<148c> <69be> +<148d> <69ce> +<148e> <5be8> +<148f> <69ca> +<1490> <69dd> +<1491> <69bb> +<1492> <69c3> +<1493> <69a7> +<1494> <6a2e> +<1495> <6991> +<1496> <69a0> +<1497> <699c> +<1498> <6995> +<1499> <69b4> +<149a> <69de> +<149b> <69e8> +<149c> <6a02> +<149d> <6a1b> +<149e> <69ff> +<149f> <6b0a> +<14a0> <69f9> +<14a1> <69f2> +<14a2> <69e7> +<14a3> <6a05> +<14a4> <69b1> +<14a5> <6a1e> +<14a6> <69ed> +<14a7> <6a14> +<14a8> <69eb> +<14a9> <6a0a> +<14aa> <6a12> +<14ab> <6ac1> +<14ac> <6a23> +<14ad> <6a13> +<14ae> <6a44> +<14af> <6a0c> +<14b0> <6a72> +<14b1> <6a36> +<14b2> <6a78> +<14b3> <6a47> +<14b4> <6a62> +<14b5> <6a59> +<14b6> <6a66> +<14b7> <6a48> +<14b8> <6a38> +<14b9> <6a22> +<14ba> <6a90> +<14bb> <6a8d> +<14bc> <6aa0> +<14bd> <6a84> +<14c0> <6a97> +<14c1> <8617> +<14c2> <6abb> +<14c3> <6ac3> +<14c4> <6ac2> +<14c5> <6ab8> +<14c6> <6ab3> +<14c7> <6aac> +<14c8> <6ade> +<14c9> <6ad1> +<14ca> <6adf> +<14cb> <6aaa> +<14cc> <6ada> +<14cd> <6aea> +<14ce> <6afb> +<14cf> <6b05> +<14d0> <8616> +<14d1> <6afa> +<14d2> <6b12> +<14d3> <6b16> +<14d4> <9b31> +<14d5> <6b1f> +<14d6> <6b38> +<14d7> <6b37> +<14d8> <76dc> +<14d9> <6b39> +<14da> <98ee> +<14db> <6b47> +<14dc> <6b43> +<14dd> <6b49> +<14de> <6b50> +<14df> <6b59> +<14e0> <6b54> +<14e1> <6b5b> +<14e2> <6b5f> +<14e3> <6b61> +<14e8> <6b84> +<14e9> <6b83> +<14ea> <6b8d> +<14eb> <6b98> +<14ec> <6b95> +<14ed> <6b9e> +<14ee> <6ba4> +<14f1> <6baf> +<14f2> <6bb2> +<14f3> <6bb1> +<14f4> <6bb3> +<14f5> <6bb7> +endbfchar + +100 beginbfchar +<14f6> <6bbc> +<14f7> <6bc6> +<14f8> <6bcb> +<14f9> <6bd3> +<14fa> <6bdf> +<14fb> <6bec> +<14fc> <6beb> +<14fd> <6bf3> +<14fe> <6bef> +<14ff> <9ebe> +<1500> <6c08> +<1503> <6c1b> +<1504> <6c24> +<1505> <6c23> +<1506> <6c5e> +<1507> <6c55> +<1508> <6c62> +<1509> <6c6a> +<150a> <6c82> +<150b> <6c8d> +<150c> <6c9a> +<150d> <6c81> +<150e> <6c9b> +<150f> <6c7e> +<1510> <6c68> +<1511> <6c73> +<1512> <6c92> +<1513> <6c90> +<1514> <6cc4> +<1515> <6cf1> +<1516> <6cd3> +<1517> <6cbd> +<1518> <6cd7> +<1519> <6cc5> +<151a> <6cdd> +<151b> <6cae> +<151c> <6cb1> +<151d> <6cbe> +<151e> <6cba> +<151f> <6cdb> +<1520> <6cef> +<1521> <6cd9> +<1522> <6cea> +<1523> <6d1f> +<1524> <884d> +<1525> <6d36> +<1526> <6d2b> +<1527> <6d3d> +<1528> <6d38> +<1529> <6d19> +<152a> <6d35> +<152b> <6d33> +<152c> <6d12> +<152d> <6d0c> +<152e> <6d63> +<152f> <6d93> +<1530> <6d64> +<1531> <6d5a> +<1532> <6d79> +<1533> <6d59> +<1534> <6d8e> +<1535> <6d95> +<1536> <6fe4> +<1537> <6d85> +<1538> <6df9> +<1539> <6e15> +<153a> <6e0a> +<153b> <6db5> +<153c> <6dc7> +<153d> <6de6> +<153e> <6db8> +<153f> <6dc6> +<1540> <6dec> +<1541> <6dde> +<1542> <6dcc> +<1543> <6de8> +<1544> <6dd2> +<1545> <6dc5> +<1546> <6dfa> +<1547> <6dd9> +<1548> <6de4> +<1549> <6dd5> +<154a> <6dea> +<154b> <6dee> +<154c> <6e2d> +<154d> <6e6e> +<154e> <6e2e> +<154f> <6e19> +<1550> <6e72> +<1551> <6e5f> +<1552> <6e3e> +<1553> <6e23> +<1554> <6e6b> +<1555> <6e2b> +<1556> <6e76> +<1557> <6e4d> +<1558> <6e1f> +<1559> <6e43> +<155a> <6e3a> +<155b> <6e4e> +endbfchar + +100 beginbfchar +<155c> <6e24> +<155d> <6eff> +<155e> <6e1d> +<155f> <6e38> +<1560> <6e82> +<1561> <6eaa> +<1562> <6e98> +<1563> <6ec9> +<1564> <6eb7> +<1565> <6ed3> +<1566> <6ebd> +<1567> <6eaf> +<1568> <6ec4> +<1569> <6eb2> +<156c> <6e8f> +<156d> <6ea5> +<156e> <6ec2> +<156f> <6e9f> +<1570> <6f41> +<1571> <6f11> +<1572> <704c> +<1573> <6eec> +<1574> <6ef8> +<1575> <6efe> +<1576> <6f3f> +<1577> <6ef2> +<1578> <6f31> +<1579> <6eef> +<157a> <6f32> +<157b> <6ecc> +<157c> <6f3e> +<157d> <6f13> +<157e> <6ef7> +<157f> <6f86> +<1580> <6f7a> +<1581> <6f78> +<1582> <6f81> +<1583> <6f80> +<1584> <6f6f> +<1585> <6f5b> +<1586> <6ff3> +<1587> <6f6d> +<1588> <6f82> +<1589> <6f7c> +<158a> <6f58> +<158b> <6f8e> +<158c> <6f91> +<158d> <6fc2> +<158e> <6f66> +<158f> <6fb3> +<1590> <6fa3> +<1591> <6fa1> +<1592> <6fa4> +<1593> <6fb9> +<1594> <6fc6> +<1595> <6faa> +<1596> <6fdf> +<1597> <6fd5> +<1598> <6fec> +<1599> <6fd4> +<159a> <6fd8> +<159b> <6ff1> +<159c> <6fee> +<159d> <6fdb> +<159e> <7009> +<159f> <700b> +<15a0> <6ffa> +<15a1> <7011> +<15a2> <7001> +<15a3> <700f> +<15a4> <6ffe> +<15a5> <701b> +<15a6> <701a> +<15a7> <6f74> +<15a8> <701d> +<15a9> <7018> +<15aa> <701f> +<15ab> <7030> +<15ac> <703e> +<15ad> <7032> +<15ae> <7051> +<15af> <7063> +<15b0> <7099> +<15b1> <7092> +<15b2> <70af> +<15b3> <70f1> +<15b4> <70ac> +<15b5> <70b8> +<15b6> <70b3> +<15b7> <70ae> +<15b8> <70df> +<15b9> <70cb> +<15ba> <70dd> +<15bb> <70d9> +<15bc> <7109> +<15bd> <70fd> +<15be> <711c> +<15bf> <7119> +<15c0> <7165> +<15c1> <7155> +endbfchar + +100 beginbfchar +<15c2> <7188> +<15c3> <7166> +<15c4> <7162> +<15c5> <714c> +<15c6> <7156> +<15c7> <716c> +<15c8> <718f> +<15c9> <71fb> +<15ca> <7184> +<15cb> <7195> +<15cc> <71a8> +<15cd> <71ac> +<15ce> <71d7> +<15cf> <71b9> +<15d0> <71be> +<15d1> <71d2> +<15d2> <71c9> +<15d3> <71d4> +<15d4> <71ce> +<15d5> <71e0> +<15d6> <71ec> +<15d7> <71e7> +<15d8> <71f5> +<15d9> <71fc> +<15da> <71f9> +<15db> <71ff> +<15dc> <720d> +<15dd> <7210> +<15de> <721b> +<15df> <7228> +<15e0> <722d> +<15e1> <722c> +<15e2> <7230> +<15e3> <7232> +<15e8> <7246> +<15e9> <724b> +<15ea> <7258> +<15eb> <7274> +<15ec> <727e> +<15ed> <7282> +<15ee> <7281> +<15ef> <7287> +<15f0> <7292> +<15f1> <7296> +<15f2> <72a2> +<15f3> <72a7> +<15f4> <72b9> +<15f5> <72b2> +<15f6> <72c3> +<15f7> <72c6> +<15f8> <72c4> +<15f9> <72ce> +<15fa> <72d2> +<15fb> <72e2> +<15fe> <72f9> +<15ff> <72f7> +<1600> <500f> +<1601> <7317> +<1602> <730a> +<1603> <731c> +<1604> <7316> +<1605> <731d> +<1606> <7334> +<1607> <732f> +<1608> <7329> +<1609> <7325> +<160a> <733e> +<160d> <9ed8> +<160e> <7357> +<160f> <736a> +<1610> <7368> +<1611> <7370> +<1612> <7378> +<1613> <7375> +<1614> <737b> +<1615> <737a> +<1616> <73c8> +<1617> <73b3> +<1618> <73ce> +<1619> <73bb> +<161a> <73c0> +<161b> <73e5> +<161c> <73ee> +<161d> <73de> +<161e> <74a2> +<161f> <7405> +<1620> <746f> +<1621> <7425> +<1622> <73f8> +<1623> <7432> +<1624> <743a> +<1625> <7455> +<1626> <743f> +<1627> <745f> +<1628> <7459> +<1629> <7441> +<162a> <745c> +<162b> <7469> +<162c> <7470> +<162d> <7463> +endbfchar + +100 beginbfchar +<162e> <746a> +<162f> <7476> +<1630> <747e> +<1631> <748b> +<1632> <749e> +<1633> <74a7> +<1634> <74ca> +<1635> <74cf> +<1636> <74d4> +<1637> <73f1> +<1638> <74e0> +<1639> <74e3> +<163a> <74e7> +<163b> <74e9> +<163c> <74ee> +<163d> <74f2> +<1640> <74f8> +<1641> <74f7> +<1642> <7504> +<1643> <7503> +<1644> <7505> +<1645> <750c> +<1646> <750e> +<1647> <750d> +<1648> <7515> +<1649> <7513> +<164a> <751e> +<164b> <7526> +<164c> <752c> +<164d> <753c> +<164e> <7544> +<164f> <754d> +<1650> <754a> +<1651> <7549> +<1652> <755b> +<1653> <7546> +<1654> <755a> +<1655> <7569> +<1656> <7564> +<1657> <7567> +<1658> <756b> +<1659> <756d> +<165a> <7578> +<165b> <7576> +<165e> <7574> +<165f> <758a> +<1660> <7589> +<1661> <7582> +<1662> <7594> +<1663> <759a> +<1664> <759d> +<1665> <75a5> +<1666> <75a3> +<1667> <75c2> +<1668> <75b3> +<1669> <75c3> +<166a> <75b5> +<166b> <75bd> +<166c> <75b8> +<166d> <75bc> +<166e> <75b1> +<166f> <75cd> +<1670> <75ca> +<1671> <75d2> +<1672> <75d9> +<1673> <75e3> +<1674> <75de> +<1677> <75fc> +<1678> <7601> +<1679> <75f0> +<167a> <75fa> +<167d> <760b> +<167e> <760d> +<167f> <7609> +<1680> <761f> +<1681> <7627> +<1685> <7624> +<1686> <7634> +<1687> <7630> +<1688> <763b> +<168b> <7646> +<168c> <765c> +<168d> <7658> +<1693> <7667> +<1694> <766c> +<1695> <7670> +<1696> <7672> +<1697> <7676> +<1698> <7678> +<1699> <767c> +<169a> <7680> +<169b> <7683> +<169c> <7688> +<169d> <768b> +<169e> <768e> +<169f> <7696> +<16a0> <7693> +<16a3> <76b0> +<16a4> <76b4> +<16a8> <76c2> +endbfchar + +100 beginbfchar +<16a9> <76cd> +<16aa> <76d6> +<16ab> <76d2> +<16ac> <76de> +<16ad> <76e1> +<16ae> <76e5> +<16af> <76e7> +<16b0> <76ea> +<16b1> <862f> +<16b2> <76fb> +<16b3> <7708> +<16b4> <7707> +<16b5> <7704> +<16b6> <7729> +<16b7> <7724> +<16b8> <771e> +<16bb> <771b> +<16be> <7747> +<16bf> <775a> +<16c0> <7768> +<16c1> <776b> +<16c2> <775b> +<16c3> <7765> +<16c4> <777f> +<16c5> <777e> +<16c6> <7779> +<16c7> <778e> +<16c8> <778b> +<16c9> <7791> +<16ca> <77a0> +<16cb> <779e> +<16cc> <77b0> +<16cd> <77b6> +<16ce> <77b9> +<16cf> <77bf> +<16d2> <77bb> +<16d3> <77c7> +<16d4> <77cd> +<16d5> <77d7> +<16d6> <77da> +<16d7> <77dc> +<16d8> <77e3> +<16d9> <77ee> +<16da> <77fc> +<16db> <780c> +<16dc> <7812> +<16dd> <7926> +<16de> <7820> +<16df> <792a> +<16e0> <7845> +<16e1> <788e> +<16e2> <7874> +<16e3> <7886> +<16e4> <787c> +<16e5> <789a> +<16e6> <788c> +<16e7> <78a3> +<16e8> <78b5> +<16e9> <78aa> +<16ea> <78af> +<16eb> <78d1> +<16ec> <78c6> +<16ed> <78cb> +<16ee> <78d4> +<16ef> <78be> +<16f0> <78bc> +<16f1> <78c5> +<16f2> <78ca> +<16f3> <78ec> +<16f4> <78e7> +<16f5> <78da> +<16f6> <78fd> +<16f7> <78f4> +<16f8> <7907> +<16f9> <7912> +<16fa> <7911> +<16fb> <7919> +<16fc> <792c> +<16fd> <792b> +<16fe> <7940> +<16ff> <7960> +<1700> <7957> +<1701> <795f> +<1702> <795a> +<1703> <7955> +<1704> <7953> +<1705> <797a> +<1706> <797f> +<1707> <798a> +<1708> <799d> +<1709> <79a7> +<170a> <9f4b> +<170b> <79aa> +<170c> <79ae> +<170d> <79b3> +<1710> <79c9> +<1711> <79d5> +<1712> <79e7> +<1713> <79ec> +<1714> <79e1> +endbfchar + +100 beginbfchar +<1715> <79e3> +<1716> <7a08> +<1717> <7a0d> +<171a> <7a20> +<171b> <7a1f> +<171c> <7980> +<171d> <7a31> +<171e> <7a3b> +<171f> <7a3e> +<1720> <7a37> +<1721> <7a43> +<1722> <7a57> +<1723> <7a49> +<1726> <7a69> +<1727> <9f9d> +<1728> <7a70> +<1729> <7a79> +<172a> <7a7d> +<172b> <7a88> +<172c> <7a97> +<172d> <7a95> +<172e> <7a98> +<172f> <7a96> +<1730> <7aa9> +<1731> <7ac8> +<1732> <7ab0> +<1733> <7ab6> +<1734> <7ac5> +<1735> <7ac4> +<1736> <7abf> +<1737> <9083> +<1738> <7ac7> +<1739> <7aca> +<173a> <7acd> +<173b> <7acf> +<173c> <7ad5> +<173d> <7ad3> +<1740> <7add> +<1743> <7ae6> +<1744> <7aed> +<1745> <7af0> +<1746> <7b02> +<1747> <7b0f> +<1748> <7b0a> +<1749> <7b06> +<174a> <7b33> +<174d> <7b1e> +<174e> <7b35> +<174f> <7b28> +<1750> <7b36> +<1751> <7b50> +<1752> <7b7a> +<1753> <7b04> +<1754> <7b4d> +<1755> <7b0b> +<1756> <7b4c> +<1757> <7b45> +<1758> <7b75> +<1759> <7b65> +<175a> <7b74> +<175b> <7b67> +<175e> <7b6c> +<175f> <7b6e> +<1760> <7b9d> +<1761> <7b98> +<1762> <7b9f> +<1763> <7b8d> +<1764> <7b9c> +<1765> <7b9a> +<1766> <7b8b> +<1767> <7b92> +<1768> <7b8f> +<1769> <7b5d> +<176a> <7b99> +<176b> <7bcb> +<176c> <7bc1> +<176d> <7bcc> +<176e> <7bcf> +<176f> <7bb4> +<1770> <7bc6> +<1771> <7bdd> +<1772> <7be9> +<1773> <7c11> +<1774> <7c14> +<1775> <7be6> +<1776> <7be5> +<1777> <7c60> +<1778> <7c00> +<1779> <7c07> +<177a> <7c13> +<177b> <7bf3> +<177c> <7bf7> +<177d> <7c17> +<177e> <7c0d> +<177f> <7bf6> +<1780> <7c23> +<1781> <7c27> +<1782> <7c2a> +<1783> <7c1f> +<1784> <7c37> +endbfchar + +100 beginbfchar +<1785> <7c2b> +<1786> <7c3d> +<1787> <7c4c> +<1788> <7c43> +<1789> <7c54> +<178a> <7c4f> +<178b> <7c40> +<178c> <7c50> +<178d> <7c58> +<178e> <7c5f> +<178f> <7c64> +<1790> <7c56> +<1791> <7c65> +<1792> <7c6c> +<1793> <7c75> +<1794> <7c83> +<1795> <7c90> +<1796> <7ca4> +<1797> <7cad> +<1798> <7ca2> +<1799> <7cab> +<179a> <7ca1> +<179b> <7ca8> +<179c> <7cb3> +<179d> <7cb2> +<179e> <7cb1> +<179f> <7cae> +<17a0> <7cb9> +<17a1> <7cbd> +<17a2> <7cc0> +<17a3> <7cc5> +<17a4> <7cc2> +<17a5> <7cd8> +<17a6> <7cd2> +<17a7> <7cdc> +<17a8> <7ce2> +<17a9> <9b3b> +<17aa> <7cef> +<17ab> <7cf2> +<17ac> <7cf4> +<17ad> <7cf6> +<17ae> <7cfa> +<17af> <7d06> +<17b0> <7d02> +<17b1> <7d1c> +<17b2> <7d15> +<17b3> <7d0a> +<17b4> <7d45> +<17b5> <7d4b> +<17b6> <7d2e> +<17b7> <7d32> +<17b8> <7d3f> +<17b9> <7d35> +<17ba> <7d46> +<17bb> <7d73> +<17bc> <7d56> +<17bd> <7d4e> +<17be> <7d72> +<17bf> <7d68> +<17c0> <7d6e> +<17c1> <7d4f> +<17c2> <7d63> +<17c3> <7d93> +<17c4> <7d89> +<17c5> <7d5b> +<17c6> <7d8f> +<17c7> <7d7d> +<17c8> <7d9b> +<17c9> <7dba> +<17ca> <7dae> +<17cb> <7da3> +<17cc> <7db5> +<17cd> <7dc7> +<17ce> <7dbd> +<17cf> <7dab> +<17d0> <7e3d> +<17d1> <7da2> +<17d2> <7daf> +<17d3> <7ddc> +<17d4> <7db8> +<17d5> <7d9f> +<17d6> <7db0> +<17d7> <7dd8> +<17d8> <7ddd> +<17d9> <7de4> +<17da> <7dde> +<17db> <7dfb> +<17dc> <7df2> +<17dd> <7de1> +<17de> <7e05> +<17df> <7e0a> +<17e0> <7e23> +<17e1> <7e21> +<17e2> <7e12> +<17e3> <7e31> +<17e4> <7e1f> +<17e5> <7e09> +<17e6> <7e0b> +<17e7> <7e22> +<17e8> <7e46> +endbfchar + +100 beginbfchar +<17e9> <7e66> +<17ea> <7e3b> +<17eb> <7e35> +<17ec> <7e39> +<17ed> <7e43> +<17ee> <7e37> +<17ef> <7e32> +<17f0> <7e3a> +<17f1> <7e67> +<17f2> <7e5d> +<17f3> <7e56> +<17f4> <7e5e> +<17f7> <7e79> +<17f8> <7e6a> +<17f9> <7e69> +<17fa> <7e7c> +<17fb> <7e7b> +<17fc> <7e83> +<17fd> <7dd5> +<17fe> <7e7d> +<17ff> <8fae> +<1800> <7e7f> +<1803> <7e8c> +<1804> <7e92> +<1805> <7e90> +<1808> <7e96> +<1809> <7e8e> +<180c> <7f38> +<180d> <7f3a> +<180e> <7f45> +<1814> <7f55> +<1815> <7f54> +<1816> <7f58> +<181b> <7f67> +<181c> <7f78> +<181d> <7f82> +<181e> <7f86> +<181f> <7f83> +<1820> <7f88> +<1821> <7f87> +<1822> <7f8c> +<1823> <7f94> +<1824> <7f9e> +<1825> <7f9d> +<1826> <7f9a> +<1827> <7fa3> +<1828> <7faf> +<1829> <7fb2> +<182a> <7fb9> +<182b> <7fae> +<182c> <7fb6> +<182d> <7fb8> +<182e> <8b71> +<1831> <7fca> +<1832> <7fd5> +<1833> <7fd4> +<1834> <7fe1> +<1835> <7fe6> +<1836> <7fe9> +<1837> <7ff3> +<1838> <7ff9> +<1839> <98dc> +<183a> <8006> +<183b> <8004> +<183c> <800b> +<183d> <8012> +<1840> <801c> +<1841> <8021> +<1842> <8028> +<1843> <803f> +<1844> <803b> +<1845> <804a> +<1846> <8046> +<1847> <8052> +<1848> <8058> +<1849> <805a> +<184a> <805f> +<184b> <8062> +<184c> <8068> +<184d> <8073> +<184e> <8072> +<184f> <8070> +<1850> <8076> +<1851> <8079> +<1852> <807d> +<1853> <807f> +<1854> <8084> +<1855> <8086> +<1856> <8085> +<1857> <809b> +<1858> <8093> +<1859> <809a> +<185a> <80ad> +<185b> <5190> +<185c> <80ac> +<185d> <80db> +<185e> <80e5> +<185f> <80d9> +<1860> <80dd> +<1861> <80c4> +endbfchar + +100 beginbfchar +<1862> <80da> +<1863> <80d6> +<1864> <8109> +<1865> <80ef> +<1866> <80f1> +<1867> <811b> +<1868> <8129> +<1869> <8123> +<186a> <812f> +<186b> <814b> +<186c> <968b> +<186d> <8146> +<186e> <813e> +<186f> <8153> +<1870> <8151> +<1871> <80fc> +<1872> <8171> +<1873> <816e> +<1876> <8174> +<1877> <8183> +<1878> <8188> +<1879> <818a> +<187a> <8180> +<187b> <8182> +<187c> <81a0> +<187d> <8195> +<187e> <81a4> +<187f> <81a3> +<1880> <815f> +<1881> <8193> +<1882> <81a9> +<1883> <81b0> +<1884> <81b5> +<1885> <81be> +<1886> <81b8> +<1887> <81bd> +<1888> <81c0> +<1889> <81c2> +<188a> <81ba> +<188b> <81c9> +<188c> <81cd> +<188d> <81d1> +<188e> <81d9> +<188f> <81d8> +<1890> <81c8> +<1891> <81da> +<1894> <81e7> +<1897> <81fe> +<189a> <8205> +<189b> <8207> +<189c> <820a> +<189d> <820d> +<189e> <8210> +<189f> <8216> +<18a0> <8229> +<18a1> <822b> +<18a2> <8238> +<18a3> <8233> +<18a4> <8240> +<18a5> <8259> +<18a6> <8258> +<18a7> <825d> +<18a8> <825a> +<18a9> <825f> +<18aa> <8264> +<18ab> <8262> +<18ac> <8268> +<18af> <822e> +<18b0> <8271> +<18b3> <827e> +<18b4> <828d> +<18b5> <8292> +<18b6> <82ab> +<18b7> <829f> +<18b8> <82bb> +<18b9> <82ac> +<18ba> <82e1> +<18bb> <82e3> +<18bc> <82df> +<18bd> <82d2> +<18be> <82f4> +<18bf> <82f3> +<18c0> <82fa> +<18c1> <8393> +<18c2> <8303> +<18c3> <82fb> +<18c4> <82f9> +<18c5> <82de> +<18c6> <8306> +<18c7> <82dc> +<18c8> <8309> +<18c9> <82d9> +<18ca> <8335> +<18cb> <8334> +<18cc> <8316> +<18cd> <8332> +<18ce> <8331> +<18cf> <8340> +<18d0> <8339> +<18d1> <8350> +endbfchar + +100 beginbfchar +<18d2> <8345> +<18d3> <832f> +<18d4> <832b> +<18d7> <8385> +<18d8> <839a> +<18d9> <83aa> +<18da> <839f> +<18db> <83a2> +<18dc> <8396> +<18dd> <8323> +<18de> <838e> +<18df> <8387> +<18e0> <838a> +<18e1> <837c> +<18e2> <83b5> +<18e3> <8373> +<18e4> <8375> +<18e5> <83a0> +<18e6> <8389> +<18e7> <83a8> +<18e8> <83f4> +<18e9> <8413> +<18ea> <83eb> +<18eb> <83ce> +<18ec> <83fd> +<18ed> <8403> +<18ee> <83d8> +<18ef> <840b> +<18f0> <83c1> +<18f1> <83f7> +<18f2> <8407> +<18f3> <83e0> +<18f4> <83f2> +<18f5> <840d> +<18f6> <8422> +<18f7> <8420> +<18f8> <83bd> +<18f9> <8438> +<18fa> <8506> +<18fb> <83fb> +<18fc> <846d> +<18fd> <842a> +<18fe> <843c> +<18ff> <855a> +<1900> <8484> +<1901> <8477> +<1902> <846b> +<1903> <84ad> +<1904> <846e> +<1905> <8482> +<1906> <8469> +<1907> <8446> +<1908> <842c> +<1909> <846f> +<190a> <8479> +<190b> <8435> +<190c> <84ca> +<190d> <8462> +<190e> <84b9> +<190f> <84bf> +<1910> <849f> +<1911> <84d9> +<1912> <84cd> +<1913> <84bb> +<1914> <84da> +<1915> <84d0> +<1916> <84c1> +<1917> <84c6> +<1918> <84d6> +<1919> <84a1> +<191a> <8521> +<191b> <84ff> +<191c> <84f4> +<191f> <852c> +<1920> <851f> +<1921> <8515> +<1922> <8514> +<1923> <84fc> +<1924> <8540> +<1925> <8563> +<1926> <8558> +<1927> <8548> +<1928> <8541> +<1929> <8602> +<192a> <854b> +<192b> <8555> +<192c> <8580> +<192d> <85a4> +<192e> <8588> +<192f> <8591> +<1930> <858a> +<1931> <85a8> +<1932> <856d> +<1933> <8594> +<1934> <859b> +<1935> <85ea> +<1936> <8587> +<1937> <859c> +<1938> <8577> +<1939> <857e> +endbfchar + +100 beginbfchar +<193a> <8590> +<193b> <85c9> +<193c> <85ba> +<193d> <85cf> +<193e> <85b9> +<193f> <85d0> +<1940> <85d5> +<1941> <85dd> +<1942> <85e5> +<1943> <85dc> +<1944> <85f9> +<1945> <860a> +<1946> <8613> +<1947> <860b> +<1948> <85fe> +<1949> <85fa> +<194a> <8606> +<194b> <8622> +<194c> <861a> +<194d> <8630> +<194e> <863f> +<194f> <864d> +<1950> <4e55> +<1951> <8654> +<1952> <865f> +<1953> <8667> +<1954> <8671> +<1955> <8693> +<1956> <86a3> +<195b> <86b6> +<195c> <86af> +<195d> <86c4> +<195e> <86c6> +<195f> <86b0> +<1960> <86c9> +<1961> <8823> +<1962> <86ab> +<1963> <86d4> +<1964> <86de> +<1965> <86e9> +<1966> <86ec> +<1967> <86df> +<1968> <86db> +<1969> <86ef> +<196a> <8712> +<196b> <8706> +<196c> <8708> +<196d> <8700> +<196e> <8703> +<196f> <86fb> +<1970> <8711> +<1971> <8709> +<1972> <870d> +<1973> <86f9> +<1974> <870a> +<1975> <8734> +<1976> <873f> +<1977> <8737> +<1978> <873b> +<1979> <8725> +<197a> <8729> +<197b> <871a> +<197c> <8760> +<197d> <875f> +<197e> <8778> +<197f> <874c> +<1980> <874e> +<1981> <8774> +<1982> <8757> +<1983> <8768> +<1984> <876e> +<1985> <8759> +<1986> <8753> +<1987> <8763> +<1988> <876a> +<1989> <8805> +<198a> <87a2> +<198b> <879f> +<198c> <8782> +<198d> <87af> +<198e> <87cb> +<198f> <87bd> +<1990> <87c0> +<1991> <87d0> +<1992> <96d6> +<1993> <87ab> +<1994> <87c4> +<1995> <87b3> +<1996> <87c7> +<1997> <87c6> +<1998> <87bb> +<1999> <87ef> +<199a> <87f2> +<199b> <87e0> +<199c> <880f> +<199d> <880d> +<199e> <87fe> +<19a1> <880e> +<19a2> <87d2> +<19a3> <8811> +endbfchar + +100 beginbfchar +<19a4> <8816> +<19a5> <8815> +<19a6> <8822> +<19a7> <8821> +<19a8> <8831> +<19a9> <8836> +<19aa> <8839> +<19ab> <8827> +<19ac> <883b> +<19ad> <8844> +<19ae> <8842> +<19af> <8852> +<19b0> <8859> +<19b1> <885e> +<19b2> <8862> +<19b3> <886b> +<19b4> <8881> +<19b5> <887e> +<19b6> <889e> +<19b7> <8875> +<19b8> <887d> +<19b9> <88b5> +<19ba> <8872> +<19bb> <8882> +<19bc> <8897> +<19bd> <8892> +<19be> <88ae> +<19bf> <8899> +<19c0> <88a2> +<19c1> <888d> +<19c2> <88a4> +<19c3> <88b0> +<19c4> <88bf> +<19c5> <88b1> +<19c8> <88d4> +<19cb> <88dd> +<19cc> <88f9> +<19cd> <8902> +<19ce> <88fc> +<19cf> <88f4> +<19d0> <88e8> +<19d1> <88f2> +<19d2> <8904> +<19d3> <890c> +<19d4> <890a> +<19d5> <8913> +<19d6> <8943> +<19d7> <891e> +<19d8> <8925> +<19db> <8941> +<19dc> <8944> +<19dd> <893b> +<19de> <8936> +<19df> <8938> +<19e0> <894c> +<19e1> <891d> +<19e2> <8960> +<19e3> <895e> +<19e4> <8966> +<19e5> <8964> +<19e6> <896d> +<19e7> <896a> +<19e8> <896f> +<19e9> <8974> +<19ea> <8977> +<19eb> <897e> +<19ec> <8983> +<19ed> <8988> +<19ee> <898a> +<19ef> <8993> +<19f0> <8998> +<19f1> <89a1> +<19f2> <89a9> +<19f3> <89a6> +<19f4> <89ac> +<19f5> <89af> +<19f6> <89b2> +<19f7> <89ba> +<19f8> <89bd> +<19fb> <89da> +<19fe> <89e7> +<19ff> <89f4> +<1a00> <89f8> +<1a01> <8a03> +<1a02> <8a16> +<1a03> <8a10> +<1a04> <8a0c> +<1a05> <8a1b> +<1a06> <8a1d> +<1a07> <8a25> +<1a08> <8a36> +<1a09> <8a41> +<1a0a> <8a5b> +<1a0b> <8a52> +<1a0c> <8a46> +<1a0d> <8a48> +<1a0e> <8a7c> +<1a0f> <8a6d> +<1a10> <8a6c> +<1a11> <8a62> +endbfchar + +100 beginbfchar +<1a12> <8a85> +<1a13> <8a82> +<1a14> <8a84> +<1a15> <8aa8> +<1a16> <8aa1> +<1a17> <8a91> +<1a1a> <8a9a> +<1a1b> <8aa3> +<1a1c> <8ac4> +<1a1d> <8acd> +<1a1e> <8ac2> +<1a1f> <8ada> +<1a20> <8aeb> +<1a21> <8af3> +<1a22> <8ae7> +<1a23> <8ae4> +<1a24> <8af1> +<1a25> <8b14> +<1a26> <8ae0> +<1a27> <8ae2> +<1a28> <8af7> +<1a29> <8ade> +<1a2a> <8adb> +<1a2b> <8b0c> +<1a2c> <8b07> +<1a2d> <8b1a> +<1a2e> <8ae1> +<1a2f> <8b16> +<1a30> <8b10> +<1a31> <8b17> +<1a32> <8b20> +<1a33> <8b33> +<1a34> <97ab> +<1a35> <8b26> +<1a36> <8b2b> +<1a37> <8b3e> +<1a38> <8b28> +<1a39> <8b41> +<1a3a> <8b4c> +<1a3b> <8b4f> +<1a3c> <8b4e> +<1a3d> <8b49> +<1a3e> <8b56> +<1a3f> <8b5b> +<1a40> <8b5a> +<1a41> <8b6b> +<1a42> <8b5f> +<1a43> <8b6c> +<1a44> <8b6f> +<1a45> <8b74> +<1a46> <8b7d> +<1a47> <8b80> +<1a48> <8b8c> +<1a49> <8b8e> +<1a4c> <8b96> +<1a4f> <8c3a> +<1a50> <8c41> +<1a51> <8c3f> +<1a52> <8c48> +<1a53> <8c4c> +<1a54> <8c4e> +<1a55> <8c50> +<1a56> <8c55> +<1a57> <8c62> +<1a58> <8c6c> +<1a59> <8c78> +<1a5a> <8c7a> +<1a5b> <8c82> +<1a5c> <8c89> +<1a5d> <8c85> +<1a5e> <8c8a> +<1a61> <8c94> +<1a62> <8c7c> +<1a63> <8c98> +<1a64> <621d> +<1a65> <8cad> +<1a66> <8caa> +<1a67> <8cbd> +<1a6a> <8cae> +<1a6b> <8cb6> +<1a6c> <8cc8> +<1a6d> <8cc1> +<1a6e> <8ce4> +<1a6f> <8ce3> +<1a70> <8cda> +<1a71> <8cfd> +<1a76> <8d0a> +<1a77> <8d07> +<1a78> <8d0f> +<1a79> <8d0d> +<1a7a> <8d10> +<1a7b> <9f4e> +<1a7c> <8d13> +<1a7d> <8ccd> +<1a7e> <8d14> +<1a7f> <8d16> +<1a80> <8d67> +<1a81> <8d6d> +<1a82> <8d71> +<1a83> <8d73> +endbfchar + +100 beginbfchar +<1a84> <8d81> +<1a85> <8d99> +<1a86> <8dc2> +<1a87> <8dbe> +<1a88> <8dba> +<1a89> <8dcf> +<1a8a> <8dda> +<1a8b> <8dd6> +<1a8c> <8dcc> +<1a8d> <8ddb> +<1a8e> <8dcb> +<1a91> <8ddf> +<1a92> <8de3> +<1a93> <8dfc> +<1a96> <8dff> +<1a99> <8e10> +<1a9a> <8e1f> +<1a9b> <8e42> +<1a9c> <8e35> +<1a9d> <8e30> +<1a9e> <8e34> +<1a9f> <8e4a> +<1aa0> <8e47> +<1aa1> <8e49> +<1aa2> <8e4c> +<1aa3> <8e50> +<1aa4> <8e48> +<1aa5> <8e59> +<1aa6> <8e64> +<1aa7> <8e60> +<1aa8> <8e2a> +<1aa9> <8e63> +<1aaa> <8e55> +<1aab> <8e76> +<1aac> <8e72> +<1aad> <8e7c> +<1aae> <8e81> +<1aaf> <8e87> +<1ab0> <8e85> +<1ab1> <8e84> +<1ab2> <8e8b> +<1ab3> <8e8a> +<1ab4> <8e93> +<1ab5> <8e91> +<1ab6> <8e94> +<1ab7> <8e99> +<1ab8> <8eaa> +<1ab9> <8ea1> +<1aba> <8eac> +<1abb> <8eb0> +<1abc> <8ec6> +<1abd> <8eb1> +<1abe> <8ebe> +<1abf> <8ec5> +<1ac0> <8ec8> +<1ac1> <8ecb> +<1ac2> <8edb> +<1ac3> <8ee3> +<1ac4> <8efc> +<1ac5> <8efb> +<1ac6> <8eeb> +<1ac7> <8efe> +<1ac8> <8f0a> +<1ac9> <8f05> +<1aca> <8f15> +<1acb> <8f12> +<1acc> <8f19> +<1acd> <8f13> +<1ace> <8f1c> +<1acf> <8f1f> +<1ad0> <8f1b> +<1ad1> <8f0c> +<1ad2> <8f26> +<1ad3> <8f33> +<1ad4> <8f3b> +<1ad5> <8f39> +<1ad6> <8f45> +<1ad7> <8f42> +<1ad8> <8f3e> +<1ad9> <8f4c> +<1ada> <8f49> +<1adb> <8f46> +<1adc> <8f4e> +<1add> <8f57> +<1ade> <8f5c> +<1ae2> <8f9c> +<1ae3> <8f9f> +<1ae4> <8fa3> +<1ae5> <8fad> +<1ae6> <8faf> +<1ae7> <8fb7> +<1ae8> <8fda> +<1ae9> <8fe5> +<1aea> <8fe2> +<1aeb> <8fea> +<1aec> <8fef> +<1aed> <9087> +<1aee> <8ff4> +<1aef> <9005> +<1af2> <9011> +endbfchar + +100 beginbfchar +<1af3> <9015> +<1af4> <9021> +<1af5> <900d> +<1af6> <901e> +<1af7> <9016> +<1af8> <900b> +<1af9> <9027> +<1afa> <9036> +<1afb> <9035> +<1afc> <9039> +<1afd> <8ff8> +<1b02> <900e> +<1b03> <9049> +<1b04> <903e> +<1b05> <9056> +<1b06> <9058> +<1b07> <905e> +<1b08> <9068> +<1b09> <906f> +<1b0a> <9076> +<1b0b> <96a8> +<1b0c> <9072> +<1b0d> <9082> +<1b0e> <907d> +<1b0f> <9081> +<1b10> <9080> +<1b11> <908a> +<1b12> <9089> +<1b13> <908f> +<1b14> <90a8> +<1b15> <90af> +<1b16> <90b1> +<1b17> <90b5> +<1b18> <90e2> +<1b19> <90e4> +<1b1a> <6248> +<1b1b> <90db> +<1b1c> <9102> +<1b1d> <9112> +<1b1e> <9119> +<1b1f> <9132> +<1b20> <9130> +<1b21> <914a> +<1b22> <9156> +<1b23> <9158> +<1b24> <9163> +<1b25> <9165> +<1b26> <9169> +<1b27> <9173> +<1b28> <9172> +<1b29> <918b> +<1b2a> <9189> +<1b2b> <9182> +<1b2c> <91a2> +<1b2d> <91ab> +<1b2e> <91af> +<1b2f> <91aa> +<1b30> <91b5> +<1b31> <91b4> +<1b32> <91ba> +<1b35> <91c9> +<1b36> <91cb> +<1b37> <91d0> +<1b38> <91d6> +<1b39> <91df> +<1b3a> <91e1> +<1b3b> <91db> +<1b3c> <91fc> +<1b3f> <921e> +<1b40> <91ff> +<1b41> <9214> +<1b42> <922c> +<1b43> <9215> +<1b44> <9211> +<1b45> <925e> +<1b46> <9257> +<1b47> <9245> +<1b48> <9249> +<1b49> <9264> +<1b4a> <9248> +<1b4b> <9295> +<1b4c> <923f> +<1b4d> <924b> +<1b4e> <9250> +<1b4f> <929c> +<1b50> <9296> +<1b51> <9293> +<1b52> <929b> +<1b53> <925a> +<1b54> <92cf> +<1b55> <92b9> +<1b56> <92b7> +<1b57> <92e9> +<1b58> <930f> +<1b59> <92fa> +<1b5a> <9344> +<1b5b> <932e> +<1b5c> <9319> +<1b5d> <9322> +<1b5e> <931a> +endbfchar + +100 beginbfchar +<1b5f> <9323> +<1b60> <933a> +<1b61> <9335> +<1b62> <933b> +<1b63> <935c> +<1b64> <9360> +<1b65> <937c> +<1b66> <936e> +<1b67> <9356> +<1b68> <93b0> +<1b6b> <9394> +<1b6c> <93b9> +<1b6f> <93e8> +<1b70> <93e5> +<1b71> <93d8> +<1b72> <93c3> +<1b73> <93dd> +<1b74> <93d0> +<1b75> <93c8> +<1b76> <93e4> +<1b77> <941a> +<1b78> <9414> +<1b79> <9413> +<1b7a> <9403> +<1b7b> <9407> +<1b7c> <9410> +<1b7d> <9436> +<1b7e> <942b> +<1b7f> <9435> +<1b80> <9421> +<1b81> <943a> +<1b82> <9441> +<1b83> <9452> +<1b84> <9444> +<1b85> <945b> +<1b86> <9460> +<1b87> <9462> +<1b88> <945e> +<1b89> <946a> +<1b8a> <9229> +<1b8b> <9470> +<1b8c> <9475> +<1b8d> <9477> +<1b8e> <947d> +<1b8f> <945a> +<1b90> <947c> +<1b91> <947e> +<1b92> <9481> +<1b93> <947f> +<1b94> <9582> +<1b95> <9587> +<1b96> <958a> +<1b97> <9594> +<1b98> <9596> +<1b9b> <95a0> +<1b9c> <95a8> +<1b9d> <95a7> +<1b9e> <95ad> +<1b9f> <95bc> +<1ba0> <95bb> +<1ba1> <95b9> +<1ba2> <95be> +<1ba3> <95ca> +<1ba4> <6ff6> +<1ba5> <95c3> +<1ba6> <95cd> +<1ba7> <95cc> +<1ba8> <95d5> +<1ba9> <95d4> +<1baa> <95d6> +<1bab> <95dc> +<1bac> <95e1> +<1bad> <95e5> +<1bae> <95e2> +<1baf> <9621> +<1bb0> <9628> +<1bb3> <9642> +<1bb4> <964c> +<1bb5> <964f> +<1bb6> <964b> +<1bb7> <9677> +<1bb8> <965c> +<1bb9> <965e> +<1bba> <965d> +<1bbb> <965f> +<1bbc> <9666> +<1bbd> <9672> +<1bbe> <966c> +<1bbf> <968d> +<1bc0> <9698> +<1bc1> <9695> +<1bc2> <9697> +<1bc3> <96aa> +<1bc4> <96a7> +<1bc7> <96b0> +<1bc8> <96b4> +<1bc9> <96b6> +<1bcc> <96ce> +<1bcd> <96cb> +<1bce> <96c9> +endbfchar + +100 beginbfchar +<1bcf> <96cd> +<1bd0> <894d> +<1bd1> <96dc> +<1bd2> <970d> +<1bd3> <96d5> +<1bd4> <96f9> +<1bd5> <9704> +<1bd6> <9706> +<1bd7> <9708> +<1bd8> <9713> +<1bd9> <970e> +<1bda> <9711> +<1bdb> <970f> +<1bdc> <9716> +<1bdd> <9719> +<1bde> <9724> +<1bdf> <972a> +<1be0> <9730> +<1be1> <9739> +<1be4> <9744> +<1be5> <9746> +<1be6> <9748> +<1be7> <9742> +<1be8> <9749> +<1be9> <975c> +<1bea> <9760> +<1beb> <9764> +<1bec> <9766> +<1bed> <9768> +<1bee> <52d2> +<1bef> <976b> +<1bf0> <9771> +<1bf1> <9779> +<1bf2> <9785> +<1bf3> <977c> +<1bf4> <9781> +<1bf5> <977a> +<1bf6> <9786> +<1bf7> <978b> +<1bfa> <979c> +<1bfb> <97a8> +<1bfc> <97a6> +<1bfd> <97a3> +<1c00> <97c3> +<1c01> <97c6> +<1c02> <97c8> +<1c03> <97cb> +<1c04> <97dc> +<1c05> <97ed> +<1c06> <9f4f> +<1c07> <97f2> +<1c08> <7adf> +<1c09> <97f6> +<1c0a> <97f5> +<1c0b> <980f> +<1c0c> <980c> +<1c0d> <9838> +<1c0e> <9824> +<1c0f> <9821> +<1c10> <9837> +<1c11> <983d> +<1c12> <9846> +<1c13> <984f> +<1c14> <984b> +<1c15> <986b> +<1c19> <9874> +<1c1a> <9873> +<1c1b> <98aa> +<1c1c> <98af> +<1c1d> <98b1> +<1c1e> <98b6> +<1c1f> <98c4> +<1c20> <98c3> +<1c21> <98c6> +<1c22> <98e9> +<1c23> <98eb> +<1c24> <9903> +<1c25> <9909> +<1c26> <9912> +<1c27> <9914> +<1c28> <9918> +<1c29> <9921> +<1c2c> <9924> +<1c2d> <9920> +<1c2e> <992c> +<1c2f> <992e> +<1c32> <9942> +<1c33> <9949> +<1c34> <9945> +<1c35> <9950> +<1c36> <994b> +<1c39> <994c> +<1c3a> <9955> +<1c3d> <99a5> +<1c40> <99bc> +<1c41> <99df> +<1c42> <99db> +<1c43> <99dd> +<1c44> <99d8> +<1c45> <99d1> +endbfchar + +100 beginbfchar +<1c4a> <99fb> +<1c4b> <99f8> +<1c4c> <9a01> +<1c4d> <9a0f> +<1c4e> <9a05> +<1c4f> <99e2> +<1c50> <9a19> +<1c51> <9a2b> +<1c52> <9a37> +<1c53> <9a45> +<1c54> <9a42> +<1c55> <9a40> +<1c56> <9a43> +<1c57> <9a3e> +<1c58> <9a55> +<1c59> <9a4d> +<1c5a> <9a5b> +<1c5b> <9a57> +<1c5c> <9a5f> +<1c5d> <9a62> +<1c5e> <9a65> +<1c5f> <9a64> +<1c60> <9a69> +<1c61> <9a6b> +<1c62> <9a6a> +<1c63> <9aad> +<1c64> <9ab0> +<1c65> <9abc> +<1c66> <9ac0> +<1c67> <9acf> +<1c68> <9ad1> +<1c6f> <9ae6> +<1c70> <9aef> +<1c71> <9aeb> +<1c72> <9aee> +<1c73> <9af4> +<1c74> <9af1> +<1c75> <9af7> +<1c76> <9afb> +<1c77> <9b06> +<1c78> <9b18> +<1c79> <9b1a> +<1c7a> <9b1f> +<1c7d> <9b25> +<1c84> <9b32> +<1c85> <9b44> +<1c86> <9b43> +<1c87> <9b4f> +<1c8a> <9b51> +<1c8b> <9b58> +<1c8c> <9b74> +<1c8d> <9b93> +<1c8e> <9b83> +<1c8f> <9b91> +<1c94> <9ba8> +<1c95> <9bb4> +<1c96> <9bc0> +<1c97> <9bca> +<1c98> <9bb9> +<1c99> <9bc6> +<1c9a> <9bcf> +<1c9d> <9be3> +<1c9e> <9be2> +<1c9f> <9be4> +<1ca0> <9bd4> +<1ca1> <9be1> +<1ca2> <9c3a> +<1ca3> <9bf2> +<1ca4> <9bf1> +<1ca5> <9bf0> +<1ca6> <9c15> +<1ca7> <9c14> +<1ca8> <9c09> +<1ca9> <9c13> +<1caa> <9c0c> +<1cab> <9c06> +<1cac> <9c08> +<1cad> <9c12> +<1cae> <9c0a> +<1caf> <9c04> +<1cb0> <9c2e> +<1cb1> <9c1b> +<1cb2> <9c25> +<1cb3> <9c24> +<1cb4> <9c21> +<1cb5> <9c30> +<1cb6> <9c47> +<1cb7> <9c32> +<1cb8> <9c46> +<1cb9> <9c3e> +<1cba> <9c5a> +<1cbb> <9c60> +<1cbc> <9c67> +<1cbd> <9c76> +<1cbe> <9c78> +<1cbf> <9ce7> +<1cc0> <9cec> +<1cc1> <9cf0> +<1cc2> <9d09> +<1cc3> <9d08> +endbfchar + +100 beginbfchar +<1cc4> <9ceb> +<1cc5> <9d03> +<1cc6> <9d06> +<1cc7> <9d2a> +<1cc8> <9d26> +<1cc9> <9daf> +<1cca> <9d23> +<1ccb> <9d1f> +<1ccc> <9d44> +<1ccd> <9d15> +<1cce> <9d12> +<1ccf> <9d41> +<1cd0> <9d3f> +<1cd1> <9d3e> +<1cd2> <9d46> +<1cd3> <9d48> +<1cd6> <9d64> +<1cd7> <9d51> +<1cd8> <9d50> +<1cd9> <9d59> +<1cda> <9d72> +<1cdb> <9d89> +<1cdc> <9d87> +<1cdd> <9dab> +<1cde> <9d6f> +<1cdf> <9d7a> +<1ce0> <9d9a> +<1ce1> <9da4> +<1ce2> <9da9> +<1ce3> <9db2> +<1ce4> <9dc4> +<1ce5> <9dc1> +<1ce6> <9dbb> +<1ce7> <9db8> +<1ce8> <9dba> +<1ce9> <9dc6> +<1cea> <9dcf> +<1ceb> <9dc2> +<1cec> <9dd9> +<1ced> <9dd3> +<1cee> <9df8> +<1cef> <9de6> +<1cf0> <9ded> +<1cf1> <9def> +<1cf2> <9dfd> +<1cf5> <9e1e> +<1cf6> <9e75> +<1cf7> <9e79> +<1cf8> <9e7d> +<1cf9> <9e81> +<1cfa> <9e88> +<1cfd> <9e92> +<1cfe> <9e95> +<1cff> <9e91> +<1d00> <9e9d> +<1d01> <9ea5> +<1d02> <9ea9> +<1d03> <9eb8> +<1d04> <9eaa> +<1d05> <9ead> +<1d06> <9761> +<1d07> <9ecc> +<1d0b> <9ed4> +<1d0c> <9edc> +<1d0d> <9ede> +<1d0e> <9edd> +<1d0f> <9ee0> +<1d10> <9ee5> +<1d11> <9ee8> +<1d12> <9eef> +<1d13> <9ef4> +<1d16> <9ef9> +<1d1c> <76b7> +<1d1d> <9f15> +<1d1e> <9f21> +<1d1f> <9f2c> +<1d20> <9f3e> +<1d21> <9f4a> +<1d22> <9f52> +<1d23> <9f54> +<1d24> <9f63> +<1d2a> <9f6c> +<1d2b> <9f6a> +<1d2c> <9f77> +<1d2d> <9f72> +<1d2e> <9f76> +<1d2f> <9f95> +<1d30> <9f9c> +<1d31> <9fa0> +<1d32> <582f> +<1d33> <69c7> +<1d34> <9059> +<1d35> <7464> +<1d36> <2642> +<1da1> <3349> +<1da2> <3314> +<1da3> <3322> +<1da4> <334d> +<1da5> <3318> +<1da6> <3327> +endbfchar + +100 beginbfchar +<1da7> <3303> +<1da8> <3336> +<1da9> <3351> +<1daa> <3357> +<1dab> <330d> +<1dac> <3326> +<1dad> <3323> +<1dae> <332b> +<1daf> <334a> +<1db0> <333b> +<1db6> <33c4> +<1db7> <33a1> +<1db8> <301d> +<1db9> <301f> +<1dba> <2116> +<1dbb> <33cd> +<1dbc> <2121> +<1dc4> <3239> +<1dc5> <337e> +<1dc6> <337d> +<1dc7> <337c> +<1dc8> <222e> +<1dc9> <2211> +<1dca> <221a> +<1dcb> <22a5> +<1dcc> <2220> +<1dcd> <221f> +<1dce> <22bf> +<1dd1> <555e> +<1dd2> <98f4> +<1dd3> <6ea2> +<1dd4> <9c2f> +<1dd5> <6deb> +<1dd6> <8fc2> +<1dd7> <6b1d> +<1dd8> <53a9> +<1dd9> +<1dda> <5642> +<1ddb> <990c> +<1ddc> <7130> +<1ddd> <8956> +<1dde> <9dd7> +<1ddf> <8fe6> +<1de0> <6062> +<1de1> <62d0> +<1de2> <6666> +<1de3> +<1de4> <845b> +<1de5> <9784> +<1de6> <5699> +<1de7> <3d4e> +<1de8> <7ff0> +<1de9> <7feb> +<1dea> <5fbd> +<1deb> <7947> +<1dec> <4fe0> +<1ded> <537f> +<1dee> <50c5> +<1def> <8ec0> +<1df0> <55b0> +<1df1> +<1df2> <5c51> +<1df3> <9774> +<1df4> <7941> +<1df5> <6167> +<1df6> +<1df7> <7e6b> +<1df8> <8346> +<1df9> +<1dfa> <5026> +<1dfb> <5acc> +<1dfc> <6372> +<1dfd> <9e7c> +<1dfe> <8afa> +<1dff> <5df7> +<1e00> <663b> +<1e01> <6e9d> +<1e02> <9eb4> +<1e03> <9d60> +<1e04> <7511> +<1e05> <91c7> +<1e06> <698a> +<1e07> <6805> +<1e08> <85a9> +<1e09> <9bd6> +<1e0a> <9306> +<1e0b> <73ca> +<1e0c> <53f1> +<1e0d> <5c62> +<1e0e> <906e> +<1e0f> +<1e10> <707c> +<1e11> <7e61> +<1e12> <914b> +<1e13> <66d9> +<1e14> +<1e15> <85af> +<1e16> <85f7> +<1e17> <54e8> +<1e18> <5ee0> +endbfchar + +100 beginbfchar +<1e19> <68a2> +<1e1a> <8523> +<1e1b> <91ac> +<1e1c> <9798> +<1e1d> <8755> +<1e1e> <976d> +<1e1f> <9017> +<1e20> <7fe0> +<1e21> <647a> +<1e22> <901d> +<1e23> <87ec> +<1e24> <64b0> +<1e25> <6813> +<1e26> <714e> +<1e27> <717d> +<1e28> <8a6e> +<1e29> <564c> +<1e2a> <9061> +<1e2b> <5275> +<1e2c> <6414> +<1e2d> <75e9> +<1e2e> <905c> +<1e2f> <9a52> +<1e30> <817f> +<1e31> <9edb> +<1e32> <5544> +<1e33> <6fef> +<1e34> +<1e35> <86f8> +<1e36> +<1e37> <8fbf> +<1e38> <68da> +<1e39> <9c48> +<1e3a> <6a3d> +<1e3b> <7c1e> +<1e3c> <8a3b> +<1e3d> <7026> +<1e3e> <51cb> +<1e3f> <6357> +<1e40> <69cc> +<1e41> <939a> +<1e42> +<1e43> <6451> +<1e44> <912d> +<1e45> <64e2> +<1e46> +<1e47> <5861> +<1e48> <985a> +<1e49> <5835> +<1e4a> +<1e4b> <83df> +<1e4c> <8ced> +<1e4d> <5858> +<1e4e> <79b1> +<1e4f> <9d07> +<1e50> <7006> +<1e51> <701e> +<1e52> <5678> +<1e53> <9041> +<1e54> <9813> +<1e55> <90a3> +<1e56> <8b0e> +<1e57> <7058> +<1e58> <6962> +<1e59> <79b0> +<1e5a> <56ca> +<1e5b> <724c> +<1e5c> <9019> +<1e5d> <79e4> +<1e5e> <525d> +<1e5f> <7bb8> +<1e60> <6f51> +<1e61> <91b1> +<1e62> <633d> +<1e63> <6249> +<1e64> <6a0b> +<1e65> <67ca> +<1e66> <7a17> +<1e67> <903c> +<1e68> <5a9b> +<1e69> <8b2c> +<1e6a> <5edf> +<1e6b> <7015> +<1e6c> +<1e6d> <853d> +<1e6e> <77a5> +<1e6f> <5a29> +<1e70> <5e96> +<1e71> <6ce1> +<1e72> <84ec> +<1e73> <9830> +<1e74> <9c52> +<1e75> <9eb5> +<1e76> <5132> +<1e77> <9905> +<1e78> <7c7e> +<1e79> <9453> +<1e7a> <6108> +<1e7b> <7652> +<1e7c> <7337> +endbfchar + +100 beginbfchar +<1e7d> <7194> +<1e7e> <8000> +<1e7f> <840a> +<1e80> +<1e83> +<1e84> <6994> +<1e85> <881f> +<1e86> +<1e87> <5189> +<1e88> +<1e89> +<1e8a> <5539> +<1e8b> <5533> +<1e8c> <55e4> +<1e8d> <5632> +<1e8e> <56a5> +<1e8f> <580b> +<1e90> <5abe> +<1e91> +<1e92> <5c5b> +<1e93> <5e64> +<1e94> <6097> +<1e95> <6369> +<1e96> <6406> +<1e97> <6522> +<1e98> <6583> +<1e99> <67a6> +<1e9a> <67fa> +<1e9b> <689b> +<1e9c> <688e> +<1e9d> <6e6e> +<1e9e> +<1e9f> +<1ea0> <73ce> +<1ea1> <7504> +<1ea2> <750d> +<1ea3> <7515> +<1ea4> <7693> +<1ea5> <787c> +<1ea6> <7a31> +<1ea7> <9f9d> +<1ea8> <7b99> +<1ea9> <7c90> +<1eaa> <7cae> +<1eab> <7d9b> +<1eac> <7dae> +<1ead> <7d9f> +<1eae> <7fd4> +<1eaf> <822e> +<1eb0> <828d> +<1eb1> <82d2> +<1eb2> <8323> +<1eb3> <8375> +<1eb4> <8517> +<1eb5> <853e> +<1eb6> <8782> +<1eb7> <87d2> +<1eb8> <890a> +<1eb9> <89af> +<1eba> <8ade> +<1ebb> <8b41> +<1ebc> <8dda> +<1ebd> <8e09> +<1ebe> <8f13> +<1ebf> <8fea> +<1ec0> <9087> +<1ec1> <9058> +<1ec2> <6248> +<1ec3> <91c1> +<1ec4> <95bb> +<1ec5> <7762> +<1ec6> <9724> +<1ec7> <9760> +<1ec8> <9771> +<1ec9> <9824> +<1eca> <9b2e> +<1ecb> <9b97> +<1ecc> <9bf2> +<1ecd> <9eaa> +<1ece> <9f9c> +<1ed1> <203e> +<1ed2> +<1ed3> <30fc> +<1ed4> <2015> +<1ed5> <2010> +<1ed6> <301c> +<1ed7> <2016> +<1ed8> +<1ed9> <2026> +<1eda> <2025> +<1ee1> +<1ee2> +<1eed> +<1eee> <3041> +<1eef> <3043> +<1ef0> <3045> +<1ef1> <3047> +<1ef2> <3049> +<1ef3> <3063> +<1ef4> <3083> +endbfchar + +100 beginbfchar +<1ef5> <3085> +<1ef6> <3087> +<1ef7> <308e> +<1ef8> <30a1> +<1ef9> <30a3> +<1efa> <30a5> +<1efb> <30a7> +<1efc> <30a9> +<1efd> <30c3> +<1efe> <30e3> +<1eff> <30e5> +<1f00> <30e7> +<1f01> <30ee> +<1f04> <3349> +<1f05> <3314> +<1f06> <3322> +<1f07> <334d> +<1f08> <3318> +<1f09> <3327> +<1f0a> <3303> +<1f0b> <3336> +<1f0c> <3351> +<1f0d> <3357> +<1f0e> <330d> +<1f0f> <3326> +<1f10> <3323> +<1f11> <332b> +<1f12> <334a> +<1f13> <333b> +<1f19> <82a6> +<1f1a> <8328> +<1f1b> <5653> +<1f1c> <53a9> +<1f1d> <7259> +<1f1e> <6c72> +<1f1f> <7b08> +<1f20> <9957> +<1f21> <62f3> +<1f22> <9910> +<1f23> <976d> +<1f24> <717d> +<1f25> <7a7f> +<1f26> <7bad> +<1f27> <63c3> +<1f28> <83df> +<1f29> <7962> +<1f2a> <53db> +<1f2b> <7bc7> +<1f2c> <8fc4> +<1f2d> <7c3e> +<1f2e> <50ca> +<1f2f> <5315> +<1f30> <55a9> +<1f31> <56ae> +<1f32> <5819> +<1f33> <591b> +<1f34> <5c28> +<1f35> <5ed0> +<1f36> <5ecf> +<1f37> <6241> +<1f38> <66c1> +<1f39> <6c08> +<1f3a> <6e23> +<1f3b> <6eec> +<1f3c> <7a97> +<1f3d> <7bdd> +<1f3e> <7fe9> +<1f3f> <8422> +<1f40> <8759> +<1f41> <880e> +<1f42> <87d2> +<1f43> <9a19> +<1f44> <9ead> +<1f45> +<1f46> +<1f47> +<1f48> <11a8> +<1f49> <25c1> +<1f4a> <25b7> +<1f4b> <21e9> +<1f4c> <21e7> +<1f4d> <21e6> +<1f4e> <21e8> +<1f4f> <25a2> +<1f50> <2667> +<1f51> <2661> +<1f52> <2664> +<1f53> <2662> +<1f54> <33a0> +<1f55> <33a2> +<1f58> <3397> +<1f59> <2113> +<1f5a> <3398> +<1f5b> <33b3> +<1f5c> <33b2> +<1f5d> <33b1> +<1f5e> <33b0> +<1f62> <33cb> +<1f63> <3390> +<1f64> <33d4> +endbfchar + +100 beginbfchar +<1f65> <3396> +<1f66> <3322> +<1f67> <3316> +<1f68> <3318> +<1f69> <3315> +<1f6a> <3303> +<1f6b> <3323> +<1f6c> <3357> +<1f6d> <3342> +<1f6e> <3339> +<1f6f> <333b> +<1f70> <3300> +<1f71> <3331> +<1f72> <3347> +<1f73> <331e> +<1f74> <332a> +<1f75> <33cd> +<1f76> <337f> +<1f77> <2121> +<1f78> <260e> +<1f79> <3036> +<1f7a> <3020> +<1f7b> <00a9> +<1f7c> <00ae> +<1f7d> <0030002e> +<1f9b> <3251> +<1fca> <3243> +<1fcb> <323d> +<1fcc> <323f> +<1fcd> <3234> +<1fce> <3238> +<1fcf> <3233> +<1fd0> <323c> +<1fd1> <3242> +<1fd2> <323e> +<1fd3> <3236> +<1fd4> <3235> +<1fd5> <323b> +<1fd6> <3240> +<1fd7> <323a> +<1fd8> <32b0> +<1fd9> <32ad> +<1fda> <32a9> +<1fdb> <32af> +<1fdc> <3294> +<1fdd> <32aa> +<1fde> <3298> +<1fdf> <32ab> +<1fe0> <3292> +<1fe1> <3291> +<1fe2> <3293> +<1fe3> <32ac> +<1fe4> <32ae> +<1fe5> <3296> +<1fe6> <23a9> +<1fe7> <23a8> +<1fe8> <23a7> +<1fe9> +<1fea> <23ad> +<1feb> <23ac> +<1fec> <23ab> +<1fed> +<1ff1> +<1ff5> +<1ff6> <33cc> +<1ff7> <3305> +<1ff8> <00bd> +<1ff9> <00bc> +<1ffa> <339f> +<1ffb> <33a3> +<1ffc> <33a6> +<1ffd> <007300650063> +<1ffe> <006d0069006e> +<1fff> <329e> +<2002> <33c8> +<2003> <222d> +<2004> <5370> +<2005> <3230> +<200c> <3237> +<200d> <3241> +<200e> <27a1> +<2012> <25c9> +<2013> <2660> +<2014> <2665> +<2015> <2663> +<2016> <2666> +<201b> <261e> +<201e> <261f> +<201f> <3299> +<2020> <24ea> +<2023> +<2024> +<2025> <3000> +<202e> <258f> +<202f> <258e> +<2030> <258d> +<2031> <258c> +<2032> <258b> +<2033> <258a> +<2034> <2589> +endbfchar + +100 beginbfchar +<2039> <2570> +<203a> <256f> +<203b> <2550> +<203c> <255e> +<203d> <256a> +<203e> <2561> +<2041> <25e5> +<2042> <25e4> +<2043> <25cf> +<2044> <0ed0> +<204a> <9022> +<204b> <8fbb> +<204c> +<204d> <00b0> +<204e> <3013> +<204f> <309c> +<2050> <309b> +<2051> <2032> +<2052> +<2057> <201c> +<2058> <201e> +<2059> <2018> +<205a> <201a> +<205b> <2033> +<205c> <51dc> +<205d> <7199> +<2067> <0058004900490049> +<2068> <005800490056> +<2069> <00580056> +<206c> <0078006900690069> +<206d> <007800690076> +<206e> <00780076> +<206f> <217f> +<2070> <210a> +<2071> <2109> +<2072> <00540042> +<2073> <213b> +<2074> <3004> +<2075> <21c6> +<2078> <21932191> +<207d> <5927> +<207e> <5c0f> +<207f> <329d> +<2080> <63a7> +<2081> <670996504f1a793e> +<2082> <8ca156e36cd54eba> +<2083> <337b> +<2084> <337f> +<2085> <670996504f1a793e> +<2086> <8ca156e36cd54eba> +<2087> <3333> +<2088> <334e> +<2089> <3322> +<208a> <3316> +<208b> <3305> +<208c> <3305> +<208d> <3305> +<208e> <3333> +<208f> <334e> +<2090> <334e> +<2091> <334e> +<2092> <3303> +<2093> <3318> +<2094> <3315> +<2095> <3339> +<2096> <3339> +<2097> <3339> +<2098> <3357> +<2099> <3342> +<209a> <3342> +<209b> <3342> +<209c> <3323> +<209d> <333b> +<209e> <3300> +<209f> <331e> +<20a0> <331e> +<20a1> <331e> +<20a2> <332a> +<20a3> <332a> +<20a4> <332a> +<20a5> <3347> +<20a6> <3331> +<20a7> <7e8a> +<20a8> <891c> +<20a9> <9348> +<20aa> <9288> +<20ab> <84dc> +<20ac> <4fc9> +<20ad> <70bb> +<20ae> <6631> +<20af> <68c8> +<20b0> <92f9> +<20b1> <66fb> +<20b2> <5f45> +<20b3> <4e28> +<20b4> <4ee1> +<20b5> <4efc> +<20b6> <4f00> +<20b7> <4f03> +<20b8> <4f39> +endbfchar + +100 beginbfchar +<20b9> <4f56> +<20ba> <4f92> +<20bb> <4f8a> +<20bc> <4f9a> +<20bd> <4f94> +<20be> <4fcd> +<20bf> <5040> +<20c0> <5022> +<20c1> <4fff> +<20c2> <501e> +<20c3> <5046> +<20c4> <5070> +<20c5> <5042> +<20c6> <5094> +<20c7> <50f4> +<20c8> <50d8> +<20c9> <514a> +<20ca> <5164> +<20cb> <519d> +<20cc> <51be> +<20cd> <51ec> +<20ce> <5215> +<20cf> <529c> +<20d0> <52a6> +<20d1> <52c0> +<20d2> <52db> +<20d3> <5300> +<20d4> <5307> +<20d5> <5324> +<20d6> <5372> +<20d7> <5393> +<20d8> <53b2> +<20d9> <53dd> +<20da> +<20db> <549c> +<20dc> <548a> +<20dd> <54a9> +<20de> <54ff> +<20df> <5586> +<20e0> <5759> +<20e1> <5765> +<20e2> <57ac> +<20e3> <57c8> +<20e4> <57c7> +<20e5> +<20e6> <585a> +<20e7> <589e> +<20e8> <58b2> +<20e9> <590b> +<20ea> <5953> +<20eb> <595b> +<20ec> <595d> +<20ed> <5963> +<20ee> <59a4> +<20ef> <59ba> +<20f0> <5b56> +<20f1> <5bc0> +<20f2> <752f> +<20f3> <5bd8> +<20f4> <5bdb> +<20f5> <5c1e> +<20f6> <5ca6> +<20f7> <5cba> +<20f8> <5cf5> +<20f9> <5d27> +<20fa> <5d53> +<20fb> +<20fc> <5d42> +<20fd> <5d6d> +<2100> <5dd0> +<2101> <5f21> +<2102> <5f34> +<2103> <5f67> +<2104> <5fb7> +<2105> <5fde> +<2106> <605d> +<2107> <6085> +<2108> <608a> +<2109> <60de> +<210a> <60d5> +<210b> <6120> +<210c> <60f2> +<210d> <6111> +<210e> <6137> +<210f> <6130> +<2110> <6198> +<2111> <6213> +<2112> <62a6> +<2113> <63f5> +<2114> <6460> +<2115> <649d> +<2116> <64ce> +<2117> <654e> +<2118> <6600> +<2119> <6615> +<211a> <6609> +<211b> <662e> +<211c> <661e> +<211d> <6624> +<211e> <6665> +endbfchar + +100 beginbfchar +<211f> <6657> +<2120> <6659> +<2121> +<2122> <6673> +<2123> <6699> +<2124> <66a0> +<2125> <66b2> +<2126> <66bf> +<2127> <66fa> +<2128> <670e> +<2129> <6717> +<212a> <6766> +<212b> <67bb> +<212c> <6852> +<212d> <67c0> +<212e> <6801> +<212f> <6844> +<2130> <68cf> +<2131> +<2132> <6968> +<2133> +<2134> <6998> +<2135> <69e2> +<2136> <6a30> +<2137> <6a6b> +<2138> <6a46> +<2139> <6a73> +<213a> <6a7e> +<213b> <6ae2> +<213c> <6ae4> +<213d> <6bd6> +<213e> <6c3f> +<213f> <6c5c> +<2140> <6c86> +<2141> <6c6f> +<2142> <6cda> +<2143> <6d04> +<2144> <6d87> +<2145> <6d6f> +<2146> <6d96> +<2147> <6dac> +<2148> <6dcf> +<2149> <6df8> +<214a> <6df2> +<214b> <6dfc> +<214c> <6e39> +<214d> <6e5c> +<214e> <6e27> +<214f> <6e3c> +<2150> <6ebf> +<2151> <6f88> +<2152> <6fb5> +<2153> <6ff5> +<2154> <7005> +<2155> <7007> +<2156> <7028> +<2157> <7085> +<2158> <70ab> +<2159> <710f> +<215a> <7104> +<215b> <715c> +<215e> +<215f> <71c1> +<2160> <71fe> +<2161> <72b1> +<2162> <72be> +<2163> <7324> +<2164> +<2165> <7377> +<2166> <73bd> +<2167> <73c9> +<2168> <73d6> +<2169> <73e3> +<216a> <73d2> +<216b> <7407> +<216c> <73f5> +<216d> <7426> +<216e> <742a> +<216f> <7429> +<2170> <742e> +<2171> <7462> +<2172> <7489> +<2173> <749f> +<2174> <7501> +<2175> <756f> +<2176> <7682> +<2177> <769c> +<2178> <769e> +<2179> <769b> +<217a> <76a6> +<217b> +<217c> <7746> +<217d> <52af> +<217e> <7821> +<217f> <784e> +<2180> <7864> +<2181> <787a> +<2182> <7930> +<2186> <7994> +<2187> +endbfchar + +100 beginbfchar +<2188> <799b> +<2189> <7ad1> +<218a> <7ae7> +<218b> +<218c> <7aeb> +<218d> <7b9e> +<218e> +<218f> <7d48> +<2190> <7d5c> +<2191> <7db7> +<2192> <7da0> +<2193> <7dd6> +<2194> <7e52> +<2195> <7f47> +<2196> <7fa1> +<2197> +<2198> <8301> +<2199> <8362> +<219a> <837f> +<219b> <83c7> +<219c> <83f6> +<219d> <8448> +<219e> <84b4> +<219f> <8553> +<21a0> <8559> +<21a1> <856b> +<21a2> +<21a3> <85b0> +<21a6> <8807> +<21a7> <88f5> +<21a8> <8a12> +<21a9> <8a37> +<21aa> <8a79> +<21ab> <8aa7> +<21ac> <8abe> +<21ad> <8adf> +<21ae> +<21af> <8af6> +<21b0> <8b53> +<21b1> <8b7f> +<21b2> <8cf0> +<21b3> <8cf4> +<21b4> <8d12> +<21b5> <8d76> +<21b6> +<21b7> <8ecf> +<21ba> <9067> +<21bb> <90de> +<21bc> +<21bd> <9115> +<21be> <9127> +<21bf> <91da> +<21c0> <91d7> +<21c1> <91de> +<21c6> <9206> +<21c7> <9210> +<21c8> <920a> +<21c9> <923a> +<21ca> <9240> +<21cb> <923c> +<21cc> <924e> +<21cd> <9259> +<21ce> <9251> +<21cf> <9239> +<21d0> <9267> +<21d1> <92a7> +<21d4> <92e7> +<21d5> <92d7> +<21d6> <92d9> +<21d7> <92d0> +<21d8> +<21d9> <92d5> +<21da> <92e0> +<21db> <92d3> +<21dc> <9325> +<21dd> <9321> +<21de> <92fb> +<21df> +<21e0> <931e> +<21e1> <92ff> +<21e2> <931d> +<21e3> <9302> +<21e4> <9370> +<21e5> <9357> +<21e6> <93a4> +<21e7> <93c6> +<21e8> <93de> +<21e9> <93f8> +<21ea> <9431> +<21eb> <9445> +<21ec> <9448> +<21ed> <9592> +<21ee> <9686> +<21ef> +<21f0> <969d> +<21f1> <96af> +<21f2> <9733> +<21f3> <973b> +<21f4> <9743> +<21f5> <974d> +endbfchar + +100 beginbfchar +<21f6> <974f> +<21f7> <9751> +<21f8> <9755> +<21f9> <9857> +<21fa> <9865> +<21fd> <9927> +<21fe> +<21ff> <999e> +<2200> <9a4e> +<2201> <9ad9> +<2202> <9adc> +<2203> <9b75> +<2204> <9b72> +<2205> <9b8f> +<2206> <9bb1> +<2207> <9bbb> +<2208> <9c00> +<2209> <9d70> +<220a> <9d6b> +<220b> +<220c> <9e19> +<220d> <9ed1> +<220e> <00ac> +<220f> <005c> +<224c> <00a5> +<226c> <00a6> +<226d> <007d> +<226e> <0303> +<226f> <2019> +<2270> <005c> +<2271> <2018> +<2272> <007c> +<2273> <007e> +<2277> <2044> +<2278> <0192> +<2279> <00a7> +<227a> <00a4> +<227b> <201c> +<227c> <00ab> +<2281> <2012> +<2284> <00b7> +<2285> <00b6> +<2286> <2022> +<2287> <201a> +<2288> <201e> +<2289> <201d> +<228a> <00bb> +<228b> <2026> +<228c> <2030> +<228d> <00bf> +<2290> <00af> +<2294> <030a> +<2295> <00b8> +<2296> <030b> +<2297> <0328> +<2298> <030c> +<2299> <0336> +<229a> <00c6> +<229b> <00aa> +<229c> <0141> +<229d> <00d8> +<229e> <0152> +<229f> <00ba> +<22a0> <00e6> +<22a1> <0131> +<22a2> <0142> +<22a3> <00f8> +<22a4> <0153> +<22a5> <00df> +<22a6> <002d> +<22a7> <00a9> +<22a8> <00ac> +<22a9> <00ae> +<22ae> <00b5> +<22af> <00b9> +<22ee> <0160> +<22ef> <0178> +<22f0> <017d> +<22f1> <0305> +<22f2> <0161> +<22f3> <2122> +<22f4> <017e> +<22f5> <0030> +<22f6> <2002> +<2332> <00a5> +<2354> <203e> +<2355> +<2356> <2032> +<2357> <00a8> +<2358> <2036> +<2359> <00c4> +<235a> <00f9> +<235b> <00e9> +<235c> <00ed> +<235d> <00df> +<235e> <00e7> +<235f> <00c7> +<2360> <00d1> +<2361> <00f1> +<2364> <00f3> +endbfchar + +100 beginbfchar +<2365> <00fa> +<2366> <00a1> +<2367> <00bf> +<2368> <00bd> +<2369> <00d6> +<236a> <00dc> +<236b> <00e4> +<236c> <00eb> +<236d> <00ef> +<236e> <00f6> +<236f> <00dc> +<2370> <00e2> +<2371> <00ea> +<2372> <00ee> +<2373> <00f4> +<2374> <00fc> +<2375> <00e0> +<2376> <00e9> +<2377> <00e1> +<2378> <007e> +<2379> <0030> +<237a> <00ac> +<237b> <005c> +<23be> <30ee> +<23bf> <30ab> +<23c0> <30b1> +<23c1> <30f4> +<23c2> <30ac> +<23c3> <30ae> +<23c4> <30b0> +<23c5> <30b2> +<23c6> <30b4> +<23c7> <30b6> +<23c8> <30b8> +<23c9> <30ba> +<23ca> <30bc> +<23cb> <30be> +<23cc> <30c0> +<23cd> <30c2> +<23ce> <30c5> +<23cf> <30c7> +<23d0> <30c9> +<23db> +<23dc> <3092> +<23dd> <3041> +<23de> <3043> +<23df> <3045> +<23e0> <3047> +<23e1> <3049> +<23e2> <3083> +<23e3> <3085> +<23e4> <3087> +<23e5> <3063> +<23e6> <3042> +<23e7> <3044> +<23e8> <3046> +<23e9> <3048> +<23ec> <304d> +<23ed> <304f> +<23ee> <3051> +<23ef> <3053> +<23f0> <3055> +<23f1> <3057> +<23f2> <3059> +<23f3> <305b> +<23f4> <305d> +<23f5> <305f> +<23f6> <3061> +<23f7> <3064> +<23f8> <3066> +<23f9> <3068> +<2400> <3072> +<2401> <3075> +<2402> <3078> +<2403> <307b> +<2409> <3084> +<240a> <3086> +<2411> <308f> +<2412> <3093> +<2415> <308e> +<2416> <304c> +<2417> <304e> +<2418> <3050> +<2419> <3052> +<241a> <3054> +<241b> <3056> +<241c> <3068> +<241d> <305a> +<241e> <305c> +<241f> <305e> +<2420> <3060> +<2421> <3062> +<2422> <3065> +<2423> <3067> +<2424> <3069> +<2431> <005b> +<2432> <005d> +<243b> <2012> +<243c> +<2489> <25b2> +endbfchar + +100 beginbfchar +<248a> <20ac> +<248b> <2126> +<248e> +<2491> <0101> +<2492> <012b> +<2493> <016b> +<2494> <0113> +<2495> <014d> +<2496> <0100> +<2497> <012a> +<2498> <016a> +<2499> <0112> +<249a> <014c> +<24a1> <2070> +<24b2> <01cd> +<24b3> <011a> +<24b4> <0045030a> +<24b5> <1ebc> +<24b6> <01cf> +<24b7> <0049030a> +<24b8> <0128> +<24b9> <01d1> +<24ba> <004f030a> +<24bb> <01d3> +<24bc> <016e> +<24bd> <0168> +<24be> <01ce> +<24bf> <011b> +<24c0> <0065030a> +<24c1> <1ebd> +<24c2> <01d0> +<24c3> <0131030a> +<24c4> <0129> +<24c5> <01d2> +<24c6> <006f030a> +<24c7> <01d4> +<24c8> <016f> +<24c9> <0169> +<24ca> <0251> +<24cb> <1f71> +<24cc> <1f70> +<24cd> <01fd> +<24ce> <00e6> +<24cf> <0254> +<24d0> <0254> +<24d1> <0254> +<24d2> <0259> +<24d3> <0259> +<24d6> <025a> +<24d9> <1f73> +<24da> <1f72> +<24db> <0237> +<24dc> <014b> +<24dd> <0275> +<24de> <028c> +<24df> <028c> +<24e0> <028c> +<24e1> <0292> +<24e2> <0283> +<24e3> <02d0> +<2520> <00a5> +<2540> <00a6> +<2541> <007d> +<2542> <0303> +<2543> <2019> +<2544> <005c> +<2545> <2018> +<2546> <007c> +<2547> <007e> +<254b> <2044> +<254c> <0192> +<254d> <00a7> +<254e> <00a4> +<254f> <201c> +<2550> <00ab> +<2555> <2012> +<2558> <00b7> +<2559> <00b6> +<255a> <2022> +<255b> <201a> +<255c> <201e> +<255d> <201d> +<255e> <00bb> +<255f> <2026> +<2560> <2030> +<2561> <00bf> +<2564> <00af> +<2568> <030a> +<2569> <00b8> +<256a> <030b> +<256b> <0328> +<256c> <030c> +<256d> <0336> +<256e> <00c6> +<256f> <00aa> +<2570> <0141> +<2571> <00d8> +<2572> <0152> +<2573> <00ba> +<2574> <00e6> +endbfchar + +100 beginbfchar +<2575> <0131> +<2576> <0142> +<2577> <00f8> +<2578> <0153> +<2579> <00df> +<257a> <002d> +<257b> <00a9> +<257c> <00ac> +<257d> <00ae> +<2582> <00b5> +<2583> <00b9> +<25c2> <0160> +<25c3> <0178> +<25c4> <017d> +<25c5> <0305> +<25c6> <0161> +<25c7> <2122> +<25c8> <017e> +<25c9> <0030> +<25ca> <20ac> +<25cb> <2126> +<25ce> +<25d1> <0101> +<25d2> <012b> +<25d3> <016b> +<25d4> <0113> +<25d5> <014d> +<25d6> <0100> +<25d7> <012a> +<25d8> <016a> +<25d9> <0112> +<25da> <014c> +<25e1> <2070> +<25f2> <01cd> +<25f3> <011a> +<25f4> <0045030a> +<25f5> <1ebc> +<25f6> <01cf> +<25f7> <0049030a> +<25f8> <0128> +<25f9> <01d1> +<25fa> <004f030a> +<25fb> <01d3> +<25fc> <016e> +<25fd> <0168> +<25fe> <01ce> +<25ff> <011b> +<2600> <0065030a> +<2601> <1ebd> +<2602> <01d0> +<2603> <0131030a> +<2604> <0129> +<2605> <01d2> +<2606> <006f030a> +<2607> <01d4> +<2608> <016f> +<2609> <0169> +<2614> <0336> +<2615> <002d> +<2616> <003d> +<2617> <002c> +<2628> <0336> +<2629> <002d> +<262a> <003d> +<262b> <002c> +<2632> <00b7> +<2633> <20ac> +<2634> <0030002f0033> +<2637> <00be> +<263e> <0031002f0037> +<263f> <0032002f0037> +<2640> <0033002f0037> +<2641> <0034002f0037> +<2642> <0035002f0037> +<2643> <0036002f0037> +<2648> <0031002f0039> +<2649> <0032002f0039> +<264a> <0034002f0039> +<264b> <0035002f0039> +<264c> <0037002f0039> +<264d> <0038002f0039> +<264e> <0031002f00310030> +<264f> <0033002f00310030> +<2650> <0037002f00310030> +<2651> <0039002f00310030> +<2652> <0031002f00310031> +<2653> <0032002f00310031> +<2654> <0033002f00310031> +<2655> <0034002f00310031> +<2656> <0035002f00310031> +<2657> <0036002f00310031> +<2658> <0037002f00310031> +<2659> <0038002f00310031> +<265a> <0039002f00310031> +<265b> <00310030002f00310031> +<265c> <0031002f00310032> +<265d> <0035002f00310032> +<265e> <0037002f00310032> +<265f> <00310031002f00310032> +<2660> <0031002f003100300030> +endbfchar + +100 beginbfchar +<2661> <0030002f0033> +<2662> <0031002f0032> +<2663> <0031002f0033> +<2664> <0032002f0033> +<2665> <0031002f0034> +<2666> <0033002f0034> +<2667> <0031002f0035> +<2668> <0032002f0035> +<2669> <0033002f0035> +<266a> <0034002f0035> +<266b> <0031002f0036> +<266c> <0035002f0036> +<266d> <0031002f0037> +<266e> <0032002f0037> +<266f> <0033002f0037> +<2670> <0034002f0037> +<2671> <0035002f0037> +<2672> <0036002f0037> +<2673> <0031002f0038> +<2674> <0033002f0038> +<2675> <0035002f0038> +<2676> <0037002f0038> +<2677> <0031002f0039> +<2678> <0032002f0039> +<2679> <0034002f0039> +<267a> <0035002f0039> +<267b> <0037002f0039> +<267c> <0038002f0039> +<267d> <0031002f00310030> +<267e> <0033002f00310030> +<267f> <0037002f00310030> +<2680> <0039002f00310030> +<2681> <0031002f00310031> +<2682> <0032002f00310031> +<2683> <0033002f00310031> +<2684> <0034002f00310031> +<2685> <0035002f00310031> +<2686> <0036002f00310031> +<2687> <0037002f00310031> +<2688> <0038002f00310031> +<2689> <0039002f00310031> +<268a> <00310030002f00310031> +<268b> <0031002f00310032> +<268c> <0035002f00310032> +<268d> <0037002f00310032> +<268e> <00310031002f00310032> +<268f> <0031002f003100300030> +<269a> <0030> +<269b> <2163> +<269c> <00300030> +<269d> <00300031> +<269e> <00300032> +<269f> <00300033> +<26a0> <00300034> +<26a1> <00300035> +<26a2> <00300036> +<26a3> <00300037> +<26a4> <00300038> +<26a5> <00300039> +<26a6> <00320031> +<26a7> <00320032> +<26a8> <00320033> +<26a9> <00320034> +<26aa> <00320035> +<26ab> <00320036> +<26ac> <00320037> +<26ad> <00320038> +<26ae> <00320039> +<26af> <00330030> +<26b0> <00330031> +<26b1> <00330032> +<26b2> <00330033> +<26b3> <00330034> +<26b4> <00330035> +<26b5> <00330036> +<26b6> <00330037> +<26b7> <00330038> +<26b8> <00330039> +<26b9> <00340030> +<26ba> <00340031> +<26bb> <00340032> +<26bc> <00340033> +<26bd> <00340034> +<26be> <00340035> +<26bf> <00340036> +<26c0> <00340037> +<26c1> <00340038> +<26c2> <00340039> +<26c3> <00350030> +<26c4> <00350031> +<26c5> <00350032> +<26c6> <00350033> +<26c7> <00350034> +<26c8> <00350035> +<26c9> <00350036> +<26ca> <00350037> +<26cb> <00350038> +<26cc> <00350039> +<26cd> <00360030> +<26ce> <00360031> +endbfchar + +100 beginbfchar +<26cf> <00360032> +<26d0> <00360033> +<26d1> <00360034> +<26d2> <00360035> +<26d3> <00360036> +<26d4> <00360037> +<26d5> <00360038> +<26d6> <00360039> +<26d7> <00370030> +<26d8> <00370031> +<26d9> <00370032> +<26da> <00370033> +<26db> <00370034> +<26dc> <00370035> +<26dd> <00370036> +<26de> <00370037> +<26df> <00370038> +<26e0> <00370039> +<26e1> <00380030> +<26e2> <00380031> +<26e3> <00380032> +<26e4> <00380033> +<26e5> <00380034> +<26e6> <00380035> +<26e7> <00380036> +<26e8> <00380037> +<26e9> <00380038> +<26ea> <00380039> +<26eb> <00390030> +<26ec> <00390031> +<26ed> <00390032> +<26ee> <00390033> +<26ef> <00390034> +<26f0> <00390035> +<26f1> <00390036> +<26f2> <00390037> +<26f3> <00390038> +<26f4> <00390039> +<26f5> <003100300030> +<2702> <0078006900690069> +<2703> <007800690076> +<2704> <00780076> +<2711> <0058004900490049> +<2712> <005800490056> +<2713> <00580056> +<272e> <3042> +<272f> <3044> +<2730> <3046> +<2731> <3048> +<2734> <304d> +<2735> <304f> +<2736> <3051> +<2737> <3053> +<2738> <3055> +<2739> <3057> +<273a> <3059> +<273b> <305b> +<273c> <305d> +<273d> <305f> +<273e> <3061> +<273f> <3064> +<2740> <3066> +<2741> <3068> +<2748> <3072> +<2749> <3075> +<274a> <3078> +<274b> <307b> +<2751> <3084> +<2752> <3086> +<275e> <30a2> +<275f> <30a4> +<2760> <30a6> +<2761> <30a8> +<2764> <30ad> +<2765> <30af> +<2766> <30b1> +<2767> <30b3> +<2768> <30b5> +<2769> <30b7> +<276a> <30b9> +<276b> <30bb> +<276c> <30bd> +<276d> <30bf> +<276e> <30c1> +<276f> <30c4> +<2770> <30c6> +<2771> <30c8> +<2778> <30d2> +<2779> <30d5> +<277a> <30d8> +<277b> <30db> +<2781> <30e4> +<2782> <30e6> +<2798> <53414e00> +<2799> <53414e8c> +<279a> <53414e09> +<279b> <534156db> +<279c> <53414e94> +<279d> <5341516d> +<279e> <53414e03> +endbfchar + +100 beginbfchar +<279f> <5341516b> +<27a0> <53414e5d> +<27a1> <4e8c5341> +<27a2> <55b6> +<27a3> <5408> +<27a4> <6ceb> +<27a5> <554f> +<27a6> <7b54> +<27a7> <4f8b> +<27bc> <3063> +<27bd> <624d> +<27be> <3007> +<27bf> <4e00> +<27c0> <4e8c> +<27c1> <4e09> +<27c2> <56db> +<27c3> <4e94> +<27c4> <516d> +<27c5> <4e03> +<27c6> <516b> +<27c7> <4e5d> +<27c8> <5341> +<27c9> <3007> +<27ca> <4e00> +<27cb> <4e8c> +<27cc> <4e09> +<27cd> <56db> +<27ce> <4e94> +<27cf> <516d> +<27d0> <4e03> +<27d1> <516b> +<27d2> <4e5d> +<27d3> <5341> +<27d4> <3007> +<27d5> <4e00> +<27d6> <4e8c> +<27d7> <4e09> +<27d8> <56db> +<27d9> <4e94> +<27da> <516d> +<27db> <4e03> +<27dc> <516b> +<27dd> <4e5d> +<27de> <3064> +<27df> <624d> +<27e0> <4e00> +<27e1> <4e8c> +<27e2> <4e09> +<27e3> <56db> +<27e4> <4e94> +<27e5> <516d> +<27e6> <4e03> +<27e7> <516b> +<27e8> <4e5d> +<27e9> <5341> +<27ea> <3007> +<27eb> <4e00> +<27ec> <4e8c> +<27ed> <4e09> +<27ee> <56db> +<27ef> <4e94> +<27f0> <516d> +<27f1> <4e03> +<27f2> <516b> +<27f3> <4e5d> +<27f4> <5341> +<27f5> <30b3> +<27f6> <3063> +<27f7> <30c3> +<27f8> <30a9> +<27f9> <00280029> +<27fa> <00300030> +<2804> <00330032> +<2805> <00330033> +<2806> <00330034> +<2807> <00330035> +<2808> <00330036> +<2809> <00330037> +<280a> <00330038> +<280b> <00330039> +<280c> <00340030> +<280d> <00340031> +<280e> <00340032> +<280f> <00340033> +<2810> <00340034> +<2811> <00340035> +<2812> <00340036> +<2813> <00340037> +<2814> <00340038> +<2815> <00340039> +<2816> <00350030> +<2817> <00350031> +<2818> <00350032> +<2819> <00350033> +<281a> <00350034> +<281b> <00350035> +<281c> <00350036> +<281d> <00350037> +<281e> <00350038> +<281f> <00350039> +endbfchar + +100 beginbfchar +<2820> <00360030> +<2821> <00360031> +<2822> <00360032> +<2823> <00360033> +<2824> <00360034> +<2825> <00360035> +<2826> <00360036> +<2827> <00360037> +<2828> <00360038> +<2829> <00360039> +<282a> <00370030> +<282b> <00370031> +<282c> <00370032> +<282d> <00370033> +<282e> <00370034> +<282f> <00370035> +<2830> <00370036> +<2831> <00370037> +<2832> <00370038> +<2833> <00370039> +<2834> <00380030> +<2835> <00380031> +<2836> <00380032> +<2837> <00380033> +<2838> <00380034> +<2839> <00380035> +<283a> <00380036> +<283b> <00380037> +<283c> <00380038> +<283d> <00380039> +<283e> <00390030> +<283f> <00390031> +<2840> <00390032> +<2841> <00390033> +<2842> <00390034> +<2843> <00390035> +<2844> <00390036> +<2845> <00390037> +<2846> <00390038> +<2847> <00390039> +<2848> <003100300030> +<287d> <3042> +<287e> <3044> +<287f> <3046> +<2880> <3048> +<2883> <304d> +<2884> <304f> +<2885> <3051> +<2886> <3053> +<2887> <3055> +<2888> <3057> +<2889> <3059> +<288a> <305b> +<288b> <305d> +<288c> <305f> +<288d> <3061> +<288e> <3064> +<288f> <3066> +<2890> <3068> +<2897> <3072> +<2898> <3075> +<2899> <3078> +<289a> <307b> +<28a0> <3084> +<28a1> <3086> +<28dc> <30f3> +<28e7> <3290> +<28ee> <8abf> +<28ef> <329f> +<28f0> <526f> +<28f1> <6e1b> +<28f2> <6a19> +<28f3> <6b20> +<28f4> <57fa> +<28f5> <7981> +<28f8> <329b> +<28f9> <329a> +<28fa> <32a3> +<28fb> <32a2> +<28fc> <3297> +<28fd> <51fa> +<28fe> <329c> +<28ff> <3295> +<2900> <6e08> +<2901> <5897> +<2902> <554f> +<2903> <7b54> +<2904> <4f8b> +<2905> <96fb> +<2906> <25cc> +<2907> <24ff> +<2908> <00300030> +<2909> <00300031> +<290a> <00300032> +<290b> <00300033> +<290c> <00300034> +<290d> <00300035> +<290e> <00300036> +<290f> <00300037> +<2910> <00300038> +endbfchar + +100 beginbfchar +<2911> <00300039> +<2912> <00310030> +<2913> <00310031> +<2914> <00310032> +<2915> <00310033> +<2916> <00310034> +<2917> <00310035> +<2918> <00310036> +<2919> <00310037> +<291a> <00310038> +<291b> <00310039> +<291c> <00320030> +<291d> <00320031> +<291e> <00320032> +<291f> <00320033> +<2920> <00320034> +<2921> <00320035> +<2922> <00320036> +<2923> <00320037> +<2924> <00320038> +<2925> <00320039> +<2926> <00330030> +<2927> <00330031> +<2928> <00330032> +<2929> <00330033> +<292a> <00330034> +<292b> <00330035> +<292c> <00330036> +<292d> <00330037> +<292e> <00330038> +<292f> <00330039> +<2930> <00340030> +<2931> <00340031> +<2932> <00340032> +<2933> <00340033> +<2934> <00340034> +<2935> <00340035> +<2936> <00340036> +<2937> <00340037> +<2938> <00340038> +<2939> <00340039> +<293a> <00350030> +<293b> <00350031> +<293c> <00350032> +<293d> <00350033> +<293e> <00350034> +<293f> <00350035> +<2940> <00350036> +<2941> <00350037> +<2942> <00350038> +<2943> <00350039> +<2944> <00360030> +<2945> <00360031> +<2946> <00360032> +<2947> <00360033> +<2948> <00360034> +<2949> <00360035> +<294a> <00360036> +<294b> <00360037> +<294c> <00360038> +<294d> <00360039> +<294e> <00370030> +<294f> <00370031> +<2950> <00370032> +<2951> <00370033> +<2952> <00370034> +<2953> <00370035> +<2954> <00370036> +<2955> <00370037> +<2956> <00370038> +<2957> <00370039> +<2958> <00380030> +<2959> <00380031> +<295a> <00380032> +<295b> <00380033> +<295c> <00380034> +<295d> <00380035> +<295e> <00380036> +<295f> <00380037> +<2960> <00380038> +<2961> <00380039> +<2962> <00390030> +<2963> <00390031> +<2964> <00390032> +<2965> <00390033> +<2966> <00390034> +<2967> <00390035> +<2968> <00390036> +<2969> <00390037> +<296a> <00390038> +<296b> <00390039> +<296c> <003100300030> +<29a1> <3042> +<29a2> <3044> +<29a3> <3046> +<29a4> <3048> +<29a7> <304d> +<29a8> <304f> +<29a9> <3051> +<29aa> <3053> +endbfchar + +100 beginbfchar +<29ab> <3055> +<29ac> <3057> +<29ad> <3059> +<29ae> <305b> +<29af> <305d> +<29b0> <305f> +<29b1> <3061> +<29b2> <3064> +<29b3> <3066> +<29b4> <3068> +<29bb> <3072> +<29bc> <3075> +<29bd> <3078> +<29be> <307b> +<29c4> <3084> +<29c5> <3086> +<29d1> <30a2> +<29d2> <30a4> +<29d3> <30a6> +<29d4> <30a8> +<29d7> <30ad> +<29d8> <30af> +<29d9> <30b1> +<29da> <30b3> +<29db> <30b5> +<29dc> <30b7> +<29dd> <30b9> +<29de> <30bb> +<29df> <30bd> +<29e0> <30bf> +<29e1> <30c1> +<29e2> <30c4> +<29e3> <30c6> +<29e4> <30c8> +<29eb> <30d2> +<29ec> <30d5> +<29ed> <30d8> +<29ee> <30db> +<29f4> <30e4> +<29f5> <30e6> +<2a00> <30f3> +<2a01> <65e5> +<2a02> <6708> +<2a03> <706b> +<2a04> <6c34> +<2a05> <6728> +<2a06> <91d1> +<2a07> <571f> +<2a08> <554f> +<2a09> <7b54> +<2a0a> <4f8b> +<2a0b> <25cf> +<2a0c> <0030> +<2a0d> <00300030> +<2a0e> <0031> +<2a0f> <00300031> +<2a10> <0032> +<2a11> <00300032> +<2a12> <0033> +<2a13> <00300033> +<2a14> <0034> +<2a15> <00300034> +<2a16> <0035> +<2a17> <00300035> +<2a18> <0036> +<2a19> <00300036> +<2a1a> <0037> +<2a1b> <00300037> +<2a1c> <0038> +<2a1d> <00300038> +<2a1e> <0039> +<2a1f> <00300039> +<2a20> <00310030> +<2a21> <00310031> +<2a22> <00310032> +<2a23> <00310033> +<2a24> <00310034> +<2a25> <00310035> +<2a26> <00310036> +<2a27> <00310037> +<2a28> <00310038> +<2a29> <00310039> +<2a2a> <00320030> +<2a2b> <00320031> +<2a2c> <00320032> +<2a2d> <00320033> +<2a2e> <00320034> +<2a2f> <00320035> +<2a30> <00320036> +<2a31> <00320037> +<2a32> <00320038> +<2a33> <00320039> +<2a34> <00330030> +<2a35> <00330031> +<2a36> <00330032> +<2a37> <00330033> +<2a38> <00330034> +<2a39> <00330035> +<2a3a> <00330036> +<2a3b> <00330037> +endbfchar + +100 beginbfchar +<2a3c> <00330038> +<2a3d> <00330039> +<2a3e> <00340030> +<2a3f> <00340031> +<2a40> <00340032> +<2a41> <00340033> +<2a42> <00340034> +<2a43> <00340035> +<2a44> <00340036> +<2a45> <00340037> +<2a46> <00340038> +<2a47> <00340039> +<2a48> <00350030> +<2a49> <00350031> +<2a4a> <00350032> +<2a4b> <00350033> +<2a4c> <00350034> +<2a4d> <00350035> +<2a4e> <00350036> +<2a4f> <00350037> +<2a50> <00350038> +<2a51> <00350039> +<2a52> <00360030> +<2a53> <00360031> +<2a54> <00360032> +<2a55> <00360033> +<2a56> <00360034> +<2a57> <00360035> +<2a58> <00360036> +<2a59> <00360037> +<2a5a> <00360038> +<2a5b> <00360039> +<2a5c> <00370030> +<2a5d> <00370031> +<2a5e> <00370032> +<2a5f> <00370033> +<2a60> <00370034> +<2a61> <00370035> +<2a62> <00370036> +<2a63> <00370037> +<2a64> <00370038> +<2a65> <00370039> +<2a66> <00380030> +<2a67> <00380031> +<2a68> <00380032> +<2a69> <00380033> +<2a6a> <00380034> +<2a6b> <00380035> +<2a6c> <00380036> +<2a6d> <00380037> +<2a6e> <00380038> +<2a6f> <00380039> +<2a70> <00390030> +<2a71> <00390031> +<2a72> <00390032> +<2a73> <00390033> +<2a74> <00390034> +<2a75> <00390035> +<2a76> <00390036> +<2a77> <00390037> +<2a78> <00390038> +<2a79> <00390039> +<2a7a> <003100300030> +<2aaf> <3042> +<2ab0> <3044> +<2ab1> <3046> +<2ab2> <3048> +<2ab5> <304d> +<2ab6> <304f> +<2ab7> <3051> +<2ab8> <3053> +<2ab9> <3055> +<2aba> <3057> +<2abb> <3059> +<2abc> <305b> +<2abd> <305d> +<2abe> <305f> +<2abf> <3061> +<2ac0> <3064> +<2ac1> <3066> +<2ac2> <3068> +<2ac9> <3072> +<2aca> <3075> +<2acb> <3078> +<2acc> <307b> +<2ad2> <3084> +<2ad3> <3086> +<2adf> <30a2> +<2ae0> <30a4> +<2ae1> <30a6> +<2ae2> <30a8> +<2ae5> <30ad> +<2ae6> <30af> +<2ae7> <30b1> +<2ae8> <30b3> +<2ae9> <30b5> +<2aea> <30b7> +<2aeb> <30b9> +<2aec> <30bb> +<2aed> <30bd> +endbfchar + +100 beginbfchar +<2aee> <30bf> +<2aef> <30c1> +<2af0> <30c4> +<2af1> <30c6> +<2af2> <30c8> +<2af9> <30d2> +<2afa> <30d5> +<2afb> <30d8> +<2afc> <30db> +<2b02> <30e4> +<2b03> <30e6> +<2b0f> <65e5> +<2b10> <6708> +<2b11> <706b> +<2b12> <6c34> +<2b13> <6728> +<2b14> <91d1> +<2b15> <571f> +<2b16> <8ca0> +<2b17> <52dd> +<2b18> <554f> +<2b19> <7b54> +<2b1a> <4f8b> +<2b1b> <20de> +<2b1c> <25a1> +<2b1d> <0030> +<2b1e> <00300030> +<2b1f> <0031> +<2b20> <00300031> +<2b21> <0032> +<2b22> <00300032> +<2b23> <0033> +<2b24> <00300033> +<2b25> <0034> +<2b26> <00300034> +<2b27> <0035> +<2b28> <00300035> +<2b29> <0036> +<2b2a> <00300036> +<2b2b> <0037> +<2b2c> <00300037> +<2b2d> <0038> +<2b2e> <00300038> +<2b2f> <0039> +<2b30> <00300039> +<2b31> <00310030> +<2b32> <00310031> +<2b33> <00310032> +<2b34> <00310033> +<2b35> <00310034> +<2b36> <00310035> +<2b37> <00310036> +<2b38> <00310037> +<2b39> <00310038> +<2b3a> <00310039> +<2b3b> <00320030> +<2b3c> <00320031> +<2b3d> <00320032> +<2b3e> <00320033> +<2b3f> <00320034> +<2b40> <00320035> +<2b41> <00320036> +<2b42> <00320037> +<2b43> <00320038> +<2b44> <00320039> +<2b45> <00330030> +<2b46> <00330031> +<2b47> <00330032> +<2b48> <00330033> +<2b49> <00330034> +<2b4a> <00330035> +<2b4b> <00330036> +<2b4c> <00330037> +<2b4d> <00330038> +<2b4e> <00330039> +<2b4f> <00340030> +<2b50> <00340031> +<2b51> <00340032> +<2b52> <00340033> +<2b53> <00340034> +<2b54> <00340035> +<2b55> <00340036> +<2b56> <00340037> +<2b57> <00340038> +<2b58> <00340039> +<2b59> <00350030> +<2b5a> <00350031> +<2b5b> <00350032> +<2b5c> <00350033> +<2b5d> <00350034> +<2b5e> <00350035> +<2b5f> <00350036> +<2b60> <00350037> +<2b61> <00350038> +<2b62> <00350039> +<2b63> <00360030> +<2b64> <00360031> +<2b65> <00360032> +<2b66> <00360033> +<2b67> <00360034> +endbfchar + +100 beginbfchar +<2b68> <00360035> +<2b69> <00360036> +<2b6a> <00360037> +<2b6b> <00360038> +<2b6c> <00360039> +<2b6d> <00370030> +<2b6e> <00370031> +<2b6f> <00370032> +<2b70> <00370033> +<2b71> <00370034> +<2b72> <00370035> +<2b73> <00370036> +<2b74> <00370037> +<2b75> <00370038> +<2b76> <00370039> +<2b77> <00380030> +<2b78> <00380031> +<2b79> <00380032> +<2b7a> <00380033> +<2b7b> <00380034> +<2b7c> <00380035> +<2b7d> <00380036> +<2b7e> <00380037> +<2b7f> <00380038> +<2b80> <00380039> +<2b81> <00390030> +<2b82> <00390031> +<2b83> <00390032> +<2b84> <00390033> +<2b85> <00390034> +<2b86> <00390035> +<2b87> <00390036> +<2b88> <00390037> +<2b89> <00390038> +<2b8a> <00390039> +<2b8b> <003100300030> +<2bc0> <3042> +<2bc1> <3044> +<2bc2> <3046> +<2bc3> <3048> +<2bc6> <304d> +<2bc7> <304f> +<2bc8> <3051> +<2bc9> <3053> +<2bca> <3055> +<2bcb> <3057> +<2bcc> <3059> +<2bcd> <305b> +<2bce> <305d> +<2bcf> <305f> +<2bd0> <3061> +<2bd1> <3064> +<2bd2> <3066> +<2bd3> <3068> +<2bda> <3072> +<2bdb> <3075> +<2bdc> <3078> +<2bdd> <307b> +<2be3> <3084> +<2be4> <3086> +<2bf0> <30a2> +<2bf1> <30a4> +<2bf2> <30a6> +<2bf3> <30a8> +<2bf6> <30ad> +<2bf7> <30af> +<2bf8> <30b1> +<2bf9> <30b3> +<2bfa> <30b5> +<2bfb> <30b7> +<2bfc> <30b9> +<2bfd> <30bb> +<2bfe> <30bd> +<2bff> <30bf> +<2c00> <30c1> +<2c01> <30c4> +<2c02> <30c6> +<2c03> <30c8> +<2c0a> <30d2> +<2c0b> <30d5> +<2c0c> <30d8> +<2c0d> <30db> +<2c13> <30e4> +<2c14> <30e6> +<2c20> <65e5> +<2c21> <6708> +<2c22> <706b> +<2c23> <6c34> +<2c24> <6728> +<2c25> <91d1> +<2c26> <571f> +<2c27> <554f> +<2c28> <7b54> +<2c29> <4f8b> +<2c2a> <25a0> +<2c2b> <0030> +<2c2c> <00300030> +<2c2d> <0031> +<2c2e> <00300031> +<2c2f> <0032> +endbfchar + +100 beginbfchar +<2c30> <00300032> +<2c31> <0033> +<2c32> <00300033> +<2c33> <0034> +<2c34> <00300034> +<2c35> <0035> +<2c36> <00300035> +<2c37> <0036> +<2c38> <00300036> +<2c39> <0037> +<2c3a> <00300037> +<2c3b> <0038> +<2c3c> <00300038> +<2c3d> <0039> +<2c3e> <00300039> +<2c3f> <00310030> +<2c40> <00310031> +<2c41> <00310032> +<2c42> <00310033> +<2c43> <00310034> +<2c44> <00310035> +<2c45> <00310036> +<2c46> <00310037> +<2c47> <00310038> +<2c48> <00310039> +<2c49> <00320030> +<2c4a> <00320031> +<2c4b> <00320032> +<2c4c> <00320033> +<2c4d> <00320034> +<2c4e> <00320035> +<2c4f> <00320036> +<2c50> <00320037> +<2c51> <00320038> +<2c52> <00320039> +<2c53> <00330030> +<2c54> <00330031> +<2c55> <00330032> +<2c56> <00330033> +<2c57> <00330034> +<2c58> <00330035> +<2c59> <00330036> +<2c5a> <00330037> +<2c5b> <00330038> +<2c5c> <00330039> +<2c5d> <00340030> +<2c5e> <00340031> +<2c5f> <00340032> +<2c60> <00340033> +<2c61> <00340034> +<2c62> <00340035> +<2c63> <00340036> +<2c64> <00340037> +<2c65> <00340038> +<2c66> <00340039> +<2c67> <00350030> +<2c68> <00350031> +<2c69> <00350032> +<2c6a> <00350033> +<2c6b> <00350034> +<2c6c> <00350035> +<2c6d> <00350036> +<2c6e> <00350037> +<2c6f> <00350038> +<2c70> <00350039> +<2c71> <00360030> +<2c72> <00360031> +<2c73> <00360032> +<2c74> <00360033> +<2c75> <00360034> +<2c76> <00360035> +<2c77> <00360036> +<2c78> <00360037> +<2c79> <00360038> +<2c7a> <00360039> +<2c7b> <00370030> +<2c7c> <00370031> +<2c7d> <00370032> +<2c7e> <00370033> +<2c7f> <00370034> +<2c80> <00370035> +<2c81> <00370036> +<2c82> <00370037> +<2c83> <00370038> +<2c84> <00370039> +<2c85> <00380030> +<2c86> <00380031> +<2c87> <00380032> +<2c88> <00380033> +<2c89> <00380034> +<2c8a> <00380035> +<2c8b> <00380036> +<2c8c> <00380037> +<2c8d> <00380038> +<2c8e> <00380039> +<2c8f> <00390030> +<2c90> <00390031> +<2c91> <00390032> +<2c92> <00390033> +<2c93> <00390034> +endbfchar + +100 beginbfchar +<2c94> <00390035> +<2c95> <00390036> +<2c96> <00390037> +<2c97> <00390038> +<2c98> <00390039> +<2c99> <003100300030> +<2cce> <3042> +<2ccf> <3044> +<2cd0> <3046> +<2cd1> <3048> +<2cd4> <304d> +<2cd5> <304f> +<2cd6> <3051> +<2cd7> <3053> +<2cd8> <3055> +<2cd9> <3057> +<2cda> <3059> +<2cdb> <305b> +<2cdc> <305d> +<2cdd> <305f> +<2cde> <3061> +<2cdf> <3064> +<2ce0> <3066> +<2ce1> <3068> +<2ce8> <3072> +<2ce9> <3075> +<2cea> <3078> +<2ceb> <307b> +<2cf1> <3084> +<2cf2> <3086> +<2cfe> <30a2> +<2cff> <30a4> +<2d00> <30a6> +<2d01> <30a8> +<2d04> <30ad> +<2d05> <30af> +<2d06> <30b1> +<2d07> <30b3> +<2d08> <30b5> +<2d09> <30b7> +<2d0a> <30b9> +<2d0b> <30bb> +<2d0c> <30bd> +<2d0d> <30bf> +<2d0e> <30c1> +<2d0f> <30c4> +<2d10> <30c6> +<2d11> <30c8> +<2d18> <30d2> +<2d19> <30d5> +<2d1a> <30d8> +<2d1b> <30db> +<2d21> <30e4> +<2d22> <30e6> +<2d2e> <65e5> +<2d2f> <6708> +<2d30> <706b> +<2d31> <6c34> +<2d32> <6728> +<2d33> <91d1> +<2d34> <571f> +<2d35> <554f> +<2d36> <7b54> +<2d37> <4f8b> +<2d38> <0030> +<2d39> <00300030> +<2d3a> <0031> +<2d3b> <00300031> +<2d3c> <0032> +<2d3d> <00300032> +<2d3e> <0033> +<2d3f> <00300033> +<2d40> <0034> +<2d41> <00300034> +<2d42> <0035> +<2d43> <00300035> +<2d44> <0036> +<2d45> <00300036> +<2d46> <0037> +<2d47> <00300037> +<2d48> <0038> +<2d49> <00300038> +<2d4a> <0039> +<2d4b> <00300039> +<2d4c> <00310030> +<2d4d> <00310031> +<2d4e> <00310032> +<2d4f> <00310033> +<2d50> <00310034> +<2d51> <00310035> +<2d52> <00310036> +<2d53> <00310037> +<2d54> <00310038> +<2d55> <00310039> +<2d56> <00320030> +<2d57> <00320031> +<2d58> <00320032> +<2d59> <00320033> +<2d5a> <00320034> +<2d5b> <00320035> +endbfchar + +100 beginbfchar +<2d5c> <00320036> +<2d5d> <00320037> +<2d5e> <00320038> +<2d5f> <00320039> +<2d60> <00330030> +<2d61> <00330031> +<2d62> <00330032> +<2d63> <00330033> +<2d64> <00330034> +<2d65> <00330035> +<2d66> <00330036> +<2d67> <00330037> +<2d68> <00330038> +<2d69> <00330039> +<2d6a> <00340030> +<2d6b> <00340031> +<2d6c> <00340032> +<2d6d> <00340033> +<2d6e> <00340034> +<2d6f> <00340035> +<2d70> <00340036> +<2d71> <00340037> +<2d72> <00340038> +<2d73> <00340039> +<2d74> <00350030> +<2d75> <00350031> +<2d76> <00350032> +<2d77> <00350033> +<2d78> <00350034> +<2d79> <00350035> +<2d7a> <00350036> +<2d7b> <00350037> +<2d7c> <00350038> +<2d7d> <00350039> +<2d7e> <00360030> +<2d7f> <00360031> +<2d80> <00360032> +<2d81> <00360033> +<2d82> <00360034> +<2d83> <00360035> +<2d84> <00360036> +<2d85> <00360037> +<2d86> <00360038> +<2d87> <00360039> +<2d88> <00370030> +<2d89> <00370031> +<2d8a> <00370032> +<2d8b> <00370033> +<2d8c> <00370034> +<2d8d> <00370035> +<2d8e> <00370036> +<2d8f> <00370037> +<2d90> <00370038> +<2d91> <00370039> +<2d92> <00380030> +<2d93> <00380031> +<2d94> <00380032> +<2d95> <00380033> +<2d96> <00380034> +<2d97> <00380035> +<2d98> <00380036> +<2d99> <00380037> +<2d9a> <00380038> +<2d9b> <00380039> +<2d9c> <00390030> +<2d9d> <00390031> +<2d9e> <00390032> +<2d9f> <00390033> +<2da0> <00390034> +<2da1> <00390035> +<2da2> <00390036> +<2da3> <00390037> +<2da4> <00390038> +<2da5> <00390039> +<2da6> <003100300030> +<2ddb> <3042> +<2ddc> <3044> +<2ddd> <3046> +<2dde> <3048> +<2de1> <304d> +<2de2> <304f> +<2de3> <3051> +<2de4> <3053> +<2de5> <3055> +<2de6> <3057> +<2de7> <3059> +<2de8> <305b> +<2de9> <305d> +<2dea> <305f> +<2deb> <3061> +<2dec> <3064> +<2ded> <3066> +<2dee> <3068> +<2df5> <3072> +<2df6> <3075> +<2df7> <3078> +<2df8> <307b> +<2dfe> <3084> +<2dff> <3086> +<2e0b> <30a2> +endbfchar + +100 beginbfchar +<2e0c> <30a4> +<2e0d> <30a6> +<2e0e> <30a8> +<2e11> <30ad> +<2e12> <30af> +<2e13> <30b1> +<2e14> <30b3> +<2e15> <30b5> +<2e16> <30b7> +<2e17> <30b9> +<2e18> <30bb> +<2e19> <30bd> +<2e1a> <30bf> +<2e1b> <30c1> +<2e1c> <30c4> +<2e1d> <30c6> +<2e1e> <30c8> +<2e25> <30d2> +<2e26> <30d5> +<2e27> <30d8> +<2e28> <30db> +<2e2e> <30e4> +<2e2f> <30e6> +<2e3b> <65e5> +<2e3c> <6708> +<2e3d> <706b> +<2e3e> <6c34> +<2e3f> <6728> +<2e40> <91d1> +<2e41> <571f> +<2e42> <554f> +<2e43> <7b54> +<2e44> <4f8b> +<2e45> <25a0> +<2e46> <33c2> +<2e47> <33cd> +<2e48> <2116> +<2e49> <00500048> +<2e4a> <33d8> +<2e4b> <33da> +<2e4e> <00560053> +<2e4f> <2100> +<2e50> <33c2> +<2e51> <0063002f0063> +<2e52> <33c4> +<2e53> <2105> +<2e54> <3397> +<2e55> <3371> +<2e56> <3398> +<2e57> <2113> +<2e58> <338d> +<2e59> <339b> +<2e5a> <3396> +<2e5b> <006d002f006d> +<2e5c> <006e002f006d> +<2e5f> <30553058> +<2e60> <30553058> +<2e61> <30a230c8> +<2e64> <3304> +<2e65> <3306> +<2e66> <30a630eb30b7> +<2e67> <3308> +<2e68> <30a830af30b5> +<2e69> <3307> +<2e6a> <330a> +<2e6b> <30aa30f330b030b930c830ed30fc30e0> +<2e6c> <3309> +<2e6d> <30aa30f330c830ed> +<2e6e> <330b> +<2e6f> <30ab30c330d7> +<2e70> <330c> +<2e77> <30ad30ed30ea30c330c830eb> +<2e78> <3317> +<2e79> <30b030b930fc30e0> +<2e7a> <3319> +<2e7b> <30af30eb30b630fc30c9> +<2e83> <3324> +<2e84> <30c730ab> +<2e85> <3325> +<2e86> <30c630e9> +<2e87> <30c930e930af30de> +<2e8a> <30d030fc30c4> +<2e8b> <332d> +<2e8c> <30d130b930ab30eb> +<2e8d> <30d030ec30eb> +<2e91> <3332> +<2e92> <30d530a130e930c9> +<2e93> <30d530a730e030c8> +<2e96> <333c> +<2e97> <30d830af30c8> +<2e98> <30d830af30c830d130b930ab30eb> +<2e99> <30da30bb30bf> +<2e9a> <3337> +<2e9b> <30da30bf> +<2e9c> <3338> +<2e9d> <333a> +<2e9e> <333d> +<2e9f> <3341> +<2ea7> <3348> +<2eac> <30e630fc30ed> +endbfchar + +100 beginbfchar +<2ead> <30e930c9> +<2eae> <3352> +<2eaf> <3354> +<2eb0> <30eb30af30b9> +<2eb1> <30eb30d430a2> +<2eb2> <3353> +<2eb5> <30a230c8> +<2eb8> <3304> +<2eb9> <3306> +<2eba> <30a630eb30b7> +<2ebb> <3308> +<2ebc> <30a830af30b5> +<2ebd> <3307> +<2ebe> <330a> +<2ebf> <30aa30f330b030b930c830ed30fc30e0> +<2ec0> <3309> +<2ec1> <30aa30f330c830ed> +<2ec2> <330b> +<2ec3> <30ab30c330d7> +<2ec4> <330c> +<2ecb> <30ad30ed30ea30c430c830eb> +<2ecc> <3317> +<2ecd> <30b030b930fc30e0> +<2ece> <3319> +<2ecf> <30af30eb30b630cf30c9> +<2ed7> <3324> +<2ed8> <30c730ab> +<2ed9> <3325> +<2eda> <30c630e9> +<2edb> <30c930e930af30de> +<2ede> <30d030fc30c4> +<2edf> <332d> +<2ee0> <30d130b930ab30eb> +<2ee1> <30d030ec30eb> +<2ee5> <3332> +<2ee6> <30d530a130e930c9> +<2ee7> <30d530a730e030c8> +<2eea> <333c> +<2eeb> <30d830af30c8> +<2eec> <30d830af30c830d130b930ab30eb> +<2eed> <30da30bb30bf> +<2eee> <3337> +<2eef> <30da30bf> +<2ef0> <3338> +<2ef1> <333a> +<2ef2> <333d> +<2ef3> <3341> +<2efb> <3348> +<2f00> <30e630fc30ed> +<2f01> <30e930c9> +<2f02> <3352> +<2f03> <3354> +<2f04> <30eb30af30b9> +<2f05> <30eb30d430a2> +<2f06> <3353> +<2f09> <337e> +<2f0a> <337d> +<2f0b> <337c> +<2f0c> <337b> +<2f0d> <533b76426cd54eba> +<2f0e> <5b6668216cd54eba> +<2f0f> <5171540c7d445408> +<2f10> <5354540c7d445408> +<2f11> <54088cc74f1a793e> +<2f12> <5408540d4f1a793e> +<2f13> <793e56e36cd54eba> +<2f14> <5b9765596cd54eba> +<2f15> <90f54fbf756a53f7> +<2f16> <533b76426cd54eba> +<2f17> <5b6668216cd54eba> +<2f18> <5171540c7d445408> +<2f19> <5354540c7d445408> +<2f1a> <54088cc74f1a793e> +<2f1b> <5408540d4f1a793e> +<2f1c> <793e56e36cd54eba> +<2f1d> <5b9765596cd54eba> +<2f1e> <90f54fbf756a53f7> +<2f1f> <002d> +<2f20> <003d> +<2f21> <2103> +<2f22> <2640> +<2f23> <2642> +<2f24> <3013> +<2f25> <3012> +<2f36> <0027> +<2f37> <0022> +<2f38> <004a00410053> +<2f39> <2135> +<2f3a> <03d0> +<2f3b> <220a> +<2f3c> <210f> +<2f3d> <00b5> +<2f3e> <03d5> +<2f3f> <03db> +<2f40> <03d1> +<2f41> <91ce7403> +<2f44> <266c> +<2f45> +<2f46> <00a9> +<2f47> <00a9> +endbfchar + +100 beginbfchar +<2f48> <00ae> +<2f49> <00ae> +<2f4a> <303b> +<2f4b> <303b> +<2f4f> <203c> +<2f50> <2049> +<2f51> <0021> +<2f52> <203c> +<2f53> <2049> +<2f54> <244a> +<2f55> <005c005c> +<2f56> <2213> +<2f57> <2260> +<2f58> <2243> +<2f6f> <239b> +<2f72> <23a0> +<2f73> <239d> +<2f74> <239b> +<2f75> <23a0> +<2f76> <239e> +<2f77> <23a1> +<2f7a> <23a6> +<2f7b> <23a3> +<2f7c> <23a1> +<2f7d> <23a6> +<2f7e> <23a4> +<2f7f> <23a1> +<2f82> <23a6> +<2f83> <23a3> +<2f84> <23a1> +<2f85> <23a6> +<2f86> <23a4> +<2f87> +<2f88> <2015> +<2f8f> <2702> +<2f90> <2702> +<2f91> <2702> +<2f92> <2702> +<2f93> <303d> +<2f94> <3012> +<2f95> <309f> +<2f96> <534d> +<2f97> <2207> +<2f98> <2205> +<2f99> <22a0> +<2f9a> <2296> +<2f9b> <2298> +<2f9c> <2295> +<2f9d> <2297> +<2f9e> <229e> +<2f9f> <2295> +<2fa0> <26a0> +<2fa1> <25b3> +<2fa2> <25c0> +<2fa3> <25b6> +<2fa4> <21e6> +<2fa5> <21e8> +<2fa6> <21e7> +<2fa7> <21e9> +<2fa8> <21d0> +<2fa9> <2194> +<2fae> <21cc> +<2faf> <21cb> +<2fb2> <2190> +<2fb3> <2192> +<2fb4> <2191> +<2fb8> <2504> +<2fb9> <2506> +<2fba> <3030> +<2fbb> <2307> +<2fbc> <3030> +<2fbd> <2307> +<2fbe> <3030> +<2fbf> <2307> +<2fc0> <3030> +<2fc1> <2307> +<2fc2> <3030> +<2fc3> <2307> +<2fc4> <2740> +<2fc5> <273f> +<2fc6> <25a1> +<2fc9> <25a1> +<2fca> <25a1> +<2fcb> <25a1> +<2fcc> <25a1> +<2fcd> <25ab> +<2fce> <25a0> +<2fcf> <25aa> +<2fd0> <271a> +<2fd1> <271a> +<2fd2> <25c7> +<2fd5> <25c7> +<2fd6> <25c7> +<2fd7> <25c7> +<2fd8> <25c7> +<2fd9> <25c6> +<2fda> <25c6> +<2fdb> <25ce> +<2fdc> <25c9> +<2fdd> <25cb> +endbfchar + +100 beginbfchar +<2fde> <25e6> +<2fdf> <25cf> +<2fe0> <2022> +<2fe1> <2756> +<2fe2> <2756> +<2fe3> <2756> +<2fe4> <2756> +<2fed> <3053> +<2fee> <3053> +<2fef> <30b3> +<2ff0> <30b3> +<2ffd> <3095> +<3004> <3096> +<304c> <30fc> +<3057> <30f5> +<305e> <30f6> +<30b4> <3095> +<30bb> <3096> +<3100> <3094> +<3103> <30fc> +<310e> <30f5> +<3115> <30f6> +<3161> <30fb> +<3162> +<3163> <203b> +<3164> <25cb> +<3165> <25ce> +<3166> <25c9> +<3167> <25b3> +<3168> <25b2> +<318a> <3095> +<3191> <3096> +<31d5> <3041> +<31d6> <3043> +<31d7> <3045> +<31d8> <3047> +<31d9> <3049> +<31da> <304b> +<31db> <3051> +<31dc> <3063> +<31dd> <3083> +<31de> <3085> +<31df> <3087> +<31e0> <308e> +<31ec> <30f5> +<31f3> <30f6> +<3237> <30a1> +<3238> <30a3> +<3239> <30a5> +<323a> <30a7> +<323b> <30a9> +<323e> <30c3> +<323f> <30e3> +<3240> <30e5> +<3241> <30e7> +<3242> <30ee> +<3243> <30fc> +<3244> <30fc> +<3245> <6ce8> +<3246> <20ac> +<3247> <2126> +<324a> +<324d> <0101> +<324e> <012b> +<324f> <016b> +<3250> <0113> +<3251> <014d> +<3252> <0100> +<3253> <012a> +<3254> <016a> +<3255> <0112> +<3256> <014c> +<325d> <2070> +<326e> <01cd> +<326f> <011a> +<3270> <0045030a> +<3271> <1ebc> +<3272> <01cf> +<3273> <0049030a> +<3274> <0128> +<3275> <01d1> +<3276> <004f030a> +<3277> <01d3> +<3278> <016e> +<3279> <0168> +<327a> <01ce> +<327b> <011b> +<327c> <0065030a> +<327d> <1ebd> +<327e> <01d0> +<327f> <0131030a> +<3280> <0129> +<3281> <01d2> +<3282> <006f030a> +<3283> <01d4> +<3284> <016f> +<3285> <0169> +<3286> <0251> +<3287> <0251> +<3288> <0251> +endbfchar + +100 beginbfchar +<3289> <01fd> +<328a> <00e6> +<328b> <0254> +<328c> <0254> +<328d> <0254> +<328e> <0259> +<328f> <0259> +<3292> <025a> +<3295> <025b> +<3296> <025b> +<3297> <006a> +<3298> <014b> +<3299> <0275> +<329a> <028c> +<329b> <028c> +<329c> <028c> +<329d> <0292> +<329e> <0283> +<329f> <02d0> +<32dc> <00a5> +<32fc> <00a6> +<32fd> <007d> +<32fe> <0303> +<32ff> <2019> +<3300> <005c> +<3301> <2018> +<3302> <007c> +<3303> <007e> +<3307> <2044> +<3308> <0192> +<3309> <00a7> +<330a> <00a4> +<330b> <201c> +<330c> <00ab> +<3311> <2012> +<3314> <00b7> +<3315> <00b6> +<3316> <2022> +<3317> <201a> +<3318> <201e> +<3319> <201d> +<331a> <00bb> +<331b> <2026> +<331c> <2030> +<331d> <00bf> +<3320> <00af> +<3324> <030a> +<3325> <00b8> +<3326> <030b> +<3327> <0328> +<3328> <030c> +<3329> <0336> +<332a> <00c6> +<332b> <00aa> +<332c> <0141> +<332d> <00d8> +<332e> <0152> +<332f> <00ba> +<3330> <00e6> +<3331> <0131> +<3332> <0142> +<3333> <00f8> +<3334> <0153> +<3335> <00df> +<3336> <002d> +<3337> <00a9> +<3338> <00ac> +<3339> <00ae> +<333e> <00b5> +<333f> <00b9> +<337e> <0160> +<337f> <0178> +<3380> <017d> +<3381> <0305> +<3382> <0161> +<3383> <2122> +<3384> <017e> +<3385> <0030> +<3386> <20ac> +<3387> <2126> +<338a> +<338d> <0101> +<338e> <012b> +<338f> <016b> +<3390> <0113> +<3391> <014d> +<3392> <0100> +<3393> <012a> +<3394> <016a> +<3395> <0112> +<3396> <014c> +<339d> <2070> +<33ae> <01cd> +<33af> <011a> +<33b0> <0045030a> +<33b1> <1ebc> +<33b2> <01cf> +<33b3> <0049030a> +<33b4> <0128> +<33b5> <01d1> +endbfchar + +100 beginbfchar +<33b6> <004f030a> +<33b7> <01d3> +<33b8> <016e> +<33b9> <0168> +<33ba> <01ce> +<33bb> <011b> +<33bc> <0065030a> +<33bd> <1ebd> +<33be> <01d0> +<33bf> <0131030a> +<33c0> <0129> +<33c1> <01d2> +<33c2> <006f030a> +<33c3> <01d4> +<33c4> <016f> +<33c5> <0169> +<33d0> <0336> +<33d1> <002d> +<33d2> <003d> +<33d3> <002c> +<33e4> <0336> +<33e5> <002d> +<33e6> <003d> +<33e7> <002c> +<33ee> <00b7> +<33ef> <002d> +<33f0> <003d> +<33f1> <2103> +<33f2> <2640> +<33f3> <2642> +<33f4> <3013> +<33f5> <3012> +<3406> <0027> +<3407> <0022> +<3408> +<3409> +<340a> <7de3> +<340b> <9ec3> +<340c> <6eab> +<340d> +<340e> +<340f> +<3410> +<3411> <69ea> +<3412> <6e34> +<3413> +<3414> +<3415> +<3416> +<3417> +<3418> <865b> +<3419> +<341a> +<341b> +<341c> <63ed> +<341d> <64ca> +<341e> <784f> +<341f> +<3420> +<3421> +<3422> +<3423> +<3424> +<3427> +<3428> +<3429> +<342a> <6d89> +<342b> <72c0> +<342c> <614e> +<342d> +<342e> +<342f> +<3430> +<3431> +<3432> <5de2> +<3433> +<3434> +<3435> <537d> +<3436> +<3437> +<3438> <5fb5> +<3439> +<343a> <93ae> +<343b> +<343c> <9b2d> +<343d> +<343e> +<343f> +<3440> +<3441> <665a> +<3442> +<3443> +<3444> +<3445> +<3446> +<3447> <4f75> +<3448> +<3449> +<344a> <6b65> +<344b> +endbfchar + +100 beginbfchar +<344c> <6bcf> +<344d> +<344e> <623e> +<344f> +<3450> +<3451> +<3452> +<3453> <6dda> +<3454> +<3455> <66c6> +<3456> <6b77> +<3457> +<3458> <934a> +<3459> <5eca> +<345a> <9304> +<345b> <6982> +<345c> <51b4> +<345d> <634c> +<345e> <86db> +<345f> <9089> +<3460> <9022> +<3461> <5049> +<3462> <7def> +<3463> <9055> +<3464> <53a9> +<3465> <990c> +<3466> <885b> +<3467> <5ef6> +<3468> <6cbf> +<3469> <925b> +<346a> <7fc1> +<346b> <82bd> +<346c> <96c5> +<346d> <5bb3> +<346e> <6168> +<346f> <6982> +<3470> <6bbb> +<3471> <6562> +<3472> <8cab> +<3473> <5dcc> +<3474> <9811> +<3475> <5e30> +<3476> <8ecc> +<3477> <7aae> +<3478> <5747> +<3479> <5091> +<347a> <7a74> +<347b> <5065> +<347c> <5efa> +<347d> <9237> +<347e> <6a8e> +<347f> <4ea4> +<3480> <516c> +<3481> <66f4> +<3482> <6821> +<3483> <786c> +<3484> <7d5e> +<3485> <8003> +<3486> <8cfc> +<3487> <964d> +<3488> <62f7> +<3489> <7f6a> +<348a> <4f7f> +<348b> <53f2> +<348c> <59c9> +<348d> <8b1d> +<348e> <90aa> +<348f> <53ce> +<3490> <8f2f> +<3491> <67d4> +<3492> <77ac> +<3493> <821c> +<3494> <696f> +<3495> <677e> +<3496> <8a1f> +<3497> <4e08> +<3498> <57f4> +<3499> <690d> +<349a> <8077> +<349b> <89aa> +<349c> <9042> +<349d> <636e> +<349e> <6442> +<349f> <8239> +<34a0> <7dcf> +<34a1> <8061> +<34a2> <50cf> +<34a3> <8a95> +<34a4> <6065> +<34a5> <5146> +<34a6> <773a> +<34a7> <8074> +<34a8> <8df3> +<34a9> <5ead> +<34aa> <5ef7> +<34ab> <8247> +<34ac> <6843> +<34ad> <9003> +<34ae> <6d3e> +<34af> <6392> +endbfchar + +100 beginbfchar +<34b0> <8f29> +<34b1> <73ed> +<34b2> <9812> +<34b3> <60b2> +<34b4> <6249> +<34b5> <6590> +<34b6> <7dcb> +<34b7> <8ab9> +<34b8> <8ca7> +<34b9> <7236> +<34ba> <847a> +<34bb> <5206> +<34bc> <5674> +<34bd> <61a4> +<34be> <7c89> +<34bf> <7d1b> +<34c0> <96f0> +<34c1> <853d> +<34c2> <4fbf> +<34c3> <6367> +<34c4> <76c6> +<34c5> <685d> +<34c6> <8108> +<34c7> <8036> +<34c8> <7ffc> +<34c9> <540f> +<34ca> <96a3> +<34cb> <9e9f> +<34cc> <9e97> +<34cd> <806f> +<34ce> <807e> +<34cf> <6e7e> +<34d0> <5085> +<34d1> <5193> +<34d2> <51db> +<34d3> +<34d4> <5340> +<34d5> <96d9> +<34d6> <55a9> +<34d7> <56c1> +<34d8> <570d> +<34d9> <58ab> +<34da> <59da> +<34db> <5a36> +<34dc> <5abe> +<34dd> <5d4e> +<34de> <5d87> +<34df> <5dc9> +<34e0> <5dd3> +<34e1> <5f2d> +<34e2> <5f98> +<34e3> <60d8> +<34e4> <613d> +<34e5> <61fe> +<34e6> <6268> +<34e7> <62cf> +<34e8> <651d> +<34e9> <640f> +<34ea> <64f2> +<34eb> <655d> +<34ec> <665f> +<34ed> <67a9> +<34ee> <67e7> +<34ef> <696b> +<34f0> <6930> +<34f1> <69a7> +<34f2> <6a44> +<34f3> <6a90> +<34f4> <6c08> +<34f5> <6c13> +<34f6> <6e23> +<34f7> <6f11> +<34f8> <6efe> +<34f9> <6f3e> +<34fa> <71ff> +<34fb> <73e5> +<34fc> <7432> +<34fd> <745f> +<34fe> <74e0> +<34ff> <750c> +<3500> <7672> +<3501> <792a> +<3502> <78d4> +<3503> <79ba> +<3504> <7a19> +<3505> <7a95> +<3506> <7cf2> +<3507> <7d73> +<3508> <7ddd> +<3509> <7e35> +<350a> <7fae> +<350b> <7fe1> +<350c> <805a> +<350d> <805f> +<350e> <8073> +<350f> <8070> +<3510> <8076> +<3511> <8153> +<3512> <818a> +<3513> <81b5> +endbfchar + +100 beginbfchar +<3514> <81cd> +<3515> <83f2> +<3516> <8555> +<3517> <85d5> +<3518> <871a> +<3519> <8836> +<351a> <889e> +<351b> <88d8> +<351c> <88f4> +<351d> <892b> +<351e> <893b> +<351f> <896a> +<3520> <896f> +<3521> <8a1d> +<3522> <8d05> +<3523> <8d0f> +<3524> <9f4e> +<3525> <8e91> +<3526> <8ea1> +<3527> <9052> +<3528> <900e> +<3529> <9130> +<352a> <9156> +<352b> <9158> +<352c> <9165> +<352d> <9173> +<352e> <9172> +<352f> <91a2> +<3530> <91af> +<3531> <91aa> +<3532> <91b4> +<3533> <91ba> +<3534> <9477> +<3535> <9698> +<3536> <973d> +<3537> <9760> +<3538> <9771> +<3539> <980c> +<353a> <9873> +<353b> <98c3> +<353c> <9a45> +<353d> <9b4d> +<353e> <9b58> +<353f> <9bc6> +<3540> <9be1> +<3541> <9bf1> +<3542> <9d48> +<3543> <9dcf> +<3544> <9f08> +<3545> <6271> +<3546> <6697> +<3547> <610f> +<3548> <8863> +<3549> <9055> +<354a> <907a> +<354b> <78ef> +<354c> <8c9f> +<354d> <2ed7> +<354e> <2ebd> +<354f> <5ed0> +<3550> <74dc> +<3551> <904b> +<3552> <990c> +<3553> <885e> +<3554> <92b3> +<3555> <95b1> +<3556> <5ef6> +<3557> <63f4> +<3558> +<3559> <7159> +<355a> <9060> +<355b> <925b> +<355c> <65bc> +<355d> <5f80> +<355e> <7fc1> +<355f> <5378> +<3560> <97f3> +<3561> <5316> +<3562> <82b1> +<3563> <83d3> +<3564> <8ca8> +<3565> <904e> +<3566> +<3567> <96c5> +<3568> <9913> +<3569> <5efb> +<356a> <7070> +<356b> <5bb3> +<356c> <6168> +<356d> <6168> +<356e> <6168> +<356f> +<3570> <6982> +<3571> <676e> +<3572> <2ec6> +<3573> <9694> +<3574> +<3575> <8f44> +<3576> <938c> +<3577> <82c5> +endbfchar + +100 beginbfchar +<3578> <5bd2> +<3579> <74b0> +<357a> <7de9> +<357b> <7f36> +<357c> <9084> +<357d> <9592> +<357e> <97d3> +<357f> <8218> +<3580> <5371> +<3581> <3402> +<3582> <3402> +<3583> <3402> +<3584> <5e7e> +<3585> <65e3> +<3586> <671f> +<3587> <6a5f> +<3588> <8d77> +<3589> <98e2> +<358a> +<358b> <55ab> +<358c> <8650> +<358d> <9006> +<358e> <53ca> +<358f> <5438> +<3590> <6025> +<3591> <7d1a> +<3592> <5de8> +<3593> <62d2> +<3594> <8ddd> +<3595> +<3596> +<3597> +<3598> <5f3a> +<3599> <6050> +<359a> <69c1> +<359b> +<359c> +<359d> <90f7> +<359e> <97ff> +<359f> <9957> +<35a0> <6681> +<35a1> <2ea9> +<35a2> <8fd1> +<35a3> <4ff1> +<35a4> <77e9> +<35a5> <5177> +<35a6> <865e> +<35a7> <7a7a> +<35a8> <9047> +<35a9> <6adb> +<35aa> <5553> +<35ab> +<35ac> <6075> +<35ad> <6167> +<35ae> <8fce> +<35af> <5091> +<35b0> <6f54> +<35b1> <7a74> +<35b2> <6708> +<35b3> <2ebc> +<35b4> <517c> +<35b5> <5238> +<35b6> +<35b7> <6743> +<35b8> <80a9> +<35b9> <8b19> +<35ba> <9063> +<35bb> +<35bc> <8a01> +<35bd> <6236> +<35be> <96c7> +<35bf> <9867> +<35c0> <5433> +<35c1> <5a1b> +<35c2> <8aa4> +<35c3> <5de5> +<35c4> <614c> +<35c5> <6285> +<35c6> <63a7> +<35c7> <69cb> +<35c8> +<35c9> <6e2f> +<35ca> <8015> +<35cb> <8154> +<35cc> <8352> +<35cd> <8b1b> +<35ce> <8cfc> +<35cf> <543f> +<35d0> <9177> +<35d1> <8170> +<35d2> <7511> +<35d3> <8fbc> +<35d4> <4eca> +<35d5> <9396> +<35d6> <5ea7> +<35d7> <5f69> +<35d8> <63a1> +<35d9> <6b72> +<35da> <83dc> +<35db> <51b4> +endbfchar + +100 beginbfchar +<35dc> <54b2> +<35dd> <524a> +<35de> <7522> +<35df> <4b38> +<35e0> <59ff> +<35e1> <59ff> +<35e2> <5dff> +<35e3> <8aee> +<35e4> <8aee> +<35e5> <8cc7> +<35e6> <8cc7> +<35e7> <6b21> +<35e8> <6b21> +<35e9> +<35ea> <73ba> +<35eb> +<35ec> <6368> +<35ed> <659c> +<35ee> <90aa> +<35ef> +<35f0> <7235> +<35f1> +<35f2> <914c> +<35f3> <5f31> +<35f4> <4e3b> +<35f5> <53d7> +<35f6> <6388> +<35f7> +<35f8> <7d42> +<35f9> <7fd2> +<35fa> <8846> +<35fb> <9031> +<35fc> <4f4f> +<35fd> <8853> +<35fe> <8ff0> +<35ff> <5de1> +<3600> <9075> +<3601> <9075> +<3602> <6240> +<3603> <66f8> +<3604> <5973> +<3605> <52dd> +<3606> <5546> +<3607> <5bb5> +<3608> +<360b> <5c19> +<360c> <6d88> +<360d> <785d> +<360e> <8096> +<360f> +<3610> <5b82> +<3611> +<3612> <60c5> +<3613> <57f4> +<3614> <98fe> +<3615> <690d> +<3616> <6b96> +<3617> <2edd> +<3618> <98e0> +<3619> <2ede> +<361a> <378d> +<361b> <4fb5> +<361c> <2e97> +<361d> <6d78> +<361e> +<361f> <9032> +<3620> <4ebb> +<3621> +<3622> <5203> +<3623> <5c0b> +<3624> <8a0a> +<3625> <8a0a> +<3626> <8fc5> +<3627> <8870> +<3628> <9042> +<3629> <351f> +<362a> <52e2> +<362b> +<362c> <76db> +<362d> <8056> +<362e> <8980> +<362f> <8aa0> +<3630> <8acb> +<3631> <975c> +<3632> <975c> +<3633> <7a05> +<3634> <8106> +<3635> <96bb> +<3636> <7c4d> +<3637> <7bc0> +<3638> <8aaa> +<3639> <96ea> +<363a> <7d55> +<363b> <6247> +<363c> <6f98> +<363d> <7fa1> +<363e> <8239> +<363f> <9078> +<3640> <9077> +<3641> <524d> +endbfchar + +100 beginbfchar +<3642> <5168> +<3643> <6383> +<3644> <63f7> +<3645> <7626> +<3646> <8d70> +<3647> <9001> +<3648> <906d> +<3649> <9020> +<364a> <2eca> +<364b> <901f> +<364c> <8cca> +<364d> <5c0a> +<364e> <5c0a> +<364f> <59a5> +<3650> +<3651> <9000> +<3652> <902e> +<3653> <968a> +<3654> <9bdb> +<3655> <5927> +<3656> <3427> +<3657> <7027> +<3658> <9039> +<3659> <812b> +<365a> <4e39> +<365b> <6b4e> +<365c> +<365d> <8a95> +<365e> <6696> +<365f> <5024> +<3660> <7f6e> +<3661> <7bc9> +<3662> <2eae> +<3663> <7b51> +<3664> <9010> +<3665> <67f1> +<3666> <6ce8> +<3667> <99d0> +<3668> +<3669> <5fb5> +<366a> <61f2> +<366b> <671d> +<366c> +<366d> <8abf> +<366e> <76f4> +<366f> <6715> +<3670> <6715> +<3671> <589c> +<3672> <8ffd> +<3673> <901a> +<3674> <576a> +<3675> <91e3> +<3676> <5448> +<3677> <5e1d> +<3678> <7a0b> +<3679> <7684> +<367a> <9069> +<367b> <8fed> +<367c> <6dfb> +<367d> <514e> +<367e> <9014> +<367f> <783a> +<3680> <5721> +<3681> +<3682> +<3683> <5510> +<3684> +<3685> <85e4> +<3686> <8b04> +<3687> <9003> +<3688> <900f> +<3689> <9a30> +<368a> <5c0e> +<368b> <9053> +<368c> <541e> +<368d> <3b88> +<368e> <5167> +<368f> <8089> +<3690> <4e73> +<3691> <5fcd> +<3692> <8a8d> +<3693> +<3694> <7d0d> +<3695> <8987> +<3696> <6d3e> +<3697> <80ba> +<3698> <535a> +<3699> <8584> +<369a> <8feb> +<369b> <7e1b> +<369c> <8087> +<369d> <4e37> +<369e> <6f51> +<369f> <91b1> +<36a0> <4f34> +<36a1> <5224> +<36a2> <534a> +<36a3> <5e06> +<36a4> <7554> +<36a5> <6669> +endbfchar + +100 beginbfchar +<36a6> <8543> +<36a7> <907f> +<36a8> <5fae> +<36a9> <9f3b> +<36aa> <5339> +<36ab> <2eaa> +<36ac> <5f65> +<36ad> <59ec> +<36ae> +<36af> <8a55> +<36b0> <5e99> +<36b1> <75c5> +<36b2> <5a66> +<36b3> <6577> +<36b4> <6d6e> +<36b5> <8ca0> +<36b6> <8ca0> +<36b7> <670d> +<36b8> <8986> +<36b9> <4e19> +<36ba> <5e63> +<36bb> <5e73> +<36bc> <5f0a> +<36bd> <8511> +<36be> <504f> +<36bf> <7de8> +<36c0> <8fd4> +<36c1> <904d> +<36c2> <7c3f> +<36c3> <5305> +<36c4> <5d29> +<36c5> <62b1> +<36c6> <670b> +<36c7> <7832> +<36c8> <7e2b> +<36c9> <80de> +<36ca> <840c> +<36cb> <90a6> +<36cc> <90a6> +<36cd> <98fd> +<36ce> <9d6c> +<36cf> <4ea1> +<36d0> <5e3d> +<36d3> <623f> +<36d4> <671b> +<36d5> <671b> +<36d6> <5192> +<36d7> <6469> +<36d8> <7ffb> +<36d9> <51e1> +<36da> <78e8> +<36db> <9b54> +<36dc> <9ebb> +<36dd> <69d9> +<36de> <685d> +<36df> <3468> +<36e0> <9fb4> +<36e1> <7e6d> +<36e2> <9ebf> +<36e3> <8108> +<36e4> <660e> +<36e5> <76df> +<36e6> <8ff7> +<36e7> <5984> +<36e8> <52d0> +<36e9> <76f2> +<36ea> <8017> +<36eb> <623b> +<36ec> <7d0b> +<36ed> <9580> +<36ee> <7d04> +<36ef> <8e8d> +<36f0> <687a> +<36f1> <687a> +<36f2> <6801> +<36f3> <6109> +<36f4> +<36f5> +<36f6> <52c7> +<36f7> <6709> +<36f8> <7336> +<36fb> +<36fc> <904a> +<36fd> <66dc> +<36fe> <2eb7> +<36ff> <8981> +<3700> <990a> +<3701> <7fcc> +<3702> <7ffc> +<3703> <8eb6> +<3704> +<3705> <7387> +<3706> <9f8d> +<3707> <9f8d> +<3708> +<3709> <6881> +<370a> <71d0> +<370b> <96a3> +<370c> <9c57> +<370d> <9e9f> +endbfchar + +100 beginbfchar +<370e> <7c7b> +<370f> +<3710> <6190> +<3711> +<3712> <6717> +<3713> <8002> +<3714> +<3715> <50ca> +<3716> <511a> +<3717> <5154> +<3718> <5195> +<3719> <2e87> +<371a> <528d> +<371b> <52d7> +<371c> +<371d> +<371e> <353e> +<371f> <53df> +<3720> <66fc> +<3721> <5533> +<3722> <55e4> +<3723> <5455> +<3724> <56c0> +<3725> <5939> +<3726> <5a1c> +<3727> <5ac2> +<3728> <5b76> +<3729> +<372a> <5c14> +<372b> <37e2> +<372c> <5ce6> +<372d> <5e54> +<372e> <4e48> +<372f> <5ee3> +<3730> <6097> +<3731> +<3732> <62cc> +<3733> <641c> +<3734> <63c6> +<3735> <6428> +<3736> +<3737> <631b> +<3738> <665f> +<3739> <665f> +<373a> <6663> +<373b> <66f5> +<373c> +<373d> <689d> +<373e> <688d> +<373f> <69f6> +<3740> <6986> +<3741> <5be8> +<3742> <5be8> +<3743> <69bb> +<3744> <6bcc> +<3745> <6f11> +<3746> <6e17> +<3747> <6f98> +<3748> <6caa> +<3749> <6caa> +<374a> <701b> +<374b> <7162> +<374c> <723b> +<374d> <4e2c> +<374e> <731c> +<374f> <74ca> +<3750> <74ef> +<3751> <7575> +<3752> <75ec> +<3753> <764e> +<3754> <3fb1> +<3755> <776a> +<3756> <77a9> +<3757> <7940> +<3758> <7953> +<3759> <7953> +<375a> <9f4b> +<375b> <79ae> +<375c> <9083> +<375d> <7b53> +<375e> <7c14> +<375f> <7c14> +<3760> <4264> +<3761> <7c50> +<3762> <7c58> +<3763> <7d46> +<3764> +<3765> <7e22> +<3766> <7e22> +<3767> <7e48> +<3768> <7e35> +<3769> <7e43> +<376a> <7e8c> +<376d> <7f51> +<376e> +<3771> <7fe9> +<3772> <8141> +<3773> <4453> +<3774> <8258> +<3775> <8279> +endbfchar + +100 beginbfchar +<3778> <82e3> +<3779> <5179> +<377a> <835a> +<377b> <8420> +<377c> <83bd> +<377d> <84f4> +<377e> <4525> +<377f> <8587> +<3780> <85f4> +<3781> +<3782> <8737> +<3783> <873b> +<3784> <8805> +<3785> <87bd> +<3786> <867d> +<3787> <8836> +<3788> <342e> +<3789> <88c6> +<378a> <89bd> +<378b> <8adb> +<378c> <8b3e> +<378d> <8b5a> +<378e> <8d73> +<378f> <8d99> +<3790> <47e6> +<3791> <8e34> +<3792> <8e4a> +<3793> <8fef> +<3794> <9087> +<3795> <8ffa> +<3796> <901e> +<3797> <9035> +<3798> <9050> +<3799> <8fc8> +<379a> <9081> +<379b> <908a> +<379c> <908a> +<379d> <908a> +<379e> <908a> +<379f> <908a> +<37a0> <908a> +<37a1> <9089> +<37a2> <9089> +<37a3> <9089> +<37a4> <9089> +<37a5> <9089> +<37a6> <9089> +<37a7> <9089> +<37a8> <9089> +<37a9> <9089> +<37aa> <9089> +<37ab> <9089> +<37ac> <9089> +<37ad> +<37ae> <93dd> +<37af> <95bc> +<37b0> +<37b1> <96b2> +<37b2> <975c> +<37b3> <9839> +<37b4> <98eb> +<37b5> <9903> +<37b6> <9909> +<37b7> <9945> +<37b8> <9945> +<37b9> <994b> +<37ba> <9a08> +<37bb> <9a5f> +<37bc> <9a65> +<37bd> <9aef> +<37be> <9b18> +<37bf> <9bdf> +<37c0> <9d09> +<37c1> <9d08> +<37c2> <9ea5> +<37c3> <9ecc> +<37c4> <9f08> +<37c5> <9f4a> +<37c6> <9f63> +<37c7> <9f67> +<37c8> +<37c9> +<37ca> +<37cb> <891c> +<37cc> <68c8> +<37cd> <66fb> +<37ce> <5f45> +<37cf> <5300> +<37d0> <5389> +<37d1> <5953> +<37d2> +<37d3> +<37d4> <6a73> +<37d5> +<37d6> +<37d7> <8a12> +<37da> <4e1f> +<37db> <4e2b> +<37e0> <4e44> +<37e1> <4e5a> +endbfchar + +100 beginbfchar +<37e2> <4e7f> +<37e3> <4e8d> +<37e4> <4e96> +<37e5> <4eb9> +<37e6> <4ed0> +<37e7> <4ee0> +<37e8> <4efd> +<37e9> <4eff> +<37ea> <4f0b> +<37eb> <4f15> +<37ec> <4f60> +<37ed> <4f3b> +<37ee> <4f49> +<37ef> <4f54> +<37f0> <4f7a> +<37f3> <4f97> +<37f4> <4fbe> +<37f5> <4fcf> +<37f6> <4ffd> +<37f9> <5010> +<37fa> <501b> +<37fb> <5027> +<37fc> <502e> +<37fd> <5057> +<37fe> <5066> +<37ff> <506a> +<3800> <503b> +<3801> <508f> +<3802> <5096> +<3803> <509c> +<3804> <50cc> +<3805> <50e6> +<3806> <50e9> +<3807> <50ef> +<3808> <5108> +<3809> <510b> +<380a> <5110> +<380b> <511b> +<380c> <511e> +<380d> <515f> +<380e> <51a1> +<380f> <51bc> +<3810> <51de> +<3811> <51ee> +<3812> <51f4> +<3815> <5213> +<3816> <5249> +<3817> <5261> +<3818> <5266> +<3819> <5293> +<381a> <52c8> +<381b> <52f0> +<381e> <533e> +<381f> <534c> +<3820> <534b> +<3821> <5361> +<3822> <536c> +<3823> <53ab> +<3824> <53da> +<3825> <53e6> +<3826> <53f5> +<3827> <5427> +<3828> <544d> +<3829> <5466> +<382a> <546b> +<382b> <5474> +<382c> <548d> +<382d> <5496> +<382e> <54a1> +<382f> <54ad> +<3830> <54b9> +<3831> <54bf> +<3832> <54c6> +<3833> <54cd> +<3834> <550e> +<3835> <552b> +<3836> <5535> +<3837> <554a> +<383a> <5588> +<383b> <558e> +<383c> <5608> +<383f> <5637> +<3840> <563f> +<3841> <5649> +<3842> <564b> +<3843> <564f> +<3844> <5666> +<3845> <5669> +<3846> <566f> +<3849> <5695> +<384a> <569a> +<384d> <56b1> +<384e> <56c9> +<384f> <56dd> +<3850> <56e4> +<3851> <570a> +<3852> <5715> +<3853> <5723> +<3854> <572f> +<3857> <574c> +endbfchar + +100 beginbfchar +<3858> <5770> +<3859> <578c> +<385a> <579c> +<385b> <57b8> +<385c> <57e6> +<385d> <57ed> +<3860> <57ff> +<3861> <5809> +<3862> <5820> +<3863> <5832> +<3864> <587c> +<3865> <5880> +<3866> <58a9> +<3867> <58ce> +<3868> <58d0> +<3869> <58d4> +<386a> <58da> +<386b> <58e9> +<386c> <590c> +<386d> <5924> +<386e> <592f> +<386f> <5961> +<3870> <596d> +<3871> <59ca> +<3872> <59d2> +<3873> <59dd> +<3876> <5a04> +<3877> <5a0c> +<3878> <5a23> +<3879> <5a47> +<387a> <5a55> +<387b> <5a63> +<387c> <5a6d> +<387d> <5a7e> +<387e> <5a9e> +<387f> <5aa7> +<3880> <5aac> +<3881> <5ab3> +<3882> <5ae0> +<3883> <5b00> +<3884> <5b19> +<3885> <5b25> +<3886> <5b2d> +<3887> <5b41> +<3888> <5b7c> +<388b> <5b8a> +<388c> <5c23> +<388d> <5c2b> +<388e> <5c30> +<388f> <5c63> +<3890> <5c69> +<3891> <5c7c> +<3892> <5ccb> +<3893> <5cd2> +<3894> <5cf4> +<3895> <5d24> +<3896> <5d26> +<3897> <5d43> +<3898> <5d46> +<3899> <5d4a> +<389a> <5d92> +<389b> <5d94> +<389c> <5d99> +<389d> <5da0> +<389e> <5dd8> +<389f> <5de0> +<38a0> <5df8> +<38a1> <5e00> +<38a2> <5e12> +<38a5> <5e18> +<38a6> <5e2e> +<38a7> <5e58> +<38aa> <5ea8> +<38ab> <5eaa> +<38ae> <5ecb> +<38af> <5ed2> +<38b0> <5f07> +<38b1> <5f0e> +<38b4> <5f22> +<38b5> <5f28> +<38b6> <5f36> +<38b7> <5f3b> +<38b8> <5f40> +<38b9> <5f50> +<38ba> <5f58> +<38bb> <5f64> +<38bc> <5f89> +<38bd> <5f9c> +<38be> <5fa7> +<38bf> <5fa4> +<38c0> <5faf> +<38c1> <5fb8> +<38c2> <5fc4> +<38c3> <5fc9> +<38c4> <5fe1> +<38c5> <5fe9> +<38c6> <5fed> +<38c7> <5ffc> +<38c8> <6017> +<38c9> <601a> +endbfchar + +100 beginbfchar +<38ca> <6033> +<38cb> <6061> +<38cc> <607f> +<38cd> <609e> +<38ce> <60a4> +<38cf> <60b0> +<38d0> <60cb> +<38d1> <60db> +<38d2> <60f8> +<38d6> <611c> +<38d7> <617c> +<38d8> <618d> +<38d9> <619f> +<38da> <61a8> +<38db> <61c2> +<38dc> <61df> +<38dd> <6215> +<38de> <6229> +<38df> <6243> +<38e0> <6246> +<38e1> <624c> +<38e2> <6251> +<38e3> <6256> +<38e4> <62c4> +<38e5> <62fc> +<38e6> <630a> +<38e7> <630d> +<38e8> <6318> +<38e9> <6339> +<38ec> <6365> +<38ed> <6374> +<38ee> <637d> +<38ef> <6384> +<38f0> <6387> +<38f1> <6390> +<38f2> <639e> +<38f3> <63d1> +<38f4> <63dc> +<38f5> <6409> +<38f6> <6410> +<38f7> <6422> +<38f8> <6454> +<38f9> <645b> +<38fa> <646d> +<38fb> <647b> +<38fe> <64e5> +<38ff> <64f7> +<3900> <64fb> +<3901> <6504> +<3902> <6516> +<3903> <6519> +<3904> <6547> +<3905> <6567> +<3906> <6581> +<3907> <6585> +<3908> <65c2> +<3909> <65f0> +<390a> <65f2> +<390b> <662c> +<390c> <664c> +<390f> <6661> +<3910> <666b> +<3911> <6677> +<3912> <66a4> +<3913> <66c8> +<3914> <66ec> +<3915> <6705> +<3916> <6713> +<3917> <6733> +<3918> <6748> +<3919> <674c> +<391a> <6776> +<391b> <677b> +<391c> <67b0> +<391d> <67b2> +<391e> <67f9> +<391f> <67d7> +<3920> <67d9> +<3921> <67f0> +<3922> <682c> +<3925> <685b> +<3926> <6872> +<3927> <6875> +<3928> <687a> +<3929> <6884> +<392a> <68a5> +<392b> <68b2> +<392c> <68d0> +<392d> <68d6> +<392e> <68e8> +<392f> <68ed> +<3932> <68fc> +<3933> <6911> +<3934> <6913> +<3935> <6935> +<3936> <693b> +<3937> <6957> +<3938> <6963> +<3939> <6972> +<393c> <69a6> +endbfchar + +100 beginbfchar +<393d> <69ad> +<393e> <69b7> +<3941> <6a01> +<3942> <6a0f> +<3943> <6a15> +<3944> <6a28> +<3945> <6a34> +<3946> <6a3e> +<3947> <6a45> +<394a> <6a56> +<394b> <6a5b> +<394c> <6a83> +<394d> <6a89> +<394e> <6a91> +<3952> <6adc> +<3953> <6ae7> +<3954> <6aec> +<3955> <6b1e> +<3956> <6b24> +<3957> <6b35> +<3958> <6b46> +<3959> <6b56> +<395a> <6b60> +<395b> <6b82> +<395c> <6bbe> +<395d> <6be1> +<395e> <6bf1> +<395f> <6c10> +<3960> <6c33> +<3961> <6c35> +<3962> <6c3a> +<3963> <6c59> +<3964> <6c76> +<3965> <6c7b> +<3966> <6c85> +<3967> <6c95> +<3968> <6c9c> +<3969> <6cd0> +<396a> <6cd4> +<396b> <6cd6> +<396c> <6ce0> +<396f> <6cee> +<3970> <6d0a> +<3971> <6d0e> +<3972> <6d11> +<3973> <6d2e> +<3974> <6d57> +<3975> <6d5e> +<3976> <6d65> +<3977> <6d82> +<3978> <6dbf> +<3979> <6dc4> +<397a> <6dca> +<397b> <6dd6> +<397c> <6de9> +<397d> <6e22> +<397e> <6e51> +<397f> <6ec7> +<3980> <6eca> +<3981> <6ece> +<3982> <6efd> +<3983> <6f1a> +<3984> <6f2a> +<3985> <6f2f> +<3986> <6f33> +<3987> <6f5a> +<3988> <6f5e> +<3989> <6f62> +<398a> <6f7d> +<398b> <6f8b> +<398c> <6f8d> +<398d> <6f92> +<398e> <6f94> +<398f> <6f9a> +<3992> <6fb6> +<3993> <6fda> +<3994> <6fde> +<3995> <6ff9> +<3996> <7039> +<3997> <703c> +<3998> <704a> +<3999> <7054> +<399c> <7064> +<399d> <706c> +<399e> <707e> +<399f> <7081> +<39a0> <7095> +<39a1> <70b7> +<39a4> <70d8> +<39a5> <70dc> +<39a6> <7107> +<39a7> <7120> +<39a8> <7131> +<39a9> <714a> +<39aa> <7152> +<39ab> <7160> +<39ac> <7179> +<39ad> <7192> +<39ae> <71b3> +<39af> <71cb> +endbfchar + +100 beginbfchar +<39b0> <71d3> +<39b1> <71d6> +<39b2> <7200> +<39b3> <721d> +<39b4> <722b> +<39b5> <7238> +<39b6> <7241> +<39b7> <7253> +<39ba> <725c> +<39bb> <728d> +<39bc> <72ad> +<39bd> <72b4> +<39be> <72c7> +<39bf> <72fb> +<39c2> <7328> +<39c3> <7331> +<39c4> <7343> +<39c5> <736c> +<39c6> <737c> +<39c7> <7383> +<39ca> <7395> +<39ce> <73a6> +<39cf> <73ab> +<39d0> <73b5> +<39d1> <73b7> +<39d2> <73bc> +<39d3> <73cf> +<39d4> <73d9> +<39d5> <73e9> +<39d6> <73f4> +<39d7> <73fd> +<39d8> <7404> +<39d9> <740a> +<39dc> <7424> +<39dd> <7428> +<39de> <742c> +<39e2> <7439> +<39e3> <7444> +<39e4> <7447> +<39e5> <744b> +<39e6> <744d> +<39e7> <7451> +<39e8> <7457> +<39e9> <7466> +<39ea> <746b> +<39eb> <7471> +<39ec> <7480> +<39f0> <7490> +<39f1> <7498> +<39f2> <749c> +<39f3> <74a0> +<39f4> <74a3> +<39f5> <74a8> +<39f6> <74ab> +<39f7> <74b5> +<39f8> <74bf> +<39f9> <74c8> +<39fa> <74da> +<39fb> <74de> +<39fc> <754e> +<39fd> <7579> +<39fe> <7581> +<39ff> <7590> +<3a02> <75b4> +<3a03> <75e4> +<3a04> <75f9> +<3a05> <7600> +<3a06> <760a> +<3a09> <7619> +<3a0a> <761e> +<3a0b> <762d> +<3a0c> <7635> +<3a0d> <7643> +<3a0e> <764b> +<3a0f> <7665> +<3a10> <766d> +<3a11> <766f> +<3a12> <7671> +<3a13> <7674> +<3a16> <76c5> +<3a17> <76cc> +<3a18> <76ec> +<3a19> <76fc> +<3a1a> <7734> +<3a1b> <7736> +<3a1c> <775c> +<3a1f> <7772> +<3a20> <777d> +<3a21> <7795> +<3a22> <77aa> +<3a23> <77e6> +<3a24> <77f0> +<3a25> <77f4> +<3a26> <7806> +<3a27> <7822> +<3a2a> <7830> +<3a2b> <7835> +<3a2c> <7868> +<3a2d> <789e> +<3a2e> <78c8> +endbfchar + +100 beginbfchar +<3a2f> <78cc> +<3a30> <78ce> +<3a31> <78e4> +<3a34> <78f2> +<3a35> <78f7> +<3a36> <78fb> +<3a37> <7931> +<3a38> <7934> +<3a39> <793b> +<3a3a> <793d> +<3a3b> <7945> +<3a3e> <798b> +<3a3f> <7996> +<3a40> <7998> +<3a41> <79b8> +<3a42> <79bb> +<3a43> <79ca> +<3a44> <79da> +<3a45> <7a03> +<3a46> <7a09> +<3a47> <7a11> +<3a48> <7a1e> +<3a49> <7a2d> +<3a4a> <7a39> +<3a4b> <7a45> +<3a4c> <7a4c> +<3a4d> <7a5d> +<3a4e> <7a60> +<3a4f> <7a6d> +<3a50> <7a78> +<3a51> <7aa0> +<3a52> <7aa3> +<3a53> <7ab3> +<3a56> <7ac6> +<3a57> <7b07> +<3a58> <7b14> +<3a59> <7b27> +<3a5a> <7b31> +<3a5b> <7b47> +<3a5c> <7b4e> +<3a5d> <7b60> +<3a5e> <7b69> +<3a5f> <7b6d> +<3a60> <7b72> +<3a61> <7b91> +<3a62> <7baf> +<3a63> <7bd7> +<3a64> <7bd9> +<3a65> <7c0b> +<3a66> <7c0f> +<3a67> <7c20> +<3a68> <7c26> +<3a69> <7c31> +<3a6a> <7c36> +<3a6b> <7c51> +<3a6c> <7c59> +<3a6d> <7c67> +<3a6e> <7c6e> +<3a6f> <7c70> +<3a70> <7cbc> +<3a71> <7cbf> +<3a74> <7cd7> +<3a75> <7cd9> +<3a76> <7cdd> +<3a77> <7ceb> +<3a7b> <7d13> +<3a7c> <7d1d> +<3a7d> <7d23> +<3a7e> <7d41> +<3a7f> <7d53> +<3a80> <7d59> +<3a81> <7d5d> +<3a82> <7d7a> +<3a83> <7d86> +<3a86> <7dcc> +<3a87> <7deb> +<3a88> <7df1> +<3a89> <7df9> +<3a8a> <7e08> +<3a8b> <7e11> +<3a8c> <7e15> +<3a8d> <7e20> +<3a8e> <7e47> +<3a8f> <7e62> +<3a90> <7e6e> +<3a91> <7e73> +<3a92> <7e8d> +<3a93> <7e91> +<3a94> <7e98> +<3a95> <7f44> +<3a96> <7f4f> +<3a99> <7f61> +<3a9a> <7f91> +<3a9b> <7fbf> +<3a9c> <7fce> +<3a9d> <7fdf> +<3a9e> <7fe5> +<3a9f> <7fec> +<3aa2> <7ffa> +<3aa3> <800e> +endbfchar + +100 beginbfchar +<3aa4> <8011> +<3aa5> <8014> +<3aa6> <8024> +<3aa7> <8026> +<3aa8> <803a> +<3aa9> <803c> +<3aaa> <8060> +<3aab> <8071> +<3aac> <8075> +<3aad> <809e> +<3aae> <80a6> +<3aaf> <80ab> +<3ab2> <8116> +<3ab3> <8118> +<3ab4> <813a> +<3ab5> <814a> +<3ab6> <814c> +<3ab7> <8181> +<3ab8> <8184> +<3ab9> <81b4> +<3aba> <81cf> +<3abb> <81f9> +<3abc> <8203> +<3abd> <8221> +<3abe> <8232> +<3abf> <8234> +<3ac0> <8246> +<3ac1> <824b> +<3ac2> <824f> +<3ac3> <828e> +<3ac4> <82ae> +<3ac5> <82b7> +<3ac6> <82be> +<3ac7> <82c6> +<3ac8> <82fe> +<3ac9> <8343> +<3aca> <8351> +<3acb> <8355> +<3acc> <8386> +<3acd> <838d> +<3ace> <8392> +<3acf> <8398> +<3ad0> <83a9> +<3ad3> <83ea> +<3ad4> <840f> +<3ad5> <8411> +<3ad6> <844a> +<3ad7> <8476> +<3ad8> <84a8> +<3ad9> <84af> +<3ada> <84c0> +<3adb> <84c2> +<3adc> <84f0> +<3add> <84fd> +<3ade> <850c> +<3adf> <8534> +<3ae0> <855e> +<3ae1> <858f> +<3ae2> <85b7> +<3ae3> <85ce> +<3ae4> <85ad> +<3ae5> <8612> +<3ae6> <8629> +<3ae7> <8652> +<3ae8> <8663> +<3ae9> <866c> +<3aea> <866f> +<3aeb> <867a> +<3aec> <868d> +<3aed> <8691> +<3aee> <8698> +<3af1> <86fa> +<3af2> <86fd> +<3af3> <870b> +<3af4> <8713> +<3af5> <8719> +<3af6> <871e> +<3af7> <8728> +<3af8> <873e> +<3af9> <8771> +<3afa> <8788> +<3afb> <8799> +<3afe> <87b5> +<3aff> <87d6> +<3b00> <87eb> +<3b01> <87ed> +<3b02> <8801> +<3b03> <8803> +<3b04> <8806> +<3b05> <880b> +<3b06> <8814> +<3b07> <881c> +<3b08> <8856> +<3b09> <885f> +<3b0a> <8864> +<3b0b> <8898> +<3b0c> <88aa> +<3b0f> <88ca> +<3b10> <88d2> +<3b11> <88db> +endbfchar + +100 beginbfchar +<3b14> <8906> +<3b18> <8927> +<3b19> <8930> +<3b1a> <893e> +<3b1b> <897b> +<3b1c> <89d4> +<3b1d> <89d6> +<3b1e> <89e5> +<3b1f> <89f1> +<3b20> <8a07> +<3b21> <8a0f> +<3b22> <8a15> +<3b23> <8a22> +<3b24> <8a4e> +<3b25> <8a7f> +<3b26> <8af4> +<3b27> <8b1f> +<3b28> <8b37> +<3b2b> <8b54> +<3b2c> <8b9c> +<3b2d> <8b9e> +<3b2e> <8c47> +<3b2f> <8c54> +<3b30> <8c73> +<3b31> <8ca4> +<3b32> <8cd9> +<3b33> <8ce1> +<3b34> <8cf8> +<3b35> <8cfe> +<3b36> <8d1b> +<3b37> <8d69> +<3b38> <8d6c> +<3b39> <8d84> +<3b3a> <8d8d> +<3b3b> <8d95> +<3b3c> <8da6> +<3b3d> <8dc6> +<3b3e> <8dce> +<3b3f> <8de4> +<3b40> <8dec> +<3b41> <8e20> +<3b42> <8e4b> +<3b43> <8e6c> +<3b44> <8e70> +<3b45> <8e7a> +<3b46> <8e92> +<3b47> <8eae> +<3b48> <8eb3> +<3b49> <8ed1> +<3b4a> <8ed4> +<3b4b> <8ef9> +<3b4c> <8f17> +<3b4d> <8f36> +<3b4e> <8fa6> +<3b51> <8fc6> +<3b52> <8fe0> +<3b53> <8fe4> +<3b54> <8ff6> +<3b55> <9002> +<3b56> <902c> +<3b57> <9044> +<3b58> <9088> +<3b59> <9095> +<3b5a> <9099> +<3b5b> <909b> +<3b5c> <90a2> +<3b5d> <90b4> +<3b5e> <90d7> +<3b5f> <90dd> +<3b60> <90f4> +<3b61> <9117> +<3b62> <911c> +<3b63> <9131> +<3b64> <913a> +<3b65> <913d> +<3b66> <9148> +<3b67> <915b> +<3b68> <9161> +<3b69> <9164> +<3b6a> <918e> +<3b6b> <919e> +<3b6c> <91a8> +<3b6f> <91b2> +<3b70> <91bc> +<3b71> <91f0> +<3b72> <91f7> +<3b73> <91fb> +<3b74> <9207> +<3b75> <9228> +<3b76> <9233> +<3b77> <9238> +<3b78> <9243> +<3b79> <9247> +<3b7a> <924f> +<3b7b> <9260> +<3b7c> <92c2> +<3b7f> <92df> +<3b80> <930d> +<3b81> <9315> +<3b82> <931f> +endbfchar + +100 beginbfchar +<3b83> <9327> +<3b84> <9347> +<3b85> <9352> +<3b86> <9365> +<3b87> <936a> +<3b88> <936d> +<3b89> <939b> +<3b8a> <93ba> +<3b8b> <93a9> +<3b8c> <93c1> +<3b8d> <93ca> +<3b8e> <93e2> +<3b8f> <93fa> +<3b90> <93fd> +<3b91> <940f> +<3b92> <9434> +<3b93> <943f> +<3b94> <9455> +<3b95> <946b> +<3b96> <9472> +<3b97> <9578> +<3b98> <95a6> +<3b99> <95a9> +<3b9a> <95ab> +<3b9b> <95b4> +<3b9c> <95bd> +<3b9d> <95da> +<3b9e> <961d> +<3b9f> <9641> +<3ba0> <9658> +<3ba1> <9684> +<3ba2> <96a4> +<3ba3> <96a9> +<3ba4> <96d2> +<3ba5> +<3ba6> <96de> +<3ba7> <96e9> +<3ba8> <96f1> +<3ba9> <9702> +<3baa> <9709> +<3bab> <975a> +<3bac> <9763> +<3bad> <976e> +<3bae> <9773> +<3baf> <979a> +<3bb0> <97a2> +<3bb3> <97d9> +<3bb4> <97de> +<3bb5> <97f4> +<3bb6> <980a> +<3bb7> <980e> +<3bb8> <981e> +<3bb9> <9823> +<3bba> <982b> +<3bbb> <983e> +<3bbe> <9859> +<3bbf> <986c> +<3bc0> <98b8> +<3bc1> <98ba> +<3bc2> <98bf> +<3bc3> <98c8> +<3bc4> <98e5> +<3bc7> <9940> +<3bc8> <994d> +<3bc9> <995c> +<3bca> <995f> +<3bcb> <99b1> +<3bce> <99c9> +<3bcf> <9a02> +<3bd0> <9a16> +<3bd1> <9a24> +<3bd2> <9a27> +<3bd5> <9a36> +<3bd6> <9a38> +<3bd7> <9a4a> +<3bd8> <9a56> +<3bdb> <9af9> +<3bdc> <9b03> +<3bdd> <9b20> +<3be0> <9b73> +<3be1> <9b79> +<3be2> <9ba7> +<3be3> <9bc1> +<3be4> <9bc7> +<3be5> <9bd7> +<3be6> <9be7> +<3be7> <9beb> +<3be8> <9bf7> +<3be9> <9bfa> +<3bea> <9bfd> +<3beb> <9c0b> +<3bec> <9c27> +<3bed> <9c2a> +<3bee> <9c36> +<3bef> <9c41> +<3bf0> <9c53> +<3bf1> <9c63> +<3bf2> <9c70> +<3bf3> <9c77> +<3bf4> <9d02> +endbfchar + +100 beginbfchar +<3bf5> <9d42> +<3bf6> <9d47> +<3bf7> <9d63> +<3bf8> <9d69> +<3bf9> <9d7c> +<3bfa> <9d7e> +<3bfb> <9d8d> +<3bfc> <9db1> +<3bfd> <9dc3> +<3bfe> <9dc7> +<3bff> <9dd6> +<3c00> <9ddf> +<3c01> <9deb> +<3c02> <9df4> +<3c03> <9e15> +<3c04> <9e1d> +<3c05> <9ea4> +<3c06> <9ea8> +<3c07> <9eac> +<3c08> <9ee7> +<3c09> <9eee> +<3c0a> <9f10> +<3c0b> <9f12> +<3c0c> <9f17> +<3c0d> <9f19> +<3c0e> <9f2f> +<3c0f> <9f37> +<3c10> <9f39> +<3c11> <9f41> +<3c12> <9f45> +<3c13> <9f57> +<3c14> <9f68> +<3c15> <9f71> +<3c16> <9f75> +<3c17> <9f90> +<3c18> <9f94> +<3c19> <9fa2> +<3c1a> <4e30> +<3c1b> <3405> +<3c1c> +<3c1d> <5620> +<3c1e> <5ecb> +<3c1f> <2e95> +<3c20> <60a4> +<3c21> +<3c22> <6b24> +<3c23> <6ff9> +<3c24> <6ee6> +<3c25> <71b3> +<3c26> <2ea4> +<3c27> <7ac6> +<3c28> <7f61> +<3c29> <8071> +<3c2a> <809e> +<3c2b> <2ecc> +<3c2c> <91fc> +<3c2d> <5db2> +<3c2e> <97de> +<3c2f> <4fd3> +<3c30> <50d9> +<3c31> <50f0> +<3c32> <51c3> +<3c33> <5676> +<3c34> <6a54> +<3c35> <6d01> +<3c36> <6dd0> +<3c37> <6e42> +<3c38> <6ed9> +<3c39> <73e4> +<3c3a> <7421> +<3c3b> <756c> +<3c3c> <7851> +<3c3d> <87f5> +<3c3e> +<3c3f> <73a8> +<3c40> <3af3> +<3c41> <34db> +<3c42> <440c> +<3c43> <3e8a> +<3c44> +<3c45> +<3c46> <4be8> +<3c47> +<3c48> <3eda> +<3c49> <3b22> +<3c4a> +<3c4b> <457a> +<3c4c> <4093> +<3c4d> +<3c4e> <4665> +<3c4f> <4103> +<3c50> <4293> +<3c51> <46ae> +<3c52> <3488> +<3c53> +<3c57> +<3c58> +<3c5d> <3003> +<3c5e> <3006> +<3c5f> <30fc> +endbfchar + +100 beginbfchar +<3c60> <2260> +<3c63> <221e> +<3c64> <2234> +<3c65> <2103> +<3c66> <30ff> +<3c67> <309f> +<3c68> <2208> +<3c69> <220b> +<3c6e> <222a> +<3c6f> <2229> +<3c74> <2209> +<3c75> <2205> +<3c7a> <21d2> +<3c7b> <21d4> +<3c7c> <2200> +<3c7d> <2203> +<3c83> <2220> +<3c84> <22a5> +<3c85> <2202> +<3c86> <2207> +<3c87> <2261> +<3c88> <2252> +<3c8b> <221a> +<3c8c> <223d> +<3c8d> <221d> +<3c8e> <2235> +<3c91> <2262> +<3c92> <2243> +<3c93> <2245> +<3c94> <2248> +<3c97> <2194> +<3c98> <2213> +<3c99> <2135> +<3c9a> <210f> +<3c9b> <2127> +<3c9c> <30a0> +<3cf3> <304b309a> +<3cf4> <304d309a> +<3cf5> <304f309a> +<3cf6> <3051309a> +<3cf7> <3053309a> +<3d4e> <30ab309a> +<3d4f> <30ad309a> +<3d50> <30af309a> +<3d51> <30b1309a> +<3d52> <30b3309a> +<3d53> <30bb309a> +<3d54> <30c4309a> +<3d55> <30c8309a> +<3d60> <31f7309a> +<3d6b> <3053> +<3d6c> <30b3> +<3d6f> <2155> +<3d70> <2318> +<3d75> <01d6> +<3d76> <01d8> +<3d77> <01da> +<3d78> <01dc> +<3d79> <0104> +<3d7a> <02d8> +<3d7b> <013d> +<3d7c> <015a> +<3d7d> <015e> +<3d7e> <0164> +<3d7f> <0179> +<3d80> <017b> +<3d81> <0105> +<3d82> <02db> +<3d83> <013e> +<3d84> <015b> +<3d85> <02c7> +<3d86> <015f> +<3d87> <0165> +<3d88> <017a> +<3d89> <02dd> +<3d8a> <017c> +<3d8b> <0154> +<3d8c> <0102> +<3d8d> <0139> +<3d8e> <0106> +<3d8f> <010c> +<3d90> <0118> +<3d91> <010e> +<3d92> <0143> +<3d93> <0147> +<3d94> <0150> +<3d95> <0158> +<3d96> <0170> +<3d97> <0162> +<3d98> <0155> +<3d99> <0103> +<3d9a> <013a> +<3d9b> <0107> +<3d9c> <010d> +<3d9d> <0119> +<3d9e> <010f> +<3d9f> <0111> +<3da0> <0144> +<3da1> <0148> +<3da2> <0151> +endbfchar + +100 beginbfchar +<3da3> <0159> +<3da4> <0171> +<3da5> <0163> +<3da6> <02d9> +<3da7> <0108> +<3da8> <011c> +<3da9> <0124> +<3daa> <0134> +<3dab> <015c> +<3dac> <016c> +<3dad> <0109> +<3dae> <011d> +<3daf> <0125> +<3db0> <0135> +<3db1> <015d> +<3db2> <016d> +<3db3> <0271> +<3db4> <028b> +<3db5> <027e> +<3db6> <026c> +<3db7> <026e> +<3db8> <0279> +<3db9> <0288> +<3dba> <0256> +<3dbb> <0273> +<3dbc> <027d> +<3dbd> <0282> +<3dbe> <0290> +<3dbf> <027b> +<3dc0> <026d> +<3dc1> <025f> +<3dc2> <0272> +<3dc3> <029d> +<3dc4> <028e> +<3dc5> <0261> +<3dc6> <0270> +<3dc7> <0281> +<3dc8> <0127> +<3dc9> <0295> +<3dca> <0294> +<3dcb> <0266> +<3dcc> <0298> +<3dcd> <01c2> +<3dce> <0253> +<3dcf> <0257> +<3dd0> <0284> +<3dd1> <0260> +<3dd2> <0193> +<3dd3> <0268> +<3dd4> <0289> +<3dd5> <0258> +<3dd6> <025c> +<3dd7> <025e> +<3dd8> <0250> +<3dd9> <026f> +<3dda> <028a> +<3ddb> <0264> +<3ddc> <0252> +<3ddd> <028d> +<3dde> <0265> +<3ddf> <02a2> +<3de0> <02a1> +<3de1> <0255> +<3de2> <0291> +<3de3> <027a> +<3de4> <0267> +<3de5> <0361> +<3de6> <02c8> +<3de7> <02cc> +<3de8> <02d1> +<3de9> <203f> +<3dea> <030f> +<3df0> <02e902e5> +<3df1> <02e502e9> +<3df2> <0325> +<3df3> <032c> +<3df4> <0339> +<3df5> <031c> +<3df8> <033d> +<3df9> <0329> +<3dfa> <032f> +<3dfb> <02de> +<3dfc> <0324> +<3dfd> <0330> +<3dfe> <033c> +<3dff> <0334> +<3e04> <032a> +<3e07> <031a> +<3e08> <222e> +<3e09> <221f> +<3e0a> <22bf> +<3e0d> <026a> +<3e0e> <0274> +<3e0f> <0276> +<3e10> <0278> +<3e11> <0280> +<3e12> <028f> +<3e13> <0299> +<3e14> <029c> +<3e15> <029f> +endbfchar + +100 beginbfchar +<3e16> <02b0> +<3e17> <02b2> +<3e18> <02b7> +<3e19> <02c1> +<3e1c> <220a> +<3e1d> <2211> +<3e1e> <222d> +<3e21> <2298> +<3e22> <229e> +<3e23> <22a0> +<3e24> <006e> +<3e25> <03b2> +<3e26> <03b8> +<3e27> <03c7> +<3e28> <2127> +<3e29> <30a0> +<3e2a> <2155> +<3e2f> <01d6> +<3e30> <01d8> +<3e31> <01da> +<3e32> <01dc> +<3e33> <0104> +<3e34> <013d> +<3e35> <015a> +<3e36> <015e> +<3e37> <0164> +<3e38> <0179> +<3e39> <017b> +<3e3a> <0105> +<3e3b> <013e> +<3e3c> <015b> +<3e3d> <015f> +<3e3e> <0165> +<3e3f> <017a> +<3e40> <017c> +<3e41> <0154> +<3e42> <0102> +<3e43> <0139> +<3e44> <0106> +<3e45> <010c> +<3e46> <0118> +<3e47> <010e> +<3e48> <0143> +<3e49> <0147> +<3e4a> <0150> +<3e4b> <0158> +<3e4c> <0170> +<3e4d> <0162> +<3e4e> <0155> +<3e4f> <0103> +<3e50> <013a> +<3e51> <0107> +<3e52> <010d> +<3e53> <0119> +<3e54> <010f> +<3e55> <0111> +<3e56> <0144> +<3e57> <0148> +<3e58> <0151> +<3e59> <0159> +<3e5a> <0171> +<3e5b> <0163> +<3e5c> <0108> +<3e5d> <011c> +<3e5e> <0124> +<3e5f> <0134> +<3e60> <015c> +<3e61> <016c> +<3e62> <0109> +<3e63> <011d> +<3e64> <0125> +<3e65> <0135> +<3e66> <015d> +<3e67> <016d> +<3e6c> <3003> +<3e6d> <3006> +<3e6e> <30fc> +<3e6f> <30ff> +<3e70> <309f> +<3ec7> <304b309a> +<3ec8> <304d309a> +<3ec9> <304f309a> +<3eca> <3051309a> +<3ecb> <3053309a> +<3f22> <30ab309a> +<3f23> <30ad309a> +<3f24> <30af309a> +<3f25> <30b1309a> +<3f26> <30b3309a> +<3f27> <30bb309a> +<3f28> <30c4309a> +<3f29> <30c8309a> +<3f34> <31f7309a> +<3f3f> <3053> +<3f40> <30b3> +<3f41> <30fd> +<3f42> <303c> +<3f43> <30ff> +<3f44> <2225> +<3f47> <266e> +endbfchar + +100 beginbfchar +<3f48> <266b> +<3f4b> <29bf> +<3f4c> <2127> +<3f4d> <30a0> +<3f4e> <2013> +<3f51> <304b309a> +<3f52> <304d309a> +<3f53> <304f309a> +<3f54> <3051309a> +<3f55> <3053309a> +<3f56> <30ab309a> +<3f57> <30ad309a> +<3f58> <30af309a> +<3f59> <30b1309a> +<3f5a> <30b3309a> +<3f5b> <30bb309a> +<3f5c> <30c4309a> +<3f5d> <30c8309a> +<3f5e> <03c2> +<3f6b> <25b1> +<3f76> <31f7309a> +<3f8c> <203e> +<3f8d> +<3f8e> <2713> +<3f8f> <2318> +<3f90> <2423> +<3f91> <23ce> +<3f98> <00a4> +<3f99> <2051> +<3f9a> <2042> +<3fab> <2209> +<3fac> <2226> +<3fad> <2245> +<3fae> <2248> +<3faf> <2262> +<3fc8> <20dd> +<3fcb> <30a0> +<3fcc> <2013> +<3fd7> <31f7309a> +<3fe0> <304b309a> +<3fe1> <304d309a> +<3fe2> <304f309a> +<3fe3> <3051309a> +<3fe4> <3053309a> +<3fe5> <30ab309a> +<3fe6> <30ad309a> +<3fe7> <30af309a> +<3fe8> <30b1309a> +<3fe9> <30b3309a> +<3fea> <30bb309a> +<3feb> <30c4309a> +<3fec> <30c8309a> +<3ff7> <31f7309a> +<3ffe> <304b309a> +<3fff> <304d309a> +<4000> <304f309a> +<4001> <3051309a> +<4002> <3053309a> +<4003> <30ab309a> +<4004> <30ad309a> +<4005> <30af309a> +<4006> <30b1309a> +<4007> <30b3309a> +<4008> <30bb309a> +<4009> <30c4309a> +<400a> <30c8309a> +<4015> <31f7309a> +<401c> <29bf> +<401d> <25e6> +<401e> <304b309a> +<401f> <304d309a> +<4020> <304f309a> +<4021> <3051309a> +<4022> <3053309a> +<4023> <30ab309a> +<4024> <30ad309a> +<4025> <30af309a> +<4026> <30b1309a> +<4027> <30b3309a> +<4028> <30bb309a> +<4029> <30c4309a> +<402a> <30c8309a> +<4035> <31f7309a> +<4040> <3053> +<4041> <30b3> +<404c> <31f7309a> +<4053> <3053> +<4054> <30b3> +<4055> <2260> +<4058> <221e> +<4059> <2234> +<405a> <2103> +<405b> <2208> +<405c> <220b> +<4061> <222a> +<4062> <2229> +<4067> <2209> +<4068> <2205> +<406d> <21d2> +<406e> <21d4> +endbfchar + +100 beginbfchar +<406f> <2200> +<4070> <2203> +<4076> <2220> +<4077> <22a5> +<4078> <2202> +<4079> <2207> +<407a> <2261> +<407b> <2252> +<407e> <221a> +<407f> <223d> +<4080> <221d> +<4081> <2235> +<4084> <2262> +<4085> <2243> +<4086> <2245> +<4087> <2248> +<408a> <2194> +<408b> <2213> +<408c> <2135> +<408d> <210f> +<408e> <2127> +<408f> <30a0> +<4092> <2155> +<4093> <2318> +<4098> <01d6> +<4099> <01d8> +<409a> <01da> +<409b> <01dc> +<409c> <0104> +<409d> <02d8> +<409e> <013d> +<409f> <015a> +<40a0> <015e> +<40a1> <0164> +<40a2> <0179> +<40a3> <017b> +<40a4> <0105> +<40a5> <02db> +<40a6> <013e> +<40a7> <015b> +<40a8> <02c7> +<40a9> <015f> +<40aa> <0165> +<40ab> <017a> +<40ac> <02dd> +<40ad> <017c> +<40ae> <0154> +<40af> <0102> +<40b0> <0139> +<40b1> <0106> +<40b2> <010c> +<40b3> <0118> +<40b4> <010e> +<40b5> <0143> +<40b6> <0147> +<40b7> <0150> +<40b8> <0158> +<40b9> <0170> +<40ba> <0162> +<40bb> <0155> +<40bc> <0103> +<40bd> <013a> +<40be> <0107> +<40bf> <010d> +<40c0> <0119> +<40c1> <010f> +<40c2> <0111> +<40c3> <0144> +<40c4> <0148> +<40c5> <0151> +<40c6> <0159> +<40c7> <0171> +<40c8> <0163> +<40c9> <02d9> +<40ca> <0108> +<40cb> <011c> +<40cc> <0124> +<40cd> <0134> +<40ce> <015c> +<40cf> <016c> +<40d0> <0109> +<40d1> <011d> +<40d2> <0125> +<40d3> <0135> +<40d4> <015d> +<40d5> <016d> +<40d6> <0271> +<40d7> <028b> +<40d8> <027e> +<40d9> <026c> +<40da> <026e> +<40db> <0279> +<40dc> <0288> +<40dd> <0256> +<40de> <0273> +<40df> <027d> +<40e0> <0282> +<40e1> <0290> +<40e2> <027b> +<40e3> <026d> +endbfchar + +100 beginbfchar +<40e4> <025f> +<40e5> <0272> +<40e6> <029d> +<40e7> <028e> +<40e8> <0261> +<40e9> <0270> +<40ea> <0281> +<40eb> <0127> +<40ec> <0295> +<40ed> <0294> +<40ee> <0266> +<40ef> <0298> +<40f0> <01c2> +<40f1> <0253> +<40f2> <0257> +<40f3> <0284> +<40f4> <0260> +<40f5> <0193> +<40f6> <0268> +<40f7> <0289> +<40f8> <0258> +<40f9> <025c> +<40fa> <025e> +<40fb> <0250> +<40fc> <026f> +<40fd> <028a> +<40fe> <0264> +<40ff> <0252> +<4100> <028d> +<4101> <0265> +<4102> <02a2> +<4103> <02a1> +<4104> <0255> +<4105> <0291> +<4106> <027a> +<4107> <0267> +<4108> <0361> +<4109> <02c8> +<410a> <02cc> +<410b> <02d1> +<410c> <203f> +<410d> <030f> +<4113> <02e902e5> +<4114> <02e502e9> +<4115> <0325> +<4116> <032c> +<4117> <0339> +<4118> <031c> +<411b> <033d> +<411c> <0329> +<411d> <032f> +<411e> <02de> +<411f> <0324> +<4120> <0330> +<4121> <033c> +<4122> <0334> +<4127> <032a> +<412a> <031a> +<412b> <222e> +<412c> <221f> +<412d> <22bf> +<4130> <026a> +<4131> <0274> +<4132> <0276> +<4133> <0278> +<4134> <0280> +<4135> <028f> +<4136> <0299> +<4137> <029c> +<4138> <029f> +<4139> <02b0> +<413a> <02b2> +<413b> <02b7> +<413c> <02c0> +<413f> <220a> +<4140> <2211> +<4141> <222d> +<4144> <2298> +<4145> <229e> +<4146> <22a0> +<4147> <006e> +<4148> <03b2> +<4149> <03b8> +<414a> <03c7> +<414b> <2127> +<414c> <30a0> +<414d> <2155> +<4152> <01d6> +<4153> <01d8> +<4154> <01da> +<4155> <01dc> +<4156> <0104> +<4157> <013d> +<4158> <015a> +<4159> <015e> +<415a> <0164> +<415b> <0179> +<415c> <017b> +<415d> <0105> +<415e> <013e> +endbfchar + +100 beginbfchar +<415f> <015b> +<4160> <015f> +<4161> <0165> +<4162> <017a> +<4163> <017c> +<4164> <0154> +<4165> <0102> +<4166> <0139> +<4167> <0106> +<4168> <010c> +<4169> <0118> +<416a> <010e> +<416b> <0143> +<416c> <0147> +<416d> <0150> +<416e> <0158> +<416f> <0170> +<4170> <0162> +<4171> <0155> +<4172> <0103> +<4173> <013a> +<4174> <0107> +<4175> <010d> +<4176> <0119> +<4177> <010f> +<4178> <0111> +<4179> <0144> +<417a> <0148> +<417b> <0151> +<417c> <0159> +<417d> <0171> +<417e> <0163> +<417f> <0108> +<4180> <011c> +<4181> <0124> +<4182> <0134> +<4183> <015c> +<4184> <016c> +<4185> <0109> +<4186> <011d> +<4187> <0125> +<4188> <0135> +<4189> <015d> +<418a> <016d> +<418b> <4f48> +<418c> <4f5f> +<418d> <4f6a> +<418e> <4f6c> +<418f> <500e> +<4190> <5018> +<4191> <5041> +<4192> <50f2> +<4193> <50d0> +<4194> <5106> +<4195> <5103> +<4196> <5135> +<4197> <5155> +<4198> <5157> +<4199> <34b5> +<419a> <51ca> +<419b> <51e2> +<419c> <5257> +<419d> <52cc> +<419e> <52d6> +<419f> <52fb> +<41a0> <531c> +<41a1> <5363> +<41a2> <539d> +<41a3> <5412> +<41a4> <547f> +<41a5> <5488> +<41a6> <5550> +<41a7> <5581> +<41a8> <55ad> +<41a9> <55ce> +<41aa> <563b> +<41ab> <569e> +<41ac> <56a9> +<41ad> <56b3> +<41ae> <5777> +<41af> <577c> +<41b0> +<41b1> <57cf> +<41b2> <57e4> +<41b3> <5864> +<41b4> <5889> +<41b5> +<41b6> <58d2> +<41b7> <58e0> +<41b8> <8641> +<41b9> <598b> +<41ba> <5992> +<41bb> <59c3> +<41bc> <5a13> +<41bd> <5a67> +<41be> <5a77> +<41bf> <5a84> +<41c0> <5ac4> +<41c1> +<41c2> <5b7d> +endbfchar + +100 beginbfchar +<41c3> <5b93> +<41c4> <5c12> +<41c5> +<41c6> +<41c7> <5c7a> +<41c8> <5c8f> +<41c9> <5c9f> +<41ca> <5ca3> +<41cb> <5caa> +<41cc> <5cd0> +<41cd> +<41ce> <5d0d> +<41cf> <5d47> +<41d0> <5d81> +<41d1> <5da4> +<41d2> <5da7> +<41d3> <5dcb> +<41d4> <5e5e> +<41d5> <5ef9> +<41d6> <5f00> +<41d7> <5f02> +<41d8> <5f23> +<41d9> <5f3d> +<41da> <5f54> +<41db> <5f7d> +<41dc> <600d> +<41dd> <6014> +<41de> <6018> +<41df> <6035> +<41e0> <6047> +<41e1> <609d> +<41e2> <60d4> +<41e3> <60dd> +<41e4> <612b> +<41e5> <61bc> +<41e6> <61b9> +<41e7> <6222> +<41e8> <625a> +<41e9> <626f> +<41ea> <62d6> +<41eb> <637c> +<41ec> <63e5> +<41ed> <6479> +<41ee> <64c4> +<41ef> <64d0> +<41f0> <6529> +<41f1> <659d> +<41f2> <663a> +<41f3> <6622> +<41f4> <662b> +<41f5> <6630> +<41f6> <6633> +<41f7> <6648> +<41f8> +<41fb> <668d> +<41fc> <66bb> +<41fd> <66db> +<41fe> <66e8> +<41ff> <6747> +<4200> <6781> +<4201> <6793> +<4202> <6798> +<4203> <679b> +<4204> <67fc> +<4205> <681d> +<4206> <68a3> +<4207> <690a> +<4208> <6949> +<4209> +<420a> <6942> +<420b> <6964> +<420c> <69a5> +<420d> <69cf> +<420e> <3bb6> +<420f> <3bc3> +<4210> <69e9> +<4211> <69f5> +<4212> +<4213> <6a3b> +<4214> +<4215> <6a94> +<4216> <6aa5> +<4217> <3c0f> +<4218> <6b1b> +<4219> <6b2c> +<421a> <6b67> +<421b> <6ba9> +<421c> <6bad> +<421d> <6bd7> +<421e> <6bff> +<421f> <6c05> +<4220> <6c74> +<4221> <6c98> +<4222> <6cfb> +<4223> <6cc6> +<4224> <6d31> +<4225> <6d39> +<4226> <6d3f> +<4227> <6d58> +<4228> <6d94> +endbfchar + +100 beginbfchar +<4229> <6daa> +<422a> <6ddb> +<422b> <6ddd> +<422c> <6e44> +<422d> <6e5e> +<422e> <6eb1> +<422f> <6ec1> +<4230> <6f10> +<4231> <6f59> +<4232> <6f61> +<4233> <6f7e> +<4234> <6f8c> +<4235> <6fa0> +<4236> <6fbc> +<4237> <6fc7> +<4238> <6fca> +<4239> <6ff0> +<423a> <704e> +<423b> <7075> +<423c> <70a4> +<423d> <70e4> +<423e> <712b> +<423f> <711e> +<4240> <712e> +<4241> <7151> +<4242> <7168> +<4243> <7185> +<4244> <7187> +<4245> <71ba> +<4246> <71c4> +<4247> <7215> +<4248> <3e3f> +<4249> <729b> +<424a> +<424b> <7327> +<424c> <7350> +<424d> <7366> +<424e> <73a2> +<424f> <742b> +<4250> <7446> +<4251> <7462> +<4252> <746d> +<4253> <74a6> +<4254> <74a9> +<4255> <74c9> +<4256> <74ff> +<4257> <7517> +<4258> <3f72> +<4259> <75ce> +<425a> <7602> +<425b> <7608> +<425c> <7664> +<425d> <7681> +<425e> <769d> +<425f> <76aa> +<4260> <76b6> +<4261> <76ce> +<4262> <76d4> +<4263> <76e6> +<4264> <76f1> +<4265> <770a> +<4266> <7719> +<4269> <777a> +<426a> <7780> +<426b> <7794> +<426c> <77e0> +<426d> +<426e> <7843> +<426f> <786e> +<4270> <78b0> +<4271> +<4272> <78ad> +<4273> <7900> +<4274> <791c> +<4275> <792e> +<4276> <7934> +<4277> <7946> +<4278> <7979> +<4279> <79c8> +<427a> +<427b> <79d4> +<427c> <79de> +<427d> <79eb> +<427e> <79ed> +<427f> <7a85> +<4280> +<4281> <7ace> +<4282> <7afd> +<4283> <7b12> +<4284> <7b2d> +<4285> <7b3b> +<4286> <7b6f> +<4287> <7c01> +<4288> <7c33> +<4289> +<428a> <7c6d> +<428b> <7c79> +<428c> <7c8f> +<428d> <7c94> +<428e> <7ca0> +endbfchar + +100 beginbfchar +<428f> <7cd5> +<4290> <7d31> +<4291> <7d5c> +<4292> <7d83> +<4293> <7da6> +<4294> <7dc2> +<4295> <7e28> +<4296> <7f97> +<4297> <7fdb> +<4298> <8035> +<4299> <8037> +<429a> <80ca> +<429b> <80e0> +<429c> <80f3> +<429d> <8160> +<42a0> <816d> +<42a1> <81bb> +<42a2> <81ca> +<42a3> <81d7> +<42a4> <445b> +<42a5> <8260> +<42a6> <8274> +<42a7> +<42a8> <82a1> +<42ab> <82a9> +<42ac> <82bf> +<42ad> <82d5> +<42ae> <82fd> +<42af> <8300> +<42b0> <8322> +<42b1> <832d> +<42b2> <833a> +<42b3> <8347> +<42b4> <837d> +<42b5> <83a7> +<42b6> <83cf> +<42b7> <83d1> +<42b8> <83e1> +<42b9> <8401> +<42ba> <8406> +<42bb> <845f> +<42bc> <8470> +<42bd> <8473> +<42be> <8485> +<42bf> <849e> +<42c0> <84ba> +<42c1> +<42c2> <8532> +<42c3> <851e> +<42c4> <852f> +<42c5> <8564> +<42c6> <857a> +<42c7> <858c> +<42c8> <85a2> +<42c9> <85cb> +<42ca> <85ed> +<42cb> <85ff> +<42ce> <8610> +<42cf> +<42d0> <8618> +<42d1> <8638> +<42d2> <8657> +<42d3> <8662> +<42d4> <459d> +<42d5> <8675> +<42d6> <86b8> +<42d7> <86fc> +<42d8> <8787> +<42d9> <45ea> +<42da> <880a> +<42db> <8810> +<42dc> <88ce> +<42dd> +<42de> <8932> +<42df> <8939> +<42e0> <8940> +<42e1> <8994> +<42e2> <89f6> +<42e3> <8a47> +<42e4> <8a5d> +<42e5> <8a61> +<42e6> <8a75> +<42e7> <8ad0> +<42e8> <8b46> +<42e9> <8b59> +<42ea> <8b69> +<42eb> <8b9d> +<42ec> <8c49> +<42ed> <8c68> +<42ee> <8daf> +<42ef> <8dd1> +<42f0> <8dd7> +<42f1> <8e23> +<42f2> <8e3d> +<42f3> <8e7b> +<42f4> +<42f5> <4844> +<42f6> <8efa> +<42f7> <8f1e> +<42f8> <8f2d> +endbfchar + +100 beginbfchar +<42f9> <8f54> +<42fa> +<42fb> <8fe8> +<42fc> <8fee> +<42fd> <9008> +<42fe> <902d> +<42ff> <9097> +<4300> <90b3> +<4301> <90be> +<4304> <90c7> +<4305> <90ef> +<4306> <9114> +<4307> <9116> +<430a> <912f> +<430b> <9134> +<430c> <9183> +<430d> <91f1> +<430e> <9349> +<4311> <93a3> +<4312> <93df> +<4313> <9404> +<4314> <9433> +<4315> <944a> +<4316> <9463> +<4317> <9471> +<4318> <958e> +<4319> <959f> +<431a> <95ac> +<431b> <95b6> +<431c> <95cb> +<431d> <95d0> +<431e> <95d3> +<431f> <49b0> +<4320> <95de> +<4321> <96a5> +<4322> <96ef> +<4323> <974e> +<4324> <9795> +<4325> <97ae> +<4326> <97ba> +<4327> <97c1> +<4328> <97c9> +<4329> <97db> +<432a> <9856> +<432b> <98e7> +<432c> <9958> +<432d> <9a03> +<432e> <9ac1> +<432f> <9ac3> +<4330> <9ace> +<4331> <9ad6> +<4332> <9b02> +<4333> <9b08> +<4334> <4c17> +<4335> <9b2d> +<4336> <9b5e> +<4337> <9b66> +<4338> <9b84> +<4339> <9b8a> +<433a> <9b9e> +<433b> <9bce> +<433c> <9be5> +<433d> <9bf8> +<433e> <9c23> +<4341> <9c65> +<4344> <9d43> +<4345> <9d52> +<4346> <9d8a> +<4347> <9d96> +<4348> <9dc0> +<4349> <9dac> +<434a> <9dbc> +<434b> +<434c> <9de7> +<434d> <9e07> +<434e> <9e9e> +<434f> <9eaf> +<4350> <9f97> +<4351> +<4352> <4e02> +<4353> <4e0f> +<4354> <4e12> +<4355> <4e29> +<4356> <4e2e> +<4357> <4e47> +<4358> +<4359> <4e51> +<435a> <3406> +<435b> +<435c> <4e69> +<435d> <4e9d> +<435e> <342c> +<435f> <4ebc> +<4360> <4ec3> +<4361> <4ec8> +<4362> <4eeb> +<4363> <4eda> +<4364> <4ef1> +<4365> <4ef5> +<4366> <4f16> +endbfchar + +100 beginbfchar +<4367> <4f64> +<4368> <4f37> +<4369> <4f3e> +<436a> <4f58> +<436b> +<436e> <4f82> +<436f> <4f85> +<4370> <4fe6> +<4371> <4fb2> +<4372> <4fc5> +<4373> <4fcb> +<4374> <4fd2> +<4375> <346a> +<4376> <4ff2> +<4377> <5013> +<4378> <501c> +<4379> <504e> +<437a> <5053> +<437b> <5063> +<437c> <50a3> +<437d> <5088> +<4380> <5095> +<4381> <50aa> +<4382> +<4383> <50b1> +<4386> <50c4> +<4387> <50c7> +<4388> <50f3> +<4389> +<438a> <50ce> +<438b> +<438c> <50d4> +<438d> <50e1> +<438e> <3492> +<438f> +<4390> <5117> +<4391> +<4392> <5160> +<4393> +<4394> <5173> +<4395> <5183> +<4396> <518b> +<4397> <34bc> +<4398> <5198> +<4399> <51a3> +<439a> <51ad> +<439b> <34c7> +<439c> +<439d> <51f3> +<439e> <5212> +<439f> <5216> +<43a0> +<43a1> <5255> +<43a2> <525c> +<43a3> <526c> +<43a4> <5277> +<43a5> <5284> +<43a6> <5282> +<43a7> +<43a8> <5298> +<43a9> +<43aa> <52a4> +<43ad> <52ca> +<43ae> <52d1> +<43af> +<43b0> <52f7> +<43b1> <5335> +<43b2> <5342> +<43b3> +<43b4> +<43b5> <5367> +<43b6> <537a> +<43b7> <53a4> +<43b8> <53b4> +<43b9> +<43ba> <53b7> +<43bb> <53c0> +<43bc> +<43bf> <53d5> +<43c0> <3563> +<43c1> <53f4> +<43c2> <5424> +<43c3> <5428> +<43c4> <356e> +<43c5> <5443> +<43c6> <5462> +<43c7> <546c> +<43c8> <5495> +<43c9> <54a0> +<43ca> <54a6> +<43cb> <54ae> +<43cc> <54b7> +<43cd> <54ba> +<43ce> <54c3> +<43cf> +<43d0> <54ec> +<43d1> <54ef> +<43d2> <54f1> +<43d3> <54f3> +<43d6> <5509> +endbfchar + +100 beginbfchar +<43d7> <553c> +<43d8> <5541> +<43d9> <35a6> +<43da> <5547> +<43db> <35a8> +<43dc> <5564> +<43dd> +<43de> <557d> +<43df> <5582> +<43e0> <5591> +<43e1> <35c5> +<43e2> <55d2> +<43e3> +<43e4> +<43e5> <55bf> +<43e6> <55c9> +<43e7> <55cc> +<43e8> <55d1> +<43e9> <55dd> +<43ea> <35da> +<43eb> <55e2> +<43ec> +<43ed> <55e9> +<43ee> <5628> +<43ef> +<43f0> <5607> +<43f1> <5610> +<43f2> <5630> +<43f3> <35f4> +<43f4> <563d> +<43f5> <5640> +<43f6> <5647> +<43f7> <565e> +<43f8> <5660> +<43f9> <566d> +<43fa> <3605> +<43fb> <5688> +<43fc> <568c> +<43fd> <569d> +<43fe> <56a8> +<43ff> <56b2> +<4400> <56c5> +<4401> <56cd> +<4402> <56df> +<4403> <56e8> +<4406> +<4407> +<4408> <5729> +<4409> +<440c> <574d> +<440d> +<440e> <5768> +<440f> <576f> +<4413> <577b> +<4414> +<4415> +<4416> <579a> +<4419> <57a8> +<441a> <57d7> +<441b> +<441c> <57cc> +<441d> +<441e> +<441f> <57de> +<4420> <57f0> +<4421> <364a> +<4422> <57f8> +<4423> <57fb> +<4424> <57fd> +<4425> <5804> +<4426> <581e> +<4427> <5827> +<4428> <5839> +<4429> +<442a> <5849> +<442b> <584c> +<442c> <5867> +<442f> <588d> +<4432> <5894> +<4433> <589d> +<4434> <58aa> +<4435> <58b1> +<4436> +<4437> <58c3> +<4438> <58cd> +<4439> <58e2> +<443e> <590d> +<443f> <5914> +<4440> +<4441> <3691> +<4442> <593d> +<4443> <3699> +<4444> <5946> +<4445> <3696> +<4446> +<4447> <595f> +<4448> +<444b> <597c> +<444c> <599f> +<444d> <59ae> +endbfchar + +100 beginbfchar +<444e> <59bc> +<444f> <59c8> +<4450> <59cd> +<4451> <59de> +<4452> <59e7> +<4453> <59ee> +<4454> +<4455> +<4456> <36cf> +<4457> <5a0d> +<4458> <5a17> +<4459> <5a27> +<445a> <5a2d> +<445b> <5a65> +<445c> <5a7a> +<445d> <5a8b> +<445e> <5a9c> +<4461> <5aa2> +<4462> <5ab1> +<4463> <5ab5> +<4464> <5aba> +<4465> <5abf> +<4466> <5ada> +<4467> <5adc> +<4468> <5ae5> +<4469> <5af0> +<446a> <5aee> +<446b> <5af5> +<446c> <5b08> +<446d> <5b17> +<446e> <5b34> +<446f> <5b4c> +<4470> <5b52> +<4471> <5b68> +<4472> <5b6f> +<4473> <5b81> +<4474> <5b84> +<4475> +<4476> <5b96> +<4477> <5bac> +<447a> <5bce> +<447b> <5bd6> +<447c> <376c> +<447d> <376b> +<447e> <5bf1> +<447f> <5bfd> +<4480> <3775> +<4481> <5c03> +<4482> <5c29> +<4483> +<4484> <5c5f> +<4487> <5c70> +<4488> +<4489> +<448a> +<448b> +<448c> <5c88> +<448d> <5c8a> +<448e> <37c1> +<448f> +<4490> +<4491> <5ca0> +<4492> <5ca2> +<4493> <5ca7> +<4494> +<4495> <5cad> +<4496> <5cb5> +<4497> +<4498> <5cc9> +<4499> +<449a> +<449b> <5d06> +<449c> <5d10> +<449d> <5d2b> +<449e> <5d1d> +<449f> <5d20> +<44a0> <5d31> +<44a1> <5d39> +<44a2> <37e8> +<44a3> <5d61> +<44a4> <5d6a> +<44a5> <37f4> +<44a6> <5d70> +<44a7> +<44a8> <37fd> +<44a9> <5d88> +<44aa> <3800> +<44ab> <5d97> +<44ac> <5db0> +<44ad> <5db4> +<44ae> +<44af> <5dd1> +<44b0> <5dd7> +<44b1> +<44b2> <5de4> +<44b3> <5de9> +<44b4> <382f> +<44b5> <3836> +<44b6> <3840> +<44b7> <5e1f> +endbfchar + +100 beginbfchar +<44b8> <5e3e> +<44b9> <5e49> +<44ba> <385c> +<44bb> <5e56> +<44bc> <3861> +<44bf> +<44c0> <5ea5> +<44c1> <5eac> +<44c2> <5eb9> +<44c3> <5ec6> +<44c4> <5ed9> +<44c5> +<44c6> <5efd> +<44c7> <5f08> +<44c8> +<44c9> <5f1e> +<44ca> <5f47> +<44cb> <5f63> +<44cc> <5f72> +<44cd> <5f7e> +<44ce> <5f8f> +<44cf> <5fa2> +<44d0> <5fc7> +<44d1> <5fcb> +<44d5> <5fe2> +<44d8> <5ff3> +<44d9> <3917> +<44da> <6022> +<44db> <6024> +<44dc> <391a> +<44dd> <604c> +<44de> <6095> +<44df> <60a8> +<44e0> +<44e1> <60b1> +<44e2> <60be> +<44e3> <60c8> +<44e4> <60d9> +<44e5> <60ee> +<44e6> <60f5> +<44e7> <6110> +<44e8> <6119> +<44e9> <611e> +<44ea> <613a> +<44eb> <396f> +<44ec> <6141> +<44ed> <6146> +<44ee> <6160> +<44ef> +<44f2> <6197> +<44f3> <61a5> +<44f4> <61ad> +<44f5> +<44f6> <61d5> +<44f7> <61dd> +<44f8> <61f5> +<44f9> +<44fa> <6223> +<44fb> <6252> +<44fc> <6261> +<44fd> <6264> +<44fe> <627b> +<44ff> <626d> +<4500> <6273> +<4501> <6299> +<4502> <62d5> +<4503> +<4504> <62fd> +<4505> <6303> +<4506> <6310> +<4509> <6332> +<450a> <6335> +<450d> <6341> +<450e> <6344> +<450f> <634e> +<4510> +<4511> <6359> +<4512> +<4513> +<4514> <636c> +<4515> <6399> +<4516> +<4517> <6394> +<4518> <63bd> +<451b> <63e0> +<451e> <63f2> +<451f> <641e> +<4520> <6425> +<4521> <6429> +<4522> <642f> +<4523> <645a> +<4524> <645d> +<4525> <6473> +<4526> <647d> +<4527> <6487> +<4528> <6491> +<4529> <649f> +<452c> <64d5> +<452d> <64d7> +<452e> +endbfchar + +100 beginbfchar +<452f> <64e4> +<4530> <64ff> +<4531> <3a6e> +<4532> <650f> +<4533> <6514> +<4534> <3a73> +<4535> <651e> +<4536> <6532> +<4537> <6544> +<4538> <6554> +<4539> <656b> +<453a> <657a> +<453b> <6584> +<453c> <658a> +<453d> <65b2> +<453e> <65b5> +<453f> <65b8> +<4540> <65bf> +<4541> <65c9> +<4542> <65d4> +<4543> <3ad6> +<4544> <65f9> +<4545> <65fc> +<4546> <6604> +<4547> <6608> +<4548> <6621> +<4549> <662a> +<454a> <6645> +<454b> <6651> +<454c> <664e> +<454d> <3aea> +<454e> +<454f> +<4550> +<4551> <666a> +<4554> <667b> +<4555> <6680> +<4556> <6690> +<4557> <6692> +<4558> <3b0e> +<4559> <66ad> +<455a> <66b1> +<455b> <66b5> +<455c> <3b1a> +<455d> <3b1c> +<455e> <3ad7> +<455f> <6701> +<4560> <6712> +<4561> +<4562> <6719> +<4563> +<4564> +<4565> <674d> +<4566> <6754> +<4567> <675d> +<4568> +<4569> +<456a> +<456b> <6774> +<456c> +<456d> <6792> +<456e> +<456f> <8363> +<4570> <6810> +<4571> <67c3> +<4572> <67c8> +<4573> <67d2> +<4574> <67db> +<4575> <67f7> +<4576> +<4577> +<4578> +<4579> <6818> +<457a> <681f> +<457b> <682d> +<457c> +<457d> <6833> +<457e> <683b> +<457f> <683e> +<4580> <6845> +<4581> <6849> +<4582> <684c> +<4583> <6855> +<4584> <6857> +<4585> <3b77> +<4586> <686b> +<4587> <686e> +<4588> <687c> +<4589> <6882> +<458a> <6890> +<458b> <6896> +<458c> <3b6d> +<4590> <689c> +<4593> <68b4> +<4594> <68bb> +<4595> <68fb> +<4596> +<4597> +<4598> <68c3> +<4599> <68c5> +endbfchar + +100 beginbfchar +<459a> <68cc> +<459b> <68d9> +<459e> <68ec> +<459f> <68f7> +<45a0> <6903> +<45a1> <6907> +<45a2> <3b87> +<45a3> +<45a4> <3b8d> +<45a5> <6946> +<45a6> <6969> +<45a7> <696c> +<45a8> <697a> +<45a9> <6992> +<45aa> <3ba4> +<45ab> <6996> +<45ac> <69b0> +<45ad> <69ba> +<45ae> <69bc> +<45af> <69c0> +<45b0> <69d1> +<45b1> +<45b2> +<45b3> +<45b4> <69e3> +<45b7> <69f3> +<45b8> <3bcd> +<45b9> <69f4> +<45ba> <69fe> +<45bb> <6a11> +<45bc> <6a1a> +<45bd> <6a1d> +<45be> +<45c1> <6a3f> +<45c2> <6a49> +<45c3> <6a7a> +<45c4> <6a4e> +<45c5> <6a52> +<45c6> <6a64> +<45c7> +<45c8> <6a8b> +<45c9> <3bf0> +<45ca> <6aa1> +<45cb> +<45cc> <6aab> +<45cd> <6abd> +<45ce> <6ac6> +<45cf> <6ad4> +<45d0> <6ad0> +<45d1> <6add> +<45d2> +<45d3> +<45d7> <6afd> +<45d8> +<45d9> <6b0b> +<45dd> +<45de> <6b17> +<45df> <3c26> +<45e0> <6b2f> +<45e1> <6b4a> +<45e2> <6b58> +<45e3> <6b6c> +<45e4> <6b75> +<45e5> <6b7a> +<45e6> <6b81> +<45e7> <6b9b> +<45e8> <6bae> +<45e9> +<45ea> <6bbd> +<45ee> <6bda> +<45f1> <6bee> +<45f2> <6c02> +<45f3> <6c0a> +<45f4> <6c0e> +<45f5> <6c36> +<45f6> +<45f7> <6c4d> +<45f8> <6c5b> +<45f9> <6c6d> +<45fa> <6c84> +<45fb> <6c89> +<45fc> <3cc3> +<45fd> <6c94> +<45fe> <6c97> +<45ff> <6cad> +<4600> <6cc2> +<4601> <3cd2> +<4602> <6cdc> +<4603> <6ce9> +<4604> <6ced> +<4605> +<4606> <6d00> +<4607> <6d24> +<460a> <6c67> +<460b> <6d2f> +<460c> <6d3c> +<460d> <6d5b> +<460e> <6d60> +<460f> <6d70> +<4612> <6d8a> +endbfchar + +100 beginbfchar +<4613> <6d8d> +<4614> <6d91> +<4615> <6d98> +<4616> +<4617> +<4618> +<4619> +<461a> <6dab> +<461b> <6dae> +<461c> <6db4> +<461d> <6dc2> +<461e> <6d34> +<461f> <6dc8> +<4620> <6dce> +<4621> <6ddf> +<4622> <6df6> +<4623> <6e36> +<4624> <6e1e> +<4625> <3d11> +<4626> <6e32> +<462b> <6e4f> +<462e> <6e57> +<462f> <6e63> +<4630> <3d1e> +<4631> <6e93> +<4632> <6ea7> +<4633> <6eb4> +<4634> <6ec3> +<4635> <6f35> +<4636> <6eeb> +<4637> <6ef9> +<4638> <6efb> +<4639> <6f0a> +<463a> <6f0c> +<463b> <6f18> +<463c> <6f25> +<463d> <6f36> +<463e> <6f3c> +<463f> +<4640> <6f52> +<4641> <6f57> +<4642> <6f60> +<4643> <6f68> +<4644> <6f90> +<4645> <6f96> +<4646> <6fbe> +<4647> <6f9f> +<4648> <6fa5> +<4649> <6faf> +<464a> <3d64> +<464d> <6fe9> +<464e> +<464f> <6ffc> +<4650> <7000> +<4651> <700a> +<4652> <7023> +<4653> +<4654> <703a> +<4655> <7043> +<4656> <7047> +<4657> <704b> +<4658> <3d9a> +<4659> <7065> +<465a> <7069> +<465b> <706e> +<465c> <7076> +<465d> <7086> +<465e> <7097> +<465f> +<4660> <709f> +<4661> <70b1> +<4662> +<4663> <70ec> +<4664> <70ca> +<4665> <70d1> +<4666> <7103> +<4667> <7106> +<4668> <7108> +<4669> <710c> +<466a> <3dc0> +<466b> <712f> +<466c> <7150> +<466d> <7153> +<466e> <715e> +<466f> <3dd4> +<4670> <7196> +<4671> <7180> +<4672> <719b> +<4673> <71a0> +<4674> <71a2> +<4677> +<4678> <71d9> +<4679> <71dc> +<467a> <7207> +<467b> <3e05> +<467c> <7234> +<467d> <7239> +<467e> <7242> +<467f> <7257> +<4680> <7263> +endbfchar + +100 beginbfchar +<4681> +<4684> <7278> +<4685> <727f> +<4686> <728e> +<4687> +<4688> <72ae> +<4689> <72b0> +<468a> <72c1> +<468b> <3e60> +<468c> <72cc> +<468d> <3e66> +<468e> <3e68> +<468f> <72f3> +<4690> <72fa> +<4691> <7307> +<4692> <7312> +<4695> <3e83> +<4696> <7339> +<4697> <732c> +<4698> <7333> +<4699> <733d> +<469a> <7352> +<469b> <3e94> +<469c> <736b> +<469d> +<46a0> <7371> +<46a1> <7381> +<46a2> <738a> +<46a3> <7394> +<46a4> <7398> +<46a5> <739c> +<46a6> <73a5> +<46a7> <73b9> +<46a8> <73bf> +<46a9> <73c5> +<46aa> <73cb> +<46ab> <73e1> +<46ac> <73e7> +<46ad> <73f9> +<46ae> <7413> +<46af> <73fa> +<46b0> <7401> +<46b1> <7453> +<46b2> <7440> +<46b3> <7443> +<46b4> <7452> +<46b5> <745d> +<46b6> <7481> +<46b7> <7488> +<46b8> +<46b9> <7492> +<46ba> <7497> +<46bb> <7499> +<46bc> <74a1> +<46bd> <74a5> +<46be> <74aa> +<46bf> <74b9> +<46c0> <74bb> +<46c1> <74ba> +<46c2> <74d6> +<46c3> <74d8> +<46c4> <74eb> +<46c5> +<46c6> <74fa> +<46c7> +<46c8> <7520> +<46c9> <7524> +<46ca> <752a> +<46cb> <3f57> +<46cc> +<46cf> <7540> +<46d0> <7548> +<46d1> <7550> +<46d2> <7552> +<46d3> <7572> +<46d4> <7571> +<46d5> <757a> +<46d8> <758c> +<46d9> <3f75> +<46da> <75a2> +<46db> <3f77> +<46dc> <75b0> +<46dd> <75b7> +<46e0> <75c6> +<46e1> <75cf> +<46e2> <75d3> +<46e3> <75dd> +<46e6> <75e7> +<46e7> <75ee> +<46e8> <75f1> +<46e9> <7603> +<46ea> <7618> +<46eb> <7607> +<46ec> <760f> +<46ed> <3fae> +<46ee> +<46ef> <7613> +<46f2> +<46f3> <7625> +<46f4> <7628> +endbfchar + +100 beginbfchar +<46f5> <763c> +<46f6> <7633> +<46f7> +<46f8> <3fc9> +<46f9> <7641> +<46fa> +<46fb> <7649> +<46fc> <7655> +<46fd> <3fd7> +<46fe> <766e> +<46ff> <7695> +<4700> <76a1> +<4701> <76a0> +<4704> <76af> +<4705> +<4706> <76c9> +<4707> +<4708> <76e8> +<4709> +<470a> <7717> +<470b> <771a> +<470c> <772d> +<470d> <7735> +<470e> +<470f> <4039> +<4710> +<4711> +<4712> <7758> +<4713> +<4714> <777c> +<4715> +<4716> <4058> +<4717> <779a> +<4718> <779f> +<4719> <77a2> +<471a> <77a4> +<471d> <77e4> +<471e> <77ea> +<471f> <77ec> +<4720> <77fb> +<4721> +<4722> <7805> +<4723> <7809> +<4724> <780d> +<4725> <7819> +<4726> <782c> +<4727> <7847> +<4728> <786a> +<4729> +<472a> <788a> +<472b> <7894> +<472c> <78a4> +<472d> <789d> +<472e> <789f> +<472f> <78bb> +<4730> <78d5> +<4731> <78e6> +<4734> <78fe> +<4735> +<4736> <7910> +<4737> <791b> +<4738> <7925> +<4739> <794a> +<473a> <7958> +<473b> <4105> +<473c> <7967> +<473d> <7972> +<473e> <7995> +<473f> <79a1> +<4740> <79a9> +<4741> <79b4> +<4742> <79c2> +<4743> <79c7> +<4746> <79d6> +<4747> <4148> +<4748> +<4749> +<474a> <414f> +<474b> <7a0a> +<474c> <7a15> +<474d> <7a1b> +<474e> <4163> +<474f> <7a38> +<4750> <7a47> +<4751> <7a56> +<4752> <7a59> +<4753> <7a5c> +<4754> <7a5f> +<4755> <7a67> +<4756> <7a6a> +<4757> <7a75> +<4758> <7a82> +<4759> <7a8a> +<475a> <7a90> +<475b> <7aac> +<475c> +<475d> <41b4> +<475e> <7ab9> +<475f> <7abe> +<4760> <41bf> +endbfchar + +100 beginbfchar +<4761> <7acc> +<4762> <7ae8> +<4763> <7af4> +<4764> +<4765> +<4766> +<4767> <7b3d> +<4768> <7b2a> +<476b> <41e6> +<476c> <41f3> +<476d> <7b7f> +<476e> <7b41> +<476f> <41ee> +<4770> <7b55> +<4771> <7b79> +<4772> <7b64> +<4773> <7b66> +<4774> <7b73> +<4775> +<4776> <4207> +<4777> <7b90> +<4778> <7b9b> +<4779> <420e> +<477a> <7bb5> +<477b> <7bbc> +<477c> <7bc5> +<477d> <7bca> +<477e> +<477f> +<4780> <7bd4> +<4781> <7bd6> +<4782> <7bda> +<4783> <7bea> +<4784> <7bf0> +<4785> <7c03> +<4786> <7c0e> +<4787> <7c45> +<4788> <7c4a> +<4789> <7c57> +<478a> <7c5e> +<478b> <7c61> +<478c> <7c69> +<478d> <7c6f> +<478e> +<478f> +<4790> +<4791> <7ca6> +<4792> +<4795> +<4796> <7cc4> +<4797> +<4798> <7ccd> +<4799> +<479a> +<479b> <7ce6> +<479c> +<479d> <7cf5> +<479e> <7d03> +<479f> <42c6> +<47a0> <7d12> +<47a1> <7d1e> +<47a2> +<47a3> +<47a6> <7d40> +<47a7> <7d47> +<47a8> +<47a9> +<47aa> <42d6> +<47ab> <7d5a> +<47ac> <7d6a> +<47ad> <7d70> +<47ae> <42dd> +<47af> <7d7f> +<47b0> +<47b1> <7d88> +<47b2> <7d97> +<47b3> +<47b4> <7d9d> +<47b5> <7da7> +<47b6> <7daa> +<47b7> <7db6> +<47b8> <7dc0> +<47b9> <7dd7> +<47ba> <7dd9> +<47bb> <7de6> +<47bc> <4302> +<47bd> +<47be> +<47bf> <7e10> +<47c0> <7e17> +<47c1> <7e1d> +<47c2> <7e27> +<47c3> <7e2c> +<47c4> <7e45> +<47c5> <7e75> +<47c6> <7e7e> +<47c9> <432b> +<47ca> <7e9a> +<47cb> <4343> +<47cc> <7f3c> +endbfchar + +100 beginbfchar +<47cd> <7f3b> +<47ce> <7f3e> +<47cf> <7f43> +<47d0> <34c1> +<47d1> +<47d2> +<47d5> <7f6d> +<47d8> <7f90> +<47d9> <517b> +<47da> +<47db> <7f96> +<47dc> <7f9c> +<47dd> <7fad> +<47de> +<47df> <7fc3> +<47e0> <7fcf> +<47e1> <7fe3> +<47e2> <7ff2> +<47e3> <800a> +<47e4> <8008> +<47e5> <8016> +<47e6> <802c> +<47e7> <8030> +<47e8> <8043> +<47e9> <8066> +<47ea> <807b> +<47eb> <8099> +<47ec> <809c> +<47ed> <80a4> +<47ee> <80a7> +<47ef> <80b8> +<47f0> +<47f1> <80c5> +<47f2> <80d5> +<47f3> <80e6> +<47f4> <810d> +<47f5> <80f5> +<47f6> <80fb> +<47f7> <43ee> +<47f8> <8135> +<47f9> <811e> +<47fa> <43f0> +<47fb> <8124> +<47fc> <8127> +<47fd> <812c> +<47fe> +<47ff> <813d> +<4800> <4408> +<4801> <8169> +<4802> <4417> +<4803> <441c> +<4804> <8185> +<4805> <4422> +<4806> <8198> +<4807> <81b2> +<4808> <81c1> +<4809> <81c3> +<480a> <81d6> +<480b> <81db> +<480c> +<480d> <81e4> +<480e> +<480f> <81ec> +<4810> <81fd> +<4811> <81ff> +<4812> +<4813> <8204> +<4814> +<4815> <8219> +<4816> <8222> +<4817> +<4818> <823c> +<4819> <8249> +<481a> <8245> +<481b> +<481c> <4476> +<481d> <447a> +<481e> <8257> +<481f> +<4820> <825c> +<4821> <8263> +<4822> +<4823> <4491> +<4824> <827d> +<4825> <827f> +<4826> <8283> +<4827> <828a> +<4828> <8293> +<482b> <82b2> +<482c> <82b4> +<482d> <82ba> +<482e> <82bc> +<482f> <82e2> +<4830> <82e8> +<4831> <82f7> +<4834> <830c> +<4835> <8354> +<4836> <831b> +<4837> <831d> +<4838> <8330> +endbfchar + +100 beginbfchar +<4839> <833c> +<483a> <8344> +<483b> <8357> +<483c> <44be> +<483d> <44d4> +<483e> <44b3> +<4841> <839b> +<4842> <839d> +<4843> <83c9> +<4844> <83d0> +<4845> <83d4> +<4846> <83dd> +<4847> <83e5> +<4848> <83f9> +<4849> <8415> +<484a> +<484b> <8417> +<484c> <8439> +<484d> <844f> +<4852> <845c> +<4853> +<4854> <8465> +<4855> <8478> +<4856> <847c> +<4857> <8481> +<4858> <450d> +<4859> <8497> +<485a> <84a6> +<485b> <84be> +<485c> <4508> +<485f> <84d3> +<4860> +<4861> <84e7> +<4862> <84ea> +<4863> <84ef> +<4864> <84f1> +<4865> <84fa> +<4866> <851b> +<4869> <852b> +<486a> <854f> +<486b> <856f> +<486c> <4543> +<486d> <8551> +<4870> +<4871> <857b> +<4872> <857d> +<4873> <857f> +<4874> <8581> +<4875> <8586> +<4876> <8593> +<4877> <859d> +<4878> <859f> +<4879> +<487c> <85bc> +<487d> <85c7> +<487e> <85ca> +<4881> <85df> +<4882> <85e1> +<4883> <85e6> +<4884> <85f6> +<4885> <8600> +<4886> <8611> +<4887> <861e> +<4888> <8621> +<4889> <8624> +<488a> <8627> +<488b> +<488c> <8639> +<488d> <863c> +<488e> +<488f> <8640> +<4890> <8653> +<4891> <8656> +<4892> <8677> +<4893> <8687> +<4894> <8689> +<4897> <86b1> +<4898> <86b3> +<4899> <86c1> +<489a> <86c3> +<489b> <86d1> +<489c> <86d5> +<489d> <86d7> +<489e> <86e3> +<489f> <86e6> +<48a0> <45b8> +<48a1> <8705> +<48a2> <8707> +<48a3> <870e> +<48a4> <8710> +<48a5> <871f> +<48a6> <8721> +<48a7> <8723> +<48a8> <8731> +<48a9> <873a> +<48aa> <8740> +<48ab> <8743> +<48ac> <8751> +<48ad> <8758> +<48b0> <8772> +endbfchar + +100 beginbfchar +<48b1> <877c> +<48b2> +<48b3> +<48b4> <87a7> +<48b5> <8789> +<48b6> <878b> +<48b7> <8793> +<48b8> <87a0> +<48b9> +<48ba> <45e5> +<48bb> <87be> +<48bc> +<48bd> <87c1> +<48be> <87ce> +<48bf> <87df> +<48c0> +<48c1> <87e3> +<48c4> <87ea> +<48c5> <8813> +<48c6> <8828> +<48c7> <882e> +<48c8> <8832> +<48c9> <883c> +<48ca> <460f> +<48cb> <884a> +<48cc> <8858> +<48cd> +<48ce> +<48cf> <8869> +<48d0> +<48d1> <886f> +<48d2> <88a0> +<48d3> <88bc> +<48d4> <88c0> +<48d5> +<48d6> <88d1> +<48d7> <88d3> +<48d8> <4641> +<48d9> <8901> +<48da> +<48db> <8937> +<48dc> +<48dd> <8942> +<48de> <8945> +<48df> <8949> +<48e0> +<48e1> <8962> +<48e2> <8989> +<48e3> <8990> +<48e4> <899f> +<48e5> <89b0> +<48e6> <89b7> +<48e7> <89d8> +<48e8> <89eb> +<48e9> <46a1> +<48ea> <89f3> +<48eb> <89fd> +<48ec> <89ff> +<48ed> <46af> +<48ee> <8a11> +<48ef> <8a14> +<48f0> +<48f1> <8a21> +<48f2> <8a35> +<48f3> <8a3e> +<48f4> <8a45> +<48f5> <8a4d> +<48f6> <8a58> +<48f7> <8aae> +<48f8> <8a90> +<48f9> <8ab7> +<48fa> <8ad7> +<48fb> <8afc> +<48fc> +<48fd> <8b0a> +<48fe> <8b05> +<48ff> <8b0d> +<4900> <8b1c> +<4901> <8b2d> +<4902> <470c> +<4903> <8b51> +<4904> <8b5e> +<4905> <8b76> +<4906> <8b81> +<4907> <8b8b> +<490a> <8c39> +<490b> +<490c> <8c3d> +<490d> +<490e> +<490f> <8c45> +<4910> <8c4f> +<4911> <8c57> +<4912> <8c69> +<4913> <8c6d> +<4914> +<4915> <8c93> +<4916> <8c92> +<4917> <8c99> +<4918> <4764> +endbfchar + +100 beginbfchar +<4919> <8c9b> +<491a> <8cd6> +<491b> <8cd5> +<491c> +<491d> <8cf1> +<491e> +<491f> <8d09> +<4920> <8d0e> +<4921> <8dc8> +<4922> <8dd9> +<4923> <8e0c> +<4924> <47fd> +<4925> <8dfd> +<4926> <8e06> +<4927> +<4928> <8e14> +<4929> <8e16> +<492c> <8e27> +<492d> +<492e> <4816> +<492f> <8e36> +<4930> <8e39> +<4931> <8e54> +<4932> <8e62> +<4933> <8e6d> +<4934> <8e6f> +<4935> <8e98> +<4936> <8e9e> +<4937> <8eb5> +<4938> <8ebb> +<4939> +<493a> <484e> +<493b> +<493c> <8f00> +<493d> <8f08> +<493e> <8f2b> +<493f> <8f40> +<4940> <8f4a> +<4941> <8f58> +<4942> +<4943> <8fa4> +<4944> <8fb4> +<4945> +<4946> <8fc1> +<4947> <8fc6> +<4948> +<4949> <8fca> +<494a> <8fcd> +<494b> <8fd3> +<494c> <8fd5> +<494d> <8ff1> +<494e> <8ff5> +<494f> <8ffb> +<4950> <900c> +<4951> <9037> +<4952> +<4953> <9043> +<4954> <905d> +<4957> <9085> +<4958> <908c> +<4959> <9090> +<495a> <90a1> +<495b> <48b5> +<495c> <90b0> +<495d> <90b6> +<495e> <90c3> +<495f> <90c8> +<4960> +<4961> <90dc> +<4962> <90df> +<4963> +<4964> <90f6> +<4965> <90f2> +<4966> <9100> +<4967> <90eb> +<496a> <9104> +<496b> <9106> +<496c> <9118> +<496d> <911e> +<496e> <9137> +<496f> <9139> +<4972> <9157> +<4973> <9159> +<4974> <9174> +<4975> <9179> +<4976> <9185> +<4977> <91b3> +<4978> <91b6> +<497b> +<497c> +<497d> <91ec> +<497e> <9201> +<4981> +<4982> <9242> +<4983> <924a> +<4984> <9256> +<4985> <9261> +<4986> <9265> +<4987> <9268> +<4988> +endbfchar + +100 beginbfchar +<498b> <927f> +<498c> <9289> +<498d> <928d> +<498e> <9297> +<498f> <9299> +<4990> <929f> +<4991> <92ab> +<4994> <92b2> +<4997> <92c6> +<4998> <92ce> +<4999> <92e5> +<499a> <9311> +<499b> +<499c> +<499d> <92f7> +<499e> <9329> +<499f> +<49a0> +<49a1> <9351> +<49a2> <935a> +<49a3> <936b> +<49a4> <9371> +<49a5> <9373> +<49a6> <93a1> +<49a7> +<49a8> +<49a9> <9388> +<49aa> <938b> +<49ab> <938f> +<49ac> <939e> +<49ad> <93f5> +<49ae> +<49af> +<49b0> <93f1> +<49b1> <93c7> +<49b2> <93dc> +<49b3> <93e7> +<49b4> <9409> +<49b7> <93fb> +<49b8> <9432> +<49b9> <943b> +<49ba> +<49bb> +<49bc> <946d> +<49bd> <946f> +<49be> <9579> +<49bf> <9586> +<49c2> +<49c3> +<49c4> <95c8> +<49c5> +<49c6> +<49c7> <962c> +<49ca> +<49cb> <963c> +<49cc> <9661> +<49cd> +<49ce> <9682> +<49cf> +<49d0> <969a> +<49d1> +<49d2> <49e7> +<49d3> <96b3> +<49d4> <96ba> +<49d5> <96bd> +<49d6> <49fa> +<49d7> +<49d8> <96d8> +<49d9> <96da> +<49da> <96dd> +<49db> <4a04> +<49dc> <9714> +<49dd> <9723> +<49de> <4a29> +<49df> <9736> +<49e0> <9741> +<49e1> <9747> +<49e2> <9757> +<49e3> <975b> +<49e4> <976a> +<49e5> +<49e6> +<49e7> <9796> +<49e8> <979e> +<49eb> <97be> +<49ec> <97cc> +<49ed> <97d1> +<49ee> <97d4> +<49ef> <97d8> +<49f0> <97e1> +<49f1> <97f1> +<49f2> <9804> +<49f3> <980d> +<49f4> <9814> +<49f5> <9816> +<49f6> <4abc> +<49f7> +<49fa> <9825> +<49fb> <9847> +<49fc> <9866> +endbfchar + +100 beginbfchar +<49fd> <98ab> +<49fe> <98ad> +<49ff> <98b0> +<4a00> +<4a01> <98b7> +<4a04> <98c2> +<4a05> <98c7> +<4a06> <98cb> +<4a07> <98e1> +<4a08> <98e3> +<4a09> <98ea> +<4a0c> <98f3> +<4a0d> <9908> +<4a0e> <4b3b> +<4a0f> +<4a12> +<4a16> +<4a17> <9931> +<4a1b> <9941> +<4a1c> <9946> +<4a1d> <994e> +<4a1e> <9960> +<4a1f> <99a3> +<4a20> <99a6> +<4a21> <99bd> +<4a22> <99bf> +<4a23> <99c3> +<4a24> <99d4> +<4a25> <99d9> +<4a26> <99de> +<4a27> +<4a28> <99f0> +<4a29> <99f9> +<4a2a> <99fc> +<4a2b> <9a0a> +<4a2c> <9a11> +<4a2d> <9a1a> +<4a2e> <9a20> +<4a2f> <9a31> +<4a30> <9a44> +<4a31> <9a4c> +<4a32> <9a58> +<4a33> <4bc2> +<4a34> <9aaf> +<4a35> <4bca> +<4a36> <9ab7> +<4a37> <4bd2> +<4a38> <9ab9> +<4a39> +<4a3a> <9ac6> +<4a3b> <9ad0> +<4a3c> <9ad2> +<4a3d> <9ad5> +<4a3e> <9ae0> +<4a3f> <9ae5> +<4a40> <9ae9> +<4a41> <9b0c> +<4a42> <9b10> +<4a43> <9b12> +<4a44> <9b16> +<4a45> <9b1c> +<4a46> <9b2b> +<4a47> <9b3d> +<4a48> <4c20> +<4a49> <9b4b> +<4a4a> <9b63> +<4a4b> <9b65> +<4a50> <9ba6> +<4a51> <9bac> +<4a52> +<4a53> <9bb2> +<4a54> <9bb8> +<4a55> <9bbe> +<4a56> <9bf3> +<4a57> <9bd8> +<4a58> <9bdd> +<4a59> <9bea> +<4a5a> <9bef> +<4a5b> <9bee> +<4a5c> +<4a5d> +<4a5e> +<4a5f> <9c16> +<4a63> <9c1d> +<4a64> <9c22> +<4a65> <9c29> +<4a66> +<4a67> <9c31> +<4a68> <9c37> +<4a69> <9c45> +<4a6a> <9c5c> +<4a6b> +<4a6e> +<4a6f> <9c54> +<4a70> <9c58> +<4a71> <9c5b> +<4a72> <9c5d> +<4a73> <9c5f> +<4a79> <9c72> +<4a7a> <9c75> +endbfchar + +100 beginbfchar +<4a7b> <9c7a> +<4a7c> <9ce6> +<4a7d> <9cf2> +<4a7e> <9d0b> +<4a7f> +<4a80> <9d11> +<4a83> +<4a84> <4cc4> +<4a85> +<4a86> <9d32> +<4a87> <4cd1> +<4a88> <9d4a> +<4a89> <9d5f> +<4a8a> <9d62> +<4a8b> +<4a8c> +<4a8d> <9d73> +<4a90> <9d84> +<4a91> <9d99> +<4a92> <9da1> +<4a93> <9dbf> +<4a94> <9db5> +<4a95> <9db9> +<4a96> <9dbd> +<4a97> <9dc9> +<4a98> <9dda> +<4a99> <9de0> +<4a9a> <9de3> +<4a9b> <4d07> +<4a9c> <9e0a> +<4a9d> <9e02> +<4a9e> <9e0d> +<4a9f> <9e1c> +<4aa0> <9e7b> +<4aa1> +<4aa2> <9e80> +<4aa3> <9e85> +<4aa4> <9e9b> +<4aa5> +<4aa6> <9ebd> +<4aa7> +<4aa8> <9edf> +<4aa9> <9eff> +<4aaa> <9f02> +<4aab> <4d77> +<4aac> <9f03> +<4aad> <9f3a> +<4aae> <9f3d> +<4aaf> <9f46> +<4ab0> <9f53> +<4ab1> <9f55> +<4ab2> <9f58> +<4ab3> +<4ab4> <9f5d> +<4ab5> +<4ab6> <9f69> +<4ab7> <9f6d> +<4ab8> <9f70> +<4ab9> +<4aba> <2eac> +<4abb> <3614> +<4abc> <38ad> +<4abd> <3dcc> +<4abe> <3fdc> +<4abf> <45be> +<4ac0> <4610> +<4ac1> <4b7e> +<4ac2> <4c38> +<4ac3> <4ce1> +<4ac4> <4e0c> +<4ac7> <4e79> +<4ac8> <4ef3> +<4ac9> <4f0c> +<4aca> <4f19> +<4acb> <4f2b> +<4acc> <4f2e> +<4acd> <4f31> +<4ace> <4f84> +<4acf> <4f9e> +<4ad0> <4fb7> +<4ad1> <5004> +<4ad2> <500c> +<4ad3> <504c> +<4ad4> <505f> +<4ad5> <5062> +<4ad6> <5077> +<4ad7> <508e> +<4ad8> <509e> +<4ad9> <50a2> +<4ada> <50c3> +<4adb> <50e8> +<4adc> <50f1> +<4add> <50fe> +<4ade> <5107> +<4ae2> <5133> +<4ae3> <5138> +<4ae4> <5174> +<4ae5> <5184> +<4ae6> <51b8> +<4ae7> <51ba> +endbfchar + +100 beginbfchar +<4ae8> <51c8> +<4ae9> <51cf> +<4aea> <51d1> +<4aed> <51d8> +<4aee> <51df> +<4aef> <5205> +<4af0> <5226> +<4af1> <5228> +<4af2> <522b> +<4af5> <5235> +<4af6> <523c> +<4af7> <525a> +<4af8> <5260> +<4af9> <526e> +<4afc> <528a> +<4afd> <528c> +<4afe> <52e1> +<4aff> <52e9> +<4b00> <52f1> +<4b01> <5303> +<4b02> <5311> +<4b03> <531f> +<4b04> <532d> +<4b05> <5332> +<4b06> <533d> +<4b07> <5365> +<4b08> <536d> +<4b09> <5379> +<4b0a> <537e> +<4b0b> <5394> +<4b0c> <5399> +<4b0d> <53aa> +<4b0e> <53af> +<4b0f> <53ba> +<4b10> <53c1> +<4b13> <53e0> +<4b14> <5413> +<4b15> <542a> +<4b16> <5431> +<4b19> <544c> +<4b1a> <54a7> +<4b1b> <54aa> +<4b1c> <54b1> +<4b1d> <54bb> +<4b1e> <54ce> +<4b1f> <54ea> +<4b20> <54fc> +<4b21> <5505> +<4b22> <5508> +<4b23> <5515> +<4b24> <5527> +<4b25> <552a> +<4b26> <5536> +<4b27> <5551> +<4b28> <5566> +<4b29> <558f> +<4b2a> <5592> +<4b2b> <5594> +<4b2c> <55a4> +<4b2d> <55b2> +<4b2e> <55c3> +<4b2f> <55c6> +<4b30> <55d3> +<4b31> <55db> +<4b32> <55ec> +<4b33> <55ee> +<4b34> <55f1> +<4b35> <55f6> +<4b36> <55f8> +<4b37> <5605> +<4b38> <560d> +<4b3b> <562c> +<4b3c> <5635> +<4b3d> <5639> +<4b3e> <564d> +<4b3f> <5654> +<4b40> <5685> +<4b41> <569f> +<4b42> <56a6> +<4b43> <56b7> +<4b44> <56cc> +<4b45> <56cf> +<4b46> <56d9> +<4b47> <56e1> +<4b48> <56eb> +<4b49> <56ed> +<4b4a> <56f1> +<4b4b> <5707> +<4b4c> <570c> +<4b4f> <571d> +<4b50> <572c> +<4b51> <572e> +<4b54> <575f> +<4b55> <576b> +<4b56> <576d> +<4b57> <577a> +<4b58> <5783> +<4b59> <5797> +<4b5a> <57ae> +<4b5b> <57d5> +endbfchar + +100 beginbfchar +<4b5c> <57e7> +<4b5d> <580d> +<4b5e> <5826> +<4b5f> <584d> +<4b60> <584f> +<4b61> <585f> +<4b62> <586d> +<4b63> <587f> +<4b64> <5881> +<4b65> <5898> +<4b66> <58bc> +<4b67> <591f> +<4b68> <5923> +<4b69> <5959> +<4b6a> <5979> +<4b6b> <5997> +<4b6c> <59af> +<4b6d> <59b3> +<4b6e> <59df> +<4b6f> <59f1> +<4b70> <59f8> +<4b71> <5ab2> +<4b72> <5ab8> +<4b73> <5aea> +<4b74> <5af6> +<4b75> <5b1b> +<4b76> <5b1d> +<4b77> <5b21> +<4b78> <5b38> +<4b79> <5bb7> +<4b7a> <5bd7> +<4b7b> <5be0> +<4b7c> <5c1f> +<4b7d> <5c2a> +<4b7e> <5c2c> +<4b7f> <5c36> +<4b80> <5c59> +<4b81> <5c5c> +<4b82> <5c6d> +<4b83> <5cdd> +<4b84> <5d01> +<4b85> <5d34> +<4b86> <5d3d> +<4b87> <5d59> +<4b88> <5d7e> +<4b89> <5d83> +<4b8a> <5dc7> +<4b8b> <5df9> +<4b8c> <5e28> +<4b8d> <5e32> +<4b8e> <5e35> +<4b8f> <5e5b> +<4b90> <5e68> +<4b91> <5e6a> +<4b92> <5e77> +<4b93> <5e80> +<4b94> <5e8b> +<4b95> <5eb3> +<4b96> <5ebd> +<4b97> <5ed1> +<4b9a> <5f4d> +<4b9b> <5fac> +<4b9c> <5fea> +<4b9d> <6007> +<4b9e> <6049> +<4b9f> <6054> +<4ba0> <6067> +<4ba1> <60bb> +<4ba2> <60c4> +<4ba3> <60fd> +<4ba4> <610a> +<4ba5> <6116> +<4ba6> <612a> +<4ba7> <6136> +<4ba8> <615e> +<4ba9> <6164> +<4baa> <617b> +<4bab> <617d> +<4bac> <617f> +<4bad> <619d> +<4bae> <61b8> +<4baf> <61dc> +<4bb0> <61e2> +<4bb1> <61e5> +<4bb2> <61e8> +<4bb3> <6204> +<4bb4> <6207> +<4bb5> <6231> +<4bb6> <6239> +<4bb7> <623d> +<4bb8> <627a> +<4bb9> <6290> +<4bba> <62a8> +<4bbb> <62da> +<4bbc> <62f4> +<4bbd> <6316> +<4bbe> <632a> +<4bbf> <6336> +<4bc0> <6346> +<4bc1> <634b> +endbfchar + +100 beginbfchar +<4bc2> <6353> +<4bc3> <6371> +<4bc4> <6375> +<4bc5> <637f> +<4bc6> <6382> +<4bc7> <638a> +<4bca> <63ea> +<4bcd> <6412> +<4bce> <6418> +<4bcf> <6420> +<4bd0> <6424> +<4bd1> <642a> +<4bd2> <6435> +<4bd3> <643d> +<4bd4> <643f> +<4bd5> <6452> +<4bd6> <645f> +<4bd7> <6474> +<4bd8> <6490> +<4bdb> <64ac> +<4bdc> <64b3> +<4bdd> <64ed> +<4bde> <64f0> +<4bdf> <651b> +<4be0> <651f> +<4be1> <652e> +<4be2> <6549> +<4be3> <6560> +<4be4> <6592> +<4be5> <6595> +<4be6> <65b4> +<4be7> <65be> +<4be8> <65c8> +<4be9> <65ce> +<4bea> <65d0> +<4beb> <65df> +<4bec> <667e> +<4bef> <66b3> +<4bf0> <66c0> +<4bf1> <66cf> +<4bf2> <6725> +<4bf3> <6735> +<4bf4> <6755> +<4bf5> <6780> +<4bf6> <678f> +<4bf7> <6791> +<4bf8> <67a4> +<4bf9> <67b1> +<4bfa> <67b5> +<4bfb> <67be> +<4bfc> <6828> +<4bfd> <6886> +<4bfe> <68eb> +<4bff> <68f5> +<4c00> <6917> +<4c01> <6933> +<4c02> <6938> +<4c03> <695b> +<4c04> <6965> +<4c05> <69a8> +<4c06> <69ab> +<4c07> <69af> +<4c08> <69e5> +<4c09> <69f1> +<4c0a> <6a4a> +<4c0b> <6a55> +<4c0c> <6a67> +<4c0d> <6a71> +<4c0e> <6aaf> +<4c11> <6b03> +<4c12> <6b3b> +<4c13> <6b3f> +<4c16> <6bb0> +<4c17> <6bf7> +<4c18> <6bf9> +<4c19> <6c04> +<4c1a> <6c09> +<4c1b> <6c0d> +<4c1c> <6c2c> +<4c1d> <6c4a> +<4c1e> <6c52> +<4c1f> <6c54> +<4c20> <6c79> +<4c21> <6cac> +<4c22> <6cb4> +<4c23> <6cd2> +<4c24> <6d61> +<4c25> <6d7c> +<4c26> <6db9> +<4c27> <6df0> +<4c28> <6e45> +<4c29> <6e73> +<4c2a> <6e7b> +<4c2b> <6e7d> +<4c2c> <6e89> +<4c2d> <6ebc> +<4c30> <6f26> +<4c31> <6f29> +<4c32> <6f30> +<4c33> <6f87> +endbfchar + +100 beginbfchar +<4c34> <6f9d> +<4c35> <6fae> +<4c36> <6fb7> +<4c37> <700d> +<4c38> <7020> +<4c39> <7049> +<4c3a> <7098> +<4c3b> <70b0> +<4c3e> <7145> +<4c3f> <71b2> +<4c40> <71f4> +<4c41> <7217> +<4c42> <721f> +<4c43> <7243> +<4c46> <725a> +<4c47> <7260> +<4c48> <7268> +<4c49> <7277> +<4c4a> <7284> +<4c4b> <72c9> +<4c4c> <72e5> +<4c4d> <72f4> +<4c4e> <7302> +<4c4f> <730b> +<4c50> <731e> +<4c51> <7322> +<4c54> <734d> +<4c55> <7358> +<4c56> <7367> +<4c57> <7472> +<4c58> <74af> +<4c59> <74df> +<4c5a> <74e4> +<4c5b> <74f4> +<4c5c> <74fb> +<4c5d> <7516> +<4c5e> <7521> +<4c5f> <753f> +<4c60> <755e> +<4c61> <7599> +<4c62> <75a4> +<4c63> <75c1> +<4c64> <75c4> +<4c65> <75cc> +<4c66> <75d7> +<4c67> <75dc> +<4c68> <75e1> +<4c69> <75ef> +<4c6a> <7604> +<4c6b> <760c> +<4c6c> <761d> +<4c6d> <7632> +<4c6e> <7638> +<4c6f> <7645> +<4c70> <764a> +<4c71> <765f> +<4c72> <76ad> +<4c73> <76bd> +<4c74> <76d9> +<4c75> <76eb> +<4c76> <76f0> +<4c77> <76f9> +<4c78> <7700> +<4c79> <770e> +<4c7a> <7722> +<4c7b> <7728> +<4c7c> <772f> +<4c7d> <7739> +<4c7e> <773e> +<4c7f> <7745> +<4c80> <774a> +<4c81> <774f> +<4c82> <775e> +<4c83> <7764> +<4c84> <7767> +<4c85> <776c> +<4c86> <7784> +<4c89> <7796> +<4c8a> <77a7> +<4c8b> <77af> +<4c8c> <77b7> +<4c8d> <77be> +<4c8e> <77c9> +<4c8f> <77d1> +<4c90> <77d9> +<4c91> <77f1> +<4c92> <7837> +<4c93> <785c> +<4c94> <787e> +<4c95> <7898> +<4c96> <78a1> +<4c97> <78b1> +<4c98> <78b3> +<4c99> <78c9> +<4c9a> <78d3> +<4c9b> <790c> +<4c9c> <791f> +<4c9f> <793f> +<4ca0> <7942> +<4ca1> <7954> +endbfchar + +100 beginbfchar +<4ca2> <796b> +<4ca3> <797c> +<4ca4> <79ab> +<4ca5> <79c4> +<4ca6> <79ea> +<4ca7> <7a02> +<4ca8> <7a0c> +<4ca9> <7a30> +<4caa> <7a3a> +<4cab> <7a44> +<4cac> <7a80> +<4cad> <7a86> +<4cae> <7a94> +<4caf> <7ab5> +<4cb0> <7abd> +<4cb1> <7afe> +<4cb2> <7b2b> +<4cb3> <7b77> +<4cb4> <7ba0> +<4cb5> <7bac> +<4cb6> <7bb0> +<4cb7> <7be8> +<4cb8> <7bf2> +<4cb9> <7bf8> +<4cba> <7bfc> +<4cbb> <7bfe> +<4cbc> <7c09> +<4cbd> <7c28> +<4cbe> <7c2f> +<4cbf> <7c42> +<4cc5> <7c72> +<4cc6> <7c7d> +<4cc7> <7c87> +<4cc8> <7c9e> +<4cc9> <7cba> +<4cca> <7cc7> +<4ccb> <7cd3> +<4ccc> <7cda> +<4ccd> <7d3c> +<4cce> <7d4d> +<4ccf> <7d82> +<4cd0> <7d85> +<4cd1> <7d8d> +<4cd2> <7d91> +<4cd3> <7d9e> +<4cd4> <7db3> +<4cd5> <7db9> +<4cd6> <7dd0> +<4cd7> <7de5> +<4cda> <7e2f> +<4cdb> <7e36> +<4cdc> <7e44> +<4cdd> <7e6f> +<4cde> <7e78> +<4cdf> <7e81> +<4ce0> <7f3d> +<4ce1> <7f5b> +<4ce2> <7f5d> +<4ce3> <7f65> +<4ce4> <7f71> +<4ce7> <7f8b> +<4ce8> <7fa2> +<4cec> <8007> +<4ced> <800d> +<4cee> <801e> +<4cef> <8039> +<4cf0> <8088> +<4cf1> <808e> +<4cf2> <80cf> +<4cf3> <80d4> +<4cf4> <80ed> +<4cf5> <80f0> +<4cf6> <80f7> +<4cf7> <80fa> +<4cf8> <80fe> +<4cf9> <8103> +<4cfa> <8117> +<4cfb> <8130> +<4cfc> <8157> +<4cfd> <816f> +<4cfe> <8173> +<4cff> <818b> +<4d00> <8190> +<4d01> <819b> +<4d02> <819e> +<4d03> <81cb> +<4d04> <81d5> +<4d07> <81e1> +<4d08> <81ef> +<4d09> <81f6> +<4d0a> <8200> +<4d0b> <820b> +<4d0e> <821a> +<4d0f> <823a> +<4d10> <8244> +<4d11> <826d> +<4d12> <8284> +<4d13> <8289> +<4d14> <8291> +<4d15> <82aa> +endbfchar + +100 beginbfchar +<4d16> <82b0> +<4d17> <82d0> +<4d18> <82ea> +<4d19> <82ef> +<4d1a> <82f6> +<4d1b> <8356> +<4d1c> <8378> +<4d1d> <83f8> +<4d1e> <83fc> +<4d1f> <8458> +<4d20> <8493> +<4d21> <84b1> +<4d22> <84bd> +<4d23> <84fb> +<4d24> <8546> +<4d25> <8556> +<4d26> <855d> +<4d27> <8585> +<4d28> <8598> +<4d29> <8642> +<4d2a> <8646> +<4d2b> <86c0> +<4d2c> <8714> +<4d2d> <8722> +<4d2e> <872e> +<4d2f> <8739> +<4d30> <875d> +<4d31> <877b> +<4d32> <878c> +<4d33> <878e> +<4d36> <879e> +<4d37> <87a3> +<4d38> <87ae> +<4d39> <87bf> +<4d3a> <87c9> +<4d3b> <87da> +<4d3c> <8818> +<4d3d> <881b> +<4d3e> <882d> +<4d3f> <883a> +<4d40> <8845> +<4d41> <884b> +<4d42> <884e> +<4d43> <8855> +<4d44> <885a> +<4d45> <886e> +<4d49> <88cd> +<4d4a> <88e0> +<4d4b> <88ef> +<4d4e> <8926> +<4d4f> <8935> +<4d50> <895a> +<4d51> <895c> +<4d52> <896b> +<4d53> <8970> +<4d54> <897c> +<4d55> <89a5> +<4d56> <89b5> +<4d57> <89bc> +<4d58> <89d5> +<4d59> <8a49> +<4d5a> <8a57> +<4d5b> <8a67> +<4d5c> <8a7e> +<4d5d> <8a86> +<4d5e> <8a96> +<4d5f> <8ab6> +<4d60> <8ac9> +<4d61> <8ad1> +<4d62> <8add> +<4d63> <8aec> +<4d64> <8af5> +<4d65> <8b06> +<4d66> <8b0f> +<4d67> <8b11> +<4d68> <8b45> +<4d69> <8b52> +<4d6a> <8b6d> +<4d6b> <8b78> +<4d6c> <8b7c> +<4d6d> <8b7e> +<4d6e> <8b85> +<4d6f> <8b9f> +<4d70> <8c4b> +<4d71> <8c53> +<4d72> <8c7b> +<4d73> <8cba> +<4d74> <8cc5> +<4d75> <8cc9> +<4d76> <8cd2> +<4d77> <8cec> +<4d78> <8cf5> +<4d79> <8cf7> +<4d7a> <8d01> +<4d7b> <8d03> +<4d7c> <8d17> +<4d7d> <8d1c> +<4d7e> <8d6e> +<4d7f> <8d91> +<4d80> <8d9f> +endbfchar + +100 beginbfchar +<4d81> <8dab> +<4d82> <8db2> +<4d83> <8dd5> +<4d84> <8de7> +<4d87> <8df4> +<4d88> <8e01> +<4d89> <8e0b> +<4d8a> <8e26> +<4d8b> <8e31> +<4d8e> <8e4d> +<4d8f> <8e4f> +<4d90> <8e5c> +<4d91> <8e61> +<4d92> <8e69> +<4d93> <8e71> +<4d94> <8e75> +<4d95> <8e77> +<4d96> <8e89> +<4d97> <8e90> +<4d98> <8e95> +<4d99> <8e9a> +<4d9a> <8ea7> +<4d9b> <8ea9> +<4d9c> <8ead> +<4d9d> <8ee8> +<4d9e> <8ef0> +<4d9f> <8f07> +<4da0> <8f18> +<4da1> <8f25> +<4da2> <8f27> +<4da3> <8f2c> +<4da4> <8f35> +<4da5> <8f3a> +<4da6> <8f43> +<4da7> <8f47> +<4da8> <8f51> +<4da9> <8f55> +<4dad> <8fa5> +<4dae> <9004> +<4daf> <901b> +<4db0> <902f> +<4db1> <904c> +<4db2> <905b> +<4db3> <9070> +<4db4> <9074> +<4db5> <9079> +<4db6> <908b> +<4db7> <9098> +<4db8> <90a0> +<4db9> <90b2> +<4dba> <90bd> +<4dbb> <90c9> +<4dbc> <90f0> +<4dbd> <9105> +<4dbe> <9125> +<4dbf> <915a> +<4dc0> <9167> +<4dc1> <917a> +<4dc2> <918a> +<4dc3> <9191> +<4dc4> <9195> +<4dc5> <91b0> +<4dc6> <91bb> +<4dc7> <91bd> +<4dc8> <91c2> +<4dc9> <91c5> +<4dca> <9200> +<4dcb> <9209> +<4dcc> <9223> +<4dcd> <9276> +<4dce> <928e> +<4dcf> <92af> +<4dd2> <92c1> +<4dd3> <92c3> +<4dd4> <92c5> +<4dd5> <92c8> +<4dd6> <9314> +<4dd7> <9333> +<4dd8> <9336> +<4dd9> <9358> +<4dda> <937f> +<4ddb> <9382> +<4ddc> <938a> +<4ddd> <93bb> +<4dde> <93cc> +<4ddf> <93e6> +<4de0> <93f9> +<4de1> <9402> +<4de4> <942e> +<4de5> <944c> +<4de6> <9588> +<4de7> <95a1> +<4de8> <95bf> +<4de9> <95c6> +<4dea> <95c9> +<4ded> <95e0> +<4dee> <95e4> +<4def> <95e6> +<4df0> <9624> +<4df1> <9631> +endbfchar + +100 beginbfchar +<4df2> <9638> +<4df3> <963d> +<4df4> <9654> +<4df5> <9674> +<4df6> <967b> +<4df7> <967f> +<4df8> <9681> +<4df9> <9683> +<4dfa> <9689> +<4dfb> <9696> +<4dfc> <96ae> +<4dfd> <9703> +<4dfe> <971b> +<4dff> <9721> +<4e00> <9722> +<4e01> <9728> +<4e02> <9731> +<4e03> <9767> +<4e04> <9776> +<4e05> <977d> +<4e06> <977f> +<4e07> <9799> +<4e08> <979f> +<4e09> <97ac> +<4e0a> <97b9> +<4e0b> <97cd> +<4e0c> <97e0> +<4e0d> <97ef> +<4e0e> <9807> +<4e0f> <9826> +<4e10> <982e> +<4e13> <98b4> +<4e14> <98c5> +<4e15> <9902> +<4e16> <9911> +<4e17> <9915> +<4e18> <9935> +<4e19> <9948> +<4e1a> <9954> +<4e1b> <995e> +<4e1c> <99e1> +<4e1d> <9a0c> +<4e1e> <9a10> +<4e1f> <9a23> +<4e20> <9a41> +<4e21> <9a51> +<4e24> <9b01> +<4e25> <9b09> +<4e26> <9b0b> +<4e29> <9b19> +<4e2a> <9b35> +<4e2b> <9b48> +<4e2c> <9b55> +<4e2d> <9b68> +<4e2e> <9b80> +<4e2f> <9b86> +<4e30> <9b90> +<4e31> <9b9d> +<4e32> <9bb0> +<4e33> <9bbf> +<4e34> <9bc8> +<4e35> <9bff> +<4e36> <9c02> +<4e37> <9c1c> +<4e38> <9c35> +<4e39> <9c44> +<4e3a> <9c56> +<4e3b> <9c61> +<4e3c> <9c68> +<4e3d> <9d30> +<4e3e> <9d3d> +<4e3f> <9d6a> +<4e40> <9d7b> +<4e41> <9de5> +<4e42> <9de9> +<4e43> <9df3> +<4e44> <9e7a> +<4e48> <9eb0> +<4e49> <9ee4> +<4e4a> <9ef0> +<4e4b> <9ef2> +<4e4c> <9f09> +<4e4d> <9f0f> +<4e4e> <9f14> +<4e4f> <9f1b> +<4e50> <9f22> +<4e51> <9f26> +<4e54> <9f34> +<4e55> <9f5a> +<4e56> <9f6f> +<4e57> <9f9e> +<4e58> <9fa5> +<4e59> +<4e5a> +<4e5b> +<4e5c> +<4e5d> +<4e5e> +<4e5f> +<4e60> +endbfchar + +100 beginbfchar +<4e61> +<4e62> +<4e63> <35de> +<4e64> +<4e65> +<4e66> +<4e67> +<4e68> +<4e69> <4e0e> +<4e6a> <4e26> +<4e6b> +<4e6c> <4f73> +<4e6d> <5056> +<4e6e> <50ed> +<4e6f> <516b> +<4e70> +<4e71> <51de> +<4e72> <51fd> +<4e73> +<4e74> <5264> +<4e77> <533f> +<4e78> <5354> +<4e79> <5440> +<4e7a> +<4e7b> <559c> +<4e7c> <55ab> +<4e7d> <5609> +<4e7e> <56ae> +<4e7f> <56ae> +<4e80> <56c0> +<4e81> <56c3> +<4e82> <56ce> +<4e83> <56ee> +<4e84> <57d6> +<4e85> <583d> +<4e86> <5859> +<4e87> <594f> +<4e88> <5951> +<4e89> <5960> +<4e8a> <5962> +<4e8b> <5ada> +<4e8c> <5b5a> +<4e8d> <5b73> +<4e8e> <5b7c> +<4e8f> <5bb3> +<4e90> +<4e91> <5e43> +<4e92> <5ea7> +<4e93> <5ee3> +<4e94> <5f38> +<4e95> <5fa1> +<4e96> <5fdd> +<4e97> <6162> +<4e98> <61b2> +<4e99> <61f8> +<4e9a> <39a4> +<4e9b> <39b8> +<4e9c> +<4e9d> <64a5> +<4e9e> <64f6> +<4e9f> <3a5c> +<4ea2> +<4ea3> <6587> +<4ea4> <6589> +<4ea5> +<4ea6> <658e> +<4ea7> <3ac4> +<4ea8> <3acb> +<4ea9> <65e1> +<4eaa> <6667> +<4eab> <666e> +<4eac> <66c1> +<4ead> <66dc> +<4eae> <3a85> +<4eaf> <6700> +<4eb0> <6761> +<4eb1> <67c4> +<4eb2> <6802> +<4eb3> <693d> +<4eb4> <695e> +<4eb5> <6a05> +<4eb6> <6a9c> +<4eb7> <3bf3> +<4eb8> <6af8> +<4eb9> <6bb1> +<4eba> <6c38> +<4ebb> <6caa> +<4ebc> <6dbc> +<4ebd> <6de4> +<4ebe> <3d31> +<4ebf> <6e08> +<4ec0> <6e72> +<4ec1> <6ecb> +<4ec2> <6ed5> +<4ec3> <6edb> +<4ec4> <6f5b> +<4ec5> <6f5b> +<4ec6> <6f64> +<4ec7> <6f74> +<4ec8> +endbfchar + +100 beginbfchar +<4ec9> <723e> +<4eca> <3e40> +<4ecb> <38a1> +<4ecc> <73ca> +<4ecd> <74bd> +<4ece> <755d> +<4ecf> <75bc> +<4ed0> <75d9> +<4ed1> <7608> +<4ed2> <7664> +<4ed3> <7669> +<4ed4> <76c8> +<4ed5> <7737> +<4ed6> <777e> +<4ed7> <79a7> +<4ed8> <79b1> +<4ed9> <7abe> +<4eda> <7be0> +<4edb> <7c50> +<4edc> <7d09> +<4edd> <7db2> +<4ede> <7db2> +<4edf> <7f3e> +<4ee0> <7fe1> +<4ee1> <8012> +<4ee2> <8077> +<4ee3> <80d6> +<4ee4> <8109> +<4ee5> <8129> +<4ee6> <820c> +<4ee7> <821b> +<4ee8> <8240> +<4ee9> <83df> +<4eea> <83d4> +<4eeb> <840f> +<4eec> <8449> +<4eed> <84ea> +<4eee> +<4eef> <8551> +<4ef0> <8563> +<4ef1> <85cf> +<4ef2> <864e> +<4ef3> <8662> +<4ef4> <868a> +<4ef5> <8842> +<4ef6> <8877> +<4ef7> <8941> +<4ef8> <8b56> +<4ef9> <8b56> +<4efa> <8b5c> +<4efb> <471f> +<4efc> +<4efd> <8c6a> +<4efe> <8c79> +<4eff> <8cca> +<4f00> <8d67> +<4f01> <481e> +<4f02> <8f03> +<4f03> <8f44> +<4f04> <8fc5> +<4f05> <8fd4> +<4f06> <8ff6> +<4f07> <9077> +<4f08> <9077> +<4f0b> <90a8> +<4f0c> <914d> +<4f0d> <92e9> +<4f0e> <9335> +<4f0f> <938b> +<4f10> <943a> +<4f11> <95cd> +<4f12> <962a> +<4f13> <9698> +<4f14> <96a7> +<4f15> <97ff> +<4f16> <97ff> +<4f17> <990a> +<4f18> <9921> +<4f19> <9957> +<4f1a> <9ba8> +<4f1b> <9bae> +<4f1c> <9bb9> +<4f1d> <9c08> +<4f1e> <9c24> +<4f1f> <9c3b> +<4f20> <9c75> +<4f21> <9ce6> +<4f22> <9dc0> +<4f23> <9dc2> +<4f24> <9e78> +<4f25> <98ef> +<4f26> +<4f27> <7b08> +<4f28> <646f> +<4f29> <7c3e> +<4f2a> <7b75> +<4f2b> <7515> +<4f2c> <8a1d> +<4f2d> <6062> +<4f2e> <7078> +endbfchar + +100 beginbfchar +<4f2f> <5ed0> +<4f30> <7c82> +<4f31> <9699> +<4f32> <8654> +<4f33> <8171> +<4f34> <9375> +<4f35> <54ac> +<4f36> <72e1> +<4f37> <6897> +<4f38> <9bab> +<4f39> <53c9> +<4f3a> <6756> +<4f3b> <7526> +<4f3c> <7511> +<4f3d> <7ac8> +<4f3e> <633a> +<4f3f> <9041> +<4f40> <99c1> +<4f41> <65a7> +<4f42> <91e1> +<4f43> <97ad> +<4f44> <8292> +<4f45> <7c7e> +<4f46> <723a> +<4f47> <8805> +<4f48> <8703> +<4f49> <9b1d> +<4f4a> <9b2c> +<4f4b> <5002> +<4f4c> <51de> +<4f4d> <5307> +<4f4e> <5bec> +<4f4f> +<4f50> <661e> +<4f51> +<4f52> <704a> +<4f53> +<4f54> <5561> +<4f55> <6c3a> +<4f56> <7a60> +<4f57> +<4f58> <8803> +<4f59> <95ab> +<4f5a> <9755> +<4f5b> +<4f5c> +<4f5f> <00ba> +<4f60> <00aa> +<4f61> <2116> +<4f62> <0110> +<4f63> <0126> +<4f64> <0132> +<4f65> <013f> +<4f66> <014a> +<4f67> <0166> +<4f68> <0133> +<4f69> <0138> +<4f6a> <0140> +<4f6b> <0149> +<4f6c> <0167> +<4f6d> <010a> +<4f6e> <0116> +<4f6f> <011e> +<4f70> <0122> +<4f71> <0120> +<4f72> <0130> +<4f73> <012e> +<4f74> <0136> +<4f75> <013d> +<4f76> <013b> +<4f77> <0145> +<4f78> <0156> +<4f79> <0172> +<4f7a> <01d7> +<4f7b> <01db> +<4f7c> <01d9> +<4f7d> <01d5> +<4f7e> <0174> +<4f7f> <0176> +<4f80> <010b> +<4f81> <0117> +<4f82> <01f5> +<4f83> <011f> +<4f84> <0121> +<4f85> <012f> +<4f86> <0137> +<4f87> <013e> +<4f88> <013c> +<4f89> <0146> +<4f8a> <0157> +<4f8b> <0173> +<4f8c> <0175> +<4f8d> <0177> +<4f8e> <212e> +<4f8f> <2206> +<4f90> <220f> +<4f93> <25ca> +<4f96> <00ba> +<4f97> <00aa> +<4f98> <2116> +endbfchar + +100 beginbfchar +<4f99> <0110> +<4f9a> <0126> +<4f9b> <0132> +<4f9c> <013f> +<4f9d> <014a> +<4f9e> <0166> +<4f9f> <0133> +<4fa0> <0138> +<4fa1> <0140> +<4fa2> <0149> +<4fa3> <0167> +<4fa4> <010a> +<4fa5> <0116> +<4fa6> <011e> +<4fa7> <0122> +<4fa8> <0120> +<4fa9> <0130> +<4faa> <012e> +<4fab> <0136> +<4fac> <013d> +<4fad> <013b> +<4fae> <0145> +<4faf> <0156> +<4fb0> <0172> +<4fb1> <01d7> +<4fb2> <01db> +<4fb3> <01d9> +<4fb4> <01d5> +<4fb5> <0174> +<4fb6> <0176> +<4fb7> <010b> +<4fb8> <0117> +<4fb9> <01f5> +<4fba> <011f> +<4fbb> <0121> +<4fbc> <012f> +<4fbd> <0137> +<4fbe> <013e> +<4fbf> <013c> +<4fc0> <0146> +<4fc1> <0157> +<4fc2> <0173> +<4fc3> <0175> +<4fc4> <0177> +<4fc5> <212e> +<4fc6> <2206> +<4fc7> <220f> +<4fca> <25ca> +<4fcb> <0386> +<4fcf> <03aa> +<4fd0> <038c> +<4fd1> <038e> +<4fd2> <03ab> +<4fd3> <038f> +<4fd8> <03ca> +<4fd9> <0390> +<4fdc> <03cb> +<4fdd> <03b0> +<4fde> <03ce> +<4ffb> <30d2> +<4ffc> <30d5> +<4ffd> <30d8> +<4ffe> <30db> +<4fff> <30de> +<5004> <30e4> +<5005> <30e6> +<5017> <7d42> +<5018> <0048> +<5019> <0043004c> +<501a> <004b0043004c> +<501b> <00420045004c> +<501c> <00410053> +<501d> <0041004d> +<501e> <6bb5> +<501f> <30b4> +<5020> <30df> +<502a> <0030> +<502b> <003000d7> +<502c> <003100d7> +<502d> <003200d7> +<502e> <003300d7> +<502f> <003400d7> +<5030> <003500d7> +<5031> <003600d7> +<5032> <003700d7> +<5033> <003800d7> +<5034> <003900d7> +<5049> <5e74> +<504a> <004e> +<504b> <5929> +<504c> <518d> +<504d> <65b0> +<504e> <6620> +<504f> <58f0> +<5050> <524d> +<5051> <5f8c> +<5052> <7d42> +<5053> <7acb> +<5054> <4ea4> +<5055> <307b304b> +endbfchar + +100 beginbfchar +<5056> <5287> +<5057> <53f8> +<5058> <89e3> +<5059> <682a> +<505a> <6c17> +<505b> <4e8c> +<505c> <591a> +<505d> <6587> +<505e> <624b> +<505f> <00500056> +<5060> <004d0056> +<5061> <53cc> +<5062> <00530053> +<5063> <00530031> +<5064> <00530032> +<5065> <00530033> +<5066> <30c7> +<5067> <00480056> +<5068> <2014> +<5069> <2014> +<506a> <2014> +<506d> <00300030> +<506e> <00300031> +<506f> <00300032> +<5070> <00300033> +<5071> <00300034> +<5072> <00300035> +<5073> <00300036> +<5074> <00300037> +<5075> <00300038> +<5076> <00300039> +<5077> <00310030> +<5078> <00310031> +<5079> <00310032> +<507a> <00310033> +<507b> <00310034> +<507c> <00310035> +<507d> <00310036> +<507e> <00310037> +<507f> <00310038> +<5080> <00310039> +<5081> <00320030> +<5082> <00320031> +<5083> <00320032> +<5084> <00320033> +<5085> <00320034> +<5086> <00320035> +<5087> <00320036> +<5088> <00320037> +<5089> <00320038> +<508a> <00320039> +<508b> <00330030> +<508c> <00330031> +<508d> <00330032> +<508e> <00330033> +<508f> <00330034> +<5090> <00330035> +<5091> <00330036> +<5092> <00330037> +<5093> <00330038> +<5094> <00330039> +<5095> <00340030> +<5096> <00340031> +<5097> <00340032> +<5098> <00340033> +<5099> <00340034> +<509a> <00340035> +<509b> <00340036> +<509c> <00340037> +<509d> <00340038> +<509e> <00340039> +<509f> <00350030> +<50a0> <00350031> +<50a1> <00350032> +<50a2> <00350033> +<50a3> <00350034> +<50a4> <00350035> +<50a5> <00350036> +<50a6> <00350037> +<50a7> <00350038> +<50a8> <00350039> +<50a9> <002700300030> +<50aa> <002700300031> +<50ab> <002700300032> +<50ac> <002700300033> +<50ad> <002700300034> +<50ae> <002700300035> +<50af> <002700300036> +<50b0> <002700300037> +<50b1> <002700300038> +<50b2> <002700300039> +<50b3> <002700310030> +<50b4> <002700310031> +<50b5> <002700310032> +<50b6> <002700310033> +<50b7> <002700310034> +<50b8> <002700310035> +<50b9> <002700310036> +<50ba> <002700310037> +<50bb> <002700310038> +endbfchar + +100 beginbfchar +<50bc> <002700310039> +<50bd> <002700320030> +<50be> <002700320031> +<50bf> <002700320032> +<50c0> <002700320033> +<50c1> <002700320034> +<50c2> <002700320035> +<50c3> <002700320036> +<50c4> <002700320037> +<50c5> <002700320038> +<50c6> <002700320039> +<50c7> <002700330030> +<50c8> <002700330031> +<50c9> <002700330032> +<50ca> <002700330033> +<50cb> <002700330034> +<50cc> <002700330035> +<50cd> <002700330036> +<50ce> <002700330037> +<50cf> <002700330038> +<50d0> <002700330039> +<50d1> <002700340030> +<50d2> <002700340031> +<50d3> <002700340032> +<50d4> <002700340033> +<50d5> <002700340034> +<50d6> <002700340035> +<50d7> <002700340036> +<50d8> <002700340037> +<50d9> <002700340038> +<50da> <002700340039> +<50db> <002700350030> +<50dc> <002700350031> +<50dd> <002700350032> +<50de> <002700350033> +<50df> <002700350034> +<50e0> <002700350035> +<50e1> <002700350036> +<50e2> <002700350037> +<50e3> <002700350038> +<50e4> <002700350039> +<50e5> <002700360030> +<50e6> <002700360031> +<50e7> <002700360032> +<50e8> <002700360033> +<50e9> <002700360034> +<50ea> <002700360035> +<50eb> <002700360036> +<50ec> <002700360037> +<50ed> <002700360038> +<50ee> <002700360039> +<50ef> <002700370030> +<50f0> <002700370031> +<50f1> <002700370032> +<50f2> <002700370033> +<50f3> <002700370034> +<50f4> <002700370035> +<50f5> <002700370036> +<50f6> <002700370037> +<50f7> <002700370038> +<50f8> <002700370039> +<50f9> <002700380030> +<50fa> <002700380031> +<50fb> <002700380032> +<50fc> <002700380033> +<50fd> <002700380034> +<50fe> <002700380035> +<50ff> <002700380036> +<5100> <002700380037> +<5101> <002700380038> +<5102> <002700380039> +<5103> <002700390030> +<5104> <002700390031> +<5105> <002700390032> +<5106> <002700390033> +<5107> <002700390034> +<5108> <002700390035> +<5109> <002700390036> +<510a> <002700390037> +<510b> <002700390038> +<510c> <002700390039> +<510d> <00300030> +<510e> <00300031> +<510f> <00300032> +<5110> <00300033> +<5111> <00300034> +<5112> <00300035> +<5113> <00300036> +<5114> <00300037> +<5115> <00300038> +<5116> <00300039> +<5117> <00310030> +<5118> <00310031> +<5119> <00310032> +<511a> <00310033> +<511b> <00310034> +<511c> <00310035> +<511d> <00310036> +<511e> <00310037> +<511f> <00310038> +endbfchar + +100 beginbfchar +<5120> <00310039> +<5121> <00320030> +<5122> <00320031> +<5123> <00320032> +<5124> <00320033> +<5125> <00320034> +<5126> <00320035> +<5127> <00320036> +<5128> <00320037> +<5129> <00320038> +<512a> <00320039> +<512b> <00330030> +<512c> <00330031> +<512d> <00330032> +<512e> <00330033> +<512f> <00330034> +<5130> <00330035> +<5131> <00330036> +<5132> <00330037> +<5133> <00330038> +<5134> <00330039> +<5135> <00340030> +<5136> <00340031> +<5137> <00340032> +<5138> <00340033> +<5139> <00340034> +<513a> <00340035> +<513b> <00340036> +<513c> <00340037> +<513d> <00340038> +<513e> <00340039> +<513f> <00350030> +<5140> <00350031> +<5141> <00350032> +<5142> <00350033> +<5143> <00350034> +<5144> <00350035> +<5145> <00350036> +<5146> <00350037> +<5147> <00350038> +<5148> <00350039> +<5149> <00360030> +<514a> <00360031> +<514b> <00360032> +<514c> <00360033> +<514d> <00360034> +<514e> <00360035> +<514f> <00360036> +<5150> <00360037> +<5151> <00360038> +<5152> <00360039> +<5153> <00370030> +<5154> <00370031> +<5155> <00370032> +<5156> <00370033> +<5157> <00370034> +<5158> <00370035> +<5159> <00370036> +<515a> <00370037> +<515b> <00370038> +<515c> <00370039> +<515d> <00380030> +<515e> <00380031> +<515f> <00380032> +<5160> <00380033> +<5161> <00380034> +<5162> <00380035> +<5163> <00380036> +<5164> <00380037> +<5165> <00380038> +<5166> <00380039> +<5167> <00390030> +<5168> <00390031> +<5169> <00390032> +<516a> <00390033> +<516b> <00390034> +<516c> <00390035> +<516d> <00390036> +<516e> <00390037> +<516f> <00390038> +<5170> <00390039> +<5171> <003100300030> +<5172> <003100300031> +<5173> <003100300032> +<5174> <003100300033> +<5175> <003100300034> +<5176> <003100300035> +<5177> <003100300036> +<5178> <003100300037> +<5179> <003100300038> +<517a> <003100300039> +<517b> <003100310030> +<517c> <003100310031> +<517d> <003100310032> +<517e> <003100310033> +<517f> <003100310034> +<5180> <003100310035> +<5181> <003100310036> +<5182> <003100310037> +<5183> <003100310038> +endbfchar + +100 beginbfchar +<5184> <003100310039> +<5185> <003100320030> +<5186> <003100320031> +<5187> <003100320032> +<5188> <003100320033> +<5189> <003100320034> +<518a> <003100320035> +<518b> <003100320036> +<518c> <003100320037> +<518d> <003100320038> +<518e> <003100320039> +<518f> <003100330030> +<5190> <003100330031> +<5191> <003100330032> +<5192> <003100330033> +<5193> <003100330034> +<5194> <003100330035> +<5195> <003100330036> +<5196> <003100330037> +<5197> <003100330038> +<5198> <003100330039> +<5199> <003100340030> +<519a> <003100340031> +<519b> <003100340032> +<519c> <003100340033> +<519d> <003100340034> +<519e> <003100340035> +<519f> <003100340036> +<51a0> <003100340037> +<51a1> <003100340038> +<51a2> <003100340039> +<51a3> <002e0030> +<51a4> <002e0031> +<51a5> <002e0032> +<51a6> <002e0033> +<51a7> <002e0034> +<51a8> <002e0035> +<51a9> <002e0036> +<51aa> <002e0037> +<51ab> <002e0038> +<51ac> <002e0039> +<51ad> <002c0030> +<51ae> <002c0031> +<51af> <002c0032> +<51b0> <002c0033> +<51b1> <002c0034> +<51b2> <002c0035> +<51b3> <002c0036> +<51b4> <002c0037> +<51b5> <002c0038> +<51b6> <002c0039> +<51b7> <007000700062> +<51b8> <00700070006d> +<51b9> <00270053> +<51ba> <00480032> +<51bb> <004f0032> +<51bc> <004f0078> +<51bd> <004e0078> +<51be> <00510032> +<51bf> <004a0072002e> +<51c0> <00440072002e> +<51c1> <30ac30eb> +<51c2> <30b030ec30a4> +<51c3> <30af30ed30fc30ca> +<51c4> <30b730fc30d930eb30c8> +<51c5> <30b730a730b130eb> +<51c6> <30b830e530fc30eb> +<51c7> <30c730b730d930eb> +<51c8> <30c930c330c8> +<51c9> <30d030a430c8> +<51ca> <30d330c330c8> +<51cb> <30d930af30ec30eb> +<51cc> <30dc30fc> +<51cd> <30e930f330c9> +<51ce> <30ea30f330ae30c330c8> +<51cf> <30ac30eb> +<51d0> <30b030ec30a4> +<51d1> <30af30ed30fc30ca> +<51d2> <30b730fc30d930eb30c8> +<51d3> <30b730a730b130eb> +<51d4> <30b830e530fc30eb> +<51d5> <30c730b730d930eb> +<51d6> <30c930c330c8> +<51d7> <30d030a430c8> +<51d8> <30d330c330c8> +<51d9> <30d930af30ec30eb> +<51da> <30dc30fc> +<51db> <30e930f330c9> +<51dc> <30ea30f330ae30c330c8> +<51dd> +<51de> +<51df> <3002300d> +<51e0> <3002300f> +<51e3> <00ba> +<51e4> <00aa> +<51e5> <2116> +<51e6> <0110> +<51e7> <0126> +<51e8> <0132> +<51e9> <013f> +endbfchar + +100 beginbfchar +<51ea> <014a> +<51eb> <0166> +<51ec> <0133> +<51ed> <0138> +<51ee> <0140> +<51ef> <0149> +<51f0> <0167> +<51f1> <010a> +<51f2> <0116> +<51f3> <011e> +<51f4> <0122> +<51f5> <0120> +<51f6> <0130> +<51f7> <012e> +<51f8> <0136> +<51f9> <013d> +<51fa> <013b> +<51fb> <0145> +<51fc> <0156> +<51fd> <0172> +<51fe> <01d7> +<51ff> <01db> +<5200> <01d9> +<5201> <01d5> +<5202> <0174> +<5203> <0176> +<5204> <010b> +<5205> <0117> +<5206> <01f5> +<5207> <011f> +<5208> <0121> +<5209> <012f> +<520a> <0137> +<520b> <013e> +<520c> <013c> +<520d> <0146> +<520e> <0157> +<520f> <0173> +<5210> <0175> +<5211> <0177> +<5212> <212e> +<5213> <2206> +<5214> <220f> +<5217> <25ca> +<521a> <00ba> +<521b> <00aa> +<521c> <2116> +<521d> <0110> +<521e> <0126> +<521f> <0132> +<5220> <013f> +<5221> <014a> +<5222> <0166> +<5223> <0133> +<5224> <0138> +<5225> <0140> +<5226> <0149> +<5227> <0167> +<5228> <010a> +<5229> <0116> +<522a> <011e> +<522b> <0122> +<522c> <0120> +<522d> <0130> +<522e> <012e> +<522f> <0136> +<5230> <013d> +<5231> <013b> +<5232> <0145> +<5233> <0156> +<5234> <0172> +<5235> <01d7> +<5236> <01db> +<5237> <01d9> +<5238> <01d5> +<5239> <0174> +<523a> <0176> +<523b> <010b> +<523c> <0117> +<523d> <01f5> +<523e> <011f> +<523f> <0121> +<5240> <012f> +<5241> <0137> +<5242> <013e> +<5243> <013c> +<5244> <0146> +<5245> <0157> +<5246> <0173> +<5247> <0175> +<5248> <0177> +<5249> <212e> +<524a> <2206> +<524b> <220f> +<524e> <25ca> +<524f> <6ea2> +<5250> +<5251> +<5252> <8b7f> +<5253> <4e35> +endbfchar + +100 beginbfchar +<5254> <4e5c> +<5255> <4e63> +<5256> <4e68> +<5259> <4e97> +<525a> <4eaf> +<525b> <4edb> +<525c> <4ee2> +<525d> <4ee8> +<525e> <4eef> +<525f> <4efe> +<5260> <4f02> +<5261> <4f08> +<5262> <4f12> +<5263> <4f17> +<5264> <4f33> +<5265> <4f35> +<5266> <4f40> +<5267> <4f42> +<526a> <4f52> +<526b> <4f63> +<526c> <4f6e> +<526d> <4f71> +<526e> <4f79> +<526f> <4f81> +<5270> <4f89> +<5271> <4f8c> +<5272> <4f8e> +<5273> <4f90> +<5274> <4f93> +<5275> <4f99> +<5276> <4f9f> +<5277> <4fb9> +<527d> <4fc6> +<527e> <4fc8> +<527f> <4fcc> +<5280> <4fdc> +<5281> <4fe2> +<5282> <4ff0> +<5283> <4ffc> +<5284> <5007> +<5285> <500a> +<5286> <5017> +<5287> <501d> +<5288> <5030> +<528b> <5035> +<528c> <5045> +<528d> <504a> +<5290> <5059> +<5291> <5060> +<5292> <5067> +<5293> <506d> +<5294> <5071> +<5295> <5081> +<5298> <5086> +<5299> <508a> +<529a> <5090> +<529b> <509b> +<52a1> <50b9> +<52a2> <50bd> +<52a3> <50c0> +<52a4> <50d3> +<52a7> <50df> +<52a8> <50e2> +<52a9> <50e4> +<52aa> <50f6> +<52ab> <50fa> +<52ac> <50f2> +<52ad> <5119> +<52b0> <5123> +<52b5> <512f> +<52b6> <5131> +<52b7> <5134> +<52b8> <5139> +<52b9> <5142> +<52ba> <514f> +<52bb> <5153> +<52bc> <5158> +<52bd> <5166> +<52be> <517e> +<52bf> <518e> +<52c0> <51bf> +<52c1> <51c2> +<52c2> <51d2> +<52c3> <51d5> +<52c4> <51e5> +<52c5> <51f2> +<52c6> <51f7> +<52c7> <5218> +<52c8> <5222> +<52c9> <5245> +<52ca> <5258> +<52cb> <525f> +<52cc> <5280> +<52cd> <5285> +<52d1> <529a> +<52d2> <52a5> +<52d3> <52a7> +<52d4> <52b0> +<52d8> <52bd> +<52d9> <52c4> +endbfchar + +100 beginbfchar +<52da> <52c6> +<52db> <52cf> +<52dc> <52d4> +<52dd> <52dc> +<52de> <52e5> +<52df> <52e8> +<52e0> <52ea> +<52e1> <52ec> +<52e2> <52f4> +<52e3> <52f6> +<52e4> <530c> +<52e5> <5313> +<52e6> <5318> +<52e7> <531b> +<52e8> <531e> +<52e9> <5325> +<52ef> <5330> +<52f0> <533c> +<52f1> <5359> +<52f2> <535b> +<52f3> <5365> +<52f4> <5383> +<52f7> <538e> +<52f8> <53a1> +<52f9> <53b5> +<52fa> <53b8> +<52fb> <53bd> +<52fc> <53cf> +<52ff> <53de> +<5300> <53e0> +<5301> <53e7> +<5302> <5402> +<5303> <541a> +<5304> <5421> +<5305> <542f> +<5306> <5444> +<5307> <5447> +<5308> <544f> +<5309> <545e> +<530a> <5464> +<530b> <5467> +<530c> <5469> +<530f> <5481> +<5310> <5483> +<5311> <5485> +<5312> <5489> +<5313> <5491> +<5314> <549f> +<5315> <54ca> +<5316> <54e0> +<5317> <54f6> +<5318> <54fe> +<531b> <5532> +<531c> <553b> +<531d> <553d> +<531e> <5549> +<531f> <554d> +<5320> <5558> +<5323> <557f> +<5324> <5593> +<5325> <5597> +<5326> <55a3> +<5327> <55c1> +<5328> <55cb> +<532b> <55de> +<532c> <55ff> +<532d> <5605> +<532e> <560a> +<532f> <5619> +<5330> <5633> +<5331> <563c> +<5332> <5641> +<5335> <5646> +<5339> <5675> +<533a> <5684> +<533b> <568b> +<533c> <56a7> +<533d> <56ab> +<533e> <56be> +<533f> <56cb> +<5340> <56d0> +<5341> <56dc> +<5347> <5711> +<5348> <5720> +<5349> <5722> +<534c> <572a> +<534d> <573f> +<534e> <5752> +<534f> <5762> +<5350> <5767> +<5351> <576e> +<5352> <5771> +<5353> <5779> +<5354> <577e> +<5355> <5781> +<5356> <5794> +<5357> <5799> +<5358> <579f> +<5359> <57a1> +<535a> <5795> +endbfchar + +100 beginbfchar +<535b> <57a7> +<535c> <57a9> +<535d> <57bd> +<535e> <57dd> +<535f> <57e9> +<5360> <57fe> +<5361> <5803> +<5362> <5808> +<5363> <57e1> +<5364> <580c> +<5365> <581b> +<5366> <581f> +<5367> <582d> +<5368> <583f> +<5369> <5850> +<536a> <5855> +<536b> <5868> +<536c> <5878> +<536f> <588c> +<5370> <5896> +<5374> <58a6> +<5375> <58c4> +<5376> <58c2> +<5377> <58c8> +<5378> <58d6> +<5379> <58dd> +<537a> <58e1> +<537b> <5906> +<537e> <591d> +<537f> <5921> +<5380> <5928> +<5381> <5930> +<5382> <5933> +<5385> <593f> +<5386> <5943> +<5387> <5952> +<5388> <595e> +<5389> <596b> +<538a> <596f> +<538b> <5972> +<538c> <597b> +<538d> <598c> +<538e> <598e> +<538f> <5995> +<5390> <59a7> +<5391> <59ad> +<5392> <59b0> +<5393> <59b7> +<5394> <59c1> +<5395> <59c4> +<5396> <59ef> +<5397> <59f2> +<5398> <59f4> +<5399> <59f7> +<539a> <5a00> +<539b> <5a0e> +<539c> <5a12> +<539d> <5a1e> +<539e> <5a24> +<539f> <5a28> +<53a0> <5a2a> +<53a1> <5a30> +<53a4> <5a48> +<53a5> <5a4c> +<53a6> <5a50> +<53a7> <5a5e> +<53a8> <5a7b> +<53a9> <5a90> +<53aa> <5a93> +<53ab> <5a96> +<53ac> <5a99> +<53ad> <5abb> +<53ae> <5ac6> +<53af> <5ac8> +<53b0> <5acf> +<53b1> <5afd> +<53b2> <5b01> +<53b3> <5b4b> +<53b4> <5b5e> +<53b5> <5b6e> +<53b6> <5b86> +<53b7> <5b8e> +<53ba> <5b94> +<53bd> <5bad> +<53be> <5baf> +<53c1> <5bba> +<53c2> <5bbc> +<53c3> <5bc1> +<53c4> <5bcd> +<53c5> <5bcf> +<53c8> <5bef> +<53c9> <5bf4> +<53ca> <5c0c> +<53cb> <5c17> +<53cc> <5c26> +<53cd> <5c2e> +<53ce> <5c32> +<53cf> <5c35> +<53d0> <5c5a> +<53d3> <5c7b> +endbfchar + +100 beginbfchar +<53d4> <5c7d> +<53d5> <5c87> +<53d6> <5c92> +<53d7> <5c9d> +<53d8> <5cb2> +<53d9> <5cb4> +<53da> <5cd7> +<53db> <5cee> +<53de> <5d12> +<53df> <5d23> +<53e0> <5d3f> +<53e1> <5d48> +<53e2> <5d55> +<53e3> <5d51> +<53e6> <5d62> +<53e7> <5d64> +<53ea> <5d7f> +<53eb> <5d8a> +<53ec> <5d93> +<53ed> <5d95> +<53ee> <5d9b> +<53ef> <5d9f> +<53f0> <5dab> +<53f1> <5dc3> +<53f2> <5dce> +<53f3> <5dd9> +<53f4> <5e07> +<53f5> <5e0d> +<53f6> <5e20> +<53f7> <5e4b> +<53fa> <5e5c> +<53fb> <5e70> +<53fc> <5e8e> +<53fd> <5ea2> +<53fe> <5ea4> +<53ff> <5eb1> +<5400> <5ecc> +<5401> <5ece> +<5402> <5edc> +<5403> <5ede> +<5404> <5ee5> +<5405> <5eeb> +<5406> <5f06> +<5407> <5f19> +<5408> <5f24> +<540b> <5f2e> +<540c> <5f30> +<540d> <5f3f> +<540e> <5f44> +<540f> <5f5b> +<5410> <5f60> +<5411> <5f6f> +<5414> <5f78> +<5415> <5f7a> +<5416> <5f8d> +<5417> <5f96> +<5418> <5f9d> +<5419> <5fab> +<541c> <5fc8> +<541f> <5fe8> +<5420> <5fec> +<5421> <5ff2> +<5422> <5ff6> +<5423> <5ffa> +<5424> <600a> +<5425> <6013> +<5426> <601f> +<5427> <602d> +<5428> <6040> +<5429> <6048> +<542a> <6051> +<542d> <6071> +<542e> <607e> +<542f> <6082> +<5430> <6086> +<5431> <6088> +<5432> <608e> +<5433> <6091> +<5434> <6093> +<5435> <6098> +<5436> <65df> +<5437> <60a2> +<5438> <60a5> +<5439> <60b7> +<543a> <60c2> +<543f> <60e2> +<5440> <60e5> +<5441> <60fc> +<5442> <6102> +<5443> <6107> +<5444> <610c> +<5445> <6117> +<5446> <6122> +<5447> <6131> +<5448> <6135> +<5449> <6139> +<544a> <6145> +<544b> <6149> +<544c> <616c> +<544d> <6172> +endbfchar + +100 beginbfchar +<544e> <6178> +<5453> <618b> +<5454> <619c> +<5455> <61a0> +<5456> <61aa> +<545b> <61de> +<545c> <61e1> +<545d> <61e7> +<545e> <61e9> +<5461> <61ef> +<5462> <6201> +<5463> <6203> +<5464> <621c> +<5465> <6220> +<5466> <6227> +<5467> <622b> +<5468> <6242> +<5469> <6244> +<546a> <6250> +<546b> <6254> +<546c> <625c> +<546d> <627d> +<5471> <62b3> +<5474> <62ba> +<5477> <62ce> +<5478> <62ea> +<5479> <62f2> +<547a> <6304> +<547b> <630b> +<547c> <6313> +<547d> <6329> +<547e> <632d> +<547f> <634a> +<5480> <6352> +<5481> <6354> +<5482> <6358> +<5483> <635b> +<5484> <6366> +<5485> <636d> +<5486> <6378> +<5487> <6395> +<5488> <639a> +<5489> <63a4> +<548a> <63a6> +<548b> <63ad> +<548c> <63c1> +<548d> <63c5> +<548e> <63c8> +<548f> <63ce> +<5490> <63d3> +<5491> <63f3> +<5492> <640a> +<5493> <6430> +<5494> <644b> +<5495> <644f> +<5496> <6453> +<5497> <645c> +<5498> <6461> +<5499> <6463> +<549a> <6485> +<549b> <648f> +<549c> <649b> +<549d> <64a1> +<549e> <64a3> +<549f> <64a6> +<54a0> <64a8> +<54a1> <64bd> +<54a2> <64c9> +<54a3> <64d1> +<54a6> <64f5> +<54a7> <6501> +<54ab> <6513> +<54ac> <6526> +<54ad> <6531> +<54ae> <653a> +<54b1> <6543> +<54b2> <6550> +<54b3> <6552> +<54b4> <655f> +<54b5> <657d> +<54b6> <6598> +<54b7> <65a0> +<54b8> <65a3> +<54b9> <65a6> +<54ba> <65ae> +<54bb> <65b3> +<54bc> <65d6> +<54bd> <65d8> +<54be> <65df> +<54c3> <660d> +<54c6> <6616> +<54c7> <661d> +<54c8> <6623> +<54c9> <6626> +<54ca> <6629> +<54cb> <6639> +<54cc> <6637> +<54cd> <6640> +<54ce> <6646> +<54cf> <664a> +endbfchar + +100 beginbfchar +<54d0> <6658> +<54d1> <6660> +<54d2> <6675> +<54d3> <667f> +<54d4> <6679> +<54d5> <667c> +<54d9> <669f> +<54da> <69fe> +<54dd> <66cc> +<54de> <66ce> +<54df> <66d4> +<54e0> <66df> +<54e1> <66eb> +<54e2> <66ee> +<54e3> <6707> +<54e4> <671c> +<54e5> <6720> +<54e6> <6722> +<54e7> <673e> +<54e8> <6745> +<54e9> <676c> +<54ea> <6784> +<54eb> <678e> +<54ec> <6796> +<54ed> <6799> +<54f0> <67c2> +<54f1> <67c5> +<54f2> <67c9> +<54f3> <67dc> +<54f4> <67e1> +<54f5> <67e6> +<54f6> <67f2> +<54f7> <67f6> +<54f8> <6814> +<54f9> <6819> +<54fa> <6827> +<54fb> <682f> +<54fc> <683f> +<54fd> <684a> +<54fe> <6858> +<54ff> <686f> +<5502> <6879> +<5503> <687b> +<5504> <6888> +<5505> <68a1> +<5506> <68a9> +<5507> <68ae> +<5508> <68d1> +<5509> <68d3> +<550c> <68ea> +<550d> <68f6> +<550e> <68fd> +<550f> <6906> +<5510> <6909> +<5511> <6910> +<5512> <6916> +<5513> <6931> +<5514> <6945> +<5515> <694e> +<5516> <6966> +<5519> <697b> +<551a> <698d> +<551b> <69a1> +<551c> <69b8> +<551d> <69c5> +<551e> <69c8> +<551f> <69fe> +<5520> <6a00> +<5521> <6a03> +<5522> <6a20> +<5523> <6a24> +<5524> <6a37> +<5525> <6a55> +<5526> <6a6a> +<5527> <6a81> +<552a> <6a9b> +<552d> <6ab4> +<5530> <6acc> +<5533> <6af0> +<5534> <6afc> +<5535> <6b02> +<5538> <6b09> +<5539> <6b28> +<553a> <6b2b> +<553b> <6b36> +<553c> <6b4d> +<553d> <6b52> +<553e> <6b5d> +<553f> <6b6b> +<5540> <6b6e> +<5541> <6b70> +<5542> <6b85> +<5543> <6b97> +<5548> <6ba8> +<5549> <6bac> +<554e> <6be3> +<554f> <6c12> +<5550> <6c19> +<5551> <6c1f> +<5555> <6c2e> +endbfchar + +100 beginbfchar +<5556> <6c3b> +<5557> <6c4b> +<5558> <6c4f> +<5559> <6c6b> +<555a> <6c78> +<555b> <6c87> +<555c> <6c9f> +<555d> <6cb0> +<555e> <6cb2> +<555f> <6ccd> +<5560> <6ccf> +<5561> <6cd1> +<5562> <6ce7> +<5563> <6cf2> +<5564> <6cf4> +<5565> <6d07> +<5566> <6d0f> +<5567> <6d13> +<5568> <6d1a> +<5569> <6d28> +<556a> <6d5f> +<556b> <6d67> +<556c> <6d92> +<556d> <6d97> +<556e> <6db7> +<556f> <6dbd> +<5570> <6de0> +<5571> <6de2> +<5572> <6de5> +<5573> <6def> +<5574> <6df4> +<5575> <6e00> +<5576> <6e04> +<5577> <6e3b> +<5578> <6e52> +<5579> <6e5d> +<557a> <6e62> +<557b> <6e68> +<557c> <6e8d> +<557d> <6e99> +<557e> <6ea0> +<5581> <6eb3> +<5582> <6ebb> +<5583> <6ec0> +<5584> <6ec8> +<5585> <6ecd> +<5586> <6ecf> +<5589> <6f04> +<558a> <6f08> +<558b> <6f0d> +<558c> <6f16> +<558d> <6f1b> +<558e> <6f3b> +<558f> <6f2d> +<5590> <6f4f> +<5591> <6f53> +<5592> <6f5d> +<5593> <6f6c> +<5594> <6f83> +<5595> <6f93> +<5596> <6fa6> +<5597> <6fb0> +<5598> <6fc5> +<5599> <6fe8> +<559a> <6ffd> +<559b> <7017> +<559c> <702f> +<559d> <7034> +<559e> <7037> +<559f> <7044> +<55a0> <7048> +<55a1> <7055> +<55a2> <7094> +<55a3> <7096> +<55a4> <709b> +<55a5> <70b4> +<55a6> <70fa> +<55a7> <7105> +<55a8> <710b> +<55a9> <712d> +<55aa> <7138> +<55ab> <7141> +<55ac> <714b> +<55ad> <74d8> +<55ae> <7157> +<55af> <715a> +<55b0> <718c> +<55b1> <719a> +<55b2> <71b0> +<55b5> <71cc> +<55b6> <71da> +<55b7> <71f8> +<55ba> <7213> +<55bb> <721a> +<55bc> <7224> +<55bd> <722f> +<55be> <7245> +<55bf> <724e> +<55c0> <725e> +<55c1> <726b> +endbfchar + +100 beginbfchar +<55c2> <7271> +<55c5> <7289> +<55c6> <7293> +<55c7> <72a8> +<55ca> <72d8> +<55cb> <72df> +<55cc> <72fe> +<55cd> <730d> +<55ce> <7313> +<55cf> <7332> +<55d0> <7335> +<55d1> <7356> +<55d6> <7369> +<55d7> <7379> +<55d8> <7380> +<55d9> <738e> +<55da> <7390> +<55db> <7393> +<55dc> <7397> +<55dd> <73aa> +<55de> <73ad> +<55df> <73c6> +<55e0> <73cc> +<55e1> <73d3> +<55e2> <73dd> +<55e3> <73e6> +<55e4> <73f7> +<55e5> <73fb> +<55e8> <7411> +<55e9> <742d> +<55ec> <746e> +<55ed> <748f> +<55ee> <7491> +<55ef> <749a> +<55f0> <74ae> +<55f3> <74cc> +<55f4> <74d0> +<55f5> <74d3> +<55f6> <74d8> +<55f7> <74db> +<55f8> <74e8> +<55f9> <74ea> +<55fa> <74ef> +<55fb> <74fc> +<55fc> <7506> +<55fd> <7512> +<55fe> <7527> +<55ff> <7529> +<5600> <7536> +<5601> <7539> +<5602> <7543> +<5603> <7547> +<5604> <7557> +<5605> <755f> +<5606> <7561> +<5609> <7585> +<560a> <7595> +<560b> <759c> +<560c> <75ba> +<560d> <7612> +<560e> <7623> +<560f> <7629> +<5612> <7640> +<5613> <7644> +<5614> <7659> +<5615> <7685> +<5618> <769f> +<561b> <76c1> +<561c> <76cb> +<561d> <76d4> +<561e> <76e0> +<561f> <76f6> +<5620> <7706> +<5621> <7712> +<5624> <771c> +<5625> <772e> +<5626> <773d> +<5627> <7742> +<5628> <7752> +<562b> <7770> +<562e> <778d> +<562f> <77a2> +<5630> <77ae> +<5631> <77b1> +<5632> <77b5> +<5633> <77c3> +<5634> <77d2> +<5635> <77d5> +<5636> <77f8> +<5637> <780e> +<5638> <7811> +<5639> <781d> +<563a> <7823> +<563b> <7844> +<563c> <7848> +<563d> <784c> +<563e> <7852> +<563f> <785e> +<5642> <7863> +<5643> <788f> +endbfchar + +100 beginbfchar +<5644> <78a8> +<5645> <78ac> +<5646> <78b2> +<5647> <78bd> +<5648> <78bf> +<5649> <78c7> +<564a> <78d2> +<564b> <78d6> +<564c> <78db> +<564d> <78df> +<564e> <78ea> +<564f> <78f3> +<5650> <78f6> +<5651> <78ff> +<5652> <7906> +<5653> <791a> +<5654> <791e> +<5655> <7920> +<5656> <7929> +<5657> <792d> +<5658> <7935> +<5659> <7944> +<565a> <794b> +<565b> <794f> +<565c> <7951> +<565d> <7969> +<565e> <797b> +<565f> <797e> +<5660> <798c> +<5661> <7991> +<5662> <7993> +<5663> <799c> +<5664> <79a8> +<5665> <79af> +<5666> <79cf> +<5667> <79dd> +<5668> <79e0> +<5669> <79e2> +<566a> <79e5> +<566b> <79f1> +<566c> <79f8> +<566d> <79fc> +<566e> <7a07> +<566f> <7a21> +<5670> <7a27> +<5671> <7a2b> +<5672> <7a2f> +<5675> <7a48> +<5676> <7a55> +<5677> <7a65> +<5678> <7a7e> +<5679> <7a8b> +<567a> <7a91> +<567b> <7a9e> +<567c> <7ac9> +<567d> <7adb> +<567e> <7ae9> +<567f> <7aec> +<5680> <7af1> +<5681> <7afb> +<5682> <7b1f> +<5683> <7b23> +<5684> <7b29> +<5685> <7b30> +<5686> <7b34> +<5689> <7b6a> +<568a> <7b84> +<568b> <7b89> +<568c> <7b8e> +<568d> <7b96> +<568e> <7ba5> +<568f> <7bb2> +<5690> <7bb6> +<5693> <7bbd> +<5694> <7bc2> +<5695> <7bc8> +<5696> <7bdb> +<569b> <7c02> +<569c> <7c04> +<569d> <7c06> +<569e> <7c0c> +<569f> <7c19> +<56a0> <7c1b> +<56a1> <7c25> +<56a2> <7c2c> +<56a3> <7c34> +<56a6> <7c46> +<56a7> <7c55> +<56a8> <7c5a> +<56a9> <7c63> +<56aa> <7c69> +<56ab> <7c7c> +<56ac> <7c86> +<56ad> <7cb0> +<56ae> <7cbb> +<56af> <7ccf> +<56b0> <7cd4> +<56b1> <7ce9> +<56b2> <7d0f> +<56b3> <7d11> +endbfchar + +100 beginbfchar +<56b4> <7d16> +<56b5> <7d26> +<56b6> <7d2a> +<56b7> <7d2d> +<56b8> <7d51> +<56b9> <7d57> +<56ba> <7d65> +<56bb> <7d67> +<56bc> <7d78> +<56bd> <7d7b> +<56be> <7d81> +<56bf> <7d96> +<56c6> <7e00> +<56c7> <7de2> +<56c8> <7dea> +<56c9> <7ded> +<56ca> <7dfa> +<56cb> <7e1c> +<56cc> <7e2d> +<56cd> <7e33> +<56ce> <7e3f> +<56cf> <7e4e> +<56d0> <7e50> +<56d1> <7e58> +<56d2> <7e5f> +<56d3> <7e65> +<56d4> <7e95> +<56d7> <7f3f> +<56d8> <7f5c> +<56d9> <7f66> +<56da> <7f80> +<56db> <7f8d> +<56dc> <7f8f> +<56dd> <7fa6> +<56de> <7faa> +<56df> <7fb4> +<56e0> <7fbc> +<56e1> <7fc0> +<56e2> <7fc8> +<56e3> <7fe8> +<56e4> <800f> +<56e5> <8013> +<56e6> <801d> +<56e9> <802e> +<56ea> <8034> +<56eb> <803e> +<56ec> <8040> +<56ed> <8044> +<56ee> <8064> +<56ef> <806d> +<56f0> <8081> +<56f1> <80b9> +<56f2> <80c8> +<56f3> <80cd> +<56f4> <80d2> +<56f5> <80ee> +<56f6> <80f2> +<56f7> <80f6> +<56f8> <80f9> +<56f9> <810b> +<56fa> <811c> +<56fb> <8120> +<56fc> <813c> +<56fd> <8145> +<56fe> <8147> +<56ff> <8152> +<5700> <8161> +<5701> <8177> +<5702> <8186> +<5703> <818e> +<5704> <8196> +<5705> <81a2> +<5706> <81ae> +<5707> <81c5> +<5708> <81ce> +<5709> <81eb> +<570d> <81f5> +<570e> <81f8> +<570f> <8200> +<5710> <820f> +<5711> <821d> +<5712> <8228> +<5713> <8243> +<5714> <824e> +<5715> <8251> +<5716> <8256> +<5717> <8267> +<5718> <827b> +<571b> <8287> +<571c> <8294> +<571d> <8296> +<571e> <8298> +<5721> <82a0> +<5722> <82da> +<5723> <82e0> +<5724> <82e4> +<5725> <82ed> +<572a> <8321> +<572b> <832c> +<572c> <832e> +endbfchar + +100 beginbfchar +<572d> <8333> +<572e> <8337> +<572f> <833d> +<5730> <8342> +<5733> <8370> +<5734> <8380> +<5735> <8382> +<5736> <8384> +<5737> <8399> +<5738> <839c> +<5739> <83a6> +<573a> <83ac> +<573b> <83be> +<573c> <8353> +<573d> <83e8> +<573e> <8419> +<573f> <83ad> +<5740> <842f> +<5741> <8445> +<5742> <8447> +<5743> <844d> +<5744> <8456> +<5745> <845c> +<5746> <8460> +<5747> <8464> +<5748> <8467> +<5749> <846a> +<574a> <8474> +<574b> <847d> +<574c> <8492> +<574d> <8495> +<5752> <84cc> +<5753> <84f2> +<5754> <84f7> +<5757> <8507> +<5758> <850e> +<5759> <8510> +<575a> <851c> +<575b> <8522> +<575c> <8527> +<575d> <852a> +<575e> <8533> +<575f> <8536> +<5760> <853f> +<5761> <8550> +<5762> <8552> +<5767> <8579> +<5768> <8589> +<5769> <858b> +<576a> <85a0> +<576b> <85a5> +<576c> <85a7> +<576d> <85b4> +<576e> <85b6> +<576f> <85b8> +<5773> <85c2> +<5774> <85da> +<5775> <85e0> +<5776> <85e8> +<5777> <85f3> +<5778> <85fc> +<577b> <8619> +<577c> <861b> +<577d> <8636> +<577e> <863a> +<577f> <863d> +<5782> <865d> +<5785> <8664> +<5786> <8669> +<5787> <8676> +<5788> <8696> +<5789> <869a> +<578a> <86a1> +<578b> <86a6> +<578c> <86ad> +<578f> <86b7> +<5790> <86b9> +<5791> <86bf> +<5792> <86c5> +<5793> <86d2> +<5794> <86da> +<5795> <86dc> +<5796> <86e0> +<5797> <86e5> +<5798> <86e7> +<5799> <8688> +<579a> <8704> +<579b> <870f> +<579c> <872f> +<579d> <8732> +<57a0> <8745> +<57a1> <874d> +<57a2> <8761> +<57a3> <876f> +<57a8> <8790> +<57a9> <8795> +<57aa> <87a3> +<57ab> <87b1> +<57ac> <87c8> +<57ad> <87ca> +endbfchar + +100 beginbfchar +<57ae> <87d5> +<57af> <87d9> +<57b0> <87dc> +<57b1> <87e2> +<57b2> <87e4> +<57b3> <87f1> +<57b4> <87f3> +<57b5> <87f8> +<57b6> <87fa> +<57b7> <87ff> +<57b8> <8809> +<57b9> <8819> +<57ba> <8812> +<57bb> <881a> +<57bc> <881e> +<57bd> <8830> +<57be> <8835> +<57bf> <8841> +<57c0> <8843> +<57c3> <884b> +<57c4> <8851> +<57c5> <885c> +<57c6> <8860> +<57c7> <8871> +<57c8> <8879> +<57c9> <887b> +<57ca> <8880> +<57cb> <889f> +<57cc> <88a8> +<57cd> <88ba> +<57d0> <88de> +<57d1> <88e7> +<57d2> <88f7> +<57d3> <890d> +<57d6> <8920> +<57d7> <8928> +<57d8> <8931> +<57d9> <893a> +<57da> <8946> +<57db> <894f> +<57dc> <8952> +<57dd> <8957> +<57de> <895b> +<57df> <8961> +<57e0> <8963> +<57e1> <896e> +<57e2> <8973> +<57e3> <8975> +<57e4> <897a> +<57e5> <897d> +<57e6> <898d> +<57e7> <8995> +<57ea> <89a0> +<57eb> <89b4> +<57ec> <89b6> +<57ed> <89d7> +<57ee> <89e9> +<57ef> <89ed> +<57f0> <89f9> +<57f3> <8a1e> +<57f4> <8a20> +<57f5> <8a24> +<57f6> <8a26> +<57f9> <8a2f> +<57fa> <8a3d> +<57fb> <8a40> +<57fc> <8a43> +<57fd> <8a53> +<57fe> <8a56> +<57ff> <8a5c> +<5800> <8a65> +<5805> <8a80> +<5806> <8a83> +<5807> <8a8b> +<5808> <8a8f> +<5809> <8a92> +<580a> <8a97> +<580b> <8a99> +<580c> <8a9f> +<580d> <8aa9> +<580e> <8aaf> +<580f> <8ab3> +<5810> <8abb> +<5811> <8ac3> +<5812> <8ac6> +<5813> <8ac8> +<5814> <8aca> +<5818> <8af0> +<5819> <8aff> +<581a> <8b0b> +<581b> <8b1e> +<581c> <8b30> +<581d> <8b3c> +<581e> <8b42> +<581f> <8b48> +<5820> <8b4d> +<5821> <8b63> +<5822> <8b79> +<5823> <8b84> +<5824> <8b8d> +endbfchar + +100 beginbfchar +<5825> <8b8f> +<5826> <8c38> +<5827> <8c3e> +<5828> <8c51> +<5829> <8c58> +<582a> <8c5b> +<582b> <8c5d> +<582c> <8c59> +<582f> <8c66> +<5832> <8c7e> +<5835> <8c8b> +<5836> <8c90> +<5839> <8cb9> +<583a> <8cc6> +<583b> <8ccb> +<583c> <8ccf> +<583d> <8cdd> +<583e> <8ce8> +<583f> <8cef> +<5840> <8cf2> +<5841> <8cff> +<5842> <8d65> +<5843> <8d7f> +<5844> <8d82> +<5845> <8d88> +<5846> <8d90> +<5847> <8d9e> +<5848> <8da0> +<5849> <8dac> +<584a> <8db5> +<584b> <8db7> +<584c> <8db9> +<584d> <8dbb> +<584e> <8dc0> +<584f> <8dc5> +<5850> <8dc7> +<5851> <8dca> +<5852> <8dd4> +<5853> <8de5> +<5854> <8df0> +<5855> <8dbc> +<5858> <8e11> +<5859> <8e33> +<585c> <8e4e> +<585d> <8e5b> +<5860> <8e79> +<5863> <8e9b> +<5864> <8e9d> +<5865> <8ea2> +<5866> <8eba> +<5867> <8ec1> +<586a> <8ec7> +<586b> <8edc> +<586c> <8eee> +<586d> <8ef1> +<586e> <8ef7> +<586f> <8eed> +<5870> <8f02> +<5873> <8f16> +<5876> <8f23> +<5877> <8f28> +<5878> <8f2e> +<5879> <8f34> +<587a> <8f37> +<587b> <8f41> +<587c> <8f4f> +<5881> <8f65> +<5882> <8f9d> +<5883> <8fb8> +<5884> <8fbe> +<5885> <8fc0> +<5886> <8fcb> +<5887> <8fd0> +<5888> <8fd2> +<5889> <8fe3> +<588a> <8ffe> +<588b> <9018> +<5891> <903f> +<5892> <9062> +<5893> <9066> +<5894> <906c> +<5895> <908e> +<5896> <90a5> +<5897> <90cc> +<5898> <90d5> +<589b> <90e5> +<589c> <90d2> +<589d> <9108> +<589e> <910d> +<589f> <9110> +<58a0> <911a> +<58a1> <9120> +<58a2> <9129> +<58a3> <912e> +<58a4> <9136> +<58a5> <913c> +<58a6> <9143> +<58a7> <914f> +<58a8> <9153> +<58a9> <916d> +endbfchar + +100 beginbfchar +<58aa> <917b> +<58ab> <9181> +<58ac> <9186> +<58af> <9198> +<58b0> <91a1> +<58b1> <91a6> +<58b2> <91bf> +<58b5> <91d9> +<58b8> <91ef> +<58b9> <91f9> +<58ba> <91fd> +<58bd> <920c> +<58c0> <9218> +<58cb> <923e> +<58cc> <9246> +<58cd> <924d> +<58ce> <9258> +<58d1> <9269> +<58d5> <9275> +<58d6> <9279> +<58d7> <927b> +<58d8> <928a> +<58d9> <9292> +<58da> <92a0> +<58dd> <92a8> +<58de> <92b6> +<58df> <92b8> +<58e0> <92ba> +<58e1> <92bd> +<58e2> <92c7> +<58e3> <92cd> +<58e4> <92d8> +<58e7> <92e1> +<58e8> <92e3> +<58e9> <92e8> +<58ea> <92ec> +<58eb> <92ee> +<58ec> <92f0> +<58ed> <9300> +<58ee> <9308> +<58ef> <931c> +<58f0> <9324> +<58f1> <932a> +<58f2> <9334> +<58f3> <9337> +<58f4> <9350> +<58f5> <9355> +<58f6> <935e> +<58f7> <9367> +<58f8> <9369> +<58f9> <936f> +<58fa> <9374> +<58fb> <9376> +<58fc> <937a> +<58fd> <937d> +<5900> <938d> +<5901> <9392> +<5902> <9395> +<5903> <9398> +<5904> <93a1> +<5905> <93a6> +<5906> <93a8> +<5907> <93ab> +<590d> <93c9> +<590e> <93cb> +<590f> <93cd> +<5910> <93d3> +<5911> <93d9> +<5912> <93f7> +<5913> <9401> +<5914> <9408> +<5915> <9415> +<5916> <941f> +<5917> <942f> +<5918> <943d> +<5919> <9443> +<591a> <9459> +<591b> <945c> +<591c> <945f> +<591d> <9461> +<591e> <9468> +<591f> <946e> +<5920> <9484> +<5921> <9483> +<5922> <957e> +<5923> <9584> +<5926> <95ba> +<5927> <95d9> +<5928> <95dd> +<5929> <95df> +<592a> <961e> +<592b> <9622> +<592e> <9637> +<5931> <9652> +<5934> <966e> +<5935> <967c> +<5936> <967e> +<5937> <9691> +<5938> <969f> +<5939> <96a6> +endbfchar + +100 beginbfchar +<593a> <96ca> +<593b> <96da> +<593c> <96df> +<593d> <96fa> +<593e> <9705> +<593f> <971a> +<5940> <971d> +<5941> <9721> +<5942> <974a> +<5943> <9758> +<5946> <977b> +<5947> <9780> +<5948> <9789> +<5949> <9797> +<594a> <97b8> +<594b> <97bc> +<594c> <97bf> +<594f> <97c7> +<5950> <97ca> +<5951> <97ce> +<5952> <97d0> +<5953> <97d7> +<5954> <97dd> +<5955> <97e4> +<5958> <97fa> +<5959> <9819> +<595a> <981c> +<595b> <9820> +<595c> <982f> +<595d> <9835> +<595e> <9844> +<595f> <984a> +<5960> <9851> +<5961> <986a> +<5962> <98ae> +<5963> <98cc> +<5964> <98e6> +<5965> <98f6> +<5966> <9907> +<5967> <991f> +<5968> <9922> +<5969> <9926> +<596a> <992b> +<596b> <9934> +<596c> <9939> +<596d> <9947> +<596e> <9959> +<596f> <995b> +<5970> <999b> +<5971> <999d> +<5972> <999f> +<5973> <99b0> +<5974> <99b2> +<5975> <99b5> +<5976> <99d3> +<5977> <99da> +<5978> <99dc> +<5979> <99e7> +<5981> <9a04> +<5982> <9a0b> +<5983> <9a1e> +<5984> <9a22> +<5985> <9a33> +<5986> <9a35> +<5987> <9a47> +<598a> <9a54> +<598b> <9a5d> +<598c> <9aaa> +<598d> <9aac> +<598e> <9aae> +<598f> <9ab2> +<5990> <9ab4> +<5991> <9abb> +<5992> <9abf> +<5993> <9ac8> +<5994> <9ad7> +<5995> <9adb> +<5996> <9ae4> +<5997> <9ae7> +<5998> <9aec> +<599b> <9af5> +<599c> <9afa> +<599d> <9afd> +<59a2> <9b1b> +<59a3> <9b26> +<59a4> <9b35> +<59a5> <9b37> +<59a8> <9b4c> +<59ab> <9b5b> +<59ac> <9b61> +<59ad> <9b6a> +<59b0> <9b78> +<59b1> <9b7f> +<59b2> <9b85> +<59b3> <9b87> +<59b4> <9b89> +<59b5> <9b8b> +<59b6> <9b8d> +<59b7> <9b94> +<59b8> <9b9a> +endbfchar + +68 beginbfchar +<59b9> <9ba9> +<59ba> <9bb7> +<59bb> <9bbc> +<59bc> <9bd0> +<59bd> <9bf9> +<59be> <9c0f> +<59bf> <9c11> +<59c0> <9c1e> +<59c1> <9c26> +<59c2> <9c28> +<59c3> <9c3d> +<59c4> <9c43> +<59c5> <9c4e> +<59c6> <9c5e> +<59c7> <9c7b> +<59c8> <9cf7> +<59c9> <9cf9> +<59ca> <9d1c> +<59cb> <9d2f> +<59ce> <9d3a> +<59cf> <9d3c> +<59d0> <9d45> +<59d3> <9d65> +<59d4> <9d83> +<59d5> <9d86> +<59d6> <9d8e> +<59d9> <9d95> +<59dc> <9daa> +<59dd> <9dae> +<59de> <9dbf> +<59df> <9dca> +<59e2> <9dde> +<59e3> <9dee> +<59e4> <9df0> +<59e5> <9dfe> +<59e6> <9e0e> +<59ea> <9e16> +<59eb> <9e87> +<59ee> <9e96> +<59ef> <9e98> +<59f0> <9eae> +<59f1> <9eb3> +<59f2> <9ec6> +<59f3> <9ec8> +<59f4> <9ecb> +<59f5> <9ed5> +<59f8> <9ef1> +<59f9> <9ef5> +<59fa> <9ef8> +<59fb> <9f11> +<59fc> <9f16> +<59fd> <9f1a> +<59fe> <9f1f> +<59ff> <9f31> +<5a00> <9f32> +<5a01> <9f3c> +<5a02> <9f3f> +<5a05> <9f47> +<5a06> <9f56> +<5a07> <9f5e> +<5a08> <9f6e> +<5a09> <9f73> +<5a0a> <9f7a> +<5a0b> <9f7d> +<5a0c> <9f8f> +<5a0f> <9f96> +<5a10> <9fa1> +<5a11> <9fa3> +endbfchar + +100 beginbfrange +<0001> <003c> <0020> +<003e> <005c> <005d> +<0065> <0067> <00a1> +<006e> <006f> <2039> +<0070> <0071> +<0073> <0074> <2020> +<007f> <0080> <0301> +<0082> <0084> <0306> +<009b> <009e> <00b0> +<00a1> <00a3> <00bc> +<00a4> <00a9> <00c0> +<00aa> <00ba> <00c7> +<00bb> <00c0> <00d9> +<00c1> <00c6> <00e0> +<00c7> <00d7> <00e7> +<00d8> <00de> <00f9> +<00e7> <00ff> <0020> +<0100> <0122> <0039> +<0124> <0144> <005d> +<0146> <0185> +<0187> <0188> <30f0> +<019c> <019d> <30d0> +<019e> <019f> <30d3> +<01a0> <01a1> <30d6> +<01a2> <01a3> <30d9> +<01a4> <01a5> <30dc> +<01a7> <01a8> <301d> +<01a9> <01f4> <2500> +<01fa> <01fd> <3008> +<01fe> <01ff> <300e> +<0200> <0201> <3010> +<0212> <0213> <304a> +<0222> <0227> <306a> +<022c> <0230> <307e> +<0233> <0238> <3088> +<023b> <023c> <3090> +<024d> <024e> <3070> +<024f> <0250> <3073> +<0251> <0252> <3076> +<0253> <0254> <3079> +<0255> <0256> <307c> +<0260> <0261> <00a2> +<0279> <027b> <3000> +<027f> <0280> +<0283> <0284> <309b> +<028b> <028c> <30fd> +<028d> <028e> <309d> +<0291> <0293> <3005> +<029e> <029f> <2018> +<02a0> <02a1> <201c> +<02a2> <02a3> +<02a4> <02a5> <3014> +<02aa> <02b3> <3008> +<02bd> <02be> <2266> +<02c4> <02c5> <2032> +<02c9> <02ca> <00a2> +<02e1> <02e2> <2190> +<02e7> <02e8> <2286> +<02e9> <02ea> <2282> +<02ed> <02ee> <2227> +<02fb> <02fc> <226a> +<0301> <0302> <222b> +<0308> <0309> <2020> +<030c> <0315> +<0316> <032f> +<0330> <0349> +<034a> <039c> <3041> +<039d> <03f2> <30a1> +<03f3> <03ff> <0391> +<0400> <0403> <039e> +<0404> <040a> <03a3> +<040b> <041b> <03b1> +<041c> <0422> <03c3> +<0423> <0428> <0410> +<042a> <0449> <0416> +<044b> <0464> <0436> +<05b9> <05ba> <984d> +<0697> <0698> <4eab> +<0e68> <0e69> <5fd8> +<0f1b> <0f1c> <7336> +<100c> <100e> <4e9e> +<1038> <1039> <4fe4> +<1058> <1059> <50c9> +<1065> <1066> <5101> +<1070> <1071> <513f> +<1077> <1078> <5169> +<1082> <1083> <5195> +<1087> <1089> <51a9> +<108b> <108c> <51b1> +<10a5> <10a6> <524b> +<10b7> <10b8> <52ac> +<10c5> <10c6> <52f8> +<10f6> <10f7> <542c> +<111a> <111b> <54e5> +<112a> <112b> <5556> +<117b> <117c> <5737> +<1190> <1191> <57d2> +<11b7> <11b9> <58fb> +<11c0> <11c1> <592c> +<11db> <11dc> <59d9> +endbfrange + +100 beginbfrange +<11e6> <11e7> <5a35> +<11f5> <11f6> <5afa> +<1204> <1205> <5b5a> +<1221> <1222> <5c07> +<1228> <1229> <5c38> +<1275> <1276> <5e36> +<1281> <1282> <5e75> +<1287> <1288> <5ec1> +<128f> <1290> <5eda> +<1293> <1294> <5ee8> +<12ac> <12ad> <5f56> +<12ec> <12ed> <6096> +<12fe> <12ff> <60f6> +<1307> <1308> <610d> +<1317> <1319> <6158> +<1342> <1343> <6208> +<134d> <134e> <6232> +<135a> <135b> <6292> +<13b0> <13b1> <64e0> +<13c2> <13c3> <6534> +<13d1> <13d2> <6582> +<13e0> <13e1> <65e0> +<13e8> <13e9> <6635> +<13f3> <13f4> <6667> +<1412> <1413> <6726> +<141f> <1420> <6763> +<14be> <14bf> <6aa2> +<14e4> <14e5> <6b78> +<14e6> <14e7> <6b7f> +<14ef> <14f0> <6baa> +<1501> <1502> <6c13> +<156a> <156b> <6ed4> +<15e4> <15e5> <723b> +<15e6> <15e7> <723f> +<15fc> <15fd> <72e0> +<160b> <160c> <734e> +<163e> <163f> <74f0> +<165c> <165d> <7586> +<1675> <1676> <75fe> +<167b> <167c> <75f2> +<1682> <1684> <7620> +<1689> <168a> <7647> +<168e> <168f> <7661> +<1690> <1692> <7668> +<16a1> <16a2> <7699> +<16a5> <16a7> <76b8> +<16b9> <16ba> <7725> +<16bc> <16bd> <7737> +<16d0> <16d1> <77bc> +<170e> <170f> <79b9> +<1718> <1719> <7a18> +<1724> <1725> <7a61> +<173e> <173f> <7ad9> +<1741> <1742> <7ae1> +<174b> <174c> <7b18> +<175c> <175d> <7b70> +<17f5> <17f6> <7e59> +<1801> <1802> <7e88> +<1806> <1807> <7e93> +<180a> <180b> <7e9b> +<180f> <1811> <7f4c> +<1812> <1813> <7f50> +<1817> <1818> <7f5f> +<1819> <181a> <7f68> +<182f> <1830> <7fc5> +<183e> <183f> <8018> +<1874> <1875> <8165> +<1892> <1893> <81df> +<1895> <1896> <81fa> +<1898> <1899> <8201> +<18ad> <18ae> <826a> +<18b1> <18b2> <8277> +<18d5> <18d6> <8317> +<191d> <191e> <8517> +<1957> <1958> <86a9> +<1959> <195a> <868b> +<199f> <19a0> <87f6> +<19c6> <19c7> <88c3> +<19c9> <19ca> <88d8> +<19d9> <19da> <892a> +<19f9> <19fa> <89bf> +<19fc> <19fd> <89dc> +<1a18> <1a19> <8aa5> +<1a4a> <1a4b> <8b92> +<1a4d> <1a4e> <8b99> +<1a5f> <1a60> <8c8d> +<1a68> <1a69> <8cb2> +<1a72> <1a73> <8cfa> +<1a74> <1a75> <8d04> +<1a8f> <1a90> <8dea> +<1a94> <1a95> <8e08> +<1a97> <1a98> <8e1d> +<1adf> <1ae1> <8f62> +<1af0> <1af1> <8ff9> +<1afe> <1aff> <904f> +<1b00> <1b01> <9051> +<1b33> <1b34> <91c0> +<1b3d> <1b3e> <91f5> +<1b69> <1b6a> <93ac> +<1b6d> <1b6e> <93d6> +endbfrange + +100 beginbfrange +<1b99> <1b9a> <9598> +<1bb1> <1bb2> <962e> +<1bc5> <1bc6> <96b1> +<1bca> <1bcb> <96b8> +<1be2> <1be3> <973d> +<1bf8> <1bf9> <978f> +<1bfe> <1bff> <97b3> +<1c16> <1c18> <986f> +<1c2a> <1c2b> <991d> +<1c30> <1c31> <993d> +<1c37> <1c38> <9951> +<1c3b> <1c3c> <9997> +<1c3e> <1c3f> <99ad> +<1c46> <1c47> <99ed> +<1c48> <1c49> <99f1> +<1c69> <1c6a> <9ad3> +<1c6b> <1c6c> <9ade> +<1c6d> <1c6e> <9ae2> +<1c7b> <1c7c> <9b22> +<1c7e> <1c81> <9b27> +<1c82> <1c83> <9b2e> +<1c88> <1c89> <9b4d> +<1c90> <1c91> <9b96> +<1c92> <1c93> <9b9f> +<1c9b> <1c9c> <9bd1> +<1cd4> <1cd5> <9d5d> +<1cf3> <1cf4> <9e1a> +<1cfb> <1cfc> <9e8b> +<1d08> <1d0a> <9ece> +<1d14> <1d15> <9ef6> +<1d17> <1d19> <9efb> +<1d1a> <1d1b> <9f07> +<1d25> <1d27> <9f5f> +<1d28> <1d29> <9f66> +<1d37> <1d82> <2500> +<1d83> <1d96> <2460> +<1d97> <1da0> <2160> +<1db1> <1db3> <339c> +<1db4> <1db5> <338e> +<1dbd> <1dc1> <32a4> +<1dc2> <1dc3> <3231> +<1dcf> <1dd0> <2229> +<1e81> <1e82> +<1ecf> <1ed0> <3001> +<1edb> <1edc> +<1edd> <1ede> <3014> +<1edf> <1ee0> +<1ee3> <1eec> <3008> +<1f02> <1f03> <30f5> +<1f14> <1f15> <301d> +<1f16> <1f18> <3094> +<1f56> <1f57> <33a4> +<1f5f> <1f61> <3385> +<1f7e> <1f86> <2488> +<1f87> <1f9a> <2474> +<1f9c> <1fa5> <2170> +<1fa6> <1faf> <3252> +<1fb0> <1fc9> <249c> +<1fee> <1ff0> <23ab> +<1ff2> <1ff4> <23a7> +<2000> <2001> <3388> +<2006> <200b> <322a> +<200f> <2011> <2b05> +<2017> <201a> <2600> +<201c> <201d> <261c> +<2021> <2022> <216a> +<2026> <202d> <2581> +<2035> <2036> <2594> +<2037> <2038> <256d> +<203f> <2040> <25e2> +<2045> <2047> <2571> +<2048> <2049> <3095> +<2053> <2054> <2018> +<2055> <2056> <201c> +<205e> <2066> <2776> +<206a> <206b> <217a> +<2076> <2077> <21c4> +<2079> <207c> <30f7> +<20fe> <20ff> <5db8> +<215c> <215d> <7146> +<2183> <2185> +<21a4> <21a5> +<21b8> <21b9> +<21c2> <21c3> <91ed> +<21c4> <21c5> <91e4> +<21d2> <21d3> <9277> +<21fb> <21fc> +<2210> <224b> <0020> +<224d> <226b> <005d> +<2274> <2276> <00a1> +<227d> <227e> <2039> +<227f> <2280> +<2282> <2283> <2020> +<228e> <228f> <0301> +<2291> <2293> <0306> +<22aa> <22ad> <00b0> +<22b0> <22b2> <00bc> +<22b3> <22b8> <00c0> +<22b9> <22c9> <00c7> +<22ca> <22cf> <00d9> +endbfrange + +100 beginbfrange +<22d0> <22d5> <00e0> +<22d6> <22e6> <00e7> +<22e7> <22ed> <00f9> +<22f7> <22ff> <0021> +<2300> <2331> <002a> +<2333> <2353> <005d> +<2362> <2363> <00a2> +<237c> <23bb> +<23bc> <23bd> <30f0> +<23d1> <23d2> <30d0> +<23d3> <23d4> <30d3> +<23d5> <23d6> <30d6> +<23d7> <23d8> <30d9> +<23d9> <23da> <30dc> +<23ea> <23eb> <304a> +<23fa> <23ff> <306a> +<2404> <2408> <307e> +<240b> <2410> <3088> +<2413> <2414> <3090> +<2425> <2426> <3070> +<2427> <2428> <3073> +<2429> <242a> <3076> +<242b> <242c> <3079> +<242d> <242e> <307c> +<242f> <2430> <301d> +<2433> <2436> <3008> +<2437> <243a> <300e> +<243d> <2488> <2500> +<248c> <248d> <2032> +<248f> <2490> +<249b> <249e> <215b> +<249f> <24a0> <2153> +<24a2> <24a7> <2074> +<24a8> <24b1> <2080> +<24d4> <24d5> <0259> +<24d7> <24d8> <025a> +<24e4> <24ff> <0020> +<2500> <251f> <003c> +<2521> <253f> <005d> +<2548> <254a> <00a1> +<2551> <2552> <2039> +<2553> <2554> +<2556> <2557> <2020> +<2562> <2563> <0301> +<2565> <2567> <0306> +<257e> <2581> <00b0> +<2584> <2586> <00bc> +<2587> <258c> <00c0> +<258d> <259d> <00c7> +<259e> <25a3> <00d9> +<25a4> <25a9> <00e0> +<25aa> <25ba> <00e7> +<25bb> <25c1> <00f9> +<25cc> <25cd> <2032> +<25cf> <25d0> +<25db> <25de> <215b> +<25df> <25e0> <2153> +<25e2> <25e7> <2074> +<25e8> <25f1> <2080> +<260a> <2613> <0030> +<2618> <2619> <0028> +<261a> <261b> <002e> +<261c> <261d> <003a> +<261e> <2627> <0030> +<262c> <262d> <0028> +<262e> <262f> <002e> +<2630> <2631> <003a> +<2635> <2636> <2153> +<2638> <263d> <2155> +<2644> <2647> <215b> +<2690> <2699> <0030> +<26f6> <26ff> <2170> +<2700> <2701> <217a> +<2705> <2710> <2160> +<2714> <272d> <0041> +<2732> <2733> <304a> +<2742> <2747> <306a> +<274c> <2750> <307e> +<2753> <2758> <3088> +<2759> <275d> <308f> +<2762> <2763> <30aa> +<2772> <2777> <30ca> +<277c> <2780> <30de> +<2783> <2788> <30e8> +<2789> <278d> <30ef> +<278e> <2797> <3220> +<27a8> <27b1> <0030> +<27b2> <27bb> <0030> +<27fb> <27ff> <2460> +<2800> <2803> <2465> +<2849> <2862> <24d0> +<2863> <287c> <24b6> +<2881> <2882> <304a> +<2891> <2896> <306a> +<289b> <289f> <307e> +<28a2> <28a7> <3088> +<28a8> <28ac> <308f> +<28ad> <28db> <32d0> +<28dd> <28e6> <3280> +<28e8> <28ed> <328a> +endbfrange + +100 beginbfrange +<28f6> <28f7> <32a0> +<296d> <2986> <0061> +<2987> <29a0> <0041> +<29a5> <29a6> <304a> +<29b5> <29ba> <306a> +<29bf> <29c3> <307e> +<29c6> <29cb> <3088> +<29cc> <29d0> <308f> +<29d5> <29d6> <30aa> +<29e5> <29ea> <30ca> +<29ef> <29f3> <30de> +<29f6> <29fb> <30e8> +<29fc> <29ff> <30ef> +<2a7b> <2a94> <0061> +<2a95> <2aae> <0041> +<2ab3> <2ab4> <304a> +<2ac3> <2ac8> <306a> +<2acd> <2ad1> <307e> +<2ad4> <2ad9> <3088> +<2ada> <2ade> <308f> +<2ae3> <2ae4> <30aa> +<2af3> <2af8> <30ca> +<2afd> <2aff> <30de> +<2b00> <2b01> <30e1> +<2b04> <2b09> <30e8> +<2b0a> <2b0e> <30ef> +<2b8c> <2ba5> <0061> +<2ba6> <2bbf> <0041> +<2bc4> <2bc5> <304a> +<2bd4> <2bd9> <306a> +<2bde> <2be2> <307e> +<2be5> <2bea> <3088> +<2beb> <2bef> <308f> +<2bf4> <2bf5> <30aa> +<2c04> <2c09> <30ca> +<2c0e> <2c12> <30de> +<2c15> <2c1a> <30e8> +<2c1b> <2c1f> <30ef> +<2c9a> <2cb3> <0061> +<2cb4> <2ccd> <0041> +<2cd2> <2cd3> <304a> +<2ce2> <2ce7> <306a> +<2cec> <2cf0> <307e> +<2cf3> <2cf8> <3088> +<2cf9> <2cfd> <308f> +<2d02> <2d03> <30aa> +<2d12> <2d17> <30ca> +<2d1c> <2d20> <30de> +<2d23> <2d28> <30e8> +<2d29> <2d2d> <30ef> +<2da7> <2dc0> <0061> +<2dc1> <2dda> <0041> +<2ddf> <2de0> <304a> +<2def> <2df4> <306a> +<2df9> <2dfd> <307e> +<2e00> <2e05> <3088> +<2e06> <2e0a> <308f> +<2e0f> <2e10> <30aa> +<2e1f> <2e24> <30ca> +<2e29> <2e2d> <30de> +<2e30> <2e35> <30e8> +<2e36> <2e3a> <30ef> +<2e4c> <2e4d> <2121> +<2e5d> <2e5e> <33d7> +<2e62> <2e63> <3301> +<2e71> <2e76> <330e> +<2e7c> <2e7f> <331a> +<2e80> <2e82> <331f> +<2e88> <2e89> <3328> +<2e8e> <2e90> <332e> +<2e94> <2e95> <3334> +<2ea0> <2ea2> <333e> +<2ea3> <2ea6> <3343> +<2ea8> <2ea9> <334b> +<2eaa> <2eab> <334f> +<2eb3> <2eb4> <3355> +<2eb6> <2eb7> <3301> +<2ec5> <2eca> <330e> +<2ed0> <2ed3> <331a> +<2ed4> <2ed6> <331f> +<2edc> <2edd> <3328> +<2ee2> <2ee4> <332e> +<2ee8> <2ee9> <3334> +<2ef4> <2ef6> <333e> +<2ef7> <2efa> <3343> +<2efc> <2efd> <334b> +<2efe> <2eff> <334f> +<2f07> <2f08> <3355> +<2f26> <2f29> <300c> +<2f2a> <2f2b> <301a> +<2f2c> <2f2d> <3018> +<2f2e> <2f2f> +<2f30> <2f31> <301d> +<2f32> <2f33> <2018> +<2f34> <2f35> <201c> +<2f42> <2f43> <2668> +<2f4c> <2f4e> <3033> +<2f59> <2f5a> <2272> +<2f5b> <2f5e> <300c> +<2f5f> <2f60> <301a> +endbfrange + +100 beginbfrange +<2f61> <2f62> <3018> +<2f63> <2f64> +<2f65> <2f68> <300c> +<2f69> <2f6a> <301a> +<2f6b> <2f6c> <3018> +<2f6d> <2f6e> +<2f70> <2f71> <239d> +<2f78> <2f79> <23a3> +<2f80> <2f81> <23a3> +<2f89> <2f8a> <301d> +<2f8b> <2f8c> <2018> +<2f8d> <2f8e> <2018> +<2faa> <2fab> <2198> +<2fac> <2fad> <2196> +<2fb0> <2fb1> <21c4> +<2fb5> <2fb7> <2193> +<2fc7> <2fc8> <25a0> +<2fd3> <2fd4> <25c6> +<2fe5> <2fe6> <3008> +<2fe7> <2fea> <3008> +<2feb> <2fec> <300a> +<2ff1> <2ff2> <309d> +<2ff3> <2ffc> <3041> +<2ffe> <2fff> <304b> +<3000> <3003> <304d> +<3005> <3007> <3051> +<3008> <3049> <3053> +<304a> <304b> <30fd> +<304d> <3056> <30a1> +<3058> <305d> <30ab> +<305f> <3061> <30b1> +<3062> <30a3> <30b3> +<30a4> <30a7> <30f7> +<30a8> <30a9> <309d> +<30aa> <30b3> <3041> +<30b5> <30ba> <304b> +<30bc> <30be> <3051> +<30bf> <30ff> <3053> +<3101> <3102> <30fd> +<3104> <310d> <30a1> +<310f> <3114> <30ab> +<3116> <3118> <30b1> +<3119> <315a> <30b3> +<315b> <315e> <30f7> +<315f> <3160> +<3169> <316a> <30fd> +<316b> <316c> <309d> +<316d> <316e> +<316f> <3170> <3014> +<3171> <3172> +<3173> <3174> <3014> +<3175> <317e> <0030> +<317f> <3189> <3041> +<318b> <3190> <304c> +<3192> <31d4> <3052> +<31e1> <31eb> <30a1> +<31ed> <31f2> <30ac> +<31f4> <31ff> <30b2> +<3200> <3236> <30be> +<323c> <323d> <30f5> +<3248> <3249> <2032> +<324b> <324c> +<3257> <325a> <215b> +<325b> <325c> <2153> +<325e> <3263> <2074> +<3264> <326d> <2080> +<3290> <3291> <0259> +<3293> <3294> <025a> +<32a0> <32db> <0020> +<32dd> <32fb> <005d> +<3304> <3306> <00a1> +<330d> <330e> <2039> +<330f> <3310> +<3312> <3313> <2020> +<331e> <331f> <0301> +<3321> <3323> <0306> +<333a> <333d> <00b0> +<3340> <3342> <00bc> +<3343> <3348> <00c0> +<3349> <3359> <00c7> +<335a> <335f> <00d9> +<3360> <3365> <00e0> +<3366> <3376> <00e7> +<3377> <337d> <00f9> +<3388> <3389> <2032> +<338b> <338c> +<3397> <339a> <215b> +<339b> <339c> <2153> +<339e> <33a3> <2074> +<33a4> <33ad> <2080> +<33c6> <33cf> <0030> +<33d4> <33d5> <0028> +<33d6> <33d7> <002e> +<33d8> <33d9> <003a> +<33da> <33e3> <0030> +<33e8> <33e9> <0028> +<33ea> <33eb> <002e> +<33ec> <33ed> <003a> +<33f6> <33f9> <300c> +<33fa> <33fb> <301a> +endbfrange + +100 beginbfrange +<33fc> <33fd> <3018> +<33fe> <33ff> +<3400> <3401> <301d> +<3402> <3403> <2018> +<3404> <3405> <201c> +<3425> <3426> +<3609> <360a> <2e8c> +<36d1> <36d2> <5fd8> +<36f9> <36fa> <7336> +<376b> <376c> <7f50> +<376f> <3770> <7fc5> +<3776> <3777> <2ebf> +<37d8> <37d9> <4e04> +<37dc> <37dd> <4e2f> +<37de> <37df> <4e40> +<37f1> <37f2> <4f7d> +<37f7> <37f8> <5000> +<3813> <3814> <5201> +<381c> <381d> <530a> +<3838> <3839> <5560> +<383d> <383e> <560e> +<3847> <3848> <5671> +<384b> <384c> <56ac> +<3855> <3856> <5733> +<385e> <385f> <57f5> +<3874> <3875> <59e3> +<3889> <388a> <5b7e> +<38a3> <38a4> <5e14> +<38a8> <38a9> <5e6b> +<38ac> <38ad> <5ebe> +<38b2> <38b3> <5f1c> +<38d3> <38d5> <6112> +<38ea> <38eb> <6342> +<38fc> <38fd> <64be> +<390d> <390e> <665b> +<3923> <3924> <6830> +<3930> <3931> <68f0> +<393a> <393b> <697f> +<393f> <3940> <69d6> +<3948> <3949> <6a50> +<394f> <3951> <6a9d> +<396d> <396e> <6ceb> +<3990> <3991> <6fa7> +<399a> <399b> <705d> +<39a2> <39a3> <70d3> +<39b8> <39b9> <7255> +<39c0> <39c1> <7304> +<39c8> <39c9> <7385> +<39cb> <39cd> <739e> +<39da> <39db> <741a> +<39df> <39e1> <742f> +<39ed> <39ef> <7485> +<3a00> <3a01> <7592> +<3a07> <3a08> <7615> +<3a14> <3a15> <76a4> +<3a1d> <3a1e> <775f> +<3a28> <3a29> <782d> +<3a32> <3a33> <78e0> +<3a3c> <3a3d> <795b> +<3a54> <3a55> <7abb> +<3a72> <3a73> <7cc8> +<3a78> <3a7a> <7d07> +<3a84> <3a85> <7d8b> +<3a97> <3a98> <7f52> +<3aa0> <3aa1> <7fee> +<3ab0> <3ab1> <80d7> +<3ad1> <3ad2> <83bf> +<3aef> <3af0> <86a7> +<3afc> <3afd> <87ac> +<3b0d> <3b0e> <88bd> +<3b12> <3b13> <88f0> +<3b15> <3b17> <8918> +<3b29> <3b2a> <8b43> +<3b4f> <3b50> <8fb5> +<3b6d> <3b6e> <91ad> +<3b7d> <3b7e> <92cb> +<3bb1> <3bb2> <97b5> +<3bbc> <3bbd> <9852> +<3bc5> <3bc6> <9932> +<3bcc> <3bcd> <99b9> +<3bd3> <3bd4> <9a2d> +<3bd9> <3bda> <9ab5> +<3bde> <3bdf> <9b33> +<3c54> <3c56> +<3c59> <3c5a> <30fd> +<3c5b> <3c5c> <309d> +<3c61> <3c62> <2266> +<3c6a> <3c6b> <2286> +<3c6c> <3c6d> <2282> +<3c70> <3c71> <2284> +<3c72> <3c73> <228a> +<3c76> <3c77> <2305> +<3c78> <3c79> <2227> +<3c7e> <3c80> <2295> +<3c81> <3c82> <2225> +<3c89> <3c8a> <226a> +<3c8f> <3c90> <222b> +<3c95> <3c96> <2276> +<3c9d> <3cf2> <3041> +<3cf8> <3cff> <30a1> +endbfrange + +100 beginbfrange +<3d00> <3d4d> <30a9> +<3d56> <3d5f> <31f0> +<3d61> <3d66> <31fa> +<3d67> <3d6a> <30f7> +<3d6d> <3d6e> <22da> +<3d71> <3d72> <1e3e> +<3d73> <3d74> <01f8> +<3deb> <3def> <02e5> +<3df6> <3df7> <031f> +<3e00> <3e01> <031d> +<3e02> <3e03> <0318> +<3e05> <3e06> <033a> +<3e0b> <3e0c> <0262> +<3e1a> <3e1b> <02e0> +<3e1f> <3e20> <2272> +<3e2b> <3e2c> <1e3e> +<3e2d> <3e2e> <01f8> +<3e68> <3e69> <30fd> +<3e6a> <3e6b> <309d> +<3e71> <3ec6> <3041> +<3ecc> <3eff> <30a1> +<3f00> <3f21> <30d5> +<3f2a> <3f33> <31f0> +<3f35> <3f3a> <31fa> +<3f3b> <3f3e> <30f7> +<3f45> <3f46> <3016> +<3f49> <3f4a> <2934> +<3f4f> <3f50> <29fa> +<3f5f> <3f68> <24f5> +<3f69> <3f6a> <2616> +<3f6c> <3f75> <31f0> +<3f77> <3f7c> <31fa> +<3f7d> <3f8b> <23be> +<3f92> <3f95> <25d0> +<3f96> <3f97> <2047> +<3f9b> <3faa> <3190> +<3fb0> <3fb1> <2276> +<3fb2> <3fb3> <2284> +<3fb4> <3fb5> <228a> +<3fb6> <3fb7> <22da> +<3fb8> <3fb9> <23b0> +<3fba> <3fc5> <2672> +<3fc6> <3fc7> <3099> +<3fc9> <3fca> <3016> +<3fcd> <3fd6> <31f0> +<3fd8> <3fdd> <31fa> +<3fde> <3fdf> <23b0> +<3fed> <3ff6> <31f0> +<3ff8> <3ffd> <31fa> +<400b> <4014> <31f0> +<4016> <401b> <31fa> +<402b> <4034> <31f0> +<4036> <403b> <31fa> +<403c> <403f> <30f7> +<4042> <404b> <31f0> +<404d> <4052> <31fa> +<4056> <4057> <2266> +<405d> <405e> <2286> +<405f> <4060> <2282> +<4063> <4064> <2284> +<4065> <4066> <228a> +<4069> <406a> <2305> +<406b> <406c> <2227> +<4071> <4073> <2295> +<4074> <4075> <2225> +<407c> <407d> <226a> +<4082> <4083> <222b> +<4088> <4089> <2276> +<4090> <4091> <22da> +<4094> <4095> <1e3e> +<4096> <4097> <01f8> +<410e> <4112> <02e5> +<4119> <411a> <031f> +<4123> <4124> <031d> +<4125> <4126> <0318> +<4128> <4129> <033a> +<412e> <412f> <0262> +<413d> <413e> <02e0> +<4142> <4143> <2272> +<414e> <414f> <1e3e> +<4150> <4151> <01f8> +<41f9> <41fa> <6677> +<4267> <4268> <774d> +<429e> <429f> <8167> +<42a9> <42aa> <82a3> +<42cc> <42cd> <8604> +<4302> <4303> <90c4> +<4308> <4309> <9122> +<430f> <4310> <9364> +<433f> <4340> <9c4f> +<4342> <4343> <9d1d> +<436c> <436d> <4f77> +<437e> <437f> <5092> +<4384> <4385> <50ba> +<43ab> <43ac> <52ba> +<43bd> <43be> <355d> +<43d4> <43d5> <5500> +<4404> <4405> <56f6> +<440a> <440b> <5745> +<4410> <4412> <5773> +endbfrange + +100 beginbfrange +<4417> <4418> <579d> +<442d> <442e> <588a> +<4430> <4431> <588f> +<443a> <443b> <58f3> +<443c> <443d> <5905> +<4449> <444a> <5975> +<445f> <4460> <5a9f> +<4478> <4479> <3761> +<4485> <4486> <5c67> +<44bd> <44be> <5e6d> +<44d2> <44d4> <5fd2> +<44d6> <44d7> <5fee> +<44f0> <44f1> <6192> +<4507> <4508> +<450b> <450c> <633b> +<4519> <451a> <63d4> +<451c> <451d> <63eb> +<452a> <452b> <64cb> +<4552> <4553> <666c> +<458d> <458f> <6898> +<4591> <4592> <68aa> +<459c> <459d> <68e4> +<45b5> <45b6> <69ee> +<45bf> <45c0> <6a32> +<45d4> <45d6> <6af1> +<45da> <45dc> <6b0f> +<45eb> <45ed> <6bc7> +<45ef> <45f0> <6be6> +<4608> <4609> <6d26> +<4610> <4611> <6d80> +<4627> <4628> <6e48> +<4629> <462a> <6e4b> +<462c> <462d> <6e53> +<464b> <464c> <6fc8> +<4675> <4676> <71ae> +<4682> <4683> <726e> +<4693> <4694> <7318> +<469e> <469f> <736e> +<46cd> <46ce> <753d> +<46d6> <46d7> <757d> +<46de> <46df> <75bf> +<46e4> <46e5> <75df> +<46f0> <46f1> <761b> +<4702> <4703> <76a7> +<471b> <471c> <77de> +<4732> <4733> <78f9> +<4744> <4745> <79cc> +<4769> <476a> <7b2e> +<4793> <4794> <7cb6> +<47a4> <47a5> <7d3d> +<47c7> <47c8> <7e86> +<47d3> <47d4> <7f63> +<47d6> <47d7> <7f7d> +<4829> <482a> <82a7> +<4832> <4833> <8307> +<483f> <4840> <8394> +<484e> <484f> <8451> +<4850> <4851> <8459> +<485d> <485e> <84ce> +<4867> <4868> <8524> +<486e> <486f> <8561> +<487a> <487b> +<487f> <4880> <85d8> +<4895> <4896> <869c> +<48ae> <48af> <8764> +<48c2> <48c3> <87e5> +<4908> <4909> <8b94> +<492a> <492b> <8e21> +<4955> <4956> +<4968> <4969> <90fe> +<4970> <4971> <9146> +<4979> <497a> <91c3> +<497f> <4980> <9216> +<4989> <498a> <927c> +<4992> <4993> +<4995> <4996> <92bf> +<49b5> <49b6> <9416> +<49c0> <49c1> <958c> +<49c8> <49c9> <9633> +<49e9> <49ea> <97b1> +<49f8> <49f9> <9832> +<4a02> <4a03> <98bb> +<4a0a> <4a0b> <98f0> +<4a10> <4a11> <9916> +<4a13> <4a15> <991a> +<4a18> <4a1a> <993a> +<4a4c> <4a4d> <9b6b> +<4a4e> <4a4f> <9b76> +<4a60> <4a62> <9c18> +<4a6c> <4a6d> <9c49> +<4a74> <4a76> <9c69> +<4a77> <4a78> <9c6d> +<4a81> <4a82> <9d17> +<4a8e> <4a8f> <9d76> +<4ac5> <4ac6> <4e23> +<4adf> <4ae1> <510c> +<4aeb> <4aec> <51d3> +<4af3> <4af4> <5231> +<4afa> <4afb> <5278> +<4b11> <4b12> <53c4> +endbfrange + +100 beginbfrange +<4b17> <4b18> <5434> +<4b39> <4b3a> <5611> +<4b4d> <4b4e> <571a> +<4b52> <4b53> <573d> +<4b98> <4b99> <5ed4> +<4bc8> <4bc9> <63ae> +<4bcb> <4bcc> <63f8> +<4bd9> <4bda> <6498> +<4bed> <4bee> <668b> +<4c0f> <4c10> <6ac8> +<4c14> <4c15> <6b7d> +<4c2e> <4c2f> <6eda> +<4c3c> <4c3d> <70d5> +<4c44> <4c45> <724f> +<4c52> <4c53> <733a> +<4c87> <4c88> <778c> +<4c9d> <4c9e> <7927> +<4cc0> <4cc1> <7c52> +<4cc2> <4cc4> <7c5b> +<4cd8> <4cd9> <7df5> +<4ce5> <4ce6> <7f7f> +<4ce9> <4ceb> <7ffd> +<4d05> <4d06> <81dd> +<4d0c> <4d0d> <8213> +<4d34> <4d35> <8797> +<4d46> <4d48> <889a> +<4d4c> <4d4d> <890e> +<4d85> <4d86> <8df1> +<4d8c> <4d8d> <8e40> +<4daa> <4dac> <8fa0> +<4dd0> <4dd1> <92bb> +<4de2> <4de3> <940d> +<4deb> <4dec> <95d1> +<4e11> <4e12> <9862> +<4e22> <4e23> <9abd> +<4e27> <4e28> <9b0d> +<4e45> <4e47> <9e82> +<4e52> <4e53> <9f2a> +<4e75> <4e76> <5271> +<4ea0> <4ea1> <655d> +<4f09> <4f0a> <9089> +<4f5d> <4f5e> <0384> +<4f91> <4f92> <2264> +<4f94> <4f95> <0384> +<4fc8> <4fc9> <2264> +<4fcc> <4fce> <0388> +<4fd4> <4fd7> <03ac> +<4fda> <4fdb> <03cc> +<4fdf> <4fe9> <0402> +<4fea> <4feb> <040e> +<4fec> <4ff6> <0452> +<4ff7> <4ff8> <045e> +<4ff9> <4ffa> <30ce> +<5000> <5003> <30df> +<5006> <500b> <30e8> +<500c> <5010> <30ef> +<5011> <5016> <0041> +<5021> <5029> <0031> +<5035> <503e> <0030> +<503f> <5048> <0030> +<506b> <506c> <2491> +<51e1> <51e2> <0384> +<5215> <5216> <2264> +<5218> <5219> <0384> +<524c> <524d> <2264> +<5257> <5258> <4e74> +<5268> <5269> <4f4b> +<5278> <527a> <4fbb> +<527b> <527c> <4fc0> +<5289> <528a> <5032> +<528e> <528f> <5051> +<5296> <5297> <5083> +<529c> <529e> <509f> +<529f> <52a0> <50af> +<52a5> <52a6> <50dc> +<52ae> <52af> <511c> +<52b1> <52b2> <5127> +<52b3> <52b4> <512c> +<52ce> <52d0> <5295> +<52d5> <52d7> <52b6> +<52ea> <52ec> <5327> +<52ed> <52ee> <532b> +<52f5> <52f6> <5387> +<52fd> <52fe> <53d2> +<530d> <530e> <546d> +<5319> <531a> <550c> +<5321> <5322> <555a> +<5329> <532a> <55d7> +<5333> <5334> <5643> +<5336> <5338> <5661> +<5342> <5344> <56e5> +<5345> <5346> <5701> +<534a> <534b> <5724> +<536d> <536e> <5887> +<5371> <5373> <58a0> +<537c> <537d> <5912> +<5383> <5384> <5935> +<53a2> <53a3> <5a44> +<53b8> <53b9> <5b90> +<53bb> <53bc> <5ba8> +endbfrange + +100 beginbfrange +<53bf> <53c0> <5bb1> +<53c6> <53c7> <5bd9> +<53d1> <53d2> <5c74> +<53dc> <53dd> <5cf1> +<53e4> <53e5> <5d5f> +<53e8> <53e9> <5d79> +<53f8> <53f9> <5e50> +<5409> <540a> <5f2b> +<5412> <5413> <5f74> +<541a> <541b> <5fb0> +<541d> <541e> <5fd0> +<542b> <542c> <6056> +<543b> <543c> <60c9> +<543d> <543e> <60ce> +<544f> <5450> <6180> +<5451> <5452> <6183> +<5457> <5458> <61c0> +<5459> <545a> <61ce> +<545f> <5460> <61ec> +<546e> <5470> <628d> +<5472> <5473> <62b6> +<5475> <5476> <62be> +<54a4> <54a5> <64e9> +<54a8> <54aa> <6508> +<54af> <54b0> <653c> +<54bf> <54c0> <65f4> +<54c1> <54c2> <65fe> +<54c4> <54c5> <6611> +<54d6> <54d8> <669a> +<54db> <54dc> <66c2> +<54ee> <54ef> <67bc> +<5500> <5501> <6870> +<550a> <550b> <68dc> +<5517> <5518> <6970> +<5528> <5529> <6a86> +<552b> <552c> <6ab0> +<552e> <552f> <6abe> +<5531> <5532> <6ad5> +<5536> <5537> <6b06> +<5544> <5545> <6b9f> +<5546> <5547> <6ba2> +<554a> <554b> <6bb8> +<554c> <554d> <6bc3> +<5552> <5554> <6c26> +<557f> <5580> <6ead> +<5587> <5588> <6eed> +<55b3> <55b4> <71bf> +<55b8> <55b9> <7208> +<55c3> <55c4> <727b> +<55c8> <55c9> <72d5> +<55d2> <55d5> <735d> +<55e6> <55e7> <73ff> +<55ea> <55eb> <7467> +<55f1> <55f2> <74b1> +<5607> <5608> <757b> +<5610> <5611> <7639> +<5616> <5617> <768c> +<5619> <561a> <76a2> +<5622> <5623> <7714> +<5629> <562a> <7756> +<562c> <562d> <7773> +<5640> <5641> <7860> +<5673> <5674> <7a34> +<5687> <5688> <7b3f> +<5691> <5692> <7bba> +<5697> <5698> <7bf4> +<5699> <569a> <7bf9> +<56a4> <56a5> <7c39> +<56c0> <56c3> <7dc3> +<56c4> <56c5> <7dcd> +<56d5> <56d6> <7e9d> +<56e7> <56e8> <801f> +<570a> <570c> <81f0> +<5719> <571a> <8280> +<571f> <5720> <829a> +<5726> <5727> <830a> +<5728> <5729> <831e> +<5731> <5732> <834d> +<574e> <574f> <84a9> +<5750> <5751> <84c7> +<5755> <5756> <8502> +<5763> <5764> <855c> +<5765> <5766> <855f> +<5770> <5772> <85bd> +<5779> <577a> <860d> +<5780> <5781> <8658> +<5783> <5784> <8660> +<578d> <578e> <86b4> +<579e> <579f> <873c> +<57a4> <57a7> <8783> +<57c1> <57c2> <8848> +<57ce> <57cf> <88cb> +<57d4> <57d5> <8915> +<57e8> <57e9> <899b> +<57f1> <57f2> <8a04> +<57f7> <57f8> <8a2b> +<5801> <5802> <8a76> +<5803> <5804> <8a7a> +<5815> <5817> <8ad3> +<582d> <582e> <8c63> +endbfrange + +58 beginbfrange +<5830> <5831> <8c75> +<5833> <5834> <8c86> +<5837> <5838> <8c9b> +<5856> <5857> <8e04> +<585a> <585b> <8e37> +<585e> <585f> <8e5d> +<5861> <5862> <8e82> +<5868> <5869> <8ec3> +<5871> <5872> <8f0f> +<5874> <5875> <8f20> +<587d> <587e> <8f52> +<587f> <5880> <8f5d> +<588c> <588e> <9028> +<588f> <5890> <9033> +<5899> <589a> <90d8> +<58ad> <58ae> <9193> +<58b3> <58b4> <91d3> +<58b6> <58b7> <91e9> +<58bb> <58bc> <9204> +<58be> <58bf> <9212> +<58c1> <58c2> <921c> +<58c3> <58c5> <9224> +<58c6> <58c8> <922e> +<58c9> <58ca> <9235> +<58cf> <58d0> <925c> +<58d2> <58d4> <926e> +<58db> <58dc> <92a4> +<58e5> <58e6> <92dc> +<58fe> <58ff> <9380> +<5908> <590a> <93b4> +<590b> <590c> <93c4> +<5924> <5925> <959d> +<592c> <592d> <9625> +<592f> <5930> <9639> +<5932> <5933> <9656> +<5944> <5945> <9777> +<594d> <594e> <97c4> +<5956> <5957> <97f7> +<597a> <597c> <99ea> +<597d> <597e> <99f4> +<597f> <5980> <99fd> +<5988> <5989> <9a4a> +<5999> <599a> <9af2> +<599e> <599f> <9aff> +<59a0> <59a1> <9b04> +<59a6> <59a7> <9b39> +<59a9> <59aa> <9b56> +<59ae> <59af> <9b6d> +<59cc> <59cd> <9d33> +<59d1> <59d2> <9d53> +<59d7> <59d8> <9d92> +<59da> <59db> <9d97> +<59e0> <59e1> <9dd4> +<59e7> <59e9> <9e10> +<59ec> <59ed> <9e8e> +<59f6> <59f7> <9eec> +<5a03> <5a04> <9f43> +<5a0d> <5a0e> <9f91> +endbfrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan2-0 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan2-0 new file mode 100644 index 00000000000..d656a2fe992 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Japan2-0 @@ -0,0 +1,104 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Japan2 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan2) def + /Supplement 0 def +end def + +/CMapName /Adobe-Japan2-0 def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 220 def +/XUID [1 10 25426] def + +/WMode 0 def + +/CIDCount 6068 def + +1 begincodespacerange + <0000> <17FF> +endcodespacerange + +24 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17b3> 5888 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-0 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-0 new file mode 100644 index 00000000000..ec0ed639298 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-0 @@ -0,0 +1,116 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Korea1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 0 def +end def + +/CMapName /Adobe-Korea1-0 def +/CMapVersion 9.003 def +/CMapType 1 def + +/XUID [1 10 25408] def + +/WMode 0 def + +/CIDCount 9333 def + +1 begincodespacerange + <0000> <24FF> +endcodespacerange + +37 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <2474> 9216 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-1 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-1 new file mode 100644 index 00000000000..a95719022d5 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-1 @@ -0,0 +1,151 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /Adobe-Korea1-1 def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 330 def +/XUID [1 10 25418] def + +/WMode 0 def + +/CIDCount 18155 def + +1 begincodespacerange + <0000> <46FF> +endcodespacerange + +71 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ea> 17920 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-2 new file mode 100644 index 00000000000..cb212850d4b --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-2 @@ -0,0 +1,151 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity) +%%Title: (Identity Adobe Korea1 2) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 2 def +end def + +/CMapName /Adobe-Korea1-2 def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25541] def + +/WMode 0 def + +/CIDCount 18352 def + +1 begincodespacerange + <0000> <47FF> +endcodespacerange + +72 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0200> <02ff> 512 +<0300> <03ff> 768 +<0400> <04ff> 1024 +<0500> <05ff> 1280 +<0600> <06ff> 1536 +<0700> <07ff> 1792 +<0800> <08ff> 2048 +<0900> <09ff> 2304 +<0a00> <0aff> 2560 +<0b00> <0bff> 2816 +<0c00> <0cff> 3072 +<0d00> <0dff> 3328 +<0e00> <0eff> 3584 +<0f00> <0fff> 3840 +<1000> <10ff> 4096 +<1100> <11ff> 4352 +<1200> <12ff> 4608 +<1300> <13ff> 4864 +<1400> <14ff> 5120 +<1500> <15ff> 5376 +<1600> <16ff> 5632 +<1700> <17ff> 5888 +<1800> <18ff> 6144 +<1900> <19ff> 6400 +<1a00> <1aff> 6656 +<1b00> <1bff> 6912 +<1c00> <1cff> 7168 +<1d00> <1dff> 7424 +<1e00> <1eff> 7680 +<1f00> <1fff> 7936 +<2000> <20ff> 8192 +<2100> <21ff> 8448 +<2200> <22ff> 8704 +<2300> <23ff> 8960 +<2400> <24ff> 9216 +<2500> <25ff> 9472 +<2600> <26ff> 9728 +<2700> <27ff> 9984 +<2800> <28ff> 10240 +<2900> <29ff> 10496 +<2a00> <2aff> 10752 +<2b00> <2bff> 11008 +<2c00> <2cff> 11264 +<2d00> <2dff> 11520 +<2e00> <2eff> 11776 +<2f00> <2fff> 12032 +<3000> <30ff> 12288 +<3100> <31ff> 12544 +<3200> <32ff> 12800 +<3300> <33ff> 13056 +<3400> <34ff> 13312 +<3500> <35ff> 13568 +<3600> <36ff> 13824 +<3700> <37ff> 14080 +<3800> <38ff> 14336 +<3900> <39ff> 14592 +<3a00> <3aff> 14848 +<3b00> <3bff> 15104 +<3c00> <3cff> 15360 +<3d00> <3dff> 15616 +<3e00> <3eff> 15872 +<3f00> <3fff> 16128 +<4000> <40ff> 16384 +<4100> <41ff> 16640 +<4200> <42ff> 16896 +<4300> <43ff> 17152 +<4400> <44ff> 17408 +<4500> <45ff> 17664 +<4600> <46ff> 17920 +<4700> <47af> 18176 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-UCS2 b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-UCS2 new file mode 100644 index 00000000000..63c07866ced --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Adobe-Korea1-UCS2 @@ -0,0 +1,9267 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Adobe-Korea1-UCS2) +%%Title: (Adobe-Korea1-UCS2 Adobe Korea1 2) +%%Version: 5.001 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Adobe_Korea1_UCS2) def + /Supplement 2 def +end def + +/CMapName /Adobe-Korea1-UCS2 def + +/CMapVersion 5.001 def +/CMapType 2 def + +/XUID [1 10 25335 1212] def + +/WMode 0 def + +1 begincodespacerange + <0000> +endcodespacerange + +100 beginbfchar +<0000> +<0060> <20A9> +<0061> <2010> +<0062> <00A9> +<0063> <2122> +<0064> <22EF> +<0068> <00B7> +<006B> <00A8> +<006C> <3003> +<006F> <2016> +<0070> +<0071> <223C> +<0082> <00B1> +<0083> <00D7> +<0084> <00F7> +<0085> <2260> +<0088> <221E> +<0089> <2234> +<008A> <00B0> +<008D> <2103> +<008E> <212B> +<0091> +<0092> <2642> +<0093> <2640> +<0094> <2220> +<0095> <22A5> +<0096> <2312> +<0097> <2202> +<0098> <2207> +<0099> <2261> +<009A> <2252> +<009B> <00A7> +<009C> <203B> +<009D> <2606> +<009E> <2605> +<009F> <25CB> +<00A0> <25CF> +<00A1> <25CE> +<00A2> <25C7> +<00A3> <25C6> +<00A4> <25A1> +<00A5> <25A0> +<00A6> <25B3> +<00A7> <25B2> +<00A8> <25BD> +<00A9> <25BC> +<00AA> <2192> +<00AF> <3013> +<00B2> <221A> +<00B3> <223D> +<00B4> <221D> +<00B5> <2235> +<00B8> <2208> +<00B9> <220B> +<00BE> <222A> +<00BF> <2229> +<00C2> +<00C3> <21D2> +<00C4> <21D4> +<00C5> <2200> +<00C6> <2203> +<00C7> <00B4> +<00C8> <02DC> +<00C9> <02C7> +<00CA> <02D8> +<00CB> <02DD> +<00CC> <02DA> +<00CD> <02D9> +<00CE> <00B8> +<00CF> <02DB> +<00D0> <00A1> +<00D1> <00BF> +<00D2> <2236> +<00D3> <222E> +<00D4> <2211> +<00D5> <220F> +<00D6> <00A4> +<00D7> <2109> +<00D8> <2030> +<00D9> <25C1> +<00DA> <25C0> +<00DB> <25B7> +<00DC> <25B6> +<00DD> <2664> +<00E0> <2665> +<00E1> <2667> +<00E2> <2663> +<00E3> <2299> +<00E4> <25C8> +<00E5> <25A3> +<00E8> <2592> +<00EB> <25A8> +<00EC> <25A7> +<00ED> <25A6> +<00EE> <25A9> +<00EF> <2668> +<00F0> <260F> +<00F1> <260E> +<00F2> <261C> +<00F3> <261E> +endbfchar + +100 beginbfchar +<00F4> <00B6> +<00F7> <2195> +<00F8> <2197> +<00F9> <2199> +<00FA> <2196> +<00FB> <2198> +<00FC> <266D> +<00FF> <266C> +<0100> <327F> +<0101> <321C> +<0102> <2116> +<0103> <33C7> +<0104> <2122> +<0105> <33C2> +<0106> <33D8> +<0107> <2121> +<0143> +<0165> +<0207> <2500> +<0208> <2502> +<0209> <250C> +<020A> <2510> +<020B> <2518> +<020C> <2514> +<020D> <251C> +<020E> <252C> +<020F> <2524> +<0210> <2534> +<0211> <253C> +<0212> <2501> +<0213> <2503> +<0214> <250F> +<0215> <2513> +<0216> <251B> +<0217> <2517> +<0218> <2523> +<0219> <2533> +<021A> <252B> +<021B> <253B> +<021C> <254B> +<021D> <2520> +<021E> <252F> +<021F> <2528> +<0220> <2537> +<0221> <253F> +<0222> <251D> +<0223> <2530> +<0224> <2525> +<0225> <2538> +<0226> <2542> +<0227> <2512> +<0228> <2511> +<0229> <251A> +<022A> <2519> +<022B> <2516> +<022C> <2515> +<022D> <250E> +<022E> <250D> +<024E> <2113> +<024F> <3398> +<0250> <33C4> +<025F> <33CA> +<0263> <33CF> +<0266> <33C8> +<0283> <2126> +<0289> <33D6> +<028A> <33C5> +<028E> <33DB> +<0293> <33DD> +<0294> <33D0> +<0295> <33D3> +<0296> <33C3> +<0297> <33C9> +<0298> <33DC> +<0299> <33C6> +<029A> <00C6> +<029B> <00D0> +<029C> <00AA> +<029D> <0126> +<029E> <0132> +<029F> <013F> +<02A0> <0141> +<02A1> <00D8> +<02A2> <0152> +<02A3> <00BA> +<02A4> <00DE> +<02A5> <0166> +<02A6> <014A> +<02EC> <00BD> +<02EF> <00BC> +<02F0> <00BE> +<02F5> <00E6> +<02F6> <0111> +<02F7> <00F0> +<02F8> <0127> +<02F9> <0131> +<02FA> <0133> +<02FB> <0138> +<02FC> <0140> +<02FD> <0142> +endbfchar + +100 beginbfchar +<02FE> <00F8> +<02FF> <0153> +<0300> <00DF> +<0301> <00FE> +<0302> <0167> +<0303> <014B> +<0304> <0149> +<034A> <00B9> +<034D> <2074> +<034E> <207F> +<0402> <0401> +<0423> <0451> +<0440> +<0452> +<0453> +<045B> +<045C> +<045D> +<045E> +<045F> +<0460> +<0461> +<0464> +<0467> +<0472> +<0473> +<047C> +<0484> +<0485> +<0486> +<0487> +<0488> +<0489> +<048C> +<048F> +<0490> +<0494> +<0499> +<049A> +<049B> +<049E> +<049F> +<04A0> +<04A1> +<04A2> +<04A3> +<04A8> +<04A9> +<04AC> +<04AD> +<04AE> +<04AF> +<04B0> +<04B1> +<04B2> +<04B5> +<04BD> +<04C2> +<04C3> +<04C6> +<04C7> +<04CA> +<04CB> +<04CE> +<04CF> +<04D0> +<04D1> +<04D4> +<04DA> +<04DB> +<04DC> +<04DF> +<04E2> +<04E5> +<04E8> +<04EC> +<04ED> +<04EE> +<04F4> +<04F7> +<04F8> +<0500> +<0504> +<0505> +<050D> +<050E> +<050F> +<0510> +<0511> +<0512> +<0513> +<0516> +<0517> +<051A> +<051B> +<051C> +<051F> +<0525> +<052A> +<052B> +endbfchar + +100 beginbfchar +<052C> +<052D> +<0530> +<0531> +<0534> +<0535> +<0539> +<053C> +<053D> +<0542> +<0543> +<0546> +<0547> +<0548> +<0549> +<054C> +<054F> +<0550> +<0551> +<0552> +<0556> +<0557> +<0558> +<055B> +<055C> +<055F> +<0560> +<0564> +<0570> +<0574> +<0575> +<057D> +<057E> +<057F> +<0580> +<0585> +<0590> +<0591> +<0599> +<059A> +<059F> +<05A0> +<05A1> +<05A4> +<05A5> +<05A6> +<05A9> +<05AA> +<05AE> +<05AF> +<05B0> +<05B1> +<05B2> +<05B3> +<05B6> +<05B9> +<05BA> +<05BB> +<05BC> +<05BD> +<05C0> +<05C5> +<05C6> +<05C7> +<05C8> +<05C9> +<05CA> +<05CB> +<05CC> +<05D1> +<05D4> +<05D7> +<05DD> +<05E0> +<05E1> +<05E2> +<05E3> +<05E6> +<05E7> +<05E8> +<05EB> +<05EC> +<05ED> +<05F1> +<05FF> +<0602> +<0603> +<0609> +<060D> +<0614> +<0615> +<0616> +<0617> +<061A> +<061B> +<0621> +<0622> +<0623> +<0626> +<0627> +endbfchar + +100 beginbfchar +<062A> +<062D> +<062E> +<0631> +<0632> +<0633> +<0634> +<0635> +<0636> +<0637> +<0638> +<0639> +<063A> +<063B> +<063C> +<063F> +<0640> +<0643> +<0644> +<0647> +<0648> +<0649> +<064A> +<064B> +<064C> +<064D> +<064E> +<064F> +<0650> +<0651> +<0652> +<0653> +<0654> +<0655> +<0656> +<0657> +<065A> +<065D> +<0660> +<0661> +<0662> +<0665> +<0670> +<0671> +<067A> +<067B> +<0683> +<0684> +<068F> +<0690> +<0696> +<0697> +<069A> +<069B> +<069C> +<069D> +<069E> +<069F> +<06A0> +<06A1> +<06A4> +<06A5> +<06A8> +<06A9> +<06AA> +<06AB> +<06AC> +<06AF> +<06B2> +<06B7> +<06B8> +<06B9> +<06BA> +<06BD> +<06BE> +<06BF> +<06C2> +<06C3> +<06C6> +<06C7> +<06D2> +<06D3> +<06DB> +<06DC> +<06DD> +<06E0> +<06E1> +<06EA> +<06EB> +<06EE> +<06EF> +<06F2> +<06F3> +<06F9> +<06FA> +<06FB> +<06FC> +<06FF> +<0700> +<0703> +endbfchar + +100 beginbfchar +<0704> +<0705> +<0706> +<0707> +<0708> +<0709> +<070A> +<070B> +<070E> +<070F> +<0710> +<0711> +<0712> +<0713> +<0714> +<0715> +<0718> +<0719> +<071C> +<071D> +<071E> +<071F> +<0720> +<0723> +<0724> +<0725> +<0726> +<0727> +<072A> +<072B> +<072E> +<072F> +<0732> +<0733> +<0736> +<073D> +<073E> +<0741> +<0742> +<0745> +<074D> +<0750> +<0754> +<0755> +<075E> +<075F> +<0762> +<0763> +<0764> +<0767> +<076D> +<076E> +<0776> +<0777> +<077B> +<077C> +<0781> +<0782> +<0785> +<0786> +<0787> +<0788> +<078B> +<078C> +<078D> +<078E> +<078F> +<0790> +<0791> +<0792> +<0793> +<0794> +<0795> +<0799> +<07A0> +<07A1> +<07A2> +<07A5> +<07A6> +<07A7> +<07A8> +<07A9> +<07AA> +<07AB> +<07AC> +<07AD> +<07AE> +<07AF> +<07B0> +<07B1> +<07B2> +<07B3> +<07B4> +<07B5> +<07B6> +<07B9> +<07BC> +<07C2> +<07C3> +<07D0> +endbfchar + +100 beginbfchar +<07D1> +<07D2> +<07D5> +<07D6> +<07DC> +<07DF> +<07E0> +<07E3> +<07E6> +<07E9> +<07EE> +<07F8> +<07F9> +<07FA> +<07FE> +<07FF> +<0800> +<0804> +<0805> +<0808> +<0809> +<080A> +<080B> +<080C> +<080D> +<080E> +<0811> +<0812> +<0815> +<0816> +<0819> +<0820> +<0821> +<0824> +<0825> +<0826> +<0827> +<082A> +<082B> +<082C> +<082D> +<082E> +<082F> +<0830> +<0831> +<0832> +<0835> +<0836> +<0839> +<083C> +<083D> +<083E> +<0841> +<0847> +<0848> +<0849> +<0852> +<0853> +<085B> +<085E> +<0861> +<0865> +<0866> +<0870> +<0871> +<0874> +<0875> +<0876> +<0877> +<087A> +<087B> +<087C> +<087D> +<087E> +<087F> +<0880> +<0881> +<0882> +<0883> +<0888> +<0889> +<088C> +<088D> +<089B> +<089E> +<089F> +<08A7> +<08A8> +<08AB> +<08AC> +<08AD> +<08AE> +<08AF> +<08B0> +<08B1> +<08C0> +<08C3> +<08C4> +<08CC> +<08CD> +endbfchar + +100 beginbfchar +<08D3> +<08D4> +<08D5> +<08D6> +<08DA> +<08DB> +<08DC> +<08DF> +<08E0> +<08E1> +<08E4> +<08E5> +<08E6> +<08E7> +<08E8> +<08E9> +<08EA> +<08ED> +<08EE> +<08EF> +<08F2> +<08F5> +<08F6> +<08F9> +<08FA> +<08FD> +<0902> +<0903> +<0904> +<0907> +<0908> +<090B> +<090C> +<090D> +<090E> +<0911> +<0912> +<0915> +<0916> +<0919> +<091A> +<091B> +<091C> +<091F> +<0924> +<0925> +<0928> +<092E> +<092F> +<0930> +<0935> +<093D> +<093E> +<0943> +<0946> +<0947> +<0948> +<094D> +<094E> +<094F> +<0950> +<0953> +<0956> +<0959> +<095C> +<095D> +<095E> +<095F> +<0960> +<0961> +<0962> +<0965> +<0968> +<0969> +<096C> +<096D> +<096E> +<096F> +<0970> +<0971> +<0972> +<0975> +<0976> +<0977> +<097B> +<097C> +<097D> +<097E> +<0981> +<0982> +<0985> +<0986> +<0999> +<099A> +<09A2> +<09A3> +<09A4> +<09A7> +<09A8> +<09A9> +endbfchar + +100 beginbfchar +<09AC> +<09AD> +<09AE> +<09BE> +<09BF> +<09C2> +<09C3> +<09C6> +<09C7> +<09CB> +<09CC> +<09D9> +<09DA> +<09E1> +<09E5> +<09E9> +<09EA> +<09EB> +<09EE> +<09EF> +<09F7> +<09F8> +<09F9> +<09FA> +<09FD> +<09FE> +<09FF> +<0A00> +<0A01> +<0A02> +<0A05> +<0A06> +<0A09> +<0A0A> +<0A0D> +<0A13> +<0A14> +<0A17> +<0A18> +<0A1F> +<0A20> +<0A23> +<0A26> +<0A27> +<0A2A> +<0A2B> +<0A2E> +<0A2F> +<0A32> +<0A33> +<0A34> +<0A37> +<0A38> +<0A39> +<0A3C> +<0A45> +<0A46> +<0A47> +<0A48> +<0A4B> +<0A56> +<0A59> +<0A5D> +<0A66> +<0A67> +<0A6F> +<0A70> +<0A71> +<0A72> +<0A73> +<0A74> +<0A75> +<0A76> +<0A79> +<0A7A> +<0A7B> +<0A7E> +<0A83> +<0A84> +<0A87> +<0A88> +<0A89> +<0A8A> +<0A8B> +<0A90> +<0A93> +<0A94> +<0A95> +<0A98> +<0A9F> +<0AA0> +<0AA1> +<0AA2> +<0AA3> +<0AA6> +<0AA7> +<0AA8> +<0AAB> +<0AAC> +<0AAF> +endbfchar + +100 beginbfchar +<0AB0> +<0AB3> +<0AB9> +<0ABA> +<0ABB> +<0ABC> +<0ABD> +<0AC0> +<0AC1> +<0AC4> +<0AC5> +<0AC6> +<0AC7> +<0AC8> +<0ACB> +<0ACC> +<0ACF> +<0AD0> +<0AD3> +<0AD6> +<0AD9> +<0AE0> +<0AE1> +<0AE2> +<0AE3> +<0AEB> +<0AEC> +<0AF2> +<0AF3> +<0AF4> +<0AF7> +<0AF8> +<0AFE> +<0AFF> +<0B00> +<0B01> +<0B04> +<0B05> +<0B08> +<0B09> +<0B0A> +<0B0D> +<0B0E> +<0B0F> +<0B10> +<0B11> +<0B12> +<0B13> +<0B16> +<0B19> +<0B1A> +<0B1D> +<0B1E> +<0B21> +<0B22> +<0B23> +<0B24> +<0B25> +<0B26> +<0B29> +<0B2A> +<0B32> +<0B33> +<0B34> +<0B3D> +<0B3E> +<0B44> +<0B45> +<0B46> +<0B47> +<0B48> +<0B49> +<0B4C> +<0B4D> +<0B55> +<0B56> +<0B59> +<0B5A> +<0B5B> +<0B5C> +<0B5D> +<0B5E> +<0B5F> +<0B60> +<0B63> +<0B64> +<0B67> +<0B68> +<0B69> +<0B6A> +<0B6B> +<0B6C> +<0B6D> +<0B6E> +<0B6F> +<0B72> +<0B73> +<0B74> +<0B75> +<0B78> +endbfchar + +100 beginbfchar +<0B79> +<0B7C> +<0B7D> +<0B7E> +<0B7F> +<0B80> +<0B81> +<0B82> +<0B83> +<0B84> +<0B87> +<0B88> +<0B89> +<0B8A> +<0B8B> +<0B8C> +<0B8D> +<0B90> +<0B91> +<0B94> +<0B95> +<0B98> +<0B9E> +<0B9F> +<0BA2> +<0BA3> +<0BA6> +<0BA7> +<0BAA> +<0BAB> +<0BB3> +<0BB6> +<0BC0> +<0BC1> +<0BC4> +<0BC5> +<0BC6> +<0BC7> +<0BC8> +<0BCE> +<0BD1> +<0BD2> +<0BD5> +<0BD6> +<0BD9> +<0BDA> +<0BDB> +<0BDC> +<0BDD> +<0BDE> +<0BDF> +<0BE0> +<0BE1> +<0BE4> +<0BE5> +<0BE8> +<0BE9> +<0BEA> +<0BEB> +<0BEC> +<0BED> +<0BEE> +<0BEF> +<0BF2> +<0BF3> +<0BF6> +<0BF7> +<0BF8> +<0BF9> +<0BFA> +<0BFB> +<0BFE> +<0BFF> +<0C02> +<0C05> +<0C06> +<0C09> +<0C0A> +<0C0D> +<0C17> +<0C18> +<0C1E> +<0C1F> +<0C22> +<0C23> +<0C24> +<0C2C> +<0C2D> +<0C30> +<0C31> +<0C32> +<0C33> +<0C34> +<0C35> +<0C36> +<0C39> +<0C3A> +<0C3D> +<0C3E> +<0C3F> +endbfchar + +100 beginbfchar +<0C40> +<0C41> +<0C42> +<0C43> +<0C44> +<0C45> +<0C46> +<0C47> +<0C4A> +<0C4B> +<0C4E> +<0C4F> +<0C50> +<0C51> +<0C52> +<0C55> +<0C56> +<0C59> +<0C5A> +<0C5B> +<0C5C> +<0C5D> +<0C5E> +<0C61> +<0C64> +<0C67> +<0C68> +<0C69> +<0C6A> +<0C6F> +<0C70> +<0C73> +<0C74> +<0C78> +<0C79> +<0C7A> +<0C80> +<0C83> +<0C84> +<0C8E> +<0C8F> +<0C97> +<0C98> +<0C9B> +<0C9C> +<0C9D> +<0C9E> +<0C9F> +<0CA4> +<0CA5> +<0CA6> +<0CA7> +<0CAA> +<0CAB> +<0CAE> +<0CAF> +<0CB0> +<0CB1> +<0CB2> +<0CB3> +<0CB4> +<0CB5> +<0CB6> +<0CB7> +<0CB8> +<0CBB> +<0CBE> +<0CC1> +<0CC2> +<0CC3> +<0CC4> +<0CC5> +<0CC6> +<0CC7> +<0CC8> +<0CC9> +<0CCA> +<0CCB> +<0CCC> +<0CCD> +<0CCE> +<0CCF> +<0CD0> +<0CD1> +<0CD2> +<0CD5> +<0CD8> +<0CD9> +<0CDC> +<0CDD> +<0CE0> +<0CE1> +<0CE2> +<0CE5> +<0CE6> +<0CE9> +<0CEA> +<0CF0> +<0CF1> +<0CF4> +endbfchar + +100 beginbfchar +<0CF5> +<0CF6> +<0CF9> +<0CFA> +<0CFD> +<0CFE> +<0CFF> +<0D00> +<0D01> +<0D02> +<0D05> +<0D06> +<0D0C> +<0D0D> +<0D0E> +<0D0F> +<0D12> +<0D13> +<0D14> +<0D17> +<0D18> +<0D19> +<0D1C> +<0D1D> +<0D1E> +<0D1F> +<0D22> +<0D23> +<0D24> +<0D27> +<0D28> +<0D29> +<0D2A> +<0D2B> +<0D2C> +<0D2D> +<0D2E> +<0D2F> +<0D30> +<0D33> +<0D34> +<0D35> +<0D36> +<0D37> +<0D38> +<0D39> +<0D3A> +<0D3B> +<0D3C> +<0D3D> +<0D40> +<0D41> +<0D42> +<0D45> +<0D46> +<0D49> +<0D4A> +<0D4D> +<0D4E> +<0D4F> +<0D50> +<0D51> +<0D54> +<0D5B> +<0D5C> +<0D5D> +<0D5E> +<0D5F> +<0D60> +<0D63> +<0D66> +<0D67> +<0D6A> +<0D6B> +<0D6C> <4F3D> +<0D6D> <4F73> +<0D6E> <5047> +<0D6F> <50F9> +<0D70> <52A0> +<0D71> <53EF> +<0D72> <5475> +<0D73> <54E5> +<0D74> <5609> +<0D75> <5AC1> +<0D76> <5BB6> +<0D77> <6687> +<0D7A> <67EF> +<0D7B> <6B4C> +<0D7C> <73C2> +<0D7D> <75C2> +<0D7E> <7A3C> +<0D7F> <82DB> +<0D80> <8304> +<0D81> <8857> +<0D82> <8888> +<0D83> <8A36> +<0D84> <8CC8> +<0D85> <8DCF> +<0D86> <8EFB> +<0D87> <8FE6> +endbfchar + +100 beginbfchar +<0D88> <99D5> +<0D89> <523B> +<0D8A> <5374> +<0D8B> <5404> +<0D8C> <606A> +<0D8D> <6164> +<0D8E> <6BBC> +<0D8F> <73CF> +<0D90> <811A> +<0D91> <89BA> +<0D92> <89D2> +<0D93> <95A3> +<0D94> <4F83> +<0D95> <520A> +<0D96> <58BE> +<0D97> <5978> +<0D98> <59E6> +<0D99> <5E72> +<0D9A> <5E79> +<0D9B> <61C7> +<0D9C> <63C0> +<0D9D> <6746> +<0D9E> <67EC> +<0D9F> <687F> +<0DA0> <6F97> +<0DA1> <764E> +<0DA2> <770B> +<0DA3> <78F5> +<0DA4> <7A08> +<0DA5> <7AFF> +<0DA6> <7C21> +<0DA7> <809D> +<0DA8> <826E> +<0DA9> <8271> +<0DAA> <8AEB> +<0DAB> <9593> +<0DAC> <4E6B> +<0DAD> <559D> +<0DAE> <66F7> +<0DAF> <6E34> +<0DB0> <78A3> +<0DB1> <7AED> +<0DB2> <845B> +<0DB3> <8910> +<0DB4> <874E> +<0DB5> <97A8> +<0DB6> <52D8> +<0DB7> <574E> +<0DB8> <582A> +<0DB9> <5D4C> +<0DBA> <611F> +<0DBB> <61BE> +<0DBC> <6221> +<0DBD> <6562> +<0DBE> <67D1> +<0DBF> <6A44> +<0DC0> <6E1B> +<0DC1> <7518> +<0DC2> <75B3> +<0DC3> <76E3> +<0DC4> <77B0> +<0DC5> <7D3A> +<0DC6> <90AF> +<0DC9> <9F95> +<0DCA> <5323> +<0DCB> <5CAC> +<0DCC> <7532> +<0DCD> <80DB> +<0DCE> <9240> +<0DCF> <9598> +<0DD0> <525B> +<0DD1> <5808> +<0DD2> <59DC> +<0DD3> <5CA1> +<0DD4> <5D17> +<0DD5> <5EB7> +<0DD6> <5F3A> +<0DD7> <5F4A> +<0DD8> <6177> +<0DD9> <6C5F> +<0DDA> <757A> +<0DDB> <7586> +<0DDC> <7CE0> +<0DDD> <7D73> +<0DDE> <7DB1> +<0DDF> <7F8C> +<0DE0> <8154> +<0DE1> <8221> +<0DE2> <8591> +<0DE3> <8941> +<0DE4> <8B1B> +<0DE5> <92FC> +<0DE6> <964D> +<0DE7> <9C47> +<0DE8> <4ECB> +<0DE9> <4EF7> +<0DEA> <500B> +<0DEB> <51F1> +<0DEC> <584F> +<0DED> <6137> +endbfchar + +100 beginbfchar +<0DEE> <613E> +<0DEF> <6168> +<0DF0> <6539> +<0DF1> <69EA> +<0DF2> <6F11> +<0DF3> <75A5> +<0DF4> <7686> +<0DF5> <76D6> +<0DF6> <7B87> +<0DF7> <82A5> +<0DF8> <84CB> +<0DF9> <93A7> +<0DFA> <958B> +<0DFB> <5580> +<0DFC> <5BA2> +<0DFD> <5751> +<0DFE> <7CB3> +<0DFF> <7FB9> +<0E00> <91B5> +<0E01> <5028> +<0E02> <53BB> +<0E03> <5C45> +<0E04> <5DE8> +<0E05> <62D2> +<0E06> <636E> +<0E07> <64DA> +<0E08> <64E7> +<0E09> <6E20> +<0E0A> <70AC> +<0E0B> <795B> +<0E0C> <8DDD> +<0E0D> <8E1E> +<0E0E> <907D> +<0E0F> <9245> +<0E10> <92F8> +<0E11> <4E7E> +<0E12> <4EF6> +<0E13> <5065> +<0E14> <5DFE> +<0E15> <5EFA> +<0E16> <6106> +<0E17> <6957> +<0E18> <8171> +<0E19> <8654> +<0E1A> <8E47> +<0E1B> <9375> +<0E1C> <9A2B> +<0E1D> <4E5E> +<0E1E> <5091> +<0E1F> <6770> +<0E20> <6840> +<0E21> <5109> +<0E22> <528D> +<0E23> <5292> +<0E24> <6AA2> +<0E25> <77BC> +<0E26> <9210> +<0E27> <9ED4> +<0E28> <52AB> +<0E29> <602F> +<0E2A> <8FF2> +<0E2B> <5048> +<0E2C> <61A9> +<0E2D> <63ED> +<0E2E> <64CA> +<0E2F> <683C> +<0E30> <6A84> +<0E31> <6FC0> +<0E32> <8188> +<0E33> <89A1> +<0E34> <9694> +<0E35> <5805> +<0E36> <727D> +<0E37> <72AC> +<0E38> <7504> +<0E39> <7D79> +<0E3A> <7E6D> +<0E3B> <80A9> +<0E3C> <898B> +<0E3D> <8B74> +<0E3E> <9063> +<0E3F> <9D51> +<0E40> <6289> +<0E41> <6C7A> +<0E42> <6F54> +<0E43> <7D50> +<0E44> <7F3A> +<0E45> <8A23> +<0E46> <517C> +<0E47> <614A> +<0E48> <7B9D> +<0E49> <8B19> +<0E4A> <9257> +<0E4B> <938C> +<0E4C> <4EAC> +<0E4D> <4FD3> +<0E4E> <501E> +<0E4F> <50BE> +<0E50> <5106> +<0E51> <52C1> +endbfchar + +100 beginbfchar +<0E52> <52CD> +<0E53> <537F> +<0E54> <5770> +<0E55> <5883> +<0E56> <5E9A> +<0E57> <5F91> +<0E58> <6176> +<0E59> <61AC> +<0E5A> <64CE> +<0E5B> <656C> +<0E5C> <666F> +<0E5D> <66BB> +<0E5E> <66F4> +<0E5F> <6897> +<0E60> <6D87> +<0E61> <7085> +<0E62> <70F1> +<0E63> <749F> +<0E64> <74A5> +<0E65> <74CA> +<0E66> <75D9> +<0E67> <786C> +<0E68> <78EC> +<0E69> <7ADF> +<0E6A> <7AF6> +<0E6B> <7D45> +<0E6C> <7D93> +<0E6D> <8015> +<0E6E> <803F> +<0E6F> <811B> +<0E70> <8396> +<0E71> <8B66> +<0E72> <8F15> +<0E73> <9015> +<0E74> <93E1> +<0E75> <9803> +<0E76> <9838> +<0E77> <9A5A> +<0E78> <9BE8> +<0E79> <4FC2> +<0E7A> <5553> +<0E7B> <583A> +<0E7C> <5951> +<0E7D> <5B63> +<0E7E> <5C46> +<0E7F> <60B8> +<0E80> <6212> +<0E81> <6842> +<0E82> <68B0> +<0E83> <68E8> +<0E84> <6EAA> +<0E85> <754C> +<0E86> <7678> +<0E87> <78CE> +<0E88> <7A3D> +<0E89> <7CFB> +<0E8A> <7E6B> +<0E8B> <7E7C> +<0E8C> <8A08> +<0E8D> <8AA1> +<0E8E> <8C3F> +<0E8F> <968E> +<0E90> <9DC4> +<0E91> <53E4> +<0E92> <53E9> +<0E93> <544A> +<0E94> <5471> +<0E95> <56FA> +<0E96> <59D1> +<0E97> <5B64> +<0E98> <5C3B> +<0E99> <5EAB> +<0E9A> <62F7> +<0E9B> <6537> +<0E9C> <6545> +<0E9D> <6572> +<0E9E> <66A0> +<0E9F> <67AF> +<0EA0> <69C1> +<0EA1> <6CBD> +<0EA2> <75FC> +<0EA3> <7690> +<0EA4> <777E> +<0EA5> <7A3F> +<0EA6> <7F94> +<0EA7> <8003> +<0EA8> <80A1> +<0EA9> <818F> +<0EAA> <82E6> +<0EAB> <82FD> +<0EAC> <83F0> +<0EAD> <85C1> +<0EAE> <8831> +<0EAF> <88B4> +<0EB0> <8AA5> +<0EB1> <8F9C> +<0EB2> <932E> +<0EB3> <96C7> +<0EB4> <9867> +<0EB5> <9AD8> +endbfchar + +100 beginbfchar +<0EB6> <9F13> +<0EB7> <54ED> +<0EB8> <659B> +<0EB9> <66F2> +<0EBA> <688F> +<0EBB> <7A40> +<0EBC> <8C37> +<0EBD> <9D60> +<0EBE> <56F0> +<0EBF> <5764> +<0EC0> <5D11> +<0EC1> <6606> +<0EC2> <68B1> +<0EC3> <68CD> +<0EC4> <6EFE> +<0EC5> <7428> +<0EC6> <889E> +<0EC7> <9BE4> +<0EC8> <6C68> +<0EC9> <9AA8> +<0ECA> <4F9B> +<0ECB> <516C> +<0ECC> <5171> +<0ECD> <529F> +<0ECE> <5B54> +<0ECF> <5DE5> +<0ED0> <6050> +<0ED1> <606D> +<0ED2> <62F1> +<0ED3> <63A7> +<0ED4> <653B> +<0ED5> <73D9> +<0ED6> <7A7A> +<0ED7> <86A3> +<0ED8> <8CA2> +<0ED9> <978F> +<0EDA> <4E32> +<0EDB> <5BE1> +<0EDC> <6208> +<0EDD> <679C> +<0EDE> <74DC> +<0EDF> <79D1> +<0EE0> <83D3> +<0EE1> <8A87> +<0EE2> <8AB2> +<0EE3> <8DE8> +<0EE4> <904E> +<0EE5> <934B> +<0EE6> <9846> +<0EE7> <5ED3> +<0EE8> <69E8> +<0EE9> <85FF> +<0EEA> <90ED> +<0EEB> <51A0> +<0EEC> <5B98> +<0EED> <5BEC> +<0EEE> <6163> +<0EEF> <68FA> +<0EF0> <6B3E> +<0EF1> <704C> +<0EF2> <742F> +<0EF3> <74D8> +<0EF4> <7BA1> +<0EF5> <7F50> +<0EF6> <83C5> +<0EF7> <89C0> +<0EF8> <8CAB> +<0EF9> <95DC> +<0EFA> <9928> +<0EFB> <522E> +<0EFC> <605D> +<0EFD> <62EC> +<0EFE> <9002> +<0EFF> <4F8A> +<0F00> <5149> +<0F01> <5321> +<0F02> <58D9> +<0F03> <5EE3> +<0F04> <66E0> +<0F05> <6D38> +<0F06> <709A> +<0F07> <72C2> +<0F08> <73D6> +<0F09> <7B50> +<0F0A> <80F1> +<0F0B> <945B> +<0F0C> <5366> +<0F0D> <639B> +<0F0E> <7F6B> +<0F0F> <4E56> +<0F10> <5080> +<0F11> <584A> +<0F12> <58DE> +<0F13> <602A> +<0F14> <6127> +<0F15> <62D0> +<0F16> <69D0> +<0F17> <9B41> +<0F18> <5B8F> +<0F19> <7D18> +endbfchar + +100 beginbfchar +<0F1A> <80B1> +<0F1B> <8F5F> +<0F1C> <4EA4> +<0F1D> <50D1> +<0F1E> <54AC> +<0F1F> <55AC> +<0F20> <5B0C> +<0F21> <5DA0> +<0F22> <5DE7> +<0F23> <652A> +<0F24> <654E> +<0F25> <6821> +<0F26> <6A4B> +<0F27> <72E1> +<0F28> <768E> +<0F29> <77EF> +<0F2A> <7D5E> +<0F2B> <7FF9> +<0F2C> <81A0> +<0F2D> <854E> +<0F2E> <86DF> +<0F2F> <8F03> +<0F30> <8F4E> +<0F31> <90CA> +<0F32> <9903> +<0F33> <9A55> +<0F34> <9BAB> +<0F35> <4E18> +<0F36> <4E45> +<0F37> <4E5D> +<0F38> <4EC7> +<0F39> <4FF1> +<0F3A> <5177> +<0F3B> <52FE> +<0F3C> <5340> +<0F3D> <53E3> +<0F3E> <53E5> +<0F3F> <548E> +<0F40> <5614> +<0F41> <5775> +<0F42> <57A2> +<0F43> <5BC7> +<0F44> <5D87> +<0F45> <5ED0> +<0F46> <61FC> +<0F47> <62D8> +<0F48> <6551> +<0F49> <67B8> +<0F4A> <67E9> +<0F4B> <69CB> +<0F4C> <6B50> +<0F4D> <6BC6> +<0F4E> <6BEC> +<0F4F> <6C42> +<0F50> <6E9D> +<0F51> <7078> +<0F52> <72D7> +<0F53> <7396> +<0F54> <7403> +<0F55> <77BF> +<0F56> <77E9> +<0F57> <7A76> +<0F58> <7D7F> +<0F59> <8009> +<0F5A> <81FC> +<0F5B> <8205> +<0F5C> <820A> +<0F5D> <82DF> +<0F5E> <8862> +<0F5F> <8B33> +<0F60> <8CFC> +<0F61> <8EC0> +<0F62> <9011> +<0F63> <90B1> +<0F64> <9264> +<0F65> <92B6> +<0F66> <99D2> +<0F67> <9A45> +<0F68> <9CE9> +<0F69> <9DD7> +<0F6A> <9F9C> +<0F6B> <570B> +<0F6C> <5C40> +<0F6D> <83CA> +<0F6E> <97A0> +<0F6F> <97AB> +<0F70> <9EB4> +<0F71> <541B> +<0F72> <7A98> +<0F73> <7FA4> +<0F74> <88D9> +<0F75> <8ECD> +<0F76> <90E1> +<0F77> <5800> +<0F78> <5C48> +<0F79> <6398> +<0F7A> <7A9F> +<0F7B> <5BAE> +<0F7C> <5F13> +<0F7D> <7A79> +endbfchar + +100 beginbfchar +<0F7E> <7AAE> +<0F7F> <828E> +<0F80> <8EAC> +<0F81> <5026> +<0F82> <5238> +<0F83> <52F8> +<0F84> <5377> +<0F85> <5708> +<0F86> <62F3> +<0F87> <6372> +<0F88> <6B0A> +<0F89> <6DC3> +<0F8A> <7737> +<0F8B> <53A5> +<0F8C> <7357> +<0F8D> <8568> +<0F8E> <8E76> +<0F8F> <95D5> +<0F90> <673A> +<0F91> <6AC3> +<0F92> <6F70> +<0F93> <8A6D> +<0F94> <8ECC> +<0F95> <994B> +<0F96> <6677> +<0F97> <6B78> +<0F98> <8CB4> +<0F99> <9B3C> +<0F9A> <53EB> +<0F9B> <572D> +<0F9C> <594E> +<0F9D> <63C6> +<0F9E> <69FB> +<0F9F> <73EA> +<0FA0> <7845> +<0FA1> <7ABA> +<0FA2> <7AC5> +<0FA3> <7CFE> +<0FA4> <8475> +<0FA5> <898F> +<0FA6> <8D73> +<0FA7> <9035> +<0FA8> <95A8> +<0FA9> <52FB> +<0FAA> <5747> +<0FAB> <7547> +<0FAC> <7B60> +<0FAD> <83CC> +<0FAE> <921E> +<0FAF> <6A58> +<0FB0> <514B> +<0FB1> <524B> +<0FB2> <5287> +<0FB3> <621F> +<0FB4> <68D8> +<0FB5> <6975> +<0FB6> <9699> +<0FB7> <50C5> +<0FB8> <52A4> +<0FB9> <52E4> +<0FBA> <61C3> +<0FBB> <65A4> +<0FBC> <6839> +<0FBD> <69FF> +<0FBE> <747E> +<0FBF> <7B4B> +<0FC0> <82B9> +<0FC1> <83EB> +<0FC2> <89B2> +<0FC3> <8B39> +<0FC4> <8FD1> +<0FC5> <9949> +<0FC6> <4ECA> +<0FC7> <5997> +<0FC8> <64D2> +<0FC9> <6611> +<0FCA> <6A8E> +<0FCB> <7434> +<0FCC> <7981> +<0FCD> <79BD> +<0FCE> <82A9> +<0FD1> <895F> +<0FD2> <9326> +<0FD3> <4F0B> +<0FD4> <53CA> +<0FD5> <6025> +<0FD6> <6271> +<0FD7> <6C72> +<0FD8> <7D1A> +<0FD9> <7D66> +<0FDA> <4E98> +<0FDB> <5162> +<0FDC> <77DC> +<0FDD> <80AF> +<0FDE> <4F01> +<0FDF> <4F0E> +<0FE0> <5176> +<0FE1> <5180> +<0FE2> <55DC> +<0FE3> <5668> +endbfchar + +100 beginbfchar +<0FE4> <573B> +<0FE5> <57FA> +<0FE6> <57FC> +<0FE7> <5914> +<0FE8> <5947> +<0FE9> <5993> +<0FEA> <5BC4> +<0FEB> <5C90> +<0FEC> <5D0E> +<0FED> <5DF1> +<0FEE> <5E7E> +<0FEF> <5FCC> +<0FF0> <6280> +<0FF1> <65D7> +<0FF2> <65E3> +<0FF5> <675E> +<0FF6> <68CB> +<0FF7> <68C4> +<0FF8> <6A5F> +<0FF9> <6B3A> +<0FFA> <6C23> +<0FFB> <6C7D> +<0FFC> <6C82> +<0FFD> <6DC7> +<0FFE> <7398> +<0FFF> <7426> +<1000> <742A> +<1001> <7482> +<1002> <74A3> +<1003> <7578> +<1004> <757F> +<1005> <7881> +<1006> <78EF> +<1007> <7941> +<100A> <797A> +<100B> <7B95> +<100C> <7D00> +<100D> <7DBA> +<100E> <7F88> +<100F> <8006> +<1010> <802D> +<1011> <808C> +<1012> <8A18> +<1013> <8B4F> +<1014> <8C48> +<1015> <8D77> +<1016> <9321> +<1017> <9324> +<1018> <98E2> +<1019> <9951> +<101C> <9A65> +<101D> <9E92> +<101E> <7DCA> +<101F> <4F76> +<1020> <5409> +<1021> <62EE> +<1022> <6854> +<1023> <91D1> +<1024> <55AB> +<1025> <513A> +<1026> <5A1C> +<1027> <61E6> +<1028> <62CF> +<1029> <62FF> +<102A> <90A3> +<102B> <8AFE> +<102C> <6696> +<102D> <7156> +<102E> <96E3> +<102F> <634F> +<1030> <637A> +<1031> <5357> +<1032> <678F> +<1033> <6960> +<1034> <6E73> +<1035> <7537> +<1036> <7D0D> +<1037> <8872> +<1038> <56CA> +<1039> <5A18> +<103A> <4E43> +<103B> <5167> +<103C> <5948> +<103D> <67F0> +<103E> <8010> +<103F> <5973> +<1040> <5E74> +<1041> <649A> +<1042> <79CA> +<1043> <5FF5> +<1044> <606C> +<1045> <62C8> +<1046> <637B> +<1047> <5BE7> +<1048> <5BD7> +<1049> <52AA> +<104A> <5974> +<104B> <5F29> +<104C> <6012> +<104D> <7459> +endbfchar + +100 beginbfchar +<104E> <99D1> +<104F> <6FC3> +<1050> <81BF> +<1051> <8FB2> +<1052> <60F1> +<1053> <8166> +<1054> <5C3F> +<1055> <5AE9> +<1056> <8A25> +<1057> <677B> +<1058> <7D10> +<1059> <80FD> +<105A> <5C3C> +<105B> <6CE5> +<105C> <533F> +<105D> <6EBA> +<105E> <591A> +<105F> <8336> +<1060> <4E39> +<1061> <4EB6> +<1062> <4F46> +<1063> <55AE> +<1064> <5718> +<1065> <58C7> +<1066> <5F56> +<1067> <65B7> +<1068> <65E6> +<1069> <6A80> +<106A> <6BB5> +<106B> <6E4D> +<106C> <77ED> +<106D> <7AEF> +<106E> <7C1E> +<106F> <7DDE> +<1070> <86CB> +<1071> <8892> +<1072> <9132> +<1073> <935B> +<1074> <64BB> +<1075> <6FBE> +<1076> <737A> +<1077> <75B8> +<1078> <9054> +<1079> <5556> +<107A> <574D> +<107B> <61BA> +<107C> <64D4> +<107D> <66C7> +<107E> <6DE1> +<107F> <6E5B> +<1080> <6F6D> +<1081> <6FB9> +<1082> <75F0> +<1083> <8043> +<1084> <81BD> +<1085> <8541> +<1086> <8983> +<1087> <8AC7> +<1088> <8B5A> +<1089> <931F> +<108A> <6C93> +<108B> <7553> +<108C> <7B54> +<108D> <8E0F> +<108E> <905D> +<108F> <5510> +<1090> <5802> +<1091> <5858> +<1092> <5E62> +<1093> <6207> +<1094> <649E> +<1095> <68E0> +<1096> <7576> +<1097> <7CD6> +<1098> <87B3> +<1099> <9EE8> +<109A> <4EE3> +<109B> <5788> +<109C> <576E> +<109D> <5927> +<109E> <5C0D> +<109F> <5CB1> +<10A0> <5E36> +<10A1> <5F85> +<10A2> <6234> +<10A3> <64E1> +<10A4> <73B3> +<10A5> <81FA> +<10A6> <888B> +<10A7> <8CB8> +<10A8> <968A> +<10A9> <9EDB> +<10AA> <5B85> +<10AB> <5FB7> +<10AC> <60B3> +<10AD> <5012> +<10AE> <5200> +<10AF> <5230> +<10B0> <5716> +<10B1> <5835> +endbfchar + +100 beginbfchar +<10B2> <5857> +<10B3> <5C0E> +<10B4> <5C60> +<10B5> <5CF6> +<10B6> <5D8B> +<10B7> <5EA6> +<10B8> <5F92> +<10B9> <60BC> +<10BA> <6311> +<10BB> <6389> +<10BC> <6417> +<10BD> <6843> +<10BE> <68F9> +<10BF> <6AC2> +<10C0> <6DD8> +<10C1> <6E21> +<10C2> <6ED4> +<10C3> <6FE4> +<10C4> <71FE> +<10C5> <76DC> +<10C6> <7779> +<10C7> <79B1> +<10C8> <7A3B> +<10C9> <8404> +<10CA> <89A9> +<10CB> <8CED> +<10CC> <8DF3> +<10CD> <8E48> +<10CE> <9003> +<10CF> <9014> +<10D0> <9053> +<10D1> <90FD> +<10D2> <934D> +<10D3> <9676> +<10D4> <97DC> +<10D5> <6BD2> +<10D6> <7006> +<10D7> <7258> +<10D8> <72A2> +<10D9> <7368> +<10DA> <7763> +<10DB> <79BF> +<10DC> <7BE4> +<10DD> <7E9B> +<10DE> <8B80> +<10DF> <58A9> +<10E0> <60C7> +<10E1> <6566> +<10E2> <65FD> +<10E3> <66BE> +<10E4> <6C8C> +<10E5> <711E> +<10E6> <71C9> +<10E7> <8C5A> +<10E8> <9813> +<10E9> <4E6D> +<10EA> <7A81> +<10EB> <4EDD> +<10EC> <51AC> +<10ED> <51CD> +<10EE> <52D5> +<10EF> <540C> +<10F0> <61A7> +<10F1> <6771> +<10F2> <6850> +<10F3> <68DF> +<10F4> <6D1E> +<10F5> <6F7C> +<10F6> <75BC> +<10F7> <77B3> +<10F8> <7AE5> +<10F9> <80F4> +<10FA> <8463> +<10FB> <9285> +<10FC> <515C> +<10FD> <6597> +<10FE> <675C> +<10FF> <6793> +<1100> <75D8> +<1101> <7AC7> +<1102> <8373> +<1103> <8C46> +<1104> <9017> +<1105> <982D> +<1106> <5C6F> +<1107> <81C0> +<1108> <829A> +<1109> <9041> +<110A> <906F> +<110B> <920D> +<110C> <5F97> +<110D> <5D9D> +<110E> <6A59> +<110F> <71C8> +<1110> <767B> +<1111> <7B49> +<1112> <85E4> +<1113> <8B04> +<1114> <9127> +<1115> <9A30> +endbfchar + +100 beginbfchar +<1116> <5587> +<1117> <61F6> +<1118> <7669> +<1119> <7F85> +<111A> <863F> +<111B> <87BA> +<111C> <88F8> +<111D> <908F> +<111E> <6D1B> +<111F> <70D9> +<1120> <73DE> +<1121> <7D61> +<1122> <843D> +<1123> <916A> +<1124> <99F1> +<1125> <4E82> +<1126> <5375> +<1127> <6B04> +<1128> <6B12> +<1129> <703E> +<112A> <721B> +<112B> <862D> +<112C> <9E1E> +<112D> <524C> +<112E> <8FA3> +<112F> <5D50> +<1130> <64E5> +<1131> <652C> +<1132> <6B16> +<1133> <6FEB> +<1134> <7C43> +<1135> <7E9C> +<1136> <85CD> +<1137> <8964> +<1138> <89BD> +<1139> <62C9> +<113A> <81D8> +<113B> <881F> +<113C> <5ECA> +<113D> <6717> +<113E> <6D6A> +<113F> <72FC> +<1140> <7405> +<1141> <746F> +<1142> <8782> +<1143> <90DE> +<1144> <4F86> +<1145> <5D0D> +<1146> <5FA0> +<1147> <840A> +<1148> <51B7> +<1149> <63A0> +<114A> <7565> +<114B> <4EAE> +<114C> <5006> +<114D> <5169> +<114E> <51C9> +<114F> <6881> +<1150> <6A11> +<1151> <7CAE> +<1152> <7CB1> +<1153> <7CE7> +<1154> <826F> +<1155> <8AD2> +<1156> <8F1B> +<1157> <91CF> +<1158> <4FB6> +<1159> <5137> +<115A> <52F5> +<115B> <5442> +<115C> <5EEC> +<115D> <616E> +<115E> <623E> +<115F> <65C5> +<1160> <6ADA> +<1161> <6FFE> +<1162> <792A> +<1163> <85DC> +<1164> <8823> +<1165> <95AD> +<1166> <9A62> +<1167> <9A6A> +<1168> <9E97> +<1169> <9ECE> +<116A> <529B> +<116B> <66C6> +<116C> <6B77> +<116D> <701D> +<116E> <792B> +<116F> <8F62> +<1170> <9742> +<1171> <6190> +<1172> <6200> +<1173> <6523> +<1174> <6F23> +<1175> <7149> +<1176> <7489> +<1177> <7DF4> +<1178> <806F> +<1179> <84EE> +endbfchar + +100 beginbfchar +<117A> <8F26> +<117B> <9023> +<117C> <934A> +<117D> <51BD> +<117E> <5217> +<117F> <52A3> +<1180> <6D0C> +<1181> <70C8> +<1182> <88C2> +<1183> <5EC9> +<1184> <6582> +<1185> <6BAE> +<1186> <6FC2> +<1187> <7C3E> +<1188> <7375> +<1189> <4EE4> +<118A> <4F36> +<118B> <56F9> +<118C> <5CBA> +<118D> <5DBA> +<118E> <601C> +<118F> <73B2> +<1190> <7B2D> +<1191> <7F9A> +<1192> <7FCE> +<1193> <8046> +<1194> <901E> +<1195> <9234> +<1196> <96F6> +<1197> <9748> +<1198> <9818> +<1199> <9F61> +<119A> <4F8B> +<119B> <6FA7> +<119C> <79AE> +<119D> <91B4> +<119E> <96B7> +<119F> <52DE> +<11A0> <6488> +<11A1> <64C4> +<11A2> <6AD3> +<11A3> <6F5E> +<11A4> <7018> +<11A5> <7210> +<11A6> <76E7> +<11A7> <8001> +<11A8> <8606> +<11A9> <865C> +<11AA> <8DEF> +<11AB> <8F05> +<11AC> <9732> +<11AD> <9B6F> +<11AE> <9DFA> +<11AF> <9E75> +<11B0> <788C> +<11B1> <797F> +<11B2> <7DA0> +<11B3> <83C9> +<11B4> <9304> +<11B5> <9E7F> +<11B6> <9E93> +<11B7> <8AD6> +<11B8> <58DF> +<11B9> <5F04> +<11BA> <6727> +<11BB> <7027> +<11BC> <74CF> +<11BD> <7C60> +<11BE> <807E> +<11BF> <5121> +<11C0> <7028> +<11C1> <7262> +<11C2> <78CA> +<11C3> <8CC2> +<11C4> <8CDA> +<11C5> <8CF4> +<11C6> <96F7> +<11C7> <4E86> +<11C8> <50DA> +<11C9> <5BEE> +<11CA> <5ED6> +<11CB> <6599> +<11CC> <71CE> +<11CD> <7642> +<11CE> <77AD> +<11CF> <804A> +<11D0> <84FC> +<11D1> <907C> +<11D2> <9B27> +<11D3> <9F8D> +<11D4> <58D8> +<11D5> <5A41> +<11D6> <5C62> +<11D7> <6A13> +<11D8> <6DDA> +<11D9> <6F0F> +<11DA> <763B> +<11DB> <7D2F> +<11DC> <7E37> +<11DD> <851E> +endbfchar + +100 beginbfchar +<11DE> <8938> +<11DF> <93E4> +<11E0> <964B> +<11E1> <5289> +<11E2> <65D2> +<11E3> <67F3> +<11E4> <69B4> +<11E5> <6D41> +<11E6> <6E9C> +<11E7> <700F> +<11E8> <7409> +<11E9> <7460> +<11EA> <7559> +<11EB> <7624> +<11EC> <786B> +<11ED> <8B2C> +<11EE> <985E> +<11EF> <516D> +<11F0> <622E> +<11F1> <9678> +<11F2> <4F96> +<11F3> <502B> +<11F4> <5D19> +<11F5> <6DEA> +<11F6> <7DB8> +<11F7> <8F2A> +<11F8> <5F8B> +<11F9> <6144> +<11FA> <6817> +<11FB> <9686> +<11FC> <52D2> +<11FD> <808B> +<11FE> <51DC> +<11FF> <51CC> +<1200> <695E> +<1201> <7A1C> +<1202> <7DBE> +<1203> <83F1> +<1204> <9675> +<1205> <4FDA> +<1206> <5229> +<1207> <5398> +<1208> <540F> +<1209> <550E> +<120A> <5C65> +<120B> <60A7> +<120C> <674E> +<120D> <68A8> +<120E> <6D6C> +<120F> <7281> +<1210> <72F8> +<1211> <7406> +<1212> <7483> +<1213> <75E2> +<1214> <7C6C> +<1215> <7F79> +<1216> <7FB8> +<1217> <8389> +<1218> <88CF> +<1219> <88E1> +<121A> <91CC> +<121B> <91D0> +<121C> <96E2> +<121D> <9BC9> +<121E> <541D> +<121F> <6F7E> +<1220> <71D0> +<1221> <7498> +<1222> <85FA> +<1223> <8EAA> +<1224> <96A3> +<1225> <9C57> +<1226> <9E9F> +<1227> <6797> +<1228> <6DCB> +<1229> <7433> +<122A> <81E8> +<122B> <9716> +<122C> <782C> +<122D> <7ACB> +<122E> <7B20> +<122F> <7C92> +<1230> <6469> +<1231> <746A> +<1232> <75F2> +<1233> <78BC> +<1234> <78E8> +<1235> <99AC> +<1236> <9B54> +<1237> <9EBB> +<1238> <5BDE> +<1239> <5E55> +<123A> <6F20> +<123B> <819C> +<123C> <83AB> +<123D> <9088> +<123E> <4E07> +<123F> <534D> +<1240> <5A29> +<1241> <5DD2> +endbfchar + +100 beginbfchar +<1242> <5F4E> +<1243> <6162> +<1244> <633D> +<1245> <6669> +<1246> <66FC> +<1247> <6EFF> +<1248> <6F2B> +<1249> <7063> +<124A> <779E> +<124B> <842C> +<124C> <8513> +<124D> <883B> +<124E> <8F13> +<124F> <9945> +<1250> <9C3B> +<1251> <551C> +<1252> <62B9> +<1253> <672B> +<1254> <6CAB> +<1255> <8309> +<1256> <896A> +<1257> <977A> +<1258> <4EA1> +<1259> <5984> +<125C> <671B> +<125D> <7DB2> +<125E> <7F54> +<125F> <8292> +<1260> <832B> +<1261> <83BD> +<1262> <8F1E> +<1263> <9099> +<1264> <57CB> +<1265> <59B9> +<1266> <5A92> +<1267> <5BD0> +<1268> <6627> +<1269> <679A> +<126A> <6885> +<126B> <6BCF> +<126C> <7164> +<126D> <7F75> +<126E> <8CB7> +<126F> <8CE3> +<1270> <9081> +<1271> <9B45> +<1272> <8108> +<1273> <8C8A> +<1274> <964C> +<1275> <9A40> +<1276> <9EA5> +<1277> <5B5F> +<1278> <6C13> +<1279> <731B> +<127A> <76F2> +<127B> <76DF> +<127C> <840C> +<127D> <51AA> +<127E> <8993> +<127F> <514D> +<1280> <5195> +<1281> <52C9> +<1282> <68C9> +<1283> <6C94> +<1284> <7704> +<1285> <7720> +<1286> <7DBF> +<1287> <7DEC> +<1288> <9762> +<1289> <9EB5> +<128A> <6EC5> +<128B> <8511> +<128C> <51A5> +<128D> <540D> +<128E> <547D> +<128F> <660E> +<1290> <669D> +<1291> <6927> +<1292> <6E9F> +<1293> <76BF> +<1294> <7791> +<1295> <8317> +<1296> <84C2> +<1297> <879F> +<1298> <9169> +<1299> <9298> +<129A> <9CF4> +<129B> <8882> +<129C> <4FAE> +<129D> <5192> +<129E> <52DF> +<129F> <59C6> +<12A0> <5E3D> +<12A1> <6155> +<12A4> <66AE> +<12A5> <67D0> +<12A6> <6A21> +<12A7> <6BCD> +<12A8> <6BDB> +<12A9> <725F> +endbfchar + +100 beginbfchar +<12AA> <7261> +<12AB> <7441> +<12AC> <7738> +<12AD> <77DB> +<12AE> <8017> +<12AF> <82BC> +<12B0> <8305> +<12B1> <8B00> +<12B2> <8B28> +<12B3> <8C8C> +<12B4> <6728> +<12B5> <6C90> +<12B6> <7267> +<12B7> <76EE> +<12B8> <7766> +<12B9> <7A46> +<12BA> <9DA9> +<12BB> <6B7F> +<12BC> <6C92> +<12BD> <5922> +<12BE> <6726> +<12BF> <8499> +<12C0> <536F> +<12C1> <5893> +<12C2> <5999> +<12C3> <5EDF> +<12C4> <63CF> +<12C5> <6634> +<12C6> <6773> +<12C7> <6E3A> +<12C8> <732B> +<12C9> <7AD7> +<12CA> <82D7> +<12CB> <9328> +<12CC> <52D9> +<12CD> <5DEB> +<12CE> <61AE> +<12CF> <61CB> +<12D0> <620A> +<12D1> <62C7> +<12D2> <64AB> +<12D3> <65E0> +<12D4> <6959> +<12D5> <6B66> +<12D6> <6BCB> +<12D7> <7121> +<12D8> <73F7> +<12D9> <755D> +<12DA> <7E46> +<12DB> <821E> +<12DC> <8302> +<12DD> <856A> +<12DE> <8AA3> +<12DF> <8CBF> +<12E0> <9727> +<12E1> <9D61> +<12E2> <58A8> +<12E3> <9ED8> +<12E4> <5011> +<12E5> <520E> +<12E6> <543B> +<12E7> <554F> +<12E8> <6587> +<12E9> <6C76> +<12EC> <805E> +<12ED> <868A> +<12EE> <9580> +<12EF> <96EF> +<12F0> <52FF> +<12F1> <6C95> +<12F2> <7269> +<12F3> <5473> +<12F4> <5A9A> +<12F5> <5C3E> +<12F6> <5D4B> +<12F7> <5F4C> +<12F8> <5FAE> +<12F9> <672A> +<12FA> <68B6> +<12FB> <6963> +<12FC> <6E3C> +<12FD> <6E44> +<12FE> <7709> +<12FF> <7C73> +<1300> <7F8E> +<1301> <8587> +<1302> <8B0E> +<1303> <8FF7> +<1304> <9761> +<1305> <9EF4> +<1306> <5CB7> +<1307> <60B6> +<1308> <610D> +<1309> <61AB> +<130A> <654F> +<130D> <6C11> +<130E> <6CEF> +<130F> <739F> +<1310> <73C9> +<1311> <7DE1> +endbfchar + +100 beginbfchar +<1312> <9594> +<1313> <5BC6> +<1314> <871C> +<1315> <8B10> +<1316> <525D> +<1317> <535A> +<1318> <62CD> +<1319> <640F> +<131A> <64B2> +<131B> <6734> +<131C> <6A38> +<131D> <6CCA> +<131E> <73C0> +<131F> <749E> +<1320> <7B94> +<1321> <7C95> +<1322> <7E1B> +<1323> <818A> +<1324> <8236> +<1325> <8584> +<1326> <8FEB> +<1327> <96F9> +<1328> <99C1> +<1329> <4F34> +<132A> <534A> +<132B> <53CD> +<132C> <53DB> +<132D> <62CC> +<132E> <642C> +<132F> <6500> +<1330> <6591> +<1331> <69C3> +<1332> <6CEE> +<1333> <6F58> +<1334> <73ED> +<1335> <7554> +<1336> <7622> +<1337> <76E4> +<1338> <76FC> +<1339> <78D0> +<133A> <78FB> +<133B> <792C> +<133C> <7D46> +<133D> <822C> +<133E> <87E0> +<133F> <8FD4> +<1340> <9812> +<1341> <98EF> +<1342> <52C3> +<1343> <62D4> +<1344> <64A5> +<1345> <6E24> +<1346> <6F51> +<1347> <767C> +<1348> <8DCB> +<1349> <91B1> +<134A> <9262> +<134B> <9AEE> +<134C> <9B43> +<134D> <5023> +<134E> <508D> +<134F> <574A> +<1350> <59A8> +<1351> <5C28> +<1352> <5E47> +<1353> <5F77> +<1354> <623F> +<1355> <653E> +<1356> <65B9> +<1357> <65C1> +<1358> <6609> +<1359> <678B> +<135A> <699C> +<135B> <6EC2> +<135C> <78C5> +<135D> <7D21> +<135E> <80AA> +<135F> <8180> +<1360> <822B> +<1361> <82B3> +<1362> <84A1> +<1363> <868C> +<1364> <8A2A> +<1365> <8B17> +<1366> <90A6> +<1367> <9632> +<1368> <9F90> +<1369> <500D> +<136A> <4FF3> +<136B> <57F9> +<136C> <5F98> +<136D> <62DC> +<136E> <6392> +<136F> <676F> +<1370> <6E43> +<1371> <7119> +<1372> <76C3> +<1373> <80CC> +<1374> <80DA> +<1377> <8919> +endbfchar + +100 beginbfchar +<1378> <8CE0> +<1379> <8F29> +<137A> <914D> +<137B> <966A> +<137C> <4F2F> +<137D> <4F70> +<137E> <5E1B> +<137F> <67CF> +<1380> <6822> +<1383> <9B44> +<1384> <5E61> +<1385> <6A0A> +<1386> <7169> +<1387> <71D4> +<1388> <756A> +<1389> <7E41> +<138A> <8543> +<138B> <85E9> +<138C> <98DC> +<138D> <4F10> +<138E> <7B4F> +<138F> <7F70> +<1390> <95A5> +<1391> <51E1> +<1392> <5E06> +<1393> <68B5> +<1394> <6C3E> +<1395> <6C4E> +<1396> <6CDB> +<1397> <72AF> +<1398> <7BC4> +<1399> <8303> +<139A> <6CD5> +<139B> <743A> +<139C> <50FB> +<139D> <5288> +<139E> <58C1> +<139F> <64D8> +<13A0> <6A97> +<13A1> <74A7> +<13A2> <7656> +<13A3> <78A7> +<13A4> <8617> +<13A5> <95E2> +<13A6> <9739> +<13A7> <535E> +<13A8> <5F01> +<13A9> <8B8A> +<13AA> <8FA8> +<13AB> <8FAF> +<13AC> <908A> +<13AD> <5225> +<13AE> <77A5> +<13AF> <9C49> +<13B0> <9F08> +<13B1> <4E19> +<13B2> <5002> +<13B3> <5175> +<13B4> <5C5B> +<13B5> <5E77> +<13B6> <661E> +<13B7> <663A> +<13B8> <67C4> +<13B9> <68C5> +<13BA> <70B3> +<13BB> <7501> +<13BC> <75C5> +<13BD> <79C9> +<13BE> <7ADD> +<13BF> <8F27> +<13C0> <9920> +<13C1> <9A08> +<13C2> <4FDD> +<13C3> <5821> +<13C4> <5831> +<13C5> <5BF6> +<13C6> <666E> +<13C7> <6B65> +<13C8> <6D11> +<13C9> <6E7A> +<13CA> <6F7D> +<13CB> <73E4> +<13CC> <752B> +<13CD> <83E9> +<13CE> <88DC> +<13CF> <8913> +<13D0> <8B5C> +<13D1> <8F14> +<13D2> <4F0F> +<13D3> <50D5> +<13D4> <5310> +<13D5> <535C> +<13D6> <5B93> +<13D7> <5FA9> +<13D8> <670D> +<13D9> <798F> +<13DA> <8179> +<13DB> <832F> +<13DC> <8514> +<13DD> <8907> +endbfchar + +100 beginbfchar +<13DE> <8986> +<13DF> <8F39> +<13E0> <8F3B> +<13E1> <99A5> +<13E2> <9C12> +<13E3> <672C> +<13E4> <4E76> +<13E5> <4FF8> +<13E6> <5949> +<13E7> <5C01> +<13EA> <6367> +<13EB> <68D2> +<13EC> <70FD> +<13ED> <71A2> +<13EE> <742B> +<13EF> <7E2B> +<13F0> <84EC> +<13F1> <8702> +<13F2> <9022> +<13F3> <92D2> +<13F4> <9CF3> +<13F5> <4E0D> +<13F6> <4ED8> +<13F7> <4FEF> +<13F8> <5085> +<13F9> <5256> +<13FA> <526F> +<13FB> <5426> +<13FC> <5490> +<13FD> <57E0> +<13FE> <592B> +<13FF> <5A66> +<1400> <5B5A> +<1401> <5B75> +<1402> <5BCC> +<1403> <5E9C> +<1404> <6276> +<1405> <6577> +<1406> <65A7> +<1407> <6D6E> +<1408> <6EA5> +<1409> <7236> +<140A> <7B26> +<140B> <7C3F> +<140C> <7F36> +<140F> <819A> +<1410> <8240> +<1411> <8299> +<1412> <83A9> +<1413> <8A03> +<1414> <8CA0> +<1415> <8CE6> +<1416> <8CFB> +<1417> <8D74> +<1418> <8DBA> +<1419> <90E8> +<141A> <91DC> +<141B> <961C> +<141C> <9644> +<141D> <99D9> +<141E> <9CE7> +<141F> <5317> +<1420> <5206> +<1421> <5429> +<1422> <5674> +<1423> <58B3> +<1424> <5954> +<1425> <596E> +<1426> <5FFF> +<1427> <61A4> +<1428> <626E> +<1429> <6610> +<142A> <6C7E> +<142B> <711A> +<142C> <76C6> +<142D> <7C89> +<142E> <7CDE> +<142F> <7D1B> +<1430> <82AC> +<1431> <8CC1> +<1432> <96F0> +<1433> <4F5B> +<1434> <5F17> +<1435> <5F7F> +<1436> <62C2> +<1437> <5D29> +<1438> <670B> +<1439> <68DA> +<143A> <787C> +<143B> <7E43> +<143C> <9D6C> +<143D> <4E15> +<143E> <5099> +<143F> <5315> +<1440> <532A> +<1441> <5351> +<1442> <5983> +<1443> <5A62> +<1444> <5E87> +<1445> <60B2> +endbfchar + +100 beginbfchar +<1446> <618A> +<1447> <6249> +<1448> <6279> +<1449> <6590> +<144A> <6787> +<144B> <69A7> +<144C> <6BD4> +<1450> <6CB8> +<1451> <7435> +<1452> <75FA> +<1453> <7812> +<1454> <7891> +<1455> <79D5> +<1456> <79D8> +<1457> <7C83> +<1458> <7DCB> +<1459> <7FE1> +<145A> <80A5> +<145B> <813E> +<145C> <81C2> +<145D> <83F2> +<145E> <871A> +<145F> <88E8> +<1460> <8AB9> +<1461> <8B6C> +<1462> <8CBB> +<1463> <9119> +<1464> <975E> +<1465> <98DB> +<1466> <9F3B> +<1467> <56AC> +<1468> <5B2A> +<1469> <5F6C> +<146A> <658C> +<146B> <6AB3> +<146C> <6BAF> +<146D> <6D5C> +<146E> <6FF1> +<146F> <7015> +<1470> <725D> +<1471> <73AD> +<1472> <8CA7> +<1473> <8CD3> +<1474> <983B> +<1475> <6191> +<1476> <6C37> +<1477> <8058> +<1478> <9A01> +<1479> <4E4D> +<147A> <4E8B> +<147B> <4E9B> +<147C> <4ED5> +<147D> <4F3A> +<147E> <4F3C> +<147F> <4F7F> +<1480> <4FDF> +<1481> <50FF> +<1482> <53F2> +<1483> <53F8> +<1484> <5506> +<1485> <55E3> +<1486> <56DB> +<1487> <58EB> +<1488> <5962> +<1489> <5A11> +<148A> <5BEB> +<148B> <5BFA> +<148C> <5C04> +<148D> <5DF3> +<148E> <5E2B> +<148F> <5F99> +<1490> <601D> +<1491> <6368> +<1492> <659C> +<1493> <65AF> +<1494> <67F6> +<1495> <67FB> +<1496> <68AD> +<1497> <6B7B> +<1498> <6C99> +<1499> <6CD7> +<149A> <6E23> +<149B> <7009> +<149C> <7345> +<149D> <7802> +<149E> <793E> +<149F> <7940> +<14A0> <7960> +<14A1> <79C1> +<14A2> <7BE9> +<14A3> <7D17> +<14A4> <7D72> +<14A5> <8086> +<14A6> <820D> +<14A7> <838E> +<14A8> <84D1> +<14A9> <86C7> +<14AA> <88DF> +<14AB> <8A50> +<14AC> <8A5E> +endbfchar + +100 beginbfchar +<14AD> <8B1D> +<14AE> <8CDC> +<14AF> <8D66> +<14B0> <8FAD> +<14B1> <90AA> +<14B2> <98FC> +<14B3> <99DF> +<14B4> <9E9D> +<14B5> <524A> +<14B6> <6714> +<14B7> <5098> +<14B8> <522A> +<14B9> <5C71> +<14BA> <6563> +<14BB> <6C55> +<14BC> <73CA> +<14BD> <7523> +<14BE> <759D> +<14BF> <7B97> +<14C0> <849C> +<14C1> <9178> +<14C2> <9730> +<14C3> <4E77> +<14C4> <6492> +<14C5> <6BBA> +<14C6> <715E> +<14C7> <85A9> +<14C8> <4E09> +<14C9> <6749> +<14CA> <68EE> +<14CB> <6E17> +<14CC> <829F> +<14CD> <8518> +<14CE> <886B> +<14CF> <63F7> +<14D0> <6F81> +<14D1> <9212> +<14D2> <98AF> +<14D3> <4E0A> +<14D4> <50B7> +<14D5> <50CF> +<14D6> <511F> +<14D7> <5546> +<14D8> <55AA> +<14D9> <5617> +<14DA> <5B40> +<14DB> <5C19> +<14DC> <5CE0> +<14DD> <5E38> +<14DE> <5E8A> +<14DF> <5EA0> +<14E0> <5EC2> +<14E1> <60F3> +<14E2> <6851> +<14E3> <6A61> +<14E4> <6E58> +<14E5> <723D> +<14E6> <7240> +<14E7> <72C0> +<14E8> <76F8> +<14E9> <7965> +<14EA> <7BB1> +<14EB> <7FD4> +<14EC> <88F3> +<14ED> <89F4> +<14EE> <8A73> +<14EF> <8C61> +<14F0> <8CDE> +<14F1> <971C> +<14F2> <585E> +<14F3> <74BD> +<14F4> <8CFD> +<14F5> <55C7> +<14F6> <7A61> +<14F7> <7D22> +<14F8> <8272> +<14F9> <7272> +<14FA> <751F> +<14FB> <7525> +<14FC> <7B19> +<14FD> <5885> +<14FE> <58FB> +<14FF> <5DBC> +<1500> <5E8F> +<1501> <5EB6> +<1502> <5F90> +<1503> <6055> +<1504> <6292> +<1505> <637F> +<1506> <654D> +<1507> <6691> +<1508> <66D9> +<1509> <66F8> +<150A> <6816> +<150B> <68F2> +<150C> <7280> +<150D> <745E> +<150E> <7B6E> +<150F> <7D6E> +<1510> <7DD6> +endbfchar + +100 beginbfchar +<1511> <7F72> +<1512> <80E5> +<1513> <8212> +<1514> <85AF> +<1515> <897F> +<1516> <8A93> +<1517> <901D> +<1518> <92E4> +<1519> <9ECD> +<151A> <9F20> +<151B> <5915> +<151C> <596D> +<151D> <5E2D> +<151E> <60DC> +<151F> <6614> +<1520> <6673> +<1521> <6790> +<1522> <6C50> +<1523> <6DC5> +<1524> <6F5F> +<1525> <77F3> +<1526> <78A9> +<1527> <84C6> +<1528> <91CB> +<1529> <932B> +<152A> <4ED9> +<152B> <50CA> +<152C> <5148> +<152D> <5584> +<152E> <5B0B> +<152F> <5BA3> +<1530> <6247> +<1531> <657E> +<1532> <65CB> +<1533> <6E32> +<1534> <717D> +<1535> <7401> +<1536> <7444> +<1537> <7487> +<1538> <74BF> +<1539> <766C> +<153A> <79AA> +<153B> <7DDA> +<153C> <7E55> +<153D> <7FA8> +<153E> <817A> +<153F> <81B3> +<1540> <8239> +<1541> <861A> +<1542> <87EC> +<1543> <8A75> +<1544> <8DE3> +<1545> <9078> +<1546> <9291> +<1547> <9425> +<1548> <994D> +<1549> <9BAE> +<154A> <5368> +<154B> <5C51> +<154C> <6954> +<154D> <6CC4> +<154E> <6D29> +<154F> <6E2B> +<1550> <820C> +<1551> <859B> +<1552> <893B> +<1553> <8A2D> +<1554> <8AAA> +<1555> <96EA> +<1556> <9F67> +<1557> <5261> +<1558> <66B9> +<1559> <6BB2> +<155A> <7E96> +<155B> <87FE> +<155C> <8D0D> +<155D> <9583> +<155E> <965D> +<155F> <651D> +<1560> <6D89> +<1561> <71EE> +<1562> <57CE> +<1563> <59D3> +<1564> <5BAC> +<1565> <6027> +<1566> <60FA> +<1567> <6210> +<1568> <661F> +<1569> <665F> +<156A> <7329> +<156B> <73F9> +<156C> <76DB> +<156D> <7701> +<156E> <7B6C> +<156F> <8056> +<1570> <8072> +<1571> <8165> +<1572> <8AA0> +<1573> <9192> +<1574> <4E16> +endbfchar + +100 beginbfchar +<1575> <52E2> +<1576> <6B72> +<1577> <6D17> +<1578> <7A05> +<1579> <7B39> +<157A> <7D30> +<157B> <8CB0> +<157C> <53EC> +<157D> <562F> +<157E> <5851> +<157F> <5BB5> +<1580> <5C0F> +<1581> <5C11> +<1582> <5DE2> +<1583> <6240> +<1584> <6383> +<1585> <6414> +<1586> <662D> +<1587> <68B3> +<1588> <6CBC> +<1589> <6D88> +<158A> <6EAF> +<158B> <701F> +<158C> <70A4> +<158D> <71D2> +<158E> <7526> +<158F> <758F> +<1590> <758E> +<1591> <7619> +<1592> <7B11> +<1593> <7BE0> +<1594> <7C2B> +<1595> <7D20> +<1596> <7D39> +<1597> <852C> +<1598> <856D> +<1599> <8607> +<159A> <8A34> +<159B> <900D> +<159C> <9061> +<159D> <90B5> +<159E> <92B7> +<159F> <97F6> +<15A0> <9A37> +<15A1> <4FD7> +<15A2> <5C6C> +<15A3> <675F> +<15A4> <6D91> +<15A5> <7C9F> +<15A6> <7E8C> +<15A7> <8B16> +<15A8> <8D16> +<15A9> <901F> +<15AA> <5B6B> +<15AB> <5DFD> +<15AC> <640D> +<15AD> <84C0> +<15AE> <905C> +<15AF> <98E1> +<15B0> <7387> +<15B1> <5B8B> +<15B2> <609A> +<15B3> <677E> +<15B4> <6DDE> +<15B5> <8A1F> +<15B6> <8AA6> +<15B7> <9001> +<15B8> <980C> +<15B9> <5237> +<15BA> <7051> +<15BB> <788E> +<15BC> <9396> +<15BD> <8870> +<15BE> <91D7> +<15BF> <4FEE> +<15C0> <53D7> +<15C1> <55FD> +<15C2> <56DA> +<15C3> <5782> +<15C4> <58FD> +<15C5> <5AC2> +<15C6> <5B88> +<15C7> <5CAB> +<15C8> <5CC0> +<15C9> <5E25> +<15CA> <6101> +<15CB> <620D> +<15CC> <624B> +<15CD> <6388> +<15CE> <641C> +<15CF> <6536> +<15D0> <6578> +<15D1> <6A39> +<15D2> <6B8A> +<15D3> <6C34> +<15D4> <6D19> +<15D5> <6F31> +<15D6> <71E7> +<15D7> <72E9> +<15D8> <7378> +endbfchar + +100 beginbfchar +<15D9> <7407> +<15DA> <74B2> +<15DB> <7626> +<15DC> <7761> +<15DD> <79C0> +<15DE> <7A57> +<15DF> <7AEA> +<15E0> <7CB9> +<15E1> <7D8F> +<15E2> <7DAC> +<15E3> <7E61> +<15E4> <7F9E> +<15E5> <8129> +<15E6> <8331> +<15E7> <8490> +<15E8> <84DA> +<15E9> <85EA> +<15EA> <8896> +<15EB> <8AB0> +<15EC> <8B90> +<15ED> <8F38> +<15EE> <9042> +<15EF> <9083> +<15F0> <916C> +<15F1> <9296> +<15F2> <92B9> +<15F3> <968B> +<15F6> <96D6> +<15F7> <9700> +<15F8> <9808> +<15F9> <9996> +<15FA> <9AD3> +<15FB> <9B1A> +<15FC> <53D4> +<15FD> <587E> +<15FE> <5919> +<15FF> <5B70> +<1600> <5BBF> +<1601> <6DD1> +<1602> <6F5A> +<1603> <719F> +<1604> <7421> +<1605> <74B9> +<1606> <8085> +<1607> <83FD> +<1608> <5DE1> +<1609> <5F87> +<160A> <5FAA> +<160B> <6042> +<160C> <65EC> +<160D> <6812> +<160E> <696F> +<160F> <6A53> +<1610> <6B89> +<1611> <6D35> +<1612> <6DF3> +<1613> <73E3> +<1614> <76FE> +<1615> <77AC> +<1616> <7B4D> +<1617> <7D14> +<1618> <8123> +<1619> <821C> +<161A> <8340> +<161B> <84F4> +<161C> <8563> +<161D> <8A62> +<161E> <8AC4> +<161F> <9187> +<1620> <931E> +<1621> <9806> +<1622> <99B4> +<1623> <620C> +<1624> <8853> +<1625> <8FF0> +<1626> <9265> +<1627> <5D07> +<1628> <5D27> +<1629> <5D69> +<162A> <745F> +<162B> <819D> +<162C> <8768> +<162D> <6FD5> +<162E> <62FE> +<162F> <7FD2> +<1630> <8936> +<1631> <8972> +<1632> <4E1E> +<1633> <4E58> +<1634> <50E7> +<1635> <52DD> +<1636> <5347> +<1637> <627F> +<1638> <6607> +<1639> <7E69> +<163A> <8805> +<163B> <965E> +<163C> <4F8D> +<163D> <5319> +<163E> <5636> +endbfchar + +100 beginbfchar +<163F> <59CB> +<1640> <5AA4> +<1641> <5C38> +<1642> <5C4E> +<1643> <5C4D> +<1644> <5E02> +<1645> <5F11> +<1646> <6043> +<1647> <65BD> +<1648> <662F> +<1649> <6642> +<164A> <67BE> +<164B> <67F4> +<164C> <731C> +<164D> <77E2> +<164E> <793A> +<164F> <7FC5> +<1650> <8494> +<1651> <84CD> +<1652> <8996> +<1653> <8A66> +<1654> <8A69> +<1655> <8AE1> +<1656> <8C55> +<1657> <8C7A> +<1658> <57F4> +<1659> <5BD4> +<165A> <5F0F> +<165B> <606F> +<165C> <62ED> +<165D> <690D> +<165E> <6B96> +<165F> <6E5C> +<1660> <7184> +<1661> <7BD2> +<1662> <8755> +<1663> <8B58> +<1664> <8EFE> +<1665> <98DF> +<1666> <98FE> +<1667> <4F38> +<1668> <4F81> +<1669> <4FE1> +<166A> <547B> +<166B> <5A20> +<166C> <5BB8> +<166D> <613C> +<166E> <65B0> +<166F> <6668> +<1670> <71FC> +<1671> <7533> +<1672> <795E> +<1673> <7D33> +<1674> <814E> +<1675> <81E3> +<1676> <8398> +<1677> <85AA> +<1678> <85CE> +<1679> <8703> +<167A> <8A0A> +<167B> <8EAB> +<167C> <8F9B> +<167D> <8FC5> +<167E> <5931> +<167F> <5BA4> +<1680> <5BE6> +<1681> <6089> +<1682> <5BE9> +<1683> <5C0B> +<1684> <5FC3> +<1685> <6C81> +<1686> <6DF1> +<1687> <700B> +<1688> <751A> +<1689> <82AF> +<168A> <8AF6> +<168B> <4EC0> +<168C> <5341> +<168D> <96D9> +<168E> <6C0F> +<168F> <4E9E> +<1690> <4FC4> +<1691> <5152> +<1692> <555E> +<1693> <5A25> +<1694> <5CE8> +<1695> <6211> +<1696> <7259> +<1697> <82BD> +<1698> <83AA> +<1699> <86FE> +<169A> <8859> +<169B> <8A1D> +<169C> <963F> +<169D> <96C5> +<169E> <9913> +<169F> <9D09> +<16A0> <9D5D> +<16A1> <580A> +<16A2> <5CB3> +endbfchar + +100 beginbfchar +<16A3> <5DBD> +<16A4> <5E44> +<16A5> <60E1> +<16A6> <6115> +<16A7> <63E1> +<16A8> <6A02> +<16A9> <6E25> +<16AA> <9102> +<16AB> <9354> +<16AC> <984E> +<16AD> <9C10> +<16AE> <9F77> +<16AF> <5B89> +<16B0> <5CB8> +<16B1> <6309> +<16B2> <664F> +<16B3> <6848> +<16B4> <773C> +<16B5> <96C1> +<16B6> <978D> +<16B7> <9854> +<16B8> <9B9F> +<16B9> <65A1> +<16BA> <8B01> +<16BB> <8ECB> +<16BC> <95BC> +<16BD> <5535> +<16BE> <5CA9> +<16BF> <5DD6> +<16C0> <5EB5> +<16C1> <6697> +<16C2> <764C> +<16C3> <83F4> +<16C4> <95C7> +<16C5> <58D3> +<16C6> <62BC> +<16C7> <72CE> +<16C8> <9D28> +<16C9> <4EF0> +<16CA> <592E> +<16CB> <600F> +<16CC> <663B> +<16CD> <6B83> +<16CE> <79E7> +<16CF> <9D26> +<16D0> <5393> +<16D1> <54C0> +<16D2> <57C3> +<16D3> <5D16> +<16D4> <611B> +<16D5> <66D6> +<16D6> <6DAF> +<16D7> <788D> +<16D8> <827E> +<16D9> <9698> +<16DA> <9744> +<16DB> <5384> +<16DC> <627C> +<16DD> <6396> +<16DE> <6DB2> +<16DF> <7E0A> +<16E0> <814B> +<16E1> <984D> +<16E2> <6AFB> +<16E3> <7F4C> +<16E4> <9DAF> +<16E5> <9E1A> +<16E6> <4E5F> +<16E7> <503B> +<16E8> <51B6> +<16E9> <591C> +<16EA> <60F9> +<16EB> <63F6> +<16EC> <6930> +<16ED> <723A> +<16EE> <8036> +<16EF> <91CE> +<16F0> <5F31> +<16F1> <7D04> +<16F2> <82E5> +<16F3> <846F> +<16F4> <84BB> +<16F5> <85E5> +<16F6> <8E8D> +<16F7> <4F6F> +<16F8> <58E4> +<16F9> <5B43> +<16FA> <6059> +<16FB> <63DA> +<16FC> <6518> +<16FD> <656D> +<16FE> <6698> +<16FF> <694A> +<1700> <6A23> +<1701> <6D0B> +<1702> <7001> +<1703> <716C> +<1704> <75D2> +<1705> <760D> +<1706> <79B3> +endbfchar + +100 beginbfchar +<1707> <7A70> +<1708> <7F8A> +<1709> <8944> +<170A> <8B93> +<170B> <91C0> +<170C> <967D> +<170D> <990A> +<170E> <5704> +<170F> <5FA1> +<1710> <65BC> +<1711> <6F01> +<1712> <7600> +<1713> <79A6> +<1714> <8A9E> +<1715> <99AD> +<1716> <9B5A> +<1717> <9F6C> +<1718> <5104> +<1719> <61B6> +<171A> <6291> +<171B> <6A8D> +<171C> <81C6> +<171D> <5043> +<171E> <5830> +<171F> <5F66> +<1720> <7109> +<1721> <8A00> +<1722> <8AFA> +<1723> <5B7C> +<1724> <8616> +<1725> <4FFA> +<1726> <513C> +<1727> <56B4> +<1728> <5944> +<1729> <63A9> +<172A> <6DF9> +<172B> <5DAA> +<172C> <696D> +<172D> <5186> +<172E> <4E88> +<172F> <4F59> +<1730> <5982> +<1731> <6B5F> +<1732> <6C5D> +<1733> <74B5> +<1734> <7916> +<1735> <8207> +<1736> <8245> +<1737> <8339> +<1738> <8F3F> +<1739> <8F5D> +<173A> <9918> +<173B> <4EA6> +<173C> <57DF> +<173D> <5F79> +<173E> <6613> +<173F> <75AB> +<1740> <7E79> +<1741> <8B6F> +<1742> <9006> +<1743> <9A5B> +<1744> <56A5> +<1745> <5827> +<1746> <59F8> +<1747> <5A1F> +<1748> <5BB4> +<1749> <5EF6> +<174A> <6350> +<174B> <633B> +<174C> <693D> +<174D> <6C87> +<174E> <6CBF> +<174F> <6D8E> +<1750> <6D93> +<1751> <6DF5> +<1752> <6F14> +<1753> <70DF> +<1754> <7136> +<1755> <7159> +<1756> <71C3> +<1757> <71D5> +<1758> <784F> +<1759> <786F> +<175A> <7B75> +<175B> <7DE3> +<175C> <7E2F> +<175D> <884D> +<175E> <8EDF> +<175F> <925B> +<1760> <9CF6> +<1761> <6085> +<1762> <6D85> +<1763> <71B1> +<1764> <95B1> +<1765> <53AD> +<1766> <67D3> +<1767> <708E> +<1768> <7130> +<1769> <7430> +<176A> <8276> +endbfchar + +100 beginbfchar +<176B> <82D2> +<176C> <95BB> +<176D> <9AE5> +<176E> <9E7D> +<176F> <66C4> +<1770> <71C1> +<1771> <8449> +<1772> <584B> +<1773> <5DB8> +<1774> <5F71> +<1775> <6620> +<1776> <668E> +<1777> <6979> +<1778> <69AE> +<1779> <6C38> +<177A> <6CF3> +<177B> <6E36> +<177C> <6F41> +<177D> <6FDA> +<177E> <701B> +<177F> <702F> +<1780> <7150> +<1781> <71DF> +<1782> <7370> +<1783> <745B> +<1784> <74D4> +<1785> <76C8> +<1786> <7A4E> +<1787> <7E93> +<1788> <82F1> +<1789> <8A60> +<178A> <8FCE> +<178B> <9348> +<178C> <9719> +<178D> <4E42> +<178E> <502A> +<178F> <5208> +<1790> <53E1> +<1791> <66F3> +<1792> <6C6D> +<1793> <6FCA> +<1794> <730A> +<1795> <777F> +<1796> <7A62> +<1797> <82AE> +<1798> <85DD> +<1799> <8602> +<179A> <88D4> +<179B> <8A63> +<179C> <8B7D> +<179D> <8C6B> +<179E> <92B3> +<179F> <9713> +<17A0> <9810> +<17A1> <4E94> +<17A2> <4F0D> +<17A3> <4FC9> +<17A4> <50B2> +<17A5> <5348> +<17A6> <543E> +<17A7> <5433> +<17A8> <55DA> +<17A9> <5862> +<17AA> <58BA> +<17AB> <5967> +<17AC> <5A1B> +<17AD> <5BE4> +<17AE> <609F> +<17AF> <61CA> +<17B0> <6556> +<17B1> <65FF> +<17B2> <6664> +<17B3> <68A7> +<17B4> <6C5A> +<17B5> <6FB3> +<17B6> <70CF> +<17B7> <71AC> +<17B8> <7352> +<17B9> <7B7D> +<17BA> <8708> +<17BB> <8AA4> +<17BC> <9C32> +<17BD> <9F07> +<17BE> <5C4B> +<17BF> <6C83> +<17C0> <7344> +<17C1> <7389> +<17C2> <923A> +<17C3> <6EAB> +<17C4> <7465> +<17C5> <761F> +<17C6> <7A69> +<17C7> <7E15> +<17C8> <860A> +<17C9> <5140> +<17CA> <58C5> +<17CB> <64C1> +<17CC> <74EE> +<17CD> <7515> +<17CE> <7670> +endbfchar + +100 beginbfchar +<17CF> <7FC1> +<17D0> <9095> +<17D1> <96CD> +<17D2> <9954> +<17D3> <6E26> +<17D4> <74E6> +<17D7> <81E5> +<17D8> <86D9> +<17D9> <8778> +<17DA> <8A1B> +<17DB> <5A49> +<17DC> <5B8C> +<17DD> <5B9B> +<17DE> <68A1> +<17DF> <6900> +<17E0> <6D63> +<17E1> <73A9> +<17E2> <7413> +<17E3> <742C> +<17E4> <7897> +<17E5> <7DE9> +<17E6> <7FEB> +<17E7> <8118> +<17E8> <8155> +<17E9> <839E> +<17EA> <8C4C> +<17EB> <962E> +<17EC> <9811> +<17ED> <66F0> +<17EE> <5F80> +<17EF> <65FA> +<17F0> <6789> +<17F1> <6C6A> +<17F2> <738B> +<17F3> <502D> +<17F4> <5A03> +<17F5> <6B6A> +<17F6> <77EE> +<17F7> <5916> +<17F8> <5D6C> +<17F9> <5DCD> +<17FA> <7325> +<17FB> <754F> +<17FC> <50E5> +<17FD> <51F9> +<17FE> <582F> +<17FF> <592D> +<1800> <5996> +<1801> <59DA> +<1802> <5BE5> +<1803> <5DA2> +<1804> <62D7> +<1805> <6416> +<1806> <6493> +<1807> <64FE> +<1808> <66DC> +<1809> <6A48> +<180A> <71FF> +<180B> <7464> +<180C> <7A88> +<180D> <7AAF> +<180E> <7E47> +<180F> <7E5E> +<1810> <8000> +<1811> <8170> +<1812> <87EF> +<1813> <8981> +<1814> <8B20> +<1815> <9059> +<1816> <9080> +<1817> <9952> +<1818> <617E> +<1819> <6B32> +<181A> <6D74> +<181B> <7E1F> +<181C> <8925> +<181D> <8FB1> +<181E> <4FD1> +<181F> <50AD> +<1820> <5197> +<1821> <52C7> +<1822> <57C7> +<1823> <5889> +<1824> <5BB9> +<1825> <5EB8> +<1826> <6142> +<1827> <6995> +<1828> <6D8C> +<1829> <6E67> +<182A> <6EB6> +<182B> <7194> +<182C> <7462> +<182D> <7528> +<182E> <752C> +<182F> <8073> +<1830> <8338> +<1831> <84C9> +<1832> <8E0A> +<1833> <9394> +<1834> <93DE> +endbfchar + +100 beginbfchar +<1835> <4E8E> +<1836> <4F51> +<1837> <5076> +<1838> <512A> +<1839> <53C8> +<183A> <53CB> +<183B> <53F3> +<183C> <5B87> +<183D> <5BD3> +<183E> <5C24> +<183F> <611A> +<1840> <6182> +<1841> <65F4> +<1842> <725B> +<1843> <7397> +<1844> <7440> +<1845> <76C2> +<1846> <7950> +<1847> <7991> +<1848> <79B9> +<1849> <7D06> +<184A> <7FBD> +<184B> <828B> +<184C> <85D5> +<184D> <865E> +<184E> <8FC2> +<184F> <9047> +<1850> <90F5> +<1851> <91EA> +<1852> <9685> +<1855> <52D6> +<1856> <5F67> +<1857> <65ED> +<1858> <6631> +<1859> <682F> +<185A> <715C> +<185B> <7A36> +<185C> <90C1> +<185D> <980A> +<185E> <4E91> +<185F> <6A52> +<1860> <6B9E> +<1861> <6F90> +<1862> <7189> +<1863> <8018> +<1864> <82B8> +<1865> <8553> +<1866> <904B> +<1867> <9695> +<1868> <96F2> +<1869> <97FB> +<186A> <851A> +<186B> <9B31> +<186C> <4E90> +<186D> <718A> +<186E> <96C4> +<186F> <5143> +<1870> <539F> +<1871> <54E1> +<1872> <5713> +<1873> <5712> +<1874> <57A3> +<1875> <5A9B> +<1876> <5AC4> +<1877> <5BC3> +<1878> <6028> +<1879> <613F> +<187A> <63F4> +<187B> <6C85> +<187C> <6D39> +<187D> <6E72> +<187E> <6E90> +<187F> <7230> +<1880> <733F> +<1881> <7457> +<1882> <82D1> +<1883> <8881> +<1884> <8F45> +<1885> <9060> +<1886> <9662> +<1887> <9858> +<1888> <9D1B> +<1889> <6708> +<188A> <8D8A> +<188B> <925E> +<188C> <4F4D> +<188D> <5049> +<188E> <50DE> +<188F> <5371> +<1890> <570D> +<1891> <59D4> +<1892> <5A01> +<1893> <5C09> +<1894> <6170> +<1895> <6690> +<1896> <6E2D> +<1897> <7232> +<1898> <744B> +<1899> <7DEF> +<189A> <80C3> +endbfchar + +100 beginbfchar +<189B> <840E> +<189C> <8466> +<189D> <853F> +<189E> <875F> +<189F> <885B> +<18A0> <8918> +<18A1> <8B02> +<18A2> <9055> +<18A3> <97CB> +<18A4> <9B4F> +<18A5> <4E73> +<18A6> <4F91> +<18A7> <5112> +<18A8> <516A> +<18A9> <552F> +<18AA> <55A9> +<18AB> <5B7A> +<18AC> <5BA5> +<18AF> <5EBE> +<18B0> <60A0> +<18B1> <60DF> +<18B4> <63C4> +<18B5> <6538> +<18B6> <6709> +<18B7> <67D4> +<18B8> <67DA> +<18BB> <6CB9> +<18BC> <6D27> +<18BD> <6E38> +<18BE> <6FE1> +<18C1> <745C> +<18C2> <7531> +<18C3> <7652> +<18C4> <7DAD> +<18C5> <81FE> +<18C6> <8438> +<18C7> <88D5> +<18C8> <8A98> +<18C9> <8ADB> +<18CA> <8AED> +<18CB> <8E30> +<18CC> <8E42> +<18CD> <904A> +<18CE> <903E> +<18CF> <907A> +<18D0> <9149> +<18D1> <91C9> +<18D2> <936E> +<18D3> <5809> +<18D4> <6BD3> +<18D5> <8089> +<18D6> <80B2> +<18D7> <5141> +<18D8> <596B> +<18D9> <5C39> +<18DA> <6F64> +<18DB> <73A7> +<18DC> <80E4> +<18DD> <8D07> +<18DE> <9217> +<18DF> <958F> +<18E0> <807F> +<18E1> <620E> +<18E2> <701C> +<18E3> <7D68> +<18E4> <878D> +<18E5> <57A0> +<18E6> <6069> +<18E7> <6147> +<18E8> <6BB7> +<18E9> <8ABE> +<18EA> <9280> +<18EB> <96B1> +<18EC> <4E59> +<18ED> <541F> +<18EE> <6DEB> +<18EF> <852D> +<18F0> <9670> +<18F1> <97F3> +<18F2> <98EE> +<18F3> <63D6> +<18F4> <6CE3> +<18F5> <9091> +<18F6> <51DD> +<18F7> <61C9> +<18F8> <81BA> +<18F9> <9DF9> +<18FA> <4F9D> +<18FB> <501A> +<18FC> <5100> +<18FD> <5B9C> +<18FE> <610F> +<18FF> <61FF> +<1900> <64EC> +<1901> <6905> +<1902> <6BC5> +<1903> <7591> +<1904> <77E3> +<1905> <7FA9> +<1906> <8264> +endbfchar + +100 beginbfchar +<1907> <858F> +<1908> <87FB> +<1909> <8863> +<190A> <8ABC> +<190B> <8B70> +<190C> <91AB> +<190D> <4E8C> +<190E> <4EE5> +<190F> <4F0A> +<1910> <5937> +<1911> <59E8> +<1912> <5DF2> +<1913> <5F1B> +<1914> <5F5B> +<1915> <6021> +<1916> <723E> +<1917> <73E5> +<1918> <7570> +<1919> <75CD> +<191A> <79FB> +<191B> <800C> +<191C> <8033> +<191D> <8084> +<191E> <82E1> +<191F> <8351> +<1920> <8CBD> +<1921> <8CB3> +<1922> <9087> +<1923> <98F4> +<1924> <990C> +<1925> <7037> +<1926> <76CA> +<1927> <7FCA> +<1928> <7FCC> +<1929> <7FFC> +<192A> <8B1A> +<192B> <4EBA> +<192C> <4EC1> +<192D> <5203> +<192E> <5370> +<192F> <54BD> +<1930> <56E0> +<1931> <59FB> +<1932> <5BC5> +<1933> <5F15> +<1934> <5FCD> +<1935> <6E6E> +<1936> <7D6A> +<1937> <8335> +<1938> <8693> +<1939> <8A8D> +<193A> <976D> +<193B> <9777> +<193C> <4E00> +<193D> <4F5A> +<193E> <4F7E> +<193F> <58F9> +<1940> <65E5> +<1941> <6EA2> +<1942> <9038> +<1943> <93B0> +<1944> <99B9> +<1945> <4EFB> +<1946> <58EC> +<1947> <598A> +<1948> <59D9> +<1949> <6041> +<194A> <7A14> +<194B> <834F> +<194C> <8CC3> +<194D> <5165> +<194E> <5344> +<194F> <4ECD> +<1950> <5269> +<1951> <5B55> +<1952> <82BF> +<1953> <4ED4> +<1954> <523A> +<1955> <54A8> +<1956> <59C9> +<1957> <59FF> +<1958> <5B50> +<1959> <5B57> +<195A> <5B5C> +<195B> <6063> +<195C> <6148> +<195D> <6ECB> +<195E> <7099> +<195F> <716E> +<1960> <7386> +<1961> <74F7> +<1962> <75B5> +<1963> <78C1> +<1964> <7D2B> +<1965> <8005> +<1966> <81EA> +<1967> <8328> +<1968> <8517> +<1969> <85C9> +<196A> <8AEE> +endbfchar + +100 beginbfchar +<196B> <8CC7> +<196C> <96CC> +<196D> <4F5C> +<196E> <52FA> +<196F> <56BC> +<1970> <65AB> +<1971> <6628> +<1972> <707C> +<1973> <70B8> +<1974> <7235> +<1975> <7DBD> +<1976> <828D> +<1977> <914C> +<1978> <96C0> +<1979> <9D72> +<197A> <5B71> +<197B> <68E7> +<197C> <6B98> +<197D> <6F7A> +<197E> <76DE> +<197F> <5C91> +<1980> <66AB> +<1981> <6F5B> +<1982> <7BB4> +<1983> <7C2A> +<1984> <8836> +<1985> <96DC> +<1986> <4E08> +<1987> <4ED7> +<1988> <5320> +<1989> <5834> +<198A> <58BB> +<198B> <58EF> +<198C> <596C> +<198D> <5C07> +<198E> <5E33> +<198F> <5E84> +<1990> <5F35> +<1991> <638C> +<1992> <66B2> +<1993> <6756> +<1994> <6A1F> +<1995> <6AA3> +<1996> <6B0C> +<1997> <6F3F> +<1998> <7246> +<1999> <7350> +<199A> <748B> +<199B> <7AE0> +<199C> <7CA7> +<199D> <8178> +<199E> <81DF> +<199F> <81E7> +<19A0> <838A> +<19A1> <846C> +<19A2> <8523> +<19A3> <8594> +<19A4> <85CF> +<19A5> <88DD> +<19A6> <8D13> +<19A7> <91AC> +<19A8> <9577> +<19A9> <969C> +<19AA> <518D> +<19AB> <54C9> +<19AC> <5728> +<19AD> <5BB0> +<19AE> <624D> +<19AF> <6750> +<19B0> <683D> +<19B1> <6893> +<19B2> <6E3D> +<19B3> <6ED3> +<19B4> <707D> +<19B5> <7E21> +<19B6> <88C1> +<19B7> <8CA1> +<19B8> <8F09> +<19B9> <9F4B> +<19BA> <9F4E> +<19BB> <722D> +<19BC> <7B8F> +<19BD> <8ACD> +<19BE> <931A> +<19BF> <4F47> +<19C0> <4F4E> +<19C1> <5132> +<19C2> <5480> +<19C3> <59D0> +<19C4> <5E95> +<19C5> <62B5> +<19C6> <6775> +<19C7> <696E> +<19C8> <6A17> +<19C9> <6CAE> +<19CA> <6E1A> +<19CB> <72D9> +<19CC> <732A> +<19CD> <75BD> +<19CE> <7BB8> +endbfchar + +100 beginbfchar +<19CF> <7D35> +<19D0> <82E7> +<19D1> <83F9> +<19D2> <8457> +<19D3> <85F7> +<19D4> <8A5B> +<19D5> <8CAF> +<19D6> <8E87> +<19D7> <9019> +<19D8> <90B8> +<19D9> <96CE> +<19DA> <9F5F> +<19DB> <52E3> +<19DC> <540A> +<19DD> <5AE1> +<19DE> <5BC2> +<19DF> <6458> +<19E0> <6575> +<19E1> <6EF4> +<19E2> <72C4> +<19E3> <7684> +<19E4> <7A4D> +<19E5> <7B1B> +<19E6> <7C4D> +<19E7> <7E3E> +<19E8> <7FDF> +<19E9> <837B> +<19EA> <8B2B> +<19EB> <8CCA> +<19EC> <8D64> +<19ED> <8DE1> +<19EE> <8E5F> +<19EF> <8FEA> +<19F0> <8FF9> +<19F1> <9069> +<19F2> <93D1> +<19F3> <4F43> +<19F4> <4F7A> +<19F5> <50B3> +<19F6> <5168> +<19F7> <5178> +<19F8> <524D> +<19F9> <526A> +<19FA> <5861> +<19FB> <587C> +<19FC> <5960> +<19FD> <5C08> +<19FE> <5C55> +<19FF> <5EDB> +<1A00> <609B> +<1A01> <6230> +<1A02> <6813> +<1A03> <6BBF> +<1A04> <6C08> +<1A05> <6FB1> +<1A06> <714E> +<1A07> <7420> +<1A08> <7530> +<1A09> <7538> +<1A0A> <7551> +<1A0B> <7672> +<1A0C> <7B4C> +<1A0D> <7B8B> +<1A0E> <7BAD> +<1A0F> <7BC6> +<1A10> <7E8F> +<1A11> <8A6E> +<1A12> <8F3E> +<1A13> <8F49> +<1A14> <923F> +<1A15> <9293> +<1A16> <9322> +<1A17> <942B> +<1A18> <96FB> +<1A19> <985A> +<1A1A> <986B> +<1A1B> <991E> +<1A1C> <5207> +<1A1D> <622A> +<1A1E> <6298> +<1A1F> <6D59> +<1A20> <7664> +<1A21> <7ACA> +<1A22> <7BC0> +<1A23> <7D76> +<1A24> <5360> +<1A25> <5CBE> +<1A26> <5E97> +<1A27> <6F38> +<1A28> <70B9> +<1A29> <7C98> +<1A2A> <9711> +<1A2B> <9B8E> +<1A2C> <9EDE> +<1A2D> <63A5> +<1A2E> <647A> +<1A2F> <8776> +<1A30> <4E01> +<1A31> <4E95> +<1A32> <4EAD> +endbfchar + +100 beginbfchar +<1A33> <505C> +<1A34> <5075> +<1A35> <5448> +<1A36> <59C3> +<1A37> <5B9A> +<1A38> <5E40> +<1A39> <5EAD> +<1A3A> <5EF7> +<1A3B> <5F81> +<1A3C> <60C5> +<1A3D> <633A> +<1A3E> <653F> +<1A3F> <6574> +<1A40> <65CC> +<1A41> <6676> +<1A42> <6678> +<1A43> <67FE> +<1A44> <6968> +<1A45> <6A89> +<1A46> <6B63> +<1A47> <6C40> +<1A48> <6DC0> +<1A49> <6DE8> +<1A4A> <6E1F> +<1A4B> <6E5E> +<1A4C> <701E> +<1A4D> <70A1> +<1A4E> <738E> +<1A4F> <73FD> +<1A50> <753A> +<1A51> <775B> +<1A52> <7887> +<1A53> <798E> +<1A54> <7A0B> +<1A55> <7A7D> +<1A56> <7CBE> +<1A57> <7D8E> +<1A58> <8247> +<1A59> <8A02> +<1A5A> <8AEA> +<1A5B> <8C9E> +<1A5C> <912D> +<1A5D> <914A> +<1A5E> <91D8> +<1A5F> <9266> +<1A60> <92CC> +<1A61> <9320> +<1A62> <9706> +<1A63> <9756> +<1A64> <975C> +<1A65> <9802> +<1A66> <9F0E> +<1A67> <5236> +<1A68> <5291> +<1A69> <557C> +<1A6A> <5824> +<1A6B> <5E1D> +<1A6C> <5F1F> +<1A6D> <608C> +<1A6E> <63D0> +<1A6F> <68AF> +<1A70> <6FDF> +<1A71> <796D> +<1A72> <7B2C> +<1A73> <81CD> +<1A74> <85BA> +<1A75> <88FD> +<1A76> <8AF8> +<1A77> <8E44> +<1A78> <918D> +<1A79> <9664> +<1A7A> <969B> +<1A7B> <973D> +<1A7C> <984C> +<1A7D> <9F4A> +<1A7E> <4FCE> +<1A7F> <5146> +<1A80> <51CB> +<1A81> <52A9> +<1A82> <5632> +<1A83> <5F14> +<1A84> <5F6B> +<1A85> <63AA> +<1A86> <64CD> +<1A87> <65E9> +<1A88> <6641> +<1A89> <66FA> +<1A8A> <66F9> +<1A8B> <671D> +<1A8C> <689D> +<1A8D> <68D7> +<1A8E> <69FD> +<1A8F> <6F15> +<1A90> <6F6E> +<1A91> <7167> +<1A92> <71E5> +<1A93> <722A> +<1A94> <74AA> +<1A95> <773A> +<1A96> <7956> +endbfchar + +100 beginbfchar +<1A97> <795A> +<1A98> <79DF> +<1A99> <7A20> +<1A9A> <7A95> +<1A9B> <7C97> +<1A9C> <7CDF> +<1A9D> <7D44> +<1A9E> <7E70> +<1A9F> <8087> +<1AA0> <85FB> +<1AA1> <86A4> +<1AA2> <8A54> +<1AA3> <8ABF> +<1AA4> <8D99> +<1AA5> <8E81> +<1AA6> <9020> +<1AA7> <906D> +<1AA8> <91E3> +<1AA9> <963B> +<1AAA> <96D5> +<1AAB> <9CE5> +<1AAC> <65CF> +<1AAD> <7C07> +<1AAE> <8DB3> +<1AAF> <93C3> +<1AB0> <5B58> +<1AB1> <5C0A> +<1AB2> <5352> +<1AB3> <62D9> +<1AB4> <731D> +<1AB5> <5027> +<1AB6> <5B97> +<1AB7> <5F9E> +<1AB8> <60B0> +<1AB9> <616B> +<1ABA> <68D5> +<1ABB> <6DD9> +<1ABC> <742E> +<1ABD> <7A2E> +<1ABE> <7D42> +<1ABF> <7D9C> +<1AC0> <7E31> +<1AC1> <816B> +<1AC2> <8E2A> +<1AC3> <8E35> +<1AC4> <937E> +<1AC5> <9418> +<1AC6> <4F50> +<1AC7> <5750> +<1AC8> <5DE6> +<1AC9> <5EA7> +<1ACA> <632B> +<1ACB> <7F6A> +<1ACC> <4E3B> +<1ACD> <4F4F> +<1ACE> <4F8F> +<1ACF> <505A> +<1AD0> <59DD> +<1AD1> <80C4> +<1AD2> <546A> +<1AD3> <5468> +<1AD4> <55FE> +<1AD5> <594F> +<1AD6> <5B99> +<1AD7> <5DDE> +<1AD8> <5EDA> +<1AD9> <665D> +<1ADA> <6731> +<1ADB> <67F1> +<1ADC> <682A> +<1ADD> <6CE8> +<1ADE> <6D32> +<1ADF> <6E4A> +<1AE0> <6F8D> +<1AE1> <70B7> +<1AE2> <73E0> +<1AE3> <7587> +<1AE4> <7C4C> +<1AE5> <7D02> +<1AE6> <7D2C> +<1AE7> <7DA2> +<1AE8> <821F> +<1AE9> <86DB> +<1AEA> <8A3B> +<1AEB> <8A85> +<1AEC> <8D70> +<1AED> <8E8A> +<1AEE> <8F33> +<1AEF> <9031> +<1AF0> <914E> +<1AF1> <9152> +<1AF2> <9444> +<1AF3> <99D0> +<1AF4> <7AF9> +<1AF5> <7CA5> +<1AF6> <4FCA> +<1AF7> <5101> +<1AF8> <51C6> +<1AF9> <57C8> +<1AFA> <5BEF> +endbfchar + +100 beginbfchar +<1AFB> <5CFB> +<1AFC> <6659> +<1AFD> <6A3D> +<1AFE> <6D5A> +<1AFF> <6E96> +<1B00> <6FEC> +<1B01> <710C> +<1B02> <756F> +<1B03> <7AE3> +<1B04> <8822> +<1B05> <9021> +<1B06> <9075> +<1B07> <96CB> +<1B08> <99FF> +<1B09> <8301> +<1B0A> <4E2D> +<1B0B> <4EF2> +<1B0C> <8846> +<1B0D> <91CD> +<1B0E> <537D> +<1B0F> <6ADB> +<1B10> <696B> +<1B11> <6C41> +<1B12> <847A> +<1B13> <589E> +<1B14> <618E> +<1B15> <66FE> +<1B16> <62EF> +<1B17> <70DD> +<1B18> <7511> +<1B19> <75C7> +<1B1A> <7E52> +<1B1B> <84B8> +<1B1C> <8B49> +<1B1D> <8D08> +<1B1E> <4E4B> +<1B1F> <53EA> +<1B20> <54AB> +<1B21> <5730> +<1B22> <5740> +<1B23> <5FD7> +<1B24> <6301> +<1B25> <6307> +<1B26> <646F> +<1B27> <652F> +<1B28> <65E8> +<1B29> <667A> +<1B2A> <679D> +<1B2B> <67B3> +<1B2C> <6B62> +<1B2D> <6C60> +<1B2E> <6C9A> +<1B2F> <6F2C> +<1B30> <77E5> +<1B31> <7825> +<1B32> <7949> +<1B33> <7957> +<1B34> <7D19> +<1B35> <80A2> +<1B36> <8102> +<1B37> <81F3> +<1B38> <829D> +<1B39> <82B7> +<1B3A> <8718> +<1B3B> <8A8C> +<1B3C> <8D04> +<1B3D> <8DBE> +<1B3E> <9072> +<1B3F> <76F4> +<1B40> <7A19> +<1B41> <7A37> +<1B42> <7E54> +<1B43> <8077> +<1B44> <5507> +<1B45> <55D4> +<1B46> <5875> +<1B47> <632F> +<1B48> <6422> +<1B49> <6649> +<1B4A> <664B> +<1B4B> <686D> +<1B4C> <699B> +<1B4D> <6B84> +<1B4E> <6D25> +<1B4F> <6EB1> +<1B50> <73CD> +<1B51> <7468> +<1B52> <74A1> +<1B53> <755B> +<1B54> <75B9> +<1B55> <76E1> +<1B56> <771E> +<1B57> <778B> +<1B58> <79E6> +<1B59> <7E09> +<1B5A> <7E1D> +<1B5B> <81FB> +<1B5C> <852F> +<1B5D> <8897> +<1B5E> <8A3A> +endbfchar + +100 beginbfchar +<1B5F> <8CD1> +<1B60> <8EEB> +<1B61> <8FB0> +<1B62> <9032> +<1B63> <93AD> +<1B64> <9663> +<1B65> <9673> +<1B66> <9707> +<1B67> <4F84> +<1B68> <53F1> +<1B69> <59EA> +<1B6A> <5AC9> +<1B6B> <5E19> +<1B6C> <684E> +<1B6D> <74C6> +<1B6E> <75BE> +<1B6F> <79E9> +<1B70> <7A92> +<1B71> <81A3> +<1B72> <86ED> +<1B73> <8CEA> +<1B74> <8DCC> +<1B75> <8FED> +<1B76> <659F> +<1B77> <6715> +<1B78> <57F7> +<1B79> <6F57> +<1B7A> <7DDD> +<1B7B> <8F2F> +<1B7C> <93F6> +<1B7D> <96C6> +<1B7E> <5FB5> +<1B7F> <61F2> +<1B80> <6F84> +<1B81> <4E14> +<1B82> <4F98> +<1B83> <501F> +<1B84> <53C9> +<1B85> <55DF> +<1B86> <5D6F> +<1B87> <5DEE> +<1B88> <6B21> +<1B89> <6B64> +<1B8A> <78CB> +<1B8B> <7B9A> +<1B8C> <8E49> +<1B8D> <8ECA> +<1B8E> <906E> +<1B8F> <6349> +<1B90> <643E> +<1B91> <7740> +<1B92> <7A84> +<1B93> <932F> +<1B94> <947F> +<1B95> <9F6A> +<1B96> <64B0> +<1B97> <6FAF> +<1B98> <71E6> +<1B99> <74A8> +<1B9A> <74DA> +<1B9B> <7AC4> +<1B9C> <7C12> +<1B9D> <7E82> +<1B9E> <7CB2> +<1B9F> <7E98> +<1BA0> <8B9A> +<1BA1> <8D0A> +<1BA2> <947D> +<1BA3> <9910> +<1BA4> <994C> +<1BA5> <5239> +<1BA6> <5BDF> +<1BA7> <64E6> +<1BA8> <672D> +<1BA9> <7D2E> +<1BAA> <50ED> +<1BAB> <53C3> +<1BAC> <5879> +<1BAF> <61FA> +<1BB0> <65AC> +<1BB1> <7AD9> +<1BB2> <8B92> +<1BB3> <8B96> +<1BB4> <5009> +<1BB5> <5021> +<1BB6> <5275> +<1BB7> <5531> +<1BB8> <5A3C> +<1BB9> <5EE0> +<1BBA> <5F70> +<1BBB> <6134> +<1BBC> <655E> +<1BBD> <660C> +<1BBE> <6636> +<1BBF> <66A2> +<1BC0> <69CD> +<1BC1> <6EC4> +<1BC2> <6F32> +<1BC3> <7316> +<1BC4> <7621> +endbfchar + +100 beginbfchar +<1BC5> <7A93> +<1BC6> <8139> +<1BC7> <8259> +<1BC8> <83D6> +<1BC9> <84BC> +<1BCA> <50B5> +<1BCB> <57F0> +<1BCC> <5BC0> +<1BCD> <5BE8> +<1BCE> <5F69> +<1BCF> <63A1> +<1BD0> <7826> +<1BD1> <7DB5> +<1BD2> <83DC> +<1BD3> <8521> +<1BD4> <91C7> +<1BD5> <91F5> +<1BD6> <518A> +<1BD7> <67F5> +<1BD8> <7B56> +<1BD9> <8CAC> +<1BDA> <51C4> +<1BDB> <59BB> +<1BDC> <60BD> +<1BDD> <8655> +<1BDE> <501C> +<1BDF> <5254> +<1BE0> <5C3A> +<1BE1> <617D> +<1BE2> <621A> +<1BE3> <62D3> +<1BE4> <64F2> +<1BE5> <65A5> +<1BE6> <6ECC> +<1BE7> <7620> +<1BE8> <810A> +<1BE9> <8E60> +<1BEA> <965F> +<1BEB> <96BB> +<1BEC> <4EDF> +<1BED> <5343> +<1BEE> <5598> +<1BEF> <5929> +<1BF0> <5DDD> +<1BF1> <64C5> +<1BF2> <6CC9> +<1BF3> <6DFA> +<1BF4> <7394> +<1BF5> <7A7F> +<1BF6> <821B> +<1BF7> <85A6> +<1BF8> <8CE4> +<1BF9> <8E10> +<1BFA> <9077> +<1BFB> <91E7> +<1BFC> <95E1> +<1BFD> <9621> +<1BFE> <97C6> +<1BFF> <51F8> +<1C00> <54F2> +<1C01> <5586> +<1C02> <5FB9> +<1C03> <64A4> +<1C04> <6F88> +<1C05> <7DB4> +<1C06> <8F1F> +<1C07> <8F4D> +<1C08> <9435> +<1C09> <50C9> +<1C0A> <5C16> +<1C0B> <6CBE> +<1C0C> <6DFB> +<1C0D> <751B> +<1C0E> <77BB> +<1C0F> <7C3D> +<1C10> <7C64> +<1C11> <8A79> +<1C12> <8AC2> +<1C13> <581E> +<1C14> <59BE> +<1C15> <5E16> +<1C16> <6377> +<1C17> <7252> +<1C18> <758A> +<1C19> <776B> +<1C1A> <8ADC> +<1C1B> <8CBC> +<1C1C> <8F12> +<1C1D> <5EF3> +<1C1E> <6674> +<1C1F> <6DF8> +<1C20> <807D> +<1C21> <83C1> +<1C22> <8ACB> +<1C23> <9751> +<1C24> <9BD6> +<1C25> <5243> +<1C26> <66FF> +<1C27> <6D95> +<1C28> <6EEF> +endbfchar + +100 beginbfchar +<1C29> <7DE0> +<1C2A> <8AE6> +<1C2B> <902E> +<1C2C> <905E> +<1C2D> <9AD4> +<1C2E> <521D> +<1C2F> <527F> +<1C30> <54E8> +<1C31> <6194> +<1C32> <6284> +<1C33> <62DB> +<1C34> <68A2> +<1C35> <6912> +<1C36> <695A> +<1C37> <6A35> +<1C38> <7092> +<1C39> <7126> +<1C3A> <785D> +<1C3B> <7901> +<1C3C> <790E> +<1C3D> <79D2> +<1C3E> <7A0D> +<1C3F> <8096> +<1C40> <8278> +<1C41> <82D5> +<1C42> <8349> +<1C43> <8549> +<1C44> <8C82> +<1C45> <8D85> +<1C46> <9162> +<1C47> <918B> +<1C48> <91AE> +<1C49> <4FC3> +<1C4A> <56D1> +<1C4B> <71ED> +<1C4C> <77D7> +<1C4D> <8700> +<1C4E> <89F8> +<1C4F> <5BF8> +<1C50> <5FD6> +<1C51> <6751> +<1C52> <90A8> +<1C53> <53E2> +<1C54> <585A> +<1C55> <5BF5> +<1C56> <60A4> +<1C57> <6181> +<1C58> <6460> +<1C59> <7E3D> +<1C5A> <8070> +<1C5B> <8525> +<1C5C> <9283> +<1C5D> <64AE> +<1C5E> <50AC> +<1C5F> <5D14> +<1C60> <6700> +<1C61> <589C> +<1C62> <62BD> +<1C63> <63A8> +<1C64> <690E> +<1C65> <6978> +<1C66> <6A1E> +<1C67> <6E6B> +<1C68> <76BA> +<1C69> <79CB> +<1C6A> <82BB> +<1C6B> <8429> +<1C6C> <8ACF> +<1C6D> <8DA8> +<1C6E> <8FFD> +<1C6F> <9112> +<1C70> <914B> +<1C71> <919C> +<1C72> <9310> +<1C73> <9318> +<1C74> <939A> +<1C75> <96DB> +<1C76> <9A36> +<1C77> <9C0D> +<1C78> <4E11> +<1C79> <755C> +<1C7A> <795D> +<1C7B> <7AFA> +<1C7C> <7B51> +<1C7D> <7BC9> +<1C7E> <7E2E> +<1C7F> <84C4> +<1C80> <8E59> +<1C81> <8E74> +<1C82> <8EF8> +<1C83> <9010> +<1C84> <6625> +<1C85> <693F> +<1C86> <7443> +<1C87> <51FA> +<1C88> <672E> +<1C89> <9EDC> +<1C8A> <5145> +<1C8B> <5FE0> +<1C8C> <6C96> +endbfchar + +100 beginbfchar +<1C8D> <87F2> +<1C8E> <885D> +<1C8F> <8877> +<1C90> <60B4> +<1C91> <81B5> +<1C92> <8403> +<1C93> <8D05> +<1C94> <53D6> +<1C95> <5439> +<1C96> <5634> +<1C97> <5A36> +<1C98> <5C31> +<1C99> <708A> +<1C9A> <7FE0> +<1C9B> <805A> +<1C9C> <8106> +<1C9D> <81ED> +<1C9E> <8DA3> +<1C9F> <9189> +<1CA0> <9A5F> +<1CA1> <9DF2> +<1CA2> <5074> +<1CA3> <4EC4> +<1CA4> <53A0> +<1CA5> <60FB> +<1CA6> <6E2C> +<1CA7> <5C64> +<1CA8> <4F88> +<1CA9> <5024> +<1CAA> <55E4> +<1CAB> <5CD9> +<1CAC> <5E5F> +<1CAD> <6065> +<1CAE> <6894> +<1CAF> <6CBB> +<1CB0> <6DC4> +<1CB1> <71BE> +<1CB2> <75D4> +<1CB3> <75F4> +<1CB4> <7661> +<1CB5> <7A1A> +<1CB6> <7A49> +<1CB7> <7DC7> +<1CB8> <7DFB> +<1CB9> <7F6E> +<1CBA> <81F4> +<1CBB> <86A9> +<1CBC> <8F1C> +<1CBD> <96C9> +<1CBE> <99B3> +<1CBF> <9F52> +<1CC0> <5247> +<1CC1> <52C5> +<1CC2> <98ED> +<1CC3> <89AA> +<1CC4> <4E03> +<1CC5> <67D2> +<1CC6> <6F06> +<1CC7> <4FB5> +<1CC8> <5BE2> +<1CC9> <6795> +<1CCA> <6C88> +<1CCB> <6D78> +<1CCC> <741B> +<1CCD> <7827> +<1CCE> <91DD> +<1CCF> <937C> +<1CD0> <87C4> +<1CD1> <79E4> +<1CD2> <7A31> +<1CD3> <5FEB> +<1CD4> <4ED6> +<1CD5> <54A4> +<1CD6> <553E> +<1CD7> <58AE> +<1CD8> <59A5> +<1CD9> <60F0> +<1CDA> <6253> +<1CDB> <62D6> +<1CDC> <6736> +<1CDD> <6955> +<1CDE> <8235> +<1CDF> <9640> +<1CE0> <99B1> +<1CE1> <99DD> +<1CE2> <502C> +<1CE3> <5353> +<1CE4> <5544> +<1CE5> <577C> +<1CE6> <6258> +<1CE7> <64E2> +<1CE8> <666B> +<1CE9> <67DD> +<1CEA> <6FC1> +<1CEB> <6FEF> +<1CEC> <7422> +<1CED> <7438> +<1CEE> <8A17> +<1CEF> <9438> +<1CF0> <5451> +endbfchar + +100 beginbfchar +<1CF1> <5606> +<1CF2> <5766> +<1CF3> <5F48> +<1CF4> <619A> +<1CF5> <6B4E> +<1CF6> <7058> +<1CF7> <70AD> +<1CF8> <7DBB> +<1CF9> <8A95> +<1CFA> <596A> +<1CFB> <812B> +<1CFC> <63A2> +<1CFD> <7708> +<1CFE> <803D> +<1CFF> <8CAA> +<1D00> <5854> +<1D01> <642D> +<1D02> <69BB> +<1D03> <5B95> +<1D04> <5E11> +<1D05> <6E6F> +<1D06> <8569> +<1D07> <514C> +<1D08> <53F0> +<1D09> <592A> +<1D0A> <6020> +<1D0B> <614B> +<1D0C> <6B86> +<1D0D> <6C70> +<1D0E> <6CF0> +<1D0F> <7B1E> +<1D10> <80CE> +<1D11> <82D4> +<1D12> <8DC6> +<1D13> <90B0> +<1D14> <98B1> +<1D15> <64C7> +<1D16> <6FA4> +<1D17> <6491> +<1D18> <6504> +<1D19> <514E> +<1D1A> <5410> +<1D1B> <571F> +<1D1C> <8A0E> +<1D1D> <615F> +<1D1E> <6876> +<1D1F> <75DB> +<1D20> <7B52> +<1D21> <7D71> +<1D22> <901A> +<1D23> <5806> +<1D24> <69CC> +<1D25> <817F> +<1D26> <892A> +<1D27> <9000> +<1D28> <9839> +<1D29> <5078> +<1D2A> <5957> +<1D2B> <59AC> +<1D2C> <6295> +<1D2D> <900F> +<1D2E> <9B2A> +<1D2F> <615D> +<1D30> <7279> +<1D31> <95D6> +<1D32> <5761> +<1D33> <5A46> +<1D34> <5DF4> +<1D35> <628A> +<1D36> <64AD> +<1D37> <64FA> +<1D38> <6777> +<1D39> <6CE2> +<1D3A> <6D3E> +<1D3B> <722C> +<1D3C> <7436> +<1D3D> <7834> +<1D3E> <7F77> +<1D3F> <82AD> +<1D40> <8DDB> +<1D41> <9817> +<1D42> <5224> +<1D43> <5742> +<1D44> <677F> +<1D45> <7248> +<1D46> <74E3> +<1D47> <8CA9> +<1D48> <8FA6> +<1D49> <9211> +<1D4A> <962A> +<1D4B> <516B> +<1D4C> <53ED> +<1D4D> <634C> +<1D4E> <4F69> +<1D4F> <5504> +<1D50> <6096> +<1D51> <6557> +<1D52> <6C9B> +<1D53> <6D7F> +<1D54> <724C> +endbfchar + +100 beginbfchar +<1D55> <72FD> +<1D56> <7A17> +<1D57> <8987> +<1D58> <8C9D> +<1D59> <5F6D> +<1D5A> <6F8E> +<1D5B> <70F9> +<1D5C> <81A8> +<1D5D> <610E> +<1D5E> <4FBF> +<1D5F> <504F> +<1D60> <6241> +<1D61> <7247> +<1D62> <7BC7> +<1D63> <7DE8> +<1D64> <7FE9> +<1D65> <904D> +<1D66> <97AD> +<1D67> <9A19> +<1D68> <8CB6> +<1D69> <576A> +<1D6A> <5E73> +<1D6B> <67B0> +<1D6C> <840D> +<1D6D> <8A55> +<1D6E> <5420> +<1D6F> <5B16> +<1D70> <5E63> +<1D71> <5EE2> +<1D72> <5F0A> +<1D73> <6583> +<1D74> <80BA> +<1D75> <853D> +<1D76> <9589> +<1D77> <965B> +<1D78> <4F48> +<1D79> <5305> +<1D7A> <530D> +<1D7B> <530F> +<1D7C> <5486> +<1D7D> <54FA> +<1D7E> <5703> +<1D7F> <5E03> +<1D80> <6016> +<1D81> <629B> +<1D82> <62B1> +<1D83> <6355> +<1D84> <6CE1> +<1D85> <6D66> +<1D86> <75B1> +<1D87> <7832> +<1D88> <80DE> +<1D89> <812F> +<1D8A> <82DE> +<1D8B> <8461> +<1D8C> <84B2> +<1D8D> <888D> +<1D8E> <8912> +<1D8F> <900B> +<1D90> <92EA> +<1D91> <98FD> +<1D92> <9B91> +<1D93> <5E45> +<1D94> <66B4> +<1D95> <66DD> +<1D96> <7011> +<1D97> <7206> +<1D98> <4FF5> +<1D99> <527D> +<1D9A> <5F6A> +<1D9B> <6153> +<1D9C> <6753> +<1D9D> <6A19> +<1D9E> <6F02> +<1D9F> <74E2> +<1DA0> <7968> +<1DA1> <8868> +<1DA2> <8C79> +<1DA3> <98C7> +<1DA4> <98C4> +<1DA5> <9A43> +<1DA6> <54C1> +<1DA7> <7A1F> +<1DA8> <6953> +<1DA9> <8AF7> +<1DAA> <8C4A> +<1DAB> <98A8> +<1DAC> <99AE> +<1DAD> <5F7C> +<1DAE> <62AB> +<1DAF> <75B2> +<1DB0> <76AE> +<1DB1> <88AB> +<1DB2> <907F> +<1DB3> <9642> +<1DB4> <5339> +<1DB5> <5F3C> +<1DB6> <5FC5> +<1DB7> <6CCC> +<1DB8> <73CC> +endbfchar + +100 beginbfchar +<1DB9> <7562> +<1DBA> <758B> +<1DBB> <7B46> +<1DBC> <82FE> +<1DBD> <999D> +<1DBE> <4E4F> +<1DBF> <903C> +<1DC0> <4E0B> +<1DC1> <4F55> +<1DC2> <53A6> +<1DC3> <590F> +<1DC4> <5EC8> +<1DC5> <6630> +<1DC6> <6CB3> +<1DC7> <7455> +<1DC8> <8377> +<1DC9> <8766> +<1DCA> <8CC0> +<1DCB> <9050> +<1DCC> <971E> +<1DCD> <9C15> +<1DCE> <58D1> +<1DCF> <5B78> +<1DD0> <8650> +<1DD1> <8B14> +<1DD2> <9DB4> +<1DD3> <5BD2> +<1DD4> <6068> +<1DD5> <608D> +<1DD6> <65F1> +<1DD7> <6C57> +<1DD8> <6F22> +<1DD9> <6FA3> +<1DDA> <701A> +<1DDB> <7F55> +<1DDC> <7FF0> +<1DDF> <9650> +<1DE0> <97D3> +<1DE1> <5272> +<1DE2> <8F44> +<1DE3> <51FD> +<1DE4> <542B> +<1DE5> <54B8> +<1DE6> <5563> +<1DE7> <558A> +<1DE8> <6ABB> +<1DE9> <6DB5> +<1DEA> <7DD8> +<1DEB> <8266> +<1DEC> <929C> +<1DED> <9677> +<1DEE> <9E79> +<1DEF> <5408> +<1DF0> <54C8> +<1DF1> <76D2> +<1DF2> <86E4> +<1DF3> <95A4> +<1DF4> <95D4> +<1DF5> <965C> +<1DF6> <4EA2> +<1DF7> <4F09> +<1DF8> <59EE> +<1DF9> <5AE6> +<1DFA> <5DF7> +<1DFB> <6052> +<1DFC> <6297> +<1DFD> <676D> +<1DFE> <6841> +<1DFF> <6C86> +<1E00> <6E2F> +<1E01> <7F38> +<1E02> <809B> +<1E03> <822A> +<1E04> <9805> +<1E05> <4EA5> +<1E06> <5055> +<1E07> <54B3> +<1E08> <5793> +<1E09> <595A> +<1E0A> <5B69> +<1E0B> <5BB3> +<1E0C> <61C8> +<1E0D> <6977> +<1E0E> <6D77> +<1E0F> <7023> +<1E10> <87F9> +<1E11> <89E3> +<1E12> <8A72> +<1E13> <8AE7> +<1E14> <9082> +<1E15> <99ED> +<1E16> <9AB8> +<1E17> <52BE> +<1E18> <6838> +<1E19> <5016> +<1E1A> <5E78> +<1E1B> <674F> +<1E1C> <8347> +<1E1D> <884C> +<1E1E> <4EAB> +endbfchar + +100 beginbfchar +<1E1F> <5411> +<1E20> <56AE> +<1E21> <73E6> +<1E22> <9115> +<1E23> <97FF> +<1E24> <9909> +<1E25> <9957> +<1E26> <9999> +<1E27> <5653> +<1E28> <589F> +<1E29> <865B> +<1E2A> <8A31> +<1E2B> <61B2> +<1E2C> <6AF6> +<1E2D> <737B> +<1E2E> <8ED2> +<1E2F> <6B47> +<1E30> <96AA> +<1E31> <9A57> +<1E32> <5955> +<1E33> <7200> +<1E34> <8D6B> +<1E35> <9769> +<1E36> <4FD4> +<1E37> <5CF4> +<1E38> <5F26> +<1E39> <61F8> +<1E3A> <665B> +<1E3B> <6CEB> +<1E3C> <70AB> +<1E3D> <7384> +<1E3E> <73B9> +<1E3F> <73FE> +<1E40> <7729> +<1E41> <774D> +<1E42> <7D43> +<1E43> <7D62> +<1E44> <7E23> +<1E45> <8237> +<1E46> <8852> +<1E47> <8CE2> +<1E48> <9249> +<1E49> <986F> +<1E4A> <5B51> +<1E4B> <7A74> +<1E4C> <8840> +<1E4D> <9801> +<1E4E> <5ACC> +<1E4F> <4FE0> +<1E50> <5354> +<1E51> <593E> +<1E52> <5CFD> +<1E53> <633E> +<1E54> <6D79> +<1E55> <72F9> +<1E56> <8105> +<1E57> <8107> +<1E58> <83A2> +<1E59> <92CF> +<1E5A> <9830> +<1E5B> <4EA8> +<1E5C> <5144> +<1E5D> <5211> +<1E5E> <578B> +<1E5F> <5F62> +<1E60> <6CC2> +<1E61> <6ECE> +<1E62> <7005> +<1E63> <7050> +<1E64> <70AF> +<1E65> <7192> +<1E66> <73E9> +<1E67> <7469> +<1E68> <834A> +<1E69> <87A2> +<1E6A> <8861> +<1E6B> <9008> +<1E6C> <90A2> +<1E6D> <93A3> +<1E6E> <99A8> +<1E6F> <516E> +<1E70> <5F57> +<1E71> <60E0> +<1E72> <6167> +<1E73> <66B3> +<1E74> <8559> +<1E75> <8E4A> +<1E76> <91AF> +<1E77> <978B> +<1E78> <4E4E> +<1E79> <4E92> +<1E7A> <547C> +<1E7B> <58D5> +<1E7C> <58FA> +<1E7D> <597D> +<1E7E> <5CB5> +<1E7F> <5F27> +<1E80> <6236> +<1E81> <6248> +<1E82> <660A> +endbfchar + +100 beginbfchar +<1E83> <6667> +<1E84> <6BEB> +<1E85> <6D69> +<1E86> <6DCF> +<1E87> <6E56> +<1E88> <6EF8> +<1E89> <6F94> +<1E8A> <6FE0> +<1E8B> <6FE9> +<1E8C> <705D> +<1E8D> <72D0> +<1E8E> <7425> +<1E8F> <745A> +<1E90> <74E0> +<1E91> <7693> +<1E92> <795C> +<1E93> <7CCA> +<1E94> <7E1E> +<1E95> <80E1> +<1E96> <82A6> +<1E97> <846B> +<1E98> <84BF> +<1E99> <864E> +<1E9A> <865F> +<1E9B> <8774> +<1E9C> <8B77> +<1E9D> <8C6A> +<1E9E> <93AC> +<1E9F> <9800> +<1EA0> <9865> +<1EA1> <60D1> +<1EA2> <6216> +<1EA3> <9177> +<1EA4> <5A5A> +<1EA5> <660F> +<1EA6> <6DF7> +<1EA7> <6E3E> +<1EA8> <743F> +<1EA9> <9B42> +<1EAA> <5FFD> +<1EAB> <60DA> +<1EAC> <7B0F> +<1EAD> <54C4> +<1EAE> <5F18> +<1EAF> <6C5E> +<1EB0> <6CD3> +<1EB1> <6D2A> +<1EB2> <70D8> +<1EB3> <7D05> +<1EB4> <8679> +<1EB5> <8A0C> +<1EB6> <9D3B> +<1EB7> <5316> +<1EB8> <548C> +<1EB9> <5B05> +<1EBA> <6A3A> +<1EBB> <706B> +<1EBC> <7575> +<1EBD> <798D> +<1EBE> <79BE> +<1EBF> <82B1> +<1EC0> <83EF> +<1EC1> <8A71> +<1EC2> <8B41> +<1EC3> <8CA8> +<1EC4> <9774> +<1EC5> <64F4> +<1EC6> <652B> +<1EC9> <7A6B> +<1ECA> <4E38> +<1ECB> <559A> +<1ECC> <5950> +<1ECD> <5BA6> +<1ECE> <5E7B> +<1ECF> <60A3> +<1ED0> <63DB> +<1ED1> <6B61> +<1ED2> <6665> +<1ED3> <6853> +<1ED4> <6E19> +<1ED5> <7165> +<1ED6> <74B0> +<1ED7> <7D08> +<1ED8> <9084> +<1ED9> <9A69> +<1EDA> <9C25> +<1EDB> <6D3B> +<1EDC> <6ED1> +<1EDD> <733E> +<1EDE> <8C41> +<1EDF> <95CA> +<1EE0> <51F0> +<1EE1> <5E4C> +<1EE2> <5FA8> +<1EE3> <604D> +<1EE4> <60F6> +<1EE5> <6130> +<1EE6> <614C> +<1EE9> <69A5> +<1EEA> <6CC1> +endbfchar + +100 beginbfchar +<1EEB> <6E5F> +<1EEC> <6EC9> +<1EED> <6F62> +<1EEE> <714C> +<1EEF> <749C> +<1EF0> <7687> +<1EF1> <7BC1> +<1EF2> <7C27> +<1EF3> <8352> +<1EF4> <8757> +<1EF5> <9051> +<1EF6> <968D> +<1EF7> <9EC3> +<1EF8> <532F> +<1EF9> <56DE> +<1EFA> <5EFB> +<1EFB> <5F8A> +<1EFC> <6062> +<1EFD> <6094> +<1EFE> <61F7> +<1EFF> <6666> +<1F00> <6703> +<1F01> <6A9C> +<1F02> <6DEE> +<1F03> <6FAE> +<1F04> <7070> +<1F05> <736A> +<1F06> <7E6A> +<1F07> <81BE> +<1F08> <8334> +<1F09> <86D4> +<1F0A> <8AA8> +<1F0B> <8CC4> +<1F0C> <5283> +<1F0D> <7372> +<1F0E> <5B96> +<1F0F> <6A6B> +<1F10> <9404> +<1F11> <54EE> +<1F12> <5686> +<1F13> <5B5D> +<1F14> <6548> +<1F15> <6585> +<1F16> <66C9> +<1F17> <689F> +<1F18> <6D8D> +<1F19> <6DC6> +<1F1A> <723B> +<1F1B> <80B4> +<1F1C> <9175> +<1F1D> <9A4D> +<1F1E> <4FAF> +<1F1F> <5019> +<1F20> <539A> +<1F21> <540E> +<1F22> <543C> +<1F23> <5589> +<1F24> <55C5> +<1F25> <5E3F> +<1F26> <5F8C> +<1F27> <673D> +<1F28> <7166> +<1F29> <73DD> +<1F2A> <9005> +<1F2B> <52DB> +<1F2C> <52F3> +<1F2D> <5864> +<1F2E> <58CE> +<1F2F> <7104> +<1F30> <718F> +<1F31> <71FB> +<1F32> <85B0> +<1F33> <8A13> +<1F34> <6688> +<1F35> <85A8> +<1F36> <55A7> +<1F37> <6684> +<1F38> <714A> +<1F39> <8431> +<1F3A> <5349> +<1F3B> <5599> +<1F3C> <6BC1> +<1F3D> <5F59> +<1F3E> <5FBD> +<1F3F> <63EE> +<1F40> <6689> +<1F41> <7147> +<1F42> <8AF1> +<1F43> <8F1D> +<1F44> <9EBE> +<1F45> <4F11> +<1F46> <643A> +<1F47> <70CB> +<1F48> <7566> +<1F49> <8667> +<1F4A> <6064> +<1F4B> <8B4E> +<1F4C> <9DF8> +<1F4D> <5147> +<1F4E> <51F6> +endbfchar + +100 beginbfchar +<1F4F> <5308> +<1F50> <6D36> +<1F51> <80F8> +<1F52> <9ED1> +<1F53> <6615> +<1F54> <6B23> +<1F55> <7098> +<1F56> <75D5> +<1F57> <5403> +<1F58> <5C79> +<1F59> <7D07> +<1F5A> <8A16> +<1F5B> <6B20> +<1F5C> <6B3D> +<1F5D> <6B46> +<1F5E> <5438> +<1F5F> <6070> +<1F60> <6D3D> +<1F61> <7FD5> +<1F62> <8208> +<1F63> <50D6> +<1F64> <51DE> +<1F65> <559C> +<1F66> <566B> +<1F67> <56CD> +<1F68> <59EC> +<1F69> <5B09> +<1F6A> <5E0C> +<1F6B> <6199> +<1F6C> <6198> +<1F6D> <6231> +<1F6E> <665E> +<1F6F> <66E6> +<1F70> <7199> +<1F73> <72A7> +<1F74> <79A7> +<1F75> <7A00> +<1F76> <7FB2> +<1F77> <8A70> +<1F7A> <2025> +<1F7B> <00AD> +<1F7C> <2015> +<1F7D> <2225> +<1F7E> +<1F8B> <3013> +<1F8C> +<1F8F> +<1F90> +<1F97> +<1F98> +<1F99> +<1FFC> <203E> +<1FFD> <007E> +<1FFE> <005C> +<1FFF> <231C> +<2000> <231F> +<200F> <00280028> +<2010> <00290029> +<2011> <00280028> +<2012> <00290029> +<201F> <005B> +<2020> <005D> +<2023> <263E> +<2024> <263D> +<2025> <2021> +<2026> <2021> +<202A> <2217> +<202D> <201F> +<202E> <201B> +<2031> <00D7> +<2032> <221E> +<2034> <00B1> +<2035> <2213> +<2036> <003E> +<2039> <2260> +<203C> <007B> +<203D> <007D> +<2042> <2282> +<2043> <2208> +<2044> <03A3> +<2045> <0021> +<204D> <4E03> +<2050> <5341> +<2053> <0027> +<2056> <002A> +<2058> <2217> +<2059> <002A> +<205A> +<205D> <00280028> +<205E> <00290029> +<205F> <00280028> +<2060> <00290029> +<2069> <003120DE> +<206A> <003220DE> +<206B> <003320DE> +<206C> <003420DE> +<206D> <003520DE> +<206E> <003620DE> +<206F> <003720DE> +<2070> <003820DE> +endbfchar + +100 beginbfchar +<2071> <003920DE> +<2072> <005B00310030005D> +<2073> <005B00310031005D> +<2074> <005B00310032005D> +<2075> <005B00310033005D> +<2076> <005B00310034005D> +<2077> <005B00310035005D> +<2078> <005B00310036005D> +<2079> <005B00310037005D> +<207A> <005B00310038005D> +<207B> <005B00310039005D> +<207C> <005B00320030005D> +<207D> <00B6> +<2080> <22EF> +<2081> <2237> +<2082> <003120DE> +<2083> <003220DE> +<2084> <003320DE> +<2085> <003420DE> +<2086> <003520DE> +<2087> <003620DE> +<2088> <003720DE> +<2089> <003820DE> +<208A> <003920DE> +<208B> <005B00310030005D> +<208C> <005B00310031005D> +<208D> <005B00310032005D> +<208E> <005B00310033005D> +<208F> <005B00310034005D> +<2090> <005B00310035005D> +<2091> <005B00310036005D> +<2092> <005B00310037005D> +<2093> <005B00310038005D> +<2094> <005B00310039005D> +<2095> <005B00320030005D> +<20AA> <002800410029> +<20AB> <002800420029> +<20AC> <002800430029> +<20AD> <002800440029> +<20AE> <002800450029> +<20AF> <002800460029> +<20B0> <002800470029> +<20B1> <002800480029> +<20B2> <002800490029> +<20B3> <0028004A0029> +<20B4> <0028004B0029> +<20B5> <0028004C0029> +<20B6> <0028004D0029> +<20B7> <0028004E0029> +<20B8> <0028004F0029> +<20B9> <002800500029> +<20BA> <002800510029> +<20BB> <002800520029> +<20BC> <002800530029> +<20BD> <002800540029> +<20BE> <002800550029> +<20BF> <002800560029> +<20C0> <002800570029> +<20C1> <002800580029> +<20C2> <002800590029> +<20C3> <0028005A0029> +<20DE> <003120DE> +<20DF> <003220DE> +<20E0> <003320DE> +<20E1> <003420DE> +<20E2> <003520DE> +<20E3> <003620DE> +<20E4> <003720DE> +<20E5> <003820DE> +<20E6> <003920DE> +<20E7> <005B00310030005D> +<20E8> <005B00310031005D> +<20E9> <005B00310032005D> +<20EA> <005B00310033005D> +<20EB> <005B00310034005D> +<20EC> <005B00310035005D> +<20ED> <005B00310036005D> +<20EE> <005B00310037005D> +<20EF> <005B00310038005D> +<20F0> <005B00310039005D> +<20F1> <005B00320030005D> +<20F2> <003120DE> +<20F3> <003220DE> +<20F4> <003320DE> +<20F5> <003420DE> +<20F6> <003520DE> +<20F7> <003620DE> +<20F8> <003720DE> +<20F9> <003820DE> +<20FA> <003920DE> +<20FB> <005B00310030005D> +<20FC> <005B00310031005D> +<20FD> <005B00310032005D> +<20FE> <005B00310033005D> +<20FF> <005B00310034005D> +<2100> <005B00310035005D> +<2101> <005B00310036005D> +<2102> <005B00310037005D> +<2103> <005B00310038005D> +<2104> <005B00310039005D> +endbfchar + +100 beginbfchar +<2105> <005B00320030005D> +<211B> <22CF> +<211E> <22CE> +<2126> <228A> +<2128> <228B> +<212B> <2279> +<2132> <2221> +<2133> <2245> +<2134> <2243> +<2135> <2248> +<2137> <22A4> +<2138> <22AB> +<213A> <003020DE> +<213B> <003120DE> +<213C> <003220DE> +<213D> <003320DE> +<213E> <003420DE> +<213F> <003520DE> +<2140> <003620DE> +<2141> <003720DE> +<2142> <003820DE> +<2143> <003920DE> +<214E> <00410029> +<214F> <00420029> +<2150> <00430029> +<2151> <00440029> +<2152> <00450029> +<2153> <00460029> +<2154> <00470029> +<2155> <00480029> +<2156> <00490029> +<2157> <004A0029> +<2158> <004B0029> +<2159> <004C0029> +<215A> <004D0029> +<215B> <004E0029> +<215C> <004F0029> +<215D> <00500029> +<215E> <00510029> +<215F> <00520029> +<2160> <00530029> +<2161> <00540029> +<2162> <00550029> +<2163> <00560029> +<2164> <00570029> +<2165> <00580029> +<2166> <00590029> +<2167> <005A0029> +<2168> <00610029> +<2169> <00620029> +<216A> <00630029> +<216B> <00640029> +<216C> <00650029> +<216D> <00660029> +<216E> <00670029> +<216F> <00680029> +<2170> <00690029> +<2171> <006A0029> +<2172> <006B0029> +<2173> <006C0029> +<2174> <006D0029> +<2175> <006E0029> +<2176> <006F0029> +<2177> <00700029> +<2178> <00710029> +<2179> <00720029> +<217A> <00730029> +<217B> <00740029> +<217C> <00750029> +<217D> <00760029> +<217E> <00770029> +<217F> <00780029> +<2180> <00790029> +<2181> <007A0029> +<2182> <0021> +<2183> <00B0> +<2184> <0027> +<2185> <0022> +<2186> <2034> +<2187> <0028003200370029> +<2188> <0028003200380029> +<2189> <0028003200390029> +<218A> <0028003300300029> +<218D> <2020> +<218E> <20202020> +<218F> <20212021> +<2190> <202020202020> +<2191> <00A7> +<2192> <0023> +<2193> <002A> +<2194> <002A> +<2197> <2042> +<2198> <002A> +<219B> <2042> +<219C> <002A> +<219F> <2022> +<21A0> <25A020DF> +<21A1> <25C720DF> +<21A3> <25A120DF> +<21A8> <261C> +endbfchar + +100 beginbfchar +<21A9> <261E> +<21AC> <25C720DE> +<21AE> <25A120DE> +<21AF> <25C620DE> +<21B4> <25B320DD> +<21B5> <25B220DD> +<21B6> <271A> +<21B7> <2716> +<21B9> <25EF> +<21BF> <25CC> +<21D5> <20A9> +<21D8> <262F> +<21DA> <262F> +<21DB> <262F> +<21DF> <3020> +<21F5> <0028003200310029> +<21F6> <0028003200320029> +<21F7> <0028003200330029> +<21F8> <0028003200340029> +<21F9> <0028003200350029> +<21FA> <0028003200360029> +<21FB> <2642> +<21FC> <22A9> +<21FD> <3036> +<21FE> <25CB> +<21FF> <25D3> +<2200> <25A1> +<2201> <2302> +<2203> <25AD> +<2204> <25AD> +<2208> <25C7> +<220B> <2206> +<220C> <22BF> +<220D> <231E> +<2212> <2253> +<2213> <2251> +<2216> <2213> +<221A> <00F720DD> +<221B> <2314> +<221E> <2262> +<2220> <25B1> +<2222> <2222> +<2223> <2250> +<2224> <00D8> +<2225> <234A> +<2226> <22A3> +<2227> <22A50338> +<222B> <2285> +<222C> <2284> +<222D> <2209> +<222E> <220C> +<222F> <22BB> +<2230> <0016> +<2231> <225A> +<2232> <2306> +<2233> <0024> +<2239> <329E> +<223B> <203C> +<223C> <0021003F> +<223E> <003F003F> +<223F> <22C4> +<2240> <25C7> +<2241> <22C4> +<2242> <25C6> +<2243> <25AB> +<2244> <25A1> +<2245> <25AB> +<2246> <25A0> +<2247> <25E6> +<2248> <25CB> +<2249> <25E6> +<224A> <25CF> +<224B> <25BD> +<224C> <25B3> +<224D> <25B7> +<224E> <25C1> +<224F> <2726> +<2250> <25CF> +<2251> <25A0> +<2253> <25CA> +<2254> <3231> +<2255> <3239> +<2256> <33CB> +<2257> <2483> +<225C> <0028003200310029> +<225D> <0028003200320029> +<225E> <0028003200330029> +<225F> <0028003200340029> +<2260> <0028003200350029> +<2261> <0028003200360029> +<2262> <0028003200370029> +<2263> <0028003200380029> +<2264> <0028003200390029> +<2265> <0028003300300029> +<2266> <2192> +<2269> <2193> +<226E> <21D0> +<226F> <21CF> +<2270> <21CD> +<2271> <21D4> +endbfchar + +100 beginbfchar +<2279> <2794> +<2285> <279C> +<2291> <27BA> +<2296> <21D1> +<2297> <21D3> +<2299> <279E> +<229D> <279E> +<22A0> <21B5> +<22A1> <21B1> +<22A3> <21B4> +<22A4> <21B0> +<22A5> <21B3> +<22B0> <21E6> +<22B1> <21E8> +<22B2> <21E7> +<22B3> <21E9> +<22B4> <21BC> +<22B5> <21C0> +<22BA> <21C0> +<22BB> <21BC> +<22C2> <0041002E> +<22C3> <0042002E> +<22C4> <0043002E> +<22C5> <0044002E> +<22C6> <0045002E> +<22C7> <0046002E> +<22C8> <0047002E> +<22C9> <0048002E> +<22CA> <0049002E> +<22CB> <004A002E> +<22CC> <004B002E> +<22CD> <004C002E> +<22CE> <004D002E> +<22CF> <004E002E> +<22D0> <004F002E> +<22D1> <0050002E> +<22D2> <0051002E> +<22D3> <0052002E> +<22D4> <0053002E> +<22D5> <0054002E> +<22D6> <0055002E> +<22D7> <0056002E> +<22D8> <0057002E> +<22D9> <0058002E> +<22DA> <0059002E> +<22DB> <005A002E> +<22DC> <0061002E> +<22DD> <0062002E> +<22DE> <0063002E> +<22DF> <0064002E> +<22E0> <0065002E> +<22E1> <0066002E> +<22E2> <0067002E> +<22E3> <0068002E> +<22E4> <0069002E> +<22E5> <006A002E> +<22E6> <006B002E> +<22E7> <006C002E> +<22E8> <006D002E> +<22E9> <006E002E> +<22EA> <006F002E> +<22EB> <0070002E> +<22EC> <0071002E> +<22ED> <0072002E> +<22EE> <0073002E> +<22EF> <0074002E> +<22F0> <0075002E> +<22F1> <0076002E> +<22F2> <0077002E> +<22F3> <0078002E> +<22F4> <0079002E> +<22F5> <007A002E> +<22F6> +<22F7> +<22F8> +<22F9> +<22FA> +<22FB> +<22FC> +<22FD> +<22FE> +<22FF> +<2300> +<2301> +<2302> +<2303> +<2304> +<2305> +<2306> +<2307> +<2308> +<2309> <537020DE> +<230A> <8A3B20DE> +<230B> +<230C> <611F20DE> +<230D> <51A020DE> +<230E> <7B5420DE> +<230F> <4EE320DE> +<2310> <982D20DE> +<2311> <52D520DE> +endbfchar + +100 beginbfchar +<2312> <540D20DE> +<2313> <76EE20DE> +<2314> <53CD20DE> +<2315> <88DC20DE> +<2316> <672C20DE> +<2317> <526F20DE> +<2318> <5E8F20DE> +<2319> <902320DE> +<231A> <5F7120DE> +<231B> <4F8B20DE> +<231C> <6E9020DE> +<231D> <5B5020DE> +<231E> <524D20DE> +<231F> <7BC020DE> +<2320> <63A520DE> +<2321> <52A920DE> +<2322> <630720DE> +<2323> <4ED620DE> +<2324> <6D3E20DE> +<2325> <5F6220DE> +<2326> +<2327> +<2328> +<2329> +<232A> +<232B> <8A3B20DE> +<232C> +<232D> +<232E> +<232F> +<2330> +<2331> +<2332> +<2333> +<2334> +<2335> +<2336> +<2337> +<2338> +<2339> +<233A> +<233B> +<233C> +<233D> +<233E> +<233F> +<2340> +<2341> +<2342> +<2343> +<2344> +<2345> +<2346> +<2347> +<2348> +<2349> +<234A> +<234B> +<234C> +<234D> +<234E> +<234F> +<2350> +<2351> <51A020DD> +<2357> <0028003200310029> +<2358> <0028003200320029> +<2359> <0028003200330029> +<235A> <0028003200340029> +<235B> <0028003200350029> +<235C> <0028003200360029> +<235D> +<235E> +<235F> +<2360> <537020DD> +<2361> <886320DD> +<2362> <672B20DD> +<2363> +<2364> +<2365> +<2366> +<2367> +<2368> +<2369> +<236A> +<236B> +<236C> +<236D> +<236E> +<236F> +<2370> +<2371> +<2372> +<2373> +<2374> <611F20DD> +<2375> <616320DD> +<2376> <4EE320DD> +<2377> <52D520DD> +<2378> <3294> +<2379> <53CD20DD> +<237A> <526F20DD> +endbfchar + +100 beginbfchar +<237B> <81EA20DD> +<237C> <524D20DD> +<237D> <96FB20DD> +<237E> <63A520DD> +<237F> <52A920DD> +<2380> <6CE820DD> +<2381> <53C320DD> +<2382> <672C20DD> +<2383> <65B020DD> +<2384> <73FE20DD> +<2385> <5F6220DD> +<2386> <959320DD> +<2387> <570B20DD> +<2388> <32A5> +<2389> <4ED620DD> +<238A> +<238B> +<238C> +<238D> +<238E> +<238F> +<2390> +<2391> +<2392> +<2393> +<2394> +<2395> +<2396> +<2397> +<2398> +<2399> +<239A> +<239B> +<239C> +<239D> +<239E> +<239F> +<23A0> +<23A1> +<23A2> +<23A3> +<23A4> +<23A5> +<23A6> +<23A7> +<23A8> +<23A9> +<23AA> +<23AB> +<23AC> +<23AD> +<23AE> +<23AF> +<23B0> +<23B1> +<23B2> +<23B3> +<23B4> +<23B5> +<23B6> +<23B7> +<23B8> +<23B9> <0028003200370029> +<23BA> <0028003200380029> +<23BB> <0028003200390029> +<23BC> <0028003300300029> +<23DA> <2794> +<23EB> <27A1> +<23EE> <21E6> +<23EF> <21E8> +<23F0> <21E7> +<23F1> <21E9> +<2406> <261D> +<2407> <261F> +<240A> +<240B> +<240C> +<240D> +<240E> +<240F> +<2410> +<2411> <003120DE> +<2412> <003220DE> +<2413> <003320DE> +<2414> <003420DE> +<2415> <003520DE> +<2416> <003620DE> +<2417> <003720DE> +<2418> <003820DE> +<2419> <003920DE> +<241A> <005B00310030005D> +<241B> <005B00310031005D> +<241C> <005B00310032005D> +<241D> <005B00310033005D> +<241E> <005B00310034005D> +<241F> <005B00310035005D> +<2420> <005B00310036005D> +<2421> <005B00310037005D> +<2422> <005B00310038005D> +<2423> <005B00310039005D> +endbfchar + +100 beginbfchar +<2424> <005B00320030005D> +<2425> <4E0020DE> +<2426> <4E8C20DE> +<2427> <4E0920DE> +<2428> <56DB20DE> +<2429> <4E9420DE> +<242A> <516D20DE> +<242B> <4E0320DE> +<242C> <516B20DE> +<242D> <4E5D20DE> +<242E> <534120DE> +<242F> <005B53414E00005D> +<2430> <005B53414E8C005D> +<2431> <005B53414E09005D> +<2432> <005B534156DB005D> +<2433> <005B53414E94005D> +<2434> <005B5341516D005D> +<2435> <005B53414E03005D> +<2436> <005B5341516B005D> +<2437> <005B53414E5D005D> +<2438> <005B4E8C5341005D> +<2439> <4E0020DE> +<243A> <4E8C20DE> +<243B> <4E0920DE> +<243C> <56DB20DE> +<243D> <4E9420DE> +<243E> <516D20DE> +<243F> <4E0320DE> +<2440> <516B20DE> +<2441> <4E5D20DE> +<2442> <534120DE> +<2443> <005B53414E00005D> +<2444> <005B53414E8C005D> +<2445> <005B53414E09005D> +<2446> <005B534156DB005D> +<2447> <005B53414E94005D> +<2448> <005B5341516D005D> +<2449> <005B53414E03005D> +<244A> <005B5341516B005D> +<244B> <005B53414E5D005D> +<244C> <005B4E8C5341005D> +<244D> <65E520DE> +<244E> <670820DE> +<244F> <706B20DE> +<2450> <6C3420DE> +<2451> <672820DE> +<2452> <91D120DE> +<2453> <571F20DE> +<2454> <3290> +<245B> <65E520DE> +<245C> <670820DE> +<245D> <706B20DE> +<245E> <6C3420DE> +<245F> <672820DE> +<2460> <91D120DE> +<2461> <571F20DE> +<2466> <21E8> +<2469> <21E9> +<246A> <0022> +<246B> <301F> +<246C> <301D> +<246D> <2036> +<246E> <0060> +<246F> <3001> +<2471> <0021> +<2472> <3021> +<2473> <002C> +<2474> <3002> +<247E> +<248B> +<24A1> +<24C5> +<24CB> +<24DB> +<24E2> +<24EC> +<2500> +<250D> +<250E> +<2511> +<2512> +<251D> +<2523> +<2524> +<254D> +<254E> +<2563> +<2574> +<2575> +<25B7> +<25E3> +<25E4> +<260A> +<2610> +<2611> +<2615> +<2616> +<261A> +<2620> +<2632> +endbfchar + +100 beginbfchar +<266E> +<2679> +<268F> +<26C9> +<26CA> +<26D2> +<26D3> +<2744> +<2745> +<27AC> +<27AD> +<27AE> +<27B3> +<27B4> +<27E2> +<27E3> +<27EA> +<27F2> +<27F3> +<27F4> +<2800> +<2801> +<283A> +<283E> +<2843> +<2855> +<288E> +<2894> +<2895> +<28DB> +<28F1> +<28F2> +<2904> +<2905> +<2978> +<2979> +<297D> +<299C> +<29A2> +<29A3> +<29A8> +<29A9> +<29AF> +<29BF> +<29FD> +<2A00> +<2A05> +<2A06> +<2A07> +<2A0A> +<2A17> +<2A53> +<2A54> +<2A58> +<2A59> +<2A5A> +<2A5B> +<2A9E> +<2ACE> +<2ACF> +<2B18> +<2B19> +<2B3B> +<2B41> +<2B42> +<2B6F> +<2B81> +<2B93> +<2BD7> +<2BDC> +<2BEE> +<2CFF> +<2D36> +<2D63> +<2D64> +<2D77> +<2D87> +<2D9E> +<2DCD> +<2DDF> +<2DE0> +<2DF3> +<2E09> +<2E1E> +<2E1F> +<2E67> +<2E68> +<2E7D> +<2E7E> +<2E91> +<2E92> +<2EDC> +<2EEF> +<2EF0> +<2F03> +<2F04> +<2F30> +<2F31> +<2F3A> +<2F40> +endbfchar + +100 beginbfchar +<2F41> +<2F44> +<2F51> +<2F90> +<2F96> +<2F97> +<2FA8> +<2FBE> +<2FDE> +<2FE2> +<2FE8> +<2FE9> +<3032> +<3033> +<3048> +<3051> +<3059> +<305A> +<305E> +<306D> +<30F8> +<30FE> +<30FF> +<3100> +<3109> +<310A> +<311C> +<315A> +<3160> +<3161> +<3172> +<3186> +<31A6> +<31B1> +<31B2> +<3225> +<3226> +<322A> +<3285> +<3298> +<32C2> +<32C8> +<32C9> +<32D3> +<32D9> +<32EB> +<3362> +<3400> +<3415> +<34C9> +<34CA> +<34D1> +<34D9> +<34EB> +<34FE> +<34FF> +<351F> +<3524> +<3529> +<3536> +<3549> +<3568> +<356C> +<3572> +<3573> +<35B3> +<35C8> +<35C9> +<35DB> +<35DC> +<35DD> +<35DE> +<35DF> +<35FF> +<361C> +<361D> +<3633> +<3645> +<3646> +<3673> +<3674> +<3679> +<367A> +<36DC> +<373E> +<3835> +<3868> +<3869> +<3872> +<3877> +<387B> +<3888> +<389A> +<389B> +<389F> +<38BA> +<38C0> +<38C1> +<38C2> +<38CF> +endbfchar + +100 beginbfchar +<38D0> +<38D7> +<38DB> +<38F0> +<38FD> +<3900> +<3901> +<3902> +<3913> +<3929> +<393C> +<393D> +<3950> +<3951> +<3962> +<3963> +<399F> +<39A0> +<39B3> +<39B4> +<39B5> +<39C4> +<39C5> +<39C6> +<39E7> +<39EB> +<39EE> +<39EF> +<39F5> +<3A07> +<3A10> +<3A11> +<3A41> +<3A47> +<3A48> +<3A5A> +<3A5B> +<3A97> +<3A9D> +<3A9E> +<3AB0> +<3AB1> +<3ADE> +<3ADF> +<3B08> +<3B09> +<3B51> +<3B7E> +<3B7F> +<3BA6> +<3BAC> +<3BAD> +<3BB0> +<3BB3> +<3BB4> +<3BBB> +<3BCE> +<3C16> +<3C79> +<3C7A> +<3C7B> +<3D75> +<3DAD> +<3DAE> +<3DB6> +<3DC8> +<3DD2> +<3DD3> +<3E00> +<3E0D> +<3E20> +<3E21> +<3E66> +<3E67> +<3EAF> +<3EB0> +<3EDD> +<3EDE> +<3EFF> +<3F26> +<3F27> +<3F51> +<3F52> +<3F7F> +<3F80> +<3F93> +<3F94> +<3FA7> +<3FEE> +<4000> +<4001> +<4002> +<4016> +<4044> +<4045> +<40BD> +<40BE> +<4103> +<4104> +<4160> +endbfchar + +68 beginbfchar +<4161> +<4173> +<4186> +<41C8> +<41CE> +<41E1> +<41E2> +<4228> +<4229> +<422E> +<4275> +<42A3> +<42A4> +<4310> +<4316> +<4342> +<4343> +<434A> +<434E> +<4354> +<4366> +<43AF> +<43C2> +<43C3> +<43EE> +<4403> +<4404> +<4469> +<4476> +<447C> +<447D> +<44E0> +<44F4> +<4525> +<4526> +<4538> +<4539> +<454C> +<458E> +<4594> +<4595> +<45A8> +<45A9> +<45BC> +<45E6> +<45E7> +<45FC> +<4613> +<4627> +<4628> +<463D> +<4653> +<4694> +<4695> +<46AA> +<46B3> +<46BA> +<46BB> +<46E3> +<46E4> +<474A> <20A9> +<474B> <2010> +<474C> <00A9> +<474D> <2122> +<474E> <22EF> +<47AD> <203E> +<47AE> <007E> +<47AF> <005C> +endbfchar + +100 beginbfrange +<0001> <005F> <0020> +<0065> <0067> <3000> +<0069> <006A> <2025> +<006D> <006E> <2013> +<0072> <0073> <2018> +<0074> <0075> <201C> +<0076> <0077> <3014> +<0078> <0081> <3008> +<0086> <0087> <2264> +<008B> <008C> <2032> +<008F> <0090> +<00AB> <00AC> <2190> +<00AD> <00AE> <2193> +<00B0> <00B1> <226A> +<00B6> <00B7> <222B> +<00BA> <00BB> <2286> +<00BC> <00BD> <2282> +<00C0> <00C1> <2227> +<00DE> <00DF> <2660> +<00E6> <00E7> <25D0> +<00E9> <00EA> <25A4> +<00F5> <00F6> <2020> +<00FD> <00FE> <2669> +<0108> <0142> +<0144> <0164> +<0166> <0198> <3131> +<0199> <01C2> <3165> +<01C3> <01CC> <2170> +<01CD> <01D6> <2160> +<01D7> <01E7> <0391> +<01E8> <01EE> <03A3> +<01EF> <01FF> <03B1> +<0200> <0206> <03C3> +<022F> <0230> <251E> +<0231> <0232> <2521> +<0233> <0234> <2526> +<0235> <0236> <2529> +<0237> <0238> <252D> +<0239> <023A> <2531> +<023B> <023C> <2535> +<023D> <023E> <2539> +<023F> <0240> <253D> +<0241> <0242> <2540> +<0243> <024A> <2543> +<024B> <024D> <3395> +<0251> <0254> <33A3> +<0255> <025E> <3399> +<0260> <0262> <338D> +<0264> <0265> <3388> +<0267> <0268> <33A7> +<0269> <0272> <33B0> +<0273> <0277> <3380> +<0278> <027D> <33BA> +<027E> <0282> <3390> +<0284> <0285> <33C0> +<0286> <0288> <338A> +<028B> <028D> <33AD> +<028F> <0292> <33A9> +<02A7> <02C2> <3260> +<02C3> <02DC> <24D0> +<02DD> <02EB> <2460> +<02ED> <02EE> <2153> +<02F1> <02F4> <215B> +<0305> <0320> <3200> +<0321> <033A> <249C> +<033B> <0349> <2474> +<034B> <034C> <00B2> +<034F> <0352> <2081> +<0353> <03A5> <3041> +<03A6> <03FB> <30A1> +<03FC> <03FF> <0410> +<0400> <0401> <0414> +<0403> <0422> <0416> +<0424> <043D> <0436> +<043E> <043F> +<0441> <0444> +<0445> <044C> +<044D> <0451> +<0454> <0455> +<0456> <0458> +<0459> <045A> +<0462> <0463> +<0465> <0466> +<0468> <0469> +<046A> <046D> +<046E> <0471> +<0474> <0475> +<0476> <0478> +<0479> <047B> +<047D> <047E> +<047F> <0480> +<0481> <0483> +<048A> <048B> +<048D> <048E> +<0491> <0493> +<0495> <0496> +<0497> <0498> +<049C> <049D> +<04A4> <04A5> +<04A6> <04A7> +endbfrange + +100 beginbfrange +<04AA> <04AB> +<04B3> <04B4> +<04B6> <04B9> +<04BA> <04BC> +<04BE> <04BF> +<04C0> <04C1> +<04C4> <04C5> +<04C8> <04C9> +<04CC> <04CD> +<04D2> <04D3> +<04D5> <04D7> +<04D8> <04D9> +<04DD> <04DE> +<04E0> <04E1> +<04E3> <04E4> +<04E6> <04E7> +<04E9> <04EB> +<04EF> <04F0> +<04F1> <04F3> +<04F5> <04F6> +<04F9> <04FA> +<04FB> <04FD> +<04FE> <04FF> +<0501> <0503> +<0506> <0507> +<0508> <050A> +<050B> <050C> +<0514> <0515> +<0518> <0519> +<051D> <051E> +<0520> <0522> +<0523> <0524> +<0526> <0527> +<0528> <0529> +<052E> <052F> +<0532> <0533> +<0536> <0538> +<053A> <053B> +<053E> <053F> +<0540> <0541> +<0544> <0545> +<054A> <054B> +<054D> <054E> +<0553> <0555> +<0559> <055A> +<055D> <055E> +<0561> <0563> +<0565> <0568> +<0569> <056A> +<056B> <056F> +<0571> <0573> +<0576> <0577> +<0578> <057A> +<057B> <057C> +<0581> <0582> +<0583> <0584> +<0586> <0587> +<0588> <0589> +<058A> <058C> +<058D> <058F> +<0592> <0593> +<0594> <0596> +<0597> <0598> +<059B> <059C> +<059D> <059E> +<05A2> <05A3> +<05A7> <05A8> +<05AB> <05AD> +<05B4> <05B5> +<05B7> <05B8> +<05BE> <05BF> +<05C1> <05C2> +<05C3> <05C4> +<05CD> <05CE> +<05CF> <05D0> +<05D2> <05D3> +<05D5> <05D6> +<05D8> <05DA> +<05DB> <05DC> +<05DE> <05DF> +<05E4> <05E5> +<05E9> <05EA> +<05EE> <05F0> +<05F2> <05F6> +<05F7> <05F9> +<05FA> <05FE> +<0600> <0601> +<0604> <0605> +<0606> <0608> +<060A> <060C> +<060E> <060F> +<0610> <0611> +<0612> <0613> +<0618> <0619> +<061C> <061D> +<061E> <0620> +<0624> <0625> +<0628> <0629> +<062B> <062C> +<062F> <0630> +endbfrange + +100 beginbfrange +<063D> <063E> +<0641> <0642> +<0645> <0646> +<0658> <0659> +<065B> <065C> +<065E> <065F> +<0663> <0664> +<0666> <0667> +<0668> <0669> +<066A> <066D> +<066E> <066F> +<0672> <0673> +<0674> <0676> +<0677> <0679> +<067C> <067D> +<067E> <0680> +<0681> <0682> +<0685> <0686> +<0687> <0688> +<0689> <068B> +<068C> <068E> +<0691> <0692> +<0693> <0695> +<0698> <0699> +<06A2> <06A3> +<06A6> <06A7> +<06AD> <06AE> +<06B0> <06B1> +<06B3> <06B4> +<06B5> <06B6> +<06BB> <06BC> +<06C0> <06C1> +<06C4> <06C5> +<06C8> <06C9> +<06CA> <06CD> +<06CE> <06D1> +<06D4> <06D5> +<06D6> <06D8> +<06D9> <06DA> +<06DE> <06DF> +<06E2> <06E3> +<06E4> <06E6> +<06E7> <06E9> +<06EC> <06ED> +<06F0> <06F1> +<06F4> <06F5> +<06F6> <06F8> +<06FD> <06FE> +<0701> <0702> +<070C> <070D> +<0716> <0717> +<071A> <071B> +<0721> <0722> +<0728> <0729> +<072C> <072D> +<0730> <0731> +<0734> <0735> +<0737> <0738> +<0739> <073A> +<073B> <073C> +<073F> <0740> +<0743> <0744> +<0746> <074A> +<074B> <074C> +<074E> <074F> +<0751> <0753> +<0756> <0757> +<0758> <075B> +<075C> <075D> +<0760> <0761> +<0765> <0766> +<0768> <0769> +<076A> <076C> +<076F> <0770> +<0771> <0773> +<0774> <0775> +<0778> <077A> +<077D> <077E> +<077F> <0780> +<0783> <0784> +<0789> <078A> +<0796> <0798> +<079A> <079D> +<079E> <079F> +<07A3> <07A4> +<07B7> <07B8> +<07BA> <07BB> +<07BD> <07BE> +<07BF> <07C1> +<07C4> <07C8> +<07C9> <07CD> +<07CE> <07CF> +<07D3> <07D4> +<07D7> <07D8> +<07D9> <07DB> +<07DD> <07DE> +<07E1> <07E2> +<07E4> <07E5> +<07E7> <07E8> +<07EA> <07EB> +endbfrange + +100 beginbfrange +<07EC> <07ED> +<07EF> <07F0> +<07F1> <07F2> +<07F3> <07F5> +<07F6> <07F7> +<07FB> <07FD> +<0801> <0803> +<0806> <0807> +<080F> <0810> +<0813> <0814> +<0817> <0818> +<081A> <081D> +<081E> <081F> +<0822> <0823> +<0828> <0829> +<0833> <0834> +<0837> <0838> +<083A> <083B> +<083F> <0840> +<0842> <0844> +<0845> <0846> +<084A> <084B> +<084C> <084E> +<084F> <0851> +<0854> <0855> +<0856> <0858> +<0859> <085A> +<085C> <085D> +<085F> <0860> +<0862> <0864> +<0867> <0868> +<0869> <086A> +<086B> <086D> +<086E> <086F> +<0872> <0873> +<0878> <0879> +<0884> <0885> +<0886> <0887> +<088A> <088B> +<088E> <088F> +<0890> <0891> +<0892> <0895> +<0896> <0897> +<0898> <089A> +<089C> <089D> +<08A0> <08A1> +<08A2> <08A4> +<08A5> <08A6> +<08A9> <08AA> +<08B2> <08B6> +<08B7> <08B8> +<08B9> <08BA> +<08BB> <08BC> +<08BD> <08BF> +<08C1> <08C2> +<08C5> <08C6> +<08C7> <08C9> +<08CA> <08CB> +<08CE> <08CF> +<08D0> <08D2> +<08D7> <08D9> +<08DD> <08DE> +<08E2> <08E3> +<08EB> <08EC> +<08F0> <08F1> +<08F3> <08F4> +<08F7> <08F8> +<08FB> <08FC> +<08FE> <08FF> +<0900> <0901> +<0905> <0906> +<0909> <090A> +<090F> <0910> +<0913> <0914> +<0917> <0918> +<091D> <091E> +<0920> <0921> +<0922> <0923> +<0926> <0927> +<0929> <092A> +<092B> <092D> +<0931> <0932> +<0933> <0934> +<0936> <0937> +<0938> <0939> +<093A> <093C> +<093F> <0940> +<0941> <0942> +<0944> <0945> +<0949> <094A> +<094B> <094C> +<0951> <0952> +<0954> <0955> +<0957> <0958> +<095A> <095B> +<0963> <0964> +<0966> <0967> +<096A> <096B> +<0973> <0974> +<0978> <097A> +endbfrange + +100 beginbfrange +<097F> <0980> +<0983> <0984> +<0987> <0988> +<0989> <098B> +<098C> <098E> +<098F> <0991> +<0992> <0994> +<0995> <0996> +<0997> <0998> +<099B> <099C> +<099D> <099F> +<09A0> <09A1> +<09A5> <09A6> +<09AA> <09AB> +<09AF> <09B0> +<09B1> <09B2> +<09B3> <09B6> +<09B7> <09BD> +<09C0> <09C1> +<09C4> <09C5> +<09C8> <09CA> +<09CD> <09CE> +<09CF> <09D4> +<09D5> <09D8> +<09DB> <09DC> +<09DD> <09DE> +<09DF> <09E0> +<09E2> <09E4> +<09E6> <09E8> +<09EC> <09ED> +<09F0> <09F1> +<09F2> <09F4> +<09F5> <09F6> +<09FB> <09FC> +<0A03> <0A04> +<0A07> <0A08> +<0A0B> <0A0C> +<0A0E> <0A10> +<0A11> <0A12> +<0A15> <0A16> +<0A19> <0A1A> +<0A1B> <0A1C> +<0A1D> <0A1E> +<0A21> <0A22> +<0A24> <0A25> +<0A28> <0A29> +<0A2C> <0A2D> +<0A30> <0A31> +<0A35> <0A36> +<0A3A> <0A3B> +<0A3D> <0A44> +<0A49> <0A4A> +<0A4C> <0A4E> +<0A4F> <0A51> +<0A52> <0A55> +<0A57> <0A58> +<0A5A> <0A5C> +<0A5E> <0A5F> +<0A60> <0A63> +<0A64> <0A65> +<0A68> <0A69> +<0A6A> <0A6C> +<0A6D> <0A6E> +<0A77> <0A78> +<0A7C> <0A7D> +<0A7F> <0A80> +<0A81> <0A82> +<0A85> <0A86> +<0A8C> <0A8D> +<0A8E> <0A8F> +<0A91> <0A92> +<0A96> <0A97> +<0A99> <0A9B> +<0A9C> <0A9E> +<0AA4> <0AA5> +<0AA9> <0AAA> +<0AAD> <0AAE> +<0AB1> <0AB2> +<0AB4> <0AB6> +<0AB7> <0AB8> +<0ABE> <0ABF> +<0AC2> <0AC3> +<0AC9> <0ACA> +<0ACD> <0ACE> +<0AD1> <0AD2> +<0AD4> <0AD5> +<0AD7> <0AD8> +<0ADA> <0ADB> +<0ADC> <0ADD> +<0ADE> <0ADF> +<0AE4> <0AE5> +<0AE6> <0AE8> +<0AE9> <0AEA> +<0AED> <0AEE> +<0AEF> <0AF1> +<0AF5> <0AF6> +<0AF9> <0AFA> +<0AFB> <0AFD> +<0B02> <0B03> +<0B06> <0B07> +endbfrange + +100 beginbfrange +<0B0B> <0B0C> +<0B14> <0B15> +<0B17> <0B18> +<0B1B> <0B1C> +<0B1F> <0B20> +<0B27> <0B28> +<0B2B> <0B2C> +<0B2D> <0B2E> +<0B2F> <0B31> +<0B35> <0B36> +<0B37> <0B3A> +<0B3B> <0B3C> +<0B3F> <0B40> +<0B41> <0B43> +<0B4A> <0B4B> +<0B4E> <0B4F> +<0B50> <0B52> +<0B53> <0B54> +<0B57> <0B58> +<0B61> <0B62> +<0B65> <0B66> +<0B70> <0B71> +<0B76> <0B77> +<0B7A> <0B7B> +<0B85> <0B86> +<0B8E> <0B8F> +<0B92> <0B93> +<0B96> <0B97> +<0B99> <0B9B> +<0B9C> <0B9D> +<0BA0> <0BA1> +<0BA4> <0BA5> +<0BA8> <0BA9> +<0BAC> <0BAD> +<0BAE> <0BB0> +<0BB1> <0BB2> +<0BB4> <0BB5> +<0BB7> <0BB8> +<0BB9> <0BBA> +<0BBB> <0BBD> +<0BBE> <0BBF> +<0BC2> <0BC3> +<0BC9> <0BCA> +<0BCB> <0BCD> +<0BCF> <0BD0> +<0BD3> <0BD4> +<0BD7> <0BD8> +<0BE2> <0BE3> +<0BE6> <0BE7> +<0BF0> <0BF1> +<0BF4> <0BF5> +<0BFC> <0BFD> +<0C00> <0C01> +<0C03> <0C04> +<0C07> <0C08> +<0C0B> <0C0C> +<0C0E> <0C0F> +<0C10> <0C11> +<0C12> <0C14> +<0C15> <0C16> +<0C19> <0C1A> +<0C1B> <0C1D> +<0C20> <0C21> +<0C25> <0C26> +<0C27> <0C29> +<0C2A> <0C2B> +<0C2E> <0C2F> +<0C37> <0C38> +<0C3B> <0C3C> +<0C48> <0C49> +<0C4C> <0C4D> +<0C53> <0C54> +<0C57> <0C58> +<0C5F> <0C60> +<0C62> <0C63> +<0C65> <0C66> +<0C6B> <0C6C> +<0C6D> <0C6E> +<0C71> <0C72> +<0C75> <0C77> +<0C7B> <0C7C> +<0C7D> <0C7F> +<0C81> <0C82> +<0C85> <0C86> +<0C87> <0C89> +<0C8A> <0C8B> +<0C8C> <0C8D> +<0C90> <0C91> +<0C92> <0C94> +<0C95> <0C96> +<0C99> <0C9A> +<0CA0> <0CA1> +<0CA2> <0CA3> +<0CA8> <0CA9> +<0CAC> <0CAD> +<0CB9> <0CBA> +<0CBC> <0CBD> +<0CBF> <0CC0> +<0CD3> <0CD4> +<0CD6> <0CD7> +endbfrange + +100 beginbfrange +<0CDA> <0CDB> +<0CDE> <0CDF> +<0CE3> <0CE4> +<0CE7> <0CE8> +<0CEB> <0CEC> +<0CED> <0CEF> +<0CF2> <0CF3> +<0CF7> <0CF8> +<0CFB> <0CFC> +<0D03> <0D04> +<0D07> <0D08> +<0D09> <0D0B> +<0D10> <0D11> +<0D15> <0D16> +<0D1A> <0D1B> +<0D20> <0D21> +<0D25> <0D26> +<0D31> <0D32> +<0D3E> <0D3F> +<0D43> <0D44> +<0D47> <0D48> +<0D4B> <0D4C> +<0D52> <0D53> +<0D55> <0D58> +<0D59> <0D5A> +<0D61> <0D62> +<0D64> <0D65> +<0D68> <0D69> +<0D78> <0D79> <67B6> +<0DC7> <0DC8> <9451> +<0FCF> <0FD0> <887E> +<0FF3> <0FF4> <671E> +<1008> <1009> <7947> +<101A> <101B> <9A0E> +<125A> <125B> <5FD8> +<12A2> <12A3> <6478> +<12EA> <12EB> <7D0A> +<130B> <130C> <65FB> +<1375> <1376> <88F4> +<1381> <1382> <767D> +<13E8> <13E9> <5CEF> +<140D> <140E> <8150> +<144D> <144F> <6BD6> +<15F4> <15F5> <96A7> +<17D5> <17D6> <7AA9> +<1853> <1854> <96E8> +<18AD> <18AE> <5E7C> +<18B2> <18B3> <6108> +<18B9> <18BA> <6961> +<18BF> <18C0> <7336> +<1BAD> <1BAE> <6158> +<1DDD> <1DDE> <9591> +<1EC7> <1EC8> <78BA> +<1EE7> <1EE8> <6643> +<1F71> <1F72> <71B9> +<1F78> <1F79> <3001> +<1F7F> <1F80> <3014> +<1F81> <1F8A> <3008> +<1F8D> <1F8E> +<1F91> <1F96> +<1F9A> <1F9D> +<1F9E> <1FFB> <0020> +<2005> <2006> <300E> +<2007> <2008> <300A> +<2009> <200A> <3008> +<200B> <200C> <0028> +<2015> <2016> <0028> +<2019> <201A> <3016> +<201B> <201E> <3016> +<2027> <2028> <2020> +<202F> <2030> <02D6> +<2037> <2038> <003C> +<203A> <203B> <207D> +<2040> <2041> <2229> +<2047> <2049> <3021> +<2054> <2055> <3014> +<205B> <205C> <3001> +<2061> <2062> <0028> +<2063> <2064> <3016> +<2065> <2066> <3010> +<2096> <209F> <278A> +<20C4> <20DD> <24B6> +<211C> <211D> <22CE> +<211F> <2120> <2280> +<2121> <2124> <2270> +<2129> <212A> <2276> +<212C> <212D> <22DA> +<2145> <214D> <2460> +<21A4> <21A7> <3008> +<21E1> <21EA> <2776> +<220F> <2210> <2225> +<2214> <2215> <2266> +<2217> <2219> <2295> +<2229> <222A> <226E> +<2258> <225B> <2494> +<2267> <2268> <2190> +<226A> <226D> <2196> +<22C0> <22C1> <21C4> +<2352> <2356> <2483> +<23E6> <23E9> <21E0> +endbfrange + +100 beginbfrange +<2455> <245A> <328A> +<2462> <2465> <300C> +<2467> <2468> <21E6> +<2475> <2476> +<2477> <2478> +<2479> <247D> +<247F> <2480> +<2481> <2483> +<2484> <248A> +<248C> <2491> +<2492> <2493> +<2494> <2496> +<2497> <24A0> +<24A2> <24A7> +<24A8> <24AA> +<24AB> <24AD> +<24AE> <24C0> +<24C1> <24C2> +<24C3> <24C4> +<24C6> <24CA> +<24CC> <24CD> +<24CE> <24D0> +<24D1> <24D3> +<24D4> <24DA> +<24DC> <24E1> +<24E3> <24E4> +<24E5> <24EB> +<24ED> <24EF> +<24F0> <24F1> +<24F2> <24F4> +<24F5> <24F7> +<24F8> <24FF> +<2501> <2508> +<2509> <250A> +<250B> <250C> +<250F> <2510> +<2513> <2517> +<2518> <2519> +<251A> <251C> +<251E> <2522> +<2525> <252A> +<252B> <252D> +<252E> <2530> +<2531> <2538> +<2539> <253A> +<253B> <2540> +<2541> <2542> +<2543> <2545> +<2546> <254C> +<254F> <2554> +<2555> <2557> +<2558> <255A> +<255B> <2562> +<2564> <256B> +<256C> <256D> +<256E> <256F> +<2570> <2573> +<2576> <257A> +<257B> <257C> +<257D> <257F> +<2580> <258A> +<258B> <2590> +<2591> <25A2> +<25A3> <25AA> +<25AB> <25AC> +<25AD> <25AF> +<25B0> <25B6> +<25B8> <25BF> +<25C0> <25C2> +<25C3> <25C5> +<25C6> <25D8> +<25D9> <25DA> +<25DB> <25DC> +<25DD> <25E2> +<25E5> <25EA> +<25EB> <25FF> +<2600> <2605> +<2606> <2607> +<2608> <2609> +<260B> <260F> +<2612> <2614> +<2617> <2619> +<261B> <261F> +<2621> <2623> +<2624> <2625> +<2626> <2627> +<2628> <262A> +<262B> <2631> +<2633> <2638> +<2639> <263E> +<263F> <266D> +<266F> <2671> +<2672> <2678> +<267A> <267F> +<2680> <2681> +<2682> <268C> +<268D> <268E> +<2690> <2695> +<2696> <2698> +<2699> <269B> +endbfrange + +100 beginbfrange +<269C> <26A5> +<26A6> <26A9> +<26AA> <26AB> +<26AC> <26C6> +<26C7> <26C8> +<26CB> <26D1> +<26D4> <26D7> +<26D8> <26DD> +<26DE> <26E8> +<26E9> <26EE> +<26EF> <26FF> +<2700> <2701> +<2702> <2707> +<2708> <270A> +<270B> <270D> +<270E> <2714> +<2715> <2717> +<2718> <271D> +<271E> <2738> +<2739> <273A> +<273B> <273D> +<273E> <2743> +<2746> <274A> +<274B> <2751> +<2752> <275C> +<275D> <2762> +<2763> <2764> +<2765> <2767> +<2768> <276E> +<276F> <2770> +<2771> <2777> +<2778> <277A> +<277B> <277D> +<277E> <2784> +<2785> <278E> +<278F> <27A9> +<27AA> <27AB> +<27AF> <27B2> +<27B5> <27B7> +<27B8> <27D5> +<27D6> <27D7> +<27D8> <27DA> +<27DB> <27E1> +<27E4> <27E9> +<27EB> <27EC> +<27ED> <27F1> +<27F5> <27F6> +<27F7> <27F9> +<27FA> <27FF> +<2802> <2807> +<2808> <2809> +<280A> <280C> +<280D> <2813> +<2814> <2817> +<2818> <2839> +<283B> <283D> +<283F> <2842> +<2844> <2848> +<2849> <284A> +<284B> <284D> +<284E> <2854> +<2856> <285B> +<285C> <285D> +<285E> <2860> +<2861> <2867> +<2868> <2869> +<286A> <286B> +<286C> <286E> +<286F> <2871> +<2872> <2888> +<2889> <288A> +<288B> <288D> +<288F> <2893> +<2896> <2899> +<289A> <289C> +<289D> <289F> +<28A0> <28AA> +<28AB> <28CD> +<28CE> <28D0> +<28D1> <28D3> +<28D4> <28DA> +<28DC> <28E3> +<28E4> <28E5> +<28E6> <28E8> +<28E9> <28F0> +<28F3> <28F8> +<28F9> <28FA> +<28FB> <28FC> +<28FD> <28FF> +<2900> <2903> +<2906> <290B> +<290C> <291E> +<291F> <2925> +<2926> <2940> +<2941> <2943> +<2944> <2946> +<2947> <294D> +<294E> <2957> +<2958> <295D> +<295E> <2964> +endbfrange + +100 beginbfrange +<2965> <2967> +<2968> <296D> +<296E> <296F> +<2970> <2972> +<2973> <2977> +<297A> <297C> +<297E> <2980> +<2981> <2983> +<2984> <2996> +<2997> <2998> +<2999> <299B> +<299D> <29A1> +<29A4> <29A7> +<29AA> <29AB> +<29AC> <29AE> +<29B0> <29B2> +<29B3> <29B4> +<29B5> <29B7> +<29B8> <29BE> +<29C0> <29C5> +<29C6> <29FC> +<29FE> <29FF> +<2A01> <2A04> +<2A08> <2A09> +<2A0B> <2A0C> +<2A0D> <2A0F> +<2A10> <2A16> +<2A18> <2A1D> +<2A1E> <2A20> +<2A21> <2A23> +<2A24> <2A2E> +<2A2F> <2A34> +<2A35> <2A37> +<2A38> <2A4E> +<2A4F> <2A50> +<2A51> <2A52> +<2A55> <2A57> +<2A5C> <2A5D> +<2A5E> <2A60> +<2A61> <2A63> +<2A64> <2A76> +<2A77> <2A89> +<2A8A> <2A90> +<2A91> <2A93> +<2A94> <2A96> +<2A97> <2A9D> +<2A9F> <2AA6> +<2AA7> <2AC1> +<2AC2> <2AC3> +<2AC4> <2AC6> +<2AC7> <2ACD> +<2AD0> <2AD5> +<2AD6> <2AE8> +<2AE9> <2AEF> +<2AF0> <2AFF> +<2B00> <2B03> +<2B04> <2B09> +<2B0A> <2B0C> +<2B0D> <2B0F> +<2B10> <2B17> +<2B1A> <2B1F> +<2B20> <2B22> +<2B23> <2B25> +<2B26> <2B2C> +<2B2D> <2B30> +<2B31> <2B36> +<2B37> <2B38> +<2B39> <2B3A> +<2B3C> <2B40> +<2B43> <2B48> +<2B49> <2B63> +<2B64> <2B65> +<2B66> <2B67> +<2B68> <2B6E> +<2B70> <2B74> +<2B75> <2B76> +<2B77> <2B79> +<2B7A> <2B80> +<2B82> <2B86> +<2B87> <2B88> +<2B89> <2B8B> +<2B8C> <2B92> +<2B94> <2BD1> +<2BD2> <2BD3> +<2BD4> <2BD6> +<2BD8> <2BDB> +<2BDD> <2BE1> +<2BE2> <2BE3> +<2BE4> <2BE6> +<2BE7> <2BED> +<2BEF> <2BF4> +<2BF5> <2BFF> +<2C00> <2C07> +<2C08> <2C2A> +<2C2B> <2C2C> +<2C2D> <2C2F> +<2C30> <2C3B> +<2C3C> <2C41> +<2C42> <2C48> +<2C49> <2C5B> +endbfrange + +100 beginbfrange +<2C5C> <2C76> +<2C77> <2C79> +<2C7A> <2CAC> +<2CAD> <2CAE> +<2CAF> <2CB1> +<2CB2> <2CB7> +<2CB8> <2CBB> +<2CBC> <2CDD> +<2CDE> <2CF8> +<2CF9> <2CFB> +<2CFC> <2CFE> +<2D00> <2D05> +<2D06> <2D08> +<2D09> <2D2A> +<2D2B> <2D2C> +<2D2D> <2D2E> +<2D2F> <2D35> +<2D37> <2D3E> +<2D3F> <2D41> +<2D42> <2D44> +<2D45> <2D4B> +<2D4C> <2D55> +<2D56> <2D58> +<2D59> <2D5B> +<2D5C> <2D62> +<2D65> <2D6A> +<2D6B> <2D6C> +<2D6D> <2D6F> +<2D70> <2D76> +<2D78> <2D7A> +<2D7B> <2D7C> +<2D7D> <2D7F> +<2D80> <2D86> +<2D88> <2D8D> +<2D8E> <2D8F> +<2D90> <2D9D> +<2D9F> <2DC0> +<2DC1> <2DC2> +<2DC3> <2DC5> +<2DC6> <2DCC> +<2DCE> <2DD2> +<2DD3> <2DD4> +<2DD5> <2DD7> +<2DD8> <2DDE> +<2DE1> <2DE6> +<2DE7> <2DE8> +<2DE9> <2DEB> +<2DEC> <2DF2> +<2DF4> <2DF9> +<2DFA> <2DFC> +<2DFD> <2DFF> +<2E00> <2E08> +<2E0A> <2E11> +<2E12> <2E13> +<2E14> <2E16> +<2E17> <2E1D> +<2E20> <2E25> +<2E26> <2E28> +<2E29> <2E38> +<2E39> <2E52> +<2E53> <2E59> +<2E5A> <2E5C> +<2E5D> <2E5F> +<2E60> <2E66> +<2E69> <2E6E> +<2E6F> <2E71> +<2E72> <2E74> +<2E75> <2E7C> +<2E7F> <2E84> +<2E85> <2E86> +<2E87> <2E89> +<2E8A> <2E90> +<2E93> <2E98> +<2E99> <2EAB> +<2EAC> <2EB2> +<2EB3> <2ECD> +<2ECE> <2ECF> +<2ED0> <2ED2> +<2ED3> <2ED9> +<2EDA> <2EDB> +<2EDD> <2EE2> +<2EE3> <2EE4> +<2EE5> <2EE7> +<2EE8> <2EEE> +<2EF1> <2EF6> +<2EF7> <2EF8> +<2EF9> <2EFB> +<2EFC> <2EFF> +<2F00> <2F02> +<2F05> <2F06> +<2F07> <2F23> +<2F24> <2F25> +<2F26> <2F28> +<2F29> <2F2F> +<2F32> <2F37> +<2F38> <2F39> +<2F3B> <2F3F> +<2F42> <2F43> +<2F45> <2F46> +<2F47> <2F49> +endbfrange + +100 beginbfrange +<2F4A> <2F50> +<2F52> <2F56> +<2F57> <2F5C> +<2F5D> <2F68> +<2F69> <2F8A> +<2F8B> <2F8C> +<2F8D> <2F8F> +<2F91> <2F95> +<2F98> <2F9B> +<2F9C> <2F9D> +<2F9E> <2FA0> +<2FA1> <2FA7> +<2FA9> <2FAE> +<2FAF> <2FB0> +<2FB1> <2FB3> +<2FB4> <2FBD> +<2FBF> <2FC2> +<2FC3> <2FDD> +<2FDF> <2FE1> +<2FE3> <2FE7> +<2FEA> <2FEF> +<2FF0> <2FF2> +<2FF3> <2FFF> +<3000> <3001> +<3002> <3023> +<3024> <3026> +<3027> <3029> +<302A> <3031> +<3034> <3039> +<303A> <303C> +<303D> <303F> +<3040> <3047> +<3049> <3050> +<3052> <3053> +<3054> <3058> +<305B> <305D> +<305F> <3061> +<3062> <3064> +<3065> <306C> +<306E> <3075> +<3076> <3090> +<3091> <3093> +<3094> <3096> +<3097> <30A9> +<30AA> <30AC> +<30AD> <30AF> +<30B0> <30B6> +<30B7> <30B8> +<30B9> <30C0> +<30C1> <30C3> +<30C4> <30C6> +<30C7> <30CD> +<30CE> <30CF> +<30D0> <30F3> +<30F4> <30F5> +<30F6> <30F7> +<30F9> <30FD> +<3101> <3102> +<3103> <3104> +<3105> <3108> +<310B> <310D> +<310E> <310F> +<3110> <3111> +<3112> <3114> +<3115> <311B> +<311D> <311F> +<3120> <3121> +<3122> <3123> +<3124> <312F> +<3130> <3155> +<3156> <3157> +<3158> <3159> +<315B> <315F> +<3162> <3166> +<3167> <3168> +<3169> <316A> +<316B> <3171> +<3173> <3178> +<3179> <317A> +<317B> <317D> +<317E> <3185> +<3187> <3189> +<318A> <318B> +<318C> <318E> +<318F> <31A5> +<31A7> <31A9> +<31AA> <31B0> +<31B3> <31B8> +<31B9> <31BB> +<31BC> <31CA> +<31CB> <31D1> +<31D2> <31E4> +<31E5> <31EB> +<31EC> <31ED> +<31EE> <31F0> +<31F1> <31F7> +<31F8> <31FF> +<3200> <3201> +<3202> <3204> +<3205> <321B> +endbfrange + +100 beginbfrange +<321C> <321D> +<321E> <321F> +<3220> <3224> +<3227> <3229> +<322B> <3231> +<3232> <323C> +<323D> <3243> +<3244> <325E> +<325F> <3260> +<3261> <3263> +<3264> <326F> +<3270> <3275> +<3276> <3278> +<3279> <327B> +<327C> <3282> +<3283> <3284> +<3286> <328B> +<328C> <328D> +<328E> <3290> +<3291> <3297> +<3299> <32BC> +<32BD> <32BE> +<32BF> <32C1> +<32C3> <32C7> +<32CA> <32CD> +<32CE> <32CF> +<32D0> <32D2> +<32D4> <32D8> +<32DA> <32DE> +<32DF> <32E0> +<32E1> <32E3> +<32E4> <32EA> +<32EC> <32F1> +<32F2> <32FF> +<3300> <3326> +<3327> <3328> +<3329> <332A> +<332B> <3331> +<3332> <3333> +<3334> <3339> +<333A> <334D> +<334E> <3353> +<3354> <3361> +<3363> <3384> +<3385> <3386> +<3387> <3389> +<338A> <3390> +<3391> <3393> +<3394> <33D1> +<33D2> <33EC> +<33ED> <33FF> +<3401> <3406> +<3407> <3408> +<3409> <340B> +<340C> <3412> +<3413> <3414> +<3416> <346F> +<3470> <3483> +<3484> <3489> +<348A> <348C> +<348D> <348F> +<3490> <3496> +<3497> <34BC> +<34BD> <34BE> +<34BF> <34C1> +<34C2> <34C8> +<34CB> <34D0> +<34D2> <34D3> +<34D4> <34D8> +<34DA> <34DC> +<34DD> <34DE> +<34DF> <34E0> +<34E1> <34E3> +<34E4> <34EA> +<34EC> <34F1> +<34F2> <34F3> +<34F4> <34F6> +<34F7> <34FD> +<3500> <3505> +<3506> <3508> +<3509> <350B> +<350C> <3512> +<3513> <3516> +<3517> <351C> +<351D> <351E> +<3520> <3523> +<3525> <3528> +<352A> <352B> +<352C> <352E> +<352F> <3535> +<3537> <353C> +<353D> <353E> +<353F> <3541> +<3542> <3548> +<354A> <354F> +<3550> <3552> +<3553> <3555> +<3556> <3561> +<3562> <3567> +<3569> <356B> +endbfrange + +100 beginbfrange +<356D> <3571> +<3574> <3576> +<3577> <3578> +<3579> <357A> +<357B> <357D> +<357E> <3589> +<358A> <358F> +<3590> <3592> +<3593> <3595> +<3596> <359C> +<359D> <359E> +<359F> <35A5> +<35A6> <35A8> +<35A9> <35AB> +<35AC> <35B2> +<35B4> <35BB> +<35BC> <35BD> +<35BE> <35C0> +<35C1> <35C7> +<35CA> <35CF> +<35D0> <35D1> +<35D2> <35D3> +<35D4> <35DA> +<35E0> <35F2> +<35F3> <35F9> +<35FA> <35FB> +<35FC> <35FE> +<3600> <3605> +<3606> <3609> +<360A> <360F> +<3610> <3611> +<3612> <3614> +<3615> <361B> +<361E> <3623> +<3624> <3629> +<362A> <3630> +<3631> <3632> +<3634> <3639> +<363A> <363B> +<363C> <363E> +<363F> <3644> +<3647> <3668> +<3669> <366A> +<366B> <366C> +<366D> <3672> +<3675> <3678> +<367B> <367D> +<367E> <3684> +<3685> <3686> +<3687> <368B> +<368C> <368D> +<368E> <3690> +<3691> <3697> +<3698> <3699> +<369A> <36B4> +<36B5> <36D6> +<36D7> <36D8> +<36D9> <36DB> +<36DD> <36E1> +<36E2> <36E3> +<36E4> <36E9> +<36EA> <36EC> +<36ED> <36EF> +<36F0> <36FF> +<3700> <3722> +<3723> <3739> +<373A> <373B> +<373C> <373D> +<373F> <3743> +<3744> <3746> +<3747> <374C> +<374D> <374E> +<374F> <375D> +<375E> <3764> +<3765> <3777> +<3778> <377E> +<377F> <3781> +<3782> <3784> +<3785> <378B> +<378C> <3795> +<3796> <37B0> +<37B1> <37B2> +<37B3> <37B5> +<37B6> <37BC> +<37BD> <37BF> +<37C0> <37C5> +<37C6> <37D8> +<37D9> <37DF> +<37E0> <37FA> +<37FB> <37FD> +<37FE> <37FF> +<3800> <3829> +<382A> <382F> +<3830> <3831> +<3832> <3834> +<3836> <3839> +<383A> <3843> +<3844> <3846> +<3847> <3849> +<384A> <3850> +endbfrange + +100 beginbfrange +<3851> <385B> +<385C> <385D> +<385E> <3860> +<3861> <3867> +<386A> <386F> +<3870> <3871> +<3873> <3876> +<3878> <387A> +<387C> <387D> +<387E> <3880> +<3881> <3887> +<3889> <388E> +<388F> <3890> +<3891> <3893> +<3894> <3895> +<3896> <3899> +<389C> <389E> +<38A0> <38A2> +<38A3> <38A5> +<38A6> <38AD> +<38AE> <38B7> +<38B8> <38B9> +<38BB> <38BF> +<38C3> <38C4> +<38C5> <38C7> +<38C8> <38CE> +<38D1> <38D6> +<38D8> <38DA> +<38DC> <38DF> +<38E0> <38E2> +<38E3> <38E5> +<38E6> <38E8> +<38E9> <38EF> +<38F1> <38F7> +<38F8> <38F9> +<38FA> <38FC> +<38FE> <38FF> +<3903> <3906> +<3907> <3908> +<3909> <390B> +<390C> <3912> +<3914> <3919> +<391A> <391B> +<391C> <3926> +<3927> <3928> +<392A> <392F> +<3930> <3931> +<3932> <3934> +<3935> <393B> +<393E> <3943> +<3944> <3945> +<3946> <3948> +<3949> <394F> +<3952> <3957> +<3958> <3959> +<395A> <395C> +<395D> <3961> +<3964> <3969> +<396A> <396B> +<396C> <396E> +<396F> <3975> +<3976> <3977> +<3978> <397D> +<397E> <397F> +<3980> <3982> +<3983> <3989> +<398A> <398C> +<398D> <3992> +<3993> <3994> +<3995> <3997> +<3998> <399E> +<39A1> <39A6> +<39A7> <39A8> +<39A9> <39AB> +<39AC> <39B2> +<39B6> <39B9> +<39BA> <39BB> +<39BC> <39BE> +<39BF> <39C3> +<39C7> <39C9> +<39CA> <39CC> +<39CD> <39D3> +<39D4> <39D5> +<39D6> <39DD> +<39DE> <39DF> +<39E0> <39E2> +<39E3> <39E6> +<39E8> <39EA> +<39EC> <39ED> +<39F0> <39F4> +<39F6> <39FA> +<39FB> <39FC> +<39FD> <39FF> +<3A00> <3A06> +<3A08> <3A0D> +<3A0E> <3A0F> +<3A12> <3A18> +<3A19> <3A1C> +<3A1D> <3A22> +<3A23> <3A25> +endbfrange + +100 beginbfrange +<3A26> <3A28> +<3A29> <3A3B> +<3A3C> <3A3D> +<3A3E> <3A40> +<3A42> <3A46> +<3A49> <3A4D> +<3A4E> <3A4F> +<3A50> <3A52> +<3A53> <3A59> +<3A5C> <3A61> +<3A62> <3A64> +<3A65> <3A67> +<3A68> <3A6E> +<3A6F> <3A70> +<3A71> <3A76> +<3A77> <3A91> +<3A92> <3A93> +<3A94> <3A96> +<3A98> <3A9C> +<3A9F> <3AA1> +<3AA2> <3AA7> +<3AA8> <3AAF> +<3AB2> <3AB7> +<3AB8> <3ACA> +<3ACB> <3AD0> +<3AD1> <3AD3> +<3AD4> <3AD6> +<3AD7> <3ADD> +<3AE0> <3AE5> +<3AE6> <3AE7> +<3AE8> <3AF7> +<3AF8> <3AFD> +<3AFE> <3AFF> +<3B00> <3B02> +<3B03> <3B07> +<3B0A> <3B0F> +<3B10> <3B22> +<3B23> <3B29> +<3B2A> <3B44> +<3B45> <3B46> +<3B47> <3B49> +<3B4A> <3B50> +<3B52> <3B59> +<3B5A> <3B5C> +<3B5D> <3B5F> +<3B60> <3B66> +<3B67> <3B71> +<3B72> <3B73> +<3B74> <3B76> +<3B77> <3B7D> +<3B80> <3BA1> +<3BA2> <3BA3> +<3BA4> <3BA5> +<3BA7> <3BAB> +<3BAE> <3BAF> +<3BB1> <3BB2> +<3BB5> <3BB6> +<3BB7> <3BBA> +<3BBC> <3BC1> +<3BC2> <3BC3> +<3BC4> <3BC6> +<3BC7> <3BCD> +<3BCF> <3BD4> +<3BD5> <3BD7> +<3BD8> <3BE7> +<3BE8> <3BFF> +<3C00> <3C09> +<3C0A> <3C0B> +<3C0C> <3C0E> +<3C0F> <3C15> +<3C17> <3C1C> +<3C1D> <3C30> +<3C31> <3C36> +<3C37> <3C49> +<3C4A> <3C6C> +<3C6D> <3C6E> +<3C6F> <3C71> +<3C72> <3C78> +<3C7C> <3C7F> +<3C80> <3C85> +<3C86> <3C90> +<3C91> <3C97> +<3C98> <3CAA> +<3CAB> <3CB1> +<3CB2> <3CB4> +<3CB5> <3CB7> +<3CB8> <3CBE> +<3CBF> <3CDD> +<3CDE> <3CE3> +<3CE4> <3CE5> +<3CE6> <3CE8> +<3CE9> <3CEF> +<3CF0> <3CF2> +<3CF3> <3CF8> +<3CF9> <3CFF> +<3D00> <3D0B> +<3D0C> <3D2D> +<3D2E> <3D48> +<3D49> <3D63> +<3D64> <3D72> +endbfrange + +100 beginbfrange +<3D73> <3D74> +<3D76> <3D97> +<3D98> <3D99> +<3D9A> <3D9C> +<3D9D> <3DA3> +<3DA4> <3DA6> +<3DA7> <3DAA> +<3DAB> <3DAC> +<3DAF> <3DB5> +<3DB7> <3DBB> +<3DBC> <3DBD> +<3DBE> <3DC0> +<3DC1> <3DC7> +<3DC9> <3DCE> +<3DCF> <3DD1> +<3DD4> <3DDA> +<3DDB> <3DDE> +<3DDF> <3DFF> +<3E01> <3E02> +<3E03> <3E05> +<3E06> <3E0C> +<3E0E> <3E13> +<3E14> <3E15> +<3E16> <3E18> +<3E19> <3E1F> +<3E22> <3E27> +<3E28> <3E2A> +<3E2B> <3E39> +<3E3A> <3E40> +<3E41> <3E43> +<3E44> <3E53> +<3E54> <3E59> +<3E5A> <3E5B> +<3E5C> <3E5E> +<3E5F> <3E65> +<3E68> <3E6D> +<3E6E> <3E70> +<3E71> <3E73> +<3E74> <3E7F> +<3E80> <3EA1> +<3EA2> <3EA4> +<3EA5> <3EA7> +<3EA8> <3EAE> +<3EB1> <3EB6> +<3EB7> <3EC5> +<3EC6> <3ED0> +<3ED1> <3ED2> +<3ED3> <3ED5> +<3ED6> <3EDC> +<3EDF> <3EE4> +<3EE5> <3EF7> +<3EF8> <3EFE> +<3F00> <3F01> +<3F02> <3F18> +<3F19> <3F1B> +<3F1C> <3F1E> +<3F1F> <3F25> +<3F28> <3F2D> +<3F2E> <3F30> +<3F31> <3F33> +<3F34> <3F3A> +<3F3B> <3F3E> +<3F3F> <3F44> +<3F45> <3F46> +<3F47> <3F49> +<3F4A> <3F50> +<3F53> <3F74> +<3F75> <3F76> +<3F77> <3F78> +<3F79> <3F7E> +<3F81> <3F86> +<3F87> <3F88> +<3F89> <3F8B> +<3F8C> <3F92> +<3F95> <3F9A> +<3F9B> <3F9C> +<3F9D> <3F9F> +<3FA0> <3FA6> +<3FA8> <3FAD> +<3FAE> <3FC0> +<3FC1> <3FE2> +<3FE3> <3FE4> +<3FE5> <3FE6> +<3FE7> <3FED> +<3FEF> <3FF4> +<3FF5> <3FF6> +<3FF7> <3FF9> +<3FFA> <3FFF> +<4003> <4008> +<4009> <400B> +<400C> <400E> +<400F> <4015> +<4017> <401C> +<401D> <4037> +<4038> <4039> +<403A> <403C> +<403D> <4043> +<4046> <404B> +<404C> <404D> +<404E> <4050> +endbfrange + +100 beginbfrange +<4051> <4057> +<4058> <405B> +<405C> <4061> +<4062> <4075> +<4076> <407B> +<407C> <4082> +<4083> <4095> +<4096> <40B0> +<40B1> <40B2> +<40B3> <40B5> +<40B6> <40BC> +<40BF> <40C4> +<40C5> <40C7> +<40C8> <40CA> +<40CB> <40D6> +<40D7> <40DC> +<40DD> <40F0> +<40F1> <40F6> +<40F7> <40F8> +<40F9> <40FB> +<40FC> <40FF> +<4100> <4102> +<4105> <410A> +<410B> <410D> +<410E> <4110> +<4111> <4117> +<4118> <4122> +<4123> <4124> +<4125> <4127> +<4128> <412E> +<412F> <4131> +<4132> <4153> +<4154> <4155> +<4156> <4158> +<4159> <415F> +<4162> <4167> +<4168> <4169> +<416A> <416C> +<416D> <4172> +<4174> <4179> +<417A> <417B> +<417C> <417E> +<417F> <4185> +<4187> <418C> +<418D> <41A0> +<41A1> <41C2> +<41C3> <41C4> +<41C5> <41C7> +<41C9> <41CD> +<41CF> <41D4> +<41D5> <41D6> +<41D7> <41D9> +<41DA> <41E0> +<41E3> <41E8> +<41E9> <41EB> +<41EC> <41FA> +<41FB> <41FF> +<4200> <4201> +<4202> <4204> +<4205> <421B> +<421C> <421D> +<421E> <4220> +<4221> <4227> +<422A> <422D> +<422F> <4231> +<4232> <4248> +<4249> <4263> +<4264> <4266> +<4267> <4274> +<4276> <427B> +<427C> <4296> +<4297> <4298> +<4299> <429B> +<429C> <42A2> +<42A5> <42AA> +<42AB> <42BD> +<42BE> <42C4> +<42C5> <42DF> +<42E0> <42E1> +<42E2> <42E4> +<42E5> <42EB> +<42EC> <42EE> +<42EF> <42F4> +<42F5> <42F7> +<42F8> <42FA> +<42FB> <42FF> +<4300> <4301> +<4302> <4305> +<4306> <430B> +<430C> <430D> +<430E> <430F> +<4311> <4315> +<4317> <431E> +<431F> <4321> +<4322> <4324> +<4325> <432B> +<432C> <4335> +<4336> <4337> +<4338> <433A> +<433B> <4341> +endbfrange + +100 beginbfrange +<4344> <4349> +<434B> <434D> +<434F> <4353> +<4355> <4357> +<4358> <4359> +<435A> <435B> +<435C> <435E> +<435F> <4365> +<4367> <436C> +<436D> <43A2> +<43A3> <43A4> +<43A5> <43A7> +<43A8> <43AE> +<43B0> <43B5> +<43B6> <43B7> +<43B8> <43BA> +<43BB> <43C1> +<43C4> <43C9> +<43CA> <43CC> +<43CD> <43CF> +<43D0> <43D6> +<43D7> <43D8> +<43D9> <43DE> +<43DF> <43E5> +<43E6> <43ED> +<43EF> <43F6> +<43F7> <43F8> +<43F9> <43FB> +<43FC> <43FF> +<4400> <4402> +<4405> <440A> +<440B> <441E> +<441F> <4440> +<4441> <4443> +<4444> <445A> +<445B> <445D> +<445E> <4460> +<4461> <4468> +<446A> <4471> +<4472> <4473> +<4474> <4475> +<4477> <447B> +<447E> <4483> +<4484> <4497> +<4498> <44B9> +<44BA> <44BC> +<44BD> <44BF> +<44C0> <44C6> +<44C7> <44C8> +<44C9> <44D0> +<44D1> <44D3> +<44D4> <44D6> +<44D7> <44DD> +<44DE> <44DF> +<44E1> <44E6> +<44E7> <44E9> +<44EA> <44EC> +<44ED> <44F3> +<44F5> <44FF> +<4500> <4518> +<4519> <451A> +<451B> <451D> +<451E> <4524> +<4527> <452C> +<452D> <452E> +<452F> <4531> +<4532> <4535> +<4536> <4537> +<453A> <453F> +<4540> <4541> +<4542> <4544> +<4545> <454B> +<454D> <4552> +<4553> <4566> +<4567> <4588> +<4589> <458A> +<458B> <458D> +<458F> <4593> +<4596> <459B> +<459C> <459D> +<459E> <45A0> +<45A1> <45A7> +<45AA> <45AF> +<45B0> <45B1> +<45B2> <45B4> +<45B5> <45BB> +<45BD> <45C2> +<45C3> <45C5> +<45C6> <45C8> +<45C9> <45D0> +<45D1> <45DA> +<45DB> <45DC> +<45DD> <45DF> +<45E0> <45E3> +<45E4> <45E5> +<45E8> <45EA> +<45EB> <45EC> +<45ED> <45EE> +<45EF> <45F1> +<45F2> <45FB> +endbfrange + +53 beginbfrange +<45FD> <45FF> +<4600> <4602> +<4603> <4604> +<4605> <4612> +<4614> <4619> +<461A> <461B> +<461C> <461E> +<461F> <4626> +<4629> <462E> +<462F> <4631> +<4632> <4634> +<4635> <463C> +<463E> <4645> +<4646> <4647> +<4648> <464A> +<464B> <464E> +<464F> <4650> +<4651> <4652> +<4654> <4659> +<465A> <465C> +<465D> <465F> +<4660> <4666> +<4667> <466A> +<466B> <4670> +<4671> <4672> +<4673> <4675> +<4676> <4681> +<4682> <4687> +<4688> <4689> +<468A> <468C> +<468D> <4693> +<4696> <469B> +<469C> <469D> +<469E> <46A0> +<46A1> <46A7> +<46A8> <46A9> +<46AB> <46B0> +<46B1> <46B2> +<46B4> <46B9> +<46BC> <46BE> +<46BF> <46C0> +<46C1> <46C3> +<46C4> <46C6> +<46C7> <46CD> +<46CE> <46D0> +<46D1> <46D6> +<46D7> <46D8> +<46D9> <46DB> +<46DC> <46E2> +<46E5> <46EA> +<46EB> <46FF> <0020> +<4700> <4749> <0035> +<474F> <47AC> <0020> +endbfrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/B5pc-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/B5pc-H new file mode 100644 index 00000000000..58538febafe --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/B5pc-H @@ -0,0 +1,337 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (B5pc-H) +%%Title: (B5pc-H Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /B5pc-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 0 def +/XUID [1 10 25382] def + +/WMode 0 def + +3 begincodespacerange + <00> <80> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<80> <80> 61 + 99 + 13743 + 128 + 162 + 248 + 247 + 249 + 256 + 319 + 413 + 476 + 503 + 562 + 595 + 658 + 752 + 815 + 909 + 972 + 1066 + 1129 + 1223 + 1286 + 1380 + 1443 + 1537 + 1600 + 1694 + 1757 + 1851 + 1914 + 2431 + 2007 + 2070 + 2164 + 2227 + 2321 + 2384 + 2432 + 2479 + 2542 + 2636 + 2699 + 2793 + 2856 + 2950 + 3013 + 3107 + 3170 + 3264 + 3327 + 3421 + 3484 + 3578 + 3641 + 3735 + 3798 + 3892 + 3955 + 4049 + 4112 + 4206 + 4269 + 4309 + 4364 + 4427 + 4521 + 4584 + 4678 + 4308 + 4696 + 4740 + 4834 + 4897 + 4991 + 5054 + 5148 + 5211 + 5222 + 5306 + 5369 + 5221 + 5411 + 5462 + 5496 + 5526 + 5551 + 5550 + 5552 + 5620 + 5495 + 5642 + 5682 + 5776 + 5839 + 5933 + 5996 + 628 +endcidrange + +100 begincidrange + 6006 + 6040 + 6059 + 6039 + 6088 + 6135 + 6153 + 6216 + 6134 + 6302 + 6309 + 6372 + 6466 + 6529 + 6623 + 6686 + 6780 + 6843 + 6937 + 7000 + 7094 + 7157 + 7251 + 7314 + 7408 + 7471 + 7565 + 7628 + 7722 + 7785 + 7879 + 7942 + 8036 + 8099 + 8788 + 8143 + 8193 + 8889 + 8251 + 8255 + 8349 + 8412 + 8506 + 8569 + 8663 + 8726 + 8142 + 8789 + 8820 + 8883 + 8890 + 8978 + 9041 + 9135 + 9198 + 9089 + 9289 + 9291 + 9354 + 9448 + 9511 + 9605 + 9668 + 9762 + 9825 + 9919 + 9982 + 10076 + 10139 + 10233 + 10296 + 10390 + 10453 + 10547 + 10610 + 10704 + 10767 + 10861 + 10924 + 10927 + 11019 + 11074 + 11083 + 11177 + 11240 + 11334 + 11362 + 11398 + 10926 + 11478 + 11491 + 11554 + 11073 + 11615 + 11647 + 11710 + 11720 + 11805 + 11868 + 12308 +endcidrange + +47 begincidrange + 11942 + 11961 + 12024 + 12118 + 11719 + 12140 + 12180 + 11361 + 12222 + 12273 + 12309 + 12640 + 12317 + 12336 + 12430 + 12783 + 12470 + 12492 + 12527 + 12587 + 12641 + 12651 + 12745 + 12784 + 12809 + 12526 + 12829 + 12901 + 12903 + 12966 + 13060 + 12900 + 13095 + 13122 + 13216 + 13279 + 13373 + 13436 + 13530 + 13586 + 13594 + 13585 + 13629 + 13641 + 13630 + 13642 + 96 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/B5pc-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/B5pc-V new file mode 100644 index 00000000000..741d524a660 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/B5pc-V @@ -0,0 +1,90 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (B5pc-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (B5pc-H) +%%BeginResource: CMap (B5pc-V) +%%Title: (B5pc-V Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/B5pc-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /B5pc-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 900 def +/XUID [1 10 25383] def + +/WMode 1 def + +12 begincidrange + 13646 + 13743 + 13745 + 130 + 134 + 138 + 142 + 146 + 150 + 154 + 158 + 13647 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/CNS-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/CNS-EUC-H new file mode 100644 index 00000000000..b60f5eae5fd --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/CNS-EUC-H @@ -0,0 +1,490 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (CNS-EUC-H) +%%Title: (CNS-EUC-H Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /CNS-EUC-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 300 def +/XUID [1 10 25388] def + +/WMode 0 def + +5 begincodespacerange + <00> <80> + <8EA1A1A1> <8EA1FEFE> + <8EA2A1A1> <8EA2FEFE> + <8EA3A1A1> <8EA3FEFE> + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 13648 +endnotdefrange + +100 begincidrange +<20> <7e> 13648 +<8ea1a1a1> <8ea1a1fe> 99 +<8ea1a2a1> <8ea1a2fe> 193 +<8ea1a3a1> <8ea1a3ce> 287 +<8ea1a4a1> <8ea1a4fe> 333 +<8ea1a5a1> <8ea1a5ec> 427 +<8ea1a5ee> <8ea1a5f0> 503 +<8ea1a6a1> <8ea1a6be> 506 +<8ea1a7a1> <8ea1a7a1> 595 +<8ea1a7a2> <8ea1a7a4> 536 +<8ea1a7a5> <8ea1a7a5> 596 +<8ea1a7a6> <8ea1a7a6> 539 +<8ea1a7a7> <8ea1a7a7> 602 +<8ea1a7a8> <8ea1a7a8> 540 +<8ea1a7a9> <8ea1a7ac> 603 +<8ea1a7ad> <8ea1a7af> 541 +<8ea1a7b0> <8ea1a7b0> 607 +<8ea1a7b1> <8ea1a7b1> 5998 +<8ea1a7b2> <8ea1a7b2> 608 +<8ea1a7b3> <8ea1a7b3> 610 +<8ea1a7b4> <8ea1a7b4> 544 +<8ea1a7b5> <8ea1a7b5> 611 +<8ea1a7b6> <8ea1a7b6> 5999 +<8ea1a7b7> <8ea1a7b7> 545 +<8ea1a7b8> <8ea1a7b9> 612 +<8ea1a7ba> <8ea1a7ba> 546 +<8ea1a7bb> <8ea1a7bb> 6000 +<8ea1a7bc> <8ea1a7bc> 547 +<8ea1a7bd> <8ea1a7bd> 614 +<8ea1a7be> <8ea1a7be> 633 +<8ea1a7bf> <8ea1a7bf> 6005 +<8ea1a7c0> <8ea1a7c1> 634 +<8ea1a7c2> <8ea1a7c2> 548 +<8ea1a7c3> <8ea1a7c6> 636 +<8ea1a7c7> <8ea1a7c7> 549 +<8ea1a7c8> <8ea1a7cb> 642 +<8ea1a7cc> <8ea1a7cc> 6006 +<8ea1a7cd> <8ea1a7cd> 646 +<8ea1a7ce> <8ea1a7ce> 550 +<8ea1a7cf> <8ea1a7d0> 648 +<8ea1a7d1> <8ea1a7d2> 652 +<8ea1a7d3> <8ea1a7d5> 551 +<8ea1a7d6> <8ea1a7d8> 654 +<8ea1a7d9> <8ea1a7da> 554 +<8ea1a7db> <8ea1a7db> 6007 +<8ea1a7dc> <8ea1a7df> 720 +<8ea1a7e0> <8ea1a7e0> 725 +<8ea1a7e1> <8ea1a7e1> 556 +<8ea1a7e2> <8ea1a7e5> 726 +<8ea1a7e6> <8ea1a7e6> 557 +<8ea1a7e7> <8ea1a7ed> 730 +<8ea1a7ee> <8ea1a7ee> 6026 +<8ea1a7ef> <8ea1a7f2> 737 +<8ea1a7f3> <8ea1a7f3> 6028 +<8ea1a7f4> <8ea1a7f8> 741 +<8ea1a7f9> <8ea1a7f9> 6029 +<8ea1a7fa> <8ea1a7fd> 746 +<8ea1a7fe> <8ea1a7fe> 854 +<8ea1a8a1> <8ea1a8a6> 855 +<8ea1a8a7> <8ea1a8a7> 862 +<8ea1a8a8> <8ea1a8a8> 866 +<8ea1a8a9> <8ea1a8aa> 558 +<8ea1a8ab> <8ea1a8b2> 867 +<8ea1a8b3> <8ea1a8b3> 6066 +<8ea1a8b4> <8ea1a8b6> 875 +<8ea1a8b7> <8ea1a8ba> 1014 +<8ea1a8bb> <8ea1a8bb> 6162 +<8ea1a8bc> <8ea1a8be> 1018 +<8ea1a8bf> <8ea1a8c3> 1022 +<8ea1a8c4> <8ea1a8cc> 1029 +<8ea1a8cd> <8ea1a8cd> 6163 +<8ea1a8ce> <8ea1a8ce> 6168 +<8ea1a8cf> <8ea1a8d2> 1039 +<8ea1a8d3> <8ea1a8d3> 6169 +<8ea1a8d4> <8ea1a8d9> 1288 +<8ea1a8da> <8ea1a8da> 6375 +<8ea1a8db> <8ea1a8e2> 1294 +<8ea1a8e3> <8ea1a8e3> 560 +<8ea1a8e4> <8ea1a8e4> 1307 +<8ea1a8e5> <8ea1a8e7> 1312 +<8ea1a8e8> <8ea1a8eb> 1686 +<8ea1a8ec> <8ea1a8ec> 561 +<8ea1a8ed> <8ea1a8f0> 1695 +<8ea1a8f1> <8ea1a8fb> 2086 +<8ea1a8fc> <8ea1a8fe> 2549 +<8ea1a9a1> <8ea1a9a1> 7731 +<8ea1a9a2> <8ea1a9a2> 2552 +<8ea1a9a3> <8ea1a9a3> 7732 +<8ea1a9a4> <8ea1a9a5> 2553 +<8ea1a9a6> <8ea1a9ab> 3041 +<8ea1a9ac> <8ea1a9ae> 3515 +<8ea1a9af> <8ea1a9af> 9056 +<8ea1a9b0> <8ea1a9b0> 9746 +<8ea1a9b1> <8ea1a9b3> 3963 +<8ea1a9b4> <8ea1a9b5> 4352 +<8ea1a9b6> <8ea1a9b6> 4745 +<8ea1a9b7> <8ea1a9b8> 5042 +<8ea1a9b9> <8ea1a9b9> 12045 +<8ea1c2a1> <8ea1c2c1> 562 +<8ea1c4a1> <8ea1c4fe> 595 +endcidrange + +100 begincidrange +<8ea1c5a1> <8ea1c5fe> 689 +<8ea1c6a1> <8ea1c6fe> 783 +<8ea1c7a1> <8ea1c7fe> 877 +<8ea1c8a1> <8ea1c8fe> 971 +<8ea1c9a1> <8ea1c9fe> 1065 +<8ea1caa1> <8ea1cafe> 1159 +<8ea1cba1> <8ea1cbfe> 1253 +<8ea1cca1> <8ea1ccfe> 1347 +<8ea1cda1> <8ea1cdfe> 1441 +<8ea1cea1> <8ea1cefe> 1535 +<8ea1cfa1> <8ea1cffe> 1629 +<8ea1d0a1> <8ea1d0fe> 1723 +<8ea1d1a1> <8ea1d1fe> 1817 +<8ea1d2a1> <8ea1d2fe> 1911 +<8ea1d3a1> <8ea1d3fe> 2005 +<8ea1d4a1> <8ea1d4fe> 2099 +<8ea1d5a1> <8ea1d5fe> 2193 +<8ea1d6a1> <8ea1d6fe> 2287 +<8ea1d7a1> <8ea1d7fe> 2381 +<8ea1d8a1> <8ea1d8fe> 2475 +<8ea1d9a1> <8ea1d9fe> 2569 +<8ea1daa1> <8ea1dafe> 2663 +<8ea1dba1> <8ea1dbfe> 2757 +<8ea1dca1> <8ea1dcfe> 2851 +<8ea1dda1> <8ea1ddfe> 2945 +<8ea1dea1> <8ea1defe> 3039 +<8ea1dfa1> <8ea1dffe> 3133 +<8ea1e0a1> <8ea1e0fe> 3227 +<8ea1e1a1> <8ea1e1fe> 3321 +<8ea1e2a1> <8ea1e2fe> 3415 +<8ea1e3a1> <8ea1e3fe> 3509 +<8ea1e4a1> <8ea1e4fe> 3603 +<8ea1e5a1> <8ea1e5fe> 3697 +<8ea1e6a1> <8ea1e6fe> 3791 +<8ea1e7a1> <8ea1e7fe> 3885 +<8ea1e8a1> <8ea1e8fe> 3979 +<8ea1e9a1> <8ea1e9fe> 4073 +<8ea1eaa1> <8ea1eafe> 4167 +<8ea1eba1> <8ea1ebfe> 4261 +<8ea1eca1> <8ea1ecfe> 4355 +<8ea1eda1> <8ea1edfe> 4449 +<8ea1eea1> <8ea1eefe> 4543 +<8ea1efa1> <8ea1effe> 4637 +<8ea1f0a1> <8ea1f0fe> 4731 +<8ea1f1a1> <8ea1f1fe> 4825 +<8ea1f2a1> <8ea1f2fe> 4919 +<8ea1f3a1> <8ea1f3fe> 5013 +<8ea1f4a1> <8ea1f4fe> 5107 +<8ea1f5a1> <8ea1f5fe> 5201 +<8ea1f6a1> <8ea1f6fe> 5295 +<8ea1f7a1> <8ea1f7fe> 5389 +<8ea1f8a1> <8ea1f8fe> 5483 +<8ea1f9a1> <8ea1f9fe> 5577 +<8ea1faa1> <8ea1fafe> 5671 +<8ea1fba1> <8ea1fbfe> 5765 +<8ea1fca1> <8ea1fcfe> 5859 +<8ea1fda1> <8ea1fdcb> 5953 +<8ea2a1a1> <8ea2a1fe> 5996 +<8ea2a2a1> <8ea2a2fe> 6090 +<8ea2a3a1> <8ea2a3fe> 6184 +<8ea2a4a1> <8ea2a4fe> 6278 +<8ea2a5a1> <8ea2a5fe> 6372 +<8ea2a6a1> <8ea2a6fe> 6466 +<8ea2a7a1> <8ea2a7fe> 6560 +<8ea2a8a1> <8ea2a8fe> 6654 +<8ea2a9a1> <8ea2a9fe> 6748 +<8ea2aaa1> <8ea2aafe> 6842 +<8ea2aba1> <8ea2abfe> 6936 +<8ea2aca1> <8ea2acfe> 7030 +<8ea2ada1> <8ea2adfe> 7124 +<8ea2aea1> <8ea2aefe> 7218 +<8ea2afa1> <8ea2affe> 7312 +<8ea2b0a1> <8ea2b0fe> 7406 +<8ea2b1a1> <8ea2b1fe> 7500 +<8ea2b2a1> <8ea2b2fe> 7594 +<8ea2b3a1> <8ea2b3fe> 7688 +<8ea2b4a1> <8ea2b4fe> 7782 +<8ea2b5a1> <8ea2b5fe> 7876 +<8ea2b6a1> <8ea2b6fe> 7970 +<8ea2b7a1> <8ea2b7fe> 8064 +<8ea2b8a1> <8ea2b8fe> 8158 +<8ea2b9a1> <8ea2b9fe> 8252 +<8ea2baa1> <8ea2bafe> 8346 +<8ea2bba1> <8ea2bbfe> 8440 +<8ea2bca1> <8ea2bcfe> 8534 +<8ea2bda1> <8ea2bdfe> 8628 +<8ea2bea1> <8ea2befe> 8722 +<8ea2bfa1> <8ea2bffe> 8816 +<8ea2c0a1> <8ea2c0fe> 8910 +<8ea2c1a1> <8ea2c1fe> 9004 +<8ea2c2a1> <8ea2c2fe> 9098 +<8ea2c3a1> <8ea2c3fe> 9192 +<8ea2c4a1> <8ea2c4fe> 9286 +<8ea2c5a1> <8ea2c5fe> 9380 +<8ea2c6a1> <8ea2c6fe> 9474 +<8ea2c7a1> <8ea2c7fe> 9568 +<8ea2c8a1> <8ea2c8fe> 9662 +<8ea2c9a1> <8ea2c9fe> 9756 +<8ea2caa1> <8ea2cafe> 9850 +<8ea2cba1> <8ea2cbfe> 9944 +endcidrange + +100 begincidrange +<8ea2cca1> <8ea2ccfe> 10038 +<8ea2cda1> <8ea2cdfe> 10132 +<8ea2cea1> <8ea2cefe> 10226 +<8ea2cfa1> <8ea2cffe> 10320 +<8ea2d0a1> <8ea2d0fe> 10414 +<8ea2d1a1> <8ea2d1fe> 10508 +<8ea2d2a1> <8ea2d2fe> 10602 +<8ea2d3a1> <8ea2d3fe> 10696 +<8ea2d4a1> <8ea2d4fe> 10790 +<8ea2d5a1> <8ea2d5fe> 10884 +<8ea2d6a1> <8ea2d6fe> 10978 +<8ea2d7a1> <8ea2d7fe> 11072 +<8ea2d8a1> <8ea2d8fe> 11166 +<8ea2d9a1> <8ea2d9fe> 11260 +<8ea2daa1> <8ea2dafe> 11354 +<8ea2dba1> <8ea2dbfe> 11448 +<8ea2dca1> <8ea2dcfe> 11542 +<8ea2dda1> <8ea2ddfe> 11636 +<8ea2dea1> <8ea2defe> 11730 +<8ea2dfa1> <8ea2dffe> 11824 +<8ea2e0a1> <8ea2e0fe> 11918 +<8ea2e1a1> <8ea2e1fe> 12012 +<8ea2e2a1> <8ea2e2fe> 12106 +<8ea2e3a1> <8ea2e3fe> 12200 +<8ea2e4a1> <8ea2e4fe> 12294 +<8ea2e5a1> <8ea2e5fe> 12388 +<8ea2e6a1> <8ea2e6fe> 12482 +<8ea2e7a1> <8ea2e7fe> 12576 +<8ea2e8a1> <8ea2e8fe> 12670 +<8ea2e9a1> <8ea2e9fe> 12764 +<8ea2eaa1> <8ea2eafe> 12858 +<8ea2eba1> <8ea2ebfe> 12952 +<8ea2eca1> <8ea2ecfe> 13046 +<8ea2eda1> <8ea2edfe> 13140 +<8ea2eea1> <8ea2eefe> 13234 +<8ea2efa1> <8ea2effe> 13328 +<8ea2f0a1> <8ea2f0fe> 13422 +<8ea2f1a1> <8ea2f1fe> 13516 +<8ea2f2a1> <8ea2f2c4> 13610 + 99 + 193 + 287 + 333 + 427 + 503 + 506 + 595 + 536 + 596 + 539 + 602 + 540 + 603 + 541 + 607 + 5998 + 608 + 610 + 544 + 611 + 5999 + 545 + 612 + 546 + 6000 + 547 + 614 + 633 + 6005 + 634 + 548 + 636 + 549 + 642 + 6006 + 646 + 550 + 648 + 652 + 551 + 654 + 554 + 6007 + 720 + 725 + 556 + 726 + 557 + 730 + 6026 + 737 + 6028 + 741 + 6029 + 746 + 854 + 855 + 862 + 866 + 558 +endcidrange + +95 begincidrange + 867 + 6066 + 875 + 1014 + 6162 + 1018 + 1022 + 1029 + 6163 + 6168 + 1039 + 6169 + 1288 + 6375 + 1294 + 560 + 1307 + 1312 + 1686 + 561 + 1695 + 2086 + 2549 + 7731 + 2552 + 7732 + 2553 + 3041 + 3515 + 9056 + 9746 + 3963 + 4352 + 4745 + 5042 + 12045 + 562 + 595 + 689 + 783 + 877 + 971 + 1065 + 1159 + 1253 + 1347 + 1441 + 1535 + 1629 + 1723 + 1817 + 1911 + 2005 + 2099 + 2193 + 2287 + 2381 + 2475 + 2569 + 2663 + 2757 + 2851 + 2945 + 3039 + 3133 + 3227 + 3321 + 3415 + 3509 + 3603 + 3697 + 3791 + 3885 + 3979 + 4073 + 4167 + 4261 + 4355 + 4449 + 4543 + 4637 + 4731 + 4825 + 4919 + 5013 + 5107 + 5201 + 5295 + 5389 + 5483 + 5577 + 5671 + 5765 + 5859 + 5953 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/CNS-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/CNS-EUC-V new file mode 100644 index 00000000000..33b77920db2 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/CNS-EUC-V @@ -0,0 +1,538 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (CNS-EUC-V) +%%Title: (CNS-EUC-V Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /CNS-EUC-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/XUID [1 10 25389] def + +/WMode 1 def + +5 begincodespacerange + <00> <80> + <8EA1A1A1> <8EA1FEFE> + <8EA2A1A1> <8EA2FEFE> + <8EA3A1A1> <8EA3FEFE> + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 13648 +endnotdefrange + +100 begincidrange +<20> <7e> 13648 +<8ea1a1a1> <8ea1a1ab> 99 +<8ea1a1ac> <8ea1a1ac> 13646 +<8ea1a1ad> <8ea1a1ba> 111 +<8ea1a1bb> <8ea1a1bb> 124 +<8ea1a1bc> <8ea1a1bc> 126 +<8ea1a1bd> <8ea1a1bd> 126 +<8ea1a1be> <8ea1a1bf> 130 +<8ea1a1c0> <8ea1a1c1> 130 +<8ea1a1c2> <8ea1a1c3> 134 +<8ea1a1c4> <8ea1a1c5> 134 +<8ea1a1c6> <8ea1a1c7> 138 +<8ea1a1c8> <8ea1a1c9> 138 +<8ea1a1ca> <8ea1a1cb> 142 +<8ea1a1cc> <8ea1a1cd> 142 +<8ea1a1ce> <8ea1a1cf> 146 +<8ea1a1d0> <8ea1a1d1> 146 +<8ea1a1d2> <8ea1a1d3> 150 +<8ea1a1d4> <8ea1a1d5> 150 +<8ea1a1d6> <8ea1a1d7> 154 +<8ea1a1d8> <8ea1a1d9> 154 +<8ea1a1da> <8ea1a1db> 158 +<8ea1a1dc> <8ea1a1fe> 158 +<8ea1a2a1> <8ea1a2c3> 193 +<8ea1a2c4> <8ea1a2c4> 13647 +<8ea1a2c5> <8ea1a2fe> 229 +<8ea1a3a1> <8ea1a3ce> 287 +<8ea1a4a1> <8ea1a4fe> 333 +<8ea1a5a1> <8ea1a5ec> 427 +<8ea1a5ee> <8ea1a5f0> 503 +<8ea1a6a1> <8ea1a6be> 506 +<8ea1a7a1> <8ea1a7a1> 595 +<8ea1a7a2> <8ea1a7a4> 536 +<8ea1a7a5> <8ea1a7a5> 596 +<8ea1a7a6> <8ea1a7a6> 539 +<8ea1a7a7> <8ea1a7a7> 602 +<8ea1a7a8> <8ea1a7a8> 540 +<8ea1a7a9> <8ea1a7ac> 603 +<8ea1a7ad> <8ea1a7af> 541 +<8ea1a7b0> <8ea1a7b0> 607 +<8ea1a7b1> <8ea1a7b1> 5998 +<8ea1a7b2> <8ea1a7b2> 608 +<8ea1a7b3> <8ea1a7b3> 610 +<8ea1a7b4> <8ea1a7b4> 544 +<8ea1a7b5> <8ea1a7b5> 611 +<8ea1a7b6> <8ea1a7b6> 5999 +<8ea1a7b7> <8ea1a7b7> 545 +<8ea1a7b8> <8ea1a7b9> 612 +<8ea1a7ba> <8ea1a7ba> 546 +<8ea1a7bb> <8ea1a7bb> 6000 +<8ea1a7bc> <8ea1a7bc> 547 +<8ea1a7bd> <8ea1a7bd> 614 +<8ea1a7be> <8ea1a7be> 633 +<8ea1a7bf> <8ea1a7bf> 6005 +<8ea1a7c0> <8ea1a7c1> 634 +<8ea1a7c2> <8ea1a7c2> 548 +<8ea1a7c3> <8ea1a7c6> 636 +<8ea1a7c7> <8ea1a7c7> 549 +<8ea1a7c8> <8ea1a7cb> 642 +<8ea1a7cc> <8ea1a7cc> 6006 +<8ea1a7cd> <8ea1a7cd> 646 +<8ea1a7ce> <8ea1a7ce> 550 +<8ea1a7cf> <8ea1a7d0> 648 +<8ea1a7d1> <8ea1a7d2> 652 +<8ea1a7d3> <8ea1a7d5> 551 +<8ea1a7d6> <8ea1a7d8> 654 +<8ea1a7d9> <8ea1a7da> 554 +<8ea1a7db> <8ea1a7db> 6007 +<8ea1a7dc> <8ea1a7df> 720 +<8ea1a7e0> <8ea1a7e0> 725 +<8ea1a7e1> <8ea1a7e1> 556 +<8ea1a7e2> <8ea1a7e5> 726 +<8ea1a7e6> <8ea1a7e6> 557 +<8ea1a7e7> <8ea1a7ed> 730 +<8ea1a7ee> <8ea1a7ee> 6026 +<8ea1a7ef> <8ea1a7f2> 737 +<8ea1a7f3> <8ea1a7f3> 6028 +<8ea1a7f4> <8ea1a7f8> 741 +<8ea1a7f9> <8ea1a7f9> 6029 +<8ea1a7fa> <8ea1a7fd> 746 +<8ea1a7fe> <8ea1a7fe> 854 +<8ea1a8a1> <8ea1a8a6> 855 +<8ea1a8a7> <8ea1a8a7> 862 +<8ea1a8a8> <8ea1a8a8> 866 +<8ea1a8a9> <8ea1a8aa> 558 +<8ea1a8ab> <8ea1a8b2> 867 +<8ea1a8b3> <8ea1a8b3> 6066 +<8ea1a8b4> <8ea1a8b6> 875 +<8ea1a8b7> <8ea1a8ba> 1014 +<8ea1a8bb> <8ea1a8bb> 6162 +<8ea1a8bc> <8ea1a8be> 1018 +<8ea1a8bf> <8ea1a8c3> 1022 +<8ea1a8c4> <8ea1a8cc> 1029 +<8ea1a8cd> <8ea1a8cd> 6163 +<8ea1a8ce> <8ea1a8ce> 6168 +<8ea1a8cf> <8ea1a8d2> 1039 +<8ea1a8d3> <8ea1a8d3> 6169 +<8ea1a8d4> <8ea1a8d9> 1288 +<8ea1a8da> <8ea1a8da> 6375 +<8ea1a8db> <8ea1a8e2> 1294 +endcidrange + +100 begincidrange +<8ea1a8e3> <8ea1a8e3> 560 +<8ea1a8e4> <8ea1a8e4> 1307 +<8ea1a8e5> <8ea1a8e7> 1312 +<8ea1a8e8> <8ea1a8eb> 1686 +<8ea1a8ec> <8ea1a8ec> 561 +<8ea1a8ed> <8ea1a8f0> 1695 +<8ea1a8f1> <8ea1a8fb> 2086 +<8ea1a8fc> <8ea1a8fe> 2549 +<8ea1a9a1> <8ea1a9a1> 7731 +<8ea1a9a2> <8ea1a9a2> 2552 +<8ea1a9a3> <8ea1a9a3> 7732 +<8ea1a9a4> <8ea1a9a5> 2553 +<8ea1a9a6> <8ea1a9ab> 3041 +<8ea1a9ac> <8ea1a9ae> 3515 +<8ea1a9af> <8ea1a9af> 9056 +<8ea1a9b0> <8ea1a9b0> 9746 +<8ea1a9b1> <8ea1a9b3> 3963 +<8ea1a9b4> <8ea1a9b5> 4352 +<8ea1a9b6> <8ea1a9b6> 4745 +<8ea1a9b7> <8ea1a9b8> 5042 +<8ea1a9b9> <8ea1a9b9> 12045 +<8ea1c2a1> <8ea1c2c1> 562 +<8ea1c4a1> <8ea1c4fe> 595 +<8ea1c5a1> <8ea1c5fe> 689 +<8ea1c6a1> <8ea1c6fe> 783 +<8ea1c7a1> <8ea1c7fe> 877 +<8ea1c8a1> <8ea1c8fe> 971 +<8ea1c9a1> <8ea1c9fe> 1065 +<8ea1caa1> <8ea1cafe> 1159 +<8ea1cba1> <8ea1cbfe> 1253 +<8ea1cca1> <8ea1ccfe> 1347 +<8ea1cda1> <8ea1cdfe> 1441 +<8ea1cea1> <8ea1cefe> 1535 +<8ea1cfa1> <8ea1cffe> 1629 +<8ea1d0a1> <8ea1d0fe> 1723 +<8ea1d1a1> <8ea1d1fe> 1817 +<8ea1d2a1> <8ea1d2fe> 1911 +<8ea1d3a1> <8ea1d3fe> 2005 +<8ea1d4a1> <8ea1d4fe> 2099 +<8ea1d5a1> <8ea1d5fe> 2193 +<8ea1d6a1> <8ea1d6fe> 2287 +<8ea1d7a1> <8ea1d7fe> 2381 +<8ea1d8a1> <8ea1d8fe> 2475 +<8ea1d9a1> <8ea1d9fe> 2569 +<8ea1daa1> <8ea1dafe> 2663 +<8ea1dba1> <8ea1dbfe> 2757 +<8ea1dca1> <8ea1dcfe> 2851 +<8ea1dda1> <8ea1ddfe> 2945 +<8ea1dea1> <8ea1defe> 3039 +<8ea1dfa1> <8ea1dffe> 3133 +<8ea1e0a1> <8ea1e0fe> 3227 +<8ea1e1a1> <8ea1e1fe> 3321 +<8ea1e2a1> <8ea1e2fe> 3415 +<8ea1e3a1> <8ea1e3fe> 3509 +<8ea1e4a1> <8ea1e4fe> 3603 +<8ea1e5a1> <8ea1e5fe> 3697 +<8ea1e6a1> <8ea1e6fe> 3791 +<8ea1e7a1> <8ea1e7fe> 3885 +<8ea1e8a1> <8ea1e8fe> 3979 +<8ea1e9a1> <8ea1e9fe> 4073 +<8ea1eaa1> <8ea1eafe> 4167 +<8ea1eba1> <8ea1ebfe> 4261 +<8ea1eca1> <8ea1ecfe> 4355 +<8ea1eda1> <8ea1edfe> 4449 +<8ea1eea1> <8ea1eefe> 4543 +<8ea1efa1> <8ea1effe> 4637 +<8ea1f0a1> <8ea1f0fe> 4731 +<8ea1f1a1> <8ea1f1fe> 4825 +<8ea1f2a1> <8ea1f2fe> 4919 +<8ea1f3a1> <8ea1f3fe> 5013 +<8ea1f4a1> <8ea1f4fe> 5107 +<8ea1f5a1> <8ea1f5fe> 5201 +<8ea1f6a1> <8ea1f6fe> 5295 +<8ea1f7a1> <8ea1f7fe> 5389 +<8ea1f8a1> <8ea1f8fe> 5483 +<8ea1f9a1> <8ea1f9fe> 5577 +<8ea1faa1> <8ea1fafe> 5671 +<8ea1fba1> <8ea1fbfe> 5765 +<8ea1fca1> <8ea1fcfe> 5859 +<8ea1fda1> <8ea1fdcb> 5953 +<8ea2a1a1> <8ea2a1fe> 5996 +<8ea2a2a1> <8ea2a2fe> 6090 +<8ea2a3a1> <8ea2a3fe> 6184 +<8ea2a4a1> <8ea2a4fe> 6278 +<8ea2a5a1> <8ea2a5fe> 6372 +<8ea2a6a1> <8ea2a6fe> 6466 +<8ea2a7a1> <8ea2a7fe> 6560 +<8ea2a8a1> <8ea2a8fe> 6654 +<8ea2a9a1> <8ea2a9fe> 6748 +<8ea2aaa1> <8ea2aafe> 6842 +<8ea2aba1> <8ea2abfe> 6936 +<8ea2aca1> <8ea2acfe> 7030 +<8ea2ada1> <8ea2adfe> 7124 +<8ea2aea1> <8ea2aefe> 7218 +<8ea2afa1> <8ea2affe> 7312 +<8ea2b0a1> <8ea2b0fe> 7406 +<8ea2b1a1> <8ea2b1fe> 7500 +<8ea2b2a1> <8ea2b2fe> 7594 +<8ea2b3a1> <8ea2b3fe> 7688 +<8ea2b4a1> <8ea2b4fe> 7782 +endcidrange + +100 begincidrange +<8ea2b5a1> <8ea2b5fe> 7876 +<8ea2b6a1> <8ea2b6fe> 7970 +<8ea2b7a1> <8ea2b7fe> 8064 +<8ea2b8a1> <8ea2b8fe> 8158 +<8ea2b9a1> <8ea2b9fe> 8252 +<8ea2baa1> <8ea2bafe> 8346 +<8ea2bba1> <8ea2bbfe> 8440 +<8ea2bca1> <8ea2bcfe> 8534 +<8ea2bda1> <8ea2bdfe> 8628 +<8ea2bea1> <8ea2befe> 8722 +<8ea2bfa1> <8ea2bffe> 8816 +<8ea2c0a1> <8ea2c0fe> 8910 +<8ea2c1a1> <8ea2c1fe> 9004 +<8ea2c2a1> <8ea2c2fe> 9098 +<8ea2c3a1> <8ea2c3fe> 9192 +<8ea2c4a1> <8ea2c4fe> 9286 +<8ea2c5a1> <8ea2c5fe> 9380 +<8ea2c6a1> <8ea2c6fe> 9474 +<8ea2c7a1> <8ea2c7fe> 9568 +<8ea2c8a1> <8ea2c8fe> 9662 +<8ea2c9a1> <8ea2c9fe> 9756 +<8ea2caa1> <8ea2cafe> 9850 +<8ea2cba1> <8ea2cbfe> 9944 +<8ea2cca1> <8ea2ccfe> 10038 +<8ea2cda1> <8ea2cdfe> 10132 +<8ea2cea1> <8ea2cefe> 10226 +<8ea2cfa1> <8ea2cffe> 10320 +<8ea2d0a1> <8ea2d0fe> 10414 +<8ea2d1a1> <8ea2d1fe> 10508 +<8ea2d2a1> <8ea2d2fe> 10602 +<8ea2d3a1> <8ea2d3fe> 10696 +<8ea2d4a1> <8ea2d4fe> 10790 +<8ea2d5a1> <8ea2d5fe> 10884 +<8ea2d6a1> <8ea2d6fe> 10978 +<8ea2d7a1> <8ea2d7fe> 11072 +<8ea2d8a1> <8ea2d8fe> 11166 +<8ea2d9a1> <8ea2d9fe> 11260 +<8ea2daa1> <8ea2dafe> 11354 +<8ea2dba1> <8ea2dbfe> 11448 +<8ea2dca1> <8ea2dcfe> 11542 +<8ea2dda1> <8ea2ddfe> 11636 +<8ea2dea1> <8ea2defe> 11730 +<8ea2dfa1> <8ea2dffe> 11824 +<8ea2e0a1> <8ea2e0fe> 11918 +<8ea2e1a1> <8ea2e1fe> 12012 +<8ea2e2a1> <8ea2e2fe> 12106 +<8ea2e3a1> <8ea2e3fe> 12200 +<8ea2e4a1> <8ea2e4fe> 12294 +<8ea2e5a1> <8ea2e5fe> 12388 +<8ea2e6a1> <8ea2e6fe> 12482 +<8ea2e7a1> <8ea2e7fe> 12576 +<8ea2e8a1> <8ea2e8fe> 12670 +<8ea2e9a1> <8ea2e9fe> 12764 +<8ea2eaa1> <8ea2eafe> 12858 +<8ea2eba1> <8ea2ebfe> 12952 +<8ea2eca1> <8ea2ecfe> 13046 +<8ea2eda1> <8ea2edfe> 13140 +<8ea2eea1> <8ea2eefe> 13234 +<8ea2efa1> <8ea2effe> 13328 +<8ea2f0a1> <8ea2f0fe> 13422 +<8ea2f1a1> <8ea2f1fe> 13516 +<8ea2f2a1> <8ea2f2c4> 13610 + 99 + 13646 + 111 + 124 + 126 + 126 + 130 + 130 + 134 + 134 + 138 + 138 + 142 + 142 + 146 + 146 + 150 + 150 + 154 + 154 + 158 + 158 + 193 + 13647 + 229 + 287 + 333 + 427 + 503 + 506 + 595 + 536 + 596 + 539 + 602 + 540 + 603 + 541 +endcidrange + +100 begincidrange + 607 + 5998 + 608 + 610 + 544 + 611 + 5999 + 545 + 612 + 546 + 6000 + 547 + 614 + 633 + 6005 + 634 + 548 + 636 + 549 + 642 + 6006 + 646 + 550 + 648 + 652 + 551 + 654 + 554 + 6007 + 720 + 725 + 556 + 726 + 557 + 730 + 6026 + 737 + 6028 + 741 + 6029 + 746 + 854 + 855 + 862 + 866 + 558 + 867 + 6066 + 875 + 1014 + 6162 + 1018 + 1022 + 1029 + 6163 + 6168 + 1039 + 6169 + 1288 + 6375 + 1294 + 560 + 1307 + 1312 + 1686 + 561 + 1695 + 2086 + 2549 + 7731 + 2552 + 7732 + 2553 + 3041 + 3515 + 9056 + 9746 + 3963 + 4352 + 4745 + 5042 + 12045 + 562 + 595 + 689 + 783 + 877 + 971 + 1065 + 1159 + 1253 + 1347 + 1441 + 1535 + 1629 + 1723 + 1817 + 1911 + 2005 + 2099 +endcidrange + +41 begincidrange + 2193 + 2287 + 2381 + 2475 + 2569 + 2663 + 2757 + 2851 + 2945 + 3039 + 3133 + 3227 + 3321 + 3415 + 3509 + 3603 + 3697 + 3791 + 3885 + 3979 + 4073 + 4167 + 4261 + 4355 + 4449 + 4543 + 4637 + 4731 + 4825 + 4919 + 5013 + 5107 + 5201 + 5295 + 5389 + 5483 + 5577 + 5671 + 5765 + 5859 + 5953 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/ETen-B5-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETen-B5-H new file mode 100644 index 00000000000..fedf9e6e7af --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETen-B5-H @@ -0,0 +1,343 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (ETen-B5-H) +%%Title: (ETen-B5-H Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /ETen-B5-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 200 def +/XUID [1 10 25390] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 13648 +endnotdefrange + +100 begincidrange +<20> <7e> 13648 + 99 + 13743 + 128 + 162 + 248 + 247 + 249 + 256 + 319 + 413 + 476 + 503 + 595 + 658 + 752 + 815 + 909 + 972 + 1066 + 1129 + 1223 + 1286 + 1380 + 1443 + 1537 + 1600 + 1694 + 1757 + 1851 + 1914 + 2431 + 2007 + 2070 + 2164 + 2227 + 2321 + 2384 + 2432 + 2479 + 2542 + 2636 + 2699 + 2793 + 2856 + 2950 + 3013 + 3107 + 3170 + 3264 + 3327 + 3421 + 3484 + 3578 + 3641 + 3735 + 3798 + 3892 + 3955 + 4049 + 4112 + 4206 + 4269 + 4309 + 4364 + 4427 + 4521 + 4584 + 4678 + 4308 + 4696 + 4740 + 4834 + 4897 + 4991 + 5054 + 5148 + 5211 + 5222 + 5306 + 5369 + 5221 + 5411 + 5462 + 5496 + 5526 + 5551 + 5550 + 5552 + 5620 + 5495 + 5642 + 5682 + 5776 + 5839 + 5933 + 506 + 537 + 13747 + 6036 +endcidrange + +100 begincidrange + 13754 + 13785 + 13848 + 13942 + 14005 + 5996 + 628 + 6006 + 6040 + 6059 + 6039 + 6088 + 6135 + 6153 + 6216 + 6134 + 6302 + 6309 + 6372 + 6466 + 6529 + 6623 + 6686 + 6780 + 6843 + 6937 + 7000 + 7094 + 7157 + 7251 + 7314 + 7408 + 7471 + 7565 + 7628 + 7722 + 7785 + 7879 + 7942 + 8036 + 8099 + 8788 + 8143 + 8193 + 8889 + 8251 + 8255 + 8349 + 8412 + 8506 + 8569 + 8663 + 8726 + 8142 + 8789 + 8820 + 8883 + 8890 + 8978 + 9041 + 9135 + 9198 + 9089 + 9289 + 9291 + 9354 + 9448 + 9511 + 9605 + 9668 + 9762 + 9825 + 9919 + 9982 + 10076 + 10139 + 10233 + 10296 + 10390 + 10453 + 10547 + 10610 + 10704 + 10767 + 10861 + 10924 + 10927 + 11019 + 11074 + 11083 + 11177 + 11240 + 11334 + 11362 + 11398 + 10926 + 11478 + 11491 + 11554 + 11073 +endcidrange + +54 begincidrange + 11615 + 11647 + 11710 + 11720 + 11805 + 11868 + 12308 + 11942 + 11961 + 12024 + 12118 + 11719 + 12140 + 12180 + 11361 + 12222 + 12273 + 12309 + 12640 + 12317 + 12336 + 12430 + 12783 + 12470 + 12492 + 12527 + 12587 + 12641 + 12651 + 12745 + 12784 + 12809 + 12526 + 12829 + 12901 + 12903 + 12966 + 13060 + 12900 + 13095 + 13122 + 13216 + 13279 + 13373 + 13436 + 13530 + 13586 + 13594 + 13585 + 13629 + 13641 + 13630 + 13642 + 14056 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/ETen-B5-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETen-B5-V new file mode 100644 index 00000000000..569f4460cdb --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETen-B5-V @@ -0,0 +1,91 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (ETen-B5-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (ETen-B5-H) +%%BeginResource: CMap (ETen-B5-V) +%%Title: (ETen-B5-V Adobe CNS1 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/ETen-B5-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /ETen-B5-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 920 def +/XUID [1 10 25391] def + +/WMode 1 def + +13 begincidrange + 13646 + 13743 + 13745 + 130 + 134 + 138 + 142 + 146 + 150 + 154 + 158 + 13647 + 14097 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/ETenms-B5-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETenms-B5-H new file mode 100644 index 00000000000..45b291e9d7f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETenms-B5-H @@ -0,0 +1,79 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (ETen-B5-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (ETen-B5-H) +%%BeginResource: CMap (ETenms-B5-H) +%%Title: (ETenms-B5-H Adobe CNS1 0) +%%Version: 10.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/ETen-B5-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /ETenms-B5-H def +/CMapVersion 10.002 def +/CMapType 1 def + +/XUID [1 10 25596] def + +/WMode 0 def + +1 begincidrange +<20> <7e> 1 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/ETenms-B5-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETenms-B5-V new file mode 100644 index 00000000000..8e686854754 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/ETenms-B5-V @@ -0,0 +1,99 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (ETenms-B5-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (ETenms-B5-H) +%%BeginResource: CMap (ETenms-B5-V) +%%Title: (ETenms-B5-V Adobe CNS1 0) +%%Version: 10.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/ETenms-B5-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 0 def +end def + +/CMapName /ETenms-B5-V def +/CMapVersion 10.002 def +/CMapType 1 def + +/XUID [1 10 25597] def + +/WMode 1 def + +6 begincidchar + 13646 + 109 + 312 + 122 + 13743 + 13745 +endcidchar + +12 begincidrange + 130 + 134 + 138 + 142 + 146 + 150 + 154 + 158 + 130 + 134 + 138 + 14097 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/EUC-H new file mode 100644 index 00000000000..49beb22a689 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/EUC-H @@ -0,0 +1,207 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (EUC-H) +%%Title: (EUC-H Adobe Japan1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /EUC-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 680 def +/XUID [1 10 25329] def + +/WMode 0 def + +3 begincodespacerange + <00> <80> + <8EA0> <8EDF> + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 231 +endnotdefrange + +100 begincidrange +<20> <7e> 231 +<8ea0> <8edf> 326 + 633 + 727 + 741 + 749 + 756 + 771 + 779 + 780 + 790 + 816 + 842 + 925 + 1011 + 1035 + 1059 + 1092 + 7479 + 7481 + 7491 + 7495 + 7503 + 7499 + 7507 + 7523 + 7515 + 7531 + 7539 + 7480 + 7482 + 7494 + 7498 + 7506 + 7502 + 7514 + 7530 + 7522 + 7538 + 7554 + 7511 + 7526 + 7519 + 7534 + 7542 + 7508 + 7527 + 7516 + 7535 + 7545 + 1125 + 1219 + 1313 + 1407 + 1501 + 1595 + 1689 + 1783 + 1877 + 1971 + 2065 + 2159 + 2253 + 2347 + 2441 + 2535 + 2629 + 2723 + 2817 + 2911 + 3005 + 3099 + 3193 + 3287 + 3381 + 3475 + 3569 + 3663 + 3757 + 3851 + 3945 + 4039 + 4090 + 4184 + 4278 + 4372 + 4466 + 4560 + 4654 + 4748 + 4842 + 4936 + 5030 + 5124 + 5218 + 5312 + 5406 + 5500 + 5594 + 5688 +endcidrange + +20 begincidrange + 5782 + 5876 + 5970 + 6064 + 6158 + 6252 + 6346 + 6440 + 6534 + 6628 + 6722 + 6816 + 6910 + 7004 + 7098 + 7192 + 7286 + 7380 + 7474 + 8284 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/EUC-V new file mode 100644 index 00000000000..bc8e34779e4 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/EUC-V @@ -0,0 +1,105 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (EUC-H) +%%BeginResource: CMap (EUC-V) +%%Title: (EUC-V Adobe Japan1 1) +%%Version: 12.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /EUC-V def +/CMapVersion 12.002 def +/CMapType 1 def + +/UIDOffset 800 def +/XUID [1 10 25330] def + +/WMode 1 def + +27 begincidrange + 7887 + 7889 + 7891 + 7894 + 7899 + 7917 + 7918 + 7919 + 7920 + 7921 + 7922 + 7923 + 7924 + 7925 + 7926 + 7927 + 7928 + 7929 + 7930 + 7931 + 7932 + 7933 + 7934 + 7935 + 7936 + 7937 + 7938 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Ext-RKSJ-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/Ext-RKSJ-H new file mode 100644 index 00000000000..6fc949a7ce6 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Ext-RKSJ-H @@ -0,0 +1,768 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Ext-RKSJ-H) +%%Title: (Ext-RKSJ-H Adobe Japan1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /Ext-RKSJ-H def +/CMapVersion 11.003 def +/CMapType 1 def + +/UIDOffset 70 def +/XUID [1 10 25332] def + +/WMode 0 def + +4 begincodespacerange + <00> <80> + <8140> <9FFC> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 231 +endnotdefrange + +100 begincidrange +<20> <7e> 231 +<8140> <817e> 633 +<8180> <8188> 696 +<8189> <8189> 7478 +<818a> <81ac> 706 +<824f> <8258> 780 +<8260> <8279> 790 +<8281> <829a> 816 +<829f> <82f1> 842 +<8340> <837e> 925 +<8380> <8396> 988 +<839f> <83b6> 1011 +<83bf> <83d6> 1035 +<8440> <8460> 1059 +<8470> <847e> 1092 +<8480> <8491> 1107 +<8540> <857e> 232 +<8580> <8580> 390 +<8581> <859e> 296 +<859f> <85dd> 327 +<85de> <85fc> 391 +<8640> <867e> 422 +<8680> <8691> 485 +<8692> <8692> 295 +<8693> <869e> 503 +<86a2> <86ed> 7479 +<8740> <875d> 7555 +<875f> <8775> 7585 +<877e> <877e> 8323 +<8780> <878f> 7608 +<8790> <8790> 762 +<8791> <8791> 761 +<8792> <8792> 769 +<8793> <8799> 7624 +<879a> <879a> 768 +<879b> <879c> 7631 +<889f> <889f> 1125 +<88a0> <88a0> 7633 +<88a1> <88b0> 1127 +<88b1> <88b1> 7330 +<88b2> <88b8> 1144 +<88b9> <88b9> 7634 +<88ba> <88eb> 1152 +<88ec> <88ec> 7635 +<88ed> <88f0> 1203 +<88f1> <88f1> 7636 +<88f2> <88f9> 1208 +<88fa> <88fa> 7637 +<88fb> <88fc> 1217 +<8940> <8948> 1219 +<8949> <8949> 7638 +<894a> <8953> 1229 +<8954> <8954> 7639 +<8955> <8957> 1240 +<8958> <8958> 7640 +<8959> <895a> 1244 +<895b> <895c> 7641 +<895d> <8960> 1248 +<8961> <8961> 7643 +<8962> <897e> 1253 +<8980> <898a> 1282 +<898b> <898b> 7644 +<898c> <89a5> 1294 +<89a6> <89a6> 7645 +<89a7> <89a7> 7369 +<89a8> <89a8> 7646 +<89a9> <89dd> 1323 +<89de> <89de> 7647 +<89df> <89f7> 1377 +<89f8> <89f8> 7648 +<89f9> <89fa> 1403 +<89fb> <89fb> 7649 +<89fc> <89fc> 1406 +<8a40> <8a40> 1407 +<8a41> <8a41> 7650 +<8a42> <8a60> 1409 +<8a61> <8a61> 6497 +<8a62> <8a67> 1441 +<8a68> <8a68> 5023 +<8a69> <8a7e> 1448 +<8a80> <8a84> 1470 +<8a85> <8a85> 7651 +<8a86> <8a8a> 1476 +<8a8b> <8a8b> 7652 +<8a8c> <8a92> 1482 +<8a93> <8a93> 7653 +<8a94> <8a95> 1490 +<8a96> <8a96> 5937 +<8a97> <8a99> 1493 +<8a9a> <8a9a> 7654 +<8a9b> <8abf> 1497 +<8ac0> <8ac0> 7655 +<8ac1> <8ac1> 5490 +<8ac2> <8aca> 1536 +<8acb> <8acb> 7656 +<8acc> <8acf> 1546 +<8ad0> <8ad0> 6688 +<8ad1> <8ae2> 1551 +<8ae3> <8ae3> 7657 +<8ae4> <8afc> 1570 +endcidrange + +100 begincidrange +<8b40> <8b49> 1595 +<8b4a> <8b4a> 7658 +<8b4b> <8b5e> 1606 +<8b5f> <8b5f> 7659 +<8b60> <8b7e> 1627 +<8b80> <8b9f> 1658 +<8ba0> <8ba0> 7660 +<8ba1> <8ba7> 1691 +<8ba8> <8ba8> 7661 +<8ba9> <8bc3> 1699 +<8bc4> <8bc4> 7474 +<8bc5> <8bcc> 1727 +<8bcd> <8bcd> 7662 +<8bce> <8bea> 1736 +<8beb> <8beb> 7663 +<8bec> <8bf1> 1766 +<8bf2> <8bf2> 7664 +<8bf3> <8bf8> 1773 +<8bf9> <8bf9> 7665 +<8bfa> <8bfa> 1780 +<8bfb> <8bfb> 7666 +<8bfc> <8bfc> 1782 +<8c40> <8c42> 1783 +<8c43> <8c43> 7667 +<8c44> <8c55> 1787 +<8c56> <8c56> 7668 +<8c57> <8c63> 1806 +<8c64> <8c64> 7669 +<8c65> <8c6c> 1820 +<8c6d> <8c6d> 7670 +<8c6e> <8c70> 1829 +<8c71> <8c71> 7671 +<8c72> <8c73> 1833 +<8c74> <8c74> 7672 +<8c75> <8c79> 1836 +<8c7a> <8c7a> 7181 +<8c7b> <8c7e> 1842 +<8c80> <8c83> 1846 +<8c84> <8c84> 7673 +<8c85> <8c90> 1851 +<8c91> <8c91> 7674 +<8c92> <8c98> 1864 +<8c99> <8c99> 7675 +<8c9a> <8c9d> 1872 +<8c9e> <8c9e> 7676 +<8c9f> <8cb1> 1877 +<8cb2> <8cb2> 7677 +<8cb3> <8cbe> 1897 +<8cbf> <8cbf> 7678 +<8cc0> <8cfc> 1910 +<8d40> <8d49> 1971 +<8d4a> <8d4a> 7679 +<8d4b> <8d55> 1982 +<8d56> <8d56> 7680 +<8d57> <8d60> 1994 +<8d61> <8d61> 7681 +<8d62> <8d7a> 2005 +<8d7b> <8d7b> 5853 +<8d7c> <8d7e> 2031 +<8d80> <8d8c> 2034 +<8d8d> <8d8d> 7682 +<8d8e> <8d93> 2048 +<8d94> <8d94> 7683 +<8d95> <8d98> 2055 +<8d99> <8d99> 7684 +<8d9a> <8dd0> 2060 +<8dd1> <8dd1> 7685 +<8dd2> <8de4> 2116 +<8de5> <8de5> 7686 +<8de6> <8df1> 2136 +<8df2> <8df2> 7687 +<8df3> <8dfc> 2149 +<8e40> <8e45> 2159 +<8e46> <8e46> 7688 +<8e47> <8e48> 2166 +<8e49> <8e49> 7689 +<8e4a> <8e4a> 2169 +<8e4b> <8e4b> 7690 +<8e4c> <8e57> 2171 +<8e58> <8e58> 7691 +<8e59> <8e7e> 2184 +<8e80> <8eb5> 2222 +<8eb6> <8eb6> 7692 +<8eb7> <8ec5> 2277 +<8ec6> <8ec6> 7693 +<8ec7> <8ec7> 6441 +<8ec8> <8ed4> 2294 +<8ed5> <8ed5> 7694 +<8ed6> <8eda> 2308 +<8edb> <8edc> 7695 +<8edd> <8efc> 2315 +<8f40> <8f49> 2347 +<8f4a> <8f4a> 7697 +<8f4b> <8f54> 2358 +<8f55> <8f55> 7698 +<8f56> <8f7e> 2369 +<8f80> <8f8b> 2410 +<8f8c> <8f8d> 7699 +<8f8e> <8f91> 2424 +<8f92> <8f93> 7701 +endcidrange + +100 begincidrange +<8f94> <8fa2> 2430 +<8fa3> <8fa3> 7703 +<8fa4> <8fb0> 2446 +<8fb1> <8fb1> 7704 +<8fb2> <8fbc> 2460 +<8fbd> <8fbd> 7705 +<8fbe> <8fd2> 2472 +<8fd3> <8fd3> 7706 +<8fd4> <8fdc> 2494 +<8fdd> <8fdd> 7707 +<8fde> <8fe1> 2504 +<8fe2> <8fe2> 7708 +<8fe3> <8ffc> 2509 +<9040> <9048> 2535 +<9049> <9049> 7709 +<904a> <9077> 2545 +<9078> <9078> 7710 +<9079> <907e> 2592 +<9080> <9080> 7711 +<9081> <9088> 2599 +<9089> <9089> 7712 +<908a> <909f> 2608 +<90a0> <90a0> 7713 +<90a1> <90bf> 2631 +<90c0> <90c0> 7714 +<90c1> <90e3> 2663 +<90e4> <90e4> 7715 +<90e5> <90ee> 2699 +<90ef> <90f0> 7716 +<90f1> <90f6> 2711 +<90f7> <90f8> 7718 +<90f9> <90fc> 2719 +<9140> <9145> 2723 +<9146> <9146> 7720 +<9147> <9147> 6766 +<9148> <9157> 2731 +<9158> <9158> 7721 +<9159> <916a> 2748 +<916b> <916b> 7722 +<916c> <916d> 2767 +<916e> <916e> 7723 +<916f> <917d> 2770 +<917e> <917e> 7724 +<9180> <9188> 2786 +<9189> <9189> 7725 +<918a> <91ba> 2796 +<91bb> <91bb> 7726 +<91bc> <91ca> 2846 +<91cb> <91cb> 7727 +<91cc> <91d9> 2862 +<91da> <91da> 7728 +<91db> <91e0> 2877 +<91e1> <91e1> 7729 +<91e2> <91ec> 2884 +<91ed> <91ed> 7730 +<91ee> <91f2> 2896 +<91f3> <91f4> 7731 +<91f5> <91fa> 2903 +<91fb> <91fb> 7733 +<91fc> <91fc> 2910 +<9240> <9245> 2911 +<9246> <9246> 7734 +<9247> <9247> 2918 +<9248> <9249> 7735 +<924a> <924b> 2921 +<924c> <924d> 7737 +<924e> <925b> 2925 +<925c> <925c> 7739 +<925d> <927e> 2940 +<9280> <928f> 2974 +<9290> <9290> 7740 +<9291> <9294> 2991 +<9295> <9295> 7741 +<9296> <929b> 2996 +<929c> <929c> 7742 +<929d> <92ba> 3003 +<92bb> <92bb> 7743 +<92bc> <92c5> 3034 +<92c6> <92c6> 7744 +<92c7> <92c7> 3045 +<92c8> <92c8> 7745 +<92c9> <92ca> 3047 +<92cb> <92cb> 7746 +<92cc> <92cc> 3050 +<92cd> <92cd> 7747 +<92ce> <92d8> 3052 +<92d9> <92d9> 4533 +<92da> <92fc> 3064 +<9340> <9340> 3099 +<9341> <9341> 7748 +<9342> <9345> 3101 +<9346> <9346> 7749 +<9347> <934c> 3106 +<934d> <934d> 7750 +<934e> <9354> 3113 +<9355> <9355> 7751 +<9356> <935d> 3121 +<935e> <935e> 7752 +<935f> <9366> 3130 +<9367> <9367> 7753 +endcidrange + +100 begincidrange +<9368> <9369> 3139 +<936a> <936a> 7754 +<936b> <936f> 3142 +<9370> <9371> 7755 +<9372> <9375> 3149 +<9376> <9376> 5855 +<9377> <937e> 3154 +<9380> <9383> 3162 +<9384> <9384> 7757 +<9385> <938d> 3167 +<938e> <938e> 5200 +<938f> <9392> 3177 +<9393> <9393> 5430 +<9394> <9397> 3182 +<9398> <9398> 7758 +<9399> <93bb> 3187 +<93bc> <93bc> 7759 +<93bd> <93bf> 3223 +<93c0> <93c0> 7760 +<93c1> <93d1> 3227 +<93d2> <93d3> 7761 +<93d4> <93d8> 3246 +<93d9> <93da> 7763 +<93db> <93de> 3253 +<93df> <93df> 7765 +<93e0> <93e3> 3258 +<93e4> <93e5> 7766 +<93e6> <93e7> 3264 +<93e8> <93e8> 7768 +<93e9> <93f3> 3267 +<93f4> <93f4> 6893 +<93f5> <93fc> 3279 +<9440> <9447> 3287 +<9448> <9448> 7769 +<9449> <9457> 3296 +<9458> <9458> 7770 +<9459> <9475> 3312 +<9476> <9476> 7771 +<9477> <947e> 3342 +<9480> <9486> 3350 +<9487> <9487> 7772 +<9488> <9488> 6537 +<9489> <9489> 7773 +<948a> <948c> 3360 +<948d> <948d> 7774 +<948e> <94a1> 3364 +<94a2> <94a2> 7775 +<94a3> <94ab> 3385 +<94ac> <94ac> 7776 +<94ad> <94ad> 3395 +<94ae> <94ae> 7777 +<94af> <94d1> 3397 +<94d2> <94d2> 7778 +<94d3> <94df> 3433 +<94e0> <94e0> 7779 +<94e1> <94f2> 3447 +<94f3> <94f3> 7780 +<94f4> <94fc> 3466 +<9540> <9540> 3475 +<9541> <9542> 7781 +<9543> <954d> 3478 +<954e> <954e> 7783 +<954f> <954f> 5179 +<9550> <9550> 3491 +<9551> <9551> 7784 +<9552> <9553> 3493 +<9554> <9554> 7785 +<9555> <955e> 3496 +<955f> <955f> 7786 +<9560> <956c> 3507 +<956d> <956d> 7787 +<956e> <956f> 3521 +<9570> <9570> 7788 +<9571> <957e> 3524 +<9580> <95c0> 3538 +<95c1> <95c1> 7789 +<95c2> <95ca> 3604 +<95cb> <95cb> 7790 +<95cc> <95d7> 3614 +<95d8> <95d8> 7791 +<95d9> <95f6> 3627 +<95f7> <95f7> 7792 +<95f8> <95fc> 3658 +<9640> <9640> 3663 +<9641> <9641> 7793 +<9642> <9647> 3665 +<9648> <9648> 7794 +<9649> <9669> 3672 +<966a> <966a> 7795 +<966b> <967e> 3706 +<9680> <9689> 3726 +<968a> <968a> 7475 +<968b> <968f> 3737 +<9690> <9690> 7796 +<9691> <9698> 3743 +<9699> <9699> 4143 +<969a> <96ca> 3752 +<96cb> <96cb> 7797 +<96cc> <96d6> 3802 +<96d7> <96d7> 7798 +endcidrange + +100 begincidrange +<96d8> <96dc> 3814 +<96dd> <96dd> 7799 +<96de> <96df> 3820 +<96e0> <96e0> 7800 +<96e1> <96f6> 3823 +<96f7> <96f7> 6453 +<96f8> <96f8> 7801 +<96f9> <96f9> 3847 +<96fa> <96fa> 7802 +<96fb> <96fb> 3849 +<96fc> <96fc> 7803 +<9740> <9750> 3851 +<9751> <9751> 7804 +<9752> <976e> 3869 +<976f> <976f> 7805 +<9770> <9772> 3899 +<9773> <9773> 7806 +<9774> <9778> 3903 +<9779> <9779> 7476 +<977a> <977e> 3909 +<9780> <9788> 3914 +<9789> <9789> 7807 +<978a> <97c8> 3924 +<97c9> <97c9> 7808 +<97ca> <97f7> 3988 +<97f8> <97f9> 7809 +<97fa> <97fc> 4036 +<9840> <9840> 7811 +<9841> <984f> 4040 +<9850> <9850> 7812 +<9851> <9854> 4056 +<9855> <9855> 6007 +<9856> <9857> 4061 +<9858> <9858> 7813 +<9859> <9872> 4064 +<989f> <98d3> 4090 +<98d4> <98d4> 3751 +<98d5> <98fc> 4144 +<9940> <995b> 4184 +<995c> <995c> 7814 +<995d> <9965> 4213 +<9966> <9966> 7815 +<9967> <9969> 4223 +<996a> <996a> 7816 +<996b> <996b> 4227 +<996c> <996c> 7817 +<996d> <997e> 4229 +<9980> <99fc> 4247 +<9a40> <9a4e> 4372 +<9a4f> <9a4f> 7818 +<9a50> <9a58> 4388 +<9a59> <9a59> 7819 +<9a5a> <9a6e> 4398 +<9a6f> <9a6f> 7820 +<9a70> <9a7c> 4420 +<9a7d> <9a7d> 7821 +<9a7e> <9a7e> 4434 +<9a80> <9a8a> 4435 +<9a8b> <9a8b> 7822 +<9a8c> <9ac1> 4447 +<9ac2> <9ac2> 7823 +<9ac3> <9ae1> 4502 +<9ae2> <9ae2> 3063 +<9ae3> <9afc> 4534 +<9b40> <9b5b> 4560 +<9b5c> <9b5c> 7824 +<9b5d> <9b7e> 4589 +<9b80> <9b82> 4623 +<9b83> <9b83> 7825 +<9b84> <9b9f> 4627 +<9ba0> <9ba0> 7826 +<9ba1> <9bef> 4656 +<9bf0> <9bf0> 7827 +<9bf1> <9bfc> 4736 +<9c40> <9c7e> 4748 +<9c80> <9ca1> 4811 +<9ca2> <9ca2> 7828 +<9ca3> <9cfc> 4846 +<9d40> <9d7e> 4936 +<9d80> <9d80> 7829 +<9d81> <9d8b> 5000 +<9d8c> <9d8c> 7830 +<9d8d> <9d97> 5012 +<9d98> <9d98> 1447 +<9d99> <9db6> 5024 +<9db7> <9db7> 7831 +<9db8> <9dca> 5055 +<9dcb> <9dcb> 7832 +<9dcc> <9dfc> 5075 +<9e40> <9e63> 5124 +<9e64> <9e64> 7833 +<9e65> <9e68> 5161 +<9e69> <9e69> 7834 +<9e6a> <9e76> 5166 +<9e77> <9e77> 3490 +<9e78> <9e7e> 5180 +<9e80> <9e8a> 5187 +<9e8b> <9e8b> 7835 +<9e8c> <9e8c> 5199 +<9e8d> <9e8d> 3176 +endcidrange + +100 begincidrange +<9e8e> <9e93> 5201 +<9e94> <9e94> 7836 +<9e95> <9efc> 5208 +<9f40> <9f7e> 5312 +<9f80> <9fb6> 5375 +<9fb7> <9fb7> 3181 +<9fb8> <9fcd> 5431 +<9fce> <9fce> 7837 +<9fcf> <9ff2> 5454 +<9ff3> <9ff3> 1535 +<9ff4> <9ffc> 5491 + 326 + 5500 + 5563 + 7838 + 5583 + 7839 + 5600 + 7840 + 5657 + 7477 + 5680 + 5688 + 7841 + 5699 + 7842 + 5705 + 5751 + 7844 + 5793 + 2030 + 5854 + 3153 + 5856 + 7845 + 5861 + 5876 + 7846 + 5918 + 7847 + 5928 + 1492 + 5938 + 5939 + 7848 + 5995 + 4060 + 6008 + 7849 + 6038 + 7850 + 6048 + 6064 + 7851 + 6089 + 7852 + 6091 + 7853 + 6102 + 6127 + 7854 + 6196 + 6252 + 6315 + 7855 + 6320 + 7856 + 6325 + 7857 + 6334 + 7858 + 6366 + 7859 + 6373 + 7860 + 6430 + 6440 + 2293 + 6442 + 3845 + 6454 + 7861 + 6468 + 1440 + 6498 + 6503 + 3358 + 6538 + 7862 + 6541 + 7863 + 6563 + 7864 + 6613 + 6628 + 7865 + 6646 + 1550 + 6689 + 6691 +endcidrange + +65 begincidrange + 7866 + 6698 + 7867 + 6714 + 2730 + 6767 + 7868 + 6795 + 7869 + 6806 + 6816 + 7870 + 6862 + 6879 + 7871 + 6892 + 7872 + 6894 + 7873 + 6919 + 7874 + 6939 + 7875 + 6965 + 7004 + 7067 + 7876 + 7073 + 7877 + 7117 + 7878 + 7135 + 7879 + 7147 + 7880 + 7153 + 1841 + 7881 + 7183 + 7192 + 7255 + 7882 + 7299 + 7883 + 7314 + 1143 + 7884 + 7332 + 1321 + 7370 + 7380 + 7885 + 7429 + 7443 + 7886 + 7473 + 8359 + 8422 + 1993 + 8474 + 8546 + 8609 + 8092 + 751 + 8005 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Ext-RKSJ-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/Ext-RKSJ-V new file mode 100644 index 00000000000..55984d7417f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Ext-RKSJ-V @@ -0,0 +1,117 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (Ext-RKSJ-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (Ext-RKSJ-H) +%%BeginResource: CMap (Ext-RKSJ-V) +%%Title: (Ext-RKSJ-V Adobe Japan1 2) +%%Version: 12.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/Ext-RKSJ-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 2 def +end def + +/CMapName /Ext-RKSJ-V def +/CMapVersion 12.002 def +/CMapType 1 def + +/UIDOffset 810 def +/XUID [1 10 25333] def + +/WMode 1 def + +39 begincidrange +<8141> <8142> 7887 +<8143> <8143> 8268 +<8144> <8144> 8274 +<814a> <814a> 8272 +<814b> <814b> 8271 +<815b> <815d> 7891 +<8160> <8164> 7894 +<8165> <8165> 8281 +<8166> <8166> 8276 +<8167> <8167> 8279 +<8168> <8168> 8278 +<8169> <817a> 7899 +<818b> <818b> 8269 +<818c> <818c> 8273 +<818d> <818d> 8283 +<81ac> <81ac> 8270 +<829f> <829f> 7918 +<82a1> <82a1> 7919 +<82a3> <82a3> 7920 +<82a5> <82a5> 7921 +<82a7> <82a7> 7922 +<82c1> <82c1> 7923 +<82e1> <82e1> 7924 +<82e3> <82e3> 7925 +<82e5> <82e5> 7926 +<82ec> <82ec> 7927 +<8340> <8340> 7928 +<8342> <8342> 7929 +<8344> <8344> 7930 +<8346> <8346> 7931 +<8348> <8348> 7932 +<8362> <8362> 7933 +<8383> <8383> 7934 +<8385> <8385> 7935 +<8387> <8387> 7936 +<838e> <838e> 7937 +<8395> <8396> 7938 +<875f> <876e> 7940 +<8780> <8781> 7956 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GB-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/GB-EUC-H new file mode 100644 index 00000000000..1663cd4f406 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GB-EUC-H @@ -0,0 +1,173 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (GB-EUC-H) +%%Title: (GB-EUC-H Adobe GB1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 0 def +end def + +/CMapName /GB-EUC-H def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 100 def +/XUID [1 10 25360] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 7716 +endnotdefrange + +90 begincidrange +<20> <20> 7716 +<21> <7e> 814 + 96 + 190 + 240 + 250 + 262 + 356 + 439 + 525 + 549 + 602 + 635 + 668 + 700 + 738 + 814 + 908 + 940 + 1034 + 1128 + 1222 + 1316 + 1410 + 1504 + 1598 + 1692 + 1786 + 1880 + 1974 + 2068 + 2162 + 2256 + 2350 + 2444 + 2538 + 2632 + 2726 + 2820 + 2914 + 3008 + 3102 + 3196 + 3290 + 3384 + 3478 + 3572 + 3666 + 3760 + 3854 + 3948 + 4042 + 4136 + 4230 + 4324 + 4418 + 4512 + 4606 + 4695 + 4789 + 4883 + 4977 + 5071 + 5165 + 5259 + 5353 + 5447 + 5541 + 5635 + 5729 + 5823 + 5917 + 6011 + 6105 + 6199 + 6293 + 6387 + 6481 + 6575 + 6669 + 6763 + 6857 + 6951 + 7045 + 7139 + 7233 + 7327 + 7421 + 7515 + 7609 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GB-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/GB-EUC-V new file mode 100644 index 00000000000..66e67bf6673 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GB-EUC-V @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (GB-EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (GB-EUC-H) +%%BeginResource: CMap (GB-EUC-V) +%%Title: (GB-EUC-V Adobe GB1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/GB-EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 0 def +end def + +/CMapName /GB-EUC-V def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 310 def +/XUID [1 10 25361] def + +/WMode 1 def + +20 begincidrange + 575 + 574 + 598 + 7704 + 599 + 582 + 7706 + 578 + 580 + 573 + 7707 + 576 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7711 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK-EUC-H new file mode 100644 index 00000000000..322002ca15a --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK-EUC-H @@ -0,0 +1,4273 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (GBK-EUC-H) +%%Title: (GBK-EUC-H Adobe GB1 2) +%%Version: 11.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 2 def +end def + +/CMapName /GBK-EUC-H def +/CMapVersion 11.003 def +/CMapType 1 def + +/XUID [1 10 25377] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + <8140> +endcodespacerange + +1 beginnotdefrange +<00> <1f> 7716 +endnotdefrange + +100 begincidrange +<20> <20> 7716 +<21> <7e> 814 +<8140> <8178> 10072 +<8179> <8179> 8281 +<817a> <817e> 10129 +<8180> <8185> 10134 +<8186> <8186> 8689 +<8187> <81ec> 10140 +<81ed> <81ed> 8178 +<81ee> <81f5> 10242 +<81f6> <81f6> 8285 +<81f7> <81fe> 10250 +<8240> <8252> 10258 +<8253> <8253> 9884 +<8254> <8261> 10277 +<8262> <8262> 8629 +<8263> <8273> 10291 +<8274> <8274> 8908 +<8275> <8279> 10308 +<827a> <827a> 8214 +<827b> <827c> 10313 +<827d> <827d> 7778 +<827e> <827e> 10315 +<8280> <8280> 7968 +<8281> <8282> 10316 +<8283> <8283> 8319 +<8284> <828f> 10318 +<8290> <8290> 8284 +<8291> <82a4> 10330 +<82a5> <82a5> 8596 +<82a6> <82c7> 10350 +<82c8> <82c8> 7781 +<82c9> <82c9> 8833 +<82ca> <82e0> 10384 +<82e1> <82e1> 8909 +<82e2> <82e2> 10407 +<82e3> <82e3> 8458 +<82e4> <82e4> 7742 +<82e5> <82ec> 10408 +<82ed> <82ed> 9855 +<82ee> <82f1> 10416 +<82f2> <82f2> 8750 +<82f3> <82f6> 10420 +<82f7> <82f7> 7830 +<82f8> <82f8> 8907 +<82f9> <82f9> 8812 +<82fa> <82fa> 10424 +<82fb> <82fb> 8471 +<82fc> <82fe> 10425 +<8340> <8340> 10428 +<8341> <8341> 8424 +<8342> <8344> 10429 +<8345> <8345> 8916 +<8346> <8347> 10432 +<8348> <8348> 8121 +<8349> <834b> 10434 +<834c> <834c> 8920 +<834d> <8352> 10437 +<8353> <8353> 8415 +<8354> <8356> 10443 +<8357> <8357> 8386 +<8358> <835d> 10446 +<835e> <835e> 8597 +<835f> <8364> 10452 +<8365> <8365> 8108 +<8366> <8366> 8915 +<8367> <8371> 10458 +<8372> <8372> 8065 +<8373> <8377> 10469 +<8378> <8378> 8720 +<8379> <8379> 10474 +<837a> <837a> 8911 +<837b> <837b> 10475 +<837c> <837c> 8723 +<837d> <837d> 10476 +<837e> <837e> 8164 +<8380> <8380> 8080 +<8381> <8385> 10477 +<8386> <8386> 8918 +<8387> <8388> 10482 +<8389> <8389> 8912 +<838a> <838a> 8910 +<838b> <838c> 10484 +<838d> <838d> 9857 +<838e> <8393> 10486 +<8394> <8394> 7798 +<8395> <839d> 10492 +<839e> <839e> 8753 +<839f> <83a5> 10501 +<83a6> <83a6> 7827 +<83a7> <83aa> 10508 +<83ab> <83ab> 8914 +<83ac> <83ad> 10512 +<83ae> <83ae> 8919 +<83af> <83af> 8917 +<83b0> <83b0> 8913 +<83b1> <83b9> 10514 +<83ba> <83ba> 7909 +<83bb> <83c8> 10523 +<83c9> <83c9> 8229 +endcidrange + +100 begincidrange +<83ca> <83f5> 10537 +<83f6> <83f6> 7887 +<83f7> <83fe> 10581 +<8440> <844f> 10589 +<8450> <8450> 8153 +<8451> <8470> 10605 +<8471> <8471> 8904 +<8472> <8473> 10637 +<8474> <8474> 8803 +<8475> <8476> 10639 +<8477> <8477> 9859 +<8478> <847e> 10641 +<8480> <8481> 10648 +<8482> <8482> 7959 +<8483> <848d> 10650 +<848e> <848e> 7979 +<848f> <8491> 10661 +<8492> <8492> 8906 +<8493> <8493> 7833 +<8494> <849c> 10664 +<849d> <849d> 8015 +<849e> <84a0> 10673 +<84a1> <84a1> 8143 +<84a2> <84a2> 8246 +<84a3> <84a3> 7994 +<84a4> <84a4> 10676 +<84a5> <84a5> 8905 +<84a6> <84a6> 8089 +<84a7> <84a8> 10677 +<84a9> <84a9> 8053 +<84aa> <84c4> 10679 +<84c5> <84c5> 8126 +<84c6> <84d2> 10706 +<84d3> <84d3> 7885 +<84d4> <84d4> 10719 +<84d5> <84d5> 8617 +<84d6> <84d6> 10720 +<84d7> <84d7> 8678 +<84d8> <84d8> 10721 +<84d9> <84d9> 8487 +<84da> <84da> 8195 +<84db> <84dc> 10722 +<84dd> <84dd> 8498 +<84de> <84e9> 10724 +<84ea> <84ea> 8995 +<84eb> <84ed> 10736 +<84ee> <84ee> 8209 +<84ef> <84f0> 10739 +<84f1> <84f1> 8437 +<84f2> <84fe> 10741 +<8540> <8550> 10754 +<8551> <8551> 8901 +<8552> <8552> 8030 +<8553> <8553> 10771 +<8554> <8554> 8902 +<8555> <855d> 10772 +<855e> <855e> 8431 +<855f> <8565> 10781 +<8566> <8566> 8656 +<8567> <857e> 10788 +<8580> <8586> 10812 +<8587> <8587> 8897 +<8588> <858a> 10819 +<858b> <858b> 7780 +<858c> <8591> 10822 +<8592> <8592> 8697 +<8593> <8595> 10828 +<8596> <8596> 8208 +<8597> <8597> 10831 +<8598> <8598> 8898 +<8599> <85a1> 10832 +<85a2> <85a2> 7770 +<85a3> <85b1> 10841 +<85b2> <85b2> 7842 +<85b3> <85fe> 10856 +<8640> <8649> 10932 +<864a> <864a> 9069 +<864b> <8653> 10942 +<8654> <8654> 8775 +<8655> <8667> 10951 +<8668> <8668> 9068 +<8669> <867e> 10970 +<8680> <8695> 10992 +<8696> <8696> 8604 +<8697> <8698> 11014 +<8699> <8699> 8393 +<869a> <86a0> 11016 +<86a1> <86a1> 8688 +<86a2> <86c9> 11023 +<86ca> <86ca> 8459 +<86cb> <86cb> 11063 +<86cc> <86cc> 8414 +<86cd> <86cd> 11064 +<86ce> <86ce> 7850 +<86cf> <86d0> 11065 +<86d1> <86d1> 8748 +<86d2> <86db> 11067 +<86dc> <86dc> 8408 +<86dd> <86dd> 8896 +<86de> <86e0> 11077 +endcidrange + +100 begincidrange +<86e1> <86e1> 8303 +<86e2> <86e7> 11080 +<86e8> <86e8> 8609 +<86e9> <86ed> 11086 +<86ee> <86ee> 9081 +<86ef> <86f3> 11091 +<86f4> <86f4> 9074 +<86f5> <86fe> 11096 +<8740> <8740> 8554 +<8741> <8743> 11106 +<8744> <8744> 9084 +<8745> <8748> 11109 +<8749> <8749> 8368 +<874a> <874a> 11113 +<874b> <874b> 9082 +<874c> <874c> 7796 +<874d> <874e> 11114 +<874f> <874f> 9079 +<8750> <8756> 11116 +<8757> <8757> 8012 +<8758> <8759> 11123 +<875a> <875a> 9080 +<875b> <875b> 8655 +<875c> <875c> 9064 +<875d> <875d> 11125 +<875e> <875e> 9073 +<875f> <875f> 11126 +<8760> <8760> 9065 +<8761> <8765> 11127 +<8766> <8766> 9844 +<8767> <8779> 11132 +<877a> <877a> 9071 +<877b> <877c> 11151 +<877d> <877d> 9072 +<877e> <877e> 11153 +<8780> <8780> 11154 +<8781> <8781> 9078 +<8782> <8782> 9075 +<8783> <8785> 11155 +<8786> <8786> 9087 +<8787> <8787> 11158 +<8788> <8788> 9076 +<8789> <8789> 11159 +<878a> <878a> 8373 +<878b> <878c> 11160 +<878d> <878d> 7899 +<878e> <878e> 9842 +<878f> <8792> 11162 +<8793> <8793> 9070 +<8794> <8797> 11166 +<8798> <8798> 8631 +<8799> <879c> 11170 +<879d> <879d> 9077 +<879e> <87a2> 11174 +<87a3> <87a3> 9090 +<87a4> <87a6> 11179 +<87a7> <87a7> 8350 +<87a8> <87b2> 11182 +<87b3> <87b3> 9067 +<87b4> <87b4> 11193 +<87b5> <87b5> 8249 +<87b6> <87ba> 11194 +<87bb> <87bb> 9887 +<87bc> <87be> 11199 +<87bf> <87bf> 9085 +<87c0> <87c0> 8693 +<87c1> <87c1> 11202 +<87c2> <87c2> 9089 +<87c3> <87c9> 11203 +<87ca> <87ca> 9083 +<87cb> <87cb> 9086 +<87cc> <87cc> 8652 +<87cd> <87ce> 11210 +<87cf> <87cf> 8923 +<87d0> <87d1> 11212 +<87d2> <87d2> 9066 +<87d3> <87d3> 9865 +<87d4> <87d4> 11214 +<87d5> <87d5> 9879 +<87d6> <87d9> 11215 +<87da> <87da> 8865 +<87db> <87f6> 11219 +<87f7> <87f7> 9091 +<87f8> <87f8> 7997 +<87f9> <87f9> 11247 +<87fa> <87fa> 8591 +<87fb> <87fe> 11248 +<8840> <8840> 8774 +<8841> <8841> 8776 +<8842> <8843> 11252 +<8844> <8844> 8574 +<8845> <8845> 11254 +<8846> <8846> 8576 +<8847> <887e> 11255 +<8880> <88b9> 11311 +<88ba> <88ba> 9002 +<88bb> <88cb> 11369 +<88cc> <88cc> 8843 +<88cd> <88d3> 11386 +<88d4> <88d4> 8069 +endcidrange + +100 begincidrange +<88d5> <88d6> 11393 +<88d7> <88d7> 8997 +<88d8> <88de> 11395 +<88df> <88df> 9004 +<88e0> <88e4> 11402 +<88e5> <88e5> 9006 +<88e6> <88f1> 11407 +<88f2> <88f2> 8709 +<88f3> <88f3> 7736 +<88f4> <88f5> 11419 +<88f6> <88f6> 7795 +<88f7> <88fe> 11421 +<8940> <894a> 11429 +<894b> <894b> 8163 +<894c> <894c> 9017 +<894d> <894d> 11440 +<894e> <894e> 9003 +<894f> <894f> 11441 +<8950> <8950> 9005 +<8951> <8953> 11442 +<8954> <8954> 8575 +<8955> <895c> 11445 +<895d> <895d> 8615 +<895e> <895e> 11453 +<895f> <895f> 9007 +<8960> <896c> 11454 +<896d> <896d> 7805 +<896e> <8970> 11467 +<8971> <8971> 8406 +<8972> <897b> 11470 +<897c> <897c> 7874 +<897d> <897e> 11480 +<8980> <898a> 11482 +<898b> <898b> 8882 +<898c> <8998> 11493 +<8999> <8999> 7903 +<899a> <899d> 11506 +<899e> <899e> 7929 +<899f> <89a5> 11510 +<89a6> <89a6> 8409 +<89a7> <89a7> 11517 +<89a8> <89a8> 8157 +<89a9> <89ae> 11518 +<89af> <89af> 8551 +<89b0> <89b9> 11524 +<89ba> <89ba> 8685 +<89bb> <89bd> 11534 +<89be> <89be> 8199 +<89bf> <89bf> 8998 +<89c0> <89c0> 9001 +<89c1> <89c3> 11537 +<89c4> <89c4> 8018 +<89c5> <89c5> 8251 +<89c6> <89c6> 9000 +<89c7> <89c7> 11540 +<89c8> <89c8> 8999 +<89c9> <89cd> 11541 +<89ce> <89ce> 7723 +<89cf> <89d0> 11546 +<89d1> <89d1> 8878 +<89d2> <89d7> 11548 +<89d8> <89d8> 8009 +<89d9> <89da> 11554 +<89db> <89db> 8504 +<89dc> <89f3> 11556 +<89f4> <89f4> 8321 +<89f5> <89fe> 11580 +<8a40> <8a40> 11590 +<8a41> <8a41> 8060 +<8a42> <8a58> 11591 +<8a59> <8a59> 9051 +<8a5a> <8a5a> 7902 +<8a5b> <8a5b> 11614 +<8a5c> <8a5c> 8098 +<8a5d> <8a5d> 11615 +<8a5e> <8a5e> 7930 +<8a5f> <8a78> 11616 +<8a79> <8a79> 8877 +<8a7a> <8a7e> 11642 +<8a80> <8ae3> 11647 +<8ae4> <8ae4> 8255 +<8ae5> <8afe> 11747 +<8b40> <8b43> 11773 +<8b44> <8b44> 7950 +<8b45> <8b48> 11777 +<8b49> <8b49> 9209 +<8b4a> <8b79> 11781 +<8b7a> <8b7a> 9212 +<8b7b> <8b7e> 11829 +<8b80> <8b8b> 11833 +<8b8c> <8b8c> 8297 +<8b8d> <8b9d> 11845 +<8b9e> <8b9e> 9207 +<8b9f> <8bb2> 11862 +<8bb3> <8bb3> 9206 +<8bb4> <8bb8> 11882 +<8bb9> <8bb9> 9213 +<8bba> <8bbd> 11887 +<8bbe> <8bbe> 9208 +<8bbf> <8bc5> 11891 +endcidrange + +100 begincidrange +<8bc6> <8bc6> 9210 +<8bc7> <8bc7> 11898 +<8bc8> <8bc8> 9214 +<8bc9> <8bc9> 8104 +<8bca> <8bd3> 11899 +<8bd4> <8bd4> 9217 +<8bd5> <8bdb> 11909 +<8bdc> <8bdc> 9215 +<8bdd> <8be4> 11916 +<8be5> <8be5> 9216 +<8be6> <8bea> 11924 +<8beb> <8beb> 8737 +<8bec> <8bef> 11929 +<8bf0> <8bf0> 8482 +<8bf1> <8bfe> 11933 +<8c40> <8c43> 11947 +<8c44> <8c44> 9211 +<8c45> <8c4e> 11951 +<8c4f> <8c4f> 8538 +<8c50> <8c56> 11961 +<8c57> <8c57> 8677 +<8c58> <8c5b> 11968 +<8c5c> <8c5c> 8279 +<8c5d> <8c7e> 11972 +<8c80> <8c8a> 12006 +<8c8b> <8c8b> 8421 +<8c8c> <8c8c> 12017 +<8c8d> <8c8d> 8495 +<8c8e> <8c8e> 8355 +<8c8f> <8c8f> 8481 +<8c90> <8c90> 12018 +<8c91> <8c91> 8660 +<8c92> <8c92> 8165 +<8c93> <8c98> 12019 +<8c99> <8c99> 7818 +<8c9a> <8c9a> 7735 +<8c9b> <8ca1> 12025 +<8ca2> <8ca2> 8094 +<8ca3> <8ca3> 8870 +<8ca4> <8ca4> 8680 +<8ca5> <8ca5> 12032 +<8ca6> <8ca6> 7898 +<8ca7> <8ca7> 7865 +<8ca8> <8cbf> 12033 +<8cc0> <8cc0> 9052 +<8cc1> <8cd1> 12057 +<8cd2> <8cd2> 8272 +<8cd3> <8cd3> 7783 +<8cd4> <8cd4> 12074 +<8cd5> <8cd5> 9204 +<8cd6> <8cd8> 12075 +<8cd9> <8cd9> 8510 +<8cda> <8cf8> 12078 +<8cf9> <8cf9> 7958 +<8cfa> <8cfe> 12109 +<8d40> <8d72> 12114 +<8d73> <8d73> 9097 +<8d74> <8d74> 12165 +<8d75> <8d75> 7863 +<8d76> <8d7a> 12166 +<8d7b> <8d7b> 8628 +<8d7c> <8d7e> 12171 +<8d80> <8d87> 12174 +<8d88> <8d88> 9103 +<8d89> <8d8e> 12182 +<8d8f> <8d8f> 7962 +<8d90> <8d9d> 12188 +<8d9e> <8d9e> 9099 +<8d9f> <8db8> 12202 +<8db9> <8db9> 9098 +<8dba> <8de1> 12228 +<8de2> <8de2> 9105 +<8de3> <8de3> 12268 +<8de4> <8de4> 8817 +<8de5> <8de6> 12269 +<8de7> <8de7> 9096 +<8de8> <8df6> 12271 +<8df7> <8df7> 9102 +<8df8> <8dfd> 12286 +<8dfe> <8dfe> 9101 +<8e40> <8e45> 12292 +<8e46> <8e46> 9100 +<8e47> <8e55> 12298 +<8e56> <8e56> 9104 +<8e57> <8e57> 12313 +<8e58> <8e58> 8243 +<8e59> <8e59> 12314 +<8e5a> <8e5a> 8764 +<8e5b> <8e67> 12315 +<8e68> <8e68> 8169 +<8e69> <8e6d> 12328 +<8e6e> <8e6e> 8277 +<8e6f> <8e6f> 12333 +<8e70> <8e70> 9106 +<8e71> <8e7e> 12334 +<8e80> <8e80> 8996 +<8e81> <8e9a> 12348 +<8e9b> <8e9b> 8515 +<8e9c> <8e9e> 12374 +<8e9f> <8e9f> 8489 +endcidrange + +100 begincidrange +<8ea0> <8ea3> 12377 +<8ea4> <8ea4> 8823 +<8ea5> <8ea6> 12381 +<8ea7> <8ea7> 7847 +<8ea8> <8eab> 12383 +<8eac> <8eac> 8837 +<8ead> <8ead> 12387 +<8eae> <8eae> 9092 +<8eaf> <8ebc> 12388 +<8ebd> <8ebd> 9095 +<8ebe> <8ebe> 9094 +<8ebf> <8ec2> 12402 +<8ec3> <8ec3> 8848 +<8ec4> <8ec4> 12406 +<8ec5> <8ec5> 7748 +<8ec6> <8ecc> 12407 +<8ecd> <8ecd> 7730 +<8ece> <8ece> 9093 +<8ecf> <8ed5> 12414 +<8ed6> <8ed6> 7955 +<8ed7> <8ed7> 8051 +<8ed8> <8eeb> 12421 +<8eec> <8eec> 8160 +<8eed> <8efe> 12441 +<8f40> <8f51> 12459 +<8f52> <8f52> 8327 +<8f53> <8f53> 7800 +<8f54> <8f54> 9134 +<8f55> <8f55> 7926 +<8f56> <8f56> 7985 +<8f57> <8f5c> 12477 +<8f5d> <8f5d> 8261 +<8f5e> <8f63> 12483 +<8f64> <8f64> 8568 +<8f65> <8f7e> 12489 +<8f80> <8f85> 12515 +<8f86> <8f86> 9205 +<8f87> <8f87> 12521 +<8f88> <8f88> 8821 +<8f89> <8f94> 12522 +<8f95> <8f95> 9838 +<8f96> <8f96> 12534 +<8f97> <8f97> 7856 +<8f98> <8f9a> 12535 +<8f9b> <8f9b> 8323 +<8f9c> <8f9c> 12538 +<8f9d> <8f9d> 8584 +<8f9e> <8fa0> 12539 +<8fa1> <8fa1> 9852 +<8fa2> <8fbc> 12542 +<8fbd> <8fbd> 8133 +<8fbe> <8fc3> 12569 +<8fc4> <8fc4> 7841 +<8fc5> <8fc5> 12575 +<8fc6> <8fc6> 9107 +<8fc7> <8fcc> 12576 +<8fcd> <8fcd> 7947 +<8fce> <8fd7> 12582 +<8fd8> <8fd8> 7804 +<8fd9> <8ffe> 12592 +<9040> <907e> 12630 +<9080> <909c> 12693 +<909d> <909d> 9140 +<909e> <909e> 8318 +<909f> <90b9> 12722 +<90ba> <90ba> 7907 +<90bb> <90bf> 12749 +<90c0> <90c0> 8341 +<90c1> <90c1> 9147 +<90c2> <90c4> 12754 +<90c5> <90c5> 9145 +<90c6> <90da> 12757 +<90db> <90db> 7720 +<90dc> <90dc> 9149 +<90dd> <90ec> 12778 +<90ed> <90ed> 9141 +<90ee> <90ef> 12794 +<90f0> <90f0> 9146 +<90f1> <90f6> 12796 +<90f7> <90f7> 9139 +<90f8> <90fe> 12802 +<9140> <9141> 12809 +<9142> <9142> 8546 +<9143> <914a> 12811 +<914b> <914b> 7774 +<914c> <914c> 12819 +<914d> <914d> 7773 +<914e> <9150> 12820 +<9151> <9151> 9143 +<9152> <9153> 12823 +<9154> <9154> 7983 +<9155> <9155> 9439 +<9156> <9158> 12825 +<9159> <9159> 9138 +<915a> <915a> 8526 +<915b> <915c> 12828 +<915d> <915d> 8274 +<915e> <9160> 12830 +<9161> <9161> 9148 +<9162> <9162> 12833 +endcidrange + +100 begincidrange +<9163> <9163> 8427 +<9164> <916d> 12834 +<916e> <916e> 8754 +<916f> <9175> 12844 +<9176> <9176> 7743 +<9177> <9179> 12851 +<917a> <917a> 8219 +<917b> <917b> 8380 +<917c> <917c> 9150 +<917d> <917e> 12854 +<9180> <9183> 12856 +<9184> <9184> 7854 +<9185> <918c> 12860 +<918d> <918d> 7931 +<918e> <9190> 12868 +<9191> <9191> 8329 +<9192> <9192> 12871 +<9193> <9193> 9137 +<9194> <9196> 12872 +<9197> <9197> 8644 +<9198> <919a> 12875 +<919b> <919b> 8724 +<919c> <91a8> 12878 +<91a9> <91a9> 8158 +<91aa> <91aa> 8739 +<91ab> <91ab> 9142 +<91ac> <91b9> 12891 +<91ba> <91ba> 9868 +<91bb> <91bb> 9438 +<91bc> <91be> 12905 +<91bf> <91bf> 9440 +<91c0> <91c2> 12908 +<91c3> <91c3> 9144 +<91c4> <91cc> 12911 +<91cd> <91cd> 7809 +<91ce> <91cf> 12920 +<91d0> <91d0> 8190 +<91d1> <91d1> 8017 +<91d2> <91d2> 8673 +<91d3> <91d3> 12922 +<91d4> <91d4> 9136 +<91d5> <91d5> 12923 +<91d6> <91d6> 8142 +<91d7> <91d7> 12924 +<91d8> <91d8> 8478 +<91d9> <91d9> 8225 +<91da> <91de> 12925 +<91df> <91df> 9441 +<91e0> <91e1> 12930 +<91e2> <91e2> 9379 +<91e3> <91e9> 12932 +<91ea> <91ea> 9380 +<91eb> <91ef> 12939 +<91f0> <91f0> 8819 +<91f1> <91f1> 12944 +<91f2> <91f2> 8624 +<91f3> <91fe> 12945 +<9240> <927e> 12957 +<9280> <92b5> 13020 +<92b6> <92b6> 8657 +<92b7> <92cd> 13074 +<92ce> <92ce> 8476 +<92cf> <92cf> 13097 +<92d0> <92d0> 9053 +<92d1> <92d3> 13098 +<92d4> <92d4> 9858 +<92d5> <92de> 13101 +<92df> <92df> 8461 +<92e0> <92e0> 8282 +<92e1> <92fd> 13111 +<92fe> <92fe> 8077 +<9340> <934f> 13140 +<9350> <9350> 8703 +<9351> <935c> 13156 +<935d> <935d> 8024 +<935e> <936f> 13168 +<9370> <9370> 8539 +<9371> <9375> 13186 +<9376> <9376> 7862 +<9377> <937e> 13191 +<9380> <938b> 13199 +<938c> <938c> 8411 +<938d> <939c> 13211 +<939d> <939d> 9056 +<939e> <93a4> 13227 +<93a5> <93a5> 9057 +<93a6> <93a6> 13234 +<93a7> <93a7> 8256 +<93a8> <93b3> 13235 +<93b4> <93b4> 8846 +<93b5> <93b7> 13247 +<93b8> <93b8> 8159 +<93b9> <93ba> 13250 +<93bb> <93bb> 9054 +<93bc> <93bc> 13252 +<93bd> <93bd> 7786 +<93be> <93c5> 13253 +<93c6> <93c6> 8194 +<93c7> <93ce> 13261 +<93cf> <93cf> 8339 +endcidrange + +100 begincidrange +<93d0> <93d6> 13269 +<93d7> <93d7> 9055 +<93d8> <93da> 13276 +<93db> <93db> 7852 +<93dc> <93dc> 7764 +<93dd> <93e0> 13279 +<93e1> <93e1> 7944 +<93e2> <93e3> 13283 +<93e4> <93e4> 8384 +<93e5> <93e5> 9058 +<93e6> <93e8> 13285 +<93e9> <93e9> 8544 +<93ea> <93ea> 13288 +<93eb> <93eb> 8605 +<93ec> <93ec> 8078 +<93ed> <93ed> 8749 +<93ee> <93ee> 13289 +<93ef> <93ef> 8263 +<93f0> <93f0> 13290 +<93f1> <93f1> 8802 +<93f2> <93f3> 13291 +<93f4> <93f4> 8039 +<93f5> <93f5> 7858 +<93f6> <93f9> 13293 +<93fa> <93fa> 7849 +<93fb> <93fd> 13297 +<93fe> <93fe> 8140 +<9440> <9443> 13300 +<9444> <9444> 8050 +<9445> <944c> 13304 +<944d> <944d> 8344 +<944e> <944f> 13312 +<9450> <9450> 7762 +<9451> <9451> 8356 +<9452> <9452> 7964 +<9453> <9453> 8847 +<9454> <9454> 13314 +<9455> <9455> 8173 +<9456> <9457> 13315 +<9458> <9458> 9061 +<9459> <945a> 13317 +<945b> <945b> 7725 +<945c> <945c> 8530 +<945d> <945d> 9062 +<945e> <945e> 13319 +<945f> <945f> 8442 +<9460> <9463> 13320 +<9464> <9464> 9059 +<9465> <9465> 13324 +<9466> <9466> 8346 +<9467> <946d> 13325 +<946e> <946e> 8252 +<946f> <9471> 13332 +<9472> <9472> 8182 +<9473> <9473> 13335 +<9474> <9474> 9060 +<9475> <9475> 13336 +<9476> <9476> 7785 +<9477> <9477> 13337 +<9478> <9478> 9063 +<9479> <9479> 13338 +<947a> <947a> 8477 +<947b> <947e> 13339 +<9480> <9480> 8793 +<9481> <9481> 8278 +<9482> <9482> 8547 +<9483> <9486> 13343 +<9487> <9487> 8105 +<9488> <9488> 8188 +<9489> <94a0> 13347 +<94a1> <94a1> 7726 +<94a2> <94b2> 13371 +<94b3> <94b3> 7868 +<94b4> <94b4> 13388 +<94b5> <94b5> 8514 +<94b6> <94be> 13389 +<94bf> <94bf> 8222 +<94c0> <94c0> 7747 +<94c1> <94cb> 13398 +<94cc> <94cc> 9428 +<94cd> <94d7> 13409 +<94d8> <94d8> 8815 +<94d9> <94df> 13420 +<94e0> <94e0> 7895 +<94e1> <94fe> 13427 +<9540> <9571> 13457 +<9572> <9572> 8493 +<9573> <957e> 13507 +<9580> <9582> 13519 +<9583> <9583> 8859 +<9584> <959d> 13522 +<959e> <959e> 8790 +<959f> <959f> 9384 +<95a0> <95b2> 13548 +<95b3> <95b3> 7801 +<95b4> <95b9> 13567 +<95ba> <95ba> 8794 +<95bb> <95ce> 13573 +<95cf> <95cf> 9383 +<95d0> <95d0> 13593 +endcidrange + +100 begincidrange +<95d1> <95d1> 9862 +<95d2> <95d2> 9382 +<95d3> <95d3> 13594 +<95d4> <95d4> 8654 +<95d5> <95e0> 13595 +<95e1> <95e1> 9385 +<95e2> <95e6> 13607 +<95e7> <95e7> 8167 +<95e8> <95f0> 13612 +<95f1> <95f1> 8466 +<95f2> <95f7> 13621 +<95f8> <95f8> 8508 +<95f9> <95fd> 13627 +<95fe> <95fe> 8028 +<9640> <9655> 13632 +<9656> <9656> 9412 +<9657> <967b> 13654 +<967c> <967c> 7884 +<967d> <967e> 13691 +<9680> <96fe> 13693 +<9740> <9766> 13820 +<9767> <9767> 9322 +<9768> <976b> 13859 +<976c> <976c> 8565 +<976d> <976d> 13863 +<976e> <976e> 9325 +<976f> <977e> 13864 +<9780> <9795> 13880 +<9796> <9796> 9323 +<9797> <9797> 8799 +<9798> <979c> 13902 +<979d> <979d> 7886 +<979e> <97a2> 13907 +<97a3> <97a3> 8818 +<97a4> <97be> 13912 +<97bf> <97bf> 9331 +<97c0> <97ed> 13939 +<97ee> <97ee> 8702 +<97ef> <97f6> 13985 +<97f7> <97f7> 7934 +<97f8> <97fe> 13993 +<9840> <9844> 14000 +<9845> <9845> 9333 +<9846> <9848> 14005 +<9849> <9849> 8714 +<984a> <984e> 14008 +<984f> <984f> 8047 +<9850> <9870> 14013 +<9871> <9871> 9320 +<9872> <9872> 14046 +<9873> <9873> 8448 +<9874> <987e> 14047 +<9880> <9880> 14058 +<9881> <9881> 9334 +<9882> <988a> 14059 +<988b> <988b> 7975 +<988c> <988c> 8407 +<988d> <989f> 14068 +<98a0> <98a0> 9340 +<98a1> <98a9> 14087 +<98aa> <98aa> 8097 +<98ab> <98b5> 14096 +<98b6> <98b6> 8874 +<98b7> <98b7> 8197 +<98b8> <98b9> 14107 +<98ba> <98ba> 9324 +<98bb> <98c6> 14109 +<98c7> <98c7> 8254 +<98c8> <98ca> 14121 +<98cb> <98cb> 7756 +<98cc> <98cf> 14124 +<98d0> <98d0> 8506 +<98d1> <98d2> 14128 +<98d3> <98d3> 8708 +<98d4> <98e2> 14130 +<98e3> <98e3> 8387 +<98e4> <98e4> 8512 +<98e5> <98e5> 9335 +<98e6> <98ee> 14145 +<98ef> <98ef> 9332 +<98f0> <98f1> 14154 +<98f2> <98f2> 8413 +<98f3> <98fe> 14156 +<9940> <9942> 14168 +<9943> <9943> 8040 +<9944> <9944> 14171 +<9945> <9945> 8581 +<9946> <9965> 14172 +<9966> <9966> 9330 +<9967> <996d> 14204 +<996e> <996e> 7861 +<996f> <9974> 14211 +<9975> <9975> 9336 +<9976> <9979> 14217 +<997a> <997a> 8075 +<997b> <997b> 9348 +<997c> <997e> 14221 +<9980> <9984> 14224 +<9985> <9985> 9881 +<9986> <9988> 14229 +endcidrange + +100 begincidrange +<9989> <9989> 9346 +<998a> <998d> 14232 +<998e> <998e> 8353 +<998f> <9990> 14236 +<9991> <9991> 8082 +<9992> <9998> 14238 +<9999> <9999> 7992 +<999a> <99a8> 14245 +<99a9> <99a9> 9349 +<99aa> <99af> 14260 +<99b0> <99b0> 9344 +<99b1> <99b1> 9326 +<99b2> <99b2> 14266 +<99b3> <99b3> 9339 +<99b4> <99b4> 9350 +<99b5> <99b5> 9329 +<99b6> <99bc> 14267 +<99bd> <99bd> 9347 +<99be> <99be> 9328 +<99bf> <99bf> 14274 +<99c0> <99c0> 9321 +<99c1> <99c1> 14275 +<99c2> <99c2> 9343 +<99c3> <99c8> 14276 +<99c9> <99c9> 9327 +<99ca> <99cd> 14282 +<99ce> <99ce> 9345 +<99cf> <99d0> 14286 +<99d1> <99d1> 8736 +<99d2> <99d9> 14288 +<99da> <99da> 8181 +<99db> <99df> 14296 +<99e0> <99e0> 8436 +<99e1> <99e4> 14301 +<99e5> <99e5> 9341 +<99e6> <99e7> 14305 +<99e8> <99e8> 9337 +<99e9> <99eb> 14307 +<99ec> <99ec> 9342 +<99ed> <99f3> 14310 +<99f4> <99f4> 9338 +<99f5> <99fe> 14317 +<9a40> <9a49> 14327 +<9a4a> <9a4a> 8419 +<9a4b> <9a56> 14337 +<9a57> <9a57> 8365 +<9a58> <9a64> 14349 +<9a65> <9a65> 9419 +<9a66> <9a66> 14362 +<9a67> <9a67> 8019 +<9a68> <9a70> 14363 +<9a71> <9a71> 8537 +<9a72> <9a75> 14372 +<9a76> <9a76> 8211 +<9a77> <9a77> 7987 +<9a78> <9a7e> 14376 +<9a80> <9a87> 14383 +<9a88> <9a88> 7772 +<9a89> <9a8b> 14391 +<9a8c> <9a8c> 9352 +<9a8d> <9a90> 14394 +<9a91> <9a91> 9351 +<9a92> <9a96> 14398 +<9a97> <9a97> 9354 +<9a98> <9a99> 14403 +<9a9a> <9a9a> 9353 +<9a9b> <9a9b> 9355 +<9a9c> <9a9d> 14405 +<9a9e> <9a9e> 8067 +<9a9f> <9aa1> 14407 +<9aa2> <9aa2> 8463 +<9aa3> <9aa3> 8155 +<9aa4> <9aa9> 14410 +<9aaa> <9aaa> 8367 +<9aab> <9acf> 14416 +<9ad0> <9ad0> 9408 +<9ad1> <9ad5> 14453 +<9ad6> <9ad6> 8813 +<9ad7> <9ad9> 14458 +<9ada> <9ada> 9409 +<9adb> <9ae1> 14461 +<9ae2> <9ae2> 8394 +<9ae3> <9ae3> 14468 +<9ae4> <9ae4> 8423 +<9ae5> <9ae5> 9410 +<9ae6> <9afe> 14469 +<9b40> <9b7e> 14494 +<9b80> <9bd0> 14557 +<9bd1> <9bd1> 9180 +<9bd2> <9bdb> 14638 +<9bdc> <9bdc> 9179 +<9bdd> <9bfe> 14648 +<9c40> <9c52> 14682 +<9c53> <9c53> 8286 +<9c54> <9c58> 14701 +<9c59> <9c59> 8772 +<9c5a> <9c5a> 9186 +<9c5b> <9c5b> 14706 +<9c5c> <9c5c> 8404 +<9c5d> <9c74> 14707 +endcidrange + +100 begincidrange +<9c75> <9c75> 8607 +<9c76> <9c78> 14731 +<9c79> <9c79> 7782 +<9c7a> <9c7e> 14734 +<9c80> <9c85> 14739 +<9c86> <9c86> 8035 +<9c87> <9c9c> 14745 +<9c9d> <9c9d> 9181 +<9c9e> <9caa> 14767 +<9cab> <9cab> 8555 +<9cac> <9cc9> 14780 +<9cca> <9cca> 8885 +<9ccb> <9cce> 14810 +<9ccf> <9ccf> 7974 +<9cd0> <9ce5> 14814 +<9ce6> <9ce6> 7779 +<9ce7> <9ce7> 8328 +<9ce8> <9ceb> 14836 +<9cec> <9cec> 7869 +<9ced> <9ced> 14840 +<9cee> <9cee> 9025 +<9cef> <9cfa> 14841 +<9cfb> <9cfb> 8011 +<9cfc> <9cfd> 14853 +<9cfe> <9cfe> 8850 +<9d40> <9d41> 14855 +<9d42> <9d42> 8484 +<9d43> <9d45> 14857 +<9d46> <9d46> 8264 +<9d47> <9d47> 9184 +<9d48> <9d4c> 14860 +<9d4d> <9d4d> 8311 +<9d4e> <9d4e> 14865 +<9d4f> <9d4f> 8762 +<9d50> <9d60> 14866 +<9d61> <9d61> 8369 +<9d62> <9d67> 14883 +<9d68> <9d68> 8001 +<9d69> <9d69> 8220 +<9d6a> <9d6d> 14889 +<9d6e> <9d6e> 8888 +<9d6f> <9d70> 14893 +<9d71> <9d71> 8822 +<9d72> <9d74> 14895 +<9d75> <9d75> 8091 +<9d76> <9d7a> 14898 +<9d7b> <9d7b> 8095 +<9d7c> <9d7c> 14903 +<9d7d> <9d7d> 9674 +<9d7e> <9d7e> 14904 +<9d80> <9d89> 14905 +<9d8a> <9d8a> 8382 +<9d8b> <9d8c> 14915 +<9d8d> <9d8d> 8116 +<9d8e> <9d90> 14917 +<9d91> <9d91> 9175 +<9d92> <9d98> 14920 +<9d99> <9d99> 8453 +<9d9a> <9da0> 14927 +<9da1> <9da1> 9185 +<9da2> <9da2> 8172 +<9da3> <9da6> 14934 +<9da7> <9da7> 9194 +<9da8> <9dab> 14938 +<9dac> <9dac> 9187 +<9dad> <9dad> 8462 +<9dae> <9db1> 14942 +<9db2> <9db2> 8102 +<9db3> <9db3> 8196 +<9db4> <9dbd> 14946 +<9dbe> <9dbe> 8093 +<9dbf> <9dc5> 14956 +<9dc6> <9dc6> 9189 +<9dc7> <9dc8> 14963 +<9dc9> <9dc9> 8804 +<9dca> <9dcc> 14965 +<9dcd> <9dcd> 9442 +<9dce> <9dd1> 14968 +<9dd2> <9dd2> 9182 +<9dd3> <9dd4> 14972 +<9dd5> <9dd5> 7876 +<9dd6> <9de0> 14974 +<9de1> <9de1> 8886 +<9de2> <9de2> 8361 +<9de3> <9df0> 14985 +<9df1> <9df1> 8491 +<9df2> <9df3> 14999 +<9df4> <9df4> 8357 +<9df5> <9df6> 15001 +<9df7> <9df7> 9867 +<9df8> <9df9> 15003 +<9dfa> <9dfa> 8054 +<9dfb> <9dfc> 15005 +<9dfd> <9dfd> 8557 +<9dfe> <9dfe> 15007 +<9e40> <9e44> 15008 +<9e45> <9e45> 8193 +<9e46> <9e47> 15013 +<9e48> <9e48> 8593 +<9e49> <9e49> 7760 +endcidrange + +100 begincidrange +<9e4a> <9e51> 15015 +<9e52> <9e52> 8092 +<9e53> <9e53> 15023 +<9e54> <9e54> 9178 +<9e55> <9e55> 15024 +<9e56> <9e56> 8275 +<9e57> <9e5c> 15025 +<9e5d> <9e5d> 9193 +<9e5e> <9e5e> 9188 +<9e5f> <9e60> 15031 +<9e61> <9e61> 8661 +<9e62> <9e62> 15033 +<9e63> <9e63> 9190 +<9e64> <9e66> 15034 +<9e67> <9e67> 9183 +<9e68> <9e6b> 15037 +<9e6c> <9e6c> 7759 +<9e6d> <9e6e> 15041 +<9e6f> <9e6f> 9177 +<9e70> <9e71> 15043 +<9e72> <9e72> 8212 +<9e73> <9e73> 15045 +<9e74> <9e74> 9196 +<9e75> <9e75> 9195 +<9e76> <9e7a> 15046 +<9e7b> <9e7b> 9176 +<9e7c> <9e7c> 9198 +<9e7d> <9e7e> 15051 +<9e80> <9e84> 15053 +<9e85> <9e85> 9870 +<9e86> <9e86> 15058 +<9e87> <9e87> 9197 +<9e88> <9e90> 15059 +<9e91> <9e91> 8186 +<9e92> <9e95> 15068 +<9e96> <9e96> 9174 +<9e97> <9e97> 9192 +<9e98> <9ea1> 15072 +<9ea2> <9ea2> 8454 +<9ea3> <9ea5> 15082 +<9ea6> <9ea6> 8203 +<9ea7> <9ea8> 15085 +<9ea9> <9ea9> 8550 +<9eaa> <9ead> 15087 +<9eae> <9eae> 9199 +<9eaf> <9eb2> 15091 +<9eb3> <9eb3> 8585 +<9eb4> <9eb4> 8280 +<9eb5> <9eb6> 15095 +<9eb7> <9eb7> 9191 +<9eb8> <9ef4> 15097 +<9ef5> <9ef5> 8611 +<9ef6> <9efe> 15158 +<9f40> <9f4d> 15167 +<9f4e> <9f4e> 8570 +<9f4f> <9f6e> 15181 +<9f6f> <9f6f> 8613 +<9f70> <9f7e> 15213 +<9f80> <9f91> 15228 +<9f92> <9f92> 8226 +<9f93> <9f97> 15246 +<9f98> <9f98> 9430 +<9f99> <9fa5> 15251 +<9fa6> <9fa6> 9018 +<9fa7> <9fa8> 15264 +<9fa9> <9fa9> 7918 +<9faa> <9fab> 15266 +<9fac> <9fac> 9429 +<9fad> <9fc8> 15268 +<9fc9> <9fc9> 8744 +<9fca> <9fcc> 15296 +<9fcd> <9fcd> 9431 +<9fce> <9fe0> 15299 +<9fe1> <9fe1> 8444 +<9fe2> <9fea> 15318 +<9feb> <9feb> 7815 +<9fec> <9fed> 15327 +<9fee> <9fee> 9432 +<9fef> <9ff3> 15329 +<9ff4> <9ff4> 7866 +<9ff5> <9ffc> 15334 +<9ffd> <9ffd> 8473 +<9ffe> <9ffe> 15342 + 15343 + 8556 + 15346 + 9433 + 15348 + 8743 + 15350 + 7775 + 15354 + 8863 + 15359 + 8029 + 15364 + 8124 + 15370 + 9434 + 15371 +endcidrange + +100 begincidrange + 8521 + 15384 + 8262 + 15386 + 8192 + 15396 + 8592 + 15412 + 8712 + 15414 + 7910 + 15415 + 9411 + 15433 + 8396 + 15454 + 9024 + 15468 + 7889 + 15478 + 8620 + 15482 + 8879 + 15497 + 96 + 9897 + 190 + 240 + 250 + 262 + 356 + 439 + 525 + 549 + 602 + 635 + 9907 + 9970 + 668 + 700 + 9992 + 10016 + 10018 + 10019 + 10050 + 7703 + 738 + 15513 + 8630 + 7741 + 15526 + 8757 + 15560 + 9111 + 15561 + 9109 + 15564 + 8767 + 8490 + 15566 + 15569 + 7890 + 15595 + 9110 + 9112 + 15596 + 8354 + 15597 + 814 + 8036 + 15598 + 8235 + 15600 + 9108 + 8505 + 15601 + 8543 + 8641 + 9114 + 15602 + 9113 + 15604 + 15653 + 908 + 15686 + 8640 + 15692 + 9312 + 15734 + 9308 + 15744 + 15746 + 8541 + 15759 + 8741 + 8298 + 15764 + 15776 + 9313 + 15785 +endcidrange + +100 begincidrange + 9307 + 15805 + 9314 + 15807 + 8020 + 15813 + 9311 + 15824 + 15834 + 8428 + 15836 + 9309 + 15840 + 9315 + 15843 + 9316 + 15848 + 15863 + 9381 + 15883 + 7792 + 15896 + 8335 + 15924 + 7746 + 15928 + 8014 + 15933 + 7857 + 15941 + 7819 + 15952 + 8134 + 15988 + 9646 + 16010 + 16013 + 7937 + 8704 + 16015 + 9650 + 7831 + 16025 + 8363 + 16026 + 9651 + 16036 + 8232 + 16038 + 16039 + 9647 + 16040 + 9649 + 16041 + 9644 + 16051 + 7758 + 16055 + 8706 + 9643 + 8838 + 16057 + 9645 + 16058 + 9654 + 16059 + 8675 + 9652 + 8751 + 8549 + 9655 + 16060 + 7913 + 16067 + 7717 + 16083 + 16084 + 9664 + 16107 + 8858 + 16108 + 940 + 16115 + 8814 + 16126 + 8125 + 16127 + 8068 + 8370 + 16128 + 8259 + 16129 + 16173 + 9860 + 16196 + 1034 + 16205 + 9455 + 16206 + 9454 +endcidrange + +100 begincidrange + 16243 + 8308 + 16248 + 9863 + 16254 + 9456 + 16264 + 9869 + 16272 + 8864 + 16288 + 1128 + 16294 + 8107 + 16297 + 9896 + 16341 + 16355 + 9449 + 16363 + 9445 + 16366 + 8698 + 16367 + 1222 + 16385 + 8520 + 16405 + 9444 + 16408 + 9446 + 8439 + 16413 + 8299 + 16414 + 8871 + 16433 + 9452 + 16441 + 9451 + 16444 + 9443 + 16449 + 9450 + 16458 + 1316 + 16471 + 7826 + 16472 + 7719 + 16481 + 8166 + 16491 + 9447 + 8210 + 7916 + 16494 + 9448 + 16498 + 16527 + 8038 + 9436 + 16555 + 1410 + 16558 + 9890 + 16576 + 9437 + 16578 + 8206 + 16581 + 9435 + 7864 + 16582 + 16616 + 1504 + 16649 + 8853 + 16663 + 7808 + 16665 + 9847 + 16672 + 9764 + 8041 + 8747 + 16682 + 9599 + 8027 + 16698 + 8603 + 16704 + 9853 + 16705 + 1598 + 16735 + 8608 + 8582 + 16738 + 8429 +endcidrange + +100 begincidrange + 16739 + 9657 + 16745 + 8170 + 16748 + 7844 + 8417 + 16756 + 9656 + 8800 + 16757 + 8418 + 16758 + 8513 + 16780 + 16787 + 8135 + 16789 + 1692 + 16819 + 7745 + 16835 + 9700 + 16851 + 8070 + 16876 + 16879 + 8115 + 16908 + 7919 + 1786 + 16910 + 8868 + 16912 + 9704 + 16913 + 9699 + 16930 + 8465 + 16932 + 9702 + 16938 + 9703 + 16947 + 8257 + 16956 + 16966 + 9706 + 16970 + 8079 + 16971 + 9708 + 16972 + 9707 + 16976 + 8400 + 8221 + 16992 + 1880 + 8183 + 16993 + 7821 + 17001 + 9705 + 17015 + 9710 + 8250 + 17017 + 9875 + 17020 + 9701 + 9709 + 17024 + 8201 + 17025 + 8293 + 17026 + 9891 + 17029 + 17045 + 1974 + 17078 + 9717 + 7932 + 17096 + 8228 + 17102 + 9883 + 17108 + 9715 + 17109 + 8921 + 17110 + 9716 + 17111 + 9243 + 17112 + 8136 + 17115 + 8059 +endcidrange + +100 begincidrange + 17116 + 9245 + 17117 + 8780 + 8008 + 9244 + 9246 + 8447 + 8602 + 17118 + 8337 + 17119 + 8359 + 17121 + 9251 + 7835 + 9250 + 17123 + 8464 + 17124 + 8845 + 8049 + 7928 + 9249 + 17125 + 7923 + 17128 + 8625 + 9254 + 9253 + 8480 + 17138 + 2068 + 17141 + 8474 + 9252 + 17143 + 9256 + 17144 + 9258 + 9257 + 17146 + 8852 + 17147 + 8894 + 17148 + 7729 + 17149 + 9260 + 17156 + 8117 + 17157 + 9259 + 8111 + 17169 + 8296 + 8676 + 17171 + 7969 + 17174 + 8449 + 17175 + 8572 + 8522 + 9261 + 17182 + 8148 + 17184 + 8145 + 17185 + 7731 + 17192 + 9263 + 17193 + 9262 + 17195 + 9264 + 8667 + 17196 + 8536 + 17201 + 8130 + 17204 + 2162 + 17209 + 8889 + 17212 + 9270 + 17213 + 7822 + 9273 + 17216 + 8645 + 9271 + 8594 + 17222 + 9274 + 7961 + 8588 + 7744 +endcidrange + +100 begincidrange + 8883 + 17223 + 8287 + 9272 + 9266 + 8820 + 17226 + 7836 + 9265 + 8325 + 17227 + 9269 + 17231 + 9275 + 17233 + 8119 + 9267 + 17235 + 8276 + 8670 + 17240 + 9268 + 17241 + 9277 + 8073 + 9276 + 17243 + 8046 + 7896 + 17246 + 7871 + 9285 + 17247 + 8777 + 17248 + 9281 + 17250 + 7751 + 8022 + 17251 + 8326 + 17253 + 8598 + 17255 + 9283 + 9279 + 17256 + 8227 + 17257 + 9282 + 17258 + 9278 + 17260 + 2256 + 9894 + 17261 + 9038 + 9286 + 9291 + 9284 + 17273 + 9255 + 9292 + 17277 + 7951 + 17286 + 9287 + 9289 + 9288 + 17287 + 8642 + 17290 + 8558 + 17293 + 7939 + 17296 + 9290 + 8540 + 17297 + 8891 + 9296 + 17299 + 9876 + 9295 + 9718 + 8273 + 17300 + 9294 + 17301 + 8890 + 8045 + 17303 + 9298 + 9297 + 17308 + 9301 + 17318 + 8841 + 8470 + 17319 +endcidrange + +100 begincidrange + 9300 + 17323 + 2350 + 8443 + 17326 + 9280 + 17329 + 8486 + 8033 + 9885 + 17335 + 8074 + 9302 + 9305 + 9304 + 17336 + 8110 + 17338 + 8730 + 17343 + 8058 + 9293 + 9303 + 17345 + 9299 + 17353 + 9248 + 17354 + 8671 + 9861 + 17355 + 7790 + 17356 + 8740 + 9840 + 17359 + 8634 + 17360 + 9306 + 17361 + 8191 + 17363 + 17365 + 9698 + 17392 + 9882 + 17393 + 2444 + 17396 + 7914 + 17412 + 7724 + 17415 + 8290 + 9457 + 17425 + 9458 + 17426 + 9714 + 17444 + 8725 + 17446 + 17452 + 8622 + 17473 + 2538 + 17484 + 8416 + 17498 + 9666 + 17520 + 9665 + 17521 + 8488 + 17542 + 17543 + 8601 + 17547 + 8215 + 7840 + 8485 + 8525 + 17561 + 9668 + 8349 + 8842 + 17562 + 9667 + 17563 + 8569 + 2632 + 8248 + 17566 + 8533 + 17568 + 8658 + 17623 + 17626 + 9415 + 17630 +endcidrange + +100 begincidrange + 8825 + 17652 + 2726 + 17657 + 8483 + 17666 + 9413 + 17668 + 9417 + 17675 + 8340 + 17678 + 8854 + 17680 + 7799 + 17687 + 7942 + 17706 + 8101 + 17708 + 17712 + 8345 + 17713 + 7853 + 9416 + 8360 + 17728 + 8223 + 17732 + 8389 + 17733 + 9418 + 17734 + 2820 + 17738 + 8176 + 17742 + 9414 + 17743 + 8797 + 8926 + 17747 + 8236 + 17752 + 8545 + 17764 + 8763 + 8665 + 8139 + 8137 + 17767 + 17791 + 7777 + 17810 + 9711 + 17818 + 8088 + 17819 + 2914 + 17821 + 9712 + 17822 + 8072 + 17824 + 8696 + 17826 + 8994 + 17853 + 9014 + 17867 + 17879 + 3008 + 17912 + 8875 + 17950 + 8127 + 17958 + 8061 + 17964 + 9011 + 17968 + 17971 + 3102 + 18004 + 8013 + 18005 + 9012 + 18018 + 8177 + 18020 + 8587 + 18039 + 9033 + 18046 + 8715 + 18061 + 9030 + 18068 + 9031 + 18078 +endcidrange + +100 begincidrange + 8595 + 18079 + 9889 + 18083 + 8034 + 18086 + 3196 + 18089 + 9037 + 9032 + 18104 + 7776 + 18133 + 9029 + 18134 + 7954 + 18140 + 18147 + 8216 + 9013 + 18162 + 9020 + 18173 + 3290 + 18177 + 9839 + 18191 + 9041 + 18198 + 8096 + 18200 + 9016 + 18202 + 8731 + 18206 + 9026 + 18218 + 9039 + 18221 + 9021 + 18225 + 9028 + 9009 + 18228 + 9035 + 18229 + 9019 + 18230 + 9040 + 18237 + 7860 + 8614 + 18241 + 8651 + 18243 + 9045 + 18250 + 3384 + 18256 + 9022 + 18259 + 8052 + 18260 + 9008 + 18261 + 9856 + 18264 + 8410 + 18266 + 9034 + 18274 + 8081 + 18279 + 8455 + 18280 + 9023 + 18290 + 8180 + 9027 + 18306 + 18308 + 8722 + 18315 + 8711 + 18321 + 9049 + 18324 + 8788 + 18333 + 9010 + 18334 + 3478 + 7718 + 9047 + 18336 + 9048 + 8258 + 8531 + 18343 + 8379 +endcidrange + +100 begincidrange + 18346 + 9050 + 18358 + 9046 + 18361 + 9015 + 18364 + 8185 + 18372 + 9043 + 18383 + 8289 + 18386 + 18387 + 7829 + 18401 + 8265 + 18406 + 8002 + 18407 + 8168 + 18413 + 3572 + 18416 + 18479 + 9690 + 18495 + 9687 + 18502 + 3666 + 18510 + 8494 + 18549 + 8626 + 18559 + 18571 + 8606 + 18572 + 9692 + 18577 + 8300 + 18596 + 8742 + 18598 + 3760 + 18600 + 9696 + 18614 + 8827 + 18620 + 9694 + 18622 + 9697 + 18625 + 9685 + 18640 + 7787 + 18646 + 9691 + 18647 + 7817 + 18649 + 9689 + 18652 + 18654 + 8721 + 18655 + 8745 + 9686 + 18662 + 9693 + 9695 + 18670 + 8175 + 18679 + 9688 + 3854 + 18680 + 7977 + 18693 + 7771 + 18696 + 8310 + 18699 + 8855 + 18705 + 9872 + 18708 + 8511 + 18714 + 8600 + 18718 + 7816 + 18719 + 8844 + 18733 + 18734 + 3948 + 18767 + 9713 +endcidrange + +100 begincidrange + 18788 + 8204 + 18791 + 7768 + 8876 + 18798 + 9895 + 18816 + 9846 + 18823 + 18824 + 8161 + 9659 + 18853 + 4042 + 9662 + 18855 + 8925 + 18857 + 9661 + 18866 + 7722 + 18880 + 9660 + 9658 + 18886 + 9663 + 18889 + 8583 + 18893 + 9835 + 18894 + 7807 + 18896 + 8621 + 18898 + 18907 + 8086 + 18917 + 7986 + 18920 + 8324 + 18923 + 8502 + 18925 + 9400 + 18926 + 9402 + 4136 + 18934 + 9404 + 18938 + 8420 + 18941 + 9401 + 18942 + 9405 + 18944 + 9406 + 18946 + 9407 + 18950 + 8146 + 18952 + 8189 + 18954 + 9403 + 7981 + 18955 + 9737 + 18980 + 9738 + 18981 + 7828 + 18982 + 18984 + 8927 + 7883 + 7949 + 18989 + 8055 + 18992 + 8683 + 18993 + 8929 + 18994 + 8559 + 18995 + 8928 + 18996 + 8682 + 18998 + 8930 + 8395 + 18999 + 8056 + 19000 + 7906 + 19002 + 8690 +endcidrange + +100 begincidrange + 4230 + 19003 + 8528 + 19004 + 8147 + 19007 + 8933 + 19008 + 7922 + 19012 + 8479 + 19014 + 8669 + 19017 + 8532 + 19019 + 8935 + 19020 + 8834 + 19023 + 8934 + 19028 + 8936 + 19032 + 8932 + 19038 + 8810 + 19039 + 8939 + 19040 + 8937 + 8381 + 19041 + 8938 + 19043 + 8893 + 19045 + 7838 + 19047 + 8950 + 8679 + 8726 + 19049 + 8503 + 19051 + 8492 + 19053 + 7784 + 8946 + 7991 + 8947 + 19054 + 8943 + 8016 + 7952 + 8648 + 19055 + 8945 + 19056 + 8944 + 19061 + 8942 + 19063 + 4324 + 19064 + 8941 + 8862 + 8940 + 8162 + 19067 + 8446 + 19070 + 8953 + 19073 + 7855 + 19074 + 8758 + 19076 + 8951 + 19077 + 8765 + 19080 + 7810 + 8118 + 19081 + 8612 + 8618 + 8952 + 8529 + 19082 + 8032 + 19083 + 8519 + 19086 + 8517 + 19089 + 8156 + 19090 + 8961 + 19093 +endcidrange + +100 begincidrange + 7925 + 19095 + 8728 + 19097 + 7878 + 19099 + 8960 + 19101 + 8884 + 19102 + 8553 + 19104 + 8957 + 19105 + 8426 + 19106 + 8948 + 19107 + 8955 + 19108 + 8956 + 8231 + 19109 + 8288 + 8959 + 19112 + 8958 + 7879 + 19115 + 8972 + 19116 + 8949 + 19119 + 4418 + 8966 + 19120 + 8970 + 8659 + 19121 + 8963 + 19124 + 8967 + 8971 + 19125 + 8031 + 19127 + 8969 + 19128 + 8962 + 7940 + 8861 + 19130 + 8699 + 19131 + 8968 + 19132 + 8364 + 19133 + 8334 + 8965 + 8599 + 19134 + 8561 + 8856 + 19135 + 8023 + 19138 + 8322 + 19141 + 8977 + 19142 + 8964 + 19145 + 8975 + 7733 + 19146 + 8401 + 8976 + 8099 + 19147 + 8662 + 19148 + 8710 + 19151 + 19153 + 8973 + 19156 + 8978 + 8333 + 8979 + 19158 + 8931 + 19163 + 8122 + 19168 + 8312 + 19172 + 4512 + 19179 + 8840 +endcidrange + +100 begincidrange + 19182 + 8982 + 8043 + 19186 + 8980 + 19192 + 8496 + 8981 + 8552 + 19193 + 8388 + 19194 + 8984 + 19207 + 8729 + 8727 + 19209 + 8405 + 19212 + 8010 + 19214 + 8768 + 19219 + 7891 + 19221 + 19227 + 7753 + 19230 + 9755 + 19233 + 7789 + 8440 + 19236 + 8187 + 8985 + 19237 + 8974 + 19242 + 8983 + 19243 + 4606 + 19252 + 8392 + 19265 + 7933 + 19270 + 19313 + 7739 + 8831 + 19329 + 7948 + 7769 + 7972 + 19330 + 8378 + 8037 + 7920 + 8548 + 7984 + 8801 + 19334 + 4695 + 19335 + 8866 + 9387 + 19336 + 9391 + 7912 + 7993 + 19337 + 7752 + 8304 + 7848 + 19338 + 9388 + 7927 + 8566 + 9389 + 19339 + 8315 + 8005 + 9386 + 8267 + 8239 + 8026 + 9392 + 19340 + 8887 + 8063 + 19341 + 8805 + 19342 + 9394 + 8475 + 7761 + 19348 + 9396 + 19349 + 9395 + 19353 +endcidrange + +100 begincidrange + 7839 + 19354 + 8472 + 19355 + 8372 + 9135 + 8635 + 8306 + 8085 + 19356 + 7946 + 9398 + 19357 + 8849 + 9397 + 8824 + 7892 + 19359 + 8179 + 19365 + 8873 + 9399 + 7976 + 8457 + 8903 + 19370 + 9390 + 8881 + 19375 + 8806 + 19377 + 8795 + 8900 + 19378 + 8469 + 4789 + 19379 + 8746 + 9393 + 19380 + 8509 + 19385 + 7957 + 8796 + 19389 + 7956 + 19425 + 8826 + 19428 + 19435 + 8430 + 19440 + 9720 + 19448 + 4883 + 19466 + 8084 + 19498 + 8752 + 19521 + 19527 + 9725 + 19531 + 9728 + 19537 + 9734 + 19549 + 4977 + 19557 + 9727 + 19562 + 9724 + 7820 + 9730 + 19571 + 8781 + 19572 + 9732 + 9726 + 9731 + 19573 + 9729 + 19578 + 9733 + 19582 + 7843 + 9736 + 19585 + 9735 + 19588 + 8432 + 19604 + 19606 + 7803 + 8807 + 7990 + 8150 + 19613 + 8672 + 19616 +endcidrange + +100 begincidrange + 9356 + 19617 + 9357 + 19623 + 8450 + 19626 + 9364 + 5071 + 19630 + 9363 + 19636 + 9358 + 19642 + 8857 + 9361 + 9366 + 9359 + 9362 + 19647 + 9367 + 19648 + 8113 + 19652 + 9370 + 19653 + 9369 + 19654 + 8792 + 9368 + 19655 + 9371 + 19662 + 7945 + 8422 + 19663 + 8230 + 9375 + 8025 + 9373 + 19668 + 19672 + 7995 + 9372 + 19673 + 7738 + 8283 + 19675 + 8048 + 19679 + 9376 + 19682 + 8507 + 19686 + 7943 + 19688 + 8816 + 8759 + 19690 + 9426 + 19692 + 8627 + 5165 + 8773 + 9377 + 19693 + 8872 + 19695 + 8828 + 8112 + 19698 + 9378 + 19703 + 8006 + 19713 + 9088 + 9365 + 19714 + 9360 + 19715 + 7728 + 19726 + 7837 + 7755 + 7754 + 8362 + 19729 + 19741 + 9851 + 19759 + 9202 + 19771 + 5259 + 8830 + 19772 + 8217 + 19773 + 8123 + 19783 + 8787 + 19797 +endcidrange + +100 begincidrange + 7998 + 7846 + 8590 + 19798 + 8684 + 19801 + 7870 + 19802 + 8778 + 19803 + 8499 + 19807 + 7812 + 19813 + 8399 + 8674 + 19815 + 8719 + 19816 + 8233 + 19817 + 8307 + 8021 + 19818 + 9201 + 19820 + 7750 + 19821 + 8291 + 9203 + 19824 + 5353 + 19846 + 8990 + 19862 + 8755 + 19874 + 8992 + 19885 + 8647 + 19887 + 8892 + 19895 + 8988 + 19896 + 8785 + 19897 + 19902 + 7867 + 19909 + 8839 + 19914 + 8237 + 7851 + 19915 + 8989 + 19916 + 8991 + 19917 + 8987 + 19919 + 5447 + 19928 + 8993 + 19930 + 8789 + 19963 + 7823 + 19966 + 8716 + 8100 + 19977 + 19986 + 8347 + 8664 + 19990 + 9722 + 19991 + 9721 + 19992 + 8500 + 19994 + 9459 + 9464 + 19995 + 9463 + 7880 + 9462 + 19996 + 8832 + 19998 + 7877 + 9467 + 20003 + 5541 + 20004 + 9466 + 20005 + 7917 + 20006 +endcidrange + +100 begincidrange + 9469 + 20017 + 9465 + 20018 + 9470 + 8397 + 20019 + 9480 + 9476 + 20024 + 9478 + 20026 + 9471 + 8336 + 20029 + 7901 + 7973 + 20032 + 9475 + 9474 + 20033 + 7802 + 8358 + 20035 + 8149 + 20043 + 7953 + 20047 + 9479 + 9472 + 9477 + 20048 + 9497 + 20054 + 9493 + 20055 + 9484 + 8241 + 20057 + 9483 + 9487 + 9498 + 9481 + 20059 + 9486 + 8756 + 9491 + 8064 + 20061 + 9473 + 5635 + 20065 + 9495 + 9494 + 20067 + 9496 + 20070 + 7766 + 20073 + 9485 + 20076 + 8403 + 20077 + 8314 + 8398 + 20079 + 9488 + 20081 + 7765 + 20084 + 9482 + 20087 + 9489 + 20092 + 8106 + 20101 + 9502 + 7967 + 20102 + 9517 + 8733 + 20105 + 9522 + 20107 + 8571 + 20108 + 8623 + 20118 + 9516 + 20119 + 9512 + 20121 + 8332 + 20122 + 9519 + 20123 + 8636 + 20124 + 9501 + 20127 +endcidrange + +100 begincidrange + 9525 + 20129 + 8717 + 9510 + 20130 + 5729 + 9524 + 9514 + 9503 + 9521 + 9500 + 20131 + 9509 + 20134 + 8653 + 20139 + 8666 + 20140 + 8562 + 9534 + 20141 + 8271 + 20145 + 9539 + 20146 + 8663 + 20147 + 7740 + 20148 + 9513 + 20151 + 9505 + 20153 + 7935 + 20155 + 9535 + 20165 + 9540 + 20166 + 9507 + 7824 + 9530 + 9541 + 20169 + 9533 + 20170 + 8385 + 20171 + 8451 + 9504 + 9532 + 9531 + 9528 + 20173 + 9536 + 20177 + 8141 + 20178 + 7960 + 20181 + 9547 + 20185 + 9543 + 9551 + 20189 + 5823 + 20190 + 8880 + 20196 + 9542 + 20197 + 9548 + 20199 + 7834 + 9554 + 9520 + 9545 + 20201 + 9553 + 7882 + 20204 + 8402 + 20205 + 8120 + 20208 + 8313 + 20209 + 8619 + 20211 + 9549 + 7845 + 20213 + 8268 + 8320 + 20215 + 9837 + 20217 + 9527 + 20218 + 9546 +endcidrange + +100 begincidrange + 8632 + 20224 + 9550 + 20225 + 9468 + 9556 + 20227 + 20229 + 7996 + 20230 + 7893 + 20231 + 9558 + 20237 + 8808 + 20240 + 7894 + 20242 + 9559 + 9555 + 20250 + 9544 + 20253 + 5917 + 8412 + 20254 + 9561 + 20257 + 8087 + 9557 + 20261 + 8829 + 20264 + 9598 + 20267 + 8316 + 20270 + 9562 + 20271 + 9566 + 20273 + 7732 + 20275 + 8542 + 20285 + 9568 + 20286 + 8610 + 9044 + 20295 + 9571 + 9511 + 20297 + 9518 + 9560 + 20298 + 7963 + 20299 + 8835 + 20300 + 9572 + 20301 + 8352 + 20303 + 9573 + 20304 + 9569 + 20306 + 9570 + 20312 + 9580 + 20315 + 9581 + 8224 + 20318 + 9567 + 9578 + 6011 + 20320 + 9582 + 20323 + 9529 + 9564 + 20327 + 9576 + 9579 + 7791 + 20330 + 8132 + 9575 + 20331 + 9563 + 20332 + 9757 + 20335 + 9515 + 20347 + 9585 + 20348 + 9591 +endcidrange + +100 begincidrange + 20349 + 9506 + 20358 + 9523 + 20365 + 20367 + 8234 + 20369 + 9526 + 9587 + 9583 + 20370 + 8851 + 9592 + 20373 + 9584 + 20376 + 9589 + 20378 + 9537 + 9565 + 20383 + 8218 + 6105 + 20388 + 9594 + 8198 + 20391 + 8567 + 20392 + 9499 + 20394 + 9508 + 20395 + 9595 + 20398 + 8867 + 20402 + 9593 + 20407 + 9574 + 20408 + 8083 + 20413 + 9596 + 20414 + 9492 + 20425 + 9597 + 20427 + 9586 + 20428 + 9588 + 20434 + 8782 + 20436 + 8646 + 20437 + 8351 + 20441 + 9590 + 20442 + 8292 + 8895 + 9756 + 8798 + 20444 + 6199 + 20461 + 7797 + 20473 + 8317 + 20480 + 9151 + 8467 + 20481 + 9152 + 20483 + 7749 + 20485 + 8152 + 9156 + 20486 + 9154 + 8452 + 20487 + 8637 + 20488 + 8071 + 9155 + 20489 + 8809 + 20492 + 8003 + 20500 + 7966 + 9849 + 7915 + 20501 + 7989 +endcidrange + +100 begincidrange + 8330 + 20503 + 9159 + 9161 + 9158 + 20504 + 8783 + 20508 + 9163 + 20511 + 8691 + 20513 + 8695 + 9167 + 9166 + 9162 + 9165 + 20514 + 9168 + 20517 + 9836 + 20519 + 9153 + 20520 + 8174 + 9169 + 6293 + 8184 + 20521 + 9171 + 20524 + 9170 + 9172 + 7832 + 20527 + 7980 + 20532 + 9173 + 20533 + 7793 + 9873 + 20535 + 9157 + 20537 + 8986 + 20574 + 8468 + 20577 + 8836 + 20579 + 8732 + 20585 + 7806 + 8269 + 20586 + 8705 + 20590 + 7897 + 6387 + 20599 + 8114 + 20600 + 8786 + 20603 + 8057 + 20605 + 8535 + 20615 + 8639 + 20616 + 8735 + 20621 + 8253 + 20622 + 8213 + 20624 + 9893 + 20625 + 8534 + 20635 + 8516 + 20637 + 7825 + 8791 + 20638 + 8202 + 8338 + 20642 + 20647 + 8784 + 20652 + 7875 + 20656 + 6481 + 20678 + 8616 + 20684 + 9741 + 20699 + 9740 +endcidrange + +100 begincidrange + 20702 + 9742 + 20703 + 8242 + 20706 + 9739 + 20719 + 8899 + 20726 + 20734 + 7971 + 20756 + 6575 + 20766 + 9877 + 20772 + 9822 + 20789 + 9821 + 20794 + 9874 + 20796 + 9823 + 20798 + 8589 + 8445 + 20799 + 8000 + 20805 + 9317 + 20810 + 9319 + 20812 + 9318 + 20813 + 20818 + 8649 + 20835 + 8713 + 7881 + 8425 + 20836 + 8650 + 8518 + 9669 + 8668 + 20837 + 9310 + 20838 + 8527 + 20839 + 9670 + 6669 + 9671 + 8769 + 8586 + 7727 + 7900 + 20840 + 8383 + 8244 + 20843 + 9673 + 20846 + 9672 + 20850 + 8718 + 20852 + 9675 + 20853 + 8573 + 20859 + 8062 + 20861 + 9676 + 8131 + 20867 + 8377 + 20869 + 8577 + 20870 + 8154 + 20878 + 8563 + 7905 + 9677 + 20883 + 9678 + 8694 + 20887 + 8779 + 9681 + 20890 + 7872 + 20891 + 8200 + 20893 + 9680 + 20896 + 9682 +endcidrange + +100 begincidrange + 20898 + 7978 + 20899 + 7794 + 9683 + 20902 + 6763 + 8638 + 9684 + 8260 + 20904 + 9679 + 8435 + 20905 + 7936 + 20911 + 9420 + 20916 + 9880 + 20917 + 9848 + 20918 + 9422 + 20920 + 9423 + 20925 + 8376 + 20932 + 9424 + 20933 + 9425 + 20934 + 7924 + 20944 + 9115 + 20946 + 9854 + 20947 + 20949 + 9117 + 9119 + 20951 + 9121 + 20952 + 7921 + 20953 + 8734 + 20955 + 9122 + 20956 + 8523 + 7734 + 8501 + 20963 + 8109 + 20967 + 7763 + 20968 + 6857 + 20970 + 9123 + 8707 + 20971 + 7911 + 20972 + 9124 + 8343 + 7908 + 20974 + 8760 + 20978 + 9125 + 20980 + 8090 + 20982 + 8643 + 20984 + 7982 + 20990 + 9116 + 20999 + 9126 + 21002 + 9118 + 21006 + 8245 + 9127 + 21007 + 9128 + 21010 + 8309 + 21011 + 9129 + 9131 + 8171 + 9132 + 21013 + 8042 + 8441 + 21017 +endcidrange + +100 begincidrange + 9830 + 21019 + 9831 + 21023 + 7788 + 21024 + 9133 + 21027 + 6951 + 21037 + 8301 + 8770 + 7938 + 21055 + 8579 + 21057 + 7813 + 8681 + 21058 + 7767 + 21070 + 8869 + 9223 + 8138 + 21084 + 9218 + 8066 + 21085 + 9224 + 9220 + 21087 + 8497 + 21088 + 8580 + 21089 + 9219 + 21090 + 8302 + 9227 + 21091 + 7999 + 21101 + 8295 + 21104 + 7045 + 21112 + 8151 + 21117 + 7811 + 21118 + 9231 + 21121 + 9230 + 8391 + 9229 + 21128 + 9234 + 21134 + 8375 + 21136 + 9200 + 21153 + 9233 + 9236 + 21154 + 8560 + 21155 + 9221 + 8460 + 9237 + 21160 + 8294 + 21165 + 9042 + 9235 + 9232 + 9238 + 8433 + 21166 + 9226 + 21170 + 9225 + 21172 + 9240 + 21173 + 8103 + 21178 + 8700 + 21179 + 7139 + 8129 + 9222 + 21181 + 8860 + 21184 + 8270 + 21186 + 9242 + 9241 + 21187 +endcidrange + +100 begincidrange + 9228 + 21191 + 7721 + 21207 + 9825 + 21225 + 9892 + 8564 + 9827 + 9826 + 21226 + 21231 + 9845 + 21243 + 8524 + 7233 + 21262 + 9850 + 21267 + 9888 + 21277 + 9832 + 21283 + 7888 + 21284 + 8342 + 21285 + 9164 + 21286 + 9160 + 21290 + 8766 + 21291 + 9829 + 21307 + 9828 + 21313 + 8761 + 21314 + 8266 + 21334 + 9759 + 21338 + 9758 + 21340 + 7327 + 21344 + 9760 + 21349 + 9761 + 21350 + 9762 + 21360 + 9767 + 7737 + 9765 + 21361 + 9769 + 21368 + 9774 + 9771 + 21370 + 9770 + 9773 + 21381 + 9768 + 8633 + 21382 + 21394 + 9782 + 9776 + 21399 + 9784 + 21404 + 8205 + 9783 + 21405 + 9797 + 21414 + 9786 + 21415 + 9795 + 7421 + 21419 + 9792 + 21420 + 9789 + 9793 + 21423 + 9790 + 21424 + 9791 + 8128 + 21426 + 9787 + 21427 + 9794 + 21431 + 9796 + 21434 +endcidrange + +100 begincidrange + 9785 + 21442 + 9804 + 21443 + 9799 + 9803 + 21451 + 9801 + 21454 + 9800 + 21456 + 9802 + 8456 + 21457 + 21464 + 9805 + 21469 + 9780 + 21471 + 9809 + 21472 + 9808 + 9810 + 21474 + 9807 + 21477 + 9778 + 9806 + 9811 + 21480 + 9815 + 21481 + 9781 + 21482 + 9779 + 21483 + 9814 + 7515 + 21484 + 9812 + 21486 + 9816 + 21492 + 9813 + 7757 + 21494 + 9819 + 21502 + 9818 + 21503 + 9817 + 8238 + 9775 + 21504 + 9798 + 21508 + 9766 + 21509 + 9820 + 21516 + 9772 + 21521 + 9763 + 21531 + 9777 + 21532 + 7609 + 21565 + 8348 + 21567 + 9600 + 21570 + 8924 + 21572 + 7941 + 8331 + 21578 + 9601 + 21579 + 9603 + 9602 + 21594 + 8686 + 21595 + 8578 + 21606 + 8771 + 21611 + 9607 + 21612 + 9608 + 21613 + 21615 + 9604 + 21616 + 8701 + 21618 + 8687 + 21619 + 9610 +endcidrange + +100 begincidrange + 9612 + 21625 + 8007 + 21635 + 7965 + 21638 + 9613 + 21640 + 8144 + 9618 + 9615 + 21654 + 9620 + 7904 + 21662 + 9617 + 9621 + 21664 + 9623 + 21672 + 8374 + 21673 + 9624 + 21675 + 8438 + 21677 + 21692 + 9605 + 21697 + 9625 + 21698 + 9622 + 21707 + 9626 + 21711 + 9627 + 21712 + 21720 + 9629 + 21722 + 9630 + 21725 + 9036 + 21730 + 8004 + 21734 + 9824 + 9632 + 21740 + 9628 + 21743 + 9631 + 21744 + 8044 + 21745 + 9634 + 21759 + 8366 + 21762 + 9611 + 9635 + 21763 + 21770 + 9609 + 9637 + 21773 + 9636 + 21781 + 9638 + 9619 + 21783 + 9639 + 8738 + 9641 + 21787 + 21795 + 9640 + 21804 + 9606 + 21812 + 9633 + 9642 + 21816 + 9616 + 9614 + 21817 + 9864 + 21842 + 9886 + 9723 + 21845 + 8076 + 8692 + 21846 + 21847 + 8207 + 21863 + 8305 + 21874 + 9719 +endcidrange + +71 begincidrange + 21876 + 21877 + 9878 + 21881 + 9871 + 21885 + 8922 + 21901 + 7873 + 21909 + 7859 + 21913 + 9834 + 21919 + 9866 + 21920 + 9833 + 21922 + 9752 + 21924 + 21930 + 9754 + 21933 + 9843 + 21939 + 21961 + 8390 + 8811 + 21979 + 9427 + 7814 + 21982 + 9743 + 21983 + 9745 + 21987 + 9747 + 21989 + 9744 + 9746 + 8240 + 21991 + 9841 + 21992 + 9748 + 21994 + 9750 + 21997 + 9749 + 21998 + 8434 + 22003 + 9751 + 22007 + 22008 + 8247 + 22016 + 8371 + 22018 + 7970 + 9453 + 22021 + 7988 + 22024 + 2562 + 16595 + 8204 + 20611 + 4697 + 22032 + 22094 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK-EUC-V new file mode 100644 index 00000000000..de15bb6831f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK-EUC-V @@ -0,0 +1,97 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (GBK-EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (GBK-EUC-H) +%%BeginResource: CMap (GBK-EUC-V) +%%Title: (GBK-EUC-V Adobe GB1 2) +%%Version: 12.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/GBK-EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 2 def +end def + +/CMapName /GBK-EUC-V def +/CMapVersion 12.002 def +/CMapType 1 def + +/XUID [1 10 25378] def + +/WMode 1 def + +20 begincidrange + 575 + 574 + 598 + 7704 + 599 + 582 + 7706 + 578 + 580 + 573 + 7707 + 576 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7711 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK2K-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK2K-H new file mode 100644 index 00000000000..62a3b7b333f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK2K-H @@ -0,0 +1,5325 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (GBK2K-H) +%%Title: (GBK2K-H Adobe GB1 5) +%%Version: 1.005 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 5 def +end def + +/CMapName /GBK2K-H def +/CMapVersion 1.005 def +/CMapType 1 def + +/XUID [1 10 25459] def + +/WMode 0 def + +3 begincodespacerange + <00> <7F> + <81308130> + <8140> +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidchar +<81308436> 22354 +<81398139> 22448 +<81398b32> 4162 +<81398b33> 4707 +<81398b34> 4722 +<81398b35> 4709 +<81398b36> 4185 +<81398b37> 10131 +<81398b38> 1597 +<81398b39> 4867 +<81398c30> 3238 +<81398c31> 1592 +<81398c32> 3270 +<81398c33> 982 +<81398c34> 4765 +<81398c35> 4884 +<81398c36> 4879 +<81398c37> 2091 +<81398c38> 5017 +<81398c39> 1431 +<81398d30> 2543 +<81398d31> 4860 +<81398d32> 4710 +<81398d33> 4740 +<81398d34> 10778 +<81398d35> 3397 +<81398d36> 1150 +<81398d37> 4946 +<81398d38> 1228 +<81398d39> 5020 +<81398e30> 4283 +<81398e31> 2407 +<81398e32> 5523 +<81398e33> 3698 +<81398e34> 3414 +<81398e35> 5660 +<81398e36> 11565 +<81398e37> 3859 +<81398e38> 1398 +<81398e39> 2927 +<81398f30> 4656 +<81398f31> 5934 +<81398f32> 1386 +<81398f33> 3948 +<81398f34> 5302 +<81398f35> 3395 +<81398f36> 6004 +<81398f37> 3318 +<81398f38> 6165 +<81398f39> 1789 +<81399030> 2093 +<81399031> 2238 +<81399032> 1732 +<81399033> 6163 +<81399034> 1852 +<81399035> 5016 +<81399036> 5293 +<81399037> 5366 +<81399038> 1798 +<81399039> 5986 +<81399130> 5614 +<81399131> 5600 +<81399132> 3983 +<81399133> 1765 +<81399134> 12946 +<81399135> 3437 +<81399136> 4518 +<81399137> 6409 +<81399138> 3795 +<81399139> 1526 +<81399230> 2240 +<81399231> 1626 +<81399232> 3821 +<81399233> 3248 +<81399234> 4350 +<81399235> 4357 +<81399236> 2849 +<81399237> 3124 +<81399238> 4536 +<81399239> 1400 +<81399330> 6589 +<81399331> 3826 +<81399332> 1073 +<81399333> 2736 +<81399334> 3430 +<81399335> 3095 +<81399336> 3491 +<81399337> 2053 +<81399338> 4611 +<81399339> 1715 +<81399430> 4713 +<81399431> 5789 +<81399432> 3019 +<81399433> 4073 +<81399434> 2916 +<81399435> 3209 +<81399436> 4041 +<81399437> 4310 +<81399438> 1832 +<81399439> 3728 +endcidchar + +100 begincidchar +<81399530> 1733 +<81399531> 3379 +<81399532> 4264 +<81399533> 3650 +<81399534> 7110 +<81399535> 7008 +<81399536> 16063 +<81399537> 994 +<81399538> 3011 +<81399539> 2808 +<81399630> 2850 +<81399631> 2737 +<81399632> 3407 +<81399633> 3398 +<81399634> 3413 +<81399635> 16587 +<81399636> 1923 +<81399637> 4049 +<81399638> 2539 +<81399639> 4592 +<81399730> 2780 +<81399731> 7399 +<81399732> 7262 +<81399733> 3753 +<81399734> 4123 +<81399735> 4309 +<81399736> 2490 +<81399737> 1591 +<81399738> 7115 +<81399739> 1593 +<81399830> 6686 +<81399831> 3261 +<81399832> 1249 +<81399833> 4657 +<81399834> 4544 +<81399835> 2297 +<81399836> 3353 +<81399837> 5656 +<81399838> 4570 +<81399839> 7388 +<81399930> 3300 +<81399931> 17826 +<81399932> 7152 +<81399933> 1291 +<81399934> 4051 +<81399935> 3995 +<81399936> 4169 +<81399937> 18908 +<81399938> 8086 +<81399939> 2200 +<81399a30> 4093 +<81399a31> 1825 +<81399a32> 1528 +<81399a33> 7445 +<81399a34> 7504 +<81399a35> 7739 +<81399a36> 1285 +<81399a37> 4668 +<81399a38> 4672 +<81399a39> 3366 +<81399b30> 7803 +<81399b31> 3980 +<81399b32> 1250 +<81399b33> 19731 +<81399b34> 4191 +<81399b35> 4276 +<81399b36> 19992 +<81399b37> 2522 +<81399b38> 2241 +<81399b39> 7797 +<81399c30> 8317 +<81399c31> 1714 +<81399c32> 2542 +<81399c33> 7545 +<81399c34> 4303 +<81399c35> 20714 +<81399c36> 1636 +<81399c37> 2795 +<81399c38> 1770 +<81399c39> 8589 +<81399d30> 2289 +<81399d31> 4219 +<81399d32> 8713 +<81399d33> 7936 +<81399d34> 7924 +<81399d35> 3402 +<81399d36> 3438 +<81399d37> 3920 +<81399d38> 8301 +<81399d39> 1824 +<81399e30> 1754 +<81399e31> 7660 +<81399e32> 7888 +<81399e33> 5019 +<81399e34> 4704 +<81399e35> 1862 +<81399e36> 8761 +<81399e37> 8348 +<81399e38> 9864 +<81399e39> 2656 +endcidchar + +100 begincidchar +<81399f30> 8305 +<81399f31> 2704 +<81399f32> 21894 +<81399f33> 3465 +<81399f34> 1937 +<81399f35> 6741 +<81399f36> 9752 +<81399f37> 1509 +<81399f38> 1821 +<81399f39> 3466 +<8139a030> 1072 +<8139a031> 8390 +<8139a032> 7814 +<8139a033> 8247 +<8139a034> 7988 +<8139a035> 4851 +<8139a630> 22400 +<8139a634> 22357 +<8139a636> 22375 +<8139a735> 22390 +<8139a736> 22392 +<8139a737> 22391 +<8139a738> 22393 +<8139ee39> 22529 +<8179> 8281 +<8186> 8689 +<81ed> 8178 +<81f6> 8285 +<8253> 9884 +<8262> 8629 +<8274> 8908 +<827a> 8214 +<827d> 7778 +<827e> 10315 +<8280> 7968 +<8283> 8319 +<8290> 8284 +<82a5> 8596 +<82c8> 7781 +<82c9> 8833 +<82e1> 8909 +<82e2> 10407 +<82e3> 8458 +<82e4> 7742 +<82ed> 9855 +<82f2> 8750 +<82f7> 7830 +<82f8> 8907 +<82f9> 8812 +<82fa> 10424 +<82fb> 8471 +<8340> 10428 +<8341> 8424 +<8345> 8916 +<8348> 8121 +<834c> 8920 +<8353> 8415 +<8357> 8386 +<835e> 8597 +<8365> 8108 +<8366> 8915 +<8372> 8065 +<8378> 8720 +<8379> 10474 +<837a> 8911 +<837b> 10475 +<837c> 8723 +<837d> 10476 +<837e> 8164 +<8380> 8080 +<8386> 8918 +<8389> 8912 +<838a> 8910 +<838d> 9857 +<8394> 7798 +<839e> 8753 +<83a6> 7827 +<83ab> 8914 +<83ae> 8919 +<83af> 8917 +<83b0> 8913 +<83ba> 7909 +<83c9> 8229 +<83f6> 7887 +<8450> 8153 +<8471> 8904 +<8474> 8803 +<8477> 9859 +<8482> 7959 +<848e> 7979 +<8492> 8906 +<8493> 7833 +<849d> 8015 +<84a1> 8143 +<84a2> 8246 +<84a3> 7994 +<84a4> 10676 +<84a5> 8905 +<84a6> 8089 +<84a9> 8053 +endcidchar + +100 begincidchar +<84c5> 8126 +<84d3> 7885 +<84d4> 10719 +<84d5> 8617 +<84d6> 10720 +<84d7> 8678 +<84d8> 10721 +<84d9> 8487 +<84da> 8195 +<84dd> 8498 +<84ea> 8995 +<84ee> 8209 +<84f1> 8437 +<8551> 8901 +<8552> 8030 +<8553> 10771 +<8554> 8902 +<855e> 8431 +<8566> 8656 +<8587> 8897 +<858b> 7780 +<8592> 8697 +<8596> 8208 +<8597> 10831 +<8598> 8898 +<85a2> 7770 +<85b2> 7842 +<864a> 9069 +<8654> 8775 +<8668> 9068 +<8696> 8604 +<8699> 8393 +<86a1> 8688 +<86ca> 8459 +<86cb> 11063 +<86cc> 8414 +<86cd> 11064 +<86ce> 7850 +<86d1> 8748 +<86dc> 8408 +<86dd> 8896 +<86e1> 8303 +<86e8> 8609 +<86ee> 9081 +<86f4> 9074 +<8740> 8554 +<8744> 9084 +<8749> 8368 +<874a> 11113 +<874b> 9082 +<874c> 7796 +<874f> 9079 +<8757> 8012 +<875a> 9080 +<875b> 8655 +<875c> 9064 +<875d> 11125 +<875e> 9073 +<875f> 11126 +<8760> 9065 +<8766> 9844 +<877a> 9071 +<877d> 9072 +<877e> 11153 +<8780> 11154 +<8781> 9078 +<8782> 9075 +<8786> 9087 +<8787> 11158 +<8788> 9076 +<8789> 11159 +<878a> 8373 +<878d> 7899 +<878e> 9842 +<8793> 9070 +<8798> 8631 +<879d> 9077 +<87a3> 9090 +<87a7> 8350 +<87b3> 9067 +<87b4> 11193 +<87b5> 8249 +<87bb> 9887 +<87bf> 9085 +<87c0> 8693 +<87c1> 11202 +<87c2> 9089 +<87ca> 9083 +<87cb> 9086 +<87cc> 8652 +<87cf> 8923 +<87d2> 9066 +<87d3> 9865 +<87d4> 11214 +<87d5> 9879 +<87da> 8865 +<87f7> 9091 +<87f8> 7997 +<87f9> 11247 +<87fa> 8591 +endcidchar + +100 begincidchar +<8840> 8774 +<8841> 8776 +<8844> 8574 +<8845> 11254 +<8846> 8576 +<88ba> 9002 +<88cc> 8843 +<88d4> 8069 +<88d7> 8997 +<88df> 9004 +<88e5> 9006 +<88f2> 8709 +<88f3> 7736 +<88f6> 7795 +<894b> 8163 +<894c> 9017 +<894d> 11440 +<894e> 9003 +<894f> 11441 +<8950> 9005 +<8954> 8575 +<895d> 8615 +<895e> 11453 +<895f> 9007 +<896d> 7805 +<8971> 8406 +<897c> 7874 +<898b> 8882 +<8999> 7903 +<899e> 7929 +<89a6> 8409 +<89a7> 11517 +<89a8> 8157 +<89af> 8551 +<89ba> 8685 +<89be> 8199 +<89bf> 8998 +<89c0> 9001 +<89c4> 8018 +<89c5> 8251 +<89c6> 9000 +<89c7> 11540 +<89c8> 8999 +<89ce> 7723 +<89d1> 8878 +<89d8> 8009 +<89db> 8504 +<89f4> 8321 +<8a40> 11590 +<8a41> 8060 +<8a59> 9051 +<8a5a> 7902 +<8a5b> 11614 +<8a5c> 8098 +<8a5d> 11615 +<8a5e> 7930 +<8a79> 8877 +<8ae4> 8255 +<8b44> 7950 +<8b49> 9209 +<8b7a> 9212 +<8b8c> 8297 +<8b9e> 9207 +<8bb3> 9206 +<8bb9> 9213 +<8bbe> 9208 +<8bc6> 9210 +<8bc7> 11898 +<8bc8> 9214 +<8bc9> 8104 +<8bd4> 9217 +<8bdc> 9215 +<8be5> 9216 +<8beb> 8737 +<8bf0> 8482 +<8c44> 9211 +<8c4f> 8538 +<8c57> 8677 +<8c5c> 8279 +<8c8b> 8421 +<8c8c> 12017 +<8c8d> 8495 +<8c8e> 8355 +<8c8f> 8481 +<8c90> 12018 +<8c91> 8660 +<8c92> 8165 +<8c99> 7818 +<8c9a> 7735 +<8ca2> 8094 +<8ca3> 8870 +<8ca4> 8680 +<8ca5> 12032 +<8ca6> 7898 +<8ca7> 7865 +<8cc0> 9052 +<8cd2> 8272 +<8cd3> 7783 +<8cd4> 12074 +<8cd5> 9204 +endcidchar + +100 begincidchar +<8cd9> 8510 +<8cf9> 7958 +<8d73> 9097 +<8d74> 12165 +<8d75> 7863 +<8d7b> 8628 +<8d88> 9103 +<8d8f> 7962 +<8d9e> 9099 +<8db9> 9098 +<8de2> 9105 +<8de3> 12268 +<8de4> 8817 +<8de7> 9096 +<8df7> 9102 +<8dfe> 9101 +<8e46> 9100 +<8e56> 9104 +<8e57> 12313 +<8e58> 8243 +<8e59> 12314 +<8e5a> 8764 +<8e68> 8169 +<8e6e> 8277 +<8e6f> 12333 +<8e70> 9106 +<8e80> 8996 +<8e9b> 8515 +<8e9f> 8489 +<8ea4> 8823 +<8ea7> 7847 +<8eac> 8837 +<8ead> 12387 +<8eae> 9092 +<8ebd> 9095 +<8ebe> 9094 +<8ec3> 8848 +<8ec4> 12406 +<8ec5> 7748 +<8ecd> 7730 +<8ece> 9093 +<8ed6> 7955 +<8ed7> 8051 +<8eec> 8160 +<8f52> 8327 +<8f53> 7800 +<8f54> 9134 +<8f55> 7926 +<8f56> 7985 +<8f5d> 8261 +<8f64> 8568 +<8f86> 9205 +<8f87> 12521 +<8f88> 8821 +<8f95> 9838 +<8f96> 12534 +<8f97> 7856 +<8f9b> 8323 +<8f9c> 12538 +<8f9d> 8584 +<8fa1> 9852 +<8fbd> 8133 +<8fc4> 7841 +<8fc5> 12575 +<8fc6> 9107 +<8fcd> 7947 +<8fd8> 7804 +<909d> 9140 +<909e> 8318 +<90ba> 7907 +<90c0> 8341 +<90c1> 9147 +<90c5> 9145 +<90db> 7720 +<90dc> 9149 +<90ed> 9141 +<90f0> 9146 +<90f7> 9139 +<9142> 8546 +<914b> 7774 +<914c> 12819 +<914d> 7773 +<9151> 9143 +<9154> 7983 +<9155> 9439 +<9159> 9138 +<915a> 8526 +<915d> 8274 +<9161> 9148 +<9162> 12833 +<9163> 8427 +<916e> 8754 +<9176> 7743 +<917a> 8219 +<917b> 8380 +<917c> 9150 +<9184> 7854 +<918d> 7931 +<9191> 8329 +<9192> 12871 +endcidchar + +100 begincidchar +<9193> 9137 +<9197> 8644 +<919b> 8724 +<91a9> 8158 +<91aa> 8739 +<91ab> 9142 +<91ba> 9868 +<91bb> 9438 +<91bf> 9440 +<91c3> 9144 +<91cd> 7809 +<91d0> 8190 +<91d1> 8017 +<91d2> 8673 +<91d3> 12922 +<91d4> 9136 +<91d5> 12923 +<91d6> 8142 +<91d7> 12924 +<91d8> 8478 +<91d9> 8225 +<91df> 9441 +<91e2> 9379 +<91ea> 9380 +<91f0> 8819 +<91f1> 12944 +<91f2> 8624 +<92b6> 8657 +<92ce> 8476 +<92cf> 13097 +<92d0> 9053 +<92d4> 9858 +<92df> 8461 +<92e0> 8282 +<92fe> 8077 +<9350> 8703 +<935d> 8024 +<9370> 8539 +<9376> 7862 +<938c> 8411 +<939d> 9056 +<93a5> 9057 +<93a6> 13234 +<93a7> 8256 +<93b4> 8846 +<93b8> 8159 +<93bb> 9054 +<93bc> 13252 +<93bd> 7786 +<93c6> 8194 +<93cf> 8339 +<93d7> 9055 +<93db> 7852 +<93dc> 7764 +<93e1> 7944 +<93e4> 8384 +<93e5> 9058 +<93e9> 8544 +<93ea> 13288 +<93eb> 8605 +<93ec> 8078 +<93ed> 8749 +<93ee> 13289 +<93ef> 8263 +<93f0> 13290 +<93f1> 8802 +<93f4> 8039 +<93f5> 7858 +<93fa> 7849 +<93fe> 8140 +<9444> 8050 +<944d> 8344 +<9450> 7762 +<9451> 8356 +<9452> 7964 +<9453> 8847 +<9454> 13314 +<9455> 8173 +<9458> 9061 +<945b> 7725 +<945c> 8530 +<945d> 9062 +<945e> 13319 +<945f> 8442 +<9464> 9059 +<9465> 13324 +<9466> 8346 +<946e> 8252 +<9472> 8182 +<9473> 13335 +<9474> 9060 +<9475> 13336 +<9476> 7785 +<9477> 13337 +<9478> 9063 +<9479> 13338 +<947a> 8477 +<9480> 8793 +<9481> 8278 +<9482> 8547 +endcidchar + +100 begincidchar +<9487> 8105 +<9488> 8188 +<94a1> 7726 +<94b3> 7868 +<94b4> 13388 +<94b5> 8514 +<94bf> 8222 +<94c0> 7747 +<94cc> 9428 +<94d8> 8815 +<94e0> 7895 +<9572> 8493 +<9583> 8859 +<959e> 8790 +<959f> 9384 +<95b3> 7801 +<95ba> 8794 +<95cf> 9383 +<95d0> 13593 +<95d1> 9862 +<95d2> 9382 +<95d3> 13594 +<95d4> 8654 +<95e1> 9385 +<95e7> 8167 +<95f1> 8466 +<95f8> 8508 +<95fe> 8028 +<9656> 9412 +<967c> 7884 +<9767> 9322 +<976c> 8565 +<976d> 13863 +<976e> 9325 +<9796> 9323 +<9797> 8799 +<979d> 7886 +<97a3> 8818 +<97bf> 9331 +<97ee> 8702 +<97f7> 7934 +<9845> 9333 +<9849> 8714 +<984f> 8047 +<9871> 9320 +<9872> 14046 +<9873> 8448 +<9880> 14058 +<9881> 9334 +<988b> 7975 +<988c> 8407 +<98a0> 9340 +<98aa> 8097 +<98b6> 8874 +<98b7> 8197 +<98ba> 9324 +<98c7> 8254 +<98cb> 7756 +<98d0> 8506 +<98d3> 8708 +<98e3> 8387 +<98e4> 8512 +<98e5> 9335 +<98ef> 9332 +<98f2> 8413 +<9943> 8040 +<9944> 14171 +<9945> 8581 +<9966> 9330 +<996e> 7861 +<9975> 9336 +<997a> 8075 +<997b> 9348 +<9985> 9881 +<9989> 9346 +<998e> 8353 +<9991> 8082 +<9999> 7992 +<99a9> 9349 +<99b0> 9344 +<99b1> 9326 +<99b2> 14266 +<99b3> 9339 +<99b4> 9350 +<99b5> 9329 +<99bd> 9347 +<99be> 9328 +<99bf> 14274 +<99c0> 9321 +<99c1> 14275 +<99c2> 9343 +<99c9> 9327 +<99ce> 9345 +<99d1> 8736 +<99da> 8181 +<99e0> 8436 +<99e5> 9341 +<99e8> 9337 +<99ec> 9342 +<99f4> 9338 +endcidchar + +100 begincidchar +<9a4a> 8419 +<9a57> 8365 +<9a65> 9419 +<9a66> 14362 +<9a67> 8019 +<9a71> 8537 +<9a76> 8211 +<9a77> 7987 +<9a88> 7772 +<9a8c> 9352 +<9a91> 9351 +<9a97> 9354 +<9a9a> 9353 +<9a9b> 9355 +<9a9e> 8067 +<9aa2> 8463 +<9aa3> 8155 +<9aaa> 8367 +<9ad0> 9408 +<9ad6> 8813 +<9ada> 9409 +<9ae2> 8394 +<9ae3> 14468 +<9ae4> 8423 +<9ae5> 9410 +<9bd1> 9180 +<9bdc> 9179 +<9c53> 8286 +<9c59> 8772 +<9c5a> 9186 +<9c5b> 14706 +<9c5c> 8404 +<9c75> 8607 +<9c79> 7782 +<9c86> 8035 +<9c9d> 9181 +<9cab> 8555 +<9cca> 8885 +<9ccf> 7974 +<9ce6> 7779 +<9ce7> 8328 +<9cec> 7869 +<9ced> 14840 +<9cee> 9025 +<9cfb> 8011 +<9cfe> 8850 +<9d42> 8484 +<9d46> 8264 +<9d47> 9184 +<9d4d> 8311 +<9d4e> 14865 +<9d4f> 8762 +<9d61> 8369 +<9d68> 8001 +<9d69> 8220 +<9d6e> 8888 +<9d71> 8822 +<9d75> 8091 +<9d7b> 8095 +<9d7c> 14903 +<9d7d> 9674 +<9d7e> 14904 +<9d8a> 8382 +<9d8d> 8116 +<9d91> 9175 +<9d99> 8453 +<9da1> 9185 +<9da2> 8172 +<9da7> 9194 +<9dac> 9187 +<9dad> 8462 +<9db2> 8102 +<9db3> 8196 +<9dbe> 8093 +<9dc6> 9189 +<9dc9> 8804 +<9dcd> 9442 +<9dd2> 9182 +<9dd5> 7876 +<9de1> 8886 +<9de2> 8361 +<9df1> 8491 +<9df4> 8357 +<9df7> 9867 +<9dfa> 8054 +<9dfd> 8557 +<9dfe> 15007 +<9e45> 8193 +<9e48> 8593 +<9e49> 7760 +<9e52> 8092 +<9e53> 15023 +<9e54> 9178 +<9e55> 15024 +<9e56> 8275 +<9e5d> 9193 +<9e5e> 9188 +<9e61> 8661 +<9e62> 15033 +<9e63> 9190 +endcidchar + +100 begincidchar +<9e67> 9183 +<9e6c> 7759 +<9e6f> 9177 +<9e72> 8212 +<9e73> 15045 +<9e74> 9196 +<9e75> 9195 +<9e7b> 9176 +<9e7c> 9198 +<9e85> 9870 +<9e86> 15058 +<9e87> 9197 +<9e91> 8186 +<9e96> 9174 +<9e97> 9192 +<9ea2> 8454 +<9ea6> 8203 +<9ea9> 8550 +<9eae> 9199 +<9eb3> 8585 +<9eb4> 8280 +<9eb7> 9191 +<9ef5> 8611 +<9f4e> 8570 +<9f6f> 8613 +<9f92> 8226 +<9f98> 9430 +<9fa6> 9018 +<9fa9> 7918 +<9fac> 9429 +<9fc9> 8744 +<9fcd> 9431 +<9fe1> 8444 +<9feb> 7815 +<9fee> 9432 +<9ff4> 7866 +<9ffd> 8473 +<9ffe> 15342 + 8556 + 9433 + 8743 + 7775 + 8863 + 8029 + 8124 + 15370 + 9434 + 8521 + 8262 + 8192 + 8592 + 8712 + 15414 + 7910 + 9411 + 8396 + 9024 + 7889 + 8620 + 8879 + 22353 + 10018 + 7703 + 8630 + 7741 + 8757 + 15560 + 9111 + 9109 + 8767 + 8490 + 7890 + 15595 + 9110 + 9112 + 15596 + 8354 + 15597 + 8036 + 8235 + 15600 + 9108 + 8505 + 15601 + 8543 + 8641 + 9114 + 9113 + 8640 + 9312 + 9308 + 8541 + 8741 + 8298 + 9313 + 9307 + 9314 + 8020 + 9311 + 8428 +endcidchar + +100 begincidchar + 9309 + 9315 + 9316 + 9381 + 7792 + 8335 + 7746 + 8014 + 7857 + 7819 + 8134 + 9646 + 7937 + 8704 + 9650 + 7831 + 16025 + 8363 + 9651 + 8232 + 16038 + 16039 + 16040 + 9649 + 9644 + 7758 + 8706 + 9643 + 8838 + 16057 + 9645 + 16058 + 9654 + 16059 + 8675 + 8751 + 8549 + 9655 + 7913 + 7717 + 16083 + 9664 + 16107 + 8858 + 8814 + 16126 + 8125 + 16127 + 8068 + 8370 + 16128 + 8259 + 9860 + 16205 + 9455 + 9454 + 8308 + 9863 + 9456 + 9869 + 8864 + 8107 + 9896 + 9449 + 9445 + 16366 + 8698 + 8520 + 9444 + 9446 + 8439 + 16413 + 8299 + 8871 + 9452 + 9451 + 9443 + 9450 + 16471 + 7826 + 7719 + 8166 + 9447 + 8210 + 7916 + 9448 + 8038 + 9436 + 9890 + 9437 + 8206 + 16581 + 9435 + 7864 + 8853 + 7808 + 9847 + 9764 + 8041 + 8747 +endcidchar + +100 begincidchar + 9599 + 8027 + 8603 + 16704 + 9853 + 8608 + 8582 + 16738 + 8429 + 9657 + 8170 + 7844 + 8417 + 16756 + 9656 + 8800 + 16757 + 8418 + 8513 + 8135 + 7745 + 9700 + 8070 + 8115 + 7919 + 8868 + 16912 + 9704 + 9699 + 8465 + 9702 + 9703 + 8257 + 9706 + 16970 + 8079 + 16971 + 9708 + 9707 + 8400 + 8221 + 16992 + 8183 + 7821 + 9705 + 9710 + 8250 + 9875 + 9701 + 9709 + 17024 + 8201 + 17025 + 8293 + 9891 + 9717 + 7932 + 8228 + 9883 + 17108 + 9715 + 17109 + 8921 + 17110 + 9716 + 17111 + 9243 + 8136 + 17115 + 8059 + 17116 + 9245 + 17117 + 8780 + 8008 + 9244 + 8447 + 8602 + 17118 + 8337 + 8359 + 9251 + 7835 + 9250 + 17123 + 8464 + 17124 + 8845 + 8049 + 7928 + 9249 + 7923 + 8625 + 9254 + 9253 + 8480 + 8474 + 9252 + 17143 + 9256 +endcidchar + +100 begincidchar + 9258 + 9257 + 17146 + 8852 + 17147 + 8894 + 17148 + 7729 + 9260 + 17156 + 8117 + 9259 + 8111 + 8296 + 8676 + 7969 + 17174 + 8449 + 8572 + 8522 + 9261 + 8148 + 17184 + 8145 + 7731 + 17192 + 9263 + 9262 + 17195 + 9264 + 8667 + 8536 + 8130 + 8889 + 17212 + 9270 + 7822 + 9273 + 8645 + 9271 + 8594 + 17222 + 9274 + 7961 + 8588 + 7744 + 8883 + 8287 + 9272 + 9266 + 8820 + 17226 + 7836 + 9265 + 8325 + 9269 + 9275 + 8119 + 9267 + 8276 + 8670 + 17240 + 9268 + 9277 + 8073 + 9276 + 8046 + 7896 + 17246 + 7871 + 9285 + 17247 + 8777 + 9281 + 17250 + 7751 + 8022 + 8326 + 8598 + 17255 + 9283 + 9279 + 17256 + 8227 + 17257 + 9282 + 9278 + 17260 + 9894 + 9038 + 9286 + 9291 + 9284 + 9255 + 9292 + 7951 + 17286 + 9287 + 9289 + 9288 +endcidchar + +100 begincidchar + 8642 + 8558 + 7939 + 17296 + 9290 + 8540 + 8891 + 9296 + 17299 + 9876 + 9295 + 9718 + 8273 + 17300 + 9294 + 8890 + 8045 + 9298 + 9297 + 9301 + 17318 + 8841 + 8470 + 9300 + 8443 + 9280 + 8486 + 8033 + 9885 + 17335 + 8074 + 9302 + 9305 + 9304 + 8110 + 8730 + 8058 + 9293 + 9303 + 9299 + 17353 + 9248 + 17354 + 8671 + 9861 + 17355 + 7790 + 8740 + 9840 + 17359 + 8634 + 17360 + 9306 + 8191 + 9698 + 17392 + 9882 + 7914 + 7724 + 8290 + 9457 + 17425 + 9458 + 9714 + 8725 + 8622 + 8416 + 9666 + 17520 + 9665 + 8488 + 17542 + 8601 + 8215 + 7840 + 8485 + 8525 + 17561 + 9668 + 8349 + 8842 + 17562 + 9667 + 8569 + 8248 + 8533 + 8658 + 9415 + 8825 + 8483 + 9413 + 9417 + 8340 + 8854 + 7799 + 7942 + 8101 + 17712 + 8345 + 7853 +endcidchar + +100 begincidchar + 9416 + 8360 + 8223 + 17732 + 8389 + 17733 + 9418 + 8176 + 17742 + 9414 + 8797 + 8926 + 8236 + 8545 + 8763 + 8665 + 8139 + 8137 + 7777 + 9711 + 17818 + 8088 + 17821 + 9712 + 8072 + 8696 + 8994 + 9014 + 8875 + 8127 + 8061 + 9011 + 18004 + 8013 + 9012 + 8177 + 8587 + 9033 + 8715 + 9030 + 9031 + 18078 + 8595 + 9889 + 8034 + 9037 + 9032 + 7776 + 18133 + 9029 + 7954 + 8216 + 9013 + 9020 + 9839 + 9041 + 8096 + 9016 + 8731 + 9026 + 9039 + 9021 + 9028 + 9009 + 18228 + 9035 + 18229 + 9019 + 9040 + 7860 + 8614 + 8651 + 9045 + 9022 + 18259 + 8052 + 18260 + 9008 + 9856 + 8410 + 9034 + 8081 + 18279 + 8455 + 9023 + 8180 + 9027 + 8722 + 8711 + 9049 + 8788 + 18333 + 9010 + 7718 + 9047 + 9048 + 8258 + 8531 + 8379 + 9050 +endcidchar + +100 begincidchar + 9046 + 9015 + 8185 + 9043 + 8289 + 18386 + 7829 + 8265 + 18406 + 8002 + 8168 + 9690 + 9687 + 8494 + 8626 + 18571 + 8606 + 9692 + 8300 + 8742 + 9696 + 8827 + 9694 + 9697 + 9685 + 7787 + 18646 + 9691 + 7817 + 9689 + 18654 + 8721 + 8745 + 9686 + 9693 + 9695 + 8175 + 18679 + 9688 + 7977 + 7771 + 8310 + 8855 + 9872 + 8511 + 8600 + 18718 + 7816 + 8844 + 18733 + 9713 + 8204 + 7768 + 8876 + 9895 + 9846 + 18823 + 8161 + 9659 + 9662 + 8925 + 9661 + 7722 + 9660 + 9658 + 9663 + 8583 + 18893 + 9835 + 7807 + 8621 + 8086 + 7986 + 8324 + 8502 + 18925 + 9400 + 9402 + 9404 + 8420 + 18941 + 9401 + 9405 + 9406 + 9407 + 8146 + 8189 + 18954 + 9403 + 7981 + 9737 + 18980 + 9738 + 18981 + 7828 + 8927 + 7883 + 7949 + 8055 + 18992 +endcidchar + +100 begincidchar + 8683 + 18993 + 8929 + 18994 + 8559 + 18995 + 8928 + 8682 + 18998 + 8930 + 8395 + 18999 + 8056 + 7906 + 19002 + 8690 + 19003 + 8528 + 8147 + 19007 + 8933 + 7922 + 8479 + 8669 + 8532 + 19019 + 8935 + 8834 + 8934 + 8936 + 8932 + 19038 + 8810 + 19039 + 8939 + 19040 + 8937 + 8381 + 8938 + 8893 + 7838 + 8950 + 8679 + 8726 + 8503 + 8492 + 19053 + 7784 + 8946 + 7991 + 8947 + 19054 + 8943 + 8016 + 7952 + 8648 + 19055 + 8945 + 8944 + 8942 + 19063 + 8941 + 8862 + 8940 + 8162 + 8446 + 19073 + 7855 + 8758 + 19076 + 8951 + 8765 + 19080 + 7810 + 8118 + 19081 + 8612 + 8618 + 8952 + 8529 + 19082 + 8032 + 8519 + 8517 + 19089 + 8156 + 8961 + 7925 + 8728 + 7878 + 8960 + 19101 + 8884 + 8553 + 19104 + 8957 + 19105 + 8426 + 19106 + 8948 +endcidchar + +100 begincidchar + 19107 + 8955 + 19108 + 8956 + 8231 + 8288 + 8959 + 8958 + 7879 + 19115 + 8972 + 8949 + 19119 + 8966 + 19120 + 8970 + 8659 + 8963 + 19124 + 8967 + 8971 + 8031 + 19127 + 8969 + 8962 + 7940 + 8861 + 19130 + 8699 + 19131 + 8968 + 19132 + 8364 + 19133 + 8334 + 8965 + 8599 + 19134 + 8561 + 8856 + 8023 + 8322 + 19141 + 8977 + 8964 + 19145 + 8975 + 7733 + 19146 + 8401 + 8976 + 8099 + 19147 + 8662 + 8710 + 8973 + 8978 + 8333 + 8979 + 8931 + 8122 + 8312 + 8840 + 8982 + 8043 + 8980 + 19192 + 8496 + 8981 + 8552 + 19193 + 8388 + 8984 + 8729 + 8727 + 8405 + 8010 + 8768 + 7891 + 7753 + 9755 + 7789 + 8440 + 19236 + 8187 + 8985 + 8974 + 19242 + 8983 + 8392 + 7933 + 7739 + 8831 + 19329 + 7948 + 7769 + 7972 + 8378 + 8037 + 7920 +endcidchar + +100 begincidchar + 8548 + 7984 + 8801 + 19334 + 19335 + 8866 + 9387 + 19336 + 9391 + 7912 + 7993 + 19337 + 7752 + 8304 + 7848 + 19338 + 9388 + 7927 + 8566 + 9389 + 19339 + 8315 + 8005 + 9386 + 8267 + 8239 + 8026 + 9392 + 19340 + 8887 + 8063 + 19341 + 8805 + 9394 + 8475 + 7761 + 19348 + 9396 + 9395 + 19353 + 7839 + 19354 + 8472 + 19355 + 8372 + 9135 + 8635 + 8306 + 8085 + 19356 + 7946 + 9398 + 8849 + 9397 + 8824 + 7892 + 8179 + 8873 + 9399 + 7976 + 8457 + 8903 + 9390 + 8881 + 8806 + 19377 + 8795 + 8900 + 19378 + 8469 + 19379 + 8746 + 9393 + 8509 + 7957 + 8796 + 7956 + 8826 + 8430 + 9720 + 8084 + 8752 + 9725 + 9728 + 9734 + 9727 + 9724 + 7820 + 9730 + 19571 + 8781 + 19572 + 9732 + 9726 + 9731 + 9729 + 9733 + 7843 + 9736 + 9735 +endcidchar + +100 begincidchar + 8432 + 7803 + 8807 + 7990 + 8150 + 8672 + 19616 + 9356 + 9357 + 8450 + 9364 + 9363 + 9358 + 8857 + 9361 + 9366 + 9359 + 9362 + 19647 + 9367 + 8113 + 19652 + 9370 + 19653 + 9369 + 19654 + 8792 + 9368 + 9371 + 19662 + 7945 + 8422 + 8230 + 9375 + 8025 + 19672 + 7995 + 9372 + 7738 + 8283 + 8048 + 9376 + 8507 + 7943 + 8816 + 8759 + 9426 + 19692 + 8627 + 8773 + 9377 + 8872 + 8828 + 8112 + 9378 + 8006 + 19713 + 9088 + 9365 + 19714 + 9360 + 7728 + 7837 + 7755 + 7754 + 8362 + 9851 + 9202 + 19771 + 8830 + 19772 + 8217 + 8123 + 8787 + 19797 + 7998 + 7846 + 8590 + 8684 + 19801 + 7870 + 19802 + 8778 + 8499 + 7812 + 8399 + 8674 + 19815 + 8719 + 19816 + 8233 + 19817 + 8307 + 8021 + 9201 + 19820 + 7750 + 8291 + 9203 + 8990 +endcidchar + +100 begincidchar + 8755 + 8992 + 8647 + 8892 + 19895 + 8988 + 19896 + 8785 + 7867 + 8839 + 19914 + 8237 + 7851 + 19915 + 8989 + 19916 + 8991 + 8987 + 8993 + 8789 + 7823 + 8716 + 8100 + 8347 + 8664 + 19990 + 9722 + 19991 + 9721 + 8500 + 19994 + 9464 + 19995 + 9463 + 7880 + 9462 + 8832 + 7877 + 9467 + 20003 + 20004 + 9466 + 20005 + 7917 + 9469 + 20017 + 9465 + 20018 + 9470 + 8397 + 9480 + 9476 + 9478 + 9471 + 8336 + 7901 + 7973 + 20032 + 9475 + 9474 + 7802 + 8358 + 8149 + 7953 + 20047 + 9479 + 9472 + 9477 + 9497 + 20054 + 9493 + 9484 + 8241 + 9483 + 9487 + 9498 + 9481 + 9486 + 8756 + 9491 + 8064 + 9473 + 9495 + 9494 + 9496 + 7766 + 9485 + 20076 + 8403 + 8314 + 8398 + 9488 + 7765 + 9482 + 8106 + 20101 + 9502 + 7967 + 9517 + 8733 +endcidchar + +100 begincidchar + 9522 + 20107 + 8571 + 8623 + 20118 + 9516 + 9512 + 20121 + 8332 + 20122 + 9519 + 20123 + 8636 + 9501 + 9525 + 20129 + 8717 + 9510 + 20130 + 9524 + 9514 + 9503 + 9521 + 9500 + 9509 + 8653 + 20139 + 8666 + 20140 + 8562 + 9534 + 8271 + 20145 + 9539 + 20146 + 8663 + 20147 + 7740 + 9513 + 9505 + 7935 + 9535 + 20165 + 9540 + 9507 + 7824 + 9530 + 9541 + 20169 + 9533 + 20170 + 8385 + 8451 + 9504 + 9532 + 9531 + 9528 + 9536 + 20177 + 8141 + 7960 + 9547 + 9543 + 20189 + 8880 + 20196 + 9542 + 9548 + 7834 + 9554 + 9520 + 9545 + 9553 + 7882 + 20204 + 8402 + 8120 + 20208 + 8313 + 8619 + 9549 + 7845 + 8268 + 8320 + 9837 + 20217 + 9527 + 9546 + 8632 + 20224 + 9550 + 9468 + 9556 + 20229 + 7996 + 20230 + 7893 + 9558 + 8808 + 7894 +endcidchar + +100 begincidchar + 9559 + 9555 + 9544 + 20253 + 8412 + 9561 + 8087 + 9557 + 8829 + 9598 + 8316 + 20270 + 9562 + 9566 + 7732 + 8542 + 20285 + 9568 + 8610 + 9044 + 9571 + 9511 + 20297 + 9518 + 9560 + 20298 + 7963 + 20299 + 8835 + 20300 + 9572 + 8352 + 20303 + 9573 + 9569 + 9570 + 9580 + 9581 + 8224 + 9567 + 9578 + 9582 + 9529 + 9564 + 9579 + 7791 + 20330 + 8132 + 9575 + 20331 + 9563 + 9757 + 9515 + 20347 + 9585 + 20348 + 9591 + 9506 + 9523 + 8234 + 20369 + 9526 + 9587 + 9583 + 8851 + 9592 + 9584 + 9589 + 9565 + 8218 + 9594 + 8198 + 20391 + 8567 + 9499 + 20394 + 9508 + 9595 + 8867 + 9593 + 20407 + 9574 + 8083 + 20413 + 9596 + 9492 + 9597 + 20427 + 9586 + 9588 + 8782 + 20436 + 8646 + 8351 + 20441 + 9590 + 8292 + 8895 + 9756 + 8798 +endcidchar + +100 begincidchar + 7797 + 8317 + 20480 + 9151 + 8467 + 9152 + 7749 + 20485 + 8152 + 9156 + 20486 + 9154 + 8452 + 20487 + 8637 + 20488 + 8071 + 9155 + 8809 + 8003 + 20500 + 7966 + 9849 + 7915 + 7989 + 8330 + 20503 + 9159 + 9161 + 9158 + 8783 + 9163 + 8691 + 20513 + 8695 + 9167 + 9166 + 9162 + 9165 + 9168 + 9836 + 20519 + 9153 + 20520 + 8174 + 9169 + 8184 + 9171 + 9170 + 9172 + 7832 + 7980 + 20532 + 9173 + 7793 + 9873 + 9157 + 8986 + 8468 + 8836 + 8732 + 20585 + 7806 + 8269 + 8705 + 7897 + 20599 + 8114 + 8786 + 8057 + 8535 + 20615 + 8639 + 8735 + 20621 + 8253 + 8213 + 20624 + 9893 + 8534 + 8516 + 20637 + 7825 + 8791 + 8202 + 8338 + 8784 + 7875 + 8616 + 9741 + 9740 + 20702 + 9742 + 8242 + 9739 + 8899 + 7971 + 9877 + 9822 + 9821 +endcidchar + +100 begincidchar + 9874 + 9823 + 20798 + 8589 + 8445 + 8000 + 9317 + 9319 + 20812 + 9318 + 8649 + 20835 + 8713 + 7881 + 8425 + 20836 + 8650 + 8518 + 9669 + 8668 + 20837 + 9310 + 20838 + 8527 + 20839 + 9670 + 9671 + 8769 + 8586 + 7727 + 7900 + 8383 + 8244 + 9673 + 9672 + 8718 + 20852 + 9675 + 8573 + 8062 + 9676 + 8131 + 8377 + 20869 + 8577 + 8154 + 8563 + 7905 + 9677 + 9678 + 8694 + 8779 + 9681 + 20890 + 7872 + 8200 + 9680 + 9682 + 20898 + 7978 + 7794 + 9683 + 8638 + 9684 + 8260 + 20904 + 9679 + 8435 + 7936 + 20916 + 9880 + 20917 + 9848 + 9422 + 9423 + 8376 + 20932 + 9424 + 20933 + 9425 + 7924 + 9115 + 20946 + 9854 + 9117 + 20951 + 9121 + 20952 + 7921 + 8734 + 20955 + 9122 + 8523 + 7734 + 8501 + 8109 + 20967 + 7763 + 20970 + 9123 +endcidchar + +100 begincidchar + 8707 + 20971 + 7911 + 9124 + 8343 + 7908 + 8760 + 9125 + 8090 + 8643 + 7982 + 9116 + 9126 + 9118 + 21006 + 8245 + 9127 + 9128 + 21010 + 8309 + 9131 + 8171 + 9132 + 8042 + 8441 + 9830 + 9831 + 21023 + 7788 + 9133 + 8301 + 8770 + 7938 + 8579 + 21057 + 7813 + 8681 + 7767 + 8869 + 9223 + 8138 + 21084 + 9218 + 8066 + 9224 + 9220 + 21087 + 8497 + 21088 + 8580 + 21089 + 9219 + 21090 + 8302 + 9227 + 7999 + 8295 + 8151 + 21117 + 7811 + 9231 + 9230 + 8391 + 9229 + 9234 + 8375 + 9200 + 21153 + 9233 + 9236 + 21154 + 8560 + 9221 + 8460 + 9237 + 8294 + 21165 + 9042 + 9235 + 9232 + 8433 + 9226 + 9225 + 21172 + 9240 + 8103 + 21178 + 8700 + 8129 + 9222 + 8860 + 8270 + 21186 + 9242 + 9241 + 9228 + 7721 + 9825 + 21225 + 9892 +endcidchar + +100 begincidchar + 8564 + 9827 + 9826 + 9845 + 8524 + 9850 + 9888 + 9832 + 21283 + 7888 + 21284 + 8342 + 21285 + 9164 + 9160 + 21290 + 8766 + 9829 + 9828 + 21313 + 8761 + 8266 + 9759 + 9758 + 9760 + 21349 + 9761 + 9762 + 21360 + 9767 + 7737 + 9765 + 9769 + 9774 + 9771 + 9770 + 9773 + 21381 + 9768 + 8633 + 9782 + 9776 + 9784 + 21404 + 8205 + 9783 + 9797 + 21414 + 9786 + 9795 + 21419 + 9792 + 9789 + 9793 + 21423 + 9790 + 9791 + 8128 + 21426 + 9794 + 9796 + 9785 + 21442 + 9804 + 9799 + 9803 + 9801 + 9800 + 21456 + 9802 + 8456 + 9805 + 9780 + 21471 + 9809 + 9808 + 9810 + 9807 + 9778 + 9806 + 9811 + 21480 + 9815 + 21481 + 9781 + 21482 + 9779 + 21483 + 9814 + 9812 + 9816 + 9813 + 7757 + 9819 + 21502 + 9818 + 21503 + 9817 + 8238 + 9775 +endcidchar + +100 begincidchar + 9798 + 21508 + 9766 + 9820 + 9772 + 9763 + 21531 + 9777 + 8348 + 9600 + 8924 + 7941 + 8331 + 21578 + 9601 + 9603 + 9602 + 21594 + 8686 + 8578 + 8771 + 21611 + 9607 + 21612 + 9608 + 21615 + 9604 + 8701 + 21618 + 8687 + 9610 + 9612 + 8007 + 7965 + 9613 + 8144 + 9618 + 9615 + 9620 + 7904 + 9617 + 9621 + 9623 + 21672 + 8374 + 9624 + 8438 + 9605 + 21697 + 9625 + 9622 + 9626 + 21711 + 9627 + 9629 + 9630 + 9036 + 8004 + 9824 + 9632 + 9628 + 21743 + 9631 + 21744 + 8044 + 9634 + 8366 + 21762 + 9611 + 9635 + 9609 + 9637 + 9636 + 9638 + 9619 + 9639 + 8738 + 9641 + 9640 + 9606 + 9633 + 9642 + 21816 + 9616 + 9614 + 9864 + 9886 + 9723 + 21845 + 8076 + 8692 + 21846 + 8207 + 8305 + 9719 + 21876 + 9878 + 9871 + 8922 + 7873 +endcidchar + +37 begincidchar + 7859 + 9834 + 21919 + 9866 + 9833 + 9754 + 9843 + 8390 + 8811 + 9427 + 7814 + 21982 + 9743 + 9745 + 9747 + 9744 + 9746 + 8240 + 21991 + 9841 + 9748 + 9750 + 21997 + 9749 + 8434 + 9751 + 22007 + 8247 + 8371 + 7970 + 9453 + 7988 + 2562 + 16595 + 8204 + 20611 + 4697 +endcidchar + +100 begincidrange +<20> <7e> 1 +<8138fd38> <8138fd39> 22428 +<8138fe30> <8138fe39> 22430 +<81398130> <81398137> 22440 +<81398230> <81398239> 22449 +<81398330> <81398339> 22459 +<81398430> <81398439> 22469 +<81398530> <81398539> 22479 +<81398630> <81398639> 22489 +<81398730> <81398739> 22499 +<81398830> <81398839> 22509 +<81398930> <81398939> 22519 +<8139a533> <8139a535> 22395 +<8139a538> <8139a539> 22398 +<8139a836> <8139a838> 22401 +<8139b434> <8139b439> 22404 +<8139b530> <8139b539> 22410 +<8139b630> <8139b637> 22420 +<8139ef30> <8139ef39> 22530 +<8139f030> <8139f039> 22540 +<8139f130> <8139f139> 22550 +<8139f230> <8139f239> 22560 +<8139f330> <8139f339> 22570 +<8139f430> <8139f439> 22580 +<8139f530> <8139f539> 22590 +<8139f630> <8139f639> 22600 +<8139f730> <8139f739> 22610 +<8139f830> <8139f839> 22620 +<8139f930> <8139f939> 22630 +<8139fa30> <8139fa39> 22640 +<8139fb30> <8139fb39> 22650 +<8139fc30> <8139fc39> 22660 +<8139fd30> <8139fd39> 22670 +<8139fe30> <8139fe39> 22680 +<8140> <8178> 10072 +<817a> <817e> 10129 +<8180> <8185> 10134 +<8187> <81ec> 10140 +<81ee> <81f5> 10242 +<81f7> <81fe> 10250 +<82308130> <82308139> 22690 +<82308230> <82308239> 22700 +<82308330> <82308339> 22710 +<82308430> <82308439> 22720 +<82308530> <82308539> 22730 +<82308630> <82308639> 22740 +<82308730> <82308739> 22750 +<82308830> <82308839> 22760 +<82308930> <82308939> 22770 +<82308a30> <82308a39> 22780 +<82308b30> <82308b39> 22790 +<82308c30> <82308c39> 22800 +<82308d30> <82308d39> 22810 +<82308e30> <82308e39> 22820 +<82308f30> <82308f39> 22830 +<82309030> <82309039> 22840 +<82309130> <82309139> 22850 +<82309230> <82309239> 22860 +<82309330> <82309339> 22870 +<82309430> <82309439> 22880 +<82309530> <82309539> 22890 +<82309630> <82309639> 22900 +<82309730> <82309739> 22910 +<82309830> <82309839> 22920 +<82309930> <82309939> 22930 +<82309a30> <82309a39> 22940 +<82309b30> <82309b39> 22950 +<82309c30> <82309c39> 22960 +<82309d30> <82309d39> 22970 +<82309e30> <82309e39> 22980 +<82309f30> <82309f39> 22990 +<8230a030> <8230a039> 23000 +<8230a130> <8230a139> 23010 +<8230a230> <8230a239> 23020 +<8230a330> <8230a339> 23030 +<8230a430> <8230a439> 23040 +<8230a530> <8230a539> 23050 +<8230a630> <8230a639> 23060 +<8230a730> <8230a739> 23070 +<8230a830> <8230a839> 23080 +<8230a930> <8230a939> 23090 +<8230aa30> <8230aa39> 23100 +<8230ab30> <8230ab39> 23110 +<8230ac30> <8230ac39> 23120 +<8230ad30> <8230ad39> 23130 +<8230ae30> <8230ae39> 23140 +<8230af30> <8230af39> 23150 +<8230b030> <8230b039> 23160 +<8230b130> <8230b139> 23170 +<8230b230> <8230b239> 23180 +<8230b330> <8230b339> 23190 +<8230b430> <8230b439> 23200 +<8230b530> <8230b539> 23210 +<8230b630> <8230b639> 23220 +<8230b730> <8230b739> 23230 +<8230b830> <8230b839> 23240 +<8230b930> <8230b939> 23250 +<8230ba30> <8230ba39> 23260 +<8230bb30> <8230bb39> 23270 +<8230bc30> <8230bc39> 23280 +endcidrange + +100 begincidrange +<8230bd30> <8230bd39> 23290 +<8230be30> <8230be39> 23300 +<8230bf30> <8230bf39> 23310 +<8230c030> <8230c039> 23320 +<8230c130> <8230c139> 23330 +<8230c230> <8230c239> 23340 +<8230c330> <8230c339> 23350 +<8230c430> <8230c439> 23360 +<8230c530> <8230c539> 23370 +<8230c630> <8230c639> 23380 +<8230c730> <8230c739> 23390 +<8230c830> <8230c839> 23400 +<8230c930> <8230c939> 23410 +<8230ca30> <8230ca39> 23420 +<8230cb30> <8230cb39> 23430 +<8230cc30> <8230cc39> 23440 +<8230cd30> <8230cd39> 23450 +<8230ce30> <8230ce39> 23460 +<8230cf30> <8230cf39> 23470 +<8230d030> <8230d039> 23480 +<8230d130> <8230d139> 23490 +<8230d230> <8230d239> 23500 +<8230d330> <8230d339> 23510 +<8230d430> <8230d439> 23520 +<8230d530> <8230d539> 23530 +<8230d630> <8230d639> 23540 +<8230d730> <8230d739> 23550 +<8230d830> <8230d839> 23560 +<8230d930> <8230d939> 23570 +<8230da30> <8230da39> 23580 +<8230db30> <8230db39> 23590 +<8230dc30> <8230dc39> 23600 +<8230dd30> <8230dd39> 23610 +<8230de30> <8230de39> 23620 +<8230df30> <8230df39> 23630 +<8230e030> <8230e039> 23640 +<8230e130> <8230e139> 23650 +<8230e230> <8230e239> 23660 +<8230e330> <8230e339> 23670 +<8230e430> <8230e439> 23680 +<8230e530> <8230e539> 23690 +<8230e630> <8230e639> 23700 +<8230e730> <8230e739> 23710 +<8230e830> <8230e839> 23720 +<8230e930> <8230e939> 23730 +<8230ea30> <8230ea39> 23740 +<8230eb30> <8230eb39> 23750 +<8230ec30> <8230ec39> 23760 +<8230ed30> <8230ed39> 23770 +<8230ee30> <8230ee39> 23780 +<8230ef30> <8230ef39> 23790 +<8230f030> <8230f039> 23800 +<8230f130> <8230f139> 23810 +<8230f230> <8230f239> 23820 +<8230f330> <8230f339> 23830 +<8230f430> <8230f439> 23840 +<8230f530> <8230f539> 23850 +<8230f630> <8230f639> 23860 +<8230f730> <8230f739> 23870 +<8230f830> <8230f839> 23880 +<8230f930> <8230f939> 23890 +<8230fa30> <8230fa39> 23900 +<8230fb30> <8230fb39> 23910 +<8230fc30> <8230fc39> 23920 +<8230fd30> <8230fd39> 23930 +<8230fe30> <8230fe39> 23940 +<82318130> <82318139> 23950 +<82318230> <82318239> 23960 +<82318330> <82318339> 23970 +<82318430> <82318439> 23980 +<82318530> <82318539> 23990 +<82318630> <82318639> 24000 +<82318730> <82318739> 24010 +<82318830> <82318839> 24020 +<82318930> <82318939> 24030 +<82318a30> <82318a39> 24040 +<82318b30> <82318b39> 24050 +<82318c30> <82318c39> 24060 +<82318d30> <82318d39> 24070 +<82318e30> <82318e39> 24080 +<82318f30> <82318f39> 24090 +<82319030> <82319039> 24100 +<82319130> <82319139> 24110 +<82319230> <82319239> 24120 +<82319330> <82319339> 24130 +<82319430> <82319439> 24140 +<82319530> <82319539> 24150 +<82319630> <82319639> 24160 +<82319730> <82319739> 24170 +<82319830> <82319839> 24180 +<82319930> <82319939> 24190 +<82319a30> <82319a39> 24200 +<82319b30> <82319b39> 24210 +<82319c30> <82319c39> 24220 +<82319d30> <82319d39> 24230 +<82319e30> <82319e39> 24240 +<82319f30> <82319f39> 24250 +<8231a030> <8231a039> 24260 +<8231a130> <8231a139> 24270 +<8231a230> <8231a239> 24280 +endcidrange + +100 begincidrange +<8231a330> <8231a339> 24290 +<8231a430> <8231a439> 24300 +<8231a530> <8231a539> 24310 +<8231a630> <8231a639> 24320 +<8231a730> <8231a739> 24330 +<8231a830> <8231a839> 24340 +<8231a930> <8231a939> 24350 +<8231aa30> <8231aa39> 24360 +<8231ab30> <8231ab39> 24370 +<8231ac30> <8231ac39> 24380 +<8231ad30> <8231ad39> 24390 +<8231ae30> <8231ae39> 24400 +<8231af30> <8231af39> 24410 +<8231b030> <8231b039> 24420 +<8231b130> <8231b139> 24430 +<8231b230> <8231b239> 24440 +<8231b330> <8231b339> 24450 +<8231b430> <8231b439> 24460 +<8231b530> <8231b539> 24470 +<8231b630> <8231b639> 24480 +<8231b730> <8231b739> 24490 +<8231b830> <8231b839> 24500 +<8231b930> <8231b939> 24510 +<8231ba30> <8231ba39> 24520 +<8231bb30> <8231bb39> 24530 +<8231bc30> <8231bc39> 24540 +<8231bd30> <8231bd39> 24550 +<8231be30> <8231be39> 24560 +<8231bf30> <8231bf39> 24570 +<8231c030> <8231c039> 24580 +<8231c130> <8231c139> 24590 +<8231c230> <8231c239> 24600 +<8231c330> <8231c339> 24610 +<8231c430> <8231c439> 24620 +<8231c530> <8231c539> 24630 +<8231c630> <8231c639> 24640 +<8231c730> <8231c739> 24650 +<8231c830> <8231c839> 24660 +<8231c930> <8231c939> 24670 +<8231ca30> <8231ca39> 24680 +<8231cb30> <8231cb39> 24690 +<8231cc30> <8231cc39> 24700 +<8231cd30> <8231cd39> 24710 +<8231ce30> <8231ce39> 24720 +<8231cf30> <8231cf39> 24730 +<8231d030> <8231d039> 24740 +<8231d130> <8231d139> 24750 +<8231d230> <8231d239> 24760 +<8231d330> <8231d339> 24770 +<8231d430> <8231d439> 24780 +<8231d530> <8231d539> 24790 +<8231d630> <8231d639> 24800 +<8231d730> <8231d739> 24810 +<8231d830> <8231d839> 24820 +<8231d930> <8231d939> 24830 +<8231da30> <8231da39> 24840 +<8231db30> <8231db39> 24850 +<8231dc30> <8231dc39> 24860 +<8231dd30> <8231dd39> 24870 +<8231de30> <8231de39> 24880 +<8231df30> <8231df39> 24890 +<8231e030> <8231e039> 24900 +<8231e130> <8231e139> 24910 +<8231e230> <8231e239> 24920 +<8231e330> <8231e339> 24930 +<8231e430> <8231e439> 24940 +<8231e530> <8231e539> 24950 +<8231e630> <8231e639> 24960 +<8231e730> <8231e739> 24970 +<8231e830> <8231e839> 24980 +<8231e930> <8231e939> 24990 +<8231ea30> <8231ea39> 25000 +<8231eb30> <8231eb39> 25010 +<8231ec30> <8231ec39> 25020 +<8231ed30> <8231ed39> 25030 +<8231ee30> <8231ee39> 25040 +<8231ef30> <8231ef39> 25050 +<8231f030> <8231f039> 25060 +<8231f130> <8231f139> 25070 +<8231f230> <8231f239> 25080 +<8231f330> <8231f339> 25090 +<8231f430> <8231f439> 25100 +<8231f530> <8231f539> 25110 +<8231f630> <8231f639> 25120 +<8231f730> <8231f739> 25130 +<8231f830> <8231f839> 25140 +<8231f930> <8231f939> 25150 +<8231fa30> <8231fa39> 25160 +<8231fb30> <8231fb39> 25170 +<8231fc30> <8231fc39> 25180 +<8231fd30> <8231fd39> 25190 +<8231fe30> <8231fe39> 25200 +<82328130> <82328139> 25210 +<82328230> <82328239> 25220 +<82328330> <82328339> 25230 +<82328430> <82328439> 25240 +<82328530> <82328539> 25250 +<82328630> <82328639> 25260 +<82328730> <82328739> 25270 +<82328830> <82328839> 25280 +endcidrange + +100 begincidrange +<82328930> <82328939> 25290 +<82328a30> <82328a39> 25300 +<82328b30> <82328b39> 25310 +<82328c30> <82328c39> 25320 +<82328d30> <82328d39> 25330 +<82328e30> <82328e39> 25340 +<82328f30> <82328f39> 25350 +<82329030> <82329039> 25360 +<82329130> <82329139> 25370 +<82329230> <82329239> 25380 +<82329330> <82329339> 25390 +<82329430> <82329439> 25400 +<82329530> <82329539> 25410 +<82329630> <82329639> 25420 +<82329730> <82329739> 25430 +<82329830> <82329839> 25440 +<82329930> <82329939> 25450 +<82329a30> <82329a39> 25460 +<82329b30> <82329b39> 25470 +<82329c30> <82329c39> 25480 +<82329d30> <82329d39> 25490 +<82329e30> <82329e39> 25500 +<82329f30> <82329f39> 25510 +<8232a030> <8232a039> 25520 +<8232a130> <8232a139> 25530 +<8232a230> <8232a239> 25540 +<8232a330> <8232a339> 25550 +<8232a430> <8232a439> 25560 +<8232a530> <8232a539> 25570 +<8232a630> <8232a639> 25580 +<8232a730> <8232a739> 25590 +<8232a830> <8232a839> 25600 +<8232a930> <8232a939> 25610 +<8232aa30> <8232aa39> 25620 +<8232ab30> <8232ab39> 25630 +<8232ac30> <8232ac39> 25640 +<8232ad30> <8232ad39> 25650 +<8232ae30> <8232ae39> 25660 +<8232af30> <8232af39> 25670 +<8232b030> <8232b039> 25680 +<8232b130> <8232b139> 25690 +<8232b230> <8232b239> 25700 +<8232b330> <8232b339> 25710 +<8232b430> <8232b439> 25720 +<8232b530> <8232b539> 25730 +<8232b630> <8232b639> 25740 +<8232b730> <8232b739> 25750 +<8232b830> <8232b839> 25760 +<8232b930> <8232b939> 25770 +<8232ba30> <8232ba39> 25780 +<8232bb30> <8232bb39> 25790 +<8232bc30> <8232bc39> 25800 +<8232bd30> <8232bd39> 25810 +<8232be30> <8232be39> 25820 +<8232bf30> <8232bf39> 25830 +<8232c030> <8232c039> 25840 +<8232c130> <8232c139> 25850 +<8232c230> <8232c239> 25860 +<8232c330> <8232c339> 25870 +<8232c430> <8232c439> 25880 +<8232c530> <8232c539> 25890 +<8232c630> <8232c639> 25900 +<8232c730> <8232c739> 25910 +<8232c830> <8232c839> 25920 +<8232c930> <8232c939> 25930 +<8232ca30> <8232ca39> 25940 +<8232cb30> <8232cb39> 25950 +<8232cc30> <8232cc39> 25960 +<8232cd30> <8232cd39> 25970 +<8232ce30> <8232ce39> 25980 +<8232cf30> <8232cf39> 25990 +<8232d030> <8232d039> 26000 +<8232d130> <8232d139> 26010 +<8232d230> <8232d239> 26020 +<8232d330> <8232d339> 26030 +<8232d430> <8232d439> 26040 +<8232d530> <8232d539> 26050 +<8232d630> <8232d639> 26060 +<8232d730> <8232d739> 26070 +<8232d830> <8232d839> 26080 +<8232d930> <8232d939> 26090 +<8232da30> <8232da39> 26100 +<8232db30> <8232db39> 26110 +<8232dc30> <8232dc39> 26120 +<8232dd30> <8232dd39> 26130 +<8232de30> <8232de39> 26140 +<8232df30> <8232df39> 26150 +<8232e030> <8232e039> 26160 +<8232e130> <8232e139> 26170 +<8232e230> <8232e239> 26180 +<8232e330> <8232e339> 26190 +<8232e430> <8232e439> 26200 +<8232e530> <8232e539> 26210 +<8232e630> <8232e639> 26220 +<8232e730> <8232e739> 26230 +<8232e830> <8232e839> 26240 +<8232e930> <8232e939> 26250 +<8232ea30> <8232ea39> 26260 +<8232eb30> <8232eb39> 26270 +<8232ec30> <8232ec39> 26280 +endcidrange + +100 begincidrange +<8232ed30> <8232ed39> 26290 +<8232ee30> <8232ee39> 26300 +<8232ef30> <8232ef39> 26310 +<8232f030> <8232f039> 26320 +<8232f130> <8232f139> 26330 +<8232f230> <8232f239> 26340 +<8232f330> <8232f339> 26350 +<8232f430> <8232f439> 26360 +<8232f530> <8232f539> 26370 +<8232f630> <8232f639> 26380 +<8232f730> <8232f739> 26390 +<8232f830> <8232f839> 26400 +<8232f930> <8232f939> 26410 +<8232fa30> <8232fa39> 26420 +<8232fb30> <8232fb39> 26430 +<8232fc30> <8232fc39> 26440 +<8232fd30> <8232fd39> 26450 +<8232fe30> <8232fe39> 26460 +<82338130> <82338139> 26470 +<82338230> <82338239> 26480 +<82338330> <82338339> 26490 +<82338430> <82338439> 26500 +<82338530> <82338539> 26510 +<82338630> <82338639> 26520 +<82338730> <82338739> 26530 +<82338830> <82338839> 26540 +<82338930> <82338939> 26550 +<82338a30> <82338a39> 26560 +<82338b30> <82338b39> 26570 +<82338c30> <82338c39> 26580 +<82338d30> <82338d39> 26590 +<82338e30> <82338e39> 26600 +<82338f30> <82338f39> 26610 +<82339030> <82339039> 26620 +<82339130> <82339139> 26630 +<82339230> <82339239> 26640 +<82339330> <82339339> 26650 +<82339430> <82339439> 26660 +<82339530> <82339539> 26670 +<82339630> <82339639> 26680 +<82339730> <82339739> 26690 +<82339830> <82339839> 26700 +<82339930> <82339939> 26710 +<82339a30> <82339a39> 26720 +<82339b30> <82339b39> 26730 +<82339c30> <82339c39> 26740 +<82339d30> <82339d39> 26750 +<82339e30> <82339e39> 26760 +<82339f30> <82339f39> 26770 +<8233a030> <8233a039> 26780 +<8233a130> <8233a139> 26790 +<8233a230> <8233a239> 26800 +<8233a330> <8233a339> 26810 +<8233a430> <8233a439> 26820 +<8233a530> <8233a539> 26830 +<8233a630> <8233a639> 26840 +<8233a730> <8233a739> 26850 +<8233a830> <8233a839> 26860 +<8233a930> <8233a939> 26870 +<8233aa30> <8233aa39> 26880 +<8233ab30> <8233ab39> 26890 +<8233ac30> <8233ac39> 26900 +<8233ad30> <8233ad39> 26910 +<8233ae30> <8233ae39> 26920 +<8233af30> <8233af39> 26930 +<8233b030> <8233b039> 26940 +<8233b130> <8233b139> 26950 +<8233b230> <8233b239> 26960 +<8233b330> <8233b339> 26970 +<8233b430> <8233b439> 26980 +<8233b530> <8233b539> 26990 +<8233b630> <8233b639> 27000 +<8233b730> <8233b739> 27010 +<8233b830> <8233b839> 27020 +<8233b930> <8233b939> 27030 +<8233ba30> <8233ba39> 27040 +<8233bb30> <8233bb39> 27050 +<8233bc30> <8233bc39> 27060 +<8233bd30> <8233bd39> 27070 +<8233be30> <8233be39> 27080 +<8233bf30> <8233bf39> 27090 +<8233c030> <8233c039> 27100 +<8233c130> <8233c139> 27110 +<8233c230> <8233c239> 27120 +<8233c330> <8233c339> 27130 +<8233c430> <8233c439> 27140 +<8233c530> <8233c539> 27150 +<8233c630> <8233c639> 27160 +<8233c730> <8233c739> 27170 +<8233c830> <8233c839> 27180 +<8233c930> <8233c939> 27190 +<8233ca30> <8233ca39> 27200 +<8233cb30> <8233cb39> 27210 +<8233cc30> <8233cc39> 27220 +<8233cd30> <8233cd39> 27230 +<8233ce30> <8233ce39> 27240 +<8233cf30> <8233cf39> 27250 +<8233d030> <8233d039> 27260 +<8233d130> <8233d139> 27270 +<8233d230> <8233d239> 27280 +endcidrange + +100 begincidrange +<8233d330> <8233d339> 27290 +<8233d430> <8233d439> 27300 +<8233d530> <8233d539> 27310 +<8233d630> <8233d639> 27320 +<8233d730> <8233d739> 27330 +<8233d830> <8233d839> 27340 +<8233d930> <8233d939> 27350 +<8233da30> <8233da39> 27360 +<8233db30> <8233db39> 27370 +<8233dc30> <8233dc39> 27380 +<8233dd30> <8233dd39> 27390 +<8233de30> <8233de39> 27400 +<8233df30> <8233df39> 27410 +<8233e030> <8233e039> 27420 +<8233e130> <8233e139> 27430 +<8233e230> <8233e239> 27440 +<8233e330> <8233e339> 27450 +<8233e430> <8233e439> 27460 +<8233e530> <8233e539> 27470 +<8233e630> <8233e639> 27480 +<8233e730> <8233e739> 27490 +<8233e830> <8233e839> 27500 +<8233e930> <8233e939> 27510 +<8233ea30> <8233ea39> 27520 +<8233eb30> <8233eb39> 27530 +<8233ec30> <8233ec39> 27540 +<8233ed30> <8233ed39> 27550 +<8233ee30> <8233ee39> 27560 +<8233ef30> <8233ef39> 27570 +<8233f030> <8233f039> 27580 +<8233f130> <8233f139> 27590 +<8233f230> <8233f239> 27600 +<8233f330> <8233f339> 27610 +<8233f430> <8233f439> 27620 +<8233f530> <8233f539> 27630 +<8233f630> <8233f639> 27640 +<8233f730> <8233f739> 27650 +<8233f830> <8233f839> 27660 +<8233f930> <8233f939> 27670 +<8233fa30> <8233fa39> 27680 +<8233fb30> <8233fb39> 27690 +<8233fc30> <8233fc39> 27700 +<8233fd30> <8233fd39> 27710 +<8233fe30> <8233fe39> 27720 +<82348130> <82348139> 27730 +<82348230> <82348239> 27740 +<82348330> <82348339> 27750 +<82348430> <82348439> 27760 +<82348530> <82348539> 27770 +<82348630> <82348639> 27780 +<82348730> <82348739> 27790 +<82348830> <82348839> 27800 +<82348930> <82348939> 27810 +<82348a30> <82348a39> 27820 +<82348b30> <82348b39> 27830 +<82348c30> <82348c39> 27840 +<82348d30> <82348d39> 27850 +<82348e30> <82348e39> 27860 +<82348f30> <82348f39> 27870 +<82349030> <82349039> 27880 +<82349130> <82349139> 27890 +<82349230> <82349239> 27900 +<82349330> <82349339> 27910 +<82349430> <82349439> 27920 +<82349530> <82349539> 27930 +<82349630> <82349639> 27940 +<82349730> <82349739> 27950 +<82349830> <82349839> 27960 +<82349930> <82349939> 27970 +<82349a30> <82349a39> 27980 +<82349b30> <82349b39> 27990 +<82349c30> <82349c39> 28000 +<82349d30> <82349d39> 28010 +<82349e30> <82349e39> 28020 +<82349f30> <82349f39> 28030 +<8234a030> <8234a039> 28040 +<8234a130> <8234a139> 28050 +<8234a230> <8234a239> 28060 +<8234a330> <8234a339> 28070 +<8234a430> <8234a439> 28080 +<8234a530> <8234a539> 28090 +<8234a630> <8234a639> 28100 +<8234a730> <8234a739> 28110 +<8234a830> <8234a839> 28120 +<8234a930> <8234a939> 28130 +<8234aa30> <8234aa39> 28140 +<8234ab30> <8234ab39> 28150 +<8234ac30> <8234ac39> 28160 +<8234ad30> <8234ad39> 28170 +<8234ae30> <8234ae39> 28180 +<8234af30> <8234af39> 28190 +<8234b030> <8234b039> 28200 +<8234b130> <8234b139> 28210 +<8234b230> <8234b239> 28220 +<8234b330> <8234b339> 28230 +<8234b430> <8234b439> 28240 +<8234b530> <8234b539> 28250 +<8234b630> <8234b639> 28260 +<8234b730> <8234b739> 28270 +<8234b830> <8234b839> 28280 +endcidrange + +100 begincidrange +<8234b930> <8234b939> 28290 +<8234ba30> <8234ba39> 28300 +<8234bb30> <8234bb39> 28310 +<8234bc30> <8234bc39> 28320 +<8234bd30> <8234bd39> 28330 +<8234be30> <8234be39> 28340 +<8234bf30> <8234bf39> 28350 +<8234c030> <8234c039> 28360 +<8234c130> <8234c139> 28370 +<8234c230> <8234c239> 28380 +<8234c330> <8234c339> 28390 +<8234c430> <8234c439> 28400 +<8234c530> <8234c539> 28410 +<8234c630> <8234c639> 28420 +<8234c730> <8234c739> 28430 +<8234c830> <8234c839> 28440 +<8234c930> <8234c939> 28450 +<8234ca30> <8234ca39> 28460 +<8234cb30> <8234cb39> 28470 +<8234cc30> <8234cc39> 28480 +<8234cd30> <8234cd39> 28490 +<8234ce30> <8234ce39> 28500 +<8234cf30> <8234cf39> 28510 +<8234d030> <8234d039> 28520 +<8234d130> <8234d139> 28530 +<8234d230> <8234d239> 28540 +<8234d330> <8234d339> 28550 +<8234d430> <8234d439> 28560 +<8234d530> <8234d539> 28570 +<8234d630> <8234d639> 28580 +<8234d730> <8234d739> 28590 +<8234d830> <8234d839> 28600 +<8234d930> <8234d939> 28610 +<8234da30> <8234da39> 28620 +<8234db30> <8234db39> 28630 +<8234dc30> <8234dc39> 28640 +<8234dd30> <8234dd39> 28650 +<8234de30> <8234de39> 28660 +<8234df30> <8234df39> 28670 +<8234e030> <8234e039> 28680 +<8234e130> <8234e139> 28690 +<8234e230> <8234e239> 28700 +<8234e330> <8234e339> 28710 +<8234e430> <8234e439> 28720 +<8234e530> <8234e539> 28730 +<8234e630> <8234e639> 28740 +<8234e730> <8234e739> 28750 +<8234e830> <8234e839> 28760 +<8234e930> <8234e939> 28770 +<8234ea30> <8234ea39> 28780 +<8234eb30> <8234eb39> 28790 +<8234ec30> <8234ec39> 28800 +<8234ed30> <8234ed39> 28810 +<8234ee30> <8234ee39> 28820 +<8234ef30> <8234ef39> 28830 +<8234f030> <8234f039> 28840 +<8234f130> <8234f139> 28850 +<8234f230> <8234f239> 28860 +<8234f330> <8234f339> 28870 +<8234f430> <8234f439> 28880 +<8234f530> <8234f539> 28890 +<8234f630> <8234f639> 28900 +<8234f730> <8234f739> 28910 +<8234f830> <8234f839> 28920 +<8234f930> <8234f939> 28930 +<8234fa30> <8234fa39> 28940 +<8234fb30> <8234fb39> 28950 +<8234fc30> <8234fc39> 28960 +<8234fd30> <8234fd39> 28970 +<8234fe30> <8234fe39> 28980 +<82358130> <82358139> 28990 +<82358230> <82358239> 29000 +<82358330> <82358339> 29010 +<82358430> <82358439> 29020 +<82358530> <82358539> 29030 +<82358630> <82358639> 29040 +<82358730> <82358738> 29050 +<82359833> <82359839> 29064 +<82359930> <82359939> 29071 +<82359a30> <82359a39> 29081 +<82359b30> <82359b39> 29091 +<82359c30> <82359c39> 29101 +<82359d30> <82359d39> 29111 +<82359e30> <82359e39> 29121 +<82359f30> <82359f39> 29131 +<8235a030> <8235a039> 29141 +<8235a130> <8235a139> 29151 +<8235a230> <8235a239> 29161 +<8235a330> <8235a339> 29171 +<8235a430> <8235a439> 29181 +<8235a530> <8235a539> 29191 +<8235a630> <8235a639> 29201 +<8235a730> <8235a739> 29211 +<8235a830> <8235a839> 29221 +<8235a930> <8235a939> 29231 +<8235aa30> <8235aa39> 29241 +<8235ab30> <8235ab39> 29251 +<8235ac30> <8235ac39> 29261 +<8235ad30> <8235ad39> 29271 +<8235ae30> <8235ae39> 29281 +endcidrange + +100 begincidrange +<8235af30> <8235af39> 29291 +<8235b030> <8235b039> 29301 +<8235b130> <8235b139> 29311 +<8235b230> <8235b239> 29321 +<8235b330> <8235b339> 29331 +<8235b430> <8235b439> 29341 +<8235b530> <8235b539> 29351 +<8235b630> <8235b639> 29361 +<8235b730> <8235b739> 29371 +<8235b830> <8235b839> 29381 +<8235b930> <8235b939> 29391 +<8235ba30> <8235ba39> 29401 +<8235bb30> <8235bb39> 29411 +<8235bc30> <8235bc39> 29421 +<8235bd30> <8235bd39> 29431 +<8235be30> <8235be39> 29441 +<8235bf30> <8235bf39> 29451 +<8235c030> <8235c039> 29461 +<8235c130> <8235c139> 29471 +<8235c230> <8235c239> 29481 +<8235c330> <8235c339> 29491 +<8235c430> <8235c439> 29501 +<8235c530> <8235c539> 29511 +<8235c630> <8235c639> 29521 +<8235c730> <8235c739> 29531 +<8235c830> <8235c839> 29541 +<8235c930> <8235c939> 29551 +<8235ca30> <8235ca39> 29561 +<8235cb30> <8235cb39> 29571 +<8235cc30> <8235cc39> 29581 +<8235cd30> <8235cd39> 29591 +<8235ce30> <8235ce39> 29601 +<8235cf30> <8235cf39> 29611 +<8235d030> <8235d039> 29621 +<8235d130> <8235d139> 29631 +<8235d230> <8235d239> 29641 +<8235d330> <8235d339> 29651 +<8235d430> <8235d439> 29661 +<8235d530> <8235d539> 29671 +<8235d630> <8235d639> 29681 +<8235d730> <8235d739> 29691 +<8235d830> <8235d839> 29701 +<8235d930> <8235d939> 29711 +<8235da30> <8235da39> 29721 +<8235db30> <8235db39> 29731 +<8235dc30> <8235dc39> 29741 +<8235dd30> <8235dd39> 29751 +<8235de30> <8235de39> 29761 +<8235df30> <8235df39> 29771 +<8235e030> <8235e039> 29781 +<8235e130> <8235e139> 29791 +<8235e230> <8235e239> 29801 +<8235e330> <8235e339> 29811 +<8235e430> <8235e439> 29821 +<8235e530> <8235e539> 29831 +<8235e630> <8235e639> 29841 +<8235e730> <8235e739> 29851 +<8235e830> <8235e839> 29861 +<8235e930> <8235e939> 29871 +<8235ea30> <8235ea39> 29881 +<8235eb30> <8235eb39> 29891 +<8235ec30> <8235ec39> 29901 +<8235ed30> <8235ed39> 29911 +<8235ee30> <8235ee39> 29921 +<8235ef30> <8235ef39> 29931 +<8235f030> <8235f039> 29941 +<8235f130> <8235f139> 29951 +<8235f230> <8235f239> 29961 +<8235f330> <8235f339> 29971 +<8235f430> <8235f439> 29981 +<8235f530> <8235f539> 29991 +<8235f630> <8235f639> 30001 +<8235f730> <8235f739> 30011 +<8235f830> <8235f839> 30021 +<8235f930> <8235f939> 30031 +<8235fa30> <8235fa39> 30041 +<8235fb30> <8235fb39> 30051 +<8235fc30> <8235fc39> 30061 +<8235fd30> <8235fd39> 30071 +<8235fe30> <8235fe39> 30081 +<82368130> <82368139> 30091 +<82368230> <82368239> 30101 +<82368330> <82368339> 30111 +<82368430> <82368439> 30121 +<82368530> <82368539> 30131 +<82368630> <82368639> 30141 +<82368730> <82368739> 30151 +<82368830> <82368839> 30161 +<82368930> <82368939> 30171 +<82368a30> <82368a39> 30181 +<82368b30> <82368b39> 30191 +<82368c30> <82368c39> 30201 +<82368d30> <82368d39> 30211 +<82368e30> <82368e37> 30221 +<82368f31> <82368f39> 30229 +<82369030> <82369039> 30238 +<82369130> <82369139> 30248 +<82369230> <82369239> 30258 +<82369330> <82369339> 30268 +<82369430> <82369435> 30278 +endcidrange + +100 begincidrange +<8240> <8252> 10258 +<8254> <8261> 10277 +<8263> <8273> 10291 +<8275> <8279> 10308 +<827b> <827c> 10313 +<8281> <8282> 10316 +<8284> <828f> 10318 +<8291> <82a4> 10330 +<82a6> <82c7> 10350 +<82ca> <82e0> 10384 +<82e5> <82ec> 10408 +<82ee> <82f1> 10416 +<82f3> <82f6> 10420 +<82fc> <82fe> 10425 +<8342> <8344> 10429 +<8346> <8347> 10432 +<8349> <834b> 10434 +<834d> <8352> 10437 +<8354> <8356> 10443 +<8358> <835d> 10446 +<835f> <8364> 10452 +<8367> <8371> 10458 +<8373> <8377> 10469 +<8381> <8385> 10477 +<8387> <8388> 10482 +<838b> <838c> 10484 +<838e> <8393> 10486 +<8395> <839d> 10492 +<839f> <83a5> 10501 +<83a7> <83aa> 10508 +<83ac> <83ad> 10512 +<83b1> <83b9> 10514 +<83bb> <83c8> 10523 +<83ca> <83f5> 10537 +<83f7> <83fe> 10581 +<8440> <844f> 10589 +<8451> <8470> 10605 +<8472> <8473> 10637 +<8475> <8476> 10639 +<8478> <847e> 10641 +<8480> <8481> 10648 +<8483> <848d> 10650 +<848f> <8491> 10661 +<8494> <849c> 10664 +<849e> <84a0> 10673 +<84a7> <84a8> 10677 +<84aa> <84c4> 10679 +<84c6> <84d2> 10706 +<84db> <84dc> 10722 +<84de> <84e9> 10724 +<84eb> <84ed> 10736 +<84ef> <84f0> 10739 +<84f2> <84fe> 10741 +<8540> <8550> 10754 +<8555> <855d> 10772 +<855f> <8565> 10781 +<8567> <857e> 10788 +<8580> <8586> 10812 +<8588> <858a> 10819 +<858c> <8591> 10822 +<8593> <8595> 10828 +<8599> <85a1> 10832 +<85a3> <85b1> 10841 +<85b3> <85fe> 10856 +<8640> <8649> 10932 +<864b> <8653> 10942 +<8655> <8667> 10951 +<8669> <867e> 10970 +<8680> <8695> 10992 +<8697> <8698> 11014 +<869a> <86a0> 11016 +<86a2> <86c9> 11023 +<86cf> <86d0> 11065 +<86d2> <86db> 11067 +<86de> <86e0> 11077 +<86e2> <86e7> 11080 +<86e9> <86ed> 11086 +<86ef> <86f3> 11091 +<86f5> <86fe> 11096 +<8741> <8743> 11106 +<8745> <8748> 11109 +<874d> <874e> 11114 +<8750> <8756> 11116 +<8758> <8759> 11123 +<8761> <8765> 11127 +<8767> <8779> 11132 +<877b> <877c> 11151 +<8783> <8785> 11155 +<878b> <878c> 11160 +<878f> <8792> 11162 +<8794> <8797> 11166 +<8799> <879c> 11170 +<879e> <87a2> 11174 +<87a4> <87a6> 11179 +<87a8> <87b2> 11182 +<87b6> <87ba> 11194 +<87bc> <87be> 11199 +<87c3> <87c9> 11203 +<87cd> <87ce> 11210 +<87d0> <87d1> 11212 +endcidrange + +100 begincidrange +<87d6> <87d9> 11215 +<87db> <87f6> 11219 +<87fb> <87fe> 11248 +<8842> <8843> 11252 +<8847> <887e> 11255 +<8880> <88b9> 11311 +<88bb> <88cb> 11369 +<88cd> <88d3> 11386 +<88d5> <88d6> 11393 +<88d8> <88de> 11395 +<88e0> <88e4> 11402 +<88e6> <88f1> 11407 +<88f4> <88f5> 11419 +<88f7> <88fe> 11421 +<8940> <894a> 11429 +<8951> <8953> 11442 +<8955> <895c> 11445 +<8960> <896c> 11454 +<896e> <8970> 11467 +<8972> <897b> 11470 +<897d> <897e> 11480 +<8980> <898a> 11482 +<898c> <8998> 11493 +<899a> <899d> 11506 +<899f> <89a5> 11510 +<89a9> <89ae> 11518 +<89b0> <89b9> 11524 +<89bb> <89bd> 11534 +<89c1> <89c3> 11537 +<89c9> <89cd> 11541 +<89cf> <89d0> 11546 +<89d2> <89d7> 11548 +<89d9> <89da> 11554 +<89dc> <89f3> 11556 +<89f5> <89fe> 11580 +<8a42> <8a58> 11591 +<8a5f> <8a78> 11616 +<8a7a> <8a7e> 11642 +<8a80> <8ae3> 11647 +<8ae5> <8afe> 11747 +<8b40> <8b43> 11773 +<8b45> <8b48> 11777 +<8b4a> <8b79> 11781 +<8b7b> <8b7e> 11829 +<8b80> <8b8b> 11833 +<8b8d> <8b9d> 11845 +<8b9f> <8bb2> 11862 +<8bb4> <8bb8> 11882 +<8bba> <8bbd> 11887 +<8bbf> <8bc5> 11891 +<8bca> <8bd3> 11899 +<8bd5> <8bdb> 11909 +<8bdd> <8be4> 11916 +<8be6> <8bea> 11924 +<8bec> <8bef> 11929 +<8bf1> <8bfe> 11933 +<8c40> <8c43> 11947 +<8c45> <8c4e> 11951 +<8c50> <8c56> 11961 +<8c58> <8c5b> 11968 +<8c5d> <8c7e> 11972 +<8c80> <8c8a> 12006 +<8c93> <8c98> 12019 +<8c9b> <8ca1> 12025 +<8ca8> <8cbf> 12033 +<8cc1> <8cd1> 12057 +<8cd6> <8cd8> 12075 +<8cda> <8cf8> 12078 +<8cfa> <8cfe> 12109 +<8d40> <8d72> 12114 +<8d76> <8d7a> 12166 +<8d7c> <8d7e> 12171 +<8d80> <8d87> 12174 +<8d89> <8d8e> 12182 +<8d90> <8d9d> 12188 +<8d9f> <8db8> 12202 +<8dba> <8de1> 12228 +<8de5> <8de6> 12269 +<8de8> <8df6> 12271 +<8df8> <8dfd> 12286 +<8e40> <8e45> 12292 +<8e47> <8e55> 12298 +<8e5b> <8e67> 12315 +<8e69> <8e6d> 12328 +<8e71> <8e7e> 12334 +<8e81> <8e9a> 12348 +<8e9c> <8e9e> 12374 +<8ea0> <8ea3> 12377 +<8ea5> <8ea6> 12381 +<8ea8> <8eab> 12383 +<8eaf> <8ebc> 12388 +<8ebf> <8ec2> 12402 +<8ec6> <8ecc> 12407 +<8ecf> <8ed5> 12414 +<8ed8> <8eeb> 12421 +<8eed> <8efe> 12441 +<8f40> <8f51> 12459 +<8f57> <8f5c> 12477 +<8f5e> <8f63> 12483 +<8f65> <8f7e> 12489 +endcidrange + +100 begincidrange +<8f80> <8f85> 12515 +<8f89> <8f94> 12522 +<8f98> <8f9a> 12535 +<8f9e> <8fa0> 12539 +<8fa2> <8fbc> 12542 +<8fbe> <8fc3> 12569 +<8fc7> <8fcc> 12576 +<8fce> <8fd7> 12582 +<8fd9> <8ffe> 12592 +<9040> <907e> 12630 +<9080> <909c> 12693 +<909f> <90b9> 12722 +<90bb> <90bf> 12749 +<90c2> <90c4> 12754 +<90c6> <90da> 12757 +<90dd> <90ec> 12778 +<90ee> <90ef> 12794 +<90f1> <90f6> 12796 +<90f8> <90fe> 12802 +<9140> <9141> 12809 +<9143> <914a> 12811 +<914e> <9150> 12820 +<9152> <9153> 12823 +<9156> <9158> 12825 +<915b> <915c> 12828 +<915e> <9160> 12830 +<9164> <916d> 12834 +<916f> <9175> 12844 +<9177> <9179> 12851 +<917d> <917e> 12854 +<9180> <9183> 12856 +<9185> <918c> 12860 +<918e> <9190> 12868 +<9194> <9196> 12872 +<9198> <919a> 12875 +<919c> <91a8> 12878 +<91ac> <91b9> 12891 +<91bc> <91be> 12905 +<91c0> <91c2> 12908 +<91c4> <91cc> 12911 +<91ce> <91cf> 12920 +<91da> <91de> 12925 +<91e0> <91e1> 12930 +<91e3> <91e9> 12932 +<91eb> <91ef> 12939 +<91f3> <91fe> 12945 +<9240> <927e> 12957 +<9280> <92b5> 13020 +<92b7> <92cd> 13074 +<92d1> <92d3> 13098 +<92d5> <92de> 13101 +<92e1> <92fd> 13111 +<9340> <934f> 13140 +<9351> <935c> 13156 +<935e> <936f> 13168 +<9371> <9375> 13186 +<9377> <937e> 13191 +<9380> <938b> 13199 +<938d> <939c> 13211 +<939e> <93a4> 13227 +<93a8> <93b3> 13235 +<93b5> <93b7> 13247 +<93b9> <93ba> 13250 +<93be> <93c5> 13253 +<93c7> <93ce> 13261 +<93d0> <93d6> 13269 +<93d8> <93da> 13276 +<93dd> <93e0> 13279 +<93e2> <93e3> 13283 +<93e6> <93e8> 13285 +<93f2> <93f3> 13291 +<93f6> <93f9> 13293 +<93fb> <93fd> 13297 +<9440> <9443> 13300 +<9445> <944c> 13304 +<944e> <944f> 13312 +<9456> <9457> 13315 +<9459> <945a> 13317 +<9460> <9463> 13320 +<9467> <946d> 13325 +<946f> <9471> 13332 +<947b> <947e> 13339 +<9483> <9486> 13343 +<9489> <94a0> 13347 +<94a2> <94b2> 13371 +<94b6> <94be> 13389 +<94c1> <94cb> 13398 +<94cd> <94d7> 13409 +<94d9> <94df> 13420 +<94e1> <94fe> 13427 +<9540> <9571> 13457 +<9573> <957e> 13507 +<9580> <9582> 13519 +<9584> <959d> 13522 +<95a0> <95b2> 13548 +<95b4> <95b9> 13567 +<95bb> <95ce> 13573 +<95d5> <95e0> 13595 +<95e2> <95e6> 13607 +<95e8> <95f0> 13612 +endcidrange + +100 begincidrange +<95f2> <95f7> 13621 +<95f9> <95fd> 13627 +<9640> <9655> 13632 +<9657> <967b> 13654 +<967d> <967e> 13691 +<9680> <96fe> 13693 +<9740> <9766> 13820 +<9768> <976b> 13859 +<976f> <977e> 13864 +<9780> <9795> 13880 +<9798> <979c> 13902 +<979e> <97a2> 13907 +<97a4> <97be> 13912 +<97c0> <97ed> 13939 +<97ef> <97f6> 13985 +<97f8> <97fe> 13993 +<9840> <9844> 14000 +<9846> <9848> 14005 +<984a> <984e> 14008 +<9850> <9870> 14013 +<9874> <987e> 14047 +<9882> <988a> 14059 +<988d> <989f> 14068 +<98a1> <98a9> 14087 +<98ab> <98b5> 14096 +<98b8> <98b9> 14107 +<98bb> <98c6> 14109 +<98c8> <98ca> 14121 +<98cc> <98cf> 14124 +<98d1> <98d2> 14128 +<98d4> <98e2> 14130 +<98e6> <98ee> 14145 +<98f0> <98f1> 14154 +<98f3> <98fe> 14156 +<9940> <9942> 14168 +<9946> <9965> 14172 +<9967> <996d> 14204 +<996f> <9974> 14211 +<9976> <9979> 14217 +<997c> <997e> 14221 +<9980> <9984> 14224 +<9986> <9988> 14229 +<998a> <998d> 14232 +<998f> <9990> 14236 +<9992> <9998> 14238 +<999a> <99a8> 14245 +<99aa> <99af> 14260 +<99b6> <99bc> 14267 +<99c3> <99c8> 14276 +<99ca> <99cd> 14282 +<99cf> <99d0> 14286 +<99d2> <99d9> 14288 +<99db> <99df> 14296 +<99e1> <99e4> 14301 +<99e6> <99e7> 14305 +<99e9> <99eb> 14307 +<99ed> <99f3> 14310 +<99f5> <99fe> 14317 +<9a40> <9a49> 14327 +<9a4b> <9a56> 14337 +<9a58> <9a64> 14349 +<9a68> <9a70> 14363 +<9a72> <9a75> 14372 +<9a78> <9a7e> 14376 +<9a80> <9a87> 14383 +<9a89> <9a8b> 14391 +<9a8d> <9a90> 14394 +<9a92> <9a96> 14398 +<9a98> <9a99> 14403 +<9a9c> <9a9d> 14405 +<9a9f> <9aa1> 14407 +<9aa4> <9aa9> 14410 +<9aab> <9acf> 14416 +<9ad1> <9ad5> 14453 +<9ad7> <9ad9> 14458 +<9adb> <9ae1> 14461 +<9ae6> <9afe> 14469 +<9b40> <9b7e> 14494 +<9b80> <9bd0> 14557 +<9bd2> <9bdb> 14638 +<9bdd> <9bfe> 14648 +<9c40> <9c52> 14682 +<9c54> <9c58> 14701 +<9c5d> <9c74> 14707 +<9c76> <9c78> 14731 +<9c7a> <9c7e> 14734 +<9c80> <9c85> 14739 +<9c87> <9c9c> 14745 +<9c9e> <9caa> 14767 +<9cac> <9cc9> 14780 +<9ccb> <9cce> 14810 +<9cd0> <9ce5> 14814 +<9ce8> <9ceb> 14836 +<9cef> <9cfa> 14841 +<9cfc> <9cfd> 14853 +<9d40> <9d41> 14855 +<9d43> <9d45> 14857 +<9d48> <9d4c> 14860 +<9d50> <9d60> 14866 +<9d62> <9d67> 14883 +endcidrange + +100 begincidrange +<9d6a> <9d6d> 14889 +<9d6f> <9d70> 14893 +<9d72> <9d74> 14895 +<9d76> <9d7a> 14898 +<9d80> <9d89> 14905 +<9d8b> <9d8c> 14915 +<9d8e> <9d90> 14917 +<9d92> <9d98> 14920 +<9d9a> <9da0> 14927 +<9da3> <9da6> 14934 +<9da8> <9dab> 14938 +<9dae> <9db1> 14942 +<9db4> <9dbd> 14946 +<9dbf> <9dc5> 14956 +<9dc7> <9dc8> 14963 +<9dca> <9dcc> 14965 +<9dce> <9dd1> 14968 +<9dd3> <9dd4> 14972 +<9dd6> <9de0> 14974 +<9de3> <9df0> 14985 +<9df2> <9df3> 14999 +<9df5> <9df6> 15001 +<9df8> <9df9> 15003 +<9dfb> <9dfc> 15005 +<9e40> <9e44> 15008 +<9e46> <9e47> 15013 +<9e4a> <9e51> 15015 +<9e57> <9e5c> 15025 +<9e5f> <9e60> 15031 +<9e64> <9e66> 15034 +<9e68> <9e6b> 15037 +<9e6d> <9e6e> 15041 +<9e70> <9e71> 15043 +<9e76> <9e7a> 15046 +<9e7d> <9e7e> 15051 +<9e80> <9e84> 15053 +<9e88> <9e90> 15059 +<9e92> <9e95> 15068 +<9e98> <9ea1> 15072 +<9ea3> <9ea5> 15082 +<9ea7> <9ea8> 15085 +<9eaa> <9ead> 15087 +<9eaf> <9eb2> 15091 +<9eb5> <9eb6> 15095 +<9eb8> <9ef4> 15097 +<9ef6> <9efe> 15158 +<9f40> <9f4d> 15167 +<9f4f> <9f6e> 15181 +<9f70> <9f7e> 15213 +<9f80> <9f91> 15228 +<9f93> <9f97> 15246 +<9f99> <9fa5> 15251 +<9fa7> <9fa8> 15264 +<9faa> <9fab> 15266 +<9fad> <9fc8> 15268 +<9fca> <9fcc> 15296 +<9fce> <9fe0> 15299 +<9fe2> <9fea> 15318 +<9fec> <9fed> 15327 +<9fef> <9ff3> 15329 +<9ff5> <9ffc> 15334 + 15343 + 15346 + 15348 + 15350 + 15354 + 15359 + 15364 + 15371 + 15384 + 15386 + 15396 + 15412 + 15415 + 15433 + 15454 + 15468 + 15478 + 15482 + 15497 + 96 + 9897 + 190 + 240 + 250 + 262 + 356 + 439 + 525 + 549 + 602 + 635 + 9907 + 9970 + 668 + 700 + 9992 + 10016 + 10019 + 10050 +endcidrange + +100 begincidrange + 738 + 15513 + 15526 + 15561 + 15564 + 15566 + 15569 + 814 + 15598 + 15602 + 15604 + 15653 + 908 + 15686 + 15692 + 15734 + 15744 + 15746 + 15759 + 15764 + 15776 + 15785 + 15805 + 15807 + 15813 + 15824 + 15834 + 15836 + 15840 + 15843 + 15848 + 15863 + 15883 + 15896 + 15924 + 15928 + 15933 + 15941 + 15952 + 15988 + 16010 + 16013 + 16015 + 16026 + 16036 + 9647 + 16041 + 16051 + 16055 + 9652 + 16060 + 16067 + 16084 + 16108 + 940 + 16115 + 16129 + 16173 + 16196 + 1034 + 16206 + 16243 + 16248 + 16254 + 16264 + 16272 + 16288 + 1128 + 16294 + 16297 + 16341 + 16355 + 16363 + 16367 + 1222 + 16385 + 16405 + 16408 + 16414 + 16433 + 16441 + 16444 + 16449 + 16458 + 1316 + 16472 + 16481 + 16491 + 16494 + 16498 + 16527 + 16555 + 1410 + 16558 + 16576 + 16578 + 16582 + 16616 + 1504 + 16649 +endcidrange + +100 begincidrange + 16663 + 16665 + 16672 + 16682 + 16698 + 16705 + 1598 + 16735 + 16739 + 16745 + 16748 + 16758 + 16780 + 16787 + 16789 + 1692 + 16819 + 16835 + 16851 + 16876 + 16879 + 16908 + 1786 + 16910 + 16913 + 16930 + 16932 + 16938 + 16947 + 16956 + 16966 + 16972 + 16976 + 1880 + 16993 + 17001 + 17015 + 17017 + 17020 + 17026 + 17029 + 17045 + 1974 + 17078 + 17096 + 17102 + 17112 + 9246 + 17119 + 17121 + 17125 + 17128 + 17138 + 2068 + 17141 + 17144 + 17149 + 17157 + 17169 + 17171 + 17175 + 17182 + 17185 + 17193 + 17196 + 17201 + 17204 + 2162 + 17209 + 17213 + 17216 + 17223 + 17227 + 17231 + 17233 + 17235 + 17241 + 17243 + 17248 + 17251 + 17253 + 17258 + 2256 + 17261 + 17273 + 17277 + 17287 + 17290 + 17293 + 17297 + 17301 + 17303 + 17308 + 17319 + 17323 + 2350 + 17326 + 17329 + 17336 + 17338 +endcidrange + +100 begincidrange + 17343 + 17345 + 17356 + 17361 + 17363 + 17365 + 17393 + 2444 + 17396 + 17412 + 17415 + 17426 + 17444 + 17446 + 17452 + 17473 + 2538 + 17484 + 17498 + 17521 + 17543 + 17547 + 17563 + 2632 + 17566 + 17568 + 17623 + 17626 + 17630 + 17652 + 2726 + 17657 + 17666 + 17668 + 17675 + 17678 + 17680 + 17687 + 17706 + 17708 + 17713 + 17728 + 17734 + 2820 + 17738 + 17743 + 17747 + 17752 + 17764 + 17767 + 17791 + 17810 + 17819 + 2914 + 17822 + 17824 + 17826 + 17853 + 17867 + 17879 + 3008 + 17912 + 17950 + 17958 + 17964 + 17968 + 17971 + 3102 + 18005 + 18018 + 18020 + 18039 + 18046 + 18061 + 18068 + 18079 + 18083 + 18086 + 3196 + 18089 + 18104 + 18134 + 18140 + 18147 + 18162 + 18173 + 3290 + 18177 + 18191 + 18198 + 18200 + 18202 + 18206 + 18218 + 18221 + 18225 + 18230 + 18237 + 18241 + 18243 +endcidrange + +100 begincidrange + 18250 + 3384 + 18256 + 18261 + 18264 + 18266 + 18274 + 18280 + 18290 + 18306 + 18308 + 18315 + 18321 + 18324 + 18334 + 3478 + 18336 + 18343 + 18346 + 18358 + 18361 + 18364 + 18372 + 18383 + 18387 + 18401 + 18407 + 18413 + 3572 + 18416 + 18479 + 18495 + 18502 + 3666 + 18510 + 18549 + 18559 + 18572 + 18577 + 18596 + 18598 + 3760 + 18600 + 18614 + 18620 + 18622 + 18625 + 18640 + 18647 + 18649 + 18652 + 18655 + 18662 + 18670 + 3854 + 18680 + 18693 + 18696 + 18699 + 18705 + 18708 + 18714 + 18719 + 18734 + 3948 + 18767 + 18788 + 18791 + 18798 + 18816 + 18824 + 18853 + 4042 + 18855 + 18857 + 18866 + 18880 + 18886 + 18889 + 18894 + 18896 + 18898 + 18907 + 18917 + 18920 + 18923 + 18926 + 4136 + 18934 + 18938 + 18942 + 18944 + 18946 + 18950 + 18952 + 18955 + 18982 + 18984 + 18989 + 18996 +endcidrange + +100 begincidrange + 19000 + 4230 + 19004 + 19008 + 19012 + 19014 + 19017 + 19020 + 19023 + 19028 + 19032 + 19041 + 19043 + 19045 + 19047 + 19049 + 19051 + 19056 + 19061 + 4324 + 19064 + 19067 + 19070 + 8953 + 19074 + 19077 + 19083 + 19086 + 19090 + 19093 + 19095 + 19097 + 19099 + 19102 + 19109 + 19112 + 19116 + 4418 + 19121 + 19125 + 19128 + 19135 + 19138 + 19142 + 19148 + 19151 + 19153 + 19156 + 19158 + 19163 + 19168 + 19172 + 4512 + 19179 + 19182 + 19186 + 19194 + 19207 + 19209 + 19212 + 19214 + 19219 + 19221 + 19227 + 19230 + 19233 + 19237 + 19243 + 4606 + 19252 + 19265 + 19270 + 19313 + 19330 + 4695 + 19342 + 19349 + 19357 + 19359 + 19365 + 19370 + 19375 + 4789 + 19380 + 19385 + 19389 + 19425 + 19428 + 19435 + 19440 + 19448 + 4883 + 19466 + 19498 + 19521 + 19527 + 19531 + 19537 + 19549 + 4977 +endcidrange + +100 begincidrange + 19557 + 19562 + 19573 + 19578 + 19582 + 19585 + 19588 + 19604 + 19606 + 19613 + 19617 + 19623 + 19626 + 5071 + 19630 + 19636 + 19642 + 19648 + 19655 + 19663 + 9373 + 19668 + 19673 + 19675 + 19679 + 19682 + 19686 + 19688 + 19690 + 5165 + 19693 + 19695 + 19698 + 19703 + 19715 + 19726 + 19729 + 19741 + 19759 + 5259 + 19773 + 19783 + 19798 + 19803 + 19807 + 19813 + 19818 + 19821 + 19824 + 5353 + 19846 + 19862 + 19874 + 19885 + 19887 + 19897 + 19902 + 19909 + 19917 + 19919 + 5447 + 19928 + 19930 + 19963 + 19966 + 19977 + 19986 + 19992 + 9459 + 19996 + 19998 + 5541 + 20006 + 20019 + 20024 + 20026 + 20029 + 20033 + 20035 + 20043 + 20048 + 20055 + 20057 + 20059 + 20061 + 5635 + 20065 + 20067 + 20070 + 20073 + 20077 + 20079 + 20081 + 20084 + 20087 + 9489 + 20092 + 20102 + 20105 + 20108 +endcidrange + +100 begincidrange + 20119 + 20124 + 20127 + 5729 + 20131 + 20134 + 20141 + 20148 + 20151 + 20153 + 20155 + 20166 + 20171 + 20173 + 20178 + 20181 + 20185 + 9551 + 5823 + 20190 + 20197 + 20199 + 20201 + 20205 + 20209 + 20211 + 20213 + 20215 + 20218 + 20225 + 20227 + 20231 + 20237 + 20240 + 20242 + 20250 + 5917 + 20254 + 20257 + 20261 + 20264 + 20267 + 20271 + 20273 + 20275 + 20286 + 20295 + 20301 + 20304 + 20306 + 20312 + 20315 + 20318 + 6011 + 20320 + 20323 + 20327 + 9576 + 20332 + 20335 + 20349 + 20358 + 20365 + 20367 + 20370 + 20373 + 20376 + 20378 + 9537 + 20383 + 6105 + 20388 + 20392 + 20395 + 20398 + 20402 + 20408 + 20414 + 20425 + 20428 + 20434 + 20437 + 20442 + 20444 + 6199 + 20461 + 20473 + 20481 + 20483 + 20489 + 20492 + 20501 + 20504 + 20508 + 20511 + 20514 + 20517 + 6293 + 20521 + 20524 +endcidrange + +100 begincidrange + 20527 + 20533 + 20535 + 20537 + 20574 + 20577 + 20579 + 20586 + 20590 + 6387 + 20600 + 20603 + 20605 + 20616 + 20622 + 20625 + 20635 + 20638 + 20642 + 20647 + 20652 + 20656 + 6481 + 20678 + 20684 + 20699 + 20703 + 20706 + 20719 + 20726 + 20734 + 20756 + 6575 + 20766 + 20772 + 20789 + 20794 + 20796 + 20799 + 20805 + 20810 + 20813 + 20818 + 6669 + 20840 + 20843 + 20846 + 20850 + 20853 + 20859 + 20861 + 20867 + 20870 + 20878 + 20883 + 20887 + 20891 + 20893 + 20896 + 20899 + 20902 + 6763 + 20905 + 20911 + 9420 + 20918 + 20920 + 20925 + 20934 + 20944 + 20947 + 20949 + 9119 + 20953 + 20956 + 20963 + 20968 + 6857 + 20972 + 20974 + 20978 + 20980 + 20982 + 20984 + 20990 + 20999 + 21002 + 21007 + 21011 + 9129 + 21013 + 21017 + 21019 + 21024 + 21027 + 6951 + 21037 + 21055 + 21058 + 21070 +endcidrange + +100 begincidrange + 21085 + 21091 + 21101 + 21104 + 7045 + 21112 + 21118 + 21121 + 21128 + 21134 + 21136 + 21155 + 21160 + 9238 + 21166 + 21170 + 21173 + 21179 + 7139 + 21181 + 21184 + 21187 + 21191 + 21207 + 21226 + 21231 + 21243 + 7233 + 21262 + 21267 + 21277 + 21286 + 21291 + 21307 + 21314 + 21334 + 21338 + 21340 + 7327 + 21344 + 21350 + 21361 + 21368 + 21370 + 21382 + 21394 + 21399 + 21405 + 21415 + 7421 + 21420 + 21424 + 9787 + 21427 + 21431 + 21434 + 21443 + 21451 + 21454 + 21457 + 21464 + 21469 + 21472 + 21474 + 21477 + 7515 + 21484 + 21486 + 21492 + 21494 + 21504 + 21509 + 21516 + 21521 + 21532 + 7609 + 21565 + 21567 + 21570 + 21572 + 21579 + 21595 + 21606 + 21613 + 21616 + 21619 + 21625 + 21635 + 21638 + 21640 + 21654 + 21662 + 21664 + 21673 + 21675 + 21677 + 21692 + 21698 + 21707 + 21712 +endcidrange + +51 begincidrange + 21720 + 21722 + 21725 + 21730 + 21734 + 21740 + 21745 + 21759 + 21763 + 21770 + 21773 + 21781 + 21783 + 21787 + 21795 + 21804 + 21812 + 21817 + 21842 + 21847 + 21863 + 21874 + 21877 + 21881 + 21885 + 21901 + 21909 + 21913 + 21920 + 21922 + 9752 + 21924 + 21930 + 21933 + 21939 + 21961 + 21979 + 21983 + 21987 + 21989 + 21992 + 21994 + 21998 + 22003 + 22008 + 22016 + 22018 + 22021 + 22024 + 22032 + 22094 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK2K-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK2K-V new file mode 100644 index 00000000000..a0f57a9c59a --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBK2K-V @@ -0,0 +1,118 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (GBK2K-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (GBK2K-H) +%%BeginResource: CMap (GBK2K-V) +%%Title: (GBK2K-V Adobe GB1 5) +%%Version: 1.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/GBK2K-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 5 def +end def + +/CMapName /GBK2K-V def +/CMapVersion 1.003 def +/CMapType 1 def + +/XUID [1 10 25600] def + +/WMode 1 def + +41 begincidrange + 575 + 574 + 598 + 7704 + 599 + 582 + 7706 + 578 + 580 + 573 + 7707 + 576 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7711 + 22359 + 22361 + 22370 + 22360 + 22368 + 22369 + 22372 + 22374 + 22373 + 22371 + 22376 + 22378 + 22385 + 22377 + 22383 + 22384 + 22387 + 22389 + 22388 + 22386 + 22394 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBKp-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBKp-EUC-H new file mode 100644 index 00000000000..cc7c4d2bd5d --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBKp-EUC-H @@ -0,0 +1,4272 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (GBKp-EUC-H) +%%Title: (GBKp-EUC-H Adobe GB1 2) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 2 def +end def + +/CMapName /GBKp-EUC-H def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25455] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + <8140> +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<8140> <8178> 10072 +<8179> <8179> 8281 +<817a> <817e> 10129 +<8180> <8185> 10134 +<8186> <8186> 8689 +<8187> <81ec> 10140 +<81ed> <81ed> 8178 +<81ee> <81f5> 10242 +<81f6> <81f6> 8285 +<81f7> <81fe> 10250 +<8240> <8252> 10258 +<8253> <8253> 9884 +<8254> <8261> 10277 +<8262> <8262> 8629 +<8263> <8273> 10291 +<8274> <8274> 8908 +<8275> <8279> 10308 +<827a> <827a> 8214 +<827b> <827c> 10313 +<827d> <827d> 7778 +<827e> <827e> 10315 +<8280> <8280> 7968 +<8281> <8282> 10316 +<8283> <8283> 8319 +<8284> <828f> 10318 +<8290> <8290> 8284 +<8291> <82a4> 10330 +<82a5> <82a5> 8596 +<82a6> <82c7> 10350 +<82c8> <82c8> 7781 +<82c9> <82c9> 8833 +<82ca> <82e0> 10384 +<82e1> <82e1> 8909 +<82e2> <82e2> 10407 +<82e3> <82e3> 8458 +<82e4> <82e4> 7742 +<82e5> <82ec> 10408 +<82ed> <82ed> 9855 +<82ee> <82f1> 10416 +<82f2> <82f2> 8750 +<82f3> <82f6> 10420 +<82f7> <82f7> 7830 +<82f8> <82f8> 8907 +<82f9> <82f9> 8812 +<82fa> <82fa> 10424 +<82fb> <82fb> 8471 +<82fc> <82fe> 10425 +<8340> <8340> 10428 +<8341> <8341> 8424 +<8342> <8344> 10429 +<8345> <8345> 8916 +<8346> <8347> 10432 +<8348> <8348> 8121 +<8349> <834b> 10434 +<834c> <834c> 8920 +<834d> <8352> 10437 +<8353> <8353> 8415 +<8354> <8356> 10443 +<8357> <8357> 8386 +<8358> <835d> 10446 +<835e> <835e> 8597 +<835f> <8364> 10452 +<8365> <8365> 8108 +<8366> <8366> 8915 +<8367> <8371> 10458 +<8372> <8372> 8065 +<8373> <8377> 10469 +<8378> <8378> 8720 +<8379> <8379> 10474 +<837a> <837a> 8911 +<837b> <837b> 10475 +<837c> <837c> 8723 +<837d> <837d> 10476 +<837e> <837e> 8164 +<8380> <8380> 8080 +<8381> <8385> 10477 +<8386> <8386> 8918 +<8387> <8388> 10482 +<8389> <8389> 8912 +<838a> <838a> 8910 +<838b> <838c> 10484 +<838d> <838d> 9857 +<838e> <8393> 10486 +<8394> <8394> 7798 +<8395> <839d> 10492 +<839e> <839e> 8753 +<839f> <83a5> 10501 +<83a6> <83a6> 7827 +<83a7> <83aa> 10508 +<83ab> <83ab> 8914 +<83ac> <83ad> 10512 +<83ae> <83ae> 8919 +<83af> <83af> 8917 +<83b0> <83b0> 8913 +<83b1> <83b9> 10514 +<83ba> <83ba> 7909 +<83bb> <83c8> 10523 +<83c9> <83c9> 8229 +<83ca> <83f5> 10537 +endcidrange + +100 begincidrange +<83f6> <83f6> 7887 +<83f7> <83fe> 10581 +<8440> <844f> 10589 +<8450> <8450> 8153 +<8451> <8470> 10605 +<8471> <8471> 8904 +<8472> <8473> 10637 +<8474> <8474> 8803 +<8475> <8476> 10639 +<8477> <8477> 9859 +<8478> <847e> 10641 +<8480> <8481> 10648 +<8482> <8482> 7959 +<8483> <848d> 10650 +<848e> <848e> 7979 +<848f> <8491> 10661 +<8492> <8492> 8906 +<8493> <8493> 7833 +<8494> <849c> 10664 +<849d> <849d> 8015 +<849e> <84a0> 10673 +<84a1> <84a1> 8143 +<84a2> <84a2> 8246 +<84a3> <84a3> 7994 +<84a4> <84a4> 10676 +<84a5> <84a5> 8905 +<84a6> <84a6> 8089 +<84a7> <84a8> 10677 +<84a9> <84a9> 8053 +<84aa> <84c4> 10679 +<84c5> <84c5> 8126 +<84c6> <84d2> 10706 +<84d3> <84d3> 7885 +<84d4> <84d4> 10719 +<84d5> <84d5> 8617 +<84d6> <84d6> 10720 +<84d7> <84d7> 8678 +<84d8> <84d8> 10721 +<84d9> <84d9> 8487 +<84da> <84da> 8195 +<84db> <84dc> 10722 +<84dd> <84dd> 8498 +<84de> <84e9> 10724 +<84ea> <84ea> 8995 +<84eb> <84ed> 10736 +<84ee> <84ee> 8209 +<84ef> <84f0> 10739 +<84f1> <84f1> 8437 +<84f2> <84fe> 10741 +<8540> <8550> 10754 +<8551> <8551> 8901 +<8552> <8552> 8030 +<8553> <8553> 10771 +<8554> <8554> 8902 +<8555> <855d> 10772 +<855e> <855e> 8431 +<855f> <8565> 10781 +<8566> <8566> 8656 +<8567> <857e> 10788 +<8580> <8586> 10812 +<8587> <8587> 8897 +<8588> <858a> 10819 +<858b> <858b> 7780 +<858c> <8591> 10822 +<8592> <8592> 8697 +<8593> <8595> 10828 +<8596> <8596> 8208 +<8597> <8597> 10831 +<8598> <8598> 8898 +<8599> <85a1> 10832 +<85a2> <85a2> 7770 +<85a3> <85b1> 10841 +<85b2> <85b2> 7842 +<85b3> <85fe> 10856 +<8640> <8649> 10932 +<864a> <864a> 9069 +<864b> <8653> 10942 +<8654> <8654> 8775 +<8655> <8667> 10951 +<8668> <8668> 9068 +<8669> <867e> 10970 +<8680> <8695> 10992 +<8696> <8696> 8604 +<8697> <8698> 11014 +<8699> <8699> 8393 +<869a> <86a0> 11016 +<86a1> <86a1> 8688 +<86a2> <86c9> 11023 +<86ca> <86ca> 8459 +<86cb> <86cb> 11063 +<86cc> <86cc> 8414 +<86cd> <86cd> 11064 +<86ce> <86ce> 7850 +<86cf> <86d0> 11065 +<86d1> <86d1> 8748 +<86d2> <86db> 11067 +<86dc> <86dc> 8408 +<86dd> <86dd> 8896 +<86de> <86e0> 11077 +<86e1> <86e1> 8303 +endcidrange + +100 begincidrange +<86e2> <86e7> 11080 +<86e8> <86e8> 8609 +<86e9> <86ed> 11086 +<86ee> <86ee> 9081 +<86ef> <86f3> 11091 +<86f4> <86f4> 9074 +<86f5> <86fe> 11096 +<8740> <8740> 8554 +<8741> <8743> 11106 +<8744> <8744> 9084 +<8745> <8748> 11109 +<8749> <8749> 8368 +<874a> <874a> 11113 +<874b> <874b> 9082 +<874c> <874c> 7796 +<874d> <874e> 11114 +<874f> <874f> 9079 +<8750> <8756> 11116 +<8757> <8757> 8012 +<8758> <8759> 11123 +<875a> <875a> 9080 +<875b> <875b> 8655 +<875c> <875c> 9064 +<875d> <875d> 11125 +<875e> <875e> 9073 +<875f> <875f> 11126 +<8760> <8760> 9065 +<8761> <8765> 11127 +<8766> <8766> 9844 +<8767> <8779> 11132 +<877a> <877a> 9071 +<877b> <877c> 11151 +<877d> <877d> 9072 +<877e> <877e> 11153 +<8780> <8780> 11154 +<8781> <8781> 9078 +<8782> <8782> 9075 +<8783> <8785> 11155 +<8786> <8786> 9087 +<8787> <8787> 11158 +<8788> <8788> 9076 +<8789> <8789> 11159 +<878a> <878a> 8373 +<878b> <878c> 11160 +<878d> <878d> 7899 +<878e> <878e> 9842 +<878f> <8792> 11162 +<8793> <8793> 9070 +<8794> <8797> 11166 +<8798> <8798> 8631 +<8799> <879c> 11170 +<879d> <879d> 9077 +<879e> <87a2> 11174 +<87a3> <87a3> 9090 +<87a4> <87a6> 11179 +<87a7> <87a7> 8350 +<87a8> <87b2> 11182 +<87b3> <87b3> 9067 +<87b4> <87b4> 11193 +<87b5> <87b5> 8249 +<87b6> <87ba> 11194 +<87bb> <87bb> 9887 +<87bc> <87be> 11199 +<87bf> <87bf> 9085 +<87c0> <87c0> 8693 +<87c1> <87c1> 11202 +<87c2> <87c2> 9089 +<87c3> <87c9> 11203 +<87ca> <87ca> 9083 +<87cb> <87cb> 9086 +<87cc> <87cc> 8652 +<87cd> <87ce> 11210 +<87cf> <87cf> 8923 +<87d0> <87d1> 11212 +<87d2> <87d2> 9066 +<87d3> <87d3> 9865 +<87d4> <87d4> 11214 +<87d5> <87d5> 9879 +<87d6> <87d9> 11215 +<87da> <87da> 8865 +<87db> <87f6> 11219 +<87f7> <87f7> 9091 +<87f8> <87f8> 7997 +<87f9> <87f9> 11247 +<87fa> <87fa> 8591 +<87fb> <87fe> 11248 +<8840> <8840> 8774 +<8841> <8841> 8776 +<8842> <8843> 11252 +<8844> <8844> 8574 +<8845> <8845> 11254 +<8846> <8846> 8576 +<8847> <887e> 11255 +<8880> <88b9> 11311 +<88ba> <88ba> 9002 +<88bb> <88cb> 11369 +<88cc> <88cc> 8843 +<88cd> <88d3> 11386 +<88d4> <88d4> 8069 +<88d5> <88d6> 11393 +endcidrange + +100 begincidrange +<88d7> <88d7> 8997 +<88d8> <88de> 11395 +<88df> <88df> 9004 +<88e0> <88e4> 11402 +<88e5> <88e5> 9006 +<88e6> <88f1> 11407 +<88f2> <88f2> 8709 +<88f3> <88f3> 7736 +<88f4> <88f5> 11419 +<88f6> <88f6> 7795 +<88f7> <88fe> 11421 +<8940> <894a> 11429 +<894b> <894b> 8163 +<894c> <894c> 9017 +<894d> <894d> 11440 +<894e> <894e> 9003 +<894f> <894f> 11441 +<8950> <8950> 9005 +<8951> <8953> 11442 +<8954> <8954> 8575 +<8955> <895c> 11445 +<895d> <895d> 8615 +<895e> <895e> 11453 +<895f> <895f> 9007 +<8960> <896c> 11454 +<896d> <896d> 7805 +<896e> <8970> 11467 +<8971> <8971> 8406 +<8972> <897b> 11470 +<897c> <897c> 7874 +<897d> <897e> 11480 +<8980> <898a> 11482 +<898b> <898b> 8882 +<898c> <8998> 11493 +<8999> <8999> 7903 +<899a> <899d> 11506 +<899e> <899e> 7929 +<899f> <89a5> 11510 +<89a6> <89a6> 8409 +<89a7> <89a7> 11517 +<89a8> <89a8> 8157 +<89a9> <89ae> 11518 +<89af> <89af> 8551 +<89b0> <89b9> 11524 +<89ba> <89ba> 8685 +<89bb> <89bd> 11534 +<89be> <89be> 8199 +<89bf> <89bf> 8998 +<89c0> <89c0> 9001 +<89c1> <89c3> 11537 +<89c4> <89c4> 8018 +<89c5> <89c5> 8251 +<89c6> <89c6> 9000 +<89c7> <89c7> 11540 +<89c8> <89c8> 8999 +<89c9> <89cd> 11541 +<89ce> <89ce> 7723 +<89cf> <89d0> 11546 +<89d1> <89d1> 8878 +<89d2> <89d7> 11548 +<89d8> <89d8> 8009 +<89d9> <89da> 11554 +<89db> <89db> 8504 +<89dc> <89f3> 11556 +<89f4> <89f4> 8321 +<89f5> <89fe> 11580 +<8a40> <8a40> 11590 +<8a41> <8a41> 8060 +<8a42> <8a58> 11591 +<8a59> <8a59> 9051 +<8a5a> <8a5a> 7902 +<8a5b> <8a5b> 11614 +<8a5c> <8a5c> 8098 +<8a5d> <8a5d> 11615 +<8a5e> <8a5e> 7930 +<8a5f> <8a78> 11616 +<8a79> <8a79> 8877 +<8a7a> <8a7e> 11642 +<8a80> <8ae3> 11647 +<8ae4> <8ae4> 8255 +<8ae5> <8afe> 11747 +<8b40> <8b43> 11773 +<8b44> <8b44> 7950 +<8b45> <8b48> 11777 +<8b49> <8b49> 9209 +<8b4a> <8b79> 11781 +<8b7a> <8b7a> 9212 +<8b7b> <8b7e> 11829 +<8b80> <8b8b> 11833 +<8b8c> <8b8c> 8297 +<8b8d> <8b9d> 11845 +<8b9e> <8b9e> 9207 +<8b9f> <8bb2> 11862 +<8bb3> <8bb3> 9206 +<8bb4> <8bb8> 11882 +<8bb9> <8bb9> 9213 +<8bba> <8bbd> 11887 +<8bbe> <8bbe> 9208 +<8bbf> <8bc5> 11891 +<8bc6> <8bc6> 9210 +endcidrange + +100 begincidrange +<8bc7> <8bc7> 11898 +<8bc8> <8bc8> 9214 +<8bc9> <8bc9> 8104 +<8bca> <8bd3> 11899 +<8bd4> <8bd4> 9217 +<8bd5> <8bdb> 11909 +<8bdc> <8bdc> 9215 +<8bdd> <8be4> 11916 +<8be5> <8be5> 9216 +<8be6> <8bea> 11924 +<8beb> <8beb> 8737 +<8bec> <8bef> 11929 +<8bf0> <8bf0> 8482 +<8bf1> <8bfe> 11933 +<8c40> <8c43> 11947 +<8c44> <8c44> 9211 +<8c45> <8c4e> 11951 +<8c4f> <8c4f> 8538 +<8c50> <8c56> 11961 +<8c57> <8c57> 8677 +<8c58> <8c5b> 11968 +<8c5c> <8c5c> 8279 +<8c5d> <8c7e> 11972 +<8c80> <8c8a> 12006 +<8c8b> <8c8b> 8421 +<8c8c> <8c8c> 12017 +<8c8d> <8c8d> 8495 +<8c8e> <8c8e> 8355 +<8c8f> <8c8f> 8481 +<8c90> <8c90> 12018 +<8c91> <8c91> 8660 +<8c92> <8c92> 8165 +<8c93> <8c98> 12019 +<8c99> <8c99> 7818 +<8c9a> <8c9a> 7735 +<8c9b> <8ca1> 12025 +<8ca2> <8ca2> 8094 +<8ca3> <8ca3> 8870 +<8ca4> <8ca4> 8680 +<8ca5> <8ca5> 12032 +<8ca6> <8ca6> 7898 +<8ca7> <8ca7> 7865 +<8ca8> <8cbf> 12033 +<8cc0> <8cc0> 9052 +<8cc1> <8cd1> 12057 +<8cd2> <8cd2> 8272 +<8cd3> <8cd3> 7783 +<8cd4> <8cd4> 12074 +<8cd5> <8cd5> 9204 +<8cd6> <8cd8> 12075 +<8cd9> <8cd9> 8510 +<8cda> <8cf8> 12078 +<8cf9> <8cf9> 7958 +<8cfa> <8cfe> 12109 +<8d40> <8d72> 12114 +<8d73> <8d73> 9097 +<8d74> <8d74> 12165 +<8d75> <8d75> 7863 +<8d76> <8d7a> 12166 +<8d7b> <8d7b> 8628 +<8d7c> <8d7e> 12171 +<8d80> <8d87> 12174 +<8d88> <8d88> 9103 +<8d89> <8d8e> 12182 +<8d8f> <8d8f> 7962 +<8d90> <8d9d> 12188 +<8d9e> <8d9e> 9099 +<8d9f> <8db8> 12202 +<8db9> <8db9> 9098 +<8dba> <8de1> 12228 +<8de2> <8de2> 9105 +<8de3> <8de3> 12268 +<8de4> <8de4> 8817 +<8de5> <8de6> 12269 +<8de7> <8de7> 9096 +<8de8> <8df6> 12271 +<8df7> <8df7> 9102 +<8df8> <8dfd> 12286 +<8dfe> <8dfe> 9101 +<8e40> <8e45> 12292 +<8e46> <8e46> 9100 +<8e47> <8e55> 12298 +<8e56> <8e56> 9104 +<8e57> <8e57> 12313 +<8e58> <8e58> 8243 +<8e59> <8e59> 12314 +<8e5a> <8e5a> 8764 +<8e5b> <8e67> 12315 +<8e68> <8e68> 8169 +<8e69> <8e6d> 12328 +<8e6e> <8e6e> 8277 +<8e6f> <8e6f> 12333 +<8e70> <8e70> 9106 +<8e71> <8e7e> 12334 +<8e80> <8e80> 8996 +<8e81> <8e9a> 12348 +<8e9b> <8e9b> 8515 +<8e9c> <8e9e> 12374 +<8e9f> <8e9f> 8489 +<8ea0> <8ea3> 12377 +endcidrange + +100 begincidrange +<8ea4> <8ea4> 8823 +<8ea5> <8ea6> 12381 +<8ea7> <8ea7> 7847 +<8ea8> <8eab> 12383 +<8eac> <8eac> 8837 +<8ead> <8ead> 12387 +<8eae> <8eae> 9092 +<8eaf> <8ebc> 12388 +<8ebd> <8ebd> 9095 +<8ebe> <8ebe> 9094 +<8ebf> <8ec2> 12402 +<8ec3> <8ec3> 8848 +<8ec4> <8ec4> 12406 +<8ec5> <8ec5> 7748 +<8ec6> <8ecc> 12407 +<8ecd> <8ecd> 7730 +<8ece> <8ece> 9093 +<8ecf> <8ed5> 12414 +<8ed6> <8ed6> 7955 +<8ed7> <8ed7> 8051 +<8ed8> <8eeb> 12421 +<8eec> <8eec> 8160 +<8eed> <8efe> 12441 +<8f40> <8f51> 12459 +<8f52> <8f52> 8327 +<8f53> <8f53> 7800 +<8f54> <8f54> 9134 +<8f55> <8f55> 7926 +<8f56> <8f56> 7985 +<8f57> <8f5c> 12477 +<8f5d> <8f5d> 8261 +<8f5e> <8f63> 12483 +<8f64> <8f64> 8568 +<8f65> <8f7e> 12489 +<8f80> <8f85> 12515 +<8f86> <8f86> 9205 +<8f87> <8f87> 12521 +<8f88> <8f88> 8821 +<8f89> <8f94> 12522 +<8f95> <8f95> 9838 +<8f96> <8f96> 12534 +<8f97> <8f97> 7856 +<8f98> <8f9a> 12535 +<8f9b> <8f9b> 8323 +<8f9c> <8f9c> 12538 +<8f9d> <8f9d> 8584 +<8f9e> <8fa0> 12539 +<8fa1> <8fa1> 9852 +<8fa2> <8fbc> 12542 +<8fbd> <8fbd> 8133 +<8fbe> <8fc3> 12569 +<8fc4> <8fc4> 7841 +<8fc5> <8fc5> 12575 +<8fc6> <8fc6> 9107 +<8fc7> <8fcc> 12576 +<8fcd> <8fcd> 7947 +<8fce> <8fd7> 12582 +<8fd8> <8fd8> 7804 +<8fd9> <8ffe> 12592 +<9040> <907e> 12630 +<9080> <909c> 12693 +<909d> <909d> 9140 +<909e> <909e> 8318 +<909f> <90b9> 12722 +<90ba> <90ba> 7907 +<90bb> <90bf> 12749 +<90c0> <90c0> 8341 +<90c1> <90c1> 9147 +<90c2> <90c4> 12754 +<90c5> <90c5> 9145 +<90c6> <90da> 12757 +<90db> <90db> 7720 +<90dc> <90dc> 9149 +<90dd> <90ec> 12778 +<90ed> <90ed> 9141 +<90ee> <90ef> 12794 +<90f0> <90f0> 9146 +<90f1> <90f6> 12796 +<90f7> <90f7> 9139 +<90f8> <90fe> 12802 +<9140> <9141> 12809 +<9142> <9142> 8546 +<9143> <914a> 12811 +<914b> <914b> 7774 +<914c> <914c> 12819 +<914d> <914d> 7773 +<914e> <9150> 12820 +<9151> <9151> 9143 +<9152> <9153> 12823 +<9154> <9154> 7983 +<9155> <9155> 9439 +<9156> <9158> 12825 +<9159> <9159> 9138 +<915a> <915a> 8526 +<915b> <915c> 12828 +<915d> <915d> 8274 +<915e> <9160> 12830 +<9161> <9161> 9148 +<9162> <9162> 12833 +<9163> <9163> 8427 +endcidrange + +100 begincidrange +<9164> <916d> 12834 +<916e> <916e> 8754 +<916f> <9175> 12844 +<9176> <9176> 7743 +<9177> <9179> 12851 +<917a> <917a> 8219 +<917b> <917b> 8380 +<917c> <917c> 9150 +<917d> <917e> 12854 +<9180> <9183> 12856 +<9184> <9184> 7854 +<9185> <918c> 12860 +<918d> <918d> 7931 +<918e> <9190> 12868 +<9191> <9191> 8329 +<9192> <9192> 12871 +<9193> <9193> 9137 +<9194> <9196> 12872 +<9197> <9197> 8644 +<9198> <919a> 12875 +<919b> <919b> 8724 +<919c> <91a8> 12878 +<91a9> <91a9> 8158 +<91aa> <91aa> 8739 +<91ab> <91ab> 9142 +<91ac> <91b9> 12891 +<91ba> <91ba> 9868 +<91bb> <91bb> 9438 +<91bc> <91be> 12905 +<91bf> <91bf> 9440 +<91c0> <91c2> 12908 +<91c3> <91c3> 9144 +<91c4> <91cc> 12911 +<91cd> <91cd> 7809 +<91ce> <91cf> 12920 +<91d0> <91d0> 8190 +<91d1> <91d1> 8017 +<91d2> <91d2> 8673 +<91d3> <91d3> 12922 +<91d4> <91d4> 9136 +<91d5> <91d5> 12923 +<91d6> <91d6> 8142 +<91d7> <91d7> 12924 +<91d8> <91d8> 8478 +<91d9> <91d9> 8225 +<91da> <91de> 12925 +<91df> <91df> 9441 +<91e0> <91e1> 12930 +<91e2> <91e2> 9379 +<91e3> <91e9> 12932 +<91ea> <91ea> 9380 +<91eb> <91ef> 12939 +<91f0> <91f0> 8819 +<91f1> <91f1> 12944 +<91f2> <91f2> 8624 +<91f3> <91fe> 12945 +<9240> <927e> 12957 +<9280> <92b5> 13020 +<92b6> <92b6> 8657 +<92b7> <92cd> 13074 +<92ce> <92ce> 8476 +<92cf> <92cf> 13097 +<92d0> <92d0> 9053 +<92d1> <92d3> 13098 +<92d4> <92d4> 9858 +<92d5> <92de> 13101 +<92df> <92df> 8461 +<92e0> <92e0> 8282 +<92e1> <92fd> 13111 +<92fe> <92fe> 8077 +<9340> <934f> 13140 +<9350> <9350> 8703 +<9351> <935c> 13156 +<935d> <935d> 8024 +<935e> <936f> 13168 +<9370> <9370> 8539 +<9371> <9375> 13186 +<9376> <9376> 7862 +<9377> <937e> 13191 +<9380> <938b> 13199 +<938c> <938c> 8411 +<938d> <939c> 13211 +<939d> <939d> 9056 +<939e> <93a4> 13227 +<93a5> <93a5> 9057 +<93a6> <93a6> 13234 +<93a7> <93a7> 8256 +<93a8> <93b3> 13235 +<93b4> <93b4> 8846 +<93b5> <93b7> 13247 +<93b8> <93b8> 8159 +<93b9> <93ba> 13250 +<93bb> <93bb> 9054 +<93bc> <93bc> 13252 +<93bd> <93bd> 7786 +<93be> <93c5> 13253 +<93c6> <93c6> 8194 +<93c7> <93ce> 13261 +<93cf> <93cf> 8339 +<93d0> <93d6> 13269 +endcidrange + +100 begincidrange +<93d7> <93d7> 9055 +<93d8> <93da> 13276 +<93db> <93db> 7852 +<93dc> <93dc> 7764 +<93dd> <93e0> 13279 +<93e1> <93e1> 7944 +<93e2> <93e3> 13283 +<93e4> <93e4> 8384 +<93e5> <93e5> 9058 +<93e6> <93e8> 13285 +<93e9> <93e9> 8544 +<93ea> <93ea> 13288 +<93eb> <93eb> 8605 +<93ec> <93ec> 8078 +<93ed> <93ed> 8749 +<93ee> <93ee> 13289 +<93ef> <93ef> 8263 +<93f0> <93f0> 13290 +<93f1> <93f1> 8802 +<93f2> <93f3> 13291 +<93f4> <93f4> 8039 +<93f5> <93f5> 7858 +<93f6> <93f9> 13293 +<93fa> <93fa> 7849 +<93fb> <93fd> 13297 +<93fe> <93fe> 8140 +<9440> <9443> 13300 +<9444> <9444> 8050 +<9445> <944c> 13304 +<944d> <944d> 8344 +<944e> <944f> 13312 +<9450> <9450> 7762 +<9451> <9451> 8356 +<9452> <9452> 7964 +<9453> <9453> 8847 +<9454> <9454> 13314 +<9455> <9455> 8173 +<9456> <9457> 13315 +<9458> <9458> 9061 +<9459> <945a> 13317 +<945b> <945b> 7725 +<945c> <945c> 8530 +<945d> <945d> 9062 +<945e> <945e> 13319 +<945f> <945f> 8442 +<9460> <9463> 13320 +<9464> <9464> 9059 +<9465> <9465> 13324 +<9466> <9466> 8346 +<9467> <946d> 13325 +<946e> <946e> 8252 +<946f> <9471> 13332 +<9472> <9472> 8182 +<9473> <9473> 13335 +<9474> <9474> 9060 +<9475> <9475> 13336 +<9476> <9476> 7785 +<9477> <9477> 13337 +<9478> <9478> 9063 +<9479> <9479> 13338 +<947a> <947a> 8477 +<947b> <947e> 13339 +<9480> <9480> 8793 +<9481> <9481> 8278 +<9482> <9482> 8547 +<9483> <9486> 13343 +<9487> <9487> 8105 +<9488> <9488> 8188 +<9489> <94a0> 13347 +<94a1> <94a1> 7726 +<94a2> <94b2> 13371 +<94b3> <94b3> 7868 +<94b4> <94b4> 13388 +<94b5> <94b5> 8514 +<94b6> <94be> 13389 +<94bf> <94bf> 8222 +<94c0> <94c0> 7747 +<94c1> <94cb> 13398 +<94cc> <94cc> 9428 +<94cd> <94d7> 13409 +<94d8> <94d8> 8815 +<94d9> <94df> 13420 +<94e0> <94e0> 7895 +<94e1> <94fe> 13427 +<9540> <9571> 13457 +<9572> <9572> 8493 +<9573> <957e> 13507 +<9580> <9582> 13519 +<9583> <9583> 8859 +<9584> <959d> 13522 +<959e> <959e> 8790 +<959f> <959f> 9384 +<95a0> <95b2> 13548 +<95b3> <95b3> 7801 +<95b4> <95b9> 13567 +<95ba> <95ba> 8794 +<95bb> <95ce> 13573 +<95cf> <95cf> 9383 +<95d0> <95d0> 13593 +<95d1> <95d1> 9862 +endcidrange + +100 begincidrange +<95d2> <95d2> 9382 +<95d3> <95d3> 13594 +<95d4> <95d4> 8654 +<95d5> <95e0> 13595 +<95e1> <95e1> 9385 +<95e2> <95e6> 13607 +<95e7> <95e7> 8167 +<95e8> <95f0> 13612 +<95f1> <95f1> 8466 +<95f2> <95f7> 13621 +<95f8> <95f8> 8508 +<95f9> <95fd> 13627 +<95fe> <95fe> 8028 +<9640> <9655> 13632 +<9656> <9656> 9412 +<9657> <967b> 13654 +<967c> <967c> 7884 +<967d> <967e> 13691 +<9680> <96fe> 13693 +<9740> <9766> 13820 +<9767> <9767> 9322 +<9768> <976b> 13859 +<976c> <976c> 8565 +<976d> <976d> 13863 +<976e> <976e> 9325 +<976f> <977e> 13864 +<9780> <9795> 13880 +<9796> <9796> 9323 +<9797> <9797> 8799 +<9798> <979c> 13902 +<979d> <979d> 7886 +<979e> <97a2> 13907 +<97a3> <97a3> 8818 +<97a4> <97be> 13912 +<97bf> <97bf> 9331 +<97c0> <97ed> 13939 +<97ee> <97ee> 8702 +<97ef> <97f6> 13985 +<97f7> <97f7> 7934 +<97f8> <97fe> 13993 +<9840> <9844> 14000 +<9845> <9845> 9333 +<9846> <9848> 14005 +<9849> <9849> 8714 +<984a> <984e> 14008 +<984f> <984f> 8047 +<9850> <9870> 14013 +<9871> <9871> 9320 +<9872> <9872> 14046 +<9873> <9873> 8448 +<9874> <987e> 14047 +<9880> <9880> 14058 +<9881> <9881> 9334 +<9882> <988a> 14059 +<988b> <988b> 7975 +<988c> <988c> 8407 +<988d> <989f> 14068 +<98a0> <98a0> 9340 +<98a1> <98a9> 14087 +<98aa> <98aa> 8097 +<98ab> <98b5> 14096 +<98b6> <98b6> 8874 +<98b7> <98b7> 8197 +<98b8> <98b9> 14107 +<98ba> <98ba> 9324 +<98bb> <98c6> 14109 +<98c7> <98c7> 8254 +<98c8> <98ca> 14121 +<98cb> <98cb> 7756 +<98cc> <98cf> 14124 +<98d0> <98d0> 8506 +<98d1> <98d2> 14128 +<98d3> <98d3> 8708 +<98d4> <98e2> 14130 +<98e3> <98e3> 8387 +<98e4> <98e4> 8512 +<98e5> <98e5> 9335 +<98e6> <98ee> 14145 +<98ef> <98ef> 9332 +<98f0> <98f1> 14154 +<98f2> <98f2> 8413 +<98f3> <98fe> 14156 +<9940> <9942> 14168 +<9943> <9943> 8040 +<9944> <9944> 14171 +<9945> <9945> 8581 +<9946> <9965> 14172 +<9966> <9966> 9330 +<9967> <996d> 14204 +<996e> <996e> 7861 +<996f> <9974> 14211 +<9975> <9975> 9336 +<9976> <9979> 14217 +<997a> <997a> 8075 +<997b> <997b> 9348 +<997c> <997e> 14221 +<9980> <9984> 14224 +<9985> <9985> 9881 +<9986> <9988> 14229 +<9989> <9989> 9346 +endcidrange + +100 begincidrange +<998a> <998d> 14232 +<998e> <998e> 8353 +<998f> <9990> 14236 +<9991> <9991> 8082 +<9992> <9998> 14238 +<9999> <9999> 7992 +<999a> <99a8> 14245 +<99a9> <99a9> 9349 +<99aa> <99af> 14260 +<99b0> <99b0> 9344 +<99b1> <99b1> 9326 +<99b2> <99b2> 14266 +<99b3> <99b3> 9339 +<99b4> <99b4> 9350 +<99b5> <99b5> 9329 +<99b6> <99bc> 14267 +<99bd> <99bd> 9347 +<99be> <99be> 9328 +<99bf> <99bf> 14274 +<99c0> <99c0> 9321 +<99c1> <99c1> 14275 +<99c2> <99c2> 9343 +<99c3> <99c8> 14276 +<99c9> <99c9> 9327 +<99ca> <99cd> 14282 +<99ce> <99ce> 9345 +<99cf> <99d0> 14286 +<99d1> <99d1> 8736 +<99d2> <99d9> 14288 +<99da> <99da> 8181 +<99db> <99df> 14296 +<99e0> <99e0> 8436 +<99e1> <99e4> 14301 +<99e5> <99e5> 9341 +<99e6> <99e7> 14305 +<99e8> <99e8> 9337 +<99e9> <99eb> 14307 +<99ec> <99ec> 9342 +<99ed> <99f3> 14310 +<99f4> <99f4> 9338 +<99f5> <99fe> 14317 +<9a40> <9a49> 14327 +<9a4a> <9a4a> 8419 +<9a4b> <9a56> 14337 +<9a57> <9a57> 8365 +<9a58> <9a64> 14349 +<9a65> <9a65> 9419 +<9a66> <9a66> 14362 +<9a67> <9a67> 8019 +<9a68> <9a70> 14363 +<9a71> <9a71> 8537 +<9a72> <9a75> 14372 +<9a76> <9a76> 8211 +<9a77> <9a77> 7987 +<9a78> <9a7e> 14376 +<9a80> <9a87> 14383 +<9a88> <9a88> 7772 +<9a89> <9a8b> 14391 +<9a8c> <9a8c> 9352 +<9a8d> <9a90> 14394 +<9a91> <9a91> 9351 +<9a92> <9a96> 14398 +<9a97> <9a97> 9354 +<9a98> <9a99> 14403 +<9a9a> <9a9a> 9353 +<9a9b> <9a9b> 9355 +<9a9c> <9a9d> 14405 +<9a9e> <9a9e> 8067 +<9a9f> <9aa1> 14407 +<9aa2> <9aa2> 8463 +<9aa3> <9aa3> 8155 +<9aa4> <9aa9> 14410 +<9aaa> <9aaa> 8367 +<9aab> <9acf> 14416 +<9ad0> <9ad0> 9408 +<9ad1> <9ad5> 14453 +<9ad6> <9ad6> 8813 +<9ad7> <9ad9> 14458 +<9ada> <9ada> 9409 +<9adb> <9ae1> 14461 +<9ae2> <9ae2> 8394 +<9ae3> <9ae3> 14468 +<9ae4> <9ae4> 8423 +<9ae5> <9ae5> 9410 +<9ae6> <9afe> 14469 +<9b40> <9b7e> 14494 +<9b80> <9bd0> 14557 +<9bd1> <9bd1> 9180 +<9bd2> <9bdb> 14638 +<9bdc> <9bdc> 9179 +<9bdd> <9bfe> 14648 +<9c40> <9c52> 14682 +<9c53> <9c53> 8286 +<9c54> <9c58> 14701 +<9c59> <9c59> 8772 +<9c5a> <9c5a> 9186 +<9c5b> <9c5b> 14706 +<9c5c> <9c5c> 8404 +<9c5d> <9c74> 14707 +<9c75> <9c75> 8607 +endcidrange + +100 begincidrange +<9c76> <9c78> 14731 +<9c79> <9c79> 7782 +<9c7a> <9c7e> 14734 +<9c80> <9c85> 14739 +<9c86> <9c86> 8035 +<9c87> <9c9c> 14745 +<9c9d> <9c9d> 9181 +<9c9e> <9caa> 14767 +<9cab> <9cab> 8555 +<9cac> <9cc9> 14780 +<9cca> <9cca> 8885 +<9ccb> <9cce> 14810 +<9ccf> <9ccf> 7974 +<9cd0> <9ce5> 14814 +<9ce6> <9ce6> 7779 +<9ce7> <9ce7> 8328 +<9ce8> <9ceb> 14836 +<9cec> <9cec> 7869 +<9ced> <9ced> 14840 +<9cee> <9cee> 9025 +<9cef> <9cfa> 14841 +<9cfb> <9cfb> 8011 +<9cfc> <9cfd> 14853 +<9cfe> <9cfe> 8850 +<9d40> <9d41> 14855 +<9d42> <9d42> 8484 +<9d43> <9d45> 14857 +<9d46> <9d46> 8264 +<9d47> <9d47> 9184 +<9d48> <9d4c> 14860 +<9d4d> <9d4d> 8311 +<9d4e> <9d4e> 14865 +<9d4f> <9d4f> 8762 +<9d50> <9d60> 14866 +<9d61> <9d61> 8369 +<9d62> <9d67> 14883 +<9d68> <9d68> 8001 +<9d69> <9d69> 8220 +<9d6a> <9d6d> 14889 +<9d6e> <9d6e> 8888 +<9d6f> <9d70> 14893 +<9d71> <9d71> 8822 +<9d72> <9d74> 14895 +<9d75> <9d75> 8091 +<9d76> <9d7a> 14898 +<9d7b> <9d7b> 8095 +<9d7c> <9d7c> 14903 +<9d7d> <9d7d> 9674 +<9d7e> <9d7e> 14904 +<9d80> <9d89> 14905 +<9d8a> <9d8a> 8382 +<9d8b> <9d8c> 14915 +<9d8d> <9d8d> 8116 +<9d8e> <9d90> 14917 +<9d91> <9d91> 9175 +<9d92> <9d98> 14920 +<9d99> <9d99> 8453 +<9d9a> <9da0> 14927 +<9da1> <9da1> 9185 +<9da2> <9da2> 8172 +<9da3> <9da6> 14934 +<9da7> <9da7> 9194 +<9da8> <9dab> 14938 +<9dac> <9dac> 9187 +<9dad> <9dad> 8462 +<9dae> <9db1> 14942 +<9db2> <9db2> 8102 +<9db3> <9db3> 8196 +<9db4> <9dbd> 14946 +<9dbe> <9dbe> 8093 +<9dbf> <9dc5> 14956 +<9dc6> <9dc6> 9189 +<9dc7> <9dc8> 14963 +<9dc9> <9dc9> 8804 +<9dca> <9dcc> 14965 +<9dcd> <9dcd> 9442 +<9dce> <9dd1> 14968 +<9dd2> <9dd2> 9182 +<9dd3> <9dd4> 14972 +<9dd5> <9dd5> 7876 +<9dd6> <9de0> 14974 +<9de1> <9de1> 8886 +<9de2> <9de2> 8361 +<9de3> <9df0> 14985 +<9df1> <9df1> 8491 +<9df2> <9df3> 14999 +<9df4> <9df4> 8357 +<9df5> <9df6> 15001 +<9df7> <9df7> 9867 +<9df8> <9df9> 15003 +<9dfa> <9dfa> 8054 +<9dfb> <9dfc> 15005 +<9dfd> <9dfd> 8557 +<9dfe> <9dfe> 15007 +<9e40> <9e44> 15008 +<9e45> <9e45> 8193 +<9e46> <9e47> 15013 +<9e48> <9e48> 8593 +<9e49> <9e49> 7760 +<9e4a> <9e51> 15015 +endcidrange + +100 begincidrange +<9e52> <9e52> 8092 +<9e53> <9e53> 15023 +<9e54> <9e54> 9178 +<9e55> <9e55> 15024 +<9e56> <9e56> 8275 +<9e57> <9e5c> 15025 +<9e5d> <9e5d> 9193 +<9e5e> <9e5e> 9188 +<9e5f> <9e60> 15031 +<9e61> <9e61> 8661 +<9e62> <9e62> 15033 +<9e63> <9e63> 9190 +<9e64> <9e66> 15034 +<9e67> <9e67> 9183 +<9e68> <9e6b> 15037 +<9e6c> <9e6c> 7759 +<9e6d> <9e6e> 15041 +<9e6f> <9e6f> 9177 +<9e70> <9e71> 15043 +<9e72> <9e72> 8212 +<9e73> <9e73> 15045 +<9e74> <9e74> 9196 +<9e75> <9e75> 9195 +<9e76> <9e7a> 15046 +<9e7b> <9e7b> 9176 +<9e7c> <9e7c> 9198 +<9e7d> <9e7e> 15051 +<9e80> <9e84> 15053 +<9e85> <9e85> 9870 +<9e86> <9e86> 15058 +<9e87> <9e87> 9197 +<9e88> <9e90> 15059 +<9e91> <9e91> 8186 +<9e92> <9e95> 15068 +<9e96> <9e96> 9174 +<9e97> <9e97> 9192 +<9e98> <9ea1> 15072 +<9ea2> <9ea2> 8454 +<9ea3> <9ea5> 15082 +<9ea6> <9ea6> 8203 +<9ea7> <9ea8> 15085 +<9ea9> <9ea9> 8550 +<9eaa> <9ead> 15087 +<9eae> <9eae> 9199 +<9eaf> <9eb2> 15091 +<9eb3> <9eb3> 8585 +<9eb4> <9eb4> 8280 +<9eb5> <9eb6> 15095 +<9eb7> <9eb7> 9191 +<9eb8> <9ef4> 15097 +<9ef5> <9ef5> 8611 +<9ef6> <9efe> 15158 +<9f40> <9f4d> 15167 +<9f4e> <9f4e> 8570 +<9f4f> <9f6e> 15181 +<9f6f> <9f6f> 8613 +<9f70> <9f7e> 15213 +<9f80> <9f91> 15228 +<9f92> <9f92> 8226 +<9f93> <9f97> 15246 +<9f98> <9f98> 9430 +<9f99> <9fa5> 15251 +<9fa6> <9fa6> 9018 +<9fa7> <9fa8> 15264 +<9fa9> <9fa9> 7918 +<9faa> <9fab> 15266 +<9fac> <9fac> 9429 +<9fad> <9fc8> 15268 +<9fc9> <9fc9> 8744 +<9fca> <9fcc> 15296 +<9fcd> <9fcd> 9431 +<9fce> <9fe0> 15299 +<9fe1> <9fe1> 8444 +<9fe2> <9fea> 15318 +<9feb> <9feb> 7815 +<9fec> <9fed> 15327 +<9fee> <9fee> 9432 +<9fef> <9ff3> 15329 +<9ff4> <9ff4> 7866 +<9ff5> <9ffc> 15334 +<9ffd> <9ffd> 8473 +<9ffe> <9ffe> 15342 + 15343 + 8556 + 15346 + 9433 + 15348 + 8743 + 15350 + 7775 + 15354 + 8863 + 15359 + 8029 + 15364 + 8124 + 15370 + 9434 + 15371 + 8521 +endcidrange + +100 begincidrange + 15384 + 8262 + 15386 + 8192 + 15396 + 8592 + 15412 + 8712 + 15414 + 7910 + 15415 + 9411 + 15433 + 8396 + 15454 + 9024 + 15468 + 7889 + 15478 + 8620 + 15482 + 8879 + 15497 + 96 + 9897 + 190 + 240 + 250 + 262 + 356 + 439 + 525 + 549 + 602 + 635 + 9907 + 9970 + 668 + 700 + 9992 + 10016 + 10018 + 10019 + 10050 + 7703 + 738 + 15513 + 8630 + 7741 + 15526 + 8757 + 15560 + 9111 + 15561 + 9109 + 15564 + 8767 + 8490 + 15566 + 15569 + 7890 + 15595 + 9110 + 9112 + 15596 + 8354 + 15597 + 814 + 8036 + 15598 + 8235 + 15600 + 9108 + 8505 + 15601 + 8543 + 8641 + 9114 + 15602 + 9113 + 15604 + 15653 + 908 + 15686 + 8640 + 15692 + 9312 + 15734 + 9308 + 15744 + 15746 + 8541 + 15759 + 8741 + 8298 + 15764 + 15776 + 9313 + 15785 + 9307 +endcidrange + +100 begincidrange + 15805 + 9314 + 15807 + 8020 + 15813 + 9311 + 15824 + 15834 + 8428 + 15836 + 9309 + 15840 + 9315 + 15843 + 9316 + 15848 + 15863 + 9381 + 15883 + 7792 + 15896 + 8335 + 15924 + 7746 + 15928 + 8014 + 15933 + 7857 + 15941 + 7819 + 15952 + 8134 + 15988 + 9646 + 16010 + 16013 + 7937 + 8704 + 16015 + 9650 + 7831 + 16025 + 8363 + 16026 + 9651 + 16036 + 8232 + 16038 + 16039 + 9647 + 16040 + 9649 + 16041 + 9644 + 16051 + 7758 + 16055 + 8706 + 9643 + 8838 + 16057 + 9645 + 16058 + 9654 + 16059 + 8675 + 9652 + 8751 + 8549 + 9655 + 16060 + 7913 + 16067 + 7717 + 16083 + 16084 + 9664 + 16107 + 8858 + 16108 + 940 + 16115 + 8814 + 16126 + 8125 + 16127 + 8068 + 8370 + 16128 + 8259 + 16129 + 16173 + 9860 + 16196 + 1034 + 16205 + 9455 + 16206 + 9454 + 16243 +endcidrange + +100 begincidrange + 8308 + 16248 + 9863 + 16254 + 9456 + 16264 + 9869 + 16272 + 8864 + 16288 + 1128 + 16294 + 8107 + 16297 + 9896 + 16341 + 16355 + 9449 + 16363 + 9445 + 16366 + 8698 + 16367 + 1222 + 16385 + 8520 + 16405 + 9444 + 16408 + 9446 + 8439 + 16413 + 8299 + 16414 + 8871 + 16433 + 9452 + 16441 + 9451 + 16444 + 9443 + 16449 + 9450 + 16458 + 1316 + 16471 + 7826 + 16472 + 7719 + 16481 + 8166 + 16491 + 9447 + 8210 + 7916 + 16494 + 9448 + 16498 + 16527 + 8038 + 9436 + 16555 + 1410 + 16558 + 9890 + 16576 + 9437 + 16578 + 8206 + 16581 + 9435 + 7864 + 16582 + 16616 + 1504 + 16649 + 8853 + 16663 + 7808 + 16665 + 9847 + 16672 + 9764 + 8041 + 8747 + 16682 + 9599 + 8027 + 16698 + 8603 + 16704 + 9853 + 16705 + 1598 + 16735 + 8608 + 8582 + 16738 + 8429 + 16739 +endcidrange + +100 begincidrange + 9657 + 16745 + 8170 + 16748 + 7844 + 8417 + 16756 + 9656 + 8800 + 16757 + 8418 + 16758 + 8513 + 16780 + 16787 + 8135 + 16789 + 1692 + 16819 + 7745 + 16835 + 9700 + 16851 + 8070 + 16876 + 16879 + 8115 + 16908 + 7919 + 1786 + 16910 + 8868 + 16912 + 9704 + 16913 + 9699 + 16930 + 8465 + 16932 + 9702 + 16938 + 9703 + 16947 + 8257 + 16956 + 16966 + 9706 + 16970 + 8079 + 16971 + 9708 + 16972 + 9707 + 16976 + 8400 + 8221 + 16992 + 1880 + 8183 + 16993 + 7821 + 17001 + 9705 + 17015 + 9710 + 8250 + 17017 + 9875 + 17020 + 9701 + 9709 + 17024 + 8201 + 17025 + 8293 + 17026 + 9891 + 17029 + 17045 + 1974 + 17078 + 9717 + 7932 + 17096 + 8228 + 17102 + 9883 + 17108 + 9715 + 17109 + 8921 + 17110 + 9716 + 17111 + 9243 + 17112 + 8136 + 17115 + 8059 + 17116 +endcidrange + +100 begincidrange + 9245 + 17117 + 8780 + 8008 + 9244 + 9246 + 8447 + 8602 + 17118 + 8337 + 17119 + 8359 + 17121 + 9251 + 7835 + 9250 + 17123 + 8464 + 17124 + 8845 + 8049 + 7928 + 9249 + 17125 + 7923 + 17128 + 8625 + 9254 + 9253 + 8480 + 17138 + 2068 + 17141 + 8474 + 9252 + 17143 + 9256 + 17144 + 9258 + 9257 + 17146 + 8852 + 17147 + 8894 + 17148 + 7729 + 17149 + 9260 + 17156 + 8117 + 17157 + 9259 + 8111 + 17169 + 8296 + 8676 + 17171 + 7969 + 17174 + 8449 + 17175 + 8572 + 8522 + 9261 + 17182 + 8148 + 17184 + 8145 + 17185 + 7731 + 17192 + 9263 + 17193 + 9262 + 17195 + 9264 + 8667 + 17196 + 8536 + 17201 + 8130 + 17204 + 2162 + 17209 + 8889 + 17212 + 9270 + 17213 + 7822 + 9273 + 17216 + 8645 + 9271 + 8594 + 17222 + 9274 + 7961 + 8588 + 7744 + 8883 +endcidrange + +100 begincidrange + 17223 + 8287 + 9272 + 9266 + 8820 + 17226 + 7836 + 9265 + 8325 + 17227 + 9269 + 17231 + 9275 + 17233 + 8119 + 9267 + 17235 + 8276 + 8670 + 17240 + 9268 + 17241 + 9277 + 8073 + 9276 + 17243 + 8046 + 7896 + 17246 + 7871 + 9285 + 17247 + 8777 + 17248 + 9281 + 17250 + 7751 + 8022 + 17251 + 8326 + 17253 + 8598 + 17255 + 9283 + 9279 + 17256 + 8227 + 17257 + 9282 + 17258 + 9278 + 17260 + 2256 + 9894 + 17261 + 9038 + 9286 + 9291 + 9284 + 17273 + 9255 + 9292 + 17277 + 7951 + 17286 + 9287 + 9289 + 9288 + 17287 + 8642 + 17290 + 8558 + 17293 + 7939 + 17296 + 9290 + 8540 + 17297 + 8891 + 9296 + 17299 + 9876 + 9295 + 9718 + 8273 + 17300 + 9294 + 17301 + 8890 + 8045 + 17303 + 9298 + 9297 + 17308 + 9301 + 17318 + 8841 + 8470 + 17319 + 9300 +endcidrange + +100 begincidrange + 17323 + 2350 + 8443 + 17326 + 9280 + 17329 + 8486 + 8033 + 9885 + 17335 + 8074 + 9302 + 9305 + 9304 + 17336 + 8110 + 17338 + 8730 + 17343 + 8058 + 9293 + 9303 + 17345 + 9299 + 17353 + 9248 + 17354 + 8671 + 9861 + 17355 + 7790 + 17356 + 8740 + 9840 + 17359 + 8634 + 17360 + 9306 + 17361 + 8191 + 17363 + 17365 + 9698 + 17392 + 9882 + 17393 + 2444 + 17396 + 7914 + 17412 + 7724 + 17415 + 8290 + 9457 + 17425 + 9458 + 17426 + 9714 + 17444 + 8725 + 17446 + 17452 + 8622 + 17473 + 2538 + 17484 + 8416 + 17498 + 9666 + 17520 + 9665 + 17521 + 8488 + 17542 + 17543 + 8601 + 17547 + 8215 + 7840 + 8485 + 8525 + 17561 + 9668 + 8349 + 8842 + 17562 + 9667 + 17563 + 8569 + 2632 + 8248 + 17566 + 8533 + 17568 + 8658 + 17623 + 17626 + 9415 + 17630 + 8825 +endcidrange + +100 begincidrange + 17652 + 2726 + 17657 + 8483 + 17666 + 9413 + 17668 + 9417 + 17675 + 8340 + 17678 + 8854 + 17680 + 7799 + 17687 + 7942 + 17706 + 8101 + 17708 + 17712 + 8345 + 17713 + 7853 + 9416 + 8360 + 17728 + 8223 + 17732 + 8389 + 17733 + 9418 + 17734 + 2820 + 17738 + 8176 + 17742 + 9414 + 17743 + 8797 + 8926 + 17747 + 8236 + 17752 + 8545 + 17764 + 8763 + 8665 + 8139 + 8137 + 17767 + 17791 + 7777 + 17810 + 9711 + 17818 + 8088 + 17819 + 2914 + 17821 + 9712 + 17822 + 8072 + 17824 + 8696 + 17826 + 8994 + 17853 + 9014 + 17867 + 17879 + 3008 + 17912 + 8875 + 17950 + 8127 + 17958 + 8061 + 17964 + 9011 + 17968 + 17971 + 3102 + 18004 + 8013 + 18005 + 9012 + 18018 + 8177 + 18020 + 8587 + 18039 + 9033 + 18046 + 8715 + 18061 + 9030 + 18068 + 9031 + 18078 + 8595 +endcidrange + +100 begincidrange + 18079 + 9889 + 18083 + 8034 + 18086 + 3196 + 18089 + 9037 + 9032 + 18104 + 7776 + 18133 + 9029 + 18134 + 7954 + 18140 + 18147 + 8216 + 9013 + 18162 + 9020 + 18173 + 3290 + 18177 + 9839 + 18191 + 9041 + 18198 + 8096 + 18200 + 9016 + 18202 + 8731 + 18206 + 9026 + 18218 + 9039 + 18221 + 9021 + 18225 + 9028 + 9009 + 18228 + 9035 + 18229 + 9019 + 18230 + 9040 + 18237 + 7860 + 8614 + 18241 + 8651 + 18243 + 9045 + 18250 + 3384 + 18256 + 9022 + 18259 + 8052 + 18260 + 9008 + 18261 + 9856 + 18264 + 8410 + 18266 + 9034 + 18274 + 8081 + 18279 + 8455 + 18280 + 9023 + 18290 + 8180 + 9027 + 18306 + 18308 + 8722 + 18315 + 8711 + 18321 + 9049 + 18324 + 8788 + 18333 + 9010 + 18334 + 3478 + 7718 + 9047 + 18336 + 9048 + 8258 + 8531 + 18343 + 8379 + 18346 +endcidrange + +100 begincidrange + 9050 + 18358 + 9046 + 18361 + 9015 + 18364 + 8185 + 18372 + 9043 + 18383 + 8289 + 18386 + 18387 + 7829 + 18401 + 8265 + 18406 + 8002 + 18407 + 8168 + 18413 + 3572 + 18416 + 18479 + 9690 + 18495 + 9687 + 18502 + 3666 + 18510 + 8494 + 18549 + 8626 + 18559 + 18571 + 8606 + 18572 + 9692 + 18577 + 8300 + 18596 + 8742 + 18598 + 3760 + 18600 + 9696 + 18614 + 8827 + 18620 + 9694 + 18622 + 9697 + 18625 + 9685 + 18640 + 7787 + 18646 + 9691 + 18647 + 7817 + 18649 + 9689 + 18652 + 18654 + 8721 + 18655 + 8745 + 9686 + 18662 + 9693 + 9695 + 18670 + 8175 + 18679 + 9688 + 3854 + 18680 + 7977 + 18693 + 7771 + 18696 + 8310 + 18699 + 8855 + 18705 + 9872 + 18708 + 8511 + 18714 + 8600 + 18718 + 7816 + 18719 + 8844 + 18733 + 18734 + 3948 + 18767 + 9713 + 18788 +endcidrange + +100 begincidrange + 8204 + 18791 + 7768 + 8876 + 18798 + 9895 + 18816 + 9846 + 18823 + 18824 + 8161 + 9659 + 18853 + 4042 + 9662 + 18855 + 8925 + 18857 + 9661 + 18866 + 7722 + 18880 + 9660 + 9658 + 18886 + 9663 + 18889 + 8583 + 18893 + 9835 + 18894 + 7807 + 18896 + 8621 + 18898 + 18907 + 8086 + 18917 + 7986 + 18920 + 8324 + 18923 + 8502 + 18925 + 9400 + 18926 + 9402 + 4136 + 18934 + 9404 + 18938 + 8420 + 18941 + 9401 + 18942 + 9405 + 18944 + 9406 + 18946 + 9407 + 18950 + 8146 + 18952 + 8189 + 18954 + 9403 + 7981 + 18955 + 9737 + 18980 + 9738 + 18981 + 7828 + 18982 + 18984 + 8927 + 7883 + 7949 + 18989 + 8055 + 18992 + 8683 + 18993 + 8929 + 18994 + 8559 + 18995 + 8928 + 18996 + 8682 + 18998 + 8930 + 8395 + 18999 + 8056 + 19000 + 7906 + 19002 + 8690 + 4230 +endcidrange + +100 begincidrange + 19003 + 8528 + 19004 + 8147 + 19007 + 8933 + 19008 + 7922 + 19012 + 8479 + 19014 + 8669 + 19017 + 8532 + 19019 + 8935 + 19020 + 8834 + 19023 + 8934 + 19028 + 8936 + 19032 + 8932 + 19038 + 8810 + 19039 + 8939 + 19040 + 8937 + 8381 + 19041 + 8938 + 19043 + 8893 + 19045 + 7838 + 19047 + 8950 + 8679 + 8726 + 19049 + 8503 + 19051 + 8492 + 19053 + 7784 + 8946 + 7991 + 8947 + 19054 + 8943 + 8016 + 7952 + 8648 + 19055 + 8945 + 19056 + 8944 + 19061 + 8942 + 19063 + 4324 + 19064 + 8941 + 8862 + 8940 + 8162 + 19067 + 8446 + 19070 + 8953 + 19073 + 7855 + 19074 + 8758 + 19076 + 8951 + 19077 + 8765 + 19080 + 7810 + 8118 + 19081 + 8612 + 8618 + 8952 + 8529 + 19082 + 8032 + 19083 + 8519 + 19086 + 8517 + 19089 + 8156 + 19090 + 8961 + 19093 + 7925 +endcidrange + +100 begincidrange + 19095 + 8728 + 19097 + 7878 + 19099 + 8960 + 19101 + 8884 + 19102 + 8553 + 19104 + 8957 + 19105 + 8426 + 19106 + 8948 + 19107 + 8955 + 19108 + 8956 + 8231 + 19109 + 8288 + 8959 + 19112 + 8958 + 7879 + 19115 + 8972 + 19116 + 8949 + 19119 + 4418 + 8966 + 19120 + 8970 + 8659 + 19121 + 8963 + 19124 + 8967 + 8971 + 19125 + 8031 + 19127 + 8969 + 19128 + 8962 + 7940 + 8861 + 19130 + 8699 + 19131 + 8968 + 19132 + 8364 + 19133 + 8334 + 8965 + 8599 + 19134 + 8561 + 8856 + 19135 + 8023 + 19138 + 8322 + 19141 + 8977 + 19142 + 8964 + 19145 + 8975 + 7733 + 19146 + 8401 + 8976 + 8099 + 19147 + 8662 + 19148 + 8710 + 19151 + 19153 + 8973 + 19156 + 8978 + 8333 + 8979 + 19158 + 8931 + 19163 + 8122 + 19168 + 8312 + 19172 + 4512 + 19179 + 8840 + 19182 +endcidrange + +100 begincidrange + 8982 + 8043 + 19186 + 8980 + 19192 + 8496 + 8981 + 8552 + 19193 + 8388 + 19194 + 8984 + 19207 + 8729 + 8727 + 19209 + 8405 + 19212 + 8010 + 19214 + 8768 + 19219 + 7891 + 19221 + 19227 + 7753 + 19230 + 9755 + 19233 + 7789 + 8440 + 19236 + 8187 + 8985 + 19237 + 8974 + 19242 + 8983 + 19243 + 4606 + 19252 + 8392 + 19265 + 7933 + 19270 + 19313 + 7739 + 8831 + 19329 + 7948 + 7769 + 7972 + 19330 + 8378 + 8037 + 7920 + 8548 + 7984 + 8801 + 19334 + 4695 + 19335 + 8866 + 9387 + 19336 + 9391 + 7912 + 7993 + 19337 + 7752 + 8304 + 7848 + 19338 + 9388 + 7927 + 8566 + 9389 + 19339 + 8315 + 8005 + 9386 + 8267 + 8239 + 8026 + 9392 + 19340 + 8887 + 8063 + 19341 + 8805 + 19342 + 9394 + 8475 + 7761 + 19348 + 9396 + 19349 + 9395 + 19353 + 7839 +endcidrange + +100 begincidrange + 19354 + 8472 + 19355 + 8372 + 9135 + 8635 + 8306 + 8085 + 19356 + 7946 + 9398 + 19357 + 8849 + 9397 + 8824 + 7892 + 19359 + 8179 + 19365 + 8873 + 9399 + 7976 + 8457 + 8903 + 19370 + 9390 + 8881 + 19375 + 8806 + 19377 + 8795 + 8900 + 19378 + 8469 + 4789 + 19379 + 8746 + 9393 + 19380 + 8509 + 19385 + 7957 + 8796 + 19389 + 7956 + 19425 + 8826 + 19428 + 19435 + 8430 + 19440 + 9720 + 19448 + 4883 + 19466 + 8084 + 19498 + 8752 + 19521 + 19527 + 9725 + 19531 + 9728 + 19537 + 9734 + 19549 + 4977 + 19557 + 9727 + 19562 + 9724 + 7820 + 9730 + 19571 + 8781 + 19572 + 9732 + 9726 + 9731 + 19573 + 9729 + 19578 + 9733 + 19582 + 7843 + 9736 + 19585 + 9735 + 19588 + 8432 + 19604 + 19606 + 7803 + 8807 + 7990 + 8150 + 19613 + 8672 + 19616 + 9356 +endcidrange + +100 begincidrange + 19617 + 9357 + 19623 + 8450 + 19626 + 9364 + 5071 + 19630 + 9363 + 19636 + 9358 + 19642 + 8857 + 9361 + 9366 + 9359 + 9362 + 19647 + 9367 + 19648 + 8113 + 19652 + 9370 + 19653 + 9369 + 19654 + 8792 + 9368 + 19655 + 9371 + 19662 + 7945 + 8422 + 19663 + 8230 + 9375 + 8025 + 9373 + 19668 + 19672 + 7995 + 9372 + 19673 + 7738 + 8283 + 19675 + 8048 + 19679 + 9376 + 19682 + 8507 + 19686 + 7943 + 19688 + 8816 + 8759 + 19690 + 9426 + 19692 + 8627 + 5165 + 8773 + 9377 + 19693 + 8872 + 19695 + 8828 + 8112 + 19698 + 9378 + 19703 + 8006 + 19713 + 9088 + 9365 + 19714 + 9360 + 19715 + 7728 + 19726 + 7837 + 7755 + 7754 + 8362 + 19729 + 19741 + 9851 + 19759 + 9202 + 19771 + 5259 + 8830 + 19772 + 8217 + 19773 + 8123 + 19783 + 8787 + 19797 + 7998 +endcidrange + +100 begincidrange + 7846 + 8590 + 19798 + 8684 + 19801 + 7870 + 19802 + 8778 + 19803 + 8499 + 19807 + 7812 + 19813 + 8399 + 8674 + 19815 + 8719 + 19816 + 8233 + 19817 + 8307 + 8021 + 19818 + 9201 + 19820 + 7750 + 19821 + 8291 + 9203 + 19824 + 5353 + 19846 + 8990 + 19862 + 8755 + 19874 + 8992 + 19885 + 8647 + 19887 + 8892 + 19895 + 8988 + 19896 + 8785 + 19897 + 19902 + 7867 + 19909 + 8839 + 19914 + 8237 + 7851 + 19915 + 8989 + 19916 + 8991 + 19917 + 8987 + 19919 + 5447 + 19928 + 8993 + 19930 + 8789 + 19963 + 7823 + 19966 + 8716 + 8100 + 19977 + 19986 + 8347 + 8664 + 19990 + 9722 + 19991 + 9721 + 19992 + 8500 + 19994 + 9459 + 9464 + 19995 + 9463 + 7880 + 9462 + 19996 + 8832 + 19998 + 7877 + 9467 + 20003 + 5541 + 20004 + 9466 + 20005 + 7917 + 20006 + 9469 +endcidrange + +100 begincidrange + 20017 + 9465 + 20018 + 9470 + 8397 + 20019 + 9480 + 9476 + 20024 + 9478 + 20026 + 9471 + 8336 + 20029 + 7901 + 7973 + 20032 + 9475 + 9474 + 20033 + 7802 + 8358 + 20035 + 8149 + 20043 + 7953 + 20047 + 9479 + 9472 + 9477 + 20048 + 9497 + 20054 + 9493 + 20055 + 9484 + 8241 + 20057 + 9483 + 9487 + 9498 + 9481 + 20059 + 9486 + 8756 + 9491 + 8064 + 20061 + 9473 + 5635 + 20065 + 9495 + 9494 + 20067 + 9496 + 20070 + 7766 + 20073 + 9485 + 20076 + 8403 + 20077 + 8314 + 8398 + 20079 + 9488 + 20081 + 7765 + 20084 + 9482 + 20087 + 9489 + 20092 + 8106 + 20101 + 9502 + 7967 + 20102 + 9517 + 8733 + 20105 + 9522 + 20107 + 8571 + 20108 + 8623 + 20118 + 9516 + 20119 + 9512 + 20121 + 8332 + 20122 + 9519 + 20123 + 8636 + 20124 + 9501 + 20127 + 9525 +endcidrange + +100 begincidrange + 20129 + 8717 + 9510 + 20130 + 5729 + 9524 + 9514 + 9503 + 9521 + 9500 + 20131 + 9509 + 20134 + 8653 + 20139 + 8666 + 20140 + 8562 + 9534 + 20141 + 8271 + 20145 + 9539 + 20146 + 8663 + 20147 + 7740 + 20148 + 9513 + 20151 + 9505 + 20153 + 7935 + 20155 + 9535 + 20165 + 9540 + 20166 + 9507 + 7824 + 9530 + 9541 + 20169 + 9533 + 20170 + 8385 + 20171 + 8451 + 9504 + 9532 + 9531 + 9528 + 20173 + 9536 + 20177 + 8141 + 20178 + 7960 + 20181 + 9547 + 20185 + 9543 + 9551 + 20189 + 5823 + 20190 + 8880 + 20196 + 9542 + 20197 + 9548 + 20199 + 7834 + 9554 + 9520 + 9545 + 20201 + 9553 + 7882 + 20204 + 8402 + 20205 + 8120 + 20208 + 8313 + 20209 + 8619 + 20211 + 9549 + 7845 + 20213 + 8268 + 8320 + 20215 + 9837 + 20217 + 9527 + 20218 + 9546 + 8632 +endcidrange + +100 begincidrange + 20224 + 9550 + 20225 + 9468 + 9556 + 20227 + 20229 + 7996 + 20230 + 7893 + 20231 + 9558 + 20237 + 8808 + 20240 + 7894 + 20242 + 9559 + 9555 + 20250 + 9544 + 20253 + 5917 + 8412 + 20254 + 9561 + 20257 + 8087 + 9557 + 20261 + 8829 + 20264 + 9598 + 20267 + 8316 + 20270 + 9562 + 20271 + 9566 + 20273 + 7732 + 20275 + 8542 + 20285 + 9568 + 20286 + 8610 + 9044 + 20295 + 9571 + 9511 + 20297 + 9518 + 9560 + 20298 + 7963 + 20299 + 8835 + 20300 + 9572 + 20301 + 8352 + 20303 + 9573 + 20304 + 9569 + 20306 + 9570 + 20312 + 9580 + 20315 + 9581 + 8224 + 20318 + 9567 + 9578 + 6011 + 20320 + 9582 + 20323 + 9529 + 9564 + 20327 + 9576 + 9579 + 7791 + 20330 + 8132 + 9575 + 20331 + 9563 + 20332 + 9757 + 20335 + 9515 + 20347 + 9585 + 20348 + 9591 + 20349 +endcidrange + +100 begincidrange + 9506 + 20358 + 9523 + 20365 + 20367 + 8234 + 20369 + 9526 + 9587 + 9583 + 20370 + 8851 + 9592 + 20373 + 9584 + 20376 + 9589 + 20378 + 9537 + 9565 + 20383 + 8218 + 6105 + 20388 + 9594 + 8198 + 20391 + 8567 + 20392 + 9499 + 20394 + 9508 + 20395 + 9595 + 20398 + 8867 + 20402 + 9593 + 20407 + 9574 + 20408 + 8083 + 20413 + 9596 + 20414 + 9492 + 20425 + 9597 + 20427 + 9586 + 20428 + 9588 + 20434 + 8782 + 20436 + 8646 + 20437 + 8351 + 20441 + 9590 + 20442 + 8292 + 8895 + 9756 + 8798 + 20444 + 6199 + 20461 + 7797 + 20473 + 8317 + 20480 + 9151 + 8467 + 20481 + 9152 + 20483 + 7749 + 20485 + 8152 + 9156 + 20486 + 9154 + 8452 + 20487 + 8637 + 20488 + 8071 + 9155 + 20489 + 8809 + 20492 + 8003 + 20500 + 7966 + 9849 + 7915 + 20501 + 7989 + 8330 +endcidrange + +100 begincidrange + 20503 + 9159 + 9161 + 9158 + 20504 + 8783 + 20508 + 9163 + 20511 + 8691 + 20513 + 8695 + 9167 + 9166 + 9162 + 9165 + 20514 + 9168 + 20517 + 9836 + 20519 + 9153 + 20520 + 8174 + 9169 + 6293 + 8184 + 20521 + 9171 + 20524 + 9170 + 9172 + 7832 + 20527 + 7980 + 20532 + 9173 + 20533 + 7793 + 9873 + 20535 + 9157 + 20537 + 8986 + 20574 + 8468 + 20577 + 8836 + 20579 + 8732 + 20585 + 7806 + 8269 + 20586 + 8705 + 20590 + 7897 + 6387 + 20599 + 8114 + 20600 + 8786 + 20603 + 8057 + 20605 + 8535 + 20615 + 8639 + 20616 + 8735 + 20621 + 8253 + 20622 + 8213 + 20624 + 9893 + 20625 + 8534 + 20635 + 8516 + 20637 + 7825 + 8791 + 20638 + 8202 + 8338 + 20642 + 20647 + 8784 + 20652 + 7875 + 20656 + 6481 + 20678 + 8616 + 20684 + 9741 + 20699 + 9740 + 20702 +endcidrange + +100 begincidrange + 9742 + 20703 + 8242 + 20706 + 9739 + 20719 + 8899 + 20726 + 20734 + 7971 + 20756 + 6575 + 20766 + 9877 + 20772 + 9822 + 20789 + 9821 + 20794 + 9874 + 20796 + 9823 + 20798 + 8589 + 8445 + 20799 + 8000 + 20805 + 9317 + 20810 + 9319 + 20812 + 9318 + 20813 + 20818 + 8649 + 20835 + 8713 + 7881 + 8425 + 20836 + 8650 + 8518 + 9669 + 8668 + 20837 + 9310 + 20838 + 8527 + 20839 + 9670 + 6669 + 9671 + 8769 + 8586 + 7727 + 7900 + 20840 + 8383 + 8244 + 20843 + 9673 + 20846 + 9672 + 20850 + 8718 + 20852 + 9675 + 20853 + 8573 + 20859 + 8062 + 20861 + 9676 + 8131 + 20867 + 8377 + 20869 + 8577 + 20870 + 8154 + 20878 + 8563 + 7905 + 9677 + 20883 + 9678 + 8694 + 20887 + 8779 + 9681 + 20890 + 7872 + 20891 + 8200 + 20893 + 9680 + 20896 + 9682 + 20898 +endcidrange + +100 begincidrange + 7978 + 20899 + 7794 + 9683 + 20902 + 6763 + 8638 + 9684 + 8260 + 20904 + 9679 + 8435 + 20905 + 7936 + 20911 + 9420 + 20916 + 9880 + 20917 + 9848 + 20918 + 9422 + 20920 + 9423 + 20925 + 8376 + 20932 + 9424 + 20933 + 9425 + 20934 + 7924 + 20944 + 9115 + 20946 + 9854 + 20947 + 20949 + 9117 + 9119 + 20951 + 9121 + 20952 + 7921 + 20953 + 8734 + 20955 + 9122 + 20956 + 8523 + 7734 + 8501 + 20963 + 8109 + 20967 + 7763 + 20968 + 6857 + 20970 + 9123 + 8707 + 20971 + 7911 + 20972 + 9124 + 8343 + 7908 + 20974 + 8760 + 20978 + 9125 + 20980 + 8090 + 20982 + 8643 + 20984 + 7982 + 20990 + 9116 + 20999 + 9126 + 21002 + 9118 + 21006 + 8245 + 9127 + 21007 + 9128 + 21010 + 8309 + 21011 + 9129 + 9131 + 8171 + 9132 + 21013 + 8042 + 8441 + 21017 + 9830 +endcidrange + +100 begincidrange + 21019 + 9831 + 21023 + 7788 + 21024 + 9133 + 21027 + 6951 + 21037 + 8301 + 8770 + 7938 + 21055 + 8579 + 21057 + 7813 + 8681 + 21058 + 7767 + 21070 + 8869 + 9223 + 8138 + 21084 + 9218 + 8066 + 21085 + 9224 + 9220 + 21087 + 8497 + 21088 + 8580 + 21089 + 9219 + 21090 + 8302 + 9227 + 21091 + 7999 + 21101 + 8295 + 21104 + 7045 + 21112 + 8151 + 21117 + 7811 + 21118 + 9231 + 21121 + 9230 + 8391 + 9229 + 21128 + 9234 + 21134 + 8375 + 21136 + 9200 + 21153 + 9233 + 9236 + 21154 + 8560 + 21155 + 9221 + 8460 + 9237 + 21160 + 8294 + 21165 + 9042 + 9235 + 9232 + 9238 + 8433 + 21166 + 9226 + 21170 + 9225 + 21172 + 9240 + 21173 + 8103 + 21178 + 8700 + 21179 + 7139 + 8129 + 9222 + 21181 + 8860 + 21184 + 8270 + 21186 + 9242 + 9241 + 21187 + 9228 +endcidrange + +100 begincidrange + 21191 + 7721 + 21207 + 9825 + 21225 + 9892 + 8564 + 9827 + 9826 + 21226 + 21231 + 9845 + 21243 + 8524 + 7233 + 21262 + 9850 + 21267 + 9888 + 21277 + 9832 + 21283 + 7888 + 21284 + 8342 + 21285 + 9164 + 21286 + 9160 + 21290 + 8766 + 21291 + 9829 + 21307 + 9828 + 21313 + 8761 + 21314 + 8266 + 21334 + 9759 + 21338 + 9758 + 21340 + 7327 + 21344 + 9760 + 21349 + 9761 + 21350 + 9762 + 21360 + 9767 + 7737 + 9765 + 21361 + 9769 + 21368 + 9774 + 9771 + 21370 + 9770 + 9773 + 21381 + 9768 + 8633 + 21382 + 21394 + 9782 + 9776 + 21399 + 9784 + 21404 + 8205 + 9783 + 21405 + 9797 + 21414 + 9786 + 21415 + 9795 + 7421 + 21419 + 9792 + 21420 + 9789 + 9793 + 21423 + 9790 + 21424 + 9791 + 8128 + 21426 + 9787 + 21427 + 9794 + 21431 + 9796 + 21434 + 9785 +endcidrange + +100 begincidrange + 21442 + 9804 + 21443 + 9799 + 9803 + 21451 + 9801 + 21454 + 9800 + 21456 + 9802 + 8456 + 21457 + 21464 + 9805 + 21469 + 9780 + 21471 + 9809 + 21472 + 9808 + 9810 + 21474 + 9807 + 21477 + 9778 + 9806 + 9811 + 21480 + 9815 + 21481 + 9781 + 21482 + 9779 + 21483 + 9814 + 7515 + 21484 + 9812 + 21486 + 9816 + 21492 + 9813 + 7757 + 21494 + 9819 + 21502 + 9818 + 21503 + 9817 + 8238 + 9775 + 21504 + 9798 + 21508 + 9766 + 21509 + 9820 + 21516 + 9772 + 21521 + 9763 + 21531 + 9777 + 21532 + 7609 + 21565 + 8348 + 21567 + 9600 + 21570 + 8924 + 21572 + 7941 + 8331 + 21578 + 9601 + 21579 + 9603 + 9602 + 21594 + 8686 + 21595 + 8578 + 21606 + 8771 + 21611 + 9607 + 21612 + 9608 + 21613 + 21615 + 9604 + 21616 + 8701 + 21618 + 8687 + 21619 + 9610 + 9612 +endcidrange + +100 begincidrange + 21625 + 8007 + 21635 + 7965 + 21638 + 9613 + 21640 + 8144 + 9618 + 9615 + 21654 + 9620 + 7904 + 21662 + 9617 + 9621 + 21664 + 9623 + 21672 + 8374 + 21673 + 9624 + 21675 + 8438 + 21677 + 21692 + 9605 + 21697 + 9625 + 21698 + 9622 + 21707 + 9626 + 21711 + 9627 + 21712 + 21720 + 9629 + 21722 + 9630 + 21725 + 9036 + 21730 + 8004 + 21734 + 9824 + 9632 + 21740 + 9628 + 21743 + 9631 + 21744 + 8044 + 21745 + 9634 + 21759 + 8366 + 21762 + 9611 + 9635 + 21763 + 21770 + 9609 + 9637 + 21773 + 9636 + 21781 + 9638 + 9619 + 21783 + 9639 + 8738 + 9641 + 21787 + 21795 + 9640 + 21804 + 9606 + 21812 + 9633 + 9642 + 21816 + 9616 + 9614 + 21817 + 9864 + 21842 + 9886 + 9723 + 21845 + 8076 + 8692 + 21846 + 21847 + 8207 + 21863 + 8305 + 21874 + 9719 + 21876 +endcidrange + +70 begincidrange + 21877 + 9878 + 21881 + 9871 + 21885 + 8922 + 21901 + 7873 + 21909 + 7859 + 21913 + 9834 + 21919 + 9866 + 21920 + 9833 + 21922 + 9752 + 21924 + 21930 + 9754 + 21933 + 9843 + 21939 + 21961 + 8390 + 8811 + 21979 + 9427 + 7814 + 21982 + 9743 + 21983 + 9745 + 21987 + 9747 + 21989 + 9744 + 9746 + 8240 + 21991 + 9841 + 21992 + 9748 + 21994 + 9750 + 21997 + 9749 + 21998 + 8434 + 22003 + 9751 + 22007 + 22008 + 8247 + 22016 + 8371 + 22018 + 7970 + 9453 + 22021 + 7988 + 22024 + 2562 + 16595 + 8204 + 20611 + 4697 + 22032 + 22094 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBKp-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBKp-EUC-V new file mode 100644 index 00000000000..3058d722391 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBKp-EUC-V @@ -0,0 +1,97 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (GBKp-EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (GBKp-EUC-H) +%%BeginResource: CMap (GBKp-EUC-V) +%%Title: (GBKp-EUC-V Adobe GB1 2) +%%Version: 12.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/GBKp-EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 2 def +end def + +/CMapName /GBKp-EUC-V def +/CMapVersion 12.002 def +/CMapType 1 def + +/XUID [1 10 25456] def + +/WMode 1 def + +20 begincidrange + 575 + 574 + 598 + 7704 + 599 + 582 + 7706 + 578 + 580 + 573 + 7707 + 576 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7711 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBpc-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBpc-EUC-H new file mode 100644 index 00000000000..65e07f78d94 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBpc-EUC-H @@ -0,0 +1,175 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (GBpc-EUC-H) +%%Title: (GBpc-EUC-H Adobe GB1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 0 def +end def + +/CMapName /GBpc-EUC-H def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 0 def +/XUID [1 10 25364] def + +/WMode 0 def + +3 begincodespacerange + <00> <80> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +91 begincidrange +<20> <7e> 1 +<80> <80> 7712 + 96 + 190 + 240 + 250 + 262 + 356 + 439 + 525 + 549 + 602 + 635 + 668 + 700 + 738 + 814 + 908 + 940 + 1034 + 1128 + 1222 + 1316 + 1410 + 1504 + 1598 + 1692 + 1786 + 1880 + 1974 + 2068 + 2162 + 2256 + 2350 + 2444 + 2538 + 2632 + 2726 + 2820 + 2914 + 3008 + 3102 + 3196 + 3290 + 3384 + 3478 + 3572 + 3666 + 3760 + 3854 + 3948 + 4042 + 4136 + 4230 + 4324 + 4418 + 4512 + 4606 + 4695 + 4789 + 4883 + 4977 + 5071 + 5165 + 5259 + 5353 + 5447 + 5541 + 5635 + 5729 + 5823 + 5917 + 6011 + 6105 + 6199 + 6293 + 6387 + 6481 + 6575 + 6669 + 6763 + 6857 + 6951 + 7045 + 7139 + 7233 + 7327 + 7421 + 7515 + 7609 + 7713 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/GBpc-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBpc-EUC-V new file mode 100644 index 00000000000..1b0ef7c3f80 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/GBpc-EUC-V @@ -0,0 +1,98 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (GBpc-EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (GBpc-EUC-H) +%%BeginResource: CMap (GBpc-EUC-V) +%%Title: (GBpc-EUC-V Adobe GB1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/GBpc-EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 0 def +end def + +/CMapName /GBpc-EUC-V def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 300 def +/XUID [1 10 25365] def + +/WMode 1 def + +20 begincidrange + 575 + 574 + 598 + 7704 + 599 + 582 + 7706 + 578 + 580 + 573 + 7707 + 576 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7711 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/H b/fontbox/src/main/resources/org/apache/fontbox/cmap/H new file mode 100644 index 00000000000..e9d5c4aa0e3 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/H @@ -0,0 +1,200 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (H) +%%Title: (H Adobe Japan1 1) +%%Version: 10.005 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2015 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /H def + +/CMapVersion 10.005 def +/CMapType 1 def + +/UIDOffset 280 def +/XUID [1 10 25335] def + +/WMode 0 def + +1 begincodespacerange + <2121> <7E7E> +endcodespacerange + +100 begincidrange +<2121> <217e> 633 +<2221> <222e> 727 +<223a> <2241> 741 +<224a> <2250> 749 +<225c> <226a> 756 +<2272> <2279> 771 +<227e> <227e> 779 +<2330> <2339> 780 +<2341> <235a> 790 +<2361> <237a> 816 +<2421> <2473> 842 +<2521> <2576> 925 +<2621> <2638> 1011 +<2641> <2658> 1035 +<2721> <2741> 1059 +<2751> <2771> 1092 +<2821> <2821> 7479 +<2822> <2822> 7481 +<2823> <2823> 7491 +<2824> <2824> 7495 +<2825> <2825> 7503 +<2826> <2826> 7499 +<2827> <2827> 7507 +<2828> <2828> 7523 +<2829> <2829> 7515 +<282a> <282a> 7531 +<282b> <282b> 7539 +<282c> <282c> 7480 +<282d> <282d> 7482 +<282e> <282e> 7494 +<282f> <282f> 7498 +<2830> <2830> 7506 +<2831> <2831> 7502 +<2832> <2832> 7514 +<2833> <2833> 7530 +<2834> <2834> 7522 +<2835> <2835> 7538 +<2836> <2836> 7554 +<2837> <2837> 7511 +<2838> <2838> 7526 +<2839> <2839> 7519 +<283a> <283a> 7534 +<283b> <283b> 7542 +<283c> <283c> 7508 +<283d> <283d> 7527 +<283e> <283e> 7516 +<283f> <283f> 7535 +<2840> <2840> 7545 +<3021> <307e> 1125 +<3121> <317e> 1219 +<3221> <327e> 1313 +<3321> <337e> 1407 +<3421> <347e> 1501 +<3521> <357e> 1595 +<3621> <367e> 1689 +<3721> <377e> 1783 +<3821> <387e> 1877 +<3921> <397e> 1971 +<3a21> <3a7e> 2065 +<3b21> <3b7e> 2159 +<3c21> <3c7e> 2253 +<3d21> <3d7e> 2347 +<3e21> <3e7e> 2441 +<3f21> <3f7e> 2535 +<4021> <407e> 2629 +<4121> <417e> 2723 +<4221> <427e> 2817 +<4321> <437e> 2911 +<4421> <447e> 3005 +<4521> <457e> 3099 +<4621> <467e> 3193 +<4721> <477e> 3287 +<4821> <487e> 3381 +<4921> <497e> 3475 +<4a21> <4a7e> 3569 +<4b21> <4b7e> 3663 +<4c21> <4c7e> 3757 +<4d21> <4d7e> 3851 +<4e21> <4e7e> 3945 +<4f21> <4f53> 4039 +<5021> <507e> 4090 +<5121> <517e> 4184 +<5221> <527e> 4278 +<5321> <537e> 4372 +<5421> <547e> 4466 +<5521> <557e> 4560 +<5621> <567e> 4654 +<5721> <577e> 4748 +<5821> <587e> 4842 +<5921> <597e> 4936 +<5a21> <5a7e> 5030 +<5b21> <5b7e> 5124 +<5c21> <5c7e> 5218 +<5d21> <5d7e> 5312 +<5e21> <5e7e> 5406 +<5f21> <5f7e> 5500 +<6021> <607e> 5594 +<6121> <617e> 5688 +<6221> <627e> 5782 +<6321> <637e> 5876 +endcidrange + +18 begincidrange +<6421> <647e> 5970 +<6521> <657e> 6064 +<6621> <667e> 6158 +<6721> <677e> 6252 +<6821> <687e> 6346 +<6921> <697e> 6440 +<6a21> <6a7e> 6534 +<6b21> <6b7e> 6628 +<6c21> <6c7e> 6722 +<6d21> <6d7e> 6816 +<6e21> <6e7e> 6910 +<6f21> <6f7e> 7004 +<7021> <707e> 7098 +<7121> <717e> 7192 +<7221> <727e> 7286 +<7321> <737e> 7380 +<7421> <7424> 7474 +<7425> <7426> 8284 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/HKscs-B5-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/HKscs-B5-H new file mode 100644 index 00000000000..c85585edf88 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/HKscs-B5-H @@ -0,0 +1,1331 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (HKscs-B5-H) +%%Title: (HKscs-B5-H Adobe CNS1 6) +%%Version: 2.006 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 6 def +end def + +/CMapName /HKscs-B5-H def +/CMapVersion 2.006 def +/CMapType 1 def + +/XUID [1 10 25580] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + <8740> +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidchar +<8943> 17718 +<894c> 17723 +<894d> 17347 +<8951> 17306 +<89a6> 17314 +<89ab> 17388 +<89ac> 17777 +<89ad> 17387 +<89ae> 17778 +<89cf> 17340 +<89d9> 17308 +<89da> 17815 +<89db> 17310 +<89dc> 17816 +<89dd> 17311 +<89e1> 17313 +<89e2> 17820 +<89e3> 17315 +<89fa> 17321 +<8a40> 17845 +<8a41> 17161 +<8a4d> 17846 +<8a5a> 17847 +<8a5e> 17848 +<8a71> 17849 +<8a76> 17214 +<8a77> 17850 +<8a7a> 17851 +<8a7b> 17219 +<8a7c> 17852 +<8a7d> 17221 +<8a7e> 17853 +<8aa8> 17854 +<8ab6> 17855 +<8ab7> 17245 +<8ab8> 17856 +<8ab9> 17247 +<8acc> 17857 +<8ae6> 17860 +<8ae7> 17371 +<8b40> 17883 +<8b45> 17294 +<8b46> 17886 +<8b47> 17295 +<8b48> 17887 +<8b49> 17296 +<8b4a> 17888 +<8b4b> 17297 +<8b4c> 17889 +<8b58> 17303 +<8b59> 17896 +<8b5a> 17304 +<8b5b> 17348 +<8b61> 17319 +<8b68> 17324 +<8c62> 19022 +<8cdb> 19023 +<8cdc> 18964 +<8d40> 19057 +<8d62> 17338 +<8d68> 17339 +<8d69> 17312 +<8d6a> 17341 +<8d6e> 17342 +<8d76> 17343 +<8d7a> 17344 +<8d7b> 17981 +<8d7c> 17345 +<8da5> 17346 +<8da8> 17337 +<8da9> 17325 +<8db6> 17351 +<8dc3> 17352 +<8dfa> 17401 +<8e45> 18072 +<8e69> 4181 +<8e6a> 14164 +<8e6f> 11752 +<8e76> 18075 +<8e7b> 18076 +<8e7e> 289 +<8ea6> 18077 +<8eab> 4203 +<8eb4> 4902 +<8eb8> 18078 +<8ec9> 18079 +<8ecd> 1643 +<8ed0> 4910 +<8ee5> 18080 +<8eef> 18081 +<8ef6> 18082 +<8f57> 3381 +<8f58> 14296 +<8f59> 18083 +<8f5f> 18084 +<8f67> 18085 +<8f68> 14309 +<8f69> 10178 +<8f6e> 8877 +<8f79> 18086 +endcidchar + +100 begincidchar +<8fb0> 18087 +<8fc5> 18088 +<8fc6> 14368 +<8fc7> 18089 +<8fca> 18090 +<8fcb> 4940 +<8fcc> 16377 +<8fda> 18091 +<8fe3> 18092 +<8ffc> 18093 +<8ffd> 14420 +<8ffe> 2510 +<9055> 18094 +<906d> 3015 +<906e> 14466 +<906f> 18098 +<907a> 14057 +<90a6> 18099 +<90b8> 18100 +<90dc> 5009 +<90f1> 5796 +<9165> 18101 +<916e> 18102 +<917e> 18103 +<91a1> 14633 +<91a2> 18104 +<91bf> 12402 +<91c8> 18105 +<9244> 14728 +<9264> 18106 +<926d> 18107 +<92b1> 284 +<92b2> 283 +<92c8> 16300 +<92d1> 10620 +<92e5> 18108 +<92f2> 18109 +<9368> 18110 +<93aa> 18111 +<93c2> 18112 +<93e5> 18113 +<93e8> 18114 +<93eb> 18115 +<9446> 18116 +<9447> 7430 +<9479> 18117 +<94ca> 10657 +<94cb> 18118 +<954d> 18119 +<955a> 18120 +<955f> 18121 +<95c6> 18122 +<95d9> 6171 +<9644> 15919 +<9651> 18123 +<966a> 18124 +<96d4> 18125 +<96ed> 15478 +<96fc> 11044 +<986f> 18128 +<9877> 15705 +<987a> 15706 +<98a3> 15707 +<98af> 15708 +<98b4> 17354 +<98b5> 18154 +<98b6> 15709 +<98b7> 18155 +<98b8> 17356 +<98b9> 15710 +<98ba> 18156 +<98bb> 17402 +<98bc> 18157 +<98c2> 15713 +<98c3> 18161 +<98c4> 15714 +<98c5> 18162 +<98d2> 17357 +<98da> 18178 +<98db> 17361 +<98df> 17364 +<98e3> 15717 +<98e7> 15718 +<98ed> 15719 +<98f0> 15720 +<98f1> 18195 +<98f2> 15721 +<98f3> 18196 +<98fc> 15722 +<98fd> 18203 +<98fe> 17367 +<9942> 17404 +<9943> 15723 +<9944> 18206 +<9945> 15724 +<9946> 18207 +<9947> 17368 +<994f> 15725 +<9954> 17369 +<995c> 17370 +endcidchar + +100 begincidchar +<9964> 17372 +<996a> 15726 +<996e> 15727 +<9975> 15728 +<9978> 15729 +<99a1> 18255 +<99a2> 15730 +<99a3> 18256 +<99a4> 17349 +<99a5> 18257 +<99a6> 17350 +<99ae> 15731 +<99b2> 17374 +<99b6> 15732 +<99ba> 15733 +<99ca> 17376 +<99cd> 17378 +<99d3> 17379 +<99d6> 17381 +<99df> 17375 +<99e2> 15734 +<99e3> 18308 +<99e4> 17323 +<99e5> 18309 +<99e6> 17383 +<99e7> 18310 +<99e8> 17385 +<99ef> 17405 +<99f4> 15735 +<9a4a> 15736 +<9a4b> 18341 +<9a4c> 15737 +<9a59> 15738 +<9a5f> 17327 +<9a60> 18359 +<9a61> 15739 +<9a66> 17389 +<9a67> 18364 +<9a68> 15740 +<9a69> 17390 +<9a6a> 18365 +<9a6b> 17407 +<9a73> 15741 +<9a74> 18373 +<9a75> 17393 +<9a7e> 15742 +<9aa3> 17395 +<9aa4> 18384 +<9aa5> 17394 +<9aa9> 17400 +<9aaa> 17396 +<9ab2> 15743 +<9ab7> 15744 +<9ab8> 18399 +<9ab9> 15745 +<9aba> 18400 +<9abb> 15746 +<9abc> 18401 +<9abd> 17335 +<9ac7> 15747 +<9ad0> 15748 +<9ad1> 18419 +<9ad2> 15749 +<9ae2> 15753 +<9ae3> 18432 +<9ae4> 15754 +<9ae8> 15755 +<9ae9> 17328 +<9aee> 17330 +<9af2> 15756 +<9af6> 15757 +<9afb> 15758 +<9b46> 15759 +<9b4a> 15760 +<9b54> 15762 +<9b58> 15763 +<9b59> 18474 +<9b5a> 15764 +<9b5b> 18475 +<9b5c> 15765 +<9b5d> 18476 +<9b60> 18477 +<9b76> 12112 +<9b77> 15773 +<9b78> 5925 +<9b7b> 13037 +<9b7c> 15776 +<9b7d> 18496 +<9b7e> 15777 +<9ba1> 15778 +<9ba2> 18497 +<9bab> 18500 +<9bac> 15785 +<9baf> 15786 +<9bbe> 15795 +<9bbf> 18509 +<9bc6> 10969 +<9bca> 15803 +<9bcb> 18513 +<9bcc> 15804 +endcidchar + +100 begincidchar +<9bcd> 18514 +<9bce> 17360 +<9bcf> 18515 +<9bd2> 18516 +<9bd3> 15807 +<9bd4> 18517 +<9bd5> 15808 +<9bdd> 15812 +<9bde> 7188 +<9bdf> 15813 +<9be0> 18522 +<9be1> 15814 +<9be2> 18523 +<9be3> 15815 +<9be7> 15816 +<9be8> 18527 +<9bec> 16890 +<9bed> 18528 +<9bf3> 15823 +<9bf6> 4841 +<9bf7> 18534 +<9bfa> 18535 +<9c42> 11438 +<9c43> 18538 +<9c47> 18539 +<9c48> 15835 +<9c49> 18540 +<9c4a> 15836 +<9c53> 6756 +<9c54> 18543 +<9c55> 15844 +<9c56> 18544 +<9c5c> 18545 +<9c5d> 15850 +<9c60> 15851 +<9c61> 18548 +<9c62> 5124 +<9c63> 18549 +<9c67> 18550 +<9c68> 8996 +<9c69> 18551 +<9c6a> 15857 +<9c6b> 13418 +<9c6c> 18552 +<9c6d> 15858 +<9c6e> 18553 +<9c77> 8849 +<9c78> 18556 +<9c79> 15866 +<9c7a> 18557 +<9c7d> 18558 +<9c7e> 15869 +<9ca5> 15872 +<9caa> 18563 +<9cab> 15875 +<9cac> 18564 +<9cbb> 18567 +<9cbc> 6023 +<9cbd> 2399 +<9cce> 18571 +<9ccf> 15903 +<9cd0> 7833 +<9cdb> 18576 +<9ce6> 18577 +<9cea> 18578 +<9ced> 18579 +<9cfd> 15938 +<9cfe> 18583 +<9d40> 17384 +<9d46> 15939 +<9d49> 15940 +<9d4e> 18593 +<9d4f> 15944 +<9d50> 18594 +<9d51> 15945 +<9d55> 15946 +<9d56> 18598 +<9d57> 9665 +<9d5a> 3340 +<9d61> 17353 +<9d62> 15948 +<9d63> 18607 +<9d64> 15949 +<9d78> 17397 +<9d79> 15950 +<9d7e> 15951 +<9da9> 18635 +<9daa> 15956 +<9dab> 18636 +<9db0> 15960 +<9db3> 15961 +<9db4> 18641 +<9db5> 15962 +<9db6> 18642 +<9db7> 15963 +<9dbe> 18647 +<9dc3> 15968 +<9dc4> 1510 +<9dc9> 18652 +<9dca> 15972 +endcidchar + +100 begincidchar +<9dd2> 18655 +<9dfc> 18660 +<9e43> 18661 +<9e5f> 18662 +<9e63> 18663 +<9e68> 16054 +<9e69> 18666 +<9e6a> 16055 +<9e71> 16056 +<9e72> 18673 +<9e73> 16057 +<9e79> 18677 +<9e7a> 16060 +<9e7b> 18678 +<9e7c> 16061 +<9e7d> 18679 +<9e7e> 16062 +<9ea3> 18680 +<9ea9> 1832 +<9eaa> 16069 +<9eab> 18683 +<9eae> 18684 +<9eb4> 16075 +<9eb5> 18687 +<9eb8> 18688 +<9eb9> 16078 +<9ebc> 16079 +<9ec6> 18696 +<9ecd> 16089 +<9ed2> 18701 +<9ed3> 16092 +<9eef> 9398 +<9ef2> 18706 +<9efb> 18710 +<9efc> 16124 +<9efd> 6150 +<9efe> 16126 +<9f43> 18711 +<9f48> 18712 +<9f60> 13585 +<9f66> 14661 +<9f70> 18717 +<9fb5> 18718 +<9fbb> 18719 +<9fbf> 18720 +<9fc0> 16212 +<9fc1> 18721 +<9fcb> 3970 +<9fcc> 18722 +<9fd4> 18723 +<9fd8> 14910 +<9fe4> 18724 +<9ff9> 18725 + 18726 + 18727 + 18728 + 14353 + 18729 + 1522 + 18730 + 16330 + 18731 + 18732 + 18733 + 18734 + 15086 + 9341 + 18735 + 15049 + 17332 + 17336 + 248 + 247 + 2431 + 4308 + 5221 + 5551 + 5550 + 5495 + 558 + 560 + 18846 + 18847 + 18848 + 628 + 6039 + 6134 + 8788 + 8889 + 8142 + 9089 + 10926 + 11073 + 12308 + 11719 + 11361 + 12640 + 12783 + 12526 + 12900 +endcidchar + +45 begincidchar + 13585 + 13629 + 13641 + 2106 + 2557 + 781 + 363 + 2144 + 16002 + 18760 + 18761 + 18762 + 3107 + 18763 + 18764 + 6116 + 16014 + 18765 + 8495 + 18766 + 18767 + 16385 + 18768 + 18769 + 4447 + 18772 + 3193 + 18773 + 18774 + 1219 + 18775 + 18776 + 6333 + 3261 + 3237 + 18777 + 3278 + 18778 + 15728 + 18779 + 17055 + 3716 + 18780 + 288 + 7080 +endcidchar + +100 begincidrange +<20> <7e> 1 +<8740> <8765> 18965 +<8767> <8779> 19003 +<877a> <877e> 19088 +<87a1> <87df> 19093 +<8840> <8855> 17609 +<8856> <887e> 18785 +<88a1> <88a8> 18826 +<88a9> <88aa> 18844 +<8940> <8941> 17716 +<8946> <8949> 17719 +<894e> <8950> 17724 +<8952> <897e> 17727 +<89a1> <89a5> 17772 +<89b0> <89b2> 17779 +<89b5> <89bf> 17782 +<89c1> <89c3> 17793 +<89c5> <89ce> 17796 +<89d0> <89d8> 17806 +<89de> <89e0> 17817 +<89e4> <89e9> 17821 +<89ea> <89eb> 17317 +<89ec> <89f9> 17827 +<89fb> <89fe> 17841 +<8a43> <8a4c> 17163 +<8a4e> <8a59> 17174 +<8a5b> <8a5d> 17187 +<8a5f> <8a62> 17191 +<8a64> <8a70> 17196 +<8a72> <8a74> 17210 +<8a78> <8a79> 17216 +<8aa1> <8aa7> 17223 +<8aa9> <8aaa> 17231 +<8aac> <8ab0> 17234 +<8ab2> <8ab5> 17240 +<8abb> <8ac7> 17249 +<8ac9> <8acb> 17263 +<8ace> <8ad5> 17268 +<8ad6> <8ad7> 17858 +<8ad8> <8adc> 17278 +<8adf> <8ae5> 17285 +<8ae8> <8af4> 17861 +<8af6> <8afe> 17874 +<8b41> <8b42> 17292 +<8b43> <8b44> 17884 +<8b4d> <8b50> 17298 +<8b51> <8b53> 17890 +<8b55> <8b57> 17893 +<8b5c> <8b60> 17897 +<8b62> <8b67> 17902 +<8b69> <8b7e> 17908 +<8ba1> <8bbf> 17930 +<8bc0> <8bdc> 17631 +<8bde> <8bfd> 17660 +<8c40> <8c61> 18849 +<8c63> <8c7e> 18883 +<8ca1> <8ca5> 18911 +<8ca7> <8cc5> 18916 +<8cc9> <8ccc> 18947 +<8cce> <8cda> 18951 +<8cdd> <8ce4> 19024 +<8ce6> <8cfe> 19032 +<8d42> <8d5f> 19058 +<8d60> <8d61> 17961 +<8d63> <8d67> 17963 +<8d6b> <8d6d> 17968 +<8d6f> <8d75> 17971 +<8d77> <8d79> 17978 +<8d7d> <8d7e> 17982 +<8da1> <8da4> 17984 +<8da6> <8da7> 17988 +<8daa> <8db5> 17990 +<8db7> <8dc2> 18002 +<8dc4> <8df9> 18014 +<8dfb> <8dfe> 18068 +<8e40> <8e44> 14123 +<8e46> <8e68> 14128 +<8e6b> <8e6c> 18073 +<8e6d> <8e6e> 14166 +<8e70> <8e75> 14169 +<8e77> <8e7a> 14175 +<8e7c> <8e7d> 14180 +<8ea1> <8ea5> 14182 +<8ea7> <8eaa> 14187 +<8eac> <8eb3> 14192 +<8eb5> <8eb7> 14201 +<8eb9> <8ec8> 14205 +<8eca> <8ecc> 14221 +<8ece> <8ecf> 14225 +<8ed1> <8ee4> 14228 +<8ee6> <8eee> 14248 +<8ef0> <8ef5> 14257 +<8ef7> <8efe> 14264 +<8f40> <8f56> 14272 +<8f5a> <8f5e> 14297 +<8f60> <8f66> 14302 +<8f6a> <8f6d> 14311 +<8f6f> <8f78> 14316 +<8f7a> <8f7e> 14327 +<8fa1> <8faf> 14332 +endcidrange + +100 begincidrange +<8fb1> <8fc4> 14348 +<8fc8> <8fc9> 14369 +<8fcd> <8fd9> 14374 +<8fdb> <8fe2> 14387 +<8fe4> <8ffb> 14396 +<9040> <9054> 14422 +<9056> <905b> 14444 +<905c> <905e> 18095 +<905f> <906c> 14451 +<9070> <9079> 14467 +<907b> <907e> 14477 +<90a1> <90a5> 14481 +<90a7> <90b7> 14486 +<90b9> <90db> 14503 +<90dd> <90f0> 14539 +<90f2> <90fe> 14560 +<9140> <9164> 14573 +<9166> <916d> 14610 +<916f> <917d> 14618 +<91a3> <91be> 14634 +<91c0> <91c7> 14663 +<91c9> <91fe> 14672 +<9240> <9243> 14726 +<9245> <9263> 14731 +<9265> <926c> 14763 +<926e> <927e> 14772 +<92a1> <92ae> 14789 +<92af> <92b0> 281 +<92b3> <92c7> 14803 +<92c9> <92d0> 14825 +<92d2> <92e4> 14834 +<92e6> <92f1> 14853 +<92f3> <92fe> 14865 +<9340> <9367> 14877 +<9369> <937e> 14917 +<93a1> <93a9> 14939 +<93ab> <93c1> 14948 +<93c3> <93e4> 14971 +<93e6> <93e7> 15005 +<93e9> <93ea> 15008 +<93ec> <93fe> 15010 +<9440> <9445> 15029 +<9448> <9478> 15036 +<947a> <947e> 15086 +<94a1> <94c9> 15091 +<94cc> <94fe> 15134 +<9540> <954c> 15185 +<954e> <9559> 15198 +<955b> <955e> 15210 +<9560> <957e> 15215 +<95a1> <95c5> 15246 +<95c7> <95d8> 15283 +<95da> <95fe> 15302 +<9640> <9643> 15339 +<9645> <9650> 15344 +<9652> <9669> 15357 +<966b> <967e> 15382 +<96a1> <96d3> 15402 +<96d5> <96ec> 15453 +<96ee> <96fb> 15478 +<96fd> <96fe> 15493 +<9740> <977e> 15495 +<97a1> <97fe> 15558 +<9840> <9843> 15652 +<9844> <9845> 18126 +<9846> <986e> 15658 +<9870> <9874> 15700 +<9875> <9876> 18129 +<9878> <9879> 18131 +<987b> <987e> 18133 +<98a1> <98a2> 18137 +<98a4> <98ae> 18139 +<98b0> <98b3> 18150 +<98bd> <98be> 15711 +<98bf> <98c1> 18158 +<98c6> <98c7> 15715 +<98c8> <98d1> 18163 +<98d3> <98d7> 18173 +<98d8> <98d9> 17358 +<98dc> <98de> 18179 +<98e0> <98e2> 18182 +<98e4> <98e6> 18185 +<98e8> <98ec> 18188 +<98ee> <98ef> 18193 +<98f4> <98f5> 17365 +<98f6> <98fb> 18197 +<9940> <9941> 18204 +<9948> <994e> 18208 +<9950> <9953> 18215 +<9955> <995b> 18219 +<995d> <9963> 18226 +<9965> <9969> 18233 +<996b> <996d> 18238 +<996f> <9974> 18241 +<9976> <9977> 18247 +<9979> <997e> 18249 +<99a7> <99ad> 18258 +<99af> <99b1> 18265 +<99b3> <99b5> 18268 +<99b7> <99b9> 18271 +endcidrange + +100 begincidrange +<99bb> <99c9> 18274 +<99cb> <99cc> 18289 +<99ce> <99d2> 18291 +<99d4> <99d5> 18296 +<99d7> <99de> 18298 +<99e0> <99e1> 18306 +<99e9> <99ee> 18311 +<99f0> <99f3> 18317 +<99f5> <99fe> 18321 +<9a40> <9a49> 18331 +<9a4d> <9a58> 18342 +<9a5a> <9a5e> 18354 +<9a62> <9a65> 18360 +<9a6c> <9a72> 18366 +<9a76> <9a7d> 18374 +<9aa1> <9aa2> 18382 +<9aa6> <9aa8> 18385 +<9aab> <9ab1> 18388 +<9ab3> <9ab6> 18395 +<9abe> <9ac6> 18402 +<9ac8> <9acf> 18411 +<9ad3> <9ad8> 18420 +<9ad9> <9adb> 15750 +<9adc> <9ae1> 18426 +<9ae5> <9ae7> 18433 +<9aea> <9aed> 18436 +<9aef> <9af1> 18440 +<9af3> <9af5> 18443 +<9af7> <9afa> 18446 +<9afc> <9afe> 18450 +<9b40> <9b45> 18453 +<9b47> <9b49> 18459 +<9b4b> <9b53> 18462 +<9b55> <9b57> 18471 +<9b5e> <9b5f> 15766 +<9b62> <9b6f> 18478 +<9b70> <9b73> 15768 +<9b74> <9b75> 18492 +<9b79> <9b7a> 18494 +<9ba3> <9ba4> 15779 +<9ba5> <9ba6> 18498 +<9ba7> <9baa> 15781 +<9bad> <9bae> 18501 +<9bb0> <9bb1> 18503 +<9bb2> <9bb9> 15787 +<9bba> <9bbd> 18505 +<9bc0> <9bc5> 15796 +<9bc7> <9bc9> 18510 +<9bd0> <9bd1> 15805 +<9bd6> <9bd7> 18518 +<9bd8> <9bda> 15809 +<9bdb> <9bdc> 18520 +<9be4> <9be6> 18524 +<9be9> <9beb> 15817 +<9bee> <9bef> 15821 +<9bf0> <9bf2> 18529 +<9bf4> <9bf5> 18532 +<9bf8> <9bf9> 15825 +<9bfb> <9bfc> 15827 +<9bfd> <9bfe> 18536 +<9c40> <9c41> 15829 +<9c44> <9c46> 15832 +<9c4b> <9c4c> 18541 +<9c4d> <9c52> 15837 +<9c57> <9c5b> 15845 +<9c5e> <9c5f> 18546 +<9c64> <9c66> 15853 +<9c6f> <9c72> 15859 +<9c73> <9c74> 18554 +<9c75> <9c76> 15863 +<9c7b> <9c7c> 15867 +<9ca1> <9ca2> 15870 +<9ca3> <9ca4> 18559 +<9ca6> <9ca7> 18561 +<9ca8> <9ca9> 15873 +<9cad> <9cae> 15876 +<9caf> <9cb0> 18565 +<9cb1> <9cba> 15878 +<9cbe> <9cc2> 15890 +<9cc3> <9cc5> 18568 +<9cc6> <9ccd> 15895 +<9cd1> <9cd3> 15905 +<9cd4> <9cd7> 18572 +<9cd8> <9cda> 15908 +<9cdc> <9ce5> 15911 +<9ce7> <9ce9> 15921 +<9ceb> <9cec> 15924 +<9cee> <9cf9> 15926 +<9cfa> <9cfc> 18580 +<9d41> <9d45> 18584 +<9d47> <9d48> 18589 +<9d4a> <9d4b> 18591 +<9d4c> <9d4d> 15942 +<9d52> <9d54> 18595 +<9d58> <9d59> 18599 +<9d5b> <9d60> 18601 +<9d65> <9d77> 18608 +<9d7a> <9d7d> 18627 +<9da1> <9da4> 18631 +<9da5> <9da8> 15952 +endcidrange + +100 begincidrange +<9dac> <9dad> 15957 +<9dae> <9daf> 18637 +<9db1> <9db2> 18639 +<9db8> <9dbb> 18643 +<9dbc> <9dbd> 15964 +<9dbf> <9dc0> 15966 +<9dc1> <9dc2> 18648 +<9dc5> <9dc6> 18650 +<9dc7> <9dc8> 15970 +<9dcb> <9dcc> 18653 +<9dcd> <9dd1> 15973 +<9dd3> <9dd5> 15978 +<9dd6> <9dd9> 18656 +<9dda> <9dfb> 15981 +<9dfd> <9dfe> 16015 +<9e40> <9e42> 16017 +<9e44> <9e5e> 16021 +<9e60> <9e62> 16049 +<9e64> <9e65> 16052 +<9e66> <9e67> 18664 +<9e6b> <9e70> 18667 +<9e74> <9e76> 18674 +<9e77> <9e78> 16058 +<9ea1> <9ea2> 16063 +<9ea4> <9ea6> 16065 +<9ea7> <9ea8> 18681 +<9eac> <9ead> 16070 +<9eaf> <9eb1> 16072 +<9eb2> <9eb3> 18685 +<9eb6> <9eb7> 16076 +<9eba> <9ebb> 18689 +<9ebd> <9ebe> 18691 +<9ebf> <9ec0> 16080 +<9ec1> <9ec3> 18693 +<9ec4> <9ec5> 16082 +<9ec7> <9eca> 16084 +<9ecb> <9ecc> 18697 +<9ece> <9ecf> 18699 +<9ed0> <9ed1> 16090 +<9ed4> <9ed5> 18702 +<9ed6> <9ed7> 16093 +<9ed8> <9ed9> 18704 +<9eda> <9eee> 16095 +<9ef0> <9ef1> 16117 +<9ef3> <9ef5> 16119 +<9ef6> <9ef8> 18707 +<9ef9> <9efa> 16122 +<9f40> <9f42> 16127 +<9f44> <9f47> 16130 +<9f49> <9f4a> 16134 +<9f4b> <9f4c> 18713 +<9f4d> <9f5f> 16136 +<9f61> <9f65> 16156 +<9f67> <9f68> 18715 +<9f69> <9f6f> 16163 +<9f71> <9f7e> 16170 +<9fa1> <9fb4> 16184 +<9fb6> <9fba> 16204 +<9fbc> <9fbe> 16209 +<9fc2> <9fca> 16213 +<9fcd> <9fd3> 16224 +<9fd5> <9fd7> 16232 +<9fd9> <9fe3> 16236 +<9fe5> <9ff8> 16247 +<9ffa> <9ffe> 16267 + 16272 + 16278 + 16291 + 16305 + 16314 + 16324 + 16327 + 16331 + 16335 + 16364 + 16374 + 16379 + 16389 + 16393 + 18736 + 18743 + 18746 + 99 + 13743 + 128 + 162 + 249 + 256 + 319 + 413 + 476 + 503 + 595 + 658 + 752 + 815 + 909 + 972 + 1066 + 1129 +endcidrange + +100 begincidrange + 1223 + 1286 + 1380 + 1443 + 1537 + 1600 + 1694 + 1757 + 1851 + 1914 + 2007 + 2070 + 2164 + 2227 + 2321 + 2384 + 2432 + 2479 + 2542 + 2636 + 2699 + 2793 + 2856 + 2950 + 3013 + 3107 + 3170 + 3264 + 3327 + 3421 + 3484 + 3578 + 3641 + 3735 + 3798 + 3892 + 3955 + 4049 + 4112 + 4206 + 4269 + 4309 + 4364 + 4427 + 4521 + 4584 + 4678 + 4696 + 4740 + 4834 + 4897 + 4991 + 5054 + 5148 + 5211 + 5222 + 5306 + 5369 + 5411 + 5462 + 5496 + 5526 + 5552 + 5620 + 5642 + 5682 + 5776 + 5839 + 5933 + 506 + 537 + 554 + 13747 + 13754 + 13785 + 13848 + 13942 + 14005 + 14049 + 17606 + 17692 + 17701 + 17709 + 18834 + 5996 + 6006 + 6040 + 6059 + 6088 + 6135 + 6153 + 6216 + 6302 + 6309 + 6372 + 6466 + 6529 + 6623 + 6686 + 6780 +endcidrange + +100 begincidrange + 6843 + 6937 + 7000 + 7094 + 7157 + 7251 + 7314 + 7408 + 7471 + 7565 + 7628 + 7722 + 7785 + 7879 + 7942 + 8036 + 8099 + 8143 + 8193 + 8251 + 8255 + 8349 + 8412 + 8506 + 8569 + 8663 + 8726 + 8789 + 8820 + 8883 + 8890 + 8978 + 9041 + 9135 + 9198 + 9289 + 9291 + 9354 + 9448 + 9511 + 9605 + 9668 + 9762 + 9825 + 9919 + 9982 + 10076 + 10139 + 10233 + 10296 + 10390 + 10453 + 10547 + 10610 + 10704 + 10767 + 10861 + 10924 + 10927 + 11019 + 11074 + 11083 + 11177 + 11240 + 11334 + 11362 + 11398 + 11478 + 11491 + 11554 + 11615 + 11647 + 11710 + 11720 + 11805 + 11868 + 11942 + 11961 + 12024 + 12118 + 12140 + 12180 + 12222 + 12273 + 12309 + 12317 + 12336 + 12430 + 12470 + 12492 + 12527 + 12587 + 12641 + 12651 + 12745 + 12784 + 12809 + 12829 + 12901 + 12903 +endcidrange + +67 begincidrange + 12966 + 13060 + 13095 + 13122 + 13216 + 13279 + 13373 + 13436 + 13530 + 13586 + 13594 + 13630 + 13642 + 14056 + 16395 + 16427 + 16434 + 16458 + 18758 + 16468 + 16487 + 16495 + 16511 + 16552 + 16561 + 16572 + 16599 + 16615 + 16618 + 16639 + 16645 + 16658 + 16696 + 16702 + 16707 + 16717 + 16721 + 16723 + 16739 + 16749 + 16756 + 16765 + 16789 + 18770 + 16792 + 16807 + 16829 + 16839 + 16842 + 16855 + 16864 + 16897 + 16917 + 16941 + 16944 + 16984 + 16998 + 17010 + 17029 + 17057 + 17065 + 17071 + 17080 + 18781 + 17131 + 18783 + 17144 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/HKscs-B5-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/HKscs-B5-V new file mode 100644 index 00000000000..0025b29fa69 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/HKscs-B5-V @@ -0,0 +1,90 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (HKscs-B5-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (HKscs-B5-H) +%%BeginResource: CMap (HKscs-B5-V) +%%Title: (HKscs-B5-V Adobe CNS1 6) +%%Version: 13.005 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/HKscs-B5-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 6 def +end def + +/CMapName /HKscs-B5-V def +/CMapVersion 13.005 def +/CMapType 1 def + +/XUID [1 10 25581] def + +/WMode 1 def + +13 begincidrange + 13646 + 13743 + 13745 + 130 + 134 + 138 + 142 + 146 + 150 + 154 + 158 + 13647 + 14097 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/Resources/cmap/Identity-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/Identity-H similarity index 75% rename from Resources/cmap/Identity-H rename to fontbox/src/main/resources/org/apache/fontbox/cmap/Identity-H index d314f97d1d5..6675416b2e9 100644 --- a/Resources/cmap/Identity-H +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Identity-H @@ -3,19 +3,42 @@ %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (Identity-H) %%Title: (Identity-H Adobe Identity 0) -%%Version: 10.001 +%%Version: 10.003 %%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2000 Adobe Systems Incorporated. -%%Copyright: All Rights Reserved. +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. %%Copyright: -%%Copyright: Patents Pending +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: %%Copyright: -%%Copyright: NOTICE: All information contained herein is the property -%%Copyright: of Adobe Systems Incorporated. +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. %%Copyright: -%%Copyright: PostScript and Display PostScript are trademarks of -%%Copyright: Adobe Systems Incorporated which may be registered in -%%Copyright: certain jurisdictions. +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. %%Copyright: ----------------------------------------------------------- %%EndComments @@ -32,7 +55,7 @@ begincmap end def /CMapName /Identity-H def -/CMapVersion 10.001 def +/CMapVersion 10.003 def /CMapType 1 def /XUID [1 10 25404 9999] def diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/Identity-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/Identity-V new file mode 100644 index 00000000000..08d52972cb0 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/Identity-V @@ -0,0 +1,73 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (Identity-V) +%%Title: (Identity-V Adobe Identity 0) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def + +/CMapName /Identity-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/XUID [1 10 25404 9991] def + +/WMode 1 def + +/Identity-H usecmap + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSC-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSC-EUC-H new file mode 100644 index 00000000000..46026468546 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSC-EUC-H @@ -0,0 +1,562 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (KSC-EUC-H) +%%Title: (KSC-EUC-H Adobe Korea1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 0 def +end def + +/CMapName /KSC-EUC-H def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 100 def +/XUID [1 10 25400] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 8094 +endnotdefrange + +100 begincidrange +<20> <7e> 8094 + 101 + 195 + 264 + 358 + 409 + 451 + 461 + 471 + 495 + 519 + 587 + 666 + 670 + 671 + 679 + 757 + 851 + 934 + 1020 + 1053 + 1086 + 1180 + 1274 + 1368 + 1462 + 1556 + 1650 + 1744 + 1838 + 1932 + 2026 + 2120 + 2214 + 2308 + 2402 + 2496 + 2590 + 2684 + 2778 + 2872 + 2966 + 3060 + 3154 + 3248 + 3342 + 3436 + 3530 + 4116 + 3577 + 3678 + 3582 + 7053 + 3598 + 3621 + 3715 + 3460 + 3761 + 7900 + 3785 + 3807 + 3802 + 3819 + 3900 + 3902 + 3990 + 3993 + 3946 + 3994 + 3946 + 4015 + 3708 + 4038 + 4131 + 4050 + 4083 + 4374 + 4156 + 4134 + 4375 + 4136 + 4376 + 4138 + 5800 + 4382 + 4386 + 4139 + 4387 + 4140 + 4391 + 4141 + 4394 + 4142 + 4396 + 4143 + 4399 + 4146 + 4403 + 4149 + 4406 +endcidrange + +100 begincidrange + 4409 + 4150 + 4410 + 4151 + 4412 + 4419 + 4154 + 4420 + 4155 + 4424 + 4159 + 4511 + 4170 + 4513 + 4517 + 4173 + 4518 + 4524 + 4174 + 4525 + 4528 + 4535 + 4175 + 4541 + 4176 + 4545 + 4179 + 4547 + 4550 + 4180 + 4564 + 4566 + 4571 + 4576 + 4181 + 4604 + 4609 + 4185 + 4611 + 4186 + 4192 + 4286 + 4318 + 4355 + 4136 + 4376 + 4378 + 5800 + 4382 + 4139 + 4387 + 4192 + 4389 + 4469 + 4167 + 4492 + 4172 + 4512 + 4561 + 5552 + 4603 + 6424 + 4627 + 4653 + 4747 + 4841 + 4935 + 5151 + 4971 + 4922 + 5001 + 5027 + 7518 + 5031 + 5120 + 5079 + 5124 + 5109 + 5171 + 7607 + 5201 + 5211 + 5584 + 5302 + 5367 + 5303 + 7083 + 5321 + 5362 + 5366 + 5485 + 5372 + 5394 + 6001 + 5474 + 5487 + 5460 + 5499 + 5317 + 5562 +endcidrange + +100 begincidrange + 5579 + 5673 + 7009 + 5757 + 7370 + 5766 + 5678 + 5773 + 5858 + 5874 + 5871 + 4425 + 5873 + 4427 + 5879 + 4429 + 5880 + 4431 + 5887 + 4435 + 5896 + 4436 + 5897 + 4437 + 5898 + 4439 + 5901 + 4442 + 4159 + 5936 + 4444 + 4447 + 5937 + 4449 + 5939 + 4450 + 5941 + 4453 + 5946 + 4455 + 5947 + 4458 + 5948 + 4459 + 5951 + 4463 + 5954 + 4160 + 5961 + 4465 + 5962 + 4161 + 5964 + 4468 + 5971 + 4469 + 5974 + 4470 + 5976 + 4162 + 5978 + 4471 + 5980 + 4472 + 5981 + 4474 + 4473 + 4475 + 5983 + 4476 + 5984 + 4478 + 6447 + 5985 + 4481 + 5987 + 4482 + 5460 + 5988 + 4483 + 4163 + 4166 + 5990 + 4485 + 5991 + 4487 + 5996 + 4488 + 6000 + 4489 + 4491 + 6002 + 4167 + 4493 + 6003 + 4494 + 6005 + 4495 + 6019 + 7783 +endcidrange + +100 begincidrange + 6020 + 4497 + 4499 + 6024 + 4501 + 6027 + 4502 + 6028 + 4503 + 6029 + 4506 + 6031 + 4508 + 6042 + 4509 + 6046 + 4510 + 6047 + 5797 + 6063 + 6070 + 4551 + 6140 + 4553 + 4180 + 6147 + 4555 + 6152 + 5800 + 6153 + 4556 + 6154 + 4557 + 6156 + 4560 + 6162 + 4561 + 6166 + 4563 + 6197 + 7988 + 6239 + 6246 + 6123 + 6278 + 4577 + 6313 + 4183 + 6327 + 4579 + 6329 + 4581 + 6333 + 4582 + 6334 + 4584 + 6337 + 4586 + 6339 + 4588 + 4184 + 6340 + 4590 + 6355 + 4592 + 6356 + 4593 + 4595 + 6359 + 4596 + 6362 + 4599 + 6366 + 4600 + 5552 + 6368 + 4603 + 6373 + 6411 + 4614 + 4616 + 6416 + 4618 + 6418 + 5950 + 4620 + 4187 + 6422 + 4625 + 6424 + 4627 + 6426 + 4629 + 6427 + 4632 + 6432 + 4634 + 4636 + 6435 + 4188 +endcidrange + +67 begincidrange + 6437 + 4638 + 6447 + 4640 + 6454 + 4642 + 6456 + 4644 + 6458 + 4645 + 6460 + 4647 + 6474 + 4650 + 6475 + 4653 + 6479 + 5351 + 6553 + 6569 + 6494 + 6627 + 6662 + 6756 + 6850 + 6944 + 5731 + 6972 + 5771 + 7032 + 7036 + 4191 + 7052 + 7129 + 6484 + 7135 + 6684 + 7205 + 7221 + 7315 + 4279 + 7398 + 7139 + 7399 + 7407 + 4247 + 7430 + 4266 + 7445 + 4340 + 7455 + 7498 + 7572 + 7556 + 5088 + 7576 + 7590 + 7709 + 3558 + 7684 + 3644 + 7751 + 7775 + 7869 + 3815 + 7877 + 7962 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSC-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSC-EUC-V new file mode 100644 index 00000000000..327e97c9c37 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSC-EUC-V @@ -0,0 +1,94 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (KSC-EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (KSC-EUC-H) +%%BeginResource: CMap (KSC-EUC-V) +%%Title: (KSC-EUC-V Adobe Korea1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/KSC-EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 0 def +end def + +/CMapName /KSC-EUC-V def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 310 def +/XUID [1 10 25401] def + +/WMode 1 def + +16 begincidrange + 8056 + 8058 + 8320 + 8059 + 8062 + 8063 + 8075 + 8076 + 8077 + 8079 + 8080 + 8081 + 8087 + 8088 + 8089 + 8090 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-H new file mode 100644 index 00000000000..9c4bc9a720f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-H @@ -0,0 +1,776 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (KSCms-UHC-H) +%%Title: (KSCms-UHC-H Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /KSCms-UHC-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 430 def +/XUID [1 10 25409] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + <8141> +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<8141> <815a> 9333 +<8161> <817a> 9359 +<8181> <81fe> 9385 +<8241> <825a> 9511 +<8261> <827a> 9537 +<8281> <82fe> 9563 +<8341> <835a> 9689 +<8361> <837a> 9715 +<8381> <83fe> 9741 +<8441> <845a> 9867 +<8461> <847a> 9893 +<8481> <84fe> 9919 +<8541> <855a> 10045 +<8561> <857a> 10071 +<8581> <85fe> 10097 +<8641> <865a> 10223 +<8661> <867a> 10249 +<8681> <86fe> 10275 +<8741> <875a> 10401 +<8761> <877a> 10427 +<8781> <87fe> 10453 +<8841> <885a> 10579 +<8861> <887a> 10605 +<8881> <88fe> 10631 +<8941> <895a> 10757 +<8961> <897a> 10783 +<8981> <89fe> 10809 +<8a41> <8a5a> 10935 +<8a61> <8a7a> 10961 +<8a81> <8afe> 10987 +<8b41> <8b5a> 11113 +<8b61> <8b7a> 11139 +<8b81> <8bfe> 11165 +<8c41> <8c5a> 11291 +<8c61> <8c7a> 11317 +<8c81> <8cfe> 11343 +<8d41> <8d5a> 11469 +<8d61> <8d7a> 11495 +<8d81> <8dfe> 11521 +<8e41> <8e5a> 11647 +<8e61> <8e7a> 11673 +<8e81> <8efe> 11699 +<8f41> <8f5a> 11825 +<8f61> <8f7a> 11851 +<8f81> <8ffe> 11877 +<9041> <905a> 12003 +<9061> <907a> 12029 +<9081> <90fe> 12055 +<9141> <915a> 12181 +<9161> <917a> 12207 +<9181> <91fe> 12233 +<9241> <925a> 12359 +<9261> <927a> 12385 +<9281> <92fe> 12411 +<9341> <935a> 12537 +<9361> <937a> 12563 +<9381> <93fe> 12589 +<9441> <945a> 12715 +<9461> <947a> 12741 +<9481> <94fe> 12767 +<9541> <955a> 12893 +<9561> <957a> 12919 +<9581> <95fe> 12945 +<9641> <965a> 13071 +<9661> <967a> 13097 +<9681> <96fe> 13123 +<9741> <975a> 13249 +<9761> <977a> 13275 +<9781> <97fe> 13301 +<9841> <985a> 13427 +<9861> <987a> 13453 +<9881> <98fe> 13479 +<9941> <995a> 13605 +<9961> <997a> 13631 +<9981> <99fe> 13657 +<9a41> <9a5a> 13783 +<9a61> <9a7a> 13809 +<9a81> <9afe> 13835 +<9b41> <9b5a> 13961 +<9b61> <9b7a> 13987 +<9b81> <9bfe> 14013 +<9c41> <9c5a> 14139 +<9c61> <9c7a> 14165 +<9c81> <9cfe> 14191 +<9d41> <9d5a> 14317 +<9d61> <9d7a> 14343 +<9d81> <9dfe> 14369 +<9e41> <9e5a> 14495 +<9e61> <9e7a> 14521 +<9e81> <9efe> 14547 +<9f41> <9f5a> 14673 +<9f61> <9f7a> 14699 +<9f81> <9ffe> 14725 + 14851 + 14877 + 14903 + 15029 + 15055 + 15081 +endcidrange + +100 begincidrange + 101 + 15113 + 15139 + 15165 + 195 + 15197 + 15223 + 15249 + 264 + 15281 + 15307 + 15333 + 358 + 409 + 15365 + 15391 + 15417 + 451 + 461 + 471 + 495 + 15449 + 15475 + 15501 + 519 + 15533 + 15559 + 15585 + 587 + 15617 + 15643 + 15669 + 666 + 670 + 671 + 679 + 15701 + 15727 + 15753 + 757 + 15785 + 15811 + 15837 + 851 + 15869 + 15895 + 15921 + 934 + 15953 + 15979 + 16005 + 1020 + 1053 + 16037 + 16063 + 16089 + 16121 + 16147 + 16173 + 16205 + 16231 + 16257 + 16289 + 16315 + 16341 + 1086 + 16373 + 16399 + 16425 + 1180 + 16457 + 16483 + 16509 + 1274 + 16541 + 16567 + 16593 + 1368 + 16625 + 16651 + 16677 + 1462 + 16709 + 16735 + 16761 + 1556 + 16793 + 16819 + 16845 + 1650 + 16877 + 16903 + 16929 + 1744 + 16961 + 16987 + 17013 + 1838 + 17045 + 17071 +endcidrange + +100 begincidrange + 17097 + 1932 + 17129 + 17155 + 17181 + 2026 + 17213 + 17239 + 17265 + 2120 + 17297 + 17323 + 17349 + 2214 + 17381 + 17407 + 17433 + 2308 + 17465 + 17491 + 17517 + 2402 + 17549 + 17575 + 17601 + 2496 + 17633 + 17659 + 17685 + 2590 + 17717 + 17743 + 17769 + 2684 + 17801 + 17827 + 17853 + 2778 + 17885 + 17911 + 17937 + 2872 + 17969 + 17995 + 18021 + 2966 + 18053 + 18079 + 18105 + 3060 + 18137 + 3154 + 3248 + 3342 + 3436 + 3530 + 4116 + 3577 + 3678 + 3582 + 7053 + 3598 + 3621 + 3715 + 3460 + 3761 + 7900 + 3785 + 3807 + 3802 + 3819 + 3900 + 3902 + 3990 + 3993 + 3946 + 3994 + 3946 + 4015 + 3708 + 4038 + 4131 + 4050 + 4083 + 4374 + 4156 + 4134 + 4375 + 4136 + 4376 + 4138 + 5800 + 4382 + 4386 + 4139 + 4387 + 4140 + 4391 + 4141 + 4394 +endcidrange + +100 begincidrange + 4142 + 4396 + 4143 + 4399 + 4146 + 4403 + 4149 + 4406 + 4409 + 4150 + 4410 + 4151 + 4412 + 4419 + 4154 + 4420 + 4155 + 4424 + 4159 + 4511 + 4170 + 4513 + 4517 + 4173 + 4518 + 4524 + 4174 + 4525 + 4528 + 4535 + 4175 + 4541 + 4176 + 4545 + 4179 + 4547 + 4550 + 4180 + 4564 + 4566 + 4571 + 4576 + 4181 + 4604 + 4609 + 4185 + 4611 + 4186 + 4192 + 4286 + 4318 + 4355 + 4136 + 4376 + 4378 + 5800 + 4382 + 4139 + 4387 + 4192 + 4389 + 4469 + 4167 + 4492 + 4172 + 4512 + 4561 + 5552 + 4603 + 6424 + 4627 + 4653 + 4747 + 4841 + 4935 + 5151 + 4971 + 4922 + 5001 + 5027 + 7518 + 5031 + 5120 + 5079 + 5124 + 5109 + 5171 + 7607 + 5201 + 5211 + 5584 + 5302 + 5367 + 5303 + 7083 + 5321 + 5362 + 5366 + 5485 + 5372 +endcidrange + +100 begincidrange + 5394 + 6001 + 5474 + 5487 + 5460 + 5499 + 5317 + 5562 + 5579 + 5673 + 7009 + 5757 + 7370 + 5766 + 5678 + 5773 + 5858 + 5874 + 5871 + 4425 + 5873 + 4427 + 5879 + 4429 + 5880 + 4431 + 5887 + 4435 + 5896 + 4436 + 5897 + 4437 + 5898 + 4439 + 5901 + 4442 + 4159 + 5936 + 4444 + 4447 + 5937 + 4449 + 5939 + 4450 + 5941 + 4453 + 5946 + 4455 + 5947 + 4458 + 5948 + 4459 + 5951 + 4463 + 5954 + 4160 + 5961 + 4465 + 5962 + 4161 + 5964 + 4468 + 5971 + 4469 + 5974 + 4470 + 5976 + 4162 + 5978 + 4471 + 5980 + 4472 + 5981 + 4474 + 4473 + 4475 + 5983 + 4476 + 5984 + 4478 + 6447 + 5985 + 4481 + 5987 + 4482 + 5460 + 5988 + 4483 + 4163 + 4166 + 5990 + 4485 + 5991 + 4487 + 5996 + 4488 + 6000 + 4489 + 4491 + 6002 +endcidrange + +100 begincidrange + 4167 + 4493 + 6003 + 4494 + 6005 + 4495 + 6019 + 7783 + 6020 + 4497 + 4499 + 6024 + 4501 + 6027 + 4502 + 6028 + 4503 + 6029 + 4506 + 6031 + 4508 + 6042 + 4509 + 6046 + 4510 + 6047 + 5797 + 6063 + 6070 + 4551 + 6140 + 4553 + 4180 + 6147 + 4555 + 6152 + 5800 + 6153 + 4556 + 6154 + 4557 + 6156 + 4560 + 6162 + 4561 + 6166 + 4563 + 6197 + 7988 + 6239 + 6246 + 6123 + 6278 + 4577 + 6313 + 4183 + 6327 + 4579 + 6329 + 4581 + 6333 + 4582 + 6334 + 4584 + 6337 + 4586 + 6339 + 4588 + 4184 + 6340 + 4590 + 6355 + 4592 + 6356 + 4593 + 4595 + 6359 + 4596 + 6362 + 4599 + 6366 + 4600 + 5552 + 6368 + 4603 + 6373 + 6411 + 4614 + 4616 + 6416 + 4618 + 6418 + 5950 + 4620 + 4187 + 6422 + 4625 + 6424 + 4627 + 6426 +endcidrange + +75 begincidrange + 4629 + 6427 + 4632 + 6432 + 4634 + 4636 + 6435 + 4188 + 6437 + 4638 + 6447 + 4640 + 6454 + 4642 + 6456 + 4644 + 6458 + 4645 + 6460 + 4647 + 6474 + 4650 + 6475 + 4653 + 6479 + 5351 + 6553 + 6569 + 6494 + 6627 + 6662 + 6756 + 6850 + 6944 + 5731 + 6972 + 5771 + 7032 + 7036 + 4191 + 7052 + 7129 + 6484 + 7135 + 6684 + 7205 + 7221 + 7315 + 4279 + 7398 + 7139 + 7399 + 7407 + 4247 + 7430 + 4266 + 7445 + 4340 + 7455 + 7498 + 7572 + 7556 + 5088 + 7576 + 7590 + 7709 + 3558 + 7684 + 3644 + 7751 + 7775 + 7869 + 3815 + 7877 + 7962 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-HW-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-HW-H new file mode 100644 index 00000000000..ea06991b8b5 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-HW-H @@ -0,0 +1,775 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (KSCms-UHC-HW-H) +%%Title: (KSCms-UHC-HW-H Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /KSCms-UHC-HW-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/XUID [1 10 25416] def + +/WMode 0 def + +2 begincodespacerange + <00> <80> + <8141> +endcodespacerange + +1 beginnotdefrange +<00> <1f> 8094 +endnotdefrange + +100 begincidrange +<20> <7e> 8094 +<8141> <815a> 9333 +<8161> <817a> 9359 +<8181> <81fe> 9385 +<8241> <825a> 9511 +<8261> <827a> 9537 +<8281> <82fe> 9563 +<8341> <835a> 9689 +<8361> <837a> 9715 +<8381> <83fe> 9741 +<8441> <845a> 9867 +<8461> <847a> 9893 +<8481> <84fe> 9919 +<8541> <855a> 10045 +<8561> <857a> 10071 +<8581> <85fe> 10097 +<8641> <865a> 10223 +<8661> <867a> 10249 +<8681> <86fe> 10275 +<8741> <875a> 10401 +<8761> <877a> 10427 +<8781> <87fe> 10453 +<8841> <885a> 10579 +<8861> <887a> 10605 +<8881> <88fe> 10631 +<8941> <895a> 10757 +<8961> <897a> 10783 +<8981> <89fe> 10809 +<8a41> <8a5a> 10935 +<8a61> <8a7a> 10961 +<8a81> <8afe> 10987 +<8b41> <8b5a> 11113 +<8b61> <8b7a> 11139 +<8b81> <8bfe> 11165 +<8c41> <8c5a> 11291 +<8c61> <8c7a> 11317 +<8c81> <8cfe> 11343 +<8d41> <8d5a> 11469 +<8d61> <8d7a> 11495 +<8d81> <8dfe> 11521 +<8e41> <8e5a> 11647 +<8e61> <8e7a> 11673 +<8e81> <8efe> 11699 +<8f41> <8f5a> 11825 +<8f61> <8f7a> 11851 +<8f81> <8ffe> 11877 +<9041> <905a> 12003 +<9061> <907a> 12029 +<9081> <90fe> 12055 +<9141> <915a> 12181 +<9161> <917a> 12207 +<9181> <91fe> 12233 +<9241> <925a> 12359 +<9261> <927a> 12385 +<9281> <92fe> 12411 +<9341> <935a> 12537 +<9361> <937a> 12563 +<9381> <93fe> 12589 +<9441> <945a> 12715 +<9461> <947a> 12741 +<9481> <94fe> 12767 +<9541> <955a> 12893 +<9561> <957a> 12919 +<9581> <95fe> 12945 +<9641> <965a> 13071 +<9661> <967a> 13097 +<9681> <96fe> 13123 +<9741> <975a> 13249 +<9761> <977a> 13275 +<9781> <97fe> 13301 +<9841> <985a> 13427 +<9861> <987a> 13453 +<9881> <98fe> 13479 +<9941> <995a> 13605 +<9961> <997a> 13631 +<9981> <99fe> 13657 +<9a41> <9a5a> 13783 +<9a61> <9a7a> 13809 +<9a81> <9afe> 13835 +<9b41> <9b5a> 13961 +<9b61> <9b7a> 13987 +<9b81> <9bfe> 14013 +<9c41> <9c5a> 14139 +<9c61> <9c7a> 14165 +<9c81> <9cfe> 14191 +<9d41> <9d5a> 14317 +<9d61> <9d7a> 14343 +<9d81> <9dfe> 14369 +<9e41> <9e5a> 14495 +<9e61> <9e7a> 14521 +<9e81> <9efe> 14547 +<9f41> <9f5a> 14673 +<9f61> <9f7a> 14699 +<9f81> <9ffe> 14725 + 14851 + 14877 + 14903 + 15029 + 15055 + 15081 +endcidrange + +100 begincidrange + 101 + 15113 + 15139 + 15165 + 195 + 15197 + 15223 + 15249 + 264 + 15281 + 15307 + 15333 + 358 + 409 + 15365 + 15391 + 15417 + 451 + 461 + 471 + 495 + 15449 + 15475 + 15501 + 519 + 15533 + 15559 + 15585 + 587 + 15617 + 15643 + 15669 + 666 + 670 + 671 + 679 + 15701 + 15727 + 15753 + 757 + 15785 + 15811 + 15837 + 851 + 15869 + 15895 + 15921 + 934 + 15953 + 15979 + 16005 + 1020 + 1053 + 16037 + 16063 + 16089 + 16121 + 16147 + 16173 + 16205 + 16231 + 16257 + 16289 + 16315 + 16341 + 1086 + 16373 + 16399 + 16425 + 1180 + 16457 + 16483 + 16509 + 1274 + 16541 + 16567 + 16593 + 1368 + 16625 + 16651 + 16677 + 1462 + 16709 + 16735 + 16761 + 1556 + 16793 + 16819 + 16845 + 1650 + 16877 + 16903 + 16929 + 1744 + 16961 + 16987 + 17013 + 1838 + 17045 + 17071 +endcidrange + +100 begincidrange + 17097 + 1932 + 17129 + 17155 + 17181 + 2026 + 17213 + 17239 + 17265 + 2120 + 17297 + 17323 + 17349 + 2214 + 17381 + 17407 + 17433 + 2308 + 17465 + 17491 + 17517 + 2402 + 17549 + 17575 + 17601 + 2496 + 17633 + 17659 + 17685 + 2590 + 17717 + 17743 + 17769 + 2684 + 17801 + 17827 + 17853 + 2778 + 17885 + 17911 + 17937 + 2872 + 17969 + 17995 + 18021 + 2966 + 18053 + 18079 + 18105 + 3060 + 18137 + 3154 + 3248 + 3342 + 3436 + 3530 + 4116 + 3577 + 3678 + 3582 + 7053 + 3598 + 3621 + 3715 + 3460 + 3761 + 7900 + 3785 + 3807 + 3802 + 3819 + 3900 + 3902 + 3990 + 3993 + 3946 + 3994 + 3946 + 4015 + 3708 + 4038 + 4131 + 4050 + 4083 + 4374 + 4156 + 4134 + 4375 + 4136 + 4376 + 4138 + 5800 + 4382 + 4386 + 4139 + 4387 + 4140 + 4391 + 4141 + 4394 +endcidrange + +100 begincidrange + 4142 + 4396 + 4143 + 4399 + 4146 + 4403 + 4149 + 4406 + 4409 + 4150 + 4410 + 4151 + 4412 + 4419 + 4154 + 4420 + 4155 + 4424 + 4159 + 4511 + 4170 + 4513 + 4517 + 4173 + 4518 + 4524 + 4174 + 4525 + 4528 + 4535 + 4175 + 4541 + 4176 + 4545 + 4179 + 4547 + 4550 + 4180 + 4564 + 4566 + 4571 + 4576 + 4181 + 4604 + 4609 + 4185 + 4611 + 4186 + 4192 + 4286 + 4318 + 4355 + 4136 + 4376 + 4378 + 5800 + 4382 + 4139 + 4387 + 4192 + 4389 + 4469 + 4167 + 4492 + 4172 + 4512 + 4561 + 5552 + 4603 + 6424 + 4627 + 4653 + 4747 + 4841 + 4935 + 5151 + 4971 + 4922 + 5001 + 5027 + 7518 + 5031 + 5120 + 5079 + 5124 + 5109 + 5171 + 7607 + 5201 + 5211 + 5584 + 5302 + 5367 + 5303 + 7083 + 5321 + 5362 + 5366 + 5485 + 5372 +endcidrange + +100 begincidrange + 5394 + 6001 + 5474 + 5487 + 5460 + 5499 + 5317 + 5562 + 5579 + 5673 + 7009 + 5757 + 7370 + 5766 + 5678 + 5773 + 5858 + 5874 + 5871 + 4425 + 5873 + 4427 + 5879 + 4429 + 5880 + 4431 + 5887 + 4435 + 5896 + 4436 + 5897 + 4437 + 5898 + 4439 + 5901 + 4442 + 4159 + 5936 + 4444 + 4447 + 5937 + 4449 + 5939 + 4450 + 5941 + 4453 + 5946 + 4455 + 5947 + 4458 + 5948 + 4459 + 5951 + 4463 + 5954 + 4160 + 5961 + 4465 + 5962 + 4161 + 5964 + 4468 + 5971 + 4469 + 5974 + 4470 + 5976 + 4162 + 5978 + 4471 + 5980 + 4472 + 5981 + 4474 + 4473 + 4475 + 5983 + 4476 + 5984 + 4478 + 6447 + 5985 + 4481 + 5987 + 4482 + 5460 + 5988 + 4483 + 4163 + 4166 + 5990 + 4485 + 5991 + 4487 + 5996 + 4488 + 6000 + 4489 + 4491 + 6002 +endcidrange + +100 begincidrange + 4167 + 4493 + 6003 + 4494 + 6005 + 4495 + 6019 + 7783 + 6020 + 4497 + 4499 + 6024 + 4501 + 6027 + 4502 + 6028 + 4503 + 6029 + 4506 + 6031 + 4508 + 6042 + 4509 + 6046 + 4510 + 6047 + 5797 + 6063 + 6070 + 4551 + 6140 + 4553 + 4180 + 6147 + 4555 + 6152 + 5800 + 6153 + 4556 + 6154 + 4557 + 6156 + 4560 + 6162 + 4561 + 6166 + 4563 + 6197 + 7988 + 6239 + 6246 + 6123 + 6278 + 4577 + 6313 + 4183 + 6327 + 4579 + 6329 + 4581 + 6333 + 4582 + 6334 + 4584 + 6337 + 4586 + 6339 + 4588 + 4184 + 6340 + 4590 + 6355 + 4592 + 6356 + 4593 + 4595 + 6359 + 4596 + 6362 + 4599 + 6366 + 4600 + 5552 + 6368 + 4603 + 6373 + 6411 + 4614 + 4616 + 6416 + 4618 + 6418 + 5950 + 4620 + 4187 + 6422 + 4625 + 6424 + 4627 + 6426 +endcidrange + +75 begincidrange + 4629 + 6427 + 4632 + 6432 + 4634 + 4636 + 6435 + 4188 + 6437 + 4638 + 6447 + 4640 + 6454 + 4642 + 6456 + 4644 + 6458 + 4645 + 6460 + 4647 + 6474 + 4650 + 6475 + 4653 + 6479 + 5351 + 6553 + 6569 + 6494 + 6627 + 6662 + 6756 + 6850 + 6944 + 5731 + 6972 + 5771 + 7032 + 7036 + 4191 + 7052 + 7129 + 6484 + 7135 + 6684 + 7205 + 7221 + 7315 + 4279 + 7398 + 7139 + 7399 + 7407 + 4247 + 7430 + 4266 + 7445 + 4340 + 7455 + 7498 + 7572 + 7556 + 5088 + 7576 + 7590 + 7709 + 3558 + 7684 + 3644 + 7751 + 7775 + 7869 + 3815 + 7877 + 7962 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-HW-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-HW-V new file mode 100644 index 00000000000..fdec1e412ea --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-HW-V @@ -0,0 +1,93 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (KSCms-UHC-HW-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (KSCms-UHC-HW-H) +%%BeginResource: CMap (KSCms-UHC-HW-V) +%%Title: (KSCms-UHC-HW-V Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/KSCms-UHC-HW-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /KSCms-UHC-HW-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/XUID [1 10 25417] def + +/WMode 1 def + +16 begincidrange + 8056 + 8058 + 8320 + 8059 + 8062 + 8063 + 8075 + 8076 + 8077 + 8079 + 8080 + 8081 + 8087 + 8088 + 8089 + 8090 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-V new file mode 100644 index 00000000000..eefe925474d --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCms-UHC-V @@ -0,0 +1,94 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (KSCms-UHC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (KSCms-UHC-H) +%%BeginResource: CMap (KSCms-UHC-V) +%%Title: (KSCms-UHC-V Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/KSCms-UHC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /KSCms-UHC-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/UIDOffset 680 def +/XUID [1 10 25410] def + +/WMode 1 def + +16 begincidrange + 8056 + 8058 + 8320 + 8059 + 8062 + 8063 + 8075 + 8076 + 8077 + 8079 + 8080 + 8081 + 8087 + 8088 + 8089 + 8090 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCpc-EUC-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCpc-EUC-H new file mode 100644 index 00000000000..fc8f2773d04 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCpc-EUC-H @@ -0,0 +1,608 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (KSCpc-EUC-H) +%%Title: (KSCpc-EUC-H Adobe Korea1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 0 def +end def + +/CMapName /KSCpc-EUC-H def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 0 def +/XUID [1 10 25404] def + +/WMode 0 def + +3 begincodespacerange + <00> <84> + + +endcodespacerange + +1 beginnotdefrange +<00> <1f> 1 +endnotdefrange + +100 begincidrange +<20> <7e> 1 +<81> <83> 96 + 8191 + 8252 + 8278 + 101 + 8283 + 104 + 8285 + 195 + 8297 + 8322 + 8383 + 264 + 8414 + 8475 + 358 + 409 + 8506 + 8567 + 451 + 461 + 471 + 8578 + 495 + 8583 + 8587 + 8648 + 8658 + 8665 + 8671 + 519 + 8673 + 8699 + 8760 + 587 + 8791 + 8806 + 8867 + 666 + 670 + 671 + 679 + 8898 + 757 + 8950 + 9011 + 851 + 9042 + 9053 + 9114 + 934 + 9145 + 9330 + 9149 + 9210 + 1020 + 9233 + 1053 + 9248 + 9253 + 9314 + 1086 + 1180 + 1274 + 1368 + 1462 + 1556 + 1650 + 1744 + 1838 + 1932 + 2026 + 2120 + 2214 + 2308 + 2402 + 2496 + 2590 + 2684 + 2778 + 2872 + 2966 + 3060 + 3154 + 3248 + 3342 + 3436 + 3530 + 4116 + 3577 + 3678 + 3582 + 7053 + 3598 + 3621 + 3715 + 3460 + 3761 + 7900 +endcidrange + +100 begincidrange + 3785 + 3807 + 3802 + 3819 + 3900 + 3902 + 3990 + 3993 + 3946 + 3994 + 3946 + 4015 + 3708 + 4038 + 4131 + 4050 + 4083 + 4374 + 4156 + 4134 + 4375 + 4136 + 4376 + 4138 + 5800 + 4382 + 4386 + 4139 + 4387 + 4140 + 4391 + 4141 + 4394 + 4142 + 4396 + 4143 + 4399 + 4146 + 4403 + 4149 + 4406 + 4409 + 4150 + 4410 + 4151 + 4412 + 4419 + 4154 + 4420 + 4155 + 4424 + 4159 + 4511 + 4170 + 4513 + 4517 + 4173 + 4518 + 4524 + 4174 + 4525 + 4528 + 4535 + 4175 + 4541 + 4176 + 4545 + 4179 + 4547 + 4550 + 4180 + 4564 + 4566 + 4571 + 4576 + 4181 + 4604 + 4609 + 4185 + 4611 + 4186 + 4192 + 4286 + 4318 + 4355 + 4136 + 4376 + 4378 + 5800 + 4382 + 4139 + 4387 + 4192 + 4389 + 4469 + 4167 + 4492 + 4172 + 4512 + 4561 +endcidrange + +100 begincidrange + 5552 + 4603 + 6424 + 4627 + 4653 + 4747 + 4841 + 4935 + 5151 + 4971 + 4922 + 5001 + 5027 + 7518 + 5031 + 5120 + 5079 + 5124 + 5109 + 5171 + 7607 + 5201 + 5211 + 5584 + 5302 + 5367 + 5303 + 7083 + 5321 + 5362 + 5366 + 5485 + 5372 + 5394 + 6001 + 5474 + 5487 + 5460 + 5499 + 5317 + 5562 + 5579 + 5673 + 7009 + 5757 + 7370 + 5766 + 5678 + 5773 + 5858 + 5874 + 5871 + 4425 + 5873 + 4427 + 5879 + 4429 + 5880 + 4431 + 5887 + 4435 + 5896 + 4436 + 5897 + 4437 + 5898 + 4439 + 5901 + 4442 + 4159 + 5936 + 4444 + 4447 + 5937 + 4449 + 5939 + 4450 + 5941 + 4453 + 5946 + 4455 + 5947 + 4458 + 5948 + 4459 + 5951 + 4463 + 5954 + 4160 + 5961 + 4465 + 5962 + 4161 + 5964 + 4468 + 5971 + 4469 + 5974 + 4470 + 5976 +endcidrange + +100 begincidrange + 4162 + 5978 + 4471 + 5980 + 4472 + 5981 + 4474 + 4473 + 4475 + 5983 + 4476 + 5984 + 4478 + 6447 + 5985 + 4481 + 5987 + 4482 + 5460 + 5988 + 4483 + 4163 + 4166 + 5990 + 4485 + 5991 + 4487 + 5996 + 4488 + 6000 + 4489 + 4491 + 6002 + 4167 + 4493 + 6003 + 4494 + 6005 + 4495 + 6019 + 7783 + 6020 + 4497 + 4499 + 6024 + 4501 + 6027 + 4502 + 6028 + 4503 + 6029 + 4506 + 6031 + 4508 + 6042 + 4509 + 6046 + 4510 + 6047 + 5797 + 6063 + 6070 + 4551 + 6140 + 4553 + 4180 + 6147 + 4555 + 6152 + 5800 + 6153 + 4556 + 6154 + 4557 + 6156 + 4560 + 6162 + 4561 + 6166 + 4563 + 6197 + 7988 + 6239 + 6246 + 6123 + 6278 + 4577 + 6313 + 4183 + 6327 + 4579 + 6329 + 4581 + 6333 + 4582 + 6334 + 4584 + 6337 + 4586 + 6339 +endcidrange + +100 begincidrange + 4588 + 4184 + 6340 + 4590 + 6355 + 4592 + 6356 + 4593 + 4595 + 6359 + 4596 + 6362 + 4599 + 6366 + 4600 + 5552 + 6368 + 4603 + 6373 + 6411 + 4614 + 4616 + 6416 + 4618 + 6418 + 5950 + 4620 + 4187 + 6422 + 4625 + 6424 + 4627 + 6426 + 4629 + 6427 + 4632 + 6432 + 4634 + 4636 + 6435 + 4188 + 6437 + 4638 + 6447 + 4640 + 6454 + 4642 + 6456 + 4644 + 6458 + 4645 + 6460 + 4647 + 6474 + 4650 + 6475 + 4653 + 6479 + 5351 + 6553 + 6569 + 6494 + 6627 + 6662 + 6756 + 6850 + 6944 + 5731 + 6972 + 5771 + 7032 + 7036 + 4191 + 7052 + 7129 + 6484 + 7135 + 6684 + 7205 + 7221 + 7315 + 4279 + 7398 + 7139 + 7399 + 7407 + 4247 + 7430 + 4266 + 7445 + 4340 + 7455 + 7498 + 7572 + 7556 + 5088 + 7576 + 7590 + 7709 + 3558 +endcidrange + +9 begincidrange + 7684 + 3644 + 7751 + 7775 + 7869 + 3815 + 7877 + 7962 + 99 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCpc-EUC-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCpc-EUC-V new file mode 100644 index 00000000000..88aa0887730 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/KSCpc-EUC-V @@ -0,0 +1,94 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (KSCpc-EUC-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (KSCpc-EUC-H) +%%BeginResource: CMap (KSCpc-EUC-V) +%%Title: (KSCpc-EUC-V Adobe Korea1 0) +%%Version: 9.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/KSCpc-EUC-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 0 def +end def + +/CMapName /KSCpc-EUC-V def +/CMapVersion 9.003 def +/CMapType 1 def + +/UIDOffset 300 def +/XUID [1 10 25405] def + +/WMode 1 def + +16 begincidrange + 8056 + 8058 + 8320 + 8059 + 8062 + 8063 + 8075 + 8076 + 8077 + 8079 + 8080 + 8081 + 8087 + 8088 + 8089 + 8090 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UCS2-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UCS2-H new file mode 100644 index 00000000000..9a41ee0368f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UCS2-H @@ -0,0 +1,16992 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniCNS-UCS2-H) +%%Title: (UniCNS-UCS2-H Adobe CNS1 3) +%%Version: 12.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 3 def +end def + +/CMapName /UniCNS-UCS2-H def +/CMapVersion 12.003 def +/CMapType 1 def + +/XUID [1 10 25392] def + +/WMode 0 def + +2 begincodespacerange + <0000> + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidrange +<0020> <007e> 1 +<00a2> <00a3> 262 +<00a5> <00a5> 260 +<00a7> <00a7> 178 +<00a8> <00a8> 13747 +<00ac> <00ac> 14049 +<00b0> <00b0> 280 +<00b1> <00b1> 212 +<00b7> <00b7> 115 +<00c0> <00c0> 18788 +<00c1> <00c1> 18786 +<00c8> <00c8> 18792 +<00c9> <00c9> 18790 +<00ca> <00ca> 18801 +<00d2> <00d2> 18796 +<00d3> <00d3> 18794 +<00d7> <00d7> 210 +<00e0> <00e0> 18805 +<00e1> <00e1> 18803 +<00e8> <00e8> 18810 +<00e9> <00e9> 18808 +<00ea> <00ea> 18832 +<00ec> <00ec> 18814 +<00ed> <00ed> 18812 +<00f2> <00f2> 18818 +<00f3> <00f3> 18816 +<00f7> <00f7> 211 +<00f8> <00f8> 18840 +<00f9> <00f9> 18822 +<00fa> <00fa> 18820 +<00fc> <00fc> 18827 +<0100> <0100> 18785 +<0101> <0101> 18802 +<0112> <0112> 18789 +<0113> <0113> 18807 +<011a> <011a> 18791 +<011b> <011b> 18809 +<012b> <012b> 18811 +<014b> <014b> 18841 +<014c> <014c> 18793 +<014d> <014d> 18815 +<0153> <0153> 18839 +<016b> <016b> 18819 +<01cd> <01cd> 18787 +<01ce> <01ce> 18804 +<01d0> <01d0> 18813 +<01d1> <01d1> 18795 +<01d2> <01d2> 18817 +<01d4> <01d4> 18821 +<01d6> <01d6> 18823 +<01d8> <01d8> 18824 +<01da> <01da> 18825 +<01dc> <01dc> 18826 +<0250> <0250> 18835 +<0251> <0251> 18806 +<0254> <0254> 18837 +<025b> <025b> 18836 +<0261> <0261> 18833 +<026a> <026a> 18843 +<0275> <0275> 18838 +<0283> <0283> 18834 +<028a> <028a> 18842 +<02c6> <02c6> 13748 +<02c7> <02c7> 504 +<02ca> <02ca> 503 +<02cb> <02cb> 505 +<02d9> <02d9> 502 +<0308> <0308> 13747 +<0391> <03a1> 417 +<03a3> <03a9> 434 +<03b1> <03c1> 441 +<03c3> <03c9> 458 +<0401> <0401> 13936 +<0410> <0415> 13930 +<0416> <0435> 13937 +<0436> <044f> 13970 +<0451> <0451> 13969 +<1ebe> <1ebe> 18798 +<1ebf> <1ebf> 18829 +<1ec0> <1ec0> 18800 +<1ec1> <1ec1> 18831 +<2013> <2013> 121 +<2014> <2014> 123 +<2018> <2019> 166 +<201c> <201d> 168 +<2022> <2022> 104 +<2025> <2025> 111 +<2026> <2026> 110 +<2032> <2032> 173 +<2035> <2035> 172 +<203b> <203b> 177 +<203e> <203e> 195 +<20ac> <20ac> 17601 +<2103> <2103> 266 +<2105> <2105> 194 +<2109> <2109> 267 +<2116> <2116> 14054 +<2121> <2121> 14055 +<2160> <2169> 343 +<2170> <2179> 526 +endcidrange + +100 begincidrange +<2190> <2190> 248 +<2191> <2191> 245 +<2192> <2192> 247 +<2193> <2193> 246 +<2196> <2197> 249 +<2198> <2198> 252 +<2199> <2199> 251 +<21b8> <21b9> 13997 +<21e7> <21e7> 13996 +<221a> <221a> 213 +<221e> <221e> 220 +<221f> <221f> 233 +<2220> <2220> 232 +<2223> <2223> 254 +<2225> <2225> 253 +<2229> <222a> 229 +<222b> <222b> 237 +<222e> <222e> 238 +<2234> <2234> 240 +<2235> <2235> 239 +<223c> <223c> 228 +<2252> <2252> 221 +<2260> <2260> 219 +<2261> <2261> 222 +<2266> <2267> 217 +<22a5> <22a5> 231 +<22bf> <22bf> 234 +<2400> <241f> 562 +<2421> <2421> 594 +<2460> <2469> 506 +<2474> <247d> 516 +<2500> <2500> 311 +<2502> <2502> 312 +<250c> <250c> 314 +<2510> <2510> 315 +<2514> <2514> 316 +<2518> <2518> 317 +<251c> <251c> 309 +<2524> <2524> 308 +<252c> <252c> 307 +<2534> <2534> 306 +<253c> <253c> 305 +<2550> <2550> 322 +<2551> <2551> 14090 +<2552> <2552> 14072 +<2553> <2553> 14081 +<2554> <2554> 14063 +<2555> <2555> 14074 +<2556> <2556> 14083 +<2557> <2557> 14065 +<2558> <2558> 14078 +<2559> <2559> 14087 +<255a> <255a> 14069 +<255b> <255b> 14080 +<255c> <255c> 14089 +<255d> <255d> 14071 +<255e> <255e> 323 +<255f> <255f> 14084 +<2560> <2560> 14066 +<2561> <2561> 325 +<2562> <2562> 14086 +<2563> <2563> 14068 +<2564> <2564> 14073 +<2565> <2565> 14082 +<2566> <2566> 14064 +<2567> <2567> 14079 +<2568> <2568> 14088 +<2569> <2569> 14070 +<256a> <256a> 324 +<256b> <256b> 14085 +<256c> <256c> 14067 +<256d> <256e> 318 +<256f> <256f> 321 +<2570> <2570> 320 +<2571> <2573> 330 +<2581> <2588> 290 +<2589> <2589> 304 +<258a> <258a> 303 +<258b> <258b> 302 +<258c> <258c> 301 +<258d> <258d> 300 +<258e> <258e> 299 +<258f> <258f> 298 +<2593> <2593> 14096 +<2594> <2594> 310 +<2595> <2595> 313 +<25a0> <25a0> 190 +<25a1> <25a1> 189 +<25b2> <25b2> 183 +<25b3> <25b3> 182 +<25bc> <25bc> 192 +<25bd> <25bd> 191 +<25c6> <25c6> 188 +<25c7> <25c7> 187 +<25cb> <25cb> 180 +<25ce> <25ce> 184 +<25cf> <25cf> 181 +<25e2> <25e3> 326 +<25e4> <25e4> 329 +<25e5> <25e5> 328 +endcidrange + +100 begincidrange +<2605> <2605> 186 +<2606> <2606> 185 +<2609> <2609> 244 +<2640> <2640> 241 +<2641> <2641> 243 +<2642> <2642> 242 +<273d> <273d> 13760 +<2e80> <2e80> 17608 +<2e84> <2e84> 17692 +<2e86> <2e88> 17693 +<2e8a> <2e8a> 17696 +<2e8c> <2e8d> 17697 +<2e95> <2e95> 17699 +<2e9c> <2e9c> 17700 +<2e9d> <2e9d> 732 +<2ea5> <2ea5> 17701 +<2ea7> <2ea7> 17702 +<2eaa> <2eaa> 17703 +<2eac> <2eac> 17704 +<2eae> <2eae> 17705 +<2eb6> <2eb6> 17706 +<2ebc> <2ebc> 17707 +<2ebe> <2ebe> 17708 +<2ec6> <2ec6> 1289 +<2eca> <2eca> 17709 +<2ecc> <2ecd> 17710 +<2ecf> <2ecf> 17712 +<2ed6> <2ed7> 17713 +<2ede> <2ede> 17715 +<2ee3> <2ee3> 2550 +<2f33> <2f33> 551 +<3000> <3000> 99 +<3001> <3002> 101 +<3003> <3003> 179 +<3005> <3007> 13754 +<3008> <3009> 148 +<300a> <300b> 144 +<300c> <300d> 152 +<300e> <300f> 156 +<3010> <3011> 140 +<3012> <3012> 261 +<3014> <3015> 136 +<301d> <301e> 170 +<3021> <3029> 353 +<3041> <3093> 13761 +<309b> <309c> 17606 +<309d> <309e> 13751 +<30a1> <30f6> 13844 +<30fc> <30fc> 13757 +<30fd> <30fe> 13749 +<3105> <3129> 465 +<3231> <3231> 14053 +<32a3> <32a3> 193 +<338e> <338f> 277 +<339c> <339e> 272 +<33a1> <33a1> 276 +<33c4> <33c4> 279 +<33ce> <33ce> 275 +<33d1> <33d1> 236 +<33d2> <33d2> 235 +<33d5> <33d5> 271 +<3435> <3435> 14781 +<3440> <3440> 15463 +<344c> <344c> 17811 +<3464> <3464> 14981 +<3473> <3473> 15813 +<347a> <347a> 16435 +<347d> <347d> 17815 +<347e> <347e> 18083 +<3493> <3493> 17310 +<3496> <3496> 14300 +<34a5> <34a5> 17816 +<34af> <34af> 15487 +<34bc> <34bc> 17280 +<34c1> <34c1> 17659 +<34c8> <34c8> 15616 +<34df> <34df> 16036 +<34e4> <34e4> 15956 +<34fb> <34fb> 15818 +<3506> <3506> 17206 +<353e> <353e> 17639 +<3551> <3551> 17825 +<3553> <3553> 17317 +<3561> <3561> 16600 +<356d> <356d> 17828 +<3570> <3570> 15151 +<3572> <3572> 17829 +<3577> <3577> 16075 +<3578> <3578> 17273 +<3584> <3584> 14843 +<3597> <3597> 15149 +<3598> <3598> 17840 +<35a1> <35a1> 16610 +<35a5> <35a5> 17841 +<35ad> <35ad> 16124 +<35bf> <35bf> 17842 +<35c1> <35c1> 17792 +<35c5> <35c5> 17844 +<35c7> <35c7> 17823 +<35ca> <35ca> 15939 +endcidrange + +100 begincidrange +<35ce> <35ce> 16001 +<35d2> <35d2> 16329 +<35d6> <35d6> 16309 +<35db> <35db> 18189 +<35dd> <35dd> 17324 +<35f1> <35f1> 18070 +<35f2> <35f2> 17959 +<35f3> <35f3> 16236 +<35fb> <35fb> 17864 +<35fe> <35fe> 16234 +<3609> <3609> 17909 +<3618> <3618> 18545 +<361a> <361a> 17946 +<3623> <3623> 16582 +<362d> <362d> 16006 +<3635> <3635> 18734 +<3639> <3639> 16741 +<363e> <363e> 14856 +<3647> <3647> 18438 +<3648> <3648> 14342 +<3649> <3649> 16403 +<364e> <364e> 18072 +<365f> <365f> 15859 +<367a> <367a> 16099 +<3681> <3681> 17830 +<369a> <369a> 15473 +<36a5> <36a5> 18690 +<36aa> <36aa> 15152 +<36ac> <36ac> 18688 +<36b0> <36b0> 15583 +<36b1> <36b1> 16589 +<36b5> <36b5> 15298 +<36b9> <36b9> 18567 +<36bc> <36bc> 15615 +<36c1> <36c1> 14277 +<36c3> <36c3> 16613 +<36c4> <36c4> 14597 +<36c5> <36c5> 17046 +<36c7> <36c7> 15674 +<36c8> <36c8> 18464 +<36d3> <36d3> 14904 +<36d4> <36d4> 15283 +<36d6> <36d6> 15628 +<36dd> <36dd> 14902 +<36e1> <36e1> 14716 +<36e2> <36e2> 15581 +<36e5> <36e5> 16918 +<36e6> <36e6> 16636 +<36f5> <36f5> 14872 +<3701> <3701> 14900 +<3703> <3703> 17935 +<3708> <3708> 16639 +<370a> <370a> 15573 +<370d> <370d> 16952 +<371c> <371c> 15870 +<3722> <3722> 14713 +<3723> <3723> 14720 +<3725> <3725> 14409 +<372c> <372c> 15500 +<372d> <372d> 15671 +<3730> <3730> 18780 +<3732> <3732> 16646 +<3733> <3733> 14743 +<373a> <373a> 15958 +<3740> <3740> 16898 +<3743> <3743> 16438 +<3762> <3762> 15798 +<376f> <376f> 18379 +<3797> <3797> 17901 +<37a0> <37a0> 14888 +<37b9> <37b9> 17335 +<37be> <37be> 14654 +<37f2> <37f2> 15265 +<37f8> <37f8> 17106 +<37fb> <37fb> 16117 +<380f> <380f> 17964 +<3819> <3819> 14767 +<3820> <3820> 17967 +<382d> <382d> 16686 +<3836> <3836> 16691 +<3838> <3838> 17339 +<3863> <3863> 18115 +<38a0> <38a0> 16709 +<38c3> <38c3> 14610 +<38cc> <38cc> 16502 +<38d1> <38d1> 14997 +<38fa> <38fa> 17643 +<3908> <3908> 17970 +<3914> <3914> 17342 +<3927> <3927> 15409 +<3932> <3932> 16770 +<393f> <393f> 17971 +<394d> <394d> 17972 +<3963> <3963> 16739 +<3980> <3980> 14452 +<3989> <3989> 17976 +<398a> <398a> 15592 +<3992> <3992> 17270 +<3999> <3999> 14778 +<399b> <399b> 15795 +endcidrange + +100 begincidrange +<39a1> <39a1> 15897 +<39a4> <39a4> 15887 +<39b8> <39b8> 17979 +<39dc> <39dc> 16078 +<39e2> <39e2> 18120 +<39e5> <39e5> 14651 +<39ec> <39ec> 17168 +<39f8> <39f8> 17982 +<39fb> <39fb> 17221 +<39fe> <39fe> 17256 +<3a01> <3a01> 16864 +<3a03> <3a03> 17984 +<3a06> <3a06> 17271 +<3a17> <3a17> 16784 +<3a18> <3a18> 17295 +<3a29> <3a29> 14942 +<3a2a> <3a2a> 16095 +<3a34> <3a34> 17177 +<3a4b> <3a4b> 17988 +<3a52> <3a52> 16083 +<3a57> <3a57> 16798 +<3a5c> <3a5c> 16324 +<3a5e> <3a5e> 15111 +<3a66> <3a66> 16796 +<3a67> <3a67> 17203 +<3a97> <3a97> 17991 +<3aab> <3aab> 16529 +<3abd> <3abd> 17993 +<3ade> <3ade> 16716 +<3ae0> <3ae0> 14970 +<3af0> <3af0> 18098 +<3af2> <3af2> 17996 +<3afb> <3afb> 15090 +<3b0e> <3b0e> 14568 +<3b19> <3b19> 18117 +<3b22> <3b22> 17998 +<3b2b> <3b2b> 18774 +<3b39> <3b39> 18251 +<3b42> <3b42> 18000 +<3b58> <3b58> 18002 +<3b60> <3b60> 14650 +<3b71> <3b71> 18006 +<3b72> <3b72> 18005 +<3b7b> <3b7b> 18007 +<3b7c> <3b7c> 14426 +<3b80> <3b80> 16866 +<3b96> <3b96> 15004 +<3b99> <3b99> 15000 +<3ba1> <3ba1> 16873 +<3bbc> <3bbc> 17352 +<3bbe> <3bbe> 15793 +<3bc2> <3bc2> 16692 +<3bc4> <3bc4> 15008 +<3bd7> <3bd7> 15020 +<3bdd> <3bdd> 18015 +<3bec> <3bec> 18020 +<3bf2> <3bf2> 18022 +<3bf3> <3bf3> 16883 +<3bf4> <3bf4> 14958 +<3c0d> <3c0d> 16887 +<3c11> <3c11> 15936 +<3c15> <3c15> 14744 +<3c54> <3c54> 15872 +<3ccb> <3ccb> 18032 +<3ccd> <3ccd> 15589 +<3cd1> <3cd1> 16387 +<3cd6> <3cd6> 15607 +<3cdc> <3cdc> 16462 +<3ceb> <3ceb> 16919 +<3cef> <3cef> 18037 +<3d13> <3d13> 14195 +<3d1d> <3d1d> 14652 +<3d32> <3d32> 18775 +<3d3b> <3d3b> 16965 +<3d46> <3d46> 18053 +<3d4c> <3d4c> 15595 +<3d4e> <3d4e> 16962 +<3d51> <3d51> 14570 +<3d5f> <3d5f> 16729 +<3d62> <3d62> 15454 +<3d69> <3d69> 15594 +<3d6a> <3d6a> 18057 +<3d6f> <3d6f> 15612 +<3d75> <3d75> 18058 +<3d7d> <3d7d> 15407 +<3d85> <3d85> 18763 +<3d8a> <3d8a> 18061 +<3d8f> <3d8f> 15037 +<3d91> <3d91> 18063 +<3da5> <3da5> 15702 +<3dad> <3dad> 18073 +<3db4> <3db4> 16550 +<3dbf> <3dbf> 14288 +<3dc6> <3dc6> 18654 +<3dc7> <3dc7> 16740 +<3dcc> <3dcc> 15727 +<3dcd> <3dcd> 15091 +<3dd3> <3dd3> 14305 +<3ddb> <3ddb> 16383 +<3de7> <3de7> 14745 +endcidrange + +100 begincidrange +<3de8> <3de8> 16989 +<3deb> <3deb> 15962 +<3df3> <3df3> 18132 +<3df7> <3df7> 18603 +<3dfc> <3dfc> 17963 +<3dfd> <3dfd> 15380 +<3e06> <3e06> 18717 +<3e40> <3e40> 16745 +<3e43> <3e43> 17261 +<3e48> <3e48> 17813 +<3e55> <3e55> 17023 +<3e74> <3e74> 16098 +<3ea8> <3ea8> 17156 +<3ea9> <3ea9> 18157 +<3eaa> <3eaa> 16501 +<3ead> <3ead> 15261 +<3eb1> <3eb1> 15064 +<3eb8> <3eb8> 14923 +<3ebf> <3ebf> 15115 +<3ec2> <3ec2> 15320 +<3ec7> <3ec7> 14709 +<3eca> <3eca> 18161 +<3ecc> <3ecc> 15330 +<3ed0> <3ed0> 14420 +<3ed1> <3ed1> 18162 +<3ed6> <3ed6> 15533 +<3ed7> <3ed7> 17055 +<3eda> <3eda> 15618 +<3ede> <3ede> 14834 +<3ee1> <3ee1> 15528 +<3ee2> <3ee2> 18166 +<3ee7> <3ee7> 15324 +<3ee9> <3ee9> 15524 +<3eeb> <3eeb> 14698 +<3ef0> <3ef0> 18167 +<3ef3> <3ef3> 15069 +<3ef4> <3ef4> 18168 +<3efa> <3efa> 18169 +<3efc> <3efc> 15336 +<3eff> <3eff> 15093 +<3f00> <3f00> 15373 +<3f04> <3f04> 17091 +<3f06> <3f06> 15063 +<3f0e> <3f0e> 18171 +<3f53> <3f53> 18172 +<3f58> <3f58> 15081 +<3f59> <3f59> 16521 +<3f63> <3f63> 15078 +<3f7c> <3f7c> 18176 +<3f93> <3f93> 17869 +<3fc0> <3fc0> 17359 +<3fd7> <3fd7> 17361 +<3fdc> <3fdc> 18180 +<3fe5> <3fe5> 18143 +<3fed> <3fed> 17205 +<3ff9> <3ff9> 17879 +<3ffa> <3ffa> 17236 +<4004> <4004> 16654 +<401d> <401d> 18185 +<4039> <4039> 18187 +<4045> <4045> 18188 +<4053> <4053> 17846 +<4057> <4057> 14749 +<4062> <4062> 15307 +<4065> <4065> 16339 +<406a> <406a> 18191 +<406f> <406f> 18192 +<40a8> <40a8> 17365 +<40bb> <40bb> 17856 +<40bf> <40bf> 16108 +<40c8> <40c8> 15118 +<40d8> <40d8> 16811 +<40df> <40df> 15895 +<40fa> <40fa> 16062 +<4103> <4103> 17367 +<4104> <4104> 16988 +<4109> <4109> 18204 +<410e> <410e> 15131 +<4132> <4132> 15141 +<4167> <4167> 18207 +<416c> <416c> 14510 +<416e> <416e> 15139 +<417f> <417f> 15234 +<4190> <4190> 18112 +<41b2> <41b2> 18208 +<41c4> <41c4> 18211 +<41ca> <41ca> 14143 +<41cf> <41cf> 18214 +<41db> <41db> 14271 +<41ef> <41ef> 14147 +<41f9> <41f9> 15166 +<4211> <4211> 15169 +<4240> <4240> 14321 +<4260> <4260> 18219 +<426a> <426a> 15189 +<427a> <427a> 18220 +<428c> <428c> 18223 +<4294> <4294> 18225 +<42b5> <42b5> 16400 +<42b9> <42b9> 14502 +endcidrange + +100 begincidrange +<42bc> <42bc> 15498 +<42f4> <42f4> 15289 +<42fb> <42fb> 15598 +<42fc> <42fc> 16870 +<432b> <432b> 14205 +<436e> <436e> 18122 +<4397> <4397> 18235 +<43ba> <43ba> 17247 +<43c1> <43c1> 18069 +<43d9> <43d9> 17214 +<43df> <43df> 15945 +<43ed> <43ed> 18245 +<43f2> <43f2> 15944 +<4401> <4401> 18250 +<4402> <4402> 15219 +<4413> <4413> 18255 +<4425> <4425> 18257 +<442d> <442d> 18258 +<447a> <447a> 14255 +<448f> <448f> 18264 +<449f> <449f> 15074 +<44a0> <44a0> 14317 +<44a2> <44a2> 16505 +<44b0> <44b0> 18268 +<44b7> <44b7> 16289 +<44c0> <44c0> 15367 +<44c5> <44c5> 16912 +<44ce> <44ce> 15651 +<44dd> <44dd> 14813 +<44df> <44df> 15650 +<44e4> <44e4> 14306 +<44e9> <44e9> 16847 +<44ea> <44ea> 15217 +<44eb> <44eb> 15602 +<44ec> <44ec> 16052 +<44f4> <44f4> 14738 +<4503> <4503> 18079 +<4504> <4504> 18275 +<4509> <4509> 15952 +<450b> <450b> 14292 +<4516> <4516> 14329 +<451d> <451d> 14183 +<4527> <4527> 14327 +<452e> <452e> 15571 +<4533> <4533> 15441 +<453b> <453b> 18282 +<453d> <453d> 14532 +<453f> <453f> 15890 +<4543> <4543> 14323 +<4551> <4551> 15076 +<4552> <4552> 16563 +<4555> <4555> 16958 +<455c> <455c> 14219 +<4562> <4562> 18752 +<456a> <456a> 14340 +<4577> <4577> 18286 +<4585> <4585> 14533 +<45e9> <45e9> 16100 +<4606> <4606> 18291 +<460f> <460f> 14357 +<4615> <4615> 14403 +<4617> <4617> 18292 +<465b> <465b> 14365 +<467a> <467a> 14825 +<4680> <4680> 15617 +<46cf> <46cf> 15264 +<46d0> <46d0> 15866 +<46f5> <46f5> 15263 +<4713> <4713> 14387 +<4718> <4718> 15815 +<474e> <474e> 16060 +<477c> <477c> 15821 +<4798> <4798> 18305 +<47a6> <47a6> 16547 +<47b6> <47b6> 16106 +<47d5> <47d5> 17178 +<47ed> <47ed> 18307 +<47f4> <47f4> 17199 +<4800> <4800> 17950 +<480b> <480b> 17234 +<4837> <4837> 18311 +<485d> <485d> 16655 +<4871> <4871> 15619 +<489b> <489b> 15293 +<48ad> <48ad> 18321 +<48ae> <48ae> 18765 +<48d0> <48d0> 15783 +<48dd> <48dd> 16672 +<48ed> <48ed> 17032 +<48f3> <48f3> 16065 +<48fa> <48fa> 15940 +<4906> <4906> 15303 +<4911> <4911> 17796 +<491e> <491e> 18324 +<4925> <4925> 15375 +<492a> <492a> 18094 +<492d> <492d> 18125 +<4935> <4935> 15555 +<493c> <493c> 15352 +<493e> <493e> 15622 +endcidrange + +100 begincidrange +<4945> <4945> 18339 +<4951> <4951> 18340 +<4953> <4953> 17069 +<4965> <4965> 14489 +<496a> <496a> 18345 +<4972> <4972> 14884 +<4989> <4989> 14235 +<49a1> <49a1> 14519 +<49a7> <49a7> 18350 +<49df> <49df> 14506 +<49e5> <49e5> 18353 +<49e7> <49e7> 17953 +<4a0f> <4a0f> 14531 +<4a1d> <4a1d> 15340 +<4a24> <4a24> 18354 +<4a35> <4a35> 18356 +<4a96> <4a96> 15591 +<4ab4> <4ab4> 17249 +<4ab8> <4ab8> 15784 +<4ad1> <4ad1> 14563 +<4ae4> <4ae4> 18359 +<4aff> <4aff> 14578 +<4b19> <4b19> 18361 +<4b2c> <4b2c> 17951 +<4b37> <4b37> 16809 +<4b6f> <4b6f> 15382 +<4b70> <4b70> 18368 +<4b72> <4b72> 14588 +<4b7b> <4b7b> 15501 +<4b7e> <4b7e> 16394 +<4b8e> <4b8e> 14839 +<4b90> <4b90> 15392 +<4b93> <4b93> 14988 +<4b96> <4b96> 14658 +<4b97> <4b97> 15396 +<4b9d> <4b9d> 18370 +<4bbd> <4bbd> 15395 +<4bbe> <4bbe> 14676 +<4bc0> <4bc0> 15836 +<4c04> <4c04> 16315 +<4c07> <4c07> 16311 +<4c0e> <4c0e> 14604 +<4c3b> <4c3b> 16188 +<4c3e> <4c3e> 17787 +<4c5b> <4c5b> 16089 +<4c6d> <4c6d> 18377 +<4c7d> <4c7d> 15974 +<4ca4> <4ca4> 18622 +<4cae> <4cae> 15426 +<4cb0> <4cb0> 15429 +<4cb7> <4cb7> 15905 +<4ccd> <4ccd> 17784 +<4ce1> <4ce1> 16115 +<4ced> <4ced> 16555 +<4d09> <4d09> 16086 +<4d10> <4d10> 16663 +<4d34> <4d34> 14645 +<4d91> <4d91> 17397 +<4d9c> <4d9c> 18628 +<4e00> <4e00> 595 +<4e01> <4e01> 597 +<4e03> <4e03> 598 +<4e04> <4e04> 18686 +<4e07> <4e07> 6001 +<4e08> <4e08> 617 +<4e09> <4e09> 615 +<4e0a> <4e0a> 618 +<4e0b> <4e0b> 616 +<4e0c> <4e0c> 6002 +<4e0d> <4e0d> 660 +<4e0e> <4e0e> 6010 +<4e0f> <4e0f> 6008 +<4e10> <4e10> 659 +<4e11> <4e11> 658 +<4e14> <4e14> 754 +<4e15> <4e15> 753 +<4e16> <4e16> 752 +<4e18> <4e18> 755 +<4e19> <4e19> 751 +<4e1a> <4e1a> 18685 +<4e1c> <4e1c> 18656 +<4e1e> <4e1f> 878 +<4e21> <4e21> 15725 +<4e24> <4e24> 17805 +<4e26> <4e26> 1320 +<4e28> <4e28> 536 +<4e2a> <4e2a> 16215 +<4e2b> <4e2b> 619 +<4e2c> <4e2c> 17651 +<4e2d> <4e2d> 661 +<4e2e> <4e2e> 6011 +<4e30> <4e30> 662 +<4e31> <4e31> 6030 +<4e32> <4e32> 1045 +<4e33> <4e33> 6388 +<4e36> <4e36> 537 +<4e37> <4e37> 17687 +<4e38> <4e38> 620 +<4e39> <4e39> 663 +<4e3b> <4e3b> 756 +endcidrange + +100 begincidrange +<4e3c> <4e3c> 6031 +<4e3d> <4e3d> 17719 +<4e3f> <4e3f> 538 +<4e41> <4e41> 13999 +<4e42> <4e42> 5996 +<4e43> <4e43> 599 +<4e45> <4e45> 622 +<4e47> <4e47> 6003 +<4e48> <4e48> 623 +<4e49> <4e49> 16526 +<4e4b> <4e4b> 664 +<4e4d> <4e4d> 757 +<4e4e> <4e4e> 759 +<4e4f> <4e4f> 758 +<4e52> <4e53> 880 +<4e56> <4e56> 1321 +<4e58> <4e58> 2097 +<4e59> <4e59> 596 +<4e5a> <4e5a> 14001 +<4e5b> <4e5b> 17637 +<4e5c> <4e5c> 5997 +<4e5d> <4e5d> 600 +<4e5e> <4e5e> 625 +<4e5f> <4e5f> 624 +<4e69> <4e69> 882 +<4e6a> <4e6a> 15845 +<4e73> <4e73> 1322 +<4e78> <4e78> 15758 +<4e7e> <4e7e> 2555 +<4e7f> <4e7f> 7733 +<4e80> <4e80> 17806 +<4e81> <4e81> 17340 +<4e82> <4e82> 3518 +<4e83> <4e84> 9057 +<4e85> <4e85> 539 +<4e86> <4e86> 601 +<4e87> <4e87> 17807 +<4e88> <4e88> 666 +<4e89> <4e89> 17820 +<4e8b> <4e8b> 1323 +<4e8c> <4e8c> 602 +<4e8d> <4e8d> 6004 +<4e8e> <4e8e> 626 +<4e91> <4e91> 667 +<4e92> <4e92> 669 +<4e93> <4e93> 6012 +<4e94> <4e94> 670 +<4e95> <4e95> 668 +<4e98> <4e98> 14788 +<4e99> <4e99> 883 +<4e9a> <4e9a> 18645 +<4e9b> <4e9b> 1324 +<4e9e> <4e9e> 1325 +<4e9f> <4e9f> 1699 +<4ea0> <4ea0> 540 +<4ea1> <4ea1> 627 +<4ea2> <4ea2> 671 +<4ea4> <4ea4> 884 +<4ea5> <4ea5> 886 +<4ea6> <4ea6> 885 +<4ea8> <4ea8> 1046 +<4eab> <4eac> 1326 +<4ead> <4eae> 1700 +<4eb3> <4eb3> 2098 +<4eb6> <4eb6> 9059 +<4eb7> <4eb7> 16700 +<4eb9> <4eb9> 13175 +<4eba> <4eba> 603 +<4ebb> <4ebb> 17638 +<4ebc> <4ebc> 14769 +<4ebf> <4ebf> 17808 +<4ec0> <4ec0> 673 +<4ec1> <4ec1> 672 +<4ec2> <4ec2> 6013 +<4ec3> <4ec3> 674 +<4ec4> <4ec4> 680 +<4ec6> <4ec7> 675 +<4ec8> <4ec8> 6015 +<4ec9> <4ec9> 6014 +<4eca> <4ecb> 678 +<4ecd> <4ecd> 677 +<4ece> <4ece> 16226 +<4ed4> <4ed7> 762 +<4ed8> <4ed8> 761 +<4ed9> <4ed9> 768 +<4eda> <4eda> 6037 +<4edc> <4edc> 6033 +<4edd> <4edd> 6036 +<4ede> <4ede> 769 +<4edf> <4edf> 785 +<4ee1> <4ee1> 6035 +<4ee3> <4ee4> 766 +<4ee5> <4ee5> 760 +<4ee8> <4ee8> 6032 +<4ee9> <4ee9> 6034 +<4eea> <4eea> 18635 +<4eeb> <4eeb> 17809 +<4eee> <4eee> 15734 +<4ef0> <4ef0> 899 +<4ef1> <4ef1> 6074 +endcidrange + +100 begincidrange +<4ef2> <4ef2> 896 +<4ef3> <4ef3> 900 +<4ef4> <4ef4> 6084 +<4ef5> <4ef5> 6072 +<4ef6> <4ef6> 897 +<4ef7> <4ef7> 6076 +<4ef8> <4ef8> 14765 +<4efb> <4efb> 898 +<4efd> <4efd> 901 +<4eff> <4eff> 887 +<4f00> <4f00> 6075 +<4f01> <4f01> 902 +<4f02> <4f02> 6079 +<4f03> <4f03> 14792 +<4f04> <4f04> 6083 +<4f05> <4f05> 6080 +<4f08> <4f08> 6077 +<4f09> <4f09> 888 +<4f0a> <4f0a> 890 +<4f0b> <4f0b> 903 +<4f0d> <4f0d> 892 +<4f0e> <4f0e> 6069 +<4f0f> <4f0f> 895 +<4f10> <4f11> 893 +<4f12> <4f12> 6085 +<4f13> <4f13> 6082 +<4f14> <4f14> 6073 +<4f15> <4f15> 891 +<4f18> <4f18> 6070 +<4f19> <4f19> 889 +<4f1a> <4f1a> 17724 +<4f1d> <4f1d> 6078 +<4f22> <4f22> 6081 +<4f28> <4f28> 17725 +<4f29> <4f29> 14782 +<4f2c> <4f2c> 6071 +<4f2d> <4f2d> 6191 +<4f2f> <4f2f> 1068 +<4f30> <4f30> 1055 +<4f32> <4f32> 14653 +<4f33> <4f33> 6192 +<4f34> <4f34> 1052 +<4f36> <4f36> 1070 +<4f37> <4f37> 17810 +<4f38> <4f38> 1060 +<4f39> <4f39> 16229 +<4f3a> <4f3a> 1059 +<4f3b> <4f3b> 6180 +<4f3c> <4f3c> 1063 +<4f3d> <4f3d> 1058 +<4f3e> <4f3e> 6185 +<4f3f> <4f3f> 6193 +<4f41> <4f41> 6189 +<4f42> <4f42> 14795 +<4f43> <4f43> 1061 +<4f45> <4f45> 15247 +<4f46> <4f46> 1064 +<4f47> <4f47> 1049 +<4f48> <4f48> 1073 +<4f49> <4f49> 6182 +<4f4b> <4f4b> 14772 +<4f4c> <4f4c> 6400 +<4f4d> <4f4d> 1047 +<4f4e> <4f4e> 1069 +<4f4f> <4f4f> 1048 +<4f50> <4f51> 1056 +<4f52> <4f52> 6187 +<4f53> <4f53> 6183 +<4f54> <4f54> 1062 +<4f55> <4f55> 1054 +<4f56> <4f56> 6179 +<4f57> <4f57> 1050 +<4f58> <4f58> 6190 +<4f59> <4f59> 1071 +<4f5a> <4f5a> 1074 +<4f5b> <4f5b> 1053 +<4f5c> <4f5c> 1066 +<4f5d> <4f5d> 1072 +<4f5e> <4f5e> 1051 +<4f5f> <4f5f> 6188 +<4f60> <4f60> 1067 +<4f61> <4f61> 6194 +<4f62> <4f62> 6181 +<4f63> <4f63> 1065 +<4f64> <4f64> 6184 +<4f67> <4f67> 6186 +<4f69> <4f69> 1341 +<4f6a> <4f6a> 6402 +<4f6b> <4f6b> 6414 +<4f6c> <4f6c> 1333 +<4f6e> <4f6e> 6415 +<4f6f> <4f6f> 1328 +<4f70> <4f70> 1338 +<4f72> <4f72> 15474 +<4f73> <4f73> 1331 +<4f74> <4f74> 6396 +<4f75> <4f75> 1339 +<4f76> <4f76> 6395 +<4f77> <4f77> 6399 +<4f78> <4f78> 6406 +endcidrange + +100 begincidrange +<4f79> <4f79> 6404 +<4f7a> <4f7a> 1347 +<4f7b> <4f7b> 1342 +<4f7c> <4f7c> 6390 +<4f7d> <4f7d> 6392 +<4f7e> <4f7e> 1344 +<4f7f> <4f7f> 1332 +<4f80> <4f80> 6393 +<4f81> <4f81> 6405 +<4f82> <4f82> 6412 +<4f83> <4f83> 1337 +<4f84> <4f84> 6398 +<4f85> <4f85> 6391 +<4f86> <4f86> 1336 +<4f87> <4f87> 6394 +<4f88> <4f88> 1340 +<4f89> <4f89> 6397 +<4f8a> <4f8a> 14773 +<4f8b> <4f8b> 1335 +<4f8d> <4f8d> 1330 +<4f8f> <4f8f> 1345 +<4f90> <4f90> 6407 +<4f91> <4f91> 1346 +<4f92> <4f92> 6411 +<4f94> <4f94> 6409 +<4f95> <4f95> 6413 +<4f96> <4f96> 1343 +<4f97> <4f97> 6401 +<4f98> <4f98> 6389 +<4f9a> <4f9a> 6403 +<4f9b> <4f9b> 1334 +<4f9c> <4f9c> 6408 +<4f9d> <4f9d> 1329 +<4f9e> <4f9e> 6410 +<4fa2> <4fa2> 14791 +<4fa8> <4fa8> 17726 +<4fab> <4fab> 16418 +<4fae> <4fae> 1716 +<4faf> <4faf> 1704 +<4fb0> <4fb0> 15690 +<4fb2> <4fb2> 6749 +<4fb3> <4fb3> 6757 +<4fb5> <4fb5> 1703 +<4fb6> <4fb6> 1711 +<4fb7> <4fb7> 1723 +<4fb9> <4fb9> 6763 +<4fba> <4fba> 6761 +<4fbb> <4fbb> 6756 +<4fbd> <4fbd> 17812 +<4fbf> <4fbf> 1705 +<4fc0> <4fc0> 6762 +<4fc1> <4fc1> 6752 +<4fc2> <4fc2> 1719 +<4fc3> <4fc3> 1710 +<4fc4> <4fc4> 1718 +<4fc5> <4fc5> 6747 +<4fc7> <4fc7> 6759 +<4fc8> <4fc8> 18152 +<4fc9> <4fc9> 6750 +<4fca> <4fca> 1714 +<4fcb> <4fcb> 6751 +<4fcc> <4fcc> 14799 +<4fcd> <4fcd> 6746 +<4fce> <4fce> 1721 +<4fcf> <4fcf> 1708 +<4fd0> <4fd0> 1717 +<4fd1> <4fd1> 1707 +<4fd3> <4fd3> 6748 +<4fd4> <4fd4> 6753 +<4fd6> <4fd6> 6760 +<4fd7> <4fd7> 1715 +<4fd8> <4fd8> 1712 +<4fd9> <4fd9> 6755 +<4fda> <4fda> 1720 +<4fdb> <4fdb> 6758 +<4fdc> <4fdc> 6754 +<4fdd> <4fdd> 1709 +<4fde> <4fde> 1722 +<4fdf> <4fdf> 1713 +<4fe0> <4fe0> 1706 +<4fe1> <4fe1> 1702 +<4fe4> <4fe4> 15462 +<4fe5> <4fe5> 14800 +<4fec> <4fec> 6764 +<4fee> <4fee> 2124 +<4fef> <4fef> 2102 +<4ff1> <4ff1> 2118 +<4ff2> <4ff2> 16168 +<4ff3> <4ff3> 2123 +<4ff4> <4ff4> 7204 +<4ff5> <4ff5> 7203 +<4ff6> <4ff7> 7208 +<4ff8> <4ff8> 2105 +<4ff9> <4ff9> 14259 +<4ffa> <4ffa> 2114 +<4ffd> <4ffd> 16166 +<4ffe> <4ffe> 2127 +<5000> <5000> 2115 +<5003> <5003> 17814 +<5005> <5005> 7197 +endcidrange + +100 begincidrange +<5006> <5006> 2108 +<5007> <5007> 7198 +<5008> <5008> 16420 +<5009> <5009> 2129 +<500b> <500b> 2120 +<500c> <500d> 2099 +<500e> <500e> 7217 +<500f> <500f> 2572 +<5011> <5011> 2113 +<5012> <5012> 2112 +<5013> <5013> 7199 +<5014> <5014> 2116 +<5015> <5015> 7749 +<5016> <5016> 2107 +<5017> <5017> 7210 +<5018> <5018> 2122 +<5019> <5019> 2121 +<501a> <501a> 2111 +<501b> <501b> 7202 +<501c> <501c> 7211 +<501e> <501e> 7196 +<501f> <501f> 2110 +<5020> <5020> 7212 +<5021> <5021> 2119 +<5022> <5022> 7200 +<5023> <5023> 2101 +<5025> <5025> 2104 +<5026> <5026> 2103 +<5027> <5027> 7213 +<5028> <5028> 2117 +<5029> <5029> 2106 +<502a> <502a> 2126 +<502b> <502b> 2128 +<502c> <502c> 7207 +<502d> <502d> 2125 +<502e> <502e> 14796 +<502f> <502f> 7215 +<5030> <5030> 7201 +<5031> <5031> 7216 +<5033> <5033> 7205 +<5034> <5034> 14608 +<5035> <5035> 7214 +<5037> <5037> 7206 +<503c> <503c> 2109 +<5040> <5040> 7757 +<5041> <5041> 7745 +<5043> <5043> 2560 +<5045> <5045> 7750 +<5046> <5046> 7756 +<5047> <5047> 2559 +<5048> <5048> 7743 +<5049> <5049> 2563 +<504a> <504a> 7747 +<504b> <504b> 7740 +<504c> <504c> 2561 +<504d> <504d> 7744 +<504e> <504e> 2566 +<504f> <504f> 2571 +<5051> <5051> 7761 +<5053> <5053> 7739 +<5055> <5055> 2567 +<5056> <5056> 16172 +<5057> <5057> 7760 +<5058> <5058> 14801 +<505a> <505a> 2562 +<505b> <505b> 7746 +<505c> <505c> 2558 +<505d> <505d> 7741 +<505e> <505e> 7737 +<505f> <505f> 7751 +<5060> <5060> 7738 +<5061> <5061> 7736 +<5062> <5062> 7748 +<5063> <5064> 7754 +<5065> <5065> 2564 +<5066> <5066> 15817 +<5068> <5068> 8376 +<5069> <5069> 7752 +<506a> <506a> 7735 +<506b> <506b> 7753 +<506c> <506c> 14797 +<506d> <506d> 2574 +<506e> <506e> 7758 +<506f> <506f> 2573 +<5070> <5070> 7734 +<5072> <5072> 7742 +<5073> <5073> 7759 +<5074> <5074> 2569 +<5075> <5075> 2568 +<5076> <5076> 2565 +<5077> <5077> 2570 +<507a> <507a> 2556 +<507d> <507d> 2557 +<5080> <5080> 3052 +<5081> <5081> 14798 +<5082> <5082> 8379 +<5083> <5083> 8372 +<5085> <5085> 3049 +<5087> <5087> 8380 +<5088> <5088> 17308 +endcidrange + +100 begincidrange +<508b> <508b> 8370 +<508c> <508c> 8373 +<508d> <508d> 3048 +<508e> <508e> 8374 +<5090> <5090> 16876 +<5091> <5091> 3051 +<5092> <5092> 8378 +<5094> <5094> 8368 +<5095> <5095> 8367 +<5096> <5096> 3053 +<5098> <5098> 3054 +<5099> <5099> 3050 +<509a> <509a> 3055 +<509b> <509b> 8366 +<509c> <509c> 8377 +<509d> <509d> 8375 +<509e> <509e> 8369 +<50a2> <50a2> 3047 +<50a3> <50a3> 8371 +<50a6> <50a6> 16191 +<50ac> <50ac> 3525 +<50ad> <50ad> 3519 +<50ae> <50ae> 9063 +<50af> <50af> 3528 +<50b0> <50b0> 9069 +<50b1> <50b1> 9072 +<50b2> <50b3> 3521 +<50b4> <50b4> 9066 +<50b5> <50b5> 3520 +<50b6> <50b6> 9075 +<50b7> <50b7> 3526 +<50b8> <50b8> 9076 +<50ba> <50ba> 9071 +<50bb> <50bb> 3527 +<50bd> <50bd> 9060 +<50be> <50be> 3524 +<50bf> <50bf> 9061 +<50c1> <50c1> 9070 +<50c2> <50c2> 9068 +<50c4> <50c4> 9064 +<50c5> <50c5> 3523 +<50c6> <50c6> 9062 +<50c7> <50c7> 3529 +<50c8> <50c8> 9067 +<50c9> <50c9> 9074 +<50ca> <50ca> 9065 +<50cb> <50cb> 9073 +<50cd> <50cd> 14789 +<50ce> <50ce> 3976 +<50cf> <50cf> 3973 +<50d0> <50d0> 14545 +<50d1> <50d1> 3974 +<50d3> <50d3> 9756 +<50d4> <50d4> 9748 +<50d5> <50d5> 3972 +<50d6> <50d6> 3969 +<50d7> <50d7> 9749 +<50d9> <50d9> 16334 +<50da> <50da> 3971 +<50db> <50db> 9752 +<50dd> <50dd> 9754 +<50de> <50de> 16433 +<50df> <50df> 15101 +<50e0> <50e0> 9761 +<50e1> <50e1> 16753 +<50e3> <50e3> 9760 +<50e4> <50e4> 9755 +<50e5> <50e5> 3968 +<50e6> <50e6> 9747 +<50e7> <50e7> 3966 +<50e8> <50e8> 9750 +<50e9> <50e9> 3977 +<50ea> <50ea> 9753 +<50ec> <50ec> 9757 +<50ed> <50ed> 3970 +<50ee> <50ee> 3967 +<50ef> <50ef> 9759 +<50f0> <50f0> 9758 +<50f1> <50f1> 3975 +<50f3> <50f3> 9751 +<50f4> <50f4> 15593 +<50f5> <50f5> 4357 +<50f6> <50f6> 10371 +<50f8> <50f8> 10368 +<50f9> <50f9> 4358 +<50fb> <50fb> 4356 +<50fc> <50fc> 14802 +<50fd> <50fd> 10375 +<50fe> <50fe> 10372 +<50ff> <50ff> 10365 +<5100> <5100> 4355 +<5101> <5101> 16434 +<5102> <5102> 4359 +<5103> <5103> 10366 +<5104> <5104> 4354 +<5105> <5105> 4362 +<5106> <5107> 10369 +<5108> <5109> 4360 +<510a> <510a> 10376 +<510b> <510c> 10373 +endcidrange + +100 begincidrange +<510d> <510d> 14790 +<510e> <510e> 16436 +<5110> <5110> 4749 +<5111> <5111> 11012 +<5112> <5112> 4746 +<5113> <5113> 11009 +<5114> <5114> 4748 +<5115> <5115> 4750 +<5117> <5117> 11010 +<5118> <5118> 4747 +<511a> <511a> 11011 +<511c> <511c> 11008 +<511f> <511f> 5045 +<5120> <5120> 11582 +<5121> <5121> 5046 +<5122> <5122> 11580 +<5124> <5124> 11581 +<5125> <5125> 11579 +<5126> <5126> 11578 +<5129> <5129> 11583 +<512a> <512a> 5044 +<512b> <512b> 14766 +<512d> <512e> 12047 +<5130> <5130> 10367 +<5131> <5131> 12046 +<5132> <5132> 5047 +<5133> <5133> 5493 +<5134> <5135> 12410 +<5137> <5138> 5736 +<5139> <5139> 12998 +<513a> <513a> 12997 +<513b> <513b> 5820 +<513c> <513c> 5819 +<513d> <513d> 13326 +<513f> <513f> 604 +<5140> <5140> 628 +<5141> <5141> 682 +<5143> <5143> 681 +<5144> <5144> 771 +<5145> <5145> 770 +<5146> <5146> 906 +<5147> <5147> 905 +<5148> <5148> 907 +<5149> <5149> 904 +<514b> <514b> 1076 +<514c> <514c> 1075 +<514d> <514d> 1077 +<5152> <5152> 1349 +<5154> <5154> 1348 +<5155> <5155> 1350 +<5156> <5156> 17306 +<5157> <5157> 1724 +<5159> <5159> 281 +<515a> <515a> 7218 +<515b> <515b> 282 +<515c> <515c> 2575 +<515d> <515d> 284 +<515e> <515e> 283 +<515f> <515f> 8381 +<5160> <5160> 16442 +<5161> <5161> 285 +<5162> <5162> 3978 +<5163> <5163> 286 +<5165> <5165> 605 +<5167> <5167> 683 +<5168> <5168> 908 +<5169> <5169> 1351 +<516a> <516a> 16444 +<516b> <516b> 606 +<516c> <516c> 686 +<516d> <516e> 684 +<5171> <5171> 909 +<5174> <5174> 17727 +<5175> <5175> 1078 +<5176> <5176> 1353 +<5177> <5177> 1352 +<5178> <5178> 1354 +<5179> <5179> 15054 +<517c> <517c> 2130 +<5180> <5180> 4751 +<5182> <5182> 541 +<5186> <5186> 17311 +<5187> <5187> 6009 +<5188> <5188> 14006 +<5189> <518a> 772 +<518d> <518d> 910 +<518f> <518f> 6195 +<5191> <5191> 1726 +<5192> <5192> 1725 +<5193> <5193> 7220 +<5194> <5194> 7219 +<5195> <5195> 2576 +<5196> <5196> 542 +<5197> <5197> 687 +<5198> <5198> 6016 +<519a> <519a> 16035 +<519c> <519c> 17728 +<519e> <519e> 6416 +<51a0> <51a0> 1727 +<51a2> <51a2> 2133 +endcidrange + +100 begincidrange +<51a4> <51a5> 2131 +<51a7> <51a7> 16038 +<51a8> <51a8> 14810 +<51aa> <51aa> 4752 +<51ab> <51ab> 543 +<51ac> <51ac> 774 +<51b0> <51b0> 911 +<51b1> <51b1> 6086 +<51b2> <51b2> 16456 +<51b3> <51b3> 16465 +<51b4> <51b4> 15740 +<51b5> <51b5> 16402 +<51b6> <51b7> 1079 +<51b8> <51b8> 16457 +<51b9> <51b9> 6196 +<51bc> <51bc> 6417 +<51bd> <51bd> 1355 +<51be> <51be> 6418 +<51c3> <51c3> 14811 +<51c4> <51c5> 7222 +<51c6> <51c6> 2136 +<51c7> <51c7> 16938 +<51c8> <51c8> 7224 +<51c9> <51c9> 16459 +<51ca> <51ca> 7221 +<51cb> <51cb> 2137 +<51cc> <51cc> 2135 +<51cd> <51cd> 2134 +<51ce> <51ce> 7225 +<51cf> <51cf> 16460 +<51d0> <51d0> 7762 +<51d1> <51d1> 16461 +<51d2> <51d2> 15789 +<51d3> <51d3> 16463 +<51d4> <51d4> 8382 +<51d7> <51d7> 9077 +<51d8> <51d8> 9762 +<51db> <51db> 17818 +<51dc> <51dc> 4363 +<51dd> <51dd> 4753 +<51de> <51de> 11013 +<51df> <51df> 16975 +<51e0> <51e0> 607 +<51e1> <51e1> 621 +<51e2> <51e2> 16466 +<51e4> <51e4> 17729 +<51ed> <51ed> 16468 +<51f0> <51f0> 2577 +<51f1> <51f1> 3057 +<51f3> <51f3> 3979 +<51f4> <51f4> 16760 +<51f5> <51f5> 5998 +<51f6> <51f6> 688 +<51f8> <51f8> 777 +<51f9> <51fa> 775 +<51fc> <51fc> 17819 +<51fd> <51fd> 1356 +<51fe> <51fe> 16138 +<5200> <5201> 608 +<5202> <5202> 14003 +<5203> <5203> 629 +<5205> <5205> 17313 +<5206> <5208> 689 +<5209> <5209> 6039 +<520a> <520a> 778 +<520b> <520b> 16473 +<520c> <520c> 6038 +<520e> <520e> 915 +<5210> <5210> 6088 +<5211> <5212> 913 +<5213> <5213> 6087 +<5216> <5216> 916 +<5217> <5217> 912 +<521c> <521c> 6197 +<521d> <521d> 1675 +<521e> <521e> 6198 +<521f> <521f> 16224 +<5220> <5220> 18736 +<5221> <5221> 6199 +<5224> <5224> 1082 +<5225> <5225> 1081 +<5226> <5226> 16474 +<5227> <5227> 17314 +<5228> <5228> 1085 +<5229> <522a> 1083 +<522e> <522e> 1362 +<5230> <5230> 1361 +<5231> <5231> 6423 +<5232> <5233> 6420 +<5234> <5234> 16123 +<5235> <5235> 6419 +<5236> <5236> 1363 +<5237> <5237> 1359 +<5238> <5238> 1358 +<523a> <523a> 1360 +<523b> <523b> 1357 +<523c> <523c> 16475 +<5241> <5241> 1364 +<5243> <5243> 1729 +<5244> <5244> 6765 +endcidrange + +100 begincidrange +<5246> <5246> 6422 +<5247> <5247> 1734 +<5249> <5249> 6766 +<524a> <524a> 1730 +<524b> <524b> 1733 +<524c> <524c> 1732 +<524d> <524d> 1731 +<524e> <524e> 1728 +<5252> <5252> 7228 +<5254> <5254> 2140 +<5255> <5255> 7231 +<5256> <5256> 2138 +<5257> <5257> 16477 +<5259> <5259> 14820 +<525a> <525a> 7227 +<525b> <525b> 2141 +<525c> <525c> 2139 +<525d> <525d> 2142 +<525e> <525f> 7229 +<5260> <5260> 16169 +<5261> <5261> 7226 +<5262> <5262> 7232 +<5268> <5268> 17945 +<5269> <5269> 3061 +<526a> <526a> 2578 +<526b> <526b> 7763 +<526c> <526c> 7765 +<526d> <526d> 7764 +<526e> <526e> 7766 +<526f> <526f> 2579 +<5272> <5272> 3058 +<5273> <5273> 16195 +<5274> <5275> 3059 +<5277> <5277> 3531 +<5278> <5278> 9079 +<5279> <5279> 17315 +<527a> <527a> 9078 +<527b> <527c> 9080 +<527d> <527d> 3532 +<527f> <527f> 3530 +<5280> <5281> 9763 +<5282> <5282> 3981 +<5283> <5283> 3980 +<5284> <5284> 10102 +<5287> <5289> 4364 +<528a> <528a> 4368 +<528b> <528c> 10377 +<528d> <528d> 4367 +<528f> <528f> 15807 +<5290> <5290> 17821 +<5291> <5291> 4754 +<5293> <5293> 4755 +<5294> <5294> 16478 +<5296> <5296> 12412 +<5297> <5297> 13000 +<5298> <5298> 12999 +<5299> <5299> 13327 +<529a> <529a> 16232 +<529b> <529b> 610 +<529f> <529f> 780 +<52a0> <52a0> 779 +<52a1> <52a1> 17730 +<52a3> <52a3> 917 +<52a4> <52a4> 14821 +<52a6> <52a6> 6089 +<52a8> <52a8> 17731 +<52a9> <52aa> 1087 +<52ab> <52ab> 1086 +<52ac> <52ac> 1089 +<52ad> <52ae> 6200 +<52b5> <52b5> 16476 +<52b9> <52b9> 16479 +<52bb> <52bb> 1366 +<52bc> <52bc> 6424 +<52be> <52be> 1365 +<52c0> <52c0> 6767 +<52c1> <52c1> 1738 +<52c2> <52c2> 6768 +<52c3> <52c3> 1737 +<52c5> <52c5> 16480 +<52c7> <52c7> 1735 +<52c9> <52c9> 1736 +<52cc> <52cc> 16097 +<52cd> <52cd> 7233 +<52d0> <52d0> 16649 +<52d1> <52d1> 16170 +<52d2> <52d2> 2580 +<52d3> <52d3> 7768 +<52d5> <52d5> 2583 +<52d6> <52d6> 7767 +<52d7> <52d7> 2767 +<52d8> <52d8> 2582 +<52d9> <52d9> 2581 +<52db> <52db> 3064 +<52dd> <52dd> 3063 +<52de> <52de> 3062 +<52df> <52df> 3533 +<52e0> <52e0> 16483 +<52e1> <52e1> 14823 +<52e2> <52e3> 3536 +endcidrange + +100 begincidrange +<52e4> <52e4> 3535 +<52e6> <52e6> 3534 +<52e9> <52e9> 9765 +<52eb> <52eb> 9766 +<52ef> <52ef> 10380 +<52f0> <52f0> 4369 +<52f1> <52f1> 10379 +<52f3> <52f3> 4756 +<52f4> <52f4> 11584 +<52f5> <52f5> 5048 +<52f7> <52f7> 12413 +<52f8> <52f8> 5641 +<52f9> <52f9> 544 +<52fa> <52fa> 630 +<52fb> <52fb> 692 +<52fc> <52fc> 6017 +<52fe> <52ff> 693 +<5301> <5301> 15737 +<5305> <5306> 781 +<5308> <5308> 918 +<5309> <5309> 6202 +<530a> <530b> 6425 +<530d> <530d> 1739 +<530e> <530e> 7234 +<530f> <530f> 2585 +<5310> <5310> 2584 +<5311> <5311> 8384 +<5312> <5312> 8383 +<5315> <5315> 611 +<5316> <5316> 695 +<5317> <5317> 783 +<5319> <5319> 2586 +<531a> <531a> 5999 +<531c> <531c> 6040 +<531d> <531d> 784 +<531f> <531f> 6091 +<5320> <5320> 920 +<5321> <5321> 919 +<5322> <5322> 6090 +<5323> <5323> 1090 +<5327> <5327> 17822 +<532a> <532a> 2143 +<532c> <532c> 16182 +<532d> <532d> 7769 +<532f> <532f> 3538 +<5330> <5330> 9767 +<5331> <5331> 3982 +<5332> <5332> 16336 +<5333> <5333> 16493 +<5334> <5334> 11014 +<5337> <5337> 12743 +<5338> <5338> 545 +<5339> <5339> 696 +<533b> <533b> 17732 +<533c> <533c> 6427 +<533d> <533d> 6769 +<533e> <533e> 2589 +<533f> <5340> 2587 +<5341> <5341> 612 +<5342> <5342> 18759 +<5343> <5343> 631 +<5344> <5344> 363 +<5345> <5345> 699 +<5347> <5347> 698 +<5348> <5348> 697 +<5349> <5349> 787 +<534a> <534a> 786 +<534c> <534c> 6041 +<534d> <534d> 6092 +<534e> <534e> 17733 +<5351> <5351> 1370 +<5352> <5352> 1367 +<5353> <5353> 1369 +<5354> <5354> 1368 +<5357> <5357> 1740 +<535a> <535a> 3065 +<535c> <535c> 613 +<535d> <535d> 17665 +<535e> <535e> 700 +<535f> <535f> 17319 +<5360> <5360> 789 +<5361> <5361> 788 +<5363> <5363> 6203 +<5364> <5364> 18442 +<5366> <5366> 1371 +<5367> <5367> 16077 +<5369> <5369> 546 +<536c> <536c> 6018 +<536d> <536d> 16506 +<536e> <536e> 791 +<536f> <536f> 790 +<5370> <5371> 921 +<5372> <5372> 6204 +<5373> <5373> 1091 +<5374> <5374> 16507 +<5375> <5375> 1092 +<5377> <5379> 1372 +<537b> <537b> 1741 +<537c> <537c> 6770 +<537d> <537d> 18689 +endcidrange + +100 begincidrange +<537e> <537e> 16509 +<537f> <537f> 2144 +<5382> <5382> 6000 +<5384> <5384> 701 +<538a> <538a> 6093 +<538e> <538f> 6205 +<5392> <5392> 6428 +<5393> <5393> 16514 +<5394> <5394> 6429 +<5396> <5396> 6772 +<5397> <5397> 6771 +<5398> <5398> 6774 +<5399> <5399> 6773 +<539a> <539a> 1742 +<539c> <539c> 7770 +<539d> <539d> 2146 +<539e> <539e> 7235 +<539f> <539f> 2145 +<53a0> <53a0> 16516 +<53a2> <53a2> 15915 +<53a4> <53a4> 8385 +<53a5> <53a5> 3066 +<53a6> <53a6> 16699 +<53a7> <53a7> 8386 +<53a8> <53a8> 16702 +<53a9> <53a9> 17824 +<53aa> <53aa> 16326 +<53ab> <53ab> 16517 +<53ac> <53ac> 9768 +<53ad> <53ad> 3983 +<53ae> <53ae> 16518 +<53b0> <53b0> 17826 +<53b2> <53b2> 4370 +<53b4> <53b4> 12414 +<53b6> <53b6> 547 +<53b9> <53b9> 6019 +<53bb> <53bb> 792 +<53c1> <53c1> 16523 +<53c2> <53c2> 17318 +<53c3> <53c3> 2590 +<53c5> <53c5> 16524 +<53c8> <53c8> 614 +<53c9> <53c9> 632 +<53ca> <53ca> 703 +<53cb> <53cb> 702 +<53cc> <53cc> 14518 +<53cd> <53cd> 704 +<53d0> <53d0> 14842 +<53d1> <53d1> 17734 +<53d2> <53d2> 15933 +<53d4> <53d4> 1376 +<53d6> <53d6> 1375 +<53d7> <53d7> 1377 +<53d8> <53d8> 17735 +<53d9> <53d9> 16528 +<53da> <53da> 16185 +<53db> <53db> 1743 +<53df> <53df> 2147 +<53e0> <53e0> 16531 +<53e1> <53e1> 11015 +<53e2> <53e2> 5321 +<53e3> <53e3> 633 +<53e4> <53e4> 794 +<53e5> <53e5> 809 +<53e6> <53e6> 804 +<53e8> <53e8> 799 +<53e9> <53e9> 798 +<53ea> <53ea> 805 +<53eb> <53eb> 803 +<53ec> <53ec> 796 +<53ed> <53ed> 810 +<53ee> <53ee> 797 +<53ef> <53ef> 793 +<53f0> <53f0> 808 +<53f1> <53f1> 807 +<53f2> <53f2> 806 +<53f3> <53f3> 795 +<53f5> <53f5> 802 +<53f6> <53f6> 16534 +<53f7> <53f7> 14344 +<53f8> <53f8> 801 +<53fb> <53fb> 811 +<53fc> <53fc> 800 +<53fe> <53fe> 16577 +<5401> <5401> 928 +<5403> <5403> 934 +<5404> <5404> 930 +<5406> <5406> 936 +<5407> <5407> 6094 +<5408> <5408> 933 +<5409> <5409> 923 +<540a> <540a> 926 +<540b> <540b> 929 +<540c> <540c> 925 +<540d> <540d> 932 +<540e> <540e> 935 +<540f> <540f> 924 +<5410> <5410> 927 +<5411> <5411> 931 +<5412> <5412> 937 +endcidrange + +100 begincidrange +<5413> <5413> 16536 +<5414> <5414> 15479 +<5416> <5416> 15999 +<5418> <5418> 6215 +<5419> <5419> 6212 +<541a> <541a> 15972 +<541b> <541b> 1105 +<541c> <541c> 6213 +<541d> <541d> 1093 +<541e> <541e> 1095 +<541f> <541f> 1119 +<5420> <5420> 1114 +<5421> <5421> 16899 +<5423> <5423> 17827 +<5424> <5424> 6220 +<5425> <5425> 6214 +<5426> <5426> 1097 +<5427> <5427> 1099 +<5428> <5428> 6219 +<5429> <5429> 1106 +<542a> <542a> 6209 +<542b> <542b> 1118 +<542c> <542c> 1120 +<542d> <542d> 1094 +<542e> <542e> 1111 +<542f> <542f> 16556 +<5430> <5430> 6207 +<5431> <5431> 1117 +<5432> <5432> 15989 +<5433> <5433> 1102 +<5435> <5436> 1112 +<5437> <5437> 6208 +<5438> <5438> 1110 +<5439> <5439> 1108 +<543b> <543b> 1109 +<543c> <543c> 1115 +<543d> <543d> 6216 +<543e> <543e> 1096 +<5440> <5440> 1116 +<5441> <5441> 6218 +<5442> <5442> 1104 +<5443> <5443> 1101 +<5445> <5445> 6211 +<5446> <5446> 1100 +<5447> <5447> 6221 +<5448> <5448> 1103 +<544a> <544a> 1107 +<544b> <544b> 16081 +<544d> <544d> 16039 +<544e> <544e> 1098 +<544f> <544f> 6217 +<5454> <5454> 6210 +<5460> <5460> 6446 +<5461> <5461> 6445 +<5462> <5462> 1395 +<5463> <5463> 6448 +<5464> <5464> 6450 +<5465> <5465> 6439 +<5466> <5466> 6442 +<5467> <5467> 6449 +<5468> <5468> 1396 +<5469> <5469> 16178 +<546a> <546a> 15747 +<546b> <546b> 6436 +<546c> <546c> 6440 +<546d> <546d> 16541 +<546f> <546f> 6444 +<5470> <5470> 6789 +<5471> <5471> 1391 +<5472> <5472> 6793 +<5473> <5473> 1378 +<5474> <5474> 6441 +<5475> <5475> 1379 +<5476> <5476> 1392 +<5477> <5477> 1385 +<5478> <5478> 1381 +<547a> <547a> 6437 +<547b> <547b> 1384 +<547c> <547c> 1389 +<547d> <547d> 1398 +<547e> <547e> 6438 +<547f> <547f> 6431 +<5480> <5480> 1383 +<5481> <5481> 6432 +<5482> <5482> 6434 +<5484> <5484> 1386 +<5485> <5485> 18137 +<5486> <5486> 1388 +<5487> <5487> 6430 +<5488> <5488> 6435 +<548b> <548b> 1397 +<548c> <548c> 1393 +<548d> <548d> 6443 +<548e> <548e> 1399 +<548f> <548f> 16545 +<5490> <5490> 1390 +<5491> <5491> 6433 +<5492> <5492> 1387 +<5493> <5493> 17831 +<5494> <5494> 16024 +endcidrange + +100 begincidrange +<5495> <5495> 1382 +<5496> <5496> 1380 +<5497> <5497> 16010 +<5498> <5498> 6447 +<549a> <549a> 1394 +<549c> <549c> 16230 +<549e> <549e> 18413 +<54a0> <54a0> 6788 +<54a1> <54a1> 6776 +<54a2> <54a2> 6791 +<54a3> <54a3> 17832 +<54a4> <54a4> 16546 +<54a5> <54a5> 6778 +<54a6> <54a6> 1750 +<54a7> <54a7> 1764 +<54a8> <54a8> 1746 +<54a9> <54a9> 1763 +<54aa> <54aa> 1755 +<54ab> <54ab> 1760 +<54ac> <54ac> 1744 +<54ad> <54ad> 6777 +<54ae> <54ae> 6783 +<54af> <54af> 1759 +<54b0> <54b0> 6795 +<54b1> <54b1> 1761 +<54b2> <54b2> 14148 +<54b3> <54b3> 1751 +<54b4> <54b4> 17833 +<54b6> <54b6> 6785 +<54b7> <54b7> 6782 +<54b8> <54b8> 1749 +<54b9> <54b9> 17834 +<54ba> <54ba> 6775 +<54bb> <54bb> 1762 +<54bc> <54bc> 6790 +<54bd> <54bd> 1754 +<54be> <54be> 6792 +<54bf> <54bf> 1765 +<54c0> <54c0> 1745 +<54c1> <54c1> 1756 +<54c2> <54c2> 1753 +<54c3> <54c3> 6780 +<54c4> <54c4> 1757 +<54c5> <54c6> 6786 +<54c7> <54c7> 1752 +<54c8> <54c8> 1758 +<54c9> <54c9> 1748 +<54cb> <54cb> 14755 +<54cc> <54cc> 17320 +<54cd> <54cd> 14848 +<54ce> <54ce> 1747 +<54cf> <54cf> 6779 +<54d0> <54d0> 17835 +<54d6> <54d6> 6784 +<54da> <54da> 18723 +<54de> <54de> 6794 +<54e0> <54e0> 7255 +<54e1> <54e1> 2160 +<54e2> <54e2> 7237 +<54e3> <54e3> 17217 +<54e4> <54e4> 7242 +<54e5> <54e5> 2153 +<54e6> <54e6> 2164 +<54e7> <54e7> 7240 +<54e8> <54e8> 2148 +<54e9> <54e9> 2158 +<54ea> <54ea> 2163 +<54eb> <54eb> 7247 +<54ed> <54ed> 2159 +<54ee> <54ee> 2162 +<54ef> <54ef> 17836 +<54f1> <54f1> 7250 +<54f2> <54f2> 2154 +<54f3> <54f3> 7241 +<54f7> <54f8> 7253 +<54fa> <54fa> 2156 +<54fb> <54fb> 7252 +<54fc> <54fc> 2152 +<54fd> <54fd> 2167 +<54ff> <54ff> 7244 +<5501> <5501> 2150 +<5502> <5502> 15564 +<5503> <5503> 7257 +<5504> <5504> 7245 +<5505> <5505> 7249 +<5506> <5506> 2155 +<5507> <5507> 2166 +<5508> <5508> 7246 +<5509> <5509> 2161 +<550a> <550a> 7251 +<550b> <550b> 7258 +<550c> <550c> 7785 +<550d> <550d> 14963 +<550e> <550e> 7256 +<550f> <550f> 2168 +<5510> <5510> 2149 +<5511> <5511> 7248 +<5512> <5512> 7239 +<5513> <5513> 16041 +<5514> <5514> 2157 +endcidrange + +100 begincidrange +<5517> <5517> 7238 +<5518> <5518> 17837 +<551a> <551a> 7243 +<551e> <551e> 16040 +<5523> <5523> 17838 +<5525> <5525> 17161 +<5526> <5526> 7236 +<5527> <5527> 2165 +<5528> <5528> 17839 +<552a> <552a> 7777 +<552b> <552b> 16538 +<552c> <552c> 2609 +<552d> <552d> 7791 +<552e> <552e> 2607 +<552f> <552f> 2604 +<5530> <5530> 7782 +<5531> <5531> 2600 +<5532> <5532> 7786 +<5533> <5533> 2611 +<5534> <5534> 7776 +<5535> <5535> 7781 +<5536> <5536> 7780 +<5537> <5537> 2151 +<5538> <5538> 2606 +<5539> <5539> 7789 +<553b> <553b> 7792 +<553c> <553c> 7773 +<553e> <553e> 3084 +<553f> <553f> 17321 +<5540> <5540> 7793 +<5541> <5541> 2612 +<5543> <5543> 2598 +<5544> <5544> 2595 +<5545> <5545> 7784 +<5546> <5546> 2592 +<5547> <5547> 16554 +<5548> <5548> 7790 +<5549> <5549> 16488 +<554a> <554a> 2599 +<554b> <554b> 7794 +<554d> <554d> 7774 +<554e> <554e> 7788 +<554f> <554f> 2602 +<5550> <5550> 7775 +<5551> <5551> 7778 +<5552> <5552> 7783 +<5553> <5553> 17326 +<5555> <5555> 2603 +<5556> <5556> 2601 +<5557> <5557> 2613 +<555c> <555c> 2608 +<555d> <555d> 16544 +<555e> <555e> 2596 +<555f> <555f> 2748 +<5561> <5561> 2597 +<5562> <5562> 7779 +<5563> <5563> 2610 +<5564> <5564> 2605 +<5565> <5565> 7787 +<5566> <5566> 2594 +<5569> <5569> 16031 +<556a> <556a> 2593 +<556b> <556b> 15150 +<5571> <5571> 15302 +<5572> <5572> 16011 +<5573> <5573> 16164 +<5575> <5576> 7771 +<5577> <5577> 8391 +<5579> <5579> 17245 +<557b> <557b> 3067 +<557c> <557c> 3070 +<557d> <557d> 8402 +<557e> <557e> 3090 +<557f> <557f> 8405 +<5580> <5580> 3068 +<5581> <5581> 8398 +<5582> <5582> 3074 +<5583> <5583> 3080 +<5584> <5584> 3355 +<5586> <5586> 16558 +<5587> <5587> 3078 +<5588> <5588> 8395 +<5589> <5589> 3091 +<558a> <558a> 3071 +<558b> <558b> 3079 +<558c> <558c> 8403 +<558d> <558d> 9095 +<558e> <558e> 8408 +<558f> <558f> 8396 +<5590> <5590> 17166 +<5591> <5591> 8387 +<5592> <5592> 8400 +<5593> <5593> 8394 +<5594> <5594> 3077 +<5595> <5595> 8406 +<5598> <5598> 3073 +<5599> <5599> 3093 +<559a> <559a> 3086 +<559c> <559c> 3075 +<559d> <559d> 3072 +endcidrange + +100 begincidrange +<559f> <559f> 3083 +<55a1> <55a1> 8407 +<55a2> <55a2> 8393 +<55a3> <55a3> 8399 +<55a4> <55a4> 8401 +<55a5> <55a5> 8389 +<55a6> <55a6> 8404 +<55a7> <55a7> 3069 +<55a8> <55a8> 8388 +<55a9> <55a9> 16559 +<55aa> <55aa> 3076 +<55ab> <55ab> 3092 +<55ac> <55ac> 3088 +<55ad> <55ad> 8390 +<55ae> <55ae> 3082 +<55b0> <55b0> 14581 +<55b1> <55b1> 3089 +<55b2> <55b2> 3085 +<55b3> <55b3> 3081 +<55b4> <55b4> 14846 +<55b5> <55b5> 8397 +<55b9> <55b9> 17322 +<55ba> <55ba> 16009 +<55bb> <55bb> 3087 +<55bc> <55bc> 15811 +<55bf> <55bf> 9093 +<55c0> <55c0> 9089 +<55c1> <55c1> 15951 +<55c2> <55c2> 9104 +<55c3> <55c3> 9082 +<55c4> <55c4> 9091 +<55c5> <55c6> 3552 +<55c7> <55c7> 3545 +<55c8> <55c8> 9100 +<55c9> <55c9> 3555 +<55ca> <55ca> 9087 +<55cb> <55cb> 9086 +<55cc> <55cc> 9084 +<55cd> <55cd> 9102 +<55ce> <55ce> 3543 +<55cf> <55cf> 9096 +<55d0> <55d0> 9085 +<55d1> <55d1> 3546 +<55d2> <55d2> 9094 +<55d3> <55d3> 3541 +<55d4> <55d4> 9090 +<55d5> <55d5> 9097 +<55d6> <55d6> 9099 +<55d7> <55d7> 17843 +<55d8> <55d8> 17323 +<55d9> <55d9> 9103 +<55da> <55da> 3550 +<55db> <55db> 9083 +<55dc> <55dc> 3544 +<55dd> <55dd> 9088 +<55de> <55de> 16020 +<55df> <55df> 3539 +<55e1> <55e1> 3551 +<55e2> <55e2> 9098 +<55e3> <55e4> 3547 +<55e5> <55e5> 3554 +<55e6> <55e6> 3542 +<55e7> <55e7> 287 +<55e8> <55e8> 3540 +<55e9> <55e9> 9092 +<55ea> <55ea> 15996 +<55ec> <55ec> 14290 +<55ef> <55ef> 3549 +<55f0> <55f0> 16008 +<55f1> <55f1> 16003 +<55f2> <55f2> 9101 +<55f5> <55f5> 18310 +<55f6> <55f6> 3999 +<55f7> <55f7> 3994 +<55f9> <55f9> 9783 +<55fa> <55fa> 9779 +<55fb> <55fb> 17958 +<55fc> <55fc> 9773 +<55fd> <55fd> 3988 +<55fe> <55fe> 3984 +<55ff> <55ff> 9782 +<5600> <5600> 3985 +<5601> <5601> 9776 +<5602> <5602> 9778 +<5604> <5604> 9781 +<5605> <5605> 16002 +<5606> <5606> 3990 +<5608> <5608> 3997 +<5609> <5609> 3991 +<560c> <560c> 9771 +<560d> <560e> 3992 +<560f> <560f> 9774 +<5610> <5610> 3998 +<5611> <5611> 16205 +<5612> <5612> 9772 +<5613> <5613> 9777 +<5614> <5614> 3989 +<5615> <5615> 9770 +<5616> <5616> 3995 +<5617> <5617> 3987 +endcidrange + +100 begincidrange +<561b> <561b> 3986 +<561c> <561c> 9775 +<561d> <561d> 9780 +<561e> <561e> 15976 +<561f> <561f> 3996 +<5620> <5620> 16253 +<5621> <5621> 17325 +<5622> <5622> 15975 +<5623> <5623> 18183 +<5625> <5625> 15992 +<5627> <5627> 9769 +<5629> <5629> 4377 +<562a> <562a> 10397 +<562c> <562c> 10394 +<562d> <562d> 15971 +<562e> <562e> 4371 +<562f> <5630> 4383 +<5632> <5632> 4374 +<5633> <5633> 10392 +<5634> <5634> 4376 +<5635> <5635> 10384 +<5636> <5636> 4382 +<5637> <5637> 16567 +<5638> <5638> 10396 +<5639> <5639> 4373 +<563a> <563a> 10398 +<563b> <563b> 4372 +<563d> <563d> 10393 +<563e> <563e> 10395 +<563f> <563f> 4375 +<5640> <5640> 10391 +<5641> <5641> 10385 +<5642> <5642> 10382 +<5643> <5643> 15998 +<5645> <5645> 8392 +<5646> <5646> 10388 +<5648> <5648> 10381 +<5649> <5649> 10387 +<564a> <564a> 10386 +<564c> <564c> 10383 +<564d> <564d> 16572 +<564e> <564e> 4379 +<564f> <564f> 16573 +<5650> <5650> 18383 +<5652> <5652> 17858 +<5653> <5653> 4378 +<5654> <5654> 17327 +<5657> <5657> 4380 +<5658> <5658> 10389 +<5659> <5659> 4757 +<565a> <565a> 10390 +<565d> <565d> 16121 +<565e> <565e> 11024 +<5660> <5660> 11017 +<5661> <5661> 14354 +<5662> <5662> 4769 +<5663> <5663> 11021 +<5664> <5664> 4761 +<5665> <5665> 4765 +<5666> <5666> 11020 +<5668> <5668> 4764 +<5669> <5669> 4760 +<566a> <566a> 4763 +<566b> <566b> 4758 +<566c> <566c> 4768 +<566d> <566d> 11022 +<566e> <566e> 11018 +<566f> <566f> 4767 +<5670> <5670> 11016 +<5671> <5671> 4766 +<5672> <5672> 11023 +<5673> <5673> 11019 +<5674> <5674> 4381 +<5676> <5676> 4770 +<5677> <5677> 11025 +<5678> <5678> 4762 +<5679> <5679> 4759 +<567a> <567a> 15749 +<567b> <567b> 16055 +<567c> <567c> 16109 +<567e> <567e> 11591 +<567f> <567f> 11593 +<5680> <5680> 5050 +<5681> <5681> 11594 +<5682> <5682> 11592 +<5683> <5683> 11590 +<5684> <5684> 11589 +<5685> <5685> 5052 +<5686> <5686> 11588 +<5687> <5687> 5053 +<5689> <5689> 17960 +<568a> <568a> 14665 +<568b> <568b> 15948 +<568c> <568d> 11586 +<568e> <568e> 5049 +<568f> <568f> 5054 +<5690> <5690> 5051 +<5692> <5692> 14758 +<5693> <5693> 11585 +<5695> <5695> 5322 +endcidrange + +100 begincidrange +<5697> <5697> 12051 +<5698> <5698> 12049 +<5699> <5699> 12054 +<569a> <569a> 12052 +<569c> <569c> 12050 +<569d> <569d> 12053 +<569e> <569e> 14756 +<569f> <569f> 14664 +<56a1> <56a1> 17259 +<56a4> <56a4> 15560 +<56a5> <56a5> 5494 +<56a6> <56a7> 12417 +<56a8> <56a8> 5495 +<56aa> <56aa> 12419 +<56ab> <56ab> 12415 +<56ac> <56ac> 12420 +<56ad> <56ad> 12416 +<56ae> <56ae> 5323 +<56af> <56af> 17911 +<56b1> <56b1> 17983 +<56b2> <56b2> 12744 +<56b3> <56b3> 12746 +<56b4> <56b4> 5644 +<56b5> <56b5> 12745 +<56b6> <56b6> 5643 +<56b7> <56b7> 5642 +<56b9> <56b9> 18543 +<56bc> <56bc> 5645 +<56bd> <56be> 13002 +<56bf> <56bf> 15965 +<56c0> <56c0> 5739 +<56c1> <56c1> 5738 +<56c2> <56c2> 5740 +<56c3> <56c3> 13001 +<56c5> <56c5> 13177 +<56c6> <56c6> 13176 +<56c8> <56c8> 5821 +<56c9> <56c9> 5823 +<56ca> <56ca> 5822 +<56cb> <56cb> 13178 +<56cc> <56cc> 5878 +<56cd> <56cd> 13441 +<56d1> <56d1> 5919 +<56d3> <56d3> 13440 +<56d4> <56d4> 13513 +<56d6> <56d6> 18570 +<56d7> <56d7> 6005 +<56da> <56da> 813 +<56db> <56db> 812 +<56dd> <56dd> 940 +<56de> <56de> 939 +<56df> <56df> 6096 +<56e0> <56e0> 938 +<56e1> <56e1> 6095 +<56e2> <56e2> 17736 +<56e4> <56e4> 1123 +<56e5> <56e5> 6224 +<56e7> <56e7> 6223 +<56ea> <56ea> 1121 +<56eb> <56eb> 1124 +<56ed> <56ed> 16580 +<56ee> <56ee> 6222 +<56ef> <56ef> 16579 +<56f0> <56f0> 1122 +<56f1> <56f1> 16575 +<56f7> <56f7> 6451 +<56f9> <56f9> 6452 +<56fa> <56fa> 1400 +<56fd> <56fd> 15716 +<56ff> <56ff> 1766 +<5700> <5700> 16578 +<5701> <5702> 7259 +<5703> <5704> 2169 +<5707> <5707> 7796 +<5708> <5708> 2614 +<5709> <5709> 2616 +<570a> <570a> 7795 +<570b> <570b> 2615 +<570c> <570c> 8409 +<570d> <570d> 3094 +<5712> <5713> 3556 +<5714> <5714> 9105 +<5715> <5715> 15926 +<5716> <5716> 4001 +<5718> <5718> 4000 +<571a> <571a> 10399 +<571b> <571b> 11027 +<571c> <571c> 11026 +<571d> <571d> 14850 +<571e> <571e> 13573 +<571f> <571f> 634 +<5720> <5720> 6020 +<5722> <5723> 6042 +<5728> <5728> 943 +<5729> <5729> 947 +<572a> <572a> 6098 +<572c> <572c> 945 +<572d> <572d> 944 +<572e> <572e> 6097 +<572f> <572f> 946 +endcidrange + +100 begincidrange +<5730> <5730> 942 +<5732> <5732> 15097 +<5733> <5733> 941 +<5734> <5734> 6099 +<573b> <573b> 1134 +<573e> <573e> 1131 +<573f> <573f> 18517 +<5740> <5740> 1127 +<5741> <5741> 6225 +<5742> <5742> 16588 +<5743> <5743> 16606 +<5745> <5745> 6226 +<5746> <5746> 16584 +<5747> <5747> 1129 +<5749> <5749> 6228 +<574a> <574a> 1125 +<574b> <574b> 6229 +<574c> <574c> 6227 +<574d> <574d> 1128 +<574e> <574e> 1130 +<574f> <574f> 1133 +<5750> <5750> 1132 +<5751> <5751> 1126 +<5752> <5752> 6230 +<5754> <5754> 18309 +<5757> <5757> 18406 +<575b> <575b> 14722 +<575f> <575f> 16319 +<5761> <5761> 1405 +<5762> <5762> 6465 +<5764> <5764> 1407 +<5766> <5766> 1406 +<5767> <5767> 16171 +<5768> <5768> 6466 +<5769> <5769> 1404 +<576a> <576a> 1403 +<576b> <576b> 6456 +<576d> <576d> 6455 +<576f> <576f> 6453 +<5770> <5770> 6458 +<5771> <5771> 6457 +<5772> <5772> 6454 +<5773> <5774> 6463 +<5775> <5775> 6461 +<5776> <5776> 6459 +<5777> <5777> 1402 +<577a> <577a> 16223 +<577b> <577b> 6462 +<577c> <577c> 1408 +<577d> <577d> 6467 +<577e> <577e> 18140 +<577f> <577f> 14855 +<5780> <5780> 6460 +<5782> <5782> 1767 +<5783> <5783> 1401 +<5788> <5788> 18507 +<578a> <578a> 15483 +<578b> <578b> 1768 +<578c> <578c> 6800 +<578d> <578d> 14854 +<578f> <578f> 6806 +<5790> <5790> 16742 +<5793> <5793> 1774 +<5794> <5794> 6804 +<5795> <5795> 6810 +<5797> <5797> 6801 +<5798> <5798> 6805 +<5799> <5799> 6807 +<579a> <579a> 6809 +<579b> <579b> 6803 +<579c> <579c> 17928 +<579d> <579d> 6802 +<579e> <579f> 6797 +<57a0> <57a0> 1769 +<57a1> <57a1> 18532 +<57a2> <57a2> 1771 +<57a3> <57a3> 1770 +<57a4> <57a4> 6799 +<57a5> <57a5> 6808 +<57a7> <57a7> 18708 +<57aa> <57aa> 18693 +<57ae> <57ae> 1773 +<57b4> <57b4> 18241 +<57b5> <57b5> 6796 +<57b6> <57b6> 7270 +<57b8> <57b8> 7269 +<57b9> <57b9> 7274 +<57ba> <57ba> 7265 +<57bb> <57bb> 15481 +<57bc> <57bc> 7268 +<57bd> <57bd> 7267 +<57be> <57be> 14124 +<57bf> <57bf> 7271 +<57c1> <57c1> 7275 +<57c2> <57c2> 2171 +<57c3> <57c3> 2174 +<57c4> <57c4> 15195 +<57c6> <57c6> 7266 +<57c7> <57c7> 7272 +<57c8> <57c8> 15627 +endcidrange + +100 begincidrange +<57cb> <57cb> 2173 +<57cc> <57cc> 7261 +<57ce> <57ce> 1772 +<57cf> <57cf> 7810 +<57d0> <57d0> 7273 +<57d2> <57d2> 7264 +<57d4> <57d4> 2172 +<57d5> <57d5> 7263 +<57d7> <57d7> 15485 +<57dc> <57dc> 7801 +<57dd> <57dd> 14853 +<57de> <57de> 16129 +<57df> <57df> 2617 +<57e0> <57e0> 2621 +<57e1> <57e1> 7817 +<57e2> <57e2> 7799 +<57e3> <57e3> 7813 +<57e4> <57e4> 2622 +<57e5> <57e5> 7815 +<57e6> <57e6> 16591 +<57e7> <57e7> 7821 +<57e9> <57e9> 7825 +<57ec> <57ec> 7816 +<57ed> <57ed> 7804 +<57ee> <57ee> 7812 +<57ef> <57ef> 18260 +<57f0> <57f0> 7826 +<57f1> <57f1> 7824 +<57f2> <57f2> 7814 +<57f3> <57f3> 7809 +<57f4> <57f4> 7802 +<57f5> <57f5> 8417 +<57f6> <57f6> 7800 +<57f7> <57f7> 2626 +<57f8> <57f8> 7807 +<57f9> <57f9> 2627 +<57fa> <57fa> 2623 +<57fb> <57fb> 7797 +<57fc> <57fc> 7819 +<57fd> <57fd> 7805 +<57fe> <57fe> 16527 +<5800> <5800> 7803 +<5801> <5801> 7822 +<5802> <5802> 2624 +<5803> <5803> 16593 +<5804> <5804> 7828 +<5805> <5805> 2618 +<5806> <5806> 2620 +<5807> <5807> 7811 +<5808> <5808> 7806 +<5809> <5809> 2175 +<580a> <580a> 2619 +<580b> <580b> 7808 +<580c> <580c> 7823 +<580d> <580d> 7827 +<580e> <580e> 7818 +<5810> <5810> 7820 +<5812> <5812> 15626 +<5814> <5814> 7798 +<5819> <5819> 8412 +<581b> <581b> 8421 +<581c> <581c> 8420 +<581d> <581d> 3102 +<581e> <581e> 8413 +<5820> <5820> 3103 +<5821> <5821> 3101 +<5822> <5822> 15400 +<5823> <5823> 8415 +<5824> <5824> 3098 +<5825> <5825> 8419 +<5826> <5826> 16596 +<5827> <5827> 8414 +<5828> <5828> 8416 +<5829> <5829> 8410 +<582a> <582a> 3096 +<582c> <582c> 8429 +<582d> <582d> 8428 +<582e> <582e> 8425 +<582f> <582f> 3095 +<5830> <5831> 3099 +<5832> <5832> 7262 +<5833> <5833> 8422 +<5834> <5834> 3097 +<5835> <5835> 2625 +<5836> <5836> 8424 +<5837> <5837> 8411 +<5838> <5838> 8427 +<5839> <5839> 8426 +<583a> <583a> 15730 +<583b> <583b> 8430 +<583d> <583d> 9119 +<583f> <583f> 8423 +<5840> <5840> 15746 +<5844> <5844> 18363 +<5847> <5847> 15042 +<5848> <5848> 8418 +<5849> <5849> 9111 +<584a> <584a> 3567 +<584b> <584b> 3570 +<584c> <584c> 3565 +endcidrange + +100 begincidrange +<584d> <584d> 9110 +<584e> <584e> 9114 +<584f> <584f> 9109 +<5851> <5851> 3559 +<5852> <5852> 3569 +<5853> <5853> 9106 +<5854> <5854> 3563 +<5855> <5855> 9113 +<5857> <5857> 3561 +<5858> <5858> 3560 +<5859> <5859> 9116 +<585a> <585a> 3562 +<585b> <585b> 9118 +<585c> <585c> 18761 +<585d> <585d> 9115 +<585e> <585e> 3558 +<585f> <585f> 17375 +<5862> <5862> 3568 +<5863> <5863> 9120 +<5864> <5864> 9108 +<5865> <5865> 9117 +<5868> <5868> 9107 +<5869> <5869> 15717 +<586b> <586b> 3564 +<586c> <586c> 14746 +<586d> <586d> 3566 +<586f> <586f> 9112 +<5871> <5871> 9121 +<5872> <5872> 15398 +<5873> <5873> 17237 +<5874> <5874> 9791 +<5875> <5875> 4002 +<5876> <5876> 9797 +<5879> <5879> 4007 +<587a> <587a> 9793 +<587b> <587b> 9800 +<587c> <587c> 9785 +<587d> <587d> 4009 +<587e> <587e> 4003 +<587f> <587f> 9790 +<5880> <5880> 4385 +<5881> <5881> 9789 +<5882> <5882> 9798 +<5883> <5883> 4004 +<5885> <5885> 4008 +<5886> <5886> 9788 +<5887> <5887> 9794 +<5888> <5888> 9799 +<5889> <5889> 9784 +<588a> <588a> 4006 +<588b> <588b> 9792 +<588e> <588e> 9796 +<588f> <588f> 9802 +<5890> <5890> 9786 +<5891> <5891> 9795 +<5893> <5893> 4005 +<5894> <5894> 9801 +<5898> <5898> 9787 +<5899> <5899> 17944 +<589a> <589a> 18691 +<589c> <589c> 4389 +<589d> <589d> 10401 +<589e> <589e> 4387 +<589f> <589f> 4386 +<58a0> <58a0> 10403 +<58a1> <58a1> 10408 +<58a3> <58a3> 10404 +<58a5> <58a5> 10407 +<58a6> <58a6> 4392 +<58a7> <58a7> 16107 +<58a8> <58a8> 4744 +<58a9> <58a9> 4391 +<58aa> <58aa> 16599 +<58ab> <58ab> 10400 +<58ac> <58ac> 10406 +<58ae> <58ae> 4390 +<58af> <58af> 10405 +<58b0> <58b0> 14244 +<58b1> <58b1> 10402 +<58b3> <58b3> 4388 +<58b5> <58b5> 18496 +<58b6> <58b6> 15869 +<58ba> <58ba> 11032 +<58bb> <58bb> 14059 +<58bc> <58bc> 11034 +<58bd> <58bd> 11029 +<58be> <58be> 4772 +<58bf> <58bf> 11031 +<58c1> <58c1> 4771 +<58c2> <58c2> 11033 +<58c5> <58c5> 4774 +<58c6> <58c6> 11035 +<58c7> <58c7> 4773 +<58c8> <58c8> 11028 +<58c9> <58c9> 11030 +<58cb> <58cb> 14857 +<58ce> <58ce> 5058 +<58cf> <58cf> 11597 +<58d1> <58d1> 5057 +<58d2> <58d2> 11598 +endcidrange + +100 begincidrange +<58d3> <58d3> 5056 +<58d4> <58d4> 11596 +<58d5> <58d5> 5055 +<58d6> <58d6> 11595 +<58d8> <58d8> 5325 +<58d9> <58d9> 5324 +<58da> <58da> 12421 +<58db> <58db> 12423 +<58dc> <58dc> 16602 +<58dd> <58dd> 12422 +<58de> <58df> 5496 +<58e0> <58e0> 16601 +<58e2> <58e2> 5498 +<58e3> <58e3> 12747 +<58e4> <58e4> 5646 +<58e7> <58e7> 13329 +<58e8> <58e8> 13328 +<58e9> <58e9> 5920 +<58eb> <58eb> 635 +<58ec> <58ec> 705 +<58ef> <58ef> 1135 +<58f0> <58f0> 17737 +<58f2> <58f2> 15720 +<58f3> <58f3> 15482 +<58f4> <58f4> 6811 +<58f9> <58fa> 3104 +<58fb> <58fb> 16604 +<58fc> <58fc> 9122 +<58fd> <58fd> 4010 +<58fe> <58fe> 9803 +<58ff> <58ff> 10409 +<5902> <5902> 548 +<5903> <5903> 6021 +<5904> <5904> 17738 +<5905> <5905> 17817 +<5906> <5906> 6231 +<5907> <5907> 17739 +<590a> <590a> 548 +<590c> <590c> 6468 +<590d> <590d> 6812 +<590e> <590e> 7276 +<590f> <590f> 2176 +<5911> <5911> 17012 +<5912> <5912> 12424 +<5914> <5914> 5741 +<5915> <5915> 636 +<5916> <5916> 814 +<5917> <5917> 6044 +<5919> <591a> 948 +<591c> <591c> 1409 +<591f> <591f> 16611 +<5920> <5920> 2628 +<5922> <5922> 4012 +<5924> <5924> 4013 +<5925> <5925> 4011 +<5927> <5927> 637 +<5929> <5929> 706 +<592a> <592a> 708 +<592b> <592b> 707 +<592c> <592c> 6022 +<592d> <592d> 709 +<592e> <592e> 815 +<592f> <592f> 6045 +<5931> <5931> 816 +<5932> <5932> 17740 +<5934> <5934> 17741 +<5937> <5938> 950 +<593c> <593c> 6100 +<593e> <593e> 1136 +<5940> <5940> 6232 +<5944> <5944> 1413 +<5945> <5945> 6469 +<5947> <5948> 1411 +<5949> <5949> 1410 +<594a> <594a> 7277 +<594e> <594e> 1778 +<594f> <594f> 1777 +<5950> <5950> 1779 +<5951> <5951> 1776 +<5953> <5953> 6813 +<5954> <5954> 1414 +<5955> <5955> 1775 +<5957> <5958> 2177 +<595a> <595a> 2179 +<595c> <595c> 7829 +<5960> <5960> 3106 +<5961> <5961> 8431 +<5962> <5962> 2629 +<5965> <5965> 18514 +<5967> <5967> 3571 +<5969> <5969> 4015 +<596a> <596a> 4014 +<596b> <596b> 9804 +<596d> <596d> 4393 +<596e> <596e> 4775 +<5970> <5970> 12055 +<5971> <5971> 13179 +<5972> <5972> 13330 +<5973> <5973> 638 +<5974> <5974> 817 +endcidrange + +100 begincidrange +<5975> <5975> 15978 +<5976> <5976> 818 +<5977> <5977> 6106 +<5978> <5978> 953 +<5979> <5979> 956 +<597b> <597b> 6104 +<597c> <597c> 6102 +<597d> <597d> 955 +<597e> <597e> 6105 +<597f> <597f> 6107 +<5980> <5980> 6101 +<5981> <5981> 958 +<5982> <5982> 957 +<5983> <5983> 954 +<5984> <5984> 952 +<5985> <5985> 6103 +<5989> <5989> 15664 +<598a> <598a> 1147 +<598d> <598d> 1144 +<598e> <598e> 6237 +<598f> <598f> 6240 +<5990> <5990> 6239 +<5992> <5992> 1138 +<5993> <5993> 1146 +<5994> <5994> 15513 +<5996> <5996> 1143 +<5997> <5997> 6236 +<5998> <5998> 6234 +<5999> <5999> 1142 +<599a> <599a> 15280 +<599d> <599d> 1137 +<599e> <599e> 1140 +<599f> <599f> 15791 +<59a0> <59a0> 6235 +<59a1> <59a1> 6242 +<59a2> <59a2> 6238 +<59a3> <59a3> 1141 +<59a4> <59a4> 1145 +<59a5> <59a5> 1148 +<59a6> <59a6> 6233 +<59a7> <59a7> 6241 +<59a8> <59a8> 1139 +<59ac> <59ac> 15745 +<59ae> <59ae> 1419 +<59af> <59af> 1427 +<59b0> <59b0> 15576 +<59b1> <59b1> 6481 +<59b2> <59b2> 6474 +<59b3> <59b3> 1428 +<59b4> <59b4> 6485 +<59b5> <59b5> 6470 +<59b6> <59b6> 6477 +<59b7> <59b7> 16173 +<59b8> <59b8> 14864 +<59b9> <59b9> 1418 +<59ba> <59ba> 6471 +<59bb> <59bb> 1416 +<59bc> <59bc> 6478 +<59bd> <59bd> 6482 +<59be> <59be> 1415 +<59c0> <59c0> 6483 +<59c1> <59c1> 6476 +<59c3> <59c3> 6479 +<59c4> <59c4> 15620 +<59c5> <59c5> 1430 +<59c6> <59c6> 1421 +<59c7> <59c7> 6486 +<59c8> <59c8> 6484 +<59c9> <59c9> 16620 +<59ca> <59ca> 1426 +<59cb> <59cb> 1424 +<59cc> <59cc> 6475 +<59cd> <59cd> 1423 +<59ce> <59ce> 6473 +<59cf> <59cf> 6472 +<59d0> <59d0> 1422 +<59d1> <59d1> 1420 +<59d2> <59d2> 1429 +<59d3> <59d3> 1425 +<59d4> <59d4> 1417 +<59d6> <59d6> 6480 +<59d8> <59d8> 1781 +<59d9> <59d9> 16625 +<59da> <59da> 1788 +<59db> <59db> 6827 +<59dc> <59dc> 1780 +<59dd> <59dd> 6819 +<59de> <59de> 6815 +<59e0> <59e0> 6831 +<59e1> <59e1> 6814 +<59e3> <59e3> 1783 +<59e4> <59e4> 6824 +<59e5> <59e5> 1786 +<59e6> <59e6> 1789 +<59e8> <59e8> 1784 +<59e9> <59e9> 6828 +<59ea> <59ea> 1787 +<59eb> <59eb> 15705 +<59ec> <59ec> 2186 +<59ed> <59ed> 6834 +endcidrange + +100 begincidrange +<59ee> <59ee> 6816 +<59ef> <59ef> 15672 +<59f0> <59f0> 15282 +<59f1> <59f1> 6818 +<59f2> <59f2> 6825 +<59f3> <59f3> 6829 +<59f4> <59f4> 6833 +<59f5> <59f5> 6830 +<59f6> <59f6> 6823 +<59f7> <59f7> 6826 +<59f8> <59f8> 15946 +<59f9> <59f9> 16632 +<59fa> <59fa> 6820 +<59fb> <59fb> 1791 +<59fc> <59fc> 6822 +<59fd> <59fd> 6821 +<59fe> <59fe> 6832 +<59ff> <59ff> 1782 +<5a00> <5a00> 6817 +<5a01> <5a01> 1790 +<5a02> <5a02> 15245 +<5a03> <5a03> 1785 +<5a09> <5a09> 2192 +<5a0a> <5a0a> 7285 +<5a0b> <5a0b> 15497 +<5a0c> <5a0c> 2191 +<5a0d> <5a0d> 15160 +<5a0f> <5a0f> 7283 +<5a11> <5a11> 2180 +<5a12> <5a12> 14867 +<5a13> <5a13> 2185 +<5a15> <5a15> 7282 +<5a16> <5a16> 7279 +<5a17> <5a17> 7284 +<5a18> <5a18> 2181 +<5a19> <5a19> 7278 +<5a1b> <5a1b> 2184 +<5a1c> <5a1c> 2182 +<5a1e> <5a1e> 7286 +<5a1f> <5a1f> 2183 +<5a20> <5a20> 2187 +<5a21> <5a21> 14875 +<5a23> <5a23> 2188 +<5a24> <5a24> 16616 +<5a25> <5a25> 2190 +<5a27> <5a27> 15841 +<5a29> <5a29> 2189 +<5a2a> <5a2a> 15163 +<5a2b> <5a2b> 15680 +<5a2c> <5a2c> 14863 +<5a2d> <5a2e> 7280 +<5a33> <5a33> 7287 +<5a35> <5a35> 7836 +<5a36> <5a36> 2630 +<5a37> <5a37> 8445 +<5a38> <5a38> 7835 +<5a39> <5a39> 7854 +<5a3c> <5a3c> 2636 +<5a3d> <5a3d> 15040 +<5a3e> <5a3e> 7852 +<5a40> <5a40> 2635 +<5a41> <5a41> 2631 +<5a42> <5a42> 7861 +<5a43> <5a43> 7845 +<5a44> <5a44> 7848 +<5a45> <5a45> 14615 +<5a46> <5a46> 2639 +<5a47> <5a47> 7858 +<5a48> <5a48> 7850 +<5a49> <5a49> 2632 +<5a4a> <5a4a> 2640 +<5a4c> <5a4c> 7855 +<5a4d> <5a4d> 7853 +<5a50> <5a50> 7838 +<5a51> <5a51> 7859 +<5a52> <5a52> 7847 +<5a53> <5a53> 7842 +<5a54> <5a54> 17923 +<5a55> <5a55> 7832 +<5a56> <5a56> 7860 +<5a57> <5a57> 7844 +<5a58> <5a58> 7831 +<5a59> <5a59> 15156 +<5a5a> <5a5a> 2638 +<5a5b> <5a5b> 7849 +<5a5c> <5a5c> 7862 +<5a5d> <5a5d> 7846 +<5a5e> <5a5e> 7834 +<5a5f> <5a5f> 7839 +<5a60> <5a60> 7830 +<5a61> <5a61> 15667 +<5a62> <5a62> 2637 +<5a63> <5a63> 16635 +<5a64> <5a64> 7843 +<5a65> <5a65> 7840 +<5a66> <5a66> 2633 +<5a67> <5a67> 7833 +<5a68> <5a68> 14775 +<5a69> <5a69> 7857 +<5a6a> <5a6a> 2634 +endcidrange + +100 begincidrange +<5a6b> <5a6b> 14914 +<5a6c> <5a6c> 7841 +<5a6d> <5a6d> 7837 +<5a6e> <5a6e> 15679 +<5a70> <5a70> 7856 +<5a71> <5a71> 15668 +<5a77> <5a77> 3107 +<5a78> <5a78> 8438 +<5a79> <5a79> 15585 +<5a7a> <5a7a> 8435 +<5a7b> <5a7b> 8452 +<5a7c> <5a7c> 8440 +<5a7d> <5a7d> 8453 +<5a7e> <5a7e> 14865 +<5a7f> <5a7f> 3109 +<5a81> <5a81> 14877 +<5a82> <5a82> 15665 +<5a83> <5a83> 8449 +<5a84> <5a84> 8446 +<5a86> <5a86> 15233 +<5a88> <5a88> 16995 +<5a8a> <5a8a> 8447 +<5a8b> <5a8b> 8450 +<5a8c> <5a8c> 8454 +<5a8e> <5a8e> 7851 +<5a8f> <5a8f> 8456 +<5a90> <5a90> 9142 +<5a91> <5a91> 16949 +<5a92> <5a92> 3110 +<5a93> <5a93> 8457 +<5a94> <5a94> 8433 +<5a95> <5a95> 8443 +<5a96> <5a96> 16640 +<5a97> <5a97> 8448 +<5a99> <5a99> 14858 +<5a9a> <5a9a> 3108 +<5a9b> <5a9b> 3111 +<5a9c> <5a9c> 8455 +<5a9d> <5a9d> 8458 +<5a9e> <5a9e> 8437 +<5a9f> <5a9f> 8434 +<5aa0> <5aa0> 16754 +<5aa1> <5aa1> 15580 +<5aa2> <5aa2> 8436 +<5aa5> <5aa5> 8441 +<5aa6> <5aa6> 8439 +<5aa7> <5aa7> 3112 +<5aa9> <5aa9> 8451 +<5aab> <5aab> 16634 +<5aac> <5aac> 8442 +<5aae> <5aae> 8444 +<5aaf> <5aaf> 8432 +<5ab0> <5ab0> 9130 +<5ab1> <5ab1> 9128 +<5ab2> <5ab2> 3580 +<5ab3> <5ab3> 3578 +<5ab4> <5ab4> 9138 +<5ab5> <5ab5> 9129 +<5ab6> <5ab6> 9139 +<5ab7> <5ab7> 9135 +<5ab8> <5ab8> 9127 +<5ab9> <5ab9> 9141 +<5aba> <5aba> 9126 +<5abb> <5abb> 9133 +<5abc> <5abc> 3577 +<5abd> <5abd> 3576 +<5abe> <5abe> 3575 +<5abf> <5abf> 9131 +<5ac0> <5ac0> 9136 +<5ac1> <5ac1> 3572 +<5ac2> <5ac2> 3579 +<5ac3> <5ac3> 14486 +<5ac4> <5ac4> 9124 +<5ac6> <5ac6> 9134 +<5ac7> <5ac7> 9123 +<5ac8> <5ac8> 9132 +<5ac9> <5ac9> 3573 +<5aca> <5aca> 9137 +<5acb> <5acb> 9125 +<5acc> <5acc> 3574 +<5acd> <5acd> 9140 +<5ace> <5ace> 15496 +<5acf> <5acf> 17333 +<5ad3> <5ad3> 16642 +<5ad5> <5ad5> 9808 +<5ad6> <5ad6> 4020 +<5ad7> <5ad7> 4019 +<5ad8> <5ad8> 4021 +<5ad9> <5ad9> 9820 +<5ada> <5ada> 9810 +<5adb> <5adb> 9816 +<5adc> <5adc> 9805 +<5add> <5add> 9819 +<5ade> <5ade> 9818 +<5adf> <5adf> 9822 +<5ae0> <5ae0> 9815 +<5ae1> <5ae1> 4016 +<5ae2> <5ae2> 9814 +<5ae3> <5ae3> 4022 +<5ae4> <5ae4> 15238 +endcidrange + +100 begincidrange +<5ae5> <5ae5> 9807 +<5ae6> <5ae6> 4017 +<5ae8> <5ae8> 9821 +<5ae9> <5ae9> 4018 +<5aea> <5aea> 9809 +<5aeb> <5aeb> 9812 +<5aec> <5aec> 9817 +<5aed> <5aed> 9811 +<5aee> <5aee> 9806 +<5af0> <5af0> 16103 +<5af2> <5af2> 14325 +<5af3> <5af3> 9813 +<5af4> <5af4> 10411 +<5af5> <5af5> 4397 +<5af6> <5af6> 10414 +<5af7> <5af7> 10413 +<5af8> <5af8> 10416 +<5af9> <5af9> 10418 +<5afa> <5afa> 14062 +<5afb> <5afb> 4395 +<5afd> <5afd> 10412 +<5afe> <5afe> 15389 +<5aff> <5aff> 10410 +<5b01> <5b01> 10419 +<5b02> <5b02> 10417 +<5b03> <5b03> 10415 +<5b05> <5b05> 10421 +<5b07> <5b07> 10420 +<5b08> <5b08> 4399 +<5b09> <5b09> 4394 +<5b0b> <5b0b> 4396 +<5b0c> <5b0c> 4398 +<5b0d> <5b0d> 18687 +<5b0f> <5b0f> 10422 +<5b10> <5b10> 11042 +<5b11> <5b11> 15350 +<5b13> <5b13> 11041 +<5b14> <5b14> 11040 +<5b16> <5b16> 11043 +<5b17> <5b17> 11036 +<5b19> <5b19> 11037 +<5b1a> <5b1a> 11045 +<5b1b> <5b1b> 11038 +<5b1d> <5b1d> 4776 +<5b1e> <5b1e> 11047 +<5b1f> <5b1f> 18753 +<5b20> <5b20> 11046 +<5b21> <5b21> 11039 +<5b23> <5b23> 11602 +<5b24> <5b24> 5061 +<5b25> <5b25> 11600 +<5b26> <5b26> 11605 +<5b27> <5b27> 11604 +<5b28> <5b28> 11044 +<5b2a> <5b2a> 5060 +<5b2b> <5b2b> 15236 +<5b2c> <5b2c> 11603 +<5b2d> <5b2d> 11599 +<5b2e> <5b2e> 11607 +<5b2f> <5b2f> 11606 +<5b30> <5b30> 5059 +<5b32> <5b32> 11601 +<5b34> <5b34> 4777 +<5b38> <5b38> 5326 +<5b3c> <5b3c> 12056 +<5b3d> <5b3f> 12425 +<5b40> <5b40> 5647 +<5b41> <5b41> 14536 +<5b43> <5b43> 5648 +<5b44> <5b44> 14916 +<5b45> <5b45> 12748 +<5b46> <5b46> 17074 +<5b47> <5b47> 13005 +<5b48> <5b48> 13004 +<5b4a> <5b4a> 14541 +<5b4b> <5b4c> 13180 +<5b4d> <5b4d> 13331 +<5b4e> <5b4e> 13442 +<5b4f> <5b4f> 14897 +<5b50> <5b51> 639 +<5b53> <5b53> 641 +<5b54> <5b54> 710 +<5b55> <5b55> 819 +<5b56> <5b56> 6108 +<5b57> <5b58> 959 +<5b5a> <5b5b> 1151 +<5b5c> <5b5c> 1150 +<5b5d> <5b5d> 1149 +<5b5f> <5b5f> 1431 +<5b62> <5b62> 6487 +<5b63> <5b63> 1433 +<5b64> <5b64> 1432 +<5b65> <5b65> 6488 +<5b66> <5b66> 17742 +<5b68> <5b68> 17949 +<5b69> <5b69> 1792 +<5b6b> <5b6b> 2193 +<5b6c> <5b6c> 7288 +<5b6d> <5b6d> 15967 +<5b6e> <5b6e> 7864 +endcidrange + +100 begincidrange +<5b70> <5b70> 2641 +<5b71> <5b71> 3114 +<5b72> <5b72> 7863 +<5b73> <5b73> 3113 +<5b74> <5b74> 14130 +<5b75> <5b75> 4023 +<5b76> <5b76> 16650 +<5b77> <5b77> 9823 +<5b78> <5b78> 4778 +<5b7a> <5b7a> 5062 +<5b7b> <5b7b> 11608 +<5b7c> <5b7c> 16652 +<5b7d> <5b7d> 5649 +<5b7f> <5b7f> 5824 +<5b80> <5b80> 549 +<5b81> <5b81> 6046 +<5b82> <5b82> 16452 +<5b83> <5b83> 820 +<5b84> <5b84> 6047 +<5b85> <5b85> 963 +<5b87> <5b88> 961 +<5b89> <5b89> 964 +<5b8b> <5b8b> 1154 +<5b8c> <5b8c> 1153 +<5b8e> <5b8e> 6243 +<5b8f> <5b8f> 1155 +<5b90> <5b90> 18665 +<5b92> <5b92> 6244 +<5b93> <5b93> 6489 +<5b95> <5b95> 6490 +<5b97> <5b97> 1434 +<5b98> <5b98> 1436 +<5b99> <5b99> 1438 +<5b9a> <5b9a> 1435 +<5b9b> <5b9b> 1439 +<5b9c> <5b9c> 1437 +<5b9d> <5b9d> 16662 +<5b9e> <5b9f> 17743 +<5ba2> <5ba2> 1796 +<5ba3> <5ba3> 1793 +<5ba4> <5ba4> 1795 +<5ba5> <5ba5> 1797 +<5ba6> <5ba6> 1794 +<5ba7> <5ba7> 7289 +<5ba8> <5ba8> 6835 +<5baa> <5baa> 16763 +<5bac> <5bac> 7291 +<5bad> <5bad> 7290 +<5bae> <5bae> 2199 +<5bb0> <5bb0> 2195 +<5bb3> <5bb3> 2196 +<5bb4> <5bb4> 2198 +<5bb5> <5bb5> 2200 +<5bb6> <5bb6> 2197 +<5bb8> <5bb8> 2202 +<5bb9> <5bb9> 2201 +<5bbf> <5bbf> 2646 +<5bc0> <5bc0> 7866 +<5bc1> <5bc1> 7865 +<5bc2> <5bc2> 2645 +<5bc3> <5bc3> 16165 +<5bc4> <5bc4> 2644 +<5bc5> <5bc5> 2643 +<5bc6> <5bc6> 2647 +<5bc7> <5bc7> 2642 +<5bca> <5bca> 8464 +<5bcb> <5bcb> 8461 +<5bcc> <5bcc> 3116 +<5bcd> <5bcd> 8460 +<5bce> <5bce> 8465 +<5bd0> <5bd0> 3118 +<5bd1> <5bd1> 8463 +<5bd2> <5bd2> 3115 +<5bd3> <5bd3> 3117 +<5bd4> <5bd4> 8462 +<5bd5> <5bd5> 16657 +<5bd6> <5bd6> 9143 +<5bd7> <5bd7> 17083 +<5bd8> <5bd9> 9144 +<5bde> <5bde> 4024 +<5bdf> <5bdf> 4032 +<5be0> <5be0> 9824 +<5be1> <5be1> 4026 +<5be2> <5be2> 4030 +<5be3> <5be3> 9825 +<5be4> <5be4> 4031 +<5be5> <5be6> 4027 +<5be7> <5be7> 4025 +<5be8> <5be8> 4029 +<5be9> <5be9> 4402 +<5bea> <5bea> 8459 +<5beb> <5beb> 4403 +<5bec> <5bec> 4401 +<5bee> <5bee> 4400 +<5bef> <5bef> 11048 +<5bf0> <5bf0> 4779 +<5bf1> <5bf2> 11609 +<5bf3> <5bf3> 16661 +<5bf5> <5bf5> 5499 +<5bf6> <5bf6> 5650 +endcidrange + +100 begincidrange +<5bf8> <5bf8> 642 +<5bfa> <5bfa> 965 +<5bff> <5bff> 16605 +<5c01> <5c01> 1798 +<5c03> <5c03> 7292 +<5c04> <5c04> 2203 +<5c05> <5c05> 16664 +<5c07> <5c07> 2650 +<5c08> <5c08> 2649 +<5c09> <5c09> 2648 +<5c0a> <5c0b> 3119 +<5c0c> <5c0c> 8466 +<5c0d> <5c0d> 4033 +<5c0e> <5c0e> 4780 +<5c0f> <5c0f> 643 +<5c10> <5c10> 6023 +<5c11> <5c11> 711 +<5c12> <5c12> 6048 +<5c13> <5c13> 16666 +<5c14> <5c14> 16668 +<5c15> <5c15> 6109 +<5c16> <5c16> 966 +<5c1a> <5c1a> 1440 +<5c1c> <5c1c> 17898 +<5c1e> <5c1e> 14889 +<5c1f> <5c1f> 9146 +<5c20> <5c20> 15753 +<5c22> <5c22> 644 +<5c23> <5c23> 17640 +<5c24> <5c24> 712 +<5c25> <5c25> 6110 +<5c28> <5c28> 6245 +<5c2a> <5c2a> 6246 +<5c2c> <5c2c> 1156 +<5c30> <5c30> 8467 +<5c31> <5c31> 3121 +<5c33> <5c33> 9147 +<5c37> <5c37> 5063 +<5c38> <5c38> 645 +<5c39> <5c39> 665 +<5c3a> <5c3a> 713 +<5c3b> <5c3b> 6049 +<5c3c> <5c3c> 821 +<5c3e> <5c3e> 1160 +<5c3f> <5c3f> 1159 +<5c40> <5c41> 1157 +<5c44> <5c44> 6491 +<5c45> <5c46> 1442 +<5c47> <5c47> 6492 +<5c48> <5c48> 1441 +<5c49> <5c49> 16671 +<5c4a> <5c4a> 16220 +<5c4b> <5c4b> 1802 +<5c4c> <5c4c> 6836 +<5c4d> <5c4d> 1801 +<5c4e> <5c4f> 1799 +<5c50> <5c50> 2206 +<5c51> <5c51> 2204 +<5c53> <5c53> 16130 +<5c54> <5c54> 7294 +<5c55> <5c55> 2205 +<5c56> <5c56> 7293 +<5c58> <5c58> 2194 +<5c59> <5c59> 7867 +<5c5c> <5c5d> 2652 +<5c5e> <5c5e> 15719 +<5c60> <5c60> 2651 +<5c62> <5c62> 4034 +<5c63> <5c63> 9826 +<5c64> <5c65> 4404 +<5c67> <5c67> 10423 +<5c68> <5c68> 5064 +<5c69> <5c6a> 12057 +<5c6c> <5c6c> 5742 +<5c6d> <5c6d> 13443 +<5c6e> <5c6e> 6006 +<5c6f> <5c6f> 714 +<5c71> <5c71> 646 +<5c73> <5c73> 6051 +<5c74> <5c74> 6050 +<5c79> <5c79> 967 +<5c7a> <5c7b> 6112 +<5c7c> <5c7c> 6111 +<5c7e> <5c7e> 6114 +<5c85> <5c85> 16673 +<5c86> <5c86> 6254 +<5c88> <5c88> 6249 +<5c89> <5c89> 6251 +<5c8a> <5c8a> 6253 +<5c8b> <5c8b> 6250 +<5c8c> <5c8c> 1164 +<5c8d> <5c8d> 6247 +<5c8f> <5c8f> 6248 +<5c90> <5c91> 1161 +<5c92> <5c92> 6252 +<5c93> <5c93> 6255 +<5c94> <5c94> 1163 +<5c95> <5c95> 6256 +<5c99> <5c99> 18060 +<5c9a> <5c9a> 17745 +endcidrange + +100 begincidrange +<5c9c> <5c9c> 18778 +<5c9d> <5c9d> 6506 +<5c9e> <5c9e> 14890 +<5c9f> <5c9f> 6500 +<5ca0> <5ca0> 6495 +<5ca1> <5ca1> 1445 +<5ca2> <5ca2> 6503 +<5ca3> <5ca3> 6501 +<5ca4> <5ca4> 6494 +<5ca5> <5ca5> 6507 +<5ca6> <5ca6> 6510 +<5ca7> <5ca7> 6505 +<5ca8> <5ca8> 6498 +<5ca9> <5ca9> 1447 +<5caa> <5caa> 6504 +<5cab> <5cab> 1448 +<5cac> <5cac> 6499 +<5cad> <5cad> 6502 +<5cae> <5cae> 6493 +<5caf> <5caf> 6497 +<5cb0> <5cb0> 6509 +<5cb1> <5cb1> 1449 +<5cb3> <5cb3> 1450 +<5cb5> <5cb5> 6496 +<5cb6> <5cb6> 6508 +<5cb7> <5cb7> 1444 +<5cb8> <5cb8> 1446 +<5cba> <5cba> 16683 +<5cc1> <5cc1> 17336 +<5cc2> <5cc2> 15692 +<5cc6> <5cc6> 6853 +<5cc7> <5cc7> 6846 +<5cc8> <5cc8> 6852 +<5cc9> <5cc9> 6845 +<5cca> <5cca> 6847 +<5ccb> <5ccb> 6841 +<5ccc> <5ccc> 6839 +<5cce> <5cce> 6854 +<5ccf> <5ccf> 6851 +<5cd0> <5cd0> 6837 +<5cd1> <5cd1> 16147 +<5cd2> <5cd2> 1804 +<5cd3> <5cd4> 6849 +<5cd6> <5cd6> 6848 +<5cd7> <5cd7> 6840 +<5cd8> <5cd8> 6838 +<5cd9> <5cd9> 1803 +<5cda> <5cda> 6844 +<5cdb> <5cdb> 6842 +<5cde> <5cde> 6843 +<5cdf> <5cdf> 6855 +<5ce5> <5ce5> 17975 +<5ce8> <5ce8> 2211 +<5ce9> <5ce9> 16674 +<5cea> <5cea> 2210 +<5cec> <5cec> 7295 +<5ced> <5ced> 2207 +<5cee> <5cee> 7297 +<5cef> <5cef> 16675 +<5cf0> <5cf0> 2212 +<5cf1> <5cf1> 7298 +<5cf4> <5cf4> 2215 +<5cf6> <5cf6> 2213 +<5cf7> <5cf7> 7299 +<5cf8> <5cf8> 6856 +<5cf9> <5cf9> 7301 +<5cfb> <5cfb> 2209 +<5cfd> <5cfd> 2208 +<5cff> <5cff> 7296 +<5d00> <5d00> 7300 +<5d01> <5d01> 2214 +<5d06> <5d06> 2655 +<5d07> <5d07> 2654 +<5d0b> <5d0b> 7869 +<5d0c> <5d0c> 7873 +<5d0d> <5d0d> 7875 +<5d0e> <5d0e> 2656 +<5d0f> <5d0f> 7878 +<5d10> <5d10> 16679 +<5d11> <5d11> 2660 +<5d12> <5d12> 7880 +<5d14> <5d14> 2662 +<5d15> <5d15> 17337 +<5d16> <5d16> 2658 +<5d17> <5d17> 2666 +<5d18> <5d18> 16680 +<5d19> <5d19> 2663 +<5d1a> <5d1a> 7871 +<5d1b> <5d1b> 2657 +<5d1d> <5d1d> 7870 +<5d1e> <5d1e> 7868 +<5d1f> <5d1f> 7882 +<5d20> <5d20> 7872 +<5d22> <5d22> 2659 +<5d23> <5d23> 7881 +<5d24> <5d24> 2664 +<5d25> <5d25> 7877 +<5d26> <5d26> 7876 +<5d27> <5d27> 2665 +<5d28> <5d28> 7874 +endcidrange + +100 begincidrange +<5d29> <5d29> 2661 +<5d2c> <5d2c> 15863 +<5d2e> <5d2e> 7883 +<5d2f> <5d2f> 18131 +<5d30> <5d30> 7879 +<5d31> <5d31> 8482 +<5d32> <5d32> 8489 +<5d33> <5d33> 8478 +<5d34> <5d34> 3124 +<5d35> <5d35> 8474 +<5d36> <5d36> 8490 +<5d37> <5d37> 8468 +<5d38> <5d38> 8487 +<5d39> <5d39> 8485 +<5d3a> <5d3a> 8479 +<5d3c> <5d3c> 8488 +<5d3d> <5d3d> 8481 +<5d3e> <5d3e> 17961 +<5d3f> <5d3f> 8473 +<5d40> <5d40> 8491 +<5d41> <5d41> 8471 +<5d42> <5d42> 8484 +<5d43> <5d43> 8469 +<5d45> <5d45> 8492 +<5d46> <5d46> 16681 +<5d47> <5d47> 3125 +<5d48> <5d48> 17962 +<5d49> <5d49> 8486 +<5d4a> <5d4a> 9150 +<5d4b> <5d4b> 8472 +<5d4c> <5d4c> 3122 +<5d4e> <5d4e> 8476 +<5d50> <5d50> 3123 +<5d51> <5d51> 8475 +<5d52> <5d52> 8480 +<5d55> <5d55> 8477 +<5d56> <5d56> 17338 +<5d57> <5d57> 16330 +<5d59> <5d59> 8483 +<5d5b> <5d5b> 15829 +<5d5e> <5d5e> 9154 +<5d62> <5d62> 9157 +<5d63> <5d63> 9149 +<5d65> <5d65> 9151 +<5d67> <5d67> 9156 +<5d68> <5d68> 9155 +<5d69> <5d69> 3581 +<5d6b> <5d6b> 8470 +<5d6c> <5d6c> 9153 +<5d6f> <5d6f> 3582 +<5d70> <5d70> 18148 +<5d71> <5d71> 9148 +<5d72> <5d72> 9152 +<5d74> <5d74> 16111 +<5d77> <5d77> 9833 +<5d79> <5d79> 9840 +<5d7a> <5d7a> 9831 +<5d7c> <5d7c> 9838 +<5d7d> <5d7d> 9829 +<5d7e> <5d7e> 9837 +<5d7f> <5d7f> 9841 +<5d80> <5d80> 9828 +<5d81> <5d81> 9832 +<5d82> <5d82> 9827 +<5d84> <5d84> 4035 +<5d85> <5d85> 15924 +<5d86> <5d86> 9830 +<5d87> <5d87> 4036 +<5d88> <5d88> 9836 +<5d89> <5d89> 9835 +<5d8a> <5d8a> 9834 +<5d8b> <5d8b> 16676 +<5d8d> <5d8d> 9839 +<5d8e> <5d8e> 16140 +<5d92> <5d92> 10427 +<5d93> <5d93> 10429 +<5d94> <5d94> 4407 +<5d95> <5d95> 10430 +<5d97> <5d97> 10425 +<5d99> <5d99> 10424 +<5d9a> <5d9a> 10434 +<5d9c> <5d9c> 10432 +<5d9d> <5d9d> 4406 +<5d9e> <5d9e> 10435 +<5d9f> <5d9f> 10426 +<5da0> <5da0> 10431 +<5da1> <5da1> 10433 +<5da2> <5da2> 10428 +<5da4> <5da4> 17965 +<5da7> <5da7> 11052 +<5da8> <5da8> 11057 +<5da9> <5da9> 11051 +<5daa> <5daa> 11056 +<5dab> <5dab> 15929 +<5dac> <5dac> 11049 +<5dad> <5dad> 11059 +<5dae> <5dae> 11055 +<5daf> <5daf> 11060 +<5db0> <5db0> 11054 +<5db1> <5db1> 11050 +endcidrange + +100 begincidrange +<5db2> <5db2> 11058 +<5db4> <5db4> 11061 +<5db5> <5db5> 11053 +<5db6> <5db6> 16728 +<5db7> <5db7> 11611 +<5db8> <5db8> 5068 +<5db9> <5db9> 17966 +<5dba> <5dba> 5066 +<5dbc> <5dbc> 5065 +<5dbd> <5dbd> 5067 +<5dc0> <5dc0> 12059 +<5dc1> <5dc1> 15359 +<5dc2> <5dc2> 12323 +<5dc3> <5dc3> 12428 +<5dc6> <5dc7> 12749 +<5dc9> <5dc9> 5651 +<5dcb> <5dcb> 13006 +<5dcd> <5dcd> 5743 +<5dcf> <5dcf> 13007 +<5dd1> <5dd1> 13183 +<5dd2> <5dd2> 5826 +<5dd4> <5dd4> 5825 +<5dd5> <5dd5> 13182 +<5dd6> <5dd6> 5879 +<5dd7> <5dd7> 16684 +<5dd8> <5dd8> 13332 +<5ddb> <5ddb> 550 +<5ddd> <5ddd> 647 +<5dde> <5dde> 968 +<5ddf> <5ddf> 6115 +<5de0> <5de0> 6257 +<5de1> <5de1> 1306 +<5de2> <5de2> 2667 +<5de5> <5de5> 648 +<5de6> <5de6> 824 +<5de7> <5de7> 823 +<5de8> <5de8> 822 +<5deb> <5deb> 1165 +<5dee> <5dee> 2216 +<5df0> <5df0> 9158 +<5df1> <5df3> 649 +<5df4> <5df4> 715 +<5df5> <5df5> 16225 +<5df7> <5df7> 1805 +<5df9> <5df9> 6857 +<5dfd> <5dfd> 3126 +<5dfe> <5dfe> 652 +<5dff> <5dff> 6024 +<5e02> <5e03> 825 +<5e04> <5e04> 6052 +<5e06> <5e06> 969 +<5e09> <5e09> 16704 +<5e0a> <5e0a> 6258 +<5e0b> <5e0b> 15754 +<5e0c> <5e0c> 1166 +<5e0e> <5e0e> 6259 +<5e11> <5e11> 1456 +<5e12> <5e12> 16174 +<5e14> <5e14> 6512 +<5e15> <5e15> 1454 +<5e16> <5e16> 1453 +<5e17> <5e17> 6511 +<5e18> <5e18> 1451 +<5e19> <5e19> 6513 +<5e1a> <5e1a> 1452 +<5e1b> <5e1b> 1455 +<5e1d> <5e1d> 1806 +<5e1f> <5e1f> 1808 +<5e20> <5e20> 6861 +<5e21> <5e23> 6858 +<5e24> <5e24> 6862 +<5e25> <5e25> 1807 +<5e28> <5e28> 7303 +<5e29> <5e29> 7302 +<5e2b> <5e2b> 2218 +<5e2d> <5e2d> 2217 +<5e2e> <5e2e> 16693 +<5e33> <5e33> 2670 +<5e34> <5e34> 7885 +<5e36> <5e36> 2669 +<5e37> <5e37> 2671 +<5e38> <5e38> 2668 +<5e3d> <5e3d> 3128 +<5e3e> <5e3e> 7884 +<5e40> <5e40> 3129 +<5e41> <5e41> 8494 +<5e42> <5e42> 17312 +<5e43> <5e43> 3130 +<5e44> <5e44> 8493 +<5e45> <5e45> 3127 +<5e48> <5e48> 14892 +<5e4a> <5e4a> 9161 +<5e4b> <5e4b> 9163 +<5e4c> <5e4c> 3583 +<5e4d> <5e4d> 9162 +<5e4e> <5e4e> 9160 +<5e4f> <5e4f> 9159 +<5e53> <5e53> 9844 +<5e54> <5e54> 4041 +<5e55> <5e55> 4039 +endcidrange + +100 begincidrange +<5e57> <5e57> 4040 +<5e58> <5e59> 9842 +<5e5b> <5e5b> 4037 +<5e5c> <5e5c> 10439 +<5e5d> <5e5d> 10437 +<5e5e> <5e5e> 14891 +<5e5f> <5e5f> 4409 +<5e60> <5e60> 10438 +<5e61> <5e61> 4410 +<5e62> <5e62> 4408 +<5e63> <5e63> 4038 +<5e66> <5e66> 11064 +<5e67> <5e68> 11062 +<5e69> <5e69> 10436 +<5e6a> <5e6a> 11613 +<5e6b> <5e6b> 5069 +<5e6c> <5e6c> 11612 +<5e6d> <5e6e> 12060 +<5e6f> <5e6f> 11065 +<5e70> <5e70> 12429 +<5e72> <5e72> 653 +<5e73> <5e73> 827 +<5e74> <5e74> 971 +<5e75> <5e75> 6116 +<5e76> <5e76> 970 +<5e78> <5e78> 1457 +<5e79> <5e79> 3584 +<5e7a> <5e7a> 551 +<5e7b> <5e7b> 716 +<5e7c> <5e7c> 828 +<5e7d> <5e7d> 1809 +<5e7e> <5e7e> 3131 +<5e7f> <5e7f> 552 +<5e80> <5e80> 6053 +<5e82> <5e82> 6054 +<5e83> <5e83> 16648 +<5e84> <5e84> 6117 +<5e86> <5e86> 17746 +<5e87> <5e87> 1168 +<5e88> <5e88> 6263 +<5e89> <5e89> 6261 +<5e8a> <5e8a> 1169 +<5e8b> <5e8b> 6260 +<5e8c> <5e8c> 6262 +<5e8d> <5e8d> 6264 +<5e8f> <5e8f> 1167 +<5e95> <5e96> 1461 +<5e97> <5e97> 1459 +<5e9a> <5e9a> 1458 +<5e9b> <5e9b> 6866 +<5e9c> <5e9c> 1460 +<5ea0> <5ea0> 1810 +<5ea2> <5ea2> 6865 +<5ea3> <5ea3> 6867 +<5ea4> <5ea4> 6864 +<5ea5> <5ea5> 6868 +<5ea6> <5ea6> 1811 +<5ea7> <5ea7> 2221 +<5ea8> <5ea8> 7304 +<5eaa> <5eaa> 7306 +<5eab> <5eab> 2219 +<5eac> <5eac> 7307 +<5ead> <5ead> 2220 +<5eae> <5eae> 7305 +<5eb0> <5eb0> 6863 +<5eb1> <5eb1> 7886 +<5eb2> <5eb3> 7889 +<5eb4> <5eb4> 7887 +<5eb5> <5eb5> 2675 +<5eb6> <5eb6> 2674 +<5eb7> <5eb8> 2672 +<5eb9> <5eb9> 7888 +<5ebd> <5ebd> 17341 +<5ebe> <5ebe> 2676 +<5ec1> <5ec2> 3133 +<5ec4> <5ec4> 3135 +<5ec5> <5ec5> 9164 +<5ec6> <5ec6> 9166 +<5ec7> <5ec7> 9168 +<5ec8> <5ec8> 3586 +<5ec9> <5ec9> 3585 +<5eca> <5eca> 3132 +<5ecb> <5ecb> 9167 +<5ecc> <5ecc> 9165 +<5ecd> <5ecd> 14896 +<5ece> <5ece> 9848 +<5ed0> <5ed0> 16701 +<5ed1> <5ed1> 9846 +<5ed2> <5ed2> 9852 +<5ed3> <5ed3> 4042 +<5ed4> <5ed4> 9853 +<5ed5> <5ed5> 9850 +<5ed6> <5ed6> 4043 +<5ed7> <5ed7> 9847 +<5ed8> <5ed8> 9845 +<5ed9> <5ed9> 9851 +<5eda> <5eda> 4412 +<5edb> <5edb> 10441 +<5edc> <5edc> 9849 +<5edd> <5edd> 4414 +endcidrange + +100 begincidrange +<5ede> <5ede> 10442 +<5edf> <5edf> 4413 +<5ee0> <5ee0> 4416 +<5ee1> <5ee1> 10443 +<5ee2> <5ee2> 4411 +<5ee3> <5ee3> 4415 +<5ee5> <5ee5> 11070 +<5ee6> <5ee6> 11068 +<5ee7> <5ee7> 11067 +<5ee8> <5ee8> 11069 +<5ee9> <5ee9> 11066 +<5eec> <5eec> 5501 +<5eee> <5eef> 12751 +<5ef1> <5ef1> 13008 +<5ef2> <5ef2> 13184 +<5ef3> <5ef3> 5954 +<5ef4> <5ef4> 553 +<5ef6> <5ef6> 1463 +<5ef7> <5ef7> 1170 +<5ef8> <5ef8> 14447 +<5ef9> <5ef9> 16707 +<5efa> <5efa> 1812 +<5efb> <5efb> 16708 +<5efc> <5efc> 16710 +<5efe> <5efe> 654 +<5eff> <5eff> 717 +<5f01> <5f01> 829 +<5f02> <5f02> 6118 +<5f04> <5f04> 1171 +<5f05> <5f05> 6265 +<5f07> <5f07> 6869 +<5f08> <5f08> 1813 +<5f0a> <5f0a> 4044 +<5f0b> <5f0b> 655 +<5f0c> <5f0c> 14910 +<5f0d> <5f0d> 16713 +<5f0e> <5f0e> 14911 +<5f0f> <5f0f> 972 +<5f12> <5f12> 3587 +<5f13> <5f13> 656 +<5f14> <5f15> 718 +<5f17> <5f17> 831 +<5f18> <5f18> 830 +<5f1a> <5f1a> 6119 +<5f1b> <5f1b> 973 +<5f1d> <5f1d> 6266 +<5f1f> <5f1f> 1172 +<5f22> <5f24> 6515 +<5f25> <5f25> 17968 +<5f26> <5f27> 1464 +<5f28> <5f28> 6514 +<5f29> <5f29> 1466 +<5f2d> <5f2d> 1814 +<5f2e> <5f2e> 6870 +<5f30> <5f30> 7309 +<5f31> <5f31> 2222 +<5f33> <5f33> 7308 +<5f35> <5f35> 2677 +<5f36> <5f36> 7891 +<5f37> <5f37> 2678 +<5f38> <5f38> 7892 +<5f3a> <5f3a> 16718 +<5f3c> <5f3c> 3136 +<5f40> <5f40> 9169 +<5f43> <5f43> 9855 +<5f44> <5f44> 9854 +<5f46> <5f46> 4045 +<5f48> <5f48> 4417 +<5f49> <5f49> 10444 +<5f4a> <5f4a> 4781 +<5f4b> <5f4b> 11071 +<5f4c> <5f4c> 5070 +<5f4d> <5f4d> 15269 +<5f4e> <5f4e> 5827 +<5f4f> <5f4f> 13334 +<5f50> <5f50> 554 +<5f51> <5f51> 17641 +<5f54> <5f54> 6518 +<5f56> <5f56> 6871 +<5f57> <5f57> 2679 +<5f58> <5f58> 8495 +<5f59> <5f59> 3588 +<5f5c> <5f5c> 15706 +<5f5d> <5f5d> 5327 +<5f61> <5f61> 555 +<5f62> <5f62> 1174 +<5f63> <5f63> 16722 +<5f64> <5f64> 1173 +<5f65> <5f65> 1815 +<5f67> <5f67> 7310 +<5f69> <5f69> 2681 +<5f6a> <5f6a> 2953 +<5f6b> <5f6b> 2682 +<5f6c> <5f6c> 2680 +<5f6d> <5f6d> 3137 +<5f6f> <5f6f> 9856 +<5f70> <5f70> 4046 +<5f71> <5f71> 4418 +<5f72> <5f72> 16724 +<5f73> <5f73> 6007 +endcidrange + +100 begincidrange +<5f74> <5f74> 6120 +<5f76> <5f76> 6268 +<5f77> <5f77> 1175 +<5f78> <5f78> 6267 +<5f79> <5f79> 1176 +<5f7b> <5f7b> 16472 +<5f7c> <5f7c> 1470 +<5f7d> <5f7d> 6521 +<5f7e> <5f7e> 6520 +<5f7f> <5f7f> 1469 +<5f80> <5f81> 1467 +<5f82> <5f82> 6519 +<5f83> <5f83> 17969 +<5f85> <5f85> 1817 +<5f86> <5f86> 6872 +<5f87> <5f87> 1820 +<5f88> <5f88> 1816 +<5f89> <5f89> 1822 +<5f8a> <5f8b> 1818 +<5f8c> <5f8c> 1821 +<5f90> <5f90> 2225 +<5f91> <5f91> 2224 +<5f92> <5f92> 2223 +<5f96> <5f96> 7894 +<5f97> <5f97> 2683 +<5f98> <5f98> 2686 +<5f99> <5f99> 2684 +<5f9b> <5f9b> 7893 +<5f9c> <5f9c> 2689 +<5f9e> <5f9e> 2685 +<5f9f> <5f9f> 7895 +<5fa0> <5fa0> 2688 +<5fa1> <5fa1> 2687 +<5fa4> <5fa4> 16428 +<5fa5> <5fa5> 8497 +<5fa6> <5fa6> 8496 +<5fa7> <5fa7> 16727 +<5fa8> <5fa8> 3140 +<5fa9> <5faa> 3138 +<5fab> <5fab> 8498 +<5fac> <5fac> 3589 +<5fad> <5fad> 9171 +<5fae> <5fae> 3590 +<5faf> <5faf> 9170 +<5fb1> <5fb1> 15768 +<5fb2> <5fb2> 10445 +<5fb5> <5fb5> 4420 +<5fb6> <5fb6> 9857 +<5fb7> <5fb7> 4419 +<5fb9> <5fb9> 4047 +<5fba> <5fba> 16287 +<5fbb> <5fbb> 11073 +<5fbc> <5fbc> 11072 +<5fbd> <5fbd> 5071 +<5fbe> <5fbe> 11614 +<5fbf> <5fbf> 12430 +<5fc0> <5fc1> 12753 +<5fc3> <5fc3> 720 +<5fc4> <5fc4> 17642 +<5fc5> <5fc5> 832 +<5fc9> <5fc9> 6055 +<5fcc> <5fcc> 1178 +<5fcd> <5fcd> 1180 +<5fcf> <5fcf> 6123 +<5fd0> <5fd0> 6271 +<5fd1> <5fd1> 6270 +<5fd2> <5fd2> 6269 +<5fd4> <5fd4> 6122 +<5fd5> <5fd5> 6121 +<5fd6> <5fd6> 975 +<5fd7> <5fd7> 1179 +<5fd8> <5fd8> 1177 +<5fd9> <5fd9> 974 +<5fdb> <5fdb> 14922 +<5fdd> <5fdd> 1471 +<5fde> <5fde> 6522 +<5fdf> <5fdf> 16815 +<5fe0> <5fe0> 1472 +<5fe1> <5fe1> 6276 +<5fe3> <5fe3> 6278 +<5fe4> <5fe4> 6277 +<5fe5> <5fe5> 6523 +<5fe8> <5fe8> 6273 +<5fea> <5fea> 1184 +<5feb> <5feb> 1182 +<5fed> <5fed> 6272 +<5fee> <5fee> 6274 +<5fef> <5fef> 6280 +<5ff1> <5ff1> 1181 +<5ff3> <5ff3> 6275 +<5ff4> <5ff4> 6284 +<5ff5> <5ff5> 1474 +<5ff7> <5ff7> 6281 +<5ff8> <5ff8> 1183 +<5ffa> <5ffa> 6279 +<5ffb> <5ffb> 6282 +<5ffd> <5ffd> 1473 +<5fff> <5fff> 1475 +<6000> <6000> 6283 +<6009> <6009> 6543 +endcidrange + +100 begincidrange +<600a> <600a> 6530 +<600b> <600b> 6528 +<600c> <600c> 6542 +<600d> <600d> 6537 +<600e> <600e> 1827 +<600f> <600f> 1476 +<6010> <6010> 6538 +<6011> <6011> 6541 +<6012> <6012> 1823 +<6013> <6013> 6540 +<6014> <6014> 1477 +<6015> <6015> 1482 +<6016> <6016> 1480 +<6017> <6017> 6531 +<6019> <6019> 6526 +<601a> <601a> 6533 +<601b> <601b> 1487 +<601c> <601c> 6544 +<601d> <601d> 1824 +<601e> <601e> 6534 +<6020> <6020> 1825 +<6021> <6021> 1483 +<6022> <6022> 6536 +<6023> <6023> 16773 +<6024> <6024> 6887 +<6025> <6025> 1826 +<6026> <6026> 6525 +<6027> <6027> 1484 +<6028> <6028> 1828 +<6029> <6029> 1485 +<602a> <602a> 1481 +<602b> <602b> 1486 +<602c> <602c> 6535 +<602d> <602d> 6524 +<602e> <602e> 6539 +<602f> <602f> 1478 +<6031> <6031> 16737 +<6032> <6032> 6527 +<6033> <6033> 6532 +<6034> <6034> 6529 +<6035> <6035> 1479 +<6037> <6037> 6873 +<6039> <6039> 6874 +<603b> <603b> 17747 +<6040> <6040> 6884 +<6041> <6041> 7314 +<6042> <6042> 6885 +<6043> <6043> 1834 +<6044> <6044> 6888 +<6045> <6045> 6878 +<6046> <6046> 1833 +<6047> <6047> 6880 +<6049> <6049> 6881 +<604a> <604a> 16500 +<604c> <604c> 6883 +<604d> <604d> 1829 +<6050> <6050> 2229 +<6052> <6052> 14060 +<6053> <6053> 6879 +<6054> <6054> 6875 +<6055> <6055> 2230 +<6058> <6058> 6889 +<6059> <6059> 2226 +<605a> <605a> 7312 +<605b> <605b> 6882 +<605d> <605d> 7311 +<605e> <605e> 6877 +<605f> <605f> 6886 +<6062> <6062> 1832 +<6063> <6063> 2227 +<6064> <6064> 1838 +<6065> <6065> 2228 +<6066> <6066> 6890 +<6067> <6067> 7313 +<6068> <6068> 1831 +<6069> <6069> 2232 +<606a> <606a> 1837 +<606b> <606b> 1836 +<606c> <606c> 1835 +<606d> <606d> 2231 +<606e> <606e> 6891 +<606f> <606f> 2233 +<6070> <6070> 1830 +<6072> <6072> 6876 +<6075> <6075> 14934 +<6077> <6077> 16389 +<607e> <607e> 14919 +<607f> <607f> 2690 +<6080> <6080> 7317 +<6081> <6081> 7319 +<6083> <6083> 7321 +<6084> <6084> 2234 +<6085> <6085> 2240 +<6086> <6086> 7898 +<6087> <6087> 7325 +<6088> <6088> 7316 +<6089> <6089> 2692 +<608a> <608a> 7896 +<608c> <608c> 2239 +<608d> <608d> 2237 +endcidrange + +100 begincidrange +<608e> <608e> 7327 +<6090> <6090> 7897 +<6092> <6092> 7318 +<6094> <6094> 2238 +<6095> <6095> 7322 +<6096> <6096> 2241 +<6097> <6097> 7324 +<609a> <609a> 2236 +<609b> <609b> 7323 +<609c> <609c> 7326 +<609d> <609d> 7320 +<609e> <609e> 16746 +<609f> <609f> 2235 +<60a0> <60a0> 2693 +<60a2> <60a2> 7315 +<60a3> <60a3> 2691 +<60a4> <60a4> 16385 +<60a7> <60a7> 15068 +<60a8> <60a8> 2694 +<60b0> <60b0> 7900 +<60b1> <60b1> 7909 +<60b2> <60b2> 3143 +<60b3> <60b3> 16748 +<60b4> <60b4> 2696 +<60b5> <60b5> 2701 +<60b6> <60b6> 3144 +<60b7> <60b7> 7911 +<60b8> <60b8> 2708 +<60b9> <60b9> 8500 +<60ba> <60ba> 7901 +<60bb> <60bb> 2700 +<60bc> <60bc> 2703 +<60bd> <60bd> 2698 +<60be> <60be> 7899 +<60bf> <60bf> 7913 +<60c0> <60c0> 7916 +<60c1> <60c1> 8515 +<60c3> <60c3> 7914 +<60c4> <60c4> 8504 +<60c5> <60c5> 2699 +<60c6> <60c6> 2706 +<60c7> <60c7> 2710 +<60c8> <60c8> 7908 +<60c9> <60c9> 8499 +<60ca> <60ca> 7912 +<60cb> <60cb> 2695 +<60cc> <60cc> 8501 +<60cd> <60cd> 7915 +<60ce> <60ce> 8503 +<60cf> <60cf> 7904 +<60d1> <60d1> 3141 +<60d3> <60d4> 7902 +<60d5> <60d5> 2705 +<60d7> <60d7> 17973 +<60d8> <60d8> 2704 +<60d9> <60d9> 7906 +<60da> <60da> 2709 +<60db> <60db> 7910 +<60dc> <60dc> 2702 +<60dd> <60dd> 7907 +<60de> <60de> 15820 +<60df> <60df> 2707 +<60e0> <60e0> 3145 +<60e1> <60e1> 3142 +<60e2> <60e2> 8502 +<60e3> <60e3> 15733 +<60e4> <60e4> 7905 +<60e6> <60e6> 2697 +<60e7> <60e7> 15748 +<60e8> <60e8> 15739 +<60e9> <60e9> 16393 +<60f0> <60f0> 3150 +<60f1> <60f1> 3154 +<60f2> <60f2> 8506 +<60f3> <60f3> 3595 +<60f4> <60f4> 3152 +<60f5> <60f5> 8510 +<60f6> <60f6> 3156 +<60f7> <60f7> 9172 +<60f8> <60f8> 8512 +<60f9> <60f9> 3597 +<60fa> <60fa> 3148 +<60fb> <60fb> 3151 +<60fc> <60fc> 8513 +<60fd> <60fd> 16296 +<60fe> <60fe> 8514 +<60ff> <60ff> 8520 +<6100> <6100> 3158 +<6101> <6101> 3598 +<6103> <6103> 8516 +<6104> <6104> 8521 +<6105> <6105> 8509 +<6106> <6106> 3608 +<6107> <6107> 15413 +<6108> <6108> 3599 +<6109> <6109> 3157 +<610a> <610a> 8507 +<610b> <610b> 8522 +<610c> <610c> 15495 +<610d> <610d> 3607 +endcidrange + +100 begincidrange +<610e> <610e> 3155 +<610f> <610f> 3592 +<6110> <6110> 8519 +<6112> <6112> 3159 +<6113> <6113> 8511 +<6114> <6114> 8505 +<6115> <6115> 3149 +<6116> <6116> 8508 +<6118> <6118> 8517 +<6119> <6119> 16118 +<611a> <611a> 3591 +<611b> <611b> 3596 +<611c> <611c> 3146 +<611d> <611d> 8518 +<611f> <611f> 3594 +<6123> <6123> 3147 +<6127> <6127> 3606 +<6128> <6128> 9859 +<6129> <6129> 9183 +<612b> <612b> 9175 +<612c> <612c> 9858 +<612e> <612e> 9179 +<612f> <612f> 9181 +<6130> <6130> 16183 +<6132> <6132> 9178 +<6134> <6134> 3605 +<6136> <6136> 9177 +<6137> <6137> 3609 +<613b> <613b> 9874 +<613d> <613d> 17974 +<613e> <613e> 3604 +<613f> <613f> 4049 +<6140> <6140> 9184 +<6141> <6141> 9860 +<6142> <6142> 16756 +<6144> <6144> 3602 +<6145> <6145> 9176 +<6146> <6146> 9180 +<6147> <6147> 4048 +<6148> <6148> 3593 +<6149> <614a> 9173 +<614b> <614b> 4050 +<614c> <614c> 3601 +<614d> <614d> 3603 +<614e> <614e> 3600 +<614f> <614f> 9182 +<6150> <6150> 15410 +<6152> <6153> 9864 +<6154> <6154> 9870 +<6155> <6155> 4425 +<6156> <6156> 9877 +<6158> <6158> 4056 +<6159> <6159> 16314 +<615a> <615a> 4055 +<615b> <615b> 9872 +<615c> <615c> 16774 +<615d> <615d> 4424 +<615e> <615e> 9861 +<615f> <615f> 4054 +<6160> <6160> 18764 +<6161> <6161> 9876 +<6162> <6163> 4052 +<6164> <6164> 16755 +<6165> <6165> 9873 +<6166> <6166> 10462 +<6167> <6167> 4422 +<6168> <6168> 3153 +<616a> <616a> 9875 +<616b> <616b> 4429 +<616c> <616c> 9867 +<616e> <616e> 4423 +<616f> <616f> 16320 +<6170> <6170> 4428 +<6171> <6171> 9862 +<6172> <6172> 9866 +<6173> <6173> 9863 +<6174> <6174> 9869 +<6175> <6175> 4057 +<6176> <6176> 4421 +<6177> <6177> 4051 +<6179> <6179> 10448 +<617a> <617a> 9871 +<617c> <617c> 4427 +<617d> <617d> 16317 +<617e> <617e> 4430 +<6180> <6180> 9868 +<6181> <6181> 16759 +<6182> <6182> 4426 +<6183> <6183> 10447 +<6187> <6187> 16762 +<6189> <6189> 10452 +<618a> <618a> 4785 +<618b> <618b> 10446 +<618c> <618c> 11085 +<618d> <618d> 10461 +<618e> <618e> 4434 +<6190> <6190> 4432 +<6191> <6191> 4783 +<6192> <6192> 10458 +<6193> <6193> 10454 +endcidrange + +100 begincidrange +<6194> <6194> 4438 +<6195> <6195> 15840 +<6196> <6196> 11076 +<6198> <6198> 14933 +<6199> <6199> 14932 +<619a> <619a> 4436 +<619b> <619b> 10453 +<619c> <619c> 16386 +<619d> <619d> 11074 +<619f> <619f> 10457 +<61a1> <61a1> 10460 +<61a2> <61a2> 10451 +<61a4> <61a4> 4437 +<61a7> <61a7> 4431 +<61a8> <61a8> 11075 +<61a9> <61a9> 4784 +<61aa> <61aa> 10459 +<61ab> <61ab> 4433 +<61ac> <61ac> 4435 +<61ad> <61ad> 10456 +<61ae> <61ae> 4439 +<61af> <61af> 10455 +<61b0> <61b0> 10450 +<61b1> <61b1> 10449 +<61b2> <61b2> 4782 +<61b3> <61b3> 10463 +<61b4> <61b4> 11078 +<61b5> <61b5> 11616 +<61b6> <61b6> 4787 +<61b7> <61b7> 17977 +<61b8> <61b8> 11084 +<61b9> <61b9> 17343 +<61ba> <61ba> 11082 +<61bc> <61bc> 11617 +<61be> <61be> 4788 +<61bf> <61bf> 11083 +<61c0> <61c0> 14928 +<61c1> <61c1> 11080 +<61c2> <61c2> 5073 +<61c3> <61c3> 11615 +<61c5> <61c5> 11077 +<61c6> <61c6> 11079 +<61c7> <61c7> 5074 +<61c8> <61c8> 4790 +<61c9> <61c9> 5072 +<61ca> <61ca> 4789 +<61cb> <61cb> 5076 +<61cc> <61cc> 11081 +<61cd> <61cd> 4786 +<61cf> <61cf> 17978 +<61d0> <61d0> 16769 +<61d3> <61d3> 16766 +<61d6> <61d6> 12070 +<61d8> <61d8> 12062 +<61da> <61da> 14513 +<61de> <61de> 11623 +<61df> <61df> 12063 +<61e0> <61e0> 11619 +<61e2> <61e2> 16325 +<61e3> <61e3> 5328 +<61e4> <61e4> 11621 +<61e5> <61e5> 11620 +<61e6> <61e6> 5075 +<61e7> <61e7> 11618 +<61e8> <61e8> 11622 +<61e9> <61e9> 12071 +<61ea> <61ea> 12067 +<61eb> <61eb> 12069 +<61ed> <61ee> 12064 +<61f0> <61f0> 12068 +<61f1> <61f1> 12066 +<61f2> <61f2> 5502 +<61f5> <61f5> 5505 +<61f6> <61f6> 5504 +<61f7> <61f7> 5503 +<61f8> <61f8> 5652 +<61f9> <61f9> 12755 +<61fa> <61fa> 5653 +<61fb> <61fb> 12431 +<61fc> <61fc> 5744 +<61fd> <61fd> 13009 +<61fe> <61fe> 5745 +<61ff> <61ff> 5828 +<6200> <6200> 5880 +<6201> <6201> 13335 +<6203> <6204> 13336 +<6207> <6207> 13619 +<6208> <6208> 721 +<6209> <6209> 6056 +<620a> <620a> 833 +<620c> <620d> 977 +<620e> <620e> 976 +<6210> <6210> 979 +<6211> <6211> 1186 +<6212> <6212> 1185 +<6214> <6214> 6545 +<6215> <6215> 1489 +<6216> <6216> 1488 +<6219> <6219> 7328 +<621a> <621b> 2711 +endcidrange + +100 begincidrange +<621f> <621f> 3160 +<6220> <6220> 9185 +<6221> <6222> 3610 +<6223> <6223> 9187 +<6224> <6224> 9189 +<6225> <6225> 9188 +<6227> <6227> 9879 +<6229> <6229> 9878 +<622a> <622a> 4058 +<622b> <622b> 9880 +<622c> <622c> 17980 +<622d> <622d> 10464 +<622e> <622e> 4440 +<6230> <6230> 4791 +<6232> <6232> 5077 +<6233> <6233> 5329 +<6234> <6234> 5078 +<6236> <6236> 722 +<6237> <6237> 17690 +<6239> <6239> 16322 +<623a> <623a> 6285 +<623d> <623d> 6546 +<623e> <623e> 1491 +<623f> <623f> 1490 +<6240> <6240> 1492 +<6241> <6241> 1839 +<6242> <6243> 6892 +<6246> <6246> 7329 +<6247> <6247> 2242 +<6248> <6248> 2713 +<6249> <6249> 3161 +<624a> <624a> 8523 +<624b> <624b> 723 +<624c> <624c> 17644 +<624d> <624d> 657 +<624e> <624e> 724 +<6250> <6250> 6057 +<6251> <6251> 837 +<6252> <6252> 836 +<6253> <6254> 834 +<6258> <6258> 982 +<6259> <6259> 6130 +<625a> <625a> 6132 +<625b> <625b> 981 +<625c> <625c> 6124 +<625e> <625e> 6125 +<6260> <6260> 6131 +<6261> <6261> 6127 +<6262> <6262> 6129 +<6263> <6263> 980 +<6264> <6264> 6126 +<6265> <6265> 6133 +<6266> <6266> 6128 +<6268> <6268> 16149 +<626d> <626d> 1193 +<626e> <626e> 1202 +<626f> <626f> 1200 +<6270> <6270> 6295 +<6271> <6271> 6292 +<6272> <6272> 6300 +<6273> <6273> 1198 +<6274> <6274> 6301 +<6276> <6276> 1191 +<6277> <6277> 6298 +<6279> <6279> 1197 +<627a> <627a> 6294 +<627b> <627b> 6293 +<627c> <627c> 1195 +<627d> <627d> 6299 +<627e> <627e> 1196 +<627f> <627f> 1493 +<6280> <6280> 1190 +<6281> <6281> 6296 +<6282> <6282> 16262 +<6283> <6283> 6286 +<6284> <6284> 1187 +<6285> <6285> 16208 +<6286> <6286> 1206 +<6287> <6287> 6291 +<6288> <6288> 6297 +<6289> <6289> 1192 +<628a> <628a> 1194 +<628c> <628c> 6287 +<628e> <628f> 6288 +<6290> <6290> 17344 +<6291> <6291> 1205 +<6292> <6292> 1199 +<6293> <6293> 1204 +<6294> <6294> 6290 +<6295> <6295> 1203 +<6296> <6296> 1189 +<6297> <6297> 1188 +<6298> <6298> 1201 +<629d> <629d> 16022 +<62a4> <62a4> 14953 +<62a6> <62a6> 16321 +<62a8> <62a8> 1507 +<62a9> <62a9> 6558 +<62aa> <62aa> 6551 +<62ab> <62ab> 1502 +endcidrange + +100 begincidrange +<62ac> <62ac> 1521 +<62ad> <62ad> 6547 +<62ae> <62ae> 6554 +<62af> <62af> 6556 +<62b0> <62b0> 6559 +<62b1> <62b1> 1516 +<62b3> <62b3> 6555 +<62b4> <62b4> 6548 +<62b5> <62b5> 1514 +<62b6> <62b6> 6552 +<62b8> <62b8> 6560 +<62b9> <62b9> 1499 +<62bb> <62bb> 6557 +<62bc> <62bc> 1509 +<62bd> <62bd> 1508 +<62be> <62be> 6550 +<62bf> <62bf> 1497 +<62c2> <62c2> 1498 +<62c3> <62c3> 15759 +<62c4> <62c4> 1496 +<62c5> <62c5> 16778 +<62c6> <62c6> 1520 +<62c7> <62c7> 1512 +<62c8> <62c8> 1506 +<62c9> <62c9> 1494 +<62ca> <62ca> 6553 +<62cb> <62cb> 1505 +<62cc> <62cc> 1495 +<62cd> <62cd> 1513 +<62ce> <62ce> 1522 +<62cf> <62cf> 6894 +<62d0> <62d0> 1510 +<62d1> <62d1> 6549 +<62d2> <62d2> 1500 +<62d3> <62d4> 1503 +<62d5> <62d5> 16780 +<62d6> <62d7> 1518 +<62d8> <62d8> 1517 +<62d9> <62d9> 1511 +<62da> <62da> 1515 +<62db> <62db> 1501 +<62dc> <62dc> 1840 +<62df> <62df> 16412 +<62e5> <62e5> 17981 +<62eb> <62eb> 6900 +<62ec> <62ec> 1852 +<62ed> <62ed> 1844 +<62ee> <62ee> 1846 +<62ef> <62ef> 1851 +<62f0> <62f0> 6912 +<62f1> <62f1> 1849 +<62f2> <62f2> 7330 +<62f3> <62f3> 2243 +<62f4> <62f4> 1854 +<62f5> <62f5> 6897 +<62f6> <62f6> 6905 +<62f7> <62f7> 1850 +<62f8> <62f8> 6904 +<62f9> <62f9> 6901 +<62fa> <62fa> 6909 +<62fb> <62fb> 6911 +<62fc> <62fc> 1843 +<62fd> <62fd> 1847 +<62fe> <62fe> 1853 +<62ff> <62ff> 2245 +<6300> <6300> 6906 +<6301> <6301> 1845 +<6302> <6302> 1856 +<6303> <6303> 6899 +<6307> <6307> 1848 +<6308> <6308> 2244 +<6309> <6309> 1842 +<630b> <630b> 6896 +<630c> <630c> 6903 +<630d> <630d> 6895 +<630e> <630e> 6898 +<630f> <630f> 6902 +<6310> <6310> 7331 +<6311> <6311> 1855 +<6313> <6314> 6907 +<6315> <6315> 6910 +<6316> <6316> 1841 +<6318> <6318> 17345 +<6328> <6328> 2259 +<6329> <6329> 7343 +<632a> <632b> 2257 +<632c> <632c> 7333 +<632d> <632d> 7349 +<632e> <632e> 16093 +<632f> <632f> 2248 +<6331> <6331> 14949 +<6332> <6332> 7917 +<6333> <6333> 7351 +<6334> <6334> 7345 +<6335> <6335> 16150 +<6336> <6336> 7336 +<6337> <6337> 14947 +<6338> <6338> 7354 +<6339> <6339> 7339 +<633a> <633a> 2254 +endcidrange + +100 begincidrange +<633b> <633b> 7940 +<633c> <633c> 7342 +<633d> <633d> 2256 +<633e> <633e> 2247 +<6340> <6340> 7356 +<6341> <6341> 7344 +<6342> <6342> 2250 +<6343> <6343> 7337 +<6344> <6345> 7334 +<6346> <6346> 2251 +<6347> <6347> 7350 +<6348> <6348> 7357 +<6349> <6349> 2253 +<634a> <634a> 7341 +<634b> <634b> 7340 +<634c> <634c> 2261 +<634d> <634d> 2260 +<634e> <634e> 2246 +<634f> <634f> 2252 +<6350> <6350> 2255 +<6351> <6351> 7353 +<6354> <6354> 7347 +<6355> <6355> 2249 +<6356> <6356> 7332 +<6357> <6357> 7355 +<6358> <6358> 7346 +<6359> <6359> 7348 +<635a> <635a> 7352 +<6364> <6364> 16327 +<6365> <6365> 7918 +<6367> <6367> 2721 +<6368> <6368> 2741 +<6369> <6369> 2740 +<636b> <636b> 2729 +<636c> <636c> 16782 +<636d> <636d> 7936 +<636e> <636e> 7932 +<636f> <636f> 7929 +<6370> <6370> 7947 +<6371> <6371> 2724 +<6372> <6372> 2716 +<6375> <6375> 7934 +<6376> <6376> 3177 +<6377> <6377> 2720 +<6378> <6378> 7942 +<6379> <6379> 17255 +<637a> <637a> 2742 +<637b> <637b> 2739 +<637c> <637c> 7938 +<637d> <637d> 7921 +<637f> <637f> 16203 +<6380> <6380> 2738 +<6381> <6381> 7944 +<6382> <6382> 7920 +<6383> <6383> 2727 +<6384> <6384> 2731 +<6385> <6385> 7943 +<6387> <6387> 7930 +<6388> <6388> 2732 +<6389> <6389> 2726 +<638a> <638a> 7919 +<638b> <638b> 16776 +<638c> <638c> 3163 +<638d> <638d> 7946 +<638e> <638e> 7928 +<638f> <638f> 2737 +<6390> <6390> 7931 +<6391> <6391> 7945 +<6392> <6392> 2736 +<6394> <6394> 8524 +<6396> <6396> 2717 +<6397> <6397> 7926 +<6398> <6398> 2722 +<6399> <6399> 2733 +<639b> <639b> 2728 +<639c> <639c> 7935 +<639d> <639d> 7925 +<639e> <639e> 7923 +<639f> <639f> 7941 +<63a0> <63a0> 2714 +<63a1> <63a1> 2734 +<63a2> <63a2> 2718 +<63a3> <63a3> 3162 +<63a4> <63a4> 7939 +<63a5> <63a5> 2719 +<63a7> <63a7> 2715 +<63a8> <63a8> 2730 +<63a9> <63a9> 2725 +<63aa> <63aa> 2723 +<63ab> <63ab> 7927 +<63ac> <63ac> 2735 +<63ad> <63ad> 7924 +<63ae> <63ae> 7937 +<63af> <63af> 7933 +<63b0> <63b0> 8526 +<63b1> <63b1> 8525 +<63b9> <63b9> 16029 +<63bd> <63bd> 7922 +<63be> <63be> 8542 +<63c0> <63c0> 3165 +endcidrange + +100 begincidrange +<63c1> <63c1> 18088 +<63c2> <63c2> 8548 +<63c3> <63c3> 8531 +<63c4> <63c4> 8545 +<63c5> <63c5> 9190 +<63c6> <63c6> 3168 +<63c7> <63c7> 8549 +<63c8> <63c8> 8552 +<63c9> <63c9> 3167 +<63ca> <63ca> 8534 +<63cb> <63cb> 8551 +<63cc> <63cc> 8550 +<63cd> <63cd> 3169 +<63ce> <63ce> 8527 +<63cf> <63cf> 3164 +<63d0> <63d0> 3172 +<63d1> <63d1> 14950 +<63d2> <63d2> 3170 +<63d3> <63d3> 8547 +<63d5> <63d5> 8537 +<63d6> <63d6> 3174 +<63d7> <63d7> 8554 +<63d8> <63d8> 8546 +<63d9> <63d9> 8555 +<63da> <63da> 3182 +<63db> <63db> 3180 +<63dc> <63dc> 8544 +<63dd> <63dd> 8543 +<63de> <63de> 15968 +<63df> <63df> 8541 +<63e0> <63e0> 8535 +<63e1> <63e1> 3173 +<63e2> <63e2> 17985 +<63e3> <63e3> 3171 +<63e4> <63e4> 7338 +<63e5> <63e5> 8528 +<63e6> <63e6> 18591 +<63e7> <63e7> 9220 +<63e8> <63e8> 8529 +<63e9> <63e9> 3166 +<63ea> <63ea> 3179 +<63eb> <63eb> 9192 +<63ed> <63ee> 3175 +<63ef> <63ef> 8530 +<63f0> <63f0> 8553 +<63f1> <63f1> 9191 +<63f2> <63f2> 8538 +<63f3> <63f3> 8533 +<63f4> <63f4> 3178 +<63f5> <63f5> 8539 +<63f6> <63f6> 8536 +<63f8> <63f8> 16786 +<63f9> <63f9> 3183 +<63fb> <63fb> 17986 +<63fc> <63fc> 16028 +<63fe> <63fe> 16030 +<6406> <6406> 3626 +<6407> <6407> 17987 +<6409> <6409> 9195 +<640a> <640a> 9214 +<640b> <640b> 9219 +<640c> <640c> 9207 +<640d> <640d> 3622 +<640e> <640e> 9224 +<640f> <640f> 3619 +<6410> <6410> 9193 +<6412> <6412> 9194 +<6413> <6413> 3612 +<6414> <6414> 3621 +<6415> <6415> 9201 +<6416> <6417> 3624 +<6418> <6418> 9202 +<641a> <641a> 9215 +<641b> <641b> 9221 +<641c> <641c> 3620 +<641e> <641e> 3614 +<641f> <641f> 9200 +<6420> <6420> 9196 +<6421> <6421> 9223 +<6422> <6423> 9205 +<6424> <6424> 9197 +<6425> <6425> 9217 +<6426> <6426> 9208 +<6427> <6427> 9218 +<6428> <6428> 9210 +<642a> <642a> 3615 +<642b> <642b> 9881 +<642c> <642c> 3618 +<642d> <642d> 3616 +<642e> <642e> 9222 +<642f> <642f> 9213 +<6430> <6430> 9209 +<6432> <6432> 17881 +<6433> <6433> 9198 +<6434> <6434> 4068 +<6435> <6435> 9212 +<6436> <6436> 3623 +<6437> <6437> 9204 +<6438> <6438> 16785 +<6439> <6439> 9203 +endcidrange + +100 begincidrange +<643a> <643a> 16797 +<643b> <643b> 14955 +<643d> <643d> 3617 +<643e> <643e> 3613 +<643f> <643f> 9902 +<6440> <6440> 9216 +<6441> <6441> 9211 +<6443> <6443> 9199 +<644b> <644b> 9897 +<644d> <644d> 9882 +<644e> <644e> 9893 +<6450> <6450> 9900 +<6451> <6451> 4066 +<6452> <6452> 3181 +<6453> <6453> 9898 +<6454> <6454> 4061 +<6458> <6458> 4060 +<6459> <6459> 9905 +<645a> <645a> 17346 +<645b> <645b> 9883 +<645c> <645c> 9896 +<645d> <645d> 9884 +<645e> <645e> 9895 +<645f> <645f> 4064 +<6460> <6460> 9899 +<6461> <6461> 8540 +<6465> <6465> 9906 +<6466> <6466> 9891 +<6467> <6467> 4067 +<6468> <6468> 10478 +<6469> <6469> 4441 +<646b> <646b> 9904 +<646c> <646c> 9903 +<646d> <646d> 4069 +<646e> <646e> 10465 +<646f> <646f> 4442 +<6470> <6470> 10466 +<6471> <6471> 14939 +<6472> <6473> 9887 +<6474> <6474> 9885 +<6475> <6475> 9890 +<6476> <6476> 9886 +<6477> <6477> 9907 +<6478> <6478> 4063 +<6479> <6479> 4443 +<647a> <647a> 4065 +<647b> <647b> 4070 +<647c> <647c> 17260 +<647d> <647d> 9889 +<647f> <647f> 9901 +<6482> <6482> 9894 +<6485> <6485> 10469 +<6487> <6487> 4059 +<6488> <6488> 4446 +<6489> <6489> 11092 +<648a> <648a> 10474 +<648b> <648b> 10473 +<648c> <648c> 10475 +<648d> <648d> 17187 +<648f> <648f> 10472 +<6490> <6490> 4447 +<6491> <6491> 17347 +<6492> <6492> 4453 +<6493> <6493> 4450 +<6495> <6495> 4451 +<6496> <6496> 10467 +<6497> <6497> 10470 +<6498> <6498> 10480 +<6499> <6499> 4459 +<649a> <649a> 4457 +<649c> <649c> 10471 +<649d> <649d> 8532 +<649e> <649e> 4444 +<649f> <649f> 10477 +<64a0> <64a0> 10468 +<64a2> <64a2> 4460 +<64a3> <64a3> 10476 +<64a4> <64a4> 4062 +<64a5> <64a5> 4449 +<64a6> <64a6> 9892 +<64a9> <64a9> 4452 +<64ab> <64ab> 4456 +<64ac> <64ac> 4458 +<64ad> <64ad> 4455 +<64ae> <64ae> 4454 +<64af> <64af> 17121 +<64b0> <64b0> 4448 +<64b1> <64b1> 10479 +<64b2> <64b2> 4445 +<64b3> <64b3> 4461 +<64b4> <64b4> 17216 +<64b6> <64b6> 14948 +<64bb> <64bc> 4795 +<64bd> <64bd> 11091 +<64be> <64be> 4805 +<64bf> <64bf> 4802 +<64c0> <64c0> 17989 +<64c1> <64c1> 4793 +<64c2> <64c2> 4800 +<64c3> <64c3> 11093 +endcidrange + +100 begincidrange +<64c4> <64c4> 4798 +<64c5> <64c5> 4792 +<64c7> <64c7> 4799 +<64c9> <64c9> 11090 +<64ca> <64ca> 5080 +<64cb> <64cb> 4794 +<64cd> <64cd> 4801 +<64ce> <64ce> 5079 +<64cf> <64cf> 11089 +<64d0> <64d0> 11088 +<64d2> <64d2> 4803 +<64d3> <64d3> 16131 +<64d4> <64d4> 4804 +<64d6> <64d6> 11087 +<64d7> <64d7> 11086 +<64d8> <64d8> 5081 +<64d9> <64d9> 11096 +<64da> <64da> 4797 +<64db> <64db> 11094 +<64dd> <64dd> 17182 +<64e0> <64e0> 5082 +<64e1> <64e1> 16793 +<64e2> <64e2> 5087 +<64e3> <64e3> 11626 +<64e4> <64e4> 11628 +<64e5> <64e5> 16794 +<64e6> <64e6> 5084 +<64e7> <64e7> 14248 +<64e8> <64e8> 11629 +<64e9> <64e9> 11625 +<64ea> <64ea> 17226 +<64eb> <64eb> 11627 +<64ec> <64ec> 5085 +<64ed> <64ed> 5088 +<64ef> <64ef> 11624 +<64f0> <64f0> 5083 +<64f1> <64f1> 5086 +<64f2> <64f2> 5331 +<64f3> <64f3> 11095 +<64f4> <64f4> 5330 +<64f7> <64f7> 5336 +<64f8> <64f8> 12075 +<64fa> <64fb> 5334 +<64fc> <64fc> 12078 +<64fd> <64fd> 12074 +<64fe> <64fe> 5332 +<64ff> <64ff> 12072 +<6500> <6500> 5506 +<6501> <6501> 12076 +<6503> <6503> 12077 +<6504> <6504> 12073 +<6506> <6506> 5333 +<6507> <6507> 12432 +<6509> <6509> 12435 +<650a> <650a> 17718 +<650c> <650c> 12436 +<650d> <650d> 12434 +<650e> <650e> 12437 +<650f> <650f> 5507 +<6510> <6510> 12433 +<6511> <6511> 15017 +<6513> <6513> 12759 +<6514> <6514> 5655 +<6515> <6515> 12758 +<6516> <6516> 12757 +<6517> <6517> 12756 +<6518> <6518> 5654 +<6519> <6519> 5656 +<651b> <651b> 13010 +<651c> <651c> 5747 +<651d> <651d> 5746 +<651e> <651e> 16775 +<651f> <651f> 16064 +<6520> <6520> 13186 +<6521> <6521> 13185 +<6522> <6522> 13188 +<6523> <6523> 5881 +<6524> <6524> 5829 +<6525> <6525> 13339 +<6526> <6526> 13187 +<6529> <6529> 13338 +<652a> <652a> 5883 +<652b> <652b> 5882 +<652c> <652c> 5921 +<652d> <652d> 13444 +<652e> <652e> 13514 +<652f> <652f> 725 +<6530> <6530> 15970 +<6532> <6532> 8556 +<6533> <6533> 11097 +<6534> <6534> 556 +<6535> <6535> 17645 +<6536> <6536> 983 +<6537> <6537> 6134 +<6538> <6538> 1209 +<6539> <6539> 1207 +<653b> <653b> 1208 +<653d> <653d> 6561 +<653e> <653e> 1523 +<653f> <653f> 1857 +endcidrange + +100 begincidrange +<6541> <6541> 6913 +<6543> <6543> 6914 +<6545> <6545> 1858 +<6546> <6546> 7359 +<6548> <6549> 2262 +<654a> <654a> 7358 +<654d> <654d> 16799 +<654f> <654f> 2749 +<6551> <6551> 2745 +<6553> <6553> 7948 +<6554> <6554> 2752 +<6555> <6555> 2751 +<6556> <6556> 2744 +<6557> <6557> 2747 +<6558> <6558> 2750 +<6559> <6559> 2746 +<655c> <655c> 8560 +<655d> <655d> 2743 +<655e> <655e> 3184 +<655f> <655f> 16805 +<6562> <6563> 3186 +<6564> <6564> 8559 +<6565> <6565> 8562 +<6566> <6566> 3185 +<6567> <6567> 8557 +<6568> <6568> 8561 +<656a> <656a> 8558 +<656b> <656b> 14956 +<656c> <656c> 3627 +<656d> <656d> 16804 +<656f> <656f> 9225 +<6572> <6572> 4071 +<6573> <6573> 9908 +<6574> <6574> 4806 +<6575> <6575> 4462 +<6576> <6576> 10481 +<6577> <6578> 4463 +<6579> <6579> 10483 +<657a> <657a> 10482 +<657b> <657b> 10484 +<657c> <657c> 11099 +<657f> <657f> 11098 +<6580> <6580> 11631 +<6581> <6581> 11630 +<6582> <6583> 5089 +<6584> <6584> 12438 +<6585> <6585> 16803 +<6586> <6586> 17992 +<6587> <6587> 726 +<6588> <6588> 16651 +<6589> <6589> 17748 +<658c> <658c> 8563 +<6590> <6590> 3189 +<6591> <6591> 3188 +<6592> <6592> 9226 +<6594> <6594> 12079 +<6595> <6595> 5748 +<6596> <6596> 13340 +<6597> <6597> 727 +<6599> <6599> 2264 +<659b> <659b> 2754 +<659c> <659c> 2753 +<659d> <659e> 8564 +<659f> <659f> 3628 +<65a0> <65a0> 9909 +<65a1> <65a1> 4072 +<65a2> <65a2> 11100 +<65a4> <65a4> 728 +<65a5> <65a5> 838 +<65a7> <65a7> 1524 +<65a8> <65a8> 6562 +<65aa> <65aa> 6915 +<65ab> <65ab> 1859 +<65ac> <65ac> 2755 +<65ae> <65ae> 8566 +<65af> <65af> 3190 +<65b0> <65b0> 3629 +<65b2> <65b3> 10485 +<65b5> <65b5> 16807 +<65b6> <65b6> 11632 +<65b7> <65b7> 5337 +<65b8> <65b8> 13515 +<65b9> <65b9> 729 +<65bb> <65bb> 6563 +<65bc> <65bc> 1525 +<65bd> <65bd> 1860 +<65be> <65be> 15931 +<65bf> <65bf> 6916 +<65c1> <65c1> 2265 +<65c2> <65c2> 7363 +<65c3> <65c4> 7361 +<65c5> <65c5> 2266 +<65c6> <65c6> 7360 +<65cb> <65cc> 2757 +<65cd> <65cd> 7949 +<65ce> <65ce> 2759 +<65cf> <65cf> 2756 +<65d0> <65d0> 8567 +<65d1> <65d1> 16810 +<65d2> <65d2> 8568 +endcidrange + +100 begincidrange +<65d3> <65d3> 9227 +<65d4> <65d4> 15272 +<65d6> <65d6> 4074 +<65d7> <65d7> 4073 +<65da> <65da> 11633 +<65db> <65db> 12080 +<65dd> <65dd> 12440 +<65de> <65de> 12439 +<65df> <65df> 12760 +<65e0> <65e0> 557 +<65e1> <65e1> 6025 +<65e2> <65e2> 1861 +<65e3> <65e3> 16814 +<65e5> <65e5> 730 +<65e6> <65e6> 839 +<65e8> <65e8> 985 +<65e9> <65e9> 984 +<65ec> <65ed> 986 +<65ee> <65ee> 6136 +<65ef> <65ef> 6135 +<65f0> <65f0> 6302 +<65f1> <65f1> 1210 +<65f2> <65f2> 6305 +<65f3> <65f3> 6304 +<65f4> <65f4> 6303 +<65f5> <65f5> 6306 +<65fa> <65fa> 1526 +<65fb> <65fb> 6569 +<65fc> <65fc> 6565 +<65fd> <65fd> 6574 +<65ff> <65ff> 17994 +<6600> <6600> 1533 +<6602> <6602> 1531 +<6603> <6603> 6570 +<6604> <6604> 6566 +<6605> <6605> 6573 +<6606> <6606> 1530 +<6607> <6607> 1537 +<6608> <6608> 6568 +<6609> <6609> 6564 +<660a> <660a> 1536 +<660b> <660b> 6571 +<660c> <660c> 1529 +<660d> <660d> 6572 +<660e> <660e> 1532 +<660f> <660f> 1534 +<6610> <6610> 6576 +<6611> <6611> 6575 +<6612> <6612> 6567 +<6613> <6613> 1528 +<6614> <6614> 1527 +<6615> <6615> 1535 +<6618> <6618> 16817 +<661c> <661c> 6921 +<661d> <661d> 6927 +<661e> <661e> 14995 +<661f> <661f> 1867 +<6620> <6620> 1864 +<6621> <6621> 6918 +<6622> <6622> 6923 +<6623> <6623> 17045 +<6624> <6624> 1870 +<6625> <6625> 1862 +<6626> <6626> 6922 +<6627> <6627> 1865 +<6628> <6628> 1868 +<662b> <662b> 6925 +<662d> <662d> 1863 +<662e> <662e> 6930 +<662f> <662f> 1866 +<6630> <6630> 14989 +<6631> <6631> 1869 +<6632> <6632> 6919 +<6633> <6633> 6924 +<6634> <6634> 6928 +<6635> <6635> 6920 +<6636> <6636> 6917 +<6639> <6639> 6929 +<663a> <663a> 6926 +<6641> <6641> 2274 +<6642> <6642> 2267 +<6643> <6643> 2270 +<6644> <6644> 16820 +<6645> <6645> 2273 +<6647> <6647> 7366 +<6648> <6648> 15769 +<6649> <6649> 2268 +<664a> <664a> 7364 +<664b> <664b> 16823 +<664c> <664c> 2272 +<664f> <664f> 2269 +<6651> <6651> 7367 +<6652> <6652> 2271 +<6653> <6653> 17995 +<6657> <6657> 16539 +<6659> <6659> 7953 +<665a> <665a> 2761 +<665b> <665b> 7952 +<665c> <665c> 7954 +<665d> <665d> 2760 +endcidrange + +100 begincidrange +<665e> <665e> 2765 +<665f> <665f> 7365 +<6661> <6661> 7951 +<6662> <6662> 7955 +<6663> <6663> 14992 +<6664> <6664> 2762 +<6665> <6665> 7950 +<6666> <6666> 2764 +<6667> <6667> 16825 +<6668> <6668> 2763 +<666a> <666a> 8575 +<666b> <666b> 14987 +<666c> <666c> 8570 +<666e> <666e> 3191 +<666f> <666f> 3195 +<6670> <6670> 3192 +<6671> <6671> 8573 +<6672> <6672> 8576 +<6673> <6673> 16827 +<6674> <6674> 3193 +<6676> <6676> 3194 +<6677> <6677> 3199 +<6678> <6678> 9236 +<6679> <6679> 8574 +<667a> <667a> 3197 +<667b> <667b> 8571 +<667c> <667c> 8569 +<667d> <667d> 18075 +<667e> <667e> 3198 +<6680> <6680> 8572 +<6684> <6684> 3635 +<6685> <6685> 16738 +<6686> <6686> 9228 +<6687> <6688> 3632 +<6689> <6689> 3631 +<668a> <668a> 9233 +<668b> <668b> 9232 +<668c> <668c> 9229 +<668d> <668d> 3637 +<668e> <668e> 14985 +<6690> <6690> 9231 +<6691> <6691> 3196 +<6692> <6692> 17997 +<6694> <6694> 9235 +<6695> <6695> 9230 +<6696> <6696> 3634 +<6697> <6697> 3630 +<6698> <6698> 3636 +<6699> <6699> 9234 +<669a> <669a> 15677 +<669d> <669d> 4077 +<669f> <669f> 9912 +<66a0> <66a0> 9911 +<66a1> <66a1> 9910 +<66a2> <66a2> 4075 +<66a4> <66a4> 16570 +<66a8> <66a8> 4076 +<66a9> <66a9> 10489 +<66aa> <66aa> 10492 +<66ab> <66ab> 4466 +<66ad> <66ad> 18760 +<66ae> <66ae> 4465 +<66af> <66af> 10493 +<66b0> <66b0> 10488 +<66b1> <66b1> 4468 +<66b2> <66b2> 10490 +<66b3> <66b3> 16565 +<66b4> <66b4> 4467 +<66b5> <66b5> 10487 +<66b6> <66b6> 15891 +<66b7> <66b7> 10491 +<66b8> <66b8> 4812 +<66b9> <66b9> 4809 +<66ba> <66ba> 11109 +<66bb> <66bb> 11108 +<66bd> <66bd> 11107 +<66be> <66be> 11102 +<66bf> <66bf> 15770 +<66c0> <66c0> 11103 +<66c4> <66c4> 4810 +<66c6> <66c6> 4807 +<66c7> <66c7> 4811 +<66c8> <66c8> 11101 +<66c9> <66c9> 4808 +<66ca> <66cb> 11104 +<66cc> <66cc> 11110 +<66cd> <66cd> 16568 +<66ce> <66ce> 14967 +<66cf> <66cf> 11106 +<66d2> <66d2> 11634 +<66d6> <66d6> 5092 +<66d8> <66d8> 12083 +<66d9> <66d9> 5091 +<66da> <66db> 12081 +<66dc> <66dc> 5338 +<66dd> <66dd> 5509 +<66de> <66de> 12441 +<66e0> <66e0> 5508 +<66e3> <66e4> 12762 +<66e6> <66e6> 5657 +endcidrange + +100 begincidrange +<66e8> <66e8> 12761 +<66e9> <66e9> 5749 +<66eb> <66eb> 13341 +<66ec> <66ec> 5884 +<66ed> <66ee> 13445 +<66f0> <66f0> 731 +<66f1> <66f1> 16004 +<66f2> <66f3> 988 +<66f4> <66f4> 1211 +<66f6> <66f6> 6577 +<66f7> <66f7> 1871 +<66f8> <66f8> 2275 +<66f9> <66f9> 2766 +<66fc> <66fc> 2591 +<66fe> <66ff> 3200 +<6700> <6700> 3056 +<6701> <6701> 8577 +<6702> <6702> 16836 +<6703> <6703> 3638 +<6704> <6704> 9914 +<6705> <6705> 9913 +<6708> <6708> 732 +<6709> <6709> 990 +<670a> <670a> 6578 +<670b> <670b> 1539 +<670c> <670c> 16354 +<670d> <670d> 1538 +<670e> <670e> 15777 +<670f> <6710> 6931 +<6712> <6713> 7368 +<6714> <6715> 2276 +<6716> <6716> 17999 +<6717> <6717> 2278 +<6718> <6718> 7956 +<671b> <671b> 2768 +<671d> <671d> 3203 +<671e> <671e> 15755 +<671f> <671f> 3202 +<6720> <6720> 9237 +<6721> <6721> 9506 +<6722> <6722> 9915 +<6723> <6723> 11111 +<6725> <6725> 14239 +<6726> <6726> 5339 +<6727> <6727> 5658 +<6728> <6728> 733 +<672a> <672b> 842 +<672c> <672c> 841 +<672d> <672d> 844 +<672e> <672e> 840 +<6731> <6731> 993 +<6733> <6733> 6144 +<6734> <6734> 992 +<6735> <6735> 994 +<6736> <6736> 15937 +<6738> <6738> 6139 +<6739> <6739> 6138 +<673a> <673a> 6141 +<673b> <673b> 6140 +<673c> <673c> 6143 +<673d> <673d> 991 +<673e> <673e> 6137 +<673f> <673f> 6142 +<6744> <6744> 16411 +<6745> <6745> 6307 +<6746> <6746> 1221 +<6747> <6747> 6308 +<6748> <6748> 6312 +<6749> <6749> 1220 +<674b> <674b> 6316 +<674c> <674c> 6311 +<674d> <674d> 6314 +<674e> <6751> 1213 +<6753> <6753> 1223 +<6755> <6755> 6310 +<6756> <6756> 1218 +<6757> <6757> 1224 +<6759> <6759> 6309 +<675a> <675a> 6315 +<675c> <675c> 1217 +<675d> <675d> 6313 +<675e> <675e> 1219 +<675f> <675f> 1212 +<6760> <6760> 1222 +<6761> <6761> 15718 +<6762> <6762> 16843 +<6767> <6767> 16842 +<676a> <676a> 1560 +<676c> <676c> 6580 +<676d> <676d> 1540 +<676f> <6770> 1550 +<6771> <6771> 1543 +<6772> <6772> 1561 +<6773> <6773> 1545 +<6774> <6774> 6588 +<6775> <6775> 1556 +<6776> <6776> 6583 +<6777> <6777> 1546 +<6778> <6779> 6598 +<677a> <677a> 6591 +endcidrange + +100 begincidrange +<677b> <677b> 6584 +<677c> <677c> 1559 +<677d> <677d> 6596 +<677e> <677e> 1554 +<677f> <677f> 1552 +<6781> <6781> 6597 +<6783> <6783> 6595 +<6784> <6784> 6587 +<6785> <6785> 6579 +<6786> <6786> 6586 +<6787> <6787> 1547 +<6789> <6789> 1553 +<678b> <678b> 1541 +<678c> <678c> 6590 +<678d> <678d> 6589 +<678e> <678e> 6581 +<678f> <678f> 18113 +<6790> <6790> 1555 +<6791> <6791> 6593 +<6792> <6792> 6582 +<6793> <6793> 1558 +<6794> <6794> 6600 +<6795> <6795> 1542 +<6797> <6797> 1549 +<6798> <6798> 6585 +<6799> <6799> 6594 +<679a> <679a> 1557 +<679c> <679c> 1544 +<679d> <679d> 1548 +<679f> <679f> 6592 +<67a0> <67a0> 15738 +<67a4> <67a4> 18001 +<67ac> <67ac> 16867 +<67ae> <67ae> 6964 +<67af> <67af> 1879 +<67b0> <67b0> 1892 +<67b1> <67b1> 16884 +<67b2> <67b2> 6959 +<67b3> <67b3> 6949 +<67b4> <67b4> 1885 +<67b5> <67b5> 6947 +<67b6> <67b6> 1878 +<67b7> <67b7> 6942 +<67b8> <67b8> 1888 +<67b9> <67b9> 6955 +<67ba> <67ba> 6936 +<67bb> <67bb> 6938 +<67bf> <67bf> 14330 +<67c0> <67c0> 6941 +<67c1> <67c1> 6933 +<67c2> <67c2> 6954 +<67c3> <67c3> 6970 +<67c4> <67c4> 1883 +<67c5> <67c5> 6943 +<67c6> <67c6> 6961 +<67c8> <67c8> 6935 +<67c9> <67ca> 6968 +<67cb> <67cb> 6972 +<67cc> <67cc> 6963 +<67cd> <67cd> 6948 +<67ce> <67ce> 6956 +<67cf> <67cf> 1889 +<67d0> <67d0> 1876 +<67d1> <67d1> 1884 +<67d2> <67d2> 1896 +<67d3> <67d3> 1873 +<67d4> <67d4> 1875 +<67d6> <67d6> 15192 +<67d7> <67d7> 16846 +<67d8> <67d8> 6940 +<67d9> <67d9> 1893 +<67da> <67da> 1886 +<67db> <67db> 6966 +<67dc> <67dc> 6937 +<67dd> <67dd> 1895 +<67de> <67de> 1890 +<67df> <67df> 6946 +<67e2> <67e2> 1894 +<67e3> <67e3> 6953 +<67e4> <67e4> 6945 +<67e5> <67e5> 1887 +<67e6> <67e6> 6965 +<67e7> <67e7> 6957 +<67e9> <67e9> 1881 +<67ea> <67ea> 6971 +<67eb> <67eb> 6944 +<67ec> <67ec> 1877 +<67ed> <67ed> 6962 +<67ee> <67ee> 6952 +<67ef> <67ef> 1882 +<67f0> <67f0> 6958 +<67f1> <67f1> 1874 +<67f2> <67f2> 6934 +<67f3> <67f3> 1891 +<67f4> <67f4> 2293 +<67f5> <67f5> 1880 +<67f6> <67f6> 6951 +<67f7> <67f7> 6950 +<67f8> <67f8> 6939 +<67f9> <67f9> 14742 +endcidrange + +100 begincidrange +<67fa> <67fa> 6967 +<67fc> <67fc> 6960 +<67fe> <67fe> 17749 +<67ff> <67ff> 1872 +<6800> <6800> 17351 +<6801> <6801> 16851 +<6802> <6802> 16328 +<6803> <6803> 15722 +<6804> <6804> 17750 +<680d> <680d> 17025 +<6810> <6810> 14748 +<6812> <6812> 7389 +<6813> <6813> 2300 +<6814> <6814> 7390 +<6816> <6816> 7378 +<6817> <6817> 2289 +<6818> <6818> 2301 +<681a> <681a> 7371 +<681b> <681b> 16498 +<681c> <681c> 7380 +<681d> <681d> 7388 +<681e> <681e> 18114 +<681f> <681f> 7370 +<6820> <6820> 7397 +<6821> <6821> 2279 +<6822> <6822> 16848 +<6825> <6825> 7396 +<6826> <6826> 7391 +<6828> <6828> 7392 +<6829> <6829> 2287 +<682a> <682a> 2298 +<682b> <682b> 7382 +<682d> <682d> 7383 +<682e> <682e> 7393 +<682f> <682f> 7384 +<6831> <6831> 7379 +<6832> <6833> 7373 +<6834> <6834> 7387 +<6835> <6835> 7381 +<6836> <6836> 15918 +<6837> <6837> 16925 +<6838> <6838> 2280 +<6839> <6839> 2284 +<683a> <683a> 7395 +<683b> <683b> 7375 +<683c> <683c> 2296 +<683d> <683d> 2292 +<683e> <683e> 16711 +<6840> <6840> 2295 +<6841> <6841> 2302 +<6842> <6842> 2285 +<6843> <6843> 2297 +<6844> <6844> 7386 +<6845> <6845> 2299 +<6846> <6846> 2282 +<6847> <6847> 15339 +<6848> <6848> 2281 +<6849> <6849> 7372 +<684a> <684a> 18003 +<684b> <684b> 7376 +<684c> <684c> 2290 +<684d> <684d> 7394 +<684e> <684e> 7385 +<684f> <684f> 7377 +<6850> <6850> 2294 +<6851> <6851> 2291 +<6853> <6853> 2283 +<6854> <6854> 2286 +<6855> <6855> 15760 +<6856> <6856> 14356 +<685d> <685d> 16854 +<6865> <6865> 17751 +<686b> <686b> 7977 +<686d> <686e> 7961 +<686f> <686f> 7966 +<6871> <6871> 7981 +<6872> <6872> 7978 +<6874> <6874> 7971 +<6875> <6875> 7970 +<6876> <6876> 2775 +<6877> <6877> 7974 +<6878> <6878> 7989 +<6879> <6879> 7957 +<687b> <687b> 7990 +<687c> <687c> 7976 +<687d> <687d> 7994 +<687e> <687e> 7982 +<687f> <687f> 2774 +<6880> <6880> 7980 +<6881> <6881> 2769 +<6882> <6882> 2790 +<6883> <6883> 2780 +<6884> <6884> 18004 +<6885> <6885> 2784 +<6886> <6886> 2783 +<6887> <6887> 7958 +<6888> <6888> 18103 +<6889> <6889> 7987 +<688a> <688a> 7993 +<688b> <688b> 7985 +endcidrange + +100 begincidrange +<688c> <688c> 7992 +<688f> <688f> 7973 +<6890> <6890> 7959 +<6891> <6891> 7991 +<6892> <6892> 7975 +<6893> <6893> 2772 +<6894> <6894> 2785 +<6896> <6896> 7984 +<6897> <6897> 2778 +<6898> <6898> 15018 +<689b> <689b> 7983 +<689c> <689c> 7960 +<689d> <689d> 2786 +<689f> <689f> 2788 +<68a0> <68a0> 7986 +<68a1> <68a1> 2789 +<68a2> <68a2> 2771 +<68a3> <68a3> 7967 +<68a4> <68a4> 7988 +<68a6> <68a6> 16612 +<68a7> <68a7> 2777 +<68a8> <68a8> 2787 +<68a9> <68a9> 7969 +<68aa> <68aa> 7979 +<68ab> <68ab> 7964 +<68ac> <68ac> 7968 +<68ad> <68ad> 2782 +<68ae> <68ae> 7963 +<68af> <68af> 2770 +<68b0> <68b0> 2779 +<68b1> <68b1> 2776 +<68b2> <68b2> 7972 +<68b3> <68b3> 2288 +<68b4> <68b4> 8600 +<68b5> <68b5> 2773 +<68b6> <68b6> 15006 +<68b9> <68b9> 15636 +<68bd> <68bd> 17020 +<68c3> <68c3> 16860 +<68c4> <68c4> 2781 +<68c5> <68c5> 15406 +<68c6> <68c6> 8603 +<68c7> <68c7> 8625 +<68c8> <68c8> 8614 +<68c9> <68c9> 3223 +<68ca> <68ca> 17131 +<68cb> <68cb> 3218 +<68cc> <68cc> 8597 +<68cd> <68cd> 3219 +<68ce> <68ce> 8613 +<68d0> <68d0> 8606 +<68d1> <68d1> 8619 +<68d2> <68d2> 3215 +<68d3> <68d3> 8579 +<68d4> <68d4> 8621 +<68d5> <68d5> 3205 +<68d6> <68d6> 8587 +<68d7> <68d7> 3208 +<68d8> <68d8> 3207 +<68da> <68da> 3224 +<68dc> <68dc> 8581 +<68dd> <68de> 8615 +<68df> <68df> 3210 +<68e0> <68e0> 3206 +<68e1> <68e1> 8595 +<68e3> <68e3> 3217 +<68e4> <68e4> 8590 +<68e6> <68e6> 8617 +<68e7> <68e7> 3213 +<68e8> <68e8> 8609 +<68e9> <68e9> 8622 +<68ea> <68ea> 8584 +<68eb> <68eb> 8589 +<68ec> <68ec> 8583 +<68ee> <68ee> 3212 +<68ef> <68ef> 8602 +<68f0> <68f0> 9259 +<68f1> <68f1> 8585 +<68f2> <68f2> 3216 +<68f3> <68f3> 8594 +<68f4> <68f4> 8618 +<68f5> <68f5> 3211 +<68f6> <68f6> 8591 +<68f7> <68f7> 8588 +<68f8> <68f8> 8605 +<68f9> <68f9> 3214 +<68fa> <68fa> 3204 +<68fb> <68fb> 3226 +<68fc> <68fc> 8608 +<68fd> <68fd> 8607 +<6900> <6900> 16863 +<6901> <6901> 16862 +<6902> <6902> 17147 +<6903> <6903> 17052 +<6904> <6904> 8580 +<6905> <6905> 3209 +<6906> <6906> 8620 +<6907> <6907> 8596 +<6908> <6908> 8598 +<6909> <6909> 18008 +endcidrange + +100 begincidrange +<690a> <690a> 8611 +<690b> <690b> 8610 +<690c> <690c> 8578 +<690d> <690d> 3220 +<690e> <690e> 3222 +<690f> <690f> 8586 +<6910> <6910> 8593 +<6911> <6911> 8601 +<6912> <6912> 3221 +<6913> <6913> 8592 +<6914> <6914> 8604 +<6915> <6915> 8623 +<6917> <6917> 8612 +<6918> <6918> 15778 +<691a> <691a> 15744 +<691b> <691b> 14269 +<6925> <6925> 8624 +<692a> <692a> 8582 +<692c> <692c> 16184 +<692f> <692f> 9279 +<6930> <6930> 3646 +<6932> <6932> 9277 +<6933> <6933> 9256 +<6934> <6934> 9261 +<6935> <6935> 9254 +<6936> <6936> 16871 +<6937> <6937> 9273 +<6938> <6938> 9240 +<6939> <6939> 9247 +<693b> <693b> 9271 +<693c> <693c> 9281 +<693d> <693d> 9257 +<693e> <693e> 16470 +<693f> <693f> 9244 +<6940> <6940> 9263 +<6941> <6941> 9268 +<6942> <6942> 9248 +<6943> <6943> 18009 +<6944> <6944> 9265 +<6945> <6945> 9245 +<6946> <6946> 17775 +<6948> <6949> 9252 +<694a> <694a> 3648 +<694b> <694b> 9272 +<694c> <694c> 9270 +<694e> <694e> 9241 +<694f> <694f> 9275 +<6951> <6951> 9276 +<6952> <6952> 9278 +<6953> <6953> 3652 +<6954> <6954> 3644 +<6955> <6955> 15750 +<6956> <6956> 7965 +<6957> <6957> 9249 +<6958> <6958> 9267 +<6959> <6959> 9250 +<695a> <695a> 3641 +<695b> <695b> 3657 +<695c> <695c> 9274 +<695d> <695d> 3655 +<695e> <695e> 3651 +<695f> <695f> 9239 +<6960> <6960> 3643 +<6961> <6961> 16868 +<6962> <6962> 9242 +<6963> <6963> 3656 +<6964> <6964> 18011 +<6965> <6965> 9258 +<6966> <6966> 9238 +<6967> <6967> 15637 +<6968> <6968> 3649 +<6969> <6969> 9262 +<696a> <696a> 9246 +<696b> <696b> 3650 +<696c> <696c> 9255 +<696d> <696d> 3640 +<696e> <696e> 3225 +<696f> <696f> 9264 +<6970> <6970> 8599 +<6971> <6971> 9243 +<6972> <6972> 14957 +<6973> <6973> 16859 +<6974> <6974> 9269 +<6975> <6975> 3645 +<6976> <6976> 9266 +<6977> <6977> 3642 +<6978> <6978> 9260 +<6979> <6979> 3653 +<697a> <697a> 9251 +<697b> <697b> 9280 +<6980> <6980> 16190 +<6982> <6982> 3647 +<6983> <6983> 9391 +<6985> <6985> 18013 +<6986> <6986> 3654 +<698a> <698a> 15732 +<698d> <698d> 9929 +<698e> <698e> 9927 +<6990> <6990> 9949 +<6991> <6991> 9925 +endcidrange + +100 begincidrange +<6993> <6993> 9943 +<6994> <6994> 3639 +<6995> <6995> 4080 +<6996> <6996> 9921 +<6997> <6997> 9948 +<6998> <6998> 16872 +<6999> <6999> 9926 +<699a> <699a> 9940 +<699b> <699b> 4085 +<699c> <699c> 4078 +<699e> <699e> 9946 +<699f> <699f> 18012 +<69a0> <69a0> 9919 +<69a1> <69a1> 9945 +<69a2> <69a2> 14128 +<69a3> <69a3> 4096 +<69a4> <69a4> 9936 +<69a5> <69a5> 9952 +<69a6> <69a6> 4094 +<69a7> <69a7> 9928 +<69a8> <69a8> 4079 +<69a9> <69a9> 9930 +<69aa> <69aa> 9944 +<69ab> <69ab> 4088 +<69ac> <69ac> 9923 +<69ad> <69ad> 4092 +<69ae> <69ae> 4082 +<69af> <69af> 9932 +<69b0> <69b0> 9922 +<69b1> <69b1> 9916 +<69b2> <69b2> 16374 +<69b3> <69b3> 9942 +<69b4> <69b4> 4089 +<69b5> <69b5> 9951 +<69b6> <69b6> 9917 +<69b7> <69b7> 4086 +<69b9> <69b9> 9938 +<69bb> <69bb> 4087 +<69bc> <69bc> 9924 +<69bd> <69bd> 9935 +<69be> <69be> 9931 +<69bf> <69bf> 9933 +<69c0> <69c0> 16221 +<69c1> <69c1> 4081 +<69c2> <69c2> 9950 +<69c3> <69c3> 4095 +<69c4> <69c4> 9934 +<69c6> <69c6> 9953 +<69c9> <69c9> 9918 +<69ca> <69ca> 9939 +<69cb> <69cb> 4084 +<69cc> <69cc> 4093 +<69cd> <69cd> 4091 +<69ce> <69ce> 9920 +<69cf> <69cf> 9941 +<69d0> <69d0> 4090 +<69d1> <69d1> 14831 +<69d3> <69d3> 4083 +<69d4> <69d4> 9937 +<69d5> <69d5> 15932 +<69d6> <69d6> 18014 +<69d9> <69d9> 9947 +<69e1> <69e1> 16856 +<69e2> <69e2> 10505 +<69e4> <69e4> 10501 +<69e5> <69e5> 10497 +<69e6> <69e6> 10517 +<69e7> <69e7> 10514 +<69e8> <69e8> 4471 +<69e9> <69e9> 15761 +<69eb> <69eb> 10521 +<69ec> <69ec> 10504 +<69ed> <69ed> 4482 +<69ee> <69ee> 10511 +<69f1> <69f1> 10500 +<69f2> <69f2> 10510 +<69f3> <69f3> 4479 +<69f4> <69f4> 10530 +<69f6> <69f6> 10527 +<69f7> <69f7> 10513 +<69f8> <69f8> 10498 +<69f9> <69f9> 16877 +<69fa> <69fa> 16839 +<69fb> <69fb> 10518 +<69fc> <69fc> 10520 +<69fd> <69fd> 4475 +<69fe> <69fe> 10508 +<69ff> <69ff> 10503 +<6a00> <6a00> 10494 +<6a01> <6a01> 4472 +<6a02> <6a02> 4480 +<6a03> <6a03> 15913 +<6a04> <6a04> 10523 +<6a05> <6a05> 4481 +<6a06> <6a06> 10495 +<6a07> <6a07> 10529 +<6a08> <6a08> 10516 +<6a09> <6a09> 10522 +<6a0a> <6a0a> 4478 +<6a0b> <6a0b> 16857 +endcidrange + +100 begincidrange +<6a0c> <6a0c> 15696 +<6a0d> <6a0d> 10519 +<6a0f> <6a0f> 10526 +<6a11> <6a11> 4483 +<6a13> <6a13> 4477 +<6a14> <6a14> 10512 +<6a15> <6a15> 10499 +<6a16> <6a16> 10531 +<6a17> <6a17> 10496 +<6a18> <6a18> 10524 +<6a19> <6a19> 4474 +<6a1a> <6a1a> 15646 +<6a1b> <6a1b> 10506 +<6a1c> <6a1c> 15208 +<6a1d> <6a1d> 10507 +<6a1e> <6a1e> 4473 +<6a1f> <6a1f> 4470 +<6a20> <6a20> 10502 +<6a21> <6a21> 4476 +<6a23> <6a23> 4469 +<6a25> <6a25> 10525 +<6a26> <6a26> 10528 +<6a27> <6a27> 10509 +<6a28> <6a28> 11124 +<6a2b> <6a2b> 15682 +<6a2c> <6a2c> 17067 +<6a2d> <6a2d> 15135 +<6a32> <6a32> 11116 +<6a33> <6a33> 15012 +<6a34> <6a34> 11112 +<6a35> <6a35> 4825 +<6a38> <6a38> 4814 +<6a39> <6a39> 4819 +<6a3a> <6a3a> 4815 +<6a3b> <6a3b> 11126 +<6a3c> <6a3c> 11137 +<6a3d> <6a3d> 4813 +<6a3e> <6a3e> 11118 +<6a3f> <6a3f> 11127 +<6a40> <6a40> 10515 +<6a41> <6a41> 11128 +<6a44> <6a44> 4820 +<6a45> <6a45> 16880 +<6a46> <6a46> 11143 +<6a47> <6a47> 4824 +<6a48> <6a48> 4827 +<6a49> <6a49> 11114 +<6a4b> <6a4b> 4823 +<6a4c> <6a4c> 15019 +<6a4d> <6a4e> 11141 +<6a4f> <6a4f> 11132 +<6a50> <6a50> 11131 +<6a51> <6a51> 11123 +<6a52> <6a52> 15013 +<6a53> <6a53> 14252 +<6a54> <6a54> 11133 +<6a55> <6a55> 11140 +<6a56> <6a56> 11139 +<6a57> <6a57> 14298 +<6a58> <6a58> 4818 +<6a59> <6a59> 4816 +<6a5a> <6a5a> 11125 +<6a5b> <6a5b> 11122 +<6a5d> <6a5d> 11119 +<6a5e> <6a5e> 11138 +<6a5f> <6a5f> 4826 +<6a60> <6a60> 11136 +<6a61> <6a61> 4822 +<6a62> <6a62> 4821 +<6a64> <6a64> 11130 +<6a65> <6a65> 18016 +<6a66> <6a66> 11113 +<6a67> <6a67> 11115 +<6a68> <6a68> 11117 +<6a69> <6a69> 11135 +<6a6a> <6a6a> 11129 +<6a6b> <6a6b> 4817 +<6a6d> <6a6d> 11120 +<6a6f> <6a6f> 11134 +<6a71> <6a71> 18018 +<6a74> <6a74> 18017 +<6a76> <6a76> 11121 +<6a7a> <6a7a> 15021 +<6a7e> <6a7e> 5100 +<6a7f> <6a7f> 11652 +<6a80> <6a80> 5093 +<6a81> <6a81> 11637 +<6a82> <6a82> 18019 +<6a83> <6a83> 11648 +<6a84> <6a84> 5095 +<6a85> <6a85> 11655 +<6a87> <6a87> 11644 +<6a89> <6a89> 11639 +<6a8a> <6a8a> 16694 +<6a8c> <6a8c> 11656 +<6a8d> <6a8d> 11635 +<6a8e> <6a8e> 11646 +<6a8f> <6a8f> 15387 +<6a90> <6a90> 5102 +<6a91> <6a91> 11651 +endcidrange + +100 begincidrange +<6a92> <6a92> 11657 +<6a93> <6a93> 11645 +<6a94> <6a94> 5094 +<6a95> <6a95> 11647 +<6a96> <6a96> 11636 +<6a97> <6a97> 5101 +<6a99> <6a99> 18021 +<6a9a> <6a9a> 11654 +<6a9b> <6a9b> 11641 +<6a9c> <6a9c> 5097 +<6a9d> <6a9d> 16882 +<6a9e> <6a9e> 11643 +<6a9f> <6a9f> 11640 +<6aa0> <6aa0> 5103 +<6aa1> <6aa1> 11642 +<6aa2> <6aa2> 5096 +<6aa3> <6aa3> 5099 +<6aa4> <6aa4> 11650 +<6aa5> <6aa5> 11638 +<6aa6> <6aa6> 11653 +<6aa7> <6aa7> 14307 +<6aa8> <6aa8> 11649 +<6aab> <6aab> 18023 +<6aac> <6aac> 5341 +<6aad> <6aad> 12094 +<6aae> <6aaf> 5346 +<6ab1> <6ab1> 15955 +<6ab2> <6ab2> 15179 +<6ab3> <6ab3> 5340 +<6ab4> <6ab4> 12093 +<6ab5> <6ab5> 18024 +<6ab6> <6ab7> 12090 +<6ab8> <6ab8> 5344 +<6ab9> <6ab9> 12085 +<6aba> <6aba> 12089 +<6abb> <6abb> 5343 +<6abd> <6abd> 12086 +<6abe> <6abe> 15009 +<6ac2> <6ac2> 5345 +<6ac3> <6ac3> 5342 +<6ac5> <6ac5> 12084 +<6ac6> <6ac6> 12088 +<6ac7> <6ac7> 12092 +<6ac8> <6ac8> 16885 +<6ac9> <6ac9> 15014 +<6aca> <6aca> 16204 +<6acb> <6acb> 12447 +<6acc> <6acc> 12444 +<6acd> <6acd> 12453 +<6acf> <6acf> 12452 +<6ad0> <6ad0> 12450 +<6ad1> <6ad1> 12445 +<6ad3> <6ad3> 5513 +<6ad4> <6ad4> 18025 +<6ad8> <6ad8> 15530 +<6ad9> <6ad9> 12446 +<6ada> <6ada> 5512 +<6adb> <6adb> 5098 +<6adc> <6adc> 12449 +<6add> <6add> 5511 +<6ade> <6ade> 12454 +<6adf> <6adf> 12448 +<6ae0> <6ae0> 12443 +<6ae1> <6ae1> 12087 +<6ae5> <6ae5> 5510 +<6ae7> <6ae7> 12442 +<6ae8> <6ae8> 12767 +<6aea> <6aea> 12766 +<6aeb> <6aeb> 12451 +<6aec> <6aec> 5659 +<6aee> <6aef> 12770 +<6af0> <6af0> 12765 +<6af1> <6af1> 12769 +<6af3> <6af3> 12764 +<6af6> <6af6> 18026 +<6af8> <6af8> 13014 +<6af9> <6af9> 12768 +<6afa> <6afa> 5752 +<6afb> <6afb> 5750 +<6afc> <6afc> 13012 +<6b00> <6b00> 13015 +<6b02> <6b02> 13011 +<6b03> <6b03> 13013 +<6b04> <6b04> 5751 +<6b05> <6b05> 15015 +<6b08> <6b09> 13190 +<6b0a> <6b0a> 5830 +<6b0b> <6b0b> 13189 +<6b0f> <6b0f> 13344 +<6b10> <6b10> 5885 +<6b11> <6b12> 13342 +<6b13> <6b13> 13447 +<6b16> <6b16> 5955 +<6b17> <6b17> 13518 +<6b18> <6b19> 13516 +<6b1a> <6b1a> 13519 +<6b1d> <6b1d> 16888 +<6b1e> <6b1e> 13620 +<6b20> <6b20> 734 +<6b21> <6b21> 995 +endcidrange + +100 begincidrange +<6b23> <6b23> 1562 +<6b25> <6b25> 6601 +<6b28> <6b28> 6973 +<6b2c> <6b2c> 7398 +<6b2d> <6b2d> 7400 +<6b2f> <6b2f> 7399 +<6b31> <6b31> 7401 +<6b32> <6b32> 2791 +<6b33> <6b33> 7996 +<6b34> <6b34> 7402 +<6b35> <6b35> 16891 +<6b36> <6b36> 7995 +<6b37> <6b38> 7997 +<6b39> <6b39> 8626 +<6b3a> <6b3a> 3228 +<6b3b> <6b3b> 8627 +<6b3c> <6b3c> 8629 +<6b3d> <6b3d> 3229 +<6b3e> <6b3e> 3227 +<6b3f> <6b3f> 8628 +<6b41> <6b41> 9287 +<6b42> <6b42> 9285 +<6b43> <6b43> 9284 +<6b45> <6b45> 9283 +<6b46> <6b46> 9282 +<6b47> <6b47> 3658 +<6b48> <6b48> 9286 +<6b49> <6b49> 4097 +<6b4a> <6b4a> 9954 +<6b4b> <6b4b> 9956 +<6b4c> <6b4c> 4098 +<6b4d> <6b4d> 9955 +<6b4e> <6b4e> 4485 +<6b50> <6b50> 4484 +<6b51> <6b51> 10532 +<6b52> <6b52> 16238 +<6b54> <6b54> 11145 +<6b55> <6b55> 11144 +<6b56> <6b56> 11146 +<6b57> <6b57> 15022 +<6b59> <6b59> 4828 +<6b5b> <6b5b> 11658 +<6b5c> <6b5c> 5104 +<6b5e> <6b5e> 12095 +<6b5f> <6b5f> 5348 +<6b60> <6b60> 12455 +<6b61> <6b61> 5831 +<6b62> <6b62> 735 +<6b63> <6b63> 845 +<6b64> <6b64> 996 +<6b65> <6b65> 1225 +<6b66> <6b67> 1563 +<6b6a> <6b6a> 1897 +<6b6d> <6b6d> 7403 +<6b6f> <6b6f> 17685 +<6b72> <6b72> 3659 +<6b74> <6b74> 16892 +<6b76> <6b76> 10658 +<6b77> <6b77> 4829 +<6b78> <6b78> 5349 +<6b79> <6b79> 736 +<6b7a> <6b7a> 17646 +<6b7b> <6b7b> 997 +<6b7e> <6b7e> 6603 +<6b7f> <6b7f> 1565 +<6b80> <6b80> 6602 +<6b81> <6b81> 18027 +<6b82> <6b82> 6974 +<6b83> <6b83> 1898 +<6b84> <6b84> 6975 +<6b86> <6b86> 1899 +<6b88> <6b88> 7405 +<6b89> <6b89> 2304 +<6b8a> <6b8a> 2303 +<6b8c> <6b8c> 8003 +<6b8d> <6b8e> 8001 +<6b8f> <6b8f> 8000 +<6b91> <6b91> 7999 +<6b94> <6b94> 8630 +<6b95> <6b95> 8633 +<6b96> <6b96> 3231 +<6b97> <6b97> 8631 +<6b98> <6b98> 3230 +<6b99> <6b99> 8632 +<6b9b> <6b9b> 9288 +<6b9e> <6ba0> 9957 +<6ba2> <6ba2> 10535 +<6ba3> <6ba3> 10534 +<6ba4> <6ba4> 4486 +<6ba5> <6ba5> 10533 +<6ba6> <6ba6> 10536 +<6ba7> <6ba7> 11147 +<6baa> <6bab> 11148 +<6bad> <6bad> 11659 +<6bae> <6bae> 5105 +<6baf> <6baf> 5350 +<6bb0> <6bb0> 12456 +<6bb2> <6bb2> 5753 +<6bb3> <6bb3> 6026 +<6bb5> <6bb5> 1900 +endcidrange + +100 begincidrange +<6bb6> <6bb6> 6976 +<6bb7> <6bb7> 2305 +<6bba> <6bba> 2792 +<6bbc> <6bbc> 3232 +<6bbd> <6bbd> 8634 +<6bbf> <6bbf> 3661 +<6bc0> <6bc0> 3660 +<6bc1> <6bc1> 18028 +<6bc3> <6bc4> 9960 +<6bc5> <6bc6> 4487 +<6bc7> <6bc7> 11151 +<6bc8> <6bc8> 11150 +<6bc9> <6bc9> 12096 +<6bca> <6bca> 13345 +<6bcb> <6bcb> 737 +<6bcc> <6bcc> 6027 +<6bcd> <6bcd> 846 +<6bcf> <6bcf> 1226 +<6bd0> <6bd0> 6317 +<6bd2> <6bd2> 1901 +<6bd3> <6bd3> 3662 +<6bd4> <6bd4> 738 +<6bd6> <6bd6> 6977 +<6bd7> <6bd7> 1902 +<6bd8> <6bd8> 6978 +<6bda> <6bda> 5106 +<6bdb> <6bdb> 739 +<6bdc> <6bdc> 16903 +<6bde> <6bde> 6604 +<6be0> <6be0> 6979 +<6be1> <6be1> 16901 +<6be2> <6be2> 7410 +<6be3> <6be3> 7409 +<6be4> <6be4> 7407 +<6be6> <6be6> 7406 +<6be7> <6be7> 7411 +<6be8> <6be8> 7408 +<6bea> <6bea> 18029 +<6beb> <6bec> 2793 +<6bef> <6bef> 3233 +<6bf0> <6bf0> 8635 +<6bf2> <6bf3> 8636 +<6bf7> <6bf8> 9292 +<6bf9> <6bf9> 9291 +<6bfa> <6bfa> 16249 +<6bfb> <6bfc> 9289 +<6bfd> <6bfd> 3663 +<6bfe> <6bfe> 9962 +<6bff> <6bff> 10539 +<6c00> <6c00> 10538 +<6c01> <6c01> 10537 +<6c02> <6c02> 10540 +<6c03> <6c03> 11153 +<6c04> <6c04> 11152 +<6c05> <6c05> 4830 +<6c06> <6c06> 11154 +<6c08> <6c08> 5107 +<6c09> <6c09> 11660 +<6c0b> <6c0b> 12097 +<6c0c> <6c0c> 12457 +<6c0d> <6c0d> 13192 +<6c0f> <6c0f> 740 +<6c10> <6c10> 848 +<6c11> <6c11> 847 +<6c13> <6c13> 1566 +<6c14> <6c14> 6028 +<6c15> <6c15> 6058 +<6c16> <6c16> 998 +<6c18> <6c18> 6145 +<6c19> <6c1a> 6318 +<6c1b> <6c1b> 1567 +<6c1c> <6c1c> 14507 +<6c1d> <6c1d> 6605 +<6c1f> <6c1f> 1903 +<6c20> <6c21> 6980 +<6c23> <6c23> 2306 +<6c24> <6c24> 2310 +<6c25> <6c25> 7412 +<6c26> <6c26> 2309 +<6c27> <6c28> 2307 +<6c2a> <6c2a> 8004 +<6c2b> <6c2b> 2795 +<6c2c> <6c2c> 3236 +<6c2e> <6c2f> 3234 +<6c30> <6c30> 8638 +<6c31> <6c31> 16227 +<6c33> <6c33> 4099 +<6c34> <6c34> 741 +<6c35> <6c35> 17647 +<6c36> <6c36> 6059 +<6c37> <6c37> 16904 +<6c38> <6c38> 849 +<6c39> <6c39> 15877 +<6c3a> <6c3a> 17648 +<6c3b> <6c3b> 6062 +<6c3d> <6c3d> 17281 +<6c3e> <6c3e> 852 +<6c3f> <6c3f> 6061 +<6c40> <6c40> 851 +<6c41> <6c41> 850 +endcidrange + +100 begincidrange +<6c42> <6c42> 1227 +<6c43> <6c43> 6060 +<6c46> <6c46> 6146 +<6c49> <6c49> 16525 +<6c4a> <6c4a> 6150 +<6c4b> <6c4c> 6152 +<6c4d> <6c4e> 1008 +<6c4f> <6c4f> 6149 +<6c50> <6c50> 1004 +<6c52> <6c52> 6147 +<6c54> <6c54> 6151 +<6c55> <6c55> 1005 +<6c57> <6c57> 1000 +<6c58> <6c58> 15290 +<6c59> <6c59> 1001 +<6c5a> <6c5a> 16908 +<6c5b> <6c5b> 1007 +<6c5c> <6c5c> 6148 +<6c5d> <6c5d> 999 +<6c5e> <6c5e> 1228 +<6c5f> <6c60> 1002 +<6c61> <6c61> 1006 +<6c65> <6c65> 6336 +<6c66> <6c66> 6334 +<6c67> <6c67> 6321 +<6c68> <6c68> 1240 +<6c69> <6c69> 6328 +<6c6a> <6c6a> 1235 +<6c6b> <6c6b> 6322 +<6c6d> <6c6d> 6330 +<6c6e> <6c6e> 16586 +<6c6f> <6c6f> 6327 +<6c70> <6c70> 1238 +<6c71> <6c71> 6326 +<6c72> <6c72> 1245 +<6c73> <6c73> 6335 +<6c74> <6c74> 1247 +<6c75> <6c75> 18030 +<6c76> <6c76> 1249 +<6c78> <6c78> 6320 +<6c79> <6c79> 16910 +<6c7a> <6c7a> 1236 +<6c7b> <6c7b> 6337 +<6c7d> <6c7d> 1243 +<6c7e> <6c7e> 1246 +<6c7f> <6c7f> 14246 +<6c80> <6c80> 6628 +<6c81> <6c81> 1230 +<6c82> <6c82> 1253 +<6c83> <6c83> 1244 +<6c84> <6c84> 6323 +<6c85> <6c85> 1233 +<6c86> <6c86> 1248 +<6c87> <6c87> 6331 +<6c88> <6c89> 1231 +<6c8a> <6c8a> 6626 +<6c8b> <6c8b> 6324 +<6c8c> <6c8c> 1239 +<6c8d> <6c8d> 1250 +<6c8e> <6c8e> 6338 +<6c8f> <6c8f> 6325 +<6c90> <6c90> 1237 +<6c92> <6c92> 1242 +<6c93> <6c93> 6606 +<6c94> <6c94> 1251 +<6c95> <6c95> 6332 +<6c96> <6c96> 1241 +<6c98> <6c98> 1252 +<6c99> <6c99> 1229 +<6c9a> <6c9a> 6329 +<6c9b> <6c9b> 1234 +<6c9c> <6c9c> 6333 +<6c9d> <6c9d> 6627 +<6c9f> <6c9f> 14473 +<6ca2> <6ca2> 15715 +<6caa> <6caa> 18031 +<6cab> <6cab> 1579 +<6cac> <6cac> 1595 +<6cad> <6cad> 6613 +<6cae> <6cae> 1586 +<6caf> <6caf> 15606 +<6cb0> <6cb0> 6634 +<6cb1> <6cb1> 1571 +<6cb2> <6cb2> 16076 +<6cb3> <6cb3> 1574 +<6cb4> <6cb4> 6625 +<6cb6> <6cb6> 6611 +<6cb7> <6cb7> 6615 +<6cb8> <6cb8> 1582 +<6cb9> <6cb9> 1584 +<6cba> <6cba> 6618 +<6cbb> <6cbb> 1591 +<6cbc> <6cbc> 1577 +<6cbd> <6cbe> 1575 +<6cbf> <6cbf> 1590 +<6cc0> <6cc0> 6630 +<6cc1> <6cc1> 1585 +<6cc2> <6cc2> 6617 +<6cc3> <6cc3> 6619 +<6cc4> <6cc4> 1583 +endcidrange + +100 begincidrange +<6cc5> <6cc5> 1588 +<6cc6> <6cc6> 6620 +<6cc7> <6cc7> 6633 +<6cc9> <6cc9> 1904 +<6cca> <6cca> 1594 +<6ccb> <6ccb> 16496 +<6ccc> <6ccc> 1572 +<6ccd> <6ccd> 6632 +<6cce> <6cce> 16273 +<6ccf> <6ccf> 6636 +<6cd0> <6cd0> 6616 +<6cd1> <6cd1> 6638 +<6cd2> <6cd2> 6623 +<6cd3> <6cd3> 1581 +<6cd4> <6cd4> 6612 +<6cd5> <6cd5> 1580 +<6cd6> <6cd6> 1598 +<6cd7> <6cd7> 1587 +<6cd9> <6cd9> 6610 +<6cda> <6cda> 6990 +<6cdb> <6cdb> 1593 +<6cdc> <6cdc> 1597 +<6cdd> <6cdd> 6624 +<6cde> <6cde> 6629 +<6cdf> <6cdf> 15703 +<6ce0> <6ce0> 1599 +<6ce1> <6ce1> 1592 +<6ce2> <6ce2> 1578 +<6ce3> <6ce3> 1568 +<6ce5> <6ce5> 1573 +<6ce7> <6ce7> 6614 +<6ce8> <6ce8> 1569 +<6ce9> <6ce9> 6637 +<6cea> <6cea> 16269 +<6ceb> <6ceb> 6608 +<6cec> <6cec> 6607 +<6ced> <6ced> 6621 +<6cee> <6cee> 6609 +<6cef> <6cef> 1596 +<6cf0> <6cf0> 2311 +<6cf1> <6cf1> 1589 +<6cf2> <6cf2> 6622 +<6cf3> <6cf3> 1570 +<6cf5> <6cf5> 1919 +<6cf9> <6cf9> 6635 +<6d00> <6d00> 6997 +<6d01> <6d01> 7000 +<6d02> <6d02> 18033 +<6d03> <6d03> 7003 +<6d04> <6d04> 6992 +<6d05> <6d05> 14873 +<6d06> <6d06> 18034 +<6d07> <6d07> 7006 +<6d08> <6d08> 7009 +<6d09> <6d09> 7011 +<6d0a> <6d0a> 6989 +<6d0b> <6d0b> 1905 +<6d0c> <6d0c> 1910 +<6d0d> <6d0d> 7417 +<6d0e> <6d0e> 1926 +<6d0f> <6d0f> 7004 +<6d10> <6d10> 7012 +<6d11> <6d11> 6996 +<6d12> <6d12> 6988 +<6d16> <6d16> 7444 +<6d17> <6d17> 1913 +<6d18> <6d18> 7001 +<6d19> <6d19> 6993 +<6d1a> <6d1a> 6995 +<6d1b> <6d1b> 1918 +<6d1d> <6d1d> 6998 +<6d1e> <6d1e> 1912 +<6d1f> <6d1f> 6985 +<6d20> <6d20> 7007 +<6d22> <6d22> 7010 +<6d24> <6d24> 15043 +<6d25> <6d25> 1909 +<6d26> <6d26> 18035 +<6d27> <6d27> 1921 +<6d28> <6d28> 6982 +<6d29> <6d29> 1923 +<6d2a> <6d2a> 1907 +<6d2b> <6d2b> 1927 +<6d2c> <6d2c> 7008 +<6d2d> <6d2d> 6984 +<6d2e> <6d2e> 1924 +<6d2f> <6d2f> 7438 +<6d30> <6d30> 6631 +<6d31> <6d31> 1911 +<6d32> <6d32> 1906 +<6d33> <6d33> 6991 +<6d34> <6d34> 6983 +<6d35> <6d35> 1925 +<6d36> <6d36> 1917 +<6d37> <6d37> 7002 +<6d38> <6d38> 1922 +<6d39> <6d39> 1920 +<6d3a> <6d3a> 6994 +<6d3b> <6d3b> 1914 +<6d3c> <6d3c> 6986 +endcidrange + +100 begincidrange +<6d3d> <6d3e> 1915 +<6d3f> <6d3f> 6987 +<6d40> <6d40> 7005 +<6d41> <6d41> 1908 +<6d42> <6d42> 6999 +<6d4e> <6d4e> 17752 +<6d57> <6d57> 15603 +<6d58> <6d58> 7420 +<6d59> <6d59> 2319 +<6d5a> <6d5a> 2324 +<6d5b> <6d5b> 16540 +<6d5c> <6d5c> 16930 +<6d5e> <6d5e> 7429 +<6d5f> <6d5f> 7435 +<6d60> <6d60> 7431 +<6d61> <6d61> 7418 +<6d62> <6d62> 7421 +<6d63> <6d64> 7414 +<6d65> <6d65> 2331 +<6d66> <6d66> 2316 +<6d67> <6d67> 7430 +<6d68> <6d68> 7439 +<6d69> <6d69> 2326 +<6d6a> <6d6a> 2312 +<6d6c> <6d6c> 2321 +<6d6d> <6d6d> 7422 +<6d6e> <6d6e> 2323 +<6d6f> <6d6f> 7423 +<6d70> <6d70> 7433 +<6d71> <6d71> 16629 +<6d72> <6d72> 14807 +<6d74> <6d74> 2325 +<6d75> <6d75> 7448 +<6d76> <6d76> 7416 +<6d77> <6d77> 2318 +<6d78> <6d78> 2317 +<6d79> <6d79> 2329 +<6d7a> <6d7a> 7413 +<6d7b> <6d7b> 7446 +<6d7c> <6d7c> 7434 +<6d7d> <6d7d> 7447 +<6d7e> <6d7e> 7441 +<6d7f> <6d7f> 7427 +<6d80> <6d80> 7442 +<6d81> <6d81> 18036 +<6d82> <6d82> 7436 +<6d83> <6d83> 7445 +<6d84> <6d84> 7443 +<6d85> <6d85> 2330 +<6d86> <6d86> 7428 +<6d87> <6d87> 2315 +<6d88> <6d88> 2314 +<6d89> <6d89> 2322 +<6d8a> <6d8a> 2328 +<6d8b> <6d8b> 7440 +<6d8c> <6d8c> 2327 +<6d8d> <6d8d> 7425 +<6d8e> <6d8e> 2796 +<6d8f> <6d8f> 15848 +<6d90> <6d90> 7449 +<6d91> <6d91> 7424 +<6d92> <6d92> 7419 +<6d93> <6d93> 2320 +<6d94> <6d94> 2332 +<6d95> <6d95> 2313 +<6d96> <6d96> 16929 +<6d97> <6d97> 7432 +<6d98> <6d98> 7437 +<6da4> <6da4> 18038 +<6da5> <6da5> 15033 +<6daa> <6daa> 2830 +<6dab> <6dab> 8006 +<6dac> <6dac> 8010 +<6dae> <6dae> 2811 +<6daf> <6daf> 2809 +<6db1> <6db1> 18039 +<6db2> <6db2> 2800 +<6db3> <6db3> 8008 +<6db4> <6db4> 8007 +<6db5> <6db5> 2820 +<6db7> <6db7> 8013 +<6db8> <6db8> 2814 +<6db9> <6db9> 16379 +<6dba> <6dba> 8031 +<6dbb> <6dbb> 8043 +<6dbc> <6dbc> 2797 +<6dbd> <6dbd> 8028 +<6dbe> <6dbe> 8021 +<6dbf> <6dbf> 2832 +<6dc0> <6dc0> 8005 +<6dc2> <6dc2> 8033 +<6dc4> <6dc4> 2829 +<6dc5> <6dc5> 2817 +<6dc6> <6dc6> 2828 +<6dc7> <6dc7> 2807 +<6dc8> <6dc8> 8017 +<6dc9> <6dc9> 8035 +<6dca> <6dca> 8027 +<6dcb> <6dcb> 2808 +<6dcc> <6dcc> 2802 +endcidrange + +100 begincidrange +<6dcd> <6dcd> 8041 +<6dcf> <6dcf> 8034 +<6dd0> <6dd0> 8036 +<6dd1> <6dd1> 2810 +<6dd2> <6dd2> 2818 +<6dd3> <6dd3> 8038 +<6dd4> <6dd4> 8015 +<6dd5> <6dd5> 8032 +<6dd6> <6dd6> 8020 +<6dd7> <6dd7> 8040 +<6dd8> <6dd8> 2823 +<6dd9> <6dd9> 2799 +<6dda> <6dda> 2821 +<6ddb> <6ddb> 8025 +<6ddc> <6ddd> 8023 +<6dde> <6dde> 2812 +<6ddf> <6ddf> 8019 +<6de0> <6de0> 8018 +<6de1> <6de1> 2801 +<6de2> <6de2> 8012 +<6de3> <6de3> 8042 +<6de4> <6de4> 2803 +<6de5> <6de5> 8022 +<6de6> <6de6> 2833 +<6de8> <6de8> 2827 +<6de9> <6de9> 8011 +<6dea> <6dea> 2824 +<6deb> <6deb> 2822 +<6dec> <6dec> 2831 +<6ded> <6ded> 8029 +<6dee> <6dee> 2826 +<6def> <6def> 7426 +<6df0> <6df0> 8030 +<6df1> <6df1> 2825 +<6df2> <6df2> 8037 +<6df3> <6df3> 2798 +<6df4> <6df4> 8026 +<6df5> <6df5> 2816 +<6df6> <6df6> 8014 +<6df7> <6df7> 2815 +<6df9> <6df9> 2813 +<6dfa> <6dfa> 2805 +<6dfb> <6dfb> 2804 +<6dfc> <6dfc> 8639 +<6dfd> <6dfd> 8039 +<6e00> <6e00> 8016 +<6e02> <6e02> 15610 +<6e03> <6e03> 8660 +<6e04> <6e04> 15038 +<6e05> <6e05> 2806 +<6e0a> <6e0a> 15041 +<6e0f> <6e0f> 15600 +<6e15> <6e15> 18040 +<6e18> <6e18> 18041 +<6e19> <6e19> 3265 +<6e1a> <6e1a> 2819 +<6e1b> <6e1b> 3247 +<6e1c> <6e1c> 8654 +<6e1d> <6e1d> 3261 +<6e1f> <6e1f> 8642 +<6e20> <6e20> 3244 +<6e21> <6e21> 3240 +<6e22> <6e22> 8672 +<6e23> <6e23> 3246 +<6e24> <6e24> 3250 +<6e25> <6e25> 3245 +<6e26> <6e26> 3254 +<6e27> <6e27> 8676 +<6e28> <6e28> 8667 +<6e29> <6e29> 18042 +<6e2a> <6e2a> 17154 +<6e2b> <6e2b> 8649 +<6e2c> <6e2c> 3259 +<6e2d> <6e2d> 3253 +<6e2e> <6e2e> 8661 +<6e2f> <6e2f> 3237 +<6e30> <6e30> 8673 +<6e31> <6e31> 8666 +<6e32> <6e32> 3241 +<6e33> <6e33> 8655 +<6e34> <6e34> 3256 +<6e35> <6e36> 8684 +<6e38> <6e38> 3238 +<6e39> <6e39> 8671 +<6e3a> <6e3a> 3258 +<6e3b> <6e3b> 8659 +<6e3c> <6e3d> 8645 +<6e3e> <6e3e> 3262 +<6e3f> <6e3f> 8650 +<6e40> <6e40> 8657 +<6e41> <6e41> 8651 +<6e43> <6e43> 3260 +<6e44> <6e44> 3268 +<6e45> <6e45> 8647 +<6e46> <6e47> 8640 +<6e49> <6e49> 8643 +<6e4a> <6e4a> 3243 +<6e4b> <6e4b> 8656 +<6e4d> <6e4d> 3257 +<6e4e> <6e4e> 3266 +endcidrange + +100 begincidrange +<6e4f> <6e4f> 16948 +<6e50> <6e50> 16849 +<6e51> <6e51> 8658 +<6e52> <6e52> 8682 +<6e53> <6e53> 8674 +<6e54> <6e54> 3239 +<6e55> <6e55> 8680 +<6e56> <6e56> 3251 +<6e58> <6e58> 3249 +<6e59> <6e59> 16614 +<6e5a> <6e5a> 8686 +<6e5b> <6e5b> 3248 +<6e5c> <6e5c> 8664 +<6e5d> <6e5d> 8652 +<6e5e> <6e5e> 8662 +<6e5f> <6e5f> 3271 +<6e60> <6e60> 8668 +<6e61> <6e61> 8665 +<6e62> <6e62> 8648 +<6e63> <6e63> 3267 +<6e64> <6e64> 8678 +<6e65> <6e65> 8675 +<6e66> <6e66> 8683 +<6e67> <6e67> 3242 +<6e68> <6e68> 8663 +<6e69> <6e69> 3270 +<6e6b> <6e6b> 8670 +<6e6e> <6e6e> 3252 +<6e6f> <6e6f> 3255 +<6e71> <6e71> 8669 +<6e72> <6e72> 3269 +<6e73> <6e73> 8653 +<6e74> <6e74> 8009 +<6e76> <6e76> 14803 +<6e77> <6e77> 8679 +<6e78> <6e78> 8677 +<6e79> <6e79> 8681 +<6e7c> <6e7c> 16931 +<6e86> <6e86> 18043 +<6e88> <6e88> 8644 +<6e89> <6e89> 3264 +<6e8b> <6e8b> 15295 +<6e8d> <6e8d> 9324 +<6e8e> <6e8e> 9323 +<6e8f> <6e8f> 9297 +<6e90> <6e90> 3669 +<6e92> <6e92> 9322 +<6e93> <6e94> 9300 +<6e96> <6e96> 3679 +<6e97> <6e97> 9331 +<6e98> <6e98> 3674 +<6e99> <6e99> 9321 +<6e9a> <6e9a> 17793 +<6e9b> <6e9b> 9294 +<6e9c> <6e9c> 3680 +<6e9d> <6e9d> 3670 +<6e9e> <6e9e> 9309 +<6e9f> <6e9f> 9299 +<6ea0> <6ea0> 9302 +<6ea1> <6ea1> 9326 +<6ea2> <6ea2> 3664 +<6ea3> <6ea3> 9333 +<6ea4> <6ea4> 9325 +<6ea5> <6ea5> 3673 +<6ea6> <6ea6> 9314 +<6ea7> <6ea7> 3684 +<6eaa> <6eaa> 3683 +<6eab> <6eab> 3677 +<6eae> <6eae> 9332 +<6eaf> <6eaf> 3665 +<6eb0> <6eb0> 9312 +<6eb1> <6eb1> 9303 +<6eb2> <6eb2> 9316 +<6eb3> <6eb3> 9328 +<6eb4> <6eb4> 3685 +<6eb5> <6eb5> 16894 +<6eb6> <6eb6> 3667 +<6eb7> <6eb7> 9311 +<6eb8> <6eb8> 15884 +<6eb9> <6eb9> 9304 +<6eba> <6eba> 3676 +<6ebb> <6ebb> 18045 +<6ebc> <6ebc> 3675 +<6ebd> <6ebd> 9307 +<6ebe> <6ebe> 9317 +<6ebf> <6ebf> 9327 +<6ec0> <6ec0> 9298 +<6ec1> <6ec1> 9308 +<6ec2> <6ec2> 3668 +<6ec3> <6ec3> 9318 +<6ec4> <6ec4> 3681 +<6ec5> <6ec5> 3672 +<6ec6> <6ec6> 9305 +<6ec7> <6ec7> 3671 +<6ec8> <6ec8> 9296 +<6ec9> <6ec9> 9310 +<6eca> <6eca> 9330 +<6ecb> <6ecb> 3263 +<6ecc> <6ecc> 4127 +<6ecd> <6ecd> 9313 +endcidrange + +100 begincidrange +<6ece> <6ece> 9963 +<6ecf> <6ecf> 9315 +<6ed0> <6ed0> 9329 +<6ed1> <6ed1> 3678 +<6ed2> <6ed2> 9306 +<6ed3> <6ed3> 3666 +<6ed4> <6ed4> 3682 +<6ed5> <6ed5> 4506 +<6ed6> <6ed6> 9295 +<6ed8> <6ed8> 9320 +<6ed9> <6ed9> 16489 +<6eda> <6eda> 18047 +<6edb> <6edb> 16431 +<6edc> <6edc> 9319 +<6edd> <6edd> 17720 +<6ee2> <6ee2> 18046 +<6ee8> <6ee9> 18049 +<6eeb> <6eeb> 9991 +<6eec> <6eec> 4124 +<6eed> <6eed> 9980 +<6eee> <6eee> 9985 +<6eef> <6eef> 4113 +<6ef1> <6ef1> 9965 +<6ef2> <6ef2> 4126 +<6ef4> <6ef4> 4104 +<6ef5> <6ef5> 9964 +<6ef6> <6ef6> 9997 +<6ef7> <6ef7> 4128 +<6ef8> <6ef8> 9968 +<6ef9> <6ef9> 9984 +<6efa> <6efa> 16955 +<6efb> <6efb> 9970 +<6efc> <6efc> 10000 +<6efd> <6efd> 9996 +<6efe> <6efe> 4102 +<6eff> <6eff> 4112 +<6f00> <6f00> 10566 +<6f01> <6f01> 4125 +<6f02> <6f02> 4110 +<6f03> <6f03> 9966 +<6f04> <6f04> 16932 +<6f05> <6f05> 9995 +<6f06> <6f06> 4114 +<6f07> <6f07> 9992 +<6f08> <6f08> 10005 +<6f09> <6f09> 9972 +<6f0a> <6f0a> 9981 +<6f0b> <6f0b> 15034 +<6f0c> <6f0c> 15611 +<6f0d> <6f0d> 10003 +<6f0e> <6f0e> 9993 +<6f0f> <6f0f> 4109 +<6f12> <6f12> 9979 +<6f13> <6f13> 4103 +<6f14> <6f14> 4101 +<6f15> <6f15> 4119 +<6f16> <6f16> 16800 +<6f17> <6f17> 18126 +<6f18> <6f18> 9977 +<6f19> <6f1a> 9974 +<6f1c> <6f1c> 9999 +<6f1e> <6f1e> 10004 +<6f1f> <6f1f> 10002 +<6f20> <6f20> 4107 +<6f21> <6f21> 10006 +<6f22> <6f22> 4111 +<6f23> <6f23> 4118 +<6f24> <6f24> 18051 +<6f25> <6f25> 9967 +<6f26> <6f26> 10542 +<6f27> <6f27> 9976 +<6f29> <6f29> 4105 +<6f2a> <6f2a> 4123 +<6f2b> <6f2b> 4120 +<6f2c> <6f2c> 4108 +<6f2d> <6f2d> 9986 +<6f2e> <6f2e> 9971 +<6f2f> <6f2f> 4121 +<6f30> <6f30> 9988 +<6f31> <6f31> 4115 +<6f32> <6f32> 4117 +<6f33> <6f33> 4100 +<6f34> <6f34> 18052 +<6f35> <6f35> 9990 +<6f36> <6f36> 9982 +<6f37> <6f37> 9969 +<6f38> <6f38> 4116 +<6f39> <6f39> 9998 +<6f3a> <6f3a> 10001 +<6f3b> <6f3b> 9978 +<6f3c> <6f3c> 9989 +<6f3d> <6f3d> 17026 +<6f3e> <6f3e> 4106 +<6f3f> <6f3f> 4489 +<6f40> <6f40> 9987 +<6f41> <6f41> 10541 +<6f43> <6f43> 9994 +<6f44> <6f44> 16960 +<6f4e> <6f4e> 9973 +<6f4f> <6f4f> 10551 +endcidrange + +100 begincidrange +<6f50> <6f50> 10561 +<6f51> <6f51> 4492 +<6f52> <6f52> 10560 +<6f53> <6f53> 10572 +<6f54> <6f54> 4494 +<6f55> <6f55> 10558 +<6f56> <6f56> 15954 +<6f57> <6f57> 10562 +<6f58> <6f58> 4505 +<6f5a> <6f5a> 10553 +<6f5b> <6f5b> 4497 +<6f5c> <6f5c> 16961 +<6f5d> <6f5d> 10565 +<6f5e> <6f5e> 11162 +<6f5f> <6f5f> 4509 +<6f60> <6f60> 4508 +<6f61> <6f61> 10567 +<6f62> <6f62> 10550 +<6f63> <6f63> 10577 +<6f64> <6f64> 4503 +<6f66> <6f66> 4493 +<6f67> <6f67> 10570 +<6f69> <6f69> 10574 +<6f6a> <6f6a> 10579 +<6f6b> <6f6b> 10568 +<6f6c> <6f6c> 10556 +<6f6d> <6f6d> 4496 +<6f6e> <6f6e> 4499 +<6f6f> <6f6f> 4507 +<6f70> <6f70> 4502 +<6f72> <6f72> 10559 +<6f73> <6f73> 9983 +<6f74> <6f74> 16963 +<6f76> <6f76> 10555 +<6f77> <6f77> 10578 +<6f78> <6f78> 4498 +<6f79> <6f79> 15294 +<6f7a> <6f7a> 4501 +<6f7b> <6f7b> 10580 +<6f7c> <6f7c> 4490 +<6f7d> <6f7d> 10569 +<6f7e> <6f7e> 10543 +<6f7f> <6f7f> 10575 +<6f80> <6f80> 5116 +<6f81> <6f81> 18055 +<6f82> <6f82> 10557 +<6f84> <6f84> 4491 +<6f85> <6f85> 10552 +<6f86> <6f86> 4495 +<6f87> <6f87> 10544 +<6f88> <6f88> 4122 +<6f89> <6f89> 10548 +<6f8a> <6f8a> 16789 +<6f8b> <6f8b> 10573 +<6f8c> <6f8c> 10549 +<6f8d> <6f8d> 10547 +<6f8e> <6f8e> 4500 +<6f90> <6f90> 10571 +<6f92> <6f92> 10546 +<6f93> <6f93> 10564 +<6f94> <6f94> 10563 +<6f95> <6f95> 10576 +<6f96> <6f96> 10554 +<6f97> <6f97> 4504 +<6f9d> <6f9d> 16953 +<6f9e> <6f9e> 11165 +<6f9f> <6f9f> 16966 +<6fa0> <6fa0> 4843 +<6fa1> <6fa1> 4833 +<6fa2> <6fa2> 11177 +<6fa3> <6fa3> 11157 +<6fa4> <6fa4> 4835 +<6fa5> <6fa5> 11169 +<6fa6> <6fa6> 4842 +<6fa7> <6fa7> 4837 +<6fa8> <6fa8> 11167 +<6fa9> <6fa9> 11662 +<6faa> <6faa> 11173 +<6fab> <6fab> 11179 +<6fac> <6fac> 11172 +<6fad> <6fad> 11155 +<6fae> <6fae> 11170 +<6faf> <6faf> 11181 +<6fb0> <6fb0> 11183 +<6fb1> <6fb1> 4832 +<6fb2> <6fb2> 11182 +<6fb3> <6fb3> 4838 +<6fb4> <6fb4> 4844 +<6fb5> <6fb5> 15911 +<6fb6> <6fb6> 4841 +<6fb8> <6fb8> 11176 +<6fb9> <6fb9> 4840 +<6fba> <6fba> 11171 +<6fbb> <6fbb> 15291 +<6fbc> <6fbc> 11159 +<6fbd> <6fbd> 11164 +<6fbe> <6fbe> 18056 +<6fbf> <6fbf> 11175 +<6fc0> <6fc0> 4839 +<6fc1> <6fc1> 4836 +endcidrange + +100 begincidrange +<6fc2> <6fc2> 4831 +<6fc3> <6fc3> 4834 +<6fc4> <6fc4> 11163 +<6fc6> <6fc6> 10545 +<6fc7> <6fc7> 11158 +<6fc8> <6fc8> 11161 +<6fc9> <6fc9> 11178 +<6fca> <6fca> 11166 +<6fcb> <6fcb> 11156 +<6fcc> <6fcc> 11661 +<6fcd> <6fcd> 11180 +<6fce> <6fce> 11160 +<6fcf> <6fcf> 11174 +<6fd3> <6fd3> 16968 +<6fd4> <6fd4> 11664 +<6fd5> <6fd5> 5120 +<6fd8> <6fd8> 5108 +<6fd9> <6fd9> 15476 +<6fda> <6fda> 15475 +<6fdb> <6fdb> 5112 +<6fdc> <6fdc> 11666 +<6fdd> <6fdd> 11672 +<6fde> <6fde> 11670 +<6fdf> <6fe0> 5110 +<6fe1> <6fe1> 5118 +<6fe2> <6fe2> 11673 +<6fe3> <6fe3> 11665 +<6fe4> <6fe4> 5113 +<6fe6> <6fe6> 11669 +<6fe7> <6fe7> 11668 +<6fe8> <6fe8> 11674 +<6fe9> <6fe9> 5119 +<6feb> <6feb> 5114 +<6fec> <6fec> 5117 +<6fed> <6fed> 11667 +<6fee> <6fee> 5121 +<6fef> <6fef> 5115 +<6ff0> <6ff0> 5122 +<6ff1> <6ff1> 5109 +<6ff2> <6ff2> 11671 +<6ff4> <6ff4> 11663 +<6ff6> <6ff6> 14501 +<6ff7> <6ff7> 12110 +<6ff8> <6ff8> 16951 +<6ffa> <6ffa> 5355 +<6ffb> <6ffb> 12107 +<6ffc> <6ffc> 12109 +<6ffe> <6ffe> 5353 +<6fff> <6fff> 12105 +<7000> <7000> 12106 +<7001> <7001> 12101 +<7003> <7003> 18146 +<7004> <7004> 11168 +<7005> <7005> 12102 +<7006> <7006> 5354 +<7007> <7007> 12098 +<7009> <7009> 5351 +<700a> <700a> 12111 +<700b> <700b> 5352 +<700c> <700d> 12099 +<700e> <700e> 12104 +<700f> <700f> 5357 +<7011> <7011> 5356 +<7014> <7014> 12103 +<7015> <7015> 5519 +<7016> <7016> 12461 +<7017> <7017> 12467 +<7018> <7018> 5520 +<7019> <7019> 12458 +<701a> <701a> 5517 +<701b> <701b> 5514 +<701c> <701c> 12469 +<701d> <701d> 5518 +<701e> <701e> 15478 +<701f> <701f> 5515 +<7020> <7020> 12460 +<7021> <7023> 12463 +<7024> <7024> 12468 +<7026> <7026> 12108 +<7027> <7027> 12459 +<7028> <7028> 5516 +<7029> <7029> 12466 +<702a> <702a> 12783 +<702b> <702b> 12462 +<702c> <702c> 18062 +<702f> <702f> 12774 +<7030> <7030> 5661 +<7031> <7031> 12777 +<7032> <7032> 5662 +<7033> <7033> 12786 +<7034> <7034> 12776 +<7035> <7035> 12773 +<7037> <7037> 12775 +<7038> <7038> 12779 +<7039> <7039> 12782 +<703a> <703a> 12781 +<703b> <703b> 12785 +<703c> <703c> 12772 +<703e> <703e> 5660 +<703f> <703f> 12780 +endcidrange + +100 begincidrange +<7040> <7040> 12784 +<7041> <7041> 12787 +<7042> <7042> 12778 +<7043> <7044> 13016 +<7045> <7046> 13021 +<7048> <7049> 13019 +<704a> <704a> 13018 +<704b> <704b> 16980 +<704c> <704c> 5754 +<7050> <7050> 18064 +<7051> <7051> 5832 +<7052> <7052> 13196 +<7054> <7054> 18065 +<7055> <7057> 13193 +<7058> <7058> 5833 +<705a> <705a> 13347 +<705b> <705b> 13346 +<705c> <705c> 14418 +<705d> <705d> 13450 +<705e> <705e> 5922 +<705f> <705f> 13448 +<7060> <7060> 13451 +<7061> <7061> 13449 +<7062> <7062> 13520 +<7063> <7063> 5956 +<7064> <7064> 5970 +<7065> <7065> 13596 +<7066> <7066> 13574 +<7067> <7067> 15605 +<7068> <7068> 13595 +<7069> <706a> 13639 +<706b> <706b> 742 +<706c> <706c> 17649 +<706f> <706f> 18066 +<7070> <7070> 1010 +<7071> <7071> 6154 +<7074> <7074> 6339 +<7075> <7075> 14535 +<7076> <7076> 1254 +<7078> <7078> 1257 +<7079> <7079> 16537 +<707a> <707a> 6340 +<707c> <707d> 1255 +<707e> <707e> 16981 +<707f> <707f> 18067 +<7081> <7081> 18777 +<7082> <7082> 6647 +<7083> <7083> 6649 +<7084> <7084> 6644 +<7085> <7085> 6641 +<7086> <7086> 6643 +<7089> <7089> 17401 +<708a> <708a> 1603 +<708b> <708b> 16587 +<708e> <708e> 1601 +<708f> <708f> 18099 +<7091> <7091> 6645 +<7092> <7092> 1602 +<7093> <7093> 6642 +<7094> <7094> 6639 +<7095> <7095> 1600 +<7096> <7096> 6646 +<7098> <7098> 6640 +<7099> <7099> 1604 +<709a> <709a> 6648 +<709f> <709f> 7014 +<70a0> <70a0> 18242 +<70a1> <70a1> 7018 +<70a3> <70a3> 14706 +<70a4> <70a4> 1936 +<70a5> <70a5> 15543 +<70a6> <70a6> 15699 +<70a7> <70a7> 16982 +<70a9> <70a9> 7021 +<70ab> <70ab> 1928 +<70ac> <70ac> 1931 +<70ad> <70ad> 1933 +<70ae> <70ae> 1935 +<70af> <70af> 1932 +<70b0> <70b0> 7017 +<70b1> <70b1> 7016 +<70b3> <70b3> 1930 +<70b4> <70b5> 7019 +<70b7> <70b7> 7013 +<70b8> <70b8> 1934 +<70b9> <70b9> 15721 +<70ba> <70ba> 1929 +<70bb> <70bb> 18450 +<70bc> <70bc> 17753 +<70bd> <70bd> 17008 +<70be> <70be> 7015 +<70c0> <70c0> 18227 +<70c4> <70c4> 15274 +<70c5> <70c7> 7463 +<70c8> <70c8> 2337 +<70ca> <70ca> 2333 +<70cb> <70cb> 7454 +<70cc> <70cc> 16984 +<70cd> <70cd> 7462 +<70ce> <70ce> 7467 +endcidrange + +100 begincidrange +<70cf> <70cf> 2338 +<70d0> <70d0> 14701 +<70d1> <70d1> 7452 +<70d2> <70d2> 7458 +<70d3> <70d3> 7451 +<70d4> <70d4> 7461 +<70d5> <70d6> 16985 +<70d7> <70d7> 7457 +<70d8> <70d8> 2334 +<70d9> <70d9> 2336 +<70da> <70da> 7466 +<70dc> <70dc> 7450 +<70dd> <70dd> 7453 +<70de> <70de> 7459 +<70df> <70df> 16987 +<70e0> <70e0> 7460 +<70e1> <70e1> 7468 +<70e2> <70e2> 7456 +<70e4> <70e4> 2335 +<70ef> <70ef> 2838 +<70f0> <70f0> 8050 +<70f1> <70f1> 15048 +<70f3> <70f3> 8052 +<70f4> <70f4> 8048 +<70f5> <70f5> 18272 +<70f6> <70f6> 8060 +<70f7> <70f7> 8046 +<70f8> <70f8> 8059 +<70f9> <70f9> 2834 +<70fa> <70fa> 8044 +<70fb> <70fb> 8690 +<70fc> <70fc> 8054 +<70fd> <70fd> 2837 +<70fe> <70fe> 15630 +<70ff> <70ff> 8055 +<7100> <7100> 8058 +<7102> <7102> 8062 +<7104> <7104> 8051 +<7105> <7105> 14883 +<7106> <7106> 8056 +<7109> <710a> 2835 +<710b> <710b> 8061 +<710c> <710c> 8049 +<710d> <710d> 8045 +<710e> <710e> 8063 +<7110> <7110> 8053 +<7113> <7113> 8057 +<7117> <7117> 8047 +<7119> <711a> 3272 +<711b> <711b> 8700 +<711c> <711c> 3279 +<711d> <711d> 15687 +<711e> <711e> 8688 +<711f> <711f> 8697 +<7120> <7120> 8687 +<7121> <7121> 3276 +<7122> <7122> 8695 +<7123> <7123> 8693 +<7125> <7125> 8694 +<7126> <7126> 3274 +<7128> <7128> 8698 +<7129> <7129> 15273 +<712b> <712b> 16993 +<712c> <712c> 17002 +<712e> <712e> 8691 +<712f> <712f> 8689 +<7130> <7130> 3275 +<7131> <7131> 8692 +<7132> <7132> 8696 +<7133> <7133> 15700 +<7134> <7134> 15486 +<7135> <7135> 14189 +<7136> <7136> 3277 +<713a> <713a> 8699 +<713b> <713b> 15045 +<713e> <713e> 14126 +<7140> <7140> 17304 +<7141> <7141> 9339 +<7142> <7142> 9346 +<7143> <7143> 9348 +<7144> <7144> 9354 +<7145> <7145> 16994 +<7146> <7146> 3698 +<7147> <7147> 9334 +<7149> <7149> 3690 +<714a> <714a> 16996 +<714b> <714b> 9349 +<714c> <714c> 3695 +<714d> <714d> 9355 +<714e> <714e> 3686 +<714f> <714f> 16999 +<7150> <7150> 9352 +<7151> <7151> 18533 +<7152> <7152> 9336 +<7153> <7153> 9353 +<7154> <7154> 9335 +<7156> <7156> 3700 +<7158> <7158> 9347 +<7159> <7159> 3687 +<715a> <715a> 9356 +endcidrange + +100 begincidrange +<715c> <715c> 3692 +<715d> <715d> 9340 +<715e> <715e> 3697 +<715f> <715f> 9351 +<7160> <7160> 9338 +<7161> <7161> 9345 +<7162> <7162> 9341 +<7163> <7163> 9337 +<7164> <7164> 3689 +<7165> <7165> 3696 +<7166> <7166> 3694 +<7167> <7167> 3691 +<7168> <7168> 3699 +<7169> <7169> 3688 +<716a> <716a> 9344 +<716b> <716b> 15557 +<716c> <716c> 3693 +<716e> <716e> 3278 +<7170> <7170> 9350 +<7171> <7171> 15808 +<7172> <7172> 9342 +<7173> <7173> 18407 +<7175> <7175> 15597 +<7176> <7176> 16384 +<7177> <7177> 14679 +<7178> <7178> 9343 +<717a> <717a> 18724 +<717b> <717b> 10014 +<717c> <717c> 14389 +<717d> <717d> 4131 +<717e> <717e> 14704 +<7180> <7180> 10010 +<7181> <7181> 10016 +<7182> <7182> 10012 +<7184> <7184> 4133 +<7185> <7185> 10011 +<7186> <7186> 10015 +<7187> <7187> 10007 +<7188> <7188> 18182 +<7189> <7189> 10009 +<718a> <718a> 4132 +<718c> <718c> 14826 +<718e> <718e> 15675 +<718f> <718f> 10013 +<7190> <7190> 10008 +<7192> <7192> 4134 +<7194> <7194> 4129 +<7196> <7196> 16991 +<7197> <7197> 10017 +<7198> <7198> 18461 +<7199> <7199> 4130 +<719a> <719a> 10586 +<719b> <719b> 10583 +<719c> <719c> 10595 +<719d> <719d> 10589 +<719e> <719e> 10591 +<719f> <719f> 4510 +<71a0> <71a0> 10585 +<71a1> <71a1> 10593 +<71a2> <71a2> 18625 +<71a3> <71a3> 16072 +<71a4> <71a4> 10592 +<71a5> <71a5> 10590 +<71a7> <71a7> 10596 +<71a8> <71a8> 4513 +<71a9> <71a9> 10587 +<71aa> <71aa> 10594 +<71ac> <71ac> 4511 +<71ad> <71ad> 15901 +<71af> <71af> 10582 +<71b0> <71b0> 10584 +<71b1> <71b1> 4512 +<71b2> <71b2> 10581 +<71b3> <71b3> 10597 +<71b4> <71b4> 16990 +<71b5> <71b5> 10588 +<71b7> <71b7> 18059 +<71b8> <71b8> 11187 +<71b9> <71b9> 4851 +<71ba> <71ba> 17006 +<71bc> <71bc> 11198 +<71bd> <71bd> 11196 +<71be> <71be> 4845 +<71bf> <71bf> 11186 +<71c0> <71c1> 11189 +<71c2> <71c2> 11185 +<71c3> <71c4> 4855 +<71c5> <71c5> 11184 +<71c6> <71c6> 11199 +<71c7> <71c7> 11194 +<71c8> <71c8> 4849 +<71c9> <71c9> 4846 +<71ca> <71ca> 11193 +<71cb> <71cb> 11191 +<71ce> <71ce> 4852 +<71cf> <71cf> 11195 +<71d0> <71d0> 4847 +<71d1> <71d1> 14141 +<71d2> <71d2> 4848 +<71d4> <71d4> 11192 +endcidrange + +100 begincidrange +<71d5> <71d5> 4850 +<71d6> <71d6> 11188 +<71d8> <71d8> 11197 +<71d9> <71d9> 4853 +<71da> <71db> 11200 +<71dc> <71dc> 4854 +<71dd> <71dd> 16504 +<71df> <71df> 5124 +<71e0> <71e0> 5131 +<71e1> <71e1> 11675 +<71e2> <71e2> 11681 +<71e4> <71e4> 11679 +<71e5> <71e5> 5127 +<71e6> <71e6> 5126 +<71e7> <71e7> 5123 +<71e8> <71e8> 11677 +<71eb> <71eb> 15489 +<71ec> <71ec> 5129 +<71ed> <71ed> 5128 +<71ee> <71ee> 5125 +<71f0> <71f0> 11680 +<71f1> <71f1> 11676 +<71f2> <71f2> 11678 +<71f4> <71f4> 5130 +<71f5> <71f5> 18158 +<71f6> <71f6> 16026 +<71f8> <71f8> 5361 +<71f9> <71f9> 12114 +<71fb> <71fc> 5358 +<71fd> <71fd> 12116 +<71fe> <71fe> 5360 +<71ff> <71ff> 12113 +<7201> <7201> 12112 +<7202> <7202> 12473 +<7203> <7203> 12115 +<7205> <7205> 12474 +<7206> <7206> 5521 +<7207> <7207> 12472 +<7209> <7209> 15803 +<720a> <720a> 12471 +<720c> <720c> 12470 +<720d> <720d> 5522 +<720e> <720e> 17009 +<720f> <720f> 14844 +<7210> <7210> 5663 +<7213> <7214> 12788 +<7215> <7215> 17011 +<7216> <7216> 14675 +<7217> <7217> 14697 +<7219> <7219> 13025 +<721a> <721a> 13024 +<721b> <721b> 5755 +<721d> <721d> 13023 +<721e> <721f> 13197 +<7222> <7222> 13348 +<7223> <7223> 13452 +<7224> <7224> 17014 +<7226> <7226> 13521 +<7227> <7227> 13621 +<7228> <7228> 5990 +<7229> <7229> 13641 +<722a> <722a> 743 +<722b> <722b> 17650 +<722c> <722d> 1605 +<722e> <722e> 17017 +<7230> <7230> 1937 +<7235> <7235> 5132 +<7236> <7236> 744 +<7238> <7238> 1607 +<7239> <7239> 2339 +<723a> <723a> 3701 +<723b> <723b> 745 +<723d> <723d> 2839 +<723e> <723e> 4135 +<723f> <723f> 6029 +<7240> <7240> 17018 +<7241> <7241> 7022 +<7242> <7242> 7469 +<7244> <7244> 10018 +<7246> <7246> 5133 +<7247> <7247> 746 +<7248> <7248> 1608 +<7249> <724a> 7023 +<724b> <724b> 8701 +<724c> <724c> 3280 +<724f> <724f> 9357 +<7250> <7250> 15049 +<7252> <7252> 3702 +<7253> <7253> 10019 +<7255> <7255> 17021 +<7256> <7256> 4514 +<7257> <7257> 17022 +<7258> <7258> 5523 +<7259> <7259> 747 +<725a> <725a> 8702 +<725b> <725b> 748 +<725c> <725c> 18010 +<725d> <725d> 1012 +<725e> <725e> 6155 +<725f> <725f> 1011 +endcidrange + +100 begincidrange +<7260> <7260> 1260 +<7261> <7261> 1259 +<7262> <7262> 1258 +<7263> <7263> 6341 +<7266> <7266> 16059 +<7267> <7267> 1609 +<7269> <7269> 1610 +<726a> <726a> 6650 +<726c> <726c> 7025 +<726e> <726e> 7028 +<726f> <726f> 1939 +<7270> <7270> 7026 +<7272> <7272> 1938 +<7273> <7273> 7027 +<7274> <7274> 1940 +<7276> <7276> 7472 +<7277> <7277> 7471 +<7278> <7278> 7470 +<7279> <7279> 2340 +<727b> <727c> 8065 +<727d> <727d> 2840 +<727e> <727e> 8064 +<727f> <727f> 8067 +<7280> <7280> 3282 +<7281> <7281> 2841 +<7282> <7282> 17027 +<7284> <7284> 3281 +<7285> <7285> 8706 +<7286> <7286> 8705 +<7287> <7287> 15050 +<7288> <7289> 8703 +<728b> <728b> 8707 +<728c> <728c> 9359 +<728d> <728d> 9358 +<728e> <728e> 9362 +<728f> <728f> 17353 +<7290> <7290> 9361 +<7291> <7291> 9360 +<7292> <7292> 4136 +<7293> <7293> 10022 +<7294> <7294> 15051 +<7295> <7295> 10021 +<7296> <7296> 4137 +<7297> <7297> 10020 +<7298> <7298> 10598 +<729a> <729a> 10599 +<729b> <729b> 4515 +<729d> <729e> 11202 +<729f> <729f> 18234 +<72a1> <72a1> 12479 +<72a2> <72a2> 5524 +<72a3> <72a3> 12478 +<72a4> <72a4> 12477 +<72a5> <72a6> 12475 +<72a7> <72a7> 5756 +<72a8> <72a8> 12790 +<72a9> <72a9> 13199 +<72aa> <72aa> 13522 +<72ac> <72ac> 749 +<72ad> <72ad> 17652 +<72ae> <72ae> 6063 +<72af> <72af> 853 +<72b0> <72b0> 6064 +<72b2> <72b2> 16310 +<72b4> <72b5> 6156 +<72ba> <72ba> 6347 +<72bd> <72bd> 6343 +<72bf> <72bf> 6342 +<72c0> <72c0> 1611 +<72c1> <72c1> 6346 +<72c2> <72c2> 1262 +<72c3> <72c3> 6344 +<72c4> <72c4> 1261 +<72c5> <72c5> 6348 +<72c6> <72c6> 6345 +<72c9> <72c9> 6654 +<72ca> <72ca> 7029 +<72cb> <72cb> 6652 +<72cc> <72cc> 6659 +<72cd> <72cd> 17354 +<72ce> <72ce> 1612 +<72d0> <72d0> 1615 +<72d1> <72d1> 6660 +<72d2> <72d2> 6656 +<72d4> <72d4> 6657 +<72d6> <72d6> 6651 +<72d7> <72d7> 1614 +<72d8> <72d8> 6653 +<72d9> <72d9> 1613 +<72da> <72da> 6658 +<72dc> <72dc> 6655 +<72df> <72df> 7033 +<72e0> <72e1> 1942 +<72e2> <72e2> 16279 +<72e3> <72e3> 7036 +<72e4> <72e4> 7030 +<72e6> <72e6> 7035 +<72e8> <72e8> 7031 +<72e9> <72e9> 1941 +<72ea> <72ea> 7034 +endcidrange + +100 begincidrange +<72eb> <72eb> 7032 +<72f3> <72f3> 7478 +<72f4> <72f4> 7475 +<72f6> <72f6> 7477 +<72f7> <72f7> 2345 +<72f8> <72f8> 2344 +<72f9> <72f9> 2342 +<72fa> <72fa> 7474 +<72fb> <72fb> 7479 +<72fc> <72fc> 2341 +<72fd> <72fd> 2343 +<72fe> <72fe> 7476 +<72ff> <72ff> 8075 +<7300> <7300> 7473 +<7301> <7301> 7480 +<7302> <7302> 16282 +<7304> <7304> 16053 +<7307> <7307> 8070 +<7308> <7308> 8074 +<730a> <730a> 8073 +<730b> <730b> 8709 +<730c> <730c> 8720 +<730f> <730f> 8076 +<7310> <7310> 18154 +<7311> <7311> 8071 +<7312> <7312> 8708 +<7313> <7313> 2845 +<7316> <7316> 2844 +<7317> <7317> 8069 +<7318> <7318> 8072 +<7319> <7319> 2846 +<731b> <731b> 2843 +<731c> <731c> 2842 +<731d> <731d> 8068 +<731e> <731e> 8077 +<7322> <7322> 8711 +<7323> <7323> 8718 +<7325> <7325> 3284 +<7326> <7326> 8717 +<7327> <7327> 8714 +<7328> <7328> 17034 +<7329> <7329> 3286 +<732a> <732a> 15728 +<732b> <732b> 17029 +<732c> <732c> 16306 +<732d> <732d> 8716 +<732e> <732e> 17035 +<7330> <7330> 8710 +<7331> <7331> 8712 +<7332> <7332> 8715 +<7333> <7333> 8713 +<7334> <7334> 3285 +<7335> <7335> 8719 +<7336> <7336> 3283 +<7337> <7337> 3703 +<7338> <7338> 18155 +<7339> <7339> 17356 +<733a> <733a> 9366 +<733b> <733b> 9365 +<733c> <733c> 9363 +<733e> <733e> 3706 +<733f> <733f> 3705 +<7340> <7340> 9367 +<7341> <7341> 18156 +<7342> <7342> 9364 +<7343> <7343> 10023 +<7344> <7344> 4138 +<7345> <7345> 3704 +<7348> <7348> 17402 +<7349> <7349> 9369 +<734a> <734a> 9368 +<734c> <734c> 10026 +<734d> <734d> 10024 +<734e> <734e> 4516 +<734f> <734f> 16209 +<7350> <7350> 4139 +<7351> <7351> 10025 +<7352> <7352> 10601 +<7357> <7357> 4517 +<7358> <7358> 10600 +<7359> <7359> 10609 +<735a> <735a> 10608 +<735b> <735b> 10606 +<735d> <735d> 10605 +<735e> <7360> 10602 +<7361> <7361> 10607 +<7362> <7362> 10610 +<7365> <7365> 11208 +<7366> <7367> 11205 +<7368> <7368> 4857 +<7369> <7369> 11204 +<736a> <736a> 11210 +<736b> <736b> 11209 +<736c> <736c> 11207 +<736e> <736f> 11683 +<7370> <7370> 5134 +<7371> <7371> 16280 +<7372> <7372> 5135 +<7373> <7373> 11682 +<7374> <7374> 16084 +endcidrange + +100 begincidrange +<7375> <7375> 5363 +<7376> <7376> 12117 +<7377> <7377> 5362 +<7378> <7378> 5525 +<737a> <737a> 5526 +<737b> <737b> 5664 +<737c> <737c> 12792 +<737d> <737d> 12791 +<737e> <737e> 13026 +<737f> <737f> 13200 +<7380> <7380> 5834 +<7381> <7381> 13350 +<7382> <7382> 13349 +<7383> <7383> 13351 +<7384> <7384> 854 +<7385> <7385> 7037 +<7386> <7386> 2346 +<7387> <7387> 2847 +<7388> <7388> 8078 +<7389> <7389> 855 +<738a> <738a> 6065 +<738b> <738b> 750 +<738e> <738e> 6158 +<738f> <738f> 18149 +<7392> <7392> 6353 +<7393> <7394> 6351 +<7395> <7395> 6349 +<7396> <7396> 1263 +<7397> <7397> 6350 +<7398> <7398> 14838 +<739c> <739c> 16522 +<739d> <739d> 6668 +<739e> <739e> 14683 +<739f> <739f> 1618 +<73a0> <73a0> 6666 +<73a1> <73a1> 6662 +<73a2> <73a2> 6665 +<73a4> <73a4> 6661 +<73a5> <73a5> 1620 +<73a6> <73a6> 6664 +<73a7> <73a7> 16519 +<73a8> <73a8> 1617 +<73a9> <73a9> 1616 +<73aa> <73aa> 17037 +<73ab> <73ab> 1619 +<73ac> <73ac> 6667 +<73ad> <73ad> 6663 +<73b2> <73b2> 1947 +<73b3> <73b3> 1950 +<73b4> <73b4> 7045 +<73b5> <73b5> 7044 +<73b6> <73b6> 7043 +<73b7> <73b7> 1944 +<73b8> <73b8> 7052 +<73b9> <73b9> 7042 +<73bb> <73bb> 1946 +<73bc> <73bc> 7485 +<73be> <73be> 7049 +<73bf> <73bf> 7047 +<73c0> <73c0> 1949 +<73c2> <73c2> 7039 +<73c3> <73c3> 7050 +<73c5> <73c5> 7041 +<73c6> <73c6> 7051 +<73c7> <73c7> 7048 +<73c8> <73c8> 7040 +<73c9> <73c9> 17040 +<73ca> <73ca> 1945 +<73cb> <73cb> 7053 +<73cc> <73cc> 7038 +<73cd> <73cd> 1948 +<73ce> <73ce> 16667 +<73cf> <73cf> 17036 +<73d0> <73d0> 15127 +<73d2> <73d2> 7490 +<73d3> <73d3> 7481 +<73d4> <73d4> 7492 +<73d5> <73d5> 16499 +<73d6> <73d6> 7484 +<73d7> <73d8> 7495 +<73d9> <73d9> 7482 +<73da> <73da> 7494 +<73db> <73db> 7491 +<73dc> <73dc> 7489 +<73dd> <73dd> 7493 +<73de> <73de> 2352 +<73e0> <73e0> 2350 +<73e1> <73e1> 18160 +<73e2> <73e2> 15523 +<73e3> <73e3> 7487 +<73e4> <73e4> 17061 +<73e5> <73e5> 7483 +<73e6> <73e6> 15546 +<73e7> <73e7> 7486 +<73e8> <73e8> 7497 +<73e9> <73e9> 7488 +<73ea> <73ea> 2351 +<73eb> <73eb> 7046 +<73ed> <73ed> 2347 +<73ee> <73ee> 2349 +endcidrange + +100 begincidrange +<73ef> <73ef> 16401 +<73f3> <73f3> 15531 +<73f4> <73f4> 8092 +<73f5> <73f5> 8081 +<73f6> <73f6> 8079 +<73f7> <73f7> 17050 +<73f8> <73f8> 8080 +<73f9> <73f9> 15353 +<73fa> <73fa> 8087 +<73fb> <73fb> 15532 +<73fc> <73fc> 8088 +<73fd> <73fd> 8084 +<73fe> <73fe> 2852 +<73ff> <73ff> 8089 +<7400> <7400> 8086 +<7401> <7401> 8083 +<7403> <7403> 2850 +<7404> <7404> 8082 +<7405> <7405> 2848 +<7406> <7406> 2851 +<7407> <7407> 8085 +<7408> <7408> 8093 +<7409> <7409> 2348 +<740a> <740a> 2849 +<740b> <740b> 8091 +<740c> <740c> 8090 +<740d> <740d> 2853 +<7411> <7411> 17772 +<7412> <7412> 15334 +<7414> <7414> 14836 +<7415> <7415> 17051 +<7416> <7416> 8725 +<7417> <7417> 16557 +<7419> <7419> 18163 +<741a> <741a> 8726 +<741b> <741b> 3296 +<741c> <741c> 14557 +<741d> <741d> 8732 +<741e> <741f> 18164 +<7420> <7420> 8734 +<7421> <7421> 8727 +<7422> <7422> 3290 +<7423> <7423> 8731 +<7424> <7424> 8730 +<7425> <7425> 3291 +<7426> <7426> 3297 +<7428> <7428> 3298 +<7429> <7429> 8733 +<742a> <742a> 3288 +<742b> <742b> 8724 +<742c> <742c> 8722 +<742d> <742d> 8728 +<742e> <742e> 8721 +<742f> <742f> 3295 +<7430> <7430> 8723 +<7431> <7431> 8729 +<7432> <7432> 8735 +<7433> <7433> 3289 +<7434> <7434> 3294 +<7435> <7436> 3292 +<7437> <7437> 15073 +<7438> <7438> 15113 +<7439> <7439> 17054 +<743a> <743a> 3287 +<743c> <743c> 15071 +<743f> <743f> 3713 +<7440> <7440> 9376 +<7441> <7441> 3712 +<7442> <7442> 9380 +<7443> <7443> 14874 +<7444> <7444> 9370 +<7445> <7445> 15319 +<7446> <7446> 9381 +<7447> <7447> 17060 +<7448> <7448> 15541 +<7449> <7449> 17041 +<744a> <744b> 9371 +<744d> <744d> 9382 +<744e> <744e> 9379 +<744f> <7450> 9377 +<7451> <7451> 9374 +<7452> <7452> 9373 +<7453> <7453> 16945 +<7454> <7454> 9383 +<7455> <7455> 3709 +<7456> <7456> 14837 +<7457> <7457> 9375 +<7459> <7459> 3714 +<745a> <745a> 3708 +<745b> <745c> 3715 +<745d> <745d> 17094 +<745e> <745e> 3711 +<745f> <745f> 3710 +<7460> <7460> 17058 +<7462> <7462> 10027 +<7463> <7463> 4141 +<7464> <7464> 4140 +<7465> <7465> 16641 +<7467> <7467> 10032 +<7468> <7468> 15086 +endcidrange + +100 begincidrange +<7469> <7469> 4518 +<746a> <746a> 4142 +<746b> <746b> 15335 +<746c> <746c> 17064 +<746d> <746d> 4144 +<746e> <746e> 10033 +<746f> <746f> 3707 +<7470> <7470> 4143 +<7471> <7471> 10029 +<7472> <7472> 10031 +<7473> <7473> 10028 +<7474> <7474> 17065 +<7475> <7475> 10030 +<7476> <7476> 17062 +<7479> <7479> 10620 +<747a> <747a> 15057 +<747c> <747c> 10619 +<747d> <747d> 10616 +<747e> <747e> 4521 +<747f> <747f> 11211 +<7480> <7480> 4522 +<7481> <7481> 10615 +<7482> <7482> 17068 +<7483> <7483> 4520 +<7485> <7485> 10617 +<7486> <7486> 10614 +<7487> <7487> 10611 +<7488> <7488> 10618 +<7489> <748a> 10612 +<748b> <748b> 4519 +<748c> <748c> 14881 +<748d> <748d> 18077 +<7490> <7490> 11688 +<7492> <7492> 11215 +<7494> <7494> 11214 +<7495> <7495> 11216 +<7497> <7497> 11685 +<7498> <7498> 4860 +<7499> <7499> 14835 +<749a> <749a> 11212 +<749b> <749b> 15114 +<749c> <749c> 4858 +<749e> <749e> 4862 +<749f> <749f> 4861 +<74a0> <74a0> 11213 +<74a1> <74a1> 11217 +<74a3> <74a3> 4859 +<74a4> <74a4> 16752 +<74a5> <74a5> 11692 +<74a6> <74a6> 5138 +<74a7> <74a7> 5364 +<74a8> <74a8> 5139 +<74a9> <74a9> 5136 +<74aa> <74aa> 11689 +<74ab> <74ab> 11687 +<74ad> <74ad> 11690 +<74af> <74af> 11693 +<74b0> <74b0> 5137 +<74b1> <74b1> 11691 +<74b2> <74b2> 11686 +<74b4> <74b4> 15525 +<74b5> <74b5> 12120 +<74b6> <74b6> 12123 +<74b7> <74b7> 12482 +<74b8> <74b8> 12118 +<74ba> <74ba> 12793 +<74bb> <74bb> 12124 +<74bd> <74bd> 5527 +<74be> <74be> 12122 +<74bf> <74bf> 5365 +<74c0> <74c0> 12119 +<74c1> <74c1> 12121 +<74c2> <74c2> 12125 +<74c3> <74c3> 12483 +<74c5> <74c5> 12481 +<74c8> <74c8> 17077 +<74ca> <74ca> 5528 +<74cb> <74cb> 12480 +<74cc> <74cc> 15070 +<74cf> <74cf> 5665 +<74d0> <74d0> 15003 +<74d3> <74d3> 18170 +<74d4> <74d4> 5758 +<74d5> <74d5> 13202 +<74d6> <74d6> 5757 +<74d7> <74d7> 13204 +<74d8> <74d8> 13201 +<74d9> <74d9> 13203 +<74da> <74da> 5886 +<74db> <74db> 13453 +<74dc> <74dc> 856 +<74dd> <74dd> 6669 +<74de> <74df> 7498 +<74e0> <74e0> 2854 +<74e1> <74e1> 9384 +<74e2> <74e2> 4863 +<74e3> <74e3> 5529 +<74e4> <74e4> 5835 +<74e5> <74e5> 13454 +<74e6> <74e6> 857 +endcidrange + +100 begincidrange +<74e7> <74e7> 16382 +<74e8> <74e8> 6670 +<74e9> <74e9> 288 +<74ec> <74ec> 7054 +<74ee> <74ee> 7055 +<74f0> <74f0> 16358 +<74f1> <74f1> 16283 +<74f2> <74f2> 16351 +<74f4> <74f5> 7500 +<74f6> <74f7> 2855 +<74f8> <74f8> 16372 +<74fb> <74fb> 8736 +<74fd> <74fd> 9387 +<74fe> <74fe> 9386 +<74ff> <74ff> 9385 +<7500> <7500> 10034 +<7502> <7503> 10035 +<7504> <7504> 4145 +<7505> <7505> 16350 +<7507> <7507> 10622 +<7508> <7508> 10621 +<750b> <750b> 11218 +<750c> <750d> 4864 +<750e> <750e> 17079 +<750f> <750f> 11697 +<7510> <7512> 11694 +<7513> <7513> 12127 +<7514> <7514> 12126 +<7515> <7515> 5366 +<7516> <7516> 12484 +<7517> <7517> 13027 +<7518> <7518> 858 +<7519> <7519> 17795 +<751a> <751a> 1951 +<751c> <751c> 2857 +<751d> <751d> 9388 +<751e> <751e> 17080 +<751f> <751f> 859 +<7521> <7521> 7502 +<7522> <7522> 2858 +<7525> <7526> 3299 +<7528> <7529> 860 +<752a> <752a> 6159 +<752b> <752b> 1265 +<752c> <752c> 1264 +<752d> <752d> 1952 +<752e> <752e> 7056 +<752f> <752f> 8737 +<7530> <7533> 862 +<7534> <7534> 16007 +<7535> <7535> 17754 +<7537> <7538> 1266 +<7539> <7539> 6355 +<753a> <753a> 6354 +<753b> <753b> 15867 +<753d> <753d> 1621 +<753e> <753e> 6673 +<753f> <7540> 6671 +<7542> <7542> 17357 +<7546> <7546> 16192 +<7547> <7548> 7057 +<754a> <754a> 17087 +<754b> <754b> 1956 +<754c> <754c> 1954 +<754d> <754d> 17086 +<754e> <754e> 1955 +<754f> <754f> 1953 +<7551> <7551> 15614 +<7553> <7553> 16363 +<7554> <7554> 2353 +<7555> <7555> 15082 +<7559> <7559> 2357 +<755a> <755a> 2356 +<755b> <755b> 7503 +<755c> <755c> 2355 +<755d> <755d> 2354 +<755f> <755f> 7504 +<7560> <7560> 15729 +<7562> <7562> 2861 +<7563> <7563> 8095 +<7564> <7564> 8094 +<7565> <7566> 2859 +<7567> <7567> 17088 +<756a> <756a> 3302 +<756b> <756b> 3301 +<756c> <756c> 8739 +<756d> <756d> 18173 +<756e> <756e> 17089 +<756f> <756f> 8738 +<7570> <7570> 2862 +<7572> <7572> 18174 +<7576> <7576> 3717 +<7577> <7577> 9390 +<7578> <7578> 3718 +<7579> <7579> 9389 +<757a> <757a> 16207 +<757d> <757d> 10037 +<757e> <757e> 10623 +<757f> <757f> 4523 +<7580> <7580> 11219 +endcidrange + +100 begincidrange +<7583> <7583> 15077 +<7584> <7584> 11698 +<7586> <7586> 5531 +<7587> <7587> 5530 +<758a> <758a> 5836 +<758b> <758b> 866 +<758c> <758c> 6674 +<758d> <758d> 18175 +<758e> <758e> 17093 +<758f> <758f> 2863 +<7590> <7590> 10038 +<7591> <7591> 4146 +<7592> <7592> 558 +<7594> <7595> 6356 +<7598> <7598> 6675 +<7599> <759a> 1623 +<759d> <759d> 1622 +<759e> <759e> 17095 +<75a2> <75a3> 1960 +<75a4> <75a5> 1958 +<75a7> <75a7> 7059 +<75aa> <75aa> 7060 +<75ab> <75ab> 1957 +<75b0> <75b0> 7505 +<75b1> <75b1> 16045 +<75b2> <75b3> 2361 +<75b4> <75b4> 17096 +<75b5> <75b5> 2866 +<75b6> <75b6> 7511 +<75b8> <75b8> 2367 +<75b9> <75b9> 2365 +<75ba> <75ba> 7512 +<75bb> <75bb> 7507 +<75bc> <75bc> 2364 +<75bd> <75bd> 2363 +<75be> <75be> 2358 +<75bf> <75bf> 7510 +<75c0> <75c0> 7509 +<75c1> <75c1> 7506 +<75c2> <75c2> 2366 +<75c3> <75c3> 16275 +<75c4> <75c4> 7508 +<75c5> <75c5> 2359 +<75c7> <75c7> 2360 +<75c8> <75c8> 18177 +<75ca> <75ca> 2867 +<75cb> <75cc> 8099 +<75cd> <75cd> 2868 +<75ce> <75ce> 8096 +<75cf> <75cf> 8098 +<75d0> <75d0> 8102 +<75d1> <75d1> 8101 +<75d2> <75d2> 8097 +<75d4> <75d5> 2864 +<75d7> <75d7> 8747 +<75d8> <75d8> 3307 +<75d9> <75d9> 3306 +<75da> <75da> 8741 +<75db> <75db> 3304 +<75dc> <75dc> 17358 +<75dd> <75dd> 8744 +<75de> <75de> 3308 +<75df> <75df> 8745 +<75e0> <75e0> 3309 +<75e1> <75e1> 8742 +<75e2> <75e2> 3303 +<75e3> <75e3> 3305 +<75e4> <75e4> 8746 +<75e6> <75e6> 8743 +<75e7> <75e7> 8740 +<75ed> <75ed> 9403 +<75ef> <75ef> 9392 +<75f0> <75f0> 3720 +<75f1> <75f1> 3723 +<75f2> <75f2> 3722 +<75f3> <75f3> 3727 +<75f4> <75f4> 3726 +<75f5> <75f5> 9404 +<75f6> <75f6> 9402 +<75f7> <75f7> 9395 +<75f8> <75f8> 9399 +<75f9> <75f9> 9398 +<75fa> <75fa> 3724 +<75fb> <75fb> 9401 +<75fc> <75fc> 9397 +<75fd> <75fd> 9405 +<75fe> <75fe> 9396 +<75ff> <75ff> 3725 +<7600> <7600> 3719 +<7601> <7601> 3721 +<7602> <7602> 17097 +<7603> <7603> 9394 +<7607> <7607> 16271 +<7608> <7608> 10040 +<7609> <7609> 4150 +<760a> <760a> 10044 +<760b> <760b> 4149 +<760c> <760c> 10041 +<760d> <760d> 4148 +<760f> <760f> 9393 +endcidrange + +100 begincidrange +<7610> <7610> 9400 +<7611> <7611> 10043 +<7613> <7613> 4151 +<7614> <7614> 10045 +<7615> <7615> 10042 +<7616> <7616> 10039 +<7619> <7619> 10626 +<761a> <761a> 10630 +<761b> <761b> 10632 +<761c> <761c> 10628 +<761d> <761d> 10627 +<761e> <761e> 10625 +<761f> <761f> 4526 +<7620> <7620> 4524 +<7621> <7622> 4529 +<7623> <7623> 10629 +<7624> <7624> 4527 +<7625> <7625> 10624 +<7626> <7626> 4528 +<7627> <7627> 4147 +<7628> <7628> 10631 +<7629> <7629> 4525 +<762c> <762c> 17098 +<762d> <762d> 11221 +<762f> <762f> 11220 +<7630> <7630> 11228 +<7631> <7631> 11222 +<7632> <7632> 11227 +<7633> <7633> 11224 +<7634> <7634> 4866 +<7635> <7635> 11226 +<7638> <7638> 4867 +<763a> <763a> 4868 +<763b> <763b> 15984 +<763c> <763c> 11225 +<763d> <763d> 11223 +<7640> <7640> 16102 +<7642> <7642> 5141 +<7643> <7643> 11699 +<7646> <7646> 5140 +<7647> <7647> 11702 +<7648> <7649> 11700 +<764c> <764c> 5142 +<764d> <764d> 18178 +<764e> <764e> 15986 +<764f> <764f> 17100 +<7650> <7650> 12131 +<7651> <7651> 17099 +<7652> <7652> 5369 +<7653> <7653> 12132 +<7654> <7654> 16112 +<7656> <7656> 5367 +<7657> <7657> 12133 +<7658> <7658> 5368 +<7659> <7659> 12130 +<765a> <765a> 12134 +<765c> <765c> 12128 +<765f> <765f> 5532 +<7660> <7660> 12485 +<7661> <7661> 5533 +<7662> <7662> 5666 +<7664> <7664> 12129 +<7665> <7665> 5667 +<7666> <7666> 16042 +<7667> <7667> 16297 +<7669> <7669> 5759 +<766a> <766a> 13028 +<766c> <766c> 5838 +<766d> <766d> 13205 +<766e> <766e> 5837 +<766f> <766f> 17101 +<7670> <7670> 13352 +<7671> <7672> 5923 +<7673> <7673> 15083 +<7674> <7674> 18179 +<7675> <7675> 13635 +<7676> <7676> 559 +<7678> <7678> 1962 +<7679> <7679> 7061 +<767a> <767a> 18181 +<767b> <767c> 3310 +<767d> <767d> 867 +<767e> <767e> 1013 +<767f> <767f> 6160 +<7680> <7680> 17363 +<7681> <7681> 6358 +<7682> <7682> 1268 +<7684> <7684> 1625 +<7686> <7688> 1963 +<7689> <7689> 8104 +<768a> <768a> 7513 +<768b> <768b> 2368 +<768c> <768c> 17364 +<768e> <768e> 2869 +<768f> <768f> 8103 +<7690> <7690> 17104 +<7692> <7692> 8749 +<7693> <7693> 3313 +<7695> <7695> 8748 +<7696> <7696> 3312 +endcidrange + +100 begincidrange +<7699> <7699> 9406 +<769a> <769a> 4531 +<769b> <769b> 10636 +<769c> <769e> 10633 +<76a1> <76a1> 17109 +<76a4> <76a4> 11703 +<76a5> <76a5> 17110 +<76a6> <76a6> 12135 +<76aa> <76aa> 12795 +<76ab> <76ab> 12794 +<76ad> <76ad> 13206 +<76ae> <76ae> 868 +<76af> <76af> 6676 +<76b0> <76b0> 2369 +<76b4> <76b4> 3314 +<76b5> <76b5> 9407 +<76b7> <76b7> 17111 +<76b8> <76b8> 10046 +<76ba> <76ba> 4532 +<76bb> <76bb> 11229 +<76bd> <76bd> 12136 +<76be> <76be> 12796 +<76bf> <76bf> 869 +<76c2> <76c2> 1626 +<76c3> <76c3> 1968 +<76c4> <76c4> 7062 +<76c5> <76c5> 1969 +<76c6> <76c6> 1967 +<76c8> <76c8> 1966 +<76c9> <76c9> 7514 +<76ca> <76ca> 2370 +<76cc> <76cc> 17112 +<76cd> <76ce> 2371 +<76d2> <76d2> 2871 +<76d3> <76d3> 8105 +<76d4> <76d4> 2870 +<76d6> <76d6> 16213 +<76da> <76da> 8750 +<76db> <76db> 2872 +<76dc> <76dc> 3315 +<76dd> <76dd> 9408 +<76de> <76df> 3728 +<76e1> <76e1> 4152 +<76e3> <76e3> 4153 +<76e4> <76e4> 4533 +<76e5> <76e5> 4870 +<76e6> <76e6> 11230 +<76e7> <76e7> 4869 +<76e9> <76e9> 11704 +<76ea> <76ea> 5143 +<76ec> <76ec> 12137 +<76ed> <76ed> 12797 +<76ee> <76ee> 870 +<76ef> <76ef> 1269 +<76f0> <76f0> 6679 +<76f1> <76f1> 6678 +<76f2> <76f2> 1627 +<76f3> <76f3> 6677 +<76f4> <76f4> 1628 +<76f5> <76f5> 6680 +<76f7> <76f7> 7068 +<76f8> <76f8> 1972 +<76f9> <76f9> 1971 +<76fa> <76fa> 7070 +<76fb> <76fb> 7069 +<76fc> <76fc> 1976 +<76fe> <76fe> 1975 +<7701> <7701> 1970 +<7703> <7705> 7064 +<7707> <7707> 1977 +<7708> <7708> 7063 +<7709> <7709> 1973 +<770a> <770a> 7067 +<770b> <770b> 1974 +<770c> <770c> 15714 +<770e> <770f> 15106 +<7710> <7710> 7517 +<7711> <7711> 7521 +<7712> <7712> 7519 +<7713> <7713> 7518 +<7715> <7715> 7522 +<7719> <771a> 7523 +<771b> <771b> 7516 +<771d> <771d> 7515 +<771e> <771e> 17118 +<771f> <7720> 2374 +<7722> <7722> 7525 +<7723> <7723> 7520 +<7724> <7724> 16360 +<7725> <7725> 8114 +<7726> <7726> 17119 +<7727> <7727> 7526 +<7728> <7728> 2376 +<7729> <7729> 2373 +<772b> <772b> 16371 +<772d> <772d> 8108 +<772f> <772f> 8107 +<7731> <7732> 8109 +<7733> <7733> 8112 +<7734> <7734> 8111 +endcidrange + +100 begincidrange +<7735> <7735> 8116 +<7736> <7736> 2876 +<7737> <7737> 2873 +<7738> <7738> 2877 +<7739> <7739> 8106 +<773a> <773a> 2878 +<773b> <773b> 8115 +<773c> <773c> 2875 +<773d> <773d> 8113 +<773e> <773e> 2874 +<7740> <7740> 17120 +<7743> <7743> 18186 +<7744> <7744> 8753 +<7745> <7745> 8755 +<7746> <7747> 8751 +<774a> <774a> 8756 +<774b> <774c> 8758 +<774d> <774d> 8754 +<774e> <774e> 8757 +<774f> <774f> 3316 +<7752> <7752> 9412 +<7754> <7754> 9417 +<7755> <7755> 9409 +<7756> <7756> 9413 +<7758> <7758> 17123 +<7759> <7759> 9418 +<775a> <775a> 9414 +<775b> <775b> 3730 +<775c> <775c> 3738 +<775e> <775e> 3733 +<775f> <7760> 9410 +<7761> <7761> 4157 +<7762> <7762> 3741 +<7763> <7763> 3734 +<7765> <7765> 3739 +<7766> <7766> 3732 +<7767> <7767> 9416 +<7768> <7768> 3740 +<7769> <7769> 9415 +<776a> <776a> 3736 +<776b> <776b> 3731 +<776c> <776c> 3737 +<776d> <776d> 9419 +<776e> <776e> 10051 +<776f> <776f> 10053 +<7772> <7772> 14699 +<7777> <7777> 18089 +<7778> <7778> 15104 +<7779> <7779> 3735 +<777a> <777a> 17175 +<777b> <777b> 15108 +<777c> <777c> 10048 +<777d> <777d> 4155 +<777e> <777e> 10054 +<777f> <777f> 4156 +<7780> <7780> 10052 +<7781> <7781> 10047 +<7782> <7782> 10050 +<7783> <7783> 10055 +<7784> <7784> 4154 +<7785> <7785> 10049 +<7787> <7787> 4535 +<7788> <7788> 10640 +<7789> <7789> 10639 +<778b> <778b> 4538 +<778c> <778c> 4536 +<778d> <778d> 10637 +<778e> <778e> 4534 +<778f> <778f> 10638 +<7791> <7791> 4537 +<7793> <7793> 14381 +<7795> <7795> 11238 +<7797> <7797> 11240 +<7798> <7798> 18190 +<7799> <7799> 11239 +<779a> <779a> 11231 +<779b> <779b> 11235 +<779c> <779c> 11234 +<779d> <779d> 11232 +<779e> <779f> 4872 +<77a0> <77a0> 4871 +<77a1> <77a1> 11233 +<77a2> <77a3> 11236 +<77a5> <77a5> 4874 +<77a7> <77a7> 5148 +<77a8> <77a8> 11712 +<77aa> <77aa> 5145 +<77ab> <77ab> 11706 +<77ac> <77ac> 5147 +<77ad> <77ad> 5149 +<77af> <77af> 17125 +<77b0> <77b0> 5146 +<77b1> <77b1> 11711 +<77b2> <77b2> 11707 +<77b3> <77b3> 5144 +<77b4> <77b4> 11710 +<77b5> <77b5> 11705 +<77b6> <77b6> 11709 +<77b7> <77b7> 11708 +<77b9> <77b9> 15987 +endcidrange + +100 begincidrange +<77ba> <77ba> 12139 +<77bb> <77bc> 5372 +<77bd> <77bd> 5370 +<77be> <77be> 18193 +<77bf> <77bf> 5371 +<77c2> <77c2> 12138 +<77c3> <77c3> 15281 +<77c4> <77c4> 12488 +<77c5> <77c5> 16833 +<77c7> <77c7> 5534 +<77c9> <77ca> 12486 +<77cb> <77cb> 18194 +<77cc> <77cc> 12798 +<77cd> <77cd> 12801 +<77ce> <77cf> 12799 +<77d0> <77d0> 13029 +<77d3> <77d3> 5760 +<77d4> <77d4> 13353 +<77d5> <77d5> 13455 +<77d7> <77d7> 5925 +<77d8> <77d9> 13523 +<77da> <77da> 5971 +<77db> <77db> 871 +<77dc> <77dc> 1978 +<77de> <77de> 8760 +<77e0> <77e0> 9420 +<77e2> <77e2> 872 +<77e3> <77e3> 1270 +<77e5> <77e5> 1629 +<77e6> <77e6> 16513 +<77e7> <77e8> 7071 +<77e9> <77e9> 2377 +<77ec> <77ec> 8761 +<77ed> <77ed> 3317 +<77ee> <77ee> 3742 +<77ef> <77ef> 5150 +<77f0> <77f0> 11713 +<77f1> <77f1> 12489 +<77f2> <77f2> 12802 +<77f3> <77f3> 873 +<77f4> <77f4> 17129 +<77f7> <77f7> 6686 +<77f8> <77f8> 6681 +<77f9> <77f9> 6683 +<77fa> <77fa> 6685 +<77fb> <77fb> 6684 +<77fc> <77fc> 6682 +<77fd> <77fd> 1630 +<77fe> <77fe> 16341 +<7802> <7802> 1979 +<7803> <7803> 7081 +<7805> <7805> 7076 +<7806> <7806> 7073 +<7808> <7808> 15942 +<7809> <7809> 7080 +<780c> <780d> 1981 +<780e> <780e> 7079 +<780f> <780f> 7078 +<7810> <7810> 7077 +<7811> <7812> 7074 +<7813> <7813> 7082 +<7814> <7814> 1980 +<7818> <7818> 18195 +<781c> <781c> 18196 +<781d> <781d> 2381 +<781e> <781e> 15123 +<781f> <781f> 2387 +<7820> <7820> 2386 +<7821> <7821> 7535 +<7822> <7822> 7529 +<7823> <7823> 7527 +<7825> <7825> 2384 +<7826> <7826> 8123 +<7827> <7827> 2379 +<7828> <7828> 7532 +<7829> <7829> 7536 +<782a> <782a> 7538 +<782b> <782b> 7534 +<782c> <782c> 7528 +<782d> <782d> 2385 +<782e> <782e> 7533 +<782f> <782f> 7531 +<7830> <7830> 2378 +<7831> <7831> 7539 +<7832> <7832> 2388 +<7833> <7833> 7537 +<7834> <7834> 2382 +<7835> <7835> 7530 +<7837> <7837> 2383 +<7838> <7838> 2380 +<7839> <7839> 17366 +<783c> <783c> 16410 +<783d> <783d> 15466 +<7842> <7842> 15044 +<7843> <7843> 2880 +<7844> <7844> 15403 +<7845> <7845> 8124 +<7847> <7847> 18197 +<7848> <7848> 8117 +<7849> <7849> 8119 +endcidrange + +100 begincidrange +<784a> <784a> 8121 +<784b> <784b> 15469 +<784c> <784c> 8122 +<784d> <784d> 8120 +<784e> <784e> 2881 +<7850> <7850> 8125 +<7851> <7851> 18198 +<7852> <7852> 8118 +<7853> <7853> 16277 +<7854> <7854> 15467 +<785c> <785c> 8765 +<785d> <785d> 3318 +<785e> <785e> 8773 +<7860> <7860> 8762 +<7862> <7862> 8774 +<7864> <7865> 8763 +<7866> <7866> 18199 +<7868> <7868> 8772 +<7869> <7869> 8771 +<786a> <786a> 8768 +<786b> <786b> 2879 +<786c> <786c> 3319 +<786d> <786d> 8766 +<786e> <786e> 8769 +<786f> <786f> 3320 +<7870> <7870> 8770 +<7871> <7871> 8767 +<7879> <7879> 9431 +<787a> <787a> 16105 +<787b> <787b> 9435 +<787c> <787c> 3749 +<787e> <787e> 10061 +<787f> <787f> 3752 +<7880> <7880> 9433 +<7881> <7881> 14056 +<7883> <7883> 9430 +<7884> <7884> 9425 +<7885> <7886> 9427 +<7887> <7887> 9421 +<7888> <7888> 15125 +<7889> <7889> 3748 +<788c> <788c> 3747 +<788d> <788d> 15124 +<788e> <788e> 3743 +<788f> <788f> 9424 +<7891> <7891> 3750 +<7893> <7893> 3751 +<7894> <7894> 9423 +<7895> <7895> 9426 +<7896> <7896> 9434 +<7897> <7898> 3745 +<7899> <7899> 9432 +<789a> <789a> 9422 +<789e> <789e> 10063 +<789f> <789f> 4159 +<78a0> <78a0> 10065 +<78a1> <78a1> 9429 +<78a2> <78a2> 10067 +<78a3> <78a3> 4163 +<78a4> <78a4> 10068 +<78a5> <78a5> 10064 +<78a7> <78a7> 4160 +<78a8> <78a8> 10060 +<78a9> <78a9> 4162 +<78aa> <78aa> 10057 +<78ab> <78ab> 10062 +<78ac> <78ac> 10066 +<78ad> <78ad> 10059 +<78af> <78af> 17132 +<78b0> <78b0> 3744 +<78b1> <78b1> 17140 +<78b2> <78b2> 10056 +<78b3> <78b3> 4161 +<78b4> <78b4> 10058 +<78b6> <78b6> 15468 +<78b8> <78b8> 17777 +<78b9> <78b9> 15459 +<78ba> <78ba> 4541 +<78bb> <78bb> 10642 +<78bc> <78bc> 4545 +<78be> <78be> 4543 +<78c1> <78c1> 4158 +<78c3> <78c4> 10649 +<78c5> <78c5> 4540 +<78c7> <78c7> 17133 +<78c8> <78c8> 10648 +<78c9> <78c9> 10651 +<78ca> <78ca> 4542 +<78cb> <78cb> 4539 +<78cc> <78cc> 10644 +<78cd> <78cd> 10641 +<78ce> <78ce> 10646 +<78cf> <78cf> 10643 +<78d0> <78d0> 4546 +<78d1> <78d1> 10645 +<78d2> <78d2> 15126 +<78d3> <78d3> 17134 +<78d4> <78d4> 10647 +<78d5> <78d5> 4544 +<78d7> <78d7> 17138 +endcidrange + +100 begincidrange +<78d8> <78d8> 16268 +<78da> <78da> 4876 +<78db> <78db> 11247 +<78dd> <78dd> 11241 +<78de> <78de> 11245 +<78df> <78e0> 11251 +<78e1> <78e2> 11248 +<78e3> <78e3> 11246 +<78e5> <78e5> 11243 +<78e7> <78e7> 4878 +<78e8> <78e8> 4875 +<78e9> <78e9> 11242 +<78ea> <78ea> 11244 +<78ec> <78ec> 4877 +<78ed> <78ed> 11250 +<78ee> <78ee> 14977 +<78ef> <78ef> 5154 +<78f0> <78f0> 15162 +<78f1> <78f1> 16574 +<78f2> <78f2> 11720 +<78f3> <78f3> 11714 +<78f4> <78f4> 5153 +<78f5> <78f5> 14515 +<78f7> <78f7> 5151 +<78f9> <78f9> 11722 +<78fa> <78fa> 5152 +<78fb> <78fc> 11717 +<78fd> <78fd> 11715 +<78fe> <78fe> 11723 +<78ff> <78ff> 11719 +<7901> <7901> 5155 +<7902> <7902> 11716 +<7904> <7904> 11724 +<7905> <7905> 11721 +<7906> <7906> 16335 +<7909> <7909> 12143 +<790c> <790c> 12140 +<790e> <790e> 5374 +<7910> <7910> 12144 +<7911> <7911> 12146 +<7912> <7912> 12145 +<7913> <7914> 12141 +<7917> <7917> 12494 +<7919> <7919> 5535 +<791b> <791b> 12491 +<791c> <791c> 12493 +<791d> <791d> 12490 +<791e> <791e> 12495 +<7921> <7921> 12492 +<7923> <7923> 12804 +<7924> <7924> 12807 +<7925> <7925> 12803 +<7926> <7926> 5668 +<7927> <7928> 12805 +<7929> <7929> 12808 +<792a> <792a> 5669 +<792b> <792b> 5671 +<792c> <792c> 5670 +<792d> <792d> 13030 +<792e> <792e> 17136 +<792f> <792f> 13032 +<7931> <7931> 13031 +<7932> <7932> 18203 +<7933> <7933> 18202 +<7934> <7934> 17139 +<7935> <7935> 13207 +<7936> <7936> 14211 +<7938> <7938> 13456 +<7939> <7939> 13525 +<793a> <793a> 874 +<793b> <793b> 17655 +<793c> <793c> 17152 +<793d> <793d> 6359 +<793e> <793e> 1631 +<793f> <793f> 6688 +<7940> <7941> 1632 +<7942> <7942> 6687 +<7944> <7944> 7087 +<7945> <7945> 7086 +<7946> <7946> 1983 +<7947> <7947> 1986 +<7948> <7948> 1985 +<7949> <7949> 1984 +<794a> <794a> 7083 +<794b> <794b> 7085 +<794c> <794c> 7084 +<794f> <794f> 7542 +<7950> <7950> 2390 +<7951> <7951> 7546 +<7952> <7952> 7545 +<7953> <7953> 7544 +<7954> <7954> 7540 +<7955> <7955> 2389 +<7956> <7956> 2393 +<7957> <7957> 2396 +<7958> <7958> 14309 +<7959> <7959> 15128 +<795a> <795a> 2397 +<795b> <795b> 7541 +<795c> <795c> 7543 +endcidrange + +100 begincidrange +<795d> <795d> 2395 +<795e> <795e> 2394 +<795f> <795f> 2392 +<7960> <7960> 2391 +<7961> <7961> 8132 +<7962> <7962> 15997 +<7963> <7963> 8130 +<7964> <7964> 8126 +<7965> <7965> 2882 +<7967> <7967> 8127 +<7968> <7968> 2883 +<7969> <796a> 8128 +<796b> <796b> 8131 +<796d> <796d> 2884 +<7970> <7970> 8778 +<7971> <7971> 16744 +<7972> <7972> 8777 +<7973> <7973> 8776 +<7974> <7974> 8775 +<7979> <7979> 9439 +<797a> <797a> 3753 +<797c> <797c> 9436 +<797d> <797d> 9438 +<797e> <797e> 15910 +<797f> <797f> 3754 +<7980> <7980> 17148 +<7981> <7981> 3755 +<7982> <7982> 9437 +<7983> <7983> 15862 +<7986> <7986> 17145 +<7987> <7987> 17800 +<7988> <7988> 10077 +<798a> <798b> 10070 +<798d> <798d> 4166 +<798e> <798f> 4164 +<7990> <7990> 10079 +<7991> <7991> 18205 +<7992> <7992> 10078 +<7993> <7993> 10075 +<7994> <7994> 10074 +<7995> <7995> 10073 +<7996> <7996> 10072 +<7997> <7997> 10076 +<7998> <7998> 10069 +<7999> <7999> 17404 +<799a> <799a> 10652 +<799b> <799b> 10657 +<799c> <799c> 10655 +<799d> <799d> 17150 +<799f> <799f> 14686 +<79a0> <79a0> 10654 +<79a1> <79a1> 10653 +<79a2> <79a2> 10656 +<79a4> <79a4> 11253 +<79a5> <79a5> 15134 +<79a6> <79a6> 4879 +<79a7> <79a7> 5156 +<79a8> <79a8> 11726 +<79a9> <79a9> 17153 +<79aa> <79aa> 5157 +<79ab> <79ab> 11725 +<79ac> <79ac> 12148 +<79ad> <79ad> 12147 +<79ae> <79ae> 5375 +<79b0> <79b0> 12496 +<79b1> <79b1> 5536 +<79b2> <79b2> 12809 +<79b3> <79b3> 5839 +<79b4> <79b4> 13208 +<79b6> <79b6> 13458 +<79b7> <79b7> 13457 +<79b8> <79b8> 6066 +<79b9> <79ba> 1987 +<79bb> <79bb> 8133 +<79bd> <79bd> 3757 +<79be> <79be> 875 +<79bf> <79bf> 1273 +<79c0> <79c0> 1272 +<79c1> <79c1> 1271 +<79c4> <79c4> 15565 +<79c5> <79c5> 6689 +<79c6> <79c6> 17157 +<79c8> <79c8> 1635 +<79c9> <79c9> 1634 +<79cb> <79cb> 1991 +<79cc> <79cc> 16947 +<79cd> <79cd> 7089 +<79ce> <79ce> 7092 +<79cf> <79cf> 7090 +<79d1> <79d2> 1989 +<79d4> <79d4> 17159 +<79d5> <79d5> 7088 +<79d6> <79d6> 7091 +<79d8> <79d8> 2404 +<79dc> <79dc> 7553 +<79dd> <79dd> 7555 +<79de> <79de> 7554 +<79df> <79df> 2401 +<79e0> <79e0> 7549 +<79e2> <79e2> 15450 +endcidrange + +100 begincidrange +<79e3> <79e3> 2399 +<79e4> <79e4> 2398 +<79e6> <79e6> 2402 +<79e7> <79e7> 2400 +<79e9> <79e9> 2403 +<79ea> <79ea> 7552 +<79eb> <79ec> 7547 +<79ed> <79ed> 7551 +<79ee> <79ee> 7550 +<79f1> <79f1> 15143 +<79f4> <79f4> 15138 +<79f6> <79f7> 8136 +<79f8> <79f8> 8135 +<79fa> <79fa> 8134 +<79fb> <79fb> 2885 +<7a00> <7a00> 3325 +<7a02> <7a02> 8779 +<7a03> <7a03> 8781 +<7a04> <7a04> 8783 +<7a05> <7a05> 3324 +<7a06> <7a06> 18206 +<7a08> <7a08> 3322 +<7a0a> <7a0a> 8780 +<7a0b> <7a0b> 3323 +<7a0c> <7a0c> 8782 +<7a0d> <7a0d> 3321 +<7a10> <7a10> 9449 +<7a11> <7a11> 9440 +<7a12> <7a12> 9443 +<7a13> <7a13> 9447 +<7a14> <7a14> 3761 +<7a15> <7a15> 9445 +<7a17> <7a17> 9444 +<7a18> <7a19> 9441 +<7a1a> <7a1a> 3759 +<7a1b> <7a1b> 9448 +<7a1c> <7a1c> 3758 +<7a1e> <7a1e> 3763 +<7a1f> <7a1f> 3762 +<7a20> <7a20> 3760 +<7a22> <7a22> 9446 +<7a26> <7a26> 10085 +<7a28> <7a28> 10084 +<7a2b> <7a2b> 10080 +<7a2d> <7a2d> 16346 +<7a2e> <7a2e> 4167 +<7a2f> <7a2f> 10083 +<7a30> <7a30> 10082 +<7a31> <7a31> 4168 +<7a37> <7a37> 4551 +<7a39> <7a39> 10659 +<7a3a> <7a3a> 15137 +<7a3b> <7a3b> 4552 +<7a3c> <7a3c> 4548 +<7a3d> <7a3d> 4550 +<7a3e> <7a3e> 16267 +<7a3f> <7a3f> 4547 +<7a40> <7a40> 4549 +<7a43> <7a43> 14700 +<7a44> <7a44> 11254 +<7a45> <7a45> 15857 +<7a46> <7a46> 4882 +<7a47> <7a47> 11256 +<7a48> <7a48> 11255 +<7a49> <7a49> 14131 +<7a4a> <7a4a> 10081 +<7a4b> <7a4b> 4884 +<7a4c> <7a4c> 4883 +<7a4d> <7a4e> 4880 +<7a54> <7a54> 11731 +<7a56> <7a56> 11729 +<7a57> <7a57> 5158 +<7a58> <7a58> 11730 +<7a5a> <7a5a> 11732 +<7a5b> <7a5b> 11728 +<7a5c> <7a5c> 11727 +<7a5f> <7a5f> 12149 +<7a60> <7a60> 5378 +<7a61> <7a62> 5376 +<7a65> <7a65> 14134 +<7a67> <7a68> 12497 +<7a69> <7a69> 5538 +<7a6b> <7a6b> 5537 +<7a6c> <7a6d> 12811 +<7a6e> <7a6e> 12810 +<7a70> <7a71> 13209 +<7a74> <7a74> 876 +<7a75> <7a75> 6161 +<7a76> <7a76> 1274 +<7a78> <7a78> 6690 +<7a79> <7a79> 1637 +<7a7a> <7a7a> 1636 +<7a7b> <7a7b> 6691 +<7a7d> <7a7d> 14135 +<7a7e> <7a7e> 7094 +<7a7f> <7a7f> 1992 +<7a80> <7a80> 7093 +<7a81> <7a81> 1993 +<7a83> <7a83> 15741 +<7a84> <7a84> 2405 +endcidrange + +100 begincidrange +<7a85> <7a85> 7558 +<7a86> <7a86> 7556 +<7a87> <7a87> 7562 +<7a88> <7a88> 2406 +<7a89> <7a89> 7557 +<7a8a> <7a8a> 7561 +<7a8b> <7a8c> 7559 +<7a8f> <7a8f> 8138 +<7a90> <7a90> 8140 +<7a91> <7a91> 17368 +<7a92> <7a92> 2886 +<7a94> <7a94> 8139 +<7a95> <7a95> 2887 +<7a96> <7a96> 3328 +<7a97> <7a97> 3327 +<7a98> <7a98> 3326 +<7a99> <7a99> 8784 +<7a9e> <7a9e> 9452 +<7a9f> <7aa0> 3764 +<7aa2> <7aa2> 9451 +<7aa3> <7aa3> 9450 +<7aa8> <7aa8> 10086 +<7aa9> <7aa9> 4170 +<7aaa> <7aaa> 4169 +<7aab> <7aac> 10087 +<7aae> <7aae> 4554 +<7aaf> <7aaf> 4553 +<7ab0> <7ab0> 14138 +<7ab1> <7ab1> 11260 +<7ab2> <7ab2> 10660 +<7ab3> <7ab3> 10662 +<7ab4> <7ab4> 10661 +<7ab5> <7ab5> 11259 +<7ab6> <7ab6> 11257 +<7ab7> <7ab7> 11261 +<7ab8> <7ab8> 11258 +<7aba> <7aba> 4885 +<7abb> <7abb> 14137 +<7abc> <7abc> 18209 +<7abe> <7abe> 11733 +<7abf> <7abf> 5159 +<7ac0> <7ac1> 11734 +<7ac2> <7ac3> 14139 +<7ac4> <7ac5> 5379 +<7ac7> <7ac7> 5672 +<7ac8> <7ac8> 15743 +<7ac9> <7ac9> 17776 +<7aca> <7aca> 5887 +<7acb> <7acb> 877 +<7acf> <7acf> 18212 +<7ad1> <7ad1> 7095 +<7ad3> <7ad3> 16266 +<7ad8> <7ad8> 7563 +<7ad9> <7ad9> 2407 +<7ada> <7ada> 14144 +<7adb> <7adb> 18213 +<7adc> <7adc> 14673 +<7add> <7add> 14145 +<7adf> <7adf> 3038 +<7ae0> <7ae0> 3037 +<7ae2> <7ae2> 15155 +<7ae3> <7ae3> 3330 +<7ae4> <7ae4> 8786 +<7ae5> <7ae5> 3329 +<7ae6> <7ae6> 8785 +<7ae7> <7ae7> 14429 +<7ae9> <7ae9> 14385 +<7aea> <7aea> 14146 +<7aeb> <7aeb> 9453 +<7aed> <7aed> 4171 +<7aee> <7aee> 10089 +<7aef> <7aef> 4172 +<7af6> <7af6> 5673 +<7af7> <7af7> 12813 +<7af9> <7af9> 1014 +<7afa> <7afa> 1638 +<7afb> <7afb> 6692 +<7afd> <7afd> 1995 +<7afe> <7afe> 15165 +<7aff> <7aff> 1994 +<7b00> <7b01> 7096 +<7b04> <7b04> 7565 +<7b05> <7b05> 7567 +<7b06> <7b06> 2408 +<7b08> <7b08> 7569 +<7b09> <7b09> 7572 +<7b0a> <7b0a> 7570 +<7b0b> <7b0b> 14150 +<7b0c> <7b0c> 15203 +<7b0e> <7b0e> 7571 +<7b0f> <7b0f> 7568 +<7b10> <7b10> 7564 +<7b11> <7b11> 2409 +<7b12> <7b12> 7573 +<7b13> <7b13> 7566 +<7b14> <7b14> 16247 +<7b18> <7b18> 8149 +<7b19> <7b19> 2893 +<7b1a> <7b1a> 8158 +<7b1b> <7b1b> 2890 +endcidrange + +100 begincidrange +<7b1d> <7b1d> 8151 +<7b1e> <7b1e> 2894 +<7b1f> <7b1f> 16145 +<7b20> <7b20> 2888 +<7b22> <7b22> 8146 +<7b23> <7b23> 8159 +<7b24> <7b24> 8147 +<7b25> <7b25> 8144 +<7b26> <7b26> 2892 +<7b27> <7b27> 15199 +<7b28> <7b28> 2889 +<7b29> <7b29> 14152 +<7b2a> <7b2a> 8150 +<7b2b> <7b2b> 8153 +<7b2c> <7b2c> 2891 +<7b2d> <7b2d> 8154 +<7b2e> <7b2e> 2895 +<7b2f> <7b2f> 8155 +<7b30> <7b30> 8145 +<7b31> <7b31> 8152 +<7b32> <7b32> 8156 +<7b33> <7b33> 8148 +<7b34> <7b34> 8143 +<7b35> <7b35> 8141 +<7b38> <7b38> 8157 +<7b39> <7b39> 15726 +<7b3b> <7b3b> 8142 +<7b40> <7b40> 8793 +<7b42> <7b42> 15853 +<7b43> <7b43> 15909 +<7b44> <7b44> 8789 +<7b45> <7b45> 8795 +<7b46> <7b46> 3333 +<7b47> <7b47> 8788 +<7b48> <7b48> 8790 +<7b49> <7b49> 3331 +<7b4a> <7b4a> 8787 +<7b4b> <7b4b> 3338 +<7b4c> <7b4c> 8791 +<7b4d> <7b4d> 3337 +<7b4e> <7b4e> 8792 +<7b4f> <7b4f> 3339 +<7b50> <7b50> 3334 +<7b51> <7b51> 3340 +<7b52> <7b52> 3335 +<7b54> <7b54> 3336 +<7b55> <7b55> 14151 +<7b56> <7b56> 3332 +<7b58> <7b58> 8794 +<7b60> <7b60> 3768 +<7b61> <7b61> 9464 +<7b62> <7b62> 18215 +<7b63> <7b63> 9467 +<7b64> <7b64> 9455 +<7b65> <7b65> 9460 +<7b66> <7b66> 9454 +<7b67> <7b67> 3770 +<7b69> <7b69> 9458 +<7b6c> <7b6c> 18216 +<7b6d> <7b6d> 9456 +<7b6e> <7b6e> 3769 +<7b6f> <7b6f> 14156 +<7b70> <7b70> 9463 +<7b71> <7b71> 9462 +<7b72> <7b72> 9459 +<7b73> <7b73> 9461 +<7b74> <7b74> 9457 +<7b75> <7b75> 4176 +<7b76> <7b76> 9466 +<7b77> <7b77> 3766 +<7b78> <7b78> 9465 +<7b7b> <7b7b> 18217 +<7b82> <7b82> 10105 +<7b84> <7b84> 4183 +<7b85> <7b85> 10100 +<7b87> <7b87> 4182 +<7b88> <7b88> 10090 +<7b8a> <7b8a> 10092 +<7b8b> <7b8b> 4175 +<7b8c> <7b8c> 10097 +<7b8d> <7b8d> 10096 +<7b8e> <7b8e> 10099 +<7b8f> <7b8f> 4180 +<7b90> <7b90> 10094 +<7b91> <7b91> 10093 +<7b92> <7b92> 14162 +<7b94> <7b94> 4179 +<7b95> <7b95> 4174 +<7b96> <7b96> 10095 +<7b97> <7b97> 4177 +<7b98> <7b98> 10101 +<7b99> <7b99> 10103 +<7b9b> <7b9b> 10098 +<7b9c> <7b9c> 10091 +<7b9d> <7b9d> 4178 +<7ba0> <7ba0> 4562 +<7ba1> <7ba1> 4173 +<7ba2> <7ba2> 14155 +<7ba3> <7ba3> 16148 +<7ba4> <7ba4> 10104 +endcidrange + +100 begincidrange +<7bac> <7bac> 10666 +<7bad> <7bad> 4555 +<7baf> <7baf> 10668 +<7bb1> <7bb1> 4556 +<7bb2> <7bb2> 17948 +<7bb4> <7bb4> 4558 +<7bb5> <7bb5> 10671 +<7bb7> <7bb7> 10663 +<7bb8> <7bb8> 4181 +<7bb9> <7bb9> 10669 +<7bbe> <7bbe> 10665 +<7bc0> <7bc0> 3767 +<7bc1> <7bc1> 4561 +<7bc4> <7bc4> 4557 +<7bc6> <7bc7> 4559 +<7bc9> <7bc9> 4888 +<7bca> <7bca> 10670 +<7bcb> <7bcb> 10664 +<7bcc> <7bcc> 4563 +<7bce> <7bce> 10667 +<7bcf> <7bcf> 16152 +<7bd0> <7bd0> 14160 +<7bd4> <7bd4> 11271 +<7bd5> <7bd5> 11266 +<7bd8> <7bd8> 11276 +<7bd9> <7bd9> 4886 +<7bda> <7bda> 11268 +<7bdb> <7bdb> 4890 +<7bdc> <7bdc> 11274 +<7bdd> <7bdd> 11265 +<7bde> <7bde> 11262 +<7bdf> <7bdf> 11277 +<7be0> <7be0> 5165 +<7be1> <7be1> 4891 +<7be2> <7be2> 11273 +<7be3> <7be3> 11263 +<7be4> <7be4> 4889 +<7be5> <7be5> 11267 +<7be6> <7be6> 4893 +<7be7> <7be7> 11264 +<7be8> <7be8> 11269 +<7be9> <7be9> 4892 +<7bea> <7bea> 11272 +<7beb> <7beb> 11275 +<7bf0> <7bf1> 11753 +<7bf2> <7bf2> 11738 +<7bf3> <7bf3> 11745 +<7bf4> <7bf4> 11743 +<7bf7> <7bf7> 5163 +<7bf8> <7bf8> 11750 +<7bf9> <7bf9> 11270 +<7bfa> <7bfa> 14167 +<7bfb> <7bfb> 11741 +<7bfc> <7bfc> 16159 +<7bfd> <7bfd> 11751 +<7bfe> <7bfe> 5162 +<7bff> <7bff> 11740 +<7c00> <7c00> 11739 +<7c01> <7c01> 11749 +<7c02> <7c02> 11746 +<7c03> <7c03> 11748 +<7c05> <7c05> 11736 +<7c06> <7c06> 11752 +<7c07> <7c07> 5160 +<7c09> <7c09> 11747 +<7c0a> <7c0a> 11756 +<7c0b> <7c0b> 11744 +<7c0c> <7c0c> 5164 +<7c0d> <7c0d> 5161 +<7c0e> <7c0e> 11742 +<7c0f> <7c0f> 11737 +<7c10> <7c10> 11755 +<7c11> <7c11> 4887 +<7c12> <7c12> 18218 +<7c15> <7c15> 16481 +<7c19> <7c19> 12152 +<7c1b> <7c1b> 17369 +<7c1c> <7c1c> 12150 +<7c1d> <7c1d> 12156 +<7c1e> <7c1e> 5384 +<7c1f> <7c1f> 12154 +<7c20> <7c20> 12153 +<7c21> <7c21> 5386 +<7c22> <7c22> 12159 +<7c23> <7c23> 5385 +<7c25> <7c25> 12160 +<7c26> <7c26> 12157 +<7c27> <7c27> 5382 +<7c28> <7c28> 12158 +<7c29> <7c29> 12151 +<7c2a> <7c2a> 5383 +<7c2b> <7c2b> 5381 +<7c2c> <7c2c> 12502 +<7c2d> <7c2d> 12155 +<7c30> <7c30> 12161 +<7c33> <7c33> 12499 +<7c35> <7c35> 14169 +<7c37> <7c37> 5543 +<7c38> <7c38> 5541 +<7c39> <7c39> 12501 +endcidrange + +100 begincidrange +<7c3b> <7c3b> 12503 +<7c3c> <7c3c> 12500 +<7c3d> <7c3d> 5542 +<7c3e> <7c3f> 5539 +<7c40> <7c40> 5544 +<7c42> <7c42> 16156 +<7c43> <7c43> 5675 +<7c44> <7c44> 14171 +<7c45> <7c45> 12818 +<7c47> <7c47> 12817 +<7c48> <7c48> 12815 +<7c49> <7c49> 12814 +<7c4a> <7c4a> 12816 +<7c4c> <7c4c> 5674 +<7c4d> <7c4d> 5676 +<7c50> <7c50> 5761 +<7c51> <7c51> 16312 +<7c53> <7c53> 13034 +<7c54> <7c54> 13033 +<7c56> <7c56> 16127 +<7c57> <7c57> 13211 +<7c59> <7c59> 13213 +<7c5a> <7c5a> 13215 +<7c5b> <7c5b> 13214 +<7c5c> <7c5c> 13212 +<7c5d> <7c5d> 15167 +<7c5f> <7c5f> 5841 +<7c60> <7c60> 5840 +<7c63> <7c63> 5889 +<7c64> <7c64> 5888 +<7c65> <7c65> 5890 +<7c66> <7c66> 13355 +<7c67> <7c67> 13354 +<7c69> <7c69> 13526 +<7c6a> <7c6a> 13459 +<7c6b> <7c6b> 13527 +<7c6c> <7c6c> 5957 +<7c6d> <7c6d> 15168 +<7c6e> <7c6e> 5958 +<7c6f> <7c6f> 13575 +<7c70> <7c70> 16210 +<7c72> <7c72> 5995 +<7c73> <7c73> 1015 +<7c74> <7c74> 18076 +<7c75> <7c75> 6693 +<7c78> <7c79> 7099 +<7c7a> <7c7a> 7098 +<7c7b> <7c7b> 18221 +<7c7c> <7c7c> 15177 +<7c7d> <7c7d> 1996 +<7c7e> <7c7e> 16154 +<7c7f> <7c81> 7101 +<7c83> <7c83> 14172 +<7c84> <7c84> 7574 +<7c85> <7c85> 7580 +<7c86> <7c86> 16157 +<7c88> <7c88> 7578 +<7c89> <7c89> 2410 +<7c8a> <7c8a> 7576 +<7c8c> <7c8c> 7577 +<7c8d> <7c8d> 7579 +<7c8e> <7c8e> 15176 +<7c91> <7c91> 7575 +<7c92> <7c92> 2896 +<7c94> <7c94> 8160 +<7c95> <7c95> 2898 +<7c96> <7c96> 8162 +<7c97> <7c97> 2897 +<7c98> <7c98> 8161 +<7c9c> <7c9c> 18222 +<7c9e> <7c9e> 8797 +<7c9f> <7c9f> 3341 +<7ca1> <7ca1> 8799 +<7ca2> <7ca2> 8796 +<7ca3> <7ca3> 8163 +<7ca5> <7ca5> 3342 +<7ca6> <7ca6> 14174 +<7ca7> <7ca7> 14061 +<7ca8> <7ca8> 8798 +<7cac> <7cac> 14469 +<7cae> <7cae> 15178 +<7caf> <7caf> 9470 +<7cb1> <7cb1> 3771 +<7cb2> <7cb2> 9468 +<7cb3> <7cb3> 3772 +<7cb4> <7cb4> 9469 +<7cb5> <7cb5> 3773 +<7cb8> <7cb8> 18224 +<7cb9> <7cb9> 4184 +<7cba> <7cba> 10109 +<7cbb> <7cbb> 10106 +<7cbc> <7cbc> 10108 +<7cbd> <7cbe> 4185 +<7cbf> <7cbf> 10107 +<7cc2> <7cc2> 16343 +<7cc5> <7cc5> 10672 +<7cc7> <7cc7> 14177 +<7cc8> <7cc8> 10673 +<7cc9> <7cc9> 14176 +<7cca> <7cca> 4564 +endcidrange + +100 begincidrange +<7ccb> <7ccb> 10675 +<7ccc> <7ccc> 10674 +<7ccd> <7ccd> 15173 +<7cce> <7cce> 289 +<7cd0> <7cd1> 11281 +<7cd2> <7cd2> 11278 +<7cd3> <7cd3> 15708 +<7cd4> <7cd4> 11279 +<7cd5> <7cd6> 4894 +<7cd7> <7cd7> 11280 +<7cd9> <7cd9> 5171 +<7cda> <7cda> 16345 +<7cdc> <7cdc> 5167 +<7cdd> <7cdd> 5172 +<7cde> <7cde> 5168 +<7cdf> <7cdf> 5170 +<7ce0> <7ce0> 5166 +<7ce2> <7ce2> 5169 +<7ce6> <7ce6> 14178 +<7ce7> <7ce7> 5387 +<7ce8> <7ce8> 11757 +<7cea> <7cea> 12505 +<7cec> <7cec> 12504 +<7ced> <7ced> 17370 +<7cee> <7cee> 12819 +<7cef> <7cf0> 5677 +<7cf1> <7cf1> 13217 +<7cf2> <7cf2> 13035 +<7cf3> <7cf3> 14180 +<7cf4> <7cf4> 13216 +<7cf5> <7cf5> 14181 +<7cf6> <7cf6> 13528 +<7cf7> <7cf7> 13597 +<7cf8> <7cf8> 1016 +<7cf9> <7cf9> 17656 +<7cfb> <7cfb> 1275 +<7cfc> <7cfc> 17773 +<7cfd> <7cfd> 6694 +<7cfe> <7cfe> 1639 +<7d00> <7d00> 1999 +<7d01> <7d01> 7106 +<7d02> <7d02> 1997 +<7d03> <7d03> 7104 +<7d04> <7d04> 2002 +<7d05> <7d05> 1998 +<7d06> <7d06> 2003 +<7d07> <7d07> 2001 +<7d08> <7d08> 7105 +<7d09> <7d09> 2000 +<7d0a> <7d0a> 2414 +<7d0b> <7d0b> 2413 +<7d0c> <7d0c> 7591 +<7d0d> <7d0d> 2422 +<7d0e> <7d0e> 7584 +<7d0f> <7d0f> 7590 +<7d10> <7d10> 2418 +<7d11> <7d11> 7583 +<7d12> <7d12> 7589 +<7d13> <7d13> 7587 +<7d14> <7d14> 2417 +<7d15> <7d15> 2419 +<7d16> <7d16> 7586 +<7d17> <7d17> 2412 +<7d18> <7d18> 7585 +<7d19> <7d19> 2423 +<7d1a> <7d1a> 2420 +<7d1b> <7d1b> 2424 +<7d1c> <7d1c> 2421 +<7d1d> <7d1d> 7582 +<7d1e> <7d1e> 7581 +<7d1f> <7d1f> 7588 +<7d20> <7d20> 2415 +<7d21> <7d21> 2411 +<7d22> <7d22> 2416 +<7d25> <7d25> 16094 +<7d28> <7d28> 8178 +<7d29> <7d29> 8171 +<7d2b> <7d2b> 3347 +<7d2c> <7d2c> 8170 +<7d2e> <7d2e> 2902 +<7d2f> <7d2f> 2909 +<7d30> <7d30> 2906 +<7d31> <7d31> 2912 +<7d32> <7d32> 2911 +<7d33> <7d33> 2907 +<7d35> <7d35> 8164 +<7d36> <7d36> 8167 +<7d38> <7d38> 8166 +<7d39> <7d39> 2903 +<7d3a> <7d3a> 8168 +<7d3b> <7d3b> 8177 +<7d3c> <7d3c> 2904 +<7d3d> <7d3d> 8165 +<7d3e> <7d3f> 8174 +<7d40> <7d40> 2905 +<7d41> <7d41> 8172 +<7d42> <7d42> 2910 +<7d43> <7d43> 2900 +<7d44> <7d44> 2908 +<7d45> <7d45> 8169 +endcidrange + +100 begincidrange +<7d46> <7d46> 2899 +<7d47> <7d47> 8173 +<7d4a> <7d4a> 8176 +<7d4d> <7d4d> 16349 +<7d4e> <7d4e> 8816 +<7d4f> <7d4f> 8807 +<7d50> <7d50> 3344 +<7d51> <7d51> 8814 +<7d52> <7d52> 8811 +<7d53> <7d53> 8803 +<7d54> <7d54> 8812 +<7d55> <7d55> 3346 +<7d56> <7d56> 8804 +<7d58> <7d58> 8800 +<7d5a> <7d5a> 16019 +<7d5b> <7d5b> 3779 +<7d5c> <7d5c> 8809 +<7d5d> <7d5d> 14185 +<7d5e> <7d5e> 3343 +<7d5f> <7d5f> 8815 +<7d61> <7d61> 3350 +<7d62> <7d62> 3352 +<7d63> <7d63> 8802 +<7d66> <7d66> 3351 +<7d67> <7d67> 8805 +<7d68> <7d68> 3345 +<7d69> <7d69> 8813 +<7d6a> <7d6a> 8806 +<7d6b> <7d6b> 8810 +<7d6d> <7d6d> 8808 +<7d6e> <7d6e> 3348 +<7d6f> <7d6f> 8801 +<7d70> <7d70> 3353 +<7d71> <7d71> 2901 +<7d72> <7d72> 3349 +<7d73> <7d73> 3354 +<7d79> <7d79> 3775 +<7d7a> <7d7a> 9477 +<7d7b> <7d7b> 9479 +<7d7c> <7d7c> 9481 +<7d7d> <7d7d> 9485 +<7d7f> <7d7f> 9475 +<7d80> <7d80> 9473 +<7d81> <7d81> 3777 +<7d83> <7d83> 9480 +<7d84> <7d84> 9484 +<7d85> <7d85> 9476 +<7d86> <7d86> 9472 +<7d88> <7d88> 9471 +<7d89> <7d89> 14187 +<7d8c> <7d8c> 9482 +<7d8d> <7d8d> 9474 +<7d8e> <7d8e> 9478 +<7d8f> <7d8f> 3778 +<7d91> <7d91> 3776 +<7d92> <7d92> 9486 +<7d93> <7d93> 3774 +<7d94> <7d94> 9483 +<7d96> <7d96> 10126 +<7d97> <7d97> 15187 +<7d9c> <7d9c> 4189 +<7d9d> <7d9d> 10118 +<7d9e> <7d9e> 4577 +<7d9f> <7d9f> 10128 +<7da0> <7da0> 4192 +<7da1> <7da1> 10132 +<7da2> <7da2> 4198 +<7da3> <7da3> 10113 +<7da4> <7da4> 18135 +<7da6> <7da6> 10129 +<7da7> <7da7> 10110 +<7da8> <7da8> 15516 +<7da9> <7da9> 10131 +<7daa> <7daa> 10114 +<7dab> <7dab> 14188 +<7dac> <7dac> 4205 +<7dad> <7dad> 4202 +<7dae> <7dae> 10130 +<7daf> <7daf> 10124 +<7db0> <7db0> 4188 +<7db1> <7db1> 4196 +<7db2> <7db2> 4195 +<7db3> <7db3> 14190 +<7db4> <7db4> 4194 +<7db5> <7db5> 4200 +<7db7> <7db7> 10111 +<7db8> <7db8> 4201 +<7db9> <7db9> 10125 +<7dba> <7dba> 4197 +<7dbb> <7dbb> 4187 +<7dbc> <7dbc> 10127 +<7dbd> <7dbe> 4190 +<7dbf> <7dbf> 4199 +<7dc0> <7dc0> 10116 +<7dc1> <7dc1> 10115 +<7dc2> <7dc2> 10112 +<7dc4> <7dc4> 10120 +<7dc5> <7dc5> 10117 +<7dc6> <7dc6> 10121 +<7dc7> <7dc7> 4204 +endcidrange + +100 begincidrange +<7dc9> <7dc9> 10133 +<7dca> <7dca> 4193 +<7dcb> <7dcc> 10122 +<7dcd> <7dcd> 17774 +<7dce> <7dce> 10119 +<7dcf> <7dcf> 18229 +<7dd0> <7dd0> 18231 +<7dd2> <7dd2> 4203 +<7dd3> <7dd3> 15182 +<7dd4> <7dd4> 18230 +<7dd6> <7dd6> 14191 +<7dd7> <7dd7> 10680 +<7dd8> <7dd8> 4569 +<7dd9> <7dd9> 4578 +<7dda> <7dda> 4574 +<7ddb> <7ddb> 10677 +<7ddc> <7ddc> 15180 +<7ddd> <7ddd> 4571 +<7dde> <7dde> 4575 +<7ddf> <7ddf> 10689 +<7de0> <7de0> 4565 +<7de1> <7de1> 10681 +<7de3> <7de3> 4573 +<7de4> <7de4> 14194 +<7de5> <7de5> 14198 +<7de6> <7de6> 10684 +<7de7> <7de7> 10679 +<7de8> <7de8> 4572 +<7de9> <7de9> 4576 +<7dea> <7dea> 10678 +<7dec> <7dec> 4570 +<7dee> <7dee> 10688 +<7def> <7def> 4567 +<7df0> <7df0> 10687 +<7df1> <7df1> 10686 +<7df2> <7df2> 4579 +<7df3> <7df3> 10440 +<7df4> <7df4> 4566 +<7df5> <7df5> 14196 +<7df6> <7df6> 10685 +<7df7> <7df7> 10676 +<7df9> <7df9> 4580 +<7dfa> <7dfa> 10683 +<7dfb> <7dfb> 4568 +<7dfd> <7dfd> 18232 +<7dfe> <7dfe> 15567 +<7e03> <7e03> 10682 +<7e07> <7e07> 15181 +<7e08> <7e08> 4898 +<7e09> <7e09> 4903 +<7e0a> <7e0a> 4896 +<7e0b> <7e0b> 11295 +<7e0c> <7e0c> 11286 +<7e0d> <7e0d> 11298 +<7e0e> <7e0e> 11290 +<7e0f> <7e0f> 11296 +<7e10> <7e10> 4904 +<7e11> <7e11> 4897 +<7e12> <7e12> 11283 +<7e13> <7e13> 11289 +<7e14> <7e14> 11299 +<7e15> <7e15> 11292 +<7e16> <7e16> 11297 +<7e17> <7e17> 11285 +<7e1a> <7e1a> 11293 +<7e1b> <7e1b> 4899 +<7e1c> <7e1c> 11291 +<7e1d> <7e1d> 4902 +<7e1e> <7e1e> 4901 +<7e1f> <7e20> 11287 +<7e21> <7e21> 11284 +<7e22> <7e22> 11294 +<7e23> <7e23> 4900 +<7e24> <7e24> 11301 +<7e25> <7e25> 11300 +<7e27> <7e27> 14207 +<7e29> <7e29> 11768 +<7e2a> <7e2a> 11764 +<7e2b> <7e2b> 5179 +<7e2d> <7e2d> 11758 +<7e2e> <7e2e> 5173 +<7e2f> <7e2f> 5189 +<7e30> <7e30> 11770 +<7e31> <7e31> 5181 +<7e32> <7e32> 5177 +<7e33> <7e33> 11761 +<7e34> <7e34> 5184 +<7e35> <7e35> 5187 +<7e36> <7e36> 11772 +<7e37> <7e37> 5176 +<7e38> <7e38> 11763 +<7e39> <7e39> 5185 +<7e3a> <7e3a> 11774 +<7e3b> <7e3b> 11771 +<7e3c> <7e3c> 11759 +<7e3d> <7e3d> 5180 +<7e3e> <7e3e> 5174 +<7e3f> <7e3f> 5188 +<7e40> <7e40> 11766 +<7e41> <7e41> 5183 +endcidrange + +100 begincidrange +<7e42> <7e42> 11760 +<7e43> <7e43> 5178 +<7e44> <7e44> 11773 +<7e45> <7e45> 5182 +<7e46> <7e46> 5175 +<7e47> <7e47> 11767 +<7e48> <7e48> 5186 +<7e49> <7e49> 11765 +<7e4c> <7e4c> 11769 +<7e50> <7e50> 12163 +<7e51> <7e51> 12169 +<7e52> <7e52> 5393 +<7e53> <7e53> 12172 +<7e54> <7e55> 5388 +<7e56> <7e56> 12164 +<7e57> <7e57> 12171 +<7e58> <7e58> 12166 +<7e59> <7e59> 5394 +<7e5a> <7e5a> 5391 +<7e5c> <7e5c> 12162 +<7e5e> <7e5e> 5390 +<7e5f> <7e5f> 12168 +<7e60> <7e60> 12170 +<7e61> <7e61> 5392 +<7e62> <7e62> 12167 +<7e63> <7e63> 12165 +<7e65> <7e65> 18130 +<7e67> <7e67> 14182 +<7e68> <7e68> 12515 +<7e69> <7e6a> 5548 +<7e6b> <7e6b> 5545 +<7e6d> <7e6d> 5546 +<7e6e> <7e6e> 14203 +<7e6f> <7e6f> 12511 +<7e70> <7e70> 12509 +<7e72> <7e72> 12513 +<7e73> <7e73> 5550 +<7e74> <7e74> 12514 +<7e75> <7e75> 12507 +<7e76> <7e76> 12506 +<7e77> <7e77> 12510 +<7e78> <7e78> 12508 +<7e79> <7e79> 5547 +<7e7a> <7e7a> 12512 +<7e7b> <7e7b> 12820 +<7e7c> <7e7c> 5681 +<7e7d> <7e7d> 5680 +<7e7e> <7e7e> 12821 +<7e7f> <7e7f> 15953 +<7e80> <7e80> 12823 +<7e81> <7e81> 12822 +<7e82> <7e82> 5682 +<7e86> <7e86> 13040 +<7e87> <7e88> 13037 +<7e8a> <7e8a> 13036 +<7e8b> <7e8b> 13039 +<7e8c> <7e8c> 5763 +<7e8d> <7e8d> 13041 +<7e8e> <7e8e> 16073 +<7e8f> <7e8f> 5762 +<7e91> <7e91> 13218 +<7e92> <7e92> 18078 +<7e93> <7e93> 5891 +<7e94> <7e94> 5893 +<7e95> <7e95> 13356 +<7e96> <7e96> 5892 +<7e97> <7e97> 13460 +<7e98> <7e98> 13530 +<7e99> <7e99> 13532 +<7e9a> <7e9a> 13529 +<7e9b> <7e9b> 13531 +<7e9c> <7e9c> 5977 +<7e9f> <7e9f> 18619 +<7ea4> <7ea4> 17755 +<7eac> <7eac> 17756 +<7eba> <7eba> 17757 +<7ec7> <7ec7> 17758 +<7ecf> <7ecf> 17759 +<7edf> <7edf> 17760 +<7f06> <7f06> 17761 +<7f36> <7f36> 1017 +<7f37> <7f37> 17762 +<7f38> <7f38> 2004 +<7f39> <7f39> 7455 +<7f3a> <7f3a> 2425 +<7f3d> <7f3d> 2913 +<7f3e> <7f3f> 8817 +<7f40> <7f41> 14208 +<7f43> <7f43> 11302 +<7f44> <7f44> 5190 +<7f45> <7f45> 11775 +<7f47> <7f47> 14210 +<7f48> <7f48> 5395 +<7f49> <7f49> 15977 +<7f4a> <7f4a> 12517 +<7f4b> <7f4b> 12516 +<7f4c> <7f4c> 5683 +<7f4d> <7f4d> 13042 +<7f4e> <7f4e> 15183 +<7f4f> <7f4f> 13219 +endcidrange + +100 begincidrange +<7f50> <7f50> 5926 +<7f51> <7f51> 6162 +<7f52> <7f52> 17654 +<7f53> <7f53> 17657 +<7f54> <7f54> 1640 +<7f55> <7f55> 1276 +<7f58> <7f58> 7107 +<7f5b> <7f5b> 7597 +<7f5c> <7f5c> 7592 +<7f5d> <7f5d> 7596 +<7f5e> <7f5e> 7594 +<7f5f> <7f5f> 2426 +<7f60> <7f60> 7595 +<7f61> <7f61> 7593 +<7f63> <7f63> 8179 +<7f65> <7f66> 8819 +<7f67> <7f68> 9489 +<7f69> <7f6a> 3781 +<7f6b> <7f6b> 9488 +<7f6c> <7f6c> 9491 +<7f6d> <7f6d> 9487 +<7f6e> <7f6e> 3780 +<7f70> <7f70> 4206 +<7f71> <7f71> 16391 +<7f72> <7f72> 3783 +<7f73> <7f73> 10134 +<7f75> <7f75> 4581 +<7f76> <7f76> 10690 +<7f77> <7f77> 4582 +<7f78> <7f78> 16251 +<7f79> <7f79> 4905 +<7f7a> <7f7a> 11305 +<7f7b> <7f7c> 11303 +<7f7d> <7f7d> 11778 +<7f7e> <7f7e> 11777 +<7f7f> <7f7f> 11776 +<7f83> <7f83> 12518 +<7f85> <7f85> 5551 +<7f86> <7f86> 12519 +<7f87> <7f87> 13220 +<7f88> <7f88> 5927 +<7f89> <7f89> 13461 +<7f8a> <7f8a> 1018 +<7f8b> <7f8b> 1642 +<7f8c> <7f8c> 1641 +<7f8d> <7f8d> 7109 +<7f8e> <7f8e> 2005 +<7f8f> <7f8f> 16924 +<7f91> <7f91> 7108 +<7f92> <7f92> 7599 +<7f93> <7f93> 17371 +<7f94> <7f94> 2427 +<7f95> <7f95> 8180 +<7f96> <7f96> 7598 +<7f97> <7f97> 14214 +<7f9a> <7f9a> 2915 +<7f9b> <7f9b> 8183 +<7f9c> <7f9d> 8181 +<7f9e> <7f9e> 2914 +<7fa0> <7fa1> 8822 +<7fa2> <7fa2> 8821 +<7fa3> <7fa3> 14216 +<7fa4> <7fa4> 3786 +<7fa5> <7fa5> 9493 +<7fa6> <7fa6> 9492 +<7fa7> <7fa7> 9494 +<7fa8> <7fa8> 3785 +<7fa9> <7fa9> 3784 +<7fac> <7fac> 10691 +<7fad> <7fad> 10693 +<7fae> <7fae> 17372 +<7faf> <7faf> 4583 +<7fb0> <7fb0> 10692 +<7fb1> <7fb1> 11306 +<7fb2> <7fb2> 4906 +<7fb3> <7fb3> 12174 +<7fb4> <7fb4> 18233 +<7fb5> <7fb5> 12173 +<7fb6> <7fb6> 5552 +<7fb7> <7fb7> 12520 +<7fb8> <7fb8> 5554 +<7fb9> <7fb9> 5553 +<7fba> <7fba> 12824 +<7fbb> <7fbb> 13043 +<7fbc> <7fbc> 5764 +<7fbd> <7fbd> 1019 +<7fbe> <7fbe> 7110 +<7fbf> <7fbf> 2006 +<7fc0> <7fc0> 7602 +<7fc1> <7fc1> 2429 +<7fc2> <7fc2> 7601 +<7fc3> <7fc3> 7600 +<7fc5> <7fc5> 2428 +<7fc7> <7fc7> 8189 +<7fc9> <7fc9> 8191 +<7fca> <7fcb> 8184 +<7fcc> <7fcc> 2916 +<7fcd> <7fcd> 8186 +<7fce> <7fce> 2917 +<7fcf> <7fcf> 8190 +endcidrange + +100 begincidrange +<7fd0> <7fd1> 8187 +<7fd2> <7fd2> 2918 +<7fd4> <7fd5> 3356 +<7fd7> <7fd7> 8824 +<7fdb> <7fdc> 9495 +<7fdd> <7fdd> 15198 +<7fde> <7fde> 10138 +<7fdf> <7fdf> 4209 +<7fe0> <7fe1> 4207 +<7fe2> <7fe3> 10135 +<7fe5> <7fe5> 10137 +<7fe6> <7fe6> 10698 +<7fe7> <7fe7> 18153 +<7fe8> <7fe8> 10699 +<7fe9> <7fe9> 4584 +<7fea> <7fea> 10696 +<7feb> <7feb> 10695 +<7fec> <7fec> 10697 +<7fed> <7fed> 10694 +<7fee> <7fee> 4909 +<7fef> <7fef> 11307 +<7ff0> <7ff1> 4907 +<7ff2> <7ff2> 11780 +<7ff3> <7ff3> 5191 +<7ff4> <7ff4> 11779 +<7ff5> <7ff5> 12031 +<7ff7> <7ff8> 12175 +<7ff9> <7ff9> 5396 +<7ffa> <7ffa> 14222 +<7ffb> <7ffb> 5397 +<7ffc> <7ffc> 5192 +<7ffd> <7ffe> 12521 +<7fff> <7fff> 12825 +<8000> <8000> 5684 +<8001> <8001> 1020 +<8002> <8002> 17661 +<8003> <8003> 1021 +<8004> <8004> 2431 +<8005> <8005> 1643 +<8006> <8006> 2430 +<8007> <8007> 7111 +<8008> <8008> 14225 +<800b> <800b> 3358 +<800c> <800c> 1022 +<800d> <800d> 2008 +<800e> <800f> 7112 +<8010> <8010> 2007 +<8011> <8011> 2009 +<8012> <8012> 1023 +<8014> <8014> 7114 +<8015> <8015> 2433 +<8016> <8016> 7603 +<8017> <8017> 2435 +<8018> <8018> 2432 +<8019> <8019> 2434 +<801b> <801b> 8194 +<801c> <801c> 2919 +<801d> <801d> 14226 +<801e> <801e> 8193 +<801f> <801f> 8192 +<8020> <8020> 18236 +<8021> <8021> 9497 +<8024> <8024> 10139 +<8025> <8025> 18237 +<8026> <8026> 4585 +<8028> <8028> 4910 +<8029> <8029> 11309 +<802a> <802a> 11308 +<802c> <802c> 11781 +<802e> <802e> 18238 +<802f> <802f> 14228 +<8030> <8030> 13044 +<8031> <8031> 18239 +<8033> <8033> 1024 +<8034> <8034> 6360 +<8035> <8035> 6695 +<8036> <8036> 2010 +<8037> <8037> 7115 +<8039> <8039> 7605 +<803b> <803c> 14231 +<803d> <803d> 2436 +<803e> <803e> 7604 +<803f> <803f> 2437 +<8043> <8043> 8196 +<8046> <8046> 2921 +<8047> <8047> 8195 +<8048> <8048> 8197 +<804a> <804a> 2920 +<804f> <8050> 8826 +<8051> <8051> 8825 +<8052> <8052> 3359 +<8054> <8054> 18240 +<8056> <8056> 3787 +<8058> <8058> 3788 +<805a> <805a> 4211 +<805b> <805b> 16357 +<805c> <805c> 10141 +<805d> <805d> 10140 +<805e> <805e> 4210 +<8061> <8061> 14233 +endcidrange + +100 begincidrange +<8062> <8062> 16355 +<8063> <8063> 16348 +<8064> <8064> 10700 +<8066> <8066> 16347 +<8067> <8067> 10701 +<806c> <806c> 11310 +<806f> <806f> 5196 +<8070> <8070> 5195 +<8071> <8072> 5193 +<8073> <8073> 5197 +<8075> <8075> 12177 +<8076> <8076> 5399 +<8077> <8077> 5398 +<8078> <8078> 12523 +<8079> <8079> 12826 +<807d> <807d> 5843 +<807e> <807e> 5842 +<807f> <807f> 1025 +<8080> <8080> 17662 +<8082> <8082> 7404 +<8084> <8084> 3790 +<8085> <8085> 3360 +<8086> <8086> 3789 +<8087> <8087> 4212 +<8089> <8089> 1026 +<808a> <808a> 6067 +<808b> <808c> 1027 +<808f> <808f> 6696 +<8090> <8090> 6363 +<8092> <8092> 6364 +<8093> <8093> 1278 +<8095> <8095> 6361 +<8096> <8096> 1277 +<8098> <8098> 1280 +<8099> <8099> 6362 +<809a> <809a> 1282 +<809b> <809b> 1281 +<809c> <809c> 6365 +<809d> <809d> 1279 +<809f> <809f> 17782 +<80a1> <80a1> 1648 +<80a2> <80a2> 1646 +<80a3> <80a3> 6698 +<80a5> <80a5> 1645 +<80a7> <80a7> 14240 +<80a9> <80a9> 1650 +<80aa> <80aa> 1652 +<80ab> <80ab> 1649 +<80ad> <80ad> 6701 +<80ae> <80ae> 6697 +<80af> <80af> 1653 +<80b1> <80b1> 1647 +<80b2> <80b2> 1283 +<80b4> <80b4> 1651 +<80b5> <80b5> 6700 +<80b6> <80b6> 16046 +<80b7> <80b7> 18243 +<80b8> <80b8> 6699 +<80ba> <80ba> 1644 +<80bc> <80bc> 17778 +<80bd> <80bd> 15995 +<80c2> <80c2> 7121 +<80c3> <80c4> 2014 +<80c5> <80c5> 7123 +<80c6> <80c6> 15220 +<80c7> <80c7> 7117 +<80c8> <80c8> 7120 +<80c9> <80c9> 7129 +<80ca> <80ca> 7127 +<80cc> <80cc> 2016 +<80cd> <80cd> 7133 +<80ce> <80ce> 2019 +<80cf> <80cf> 7130 +<80d0> <80d0> 7122 +<80d1> <80d1> 7119 +<80d4> <80d4> 8829 +<80d5> <80d5> 7128 +<80d6> <80d6> 2011 +<80d7> <80d7> 7131 +<80d8> <80d8> 7116 +<80d9> <80d9> 7125 +<80da> <80da> 2013 +<80db> <80db> 2018 +<80dc> <80dc> 7126 +<80dd> <80dd> 2022 +<80de> <80de> 2020 +<80e0> <80e0> 7118 +<80e1> <80e1> 2017 +<80e3> <80e3> 7124 +<80e4> <80e4> 2021 +<80e5> <80e5> 2012 +<80e6> <80e6> 7132 +<80e9> <80e9> 18244 +<80ec> <80ec> 17897 +<80ed> <80ed> 2442 +<80ef> <80ef> 2451 +<80f0> <80f0> 2440 +<80f1> <80f1> 2438 +<80f2> <80f2> 7607 +<80f3> <80f3> 2446 +endcidrange + +100 begincidrange +<80f4> <80f4> 2443 +<80f5> <80f5> 7609 +<80f6> <80f6> 17780 +<80f8> <80f8> 2445 +<80f9> <80f9> 7608 +<80fa> <80fa> 7606 +<80fb> <80fb> 7611 +<80fc> <80fc> 2450 +<80fd> <80fd> 2448 +<80fe> <80fe> 8828 +<8100> <8100> 7612 +<8101> <8101> 7610 +<8102> <8102> 2439 +<8103> <8103> 16359 +<8105> <8105> 2441 +<8106> <8106> 2444 +<8107> <8107> 14242 +<8108> <8108> 2447 +<8109> <8109> 15221 +<810a> <810a> 2449 +<810c> <810c> 18246 +<810e> <810e> 18247 +<8112> <8112> 18248 +<8114> <8114> 18249 +<8115> <8115> 8207 +<8116> <8116> 2923 +<8117> <8117> 15981 +<8118> <8118> 8198 +<8119> <8119> 8200 +<811a> <811a> 14243 +<811b> <811b> 8201 +<811d> <811d> 8209 +<811e> <811e> 8205 +<811f> <811f> 8203 +<8121> <8121> 8206 +<8122> <8122> 8210 +<8123> <8123> 2924 +<8124> <8124> 2928 +<8125> <8125> 8199 +<8127> <8127> 8208 +<8129> <8129> 2926 +<812a> <812a> 14905 +<812b> <812b> 2925 +<812c> <812c> 8204 +<812d> <812d> 8202 +<812f> <812f> 2922 +<8130> <8130> 2927 +<8132> <8132> 15993 +<8134> <8134> 17900 +<8137> <8137> 15218 +<8139> <8139> 3366 +<813a> <813a> 8837 +<813d> <813d> 8835 +<813e> <813e> 3368 +<8142> <8142> 15222 +<8143> <8143> 8830 +<8144> <8144> 9511 +<8146> <8146> 3367 +<8147> <8147> 8834 +<8148> <8148> 15990 +<814a> <814a> 8831 +<814b> <814b> 3363 +<814c> <814c> 3369 +<814d> <814d> 8836 +<814e> <814e> 3365 +<814f> <814f> 8833 +<8150> <8150> 4213 +<8151> <8151> 3364 +<8152> <8152> 8832 +<8153> <8153> 3370 +<8154> <8154> 3362 +<8155> <8155> 3361 +<8156> <8156> 18252 +<8159> <815a> 18253 +<815b> <815b> 9503 +<815c> <815c> 9501 +<815e> <815e> 9507 +<8160> <8160> 9499 +<8161> <8161> 9512 +<8162> <8162> 9504 +<8164> <8164> 9498 +<8165> <8165> 3794 +<8166> <8166> 3800 +<8167> <8167> 9509 +<8169> <8169> 9502 +<816b> <816b> 3797 +<816d> <816d> 17348 +<816e> <816e> 3795 +<816f> <816f> 9510 +<8170> <8170> 3792 +<8171> <8171> 3791 +<8172> <8172> 9505 +<8173> <8173> 3796 +<8174> <8174> 3371 +<8176> <8176> 9508 +<8177> <8177> 9500 +<8178> <8178> 3793 +<8179> <817a> 3798 +<817c> <817c> 18256 +<817f> <817f> 4218 +endcidrange + +100 begincidrange +<8180> <8180> 4214 +<8182> <8182> 4219 +<8183> <8183> 10144 +<8184> <8184> 17349 +<8186> <8186> 10143 +<8187> <8187> 10145 +<8188> <8188> 4216 +<8189> <8189> 10142 +<818a> <818a> 4217 +<818b> <818b> 10148 +<818c> <818c> 10147 +<818d> <818d> 10146 +<818f> <818f> 4215 +<8193> <8193> 17350 +<8195> <8195> 10705 +<8197> <8197> 10708 +<8198> <8198> 4591 +<8199> <8199> 10707 +<819a> <819a> 4590 +<819b> <819d> 4586 +<819e> <819e> 10704 +<819f> <819f> 10703 +<81a0> <81a0> 4589 +<81a2> <81a2> 10706 +<81a3> <81a3> 10702 +<81a5> <81a5> 18259 +<81a6> <81a6> 11312 +<81a7> <81a7> 11322 +<81a8> <81a8> 4913 +<81a9> <81a9> 4912 +<81aa> <81aa> 17252 +<81ab> <81ab> 11316 +<81ac> <81ac> 11318 +<81ae> <81ae> 11313 +<81b0> <81b0> 11317 +<81b1> <81b1> 11311 +<81b2> <81b2> 11320 +<81b3> <81b3> 4911 +<81b4> <81b4> 11319 +<81b5> <81b5> 11315 +<81b6> <81b6> 16050 +<81b7> <81b7> 11321 +<81b9> <81b9> 11314 +<81ba> <81ba> 5200 +<81bb> <81bb> 11782 +<81bc> <81bc> 11788 +<81bd> <81bd> 5204 +<81be> <81be> 5206 +<81bf> <81bf> 5203 +<81c0> <81c0> 5202 +<81c1> <81c1> 18261 +<81c2> <81c2> 5201 +<81c3> <81c3> 5199 +<81c4> <81c4> 11783 +<81c5> <81c5> 11786 +<81c6> <81c6> 5198 +<81c7> <81c7> 11787 +<81c8> <81c8> 16366 +<81c9> <81c9> 5205 +<81ca> <81ca> 11785 +<81cc> <81cc> 11784 +<81cd> <81cd> 5400 +<81cf> <81cf> 5401 +<81d0> <81d0> 12180 +<81d1> <81d2> 12178 +<81d5> <81d5> 12525 +<81d7> <81d7> 12524 +<81d8> <81d8> 5555 +<81d9> <81d9> 12828 +<81da> <81da> 5685 +<81db> <81db> 12827 +<81dd> <81dd> 13045 +<81de> <81de> 13221 +<81df> <81df> 5844 +<81e0> <81e1> 13533 +<81e2> <81e2> 5894 +<81e3> <81e3> 1029 +<81e4> <81e4> 18262 +<81e5> <81e5> 1654 +<81e6> <81e6> 8838 +<81e7> <81e7> 4220 +<81e8> <81e8> 5207 +<81e9> <81e9> 11789 +<81ea> <81ea> 1030 +<81ec> <81ec> 2453 +<81ed> <81ed> 2452 +<81ee> <81ee> 8839 +<81ef> <81ef> 17105 +<81f2> <81f2> 11323 +<81f3> <81f3> 1031 +<81f4> <81f4> 2023 +<81f6> <81f6> 15713 +<81f7> <81f9> 8840 +<81fa> <81fa> 4221 +<81fb> <81fb> 4914 +<81fc> <81fc> 1032 +<81fe> <81fe> 1655 +<81ff> <81ff> 7134 +<8200> <8200> 2454 +<8201> <8201> 7613 +endcidrange + +100 begincidrange +<8202> <8202> 2929 +<8204> <8204> 8843 +<8205> <8205> 3801 +<8207> <8207> 4222 +<8208> <8208> 4915 +<8209> <8209> 5208 +<820a> <820a> 5402 +<820b> <820b> 12526 +<820c> <820c> 1033 +<820d> <820d> 1656 +<8210> <8210> 2455 +<8211> <8211> 8211 +<8212> <8212> 3372 +<8214> <8214> 4223 +<8215> <8215> 10149 +<8216> <8216> 10709 +<8218> <8218> 14250 +<821a> <821a> 16353 +<821b> <821b> 1034 +<821c> <821c> 3373 +<821d> <821d> 9513 +<821e> <821e> 4224 +<821f> <821f> 1035 +<8220> <8220> 6702 +<8221> <8221> 7135 +<8222> <8222> 2024 +<8225> <8225> 7615 +<8226> <8226> 16909 +<8228> <8228> 2458 +<8229> <8229> 14256 +<822a> <822b> 2456 +<822c> <822c> 2459 +<822d> <822d> 16080 +<822f> <822f> 7614 +<8232> <8232> 8216 +<8233> <8233> 8213 +<8234> <8234> 8215 +<8235> <8235> 2930 +<8236> <8236> 2932 +<8237> <8237> 2931 +<8238> <8238> 8212 +<8239> <8239> 2933 +<823a> <823a> 8214 +<823c> <823d> 8844 +<823e> <823e> 17794 +<823f> <823f> 8846 +<8240> <8240> 9516 +<8242> <8242> 9517 +<8244> <8244> 9515 +<8245> <8245> 9518 +<8247> <8247> 3802 +<8249> <8249> 9514 +<824b> <824b> 4225 +<824e> <824e> 10714 +<824f> <824f> 10710 +<8250> <8250> 10713 +<8251> <8251> 10715 +<8252> <8252> 10712 +<8253> <8253> 10711 +<8254> <8254> 18263 +<8255> <8257> 11324 +<8258> <8259> 4916 +<825a> <825a> 11791 +<825b> <825b> 11790 +<825c> <825c> 11792 +<825e> <825e> 12182 +<825f> <825f> 12181 +<8261> <8261> 12528 +<8262> <8262> 15226 +<8263> <8263> 12529 +<8264> <8264> 12527 +<8265> <8265> 15227 +<8266> <8266> 5686 +<8268> <8269> 12829 +<826b> <826b> 13222 +<826c> <826c> 13357 +<826d> <826d> 13462 +<826e> <826e> 1036 +<826f> <826f> 1284 +<8271> <8271> 5209 +<8272> <8272> 1037 +<8274> <8274> 8217 +<8275> <8275> 8847 +<8276> <8276> 18265 +<8277> <8277> 5934 +<8278> <8278> 6163 +<8279> <8279> 18210 +<827a> <827a> 17763 +<827b> <827b> 14280 +<827c> <827c> 6164 +<827d> <827d> 6166 +<827e> <827e> 1038 +<827f> <827f> 6167 +<8280> <8280> 6165 +<8283> <8284> 6373 +<8285> <8285> 6368 +<8287> <8287> 16690 +<828a> <828a> 6372 +<828b> <828b> 1286 +<828d> <828d> 1287 +endcidrange + +100 begincidrange +<828e> <828e> 6369 +<828f> <828f> 6367 +<8290> <8290> 6366 +<8291> <8291> 6370 +<8292> <8292> 1285 +<8293> <8293> 6371 +<8294> <8294> 7136 +<8298> <8298> 6707 +<8299> <8299> 1659 +<829a> <829a> 6706 +<829b> <829b> 6708 +<829d> <829d> 1658 +<829e> <829e> 6713 +<829f> <829f> 1662 +<82a0> <82a0> 6703 +<82a1> <82a1> 6717 +<82a2> <82a2> 6723 +<82a3> <82a3> 1669 +<82a4> <82a4> 6720 +<82a5> <82a5> 1666 +<82a6> <82a6> 15731 +<82a7> <82a7> 6710 +<82a8> <82a8> 6716 +<82a9> <82a9> 6718 +<82aa> <82aa> 14268 +<82ab> <82ab> 6705 +<82ac> <82ac> 1665 +<82ad> <82ad> 1660 +<82ae> <82ae> 6711 +<82af> <82af> 1667 +<82b0> <82b0> 1670 +<82b1> <82b1> 1664 +<82b3> <82b3> 1657 +<82b4> <82b4> 6715 +<82b5> <82b5> 6709 +<82b6> <82b6> 6722 +<82b7> <82b7> 1672 +<82b8> <82b8> 1668 +<82b9> <82b9> 1663 +<82ba> <82ba> 6714 +<82bb> <82bb> 2460 +<82bc> <82bc> 6712 +<82bd> <82bd> 1661 +<82be> <82be> 1671 +<82c0> <82c0> 6704 +<82c2> <82c2> 6719 +<82c3> <82c3> 6721 +<82c4> <82c4> 17891 +<82ca> <82ca> 18266 +<82cf> <82cf> 17764 +<82d0> <82d0> 14273 +<82d1> <82d1> 2041 +<82d2> <82d2> 2035 +<82d3> <82d3> 2043 +<82d4> <82d4> 2040 +<82d5> <82d5> 7143 +<82d6> <82d6> 7146 +<82d7> <82d7> 2036 +<82d8> <82d8> 18267 +<82d9> <82d9> 7137 +<82db> <82db> 2029 +<82dc> <82dc> 2039 +<82de> <82de> 2042 +<82df> <82df> 2044 +<82e0> <82e0> 7158 +<82e1> <82e1> 7149 +<82e2> <82e2> 14281 +<82e3> <82e3> 2028 +<82e4> <82e4> 7157 +<82e5> <82e5> 2032 +<82e6> <82e6> 2030 +<82e7> <82e7> 2025 +<82e8> <82e8> 7141 +<82ea> <82ea> 7156 +<82eb> <82eb> 7145 +<82ec> <82ec> 7148 +<82ed> <82ed> 7161 +<82ee> <82ee> 16408 +<82ef> <82ef> 2045 +<82f0> <82f0> 7155 +<82f1> <82f1> 2037 +<82f2> <82f2> 7150 +<82f3> <82f3> 7160 +<82f4> <82f4> 7147 +<82f5> <82f5> 7151 +<82f6> <82f6> 7154 +<82f7> <82f7> 15991 +<82f9> <82f9> 7139 +<82fa> <82fa> 7159 +<82fb> <82fb> 7153 +<82fc> <82fc> 16685 +<82fd> <82fd> 15762 +<82fe> <82fe> 7138 +<82ff> <82ff> 17374 +<8300> <8300> 7142 +<8301> <8301> 2038 +<8302> <8302> 2033 +<8303> <8303> 2026 +<8304> <8304> 2031 +<8305> <8305> 2027 +endcidrange + +100 begincidrange +<8306> <8306> 2046 +<8307> <8307> 7140 +<8308> <8308> 7632 +<8309> <8309> 2034 +<830b> <830b> 16054 +<830c> <830c> 7152 +<830d> <830d> 6781 +<8316> <8316> 7635 +<8317> <8317> 2474 +<8318> <8318> 14282 +<8319> <8319> 7619 +<831a> <831a> 14274 +<831b> <831b> 7630 +<831c> <831c> 7626 +<831d> <831d> 14289 +<831e> <831e> 7645 +<8320> <8320> 7637 +<8322> <8322> 7627 +<8324> <8324> 7636 +<8325> <8325> 7621 +<8326> <8326> 7625 +<8327> <8327> 7648 +<8328> <8328> 2477 +<8329> <8329> 7640 +<832a> <832a> 7631 +<832b> <832b> 2461 +<832c> <832c> 7646 +<832d> <832d> 7617 +<832f> <832f> 7639 +<8331> <8331> 2476 +<8332> <8332> 2471 +<8333> <8333> 7616 +<8334> <8334> 2469 +<8335> <8335> 2468 +<8336> <8336> 2473 +<8337> <8337> 7638 +<8338> <8338> 2465 +<8339> <8339> 2472 +<833a> <833a> 7144 +<833b> <833b> 8848 +<833c> <833c> 7633 +<833d> <833d> 15658 +<833f> <833f> 7623 +<8340> <8340> 2475 +<8341> <8341> 7624 +<8342> <8342> 7628 +<8343> <8343> 2478 +<8344> <8344> 7618 +<8345> <8345> 7642 +<8347> <8347> 7641 +<8348> <8348> 7649 +<8349> <8349> 2467 +<834a> <834a> 2464 +<834b> <834b> 7647 +<834c> <834c> 7643 +<834d> <834d> 7634 +<834e> <834e> 7629 +<834f> <834f> 2470 +<8350> <8350> 2466 +<8351> <8351> 7620 +<8352> <8352> 2462 +<8353> <8353> 7644 +<8354> <8354> 2463 +<8356> <8356> 7622 +<8357> <8357> 18269 +<8362> <8362> 14262 +<8363> <8363> 16875 +<8366> <8366> 15902 +<836f> <836f> 17765 +<8373> <8373> 8223 +<8374> <8374> 8225 +<8375> <8375> 8230 +<8376> <8376> 8250 +<8377> <8377> 2947 +<8378> <8378> 2937 +<837a> <837a> 8222 +<837b> <837c> 2948 +<837d> <837d> 8233 +<837e> <837e> 8240 +<837f> <837f> 8246 +<8381> <8381> 8227 +<8383> <8383> 8234 +<8385> <8385> 14291 +<8386> <8386> 2950 +<8387> <8387> 8248 +<8388> <8388> 8243 +<8389> <8389> 2945 +<838a> <838a> 2943 +<838b> <838b> 8239 +<838c> <838c> 8235 +<838d> <838d> 8221 +<838e> <838e> 2934 +<838f> <838f> 8226 +<8390> <8390> 8218 +<8391> <8391> 14316 +<8392> <8392> 2942 +<8393> <8393> 2944 +<8394> <8394> 8231 +<8395> <8395> 8228 +<8396> <8396> 2939 +endcidrange + +100 begincidrange +<8397> <8397> 8244 +<8398> <8398> 2936 +<8399> <8399> 8229 +<839a> <839a> 8889 +<839b> <839b> 8237 +<839c> <839c> 14157 +<839d> <839d> 8236 +<839e> <839e> 2935 +<83a0> <83a0> 2946 +<83a2> <83a2> 2938 +<83a3> <83a3> 8219 +<83a4> <83a4> 8224 +<83a5> <83a5> 8241 +<83a6> <83a6> 8247 +<83a7> <83a7> 2951 +<83a8> <83a8> 8220 +<83a9> <83a9> 8232 +<83aa> <83aa> 8238 +<83ab> <83ab> 2941 +<83ac> <83ac> 14294 +<83ae> <83ae> 8249 +<83af> <83af> 8242 +<83b0> <83b0> 8245 +<83b9> <83b9> 17063 +<83bd> <83bd> 2940 +<83be> <83be> 16217 +<83bf> <83bf> 8864 +<83c0> <83c0> 8852 +<83c1> <83c1> 3381 +<83c2> <83c2> 8881 +<83c3> <83c3> 8890 +<83c4> <83c4> 8893 +<83c5> <83c5> 3379 +<83c6> <83c6> 8860 +<83c7> <83c7> 8885 +<83c8> <83c8> 8861 +<83c9> <83c9> 8875 +<83ca> <83ca> 3392 +<83cb> <83cb> 8871 +<83cc> <83cc> 3389 +<83cd> <83cd> 16469 +<83ce> <83ce> 8872 +<83cf> <83cf> 8849 +<83d1> <83d1> 8886 +<83d3> <83d3> 14296 +<83d4> <83d4> 3398 +<83d5> <83d5> 8883 +<83d6> <83d6> 8873 +<83d7> <83d7> 8895 +<83d8> <83d8> 8868 +<83d9> <83d9> 9550 +<83db> <83db> 8898 +<83dc> <83dc> 3396 +<83dd> <83dd> 8866 +<83de> <83de> 8878 +<83df> <83df> 3399 +<83e0> <83e0> 3378 +<83e1> <83e1> 8870 +<83e2> <83e2> 8896 +<83e3> <83e3> 8863 +<83e4> <83e4> 8856 +<83e5> <83e5> 8867 +<83e7> <83e7> 8855 +<83e8> <83e8> 8853 +<83e9> <83e9> 3374 +<83ea> <83ea> 8887 +<83eb> <83eb> 8862 +<83ec> <83ec> 8891 +<83ed> <83ed> 15660 +<83ee> <83ee> 8892 +<83ef> <83ef> 3382 +<83f0> <83f0> 3387 +<83f1> <83f1> 3383 +<83f2> <83f2> 3391 +<83f3> <83f3> 8882 +<83f4> <83f4> 3384 +<83f5> <83f5> 8874 +<83f6> <83f6> 8858 +<83f8> <83f8> 3376 +<83f9> <83f9> 8850 +<83fa> <83fa> 8884 +<83fb> <83fb> 8894 +<83fc> <83fc> 8857 +<83fd> <83fd> 3390 +<83fe> <83fe> 8899 +<83ff> <83ff> 8869 +<8401> <8401> 8865 +<8403> <8403> 3375 +<8404> <8404> 3395 +<8405> <8405> 18271 +<8406> <8406> 8880 +<8407> <8407> 3397 +<8409> <8409> 8876 +<840a> <840a> 3386 +<840b> <840b> 3380 +<840c> <840c> 3388 +<840d> <840d> 3377 +<840e> <840e> 3394 +<840f> <840f> 8877 +<8410> <8410> 8859 +endcidrange + +100 begincidrange +<8411> <8411> 8879 +<8412> <8412> 8854 +<8413> <8413> 8888 +<8414> <8414> 15376 +<8416> <8416> 16439 +<8418> <8418> 15994 +<841b> <841b> 8897 +<841c> <841c> 16051 +<8420> <8420> 15445 +<8421> <8421> 14161 +<8423> <8423> 8851 +<8424> <8424> 18769 +<8426> <8426> 18136 +<8429> <8429> 9549 +<842b> <842b> 9571 +<842c> <842c> 3756 +<842d> <842d> 9554 +<842e> <842e> 16941 +<842f> <842f> 9552 +<8430> <8430> 9531 +<8431> <8431> 3806 +<8432> <8432> 9547 +<8433> <8433> 9567 +<8434> <8434> 9543 +<8435> <8435> 3814 +<8436> <8436> 9566 +<8437> <8437> 9541 +<8438> <8438> 3393 +<8439> <8439> 9557 +<843a> <843a> 9542 +<843b> <843b> 9564 +<843c> <843c> 3813 +<843d> <843d> 3805 +<843e> <843e> 15649 +<843f> <843f> 9520 +<8440> <8440> 9528 +<8442> <8442> 9553 +<8443> <8443> 9545 +<8444> <8444> 9570 +<8445> <8445> 9548 +<8446> <8446> 3819 +<8447> <8447> 9565 +<8448> <8448> 18200 +<8449> <8449> 3810 +<844a> <844a> 14308 +<844b> <844b> 9551 +<844c> <844c> 9559 +<844d> <844d> 9532 +<844e> <844e> 9558 +<8450> <8450> 9575 +<8451> <8451> 9527 +<8452> <8452> 9560 +<8453> <8453> 15229 +<8454> <8454> 9573 +<8455> <8455> 14731 +<8456> <8456> 9521 +<8457> <8457> 3385 +<8458> <8458> 14302 +<8459> <8459> 9535 +<845a> <845a> 9534 +<845b> <845b> 3812 +<845c> <845c> 16091 +<845d> <845d> 9538 +<845e> <845e> 9540 +<845f> <845f> 9555 +<8460> <8460> 9572 +<8461> <8461> 3815 +<8462> <8462> 17114 +<8463> <8463> 3816 +<8464> <8464> 18273 +<8465> <8465> 9526 +<8466> <8466> 3808 +<8467> <8467> 9530 +<8468> <8468> 9568 +<8469> <8469> 3817 +<846b> <846b> 3809 +<846c> <846c> 3811 +<846d> <846d> 3818 +<846e> <846e> 9574 +<846f> <846f> 9561 +<8470> <8470> 9556 +<8471> <8471> 14304 +<8472> <8472> 15507 +<8473> <8473> 9537 +<8474> <8474> 9536 +<8475> <8475> 3807 +<8476> <8476> 9522 +<8477> <8477> 3804 +<8478> <8478> 9546 +<8479> <8479> 9523 +<847a> <847a> 9544 +<847d> <847d> 9533 +<847e> <847e> 9569 +<847f> <847f> 14670 +<8480> <8480> 15214 +<8482> <8482> 3803 +<8486> <8486> 9529 +<8488> <8488> 18274 +<848d> <848d> 9525 +<848e> <848e> 9563 +endcidrange + +100 begincidrange +<848f> <848f> 9524 +<8490> <8490> 4238 +<8491> <8491> 10189 +<8492> <8492> 14166 +<8493> <8493> 14318 +<8494> <8494> 10172 +<8496> <8496> 15133 +<8497> <8497> 10150 +<8498> <8498> 10180 +<8499> <8499> 4230 +<849a> <849a> 10165 +<849b> <849b> 10175 +<849c> <849c> 4233 +<849d> <849d> 10168 +<849e> <849e> 4231 +<849f> <849f> 10153 +<84a0> <84a0> 10183 +<84a1> <84a1> 10152 +<84a2> <84a2> 10171 +<84a3> <84a3> 15262 +<84a4> <84a4> 10151 +<84a7> <84a7> 10169 +<84a8> <84a8> 10178 +<84a9> <84a9> 10176 +<84aa> <84aa> 10164 +<84ab> <84ab> 10159 +<84ac> <84ac> 10157 +<84ad> <84ad> 15756 +<84ae> <84ae> 10158 +<84af> <84af> 10177 +<84b0> <84b0> 10188 +<84b1> <84b1> 10166 +<84b2> <84b2> 4232 +<84b4> <84b4> 10161 +<84b6> <84b6> 10181 +<84b8> <84b8> 4235 +<84b9> <84b9> 10160 +<84ba> <84ba> 10154 +<84bb> <84bb> 10170 +<84bc> <84bc> 4239 +<84bd> <84bd> 15436 +<84be> <84be> 18276 +<84bf> <84bf> 4227 +<84c0> <84c0> 4236 +<84c1> <84c1> 10162 +<84c2> <84c2> 10156 +<84c4> <84c4> 4229 +<84c5> <84c5> 9562 +<84c6> <84c6> 4228 +<84c7> <84c7> 10173 +<84c9> <84c9> 4226 +<84ca> <84ca> 4241 +<84cb> <84cb> 4234 +<84cc> <84cc> 10174 +<84cd> <84cd> 10163 +<84ce> <84ce> 10155 +<84cf> <84cf> 10182 +<84d0> <84d0> 10167 +<84d1> <84d1> 4240 +<84d2> <84d2> 10186 +<84d3> <84d3> 4237 +<84d4> <84d4> 10185 +<84d6> <84d6> 10179 +<84d7> <84d7> 10184 +<84da> <84da> 16373 +<84db> <84db> 10187 +<84de> <84de> 14314 +<84e1> <84e1> 18277 +<84e2> <84e2> 14261 +<84e4> <84e4> 14319 +<84e5> <84e5> 15312 +<84e7> <84e8> 10755 +<84e9> <84e9> 10743 +<84ea> <84ea> 10742 +<84eb> <84eb> 10738 +<84ec> <84ec> 4603 +<84ee> <84ee> 4595 +<84ef> <84ef> 10758 +<84f0> <84f0> 10757 +<84f1> <84f1> 9519 +<84f2> <84f2> 10735 +<84f3> <84f3> 10739 +<84f4> <84f4> 10733 +<84f6> <84f6> 10752 +<84f7> <84f7> 10737 +<84f8> <84f8> 18278 +<84f9> <84f9> 10759 +<84fa> <84fa> 10730 +<84fb> <84fb> 10728 +<84fc> <84fc> 10740 +<84fd> <84fd> 10750 +<84fe> <84fe> 10745 +<84ff> <84ff> 4605 +<8500> <8500> 10719 +<8502> <8502> 10749 +<8503> <8503> 14730 +<8505> <8505> 16619 +<8506> <8506> 4606 +<8507> <8507> 9539 +<8508> <8508> 10731 +endcidrange + +100 begincidrange +<8509> <8509> 10722 +<850a> <850a> 10725 +<850b> <850b> 10763 +<850c> <850c> 10732 +<850d> <850d> 10723 +<850e> <850e> 10721 +<850f> <850f> 10718 +<8510> <8510> 18279 +<8511> <8511> 4599 +<8512> <8512> 10741 +<8513> <8513> 4598 +<8514> <8514> 4602 +<8515> <8515> 10736 +<8516> <8516> 10744 +<8517> <8517> 4592 +<8518> <8518> 10760 +<8519> <8519> 10764 +<851a> <851a> 4594 +<851c> <851c> 10727 +<851d> <851d> 10747 +<851e> <851e> 10751 +<851f> <851f> 10724 +<8520> <8520> 10761 +<8521> <8521> 4601 +<8523> <8523> 4600 +<8524> <8524> 10716 +<8525> <8525> 4604 +<8526> <8526> 10754 +<8527> <8527> 10726 +<8528> <8528> 10746 +<8529> <8529> 10720 +<852a> <852a> 10734 +<852b> <852b> 10729 +<852c> <852d> 4596 +<852e> <852e> 10748 +<852f> <852f> 10765 +<8530> <8530> 10762 +<8531> <8531> 10753 +<8533> <8533> 16936 +<8534> <8534> 14324 +<8538> <8538> 18280 +<853b> <853b> 10717 +<853d> <853d> 4593 +<853e> <853e> 11343 +<8540> <8540> 11334 +<8541> <8541> 11337 +<8542> <8542> 16482 +<8543> <8543> 4923 +<8544> <8544> 11339 +<8545> <8545> 11328 +<8546> <8546> 11335 +<8547> <8547> 11341 +<8548> <8548> 4920 +<8549> <8549> 4924 +<854a> <854a> 4918 +<854b> <854b> 14272 +<854c> <854c> 16399 +<854d> <854d> 11330 +<854e> <854e> 11346 +<8551> <8551> 11340 +<8552> <8552> 18281 +<8553> <8553> 11331 +<8554> <8554> 11355 +<8555> <8555> 11349 +<8556> <8556> 11327 +<8557> <8557> 11811 +<8558> <8558> 11333 +<8559> <8559> 4919 +<855a> <855a> 14299 +<855b> <855b> 11344 +<855d> <855d> 11354 +<855e> <855e> 4927 +<8560> <8560> 11351 +<8561> <8561> 11332 +<8562> <8562> 11338 +<8563> <8563> 11342 +<8564> <8564> 11336 +<8565> <8565> 11356 +<8566> <8566> 11353 +<8567> <8567> 11350 +<8568> <8569> 4921 +<856a> <856a> 4926 +<856b> <856b> 11329 +<856c> <856c> 11357 +<856d> <856d> 4925 +<856e> <856e> 11347 +<856f> <8570> 18283 +<8571> <8571> 11345 +<8573> <8573> 14328 +<8575> <8575> 11348 +<8576> <8576> 11824 +<8577> <8577> 11805 +<8578> <8578> 11810 +<8579> <8579> 11823 +<857a> <857a> 11809 +<857b> <857b> 11801 +<857c> <857c> 11806 +<857e> <857e> 5212 +<8580> <8580> 11794 +<8581> <8581> 11818 +endcidrange + +100 begincidrange +<8582> <8582> 11820 +<8583> <8583> 11793 +<8584> <8584> 5211 +<8585> <8585> 11822 +<8586> <8586> 11814 +<8587> <8587> 5218 +<8588> <8588> 11821 +<8589> <8589> 11807 +<858a> <858a> 5220 +<858b> <858b> 11799 +<858c> <858c> 11352 +<858d> <858d> 11815 +<858e> <858e> 11812 +<858f> <858f> 11795 +<8590> <8590> 11826 +<8591> <8591> 5214 +<8594> <8594> 5215 +<8595> <8595> 11797 +<8596> <8596> 11813 +<8598> <8598> 11825 +<8599> <8599> 11816 +<859a> <859a> 11803 +<859b> <859b> 5217 +<859c> <859c> 5213 +<859d> <859d> 11817 +<859e> <859e> 11804 +<859f> <859f> 11827 +<85a0> <85a0> 11798 +<85a1> <85a1> 11808 +<85a2> <85a2> 11819 +<85a3> <85a3> 11800 +<85a4> <85a4> 11802 +<85a6> <85a6> 5221 +<85a7> <85a7> 11796 +<85a8> <85a8> 5219 +<85a9> <85a9> 5404 +<85aa> <85aa> 5210 +<85af> <85af> 5216 +<85b0> <85b0> 5408 +<85b1> <85b1> 12198 +<85b3> <85b3> 12188 +<85b4> <85b4> 12183 +<85b5> <85b5> 12189 +<85b6> <85b6> 12199 +<85b7> <85b7> 12203 +<85b8> <85b8> 12202 +<85b9> <85b9> 5410 +<85ba> <85ba> 5409 +<85bd> <85bd> 12190 +<85be> <85be> 12204 +<85bf> <85bf> 12193 +<85c0> <85c0> 12185 +<85c1> <85c1> 14334 +<85c2> <85c2> 12187 +<85c3> <85c3> 12186 +<85c4> <85c4> 12192 +<85c5> <85c5> 12197 +<85c6> <85c6> 12184 +<85c7> <85c7> 12191 +<85c8> <85c8> 12196 +<85c9> <85c9> 5407 +<85cb> <85cb> 12194 +<85cd> <85cd> 5405 +<85ce> <85ce> 12195 +<85cf> <85cf> 5403 +<85d0> <85d0> 5406 +<85d1> <85d1> 12545 +<85d2> <85d2> 12200 +<85d5> <85d5> 5559 +<85d7> <85d7> 12537 +<85d8> <85d8> 12541 +<85d9> <85d9> 12533 +<85da> <85da> 12536 +<85dc> <85dc> 12544 +<85dd> <85dd> 5557 +<85de> <85de> 12549 +<85df> <85df> 12542 +<85e0> <85e0> 18285 +<85e1> <85e1> 12534 +<85e2> <85e2> 12550 +<85e3> <85e3> 12543 +<85e4> <85e5> 5560 +<85e6> <85e6> 12547 +<85e8> <85e8> 12535 +<85e9> <85e9> 5556 +<85ea> <85ea> 5558 +<85eb> <85eb> 12530 +<85ec> <85ec> 12538 +<85ed> <85ed> 12532 +<85ee> <85ee> 15446 +<85ef> <85ef> 12548 +<85f0> <85f0> 12546 +<85f1> <85f1> 12531 +<85f2> <85f2> 12539 +<85f6> <85f6> 12837 +<85f7> <85f7> 5562 +<85f8> <85f8> 12540 +<85f9> <85f9> 5688 +<85fa> <85fa> 5690 +<85fb> <85fb> 5687 +endcidrange + +100 begincidrange +<85fc> <85fc> 15440 +<85fd> <85fd> 12842 +<85fe> <85fe> 12834 +<85ff> <85ff> 12832 +<8600> <8600> 12836 +<8601> <8601> 12833 +<8602> <8602> 14336 +<8604> <8604> 12838 +<8605> <8605> 12840 +<8606> <8606> 5691 +<8607> <8607> 5693 +<8609> <8609> 12839 +<860a> <860a> 5694 +<860b> <860b> 5692 +<860c> <860c> 12841 +<860d> <860d> 16484 +<8610> <8610> 15231 +<8611> <8611> 5689 +<8614> <8614> 18110 +<8616> <8616> 14331 +<8617> <8617> 5765 +<8618> <8618> 13046 +<8619> <8619> 13052 +<861a> <861a> 5767 +<861b> <861b> 12835 +<861c> <861c> 13051 +<861e> <861e> 13058 +<861f> <861f> 13049 +<8620> <8620> 13056 +<8621> <8621> 13055 +<8622> <8622> 12831 +<8623> <8623> 13050 +<8624> <8624> 12201 +<8625> <8625> 13059 +<8626> <8626> 13048 +<8627> <8627> 13053 +<8628> <8628> 14341 +<8629> <8629> 13057 +<862a> <862a> 13047 +<862c> <862c> 13226 +<862d> <862d> 5766 +<862e> <862e> 13054 +<862f> <862f> 16286 +<8631> <8631> 13362 +<8632> <8632> 13227 +<8633> <8633> 13225 +<8634> <8635> 13223 +<8636> <8636> 13228 +<8638> <8638> 5895 +<8639> <8639> 13360 +<863a> <863a> 13358 +<863b> <863b> 13363 +<863c> <863c> 13361 +<863e> <863e> 13364 +<863f> <863f> 5896 +<8640> <8640> 13359 +<8642> <8642> 14529 +<8643> <8643> 13463 +<8645> <8645> 15206 +<8646> <8648> 13535 +<864b> <864b> 13630 +<864c> <864c> 13622 +<864d> <864d> 6168 +<864e> <864e> 1673 +<8650> <8650> 2047 +<8652> <8652> 7651 +<8653> <8653> 7650 +<8654> <8654> 2479 +<8655> <8655> 2952 +<8656> <8656> 8252 +<8659> <8659> 8251 +<865b> <865b> 3400 +<865c> <865c> 3821 +<865e> <865e> 3820 +<865f> <865f> 3822 +<8661> <8661> 10190 +<8662> <8662> 10766 +<8663> <8663> 11358 +<8664> <8664> 11360 +<8665> <8665> 11359 +<8667> <8667> 5222 +<8668> <8668> 11828 +<8669> <8669> 12205 +<866a> <866a> 13598 +<866b> <866b> 1039 +<866c> <866c> 14355 +<866d> <866e> 6726 +<866f> <866f> 6725 +<8670> <8670> 6724 +<8671> <8671> 1674 +<8672> <8672> 18287 +<8673> <8673> 7165 +<8674> <8674> 7163 +<8677> <8677> 7162 +<8679> <8679> 2048 +<867a> <867a> 2050 +<867b> <867b> 2049 +<867c> <867c> 7164 +<867e> <867e> 14346 +<8685> <8685> 7663 +endcidrange + +100 begincidrange +<8686> <8686> 7660 +<8687> <8687> 7658 +<868a> <868a> 2480 +<868b> <868b> 7661 +<868c> <868c> 2485 +<868d> <868d> 7655 +<868e> <868e> 7670 +<8690> <8690> 7672 +<8691> <8691> 7656 +<8692> <8692> 18288 +<8693> <8693> 2482 +<8694> <8694> 7673 +<8695> <8695> 7668 +<8696> <8696> 7654 +<8697> <8697> 7659 +<8698> <8698> 7669 +<8699> <8699> 7665 +<869a> <869a> 7662 +<869c> <869c> 2487 +<869d> <869d> 7671 +<869e> <869e> 7657 +<86a0> <86a0> 15240 +<86a1> <86a1> 7666 +<86a2> <86a2> 7652 +<86a3> <86a3> 2486 +<86a4> <86a4> 2483 +<86a5> <86a5> 7664 +<86a7> <86a7> 7667 +<86a8> <86a8> 7653 +<86a9> <86a9> 2484 +<86aa> <86aa> 2481 +<86ad> <86ad> 16134 +<86af> <86af> 2962 +<86b0> <86b0> 8259 +<86b1> <86b1> 2961 +<86b2> <86b2> 17376 +<86b3> <86b3> 8262 +<86b4> <86b4> 8265 +<86b5> <86b5> 2958 +<86b6> <86b6> 2956 +<86b7> <86b7> 8254 +<86b8> <86b8> 8263 +<86b9> <86b9> 8261 +<86ba> <86ba> 8258 +<86bb> <86bc> 8266 +<86bd> <86be> 8269 +<86bf> <86bf> 8253 +<86c0> <86c0> 2955 +<86c1> <86c1> 8256 +<86c2> <86c2> 8255 +<86c3> <86c3> 8268 +<86c4> <86c4> 2957 +<86c5> <86c5> 8257 +<86c6> <86c6> 2959 +<86c7> <86c7> 2954 +<86c8> <86c8> 8260 +<86c9> <86c9> 2963 +<86cb> <86cb> 2960 +<86cc> <86cc> 8264 +<86d0> <86d0> 3407 +<86d1> <86d1> 8914 +<86d3> <86d3> 8903 +<86d4> <86d4> 3404 +<86d6> <86d6> 9581 +<86d7> <86d7> 8912 +<86d8> <86d8> 8900 +<86d9> <86d9> 3402 +<86da> <86da> 8905 +<86db> <86db> 3405 +<86dc> <86dc> 8909 +<86dd> <86dd> 8907 +<86de> <86de> 3408 +<86df> <86df> 3401 +<86e2> <86e2> 8901 +<86e3> <86e3> 8904 +<86e4> <86e4> 3406 +<86e6> <86e6> 8902 +<86e8> <86e8> 8913 +<86e9> <86e9> 8911 +<86ea> <86ea> 8906 +<86eb> <86eb> 8908 +<86ec> <86ec> 8910 +<86ed> <86ed> 3403 +<86ef> <86ef> 18289 +<86f5> <86f5> 9582 +<86f6> <86f6> 9588 +<86f7> <86f7> 9578 +<86f8> <86f8> 9584 +<86f9> <86f9> 3823 +<86fa> <86fa> 9580 +<86fb> <86fb> 3829 +<86fe> <86fe> 3828 +<8700> <8700> 3827 +<8701> <8701> 9587 +<8702> <8703> 3830 +<8704> <8704> 9577 +<8705> <8705> 9590 +<8706> <8706> 3832 +<8707> <8707> 3826 +<8708> <8708> 3825 +endcidrange + +100 begincidrange +<8709> <8709> 9586 +<870a> <870a> 3833 +<870b> <870b> 9576 +<870c> <870c> 9579 +<870d> <870d> 9589 +<870e> <870e> 9585 +<8711> <8711> 10222 +<8712> <8712> 10211 +<8713> <8713> 3824 +<8718> <8718> 4248 +<8719> <8719> 10199 +<871a> <871a> 10220 +<871b> <871b> 10200 +<871c> <871c> 4243 +<871e> <871e> 10197 +<8720> <8720> 10206 +<8721> <8721> 10198 +<8722> <8722> 4245 +<8723> <8723> 10192 +<8724> <8724> 10219 +<8725> <8725> 4246 +<8726> <8727> 10216 +<8728> <8728> 10193 +<8729> <8729> 4251 +<872a> <872a> 10208 +<872c> <872c> 10202 +<872d> <872d> 10209 +<872e> <872e> 10196 +<8730> <8730> 10221 +<8731> <8731> 10213 +<8732> <8732> 10207 +<8733> <8733> 10191 +<8734> <8734> 4247 +<8735> <8735> 10214 +<8737> <8737> 4250 +<8738> <8738> 10218 +<873a> <873a> 10212 +<873b> <873b> 4244 +<873c> <873c> 10210 +<873e> <873e> 10204 +<873f> <873f> 4242 +<8740> <8740> 10195 +<8741> <8741> 10203 +<8742> <8742> 10215 +<8743> <8743> 10201 +<8746> <8746> 10205 +<874c> <874c> 4616 +<874d> <874d> 9583 +<874e> <874e> 10784 +<874f> <874f> 10793 +<8750> <8750> 10783 +<8751> <8751> 10779 +<8752> <8752> 10776 +<8753> <8753> 4617 +<8754> <8754> 10774 +<8755> <8755> 4249 +<8756> <8756> 10767 +<8757> <8757> 4615 +<8758> <8758> 10773 +<8759> <8759> 4614 +<875a> <875a> 10778 +<875b> <875b> 10775 +<875c> <875c> 10791 +<875d> <875d> 10786 +<875e> <875e> 10780 +<875f> <875f> 10785 +<8760> <8760> 4610 +<8761> <8761> 10777 +<8762> <8762> 10796 +<8763> <8764> 10768 +<8765> <8765> 10792 +<8766> <8766> 4611 +<8767> <8767> 10797 +<8768> <8768> 4613 +<8769> <8769> 10798 +<876a> <876a> 10782 +<876b> <876b> 10194 +<876c> <876c> 10788 +<876d> <876d> 10781 +<876e> <876e> 10790 +<876f> <876f> 10787 +<8770> <8770> 15980 +<8771> <8771> 14347 +<8773> <8773> 10772 +<8774> <8774> 4608 +<8775> <8775> 10795 +<8776> <8776> 4609 +<8777> <8777> 10770 +<8778> <8778> 4612 +<8779> <8779> 11371 +<877a> <877a> 10789 +<877b> <877b> 10794 +<877d> <877d> 16453 +<8781> <8781> 11368 +<8782> <8782> 4607 +<8783> <8783> 4928 +<8784> <8784> 11378 +<8785> <8785> 11374 +<8786> <8786> 16048 +<8787> <8787> 11372 +endcidrange + +100 begincidrange +<8788> <8788> 11367 +<8789> <8789> 11382 +<878b> <878b> 17378 +<878c> <878c> 16367 +<878d> <878d> 4932 +<878f> <878f> 11363 +<8790> <8791> 11375 +<8792> <8792> 11366 +<8793> <8793> 11365 +<8794> <8794> 11379 +<8796> <8796> 11369 +<8797> <8797> 11364 +<8798> <8798> 11370 +<879a> <879a> 11381 +<879b> <879b> 11362 +<879c> <879c> 11380 +<879d> <879d> 11377 +<879e> <879e> 4930 +<879f> <879f> 4929 +<87a2> <87a2> 4931 +<87a3> <87a3> 11373 +<87a4> <87a4> 11361 +<87a5> <87a5> 15752 +<87a9> <87a9> 16364 +<87aa> <87aa> 11830 +<87ab> <87ab> 5228 +<87ac> <87ac> 11834 +<87ad> <87ad> 11831 +<87ae> <87ae> 11838 +<87af> <87af> 11844 +<87b0> <87b0> 11833 +<87b1> <87b1> 14351 +<87b2> <87b2> 11853 +<87b3> <87b3> 5225 +<87b4> <87b4> 11847 +<87b5> <87b5> 11836 +<87b6> <87b6> 11848 +<87b7> <87b7> 11843 +<87b8> <87b8> 11850 +<87b9> <87b9> 11835 +<87ba> <87ba> 5230 +<87bb> <87bb> 5229 +<87bc> <87bc> 11837 +<87bd> <87bd> 11851 +<87be> <87be> 11829 +<87bf> <87bf> 11849 +<87c0> <87c0> 5223 +<87c1> <87c1> 16380 +<87c2> <87c2> 11841 +<87c3> <87c3> 11840 +<87c4> <87c4> 11845 +<87c5> <87c5> 11832 +<87c6> <87c6> 5227 +<87c8> <87c8> 5231 +<87c9> <87c9> 11839 +<87ca> <87ca> 11846 +<87cb> <87cb> 5232 +<87cc> <87cc> 11842 +<87ce> <87ce> 16365 +<87d1> <87d1> 5224 +<87d2> <87d2> 5226 +<87d3> <87d3> 12218 +<87d4> <87d4> 12216 +<87d6> <87d6> 16274 +<87d7> <87d7> 12222 +<87d8> <87d8> 12220 +<87d9> <87d9> 12223 +<87da> <87da> 14352 +<87db> <87db> 12209 +<87dc> <87dc> 12217 +<87dd> <87dd> 12227 +<87de> <87de> 11852 +<87df> <87df> 12213 +<87e0> <87e0> 5414 +<87e1> <87e1> 10771 +<87e2> <87e2> 12208 +<87e3> <87e3> 12221 +<87e4> <87e4> 12215 +<87e5> <87e5> 12212 +<87e6> <87e6> 12207 +<87e7> <87e7> 12206 +<87e8> <87e8> 12226 +<87ea> <87ea> 12211 +<87eb> <87eb> 12210 +<87ec> <87ec> 5412 +<87ed> <87ed> 12219 +<87ee> <87ee> 14349 +<87ef> <87ef> 5411 +<87f2> <87f2> 5413 +<87f3> <87f3> 12214 +<87f4> <87f4> 12225 +<87f5> <87f5> 16302 +<87f6> <87f7> 12554 +<87f9> <87f9> 5566 +<87fa> <87fa> 12552 +<87fb> <87fb> 5563 +<87fc> <87fc> 12560 +<87fe> <87fe> 5567 +<87ff> <87ff> 12562 +<8800> <8800> 12551 +endcidrange + +100 begincidrange +<8801> <8801> 12224 +<8802> <8802> 12564 +<8803> <8803> 12553 +<8804> <8804> 16047 +<8805> <8805> 5564 +<8806> <8806> 12559 +<8808> <8808> 12561 +<8809> <8809> 12556 +<880a> <880a> 12563 +<880b> <880b> 12558 +<880c> <880c> 12557 +<880d> <880d> 5565 +<880f> <880f> 14353 +<8810> <8811> 12844 +<8813> <8813> 12847 +<8814> <8815> 5695 +<8816> <8816> 12848 +<8817> <8817> 12846 +<8818> <8818> 16250 +<8819> <8819> 12843 +<881b> <881b> 13062 +<881c> <881c> 13065 +<881d> <881d> 13061 +<881f> <881f> 5771 +<8820> <8820> 13063 +<8821> <8821> 5770 +<8822> <8822> 5769 +<8823> <8823> 5768 +<8824> <8824> 13064 +<8825> <8825> 13233 +<8826> <8826> 13231 +<8827> <8827> 15879 +<8828> <8828> 13230 +<8829> <8829> 13060 +<882a> <882a> 13232 +<882b> <882b> 13066 +<882c> <882c> 13229 +<882d> <882d> 15243 +<882e> <882e> 13367 +<882f> <882f> 13333 +<8830> <8830> 13365 +<8831> <8831> 5897 +<8832> <8832> 13366 +<8833> <8833> 13368 +<8835> <8835> 13466 +<8836> <8836> 5928 +<8837> <8837> 13465 +<8838> <8838> 13464 +<8839> <8839> 5929 +<883b> <883b> 5959 +<883c> <883c> 13576 +<883d> <883d> 13600 +<883e> <883e> 13599 +<883f> <883f> 13601 +<8840> <8840> 1040 +<8841> <8841> 7166 +<8842> <8842> 16218 +<8843> <8844> 7674 +<8845> <8846> 14358 +<8848> <8848> 8915 +<884a> <884a> 13067 +<884b> <884b> 13467 +<884c> <884c> 1041 +<884d> <884d> 2051 +<884e> <884e> 7167 +<884f> <884f> 14404 +<8852> <8852> 8271 +<8853> <8853> 2964 +<8855> <8855> 8917 +<8856> <8856> 8916 +<8857> <8857> 3409 +<8859> <8859> 3834 +<885a> <885a> 10799 +<885b> <885b> 4618 +<885d> <885d> 4619 +<885e> <885e> 14363 +<8860> <8860> 14918 +<8861> <8861> 4933 +<8862> <8862> 5930 +<8863> <8863> 1042 +<8864> <8864> 17666 +<8865> <8865> 15868 +<8867> <8867> 7168 +<8868> <8868> 1676 +<8869> <8869> 7170 +<886a> <886a> 7169 +<886b> <886b> 2052 +<886d> <886d> 7676 +<886e> <886e> 15246 +<886f> <886f> 7683 +<8870> <8870> 2488 +<8871> <8871> 7681 +<8872> <8872> 7679 +<8874> <8874> 7686 +<8875> <8876> 7677 +<8877> <8877> 2489 +<8879> <8879> 2493 +<887c> <887c> 7687 +<887d> <887d> 2492 +<887e> <887e> 7685 +endcidrange + +100 begincidrange +<887f> <887f> 7682 +<8880> <8880> 7680 +<8881> <8882> 2490 +<8883> <8883> 7684 +<8884> <8884> 17143 +<8887> <8887> 15248 +<8888> <8888> 2966 +<8889> <8889> 8272 +<888b> <888b> 2971 +<888c> <888c> 8288 +<888d> <888d> 2970 +<888e> <888e> 8290 +<8891> <8891> 8278 +<8892> <8892> 2968 +<8893> <8893> 8289 +<8895> <8895> 8273 +<8896> <8896> 2969 +<8897> <8897> 8285 +<8898> <8898> 8281 +<8899> <8899> 8283 +<889a> <889a> 8277 +<889b> <889b> 8284 +<889c> <889c> 14364 +<889e> <889e> 2965 +<889f> <889f> 8280 +<88a0> <88a0> 16288 +<88a1> <88a1> 8279 +<88a2> <88a2> 8275 +<88a4> <88a4> 8286 +<88a7> <88a7> 8282 +<88a8> <88a8> 8274 +<88aa> <88aa> 8276 +<88ab> <88ab> 2967 +<88ac> <88ac> 8287 +<88ae> <88ae> 18293 +<88b1> <88b1> 3412 +<88b2> <88b2> 8928 +<88b4> <88b5> 14366 +<88b6> <88b6> 8924 +<88b7> <88b7> 8926 +<88b8> <88b8> 8921 +<88b9> <88b9> 8920 +<88ba> <88ba> 8918 +<88bc> <88bc> 8925 +<88bd> <88bd> 8927 +<88be> <88be> 8923 +<88bf> <88bf> 15249 +<88c0> <88c0> 8922 +<88c1> <88c2> 3410 +<88c5> <88c5> 14368 +<88c7> <88c7> 16049 +<88c9> <88c9> 8930 +<88ca> <88ca> 3842 +<88cb> <88cb> 9592 +<88cc> <88cc> 9598 +<88cd> <88ce> 9593 +<88cf> <88cf> 14058 +<88d0> <88d0> 9599 +<88d2> <88d2> 3844 +<88d4> <88d4> 3836 +<88d5> <88d5> 3843 +<88d6> <88d6> 9591 +<88d7> <88d7> 8919 +<88d8> <88d8> 3839 +<88d9> <88d9> 3837 +<88da> <88da> 9597 +<88db> <88db> 9596 +<88dc> <88dc> 3838 +<88dd> <88dd> 3840 +<88de> <88de> 9595 +<88df> <88df> 3835 +<88e1> <88e1> 3841 +<88e6> <88e6> 15250 +<88e7> <88e7> 10224 +<88e8> <88e8> 4258 +<88eb> <88eb> 10235 +<88ec> <88ec> 10234 +<88ee> <88ee> 10229 +<88ef> <88ef> 4260 +<88f0> <88f0> 10233 +<88f1> <88f2> 10225 +<88f3> <88f3> 4252 +<88f4> <88f4> 4254 +<88f5> <88f5> 15880 +<88f6> <88f6> 10231 +<88f7> <88f7> 10223 +<88f8> <88f8> 4256 +<88f9> <88f9> 4255 +<88fa> <88fa> 10227 +<88fb> <88fb> 10232 +<88fc> <88fc> 10230 +<88fd> <88fd> 4257 +<88fe> <88fe> 10228 +<88ff> <88ff> 18294 +<8900> <8900> 17146 +<8901> <8901> 8929 +<8902> <8902> 4253 +<8905> <8905> 10800 +<8906> <8906> 10807 +<8907> <8907> 4621 +endcidrange + +100 begincidrange +<8909> <8909> 10811 +<890a> <890a> 4625 +<890b> <890b> 10803 +<890c> <890c> 10801 +<890e> <890e> 10810 +<8910> <8910> 4620 +<8911> <8911> 10809 +<8912> <8913> 4622 +<8914> <8914> 10802 +<8915> <8915> 4624 +<8916> <8916> 10808 +<8917> <8919> 10804 +<891a> <891a> 4259 +<891e> <891e> 11383 +<891f> <891f> 11395 +<8921> <8921> 4938 +<8922> <8922> 11390 +<8923> <8923> 11392 +<8924> <8924> 18295 +<8925> <8925> 4936 +<8926> <8926> 11384 +<8927> <8927> 11388 +<8929> <8929> 11391 +<892a> <892a> 4934 +<892b> <892b> 4937 +<892c> <892c> 11394 +<892d> <892e> 11386 +<892f> <892f> 11393 +<8930> <8930> 11385 +<8931> <8931> 11389 +<8932> <8932> 4935 +<8933> <8933> 11855 +<8935> <8935> 11854 +<8936> <8936> 5234 +<8937> <8937> 11860 +<8938> <8938> 5236 +<893b> <893b> 5233 +<893c> <893c> 11856 +<893d> <893d> 5237 +<893e> <893e> 11857 +<8941> <8941> 11858 +<8942> <8942> 11861 +<8943> <8943> 15894 +<8944> <8944> 5235 +<8946> <8946> 12232 +<8947> <8947> 17379 +<8949> <8949> 12235 +<894b> <894b> 12229 +<894c> <894c> 12231 +<894d> <894d> 15252 +<894f> <894f> 12230 +<8950> <8951> 12233 +<8952> <8952> 11859 +<8953> <8953> 12228 +<8954> <8954> 15254 +<8956> <8956> 5570 +<8957> <8957> 12568 +<8958> <8958> 12571 +<8959> <8959> 12573 +<895a> <895b> 12566 +<895c> <895c> 12570 +<895d> <895d> 12572 +<895e> <895e> 5571 +<895f> <895f> 5569 +<8960> <8960> 5568 +<8961> <8961> 12569 +<8962> <8962> 12565 +<8963> <8963> 12849 +<8964> <8964> 5697 +<8965> <8965> 15251 +<8966> <8966> 12850 +<8969> <8969> 13069 +<896a> <896a> 5772 +<896b> <896b> 13071 +<896c> <896c> 5773 +<896d> <896d> 13068 +<896e> <896e> 13070 +<896f> <896f> 5846 +<8971> <8971> 13234 +<8972> <8972> 5845 +<8973> <8973> 13371 +<8974> <8974> 13370 +<8976> <8976> 13369 +<8977> <8977> 15850 +<8979> <897a> 13538 +<897b> <897b> 13541 +<897c> <897c> 13540 +<897e> <897e> 6169 +<897f> <897f> 1043 +<8980> <8980> 18184 +<8981> <8981> 2053 +<8982> <8982> 8291 +<8983> <8983> 3413 +<8985> <8985> 9600 +<8986> <8986> 5415 +<8987> <8987> 14370 +<8988> <8988> 12574 +<8989> <8989> 16361 +<898a> <898a> 14371 +<898b> <898b> 1288 +endcidrange + +100 begincidrange +<898f> <898f> 2973 +<8991> <8991> 18296 +<8993> <8993> 2972 +<8994> <8994> 16352 +<8995> <8995> 8931 +<8996> <8996> 3414 +<8997> <8997> 8933 +<8998> <8998> 8932 +<899b> <899b> 9601 +<899c> <899c> 3845 +<899d> <899d> 10236 +<899e> <899e> 10239 +<899f> <899f> 10238 +<89a1> <89a1> 10237 +<89a2> <89a2> 10812 +<89a3> <89a3> 10814 +<89a4> <89a4> 10813 +<89a5> <89a5> 15763 +<89a6> <89a6> 4940 +<89a7> <89a7> 14374 +<89a9> <89a9> 14373 +<89aa> <89aa> 4939 +<89ac> <89ac> 5238 +<89ad> <89ad> 11862 +<89ae> <89ae> 11864 +<89af> <89af> 11863 +<89b2> <89b2> 5416 +<89b6> <89b6> 12576 +<89b7> <89b7> 12575 +<89b9> <89b9> 12851 +<89ba> <89ba> 5698 +<89bc> <89bc> 14375 +<89bd> <89bd> 5774 +<89be> <89be> 13236 +<89bf> <89bf> 13235 +<89c0> <89c0> 5960 +<89c1> <89c1> 17667 +<89c6> <89c6> 17766 +<89d2> <89d2> 1289 +<89d3> <89d3> 7171 +<89d4> <89d4> 2054 +<89d5> <89d5> 8294 +<89d6> <89d6> 8292 +<89d9> <89d9> 8293 +<89da> <89db> 8935 +<89dc> <89dc> 9608 +<89dd> <89dd> 8934 +<89df> <89df> 9602 +<89e0> <89e0> 9606 +<89e1> <89e1> 9605 +<89e2> <89e2> 9607 +<89e3> <89e3> 3846 +<89e4> <89e4> 9604 +<89e5> <89e5> 9603 +<89e6> <89e6> 9609 +<89e7> <89e7> 14377 +<89e8> <89e8> 10242 +<89e9> <89e9> 10240 +<89eb> <89eb> 10241 +<89ec> <89ec> 10817 +<89ed> <89ed> 10815 +<89f0> <89f0> 10816 +<89f1> <89f1> 11396 +<89f2> <89f3> 11865 +<89f4> <89f4> 5417 +<89f6> <89f6> 12577 +<89f7> <89f7> 12852 +<89f8> <89f8> 5699 +<89fa> <89fa> 13072 +<89fb> <89fb> 13237 +<89fc> <89fc> 5847 +<89fe> <89fe> 13372 +<89ff> <89ff> 13542 +<8a00> <8a00> 1290 +<8a02> <8a03> 2056 +<8a04> <8a04> 7172 +<8a07> <8a07> 7173 +<8a08> <8a08> 2055 +<8a0a> <8a0a> 2499 +<8a0c> <8a0c> 2497 +<8a0e> <8a0e> 2496 +<8a0f> <8a0f> 2503 +<8a10> <8a10> 2495 +<8a11> <8a11> 2504 +<8a12> <8a12> 7688 +<8a13> <8a13> 2501 +<8a15> <8a15> 2498 +<8a16> <8a16> 2502 +<8a17> <8a17> 2500 +<8a18> <8a18> 2494 +<8a1b> <8a1b> 2981 +<8a1c> <8a1c> 15267 +<8a1d> <8a1d> 2975 +<8a1e> <8a1e> 8298 +<8a1f> <8a1f> 2980 +<8a22> <8a22> 2982 +<8a23> <8a23> 2976 +<8a25> <8a25> 2977 +<8a27> <8a27> 8296 +<8a29> <8a29> 17381 +endcidrange + +100 begincidrange +<8a2a> <8a2a> 2974 +<8a2b> <8a2b> 15313 +<8a2c> <8a2c> 8297 +<8a2d> <8a2d> 2979 +<8a30> <8a30> 8295 +<8a31> <8a31> 2978 +<8a34> <8a34> 3425 +<8a36> <8a36> 3427 +<8a38> <8a38> 18298 +<8a39> <8a39> 8939 +<8a3a> <8a3a> 3426 +<8a3b> <8a3b> 3415 +<8a3c> <8a3c> 3419 +<8a3d> <8a3d> 15266 +<8a3e> <8a3e> 3865 +<8a3f> <8a3f> 9614 +<8a40> <8a40> 8941 +<8a41> <8a41> 3420 +<8a44> <8a45> 8944 +<8a46> <8a46> 3424 +<8a48> <8a48> 8947 +<8a49> <8a49> 16368 +<8a4a> <8a4a> 8949 +<8a4c> <8a4c> 8950 +<8a4d> <8a4d> 8938 +<8a4e> <8a4e> 8937 +<8a4f> <8a4f> 8951 +<8a50> <8a50> 3423 +<8a51> <8a51> 8948 +<8a52> <8a52> 8946 +<8a54> <8a54> 3421 +<8a55> <8a55> 3417 +<8a56> <8a56> 3428 +<8a57> <8a58> 8942 +<8a59> <8a59> 8940 +<8a5b> <8a5b> 3422 +<8a5e> <8a5e> 3418 +<8a60> <8a60> 3416 +<8a61> <8a61> 9613 +<8a62> <8a62> 3860 +<8a63> <8a63> 3855 +<8a66> <8a66> 3850 +<8a67> <8a67> 16270 +<8a68> <8a68> 3866 +<8a69> <8a69> 3851 +<8a6b> <8a6b> 3847 +<8a6c> <8a6c> 3862 +<8a6d> <8a6d> 3859 +<8a6e> <8a6e> 3861 +<8a70> <8a70> 3852 +<8a71> <8a71> 3857 +<8a72> <8a73> 3848 +<8a74> <8a74> 9621 +<8a75> <8a75> 9618 +<8a76> <8a76> 9610 +<8a77> <8a77> 9615 +<8a79> <8a79> 3863 +<8a7a> <8a7a> 9622 +<8a7b> <8a7b> 3864 +<8a7c> <8a7c> 3854 +<8a7e> <8a7e> 16293 +<8a7f> <8a7f> 9612 +<8a81> <8a81> 9620 +<8a82> <8a82> 9616 +<8a83> <8a83> 9619 +<8a84> <8a84> 9617 +<8a85> <8a85> 3858 +<8a86> <8a86> 9611 +<8a87> <8a87> 3853 +<8a8b> <8a8b> 10245 +<8a8c> <8a8c> 4262 +<8a8d> <8a8d> 4265 +<8a8f> <8a8f> 10247 +<8a90> <8a90> 14383 +<8a91> <8a91> 4273 +<8a92> <8a92> 10246 +<8a93> <8a93> 4267 +<8a94> <8a94> 18299 +<8a95> <8a95> 4630 +<8a96> <8a96> 10248 +<8a98> <8a98> 4272 +<8a99> <8a99> 10244 +<8a9a> <8a9a> 4274 +<8a9c> <8a9c> 14380 +<8a9e> <8a9e> 4263 +<8aa0> <8aa0> 3856 +<8aa1> <8aa1> 4266 +<8aa3> <8aa3> 4264 +<8aa4> <8aa4> 4268 +<8aa5> <8aa5> 4270 +<8aa6> <8aa6> 4261 +<8aa7> <8aa7> 4275 +<8aa8> <8aa8> 4271 +<8aa9> <8aa9> 14397 +<8aaa> <8aaa> 4269 +<8aab> <8aab> 10243 +<8aaf> <8aaf> 14401 +<8ab0> <8ab0> 4637 +<8ab2> <8ab2> 4633 +<8ab4> <8ab4> 18300 +endcidrange + +100 begincidrange +<8ab6> <8ab6> 4640 +<8ab8> <8ab8> 10820 +<8ab9> <8ab9> 4641 +<8aba> <8aba> 10832 +<8abb> <8abb> 10825 +<8abc> <8abc> 4626 +<8abd> <8abd> 10833 +<8abe> <8abe> 10827 +<8abf> <8abf> 4636 +<8ac0> <8ac0> 10828 +<8ac2> <8ac2> 4635 +<8ac3> <8ac3> 10831 +<8ac4> <8ac4> 4629 +<8ac5> <8ac5> 10829 +<8ac6> <8ac6> 10819 +<8ac7> <8ac7> 4628 +<8ac8> <8ac8> 11407 +<8ac9> <8ac9> 4634 +<8acb> <8acb> 4631 +<8acd> <8acd> 4639 +<8acf> <8acf> 10818 +<8ad1> <8ad1> 10822 +<8ad2> <8ad2> 4627 +<8ad3> <8ad3> 10821 +<8ad4> <8ad5> 10823 +<8ad6> <8ad6> 4638 +<8ad7> <8ad7> 10826 +<8ad8> <8ad8> 10830 +<8ad9> <8ad9> 10834 +<8ada> <8ada> 14786 +<8adb> <8adb> 4642 +<8adc> <8adc> 4946 +<8add> <8add> 11402 +<8ade> <8ade> 11408 +<8adf> <8adf> 11405 +<8ae0> <8ae0> 11397 +<8ae1> <8ae1> 11409 +<8ae2> <8ae2> 11398 +<8ae4> <8ae4> 11404 +<8ae6> <8ae6> 4941 +<8ae7> <8ae7> 4947 +<8ae8> <8ae8> 11410 +<8aea> <8aea> 15833 +<8aeb> <8aeb> 4943 +<8aed> <8aed> 4953 +<8aee> <8aee> 4948 +<8aef> <8aef> 11412 +<8af0> <8af0> 11406 +<8af1> <8af1> 4944 +<8af2> <8af2> 11399 +<8af3> <8af3> 4954 +<8af4> <8af5> 11400 +<8af6> <8af6> 4955 +<8af7> <8af7> 4952 +<8af8> <8af8> 4632 +<8afa> <8afa> 4942 +<8afb> <8afb> 11413 +<8afc> <8afc> 4956 +<8afe> <8afe> 4949 +<8aff> <8aff> 11411 +<8b00> <8b00> 4945 +<8b01> <8b02> 4950 +<8b04> <8b04> 5246 +<8b05> <8b05> 11871 +<8b06> <8b06> 11880 +<8b07> <8b07> 11877 +<8b08> <8b08> 11879 +<8b0a> <8b0a> 5243 +<8b0b> <8b0b> 11872 +<8b0c> <8b0c> 14390 +<8b0d> <8b0d> 11878 +<8b0e> <8b0e> 5239 +<8b0f> <8b0f> 11874 +<8b10> <8b10> 5247 +<8b11> <8b11> 11870 +<8b12> <8b12> 11875 +<8b13> <8b13> 11882 +<8b14> <8b14> 11403 +<8b15> <8b15> 11876 +<8b16> <8b16> 11869 +<8b17> <8b17> 5240 +<8b18> <8b18> 11868 +<8b19> <8b19> 5241 +<8b1a> <8b1a> 11883 +<8b1b> <8b1b> 5242 +<8b1c> <8b1c> 11881 +<8b1d> <8b1d> 5245 +<8b1e> <8b1e> 11867 +<8b1f> <8b1f> 14391 +<8b20> <8b20> 5244 +<8b22> <8b22> 11873 +<8b23> <8b23> 12238 +<8b24> <8b24> 12252 +<8b25> <8b25> 12247 +<8b26> <8b26> 12249 +<8b27> <8b27> 12237 +<8b28> <8b28> 5418 +<8b2a> <8b2a> 12236 +<8b2b> <8b2b> 5421 +<8b2c> <8b2c> 5420 +endcidrange + +100 begincidrange +<8b2d> <8b2d> 16281 +<8b2e> <8b2e> 12251 +<8b2f> <8b2f> 12243 +<8b30> <8b30> 12240 +<8b31> <8b31> 12246 +<8b33> <8b33> 12239 +<8b35> <8b35> 12241 +<8b36> <8b36> 12250 +<8b37> <8b37> 12248 +<8b39> <8b39> 5419 +<8b3a> <8b3a> 12255 +<8b3b> <8b3b> 12253 +<8b3c> <8b3c> 12244 +<8b3d> <8b3d> 12254 +<8b3e> <8b3e> 12245 +<8b3f> <8b3f> 14394 +<8b40> <8b40> 12581 +<8b41> <8b41> 5572 +<8b42> <8b42> 12588 +<8b43> <8b43> 16370 +<8b45> <8b45> 13075 +<8b46> <8b46> 5579 +<8b47> <8b47> 12242 +<8b48> <8b48> 12579 +<8b49> <8b49> 5575 +<8b4a> <8b4a> 12580 +<8b4b> <8b4b> 12585 +<8b4c> <8b4d> 14395 +<8b4e> <8b4f> 5577 +<8b50> <8b50> 12578 +<8b51> <8b51> 12587 +<8b52> <8b52> 12589 +<8b53> <8b53> 12582 +<8b54> <8b54> 12584 +<8b55> <8b55> 12586 +<8b56> <8b56> 12583 +<8b57> <8b57> 12590 +<8b58> <8b58> 5574 +<8b59> <8b59> 5580 +<8b5a> <8b5a> 5576 +<8b5c> <8b5c> 5573 +<8b5d> <8b5d> 12855 +<8b5e> <8b5e> 15800 +<8b5f> <8b5f> 5704 +<8b60> <8b60> 12853 +<8b62> <8b62> 15828 +<8b63> <8b63> 12857 +<8b65> <8b65> 12858 +<8b66> <8b66> 5702 +<8b67> <8b67> 12859 +<8b68> <8b68> 12856 +<8b69> <8b69> 15351 +<8b6a> <8b6a> 12854 +<8b6b> <8b6b> 5705 +<8b6c> <8b6c> 5701 +<8b6d> <8b6d> 12860 +<8b6f> <8b6f> 5703 +<8b70> <8b70> 5700 +<8b74> <8b74> 5775 +<8b77> <8b77> 5776 +<8b78> <8b78> 13074 +<8b79> <8b79> 13073 +<8b7a> <8b7b> 13076 +<8b7d> <8b7d> 5777 +<8b7e> <8b7e> 13238 +<8b7f> <8b7f> 13243 +<8b80> <8b80> 5848 +<8b81> <8b81> 15757 +<8b82> <8b82> 13240 +<8b84> <8b84> 13239 +<8b85> <8b85> 13242 +<8b86> <8b86> 13241 +<8b88> <8b88> 13376 +<8b8a> <8b8a> 5898 +<8b8b> <8b8b> 13375 +<8b8c> <8b8c> 13373 +<8b8e> <8b8e> 13374 +<8b90> <8b90> 14399 +<8b92> <8b92> 5932 +<8b93> <8b93> 5931 +<8b94> <8b95> 13468 +<8b96> <8b96> 5933 +<8b98> <8b99> 13543 +<8b9a> <8b9a> 5972 +<8b9b> <8b9b> 14400 +<8b9c> <8b9c> 5978 +<8b9e> <8b9e> 13602 +<8b9f> <8b9f> 13631 +<8ba0> <8ba0> 17669 +<8bbe> <8bbe> 17767 +<8be2> <8be2> 17768 +<8c37> <8c37> 1291 +<8c39> <8c39> 8299 +<8c3b> <8c3b> 8300 +<8c3c> <8c3c> 9623 +<8c3d> <8c3d> 10249 +<8c3e> <8c3e> 10835 +<8c3f> <8c3f> 5249 +<8c41> <8c41> 5248 +<8c42> <8c42> 12256 +endcidrange + +100 begincidrange +<8c43> <8c43> 12591 +<8c45> <8c45> 13377 +<8c46> <8c46> 1292 +<8c47> <8c47> 7689 +<8c48> <8c48> 2505 +<8c49> <8c49> 2983 +<8c4a> <8c4a> 9625 +<8c4b> <8c4b> 9624 +<8c4c> <8c4c> 4643 +<8c4d> <8c4d> 10836 +<8c4e> <8c4e> 4644 +<8c4f> <8c4f> 11884 +<8c50> <8c50> 5422 +<8c51> <8c51> 18301 +<8c54> <8c54> 5987 +<8c55> <8c55> 1293 +<8c56> <8c56> 6728 +<8c57> <8c57> 7690 +<8c5a> <8c5a> 2984 +<8c5c> <8c5d> 8301 +<8c5f> <8c5f> 8952 +<8c61> <8c61> 3429 +<8c62> <8c62> 3867 +<8c64> <8c64> 9627 +<8c65> <8c65> 9626 +<8c66> <8c66> 9628 +<8c68> <8c69> 10250 +<8c6a> <8c6a> 4276 +<8c6b> <8c6b> 4957 +<8c6c> <8c6c> 4645 +<8c6d> <8c6d> 4958 +<8c6f> <8c6f> 11888 +<8c70> <8c70> 11885 +<8c71> <8c71> 11887 +<8c72> <8c72> 11886 +<8c73> <8c73> 5250 +<8c75> <8c75> 12257 +<8c76> <8c76> 12593 +<8c77> <8c77> 12592 +<8c78> <8c78> 6375 +<8c79> <8c79> 2507 +<8c7a> <8c7a> 2506 +<8c7b> <8c7b> 7691 +<8c7d> <8c7d> 8303 +<8c80> <8c80> 8954 +<8c81> <8c81> 8953 +<8c82> <8c82> 3430 +<8c84> <8c85> 9630 +<8c86> <8c86> 9629 +<8c89> <8c89> 3869 +<8c8a> <8c8a> 3868 +<8c8c> <8c8c> 4278 +<8c8d> <8c8d> 4277 +<8c8f> <8c8f> 10837 +<8c90> <8c90> 11416 +<8c91> <8c92> 11414 +<8c93> <8c93> 4959 +<8c94> <8c94> 11890 +<8c95> <8c95> 11889 +<8c97> <8c97> 12260 +<8c98> <8c98> 12259 +<8c99> <8c99> 12258 +<8c9a> <8c9a> 12594 +<8c9b> <8c9b> 14405 +<8c9c> <8c9c> 13603 +<8c9d> <8c9d> 1294 +<8c9e> <8c9e> 2058 +<8c9f> <8c9f> 15277 +<8ca0> <8ca0> 2059 +<8ca1> <8ca2> 2508 +<8ca3> <8ca3> 7693 +<8ca4> <8ca4> 7692 +<8ca5> <8ca5> 8304 +<8ca7> <8ca7> 2990 +<8ca8> <8ca8> 2988 +<8ca9> <8ca9> 2985 +<8caa> <8caa> 2989 +<8cab> <8cab> 2987 +<8cac> <8cac> 2986 +<8cad> <8cad> 16369 +<8caf> <8caf> 3431 +<8cb0> <8cb0> 8957 +<8cb2> <8cb2> 3874 +<8cb3> <8cb3> 3433 +<8cb4> <8cb4> 3438 +<8cb5> <8cb5> 8959 +<8cb6> <8cb6> 3440 +<8cb7> <8cb7> 3439 +<8cb8> <8cb8> 3442 +<8cb9> <8cb9> 8958 +<8cba> <8cba> 8955 +<8cbb> <8cbb> 3436 +<8cbc> <8cbc> 3432 +<8cbd> <8cbd> 3434 +<8cbe> <8cbe> 8956 +<8cbf> <8cbf> 3441 +<8cc0> <8cc0> 3437 +<8cc1> <8cc1> 3435 +<8cc2> <8cc2> 3876 +<8cc3> <8cc3> 3875 +endcidrange + +100 begincidrange +<8cc4> <8cc4> 3873 +<8cc5> <8cc5> 3877 +<8cc7> <8cc8> 3871 +<8cca> <8cca> 3870 +<8ccc> <8ccc> 9632 +<8ccd> <8ccd> 16025 +<8ccf> <8ccf> 10253 +<8cd1> <8cd2> 4280 +<8cd3> <8cd3> 4279 +<8cd4> <8cd4> 18302 +<8cd5> <8cd5> 10252 +<8cd6> <8cd6> 14411 +<8cd7> <8cd7> 10254 +<8cd9> <8cd9> 10840 +<8cda> <8cda> 10842 +<8cdb> <8cdb> 14417 +<8cdc> <8cdc> 4654 +<8cdd> <8cdd> 10843 +<8cde> <8cde> 4647 +<8cdf> <8cdf> 10839 +<8ce0> <8ce0> 4646 +<8ce1> <8ce1> 4656 +<8ce2> <8ce3> 4652 +<8ce4> <8ce4> 4649 +<8ce5> <8ce5> 10838 +<8ce6> <8ce6> 4648 +<8ce7> <8ce7> 10844 +<8ce8> <8ce8> 10841 +<8ce9> <8ce9> 15278 +<8cea> <8cea> 4655 +<8ceb> <8ceb> 16284 +<8cec> <8ced> 4650 +<8cee> <8cee> 11418 +<8cf0> <8cf0> 11420 +<8cf1> <8cf1> 11419 +<8cf2> <8cf2> 18303 +<8cf3> <8cf3> 11421 +<8cf4> <8cf4> 4960 +<8cf5> <8cf5> 11417 +<8cf7> <8cf7> 16305 +<8cf8> <8cf8> 5254 +<8cf9> <8cf9> 11891 +<8cfa> <8cfa> 5251 +<8cfb> <8cfb> 5255 +<8cfc> <8cfc> 5253 +<8cfd> <8cfd> 5252 +<8cfe> <8cfe> 12261 +<8d00> <8d00> 12264 +<8d02> <8d02> 12263 +<8d03> <8d03> 14415 +<8d04> <8d04> 12262 +<8d05> <8d05> 5423 +<8d06> <8d07> 12595 +<8d08> <8d08> 5581 +<8d09> <8d09> 12597 +<8d0a> <8d0a> 5582 +<8d0b> <8d0b> 17779 +<8d0c> <8d0c> 16278 +<8d0d> <8d0d> 5707 +<8d0f> <8d0f> 5706 +<8d10> <8d10> 13078 +<8d11> <8d11> 14419 +<8d12> <8d12> 14414 +<8d13> <8d13> 5778 +<8d14> <8d14> 13079 +<8d15> <8d15> 13244 +<8d16> <8d17> 5849 +<8d18> <8d18> 15983 +<8d19> <8d19> 13378 +<8d1b> <8d1b> 5935 +<8d1c> <8d1c> 18304 +<8d1d> <8d1d> 17670 +<8d64> <8d64> 1295 +<8d66> <8d66> 2992 +<8d67> <8d67> 2991 +<8d68> <8d69> 9633 +<8d6b> <8d6b> 4282 +<8d6c> <8d6c> 11422 +<8d6d> <8d6d> 4657 +<8d6e> <8d6e> 11423 +<8d6f> <8d6f> 11892 +<8d70> <8d70> 1296 +<8d72> <8d72> 7174 +<8d73> <8d73> 2061 +<8d74> <8d74> 2060 +<8d76> <8d76> 7694 +<8d77> <8d77> 2510 +<8d78> <8d78> 7695 +<8d79> <8d79> 8307 +<8d7a> <8d7a> 14817 +<8d7b> <8d7b> 8306 +<8d7d> <8d7d> 8305 +<8d80> <8d80> 8961 +<8d81> <8d81> 3445 +<8d82> <8d82> 16233 +<8d84> <8d84> 8960 +<8d85> <8d85> 3444 +<8d89> <8d89> 8962 +<8d8a> <8d8a> 3443 +<8d8c> <8d8c> 9636 +endcidrange + +100 begincidrange +<8d8d> <8d8d> 9639 +<8d8e> <8d8f> 9637 +<8d90> <8d90> 9642 +<8d91> <8d91> 9635 +<8d92> <8d92> 9643 +<8d93> <8d94> 9640 +<8d95> <8d95> 4284 +<8d96> <8d96> 10255 +<8d99> <8d99> 4283 +<8d9b> <8d9b> 10848 +<8d9c> <8d9c> 10846 +<8d9f> <8d9f> 4658 +<8da0> <8da0> 10845 +<8da1> <8da1> 10847 +<8da3> <8da3> 4659 +<8da5> <8da5> 11424 +<8da6> <8da6> 16375 +<8da7> <8da7> 11425 +<8da8> <8da8> 5256 +<8da9> <8da9> 14422 +<8daa> <8daa> 12599 +<8dab> <8dab> 12601 +<8dac> <8dac> 12598 +<8dad> <8dad> 12600 +<8dae> <8dae> 12861 +<8daf> <8daf> 13080 +<8db2> <8db2> 13577 +<8db3> <8db3> 1297 +<8db4> <8db4> 2062 +<8db5> <8db5> 7696 +<8db6> <8db6> 7698 +<8db7> <8db7> 7697 +<8db9> <8db9> 8310 +<8dba> <8dba> 2994 +<8dbc> <8dbc> 8308 +<8dbe> <8dbe> 2993 +<8dbf> <8dbf> 8311 +<8dc0> <8dc0> 17258 +<8dc1> <8dc1> 8312 +<8dc2> <8dc2> 8309 +<8dc3> <8dc3> 18306 +<8dc5> <8dc5> 8974 +<8dc6> <8dc6> 3453 +<8dc7> <8dc7> 8966 +<8dc8> <8dc8> 8972 +<8dcb> <8dcb> 3448 +<8dcc> <8dcc> 3451 +<8dcd> <8dcd> 8965 +<8dce> <8dce> 3446 +<8dcf> <8dcf> 8969 +<8dd0> <8dd0> 9649 +<8dd1> <8dd1> 3450 +<8dd3> <8dd3> 8964 +<8dd4> <8dd4> 16258 +<8dd5> <8dd5> 8970 +<8dd6> <8dd6> 8967 +<8dd7> <8dd7> 8973 +<8dd8> <8dd8> 8963 +<8dd9> <8dd9> 8971 +<8dda> <8dda> 3449 +<8ddb> <8ddb> 3452 +<8ddc> <8ddc> 8968 +<8ddd> <8ddd> 3447 +<8ddf> <8ddf> 3879 +<8de0> <8de0> 9645 +<8de1> <8de1> 3878 +<8de2> <8de2> 9652 +<8de3> <8de3> 9651 +<8de4> <8de4> 3885 +<8de6> <8de6> 3886 +<8de7> <8de7> 9653 +<8de8> <8de8> 3880 +<8de9> <8de9> 9650 +<8dea> <8dea> 3884 +<8deb> <8deb> 9655 +<8dec> <8dec> 9646 +<8dee> <8dee> 9648 +<8def> <8def> 3881 +<8df0> <8df0> 9644 +<8df1> <8df1> 9647 +<8df2> <8df2> 9654 +<8df3> <8df3> 3882 +<8df4> <8df4> 9656 +<8dfa> <8dfa> 3883 +<8dfc> <8dfc> 4285 +<8dfd> <8dfd> 10260 +<8dfe> <8dfe> 10266 +<8dff> <8dff> 10258 +<8e00> <8e00> 10267 +<8e01> <8e01> 16261 +<8e02> <8e02> 10257 +<8e03> <8e03> 10262 +<8e04> <8e04> 10268 +<8e05> <8e05> 10265 +<8e06> <8e06> 10264 +<8e07> <8e07> 10263 +<8e09> <8e09> 10256 +<8e0a> <8e0a> 10261 +<8e0d> <8e0d> 10259 +<8e0e> <8e0e> 15966 +endcidrange + +100 begincidrange +<8e0f> <8e0f> 4664 +<8e10> <8e10> 4661 +<8e11> <8e11> 10857 +<8e12> <8e12> 10862 +<8e13> <8e13> 10864 +<8e14> <8e14> 10861 +<8e15> <8e15> 10854 +<8e16> <8e16> 10856 +<8e17> <8e17> 10866 +<8e18> <8e18> 10863 +<8e19> <8e19> 10858 +<8e1a> <8e1a> 10867 +<8e1b> <8e1b> 10855 +<8e1c> <8e1c> 10865 +<8e1d> <8e1d> 4662 +<8e1e> <8e1e> 4668 +<8e1f> <8e1f> 4666 +<8e20> <8e20> 10849 +<8e21> <8e21> 4667 +<8e22> <8e22> 4663 +<8e23> <8e23> 10850 +<8e24> <8e24> 10852 +<8e25> <8e25> 10851 +<8e26> <8e27> 10859 +<8e28> <8e28> 16264 +<8e29> <8e29> 4665 +<8e2a> <8e2a> 15284 +<8e2b> <8e2b> 4660 +<8e2d> <8e2d> 16043 +<8e2e> <8e2e> 10853 +<8e30> <8e30> 11435 +<8e31> <8e31> 4962 +<8e33> <8e33> 11426 +<8e34> <8e34> 4963 +<8e35> <8e35> 4966 +<8e36> <8e36> 11431 +<8e38> <8e38> 11428 +<8e39> <8e39> 4965 +<8e3a> <8e3a> 18308 +<8e3c> <8e3d> 11432 +<8e3e> <8e3e> 11427 +<8e3f> <8e3f> 11436 +<8e40> <8e40> 11429 +<8e41> <8e41> 11434 +<8e42> <8e42> 4964 +<8e44> <8e44> 4961 +<8e45> <8e45> 11430 +<8e46> <8e46> 17170 +<8e47> <8e47> 11898 +<8e48> <8e48> 5259 +<8e49> <8e49> 5257 +<8e4a> <8e4a> 5260 +<8e4b> <8e4b> 5258 +<8e4c> <8e4c> 11897 +<8e4d> <8e4d> 11894 +<8e4e> <8e4e> 11893 +<8e4f> <8e4f> 16259 +<8e50> <8e50> 11896 +<8e53> <8e53> 11895 +<8e54> <8e54> 12278 +<8e55> <8e55> 5429 +<8e56> <8e56> 12269 +<8e57> <8e57> 12268 +<8e59> <8e59> 5424 +<8e5a> <8e5a> 12274 +<8e5b> <8e5b> 12273 +<8e5c> <8e5c> 12265 +<8e5d> <8e5d> 12276 +<8e5e> <8e5e> 12270 +<8e5f> <8e5f> 5428 +<8e60> <8e60> 12267 +<8e61> <8e61> 12275 +<8e62> <8e62> 12266 +<8e63> <8e63> 5425 +<8e64> <8e64> 5427 +<8e65> <8e65> 12271 +<8e66> <8e66> 5426 +<8e67> <8e67> 12272 +<8e68> <8e68> 17229 +<8e69> <8e69> 12277 +<8e6a> <8e6a> 12605 +<8e6c> <8e6c> 5587 +<8e6d> <8e6d> 12602 +<8e6f> <8e6f> 12606 +<8e71> <8e71> 17383 +<8e72> <8e72> 5584 +<8e73> <8e73> 12604 +<8e74> <8e74> 5589 +<8e75> <8e75> 16265 +<8e76> <8e76> 5586 +<8e77> <8e77> 16255 +<8e78> <8e78> 12603 +<8e7a> <8e7a> 5588 +<8e7b> <8e7b> 12607 +<8e7c> <8e7c> 5583 +<8e7e> <8e7e> 17188 +<8e80> <8e80> 15959 +<8e81> <8e81> 5709 +<8e82> <8e82> 5711 +<8e84> <8e84> 12864 +endcidrange + +100 begincidrange +<8e85> <8e85> 5710 +<8e86> <8e86> 12862 +<8e87> <8e87> 5585 +<8e88> <8e88> 12863 +<8e89> <8e89> 5708 +<8e8a> <8e8a> 5779 +<8e8b> <8e8b> 5781 +<8e8c> <8e8c> 13082 +<8e8d> <8e8d> 5780 +<8e8e> <8e8e> 13081 +<8e90> <8e90> 13249 +<8e91> <8e91> 5851 +<8e92> <8e92> 13248 +<8e93> <8e93> 5852 +<8e94> <8e94> 13246 +<8e95> <8e95> 13245 +<8e96> <8e97> 13250 +<8e98> <8e98> 13379 +<8e9a> <8e9a> 13247 +<8e9d> <8e9d> 13473 +<8e9e> <8ea0> 13470 +<8ea1> <8ea1> 5961 +<8ea3> <8ea3> 13547 +<8ea4> <8ea4> 13546 +<8ea5> <8ea5> 13545 +<8ea6> <8ea6> 13578 +<8ea7> <8ea7> 15285 +<8ea8> <8ea8> 13623 +<8ea9> <8ea9> 13604 +<8eaa> <8eaa> 5979 +<8eab> <8eab> 1298 +<8eac> <8eac> 2511 +<8ead> <8ead> 14430 +<8eb0> <8eb0> 17385 +<8eb2> <8eb2> 3887 +<8eb6> <8eb6> 14431 +<8eba> <8eba> 4669 +<8ebc> <8ebc> 14496 +<8ebd> <8ebd> 11437 +<8ec0> <8ec0> 5430 +<8ec2> <8ec2> 12608 +<8ec3> <8ec3> 14432 +<8ec9> <8ec9> 13605 +<8eca> <8eca> 1299 +<8ecb> <8ecb> 1677 +<8ecc> <8ecc> 2064 +<8ecd> <8ecd> 2063 +<8ece> <8ece> 18312 +<8ecf> <8ecf> 2514 +<8ed1> <8ed1> 7699 +<8ed2> <8ed2> 2512 +<8ed3> <8ed3> 7700 +<8ed4> <8ed4> 2513 +<8ed7> <8ed7> 8317 +<8ed8> <8ed8> 8313 +<8eda> <8eda> 15806 +<8edb> <8edb> 2995 +<8edc> <8edc> 8316 +<8edd> <8edd> 8315 +<8ede> <8ede> 8314 +<8edf> <8edf> 2996 +<8ee0> <8ee1> 8318 +<8ee2> <8ee2> 18313 +<8ee4> <8ee4> 18314 +<8ee5> <8ee5> 8981 +<8ee6> <8ee6> 8979 +<8ee7> <8ee8> 8983 +<8ee9> <8ee9> 8990 +<8eeb> <8eeb> 8986 +<8eec> <8eec> 8988 +<8eed> <8eed> 18315 +<8eee> <8eee> 8980 +<8eef> <8eef> 8975 +<8ef1> <8ef1> 8987 +<8ef2> <8ef2> 18316 +<8ef4> <8ef4> 8989 +<8ef5> <8ef5> 8982 +<8ef6> <8ef6> 8985 +<8ef7> <8ef7> 8976 +<8ef8> <8ef8> 3455 +<8ef9> <8ef9> 8978 +<8efa> <8efa> 8977 +<8efb> <8efb> 3454 +<8efc> <8efc> 3456 +<8efe> <8efe> 3890 +<8eff> <8eff> 9658 +<8f00> <8f00> 9660 +<8f01> <8f01> 9659 +<8f02> <8f02> 9664 +<8f03> <8f03> 3888 +<8f05> <8f05> 9661 +<8f06> <8f06> 9657 +<8f07> <8f08> 9662 +<8f09> <8f09> 3889 +<8f0a> <8f0a> 3891 +<8f0b> <8f0b> 9665 +<8f0d> <8f0d> 10272 +<8f0e> <8f0e> 10271 +<8f10> <8f11> 10269 +<8f12> <8f12> 4287 +endcidrange + +100 begincidrange +<8f13> <8f13> 4289 +<8f14> <8f14> 4286 +<8f15> <8f15> 4288 +<8f16> <8f17> 10874 +<8f18> <8f18> 10870 +<8f19> <8f19> 14434 +<8f1a> <8f1a> 10871 +<8f1b> <8f1b> 4671 +<8f1c> <8f1c> 4676 +<8f1d> <8f1d> 4670 +<8f1e> <8f1e> 4677 +<8f1f> <8f1f> 4672 +<8f20> <8f20> 10872 +<8f23> <8f23> 10873 +<8f24> <8f24> 10869 +<8f25> <8f25> 4678 +<8f26> <8f26> 4674 +<8f29> <8f29> 4673 +<8f2a> <8f2a> 4675 +<8f2c> <8f2c> 10868 +<8f2d> <8f2d> 14435 +<8f2e> <8f2e> 11439 +<8f2f> <8f2f> 4968 +<8f30> <8f30> 15287 +<8f32> <8f32> 11441 +<8f33> <8f33> 4970 +<8f34> <8f34> 11444 +<8f35> <8f35> 11440 +<8f36> <8f36> 11438 +<8f37> <8f37> 11443 +<8f38> <8f38> 4969 +<8f39> <8f39> 11442 +<8f3b> <8f3b> 4967 +<8f3e> <8f3e> 5262 +<8f3f> <8f3f> 5265 +<8f40> <8f40> 11900 +<8f41> <8f41> 15623 +<8f42> <8f42> 5263 +<8f43> <8f43> 11899 +<8f44> <8f44> 5261 +<8f45> <8f45> 5264 +<8f46> <8f48> 12279 +<8f49> <8f49> 5431 +<8f4a> <8f4a> 15288 +<8f4b> <8f4b> 12282 +<8f4d> <8f4d> 5432 +<8f4e> <8f4e> 5591 +<8f4f> <8f50> 12611 +<8f51> <8f51> 12610 +<8f52> <8f52> 12609 +<8f53> <8f53> 12613 +<8f54> <8f54> 5590 +<8f55> <8f55> 12868 +<8f56> <8f57> 12866 +<8f58> <8f58> 12869 +<8f59> <8f59> 12865 +<8f5a> <8f5a> 12870 +<8f5b> <8f5b> 13084 +<8f5c> <8f5c> 16177 +<8f5d> <8f5d> 13085 +<8f5e> <8f5e> 13083 +<8f5f> <8f5f> 5782 +<8f60> <8f60> 13252 +<8f61> <8f61> 5853 +<8f62> <8f62> 13253 +<8f63> <8f63> 13381 +<8f64> <8f64> 13380 +<8f66> <8f67> 17769 +<8f6e> <8f6e> 17771 +<8f93> <8f93> 18226 +<8f9b> <8f9b> 1300 +<8f9c> <8f9c> 3457 +<8f9f> <8f9f> 3892 +<8fa0> <8fa0> 15764 +<8fa3> <8fa3> 4290 +<8fa5> <8fa5> 14438 +<8fa6> <8fa6> 4972 +<8fa8> <8fa8> 4971 +<8fad> <8fad> 5592 +<8fae> <8fae> 5679 +<8faf> <8faf> 5783 +<8fb0> <8fb0> 1301 +<8fb1> <8fb1> 2515 +<8fb2> <8fb2> 3893 +<8fb3> <8fb3> 14442 +<8fb4> <8fb4> 12614 +<8fb5> <8fb5> 560 +<8fb6> <8fb6> 18387 +<8fb7> <8fb7> 17405 +<8fb8> <8fb8> 17142 +<8fb9> <8fb9> 18633 +<8fba> <8fba> 18631 +<8fbb> <8fbc> 15723 +<8fbe> <8fbe> 18630 +<8fbf> <8fbf> 6377 +<8fc1> <8fc1> 18317 +<8fc2> <8fc2> 1302 +<8fc4> <8fc4> 1305 +<8fc5> <8fc5> 1304 +<8fc6> <8fc6> 1303 +endcidrange + +100 begincidrange +<8fc9> <8fc9> 6376 +<8fca> <8fca> 18318 +<8fcb> <8fcb> 6730 +<8fcc> <8fcc> 18319 +<8fcd> <8fcd> 6732 +<8fce> <8fce> 1678 +<8fd0> <8fd0> 18606 +<8fd1> <8fd1> 1680 +<8fd2> <8fd2> 6729 +<8fd3> <8fd3> 6731 +<8fd4> <8fd4> 1679 +<8fd5> <8fd5> 6734 +<8fd6> <8fd6> 6733 +<8fd7> <8fd7> 6735 +<8fda> <8fda> 16331 +<8fe0> <8fe0> 7178 +<8fe1> <8fe1> 7176 +<8fe2> <8fe2> 2067 +<8fe3> <8fe3> 7175 +<8fe4> <8fe4> 2072 +<8fe5> <8fe5> 2069 +<8fe6> <8fe6> 2066 +<8fe8> <8fe8> 2073 +<8fea> <8fea> 2068 +<8feb> <8feb> 2071 +<8fed> <8fed> 2070 +<8fee> <8fee> 7177 +<8ff0> <8ff0> 2065 +<8ff4> <8ff4> 2521 +<8ff5> <8ff5> 7702 +<8ff6> <8ff6> 7708 +<8ff7> <8ff7> 2518 +<8ff8> <8ff8> 2525 +<8ff9> <8ff9> 14449 +<8ffa> <8ffa> 2520 +<8ffb> <8ffb> 7705 +<8ffc> <8ffc> 7707 +<8ffd> <8ffd> 2523 +<8ffe> <8ffe> 7701 +<8fff> <8fff> 7704 +<9000> <9000> 2519 +<9001> <9001> 2516 +<9002> <9002> 7703 +<9003> <9003> 2522 +<9004> <9004> 7706 +<9005> <9005> 2524 +<9006> <9006> 2517 +<9008> <9008> 16096 +<900b> <900b> 8321 +<900c> <900c> 8324 +<900d> <900d> 2998 +<900f> <900f> 3008 +<9010> <9010> 3004 +<9011> <9011> 8322 +<9012> <9012> 15950 +<9014> <9014> 3012 +<9015> <9015> 3005 +<9016> <9016> 3010 +<9017> <9017> 3000 +<9019> <9019> 2997 +<901a> <901a> 2999 +<901b> <901b> 3011 +<901c> <901c> 8323 +<901d> <901d> 3003 +<901e> <901e> 3006 +<901f> <901f> 3002 +<9020> <9020> 3007 +<9021> <9021> 8325 +<9022> <9022> 3009 +<9023> <9023> 3001 +<9024> <9024> 8320 +<902d> <902d> 8991 +<902e> <902e> 3458 +<902f> <902f> 8993 +<9031> <9031> 3460 +<9032> <9032> 3462 +<9033> <9033> 18320 +<9034> <9034> 8992 +<9035> <9035> 3459 +<9036> <9036> 3463 +<9037> <9037> 14454 +<9038> <9038> 3461 +<903c> <903c> 3899 +<903d> <903d> 9670 +<903e> <903e> 3907 +<903f> <903f> 9667 +<9041> <9041> 3908 +<9042> <9042> 3897 +<9044> <9044> 9668 +<9047> <9047> 3902 +<9049> <9049> 9669 +<904a> <904a> 3895 +<904b> <904b> 3894 +<904c> <904c> 16144 +<904d> <904d> 3905 +<904e> <904e> 3904 +<904f> <904f> 3903 +<9050> <9050> 3901 +<9051> <9051> 3906 +<9052> <9052> 9666 +endcidrange + +100 begincidrange +<9053> <9053> 3896 +<9054> <9054> 3898 +<9055> <9055> 3900 +<9056> <9056> 15826 +<9058> <9058> 4292 +<9059> <9059> 4295 +<905b> <905b> 4299 +<905c> <905c> 4293 +<905d> <905d> 4298 +<905e> <905e> 4296 +<9060> <9060> 4291 +<9061> <9061> 14457 +<9062> <9062> 4297 +<9063> <9063> 4294 +<9064> <9064> 15464 +<9067> <9067> 10879 +<9068> <9068> 4681 +<9069> <9069> 4679 +<906b> <906b> 10880 +<906c> <906c> 15712 +<906d> <906d> 4682 +<906e> <906e> 4680 +<906f> <906f> 10878 +<9070> <9070> 10877 +<9072> <9072> 4976 +<9073> <9073> 10876 +<9074> <9074> 4974 +<9075> <9075> 4973 +<9076> <9076> 11445 +<9077> <9077> 4683 +<9078> <9078> 4975 +<9079> <9079> 11446 +<907a> <907a> 4978 +<907b> <907b> 11447 +<907c> <907c> 4977 +<907d> <907d> 5267 +<907e> <907e> 11902 +<907f> <907f> 5266 +<9080> <9080> 5271 +<9081> <9082> 5269 +<9083> <9083> 5434 +<9084> <9084> 5268 +<9085> <9085> 11901 +<9086> <9086> 11448 +<9087> <9087> 5433 +<9088> <9088> 5435 +<908a> <908b> 5593 +<908d> <908d> 12871 +<908f> <908f> 5900 +<9090> <9090> 5899 +<9091> <9091> 1307 +<9094> <9094> 6174 +<9095> <9095> 2526 +<9097> <9098> 6171 +<9099> <9099> 6170 +<909b> <909b> 6173 +<909e> <909e> 6381 +<909f> <909f> 6378 +<90a0> <90a0> 6383 +<90a1> <90a1> 6379 +<90a2> <90a2> 1308 +<90a3> <90a3> 1311 +<90a5> <90a5> 6380 +<90a6> <90a6> 1310 +<90a7> <90a7> 6382 +<90a8> <90a8> 14460 +<90aa> <90aa> 1309 +<90ae> <90ae> 14464 +<90af> <90af> 6738 +<90b0> <90b0> 6740 +<90b1> <90b1> 1683 +<90b2> <90b2> 6736 +<90b3> <90b3> 6739 +<90b4> <90b4> 6737 +<90b5> <90b5> 1681 +<90b6> <90b6> 1684 +<90b8> <90b8> 1682 +<90bb> <90bb> 15300 +<90bd> <90bd> 7180 +<90be> <90be> 7184 +<90bf> <90bf> 7181 +<90c1> <90c1> 2076 +<90c3> <90c3> 2077 +<90c4> <90c4> 14462 +<90c5> <90c5> 7183 +<90c7> <90c7> 7185 +<90c8> <90c8> 7187 +<90ca> <90ca> 2074 +<90cb> <90cb> 7186 +<90ce> <90ce> 2075 +<90d4> <90d4> 8332 +<90d5> <90d5> 7182 +<90d6> <90d6> 7709 +<90d7> <90d7> 7718 +<90d8> <90d8> 7716 +<90d9> <90da> 7711 +<90db> <90db> 7717 +<90dc> <90dc> 7719 +<90dd> <90dd> 2528 +<90df> <90df> 7714 +endcidrange + +100 begincidrange +<90e0> <90e0> 7710 +<90e1> <90e1> 2527 +<90e2> <90e2> 2529 +<90e3> <90e3> 7713 +<90e4> <90e4> 7720 +<90e5> <90e5> 7715 +<90e8> <90e8> 3013 +<90e9> <90e9> 8335 +<90ea> <90ea> 8327 +<90eb> <90ec> 8333 +<90ed> <90ed> 3014 +<90ef> <90ef> 8326 +<90f0> <90f0> 8328 +<90f1> <90f1> 7179 +<90f2> <90f3> 8330 +<90f4> <90f4> 8329 +<90f5> <90f5> 3465 +<90f9> <90f9> 9000 +<90fa> <90fa> 11449 +<90fb> <90fb> 9001 +<90fc> <90fc> 8998 +<90fd> <90fd> 3015 +<90fe> <90fe> 3467 +<90ff> <90ff> 8997 +<9100> <9100> 9003 +<9101> <9101> 9002 +<9102> <9102> 3464 +<9103> <9103> 9006 +<9104> <9104> 8996 +<9105> <9105> 9005 +<9106> <9106> 8994 +<9107> <9107> 9004 +<9108> <9108> 8999 +<9109> <9109> 3466 +<910b> <910b> 9677 +<910d> <910d> 9672 +<910e> <910e> 9678 +<910f> <910f> 9673 +<9110> <9110> 9671 +<9111> <9111> 9674 +<9112> <9112> 3909 +<9114> <9114> 9676 +<9116> <9116> 9675 +<9117> <9117> 3910 +<9118> <9118> 4301 +<9119> <9119> 4300 +<911a> <911a> 10279 +<911b> <911b> 10282 +<911c> <911c> 10274 +<911d> <911d> 10278 +<911e> <911e> 4302 +<911f> <911f> 10277 +<9120> <9120> 10275 +<9121> <9121> 10281 +<9122> <9122> 10276 +<9123> <9123> 10273 +<9124> <9124> 10280 +<9126> <9126> 10886 +<9127> <9127> 4686 +<9128> <9128> 12283 +<9129> <912a> 10883 +<912b> <912b> 10882 +<912c> <912c> 8995 +<912d> <912d> 4685 +<912e> <912e> 10887 +<912f> <912f> 10881 +<9130> <9130> 4684 +<9131> <9131> 4687 +<9132> <9132> 10885 +<9133> <9133> 11450 +<9134> <9134> 4979 +<9135> <9136> 11451 +<9138> <9138> 11903 +<9139> <9139> 5272 +<913a> <913b> 12284 +<913e> <913e> 12286 +<913f> <913f> 12616 +<9140> <9140> 12615 +<9141> <9141> 12873 +<9143> <9143> 12872 +<9144> <9145> 13087 +<9146> <9146> 13086 +<9147> <9147> 13254 +<9148> <9148> 5854 +<9149> <9149> 1312 +<914a> <914a> 2079 +<914b> <914b> 2078 +<914c> <914c> 2532 +<914d> <914d> 2531 +<914e> <914f> 7722 +<9150> <9150> 7721 +<9151> <9151> 16201 +<9152> <9152> 2530 +<9153> <9153> 8339 +<9155> <9155> 8340 +<9156> <9156> 8336 +<9157> <9157> 3016 +<9158> <9158> 8337 +<9159> <9159> 16197 +<915a> <915a> 8338 +endcidrange + +100 begincidrange +<915c> <915c> 16199 +<915e> <915e> 17387 +<915f> <915f> 9009 +<9160> <9160> 9011 +<9161> <9161> 9007 +<9162> <9162> 9010 +<9163> <9163> 3468 +<9164> <9164> 9008 +<9165> <9165> 3469 +<9167> <9167> 14466 +<9168> <9168> 9186 +<9169> <9169> 3913 +<916a> <916a> 3912 +<916c> <916c> 3911 +<916e> <916f> 9679 +<9170> <9170> 16056 +<9172> <9172> 10284 +<9173> <9173> 10286 +<9174> <9174> 4306 +<9175> <9175> 4303 +<9176> <9176> 16027 +<9177> <9177> 4305 +<9178> <9178> 4304 +<9179> <9179> 10285 +<917a> <917a> 10283 +<917c> <917c> 16239 +<9180> <9180> 10894 +<9181> <9182> 10891 +<9183> <9183> 4691 +<9184> <9184> 10893 +<9185> <9186> 10888 +<9187> <9187> 4688 +<9189> <9189> 4689 +<918a> <918a> 10890 +<918b> <918b> 4690 +<918c> <918c> 17388 +<918d> <918d> 11456 +<918e> <918e> 16206 +<918f> <918f> 11457 +<9190> <9191> 11454 +<9192> <9192> 4980 +<9193> <9193> 11453 +<9199> <9199> 11907 +<919a> <919a> 11904 +<919b> <919b> 11906 +<919c> <919c> 5275 +<919d> <919d> 11910 +<919e> <919e> 5274 +<919f> <919f> 11908 +<91a0> <91a0> 11911 +<91a1> <91a1> 11909 +<91a2> <91a2> 11905 +<91a3> <91a3> 5273 +<91a5> <91a5> 12288 +<91a7> <91a7> 12289 +<91a8> <91a8> 12287 +<91a9> <91a9> 14467 +<91aa> <91aa> 12291 +<91ab> <91ac> 5436 +<91ad> <91ad> 12618 +<91ae> <91ae> 5596 +<91af> <91af> 12290 +<91b0> <91b0> 12617 +<91b1> <91b1> 5595 +<91b2> <91b3> 12876 +<91b4> <91b4> 5712 +<91b5> <91b5> 12875 +<91b6> <91b6> 17903 +<91b7> <91b7> 12874 +<91b9> <91b9> 13089 +<91ba> <91ba> 5784 +<91bb> <91bb> 15304 +<91bc> <91bc> 13382 +<91bd> <91bd> 13475 +<91be> <91be> 13474 +<91c0> <91c0> 5936 +<91c1> <91c1> 5962 +<91c2> <91c2> 13476 +<91c3> <91c3> 13579 +<91c4> <91c4> 14468 +<91c5> <91c5> 5980 +<91c6> <91c6> 1313 +<91c7> <91c7> 1685 +<91c9> <91c9> 3914 +<91cb> <91cb> 5713 +<91cc> <91cc> 1314 +<91cd> <91cd> 2080 +<91ce> <91ce> 3017 +<91cf> <91cf> 3470 +<91d0> <91d0> 5438 +<91d1> <91d1> 1686 +<91d3> <91d3> 7189 +<91d4> <91d4> 7188 +<91d5> <91d5> 7724 +<91d6> <91d6> 16734 +<91d7> <91d7> 2535 +<91d8> <91d8> 2533 +<91d9> <91d9> 2537 +<91da> <91da> 7726 +<91dc> <91dc> 2536 +endcidrange + +100 begincidrange +<91dd> <91dd> 2534 +<91df> <91df> 17722 +<91e2> <91e2> 7725 +<91e3> <91e3> 3020 +<91e4> <91e4> 8346 +<91e5> <91e5> 15366 +<91e6> <91e6> 3019 +<91e7> <91e7> 3021 +<91e8> <91e8> 8351 +<91e9> <91e9> 3023 +<91ea> <91eb> 8348 +<91ec> <91ec> 8341 +<91ed> <91ed> 3022 +<91ee> <91ee> 8352 +<91f1> <91f1> 8343 +<91f3> <91f3> 8344 +<91f4> <91f4> 8342 +<91f5> <91f5> 3018 +<91f7> <91f7> 8350 +<91f8> <91f8> 8345 +<91f9> <91f9> 8347 +<91fa> <91fa> 15096 +<91fd> <91fd> 9023 +<91fe> <91fe> 14382 +<91ff> <91ff> 9022 +<9200> <9200> 9020 +<9201> <9201> 9012 +<9202> <9202> 9027 +<9203> <9203> 9015 +<9204> <9204> 9025 +<9205> <9205> 9032 +<9206> <9206> 9024 +<9207> <9207> 3478 +<9208> <9208> 16057 +<9209> <9209> 3474 +<920a> <920a> 9013 +<920c> <920c> 9019 +<920d> <920d> 3476 +<920e> <920e> 14472 +<920f> <920f> 9018 +<9210> <9210> 3477 +<9211> <9211> 3479 +<9212> <9212> 9021 +<9213> <9213> 18323 +<9214> <9215> 3471 +<9216> <9216> 9033 +<9217> <9217> 9031 +<9219> <9219> 9030 +<921a> <921a> 9016 +<921c> <921c> 9028 +<921e> <921e> 3475 +<9223> <9223> 3473 +<9224> <9224> 9029 +<9225> <9225> 9014 +<9226> <9226> 9017 +<9227> <9227> 9026 +<9228> <9228> 18325 +<922a> <922a> 15374 +<922b> <922b> 15270 +<922d> <922d> 10321 +<922e> <922e> 9690 +<9230> <9230> 9683 +<9231> <9231> 9702 +<9232> <9232> 9711 +<9233> <9233> 9686 +<9234> <9234> 3925 +<9235> <9235> 15142 +<9236> <9236> 9699 +<9237> <9237> 3915 +<9238> <9238> 3917 +<9239> <9239> 3929 +<923a> <923a> 9684 +<923c> <923c> 16850 +<923d> <923d> 3918 +<923e> <923e> 3920 +<923f> <923f> 3930 +<9240> <9240> 3919 +<9241> <9241> 14474 +<9244> <9244> 14490 +<9245> <9245> 3928 +<9246> <9246> 9692 +<9248> <9248> 9681 +<9249> <9249> 3926 +<924a> <924a> 9691 +<924b> <924b> 3922 +<924c> <924c> 9709 +<924d> <924d> 3927 +<924e> <924e> 9707 +<924f> <924f> 9695 +<9250> <9250> 9705 +<9251> <9251> 3924 +<9252> <9252> 9682 +<9253> <9253> 9708 +<9254> <9254> 9703 +<9255> <9255> 15943 +<9256> <9256> 9710 +<9257> <9257> 3916 +<9258> <9258> 18326 +<925a> <925a> 3931 +<925b> <925b> 3921 +endcidrange + +100 begincidrange +<925d> <925d> 14851 +<925e> <925e> 9688 +<925f> <925f> 15584 +<9260> <9260> 9696 +<9261> <9261> 9700 +<9262> <9262> 14475 +<9263> <9263> 9704 +<9264> <9264> 3923 +<9265> <9265> 9687 +<9266> <9266> 9685 +<9267> <9267> 9697 +<926b> <926b> 18327 +<926c> <926c> 9694 +<926d> <926d> 9693 +<926e> <926e> 15621 +<926f> <926f> 9698 +<9270> <9270> 9701 +<9272> <9272> 9706 +<9276> <9276> 10289 +<9277> <9277> 15460 +<9278> <9278> 4307 +<9279> <9279> 10299 +<927a> <927a> 10291 +<927b> <927b> 4313 +<927c> <927c> 4317 +<927d> <927d> 10308 +<927e> <927e> 10316 +<927f> <927f> 10301 +<9280> <9280> 4309 +<9281> <9281> 15873 +<9282> <9282> 10305 +<9283> <9283> 9689 +<9284> <9284> 15545 +<9285> <9285> 4310 +<9286> <9286> 10312 +<9287> <9287> 10317 +<9288> <9288> 10309 +<9289> <9289> 15029 +<928a> <928a> 10311 +<928b> <928b> 10320 +<928c> <928c> 10313 +<928d> <928d> 10295 +<928e> <928e> 10304 +<928f> <928f> 18109 +<9291> <9291> 4318 +<9293> <9293> 4314 +<9294> <9294> 10293 +<9295> <9295> 10306 +<9296> <9296> 4312 +<9297> <9297> 10300 +<9298> <9298> 4311 +<9299> <9299> 10314 +<929a> <929a> 10297 +<929b> <929b> 10290 +<929c> <929c> 4315 +<929d> <929d> 10319 +<92a0> <92a0> 10292 +<92a1> <92a1> 10310 +<92a2> <92a2> 10307 +<92a3> <92a3> 10302 +<92a4> <92a4> 10288 +<92a5> <92a5> 10287 +<92a6> <92a6> 10296 +<92a7> <92a7> 10315 +<92a8> <92a8> 4316 +<92a9> <92a9> 10318 +<92aa> <92aa> 10294 +<92ab> <92ab> 10298 +<92ac> <92ac> 4308 +<92ae> <92ae> 18329 +<92b1> <92b1> 18328 +<92b2> <92b2> 4703 +<92b3> <92b3> 4698 +<92b4> <92b4> 10928 +<92b5> <92b5> 10924 +<92b6> <92b6> 10900 +<92b7> <92b7> 4694 +<92b9> <92b9> 14057 +<92ba> <92ba> 15349 +<92bb> <92bb> 4693 +<92bc> <92bc> 4699 +<92be> <92be> 15456 +<92bf> <92bf> 18330 +<92c0> <92c0> 10898 +<92c1> <92c1> 4697 +<92c2> <92c2> 10910 +<92c3> <92c4> 10896 +<92c5> <92c5> 4692 +<92c6> <92c6> 10927 +<92c7> <92c7> 4701 +<92c8> <92c8> 10913 +<92c9> <92c9> 10918 +<92ca> <92ca> 10912 +<92cb> <92cb> 11475 +<92cc> <92cc> 10908 +<92cd> <92cd> 10916 +<92ce> <92ce> 10914 +<92cf> <92cf> 10901 +<92d0> <92d0> 10895 +<92d1> <92d1> 10922 +endcidrange + +100 begincidrange +<92d2> <92d2> 4700 +<92d3> <92d3> 10923 +<92d4> <92d4> 14433 +<92d5> <92d5> 10917 +<92d7> <92d7> 10906 +<92d8> <92d8> 10904 +<92d9> <92d9> 10899 +<92db> <92db> 16396 +<92dd> <92dd> 10907 +<92de> <92de> 10920 +<92df> <92df> 10903 +<92e0> <92e0> 10919 +<92e1> <92e1> 10925 +<92e3> <92e3> 18331 +<92e4> <92e4> 4696 +<92e5> <92e5> 15522 +<92e6> <92e6> 10915 +<92e7> <92e7> 10921 +<92e8> <92e8> 10911 +<92e9> <92e9> 10905 +<92ea> <92ea> 4695 +<92eb> <92eb> 18332 +<92ec> <92ec> 14692 +<92ee> <92ee> 10303 +<92ef> <92ef> 10909 +<92f0> <92f0> 4702 +<92f1> <92f1> 10902 +<92f2> <92f2> 15026 +<92f3> <92f4> 18333 +<92f6> <92f6> 15364 +<92f7> <92f7> 11480 +<92f8> <92f8> 4983 +<92f9> <92f9> 11479 +<92fa> <92fa> 11477 +<92fb> <92fb> 11495 +<92fc> <92fc> 4987 +<92fd> <92fd> 18335 +<92fe> <92fe> 11492 +<92ff> <92ff> 11484 +<9300> <9300> 11494 +<9301> <9301> 11470 +<9302> <9302> 11482 +<9303> <9303> 14439 +<9304> <9304> 4989 +<9306> <9306> 11462 +<9307> <9307> 15121 +<9308> <9308> 11460 +<9309> <9309> 11493 +<930b> <930b> 11491 +<930c> <930c> 11490 +<930d> <930d> 11474 +<930e> <930e> 11473 +<930f> <930f> 11463 +<9310> <9310> 4991 +<9312> <9312> 11469 +<9313> <9313> 11478 +<9314> <9314> 11489 +<9315> <9315> 4994 +<9316> <9316> 11496 +<9318> <9318> 5283 +<9319> <9319> 4996 +<931a> <931a> 4990 +<931b> <931b> 11467 +<931d> <931d> 11476 +<931e> <931e> 11459 +<931f> <931f> 11461 +<9320> <9320> 4981 +<9321> <9321> 4993 +<9322> <9322> 4986 +<9323> <9323> 11468 +<9324> <9324> 11483 +<9325> <9325> 10926 +<9326> <9326> 4992 +<9327> <9327> 11458 +<9328> <9328> 5278 +<9329> <9329> 11485 +<932a> <932a> 11488 +<932b> <932b> 4988 +<932c> <932c> 14482 +<932d> <932d> 11472 +<932e> <932e> 4995 +<932f> <932f> 4985 +<9330> <9330> 15875 +<9331> <9331> 15549 +<9333> <9333> 4984 +<9334> <9334> 11481 +<9335> <9335> 11487 +<9336> <9336> 4982 +<9338> <9338> 11465 +<9339> <9339> 11486 +<933c> <933c> 11466 +<9340> <9340> 16725 +<9341> <9341> 17015 +<9342> <9342> 15098 +<9343> <9343> 18336 +<9344> <9344> 16406 +<9345> <9345> 15988 +<9346> <9346> 11471 +<9347> <9347> 11917 +<9348> <9348> 15457 +endcidrange + +100 begincidrange +<9349> <9349> 11922 +<934a> <934a> 5280 +<934b> <934b> 5282 +<934c> <934c> 11928 +<934d> <934d> 5276 +<934e> <934e> 11942 +<934f> <934f> 11934 +<9350> <9351> 11923 +<9352> <9352> 11933 +<9354> <9354> 5289 +<9355> <9355> 11932 +<9356> <9356> 11916 +<9357> <9357> 11931 +<9358> <9358> 11919 +<9359> <9359> 11943 +<935a> <935a> 5288 +<935b> <935b> 5286 +<935c> <935c> 11920 +<935e> <935e> 11939 +<935f> <935f> 15547 +<9360> <9360> 11925 +<9361> <9361> 11938 +<9362> <9362> 17000 +<9363> <9363> 11940 +<9364> <9364> 11915 +<9365> <9365> 5281 +<9366> <9366> 18108 +<9367> <9367> 11941 +<9368> <9368> 15344 +<9369> <9369> 14689 +<936a> <936a> 11929 +<936b> <936b> 14483 +<936c> <936c> 5285 +<936d> <936d> 11926 +<936e> <936e> 14824 +<9370> <9370> 5287 +<9371> <9371> 11935 +<9373> <9373> 14494 +<9374> <9374> 15588 +<9375> <9375> 5279 +<9376> <9376> 11921 +<9377> <9377> 11936 +<9378> <9378> 14585 +<9379> <9379> 11930 +<937a> <937a> 11464 +<937b> <937b> 11937 +<937c> <937c> 11918 +<937d> <937d> 15397 +<937e> <937e> 5284 +<9380> <9380> 12308 +<9381> <9381> 14693 +<9382> <9382> 5277 +<9383> <9383> 11913 +<9384> <9384> 18337 +<9385> <9385> 17085 +<9386> <9386> 15552 +<9387> <9387> 15072 +<9388> <9388> 12305 +<9389> <9389> 12298 +<938a> <938a> 5440 +<938c> <938c> 12293 +<938d> <938d> 12309 +<938e> <938e> 12300 +<938f> <938f> 11927 +<9390> <9390> 15676 +<9391> <9391> 12311 +<9392> <9392> 12294 +<9394> <9394> 5439 +<9395> <9395> 12304 +<9396> <9396> 5441 +<9397> <9397> 5449 +<9398> <9398> 5447 +<9399> <9399> 12306 +<939a> <939a> 5448 +<939b> <939b> 12296 +<939c> <939c> 14764 +<939d> <939d> 12297 +<939e> <939e> 12302 +<939f> <939f> 12307 +<93a0> <93a0> 15025 +<93a1> <93a1> 11912 +<93a2> <93a2> 5442 +<93a3> <93a3> 12316 +<93a4> <93a4> 12313 +<93a5> <93a5> 12640 +<93a6> <93a6> 12303 +<93a7> <93a7> 12299 +<93a8> <93a8> 12314 +<93a9> <93a9> 12629 +<93aa> <93aa> 12301 +<93ac> <93ac> 5445 +<93ad> <93ad> 18338 +<93ae> <93ae> 5444 +<93af> <93af> 11914 +<93b0> <93b0> 5446 +<93b1> <93b1> 12310 +<93b2> <93b2> 12312 +<93b3> <93b3> 5443 +<93b4> <93b4> 12315 +<93b5> <93b5> 12292 +endcidrange + +100 begincidrange +<93b7> <93b7> 12295 +<93b8> <93b8> 15504 +<93ba> <93ba> 17399 +<93bb> <93bb> 15503 +<93bd> <93bd> 14887 +<93bf> <93bf> 15917 +<93c0> <93c0> 12638 +<93c2> <93c2> 12622 +<93c3> <93c3> 5600 +<93c4> <93c4> 12636 +<93c6> <93c6> 14762 +<93c7> <93c7> 12620 +<93c8> <93c8> 5601 +<93ca> <93ca> 12631 +<93cb> <93cb> 14694 +<93cc> <93cc> 12627 +<93cd> <93cd> 5606 +<93ce> <93ce> 12637 +<93cf> <93cf> 12621 +<93d0> <93d0> 12624 +<93d1> <93d1> 5598 +<93d2> <93d2> 12639 +<93d3> <93d3> 16609 +<93d4> <93d4> 12632 +<93d5> <93d5> 12635 +<93d6> <93d6> 5604 +<93d7> <93d7> 5609 +<93d8> <93d8> 5607 +<93d9> <93d9> 12628 +<93da> <93da> 12623 +<93db> <93db> 15455 +<93dc> <93dd> 5602 +<93de> <93de> 12619 +<93df> <93df> 5599 +<93e0> <93e0> 14880 +<93e1> <93e1> 5597 +<93e2> <93e2> 5605 +<93e3> <93e3> 12634 +<93e4> <93e4> 5608 +<93e6> <93e6> 12630 +<93e7> <93e7> 12641 +<93e8> <93e8> 5610 +<93ec> <93ec> 12626 +<93ee> <93ee> 12633 +<93f0> <93f0> 16959 +<93f1> <93f1> 17066 +<93f3> <93f3> 14690 +<93f5> <93f5> 12890 +<93f6> <93f6> 12905 +<93f7> <93f7> 12892 +<93f8> <93f8> 12899 +<93f9> <93f9> 12625 +<93fa> <93fa> 12897 +<93fb> <93fb> 12880 +<93fc> <93fc> 12903 +<93fd> <93fd> 5716 +<93fe> <93fe> 12884 +<93ff> <93ff> 12902 +<9400> <9400> 12891 +<9401> <9401> 15572 +<9403> <9403> 5715 +<9404> <9404> 15305 +<9406> <9406> 12907 +<9407> <9407> 12893 +<9408> <9408> 14885 +<9409> <9409> 12898 +<940a> <940a> 12901 +<940b> <940b> 12878 +<940c> <940c> 12904 +<940d> <940d> 12889 +<940e> <940e> 12894 +<940f> <940f> 12882 +<9410> <9410> 12886 +<9411> <9411> 12906 +<9412> <9412> 12896 +<9413> <9413> 12879 +<9414> <9414> 12883 +<9415> <9415> 12885 +<9416> <9416> 12895 +<9417> <9417> 18341 +<9418> <9418> 5714 +<9419> <9419> 12888 +<941b> <941b> 16712 +<941d> <941d> 18342 +<9420> <9420> 12881 +<9424> <9424> 14659 +<9425> <9425> 14544 +<9426> <9426> 14499 +<9427> <9427> 15309 +<9428> <9428> 12887 +<9429> <9429> 13093 +<942a> <942a> 13097 +<942b> <942b> 5791 +<942c> <942c> 13099 +<942d> <942d> 18343 +<942e> <942e> 5785 +<9430> <9430> 13095 +<9431> <9431> 13101 +<9432> <9432> 5790 +<9433> <9433> 5786 +endcidrange + +100 begincidrange +<9435> <9435> 5787 +<9436> <9436> 13092 +<9437> <9437> 13098 +<9438> <9438> 5789 +<9439> <9439> 13096 +<943a> <943a> 5788 +<943b> <943b> 13091 +<943c> <943c> 12900 +<943d> <943d> 13094 +<943e> <943e> 18344 +<943f> <943f> 13090 +<9440> <9440> 13100 +<9442> <9442> 17010 +<9443> <9443> 17013 +<9444> <9444> 5855 +<9445> <9445> 13261 +<9446> <9446> 13264 +<9447> <9447> 13260 +<9448> <9449> 13262 +<944a> <944b> 13257 +<944c> <944c> 13255 +<944d> <944d> 15461 +<944f> <944f> 13259 +<9450> <9450> 13256 +<9451> <9452> 5856 +<9454> <9454> 18346 +<9455> <9455> 13384 +<9457> <9457> 13386 +<9458> <9458> 15408 +<945b> <945b> 14495 +<945d> <945d> 13385 +<945e> <945e> 13387 +<9460> <9460> 5902 +<9462> <9462> 13383 +<9463> <9463> 5901 +<9464> <9464> 5903 +<9465> <9465> 15838 +<9467> <9467> 15032 +<9468> <9469> 13478 +<946a> <946a> 5937 +<946b> <946b> 13477 +<946c> <946c> 14206 +<946d> <946d> 13549 +<946e> <946e> 13548 +<946f> <946f> 13550 +<9470> <9470> 5964 +<9471> <9471> 13551 +<9472> <9472> 5963 +<9473> <9473> 13552 +<9474> <9474> 13580 +<9475> <9475> 13583 +<9476> <9476> 13582 +<9477> <9477> 5973 +<9478> <9478> 13581 +<9479> <9479> 18347 +<947b> <947b> 16795 +<947c> <947c> 5983 +<947d> <947e> 5981 +<947f> <947f> 5988 +<9480> <9481> 13625 +<9482> <9482> 13624 +<9483> <9483> 13632 +<9485> <9485> 17671 +<949f> <949f> 18565 +<94a2> <94a2> 17691 +<94c1> <94c1> 18401 +<94c3> <94c3> 18399 +<94dc> <94dc> 18391 +<94f6> <94f6> 18386 +<952d> <952d> 18348 +<9547> <9547> 18623 +<9577> <9577> 1687 +<9578> <9578> 17672 +<957a> <957a> 8353 +<957b> <957b> 9034 +<957c> <957c> 10929 +<957d> <957d> 12642 +<957f> <957f> 17673 +<9580> <9580> 1688 +<9582> <9582> 2081 +<9583> <9583> 2538 +<9585> <9585> 14497 +<9586> <9586> 8354 +<9588> <9588> 8355 +<9589> <9589> 3024 +<958b> <958b> 3482 +<958c> <958c> 9036 +<958d> <958d> 9035 +<958e> <958e> 3486 +<958f> <958f> 3481 +<9590> <9590> 9037 +<9591> <9591> 3483 +<9592> <9592> 3485 +<9593> <9593> 3484 +<9594> <9594> 3480 +<9596> <9596> 15317 +<9597> <9597> 15316 +<9598> <9598> 3932 +<9599> <9599> 15314 +<959b> <959b> 9715 +endcidrange + +100 begincidrange +<959c> <959c> 9713 +<959e> <959e> 9714 +<959f> <959f> 9712 +<95a0> <95a0> 14500 +<95a1> <95a1> 4319 +<95a2> <95a2> 18349 +<95a3> <95a3> 4322 +<95a4> <95a4> 4324 +<95a5> <95a5> 4323 +<95a6> <95a6> 14498 +<95a7> <95a7> 15315 +<95a8> <95a9> 4320 +<95aa> <95aa> 17301 +<95ab> <95ab> 10931 +<95ac> <95ac> 10930 +<95ad> <95ad> 4704 +<95ae> <95ae> 10932 +<95b0> <95b0> 10933 +<95b1> <95b1> 4705 +<95b5> <95b5> 11504 +<95b6> <95b6> 11502 +<95b7> <95b7> 11949 +<95b9> <95ba> 11500 +<95bb> <95bb> 4997 +<95bc> <95bc> 11497 +<95bd> <95bd> 11505 +<95be> <95be> 11499 +<95bf> <95bf> 11503 +<95c0> <95c0> 11945 +<95c3> <95c3> 11947 +<95c5> <95c5> 11948 +<95c6> <95c6> 5294 +<95c7> <95c7> 11944 +<95c8> <95c8> 5293 +<95c9> <95c9> 11946 +<95ca> <95cc> 5290 +<95cd> <95cd> 11498 +<95d0> <95d0> 5452 +<95d1> <95d1> 12319 +<95d2> <95d3> 12317 +<95d4> <95d4> 5450 +<95d5> <95d5> 5453 +<95d6> <95d6> 5451 +<95da> <95db> 12643 +<95dc> <95dc> 5611 +<95de> <95de> 12908 +<95df> <95df> 12910 +<95e0> <95e0> 12909 +<95e1> <95e1> 5717 +<95e2> <95e2> 5792 +<95e3> <95e3> 13104 +<95e4> <95e4> 13103 +<95e5> <95e5> 13102 +<95e8> <95e8> 17674 +<95f4> <95f4> 18351 +<961c> <961c> 1689 +<961d> <961d> 17689 +<961e> <961e> 6068 +<9620> <9620> 6177 +<9621> <9621> 1044 +<9622> <9622> 6175 +<9623> <9623> 6178 +<9624> <9624> 6176 +<9628> <9628> 6385 +<962a> <962a> 1318 +<962c> <962c> 1319 +<962d> <962d> 6387 +<962e> <962e> 1316 +<962f> <962f> 6386 +<9630> <9630> 6384 +<9631> <9631> 1317 +<9632> <9632> 1315 +<9633> <9633> 18352 +<9638> <9638> 16337 +<9639> <9639> 6741 +<963a> <963a> 6744 +<963b> <963b> 1692 +<963c> <963c> 6743 +<963d> <963d> 6742 +<963f> <963f> 1691 +<9640> <9640> 1690 +<9641> <9641> 16189 +<9642> <9642> 1694 +<9643> <9643> 6745 +<9644> <9644> 1693 +<9645> <9645> 18290 +<964a> <964a> 7194 +<964b> <964d> 2083 +<964e> <964e> 7195 +<964f> <964f> 7191 +<9650> <9650> 2082 +<9651> <9651> 7192 +<9653> <9653> 7193 +<9654> <9654> 7190 +<9656> <9656> 15847 +<9658> <9658> 2545 +<965b> <965b> 2542 +<965c> <965c> 7727 +<965d> <965d> 2543 +<965e> <965e> 2546 +endcidrange + +100 begincidrange +<965f> <965f> 7728 +<9661> <9661> 2541 +<9662> <9663> 2539 +<9664> <9664> 2544 +<9669> <9669> 18270 +<966a> <966a> 3025 +<966b> <966b> 8358 +<966c> <966c> 3033 +<966d> <966d> 8357 +<966f> <966f> 8360 +<9670> <9670> 3029 +<9671> <9671> 8359 +<9672> <9672> 3494 +<9673> <9673> 3027 +<9674> <9674> 3030 +<9675> <9675> 3026 +<9676> <9677> 3031 +<9678> <9678> 3028 +<967b> <967b> 14508 +<967c> <967c> 8356 +<967d> <967d> 3490 +<967e> <967e> 9039 +<9680> <9680> 9043 +<9681> <9681> 16198 +<9683> <9683> 9042 +<9684> <9684> 3495 +<9685> <9686> 3491 +<9687> <9687> 9038 +<9688> <9689> 9040 +<968a> <968a> 3487 +<968b> <968b> 3489 +<968d> <968d> 3493 +<968e> <968e> 3488 +<968f> <968f> 15326 +<9691> <9691> 9718 +<9692> <9693> 9716 +<9694> <9695> 3934 +<9696> <9696> 14509 +<9697> <9697> 9719 +<9698> <9698> 3933 +<9699> <9699> 4325 +<969b> <969b> 4327 +<969c> <969c> 4326 +<969e> <969e> 10322 +<96a1> <96a1> 10323 +<96a2> <96a2> 10935 +<96a3> <96a3> 14511 +<96a4> <96a4> 10934 +<96a5> <96a5> 17135 +<96a7> <96a8> 4998 +<96a9> <96a9> 11506 +<96aa> <96aa> 5000 +<96ac> <96ac> 11952 +<96ae> <96ae> 11950 +<96b0> <96b0> 11951 +<96b1> <96b1> 5295 +<96b3> <96b3> 12320 +<96b4> <96b4> 5612 +<96b6> <96b6> 561 +<96b8> <96b8> 5296 +<96b9> <96b9> 1695 +<96bb> <96bb> 2547 +<96bc> <96bc> 7729 +<96bd> <96bd> 14517 +<96bf> <96bf> 8361 +<96c0> <96c0> 3034 +<96c1> <96c1> 3496 +<96c2> <96c2> 9044 +<96c3> <96c3> 9046 +<96c4> <96c4> 3498 +<96c5> <96c5> 3497 +<96c6> <96c7> 3499 +<96c8> <96c8> 9045 +<96c9> <96ca> 3938 +<96cb> <96cb> 3937 +<96cc> <96cc> 4328 +<96cd> <96cd> 3936 +<96ce> <96ce> 9720 +<96d2> <96d2> 4329 +<96d3> <96d3> 10936 +<96d4> <96d4> 11507 +<96d5> <96d5> 5001 +<96d6> <96d6> 5297 +<96d7> <96d7> 12321 +<96d8> <96d8> 12325 +<96d9> <96d9> 5456 +<96da> <96da> 12322 +<96db> <96db> 5457 +<96dc> <96dc> 5455 +<96dd> <96dd> 12326 +<96de> <96de> 5458 +<96df> <96df> 12324 +<96e1> <96e1> 12645 +<96e2> <96e2> 5454 +<96e3> <96e3> 5613 +<96e5> <96e5> 13480 +<96e8> <96e8> 1696 +<96e9> <96e9> 3036 +<96ea> <96ea> 3035 +<96ef> <96ef> 3501 +endcidrange + +100 begincidrange +<96f0> <96f0> 9048 +<96f1> <96f1> 9047 +<96f2> <96f2> 3502 +<96f4> <96f4> 14852 +<96f5> <96f5> 9724 +<96f6> <96f6> 3943 +<96f7> <96f7> 3940 +<96f8> <96f8> 9723 +<96f9> <96f9> 3942 +<96fa> <96fa> 9721 +<96fb> <96fb> 3941 +<96fd> <96fd> 9722 +<96ff> <96ff> 10324 +<9700> <9700> 4330 +<9702> <9702> 10939 +<9703> <9703> 16141 +<9704> <9704> 4706 +<9705> <9705> 10937 +<9706> <9707> 4707 +<9708> <9708> 10938 +<9709> <9709> 4709 +<970b> <970b> 11508 +<970d> <970d> 5005 +<970e> <970e> 5002 +<970f> <970f> 5007 +<9710> <9710> 11510 +<9711> <9711> 5003 +<9712> <9712> 11509 +<9713> <9713> 5006 +<9716> <9716> 5004 +<9718> <9718> 11955 +<9719> <9719> 11957 +<971b> <971b> 14537 +<971c> <971c> 5298 +<971d> <971d> 11956 +<971e> <971e> 5299 +<971f> <971f> 11954 +<9720> <9720> 11953 +<9721> <9721> 16307 +<9722> <9722> 12328 +<9723> <9723> 12327 +<9724> <9724> 5459 +<9725> <9725> 12329 +<9726> <9726> 12650 +<9727> <9727> 5615 +<9728> <9728> 12649 +<9729> <9729> 12646 +<972a> <972a> 5614 +<972b> <972c> 12647 +<972e> <972f> 12911 +<9730> <9730> 5718 +<9731> <9731> 14528 +<9732> <9732> 5795 +<9735> <9735> 13105 +<9736> <9736> 14530 +<9738> <9739> 5793 +<973a> <973a> 13106 +<973d> <973e> 5858 +<973f> <973f> 13265 +<9740> <9740> 18355 +<9741> <9741> 15337 +<9742> <9742> 5938 +<9743> <9743> 13482 +<9744> <9744> 5940 +<9746> <9746> 13481 +<9747> <9747> 13483 +<9748> <9748> 5939 +<9749> <9749> 13553 +<974b> <974b> 13606 +<9751> <9751> 17635 +<9752> <9752> 1697 +<9756> <9756> 3944 +<9757> <9757> 14540 +<9758> <9758> 10325 +<975a> <975a> 10940 +<975b> <975c> 5008 +<975d> <975d> 15343 +<975e> <975e> 1698 +<975f> <975f> 14543 +<9760> <9760> 4710 +<9761> <9761> 5616 +<9762> <9762> 2086 +<9766> <9766> 5010 +<9768> <9768> 5904 +<9769> <9769> 2087 +<976a> <976a> 8362 +<976c> <976c> 9049 +<976d> <976d> 16023 +<976e> <976e> 9051 +<9770> <9770> 9050 +<9771> <9771> 15356 +<9772> <9772> 9728 +<9773> <9773> 9725 +<9774> <9774> 3945 +<9776> <9776> 3946 +<9777> <9778> 9726 +<977a> <977a> 10327 +<977b> <977b> 10332 +<977c> <977c> 4331 +<977d> <977d> 10326 +endcidrange + +100 begincidrange +<977e> <977e> 10328 +<977f> <977f> 10335 +<9780> <9780> 10330 +<9781> <9781> 10334 +<9782> <9782> 10331 +<9783> <9783> 10329 +<9784> <9784> 10333 +<9785> <9785> 4332 +<9787> <9787> 16576 +<9788> <9788> 10943 +<9789> <9789> 14548 +<978a> <978a> 10941 +<978b> <978b> 4712 +<978d> <978d> 4711 +<978e> <978e> 10942 +<978f> <978f> 4713 +<9794> <9794> 11513 +<9797> <9797> 11512 +<9798> <9798> 5011 +<9799> <9799> 11511 +<979a> <979a> 11958 +<979b> <979b> 15355 +<979c> <979c> 11960 +<979d> <979d> 11962 +<979e> <979e> 11961 +<979f> <979f> 14549 +<97a0> <97a0> 5300 +<97a1> <97a1> 11959 +<97a2> <97a2> 12336 +<97a3> <97a3> 5460 +<97a4> <97a4> 12334 +<97a5> <97a5> 12337 +<97a6> <97a6> 5461 +<97a8> <97a8> 12332 +<97aa> <97aa> 12335 +<97ab> <97ab> 12333 +<97ac> <97ac> 12330 +<97ad> <97ad> 5462 +<97ae> <97ae> 12331 +<97b1> <97b1> 14550 +<97b2> <97b2> 18357 +<97b3> <97b3> 12651 +<97b4> <97b4> 16179 +<97b6> <97b6> 12653 +<97b7> <97b7> 12652 +<97b8> <97b8> 15765 +<97b9> <97b9> 12913 +<97ba> <97ba> 16181 +<97bb> <97bb> 12914 +<97bd> <97bd> 18766 +<97be> <97be> 14551 +<97bf> <97bf> 13107 +<97c0> <97c0> 14552 +<97c1> <97c1> 5861 +<97c2> <97c2> 18358 +<97c3> <97c3> 5860 +<97c4> <97c5> 13388 +<97c6> <97c6> 5941 +<97c7> <97c7> 13484 +<97c8> <97c8> 16175 +<97c9> <97c9> 5974 +<97cb> <97cb> 2088 +<97cc> <97cc> 3503 +<97cd> <97cd> 10337 +<97ce> <97ce> 10336 +<97cf> <97cf> 10945 +<97d0> <97d0> 10944 +<97d2> <97d2> 14553 +<97d3> <97d3> 5301 +<97d4> <97d4> 11964 +<97d5> <97d5> 11963 +<97d6> <97d6> 12340 +<97d7> <97d7> 12338 +<97d8> <97d8> 12341 +<97d9> <97d9> 12339 +<97dc> <97dc> 5617 +<97dd> <97df> 12654 +<97e0> <97e0> 14554 +<97e1> <97e1> 13108 +<97e3> <97e3> 13266 +<97e5> <97e5> 13485 +<97e6> <97e6> 17676 +<97ed> <97ed> 2089 +<97ee> <97ee> 14556 +<97f0> <97f0> 11514 +<97f1> <97f1> 11965 +<97f2> <97f2> 14669 +<97f3> <97f3> 2090 +<97f5> <97f5> 14560 +<97f6> <97f6> 4333 +<97f8> <97f8> 11515 +<97f9> <97f9> 5463 +<97fa> <97fa> 12342 +<97fb> <97fb> 5618 +<97fd> <97fe> 12915 +<97ff> <97ff> 5796 +<9800> <9800> 13390 +<9801> <9801> 2091 +<9802> <9803> 3039 +<9804> <9804> 8363 +endcidrange + +100 begincidrange +<9805> <9806> 3504 +<9807> <9807> 9052 +<9808> <9808> 3506 +<980a> <980a> 3950 +<980c> <980c> 3952 +<980d> <980e> 9730 +<980f> <980f> 9729 +<9810> <9811> 3947 +<9812> <9812> 3951 +<9813> <9813> 3949 +<9814> <9814> 18770 +<9815> <9815> 17212 +<9816> <9816> 10338 +<9817> <9818> 4334 +<981b> <981b> 10952 +<981c> <981c> 4716 +<981d> <981d> 10947 +<981e> <981e> 10946 +<981f> <981f> 15362 +<9820> <9820> 10951 +<9821> <9821> 4714 +<9823> <9823> 15927 +<9824> <9824> 5018 +<9826> <9826> 10948 +<9827> <9827> 10953 +<9828> <9828> 10950 +<9829> <9829> 10949 +<982b> <982b> 4715 +<982d> <982d> 5016 +<982e> <982e> 16242 +<982f> <982f> 11517 +<9830> <9830> 5012 +<9832> <9832> 11518 +<9833> <9833> 14565 +<9834> <9834> 14564 +<9835> <9835> 11516 +<9837> <9837> 5015 +<9838> <9838> 5013 +<9839> <9839> 5017 +<983b> <983b> 5014 +<9841> <9841> 11966 +<9843> <9843> 11971 +<9844> <9844> 11967 +<9845> <9845> 11970 +<9846> <9846> 5302 +<9847> <9847> 15766 +<9848> <9848> 11762 +<9849> <9849> 11969 +<984a> <984a> 11968 +<984b> <984b> 14566 +<984c> <984c> 5466 +<984d> <984d> 5464 +<984e> <984e> 5467 +<984f> <984f> 5465 +<9850> <9852> 12343 +<9853> <9853> 5468 +<9857> <9857> 12660 +<9858> <9858> 5620 +<9859> <9859> 12658 +<985b> <985b> 5621 +<985c> <985c> 12657 +<985d> <985d> 12659 +<985e> <985e> 5619 +<985f> <985f> 12920 +<9860> <9860> 12917 +<9862> <9863> 12918 +<9864> <9864> 13109 +<9865> <9865> 5798 +<9866> <9866> 14567 +<9867> <9867> 5797 +<9869> <9869> 13268 +<986a> <986a> 13267 +<986b> <986b> 5862 +<986c> <986c> 16437 +<986f> <986f> 5905 +<9870> <9870> 5942 +<9871> <9871> 5965 +<9872> <9872> 13554 +<9873> <9874> 13607 +<9875> <9875> 17677 +<98a8> <98a8> 2092 +<98a9> <98a9> 9053 +<98ac> <98ac> 9732 +<98ad> <98ae> 10339 +<98af> <98af> 4336 +<98b1> <98b1> 4337 +<98b2> <98b2> 10954 +<98b3> <98b3> 4717 +<98b4> <98b4> 16243 +<98b6> <98b6> 5303 +<98b7> <98b7> 14575 +<98b8> <98b8> 12346 +<98b9> <98b9> 18360 +<98ba> <98ba> 5469 +<98bb> <98bb> 12663 +<98bc> <98bc> 5622 +<98bd> <98bd> 12662 +<98be> <98be> 12664 +<98bf> <98bf> 12661 +<98c0> <98c0> 13112 +endcidrange + +100 begincidrange +<98c1> <98c2> 12921 +<98c3> <98c3> 15224 +<98c4> <98c4> 5719 +<98c6> <98c6> 13111 +<98c7> <98c7> 14577 +<98c8> <98c8> 14576 +<98c9> <98c9> 13110 +<98ca> <98ca> 14574 +<98cb> <98cb> 13269 +<98cc> <98cc> 13609 +<98ce> <98ce> 17678 +<98db> <98db> 2093 +<98dc> <98dc> 15371 +<98de> <98de> 17679 +<98df> <98df> 2094 +<98e0> <98e0> 18322 +<98e1> <98e1> 14582 +<98e2> <98e2> 2548 +<98e3> <98e3> 7730 +<98e5> <98e5> 8364 +<98e6> <98e6> 14583 +<98e7> <98e7> 3507 +<98e9> <98e9> 3510 +<98ea> <98ea> 3508 +<98eb> <98eb> 9054 +<98ec> <98ec> 14584 +<98ed> <98ed> 3512 +<98ef> <98ef> 3509 +<98f1> <98f1> 18362 +<98f2> <98f2> 3511 +<98f4> <98f4> 3954 +<98f5> <98f5> 17253 +<98f6> <98f6> 9733 +<98f9> <98f9> 9734 +<98fa> <98fa> 10956 +<98fc> <98fc> 3953 +<98fd> <98fe> 3955 +<9900> <9900> 10342 +<9902> <9902> 10341 +<9903> <9903> 4338 +<9905> <9905> 4339 +<9907> <9907> 10343 +<9908> <9908> 10955 +<9909> <9909> 4341 +<990a> <990a> 4718 +<990c> <990c> 4340 +<990e> <990e> 17389 +<9910> <9910> 5019 +<9911> <9911> 10957 +<9912> <9912> 4720 +<9913> <9913> 4719 +<9914> <9914> 10958 +<9915> <9915> 10961 +<9916> <9917> 10959 +<9918> <9918> 4721 +<9919> <9919> 18364 +<991a> <991a> 5024 +<991b> <991b> 5022 +<991c> <991c> 17390 +<991e> <991e> 5021 +<991f> <991f> 11520 +<9921> <9921> 5023 +<9924> <9924> 11519 +<9925> <9925> 11972 +<9927> <9927> 11521 +<9928> <9928> 5020 +<9929> <9929> 11522 +<992a> <992a> 11975 +<992b> <992c> 11973 +<992d> <992d> 11979 +<992e> <992e> 5473 +<992f> <992f> 11978 +<9930> <9930> 11981 +<9931> <9931> 11980 +<9932> <9932> 11977 +<9933> <9933> 11976 +<9935> <9935> 5304 +<9937> <9937> 18365 +<9938> <9938> 15357 +<9939> <9939> 14586 +<993a> <993a> 12349 +<993b> <993b> 15377 +<993c> <993c> 12348 +<993d> <993d> 5472 +<993e> <993f> 5470 +<9940> <9940> 16180 +<9941> <9941> 12347 +<9942> <9942> 17407 +<9943> <9943> 12667 +<9945> <9945> 5623 +<9947> <9947> 12666 +<9948> <9948> 12665 +<9949> <9949> 5624 +<994a> <994a> 16313 +<994b> <994b> 12927 +<994c> <994c> 12926 +<994d> <994d> 15378 +<994e> <994e> 12924 +<9950> <9950> 12923 +<9951> <9951> 5721 +endcidrange + +100 begincidrange +<9952> <9952> 5720 +<9953> <9953> 12928 +<9954> <9954> 13270 +<9955> <9955> 5863 +<9956> <9956> 13114 +<9957> <9957> 5799 +<9958> <9958> 13113 +<9959> <9959> 12925 +<995b> <995b> 13271 +<995c> <995c> 5906 +<995d> <995d> 18366 +<995e> <995e> 5966 +<995f> <995f> 13555 +<9961> <9961> 13610 +<9962> <9962> 17391 +<9963> <9963> 17680 +<9996> <9996> 2095 +<9997> <9997> 8365 +<9998> <9998> 11982 +<9999> <9999> 2096 +<999b> <999b> 15381 +<999c> <999c> 10345 +<999d> <999d> 10344 +<999e> <999e> 11523 +<99a1> <99a1> 11984 +<99a3> <99a3> 11983 +<99a4> <99a4> 16835 +<99a5> <99a5> 5474 +<99a6> <99a7> 12668 +<99a8> <99a8> 5722 +<99aa> <99aa> 15383 +<99ab> <99ab> 13611 +<99ac> <99ac> 2549 +<99ad> <99ad> 3514 +<99ae> <99ae> 3513 +<99af> <99af> 9735 +<99b0> <99b0> 9737 +<99b1> <99b1> 3958 +<99b2> <99b2> 9736 +<99b3> <99b3> 3957 +<99b4> <99b4> 3959 +<99b5> <99b5> 9738 +<99b8> <99b8> 14667 +<99b9> <99b9> 10347 +<99ba> <99ba> 10349 +<99bb> <99bb> 10348 +<99bc> <99bc> 15394 +<99bd> <99bd> 10351 +<99c1> <99c1> 4342 +<99c2> <99c2> 10350 +<99c3> <99c3> 10346 +<99c4> <99c4> 15735 +<99c5> <99c5> 18369 +<99c7> <99c7> 10352 +<99c9> <99c9> 10968 +<99cb> <99cb> 10971 +<99cc> <99cc> 10973 +<99cd> <99cd> 10963 +<99ce> <99ce> 10967 +<99cf> <99cf> 10964 +<99d0> <99d0> 4723 +<99d1> <99d1> 4726 +<99d2> <99d2> 4728 +<99d3> <99d4> 10965 +<99d5> <99d5> 4727 +<99d6> <99d6> 10969 +<99d7> <99d7> 10972 +<99d8> <99d8> 10970 +<99d9> <99d9> 4729 +<99da> <99da> 16194 +<99db> <99db> 4725 +<99dc> <99dc> 10962 +<99dd> <99dd> 4722 +<99df> <99df> 4724 +<99e1> <99e1> 14213 +<99e2> <99e2> 5026 +<99e3> <99e3> 11529 +<99e4> <99e4> 11527 +<99e5> <99e5> 11526 +<99e6> <99e6> 15205 +<99e7> <99e7> 11532 +<99e9> <99e9> 11531 +<99ea> <99ea> 11530 +<99ec> <99ec> 11525 +<99ed> <99ed> 5025 +<99ee> <99ee> 11524 +<99f0> <99f0> 11528 +<99f1> <99f1> 5027 +<99f4> <99f4> 11987 +<99f5> <99f5> 14591 +<99f6> <99f6> 11991 +<99f7> <99f7> 11988 +<99f8> <99f8> 11990 +<99f9> <99f9> 11989 +<99fa> <99fa> 11986 +<99fb> <99fb> 11992 +<99fc> <99fc> 11995 +<99fd> <99fe> 11993 +<99ff> <99ff> 5306 +<9a01> <9a01> 5305 +endcidrange + +100 begincidrange +<9a02> <9a02> 11985 +<9a03> <9a03> 11996 +<9a04> <9a04> 12354 +<9a05> <9a05> 12357 +<9a06> <9a06> 12359 +<9a07> <9a07> 12358 +<9a09> <9a09> 12352 +<9a0a> <9a0a> 12356 +<9a0b> <9a0b> 12351 +<9a0c> <9a0c> 14592 +<9a0d> <9a0d> 12353 +<9a0e> <9a0e> 5475 +<9a0f> <9a0f> 12350 +<9a10> <9a10> 14594 +<9a11> <9a11> 12355 +<9a14> <9a14> 12682 +<9a15> <9a15> 12671 +<9a16> <9a16> 5625 +<9a19> <9a19> 5626 +<9a1a> <9a1a> 12670 +<9a1b> <9a1b> 12675 +<9a1c> <9a1c> 12681 +<9a1d> <9a1d> 12673 +<9a1e> <9a1e> 12680 +<9a1f> <9a1f> 15212 +<9a20> <9a20> 12677 +<9a21> <9a21> 15388 +<9a22> <9a22> 12676 +<9a23> <9a23> 12679 +<9a24> <9a24> 12674 +<9a25> <9a25> 12672 +<9a26> <9a26> 15858 +<9a27> <9a27> 12678 +<9a29> <9a29> 12935 +<9a2a> <9a2a> 12933 +<9a2b> <9a2b> 5723 +<9a2c> <9a2c> 12932 +<9a2d> <9a2d> 12938 +<9a2e> <9a2e> 12936 +<9a2f> <9a2f> 15390 +<9a30> <9a30> 5724 +<9a31> <9a31> 12931 +<9a32> <9a32> 12929 +<9a34> <9a34> 12930 +<9a35> <9a35> 5726 +<9a36> <9a36> 12934 +<9a37> <9a37> 5725 +<9a38> <9a38> 12937 +<9a39> <9a39> 13115 +<9a3a> <9a3a> 13121 +<9a3b> <9a3b> 14593 +<9a3c> <9a3c> 18371 +<9a3d> <9a3d> 13116 +<9a3e> <9a3e> 5803 +<9a3f> <9a3f> 13122 +<9a40> <9a40> 5802 +<9a41> <9a41> 13120 +<9a42> <9a42> 13119 +<9a43> <9a43> 5801 +<9a44> <9a44> 13118 +<9a45> <9a45> 5800 +<9a46> <9a46> 13117 +<9a48> <9a48> 13277 +<9a49> <9a49> 13279 +<9a4a> <9a4a> 13278 +<9a4c> <9a4c> 13275 +<9a4d> <9a4d> 5865 +<9a4e> <9a4e> 13272 +<9a4f> <9a4f> 13276 +<9a50> <9a50> 13281 +<9a52> <9a52> 13280 +<9a53> <9a54> 13273 +<9a55> <9a55> 5864 +<9a56> <9a56> 13391 +<9a57> <9a57> 5909 +<9a58> <9a58> 14595 +<9a59> <9a59> 13392 +<9a5a> <9a5b> 5907 +<9a5c> <9a5c> 15384 +<9a5e> <9a5e> 13486 +<9a5f> <9a5f> 5943 +<9a60> <9a60> 13584 +<9a62> <9a62> 5975 +<9a63> <9a63> 15207 +<9a64> <9a64> 13612 +<9a65> <9a65> 5976 +<9a66> <9a67> 13613 +<9a68> <9a68> 13628 +<9a69> <9a69> 13627 +<9a6a> <9a6a> 5991 +<9a6b> <9a6b> 13636 +<9a6c> <9a6c> 17797 +<9a8f> <9a8f> 17798 +<9aa8> <9aa8> 2550 +<9aab> <9aab> 9740 +<9aad> <9aad> 9739 +<9aaf> <9ab0> 4343 +<9ab1> <9ab1> 10353 +<9ab2> <9ab2> 17202 +<9ab3> <9ab3> 10974 +endcidrange + +100 begincidrange +<9ab4> <9ab4> 11535 +<9ab6> <9ab6> 17392 +<9ab7> <9ab7> 4730 +<9ab8> <9ab8> 5028 +<9ab9> <9ab9> 11533 +<9aba> <9aba> 16244 +<9abb> <9abb> 11536 +<9abc> <9abc> 5029 +<9abd> <9abd> 15767 +<9abe> <9abe> 11997 +<9abf> <9abf> 11534 +<9ac0> <9ac0> 12360 +<9ac1> <9ac1> 5476 +<9ac2> <9ac2> 12683 +<9ac6> <9ac6> 12941 +<9ac7> <9ac7> 12939 +<9aca> <9aca> 12940 +<9acd> <9acd> 13123 +<9acf> <9acf> 5804 +<9ad0> <9ad0> 13282 +<9ad1> <9ad1> 5912 +<9ad2> <9ad2> 5866 +<9ad3> <9ad4> 5910 +<9ad5> <9ad5> 13487 +<9ad6> <9ad6> 5967 +<9ad7> <9ad7> 16298 +<9ad8> <9ad8> 2551 +<9adc> <9adc> 12361 +<9adf> <9adf> 7731 +<9ae0> <9ae0> 14600 +<9ae1> <9ae1> 3960 +<9ae2> <9ae2> 14601 +<9ae3> <9ae3> 10354 +<9ae6> <9ae6> 4345 +<9ae7> <9ae7> 10355 +<9aeb> <9aeb> 10976 +<9aec> <9aec> 10975 +<9aed> <9aed> 5031 +<9aee> <9aef> 4731 +<9af1> <9af1> 10979 +<9af2> <9af2> 10978 +<9af3> <9af3> 10977 +<9af4> <9af4> 14603 +<9af6> <9af6> 11537 +<9af7> <9af7> 11540 +<9af9> <9af9> 11539 +<9afa> <9afa> 11538 +<9afb> <9afb> 5030 +<9afc> <9afc> 12001 +<9afd> <9afd> 11999 +<9afe> <9afe> 11998 +<9aff> <9aff> 16151 +<9b01> <9b01> 12000 +<9b02> <9b02> 16146 +<9b03> <9b03> 5477 +<9b04> <9b05> 12363 +<9b06> <9b06> 5478 +<9b08> <9b08> 12362 +<9b09> <9b09> 16160 +<9b0a> <9b0a> 12685 +<9b0b> <9b0b> 12684 +<9b0c> <9b0c> 12687 +<9b0d> <9b0d> 5627 +<9b0e> <9b0e> 12686 +<9b0f> <9b0f> 18372 +<9b10> <9b10> 12942 +<9b11> <9b11> 12944 +<9b12> <9b12> 12943 +<9b14> <9b14> 14605 +<9b15> <9b15> 13124 +<9b16> <9b16> 13127 +<9b17> <9b18> 13125 +<9b19> <9b19> 13283 +<9b1a> <9b1a> 5867 +<9b1e> <9b20> 13393 +<9b22> <9b22> 5944 +<9b23> <9b23> 5968 +<9b24> <9b24> 13615 +<9b25> <9b25> 2552 +<9b27> <9b27> 4733 +<9b28> <9b28> 5032 +<9b29> <9b29> 12365 +<9b2a> <9b2a> 16153 +<9b2b> <9b2b> 13284 +<9b2d> <9b2d> 14606 +<9b2e> <9b2e> 13585 +<9b2f> <9b2f> 7732 +<9b31> <9b31> 5992 +<9b32> <9b32> 2553 +<9b33> <9b33> 11541 +<9b34> <9b34> 14609 +<9b35> <9b35> 12366 +<9b37> <9b37> 12688 +<9b39> <9b39> 16128 +<9b3a> <9b3a> 13128 +<9b3b> <9b3b> 13285 +<9b3c> <9b3c> 2554 +<9b3e> <9b3f> 10356 +<9b40> <9b40> 14613 +<9b41> <9b42> 4346 +endcidrange + +100 begincidrange +<9b43> <9b43> 10981 +<9b44> <9b44> 4735 +<9b45> <9b45> 4734 +<9b46> <9b46> 10980 +<9b48> <9b48> 12002 +<9b4a> <9b4a> 12367 +<9b4b> <9b4b> 12369 +<9b4c> <9b4c> 12368 +<9b4d> <9b4d> 5481 +<9b4e> <9b4e> 5480 +<9b4f> <9b4f> 5479 +<9b50> <9b50> 14612 +<9b51> <9b51> 5806 +<9b52> <9b52> 13129 +<9b54> <9b54> 5805 +<9b55> <9b55> 13287 +<9b56> <9b56> 13286 +<9b58> <9b58> 5945 +<9b59> <9b59> 13488 +<9b5a> <9b5a> 3041 +<9b5b> <9b5b> 9741 +<9b5f> <9b5f> 10360 +<9b60> <9b61> 10358 +<9b64> <9b64> 10990 +<9b66> <9b66> 10985 +<9b67> <9b67> 10982 +<9b68> <9b68> 10989 +<9b69> <9b69> 18373 +<9b6c> <9b6c> 10991 +<9b6f> <9b6f> 4737 +<9b70> <9b70> 10988 +<9b71> <9b71> 10984 +<9b74> <9b74> 10983 +<9b75> <9b75> 10987 +<9b76> <9b76> 10986 +<9b77> <9b77> 4736 +<9b7a> <9b7a> 11552 +<9b7b> <9b7b> 11547 +<9b7c> <9b7c> 11545 +<9b7d> <9b7d> 11554 +<9b7e> <9b7e> 11546 +<9b7f> <9b7f> 15419 +<9b80> <9b80> 11542 +<9b81> <9b81> 17393 +<9b82> <9b82> 11548 +<9b83> <9b83> 16921 +<9b85> <9b85> 11543 +<9b86> <9b86> 12011 +<9b87> <9b87> 11544 +<9b88> <9b88> 11555 +<9b8b> <9b8b> 16110 +<9b8d> <9b8d> 17955 +<9b8e> <9b8e> 14617 +<9b8f> <9b8f> 16301 +<9b90> <9b90> 11551 +<9b91> <9b91> 5033 +<9b92> <9b92> 11550 +<9b93> <9b93> 11549 +<9b95> <9b95> 11553 +<9b97> <9b97> 16241 +<9b9a> <9b9a> 12003 +<9b9b> <9b9b> 12006 +<9b9d> <9b9d> 16214 +<9b9e> <9b9e> 12005 +<9b9f> <9b9f> 15422 +<9ba0> <9ba0> 12013 +<9ba1> <9ba1> 12008 +<9ba2> <9ba2> 12012 +<9ba4> <9ba4> 12010 +<9ba5> <9ba5> 12009 +<9ba6> <9ba6> 12007 +<9ba8> <9ba8> 12004 +<9baa> <9baa> 5309 +<9bab> <9bab> 5308 +<9bad> <9bad> 5310 +<9bae> <9bae> 5307 +<9baf> <9baf> 12014 +<9bb0> <9bb0> 16308 +<9bb5> <9bb5> 12375 +<9bb6> <9bb6> 12378 +<9bb8> <9bb8> 12376 +<9bb9> <9bb9> 12380 +<9bbd> <9bbd> 12381 +<9bbf> <9bbf> 12373 +<9bc0> <9bc0> 5486 +<9bc1> <9bc1> 12374 +<9bc3> <9bc3> 12372 +<9bc4> <9bc4> 12379 +<9bc6> <9bc6> 12371 +<9bc7> <9bc7> 12370 +<9bc8> <9bc8> 5485 +<9bc9> <9bc9> 5483 +<9bca> <9bca> 5482 +<9bcf> <9bcf> 15420 +<9bd3> <9bd3> 12377 +<9bd4> <9bd4> 12697 +<9bd5> <9bd5> 12703 +<9bd6> <9bd6> 5630 +<9bd7> <9bd7> 12698 +<9bd9> <9bd9> 12701 +endcidrange + +100 begincidrange +<9bda> <9bda> 12705 +<9bdb> <9bdb> 5631 +<9bdc> <9bdc> 12700 +<9bdd> <9bdd> 18374 +<9bde> <9bde> 12692 +<9be0> <9be0> 12691 +<9be1> <9be1> 12704 +<9be2> <9be2> 12695 +<9be4> <9be4> 12693 +<9be5> <9be5> 12702 +<9be6> <9be6> 12694 +<9be7> <9be7> 5629 +<9be8> <9be8> 5628 +<9be9> <9be9> 15297 +<9bea> <9beb> 12689 +<9bec> <9bec> 12699 +<9bed> <9bed> 16087 +<9bf0> <9bf0> 12696 +<9bf1> <9bf1> 18375 +<9bf4> <9bf4> 18376 +<9bf7> <9bf7> 12947 +<9bf8> <9bf8> 12950 +<9bfd> <9bfd> 5484 +<9bff> <9bff> 14619 +<9c02> <9c02> 14618 +<9c05> <9c05> 12948 +<9c06> <9c06> 12954 +<9c07> <9c07> 12952 +<9c08> <9c08> 12946 +<9c09> <9c09> 12957 +<9c0a> <9c0a> 16186 +<9c0b> <9c0b> 12945 +<9c0c> <9c0c> 14620 +<9c0d> <9c0d> 5728 +<9c0e> <9c0e> 12953 +<9c10> <9c10> 15418 +<9c12> <9c12> 12949 +<9c13> <9c13> 5727 +<9c14> <9c14> 12956 +<9c15> <9c15> 16158 +<9c17> <9c17> 12955 +<9c1b> <9c1b> 18715 +<9c1c> <9c1c> 13132 +<9c1d> <9c1d> 13131 +<9c1f> <9c1f> 17954 +<9c20> <9c20> 18378 +<9c21> <9c21> 13138 +<9c23> <9c23> 13134 +<9c24> <9c24> 13137 +<9c25> <9c25> 5808 +<9c26> <9c26> 17894 +<9c28> <9c29> 13135 +<9c2b> <9c2b> 13130 +<9c2c> <9c2c> 13133 +<9c2d> <9c2d> 5807 +<9c2e> <9c2e> 16162 +<9c2f> <9c2f> 15751 +<9c31> <9c31> 5869 +<9c32> <9c32> 13298 +<9c33> <9c33> 13293 +<9c34> <9c34> 13297 +<9c35> <9c35> 15417 +<9c36> <9c36> 13300 +<9c37> <9c37> 13296 +<9c39> <9c39> 13292 +<9c3a> <9c3a> 15742 +<9c3b> <9c3b> 5871 +<9c3c> <9c3c> 13295 +<9c3d> <9c3d> 13299 +<9c3e> <9c3e> 5870 +<9c3f> <9c3f> 13290 +<9c40> <9c40> 12951 +<9c41> <9c41> 13294 +<9c44> <9c44> 13291 +<9c45> <9c45> 15985 +<9c46> <9c46> 13288 +<9c48> <9c48> 13289 +<9c49> <9c49> 5868 +<9c4a> <9c4a> 13399 +<9c4b> <9c4b> 13401 +<9c4c> <9c4c> 13404 +<9c4d> <9c4d> 13400 +<9c4e> <9c4e> 13405 +<9c4f> <9c4f> 15414 +<9c50> <9c50> 13398 +<9c52> <9c52> 13396 +<9c53> <9c53> 15415 +<9c54> <9c54> 5913 +<9c55> <9c55> 13402 +<9c56> <9c56> 5915 +<9c57> <9c57> 5914 +<9c58> <9c58> 13397 +<9c59> <9c59> 13403 +<9c5d> <9c5d> 16063 +<9c5e> <9c5e> 13493 +<9c5f> <9c5f> 5946 +<9c60> <9c60> 13494 +<9c62> <9c62> 13492 +<9c63> <9c63> 13489 +<9c66> <9c66> 13491 +endcidrange + +100 begincidrange +<9c67> <9c67> 13490 +<9c68> <9c68> 13556 +<9c6d> <9c6d> 13558 +<9c6e> <9c6e> 13557 +<9c71> <9c71> 13588 +<9c72> <9c72> 16033 +<9c73> <9c73> 13587 +<9c74> <9c74> 13586 +<9c75> <9c75> 13589 +<9c77> <9c78> 5984 +<9c79> <9c79> 13633 +<9c7a> <9c7a> 13637 +<9c7b> <9c7b> 15416 +<9c7c> <9c7c> 17682 +<9ce5> <9ce5> 3042 +<9ce6> <9ce6> 9055 +<9ce7> <9ce7> 9744 +<9ce9> <9ce9> 3961 +<9cea> <9cea> 9742 +<9ced> <9ced> 9743 +<9cf1> <9cf2> 10361 +<9cf3> <9cf3> 4350 +<9cf4> <9cf4> 4348 +<9cf5> <9cf5> 10363 +<9cf6> <9cf6> 4349 +<9cf7> <9cf7> 10996 +<9cf9> <9cf9> 10999 +<9cfa> <9cfa> 10993 +<9cfb> <9cfb> 11000 +<9cfc> <9cfc> 10992 +<9cfd> <9cfd> 10994 +<9cff> <9cff> 10995 +<9d00> <9d00> 10998 +<9d02> <9d02> 16187 +<9d03> <9d03> 4740 +<9d04> <9d04> 11003 +<9d05> <9d05> 11002 +<9d06> <9d06> 4738 +<9d07> <9d07> 10997 +<9d08> <9d08> 11001 +<9d09> <9d09> 4739 +<9d0c> <9d0c> 15430 +<9d10> <9d10> 11565 +<9d12> <9d12> 5038 +<9d14> <9d14> 11560 +<9d15> <9d15> 5034 +<9d16> <9d16> 15484 +<9d17> <9d17> 11557 +<9d18> <9d18> 11563 +<9d19> <9d19> 11566 +<9d1b> <9d1b> 5039 +<9d1d> <9d1d> 11562 +<9d1e> <9d1e> 11559 +<9d1f> <9d1f> 11567 +<9d20> <9d20> 11558 +<9d21> <9d21> 15425 +<9d22> <9d22> 11564 +<9d23> <9d23> 5035 +<9d25> <9d25> 11556 +<9d26> <9d26> 5036 +<9d28> <9d28> 5037 +<9d29> <9d29> 11561 +<9d2d> <9d2d> 12032 +<9d2e> <9d2f> 12019 +<9d30> <9d30> 12023 +<9d31> <9d31> 12021 +<9d33> <9d33> 12015 +<9d34> <9d34> 16458 +<9d36> <9d36> 12018 +<9d37> <9d37> 12028 +<9d38> <9d38> 12022 +<9d39> <9d39> 14638 +<9d3b> <9d3b> 5311 +<9d3d> <9d3d> 12030 +<9d3e> <9d3e> 12027 +<9d3f> <9d3f> 5312 +<9d40> <9d40> 12029 +<9d41> <9d41> 12016 +<9d42> <9d43> 12025 +<9d44> <9d44> 16299 +<9d45> <9d45> 12024 +<9d49> <9d49> 18381 +<9d4a> <9d4a> 12385 +<9d4b> <9d4b> 12387 +<9d4c> <9d4c> 12390 +<9d4e> <9d4e> 17721 +<9d4f> <9d4f> 12384 +<9d50> <9d50> 16074 +<9d51> <9d51> 5487 +<9d52> <9d52> 12392 +<9d53> <9d53> 12383 +<9d54> <9d54> 12393 +<9d56> <9d56> 12389 +<9d57> <9d57> 12391 +<9d58> <9d58> 12395 +<9d59> <9d59> 12388 +<9d5a> <9d5a> 12396 +<9d5b> <9d5b> 12386 +<9d5c> <9d5c> 12382 +<9d5d> <9d5d> 5488 +endcidrange + +100 begincidrange +<9d5e> <9d5e> 15982 +<9d5f> <9d5f> 12394 +<9d60> <9d60> 5489 +<9d61> <9d61> 5633 +<9d67> <9d67> 12017 +<9d68> <9d68> 12731 +<9d69> <9d69> 12722 +<9d6a> <9d6a> 5635 +<9d6b> <9d6b> 12718 +<9d6c> <9d6c> 5636 +<9d6d> <9d6d> 15276 +<9d6e> <9d6e> 17211 +<9d6f> <9d6f> 12727 +<9d70> <9d70> 12721 +<9d71> <9d71> 12711 +<9d72> <9d72> 5634 +<9d73> <9d73> 12724 +<9d74> <9d75> 12719 +<9d77> <9d77> 12706 +<9d78> <9d78> 12713 +<9d79> <9d79> 12728 +<9d7b> <9d7b> 12725 +<9d7c> <9d7c> 16126 +<9d7d> <9d7d> 12717 +<9d7e> <9d7e> 14629 +<9d7f> <9d7f> 12729 +<9d80> <9d80> 12712 +<9d81> <9d81> 12707 +<9d82> <9d82> 12726 +<9d83> <9d83> 14630 +<9d84> <9d84> 12709 +<9d85> <9d85> 12723 +<9d86> <9d86> 12714 +<9d87> <9d87> 12730 +<9d88> <9d88> 12710 +<9d89> <9d89> 5632 +<9d8a> <9d8a> 12708 +<9d8b> <9d8c> 12715 +<9d90> <9d90> 12964 +<9d92> <9d92> 12962 +<9d93> <9d93> 17395 +<9d94> <9d94> 12967 +<9d96> <9d96> 12979 +<9d97> <9d97> 12970 +<9d98> <9d98> 12963 +<9d99> <9d99> 12959 +<9d9a> <9d9a> 12972 +<9d9b> <9d9b> 12965 +<9d9c> <9d9c> 12968 +<9d9d> <9d9d> 12961 +<9d9e> <9d9e> 12975 +<9d9f> <9d9f> 12958 +<9da0> <9da0> 12966 +<9da1> <9da1> 12971 +<9da2> <9da2> 12973 +<9da3> <9da3> 12976 +<9da4> <9da4> 12960 +<9da5> <9da5> 15435 +<9da6> <9da7> 12980 +<9da8> <9da8> 12974 +<9da9> <9da9> 12978 +<9daa> <9daa> 12969 +<9dab> <9dab> 16176 +<9dac> <9dac> 13154 +<9dad> <9dad> 13157 +<9daf> <9daf> 5809 +<9db1> <9db1> 13156 +<9db2> <9db2> 13161 +<9db3> <9db3> 13159 +<9db4> <9db4> 5810 +<9db5> <9db5> 13150 +<9db6> <9db6> 13140 +<9db7> <9db7> 13139 +<9db8> <9db8> 5812 +<9db9> <9dba> 13152 +<9dbb> <9dbb> 13149 +<9dbc> <9dbc> 13141 +<9dbd> <9dbd> 18384 +<9dbe> <9dbe> 13146 +<9dbf> <9dbf> 12977 +<9dc0> <9dc0> 17394 +<9dc1> <9dc1> 13142 +<9dc2> <9dc2> 5811 +<9dc3> <9dc3> 13148 +<9dc4> <9dc4> 14633 +<9dc5> <9dc5> 13147 +<9dc7> <9dc7> 13143 +<9dc8> <9dc8> 13155 +<9dc9> <9dc9> 17785 +<9dca> <9dca> 13144 +<9dcb> <9dcb> 13305 +<9dcc> <9dcc> 13158 +<9dcd> <9dcd> 13160 +<9dce> <9dce> 13151 +<9dcf> <9dcf> 13145 +<9dd0> <9dd0> 13306 +<9dd1> <9dd1> 13308 +<9dd2> <9dd2> 13302 +<9dd3> <9dd3> 5872 +<9dd4> <9dd4> 14622 +endcidrange + +100 begincidrange +<9dd5> <9dd5> 13315 +<9dd6> <9dd6> 13313 +<9dd7> <9dd7> 5873 +<9dd8> <9dd8> 13312 +<9dd9> <9dd9> 13311 +<9dda> <9dda> 13304 +<9ddb> <9ddb> 13301 +<9ddc> <9ddc> 13307 +<9ddd> <9ddd> 13316 +<9dde> <9dde> 13303 +<9ddf> <9ddf> 13309 +<9de1> <9de1> 13414 +<9de2> <9de2> 13419 +<9de3> <9de3> 13409 +<9de4> <9de4> 13412 +<9de5> <9de5> 5916 +<9de6> <9de6> 13416 +<9de8> <9de8> 13423 +<9de9> <9de9> 13310 +<9deb> <9deb> 13410 +<9dec> <9dec> 13420 +<9ded> <9ded> 13424 +<9dee> <9dee> 13415 +<9def> <9def> 13408 +<9df0> <9df0> 13418 +<9df2> <9df2> 13417 +<9df3> <9df3> 13422 +<9df4> <9df4> 13421 +<9df5> <9df5> 13314 +<9df6> <9df6> 13413 +<9df7> <9df7> 13407 +<9df8> <9df8> 13411 +<9df9> <9dfa> 5947 +<9dfb> <9dfb> 13406 +<9dfc> <9dfc> 18385 +<9dfd> <9dfd> 13505 +<9dfe> <9dfe> 13496 +<9dff> <9dff> 13504 +<9e00> <9e01> 13501 +<9e02> <9e02> 13495 +<9e03> <9e03> 13498 +<9e04> <9e04> 13506 +<9e05> <9e05> 13500 +<9e06> <9e06> 13499 +<9e07> <9e07> 13497 +<9e09> <9e09> 13503 +<9e0a> <9e0a> 17790 +<9e0b> <9e0b> 13559 +<9e0c> <9e0c> 17786 +<9e0d> <9e0d> 13560 +<9e0e> <9e0e> 14632 +<9e0f> <9e0f> 13562 +<9e10> <9e10> 13561 +<9e11> <9e11> 13564 +<9e12> <9e12> 13563 +<9e13> <9e13> 13591 +<9e14> <9e14> 13590 +<9e15> <9e15> 13616 +<9e17> <9e17> 13617 +<9e18> <9e18> 15428 +<9e19> <9e19> 13629 +<9e1a> <9e1a> 5989 +<9e1b> <9e1b> 5993 +<9e1c> <9e1c> 16260 +<9e1d> <9e1d> 13638 +<9e1e> <9e1e> 5994 +<9e1f> <9e1f> 17683 +<9e75> <9e75> 3043 +<9e79> <9e79> 5729 +<9e7a> <9e7a> 13162 +<9e7b> <9e7b> 17400 +<9e7c> <9e7d> 5949 +<9e7f> <9e7f> 3044 +<9e80> <9e80> 9745 +<9e81> <9e81> 16143 +<9e82> <9e82> 3962 +<9e83> <9e83> 11004 +<9e84> <9e84> 16246 +<9e85> <9e85> 16114 +<9e86> <9e87> 11569 +<9e88> <9e88> 11568 +<9e89> <9e89> 12034 +<9e8a> <9e8a> 12033 +<9e8b> <9e8b> 5313 +<9e8c> <9e8c> 12398 +<9e8d> <9e8d> 12035 +<9e8e> <9e8e> 12397 +<9e90> <9e90> 14641 +<9e91> <9e91> 12733 +<9e92> <9e92> 5637 +<9e93> <9e93> 5639 +<9e94> <9e94> 12732 +<9e95> <9e95> 14642 +<9e96> <9e96> 16316 +<9e97> <9e97> 5638 +<9e98> <9e98> 16167 +<9e99> <9e99> 12982 +<9e9a> <9e9a> 12984 +<9e9b> <9e9b> 12983 +<9e9c> <9e9c> 13163 +endcidrange + +100 begincidrange +<9e9d> <9e9d> 5813 +<9e9e> <9e9e> 14643 +<9e9f> <9e9f> 5917 +<9ea0> <9ea0> 13507 +<9ea1> <9ea1> 13565 +<9ea2> <9ea2> 14644 +<9ea4> <9ea4> 13642 +<9ea5> <9ea5> 3045 +<9ea6> <9ea6> 18756 +<9ea7> <9ea7> 10364 +<9ea8> <9ea8> 16245 +<9ea9> <9ea9> 4741 +<9eaa> <9eaa> 14646 +<9eab> <9eab> 16018 +<9eac> <9eac> 17396 +<9ead> <9ead> 11572 +<9eae> <9eae> 11571 +<9eaf> <9eaf> 14647 +<9eb0> <9eb0> 12036 +<9eb1> <9eb1> 18388 +<9eb4> <9eb4> 5640 +<9eb5> <9eb5> 5730 +<9eb6> <9eb6> 13317 +<9eb7> <9eb7> 13634 +<9ebb> <9ebb> 3046 +<9ebc> <9ebc> 4351 +<9ebd> <9ebd> 18389 +<9ebe> <9ebe> 4742 +<9ebf> <9ebf> 15736 +<9ec0> <9ec0> 12734 +<9ec1> <9ec1> 14649 +<9ec2> <9ec2> 13425 +<9ec3> <9ec3> 3515 +<9ec4> <9ec4> 17684 +<9ec6> <9ec6> 18390 +<9ec7> <9ec7> 17783 +<9ec8> <9ec8> 12037 +<9ecc> <9ecc> 5969 +<9ecd> <9ecd> 3516 +<9ece> <9ece> 4743 +<9ecf> <9ecf> 5314 +<9ed0> <9ed0> 13426 +<9ed1> <9ed1> 3517 +<9ed3> <9ed3> 11005 +<9ed4> <9ed4> 5041 +<9ed5> <9ed6> 11573 +<9ed8> <9ed8> 5040 +<9eda> <9eda> 12038 +<9edb> <9edb> 5318 +<9edc> <9edd> 5316 +<9ede> <9ede> 5315 +<9edf> <9edf> 12399 +<9ee0> <9ee0> 5490 +<9ee2> <9ee2> 18392 +<9ee4> <9ee4> 12986 +<9ee5> <9ee5> 12985 +<9ee6> <9ee6> 12988 +<9ee7> <9ee7> 12987 +<9ee8> <9ee8> 5731 +<9eeb> <9eeb> 13164 +<9eed> <9eed> 13166 +<9eee> <9eee> 13165 +<9eef> <9eef> 5814 +<9ef0> <9ef0> 13318 +<9ef1> <9ef1> 18393 +<9ef2> <9ef3> 13427 +<9ef4> <9ef4> 5918 +<9ef5> <9ef5> 13566 +<9ef6> <9ef6> 13592 +<9ef7> <9ef7> 5986 +<9ef8> <9ef8> 18394 +<9ef9> <9ef9> 9056 +<9efa> <9efa> 11575 +<9efb> <9efb> 12039 +<9efc> <9efc> 12735 +<9efd> <9efd> 9746 +<9efe> <9efe> 18382 +<9eff> <9eff> 12040 +<9f00> <9f00> 12401 +<9f01> <9f01> 12400 +<9f02> <9f02> 14656 +<9f06> <9f06> 13429 +<9f07> <9f07> 5951 +<9f08> <9f08> 14657 +<9f09> <9f09> 13567 +<9f0a> <9f0a> 13593 +<9f0e> <9f0e> 3963 +<9f0f> <9f10> 11006 +<9f12> <9f12> 11576 +<9f13> <9f13> 3964 +<9f15> <9f15> 5491 +<9f16> <9f16> 12402 +<9f17> <9f17> 14661 +<9f18> <9f18> 13168 +<9f19> <9f19> 5815 +<9f1a> <9f1a> 13169 +<9f1b> <9f1b> 13167 +<9f1c> <9f1c> 13430 +<9f1e> <9f1e> 13508 +<9f20> <9f20> 3965 +endcidrange + +100 begincidrange +<9f22> <9f22> 12043 +<9f23> <9f23> 12042 +<9f24> <9f24> 12041 +<9f25> <9f25> 12403 +<9f26> <9f26> 16272 +<9f27> <9f27> 17952 +<9f28> <9f28> 12407 +<9f29> <9f29> 12406 +<9f2a> <9f2a> 12405 +<9f2b> <9f2b> 12404 +<9f2c> <9f2c> 5492 +<9f2d> <9f2d> 12736 +<9f2e> <9f2e> 12990 +<9f2f> <9f2f> 5732 +<9f30> <9f30> 12989 +<9f31> <9f31> 13170 +<9f32> <9f32> 13321 +<9f33> <9f33> 13320 +<9f34> <9f34> 5874 +<9f35> <9f35> 13319 +<9f36> <9f36> 13433 +<9f37> <9f37> 13432 +<9f38> <9f38> 13431 +<9f39> <9f39> 14663 +<9f3b> <9f3b> 4352 +<9f3d> <9f3d> 11577 +<9f3e> <9f3e> 5319 +<9f40> <9f41> 12737 +<9f42> <9f42> 13322 +<9f43> <9f43> 13434 +<9f44> <9f44> 18395 +<9f45> <9f45> 14666 +<9f46> <9f46> 13509 +<9f47> <9f47> 13568 +<9f48> <9f48> 13618 +<9f49> <9f49> 13644 +<9f4a> <9f4a> 4353 +<9f4b> <9f4b> 5320 +<9f4c> <9f4c> 12408 +<9f4d> <9f4d> 12739 +<9f4e> <9f4e> 13171 +<9f4f> <9f4f> 13435 +<9f50> <9f50> 18755 +<9f52> <9f52> 4745 +<9f53> <9f53> 16256 +<9f54> <9f54> 12044 +<9f55> <9f55> 12409 +<9f56> <9f58> 12740 +<9f59> <9f59> 12995 +<9f5a> <9f5a> 16163 +<9f5b> <9f5b> 12991 +<9f5c> <9f5c> 5816 +<9f5d> <9f5d> 12994 +<9f5e> <9f5e> 12993 +<9f5f> <9f5f> 5733 +<9f60> <9f60> 12992 +<9f61> <9f61> 5735 +<9f62> <9f62> 14671 +<9f63> <9f63> 5734 +<9f64> <9f64> 13173 +<9f65> <9f65> 13172 +<9f66> <9f67> 5817 +<9f69> <9f69> 14672 +<9f6a> <9f6a> 5876 +<9f6b> <9f6b> 13323 +<9f6c> <9f6c> 5875 +<9f6e> <9f6f> 13438 +<9f70> <9f70> 13437 +<9f71> <9f71> 13436 +<9f72> <9f72> 5953 +<9f74> <9f76> 13510 +<9f77> <9f77> 5952 +<9f78> <9f78> 13569 +<9f79> <9f79> 13572 +<9f7a> <9f7a> 13571 +<9f7b> <9f7b> 13570 +<9f7e> <9f7e> 13643 +<9f7f> <9f7f> 18048 +<9f8d> <9f8d> 5042 +<9f8e> <9f8e> 14674 +<9f90> <9f90> 5500 +<9f91> <9f91> 12996 +<9f92> <9f92> 13174 +<9f94> <9f94> 5877 +<9f95> <9f95> 13324 +<9f98> <9f98> 13645 +<9f99> <9f99> 17799 +<9f9c> <9f9c> 5043 +<9f9f> <9f9f> 17990 +<9fa0> <9fa0> 12045 +<9fa2> <9fa2> 13325 +<9fa4> <9fa4> 13594 +<9fa5> <9fa5> 16240 + 16395 + 16397 + 16404 + 16407 + 16409 + 16413 + 16419 +endcidrange + +100 begincidrange + 16421 + 16427 + 16429 + 16432 + 16440 + 16443 + 16445 + 16454 + 16464 + 16471 + 16485 + 16487 + 16490 + 16495 + 16497 + 16503 + 16508 + 16511 + 16515 + 16520 + 16530 + 16532 + 16535 + 16542 + 16548 + 16551 + 16561 + 16564 + 16566 + 16569 + 16581 + 16583 + 16585 + 16590 + 16592 + 16594 + 16597 + 16603 + 16607 + 16615 + 16618 + 16621 + 16626 + 16630 + 16633 + 16637 + 16643 + 16645 + 16647 + 16653 + 16656 + 16658 + 16665 + 16669 + 16677 + 16682 + 16687 + 16697 + 16703 + 16706 + 16714 + 16717 + 16719 + 16721 + 16723 + 16726 + 16730 + 16735 + 18767 + 16743 + 16749 + 16757 + 16761 + 16764 + 16767 + 16771 + 16777 + 16779 + 16781 + 16783 + 16787 + 16790 + 18771 + 16792 + 16801 + 18772 + 16808 + 16812 + 16816 + 16818 + 16821 + 16824 + 16826 + 18773 + 16829 + 16834 + 16837 + 16840 + 16844 + 16852 +endcidrange + +100 begincidrange + 16855 + 16858 + 16861 + 16865 + 16869 + 16874 + 16878 + 16881 + 16886 + 16889 + 16893 + 16895 + 18776 + 16897 + 16900 + 16902 + 16905 + 16911 + 16913 + 16920 + 16922 + 16926 + 16933 + 16937 + 16942 + 16944 + 16946 + 16950 + 16954 + 16956 + 16964 + 16967 + 16969 + 16976 + 16992 + 16998 + 17001 + 17003 + 17007 + 17016 + 17019 + 17024 + 17030 + 17033 + 17038 + 17042 + 17047 + 17053 + 18779 + 17057 + 17059 + 17070 + 17075 + 17078 + 17081 + 17084 + 17090 + 17092 + 17103 + 17107 + 17113 + 17115 + 17122 + 17124 + 17126 + 18781 + 17137 + 17141 + 18783 + 18784 + 17144 + 17149 + 17151 + 17155 + 17158 + 14123 + 14125 + 14127 + 14129 + 14132 + 14136 + 14142 + 14149 + 14153 + 14158 + 14164 + 18074 + 14170 + 14173 + 14175 + 14184 + 14186 + 14192 + 14197 + 14199 + 14201 + 14212 + 14215 + 14217 + 14220 +endcidrange + +100 begincidrange + 14221 + 14223 + 14229 + 14234 + 14236 + 14241 + 14245 + 14247 + 18080 + 14249 + 14251 + 14253 + 18081 + 14257 + 14260 + 18082 + 14264 + 14270 + 14275 + 14278 + 14283 + 14293 + 14297 + 14301 + 18084 + 14303 + 18085 + 14311 + 14320 + 14322 + 18086 + 14332 + 14335 + 14337 + 14343 + 14345 + 14348 + 14350 + 14360 + 14369 + 14376 + 14378 + 14384 + 14386 + 18091 + 14388 + 14392 + 14398 + 14402 + 14406 + 14410 + 14412 + 14416 + 18093 + 14423 + 14427 + 14436 + 14440 + 14444 + 14448 + 18095 + 14451 + 14453 + 14455 + 14458 + 14461 + 14463 + 14470 + 14476 + 14477 + 14484 + 14487 + 14491 + 18100 + 14503 + 14512 + 14516 + 14520 + 14534 + 14539 + 14542 + 14546 + 14555 + 14558 + 14561 + 14569 + 14571 + 14579 + 14587 + 14589 + 14596 + 14598 + 14602 + 14607 + 18101 + 14611 + 14614 + 14616 + 18102 + 14621 +endcidrange + +100 begincidrange + 14623 + 14631 + 18104 + 14634 + 14639 + 14648 + 14655 + 14660 + 14668 + 14677 + 14680 + 14684 + 14687 + 14691 + 14695 + 14702 + 14705 + 14707 + 14710 + 14714 + 14717 + 14721 + 14723 + 14729 + 14732 + 14739 + 14747 + 14750 + 14757 + 14759 + 14763 + 14768 + 14770 + 18107 + 14774 + 14776 + 14779 + 14783 + 14787 + 14793 + 14804 + 14808 + 14812 + 14814 + 14818 + 14822 + 14827 + 14832 + 14840 + 14845 + 14847 + 14849 + 14859 + 14868 + 14876 + 14878 + 14882 + 14886 + 14893 + 14898 + 14901 + 14903 + 14906 + 14912 + 14915 + 14917 + 14920 + 14924 + 14929 + 14935 + 14940 + 14943 + 18111 + 14951 + 14954 + 14959 + 14964 + 14968 + 14971 + 14978 + 14982 + 14986 + 14990 + 14993 + 14996 + 14998 + 15001 + 15005 + 15010 + 15016 + 15023 + 15027 + 15030 + 18116 + 15036 + 15039 + 15046 + 15052 + 15055 + 15058 +endcidrange + +100 begincidrange + 15065 + 15075 + 15079 + 15084 + 15087 + 15092 + 15094 + 15099 + 15102 + 15105 + 15109 + 15112 + 15116 + 15119 + 15122 + 15129 + 15136 + 15140 + 15144 + 15153 + 15157 + 15161 + 15164 + 15170 + 15174 + 15184 + 15188 + 15190 + 15193 + 15196 + 18119 + 15200 + 15204 + 15209 + 15210 + 15213 + 15215 + 15223 + 15225 + 15228 + 15230 + 15232 + 15235 + 15237 + 15239 + 15241 + 15244 + 15253 + 15255 + 15268 + 15271 + 15275 + 15279 + 15286 + 15292 + 15296 + 15299 + 15306 + 15308 + 15310 + 15318 + 15321 + 15325 + 15327 + 15331 + 15338 + 15341 + 15345 + 15346 + 15354 + 15358 + 15360 + 15363 + 15365 + 15368 + 15372 + 15379 + 15385 + 15391 + 15393 + 15399 + 15401 + 15404 + 15411 + 15421 + 15423 + 15427 + 15431 + 15437 + 15442 + 15447 + 15451 + 15453 + 15458 + 15465 + 15470 + 15480 + 15488 + 15490 + 15493 +endcidrange + +100 begincidrange + 15499 + 15502 + 15505 + 15508 + 15514 + 15517 + 15526 + 15529 + 15534 + 15542 + 15544 + 15548 + 15550 + 15553 + 15556 + 15558 + 15561 + 15566 + 15568 + 15574 + 15577 + 15582 + 15586 + 15590 + 15596 + 15599 + 15601 + 15604 + 15608 + 15613 + 15624 + 15629 + 15631 + 15638 + 15647 + 15652 + 18127 + 15659 + 15661 + 15666 + 15669 + 15673 + 15678 + 15681 + 15683 + 15688 + 15691 + 15693 + 15697 + 15701 + 15704 + 18129 + 18133 + 18138 + 15707 + 18139 + 18141 + 18144 + 18147 + 18150 + 15709 + 15710 + 15711 + 18159 + 17364 + 18201 + 18228 + 18297 + 18380 + 18396 + 18400 + 18402 + 18408 + 18411 + 18414 + 18419 + 18420 + 18426 + 18432 + 18433 + 17328 + 18436 + 18439 + 17330 + 18440 + 18443 + 18445 + 18446 + 18451 + 18459 + 18462 + 18465 + 18471 + 18474 + 18475 + 18476 + 18477 + 18478 + 15771 + 18492 +endcidrange + +100 begincidrange + 15773 + 18494 + 15776 + 18497 + 15779 + 18498 + 15781 + 18500 + 15785 + 18501 + 15786 + 18503 + 15787 + 15790 + 15792 + 15794 + 18505 + 18508 + 18509 + 15796 + 15799 + 15801 + 18510 + 18513 + 15804 + 17360 + 18515 + 15805 + 18516 + 18518 + 15809 + 18520 + 15812 + 18522 + 15814 + 18523 + 18524 + 15816 + 18527 + 15819 + 18528 + 15822 + 18529 + 15823 + 18534 + 15825 + 18535 + 15827 + 18536 + 15830 + 18538 + 15832 + 15834 + 18539 + 15835 + 18540 + 18541 + 15837 + 15839 + 15842 + 15844 + 18544 + 15846 + 15849 + 18546 + 15851 + 18548 + 18549 + 15854 + 18550 + 18551 + 18552 + 18553 + 15860 + 18554 + 15864 + 18556 + 18557 + 18558 + 15871 + 18559 + 18561 + 15874 + 18563 + 18564 + 15876 + 18566 + 15878 + 15881 + 15885 + 15892 + 18568 + 15896 + 15898 + 18571 + 15903 + 15906 + 18572 + 15908 + 18576 +endcidrange + +100 begincidrange + 15912 + 15914 + 15916 + 15920 + 18577 + 15921 + 18578 + 15925 + 18579 + 15928 + 15930 + 15934 + 18580 + 15938 + 18583 + 17384 + 18584 + 18589 + 18592 + 18593 + 18594 + 18595 + 18598 + 18599 + 18601 + 18604 + 18607 + 15949 + 18608 + 18620 + 18624 + 18626 + 18627 + 18629 + 18632 + 18634 + 18636 + 15957 + 18638 + 15960 + 18639 + 15961 + 18641 + 18642 + 15963 + 18643 + 18646 + 15964 + 18647 + 18648 + 18650 + 18652 + 18653 + 15973 + 18655 + 15979 + 18657 + 16000 + 16005 + 16012 + 18660 + 16015 + 16021 + 16032 + 16034 + 16037 + 16044 + 18663 + 18664 + 18666 + 18667 + 18673 + 18674 + 16058 + 18677 + 18678 + 16061 + 18679 + 18680 + 16066 + 18681 + 16069 + 18683 + 16071 + 18684 + 16079 + 18692 + 18694 + 18696 + 16085 + 18697 + 18699 + 16090 + 18701 + 16092 + 18702 + 18704 + 16101 + 16104 + 16113 +endcidrange + +100 begincidrange + 18706 + 16119 + 18707 + 18709 + 16122 + 18710 + 18711 + 16132 + 18712 + 16135 + 18713 + 16136 + 16139 + 16142 + 18716 + 16193 + 16202 + 18718 + 18719 + 16211 + 18720 + 18721 + 16216 + 16228 + 16254 + 16263 + 18725 + 18726 + 16276 + 18727 + 16285 + 18728 + 16291 + 16294 + 18729 + 18730 + 18731 + 16332 + 18732 + 16338 + 16344 + 16356 + 16362 + 18733 + 16381 + 18735 + 18737 + 17332 + 18743 + 18746 + 18754 + 18757 + 17609 + 18797 + 18799 + 18828 + 18830 + 18844 + 17716 + 17723 + 17781 + 17788 + 17791 + 17801 + 17845 + 17163 + 17167 + 17169 + 17171 + 17174 + 17176 + 17179 + 17183 + 17847 + 17189 + 17848 + 17191 + 17196 + 17200 + 17204 + 17207 + 17849 + 17210 + 17850 + 17851 + 17219 + 17852 + 17853 + 17223 + 17227 + 17854 + 17231 + 17235 + 17238 + 17240 + 17855 + 17250 + 17254 + 17257 + 17263 +endcidrange + +100 begincidrange + 17857 + 17268 + 17272 + 17274 + 17859 + 17278 + 17282 + 17285 + 17860 + 17861 + 17865 + 17870 + 17874 + 17880 + 17882 + 17292 + 17884 + 17294 + 17886 + 17887 + 17296 + 17888 + 17297 + 17889 + 17298 + 17893 + 17303 + 17896 + 17899 + 17902 + 17904 + 17906 + 17908 + 17910 + 17912 + 17924 + 17929 + 17936 + 17947 + 17956 + 17633 + 17636 + 17653 + 17658 + 17660 + 17663 + 17668 + 17675 + 17681 + 17688 + 18044 + 18054 + 18068 + 18071 + 13999 + 14002 + 14004 + 14007 + 628 + 9089 + 109 + 122 + 13743 + 13745 + 130 + 134 + 138 + 142 + 146 + 150 + 154 + 158 + 199 + 203 + 201 + 13746 + 112 + 114 + 116 + 160 + 205 + 223 + 268 + 108 + 14052 + 174 + 259 + 264 + 175 + 14051 + 128 + 176 + 208 + 100 + 209 + 103 + 257 + 333 + 106 + 105 +endcidrange + +18 begincidrange + 214 + 216 + 215 + 107 + 265 + 365 + 13758 + 258 + 13759 + 13748 + 197 + 391 + 132 + 120 + 133 + 113 + 14049 + 14050 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UCS2-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UCS2-V new file mode 100644 index 00000000000..5c08552a0a1 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UCS2-V @@ -0,0 +1,90 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniCNS-UCS2-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniCNS-UCS2-H) +%%BeginResource: CMap (UniCNS-UCS2-V) +%%Title: (UniCNS-UCS2-V Adobe CNS1 3) +%%Version: 12.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniCNS-UCS2-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 3 def +end def + +/CMapName /UniCNS-UCS2-V def +/CMapVersion 12.003 def +/CMapType 1 def + +/XUID [1 10 25393] def + +/WMode 1 def + +13 begincidrange +<2013> <2013> 120 +<2014> <2014> 122 +<2025> <2025> 109 +<3008> <3009> 150 +<300a> <300b> 146 +<300c> <300d> 154 +<300e> <300f> 158 +<3010> <3011> 142 +<3014> <3015> 138 + 13745 + 130 + 134 + 135 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UTF16-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UTF16-H new file mode 100644 index 00000000000..7f8541bc082 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UTF16-H @@ -0,0 +1,19107 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniCNS-UTF16-H) +%%Title: (UniCNS-UTF16-H Adobe CNS1 6) +%%Version: 1.010 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2010 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 6 def +end def + +/CMapName /UniCNS-UTF16-H def +/CMapVersion 1.010 def +/CMapType 1 def + +/XUID [1 10 25591] def + +/WMode 0 def + +3 begincodespacerange + <0000> + + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidchar +<00a5> 260 +<00a7> 178 +<00a8> 13747 +<00a9> 96 +<00ac> 14049 +<00af> 195 +<00b0> 280 +<00b1> 212 +<00b7> 115 +<00c0> 18788 +<00c1> 18786 +<00c8> 18792 +<00c9> 18790 +<00ca> 18801 +<00d2> 18796 +<00d3> 18794 +<00d7> 210 +<00e0> 18805 +<00e1> 18803 +<00e8> 18810 +<00e9> 18808 +<00ea> 18832 +<00ec> 18814 +<00ed> 18812 +<00f2> 18818 +<00f3> 18816 +<00f7> 211 +<00f8> 18840 +<00f9> 18822 +<00fa> 18820 +<00fc> 18827 +<0100> 18785 +<0101> 18802 +<0112> 18789 +<0113> 18807 +<011a> 18791 +<011b> 18809 +<012b> 18811 +<014b> 18841 +<014c> 18793 +<014d> 18815 +<0153> 18839 +<016b> 18819 +<01cd> 18787 +<01ce> 18804 +<01d0> 18813 +<01d1> 18795 +<01d2> 18817 +<01d4> 18821 +<01d6> 18823 +<01d8> 18824 +<01da> 18825 +<01dc> 18826 +<0250> 18835 +<0251> 18806 +<0254> 18837 +<025b> 18836 +<0261> 18833 +<026a> 18843 +<0275> 18838 +<0283> 18834 +<028a> 18842 +<02c6> 13748 +<02c7> 504 +<02ca> 503 +<02cb> 505 +<02cd> 198 +<02d9> 502 +<0304> 195 +<0308> 13747 +<030c> 504 +<0401> 13936 +<0451> 13969 +<1ebe> 18798 +<1ebf> 18829 +<1ec0> 18800 +<1ec1> 18831 +<2013> 121 +<2014> 123 +<2022> 104 +<2025> 111 +<2026> 110 +<2027> 104 +<2032> 173 +<2035> 172 +<203b> 177 +<203e> 195 +<20ac> 17601 +<2103> 266 +<2105> 194 +<2109> 267 +<2116> 14054 +<2121> 14055 +<2122> 97 +<2190> 248 +<2191> 245 +<2192> 247 +<2193> 246 +<2198> 252 +<2199> 251 +endcidchar + +100 begincidchar +<21e7> 13996 +<2215> 257 +<221a> 213 +<221e> 220 +<221f> 233 +<2220> 232 +<2223> 254 +<2225> 253 +<222b> 237 +<222e> 238 +<2234> 240 +<2235> 239 +<223c> 228 +<2252> 221 +<2260> 219 +<2261> 222 +<2295> 243 +<2299> 244 +<22a5> 231 +<22bf> 234 +<22ef> 110 +<2421> 594 +<2500> 311 +<2502> 312 +<250c> 314 +<2510> 315 +<2514> 316 +<2518> 317 +<251c> 309 +<2524> 308 +<252c> 307 +<2534> 306 +<253c> 305 +<2550> 322 +<2551> 14090 +<2552> 14072 +<2553> 14081 +<2554> 14063 +<2555> 14074 +<2556> 14083 +<2557> 14065 +<2558> 14078 +<2559> 14087 +<255a> 14069 +<255b> 14080 +<255c> 14089 +<255d> 14071 +<255e> 323 +<255f> 14084 +<2560> 14066 +<2561> 325 +<2562> 14086 +<2563> 14068 +<2564> 14073 +<2565> 14082 +<2566> 14064 +<2567> 14079 +<2568> 14088 +<2569> 14070 +<256a> 324 +<256b> 14085 +<256c> 14067 +<256f> 321 +<2570> 320 +<2574> 13744 +<2589> 304 +<258a> 303 +<258b> 302 +<258c> 301 +<258d> 300 +<258e> 299 +<258f> 298 +<2593> 14096 +<2594> 310 +<2595> 313 +<25a0> 190 +<25a1> 189 +<25b2> 183 +<25b3> 182 +<25bc> 192 +<25bd> 191 +<25c6> 188 +<25c7> 187 +<25cb> 180 +<25ce> 184 +<25cf> 181 +<25e4> 329 +<25e5> 328 +<2605> 186 +<2606> 185 +<2609> 244 +<2640> 241 +<2641> 243 +<2642> 242 +<273d> 13760 +<2e80> 17608 +<2e84> 17692 +<2e8a> 17696 +<2e95> 17699 +<2e9c> 17700 +endcidchar + +100 begincidchar +<2e9d> 18846 +<2ea5> 17701 +<2ea7> 17702 +<2eaa> 17703 +<2eac> 17704 +<2eae> 17705 +<2eb6> 17706 +<2ebc> 17707 +<2ebe> 17708 +<2ec6> 18847 +<2eca> 17709 +<2ecf> 17712 +<2ede> 17715 +<2ee3> 18848 +<2f00> 595 +<2f04> 596 +<2f05> 539 +<2f06> 602 +<2f07> 540 +<2f0f> 607 +<2f10> 5998 +<2f11> 608 +<2f12> 610 +<2f13> 544 +<2f14> 611 +<2f15> 5999 +<2f16> 545 +<2f19> 546 +<2f1a> 6000 +<2f1b> 547 +<2f1c> 614 +<2f1d> 633 +<2f1e> 6005 +<2f21> 548 +<2f22> 548 +<2f27> 549 +<2f2c> 6006 +<2f2d> 646 +<2f2e> 550 +<2f3b> 6007 +<2f40> 725 +<2f41> 556 +<2f46> 557 +<2f4e> 6026 +<2f53> 6028 +<2f59> 6029 +<2f65> 862 +<2f66> 866 +<2f71> 6066 +<2f79> 6162 +<2f8b> 6163 +<2f8c> 6168 +<2f91> 6169 +<2f98> 6375 +<2fa1> 560 +<2fa2> 1307 +<2faa> 561 +<2fad> 17635 +<2fae> 1698 +<2fbd> 7731 +<2fbe> 2552 +<2fbf> 7732 +<2fcb> 9056 +<2fcc> 9746 +<2fd2> 4745 +<2fd5> 12045 +<3000> 99 +<3003> 179 +<3012> 261 +<30fc> 13757 +<31c5> 17615 +<31c8> 17622 +<31cf> 13999 +<3231> 14053 +<32a3> 193 +<33a1> 276 +<33c4> 279 +<33ce> 275 +<33d1> 236 +<33d2> 235 +<33d5> 271 +<3435> 14781 +<3440> 15463 +<344a> 19046 +<344c> 17811 +<3464> 14981 +<3473> 15813 +<347a> 16435 +<347d> 17815 +<347e> 18083 +<3493> 17310 +<3496> 14300 +<34a5> 17816 +<34af> 15487 +<34bc> 17280 +<34c1> 17659 +<34c8> 15616 +<34df> 16036 +<34e4> 15956 +<34e6> 19122 +endcidchar + +100 begincidchar +<34fb> 15818 +<3506> 17206 +<353e> 17639 +<3551> 17825 +<3553> 17317 +<3559> 18860 +<3561> 16600 +<356d> 17828 +<3570> 15151 +<3572> 17829 +<3577> 16075 +<3578> 17273 +<3584> 14843 +<3597> 15149 +<3598> 17840 +<35a1> 16610 +<35a5> 17841 +<35ad> 16124 +<35bf> 17842 +<35c1> 17792 +<35c5> 17844 +<35c7> 17823 +<35ca> 15939 +<35ce> 16001 +<35d2> 16329 +<35d6> 16309 +<35db> 18189 +<35dd> 17324 +<35f1> 18070 +<35f2> 17959 +<35f3> 16236 +<35fb> 17864 +<35fe> 16234 +<3609> 17909 +<3618> 18545 +<361a> 17946 +<361d> 14007 +<3623> 16582 +<3625> 19012 +<362d> 16006 +<3635> 18734 +<3639> 16741 +<363e> 14856 +<3647> 18438 +<3648> 14342 +<3649> 16403 +<364e> 18072 +<365f> 15859 +<3661> 19084 +<367a> 16099 +<3681> 17830 +<369a> 15473 +<36a5> 18690 +<36aa> 15152 +<36ac> 18688 +<36b0> 15583 +<36b1> 16589 +<36b5> 15298 +<36b9> 18567 +<36bc> 15615 +<36c1> 14277 +<36c3> 16613 +<36c4> 14597 +<36c5> 17046 +<36c7> 15674 +<36c8> 18464 +<36d3> 14904 +<36d4> 15283 +<36d6> 15628 +<36dd> 14902 +<36e1> 14716 +<36e2> 15581 +<36e5> 16918 +<36e6> 16636 +<36f5> 14872 +<3701> 14900 +<3703> 17935 +<3708> 16639 +<370a> 15573 +<370d> 16952 +<371c> 15870 +<3722> 14713 +<3723> 14720 +<3725> 14409 +<372c> 15500 +<372d> 15671 +<3730> 18780 +<3732> 16646 +<3733> 14743 +<373a> 15958 +<3740> 16898 +<3743> 16438 +<3762> 15798 +<376f> 18379 +<3797> 17901 +<37a0> 14888 +<37b9> 17335 +<37be> 14654 +<37d6> 19067 +<37f2> 15265 +endcidchar + +100 begincidchar +<37f8> 17106 +<37fb> 16117 +<380f> 17964 +<3819> 14767 +<3820> 17967 +<382d> 16686 +<3836> 16691 +<3838> 17339 +<3863> 18115 +<3875> 19088 +<38a0> 16709 +<38c3> 14610 +<38cc> 16502 +<38d1> 14997 +<38d4> 19074 +<38fa> 17643 +<3908> 17970 +<3914> 17342 +<3927> 15409 +<3932> 16770 +<393f> 17971 +<394d> 17972 +<3963> 16739 +<3978> 19045 +<3980> 14452 +<3989> 17976 +<398a> 15592 +<3992> 17270 +<3999> 14778 +<399b> 15795 +<39a1> 15897 +<39a4> 15887 +<39b8> 17979 +<39dc> 16078 +<39e2> 18120 +<39e5> 14651 +<39ec> 17168 +<39f8> 17982 +<39fb> 17221 +<39fe> 17256 +<3a01> 16864 +<3a03> 17984 +<3a06> 17271 +<3a17> 16784 +<3a18> 17295 +<3a29> 14942 +<3a2a> 16095 +<3a34> 17177 +<3a4b> 17988 +<3a52> 16083 +<3a57> 16798 +<3a5c> 16324 +<3a5e> 15111 +<3a66> 16796 +<3a67> 17203 +<3a97> 17991 +<3aab> 16529 +<3abd> 17993 +<3ade> 16716 +<3ae0> 14970 +<3af0> 18098 +<3af2> 17996 +<3af5> 19094 +<3afb> 15090 +<3b0e> 14568 +<3b19> 18117 +<3b22> 17998 +<3b2b> 18774 +<3b39> 18251 +<3b42> 18000 +<3b58> 18002 +<3b60> 14650 +<3b71> 18006 +<3b72> 18005 +<3b7b> 18007 +<3b7c> 14426 +<3b80> 16866 +<3b95> 18976 +<3b96> 15004 +<3b99> 15000 +<3ba1> 16873 +<3bbc> 17352 +<3bbe> 15793 +<3bc2> 16692 +<3bc4> 15008 +<3bd7> 15020 +<3bdd> 18015 +<3bec> 18020 +<3bf2> 18022 +<3bf3> 16883 +<3bf4> 14958 +<3c0d> 16887 +<3c11> 15936 +<3c15> 14744 +<3c18> 18737 +<3c54> 15872 +<3c8b> 18871 +<3ccb> 18032 +<3ccd> 15589 +<3cd1> 16387 +endcidchar + +100 begincidchar +<3cd6> 15607 +<3cdc> 16462 +<3ceb> 16919 +<3cef> 18037 +<3d12> 19036 +<3d13> 14195 +<3d1d> 14652 +<3d32> 18775 +<3d3b> 16965 +<3d46> 18053 +<3d4c> 15595 +<3d4e> 16962 +<3d51> 14570 +<3d5f> 16729 +<3d62> 15454 +<3d69> 15594 +<3d6a> 18057 +<3d6f> 15612 +<3d75> 18058 +<3d7d> 15407 +<3d85> 18763 +<3d88> 19026 +<3d8a> 18061 +<3d8f> 15037 +<3d91> 18063 +<3da5> 15702 +<3dad> 18073 +<3db4> 16550 +<3dbf> 14288 +<3dc6> 18654 +<3dc7> 16740 +<3dc9> 18853 +<3dcc> 15727 +<3dcd> 15091 +<3dd3> 14305 +<3ddb> 16383 +<3de7> 14745 +<3de8> 16989 +<3deb> 15962 +<3df3> 18132 +<3df4> 19006 +<3df7> 18603 +<3dfc> 17963 +<3dfd> 15380 +<3e06> 18717 +<3e40> 16745 +<3e43> 17261 +<3e48> 17813 +<3e55> 17023 +<3e74> 16098 +<3ea8> 17156 +<3ea9> 18157 +<3eaa> 16501 +<3ead> 15261 +<3eb1> 15064 +<3eb8> 14923 +<3ebf> 15115 +<3ec2> 15320 +<3ec7> 14709 +<3eca> 18161 +<3ecc> 15330 +<3ed0> 14420 +<3ed1> 18162 +<3ed6> 15533 +<3ed7> 17055 +<3eda> 15618 +<3edb> 18919 +<3ede> 14834 +<3ee1> 15528 +<3ee2> 18166 +<3ee7> 15324 +<3ee9> 15524 +<3eeb> 14698 +<3eec> 19092 +<3ef0> 18167 +<3ef3> 15069 +<3ef4> 18168 +<3efa> 18169 +<3efc> 15336 +<3eff> 15093 +<3f00> 15373 +<3f04> 17091 +<3f06> 15063 +<3f07> 19063 +<3f0e> 18171 +<3f53> 18172 +<3f58> 15081 +<3f59> 16521 +<3f63> 15078 +<3f7c> 18176 +<3f93> 17869 +<3fc0> 17359 +<3fc8> 19082 +<3fd7> 17361 +<3fdc> 18180 +<3fe5> 18143 +<3fed> 17205 +<3ff9> 17879 +<3ffa> 17236 +<4004> 16654 +endcidchar + +100 begincidchar +<4009> 18878 +<401d> 18185 +<4039> 18187 +<4045> 18188 +<4053> 17846 +<4057> 14749 +<4062> 15307 +<4065> 16339 +<406a> 18191 +<406f> 18192 +<4071> 18944 +<40a8> 17365 +<40b4> 19149 +<40bb> 17856 +<40bf> 16108 +<40c8> 15118 +<40d8> 16811 +<40df> 15895 +<40f8> 19066 +<40fa> 16062 +<4102> 19060 +<4103> 17367 +<4104> 16988 +<4109> 18204 +<410e> 15131 +<4131> 19130 +<4132> 15141 +<4167> 18207 +<416c> 14510 +<416e> 15139 +<417c> 19070 +<417f> 15234 +<4181> 19138 +<4190> 18112 +<41b2> 18208 +<41c4> 18211 +<41ca> 14143 +<41cf> 18214 +<41db> 14271 +<41ed> 19087 +<41ef> 14147 +<41f9> 15166 +<4211> 15169 +<4223> 18881 +<4240> 14321 +<4260> 18219 +<426a> 15189 +<4276> 18949 +<427a> 18220 +<428c> 18223 +<4294> 18225 +<42a2> 18945 +<42b5> 16400 +<42b9> 14502 +<42bc> 15498 +<42f4> 15289 +<42fb> 15598 +<42fc> 16870 +<430a> 19102 +<432b> 14205 +<436e> 18122 +<4397> 18235 +<439a> 19030 +<43ba> 17247 +<43c1> 18069 +<43d9> 17214 +<43df> 15945 +<43ed> 18245 +<43f0> 18965 +<43f2> 15944 +<4401> 18250 +<4402> 15219 +<4413> 18255 +<4425> 18257 +<442d> 18258 +<447a> 14255 +<448f> 18264 +<4491> 14004 +<449f> 15074 +<44a0> 14317 +<44a2> 16505 +<44b0> 18268 +<44b7> 16289 +<44bd> 19086 +<44c0> 15367 +<44c3> 19027 +<44c5> 16912 +<44ce> 15651 +<44dd> 14813 +<44de> 19085 +<44df> 15650 +<44e1> 19151 +<44e4> 14306 +<44e9> 16847 +<44ea> 15217 +<44eb> 15602 +<44ec> 16052 +<44f4> 14738 +<4503> 18079 +<4504> 18275 +endcidchar + +100 begincidchar +<4509> 15952 +<450b> 14292 +<4516> 14329 +<451b> 19077 +<451d> 14183 +<4523> 14326 +<4527> 14327 +<452e> 15571 +<4533> 15441 +<4536> 19031 +<453b> 18282 +<453d> 14532 +<453f> 15890 +<4543> 14323 +<4551> 15076 +<4552> 16563 +<4555> 16958 +<4558> 19041 +<455c> 14219 +<4561> 19076 +<4562> 18752 +<456a> 14340 +<456d> 19073 +<4577> 18286 +<4578> 18969 +<4585> 14533 +<45a6> 18968 +<45ac> 17377 +<45b3> 18972 +<45da> 18989 +<45e9> 16100 +<45ea> 19081 +<4603> 18967 +<4606> 18291 +<460f> 14357 +<4615> 14403 +<4617> 18292 +<465b> 14365 +<467a> 14825 +<4680> 15617 +<46a1> 18994 +<46ae> 19136 +<46bb> 19061 +<46cf> 15264 +<46d0> 15866 +<46f5> 15263 +<46f7> 19068 +<4713> 14387 +<4718> 15815 +<4736> 18977 +<4744> 18978 +<474e> 16060 +<474f> 18988 +<477c> 15821 +<4798> 18305 +<47a6> 16547 +<47b6> 16106 +<47d5> 17178 +<47ed> 18307 +<47f4> 17199 +<4800> 17950 +<480b> 17234 +<4837> 18311 +<485d> 16655 +<4871> 15619 +<489b> 15293 +<48ad> 18321 +<48ae> 18765 +<48b4> 15301 +<48d0> 15783 +<48dd> 16672 +<48ed> 17032 +<48f3> 16065 +<48fa> 15940 +<4906> 15303 +<4911> 17796 +<491e> 18324 +<4925> 15375 +<492a> 18094 +<492d> 18125 +<492f> 19128 +<4930> 19106 +<4935> 15555 +<493c> 15352 +<493e> 15622 +<4945> 18339 +<4951> 18340 +<4953> 17069 +<4965> 14489 +<496a> 18345 +<4972> 14884 +<4989> 14235 +<49a1> 14519 +<49a7> 18350 +<49df> 14506 +<49e5> 18353 +<49e7> 17953 +<4a0f> 14531 +<4a1d> 15340 +<4a24> 18354 +endcidchar + +100 begincidchar +<4a35> 18356 +<4a96> 15591 +<4aa4> 18993 +<4ab4> 17249 +<4ab8> 15784 +<4ad1> 14563 +<4ae4> 18359 +<4aff> 14578 +<4b10> 18873 +<4b19> 18361 +<4b20> 18858 +<4b2c> 17951 +<4b37> 16809 +<4b6f> 15382 +<4b70> 18368 +<4b72> 14588 +<4b7b> 15501 +<4b7e> 16394 +<4b8e> 14839 +<4b90> 15392 +<4b93> 14988 +<4b96> 14658 +<4b97> 15396 +<4b9d> 18370 +<4bbd> 15395 +<4bbe> 14676 +<4bc0> 15836 +<4c04> 16315 +<4c07> 16311 +<4c0e> 14604 +<4c32> 18966 +<4c3b> 16188 +<4c3e> 17787 +<4c40> 18980 +<4c47> 18979 +<4c57> 18986 +<4c5b> 16089 +<4c6d> 18377 +<4c77> 19044 +<4c7b> 19079 +<4c7d> 15974 +<4c81> 18955 +<4c85> 18990 +<4ca4> 18622 +<4cae> 15426 +<4cb0> 15429 +<4cb7> 15905 +<4ccd> 17784 +<4ce1> 16115 +<4ce2> 18974 +<4ced> 16555 +<4d07> 18992 +<4d09> 16086 +<4d10> 16663 +<4d34> 14645 +<4d76> 19080 +<4d77> 18971 +<4d89> 19078 +<4d91> 17397 +<4d9c> 18628 +<4e00> 595 +<4e01> 597 +<4e03> 598 +<4e04> 18686 +<4e07> 6001 +<4e08> 617 +<4e09> 615 +<4e0a> 618 +<4e0b> 616 +<4e0c> 6002 +<4e0d> 660 +<4e0e> 6010 +<4e0f> 6008 +<4e10> 659 +<4e11> 658 +<4e14> 754 +<4e15> 753 +<4e16> 752 +<4e18> 755 +<4e19> 751 +<4e1a> 18685 +<4e1c> 18656 +<4e21> 15725 +<4e24> 17805 +<4e26> 1320 +<4e28> 536 +<4e2a> 16215 +<4e2b> 619 +<4e2c> 17651 +<4e2d> 661 +<4e2e> 6011 +<4e2f> 18898 +<4e30> 662 +<4e31> 6030 +<4e32> 1045 +<4e33> 6388 +<4e36> 537 +<4e37> 17687 +<4e38> 620 +<4e39> 663 +endcidchar + +100 begincidchar +<4e3b> 756 +<4e3c> 6031 +<4e3d> 17719 +<4e3f> 538 +<4e41> 13999 +<4e42> 5996 +<4e43> 599 +<4e45> 622 +<4e47> 6003 +<4e48> 623 +<4e49> 16526 +<4e4b> 664 +<4e4d> 757 +<4e4e> 759 +<4e4f> 758 +<4e56> 1321 +<4e58> 2097 +<4e59> 596 +<4e5a> 14001 +<4e5b> 17637 +<4e5c> 5997 +<4e5d> 600 +<4e5e> 625 +<4e5f> 624 +<4e69> 882 +<4e6a> 15845 +<4e73> 1322 +<4e78> 15758 +<4e7e> 2555 +<4e7f> 7733 +<4e80> 17806 +<4e81> 17340 +<4e82> 3518 +<4e85> 539 +<4e86> 601 +<4e87> 17807 +<4e88> 666 +<4e89> 17820 +<4e8b> 1323 +<4e8c> 602 +<4e8d> 6004 +<4e8e> 626 +<4e91> 667 +<4e92> 669 +<4e93> 6012 +<4e94> 670 +<4e95> 668 +<4e98> 14788 +<4e99> 883 +<4e9a> 18645 +<4e9b> 1324 +<4e9e> 1325 +<4e9f> 1699 +<4ea0> 540 +<4ea1> 627 +<4ea2> 671 +<4ea3> 18895 +<4ea4> 884 +<4ea5> 886 +<4ea6> 885 +<4ea8> 1046 +<4eb3> 2098 +<4eb6> 9059 +<4eb7> 16700 +<4eb9> 13175 +<4eba> 603 +<4ebb> 17638 +<4ebc> 14769 +<4ebf> 17808 +<4ec0> 673 +<4ec1> 672 +<4ec2> 6013 +<4ec3> 674 +<4ec4> 680 +<4ec8> 6015 +<4ec9> 6014 +<4ecd> 677 +<4ece> 16226 +<4ed8> 761 +<4ed9> 768 +<4eda> 6037 +<4edc> 6033 +<4edd> 6036 +<4ede> 769 +<4edf> 785 +<4ee1> 6035 +<4ee5> 760 +<4ee8> 6032 +<4ee9> 6034 +<4eea> 18635 +<4eeb> 17809 +<4eee> 15734 +<4ef0> 899 +<4ef1> 6074 +<4ef2> 896 +<4ef3> 900 +<4ef4> 6084 +<4ef5> 6072 +<4ef6> 897 +<4ef7> 6076 +endcidchar + +100 begincidchar +<4ef8> 14765 +<4efb> 898 +<4efd> 901 +<4efe> 17307 +<4eff> 887 +<4f00> 6075 +<4f01> 902 +<4f02> 6079 +<4f03> 14792 +<4f04> 6083 +<4f05> 6080 +<4f08> 6077 +<4f09> 888 +<4f0a> 890 +<4f0b> 903 +<4f0d> 892 +<4f0e> 6069 +<4f0f> 895 +<4f12> 6085 +<4f13> 6082 +<4f14> 6073 +<4f15> 891 +<4f17> 18899 +<4f18> 6070 +<4f19> 889 +<4f1a> 17724 +<4f1d> 6078 +<4f22> 6081 +<4f28> 17725 +<4f29> 14782 +<4f2c> 6071 +<4f2d> 6191 +<4f2f> 1068 +<4f30> 1055 +<4f32> 14653 +<4f33> 6192 +<4f34> 1052 +<4f36> 1070 +<4f37> 17810 +<4f38> 1060 +<4f39> 16229 +<4f3a> 1059 +<4f3b> 6180 +<4f3c> 1063 +<4f3d> 1058 +<4f3e> 6185 +<4f3f> 6193 +<4f41> 6189 +<4f42> 14795 +<4f43> 1061 +<4f45> 15247 +<4f46> 1064 +<4f47> 1049 +<4f48> 1073 +<4f49> 6182 +<4f4b> 14772 +<4f4c> 6400 +<4f4d> 1047 +<4f4e> 1069 +<4f4f> 1048 +<4f52> 6187 +<4f53> 6183 +<4f54> 1062 +<4f55> 1054 +<4f56> 6179 +<4f57> 1050 +<4f58> 6190 +<4f59> 1071 +<4f5a> 1074 +<4f5b> 1053 +<4f5c> 1066 +<4f5d> 1072 +<4f5e> 1051 +<4f5f> 6188 +<4f60> 1067 +<4f61> 6194 +<4f62> 6181 +<4f63> 1065 +<4f64> 6184 +<4f67> 6186 +<4f69> 1341 +<4f6a> 6402 +<4f6b> 6414 +<4f6c> 1333 +<4f6e> 6415 +<4f6f> 1328 +<4f70> 1338 +<4f72> 15474 +<4f73> 1331 +<4f74> 6396 +<4f75> 1339 +<4f76> 6395 +<4f77> 6399 +<4f78> 6406 +<4f79> 6404 +<4f7a> 1347 +<4f7b> 1342 +<4f7c> 6390 +<4f7d> 6392 +<4f7e> 1344 +endcidchar + +100 begincidchar +<4f7f> 1332 +<4f80> 6393 +<4f81> 6405 +<4f82> 6412 +<4f83> 1337 +<4f84> 6398 +<4f85> 6391 +<4f86> 1336 +<4f87> 6394 +<4f88> 1340 +<4f89> 6397 +<4f8a> 14773 +<4f8b> 1335 +<4f8d> 1330 +<4f8f> 1345 +<4f90> 6407 +<4f91> 1346 +<4f92> 6411 +<4f94> 6409 +<4f95> 6413 +<4f96> 1343 +<4f97> 6401 +<4f98> 6389 +<4f9a> 6403 +<4f9b> 1334 +<4f9c> 6408 +<4f9d> 1329 +<4f9e> 6410 +<4fa2> 14791 +<4fa8> 17726 +<4fab> 16418 +<4fae> 1716 +<4faf> 1704 +<4fb0> 15690 +<4fb2> 6749 +<4fb3> 6757 +<4fb4> 19050 +<4fb5> 1703 +<4fb6> 1711 +<4fb7> 1723 +<4fb9> 6763 +<4fba> 6761 +<4fbb> 6756 +<4fbd> 17812 +<4fbf> 1705 +<4fc0> 6762 +<4fc1> 6752 +<4fc2> 1719 +<4fc3> 1710 +<4fc4> 1718 +<4fc5> 6747 +<4fc7> 6759 +<4fc8> 18152 +<4fc9> 6750 +<4fca> 1714 +<4fcb> 6751 +<4fcc> 14799 +<4fcd> 6746 +<4fce> 1721 +<4fcf> 1708 +<4fd0> 1717 +<4fd1> 1707 +<4fd3> 6748 +<4fd4> 6753 +<4fd6> 6760 +<4fd7> 1715 +<4fd8> 1712 +<4fd9> 6755 +<4fda> 1720 +<4fdb> 6758 +<4fdc> 6754 +<4fdd> 1709 +<4fde> 1722 +<4fdf> 1713 +<4fe0> 1706 +<4fe1> 1702 +<4fe4> 15462 +<4fe5> 14800 +<4fec> 6764 +<4fee> 2124 +<4fef> 2102 +<4ff0> 18896 +<4ff1> 2118 +<4ff2> 16168 +<4ff3> 2123 +<4ff4> 7204 +<4ff5> 7203 +<4ff8> 2105 +<4ff9> 14259 +<4ffa> 2114 +<4ffd> 16166 +<4ffe> 2127 +<5000> 2115 +<5003> 17814 +<5005> 7197 +<5006> 2108 +<5007> 7198 +<5008> 16420 +<5009> 2129 +<500b> 2120 +endcidchar + +100 begincidchar +<500e> 7217 +<500f> 2572 +<5011> 2113 +<5012> 2112 +<5013> 7199 +<5014> 2116 +<5015> 7749 +<5016> 2107 +<5017> 7210 +<5018> 2122 +<5019> 2121 +<501a> 2111 +<501b> 7202 +<501c> 7211 +<501e> 7196 +<501f> 2110 +<5020> 7212 +<5021> 2119 +<5022> 7200 +<5023> 2101 +<5025> 2104 +<5026> 2103 +<5027> 7213 +<5028> 2117 +<5029> 2106 +<502a> 2126 +<502b> 2128 +<502c> 7207 +<502d> 2125 +<502e> 14796 +<502f> 7215 +<5030> 7201 +<5031> 7216 +<5033> 7205 +<5034> 14608 +<5035> 7214 +<5037> 7206 +<503b> 18849 +<503c> 2109 +<5040> 7757 +<5041> 7745 +<5043> 2560 +<5045> 7750 +<5046> 7756 +<5047> 2559 +<5048> 7743 +<5049> 2563 +<504a> 7747 +<504b> 7740 +<504c> 2561 +<504d> 7744 +<504e> 2566 +<504f> 2571 +<5051> 7761 +<5053> 7739 +<5055> 2567 +<5056> 16172 +<5057> 7760 +<5058> 14801 +<505a> 2562 +<505b> 7746 +<505c> 2558 +<505d> 7741 +<505e> 7737 +<505f> 7751 +<5060> 7738 +<5061> 7736 +<5062> 7748 +<5065> 2564 +<5066> 15817 +<5068> 8376 +<5069> 7752 +<506a> 7735 +<506b> 7753 +<506c> 14797 +<506d> 2574 +<506e> 7758 +<506f> 2573 +<5070> 7734 +<5072> 7742 +<5073> 7759 +<5074> 2569 +<5075> 2568 +<5076> 2565 +<5077> 2570 +<507a> 2556 +<507d> 2557 +<5080> 3052 +<5081> 14798 +<5082> 8379 +<5083> 8372 +<5085> 3049 +<5087> 8380 +<5088> 17308 +<508b> 8370 +<508c> 8373 +<508d> 3048 +<508e> 8374 +<5090> 16876 +<5091> 3051 +endcidchar + +100 begincidchar +<5092> 8378 +<5094> 8368 +<5095> 8367 +<5096> 3053 +<5098> 3054 +<5099> 3050 +<509a> 3055 +<509b> 8366 +<509c> 8377 +<509d> 8375 +<509e> 8369 +<50a2> 3047 +<50a3> 8371 +<50a6> 16191 +<50ac> 3525 +<50ad> 3519 +<50ae> 9063 +<50af> 3528 +<50b0> 9069 +<50b1> 9072 +<50b4> 9066 +<50b5> 3520 +<50b6> 9075 +<50b7> 3526 +<50b8> 9076 +<50ba> 9071 +<50bb> 3527 +<50bc> 18897 +<50bd> 9060 +<50be> 3524 +<50bf> 9061 +<50c1> 9070 +<50c2> 9068 +<50c4> 9064 +<50c5> 3523 +<50c6> 9062 +<50c7> 3529 +<50c8> 9067 +<50c9> 9074 +<50ca> 9065 +<50cb> 9073 +<50cd> 14789 +<50ce> 3976 +<50cf> 3973 +<50d0> 14545 +<50d1> 3974 +<50d3> 9756 +<50d4> 9748 +<50d5> 3972 +<50d6> 3969 +<50d7> 9749 +<50d9> 16334 +<50da> 3971 +<50db> 9752 +<50dd> 9754 +<50de> 16433 +<50df> 15101 +<50e0> 9761 +<50e1> 16753 +<50e3> 9760 +<50e4> 9755 +<50e5> 3968 +<50e6> 9747 +<50e7> 3966 +<50e8> 9750 +<50e9> 3977 +<50ea> 9753 +<50ec> 9757 +<50ed> 3970 +<50ee> 3967 +<50ef> 9759 +<50f0> 9758 +<50f1> 3975 +<50f3> 9751 +<50f4> 15593 +<50f5> 4357 +<50f6> 10371 +<50f8> 10368 +<50f9> 4358 +<50fb> 4356 +<50fc> 14802 +<50fd> 10375 +<50fe> 10372 +<50ff> 10365 +<5100> 4355 +<5101> 16434 +<5102> 4359 +<5103> 10366 +<5104> 4354 +<5105> 4362 +<510a> 10376 +<510d> 14790 +<510e> 16436 +<5110> 4749 +<5111> 11012 +<5112> 4746 +<5113> 11009 +<5114> 4748 +<5115> 4750 +<5117> 11010 +endcidchar + +100 begincidchar +<5118> 4747 +<511a> 11011 +<511c> 11008 +<511f> 5045 +<5120> 11582 +<5121> 5046 +<5122> 11580 +<5124> 11581 +<5125> 11579 +<5126> 11578 +<5129> 11583 +<512a> 5044 +<512b> 14766 +<5130> 10367 +<5131> 12046 +<5132> 5047 +<5133> 5493 +<5139> 12998 +<513a> 12997 +<513b> 5820 +<513c> 5819 +<513d> 13326 +<513f> 604 +<5140> 628 +<5141> 682 +<5143> 681 +<5144> 771 +<5145> 770 +<5146> 906 +<5147> 905 +<5148> 907 +<5149> 904 +<514b> 1076 +<514c> 1075 +<514d> 1077 +<5152> 1349 +<5154> 1348 +<5155> 1350 +<5156> 17306 +<5157> 1724 +<5159> 281 +<515a> 7218 +<515b> 282 +<515c> 2575 +<515d> 284 +<515e> 283 +<515f> 8381 +<5160> 16442 +<5161> 285 +<5162> 3978 +<5163> 286 +<5165> 605 +<5167> 683 +<5168> 908 +<5169> 1351 +<516a> 16444 +<516b> 606 +<516c> 686 +<5171> 909 +<5174> 17727 +<5175> 1078 +<5176> 1353 +<5177> 1352 +<5178> 1354 +<5179> 15054 +<517c> 2130 +<5180> 4751 +<5182> 541 +<5186> 17311 +<5187> 6009 +<5188> 14006 +<518d> 910 +<518f> 6195 +<5191> 1726 +<5192> 1725 +<5193> 7220 +<5194> 7219 +<5195> 2576 +<5196> 542 +<5197> 687 +<5198> 6016 +<519a> 16035 +<519c> 17728 +<519e> 6416 +<51a0> 1727 +<51a2> 2133 +<51a7> 16038 +<51a8> 14810 +<51aa> 4752 +<51ab> 543 +<51ac> 774 +<51ae> 18876 +<51b0> 911 +<51b1> 6086 +<51b2> 16456 +<51b3> 16465 +<51b4> 15740 +<51b5> 16402 +<51b8> 16457 +<51b9> 6196 +endcidchar + +100 begincidchar +<51bc> 6417 +<51bd> 1355 +<51be> 6418 +<51c3> 14811 +<51c6> 2136 +<51c7> 16938 +<51c8> 7224 +<51c9> 16459 +<51ca> 7221 +<51cb> 2137 +<51cc> 2135 +<51cd> 2134 +<51ce> 7225 +<51cf> 16460 +<51d0> 7762 +<51d1> 16461 +<51d2> 15789 +<51d3> 16463 +<51d4> 8382 +<51d7> 9077 +<51d8> 9762 +<51db> 17818 +<51dc> 4363 +<51dd> 4753 +<51de> 11013 +<51df> 16975 +<51e0> 607 +<51e1> 621 +<51e2> 18758 +<51e4> 17729 +<51ed> 16468 +<51f0> 2577 +<51f1> 3057 +<51f3> 3979 +<51f4> 16760 +<51f5> 5998 +<51f6> 688 +<51f8> 777 +<51fc> 17819 +<51fd> 1356 +<51fe> 16138 +<5202> 14003 +<5203> 629 +<5205> 17313 +<5209> 6039 +<520a> 778 +<520b> 16473 +<520c> 6038 +<520e> 915 +<5210> 6088 +<5213> 6087 +<5216> 916 +<5217> 912 +<521c> 6197 +<521d> 1675 +<521e> 6198 +<521f> 16224 +<5220> 18736 +<5221> 6199 +<5224> 1082 +<5225> 1081 +<5226> 16474 +<5227> 17314 +<5228> 1085 +<522e> 1362 +<5230> 1361 +<5231> 6423 +<5234> 16123 +<5235> 6419 +<5236> 1363 +<5237> 1359 +<5238> 1358 +<523a> 1360 +<523b> 1357 +<523c> 16475 +<5241> 1364 +<5243> 1729 +<5244> 6765 +<5246> 6422 +<5247> 1734 +<5249> 6766 +<524a> 1730 +<524b> 1733 +<524c> 1732 +<524d> 1731 +<524e> 1728 +<524f> 19120 +<5252> 7228 +<5254> 2140 +<5255> 7231 +<5256> 2138 +<5257> 16477 +<5259> 14820 +<525a> 7227 +<525b> 2141 +<525c> 2139 +<525d> 2142 +<5260> 16169 +<5261> 7226 +<5262> 7232 +endcidchar + +100 begincidchar +<5268> 17945 +<5269> 3061 +<526a> 2578 +<526b> 7763 +<526c> 7765 +<526d> 7764 +<526e> 7766 +<526f> 2579 +<5272> 3058 +<5273> 16195 +<5277> 3531 +<5278> 9079 +<5279> 17315 +<527a> 9078 +<527d> 3532 +<527f> 3530 +<5282> 3981 +<5283> 3980 +<5284> 10102 +<528a> 4368 +<528d> 4367 +<528f> 15807 +<5290> 17821 +<5291> 4754 +<5293> 4755 +<5294> 16478 +<5296> 12412 +<5297> 13000 +<5298> 12999 +<5299> 13327 +<529a> 16232 +<529b> 610 +<529f> 780 +<52a0> 779 +<52a1> 17730 +<52a3> 917 +<52a4> 14821 +<52a6> 6089 +<52a8> 17731 +<52ab> 1086 +<52ac> 1089 +<52b5> 16476 +<52b9> 16479 +<52bb> 1366 +<52bc> 6424 +<52be> 1365 +<52c0> 6767 +<52c1> 1738 +<52c2> 6768 +<52c3> 1737 +<52c5> 16480 +<52c7> 1735 +<52c9> 1736 +<52cc> 16097 +<52cd> 7233 +<52d0> 16649 +<52d1> 16170 +<52d2> 2580 +<52d3> 7768 +<52d5> 2583 +<52d6> 7767 +<52d7> 2767 +<52d8> 2582 +<52d9> 2581 +<52db> 3064 +<52dd> 3063 +<52de> 3062 +<52df> 3533 +<52e0> 16483 +<52e1> 14823 +<52e4> 3535 +<52e6> 3534 +<52e9> 9765 +<52eb> 9766 +<52ef> 10380 +<52f0> 4369 +<52f1> 10379 +<52f3> 4756 +<52f4> 11584 +<52f5> 5048 +<52f7> 12413 +<52f8> 5641 +<52f9> 544 +<52fa> 630 +<52fb> 692 +<52fc> 6017 +<5301> 15737 +<5308> 918 +<5309> 6202 +<530d> 1739 +<530e> 7234 +<530f> 2585 +<5310> 2584 +<5311> 8384 +<5312> 8383 +<5315> 611 +<5316> 695 +<5317> 783 +<5319> 2586 +<531a> 5999 +endcidchar + +100 begincidchar +<531c> 6040 +<531d> 784 +<531f> 6091 +<5320> 920 +<5321> 919 +<5322> 6090 +<5323> 1090 +<5324> 18888 +<5327> 17822 +<532a> 2143 +<532c> 16182 +<532d> 7769 +<532f> 3538 +<5330> 9767 +<5331> 3982 +<5332> 16336 +<5333> 16493 +<5334> 11014 +<5337> 12743 +<5338> 545 +<5339> 696 +<533b> 17732 +<533c> 6427 +<533d> 6769 +<533e> 2589 +<5341> 612 +<5342> 18759 +<5343> 631 +<5344> 363 +<5345> 699 +<5347> 698 +<5348> 697 +<5349> 787 +<534a> 786 +<534c> 6041 +<534d> 6092 +<534e> 17733 +<5351> 1370 +<5352> 1367 +<5353> 1369 +<5354> 1368 +<5357> 1740 +<535a> 3065 +<535c> 613 +<535d> 17665 +<535e> 700 +<535f> 17319 +<5360> 789 +<5361> 788 +<5363> 6203 +<5364> 18442 +<5366> 1371 +<5367> 16077 +<5369> 546 +<536c> 6018 +<536d> 16506 +<536e> 791 +<536f> 790 +<5372> 6204 +<5373> 1091 +<5374> 16507 +<5375> 1092 +<537b> 1741 +<537c> 6770 +<537d> 18689 +<537e> 16509 +<537f> 2144 +<5382> 6000 +<5384> 701 +<538a> 6093 +<5392> 6428 +<5393> 16514 +<5394> 6429 +<5396> 6772 +<5397> 6771 +<5398> 6774 +<5399> 6773 +<539a> 1742 +<539c> 7770 +<539d> 2146 +<539e> 7235 +<539f> 2145 +<53a0> 16516 +<53a2> 15915 +<53a4> 8385 +<53a5> 3066 +<53a6> 16699 +<53a7> 8386 +<53a8> 16702 +<53a9> 17824 +<53aa> 16326 +<53ab> 16517 +<53ac> 9768 +<53ad> 3983 +<53ae> 16518 +<53b0> 17826 +<53b2> 4370 +<53b4> 12414 +<53b6> 547 +<53b9> 6019 +endcidchar + +100 begincidchar +<53bb> 792 +<53c1> 16523 +<53c2> 17318 +<53c3> 2590 +<53c5> 16524 +<53c8> 614 +<53c9> 632 +<53ca> 703 +<53cb> 702 +<53cc> 14518 +<53cd> 704 +<53d0> 14842 +<53d1> 17734 +<53d2> 15933 +<53d4> 1376 +<53d6> 1375 +<53d7> 1377 +<53d8> 17735 +<53d9> 16528 +<53da> 16185 +<53db> 1743 +<53df> 2147 +<53e0> 16531 +<53e1> 11015 +<53e2> 5321 +<53e3> 633 +<53e4> 794 +<53e5> 809 +<53e6> 804 +<53e8> 799 +<53e9> 798 +<53ea> 805 +<53eb> 803 +<53ec> 796 +<53ed> 810 +<53ee> 797 +<53ef> 793 +<53f0> 808 +<53f1> 807 +<53f2> 806 +<53f3> 795 +<53f5> 802 +<53f6> 16534 +<53f7> 14344 +<53f8> 801 +<53fb> 811 +<53fc> 800 +<53fe> 16577 +<5401> 928 +<5403> 934 +<5404> 930 +<5406> 936 +<5407> 6094 +<5408> 933 +<5409> 923 +<540a> 926 +<540b> 929 +<540c> 925 +<540d> 932 +<540e> 935 +<540f> 924 +<5410> 927 +<5411> 931 +<5412> 937 +<5413> 16536 +<5414> 15479 +<5416> 15999 +<5418> 6215 +<5419> 6212 +<541a> 15972 +<541b> 1105 +<541c> 6213 +<541d> 1093 +<541e> 1095 +<541f> 1119 +<5420> 1114 +<5421> 16899 +<5423> 17827 +<5424> 6220 +<5425> 6214 +<5426> 1097 +<5427> 1099 +<5428> 6219 +<5429> 1106 +<542a> 6209 +<542b> 1118 +<542c> 1120 +<542d> 1094 +<542e> 1111 +<542f> 16556 +<5430> 6207 +<5431> 1117 +<5432> 15989 +<5433> 1102 +<5434> 18901 +<5437> 6208 +<5438> 1110 +<5439> 1108 +<543b> 1109 +<543c> 1115 +endcidchar + +100 begincidchar +<543d> 6216 +<543e> 1096 +<5440> 1116 +<5441> 6218 +<5442> 1104 +<5443> 1101 +<5445> 6211 +<5446> 1100 +<5447> 6221 +<5448> 1103 +<544a> 1107 +<544b> 16081 +<544c> 19129 +<544d> 16039 +<544e> 1098 +<544f> 6217 +<5454> 6210 +<5460> 6446 +<5461> 6445 +<5462> 1395 +<5463> 6448 +<5464> 6450 +<5465> 6439 +<5466> 6442 +<5467> 6449 +<5468> 1396 +<5469> 16178 +<546a> 15747 +<546b> 6436 +<546c> 6440 +<546d> 16541 +<546f> 6444 +<5470> 6789 +<5471> 1391 +<5472> 6793 +<5473> 1378 +<5474> 6441 +<5475> 1379 +<5476> 1392 +<5477> 1385 +<5478> 1381 +<547a> 6437 +<547b> 1384 +<547c> 1389 +<547d> 1398 +<547e> 6438 +<547f> 6431 +<5480> 1383 +<5481> 6432 +<5482> 6434 +<5484> 1386 +<5485> 18137 +<5486> 1388 +<5487> 6430 +<5488> 6435 +<548b> 1397 +<548c> 1393 +<548d> 6443 +<548e> 1399 +<548f> 16545 +<5490> 1390 +<5491> 6433 +<5492> 1387 +<5493> 17831 +<5494> 16024 +<5495> 1382 +<5496> 1380 +<5497> 16010 +<5498> 6447 +<549a> 1394 +<549c> 16230 +<549e> 18413 +<54a0> 6788 +<54a1> 6776 +<54a2> 6791 +<54a3> 17832 +<54a4> 16546 +<54a5> 6778 +<54a6> 1750 +<54a7> 1764 +<54a8> 1746 +<54a9> 1763 +<54aa> 1755 +<54ab> 1760 +<54ac> 1744 +<54ad> 6777 +<54ae> 6783 +<54af> 1759 +<54b0> 6795 +<54b1> 1761 +<54b2> 14148 +<54b3> 1751 +<54b4> 17833 +<54b6> 6785 +<54b7> 6782 +<54b8> 1749 +<54b9> 17834 +<54ba> 6775 +<54bb> 1762 +<54bc> 6790 +endcidchar + +100 begincidchar +<54bd> 1754 +<54be> 6792 +<54bf> 1765 +<54c0> 1745 +<54c1> 1756 +<54c2> 1753 +<54c3> 6780 +<54c4> 1757 +<54c7> 1752 +<54c8> 1758 +<54c9> 1748 +<54cb> 14755 +<54cc> 17890 +<54cd> 14848 +<54ce> 1747 +<54cf> 6779 +<54d0> 17835 +<54d6> 6784 +<54da> 18723 +<54de> 6794 +<54e0> 7255 +<54e1> 2160 +<54e2> 7237 +<54e3> 17217 +<54e4> 7242 +<54e5> 2153 +<54e6> 2164 +<54e7> 7240 +<54e8> 2148 +<54e9> 2158 +<54ea> 2163 +<54eb> 7247 +<54ed> 2159 +<54ee> 2162 +<54ef> 17836 +<54f1> 7250 +<54f2> 2154 +<54f3> 7241 +<54fa> 2156 +<54fb> 7252 +<54fc> 2152 +<54fd> 2167 +<54ff> 7244 +<5501> 2150 +<5502> 15564 +<5503> 7257 +<5504> 7245 +<5505> 7249 +<5506> 2155 +<5507> 2166 +<5508> 7246 +<5509> 2161 +<550a> 7251 +<550b> 7258 +<550c> 7785 +<550d> 14963 +<550e> 7256 +<550f> 2168 +<5510> 2149 +<5511> 7248 +<5512> 7239 +<5513> 16041 +<5514> 2157 +<5517> 7238 +<5518> 17837 +<551a> 7243 +<551e> 16040 +<5523> 17838 +<5525> 17161 +<5526> 7236 +<5527> 2165 +<5528> 17839 +<552a> 7777 +<552b> 16538 +<552c> 2609 +<552d> 7791 +<552e> 2607 +<552f> 2604 +<5530> 7782 +<5531> 2600 +<5532> 7786 +<5533> 2611 +<5534> 7776 +<5535> 7781 +<5536> 7780 +<5537> 2151 +<5538> 2606 +<5539> 7789 +<553b> 7792 +<553c> 7773 +<553e> 3084 +<553f> 17321 +<5540> 7793 +<5541> 2612 +<5543> 2598 +<5544> 2595 +<5545> 7784 +<5546> 2592 +<5547> 16554 +<5548> 7790 +endcidchar + +100 begincidchar +<5549> 16488 +<554a> 2599 +<554b> 7794 +<554d> 7774 +<554e> 7788 +<554f> 2602 +<5550> 7775 +<5551> 7778 +<5552> 7783 +<5553> 18762 +<5555> 2603 +<5556> 2601 +<5557> 2613 +<555c> 2608 +<555d> 16544 +<555e> 2596 +<555f> 2748 +<5561> 2597 +<5562> 7779 +<5563> 2610 +<5564> 2605 +<5565> 7787 +<5566> 2594 +<5569> 16031 +<556a> 2593 +<556b> 15150 +<5571> 15302 +<5572> 16011 +<5573> 16164 +<5577> 8391 +<5579> 17245 +<557b> 3067 +<557c> 3070 +<557d> 8402 +<557e> 3090 +<557f> 8405 +<5580> 3068 +<5581> 8398 +<5582> 3074 +<5583> 3080 +<5584> 3355 +<5586> 16558 +<5587> 3078 +<5588> 8395 +<5589> 3091 +<558a> 3071 +<558b> 3079 +<558c> 8403 +<558d> 9095 +<558e> 8408 +<558f> 8396 +<5590> 17166 +<5591> 8387 +<5592> 8400 +<5593> 8394 +<5594> 3077 +<5595> 8406 +<5598> 3073 +<5599> 3093 +<559a> 3086 +<559c> 3075 +<559d> 3072 +<559f> 3083 +<55a1> 8407 +<55a2> 8393 +<55a3> 8399 +<55a4> 8401 +<55a5> 8389 +<55a6> 8404 +<55a7> 3069 +<55a8> 8388 +<55a9> 16559 +<55aa> 3076 +<55ab> 3092 +<55ac> 3088 +<55ad> 8390 +<55ae> 3082 +<55b0> 14581 +<55b1> 3089 +<55b2> 3085 +<55b3> 3081 +<55b4> 14846 +<55b5> 8397 +<55b9> 17892 +<55ba> 16009 +<55bb> 3087 +<55bc> 15811 +<55bf> 9093 +<55c0> 9089 +<55c1> 15951 +<55c2> 9104 +<55c3> 9082 +<55c4> 9091 +<55c7> 3545 +<55c8> 9100 +<55c9> 3555 +<55ca> 9087 +<55cb> 9086 +<55cc> 9084 +<55cd> 9102 +endcidchar + +100 begincidchar +<55ce> 3543 +<55cf> 9096 +<55d0> 9085 +<55d1> 3546 +<55d2> 9094 +<55d3> 3541 +<55d4> 9090 +<55d5> 9097 +<55d6> 9099 +<55d7> 17843 +<55d8> 17323 +<55d9> 9103 +<55da> 3550 +<55db> 9083 +<55dc> 3544 +<55dd> 9088 +<55de> 18661 +<55df> 3539 +<55e1> 3551 +<55e2> 9098 +<55e5> 3554 +<55e6> 3542 +<55e7> 287 +<55e8> 3540 +<55e9> 9092 +<55ea> 15996 +<55ec> 14290 +<55ef> 3549 +<55f0> 16008 +<55f1> 16003 +<55f2> 9101 +<55f5> 18310 +<55f6> 3999 +<55f7> 3994 +<55f9> 9783 +<55fa> 9779 +<55fb> 17958 +<55fc> 9773 +<55fd> 3988 +<55fe> 3984 +<55ff> 9782 +<5600> 3985 +<5601> 9776 +<5602> 9778 +<5604> 9781 +<5605> 16002 +<5606> 3990 +<5608> 3997 +<5609> 3991 +<560c> 9771 +<560f> 9774 +<5610> 3998 +<5611> 16205 +<5612> 9772 +<5613> 9777 +<5614> 3989 +<5615> 9770 +<5616> 3995 +<5617> 3987 +<561b> 3986 +<561c> 9775 +<561d> 9780 +<561e> 15976 +<561f> 3996 +<5620> 16253 +<5621> 17325 +<5622> 15975 +<5623> 18183 +<5625> 15992 +<5627> 9769 +<5629> 4377 +<562a> 10397 +<562c> 10394 +<562d> 15971 +<562e> 4371 +<5632> 4374 +<5633> 10392 +<5634> 4376 +<5635> 10384 +<5636> 4382 +<5637> 16567 +<5638> 10396 +<5639> 4373 +<563a> 10398 +<563b> 4372 +<563d> 10393 +<563e> 10395 +<563f> 4375 +<5640> 10391 +<5641> 10385 +<5642> 10382 +<5643> 15998 +<5645> 8392 +<5646> 10388 +<5648> 10381 +<5649> 10387 +<564a> 10386 +<564c> 10383 +<564d> 16572 +<564e> 4379 +endcidchar + +100 begincidchar +<564f> 16573 +<5650> 18383 +<5652> 17858 +<5653> 4378 +<5654> 17327 +<5657> 4380 +<5658> 10389 +<5659> 4757 +<565a> 10390 +<565d> 16121 +<565e> 11024 +<5660> 11017 +<5661> 14354 +<5662> 4769 +<5663> 11021 +<5664> 4761 +<5665> 4765 +<5666> 11020 +<5668> 4764 +<5669> 4760 +<566a> 4763 +<566b> 4758 +<566c> 4768 +<566d> 11022 +<566e> 11018 +<566f> 4767 +<5670> 11016 +<5671> 4766 +<5672> 11023 +<5673> 11019 +<5674> 4381 +<5676> 4770 +<5677> 11025 +<5678> 4762 +<5679> 4759 +<567a> 15749 +<567b> 16055 +<567c> 16109 +<567e> 11591 +<567f> 11593 +<5680> 5050 +<5681> 11594 +<5682> 11592 +<5683> 11590 +<5684> 11589 +<5685> 5052 +<5686> 11588 +<5687> 5053 +<5689> 17960 +<568a> 14665 +<568b> 15948 +<568e> 5049 +<568f> 5054 +<5690> 5051 +<5692> 14758 +<5693> 11585 +<5695> 5322 +<5697> 12051 +<5698> 12049 +<5699> 12054 +<569a> 12052 +<569c> 12050 +<569d> 12053 +<569e> 14756 +<569f> 14664 +<56a1> 17259 +<56a4> 15560 +<56a5> 5494 +<56a8> 5495 +<56aa> 12419 +<56ab> 12415 +<56ac> 12420 +<56ad> 12416 +<56ae> 5323 +<56af> 17911 +<56b1> 17983 +<56b2> 12744 +<56b3> 12746 +<56b4> 5644 +<56b5> 12745 +<56b6> 5643 +<56b7> 5642 +<56b9> 18543 +<56bc> 5645 +<56bf> 15965 +<56c0> 5739 +<56c1> 5738 +<56c2> 5740 +<56c3> 13001 +<56c5> 13177 +<56c6> 13176 +<56c8> 5821 +<56c9> 5823 +<56ca> 5822 +<56cb> 13178 +<56cc> 5878 +<56cd> 13441 +<56d1> 5919 +<56d3> 13440 +<56d4> 13513 +endcidchar + +100 begincidchar +<56d6> 18570 +<56d7> 6005 +<56da> 813 +<56db> 812 +<56dd> 940 +<56de> 939 +<56df> 6096 +<56e0> 938 +<56e1> 6095 +<56e2> 17736 +<56e4> 1123 +<56e5> 6224 +<56e7> 6223 +<56ea> 1121 +<56eb> 1124 +<56ed> 16580 +<56ee> 6222 +<56ef> 16579 +<56f0> 1122 +<56f1> 16575 +<56f7> 6451 +<56f9> 6452 +<56fa> 1400 +<56fb> 19002 +<56fd> 15716 +<56ff> 1766 +<5700> 16578 +<5707> 7796 +<5708> 2614 +<5709> 2616 +<570a> 7795 +<570b> 2615 +<570c> 8409 +<570d> 3094 +<5714> 9105 +<5715> 15926 +<5716> 4001 +<5718> 4000 +<571a> 10399 +<571b> 11027 +<571c> 11026 +<571d> 14850 +<571e> 13573 +<571f> 634 +<5720> 6020 +<5728> 943 +<5729> 947 +<572a> 6098 +<572c> 945 +<572d> 944 +<572e> 6097 +<572f> 946 +<5730> 942 +<5732> 15097 +<5733> 941 +<5734> 6099 +<573b> 1134 +<573d> 18950 +<573e> 1131 +<573f> 18517 +<5740> 1127 +<5741> 6225 +<5742> 16588 +<5743> 16606 +<5745> 6226 +<5746> 16584 +<5747> 1129 +<5749> 6228 +<574a> 1125 +<574b> 6229 +<574c> 6227 +<574d> 1128 +<574e> 1130 +<574f> 1133 +<5750> 1132 +<5751> 1126 +<5752> 6230 +<5754> 18309 +<5757> 18406 +<575b> 14722 +<575f> 16319 +<5761> 1405 +<5762> 6465 +<5764> 1407 +<5766> 1406 +<5767> 16171 +<5768> 6466 +<5769> 1404 +<576a> 1403 +<576b> 6456 +<576d> 6455 +<576f> 6453 +<5770> 6458 +<5771> 6457 +<5772> 6454 +<5775> 6461 +<5776> 6459 +<5777> 1402 +<577a> 18722 +<577b> 6462 +endcidchar + +100 begincidchar +<577c> 1408 +<577d> 6467 +<577e> 18140 +<577f> 14855 +<5780> 6460 +<5782> 1767 +<5783> 1401 +<5788> 18507 +<578a> 15483 +<578b> 1768 +<578c> 6800 +<578d> 14854 +<578f> 6806 +<5790> 16742 +<5793> 1774 +<5794> 6804 +<5795> 6810 +<5797> 6801 +<5798> 6805 +<5799> 6807 +<579a> 6809 +<579b> 6803 +<579c> 17928 +<579d> 6802 +<57a0> 1769 +<57a1> 18532 +<57a2> 1771 +<57a3> 1770 +<57a4> 6799 +<57a5> 6808 +<57a7> 18708 +<57aa> 18693 +<57ae> 1773 +<57b3> 19127 +<57b4> 18241 +<57b5> 6796 +<57b6> 7270 +<57b8> 7269 +<57b9> 7274 +<57ba> 7265 +<57bb> 15481 +<57bc> 7268 +<57bd> 7267 +<57be> 14124 +<57bf> 7271 +<57c1> 7275 +<57c2> 2171 +<57c3> 2174 +<57c4> 15195 +<57c6> 7266 +<57c7> 7272 +<57c8> 15627 +<57cb> 2173 +<57cc> 7261 +<57ce> 1772 +<57cf> 7810 +<57d0> 7273 +<57d2> 7264 +<57d4> 2172 +<57d5> 7263 +<57d7> 15485 +<57dc> 7801 +<57dd> 14853 +<57de> 16129 +<57df> 2617 +<57e0> 2621 +<57e1> 7817 +<57e2> 7799 +<57e3> 7813 +<57e4> 2622 +<57e5> 7815 +<57e6> 16591 +<57e7> 7821 +<57e9> 7825 +<57ec> 7816 +<57ed> 7804 +<57ee> 7812 +<57ef> 18260 +<57f0> 7826 +<57f1> 7824 +<57f2> 7814 +<57f3> 7809 +<57f4> 7802 +<57f5> 8417 +<57f6> 7800 +<57f7> 2626 +<57f8> 7807 +<57f9> 2627 +<57fa> 2623 +<57fb> 7797 +<57fc> 7819 +<57fd> 7805 +<57fe> 16527 +<5800> 7803 +<5801> 7822 +<5802> 2624 +<5803> 16593 +<5804> 7828 +<5805> 2618 +<5806> 2620 +endcidchar + +100 begincidchar +<5807> 7811 +<5808> 7806 +<5809> 2175 +<580a> 2619 +<580b> 7808 +<580c> 7823 +<580d> 7827 +<580e> 7818 +<5810> 7820 +<5812> 15626 +<5814> 7798 +<5818> 19132 +<5819> 8412 +<581b> 8421 +<581c> 8420 +<581d> 3102 +<581e> 8413 +<581f> 16598 +<5820> 3103 +<5821> 3101 +<5822> 15400 +<5823> 8415 +<5824> 3098 +<5825> 8419 +<5826> 16596 +<5827> 8414 +<5828> 8416 +<5829> 8410 +<582a> 3096 +<582c> 8429 +<582d> 8428 +<582e> 8425 +<582f> 3095 +<5832> 7262 +<5833> 8422 +<5834> 3097 +<5835> 2625 +<5836> 8424 +<5837> 8411 +<5838> 8427 +<5839> 8426 +<583a> 15730 +<583b> 8430 +<583d> 9119 +<583f> 8423 +<5840> 15746 +<5844> 18363 +<5847> 15042 +<5848> 8418 +<5849> 9111 +<584a> 3567 +<584b> 3570 +<584c> 3565 +<584d> 9110 +<584e> 9114 +<584f> 9109 +<5851> 3559 +<5852> 3569 +<5853> 9106 +<5854> 3563 +<5855> 9113 +<5857> 3561 +<5858> 3560 +<5859> 9116 +<585a> 3562 +<585b> 9118 +<585c> 18761 +<585d> 9115 +<585e> 3558 +<585f> 17375 +<5862> 3568 +<5863> 9120 +<5864> 9108 +<5865> 9117 +<5868> 9107 +<5869> 15717 +<586b> 3564 +<586c> 14746 +<586d> 3566 +<586f> 9112 +<5871> 9121 +<5872> 15398 +<5873> 17237 +<5874> 9791 +<5875> 4002 +<5876> 9797 +<5879> 4007 +<587a> 9793 +<587b> 9800 +<587c> 9785 +<587d> 4009 +<587e> 4003 +<587f> 9790 +<5880> 4385 +<5881> 9789 +<5882> 9798 +<5883> 4004 +<5885> 4008 +<5886> 9788 +<5887> 9794 +endcidchar + +100 begincidchar +<5888> 9799 +<5889> 9784 +<588a> 4006 +<588b> 9792 +<588e> 9796 +<588f> 9802 +<5890> 9786 +<5891> 9795 +<5892> 18903 +<5893> 4005 +<5894> 9801 +<5896> 19108 +<5898> 9787 +<5899> 17944 +<589a> 18691 +<589c> 4389 +<589d> 10401 +<589e> 4387 +<589f> 4386 +<58a0> 10403 +<58a1> 10408 +<58a3> 10404 +<58a5> 10407 +<58a6> 4392 +<58a7> 16107 +<58a8> 4744 +<58a9> 4391 +<58aa> 16599 +<58ab> 10400 +<58ac> 10406 +<58ae> 4390 +<58af> 10405 +<58b0> 14244 +<58b1> 10402 +<58b3> 4388 +<58b5> 18496 +<58b6> 15869 +<58ba> 11032 +<58bb> 14059 +<58bc> 11034 +<58bd> 11029 +<58be> 4772 +<58bf> 11031 +<58c1> 4771 +<58c2> 11033 +<58c5> 4774 +<58c6> 11035 +<58c7> 4773 +<58c8> 11028 +<58c9> 11030 +<58cb> 14857 +<58ce> 5058 +<58cf> 11597 +<58d0> 18904 +<58d1> 5057 +<58d2> 11598 +<58d3> 5056 +<58d4> 11596 +<58d5> 5055 +<58d6> 11595 +<58d8> 5325 +<58d9> 5324 +<58da> 12421 +<58db> 12423 +<58dc> 16602 +<58dd> 12422 +<58e0> 16601 +<58e2> 5498 +<58e3> 12747 +<58e4> 5646 +<58e7> 13329 +<58e8> 13328 +<58e9> 5920 +<58eb> 635 +<58ec> 705 +<58ef> 1135 +<58f0> 17737 +<58f2> 15720 +<58f3> 15482 +<58f4> 6811 +<58fb> 16604 +<58fc> 9122 +<58fd> 4010 +<58fe> 9803 +<58ff> 10409 +<5902> 548 +<5903> 6021 +<5904> 17738 +<5905> 17817 +<5906> 6231 +<5907> 17739 +<590a> 548 +<590c> 6468 +<590d> 6812 +<590e> 7276 +<590f> 2176 +<5911> 17012 +<5912> 12424 +<5914> 5741 +<5915> 636 +endcidchar + +100 begincidchar +<5916> 814 +<5917> 6044 +<591c> 1409 +<591d> 19004 +<591f> 16611 +<5920> 2628 +<5922> 4012 +<5924> 4013 +<5925> 4011 +<5927> 637 +<5929> 706 +<592a> 708 +<592b> 707 +<592c> 6022 +<592d> 709 +<592e> 815 +<592f> 6045 +<5931> 816 +<5932> 17740 +<5934> 17741 +<593c> 6100 +<593e> 1136 +<5940> 6232 +<5944> 1413 +<5945> 6469 +<5949> 1410 +<594a> 7277 +<594e> 1778 +<594f> 1777 +<5950> 1779 +<5951> 1776 +<5953> 6813 +<5954> 1414 +<5955> 1775 +<595a> 2179 +<595c> 7829 +<5960> 3106 +<5961> 8431 +<5962> 2629 +<5965> 18514 +<5967> 3571 +<5969> 4015 +<596a> 4014 +<596b> 9804 +<596d> 4393 +<596e> 4775 +<5970> 12055 +<5971> 13179 +<5972> 13330 +<5973> 638 +<5974> 817 +<5975> 15978 +<5976> 818 +<5977> 6106 +<5978> 953 +<5979> 956 +<597b> 6104 +<597c> 6102 +<597d> 955 +<597e> 6105 +<597f> 6107 +<5980> 6101 +<5981> 958 +<5982> 957 +<5983> 954 +<5984> 952 +<5985> 6103 +<5989> 15664 +<598a> 1147 +<598d> 1144 +<598e> 6237 +<598f> 6240 +<5990> 6239 +<5992> 1138 +<5993> 1146 +<5994> 15513 +<5996> 1143 +<5997> 6236 +<5998> 6234 +<5999> 1142 +<599a> 15280 +<599d> 1137 +<599e> 1140 +<599f> 15791 +<59a0> 6235 +<59a1> 6242 +<59a2> 6238 +<59a3> 1141 +<59a4> 1145 +<59a5> 1148 +<59a6> 6233 +<59a7> 6241 +<59a8> 1139 +<59ac> 15745 +<59ae> 1419 +<59af> 1427 +<59b0> 15576 +<59b1> 6481 +<59b2> 6474 +<59b3> 1428 +endcidchar + +100 begincidchar +<59b4> 6485 +<59b5> 6470 +<59b6> 6477 +<59b7> 16173 +<59b8> 14864 +<59b9> 1418 +<59ba> 6471 +<59bb> 1416 +<59bc> 6478 +<59bd> 6482 +<59be> 1415 +<59bf> 19052 +<59c0> 6483 +<59c1> 6476 +<59c3> 6479 +<59c4> 15620 +<59c5> 1430 +<59c6> 1421 +<59c7> 6486 +<59c8> 6484 +<59c9> 16620 +<59ca> 1426 +<59cb> 1424 +<59cc> 6475 +<59cd> 1423 +<59ce> 6473 +<59cf> 6472 +<59d0> 1422 +<59d1> 1420 +<59d2> 1429 +<59d3> 1425 +<59d4> 1417 +<59d6> 6480 +<59d8> 1781 +<59d9> 16625 +<59da> 1788 +<59db> 6827 +<59dc> 1780 +<59dd> 6819 +<59de> 6815 +<59e0> 6831 +<59e1> 6814 +<59e3> 1783 +<59e4> 6824 +<59e5> 1786 +<59e6> 1789 +<59e8> 1784 +<59e9> 6828 +<59ea> 1787 +<59eb> 15705 +<59ec> 2186 +<59ed> 6834 +<59ee> 6816 +<59ef> 15672 +<59f0> 15282 +<59f1> 6818 +<59f2> 6825 +<59f3> 6829 +<59f4> 6833 +<59f5> 6830 +<59f6> 6823 +<59f7> 6826 +<59f8> 15946 +<59f9> 16632 +<59fa> 6820 +<59fb> 1791 +<59fc> 6822 +<59fd> 6821 +<59fe> 6832 +<59ff> 1782 +<5a00> 6817 +<5a01> 1790 +<5a02> 15245 +<5a03> 1785 +<5a09> 2192 +<5a0a> 7285 +<5a0b> 15497 +<5a0c> 2191 +<5a0d> 15160 +<5a0f> 7283 +<5a11> 2180 +<5a12> 14867 +<5a13> 2185 +<5a15> 7282 +<5a16> 7279 +<5a17> 7284 +<5a18> 2181 +<5a19> 7278 +<5a1a> 18946 +<5a1b> 2184 +<5a1c> 2182 +<5a1e> 7286 +<5a1f> 2183 +<5a20> 2187 +<5a21> 14875 +<5a23> 2188 +<5a24> 16616 +<5a25> 2190 +<5a27> 15841 +<5a29> 2189 +endcidchar + +100 begincidchar +<5a2a> 15163 +<5a2b> 15680 +<5a2c> 14863 +<5a33> 7287 +<5a35> 7836 +<5a36> 2630 +<5a37> 8445 +<5a38> 7835 +<5a39> 7854 +<5a3c> 2636 +<5a3d> 15040 +<5a3e> 7852 +<5a40> 2635 +<5a41> 2631 +<5a42> 7861 +<5a43> 7845 +<5a44> 7848 +<5a45> 14615 +<5a46> 2639 +<5a47> 7858 +<5a48> 7850 +<5a49> 2632 +<5a4a> 2640 +<5a4c> 7855 +<5a4d> 7853 +<5a50> 7838 +<5a51> 7859 +<5a52> 7847 +<5a53> 7842 +<5a54> 17923 +<5a55> 7832 +<5a56> 7860 +<5a57> 7844 +<5a58> 7831 +<5a59> 15156 +<5a5a> 2638 +<5a5b> 7849 +<5a5c> 7862 +<5a5d> 7846 +<5a5e> 7834 +<5a5f> 7839 +<5a60> 7830 +<5a61> 15667 +<5a62> 2637 +<5a63> 16635 +<5a64> 7843 +<5a65> 7840 +<5a66> 2633 +<5a67> 7833 +<5a68> 14775 +<5a69> 7857 +<5a6a> 2634 +<5a6b> 14914 +<5a6c> 7841 +<5a6d> 7837 +<5a6e> 15679 +<5a70> 7856 +<5a71> 15668 +<5a77> 3107 +<5a78> 8438 +<5a79> 15585 +<5a7a> 8435 +<5a7b> 8452 +<5a7c> 8440 +<5a7d> 8453 +<5a7e> 14865 +<5a7f> 3109 +<5a81> 14877 +<5a82> 15665 +<5a83> 8449 +<5a84> 8446 +<5a86> 15233 +<5a88> 16995 +<5a8a> 8447 +<5a8b> 8450 +<5a8c> 8454 +<5a8e> 7851 +<5a8f> 8456 +<5a90> 9142 +<5a91> 16949 +<5a92> 3110 +<5a93> 8457 +<5a94> 8433 +<5a95> 8443 +<5a96> 16640 +<5a97> 8448 +<5a99> 14858 +<5a9a> 3108 +<5a9b> 3111 +<5a9c> 8455 +<5a9d> 8458 +<5a9e> 8437 +<5a9f> 8434 +<5aa0> 16754 +<5aa1> 15580 +<5aa2> 8436 +<5aa4> 19011 +<5aa5> 8441 +<5aa6> 8439 +<5aa7> 3112 +endcidchar + +100 begincidchar +<5aa9> 8451 +<5aab> 16634 +<5aac> 8442 +<5aae> 8444 +<5aaf> 8432 +<5ab0> 9130 +<5ab1> 9128 +<5ab2> 3580 +<5ab3> 3578 +<5ab4> 9138 +<5ab5> 9129 +<5ab6> 9139 +<5ab7> 9135 +<5ab8> 9127 +<5ab9> 9141 +<5aba> 9126 +<5abb> 9133 +<5abc> 3577 +<5abd> 3576 +<5abe> 3575 +<5abf> 9131 +<5ac0> 9136 +<5ac1> 3572 +<5ac2> 3579 +<5ac3> 14486 +<5ac4> 9124 +<5ac6> 9134 +<5ac7> 9123 +<5ac8> 9132 +<5ac9> 3573 +<5aca> 9137 +<5acb> 9125 +<5acc> 3574 +<5acd> 9140 +<5ace> 15496 +<5acf> 14866 +<5ad1> 19014 +<5ad3> 16642 +<5ad5> 9808 +<5ad6> 4020 +<5ad7> 4019 +<5ad8> 4021 +<5ad9> 9820 +<5ada> 9810 +<5adb> 9816 +<5adc> 9805 +<5add> 9819 +<5ade> 9818 +<5adf> 9822 +<5ae0> 9815 +<5ae1> 4016 +<5ae2> 9814 +<5ae3> 4022 +<5ae4> 15238 +<5ae5> 9807 +<5ae6> 4017 +<5ae8> 9821 +<5ae9> 4018 +<5aea> 9809 +<5aeb> 9812 +<5aec> 9817 +<5aed> 9811 +<5aee> 9806 +<5af0> 16103 +<5af2> 14325 +<5af3> 9813 +<5af4> 10411 +<5af5> 4397 +<5af6> 10414 +<5af7> 10413 +<5af8> 10416 +<5af9> 10418 +<5afa> 14062 +<5afb> 4395 +<5afd> 10412 +<5afe> 15389 +<5aff> 10410 +<5b01> 10419 +<5b02> 10417 +<5b03> 10415 +<5b05> 10421 +<5b07> 10420 +<5b08> 4399 +<5b09> 4394 +<5b0b> 4396 +<5b0c> 4398 +<5b0d> 18687 +<5b0f> 10422 +<5b10> 11042 +<5b11> 15350 +<5b13> 11041 +<5b14> 11040 +<5b15> 18921 +<5b16> 11043 +<5b17> 11036 +<5b19> 11037 +<5b1a> 11045 +<5b1b> 11038 +<5b1d> 4776 +<5b1e> 11047 +endcidchar + +100 begincidchar +<5b1f> 18753 +<5b20> 11046 +<5b21> 11039 +<5b23> 11602 +<5b24> 5061 +<5b25> 11600 +<5b26> 11605 +<5b27> 11604 +<5b28> 11044 +<5b2a> 5060 +<5b2b> 15236 +<5b2c> 11603 +<5b2d> 11599 +<5b2e> 11607 +<5b2f> 11606 +<5b30> 5059 +<5b32> 11601 +<5b34> 4777 +<5b38> 5326 +<5b3c> 12056 +<5b40> 5647 +<5b41> 14536 +<5b43> 5648 +<5b44> 14916 +<5b45> 12748 +<5b46> 17074 +<5b47> 13005 +<5b48> 13004 +<5b4a> 14541 +<5b4d> 13331 +<5b4e> 13442 +<5b4f> 14897 +<5b53> 641 +<5b54> 710 +<5b55> 819 +<5b56> 6108 +<5b5c> 1150 +<5b5d> 1149 +<5b5f> 1431 +<5b62> 6487 +<5b63> 1433 +<5b64> 1432 +<5b65> 6488 +<5b66> 17742 +<5b68> 17949 +<5b69> 1792 +<5b6b> 2193 +<5b6c> 7288 +<5b6d> 15967 +<5b6e> 7864 +<5b70> 2641 +<5b71> 3114 +<5b72> 7863 +<5b73> 3113 +<5b74> 14130 +<5b75> 4023 +<5b76> 16650 +<5b77> 9823 +<5b78> 4778 +<5b7a> 5062 +<5b7b> 11608 +<5b7c> 16652 +<5b7d> 5649 +<5b7f> 5824 +<5b80> 549 +<5b81> 6046 +<5b82> 16452 +<5b83> 820 +<5b84> 6047 +<5b85> 963 +<5b89> 964 +<5b8b> 1154 +<5b8c> 1153 +<5b8e> 6243 +<5b8f> 1155 +<5b90> 18665 +<5b92> 6244 +<5b93> 6489 +<5b95> 6490 +<5b96> 18962 +<5b97> 1434 +<5b98> 1436 +<5b99> 1438 +<5b9a> 1435 +<5b9b> 1439 +<5b9c> 1437 +<5b9d> 16662 +<5ba2> 1796 +<5ba3> 1793 +<5ba4> 1795 +<5ba5> 1797 +<5ba6> 1794 +<5ba7> 7289 +<5ba8> 6835 +<5baa> 16763 +<5bac> 7291 +<5bad> 7290 +<5bae> 2199 +<5bb0> 2195 +<5bb3> 2196 +endcidchar + +100 begincidchar +<5bb4> 2198 +<5bb5> 2200 +<5bb6> 2197 +<5bb7> 19015 +<5bb8> 2202 +<5bb9> 2201 +<5bbf> 2646 +<5bc0> 7866 +<5bc1> 7865 +<5bc2> 2645 +<5bc3> 16165 +<5bc4> 2644 +<5bc5> 2643 +<5bc6> 2647 +<5bc7> 2642 +<5bca> 8464 +<5bcb> 8461 +<5bcc> 3116 +<5bcd> 8460 +<5bce> 8465 +<5bd0> 3118 +<5bd1> 8463 +<5bd2> 3115 +<5bd3> 3117 +<5bd4> 8462 +<5bd5> 16657 +<5bd6> 9143 +<5bd7> 17083 +<5bdb> 19009 +<5bde> 4024 +<5bdf> 4032 +<5be0> 9824 +<5be1> 4026 +<5be2> 4030 +<5be3> 9825 +<5be4> 4031 +<5be7> 4025 +<5be8> 4029 +<5be9> 4402 +<5bea> 8459 +<5beb> 4403 +<5bec> 4401 +<5bee> 4400 +<5bef> 11048 +<5bf0> 4779 +<5bf3> 16661 +<5bf5> 5499 +<5bf6> 5650 +<5bf8> 642 +<5bfa> 965 +<5bff> 16605 +<5c01> 1798 +<5c03> 7292 +<5c04> 2203 +<5c05> 16664 +<5c07> 2650 +<5c08> 2649 +<5c09> 2648 +<5c0c> 8466 +<5c0d> 4033 +<5c0e> 4780 +<5c0f> 643 +<5c10> 6023 +<5c11> 711 +<5c12> 6048 +<5c13> 16666 +<5c14> 16668 +<5c15> 6109 +<5c16> 966 +<5c1a> 1440 +<5c1c> 17898 +<5c1e> 14889 +<5c1f> 9146 +<5c20> 15753 +<5c22> 644 +<5c23> 17640 +<5c24> 712 +<5c25> 6110 +<5c28> 6245 +<5c2a> 6246 +<5c2c> 1156 +<5c30> 8467 +<5c31> 3121 +<5c33> 9147 +<5c37> 5063 +<5c38> 645 +<5c39> 665 +<5c3a> 713 +<5c3b> 6049 +<5c3c> 821 +<5c3e> 1160 +<5c3f> 1159 +<5c44> 6491 +<5c47> 6492 +<5c48> 1441 +<5c49> 16671 +<5c4a> 16220 +<5c4b> 1802 +<5c4c> 6836 +<5c4d> 1801 +endcidchar + +100 begincidchar +<5c50> 2206 +<5c51> 2204 +<5c53> 16130 +<5c54> 7294 +<5c55> 2205 +<5c56> 7293 +<5c58> 2194 +<5c59> 7867 +<5c5e> 15719 +<5c60> 2651 +<5c62> 4034 +<5c63> 9826 +<5c67> 10423 +<5c68> 5064 +<5c6c> 5742 +<5c6d> 13443 +<5c6e> 6006 +<5c6f> 714 +<5c71> 646 +<5c73> 6051 +<5c74> 6050 +<5c78> 19035 +<5c79> 967 +<5c7c> 6111 +<5c7e> 6114 +<5c85> 16673 +<5c86> 6254 +<5c88> 6249 +<5c89> 6251 +<5c8a> 6253 +<5c8b> 6250 +<5c8c> 1164 +<5c8d> 6247 +<5c8f> 6248 +<5c92> 6252 +<5c93> 6255 +<5c94> 1163 +<5c95> 6256 +<5c99> 18060 +<5c9a> 17745 +<5c9c> 18778 +<5c9d> 6506 +<5c9e> 14890 +<5c9f> 6500 +<5ca0> 6495 +<5ca1> 1445 +<5ca2> 6503 +<5ca3> 6501 +<5ca4> 6494 +<5ca5> 6507 +<5ca6> 6510 +<5ca7> 6505 +<5ca8> 6498 +<5ca9> 1447 +<5caa> 6504 +<5cab> 1448 +<5cac> 6499 +<5cad> 6502 +<5cae> 6493 +<5caf> 6497 +<5cb0> 6509 +<5cb1> 1449 +<5cb3> 1450 +<5cb5> 6496 +<5cb6> 6508 +<5cb7> 1444 +<5cb8> 1446 +<5cba> 16683 +<5cc1> 17336 +<5cc2> 15692 +<5cc6> 6853 +<5cc7> 6846 +<5cc8> 6852 +<5cc9> 6845 +<5cca> 6847 +<5ccb> 6841 +<5ccc> 6839 +<5cce> 6854 +<5ccf> 6851 +<5cd0> 6837 +<5cd1> 16147 +<5cd2> 1804 +<5cd5> 19032 +<5cd6> 6848 +<5cd7> 6840 +<5cd8> 6838 +<5cd9> 1803 +<5cda> 6844 +<5cdb> 6842 +<5cde> 6843 +<5cdf> 6855 +<5ce5> 17975 +<5ce8> 2211 +<5ce9> 16674 +<5cea> 2210 +<5cec> 7295 +<5ced> 2207 +<5cee> 7297 +<5cef> 16675 +<5cf0> 2212 +endcidchar + +100 begincidchar +<5cf1> 7298 +<5cf4> 2215 +<5cf5> 18857 +<5cf6> 2213 +<5cf7> 7299 +<5cf8> 6856 +<5cf9> 7301 +<5cfb> 2209 +<5cfc> 19016 +<5cfd> 2208 +<5cff> 7296 +<5d00> 7300 +<5d01> 2214 +<5d06> 2655 +<5d07> 2654 +<5d0b> 7869 +<5d0c> 7873 +<5d0d> 7875 +<5d0e> 2656 +<5d0f> 7878 +<5d10> 16679 +<5d11> 2660 +<5d12> 7880 +<5d14> 2662 +<5d15> 17337 +<5d16> 2658 +<5d17> 2666 +<5d18> 16680 +<5d19> 2663 +<5d1a> 7871 +<5d1b> 2657 +<5d1d> 7870 +<5d1e> 7868 +<5d1f> 7882 +<5d20> 7872 +<5d22> 2659 +<5d23> 7881 +<5d24> 2664 +<5d25> 7877 +<5d26> 7876 +<5d27> 2665 +<5d28> 7874 +<5d29> 2661 +<5d2c> 15863 +<5d2e> 7883 +<5d2f> 18131 +<5d30> 7879 +<5d31> 8482 +<5d32> 8489 +<5d33> 8478 +<5d34> 3124 +<5d35> 8474 +<5d36> 8490 +<5d37> 8468 +<5d38> 8487 +<5d39> 8485 +<5d3a> 8479 +<5d3c> 8488 +<5d3d> 8481 +<5d3e> 17961 +<5d3f> 8473 +<5d40> 8491 +<5d41> 8471 +<5d42> 8484 +<5d43> 8469 +<5d45> 8492 +<5d46> 16681 +<5d47> 3125 +<5d48> 17962 +<5d49> 8486 +<5d4a> 9150 +<5d4b> 8472 +<5d4c> 3122 +<5d4e> 8476 +<5d50> 3123 +<5d51> 8475 +<5d52> 8480 +<5d55> 8477 +<5d56> 17338 +<5d57> 16330 +<5d59> 8483 +<5d5b> 15829 +<5d5e> 9154 +<5d62> 9157 +<5d63> 9149 +<5d65> 9151 +<5d67> 9156 +<5d68> 9155 +<5d69> 3581 +<5d6b> 8470 +<5d6c> 9153 +<5d6f> 3582 +<5d70> 18148 +<5d71> 9148 +<5d72> 9152 +<5d74> 16111 +<5d77> 9833 +<5d78> 19038 +<5d79> 9840 +<5d7a> 9831 +endcidchar + +100 begincidchar +<5d7b> 18957 +<5d7c> 9838 +<5d7d> 9829 +<5d7e> 9837 +<5d7f> 9841 +<5d80> 9828 +<5d81> 9832 +<5d82> 9827 +<5d84> 4035 +<5d85> 15924 +<5d86> 9830 +<5d87> 4036 +<5d88> 9836 +<5d89> 9835 +<5d8a> 9834 +<5d8b> 16676 +<5d8d> 9839 +<5d8e> 16140 +<5d92> 10427 +<5d93> 10429 +<5d94> 4407 +<5d95> 10430 +<5d97> 10425 +<5d99> 10424 +<5d9a> 10434 +<5d9c> 10432 +<5d9d> 4406 +<5d9e> 10435 +<5d9f> 10426 +<5da0> 10431 +<5da1> 10433 +<5da2> 10428 +<5da4> 17965 +<5da7> 11052 +<5da8> 11057 +<5da9> 11051 +<5daa> 11056 +<5dab> 15929 +<5dac> 11049 +<5dad> 11059 +<5dae> 11055 +<5daf> 11060 +<5db0> 11054 +<5db1> 11050 +<5db2> 11058 +<5db4> 11061 +<5db5> 11053 +<5db6> 16728 +<5db7> 11611 +<5db8> 5068 +<5db9> 17966 +<5dba> 5066 +<5dbc> 5065 +<5dbd> 5067 +<5dc0> 12059 +<5dc1> 15359 +<5dc2> 12323 +<5dc3> 12428 +<5dc9> 5651 +<5dcb> 13006 +<5dcd> 5743 +<5dcf> 13007 +<5dd1> 13183 +<5dd2> 5826 +<5dd4> 5825 +<5dd5> 13182 +<5dd6> 5879 +<5dd7> 16684 +<5dd8> 13332 +<5ddb> 550 +<5ddd> 647 +<5dde> 968 +<5ddf> 6115 +<5de0> 6257 +<5de1> 1306 +<5de2> 2667 +<5de5> 648 +<5de6> 824 +<5de7> 823 +<5de8> 822 +<5deb> 1165 +<5dee> 2216 +<5df0> 9158 +<5df4> 715 +<5df5> 16225 +<5df7> 1805 +<5df9> 6857 +<5dfd> 3126 +<5dfe> 652 +<5dff> 6024 +<5e04> 6052 +<5e06> 969 +<5e09> 16704 +<5e0a> 6258 +<5e0b> 15754 +<5e0c> 1166 +<5e0e> 6259 +<5e11> 1456 +<5e12> 16174 +<5e14> 6512 +endcidchar + +100 begincidchar +<5e15> 1454 +<5e16> 1453 +<5e17> 6511 +<5e18> 1451 +<5e19> 6513 +<5e1a> 1452 +<5e1b> 1455 +<5e1d> 1806 +<5e1f> 1808 +<5e20> 6861 +<5e24> 6862 +<5e25> 1807 +<5e28> 7303 +<5e29> 7302 +<5e2b> 2218 +<5e2d> 2217 +<5e2e> 16693 +<5e33> 2670 +<5e34> 7885 +<5e36> 2669 +<5e37> 2671 +<5e38> 2668 +<5e3d> 3128 +<5e3e> 7884 +<5e40> 3129 +<5e41> 8494 +<5e42> 17312 +<5e43> 3130 +<5e44> 8493 +<5e45> 3127 +<5e48> 14892 +<5e4a> 9161 +<5e4b> 9163 +<5e4c> 3583 +<5e4d> 9162 +<5e4e> 9160 +<5e4f> 9159 +<5e53> 9844 +<5e54> 4041 +<5e55> 4039 +<5e57> 4040 +<5e5b> 4037 +<5e5c> 10439 +<5e5d> 10437 +<5e5e> 14891 +<5e5f> 4409 +<5e60> 10438 +<5e61> 4410 +<5e62> 4408 +<5e63> 4038 +<5e66> 11064 +<5e69> 10436 +<5e6a> 11613 +<5e6b> 5069 +<5e6c> 11612 +<5e6f> 11065 +<5e70> 12429 +<5e72> 653 +<5e73> 827 +<5e74> 971 +<5e75> 6116 +<5e76> 970 +<5e78> 1457 +<5e79> 3584 +<5e7a> 551 +<5e7b> 716 +<5e7c> 828 +<5e7d> 1809 +<5e7e> 3131 +<5e7f> 552 +<5e80> 6053 +<5e82> 6054 +<5e83> 16648 +<5e84> 6117 +<5e86> 17746 +<5e87> 1168 +<5e88> 6263 +<5e89> 6261 +<5e8a> 1169 +<5e8b> 6260 +<5e8c> 6262 +<5e8d> 6264 +<5e8f> 1167 +<5e92> 18906 +<5e97> 1459 +<5e99> 18907 +<5e9a> 1458 +<5e9b> 6866 +<5e9c> 1460 +<5ea0> 1810 +<5ea2> 6865 +<5ea3> 6867 +<5ea4> 6864 +<5ea5> 6868 +<5ea6> 1811 +<5ea7> 2221 +<5ea8> 7304 +<5eaa> 7306 +<5eab> 2219 +<5eac> 7307 +endcidchar + +100 begincidchar +<5ead> 2220 +<5eae> 7305 +<5eb0> 6863 +<5eb1> 7886 +<5eb4> 7887 +<5eb5> 2675 +<5eb6> 2674 +<5eb9> 7888 +<5ebd> 17341 +<5ebe> 2676 +<5ec4> 3135 +<5ec5> 9164 +<5ec6> 9166 +<5ec7> 9168 +<5ec8> 3586 +<5ec9> 3585 +<5eca> 3132 +<5ecb> 9167 +<5ecc> 9165 +<5ecd> 14896 +<5ece> 9848 +<5ed0> 16014 +<5ed1> 9846 +<5ed2> 9852 +<5ed3> 4042 +<5ed4> 9853 +<5ed5> 9850 +<5ed6> 4043 +<5ed7> 9847 +<5ed8> 9845 +<5ed9> 9851 +<5eda> 4412 +<5edb> 10441 +<5edc> 9849 +<5edd> 4414 +<5ede> 10442 +<5edf> 4413 +<5ee0> 4416 +<5ee1> 10443 +<5ee2> 4411 +<5ee3> 4415 +<5ee5> 11070 +<5ee6> 11068 +<5ee7> 11067 +<5ee8> 11069 +<5ee9> 11066 +<5eec> 5501 +<5ef1> 13008 +<5ef2> 13184 +<5ef3> 5954 +<5ef4> 553 +<5ef6> 1463 +<5ef7> 1170 +<5ef8> 14447 +<5ef9> 16707 +<5efa> 1812 +<5efb> 16708 +<5efc> 16710 +<5efe> 654 +<5eff> 717 +<5f01> 829 +<5f02> 6118 +<5f04> 1171 +<5f05> 6265 +<5f07> 6869 +<5f08> 1813 +<5f0a> 4044 +<5f0b> 655 +<5f0c> 14910 +<5f0d> 16713 +<5f0e> 14911 +<5f0f> 972 +<5f12> 3587 +<5f13> 656 +<5f17> 831 +<5f18> 830 +<5f1a> 6119 +<5f1b> 973 +<5f1d> 6266 +<5f1f> 1172 +<5f25> 17968 +<5f28> 6514 +<5f29> 1466 +<5f2d> 1814 +<5f2e> 6870 +<5f30> 7309 +<5f31> 2222 +<5f33> 7308 +<5f35> 2677 +<5f36> 7891 +<5f37> 2678 +<5f38> 7892 +<5f3a> 16718 +<5f3b> 19056 +<5f3c> 3136 +<5f40> 9169 +<5f43> 9855 +<5f44> 9854 +<5f46> 4045 +<5f48> 4417 +endcidchar + +100 begincidchar +<5f49> 10444 +<5f4a> 4781 +<5f4b> 11071 +<5f4c> 5070 +<5f4d> 15269 +<5f4e> 5827 +<5f4f> 13334 +<5f50> 554 +<5f51> 17641 +<5f54> 6518 +<5f56> 6871 +<5f57> 2679 +<5f58> 8495 +<5f59> 3588 +<5f5c> 15706 +<5f5d> 5327 +<5f61> 555 +<5f62> 1174 +<5f63> 16722 +<5f64> 1173 +<5f65> 1815 +<5f67> 7310 +<5f69> 2681 +<5f6a> 2953 +<5f6b> 2682 +<5f6c> 2680 +<5f6d> 3137 +<5f6f> 9856 +<5f70> 4046 +<5f71> 4418 +<5f72> 16724 +<5f73> 6007 +<5f74> 6120 +<5f76> 6268 +<5f77> 1175 +<5f78> 6267 +<5f79> 1176 +<5f7b> 16472 +<5f7c> 1470 +<5f7d> 6521 +<5f7e> 6520 +<5f7f> 1469 +<5f82> 6519 +<5f83> 17969 +<5f85> 1817 +<5f86> 6872 +<5f87> 1820 +<5f88> 1816 +<5f89> 1822 +<5f8c> 1821 +<5f90> 2225 +<5f91> 2224 +<5f92> 2223 +<5f96> 7894 +<5f97> 2683 +<5f98> 2686 +<5f99> 2684 +<5f9b> 7893 +<5f9c> 2689 +<5f9e> 2685 +<5f9f> 7895 +<5fa0> 2688 +<5fa1> 2687 +<5fa4> 16428 +<5fa5> 8497 +<5fa6> 8496 +<5fa7> 16727 +<5fa8> 3140 +<5fab> 8498 +<5fac> 3589 +<5fad> 9171 +<5fae> 3590 +<5faf> 9170 +<5fb1> 15768 +<5fb2> 10445 +<5fb5> 4420 +<5fb6> 9857 +<5fb7> 4419 +<5fb9> 4047 +<5fba> 16287 +<5fbb> 11073 +<5fbc> 11072 +<5fbd> 5071 +<5fbe> 11614 +<5fbf> 12430 +<5fc2> 18908 +<5fc3> 720 +<5fc4> 17642 +<5fc5> 832 +<5fc9> 6055 +<5fcc> 1178 +<5fcd> 1180 +<5fcf> 6123 +<5fd0> 6271 +<5fd1> 6270 +<5fd2> 6269 +<5fd4> 6122 +<5fd5> 6121 +<5fd6> 975 +<5fd7> 1179 +endcidchar + +100 begincidchar +<5fd8> 1177 +<5fd9> 974 +<5fdb> 14922 +<5fdd> 1471 +<5fde> 6522 +<5fdf> 16815 +<5fe0> 1472 +<5fe1> 6276 +<5fe3> 6278 +<5fe4> 6277 +<5fe5> 6523 +<5fe8> 6273 +<5fea> 1184 +<5feb> 1182 +<5fed> 6272 +<5fee> 6274 +<5fef> 6280 +<5ff1> 1181 +<5ff3> 6275 +<5ff4> 6284 +<5ff5> 1474 +<5ff7> 6281 +<5ff8> 1183 +<5ffa> 6279 +<5ffb> 6282 +<5ffd> 1473 +<5fff> 1475 +<6000> 6283 +<6009> 6543 +<600a> 6530 +<600b> 6528 +<600c> 6542 +<600d> 6537 +<600e> 1827 +<600f> 1476 +<6010> 6538 +<6011> 6541 +<6012> 1823 +<6013> 6540 +<6014> 1477 +<6015> 1482 +<6016> 1480 +<6017> 6531 +<6019> 6526 +<601a> 6533 +<601b> 1487 +<601c> 6544 +<601d> 1824 +<601e> 6534 +<6020> 1825 +<6021> 1483 +<6022> 6536 +<6023> 16773 +<6024> 6887 +<6025> 1826 +<6026> 6525 +<6027> 1484 +<6028> 1828 +<6029> 1485 +<602a> 1481 +<602b> 1486 +<602c> 6535 +<602d> 6524 +<602e> 6539 +<602f> 1478 +<6031> 16737 +<6032> 6527 +<6033> 6532 +<6034> 6529 +<6035> 1479 +<6037> 6873 +<6039> 6874 +<603b> 17747 +<6040> 6884 +<6041> 7314 +<6042> 6885 +<6043> 1834 +<6044> 6888 +<6045> 6878 +<6046> 1833 +<6047> 6880 +<6049> 6881 +<604a> 16500 +<604c> 6883 +<604d> 1829 +<6050> 2229 +<6052> 14060 +<6053> 6879 +<6054> 6875 +<6055> 2230 +<6058> 6889 +<6059> 2226 +<605a> 7312 +<605b> 6882 +<605d> 7311 +<605e> 6877 +<605f> 6886 +<6062> 1832 +<6063> 2227 +<6064> 1838 +endcidchar + +100 begincidchar +<6065> 2228 +<6066> 6890 +<6067> 7313 +<6068> 1831 +<6069> 2232 +<606a> 1837 +<606b> 1836 +<606c> 1835 +<606d> 2231 +<606e> 6891 +<606f> 2233 +<6070> 1830 +<6072> 6876 +<6075> 14934 +<6077> 16389 +<607e> 14919 +<607f> 2690 +<6080> 7317 +<6081> 7319 +<6083> 7321 +<6084> 2234 +<6085> 2240 +<6086> 7898 +<6087> 7325 +<6088> 7316 +<6089> 2692 +<608a> 7896 +<608c> 2239 +<608d> 2237 +<608e> 7327 +<6090> 7897 +<6092> 7318 +<6094> 2238 +<6095> 7322 +<6096> 2241 +<6097> 7324 +<609a> 2236 +<609b> 7323 +<609c> 7326 +<609d> 7320 +<609e> 16746 +<609f> 2235 +<60a0> 2693 +<60a2> 7315 +<60a3> 2691 +<60a4> 16385 +<60a7> 15068 +<60a8> 2694 +<60b0> 7900 +<60b1> 7909 +<60b2> 3143 +<60b3> 18768 +<60b4> 2696 +<60b5> 2701 +<60b6> 3144 +<60b7> 7911 +<60b8> 2708 +<60b9> 8500 +<60ba> 7901 +<60bb> 2700 +<60bc> 2703 +<60bd> 2698 +<60be> 7899 +<60bf> 7913 +<60c0> 7916 +<60c1> 8515 +<60c3> 7914 +<60c4> 8504 +<60c5> 2699 +<60c6> 2706 +<60c7> 2710 +<60c8> 7908 +<60c9> 8499 +<60ca> 7912 +<60cb> 2695 +<60cc> 8501 +<60cd> 7915 +<60ce> 8503 +<60cf> 7904 +<60d1> 3141 +<60d5> 2705 +<60d7> 17973 +<60d8> 2704 +<60d9> 7906 +<60da> 2709 +<60db> 7910 +<60dc> 2702 +<60dd> 7907 +<60de> 16890 +<60df> 2707 +<60e0> 3145 +<60e1> 3142 +<60e2> 8502 +<60e3> 15733 +<60e4> 7905 +<60e6> 2697 +<60e7> 15748 +<60e8> 15739 +<60e9> 16393 +<60ea> 16748 +endcidchar + +100 begincidchar +<60f0> 3150 +<60f1> 3154 +<60f2> 8506 +<60f3> 3595 +<60f4> 3152 +<60f5> 8510 +<60f6> 3156 +<60f7> 9172 +<60f8> 8512 +<60f9> 3597 +<60fa> 3148 +<60fb> 3151 +<60fc> 8513 +<60fd> 16296 +<60fe> 8514 +<60ff> 8520 +<6100> 3158 +<6101> 3598 +<6103> 8516 +<6104> 8521 +<6105> 8509 +<6106> 3608 +<6107> 15413 +<6108> 3599 +<6109> 3157 +<610a> 8507 +<610b> 8522 +<610c> 15495 +<610d> 3607 +<610e> 3155 +<610f> 3592 +<6110> 8519 +<6112> 3159 +<6113> 8511 +<6114> 8505 +<6115> 3149 +<6116> 8508 +<6118> 8517 +<6119> 16118 +<611a> 3591 +<611b> 3596 +<611c> 3146 +<611d> 8518 +<611f> 3594 +<6122> 18862 +<6123> 3147 +<6127> 3606 +<6128> 9859 +<6129> 9183 +<612b> 9175 +<612c> 9858 +<612e> 9179 +<612f> 9181 +<6130> 16183 +<6132> 9178 +<6134> 3605 +<6136> 9177 +<6137> 3609 +<613b> 9874 +<613d> 17974 +<613e> 3604 +<613f> 4049 +<6140> 9184 +<6141> 9860 +<6142> 16756 +<6144> 3602 +<6145> 9176 +<6146> 9180 +<6147> 4048 +<6148> 3593 +<614b> 4050 +<614c> 3601 +<614d> 3603 +<614e> 3600 +<614f> 9182 +<6150> 15410 +<6154> 9870 +<6155> 4425 +<6156> 9877 +<6158> 4056 +<6159> 16314 +<615a> 4055 +<615b> 9872 +<615c> 16774 +<615d> 4424 +<615e> 9861 +<615f> 4054 +<6160> 18764 +<6161> 9876 +<6164> 16755 +<6165> 9873 +<6166> 10462 +<6167> 4422 +<6168> 3153 +<616a> 9875 +<616b> 4429 +<616c> 9867 +<616e> 4423 +<616f> 16320 +<6170> 4428 +endcidchar + +100 begincidchar +<6171> 9862 +<6172> 9866 +<6173> 9863 +<6174> 9869 +<6175> 4057 +<6176> 4421 +<6177> 4051 +<6179> 10448 +<617a> 9871 +<617c> 4427 +<617d> 16317 +<617e> 4430 +<6180> 9868 +<6181> 16759 +<6182> 4426 +<6183> 10447 +<6187> 16762 +<6189> 10452 +<618a> 4785 +<618b> 10446 +<618c> 11085 +<618d> 10461 +<618e> 4434 +<6190> 4432 +<6191> 4783 +<6192> 10458 +<6193> 10454 +<6194> 4438 +<6195> 15840 +<6196> 11076 +<6198> 14933 +<6199> 14932 +<619a> 4436 +<619b> 10453 +<619c> 16386 +<619d> 11074 +<619f> 10457 +<61a1> 10460 +<61a2> 10451 +<61a4> 4437 +<61a7> 4431 +<61a8> 11075 +<61a9> 4784 +<61aa> 10459 +<61ab> 4433 +<61ac> 4435 +<61ad> 10456 +<61ae> 4439 +<61af> 10455 +<61b0> 10450 +<61b1> 10449 +<61b2> 4782 +<61b3> 10463 +<61b4> 11078 +<61b5> 11616 +<61b6> 4787 +<61b7> 17977 +<61b8> 11084 +<61b9> 17343 +<61ba> 11082 +<61bc> 11617 +<61be> 4788 +<61bf> 11083 +<61c0> 14928 +<61c1> 11080 +<61c2> 5073 +<61c3> 11615 +<61c5> 11077 +<61c6> 11079 +<61c7> 5074 +<61c8> 4790 +<61c9> 5072 +<61ca> 4789 +<61cb> 5076 +<61cc> 11081 +<61cd> 4786 +<61cf> 17978 +<61d0> 16769 +<61d3> 16766 +<61d6> 12070 +<61d8> 12062 +<61da> 14513 +<61de> 11623 +<61df> 12063 +<61e0> 11619 +<61e2> 16325 +<61e3> 5328 +<61e4> 11621 +<61e5> 11620 +<61e6> 5075 +<61e7> 11618 +<61e8> 11622 +<61e9> 12071 +<61ea> 12067 +<61eb> 12069 +<61f0> 12068 +<61f1> 12066 +<61f2> 5502 +<61f5> 5505 +<61f6> 5504 +endcidchar + +100 begincidchar +<61f7> 5503 +<61f8> 5652 +<61f9> 12755 +<61fa> 5653 +<61fb> 12431 +<61fc> 5744 +<61fd> 13009 +<61fe> 5745 +<61ff> 5828 +<6200> 5880 +<6201> 13335 +<6207> 13619 +<6208> 721 +<6209> 6056 +<620a> 833 +<620e> 976 +<6210> 979 +<6211> 1186 +<6212> 1185 +<6214> 6545 +<6215> 1489 +<6216> 1488 +<6219> 7328 +<621f> 3160 +<6220> 9185 +<6223> 9187 +<6224> 9189 +<6225> 9188 +<6227> 9879 +<6229> 9878 +<622a> 4058 +<622b> 9880 +<622c> 17980 +<622d> 10464 +<622e> 4440 +<6230> 4791 +<6232> 5077 +<6233> 5329 +<6234> 5078 +<6236> 722 +<6237> 17690 +<6239> 16322 +<623a> 6285 +<623d> 6546 +<623e> 1491 +<623f> 1490 +<6240> 1492 +<6241> 1839 +<6246> 7329 +<6247> 2242 +<6248> 2713 +<6249> 3161 +<624a> 8523 +<624b> 723 +<624c> 17644 +<624d> 657 +<624e> 724 +<6250> 6057 +<6251> 837 +<6252> 836 +<6258> 982 +<6259> 6130 +<625a> 6132 +<625b> 981 +<625c> 6124 +<625e> 6125 +<6260> 6131 +<6261> 6127 +<6262> 6129 +<6263> 980 +<6264> 6126 +<6265> 6133 +<6266> 6128 +<6268> 16149 +<626d> 1193 +<626e> 1202 +<626f> 1200 +<6270> 6295 +<6271> 6292 +<6272> 6300 +<6273> 1198 +<6274> 6301 +<6276> 1191 +<6277> 6298 +<6279> 1197 +<627a> 6294 +<627b> 6293 +<627c> 1195 +<627d> 6299 +<627e> 1196 +<627f> 1493 +<6280> 1190 +<6281> 6296 +<6282> 16262 +<6283> 6286 +<6284> 1187 +<6285> 16208 +<6286> 1206 +<6287> 6291 +<6288> 6297 +endcidchar + +100 begincidchar +<6289> 1192 +<628a> 1194 +<628c> 6287 +<6290> 17344 +<6291> 1205 +<6292> 1199 +<6293> 1204 +<6294> 6290 +<6295> 1203 +<6296> 1189 +<6297> 1188 +<6298> 1201 +<629d> 16022 +<62a4> 14953 +<62a6> 16321 +<62a8> 1507 +<62a9> 6558 +<62aa> 6551 +<62ab> 1502 +<62ac> 1521 +<62ad> 6547 +<62ae> 6554 +<62af> 6556 +<62b0> 6559 +<62b1> 1516 +<62b3> 6555 +<62b4> 6548 +<62b5> 1514 +<62b6> 6552 +<62b8> 6560 +<62b9> 1499 +<62bb> 6557 +<62bc> 1509 +<62bd> 1508 +<62be> 6550 +<62bf> 1497 +<62c1> 19153 +<62c2> 1498 +<62c3> 15759 +<62c4> 1496 +<62c5> 16778 +<62c6> 1520 +<62c7> 1512 +<62c8> 1506 +<62c9> 1494 +<62ca> 6553 +<62cb> 1505 +<62cc> 1495 +<62cd> 1513 +<62ce> 1522 +<62cf> 6894 +<62d0> 1510 +<62d1> 6549 +<62d2> 1500 +<62d5> 16780 +<62d8> 1517 +<62d9> 1511 +<62da> 1515 +<62db> 1501 +<62dc> 1840 +<62df> 16412 +<62e5> 17981 +<62eb> 6900 +<62ec> 1852 +<62ed> 1844 +<62ee> 1846 +<62ef> 1851 +<62f0> 6912 +<62f1> 1849 +<62f2> 7330 +<62f3> 2243 +<62f4> 1854 +<62f5> 6897 +<62f6> 6905 +<62f7> 1850 +<62f8> 6904 +<62f9> 6901 +<62fa> 6909 +<62fb> 6911 +<62fc> 1843 +<62fd> 1847 +<62fe> 1853 +<62ff> 2245 +<6300> 6906 +<6301> 1845 +<6302> 1856 +<6303> 6899 +<6307> 1848 +<6308> 2244 +<6309> 1842 +<630b> 6896 +<630c> 6903 +<630d> 6895 +<630e> 6898 +<630f> 6902 +<6310> 7331 +<6311> 1855 +<6315> 6910 +<6316> 1841 +<6318> 17345 +endcidchar + +100 begincidchar +<6328> 2259 +<6329> 7343 +<632c> 7333 +<632d> 7349 +<632e> 16093 +<632f> 2248 +<6331> 14949 +<6332> 7917 +<6333> 7351 +<6334> 7345 +<6335> 16150 +<6336> 7336 +<6337> 14947 +<6338> 7354 +<6339> 7339 +<633a> 2254 +<633b> 7940 +<633c> 7342 +<633d> 2256 +<633e> 2247 +<6340> 7356 +<6341> 7344 +<6342> 2250 +<6343> 7337 +<6346> 2251 +<6347> 7350 +<6348> 7357 +<6349> 2253 +<634a> 7341 +<634b> 7340 +<634c> 2261 +<634d> 2260 +<634e> 2246 +<634f> 2252 +<6350> 2255 +<6351> 7353 +<6354> 7347 +<6355> 2249 +<6356> 7332 +<6357> 7355 +<6358> 7346 +<6359> 7348 +<635a> 7352 +<6364> 16327 +<6365> 7918 +<6367> 2721 +<6368> 2741 +<6369> 2740 +<636b> 2729 +<636c> 16782 +<636d> 7936 +<636e> 7932 +<636f> 7929 +<6370> 7947 +<6371> 2724 +<6372> 2716 +<6375> 7934 +<6376> 3177 +<6377> 2720 +<6378> 7942 +<6379> 17255 +<637a> 2742 +<637b> 2739 +<637c> 7938 +<637d> 7921 +<637f> 16203 +<6380> 2738 +<6381> 7944 +<6382> 7920 +<6383> 2727 +<6384> 2731 +<6385> 7943 +<6387> 7930 +<6388> 2732 +<6389> 2726 +<638a> 7919 +<638b> 16776 +<638c> 3163 +<638d> 7946 +<638e> 7928 +<638f> 2737 +<6390> 7931 +<6391> 7945 +<6392> 2736 +<6394> 8524 +<6396> 2717 +<6397> 7926 +<6398> 2722 +<6399> 2733 +<639b> 2728 +<639c> 7935 +<639d> 7925 +<639e> 7923 +<639f> 7941 +<63a0> 2714 +<63a1> 2734 +<63a2> 2718 +<63a3> 3162 +<63a4> 7939 +<63a5> 2719 +endcidchar + +100 begincidchar +<63a7> 2715 +<63a8> 2730 +<63a9> 2725 +<63aa> 2723 +<63ab> 7927 +<63ac> 2735 +<63ad> 7924 +<63ae> 7937 +<63af> 7933 +<63b0> 8526 +<63b1> 8525 +<63b9> 16029 +<63bd> 7922 +<63be> 8542 +<63c0> 3165 +<63c1> 18088 +<63c2> 8548 +<63c3> 8531 +<63c4> 8545 +<63c5> 9190 +<63c6> 3168 +<63c7> 8549 +<63c8> 8552 +<63c9> 3167 +<63ca> 8534 +<63cb> 8551 +<63cc> 8550 +<63cd> 3169 +<63ce> 8527 +<63cf> 3164 +<63d0> 3172 +<63d1> 14950 +<63d2> 3170 +<63d3> 8547 +<63d5> 8537 +<63d6> 3174 +<63d7> 8554 +<63d8> 8546 +<63d9> 8555 +<63da> 3182 +<63db> 3180 +<63dc> 8544 +<63dd> 8543 +<63de> 15968 +<63df> 8541 +<63e0> 8535 +<63e1> 3173 +<63e2> 17985 +<63e3> 3171 +<63e4> 7338 +<63e5> 8528 +<63e6> 18591 +<63e7> 9220 +<63e8> 8529 +<63e9> 3166 +<63ea> 3179 +<63eb> 9192 +<63ef> 8530 +<63f0> 8553 +<63f1> 9191 +<63f2> 8538 +<63f3> 8533 +<63f4> 3178 +<63f5> 8539 +<63f6> 8536 +<63f8> 16786 +<63f9> 3183 +<63fb> 17986 +<63fc> 16028 +<63fe> 16030 +<6406> 3626 +<6407> 17987 +<6409> 9195 +<640a> 9214 +<640b> 9219 +<640c> 9207 +<640d> 3622 +<640e> 9224 +<640f> 3619 +<6410> 9193 +<6412> 9194 +<6413> 3612 +<6414> 3621 +<6415> 9201 +<6418> 9202 +<641a> 9215 +<641b> 9221 +<641c> 3620 +<641e> 3614 +<641f> 9200 +<6420> 9196 +<6421> 9223 +<6424> 9197 +<6425> 9217 +<6426> 9208 +<6427> 9218 +<6428> 9210 +<642a> 3615 +<642b> 9881 +<642c> 3618 +endcidchar + +100 begincidchar +<642d> 3616 +<642e> 9222 +<642f> 9213 +<6430> 9209 +<6432> 17881 +<6433> 9198 +<6434> 4068 +<6435> 9212 +<6436> 3623 +<6437> 9204 +<6438> 16785 +<6439> 9203 +<643a> 16797 +<643b> 14955 +<643d> 3617 +<643e> 3613 +<643f> 9902 +<6440> 9216 +<6441> 9211 +<6443> 9199 +<644b> 9897 +<644d> 9882 +<644e> 9893 +<6450> 9900 +<6451> 4066 +<6452> 3181 +<6453> 9898 +<6454> 4061 +<6458> 4060 +<6459> 9905 +<645a> 17346 +<645b> 9883 +<645c> 9896 +<645d> 9884 +<645e> 9895 +<645f> 4064 +<6460> 9899 +<6461> 8540 +<6465> 9906 +<6466> 9891 +<6467> 4067 +<6468> 10478 +<6469> 4441 +<646b> 9904 +<646c> 9903 +<646d> 4069 +<646e> 10465 +<646f> 4442 +<6470> 10466 +<6471> 14939 +<6474> 9885 +<6475> 9890 +<6476> 9886 +<6477> 9907 +<6478> 4063 +<6479> 4443 +<647a> 4065 +<647b> 4070 +<647c> 17260 +<647d> 9889 +<647f> 9901 +<6482> 9894 +<6485> 10469 +<6487> 4059 +<6488> 4446 +<6489> 11092 +<648a> 10474 +<648b> 10473 +<648c> 10475 +<648d> 17187 +<648f> 10472 +<6490> 4447 +<6491> 17347 +<6492> 4453 +<6493> 4450 +<6495> 4451 +<6496> 10467 +<6497> 10470 +<6498> 10480 +<6499> 4459 +<649a> 4457 +<649c> 10471 +<649d> 8532 +<649e> 4444 +<649f> 10477 +<64a0> 10468 +<64a2> 4460 +<64a3> 10476 +<64a4> 4062 +<64a5> 4449 +<64a6> 9892 +<64a9> 4452 +<64ab> 4456 +<64ac> 4458 +<64ad> 4455 +<64ae> 4454 +<64af> 17121 +<64b0> 4448 +<64b1> 10479 +<64b2> 4445 +endcidchar + +100 begincidchar +<64b3> 4461 +<64b4> 17216 +<64b6> 14948 +<64bd> 11091 +<64be> 4805 +<64bf> 4802 +<64c0> 17989 +<64c1> 4793 +<64c2> 4800 +<64c3> 11093 +<64c4> 4798 +<64c5> 4792 +<64c7> 4799 +<64c9> 11090 +<64ca> 5080 +<64cb> 4794 +<64cd> 4801 +<64ce> 5079 +<64cf> 11089 +<64d0> 11088 +<64d2> 4803 +<64d3> 16131 +<64d4> 4804 +<64d6> 11087 +<64d7> 11086 +<64d8> 5081 +<64d9> 11096 +<64da> 4797 +<64db> 11094 +<64dd> 17182 +<64e0> 5082 +<64e1> 16793 +<64e2> 5087 +<64e3> 11626 +<64e4> 11628 +<64e5> 16794 +<64e6> 5084 +<64e7> 14248 +<64e8> 11629 +<64e9> 11625 +<64ea> 17226 +<64eb> 11627 +<64ec> 5085 +<64ed> 5088 +<64ef> 11624 +<64f0> 5083 +<64f1> 5086 +<64f2> 5331 +<64f3> 11095 +<64f4> 5330 +<64f7> 5336 +<64f8> 12075 +<64fc> 12078 +<64fd> 12074 +<64fe> 5332 +<64ff> 12072 +<6500> 5506 +<6501> 12076 +<6503> 12077 +<6504> 12073 +<6506> 5333 +<6507> 12432 +<6509> 12435 +<650a> 17718 +<650c> 12436 +<650d> 12434 +<650e> 12437 +<650f> 5507 +<6510> 12433 +<6511> 15017 +<6513> 12759 +<6514> 5655 +<6515> 12758 +<6516> 12757 +<6517> 12756 +<6518> 5654 +<6519> 5656 +<651b> 13010 +<651c> 5747 +<651d> 5746 +<651e> 16775 +<651f> 16064 +<6520> 13186 +<6521> 13185 +<6522> 13188 +<6523> 5881 +<6524> 5829 +<6525> 13339 +<6526> 13187 +<6529> 13338 +<652a> 5883 +<652b> 5882 +<652c> 5921 +<652d> 13444 +<652e> 13514 +<652f> 725 +<6530> 15970 +<6532> 8556 +<6533> 11097 +<6534> 556 +endcidchar + +100 begincidchar +<6535> 17645 +<6536> 983 +<6537> 6134 +<6538> 1209 +<6539> 1207 +<653b> 1208 +<653d> 6561 +<653e> 1523 +<653f> 1857 +<6541> 6913 +<6543> 6914 +<6545> 1858 +<6546> 7359 +<654a> 7358 +<654d> 16799 +<654f> 2749 +<6551> 2745 +<6553> 7948 +<6554> 2752 +<6555> 2751 +<6556> 2744 +<6557> 2747 +<6558> 2750 +<6559> 2746 +<655c> 8560 +<655d> 2743 +<655e> 3184 +<655f> 16805 +<6564> 8559 +<6565> 8562 +<6566> 3185 +<6567> 8557 +<6568> 8561 +<656a> 8558 +<656b> 14956 +<656c> 3627 +<656d> 16804 +<656f> 9225 +<6572> 4071 +<6573> 9908 +<6574> 4806 +<6575> 4462 +<6576> 10481 +<6579> 10483 +<657a> 10482 +<657b> 10484 +<657c> 11099 +<657f> 11098 +<6580> 11631 +<6581> 11630 +<6584> 12438 +<6585> 16803 +<6586> 17992 +<6587> 726 +<6588> 16651 +<6589> 17748 +<658b> 18910 +<658c> 8563 +<6590> 3189 +<6591> 3188 +<6592> 9226 +<6594> 12079 +<6595> 5748 +<6596> 13340 +<6597> 727 +<6599> 2264 +<659b> 2754 +<659c> 2753 +<659f> 3628 +<65a0> 9909 +<65a1> 4072 +<65a2> 11100 +<65a4> 728 +<65a5> 838 +<65a7> 1524 +<65a8> 6562 +<65aa> 6915 +<65ab> 1859 +<65ac> 2755 +<65ae> 8566 +<65af> 3190 +<65b0> 3629 +<65b5> 16807 +<65b6> 11632 +<65b7> 5337 +<65b8> 13515 +<65b9> 729 +<65bb> 6563 +<65bc> 1525 +<65bd> 1860 +<65be> 15931 +<65bf> 6916 +<65c1> 2265 +<65c2> 7363 +<65c5> 2266 +<65c6> 7360 +<65cd> 7949 +<65ce> 2759 +<65cf> 2756 +<65d0> 8567 +endcidchar + +100 begincidchar +<65d1> 16810 +<65d2> 8568 +<65d3> 9227 +<65d4> 15272 +<65d6> 4074 +<65d7> 4073 +<65da> 11633 +<65db> 12080 +<65dd> 12440 +<65de> 12439 +<65df> 12760 +<65e0> 557 +<65e1> 6025 +<65e2> 1861 +<65e3> 16814 +<65e5> 730 +<65e6> 839 +<65e8> 985 +<65e9> 984 +<65ee> 6136 +<65ef> 6135 +<65f0> 6302 +<65f1> 1210 +<65f2> 6305 +<65f3> 6304 +<65f4> 6303 +<65f5> 6306 +<65fa> 1526 +<65fb> 6569 +<65fc> 6565 +<65fd> 6574 +<65ff> 17994 +<6600> 1533 +<6602> 1531 +<6603> 6570 +<6604> 6566 +<6605> 6573 +<6606> 1530 +<6607> 1537 +<6608> 6568 +<6609> 6564 +<660a> 1536 +<660b> 6571 +<660c> 1529 +<660d> 6572 +<660e> 1532 +<660f> 1534 +<6610> 6576 +<6611> 6575 +<6612> 6567 +<6613> 1528 +<6614> 1527 +<6615> 1535 +<6618> 16817 +<661c> 6921 +<661d> 6927 +<661e> 14995 +<661f> 1867 +<6620> 1864 +<6621> 6918 +<6622> 6923 +<6623> 17045 +<6624> 1870 +<6625> 1862 +<6626> 6922 +<6627> 1865 +<6628> 1868 +<662b> 6925 +<662d> 1863 +<662e> 6930 +<662f> 1866 +<6630> 14989 +<6631> 1869 +<6632> 6919 +<6633> 6924 +<6634> 6928 +<6635> 6920 +<6636> 6917 +<6639> 6929 +<663a> 6926 +<6641> 2274 +<6642> 2267 +<6643> 2270 +<6644> 16820 +<6645> 2273 +<6647> 7366 +<6648> 15769 +<6649> 2268 +<664a> 7364 +<664b> 16823 +<664c> 2272 +<664d> 19001 +<664f> 2269 +<6651> 7367 +<6652> 2271 +<6653> 17995 +<6657> 16539 +<6659> 7953 +<665a> 2761 +<665b> 7952 +endcidchar + +100 begincidchar +<665c> 7954 +<665d> 2760 +<665e> 2765 +<665f> 7365 +<6660> 19113 +<6661> 7951 +<6662> 7955 +<6663> 14992 +<6664> 2762 +<6665> 7950 +<6666> 2764 +<6667> 16825 +<6668> 2763 +<666a> 8575 +<666b> 14987 +<666c> 8570 +<666e> 3191 +<666f> 3195 +<6670> 3192 +<6671> 8573 +<6672> 8576 +<6673> 16827 +<6674> 3193 +<6676> 3194 +<6677> 3199 +<6678> 9236 +<6679> 8574 +<667a> 3197 +<667b> 8571 +<667c> 8569 +<667d> 18075 +<667e> 3198 +<6680> 8572 +<6684> 3635 +<6685> 16738 +<6686> 9228 +<6689> 3631 +<668a> 9233 +<668b> 9232 +<668c> 9229 +<668d> 3637 +<668e> 14985 +<6690> 9231 +<6691> 3196 +<6692> 17997 +<6694> 9235 +<6695> 9230 +<6696> 3634 +<6697> 3630 +<6698> 3636 +<6699> 9234 +<669a> 15677 +<669d> 4077 +<669f> 9912 +<66a0> 9911 +<66a1> 9910 +<66a2> 4075 +<66a4> 16570 +<66a8> 4076 +<66a9> 10489 +<66aa> 10492 +<66ab> 4466 +<66ad> 18760 +<66ae> 4465 +<66af> 10493 +<66b0> 10488 +<66b1> 4468 +<66b2> 10490 +<66b3> 16565 +<66b4> 4467 +<66b5> 10487 +<66b6> 15891 +<66b7> 10491 +<66b8> 4812 +<66b9> 4809 +<66ba> 11109 +<66bb> 11108 +<66bd> 11107 +<66be> 11102 +<66bf> 15770 +<66c0> 11103 +<66c4> 4810 +<66c6> 4807 +<66c7> 4811 +<66c8> 11101 +<66c9> 4808 +<66cc> 11110 +<66cd> 16568 +<66ce> 14967 +<66cf> 11106 +<66d2> 11634 +<66d6> 5092 +<66d8> 12083 +<66d9> 5091 +<66dc> 5338 +<66dd> 5509 +<66de> 12441 +<66e0> 5508 +<66e6> 5657 +<66e7> 19023 +endcidchar + +100 begincidchar +<66e8> 12761 +<66e9> 5749 +<66eb> 13341 +<66ec> 5884 +<66f0> 731 +<66f1> 16004 +<66f4> 1211 +<66f6> 6577 +<66f7> 1871 +<66f8> 2275 +<66f9> 2766 +<66fc> 2591 +<6700> 3056 +<6701> 8577 +<6702> 16836 +<6703> 3638 +<6704> 9914 +<6705> 9913 +<6708> 732 +<6709> 990 +<670a> 6578 +<670b> 1539 +<670c> 16354 +<670d> 1538 +<670e> 15777 +<6716> 17999 +<6717> 2278 +<6718> 7956 +<6719> 18867 +<671b> 2768 +<671d> 3203 +<671e> 15755 +<671f> 3202 +<6720> 9237 +<6721> 9506 +<6722> 9915 +<6723> 11111 +<6725> 14239 +<6726> 5339 +<6727> 5658 +<6728> 733 +<672c> 841 +<672d> 844 +<672e> 840 +<6731> 993 +<6733> 6144 +<6734> 992 +<6735> 994 +<6736> 15937 +<6738> 6139 +<6739> 6138 +<673a> 6141 +<673b> 6140 +<673c> 6143 +<673d> 991 +<673e> 6137 +<673f> 6142 +<6744> 16411 +<6745> 6307 +<6746> 1221 +<6747> 6308 +<6748> 6312 +<6749> 1220 +<674b> 6316 +<674c> 6311 +<674d> 6314 +<6753> 1223 +<6755> 6310 +<6756> 1218 +<6757> 1224 +<6759> 6309 +<675a> 6315 +<675c> 1217 +<675d> 6313 +<675e> 1219 +<675f> 1212 +<6760> 1222 +<6761> 15718 +<6762> 16843 +<6767> 16842 +<676a> 1560 +<676b> 18948 +<676c> 6580 +<676d> 1540 +<676e> 19017 +<6771> 1543 +<6772> 1561 +<6773> 1545 +<6774> 6588 +<6775> 1556 +<6776> 6583 +<6777> 1546 +<677a> 6591 +<677b> 6584 +<677c> 1559 +<677d> 6596 +<677e> 1554 +<677f> 1552 +<6781> 6597 +<6782> 19118 +endcidchar + +100 begincidchar +<6783> 6595 +<6784> 6587 +<6785> 6579 +<6786> 6586 +<6787> 1547 +<6789> 1553 +<678b> 1541 +<678c> 6590 +<678d> 6589 +<678e> 6581 +<678f> 18113 +<6790> 1555 +<6791> 6593 +<6792> 6582 +<6793> 1558 +<6794> 6600 +<6795> 1542 +<6797> 1549 +<6798> 6585 +<6799> 6594 +<679a> 1557 +<679c> 1544 +<679d> 1548 +<679f> 6592 +<67a0> 15738 +<67a4> 18001 +<67ac> 16867 +<67ae> 6964 +<67af> 1879 +<67b0> 1892 +<67b1> 16884 +<67b2> 6959 +<67b3> 6949 +<67b4> 1885 +<67b5> 6947 +<67b6> 1878 +<67b7> 6942 +<67b8> 1888 +<67b9> 6955 +<67ba> 6936 +<67bb> 6938 +<67bf> 14330 +<67c0> 6941 +<67c1> 6933 +<67c2> 6954 +<67c3> 6970 +<67c4> 1883 +<67c5> 6943 +<67c6> 6961 +<67c8> 6935 +<67cb> 6972 +<67cc> 6963 +<67cd> 6948 +<67ce> 6956 +<67cf> 1889 +<67d0> 1876 +<67d1> 1884 +<67d2> 1896 +<67d3> 1873 +<67d4> 1875 +<67d6> 15192 +<67d7> 16846 +<67d8> 6940 +<67d9> 1893 +<67da> 1886 +<67db> 6966 +<67dc> 6937 +<67dd> 1895 +<67de> 1890 +<67df> 6946 +<67e2> 1894 +<67e3> 6953 +<67e4> 6945 +<67e5> 1887 +<67e6> 6965 +<67e7> 6957 +<67e9> 1881 +<67ea> 6971 +<67eb> 6944 +<67ec> 1877 +<67ed> 6962 +<67ee> 6952 +<67ef> 1882 +<67f0> 6958 +<67f1> 1874 +<67f2> 6934 +<67f3> 1891 +<67f4> 2293 +<67f5> 1880 +<67f6> 6951 +<67f7> 6950 +<67f8> 6939 +<67f9> 14742 +<67fa> 6967 +<67fc> 6960 +<67fe> 17749 +<67ff> 1872 +<6800> 17351 +<6801> 16851 +<6802> 16328 +endcidchar + +100 begincidchar +<6803> 15722 +<6804> 17750 +<680d> 17025 +<6810> 14748 +<6812> 7389 +<6813> 2300 +<6814> 7390 +<6816> 7378 +<6817> 2289 +<6818> 2301 +<681a> 7371 +<681b> 16498 +<681c> 7380 +<681d> 7388 +<681e> 18114 +<681f> 7370 +<6820> 7397 +<6821> 2279 +<6822> 16848 +<6825> 7396 +<6826> 7391 +<6828> 7392 +<6829> 2287 +<682a> 2298 +<682b> 7382 +<682d> 7383 +<682e> 7393 +<682f> 7384 +<6831> 7379 +<6834> 7387 +<6835> 7381 +<6836> 15918 +<6837> 16925 +<6838> 2280 +<6839> 2284 +<683a> 7395 +<683b> 7375 +<683c> 2296 +<683d> 2292 +<683e> 16711 +<6840> 2295 +<6841> 2302 +<6842> 2285 +<6843> 2297 +<6844> 7386 +<6845> 2299 +<6846> 2282 +<6847> 15339 +<6848> 2281 +<6849> 7372 +<684a> 18003 +<684b> 7376 +<684c> 2290 +<684d> 7394 +<684e> 7385 +<684f> 7377 +<6850> 2294 +<6851> 2291 +<6853> 2283 +<6854> 2286 +<6855> 15760 +<6856> 14356 +<685d> 16854 +<6865> 17751 +<686b> 7977 +<686f> 7966 +<6871> 7981 +<6872> 7978 +<6874> 7971 +<6875> 7970 +<6876> 2775 +<6877> 7974 +<6878> 7989 +<6879> 7957 +<687b> 7990 +<687c> 7976 +<687d> 7994 +<687e> 7982 +<687f> 2774 +<6880> 7980 +<6881> 2769 +<6882> 2790 +<6883> 2780 +<6884> 18004 +<6885> 2784 +<6886> 2783 +<6887> 7958 +<6888> 18103 +<6889> 7987 +<688a> 7993 +<688b> 7985 +<688c> 7992 +<688f> 7973 +<6890> 7959 +<6891> 7991 +<6892> 7975 +<6893> 2772 +<6894> 2785 +<6896> 7984 +<6897> 2778 +endcidchar + +100 begincidchar +<6898> 15018 +<689b> 7983 +<689c> 7960 +<689d> 2786 +<689f> 2788 +<68a0> 7986 +<68a1> 2789 +<68a2> 2771 +<68a3> 7967 +<68a4> 7988 +<68a6> 16612 +<68a7> 2777 +<68a8> 2787 +<68a9> 7969 +<68aa> 7979 +<68ab> 7964 +<68ac> 7968 +<68ad> 2782 +<68ae> 7963 +<68af> 2770 +<68b0> 2779 +<68b1> 2776 +<68b2> 7972 +<68b3> 2288 +<68b4> 8600 +<68b5> 2773 +<68b6> 15006 +<68b9> 15636 +<68bd> 17020 +<68c3> 16860 +<68c4> 2781 +<68c5> 15406 +<68c6> 8603 +<68c7> 8625 +<68c8> 8614 +<68c9> 3223 +<68ca> 17131 +<68cb> 3218 +<68cc> 8597 +<68cd> 3219 +<68ce> 8613 +<68d0> 8606 +<68d1> 8619 +<68d2> 3215 +<68d3> 8579 +<68d4> 8621 +<68d5> 3205 +<68d6> 8587 +<68d7> 3208 +<68d8> 3207 +<68da> 3224 +<68dc> 8581 +<68df> 3210 +<68e0> 3206 +<68e1> 8595 +<68e3> 3217 +<68e4> 8590 +<68e6> 8617 +<68e7> 3213 +<68e8> 8609 +<68e9> 8622 +<68ea> 8584 +<68eb> 8589 +<68ec> 8583 +<68ee> 3212 +<68ef> 8602 +<68f0> 9259 +<68f1> 8585 +<68f2> 3216 +<68f3> 8594 +<68f4> 8618 +<68f5> 3211 +<68f6> 8591 +<68f7> 8588 +<68f8> 8605 +<68f9> 3214 +<68fa> 3204 +<68fb> 3226 +<68fc> 8608 +<68fd> 8607 +<6900> 16863 +<6901> 16862 +<6902> 17147 +<6903> 17052 +<6904> 8580 +<6905> 3209 +<6906> 8620 +<6907> 8596 +<6908> 8598 +<6909> 18008 +<690a> 8611 +<690b> 8610 +<690c> 8578 +<690d> 3220 +<690e> 3222 +<690f> 8586 +<6910> 8593 +<6911> 8601 +<6912> 3221 +<6913> 8592 +endcidchar + +100 begincidchar +<6914> 8604 +<6915> 8623 +<6917> 8612 +<6918> 15778 +<6919> 18912 +<691a> 15744 +<691b> 14269 +<6925> 8624 +<692a> 8582 +<692c> 16184 +<692f> 9279 +<6930> 3646 +<6932> 9277 +<6933> 9256 +<6934> 9261 +<6935> 9254 +<6936> 16871 +<6937> 9273 +<6938> 9240 +<6939> 9247 +<693b> 9271 +<693c> 9281 +<693d> 9257 +<693e> 16470 +<693f> 9244 +<6940> 9263 +<6941> 9268 +<6942> 9248 +<6943> 18009 +<6944> 9265 +<6945> 9245 +<6946> 17775 +<694a> 3648 +<694b> 9272 +<694c> 9270 +<694e> 9241 +<694f> 9275 +<6951> 9276 +<6952> 9278 +<6953> 3652 +<6954> 3644 +<6955> 15750 +<6956> 7965 +<6957> 9249 +<6958> 9267 +<6959> 9250 +<695a> 3641 +<695b> 3657 +<695c> 9274 +<695d> 3655 +<695e> 3651 +<695f> 9239 +<6960> 3643 +<6961> 16868 +<6962> 9242 +<6963> 3656 +<6964> 18011 +<6965> 9258 +<6966> 9238 +<6967> 15637 +<6968> 3649 +<6969> 9262 +<696a> 9246 +<696b> 3650 +<696c> 9255 +<696d> 3640 +<696e> 3225 +<696f> 9264 +<6970> 8599 +<6971> 9243 +<6972> 14957 +<6973> 16859 +<6974> 9269 +<6975> 3645 +<6976> 9266 +<6977> 3642 +<6978> 9260 +<6979> 3653 +<697a> 9251 +<697b> 9280 +<6980> 16190 +<6982> 3647 +<6983> 9391 +<6985> 18013 +<6986> 3654 +<698a> 15732 +<698d> 9929 +<698e> 9927 +<6990> 9949 +<6991> 9925 +<6993> 9943 +<6994> 3639 +<6995> 4080 +<6996> 9921 +<6997> 9948 +<6998> 16872 +<6999> 9926 +<699a> 9940 +<699b> 4085 +<699c> 4078 +endcidchar + +100 begincidchar +<699e> 9946 +<699f> 18012 +<69a0> 9919 +<69a1> 9945 +<69a2> 14128 +<69a3> 4096 +<69a4> 9936 +<69a5> 9952 +<69a6> 4094 +<69a7> 9928 +<69a8> 4079 +<69a9> 9930 +<69aa> 9944 +<69ab> 4088 +<69ac> 9923 +<69ad> 4092 +<69ae> 4082 +<69af> 9932 +<69b0> 9922 +<69b1> 9916 +<69b2> 16374 +<69b3> 9942 +<69b4> 4089 +<69b5> 9951 +<69b6> 9917 +<69b7> 4086 +<69b9> 9938 +<69bb> 4087 +<69bc> 9924 +<69bd> 9935 +<69be> 9931 +<69bf> 9933 +<69c0> 16221 +<69c1> 4081 +<69c2> 9950 +<69c3> 4095 +<69c4> 9934 +<69c6> 9953 +<69c9> 9918 +<69ca> 9939 +<69cb> 4084 +<69cc> 4093 +<69cd> 4091 +<69ce> 9920 +<69cf> 9941 +<69d0> 4090 +<69d1> 14831 +<69d3> 4083 +<69d4> 9937 +<69d5> 15932 +<69d6> 18014 +<69d9> 9947 +<69e1> 16856 +<69e2> 10505 +<69e4> 10501 +<69e5> 10497 +<69e6> 10517 +<69e7> 10514 +<69e8> 4471 +<69e9> 18463 +<69eb> 10521 +<69ec> 10504 +<69ed> 4482 +<69ee> 10511 +<69f1> 10500 +<69f2> 10510 +<69f3> 4479 +<69f4> 10530 +<69f6> 10527 +<69f7> 10513 +<69f8> 10498 +<69f9> 16877 +<69fa> 16839 +<69fb> 10518 +<69fc> 10520 +<69fd> 4475 +<69fe> 10508 +<69ff> 10503 +<6a00> 10494 +<6a01> 4472 +<6a02> 4480 +<6a03> 15913 +<6a04> 10523 +<6a05> 4481 +<6a06> 10495 +<6a07> 10529 +<6a08> 10516 +<6a09> 10522 +<6a0a> 4478 +<6a0b> 16857 +<6a0c> 15696 +<6a0d> 10519 +<6a0f> 10526 +<6a11> 4483 +<6a13> 4477 +<6a14> 10512 +<6a15> 10499 +<6a16> 10531 +<6a17> 10496 +<6a18> 10524 +endcidchar + +100 begincidchar +<6a19> 4474 +<6a1a> 15646 +<6a1b> 10506 +<6a1c> 15208 +<6a1d> 10507 +<6a1e> 4473 +<6a1f> 4470 +<6a20> 10502 +<6a21> 4476 +<6a23> 4469 +<6a25> 10525 +<6a26> 10528 +<6a27> 10509 +<6a28> 11124 +<6a29> 19114 +<6a2b> 15682 +<6a2c> 17067 +<6a2d> 15135 +<6a32> 11116 +<6a33> 15012 +<6a34> 11112 +<6a35> 4825 +<6a38> 4814 +<6a39> 4819 +<6a3a> 4815 +<6a3b> 11126 +<6a3c> 11137 +<6a3d> 4813 +<6a3e> 11118 +<6a3f> 11127 +<6a40> 10515 +<6a41> 11128 +<6a43> 18913 +<6a44> 4820 +<6a45> 16880 +<6a46> 11143 +<6a47> 4824 +<6a48> 4827 +<6a49> 11114 +<6a4b> 4823 +<6a4c> 15019 +<6a4f> 11132 +<6a50> 11131 +<6a51> 11123 +<6a52> 15013 +<6a53> 14252 +<6a54> 11133 +<6a55> 11140 +<6a56> 11139 +<6a57> 14298 +<6a58> 4818 +<6a59> 4816 +<6a5a> 11125 +<6a5b> 11122 +<6a5d> 11119 +<6a5e> 11138 +<6a5f> 4826 +<6a60> 11136 +<6a61> 4822 +<6a62> 4821 +<6a63> 18879 +<6a64> 11130 +<6a65> 18016 +<6a66> 11113 +<6a67> 11115 +<6a68> 11117 +<6a69> 11135 +<6a6a> 11129 +<6a6b> 4817 +<6a6d> 11120 +<6a6f> 11134 +<6a71> 18018 +<6a74> 18017 +<6a76> 11121 +<6a7a> 15021 +<6a7e> 5100 +<6a7f> 11652 +<6a80> 5093 +<6a81> 11637 +<6a82> 18019 +<6a83> 11648 +<6a84> 5095 +<6a85> 11655 +<6a87> 11644 +<6a89> 11639 +<6a8a> 16694 +<6a8c> 11656 +<6a8d> 11635 +<6a8e> 11646 +<6a8f> 15387 +<6a90> 5102 +<6a91> 11651 +<6a92> 11657 +<6a93> 11645 +<6a94> 5094 +<6a95> 11647 +<6a96> 11636 +<6a97> 5101 +<6a99> 18021 +<6a9a> 11654 +endcidchar + +100 begincidchar +<6a9b> 11641 +<6a9c> 5097 +<6a9d> 16882 +<6a9e> 11643 +<6a9f> 11640 +<6aa0> 5103 +<6aa1> 11642 +<6aa2> 5096 +<6aa3> 5099 +<6aa4> 11650 +<6aa5> 11638 +<6aa6> 11653 +<6aa7> 14307 +<6aa8> 11649 +<6aab> 18023 +<6aac> 5341 +<6aad> 12094 +<6ab1> 15955 +<6ab2> 15179 +<6ab3> 5340 +<6ab4> 12093 +<6ab5> 18024 +<6ab8> 5344 +<6ab9> 12085 +<6aba> 12089 +<6abb> 5343 +<6abd> 12086 +<6abe> 15009 +<6ac2> 5345 +<6ac3> 5342 +<6ac5> 12084 +<6ac6> 12088 +<6ac7> 12092 +<6ac8> 16885 +<6ac9> 15014 +<6aca> 16204 +<6acb> 12447 +<6acc> 12444 +<6acd> 12453 +<6acf> 12452 +<6ad0> 12450 +<6ad1> 12445 +<6ad3> 5513 +<6ad4> 18025 +<6ad8> 15530 +<6ad9> 12446 +<6ada> 5512 +<6adb> 5098 +<6adc> 12449 +<6add> 5511 +<6ade> 12454 +<6adf> 12448 +<6ae0> 12443 +<6ae1> 12087 +<6ae5> 5510 +<6ae7> 12442 +<6ae8> 12767 +<6aea> 12766 +<6aeb> 12451 +<6aec> 5659 +<6af0> 12765 +<6af1> 12769 +<6af3> 12764 +<6af6> 18026 +<6af8> 13014 +<6af9> 12768 +<6afa> 5752 +<6afb> 5750 +<6afc> 13012 +<6b00> 13015 +<6b02> 13011 +<6b03> 13013 +<6b04> 5751 +<6b05> 15015 +<6b0a> 5830 +<6b0b> 13189 +<6b0f> 13344 +<6b10> 5885 +<6b13> 13447 +<6b16> 5955 +<6b17> 13518 +<6b1a> 13519 +<6b1d> 16888 +<6b1e> 13620 +<6b20> 734 +<6b21> 995 +<6b23> 1562 +<6b25> 6601 +<6b28> 6973 +<6b2c> 7398 +<6b2d> 7400 +<6b2f> 7399 +<6b31> 7401 +<6b32> 2791 +<6b33> 7996 +<6b34> 7402 +<6b35> 16891 +<6b36> 7995 +<6b39> 8626 +<6b3a> 3228 +endcidchar + +100 begincidchar +<6b3b> 8627 +<6b3c> 8629 +<6b3d> 3229 +<6b3e> 3227 +<6b3f> 8628 +<6b41> 9287 +<6b42> 9285 +<6b43> 9284 +<6b45> 9283 +<6b46> 9282 +<6b47> 3658 +<6b48> 9286 +<6b49> 4097 +<6b4a> 9954 +<6b4b> 9956 +<6b4c> 4098 +<6b4d> 9955 +<6b4e> 4485 +<6b50> 4484 +<6b51> 10532 +<6b52> 16238 +<6b54> 11145 +<6b55> 11144 +<6b56> 11146 +<6b57> 15022 +<6b59> 4828 +<6b5b> 11658 +<6b5c> 5104 +<6b5e> 12095 +<6b5f> 5348 +<6b60> 12455 +<6b61> 5831 +<6b62> 735 +<6b63> 845 +<6b64> 996 +<6b65> 1225 +<6b6a> 1897 +<6b6d> 7403 +<6b6f> 17685 +<6b72> 3659 +<6b74> 16892 +<6b76> 10658 +<6b77> 4829 +<6b78> 5349 +<6b79> 736 +<6b7a> 17646 +<6b7b> 997 +<6b7e> 6603 +<6b7f> 1565 +<6b80> 6602 +<6b81> 18027 +<6b82> 6974 +<6b83> 1898 +<6b84> 6975 +<6b86> 1899 +<6b88> 7405 +<6b89> 2304 +<6b8a> 2303 +<6b8c> 8003 +<6b8f> 8000 +<6b91> 7999 +<6b94> 8630 +<6b95> 8633 +<6b96> 3231 +<6b97> 8631 +<6b98> 3230 +<6b99> 8632 +<6b9b> 9288 +<6ba2> 10535 +<6ba3> 10534 +<6ba4> 4486 +<6ba5> 10533 +<6ba6> 10536 +<6ba7> 11147 +<6bad> 11659 +<6bae> 5105 +<6baf> 5350 +<6bb0> 12456 +<6bb2> 5753 +<6bb3> 6026 +<6bb5> 1900 +<6bb6> 6976 +<6bb7> 2305 +<6bba> 2792 +<6bbc> 3232 +<6bbd> 8634 +<6bbf> 3661 +<6bc0> 3660 +<6bc1> 18028 +<6bc7> 11151 +<6bc8> 11150 +<6bc9> 12096 +<6bca> 13345 +<6bcb> 737 +<6bcc> 6027 +<6bcd> 846 +<6bcf> 1226 +<6bd0> 6317 +<6bd2> 1901 +<6bd3> 3662 +endcidchar + +100 begincidchar +<6bd4> 738 +<6bd6> 6977 +<6bd7> 1902 +<6bd8> 6978 +<6bda> 5106 +<6bdb> 739 +<6bdc> 16903 +<6bde> 6604 +<6be0> 6979 +<6be1> 16901 +<6be2> 7410 +<6be3> 7409 +<6be4> 7407 +<6be6> 7406 +<6be7> 7411 +<6be8> 7408 +<6bea> 18029 +<6bef> 3233 +<6bf0> 8635 +<6bf9> 9291 +<6bfa> 16249 +<6bfd> 3663 +<6bfe> 9962 +<6bff> 10539 +<6c00> 10538 +<6c01> 10537 +<6c02> 10540 +<6c03> 11153 +<6c04> 11152 +<6c05> 4830 +<6c06> 11154 +<6c08> 5107 +<6c09> 11660 +<6c0b> 12097 +<6c0c> 12457 +<6c0d> 13192 +<6c0f> 740 +<6c10> 848 +<6c11> 847 +<6c13> 1566 +<6c14> 6028 +<6c15> 6058 +<6c16> 998 +<6c18> 6145 +<6c1b> 1567 +<6c1c> 14507 +<6c1d> 6605 +<6c1f> 1903 +<6c23> 2306 +<6c24> 2310 +<6c25> 7412 +<6c26> 2309 +<6c2a> 8004 +<6c2b> 2795 +<6c2c> 3236 +<6c30> 8638 +<6c31> 16227 +<6c33> 4099 +<6c34> 741 +<6c35> 17647 +<6c36> 6059 +<6c37> 16904 +<6c38> 849 +<6c39> 15877 +<6c3a> 17648 +<6c3b> 6062 +<6c3d> 17281 +<6c3e> 852 +<6c3f> 6061 +<6c40> 851 +<6c41> 850 +<6c42> 1227 +<6c43> 6060 +<6c46> 6146 +<6c49> 16525 +<6c4a> 6150 +<6c4f> 6149 +<6c50> 1004 +<6c52> 6147 +<6c54> 6151 +<6c55> 1005 +<6c57> 1000 +<6c58> 15290 +<6c59> 1001 +<6c5a> 16908 +<6c5b> 1007 +<6c5c> 6148 +<6c5d> 999 +<6c5e> 1228 +<6c61> 1006 +<6c65> 6336 +<6c66> 6334 +<6c67> 6321 +<6c68> 1240 +<6c69> 6328 +<6c6a> 1235 +<6c6b> 6322 +<6c6d> 6330 +<6c6e> 16586 +<6c6f> 6327 +endcidchar + +100 begincidchar +<6c70> 1238 +<6c71> 6326 +<6c72> 1245 +<6c73> 6335 +<6c74> 1247 +<6c75> 18030 +<6c76> 1249 +<6c78> 6320 +<6c79> 16910 +<6c7a> 1236 +<6c7b> 6337 +<6c7d> 1243 +<6c7e> 1246 +<6c7f> 14246 +<6c80> 6628 +<6c81> 1230 +<6c82> 1253 +<6c83> 1244 +<6c84> 6323 +<6c85> 1233 +<6c86> 1248 +<6c87> 6331 +<6c8a> 6626 +<6c8b> 6324 +<6c8c> 1239 +<6c8d> 1250 +<6c8e> 6338 +<6c8f> 6325 +<6c90> 1237 +<6c92> 1242 +<6c93> 6606 +<6c94> 1251 +<6c95> 6332 +<6c96> 1241 +<6c98> 1252 +<6c99> 1229 +<6c9a> 6329 +<6c9b> 1234 +<6c9c> 6333 +<6c9d> 6627 +<6c9f> 14473 +<6ca2> 15715 +<6caa> 18031 +<6cab> 1579 +<6cac> 1595 +<6cad> 6613 +<6cae> 1586 +<6caf> 15606 +<6cb0> 6634 +<6cb1> 1571 +<6cb2> 16076 +<6cb3> 1574 +<6cb4> 6625 +<6cb6> 6611 +<6cb7> 6615 +<6cb8> 1582 +<6cb9> 1584 +<6cba> 6618 +<6cbb> 1591 +<6cbc> 1577 +<6cbf> 1590 +<6cc0> 6630 +<6cc1> 1585 +<6cc2> 6617 +<6cc3> 6619 +<6cc4> 1583 +<6cc5> 1588 +<6cc6> 6620 +<6cc7> 6633 +<6cc9> 1904 +<6cca> 1594 +<6ccb> 16496 +<6ccc> 1572 +<6ccd> 6632 +<6cce> 16273 +<6ccf> 6636 +<6cd0> 6616 +<6cd1> 6638 +<6cd2> 6623 +<6cd3> 1581 +<6cd4> 6612 +<6cd5> 1580 +<6cd6> 1598 +<6cd7> 1587 +<6cd9> 6610 +<6cda> 6990 +<6cdb> 1593 +<6cdc> 1597 +<6cdd> 6624 +<6cde> 6629 +<6cdf> 15703 +<6ce0> 1599 +<6ce1> 1592 +<6ce2> 1578 +<6ce3> 1568 +<6ce5> 1573 +<6ce7> 6614 +<6ce8> 1569 +<6ce9> 6637 +<6cea> 16269 +endcidchar + +100 begincidchar +<6ceb> 6608 +<6cec> 6607 +<6ced> 6621 +<6cee> 6609 +<6cef> 1596 +<6cf0> 2311 +<6cf1> 1589 +<6cf2> 6622 +<6cf3> 1570 +<6cf5> 1919 +<6cf9> 6635 +<6cff> 18915 +<6d00> 6997 +<6d01> 7000 +<6d02> 18033 +<6d03> 7003 +<6d04> 6992 +<6d05> 14873 +<6d06> 18034 +<6d07> 7006 +<6d08> 7009 +<6d09> 7011 +<6d0a> 6989 +<6d0b> 1905 +<6d0c> 1910 +<6d0d> 7417 +<6d0e> 1926 +<6d0f> 7004 +<6d10> 7012 +<6d11> 6996 +<6d12> 6988 +<6d16> 7444 +<6d17> 1913 +<6d18> 7001 +<6d19> 6993 +<6d1a> 6995 +<6d1b> 1918 +<6d1d> 6998 +<6d1e> 1912 +<6d1f> 6985 +<6d20> 7007 +<6d22> 7010 +<6d24> 15043 +<6d25> 1909 +<6d26> 18035 +<6d27> 1921 +<6d28> 6982 +<6d29> 1923 +<6d2a> 1907 +<6d2b> 1927 +<6d2c> 7008 +<6d2d> 6984 +<6d2e> 1924 +<6d2f> 7438 +<6d30> 6631 +<6d31> 1911 +<6d32> 1906 +<6d33> 6991 +<6d34> 6983 +<6d35> 1925 +<6d36> 1917 +<6d37> 7002 +<6d38> 1922 +<6d39> 1920 +<6d3a> 6994 +<6d3b> 1914 +<6d3c> 6986 +<6d3f> 6987 +<6d40> 7005 +<6d41> 1908 +<6d42> 6999 +<6d4e> 17752 +<6d57> 15603 +<6d58> 7420 +<6d59> 2319 +<6d5a> 2324 +<6d5b> 16540 +<6d5c> 16930 +<6d5e> 7429 +<6d5f> 7435 +<6d60> 7431 +<6d61> 7418 +<6d62> 7421 +<6d65> 2331 +<6d66> 2316 +<6d67> 7430 +<6d68> 7439 +<6d69> 2326 +<6d6a> 2312 +<6d6c> 2321 +<6d6d> 7422 +<6d6e> 2323 +<6d6f> 7423 +<6d70> 7433 +<6d71> 16629 +<6d72> 14807 +<6d74> 2325 +<6d75> 7448 +<6d76> 7416 +<6d77> 2318 +endcidchar + +100 begincidchar +<6d78> 2317 +<6d79> 2329 +<6d7a> 7413 +<6d7b> 7446 +<6d7c> 7434 +<6d7d> 7447 +<6d7e> 7441 +<6d7f> 7427 +<6d80> 7442 +<6d81> 18036 +<6d82> 7436 +<6d83> 7445 +<6d84> 7443 +<6d85> 2330 +<6d86> 7428 +<6d87> 2315 +<6d88> 2314 +<6d89> 2322 +<6d8a> 2328 +<6d8b> 7440 +<6d8c> 2327 +<6d8d> 7425 +<6d8e> 2796 +<6d8f> 15848 +<6d90> 7449 +<6d91> 7424 +<6d92> 7419 +<6d93> 2320 +<6d94> 2332 +<6d95> 2313 +<6d96> 16929 +<6d97> 7432 +<6d98> 7437 +<6da4> 18038 +<6da5> 15033 +<6daa> 2830 +<6dab> 8006 +<6dac> 8010 +<6dae> 2811 +<6daf> 2809 +<6db1> 18039 +<6db2> 2800 +<6db3> 8008 +<6db4> 8007 +<6db5> 2820 +<6db7> 8013 +<6db8> 2814 +<6db9> 16379 +<6dba> 8031 +<6dbb> 8043 +<6dbc> 2797 +<6dbd> 8028 +<6dbe> 8021 +<6dbf> 2832 +<6dc0> 8005 +<6dc2> 8033 +<6dc4> 2829 +<6dc5> 2817 +<6dc6> 2828 +<6dc7> 2807 +<6dc8> 8017 +<6dc9> 8035 +<6dca> 8027 +<6dcb> 2808 +<6dcc> 2802 +<6dcd> 8041 +<6dcf> 8034 +<6dd0> 8036 +<6dd1> 2810 +<6dd2> 2818 +<6dd3> 8038 +<6dd4> 8015 +<6dd5> 8032 +<6dd6> 8020 +<6dd7> 8040 +<6dd8> 2823 +<6dd9> 2799 +<6dda> 2821 +<6ddb> 8025 +<6dde> 2812 +<6ddf> 8019 +<6de0> 8018 +<6de1> 2801 +<6de2> 8012 +<6de3> 8042 +<6de4> 2803 +<6de5> 8022 +<6de6> 2833 +<6de8> 2827 +<6de9> 8011 +<6dea> 2824 +<6deb> 2822 +<6dec> 2831 +<6ded> 8029 +<6dee> 2826 +<6def> 7426 +<6df0> 8030 +<6df1> 2825 +<6df2> 8037 +<6df3> 2798 +endcidchar + +100 begincidchar +<6df4> 8026 +<6df5> 2816 +<6df6> 8014 +<6df7> 2815 +<6df9> 2813 +<6dfa> 2805 +<6dfb> 2804 +<6dfc> 8639 +<6dfd> 8039 +<6dfe> 18850 +<6e00> 8016 +<6e02> 15610 +<6e03> 8660 +<6e04> 15038 +<6e05> 2806 +<6e0a> 15041 +<6e0f> 15600 +<6e15> 18040 +<6e18> 18041 +<6e19> 3265 +<6e1a> 2819 +<6e1b> 3247 +<6e1c> 8654 +<6e1d> 3261 +<6e1f> 8642 +<6e20> 3244 +<6e21> 3240 +<6e22> 8672 +<6e23> 3246 +<6e24> 3250 +<6e25> 3245 +<6e26> 3254 +<6e27> 8676 +<6e28> 8667 +<6e29> 18042 +<6e2a> 17154 +<6e2b> 8649 +<6e2c> 3259 +<6e2d> 3253 +<6e2e> 8661 +<6e2f> 3237 +<6e30> 8673 +<6e31> 8666 +<6e32> 3241 +<6e33> 8655 +<6e34> 3256 +<6e38> 3238 +<6e39> 8671 +<6e3a> 3258 +<6e3b> 8659 +<6e3e> 3262 +<6e3f> 8650 +<6e40> 8657 +<6e41> 8651 +<6e43> 3260 +<6e44> 3268 +<6e45> 8647 +<6e49> 8643 +<6e4a> 3243 +<6e4b> 8656 +<6e4d> 3257 +<6e4e> 3266 +<6e4f> 16948 +<6e50> 16849 +<6e51> 8658 +<6e52> 8682 +<6e53> 8674 +<6e54> 3239 +<6e55> 8680 +<6e56> 3251 +<6e57> 19024 +<6e58> 3249 +<6e59> 16614 +<6e5a> 8686 +<6e5b> 3248 +<6e5c> 8664 +<6e5d> 8652 +<6e5e> 8662 +<6e5f> 3271 +<6e60> 8668 +<6e61> 8665 +<6e62> 8648 +<6e63> 3267 +<6e64> 8678 +<6e65> 8675 +<6e66> 8683 +<6e67> 3242 +<6e68> 8663 +<6e69> 3270 +<6e6b> 8670 +<6e6e> 3252 +<6e6f> 3255 +<6e71> 8669 +<6e72> 3269 +<6e73> 8653 +<6e74> 8009 +<6e76> 14803 +<6e77> 8679 +<6e78> 8677 +<6e79> 8681 +endcidchar + +100 begincidchar +<6e7c> 16931 +<6e86> 18043 +<6e88> 8644 +<6e89> 3264 +<6e8b> 15295 +<6e8d> 9324 +<6e8e> 9323 +<6e8f> 9297 +<6e90> 3669 +<6e92> 9322 +<6e96> 3679 +<6e97> 9331 +<6e98> 3674 +<6e99> 9321 +<6e9a> 17793 +<6e9b> 9294 +<6e9c> 3680 +<6e9d> 3670 +<6e9e> 9309 +<6e9f> 9299 +<6ea0> 9302 +<6ea1> 9326 +<6ea2> 3664 +<6ea3> 9333 +<6ea4> 9325 +<6ea5> 3673 +<6ea6> 9314 +<6ea7> 3684 +<6eaa> 3683 +<6eab> 3677 +<6eae> 9332 +<6eaf> 3665 +<6eb0> 9312 +<6eb1> 9303 +<6eb2> 9316 +<6eb3> 9328 +<6eb4> 3685 +<6eb5> 16894 +<6eb6> 3667 +<6eb7> 9311 +<6eb8> 15884 +<6eb9> 9304 +<6eba> 3676 +<6ebb> 18045 +<6ebc> 3675 +<6ebd> 9307 +<6ebe> 9317 +<6ebf> 9327 +<6ec0> 9298 +<6ec1> 9308 +<6ec2> 3668 +<6ec3> 9318 +<6ec4> 3681 +<6ec5> 3672 +<6ec6> 9305 +<6ec7> 3671 +<6ec8> 9296 +<6ec9> 9310 +<6eca> 9330 +<6ecb> 3263 +<6ecc> 4127 +<6ecd> 9313 +<6ece> 9963 +<6ecf> 9315 +<6ed0> 9329 +<6ed1> 3678 +<6ed2> 9306 +<6ed3> 3666 +<6ed4> 3682 +<6ed5> 4506 +<6ed6> 9295 +<6ed8> 9320 +<6ed9> 16489 +<6eda> 18047 +<6edb> 16431 +<6edc> 9319 +<6edd> 17720 +<6ee2> 18046 +<6eeb> 9991 +<6eec> 4124 +<6eed> 9980 +<6eee> 9985 +<6eef> 4113 +<6ef1> 9965 +<6ef2> 4126 +<6ef4> 4104 +<6ef5> 9964 +<6ef6> 9997 +<6ef7> 4128 +<6ef8> 9968 +<6ef9> 9984 +<6efa> 16955 +<6efb> 9970 +<6efc> 10000 +<6efd> 9996 +<6efe> 4102 +<6eff> 4112 +<6f00> 10566 +<6f01> 4125 +<6f02> 4110 +endcidchar + +100 begincidchar +<6f03> 9966 +<6f04> 16932 +<6f05> 9995 +<6f06> 4114 +<6f07> 9992 +<6f08> 10005 +<6f09> 9972 +<6f0a> 9981 +<6f0b> 15034 +<6f0c> 15611 +<6f0d> 10003 +<6f0e> 9993 +<6f0f> 4109 +<6f12> 9979 +<6f13> 4103 +<6f14> 4101 +<6f15> 4119 +<6f16> 16800 +<6f17> 18126 +<6f18> 9977 +<6f1c> 9999 +<6f1e> 10004 +<6f1f> 10002 +<6f20> 4107 +<6f21> 10006 +<6f22> 4111 +<6f23> 4118 +<6f24> 18051 +<6f25> 9967 +<6f26> 10542 +<6f27> 9976 +<6f29> 4105 +<6f2a> 4123 +<6f2b> 4120 +<6f2c> 4108 +<6f2d> 9986 +<6f2e> 9971 +<6f2f> 4121 +<6f30> 9988 +<6f31> 4115 +<6f32> 4117 +<6f33> 4100 +<6f34> 18052 +<6f35> 9990 +<6f36> 9982 +<6f37> 9969 +<6f38> 4116 +<6f39> 9998 +<6f3a> 10001 +<6f3b> 9978 +<6f3c> 9989 +<6f3d> 17026 +<6f3e> 4106 +<6f3f> 4489 +<6f40> 9987 +<6f41> 10541 +<6f43> 9994 +<6f44> 16960 +<6f4e> 9973 +<6f4f> 10551 +<6f50> 10561 +<6f51> 4492 +<6f52> 10560 +<6f53> 10572 +<6f54> 4494 +<6f55> 10558 +<6f56> 15954 +<6f57> 10562 +<6f58> 4505 +<6f5a> 10553 +<6f5b> 4497 +<6f5c> 16961 +<6f5d> 10565 +<6f5e> 11162 +<6f5f> 4509 +<6f60> 4508 +<6f61> 10567 +<6f62> 10550 +<6f63> 10577 +<6f64> 4503 +<6f66> 4493 +<6f67> 10570 +<6f69> 10574 +<6f6a> 10579 +<6f6b> 10568 +<6f6c> 10556 +<6f6d> 4496 +<6f6e> 4499 +<6f6f> 4507 +<6f70> 4502 +<6f72> 10559 +<6f73> 9983 +<6f74> 16963 +<6f76> 10555 +<6f77> 10578 +<6f78> 4498 +<6f79> 15294 +<6f7a> 4501 +<6f7b> 10580 +<6f7c> 4490 +endcidchar + +100 begincidchar +<6f7d> 10569 +<6f7e> 10543 +<6f7f> 10575 +<6f80> 5116 +<6f81> 18055 +<6f82> 10557 +<6f84> 4491 +<6f85> 10552 +<6f86> 4495 +<6f87> 10544 +<6f88> 4122 +<6f89> 10548 +<6f8a> 16789 +<6f8b> 10573 +<6f8c> 10549 +<6f8d> 10547 +<6f8e> 4500 +<6f90> 10571 +<6f92> 10546 +<6f93> 10564 +<6f94> 10563 +<6f95> 10576 +<6f96> 10554 +<6f97> 4504 +<6f9d> 16953 +<6f9e> 11165 +<6f9f> 16966 +<6fa0> 4843 +<6fa1> 4833 +<6fa2> 11177 +<6fa3> 11157 +<6fa4> 4835 +<6fa5> 11169 +<6fa6> 4842 +<6fa7> 4837 +<6fa8> 11167 +<6fa9> 11662 +<6faa> 11173 +<6fab> 11179 +<6fac> 11172 +<6fad> 11155 +<6fae> 11170 +<6faf> 11181 +<6fb0> 11183 +<6fb1> 4832 +<6fb2> 11182 +<6fb3> 4838 +<6fb4> 4844 +<6fb5> 15911 +<6fb6> 4841 +<6fb8> 11176 +<6fb9> 4840 +<6fba> 11171 +<6fbb> 15291 +<6fbc> 11159 +<6fbd> 11164 +<6fbe> 18056 +<6fbf> 11175 +<6fc0> 4839 +<6fc1> 4836 +<6fc2> 4831 +<6fc3> 4834 +<6fc4> 11163 +<6fc6> 10545 +<6fc7> 11158 +<6fc8> 11161 +<6fc9> 11178 +<6fca> 11166 +<6fcb> 11156 +<6fcc> 11661 +<6fcd> 11180 +<6fce> 11160 +<6fcf> 11174 +<6fd3> 16968 +<6fd4> 11664 +<6fd5> 5120 +<6fd8> 5108 +<6fd9> 15476 +<6fda> 15475 +<6fdb> 5112 +<6fdc> 11666 +<6fdd> 11672 +<6fde> 11670 +<6fe1> 5118 +<6fe2> 11673 +<6fe3> 11665 +<6fe4> 5113 +<6fe6> 11669 +<6fe7> 11668 +<6fe8> 11674 +<6fe9> 5119 +<6feb> 5114 +<6fec> 5117 +<6fed> 11667 +<6fee> 5121 +<6fef> 5115 +<6ff0> 5122 +<6ff1> 5109 +<6ff2> 11671 +<6ff4> 11663 +endcidchar + +100 begincidchar +<6ff6> 14501 +<6ff7> 12110 +<6ff8> 16951 +<6ffa> 5355 +<6ffb> 12107 +<6ffc> 12109 +<6ffe> 5353 +<6fff> 12105 +<7000> 12106 +<7001> 12101 +<7003> 18146 +<7004> 11168 +<7005> 12102 +<7006> 5354 +<7007> 12098 +<7009> 5351 +<700a> 12111 +<700b> 5352 +<700e> 12104 +<700f> 5357 +<7011> 5356 +<7014> 12103 +<7015> 5519 +<7016> 12461 +<7017> 12467 +<7018> 5520 +<7019> 12458 +<701a> 5517 +<701b> 5514 +<701c> 12469 +<701d> 5518 +<701e> 15478 +<701f> 5515 +<7020> 12460 +<7024> 12468 +<7026> 12108 +<7027> 12459 +<7028> 5516 +<7029> 12466 +<702a> 12783 +<702b> 12462 +<702c> 18062 +<702f> 12774 +<7030> 5661 +<7031> 12777 +<7032> 5662 +<7033> 12786 +<7034> 12776 +<7035> 12773 +<7037> 12775 +<7038> 12779 +<7039> 12782 +<703a> 12781 +<703b> 12785 +<703c> 12772 +<703e> 5660 +<703f> 12780 +<7040> 12784 +<7041> 12787 +<7042> 12778 +<704a> 13018 +<704b> 16980 +<704c> 5754 +<704d> 18887 +<7050> 18064 +<7051> 5832 +<7052> 13196 +<7054> 18065 +<7058> 5833 +<705a> 13347 +<705b> 13346 +<705c> 14418 +<705d> 13450 +<705e> 5922 +<705f> 13448 +<7060> 13451 +<7061> 13449 +<7062> 13520 +<7063> 5956 +<7064> 5970 +<7065> 13596 +<7066> 13574 +<7067> 15605 +<7068> 13595 +<706b> 742 +<706c> 17649 +<706e> 19154 +<706f> 18066 +<7070> 1010 +<7071> 6154 +<7074> 6339 +<7075> 14535 +<7076> 1254 +<7077> 18856 +<7078> 1257 +<7079> 16537 +<707a> 6340 +<707e> 16981 +<707f> 18067 +<7081> 18777 +endcidchar + +100 begincidchar +<7082> 6647 +<7083> 6649 +<7084> 6644 +<7085> 6641 +<7086> 6643 +<7089> 17401 +<708a> 1603 +<708b> 16587 +<708e> 1601 +<708f> 18099 +<7091> 6645 +<7092> 1602 +<7093> 6642 +<7094> 6639 +<7095> 1600 +<7096> 6646 +<7098> 6640 +<7099> 1604 +<709a> 6648 +<709f> 7014 +<70a0> 18242 +<70a1> 7018 +<70a3> 14706 +<70a4> 1936 +<70a5> 15543 +<70a6> 18128 +<70a7> 16982 +<70a9> 7021 +<70ab> 1928 +<70ac> 1931 +<70ad> 1933 +<70ae> 1935 +<70af> 1932 +<70b0> 7017 +<70b1> 7016 +<70b3> 1930 +<70b7> 7013 +<70b8> 1934 +<70b9> 15721 +<70ba> 1929 +<70bb> 18450 +<70bc> 17753 +<70bd> 17008 +<70be> 7015 +<70c0> 18227 +<70c4> 15274 +<70c8> 2337 +<70ca> 2333 +<70cb> 7454 +<70cc> 16984 +<70cd> 7462 +<70ce> 7467 +<70cf> 2338 +<70d0> 14701 +<70d1> 7452 +<70d2> 7458 +<70d3> 7451 +<70d4> 7461 +<70d7> 7457 +<70d8> 2334 +<70d9> 2336 +<70da> 7466 +<70dc> 7450 +<70dd> 7453 +<70de> 7459 +<70df> 16987 +<70e0> 7460 +<70e1> 7468 +<70e2> 7456 +<70e4> 2335 +<70ef> 2838 +<70f0> 8050 +<70f1> 15048 +<70f3> 8052 +<70f4> 8048 +<70f5> 18272 +<70f6> 8060 +<70f7> 8046 +<70f8> 8059 +<70f9> 2834 +<70fa> 8044 +<70fb> 8690 +<70fc> 8054 +<70fd> 2837 +<70fe> 15630 +<70ff> 8055 +<7100> 8058 +<7102> 8062 +<7104> 8051 +<7105> 14883 +<7106> 8056 +<710b> 8061 +<710c> 8049 +<710d> 8045 +<710e> 8063 +<7110> 8053 +<7113> 8057 +<7117> 8047 +<711b> 8700 +<711c> 3279 +endcidchar + +100 begincidchar +<711d> 15687 +<711e> 8688 +<711f> 8697 +<7120> 8687 +<7121> 3276 +<7122> 8695 +<7123> 8693 +<7125> 8694 +<7126> 3274 +<7128> 8698 +<7129> 15273 +<712b> 16993 +<712c> 17002 +<712e> 8691 +<712f> 8689 +<7130> 3275 +<7131> 8692 +<7132> 8696 +<7133> 15700 +<7134> 15486 +<7135> 14189 +<7136> 3277 +<713a> 8699 +<713b> 15045 +<713e> 14126 +<7140> 17304 +<7141> 9339 +<7142> 9346 +<7143> 9348 +<7144> 9354 +<7145> 16994 +<7146> 3698 +<7147> 9334 +<7149> 3690 +<714a> 16996 +<714b> 9349 +<714c> 3695 +<714d> 9355 +<714e> 3686 +<714f> 16999 +<7150> 9352 +<7151> 18533 +<7152> 9336 +<7153> 9353 +<7154> 9335 +<7156> 3700 +<7157> 19040 +<7158> 9347 +<7159> 3687 +<715a> 9356 +<715c> 3692 +<715d> 9340 +<715e> 3697 +<715f> 9351 +<7160> 9338 +<7161> 9345 +<7162> 9341 +<7163> 9337 +<7164> 3689 +<7165> 3696 +<7166> 3694 +<7167> 3691 +<7168> 3699 +<7169> 3688 +<716a> 9344 +<716b> 15557 +<716c> 3693 +<716e> 3278 +<7170> 9350 +<7171> 15808 +<7172> 9342 +<7173> 18407 +<7175> 15597 +<7176> 16384 +<7177> 14679 +<7178> 9343 +<717a> 18724 +<717b> 10014 +<717c> 14389 +<717d> 4131 +<717e> 14704 +<7180> 10010 +<7181> 10016 +<7182> 10012 +<7184> 4133 +<7185> 10011 +<7186> 10015 +<7187> 10007 +<7188> 18182 +<7189> 10009 +<718a> 4132 +<718c> 14826 +<718e> 15675 +<718f> 10013 +<7190> 10008 +<7191> 18866 +<7192> 4134 +<7194> 4129 +<7196> 16991 +<7197> 10017 +endcidchar + +100 begincidchar +<7198> 18461 +<7199> 4130 +<719a> 10586 +<719b> 10583 +<719c> 10595 +<719d> 10589 +<719e> 10591 +<719f> 4510 +<71a0> 10585 +<71a1> 10593 +<71a2> 18625 +<71a3> 16072 +<71a4> 10592 +<71a5> 10590 +<71a7> 10596 +<71a8> 4513 +<71a9> 10587 +<71aa> 10594 +<71ac> 4511 +<71ad> 15901 +<71af> 10582 +<71b0> 10584 +<71b1> 4512 +<71b2> 10581 +<71b3> 10597 +<71b4> 16990 +<71b5> 10588 +<71b7> 18059 +<71b8> 11187 +<71b9> 4851 +<71ba> 17006 +<71bc> 11198 +<71bd> 11196 +<71be> 4845 +<71bf> 11186 +<71c2> 11185 +<71c5> 11184 +<71c6> 11199 +<71c7> 11194 +<71c8> 4849 +<71c9> 4846 +<71ca> 11193 +<71cb> 11191 +<71ce> 4852 +<71cf> 11195 +<71d0> 4847 +<71d1> 14141 +<71d2> 4848 +<71d4> 11192 +<71d5> 4850 +<71d6> 11188 +<71d8> 11197 +<71d9> 4853 +<71dc> 4854 +<71dd> 16504 +<71df> 5124 +<71e0> 5131 +<71e1> 11675 +<71e2> 11681 +<71e4> 11679 +<71e5> 5127 +<71e6> 5126 +<71e7> 5123 +<71e8> 11677 +<71eb> 15489 +<71ec> 5129 +<71ed> 5128 +<71ee> 5125 +<71f0> 11680 +<71f1> 11676 +<71f2> 11678 +<71f4> 5130 +<71f5> 18158 +<71f6> 16026 +<71f8> 5361 +<71f9> 12114 +<71fd> 12116 +<71fe> 5360 +<71ff> 12113 +<7200> 18916 +<7201> 12112 +<7202> 12473 +<7203> 12115 +<7205> 12474 +<7206> 5521 +<7207> 12472 +<7209> 15803 +<720a> 12471 +<720c> 12470 +<720d> 5522 +<720e> 17009 +<720f> 14844 +<7210> 5663 +<7215> 17011 +<7216> 14675 +<7217> 14697 +<7219> 13025 +<721a> 13024 +<721b> 5755 +<721d> 13023 +endcidchar + +100 begincidchar +<7222> 13348 +<7223> 13452 +<7224> 17014 +<7225> 18996 +<7226> 13521 +<7227> 13621 +<7228> 5990 +<7229> 13641 +<722a> 743 +<722b> 17650 +<722e> 17017 +<7230> 1937 +<7235> 5132 +<7236> 744 +<7238> 1607 +<7239> 2339 +<723a> 3701 +<723b> 745 +<723d> 2839 +<723e> 4135 +<723f> 6029 +<7240> 17018 +<7241> 7022 +<7242> 7469 +<7244> 10018 +<7246> 5133 +<7247> 746 +<7248> 1608 +<724b> 8701 +<724c> 3280 +<724f> 9357 +<7250> 15049 +<7252> 3702 +<7253> 10019 +<7255> 17021 +<7256> 4514 +<7257> 17022 +<7258> 5523 +<7259> 747 +<725a> 8702 +<725b> 748 +<725c> 18010 +<725d> 1012 +<725e> 6155 +<725f> 1011 +<7260> 1260 +<7261> 1259 +<7262> 1258 +<7263> 6341 +<7266> 16059 +<7267> 1609 +<7269> 1610 +<726a> 6650 +<726c> 7025 +<726e> 7028 +<726f> 1939 +<7270> 7026 +<7272> 1938 +<7273> 7027 +<7274> 1940 +<7276> 7472 +<7277> 7471 +<7278> 7470 +<7279> 2340 +<727d> 2840 +<727e> 8064 +<727f> 8067 +<7280> 3282 +<7281> 2841 +<7282> 17027 +<7284> 3281 +<7285> 8706 +<7286> 8705 +<7287> 15050 +<728b> 8707 +<728c> 9359 +<728d> 9358 +<728e> 9362 +<728f> 17353 +<7290> 9361 +<7291> 9360 +<7292> 4136 +<7293> 10022 +<7294> 15051 +<7295> 10021 +<7296> 4137 +<7297> 10020 +<7298> 10598 +<729a> 10599 +<729b> 4515 +<729f> 18234 +<72a1> 12479 +<72a2> 5524 +<72a3> 12478 +<72a4> 12477 +<72a7> 5756 +<72a8> 12790 +<72a9> 13199 +<72aa> 13522 +<72ac> 749 +endcidchar + +100 begincidchar +<72ad> 17652 +<72ae> 6063 +<72af> 853 +<72b0> 6064 +<72b2> 16310 +<72ba> 6347 +<72bd> 6343 +<72bf> 6342 +<72c0> 1611 +<72c1> 6346 +<72c2> 1262 +<72c3> 6344 +<72c4> 1261 +<72c5> 6348 +<72c6> 6345 +<72c9> 6654 +<72ca> 7029 +<72cb> 6652 +<72cc> 6659 +<72cd> 17354 +<72ce> 1612 +<72d0> 1615 +<72d1> 6660 +<72d2> 6656 +<72d4> 6657 +<72d6> 6651 +<72d7> 1614 +<72d8> 6653 +<72d9> 1613 +<72da> 6658 +<72dc> 6655 +<72df> 7033 +<72e2> 16279 +<72e3> 7036 +<72e4> 7030 +<72e6> 7035 +<72e8> 7031 +<72e9> 1941 +<72ea> 7034 +<72eb> 7032 +<72f3> 7478 +<72f4> 7475 +<72f6> 7477 +<72f7> 2345 +<72f8> 2344 +<72f9> 2342 +<72fa> 7474 +<72fb> 7479 +<72fc> 2341 +<72fd> 2343 +<72fe> 7476 +<72ff> 8075 +<7300> 7473 +<7301> 7480 +<7302> 16282 +<7304> 16053 +<7307> 8070 +<7308> 8074 +<730a> 8073 +<730b> 8709 +<730c> 8720 +<730f> 8076 +<7310> 18154 +<7311> 8071 +<7312> 8708 +<7313> 2845 +<7316> 2844 +<7317> 8069 +<7318> 8072 +<7319> 2846 +<731b> 2843 +<731c> 2842 +<731d> 8068 +<731e> 8077 +<7322> 8711 +<7323> 8718 +<7325> 3284 +<7326> 8717 +<7327> 8714 +<7328> 17034 +<7329> 3286 +<732a> 15728 +<732b> 17029 +<732c> 16306 +<732d> 8716 +<732e> 17035 +<7330> 8710 +<7331> 8712 +<7332> 8715 +<7333> 8713 +<7334> 3285 +<7335> 8719 +<7336> 3283 +<7337> 3703 +<7338> 18155 +<7339> 17356 +<733a> 9366 +<733b> 9365 +<733c> 9363 +<733e> 3706 +endcidchar + +100 begincidchar +<733f> 3705 +<7340> 9367 +<7341> 18156 +<7342> 9364 +<7343> 10023 +<7344> 4138 +<7345> 3704 +<7348> 17402 +<7349> 9369 +<734a> 9368 +<734c> 10026 +<734d> 10024 +<734e> 4516 +<734f> 16209 +<7350> 4139 +<7351> 10025 +<7352> 10601 +<7357> 4517 +<7358> 10600 +<7359> 10609 +<735a> 10608 +<735b> 10606 +<735d> 10605 +<7361> 10607 +<7362> 10610 +<7365> 11208 +<7368> 4857 +<7369> 11204 +<736a> 11210 +<736b> 11209 +<736c> 11207 +<7370> 5134 +<7371> 16280 +<7372> 5135 +<7373> 11682 +<7374> 16084 +<7375> 5363 +<7376> 12117 +<7377> 5362 +<7378> 5525 +<737a> 5526 +<737b> 5664 +<737c> 12792 +<737d> 12791 +<737e> 13026 +<737f> 13200 +<7380> 5834 +<7381> 13350 +<7382> 13349 +<7383> 13351 +<7384> 854 +<7385> 7037 +<7386> 2346 +<7387> 2847 +<7388> 8078 +<7389> 855 +<738a> 6065 +<738b> 750 +<738c> 18918 +<738e> 6158 +<738f> 18149 +<7392> 6353 +<7395> 6349 +<7396> 1263 +<7397> 6350 +<7398> 14838 +<739c> 16522 +<739d> 6668 +<739e> 14683 +<739f> 1618 +<73a0> 6666 +<73a1> 6662 +<73a2> 6665 +<73a4> 6661 +<73a5> 1620 +<73a6> 6664 +<73a7> 16519 +<73a8> 1617 +<73a9> 1616 +<73aa> 17037 +<73ab> 1619 +<73ac> 6667 +<73ad> 6663 +<73b2> 1947 +<73b3> 1950 +<73b4> 7045 +<73b5> 7044 +<73b6> 7043 +<73b7> 1944 +<73b8> 7052 +<73b9> 7042 +<73ba> 18868 +<73bb> 1946 +<73bc> 7485 +<73be> 7049 +<73bf> 7047 +<73c0> 1949 +<73c2> 7039 +<73c3> 7050 +<73c4> 19123 +endcidchar + +100 begincidchar +<73c5> 7041 +<73c6> 7051 +<73c7> 7048 +<73c8> 7040 +<73c9> 17040 +<73ca> 1945 +<73cb> 7053 +<73cc> 7038 +<73cd> 1948 +<73ce> 16667 +<73cf> 17036 +<73d0> 15127 +<73d2> 7490 +<73d3> 7481 +<73d4> 7492 +<73d5> 16499 +<73d6> 7484 +<73d9> 7482 +<73da> 7494 +<73db> 7491 +<73dc> 7489 +<73dd> 7493 +<73de> 2352 +<73e0> 2350 +<73e1> 18160 +<73e2> 15523 +<73e3> 7487 +<73e4> 17061 +<73e5> 7483 +<73e6> 15546 +<73e7> 7486 +<73e8> 7497 +<73e9> 7488 +<73ea> 2351 +<73eb> 7046 +<73ed> 2347 +<73ee> 2349 +<73ef> 16401 +<73f3> 15531 +<73f4> 8092 +<73f5> 8081 +<73f6> 8079 +<73f7> 17050 +<73f8> 8080 +<73f9> 15353 +<73fa> 8087 +<73fb> 15532 +<73fc> 8088 +<73fd> 8084 +<73fe> 2852 +<73ff> 8089 +<7400> 8086 +<7401> 8083 +<7402> 18875 +<7403> 2850 +<7404> 8082 +<7405> 2848 +<7406> 2851 +<7407> 8085 +<7408> 8093 +<7409> 2348 +<740a> 2849 +<740b> 8091 +<740c> 8090 +<740d> 2853 +<7411> 17772 +<7412> 15334 +<7414> 14836 +<7415> 17051 +<7416> 8725 +<7417> 16557 +<7419> 18163 +<741a> 8726 +<741b> 3296 +<741c> 14557 +<741d> 8732 +<7420> 8734 +<7421> 8727 +<7422> 3290 +<7423> 8731 +<7424> 8730 +<7425> 3291 +<7426> 3297 +<7428> 3298 +<7429> 8733 +<742a> 3288 +<742b> 8724 +<742c> 8722 +<742d> 8728 +<742e> 8721 +<742f> 3295 +<7430> 8723 +<7431> 8729 +<7432> 8735 +<7433> 3289 +<7434> 3294 +<7437> 15073 +<7438> 15113 +<7439> 17054 +<743a> 3287 +endcidchar + +100 begincidchar +<743c> 15071 +<743f> 3713 +<7440> 9376 +<7441> 3712 +<7442> 9380 +<7443> 14874 +<7444> 9370 +<7445> 15319 +<7446> 9381 +<7447> 17060 +<7448> 15541 +<7449> 17041 +<744c> 19116 +<744d> 9382 +<744e> 9379 +<7451> 9374 +<7452> 9373 +<7453> 16945 +<7454> 9383 +<7455> 3709 +<7456> 14837 +<7457> 9375 +<7459> 3714 +<745a> 3708 +<745d> 17094 +<745e> 3711 +<745f> 3710 +<7460> 17058 +<7461> 19020 +<7462> 10027 +<7463> 4141 +<7464> 4140 +<7465> 16641 +<7467> 10032 +<7468> 15086 +<7469> 4518 +<746a> 4142 +<746b> 15335 +<746c> 17064 +<746d> 4144 +<746e> 10033 +<746f> 3707 +<7470> 4143 +<7471> 10029 +<7472> 10031 +<7473> 10028 +<7474> 17065 +<7475> 10030 +<7476> 17062 +<7479> 10620 +<747a> 15057 +<747c> 10619 +<747d> 10616 +<747e> 4521 +<747f> 11211 +<7480> 4522 +<7481> 10615 +<7482> 17068 +<7483> 4520 +<7485> 10617 +<7486> 10614 +<7487> 10611 +<7488> 10618 +<748b> 4519 +<748c> 14881 +<748d> 18077 +<7490> 11688 +<7492> 11215 +<7494> 11214 +<7495> 11216 +<7497> 11685 +<7498> 4860 +<7499> 14835 +<749a> 11212 +<749b> 15114 +<749c> 4858 +<749d> 19021 +<749e> 4862 +<749f> 4861 +<74a0> 11213 +<74a1> 11217 +<74a3> 4859 +<74a4> 16752 +<74a5> 11692 +<74a6> 5138 +<74a7> 5364 +<74a8> 5139 +<74a9> 5136 +<74aa> 11689 +<74ab> 11687 +<74ad> 11690 +<74af> 11693 +<74b0> 5137 +<74b1> 11691 +<74b2> 11686 +<74b4> 15525 +<74b5> 12120 +<74b6> 12123 +<74b7> 12482 +<74b8> 12118 +endcidchar + +100 begincidchar +<74b9> 18922 +<74ba> 12793 +<74bb> 12124 +<74bd> 5527 +<74be> 12122 +<74bf> 5365 +<74c0> 12119 +<74c1> 12121 +<74c2> 12125 +<74c3> 12483 +<74c5> 12481 +<74c6> 19125 +<74c8> 17077 +<74ca> 5528 +<74cb> 12480 +<74cc> 15070 +<74cf> 5665 +<74d0> 15003 +<74d3> 18170 +<74d4> 5758 +<74d5> 13202 +<74d6> 5757 +<74d7> 13204 +<74d8> 13201 +<74d9> 13203 +<74da> 5886 +<74db> 13453 +<74dc> 856 +<74dd> 6669 +<74e0> 2854 +<74e1> 9384 +<74e2> 4863 +<74e3> 5529 +<74e4> 5835 +<74e5> 13454 +<74e6> 857 +<74e7> 16382 +<74e8> 6670 +<74e9> 288 +<74ec> 7054 +<74ee> 7055 +<74f0> 16358 +<74f1> 16283 +<74f2> 16351 +<74f8> 16372 +<74fb> 8736 +<74fd> 9387 +<74fe> 9386 +<74ff> 9385 +<7500> 10034 +<7504> 4145 +<7505> 16350 +<7507> 10622 +<7508> 10621 +<750b> 11218 +<750e> 17079 +<750f> 11697 +<7513> 12127 +<7514> 12126 +<7515> 5366 +<7516> 12484 +<7517> 13027 +<7518> 858 +<7519> 17795 +<751a> 1951 +<751c> 2857 +<751d> 9388 +<751e> 17080 +<751f> 859 +<7521> 7502 +<7522> 2858 +<752a> 6159 +<752b> 1265 +<752c> 1264 +<752d> 1952 +<752e> 7056 +<752f> 8737 +<7534> 16007 +<7535> 17754 +<7539> 6355 +<753a> 6354 +<753b> 15867 +<753d> 1621 +<753e> 6673 +<7542> 17357 +<7546> 16192 +<754a> 17087 +<754b> 1956 +<754c> 1954 +<754d> 17086 +<754e> 1955 +<754f> 1953 +<7551> 15614 +<7553> 16363 +<7554> 2353 +<7555> 15082 +<7559> 2357 +<755a> 2356 +<755b> 7503 +<755c> 2355 +endcidchar + +100 begincidchar +<755d> 2354 +<755f> 7504 +<7560> 15729 +<7562> 2861 +<7563> 8095 +<7564> 8094 +<7567> 17088 +<756a> 3302 +<756b> 3301 +<756c> 8739 +<756d> 18173 +<756e> 17089 +<756f> 8738 +<7570> 2862 +<7572> 18174 +<7576> 3717 +<7577> 9390 +<7578> 3718 +<7579> 9389 +<757a> 16207 +<757d> 10037 +<757e> 10623 +<757f> 4523 +<7580> 11219 +<7583> 15077 +<7584> 11698 +<7586> 5531 +<7587> 5530 +<758a> 5836 +<758b> 866 +<758c> 6674 +<758d> 18175 +<758e> 17093 +<758f> 2863 +<7590> 10038 +<7591> 4146 +<7592> 558 +<7598> 6675 +<759d> 1622 +<759e> 17095 +<75a7> 7059 +<75aa> 7060 +<75ab> 1957 +<75b0> 7505 +<75b1> 16045 +<75b4> 17096 +<75b5> 2866 +<75b6> 7511 +<75b8> 2367 +<75b9> 2365 +<75ba> 7512 +<75bb> 7507 +<75bc> 2364 +<75bd> 2363 +<75be> 2358 +<75bf> 7510 +<75c0> 7509 +<75c1> 7506 +<75c2> 2366 +<75c3> 16275 +<75c4> 7508 +<75c5> 2359 +<75c7> 2360 +<75c8> 18177 +<75ca> 2867 +<75cd> 2868 +<75ce> 8096 +<75cf> 8098 +<75d0> 8102 +<75d1> 8101 +<75d2> 8097 +<75d7> 8747 +<75d8> 3307 +<75d9> 3306 +<75da> 8741 +<75db> 3304 +<75dc> 17358 +<75dd> 8744 +<75de> 3308 +<75df> 8745 +<75e0> 3309 +<75e1> 8742 +<75e2> 3303 +<75e3> 3305 +<75e4> 8746 +<75e6> 8743 +<75e7> 8740 +<75ed> 9403 +<75ef> 9392 +<75f0> 3720 +<75f1> 3723 +<75f2> 3722 +<75f3> 3727 +<75f4> 3726 +<75f5> 9404 +<75f6> 9402 +<75f7> 9395 +<75f8> 9399 +<75f9> 9398 +<75fa> 3724 +endcidchar + +100 begincidchar +<75fb> 9401 +<75fc> 9397 +<75fd> 9405 +<75fe> 9396 +<75ff> 3725 +<7600> 3719 +<7601> 3721 +<7602> 17097 +<7603> 9394 +<7607> 16271 +<7608> 10040 +<7609> 4150 +<760a> 10044 +<760b> 4149 +<760c> 10041 +<760d> 4148 +<760f> 9393 +<7610> 9400 +<7611> 10043 +<7613> 4151 +<7614> 10045 +<7615> 10042 +<7616> 10039 +<7619> 10626 +<761a> 10630 +<761b> 10632 +<761c> 10628 +<761d> 10627 +<761e> 10625 +<761f> 4526 +<7620> 4524 +<7623> 10629 +<7624> 4527 +<7625> 10624 +<7626> 4528 +<7627> 4147 +<7628> 10631 +<7629> 4525 +<762c> 17098 +<762d> 11221 +<762f> 11220 +<7630> 11228 +<7631> 11222 +<7632> 11227 +<7633> 11224 +<7634> 4866 +<7635> 11226 +<7638> 4867 +<763a> 4868 +<763b> 15984 +<763c> 11225 +<763d> 11223 +<7640> 16102 +<7642> 5141 +<7643> 11699 +<7646> 5140 +<7647> 11702 +<764c> 5142 +<764d> 18178 +<764e> 15986 +<764f> 17100 +<7650> 12131 +<7651> 17099 +<7652> 5369 +<7653> 12132 +<7654> 16112 +<7656> 5367 +<7657> 12133 +<7658> 5368 +<7659> 12130 +<765a> 12134 +<765c> 12128 +<765f> 5532 +<7660> 12485 +<7661> 5533 +<7662> 5666 +<7664> 12129 +<7665> 5667 +<7666> 16042 +<7667> 16297 +<7669> 5759 +<766a> 13028 +<766c> 5838 +<766d> 13205 +<766e> 5837 +<766f> 17101 +<7670> 13352 +<7673> 15083 +<7674> 18179 +<7675> 13635 +<7676> 559 +<7678> 1962 +<7679> 7061 +<767a> 18181 +<767d> 867 +<767e> 1013 +<767f> 6160 +<7680> 17363 +<7681> 6358 +<7682> 1268 +endcidchar + +100 begincidchar +<7684> 1625 +<7689> 8104 +<768a> 7513 +<768b> 2368 +<768c> 17364 +<768e> 2869 +<768f> 8103 +<7690> 17104 +<7692> 8749 +<7693> 3313 +<7695> 8748 +<7696> 3312 +<7699> 9406 +<769a> 4531 +<769b> 10636 +<76a1> 17109 +<76a4> 11703 +<76a5> 17110 +<76a6> 12135 +<76aa> 12795 +<76ab> 12794 +<76ad> 13206 +<76ae> 868 +<76af> 6676 +<76b0> 2369 +<76b4> 3314 +<76b5> 9407 +<76b7> 17111 +<76b8> 10046 +<76ba> 4532 +<76bb> 11229 +<76bd> 12136 +<76be> 12796 +<76bf> 869 +<76c2> 1626 +<76c3> 1968 +<76c4> 7062 +<76c5> 1969 +<76c6> 1967 +<76c8> 1966 +<76c9> 7514 +<76ca> 2370 +<76cc> 17112 +<76d2> 2871 +<76d3> 8105 +<76d4> 2870 +<76d6> 16213 +<76d9> 18891 +<76da> 8750 +<76db> 2872 +<76dc> 3315 +<76dd> 9408 +<76e1> 4152 +<76e3> 4153 +<76e4> 4533 +<76e5> 4870 +<76e6> 11230 +<76e7> 4869 +<76e9> 11704 +<76ea> 5143 +<76ec> 12137 +<76ed> 12797 +<76ee> 870 +<76ef> 1269 +<76f0> 6679 +<76f1> 6678 +<76f2> 1627 +<76f3> 6677 +<76f4> 1628 +<76f5> 6680 +<76f7> 7068 +<76f8> 1972 +<76f9> 1971 +<76fa> 7070 +<76fb> 7069 +<76fc> 1976 +<76fe> 1975 +<7701> 1970 +<7707> 1977 +<7708> 7063 +<7709> 1973 +<770a> 7067 +<770b> 1974 +<770c> 15714 +<7710> 7517 +<7711> 7521 +<7712> 7519 +<7713> 7518 +<7715> 7522 +<771b> 7516 +<771d> 7515 +<771e> 17118 +<7722> 7525 +<7723> 7520 +<7724> 16360 +<7725> 8114 +<7726> 17119 +<7727> 7526 +<7728> 2376 +<7729> 2373 +endcidchar + +100 begincidchar +<772b> 16371 +<772d> 8108 +<772f> 8107 +<7733> 8112 +<7734> 8111 +<7735> 8116 +<7736> 2876 +<7737> 2873 +<7738> 2877 +<7739> 8106 +<773a> 2878 +<773b> 8115 +<773c> 2875 +<773d> 8113 +<773e> 2874 +<7740> 17120 +<7743> 18186 +<7744> 8753 +<7745> 8755 +<774a> 8756 +<774d> 8754 +<774e> 8757 +<774f> 3316 +<7752> 9412 +<7754> 9417 +<7755> 9409 +<7756> 9413 +<7758> 17123 +<7759> 9418 +<775a> 9414 +<775b> 3730 +<775c> 3738 +<775e> 3733 +<7761> 4157 +<7762> 3741 +<7763> 3734 +<7765> 3739 +<7766> 3732 +<7767> 9416 +<7768> 3740 +<7769> 9415 +<776a> 3736 +<776b> 3731 +<776c> 3737 +<776d> 9419 +<776e> 10051 +<776f> 10053 +<7772> 14699 +<7777> 18089 +<7778> 15104 +<7779> 3735 +<777a> 17175 +<777b> 15108 +<777c> 10048 +<777d> 4155 +<777e> 10054 +<777f> 4156 +<7780> 10052 +<7781> 10047 +<7782> 10050 +<7783> 10055 +<7784> 4154 +<7785> 10049 +<7787> 4535 +<7788> 10640 +<7789> 10639 +<778b> 4538 +<778c> 4536 +<778d> 10637 +<778e> 4534 +<778f> 10638 +<7791> 4537 +<7793> 14381 +<7795> 11238 +<7797> 11240 +<7798> 18190 +<7799> 11239 +<779a> 11231 +<779b> 11235 +<779c> 11234 +<779d> 11232 +<77a0> 4871 +<77a1> 11233 +<77a5> 4874 +<77a7> 5148 +<77a8> 11712 +<77aa> 5145 +<77ab> 11706 +<77ac> 5147 +<77ad> 5149 +<77af> 17125 +<77b0> 5146 +<77b1> 11711 +<77b2> 11707 +<77b3> 5144 +<77b4> 11710 +<77b5> 11705 +<77b6> 11709 +<77b7> 11708 +<77b9> 15987 +endcidchar + +100 begincidchar +<77ba> 12139 +<77bd> 5370 +<77be> 18193 +<77bf> 5371 +<77c2> 12138 +<77c3> 15281 +<77c4> 12488 +<77c5> 16833 +<77c7> 5534 +<77cb> 18194 +<77cc> 12798 +<77cd> 12801 +<77d0> 13029 +<77d3> 5760 +<77d4> 13353 +<77d5> 13455 +<77d7> 5925 +<77da> 5971 +<77db> 871 +<77dc> 1978 +<77dd> 18894 +<77de> 8760 +<77e0> 9420 +<77e2> 872 +<77e3> 1270 +<77e5> 1629 +<77e6> 16513 +<77e9> 2377 +<77ec> 8761 +<77ed> 3317 +<77ee> 3742 +<77ef> 5150 +<77f0> 11713 +<77f1> 12489 +<77f2> 12802 +<77f3> 873 +<77f4> 17129 +<77f7> 6686 +<77f8> 6681 +<77f9> 6683 +<77fa> 6685 +<77fb> 6684 +<77fc> 6682 +<77fd> 1630 +<77fe> 16341 +<7802> 1979 +<7803> 7081 +<7805> 7076 +<7806> 7073 +<7808> 15942 +<7809> 7080 +<780e> 7079 +<780f> 7078 +<7810> 7077 +<7813> 7082 +<7814> 1980 +<7818> 18195 +<781c> 18196 +<781d> 2381 +<781e> 15123 +<781f> 2387 +<7820> 2386 +<7821> 7535 +<7822> 7529 +<7823> 7527 +<7825> 2384 +<7826> 8123 +<7827> 2379 +<7828> 7532 +<7829> 7536 +<782a> 7538 +<782b> 7534 +<782c> 7528 +<782d> 2385 +<782e> 7533 +<782f> 7531 +<7830> 2378 +<7831> 7539 +<7832> 2388 +<7833> 7537 +<7834> 2382 +<7835> 7530 +<7837> 2383 +<7838> 2380 +<7839> 17366 +<783c> 16410 +<783d> 15466 +<7842> 15044 +<7843> 2880 +<7844> 15403 +<7845> 8124 +<7847> 18197 +<7848> 8117 +<7849> 8119 +<784a> 8121 +<784b> 15469 +<784c> 8122 +<784d> 8120 +<784e> 2881 +<7850> 8125 +endcidchar + +100 begincidchar +<7851> 18198 +<7852> 8118 +<7853> 16277 +<7854> 15467 +<785c> 8765 +<785d> 3318 +<785e> 8773 +<7860> 8762 +<7862> 8774 +<7866> 18199 +<7868> 8772 +<7869> 8771 +<786a> 8768 +<786b> 2879 +<786c> 3319 +<786d> 8766 +<786e> 8769 +<786f> 3320 +<7870> 8770 +<7871> 8767 +<7879> 9431 +<787a> 16105 +<787b> 9435 +<787c> 3749 +<787e> 10061 +<787f> 3752 +<7880> 9433 +<7881> 14056 +<7883> 9430 +<7884> 9425 +<7887> 9421 +<7888> 15125 +<7889> 3748 +<788c> 3747 +<788d> 15124 +<788e> 3743 +<788f> 9424 +<7891> 3750 +<7893> 3751 +<7894> 9423 +<7895> 9426 +<7896> 9434 +<7899> 9432 +<789a> 9422 +<789e> 10063 +<789f> 4159 +<78a0> 10065 +<78a1> 9429 +<78a2> 10067 +<78a3> 4163 +<78a4> 10068 +<78a5> 10064 +<78a7> 4160 +<78a8> 10060 +<78a9> 4162 +<78aa> 10057 +<78ab> 10062 +<78ac> 10066 +<78ad> 10059 +<78af> 17132 +<78b0> 3744 +<78b1> 17140 +<78b2> 10056 +<78b3> 4161 +<78b4> 10058 +<78b6> 15468 +<78b8> 17777 +<78b9> 15459 +<78ba> 4541 +<78bb> 10642 +<78bc> 4545 +<78be> 4543 +<78c1> 4158 +<78c5> 4540 +<78c7> 17133 +<78c8> 10648 +<78c9> 10651 +<78ca> 4542 +<78cb> 4539 +<78cc> 10644 +<78cd> 10641 +<78ce> 10646 +<78cf> 10643 +<78d0> 4546 +<78d1> 10645 +<78d2> 15126 +<78d3> 17134 +<78d4> 10647 +<78d5> 4544 +<78d7> 17138 +<78d8> 16268 +<78da> 4876 +<78db> 11247 +<78dd> 11241 +<78de> 11245 +<78e3> 11246 +<78e4> 18874 +<78e5> 11243 +<78e7> 4878 +<78e8> 4875 +endcidchar + +100 begincidchar +<78e9> 11242 +<78ea> 11244 +<78ec> 4877 +<78ed> 11250 +<78ee> 14977 +<78ef> 5154 +<78f0> 15162 +<78f1> 16574 +<78f2> 11720 +<78f3> 11714 +<78f4> 5153 +<78f5> 14515 +<78f7> 5151 +<78f9> 11722 +<78fa> 5152 +<78fd> 11715 +<78fe> 11723 +<78ff> 11719 +<7901> 5155 +<7902> 11716 +<7904> 11724 +<7905> 11721 +<7906> 16335 +<7909> 12143 +<790c> 12140 +<790e> 5374 +<7910> 12144 +<7911> 12146 +<7912> 12145 +<7917> 12494 +<7919> 5535 +<791b> 12491 +<791c> 12493 +<791d> 12490 +<791e> 12495 +<7921> 12492 +<7923> 12804 +<7924> 12807 +<7925> 12803 +<7926> 5668 +<7929> 12808 +<792a> 5669 +<792b> 5671 +<792c> 5670 +<792d> 13030 +<792e> 17136 +<792f> 13032 +<7931> 13031 +<7932> 18203 +<7933> 18202 +<7934> 17139 +<7935> 13207 +<7936> 14211 +<7938> 13456 +<7939> 13525 +<793a> 874 +<793b> 17655 +<793c> 17152 +<793d> 6359 +<793e> 1631 +<793f> 6688 +<7942> 6687 +<7944> 7087 +<7945> 7086 +<7946> 1983 +<7947> 1986 +<7948> 1985 +<7949> 1984 +<794a> 7083 +<794b> 7085 +<794c> 7084 +<794f> 7542 +<7950> 2390 +<7951> 7546 +<7952> 7545 +<7953> 7544 +<7954> 7540 +<7955> 2389 +<7956> 2393 +<7957> 2396 +<7958> 14309 +<7959> 15128 +<795a> 2397 +<795b> 7541 +<795c> 7543 +<795d> 2395 +<795e> 2394 +<795f> 2392 +<7960> 2391 +<7961> 8132 +<7962> 15997 +<7963> 8130 +<7964> 8126 +<7965> 2882 +<7967> 8127 +<7968> 2883 +<796b> 8131 +<796d> 2884 +<7970> 8778 +<7971> 16744 +endcidchar + +100 begincidchar +<7972> 8777 +<7973> 8776 +<7974> 8775 +<7979> 9439 +<797a> 3753 +<797c> 9436 +<797d> 9438 +<797e> 15910 +<797f> 3754 +<7980> 17148 +<7981> 3755 +<7982> 9437 +<7983> 15862 +<7986> 17145 +<7987> 17800 +<7988> 10077 +<798d> 4166 +<7990> 10079 +<7991> 18205 +<7992> 10078 +<7993> 10075 +<7994> 10074 +<7995> 10073 +<7996> 10072 +<7997> 10076 +<7998> 10069 +<7999> 17404 +<799a> 10652 +<799b> 10657 +<799c> 10655 +<799d> 17150 +<799f> 14686 +<79a0> 10654 +<79a1> 10653 +<79a2> 10656 +<79a4> 11253 +<79a5> 15134 +<79a6> 4879 +<79a7> 5156 +<79a8> 11726 +<79a9> 17153 +<79aa> 5157 +<79ab> 11725 +<79ac> 12148 +<79ad> 12147 +<79ae> 5375 +<79b0> 12496 +<79b1> 5536 +<79b2> 12809 +<79b3> 5839 +<79b4> 13208 +<79b6> 13458 +<79b7> 13457 +<79b8> 6066 +<79bb> 8133 +<79bd> 3757 +<79be> 875 +<79bf> 1273 +<79c0> 1272 +<79c1> 1271 +<79c4> 15565 +<79c5> 6689 +<79c6> 17157 +<79c8> 1635 +<79c9> 1634 +<79ca> 19025 +<79cb> 1991 +<79cc> 16947 +<79cd> 7089 +<79ce> 7092 +<79cf> 7090 +<79d0> 19111 +<79d4> 17159 +<79d5> 7088 +<79d6> 7091 +<79d8> 2404 +<79dc> 7553 +<79dd> 7555 +<79de> 7554 +<79df> 2401 +<79e0> 7549 +<79e2> 15450 +<79e3> 2399 +<79e4> 2398 +<79e6> 2402 +<79e7> 2400 +<79e9> 2403 +<79ea> 7552 +<79ed> 7551 +<79ee> 7550 +<79f1> 15143 +<79f4> 15138 +<79f8> 8135 +<79fa> 8134 +<79fb> 2885 +<7a00> 3325 +<7a02> 8779 +<7a03> 8781 +<7a04> 8783 +<7a05> 3324 +endcidchar + +100 begincidchar +<7a06> 18206 +<7a08> 3322 +<7a0a> 8780 +<7a0b> 3323 +<7a0c> 8782 +<7a0d> 3321 +<7a10> 9449 +<7a11> 9440 +<7a12> 9443 +<7a13> 9447 +<7a14> 3761 +<7a15> 9445 +<7a17> 9444 +<7a1a> 3759 +<7a1b> 9448 +<7a1c> 3758 +<7a1e> 3763 +<7a1f> 3762 +<7a20> 3760 +<7a22> 9446 +<7a26> 10085 +<7a28> 10084 +<7a2a> 18883 +<7a2b> 10080 +<7a2c> 19119 +<7a2d> 16346 +<7a2e> 4167 +<7a2f> 10083 +<7a30> 10082 +<7a31> 4168 +<7a32> 19112 +<7a37> 4551 +<7a39> 10659 +<7a3a> 15137 +<7a3b> 4552 +<7a3c> 4548 +<7a3d> 4550 +<7a3e> 16267 +<7a3f> 4547 +<7a40> 4549 +<7a43> 14700 +<7a44> 11254 +<7a45> 15857 +<7a46> 4882 +<7a47> 11256 +<7a48> 11255 +<7a49> 14131 +<7a4a> 10081 +<7a4b> 4884 +<7a4c> 4883 +<7a54> 11731 +<7a56> 11729 +<7a57> 5158 +<7a58> 11730 +<7a5a> 11732 +<7a5b> 11728 +<7a5c> 11727 +<7a5f> 12149 +<7a60> 5378 +<7a65> 14134 +<7a69> 5538 +<7a6b> 5537 +<7a6e> 12810 +<7a72> 19133 +<7a74> 876 +<7a75> 6161 +<7a76> 1274 +<7a78> 6690 +<7a79> 1637 +<7a7a> 1636 +<7a7b> 6691 +<7a7d> 14135 +<7a7e> 7094 +<7a7f> 1992 +<7a80> 7093 +<7a81> 1993 +<7a83> 15741 +<7a84> 2405 +<7a85> 7558 +<7a86> 7556 +<7a87> 7562 +<7a88> 2406 +<7a89> 7557 +<7a8a> 7561 +<7a8f> 8138 +<7a90> 8140 +<7a91> 17368 +<7a92> 2886 +<7a93> 18926 +<7a94> 8139 +<7a95> 2887 +<7a96> 3328 +<7a97> 3327 +<7a98> 3326 +<7a99> 8784 +<7a9e> 9452 +<7aa2> 9451 +<7aa3> 9450 +<7aa8> 10086 +<7aa9> 4170 +endcidchar + +100 begincidchar +<7aaa> 4169 +<7aae> 4554 +<7aaf> 4553 +<7ab0> 14138 +<7ab1> 11260 +<7ab2> 10660 +<7ab3> 10662 +<7ab4> 10661 +<7ab5> 11259 +<7ab6> 11257 +<7ab7> 11261 +<7ab8> 11258 +<7aba> 4885 +<7abb> 14137 +<7abc> 18209 +<7abe> 11733 +<7abf> 5159 +<7ac7> 5672 +<7ac8> 15743 +<7ac9> 17776 +<7aca> 5887 +<7acb> 877 +<7acf> 18212 +<7ad1> 7095 +<7ad3> 16266 +<7ad8> 7563 +<7ad9> 2407 +<7ada> 14144 +<7adb> 18213 +<7adc> 14673 +<7add> 14145 +<7adf> 3038 +<7ae0> 3037 +<7ae2> 15155 +<7ae3> 3330 +<7ae4> 8786 +<7ae5> 3329 +<7ae6> 8785 +<7ae7> 14429 +<7ae9> 14385 +<7aea> 14146 +<7aeb> 9453 +<7aed> 4171 +<7aee> 10089 +<7aef> 4172 +<7af6> 5673 +<7af7> 12813 +<7af9> 1014 +<7afa> 1638 +<7afb> 6692 +<7afc> 19095 +<7afd> 1995 +<7afe> 15165 +<7aff> 1994 +<7b04> 7565 +<7b05> 7567 +<7b06> 2408 +<7b08> 7569 +<7b09> 7572 +<7b0a> 7570 +<7b0b> 14150 +<7b0c> 15203 +<7b0e> 7571 +<7b0f> 7568 +<7b10> 7564 +<7b11> 2409 +<7b12> 7573 +<7b13> 7566 +<7b14> 16247 +<7b18> 8149 +<7b19> 2893 +<7b1a> 8158 +<7b1b> 2890 +<7b1d> 8151 +<7b1e> 2894 +<7b1f> 16145 +<7b20> 2888 +<7b22> 8146 +<7b23> 8159 +<7b24> 8147 +<7b25> 8144 +<7b26> 2892 +<7b27> 15199 +<7b28> 2889 +<7b29> 14152 +<7b2a> 8150 +<7b2b> 8153 +<7b2c> 2891 +<7b2d> 8154 +<7b2e> 2895 +<7b2f> 8155 +<7b30> 8145 +<7b31> 8152 +<7b32> 8156 +<7b33> 8148 +<7b34> 8143 +<7b35> 8141 +<7b38> 8157 +<7b39> 15726 +<7b3b> 8142 +endcidchar + +100 begincidchar +<7b40> 8793 +<7b42> 15853 +<7b43> 15909 +<7b44> 8789 +<7b45> 8795 +<7b46> 3333 +<7b47> 8788 +<7b48> 8790 +<7b49> 3331 +<7b4a> 8787 +<7b4b> 3338 +<7b4c> 8791 +<7b4d> 3337 +<7b4e> 8792 +<7b4f> 3339 +<7b50> 3334 +<7b51> 3340 +<7b52> 3335 +<7b54> 3336 +<7b55> 14151 +<7b56> 3332 +<7b58> 8794 +<7b60> 3768 +<7b61> 9464 +<7b62> 18215 +<7b63> 9467 +<7b64> 9455 +<7b65> 9460 +<7b66> 9454 +<7b67> 3770 +<7b69> 9458 +<7b6c> 18216 +<7b6d> 9456 +<7b6e> 3769 +<7b6f> 14156 +<7b70> 9463 +<7b71> 9462 +<7b72> 9459 +<7b73> 9461 +<7b74> 9457 +<7b75> 4176 +<7b76> 9466 +<7b77> 3766 +<7b78> 9465 +<7b7b> 18217 +<7b82> 10105 +<7b84> 4183 +<7b85> 10100 +<7b87> 4182 +<7b88> 10090 +<7b8a> 10092 +<7b8b> 4175 +<7b8c> 10097 +<7b8d> 10096 +<7b8e> 10099 +<7b8f> 4180 +<7b90> 10094 +<7b91> 10093 +<7b92> 14162 +<7b94> 4179 +<7b95> 4174 +<7b96> 10095 +<7b97> 4177 +<7b98> 10101 +<7b99> 10103 +<7b9b> 10098 +<7b9c> 10091 +<7b9d> 4178 +<7ba0> 4562 +<7ba1> 4173 +<7ba2> 14155 +<7ba3> 16148 +<7ba4> 10104 +<7bac> 10666 +<7bad> 4555 +<7bae> 19140 +<7baf> 10668 +<7bb1> 4556 +<7bb2> 17948 +<7bb4> 4558 +<7bb5> 10671 +<7bb7> 10663 +<7bb8> 4181 +<7bb9> 10669 +<7bbe> 10665 +<7bc0> 3767 +<7bc1> 4561 +<7bc4> 4557 +<7bc5> 19117 +<7bc9> 4888 +<7bca> 10670 +<7bcb> 10664 +<7bcc> 4563 +<7bce> 10667 +<7bcf> 16152 +<7bd0> 14160 +<7bd4> 11271 +<7bd5> 11266 +<7bd8> 11276 +<7bd9> 4886 +endcidchar + +100 begincidchar +<7bda> 11268 +<7bdb> 4890 +<7bdc> 11274 +<7bdd> 11265 +<7bde> 11262 +<7bdf> 11277 +<7be0> 5165 +<7be1> 4891 +<7be2> 11273 +<7be3> 11263 +<7be4> 4889 +<7be5> 11267 +<7be6> 4893 +<7be7> 11264 +<7be8> 11269 +<7be9> 4892 +<7bea> 11272 +<7beb> 11275 +<7bec> 18927 +<7bf2> 11738 +<7bf3> 11745 +<7bf4> 11743 +<7bf7> 5163 +<7bf8> 11750 +<7bf9> 11270 +<7bfa> 14167 +<7bfb> 11741 +<7bfc> 16159 +<7bfd> 11751 +<7bfe> 5162 +<7bff> 11740 +<7c00> 11739 +<7c01> 11749 +<7c02> 11746 +<7c03> 11748 +<7c05> 11736 +<7c06> 11752 +<7c07> 5160 +<7c09> 11747 +<7c0a> 11756 +<7c0b> 11744 +<7c0c> 5164 +<7c0d> 5161 +<7c0e> 11742 +<7c0f> 11737 +<7c10> 11755 +<7c11> 4887 +<7c12> 18218 +<7c15> 16481 +<7c19> 12152 +<7c1b> 17369 +<7c1c> 12150 +<7c1d> 12156 +<7c1e> 5384 +<7c1f> 12154 +<7c20> 12153 +<7c21> 5386 +<7c22> 12159 +<7c23> 5385 +<7c25> 12160 +<7c26> 12157 +<7c27> 5382 +<7c28> 12158 +<7c29> 12151 +<7c2a> 5383 +<7c2b> 5381 +<7c2c> 12502 +<7c2d> 12155 +<7c30> 12161 +<7c33> 12499 +<7c35> 14169 +<7c37> 5543 +<7c38> 5541 +<7c39> 12501 +<7c3b> 12503 +<7c3c> 12500 +<7c3d> 5542 +<7c40> 5544 +<7c42> 16156 +<7c43> 5675 +<7c44> 14171 +<7c45> 12818 +<7c47> 12817 +<7c48> 12815 +<7c49> 12814 +<7c4a> 12816 +<7c4c> 5674 +<7c4d> 5676 +<7c50> 5761 +<7c51> 16312 +<7c53> 13034 +<7c54> 13033 +<7c56> 16127 +<7c57> 13211 +<7c59> 13213 +<7c5a> 13215 +<7c5b> 13214 +<7c5c> 13212 +<7c5d> 15167 +<7c5f> 5841 +endcidchar + +100 begincidchar +<7c60> 5840 +<7c63> 5889 +<7c64> 5888 +<7c65> 5890 +<7c66> 13355 +<7c67> 13354 +<7c69> 13526 +<7c6a> 13459 +<7c6b> 13527 +<7c6c> 5957 +<7c6d> 15168 +<7c6e> 5958 +<7c6f> 13575 +<7c70> 16210 +<7c72> 5995 +<7c73> 1015 +<7c74> 18076 +<7c75> 6693 +<7c7a> 7098 +<7c7b> 18221 +<7c7c> 15177 +<7c7d> 1996 +<7c7e> 16154 +<7c83> 14172 +<7c84> 7574 +<7c85> 7580 +<7c86> 16157 +<7c88> 7578 +<7c89> 2410 +<7c8a> 7576 +<7c8c> 7577 +<7c8d> 7579 +<7c8e> 15176 +<7c91> 7575 +<7c92> 2896 +<7c94> 8160 +<7c95> 2898 +<7c96> 8162 +<7c97> 2897 +<7c98> 8161 +<7c9c> 18222 +<7c9e> 8797 +<7c9f> 3341 +<7ca1> 8799 +<7ca2> 8796 +<7ca3> 8163 +<7ca5> 3342 +<7ca6> 14174 +<7ca7> 14061 +<7ca8> 8798 +<7cac> 14469 +<7cae> 15178 +<7caf> 9470 +<7cb1> 3771 +<7cb2> 9468 +<7cb3> 3772 +<7cb4> 9469 +<7cb5> 3773 +<7cb8> 18224 +<7cb9> 4184 +<7cba> 10109 +<7cbb> 10106 +<7cbc> 10108 +<7cbf> 10107 +<7cc2> 16343 +<7cc3> 18928 +<7cc5> 10672 +<7cc7> 14177 +<7cc8> 10673 +<7cc9> 14176 +<7cca> 4564 +<7ccb> 10675 +<7ccc> 10674 +<7ccd> 15173 +<7cce> 289 +<7cd2> 11278 +<7cd3> 15708 +<7cd4> 11279 +<7cd7> 11280 +<7cd9> 5171 +<7cda> 16345 +<7cdc> 5167 +<7cdd> 5172 +<7cde> 5168 +<7cdf> 5170 +<7ce0> 5166 +<7ce2> 5169 +<7ce6> 14178 +<7ce7> 5387 +<7ce8> 11757 +<7cea> 12505 +<7cec> 12504 +<7ced> 17370 +<7cee> 12819 +<7cf1> 13217 +<7cf2> 13035 +<7cf3> 14180 +<7cf4> 13216 +<7cf5> 14181 +<7cf6> 13528 +endcidchar + +100 begincidchar +<7cf7> 13597 +<7cf8> 1016 +<7cf9> 17656 +<7cfb> 1275 +<7cfc> 17773 +<7cfd> 6694 +<7cfe> 1639 +<7d00> 1999 +<7d01> 7106 +<7d02> 1997 +<7d03> 7104 +<7d04> 2002 +<7d05> 1998 +<7d06> 2003 +<7d07> 2001 +<7d08> 7105 +<7d09> 2000 +<7d0a> 2414 +<7d0b> 2413 +<7d0c> 7591 +<7d0d> 2422 +<7d0e> 7584 +<7d0f> 7590 +<7d10> 2418 +<7d11> 7583 +<7d12> 7589 +<7d13> 7587 +<7d14> 2417 +<7d15> 2419 +<7d16> 7586 +<7d17> 2412 +<7d18> 7585 +<7d19> 2423 +<7d1a> 2420 +<7d1b> 2424 +<7d1c> 2421 +<7d1d> 7582 +<7d1e> 7581 +<7d1f> 7588 +<7d20> 2415 +<7d21> 2411 +<7d22> 2416 +<7d25> 16094 +<7d28> 8178 +<7d29> 8171 +<7d2b> 3347 +<7d2c> 8170 +<7d2e> 2902 +<7d2f> 2909 +<7d30> 2906 +<7d31> 2912 +<7d32> 2911 +<7d33> 2907 +<7d35> 8164 +<7d36> 8167 +<7d38> 8166 +<7d39> 2903 +<7d3a> 8168 +<7d3b> 8177 +<7d3c> 2904 +<7d3d> 8165 +<7d40> 2905 +<7d41> 8172 +<7d42> 2910 +<7d43> 2900 +<7d44> 2908 +<7d45> 8169 +<7d46> 2899 +<7d47> 8173 +<7d4a> 8176 +<7d4d> 16349 +<7d4e> 8816 +<7d4f> 8807 +<7d50> 3344 +<7d51> 8814 +<7d52> 8811 +<7d53> 8803 +<7d54> 8812 +<7d55> 3346 +<7d56> 8804 +<7d58> 8800 +<7d5a> 16019 +<7d5b> 3779 +<7d5c> 8809 +<7d5d> 14185 +<7d5e> 3343 +<7d5f> 8815 +<7d61> 3350 +<7d62> 3352 +<7d63> 8802 +<7d66> 3351 +<7d67> 8805 +<7d68> 3345 +<7d69> 8813 +<7d6a> 8806 +<7d6b> 8810 +<7d6d> 8808 +<7d6e> 3348 +<7d6f> 8801 +<7d70> 3353 +endcidchar + +100 begincidchar +<7d71> 2901 +<7d72> 3349 +<7d73> 3354 +<7d79> 3775 +<7d7a> 9477 +<7d7b> 9479 +<7d7c> 9481 +<7d7d> 9485 +<7d7f> 9475 +<7d80> 9473 +<7d81> 3777 +<7d83> 9480 +<7d84> 9484 +<7d85> 9476 +<7d86> 9472 +<7d88> 9471 +<7d89> 14187 +<7d8b> 18902 +<7d8c> 9482 +<7d8d> 9474 +<7d8e> 9478 +<7d8f> 3778 +<7d91> 3776 +<7d92> 9486 +<7d93> 3774 +<7d94> 9483 +<7d95> 19003 +<7d96> 10126 +<7d97> 15187 +<7d9c> 4189 +<7d9d> 10118 +<7d9e> 4577 +<7d9f> 10128 +<7da0> 4192 +<7da1> 10132 +<7da2> 4198 +<7da3> 10113 +<7da4> 18135 +<7da6> 10129 +<7da7> 10110 +<7da8> 15516 +<7da9> 10131 +<7daa> 10114 +<7dab> 14188 +<7dac> 4205 +<7dad> 4202 +<7dae> 10130 +<7daf> 10124 +<7db0> 4188 +<7db1> 4196 +<7db2> 4195 +<7db3> 14190 +<7db4> 4194 +<7db5> 4200 +<7db7> 10111 +<7db8> 4201 +<7db9> 10125 +<7dba> 4197 +<7dbb> 4187 +<7dbc> 10127 +<7dbf> 4199 +<7dc0> 10116 +<7dc1> 10115 +<7dc2> 10112 +<7dc4> 10120 +<7dc5> 10117 +<7dc6> 10121 +<7dc7> 4204 +<7dc9> 10133 +<7dca> 4193 +<7dcd> 17774 +<7dce> 10119 +<7dcf> 18229 +<7dd0> 18231 +<7dd2> 4203 +<7dd3> 15182 +<7dd4> 18230 +<7dd6> 14191 +<7dd7> 10680 +<7dd8> 4569 +<7dd9> 4578 +<7dda> 4574 +<7ddb> 10677 +<7ddc> 15180 +<7ddd> 4571 +<7dde> 4575 +<7ddf> 10689 +<7de0> 4565 +<7de1> 10681 +<7de3> 4573 +<7de4> 14194 +<7de5> 14198 +<7de6> 10684 +<7de7> 10679 +<7de8> 4572 +<7de9> 4576 +<7dea> 10678 +<7dec> 4570 +<7dee> 10688 +<7def> 4567 +endcidchar + +100 begincidchar +<7df0> 10687 +<7df1> 10686 +<7df2> 4579 +<7df3> 10440 +<7df4> 4566 +<7df5> 14196 +<7df6> 10685 +<7df7> 10676 +<7df9> 4580 +<7dfa> 10683 +<7dfb> 4568 +<7dfd> 18232 +<7dfe> 15567 +<7e03> 10682 +<7e07> 15181 +<7e08> 4898 +<7e09> 4903 +<7e0a> 4896 +<7e0b> 11295 +<7e0c> 11286 +<7e0d> 11298 +<7e0e> 11290 +<7e0f> 11296 +<7e10> 4904 +<7e11> 4897 +<7e12> 11283 +<7e13> 11289 +<7e14> 11299 +<7e15> 11292 +<7e16> 11297 +<7e17> 11285 +<7e1a> 11293 +<7e1b> 4899 +<7e1c> 11291 +<7e1d> 4902 +<7e1e> 4901 +<7e21> 11284 +<7e22> 11294 +<7e23> 4900 +<7e24> 11301 +<7e25> 11300 +<7e27> 14207 +<7e29> 11768 +<7e2a> 11764 +<7e2b> 5179 +<7e2d> 11758 +<7e2e> 5173 +<7e2f> 5189 +<7e30> 11770 +<7e31> 5181 +<7e32> 5177 +<7e33> 11761 +<7e34> 5184 +<7e35> 5187 +<7e36> 11772 +<7e37> 5176 +<7e38> 11763 +<7e39> 5185 +<7e3a> 11774 +<7e3b> 11771 +<7e3c> 11759 +<7e3d> 5180 +<7e3e> 5174 +<7e3f> 5188 +<7e40> 11766 +<7e41> 5183 +<7e42> 11760 +<7e43> 5178 +<7e44> 11773 +<7e45> 5182 +<7e46> 5175 +<7e47> 11767 +<7e48> 5186 +<7e49> 11765 +<7e4c> 11769 +<7e50> 12163 +<7e51> 12169 +<7e52> 5393 +<7e53> 12172 +<7e56> 12164 +<7e57> 12171 +<7e58> 12166 +<7e59> 5394 +<7e5a> 5391 +<7e5b> 18964 +<7e5c> 12162 +<7e5e> 5390 +<7e5f> 12168 +<7e60> 12170 +<7e61> 5392 +<7e62> 12167 +<7e63> 12165 +<7e65> 18130 +<7e67> 14182 +<7e68> 12515 +<7e6b> 5545 +<7e6c> 18929 +<7e6d> 5546 +<7e6e> 14203 +<7e6f> 12511 +endcidchar + +100 begincidchar +<7e70> 12509 +<7e72> 12513 +<7e73> 5550 +<7e74> 12514 +<7e75> 12507 +<7e76> 12506 +<7e77> 12510 +<7e78> 12508 +<7e79> 5547 +<7e7a> 12512 +<7e7b> 12820 +<7e7c> 5681 +<7e7d> 5680 +<7e7e> 12821 +<7e7f> 15953 +<7e80> 12823 +<7e81> 12822 +<7e82> 5682 +<7e86> 13040 +<7e8a> 13036 +<7e8b> 13039 +<7e8c> 5763 +<7e8d> 13041 +<7e8e> 16073 +<7e8f> 5762 +<7e91> 13218 +<7e92> 18078 +<7e93> 5891 +<7e94> 5893 +<7e95> 13356 +<7e96> 5892 +<7e97> 13460 +<7e98> 13530 +<7e99> 13532 +<7e9a> 13529 +<7e9b> 13531 +<7e9c> 5977 +<7e9f> 18619 +<7ea4> 17755 +<7eac> 17756 +<7eba> 17757 +<7ec7> 17758 +<7ecf> 17759 +<7edf> 17760 +<7f06> 17761 +<7f36> 1017 +<7f37> 17762 +<7f38> 2004 +<7f39> 7455 +<7f3a> 2425 +<7f3d> 2913 +<7f43> 11302 +<7f44> 5190 +<7f45> 11775 +<7f47> 14210 +<7f48> 5395 +<7f49> 15977 +<7f4a> 12517 +<7f4b> 12516 +<7f4c> 5683 +<7f4d> 13042 +<7f4e> 15183 +<7f4f> 13219 +<7f50> 5926 +<7f51> 6162 +<7f52> 17654 +<7f53> 17657 +<7f54> 1640 +<7f55> 1276 +<7f58> 7107 +<7f5b> 7597 +<7f5c> 7592 +<7f5d> 7596 +<7f5e> 7594 +<7f5f> 2426 +<7f60> 7595 +<7f61> 7593 +<7f63> 8179 +<7f6b> 9488 +<7f6c> 9491 +<7f6d> 9487 +<7f6e> 3780 +<7f70> 4206 +<7f71> 16391 +<7f72> 3783 +<7f73> 10134 +<7f75> 4581 +<7f76> 10690 +<7f77> 4582 +<7f78> 16251 +<7f79> 4905 +<7f7a> 11305 +<7f7d> 11778 +<7f7e> 11777 +<7f7f> 11776 +<7f83> 12518 +<7f85> 5551 +<7f86> 12519 +<7f87> 13220 +<7f88> 5927 +endcidchar + +100 begincidchar +<7f89> 13461 +<7f8a> 1018 +<7f8b> 1642 +<7f8c> 1641 +<7f8d> 7109 +<7f8e> 2005 +<7f8f> 16924 +<7f91> 7108 +<7f92> 7599 +<7f93> 17371 +<7f94> 2427 +<7f95> 8180 +<7f96> 7598 +<7f97> 14214 +<7f9a> 2915 +<7f9b> 8183 +<7f9e> 2914 +<7fa2> 8821 +<7fa3> 14216 +<7fa4> 3786 +<7fa5> 9493 +<7fa6> 9492 +<7fa7> 9494 +<7fa8> 3785 +<7fa9> 3784 +<7fac> 10691 +<7fad> 10693 +<7fae> 17372 +<7faf> 4583 +<7fb0> 10692 +<7fb1> 11306 +<7fb2> 4906 +<7fb3> 12174 +<7fb4> 18233 +<7fb5> 12173 +<7fb6> 5552 +<7fb7> 12520 +<7fb8> 5554 +<7fb9> 5553 +<7fba> 12824 +<7fbb> 13043 +<7fbc> 5764 +<7fbd> 1019 +<7fbe> 7110 +<7fbf> 2006 +<7fc0> 7602 +<7fc1> 2429 +<7fc2> 7601 +<7fc3> 7600 +<7fc5> 2428 +<7fc7> 8189 +<7fc9> 8191 +<7fcc> 2916 +<7fcd> 8186 +<7fce> 2917 +<7fcf> 8190 +<7fd2> 2918 +<7fd7> 8824 +<7fdd> 15198 +<7fde> 10138 +<7fdf> 4209 +<7fe5> 10137 +<7fe6> 10698 +<7fe7> 18153 +<7fe8> 10699 +<7fe9> 4584 +<7fea> 10696 +<7feb> 10695 +<7fec> 10697 +<7fed> 10694 +<7fee> 4909 +<7fef> 11307 +<7ff2> 11780 +<7ff3> 5191 +<7ff4> 11779 +<7ff5> 12031 +<7ff9> 5396 +<7ffa> 14222 +<7ffb> 5397 +<7ffc> 5192 +<7fff> 12825 +<8000> 5684 +<8001> 1020 +<8002> 17661 +<8003> 1021 +<8004> 2431 +<8005> 1643 +<8006> 2430 +<8007> 7111 +<8008> 14225 +<800b> 3358 +<800c> 1022 +<800d> 2008 +<8010> 2007 +<8011> 2009 +<8012> 1023 +<8014> 7114 +<8015> 2433 +<8016> 7603 +<8017> 2435 +endcidchar + +100 begincidchar +<8018> 2432 +<8019> 2434 +<801b> 8194 +<801c> 2919 +<801d> 14226 +<801e> 8193 +<801f> 8192 +<8020> 18236 +<8021> 9497 +<8024> 10139 +<8025> 18237 +<8026> 4585 +<8028> 4910 +<8029> 11309 +<802a> 11308 +<802c> 11781 +<802e> 18238 +<802f> 14228 +<8030> 13044 +<8031> 18239 +<8033> 1024 +<8034> 6360 +<8035> 6695 +<8036> 2010 +<8037> 7115 +<8039> 7605 +<803d> 2436 +<803e> 7604 +<803f> 2437 +<8043> 8196 +<8046> 2921 +<8047> 8195 +<8048> 8197 +<804a> 2920 +<8051> 8825 +<8052> 3359 +<8054> 18240 +<8056> 3787 +<8058> 3788 +<805a> 4211 +<805b> 16357 +<805c> 10141 +<805d> 10140 +<805e> 4210 +<8061> 14233 +<8062> 16355 +<8063> 16348 +<8064> 10700 +<8066> 16347 +<8067> 10701 +<806c> 11310 +<806f> 5196 +<8070> 5195 +<8073> 5197 +<8075> 12177 +<8076> 5399 +<8077> 5398 +<8078> 12523 +<8079> 12826 +<807d> 5843 +<807e> 5842 +<807f> 1025 +<8080> 17662 +<8082> 7404 +<8084> 3790 +<8085> 3360 +<8086> 3789 +<8087> 4212 +<8089> 1026 +<808a> 6067 +<808f> 6696 +<8090> 6363 +<8092> 6364 +<8093> 1278 +<8095> 6361 +<8096> 1277 +<8098> 1280 +<8099> 6362 +<809a> 1282 +<809b> 1281 +<809c> 6365 +<809d> 1279 +<809f> 17782 +<80a1> 1648 +<80a2> 1646 +<80a3> 6698 +<80a5> 1645 +<80a7> 14240 +<80a9> 1650 +<80aa> 1652 +<80ab> 1649 +<80ad> 6701 +<80ae> 6697 +<80af> 1653 +<80b1> 1647 +<80b2> 1283 +<80b4> 1651 +<80b5> 6700 +<80b6> 16046 +<80b7> 18243 +endcidchar + +100 begincidchar +<80b8> 6699 +<80ba> 1644 +<80bc> 17778 +<80bd> 15995 +<80c2> 7121 +<80c5> 7123 +<80c6> 15220 +<80c7> 7117 +<80c8> 7120 +<80c9> 7129 +<80ca> 7127 +<80cc> 2016 +<80cd> 7133 +<80ce> 2019 +<80cf> 7130 +<80d0> 7122 +<80d1> 7119 +<80d4> 8829 +<80d5> 7128 +<80d6> 2011 +<80d7> 7131 +<80d8> 7116 +<80d9> 7125 +<80da> 2013 +<80db> 2018 +<80dc> 7126 +<80dd> 2022 +<80de> 2020 +<80e0> 7118 +<80e1> 2017 +<80e3> 7124 +<80e4> 2021 +<80e5> 2012 +<80e6> 7132 +<80e9> 18244 +<80ec> 17897 +<80ed> 2442 +<80ef> 2451 +<80f0> 2440 +<80f1> 2438 +<80f2> 7607 +<80f3> 2446 +<80f4> 2443 +<80f5> 7609 +<80f6> 17780 +<80f8> 2445 +<80f9> 7608 +<80fa> 7606 +<80fb> 7611 +<80fc> 2450 +<80fd> 2448 +<80fe> 8828 +<8100> 7612 +<8101> 7610 +<8102> 2439 +<8103> 16359 +<8105> 2441 +<8106> 2444 +<8107> 14242 +<8108> 2447 +<8109> 15221 +<810a> 2449 +<810c> 18246 +<810e> 18247 +<8112> 18248 +<8114> 18249 +<8115> 8207 +<8116> 2923 +<8117> 15981 +<8118> 8198 +<8119> 8200 +<811a> 14243 +<811b> 8201 +<811d> 8209 +<811e> 8205 +<811f> 8203 +<8121> 8206 +<8122> 8210 +<8123> 2924 +<8124> 2928 +<8125> 8199 +<8127> 8208 +<8129> 2926 +<812a> 14905 +<812b> 2925 +<812c> 8204 +<812d> 8202 +<812f> 2922 +<8130> 2927 +<8132> 15993 +<8134> 17900 +<8137> 15218 +<8139> 3366 +<813a> 8837 +<813d> 8835 +<813e> 3368 +<8142> 15222 +<8143> 8830 +<8144> 9511 +<8146> 3367 +endcidchar + +100 begincidchar +<8147> 8834 +<8148> 15990 +<814a> 8831 +<814b> 3363 +<814c> 3369 +<814d> 8836 +<814e> 3365 +<814f> 8833 +<8150> 4213 +<8151> 3364 +<8152> 8832 +<8153> 3370 +<8154> 3362 +<8155> 3361 +<8156> 18252 +<815b> 9503 +<815c> 9501 +<815e> 9507 +<8160> 9499 +<8161> 9512 +<8162> 9504 +<8164> 9498 +<8165> 3794 +<8166> 3800 +<8167> 9509 +<8169> 9502 +<816b> 3797 +<816c> 19053 +<816d> 17348 +<816e> 3795 +<816f> 9510 +<8170> 3792 +<8171> 3791 +<8172> 9505 +<8173> 3796 +<8174> 3371 +<8176> 9508 +<8177> 9500 +<8178> 3793 +<817c> 18256 +<817f> 4218 +<8180> 4214 +<8182> 4219 +<8183> 10144 +<8184> 17349 +<8186> 10143 +<8187> 10145 +<8188> 4216 +<8189> 10142 +<818a> 4217 +<818b> 10148 +<818c> 10147 +<818d> 10146 +<818f> 4215 +<8193> 17350 +<8195> 10705 +<8197> 10708 +<8198> 4591 +<8199> 10707 +<819a> 4590 +<819e> 10704 +<819f> 10703 +<81a0> 4589 +<81a2> 10706 +<81a3> 10702 +<81a5> 18259 +<81a6> 11312 +<81a7> 11322 +<81a8> 4913 +<81a9> 4912 +<81aa> 17252 +<81ab> 11316 +<81ac> 11318 +<81ae> 11313 +<81b0> 11317 +<81b1> 11311 +<81b2> 11320 +<81b3> 4911 +<81b4> 11319 +<81b5> 11315 +<81b6> 16050 +<81b7> 11321 +<81b9> 11314 +<81ba> 5200 +<81bb> 11782 +<81bc> 11788 +<81bd> 5204 +<81be> 5206 +<81bf> 5203 +<81c0> 5202 +<81c1> 18261 +<81c2> 5201 +<81c3> 5199 +<81c4> 11783 +<81c5> 11786 +<81c6> 5198 +<81c7> 11787 +<81c8> 16366 +<81c9> 5205 +<81ca> 11785 +endcidchar + +100 begincidchar +<81cc> 11784 +<81cd> 5400 +<81cf> 5401 +<81d0> 12180 +<81d5> 12525 +<81d7> 12524 +<81d8> 5555 +<81d9> 12828 +<81da> 5685 +<81db> 12827 +<81dd> 13045 +<81de> 13221 +<81df> 5844 +<81e2> 5894 +<81e3> 1029 +<81e4> 18262 +<81e5> 1654 +<81e6> 8838 +<81e7> 4220 +<81e8> 5207 +<81e9> 11789 +<81ea> 1030 +<81ec> 2453 +<81ed> 2452 +<81ee> 8839 +<81ef> 17105 +<81f2> 11323 +<81f3> 1031 +<81f4> 2023 +<81f6> 15713 +<81fa> 4221 +<81fb> 4914 +<81fc> 1032 +<81fe> 1655 +<81ff> 7134 +<8200> 2454 +<8201> 7613 +<8202> 2929 +<8204> 8843 +<8205> 3801 +<8207> 4222 +<8208> 4915 +<8209> 5208 +<820a> 5402 +<820b> 12526 +<820c> 1033 +<820d> 1656 +<8210> 2455 +<8211> 8211 +<8212> 3372 +<8214> 4223 +<8215> 10149 +<8216> 10709 +<8218> 14250 +<821a> 16353 +<821b> 1034 +<821c> 3373 +<821d> 9513 +<821e> 4224 +<821f> 1035 +<8220> 6702 +<8221> 7135 +<8222> 2024 +<8225> 7615 +<8226> 16909 +<8228> 2458 +<8229> 14256 +<822c> 2459 +<822d> 16080 +<822f> 7614 +<8232> 8216 +<8233> 8213 +<8234> 8215 +<8235> 2930 +<8236> 2932 +<8237> 2931 +<8238> 8212 +<8239> 2933 +<823a> 8214 +<823e> 17794 +<823f> 8846 +<8240> 9516 +<8242> 9517 +<8244> 9515 +<8245> 9518 +<8247> 3802 +<8249> 9514 +<824b> 4225 +<824e> 10714 +<824f> 10710 +<8250> 10713 +<8251> 10715 +<8252> 10712 +<8253> 10711 +<8254> 18263 +<825a> 11791 +<825b> 11790 +<825c> 11792 +<825e> 12182 +<825f> 12181 +endcidchar + +100 begincidchar +<8261> 12528 +<8262> 15226 +<8263> 12529 +<8264> 12527 +<8265> 15227 +<8266> 5686 +<826b> 13222 +<826c> 13357 +<826d> 13462 +<826e> 1036 +<826f> 1284 +<8271> 5209 +<8272> 1037 +<8274> 8217 +<8275> 8847 +<8276> 18265 +<8277> 5934 +<8278> 6163 +<8279> 18210 +<827a> 17763 +<827b> 14280 +<827c> 6164 +<827d> 6166 +<827e> 1038 +<827f> 6167 +<8280> 6165 +<8285> 6368 +<8287> 16690 +<828a> 6372 +<828b> 1286 +<828d> 1287 +<828e> 6369 +<828f> 6367 +<8290> 6366 +<8291> 6370 +<8292> 1285 +<8293> 6371 +<8294> 7136 +<8298> 6707 +<8299> 1659 +<829a> 6706 +<829b> 6708 +<829d> 1658 +<829e> 6713 +<829f> 1662 +<82a0> 6703 +<82a1> 6717 +<82a2> 6723 +<82a3> 1669 +<82a4> 6720 +<82a5> 1666 +<82a6> 15731 +<82a7> 6710 +<82a8> 6716 +<82a9> 6718 +<82aa> 14268 +<82ab> 6705 +<82ac> 1665 +<82ad> 1660 +<82ae> 6711 +<82af> 1667 +<82b0> 1670 +<82b1> 1664 +<82b3> 1657 +<82b4> 6715 +<82b5> 6709 +<82b6> 6722 +<82b7> 1672 +<82b8> 1668 +<82b9> 1663 +<82ba> 6714 +<82bb> 2460 +<82bc> 6712 +<82bd> 1661 +<82be> 1671 +<82bf> 18953 +<82c0> 6704 +<82c2> 6719 +<82c3> 6721 +<82c4> 17891 +<82ca> 18266 +<82cf> 17764 +<82d0> 14273 +<82d1> 2041 +<82d2> 2035 +<82d3> 2043 +<82d4> 2040 +<82d5> 7143 +<82d6> 7146 +<82d7> 2036 +<82d8> 18267 +<82d9> 7137 +<82db> 2029 +<82dc> 2039 +<82de> 2042 +<82df> 2044 +<82e0> 7158 +<82e1> 7149 +<82e2> 14281 +<82e3> 2028 +endcidchar + +100 begincidchar +<82e4> 7157 +<82e5> 2032 +<82e6> 2030 +<82e7> 2025 +<82e8> 7141 +<82ea> 7156 +<82eb> 7145 +<82ec> 7148 +<82ed> 7161 +<82ee> 16408 +<82ef> 2045 +<82f0> 7155 +<82f1> 2037 +<82f2> 7150 +<82f3> 7160 +<82f4> 7147 +<82f5> 7151 +<82f6> 7154 +<82f7> 15991 +<82f8> 18930 +<82f9> 7139 +<82fa> 7159 +<82fb> 7153 +<82fc> 16685 +<82fd> 15762 +<82fe> 7138 +<82ff> 17374 +<8300> 7142 +<8301> 2038 +<8302> 2033 +<8303> 2026 +<8304> 2031 +<8305> 2027 +<8306> 2046 +<8307> 7140 +<8308> 7632 +<8309> 2034 +<830b> 16054 +<830c> 7152 +<830d> 6781 +<8316> 7635 +<8317> 2474 +<8318> 14282 +<8319> 7619 +<831a> 14274 +<831b> 7630 +<831c> 7626 +<831d> 14289 +<831e> 7645 +<8320> 7637 +<8322> 7627 +<8324> 7636 +<8325> 7621 +<8326> 7625 +<8327> 7648 +<8328> 2477 +<8329> 7640 +<832a> 7631 +<832b> 2461 +<832c> 7646 +<832d> 7617 +<832f> 7639 +<8331> 2476 +<8332> 2471 +<8333> 7616 +<8334> 2469 +<8335> 2468 +<8336> 2473 +<8337> 7638 +<8338> 2465 +<8339> 2472 +<833a> 7144 +<833b> 8848 +<833c> 7633 +<833d> 15658 +<833f> 7623 +<8340> 2475 +<8341> 7624 +<8342> 7628 +<8343> 2478 +<8344> 7618 +<8345> 7642 +<8347> 7641 +<8348> 7649 +<8349> 2467 +<834a> 2464 +<834b> 7647 +<834c> 7643 +<834d> 7634 +<834e> 7629 +<834f> 2470 +<8350> 2466 +<8351> 7620 +<8352> 2462 +<8353> 7644 +<8354> 2463 +<8356> 7622 +<8357> 18269 +<8362> 14262 +<8363> 16875 +endcidchar + +100 begincidchar +<8366> 15902 +<836f> 17765 +<8373> 8223 +<8374> 8225 +<8375> 8230 +<8376> 8250 +<8377> 2947 +<8378> 2937 +<837a> 8222 +<837d> 8233 +<837e> 8240 +<837f> 8246 +<8381> 8227 +<8383> 8234 +<8385> 14291 +<8386> 2950 +<8387> 8248 +<8388> 8243 +<8389> 2945 +<838a> 2943 +<838b> 8239 +<838c> 8235 +<838d> 8221 +<838e> 2934 +<838f> 8226 +<8390> 8218 +<8391> 14316 +<8392> 2942 +<8393> 2944 +<8394> 8231 +<8395> 8228 +<8396> 2939 +<8397> 8244 +<8398> 2936 +<8399> 8229 +<839a> 8889 +<839b> 8237 +<839c> 14157 +<839d> 8236 +<839e> 2935 +<83a0> 2946 +<83a2> 2938 +<83a3> 8219 +<83a4> 8224 +<83a5> 8241 +<83a6> 8247 +<83a7> 2951 +<83a8> 8220 +<83a9> 8232 +<83aa> 8238 +<83ab> 2941 +<83ac> 14294 +<83ae> 8249 +<83af> 8242 +<83b0> 8245 +<83b9> 17063 +<83bd> 2940 +<83be> 16217 +<83bf> 8864 +<83c0> 8852 +<83c1> 3381 +<83c2> 8881 +<83c3> 8890 +<83c4> 8893 +<83c5> 3379 +<83c6> 8860 +<83c7> 8885 +<83c8> 8861 +<83c9> 8875 +<83ca> 3392 +<83cb> 8871 +<83cc> 3389 +<83cd> 16469 +<83ce> 8872 +<83cf> 8849 +<83d1> 8886 +<83d3> 14296 +<83d4> 3398 +<83d5> 8883 +<83d6> 8873 +<83d7> 8895 +<83d8> 8868 +<83d9> 9550 +<83db> 8898 +<83dc> 3396 +<83dd> 8866 +<83de> 8878 +<83df> 3399 +<83e0> 3378 +<83e1> 8870 +<83e2> 8896 +<83e3> 8863 +<83e4> 8856 +<83e5> 8867 +<83e7> 8855 +<83e8> 8853 +<83e9> 3374 +<83ea> 8887 +<83eb> 8862 +<83ec> 8891 +endcidchar + +100 begincidchar +<83ed> 15660 +<83ee> 8892 +<83ef> 3382 +<83f0> 3387 +<83f1> 3383 +<83f2> 3391 +<83f3> 8882 +<83f4> 3384 +<83f5> 8874 +<83f6> 8858 +<83f8> 3376 +<83f9> 8850 +<83fa> 8884 +<83fb> 8894 +<83fc> 8857 +<83fd> 3390 +<83fe> 8899 +<83ff> 8869 +<8401> 8865 +<8403> 3375 +<8404> 3395 +<8405> 18271 +<8406> 8880 +<8407> 3397 +<8409> 8876 +<840a> 3386 +<840b> 3380 +<840c> 3388 +<840d> 3377 +<840e> 3394 +<840f> 8877 +<8410> 8859 +<8411> 8879 +<8412> 8854 +<8413> 8888 +<8414> 15376 +<8416> 16439 +<8418> 15994 +<841b> 8897 +<841c> 16051 +<8420> 15445 +<8421> 14161 +<8423> 8851 +<8424> 18769 +<8426> 18136 +<8429> 9549 +<842b> 9571 +<842c> 3756 +<842d> 9554 +<842e> 16941 +<842f> 9552 +<8430> 9531 +<8431> 3806 +<8432> 9547 +<8433> 9567 +<8434> 9543 +<8435> 3814 +<8436> 9566 +<8437> 9541 +<8438> 3393 +<8439> 9557 +<843a> 9542 +<843b> 9564 +<843c> 3813 +<843d> 3805 +<843e> 15649 +<843f> 9520 +<8440> 9528 +<8442> 9553 +<8443> 9545 +<8444> 9570 +<8445> 9548 +<8446> 3819 +<8447> 9565 +<8448> 18200 +<8449> 3810 +<844a> 14308 +<844b> 9551 +<844c> 9559 +<844d> 9532 +<844e> 9558 +<8450> 9575 +<8451> 9527 +<8452> 9560 +<8453> 15229 +<8454> 9573 +<8455> 14731 +<8456> 9521 +<8457> 3385 +<8458> 14302 +<8459> 9535 +<845a> 9534 +<845b> 3812 +<845c> 16091 +<845d> 9538 +<845e> 9540 +<845f> 9555 +<8460> 9572 +<8461> 3815 +<8462> 17114 +endcidchar + +100 begincidchar +<8463> 3816 +<8464> 18273 +<8465> 9526 +<8466> 3808 +<8467> 9530 +<8468> 9568 +<8469> 3817 +<846b> 3809 +<846c> 3811 +<846d> 3818 +<846e> 9574 +<846f> 9561 +<8470> 9556 +<8471> 14304 +<8472> 15507 +<8473> 9537 +<8474> 9536 +<8475> 3807 +<8476> 9522 +<8477> 3804 +<8478> 9546 +<8479> 9523 +<847a> 9544 +<847d> 9533 +<847e> 9569 +<847f> 14670 +<8480> 18121 +<8482> 3803 +<8484> 19103 +<8486> 9529 +<8488> 18274 +<848d> 9525 +<848e> 9563 +<848f> 9524 +<8490> 4238 +<8491> 10189 +<8492> 14166 +<8493> 14318 +<8494> 10172 +<8495> 15214 +<8496> 18118 +<8497> 10150 +<8498> 10180 +<8499> 4230 +<849a> 10165 +<849b> 10175 +<849c> 4233 +<849d> 10168 +<849e> 4231 +<849f> 10153 +<84a0> 10183 +<84a1> 10152 +<84a2> 10171 +<84a3> 15262 +<84a4> 10151 +<84a7> 10169 +<84a8> 10178 +<84a9> 10176 +<84aa> 10164 +<84ab> 10159 +<84ac> 10157 +<84ad> 15756 +<84ae> 10158 +<84af> 10177 +<84b0> 10188 +<84b1> 10166 +<84b2> 4232 +<84b4> 10161 +<84b6> 10181 +<84b8> 4235 +<84b9> 10160 +<84ba> 10154 +<84bb> 10170 +<84bc> 4239 +<84bd> 15436 +<84be> 18276 +<84bf> 4227 +<84c0> 4236 +<84c1> 10162 +<84c2> 10156 +<84c4> 4229 +<84c5> 9562 +<84c6> 4228 +<84c7> 10173 +<84c9> 4226 +<84ca> 4241 +<84cb> 4234 +<84cc> 10174 +<84cd> 10163 +<84ce> 10155 +<84cf> 10182 +<84d0> 10167 +<84d1> 4240 +<84d2> 10186 +<84d3> 4237 +<84d4> 10185 +<84d6> 10179 +<84d7> 10184 +<84da> 16373 +<84db> 10187 +endcidchar + +100 begincidchar +<84de> 14314 +<84e1> 18277 +<84e2> 14261 +<84e4> 14319 +<84e5> 15312 +<84e9> 10743 +<84ea> 10742 +<84eb> 10738 +<84ec> 4603 +<84ee> 4595 +<84ef> 10758 +<84f0> 10757 +<84f1> 9519 +<84f2> 10735 +<84f3> 10739 +<84f4> 10733 +<84f6> 10752 +<84f7> 10737 +<84f8> 18278 +<84f9> 10759 +<84fa> 10730 +<84fb> 10728 +<84fc> 10740 +<84fd> 10750 +<84fe> 10745 +<84ff> 4605 +<8500> 10719 +<8502> 10749 +<8503> 14728 +<8504> 19147 +<8505> 16619 +<8506> 4606 +<8507> 9539 +<8508> 10731 +<8509> 10722 +<850a> 10725 +<850b> 10763 +<850c> 10732 +<850d> 10723 +<850e> 10721 +<850f> 10718 +<8510> 18279 +<8511> 4599 +<8512> 10741 +<8513> 4598 +<8514> 4602 +<8515> 10736 +<8516> 10744 +<8517> 4592 +<8518> 10760 +<8519> 10764 +<851a> 4594 +<851c> 10727 +<851d> 10747 +<851e> 10751 +<851f> 10724 +<8520> 10761 +<8521> 4601 +<8523> 4600 +<8524> 10716 +<8525> 4604 +<8526> 10754 +<8527> 10726 +<8528> 10746 +<8529> 10720 +<852a> 10734 +<852b> 10729 +<852e> 10748 +<852f> 10765 +<8530> 10762 +<8531> 10753 +<8533> 16936 +<8534> 14324 +<8538> 18280 +<853b> 10717 +<853d> 4593 +<853e> 11343 +<8540> 11334 +<8541> 11337 +<8542> 16482 +<8543> 4923 +<8544> 11339 +<8545> 11328 +<8546> 11335 +<8547> 11341 +<8548> 4920 +<8549> 4924 +<854a> 4918 +<854b> 14272 +<854c> 16399 +<854d> 11330 +<854e> 11346 +<8551> 11340 +<8552> 18281 +<8553> 11331 +<8554> 11355 +<8555> 11349 +<8556> 11327 +<8557> 11811 +<8558> 11333 +endcidchar + +100 begincidchar +<8559> 4919 +<855a> 14299 +<855b> 11344 +<855d> 11354 +<855e> 4927 +<855f> 18938 +<8560> 11351 +<8561> 11332 +<8562> 11338 +<8563> 11342 +<8564> 11336 +<8565> 11356 +<8566> 11353 +<8567> 11350 +<856a> 4926 +<856b> 11329 +<856c> 11357 +<856d> 4925 +<856e> 11347 +<8571> 11345 +<8573> 14328 +<8575> 11348 +<8576> 11824 +<8577> 11805 +<8578> 11810 +<8579> 11823 +<857a> 11809 +<857b> 11801 +<857c> 11806 +<857e> 5212 +<8580> 11794 +<8581> 11818 +<8582> 11820 +<8583> 11793 +<8584> 5211 +<8585> 11822 +<8586> 11814 +<8587> 5218 +<8588> 11821 +<8589> 11807 +<858a> 5220 +<858b> 11799 +<858c> 11352 +<858d> 11815 +<858e> 11812 +<858f> 11795 +<8590> 11826 +<8591> 5214 +<8593> 19018 +<8594> 5215 +<8595> 11797 +<8596> 11813 +<8597> 18931 +<8598> 11825 +<8599> 11816 +<859a> 11803 +<859b> 5217 +<859c> 5213 +<859d> 11817 +<859e> 11804 +<859f> 11827 +<85a0> 11798 +<85a1> 11808 +<85a2> 11819 +<85a3> 11800 +<85a4> 11802 +<85a6> 5221 +<85a7> 11796 +<85a8> 5219 +<85a9> 5404 +<85aa> 5210 +<85af> 5216 +<85b0> 5408 +<85b1> 12198 +<85b3> 12188 +<85b4> 12183 +<85b5> 12189 +<85b6> 12199 +<85b7> 12203 +<85b8> 12202 +<85b9> 5410 +<85ba> 5409 +<85bd> 12190 +<85be> 12204 +<85bf> 12193 +<85c0> 12185 +<85c1> 14334 +<85c2> 12187 +<85c3> 12186 +<85c4> 12192 +<85c5> 12197 +<85c6> 12184 +<85c7> 12191 +<85c8> 12196 +<85c9> 5407 +<85cb> 12194 +<85cd> 5405 +<85ce> 12195 +<85cf> 5403 +<85d0> 5406 +endcidchar + +100 begincidchar +<85d1> 12545 +<85d2> 12200 +<85d5> 5559 +<85d6> 18951 +<85d7> 12537 +<85d8> 12541 +<85d9> 12533 +<85da> 12536 +<85dc> 12544 +<85dd> 5557 +<85de> 12549 +<85df> 12542 +<85e0> 18285 +<85e1> 12534 +<85e2> 12550 +<85e3> 12543 +<85e6> 12547 +<85e8> 12535 +<85e9> 5556 +<85ea> 5558 +<85eb> 12530 +<85ec> 12538 +<85ed> 12532 +<85ee> 15446 +<85ef> 12548 +<85f0> 12546 +<85f1> 12531 +<85f2> 12539 +<85f6> 12837 +<85f7> 5562 +<85f8> 12540 +<85f9> 5688 +<85fa> 5690 +<85fb> 5687 +<85fc> 15440 +<85fd> 12842 +<85fe> 12834 +<85ff> 12832 +<8600> 12836 +<8601> 12833 +<8602> 14336 +<8604> 12838 +<8605> 12840 +<8606> 5691 +<8607> 5693 +<8609> 12839 +<860a> 5694 +<860b> 5692 +<860c> 12841 +<860d> 16484 +<860f> 18882 +<8610> 15231 +<8611> 5689 +<8613> 19107 +<8614> 18110 +<8616> 14331 +<8617> 5765 +<8618> 13046 +<8619> 13052 +<861a> 5767 +<861b> 12835 +<861c> 13051 +<861e> 13058 +<861f> 13049 +<8620> 13056 +<8621> 13055 +<8622> 12831 +<8623> 13050 +<8624> 12201 +<8625> 13059 +<8626> 13048 +<8627> 13053 +<8628> 14341 +<8629> 13057 +<862a> 13047 +<862c> 13226 +<862d> 5766 +<862e> 13054 +<862f> 16286 +<8631> 13362 +<8632> 13227 +<8633> 13225 +<8636> 13228 +<8638> 5895 +<8639> 13360 +<863a> 13358 +<863b> 13363 +<863c> 13361 +<863e> 13364 +<863f> 5896 +<8640> 13359 +<8642> 14529 +<8643> 13463 +<8645> 15206 +<864b> 13630 +<864c> 13622 +<864d> 6168 +<864e> 1673 +<8650> 2047 +<8652> 7651 +endcidchar + +100 begincidchar +<8653> 7650 +<8654> 2479 +<8655> 2952 +<8656> 8252 +<8659> 8251 +<865b> 3400 +<865c> 3821 +<865e> 3820 +<865f> 3822 +<8661> 10190 +<8662> 10766 +<8663> 11358 +<8664> 11360 +<8665> 11359 +<8667> 5222 +<8668> 11828 +<8669> 12205 +<866a> 13598 +<866b> 1039 +<866c> 14355 +<866f> 6725 +<8670> 6724 +<8671> 1674 +<8672> 18287 +<8673> 7165 +<8674> 7163 +<8677> 7162 +<8679> 2048 +<867a> 2050 +<867b> 2049 +<867c> 7164 +<867e> 14346 +<8685> 7663 +<8686> 7660 +<8687> 7658 +<868a> 2480 +<868b> 7661 +<868c> 2485 +<868d> 7655 +<868e> 7670 +<8690> 7672 +<8691> 7656 +<8692> 18288 +<8693> 2482 +<8694> 7673 +<8695> 7668 +<8696> 7654 +<8697> 7659 +<8698> 7669 +<8699> 7665 +<869a> 7662 +<869c> 2487 +<869d> 7671 +<869e> 7657 +<86a0> 15240 +<86a1> 7666 +<86a2> 7652 +<86a3> 2486 +<86a4> 2483 +<86a5> 7664 +<86a7> 7667 +<86a8> 7653 +<86a9> 2484 +<86aa> 2481 +<86ad> 16134 +<86af> 2962 +<86b0> 8259 +<86b1> 2961 +<86b2> 17376 +<86b3> 8262 +<86b4> 8265 +<86b5> 2958 +<86b6> 2956 +<86b7> 8254 +<86b8> 8263 +<86b9> 8261 +<86ba> 8258 +<86bf> 8253 +<86c0> 2955 +<86c1> 8256 +<86c2> 8255 +<86c3> 8268 +<86c4> 2957 +<86c5> 8257 +<86c6> 2959 +<86c7> 2954 +<86c8> 8260 +<86c9> 2963 +<86cb> 2960 +<86cc> 8264 +<86d0> 3407 +<86d1> 8914 +<86d3> 8903 +<86d4> 3404 +<86d6> 9581 +<86d7> 8912 +<86d8> 8900 +<86d9> 3402 +<86da> 8905 +<86db> 3405 +endcidchar + +100 begincidchar +<86dc> 8909 +<86dd> 8907 +<86de> 3408 +<86df> 3401 +<86e2> 8901 +<86e3> 8904 +<86e4> 3406 +<86e6> 8902 +<86e8> 8913 +<86e9> 8911 +<86ea> 8906 +<86eb> 8908 +<86ec> 8910 +<86ed> 3403 +<86ef> 18289 +<86f5> 9582 +<86f6> 9588 +<86f7> 9578 +<86f8> 9584 +<86f9> 3823 +<86fa> 9580 +<86fb> 3829 +<86fe> 3828 +<8700> 3827 +<8701> 9587 +<8704> 9577 +<8705> 9590 +<8706> 3832 +<8707> 3826 +<8708> 3825 +<8709> 9586 +<870a> 3833 +<870b> 9576 +<870c> 9579 +<870d> 9589 +<870e> 9585 +<8711> 10222 +<8712> 10211 +<8713> 3824 +<8718> 4248 +<8719> 10199 +<871a> 10220 +<871b> 10200 +<871c> 4243 +<871e> 10197 +<8720> 10206 +<8721> 10198 +<8722> 4245 +<8723> 10192 +<8724> 10219 +<8725> 4246 +<8728> 10193 +<8729> 4251 +<872a> 10208 +<872c> 10202 +<872d> 10209 +<872e> 10196 +<8730> 10221 +<8731> 10213 +<8732> 10207 +<8733> 10191 +<8734> 4247 +<8735> 10214 +<8737> 4250 +<8738> 10218 +<873a> 10212 +<873b> 4244 +<873c> 10210 +<873e> 10204 +<873f> 4242 +<8740> 10195 +<8741> 10203 +<8742> 10215 +<8743> 10201 +<8746> 10205 +<874c> 4616 +<874d> 9583 +<874e> 10784 +<874f> 10793 +<8750> 10783 +<8751> 10779 +<8752> 10776 +<8753> 4617 +<8754> 10774 +<8755> 4249 +<8756> 10767 +<8757> 4615 +<8758> 10773 +<8759> 4614 +<875a> 10778 +<875b> 10775 +<875c> 10791 +<875d> 10786 +<875e> 10780 +<875f> 10785 +<8760> 4610 +<8761> 10777 +<8762> 10796 +<8765> 10792 +<8766> 4611 +endcidchar + +100 begincidchar +<8767> 10797 +<8768> 4613 +<8769> 10798 +<876a> 10782 +<876b> 10194 +<876c> 10788 +<876d> 10781 +<876e> 10790 +<876f> 10787 +<8770> 15980 +<8771> 18087 +<8773> 10772 +<8774> 4608 +<8775> 10795 +<8776> 4609 +<8777> 10770 +<8778> 4612 +<8779> 11371 +<877a> 10789 +<877b> 10794 +<877d> 16453 +<8781> 11368 +<8782> 4607 +<8783> 4928 +<8784> 11378 +<8785> 11374 +<8786> 18662 +<8787> 11372 +<8788> 11367 +<8789> 11382 +<878b> 17378 +<878c> 16367 +<878d> 4932 +<878f> 11363 +<8792> 11366 +<8793> 11365 +<8794> 11379 +<8796> 11369 +<8797> 11364 +<8798> 11370 +<879a> 11381 +<879b> 11362 +<879c> 11380 +<879d> 11377 +<879e> 4930 +<879f> 4929 +<87a2> 4931 +<87a3> 11373 +<87a4> 11361 +<87a5> 15752 +<87a9> 16364 +<87aa> 11830 +<87ab> 5228 +<87ac> 11834 +<87ad> 11831 +<87ae> 11838 +<87af> 11844 +<87b0> 11833 +<87b1> 14351 +<87b2> 11853 +<87b3> 5225 +<87b4> 11847 +<87b5> 11836 +<87b6> 11848 +<87b7> 11843 +<87b8> 11850 +<87b9> 11835 +<87ba> 5230 +<87bb> 5229 +<87bc> 11837 +<87bd> 11851 +<87be> 11829 +<87bf> 11849 +<87c0> 5223 +<87c1> 16380 +<87c2> 11841 +<87c3> 11840 +<87c4> 11845 +<87c5> 11832 +<87c6> 5227 +<87c8> 5231 +<87c9> 11839 +<87ca> 11846 +<87cb> 5232 +<87cc> 11842 +<87ce> 16365 +<87d1> 5224 +<87d2> 5226 +<87d3> 12218 +<87d4> 12216 +<87d6> 16274 +<87d7> 12222 +<87d8> 12220 +<87d9> 12223 +<87da> 14352 +<87db> 12209 +<87dc> 12217 +<87dd> 12227 +<87de> 11852 +<87df> 12213 +endcidchar + +100 begincidchar +<87e0> 5414 +<87e1> 10771 +<87e2> 12208 +<87e3> 12221 +<87e4> 12215 +<87e5> 12212 +<87e6> 12207 +<87e7> 12206 +<87e8> 12226 +<87ea> 12211 +<87eb> 12210 +<87ec> 5412 +<87ed> 12219 +<87ee> 14349 +<87ef> 5411 +<87f2> 5413 +<87f3> 12214 +<87f4> 12225 +<87f5> 16302 +<87f9> 5566 +<87fa> 12552 +<87fb> 5563 +<87fc> 12560 +<87fe> 5567 +<87ff> 12562 +<8800> 12551 +<8801> 12224 +<8802> 12564 +<8803> 12553 +<8804> 16047 +<8805> 5564 +<8806> 12559 +<8808> 12561 +<8809> 12556 +<880a> 12563 +<880b> 12558 +<880c> 12557 +<880d> 5565 +<880f> 14353 +<8813> 12847 +<8816> 12848 +<8817> 12846 +<8818> 16250 +<8819> 12843 +<881b> 13062 +<881c> 13065 +<881d> 13061 +<881f> 5771 +<8820> 13063 +<8821> 5770 +<8822> 5769 +<8823> 5768 +<8824> 13064 +<8825> 13233 +<8826> 13231 +<8827> 15879 +<8828> 13230 +<8829> 13060 +<882a> 13232 +<882b> 13066 +<882c> 13229 +<882d> 15243 +<882e> 13367 +<882f> 13333 +<8830> 13365 +<8831> 5897 +<8832> 13366 +<8833> 13368 +<8835> 13466 +<8836> 5928 +<8837> 13465 +<8838> 13464 +<8839> 5929 +<883b> 5959 +<883c> 13576 +<883d> 13600 +<883e> 13599 +<883f> 13601 +<8840> 1040 +<8841> 7166 +<8842> 16218 +<8848> 8915 +<884a> 13067 +<884b> 13467 +<884c> 1041 +<884d> 2051 +<884e> 7167 +<884f> 14404 +<8852> 8271 +<8853> 2964 +<8855> 8917 +<8856> 8916 +<8857> 3409 +<8859> 3834 +<885a> 10799 +<885b> 4618 +<885d> 4619 +<885e> 14363 +<8860> 14918 +<8861> 4933 +endcidchar + +100 begincidchar +<8862> 5930 +<8863> 1042 +<8864> 17666 +<8865> 15868 +<8867> 7168 +<8868> 1676 +<8869> 7170 +<886a> 7169 +<886b> 2052 +<886d> 7676 +<886e> 15246 +<886f> 7683 +<8870> 2488 +<8871> 7681 +<8872> 7679 +<8874> 7686 +<8877> 2489 +<8879> 2493 +<887c> 7687 +<887d> 2492 +<887e> 7685 +<887f> 7682 +<8880> 7680 +<8883> 7684 +<8884> 17143 +<8887> 15248 +<8888> 2966 +<8889> 8272 +<888b> 2971 +<888c> 8288 +<888d> 2970 +<888e> 8290 +<888f> 18854 +<8890> 18933 +<8891> 8278 +<8892> 2968 +<8893> 8289 +<8895> 8273 +<8896> 2969 +<8897> 8285 +<8898> 8281 +<8899> 8283 +<889a> 8277 +<889b> 8284 +<889c> 14364 +<889d> 19115 +<889e> 2965 +<889f> 8280 +<88a0> 16288 +<88a1> 8279 +<88a2> 8275 +<88a4> 8286 +<88a7> 8282 +<88a8> 8274 +<88aa> 8276 +<88ab> 2967 +<88ac> 8287 +<88ae> 18293 +<88b1> 3412 +<88b2> 8928 +<88b6> 8924 +<88b7> 8926 +<88b8> 8921 +<88b9> 8920 +<88ba> 8918 +<88bc> 8925 +<88bd> 8927 +<88be> 8923 +<88bf> 15249 +<88c0> 8922 +<88c5> 14368 +<88c7> 16049 +<88c9> 8930 +<88ca> 3842 +<88cb> 9592 +<88cc> 9598 +<88cf> 14058 +<88d0> 9599 +<88d2> 3844 +<88d4> 3836 +<88d5> 3843 +<88d6> 9591 +<88d7> 8919 +<88d8> 3839 +<88d9> 3837 +<88da> 9597 +<88db> 9596 +<88dc> 3838 +<88dd> 3840 +<88de> 9595 +<88df> 3835 +<88e1> 3841 +<88e6> 15250 +<88e7> 10224 +<88e8> 4258 +<88eb> 10235 +<88ec> 10234 +<88ee> 10229 +<88ef> 4260 +<88f0> 10233 +endcidchar + +100 begincidchar +<88f3> 4252 +<88f4> 4254 +<88f5> 15880 +<88f6> 10231 +<88f7> 10223 +<88f8> 4256 +<88f9> 4255 +<88fa> 10227 +<88fb> 10232 +<88fc> 10230 +<88fd> 4257 +<88fe> 10228 +<88ff> 18294 +<8900> 17146 +<8901> 8929 +<8902> 4253 +<8905> 10800 +<8906> 10807 +<8907> 4621 +<8909> 10811 +<890a> 4625 +<890b> 10803 +<890c> 10801 +<890e> 10810 +<8910> 4620 +<8911> 10809 +<8914> 10802 +<8915> 4624 +<8916> 10808 +<891a> 4259 +<891e> 11383 +<891f> 11395 +<8921> 4938 +<8922> 11390 +<8923> 11392 +<8924> 18295 +<8925> 4936 +<8926> 11384 +<8927> 11388 +<8929> 11391 +<892a> 4934 +<892b> 4937 +<892c> 11394 +<892f> 11393 +<8930> 11385 +<8931> 11389 +<8932> 4935 +<8933> 11855 +<8935> 11854 +<8936> 5234 +<8937> 11860 +<8938> 5236 +<893b> 5233 +<893c> 11856 +<893d> 5237 +<893e> 11857 +<8941> 11858 +<8942> 11861 +<8943> 15894 +<8944> 5235 +<8946> 12232 +<8947> 17379 +<8949> 12235 +<894b> 12229 +<894c> 12231 +<894d> 15252 +<894f> 12230 +<8952> 11859 +<8953> 12228 +<8954> 15254 +<8956> 5570 +<8957> 12568 +<8958> 12571 +<8959> 12573 +<895c> 12570 +<895d> 12572 +<895e> 5571 +<895f> 5569 +<8960> 5568 +<8961> 12569 +<8962> 12565 +<8963> 12849 +<8964> 5697 +<8965> 15251 +<8966> 12850 +<8969> 13069 +<896a> 5772 +<896b> 13071 +<896c> 5773 +<896d> 13068 +<896e> 13070 +<896f> 5846 +<8971> 13234 +<8972> 5845 +<8973> 13371 +<8974> 13370 +<8976> 13369 +<8977> 15850 +<897b> 13541 +<897c> 13540 +endcidchar + +100 begincidchar +<897e> 6169 +<897f> 1043 +<8980> 18184 +<8981> 2053 +<8982> 8291 +<8983> 3413 +<8985> 9600 +<8986> 5415 +<8987> 14370 +<8988> 12574 +<8989> 16361 +<898a> 18090 +<898b> 1288 +<898f> 2973 +<8991> 18296 +<8993> 2972 +<8994> 16352 +<8995> 8931 +<8996> 3414 +<8997> 8933 +<8998> 8932 +<899b> 9601 +<899c> 3845 +<899d> 10236 +<899e> 10239 +<899f> 10238 +<89a1> 10237 +<89a2> 10812 +<89a3> 10814 +<89a4> 10813 +<89a5> 15763 +<89a6> 4940 +<89a7> 14374 +<89a9> 16377 +<89aa> 4939 +<89ac> 5238 +<89ad> 11862 +<89ae> 11864 +<89af> 11863 +<89b2> 5416 +<89b6> 12576 +<89b7> 12575 +<89b9> 12851 +<89ba> 5698 +<89bc> 14375 +<89bd> 5774 +<89be> 13236 +<89bf> 13235 +<89c0> 5960 +<89c1> 17667 +<89c6> 17766 +<89d2> 1289 +<89d3> 7171 +<89d4> 2054 +<89d5> 8294 +<89d6> 8292 +<89d9> 8293 +<89dc> 9608 +<89dd> 8934 +<89df> 9602 +<89e0> 9606 +<89e1> 9605 +<89e2> 9607 +<89e3> 3846 +<89e4> 9604 +<89e5> 9603 +<89e6> 9609 +<89e7> 14377 +<89e8> 10242 +<89e9> 10240 +<89eb> 10241 +<89ec> 10817 +<89ed> 10815 +<89f0> 10816 +<89f1> 11396 +<89f4> 5417 +<89f6> 12577 +<89f7> 12852 +<89f8> 5699 +<89fa> 13072 +<89fb> 13237 +<89fc> 5847 +<89fe> 13372 +<89ff> 13542 +<8a00> 1290 +<8a04> 7172 +<8a07> 7173 +<8a08> 2055 +<8a0a> 2499 +<8a0c> 2497 +<8a0e> 2496 +<8a0f> 2503 +<8a10> 2495 +<8a11> 2504 +<8a12> 7688 +<8a13> 2501 +<8a15> 2498 +<8a16> 2502 +<8a17> 2500 +<8a18> 2494 +endcidchar + +100 begincidchar +<8a1b> 2981 +<8a1c> 15267 +<8a1d> 2975 +<8a1e> 8298 +<8a1f> 2980 +<8a22> 2982 +<8a23> 2976 +<8a25> 2977 +<8a27> 8296 +<8a29> 17381 +<8a2a> 2974 +<8a2b> 15313 +<8a2c> 8297 +<8a2d> 2979 +<8a30> 8295 +<8a31> 2978 +<8a34> 3425 +<8a36> 3427 +<8a38> 18298 +<8a39> 8939 +<8a3a> 3426 +<8a3b> 3415 +<8a3c> 3419 +<8a3d> 15266 +<8a3e> 3865 +<8a3f> 9614 +<8a40> 8941 +<8a41> 3420 +<8a46> 3424 +<8a48> 8947 +<8a49> 16368 +<8a4a> 8949 +<8a4c> 8950 +<8a4d> 8938 +<8a4e> 8937 +<8a4f> 8951 +<8a50> 3423 +<8a51> 8948 +<8a52> 8946 +<8a54> 3421 +<8a55> 3417 +<8a56> 3428 +<8a59> 8940 +<8a5b> 3422 +<8a5e> 3418 +<8a60> 3416 +<8a61> 9613 +<8a62> 3860 +<8a63> 3855 +<8a66> 3850 +<8a67> 16270 +<8a68> 3866 +<8a69> 3851 +<8a6b> 3847 +<8a6c> 3862 +<8a6d> 3859 +<8a6e> 3861 +<8a70> 3852 +<8a71> 3857 +<8a74> 9621 +<8a75> 9618 +<8a76> 9610 +<8a77> 9615 +<8a79> 3863 +<8a7a> 9622 +<8a7b> 3864 +<8a7c> 3854 +<8a7e> 16293 +<8a7f> 9612 +<8a81> 9620 +<8a82> 9616 +<8a83> 9619 +<8a84> 9617 +<8a85> 3858 +<8a86> 9611 +<8a87> 3853 +<8a8b> 10245 +<8a8c> 4262 +<8a8d> 4265 +<8a8f> 10247 +<8a90> 14383 +<8a91> 4273 +<8a92> 10246 +<8a93> 4267 +<8a94> 18299 +<8a95> 4630 +<8a96> 10248 +<8a98> 4272 +<8a99> 10244 +<8a9a> 4274 +<8a9c> 14380 +<8a9e> 4263 +<8aa0> 3856 +<8aa1> 4266 +<8aa3> 4264 +<8aa4> 4268 +<8aa5> 4270 +<8aa6> 4261 +<8aa7> 4275 +<8aa8> 4271 +endcidchar + +100 begincidchar +<8aa9> 14397 +<8aaa> 4269 +<8aab> 10243 +<8aaf> 14401 +<8ab0> 4637 +<8ab2> 4633 +<8ab4> 18300 +<8ab6> 4640 +<8ab8> 10820 +<8ab9> 4641 +<8aba> 10832 +<8abb> 10825 +<8abc> 4626 +<8abd> 10833 +<8abe> 10827 +<8abf> 4636 +<8ac0> 10828 +<8ac2> 4635 +<8ac3> 10831 +<8ac4> 4629 +<8ac5> 10829 +<8ac6> 10819 +<8ac7> 4628 +<8ac8> 11407 +<8ac9> 4634 +<8acb> 4631 +<8acc> 19049 +<8acd> 4639 +<8acf> 10818 +<8ad1> 10822 +<8ad2> 4627 +<8ad3> 10821 +<8ad6> 4638 +<8ad7> 10826 +<8ad8> 10830 +<8ad9> 10834 +<8ada> 14786 +<8adb> 4642 +<8adc> 4946 +<8add> 11402 +<8ade> 11408 +<8adf> 11405 +<8ae0> 11397 +<8ae1> 11409 +<8ae2> 11398 +<8ae4> 11404 +<8ae6> 4941 +<8ae7> 4947 +<8ae8> 11410 +<8aea> 15833 +<8aeb> 4943 +<8aed> 4953 +<8aee> 4948 +<8aef> 11412 +<8af0> 11406 +<8af1> 4944 +<8af2> 11399 +<8af3> 4954 +<8af6> 4955 +<8af7> 4952 +<8af8> 4632 +<8af9> 19034 +<8afa> 4942 +<8afb> 11413 +<8afc> 4956 +<8afe> 4949 +<8aff> 11411 +<8b00> 4945 +<8b04> 5246 +<8b05> 11871 +<8b06> 11880 +<8b07> 11877 +<8b08> 11879 +<8b0a> 5243 +<8b0b> 11872 +<8b0c> 14390 +<8b0d> 11878 +<8b0e> 5239 +<8b0f> 11874 +<8b10> 5247 +<8b11> 11870 +<8b12> 11875 +<8b13> 11882 +<8b14> 11403 +<8b15> 11876 +<8b16> 11869 +<8b17> 5240 +<8b18> 11868 +<8b19> 5241 +<8b1a> 11883 +<8b1b> 5242 +<8b1c> 11881 +<8b1d> 5245 +<8b1e> 11867 +<8b1f> 14391 +<8b20> 5244 +<8b22> 11873 +<8b23> 12238 +<8b24> 12252 +<8b25> 12247 +endcidchar + +100 begincidchar +<8b26> 12249 +<8b27> 12237 +<8b28> 5418 +<8b2a> 12236 +<8b2b> 5421 +<8b2c> 5420 +<8b2d> 16281 +<8b2e> 12251 +<8b2f> 12243 +<8b30> 12240 +<8b31> 12246 +<8b33> 12239 +<8b35> 12241 +<8b36> 12250 +<8b37> 12248 +<8b39> 5419 +<8b3a> 12255 +<8b3b> 12253 +<8b3c> 12244 +<8b3d> 12254 +<8b3e> 12245 +<8b3f> 14394 +<8b40> 12581 +<8b41> 5572 +<8b42> 12588 +<8b43> 16370 +<8b45> 13075 +<8b46> 5579 +<8b47> 12242 +<8b48> 12579 +<8b49> 5575 +<8b4a> 12580 +<8b4b> 12585 +<8b4c> 18092 +<8b4d> 14396 +<8b50> 12578 +<8b51> 12587 +<8b52> 12589 +<8b53> 12582 +<8b54> 12584 +<8b55> 12586 +<8b56> 12583 +<8b57> 12590 +<8b58> 5574 +<8b59> 5580 +<8b5a> 5576 +<8b5c> 5573 +<8b5d> 12855 +<8b5e> 15800 +<8b5f> 5704 +<8b60> 12853 +<8b62> 15828 +<8b63> 12857 +<8b65> 12858 +<8b66> 5702 +<8b67> 12859 +<8b68> 12856 +<8b69> 15351 +<8b6a> 12854 +<8b6b> 5705 +<8b6c> 5701 +<8b6d> 12860 +<8b6f> 5703 +<8b70> 5700 +<8b74> 5775 +<8b77> 5776 +<8b78> 13074 +<8b79> 13073 +<8b7d> 5777 +<8b7e> 13238 +<8b7f> 13243 +<8b80> 5848 +<8b81> 15757 +<8b82> 13240 +<8b83> 18923 +<8b84> 13239 +<8b85> 13242 +<8b86> 13241 +<8b88> 13376 +<8b8a> 5898 +<8b8b> 13375 +<8b8c> 13373 +<8b8e> 13374 +<8b8f> 19135 +<8b90> 14399 +<8b92> 5932 +<8b93> 5931 +<8b96> 5933 +<8b9a> 5972 +<8b9b> 14400 +<8b9c> 5978 +<8b9e> 13602 +<8b9f> 13631 +<8ba0> 17669 +<8bbe> 17767 +<8be2> 17768 +<8c37> 1291 +<8c39> 8299 +<8c3b> 8300 +<8c3c> 9623 +endcidchar + +100 begincidchar +<8c3d> 10249 +<8c3e> 10835 +<8c3f> 5249 +<8c41> 5248 +<8c42> 12256 +<8c43> 12591 +<8c45> 13377 +<8c46> 1292 +<8c47> 7689 +<8c48> 2505 +<8c49> 2983 +<8c4a> 9625 +<8c4b> 9624 +<8c4c> 4643 +<8c4d> 10836 +<8c4e> 4644 +<8c4f> 11884 +<8c50> 5422 +<8c51> 18301 +<8c54> 5987 +<8c55> 1293 +<8c56> 6728 +<8c57> 7690 +<8c5a> 2984 +<8c5f> 8952 +<8c61> 3429 +<8c62> 3867 +<8c64> 9627 +<8c65> 9626 +<8c66> 9628 +<8c6a> 4276 +<8c6b> 4957 +<8c6c> 4645 +<8c6d> 4958 +<8c6f> 11888 +<8c70> 11885 +<8c71> 11887 +<8c72> 11886 +<8c73> 5250 +<8c75> 12257 +<8c76> 12593 +<8c77> 12592 +<8c78> 6375 +<8c79> 2507 +<8c7a> 2506 +<8c7b> 7691 +<8c7d> 8303 +<8c80> 8954 +<8c81> 8953 +<8c82> 3430 +<8c86> 9629 +<8c89> 3869 +<8c8a> 3868 +<8c8c> 4278 +<8c8d> 4277 +<8c8f> 10837 +<8c90> 11416 +<8c93> 4959 +<8c94> 11890 +<8c95> 11889 +<8c97> 12260 +<8c98> 12259 +<8c99> 12258 +<8c9a> 12594 +<8c9b> 14405 +<8c9c> 13603 +<8c9d> 1294 +<8c9e> 2058 +<8c9f> 15277 +<8ca0> 2059 +<8ca3> 7693 +<8ca4> 7692 +<8ca5> 8304 +<8ca7> 2990 +<8ca8> 2988 +<8ca9> 2985 +<8caa> 2989 +<8cab> 2987 +<8cac> 2986 +<8cad> 16369 +<8caf> 3431 +<8cb0> 8957 +<8cb2> 3874 +<8cb3> 3433 +<8cb4> 3438 +<8cb5> 8959 +<8cb6> 3440 +<8cb7> 3439 +<8cb8> 3442 +<8cb9> 8958 +<8cba> 8955 +<8cbb> 3436 +<8cbc> 3432 +<8cbd> 3434 +<8cbe> 8956 +<8cbf> 3441 +<8cc0> 3437 +<8cc1> 3435 +<8cc2> 3876 +<8cc3> 3875 +endcidchar + +100 begincidchar +<8cc4> 3873 +<8cc5> 3877 +<8cca> 3870 +<8ccc> 9632 +<8ccd> 16025 +<8ccf> 10253 +<8cd3> 4279 +<8cd4> 18302 +<8cd5> 10252 +<8cd6> 14411 +<8cd7> 10254 +<8cd9> 10840 +<8cda> 10842 +<8cdb> 14417 +<8cdc> 4654 +<8cdd> 10843 +<8cde> 4647 +<8cdf> 10839 +<8ce0> 4646 +<8ce1> 4656 +<8ce4> 4649 +<8ce5> 10838 +<8ce6> 4648 +<8ce7> 10844 +<8ce8> 10841 +<8ce9> 15278 +<8cea> 4655 +<8ceb> 16284 +<8cee> 11418 +<8cf0> 11420 +<8cf1> 11419 +<8cf2> 18303 +<8cf3> 11421 +<8cf4> 4960 +<8cf5> 11417 +<8cf7> 16305 +<8cf8> 5254 +<8cf9> 11891 +<8cfa> 5251 +<8cfb> 5255 +<8cfc> 5253 +<8cfd> 5252 +<8cfe> 12261 +<8d00> 12264 +<8d02> 12263 +<8d03> 14415 +<8d04> 12262 +<8d05> 5423 +<8d08> 5581 +<8d09> 12597 +<8d0a> 5582 +<8d0b> 17779 +<8d0c> 16278 +<8d0d> 5707 +<8d0f> 5706 +<8d10> 13078 +<8d11> 14419 +<8d12> 14414 +<8d13> 5778 +<8d14> 13079 +<8d15> 13244 +<8d18> 15983 +<8d19> 13378 +<8d1b> 5935 +<8d1c> 18304 +<8d1d> 17670 +<8d64> 1295 +<8d66> 2992 +<8d67> 2991 +<8d6b> 4282 +<8d6c> 11422 +<8d6d> 4657 +<8d6e> 11423 +<8d6f> 11892 +<8d70> 1296 +<8d72> 7174 +<8d73> 2061 +<8d74> 2060 +<8d76> 7694 +<8d77> 2510 +<8d78> 7695 +<8d79> 8307 +<8d7a> 14817 +<8d7b> 8306 +<8d7d> 8305 +<8d80> 8961 +<8d81> 3445 +<8d82> 16233 +<8d84> 8960 +<8d85> 3444 +<8d89> 8962 +<8d8a> 3443 +<8d8c> 9636 +<8d8d> 9639 +<8d90> 9642 +<8d91> 9635 +<8d92> 9643 +<8d95> 4284 +<8d96> 10255 +<8d99> 4283 +endcidchar + +100 begincidchar +<8d9b> 10848 +<8d9c> 10846 +<8d9f> 4658 +<8da0> 10845 +<8da1> 10847 +<8da3> 4659 +<8da5> 11424 +<8da6> 16375 +<8da7> 11425 +<8da8> 5256 +<8da9> 14422 +<8daa> 12599 +<8dab> 12601 +<8dac> 12598 +<8dad> 12600 +<8dae> 12861 +<8daf> 13080 +<8db2> 13577 +<8db3> 1297 +<8db4> 2062 +<8db5> 7696 +<8db6> 7698 +<8db7> 7697 +<8db9> 8310 +<8dba> 2994 +<8dbc> 8308 +<8dbe> 2993 +<8dbf> 8311 +<8dc0> 17258 +<8dc1> 8312 +<8dc2> 8309 +<8dc3> 18306 +<8dc5> 8974 +<8dc6> 3453 +<8dc7> 8966 +<8dc8> 8972 +<8dcb> 3448 +<8dcc> 3451 +<8dcd> 8965 +<8dce> 3446 +<8dcf> 8969 +<8dd0> 9649 +<8dd1> 3450 +<8dd3> 8964 +<8dd4> 16258 +<8dd5> 8970 +<8dd6> 8967 +<8dd7> 8973 +<8dd8> 8963 +<8dd9> 8971 +<8dda> 3449 +<8ddb> 3452 +<8ddc> 8968 +<8ddd> 3447 +<8ddf> 3879 +<8de0> 9645 +<8de1> 3878 +<8de2> 9652 +<8de3> 9651 +<8de4> 3885 +<8de6> 3886 +<8de7> 9653 +<8de8> 3880 +<8de9> 9650 +<8dea> 3884 +<8deb> 9655 +<8dec> 9646 +<8dee> 9648 +<8def> 3881 +<8df0> 9644 +<8df1> 9647 +<8df2> 9654 +<8df3> 3882 +<8df4> 9656 +<8dfa> 3883 +<8dfc> 4285 +<8dfd> 10260 +<8dfe> 10266 +<8dff> 10258 +<8e00> 10267 +<8e01> 16261 +<8e02> 10257 +<8e03> 10262 +<8e04> 10268 +<8e05> 10265 +<8e06> 10264 +<8e07> 10263 +<8e09> 10256 +<8e0a> 10261 +<8e0d> 10259 +<8e0e> 15966 +<8e0f> 4664 +<8e10> 4661 +<8e11> 10857 +<8e12> 10862 +<8e13> 10864 +<8e14> 10861 +<8e15> 10854 +<8e16> 10856 +<8e17> 10866 +endcidchar + +100 begincidchar +<8e18> 10863 +<8e19> 10858 +<8e1a> 10867 +<8e1b> 10855 +<8e1c> 10865 +<8e1d> 4662 +<8e1e> 4668 +<8e1f> 4666 +<8e20> 10849 +<8e21> 4667 +<8e22> 4663 +<8e23> 10850 +<8e24> 10852 +<8e25> 10851 +<8e28> 16264 +<8e29> 4665 +<8e2a> 15284 +<8e2b> 4660 +<8e2d> 16043 +<8e2e> 10853 +<8e30> 11435 +<8e31> 4962 +<8e33> 11426 +<8e34> 4963 +<8e35> 4966 +<8e36> 11431 +<8e38> 11428 +<8e39> 4965 +<8e3a> 18308 +<8e3e> 11427 +<8e3f> 11436 +<8e40> 11429 +<8e41> 11434 +<8e42> 4964 +<8e44> 4961 +<8e45> 11430 +<8e46> 17170 +<8e47> 11898 +<8e48> 5259 +<8e49> 5257 +<8e4a> 5260 +<8e4b> 5258 +<8e4c> 11897 +<8e4d> 11894 +<8e4e> 11893 +<8e4f> 16259 +<8e50> 11896 +<8e53> 11895 +<8e54> 12278 +<8e55> 5429 +<8e56> 12269 +<8e57> 12268 +<8e59> 5424 +<8e5a> 12274 +<8e5b> 12273 +<8e5c> 12265 +<8e5d> 12276 +<8e5e> 12270 +<8e5f> 5428 +<8e60> 12267 +<8e61> 12275 +<8e62> 12266 +<8e63> 5425 +<8e64> 5427 +<8e65> 12271 +<8e66> 5426 +<8e67> 12272 +<8e68> 17229 +<8e69> 12277 +<8e6a> 12605 +<8e6c> 5587 +<8e6d> 12602 +<8e6f> 12606 +<8e71> 17383 +<8e72> 5584 +<8e73> 12604 +<8e74> 5589 +<8e75> 16265 +<8e76> 5586 +<8e77> 16255 +<8e78> 12603 +<8e7a> 5588 +<8e7b> 12607 +<8e7c> 5583 +<8e7e> 17188 +<8e80> 18637 +<8e81> 5709 +<8e82> 5711 +<8e84> 12864 +<8e85> 5710 +<8e86> 12862 +<8e87> 5585 +<8e88> 12863 +<8e89> 5708 +<8e8a> 5779 +<8e8b> 5781 +<8e8c> 13082 +<8e8d> 5780 +<8e8e> 13081 +<8e90> 13249 +endcidchar + +100 begincidchar +<8e91> 5851 +<8e92> 13248 +<8e93> 5852 +<8e94> 13246 +<8e95> 13245 +<8e98> 13379 +<8e9a> 13247 +<8e9d> 13473 +<8ea1> 5961 +<8ea3> 13547 +<8ea4> 13546 +<8ea5> 13545 +<8ea6> 13578 +<8ea7> 15285 +<8ea8> 13623 +<8ea9> 13604 +<8eaa> 5979 +<8eab> 1298 +<8eac> 2511 +<8ead> 14430 +<8eb0> 17385 +<8eb2> 3887 +<8eb6> 14431 +<8eb9> 18935 +<8eba> 4669 +<8ebc> 14496 +<8ebd> 11437 +<8ec0> 5430 +<8ec2> 12608 +<8ec3> 14432 +<8ec9> 13605 +<8eca> 1299 +<8ecb> 1677 +<8ecc> 2064 +<8ecd> 2063 +<8ece> 18312 +<8ecf> 2514 +<8ed1> 7699 +<8ed2> 2512 +<8ed3> 7700 +<8ed4> 2513 +<8ed7> 8317 +<8ed8> 8313 +<8eda> 15806 +<8edb> 2995 +<8edc> 8316 +<8edd> 8315 +<8ede> 8314 +<8edf> 2996 +<8ee2> 18313 +<8ee4> 18314 +<8ee5> 8981 +<8ee6> 8979 +<8ee9> 8990 +<8eeb> 8986 +<8eec> 8988 +<8eed> 18315 +<8eee> 8980 +<8eef> 8975 +<8ef1> 8987 +<8ef2> 18316 +<8ef4> 8989 +<8ef5> 8982 +<8ef6> 8985 +<8ef7> 8976 +<8ef8> 3455 +<8ef9> 8978 +<8efa> 8977 +<8efb> 3454 +<8efc> 3456 +<8efe> 3890 +<8eff> 9658 +<8f00> 9660 +<8f01> 9659 +<8f02> 9664 +<8f03> 3888 +<8f05> 9661 +<8f06> 9657 +<8f09> 3889 +<8f0a> 3891 +<8f0b> 9665 +<8f0d> 10272 +<8f0e> 10271 +<8f12> 4287 +<8f13> 4289 +<8f14> 4286 +<8f15> 4288 +<8f18> 10870 +<8f19> 14434 +<8f1a> 10871 +<8f1b> 4671 +<8f1c> 4676 +<8f1d> 4670 +<8f1e> 4677 +<8f1f> 4672 +<8f20> 10872 +<8f23> 10873 +<8f24> 10869 +<8f25> 4678 +<8f26> 4674 +endcidchar + +100 begincidchar +<8f29> 4673 +<8f2a> 4675 +<8f2c> 10868 +<8f2d> 14435 +<8f2e> 11439 +<8f2f> 4968 +<8f30> 15287 +<8f32> 11441 +<8f33> 4970 +<8f34> 11444 +<8f35> 11440 +<8f36> 11438 +<8f37> 11443 +<8f38> 4969 +<8f39> 11442 +<8f3b> 4967 +<8f3e> 5262 +<8f3f> 5265 +<8f40> 11900 +<8f41> 15623 +<8f42> 5263 +<8f43> 11899 +<8f44> 5261 +<8f45> 5264 +<8f49> 5431 +<8f4a> 15288 +<8f4b> 12282 +<8f4d> 5432 +<8f4e> 5591 +<8f51> 12610 +<8f52> 12609 +<8f53> 12613 +<8f54> 5590 +<8f55> 12868 +<8f58> 12869 +<8f59> 12865 +<8f5a> 12870 +<8f5b> 13084 +<8f5c> 16177 +<8f5d> 13085 +<8f5e> 13083 +<8f5f> 5782 +<8f60> 13252 +<8f61> 5853 +<8f62> 13253 +<8f63> 13381 +<8f64> 13380 +<8f6e> 17771 +<8f93> 18226 +<8f9b> 1300 +<8f9c> 3457 +<8f9f> 3892 +<8fa0> 15764 +<8fa3> 4290 +<8fa5> 14438 +<8fa6> 4972 +<8fa7> 18864 +<8fa8> 4971 +<8fad> 5592 +<8fae> 5679 +<8faf> 5783 +<8fb0> 1301 +<8fb1> 2515 +<8fb2> 3893 +<8fb3> 14442 +<8fb4> 12614 +<8fb5> 560 +<8fb6> 18387 +<8fb7> 17405 +<8fb8> 17142 +<8fb9> 18633 +<8fba> 18631 +<8fbe> 18630 +<8fbf> 6377 +<8fc1> 18317 +<8fc2> 1302 +<8fc4> 1305 +<8fc5> 1304 +<8fc6> 1303 +<8fc9> 6376 +<8fca> 18318 +<8fcb> 6730 +<8fcc> 18319 +<8fcd> 6732 +<8fce> 1678 +<8fcf> 18937 +<8fd0> 18606 +<8fd1> 1680 +<8fd2> 6729 +<8fd3> 6731 +<8fd4> 1679 +<8fd5> 6734 +<8fd6> 6733 +<8fd7> 6735 +<8fda> 16331 +<8fe0> 7178 +<8fe1> 7176 +<8fe2> 2067 +<8fe3> 7175 +<8fe4> 2072 +endcidchar + +100 begincidchar +<8fe5> 2069 +<8fe6> 2066 +<8fe8> 2073 +<8fea> 2068 +<8feb> 2071 +<8fed> 2070 +<8fee> 7177 +<8ff0> 2065 +<8ff4> 2521 +<8ff5> 7702 +<8ff6> 7708 +<8ff7> 2518 +<8ff8> 2525 +<8ff9> 14449 +<8ffa> 2520 +<8ffb> 7705 +<8ffc> 7707 +<8ffd> 2523 +<8ffe> 7701 +<8fff> 7704 +<9000> 2519 +<9001> 2516 +<9002> 7703 +<9003> 2522 +<9004> 7706 +<9005> 2524 +<9006> 2517 +<9008> 16096 +<900b> 8321 +<900c> 8324 +<900d> 2998 +<900f> 3008 +<9010> 3004 +<9011> 8322 +<9012> 15950 +<9014> 3012 +<9015> 3005 +<9016> 3010 +<9017> 3000 +<9019> 2997 +<901a> 2999 +<901b> 3011 +<901c> 8323 +<901d> 3003 +<901e> 3006 +<901f> 3002 +<9020> 3007 +<9021> 8325 +<9022> 3009 +<9023> 3001 +<9024> 8320 +<902d> 8991 +<902e> 3458 +<902f> 8993 +<9031> 3460 +<9032> 3462 +<9033> 18320 +<9034> 8992 +<9035> 3459 +<9036> 3463 +<9037> 14454 +<9038> 3461 +<903c> 3899 +<903d> 9670 +<903e> 3907 +<903f> 9667 +<9041> 3908 +<9042> 3897 +<9044> 9668 +<9046> 19121 +<9047> 3902 +<9049> 9669 +<904a> 3895 +<904b> 3894 +<904c> 16144 +<904d> 3905 +<904e> 3904 +<904f> 3903 +<9050> 3901 +<9051> 3906 +<9052> 9666 +<9053> 3896 +<9054> 3898 +<9055> 3900 +<9056> 15826 +<9058> 4292 +<9059> 4295 +<905b> 4299 +<905c> 4293 +<905d> 4298 +<905e> 4296 +<9060> 4291 +<9061> 14457 +<9062> 4297 +<9063> 4294 +<9064> 15464 +<9067> 10879 +<9068> 4681 +<9069> 4679 +<906b> 10880 +endcidchar + +100 begincidchar +<906c> 15712 +<906d> 4682 +<906e> 4680 +<906f> 10878 +<9070> 10877 +<9072> 4976 +<9073> 10876 +<9074> 4974 +<9075> 4973 +<9076> 11445 +<9077> 4683 +<9078> 4975 +<9079> 11446 +<907a> 4978 +<907b> 11447 +<907c> 4977 +<907d> 5267 +<907e> 11902 +<907f> 5266 +<9080> 5271 +<9083> 5434 +<9084> 5268 +<9085> 11901 +<9086> 11448 +<9087> 5433 +<9088> 5435 +<908d> 12871 +<908f> 5900 +<9090> 5899 +<9091> 1307 +<9094> 6174 +<9095> 2526 +<9099> 6170 +<909b> 6173 +<909e> 6381 +<909f> 6378 +<90a0> 6383 +<90a1> 6379 +<90a2> 1308 +<90a3> 1311 +<90a5> 6380 +<90a6> 1310 +<90a7> 6382 +<90a8> 14460 +<90aa> 1309 +<90ae> 14464 +<90af> 6738 +<90b0> 6740 +<90b1> 1683 +<90b2> 6736 +<90b3> 6739 +<90b4> 6737 +<90b5> 1681 +<90b6> 1684 +<90b8> 1682 +<90bb> 15300 +<90bd> 7180 +<90be> 7184 +<90bf> 7181 +<90c1> 2076 +<90c3> 2077 +<90c4> 14462 +<90c5> 7183 +<90c7> 7185 +<90c8> 7187 +<90ca> 2074 +<90cb> 7186 +<90ce> 2075 +<90d4> 8332 +<90d5> 7182 +<90d6> 7709 +<90d7> 7718 +<90d8> 7716 +<90db> 7717 +<90dc> 7719 +<90dd> 2528 +<90df> 7714 +<90e0> 7710 +<90e1> 2527 +<90e2> 2529 +<90e3> 7713 +<90e4> 7720 +<90e5> 7715 +<90e8> 3013 +<90e9> 8335 +<90ea> 8327 +<90ed> 3014 +<90ef> 8326 +<90f0> 8328 +<90f1> 7179 +<90f4> 8329 +<90f5> 3465 +<90f9> 9000 +<90fa> 11449 +<90fb> 9001 +<90fc> 8998 +<90fd> 3015 +<90fe> 3467 +<90ff> 8997 +<9100> 9003 +endcidchar + +100 begincidchar +<9101> 9002 +<9102> 3464 +<9103> 9006 +<9104> 8996 +<9105> 9005 +<9106> 8994 +<9107> 9004 +<9108> 8999 +<9109> 3466 +<910b> 9677 +<910d> 9672 +<910e> 9678 +<910f> 9673 +<9110> 9671 +<9111> 9674 +<9112> 3909 +<9114> 9676 +<9116> 9675 +<9117> 3910 +<9118> 4301 +<9119> 4300 +<911a> 10279 +<911b> 10282 +<911c> 10274 +<911d> 10278 +<911e> 4302 +<911f> 10277 +<9120> 10275 +<9121> 10281 +<9122> 10276 +<9123> 10273 +<9124> 10280 +<9126> 10886 +<9127> 4686 +<9128> 12283 +<912b> 10882 +<912c> 8995 +<912d> 4685 +<912e> 10887 +<912f> 10881 +<9130> 4684 +<9131> 4687 +<9132> 10885 +<9133> 11450 +<9134> 4979 +<9138> 11903 +<9139> 5272 +<913e> 12286 +<913f> 12616 +<9140> 12615 +<9141> 12873 +<9143> 12872 +<9146> 13086 +<9147> 13254 +<9148> 5854 +<9149> 1312 +<914a> 2079 +<914b> 2078 +<914c> 2532 +<914d> 2531 +<9150> 7721 +<9151> 16201 +<9152> 2530 +<9153> 8339 +<9155> 8340 +<9156> 8336 +<9157> 3016 +<9158> 8337 +<9159> 16197 +<915a> 8338 +<915c> 16199 +<915e> 17387 +<915f> 9009 +<9160> 9011 +<9161> 9007 +<9162> 9010 +<9163> 3468 +<9164> 9008 +<9165> 3469 +<9167> 14466 +<9168> 9186 +<9169> 3913 +<916a> 3912 +<916c> 3911 +<9170> 16056 +<9172> 10284 +<9173> 10286 +<9174> 4306 +<9175> 4303 +<9176> 16027 +<9177> 4305 +<9178> 4304 +<9179> 10285 +<917a> 10283 +<917c> 16239 +<9180> 10894 +<9183> 4691 +<9184> 10893 +<9187> 4688 +<9189> 4689 +endcidchar + +100 begincidchar +<918a> 10890 +<918b> 4690 +<918c> 17388 +<918d> 11456 +<918e> 16206 +<918f> 11457 +<9192> 4980 +<9193> 11453 +<9199> 11907 +<919a> 11904 +<919b> 11906 +<919c> 5275 +<919d> 11910 +<919e> 5274 +<919f> 11908 +<91a0> 11911 +<91a1> 11909 +<91a2> 11905 +<91a3> 5273 +<91a5> 12288 +<91a7> 12289 +<91a8> 12287 +<91a9> 14467 +<91aa> 12291 +<91ad> 12618 +<91ae> 5596 +<91af> 12290 +<91b0> 12617 +<91b1> 5595 +<91b4> 5712 +<91b5> 12875 +<91b6> 17903 +<91b7> 12874 +<91b9> 13089 +<91ba> 5784 +<91bb> 15304 +<91bc> 13382 +<91bd> 13475 +<91be> 13474 +<91c0> 5936 +<91c1> 5962 +<91c2> 13476 +<91c3> 13579 +<91c4> 14468 +<91c5> 5980 +<91c6> 1313 +<91c7> 1685 +<91c9> 3914 +<91cb> 5713 +<91cc> 1314 +<91cd> 2080 +<91ce> 3017 +<91cf> 3470 +<91d0> 5438 +<91d1> 1686 +<91d3> 7189 +<91d4> 7188 +<91d5> 7724 +<91d6> 16734 +<91d7> 2535 +<91d8> 2533 +<91d9> 2537 +<91da> 7726 +<91dc> 2536 +<91dd> 2534 +<91df> 17722 +<91e2> 7725 +<91e3> 3020 +<91e4> 8346 +<91e5> 15366 +<91e6> 3019 +<91e7> 3021 +<91e8> 8351 +<91e9> 3023 +<91ec> 8341 +<91ed> 3022 +<91ee> 8352 +<91f1> 8343 +<91f3> 8344 +<91f4> 8342 +<91f5> 3018 +<91f6> 18865 +<91f7> 8350 +<91f8> 8345 +<91f9> 8347 +<91fa> 15096 +<91fd> 9023 +<91fe> 14382 +<91ff> 9022 +<9200> 9020 +<9201> 9012 +<9202> 9027 +<9203> 9015 +<9204> 9025 +<9205> 9032 +<9206> 9024 +<9207> 3478 +<9208> 16057 +<9209> 3474 +<920a> 9013 +endcidchar + +100 begincidchar +<920c> 9019 +<920d> 3476 +<920e> 14472 +<920f> 9018 +<9210> 3477 +<9211> 3479 +<9212> 9021 +<9213> 18323 +<9216> 9033 +<9217> 9031 +<9218> 19110 +<9219> 9030 +<921a> 9016 +<921c> 9028 +<921e> 3475 +<9221> 18940 +<9223> 3473 +<9224> 9029 +<9225> 9014 +<9226> 9017 +<9227> 9026 +<9228> 18325 +<922a> 15374 +<922b> 15270 +<922d> 10321 +<922e> 9690 +<9230> 9683 +<9231> 9702 +<9232> 9711 +<9233> 9686 +<9234> 3925 +<9235> 15142 +<9236> 9699 +<9237> 3915 +<9238> 3917 +<9239> 3929 +<923a> 9684 +<923c> 16850 +<923d> 3918 +<923e> 3920 +<923f> 3930 +<9240> 3919 +<9241> 14474 +<9244> 14490 +<9245> 3928 +<9246> 9692 +<9248> 9681 +<9249> 3926 +<924a> 9691 +<924b> 3922 +<924c> 9709 +<924d> 3927 +<924e> 9707 +<924f> 9695 +<9250> 9705 +<9251> 3924 +<9252> 9682 +<9253> 9708 +<9254> 9703 +<9255> 15943 +<9256> 9710 +<9257> 3916 +<9258> 18326 +<925a> 3931 +<925b> 3921 +<925d> 14851 +<925e> 9688 +<925f> 15584 +<9260> 9696 +<9261> 9700 +<9262> 14475 +<9263> 9704 +<9264> 3923 +<9265> 9687 +<9266> 9685 +<9267> 9697 +<926b> 18327 +<926c> 9694 +<926d> 9693 +<926e> 15621 +<926f> 9698 +<9270> 9701 +<9272> 9706 +<9276> 10289 +<9277> 15460 +<9278> 4307 +<9279> 10299 +<927a> 10291 +<927b> 4313 +<927c> 4317 +<927d> 10308 +<927e> 10316 +<927f> 10301 +<9280> 4309 +<9281> 15873 +<9282> 10305 +<9283> 9689 +<9284> 15545 +<9285> 4310 +<9286> 10312 +endcidchar + +100 begincidchar +<9287> 10317 +<9288> 10309 +<9289> 15029 +<928a> 10311 +<928b> 10320 +<928c> 10313 +<928d> 10295 +<928e> 10304 +<928f> 18109 +<9291> 4318 +<9293> 4314 +<9294> 10293 +<9295> 10306 +<9296> 4312 +<9297> 10300 +<9298> 4311 +<9299> 10314 +<929a> 10297 +<929b> 10290 +<929c> 4315 +<929d> 10319 +<92a0> 10292 +<92a1> 10310 +<92a2> 10307 +<92a3> 10302 +<92a4> 10288 +<92a5> 10287 +<92a6> 10296 +<92a7> 10315 +<92a8> 4316 +<92a9> 10318 +<92aa> 10294 +<92ab> 10298 +<92ac> 4308 +<92ae> 18329 +<92b1> 18328 +<92b2> 4703 +<92b3> 4698 +<92b4> 10928 +<92b5> 10924 +<92b6> 10900 +<92b7> 4694 +<92b9> 14057 +<92ba> 15349 +<92bb> 4693 +<92bc> 4699 +<92be> 15456 +<92bf> 18330 +<92c0> 10898 +<92c1> 4697 +<92c2> 10910 +<92c5> 4692 +<92c6> 10927 +<92c7> 4701 +<92c8> 10913 +<92c9> 10918 +<92ca> 10912 +<92cb> 11475 +<92cc> 10908 +<92cd> 10916 +<92ce> 10914 +<92cf> 10901 +<92d0> 10895 +<92d1> 10922 +<92d2> 4700 +<92d3> 10923 +<92d4> 14433 +<92d5> 10917 +<92d7> 10906 +<92d8> 10904 +<92d9> 10899 +<92db> 16396 +<92dd> 10907 +<92de> 10920 +<92df> 10903 +<92e0> 10919 +<92e1> 10925 +<92e3> 18331 +<92e4> 4696 +<92e5> 15522 +<92e6> 10915 +<92e7> 10921 +<92e8> 10911 +<92e9> 10905 +<92ea> 4695 +<92eb> 18332 +<92ec> 14692 +<92ee> 10303 +<92ef> 10909 +<92f0> 4702 +<92f1> 10902 +<92f2> 15026 +<92f6> 15364 +<92f7> 11480 +<92f8> 4983 +<92f9> 11479 +<92fa> 11477 +<92fb> 11495 +<92fc> 4987 +<92fd> 18335 +endcidchar + +100 begincidchar +<92fe> 11492 +<92ff> 11484 +<9300> 11494 +<9301> 11470 +<9302> 11482 +<9303> 14439 +<9304> 4989 +<9306> 11462 +<9307> 15121 +<9308> 11460 +<9309> 11493 +<930b> 11491 +<930c> 11490 +<930d> 11474 +<930e> 11473 +<930f> 11463 +<9310> 4991 +<9312> 11469 +<9313> 11478 +<9314> 11489 +<9315> 4994 +<9316> 11496 +<9318> 5283 +<9319> 4996 +<931a> 4990 +<931b> 11467 +<931d> 11476 +<931e> 11459 +<931f> 11461 +<9320> 4981 +<9321> 4993 +<9322> 4986 +<9323> 11468 +<9324> 11483 +<9325> 10926 +<9326> 4992 +<9327> 11458 +<9328> 5278 +<9329> 11485 +<932a> 11488 +<932b> 4988 +<932c> 14482 +<932d> 11472 +<932e> 4995 +<932f> 4985 +<9330> 15875 +<9331> 15549 +<9333> 4984 +<9334> 11481 +<9335> 11487 +<9336> 4982 +<9338> 11465 +<9339> 11486 +<933c> 11466 +<9340> 16725 +<9341> 17015 +<9342> 15098 +<9343> 18336 +<9344> 16406 +<9345> 15988 +<9346> 11471 +<9347> 11917 +<9348> 15457 +<9349> 11922 +<934a> 5280 +<934b> 5282 +<934c> 11928 +<934d> 5276 +<934e> 11942 +<934f> 11934 +<9352> 11933 +<9354> 5289 +<9355> 11932 +<9356> 11916 +<9357> 11931 +<9358> 11919 +<9359> 11943 +<935a> 5288 +<935b> 5286 +<935c> 11920 +<935e> 11939 +<935f> 15547 +<9360> 11925 +<9361> 11938 +<9362> 17000 +<9363> 11940 +<9364> 11915 +<9365> 5281 +<9366> 18108 +<9367> 11941 +<9368> 15344 +<9369> 14689 +<936a> 11929 +<936b> 14483 +<936c> 5285 +<936d> 11926 +<936e> 16300 +<9370> 5287 +<9371> 11935 +<9373> 14494 +endcidchar + +100 begincidchar +<9374> 15588 +<9375> 5279 +<9376> 11921 +<9377> 11936 +<9378> 14585 +<9379> 11930 +<937a> 11464 +<937b> 11937 +<937c> 11918 +<937d> 15397 +<937e> 5284 +<9380> 12308 +<9381> 14693 +<9382> 5277 +<9383> 11913 +<9384> 18337 +<9385> 17085 +<9386> 15552 +<9387> 15072 +<9388> 12305 +<9389> 12298 +<938a> 5440 +<938c> 12293 +<938d> 12309 +<938e> 12300 +<938f> 11927 +<9390> 15676 +<9391> 12311 +<9392> 12294 +<9394> 5439 +<9395> 12304 +<9396> 5441 +<9397> 5449 +<9398> 5447 +<9399> 12306 +<939a> 5448 +<939b> 12296 +<939c> 14764 +<939d> 12297 +<939e> 12302 +<939f> 12307 +<93a0> 15025 +<93a1> 11912 +<93a2> 5442 +<93a3> 12316 +<93a4> 12313 +<93a5> 12640 +<93a6> 12303 +<93a7> 12299 +<93a8> 12314 +<93a9> 12629 +<93aa> 12301 +<93ac> 5445 +<93ad> 18338 +<93ae> 5444 +<93af> 11914 +<93b0> 5446 +<93b1> 12310 +<93b2> 12312 +<93b3> 5443 +<93b4> 12315 +<93b5> 12292 +<93b7> 12295 +<93b8> 15504 +<93ba> 17399 +<93bb> 15503 +<93bd> 14887 +<93bf> 15917 +<93c0> 12638 +<93c2> 12622 +<93c3> 5600 +<93c4> 12636 +<93c6> 18106 +<93c7> 12620 +<93c8> 5601 +<93ca> 12631 +<93cb> 14694 +<93cc> 12627 +<93cd> 5606 +<93ce> 12637 +<93cf> 12621 +<93d0> 12624 +<93d1> 5598 +<93d2> 12639 +<93d3> 16609 +<93d4> 12632 +<93d5> 12635 +<93d6> 5604 +<93d7> 5609 +<93d8> 5607 +<93d9> 12628 +<93da> 12623 +<93db> 15455 +<93de> 12619 +<93df> 5599 +<93e0> 14880 +<93e1> 5597 +<93e2> 5605 +<93e3> 12634 +<93e4> 5608 +endcidchar + +100 begincidchar +<93e6> 12630 +<93e7> 12641 +<93e8> 5610 +<93ec> 12626 +<93ee> 12633 +<93f0> 16959 +<93f1> 17066 +<93f3> 14690 +<93f4> 18890 +<93f5> 12890 +<93f6> 12905 +<93f7> 12892 +<93f8> 12899 +<93f9> 12625 +<93fa> 12897 +<93fb> 12880 +<93fc> 12903 +<93fd> 5716 +<93fe> 12884 +<93ff> 12902 +<9400> 12891 +<9401> 15572 +<9403> 5715 +<9404> 15305 +<9406> 12907 +<9407> 12893 +<9408> 14885 +<9409> 12898 +<940a> 12901 +<940b> 12878 +<940c> 12904 +<940d> 12889 +<940e> 12894 +<940f> 12882 +<9410> 12886 +<9411> 12906 +<9412> 12896 +<9413> 12879 +<9414> 12883 +<9415> 12885 +<9416> 12895 +<9417> 18341 +<9418> 5714 +<9419> 12888 +<941b> 16712 +<941d> 18342 +<9420> 12881 +<9424> 14659 +<9425> 14544 +<9426> 14499 +<9427> 15309 +<9428> 12887 +<9429> 13093 +<942a> 13097 +<942b> 5791 +<942c> 13099 +<942d> 18343 +<942e> 5785 +<942f> 19105 +<9430> 13095 +<9431> 13101 +<9432> 5790 +<9433> 5786 +<9435> 5787 +<9436> 13092 +<9437> 13098 +<9438> 5789 +<9439> 13096 +<943a> 5788 +<943b> 13091 +<943c> 12900 +<943d> 13094 +<943e> 18344 +<943f> 13090 +<9440> 13100 +<9442> 17010 +<9443> 17013 +<9444> 5855 +<9445> 13261 +<9446> 13264 +<9447> 13260 +<944c> 13255 +<944d> 15461 +<944f> 13259 +<9450> 13256 +<9454> 18346 +<9455> 13384 +<9457> 13386 +<9458> 15408 +<945b> 14495 +<945d> 13385 +<945e> 13387 +<9460> 5902 +<9462> 13383 +<9463> 5901 +<9464> 5903 +<9465> 15838 +<9467> 15032 +<946a> 5937 +<946b> 13477 +endcidchar + +100 begincidchar +<946c> 14206 +<946d> 13549 +<946e> 13548 +<946f> 13550 +<9470> 5964 +<9471> 13551 +<9472> 5963 +<9473> 13552 +<9474> 13580 +<9475> 13583 +<9476> 13582 +<9477> 5973 +<9478> 13581 +<9479> 18347 +<947b> 16795 +<947c> 5983 +<947f> 5988 +<9482> 13624 +<9483> 13632 +<9485> 17671 +<949f> 18565 +<94a2> 17691 +<94c1> 18401 +<94c3> 18399 +<94dc> 18391 +<94f6> 18386 +<952d> 18348 +<9547> 18623 +<9577> 1687 +<9578> 17672 +<957a> 8353 +<957b> 9034 +<957c> 10929 +<957d> 12642 +<957f> 17673 +<9580> 1688 +<9582> 2081 +<9583> 2538 +<9585> 14497 +<9586> 8354 +<9588> 8355 +<9589> 3024 +<958b> 3482 +<958c> 9036 +<958d> 9035 +<958e> 3486 +<958f> 3481 +<9590> 9037 +<9591> 3483 +<9592> 3485 +<9593> 3484 +<9594> 3480 +<9596> 15317 +<9597> 15316 +<9598> 3932 +<9599> 15314 +<959b> 9715 +<959c> 9713 +<959e> 9714 +<959f> 9712 +<95a0> 14500 +<95a1> 4319 +<95a2> 18349 +<95a3> 4322 +<95a4> 4324 +<95a5> 4323 +<95a6> 14498 +<95a7> 15315 +<95aa> 17301 +<95ab> 10931 +<95ac> 10930 +<95ad> 4704 +<95ae> 10932 +<95b0> 10933 +<95b1> 4705 +<95b5> 11504 +<95b6> 11502 +<95b7> 11949 +<95bb> 4997 +<95bc> 11497 +<95bd> 11505 +<95be> 11499 +<95bf> 11503 +<95c0> 11945 +<95c3> 11947 +<95c5> 11948 +<95c6> 5294 +<95c7> 11944 +<95c8> 5293 +<95c9> 11946 +<95cd> 11498 +<95d0> 5452 +<95d1> 12319 +<95d4> 5450 +<95d5> 5453 +<95d6> 5451 +<95dc> 5611 +<95de> 12908 +<95df> 12910 +<95e0> 12909 +endcidchar + +100 begincidchar +<95e1> 5717 +<95e2> 5792 +<95e3> 13104 +<95e4> 13103 +<95e5> 13102 +<95e8> 17674 +<95f4> 18351 +<961c> 1689 +<961d> 17689 +<961e> 6068 +<9620> 6177 +<9621> 1044 +<9622> 6175 +<9623> 6178 +<9624> 6176 +<9628> 6385 +<962a> 1318 +<962c> 1319 +<962d> 6387 +<962e> 1316 +<962f> 6386 +<9630> 6384 +<9631> 1317 +<9632> 1315 +<9633> 18352 +<9638> 16337 +<9639> 6741 +<963a> 6744 +<963b> 1692 +<963c> 6743 +<963d> 6742 +<963f> 1691 +<9640> 1690 +<9641> 16189 +<9642> 1694 +<9643> 6745 +<9644> 1693 +<9645> 18290 +<964a> 7194 +<964e> 7195 +<964f> 7191 +<9650> 2082 +<9651> 7192 +<9653> 7193 +<9654> 7190 +<9656> 15847 +<9658> 2545 +<965b> 2542 +<965c> 7727 +<965d> 2543 +<965e> 2546 +<965f> 7728 +<9661> 2541 +<9664> 2544 +<9669> 18270 +<966a> 3025 +<966b> 8358 +<966c> 3033 +<966d> 8357 +<966f> 8360 +<9670> 3029 +<9671> 8359 +<9672> 3494 +<9673> 3027 +<9674> 3030 +<9675> 3026 +<9678> 3028 +<967b> 14508 +<967c> 8356 +<967d> 3490 +<967e> 9039 +<9680> 9043 +<9681> 16198 +<9683> 9042 +<9684> 3495 +<9687> 9038 +<968a> 3487 +<968b> 3489 +<968d> 3493 +<968e> 3488 +<968f> 15326 +<9691> 9718 +<9696> 14509 +<9697> 9719 +<9698> 3933 +<9699> 4325 +<969b> 4327 +<969c> 4326 +<969e> 10322 +<96a1> 10323 +<96a2> 10935 +<96a3> 14511 +<96a4> 10934 +<96a5> 17135 +<96a9> 11506 +<96aa> 5000 +<96ac> 11952 +<96ae> 11950 +<96b0> 11951 +<96b1> 5295 +endcidchar + +100 begincidchar +<96b3> 12320 +<96b4> 5612 +<96b6> 561 +<96b8> 5296 +<96b9> 1695 +<96bb> 2547 +<96bc> 7729 +<96bd> 14517 +<96bf> 8361 +<96c0> 3034 +<96c1> 3496 +<96c2> 9044 +<96c3> 9046 +<96c4> 3498 +<96c5> 3497 +<96c8> 9045 +<96cb> 3937 +<96cc> 4328 +<96cd> 3936 +<96ce> 9720 +<96d2> 4329 +<96d3> 10936 +<96d4> 11507 +<96d5> 5001 +<96d6> 5297 +<96d7> 12321 +<96d8> 12325 +<96d9> 5456 +<96da> 12322 +<96db> 5457 +<96dc> 5455 +<96dd> 12326 +<96de> 5458 +<96df> 12324 +<96e1> 12645 +<96e2> 5454 +<96e3> 5613 +<96e5> 13480 +<96e8> 1696 +<96e9> 3036 +<96ea> 3035 +<96ef> 3501 +<96f0> 9048 +<96f1> 9047 +<96f2> 3502 +<96f4> 14852 +<96f5> 9724 +<96f6> 3943 +<96f7> 3940 +<96f8> 9723 +<96f9> 3942 +<96fa> 9721 +<96fb> 3941 +<96fd> 9722 +<96ff> 10324 +<9700> 4330 +<9702> 10939 +<9703> 16141 +<9704> 4706 +<9705> 10937 +<9708> 10938 +<9709> 4709 +<970b> 11508 +<970d> 5005 +<970e> 5002 +<970f> 5007 +<9710> 11510 +<9711> 5003 +<9712> 11509 +<9713> 5006 +<9716> 5004 +<9718> 11955 +<9719> 11957 +<971b> 14537 +<971c> 5298 +<971d> 11956 +<971e> 5299 +<971f> 11954 +<9720> 11953 +<9721> 16307 +<9722> 12328 +<9723> 12327 +<9724> 5459 +<9725> 12329 +<9726> 12650 +<9727> 5615 +<9728> 12649 +<9729> 12646 +<972a> 5614 +<9730> 5718 +<9731> 14528 +<9732> 5795 +<9734> 19007 +<9735> 13105 +<9736> 14530 +<973a> 13106 +<973f> 13265 +<9740> 18355 +<9741> 15337 +<9742> 5938 +endcidchar + +100 begincidchar +<9743> 13482 +<9744> 5940 +<9746> 13481 +<9747> 13483 +<9748> 5939 +<9749> 13553 +<974a> 19109 +<974b> 13606 +<9751> 17635 +<9752> 1697 +<9755> 18886 +<9756> 3944 +<9757> 14540 +<9758> 10325 +<975a> 10940 +<975d> 15919 +<975e> 1698 +<975f> 14543 +<9760> 4710 +<9761> 5616 +<9762> 2086 +<9766> 5010 +<9768> 5904 +<9769> 2087 +<976a> 8362 +<976c> 9049 +<976d> 16023 +<976e> 9051 +<9770> 9050 +<9771> 18123 +<9772> 9728 +<9773> 9725 +<9774> 3945 +<9776> 3946 +<977a> 10327 +<977b> 10332 +<977c> 4331 +<977d> 10326 +<977e> 10328 +<977f> 10335 +<9780> 10330 +<9781> 10334 +<9782> 10331 +<9783> 10329 +<9784> 10333 +<9785> 4332 +<9787> 16576 +<9788> 10943 +<9789> 14548 +<978a> 10941 +<978b> 4712 +<978d> 4711 +<978e> 10942 +<978f> 4713 +<9794> 11513 +<9797> 11512 +<9798> 5011 +<9799> 11511 +<979a> 11958 +<979b> 15355 +<979c> 11960 +<979d> 11962 +<979e> 11961 +<979f> 14549 +<97a0> 5300 +<97a1> 11959 +<97a2> 12336 +<97a3> 5460 +<97a4> 12334 +<97a5> 12337 +<97a6> 5461 +<97a8> 12332 +<97aa> 12335 +<97ab> 12333 +<97ac> 12330 +<97ad> 5462 +<97ae> 12331 +<97b1> 14550 +<97b2> 18357 +<97b3> 12651 +<97b4> 16179 +<97b6> 12653 +<97b7> 12652 +<97b8> 15765 +<97b9> 12913 +<97ba> 16181 +<97bb> 12914 +<97bd> 18766 +<97be> 14551 +<97bf> 13107 +<97c0> 14552 +<97c1> 5861 +<97c2> 18358 +<97c3> 5860 +<97c6> 5941 +<97c7> 13484 +<97c8> 16175 +<97c9> 5974 +<97cb> 2088 +<97cc> 3503 +endcidchar + +100 begincidchar +<97cd> 10337 +<97ce> 10336 +<97cf> 10945 +<97d0> 10944 +<97d2> 14553 +<97d3> 5301 +<97d4> 11964 +<97d5> 11963 +<97d6> 12340 +<97d7> 12338 +<97d8> 12341 +<97d9> 12339 +<97dc> 5617 +<97e0> 14554 +<97e1> 13108 +<97e3> 13266 +<97e5> 13485 +<97e6> 17676 +<97ed> 2089 +<97ee> 14556 +<97f0> 11514 +<97f1> 11965 +<97f2> 14669 +<97f3> 2090 +<97f5> 14560 +<97f6> 4333 +<97f8> 11515 +<97f9> 5463 +<97fa> 12342 +<97fb> 5618 +<97ff> 5796 +<9800> 13390 +<9801> 2091 +<9804> 8363 +<9807> 9052 +<9808> 3506 +<980a> 3950 +<980c> 3952 +<980f> 9729 +<9812> 3951 +<9813> 3949 +<9814> 18770 +<9815> 17212 +<9816> 10338 +<981b> 10952 +<981c> 4716 +<981d> 10947 +<981e> 10946 +<981f> 15362 +<9820> 10951 +<9821> 4714 +<9823> 15927 +<9824> 5018 +<9826> 10948 +<9827> 10953 +<9828> 10950 +<9829> 10949 +<982b> 4715 +<982d> 5016 +<982e> 16242 +<982f> 11517 +<9830> 5012 +<9832> 11518 +<9833> 14565 +<9834> 14564 +<9835> 11516 +<9837> 5015 +<9838> 5013 +<9839> 5017 +<983b> 5014 +<9841> 11966 +<9843> 11971 +<9844> 11967 +<9845> 11970 +<9846> 5302 +<9847> 15766 +<9848> 11762 +<9849> 11969 +<984a> 11968 +<984b> 14566 +<984c> 5466 +<984d> 5464 +<984e> 5467 +<984f> 5465 +<9853> 5468 +<9856> 19054 +<9857> 12660 +<9858> 5620 +<9859> 12658 +<985b> 5621 +<985c> 12657 +<985d> 12659 +<985e> 5619 +<985f> 12920 +<9860> 12917 +<9864> 13109 +<9865> 5798 +<9866> 14567 +<9867> 5797 +<9868> 18947 +endcidchar + +100 begincidchar +<9869> 13268 +<986a> 13267 +<986b> 5862 +<986c> 16437 +<986f> 5905 +<9870> 5942 +<9871> 5965 +<9872> 13554 +<9875> 17677 +<98a8> 2092 +<98a9> 9053 +<98ac> 9732 +<98af> 4336 +<98b1> 4337 +<98b2> 10954 +<98b3> 4717 +<98b4> 16243 +<98b6> 5303 +<98b7> 14575 +<98b8> 12346 +<98b9> 18360 +<98ba> 5469 +<98bb> 12663 +<98bc> 5622 +<98bd> 12662 +<98be> 12664 +<98bf> 12661 +<98c0> 13112 +<98c3> 15224 +<98c4> 5719 +<98c6> 13111 +<98c7> 14577 +<98c8> 14576 +<98c9> 13110 +<98ca> 14574 +<98cb> 13269 +<98cc> 13609 +<98ce> 17678 +<98db> 2093 +<98dc> 15371 +<98de> 17679 +<98df> 2094 +<98e0> 18322 +<98e1> 14582 +<98e2> 2548 +<98e3> 7730 +<98e5> 8364 +<98e6> 14583 +<98e7> 3507 +<98e9> 3510 +<98ea> 3508 +<98eb> 9054 +<98ec> 14584 +<98ed> 3512 +<98ef> 3509 +<98f1> 18362 +<98f2> 3511 +<98f4> 3954 +<98f5> 17253 +<98f6> 9733 +<98f9> 9734 +<98fa> 10956 +<98fc> 3953 +<9900> 10342 +<9902> 10341 +<9903> 4338 +<9905> 4339 +<9907> 10343 +<9908> 10955 +<9909> 4341 +<990a> 4718 +<990c> 4340 +<990e> 17389 +<9910> 5019 +<9911> 10957 +<9912> 4720 +<9913> 4719 +<9914> 10958 +<9915> 10961 +<9918> 4721 +<9919> 18364 +<991a> 5024 +<991b> 5022 +<991c> 17390 +<991e> 5021 +<991f> 11520 +<9921> 5023 +<9924> 11519 +<9925> 11972 +<9927> 11521 +<9928> 5020 +<9929> 11522 +<992a> 11975 +<992d> 11979 +<992e> 5473 +<992f> 11978 +<9930> 11981 +<9931> 11980 +<9932> 11977 +<9933> 11976 +endcidchar + +100 begincidchar +<9935> 5304 +<9937> 18365 +<9938> 15357 +<9939> 14586 +<993a> 12349 +<993b> 15377 +<993c> 12348 +<993d> 5472 +<9940> 16180 +<9941> 12347 +<9942> 17407 +<9943> 12667 +<9945> 5623 +<9947> 12666 +<9948> 12665 +<9949> 5624 +<994a> 16313 +<994b> 12927 +<994c> 12926 +<994d> 15378 +<994e> 12924 +<9950> 12923 +<9951> 5721 +<9952> 5720 +<9953> 12928 +<9954> 13270 +<9955> 5863 +<9956> 13114 +<9957> 5799 +<9958> 13113 +<9959> 12925 +<995b> 13271 +<995c> 5906 +<995d> 18366 +<995e> 5966 +<995f> 13555 +<9961> 13610 +<9962> 18367 +<9963> 17680 +<9996> 2095 +<9997> 8365 +<9998> 11982 +<9999> 2096 +<999b> 18124 +<999c> 10345 +<999d> 10344 +<999e> 11523 +<99a1> 11984 +<99a3> 11983 +<99a4> 16835 +<99a5> 5474 +<99a8> 5722 +<99aa> 15383 +<99ab> 13611 +<99ac> 2549 +<99ad> 3514 +<99ae> 3513 +<99af> 9735 +<99b0> 9737 +<99b1> 3958 +<99b2> 9736 +<99b3> 3957 +<99b4> 3959 +<99b5> 9738 +<99b8> 14667 +<99b9> 10347 +<99ba> 10349 +<99bb> 10348 +<99bc> 15394 +<99bd> 10351 +<99c1> 4342 +<99c2> 10350 +<99c3> 10346 +<99c4> 15735 +<99c5> 18369 +<99c7> 10352 +<99c9> 10968 +<99cb> 10971 +<99cc> 10973 +<99cd> 10963 +<99ce> 10967 +<99cf> 10964 +<99d0> 4723 +<99d1> 4726 +<99d2> 4728 +<99d5> 4727 +<99d6> 10969 +<99d7> 10972 +<99d8> 10970 +<99d9> 4729 +<99da> 16194 +<99db> 4725 +<99dc> 10962 +<99dd> 4722 +<99df> 4724 +<99e0> 18939 +<99e1> 14213 +<99e2> 5026 +<99e3> 11529 +<99e4> 11527 +endcidchar + +100 begincidchar +<99e5> 11526 +<99e6> 15205 +<99e7> 11532 +<99e9> 11531 +<99ea> 11530 +<99ec> 11525 +<99ed> 5025 +<99ee> 11524 +<99f0> 11528 +<99f1> 5027 +<99f4> 11987 +<99f5> 14591 +<99f6> 11991 +<99f7> 11988 +<99f8> 11990 +<99f9> 11989 +<99fa> 11986 +<99fb> 11992 +<99fc> 11995 +<99ff> 5306 +<9a01> 5305 +<9a02> 11985 +<9a03> 11996 +<9a04> 12354 +<9a05> 12357 +<9a06> 12359 +<9a07> 12358 +<9a09> 12352 +<9a0a> 12356 +<9a0b> 12351 +<9a0c> 14592 +<9a0d> 12353 +<9a0e> 5475 +<9a0f> 12350 +<9a10> 14594 +<9a11> 12355 +<9a14> 12682 +<9a15> 12671 +<9a16> 5625 +<9a19> 5626 +<9a1a> 12670 +<9a1b> 12675 +<9a1c> 12681 +<9a1d> 12673 +<9a1e> 12680 +<9a1f> 15212 +<9a20> 12677 +<9a21> 15388 +<9a22> 12676 +<9a23> 12679 +<9a24> 12674 +<9a25> 12672 +<9a26> 15858 +<9a27> 12678 +<9a29> 12935 +<9a2a> 12933 +<9a2b> 5723 +<9a2c> 12932 +<9a2d> 12938 +<9a2e> 12936 +<9a2f> 15390 +<9a30> 5724 +<9a31> 12931 +<9a32> 12929 +<9a34> 12930 +<9a35> 5726 +<9a36> 12934 +<9a37> 5725 +<9a38> 12937 +<9a39> 13115 +<9a3a> 13121 +<9a3b> 14593 +<9a3c> 18371 +<9a3d> 13116 +<9a3e> 5803 +<9a3f> 13122 +<9a40> 5802 +<9a41> 13120 +<9a42> 13119 +<9a43> 5801 +<9a44> 13118 +<9a45> 5800 +<9a46> 13117 +<9a48> 13277 +<9a49> 13279 +<9a4a> 13278 +<9a4c> 13275 +<9a4d> 5865 +<9a4e> 13272 +<9a4f> 13276 +<9a50> 13281 +<9a52> 13280 +<9a55> 5864 +<9a56> 13391 +<9a57> 5909 +<9a58> 14595 +<9a59> 13392 +<9a5c> 15384 +<9a5e> 13486 +<9a5f> 5943 +endcidchar + +100 begincidchar +<9a60> 13584 +<9a62> 5975 +<9a63> 15207 +<9a64> 13612 +<9a65> 5976 +<9a68> 13628 +<9a69> 13627 +<9a6a> 5991 +<9a6b> 13636 +<9a6c> 17797 +<9a8f> 17798 +<9aa8> 2550 +<9aab> 9740 +<9aad> 9739 +<9ab1> 10353 +<9ab2> 17202 +<9ab3> 10974 +<9ab4> 11535 +<9ab6> 17895 +<9ab7> 4730 +<9ab8> 5028 +<9ab9> 11533 +<9aba> 16244 +<9abb> 11536 +<9abc> 5029 +<9abd> 15767 +<9abe> 11997 +<9abf> 11534 +<9ac0> 12360 +<9ac1> 5476 +<9ac2> 12683 +<9ac6> 12941 +<9ac7> 12939 +<9aca> 12940 +<9acd> 13123 +<9acf> 5804 +<9ad0> 13282 +<9ad1> 5912 +<9ad2> 5866 +<9ad5> 13487 +<9ad6> 5967 +<9ad7> 16298 +<9ad8> 2551 +<9adc> 12361 +<9adf> 7731 +<9ae0> 14600 +<9ae1> 3960 +<9ae2> 14601 +<9ae3> 10354 +<9ae6> 4345 +<9ae7> 10355 +<9aeb> 10976 +<9aec> 10975 +<9aed> 5031 +<9af1> 10979 +<9af2> 10978 +<9af3> 10977 +<9af4> 14603 +<9af6> 11537 +<9af7> 11540 +<9af9> 11539 +<9afa> 11538 +<9afb> 5030 +<9afc> 12001 +<9afd> 11999 +<9afe> 11998 +<9aff> 16151 +<9b01> 12000 +<9b02> 16146 +<9b03> 5477 +<9b06> 5478 +<9b08> 12362 +<9b09> 16160 +<9b0a> 12685 +<9b0b> 12684 +<9b0c> 12687 +<9b0d> 5627 +<9b0e> 12686 +<9b0f> 18372 +<9b10> 12942 +<9b11> 12944 +<9b12> 12943 +<9b14> 14605 +<9b15> 13124 +<9b16> 13127 +<9b19> 13283 +<9b1a> 5867 +<9b22> 5944 +<9b23> 5968 +<9b24> 13615 +<9b25> 2552 +<9b27> 4733 +<9b28> 5032 +<9b29> 12365 +<9b2a> 16153 +<9b2b> 13284 +<9b2d> 14606 +<9b2e> 13585 +<9b2f> 7732 +<9b31> 5992 +endcidchar + +100 begincidchar +<9b32> 2553 +<9b33> 11541 +<9b34> 14609 +<9b35> 12366 +<9b37> 12688 +<9b39> 16128 +<9b3a> 13128 +<9b3b> 13285 +<9b3c> 2554 +<9b40> 14613 +<9b43> 10981 +<9b44> 4735 +<9b45> 4734 +<9b46> 10980 +<9b48> 12002 +<9b4a> 12367 +<9b4b> 12369 +<9b4c> 12368 +<9b4d> 5481 +<9b4e> 5480 +<9b4f> 5479 +<9b50> 14612 +<9b51> 5806 +<9b52> 13129 +<9b54> 5805 +<9b55> 13287 +<9b56> 13286 +<9b58> 5945 +<9b59> 13488 +<9b5a> 3041 +<9b5b> 9741 +<9b5f> 10360 +<9b64> 10990 +<9b66> 10985 +<9b67> 10982 +<9b68> 10989 +<9b69> 18373 +<9b6c> 10991 +<9b6f> 4737 +<9b70> 10988 +<9b71> 10984 +<9b74> 10983 +<9b75> 10987 +<9b76> 10986 +<9b77> 4736 +<9b7a> 11552 +<9b7b> 11547 +<9b7c> 11545 +<9b7d> 11554 +<9b7e> 11546 +<9b7f> 15419 +<9b80> 11542 +<9b81> 17393 +<9b82> 11548 +<9b83> 16921 +<9b85> 11543 +<9b86> 12011 +<9b87> 11544 +<9b88> 11555 +<9b8b> 16110 +<9b8d> 17955 +<9b8e> 14617 +<9b8f> 16301 +<9b90> 11551 +<9b91> 5033 +<9b92> 11550 +<9b93> 11549 +<9b95> 11553 +<9b97> 16241 +<9b9a> 12003 +<9b9b> 12006 +<9b9d> 16214 +<9b9e> 12005 +<9b9f> 15422 +<9ba0> 12013 +<9ba1> 12008 +<9ba2> 12012 +<9ba4> 12010 +<9ba5> 12009 +<9ba6> 12007 +<9ba8> 12004 +<9baa> 5309 +<9bab> 5308 +<9bad> 5310 +<9bae> 5307 +<9baf> 12014 +<9bb0> 16308 +<9bb5> 12375 +<9bb6> 12378 +<9bb8> 12376 +<9bb9> 12380 +<9bbd> 12381 +<9bbf> 12373 +<9bc0> 5486 +<9bc1> 12374 +<9bc3> 12372 +<9bc4> 12379 +<9bc6> 12371 +<9bc7> 12370 +<9bc8> 5485 +endcidchar + +100 begincidchar +<9bc9> 5483 +<9bca> 5482 +<9bcf> 15420 +<9bd3> 12377 +<9bd4> 12697 +<9bd5> 12703 +<9bd6> 5630 +<9bd7> 12698 +<9bd9> 12701 +<9bda> 12705 +<9bdb> 5631 +<9bdc> 12700 +<9bdd> 18374 +<9bde> 12692 +<9be0> 12691 +<9be1> 12704 +<9be2> 12695 +<9be4> 12693 +<9be5> 12702 +<9be6> 12694 +<9be7> 5629 +<9be8> 5628 +<9be9> 15297 +<9bec> 12699 +<9bed> 16087 +<9bf0> 12696 +<9bf1> 18375 +<9bf4> 18376 +<9bf7> 12947 +<9bf8> 12950 +<9bfd> 5484 +<9bff> 14619 +<9c02> 14618 +<9c05> 12948 +<9c06> 12954 +<9c07> 12952 +<9c08> 12946 +<9c09> 12957 +<9c0a> 16186 +<9c0b> 12945 +<9c0c> 14620 +<9c0d> 5728 +<9c0e> 12953 +<9c10> 15418 +<9c12> 12949 +<9c13> 5727 +<9c14> 12956 +<9c15> 16158 +<9c17> 12955 +<9c1b> 18715 +<9c1c> 13132 +<9c1d> 13131 +<9c1f> 17954 +<9c20> 18378 +<9c21> 13138 +<9c23> 13134 +<9c24> 13137 +<9c25> 5808 +<9c26> 17894 +<9c2b> 13130 +<9c2c> 13133 +<9c2d> 5807 +<9c2e> 16162 +<9c2f> 15751 +<9c31> 5869 +<9c32> 13298 +<9c33> 13293 +<9c34> 13297 +<9c35> 15417 +<9c36> 13300 +<9c37> 13296 +<9c39> 13292 +<9c3a> 15742 +<9c3b> 5871 +<9c3c> 13295 +<9c3d> 13299 +<9c3e> 5870 +<9c3f> 13290 +<9c40> 12951 +<9c41> 13294 +<9c44> 13291 +<9c45> 15985 +<9c46> 13288 +<9c48> 13289 +<9c49> 5868 +<9c4a> 13399 +<9c4b> 13401 +<9c4c> 13404 +<9c4d> 13400 +<9c4e> 13405 +<9c4f> 15414 +<9c50> 13398 +<9c52> 13396 +<9c53> 15415 +<9c54> 5913 +<9c55> 13402 +<9c56> 5915 +<9c57> 5914 +<9c58> 13397 +<9c59> 13403 +endcidchar + +100 begincidchar +<9c5d> 16063 +<9c5e> 13493 +<9c5f> 5946 +<9c60> 13494 +<9c62> 13492 +<9c63> 13489 +<9c66> 13491 +<9c67> 13490 +<9c68> 13556 +<9c6d> 13558 +<9c6e> 13557 +<9c71> 13588 +<9c72> 16033 +<9c73> 13587 +<9c74> 13586 +<9c75> 13589 +<9c79> 13633 +<9c7a> 13637 +<9c7b> 15416 +<9c7c> 17682 +<9ce5> 3042 +<9ce6> 9055 +<9ce7> 9744 +<9ce9> 3961 +<9cea> 9742 +<9ced> 9743 +<9cf3> 4350 +<9cf4> 4348 +<9cf5> 10363 +<9cf6> 4349 +<9cf7> 10996 +<9cf9> 10999 +<9cfa> 10993 +<9cfb> 11000 +<9cfc> 10992 +<9cfd> 10994 +<9cff> 10995 +<9d00> 10998 +<9d02> 16187 +<9d03> 4740 +<9d04> 11003 +<9d05> 11002 +<9d06> 4738 +<9d07> 10997 +<9d08> 11001 +<9d09> 4739 +<9d0c> 15430 +<9d10> 11565 +<9d12> 5038 +<9d14> 11560 +<9d15> 5034 +<9d16> 15484 +<9d17> 11557 +<9d18> 11563 +<9d19> 11566 +<9d1b> 5039 +<9d1d> 11562 +<9d1e> 11559 +<9d1f> 11567 +<9d20> 11558 +<9d21> 15425 +<9d22> 11564 +<9d23> 5035 +<9d25> 11556 +<9d26> 5036 +<9d28> 5037 +<9d29> 11561 +<9d2d> 12032 +<9d30> 12023 +<9d31> 12021 +<9d33> 12015 +<9d34> 16458 +<9d36> 12018 +<9d37> 12028 +<9d38> 12022 +<9d39> 14638 +<9d3b> 5311 +<9d3d> 12030 +<9d3e> 12027 +<9d3f> 5312 +<9d40> 12029 +<9d41> 12016 +<9d44> 16299 +<9d45> 12024 +<9d49> 18381 +<9d4a> 12385 +<9d4b> 12387 +<9d4c> 12390 +<9d4e> 17721 +<9d4f> 12384 +<9d50> 16074 +<9d51> 5487 +<9d52> 12392 +<9d53> 12383 +<9d54> 12393 +<9d56> 12389 +<9d57> 12391 +<9d58> 12395 +<9d59> 12388 +<9d5a> 12396 +endcidchar + +100 begincidchar +<9d5b> 12386 +<9d5c> 12382 +<9d5d> 5488 +<9d5e> 15982 +<9d5f> 12394 +<9d60> 5489 +<9d61> 5633 +<9d67> 12017 +<9d68> 12731 +<9d69> 12722 +<9d6a> 5635 +<9d6b> 12718 +<9d6c> 5636 +<9d6d> 15276 +<9d6e> 17211 +<9d6f> 12727 +<9d70> 12721 +<9d71> 12711 +<9d72> 5634 +<9d73> 12724 +<9d77> 12706 +<9d78> 12713 +<9d79> 12728 +<9d7b> 12725 +<9d7c> 16126 +<9d7d> 12717 +<9d7e> 14629 +<9d7f> 12729 +<9d80> 12712 +<9d81> 12707 +<9d82> 12726 +<9d83> 14630 +<9d84> 12709 +<9d85> 12723 +<9d86> 12714 +<9d87> 12730 +<9d88> 12710 +<9d89> 5632 +<9d8a> 12708 +<9d90> 12964 +<9d92> 12962 +<9d93> 17395 +<9d94> 12967 +<9d96> 12979 +<9d97> 12970 +<9d98> 12963 +<9d99> 12959 +<9d9a> 12972 +<9d9b> 12965 +<9d9c> 12968 +<9d9d> 12961 +<9d9e> 12975 +<9d9f> 12958 +<9da0> 12966 +<9da1> 12971 +<9da2> 12973 +<9da3> 12976 +<9da4> 12960 +<9da5> 15435 +<9da8> 12974 +<9da9> 12978 +<9daa> 12969 +<9dab> 16176 +<9dac> 13154 +<9dad> 13157 +<9daf> 5809 +<9db1> 13156 +<9db2> 13161 +<9db3> 13159 +<9db4> 5810 +<9db5> 13150 +<9db6> 13140 +<9db7> 13139 +<9db8> 5812 +<9dbb> 13149 +<9dbc> 13141 +<9dbd> 18384 +<9dbe> 13146 +<9dbf> 12977 +<9dc0> 17394 +<9dc1> 13142 +<9dc2> 5811 +<9dc3> 13148 +<9dc4> 14633 +<9dc5> 13147 +<9dc7> 13143 +<9dc8> 13155 +<9dc9> 17785 +<9dca> 13144 +<9dcb> 13305 +<9dcc> 13158 +<9dcd> 13160 +<9dce> 13151 +<9dcf> 13145 +<9dd0> 13306 +<9dd1> 13308 +<9dd2> 13302 +<9dd3> 5872 +<9dd4> 14622 +<9dd5> 13315 +endcidchar + +100 begincidchar +<9dd6> 13313 +<9dd7> 5873 +<9dd8> 13312 +<9dd9> 13311 +<9dda> 13304 +<9ddb> 13301 +<9ddc> 13307 +<9ddd> 13316 +<9dde> 13303 +<9ddf> 13309 +<9de1> 13414 +<9de2> 13419 +<9de3> 13409 +<9de4> 13412 +<9de5> 5916 +<9de6> 13416 +<9de8> 13423 +<9de9> 13310 +<9deb> 13410 +<9dec> 13420 +<9ded> 13424 +<9dee> 13415 +<9def> 13408 +<9df0> 13418 +<9df2> 13417 +<9df3> 13422 +<9df4> 13421 +<9df5> 13314 +<9df6> 13413 +<9df7> 13407 +<9df8> 13411 +<9dfb> 13406 +<9dfc> 18385 +<9dfd> 13505 +<9dfe> 13496 +<9dff> 13504 +<9e02> 13495 +<9e03> 13498 +<9e04> 13506 +<9e05> 13500 +<9e06> 13499 +<9e07> 13497 +<9e09> 13503 +<9e0a> 17790 +<9e0b> 13559 +<9e0c> 17786 +<9e0d> 13560 +<9e0e> 14632 +<9e0f> 13562 +<9e10> 13561 +<9e11> 13564 +<9e12> 13563 +<9e13> 13591 +<9e14> 13590 +<9e15> 13616 +<9e17> 13617 +<9e18> 15428 +<9e19> 13629 +<9e1a> 5989 +<9e1b> 5993 +<9e1c> 16260 +<9e1d> 13638 +<9e1e> 5994 +<9e1f> 17683 +<9e75> 3043 +<9e79> 5729 +<9e7a> 13162 +<9e7b> 17400 +<9e7f> 3044 +<9e80> 9745 +<9e81> 16143 +<9e82> 3962 +<9e83> 11004 +<9e84> 16246 +<9e85> 16114 +<9e88> 11568 +<9e89> 12034 +<9e8a> 12033 +<9e8b> 5313 +<9e8c> 12398 +<9e8d> 12035 +<9e8e> 12397 +<9e90> 14641 +<9e91> 12733 +<9e92> 5637 +<9e93> 5639 +<9e94> 12732 +<9e95> 14642 +<9e96> 16316 +<9e97> 5638 +<9e98> 16167 +<9e99> 12982 +<9e9a> 12984 +<9e9b> 12983 +<9e9c> 13163 +<9e9d> 5813 +<9e9e> 14643 +<9e9f> 5917 +<9ea0> 13507 +<9ea1> 13565 +endcidchar + +100 begincidchar +<9ea2> 14644 +<9ea4> 13642 +<9ea5> 3045 +<9ea6> 18756 +<9ea7> 10364 +<9ea8> 16245 +<9ea9> 4741 +<9eaa> 14646 +<9eab> 16018 +<9eac> 17396 +<9ead> 11572 +<9eae> 11571 +<9eaf> 14647 +<9eb0> 12036 +<9eb1> 18388 +<9eb4> 5640 +<9eb5> 5730 +<9eb6> 13317 +<9eb7> 13634 +<9ebb> 3046 +<9ebc> 4351 +<9ebd> 18389 +<9ebe> 4742 +<9ebf> 15736 +<9ec0> 12734 +<9ec1> 14649 +<9ec2> 13425 +<9ec3> 3515 +<9ec4> 17684 +<9ec6> 18390 +<9ec7> 17783 +<9ec8> 12037 +<9ecc> 5969 +<9ecd> 3516 +<9ece> 4743 +<9ecf> 5314 +<9ed0> 13426 +<9ed1> 3517 +<9ed3> 11005 +<9ed4> 5041 +<9ed8> 5040 +<9eda> 12038 +<9edb> 5318 +<9ede> 5315 +<9edf> 12399 +<9ee0> 5490 +<9ee2> 18392 +<9ee4> 12986 +<9ee5> 12985 +<9ee6> 12988 +<9ee7> 12987 +<9ee8> 5731 +<9eeb> 13164 +<9eed> 13166 +<9eee> 13165 +<9eef> 5814 +<9ef0> 13318 +<9ef1> 18393 +<9ef4> 5918 +<9ef5> 13566 +<9ef6> 13592 +<9ef7> 5986 +<9ef8> 18394 +<9ef9> 9056 +<9efa> 11575 +<9efb> 12039 +<9efc> 12735 +<9efd> 9746 +<9efe> 18382 +<9eff> 12040 +<9f00> 12401 +<9f01> 12400 +<9f02> 14656 +<9f06> 13429 +<9f07> 5951 +<9f08> 14657 +<9f09> 13567 +<9f0a> 13593 +<9f0e> 3963 +<9f12> 11576 +<9f13> 3964 +<9f15> 5491 +<9f16> 12402 +<9f17> 14661 +<9f18> 13168 +<9f19> 5815 +<9f1a> 13169 +<9f1b> 13167 +<9f1c> 13430 +<9f1e> 13508 +<9f20> 3965 +<9f22> 12043 +<9f23> 12042 +<9f24> 12041 +<9f25> 12403 +<9f26> 16272 +<9f27> 17952 +<9f28> 12407 +<9f29> 12406 +<9f2a> 12405 +endcidchar + +100 begincidchar +<9f2b> 12404 +<9f2c> 5492 +<9f2d> 12736 +<9f2e> 12990 +<9f2f> 5732 +<9f30> 12989 +<9f31> 13170 +<9f32> 13321 +<9f33> 13320 +<9f34> 5874 +<9f35> 13319 +<9f36> 13433 +<9f37> 13432 +<9f38> 13431 +<9f39> 14663 +<9f3b> 4352 +<9f3d> 11577 +<9f3e> 5319 +<9f42> 13322 +<9f43> 13434 +<9f44> 18395 +<9f45> 14666 +<9f46> 13509 +<9f47> 13568 +<9f48> 13618 +<9f49> 13644 +<9f4a> 4353 +<9f4b> 5320 +<9f4c> 12408 +<9f4d> 12739 +<9f4e> 13171 +<9f4f> 13435 +<9f50> 18755 +<9f52> 4745 +<9f53> 16256 +<9f54> 12044 +<9f55> 12409 +<9f59> 12995 +<9f5a> 16163 +<9f5b> 12991 +<9f5c> 5816 +<9f5d> 12994 +<9f5e> 12993 +<9f5f> 5733 +<9f60> 12992 +<9f61> 5735 +<9f62> 18105 +<9f63> 5734 +<9f64> 13173 +<9f65> 13172 +<9f69> 14672 +<9f6a> 5876 +<9f6b> 13323 +<9f6c> 5875 +<9f70> 13437 +<9f71> 13436 +<9f72> 5953 +<9f77> 5952 +<9f78> 13569 +<9f79> 13572 +<9f7a> 13571 +<9f7b> 13570 +<9f7e> 13643 +<9f7f> 18048 +<9f8d> 5042 +<9f8e> 14674 +<9f90> 5500 +<9f91> 12996 +<9f92> 13174 +<9f94> 5877 +<9f95> 13324 +<9f96> 19104 +<9f97> 19096 +<9f98> 13645 +<9f99> 17799 +<9f9c> 5043 +<9f9f> 17990 +<9fa0> 12045 +<9fa2> 13325 +<9fa4> 13594 +<9fa5> 16240 +<9fa6> 18852 +<9fa7> 18893 +<9fa8> 18900 +<9fa9> 18932 +<9faa> 18934 +<9fab> 18936 +<9fac> 18941 +<9faf> 18963 +<9fb0> 14005 +<9fb1> 14007 +<9fb2> 19039 +<9fb3> 19064 +<9fc7> 19126 +<9fc8> 19142 +<9fc9> 19146 +<9fca> 19150 +<9fcb> 19155 + 15861 + 14929 +endcidchar + +100 begincidchar + 14930 + 15193 + 14218 + 17636 + 17688 + 14002 + 18396 + 17623 + 17620 + 14000 + 17617 + 17616 + 18749 + 17614 + 17628 + 16777 + 19047 + 17235 + 14776 + 16714 + 15153 + 16228 + 16656 + 14787 + 18139 + 19051 + 15161 + 14521 + 14785 + 15146 + 16735 + 16415 + 18397 + 15458 + 14783 + 16447 + 14779 + 18068 + 17169 + 14847 + 15776 + 16430 + 16427 + 18107 + 16429 + 18398 + 15538 + 18776 + 16874 + 14777 + 15613 + 18719 + 14879 + 14780 + 16432 + 14770 + 16441 + 16101 + 14816 + 14815 + 14814 + 18400 + 17241 + 15548 + 16395 + 16449 + 16660 + 16454 + 18779 + 15788 + 17803 + 18402 + 16397 + 14812 + 15056 + 15790 + 18403 + 18142 + 15561 + 14571 + 16761 + 18404 + 14819 + 17232 + 15805 + 15200 + 14822 + 18141 + 15191 + 16889 + 16491 + 18695 + 17781 + 15855 + 14441 + 19022 + 19100 + 15590 + 18408 + 18409 +endcidchar + +100 begincidchar + 18081 + 16530 + 19057 + 14760 + 17875 + 18410 + 14849 + 18412 + 16495 + 15562 + 18414 + 16445 + 17848 + 15154 + 14828 + 17291 + 17038 + 18415 + 16012 + 17163 + 17228 + 18416 + 18417 + 16535 + 15804 + 18418 + 18419 + 16013 + 18629 + 18420 + 15563 + 18228 + 16698 + 16216 + 17185 + 17910 + 18421 + 18422 + 15559 + 17164 + 16135 + 14481 + 16920 + 17196 + 17871 + 17876 + 18658 + 15144 + 16551 + 16621 + 18423 + 16136 + 16543 + 17183 + 17855 + 17254 + 16037 + 18424 + 18425 + 18426 + 17264 + 18682 + 14761 + 18427 + 17905 + 17914 + 17929 + 14275 + 14832 + 17873 + 18647 + 18431 + 16824 + 16015 + 17906 + 17915 + 17920 + 17290 + 17933 + 17866 + 17189 + 17887 + 16000 + 16017 + 17868 + 17874 + 18676 + 16104 + 18428 + 18071 + 16549 + 15878 + 16058 + 17904 + 17907 + 15506 + 15358 + 18430 + 17888 + 17870 +endcidchar + +100 begincidchar + 17859 + 16338 + 17243 + 17191 + 17867 + 18429 + 17882 + 17184 + 17932 + 17936 + 18432 + 14759 + 18657 + 18679 + 18681 + 18683 + 14424 + 18434 + 18433 + 17853 + 16021 + 18435 + 17852 + 17916 + 17328 + 18436 + 18437 + 17251 + 16566 + 18439 + 17877 + 18663 + 17296 + 17268 + 17913 + 17861 + 17330 + 14830 + 17847 + 18440 + 18441 + 17878 + 17717 + 17917 + 17872 + 17937 + 18684 + 18673 + 16603 + 16583 + 14504 + 14725 + 18707 + 15634 + 18443 + 17332 + 15399 + 14882 + 15698 + 16417 + 18445 + 16717 + 18444 + 18781 + 16787 + 15638 + 15596 + 15900 + 14726 + 15922 + 14724 + 15509 + 16592 + 15539 + 18943 + 15629 + 16594 + 17919 + 14249 + 16956 + 14727 + 15402 + 14260 + 18446 + 14337 + 16511 + 15896 + 16512 + 18447 + 16615 + 14217 + 16618 + 16647 + 18405 + 14721 + 17128 + 15568 + 14580 + 16631 + 14402 +endcidchar + +100 begincidchar + 15140 + 17043 + 16503 + 14860 + 14714 + 14974 + 14903 + 16548 + 14862 + 16497 + 15659 + 14915 + 15673 + 15470 + 18711 + 16193 + 15148 + 14861 + 16779 + 16703 + 14266 + 14717 + 14913 + 15175 + 15883 + 16627 + 15666 + 14276 + 15493 + 18448 + 18449 + 15536 + 15296 + 15663 + 16624 + 18134 + 14705 + 18638 + 18650 + 14712 + 14197 + 15566 + 16626 + 16788 + 15886 + 16630 + 16812 + 14979 + 18451 + 14715 + 17941 + 18728 + 15235 + 15275 + 15570 + 14251 + 14870 + 15587 + 14616 + 15100 + 18767 + 18651 + 15578 + 14808 + 14710 + 17076 + 15527 + 14901 + 15237 + 14343 + 14707 + 15577 + 14718 + 15505 + 16561 + 15239 + 14965 + 14685 + 15669 + 14416 + 16645 + 15016 + 14526 + 15832 + 14747 + 14912 + 14636 + 18742 + 16897 + 18452 + 14894 + 18872 + 16451 + 17078 + 14893 + 16407 + 14869 + 18453 + 16658 + 18454 +endcidchar + +100 begincidchar + 17082 + 18998 + 16665 + 17633 + 18380 + 18455 + 18456 + 18677 + 16669 + 18457 + 18732 + 19089 + 19010 + 15823 + 18905 + 14907 + 17802 + 16142 + 14991 + 16677 + 17117 + 19043 + 16678 + 18773 + 14471 + 16682 + 15792 + 18458 + 18459 + 16139 + 18460 + 16731 + 18144 + 15938 + 17621 + 18462 + 16688 + 18889 + 15782 + 17275 + 16446 + 16879 + 18104 + 16689 + 15874 + 17854 + 19058 + 15799 + 17287 + 18465 + 15292 + 14451 + 15635 + 16720 + 18466 + 18467 + 18696 + 16721 + 16905 + 16923 + 18632 + 19141 + 19143 + 19144 + 19145 + 16419 + 16425 + 16294 + 16448 + 16644 + 15871 + 14924 + 14925 + 14931 + 17144 + 14921 + 16733 + 18100 + 17880 + 16553 + 18667 + 15157 + 14245 + 18909 + 14234 + 15837 + 15404 + 18468 + 17257 + 15411 + 19029 + 16743 + 17912 + 16893 + 17862 + 16765 + 14920 + 18469 + 17057 + 16772 +endcidchar + +100 begincidchar + 16834 + 15881 + 17863 + 18470 + 18471 + 15412 + 16771 + 18472 + 17250 + 17265 + 18473 + 17804 + 18474 + 18475 + 14943 + 18476 + 16032 + 14941 + 17219 + 17293 + 15511 + 14350 + 17176 + 18477 + 17294 + 17886 + 16016 + 18478 + 14935 + 14954 + 17192 + 17278 + 18479 + 17201 + 17167 + 17857 + 14936 + 18481 + 18482 + 17210 + 17851 + 14952 + 17238 + 18484 + 18680 + 16533 + 17922 + 18483 + 17896 + 16781 + 16790 + 18485 + 14946 + 17286 + 16034 + 18084 + 18486 + 18487 + 15633 + 18488 + 17024 + 16950 + 18489 + 14611 + 18772 + 14959 + 14546 + 14547 + 18706 + 14978 + 17957 + 14278 + 14983 + 14969 + 16831 + 15471 + 19099 + 16922 + 14982 + 15325 + 15923 + 16829 + 15105 + 16450 + 14980 + 19028 + 19101 + 14448 + 18869 + 14968 + 16569 + 14962 + 17124 + 14960 + 14993 + 14964 + 14994 + 15707 + 14527 + 18490 +endcidchar + +100 begincidchar + 16443 + 15819 + 18491 + 16852 + 17883 + 18730 + 18911 + 15644 + 15002 + 16816 + 15209 + 14944 + 16855 + 14908 + 15639 + 15864 + 14265 + 19037 + 14279 + 18492 + 14804 + 14708 + 15451 + 19148 + 16861 + 14287 + 15194 + 18493 + 16423 + 18982 + 18494 + 16865 + 15452 + 16878 + 15059 + 18748 + 19131 + 19090 + 14729 + 15647 + 18659 + 15641 + 14739 + 16881 + 18495 + 18703 + 16471 + 15898 + 14750 + 14220 + 15110 + 15001 + 14999 + 16840 + 15010 + 15643 + 15448 + 14998 + 17269 + 18497 + 16895 + 14895 + 18138 + 19033 + 16900 + 18914 + 16455 + 15024 + 14478 + 18085 + 15963 + 18738 + 16409 + 16917 + 18674 + 18720 + 18697 + 15794 + 15979 + 15582 + 14258 + 15242 + 18701 + 15514 + 15405 + 14361 + 15147 + 14446 + 16911 + 16913 + 14237 + 14267 + 18999 + 18498 + 18705 + 15609 + 14505 + 16944 + 16954 + 14734 +endcidchar + +100 begincidchar + 14805 + 18648 + 14809 + 14794 + 14283 + 18499 + 14806 + 14123 + 18704 + 15058 + 15683 + 15136 + 14736 + 16902 + 15067 + 18054 + 15809 + 19000 + 15036 + 16490 + 15935 + 16946 + 18091 + 16973 + 16764 + 15023 + 16398 + 16532 + 16492 + 15608 + 15333 + 15835 + 16972 + 16381 + 16971 + 16562 + 15786 + 15039 + 16957 + 14192 + 16934 + 14752 + 18771 + 14841 + 16969 + 14845 + 14751 + 19042 + 15427 + 14753 + 18500 + 16974 + 16978 + 16967 + 18855 + 16970 + 14572 + 17071 + 19097 + 17942 + 15908 + 18669 + 16914 + 16585 + 15488 + 15480 + 16844 + 17042 + 15670 + 15354 + 18102 + 15697 + 15688 + 15047 + 16992 + 16608 + 15271 + 15681 + 14871 + 15678 + 18981 + 17001 + 14984 + 15686 + 18501 + 15510 + 18502 + 15046 + 18503 + 14681 + 15631 + 16595 + 14648 + 16998 + 14827 + 18504 + 16837 + 15695 + 15512 + 15701 +endcidchar + +100 begincidchar + 15323 + 16119 + 14703 + 18505 + 16564 + 14768 + 17003 + 15685 + 14702 + 15011 + 15499 + 14696 + 16697 + 15693 + 17194 + 18506 + 18917 + 15844 + 14175 + 17240 + 16079 + 15005 + 14940 + 18508 + 15109 + 14937 + 18664 + 15053 + 18509 + 15052 + 16066 + 17355 + 18510 + 17030 + 14173 + 17653 + 15112 + 16906 + 18159 + 15095 + 18511 + 15321 + 16916 + 16687 + 16915 + 15542 + 15061 + 18721 + 15299 + 16413 + 15846 + 18716 + 15816 + 16808 + 15472 + 16404 + 15558 + 18119 + 18709 + 17019 + 14677 + 15544 + 18952 + 16933 + 16749 + 15930 + 14961 + 14425 + 15520 + 15145 + 17048 + 15089 + 16750 + 14732 + 16440 + 14264 + 16637 + 15088 + 14829 + 15575 + 17047 + 15401 + 15519 + 15773 + 14678 + 15094 + 15876 + 17940 + 15453 + 16783 + 14951 + 15540 + 18116 + 15331 + 15834 + 15210 + 14680 + 15174 + 17049 + 14793 +endcidchar + +100 begincidchar + 18782 + 18920 + 18512 + 16838 + 17005 + 16802 + 17044 + 14723 + 17053 + 17004 + 16801 + 14587 + 15885 + 15534 + 15322 + 15787 + 15060 + 15092 + 18129 + 15569 + 14682 + 18133 + 14253 + 15537 + 15369 + 15632 + 18725 + 15332 + 17072 + 14398 + 17070 + 18634 + 15535 + 14254 + 15119 + 15055 + 15934 + 16464 + 15810 + 16424 + 15361 + 15529 + 15116 + 16285 + 14840 + 18513 + 15117 + 18605 + 14525 + 15065 + 18714 + 14534 + 19083 + 18692 + 16597 + 15286 + 18649 + 15645 + 18093 + 15079 + 15080 + 17092 + 17171 + 17181 + 17908 + 17282 + 17921 + 17360 + 17200 + 18751 + 17364 + 17090 + 18515 + 15491 + 15827 + 18699 + 18080 + 18678 + 18516 + 17227 + 17115 + 17165 + 18660 + 17116 + 17934 + 18859 + 17865 + 16826 + 15103 + 17122 + 15102 + 16730 + 18518 + 17207 + 17938 + 14153 + 18653 + 16832 + 18519 + 14976 +endcidchar + +100 begincidchar + 14711 + 14392 + 18520 + 14555 + 18521 + 19075 + 18741 + 18201 + 18522 + 14975 + 14735 + 15465 + 18523 + 18524 + 14393 + 18525 + 15122 + 14971 + 14973 + 14476 + 15554 + 14480 + 17137 + 17016 + 18643 + 14774 + 15253 + 18925 + 15130 + 15710 + 14573 + 16792 + 14596 + 17947 + 16520 + 18526 + 15342 + 14127 + 15839 + 17149 + 18527 + 14996 + 15386 + 19093 + 14132 + 18528 + 14868 + 18644 + 14136 + 16659 + 18997 + 18694 + 15159 + 18529 + 15158 + 15201 + 17956 + 18530 + 15170 + 14158 + 15164 + 14303 + 18480 + 14149 + 18531 + 16211 + 18652 + 18074 + 14320 + 18924 + 14322 + 14170 + 14154 + 14164 + 18861 + 15202 + 19139 + 19124 + 15204 + 17274 + 18646 + 15188 + 14876 + 15172 + 15171 + 18739 + 18655 + 16344 + 14719 + 15062 + 15780 + 19091 + 14193 + 16071 + 15449 + 18784 + 17242 + 15518 + 17850 + 18534 +endcidchar + +100 begincidchar + 14201 + 18729 + 14202 + 15517 + 15185 + 18746 + 15120 + 18535 + 16979 + 15964 + 15184 + 17658 + 18757 + 14212 + 16133 + 17660 + 18754 + 14215 + 15348 + 17103 + 15197 + 18536 + 14522 + 15851 + 15196 + 18537 + 15860 + 18538 + 18539 + 14223 + 14142 + 14247 + 18540 + 17899 + 15213 + 15211 + 18541 + 17663 + 14236 + 18641 + 14757 + 18542 + 17223 + 14238 + 18544 + 17224 + 15515 + 18546 + 18702 + 15223 + 16362 + 17860 + 18750 + 18548 + 18547 + 16719 + 16044 + 18666 + 18549 + 17108 + 17107 + 18550 + 18551 + 17664 + 18101 + 15921 + 17180 + 18552 + 18553 + 17039 + 18554 + 15225 + 15228 + 14257 + 14285 + 18082 + 16485 + 18958 + 18995 + 16670 + 17889 + 16907 + 15812 + 16542 + 18555 + 15190 + 15439 + 14311 + 14286 + 18556 + 16416 + 15625 + 15830 + 14754 + 15490 + 19048 + 19069 + 16590 + 14159 + 15661 +endcidchar + +100 begincidchar + 16622 + 15654 + 18557 + 15648 + 14520 + 15849 + 15508 + 14230 + 15216 + 18713 + 18718 + 14986 + 16926 + 15652 + 14579 + 15691 + 16421 + 16623 + 15653 + 18956 + 16853 + 16927 + 14660 + 14284 + 15442 + 14293 + 16628 + 15230 + 18558 + 18744 + 15075 + 16928 + 15444 + 15447 + 16291 + 15916 + 15437 + 14301 + 14313 + 14184 + 16633 + 16723 + 16935 + 14312 + 15443 + 19137 + 18984 + 18086 + 18671 + 18733 + 16758 + 14125 + 14297 + 14512 + 14186 + 14453 + 14741 + 14927 + 16937 + 17113 + 16643 + 18959 + 15655 + 15438 + 17789 + 18559 + 14737 + 15662 + 14335 + 18745 + 18710 + 15906 + 14338 + 18985 + 16732 + 18127 + 14428 + 18954 + 17155 + 15215 + 18712 + 14733 + 14569 + 18560 + 15232 + 18970 + 18561 + 18562 + 18563 + 16092 + 18672 + 18564 + 18983 + 14345 + 19072 + 15244 + 18566 + 15579 + 16356 + 17285 +endcidchar + +100 begincidchar + 16069 + 14360 + 14362 + 14917 + 15781 + 14008 + 17141 + 15814 + 17292 + 18642 + 18740 + 15779 + 17930 + 14369 + 17723 + 15684 + 15129 + 17303 + 15256 + 15255 + 18568 + 18569 + 14990 + 15957 + 17668 + 17849 + 14378 + 18297 + 14562 + 17225 + 18571 + 18572 + 18573 + 16653 + 15961 + 16751 + 14384 + 15771 + 16422 + 14379 + 14456 + 15709 + 15379 + 18574 + 15711 + 14388 + 17151 + 14386 + 15186 + 19134 + 19008 + 15640 + 15825 + 18991 + 18973 + 18975 + 18668 + 14410 + 14406 + 18575 + 18670 + 17845 + 14407 + 14412 + 14413 + 15279 + 15694 + 15604 + 16106 + 16061 + 14423 + 18576 + 15030 + 18577 + 15960 + 18578 + 18579 + 18580 + 17902 + 17174 + 15899 + 17198 + 18581 + 18582 + 18583 + 17179 + 15920 + 17384 + 18584 + 14427 + 17918 + 15599 + 18585 + 17193 + 17943 + 17272 + 17931 + 16005 + 18586 + 15914 +endcidchar + +100 begincidchar + 18587 + 14221 + 14436 + 14199 + 16263 + 18588 + 14437 + 18589 + 17801 + 15882 + 16706 + 18097 + 14455 + 14445 + 14458 + 15796 + 16830 + 14607 + 14459 + 14332 + 14333 + 18590 + 16508 + 19071 + 18096 + 14503 + 14463 + 18877 + 14461 + 17033 + 17031 + 19098 + 14470 + 15822 + 15928 + 18592 + 17126 + 17127 + 14695 + 19059 + 14687 + 15345 + 14909 + 16414 + 15907 + 18593 + 16552 + 18044 + 15031 + 14444 + 15689 + 18892 + 16405 + 15260 + 15521 + 14886 + 15502 + 18747 + 15551 + 14376 + 16736 + 18863 + 16726 + 14691 + 15372 + 14859 + 14906 + 14241 + 15494 + 16869 + 15306 + 18150 + 18726 + 15586 + 15556 + 15642 + 15785 + 16515 + 14818 + 15574 + 14477 + 15028 + 15087 + 15550 + 16487 + 16858 + 14516 + 14484 + 14487 + 15099 + 14488 + 18885 + 15308 + 14479 + 14763 + 16942 + 14972 + 18783 + 18636 + 18735 +endcidchar + +100 begincidchar + 15347 + 18596 + 17231 + 15801 + 15368 + 15526 + 15370 + 15385 + 16581 + 18639 + 17073 + 18640 + 15259 + 16767 + 19005 + 18731 + 15360 + 18597 + 14878 + 15258 + 14684 + 15553 + 17007 + 14129 + 15027 + 14485 + 14491 + 15257 + 14493 + 17075 + 18598 + 15624 + 15310 + 15066 + 15346 + 14655 + 15925 + 14492 + 15311 + 17300 + 17289 + 17298 + 15318 + 17299 + 18942 + 17675 + 14688 + 16332 + 15329 + 15328 + 16202 + 17084 + 17059 + 14784 + 17081 + 15327 + 18599 + 19062 + 14926 + 14668 + 15341 + 14523 + 15338 + 14598 + 15854 + 15601 + 14524 + 18600 + 16845 + 17158 + 18601 + 18602 + 14938 + 18147 + 18604 + 16964 + 16886 + 15903 + 14539 + 14542 + 14561 + 18151 + 14558 + 14966 + 15268 + 16132 + 14133 + 15363 + 17172 + 18607 + 18700 + 18608 + 18609 + 15365 + 15949 + 17204 + 17279 + 18610 + 17208 + 17681 +endcidchar + +100 begincidchar + 14589 + 15893 + 18611 + 14945 + 15391 + 19055 + 18743 + 14590 + 15434 + 19019 + 18884 + 15393 + 18612 + 16768 + 18613 + 14740 + 18614 + 15797 + 18615 + 17197 + 14602 + 18616 + 14599 + 18851 + 15892 + 14614 + 18617 + 16067 + 15973 + 18618 + 17788 + 16122 + 15421 + 14621 + 16085 + 19013 + 17893 + 18620 + 18621 + 18698 + 14623 + 16090 + 18095 + 14229 + 14639 + 14626 + 15432 + 15433 + 14348 + 15424 + 18870 + 14627 + 17791 + 14631 + 16607 + 14624 + 14634 + 14625 + 15431 + 19065 + 14628 + 15423 + 14635 + 14637 + 18624 + 14440 + 16276 + 14640 + 18145 + 18880 + 17939 + 15912 + 18626 + 18987 + 17716 + 16113 + 18111 + 15084 + 18627 + 17263 + 17297 + 16254 + 17288 + 18675 + 19152 + 15843 + 15704 + 17316 + 16486 + 16510 + 18411 + 18727 + 17634 + 16715 + 16757 + 15842 + 16841 + 16943 + 16392 + 17056 +endcidchar + +100 begincidchar + 14263 + 14270 + 14339 + 15241 + 14408 + 14421 + 14662 + 2106 + 2557 + 781 + 363 + 2144 + 16002 + 18760 + 18761 + 18762 + 3107 + 18763 + 18764 + 6116 + 16014 + 18765 + 8495 + 18766 + 18767 + 16385 + 18768 + 18769 + 4447 + 18772 + 3193 + 18773 + 18774 + 1219 + 18775 + 16895 + 18776 + 6333 + 3261 + 3237 + 18777 + 3278 + 18778 + 15728 + 18779 + 17055 + 3716 + 18780 + 288 + 7080 + 18783 + 18784 + 18072 + 4181 + 14164 + 11752 + 18075 + 18076 + 289 + 18077 + 4203 + 4902 + 18078 + 18079 + 1643 + 4910 + 18080 + 18081 + 18082 + 3381 + 14296 + 18083 + 18084 + 18085 + 14309 + 10178 + 8877 + 18086 + 18087 + 18088 + 14368 + 18089 + 18090 + 4940 + 16377 + 18091 + 18092 + 18093 + 14420 + 2510 + 18094 + 3015 + 14466 + 18098 + 14057 + 18099 + 18100 + 5009 + 5796 + 18101 +endcidchar + +100 begincidchar + 18102 + 18103 + 14633 + 18104 + 12402 + 18105 + 14728 + 18106 + 18107 + 284 + 283 + 16300 + 10620 + 18108 + 18109 + 18110 + 18111 + 18112 + 18113 + 18114 + 18115 + 18116 + 7430 + 18117 + 10657 + 18118 + 18119 + 18120 + 18121 + 18122 + 6171 + 15919 + 18123 + 18124 + 18125 + 15478 + 11044 + 18128 + 15705 + 15706 + 15707 + 15708 + 17354 + 18154 + 15709 + 18155 + 17356 + 15710 + 18156 + 17402 + 18157 + 15713 + 18161 + 15714 + 18162 + 17357 + 18178 + 17361 + 17364 + 15717 + 15718 + 15719 + 15720 + 18195 + 15721 + 18196 + 15722 + 18203 + 17367 + 17404 + 15723 + 18206 + 15724 + 18207 + 17368 + 15725 + 17369 + 17370 + 17372 + 15726 + 15727 + 18241 + 15728 + 15729 + 15730 + 18256 + 17349 + 18257 + 17350 + 15731 + 17374 + 15732 + 15733 + 17376 + 17378 + 17379 + 17381 + 17375 + 15734 + 18308 +endcidchar + +100 begincidchar + 17323 + 18309 + 17383 + 18310 + 17385 + 17405 + 15735 + 15736 + 18341 + 15737 + 15738 + 17327 + 18359 + 15739 + 17389 + 18364 + 15740 + 17390 + 18365 + 17407 + 15741 + 18373 + 17393 + 15742 + 17395 + 18384 + 17394 + 17400 + 17396 + 15743 + 15744 + 18399 + 15745 + 18400 + 15746 + 18401 + 17335 + 15747 + 15748 + 18419 + 15749 + 15753 + 18432 + 15754 + 15755 + 17328 + 17330 + 15756 + 18445 + 15757 + 15758 + 15759 + 15760 + 15762 + 15763 + 18474 + 15764 + 18475 + 15765 + 18476 + 18477 + 12112 + 15773 + 5925 + 13037 + 15776 + 18496 + 18497 + 18500 + 15785 + 15786 + 15795 + 18509 + 10969 + 15803 + 18513 + 15804 + 18514 + 17360 + 18515 + 18516 + 15807 + 18517 + 15808 + 15812 + 7188 + 15813 + 18522 + 15814 + 18523 + 15815 + 15816 + 18527 + 16890 + 18528 + 15823 + 4841 + 18534 + 18535 + 11438 +endcidchar + +100 begincidchar + 18538 + 18539 + 15835 + 18540 + 15836 + 6756 + 18543 + 15844 + 18544 + 18545 + 15850 + 15851 + 18548 + 5124 + 18549 + 18550 + 8996 + 18551 + 15857 + 13418 + 18552 + 15858 + 18553 + 8849 + 18556 + 15866 + 18557 + 18558 + 15872 + 18563 + 15875 + 18564 + 18567 + 6023 + 2399 + 18571 + 15903 + 7833 + 18576 + 18577 + 18578 + 18579 + 15938 + 18583 + 17384 + 15939 + 15940 + 18593 + 15944 + 18594 + 15945 + 15946 + 18598 + 9665 + 3340 + 17353 + 15948 + 18607 + 15949 + 17397 + 15950 + 15951 + 18635 + 15956 + 18636 + 15960 + 15961 + 18641 + 15962 + 18642 + 15963 + 18647 + 15968 + 1510 + 18652 + 15972 + 18655 + 18660 + 18661 + 18662 + 18663 + 16054 + 18666 + 16055 + 16056 + 18673 + 16057 + 18677 + 16060 + 18678 + 16061 + 18679 + 18680 + 1832 + 16069 + 18683 + 18684 + 16075 + 18687 + 18688 +endcidchar + +100 begincidchar + 16078 + 16079 + 18696 + 16089 + 18701 + 16092 + 9398 + 18706 + 18710 + 16124 + 6150 + 18711 + 18712 + 13585 + 14661 + 18717 + 18718 + 18719 + 18720 + 16212 + 18721 + 3970 + 18722 + 18723 + 14910 + 18724 + 18725 + 18726 + 18727 + 18728 + 14353 + 18729 + 1522 + 18730 + 18731 + 18732 + 18733 + 18734 + 15086 + 9341 + 18735 + 15049 + 17332 + 17336 + 17718 + 17723 + 17347 + 17306 + 17314 + 17388 + 17777 + 17387 + 17778 + 17793 + 17340 + 17308 + 17815 + 17310 + 17816 + 17311 + 17313 + 17820 + 17315 + 17321 + 17161 + 17846 + 17847 + 17848 + 17849 + 17214 + 17850 + 17851 + 17219 + 17852 + 17221 + 17853 + 17854 + 17855 + 17245 + 17856 + 17247 + 17857 + 17860 + 17371 + 17294 + 17886 + 17295 + 17887 + 17296 + 17888 + 17297 + 17889 + 17303 + 17896 + 17304 + 17348 + 17319 + 17324 + 18855 + 18863 +endcidchar + +86 begincidchar + 18889 + 18900 + 18905 + 18909 + 18911 + 18914 + 18917 + 18932 + 18934 + 18936 + 18949 + 18952 + 18963 + 17338 + 17339 + 17312 + 17341 + 17342 + 17343 + 17344 + 17981 + 17345 + 17346 + 17337 + 17325 + 17351 + 17352 + 17401 + 558 + 560 + 18846 + 18847 + 18848 + 17686 + 628 + 9089 + 16828 + 14465 + 16997 + 14224 + 14104 + 14103 + 14106 + 14105 + 13646 + 109 + 122 + 13743 + 13745 + 13746 + 258 + 108 + 14052 + 174 + 259 + 264 + 175 + 14051 + 176 + 208 + 100 + 209 + 103 + 257 + 106 + 105 + 214 + 216 + 215 + 107 + 265 + 13758 + 258 + 13759 + 13748 + 197 + 132 + 120 + 133 + 228 + 113 + 14049 + 196 + 14050 + 260 + 14096 +endcidchar + +100 begincidrange +<0020> <007e> 1 +<00a2> <00a3> 262 +<0391> <03a1> 417 +<03a3> <03a9> 434 +<03b1> <03c1> 441 +<03c3> <03c9> 458 +<0410> <0415> 13930 +<0416> <0435> 13937 +<0436> <044f> 13970 +<2018> <2019> 166 +<201c> <201d> 168 +<2160> <2169> 343 +<2170> <2179> 526 +<2196> <2197> 249 +<21b8> <21b9> 13997 +<2229> <222a> 229 +<2266> <2267> 217 +<23da> <23db> 18844 +<2400> <241f> 562 +<2460> <2469> 506 +<2474> <247d> 516 +<256d> <256e> 318 +<2571> <2573> 330 +<2581> <2588> 290 +<25e2> <25e3> 326 +<2e86> <2e88> 17693 +<2e8c> <2e8d> 17697 +<2ecc> <2ecd> 17710 +<2ed6> <2ed7> 17713 +<2f01> <2f03> 536 +<2f08> <2f0b> 603 +<2f0c> <2f0e> 541 +<2f17> <2f18> 612 +<2f1f> <2f20> 634 +<2f23> <2f26> 636 +<2f28> <2f2b> 642 +<2f2f> <2f30> 648 +<2f31> <2f32> 652 +<2f33> <2f35> 551 +<2f36> <2f38> 654 +<2f39> <2f3a> 554 +<2f3c> <2f3f> 720 +<2f42> <2f45> 726 +<2f47> <2f4d> 730 +<2f4f> <2f52> 737 +<2f54> <2f58> 741 +<2f5a> <2f5d> 746 +<2f5e> <2f64> 854 +<2f67> <2f68> 558 +<2f69> <2f70> 867 +<2f72> <2f74> 875 +<2f75> <2f78> 1014 +<2f7a> <2f7c> 1018 +<2f7d> <2f81> 1022 +<2f82> <2f8a> 1029 +<2f8d> <2f90> 1039 +<2f92> <2f97> 1288 +<2f99> <2fa0> 1294 +<2fa3> <2fa5> 1312 +<2fa6> <2fa9> 1686 +<2fab> <2fac> 1695 +<2faf> <2fb9> 2086 +<2fba> <2fbc> 2549 +<2fc0> <2fc1> 2553 +<2fc2> <2fc7> 3041 +<2fc8> <2fca> 3515 +<2fcd> <2fcf> 3963 +<2fd0> <2fd1> 4352 +<2fd3> <2fd4> 5042 +<3001> <3002> 101 +<3005> <3007> 13754 +<3008> <3009> 148 +<300a> <300b> 144 +<300c> <300d> 152 +<300e> <300f> 156 +<3010> <3011> 140 +<3014> <3015> 136 +<301d> <301e> 170 +<3021> <3029> 353 +<3038> <303a> 362 +<3041> <3093> 13761 +<309b> <309c> 17606 +<309d> <309e> 13751 +<30a1> <30f6> 13844 +<30fd> <30fe> 13749 +<3105> <3129> 465 +<31c0> <31c4> 17609 +<31c6> <31c7> 17618 +<31c9> <31cc> 17624 +<31cd> <31ce> 17629 +<338e> <338f> 277 +<339c> <339e> 272 +<4e1e> <4e1f> 878 +<4e52> <4e53> 880 +<4e83> <4e84> 9057 +<4eab> <4eac> 1326 +<4ead> <4eae> 1700 +<4ec6> <4ec7> 675 +<4eca> <4ecb> 678 +<4ed4> <4ed7> 762 +endcidrange + +100 begincidrange +<4ee3> <4ee4> 766 +<4f10> <4f11> 893 +<4f50> <4f51> 1056 +<4ff6> <4ff7> 7208 +<500c> <500d> 2099 +<5063> <5064> 7754 +<50b2> <50b3> 3521 +<5106> <5107> 10369 +<5108> <5109> 4360 +<510b> <510c> 10373 +<512d> <512e> 12047 +<5134> <5135> 12410 +<5137> <5138> 5736 +<516d> <516e> 684 +<5189> <518a> 772 +<51a4> <51a5> 2131 +<51b6> <51b7> 1079 +<51c4> <51c5> 7222 +<51f9> <51fa> 775 +<5200> <5201> 608 +<5206> <5208> 689 +<5211> <5212> 913 +<5229> <522a> 1083 +<5232> <5233> 6420 +<525e> <525f> 7229 +<5274> <5275> 3059 +<527b> <527c> 9080 +<5280> <5281> 9763 +<5287> <5289> 4364 +<528b> <528c> 10377 +<52a9> <52aa> 1087 +<52ad> <52ae> 6200 +<52e2> <52e3> 3536 +<52fe> <52ff> 693 +<5305> <5306> 781 +<530a> <530b> 6425 +<533f> <5340> 2587 +<5370> <5371> 921 +<5377> <5379> 1372 +<538e> <538f> 6205 +<5435> <5436> 1112 +<54c5> <54c6> 6786 +<54f7> <54f8> 7253 +<5575> <5576> 7771 +<55c5> <55c6> 3552 +<55e3> <55e4> 3547 +<560d> <560e> 3992 +<562f> <5630> 4383 +<568c> <568d> 11586 +<56a6> <56a7> 12417 +<56bd> <56be> 13002 +<5701> <5702> 7259 +<5703> <5704> 2169 +<5712> <5713> 3556 +<5722> <5723> 6042 +<5773> <5774> 6463 +<579e> <579f> 6797 +<5830> <5831> 3099 +<58de> <58df> 5496 +<58f9> <58fa> 3104 +<5919> <591a> 948 +<5937> <5938> 950 +<5947> <5948> 1411 +<5957> <5958> 2177 +<5a2d> <5a2e> 7280 +<5b3d> <5b3f> 12425 +<5b4b> <5b4c> 13180 +<5b50> <5b51> 639 +<5b57> <5b58> 959 +<5b5a> <5b5b> 1151 +<5b87> <5b88> 961 +<5b9e> <5b9f> 17743 +<5bd8> <5bd9> 9144 +<5be5> <5be6> 4027 +<5bf1> <5bf2> 11609 +<5c0a> <5c0b> 3119 +<5c40> <5c41> 1157 +<5c45> <5c46> 1442 +<5c4e> <5c4f> 1799 +<5c5c> <5c5d> 2652 +<5c64> <5c65> 4404 +<5c69> <5c6a> 12057 +<5c7a> <5c7b> 6112 +<5c90> <5c91> 1161 +<5cd3> <5cd4> 6849 +<5dc6> <5dc7> 12749 +<5df1> <5df3> 649 +<5e02> <5e03> 825 +<5e21> <5e23> 6858 +<5e58> <5e59> 9842 +<5e67> <5e68> 11062 +<5e6d> <5e6e> 12060 +<5e95> <5e96> 1461 +<5eb2> <5eb3> 7889 +<5eb7> <5eb8> 2672 +<5ec1> <5ec2> 3133 +<5eee> <5eef> 12751 +<5f14> <5f15> 718 +<5f22> <5f24> 6515 +<5f26> <5f27> 1464 +endcidrange + +100 begincidrange +<5f80> <5f81> 1467 +<5f8a> <5f8b> 1818 +<5fa9> <5faa> 3138 +<5fc0> <5fc1> 12753 +<60d3> <60d4> 7902 +<6149> <614a> 9173 +<6152> <6153> 9864 +<6162> <6163> 4052 +<61ed> <61ee> 12064 +<6203> <6204> 13336 +<620c> <620d> 977 +<621a> <621b> 2711 +<6221> <6222> 3610 +<6242> <6243> 6892 +<6253> <6254> 834 +<628e> <628f> 6288 +<62d3> <62d4> 1503 +<62d6> <62d7> 1518 +<6313> <6314> 6907 +<632a> <632b> 2257 +<6344> <6345> 7334 +<63ed> <63ee> 3175 +<6416> <6417> 3624 +<6422> <6423> 9205 +<6472> <6473> 9887 +<64bb> <64bc> 4795 +<64fa> <64fb> 5334 +<6548> <6549> 2262 +<6562> <6563> 3186 +<6577> <6578> 4463 +<6582> <6583> 5089 +<659d> <659e> 8564 +<65b2> <65b3> 10485 +<65c3> <65c4> 7361 +<65cb> <65cc> 2757 +<65ec> <65ed> 986 +<6687> <6688> 3632 +<66ca> <66cb> 11104 +<66da> <66db> 12081 +<66e3> <66e4> 12762 +<66ed> <66ee> 13445 +<66f2> <66f3> 988 +<66fe> <66ff> 3200 +<670f> <6710> 6931 +<6712> <6713> 7368 +<6714> <6715> 2276 +<672a> <672b> 842 +<674e> <6751> 1213 +<676f> <6770> 1550 +<6778> <6779> 6598 +<67c9> <67ca> 6968 +<6832> <6833> 7373 +<686d> <686e> 7961 +<68dd> <68de> 8615 +<6948> <6949> 9252 +<6a4d> <6a4e> 11141 +<6aae> <6aaf> 5346 +<6ab6> <6ab7> 12090 +<6aee> <6aef> 12770 +<6b08> <6b09> 13190 +<6b11> <6b12> 13342 +<6b18> <6b19> 13516 +<6b37> <6b38> 7997 +<6b66> <6b67> 1563 +<6b8d> <6b8e> 8001 +<6b9e> <6ba0> 9957 +<6baa> <6bab> 11148 +<6bc3> <6bc4> 9960 +<6bc5> <6bc6> 4487 +<6beb> <6bec> 2793 +<6bf2> <6bf3> 8636 +<6bf7> <6bf8> 9292 +<6bfb> <6bfc> 9289 +<6c19> <6c1a> 6318 +<6c20> <6c21> 6980 +<6c27> <6c28> 2307 +<6c2e> <6c2f> 3234 +<6c4b> <6c4c> 6152 +<6c4d> <6c4e> 1008 +<6c5f> <6c60> 1002 +<6c88> <6c89> 1231 +<6cbd> <6cbe> 1575 +<6d3d> <6d3e> 1915 +<6d63> <6d64> 7414 +<6ddc> <6ddd> 8023 +<6e35> <6e36> 8684 +<6e3c> <6e3d> 8645 +<6e46> <6e47> 8640 +<6e93> <6e94> 9300 +<6ee8> <6ee9> 18049 +<6f19> <6f1a> 9974 +<6fdf> <6fe0> 5110 +<700c> <700d> 12099 +<7021> <7023> 12463 +<7043> <7044> 13016 +<7045> <7046> 13021 +<7048> <7049> 13019 +<7055> <7057> 13193 +<7069> <706a> 13639 +<707c> <707d> 1255 +endcidrange + +100 begincidrange +<70b4> <70b5> 7019 +<70c5> <70c7> 7463 +<70d5> <70d6> 16985 +<7109> <710a> 2835 +<7119> <711a> 3272 +<71c0> <71c1> 11189 +<71c3> <71c4> 4855 +<71da> <71db> 11200 +<71fb> <71fc> 5358 +<7213> <7214> 12788 +<721e> <721f> 13197 +<722c> <722d> 1605 +<7249> <724a> 7023 +<727b> <727c> 8065 +<7288> <7289> 8703 +<729d> <729e> 11202 +<72a5> <72a6> 12475 +<72b4> <72b5> 6156 +<72e0> <72e1> 1942 +<735e> <7360> 10602 +<7366> <7367> 11205 +<736e> <736f> 11683 +<7393> <7394> 6351 +<73d7> <73d8> 7495 +<741e> <741f> 18164 +<7435> <7436> 3292 +<744a> <744b> 9371 +<744f> <7450> 9377 +<745b> <745c> 3715 +<7489> <748a> 10612 +<74de> <74df> 7498 +<74f4> <74f5> 7500 +<74f6> <74f7> 2855 +<7502> <7503> 10035 +<750c> <750d> 4864 +<7510> <7512> 11694 +<7525> <7526> 3299 +<7528> <7529> 860 +<7530> <7533> 862 +<7537> <7538> 1266 +<753f> <7540> 6671 +<7547> <7548> 7057 +<7565> <7566> 2859 +<7594> <7595> 6356 +<7599> <759a> 1623 +<75a2> <75a3> 1960 +<75a4> <75a5> 1958 +<75b2> <75b3> 2361 +<75cb> <75cc> 8099 +<75d4> <75d5> 2864 +<7621> <7622> 4529 +<7648> <7649> 11700 +<7671> <7672> 5923 +<767b> <767c> 3310 +<7686> <7688> 1963 +<769c> <769e> 10633 +<76cd> <76ce> 2371 +<76de> <76df> 3728 +<7703> <7705> 7064 +<770e> <770f> 15106 +<7719> <771a> 7523 +<771f> <7720> 2374 +<7731> <7732> 8109 +<7746> <7747> 8751 +<774b> <774c> 8758 +<775f> <7760> 9410 +<779e> <779f> 4872 +<77a2> <77a3> 11236 +<77bb> <77bc> 5372 +<77c9> <77ca> 12486 +<77ce> <77cf> 12799 +<77d8> <77d9> 13523 +<77e7> <77e8> 7071 +<780c> <780d> 1981 +<7811> <7812> 7074 +<7864> <7865> 8763 +<7885> <7886> 9427 +<7897> <7898> 3745 +<78c3> <78c4> 10649 +<78df> <78e0> 11251 +<78e1> <78e2> 11248 +<78fb> <78fc> 11717 +<7913> <7914> 12141 +<7927> <7928> 12805 +<7940> <7941> 1632 +<7969> <796a> 8128 +<798a> <798b> 10070 +<798e> <798f> 4164 +<79b9> <79ba> 1987 +<79d1> <79d2> 1989 +<79eb> <79ec> 7547 +<79f6> <79f7> 8136 +<7a18> <7a19> 9441 +<7a4d> <7a4e> 4880 +<7a61> <7a62> 5376 +<7a67> <7a68> 12497 +<7a6c> <7a6d> 12811 +<7a70> <7a71> 13209 +<7a8b> <7a8c> 7559 +<7a9f> <7aa0> 3764 +endcidrange + +100 begincidrange +<7aab> <7aac> 10087 +<7ac0> <7ac1> 11734 +<7ac2> <7ac3> 14139 +<7ac4> <7ac5> 5379 +<7b00> <7b01> 7096 +<7bc6> <7bc7> 4559 +<7bf0> <7bf1> 11753 +<7c3e> <7c3f> 5539 +<7c78> <7c79> 7099 +<7c7f> <7c81> 7101 +<7cbd> <7cbe> 4185 +<7cd0> <7cd1> 11281 +<7cd5> <7cd6> 4894 +<7cef> <7cf0> 5677 +<7d3e> <7d3f> 8174 +<7dbd> <7dbe> 4190 +<7dcb> <7dcc> 10122 +<7e1f> <7e20> 11287 +<7e54> <7e55> 5388 +<7e69> <7e6a> 5548 +<7e87> <7e88> 13037 +<7f3e> <7f3f> 8817 +<7f40> <7f41> 14208 +<7f65> <7f66> 8819 +<7f67> <7f68> 9489 +<7f69> <7f6a> 3781 +<7f7b> <7f7c> 11303 +<7f9c> <7f9d> 8181 +<7fa0> <7fa1> 8822 +<7fca> <7fcb> 8184 +<7fd0> <7fd1> 8187 +<7fd4> <7fd5> 3356 +<7fdb> <7fdc> 9495 +<7fe0> <7fe1> 4207 +<7fe2> <7fe3> 10135 +<7ff0> <7ff1> 4907 +<7ff7> <7ff8> 12175 +<7ffd> <7ffe> 12521 +<800e> <800f> 7112 +<803b> <803c> 14231 +<804f> <8050> 8826 +<8071> <8072> 5193 +<808b> <808c> 1027 +<80c3> <80c4> 2014 +<8159> <815a> 18253 +<8179> <817a> 3798 +<819b> <819d> 4586 +<81d1> <81d2> 12178 +<81e0> <81e1> 13533 +<81f7> <81f9> 8840 +<822a> <822b> 2456 +<823c> <823d> 8844 +<8255> <8257> 11324 +<8258> <8259> 4916 +<8268> <8269> 12829 +<8283> <8284> 6373 +<837b> <837c> 2948 +<84e7> <84e8> 10755 +<852c> <852d> 4596 +<8568> <8569> 4921 +<856f> <8570> 18283 +<85e4> <85e5> 5560 +<8634> <8635> 13223 +<8646> <8648> 13535 +<866d> <866e> 6726 +<86bb> <86bc> 8266 +<86bd> <86be> 8269 +<8702> <8703> 3830 +<8726> <8727> 10216 +<8763> <8764> 10768 +<8790> <8791> 11375 +<87f6> <87f7> 12554 +<8810> <8811> 12844 +<8814> <8815> 5695 +<8843> <8844> 7674 +<8845> <8846> 14358 +<8875> <8876> 7677 +<8881> <8882> 2490 +<88b4> <88b5> 14366 +<88c1> <88c2> 3410 +<88cd> <88ce> 9593 +<88f1> <88f2> 10225 +<8912> <8913> 4622 +<8917> <8919> 10804 +<892d> <892e> 11386 +<8950> <8951> 12233 +<895a> <895b> 12566 +<8979> <897a> 13538 +<89da> <89db> 8935 +<89f2> <89f3> 11865 +<8a02> <8a03> 2056 +<8a44> <8a45> 8944 +<8a57> <8a58> 8942 +<8a72> <8a73> 3848 +<8ad4> <8ad5> 10823 +<8af4> <8af5> 11400 +<8b01> <8b02> 4950 +<8b4e> <8b4f> 5577 +<8b7a> <8b7b> 13076 +<8b94> <8b95> 13468 +endcidrange + +100 begincidrange +<8b98> <8b99> 13543 +<8c5c> <8c5d> 8301 +<8c68> <8c69> 10250 +<8c84> <8c85> 9630 +<8c91> <8c92> 11414 +<8ca1> <8ca2> 2508 +<8cc7> <8cc8> 3871 +<8cd1> <8cd2> 4280 +<8ce2> <8ce3> 4652 +<8cec> <8ced> 4650 +<8d06> <8d07> 12595 +<8d16> <8d17> 5849 +<8d68> <8d69> 9633 +<8d8e> <8d8f> 9637 +<8d93> <8d94> 9640 +<8e26> <8e27> 10859 +<8e3c> <8e3d> 11432 +<8e96> <8e97> 13250 +<8e9e> <8ea0> 13470 +<8ee0> <8ee1> 8318 +<8ee7> <8ee8> 8983 +<8f07> <8f08> 9662 +<8f10> <8f11> 10269 +<8f16> <8f17> 10874 +<8f46> <8f48> 12279 +<8f4f> <8f50> 12611 +<8f56> <8f57> 12866 +<8f66> <8f67> 17769 +<8fbb> <8fbc> 15723 +<9081> <9082> 5269 +<908a> <908b> 5593 +<9097> <9098> 6171 +<90d9> <90da> 7711 +<90eb> <90ec> 8333 +<90f2> <90f3> 8330 +<9129> <912a> 10883 +<9135> <9136> 11451 +<913a> <913b> 12284 +<9144> <9145> 13087 +<914e> <914f> 7722 +<916e> <916f> 9679 +<9181> <9182> 10891 +<9185> <9186> 10888 +<9190> <9191> 11454 +<91ab> <91ac> 5436 +<91b2> <91b3> 12876 +<91ea> <91eb> 8348 +<9214> <9215> 3471 +<92c3> <92c4> 10896 +<92f3> <92f4> 18333 +<9350> <9351> 11923 +<93dc> <93dd> 5602 +<9448> <9449> 13262 +<944a> <944b> 13257 +<9451> <9452> 5856 +<9468> <9469> 13478 +<947d> <947e> 5981 +<9480> <9481> 13625 +<95a8> <95a9> 4320 +<95b9> <95ba> 11500 +<95ca> <95cc> 5290 +<95d2> <95d3> 12317 +<95da> <95db> 12643 +<964b> <964d> 2083 +<9662> <9663> 2539 +<9676> <9677> 3031 +<9685> <9686> 3491 +<9688> <9689> 9040 +<9692> <9693> 9716 +<9694> <9695> 3934 +<96a7> <96a8> 4998 +<96c6> <96c7> 3499 +<96c9> <96ca> 3938 +<9706> <9707> 4707 +<972b> <972c> 12647 +<972e> <972f> 12911 +<9738> <9739> 5793 +<973d> <973e> 5858 +<975b> <975c> 5008 +<9777> <9778> 9726 +<97c4> <97c5> 13388 +<97dd> <97df> 12654 +<97fd> <97fe> 12915 +<9802> <9803> 3039 +<9805> <9806> 3504 +<980d> <980e> 9730 +<9810> <9811> 3947 +<9817> <9818> 4334 +<9850> <9852> 12343 +<9862> <9863> 12918 +<9873> <9874> 13607 +<98ad> <98ae> 10339 +<98c1> <98c2> 12921 +<98fd> <98fe> 3955 +<9916> <9917> 10959 +<992b> <992c> 11973 +<993e> <993f> 5470 +<99a6> <99a7> 12668 +<99d3> <99d4> 10965 +<99fd> <99fe> 11993 +endcidrange + +100 begincidrange +<9a53> <9a54> 13273 +<9a5a> <9a5b> 5907 +<9a66> <9a67> 13613 +<9aaf> <9ab0> 4343 +<9ad3> <9ad4> 5910 +<9aee> <9aef> 4731 +<9b04> <9b05> 12363 +<9b17> <9b18> 13125 +<9b1e> <9b20> 13393 +<9b3e> <9b3f> 10356 +<9b41> <9b42> 4346 +<9b60> <9b61> 10358 +<9bea> <9beb> 12689 +<9c28> <9c29> 13135 +<9c77> <9c78> 5984 +<9cf1> <9cf2> 10361 +<9d2e> <9d2f> 12019 +<9d42> <9d43> 12025 +<9d74> <9d75> 12719 +<9d8b> <9d8c> 12715 +<9da6> <9da7> 12980 +<9db9> <9dba> 13152 +<9df9> <9dfa> 5947 +<9e00> <9e01> 13501 +<9e7c> <9e7d> 5949 +<9e86> <9e87> 11569 +<9ed5> <9ed6> 11573 +<9edc> <9edd> 5316 +<9ef2> <9ef3> 13427 +<9f0f> <9f10> 11006 +<9f40> <9f41> 12737 +<9f56> <9f58> 12740 +<9f66> <9f67> 5817 +<9f6e> <9f6f> 13438 +<9f74> <9f76> 13510 +<9fad> <9fae> 18960 + 17884 + 17924 + 17926 + 14898 + 16821 + 16818 + 16976 + 18594 + 16395 + 16427 + 16434 + 18758 + 16468 + 16487 + 16495 + 16511 + 16561 + 16572 + 16599 + 16618 + 16639 + 16645 + 16650 + 16658 + 16696 + 16702 + 16717 + 16721 + 16723 + 16739 + 16749 + 16756 + 16789 + 18770 + 16792 + 16807 + 16829 + 16839 + 16842 + 16864 + 16897 + 16941 + 16944 + 16984 + 16998 + 17029 + 17057 + 17065 + 17080 + 18781 + 17131 + 17144 + 14123 + 14128 + 18073 + 14166 + 14169 + 14175 + 14180 + 14182 + 14187 + 14192 + 14201 + 14205 +endcidrange + +100 begincidrange + 14221 + 14225 + 14228 + 14248 + 14257 + 14264 + 14297 + 14302 + 14311 + 14316 + 14327 + 14348 + 14351 + 14369 + 14374 + 14387 + 14396 + 14422 + 14444 + 18095 + 14451 + 14467 + 14477 + 14486 + 14503 + 14539 + 14560 + 14597 + 14610 + 14618 + 14634 + 14663 + 14672 + 14731 + 14763 + 14772 + 281 + 14803 + 14825 + 14834 + 14845 + 14853 + 14865 + 14917 + 14948 + 14971 + 15005 + 15008 + 15010 + 15036 + 15086 + 15093 + 15134 + 15198 + 15210 + 15215 + 15283 + 15302 + 15344 + 15346 + 15357 + 15382 + 15453 + 15478 + 15493 + 15601 + 18126 + 15658 + 15700 + 18129 + 18131 + 18133 + 18139 + 18150 + 15711 + 18158 + 15715 + 18163 + 18173 + 17358 + 18179 + 18182 + 18185 + 18188 + 18193 + 17365 + 18197 + 18204 + 18208 + 18215 + 18219 + 18226 + 18233 + 18238 + 18242 + 18247 + 18249 + 18258 + 18265 + 18268 +endcidrange + +100 begincidrange + 18271 + 18274 + 18289 + 18291 + 18296 + 18298 + 18306 + 18311 + 18317 + 18321 + 18342 + 18354 + 18360 + 18366 + 18374 + 18382 + 18385 + 18388 + 18395 + 18402 + 18411 + 18420 + 15750 + 18426 + 18433 + 18436 + 18440 + 18443 + 18446 + 18450 + 18459 + 18462 + 18471 + 15766 + 18478 + 15768 + 18492 + 18494 + 15777 + 15779 + 18498 + 15781 + 18501 + 18503 + 15787 + 18505 + 15796 + 18510 + 15805 + 18518 + 15809 + 18520 + 18524 + 15817 + 15821 + 18529 + 18532 + 15825 + 15827 + 18536 + 15829 + 15832 + 18541 + 15837 + 15845 + 18546 + 15853 + 15859 + 18554 + 15863 + 15867 + 15869 + 18559 + 18561 + 15873 + 15876 + 18565 + 15878 + 15890 + 18568 + 15895 + 15905 + 18572 + 15908 + 15911 + 15921 + 15924 + 15926 + 18580 + 18584 + 18589 + 18591 + 15942 + 18595 + 18599 + 18601 + 18608 + 18627 + 18631 + 15952 +endcidrange + +100 begincidrange + 15957 + 18637 + 18639 + 18643 + 15964 + 15966 + 18648 + 18650 + 15970 + 18653 + 15973 + 15978 + 18656 + 15981 + 16015 + 16021 + 16049 + 16052 + 18664 + 18667 + 18674 + 16058 + 16062 + 16065 + 18681 + 16070 + 16072 + 18685 + 16076 + 18689 + 18691 + 16080 + 18693 + 16082 + 16084 + 18697 + 18699 + 16090 + 18702 + 16093 + 18704 + 16095 + 16117 + 16119 + 18707 + 16122 + 16126 + 16130 + 16134 + 18713 + 16136 + 16156 + 18715 + 16163 + 16170 + 16204 + 16209 + 16213 + 16224 + 16232 + 16236 + 16247 + 16267 + 16272 + 16278 + 16291 + 16305 + 16314 + 16324 + 16327 + 16331 + 16335 + 16364 + 16374 + 16379 + 16389 + 16393 + 18736 + 18743 + 18746 + 17609 + 18785 + 18844 + 17716 + 17719 + 17724 + 17727 + 17779 + 17782 + 17794 + 17796 + 17806 + 17817 + 17821 + 17317 + 17827 + 17841 + 17163 + 17174 + 17187 +endcidrange + +85 begincidrange + 17191 + 17196 + 17210 + 17216 + 17223 + 17231 + 17234 + 17240 + 17249 + 17263 + 17268 + 17858 + 17278 + 17285 + 17861 + 17874 + 17292 + 17884 + 17298 + 17890 + 17893 + 17897 + 17902 + 17906 + 17908 + 17631 + 17660 + 18851 + 18858 + 18869 + 18877 + 18880 + 18884 + 18892 + 18919 + 18924 + 18941 + 18954 + 18958 + 17961 + 17963 + 17968 + 17971 + 17978 + 17982 + 17988 + 17990 + 18002 + 18014 + 18068 + 506 + 537 + 554 + 13747 + 13754 + 13770 + 14049 + 17606 + 17692 + 17701 + 17709 + 18834 + 14099 + 130 + 134 + 138 + 142 + 146 + 150 + 154 + 158 + 199 + 203 + 201 + 112 + 116 + 160 + 205 + 223 + 268 + 128 + 333 + 365 + 391 + 262 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UTF16-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UTF16-V new file mode 100644 index 00000000000..013012e1c68 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniCNS-UTF16-V @@ -0,0 +1,94 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniCNS-UTF16-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniCNS-UTF16-H) +%%BeginResource: CMap (UniCNS-UTF16-V) +%%Title: (UniCNS-UTF16-V Adobe CNS1 6) +%%Version: 1.005 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniCNS-UTF16-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (CNS1) def + /Supplement 6 def +end def + +/CMapName /UniCNS-UTF16-V def +/CMapVersion 1.005 def +/CMapType 1 def + +/XUID [1 10 25592] def + +/WMode 1 def + +6 begincidchar +<2013> 120 +<2014> 122 +<2025> 109 + 13745 + 134 + 135 +endcidchar + +7 begincidrange +<3008> <3009> 150 +<300a> <300b> 146 +<300c> <300d> 154 +<300e> <300f> 158 +<3010> <3011> 142 +<3014> <3015> 138 + 130 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UCS2-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UCS2-H new file mode 100644 index 00000000000..2692d0dec2c --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UCS2-H @@ -0,0 +1,14321 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniGB-UCS2-H) +%%Title: (UniGB-UCS2-H Adobe GB1 4) +%%Version: 12.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 4 def +end def + +/CMapName /UniGB-UCS2-H def +/CMapVersion 12.003 def +/CMapType 1 def + +/XUID [1 10 25366] def + +/WMode 0 def + +2 begincodespacerange + <0000> + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidrange +<0020> <007e> 1 +<00a4> <00a4> 167 +<00a5> <00a5> 22354 +<00a7> <00a7> 171 +<00a8> <00a8> 102 +<00b0> <00b0> 162 +<00b1> <00b1> 127 +<00d7> <00d7> 128 +<00e0> <00e0> 671 +<00e1> <00e1> 669 +<00e8> <00e8> 675 +<00e9> <00e9> 673 +<00ea> <00ea> 693 +<00ec> <00ec> 679 +<00ed> <00ed> 677 +<00f2> <00f2> 683 +<00f3> <00f3> 681 +<00f7> <00f7> 129 +<00f9> <00f9> 687 +<00fa> <00fa> 685 +<00fc> <00fc> 692 +<0101> <0101> 668 +<0113> <0113> 672 +<011b> <011b> 674 +<012b> <012b> 676 +<014d> <014d> 680 +<016b> <016b> 684 +<01ce> <01ce> 670 +<01d0> <01d0> 678 +<01d2> <01d2> 682 +<01d4> <01d4> 686 +<01d6> <01d6> 688 +<01d8> <01d8> 689 +<01da> <01da> 690 +<01dc> <01dc> 691 +<01f9> <01f9> 698 +<02c7> <02c7> 101 +<02c9> <02c9> 100 +<02ca> <02cb> 9907 +<02d9> <02d9> 9909 +<0391> <03a1> 525 +<03a3> <03a9> 542 +<03b1> <03c1> 549 +<03c3> <03c9> 566 +<0401> <0401> 608 +<0410> <0415> 602 +<0416> <0435> 609 +<0436> <044f> 642 +<0451> <0451> 641 +<1e3f> <1e3f> 695 +<2010> <2010> 10018 +<2013> <2013> 9910 +<2014> <2014> 105 +<2015> <2015> 9911 +<2016> <2016> 107 +<2018> <2019> 109 +<201c> <201d> 111 +<2025> <2025> 9912 +<2026> <2026> 108 +<2030> <2030> 170 +<2032> <2033> 163 +<2035> <2035> 9913 +<203b> <203b> 184 +<20ac> <20ac> 22353 +<2103> <2103> 165 +<2105> <2105> 9914 +<2109> <2109> 9915 +<2116> <2116> 172 +<2121> <2121> 10016 +<2160> <216b> 250 +<2170> <2179> 9897 +<2190> <2191> 186 +<2192> <2192> 185 +<2193> <2193> 188 +<2196> <2199> 9916 +<2208> <2208> 137 +<220f> <220f> 134 +<2211> <2211> 133 +<2215> <2215> 9920 +<221a> <221a> 139 +<221d> <221d> 151 +<221e> <221e> 157 +<221f> <221f> 9921 +<2220> <2220> 142 +<2223> <2223> 9922 +<2225> <2225> 141 +<2227> <2228> 131 +<2229> <2229> 136 +<222a> <222a> 135 +<222b> <222b> 145 +<222e> <222e> 146 +<2234> <2234> 159 +<2235> <2235> 158 +<2236> <2236> 130 +<2237> <2237> 138 +<223d> <223d> 150 +<2248> <2248> 149 +<224c> <224c> 148 +<2252> <2252> 9923 +<2260> <2260> 152 +endcidrange + +100 begincidrange +<2261> <2261> 147 +<2264> <2265> 155 +<2266> <2267> 9924 +<226e> <226f> 153 +<2295> <2295> 9988 +<2299> <2299> 144 +<22a5> <22a5> 140 +<22bf> <22bf> 9926 +<22ef> <22ef> 108 +<2312> <2312> 143 +<2460> <2469> 230 +<2474> <2487> 210 +<2488> <249b> 190 +<2500> <254b> 738 +<2550> <2573> 9927 +<2581> <258f> 9963 +<2593> <2595> 9978 +<25a0> <25a0> 181 +<25a1> <25a1> 180 +<25b2> <25b2> 183 +<25b3> <25b3> 182 +<25bc> <25bd> 9981 +<25c6> <25c6> 179 +<25c7> <25c7> 178 +<25cb> <25cb> 175 +<25ce> <25ce> 177 +<25cf> <25cf> 176 +<25e2> <25e5> 9983 +<2605> <2605> 174 +<2606> <2606> 173 +<2609> <2609> 9987 +<2640> <2640> 161 +<2642> <2642> 160 +<2e80> <2e80> 22428 +<2e81> <2e81> 22047 +<2e82> <2e83> 22429 +<2e84> <2e84> 22051 +<2e85> <2e87> 22431 +<2e88> <2e88> 22054 +<2e89> <2e8a> 22434 +<2e8b> <2e8b> 22055 +<2e8c> <2e8c> 22060 +<2e8d> <2e96> 22436 +<2e97> <2e97> 22061 +<2e98> <2e99> 22446 +<2e9b> <2ea6> 22448 +<2ea7> <2ea7> 22074 +<2ea8> <2ea9> 22460 +<2eaa> <2eaa> 22077 +<2eab> <2ead> 22462 +<2eae> <2eae> 22080 +<2eaf> <2eb2> 22465 +<2eb3> <2eb3> 22082 +<2eb4> <2eb5> 22469 +<2eb6> <2eb7> 22083 +<2eb8> <2eba> 22471 +<2ebb> <2ebb> 22088 +<2ebc> <2ec9> 22474 +<2eca> <2eca> 22098 +<2ecb> <2ef3> 22488 +<2f00> <2f00> 4162 +<2f01> <2f01> 4707 +<2f02> <2f02> 4722 +<2f03> <2f03> 4709 +<2f04> <2f04> 4185 +<2f05> <2f05> 10131 +<2f06> <2f06> 1597 +<2f07> <2f07> 4867 +<2f08> <2f08> 3238 +<2f09> <2f09> 1592 +<2f0a> <2f0a> 3270 +<2f0b> <2f0b> 982 +<2f0c> <2f0c> 4765 +<2f0d> <2f0d> 4884 +<2f0e> <2f0e> 4879 +<2f0f> <2f0f> 2091 +<2f10> <2f10> 5017 +<2f11> <2f11> 1431 +<2f12> <2f12> 2543 +<2f13> <2f13> 4860 +<2f14> <2f14> 4710 +<2f15> <2f15> 4740 +<2f16> <2f16> 10778 +<2f17> <2f17> 3397 +<2f18> <2f18> 1150 +<2f19> <2f19> 4946 +<2f1a> <2f1a> 1228 +<2f1b> <2f1b> 5020 +<2f1c> <2f1c> 4283 +<2f1d> <2f1d> 2407 +<2f1e> <2f1e> 5523 +<2f1f> <2f1f> 3698 +<2f20> <2f20> 3414 +<2f21> <2f21> 5660 +<2f22> <2f22> 11565 +<2f23> <2f23> 3859 +<2f24> <2f24> 1398 +<2f25> <2f25> 2927 +<2f26> <2f26> 4656 +<2f27> <2f27> 5934 +endcidrange + +100 begincidrange +<2f28> <2f28> 1386 +<2f29> <2f29> 3948 +<2f2a> <2f2a> 5302 +<2f2b> <2f2b> 3395 +<2f2c> <2f2c> 6004 +<2f2d> <2f2d> 3318 +<2f2e> <2f2e> 6165 +<2f2f> <2f2f> 1789 +<2f30> <2f30> 2093 +<2f31> <2f31> 2238 +<2f32> <2f32> 1732 +<2f33> <2f33> 6163 +<2f34> <2f34> 1852 +<2f35> <2f35> 5016 +<2f36> <2f36> 5293 +<2f37> <2f37> 5366 +<2f38> <2f38> 1798 +<2f39> <2f39> 5986 +<2f3a> <2f3a> 5614 +<2f3b> <2f3b> 5600 +<2f3c> <2f3c> 3983 +<2f3d> <2f3d> 1765 +<2f3e> <2f3e> 12946 +<2f3f> <2f3f> 3437 +<2f40> <2f40> 4518 +<2f41> <2f41> 6409 +<2f42> <2f42> 3795 +<2f43> <2f43> 1526 +<2f44> <2f44> 2240 +<2f45> <2f45> 1626 +<2f46> <2f46> 3821 +<2f47> <2f47> 3248 +<2f48> <2f48> 4350 +<2f49> <2f49> 4357 +<2f4a> <2f4a> 2849 +<2f4b> <2f4b> 3124 +<2f4c> <2f4c> 4536 +<2f4d> <2f4d> 1400 +<2f4e> <2f4e> 6589 +<2f4f> <2f4f> 3826 +<2f50> <2f50> 1073 +<2f51> <2f51> 2736 +<2f52> <2f52> 3430 +<2f53> <2f53> 3095 +<2f54> <2f54> 3491 +<2f55> <2f55> 2053 +<2f56> <2f56> 4611 +<2f57> <2f57> 1715 +<2f58> <2f58> 4713 +<2f59> <2f59> 5789 +<2f5a> <2f5a> 3019 +<2f5b> <2f5b> 4073 +<2f5c> <2f5c> 2916 +<2f5d> <2f5d> 3209 +<2f5e> <2f5e> 4041 +<2f5f> <2f5f> 4310 +<2f60> <2f60> 1832 +<2f61> <2f61> 3728 +<2f62> <2f62> 1733 +<2f63> <2f63> 3379 +<2f64> <2f64> 4264 +<2f65> <2f65> 3650 +<2f66> <2f66> 7110 +<2f67> <2f67> 7008 +<2f68> <2f68> 16063 +<2f69> <2f69> 994 +<2f6a> <2f6a> 3011 +<2f6b> <2f6b> 2808 +<2f6c> <2f6c> 2850 +<2f6d> <2f6d> 2737 +<2f6e> <2f6e> 3407 +<2f6f> <2f6f> 3398 +<2f70> <2f70> 3413 +<2f71> <2f71> 16587 +<2f72> <2f72> 1923 +<2f73> <2f73> 4049 +<2f74> <2f74> 2539 +<2f75> <2f75> 4592 +<2f76> <2f76> 2780 +<2f77> <2f77> 7399 +<2f78> <2f78> 7262 +<2f79> <2f79> 3753 +<2f7a> <2f7a> 4123 +<2f7b> <2f7b> 4309 +<2f7c> <2f7c> 2490 +<2f7d> <2f7d> 1591 +<2f7e> <2f7e> 7115 +<2f7f> <2f7f> 1593 +<2f80> <2f80> 6686 +<2f81> <2f81> 3261 +<2f82> <2f82> 1249 +<2f83> <2f83> 4657 +<2f84> <2f84> 4544 +<2f85> <2f85> 2297 +<2f86> <2f86> 3353 +<2f87> <2f87> 5656 +<2f88> <2f88> 4570 +<2f89> <2f89> 7388 +<2f8a> <2f8a> 3300 +<2f8b> <2f8b> 17826 +endcidrange + +100 begincidrange +<2f8c> <2f8c> 7152 +<2f8d> <2f8d> 1291 +<2f8e> <2f8e> 4051 +<2f8f> <2f8f> 3995 +<2f90> <2f90> 4169 +<2f91> <2f91> 18908 +<2f92> <2f92> 8086 +<2f93> <2f93> 2200 +<2f94> <2f94> 4093 +<2f95> <2f95> 1825 +<2f96> <2f96> 1528 +<2f97> <2f97> 7445 +<2f98> <2f98> 7504 +<2f99> <2f99> 7739 +<2f9a> <2f9a> 1285 +<2f9b> <2f9b> 4668 +<2f9c> <2f9c> 4672 +<2f9d> <2f9d> 3366 +<2f9e> <2f9e> 7803 +<2f9f> <2f9f> 3980 +<2fa0> <2fa0> 1250 +<2fa1> <2fa1> 19731 +<2fa2> <2fa2> 4191 +<2fa3> <2fa3> 4276 +<2fa4> <2fa4> 19992 +<2fa5> <2fa5> 2522 +<2fa6> <2fa6> 2241 +<2fa7> <2fa7> 7797 +<2fa8> <2fa8> 8317 +<2fa9> <2fa9> 1714 +<2faa> <2faa> 2542 +<2fab> <2fab> 7545 +<2fac> <2fac> 4303 +<2fad> <2fad> 20714 +<2fae> <2fae> 1636 +<2faf> <2faf> 2795 +<2fb0> <2fb0> 1770 +<2fb1> <2fb1> 8589 +<2fb2> <2fb2> 2289 +<2fb3> <2fb3> 4219 +<2fb4> <2fb4> 8713 +<2fb5> <2fb5> 7936 +<2fb6> <2fb6> 7924 +<2fb7> <2fb7> 3402 +<2fb8> <2fb8> 3438 +<2fb9> <2fb9> 3920 +<2fba> <2fba> 8301 +<2fbb> <2fbb> 1824 +<2fbc> <2fbc> 1754 +<2fbd> <2fbd> 7660 +<2fbe> <2fbe> 7888 +<2fbf> <2fbf> 5019 +<2fc0> <2fc0> 4704 +<2fc1> <2fc1> 1862 +<2fc2> <2fc2> 8761 +<2fc3> <2fc3> 8348 +<2fc4> <2fc4> 9864 +<2fc5> <2fc5> 2656 +<2fc6> <2fc6> 8305 +<2fc7> <2fc7> 2704 +<2fc8> <2fc8> 21894 +<2fc9> <2fc9> 3465 +<2fca> <2fca> 1937 +<2fcb> <2fcb> 6741 +<2fcc> <2fcc> 9752 +<2fcd> <2fcd> 1509 +<2fce> <2fce> 1821 +<2fcf> <2fcf> 3466 +<2fd0> <2fd0> 1072 +<2fd1> <2fd1> 8390 +<2fd2> <2fd2> 7814 +<2fd3> <2fd3> 8247 +<2fd4> <2fd4> 7988 +<2fd5> <2fd5> 4851 +<2ff0> <2ffb> 10060 +<3000> <3002> 96 +<3003> <3003> 103 +<3005> <3005> 104 +<3006> <3006> 10024 +<3007> <3007> 7703 +<3008> <300f> 115 +<3010> <3011> 125 +<3012> <3012> 9989 +<3013> <3013> 189 +<3014> <3015> 113 +<3016> <3017> 123 +<301d> <301e> 9990 +<3021> <3029> 9992 +<3033> <3035> 22395 +<3038> <303a> 22398 +<303e> <303e> 10059 +<303f> <303f> 22357 +<3041> <3093> 356 +<3094> <3094> 22375 +<309b> <309c> 10020 +<309d> <309e> 10025 +<30a1> <30f6> 439 +<30f7> <30fa> 22390 +<30fb> <30fb> 99 +<30fc> <30fc> 10019 +endcidrange + +100 begincidrange +<30fd> <30fe> 10022 +<3105> <3129> 700 +<312a> <312c> 22401 +<31a0> <31b7> 22404 +<3220> <3229> 240 +<3231> <3231> 10017 +<32a3> <32a3> 10001 +<338e> <338f> 10002 +<339c> <339e> 10004 +<33a1> <33a1> 10007 +<33c4> <33c4> 10008 +<33ce> <33ce> 10009 +<33d1> <33d2> 10010 +<33d5> <33d5> 10012 +<3400> <3446> 22529 +<3447> <3447> 22053 +<3448> <3472> 22600 +<3473> <3473> 22052 +<3474> <34ff> 22643 +<3500> <359d> 22783 +<359e> <359e> 22057 +<359f> <35ff> 22941 +<3600> <360d> 23038 +<360e> <360e> 22059 +<360f> <3619> 23052 +<361a> <361a> 22058 +<361b> <36ff> 23063 +<3700> <37ff> 23292 +<3800> <38ff> 23548 +<3900> <3917> 23804 +<3918> <3918> 22063 +<3919> <396d> 23828 +<396e> <396e> 22062 +<396f> <39ce> 23913 +<39cf> <39cf> 22065 +<39d0> <39d0> 22068 +<39d1> <39de> 24009 +<39df> <39df> 22066 +<39e0> <39ff> 24023 +<3a00> <3a72> 24055 +<3a73> <3a73> 22067 +<3a74> <3aff> 24170 +<3b00> <3b4d> 24310 +<3b4e> <3b4e> 22071 +<3b4f> <3bff> 24388 +<3c00> <3c6d> 24565 +<3c6e> <3c6e> 22072 +<3c6f> <3cdf> 24675 +<3ce0> <3ce0> 22073 +<3ce1> <3cff> 24788 +<3d00> <3dff> 24819 +<3e00> <3eff> 25075 +<3f00> <3fff> 25331 +<4000> <4055> 25587 +<4056> <4056> 22078 +<4057> <40ff> 25673 +<4100> <415e> 25842 +<415f> <415f> 22079 +<4160> <41ff> 25937 +<4200> <42ff> 26097 +<4300> <4336> 26353 +<4337> <4337> 22081 +<4338> <43ab> 26408 +<43ac> <43ac> 22087 +<43ad> <43b0> 26524 +<43b1> <43b1> 22086 +<43b2> <43dc> 26528 +<43dd> <43dd> 22089 +<43de> <43ff> 26571 +<4400> <44d5> 26605 +<44d6> <44d6> 22090 +<44d7> <44ff> 26819 +<4500> <45ff> 26860 +<4600> <464b> 27116 +<464c> <464c> 22092 +<464d> <4660> 27192 +<4661> <4661> 22091 +<4662> <46ff> 27212 +<4700> <4722> 27370 +<4723> <4723> 22094 +<4724> <4728> 27405 +<4729> <4729> 22095 +<472a> <477b> 27410 +<477c> <477c> 22096 +<477d> <478c> 27492 +<478d> <478d> 22097 +<478e> <47ff> 27508 +<4800> <48ff> 27622 +<4900> <4946> 27878 +<4947> <4947> 22099 +<4948> <4979> 27949 +<497a> <497a> 22100 +<497b> <497c> 27999 +<497d> <497d> 22101 +<497e> <4981> 28001 +<4982> <4983> 22102 +<4984> <4984> 28005 +<4985> <4986> 22104 +<4987> <499a> 28006 +<499b> <499b> 22107 +endcidrange + +100 begincidrange +<499c> <499e> 28026 +<499f> <499f> 22106 +<49a0> <49b5> 28029 +<49b6> <49b6> 22109 +<49b7> <49b7> 22108 +<49b8> <49ff> 28051 +<4a00> <4aff> 28123 +<4b00> <4bff> 28379 +<4c00> <4c76> 28635 +<4c77> <4c77> 22116 +<4c78> <4c9e> 28754 +<4c9f> <4ca1> 22113 +<4ca2> <4ca2> 22117 +<4ca3> <4ca3> 22112 +<4ca4> <4cff> 28793 +<4d00> <4d12> 28885 +<4d13> <4d19> 22118 +<4d1a> <4dad> 28904 +<4dae> <4dae> 22125 +<4daf> <4db5> 29052 +<4e00> <4e00> 4162 +<4e01> <4e01> 1504 +<4e02> <4e02> 10072 +<4e03> <4e03> 3070 +<4e04> <4e06> 10073 +<4e07> <4e07> 3747 +<4e08> <4e08> 4458 +<4e09> <4e09> 3288 +<4e0a> <4e0a> 3336 +<4e0b> <4e0b> 3887 +<4e0c> <4e0c> 4696 +<4e0d> <4e0d> 1154 +<4e0e> <4e0e> 4304 +<4e0f> <4e0f> 10076 +<4e10> <4e10> 4698 +<4e11> <4e11> 1304 +<4e12> <4e12> 10077 +<4e13> <4e13> 4613 +<4e14> <4e14> 3151 +<4e15> <4e15> 4701 +<4e16> <4e16> 3415 +<4e17> <4e17> 10078 +<4e18> <4e18> 3181 +<4e19> <4e19> 1124 +<4e1a> <4e1a> 4156 +<4e1b> <4e1b> 1367 +<4e1c> <4e1c> 1514 +<4e1d> <4e1d> 3508 +<4e1e> <4e1e> 4703 +<4e1f> <4e21> 10079 +<4e22> <4e22> 1513 +<4e23> <4e23> 10082 +<4e24> <4e24> 2566 +<4e25> <4e25> 4088 +<4e26> <4e26> 10083 +<4e27> <4e27> 3294 +<4e28> <4e28> 4707 +<4e29> <4e29> 10084 +<4e2a> <4e2a> 1777 +<4e2b> <4e2b> 4071 +<4e2c> <4e2c> 5788 +<4e2d> <4e2d> 4559 +<4e2e> <4e2f> 10085 +<4e30> <4e30> 1662 +<4e31> <4e31> 10087 +<4e32> <4e32> 1329 +<4e33> <4e33> 10088 +<4e34> <4e34> 2594 +<4e35> <4e35> 10089 +<4e36> <4e36> 4722 +<4e37> <4e37> 10090 +<4e38> <4e38> 3737 +<4e39> <4e39> 1413 +<4e3a> <4e3a> 3769 +<4e3b> <4e3b> 4598 +<4e3c> <4e3c> 10091 +<4e3d> <4e3d> 2529 +<4e3e> <4e3e> 2312 +<4e3f> <4e3f> 4709 +<4e40> <4e42> 10092 +<4e43> <4e43> 2862 +<4e44> <4e44> 10095 +<4e45> <4e45> 2290 +<4e46> <4e46> 10096 +<4e47> <4e47> 4711 +<4e48> <4e48> 2745 +<4e49> <4e49> 4204 +<4e4a> <4e4a> 10097 +<4e4b> <4e4b> 4525 +<4e4c> <4e4c> 3817 +<4e4d> <4e4d> 4424 +<4e4e> <4e4e> 1964 +<4e4f> <4e4f> 1603 +<4e50> <4e50> 2497 +<4e51> <4e51> 10098 +<4e52> <4e52> 3032 +<4e53> <4e53> 2963 +<4e54> <4e54> 3140 +<4e55> <4e55> 10099 +<4e56> <4e56> 1837 +endcidrange + +100 begincidrange +<4e57> <4e57> 10100 +<4e58> <4e58> 1264 +<4e59> <4e59> 4185 +<4e5a> <4e5b> 10101 +<4e5c> <4e5c> 4725 +<4e5d> <4e5d> 2292 +<4e5e> <4e5e> 3089 +<4e5f> <4e5f> 4153 +<4e60> <4e60> 3869 +<4e61> <4e61> 3924 +<4e62> <4e65> 10103 +<4e66> <4e66> 3456 +<4e67> <4e68> 10107 +<4e69> <4e69> 4726 +<4e6a> <4e6f> 10109 +<4e70> <4e70> 2713 +<4e71> <4e71> 2681 +<4e72> <4e72> 10115 +<4e73> <4e73> 3268 +<4e74> <4e7d> 10116 +<4e7e> <4e7e> 3113 +<4e7f> <4e81> 10126 +<4e82> <4e82> 8281 +<4e83> <4e85> 10129 +<4e86> <4e86> 2580 +<4e87> <4e87> 10132 +<4e88> <4e88> 4301 +<4e89> <4e89> 4506 +<4e8a> <4e8a> 10133 +<4e8b> <4e8b> 3417 +<4e8c> <4e8c> 1597 +<4e8d> <4e8d> 4695 +<4e8e> <4e8e> 4287 +<4e8f> <4e8f> 2436 +<4e90> <4e90> 10134 +<4e91> <4e91> 4361 +<4e92> <4e92> 1978 +<4e93> <4e93> 4727 +<4e94> <4e94> 3828 +<4e95> <4e95> 2269 +<4e96> <4e97> 10135 +<4e98> <4e98> 4702 +<4e99> <4e99> 10137 +<4e9a> <4e9a> 4080 +<4e9b> <4e9b> 3956 +<4e9c> <4e9d> 10138 +<4e9e> <4e9e> 8689 +<4e9f> <4e9f> 4723 +<4ea0> <4ea0> 4867 +<4ea1> <4ea1> 3751 +<4ea2> <4ea2> 2375 +<4ea3> <4ea3> 10140 +<4ea4> <4ea4> 2188 +<4ea5> <4ea5> 1884 +<4ea6> <4ea6> 4199 +<4ea7> <4ea7> 1217 +<4ea8> <4ea8> 1943 +<4ea9> <4ea9> 2841 +<4eaa> <4eaa> 10141 +<4eab> <4eab> 3930 +<4eac> <4eac> 2264 +<4ead> <4ead> 3669 +<4eae> <4eae> 2570 +<4eaf> <4eb1> 10142 +<4eb2> <4eb2> 3156 +<4eb3> <4eb3> 4869 +<4eb4> <4eb4> 10145 +<4eb5> <4eb5> 4872 +<4eb6> <4eb9> 10146 +<4eba> <4eba> 3238 +<4ebb> <4ebb> 4767 +<4ebc> <4ebe> 10150 +<4ebf> <4ebf> 4193 +<4ec0> <4ec0> 3401 +<4ec1> <4ec1> 3237 +<4ec2> <4ec2> 4770 +<4ec3> <4ec3> 4768 +<4ec4> <4ec4> 4732 +<4ec5> <4ec5> 2247 +<4ec6> <4ec6> 3052 +<4ec7> <4ec7> 1301 +<4ec8> <4ec8> 10153 +<4ec9> <4ec9> 4769 +<4eca> <4eca> 2242 +<4ecb> <4ecb> 2234 +<4ecc> <4ecc> 10154 +<4ecd> <4ecd> 3247 +<4ece> <4ece> 1366 +<4ecf> <4ed0> 10155 +<4ed1> <4ed1> 2687 +<4ed2> <4ed2> 10157 +<4ed3> <4ed3> 1181 +<4ed4> <4ed4> 4653 +<4ed5> <4ed5> 3426 +<4ed6> <4ed6> 3568 +<4ed7> <4ed7> 4461 +<4ed8> <4ed8> 1713 +<4ed9> <4ed9> 3894 +<4eda> <4edc> 10158 +<4edd> <4edd> 4846 +endcidrange + +100 begincidrange +<4ede> <4ede> 4774 +<4edf> <4edf> 3111 +<4ee0> <4ee0> 10161 +<4ee1> <4ee1> 4772 +<4ee2> <4ee2> 10162 +<4ee3> <4ee3> 1405 +<4ee4> <4ee4> 2615 +<4ee5> <4ee5> 4187 +<4ee6> <4ee7> 10163 +<4ee8> <4ee8> 4771 +<4ee9> <4ee9> 10165 +<4eea> <4eea> 4174 +<4eeb> <4eeb> 4773 +<4eec> <4eec> 2764 +<4eed> <4eef> 10166 +<4ef0> <4ef0> 4127 +<4ef1> <4ef1> 10169 +<4ef2> <4ef2> 4568 +<4ef3> <4ef3> 4776 +<4ef4> <4ef4> 10170 +<4ef5> <4ef5> 4779 +<4ef6> <4ef6> 2161 +<4ef7> <4ef7> 2126 +<4ef8> <4efa> 10171 +<4efb> <4efb> 3241 +<4efc> <4efc> 10174 +<4efd> <4efd> 1658 +<4efe> <4efe> 10175 +<4eff> <4eff> 1631 +<4f00> <4f00> 10176 +<4f01> <4f01> 3090 +<4f02> <4f08> 10177 +<4f09> <4f09> 4782 +<4f0a> <4f0a> 4168 +<4f0b> <4f0c> 10184 +<4f0d> <4f0d> 3832 +<4f0e> <4f0e> 2098 +<4f0f> <4f0f> 1689 +<4f10> <4f10> 1602 +<4f11> <4f11> 4008 +<4f12> <4f16> 10186 +<4f17> <4f17> 4569 +<4f18> <4f18> 4266 +<4f19> <4f19> 2052 +<4f1a> <4f1a> 2038 +<4f1b> <4f1b> 4775 +<4f1c> <4f1d> 10191 +<4f1e> <4f1e> 3290 +<4f1f> <4f1f> 3775 +<4f20> <4f20> 1326 +<4f21> <4f21> 10193 +<4f22> <4f22> 4777 +<4f23> <4f23> 10194 +<4f24> <4f24> 3332 +<4f25> <4f25> 4780 +<4f26> <4f26> 2686 +<4f27> <4f27> 4781 +<4f28> <4f29> 10195 +<4f2a> <4f2a> 3776 +<4f2b> <4f2b> 4783 +<4f2c> <4f2e> 10197 +<4f2f> <4f2f> 1141 +<4f30> <4f30> 1817 +<4f31> <4f31> 10200 +<4f32> <4f32> 4791 +<4f33> <4f33> 10201 +<4f34> <4f34> 1012 +<4f35> <4f35> 10202 +<4f36> <4f36> 2607 +<4f37> <4f37> 10203 +<4f38> <4f38> 3365 +<4f39> <4f39> 10204 +<4f3a> <4f3a> 3514 +<4f3b> <4f3b> 10205 +<4f3c> <4f3c> 3515 +<4f3d> <4f3d> 4792 +<4f3e> <4f42> 10206 +<4f43> <4f43> 1481 +<4f44> <4f45> 10211 +<4f46> <4f46> 1420 +<4f47> <4f4c> 10213 +<4f4d> <4f4d> 3786 +<4f4e> <4f4e> 1454 +<4f4f> <4f4f> 4606 +<4f50> <4f50> 4689 +<4f51> <4f51> 4280 +<4f52> <4f52> 10219 +<4f53> <4f53> 3640 +<4f54> <4f54> 10220 +<4f55> <4f55> 1925 +<4f56> <4f56> 10221 +<4f57> <4f57> 4790 +<4f58> <4f58> 4848 +<4f59> <4f59> 4293 +<4f5a> <4f5a> 4787 +<4f5b> <4f5b> 1677 +<4f5c> <4f5c> 4692 +<4f5d> <4f5d> 4788 +<4f5e> <4f5e> 4784 +<4f5f> <4f5f> 4789 +endcidrange + +100 begincidrange +<4f60> <4f60> 2886 +<4f61> <4f62> 10222 +<4f63> <4f63> 4251 +<4f64> <4f64> 4778 +<4f65> <4f65> 4849 +<4f66> <4f66> 10224 +<4f67> <4f67> 4785 +<4f68> <4f68> 10225 +<4f69> <4f69> 2982 +<4f6a> <4f6b> 10226 +<4f6c> <4f6c> 2491 +<4f6d> <4f6e> 10228 +<4f6f> <4f6f> 4121 +<4f70> <4f70> 998 +<4f71> <4f72> 10230 +<4f73> <4f73> 2116 +<4f74> <4f74> 4794 +<4f75> <4f75> 10232 +<4f76> <4f76> 4793 +<4f77> <4f7a> 10233 +<4f7b> <4f7b> 4800 +<4f7c> <4f7c> 4802 +<4f7d> <4f7d> 10237 +<4f7e> <4f7e> 4799 +<4f7f> <4f7f> 3408 +<4f80> <4f82> 10238 +<4f83> <4f83> 4797 +<4f84> <4f84> 4533 +<4f85> <4f85> 10241 +<4f86> <4f86> 8178 +<4f87> <4f87> 10242 +<4f88> <4f88> 1283 +<4f89> <4f89> 4796 +<4f8a> <4f8a> 10243 +<4f8b> <4f8b> 2536 +<4f8c> <4f8c> 10244 +<4f8d> <4f8d> 3427 +<4f8e> <4f8e> 10245 +<4f8f> <4f8f> 4798 +<4f90> <4f90> 10246 +<4f91> <4f91> 4795 +<4f92> <4f93> 10247 +<4f94> <4f94> 4804 +<4f95> <4f95> 10249 +<4f96> <4f96> 8285 +<4f97> <4f97> 1520 +<4f98> <4f9a> 10250 +<4f9b> <4f9b> 1794 +<4f9c> <4f9c> 10253 +<4f9d> <4f9d> 4167 +<4f9e> <4f9f> 10254 +<4fa0> <4fa0> 3885 +<4fa1> <4fa2> 10256 +<4fa3> <4fa3> 2665 +<4fa4> <4fa4> 10258 +<4fa5> <4fa5> 2197 +<4fa6> <4fa6> 4493 +<4fa7> <4fa7> 1191 +<4fa8> <4fa8> 3141 +<4fa9> <4fa9> 2424 +<4faa> <4faa> 4801 +<4fab> <4fab> 10259 +<4fac> <4fac> 4803 +<4fad> <4fad> 10260 +<4fae> <4fae> 3833 +<4faf> <4faf> 1957 +<4fb0> <4fb4> 10261 +<4fb5> <4fb5> 3155 +<4fb6> <4fbe> 10266 +<4fbf> <4fbf> 1100 +<4fc0> <4fc1> 10275 +<4fc2> <4fc2> 9884 +<4fc3> <4fc3> 1372 +<4fc4> <4fc4> 1580 +<4fc5> <4fc5> 4808 +<4fc6> <4fc9> 10277 +<4fca> <4fca> 2350 +<4fcb> <4fcd> 10281 +<4fce> <4fce> 4850 +<4fcf> <4fcf> 3147 +<4fd0> <4fd0> 2537 +<4fd1> <4fd1> 4812 +<4fd2> <4fd6> 10284 +<4fd7> <4fd7> 3532 +<4fd8> <4fd8> 1690 +<4fd9> <4fd9> 10289 +<4fda> <4fda> 4809 +<4fdb> <4fdb> 10290 +<4fdc> <4fdc> 4811 +<4fdd> <4fdd> 1036 +<4fde> <4fde> 4294 +<4fdf> <4fdf> 4813 +<4fe0> <4fe0> 8629 +<4fe1> <4fe1> 3984 +<4fe2> <4fe2> 10291 +<4fe3> <4fe3> 4810 +<4fe4> <4fe5> 10292 +<4fe6> <4fe6> 4805 +<4fe7> <4fe7> 10294 +<4fe8> <4fe8> 4806 +endcidrange + +100 begincidrange +<4fe9> <4fe9> 2546 +<4fea> <4fea> 4807 +<4feb> <4fec> 10295 +<4fed> <4fed> 2150 +<4fee> <4fee> 4009 +<4fef> <4fef> 1700 +<4ff0> <4ff0> 10297 +<4ff1> <4ff1> 2322 +<4ff2> <4ff2> 10298 +<4ff3> <4ff3> 4817 +<4ff4> <4ff7> 10299 +<4ff8> <4ff8> 4814 +<4ff9> <4ff9> 10303 +<4ffa> <4ffa> 958 +<4ffb> <4ffd> 10304 +<4ffe> <4ffe> 4822 +<4fff> <4fff> 10307 +<5000> <5000> 8908 +<5001> <5005> 10308 +<5006> <5006> 8214 +<5007> <5008> 10313 +<5009> <5009> 7778 +<500a> <500a> 10315 +<500b> <500b> 7968 +<500c> <500c> 4824 +<500d> <500d> 1055 +<500e> <500e> 10316 +<500f> <500f> 4819 +<5010> <5010> 10317 +<5011> <5011> 8319 +<5012> <5012> 1434 +<5013> <5013> 10318 +<5014> <5014> 2338 +<5015> <5017> 10319 +<5018> <5018> 3611 +<5019> <5019> 1961 +<501a> <501a> 4183 +<501b> <501b> 10322 +<501c> <501c> 4823 +<501d> <501e> 10323 +<501f> <501f> 2233 +<5020> <5020> 10325 +<5021> <5021> 1232 +<5022> <5024> 10326 +<5025> <5025> 4825 +<5026> <5026> 2330 +<5027> <5027> 10329 +<5028> <5028> 4826 +<5029> <5029> 4815 +<502a> <502a> 2882 +<502b> <502b> 8284 +<502c> <502c> 4818 +<502d> <502d> 4821 +<502e> <502e> 4820 +<502f> <5039> 10330 +<503a> <503a> 4431 +<503b> <503b> 10341 +<503c> <503c> 4532 +<503d> <503d> 10342 +<503e> <503e> 3168 +<503f> <5042> 10343 +<5043> <5043> 4828 +<5044> <5046> 10347 +<5047> <5047> 2124 +<5048> <5048> 4830 +<5049> <5049> 8596 +<504a> <504b> 10350 +<504c> <504c> 4816 +<504d> <504d> 10352 +<504e> <504e> 4831 +<504f> <504f> 3018 +<5050> <5054> 10353 +<5055> <5055> 4829 +<5056> <5059> 10358 +<505a> <505a> 4691 +<505b> <505b> 10362 +<505c> <505c> 3668 +<505d> <5064> 10363 +<5065> <5065> 2162 +<5066> <506b> 10371 +<506c> <506c> 4832 +<506d> <5073> 10377 +<5074> <5074> 7781 +<5075> <5075> 8833 +<5076> <5076> 2941 +<5077> <5077> 3686 +<5078> <507a> 10384 +<507b> <507b> 4833 +<507c> <507d> 10387 +<507e> <507e> 4827 +<507f> <507f> 1226 +<5080> <5080> 2443 +<5081> <5084> 10389 +<5085> <5085> 1712 +<5086> <5087> 10393 +<5088> <5088> 2535 +<5089> <508c> 10395 +<508d> <508d> 1027 +<508e> <5095> 10399 +<5096> <5096> 8909 +endcidrange + +100 begincidrange +<5097> <5097> 10407 +<5098> <5098> 8458 +<5099> <5099> 7742 +<509a> <50a1> 10408 +<50a2> <50a2> 9855 +<50a3> <50a3> 1401 +<50a4> <50a4> 10416 +<50a5> <50a5> 4834 +<50a6> <50a6> 10417 +<50a7> <50a7> 4835 +<50a8> <50a8> 1317 +<50a9> <50a9> 4836 +<50aa> <50ab> 10418 +<50ac> <50ac> 1378 +<50ad> <50ad> 8750 +<50ae> <50b1> 10420 +<50b2> <50b2> 972 +<50b3> <50b3> 7830 +<50b4> <50b4> 8907 +<50b5> <50b5> 8812 +<50b6> <50b6> 10424 +<50b7> <50b7> 8471 +<50b8> <50b9> 10425 +<50ba> <50ba> 4837 +<50bb> <50bb> 3310 +<50bc> <50bd> 10427 +<50be> <50be> 8424 +<50bf> <50c1> 10429 +<50c2> <50c2> 8916 +<50c3> <50c4> 10432 +<50c5> <50c5> 8121 +<50c6> <50c8> 10434 +<50c9> <50c9> 8920 +<50ca> <50ce> 10437 +<50cf> <50cf> 3934 +<50d0> <50d0> 10442 +<50d1> <50d1> 8415 +<50d2> <50d4> 10443 +<50d5> <50d5> 8386 +<50d6> <50d6> 4838 +<50d7> <50d9> 10446 +<50da> <50da> 2574 +<50db> <50dd> 10449 +<50de> <50de> 8597 +<50df> <50e4> 10452 +<50e5> <50e5> 8108 +<50e6> <50e6> 4842 +<50e7> <50e7> 3303 +<50e8> <50e8> 8915 +<50e9> <50eb> 10458 +<50ec> <50ec> 4841 +<50ed> <50ed> 4840 +<50ee> <50ee> 4843 +<50ef> <50f2> 10461 +<50f3> <50f3> 3536 +<50f4> <50f4> 10465 +<50f5> <50f5> 2170 +<50f6> <50f8> 10466 +<50f9> <50f9> 8065 +<50fa> <50fa> 10469 +<50fb> <50fb> 3014 +<50fc> <50ff> 10470 +<5100> <5100> 8720 +<5101> <5101> 10474 +<5102> <5102> 8911 +<5103> <5103> 10475 +<5104> <5104> 8723 +<5105> <5105> 10476 +<5106> <5106> 4839 +<5107> <5107> 4844 +<5108> <5108> 8164 +<5109> <5109> 8080 +<510a> <510a> 10477 +<510b> <510b> 4845 +<510c> <510f> 10478 +<5110> <5110> 8918 +<5111> <5111> 10482 +<5112> <5112> 3264 +<5113> <5113> 10483 +<5114> <5114> 8912 +<5115> <5115> 8910 +<5116> <5117> 10484 +<5118> <5118> 9857 +<5119> <511e> 10486 +<511f> <511f> 7798 +<5120> <5120> 10492 +<5121> <5121> 2503 +<5122> <5129> 10493 +<512a> <512a> 8753 +<512b> <5131> 10501 +<5132> <5132> 7827 +<5133> <5136> 10508 +<5137> <5137> 8914 +<5138> <5139> 10512 +<513a> <513a> 8919 +<513b> <513b> 8917 +<513c> <513c> 8913 +<513d> <513e> 10514 +<513f> <513f> 1592 +<5140> <5140> 4697 +endcidrange + +100 begincidrange +<5141> <5141> 4365 +<5142> <5142> 10516 +<5143> <5143> 4333 +<5144> <5144> 4001 +<5145> <5145> 1289 +<5146> <5146> 4472 +<5147> <5147> 10517 +<5148> <5148> 3893 +<5149> <5149> 1851 +<514a> <514a> 10518 +<514b> <514b> 2392 +<514c> <514c> 10519 +<514d> <514d> 2791 +<514e> <5150> 10520 +<5151> <5151> 1553 +<5152> <5152> 7909 +<5153> <5153> 10523 +<5154> <5154> 3700 +<5155> <5155> 4866 +<5156> <5156> 4868 +<5157> <5159> 10524 +<515a> <515a> 1428 +<515b> <515b> 10527 +<515c> <515c> 1524 +<515d> <5161> 10528 +<5162> <5162> 2259 +<5163> <5164> 10533 +<5165> <5165> 3270 +<5166> <5167> 10535 +<5168> <5168> 3206 +<5169> <5169> 8229 +<516a> <516a> 10537 +<516b> <516b> 982 +<516c> <516c> 1796 +<516d> <516d> 2626 +<516e> <516e> 4854 +<516f> <516f> 10538 +<5170> <5170> 2471 +<5171> <5171> 1803 +<5172> <5172> 10539 +<5173> <5173> 1841 +<5174> <5174> 3990 +<5175> <5175> 1121 +<5176> <5176> 3075 +<5177> <5177> 2318 +<5178> <5178> 1477 +<5179> <5179> 4645 +<517a> <517a> 10540 +<517b> <517b> 4129 +<517c> <517c> 2137 +<517d> <517d> 3445 +<517e> <517f> 10541 +<5180> <5180> 2096 +<5181> <5181> 4858 +<5182> <5182> 4765 +<5183> <5184> 10543 +<5185> <5185> 2877 +<5186> <5187> 10545 +<5188> <5188> 1743 +<5189> <5189> 3224 +<518a> <518b> 10547 +<518c> <518c> 1192 +<518d> <518d> 4380 +<518e> <5191> 10549 +<5192> <5192> 2741 +<5193> <5194> 10553 +<5195> <5195> 2790 +<5196> <5196> 4884 +<5197> <5197> 3258 +<5198> <5198> 10555 +<5199> <5199> 3967 +<519a> <519a> 10556 +<519b> <519b> 2347 +<519c> <519c> 2922 +<519d> <519f> 10557 +<51a0> <51a0> 1843 +<51a1> <51a1> 10560 +<51a2> <51a2> 4885 +<51a3> <51a3> 10561 +<51a4> <51a4> 4332 +<51a5> <51a5> 4886 +<51a6> <51aa> 10562 +<51ab> <51ab> 4879 +<51ac> <51ac> 1515 +<51ad> <51ae> 10567 +<51af> <51af> 1672 +<51b0> <51b0> 1122 +<51b1> <51b1> 4880 +<51b2> <51b2> 1290 +<51b3> <51b3> 2341 +<51b4> <51b4> 10569 +<51b5> <51b5> 2435 +<51b6> <51b6> 4152 +<51b7> <51b7> 2511 +<51b8> <51ba> 10570 +<51bb> <51bb> 1522 +<51bc> <51bc> 4882 +<51bd> <51bd> 4881 +<51be> <51bf> 10573 +<51c0> <51c0> 2282 +endcidrange + +100 begincidrange +<51c1> <51c3> 10575 +<51c4> <51c4> 3071 +<51c5> <51c5> 10578 +<51c6> <51c6> 4633 +<51c7> <51c7> 4883 +<51c8> <51c8> 10579 +<51c9> <51c9> 2562 +<51ca> <51ca> 10580 +<51cb> <51cb> 1491 +<51cc> <51cc> 2609 +<51cd> <51cd> 7887 +<51ce> <51ce> 10581 +<51cf> <51cf> 2152 +<51d0> <51d0> 10582 +<51d1> <51d1> 1368 +<51d2> <51da> 10583 +<51db> <51db> 2598 +<51dc> <51dc> 10592 +<51dd> <51dd> 2912 +<51de> <51df> 10593 +<51e0> <51e0> 2091 +<51e1> <51e1> 1615 +<51e2> <51e3> 10595 +<51e4> <51e4> 1676 +<51e5> <51ea> 10597 +<51eb> <51eb> 4864 +<51ec> <51ec> 10603 +<51ed> <51ed> 3037 +<51ee> <51ee> 10604 +<51ef> <51ef> 2362 +<51f0> <51f0> 2016 +<51f1> <51f1> 8153 +<51f2> <51f2> 10605 +<51f3> <51f3> 1451 +<51f4> <51f4> 10606 +<51f5> <51f5> 5017 +<51f6> <51f6> 4002 +<51f7> <51f7> 10607 +<51f8> <51f8> 3690 +<51f9> <51f9> 967 +<51fa> <51fa> 1307 +<51fb> <51fb> 2060 +<51fc> <51fc> 5018 +<51fd> <51fd> 1894 +<51fe> <51fe> 10608 +<51ff> <51ff> 4391 +<5200> <5200> 1431 +<5201> <5201> 1492 +<5202> <5202> 4748 +<5203> <5203> 3243 +<5204> <5205> 10609 +<5206> <5206> 1651 +<5207> <5207> 3149 +<5208> <5208> 4749 +<5209> <5209> 10611 +<520a> <520a> 2364 +<520b> <520c> 10612 +<520d> <520d> 5003 +<520e> <520e> 4750 +<520f> <5210> 10614 +<5211> <5211> 3991 +<5212> <5212> 1987 +<5213> <5215> 10616 +<5216> <5216> 6510 +<5217> <5217> 2585 +<5218> <5218> 2622 +<5219> <5219> 4405 +<521a> <521a> 1744 +<521b> <521b> 1335 +<521c> <521c> 10619 +<521d> <521d> 1306 +<521e> <521f> 10620 +<5220> <5220> 3319 +<5221> <5223> 10622 +<5224> <5224> 2961 +<5225> <5227> 10625 +<5228> <5228> 2970 +<5229> <5229> 2534 +<522a> <522a> 10628 +<522b> <522b> 1113 +<522c> <522c> 10629 +<522d> <522d> 4751 +<522e> <522e> 1831 +<522f> <522f> 10630 +<5230> <5230> 1438 +<5231> <5232> 10631 +<5233> <5233> 4752 +<5234> <5235> 10633 +<5236> <5236> 4549 +<5237> <5237> 3479 +<5238> <5238> 3210 +<5239> <5239> 3307 +<523a> <523a> 1359 +<523b> <523b> 2393 +<523c> <523c> 10635 +<523d> <523d> 1869 +<523e> <523e> 10636 +<523f> <5240> 4753 +<5241> <5241> 1574 +<5242> <5242> 2100 +endcidrange + +100 begincidrange +<5243> <5243> 3645 +<5244> <5244> 8904 +<5245> <5246> 10637 +<5247> <5247> 8803 +<5248> <5249> 10639 +<524a> <524a> 3940 +<524b> <524b> 9859 +<524c> <524c> 4755 +<524d> <524d> 3117 +<524e> <524f> 10641 +<5250> <5250> 1833 +<5251> <5251> 2164 +<5252> <5253> 10643 +<5254> <5254> 3633 +<5255> <5255> 10645 +<5256> <5256> 3049 +<5257> <525a> 10646 +<525b> <525b> 7959 +<525c> <525c> 4758 +<525d> <525d> 10650 +<525e> <525e> 4756 +<525f> <5260> 10651 +<5261> <5261> 4757 +<5262> <5264> 10653 +<5265> <5265> 1033 +<5266> <5266> 10656 +<5267> <5267> 2326 +<5268> <5268> 10657 +<5269> <5269> 3386 +<526a> <526a> 2151 +<526b> <526d> 10658 +<526e> <526e> 7979 +<526f> <526f> 1708 +<5270> <5271> 10661 +<5272> <5272> 1769 +<5273> <5273> 10663 +<5274> <5274> 8906 +<5275> <5275> 7833 +<5276> <527c> 10664 +<527d> <527d> 4760 +<527e> <527e> 10671 +<527f> <527f> 2204 +<5280> <5280> 10672 +<5281> <5281> 4762 +<5282> <5282> 4761 +<5283> <5283> 8015 +<5284> <5286> 10673 +<5287> <5287> 8143 +<5288> <5288> 3005 +<5289> <5289> 8246 +<528a> <528a> 7994 +<528b> <528b> 10676 +<528c> <528c> 8905 +<528d> <528d> 8089 +<528e> <528f> 10677 +<5290> <5290> 4763 +<5291> <5291> 8053 +<5292> <5292> 10679 +<5293> <5293> 4764 +<5294> <529a> 10680 +<529b> <529b> 2543 +<529c> <529c> 10687 +<529d> <529d> 3211 +<529e> <529e> 1015 +<529f> <529f> 1791 +<52a0> <52a0> 2118 +<52a1> <52a1> 3840 +<52a2> <52a2> 5005 +<52a3> <52a3> 2588 +<52a4> <52a7> 10688 +<52a8> <52a8> 1518 +<52a9> <52a9> 4601 +<52aa> <52aa> 2925 +<52ab> <52ab> 2218 +<52ac> <52ad> 5006 +<52ae> <52b0> 10692 +<52b1> <52b1> 2531 +<52b2> <52b2> 2257 +<52b3> <52b3> 2488 +<52b4> <52bd> 10695 +<52be> <52be> 5008 +<52bf> <52bf> 3421 +<52c0> <52c0> 10705 +<52c1> <52c1> 8126 +<52c2> <52c2> 10706 +<52c3> <52c3> 1137 +<52c4> <52c6> 10707 +<52c7> <52c7> 4263 +<52c8> <52c8> 10710 +<52c9> <52c9> 2792 +<52ca> <52ca> 10711 +<52cb> <52cb> 4052 +<52cc> <52cf> 10712 +<52d0> <52d0> 5010 +<52d1> <52d1> 10716 +<52d2> <52d2> 2496 +<52d3> <52d4> 10717 +<52d5> <52d5> 7885 +<52d6> <52d6> 5011 +<52d7> <52d7> 10719 +endcidrange + +100 begincidrange +<52d8> <52d8> 2366 +<52d9> <52d9> 8617 +<52da> <52da> 10720 +<52db> <52db> 8678 +<52dc> <52dc> 10721 +<52dd> <52dd> 8487 +<52de> <52de> 8195 +<52df> <52df> 2847 +<52e0> <52e1> 10722 +<52e2> <52e2> 8498 +<52e3> <52e3> 10724 +<52e4> <52e4> 3159 +<52e5> <52ef> 10725 +<52f0> <52f0> 5012 +<52f1> <52f1> 8995 +<52f2> <52f4> 10736 +<52f5> <52f5> 8209 +<52f6> <52f7> 10739 +<52f8> <52f8> 8437 +<52f9> <52f9> 4860 +<52fa> <52fa> 3344 +<52fb> <52fd> 10741 +<52fe> <52fe> 1805 +<52ff> <52ff> 3839 +<5300> <5300> 4363 +<5301> <5304> 10744 +<5305> <5305> 1031 +<5306> <5306> 1365 +<5307> <5307> 10748 +<5308> <5308> 4004 +<5309> <530c> 10749 +<530d> <530d> 4861 +<530e> <530e> 10753 +<530f> <530f> 5301 +<5310> <5310> 4863 +<5311> <5314> 10754 +<5315> <5315> 4710 +<5316> <5316> 1988 +<5317> <5317> 1050 +<5318> <5318> 10758 +<5319> <5319> 1276 +<531a> <531a> 4740 +<531b> <531c> 10759 +<531d> <531d> 4372 +<531e> <531f> 10761 +<5320> <5320> 2180 +<5321> <5321> 2428 +<5322> <5322> 10763 +<5323> <5323> 3880 +<5324> <5325> 10764 +<5326> <5326> 4742 +<5327> <5329> 10766 +<532a> <532a> 1640 +<532b> <532c> 10769 +<532d> <532d> 8901 +<532e> <532e> 4743 +<532f> <532f> 8030 +<5330> <5330> 10771 +<5331> <5331> 8902 +<5332> <5338> 10772 +<5339> <5339> 3012 +<533a> <533a> 3189 +<533b> <533b> 4164 +<533c> <533d> 10779 +<533e> <533e> 4744 +<533f> <533f> 2887 +<5340> <5340> 8431 +<5341> <5341> 3397 +<5342> <5342> 10781 +<5343> <5343> 3108 +<5344> <5344> 10782 +<5345> <5345> 4700 +<5346> <5346> 10783 +<5347> <5347> 3382 +<5348> <5348> 3830 +<5349> <5349> 2033 +<534a> <534a> 1014 +<534b> <534d> 10784 +<534e> <534e> 1983 +<534f> <534f> 3960 +<5350> <5350> 10787 +<5351> <5351> 1049 +<5352> <5352> 4673 +<5353> <5353> 4636 +<5354> <5354> 8656 +<5355> <5355> 1414 +<5356> <5356> 2715 +<5357> <5357> 2866 +<5358> <5359> 10788 +<535a> <535a> 1136 +<535b> <535b> 10790 +<535c> <535c> 1150 +<535d> <535d> 10791 +<535e> <535e> 1102 +<535f> <535f> 5370 +<5360> <5360> 4445 +<5361> <5361> 2357 +<5362> <5362> 2643 +<5363> <5363> 4747 +<5364> <5364> 2648 +endcidrange + +100 begincidrange +<5365> <5365> 10792 +<5366> <5366> 4746 +<5367> <5367> 3811 +<5368> <5368> 10793 +<5369> <5369> 4946 +<536a> <536a> 10794 +<536b> <536b> 3791 +<536c> <536d> 10795 +<536e> <536e> 4714 +<536f> <536f> 2739 +<5370> <5370> 4230 +<5371> <5371> 3762 +<5372> <5372> 10797 +<5373> <5373> 2087 +<5374> <5374> 3215 +<5375> <5375> 2680 +<5376> <5376> 10798 +<5377> <5377> 2332 +<5378> <5378> 3969 +<5379> <5379> 10799 +<537a> <537a> 4947 +<537b> <537e> 10800 +<537f> <537f> 3169 +<5380> <5381> 10804 +<5382> <5382> 1228 +<5383> <5383> 10806 +<5384> <5384> 1585 +<5385> <5385> 3663 +<5386> <5386> 2533 +<5387> <5388> 10807 +<5389> <5389> 2530 +<538a> <538a> 10809 +<538b> <538b> 4066 +<538c> <538c> 4106 +<538d> <538d> 4733 +<538e> <5394> 10810 +<5395> <5395> 1189 +<5396> <5397> 10817 +<5398> <5398> 2512 +<5399> <5399> 8897 +<539a> <539a> 1960 +<539b> <539c> 10819 +<539d> <539d> 4734 +<539e> <539e> 10821 +<539f> <539f> 4336 +<53a0> <53a0> 7780 +<53a1> <53a1> 10822 +<53a2> <53a2> 3918 +<53a3> <53a3> 4735 +<53a4> <53a4> 10823 +<53a5> <53a5> 4736 +<53a6> <53a6> 3888 +<53a7> <53a7> 10824 +<53a8> <53a8> 1309 +<53a9> <53a9> 2294 +<53aa> <53ac> 10825 +<53ad> <53ad> 8697 +<53ae> <53ae> 4737 +<53af> <53b1> 10828 +<53b2> <53b2> 8208 +<53b3> <53b3> 10831 +<53b4> <53b4> 8898 +<53b5> <53b5> 10832 +<53b6> <53b6> 5020 +<53b7> <53ba> 10833 +<53bb> <53bb> 3200 +<53bc> <53be> 10837 +<53bf> <53bf> 3909 +<53c0> <53c0> 10840 +<53c1> <53c1> 3289 +<53c2> <53c2> 1173 +<53c3> <53c3> 7770 +<53c4> <53c7> 10841 +<53c8> <53c8> 4283 +<53c9> <53c9> 1197 +<53ca> <53ca> 2083 +<53cb> <53cb> 4278 +<53cc> <53cc> 3488 +<53cd> <53cd> 1617 +<53ce> <53d0> 10845 +<53d1> <53d1> 1599 +<53d2> <53d3> 10848 +<53d4> <53d4> 3452 +<53d5> <53d5> 10850 +<53d6> <53d6> 3196 +<53d7> <53d7> 3443 +<53d8> <53d8> 1101 +<53d9> <53d9> 4027 +<53da> <53da> 10851 +<53db> <53db> 2962 +<53dc> <53de> 10852 +<53df> <53df> 5013 +<53e0> <53e0> 1503 +<53e1> <53e1> 10855 +<53e2> <53e2> 7842 +<53e3> <53e3> 2407 +<53e4> <53e4> 1822 +<53e5> <53e5> 2323 +<53e6> <53e6> 2614 +<53e7> <53e7> 10856 +endcidrange + +100 begincidrange +<53e8> <53e8> 5374 +<53e9> <53e9> 5373 +<53ea> <53ea> 4538 +<53eb> <53eb> 2209 +<53ec> <53ec> 4474 +<53ed> <53ed> 979 +<53ee> <53ee> 1506 +<53ef> <53ef> 2390 +<53f0> <53f0> 3579 +<53f1> <53f1> 5371 +<53f2> <53f2> 3406 +<53f3> <53f3> 4279 +<53f4> <53f4> 10857 +<53f5> <53f5> 4741 +<53f6> <53f6> 4157 +<53f7> <53f7> 1916 +<53f8> <53f8> 3507 +<53f9> <53f9> 3601 +<53fa> <53fa> 10858 +<53fb> <53fb> 5375 +<53fc> <53fc> 1489 +<53fd> <53fd> 5372 +<53fe> <53ff> 10859 +<5400> <5400> 10861 +<5401> <5401> 4314 +<5402> <5402> 10862 +<5403> <5403> 1273 +<5404> <5404> 1778 +<5405> <5405> 10863 +<5406> <5406> 5378 +<5407> <5407> 10864 +<5408> <5408> 1926 +<5409> <5409> 2077 +<540a> <540a> 1494 +<540b> <540b> 10865 +<540c> <540c> 3677 +<540d> <540d> 2816 +<540e> <540e> 1962 +<540f> <540f> 2527 +<5410> <5410> 3699 +<5411> <5411> 3935 +<5412> <5412> 5376 +<5413> <5413> 3890 +<5414> <5414> 10866 +<5415> <5415> 2663 +<5416> <5416> 5377 +<5417> <5417> 2711 +<5418> <541a> 10867 +<541b> <541b> 2348 +<541c> <541c> 10870 +<541d> <541d> 2600 +<541e> <541e> 3709 +<541f> <541f> 4222 +<5420> <5420> 1642 +<5421> <5421> 5385 +<5422> <5422> 10871 +<5423> <5423> 5388 +<5424> <5425> 10872 +<5426> <5426> 1678 +<5427> <5427> 980 +<5428> <5428> 1557 +<5429> <5429> 1649 +<542a> <542a> 10874 +<542b> <542b> 1891 +<542c> <542c> 3664 +<542d> <542d> 2401 +<542e> <542e> 3494 +<542f> <542f> 3091 +<5430> <5430> 10875 +<5431> <5431> 4519 +<5432> <5432> 5389 +<5433> <5433> 10876 +<5434> <5434> 3825 +<5435> <5435> 1240 +<5436> <5437> 10877 +<5438> <5438> 3851 +<5439> <5439> 1336 +<543a> <543a> 10879 +<543b> <543b> 3798 +<543c> <543c> 1959 +<543d> <543d> 10880 +<543e> <543e> 3824 +<543f> <543f> 10881 +<5440> <5440> 4070 +<5441> <5442> 10882 +<5443> <5443> 5384 +<5444> <5445> 10884 +<5446> <5446> 1399 +<5447> <5447> 10886 +<5448> <5448> 1263 +<5449> <5449> 10887 +<544a> <544a> 1761 +<544b> <544b> 5379 +<544c> <544f> 10888 +<5450> <5450> 2856 +<5451> <5451> 10892 +<5452> <5454> 5380 +<5455> <5455> 2940 +<5456> <5456> 5383 +<5457> <5457> 5386 +endcidrange + +100 begincidrange +<5458> <5458> 4340 +<5459> <5459> 5387 +<545a> <545a> 10893 +<545b> <545b> 3127 +<545c> <545c> 3815 +<545d> <5461> 10894 +<5462> <5462> 2875 +<5463> <5463> 10899 +<5464> <5464> 5394 +<5465> <5465> 10900 +<5466> <5466> 5399 +<5467> <5467> 10901 +<5468> <5468> 4571 +<5469> <5470> 10902 +<5471> <5471> 5393 +<5472> <5472> 5410 +<5473> <5473> 3781 +<5474> <5474> 10910 +<5475> <5475> 1918 +<5476> <5476> 5398 +<5477> <5477> 5392 +<5478> <5478> 2975 +<5479> <547a> 10911 +<547b> <547b> 3364 +<547c> <547c> 1963 +<547d> <547d> 2817 +<547e> <547f> 10913 +<5480> <5480> 2310 +<5481> <5481> 10915 +<5482> <5482> 5390 +<5483> <5483> 10916 +<5484> <5484> 5397 +<5485> <5485> 10917 +<5486> <5486> 2969 +<5487> <548a> 10918 +<548b> <548b> 4423 +<548c> <548c> 1924 +<548d> <548d> 10922 +<548e> <548e> 2299 +<548f> <548f> 4258 +<5490> <5490> 1723 +<5491> <5491> 10923 +<5492> <5492> 4579 +<5493> <5493> 10924 +<5494> <5494> 5391 +<5495> <5495> 1815 +<5496> <5496> 2356 +<5497> <5498> 10925 +<5499> <5499> 2629 +<549a> <549b> 5395 +<549c> <549c> 10927 +<549d> <549d> 5400 +<549e> <54a2> 10928 +<54a3> <54a3> 5411 +<54a4> <54a4> 5421 +<54a5> <54a5> 10933 +<54a6> <54a6> 5407 +<54a7> <54a7> 5406 +<54a8> <54a8> 4646 +<54a9> <54aa> 5419 +<54ab> <54ab> 5991 +<54ac> <54ac> 4142 +<54ad> <54ad> 5402 +<54ae> <54ae> 10934 +<54af> <54af> 2358 +<54b0> <54b0> 10935 +<54b1> <54b1> 4382 +<54b2> <54b2> 10936 +<54b3> <54b3> 2389 +<54b4> <54b4> 5404 +<54b5> <54b7> 10937 +<54b8> <54b8> 3897 +<54b9> <54ba> 10940 +<54bb> <54bb> 5413 +<54bc> <54bc> 9069 +<54bd> <54bd> 4083 +<54be> <54be> 10942 +<54bf> <54bf> 5414 +<54c0> <54c0> 946 +<54c1> <54c1> 3030 +<54c2> <54c2> 5403 +<54c3> <54c3> 10943 +<54c4> <54c4> 1948 +<54c5> <54c5> 10944 +<54c6> <54c6> 1566 +<54c7> <54c7> 3724 +<54c8> <54c8> 1879 +<54c9> <54c9> 4376 +<54ca> <54cb> 10945 +<54cc> <54cc> 5415 +<54cd> <54cd> 3929 +<54ce> <54ce> 944 +<54cf> <54cf> 5423 +<54d0> <54d0> 5401 +<54d1> <54d1> 4079 +<54d2> <54d2> 5405 +<54d3> <54d4> 5408 +<54d5> <54d5> 5412 +<54d6> <54d6> 10947 +<54d7> <54d7> 1982 +endcidrange + +100 begincidrange +<54d8> <54d8> 10948 +<54d9> <54da> 5416 +<54db> <54db> 10949 +<54dc> <54dc> 5418 +<54dd> <54dd> 5422 +<54de> <54de> 5424 +<54df> <54df> 4249 +<54e0> <54e0> 10950 +<54e1> <54e1> 8775 +<54e2> <54e4> 10951 +<54e5> <54e5> 1762 +<54e6> <54e6> 2935 +<54e7> <54e7> 5426 +<54e8> <54e8> 3347 +<54e9> <54e9> 2545 +<54ea> <54ea> 2855 +<54eb> <54ec> 10954 +<54ed> <54ed> 2411 +<54ee> <54ee> 3941 +<54ef> <54f1> 10956 +<54f2> <54f2> 4477 +<54f3> <54f3> 5430 +<54f4> <54f9> 10959 +<54fa> <54fa> 1151 +<54fb> <54fb> 10965 +<54fc> <54fc> 1942 +<54fd> <54fd> 5428 +<54fe> <54fe> 10966 +<54ff> <54ff> 5009 +<5500> <5500> 10967 +<5501> <5501> 4109 +<5502> <5503> 10968 +<5504> <5504> 9068 +<5505> <5505> 10970 +<5506> <5506> 3561 +<5507> <5507> 1344 +<5508> <5508> 10971 +<5509> <5509> 945 +<550a> <550e> 10972 +<550f> <550f> 5433 +<5510> <5510> 3609 +<5511> <5511> 5434 +<5512> <5513> 10977 +<5514> <5514> 5429 +<5515> <551a> 10979 +<551b> <551b> 5425 +<551c> <551f> 10985 +<5520> <5520> 5427 +<5521> <5521> 10989 +<5522> <5523> 5431 +<5524> <5524> 2002 +<5525> <5526> 10990 +<5527> <5527> 5435 +<5528> <5529> 10992 +<552a> <552a> 5436 +<552b> <552b> 10994 +<552c> <552c> 1976 +<552d> <552d> 10995 +<552e> <552e> 3442 +<552f> <552f> 3767 +<5530> <5530> 5453 +<5531> <5531> 1231 +<5532> <5532> 10996 +<5533> <5533> 5452 +<5534> <5536> 10997 +<5537> <5537> 5447 +<5538> <553b> 11000 +<553c> <553c> 5446 +<553d> <553d> 11004 +<553e> <553e> 3722 +<553f> <553f> 5444 +<5540> <5540> 11005 +<5541> <5541> 5442 +<5542> <5542> 11006 +<5543> <5543> 2397 +<5544> <5544> 4641 +<5545> <5545> 11007 +<5546> <5546> 3333 +<5547> <5548> 11008 +<5549> <5549> 5440 +<554a> <554a> 940 +<554b> <554e> 11010 +<554f> <554f> 8604 +<5550> <5550> 5445 +<5551> <5552> 11014 +<5553> <5553> 8393 +<5554> <5554> 11016 +<5555> <5555> 5443 +<5556> <5556> 5448 +<5557> <555b> 11017 +<555c> <555c> 5454 +<555d> <555d> 11022 +<555e> <555e> 8688 +<555f> <5560> 11023 +<5561> <5561> 1637 +<5562> <5563> 11025 +<5564> <5564> 3008 +<5565> <5565> 3311 +<5566> <5566> 2461 +<5567> <5567> 5437 +endcidrange + +100 begincidrange +<5568> <5569> 11027 +<556a> <556a> 2943 +<556b> <556b> 11029 +<556c> <556c> 4730 +<556d> <556d> 5441 +<556e> <556e> 2905 +<556f> <5574> 11030 +<5575> <5577> 5449 +<5578> <5578> 3952 +<5579> <557a> 11036 +<557b> <557b> 5466 +<557c> <557c> 3639 +<557d> <557d> 11038 +<557e> <557e> 5463 +<557f> <557f> 11039 +<5580> <5580> 2355 +<5581> <5581> 5461 +<5582> <5582> 3784 +<5583> <5583> 5457 +<5584> <5584> 3327 +<5585> <5586> 11040 +<5587> <5587> 2457 +<5588> <5588> 5460 +<5589> <5589> 1956 +<558a> <558a> 1895 +<558b> <558b> 5455 +<558c> <558e> 11042 +<558f> <558f> 5438 +<5590> <5590> 11045 +<5591> <5591> 5465 +<5592> <5593> 11046 +<5594> <5594> 5470 +<5595> <5597> 11048 +<5598> <5598> 1328 +<5599> <5599> 5471 +<559a> <559b> 11051 +<559c> <559c> 3871 +<559d> <559d> 1919 +<559e> <559e> 11053 +<559f> <559f> 5462 +<55a0> <55a6> 11054 +<55a7> <55a7> 4037 +<55a8> <55a9> 11061 +<55aa> <55aa> 8459 +<55ab> <55ab> 11063 +<55ac> <55ac> 8414 +<55ad> <55ad> 11064 +<55ae> <55ae> 7850 +<55af> <55b0> 11065 +<55b1> <55b1> 5458 +<55b2> <55b2> 8748 +<55b3> <55b3> 4414 +<55b4> <55b4> 11067 +<55b5> <55b5> 5439 +<55b6> <55b6> 11068 +<55b7> <55b7> 2984 +<55b8> <55b8> 11069 +<55b9> <55b9> 5459 +<55ba> <55ba> 11070 +<55bb> <55bb> 4316 +<55bc> <55bc> 11071 +<55bd> <55be> 5468 +<55bf> <55c3> 11072 +<55c4> <55c4> 5482 +<55c5> <55c5> 4012 +<55c6> <55c6> 8408 +<55c7> <55c7> 8896 +<55c8> <55c8> 11077 +<55c9> <55c9> 5474 +<55ca> <55cb> 11078 +<55cc> <55cd> 5487 +<55ce> <55ce> 8303 +<55cf> <55d0> 11080 +<55d1> <55d1> 5476 +<55d2> <55d2> 5456 +<55d3> <55d3> 3293 +<55d4> <55d4> 5479 +<55d5> <55d5> 11082 +<55d6> <55d6> 5464 +<55d7> <55d9> 11083 +<55da> <55da> 8609 +<55db> <55db> 11086 +<55dc> <55dc> 3423 +<55dd> <55dd> 5481 +<55de> <55de> 11087 +<55df> <55df> 5467 +<55e0> <55e0> 11088 +<55e1> <55e1> 3802 +<55e2> <55e2> 11089 +<55e3> <55e3> 3512 +<55e4> <55e4> 5491 +<55e5> <55e5> 5484 +<55e6> <55e6> 5480 +<55e7> <55e7> 11090 +<55e8> <55e8> 5489 +<55e9> <55e9> 9081 +<55ea> <55ea> 5472 +<55eb> <55ec> 5477 +<55ed> <55ee> 11091 +<55ef> <55ef> 5483 +endcidrange + +100 begincidrange +<55f0> <55f1> 11093 +<55f2> <55f3> 5485 +<55f4> <55f4> 11095 +<55f5> <55f5> 5490 +<55f6> <55f6> 9074 +<55f7> <55f7> 5473 +<55f8> <55fc> 11096 +<55fd> <55fd> 3529 +<55fe> <55fe> 5499 +<55ff> <55ff> 11101 +<5600> <5600> 5500 +<5601> <5601> 5496 +<5602> <5605> 11102 +<5606> <5606> 8554 +<5607> <5607> 11106 +<5608> <5608> 5494 +<5609> <5609> 2113 +<560a> <560b> 11107 +<560c> <560c> 5495 +<560d> <560d> 9084 +<560e> <560e> 1725 +<560f> <560f> 4731 +<5610> <5613> 11109 +<5614> <5614> 8368 +<5615> <5615> 11113 +<5616> <5616> 9082 +<5617> <5617> 7796 +<5618> <5618> 4021 +<5619> <561a> 11114 +<561b> <561b> 2710 +<561c> <561c> 9079 +<561d> <561d> 11116 +<561e> <561e> 5493 +<561f> <561f> 5475 +<5620> <5622> 11117 +<5623> <5623> 5498 +<5624> <5624> 5497 +<5625> <5626> 11120 +<5627> <5627> 5501 +<5628> <5628> 11122 +<5629> <5629> 8012 +<562a> <562b> 11123 +<562c> <562c> 5506 +<562d> <562d> 5502 +<562e> <562e> 9080 +<562f> <562f> 8655 +<5630> <5630> 9064 +<5631> <5631> 4597 +<5632> <5632> 1237 +<5633> <5633> 11125 +<5634> <5634> 4681 +<5635> <5635> 9073 +<5636> <5636> 3504 +<5637> <5637> 11126 +<5638> <5638> 9065 +<5639> <5639> 5504 +<563a> <563a> 11127 +<563b> <563b> 3850 +<563c> <563e> 11128 +<563f> <563f> 1936 +<5640> <5640> 11131 +<5641> <5641> 9844 +<5642> <564b> 11132 +<564c> <564c> 5511 +<564d> <564d> 5507 +<564e> <564e> 4148 +<564f> <5653> 11142 +<5654> <5654> 5512 +<5655> <5656> 11147 +<5657> <5657> 5505 +<5658> <5658> 5503 +<5659> <5659> 5509 +<565a> <565b> 11149 +<565c> <565c> 5510 +<565d> <565d> 9071 +<565e> <565f> 11151 +<5660> <5660> 9072 +<5661> <5661> 11153 +<5662> <5662> 5508 +<5663> <5663> 11154 +<5664> <5664> 5514 +<5665> <5665> 9078 +<5666> <5666> 9075 +<5667> <5667> 11155 +<5668> <5668> 3094 +<5669> <5669> 4706 +<566a> <566a> 4398 +<566b> <566b> 5516 +<566c> <566c> 3424 +<566d> <566e> 11156 +<566f> <566f> 9087 +<5670> <5670> 11158 +<5671> <5671> 5515 +<5672> <5672> 9076 +<5673> <5673> 11159 +<5674> <5674> 8373 +<5675> <5675> 11160 +<5676> <5676> 1724 +<5677> <5677> 11161 +<5678> <5678> 7899 +endcidrange + +100 begincidrange +<5679> <5679> 9842 +<567a> <567a> 11162 +<567b> <567c> 5517 +<567d> <567f> 11163 +<5680> <5680> 9070 +<5681> <5684> 11166 +<5685> <5685> 5519 +<5686> <5686> 5513 +<5687> <5687> 8631 +<5688> <568b> 11170 +<568c> <568c> 9077 +<568d> <568d> 11174 +<568e> <568e> 1910 +<568f> <568f> 3642 +<5690> <5692> 11175 +<5693> <5693> 5520 +<5694> <5694> 11178 +<5695> <5695> 9090 +<5696> <5698> 11179 +<5699> <5699> 8350 +<569a> <56a2> 11182 +<56a3> <56a3> 3942 +<56a4> <56a5> 11191 +<56a6> <56a6> 9067 +<56a7> <56a7> 11193 +<56a8> <56a8> 8249 +<56a9> <56ad> 11194 +<56ae> <56ae> 9887 +<56af> <56af> 5521 +<56b0> <56b2> 11199 +<56b3> <56b3> 9085 +<56b4> <56b4> 8693 +<56b5> <56b5> 11202 +<56b6> <56b6> 9089 +<56b7> <56b7> 3229 +<56b8> <56bb> 11203 +<56bc> <56bc> 2193 +<56bd> <56bf> 11207 +<56c0> <56c0> 9083 +<56c1> <56c1> 9086 +<56c2> <56c2> 8652 +<56c3> <56c4> 11210 +<56c5> <56c5> 8923 +<56c6> <56c7> 11212 +<56c8> <56c8> 9066 +<56c9> <56c9> 9865 +<56ca> <56ca> 2869 +<56cb> <56cb> 11214 +<56cc> <56cc> 9879 +<56cd> <56d0> 11215 +<56d1> <56d1> 8865 +<56d2> <56d3> 11219 +<56d4> <56d4> 5522 +<56d5> <56d6> 11221 +<56d7> <56d7> 5523 +<56d8> <56d9> 11223 +<56da> <56da> 3185 +<56db> <56db> 3513 +<56dc> <56dc> 11225 +<56dd> <56dd> 5524 +<56de> <56de> 2029 +<56df> <56df> 4716 +<56e0> <56e0> 4217 +<56e1> <56e1> 5525 +<56e2> <56e2> 3702 +<56e3> <56e3> 11226 +<56e4> <56e4> 1561 +<56e5> <56ea> 11227 +<56eb> <56eb> 5527 +<56ec> <56ec> 11233 +<56ed> <56ed> 4339 +<56ee> <56ef> 11234 +<56f0> <56f0> 2450 +<56f1> <56f1> 1364 +<56f2> <56f3> 11236 +<56f4> <56f4> 3766 +<56f5> <56f5> 5526 +<56f6> <56f8> 11238 +<56f9> <56f9> 5528 +<56fa> <56fa> 1829 +<56fb> <56fc> 11241 +<56fd> <56fd> 1875 +<56fe> <56fe> 3693 +<56ff> <56ff> 5529 +<5700> <5702> 11243 +<5703> <5703> 3059 +<5704> <5704> 5530 +<5705> <5705> 11246 +<5706> <5706> 4341 +<5707> <5707> 9091 +<5708> <5708> 3201 +<5709> <5709> 5532 +<570a> <570a> 5531 +<570b> <570b> 7997 +<570c> <570c> 11247 +<570d> <570d> 8591 +<570e> <5711> 11248 +<5712> <5712> 8774 +<5713> <5713> 8776 +<5714> <5715> 11252 +endcidrange + +100 begincidrange +<5716> <5716> 8574 +<5717> <5717> 11254 +<5718> <5718> 8576 +<5719> <571b> 11255 +<571c> <571c> 5533 +<571d> <571e> 11258 +<571f> <571f> 3698 +<5720> <5722> 11260 +<5723> <5723> 3388 +<5724> <5727> 11263 +<5728> <5728> 4381 +<5729> <5729> 5031 +<572a> <572a> 5033 +<572b> <572b> 11267 +<572c> <572c> 5032 +<572d> <572d> 1856 +<572e> <572f> 5036 +<5730> <5730> 1465 +<5731> <5732> 11268 +<5733> <5733> 5034 +<5734> <5738> 11270 +<5739> <5739> 5035 +<573a> <573a> 1222 +<573b> <573b> 5039 +<573c> <573d> 11275 +<573e> <573e> 2061 +<573f> <573f> 11277 +<5740> <5740> 4534 +<5741> <5741> 11278 +<5742> <5742> 5040 +<5743> <5746> 11279 +<5747> <5747> 2344 +<5748> <5749> 11283 +<574a> <574a> 1624 +<574b> <574b> 11285 +<574c> <574c> 5024 +<574d> <574d> 3585 +<574e> <574e> 2367 +<574f> <574f> 1994 +<5750> <5750> 4693 +<5751> <5751> 2400 +<5752> <5756> 11286 +<5757> <5757> 2422 +<5758> <5759> 11291 +<575a> <575a> 2132 +<575b> <575b> 3590 +<575c> <575c> 5038 +<575d> <575d> 990 +<575e> <575e> 3834 +<575f> <575f> 1653 +<5760> <5760> 4630 +<5761> <5761> 3041 +<5762> <5763> 11293 +<5764> <5764> 2447 +<5765> <5765> 11295 +<5766> <5766> 3596 +<5767> <5767> 11296 +<5768> <5768> 5047 +<5769> <5769> 5041 +<576a> <576a> 3033 +<576b> <576b> 5043 +<576c> <576c> 11297 +<576d> <576d> 5048 +<576e> <576e> 11298 +<576f> <576f> 3000 +<5770> <5772> 11299 +<5773> <5773> 5050 +<5774> <5775> 11302 +<5776> <5776> 5049 +<5777> <5777> 2381 +<5778> <577a> 11304 +<577b> <577b> 5046 +<577c> <577c> 5045 +<577d> <5781> 11307 +<5782> <5782> 1340 +<5783> <5783> 2455 +<5784> <5784> 2633 +<5785> <5785> 5042 +<5786> <5786> 5044 +<5787> <578a> 11312 +<578b> <578b> 3992 +<578c> <578c> 5053 +<578d> <5791> 11316 +<5792> <5792> 2504 +<5793> <5793> 5058 +<5794> <579a> 11321 +<579b> <579b> 1569 +<579c> <579f> 11328 +<57a0> <57a0> 5059 +<57a1> <57a1> 5026 +<57a2> <57a2> 1809 +<57a3> <57a3> 4334 +<57a4> <57a4> 5052 +<57a5> <57a5> 11332 +<57a6> <57a6> 2398 +<57a7> <57a7> 5056 +<57a8> <57a8> 11333 +<57a9> <57a9> 5025 +<57aa> <57aa> 11334 +<57ab> <57ab> 1479 +endcidrange + +100 begincidrange +<57ac> <57ac> 11335 +<57ad> <57ad> 5051 +<57ae> <57ae> 2418 +<57af> <57b1> 11336 +<57b2> <57b2> 5054 +<57b3> <57b3> 11339 +<57b4> <57b4> 5057 +<57b5> <57b7> 11340 +<57b8> <57b8> 5065 +<57b9> <57c1> 11343 +<57c2> <57c2> 1786 +<57c3> <57c3> 942 +<57c4> <57ca> 11352 +<57cb> <57cb> 2712 +<57cc> <57cd> 11359 +<57ce> <57ce> 1260 +<57cf> <57cf> 5055 +<57d0> <57d1> 11361 +<57d2> <57d2> 5064 +<57d3> <57d3> 11363 +<57d4> <57d4> 3057 +<57d5> <57d5> 5060 +<57d6> <57d7> 11364 +<57d8> <57d8> 5061 +<57d9> <57d9> 5063 +<57da> <57da> 5062 +<57db> <57dc> 11366 +<57dd> <57dd> 5070 +<57de> <57de> 11368 +<57df> <57df> 4311 +<57e0> <57e0> 1153 +<57e1> <57e1> 9002 +<57e2> <57e3> 11369 +<57e4> <57e4> 5069 +<57e5> <57ec> 11371 +<57ed> <57ed> 5074 +<57ee> <57ee> 11379 +<57ef> <57ef> 5067 +<57f0> <57f3> 11380 +<57f4> <57f4> 5066 +<57f5> <57f6> 11384 +<57f7> <57f7> 8843 +<57f8> <57f8> 5068 +<57f9> <57f9> 2977 +<57fa> <57fa> 2062 +<57fb> <57fc> 11386 +<57fd> <57fd> 5073 +<57fe> <57ff> 11388 +<5800> <5800> 5075 +<5801> <5801> 11390 +<5802> <5802> 3606 +<5803> <5804> 11391 +<5805> <5805> 8069 +<5806> <5806> 1552 +<5807> <5807> 5196 +<5808> <5809> 11393 +<580a> <580a> 8997 +<580b> <580b> 5071 +<580c> <580c> 11395 +<580d> <580d> 5072 +<580e> <5810> 11396 +<5811> <5811> 3122 +<5812> <5814> 11399 +<5815> <5815> 1576 +<5816> <5816> 9004 +<5817> <5818> 11402 +<5819> <5819> 5077 +<581a> <581c> 11404 +<581d> <581d> 9006 +<581e> <581e> 5076 +<581f> <581f> 11407 +<5820> <5820> 5079 +<5821> <5821> 1037 +<5822> <5823> 11408 +<5824> <5824> 1453 +<5825> <5829> 11410 +<582a> <582a> 2365 +<582b> <582e> 11415 +<582f> <582f> 8709 +<5830> <5830> 4104 +<5831> <5831> 7736 +<5832> <5833> 11419 +<5834> <5834> 7795 +<5835> <5835> 1537 +<5836> <5843> 11421 +<5844> <5844> 5078 +<5845> <5849> 11435 +<584a> <584a> 8163 +<584b> <584b> 9017 +<584c> <584c> 3567 +<584d> <584d> 6563 +<584e> <584e> 11440 +<584f> <584f> 9003 +<5850> <5850> 11441 +<5851> <5851> 3537 +<5852> <5852> 9005 +<5853> <5853> 11442 +<5854> <5854> 3571 +<5855> <5856> 11443 +<5857> <5857> 8575 +endcidrange + +100 begincidrange +<5858> <5858> 3604 +<5859> <585d> 11445 +<585e> <585e> 3286 +<585f> <5861> 11450 +<5862> <5862> 8615 +<5863> <5863> 11453 +<5864> <5864> 9007 +<5865> <5865> 5080 +<5866> <586a> 11454 +<586b> <586b> 3649 +<586c> <586c> 5081 +<586d> <5874> 11459 +<5875> <5875> 7805 +<5876> <5878> 11467 +<5879> <5879> 8406 +<587a> <587d> 11470 +<587e> <587e> 5027 +<587f> <587f> 11474 +<5880> <5880> 5085 +<5881> <5881> 5082 +<5882> <5882> 11475 +<5883> <5883> 2274 +<5884> <5884> 11476 +<5885> <5885> 3474 +<5886> <5888> 11477 +<5889> <5889> 5083 +<588a> <588a> 7874 +<588b> <5891> 11480 +<5892> <5892> 3331 +<5893> <5893> 2844 +<5894> <5898> 11487 +<5899> <5899> 3130 +<589a> <589a> 5084 +<589b> <589b> 11492 +<589c> <589c> 8882 +<589d> <589d> 11493 +<589e> <589e> 4409 +<589f> <589f> 4017 +<58a0> <58a7> 11494 +<58a8> <58a8> 2830 +<58a9> <58a9> 1556 +<58aa> <58ad> 11502 +<58ae> <58ae> 7903 +<58af> <58b2> 11506 +<58b3> <58b3> 7929 +<58b4> <58ba> 11510 +<58bb> <58bb> 8409 +<58bc> <58bc> 5028 +<58bd> <58bd> 11517 +<58be> <58be> 8157 +<58bf> <58c0> 11518 +<58c1> <58c1> 1091 +<58c2> <58c4> 11520 +<58c5> <58c5> 5029 +<58c6> <58c6> 11523 +<58c7> <58c7> 8551 +<58c8> <58d0> 11524 +<58d1> <58d1> 5030 +<58d2> <58d2> 11533 +<58d3> <58d3> 8685 +<58d4> <58d4> 11534 +<58d5> <58d5> 1909 +<58d6> <58d7> 11535 +<58d8> <58d8> 8199 +<58d9> <58d9> 8998 +<58da> <58da> 9001 +<58db> <58dd> 11537 +<58de> <58de> 8018 +<58df> <58df> 8251 +<58e0> <58e0> 9000 +<58e1> <58e1> 11540 +<58e2> <58e2> 8999 +<58e3> <58e3> 11541 +<58e4> <58e4> 3227 +<58e5> <58e8> 11542 +<58e9> <58e9> 7723 +<58ea> <58ea> 11546 +<58eb> <58eb> 3414 +<58ec> <58ec> 3236 +<58ed> <58ed> 11547 +<58ee> <58ee> 4624 +<58ef> <58ef> 8878 +<58f0> <58f0> 3378 +<58f1> <58f2> 11548 +<58f3> <58f3> 2388 +<58f4> <58f5> 11550 +<58f6> <58f6> 1967 +<58f7> <58f8> 11552 +<58f9> <58f9> 4163 +<58fa> <58fa> 8009 +<58fb> <58fc> 11554 +<58fd> <58fd> 8504 +<58fe> <58ff> 11556 +<5900> <5901> 11558 +<5902> <5902> 5660 +<5903> <5903> 11560 +<5904> <5904> 1321 +<5905> <5906> 11561 +<5907> <5907> 1057 +<5908> <590c> 11563 +endcidrange + +100 begincidrange +<590d> <590d> 1711 +<590e> <590e> 11568 +<590f> <590f> 3889 +<5910> <5913> 11569 +<5914> <5914> 4859 +<5915> <5915> 3859 +<5916> <5916> 3731 +<5917> <5918> 11573 +<5919> <5919> 4865 +<591a> <591a> 1567 +<591b> <591b> 11575 +<591c> <591c> 4160 +<591d> <591e> 11576 +<591f> <591f> 1812 +<5920> <5921> 11578 +<5922> <5922> 8321 +<5923> <5923> 11580 +<5924> <5924> 5659 +<5925> <5925> 5657 +<5926> <5926> 11581 +<5927> <5927> 1398 +<5928> <5928> 11582 +<5929> <5929> 3647 +<592a> <592a> 3582 +<592b> <592b> 1679 +<592c> <592c> 11583 +<592d> <592d> 4712 +<592e> <592e> 4116 +<592f> <592f> 1906 +<5930> <5930> 11584 +<5931> <5931> 3390 +<5932> <5933> 11585 +<5934> <5934> 3688 +<5935> <5936> 11587 +<5937> <5937> 4171 +<5938> <5938> 2417 +<5939> <5939> 2115 +<593a> <593a> 1568 +<593b> <593b> 11589 +<593c> <593c> 5295 +<593d> <593d> 11590 +<593e> <593e> 8060 +<593f> <5940> 11591 +<5941> <5941> 5296 +<5942> <5942> 5004 +<5943> <5943> 11593 +<5944> <5944> 4098 +<5945> <5946> 11594 +<5947> <5947> 3077 +<5948> <5948> 2865 +<5949> <5949> 1675 +<594a> <594a> 11596 +<594b> <594b> 1657 +<594c> <594d> 11597 +<594e> <594e> 2441 +<594f> <594f> 4669 +<5950> <5950> 11599 +<5951> <5951> 3092 +<5952> <5953> 11600 +<5954> <5954> 1061 +<5955> <5955> 5298 +<5956> <5956> 2178 +<5957> <5957> 3626 +<5958> <5958> 5300 +<5959> <5959> 11602 +<595a> <595a> 5299 +<595b> <595f> 11603 +<5960> <5960> 1485 +<5961> <5961> 11608 +<5962> <5962> 3350 +<5963> <5964> 11609 +<5965> <5965> 973 +<5966> <5968> 11611 +<5969> <5969> 9051 +<596a> <596a> 7902 +<596b> <596b> 11614 +<596c> <596c> 8098 +<596d> <596d> 11615 +<596e> <596e> 7930 +<596f> <5972> 11616 +<5973> <5973> 2927 +<5974> <5974> 2924 +<5975> <5975> 11620 +<5976> <5976> 2863 +<5977> <5977> 11621 +<5978> <5978> 2140 +<5979> <5979> 3570 +<597a> <597c> 11622 +<597d> <597d> 1914 +<597e> <5980> 11625 +<5981> <5981> 6005 +<5982> <5982> 3266 +<5983> <5983> 6006 +<5984> <5984> 3758 +<5985> <5985> 11628 +<5986> <5986> 4622 +<5987> <5987> 1721 +<5988> <5988> 2703 +<5989> <5989> 11629 +<598a> <598a> 3244 +endcidrange + +100 begincidrange +<598b> <598c> 11630 +<598d> <598d> 6007 +<598e> <5991> 11632 +<5992> <5992> 1545 +<5993> <5993> 2110 +<5994> <5995> 11636 +<5996> <5996> 4134 +<5997> <5997> 6011 +<5998> <5998> 11638 +<5999> <5999> 2803 +<599a> <599c> 11639 +<599d> <599d> 8877 +<599e> <599e> 6014 +<599f> <59a2> 11642 +<59a3> <59a3> 6010 +<59a4> <59a4> 6015 +<59a5> <59a5> 3720 +<59a6> <59a7> 11646 +<59a8> <59a8> 1630 +<59a9> <59aa> 6008 +<59ab> <59ab> 6013 +<59ac> <59ad> 11648 +<59ae> <59ae> 2880 +<59af> <59af> 6018 +<59b0> <59b1> 11650 +<59b2> <59b2> 6017 +<59b3> <59b8> 11652 +<59b9> <59b9> 2760 +<59ba> <59ba> 11658 +<59bb> <59bb> 3069 +<59bc> <59bd> 11659 +<59be> <59be> 6020 +<59bf> <59c5> 11661 +<59c6> <59c6> 2842 +<59c7> <59c9> 11668 +<59ca> <59ca> 6012 +<59cb> <59cb> 3411 +<59cc> <59cf> 11671 +<59d0> <59d0> 2228 +<59d1> <59d1> 1820 +<59d2> <59d2> 6016 +<59d3> <59d3> 4000 +<59d4> <59d4> 3774 +<59d5> <59d6> 11675 +<59d7> <59d7> 6019 +<59d8> <59d8> 6026 +<59d9> <59d9> 11677 +<59da> <59da> 4141 +<59db> <59db> 11678 +<59dc> <59dc> 2171 +<59dd> <59dd> 6023 +<59de> <59e2> 11679 +<59e3> <59e3> 6025 +<59e4> <59e4> 11684 +<59e5> <59e5> 2492 +<59e6> <59e7> 11685 +<59e8> <59e8> 4179 +<59e9> <59eb> 11687 +<59ec> <59ec> 2074 +<59ed> <59f8> 11690 +<59f9> <59f9> 6027 +<59fa> <59fa> 11702 +<59fb> <59fb> 4221 +<59fc> <59fe> 11703 +<59ff> <59ff> 4648 +<5a00> <5a00> 11706 +<5a01> <5a01> 3759 +<5a02> <5a02> 11707 +<5a03> <5a03> 3727 +<5a04> <5a04> 2637 +<5a05> <5a06> 6021 +<5a07> <5a07> 2192 +<5a08> <5a08> 6024 +<5a09> <5a09> 6029 +<5a0a> <5a0b> 11708 +<5a0c> <5a0c> 6028 +<5a0d> <5a10> 11710 +<5a11> <5a11> 6032 +<5a12> <5a12> 11714 +<5a13> <5a13> 6034 +<5a14> <5a17> 11715 +<5a18> <5a18> 2898 +<5a19> <5a1b> 11719 +<5a1c> <5a1c> 2859 +<5a1d> <5a1e> 11722 +<5a1f> <5a1f> 2329 +<5a20> <5a20> 3368 +<5a21> <5a22> 11724 +<5a23> <5a23> 6033 +<5a24> <5a24> 11726 +<5a25> <5a25> 1583 +<5a26> <5a28> 11727 +<5a29> <5a29> 2793 +<5a2a> <5a30> 11730 +<5a31> <5a31> 4302 +<5a32> <5a32> 6030 +<5a33> <5a33> 11737 +<5a34> <5a34> 6031 +<5a35> <5a35> 11738 +<5a36> <5a36> 3197 +endcidrange + +100 begincidrange +<5a37> <5a3b> 11739 +<5a3c> <5a3c> 6039 +<5a3d> <5a3f> 11744 +<5a40> <5a40> 6035 +<5a41> <5a41> 8255 +<5a42> <5a45> 11747 +<5a46> <5a46> 3044 +<5a47> <5a48> 11751 +<5a49> <5a49> 3746 +<5a4a> <5a4a> 6037 +<5a4b> <5a54> 11753 +<5a55> <5a55> 6038 +<5a56> <5a59> 11763 +<5a5a> <5a5a> 2046 +<5a5b> <5a61> 11767 +<5a62> <5a62> 6040 +<5a63> <5a65> 11774 +<5a66> <5a66> 7950 +<5a67> <5a67> 6036 +<5a68> <5a69> 11777 +<5a6a> <5a6a> 2466 +<5a6b> <5a6c> 11779 +<5a6d> <5a6d> 9209 +<5a6e> <5a73> 11781 +<5a74> <5a74> 4233 +<5a75> <5a75> 6041 +<5a76> <5a76> 3373 +<5a77> <5a77> 6045 +<5a78> <5a79> 11787 +<5a7a> <5a7a> 6046 +<5a7b> <5a7e> 11789 +<5a7f> <5a7f> 4033 +<5a80> <5a91> 11793 +<5a92> <5a92> 2754 +<5a93> <5a99> 11811 +<5a9a> <5a9a> 2761 +<5a9b> <5a9b> 6044 +<5a9c> <5aa6> 11818 +<5aa7> <5aa7> 9212 +<5aa8> <5aa9> 11829 +<5aaa> <5aaa> 6043 +<5aab> <5ab1> 11831 +<5ab2> <5ab2> 6049 +<5ab3> <5ab3> 3870 +<5ab4> <5ab4> 11838 +<5ab5> <5ab5> 6564 +<5ab6> <5ab7> 11839 +<5ab8> <5ab8> 6052 +<5ab9> <5abc> 11841 +<5abd> <5abd> 8297 +<5abe> <5abe> 6047 +<5abf> <5ac0> 11845 +<5ac1> <5ac1> 2129 +<5ac2> <5ac2> 3298 +<5ac3> <5ac8> 11847 +<5ac9> <5ac9> 2088 +<5aca> <5acb> 11853 +<5acc> <5acc> 3904 +<5acd> <5ad1> 11855 +<5ad2> <5ad2> 6050 +<5ad3> <5ad3> 11860 +<5ad4> <5ad4> 6051 +<5ad5> <5ad5> 11861 +<5ad6> <5ad6> 6056 +<5ad7> <5ad7> 9207 +<5ad8> <5ad8> 6058 +<5ad9> <5adb> 11862 +<5adc> <5adc> 6059 +<5add> <5adf> 11865 +<5ae0> <5ae0> 6053 +<5ae1> <5ae1> 1462 +<5ae2> <5ae2> 11868 +<5ae3> <5ae3> 6054 +<5ae4> <5ae5> 11869 +<5ae6> <5ae6> 6057 +<5ae7> <5ae8> 11871 +<5ae9> <5ae9> 2878 +<5aea> <5aea> 11873 +<5aeb> <5aeb> 6048 +<5aec> <5af0> 11874 +<5af1> <5af1> 6055 +<5af2> <5af4> 11879 +<5af5> <5af5> 9206 +<5af6> <5afa> 11882 +<5afb> <5afb> 9213 +<5afc> <5aff> 11887 +<5b00> <5b00> 9208 +<5b01> <5b07> 11891 +<5b08> <5b08> 9210 +<5b09> <5b09> 6060 +<5b0a> <5b0a> 11898 +<5b0b> <5b0b> 9214 +<5b0c> <5b0c> 8104 +<5b0d> <5b15> 11899 +<5b16> <5b16> 6062 +<5b17> <5b17> 6061 +<5b18> <5b18> 11908 +<5b19> <5b19> 9217 +<5b1a> <5b20> 11909 +<5b21> <5b21> 9215 +endcidrange + +100 begincidrange +<5b22> <5b29> 11916 +<5b2a> <5b2a> 9216 +<5b2b> <5b2f> 11924 +<5b30> <5b30> 8737 +<5b31> <5b31> 11929 +<5b32> <5b32> 6063 +<5b33> <5b33> 11930 +<5b34> <5b34> 4876 +<5b35> <5b36> 11931 +<5b37> <5b37> 6064 +<5b38> <5b38> 8482 +<5b39> <5b3f> 11933 +<5b40> <5b40> 6065 +<5b41> <5b4b> 11940 +<5b4c> <5b4c> 9211 +<5b4d> <5b4f> 11951 +<5b50> <5b50> 4656 +<5b51> <5b51> 6071 +<5b52> <5b52> 11954 +<5b53> <5b53> 6072 +<5b54> <5b54> 2404 +<5b55> <5b55> 4371 +<5b56> <5b56> 11955 +<5b57> <5b57> 4659 +<5b58> <5b58> 1385 +<5b59> <5b59> 3556 +<5b5a> <5b5a> 6068 +<5b5b> <5b5b> 4729 +<5b5c> <5b5c> 4651 +<5b5d> <5b5d> 3949 +<5b5e> <5b5e> 11956 +<5b5f> <5b5f> 2772 +<5b60> <5b61> 11957 +<5b62> <5b62> 6073 +<5b63> <5b63> 2097 +<5b64> <5b64> 1819 +<5b65> <5b65> 6069 +<5b66> <5b66> 4048 +<5b67> <5b68> 11959 +<5b69> <5b69> 1881 +<5b6a> <5b6a> 2678 +<5b6b> <5b6b> 8538 +<5b6c> <5b6c> 4705 +<5b6d> <5b6f> 11961 +<5b70> <5b70> 3458 +<5b71> <5b71> 5994 +<5b72> <5b72> 11964 +<5b73> <5b73> 6070 +<5b74> <5b74> 11965 +<5b75> <5b75> 1682 +<5b76> <5b77> 11966 +<5b78> <5b78> 8677 +<5b79> <5b79> 11968 +<5b7a> <5b7a> 3265 +<5b7b> <5b7c> 11969 +<5b7d> <5b7d> 2904 +<5b7e> <5b7e> 11971 +<5b7f> <5b7f> 8279 +<5b80> <5b80> 5934 +<5b81> <5b81> 2913 +<5b82> <5b82> 11972 +<5b83> <5b83> 3569 +<5b84> <5b84> 5935 +<5b85> <5b85> 4429 +<5b86> <5b86> 11973 +<5b87> <5b87> 4307 +<5b88> <5b88> 3439 +<5b89> <5b89> 957 +<5b8a> <5b8a> 11974 +<5b8b> <5b8b> 3523 +<5b8c> <5b8c> 3739 +<5b8d> <5b8e> 11975 +<5b8f> <5b8f> 1953 +<5b90> <5b92> 11977 +<5b93> <5b93> 5937 +<5b94> <5b94> 11980 +<5b95> <5b95> 5936 +<5b96> <5b96> 11981 +<5b97> <5b97> 4663 +<5b98> <5b98> 1842 +<5b99> <5b99> 4581 +<5b9a> <5b9a> 1511 +<5b9b> <5b9b> 3745 +<5b9c> <5b9c> 4178 +<5b9d> <5b9d> 1039 +<5b9e> <5b9e> 3404 +<5b9f> <5b9f> 11982 +<5ba0> <5ba0> 1293 +<5ba1> <5ba1> 3372 +<5ba2> <5ba2> 2394 +<5ba3> <5ba3> 4038 +<5ba4> <5ba4> 3433 +<5ba5> <5ba5> 5938 +<5ba6> <5ba6> 2007 +<5ba7> <5ba9> 11983 +<5baa> <5baa> 3913 +<5bab> <5bab> 1797 +<5bac> <5baf> 11986 +<5bb0> <5bb0> 4378 +<5bb1> <5bb2> 11990 +endcidrange + +100 begincidrange +<5bb3> <5bb3> 1885 +<5bb4> <5bb4> 4112 +<5bb5> <5bb5> 3945 +<5bb6> <5bb6> 2117 +<5bb7> <5bb7> 11992 +<5bb8> <5bb8> 5939 +<5bb9> <5bb9> 3256 +<5bba> <5bbc> 11993 +<5bbd> <5bbd> 2426 +<5bbe> <5bbe> 1119 +<5bbf> <5bbf> 3539 +<5bc0> <5bc1> 11996 +<5bc2> <5bc2> 2104 +<5bc3> <5bc3> 11998 +<5bc4> <5bc4> 2103 +<5bc5> <5bc5> 4225 +<5bc6> <5bc6> 2785 +<5bc7> <5bc7> 2409 +<5bc8> <5bcb> 11999 +<5bcc> <5bcc> 1718 +<5bcd> <5bcf> 12003 +<5bd0> <5bd0> 2759 +<5bd1> <5bd1> 12006 +<5bd2> <5bd2> 1893 +<5bd3> <5bd3> 4325 +<5bd4> <5bdc> 12007 +<5bdd> <5bdd> 3163 +<5bde> <5bde> 2834 +<5bdf> <5bdf> 1203 +<5be0> <5be0> 12016 +<5be1> <5be1> 1834 +<5be2> <5be2> 8421 +<5be3> <5be3> 12017 +<5be4> <5be4> 5943 +<5be5> <5be5> 2577 +<5be6> <5be6> 8495 +<5be7> <5be7> 8355 +<5be8> <5be8> 4432 +<5be9> <5be9> 8481 +<5bea> <5bea> 12018 +<5beb> <5beb> 8660 +<5bec> <5bec> 8165 +<5bed> <5bed> 12019 +<5bee> <5bee> 5944 +<5bef> <5bef> 12020 +<5bf0> <5bf0> 5946 +<5bf1> <5bf4> 12021 +<5bf5> <5bf5> 7818 +<5bf6> <5bf6> 7735 +<5bf7> <5bf7> 12025 +<5bf8> <5bf8> 1386 +<5bf9> <5bf9> 1555 +<5bfa> <5bfa> 3511 +<5bfb> <5bfb> 4057 +<5bfc> <5bfc> 1437 +<5bfd> <5bfe> 12026 +<5bff> <5bff> 3440 +<5c00> <5c00> 12028 +<5c01> <5c01> 1663 +<5c02> <5c03> 12029 +<5c04> <5c04> 3357 +<5c05> <5c05> 12031 +<5c06> <5c06> 2172 +<5c07> <5c07> 8094 +<5c08> <5c08> 8870 +<5c09> <5c09> 3789 +<5c0a> <5c0a> 4685 +<5c0b> <5c0b> 8680 +<5c0c> <5c0c> 12032 +<5c0d> <5c0d> 7898 +<5c0e> <5c0e> 7865 +<5c0f> <5c0f> 3948 +<5c10> <5c10> 12033 +<5c11> <5c11> 3346 +<5c12> <5c13> 12034 +<5c14> <5c14> 1594 +<5c15> <5c15> 6066 +<5c16> <5c16> 2133 +<5c17> <5c17> 12036 +<5c18> <5c18> 1251 +<5c19> <5c19> 12037 +<5c1a> <5c1a> 3337 +<5c1b> <5c1b> 12038 +<5c1c> <5c1c> 6067 +<5c1d> <5c1d> 1223 +<5c1e> <5c21> 12039 +<5c22> <5c22> 5302 +<5c23> <5c23> 12043 +<5c24> <5c24> 4269 +<5c25> <5c25> 5303 +<5c26> <5c26> 12044 +<5c27> <5c27> 4137 +<5c28> <5c2b> 12045 +<5c2c> <5c2c> 5304 +<5c2d> <5c30> 12049 +<5c31> <5c31> 2300 +<5c32> <5c33> 12053 +<5c34> <5c34> 5305 +<5c35> <5c36> 12055 +<5c37> <5c37> 9052 +endcidrange + +100 begincidrange +<5c38> <5c38> 3395 +<5c39> <5c39> 4227 +<5c3a> <5c3a> 1284 +<5c3b> <5c3b> 5990 +<5c3c> <5c3c> 2884 +<5c3d> <5c3d> 2256 +<5c3e> <5c3e> 3777 +<5c3f> <5c3f> 2901 +<5c40> <5c40> 2309 +<5c41> <5c41> 3015 +<5c42> <5c42> 1194 +<5c43> <5c44> 12057 +<5c45> <5c45> 2306 +<5c46> <5c47> 12059 +<5c48> <5c48> 3193 +<5c49> <5c49> 3646 +<5c4a> <5c4a> 2237 +<5c4b> <5c4b> 3820 +<5c4c> <5c4d> 12061 +<5c4e> <5c4e> 3409 +<5c4f> <5c4f> 3040 +<5c50> <5c50> 5992 +<5c51> <5c51> 3975 +<5c52> <5c54> 12063 +<5c55> <5c55> 4442 +<5c56> <5c58> 12066 +<5c59> <5c59> 5993 +<5c5a> <5c5d> 12069 +<5c5e> <5c5e> 3467 +<5c5f> <5c5f> 12073 +<5c60> <5c60> 3697 +<5c61> <5c61> 2668 +<5c62> <5c62> 8272 +<5c63> <5c63> 5995 +<5c64> <5c64> 7783 +<5c65> <5c65> 2667 +<5c66> <5c66> 5996 +<5c67> <5c67> 12074 +<5c68> <5c68> 9204 +<5c69> <5c6b> 12075 +<5c6c> <5c6c> 8510 +<5c6d> <5c6d> 12078 +<5c6e> <5c6e> 6004 +<5c6f> <5c6f> 3710 +<5c70> <5c70> 12079 +<5c71> <5c71> 3318 +<5c72> <5c78> 12080 +<5c79> <5c79> 4192 +<5c7a> <5c7a> 5548 +<5c7b> <5c7e> 12087 +<5c7f> <5c7f> 4305 +<5c80> <5c80> 12091 +<5c81> <5c81> 3551 +<5c82> <5c82> 3088 +<5c83> <5c87> 12092 +<5c88> <5c88> 5552 +<5c89> <5c8b> 12097 +<5c8c> <5c8c> 5547 +<5c8d> <5c8d> 5549 +<5c8e> <5c8f> 12100 +<5c90> <5c90> 5550 +<5c91> <5c91> 5555 +<5c92> <5c93> 12102 +<5c94> <5c94> 1204 +<5c95> <5c95> 12104 +<5c96> <5c96> 5551 +<5c97> <5c97> 1749 +<5c98> <5c99> 5553 +<5c9a> <5c9a> 5556 +<5c9b> <5c9b> 1435 +<5c9c> <5c9c> 5557 +<5c9d> <5ca0> 12105 +<5ca1> <5ca1> 7958 +<5ca2> <5ca2> 5559 +<5ca3> <5ca3> 5564 +<5ca4> <5ca8> 12109 +<5ca9> <5ca9> 4091 +<5caa> <5caa> 12114 +<5cab> <5cab> 5562 +<5cac> <5cac> 5561 +<5cad> <5cad> 2612 +<5cae> <5cb0> 12115 +<5cb1> <5cb1> 5563 +<5cb2> <5cb2> 12118 +<5cb3> <5cb3> 4355 +<5cb4> <5cb4> 12119 +<5cb5> <5cb5> 5558 +<5cb6> <5cb6> 12120 +<5cb7> <5cb7> 5566 +<5cb8> <5cb8> 961 +<5cb9> <5cbc> 12121 +<5cbd> <5cbd> 5560 +<5cbe> <5cbe> 12125 +<5cbf> <5cbf> 2438 +<5cc0> <5cc0> 12126 +<5cc1> <5cc1> 5565 +<5cc2> <5cc3> 12127 +<5cc4> <5cc4> 5567 +<5cc5> <5cca> 12129 +<5ccb> <5ccb> 5570 +endcidrange + +100 begincidrange +<5ccc> <5cd1> 12135 +<5cd2> <5cd2> 5568 +<5cd3> <5cd8> 12141 +<5cd9> <5cd9> 4548 +<5cda> <5ce0> 12147 +<5ce1> <5ce1> 3884 +<5ce2> <5ce3> 12154 +<5ce4> <5ce4> 5569 +<5ce5> <5ce5> 5571 +<5ce6> <5ce6> 2676 +<5ce7> <5ce7> 12156 +<5ce8> <5ce8> 1578 +<5ce9> <5ce9> 12157 +<5cea> <5cea> 4317 +<5ceb> <5cec> 12158 +<5ced> <5ced> 3146 +<5cee> <5cef> 12160 +<5cf0> <5cf0> 1666 +<5cf1> <5cf3> 12162 +<5cf4> <5cf4> 9097 +<5cf5> <5cf5> 12165 +<5cf6> <5cf6> 7863 +<5cf7> <5cfa> 12166 +<5cfb> <5cfb> 2349 +<5cfc> <5cfc> 12170 +<5cfd> <5cfd> 8628 +<5cfe> <5cff> 12171 +<5d00> <5d01> 12173 +<5d02> <5d03> 5572 +<5d04> <5d05> 12175 +<5d06> <5d06> 5579 +<5d07> <5d07> 1292 +<5d08> <5d0c> 12177 +<5d0d> <5d0d> 9103 +<5d0e> <5d0e> 3080 +<5d0f> <5d13> 12182 +<5d14> <5d14> 1377 +<5d15> <5d15> 12187 +<5d16> <5d16> 4075 +<5d17> <5d17> 7962 +<5d18> <5d1a> 12188 +<5d1b> <5d1b> 5580 +<5d1c> <5d1d> 12191 +<5d1e> <5d1e> 5578 +<5d1f> <5d23> 12193 +<5d24> <5d24> 5577 +<5d25> <5d25> 12198 +<5d26> <5d26> 5575 +<5d27> <5d27> 5574 +<5d28> <5d28> 12199 +<5d29> <5d29> 1065 +<5d2a> <5d2b> 12200 +<5d2c> <5d2c> 9099 +<5d2d> <5d2d> 4441 +<5d2e> <5d2e> 5576 +<5d2f> <5d33> 12202 +<5d34> <5d34> 5583 +<5d35> <5d3c> 12207 +<5d3d> <5d3d> 5584 +<5d3e> <5d3e> 5582 +<5d3f> <5d46> 12215 +<5d47> <5d47> 6946 +<5d48> <5d49> 12223 +<5d4a> <5d4a> 5591 +<5d4b> <5d4b> 5590 +<5d4c> <5d4c> 3123 +<5d4d> <5d4f> 12225 +<5d50> <5d50> 9098 +<5d51> <5d57> 12228 +<5d58> <5d58> 5581 +<5d59> <5d5a> 12235 +<5d5b> <5d5b> 5586 +<5d5c> <5d5c> 12237 +<5d5d> <5d5d> 5588 +<5d5e> <5d68> 12238 +<5d69> <5d69> 5592 +<5d6a> <5d6a> 12249 +<5d6b> <5d6b> 5589 +<5d6c> <5d6c> 5585 +<5d6d> <5d6e> 12250 +<5d6f> <5d6f> 5587 +<5d70> <5d73> 12252 +<5d74> <5d74> 5593 +<5d75> <5d80> 12256 +<5d81> <5d81> 9105 +<5d82> <5d82> 5594 +<5d83> <5d83> 12268 +<5d84> <5d84> 8817 +<5d85> <5d86> 12269 +<5d87> <5d87> 9096 +<5d88> <5d96> 12271 +<5d97> <5d97> 9102 +<5d98> <5d98> 12286 +<5d99> <5d99> 5595 +<5d9a> <5d9c> 12287 +<5d9d> <5d9d> 5596 +<5d9e> <5d9f> 12290 +<5da0> <5da0> 9101 +<5da1> <5da6> 12292 +<5da7> <5da7> 9100 +endcidrange + +100 begincidrange +<5da8> <5db6> 12298 +<5db7> <5db7> 5598 +<5db8> <5db8> 9104 +<5db9> <5db9> 12313 +<5dba> <5dba> 8243 +<5dbb> <5dbb> 12314 +<5dbc> <5dbc> 8764 +<5dbd> <5dc4> 12315 +<5dc5> <5dc5> 5599 +<5dc6> <5dca> 12323 +<5dcb> <5dcb> 8169 +<5dcc> <5dcc> 12328 +<5dcd> <5dcd> 3760 +<5dce> <5dd1> 12329 +<5dd2> <5dd2> 8277 +<5dd3> <5dd3> 12333 +<5dd4> <5dd4> 9106 +<5dd5> <5dda> 12334 +<5ddb> <5ddb> 6165 +<5ddc> <5ddc> 12340 +<5ddd> <5ddd> 1323 +<5dde> <5dde> 4572 +<5ddf> <5de0> 12341 +<5de1> <5de1> 4059 +<5de2> <5de2> 1239 +<5de3> <5de4> 12343 +<5de5> <5de5> 1789 +<5de6> <5de6> 4688 +<5de7> <5de7> 3142 +<5de8> <5de8> 2317 +<5de9> <5de9> 1799 +<5dea> <5dea> 12345 +<5deb> <5deb> 3814 +<5dec> <5ded> 12346 +<5dee> <5dee> 1205 +<5def> <5def> 5023 +<5df0> <5df0> 8996 +<5df1> <5df1> 2093 +<5df2> <5df2> 4184 +<5df3> <5df3> 3517 +<5df4> <5df4> 984 +<5df5> <5df6> 12348 +<5df7> <5df7> 3932 +<5df8> <5dfc> 12350 +<5dfd> <5dfd> 4855 +<5dfe> <5dfe> 2238 +<5dff> <5dff> 12355 +<5e00> <5e00> 12356 +<5e01> <5e01> 1083 +<5e02> <5e02> 3431 +<5e03> <5e03> 1155 +<5e04> <5e04> 12357 +<5e05> <5e05> 3484 +<5e06> <5e06> 1608 +<5e07> <5e07> 12358 +<5e08> <5e08> 3389 +<5e09> <5e0b> 12359 +<5e0c> <5e0c> 3856 +<5e0d> <5e0e> 12362 +<5e0f> <5e0f> 5534 +<5e10> <5e10> 4459 +<5e11> <5e11> 5537 +<5e12> <5e13> 12364 +<5e14> <5e14> 5536 +<5e15> <5e15> 2946 +<5e16> <5e16> 3662 +<5e17> <5e17> 12366 +<5e18> <5e18> 2554 +<5e19> <5e19> 5535 +<5e1a> <5e1a> 4578 +<5e1b> <5e1b> 1142 +<5e1c> <5e1c> 4547 +<5e1d> <5e1d> 1468 +<5e1e> <5e24> 12367 +<5e25> <5e25> 8515 +<5e26> <5e26> 1403 +<5e27> <5e27> 4512 +<5e28> <5e2a> 12374 +<5e2b> <5e2b> 8489 +<5e2c> <5e2c> 12377 +<5e2d> <5e2d> 3868 +<5e2e> <5e2e> 1018 +<5e2f> <5e30> 12378 +<5e31> <5e31> 5538 +<5e32> <5e32> 12380 +<5e33> <5e33> 8823 +<5e34> <5e35> 12381 +<5e36> <5e36> 7847 +<5e37> <5e37> 5541 +<5e38> <5e38> 1224 +<5e39> <5e3a> 12383 +<5e3b> <5e3c> 5539 +<5e3d> <5e3d> 2742 +<5e3e> <5e3f> 12385 +<5e40> <5e40> 8837 +<5e41> <5e41> 12387 +<5e42> <5e42> 2786 +<5e43> <5e43> 9092 +<5e44> <5e44> 5542 +<5e45> <5e45> 1686 +endcidrange + +100 begincidrange +<5e46> <5e4b> 12388 +<5e4c> <5e4c> 2020 +<5e4d> <5e53> 12394 +<5e54> <5e54> 5543 +<5e55> <5e55> 2846 +<5e56> <5e56> 12401 +<5e57> <5e57> 9095 +<5e58> <5e58> 9094 +<5e59> <5e5a> 12402 +<5e5b> <5e5b> 5544 +<5e5c> <5e5d> 12404 +<5e5e> <5e5e> 5545 +<5e5f> <5e5f> 8848 +<5e60> <5e60> 12406 +<5e61> <5e61> 5546 +<5e62> <5e62> 1332 +<5e63> <5e63> 7748 +<5e64> <5e6a> 12407 +<5e6b> <5e6b> 7730 +<5e6c> <5e6c> 9093 +<5e6d> <5e71> 12414 +<5e72> <5e72> 1732 +<5e73> <5e73> 3036 +<5e74> <5e74> 2893 +<5e75> <5e75> 12419 +<5e76> <5e76> 1129 +<5e77> <5e77> 12420 +<5e78> <5e78> 3997 +<5e79> <5e79> 7955 +<5e7a> <5e7a> 6163 +<5e7b> <5e7b> 2008 +<5e7c> <5e7c> 4284 +<5e7d> <5e7d> 4265 +<5e7e> <5e7e> 8051 +<5e7f> <5e7f> 1852 +<5e80> <5e80> 5681 +<5e81> <5e83> 12421 +<5e84> <5e84> 4620 +<5e85> <5e85> 12424 +<5e86> <5e86> 3177 +<5e87> <5e87> 1084 +<5e88> <5e89> 12425 +<5e8a> <5e8a> 1333 +<5e8b> <5e8b> 5683 +<5e8c> <5e8e> 12427 +<5e8f> <5e8f> 4029 +<5e90> <5e90> 2645 +<5e91> <5e91> 5682 +<5e92> <5e92> 12430 +<5e93> <5e93> 2415 +<5e94> <5e94> 4235 +<5e95> <5e95> 1464 +<5e96> <5e96> 5684 +<5e97> <5e97> 1483 +<5e98> <5e98> 12431 +<5e99> <5e99> 2802 +<5e9a> <5e9a> 1784 +<5e9b> <5e9b> 12432 +<5e9c> <5e9c> 1705 +<5e9d> <5e9d> 12433 +<5e9e> <5e9e> 2964 +<5e9f> <5e9f> 1644 +<5ea0> <5ea0> 5686 +<5ea1> <5ea4> 12434 +<5ea5> <5ea5> 5685 +<5ea6> <5ea6> 1543 +<5ea7> <5ea7> 4694 +<5ea8> <5eaa> 12438 +<5eab> <5eab> 8160 +<5eac> <5eac> 12441 +<5ead> <5ead> 3670 +<5eae> <5eb2> 12442 +<5eb3> <5eb3> 5690 +<5eb4> <5eb4> 12447 +<5eb5> <5eb5> 5688 +<5eb6> <5eb6> 3475 +<5eb7> <5eb7> 2370 +<5eb8> <5eb8> 4254 +<5eb9> <5eb9> 5687 +<5eba> <5ebd> 12448 +<5ebe> <5ebe> 5689 +<5ebf> <5ec8> 12452 +<5ec9> <5ec9> 2551 +<5eca> <5eca> 2483 +<5ecb> <5ed0> 12462 +<5ed1> <5ed1> 5693 +<5ed2> <5ed2> 5692 +<5ed3> <5ed3> 2453 +<5ed4> <5ed5> 12468 +<5ed6> <5ed6> 2583 +<5ed7> <5eda> 12470 +<5edb> <5edb> 5694 +<5edc> <5ede> 12474 +<5edf> <5edf> 8327 +<5ee0> <5ee0> 7800 +<5ee1> <5ee1> 9134 +<5ee2> <5ee2> 7926 +<5ee3> <5ee3> 7985 +<5ee4> <5ee7> 12477 +<5ee8> <5ee8> 5695 +endcidrange + +100 begincidrange +<5ee9> <5ee9> 12481 +<5eea> <5eea> 5696 +<5eeb> <5eeb> 12482 +<5eec> <5eec> 8261 +<5eed> <5ef2> 12483 +<5ef3> <5ef3> 8568 +<5ef4> <5ef4> 5016 +<5ef5> <5ef5> 12489 +<5ef6> <5ef6> 4092 +<5ef7> <5ef7> 3667 +<5ef8> <5ef9> 12490 +<5efa> <5efa> 2169 +<5efb> <5efd> 12492 +<5efe> <5efe> 5293 +<5eff> <5eff> 4699 +<5f00> <5f00> 2359 +<5f01> <5f01> 5021 +<5f02> <5f02> 4211 +<5f03> <5f03> 3097 +<5f04> <5f04> 2923 +<5f05> <5f07> 12495 +<5f08> <5f08> 5294 +<5f09> <5f09> 12498 +<5f0a> <5f0a> 1088 +<5f0b> <5f0b> 5366 +<5f0c> <5f0e> 12499 +<5f0f> <5f0f> 3412 +<5f10> <5f10> 12502 +<5f11> <5f11> 5369 +<5f12> <5f12> 12503 +<5f13> <5f13> 1798 +<5f14> <5f14> 12504 +<5f15> <5f15> 4228 +<5f16> <5f16> 12505 +<5f17> <5f17> 1696 +<5f18> <5f18> 1954 +<5f19> <5f1a> 12506 +<5f1b> <5f1b> 1279 +<5f1c> <5f1e> 12508 +<5f1f> <5f1f> 1469 +<5f20> <5f20> 4454 +<5f21> <5f24> 12511 +<5f25> <5f25> 2779 +<5f26> <5f26> 3903 +<5f27> <5f27> 1974 +<5f28> <5f28> 12515 +<5f29> <5f29> 5999 +<5f2a> <5f2a> 5998 +<5f2b> <5f2c> 12516 +<5f2d> <5f2d> 6000 +<5f2e> <5f2e> 12518 +<5f2f> <5f2f> 3733 +<5f30> <5f30> 12519 +<5f31> <5f31> 3280 +<5f32> <5f32> 12520 +<5f33> <5f33> 9205 +<5f34> <5f34> 12521 +<5f35> <5f35> 8821 +<5f36> <5f38> 12522 +<5f39> <5f39> 1424 +<5f3a> <5f3a> 3132 +<5f3b> <5f3b> 12525 +<5f3c> <5f3c> 6002 +<5f3d> <5f3f> 12526 +<5f40> <5f40> 6590 +<5f41> <5f45> 12529 +<5f46> <5f46> 9838 +<5f47> <5f47> 12534 +<5f48> <5f48> 7856 +<5f49> <5f4b> 12535 +<5f4c> <5f4c> 8323 +<5f4d> <5f4d> 12538 +<5f4e> <5f4e> 8584 +<5f4f> <5f4f> 12539 +<5f50> <5f50> 5986 +<5f51> <5f51> 12540 +<5f52> <5f52> 1858 +<5f53> <5f53> 1426 +<5f54> <5f54> 12541 +<5f55> <5f55> 2659 +<5f56> <5f56> 5988 +<5f57> <5f57> 5987 +<5f58> <5f58> 5989 +<5f59> <5f59> 9852 +<5f5a> <5f5c> 12542 +<5f5d> <5f5d> 4180 +<5f5e> <5f60> 12545 +<5f61> <5f61> 5614 +<5f62> <5f62> 3993 +<5f63> <5f63> 12548 +<5f64> <5f64> 3679 +<5f65> <5f65> 12549 +<5f66> <5f66> 4110 +<5f67> <5f68> 12550 +<5f69> <5f69> 1169 +<5f6a> <5f6a> 1108 +<5f6b> <5f6b> 12552 +<5f6c> <5f6c> 1115 +<5f6d> <5f6d> 2990 +<5f6e> <5f6f> 12553 +endcidrange + +100 begincidrange +<5f70> <5f70> 4452 +<5f71> <5f71> 4245 +<5f72> <5f72> 12555 +<5f73> <5f73> 5600 +<5f74> <5f76> 12556 +<5f77> <5f77> 5601 +<5f78> <5f78> 12559 +<5f79> <5f79> 4194 +<5f7a> <5f7a> 12560 +<5f7b> <5f7b> 1246 +<5f7c> <5f7c> 1076 +<5f7d> <5f7f> 12561 +<5f80> <5f80> 3754 +<5f81> <5f81> 4504 +<5f82> <5f82> 5602 +<5f83> <5f83> 12564 +<5f84> <5f84> 2277 +<5f85> <5f85> 1408 +<5f86> <5f86> 12565 +<5f87> <5f87> 5603 +<5f88> <5f88> 1939 +<5f89> <5f89> 5604 +<5f8a> <5f8a> 1991 +<5f8b> <5f8b> 2672 +<5f8c> <5f8c> 5605 +<5f8d> <5f8f> 12566 +<5f90> <5f90> 4023 +<5f91> <5f91> 8133 +<5f92> <5f92> 3694 +<5f93> <5f94> 12569 +<5f95> <5f95> 5606 +<5f96> <5f96> 12571 +<5f97> <5f97> 1444 +<5f98> <5f98> 2952 +<5f99> <5f99> 5607 +<5f9a> <5f9b> 12572 +<5f9c> <5f9c> 5608 +<5f9d> <5f9d> 12574 +<5f9e> <5f9e> 7841 +<5f9f> <5f9f> 12575 +<5fa0> <5fa0> 9107 +<5fa1> <5fa1> 4318 +<5fa2> <5fa7> 12576 +<5fa8> <5fa8> 5609 +<5fa9> <5fa9> 7947 +<5faa> <5faa> 4054 +<5fab> <5fac> 12582 +<5fad> <5fad> 5610 +<5fae> <5fae> 3761 +<5faf> <5fb4> 12584 +<5fb5> <5fb5> 5611 +<5fb6> <5fb6> 12590 +<5fb7> <5fb7> 1443 +<5fb8> <5fb8> 12591 +<5fb9> <5fb9> 7804 +<5fba> <5fbb> 12592 +<5fbc> <5fbc> 5612 +<5fbd> <5fbd> 2026 +<5fbe> <5fc2> 12594 +<5fc3> <5fc3> 3983 +<5fc4> <5fc4> 5698 +<5fc5> <5fc5> 1089 +<5fc6> <5fc6> 4203 +<5fc7> <5fc8> 12599 +<5fc9> <5fc9> 5699 +<5fca> <5fcb> 12601 +<5fcc> <5fcc> 2108 +<5fcd> <5fcd> 3239 +<5fce> <5fce> 12603 +<5fcf> <5fcf> 5701 +<5fd0> <5fd0> 6668 +<5fd1> <5fd1> 6667 +<5fd2> <5fd2> 5367 +<5fd3> <5fd5> 12604 +<5fd6> <5fd6> 5700 +<5fd7> <5fd7> 4541 +<5fd8> <5fd8> 3757 +<5fd9> <5fd9> 2731 +<5fda> <5fdc> 12607 +<5fdd> <5fdd> 5763 +<5fde> <5fdf> 12610 +<5fe0> <5fe0> 4561 +<5fe1> <5fe1> 5705 +<5fe2> <5fe3> 12612 +<5fe4> <5fe4> 5706 +<5fe5> <5fe6> 12614 +<5fe7> <5fe7> 4268 +<5fe8> <5fe9> 12616 +<5fea> <5fea> 5710 +<5feb> <5feb> 2425 +<5fec> <5fec> 12618 +<5fed> <5fed> 5711 +<5fee> <5fee> 5703 +<5fef> <5ff0> 12619 +<5ff1> <5ff1> 1253 +<5ff2> <5ff4> 12621 +<5ff5> <5ff5> 2897 +<5ff6> <5ff7> 12624 +<5ff8> <5ff8> 5712 +<5ff9> <5ffa> 12626 +endcidrange + +100 begincidrange +<5ffb> <5ffb> 3982 +<5ffc> <5ffc> 12628 +<5ffd> <5ffd> 1965 +<5ffe> <5ffe> 5707 +<5fff> <5fff> 1659 +<6000> <6000> 1992 +<6001> <6001> 3583 +<6002> <6002> 3520 +<6003> <6003> 5702 +<6004> <6004> 5704 +<6005> <6006> 5708 +<6007> <6009> 12629 +<600a> <600a> 5721 +<600b> <600c> 12632 +<600d> <600d> 5718 +<600e> <600e> 4408 +<600f> <600f> 5717 +<6010> <6011> 12634 +<6012> <6012> 2926 +<6013> <6013> 12636 +<6014> <6014> 4507 +<6015> <6015> 2947 +<6016> <6016> 1159 +<6017> <6018> 12637 +<6019> <6019> 5713 +<601a> <601a> 12639 +<601b> <601b> 5716 +<601c> <601c> 2552 +<601d> <601d> 3505 +<601e> <601f> 12640 +<6020> <6020> 1410 +<6021> <6021> 5723 +<6022> <6024> 12642 +<6025> <6025> 2084 +<6026> <6026> 5715 +<6027> <6027> 3999 +<6028> <6028> 4348 +<6029> <6029> 5719 +<602a> <602a> 1839 +<602b> <602b> 5720 +<602c> <602e> 12645 +<602f> <602f> 3152 +<6030> <6034> 12648 +<6035> <6035> 5714 +<6036> <603a> 12653 +<603b> <603b> 4665 +<603c> <603c> 6669 +<603d> <603e> 12658 +<603f> <603f> 5722 +<6040> <6040> 12660 +<6041> <6041> 6673 +<6042> <6042> 5728 +<6043> <6043> 3432 +<6044> <604a> 12661 +<604b> <604b> 2558 +<604c> <604c> 12668 +<604d> <604d> 2021 +<604e> <604f> 12669 +<6050> <6050> 2403 +<6051> <6051> 12671 +<6052> <6052> 1946 +<6053> <6054> 12672 +<6055> <6055> 3478 +<6056> <6058> 12674 +<6059> <6059> 6674 +<605a> <605a> 6671 +<605b> <605c> 12677 +<605d> <605d> 6670 +<605e> <6061> 12679 +<6062> <6062> 2027 +<6063> <6063> 6675 +<6064> <6064> 4031 +<6065> <6066> 12683 +<6067> <6067> 6672 +<6068> <6068> 1941 +<6069> <6069> 1590 +<606a> <606a> 5729 +<606b> <606b> 1521 +<606c> <606c> 3652 +<606d> <606d> 1792 +<606e> <606e> 12685 +<606f> <606f> 3855 +<6070> <6070> 3102 +<6071> <6072> 12686 +<6073> <6073> 2399 +<6074> <6075> 12688 +<6076> <6076> 1584 +<6077> <6077> 12690 +<6078> <6079> 5724 +<607a> <607a> 5727 +<607b> <607b> 5726 +<607c> <607c> 2872 +<607d> <607d> 5730 +<607e> <607e> 12691 +<607f> <607f> 4262 +<6080> <6082> 12692 +<6083> <6083> 5735 +<6084> <6084> 3137 +<6085> <6088> 12695 +<6089> <6089> 3857 +endcidrange + +100 begincidrange +<608a> <608b> 12699 +<608c> <608c> 5737 +<608d> <608d> 1902 +<608e> <6091> 12701 +<6092> <6092> 5736 +<6093> <6093> 12705 +<6094> <6094> 2031 +<6095> <6095> 12706 +<6096> <6096> 5731 +<6097> <6099> 12707 +<609a> <609a> 5732 +<609b> <609b> 5738 +<609c> <609c> 12710 +<609d> <609d> 5734 +<609e> <609e> 12711 +<609f> <609f> 3841 +<60a0> <60a0> 4267 +<60a1> <60a2> 12712 +<60a3> <60a3> 2001 +<60a4> <60a5> 12714 +<60a6> <60a6> 4358 +<60a7> <60a7> 12716 +<60a8> <60a8> 2909 +<60a9> <60aa> 12717 +<60ab> <60ab> 6676 +<60ac> <60ac> 4039 +<60ad> <60ad> 5733 +<60ae> <60ae> 12719 +<60af> <60af> 2810 +<60b0> <60b0> 12720 +<60b1> <60b1> 5741 +<60b2> <60b2> 1048 +<60b3> <60b3> 12721 +<60b4> <60b4> 5746 +<60b5> <60b5> 9140 +<60b6> <60b6> 8318 +<60b7> <60b7> 12722 +<60b8> <60b8> 2101 +<60b9> <60ba> 12723 +<60bb> <60bb> 5740 +<60bc> <60bc> 1440 +<60bd> <60c4> 12725 +<60c5> <60c5> 3174 +<60c6> <60c6> 5744 +<60c7> <60c9> 12733 +<60ca> <60ca> 2265 +<60cb> <60cb> 3744 +<60cc> <60d0> 12736 +<60d1> <60d1> 2056 +<60d2> <60d4> 12741 +<60d5> <60d5> 3643 +<60d6> <60d7> 12744 +<60d8> <60d8> 5743 +<60d9> <60d9> 12746 +<60da> <60da> 5745 +<60db> <60db> 12747 +<60dc> <60dc> 3860 +<60dd> <60dd> 5742 +<60de> <60de> 12748 +<60df> <60df> 3768 +<60e0> <60e0> 2034 +<60e1> <60e1> 7907 +<60e2> <60e5> 12749 +<60e6> <60e6> 1484 +<60e7> <60e7> 2324 +<60e8> <60e8> 1177 +<60e9> <60e9> 1266 +<60ea> <60ea> 12753 +<60eb> <60eb> 1058 +<60ec> <60ec> 5739 +<60ed> <60ed> 1176 +<60ee> <60ee> 1421 +<60ef> <60ef> 1848 +<60f0> <60f0> 1575 +<60f1> <60f1> 8341 +<60f2> <60f2> 9147 +<60f3> <60f3> 3928 +<60f4> <60f4> 5751 +<60f5> <60f5> 12754 +<60f6> <60f6> 2017 +<60f7> <60f8> 12755 +<60f9> <60f9> 3234 +<60fa> <60fa> 3989 +<60fb> <60fb> 9145 +<60fc> <60ff> 12757 +<6100> <6100> 5752 +<6101> <6101> 1299 +<6102> <6105> 12761 +<6106> <6106> 6677 +<6107> <6107> 12765 +<6108> <6108> 4319 +<6109> <6109> 4297 +<610a> <610c> 12766 +<610d> <610d> 6678 +<610e> <610e> 5753 +<610f> <610f> 4201 +<6110> <6114> 12769 +<6115> <6115> 5749 +<6116> <6119> 12774 +<611a> <611a> 4291 +endcidrange + +100 begincidrange +<611b> <611b> 7720 +<611c> <611c> 9149 +<611d> <611e> 12778 +<611f> <611f> 1739 +<6120> <6120> 5747 +<6121> <6122> 12780 +<6123> <6123> 5750 +<6124> <6124> 1660 +<6125> <6125> 12782 +<6126> <6126> 5748 +<6127> <6127> 2445 +<6128> <612a> 12783 +<612b> <612b> 5754 +<612c> <6133> 12786 +<6134> <6134> 9141 +<6135> <6136> 12794 +<6137> <6137> 9146 +<6138> <613d> 12796 +<613e> <613e> 9139 +<613f> <613f> 4347 +<6140> <6147> 12802 +<6148> <6148> 1355 +<6149> <6149> 12810 +<614a> <614a> 5755 +<614b> <614b> 8546 +<614c> <614c> 2010 +<614d> <614d> 12811 +<614e> <614e> 3376 +<614f> <6150> 12812 +<6151> <6151> 3358 +<6152> <6154> 12814 +<6155> <6155> 2848 +<6156> <6157> 12817 +<6158> <6158> 7774 +<6159> <6159> 12819 +<615a> <615a> 7773 +<615b> <615c> 12820 +<615d> <615d> 6679 +<615e> <615e> 12822 +<615f> <615f> 9143 +<6160> <6161> 12823 +<6162> <6162> 2724 +<6163> <6163> 7983 +<6164> <6164> 9439 +<6165> <6166> 12825 +<6167> <6167> 2032 +<6168> <6168> 2363 +<6169> <6169> 12827 +<616a> <616a> 9138 +<616b> <616b> 8526 +<616c> <616d> 12828 +<616e> <616e> 8274 +<616f> <616f> 12830 +<6170> <6170> 3790 +<6171> <6172> 12831 +<6173> <6173> 9148 +<6174> <6174> 12833 +<6175> <6175> 5756 +<6176> <6176> 8427 +<6177> <6177> 2371 +<6178> <6181> 12834 +<6182> <6182> 8754 +<6183> <6189> 12844 +<618a> <618a> 7743 +<618b> <618b> 1112 +<618c> <618d> 12851 +<618e> <618e> 4410 +<618f> <618f> 12853 +<6190> <6190> 8219 +<6191> <6191> 8380 +<6192> <6192> 9150 +<6193> <6193> 12854 +<6194> <6194> 5758 +<6195> <6199> 12855 +<619a> <619a> 7854 +<619b> <619c> 12860 +<619d> <619d> 6681 +<619e> <61a3> 12862 +<61a4> <61a4> 7931 +<61a5> <61a6> 12868 +<61a7> <61a7> 5759 +<61a8> <61a8> 1888 +<61a9> <61a9> 6680 +<61aa> <61aa> 12870 +<61ab> <61ab> 8329 +<61ac> <61ac> 5757 +<61ad> <61ad> 12871 +<61ae> <61ae> 9137 +<61af> <61b1> 12872 +<61b2> <61b2> 8644 +<61b3> <61b5> 12875 +<61b6> <61b6> 8724 +<61b7> <61b7> 5760 +<61b8> <61bd> 12878 +<61be> <61be> 1901 +<61bf> <61c1> 12884 +<61c2> <61c2> 1517 +<61c3> <61c6> 12887 +<61c7> <61c7> 8158 +<61c8> <61c8> 3971 +endcidrange + +100 begincidrange +<61c9> <61c9> 8739 +<61ca> <61ca> 974 +<61cb> <61cb> 6682 +<61cc> <61cc> 9142 +<61cd> <61d0> 12891 +<61d1> <61d1> 6683 +<61d2> <61d2> 2476 +<61d3> <61d3> 12895 +<61d4> <61d4> 5761 +<61d5> <61dd> 12896 +<61de> <61de> 9868 +<61df> <61df> 9438 +<61e0> <61e2> 12905 +<61e3> <61e3> 9440 +<61e4> <61e5> 12908 +<61e6> <61e6> 2932 +<61e7> <61e7> 12910 +<61e8> <61e8> 9144 +<61e9> <61f1> 12911 +<61f2> <61f2> 7809 +<61f3> <61f4> 12920 +<61f5> <61f5> 5762 +<61f6> <61f6> 8190 +<61f7> <61f7> 8017 +<61f8> <61f8> 8673 +<61f9> <61f9> 12922 +<61fa> <61fa> 9136 +<61fb> <61fb> 12923 +<61fc> <61fc> 8142 +<61fd> <61fd> 12924 +<61fe> <61fe> 8478 +<61ff> <61ff> 5088 +<6200> <6200> 8225 +<6201> <6205> 12925 +<6206> <6206> 6684 +<6207> <6207> 9441 +<6208> <6208> 1765 +<6209> <6209> 12930 +<620a> <620a> 3835 +<620b> <620b> 6393 +<620c> <620c> 4018 +<620d> <620d> 3472 +<620e> <620e> 3249 +<620f> <620f> 3876 +<6210> <6210> 1262 +<6211> <6211> 3809 +<6212> <6212> 2229 +<6213> <6213> 12931 +<6214> <6214> 9379 +<6215> <6215> 5790 +<6216> <6216> 2055 +<6217> <6217> 6394 +<6218> <6218> 4446 +<6219> <6219> 12932 +<621a> <621a> 3068 +<621b> <621b> 6395 +<621c> <621e> 12933 +<621f> <621f> 6396 +<6220> <6220> 12936 +<6221> <6221> 6398 +<6222> <6222> 6397 +<6223> <6223> 12937 +<6224> <6224> 6400 +<6225> <6225> 6399 +<6226> <6226> 12938 +<6227> <6227> 9380 +<6228> <6229> 12939 +<622a> <622a> 2217 +<622b> <622b> 12941 +<622c> <622c> 6401 +<622d> <622d> 12942 +<622e> <622e> 2661 +<622f> <622f> 12943 +<6230> <6230> 8819 +<6231> <6231> 12944 +<6232> <6232> 8624 +<6233> <6233> 1348 +<6234> <6234> 1402 +<6235> <6236> 12945 +<6237> <6237> 1980 +<6238> <623c> 12947 +<623d> <623d> 6644 +<623e> <623e> 6643 +<623f> <623f> 1628 +<6240> <6240> 3566 +<6241> <6241> 1099 +<6242> <6242> 12952 +<6243> <6243> 6645 +<6244> <6246> 12953 +<6247> <6247> 3329 +<6248> <6249> 6646 +<624a> <624a> 12956 +<624b> <624b> 3437 +<624c> <624c> 5306 +<624d> <624d> 1164 +<624e> <624e> 4413 +<624f> <6250> 12957 +<6251> <6251> 3050 +<6252> <6252> 978 +<6253> <6253> 1397 +endcidrange + +100 begincidrange +<6254> <6254> 3246 +<6255> <6257> 12959 +<6258> <6258> 3713 +<6259> <625a> 12962 +<625b> <625b> 2373 +<625c> <6262> 12964 +<6263> <6263> 2408 +<6264> <6265> 12971 +<6266> <6266> 3105 +<6267> <6267> 4531 +<6268> <6268> 12973 +<6269> <6269> 2452 +<626a> <626a> 5307 +<626b> <626b> 3297 +<626c> <626c> 4120 +<626d> <626d> 2917 +<626e> <626e> 1010 +<626f> <626f> 1243 +<6270> <6270> 3232 +<6271> <6272> 12974 +<6273> <6273> 1005 +<6274> <6275> 12976 +<6276> <6276> 1683 +<6277> <6278> 12978 +<6279> <6279> 3003 +<627a> <627b> 12980 +<627c> <627c> 1586 +<627d> <627d> 12982 +<627e> <627e> 4467 +<627f> <627f> 1269 +<6280> <6280> 2095 +<6281> <6283> 12983 +<6284> <6284> 1234 +<6285> <6288> 12986 +<6289> <6289> 2336 +<628a> <628a> 988 +<628b> <6290> 12990 +<6291> <6291> 4189 +<6292> <6292> 3450 +<6293> <6293> 4610 +<6294> <6294> 12996 +<6295> <6295> 3687 +<6296> <6296> 1525 +<6297> <6297> 2374 +<6298> <6298> 4476 +<6299> <6299> 12997 +<629a> <629a> 1698 +<629b> <629b> 2968 +<629c> <629e> 12998 +<629f> <629f> 5308 +<62a0> <62a0> 2406 +<62a1> <62a1> 2684 +<62a2> <62a2> 3133 +<62a3> <62a3> 13001 +<62a4> <62a4> 1977 +<62a5> <62a5> 1041 +<62a6> <62a7> 13002 +<62a8> <62a8> 2987 +<62a9> <62aa> 13004 +<62ab> <62ab> 3004 +<62ac> <62ac> 3578 +<62ad> <62b0> 13006 +<62b1> <62b1> 1040 +<62b2> <62b4> 13010 +<62b5> <62b5> 1463 +<62b6> <62b8> 13013 +<62b9> <62b9> 2827 +<62ba> <62ba> 13016 +<62bb> <62bb> 5309 +<62bc> <62bc> 4067 +<62bd> <62bd> 1294 +<62be> <62be> 13017 +<62bf> <62bf> 2807 +<62c0> <62c1> 13018 +<62c2> <62c2> 1684 +<62c3> <62c3> 13020 +<62c4> <62c4> 4595 +<62c5> <62c5> 1412 +<62c6> <62c6> 1207 +<62c7> <62c7> 2839 +<62c8> <62c8> 2892 +<62c9> <62c9> 2456 +<62ca> <62ca> 5310 +<62cb> <62cb> 13021 +<62cc> <62cc> 1011 +<62cd> <62cd> 2949 +<62ce> <62ce> 2601 +<62cf> <62cf> 13022 +<62d0> <62d0> 1838 +<62d1> <62d1> 13023 +<62d2> <62d2> 2315 +<62d3> <62d3> 3721 +<62d4> <62d4> 985 +<62d5> <62d5> 13024 +<62d6> <62d6> 3712 +<62d7> <62d7> 5312 +<62d8> <62d8> 2303 +<62d9> <62d9> 4635 +<62da> <62da> 5311 +<62db> <62db> 4465 +endcidrange + +100 begincidrange +<62dc> <62dc> 1000 +<62dd> <62de> 13025 +<62df> <62df> 2885 +<62e0> <62e1> 13027 +<62e2> <62e2> 2634 +<62e3> <62e3> 2147 +<62e4> <62e4> 13029 +<62e5> <62e5> 4250 +<62e6> <62e6> 2468 +<62e7> <62e7> 2914 +<62e8> <62e8> 1133 +<62e9> <62e9> 4404 +<62ea> <62eb> 13030 +<62ec> <62ec> 2451 +<62ed> <62ed> 3418 +<62ee> <62ee> 5313 +<62ef> <62ef> 4509 +<62f0> <62f0> 13032 +<62f1> <62f1> 1801 +<62f2> <62f2> 13033 +<62f3> <62f3> 3208 +<62f4> <62f4> 3486 +<62f5> <62f5> 13034 +<62f6> <62f6> 5315 +<62f7> <62f7> 2378 +<62f8> <62fb> 13035 +<62fc> <62fc> 3027 +<62fd> <62fd> 4612 +<62fe> <62fe> 3399 +<62ff> <62ff> 2854 +<6300> <6300> 13039 +<6301> <6301> 1275 +<6302> <6302> 1835 +<6303> <6306> 13040 +<6307> <6307> 4535 +<6308> <6308> 6478 +<6309> <6309> 959 +<630a> <630d> 13044 +<630e> <630e> 2419 +<630f> <6310> 13048 +<6311> <6311> 3655 +<6312> <6315> 13050 +<6316> <6316> 3723 +<6317> <6319> 13054 +<631a> <631a> 4542 +<631b> <631b> 2677 +<631c> <631c> 13057 +<631d> <631d> 3805 +<631e> <631e> 3573 +<631f> <631f> 3961 +<6320> <6320> 2870 +<6321> <6321> 1427 +<6322> <6322> 5314 +<6323> <6323> 4502 +<6324> <6324> 2090 +<6325> <6325> 2024 +<6326> <6327> 13058 +<6328> <6328> 943 +<6329> <6329> 13060 +<632a> <632a> 2931 +<632b> <632b> 1391 +<632c> <632e> 13061 +<632f> <632f> 4498 +<6330> <6331> 13064 +<6332> <6332> 6479 +<6333> <6338> 13066 +<6339> <6339> 5316 +<633a> <633a> 3671 +<633b> <633c> 13072 +<633d> <633d> 3741 +<633e> <633e> 8657 +<633f> <6341> 13074 +<6342> <6342> 3829 +<6343> <6343> 5318 +<6344> <6344> 13077 +<6345> <6345> 3682 +<6346> <6346> 2449 +<6347> <6348> 13078 +<6349> <6349> 4634 +<634a> <634a> 13080 +<634b> <634b> 5317 +<634c> <634c> 977 +<634d> <634d> 1899 +<634e> <634e> 3340 +<634f> <634f> 2902 +<6350> <6350> 2327 +<6351> <6354> 13081 +<6355> <6355> 1149 +<6356> <635d> 13085 +<635e> <635e> 2487 +<635f> <635f> 3557 +<6360> <6360> 13093 +<6361> <6361> 2148 +<6362> <6362> 2000 +<6363> <6363> 1432 +<6364> <6366> 13094 +<6367> <6367> 2998 +<6368> <6368> 8476 +<6369> <6369> 5328 +<636a> <636a> 13097 +endcidrange + +100 begincidrange +<636b> <636b> 9053 +<636c> <636c> 13098 +<636d> <636d> 5325 +<636e> <636e> 2316 +<636f> <6370> 13099 +<6371> <6371> 5321 +<6372> <6372> 9858 +<6373> <6375> 13101 +<6376> <6376> 1338 +<6377> <6377> 2222 +<6378> <6379> 13104 +<637a> <637a> 5322 +<637b> <637b> 2896 +<637c> <637f> 13106 +<6380> <6380> 3891 +<6381> <6381> 13110 +<6382> <6382> 1473 +<6383> <6383> 8461 +<6384> <6384> 8282 +<6385> <6386> 13111 +<6387> <6387> 1565 +<6388> <6388> 3441 +<6389> <6389> 1493 +<638a> <638a> 5327 +<638b> <638b> 13113 +<638c> <638c> 4455 +<638d> <638d> 13114 +<638e> <638e> 5323 +<638f> <638f> 3616 +<6390> <6390> 3101 +<6391> <6391> 13115 +<6392> <6392> 2950 +<6393> <6395> 13116 +<6396> <6396> 4155 +<6397> <6397> 13119 +<6398> <6398> 2337 +<6399> <639f> 13120 +<63a0> <63a0> 2682 +<63a1> <63a1> 13127 +<63a2> <63a2> 3600 +<63a3> <63a3> 1245 +<63a4> <63a4> 13128 +<63a5> <63a5> 2212 +<63a6> <63a6> 13129 +<63a7> <63a7> 2405 +<63a8> <63a8> 3703 +<63a9> <63a9> 4099 +<63aa> <63aa> 1390 +<63ab> <63ab> 13130 +<63ac> <63ac> 5326 +<63ad> <63ad> 5319 +<63ae> <63ae> 5329 +<63af> <63af> 13131 +<63b0> <63b0> 6480 +<63b1> <63b2> 13132 +<63b3> <63b3> 2647 +<63b4> <63b4> 5324 +<63b5> <63b6> 13134 +<63b7> <63b7> 4543 +<63b8> <63b8> 1416 +<63b9> <63b9> 13136 +<63ba> <63ba> 1211 +<63bb> <63bb> 13137 +<63bc> <63bc> 5330 +<63bd> <63bd> 13138 +<63be> <63be> 5340 +<63bf> <63bf> 13139 +<63c0> <63c0> 8077 +<63c1> <63c3> 13140 +<63c4> <63c4> 5335 +<63c5> <63c5> 13143 +<63c6> <63c6> 5339 +<63c7> <63c8> 13144 +<63c9> <63c9> 3259 +<63ca> <63cc> 13146 +<63cd> <63cd> 4670 +<63ce> <63ce> 5337 +<63cf> <63cf> 2797 +<63d0> <63d0> 3636 +<63d1> <63d1> 13149 +<63d2> <63d2> 1196 +<63d3> <63d5> 13150 +<63d6> <63d6> 4165 +<63d7> <63d9> 13153 +<63da> <63da> 8703 +<63db> <63dd> 13156 +<63de> <63de> 5336 +<63df> <63df> 13159 +<63e0> <63e0> 5333 +<63e1> <63e1> 3812 +<63e2> <63e2> 13160 +<63e3> <63e3> 1322 +<63e4> <63e8> 13161 +<63e9> <63e9> 2360 +<63ea> <63ea> 2285 +<63eb> <63ec> 13166 +<63ed> <63ed> 2211 +<63ee> <63ee> 8024 +<63ef> <63f1> 13168 +<63f2> <63f2> 5331 +endcidrange + +100 begincidrange +<63f3> <63f3> 13171 +<63f4> <63f4> 4337 +<63f5> <63f5> 13172 +<63f6> <63f6> 5320 +<63f7> <63f7> 13173 +<63f8> <63f8> 5332 +<63f9> <63fc> 13174 +<63fd> <63fd> 2474 +<63fe> <63fe> 13178 +<63ff> <63ff> 5334 +<6400> <6400> 1210 +<6401> <6401> 1764 +<6402> <6402> 2638 +<6403> <6404> 13179 +<6405> <6405> 2194 +<6406> <640a> 13181 +<640b> <640b> 5343 +<640c> <640c> 5346 +<640d> <640d> 8539 +<640e> <640e> 13186 +<640f> <640f> 1138 +<6410> <6410> 1319 +<6411> <6412> 13187 +<6413> <6413> 1389 +<6414> <6414> 3295 +<6415> <6416> 13189 +<6417> <6417> 7862 +<6418> <641a> 13191 +<641b> <641b> 5344 +<641c> <641c> 3526 +<641d> <641d> 13194 +<641e> <641e> 1758 +<641f> <641f> 13195 +<6420> <6420> 5345 +<6421> <6421> 5348 +<6422> <6425> 13196 +<6426> <6426> 5347 +<6427> <6429> 13200 +<642a> <642a> 3605 +<642b> <642b> 13203 +<642c> <642c> 1004 +<642d> <642d> 1393 +<642e> <6433> 13204 +<6434> <6434> 5942 +<6435> <6435> 13210 +<6436> <6436> 8411 +<6437> <6439> 13211 +<643a> <643a> 3962 +<643b> <643c> 13214 +<643d> <643d> 1202 +<643e> <643e> 13216 +<643f> <643f> 6481 +<6440> <6440> 13217 +<6441> <6441> 5342 +<6442> <6443> 13218 +<6444> <6444> 3356 +<6445> <6445> 5341 +<6446> <6446> 997 +<6447> <6447> 4136 +<6448> <6448> 1120 +<6449> <6449> 13220 +<644a> <644a> 3586 +<644b> <6450> 13221 +<6451> <6451> 9056 +<6452> <6452> 5338 +<6453> <6453> 13227 +<6454> <6454> 3481 +<6455> <6457> 13228 +<6458> <6458> 4427 +<6459> <645b> 13231 +<645c> <645c> 9057 +<645d> <645d> 13234 +<645e> <645e> 5349 +<645f> <645f> 8256 +<6460> <6466> 13235 +<6467> <6467> 1376 +<6468> <6468> 13242 +<6469> <6469> 2825 +<646a> <646c> 13243 +<646d> <646d> 5351 +<646e> <646e> 13246 +<646f> <646f> 8846 +<6470> <6472> 13247 +<6473> <6473> 8159 +<6474> <6475> 13250 +<6476> <6476> 9054 +<6477> <6477> 13252 +<6478> <6479> 2819 +<647a> <647a> 5353 +<647b> <647b> 7786 +<647c> <6481> 13253 +<6482> <6482> 2581 +<6483> <6483> 13259 +<6484> <6484> 5350 +<6485> <6485> 2334 +<6486> <6486> 13260 +<6487> <6487> 3025 +<6488> <6488> 8194 +<6489> <6490> 13261 +<6491> <6491> 1258 +endcidrange + +100 begincidrange +<6492> <6492> 3281 +<6493> <6493> 8339 +<6494> <6494> 13269 +<6495> <6495> 3503 +<6496> <6496> 5352 +<6497> <6498> 13270 +<6499> <6499> 5356 +<649a> <649d> 13272 +<649e> <649e> 4623 +<649f> <649f> 9055 +<64a0> <64a2> 13276 +<64a3> <64a3> 7852 +<64a4> <64a4> 1244 +<64a5> <64a5> 7764 +<64a6> <64a8> 13279 +<64a9> <64a9> 2572 +<64aa> <64aa> 13282 +<64ab> <64ab> 7944 +<64ac> <64ac> 3144 +<64ad> <64ad> 1132 +<64ae> <64ae> 1388 +<64af> <64af> 13283 +<64b0> <64b0> 4616 +<64b1> <64b1> 13284 +<64b2> <64b2> 8384 +<64b3> <64b3> 9058 +<64b4> <64b4> 13285 +<64b5> <64b5> 2895 +<64b6> <64b6> 13286 +<64b7> <64b8> 5354 +<64b9> <64b9> 13287 +<64ba> <64ba> 5357 +<64bb> <64bb> 8544 +<64bc> <64bc> 1898 +<64bd> <64bd> 13288 +<64be> <64be> 8605 +<64bf> <64bf> 8078 +<64c0> <64c0> 5358 +<64c1> <64c1> 8749 +<64c2> <64c2> 2505 +<64c3> <64c3> 13289 +<64c4> <64c4> 8263 +<64c5> <64c5> 3324 +<64c6> <64c6> 13290 +<64c7> <64c7> 8802 +<64c8> <64c9> 13291 +<64ca> <64ca> 8039 +<64cb> <64cb> 7858 +<64cc> <64cc> 13293 +<64cd> <64cd> 1184 +<64ce> <64ce> 3171 +<64cf> <64cf> 13294 +<64d0> <64d0> 5359 +<64d1> <64d1> 13295 +<64d2> <64d2> 3161 +<64d3> <64d3> 13296 +<64d4> <64d4> 7849 +<64d5> <64d6> 13297 +<64d7> <64d7> 5360 +<64d8> <64d8> 6482 +<64d9> <64d9> 13299 +<64da> <64da> 8140 +<64db> <64dd> 13300 +<64de> <64de> 3528 +<64df> <64df> 13303 +<64e0> <64e0> 8050 +<64e1> <64e1> 13304 +<64e2> <64e2> 5362 +<64e3> <64e3> 13305 +<64e4> <64e4> 5361 +<64e5> <64e5> 13306 +<64e6> <64e6> 1160 +<64e7> <64eb> 13307 +<64ec> <64ec> 8344 +<64ed> <64ee> 13312 +<64ef> <64ef> 7762 +<64f0> <64f0> 8356 +<64f1> <64f1> 7964 +<64f2> <64f2> 8847 +<64f3> <64f3> 13314 +<64f4> <64f4> 8173 +<64f5> <64f6> 13315 +<64f7> <64f7> 9061 +<64f8> <64f9> 13317 +<64fa> <64fa> 7725 +<64fb> <64fb> 8530 +<64fc> <64fc> 9062 +<64fd> <64fd> 13319 +<64fe> <64fe> 8442 +<64ff> <64ff> 13320 +<6500> <6500> 2955 +<6501> <6503> 13321 +<6504> <6504> 9059 +<6505> <6505> 13324 +<6506> <6506> 8346 +<6507> <6508> 13325 +<6509> <6509> 5363 +<650a> <650e> 13327 +<650f> <650f> 8252 +<6510> <6511> 13332 +endcidrange + +100 begincidrange +<6512> <6512> 4383 +<6513> <6513> 13334 +<6514> <6514> 8182 +<6515> <6515> 13335 +<6516> <6516> 9060 +<6517> <6517> 13336 +<6518> <6518> 3228 +<6519> <6519> 7785 +<651a> <651a> 13337 +<651b> <651b> 9063 +<651c> <651c> 13338 +<651d> <651d> 8477 +<651e> <6521> 13339 +<6522> <6522> 8793 +<6523> <6523> 8278 +<6524> <6524> 8547 +<6525> <6525> 5364 +<6526> <6529> 13343 +<652a> <652a> 8105 +<652b> <652b> 2335 +<652c> <652c> 8188 +<652d> <652d> 13347 +<652e> <652e> 5365 +<652f> <652f> 4518 +<6530> <6533> 13348 +<6534> <6534> 6409 +<6535> <6535> 6502 +<6536> <6536> 3436 +<6537> <6537> 13352 +<6538> <6538> 4786 +<6539> <6539> 1727 +<653a> <653a> 13353 +<653b> <653b> 1790 +<653c> <653d> 13354 +<653e> <653e> 1634 +<653f> <653f> 4511 +<6540> <6544> 13356 +<6545> <6545> 1827 +<6546> <6547> 13361 +<6548> <6548> 3954 +<6549> <6549> 7371 +<654a> <654b> 13363 +<654c> <654c> 1457 +<654d> <654e> 13365 +<654f> <654f> 2809 +<6550> <6550> 13367 +<6551> <6551> 2295 +<6552> <6554> 13368 +<6555> <6555> 6503 +<6556> <6556> 968 +<6557> <6557> 7726 +<6558> <6558> 13371 +<6559> <6559> 2205 +<655a> <655a> 13372 +<655b> <655b> 2555 +<655c> <655c> 13373 +<655d> <655d> 1087 +<655e> <655e> 1229 +<655f> <6561> 13374 +<6562> <6562> 1741 +<6563> <6563> 3291 +<6564> <6565> 13377 +<6566> <6566> 1559 +<6567> <656a> 13379 +<656b> <656b> 6504 +<656c> <656c> 2275 +<656d> <656f> 13383 +<6570> <6570> 3476 +<6571> <6571> 13386 +<6572> <6572> 3136 +<6573> <6573> 13387 +<6574> <6574> 4508 +<6575> <6575> 7868 +<6576> <6576> 13388 +<6577> <6577> 1680 +<6578> <6578> 8514 +<6579> <6581> 13389 +<6582> <6582> 8222 +<6583> <6583> 7747 +<6584> <6586> 13398 +<6587> <6587> 3795 +<6588> <658a> 13401 +<658b> <658b> 4428 +<658c> <658c> 1116 +<658d> <658f> 13404 +<6590> <6590> 6593 +<6591> <6591> 1002 +<6592> <6592> 13407 +<6593> <6593> 6595 +<6594> <6594> 13408 +<6595> <6595> 9428 +<6596> <6596> 13409 +<6597> <6597> 1526 +<6598> <6598> 13410 +<6599> <6599> 2584 +<659a> <659a> 13411 +<659b> <659b> 7510 +<659c> <659c> 3964 +<659d> <659e> 13412 +<659f> <659f> 4486 +endcidrange + +100 begincidrange +<65a0> <65a0> 13414 +<65a1> <65a1> 3810 +<65a2> <65a3> 13415 +<65a4> <65a4> 2240 +<65a5> <65a5> 1287 +<65a6> <65a6> 13417 +<65a7> <65a7> 1702 +<65a8> <65a8> 13418 +<65a9> <65a9> 4439 +<65aa> <65aa> 13419 +<65ab> <65ab> 6697 +<65ac> <65ac> 8815 +<65ad> <65ad> 1550 +<65ae> <65ae> 13420 +<65af> <65af> 3502 +<65b0> <65b0> 3981 +<65b1> <65b6> 13421 +<65b7> <65b7> 7895 +<65b8> <65b8> 13427 +<65b9> <65b9> 1626 +<65ba> <65bb> 13428 +<65bc> <65bc> 6596 +<65bd> <65bd> 3392 +<65be> <65c0> 13430 +<65c1> <65c1> 2965 +<65c2> <65c2> 13433 +<65c3> <65c3> 6599 +<65c4> <65c4> 6598 +<65c5> <65c5> 2666 +<65c6> <65c6> 6597 +<65c7> <65ca> 13434 +<65cb> <65cb> 4040 +<65cc> <65cc> 6600 +<65cd> <65cd> 13438 +<65ce> <65ce> 6601 +<65cf> <65cf> 4674 +<65d0> <65d1> 13439 +<65d2> <65d2> 6602 +<65d3> <65d5> 13441 +<65d6> <65d6> 6603 +<65d7> <65d7> 3083 +<65d8> <65df> 13444 +<65e0> <65e0> 3821 +<65e1> <65e1> 13452 +<65e2> <65e2> 2107 +<65e3> <65e4> 13453 +<65e5> <65e5> 3248 +<65e6> <65e6> 1418 +<65e7> <65e7> 2296 +<65e8> <65e8> 4539 +<65e9> <65e9> 4394 +<65ea> <65eb> 13455 +<65ec> <65ec> 4055 +<65ed> <65ed> 4028 +<65ee> <65f0> 6410 +<65f1> <65f1> 1900 +<65f2> <65f5> 13457 +<65f6> <65f6> 3400 +<65f7> <65f7> 2434 +<65f8> <65f9> 13461 +<65fa> <65fa> 3755 +<65fb> <65ff> 13463 +<6600> <6600> 6418 +<6601> <6601> 13468 +<6602> <6602> 965 +<6603> <6603> 6416 +<6604> <6605> 13469 +<6606> <6606> 2448 +<6607> <6609> 13471 +<660a> <660a> 6413 +<660b> <660b> 13474 +<660c> <660c> 1220 +<660d> <660d> 13475 +<660e> <660e> 2812 +<660f> <660f> 2045 +<6610> <6612> 13476 +<6613> <6613> 4190 +<6614> <6614> 3843 +<6615> <6615> 6417 +<6616> <6618> 13479 +<6619> <6619> 6414 +<661a> <661c> 13482 +<661d> <661d> 6421 +<661e> <661e> 13485 +<661f> <661f> 3986 +<6620> <6620> 4248 +<6621> <6624> 13486 +<6625> <6625> 1341 +<6626> <6626> 13490 +<6627> <6627> 2758 +<6628> <6628> 4687 +<6629> <662c> 13491 +<662d> <662d> 4466 +<662e> <662e> 13495 +<662f> <662f> 3422 +<6630> <6630> 13496 +<6631> <6631> 6423 +<6632> <6633> 13497 +<6634> <6634> 6422 +<6635> <6635> 6425 +endcidrange + +100 begincidrange +<6636> <6636> 6424 +<6637> <663b> 13499 +<663c> <663c> 4582 +<663d> <663d> 13504 +<663e> <663e> 3905 +<663f> <6640> 13505 +<6641> <6641> 6429 +<6642> <6642> 8493 +<6643> <6643> 2019 +<6644> <664a> 13507 +<664b> <664b> 2251 +<664c> <664c> 3335 +<664d> <664e> 13514 +<664f> <664f> 6430 +<6650> <6651> 13516 +<6652> <6652> 3314 +<6653> <6653> 3947 +<6654> <6654> 6428 +<6655> <6655> 4369 +<6656> <6656> 6431 +<6657> <6657> 6433 +<6658> <6659> 13518 +<665a> <665a> 3742 +<665b> <665c> 13520 +<665d> <665d> 8859 +<665e> <665e> 13522 +<665f> <665f> 6427 +<6660> <6660> 13523 +<6661> <6661> 6432 +<6662> <6663> 13524 +<6664> <6664> 3837 +<6665> <6665> 13526 +<6666> <6666> 2035 +<6667> <6667> 13527 +<6668> <6668> 1252 +<6669> <666d> 13528 +<666e> <666e> 3060 +<666f> <666f> 2271 +<6670> <6670> 3849 +<6671> <6673> 13533 +<6674> <6674> 3172 +<6675> <6675> 13536 +<6676> <6676> 2262 +<6677> <6677> 6434 +<6678> <6679> 13537 +<667a> <667a> 4550 +<667b> <667d> 13539 +<667e> <667e> 2569 +<667f> <6681> 13542 +<6682> <6682> 4384 +<6683> <6683> 13545 +<6684> <6684> 6435 +<6685> <6686> 13546 +<6687> <6687> 3883 +<6688> <6688> 8790 +<6689> <6689> 9384 +<668a> <668b> 13548 +<668c> <668c> 6436 +<668d> <6690> 13550 +<6691> <6691> 3461 +<6692> <6695> 13554 +<6696> <6696> 2928 +<6697> <6697> 960 +<6698> <669c> 13558 +<669d> <669d> 6438 +<669e> <66a1> 13563 +<66a2> <66a2> 7801 +<66a3> <66a6> 13567 +<66a7> <66a7> 6437 +<66a8> <66a8> 7389 +<66a9> <66aa> 13571 +<66ab> <66ab> 8794 +<66ac> <66ad> 13573 +<66ae> <66ae> 2845 +<66af> <66b3> 13575 +<66b4> <66b4> 1042 +<66b5> <66b8> 13580 +<66b9> <66b9> 5979 +<66ba> <66bd> 13584 +<66be> <66be> 6439 +<66bf> <66c3> 13588 +<66c4> <66c4> 9383 +<66c5> <66c5> 13593 +<66c6> <66c6> 9862 +<66c7> <66c7> 9382 +<66c8> <66c8> 13594 +<66c9> <66c9> 8654 +<66ca> <66d5> 13595 +<66d6> <66d6> 9385 +<66d7> <66d8> 13607 +<66d9> <66d9> 3462 +<66da> <66da> 13609 +<66db> <66dc> 6440 +<66dd> <66dd> 3063 +<66de> <66df> 13610 +<66e0> <66e0> 8167 +<66e1> <66e5> 13612 +<66e6> <66e6> 6442 +<66e7> <66e8> 13617 +<66e9> <66e9> 6443 +endcidrange + +100 begincidrange +<66ea> <66eb> 13619 +<66ec> <66ec> 8466 +<66ed> <66ef> 13621 +<66f0> <66f0> 4350 +<66f1> <66f1> 13624 +<66f2> <66f2> 3191 +<66f3> <66f3> 4158 +<66f4> <66f4> 1783 +<66f5> <66f6> 13625 +<66f7> <66f7> 6420 +<66f8> <66f8> 8508 +<66f9> <66f9> 1187 +<66fa> <66fb> 13627 +<66fc> <66fc> 2723 +<66fd> <66fd> 13629 +<66fe> <66fe> 4411 +<66ff> <66ff> 3641 +<6700> <6700> 4683 +<6701> <6702> 13630 +<6703> <6703> 8028 +<6704> <6707> 13632 +<6708> <6708> 4357 +<6709> <6709> 4277 +<670a> <670a> 6515 +<670b> <670b> 2996 +<670c> <670c> 13636 +<670d> <670d> 1691 +<670e> <670f> 13637 +<6710> <6710> 6532 +<6711> <6713> 13639 +<6714> <6714> 3500 +<6715> <6715> 6542 +<6716> <6716> 13642 +<6717> <6717> 2485 +<6718> <671a> 13643 +<671b> <671b> 3756 +<671c> <671c> 13646 +<671d> <671d> 1236 +<671e> <671e> 13647 +<671f> <671f> 3065 +<6720> <6725> 13648 +<6726> <6726> 6572 +<6727> <6727> 9412 +<6728> <6728> 2849 +<6729> <6729> 13654 +<672a> <672a> 3779 +<672b> <672b> 2828 +<672c> <672c> 1063 +<672d> <672d> 4416 +<672e> <672e> 13655 +<672f> <672f> 3468 +<6730> <6730> 13656 +<6731> <6731> 4587 +<6732> <6733> 13657 +<6734> <6734> 3058 +<6735> <6735> 1571 +<6736> <6739> 13659 +<673a> <673a> 2063 +<673b> <673c> 13663 +<673d> <673d> 4011 +<673e> <673f> 13665 +<6740> <6740> 3306 +<6741> <6741> 13667 +<6742> <6742> 4374 +<6743> <6743> 3203 +<6744> <6745> 13668 +<6746> <6746> 1734 +<6747> <6747> 13670 +<6748> <6748> 6228 +<6749> <6749> 3317 +<674a> <674b> 13671 +<674c> <674c> 6225 +<674d> <674d> 13673 +<674e> <674e> 2521 +<674f> <674f> 3998 +<6750> <6750> 1163 +<6751> <6751> 1384 +<6752> <6752> 13674 +<6753> <6753> 6226 +<6754> <6755> 13675 +<6756> <6756> 4457 +<6757> <675b> 13677 +<675c> <675c> 1540 +<675d> <675d> 13682 +<675e> <675e> 6227 +<675f> <675f> 3471 +<6760> <6760> 1751 +<6761> <6761> 3656 +<6762> <6764> 13683 +<6765> <6765> 2463 +<6766> <6767> 13686 +<6768> <6768> 4119 +<6769> <6769> 6229 +<676a> <676a> 6232 +<676b> <676c> 13688 +<676d> <676d> 1907 +<676e> <676e> 13690 +<676f> <676f> 1046 +<6770> <6770> 2221 +<6771> <6771> 7884 +endcidrange + +100 begincidrange +<6772> <6772> 6415 +<6773> <6773> 6233 +<6774> <6774> 13691 +<6775> <6775> 6236 +<6776> <6776> 13692 +<6777> <6777> 6241 +<6778> <677b> 13693 +<677c> <677c> 6242 +<677d> <677d> 13697 +<677e> <677e> 3518 +<677f> <677f> 1008 +<6780> <6780> 13698 +<6781> <6781> 2078 +<6782> <6783> 13699 +<6784> <6784> 1810 +<6785> <6786> 13701 +<6787> <6787> 6231 +<6788> <6788> 13703 +<6789> <6789> 3752 +<678a> <678a> 13704 +<678b> <678b> 6240 +<678c> <678f> 13705 +<6790> <6790> 3845 +<6791> <6794> 13709 +<6795> <6795> 4494 +<6796> <6796> 13713 +<6797> <6797> 2591 +<6798> <6798> 6234 +<6799> <6799> 13714 +<679a> <679a> 2747 +<679b> <679b> 13715 +<679c> <679c> 1876 +<679d> <679d> 4517 +<679e> <679e> 6238 +<679f> <67a1> 13716 +<67a2> <67a2> 3447 +<67a3> <67a3> 4393 +<67a4> <67a4> 13719 +<67a5> <67a5> 6230 +<67a6> <67a6> 13720 +<67a7> <67a7> 6235 +<67a8> <67a8> 6237 +<67a9> <67a9> 13721 +<67aa> <67aa> 3126 +<67ab> <67ab> 1664 +<67ac> <67ac> 13722 +<67ad> <67ad> 6239 +<67ae> <67ae> 13723 +<67af> <67af> 2410 +<67b0> <67b0> 6248 +<67b1> <67b2> 13724 +<67b3> <67b3> 6253 +<67b4> <67b4> 13726 +<67b5> <67b5> 6251 +<67b6> <67b6> 2127 +<67b7> <67b7> 2114 +<67b8> <67b8> 6257 +<67b9> <67c0> 13727 +<67c1> <67c1> 6260 +<67c2> <67c2> 13735 +<67c3> <67c3> 6256 +<67c4> <67c4> 1123 +<67c5> <67ce> 13736 +<67cf> <67cf> 995 +<67d0> <67d0> 2838 +<67d1> <67d1> 1735 +<67d2> <67d2> 3073 +<67d3> <67d3> 3225 +<67d4> <67d4> 3260 +<67d5> <67d7> 13746 +<67d8> <67d8> 6245 +<67d9> <67d9> 6250 +<67da> <67da> 6252 +<67db> <67db> 13749 +<67dc> <67dc> 1866 +<67dd> <67dd> 6254 +<67de> <67de> 4690 +<67df> <67df> 13750 +<67e0> <67e0> 2910 +<67e1> <67e1> 13751 +<67e2> <67e2> 6258 +<67e3> <67e4> 13752 +<67e5> <67e5> 1200 +<67e6> <67e8> 13754 +<67e9> <67e9> 6247 +<67ea> <67eb> 13757 +<67ec> <67ec> 2144 +<67ed> <67ee> 13759 +<67ef> <67ef> 2383 +<67f0> <67f0> 6243 +<67f1> <67f1> 4600 +<67f2> <67f2> 13761 +<67f3> <67f3> 2625 +<67f4> <67f4> 1208 +<67f5> <67fc> 13762 +<67fd> <67fd> 6261 +<67fe> <67fe> 13770 +<67ff> <67ff> 3416 +<6800> <6800> 6255 +<6801> <6804> 13771 +endcidrange + +100 begincidrange +<6805> <6805> 4421 +<6806> <6806> 13775 +<6807> <6807> 1107 +<6808> <6808> 4444 +<6809> <6809> 6244 +<680a> <680a> 6246 +<680b> <680b> 1519 +<680c> <680c> 6249 +<680d> <680d> 13776 +<680e> <680e> 6259 +<680f> <680f> 2467 +<6810> <6810> 13777 +<6811> <6811> 3470 +<6812> <6812> 13778 +<6813> <6813> 3485 +<6814> <6815> 13779 +<6816> <6816> 3067 +<6817> <6817> 2528 +<6818> <681c> 13781 +<681d> <681d> 6271 +<681e> <6820> 13786 +<6821> <6821> 3950 +<6822> <6828> 13789 +<6829> <6829> 6280 +<682a> <682a> 4585 +<682b> <6831> 13796 +<6832> <6833> 6262 +<6834> <6836> 13803 +<6837> <6837> 4130 +<6838> <6838> 1922 +<6839> <6839> 1780 +<683a> <683b> 13806 +<683c> <683c> 1772 +<683d> <683d> 4375 +<683e> <683e> 6277 +<683f> <683f> 13808 +<6840> <6840> 6276 +<6841> <6841> 6274 +<6842> <6842> 1865 +<6843> <6843> 3621 +<6844> <6844> 6268 +<6845> <6845> 3765 +<6846> <6846> 2431 +<6847> <6847> 13809 +<6848> <6848> 963 +<6849> <6849> 6279 +<684a> <684a> 6278 +<684b> <684b> 13810 +<684c> <684c> 4637 +<684d> <684d> 13811 +<684e> <684e> 6266 +<684f> <684f> 13812 +<6850> <6850> 3674 +<6851> <6851> 3292 +<6852> <6852> 13813 +<6853> <6853> 1997 +<6854> <6854> 2220 +<6855> <6855> 6272 +<6856> <685f> 13814 +<6860> <6861> 6264 +<6862> <6862> 6267 +<6863> <6863> 1430 +<6864> <6864> 6269 +<6865> <6865> 3138 +<6866> <6866> 6273 +<6867> <6867> 6275 +<6868> <6868> 2177 +<6869> <6869> 4619 +<686a> <686a> 13824 +<686b> <686b> 6286 +<686c> <6873> 13825 +<6874> <6874> 6283 +<6875> <6875> 13833 +<6876> <6876> 3681 +<6877> <6877> 6284 +<6878> <6880> 13834 +<6881> <6881> 2563 +<6882> <6882> 13843 +<6883> <6883> 6270 +<6884> <6884> 13844 +<6885> <6885> 2748 +<6886> <6886> 1019 +<6887> <688e> 13845 +<688f> <688f> 6282 +<6890> <6892> 13853 +<6893> <6893> 6285 +<6894> <6896> 13856 +<6897> <6897> 1788 +<6898> <6898> 9322 +<6899> <689c> 13859 +<689d> <689d> 8565 +<689e> <689e> 13863 +<689f> <689f> 9325 +<68a0> <68a1> 13864 +<68a2> <68a2> 3339 +<68a3> <68a5> 13866 +<68a6> <68a6> 2771 +<68a7> <68a7> 3823 +<68a8> <68a8> 2513 +<68a9> <68ac> 13869 +endcidrange + +100 begincidrange +<68ad> <68ad> 3560 +<68ae> <68ae> 13873 +<68af> <68af> 3632 +<68b0> <68b0> 3968 +<68b1> <68b2> 13874 +<68b3> <68b3> 3448 +<68b4> <68b4> 13876 +<68b5> <68b5> 6281 +<68b6> <68bf> 13877 +<68c0> <68c0> 2143 +<68c1> <68c1> 13887 +<68c2> <68c2> 6287 +<68c3> <68c8> 13888 +<68c9> <68c9> 2787 +<68ca> <68ca> 13894 +<68cb> <68cb> 3076 +<68cc> <68cc> 13895 +<68cd> <68cd> 1872 +<68ce> <68d1> 13896 +<68d2> <68d2> 1023 +<68d3> <68d4> 13900 +<68d5> <68d5> 4661 +<68d6> <68d6> 9323 +<68d7> <68d7> 8799 +<68d8> <68d8> 2079 +<68d9> <68d9> 13902 +<68da> <68da> 2992 +<68db> <68de> 13903 +<68df> <68df> 7886 +<68e0> <68e0> 3607 +<68e1> <68e2> 13907 +<68e3> <68e3> 6298 +<68e4> <68e6> 13909 +<68e7> <68e7> 8818 +<68e8> <68ed> 13912 +<68ee> <68ee> 3302 +<68ef> <68ef> 13918 +<68f0> <68f0> 6294 +<68f1> <68f1> 2509 +<68f2> <68f4> 13919 +<68f5> <68f5> 2384 +<68f6> <68f8> 13922 +<68f9> <68f9> 6292 +<68fa> <68fa> 1840 +<68fb> <68fb> 13925 +<68fc> <68fc> 6289 +<68fd> <68ff> 13926 +<6900> <6900> 13929 +<6901> <6901> 6296 +<6902> <6904> 13930 +<6905> <6905> 4181 +<6906> <690a> 13933 +<690b> <690b> 6295 +<690c> <690c> 13938 +<690d> <690d> 4529 +<690e> <690e> 4626 +<690f> <690f> 9331 +<6910> <6910> 6299 +<6911> <6911> 13939 +<6912> <6912> 2184 +<6913> <691e> 13940 +<691f> <6920> 6290 +<6921> <6923> 13952 +<6924> <6924> 6293 +<6925> <692c> 13955 +<692d> <692d> 3719 +<692e> <692f> 13963 +<6930> <6930> 4147 +<6931> <6933> 13965 +<6934> <6934> 6310 +<6935> <6938> 13968 +<6939> <6939> 6301 +<693a> <693c> 13972 +<693d> <693d> 1325 +<693e> <693e> 13975 +<693f> <693f> 1342 +<6940> <6941> 13976 +<6942> <6942> 6303 +<6943> <6949> 13978 +<694a> <694a> 8702 +<694b> <6952> 13985 +<6953> <6953> 7934 +<6954> <6954> 3955 +<6955> <6956> 13993 +<6957> <6957> 6297 +<6958> <6959> 13995 +<695a> <695a> 1315 +<695b> <695c> 13997 +<695d> <695d> 6304 +<695e> <695e> 2510 +<695f> <695f> 13999 +<6960> <6960> 6302 +<6961> <6962> 14000 +<6963> <6963> 6317 +<6964> <6965> 14002 +<6966> <6966> 6316 +<6967> <6967> 14004 +<6968> <6968> 9333 +<6969> <696a> 14005 +<696b> <696b> 6306 +endcidrange + +100 begincidrange +<696c> <696c> 14007 +<696d> <696d> 8714 +<696e> <696e> 6288 +<696f> <6970> 14008 +<6971> <6971> 6300 +<6972> <6974> 14010 +<6975> <6975> 8047 +<6976> <6976> 14013 +<6977> <6977> 2361 +<6978> <6978> 6309 +<6979> <6979> 6318 +<697a> <697b> 14014 +<697c> <697c> 2636 +<697d> <697f> 14016 +<6980> <6980> 6307 +<6981> <6981> 14019 +<6982> <6982> 1728 +<6983> <6983> 14020 +<6984> <6984> 6305 +<6985> <6985> 14021 +<6986> <6986> 4289 +<6987> <6988> 6312 +<6989> <6989> 6315 +<698a> <698c> 14022 +<698d> <698d> 6331 +<698e> <6993> 14025 +<6994> <6994> 2481 +<6995> <6995> 6329 +<6996> <6997> 14031 +<6998> <6998> 6308 +<6999> <699a> 14033 +<699b> <699b> 6319 +<699c> <699c> 1020 +<699d> <69a6> 14035 +<69a7> <69a7> 6320 +<69a8> <69a8> 4422 +<69a9> <69a9> 14045 +<69aa> <69aa> 9320 +<69ab> <69ab> 6322 +<69ac> <69ac> 14046 +<69ad> <69ad> 6323 +<69ae> <69ae> 8448 +<69af> <69b0> 14047 +<69b1> <69b1> 6325 +<69b2> <69b3> 14049 +<69b4> <69b4> 2618 +<69b5> <69b6> 14051 +<69b7> <69b7> 3217 +<69b8> <69ba> 14053 +<69bb> <69bb> 6321 +<69bc> <69be> 14056 +<69bf> <69bf> 9334 +<69c0> <69c0> 14059 +<69c1> <69c1> 6326 +<69c2> <69c9> 14060 +<69ca> <69ca> 6327 +<69cb> <69cb> 7975 +<69cc> <69cc> 6311 +<69cd> <69cd> 8407 +<69ce> <69ce> 6314 +<69cf> <69cf> 14068 +<69d0> <69d0> 1990 +<69d1> <69d3> 14069 +<69d4> <69d4> 6324 +<69d5> <69da> 14072 +<69db> <69db> 2154 +<69dc> <69de> 14078 +<69df> <69df> 6328 +<69e0> <69e0> 6330 +<69e1> <69e6> 14081 +<69e7> <69e7> 9340 +<69e8> <69ec> 14087 +<69ed> <69ed> 6334 +<69ee> <69f1> 14092 +<69f2> <69f2> 6338 +<69f3> <69f3> 8097 +<69f4> <69fc> 14096 +<69fd> <69fd> 1186 +<69fe> <69fe> 14105 +<69ff> <69ff> 6332 +<6a00> <6a00> 14106 +<6a01> <6a01> 8874 +<6a02> <6a02> 8197 +<6a03> <6a04> 14107 +<6a05> <6a05> 9324 +<6a06> <6a09> 14109 +<6a0a> <6a0a> 1611 +<6a0b> <6a12> 14113 +<6a13> <6a13> 8254 +<6a14> <6a16> 14121 +<6a17> <6a18> 6335 +<6a19> <6a19> 7756 +<6a1a> <6a1d> 14124 +<6a1e> <6a1e> 8506 +<6a1f> <6a1f> 4450 +<6a20> <6a20> 14128 +<6a21> <6a21> 2822 +<6a22> <6a22> 14129 +<6a23> <6a23> 8708 +<6a24> <6a27> 14130 +endcidrange + +100 begincidrange +<6a28> <6a28> 6348 +<6a29> <6a29> 14134 +<6a2a> <6a2a> 1944 +<6a2b> <6a2e> 14135 +<6a2f> <6a2f> 6333 +<6a30> <6a30> 14139 +<6a31> <6a31> 4232 +<6a32> <6a34> 14140 +<6a35> <6a35> 6344 +<6a36> <6a37> 14143 +<6a38> <6a38> 8387 +<6a39> <6a39> 8512 +<6a3a> <6a3a> 9335 +<6a3b> <6a3c> 14145 +<6a3d> <6a3d> 6347 +<6a3e> <6a3e> 6340 +<6a3f> <6a43> 14147 +<6a44> <6a44> 6339 +<6a45> <6a46> 14152 +<6a47> <6a47> 3134 +<6a48> <6a48> 9332 +<6a49> <6a4a> 14154 +<6a4b> <6a4b> 8413 +<6a4c> <6a4f> 14156 +<6a50> <6a50> 6342 +<6a51> <6a57> 14160 +<6a58> <6a58> 6349 +<6a59> <6a59> 1261 +<6a5a> <6a5a> 14167 +<6a5b> <6a5b> 6343 +<6a5c> <6a5e> 14168 +<6a5f> <6a5f> 8040 +<6a60> <6a60> 14171 +<6a61> <6a61> 3933 +<6a62> <6a62> 8581 +<6a63> <6a64> 14172 +<6a65> <6a65> 6337 +<6a66> <6a70> 14174 +<6a71> <6a71> 1308 +<6a72> <6a78> 14185 +<6a79> <6a79> 6346 +<6a7a> <6a7b> 14192 +<6a7c> <6a7c> 6350 +<6a7d> <6a7f> 14194 +<6a80> <6a80> 3591 +<6a81> <6a83> 14197 +<6a84> <6a84> 3866 +<6a85> <6a88> 14200 +<6a89> <6a89> 9330 +<6a8a> <6a8d> 14204 +<6a8e> <6a8e> 6345 +<6a8f> <6a8f> 14208 +<6a90> <6a90> 6352 +<6a91> <6a91> 6351 +<6a92> <6a93> 14209 +<6a94> <6a94> 7861 +<6a95> <6a96> 14211 +<6a97> <6a97> 6354 +<6a98> <6a9b> 14213 +<6a9c> <6a9c> 9336 +<6a9d> <6a9f> 14217 +<6aa0> <6aa0> 6341 +<6aa1> <6aa1> 14220 +<6aa2> <6aa2> 8075 +<6aa3> <6aa3> 9348 +<6aa4> <6aa8> 14221 +<6aa9> <6aa9> 6353 +<6aaa> <6aaa> 14226 +<6aab> <6aab> 6355 +<6aac> <6aac> 2767 +<6aad> <6aae> 14227 +<6aaf> <6aaf> 9881 +<6ab0> <6ab2> 14229 +<6ab3> <6ab3> 9346 +<6ab4> <6ab7> 14232 +<6ab8> <6ab8> 8353 +<6ab9> <6aba> 14236 +<6abb> <6abb> 8082 +<6abc> <6ac2> 14238 +<6ac3> <6ac3> 7992 +<6ac4> <6ad2> 14245 +<6ad3> <6ad3> 9349 +<6ad4> <6ad9> 14260 +<6ada> <6ada> 9344 +<6adb> <6adb> 9326 +<6adc> <6adc> 14266 +<6add> <6add> 9339 +<6ade> <6ade> 9350 +<6adf> <6adf> 9329 +<6ae0> <6ae6> 14267 +<6ae7> <6ae7> 9347 +<6ae8> <6ae8> 9328 +<6ae9> <6ae9> 14274 +<6aea> <6aea> 9321 +<6aeb> <6aeb> 14275 +<6aec> <6aec> 9343 +<6aed> <6af2> 14276 +<6af3> <6af3> 9327 +<6af4> <6af7> 14282 +<6af8> <6af8> 9345 +endcidrange + +100 begincidrange +<6af9> <6afa> 14286 +<6afb> <6afb> 8736 +<6afc> <6aff> 14288 +<6b00> <6b03> 14292 +<6b04> <6b04> 8181 +<6b05> <6b09> 14296 +<6b0a> <6b0a> 8436 +<6b0b> <6b0e> 14301 +<6b0f> <6b0f> 9341 +<6b10> <6b11> 14305 +<6b12> <6b12> 9337 +<6b13> <6b15> 14307 +<6b16> <6b16> 9342 +<6b17> <6b1d> 14310 +<6b1e> <6b1e> 9338 +<6b1f> <6b1f> 14317 +<6b20> <6b20> 3124 +<6b21> <6b21> 1361 +<6b22> <6b22> 1995 +<6b23> <6b23> 3979 +<6b24> <6b24> 6577 +<6b25> <6b26> 14318 +<6b27> <6b27> 2936 +<6b28> <6b31> 14320 +<6b32> <6b32> 4320 +<6b33> <6b36> 14330 +<6b37> <6b37> 6578 +<6b38> <6b38> 14334 +<6b39> <6b39> 6579 +<6b3a> <6b3a> 3066 +<6b3b> <6b3c> 14335 +<6b3d> <6b3d> 8419 +<6b3e> <6b3e> 2427 +<6b3f> <6b42> 14337 +<6b43> <6b43> 6580 +<6b44> <6b45> 14341 +<6b46> <6b46> 6581 +<6b47> <6b47> 3957 +<6b48> <6b48> 14343 +<6b49> <6b49> 3125 +<6b4a> <6b4b> 14344 +<6b4c> <6b4c> 1763 +<6b4d> <6b4f> 14346 +<6b50> <6b50> 8365 +<6b51> <6b58> 14349 +<6b59> <6b59> 6582 +<6b5a> <6b5e> 14357 +<6b5f> <6b5f> 9419 +<6b60> <6b60> 14362 +<6b61> <6b61> 8019 +<6b62> <6b62> 4536 +<6b63> <6b63> 4510 +<6b64> <6b64> 1358 +<6b65> <6b65> 1156 +<6b66> <6b66> 3827 +<6b67> <6b67> 3078 +<6b68> <6b69> 14363 +<6b6a> <6b6a> 3730 +<6b6b> <6b71> 14365 +<6b72> <6b72> 8537 +<6b73> <6b76> 14372 +<6b77> <6b77> 8211 +<6b78> <6b78> 7987 +<6b79> <6b79> 1400 +<6b7a> <6b7a> 14376 +<6b7b> <6b7b> 3509 +<6b7c> <6b7c> 2130 +<6b7d> <6b80> 14377 +<6b81> <6b82> 6358 +<6b83> <6b83> 4115 +<6b84> <6b84> 6361 +<6b85> <6b85> 14381 +<6b86> <6b86> 1404 +<6b87> <6b87> 6360 +<6b88> <6b88> 14382 +<6b89> <6b89> 4060 +<6b8a> <6b8a> 3449 +<6b8b> <6b8b> 1175 +<6b8c> <6b8c> 14383 +<6b8d> <6b8d> 6364 +<6b8e> <6b91> 14384 +<6b92> <6b93> 6362 +<6b94> <6b95> 14388 +<6b96> <6b96> 4530 +<6b97> <6b97> 14390 +<6b98> <6b98> 7772 +<6b99> <6b99> 14391 +<6b9a> <6b9b> 6365 +<6b9c> <6b9d> 14392 +<6b9e> <6b9e> 9352 +<6b9f> <6ba0> 14394 +<6ba1> <6ba1> 6367 +<6ba2> <6ba3> 14396 +<6ba4> <6ba4> 9351 +<6ba5> <6ba9> 14398 +<6baa> <6baa> 6368 +<6bab> <6bab> 9354 +<6bac> <6bad> 14403 +<6bae> <6bae> 9353 +<6baf> <6baf> 9355 +endcidrange + +100 begincidrange +<6bb0> <6bb1> 14405 +<6bb2> <6bb2> 8067 +<6bb3> <6bb3> 6589 +<6bb4> <6bb4> 2938 +<6bb5> <6bb5> 1549 +<6bb6> <6bb6> 14407 +<6bb7> <6bb7> 4218 +<6bb8> <6bb9> 14408 +<6bba> <6bba> 8463 +<6bbb> <6bbb> 8155 +<6bbc> <6bbe> 14410 +<6bbf> <6bbf> 1487 +<6bc0> <6bc0> 14413 +<6bc1> <6bc1> 2030 +<6bc2> <6bc2> 6591 +<6bc3> <6bc4> 14414 +<6bc5> <6bc5> 4202 +<6bc6> <6bc6> 8367 +<6bc7> <6bca> 14416 +<6bcb> <6bcb> 3826 +<6bcc> <6bcc> 14420 +<6bcd> <6bcd> 2843 +<6bce> <6bce> 14421 +<6bcf> <6bcf> 2756 +<6bd0> <6bd1> 14422 +<6bd2> <6bd2> 1533 +<6bd3> <6bd3> 4719 +<6bd4> <6bd4> 1073 +<6bd5> <6bd5> 1080 +<6bd6> <6bd6> 1082 +<6bd7> <6bd7> 3007 +<6bd8> <6bd8> 14424 +<6bd9> <6bd9> 1081 +<6bda> <6bda> 14425 +<6bdb> <6bdb> 2736 +<6bdc> <6be0> 14426 +<6be1> <6be1> 4434 +<6be2> <6be9> 14431 +<6bea> <6bea> 6484 +<6beb> <6beb> 1912 +<6bec> <6bee> 14439 +<6bef> <6bef> 3597 +<6bf0> <6bf2> 14442 +<6bf3> <6bf3> 6485 +<6bf4> <6bf4> 14445 +<6bf5> <6bf5> 6487 +<6bf6> <6bf8> 14446 +<6bf9> <6bf9> 6488 +<6bfa> <6bfc> 14449 +<6bfd> <6bfd> 6486 +<6bfe> <6bfe> 14452 +<6bff> <6bff> 9408 +<6c00> <6c04> 14453 +<6c05> <6c05> 6489 +<6c06> <6c06> 6491 +<6c07> <6c07> 6490 +<6c08> <6c08> 8813 +<6c09> <6c0b> 14458 +<6c0c> <6c0c> 9409 +<6c0d> <6c0d> 6492 +<6c0e> <6c0e> 14461 +<6c0f> <6c0f> 3430 +<6c10> <6c10> 4715 +<6c11> <6c11> 2806 +<6c12> <6c12> 14462 +<6c13> <6c13> 2730 +<6c14> <6c14> 3095 +<6c15> <6c15> 6493 +<6c16> <6c16> 2861 +<6c17> <6c17> 14463 +<6c18> <6c1a> 6494 +<6c1b> <6c1b> 1650 +<6c1c> <6c1e> 14464 +<6c1f> <6c1f> 1687 +<6c20> <6c20> 14467 +<6c21> <6c21> 6497 +<6c22> <6c22> 3167 +<6c23> <6c23> 8394 +<6c24> <6c24> 6499 +<6c25> <6c25> 14468 +<6c26> <6c26> 1883 +<6c27> <6c27> 4126 +<6c28> <6c28> 956 +<6c29> <6c29> 6498 +<6c2a> <6c2a> 6500 +<6c2b> <6c2b> 8423 +<6c2c> <6c2c> 9410 +<6c2d> <6c2d> 14469 +<6c2e> <6c2e> 1419 +<6c2f> <6c2f> 2671 +<6c30> <6c30> 3173 +<6c31> <6c31> 14470 +<6c32> <6c32> 6501 +<6c33> <6c33> 14471 +<6c34> <6c34> 3491 +<6c35> <6c35> 5791 +<6c36> <6c37> 14472 +<6c38> <6c38> 4261 +<6c39> <6c3c> 14474 +<6c3d> <6c3d> 4847 +endcidrange + +100 begincidrange +<6c3e> <6c3f> 14478 +<6c40> <6c40> 3666 +<6c41> <6c41> 4524 +<6c42> <6c42> 3184 +<6c43> <6c45> 14480 +<6c46> <6c46> 4852 +<6c47> <6c47> 2040 +<6c48> <6c48> 14483 +<6c49> <6c49> 1905 +<6c4a> <6c4a> 5794 +<6c4b> <6c4f> 14484 +<6c50> <6c50> 3864 +<6c51> <6c53> 14489 +<6c54> <6c54> 5792 +<6c55> <6c55> 3328 +<6c56> <6c56> 14492 +<6c57> <6c57> 1904 +<6c58> <6c5a> 14493 +<6c5b> <6c5b> 4061 +<6c5c> <6c5c> 5793 +<6c5d> <6c5d> 3269 +<6c5e> <6c5e> 1800 +<6c5f> <6c5f> 2174 +<6c60> <6c60> 1277 +<6c61> <6c61> 3818 +<6c62> <6c63> 14496 +<6c64> <6c64> 3603 +<6c65> <6c67> 14498 +<6c68> <6c69> 5800 +<6c6a> <6c6a> 3749 +<6c6b> <6c6f> 14501 +<6c70> <6c70> 3584 +<6c71> <6c71> 14506 +<6c72> <6c72> 2086 +<6c73> <6c73> 14507 +<6c74> <6c74> 5802 +<6c75> <6c75> 14508 +<6c76> <6c76> 5803 +<6c77> <6c78> 14509 +<6c79> <6c79> 4005 +<6c7a> <6c7c> 14511 +<6c7d> <6c7d> 3098 +<6c7e> <6c7e> 1655 +<6c7f> <6c80> 14514 +<6c81> <6c81> 3164 +<6c82> <6c82> 4177 +<6c83> <6c83> 3813 +<6c84> <6c84> 14516 +<6c85> <6c85> 5796 +<6c86> <6c86> 5804 +<6c87> <6c87> 14517 +<6c88> <6c88> 3371 +<6c89> <6c89> 1254 +<6c8a> <6c8b> 14518 +<6c8c> <6c8c> 5799 +<6c8d> <6c8e> 14520 +<6c8f> <6c8f> 3074 +<6c90> <6c90> 5797 +<6c91> <6c92> 14522 +<6c93> <6c93> 6687 +<6c94> <6c94> 5798 +<6c95> <6c98> 14524 +<6c99> <6c99> 3308 +<6c9a> <6c9a> 14528 +<6c9b> <6c9b> 2983 +<6c9c> <6c9e> 14529 +<6c9f> <6c9f> 1806 +<6ca0> <6ca0> 14532 +<6ca1> <6ca1> 2752 +<6ca2> <6ca2> 14533 +<6ca3> <6ca3> 5795 +<6ca4> <6ca4> 2942 +<6ca5> <6ca5> 2541 +<6ca6> <6ca6> 2688 +<6ca7> <6ca7> 1182 +<6ca8> <6ca8> 14534 +<6ca9> <6ca9> 5805 +<6caa> <6caa> 1979 +<6cab> <6cab> 2832 +<6cac> <6cac> 14535 +<6cad> <6cad> 5808 +<6cae> <6cae> 2313 +<6caf> <6cb0> 14536 +<6cb1> <6cb1> 5819 +<6cb2> <6cb2> 5813 +<6cb3> <6cb3> 1930 +<6cb4> <6cb7> 14538 +<6cb8> <6cb8> 1645 +<6cb9> <6cb9> 4274 +<6cba> <6cba> 14542 +<6cbb> <6cbb> 4557 +<6cbc> <6cbc> 4468 +<6cbd> <6cbd> 1818 +<6cbe> <6cbe> 4437 +<6cbf> <6cbf> 4097 +<6cc0> <6cc3> 14543 +<6cc4> <6cc4> 3972 +<6cc5> <6cc5> 3187 +<6cc6> <6cc8> 14547 +<6cc9> <6cc9> 3205 +endcidrange + +100 begincidrange +<6cca> <6cca> 1147 +<6ccb> <6ccb> 14550 +<6ccc> <6ccc> 2783 +<6ccd> <6ccf> 14551 +<6cd0> <6cd0> 5806 +<6cd1> <6cd2> 14554 +<6cd3> <6cd3> 5820 +<6cd4> <6cd4> 5807 +<6cd5> <6cd5> 1605 +<6cd6> <6cd6> 5815 +<6cd7> <6cd7> 5812 +<6cd8> <6cda> 14556 +<6cdb> <6cdb> 1623 +<6cdc> <6cdd> 14559 +<6cde> <6cde> 2915 +<6cdf> <6cdf> 14561 +<6ce0> <6ce0> 5814 +<6ce1> <6ce1> 2974 +<6ce2> <6ce2> 1135 +<6ce3> <6ce3> 3099 +<6ce4> <6ce4> 14562 +<6ce5> <6ce5> 2883 +<6ce6> <6ce7> 14563 +<6ce8> <6ce8> 4607 +<6ce9> <6ce9> 14565 +<6cea> <6cea> 2508 +<6ceb> <6ceb> 5817 +<6cec> <6ced> 14566 +<6cee> <6cee> 5818 +<6cef> <6cef> 5821 +<6cf0> <6cf0> 3580 +<6cf1> <6cf1> 5811 +<6cf2> <6cf2> 14568 +<6cf3> <6cf3> 4259 +<6cf4> <6cf4> 14569 +<6cf5> <6cf5> 1068 +<6cf6> <6cf6> 6688 +<6cf7> <6cf8> 5809 +<6cf9> <6cf9> 14570 +<6cfa> <6cfa> 5816 +<6cfb> <6cfb> 3973 +<6cfc> <6cfc> 3042 +<6cfd> <6cfd> 4406 +<6cfe> <6cfe> 5822 +<6cff> <6cff> 14571 +<6d00> <6d00> 14572 +<6d01> <6d01> 2225 +<6d02> <6d03> 14573 +<6d04> <6d04> 5829 +<6d05> <6d06> 14575 +<6d07> <6d07> 5828 +<6d08> <6d0a> 14577 +<6d0b> <6d0b> 4124 +<6d0c> <6d0c> 5825 +<6d0d> <6d0d> 14580 +<6d0e> <6d0e> 5831 +<6d0f> <6d11> 14581 +<6d12> <6d12> 3282 +<6d13> <6d16> 14584 +<6d17> <6d17> 3873 +<6d18> <6d18> 14588 +<6d19> <6d19> 5830 +<6d1a> <6d1a> 5836 +<6d1b> <6d1b> 2700 +<6d1c> <6d1d> 14589 +<6d1e> <6d1e> 1523 +<6d1f> <6d24> 14591 +<6d25> <6d25> 2243 +<6d26> <6d26> 14597 +<6d27> <6d27> 5824 +<6d28> <6d29> 14598 +<6d2a> <6d2a> 1952 +<6d2b> <6d2b> 5832 +<6d2c> <6d2d> 14600 +<6d2e> <6d2e> 5834 +<6d2f> <6d30> 14602 +<6d31> <6d31> 1596 +<6d32> <6d32> 4573 +<6d33> <6d33> 5840 +<6d34> <6d34> 14604 +<6d35> <6d35> 5835 +<6d36> <6d38> 14605 +<6d39> <6d39> 5823 +<6d3a> <6d3a> 14608 +<6d3b> <6d3b> 2051 +<6d3c> <6d3c> 3726 +<6d3d> <6d3d> 3103 +<6d3e> <6d3e> 2954 +<6d3f> <6d40> 14609 +<6d41> <6d41> 2624 +<6d42> <6d42> 14611 +<6d43> <6d43> 5826 +<6d44> <6d44> 14612 +<6d45> <6d45> 3120 +<6d46> <6d46> 2173 +<6d47> <6d47> 2190 +<6d48> <6d48> 5827 +<6d49> <6d49> 14613 +<6d4a> <6d4a> 4644 +<6d4b> <6d4b> 1193 +endcidrange + +100 begincidrange +<6d4c> <6d4c> 14614 +<6d4d> <6d4d> 5833 +<6d4e> <6d4e> 2102 +<6d4f> <6d4f> 5837 +<6d50> <6d50> 14615 +<6d51> <6d51> 2048 +<6d52> <6d52> 5838 +<6d53> <6d53> 2921 +<6d54> <6d54> 5839 +<6d55> <6d58> 14616 +<6d59> <6d59> 4484 +<6d5a> <6d5a> 2352 +<6d5b> <6d5b> 14620 +<6d5c> <6d5c> 5848 +<6d5d> <6d5d> 14621 +<6d5e> <6d5e> 5845 +<6d5f> <6d5f> 14622 +<6d60> <6d60> 5849 +<6d61> <6d62> 14623 +<6d63> <6d63> 5851 +<6d64> <6d65> 14625 +<6d66> <6d66> 3061 +<6d67> <6d68> 14627 +<6d69> <6d69> 1917 +<6d6a> <6d6a> 2486 +<6d6b> <6d6d> 14629 +<6d6e> <6d6e> 1692 +<6d6f> <6d6f> 5842 +<6d70> <6d73> 14632 +<6d74> <6d74> 4324 +<6d75> <6d76> 14636 +<6d77> <6d77> 1882 +<6d78> <6d78> 2255 +<6d79> <6d79> 9180 +<6d7a> <6d7b> 14638 +<6d7c> <6d7c> 5850 +<6d7d> <6d81> 14640 +<6d82> <6d82> 3696 +<6d83> <6d84> 14645 +<6d85> <6d85> 2908 +<6d86> <6d86> 14647 +<6d87> <6d87> 9179 +<6d88> <6d88> 3944 +<6d89> <6d89> 3359 +<6d8a> <6d8b> 14648 +<6d8c> <6d8c> 4260 +<6d8d> <6d8d> 14650 +<6d8e> <6d8e> 3902 +<6d8f> <6d90> 14651 +<6d91> <6d91> 5841 +<6d92> <6d92> 14653 +<6d93> <6d94> 5846 +<6d95> <6d95> 3644 +<6d96> <6d9a> 14654 +<6d9b> <6d9b> 3617 +<6d9c> <6d9c> 14659 +<6d9d> <6d9d> 2495 +<6d9e> <6d9e> 5843 +<6d9f> <6d9f> 2553 +<6da0> <6da0> 5844 +<6da1> <6da1> 3807 +<6da2> <6da2> 14660 +<6da3> <6da3> 2006 +<6da4> <6da4> 1460 +<6da5> <6da5> 14661 +<6da6> <6da6> 3278 +<6da7> <6da7> 2168 +<6da8> <6da8> 4456 +<6da9> <6da9> 3301 +<6daa> <6daa> 1693 +<6dab> <6dab> 5864 +<6dac> <6dad> 14662 +<6dae> <6dae> 5866 +<6daf> <6daf> 4077 +<6db0> <6db1> 14664 +<6db2> <6db2> 4161 +<6db3> <6db4> 14666 +<6db5> <6db5> 1892 +<6db6> <6db7> 14668 +<6db8> <6db8> 1931 +<6db9> <6dbe> 14670 +<6dbf> <6dbf> 5857 +<6dc0> <6dc0> 1486 +<6dc1> <6dc3> 14676 +<6dc4> <6dc4> 4650 +<6dc5> <6dc5> 5854 +<6dc6> <6dc6> 3946 +<6dc7> <6dc7> 5853 +<6dc8> <6dca> 14679 +<6dcb> <6dcb> 2597 +<6dcc> <6dcc> 3613 +<6dcd> <6dd0> 14682 +<6dd1> <6dd1> 3454 +<6dd2> <6dd5> 14686 +<6dd6> <6dd6> 2874 +<6dd7> <6dd7> 14690 +<6dd8> <6dd8> 3623 +<6dd9> <6dd9> 5862 +<6dda> <6ddc> 14691 +<6ddd> <6ddd> 5861 +endcidrange + +100 begincidrange +<6dde> <6dde> 5855 +<6ddf> <6ddf> 14694 +<6de0> <6de0> 5858 +<6de1> <6de1> 1422 +<6de2> <6de3> 14695 +<6de4> <6de4> 4286 +<6de5> <6de5> 14697 +<6de6> <6de6> 5860 +<6de7> <6de9> 14698 +<6dea> <6dea> 8286 +<6deb> <6deb> 4224 +<6dec> <6dec> 1382 +<6ded> <6ded> 14701 +<6dee> <6dee> 1993 +<6def> <6df0> 14702 +<6df1> <6df1> 3367 +<6df2> <6df2> 14704 +<6df3> <6df3> 1345 +<6df4> <6df4> 14705 +<6df5> <6df5> 8772 +<6df6> <6df6> 9186 +<6df7> <6df7> 2049 +<6df8> <6df8> 14706 +<6df9> <6df9> 4086 +<6dfa> <6dfa> 8404 +<6dfb> <6dfb> 3648 +<6dfc> <6dfc> 6689 +<6dfd> <6dff> 14707 +<6e00> <6e04> 14710 +<6e05> <6e05> 3170 +<6e06> <6e09> 14715 +<6e0a> <6e0a> 4331 +<6e0b> <6e0b> 14719 +<6e0c> <6e0c> 5865 +<6e0d> <6e0d> 4658 +<6e0e> <6e0e> 5856 +<6e0f> <6e0f> 14720 +<6e10> <6e10> 2166 +<6e11> <6e11> 5859 +<6e12> <6e13> 14721 +<6e14> <6e14> 4299 +<6e15> <6e15> 14723 +<6e16> <6e16> 5863 +<6e17> <6e17> 3377 +<6e18> <6e19> 14724 +<6e1a> <6e1a> 5852 +<6e1b> <6e1c> 14726 +<6e1d> <6e1d> 4298 +<6e1e> <6e1f> 14728 +<6e20> <6e20> 3195 +<6e21> <6e21> 1544 +<6e22> <6e22> 14730 +<6e23> <6e23> 4415 +<6e24> <6e24> 1146 +<6e25> <6e25> 5877 +<6e26> <6e26> 8607 +<6e27> <6e28> 14731 +<6e29> <6e29> 3793 +<6e2a> <6e2a> 14733 +<6e2b> <6e2b> 5867 +<6e2c> <6e2c> 7782 +<6e2d> <6e2d> 3787 +<6e2e> <6e2e> 14734 +<6e2f> <6e2f> 1750 +<6e30> <6e31> 14735 +<6e32> <6e32> 5876 +<6e33> <6e33> 14737 +<6e34> <6e34> 2391 +<6e35> <6e37> 14738 +<6e38> <6e38> 4275 +<6e39> <6e39> 14741 +<6e3a> <6e3a> 2801 +<6e3b> <6e3d> 14742 +<6e3e> <6e3e> 8035 +<6e3f> <6e42> 14745 +<6e43> <6e43> 2953 +<6e44> <6e44> 5878 +<6e45> <6e4c> 14749 +<6e4d> <6e4d> 3701 +<6e4e> <6e4e> 5869 +<6e4f> <6e52> 14757 +<6e53> <6e54> 5874 +<6e55> <6e55> 14761 +<6e56> <6e56> 1973 +<6e57> <6e57> 14762 +<6e58> <6e58> 3923 +<6e59> <6e5a> 14763 +<6e5b> <6e5b> 4448 +<6e5c> <6e5d> 14765 +<6e5e> <6e5e> 9181 +<6e5f> <6e5f> 5872 +<6e60> <6e6a> 14767 +<6e6b> <6e6b> 5870 +<6e6c> <6e6d> 14778 +<6e6e> <6e6e> 5868 +<6e6f> <6e6f> 8555 +<6e70> <6e7d> 14780 +<6e7e> <6e7e> 3734 +<6e7f> <6e7f> 3393 +<6e80> <6e82> 14794 +endcidrange + +100 begincidrange +<6e83> <6e83> 2446 +<6e84> <6e84> 14797 +<6e85> <6e85> 2167 +<6e86> <6e86> 5873 +<6e87> <6e88> 14798 +<6e89> <6e89> 1731 +<6e8a> <6e8e> 14800 +<6e8f> <6e8f> 5893 +<6e90> <6e90> 4343 +<6e91> <6e95> 14805 +<6e96> <6e96> 8885 +<6e97> <6e97> 14810 +<6e98> <6e98> 5881 +<6e99> <6e9b> 14811 +<6e9c> <6e9c> 2616 +<6e9d> <6e9d> 7974 +<6e9e> <6e9e> 14814 +<6e9f> <6e9f> 5895 +<6ea0> <6ea1> 14815 +<6ea2> <6ea2> 4206 +<6ea3> <6ea4> 14817 +<6ea5> <6ea5> 5885 +<6ea6> <6ea6> 14819 +<6ea7> <6ea7> 5886 +<6ea8> <6ea9> 14820 +<6eaa> <6eaa> 3863 +<6eab> <6eae> 14822 +<6eaf> <6eaf> 3538 +<6eb0> <6eb0> 14826 +<6eb1> <6eb1> 5880 +<6eb2> <6eb2> 5871 +<6eb3> <6eb3> 14827 +<6eb4> <6eb4> 5891 +<6eb5> <6eb5> 14828 +<6eb6> <6eb6> 3255 +<6eb7> <6eb7> 5889 +<6eb8> <6eb9> 14829 +<6eba> <6eba> 2890 +<6ebb> <6ebb> 5888 +<6ebc> <6ebc> 14831 +<6ebd> <6ebd> 5887 +<6ebe> <6ec0> 14832 +<6ec1> <6ec1> 1313 +<6ec2> <6ec2> 5894 +<6ec3> <6ec3> 14835 +<6ec4> <6ec4> 7779 +<6ec5> <6ec5> 8328 +<6ec6> <6ec6> 14836 +<6ec7> <6ec7> 1474 +<6ec8> <6eca> 14837 +<6ecb> <6ecb> 4649 +<6ecc> <6ecc> 7869 +<6ecd> <6ecd> 14840 +<6ece> <6ece> 9025 +<6ecf> <6ecf> 5892 +<6ed0> <6ed0> 14841 +<6ed1> <6ed1> 1985 +<6ed2> <6ed2> 14842 +<6ed3> <6ed3> 4655 +<6ed4> <6ed4> 3618 +<6ed5> <6ed5> 6568 +<6ed6> <6ed6> 14843 +<6ed7> <6ed7> 5890 +<6ed8> <6ed9> 14844 +<6eda> <6eda> 1871 +<6edb> <6edd> 14846 +<6ede> <6ede> 4556 +<6edf> <6edf> 5879 +<6ee0> <6ee0> 5882 +<6ee1> <6ee1> 2721 +<6ee2> <6ee2> 5884 +<6ee3> <6ee3> 14849 +<6ee4> <6ee4> 2674 +<6ee5> <6ee5> 2479 +<6ee6> <6ee6> 2679 +<6ee7> <6ee7> 14850 +<6ee8> <6ee8> 1118 +<6ee9> <6ee9> 3589 +<6eea> <6eeb> 14851 +<6eec> <6eec> 8011 +<6eed> <6eee> 14853 +<6eef> <6eef> 8850 +<6ef0> <6ef1> 14855 +<6ef2> <6ef2> 8484 +<6ef3> <6ef3> 14857 +<6ef4> <6ef4> 1455 +<6ef5> <6ef6> 14858 +<6ef7> <6ef7> 8264 +<6ef8> <6ef8> 9184 +<6ef9> <6ef9> 5901 +<6efa> <6efe> 14860 +<6eff> <6eff> 8311 +<6f00> <6f00> 14865 +<6f01> <6f01> 8762 +<6f02> <6f02> 3022 +<6f03> <6f05> 14866 +<6f06> <6f06> 3072 +<6f07> <6f08> 14869 +<6f09> <6f09> 5907 +<6f0a> <6f0e> 14871 +endcidrange + +100 begincidrange +<6f0f> <6f0f> 2640 +<6f10> <6f12> 14876 +<6f13> <6f13> 2519 +<6f14> <6f14> 4102 +<6f15> <6f15> 5900 +<6f16> <6f19> 14879 +<6f1a> <6f1a> 8369 +<6f1b> <6f1f> 14883 +<6f20> <6f20> 2833 +<6f21> <6f21> 14888 +<6f22> <6f22> 8001 +<6f23> <6f23> 8220 +<6f24> <6f24> 5899 +<6f25> <6f28> 14889 +<6f29> <6f29> 5908 +<6f2a> <6f2a> 5906 +<6f2b> <6f2b> 2725 +<6f2c> <6f2c> 8888 +<6f2d> <6f2d> 5883 +<6f2e> <6f2e> 14893 +<6f2f> <6f2f> 5902 +<6f30> <6f30> 14894 +<6f31> <6f31> 3477 +<6f32> <6f32> 8822 +<6f33> <6f33> 4453 +<6f34> <6f35> 14895 +<6f36> <6f36> 5903 +<6f37> <6f37> 14897 +<6f38> <6f38> 8091 +<6f39> <6f3d> 14898 +<6f3e> <6f3e> 4131 +<6f3f> <6f3f> 8095 +<6f40> <6f40> 14903 +<6f41> <6f41> 9674 +<6f42> <6f45> 14904 +<6f46> <6f47> 5897 +<6f48> <6f4a> 14908 +<6f4b> <6f4b> 5904 +<6f4c> <6f4c> 14911 +<6f4d> <6f4d> 3770 +<6f4e> <6f50> 14912 +<6f51> <6f51> 8382 +<6f52> <6f53> 14915 +<6f54> <6f54> 8116 +<6f55> <6f57> 14917 +<6f58> <6f58> 2956 +<6f59> <6f59> 9175 +<6f5a> <6f5b> 14920 +<6f5c> <6f5c> 3118 +<6f5d> <6f5d> 14922 +<6f5e> <6f5e> 2657 +<6f5f> <6f61> 14923 +<6f62> <6f62> 5896 +<6f63> <6f63> 14926 +<6f64> <6f64> 8453 +<6f65> <6f65> 14927 +<6f66> <6f66> 2579 +<6f67> <6f6c> 14928 +<6f6d> <6f6d> 3593 +<6f6e> <6f6e> 1238 +<6f6f> <6f6f> 9185 +<6f70> <6f70> 8172 +<6f71> <6f71> 14934 +<6f72> <6f72> 5913 +<6f73> <6f73> 14935 +<6f74> <6f74> 5905 +<6f75> <6f76> 14936 +<6f77> <6f77> 9194 +<6f78> <6f78> 5912 +<6f79> <6f79> 14938 +<6f7a> <6f7a> 5915 +<6f7b> <6f7b> 14939 +<6f7c> <6f7c> 5914 +<6f7d> <6f7e> 14940 +<6f7f> <6f7f> 9187 +<6f80> <6f80> 8462 +<6f81> <6f83> 14942 +<6f84> <6f84> 1267 +<6f85> <6f85> 14945 +<6f86> <6f86> 8102 +<6f87> <6f87> 8196 +<6f88> <6f88> 1247 +<6f89> <6f89> 5909 +<6f8a> <6f8b> 14946 +<6f8c> <6f8c> 5911 +<6f8d> <6f8d> 5910 +<6f8e> <6f8e> 2989 +<6f8f> <6f96> 14948 +<6f97> <6f97> 8093 +<6f98> <6f9b> 14956 +<6f9c> <6f9c> 2472 +<6f9d> <6f9f> 14960 +<6fa0> <6fa0> 9189 +<6fa1> <6fa1> 4395 +<6fa2> <6fa3> 14963 +<6fa4> <6fa4> 8804 +<6fa5> <6fa6> 14965 +<6fa7> <6fa7> 5918 +<6fa8> <6fa8> 14967 +<6fa9> <6fa9> 9442 +endcidrange + +100 begincidrange +<6faa> <6fad> 14968 +<6fae> <6fae> 9182 +<6faf> <6fb0> 14972 +<6fb1> <6fb1> 7876 +<6fb2> <6fb2> 14974 +<6fb3> <6fb3> 975 +<6fb4> <6fb5> 14975 +<6fb6> <6fb6> 5920 +<6fb7> <6fb8> 14977 +<6fb9> <6fb9> 5919 +<6fba> <6fbf> 14979 +<6fc0> <6fc0> 2071 +<6fc1> <6fc1> 8886 +<6fc2> <6fc2> 5921 +<6fc3> <6fc3> 8361 +<6fc4> <6fc8> 14985 +<6fc9> <6fc9> 5917 +<6fca> <6fd0> 14990 +<6fd1> <6fd1> 5916 +<6fd2> <6fd2> 1117 +<6fd3> <6fd4> 14997 +<6fd5> <6fd5> 8491 +<6fd6> <6fd7> 14999 +<6fd8> <6fd8> 8357 +<6fd9> <6fda> 15001 +<6fdb> <6fdb> 9867 +<6fdc> <6fdd> 15003 +<6fde> <6fde> 5924 +<6fdf> <6fdf> 8054 +<6fe0> <6fe0> 5925 +<6fe1> <6fe1> 5922 +<6fe2> <6fe3> 15005 +<6fe4> <6fe4> 8557 +<6fe5> <6fea> 15007 +<6feb> <6feb> 8193 +<6fec> <6fed> 15013 +<6fee> <6fee> 5923 +<6fef> <6fef> 5926 +<6ff0> <6ff0> 8593 +<6ff1> <6ff1> 7760 +<6ff2> <6ff9> 15015 +<6ffa> <6ffa> 8092 +<6ffb> <6ffb> 15023 +<6ffc> <6ffc> 9178 +<6ffd> <6ffd> 15024 +<6ffe> <6ffe> 8275 +<6fff> <6fff> 15025 +<7000> <7004> 15026 +<7005> <7005> 9193 +<7006> <7006> 9188 +<7007> <7008> 15031 +<7009> <7009> 8661 +<700a> <700a> 15033 +<700b> <700b> 9190 +<700c> <700e> 15034 +<700f> <700f> 9183 +<7010> <7010> 15037 +<7011> <7011> 3064 +<7012> <7014> 15038 +<7015> <7015> 7759 +<7016> <7017> 15041 +<7018> <7018> 9177 +<7019> <7019> 15043 +<701a> <701a> 5927 +<701b> <701b> 5929 +<701c> <701c> 15044 +<701d> <701d> 8212 +<701e> <701e> 15045 +<701f> <701f> 9196 +<7020> <7020> 9195 +<7021> <7022> 15046 +<7023> <7023> 5928 +<7024> <7026> 15048 +<7027> <7027> 9176 +<7028> <7028> 9198 +<7029> <702f> 15051 +<7030> <7030> 9870 +<7031> <7031> 15058 +<7032> <7032> 9197 +<7033> <7034> 15059 +<7035> <7035> 5931 +<7036> <7038> 15061 +<7039> <7039> 5930 +<703a> <703d> 15064 +<703e> <703e> 8186 +<703f> <7042> 15068 +<7043> <7043> 9174 +<7044> <7044> 9192 +<7045> <704b> 15072 +<704c> <704c> 1849 +<704d> <704e> 15079 +<704f> <704f> 5932 +<7050> <7050> 15081 +<7051> <7051> 8454 +<7052> <7054> 15082 +<7055> <7055> 8203 +<7056> <7057> 15085 +<7058> <7058> 8550 +<7059> <705c> 15087 +<705d> <705d> 9199 +endcidrange + +100 begincidrange +<705e> <705e> 5933 +<705f> <7062> 15091 +<7063> <7063> 8585 +<7064> <7064> 8280 +<7065> <7066> 15095 +<7067> <7067> 9191 +<7068> <706a> 15097 +<706b> <706b> 2053 +<706c> <706c> 6639 +<706d> <706d> 2805 +<706e> <706e> 15100 +<706f> <706f> 1447 +<7070> <7070> 2023 +<7071> <7074> 15101 +<7075> <7075> 2610 +<7076> <7076> 4401 +<7077> <7077> 15105 +<7078> <7078> 2291 +<7079> <707b> 15106 +<707c> <707c> 4643 +<707d> <707d> 15109 +<707e> <707e> 4377 +<707f> <707f> 1178 +<7080> <7080> 6604 +<7081> <7084> 15110 +<7085> <7085> 6419 +<7086> <7088> 15114 +<7089> <7089> 2646 +<708a> <708a> 1337 +<708b> <708d> 15117 +<708e> <708e> 4096 +<708f> <7091> 15120 +<7092> <7092> 1241 +<7093> <7093> 15123 +<7094> <7094> 3213 +<7095> <7095> 2376 +<7096> <7096> 6606 +<7097> <7098> 15124 +<7099> <7099> 4554 +<709a> <709b> 15126 +<709c> <709c> 6605 +<709d> <709d> 6607 +<709e> <70aa> 15128 +<70ab> <70ab> 6611 +<70ac> <70ac> 2325 +<70ad> <70ad> 3602 +<70ae> <70ae> 2971 +<70af> <70af> 2283 +<70b0> <70b0> 15141 +<70b1> <70b1> 6612 +<70b2> <70b2> 15142 +<70b3> <70b3> 1127 +<70b4> <70b6> 15143 +<70b7> <70b7> 6610 +<70b8> <70b8> 4425 +<70b9> <70b9> 1476 +<70ba> <70ba> 15146 +<70bb> <70bb> 6608 +<70bc> <70bc> 2559 +<70bd> <70bd> 1288 +<70be> <70bf> 15147 +<70c0> <70c0> 6609 +<70c1> <70c1> 3501 +<70c2> <70c2> 2478 +<70c3> <70c3> 3665 +<70c4> <70c7> 15149 +<70c8> <70c8> 2587 +<70c9> <70c9> 15153 +<70ca> <70ca> 6614 +<70cb> <70ce> 15154 +<70cf> <70cf> 8611 +<70d0> <70d7> 15158 +<70d8> <70d8> 1949 +<70d9> <70d9> 2494 +<70da> <70da> 15166 +<70db> <70db> 4593 +<70dc> <70de> 15167 +<70df> <70df> 4085 +<70e0> <70e3> 15170 +<70e4> <70e4> 2379 +<70e5> <70e5> 15174 +<70e6> <70e6> 1616 +<70e7> <70e7> 3342 +<70e8> <70e8> 6613 +<70e9> <70e9> 2039 +<70ea> <70ea> 15175 +<70eb> <70eb> 3615 +<70ec> <70ec> 2254 +<70ed> <70ed> 3235 +<70ee> <70ee> 15176 +<70ef> <70ef> 3862 +<70f0> <70f3> 15177 +<70f4> <70f4> 8570 +<70f5> <70f6> 15181 +<70f7> <70f7> 3738 +<70f8> <70f8> 15183 +<70f9> <70f9> 2988 +<70fa> <70fc> 15184 +<70fd> <70fd> 1670 +<70fe> <70ff> 15187 +endcidrange + +100 begincidrange +<7100> <7108> 15189 +<7109> <7109> 4082 +<710a> <710a> 1903 +<710b> <710f> 15198 +<7110> <7110> 6615 +<7111> <7112> 15203 +<7113> <7113> 6616 +<7114> <7114> 15205 +<7115> <7115> 2005 +<7116> <7116> 6617 +<7117> <7117> 15206 +<7118> <7118> 6640 +<7119> <7119> 1059 +<711a> <711a> 1654 +<711b> <7120> 15207 +<7121> <7121> 8613 +<7122> <7125> 15213 +<7126> <7126> 2186 +<7127> <712e> 15217 +<712f> <712f> 6618 +<7130> <7130> 4111 +<7131> <7131> 6619 +<7132> <7135> 15225 +<7136> <7136> 3222 +<7137> <7144> 15229 +<7145> <7145> 6623 +<7146> <7148> 15243 +<7149> <7149> 8226 +<714a> <714a> 6625 +<714b> <714b> 15246 +<714c> <714c> 2018 +<714d> <714d> 15247 +<714e> <714e> 2136 +<714f> <7151> 15248 +<7152> <7152> 9430 +<7153> <715b> 15251 +<715c> <715c> 6621 +<715d> <715d> 15260 +<715e> <715e> 3312 +<715f> <7161> 15261 +<7162> <7162> 9018 +<7163> <7163> 15264 +<7164> <7164> 2751 +<7165> <7165> 15265 +<7166> <7166> 6641 +<7167> <7167> 4470 +<7168> <7168> 6622 +<7169> <7169> 7918 +<716a> <716b> 15266 +<716c> <716c> 9429 +<716d> <716d> 15268 +<716e> <716e> 4594 +<716f> <7171> 15269 +<7172> <7172> 6624 +<7173> <7173> 6620 +<7174> <7177> 15272 +<7178> <7178> 6626 +<7179> <7179> 15276 +<717a> <717a> 6627 +<717b> <717c> 15277 +<717d> <717d> 3320 +<717e> <7183> 15279 +<7184> <7184> 3861 +<7185> <7189> 15285 +<718a> <718a> 4007 +<718b> <718e> 15290 +<718f> <718f> 4053 +<7190> <7191> 15294 +<7192> <7192> 8744 +<7193> <7193> 15296 +<7194> <7194> 3254 +<7195> <7196> 15297 +<7197> <7197> 9431 +<7198> <7198> 6628 +<7199> <7199> 3844 +<719a> <719e> 15299 +<719f> <719f> 3459 +<71a0> <71a0> 6632 +<71a1> <71a7> 15304 +<71a8> <71a8> 6631 +<71a9> <71ab> 15311 +<71ac> <71ac> 969 +<71ad> <71b0> 15314 +<71b1> <71b1> 8444 +<71b2> <71b2> 15318 +<71b3> <71b3> 6629 +<71b4> <71b4> 15319 +<71b5> <71b5> 6630 +<71b6> <71b8> 15320 +<71b9> <71b9> 6642 +<71ba> <71bd> 15323 +<71be> <71be> 7815 +<71bf> <71c0> 15327 +<71c1> <71c1> 9432 +<71c2> <71c2> 15329 +<71c3> <71c3> 3223 +<71c4> <71c7> 15330 +<71c8> <71c8> 7866 +<71c9> <71cd> 15334 +<71ce> <71ce> 2576 +endcidrange + +100 begincidrange +<71cf> <71d1> 15339 +<71d2> <71d2> 8473 +<71d3> <71d3> 15342 +<71d4> <71d4> 6634 +<71d5> <71d5> 4105 +<71d6> <71d8> 15343 +<71d9> <71d9> 8556 +<71da> <71db> 15346 +<71dc> <71dc> 9433 +<71dd> <71de> 15348 +<71df> <71df> 8743 +<71e0> <71e0> 6633 +<71e1> <71e4> 15350 +<71e5> <71e5> 4402 +<71e6> <71e6> 7775 +<71e7> <71e7> 6635 +<71e8> <71ec> 15354 +<71ed> <71ed> 8863 +<71ee> <71ee> 5014 +<71ef> <71f3> 15359 +<71f4> <71f4> 8029 +<71f5> <71f8> 15364 +<71f9> <71f9> 6636 +<71fa> <71fb> 15368 +<71fc> <71fc> 8124 +<71fd> <71fd> 15370 +<71fe> <71fe> 9434 +<71ff> <71ff> 15371 +<7200> <7205> 15372 +<7206> <7206> 1045 +<7207> <720c> 15378 +<720d> <720d> 8521 +<720e> <720f> 15384 +<7210> <7210> 8262 +<7211> <721a> 15386 +<721b> <721b> 8192 +<721c> <721c> 15396 +<721d> <721d> 6637 +<721e> <7227> 15397 +<7228> <7228> 6638 +<7229> <7229> 15407 +<722a> <722a> 4611 +<722b> <722b> 15408 +<722c> <722c> 2945 +<722d> <722f> 15409 +<7230> <7230> 6508 +<7231> <7231> 953 +<7232> <7232> 8592 +<7233> <7234> 15412 +<7235> <7235> 2339 +<7236> <7236> 1715 +<7237> <7237> 4150 +<7238> <7238> 993 +<7239> <7239> 1498 +<723a> <723a> 8712 +<723b> <723b> 4713 +<723c> <723c> 15414 +<723d> <723d> 3489 +<723e> <723e> 7910 +<723f> <723f> 5789 +<7240> <7246> 15415 +<7247> <7247> 3019 +<7248> <7248> 1009 +<7249> <724b> 15422 +<724c> <724c> 2951 +<724d> <724d> 6505 +<724e> <7251> 15425 +<7252> <7252> 6506 +<7253> <7255> 15429 +<7256> <7256> 6507 +<7257> <7257> 15432 +<7258> <7258> 9411 +<7259> <7259> 4073 +<725a> <725a> 15433 +<725b> <725b> 2916 +<725c> <725c> 15434 +<725d> <725d> 6468 +<725e> <725e> 15435 +<725f> <725f> 2837 +<7260> <7260> 15436 +<7261> <7261> 2840 +<7262> <7262> 2489 +<7263> <7265> 15437 +<7266> <7266> 6469 +<7267> <7267> 2852 +<7268> <7268> 15440 +<7269> <7269> 3838 +<726a> <726d> 15441 +<726e> <726e> 6466 +<726f> <726f> 6470 +<7270> <7271> 15445 +<7272> <7272> 3381 +<7273> <7274> 15447 +<7275> <7275> 3104 +<7276> <7278> 15449 +<7279> <7279> 3627 +<727a> <727a> 3853 +<727b> <727c> 15452 +<727d> <727d> 8396 +<727e> <727f> 6471 +endcidrange + +100 begincidrange +<7280> <7280> 3865 +<7281> <7281> 2514 +<7282> <7283> 15454 +<7284> <7284> 6473 +<7285> <7289> 15456 +<728a> <728a> 1534 +<728b> <728b> 6474 +<728c> <728c> 15461 +<728d> <728d> 6475 +<728e> <728e> 15462 +<728f> <728f> 6476 +<7290> <7291> 15463 +<7292> <7292> 6477 +<7293> <7295> 15465 +<7296> <7296> 9024 +<7297> <729e> 15468 +<729f> <729f> 6467 +<72a0> <72a1> 15476 +<72a2> <72a2> 7889 +<72a3> <72a6> 15478 +<72a7> <72a7> 8620 +<72a8> <72ab> 15482 +<72ac> <72ac> 3209 +<72ad> <72ad> 5615 +<72ae> <72ae> 15486 +<72af> <72af> 1621 +<72b0> <72b0> 5616 +<72b1> <72b3> 15487 +<72b4> <72b4> 5617 +<72b5> <72b5> 15490 +<72b6> <72b6> 4625 +<72b7> <72b8> 5618 +<72b9> <72b9> 4273 +<72ba> <72bf> 15491 +<72c0> <72c0> 8879 +<72c1> <72c1> 5621 +<72c2> <72c2> 2430 +<72c3> <72c3> 5620 +<72c4> <72c4> 1459 +<72c5> <72c7> 15497 +<72c8> <72c8> 1056 +<72c9> <72cc> 15500 +<72cd> <72cd> 5623 +<72ce> <72ce> 5622 +<72cf> <72cf> 15504 +<72d0> <72d0> 1971 +<72d1> <72d1> 15505 +<72d2> <72d2> 5624 +<72d3> <72d6> 15506 +<72d7> <72d7> 1808 +<72d8> <72d8> 15510 +<72d9> <72d9> 2304 +<72da> <72dd> 15511 +<72de> <72de> 2911 +<72df> <72df> 15515 +<72e0> <72e0> 1940 +<72e1> <72e1> 2199 +<72e2> <72e7> 15516 +<72e8> <72e8> 5625 +<72e9> <72e9> 5627 +<72ea> <72eb> 15522 +<72ec> <72ec> 1535 +<72ed> <72ed> 3886 +<72ee> <72ee> 3391 +<72ef> <72ef> 5626 +<72f0> <72f0> 4505 +<72f1> <72f1> 4321 +<72f2> <72f2> 5628 +<72f3> <72f3> 5632 +<72f4> <72f4> 5629 +<72f5> <72f6> 15524 +<72f7> <72f7> 5630 +<72f8> <72f8> 2517 +<72f9> <72f9> 8630 +<72fa> <72fb> 5634 +<72fc> <72fc> 2482 +<72fd> <72fd> 7741 +<72fe> <72ff> 15526 +<7300> <7300> 15528 +<7301> <7301> 5631 +<7302> <7302> 15529 +<7303> <7303> 5633 +<7304> <7309> 15530 +<730a> <730a> 5639 +<730b> <730d> 15536 +<730e> <730e> 2589 +<730f> <7312> 15539 +<7313> <7313> 5637 +<7314> <7314> 15543 +<7315> <7315> 5642 +<7316> <7316> 1221 +<7317> <7317> 5636 +<7318> <731a> 15544 +<731b> <731b> 2770 +<731c> <731c> 1161 +<731d> <731d> 5641 +<731e> <731e> 5640 +<731f> <7320> 15547 +<7321> <7321> 5638 +<7322> <7322> 5643 +endcidrange + +100 begincidrange +<7323> <7324> 15549 +<7325> <7325> 5645 +<7326> <7328> 15551 +<7329> <7329> 3988 +<732a> <732a> 4588 +<732b> <732b> 2733 +<732c> <732c> 5646 +<732d> <732d> 15554 +<732e> <732e> 3908 +<732f> <7330> 15555 +<7331> <7331> 5648 +<7332> <7333> 15557 +<7334> <7334> 1958 +<7335> <7335> 15559 +<7336> <7336> 8757 +<7337> <7337> 6356 +<7338> <7338> 5647 +<7339> <7339> 5644 +<733a> <733a> 15560 +<733b> <733b> 9111 +<733c> <733d> 15561 +<733e> <733e> 1984 +<733f> <733f> 4342 +<7340> <7340> 15563 +<7341> <7341> 9109 +<7342> <7343> 15564 +<7344> <7344> 8767 +<7345> <7345> 8490 +<7346> <734c> 15566 +<734d> <734d> 5650 +<734e> <734f> 15573 +<7350> <7350> 5649 +<7351> <7351> 15575 +<7352> <7352> 6357 +<7353> <7356> 15576 +<7357> <7357> 5651 +<7358> <735f> 15580 +<7360> <7360> 5652 +<7361> <7367> 15588 +<7368> <7368> 7890 +<7369> <7369> 15595 +<736a> <736a> 9110 +<736b> <736b> 9112 +<736c> <736c> 5653 +<736d> <736d> 3572 +<736e> <736e> 15596 +<736f> <736f> 5654 +<7370> <7370> 8354 +<7371> <7371> 15597 +<7372> <7372> 8036 +<7373> <7374> 15598 +<7375> <7375> 8235 +<7376> <7376> 15600 +<7377> <7377> 9108 +<7378> <7378> 8505 +<7379> <7379> 15601 +<737a> <737a> 8543 +<737b> <737b> 8641 +<737c> <737c> 9114 +<737d> <737d> 15602 +<737e> <737e> 5655 +<737f> <737f> 15603 +<7380> <7380> 9113 +<7381> <7383> 15604 +<7384> <7384> 4041 +<7385> <7386> 15607 +<7387> <7387> 2673 +<7388> <7388> 15609 +<7389> <7389> 4310 +<738a> <738a> 15610 +<738b> <738b> 3750 +<738c> <738d> 15611 +<738e> <738e> 6168 +<738f> <7390> 15613 +<7391> <7391> 6169 +<7392> <7395> 15615 +<7396> <7396> 2288 +<7397> <739a> 15619 +<739b> <739b> 2705 +<739c> <739e> 15623 +<739f> <739f> 6172 +<73a0> <73a1> 15626 +<73a2> <73a2> 6171 +<73a3> <73a8> 15628 +<73a9> <73a9> 3735 +<73aa> <73aa> 15634 +<73ab> <73ab> 2746 +<73ac> <73ad> 15635 +<73ae> <73ae> 6170 +<73af> <73af> 1996 +<73b0> <73b0> 3907 +<73b1> <73b1> 15637 +<73b2> <73b2> 2602 +<73b3> <73b3> 6177 +<73b4> <73b6> 15638 +<73b7> <73b7> 6176 +<73b8> <73b9> 15641 +<73ba> <73ba> 6188 +<73bb> <73bb> 1130 +<73bc> <73bf> 15643 +endcidrange + +100 begincidrange +<73c0> <73c0> 6178 +<73c1> <73c1> 15647 +<73c2> <73c2> 6174 +<73c3> <73c7> 15648 +<73c8> <73c8> 6180 +<73c9> <73c9> 6179 +<73ca> <73ca> 3315 +<73cb> <73cc> 15653 +<73cd> <73cd> 4485 +<73ce> <73ce> 15655 +<73cf> <73cf> 6173 +<73d0> <73d0> 1606 +<73d1> <73d1> 6175 +<73d2> <73d8> 15656 +<73d9> <73d9> 6182 +<73da> <73dd> 15663 +<73de> <73de> 6187 +<73df> <73df> 15667 +<73e0> <73e0> 4584 +<73e1> <73e4> 15668 +<73e5> <73e5> 6181 +<73e6> <73e6> 15672 +<73e7> <73e7> 6186 +<73e8> <73e8> 15673 +<73e9> <73e9> 6185 +<73ea> <73ec> 15674 +<73ed> <73ed> 1003 +<73ee> <73f1> 15677 +<73f2> <73f2> 6189 +<73f3> <73fd> 15681 +<73fe> <73fe> 8640 +<73ff> <73ff> 15692 +<7400> <7402> 15693 +<7403> <7403> 3183 +<7404> <7404> 15696 +<7405> <7405> 2480 +<7406> <7406> 2520 +<7407> <7408> 15697 +<7409> <7409> 2617 +<740a> <740a> 6184 +<740b> <740e> 15699 +<740f> <740f> 6190 +<7410> <7410> 3563 +<7411> <7419> 15703 +<741a> <741a> 6200 +<741b> <741b> 6199 +<741c> <7421> 15712 +<7422> <7422> 4638 +<7423> <7424> 15718 +<7425> <7425> 6194 +<7426> <7426> 6193 +<7427> <7427> 15720 +<7428> <7428> 6195 +<7429> <7429> 15721 +<742a> <742a> 6191 +<742b> <742b> 15722 +<742c> <742c> 6198 +<742d> <742d> 15723 +<742e> <742e> 6197 +<742f> <742f> 15724 +<7430> <7430> 6196 +<7431> <7432> 15725 +<7433> <7433> 2590 +<7434> <7434> 3158 +<7435> <7435> 3006 +<7436> <7436> 2948 +<7437> <743b> 15727 +<743c> <743c> 3178 +<743d> <743e> 15732 +<743f> <743f> 9312 +<7440> <7440> 15734 +<7441> <7441> 6201 +<7442> <744a> 15735 +<744b> <744b> 9308 +<744c> <7454> 15744 +<7455> <7455> 6204 +<7456> <7456> 15753 +<7457> <7457> 6203 +<7458> <7458> 15754 +<7459> <7459> 6205 +<745a> <745a> 1966 +<745b> <745b> 6192 +<745c> <745c> 6202 +<745d> <745d> 15755 +<745e> <745e> 3275 +<745f> <745f> 3299 +<7460> <7462> 15756 +<7463> <7463> 8541 +<7464> <7468> 15759 +<7469> <7469> 8741 +<746a> <746a> 8298 +<746b> <746c> 15764 +<746d> <746d> 6207 +<746e> <746f> 15766 +<7470> <7470> 1854 +<7471> <7475> 15768 +<7476> <7476> 4135 +<7477> <7477> 6206 +<7478> <747d> 15773 +<747e> <747e> 6208 +endcidrange + +100 begincidrange +<747f> <747f> 15779 +<7480> <7481> 6211 +<7482> <7482> 15780 +<7483> <7483> 2544 +<7484> <7486> 15781 +<7487> <7487> 6213 +<7488> <7488> 15784 +<7489> <7489> 9313 +<748a> <748a> 15785 +<748b> <748b> 6214 +<748c> <748d> 15786 +<748e> <748e> 6210 +<748f> <748f> 15788 +<7490> <7490> 6218 +<7491> <749b> 15789 +<749c> <749c> 6209 +<749d> <749d> 15800 +<749e> <749e> 6215 +<749f> <74a2> 15801 +<74a3> <74a3> 9307 +<74a4> <74a5> 15805 +<74a6> <74a6> 9314 +<74a7> <74a7> 6219 +<74a8> <74a9> 6216 +<74aa> <74af> 15807 +<74b0> <74b0> 8020 +<74b1> <74b9> 15813 +<74ba> <74ba> 6221 +<74bb> <74bc> 15822 +<74bd> <74bd> 9311 +<74be> <74c9> 15824 +<74ca> <74ca> 8428 +<74cb> <74ce> 15836 +<74cf> <74cf> 9309 +<74d0> <74d1> 15840 +<74d2> <74d2> 6220 +<74d3> <74d3> 15842 +<74d4> <74d4> 9315 +<74d5> <74d9> 15843 +<74da> <74da> 9316 +<74db> <74db> 15848 +<74dc> <74dc> 1832 +<74dd> <74dd> 15849 +<74de> <74de> 6962 +<74df> <74df> 15850 +<74e0> <74e0> 6963 +<74e1> <74e1> 15851 +<74e2> <74e2> 3023 +<74e3> <74e3> 1013 +<74e4> <74e4> 3226 +<74e5> <74e5> 15852 +<74e6> <74e6> 3728 +<74e7> <74ed> 15853 +<74ee> <74ee> 3804 +<74ef> <74ef> 6403 +<74f0> <74f3> 15860 +<74f4> <74f4> 6404 +<74f5> <74f5> 15864 +<74f6> <74f6> 3038 +<74f7> <74f7> 1356 +<74f8> <74fe> 15865 +<74ff> <74ff> 6405 +<7500> <7503> 15872 +<7504> <7504> 4488 +<7505> <750b> 15876 +<750c> <750c> 9381 +<750d> <750d> 5253 +<750e> <750e> 15883 +<750f> <750f> 6406 +<7510> <7510> 15884 +<7511> <7511> 6407 +<7512> <7512> 15885 +<7513> <7513> 6408 +<7514> <7517> 15886 +<7518> <7518> 1733 +<7519> <7519> 5368 +<751a> <751a> 3374 +<751b> <751b> 15890 +<751c> <751c> 3651 +<751d> <751e> 15891 +<751f> <751f> 3379 +<7520> <7522> 15893 +<7523> <7523> 7792 +<7524> <7524> 15896 +<7525> <7525> 3380 +<7526> <7527> 15897 +<7528> <7528> 4264 +<7529> <7529> 3483 +<752a> <752a> 15899 +<752b> <752b> 1697 +<752c> <752c> 6964 +<752d> <752d> 1067 +<752e> <752e> 15900 +<752f> <752f> 5940 +<7530> <7530> 3650 +<7531> <7531> 4270 +<7532> <7532> 2122 +<7533> <7533> 3363 +<7534> <7534> 15901 +<7535> <7535> 1480 +endcidrange + +100 begincidrange +<7536> <7536> 15902 +<7537> <7537> 2867 +<7538> <7538> 1482 +<7539> <7539> 15903 +<753a> <753a> 6776 +<753b> <753b> 1986 +<753c> <753d> 15904 +<753e> <753e> 6166 +<753f> <753f> 15906 +<7540> <7540> 6777 +<7541> <7544> 15907 +<7545> <7545> 1230 +<7546> <7547> 15911 +<7548> <7548> 6780 +<7549> <754a> 15913 +<754b> <754b> 6779 +<754c> <754c> 2232 +<754d> <754d> 15915 +<754e> <754e> 6778 +<754f> <754f> 3782 +<7550> <7553> 15916 +<7554> <7554> 2960 +<7555> <7558> 15920 +<7559> <7559> 2621 +<755a> <755a> 5022 +<755b> <755b> 6781 +<755c> <755c> 4030 +<755d> <755d> 8335 +<755e> <7561> 15924 +<7562> <7562> 7746 +<7563> <7564> 15928 +<7565> <7565> 2683 +<7566> <7566> 3079 +<7567> <7569> 15930 +<756a> <756a> 1609 +<756b> <756b> 8014 +<756c> <7571> 15933 +<7572> <7572> 6782 +<7573> <7573> 15939 +<7574> <7574> 1296 +<7575> <7575> 15940 +<7576> <7576> 7857 +<7577> <7577> 15941 +<7578> <7578> 2064 +<7579> <7579> 6783 +<757a> <757e> 15942 +<757f> <757f> 6164 +<7580> <7582> 15947 +<7583> <7583> 6784 +<7584> <7585> 15950 +<7586> <7586> 2175 +<7587> <7587> 7819 +<7588> <758a> 15952 +<758b> <758b> 7110 +<758c> <758e> 15955 +<758f> <758f> 3455 +<7590> <7590> 15958 +<7591> <7591> 4176 +<7592> <7592> 7008 +<7593> <7593> 15959 +<7594> <7594> 7009 +<7595> <7595> 15960 +<7596> <7596> 7010 +<7597> <7597> 2575 +<7598> <7598> 15961 +<7599> <7599> 1768 +<759a> <759a> 2301 +<759b> <759c> 15962 +<759d> <759d> 7012 +<759e> <759e> 15964 +<759f> <759f> 2930 +<75a0> <75a0> 7011 +<75a1> <75a1> 4122 +<75a2> <75a2> 15965 +<75a3> <75a3> 7014 +<75a4> <75a4> 983 +<75a5> <75a5> 2235 +<75a6> <75aa> 15966 +<75ab> <75ab> 4198 +<75ac> <75ac> 7013 +<75ad> <75ad> 15971 +<75ae> <75ae> 1330 +<75af> <75af> 1669 +<75b0> <75b0> 7020 +<75b1> <75b1> 7019 +<75b2> <75b2> 3010 +<75b3> <75b4> 7015 +<75b5> <75b5> 1350 +<75b6> <75b7> 15972 +<75b8> <75b8> 7017 +<75b9> <75b9> 4495 +<75ba> <75bb> 15974 +<75bc> <75bc> 3630 +<75bd> <75bd> 2305 +<75be> <75be> 2085 +<75bf> <75c1> 15976 +<75c2> <75c2> 7022 +<75c3> <75c3> 7021 +<75c4> <75c4> 7018 +<75c5> <75c5> 1128 +endcidrange + +100 begincidrange +<75c6> <75c6> 15979 +<75c7> <75c7> 4513 +<75c8> <75c8> 4253 +<75c9> <75c9> 2278 +<75ca> <75ca> 3207 +<75cb> <75cc> 15980 +<75cd> <75cd> 7024 +<75ce> <75d1> 15982 +<75d2> <75d2> 4128 +<75d3> <75d3> 15986 +<75d4> <75d4> 4555 +<75d5> <75d5> 1938 +<75d6> <75d6> 7023 +<75d7> <75d7> 15987 +<75d8> <75d8> 1530 +<75d9> <75d9> 8134 +<75da> <75da> 15988 +<75db> <75db> 3685 +<75dc> <75dd> 15989 +<75de> <75de> 3013 +<75df> <75e1> 15991 +<75e2> <75e2> 2538 +<75e3> <75e3> 7025 +<75e4> <75e4> 7028 +<75e5> <75e5> 15994 +<75e6> <75e6> 7027 +<75e7> <75e7> 7030 +<75e8> <75e8> 7026 +<75e9> <75e9> 15995 +<75ea> <75ea> 2003 +<75eb> <75eb> 7029 +<75ec> <75ef> 15996 +<75f0> <75f0> 3592 +<75f1> <75f1> 7032 +<75f2> <75f3> 16000 +<75f4> <75f4> 1274 +<75f5> <75f8> 16002 +<75f9> <75f9> 1085 +<75fa> <75fb> 16006 +<75fc> <75fc> 7033 +<75fd> <75fe> 16008 +<75ff> <75ff> 7034 +<7600> <7600> 7036 +<7601> <7601> 1380 +<7602> <7602> 9646 +<7603> <7603> 7031 +<7604> <7604> 16010 +<7605> <7605> 7037 +<7606> <7609> 16011 +<760a> <760a> 7040 +<760b> <760b> 7937 +<760c> <760c> 7038 +<760d> <760d> 8704 +<760e> <760f> 16015 +<7610> <7610> 7035 +<7611> <7614> 16017 +<7615> <7615> 7043 +<7616> <7616> 16021 +<7617> <7617> 7039 +<7618> <7618> 7042 +<7619> <7619> 7044 +<761a> <761a> 16022 +<761b> <761b> 7045 +<761c> <761d> 16023 +<761e> <761e> 9650 +<761f> <761f> 3792 +<7620> <7620> 7048 +<7621> <7621> 7831 +<7622> <7622> 7047 +<7623> <7623> 16025 +<7624> <7624> 2623 +<7625> <7625> 7041 +<7626> <7626> 3444 +<7627> <7627> 8363 +<7628> <7628> 16026 +<7629> <7629> 1396 +<762a> <762a> 1114 +<762b> <762b> 3588 +<762c> <762c> 16027 +<762d> <762d> 7050 +<762e> <762f> 16028 +<7630> <7630> 7051 +<7631> <7632> 16030 +<7633> <7633> 7056 +<7634> <7634> 4463 +<7635> <7635> 7053 +<7636> <7637> 16032 +<7638> <7638> 3214 +<7639> <763a> 16034 +<763b> <763b> 9651 +<763c> <763c> 7046 +<763d> <763d> 16036 +<763e> <763e> 7055 +<763f> <763f> 7052 +<7640> <7640> 7049 +<7641> <7641> 16037 +<7642> <7642> 8232 +<7643> <7643> 7054 +<7644> <7645> 16038 +<7646> <7647> 9647 +endcidrange + +100 begincidrange +<7648> <7648> 16040 +<7649> <7649> 9649 +<764a> <764b> 16041 +<764c> <764c> 948 +<764d> <764d> 7057 +<764e> <7653> 16043 +<7654> <7654> 7059 +<7655> <7655> 16049 +<7656> <7656> 7061 +<7657> <7657> 16050 +<7658> <7658> 9644 +<7659> <765b> 16051 +<765c> <765c> 7060 +<765d> <765d> 16054 +<765e> <765e> 7058 +<765f> <765f> 7758 +<7660> <7661> 16055 +<7662> <7662> 8706 +<7663> <7663> 4043 +<7664> <7664> 9643 +<7665> <7665> 8838 +<7666> <7666> 16057 +<7667> <7667> 9645 +<7668> <7668> 16058 +<7669> <7669> 9654 +<766a> <766a> 16059 +<766b> <766b> 7062 +<766c> <766c> 8675 +<766d> <766e> 9652 +<766f> <766f> 7063 +<7670> <7670> 8751 +<7671> <7671> 8549 +<7672> <7672> 9655 +<7673> <7677> 16060 +<7678> <7678> 1864 +<7679> <767a> 16065 +<767b> <767b> 1448 +<767c> <767c> 7913 +<767d> <767d> 994 +<767e> <767e> 996 +<767f> <7681> 16067 +<7682> <7682> 4400 +<7683> <7683> 16070 +<7684> <7684> 1445 +<7685> <7685> 16071 +<7686> <7686> 2213 +<7687> <7687> 2015 +<7688> <7688> 6957 +<7689> <768a> 16072 +<768b> <768b> 1753 +<768c> <768d> 16074 +<768e> <768e> 6958 +<768f> <7690> 16076 +<7691> <7691> 947 +<7692> <7692> 16078 +<7693> <7693> 6959 +<7694> <7695> 16079 +<7696> <7696> 3743 +<7697> <7698> 16081 +<7699> <7699> 6960 +<769a> <769a> 7717 +<769b> <76a3> 16083 +<76a4> <76a4> 6961 +<76a5> <76ad> 16092 +<76ae> <76ae> 3011 +<76af> <76b0> 16101 +<76b1> <76b1> 4580 +<76b2> <76b2> 7112 +<76b3> <76b3> 16103 +<76b4> <76b4> 7113 +<76b5> <76b7> 16104 +<76b8> <76b8> 9664 +<76b9> <76b9> 16107 +<76ba> <76ba> 8858 +<76bb> <76be> 16108 +<76bf> <76bf> 2808 +<76c0> <76c1> 16112 +<76c2> <76c2> 4288 +<76c3> <76c4> 16114 +<76c5> <76c5> 4560 +<76c6> <76c6> 2985 +<76c7> <76c7> 16116 +<76c8> <76c8> 4244 +<76c9> <76c9> 16117 +<76ca> <76ca> 4205 +<76cb> <76cc> 16118 +<76cd> <76cd> 6795 +<76ce> <76ce> 966 +<76cf> <76cf> 4438 +<76d0> <76d0> 4087 +<76d1> <76d1> 2131 +<76d2> <76d2> 1927 +<76d3> <76d3> 16120 +<76d4> <76d4> 2437 +<76d5> <76d5> 16121 +<76d6> <76d6> 1730 +<76d7> <76d7> 1442 +<76d8> <76d8> 2957 +<76d9> <76da> 16122 +<76db> <76db> 3385 +endcidrange + +100 begincidrange +<76dc> <76dd> 16124 +<76de> <76de> 8814 +<76df> <76df> 2768 +<76e0> <76e0> 16126 +<76e1> <76e1> 8125 +<76e2> <76e2> 16127 +<76e3> <76e3> 8068 +<76e4> <76e4> 8370 +<76e5> <76e5> 6796 +<76e6> <76e6> 16128 +<76e7> <76e7> 8259 +<76e8> <76ed> 16129 +<76ee> <76ee> 2850 +<76ef> <76ef> 1505 +<76f0> <76f0> 16135 +<76f1> <76f1> 6744 +<76f2> <76f2> 2729 +<76f3> <76f3> 16136 +<76f4> <76f4> 4528 +<76f5> <76f7> 16137 +<76f8> <76f8> 3917 +<76f9> <76f9> 6747 +<76fa> <76fb> 16140 +<76fc> <76fc> 2959 +<76fd> <76fd> 16142 +<76fe> <76fe> 1563 +<76ff> <76ff> 16143 +<7700> <7700> 16144 +<7701> <7701> 3384 +<7702> <7703> 16145 +<7704> <7704> 6745 +<7705> <7706> 16147 +<7707> <7708> 6748 +<7709> <7709> 2753 +<770a> <770a> 16149 +<770b> <770b> 2369 +<770c> <770c> 16150 +<770d> <770d> 6746 +<770e> <7718> 16151 +<7719> <7719> 6752 +<771a> <771a> 6750 +<771b> <771e> 16162 +<771f> <771f> 4487 +<7720> <7720> 2788 +<7721> <7721> 16166 +<7722> <7722> 6751 +<7723> <7725> 16167 +<7726> <7726> 6754 +<7727> <7727> 16170 +<7728> <7728> 4420 +<7729> <7729> 4044 +<772a> <772c> 16171 +<772d> <772d> 6753 +<772e> <772e> 16174 +<772f> <772f> 2773 +<7730> <7734> 16175 +<7735> <7735> 6755 +<7736> <7736> 2433 +<7737> <7737> 2331 +<7738> <7738> 6756 +<7739> <7739> 16180 +<773a> <773a> 3658 +<773b> <773b> 16181 +<773c> <773c> 4100 +<773d> <773f> 16182 +<7740> <7740> 4642 +<7741> <7741> 4503 +<7742> <7742> 16185 +<7743> <7743> 6760 +<7744> <7746> 16186 +<7747> <7747> 6759 +<7748> <774e> 16189 +<774f> <774f> 9860 +<7750> <7751> 6757 +<7752> <7759> 16196 +<775a> <775a> 6761 +<775b> <775b> 2261 +<775c> <775d> 16204 +<775e> <775e> 9455 +<775f> <7760> 16206 +<7761> <7761> 3492 +<7762> <7762> 6763 +<7763> <7763> 1532 +<7764> <7764> 16208 +<7765> <7765> 6764 +<7766> <7766> 2851 +<7767> <7767> 16209 +<7768> <7768> 6762 +<7769> <776a> 16210 +<776b> <776b> 2223 +<776c> <776c> 1166 +<776d> <7778> 16212 +<7779> <7779> 1538 +<777a> <777c> 16224 +<777d> <777d> 6767 +<777e> <777e> 4720 +<777f> <777f> 6765 +<7780> <7780> 6768 +<7781> <7783> 16227 +<7784> <7784> 2798 +endcidrange + +100 begincidrange +<7785> <7785> 1303 +<7786> <778b> 16230 +<778c> <778c> 6769 +<778d> <778d> 6766 +<778e> <778e> 3878 +<778f> <7790> 16236 +<7791> <7791> 6770 +<7792> <7792> 2718 +<7793> <7797> 16238 +<7798> <7798> 9454 +<7799> <779d> 16243 +<779e> <779e> 8308 +<779f> <77a0> 6771 +<77a1> <77a1> 16248 +<77a2> <77a2> 5269 +<77a3> <77a4> 16249 +<77a5> <77a5> 3026 +<77a6> <77a6> 16251 +<77a7> <77a7> 3139 +<77a8> <77a8> 16252 +<77a9> <77a9> 4596 +<77aa> <77aa> 1450 +<77ab> <77ab> 16253 +<77ac> <77ac> 3495 +<77ad> <77ad> 9863 +<77ae> <77af> 16254 +<77b0> <77b0> 6773 +<77b1> <77b2> 16256 +<77b3> <77b3> 3676 +<77b4> <77b4> 16258 +<77b5> <77b5> 6774 +<77b6> <77ba> 16259 +<77bb> <77bb> 4433 +<77bc> <77bc> 9456 +<77bd> <77bd> 6775 +<77be> <77be> 16264 +<77bf> <77bf> 7550 +<77c0> <77c6> 16265 +<77c7> <77c7> 9869 +<77c8> <77cc> 16272 +<77cd> <77cd> 5015 +<77ce> <77d6> 16277 +<77d7> <77d7> 1318 +<77d8> <77d9> 16286 +<77da> <77da> 8864 +<77db> <77db> 2737 +<77dc> <77dc> 7114 +<77dd> <77e1> 16288 +<77e2> <77e2> 3407 +<77e3> <77e3> 4186 +<77e4> <77e4> 16293 +<77e5> <77e5> 4521 +<77e6> <77e6> 16294 +<77e7> <77e7> 6938 +<77e8> <77e8> 16295 +<77e9> <77e9> 2311 +<77ea> <77ea> 16296 +<77eb> <77eb> 2196 +<77ec> <77ec> 6939 +<77ed> <77ed> 1547 +<77ee> <77ee> 950 +<77ef> <77ef> 8107 +<77f0> <77f2> 16297 +<77f3> <77f3> 3398 +<77f4> <77f5> 16300 +<77f6> <77f6> 6690 +<77f7> <77f7> 16302 +<77f8> <77f8> 6691 +<77f9> <77fc> 16303 +<77fd> <77fd> 3848 +<77fe> <77fe> 1612 +<77ff> <77ff> 2432 +<7800> <7800> 6692 +<7801> <7801> 2706 +<7802> <7802> 3305 +<7803> <7808> 16307 +<7809> <7809> 6693 +<780a> <780b> 16313 +<780c> <780c> 3093 +<780d> <780d> 2368 +<780e> <7810> 16315 +<7811> <7811> 6696 +<7812> <7812> 3001 +<7813> <7813> 16318 +<7814> <7814> 4089 +<7815> <7815> 16319 +<7816> <7816> 4614 +<7817> <7818> 6694 +<7819> <7819> 16320 +<781a> <781a> 4107 +<781b> <781b> 16321 +<781c> <781d> 6699 +<781e> <781e> 16322 +<781f> <781f> 6704 +<7820> <7822> 16323 +<7823> <7823> 6708 +<7824> <7824> 16326 +<7825> <7825> 6706 +<7826> <7826> 6714 +<7827> <7827> 4489 +endcidrange + +100 begincidrange +<7828> <7828> 16327 +<7829> <7829> 6709 +<782a> <782b> 16328 +<782c> <782c> 6707 +<782d> <782d> 6698 +<782e> <782f> 16330 +<7830> <7830> 2986 +<7831> <7833> 16332 +<7834> <7834> 3045 +<7835> <7836> 16335 +<7837> <7837> 3362 +<7838> <7838> 4373 +<7839> <783b> 6701 +<783c> <783c> 6705 +<783d> <783d> 16337 +<783e> <783e> 2532 +<783f> <783f> 16338 +<7840> <7840> 1316 +<7841> <7842> 16339 +<7843> <7843> 9896 +<7844> <7844> 16341 +<7845> <7845> 1857 +<7846> <7846> 16342 +<7847> <7847> 6716 +<7848> <784b> 16343 +<784c> <784c> 6717 +<784d> <784d> 16347 +<784e> <784e> 6710 +<784f> <784f> 16348 +<7850> <7850> 6715 +<7851> <7851> 16349 +<7852> <7852> 3847 +<7853> <7854> 16350 +<7855> <7855> 3499 +<7856> <7857> 6712 +<7858> <785c> 16352 +<785d> <785d> 3938 +<785e> <7863> 16357 +<7864> <7864> 9449 +<7865> <7867> 16363 +<7868> <7868> 9445 +<7869> <7869> 16366 +<786a> <786a> 6718 +<786b> <786b> 2619 +<786c> <786c> 4247 +<786d> <786d> 6711 +<786e> <786e> 3218 +<786f> <786f> 8698 +<7870> <7876> 16367 +<7877> <7877> 2146 +<7878> <787b> 16374 +<787c> <787c> 2993 +<787d> <7886> 16378 +<7887> <7887> 6722 +<7888> <7888> 16388 +<7889> <7889> 1488 +<788a> <788b> 16389 +<788c> <788c> 2652 +<788d> <788d> 952 +<788e> <788e> 3550 +<788f> <7890> 16391 +<7891> <7891> 1047 +<7892> <7892> 16393 +<7893> <7893> 6720 +<7894> <7896> 16394 +<7897> <7897> 3740 +<7898> <7898> 1475 +<7899> <7899> 16397 +<789a> <789a> 6721 +<789b> <789b> 6719 +<789c> <789c> 6723 +<789d> <789e> 16398 +<789f> <789f> 1499 +<78a0> <78a0> 16400 +<78a1> <78a1> 6724 +<78a2> <78a2> 16401 +<78a3> <78a3> 6725 +<78a4> <78a4> 16402 +<78a5> <78a5> 6728 +<78a6> <78a6> 16403 +<78a7> <78a7> 1077 +<78a8> <78a8> 16404 +<78a9> <78a9> 8520 +<78aa> <78ac> 16405 +<78ad> <78ad> 9444 +<78ae> <78af> 16408 +<78b0> <78b0> 2999 +<78b1> <78b1> 2145 +<78b2> <78b2> 6726 +<78b3> <78b3> 3599 +<78b4> <78b4> 1201 +<78b5> <78b7> 16410 +<78b8> <78b8> 9446 +<78b9> <78b9> 6727 +<78ba> <78ba> 8439 +<78bb> <78bb> 16413 +<78bc> <78bc> 8299 +<78bd> <78bd> 16414 +<78be> <78be> 2894 +<78bf> <78c0> 16415 +endcidrange + +100 begincidrange +<78c1> <78c1> 1352 +<78c2> <78c4> 16417 +<78c5> <78c5> 1024 +<78c6> <78c8> 16420 +<78c9> <78c9> 6731 +<78ca> <78ca> 2501 +<78cb> <78cb> 1387 +<78cc> <78cf> 16423 +<78d0> <78d0> 2958 +<78d1> <78d3> 16427 +<78d4> <78d4> 6729 +<78d5> <78d5> 2385 +<78d6> <78d8> 16430 +<78d9> <78d9> 6730 +<78da> <78da> 8871 +<78db> <78e2> 16433 +<78e3> <78e3> 9452 +<78e4> <78e6> 16441 +<78e7> <78e7> 9451 +<78e8> <78e8> 2824 +<78e9> <78eb> 16444 +<78ec> <78ec> 6732 +<78ed> <78ee> 16447 +<78ef> <78ef> 9443 +<78f0> <78f1> 16449 +<78f2> <78f2> 6733 +<78f3> <78f3> 16451 +<78f4> <78f4> 6735 +<78f5> <78f6> 16452 +<78f7> <78f7> 2592 +<78f8> <78f9> 16454 +<78fa> <78fa> 2012 +<78fb> <78fc> 16456 +<78fd> <78fd> 9450 +<78fe> <78ff> 16458 +<7900> <7900> 16460 +<7901> <7901> 2185 +<7902> <7904> 16461 +<7905> <7905> 6734 +<7906> <790d> 16464 +<790e> <790e> 7826 +<790f> <7912> 16472 +<7913> <7913> 6736 +<7914> <7918> 16476 +<7919> <7919> 7719 +<791a> <791d> 16481 +<791e> <791e> 6738 +<791f> <7923> 16485 +<7924> <7924> 6737 +<7925> <7925> 16490 +<7926> <7926> 8166 +<7927> <7929> 16491 +<792a> <792a> 9447 +<792b> <792b> 8210 +<792c> <792c> 7916 +<792d> <7930> 16494 +<7931> <7931> 9448 +<7932> <7933> 16498 +<7934> <7934> 6739 +<7935> <7939> 16500 +<793a> <793a> 3413 +<793b> <793b> 6648 +<793c> <793c> 2524 +<793d> <793d> 16505 +<793e> <793e> 3360 +<793f> <793f> 16506 +<7940> <7940> 6649 +<7941> <7941> 3085 +<7942> <7945> 16507 +<7946> <7946> 6650 +<7947> <7947> 16511 +<7948> <7948> 3084 +<7949> <7949> 6651 +<794a> <7952> 16512 +<7953> <7953> 6654 +<7954> <7955> 16521 +<7956> <7956> 4675 +<7957> <7957> 6657 +<7958> <7959> 16523 +<795a> <795a> 6655 +<795b> <795c> 6652 +<795d> <795d> 4608 +<795e> <795e> 3370 +<795f> <795f> 3555 +<7960> <7960> 6658 +<7961> <7961> 16525 +<7962> <7962> 6656 +<7963> <7964> 16526 +<7965> <7965> 3926 +<7966> <7966> 16528 +<7967> <7967> 6660 +<7968> <7968> 3024 +<7969> <796c> 16529 +<796d> <796d> 2099 +<796e> <796e> 16533 +<796f> <796f> 6659 +<7970> <7976> 16534 +<7977> <7977> 1436 +<7978> <7978> 2059 +<7979> <7979> 16541 +endcidrange + +100 begincidrange +<797a> <797a> 6661 +<797b> <797f> 16542 +<7980> <7980> 4875 +<7981> <7981> 2252 +<7982> <7983> 16547 +<7984> <7984> 2658 +<7985> <7985> 6662 +<7986> <7989> 16549 +<798a> <798a> 6663 +<798b> <798c> 16553 +<798d> <798d> 8038 +<798e> <798e> 9436 +<798f> <798f> 1694 +<7990> <7999> 16555 +<799a> <799a> 6664 +<799b> <79a5> 16565 +<79a6> <79a6> 9890 +<79a7> <79a7> 6665 +<79a8> <79a9> 16576 +<79aa> <79aa> 9437 +<79ab> <79ad> 16578 +<79ae> <79ae> 8206 +<79af> <79af> 16581 +<79b0> <79b0> 9435 +<79b1> <79b1> 7864 +<79b2> <79b2> 16582 +<79b3> <79b3> 6666 +<79b4> <79b8> 16583 +<79b9> <79b9> 4306 +<79ba> <79ba> 4708 +<79bb> <79bb> 2518 +<79bc> <79bc> 16588 +<79bd> <79bd> 3162 +<79be> <79be> 1923 +<79bf> <79bf> 16589 +<79c0> <79c0> 4014 +<79c1> <79c1> 3506 +<79c2> <79c2> 16590 +<79c3> <79c3> 3691 +<79c4> <79c5> 16591 +<79c6> <79c6> 1740 +<79c7> <79c8> 16593 +<79c9> <79c9> 1125 +<79ca> <79ca> 16595 +<79cb> <79cb> 3180 +<79cc> <79cc> 16596 +<79cd> <79cd> 4565 +<79ce> <79d0> 16597 +<79d1> <79d1> 2387 +<79d2> <79d2> 2800 +<79d3> <79d4> 16600 +<79d5> <79d5> 6941 +<79d6> <79d7> 16602 +<79d8> <79d8> 2781 +<79d9> <79de> 16604 +<79df> <79df> 4671 +<79e0> <79e2> 16610 +<79e3> <79e3> 6943 +<79e4> <79e4> 1272 +<79e5> <79e5> 16613 +<79e6> <79e6> 3157 +<79e7> <79e7> 4118 +<79e8> <79e8> 16614 +<79e9> <79e9> 4551 +<79ea> <79ea> 16615 +<79eb> <79eb> 6944 +<79ec> <79ec> 16616 +<79ed> <79ed> 6942 +<79ee> <79ee> 16617 +<79ef> <79ef> 2066 +<79f0> <79f0> 1259 +<79f1> <79f7> 16618 +<79f8> <79f8> 2214 +<79f9> <79fa> 16625 +<79fb> <79fb> 4173 +<79fc> <79fc> 16627 +<79fd> <79fd> 2037 +<79fe> <79ff> 16628 +<7a00> <7a00> 3854 +<7a01> <7a01> 16630 +<7a02> <7a02> 6948 +<7a03> <7a03> 6947 +<7a04> <7a05> 16631 +<7a06> <7a06> 6945 +<7a07> <7a0a> 16633 +<7a0b> <7a0b> 1265 +<7a0c> <7a0c> 16637 +<7a0d> <7a0d> 3341 +<7a0e> <7a0e> 3493 +<7a0f> <7a13> 16638 +<7a14> <7a14> 6950 +<7a15> <7a16> 16643 +<7a17> <7a17> 1001 +<7a18> <7a19> 16645 +<7a1a> <7a1a> 4552 +<7a1b> <7a1d> 16647 +<7a1e> <7a1e> 6949 +<7a1f> <7a1f> 16650 +<7a20> <7a20> 1298 +<7a21> <7a22> 16651 +endcidrange + +100 begincidrange +<7a23> <7a23> 7567 +<7a24> <7a2d> 16653 +<7a2e> <7a2e> 8853 +<7a2f> <7a30> 16663 +<7a31> <7a31> 7808 +<7a32> <7a32> 16665 +<7a33> <7a33> 3799 +<7a34> <7a36> 16666 +<7a37> <7a37> 6952 +<7a38> <7a38> 16669 +<7a39> <7a39> 6951 +<7a3a> <7a3a> 16670 +<7a3b> <7a3b> 1439 +<7a3c> <7a3c> 2125 +<7a3d> <7a3d> 2065 +<7a3e> <7a3e> 16671 +<7a3f> <7a3f> 1760 +<7a40> <7a40> 9847 +<7a41> <7a45> 16672 +<7a46> <7a46> 2853 +<7a47> <7a4b> 16677 +<7a4c> <7a4c> 9764 +<7a4d> <7a4d> 8041 +<7a4e> <7a4e> 8747 +<7a4f> <7a50> 16682 +<7a51> <7a51> 6953 +<7a52> <7a56> 16684 +<7a57> <7a57> 3552 +<7a58> <7a60> 16689 +<7a61> <7a61> 9599 +<7a62> <7a62> 8027 +<7a63> <7a68> 16698 +<7a69> <7a69> 8603 +<7a6a> <7a6a> 16704 +<7a6b> <7a6b> 9853 +<7a6c> <7a6f> 16705 +<7a70> <7a70> 6956 +<7a71> <7a73> 16709 +<7a74> <7a74> 4049 +<7a75> <7a75> 16712 +<7a76> <7a76> 2286 +<7a77> <7a77> 3179 +<7a78> <7a79> 7066 +<7a7a> <7a7a> 2402 +<7a7b> <7a7e> 16713 +<7a7f> <7a7f> 1324 +<7a80> <7a80> 7068 +<7a81> <7a81> 3692 +<7a82> <7a82> 16717 +<7a83> <7a83> 3153 +<7a84> <7a84> 4430 +<7a85> <7a85> 16718 +<7a86> <7a86> 7069 +<7a87> <7a87> 16719 +<7a88> <7a88> 7070 +<7a89> <7a8c> 16720 +<7a8d> <7a8d> 3148 +<7a8e> <7a90> 16724 +<7a91> <7a91> 4139 +<7a92> <7a92> 4558 +<7a93> <7a94> 16727 +<7a95> <7a95> 7071 +<7a96> <7a96> 2210 +<7a97> <7a97> 1331 +<7a98> <7a98> 2284 +<7a99> <7a9b> 16729 +<7a9c> <7a9c> 1375 +<7a9d> <7a9d> 3808 +<7a9e> <7a9e> 16732 +<7a9f> <7a9f> 2412 +<7aa0> <7aa0> 7073 +<7aa1> <7aa4> 16733 +<7aa5> <7aa5> 2439 +<7aa6> <7aa6> 7072 +<7aa7> <7aa7> 16737 +<7aa8> <7aa8> 7075 +<7aa9> <7aa9> 8608 +<7aaa> <7aaa> 8582 +<7aab> <7aab> 16738 +<7aac> <7aac> 7074 +<7aad> <7aad> 7076 +<7aae> <7aae> 8429 +<7aaf> <7ab2> 16739 +<7ab3> <7ab3> 7077 +<7ab4> <7ab5> 16743 +<7ab6> <7ab6> 9657 +<7ab7> <7ab9> 16745 +<7aba> <7aba> 8170 +<7abb> <7abe> 16748 +<7abf> <7abf> 2631 +<7ac0> <7ac3> 16752 +<7ac4> <7ac4> 7844 +<7ac5> <7ac5> 8417 +<7ac6> <7ac6> 16756 +<7ac7> <7ac7> 9656 +<7ac8> <7ac8> 8800 +<7ac9> <7ac9> 16757 +<7aca> <7aca> 8418 +<7acb> <7acb> 2539 +<7acc> <7ad5> 16758 +endcidrange + +100 begincidrange +<7ad6> <7ad6> 3473 +<7ad7> <7ad8> 16768 +<7ad9> <7ad9> 4447 +<7ada> <7add> 16770 +<7ade> <7ade> 2281 +<7adf> <7adf> 2280 +<7ae0> <7ae0> 4451 +<7ae1> <7ae2> 16774 +<7ae3> <7ae3> 2351 +<7ae4> <7ae4> 16776 +<7ae5> <7ae5> 3680 +<7ae6> <7ae6> 7065 +<7ae7> <7ae9> 16777 +<7aea> <7aea> 8513 +<7aeb> <7aec> 16780 +<7aed> <7aed> 2224 +<7aee> <7aee> 16782 +<7aef> <7aef> 1546 +<7af0> <7af5> 16783 +<7af6> <7af6> 8135 +<7af7> <7af8> 16789 +<7af9> <7af9> 4592 +<7afa> <7afa> 7267 +<7afb> <7afc> 16791 +<7afd> <7afd> 7268 +<7afe> <7afe> 16793 +<7aff> <7aff> 1736 +<7b00> <7b02> 16794 +<7b03> <7b04> 7270 +<7b05> <7b05> 16797 +<7b06> <7b06> 981 +<7b07> <7b07> 16798 +<7b08> <7b08> 7269 +<7b09> <7b09> 16799 +<7b0a> <7b0a> 7273 +<7b0b> <7b0b> 3558 +<7b0c> <7b0e> 16800 +<7b0f> <7b0f> 7275 +<7b10> <7b10> 16803 +<7b11> <7b11> 3953 +<7b12> <7b13> 16804 +<7b14> <7b14> 1075 +<7b15> <7b15> 7272 +<7b16> <7b18> 16806 +<7b19> <7b19> 7279 +<7b1a> <7b1a> 16809 +<7b1b> <7b1b> 1458 +<7b1c> <7b1d> 16810 +<7b1e> <7b1e> 7287 +<7b1f> <7b1f> 16812 +<7b20> <7b20> 7282 +<7b21> <7b23> 16813 +<7b24> <7b24> 7284 +<7b25> <7b25> 7283 +<7b26> <7b26> 1688 +<7b27> <7b27> 16816 +<7b28> <7b28> 1064 +<7b29> <7b29> 16817 +<7b2a> <7b2a> 7278 +<7b2b> <7b2b> 7274 +<7b2c> <7b2c> 1467 +<7b2d> <7b2d> 16818 +<7b2e> <7b2e> 7280 +<7b2f> <7b30> 16819 +<7b31> <7b31> 7281 +<7b32> <7b32> 16821 +<7b33> <7b33> 7285 +<7b34> <7b37> 16822 +<7b38> <7b38> 7277 +<7b39> <7b39> 16826 +<7b3a> <7b3a> 2134 +<7b3b> <7b3b> 16827 +<7b3c> <7b3c> 2630 +<7b3d> <7b3d> 16828 +<7b3e> <7b3e> 7286 +<7b3f> <7b44> 16829 +<7b45> <7b45> 7290 +<7b46> <7b46> 7745 +<7b47> <7b47> 7276 +<7b48> <7b48> 16835 +<7b49> <7b49> 1449 +<7b4a> <7b4a> 16836 +<7b4b> <7b4b> 2239 +<7b4c> <7b4c> 7292 +<7b4d> <7b4e> 16837 +<7b4f> <7b4f> 1601 +<7b50> <7b50> 2429 +<7b51> <7b51> 4605 +<7b52> <7b52> 3683 +<7b53> <7b53> 16839 +<7b54> <7b54> 1395 +<7b55> <7b55> 16840 +<7b56> <7b56> 1190 +<7b57> <7b57> 16841 +<7b58> <7b58> 7288 +<7b59> <7b59> 16842 +<7b5a> <7b5a> 7289 +<7b5b> <7b5b> 3313 +<7b5c> <7b5c> 16843 +<7b5d> <7b5d> 7293 +endcidrange + +100 begincidrange +<7b5e> <7b5f> 16844 +<7b60> <7b60> 7294 +<7b61> <7b61> 16846 +<7b62> <7b62> 7297 +<7b63> <7b66> 16847 +<7b67> <7b67> 9700 +<7b68> <7b6d> 16851 +<7b6e> <7b6e> 7295 +<7b6f> <7b70> 16857 +<7b71> <7b71> 7299 +<7b72> <7b72> 7298 +<7b73> <7b74> 16859 +<7b75> <7b75> 7291 +<7b76> <7b76> 16861 +<7b77> <7b77> 2423 +<7b78> <7b78> 16862 +<7b79> <7b79> 1300 +<7b7a> <7b7a> 16863 +<7b7b> <7b7b> 7296 +<7b7c> <7b7d> 16864 +<7b7e> <7b7e> 3110 +<7b7f> <7b7f> 16866 +<7b80> <7b80> 2149 +<7b81> <7b84> 16867 +<7b85> <7b85> 7307 +<7b86> <7b8a> 16871 +<7b8b> <7b8b> 8070 +<7b8c> <7b8c> 16876 +<7b8d> <7b8d> 1816 +<7b8e> <7b8f> 16877 +<7b90> <7b90> 7300 +<7b91> <7b93> 16879 +<7b94> <7b94> 1140 +<7b95> <7b95> 2067 +<7b96> <7b96> 16882 +<7b97> <7b97> 3544 +<7b98> <7b9b> 16883 +<7b9c> <7b9c> 7309 +<7b9d> <7b9d> 7305 +<7b9e> <7ba0> 16887 +<7ba1> <7ba1> 1845 +<7ba2> <7ba2> 7310 +<7ba3> <7ba5> 16890 +<7ba6> <7ba7> 7301 +<7ba8> <7ba8> 7306 +<7ba9> <7ba9> 2696 +<7baa> <7baa> 7308 +<7bab> <7bab> 7311 +<7bac> <7bac> 7304 +<7bad> <7bad> 2160 +<7bae> <7bb0> 16893 +<7bb1> <7bb1> 3921 +<7bb2> <7bb3> 16896 +<7bb4> <7bb4> 7312 +<7bb5> <7bb7> 16898 +<7bb8> <7bb8> 7303 +<7bb9> <7bbf> 16901 +<7bc0> <7bc0> 8115 +<7bc1> <7bc1> 7314 +<7bc2> <7bc3> 16908 +<7bc4> <7bc4> 7919 +<7bc5> <7bc5> 16910 +<7bc6> <7bc6> 4618 +<7bc7> <7bc7> 3017 +<7bc8> <7bc8> 16911 +<7bc9> <7bc9> 8868 +<7bca> <7bca> 16912 +<7bcb> <7bcb> 9704 +<7bcc> <7bcc> 7315 +<7bcd> <7bd0> 16913 +<7bd1> <7bd1> 7313 +<7bd2> <7bd2> 16917 +<7bd3> <7bd3> 2639 +<7bd4> <7bd8> 16918 +<7bd9> <7bd9> 1752 +<7bda> <7bda> 7317 +<7bdb> <7bdc> 16923 +<7bdd> <7bdd> 7316 +<7bde> <7be0> 16925 +<7be1> <7be1> 1374 +<7be2> <7be3> 16928 +<7be4> <7be4> 9699 +<7be5> <7be6> 7318 +<7be7> <7be8> 16930 +<7be9> <7be9> 8465 +<7bea> <7bea> 7320 +<7beb> <7bed> 16932 +<7bee> <7bee> 2469 +<7bef> <7bf0> 16935 +<7bf1> <7bf1> 2516 +<7bf2> <7bf2> 16937 +<7bf3> <7bf3> 9702 +<7bf4> <7bf6> 16938 +<7bf7> <7bf7> 2994 +<7bf8> <7bfb> 16941 +<7bfc> <7bfc> 7323 +<7bfd> <7bfd> 16945 +<7bfe> <7bfe> 7322 +<7bff> <7bff> 16946 +<7c00> <7c00> 9703 +endcidrange + +100 begincidrange +<7c01> <7c06> 16947 +<7c07> <7c07> 1371 +<7c08> <7c0a> 16953 +<7c0b> <7c0b> 7326 +<7c0c> <7c0c> 7321 +<7c0d> <7c0d> 8257 +<7c0e> <7c0e> 16956 +<7c0f> <7c0f> 7324 +<7c10> <7c15> 16957 +<7c16> <7c16> 7325 +<7c17> <7c1d> 16963 +<7c1e> <7c1e> 9706 +<7c1f> <7c1f> 7327 +<7c20> <7c20> 16970 +<7c21> <7c21> 8079 +<7c22> <7c22> 16971 +<7c23> <7c23> 9708 +<7c24> <7c25> 16972 +<7c26> <7c26> 7329 +<7c27> <7c27> 2014 +<7c28> <7c29> 16974 +<7c2a> <7c2a> 7328 +<7c2b> <7c2b> 9707 +<7c2c> <7c37> 16976 +<7c38> <7c38> 7330 +<7c39> <7c3c> 16988 +<7c3d> <7c3d> 8400 +<7c3e> <7c3e> 8221 +<7c3f> <7c3f> 1157 +<7c40> <7c40> 7332 +<7c41> <7c41> 7331 +<7c42> <7c42> 16992 +<7c43> <7c43> 8183 +<7c44> <7c4b> 16993 +<7c4c> <7c4c> 7821 +<7c4d> <7c4d> 2081 +<7c4e> <7c5b> 17001 +<7c5c> <7c5c> 9705 +<7c5d> <7c5e> 17015 +<7c5f> <7c5f> 9710 +<7c60> <7c60> 8250 +<7c61> <7c63> 17017 +<7c64> <7c64> 9875 +<7c65> <7c68> 17020 +<7c69> <7c69> 9701 +<7c6a> <7c6a> 9709 +<7c6b> <7c6b> 17024 +<7c6c> <7c6c> 8201 +<7c6d> <7c6d> 17025 +<7c6e> <7c6e> 8293 +<7c6f> <7c71> 17026 +<7c72> <7c72> 9891 +<7c73> <7c73> 2780 +<7c74> <7c74> 4853 +<7c75> <7c7a> 17029 +<7c7b> <7c7b> 2507 +<7c7c> <7c7c> 7370 +<7c7d> <7c7d> 4654 +<7c7e> <7c88> 17035 +<7c89> <7c89> 1656 +<7c8a> <7c90> 17046 +<7c91> <7c91> 7372 +<7c92> <7c92> 2540 +<7c93> <7c94> 17053 +<7c95> <7c95> 3048 +<7c96> <7c96> 17055 +<7c97> <7c97> 1369 +<7c98> <7c98> 4436 +<7c99> <7c9b> 17056 +<7c9c> <7c9c> 7374 +<7c9d> <7c9d> 7373 +<7c9e> <7c9e> 7375 +<7c9f> <7c9f> 3535 +<7ca0> <7ca1> 17059 +<7ca2> <7ca2> 7376 +<7ca3> <7ca3> 17061 +<7ca4> <7ca4> 4356 +<7ca5> <7ca5> 4575 +<7ca6> <7ca9> 17062 +<7caa> <7caa> 1661 +<7cab> <7cad> 17066 +<7cae> <7cae> 2561 +<7caf> <7cb0> 17069 +<7cb1> <7cb1> 2564 +<7cb2> <7cb2> 7377 +<7cb3> <7cb3> 2267 +<7cb4> <7cb8> 17071 +<7cb9> <7cb9> 1381 +<7cba> <7cbb> 17076 +<7cbc> <7cbd> 7378 +<7cbe> <7cbe> 2266 +<7cbf> <7cc0> 17078 +<7cc1> <7cc1> 7380 +<7cc2> <7cc4> 17080 +<7cc5> <7cc5> 7385 +<7cc6> <7cc6> 17083 +<7cc7> <7cc7> 7381 +<7cc8> <7cc8> 7384 +<7cc9> <7cc9> 17084 +<7cca> <7cca> 1972 +endcidrange + +100 begincidrange +<7ccb> <7ccb> 17085 +<7ccc> <7ccd> 7382 +<7cce> <7cd4> 17086 +<7cd5> <7cd5> 1757 +<7cd6> <7cd6> 3610 +<7cd7> <7cd7> 7386 +<7cd8> <7cd8> 17093 +<7cd9> <7cd9> 1185 +<7cda> <7cdb> 17094 +<7cdc> <7cdc> 2776 +<7cdd> <7cdd> 9717 +<7cde> <7cde> 7932 +<7cdf> <7cdf> 4390 +<7ce0> <7ce0> 2372 +<7ce1> <7ce6> 17096 +<7ce7> <7ce7> 8228 +<7ce8> <7ce8> 7387 +<7ce9> <7cee> 17102 +<7cef> <7cef> 2933 +<7cf0> <7cf0> 9883 +<7cf1> <7cf1> 17108 +<7cf2> <7cf2> 9715 +<7cf3> <7cf3> 17109 +<7cf4> <7cf4> 8921 +<7cf5> <7cf5> 17110 +<7cf6> <7cf6> 9716 +<7cf7> <7cf7> 17111 +<7cf8> <7cf8> 7399 +<7cf9> <7cf9> 9243 +<7cfa> <7cfa> 17112 +<7cfb> <7cfb> 3874 +<7cfc> <7cfd> 17113 +<7cfe> <7cfe> 8136 +<7cff> <7cff> 17115 +<7d00> <7d00> 8059 +<7d01> <7d01> 17116 +<7d02> <7d02> 9245 +<7d03> <7d03> 17117 +<7d04> <7d04> 8780 +<7d05> <7d05> 8008 +<7d06> <7d06> 9244 +<7d07> <7d08> 9246 +<7d09> <7d09> 8447 +<7d0a> <7d0a> 3800 +<7d0b> <7d0b> 8602 +<7d0c> <7d0c> 17118 +<7d0d> <7d0d> 8337 +<7d0e> <7d0f> 17119 +<7d10> <7d10> 8359 +<7d11> <7d12> 17121 +<7d13> <7d13> 9251 +<7d14> <7d14> 7835 +<7d15> <7d15> 9250 +<7d16> <7d16> 17123 +<7d17> <7d17> 8464 +<7d18> <7d18> 17124 +<7d19> <7d19> 8845 +<7d1a> <7d1a> 8049 +<7d1b> <7d1b> 7928 +<7d1c> <7d1c> 9249 +<7d1d> <7d1f> 17125 +<7d20> <7d20> 3533 +<7d21> <7d21> 7923 +<7d22> <7d22> 3564 +<7d23> <7d26> 17128 +<7d27> <7d27> 2245 +<7d28> <7d2a> 17132 +<7d2b> <7d2b> 4652 +<7d2c> <7d2e> 17135 +<7d2f> <7d2f> 2502 +<7d30> <7d30> 8625 +<7d31> <7d31> 9254 +<7d32> <7d32> 9253 +<7d33> <7d33> 8480 +<7d34> <7d38> 17138 +<7d39> <7d39> 8474 +<7d3a> <7d3a> 9252 +<7d3b> <7d3b> 17143 +<7d3c> <7d3c> 9256 +<7d3d> <7d3e> 17144 +<7d3f> <7d3f> 9258 +<7d40> <7d40> 9257 +<7d41> <7d41> 17146 +<7d42> <7d42> 8852 +<7d43> <7d43> 17147 +<7d44> <7d44> 8894 +<7d45> <7d45> 17148 +<7d46> <7d46> 7729 +<7d47> <7d4d> 17149 +<7d4e> <7d4e> 9260 +<7d4f> <7d4f> 17156 +<7d50> <7d50> 8117 +<7d51> <7d5c> 17157 +<7d5d> <7d5d> 9259 +<7d5e> <7d5e> 8111 +<7d5f> <7d60> 17169 +<7d61> <7d61> 8296 +<7d62> <7d62> 8676 +<7d63> <7d65> 17171 +<7d66> <7d66> 7969 +endcidrange + +100 begincidrange +<7d67> <7d67> 17174 +<7d68> <7d68> 8449 +<7d69> <7d6d> 17175 +<7d6e> <7d6e> 4032 +<7d6f> <7d70> 17180 +<7d71> <7d71> 8572 +<7d72> <7d72> 8522 +<7d73> <7d73> 9261 +<7d74> <7d75> 17182 +<7d76> <7d76> 8148 +<7d77> <7d77> 7400 +<7d78> <7d78> 17184 +<7d79> <7d79> 8145 +<7d7a> <7d80> 17185 +<7d81> <7d81> 7731 +<7d82> <7d82> 17192 +<7d83> <7d83> 9263 +<7d84> <7d85> 17193 +<7d86> <7d86> 9262 +<7d87> <7d87> 17195 +<7d88> <7d88> 9264 +<7d89> <7d89> 8667 +<7d8a> <7d8e> 17196 +<7d8f> <7d8f> 8536 +<7d90> <7d92> 17201 +<7d93> <7d93> 8130 +<7d94> <7d9b> 17204 +<7d9c> <7d9c> 8889 +<7d9d> <7d9d> 17212 +<7d9e> <7d9e> 9270 +<7d9f> <7da1> 17213 +<7da2> <7da2> 7822 +<7da3> <7da3> 9273 +<7da4> <7da5> 17216 +<7da6> <7da6> 7401 +<7da7> <7daa> 17218 +<7dab> <7dab> 8645 +<7dac> <7dac> 9271 +<7dad> <7dad> 8594 +<7dae> <7dae> 7402 +<7daf> <7daf> 17222 +<7db0> <7db0> 9274 +<7db1> <7db1> 7961 +<7db2> <7db2> 8588 +<7db3> <7db3> 7744 +<7db4> <7db4> 8883 +<7db5> <7db7> 17223 +<7db8> <7db8> 8287 +<7db9> <7db9> 9272 +<7dba> <7dba> 9266 +<7dbb> <7dbb> 8820 +<7dbc> <7dbc> 17226 +<7dbd> <7dbd> 7836 +<7dbe> <7dbe> 9265 +<7dbf> <7dbf> 8325 +<7dc0> <7dc3> 17227 +<7dc4> <7dc4> 9269 +<7dc5> <7dc6> 17231 +<7dc7> <7dc7> 9275 +<7dc8> <7dc9> 17233 +<7dca> <7dca> 8119 +<7dcb> <7dcb> 9267 +<7dcc> <7dd0> 17235 +<7dd1> <7dd1> 8276 +<7dd2> <7dd2> 8670 +<7dd3> <7dd3> 17240 +<7dd4> <7dd4> 9268 +<7dd5> <7dd6> 17241 +<7dd7> <7dd7> 9277 +<7dd8> <7dd8> 8073 +<7dd9> <7dd9> 9276 +<7dda> <7ddc> 17243 +<7ddd> <7ddd> 8046 +<7dde> <7dde> 7896 +<7ddf> <7ddf> 17246 +<7de0> <7de0> 7871 +<7de1> <7de1> 9285 +<7de2> <7de2> 17247 +<7de3> <7de3> 8777 +<7de4> <7de5> 17248 +<7de6> <7de6> 9281 +<7de7> <7de7> 17250 +<7de8> <7de8> 7751 +<7de9> <7de9> 8022 +<7dea> <7deb> 17251 +<7dec> <7dec> 8326 +<7ded> <7dee> 17253 +<7def> <7def> 8598 +<7df0> <7df0> 17255 +<7df1> <7df1> 9283 +<7df2> <7df2> 9279 +<7df3> <7df3> 17256 +<7df4> <7df4> 8227 +<7df5> <7df5> 17257 +<7df6> <7df6> 9282 +<7df7> <7df8> 17258 +<7df9> <7df9> 9278 +<7dfa> <7dfa> 17260 +<7dfb> <7dfb> 9894 +<7dfc> <7dff> 17261 +endcidrange + +100 begincidrange +<7e00> <7e07> 17265 +<7e08> <7e08> 9038 +<7e09> <7e09> 9286 +<7e0a> <7e0a> 9291 +<7e0b> <7e0b> 9284 +<7e0c> <7e0f> 17273 +<7e10> <7e10> 9255 +<7e11> <7e11> 9292 +<7e12> <7e1a> 17277 +<7e1b> <7e1b> 7951 +<7e1c> <7e1c> 17286 +<7e1d> <7e1d> 9287 +<7e1e> <7e1e> 9289 +<7e1f> <7e1f> 9288 +<7e20> <7e22> 17287 +<7e23> <7e23> 8642 +<7e24> <7e26> 17290 +<7e27> <7e27> 8558 +<7e28> <7e2a> 17293 +<7e2b> <7e2b> 7939 +<7e2c> <7e2c> 17296 +<7e2d> <7e2d> 9290 +<7e2e> <7e2e> 8540 +<7e2f> <7e30> 17297 +<7e31> <7e31> 8891 +<7e32> <7e32> 9296 +<7e33> <7e33> 17299 +<7e34> <7e34> 9876 +<7e35> <7e35> 9295 +<7e36> <7e36> 9718 +<7e37> <7e37> 8273 +<7e38> <7e38> 17300 +<7e39> <7e39> 9294 +<7e3a> <7e3a> 17301 +<7e3b> <7e3b> 7675 +<7e3c> <7e3c> 17302 +<7e3d> <7e3d> 8890 +<7e3e> <7e3e> 8045 +<7e3f> <7e40> 17303 +<7e41> <7e41> 1614 +<7e42> <7e44> 17305 +<7e45> <7e45> 9298 +<7e46> <7e46> 9297 +<7e47> <7e47> 7403 +<7e48> <7e51> 17308 +<7e52> <7e52> 9301 +<7e53> <7e53> 17318 +<7e54> <7e54> 8841 +<7e55> <7e55> 8470 +<7e56> <7e59> 17319 +<7e5a> <7e5a> 9300 +<7e5b> <7e5d> 17323 +<7e5e> <7e5e> 8443 +<7e5f> <7e61> 17326 +<7e62> <7e62> 9280 +<7e63> <7e68> 17329 +<7e69> <7e69> 8486 +<7e6a> <7e6a> 8033 +<7e6b> <7e6b> 9885 +<7e6c> <7e6c> 17335 +<7e6d> <7e6d> 8074 +<7e6e> <7e6e> 9302 +<7e6f> <7e6f> 9305 +<7e70> <7e70> 9304 +<7e71> <7e72> 17336 +<7e73> <7e73> 8110 +<7e74> <7e78> 17338 +<7e79> <7e79> 8730 +<7e7a> <7e7b> 17343 +<7e7c> <7e7c> 8058 +<7e7d> <7e7d> 9293 +<7e7e> <7e7e> 9303 +<7e7f> <7e81> 17345 +<7e82> <7e82> 4680 +<7e83> <7e87> 17348 +<7e88> <7e88> 9299 +<7e89> <7e89> 17353 +<7e8a> <7e8a> 9248 +<7e8b> <7e8b> 17354 +<7e8c> <7e8c> 8671 +<7e8d> <7e8d> 9861 +<7e8e> <7e8e> 17355 +<7e8f> <7e8f> 7790 +<7e90> <7e92> 17356 +<7e93> <7e93> 8740 +<7e94> <7e94> 9840 +<7e95> <7e95> 17359 +<7e96> <7e96> 8634 +<7e97> <7e97> 17360 +<7e98> <7e98> 9306 +<7e99> <7e9a> 17361 +<7e9b> <7e9b> 7404 +<7e9c> <7e9c> 8191 +<7e9d> <7e9e> 17363 +<7e9f> <7e9f> 6099 +<7ea0> <7ea0> 2287 +<7ea1> <7ea1> 6100 +<7ea2> <7ea2> 1955 +<7ea3> <7ea3> 6101 +<7ea4> <7ea4> 3896 +endcidrange + +100 begincidrange +<7ea5> <7ea5> 6102 +<7ea6> <7ea6> 4351 +<7ea7> <7ea7> 2089 +<7ea8> <7ea9> 6103 +<7eaa> <7eaa> 2112 +<7eab> <7eab> 3245 +<7eac> <7eac> 3778 +<7ead> <7ead> 6105 +<7eae> <7eae> 17365 +<7eaf> <7eaf> 1346 +<7eb0> <7eb0> 6106 +<7eb1> <7eb1> 3309 +<7eb2> <7eb2> 1748 +<7eb3> <7eb3> 2860 +<7eb4> <7eb4> 17366 +<7eb5> <7eb5> 4666 +<7eb6> <7eb6> 2689 +<7eb7> <7eb7> 1652 +<7eb8> <7eb8> 4540 +<7eb9> <7eb9> 3797 +<7eba> <7eba> 1633 +<7ebb> <7ebc> 17367 +<7ebd> <7ebd> 2919 +<7ebe> <7ebe> 6107 +<7ebf> <7ebf> 3916 +<7ec0> <7ec2> 6108 +<7ec3> <7ec3> 2560 +<7ec4> <7ec4> 4678 +<7ec5> <7ec5> 3369 +<7ec6> <7ec6> 3877 +<7ec7> <7ec7> 4526 +<7ec8> <7ec8> 4564 +<7ec9> <7ec9> 6111 +<7eca> <7eca> 1016 +<7ecb> <7ecc> 6112 +<7ecd> <7ecd> 3349 +<7ece> <7ece> 4214 +<7ecf> <7ecf> 2268 +<7ed0> <7ed0> 6114 +<7ed1> <7ed1> 1022 +<7ed2> <7ed2> 3257 +<7ed3> <7ed3> 2226 +<7ed4> <7ed4> 6115 +<7ed5> <7ed5> 3233 +<7ed6> <7ed6> 17369 +<7ed7> <7ed7> 6116 +<7ed8> <7ed8> 2043 +<7ed9> <7ed9> 1779 +<7eda> <7eda> 4045 +<7edb> <7edb> 6117 +<7edc> <7edc> 2702 +<7edd> <7edd> 2343 +<7ede> <7ede> 2203 +<7edf> <7edf> 3684 +<7ee0> <7ee1> 6118 +<7ee2> <7ee2> 2333 +<7ee3> <7ee3> 4016 +<7ee4> <7ee4> 17370 +<7ee5> <7ee5> 3548 +<7ee6> <7ee6> 3619 +<7ee7> <7ee7> 2111 +<7ee8> <7ee8> 6120 +<7ee9> <7ee9> 2075 +<7eea> <7eea> 4034 +<7eeb> <7eeb> 6121 +<7eec> <7eec> 17371 +<7eed> <7eed> 4035 +<7eee> <7eef> 6122 +<7ef0> <7ef0> 1349 +<7ef1> <7ef2> 6124 +<7ef3> <7ef3> 3383 +<7ef4> <7ef4> 3771 +<7ef5> <7ef5> 2789 +<7ef6> <7ef6> 6127 +<7ef7> <7ef7> 1066 +<7ef8> <7ef8> 1302 +<7ef9> <7ef9> 17372 +<7efa> <7efb> 6128 +<7efc> <7efc> 4664 +<7efd> <7efd> 4449 +<7efe> <7efe> 6130 +<7eff> <7eff> 2675 +<7f00> <7f00> 4631 +<7f01> <7f03> 6131 +<7f04> <7f04> 2141 +<7f05> <7f05> 2794 +<7f06> <7f06> 2477 +<7f07> <7f08> 6134 +<7f09> <7f09> 2076 +<7f0a> <7f0a> 17373 +<7f0b> <7f0c> 6136 +<7f0d> <7f0d> 6126 +<7f0e> <7f0e> 1551 +<7f0f> <7f0f> 6138 +<7f10> <7f10> 17374 +<7f11> <7f12> 6139 +<7f13> <7f13> 1999 +<7f14> <7f14> 1471 +<7f15> <7f15> 2669 +<7f16> <7f16> 1097 +endcidrange + +100 begincidrange +<7f17> <7f17> 6141 +<7f18> <7f18> 4344 +<7f19> <7f19> 6142 +<7f1a> <7f1a> 1722 +<7f1b> <7f1b> 6144 +<7f1c> <7f1c> 6143 +<7f1d> <7f1d> 1673 +<7f1e> <7f1e> 17375 +<7f1f> <7f1f> 6145 +<7f20> <7f20> 1215 +<7f21> <7f27> 6146 +<7f28> <7f28> 4236 +<7f29> <7f29> 3562 +<7f2a> <7f2d> 6153 +<7f2e> <7f2e> 3330 +<7f2f> <7f33> 6157 +<7f34> <7f34> 2202 +<7f35> <7f35> 6162 +<7f36> <7f36> 7262 +<7f37> <7f37> 17376 +<7f38> <7f38> 1746 +<7f39> <7f39> 17377 +<7f3a> <7f3a> 3212 +<7f3b> <7f41> 17378 +<7f42> <7f42> 7263 +<7f43> <7f43> 17385 +<7f44> <7f45> 7264 +<7f46> <7f4b> 17386 +<7f4c> <7f4c> 9698 +<7f4d> <7f4d> 17392 +<7f4e> <7f4e> 9882 +<7f4f> <7f4f> 17393 +<7f50> <7f50> 1847 +<7f51> <7f51> 3753 +<7f52> <7f53> 17394 +<7f54> <7f54> 4766 +<7f55> <7f55> 1896 +<7f56> <7f56> 17396 +<7f57> <7f57> 2693 +<7f58> <7f58> 6785 +<7f59> <7f59> 17397 +<7f5a> <7f5a> 1600 +<7f5b> <7f5e> 17398 +<7f5f> <7f5f> 6787 +<7f60> <7f60> 17402 +<7f61> <7f61> 6786 +<7f62> <7f62> 992 +<7f63> <7f67> 17403 +<7f68> <7f68> 6789 +<7f69> <7f69> 4471 +<7f6a> <7f6a> 4684 +<7f6b> <7f6d> 17408 +<7f6e> <7f6e> 4546 +<7f6f> <7f6f> 17411 +<7f70> <7f70> 7914 +<7f71> <7f71> 6791 +<7f72> <7f72> 3463 +<7f73> <7f73> 17412 +<7f74> <7f74> 6790 +<7f75> <7f76> 17413 +<7f77> <7f77> 7724 +<7f78> <7f78> 17415 +<7f79> <7f79> 6792 +<7f7a> <7f7d> 17416 +<7f7e> <7f7e> 6794 +<7f7f> <7f80> 17420 +<7f81> <7f81> 6793 +<7f82> <7f84> 17422 +<7f85> <7f85> 8290 +<7f86> <7f86> 9457 +<7f87> <7f87> 17425 +<7f88> <7f88> 9458 +<7f89> <7f89> 17426 +<7f8a> <7f8a> 4123 +<7f8b> <7f8b> 17427 +<7f8c> <7f8c> 3129 +<7f8d> <7f8d> 17428 +<7f8e> <7f8e> 2757 +<7f8f> <7f93> 17429 +<7f94> <7f94> 1756 +<7f95> <7f99> 17434 +<7f9a> <7f9a> 2608 +<7f9b> <7f9c> 17439 +<7f9d> <7f9d> 7364 +<7f9e> <7f9e> 4010 +<7f9f> <7f9f> 7365 +<7fa0> <7fa0> 17441 +<7fa1> <7fa1> 3912 +<7fa2> <7fa3> 17442 +<7fa4> <7fa4> 3221 +<7fa5> <7fa5> 9714 +<7fa6> <7fa6> 17444 +<7fa7> <7fa7> 7366 +<7fa8> <7fa8> 17445 +<7fa9> <7fa9> 8725 +<7faa> <7fae> 17446 +<7faf> <7fb0> 7367 +<7fb1> <7fb1> 17451 +<7fb2> <7fb2> 7369 +<7fb3> <7fb7> 17452 +endcidrange + +100 begincidrange +<7fb8> <7fb8> 4878 +<7fb9> <7fb9> 1785 +<7fba> <7fbb> 17457 +<7fbc> <7fbc> 5997 +<7fbd> <7fbd> 4309 +<7fbe> <7fbe> 17459 +<7fbf> <7fbf> 7390 +<7fc0> <7fc0> 17460 +<7fc1> <7fc1> 3803 +<7fc2> <7fc4> 17461 +<7fc5> <7fc5> 1286 +<7fc6> <7fc9> 17464 +<7fca> <7fca> 7064 +<7fcb> <7fcb> 17468 +<7fcc> <7fcc> 4213 +<7fcd> <7fcd> 17469 +<7fce> <7fce> 7391 +<7fcf> <7fd1> 17470 +<7fd2> <7fd2> 8622 +<7fd3> <7fd3> 17473 +<7fd4> <7fd4> 3925 +<7fd5> <7fd5> 7392 +<7fd6> <7fd7> 17474 +<7fd8> <7fd8> 3145 +<7fd9> <7fde> 17476 +<7fdf> <7fdf> 1461 +<7fe0> <7fe0> 1383 +<7fe1> <7fe1> 7394 +<7fe2> <7fe4> 17482 +<7fe5> <7fe5> 7393 +<7fe6> <7fe6> 7395 +<7fe7> <7fe8> 17485 +<7fe9> <7fe9> 7396 +<7fea> <7fed> 17487 +<7fee> <7fee> 7397 +<7fef> <7fef> 17491 +<7ff0> <7ff0> 1897 +<7ff1> <7ff1> 970 +<7ff2> <7ff2> 17492 +<7ff3> <7ff3> 7398 +<7ff4> <7ff8> 17493 +<7ff9> <7ff9> 8416 +<7ffa> <7ffa> 17498 +<7ffb> <7ffb> 1610 +<7ffc> <7ffc> 4212 +<7ffd> <7fff> 17499 +<8000> <8000> 4146 +<8001> <8001> 2490 +<8002> <8002> 17502 +<8003> <8003> 2377 +<8004> <8004> 6483 +<8005> <8005> 4480 +<8006> <8006> 6426 +<8007> <800a> 17503 +<800b> <800b> 7127 +<800c> <800c> 1591 +<800d> <800d> 3480 +<800e> <800f> 17507 +<8010> <8010> 2864 +<8011> <8011> 17509 +<8012> <8012> 7115 +<8013> <8013> 17510 +<8014> <8014> 7116 +<8015> <8015> 1782 +<8016> <8016> 7117 +<8017> <8017> 1915 +<8018> <8018> 4360 +<8019> <8019> 989 +<801a> <801b> 17511 +<801c> <801c> 7118 +<801d> <801f> 17513 +<8020> <8020> 7119 +<8021> <8021> 17516 +<8022> <8022> 7120 +<8023> <8024> 17517 +<8025> <8027> 7121 +<8028> <8028> 7125 +<8029> <8029> 7124 +<802a> <802a> 2966 +<802b> <802b> 17519 +<802c> <802c> 9666 +<802d> <802d> 17520 +<802e> <802e> 9665 +<802f> <8030> 17521 +<8031> <8031> 7126 +<8032> <8032> 17523 +<8033> <8033> 1593 +<8034> <8034> 17524 +<8035> <8035> 7128 +<8036> <8036> 4149 +<8037> <8037> 5297 +<8038> <8038> 3519 +<8039> <803a> 17525 +<803b> <803b> 1281 +<803c> <803c> 17527 +<803d> <803d> 1411 +<803e> <803e> 17528 +<803f> <803f> 1787 +<8040> <8041> 17529 +<8042> <8042> 2903 +endcidrange + +100 begincidrange +<8043> <8043> 7129 +<8044> <8045> 17531 +<8046> <8046> 7130 +<8047> <8049> 17533 +<804a> <804a> 2573 +<804b> <804b> 2628 +<804c> <804c> 4527 +<804d> <804d> 7131 +<804e> <8051> 17536 +<8052> <8052> 7132 +<8053> <8053> 17540 +<8054> <8054> 2547 +<8055> <8055> 17541 +<8056> <8056> 8488 +<8057> <8057> 17542 +<8058> <8058> 3031 +<8059> <8059> 17543 +<805a> <805a> 2314 +<805b> <805d> 17544 +<805e> <805e> 8601 +<805f> <8068> 17547 +<8069> <8069> 7133 +<806a> <806a> 1362 +<806b> <806e> 17557 +<806f> <806f> 8215 +<8070> <8070> 7840 +<8071> <8071> 7134 +<8072> <8072> 8485 +<8073> <8073> 8525 +<8074> <8074> 17561 +<8075> <8075> 9668 +<8076> <8076> 8349 +<8077> <8077> 8842 +<8078> <8078> 17562 +<8079> <8079> 9667 +<807a> <807c> 17563 +<807d> <807d> 8569 +<807e> <807e> 8248 +<807f> <807f> 6686 +<8080> <8080> 6685 +<8081> <8082> 17566 +<8083> <8083> 3541 +<8084> <8084> 4197 +<8085> <8085> 8533 +<8086> <8086> 3510 +<8087> <8087> 4473 +<8088> <8088> 17568 +<8089> <8089> 3261 +<808a> <808a> 17569 +<808b> <808b> 2506 +<808c> <808c> 2068 +<808d> <8092> 17570 +<8093> <8093> 6513 +<8094> <8095> 17576 +<8096> <8096> 3951 +<8097> <8097> 17578 +<8098> <8098> 4577 +<8099> <8099> 17579 +<809a> <809a> 1542 +<809b> <809b> 1747 +<809c> <809c> 6512 +<809d> <809d> 1737 +<809e> <809e> 17580 +<809f> <809f> 6511 +<80a0> <80a0> 1227 +<80a1> <80a1> 1826 +<80a2> <80a2> 4522 +<80a3> <80a3> 17581 +<80a4> <80a4> 1681 +<80a5> <80a5> 1639 +<80a6> <80a8> 17582 +<80a9> <80a9> 2138 +<80aa> <80aa> 1627 +<80ab> <80ab> 6518 +<80ac> <80ac> 17585 +<80ad> <80ad> 6519 +<80ae> <80ae> 964 +<80af> <80af> 2396 +<80b0> <80b0> 17586 +<80b1> <80b1> 6517 +<80b2> <80b2> 4322 +<80b3> <80b3> 17587 +<80b4> <80b4> 6520 +<80b5> <80b6> 17588 +<80b7> <80b7> 6521 +<80b8> <80b9> 17590 +<80ba> <80ba> 1643 +<80bb> <80bb> 17592 +<80bc> <80bc> 6514 +<80bd> <80bd> 6516 +<80be> <80be> 3375 +<80bf> <80bf> 4566 +<80c0> <80c0> 4462 +<80c1> <80c1> 3965 +<80c2> <80c2> 6527 +<80c3> <80c3> 3783 +<80c4> <80c4> 6528 +<80c5> <80c5> 17593 +<80c6> <80c6> 1417 +<80c7> <80cb> 17594 +endcidrange + +100 begincidrange +<80cc> <80cc> 1052 +<80cd> <80cd> 6530 +<80ce> <80ce> 3576 +<80cf> <80d5> 17599 +<80d6> <80d6> 2967 +<80d7> <80d7> 6531 +<80d8> <80d8> 17606 +<80d9> <80d9> 6529 +<80da> <80da> 2976 +<80db> <80db> 6526 +<80dc> <80dc> 3387 +<80dd> <80dd> 6533 +<80de> <80de> 1030 +<80df> <80e0> 17607 +<80e1> <80e1> 1969 +<80e2> <80e3> 17609 +<80e4> <80e4> 4717 +<80e5> <80e5> 7111 +<80e6> <80e6> 17611 +<80e7> <80ea> 6522 +<80eb> <80eb> 6534 +<80ec> <80ec> 6042 +<80ed> <80ed> 6537 +<80ee> <80ee> 17612 +<80ef> <80ef> 2421 +<80f0> <80f0> 4175 +<80f1> <80f1> 6535 +<80f2> <80f2> 6540 +<80f3> <80f3> 1767 +<80f4> <80f4> 6536 +<80f5> <80f5> 17613 +<80f6> <80f6> 2187 +<80f7> <80f7> 17614 +<80f8> <80f8> 4003 +<80f9> <80f9> 17615 +<80fa> <80fa> 962 +<80fb> <80fb> 17616 +<80fc> <80fc> 6541 +<80fd> <80fd> 2879 +<80fe> <80ff> 17617 +<8100> <8101> 17619 +<8102> <8102> 4523 +<8103> <8104> 17621 +<8105> <8105> 8658 +<8106> <8106> 1379 +<8107> <8108> 17623 +<8109> <8109> 2717 +<810a> <810a> 2092 +<810b> <810c> 17625 +<810d> <810e> 6538 +<810f> <810f> 4387 +<8110> <8110> 3081 +<8111> <8111> 2871 +<8112> <8112> 6543 +<8113> <8113> 2920 +<8114> <8114> 4873 +<8115> <8115> 17627 +<8116> <8116> 1144 +<8117> <8117> 17628 +<8118> <8118> 6548 +<8119> <8119> 17629 +<811a> <811a> 2198 +<811b> <811b> 9415 +<811c> <811d> 17630 +<811e> <811e> 6546 +<811f> <812b> 17632 +<812c> <812c> 6547 +<812d> <812e> 17645 +<812f> <812f> 1703 +<8130> <8130> 17647 +<8131> <8131> 3714 +<8132> <8132> 6549 +<8133> <8135> 17648 +<8136> <8136> 6545 +<8137> <8137> 17651 +<8138> <8138> 2556 +<8139> <8139> 8825 +<813a> <813d> 17652 +<813e> <813e> 3009 +<813f> <8145> 17656 +<8146> <8146> 3654 +<8147> <8147> 17663 +<8148> <8148> 6550 +<8149> <8149> 17664 +<814a> <814a> 2459 +<814b> <814b> 4159 +<814c> <814c> 6551 +<814d> <814d> 17665 +<814e> <814e> 8483 +<814f> <814f> 17666 +<8150> <8150> 1706 +<8151> <8151> 1704 +<8152> <8152> 17667 +<8153> <8153> 6552 +<8154> <8154> 3128 +<8155> <8155> 3748 +<8156> <8156> 9413 +<8157> <8158> 17668 +<8159> <815a> 6554 +<815b> <815f> 17670 +endcidrange + +100 begincidrange +<8160> <8160> 6557 +<8161> <8161> 9417 +<8162> <8164> 17675 +<8165> <8165> 3987 +<8166> <8166> 8340 +<8167> <8167> 6562 +<8168> <8168> 17678 +<8169> <8169> 6558 +<816a> <816a> 17679 +<816b> <816b> 8854 +<816c> <816c> 17680 +<816d> <816d> 6561 +<816e> <816e> 3284 +<816f> <816f> 17681 +<8170> <8170> 4133 +<8171> <8171> 6556 +<8172> <8173> 17682 +<8174> <8174> 6553 +<8175> <8177> 17684 +<8178> <8178> 7799 +<8179> <8179> 1716 +<817a> <817a> 3910 +<817b> <817b> 2888 +<817c> <817d> 6559 +<817e> <817e> 3629 +<817f> <817f> 3705 +<8180> <8180> 1021 +<8181> <8181> 17687 +<8182> <8182> 6566 +<8183> <8187> 17688 +<8188> <8188> 6565 +<8189> <8189> 17693 +<818a> <818a> 1145 +<818b> <818e> 17694 +<818f> <818f> 1755 +<8190> <8190> 17698 +<8191> <8191> 6567 +<8192> <8197> 17699 +<8198> <8198> 1109 +<8199> <8199> 17705 +<819a> <819a> 7942 +<819b> <819b> 3608 +<819c> <819c> 2823 +<819d> <819d> 3858 +<819e> <819f> 17706 +<81a0> <81a0> 8101 +<81a1> <81a2> 17708 +<81a3> <81a3> 6569 +<81a4> <81a5> 17710 +<81a6> <81a6> 6576 +<81a7> <81a7> 17712 +<81a8> <81a8> 2995 +<81a9> <81a9> 8345 +<81aa> <81aa> 6570 +<81ab> <81b2> 17713 +<81b3> <81b3> 3326 +<81b4> <81b9> 17721 +<81ba> <81ba> 5697 +<81bb> <81bb> 6574 +<81bc> <81bc> 17727 +<81bd> <81bd> 7853 +<81be> <81be> 9416 +<81bf> <81bf> 8360 +<81c0> <81c0> 3711 +<81c1> <81c1> 6575 +<81c2> <81c2> 1092 +<81c3> <81c3> 4252 +<81c4> <81c5> 17728 +<81c6> <81c6> 4195 +<81c7> <81c8> 17730 +<81c9> <81c9> 8223 +<81ca> <81ca> 6573 +<81cb> <81cb> 17732 +<81cc> <81cc> 6571 +<81cd> <81cd> 8389 +<81ce> <81ce> 17733 +<81cf> <81cf> 9418 +<81d0> <81d7> 17734 +<81d8> <81d8> 8176 +<81d9> <81d9> 17742 +<81da> <81da> 9414 +<81db> <81de> 17743 +<81df> <81df> 8797 +<81e0> <81e0> 8926 +<81e1> <81e2> 17747 +<81e3> <81e3> 1249 +<81e4> <81e6> 17749 +<81e7> <81e7> 6402 +<81e8> <81e8> 8236 +<81e9> <81e9> 17752 +<81ea> <81ea> 4657 +<81eb> <81eb> 17753 +<81ec> <81ec> 7337 +<81ed> <81ed> 1305 +<81ee> <81f2> 17754 +<81f3> <81f4> 4544 +<81f5> <81f9> 17759 +<81fa> <81fa> 8545 +<81fb> <81fb> 4490 +<81fc> <81fc> 2297 +endcidrange + +100 begincidrange +<81fd> <81fd> 17764 +<81fe> <81fe> 7333 +<81ff> <81ff> 17765 +<8200> <8200> 4143 +<8201> <8202> 7334 +<8203> <8203> 17766 +<8204> <8204> 7336 +<8205> <8205> 2298 +<8206> <8206> 4292 +<8207> <8207> 8763 +<8208> <8208> 8665 +<8209> <8209> 8139 +<820a> <820a> 8137 +<820b> <820b> 17767 +<820c> <820d> 3353 +<820e> <820f> 17768 +<8210> <8210> 7266 +<8211> <8211> 17770 +<8212> <8212> 3453 +<8213> <8213> 17771 +<8214> <8214> 3653 +<8215> <821a> 17772 +<821b> <821b> 5656 +<821c> <821c> 3497 +<821d> <821d> 17778 +<821e> <821e> 3831 +<821f> <821f> 4570 +<8220> <8220> 17779 +<8221> <8223> 7339 +<8224> <8227> 17780 +<8228> <8228> 7344 +<8229> <8229> 17784 +<822a> <822a> 1908 +<822b> <822b> 7345 +<822c> <822c> 1006 +<822d> <822d> 7342 +<822e> <822e> 17785 +<822f> <822f> 7343 +<8230> <8230> 2163 +<8231> <8231> 1180 +<8232> <8232> 17786 +<8233> <8234> 7348 +<8235> <8235> 1573 +<8236> <8236> 1143 +<8237> <8237> 3900 +<8238> <8238> 7346 +<8239> <8239> 1327 +<823a> <823a> 17787 +<823b> <823b> 7347 +<823c> <823d> 17788 +<823e> <823e> 7350 +<823f> <8243> 17790 +<8244> <8244> 7351 +<8245> <8246> 17795 +<8247> <8247> 3672 +<8248> <8248> 17797 +<8249> <8249> 7352 +<824a> <824a> 17798 +<824b> <824b> 7353 +<824c> <824e> 17799 +<824f> <824f> 7354 +<8250> <8257> 17802 +<8258> <8258> 3527 +<8259> <8259> 7777 +<825a> <825a> 7355 +<825b> <825e> 17810 +<825f> <825f> 7356 +<8260> <8263> 17814 +<8264> <8264> 9711 +<8265> <8265> 17818 +<8266> <8266> 8088 +<8267> <8267> 17819 +<8268> <8268> 7357 +<8269> <826a> 17820 +<826b> <826b> 9712 +<826c> <826d> 17822 +<826e> <826e> 7388 +<826f> <826f> 2565 +<8270> <8270> 2139 +<8271> <8271> 8072 +<8272> <8272> 3300 +<8273> <8273> 4103 +<8274> <8274> 6001 +<8275> <8276> 17824 +<8277> <8277> 8696 +<8278> <8278> 17826 +<8279> <8279> 5089 +<827a> <827a> 4188 +<827b> <827c> 17827 +<827d> <827d> 5090 +<827e> <827e> 951 +<827f> <827f> 5091 +<8280> <8281> 17829 +<8282> <8282> 2219 +<8283> <8283> 17831 +<8284> <8284> 5095 +<8285> <8287> 17832 +<8288> <8288> 4728 +<8289> <8289> 17835 +<828a> <828a> 5093 +endcidrange + +100 begincidrange +<828b> <828b> 4312 +<828c> <828c> 17836 +<828d> <828d> 3343 +<828e> <828e> 5096 +<828f> <828f> 5092 +<8290> <8290> 17837 +<8291> <8291> 5097 +<8292> <8292> 2727 +<8293> <8296> 17838 +<8297> <8297> 5098 +<8298> <8298> 5107 +<8299> <8299> 5099 +<829a> <829b> 17842 +<829c> <829c> 3822 +<829d> <829d> 4516 +<829e> <829e> 17844 +<829f> <829f> 5117 +<82a0> <82a0> 17845 +<82a1> <82a1> 5115 +<82a2> <82a3> 17846 +<82a4> <82a4> 5120 +<82a5> <82a5> 2231 +<82a6> <82a6> 2642 +<82a7> <82a7> 17848 +<82a8> <82a8> 5094 +<82a9> <82a9> 5113 +<82aa> <82aa> 5116 +<82ab> <82ab> 5100 +<82ac> <82ac> 1647 +<82ad> <82ad> 976 +<82ae> <82ae> 5109 +<82af> <82af> 3977 +<82b0> <82b0> 5103 +<82b1> <82b1> 1981 +<82b2> <82b2> 17849 +<82b3> <82b3> 1625 +<82b4> <82b4> 5114 +<82b5> <82b6> 17850 +<82b7> <82b7> 5108 +<82b8> <82b8> 5101 +<82b9> <82b9> 3160 +<82ba> <82ba> 17852 +<82bb> <82bb> 8994 +<82bc> <82bc> 17853 +<82bd> <82bd> 4072 +<82be> <82be> 5102 +<82bf> <82c0> 17854 +<82c1> <82c1> 5112 +<82c2> <82c3> 17856 +<82c4> <82c4> 5118 +<82c5> <82c6> 17858 +<82c7> <82c7> 3772 +<82c8> <82c8> 5104 +<82c9> <82c9> 17860 +<82ca> <82ca> 5105 +<82cb> <82cc> 5110 +<82cd> <82cd> 1179 +<82ce> <82ce> 5119 +<82cf> <82cf> 3530 +<82d0> <82d0> 17861 +<82d1> <82d1> 4346 +<82d2> <82d2> 5129 +<82d3> <82d3> 5133 +<82d4> <82d4> 3577 +<82d5> <82d5> 5140 +<82d6> <82d6> 17862 +<82d7> <82d7> 2796 +<82d8> <82d8> 5130 +<82d9> <82da> 17863 +<82db> <82db> 2382 +<82dc> <82dc> 5127 +<82dd> <82dd> 17865 +<82de> <82de> 1029 +<82df> <82df> 1807 +<82e0> <82e0> 5139 +<82e1> <82e1> 5121 +<82e2> <82e2> 17866 +<82e3> <82e3> 5106 +<82e4> <82e4> 5124 +<82e5> <82e5> 3279 +<82e6> <82e6> 2413 +<82e7> <82e7> 9014 +<82e8> <82ea> 17867 +<82eb> <82eb> 3316 +<82ec> <82ee> 17870 +<82ef> <82ef> 1062 +<82f0> <82f0> 17873 +<82f1> <82f1> 4231 +<82f2> <82f3> 17874 +<82f4> <82f4> 5128 +<82f5> <82f6> 17876 +<82f7> <82f7> 5123 +<82f8> <82f8> 17878 +<82f9> <82f9> 3034 +<82fa> <82fa> 17879 +<82fb> <82fb> 5132 +<82fc> <82ff> 17880 +<8300> <8300> 17884 +<8301> <8301> 4639 +<8302> <8302> 2740 +endcidrange + +100 begincidrange +<8303> <8303> 1619 +<8304> <8304> 3150 +<8305> <8305> 2734 +<8306> <8306> 5136 +<8307> <8307> 5126 +<8308> <8308> 5145 +<8309> <8309> 5122 +<830a> <830b> 17885 +<830c> <830c> 5131 +<830d> <830d> 17887 +<830e> <830e> 2260 +<830f> <830f> 5125 +<8310> <8310> 17888 +<8311> <8311> 5134 +<8312> <8313> 17889 +<8314> <8315> 5137 +<8316> <8316> 17891 +<8317> <8317> 5158 +<8318> <8319> 17892 +<831a> <831a> 5135 +<831b> <831b> 5166 +<831c> <831c> 5141 +<831d> <8326> 17894 +<8327> <8327> 2142 +<8328> <8328> 1351 +<8329> <832a> 17904 +<832b> <832b> 2728 +<832c> <832c> 1198 +<832d> <832d> 5160 +<832e> <832e> 17906 +<832f> <832f> 5152 +<8330> <8330> 17907 +<8331> <8331> 5149 +<8332> <8332> 17908 +<8333> <8333> 5162 +<8334> <8334> 5148 +<8335> <8335> 4215 +<8336> <8336> 1199 +<8337> <8337> 17909 +<8338> <8338> 3250 +<8339> <8339> 3262 +<833a> <833a> 5161 +<833b> <833b> 17910 +<833c> <833c> 5147 +<833d> <833f> 17911 +<8340> <8340> 5157 +<8341> <8342> 17914 +<8343> <8343> 5155 +<8344> <8345> 17916 +<8346> <8346> 2258 +<8347> <8347> 5154 +<8348> <8348> 17918 +<8349> <8349> 1188 +<834a> <834e> 17919 +<834f> <834f> 5153 +<8350> <8350> 2153 +<8351> <8351> 5142 +<8352> <8352> 2009 +<8353> <8353> 17924 +<8354> <8354> 2526 +<8355> <8359> 17925 +<835a> <835a> 2119 +<835b> <835c> 5143 +<835d> <835d> 17930 +<835e> <835e> 5151 +<835f> <835f> 5156 +<8360> <8360> 5159 +<8361> <8361> 1429 +<8362> <8362> 17931 +<8363> <8363> 3252 +<8364> <8364> 2044 +<8365> <8365> 5164 +<8366> <8366> 5163 +<8367> <8367> 4240 +<8368> <8368> 5165 +<8369> <8369> 5167 +<836a> <836a> 5169 +<836b> <836b> 4216 +<836c> <836c> 5168 +<836d> <836e> 5170 +<836f> <836f> 4144 +<8370> <8376> 17932 +<8377> <8377> 1920 +<8378> <8378> 5173 +<8379> <837a> 17939 +<837b> <837b> 5186 +<837c> <837c> 5181 +<837d> <837d> 5184 +<837e> <8384> 17941 +<8385> <8385> 5180 +<8386> <8386> 3053 +<8387> <8388> 17948 +<8389> <8389> 2525 +<838a> <838a> 8875 +<838b> <838d> 17950 +<838e> <838e> 3304 +<838f> <8391> 17953 +<8392> <8392> 5146 +<8393> <8393> 5178 +<8394> <8395> 17956 +endcidrange + +100 begincidrange +<8396> <8396> 8127 +<8397> <8397> 17958 +<8398> <8398> 5187 +<8399> <839a> 17959 +<839b> <839b> 5150 +<839c> <839c> 5179 +<839d> <839d> 17961 +<839e> <839e> 5188 +<839f> <839f> 17962 +<83a0> <83a0> 5176 +<83a1> <83a1> 17963 +<83a2> <83a2> 8061 +<83a3> <83a6> 17964 +<83a7> <83a7> 9011 +<83a8> <83a8> 5189 +<83a9> <83a9> 5183 +<83aa> <83aa> 5177 +<83ab> <83ab> 2829 +<83ac> <83af> 17968 +<83b0> <83b0> 5172 +<83b1> <83b1> 2462 +<83b2> <83b2> 2548 +<83b3> <83b4> 5174 +<83b5> <83b5> 17972 +<83b6> <83b6> 5182 +<83b7> <83b7> 2054 +<83b8> <83b8> 5185 +<83b9> <83b9> 4237 +<83ba> <83ba> 5190 +<83bb> <83bb> 17973 +<83bc> <83bc> 5191 +<83bd> <83bd> 2732 +<83be> <83bf> 17974 +<83c0> <83c0> 5214 +<83c1> <83c1> 5192 +<83c2> <83c4> 17976 +<83c5> <83c5> 5213 +<83c6> <83c6> 17979 +<83c7> <83c7> 1814 +<83c8> <83c9> 17980 +<83ca> <83ca> 2308 +<83cb> <83cb> 17982 +<83cc> <83cc> 2345 +<83cd> <83ce> 17983 +<83cf> <83cf> 1921 +<83d0> <83d3> 17985 +<83d4> <83d4> 5206 +<83d5> <83d5> 17989 +<83d6> <83d6> 5201 +<83d7> <83d7> 17990 +<83d8> <83d8> 5195 +<83d9> <83db> 17991 +<83dc> <83dc> 1170 +<83dd> <83dd> 5199 +<83de> <83de> 17994 +<83df> <83df> 5207 +<83e0> <83e0> 1131 +<83e1> <83e1> 5217 +<83e2> <83e4> 17995 +<83e5> <83e5> 5194 +<83e6> <83e8> 17998 +<83e9> <83e9> 3055 +<83ea> <83ea> 5212 +<83eb> <83ee> 18001 +<83ef> <83ef> 8013 +<83f0> <83f0> 5216 +<83f1> <83f1> 2603 +<83f2> <83f2> 1635 +<83f3> <83f7> 18005 +<83f8> <83f9> 5210 +<83fa> <83fc> 18010 +<83fd> <83fd> 5200 +<83fe> <83ff> 18013 +<8400> <8400> 18015 +<8401> <8401> 5193 +<8402> <8402> 18016 +<8403> <8403> 5209 +<8404> <8404> 3620 +<8405> <8405> 18017 +<8406> <8406> 5205 +<8407> <8407> 9012 +<8408> <8409> 18018 +<840a> <840a> 8177 +<840b> <840b> 5198 +<840c> <840c> 2765 +<840d> <840d> 3035 +<840e> <840e> 3773 +<840f> <840f> 5208 +<8410> <8410> 18020 +<8411> <8411> 5204 +<8412> <8417> 18021 +<8418> <8418> 5197 +<8419> <841b> 18027 +<841c> <841c> 5202 +<841d> <841d> 2691 +<841e> <8423> 18030 +<8424> <8425> 4238 +<8426> <8426> 5215 +<8427> <8427> 3937 +<8428> <8428> 3283 +endcidrange + +100 begincidrange +<8429> <842b> 18036 +<842c> <842c> 8587 +<842d> <8430> 18039 +<8431> <8431> 5234 +<8432> <8434> 18043 +<8435> <8435> 9033 +<8436> <8437> 18046 +<8438> <8438> 5203 +<8439> <843b> 18048 +<843c> <843c> 5228 +<843d> <843d> 2699 +<843e> <8445> 18051 +<8446> <8446> 5229 +<8447> <8448> 18059 +<8449> <8449> 8715 +<844a> <8450> 18061 +<8451> <8451> 5219 +<8452> <8452> 9030 +<8453> <8456> 18068 +<8457> <8457> 4599 +<8458> <8458> 18072 +<8459> <8459> 5221 +<845a> <845a> 5220 +<845b> <845b> 1771 +<845c> <845c> 5218 +<845d> <8460> 18073 +<8461> <8461> 3054 +<8462> <8462> 18077 +<8463> <8463> 1516 +<8464> <8464> 9031 +<8465> <8465> 18078 +<8466> <8466> 8595 +<8467> <8468> 18079 +<8469> <8469> 5230 +<846a> <846a> 18081 +<846b> <846b> 1968 +<846c> <846c> 4388 +<846d> <846d> 5235 +<846e> <846e> 18082 +<846f> <846f> 9889 +<8470> <8470> 18083 +<8471> <8471> 1363 +<8472> <8472> 18084 +<8473> <8473> 5222 +<8474> <8474> 18085 +<8475> <8475> 2440 +<8476> <8476> 5231 +<8477> <8477> 8034 +<8478> <8478> 5227 +<8479> <8479> 18086 +<847a> <847a> 5225 +<847b> <8481> 18087 +<8482> <8482> 1466 +<8483> <8486> 18094 +<8487> <8488> 5223 +<8489> <8489> 5226 +<848a> <848a> 18098 +<848b> <848b> 2176 +<848c> <848c> 5232 +<848d> <848d> 18099 +<848e> <848e> 5233 +<848f> <8492> 18100 +<8493> <8493> 9037 +<8494> <8494> 9032 +<8495> <8496> 18104 +<8497> <8497> 5249 +<8498> <8498> 18106 +<8499> <8499> 2766 +<849a> <849b> 18107 +<849c> <849c> 3543 +<849d> <84a0> 18109 +<84a1> <84a1> 5246 +<84a2> <84ae> 18113 +<84af> <84af> 4759 +<84b0> <84b1> 18126 +<84b2> <84b2> 3056 +<84b3> <84b3> 18128 +<84b4> <84b4> 5248 +<84b5> <84b7> 18129 +<84b8> <84b8> 4501 +<84b9> <84b9> 5247 +<84ba> <84ba> 5244 +<84bb> <84bb> 18132 +<84bc> <84bc> 7776 +<84bd> <84bd> 5240 +<84be> <84be> 18133 +<84bf> <84bf> 5243 +<84c0> <84c0> 9029 +<84c1> <84c1> 5236 +<84c2> <84c3> 18134 +<84c4> <84c4> 4025 +<84c5> <84c8> 18136 +<84c9> <84c9> 3251 +<84ca> <84ca> 5242 +<84cb> <84cb> 7954 +<84cc> <84cc> 18140 +<84cd> <84cd> 5237 +<84ce> <84cf> 18141 +<84d0> <84d0> 5238 +<84d1> <84d1> 3559 +endcidrange + +100 begincidrange +<84d2> <84d2> 18143 +<84d3> <84d3> 5241 +<84d4> <84d5> 18144 +<84d6> <84d6> 1078 +<84d7> <84dc> 18146 +<84dd> <84dd> 2465 +<84de> <84de> 18152 +<84df> <84df> 2094 +<84e0> <84e0> 5245 +<84e1> <84e2> 18153 +<84e3> <84e3> 5251 +<84e4> <84e4> 18155 +<84e5> <84e5> 5250 +<84e6> <84e6> 5239 +<84e7> <84eb> 18156 +<84ec> <84ec> 2991 +<84ed> <84ed> 18161 +<84ee> <84ee> 8216 +<84ef> <84ef> 9013 +<84f0> <84f0> 5255 +<84f1> <84fb> 18162 +<84fc> <84fc> 5262 +<84fd> <84fd> 9020 +<84fe> <84fe> 18173 +<84ff> <84ff> 5261 +<8500> <850b> 18174 +<850c> <850c> 5252 +<850d> <8510> 18186 +<8511> <8511> 2804 +<8512> <8512> 18190 +<8513> <8513> 2722 +<8514> <8514> 9839 +<8515> <8516> 18191 +<8517> <8517> 4482 +<8518> <8519> 18193 +<851a> <851a> 3780 +<851b> <851d> 18195 +<851e> <851e> 9041 +<851f> <851f> 5257 +<8520> <8520> 18198 +<8521> <8521> 1171 +<8522> <8522> 18199 +<8523> <8523> 8096 +<8524> <8525> 18200 +<8526> <8526> 9016 +<8527> <852a> 18202 +<852b> <852b> 2891 +<852c> <852c> 3446 +<852d> <852d> 8731 +<852e> <8536> 18206 +<8537> <8537> 3131 +<8538> <8538> 5254 +<8539> <8539> 5256 +<853a> <853a> 5258 +<853b> <853b> 5260 +<853c> <853c> 949 +<853d> <853d> 1079 +<853e> <8540> 18215 +<8541> <8541> 9026 +<8542> <8542> 18218 +<8543> <8543> 5270 +<8544> <8545> 18219 +<8546> <8546> 9039 +<8547> <8547> 18221 +<8548> <8548> 5264 +<8549> <8549> 2183 +<854a> <854a> 3274 +<854b> <854d> 18222 +<854e> <854e> 9021 +<854f> <8551> 18225 +<8552> <8552> 9028 +<8553> <8553> 9009 +<8554> <8554> 18228 +<8555> <8555> 9035 +<8556> <8556> 5259 +<8557> <8557> 18229 +<8558> <8558> 9019 +<8559> <8559> 5263 +<855a> <855d> 18230 +<855e> <855e> 5267 +<855f> <8561> 18234 +<8562> <8562> 9040 +<8563> <8563> 18237 +<8564> <8564> 5266 +<8565> <8567> 18238 +<8568> <8568> 5265 +<8569> <8569> 7860 +<856a> <856a> 8614 +<856b> <856c> 18241 +<856d> <856d> 8651 +<856e> <8571> 18243 +<8572> <8572> 5271 +<8573> <8573> 18247 +<8574> <8574> 4367 +<8575> <8576> 18248 +<8577> <8577> 9045 +<8578> <8578> 18250 +<8579> <8579> 5277 +<857a> <857a> 5268 +<857b> <857b> 5272 +endcidrange + +100 begincidrange +<857c> <857d> 18251 +<857e> <857e> 2500 +<857f> <8583> 18253 +<8584> <8584> 1034 +<8585> <8585> 5280 +<8586> <8586> 18258 +<8587> <8587> 5275 +<8588> <8588> 9022 +<8589> <8589> 18259 +<858a> <858a> 8052 +<858b> <858b> 18260 +<858c> <858c> 9008 +<858d> <858e> 18261 +<858f> <858f> 5276 +<8590> <8590> 18263 +<8591> <8591> 9856 +<8592> <8593> 18264 +<8594> <8594> 8410 +<8595> <859a> 18266 +<859b> <859b> 4047 +<859c> <859c> 5279 +<859d> <859e> 18272 +<859f> <859f> 9034 +<85a0> <85a3> 18274 +<85a4> <85a4> 5273 +<85a5> <85a5> 18278 +<85a6> <85a6> 8081 +<85a7> <85a7> 18279 +<85a8> <85a8> 5274 +<85a9> <85a9> 8455 +<85aa> <85aa> 3976 +<85ab> <85ad> 18280 +<85ae> <85ae> 5278 +<85af> <85af> 3460 +<85b0> <85b0> 5283 +<85b1> <85b6> 18283 +<85b7> <85b7> 5282 +<85b8> <85b8> 18289 +<85b9> <85b9> 5281 +<85ba> <85ba> 9023 +<85bb> <85c0> 18290 +<85c1> <85c1> 5285 +<85c2> <85c8> 18296 +<85c9> <85c9> 2230 +<85ca> <85cc> 18303 +<85cd> <85cd> 8180 +<85ce> <85ce> 9027 +<85cf> <85cf> 1183 +<85d0> <85d0> 2799 +<85d1> <85d2> 18306 +<85d3> <85d3> 5284 +<85d4> <85d4> 18308 +<85d5> <85d5> 2939 +<85d6> <85db> 18309 +<85dc> <85dc> 5286 +<85dd> <85dd> 8722 +<85de> <85e3> 18315 +<85e4> <85e4> 3628 +<85e5> <85e5> 8711 +<85e6> <85e8> 18321 +<85e9> <85e9> 1607 +<85ea> <85ea> 9049 +<85eb> <85f3> 18324 +<85f4> <85f4> 8788 +<85f5> <85f5> 18333 +<85f6> <85f6> 9010 +<85f7> <85f8> 18334 +<85f9> <85f9> 7718 +<85fa> <85fa> 9047 +<85fb> <85fb> 4392 +<85fc> <85fe> 18336 +<85ff> <85ff> 5287 +<8600> <8603> 18339 +<8604> <8604> 9048 +<8605> <8605> 5289 +<8606> <8606> 8258 +<8607> <8607> 8531 +<8608> <860a> 18343 +<860b> <860b> 8379 +<860c> <8610> 18346 +<8611> <8611> 2821 +<8612> <8615> 18351 +<8616> <8616> 5291 +<8617> <8619> 18355 +<861a> <861a> 9050 +<861b> <861d> 18358 +<861e> <861e> 9046 +<861f> <8621> 18361 +<8622> <8622> 9015 +<8623> <8626> 18364 +<8627> <8627> 5288 +<8628> <8628> 18368 +<8629> <8629> 5290 +<862a> <862c> 18369 +<862d> <862d> 8185 +<862e> <8637> 18372 +<8638> <8638> 4443 +<8639> <8639> 18382 +<863a> <863a> 9043 +<863b> <863b> 18383 +endcidrange + +100 begincidrange +<863c> <863c> 5292 +<863d> <863e> 18384 +<863f> <863f> 8289 +<8640> <864c> 18386 +<864d> <864d> 7152 +<864e> <864e> 1975 +<864f> <864f> 2649 +<8650> <8650> 2929 +<8651> <8651> 2670 +<8652> <8653> 18399 +<8654> <8654> 7153 +<8655> <8655> 7829 +<8656> <8659> 18401 +<865a> <865a> 4020 +<865b> <865b> 18405 +<865c> <865c> 8265 +<865d> <865d> 18406 +<865e> <865e> 4290 +<865f> <865f> 8002 +<8660> <8661> 18407 +<8662> <8662> 6509 +<8663> <8666> 18409 +<8667> <8667> 8168 +<8668> <866a> 18413 +<866b> <866b> 1291 +<866c> <866c> 7154 +<866d> <866d> 18416 +<866e> <866e> 7155 +<866f> <8670> 18417 +<8671> <8671> 3396 +<8672> <8678> 18419 +<8679> <8679> 1950 +<867a> <867a> 7157 +<867b> <867b> 7159 +<867c> <867c> 7158 +<867d> <867d> 3545 +<867e> <867e> 3879 +<867f> <867f> 7156 +<8680> <8680> 3403 +<8681> <8681> 4182 +<8682> <8682> 2707 +<8683> <8689> 18426 +<868a> <868a> 3794 +<868b> <868b> 7162 +<868c> <868c> 1025 +<868d> <868d> 7161 +<868e> <8692> 18433 +<8693> <8693> 7168 +<8694> <8694> 18438 +<8695> <8695> 1174 +<8696> <869b> 18439 +<869c> <869c> 4074 +<869d> <869d> 7164 +<869e> <86a2> 18445 +<86a3> <86a3> 7166 +<86a4> <86a4> 4396 +<86a5> <86a6> 18450 +<86a7> <86a7> 7165 +<86a8> <86a8> 7160 +<86a9> <86a9> 7169 +<86aa> <86aa> 7167 +<86ab> <86ab> 18452 +<86ac> <86ac> 7163 +<86ad> <86ae> 18453 +<86af> <86af> 7177 +<86b0> <86b0> 7174 +<86b1> <86b1> 7176 +<86b2> <86b3> 18455 +<86b4> <86b4> 7180 +<86b5> <86b5> 7172 +<86b6> <86b6> 7170 +<86b7> <86b9> 18457 +<86ba> <86ba> 7175 +<86bb> <86bf> 18460 +<86c0> <86c0> 4602 +<86c1> <86c3> 18465 +<86c4> <86c4> 7171 +<86c5> <86c5> 18468 +<86c6> <86c6> 3190 +<86c7> <86c7> 3352 +<86c8> <86c8> 18469 +<86c9> <86c9> 7178 +<86ca> <86ca> 1823 +<86cb> <86cb> 1425 +<86cc> <86cd> 18470 +<86ce> <86ce> 7173 +<86cf> <86cf> 7179 +<86d0> <86d0> 7186 +<86d1> <86d1> 7192 +<86d2> <86d3> 18472 +<86d4> <86d4> 2028 +<86d5> <86d7> 18474 +<86d8> <86d8> 7191 +<86d9> <86d9> 3725 +<86da> <86da> 18477 +<86db> <86db> 4586 +<86dc> <86dd> 18478 +<86de> <86de> 7188 +<86df> <86df> 7190 +<86e0> <86e3> 18480 +endcidrange + +100 begincidrange +<86e4> <86e4> 1773 +<86e5> <86e8> 18484 +<86e9> <86e9> 7181 +<86ea> <86ec> 18488 +<86ed> <86ed> 7184 +<86ee> <86ee> 2720 +<86ef> <86ef> 18491 +<86f0> <86f0> 4478 +<86f1> <86f2> 7182 +<86f3> <86f3> 7185 +<86f4> <86f4> 7189 +<86f5> <86f7> 18492 +<86f8> <86f8> 7195 +<86f9> <86f9> 4257 +<86fa> <86fa> 9690 +<86fb> <86fd> 18495 +<86fe> <86fe> 1577 +<86ff> <86ff> 18498 +<8700> <8700> 3464 +<8701> <8701> 18499 +<8702> <8702> 1665 +<8703> <8703> 7193 +<8704> <8705> 18500 +<8706> <8706> 9687 +<8707> <8707> 7194 +<8708> <8708> 7196 +<8709> <8709> 7199 +<870a> <870a> 7197 +<870b> <870c> 18502 +<870d> <870d> 7198 +<870e> <8711> 18504 +<8712> <8712> 4090 +<8713> <8713> 7187 +<8714> <8714> 18508 +<8715> <8715> 3706 +<8716> <8716> 18509 +<8717> <8717> 3806 +<8718> <8718> 4520 +<8719> <8719> 18510 +<871a> <871a> 7205 +<871b> <871b> 18511 +<871c> <871c> 2784 +<871d> <871d> 18512 +<871e> <871e> 7202 +<871f> <8720> 18513 +<8721> <8721> 2458 +<8722> <8722> 7214 +<8723> <8723> 7200 +<8724> <8724> 18515 +<8725> <8725> 7203 +<8726> <8728> 18516 +<8729> <8729> 7210 +<872a> <872d> 18519 +<872e> <872e> 7204 +<872f> <8730> 18523 +<8731> <8731> 7209 +<8732> <8733> 18525 +<8734> <8734> 7208 +<8735> <8736> 18527 +<8737> <8737> 7211 +<8738> <873a> 18529 +<873b> <873b> 7201 +<873c> <873d> 18532 +<873e> <873e> 7206 +<873f> <873f> 7212 +<8740> <8746> 18534 +<8747> <8747> 4241 +<8748> <8748> 7207 +<8749> <8749> 1212 +<874a> <874b> 18541 +<874c> <874c> 7220 +<874d> <874d> 18543 +<874e> <874e> 3958 +<874f> <8752> 18544 +<8753> <8753> 7223 +<8754> <8754> 18548 +<8755> <8755> 8494 +<8756> <8756> 18549 +<8757> <8757> 2013 +<8758> <8758> 18550 +<8759> <8759> 7227 +<875a> <875f> 18551 +<8760> <8760> 7218 +<8761> <8762> 18557 +<8763> <8763> 7224 +<8764> <8764> 7226 +<8765> <8765> 7228 +<8766> <8766> 8626 +<8767> <876d> 18559 +<876e> <876e> 7221 +<876f> <876f> 18566 +<8770> <8770> 7219 +<8771> <8773> 18567 +<8774> <8774> 1970 +<8775> <8775> 18570 +<8776> <8776> 1500 +<8777> <8777> 18571 +<8778> <8778> 8606 +<8779> <877a> 18572 +<877b> <877b> 7217 +endcidrange + +100 begincidrange +<877c> <877c> 7225 +<877d> <877e> 7215 +<877f> <8781> 18574 +<8782> <8782> 7213 +<8783> <8783> 7238 +<8784> <8784> 9692 +<8785> <8785> 7235 +<8786> <8787> 18577 +<8788> <8788> 7234 +<8789> <878a> 18579 +<878b> <878b> 7222 +<878c> <878c> 18581 +<878d> <878d> 3253 +<878e> <8792> 18582 +<8793> <8793> 7229 +<8794> <8796> 18587 +<8797> <8797> 7237 +<8798> <879d> 18590 +<879e> <879e> 8300 +<879f> <879f> 2813 +<87a0> <87a1> 18596 +<87a2> <87a2> 8742 +<87a3> <87a7> 18598 +<87a8> <87a8> 7231 +<87a9> <87aa> 18603 +<87ab> <87ab> 7239 +<87ac> <87ac> 7241 +<87ad> <87ad> 7236 +<87ae> <87ae> 18605 +<87af> <87af> 7230 +<87b0> <87b2> 18606 +<87b3> <87b3> 7243 +<87b4> <87b4> 18609 +<87b5> <87b5> 7242 +<87b6> <87b9> 18610 +<87ba> <87ba> 2692 +<87bb> <87bb> 9696 +<87bc> <87bc> 18614 +<87bd> <87bd> 7246 +<87be> <87bf> 18615 +<87c0> <87c0> 7248 +<87c1> <87c3> 18617 +<87c4> <87c4> 8827 +<87c5> <87c5> 18620 +<87c6> <87c6> 7233 +<87c7> <87c7> 18621 +<87c8> <87c8> 9694 +<87c9> <87c9> 18622 +<87ca> <87ca> 7249 +<87cb> <87cb> 7244 +<87cc> <87cd> 18623 +<87ce> <87ce> 9697 +<87cf> <87d0> 18625 +<87d1> <87d1> 7247 +<87d2> <87d2> 7232 +<87d3> <87d3> 7245 +<87d4> <87da> 18627 +<87db> <87db> 7250 +<87dc> <87df> 18634 +<87e0> <87e0> 7252 +<87e1> <87e2> 18638 +<87e3> <87e3> 9685 +<87e4> <87e4> 18640 +<87e5> <87e5> 7240 +<87e6> <87e9> 18641 +<87ea> <87ea> 7251 +<87eb> <87eb> 18645 +<87ec> <87ec> 7787 +<87ed> <87ed> 18646 +<87ee> <87ee> 7253 +<87ef> <87ef> 9691 +<87f0> <87f1> 18647 +<87f2> <87f2> 7817 +<87f3> <87f5> 18649 +<87f6> <87f6> 9689 +<87f7> <87f8> 18652 +<87f9> <87f9> 3970 +<87fa> <87fa> 18654 +<87fb> <87fb> 8721 +<87fc> <87fd> 18655 +<87fe> <87fe> 7256 +<87ff> <87ff> 18657 +<8800> <8802> 18658 +<8803> <8803> 4877 +<8804> <8804> 18661 +<8805> <8805> 8745 +<8806> <8806> 9686 +<8807> <8809> 18662 +<880a> <880a> 7257 +<880b> <880f> 18665 +<8810> <8810> 9693 +<8811> <8811> 9695 +<8812> <8812> 18670 +<8813> <8813> 7255 +<8814> <8814> 18671 +<8815> <8815> 3263 +<8816> <8816> 7254 +<8817> <881a> 18672 +<881b> <881b> 7258 +<881c> <881e> 18676 +endcidrange + +100 begincidrange +<881f> <881f> 8175 +<8820> <8820> 18679 +<8821> <8821> 7259 +<8822> <8822> 1347 +<8823> <8823> 9688 +<8824> <8830> 18680 +<8831> <8831> 7977 +<8832> <8832> 6797 +<8833> <8835> 18693 +<8836> <8836> 7771 +<8837> <8838> 18696 +<8839> <8839> 7260 +<883a> <883a> 18698 +<883b> <883b> 8310 +<883c> <883c> 7261 +<883d> <883f> 18699 +<8840> <8840> 4051 +<8841> <8843> 18702 +<8844> <8844> 7338 +<8845> <8845> 3985 +<8846> <8846> 8855 +<8847> <8849> 18705 +<884a> <884a> 9872 +<884b> <884b> 18708 +<884c> <884c> 3995 +<884d> <884d> 4101 +<884e> <8852> 18709 +<8853> <8853> 8511 +<8854> <8854> 3899 +<8855> <8856> 18714 +<8857> <8857> 2215 +<8858> <8858> 18716 +<8859> <8859> 4076 +<885a> <885a> 18717 +<885b> <885b> 8600 +<885c> <885c> 18718 +<885d> <885d> 7816 +<885e> <8860> 18719 +<8861> <8861> 1945 +<8862> <8862> 5613 +<8863> <8863> 4169 +<8864> <8864> 7078 +<8865> <8865> 1152 +<8866> <8867> 18722 +<8868> <8868> 1110 +<8869> <8869> 7079 +<886a> <886a> 18724 +<886b> <886b> 3321 +<886c> <886c> 1257 +<886d> <886d> 18725 +<886e> <886e> 4870 +<886f> <886f> 18726 +<8870> <8870> 3482 +<8871> <8871> 18727 +<8872> <8872> 7080 +<8873> <8876> 18728 +<8877> <8877> 4563 +<8878> <8878> 18732 +<8879> <8879> 8844 +<887a> <887c> 18733 +<887d> <887d> 7081 +<887e> <887e> 7358 +<887f> <887f> 7082 +<8880> <8880> 18736 +<8881> <8881> 4335 +<8882> <8882> 7083 +<8883> <8883> 18737 +<8884> <8884> 971 +<8885> <8885> 7359 +<8886> <8887> 18738 +<8888> <8888> 7360 +<8889> <888a> 18740 +<888b> <888b> 1407 +<888c> <888c> 18742 +<888d> <888d> 2972 +<888e> <8891> 18743 +<8892> <8892> 3598 +<8893> <8895> 18747 +<8896> <8896> 4015 +<8897> <889b> 18750 +<889c> <889c> 3729 +<889d> <88a1> 18755 +<88a2> <88a2> 7084 +<88a3> <88a3> 18760 +<88a4> <88a4> 4871 +<88a5> <88aa> 18761 +<88ab> <88ab> 1060 +<88ac> <88ac> 18767 +<88ad> <88ad> 3867 +<88ae> <88b0> 18768 +<88b1> <88b1> 1695 +<88b2> <88b6> 18771 +<88b7> <88b7> 7086 +<88b8> <88bb> 18776 +<88bc> <88bc> 7087 +<88bd> <88c0> 18780 +<88c1> <88c1> 1162 +<88c2> <88c2> 2586 +<88c3> <88c4> 18784 +<88c5> <88c5> 4621 +endcidrange + +100 begincidrange +<88c6> <88c6> 7085 +<88c7> <88c8> 18786 +<88c9> <88c9> 7088 +<88ca> <88ca> 9713 +<88cb> <88cd> 18788 +<88ce> <88ce> 7090 +<88cf> <88cf> 8204 +<88d0> <88d1> 18791 +<88d2> <88d2> 4874 +<88d3> <88d3> 18793 +<88d4> <88d4> 4200 +<88d5> <88d5> 4326 +<88d6> <88d7> 18794 +<88d8> <88d8> 7361 +<88d9> <88d9> 3220 +<88da> <88db> 18796 +<88dc> <88dc> 7768 +<88dd> <88dd> 8876 +<88de> <88de> 18798 +<88df> <88df> 7362 +<88e0> <88e1> 18799 +<88e2> <88e2> 7089 +<88e3> <88e3> 7091 +<88e4> <88e4> 2416 +<88e5> <88e5> 7092 +<88e6> <88e7> 18801 +<88e8> <88e8> 7096 +<88e9> <88ef> 18803 +<88f0> <88f0> 7098 +<88f1> <88f1> 7093 +<88f2> <88f2> 18810 +<88f3> <88f3> 3338 +<88f4> <88f4> 2978 +<88f5> <88f7> 18811 +<88f8> <88f8> 2698 +<88f9> <88f9> 1877 +<88fa> <88fb> 18814 +<88fc> <88fc> 7095 +<88fd> <88fd> 9895 +<88fe> <88fe> 7097 +<88ff> <88ff> 18816 +<8900> <8901> 18817 +<8902> <8902> 1836 +<8903> <8906> 18819 +<8907> <8907> 9846 +<8908> <8909> 18823 +<890a> <890a> 7103 +<890b> <890f> 18825 +<8910> <8910> 1933 +<8911> <8911> 18830 +<8912> <8912> 1032 +<8913> <8913> 7101 +<8914> <8918> 18831 +<8919> <8919> 7100 +<891a> <891a> 7094 +<891b> <891b> 7102 +<891c> <8920> 18836 +<8921> <8921> 7099 +<8922> <8924> 18841 +<8925> <8925> 3271 +<8926> <8929> 18844 +<892a> <892a> 3707 +<892b> <892b> 7105 +<892c> <892f> 18848 +<8930> <8930> 5945 +<8931> <8931> 18852 +<8932> <8932> 8161 +<8933> <8933> 9659 +<8934> <8934> 7104 +<8935> <8935> 18853 +<8936> <8936> 7106 +<8937> <8937> 18854 +<8938> <8938> 9662 +<8939> <893a> 18855 +<893b> <893b> 8925 +<893c> <8940> 18857 +<8941> <8941> 7107 +<8942> <8943> 18862 +<8944> <8944> 3922 +<8945> <8946> 18864 +<8947> <8947> 9661 +<8948> <8955> 18866 +<8956> <8956> 7722 +<8957> <895c> 18880 +<895d> <895d> 9660 +<895e> <895e> 7363 +<895f> <895f> 2244 +<8960> <8960> 9658 +<8961> <8963> 18886 +<8964> <8964> 9663 +<8965> <8965> 18889 +<8966> <8966> 7108 +<8967> <8969> 18890 +<896a> <896a> 8583 +<896b> <896b> 18893 +<896c> <896c> 9835 +<896d> <896e> 18894 +<896f> <896f> 7807 +<8970> <8971> 18896 +<8972> <8972> 8621 +endcidrange + +100 begincidrange +<8973> <897a> 18898 +<897b> <897b> 7109 +<897c> <897e> 18906 +<897f> <897f> 3846 +<8980> <8980> 18909 +<8981> <8981> 4145 +<8982> <8982> 18910 +<8983> <8983> 7135 +<8984> <8985> 18911 +<8986> <8986> 1709 +<8987> <898a> 18913 +<898b> <898b> 8086 +<898c> <898e> 18917 +<898f> <898f> 7986 +<8990> <8992> 18920 +<8993> <8993> 8324 +<8994> <8995> 18923 +<8996> <8996> 8502 +<8997> <8997> 18925 +<8998> <8998> 9400 +<8999> <89a0> 18926 +<89a1> <89a1> 9402 +<89a2> <89a5> 18934 +<89a6> <89a6> 9404 +<89a7> <89a9> 18938 +<89aa> <89aa> 8420 +<89ab> <89ab> 18941 +<89ac> <89ac> 9401 +<89ad> <89ae> 18942 +<89af> <89af> 9405 +<89b0> <89b1> 18944 +<89b2> <89b2> 9406 +<89b3> <89b6> 18946 +<89b7> <89b7> 9407 +<89b8> <89b9> 18950 +<89ba> <89ba> 8146 +<89bb> <89bc> 18952 +<89bd> <89bd> 8189 +<89be> <89be> 18954 +<89bf> <89bf> 9403 +<89c0> <89c0> 7981 +<89c1> <89c1> 2158 +<89c2> <89c2> 1844 +<89c3> <89c3> 18955 +<89c4> <89c4> 1855 +<89c5> <89c5> 2782 +<89c6> <89c6> 3434 +<89c7> <89c7> 6458 +<89c8> <89c8> 2475 +<89c9> <89c9> 2340 +<89ca> <89cc> 6459 +<89cd> <89cd> 18956 +<89ce> <89d1> 6462 +<89d2> <89d2> 2200 +<89d3> <89d5> 18957 +<89d6> <89d6> 7511 +<89d7> <89d9> 18960 +<89da> <89da> 7513 +<89db> <89db> 18963 +<89dc> <89dc> 7514 +<89dd> <89dd> 18964 +<89de> <89de> 7512 +<89df> <89e2> 18965 +<89e3> <89e3> 2227 +<89e4> <89e4> 18969 +<89e5> <89e5> 7515 +<89e6> <89e6> 1320 +<89e7> <89ea> 18970 +<89eb> <89eb> 7516 +<89ec> <89ee> 18974 +<89ef> <89ef> 7517 +<89f0> <89f2> 18977 +<89f3> <89f3> 6592 +<89f4> <89f4> 9737 +<89f5> <89f5> 18980 +<89f6> <89f6> 9738 +<89f7> <89f7> 18981 +<89f8> <89f8> 7828 +<89f9> <89ff> 18982 +<8a00> <8a00> 4093 +<8a01> <8a01> 8927 +<8a02> <8a02> 7883 +<8a03> <8a03> 7949 +<8a04> <8a06> 18989 +<8a07> <8a07> 4862 +<8a08> <8a08> 8055 +<8a09> <8a09> 18992 +<8a0a> <8a0a> 8683 +<8a0b> <8a0b> 18993 +<8a0c> <8a0c> 8929 +<8a0d> <8a0d> 18994 +<8a0e> <8a0e> 8559 +<8a0f> <8a0f> 18995 +<8a10> <8a10> 8928 +<8a11> <8a12> 18996 +<8a13> <8a13> 8682 +<8a14> <8a14> 18998 +<8a15> <8a15> 8930 +<8a16> <8a16> 8395 +<8a17> <8a17> 18999 +endcidrange + +100 begincidrange +<8a18> <8a18> 8056 +<8a19> <8a1a> 19000 +<8a1b> <8a1b> 7906 +<8a1c> <8a1c> 19002 +<8a1d> <8a1d> 8690 +<8a1e> <8a1e> 19003 +<8a1f> <8a1f> 8528 +<8a20> <8a22> 19004 +<8a23> <8a23> 8147 +<8a24> <8a24> 19007 +<8a25> <8a25> 8933 +<8a26> <8a29> 19008 +<8a2a> <8a2a> 7922 +<8a2b> <8a2c> 19012 +<8a2d> <8a2d> 8479 +<8a2e> <8a30> 19014 +<8a31> <8a31> 8669 +<8a32> <8a33> 19017 +<8a34> <8a34> 8532 +<8a35> <8a35> 19019 +<8a36> <8a36> 8935 +<8a37> <8a39> 19020 +<8a3a> <8a3a> 8834 +<8a3b> <8a3d> 19023 +<8a3e> <8a3e> 7518 +<8a3f> <8a40> 19026 +<8a41> <8a41> 8934 +<8a42> <8a45> 19028 +<8a46> <8a46> 8936 +<8a47> <8a47> 19032 +<8a48> <8a48> 6788 +<8a49> <8a4d> 19033 +<8a4e> <8a4e> 8932 +<8a4f> <8a4f> 19038 +<8a50> <8a50> 8810 +<8a51> <8a51> 19039 +<8a52> <8a52> 8939 +<8a53> <8a53> 19040 +<8a54> <8a54> 8937 +<8a55> <8a55> 8381 +<8a56> <8a57> 19041 +<8a58> <8a58> 8938 +<8a59> <8a5a> 19043 +<8a5b> <8a5b> 8893 +<8a5c> <8a5d> 19045 +<8a5e> <8a5e> 7838 +<8a5f> <8a60> 19047 +<8a61> <8a61> 8950 +<8a62> <8a62> 8679 +<8a63> <8a63> 8726 +<8a64> <8a65> 19049 +<8a66> <8a66> 8503 +<8a67> <8a68> 19051 +<8a69> <8a69> 8492 +<8a6a> <8a6a> 19053 +<8a6b> <8a6b> 7784 +<8a6c> <8a6c> 8946 +<8a6d> <8a6d> 7991 +<8a6e> <8a6e> 8947 +<8a6f> <8a6f> 19054 +<8a70> <8a70> 8943 +<8a71> <8a71> 8016 +<8a72> <8a72> 7952 +<8a73> <8a73> 8648 +<8a74> <8a74> 19055 +<8a75> <8a75> 8945 +<8a76> <8a78> 19056 +<8a79> <8a79> 4435 +<8a7a> <8a7b> 19059 +<8a7c> <8a7c> 8944 +<8a7d> <8a7e> 19061 +<8a7f> <8a7f> 8942 +<8a80> <8a83> 19063 +<8a84> <8a84> 8941 +<8a85> <8a85> 8862 +<8a86> <8a86> 8940 +<8a87> <8a87> 8162 +<8a88> <8a88> 19067 +<8a89> <8a89> 4323 +<8a8a> <8a8a> 3631 +<8a8b> <8a8c> 19068 +<8a8d> <8a8d> 8446 +<8a8e> <8a90> 19070 +<8a91> <8a92> 8953 +<8a93> <8a93> 3419 +<8a94> <8a94> 19073 +<8a95> <8a95> 7855 +<8a96> <8a97> 19074 +<8a98> <8a98> 8758 +<8a99> <8a99> 19076 +<8a9a> <8a9a> 8951 +<8a9b> <8a9d> 19077 +<8a9e> <8a9e> 8765 +<8a9f> <8a9f> 19080 +<8aa0> <8aa0> 7810 +<8aa1> <8aa1> 8118 +<8aa2> <8aa2> 19081 +<8aa3> <8aa3> 8612 +<8aa4> <8aa4> 8618 +<8aa5> <8aa5> 8952 +endcidrange + +100 begincidrange +<8aa6> <8aa6> 8529 +<8aa7> <8aa7> 19082 +<8aa8> <8aa8> 8032 +<8aa9> <8aab> 19083 +<8aac> <8aac> 8519 +<8aad> <8aaf> 19086 +<8ab0> <8ab0> 8517 +<8ab1> <8ab1> 19089 +<8ab2> <8ab2> 8156 +<8ab3> <8ab5> 19090 +<8ab6> <8ab6> 8961 +<8ab7> <8ab8> 19093 +<8ab9> <8ab9> 7925 +<8aba> <8abb> 19095 +<8abc> <8abc> 8728 +<8abd> <8abe> 19097 +<8abf> <8abf> 7878 +<8ac0> <8ac1> 19099 +<8ac2> <8ac2> 8960 +<8ac3> <8ac3> 19101 +<8ac4> <8ac4> 8884 +<8ac5> <8ac6> 19102 +<8ac7> <8ac7> 8553 +<8ac8> <8ac8> 19104 +<8ac9> <8ac9> 8957 +<8aca> <8aca> 19105 +<8acb> <8acb> 8426 +<8acc> <8acc> 19106 +<8acd> <8acd> 8948 +<8ace> <8ace> 19107 +<8acf> <8acf> 8955 +<8ad0> <8ad0> 19108 +<8ad1> <8ad1> 8956 +<8ad2> <8ad2> 8231 +<8ad3> <8ad5> 19109 +<8ad6> <8ad6> 8288 +<8ad7> <8ad7> 8959 +<8ad8> <8ada> 19112 +<8adb> <8adb> 8958 +<8adc> <8adc> 7879 +<8add> <8add> 19115 +<8ade> <8ade> 8972 +<8adf> <8ae1> 19116 +<8ae2> <8ae2> 8949 +<8ae3> <8ae3> 19119 +<8ae4> <8ae4> 8966 +<8ae5> <8ae5> 19120 +<8ae6> <8ae6> 8970 +<8ae7> <8ae7> 8659 +<8ae8> <8aea> 19121 +<8aeb> <8aeb> 8963 +<8aec> <8aec> 19124 +<8aed> <8aed> 8967 +<8aee> <8aee> 8971 +<8aef> <8af0> 19125 +<8af1> <8af1> 8031 +<8af2> <8af2> 19127 +<8af3> <8af3> 8969 +<8af4> <8af5> 19128 +<8af6> <8af6> 8962 +<8af7> <8af7> 7940 +<8af8> <8af8> 8861 +<8af9> <8af9> 19130 +<8afa> <8afa> 8699 +<8afb> <8afb> 19131 +<8afc> <8afc> 8968 +<8afd> <8afd> 19132 +<8afe> <8afe> 8364 +<8aff> <8aff> 19133 +<8b00> <8b00> 8334 +<8b01> <8b01> 8965 +<8b02> <8b02> 8599 +<8b03> <8b03> 19134 +<8b04> <8b04> 8561 +<8b05> <8b05> 8856 +<8b06> <8b06> 19135 +<8b07> <8b07> 5948 +<8b08> <8b09> 19136 +<8b0a> <8b0a> 8023 +<8b0b> <8b0d> 19138 +<8b0e> <8b0e> 8322 +<8b0f> <8b0f> 19141 +<8b10> <8b10> 8977 +<8b11> <8b13> 19142 +<8b14> <8b14> 8964 +<8b15> <8b15> 19145 +<8b16> <8b16> 8975 +<8b17> <8b17> 7733 +<8b18> <8b18> 19146 +<8b19> <8b19> 8401 +<8b1a> <8b1a> 8976 +<8b1b> <8b1b> 8099 +<8b1c> <8b1c> 19147 +<8b1d> <8b1d> 8662 +<8b1e> <8b20> 19148 +<8b21> <8b21> 8710 +<8b22> <8b25> 19151 +<8b26> <8b26> 7519 +<8b27> <8b27> 19155 +<8b28> <8b28> 8973 +endcidrange + +100 begincidrange +<8b29> <8b2a> 19156 +<8b2b> <8b2b> 8978 +<8b2c> <8b2c> 8333 +<8b2d> <8b2d> 8979 +<8b2e> <8b32> 19158 +<8b33> <8b33> 8931 +<8b34> <8b38> 19163 +<8b39> <8b39> 8122 +<8b3a> <8b3d> 19168 +<8b3e> <8b3e> 8312 +<8b3f> <8b48> 19172 +<8b49> <8b49> 8840 +<8b4a> <8b4d> 19182 +<8b4e> <8b4e> 8982 +<8b4f> <8b4f> 8043 +<8b50> <8b55> 19186 +<8b56> <8b56> 8980 +<8b57> <8b57> 19192 +<8b58> <8b58> 8496 +<8b59> <8b59> 8981 +<8b5a> <8b5a> 8552 +<8b5b> <8b5b> 19193 +<8b5c> <8b5c> 8388 +<8b5d> <8b65> 19194 +<8b66> <8b66> 2270 +<8b67> <8b6a> 19203 +<8b6b> <8b6b> 8984 +<8b6c> <8b6c> 3016 +<8b6d> <8b6e> 19207 +<8b6f> <8b6f> 8729 +<8b70> <8b70> 8727 +<8b71> <8b73> 19209 +<8b74> <8b74> 8405 +<8b75> <8b76> 19212 +<8b77> <8b77> 8010 +<8b78> <8b7c> 19214 +<8b7d> <8b7d> 8768 +<8b7e> <8b7f> 19219 +<8b80> <8b80> 7891 +<8b81> <8b89> 19221 +<8b8a> <8b8a> 7753 +<8b8b> <8b8d> 19230 +<8b8e> <8b8e> 9755 +<8b8f> <8b91> 19233 +<8b92> <8b92> 7789 +<8b93> <8b93> 8440 +<8b94> <8b94> 19236 +<8b95> <8b95> 8187 +<8b96> <8b96> 8985 +<8b97> <8b9b> 19237 +<8b9c> <8b9c> 8974 +<8b9d> <8b9d> 19242 +<8b9e> <8b9e> 8983 +<8b9f> <8b9f> 19243 +<8ba0> <8ba0> 4887 +<8ba1> <8ba1> 2105 +<8ba2> <8ba2> 1512 +<8ba3> <8ba3> 1719 +<8ba4> <8ba4> 3242 +<8ba5> <8ba5> 2072 +<8ba6> <8ba7> 4888 +<8ba8> <8ba8> 3625 +<8ba9> <8ba9> 3230 +<8baa> <8baa> 4890 +<8bab> <8bab> 3100 +<8bac> <8bac> 19244 +<8bad> <8bad> 4062 +<8bae> <8bae> 4208 +<8baf> <8baf> 4063 +<8bb0> <8bb0> 2106 +<8bb1> <8bb1> 19245 +<8bb2> <8bb2> 2179 +<8bb3> <8bb3> 2041 +<8bb4> <8bb5> 4891 +<8bb6> <8bb6> 4081 +<8bb7> <8bb7> 4893 +<8bb8> <8bb8> 4024 +<8bb9> <8bb9> 1582 +<8bba> <8bba> 2690 +<8bbb> <8bbb> 19246 +<8bbc> <8bbc> 3524 +<8bbd> <8bbd> 1674 +<8bbe> <8bbe> 3361 +<8bbf> <8bbf> 1632 +<8bc0> <8bc0> 2342 +<8bc1> <8bc1> 4515 +<8bc2> <8bc3> 4894 +<8bc4> <8bc4> 3039 +<8bc5> <8bc5> 4676 +<8bc6> <8bc6> 3405 +<8bc7> <8bc7> 19247 +<8bc8> <8bc8> 4426 +<8bc9> <8bc9> 3540 +<8bca> <8bca> 4496 +<8bcb> <8bcb> 4896 +<8bcc> <8bcc> 4574 +<8bcd> <8bcd> 1357 +<8bce> <8bce> 4898 +<8bcf> <8bcf> 4897 +<8bd0> <8bd0> 19248 +endcidrange + +100 begincidrange +<8bd1> <8bd1> 4210 +<8bd2> <8bd4> 4899 +<8bd5> <8bd5> 3435 +<8bd6> <8bd6> 4902 +<8bd7> <8bd7> 3394 +<8bd8> <8bd9> 4903 +<8bda> <8bda> 1268 +<8bdb> <8bdb> 4590 +<8bdc> <8bdc> 4905 +<8bdd> <8bdd> 1989 +<8bde> <8bde> 1423 +<8bdf> <8be0> 4906 +<8be1> <8be1> 1863 +<8be2> <8be2> 4056 +<8be3> <8be3> 4207 +<8be4> <8be4> 4908 +<8be5> <8be5> 1726 +<8be6> <8be6> 3927 +<8be7> <8be7> 1206 +<8be8> <8be9> 4909 +<8bea> <8bea> 19249 +<8beb> <8beb> 2236 +<8bec> <8bec> 3819 +<8bed> <8bed> 4308 +<8bee> <8bee> 4911 +<8bef> <8bef> 3842 +<8bf0> <8bf0> 4912 +<8bf1> <8bf1> 4282 +<8bf2> <8bf2> 2042 +<8bf3> <8bf3> 4913 +<8bf4> <8bf4> 3498 +<8bf5> <8bf5> 3525 +<8bf6> <8bf6> 4914 +<8bf7> <8bf7> 3176 +<8bf8> <8bf8> 4589 +<8bf9> <8bf9> 4915 +<8bfa> <8bfa> 2934 +<8bfb> <8bfb> 1536 +<8bfc> <8bfc> 4916 +<8bfd> <8bfd> 1641 +<8bfe> <8bfe> 2395 +<8bff> <8bff> 4917 +<8c00> <8c00> 4918 +<8c01> <8c01> 3490 +<8c02> <8c02> 4919 +<8c03> <8c03> 1496 +<8c04> <8c04> 4920 +<8c05> <8c05> 2571 +<8c06> <8c06> 4632 +<8c07> <8c07> 4921 +<8c08> <8c08> 3595 +<8c09> <8c09> 19250 +<8c0a> <8c0a> 4209 +<8c0b> <8c0b> 2836 +<8c0c> <8c0c> 4922 +<8c0d> <8c0d> 1502 +<8c0e> <8c0e> 2022 +<8c0f> <8c0f> 4923 +<8c10> <8c10> 3966 +<8c11> <8c12> 4924 +<8c13> <8c13> 3788 +<8c14> <8c16> 4926 +<8c17> <8c17> 1214 +<8c18> <8c18> 4931 +<8c19> <8c19> 4929 +<8c1a> <8c1a> 4113 +<8c1b> <8c1b> 4930 +<8c1c> <8c1c> 2778 +<8c1d> <8c1d> 4932 +<8c1e> <8c1e> 19251 +<8c1f> <8c21> 4933 +<8c22> <8c22> 3974 +<8c23> <8c23> 4140 +<8c24> <8c24> 1028 +<8c25> <8c25> 4936 +<8c26> <8c26> 3112 +<8c27> <8c27> 4937 +<8c28> <8c28> 2248 +<8c29> <8c29> 2726 +<8c2a> <8c2b> 4938 +<8c2c> <8c2c> 2818 +<8c2d> <8c2d> 3594 +<8c2e> <8c2f> 4940 +<8c30> <8c30> 2473 +<8c31> <8c31> 3062 +<8c32> <8c33> 4942 +<8c34> <8c34> 3121 +<8c35> <8c36> 4944 +<8c37> <8c37> 1825 +<8c38> <8c40> 19252 +<8c41> <8c41> 2050 +<8c42> <8c45> 19261 +<8c46> <8c46> 1528 +<8c47> <8c47> 7414 +<8c48> <8c48> 8392 +<8c49> <8c49> 7415 +<8c4a> <8c4b> 19265 +<8c4c> <8c4c> 3732 +<8c4d> <8c4f> 19267 +<8c50> <8c50> 7933 +endcidrange + +100 begincidrange +<8c51> <8c54> 19270 +<8c55> <8c55> 7445 +<8c56> <8c59> 19274 +<8c5a> <8c5a> 6544 +<8c5b> <8c60> 19278 +<8c61> <8c61> 3936 +<8c62> <8c62> 2004 +<8c63> <8c69> 19284 +<8c6a> <8c6a> 1911 +<8c6b> <8c6b> 4328 +<8c6c> <8c72> 19291 +<8c73> <8c73> 5597 +<8c74> <8c77> 19298 +<8c78> <8c78> 7504 +<8c79> <8c79> 1043 +<8c7a> <8c7a> 1209 +<8c7b> <8c81> 19302 +<8c82> <8c82> 7505 +<8c83> <8c84> 19309 +<8c85> <8c85> 7507 +<8c86> <8c88> 19311 +<8c89> <8c89> 1928 +<8c8a> <8c8a> 7506 +<8c8b> <8c8b> 19314 +<8c8c> <8c8c> 2743 +<8c8d> <8c93> 19315 +<8c94> <8c94> 7509 +<8c95> <8c97> 19322 +<8c98> <8c98> 7508 +<8c99> <8c9c> 19325 +<8c9d> <8c9d> 7739 +<8c9e> <8c9e> 8831 +<8c9f> <8c9f> 19329 +<8ca0> <8ca0> 7948 +<8ca1> <8ca1> 7769 +<8ca2> <8ca2> 7972 +<8ca3> <8ca6> 19330 +<8ca7> <8ca7> 8378 +<8ca8> <8ca8> 8037 +<8ca9> <8ca9> 7920 +<8caa> <8caa> 8548 +<8cab> <8cab> 7984 +<8cac> <8cac> 8801 +<8cad> <8cae> 19334 +<8caf> <8caf> 8866 +<8cb0> <8cb0> 9387 +<8cb1> <8cb1> 19336 +<8cb2> <8cb2> 9391 +<8cb3> <8cb3> 7912 +<8cb4> <8cb4> 7993 +<8cb5> <8cb5> 19337 +<8cb6> <8cb6> 7752 +<8cb7> <8cb7> 8304 +<8cb8> <8cb8> 7848 +<8cb9> <8cb9> 19338 +<8cba> <8cba> 9388 +<8cbb> <8cbb> 7927 +<8cbc> <8cbc> 8566 +<8cbd> <8cbd> 9389 +<8cbe> <8cbe> 19339 +<8cbf> <8cbf> 8315 +<8cc0> <8cc0> 8005 +<8cc1> <8cc1> 9386 +<8cc2> <8cc2> 8267 +<8cc3> <8cc3> 8239 +<8cc4> <8cc4> 8026 +<8cc5> <8cc5> 9392 +<8cc6> <8cc6> 19340 +<8cc7> <8cc7> 8887 +<8cc8> <8cc8> 8063 +<8cc9> <8cc9> 19341 +<8cca> <8cca> 8805 +<8ccb> <8cd0> 19342 +<8cd1> <8cd1> 9394 +<8cd2> <8cd2> 8475 +<8cd3> <8cd3> 7761 +<8cd4> <8cd4> 19348 +<8cd5> <8cd5> 9396 +<8cd6> <8cd9> 19349 +<8cda> <8cda> 9395 +<8cdb> <8cdb> 19353 +<8cdc> <8cdc> 7839 +<8cdd> <8cdd> 19354 +<8cde> <8cde> 8472 +<8cdf> <8cdf> 19355 +<8ce0> <8ce0> 8372 +<8ce1> <8ce1> 9135 +<8ce2> <8ce2> 8635 +<8ce3> <8ce3> 8306 +<8ce4> <8ce4> 8085 +<8ce5> <8ce5> 19356 +<8ce6> <8ce6> 7946 +<8ce7> <8ce7> 9398 +<8ce8> <8ce9> 19357 +<8cea> <8cea> 8849 +<8ceb> <8ceb> 9397 +<8cec> <8cec> 8824 +<8ced> <8ced> 7892 +<8cee> <8cf3> 19359 +<8cf4> <8cf4> 8179 +endcidrange + +100 begincidrange +<8cf5> <8cf9> 19365 +<8cfa> <8cfa> 8873 +<8cfb> <8cfb> 9399 +<8cfc> <8cfc> 7976 +<8cfd> <8cfd> 8457 +<8cfe> <8cfe> 8903 +<8cff> <8cff> 19370 +<8d00> <8d03> 19371 +<8d04> <8d04> 9390 +<8d05> <8d05> 8881 +<8d06> <8d07> 19375 +<8d08> <8d08> 8806 +<8d09> <8d09> 19377 +<8d0a> <8d0a> 8795 +<8d0b> <8d0b> 8900 +<8d0c> <8d0c> 19378 +<8d0d> <8d0d> 8469 +<8d0e> <8d0e> 19379 +<8d0f> <8d0f> 8746 +<8d10> <8d10> 9393 +<8d11> <8d15> 19380 +<8d16> <8d16> 8509 +<8d17> <8d1a> 19385 +<8d1b> <8d1b> 7957 +<8d1c> <8d1c> 8796 +<8d1d> <8d1d> 1053 +<8d1e> <8d1e> 4491 +<8d1f> <8d1f> 1717 +<8d20> <8d20> 19389 +<8d21> <8d21> 1802 +<8d22> <8d22> 1165 +<8d23> <8d23> 4403 +<8d24> <8d24> 3898 +<8d25> <8d25> 999 +<8d26> <8d26> 4460 +<8d27> <8d27> 2058 +<8d28> <8d28> 4553 +<8d29> <8d29> 1620 +<8d2a> <8d2a> 3587 +<8d2b> <8d2b> 3029 +<8d2c> <8d2c> 1098 +<8d2d> <8d2d> 1811 +<8d2e> <8d2e> 4603 +<8d2f> <8d2f> 1850 +<8d30> <8d30> 1598 +<8d31> <8d31> 2157 +<8d32> <8d33> 6444 +<8d34> <8d34> 3660 +<8d35> <8d35> 1868 +<8d36> <8d36> 6446 +<8d37> <8d37> 1406 +<8d38> <8d38> 2744 +<8d39> <8d39> 1646 +<8d3a> <8d3a> 1935 +<8d3b> <8d3b> 6447 +<8d3c> <8d3c> 4407 +<8d3d> <8d3d> 6448 +<8d3e> <8d3e> 2121 +<8d3f> <8d3f> 2036 +<8d40> <8d40> 6449 +<8d41> <8d41> 2599 +<8d42> <8d42> 2655 +<8d43> <8d43> 4386 +<8d44> <8d44> 4647 +<8d45> <8d46> 6450 +<8d47> <8d47> 6454 +<8d48> <8d49> 6452 +<8d4a> <8d4a> 3351 +<8d4b> <8d4b> 1710 +<8d4c> <8d4c> 1539 +<8d4d> <8d4d> 6455 +<8d4e> <8d4e> 3457 +<8d4f> <8d4f> 3334 +<8d50> <8d50> 1360 +<8d51> <8d52> 19390 +<8d53> <8d53> 5691 +<8d54> <8d54> 2979 +<8d55> <8d55> 6456 +<8d56> <8d56> 2464 +<8d57> <8d57> 19392 +<8d58> <8d58> 4629 +<8d59> <8d59> 6457 +<8d5a> <8d5a> 4617 +<8d5b> <8d5b> 3287 +<8d5c> <8d5c> 4745 +<8d5d> <8d5d> 4739 +<8d5e> <8d5e> 4385 +<8d5f> <8d5f> 19393 +<8d60> <8d60> 4412 +<8d61> <8d61> 3325 +<8d62> <8d62> 4243 +<8d63> <8d63> 1742 +<8d64> <8d64> 1285 +<8d65> <8d65> 19394 +<8d66> <8d66> 3355 +<8d67> <8d67> 7412 +<8d68> <8d6a> 19395 +<8d6b> <8d6b> 1932 +<8d6c> <8d6c> 19398 +<8d6d> <8d6d> 7413 +endcidrange + +100 begincidrange +<8d6e> <8d6f> 19399 +<8d70> <8d70> 4668 +<8d71> <8d72> 19401 +<8d73> <8d73> 7407 +<8d74> <8d74> 1707 +<8d75> <8d75> 4469 +<8d76> <8d76> 1738 +<8d77> <8d77> 3087 +<8d78> <8d80> 19403 +<8d81> <8d81> 1256 +<8d82> <8d83> 19412 +<8d84> <8d84> 7408 +<8d85> <8d85> 1233 +<8d86> <8d89> 19414 +<8d8a> <8d8a> 4352 +<8d8b> <8d8b> 3188 +<8d8c> <8d90> 19418 +<8d91> <8d91> 7410 +<8d92> <8d93> 19423 +<8d94> <8d94> 7409 +<8d95> <8d95> 7956 +<8d96> <8d98> 19425 +<8d99> <8d99> 8826 +<8d9a> <8d9e> 19428 +<8d9f> <8d9f> 3614 +<8da0> <8da2> 19433 +<8da3> <8da3> 3199 +<8da4> <8da7> 19436 +<8da8> <8da8> 8430 +<8da9> <8db0> 19440 +<8db1> <8db1> 7411 +<8db2> <8db2> 9720 +<8db3> <8db3> 4672 +<8db4> <8db4> 2944 +<8db5> <8db5> 7452 +<8db6> <8db7> 19448 +<8db8> <8db8> 7447 +<8db9> <8db9> 19450 +<8dba> <8dba> 7455 +<8dbb> <8dbb> 19451 +<8dbc> <8dbc> 7454 +<8dbd> <8dbd> 19452 +<8dbe> <8dbe> 4537 +<8dbf> <8dbf> 7453 +<8dc0> <8dc2> 19453 +<8dc3> <8dc3> 4353 +<8dc4> <8dc4> 7456 +<8dc5> <8dc5> 19456 +<8dc6> <8dc6> 7464 +<8dc7> <8dca> 19457 +<8dcb> <8dcb> 986 +<8dcc> <8dcc> 1497 +<8dcd> <8dcd> 19461 +<8dce> <8dcf> 7461 +<8dd0> <8dd0> 19462 +<8dd1> <8dd1> 2973 +<8dd2> <8dd5> 19463 +<8dd6> <8dd7> 7457 +<8dd8> <8dd9> 19467 +<8dda> <8dda> 7459 +<8ddb> <8ddb> 7463 +<8ddc> <8ddc> 19469 +<8ddd> <8ddd> 2319 +<8dde> <8dde> 7460 +<8ddf> <8ddf> 1781 +<8de0> <8de2> 19470 +<8de3> <8de3> 7468 +<8de4> <8de4> 7471 +<8de5> <8de7> 19473 +<8de8> <8de8> 2420 +<8de9> <8de9> 19476 +<8dea> <8dea> 1867 +<8deb> <8deb> 7448 +<8dec> <8dec> 7465 +<8ded> <8dee> 19477 +<8def> <8def> 2654 +<8df0> <8df2> 19479 +<8df3> <8df3> 3659 +<8df4> <8df4> 19482 +<8df5> <8df5> 2156 +<8df6> <8df6> 19483 +<8df7> <8df8> 7466 +<8df9> <8df9> 7469 +<8dfa> <8dfa> 1572 +<8dfb> <8dfb> 7470 +<8dfc> <8dfc> 19484 +<8dfd> <8dfd> 7473 +<8dfe> <8dff> 19485 +<8e00> <8e04> 19487 +<8e05> <8e05> 7449 +<8e06> <8e08> 19492 +<8e09> <8e09> 7472 +<8e0a> <8e0a> 4256 +<8e0b> <8e0b> 19495 +<8e0c> <8e0c> 1297 +<8e0d> <8e0e> 19496 +<8e0f> <8e0f> 3575 +<8e10> <8e10> 8084 +<8e11> <8e13> 19498 +<8e14> <8e14> 7474 +endcidrange + +100 begincidrange +<8e15> <8e1c> 19501 +<8e1d> <8e1d> 7475 +<8e1e> <8e1e> 2320 +<8e1f> <8e1f> 7476 +<8e20> <8e21> 19509 +<8e22> <8e22> 3634 +<8e23> <8e23> 7479 +<8e24> <8e28> 19511 +<8e29> <8e29> 1167 +<8e2a> <8e2a> 4662 +<8e2b> <8e2b> 19516 +<8e2c> <8e2c> 7477 +<8e2d> <8e2d> 19517 +<8e2e> <8e2e> 7478 +<8e2f> <8e2f> 7480 +<8e30> <8e30> 19518 +<8e31> <8e31> 7486 +<8e32> <8e33> 19519 +<8e34> <8e34> 8752 +<8e35> <8e35> 7484 +<8e36> <8e38> 19521 +<8e39> <8e39> 7483 +<8e3a> <8e3a> 7481 +<8e3b> <8e3c> 19524 +<8e3d> <8e3d> 7485 +<8e3e> <8e3f> 19526 +<8e40> <8e40> 7482 +<8e41> <8e42> 7488 +<8e43> <8e43> 19528 +<8e44> <8e44> 3638 +<8e45> <8e46> 19529 +<8e47> <8e47> 5947 +<8e48> <8e48> 1433 +<8e49> <8e49> 7487 +<8e4a> <8e4a> 7492 +<8e4b> <8e4b> 3574 +<8e4c> <8e4c> 9725 +<8e4d> <8e50> 19531 +<8e51> <8e52> 7490 +<8e53> <8e54> 19535 +<8e55> <8e55> 9728 +<8e56> <8e58> 19537 +<8e59> <8e59> 7450 +<8e5a> <8e62> 19540 +<8e63> <8e63> 9734 +<8e64> <8e65> 19549 +<8e66> <8e66> 1069 +<8e67> <8e68> 19551 +<8e69> <8e69> 7451 +<8e6a> <8e6b> 19553 +<8e6c> <8e6c> 1446 +<8e6d> <8e6d> 1195 +<8e6e> <8e6e> 19555 +<8e6f> <8e6f> 7496 +<8e70> <8e70> 7493 +<8e71> <8e71> 19556 +<8e72> <8e72> 1558 +<8e73> <8e73> 19557 +<8e74> <8e74> 7497 +<8e75> <8e75> 19558 +<8e76> <8e76> 7494 +<8e77> <8e79> 19559 +<8e7a> <8e7a> 9727 +<8e7b> <8e7b> 19562 +<8e7c> <8e7c> 7495 +<8e7d> <8e7e> 19563 +<8e7f> <8e7f> 1373 +<8e80> <8e80> 19565 +<8e81> <8e81> 4397 +<8e82> <8e84> 19566 +<8e85> <8e85> 7498 +<8e86> <8e86> 19569 +<8e87> <8e87> 1310 +<8e88> <8e88> 19570 +<8e89> <8e89> 9724 +<8e8a> <8e8a> 7820 +<8e8b> <8e8b> 9730 +<8e8c> <8e8c> 19571 +<8e8d> <8e8d> 8781 +<8e8e> <8e8e> 19572 +<8e8f> <8e8f> 7499 +<8e90> <8e90> 7501 +<8e91> <8e91> 9732 +<8e92> <8e92> 9726 +<8e93> <8e93> 9731 +<8e94> <8e94> 7500 +<8e95> <8e99> 19573 +<8e9a> <8e9a> 9729 +<8e9b> <8e9b> 19578 +<8e9c> <8e9c> 7502 +<8e9d> <8e9d> 19579 +<8e9e> <8e9e> 7503 +<8e9f> <8ea0> 19580 +<8ea1> <8ea1> 9733 +<8ea2> <8ea4> 19582 +<8ea5> <8ea5> 7843 +<8ea6> <8ea6> 9736 +<8ea7> <8ea9> 19585 +<8eaa> <8eaa> 9735 +<8eab> <8eab> 3366 +endcidrange + +100 begincidrange +<8eac> <8eac> 1795 +<8ead> <8eae> 19588 +<8eaf> <8eaf> 3192 +<8eb0> <8eb1> 19590 +<8eb2> <8eb2> 1570 +<8eb3> <8eb9> 19592 +<8eba> <8eba> 3612 +<8ebb> <8ebf> 19599 +<8ec0> <8ec0> 8432 +<8ec1> <8ec9> 19604 +<8eca> <8eca> 7803 +<8ecb> <8ecb> 8807 +<8ecc> <8ecc> 7990 +<8ecd> <8ecd> 8150 +<8ece> <8ece> 6392 +<8ecf> <8ed1> 19613 +<8ed2> <8ed2> 8672 +<8ed3> <8ed3> 19616 +<8ed4> <8ed4> 9356 +<8ed5> <8eda> 19617 +<8edb> <8edb> 9357 +<8edc> <8ede> 19623 +<8edf> <8edf> 8450 +<8ee0> <8ee3> 19626 +<8ee4> <8ee4> 9364 +<8ee5> <8eea> 19630 +<8eeb> <8eeb> 9363 +<8eec> <8ef1> 19636 +<8ef2> <8ef2> 9358 +<8ef3> <8ef7> 19642 +<8ef8> <8ef8> 8857 +<8ef9> <8ef9> 9361 +<8efa> <8efa> 9366 +<8efb> <8efb> 9359 +<8efc> <8efc> 9362 +<8efd> <8efd> 19647 +<8efe> <8efe> 9367 +<8eff> <8eff> 19648 +<8f00> <8f02> 19649 +<8f03> <8f03> 8113 +<8f04> <8f04> 19652 +<8f05> <8f05> 9370 +<8f06> <8f06> 19653 +<8f07> <8f07> 9369 +<8f08> <8f08> 19654 +<8f09> <8f09> 8792 +<8f0a> <8f0a> 9368 +<8f0b> <8f11> 19655 +<8f12> <8f12> 9371 +<8f13> <8f13> 19662 +<8f14> <8f14> 7945 +<8f15> <8f15> 8422 +<8f16> <8f1a> 19663 +<8f1b> <8f1b> 8230 +<8f1c> <8f1c> 9375 +<8f1d> <8f1d> 8025 +<8f1e> <8f1f> 9373 +<8f20> <8f24> 19668 +<8f25> <8f25> 7995 +<8f26> <8f26> 9372 +<8f27> <8f28> 19673 +<8f29> <8f29> 7738 +<8f2a> <8f2a> 8283 +<8f2b> <8f2e> 19675 +<8f2f> <8f2f> 8048 +<8f30> <8f32> 19679 +<8f33> <8f33> 9376 +<8f34> <8f37> 19682 +<8f38> <8f38> 8507 +<8f39> <8f3a> 19686 +<8f3b> <8f3b> 7943 +<8f3c> <8f3d> 19688 +<8f3e> <8f3e> 8816 +<8f3f> <8f3f> 8759 +<8f40> <8f41> 19690 +<8f42> <8f42> 9426 +<8f43> <8f43> 19692 +<8f44> <8f44> 8627 +<8f45> <8f45> 8773 +<8f46> <8f46> 9377 +<8f47> <8f48> 19693 +<8f49> <8f49> 8872 +<8f4a> <8f4c> 19695 +<8f4d> <8f4d> 8828 +<8f4e> <8f4e> 8112 +<8f4f> <8f53> 19698 +<8f54> <8f54> 9378 +<8f55> <8f5e> 19703 +<8f5f> <8f5f> 8006 +<8f60> <8f60> 19713 +<8f61> <8f61> 9088 +<8f62> <8f62> 9365 +<8f63> <8f63> 19714 +<8f64> <8f64> 9360 +<8f65> <8f65> 19715 +<8f66> <8f66> 1242 +<8f67> <8f67> 4417 +<8f68> <8f68> 1861 +<8f69> <8f69> 4036 +<8f6a> <8f6a> 19716 +endcidrange + +100 begincidrange +<8f6b> <8f6b> 6369 +<8f6c> <8f6c> 4615 +<8f6d> <8f6d> 6370 +<8f6e> <8f6e> 2685 +<8f6f> <8f6f> 3272 +<8f70> <8f70> 1947 +<8f71> <8f73> 6371 +<8f74> <8f74> 4576 +<8f75> <8f76> 6374 +<8f77> <8f77> 6377 +<8f78> <8f78> 6376 +<8f79> <8f7a> 6378 +<8f7b> <8f7b> 3166 +<8f7c> <8f7c> 6380 +<8f7d> <8f7d> 4379 +<8f7e> <8f7e> 6381 +<8f7f> <8f7f> 2207 +<8f80> <8f80> 19717 +<8f81> <8f82> 6382 +<8f83> <8f83> 2208 +<8f84> <8f84> 6384 +<8f85> <8f85> 1699 +<8f86> <8f86> 2567 +<8f87> <8f87> 6385 +<8f88> <8f88> 1051 +<8f89> <8f89> 2025 +<8f8a> <8f8a> 1870 +<8f8b> <8f8b> 6386 +<8f8c> <8f8c> 19718 +<8f8d> <8f8f> 6387 +<8f90> <8f90> 1685 +<8f91> <8f91> 2080 +<8f92> <8f92> 19719 +<8f93> <8f93> 3451 +<8f94> <8f94> 5492 +<8f95> <8f95> 4338 +<8f96> <8f96> 3882 +<8f97> <8f97> 4440 +<8f98> <8f98> 6390 +<8f99> <8f99> 4479 +<8f9a> <8f9a> 6391 +<8f9b> <8f9b> 3980 +<8f9c> <8f9c> 1813 +<8f9d> <8f9d> 19720 +<8f9e> <8f9e> 1354 +<8f9f> <8f9f> 1090 +<8fa0> <8fa2> 19721 +<8fa3> <8fa3> 2460 +<8fa4> <8fa5> 19724 +<8fa6> <8fa6> 7728 +<8fa7> <8fa7> 19726 +<8fa8> <8fa9> 1103 +<8faa> <8faa> 19727 +<8fab> <8fab> 1105 +<8fac> <8fac> 19728 +<8fad> <8fad> 7837 +<8fae> <8fae> 7755 +<8faf> <8faf> 7754 +<8fb0> <8fb0> 1250 +<8fb1> <8fb1> 3267 +<8fb2> <8fb2> 8362 +<8fb3> <8fb5> 19729 +<8fb6> <8fb6> 5949 +<8fb7> <8fb8> 19732 +<8fb9> <8fb9> 1096 +<8fba> <8fbc> 19734 +<8fbd> <8fbd> 2578 +<8fbe> <8fbe> 1394 +<8fbf> <8fc0> 19737 +<8fc1> <8fc1> 3109 +<8fc2> <8fc2> 4285 +<8fc3> <8fc3> 19739 +<8fc4> <8fc4> 3096 +<8fc5> <8fc5> 4065 +<8fc6> <8fc6> 19740 +<8fc7> <8fc7> 1878 +<8fc8> <8fc8> 2716 +<8fc9> <8fcd> 19741 +<8fce> <8fce> 4242 +<8fcf> <8fcf> 19746 +<8fd0> <8fd0> 4366 +<8fd1> <8fd1> 2253 +<8fd2> <8fd2> 19747 +<8fd3> <8fd3> 5950 +<8fd4> <8fd4> 1618 +<8fd5> <8fd5> 5951 +<8fd6> <8fd7> 19748 +<8fd8> <8fd8> 1998 +<8fd9> <8fd9> 4483 +<8fda> <8fda> 19750 +<8fdb> <8fdb> 2249 +<8fdc> <8fdc> 4345 +<8fdd> <8fdd> 3764 +<8fde> <8fde> 2549 +<8fdf> <8fdf> 1278 +<8fe0> <8fe1> 19751 +<8fe2> <8fe2> 3657 +<8fe3> <8fe3> 19753 +<8fe4> <8fe4> 5954 +<8fe5> <8fe5> 5952 +endcidrange + +100 begincidrange +<8fe6> <8fe6> 5956 +<8fe7> <8fe7> 19754 +<8fe8> <8fe8> 5958 +<8fe9> <8fe9> 5955 +<8fea> <8fea> 1456 +<8feb> <8feb> 3047 +<8fec> <8fec> 19755 +<8fed> <8fed> 1501 +<8fee> <8fee> 5953 +<8fef> <8fef> 19756 +<8ff0> <8ff0> 3469 +<8ff1> <8ff2> 19757 +<8ff3> <8ff3> 5957 +<8ff4> <8ff4> 9851 +<8ff5> <8ff6> 19759 +<8ff7> <8ff7> 2777 +<8ff8> <8ff8> 1070 +<8ff9> <8ff9> 2070 +<8ffa> <8ffc> 19761 +<8ffd> <8ffd> 4628 +<8ffe> <8fff> 19764 +<9000> <9000> 3708 +<9001> <9001> 3522 +<9002> <9002> 3425 +<9003> <9003> 3622 +<9004> <9004> 5960 +<9005> <9005> 5959 +<9006> <9006> 2889 +<9007> <9008> 19766 +<9009> <9009> 4042 +<900a> <900a> 4064 +<900b> <900b> 5961 +<900c> <900c> 19768 +<900d> <900d> 5964 +<900e> <900e> 19769 +<900f> <900f> 3689 +<9010> <9010> 4591 +<9011> <9011> 5963 +<9012> <9012> 1470 +<9013> <9013> 19770 +<9014> <9014> 3695 +<9015> <9015> 9202 +<9016> <9016> 5965 +<9017> <9017> 1529 +<9018> <9018> 19771 +<9019> <9019> 8830 +<901a> <901a> 3673 +<901b> <901b> 1853 +<901c> <901c> 19772 +<901d> <901d> 3420 +<901e> <901e> 1270 +<901f> <901f> 3534 +<9020> <9020> 4399 +<9021> <9021> 5966 +<9022> <9022> 1671 +<9023> <9023> 8217 +<9024> <9025> 19773 +<9026> <9026> 5962 +<9027> <902c> 19775 +<902d> <902d> 5969 +<902e> <902e> 1409 +<902f> <902f> 5970 +<9030> <9031> 19781 +<9032> <9032> 8123 +<9033> <9034> 19783 +<9035> <9036> 5967 +<9037> <9037> 19785 +<9038> <9038> 4196 +<9039> <903a> 19786 +<903b> <903b> 2694 +<903c> <903c> 1071 +<903d> <903d> 19788 +<903e> <903e> 4295 +<903f> <9040> 19789 +<9041> <9041> 1564 +<9042> <9042> 3553 +<9043> <9043> 19791 +<9044> <9044> 5971 +<9045> <9046> 19792 +<9047> <9047> 4315 +<9048> <904a> 19794 +<904b> <904b> 8787 +<904c> <904c> 19797 +<904d> <904d> 1106 +<904e> <904e> 7998 +<904f> <904f> 1587 +<9050> <9050> 5974 +<9051> <9052> 5972 +<9053> <9053> 1441 +<9054> <9054> 7846 +<9055> <9055> 8590 +<9056> <9056> 19798 +<9057> <9057> 4172 +<9058> <9058> 5976 +<9059> <905a> 19799 +<905b> <905b> 5978 +<905c> <905c> 8684 +<905d> <905d> 19801 +<905e> <905e> 7870 +<905f> <905f> 19802 +endcidrange + +100 begincidrange +<9060> <9060> 8778 +<9061> <9061> 19803 +<9062> <9062> 5977 +<9063> <9063> 3119 +<9064> <9064> 19804 +<9065> <9065> 4138 +<9066> <9067> 19805 +<9068> <9068> 5975 +<9069> <9069> 8499 +<906a> <906c> 19807 +<906d> <906d> 4389 +<906e> <906e> 4475 +<906f> <9071> 19810 +<9072> <9072> 7812 +<9073> <9073> 19813 +<9074> <9074> 5980 +<9075> <9075> 4686 +<9076> <9076> 19814 +<9077> <9077> 8399 +<9078> <9078> 8674 +<9079> <9079> 19815 +<907a> <907a> 8719 +<907b> <907b> 19816 +<907c> <907c> 8233 +<907d> <907d> 5981 +<907e> <907e> 19817 +<907f> <907f> 1093 +<9080> <9080> 4132 +<9081> <9081> 8307 +<9082> <9082> 5982 +<9083> <9083> 5984 +<9084> <9084> 8021 +<9085> <9086> 19818 +<9087> <9087> 9201 +<9088> <9088> 5983 +<9089> <9089> 19820 +<908a> <908a> 7750 +<908b> <908b> 5985 +<908c> <908e> 19821 +<908f> <908f> 8291 +<9090> <9090> 9203 +<9091> <9091> 4191 +<9092> <9092> 19824 +<9093> <9093> 1452 +<9094> <9094> 19825 +<9095> <9095> 6167 +<9096> <9096> 19826 +<9097> <9097> 4967 +<9098> <9098> 19827 +<9099> <9099> 4970 +<909a> <909a> 19828 +<909b> <909b> 4968 +<909c> <909c> 19829 +<909d> <909d> 4969 +<909e> <90a0> 19830 +<90a1> <90a1> 4972 +<90a2> <90a2> 3994 +<90a3> <90a3> 2858 +<90a4> <90a5> 19833 +<90a6> <90a6> 1017 +<90a7> <90a9> 19835 +<90aa> <90aa> 3963 +<90ab> <90ab> 19838 +<90ac> <90ac> 4971 +<90ad> <90ad> 19839 +<90ae> <90ae> 4271 +<90af> <90af> 1889 +<90b0> <90b0> 4978 +<90b1> <90b1> 3182 +<90b2> <90b2> 19840 +<90b3> <90b3> 4974 +<90b4> <90b4> 4973 +<90b5> <90b5> 3348 +<90b6> <90b6> 4975 +<90b7> <90b7> 19841 +<90b8> <90b8> 4977 +<90b9> <90b9> 4667 +<90ba> <90ba> 4976 +<90bb> <90bb> 2595 +<90bc> <90bd> 19842 +<90be> <90be> 4981 +<90bf> <90c0> 19844 +<90c1> <90c1> 4313 +<90c2> <90c3> 19846 +<90c4> <90c4> 4983 +<90c5> <90c5> 4980 +<90c6> <90c6> 19848 +<90c7> <90c7> 4984 +<90c8> <90c9> 19849 +<90ca> <90ca> 2189 +<90cb> <90cd> 19851 +<90ce> <90ce> 2484 +<90cf> <90cf> 4979 +<90d0> <90d0> 4982 +<90d1> <90d1> 4514 +<90d2> <90d2> 19854 +<90d3> <90d3> 4985 +<90d4> <90d6> 19855 +<90d7> <90d7> 4989 +<90d8> <90da> 19858 +endcidrange + +100 begincidrange +<90db> <90db> 4990 +<90dc> <90dc> 4988 +<90dd> <90dd> 1913 +<90de> <90de> 19861 +<90df> <90df> 8990 +<90e0> <90e0> 19862 +<90e1> <90e1> 2353 +<90e2> <90e2> 4987 +<90e3> <90e5> 19863 +<90e6> <90e6> 4986 +<90e7> <90e7> 4362 +<90e8> <90e8> 1158 +<90e9> <90ea> 19866 +<90eb> <90eb> 4991 +<90ec> <90ec> 19868 +<90ed> <90ed> 1874 +<90ee> <90ee> 19869 +<90ef> <90ef> 4992 +<90f0> <90f3> 19870 +<90f4> <90f4> 1248 +<90f5> <90f5> 8755 +<90f6> <90f7> 19874 +<90f8> <90f8> 1415 +<90f9> <90fc> 19876 +<90fd> <90fd> 1531 +<90fe> <90fe> 4993 +<90ff> <90ff> 19880 +<9100> <9101> 19881 +<9102> <9102> 1588 +<9103> <9103> 19883 +<9104> <9104> 4994 +<9105> <9105> 19884 +<9106> <9106> 8992 +<9107> <9108> 19885 +<9109> <9109> 8647 +<910a> <9111> 19887 +<9112> <9112> 8892 +<9113> <9113> 19895 +<9114> <9114> 8988 +<9115> <9115> 19896 +<9116> <9116> 8785 +<9117> <9118> 19897 +<9119> <9119> 1074 +<911a> <911d> 19899 +<911e> <911e> 4996 +<911f> <9121> 19903 +<9122> <9122> 4995 +<9123> <9123> 4997 +<9124> <9126> 19906 +<9127> <9127> 7867 +<9128> <912c> 19909 +<912d> <912d> 8839 +<912e> <912e> 19914 +<912f> <912f> 4999 +<9130> <9130> 8237 +<9131> <9131> 4998 +<9132> <9132> 7851 +<9133> <9133> 19915 +<9134> <9134> 8989 +<9135> <9135> 19916 +<9136> <9136> 8991 +<9137> <9138> 19917 +<9139> <9139> 5000 +<913a> <913a> 8987 +<913b> <9142> 19919 +<9143> <9143> 5001 +<9144> <9145> 19927 +<9146> <9146> 5002 +<9147> <9147> 19929 +<9148> <9148> 8993 +<9149> <9149> 4276 +<914a> <914a> 7416 +<914b> <914b> 3186 +<914c> <914c> 4640 +<914d> <914d> 2981 +<914e> <914f> 7418 +<9150> <9150> 7417 +<9151> <9151> 19930 +<9152> <9152> 2293 +<9153> <9156> 19931 +<9157> <9157> 4026 +<9158> <9159> 19935 +<915a> <915a> 1648 +<915b> <915c> 19937 +<915d> <915d> 4368 +<915e> <915e> 3581 +<915f> <9160> 19939 +<9161> <9161> 7422 +<9162> <9162> 7421 +<9163> <9163> 1887 +<9164> <9164> 7420 +<9165> <9165> 3531 +<9166> <9168> 19941 +<9169> <9169> 7424 +<916a> <916a> 2493 +<916b> <916b> 19944 +<916c> <916c> 1295 +<916d> <916d> 19945 +<916e> <916e> 3675 +<916f> <916f> 7425 +endcidrange + +100 begincidrange +<9170> <9170> 7423 +<9171> <9171> 2181 +<9172> <9172> 7428 +<9173> <9173> 19946 +<9174> <9174> 7429 +<9175> <9175> 2206 +<9176> <9176> 2749 +<9177> <9177> 2414 +<9178> <9178> 3542 +<9179> <9179> 7430 +<917a> <917c> 19947 +<917d> <917e> 7426 +<917f> <917f> 2899 +<9180> <9184> 19950 +<9185> <9185> 7432 +<9186> <9186> 19955 +<9187> <9187> 1343 +<9188> <9188> 19956 +<9189> <9189> 4682 +<918a> <918a> 19957 +<918b> <918b> 1370 +<918c> <918c> 7431 +<918d> <918d> 7434 +<918e> <918f> 19958 +<9190> <9190> 7433 +<9191> <9191> 7435 +<9192> <9192> 3996 +<9193> <9195> 19960 +<9196> <9196> 8789 +<9197> <9199> 19963 +<919a> <919a> 2774 +<919b> <919b> 3204 +<919c> <919c> 7823 +<919d> <91a1> 19966 +<91a2> <91a3> 7436 +<91a4> <91a9> 19971 +<91aa> <91aa> 7438 +<91ab> <91ab> 8716 +<91ac> <91ac> 8100 +<91ad> <91af> 7439 +<91b0> <91b3> 19977 +<91b4> <91b4> 7443 +<91b5> <91b5> 7442 +<91b6> <91b9> 19981 +<91ba> <91ba> 7444 +<91bb> <91bf> 19985 +<91c0> <91c0> 8347 +<91c1> <91c1> 8664 +<91c2> <91c2> 19990 +<91c3> <91c3> 9722 +<91c4> <91c4> 19991 +<91c5> <91c5> 9721 +<91c6> <91c6> 19992 +<91c7> <91c7> 1168 +<91c8> <91c8> 19993 +<91c9> <91c9> 4281 +<91ca> <91ca> 3428 +<91cb> <91cb> 8500 +<91cc> <91cc> 2522 +<91cd> <91cd> 4567 +<91ce> <91ce> 4151 +<91cf> <91cf> 2568 +<91d0> <91d0> 19994 +<91d1> <91d1> 2241 +<91d2> <91d4> 9459 +<91d5> <91d5> 9464 +<91d6> <91d6> 19995 +<91d7> <91d7> 9463 +<91d8> <91d8> 7880 +<91d9> <91d9> 9462 +<91da> <91db> 19996 +<91dc> <91dc> 1701 +<91dd> <91dd> 8832 +<91de> <91e2> 19998 +<91e3> <91e3> 7877 +<91e4> <91e4> 9467 +<91e5> <91e6> 20003 +<91e7> <91e7> 9466 +<91e8> <91e8> 20005 +<91e9> <91e9> 7917 +<91ea> <91f4> 20006 +<91f5> <91f5> 9469 +<91f6> <91f6> 20017 +<91f7> <91f7> 9465 +<91f8> <91f8> 20018 +<91f9> <91f9> 9470 +<91fa> <91fa> 8397 +<91fb> <91ff> 20019 +<9200> <9200> 9480 +<9201> <9201> 9476 +<9202> <9203> 20024 +<9204> <9204> 9478 +<9205> <9207> 20026 +<9208> <9208> 9471 +<9209> <9209> 8336 +<920a> <920c> 20029 +<920d> <920d> 7901 +<920e> <920e> 7973 +<920f> <920f> 20032 +<9210> <9210> 9475 +endcidrange + +100 begincidrange +<9211> <9211> 9474 +<9212> <9213> 20033 +<9214> <9214> 7802 +<9215> <9215> 8358 +<9216> <921d> 20035 +<921e> <921e> 8149 +<921f> <9222> 20043 +<9223> <9223> 7953 +<9224> <9224> 20047 +<9225> <9225> 9479 +<9226> <9226> 9472 +<9227> <9227> 9477 +<9228> <922d> 20048 +<922e> <922e> 9497 +<922f> <922f> 20054 +<9230> <9230> 9493 +<9231> <9232> 20055 +<9233> <9233> 9484 +<9234> <9234> 8241 +<9235> <9236> 20057 +<9237> <9237> 9483 +<9238> <9238> 9487 +<9239> <9239> 9498 +<923a> <923a> 9481 +<923b> <923c> 20059 +<923d> <923d> 9486 +<923e> <923e> 8756 +<923f> <923f> 9491 +<9240> <9240> 8064 +<9241> <9244> 20061 +<9245> <9245> 9473 +<9246> <9247> 20065 +<9248> <9248> 9495 +<9249> <9249> 9494 +<924a> <924c> 20067 +<924d> <924d> 9496 +<924e> <9250> 20070 +<9251> <9251> 7766 +<9252> <9254> 20073 +<9255> <9255> 9485 +<9256> <9256> 20076 +<9257> <9257> 8403 +<9258> <9259> 20077 +<925a> <925a> 8314 +<925b> <925b> 8398 +<925c> <925d> 20079 +<925e> <925e> 9488 +<925f> <9261> 20081 +<9262> <9262> 7765 +<9263> <9265> 20084 +<9266> <9266> 9482 +<9267> <926b> 20087 +<926c> <926d> 9489 +<926e> <9273> 20092 +<9274> <9274> 2155 +<9275> <9277> 20098 +<9278> <9278> 8106 +<9279> <9279> 20101 +<927a> <927a> 9502 +<927b> <927b> 7967 +<927c> <927e> 20102 +<927f> <927f> 9517 +<9280> <9280> 8733 +<9281> <9282> 20105 +<9283> <9283> 9522 +<9284> <9284> 20107 +<9285> <9285> 8571 +<9286> <928d> 20108 +<928e> <928e> 7552 +<928f> <9290> 20116 +<9291> <9291> 8623 +<9292> <9292> 20118 +<9293> <9293> 9516 +<9294> <9295> 20119 +<9296> <9296> 9512 +<9297> <9297> 20121 +<9298> <9298> 8332 +<9299> <9299> 20122 +<929a> <929a> 9519 +<929b> <929b> 20123 +<929c> <929c> 8636 +<929d> <929f> 20124 +<92a0> <92a0> 9501 +<92a1> <92a2> 20127 +<92a3> <92a3> 9525 +<92a4> <92a4> 20129 +<92a5> <92a5> 8717 +<92a6> <92a6> 9510 +<92a7> <92a7> 20130 +<92a8> <92a8> 9524 +<92a9> <92a9> 9514 +<92aa> <92aa> 9503 +<92ab> <92ab> 9521 +<92ac> <92ac> 9500 +<92ad> <92ad> 20131 +<92ae> <92ae> 7553 +<92af> <92b0> 20132 +<92b1> <92b1> 9509 +<92b2> <92b6> 20134 +<92b7> <92b7> 8653 +endcidrange + +100 begincidrange +<92b8> <92b8> 20139 +<92b9> <92b9> 8666 +<92ba> <92ba> 20140 +<92bb> <92bb> 8562 +<92bc> <92bc> 9534 +<92bd> <92c0> 20141 +<92c1> <92c1> 8271 +<92c2> <92c2> 20145 +<92c3> <92c3> 9539 +<92c4> <92c4> 20146 +<92c5> <92c5> 8663 +<92c6> <92c6> 20147 +<92c7> <92c7> 7740 +<92c8> <92c8> 7554 +<92c9> <92cb> 20148 +<92cc> <92cc> 9513 +<92cd> <92ce> 20151 +<92cf> <92cf> 9505 +<92d0> <92d1> 20153 +<92d2> <92d2> 7935 +<92d3> <92dc> 20155 +<92dd> <92dd> 9535 +<92de> <92de> 20165 +<92df> <92df> 9540 +<92e0> <92e2> 20166 +<92e3> <92e3> 9507 +<92e4> <92e4> 7824 +<92e5> <92e5> 9530 +<92e6> <92e6> 9541 +<92e7> <92e7> 20169 +<92e8> <92e8> 9533 +<92e9> <92e9> 20170 +<92ea> <92ea> 8385 +<92eb> <92ec> 20171 +<92ed> <92ed> 8451 +<92ee> <92ee> 9504 +<92ef> <92ef> 9532 +<92f0> <92f0> 9531 +<92f1> <92f1> 9528 +<92f2> <92f5> 20173 +<92f6> <92f6> 9536 +<92f7> <92f7> 20177 +<92f8> <92f8> 8141 +<92f9> <92fb> 20178 +<92fc> <92fc> 7960 +<92fd> <92ff> 20181 +<9300> <9300> 20184 +<9301> <9301> 9547 +<9302> <9305> 20185 +<9306> <9306> 9543 +<9307> <9308> 9551 +<9309> <930f> 20189 +<9310> <9310> 8880 +<9311> <9311> 20196 +<9312> <9312> 9542 +<9313> <9314> 20197 +<9315> <9315> 9548 +<9316> <9317> 20199 +<9318> <9318> 7834 +<9319> <9319> 9554 +<931a> <931a> 9520 +<931b> <931b> 9545 +<931c> <931e> 20201 +<931f> <931f> 9553 +<9320> <9320> 7882 +<9321> <9321> 20204 +<9322> <9322> 8402 +<9323> <9325> 20205 +<9326> <9326> 8120 +<9327> <9327> 20208 +<9328> <9328> 8313 +<9329> <932a> 20209 +<932b> <932b> 8619 +<932c> <932d> 20211 +<932e> <932e> 9549 +<932f> <932f> 7845 +<9330> <9331> 20213 +<9332> <9332> 8268 +<9333> <9333> 8320 +<9334> <9335> 20215 +<9336> <9336> 9837 +<9337> <9337> 20217 +<9338> <9338> 9527 +<9339> <933d> 20218 +<933e> <933e> 7555 +<933f> <933f> 20223 +<9340> <9340> 9546 +<9341> <9341> 8632 +<9342> <9342> 20224 +<9343> <9343> 9550 +<9344> <9345> 20225 +<9346> <9346> 9468 +<9347> <9347> 9556 +<9348> <934a> 20227 +<934b> <934b> 7996 +<934c> <934c> 20230 +<934d> <934d> 7893 +<934e> <9353> 20231 +<9354> <9354> 9558 +<9355> <9357> 20237 +endcidrange + +100 begincidrange +<9358> <9358> 8808 +<9359> <935a> 20240 +<935b> <935b> 7894 +<935c> <9363> 20242 +<9364> <9364> 9559 +<9365> <9365> 9555 +<9366> <9368> 20250 +<9369> <9369> 9544 +<936a> <936a> 7556 +<936b> <936b> 20253 +<936c> <936c> 8412 +<936d> <936f> 20254 +<9370> <9370> 9561 +<9371> <9374> 20257 +<9375> <9375> 8087 +<9376> <9376> 9557 +<9377> <9379> 20261 +<937a> <937a> 8829 +<937b> <937d> 20264 +<937e> <937e> 9598 +<937f> <9381> 20267 +<9382> <9382> 8316 +<9383> <9383> 20270 +<9384> <9384> 9562 +<9385> <9386> 20271 +<9387> <9387> 9566 +<9388> <9389> 20273 +<938a> <938a> 7732 +<938b> <938e> 20275 +<938f> <938f> 7558 +<9390> <9395> 20279 +<9396> <9396> 8542 +<9397> <9397> 20285 +<9398> <9398> 9568 +<9399> <93a1> 20286 +<93a2> <93a2> 8610 +<93a3> <93a3> 9044 +<93a4> <93a5> 20295 +<93a6> <93a6> 9571 +<93a7> <93a7> 9511 +<93a8> <93a8> 20297 +<93a9> <93a9> 9518 +<93aa> <93aa> 9560 +<93ab> <93ab> 20298 +<93ac> <93ac> 7963 +<93ad> <93ad> 20299 +<93ae> <93ae> 8835 +<93af> <93af> 20300 +<93b0> <93b0> 9572 +<93b1> <93b2> 20301 +<93b3> <93b3> 8352 +<93b4> <93b4> 20303 +<93b5> <93b5> 9573 +<93b6> <93b7> 20304 +<93b8> <93b8> 9569 +<93b9> <93be> 20306 +<93bf> <93bf> 9570 +<93c0> <93c2> 20312 +<93c3> <93c3> 9580 +<93c4> <93c6> 20315 +<93c7> <93c7> 9581 +<93c8> <93c8> 8224 +<93c9> <93c9> 20318 +<93ca> <93ca> 7557 +<93cb> <93cb> 20319 +<93cc> <93cc> 9567 +<93cd> <93cd> 9578 +<93ce> <93d0> 20320 +<93d1> <93d1> 9582 +<93d2> <93d5> 20323 +<93d6> <93d6> 7681 +<93d7> <93d7> 9529 +<93d8> <93d8> 9564 +<93d9> <93db> 20327 +<93dc> <93dd> 9576 +<93de> <93de> 9579 +<93df> <93df> 7791 +<93e0> <93e0> 20330 +<93e1> <93e1> 8132 +<93e2> <93e2> 9575 +<93e3> <93e3> 20331 +<93e4> <93e4> 9563 +<93e5> <93e7> 20332 +<93e8> <93e8> 9757 +<93e9> <93f4> 20335 +<93f5> <93f5> 9515 +<93f6> <93f6> 20347 +<93f7> <93f7> 9585 +<93f8> <93f8> 20348 +<93f9> <93f9> 9591 +<93fa> <93ff> 20349 +<9400> <9402> 20355 +<9403> <9403> 9506 +<9404> <940a> 20358 +<940b> <940b> 9523 +<940c> <940f> 20365 +<9410> <9410> 8234 +<9411> <9411> 20369 +<9412> <9412> 9526 +<9413> <9413> 9587 +endcidrange + +100 begincidrange +<9414> <9414> 9583 +<9415> <9417> 20370 +<9418> <9418> 8851 +<9419> <9419> 9592 +<941a> <941c> 20373 +<941d> <941d> 9584 +<941e> <941f> 20376 +<9420> <9420> 9589 +<9421> <9425> 20378 +<9426> <9427> 9537 +<9428> <9428> 9565 +<9429> <942d> 20383 +<942e> <942e> 8218 +<942f> <9431> 20388 +<9432> <9432> 9594 +<9433> <9433> 8198 +<9434> <9434> 20391 +<9435> <9435> 8567 +<9436> <9437> 20392 +<9438> <9438> 9499 +<9439> <9439> 20394 +<943a> <943a> 9508 +<943b> <943d> 20395 +<943e> <943e> 7559 +<943f> <943f> 9595 +<9440> <9443> 20398 +<9444> <9444> 8867 +<9445> <9449> 20402 +<944a> <944a> 9593 +<944b> <944b> 20407 +<944c> <944c> 9574 +<944d> <9451> 20408 +<9452> <9452> 8083 +<9453> <9453> 20413 +<9454> <9454> 9596 +<9455> <945f> 20414 +<9460> <9460> 9492 +<9461> <9462> 20425 +<9463> <9463> 9597 +<9464> <9464> 20427 +<9465> <9465> 9586 +<9466> <946a> 20428 +<946b> <946b> 7560 +<946c> <946c> 20433 +<946d> <946d> 9588 +<946e> <946f> 20434 +<9470> <9470> 8782 +<9471> <9471> 20436 +<9472> <9472> 8646 +<9473> <9476> 20437 +<9477> <9477> 8351 +<9478> <9478> 20441 +<9479> <9479> 9590 +<947a> <947b> 20442 +<947c> <947c> 8292 +<947d> <947d> 8895 +<947e> <947e> 9756 +<947f> <947f> 8798 +<9480> <9484> 20444 +<9485> <9487> 6798 +<9488> <9488> 4492 +<9489> <9489> 1507 +<948a> <948a> 6802 +<948b> <948b> 6801 +<948c> <948d> 6803 +<948e> <948e> 3106 +<948f> <9490> 6805 +<9491> <9491> 20449 +<9492> <9492> 1613 +<9493> <9493> 1495 +<9494> <9494> 6807 +<9495> <9495> 6809 +<9496> <9496> 20450 +<9497> <9497> 6808 +<9498> <9498> 20451 +<9499> <9499> 1729 +<949a> <949c> 6810 +<949d> <949d> 1562 +<949e> <949e> 1235 +<949f> <949f> 4562 +<94a0> <94a0> 2857 +<94a1> <94a1> 1054 +<94a2> <94a2> 1745 +<94a3> <94a4> 6813 +<94a5> <94a5> 4354 +<94a6> <94a6> 3154 +<94a7> <94a7> 2346 +<94a8> <94a8> 3816 +<94a9> <94a9> 1804 +<94aa> <94aa> 6816 +<94ab> <94ab> 6815 +<94ac> <94ac> 6818 +<94ad> <94ad> 6817 +<94ae> <94ae> 2918 +<94af> <94b0> 6819 +<94b1> <94b1> 3115 +<94b2> <94b2> 6821 +<94b3> <94b3> 3116 +<94b4> <94b4> 6822 +<94b5> <94b5> 1134 +endcidrange + +100 begincidrange +<94b6> <94ba> 6823 +<94bb> <94bb> 4679 +<94bc> <94bd> 6828 +<94be> <94be> 2123 +<94bf> <94bf> 6830 +<94c0> <94c0> 4272 +<94c1> <94c1> 3661 +<94c2> <94c2> 1139 +<94c3> <94c3> 2606 +<94c4> <94c4> 6831 +<94c5> <94c5> 3107 +<94c6> <94c6> 2738 +<94c7> <94c7> 20452 +<94c8> <94ce> 6832 +<94cf> <94cf> 20453 +<94d0> <94d2> 6839 +<94d3> <94d4> 20454 +<94d5> <94d7> 6842 +<94d8> <94d8> 6846 +<94d9> <94d9> 6845 +<94da> <94da> 20456 +<94db> <94db> 6847 +<94dc> <94dc> 3678 +<94dd> <94dd> 2664 +<94de> <94e0> 6848 +<94e1> <94e1> 4418 +<94e2> <94e2> 6851 +<94e3> <94e3> 3872 +<94e4> <94e5> 6852 +<94e6> <94e6> 20457 +<94e7> <94e8> 6854 +<94e9> <94e9> 6857 +<94ea> <94ea> 6856 +<94eb> <94eb> 6858 +<94ec> <94ec> 1776 +<94ed> <94ed> 2815 +<94ee> <94ef> 6859 +<94f0> <94f0> 2195 +<94f1> <94f1> 4166 +<94f2> <94f2> 1216 +<94f3> <94f5> 6861 +<94f6> <94f6> 4223 +<94f7> <94f7> 6864 +<94f8> <94f8> 4604 +<94f9> <94f9> 6865 +<94fa> <94fa> 3051 +<94fb> <94fb> 20458 +<94fc> <94fd> 6866 +<94fe> <94fe> 2557 +<94ff> <94ff> 6868 +<9500> <9500> 3943 +<9501> <9501> 3565 +<9502> <9502> 6870 +<9503> <9503> 6869 +<9504> <9504> 1311 +<9505> <9505> 1873 +<9506> <9507> 6871 +<9508> <9508> 4013 +<9509> <950a> 6873 +<950b> <950b> 1667 +<950c> <950c> 3978 +<950d> <950f> 6875 +<9510> <9510> 3276 +<9511> <9511> 3635 +<9512> <9516> 6878 +<9517> <9517> 4481 +<9518> <9518> 6883 +<9519> <9519> 1392 +<951a> <951a> 2735 +<951b> <951b> 6884 +<951c> <951c> 20459 +<951d> <951f> 6885 +<9520> <9520> 20460 +<9521> <9521> 3852 +<9522> <9522> 6888 +<9523> <9523> 2695 +<9524> <9524> 1339 +<9525> <9525> 4627 +<9526> <9526> 2246 +<9527> <9527> 20461 +<9528> <9528> 3892 +<9529> <9529> 6891 +<952a> <952b> 6889 +<952c> <952c> 6892 +<952d> <952d> 1510 +<952e> <952e> 2159 +<952f> <952f> 2321 +<9530> <9530> 2769 +<9531> <9532> 6893 +<9533> <9533> 20462 +<9534> <9534> 6895 +<9535> <9535> 6903 +<9536> <9538> 6896 +<9539> <9539> 3135 +<953a> <953a> 6937 +<953b> <953b> 1548 +<953c> <953c> 6899 +<953d> <953d> 20463 +<953e> <953f> 6900 +<9540> <9540> 1541 +endcidrange + +100 begincidrange +<9541> <9541> 2755 +<9542> <9542> 6902 +<9543> <9543> 20464 +<9544> <9546> 6904 +<9547> <9547> 4499 +<9548> <9548> 20465 +<9549> <9549> 6907 +<954a> <954a> 2906 +<954b> <954b> 20466 +<954c> <954c> 6908 +<954d> <954d> 2907 +<954e> <954f> 6909 +<9550> <9550> 1759 +<9551> <9551> 1026 +<9552> <9554> 6911 +<9555> <9555> 20467 +<9556> <9559> 6914 +<955a> <955a> 20468 +<955b> <955b> 6918 +<955c> <955c> 2276 +<955d> <955d> 6921 +<955e> <955f> 6919 +<9560> <9560> 20469 +<9561> <9562> 6922 +<9563> <9563> 2582 +<9564> <956c> 6924 +<956d> <956d> 2499 +<956e> <956e> 20470 +<956f> <956f> 6933 +<9570> <9570> 2550 +<9571> <9573> 6934 +<9574> <9575> 20471 +<9576> <9576> 3919 +<9577> <9577> 7797 +<9578> <957e> 20473 +<957f> <957f> 1225 +<9580> <9580> 8317 +<9581> <9581> 20480 +<9582> <9582> 9151 +<9583> <9583> 8467 +<9584> <9585> 20481 +<9586> <9586> 9152 +<9587> <9588> 20483 +<9589> <9589> 7749 +<958a> <958a> 20485 +<958b> <958b> 8152 +<958c> <958c> 9156 +<958d> <958d> 20486 +<958e> <958e> 9154 +<958f> <958f> 8452 +<9590> <9590> 20487 +<9591> <9591> 8637 +<9592> <9592> 20488 +<9593> <9593> 8071 +<9594> <9594> 9155 +<9595> <9597> 20489 +<9598> <9598> 8809 +<9599> <95a0> 20492 +<95a1> <95a1> 8003 +<95a2> <95a2> 20500 +<95a3> <95a3> 7966 +<95a4> <95a4> 9849 +<95a5> <95a5> 7915 +<95a6> <95a7> 20501 +<95a8> <95a8> 7989 +<95a9> <95a9> 8330 +<95aa> <95aa> 20503 +<95ab> <95ab> 9159 +<95ac> <95ac> 9161 +<95ad> <95ad> 9158 +<95ae> <95b1> 20504 +<95b2> <95b2> 8783 +<95b3> <95b5> 20508 +<95b6> <95b6> 9163 +<95b7> <95b8> 20511 +<95b9> <95b9> 8691 +<95ba> <95ba> 20513 +<95bb> <95bb> 8695 +<95bc> <95bc> 9167 +<95bd> <95bd> 9166 +<95be> <95be> 9162 +<95bf> <95bf> 9165 +<95c0> <95c2> 20514 +<95c3> <95c3> 9168 +<95c4> <95c5> 20517 +<95c6> <95c6> 9836 +<95c7> <95c7> 20519 +<95c8> <95c8> 9153 +<95c9> <95c9> 20520 +<95ca> <95ca> 8174 +<95cb> <95cb> 9169 +<95cc> <95cc> 8184 +<95cd> <95cf> 20521 +<95d0> <95d0> 9171 +<95d1> <95d3> 20524 +<95d4> <95d4> 9170 +<95d5> <95d5> 9172 +<95d6> <95d6> 7832 +<95d7> <95db> 20527 +<95dc> <95dc> 7980 +endcidrange + +100 begincidrange +<95dd> <95dd> 20532 +<95de> <95de> 9173 +<95df> <95e0> 20533 +<95e1> <95e1> 7793 +<95e2> <95e2> 9873 +<95e3> <95e4> 20535 +<95e5> <95e5> 9157 +<95e6> <95e7> 20537 +<95e8> <95e8> 2762 +<95e9> <95e9> 5765 +<95ea> <95ea> 3322 +<95eb> <95eb> 5766 +<95ec> <95ec> 20539 +<95ed> <95ed> 1086 +<95ee> <95ee> 3801 +<95ef> <95ef> 1334 +<95f0> <95f0> 3277 +<95f1> <95f1> 5767 +<95f2> <95f2> 3901 +<95f3> <95f3> 5768 +<95f4> <95f4> 2135 +<95f5> <95f6> 5769 +<95f7> <95f7> 2763 +<95f8> <95f8> 4419 +<95f9> <95f9> 2873 +<95fa> <95fa> 1860 +<95fb> <95fb> 3796 +<95fc> <95fc> 5771 +<95fd> <95fd> 2811 +<95fe> <95fe> 5772 +<95ff> <95ff> 20540 +<9600> <9600> 1604 +<9601> <9601> 1774 +<9602> <9602> 1929 +<9603> <9604> 5773 +<9605> <9605> 4359 +<9606> <9606> 5775 +<9607> <9607> 20541 +<9608> <9608> 5776 +<9609> <9609> 4084 +<960a> <960d> 5777 +<960e> <960e> 4095 +<960f> <960f> 5781 +<9610> <9610> 1218 +<9611> <9611> 2470 +<9612> <9612> 5782 +<9613> <9613> 20542 +<9614> <9614> 2454 +<9615> <9617> 5783 +<9618> <9618> 20543 +<9619> <961a> 5786 +<961b> <961b> 20544 +<961c> <961c> 1714 +<961d> <961d> 4948 +<961e> <961e> 20545 +<961f> <961f> 1554 +<9620> <9620> 20546 +<9621> <9621> 4950 +<9622> <9622> 4949 +<9623> <9629> 20547 +<962a> <962a> 4952 +<962b> <962d> 20554 +<962e> <962e> 3273 +<962f> <9630> 20557 +<9631> <9631> 4951 +<9632> <9632> 1629 +<9633> <9633> 4125 +<9634> <9634> 4220 +<9635> <9635> 4500 +<9636> <9636> 2216 +<9637> <963a> 20559 +<963b> <963b> 4677 +<963c> <963c> 4954 +<963d> <963d> 4953 +<963e> <963e> 20563 +<963f> <963f> 941 +<9640> <9640> 3716 +<9641> <9641> 20564 +<9642> <9642> 4955 +<9643> <9643> 20565 +<9644> <9644> 1720 +<9645> <9645> 2109 +<9646> <9646> 2660 +<9647> <9647> 2635 +<9648> <9648> 1255 +<9649> <9649> 4956 +<964a> <964a> 20566 +<964b> <964b> 2641 +<964c> <964c> 2835 +<964d> <964d> 2182 +<964e> <964f> 20567 +<9650> <9650> 3915 +<9651> <9653> 20569 +<9654> <9654> 4957 +<9655> <9655> 3323 +<9656> <9657> 20572 +<9658> <9658> 8986 +<9659> <965a> 20574 +<965b> <965b> 1094 +<965c> <965c> 20576 +endcidrange + +100 begincidrange +<965d> <965d> 8468 +<965e> <965e> 20577 +<965f> <965f> 4958 +<9660> <9660> 20578 +<9661> <9661> 1527 +<9662> <9662> 4349 +<9663> <9663> 8836 +<9664> <9664> 1314 +<9665> <9666> 20579 +<9667> <9667> 4959 +<9668> <9668> 4364 +<9669> <9669> 3906 +<966a> <966a> 2980 +<966b> <966b> 20581 +<966c> <966c> 4960 +<966d> <966f> 20582 +<9670> <9670> 8732 +<9671> <9671> 20585 +<9672> <9672> 4961 +<9673> <9673> 7806 +<9674> <9674> 4962 +<9675> <9675> 2611 +<9676> <9676> 3624 +<9677> <9677> 3914 +<9678> <9678> 8269 +<9679> <967c> 20586 +<967d> <967d> 8705 +<967e> <9684> 20590 +<9685> <9685> 4300 +<9686> <9686> 2632 +<9687> <9687> 20597 +<9688> <9688> 4963 +<9689> <9689> 20598 +<968a> <968a> 7897 +<968b> <968b> 3546 +<968c> <968c> 20599 +<968d> <968d> 4964 +<968e> <968e> 8114 +<968f> <968f> 3547 +<9690> <9690> 4229 +<9691> <9693> 20600 +<9694> <9694> 1775 +<9695> <9695> 8786 +<9696> <9696> 20603 +<9697> <9697> 4965 +<9698> <9698> 954 +<9699> <9699> 3875 +<969a> <969a> 20604 +<969b> <969b> 8057 +<969c> <969c> 4464 +<969d> <96a6> 20605 +<96a7> <96a7> 3554 +<96a8> <96a8> 8535 +<96a9> <96a9> 20615 +<96aa> <96aa> 8639 +<96ab> <96af> 20616 +<96b0> <96b0> 4966 +<96b1> <96b1> 8735 +<96b2> <96b2> 20621 +<96b3> <96b3> 5764 +<96b4> <96b4> 8253 +<96b5> <96b5> 20622 +<96b6> <96b6> 2542 +<96b7> <96b7> 20623 +<96b8> <96b8> 8213 +<96b9> <96b9> 7545 +<96ba> <96ba> 20624 +<96bb> <96bb> 9893 +<96bc> <96bd> 7546 +<96be> <96be> 2868 +<96bf> <96bf> 20625 +<96c0> <96c0> 3219 +<96c1> <96c1> 4108 +<96c2> <96c3> 20626 +<96c4> <96c4> 4006 +<96c5> <96c5> 4078 +<96c6> <96c6> 2082 +<96c7> <96c7> 1830 +<96c8> <96c8> 20628 +<96c9> <96c9> 6940 +<96ca> <96cb> 20629 +<96cc> <96cc> 1353 +<96cd> <96cd> 4255 +<96ce> <96ce> 7548 +<96cf> <96cf> 1312 +<96d0> <96d1> 20631 +<96d2> <96d2> 7549 +<96d3> <96d4> 20633 +<96d5> <96d5> 1490 +<96d6> <96d6> 8534 +<96d7> <96d8> 20635 +<96d9> <96d9> 8516 +<96da> <96da> 20637 +<96db> <96db> 7825 +<96dc> <96dc> 8791 +<96dd> <96df> 20638 +<96e0> <96e0> 7551 +<96e1> <96e1> 20641 +<96e2> <96e2> 8202 +<96e3> <96e3> 8338 +endcidrange + +100 begincidrange +<96e4> <96e7> 20642 +<96e8> <96e8> 4303 +<96e9> <96e9> 7521 +<96ea> <96ea> 4050 +<96eb> <96ee> 20646 +<96ef> <96ef> 7523 +<96f0> <96f1> 20650 +<96f2> <96f2> 8784 +<96f3> <96f3> 7522 +<96f4> <96f5> 20652 +<96f6> <96f6> 2604 +<96f7> <96f7> 2498 +<96f8> <96f8> 20654 +<96f9> <96f9> 1035 +<96fa> <96fa> 20655 +<96fb> <96fb> 7875 +<96fc> <96fd> 20656 +<96fe> <96fe> 3836 +<96ff> <96ff> 20658 +<9700> <9700> 4019 +<9701> <9701> 7525 +<9702> <9703> 20659 +<9704> <9704> 3939 +<9705> <9705> 20661 +<9706> <9706> 7524 +<9707> <9707> 4497 +<9708> <9708> 7526 +<9709> <9709> 2750 +<970a> <970c> 20662 +<970d> <970d> 2057 +<970e> <970e> 7528 +<970f> <970f> 7527 +<9710> <9712> 20665 +<9713> <9713> 2881 +<9714> <9715> 20668 +<9716> <9716> 2593 +<9717> <971b> 20670 +<971c> <971c> 3487 +<971d> <971d> 20675 +<971e> <971e> 3881 +<971f> <9726> 20676 +<9727> <9727> 8616 +<9728> <9729> 20684 +<972a> <972a> 7529 +<972b> <972c> 20686 +<972d> <972d> 7530 +<972e> <972f> 20688 +<9730> <9730> 7531 +<9731> <9731> 20690 +<9732> <9732> 2653 +<9733> <9737> 20691 +<9738> <9738> 991 +<9739> <9739> 3002 +<973a> <973c> 20696 +<973d> <973d> 9741 +<973e> <973e> 7532 +<973f> <9741> 20699 +<9742> <9742> 9740 +<9743> <9743> 20702 +<9744> <9744> 9742 +<9745> <9747> 20703 +<9748> <9748> 8242 +<9749> <9751> 20706 +<9752> <9752> 3165 +<9753> <9753> 7520 +<9754> <9755> 20715 +<9756> <9756> 2279 +<9757> <9758> 20717 +<9759> <9759> 2273 +<975a> <975a> 9739 +<975b> <975b> 1478 +<975c> <975d> 20719 +<975e> <975e> 1636 +<975f> <975f> 20721 +<9760> <9760> 2380 +<9761> <9761> 2775 +<9762> <9762> 2795 +<9763> <9764> 20722 +<9765> <9765> 4738 +<9766> <9767> 20724 +<9768> <9768> 8899 +<9769> <9769> 1770 +<976a> <9772> 20726 +<9773> <9773> 2250 +<9774> <9774> 4046 +<9775> <9775> 20735 +<9776> <9776> 987 +<9777> <977b> 20736 +<977c> <977c> 7624 +<977d> <9784> 20741 +<9785> <9785> 7625 +<9786> <978a> 20749 +<978b> <978b> 3959 +<978c> <978c> 20754 +<978d> <978d> 955 +<978e> <978e> 20755 +<978f> <978f> 7971 +<9790> <9790> 20756 +<9791> <9792> 7626 +<9793> <9793> 20757 +endcidrange + +100 begincidrange +<9794> <9794> 7628 +<9795> <9797> 20758 +<9798> <9798> 3143 +<9799> <979f> 20761 +<97a0> <97a0> 2302 +<97a1> <97a2> 20768 +<97a3> <97a3> 7631 +<97a4> <97a5> 20770 +<97a6> <97a6> 9877 +<97a7> <97aa> 20772 +<97ab> <97ab> 7630 +<97ac> <97ac> 20776 +<97ad> <97ad> 1095 +<97ae> <97ae> 20777 +<97af> <97af> 7629 +<97b0> <97b1> 20778 +<97b2> <97b2> 7632 +<97b3> <97b3> 20780 +<97b4> <97b4> 7633 +<97b5> <97bc> 20781 +<97bd> <97bd> 9822 +<97be> <97c2> 20789 +<97c3> <97c3> 9821 +<97c4> <97c5> 20794 +<97c6> <97c6> 9874 +<97c7> <97c8> 20796 +<97c9> <97c9> 9823 +<97ca> <97ca> 20798 +<97cb> <97cb> 8589 +<97cc> <97cc> 8445 +<97cd> <97d2> 20799 +<97d3> <97d3> 8000 +<97d4> <97d8> 20805 +<97d9> <97d9> 9317 +<97da> <97db> 20810 +<97dc> <97dc> 9319 +<97dd> <97dd> 20812 +<97de> <97de> 9318 +<97df> <97e5> 20813 +<97e6> <97e6> 3763 +<97e7> <97e7> 3240 +<97e8> <97e8> 20820 +<97e9> <97e9> 1890 +<97ea> <97ec> 6222 +<97ed> <97ed> 2289 +<97ee> <97f2> 20821 +<97f3> <97f3> 4219 +<97f4> <97f4> 20826 +<97f5> <97f5> 4370 +<97f6> <97f6> 3345 +<97f7> <97fe> 20827 +<97ff> <97ff> 8649 +<9800> <9800> 20835 +<9801> <9801> 8713 +<9802> <9802> 7881 +<9803> <9803> 8425 +<9804> <9804> 20836 +<9805> <9805> 8650 +<9806> <9806> 8518 +<9807> <9807> 9669 +<9808> <9808> 8668 +<9809> <9809> 20837 +<980a> <980a> 9310 +<980b> <980b> 20838 +<980c> <980c> 8527 +<980d> <980d> 20839 +<980e> <980f> 9670 +<9810> <9810> 8769 +<9811> <9811> 8586 +<9812> <9812> 7727 +<9813> <9813> 7900 +<9814> <9816> 20840 +<9817> <9817> 8383 +<9818> <9818> 8244 +<9819> <981b> 20843 +<981c> <981c> 9673 +<981d> <9820> 20846 +<9821> <9821> 9672 +<9822> <9823> 20850 +<9824> <9824> 8718 +<9825> <9825> 20852 +<9826> <9826> 9675 +<9827> <982c> 20853 +<982d> <982d> 8573 +<982e> <982f> 20859 +<9830> <9830> 8062 +<9831> <9836> 20861 +<9837> <9837> 9676 +<9838> <9838> 8131 +<9839> <983a> 20867 +<983b> <983b> 8377 +<983c> <983c> 20869 +<983d> <983d> 8577 +<983e> <9845> 20870 +<9846> <9846> 8154 +<9847> <984b> 20878 +<984c> <984c> 8563 +<984d> <984d> 7905 +<984e> <984e> 9677 +<984f> <9852> 20883 +endcidrange + +100 begincidrange +<9853> <9853> 9678 +<9854> <9854> 8694 +<9855> <9857> 20887 +<9858> <9858> 8779 +<9859> <9859> 9681 +<985a> <985a> 20890 +<985b> <985b> 7872 +<985c> <985d> 20891 +<985e> <985e> 8200 +<985f> <9861> 20893 +<9862> <9862> 9680 +<9863> <9864> 20896 +<9865> <9865> 9682 +<9866> <9866> 20898 +<9867> <9867> 7978 +<9868> <986a> 20899 +<986b> <986b> 7794 +<986c> <986c> 9683 +<986d> <986e> 20902 +<986f> <986f> 8638 +<9870> <9870> 9684 +<9871> <9871> 8260 +<9872> <9872> 20904 +<9873> <9873> 9679 +<9874> <9874> 8435 +<9875> <9875> 4154 +<9876> <9876> 1508 +<9877> <9877> 3175 +<9878> <9878> 7136 +<9879> <9879> 3931 +<987a> <987a> 3496 +<987b> <987b> 4022 +<987c> <987c> 6183 +<987d> <987d> 3736 +<987e> <987e> 1828 +<987f> <987f> 1560 +<9880> <9880> 7137 +<9881> <9881> 1007 +<9882> <9882> 3521 +<9883> <9883> 7138 +<9884> <9884> 4327 +<9885> <9885> 2644 +<9886> <9886> 2613 +<9887> <9887> 3043 +<9888> <9888> 2272 +<9889> <9889> 7139 +<988a> <988a> 2120 +<988b> <988b> 20905 +<988c> <988d> 7140 +<988e> <988e> 20906 +<988f> <988f> 7142 +<9890> <9890> 4170 +<9891> <9891> 3028 +<9892> <9892> 20907 +<9893> <9893> 3704 +<9894> <9894> 7143 +<9895> <9895> 20908 +<9896> <9896> 4246 +<9897> <9897> 2386 +<9898> <9898> 3637 +<9899> <9899> 20909 +<989a> <989b> 7144 +<989c> <989c> 4094 +<989d> <989d> 1581 +<989e> <989f> 7146 +<98a0> <98a0> 1472 +<98a1> <98a2> 7148 +<98a3> <98a3> 20910 +<98a4> <98a4> 1219 +<98a5> <98a6> 7150 +<98a7> <98a7> 3202 +<98a8> <98a8> 7936 +<98a9> <98ad> 20911 +<98ae> <98af> 9420 +<98b0> <98b0> 20916 +<98b1> <98b1> 9880 +<98b2> <98b2> 20917 +<98b3> <98b3> 9848 +<98b4> <98b5> 20918 +<98b6> <98b6> 9422 +<98b7> <98bb> 20920 +<98bc> <98bc> 9423 +<98bd> <98c3> 20925 +<98c4> <98c4> 8376 +<98c5> <98c5> 20932 +<98c6> <98c6> 9424 +<98c7> <98c7> 20933 +<98c8> <98c8> 9425 +<98c9> <98cd> 20934 +<98ce> <98ce> 1668 +<98cf> <98d0> 20939 +<98d1> <98d3> 6583 +<98d4> <98d4> 20941 +<98d5> <98d5> 6586 +<98d6> <98d7> 20942 +<98d8> <98d8> 3021 +<98d9> <98da> 6587 +<98db> <98db> 7924 +<98dc> <98dd> 20944 +<98de> <98de> 1638 +endcidrange + +100 begincidrange +<98df> <98df> 3402 +<98e0> <98e0> 9115 +<98e1> <98e1> 20946 +<98e2> <98e2> 9854 +<98e3> <98e6> 20947 +<98e7> <98e7> 5658 +<98e8> <98e8> 7655 +<98e9> <98e9> 9117 +<98ea> <98eb> 9119 +<98ec> <98ec> 20951 +<98ed> <98ed> 9121 +<98ee> <98ee> 20952 +<98ef> <98ef> 7921 +<98f0> <98f1> 20953 +<98f2> <98f2> 8734 +<98f3> <98f3> 20955 +<98f4> <98f4> 9122 +<98f5> <98fb> 20956 +<98fc> <98fc> 8523 +<98fd> <98fd> 7734 +<98fe> <98fe> 8501 +<98ff> <98ff> 20963 +<9900> <9902> 20964 +<9903> <9903> 8109 +<9904> <9904> 20967 +<9905> <9905> 7763 +<9906> <9908> 20968 +<9909> <9909> 9123 +<990a> <990a> 8707 +<990b> <990b> 20971 +<990c> <990c> 7911 +<990d> <990d> 7656 +<990e> <990f> 20972 +<9910> <9910> 1172 +<9911> <9911> 9124 +<9912> <9912> 8343 +<9913> <9913> 7908 +<9914> <9917> 20974 +<9918> <9918> 8760 +<9919> <991a> 20978 +<991b> <991b> 9125 +<991c> <991d> 20980 +<991e> <991e> 8090 +<991f> <9920> 20982 +<9921> <9921> 8643 +<9922> <9927> 20984 +<9928> <9928> 7982 +<9929> <992d> 20990 +<992e> <992e> 7657 +<992f> <9932> 20995 +<9933> <9933> 9116 +<9934> <9936> 20999 +<9937> <9937> 9126 +<9938> <993b> 21002 +<993c> <993c> 9118 +<993d> <993d> 21006 +<993e> <993e> 8245 +<993f> <993f> 9127 +<9940> <9942> 21007 +<9943> <9943> 9128 +<9944> <9944> 21010 +<9945> <9945> 8309 +<9946> <9947> 21011 +<9948> <994a> 9129 +<994b> <994b> 8171 +<994c> <994c> 9132 +<994d> <9950> 21013 +<9951> <9951> 8042 +<9952> <9952> 8441 +<9953> <9953> 21017 +<9954> <9954> 7659 +<9955> <9955> 7658 +<9956> <9956> 21018 +<9957> <9957> 9830 +<9958> <995b> 21019 +<995c> <995c> 9831 +<995d> <995d> 21023 +<995e> <995e> 7788 +<995f> <9961> 21024 +<9962> <9962> 9133 +<9963> <9963> 5661 +<9964> <9964> 21027 +<9965> <9965> 2069 +<9966> <9966> 21028 +<9967> <996c> 5662 +<996d> <996d> 1622 +<996e> <996e> 4226 +<996f> <996f> 2165 +<9970> <9970> 3429 +<9971> <9971> 1038 +<9972> <9972> 3516 +<9973> <9973> 21029 +<9974> <9974> 5668 +<9975> <9975> 1595 +<9976> <9976> 3231 +<9977> <9977> 5669 +<9978> <9979> 21030 +<997a> <997a> 2201 +<997b> <997b> 21032 +<997c> <997c> 1126 +endcidrange + +100 begincidrange +<997d> <997d> 5670 +<997e> <997e> 21033 +<997f> <997f> 1589 +<9980> <9980> 5671 +<9981> <9981> 2876 +<9982> <9983> 21034 +<9984> <9984> 5672 +<9985> <9985> 3911 +<9986> <9986> 1846 +<9987> <9987> 5673 +<9988> <9988> 2444 +<9989> <9989> 21036 +<998a> <998a> 5674 +<998b> <998b> 1213 +<998c> <998c> 21037 +<998d> <998d> 5675 +<998e> <998e> 21038 +<998f> <998f> 2620 +<9990> <9991> 5676 +<9992> <9992> 2719 +<9993> <9995> 5678 +<9996> <9996> 3438 +<9997> <9997> 4718 +<9998> <9998> 4857 +<9999> <9999> 3920 +<999a> <99a4> 21039 +<99a5> <99a5> 6955 +<99a6> <99a7> 21050 +<99a8> <99a8> 5086 +<99a9> <99ab> 21052 +<99ac> <99ac> 8301 +<99ad> <99ad> 8770 +<99ae> <99ae> 7938 +<99af> <99b0> 21055 +<99b1> <99b1> 8579 +<99b2> <99b2> 21057 +<99b3> <99b3> 7813 +<99b4> <99b4> 8681 +<99b5> <99c0> 21058 +<99c1> <99c1> 7767 +<99c2> <99cf> 21070 +<99d0> <99d0> 8869 +<99d1> <99d1> 9223 +<99d2> <99d2> 8138 +<99d3> <99d3> 21084 +<99d4> <99d4> 9218 +<99d5> <99d5> 8066 +<99d6> <99d7> 21085 +<99d8> <99d8> 9224 +<99d9> <99d9> 9220 +<99da> <99da> 21087 +<99db> <99db> 8497 +<99dc> <99dc> 21088 +<99dd> <99dd> 8580 +<99de> <99de> 21089 +<99df> <99df> 9219 +<99e0> <99e0> 21090 +<99e1> <99e1> 8302 +<99e2> <99e2> 9227 +<99e3> <99ec> 21091 +<99ed> <99ed> 7999 +<99ee> <99f0> 21101 +<99f1> <99f1> 8295 +<99f2> <99fe> 21104 +<99ff> <99ff> 8151 +<9a00> <9a00> 21117 +<9a01> <9a01> 7811 +<9a02> <9a04> 21118 +<9a05> <9a05> 9231 +<9a06> <9a0c> 21121 +<9a0d> <9a0d> 9230 +<9a0e> <9a0e> 8391 +<9a0f> <9a0f> 9229 +<9a10> <9a15> 21128 +<9a16> <9a16> 9234 +<9a17> <9a18> 21134 +<9a19> <9a19> 8375 +<9a1a> <9a2a> 21136 +<9a2b> <9a2b> 9200 +<9a2c> <9a2c> 21153 +<9a2d> <9a2d> 9233 +<9a2e> <9a2e> 9236 +<9a2f> <9a2f> 21154 +<9a30> <9a30> 8560 +<9a31> <9a35> 21155 +<9a36> <9a36> 9221 +<9a37> <9a37> 8460 +<9a38> <9a38> 9237 +<9a39> <9a3d> 21160 +<9a3e> <9a3e> 8294 +<9a3f> <9a3f> 21165 +<9a40> <9a40> 9042 +<9a41> <9a41> 9235 +<9a42> <9a42> 9232 +<9a43> <9a44> 9238 +<9a45> <9a45> 8433 +<9a46> <9a49> 21166 +<9a4a> <9a4a> 9226 +<9a4b> <9a4c> 21170 +<9a4d> <9a4d> 9225 +endcidrange + +100 begincidrange +<9a4e> <9a4e> 21172 +<9a4f> <9a4f> 9240 +<9a50> <9a54> 21173 +<9a55> <9a55> 8103 +<9a56> <9a56> 21178 +<9a57> <9a57> 8700 +<9a58> <9a59> 21179 +<9a5a> <9a5a> 8129 +<9a5b> <9a5b> 9222 +<9a5c> <9a5e> 21181 +<9a5f> <9a5f> 8860 +<9a60> <9a61> 21184 +<9a62> <9a62> 8270 +<9a63> <9a63> 21186 +<9a64> <9a64> 9242 +<9a65> <9a65> 9241 +<9a66> <9a69> 21187 +<9a6a> <9a6a> 9228 +<9a6b> <9a6b> 21191 +<9a6c> <9a6c> 2708 +<9a6d> <9a6d> 4329 +<9a6e> <9a6e> 3717 +<9a6f> <9a6f> 4058 +<9a70> <9a70> 1280 +<9a71> <9a71> 3194 +<9a72> <9a72> 21192 +<9a73> <9a73> 1148 +<9a74> <9a74> 2662 +<9a75> <9a75> 6074 +<9a76> <9a76> 3410 +<9a77> <9a78> 6075 +<9a79> <9a79> 2307 +<9a7a> <9a7a> 6077 +<9a7b> <9a7b> 4609 +<9a7c> <9a7c> 3718 +<9a7d> <9a7d> 6079 +<9a7e> <9a7e> 2128 +<9a7f> <9a7f> 6078 +<9a80> <9a81> 6080 +<9a82> <9a82> 2709 +<9a83> <9a83> 21193 +<9a84> <9a84> 2191 +<9a85> <9a85> 6082 +<9a86> <9a86> 2701 +<9a87> <9a87> 1886 +<9a88> <9a88> 6083 +<9a89> <9a89> 21194 +<9a8a> <9a8a> 6084 +<9a8b> <9a8b> 1271 +<9a8c> <9a8c> 4114 +<9a8d> <9a8e> 21195 +<9a8f> <9a8f> 2354 +<9a90> <9a90> 6085 +<9a91> <9a91> 3086 +<9a92> <9a93> 6086 +<9a94> <9a95> 21197 +<9a96> <9a96> 6088 +<9a97> <9a97> 3020 +<9a98> <9a98> 6089 +<9a99> <9a99> 21199 +<9a9a> <9a9a> 3296 +<9a9b> <9a9d> 6090 +<9a9e> <9a9e> 5941 +<9a9f> <9aa0> 6093 +<9aa1> <9aa1> 2697 +<9aa2> <9aa3> 6095 +<9aa4> <9aa4> 4583 +<9aa5> <9aa5> 6097 +<9aa6> <9aa6> 21200 +<9aa7> <9aa7> 6098 +<9aa8> <9aa8> 1824 +<9aa9> <9aae> 21201 +<9aaf> <9aaf> 7721 +<9ab0> <9ab0> 7635 +<9ab1> <9ab1> 7634 +<9ab2> <9ab5> 21207 +<9ab6> <9ab6> 7638 +<9ab7> <9ab7> 7636 +<9ab8> <9ab8> 1880 +<9ab9> <9ab9> 21211 +<9aba> <9aba> 7639 +<9abb> <9abb> 21212 +<9abc> <9abc> 7640 +<9abd> <9abf> 21213 +<9ac0> <9ac0> 7642 +<9ac1> <9ac1> 7641 +<9ac2> <9ac2> 7644 +<9ac3> <9ac4> 21216 +<9ac5> <9ac5> 7643 +<9ac6> <9aca> 21218 +<9acb> <9acc> 7645 +<9acd> <9ace> 21223 +<9acf> <9acf> 9825 +<9ad0> <9ad0> 21225 +<9ad1> <9ad1> 7647 +<9ad2> <9ad2> 9892 +<9ad3> <9ad3> 3549 +<9ad4> <9ad4> 8564 +<9ad5> <9ad5> 9827 +<9ad6> <9ad6> 9826 +endcidrange + +100 begincidrange +<9ad7> <9ad7> 21226 +<9ad8> <9ad8> 1754 +<9ad9> <9ade> 21227 +<9adf> <9adf> 7660 +<9ae0> <9ae0> 21233 +<9ae1> <9ae1> 7661 +<9ae2> <9ae5> 21234 +<9ae6> <9ae6> 7662 +<9ae7> <9aea> 21238 +<9aeb> <9aeb> 7664 +<9aec> <9aec> 21242 +<9aed> <9aed> 7666 +<9aee> <9aee> 9845 +<9aef> <9aef> 7663 +<9af0> <9af8> 21243 +<9af9> <9af9> 7667 +<9afa> <9afa> 21252 +<9afb> <9afb> 7665 +<9afc> <9aff> 21253 +<9b00> <9b02> 21257 +<9b03> <9b03> 4660 +<9b04> <9b05> 21260 +<9b06> <9b06> 8524 +<9b07> <9b07> 21262 +<9b08> <9b08> 7668 +<9b09> <9b0c> 21263 +<9b0d> <9b0d> 9850 +<9b0e> <9b0e> 21267 +<9b0f> <9b0f> 7669 +<9b10> <9b12> 21268 +<9b13> <9b13> 7670 +<9b14> <9b19> 21271 +<9b1a> <9b1a> 9888 +<9b1b> <9b1e> 21277 +<9b1f> <9b1f> 7671 +<9b20> <9b21> 21281 +<9b22> <9b22> 9832 +<9b23> <9b23> 7672 +<9b24> <9b24> 21283 +<9b25> <9b25> 7888 +<9b26> <9b26> 21284 +<9b27> <9b27> 8342 +<9b28> <9b28> 21285 +<9b29> <9b29> 9164 +<9b2a> <9b2d> 21286 +<9b2e> <9b2e> 9160 +<9b2f> <9b2f> 5019 +<9b30> <9b30> 21290 +<9b31> <9b31> 8766 +<9b32> <9b32> 4704 +<9b33> <9b3a> 21291 +<9b3b> <9b3b> 6003 +<9b3c> <9b3c> 1862 +<9b3d> <9b40> 21299 +<9b41> <9b41> 2442 +<9b42> <9b42> 2047 +<9b43> <9b43> 7649 +<9b44> <9b44> 3046 +<9b45> <9b45> 7648 +<9b46> <9b46> 21303 +<9b47> <9b47> 7650 +<9b48> <9b48> 7652 +<9b49> <9b49> 7651 +<9b4a> <9b4c> 21304 +<9b4d> <9b4d> 7653 +<9b4e> <9b4e> 9829 +<9b4f> <9b4f> 3785 +<9b50> <9b50> 21307 +<9b51> <9b51> 7654 +<9b52> <9b53> 21308 +<9b54> <9b54> 2826 +<9b55> <9b57> 21310 +<9b58> <9b58> 9828 +<9b59> <9b59> 21313 +<9b5a> <9b5a> 8761 +<9b5b> <9b6e> 21314 +<9b6f> <9b6f> 8266 +<9b70> <9b73> 21334 +<9b74> <9b74> 9759 +<9b75> <9b76> 21338 +<9b77> <9b77> 9758 +<9b78> <9b80> 21340 +<9b81> <9b81> 9760 +<9b82> <9b82> 21349 +<9b83> <9b83> 9761 +<9b84> <9b8d> 21350 +<9b8e> <9b8e> 9762 +<9b8f> <9b8f> 21360 +<9b90> <9b90> 9767 +<9b91> <9b91> 7737 +<9b92> <9b92> 9765 +<9b93> <9b99> 21361 +<9b9a> <9b9a> 9769 +<9b9b> <9b9c> 21368 +<9b9d> <9b9d> 9774 +<9b9e> <9b9e> 9771 +<9b9f> <9ba9> 21370 +<9baa> <9baa> 9770 +<9bab> <9bab> 9773 +<9bac> <9bac> 21381 +endcidrange + +100 begincidrange +<9bad> <9bad> 9768 +<9bae> <9bae> 8633 +<9baf> <9bbf> 21382 +<9bc0> <9bc0> 9782 +<9bc1> <9bc1> 9776 +<9bc2> <9bc6> 21399 +<9bc7> <9bc7> 9784 +<9bc8> <9bc8> 21404 +<9bc9> <9bc9> 8205 +<9bca> <9bca> 9783 +<9bcb> <9bd3> 21405 +<9bd4> <9bd4> 9797 +<9bd5> <9bd5> 21414 +<9bd6> <9bd6> 9786 +<9bd7> <9bda> 21415 +<9bdb> <9bdb> 9795 +<9bdc> <9bdc> 21419 +<9bdd> <9bdd> 9792 +<9bde> <9be0> 21420 +<9be1> <9be1> 9789 +<9be2> <9be2> 9793 +<9be3> <9be3> 21423 +<9be4> <9be4> 9790 +<9be5> <9be6> 21424 +<9be7> <9be7> 9791 +<9be8> <9be8> 8128 +<9be9> <9be9> 21426 +<9bea> <9beb> 9787 +<9bec> <9bef> 21427 +<9bf0> <9bf0> 9794 +<9bf1> <9bf3> 21431 +<9bf4> <9bf4> 9796 +<9bf5> <9bfc> 21434 +<9bfd> <9bfd> 9785 +<9bfe> <9bfe> 21442 +<9bff> <9bff> 9804 +<9c00> <9c07> 21443 +<9c08> <9c08> 9799 +<9c09> <9c09> 9803 +<9c0a> <9c0c> 21451 +<9c0d> <9c0d> 9801 +<9c0e> <9c0f> 21454 +<9c10> <9c10> 9800 +<9c11> <9c11> 21456 +<9c12> <9c12> 9802 +<9c13> <9c13> 8456 +<9c14> <9c1f> 21457 +<9c20> <9c20> 9805 +<9c21> <9c22> 21469 +<9c23> <9c23> 9780 +<9c24> <9c24> 21471 +<9c25> <9c25> 9809 +<9c26> <9c27> 21472 +<9c28> <9c28> 9808 +<9c29> <9c29> 9810 +<9c2a> <9c2c> 21474 +<9c2d> <9c2d> 9807 +<9c2e> <9c30> 21477 +<9c31> <9c31> 9778 +<9c32> <9c32> 9806 +<9c33> <9c33> 9811 +<9c34> <9c34> 21480 +<9c35> <9c35> 9815 +<9c36> <9c36> 21481 +<9c37> <9c37> 9781 +<9c38> <9c38> 21482 +<9c39> <9c39> 9779 +<9c3a> <9c3a> 21483 +<9c3b> <9c3b> 9814 +<9c3c> <9c3d> 21484 +<9c3e> <9c3e> 9812 +<9c3f> <9c44> 21486 +<9c45> <9c45> 9816 +<9c46> <9c47> 21492 +<9c48> <9c48> 9813 +<9c49> <9c49> 7757 +<9c4a> <9c51> 21494 +<9c52> <9c52> 9819 +<9c53> <9c53> 21502 +<9c54> <9c54> 9818 +<9c55> <9c55> 21503 +<9c56> <9c56> 9817 +<9c57> <9c57> 8238 +<9c58> <9c58> 9775 +<9c59> <9c5c> 21504 +<9c5d> <9c5d> 9798 +<9c5e> <9c5e> 21508 +<9c5f> <9c5f> 9766 +<9c60> <9c66> 21509 +<9c67> <9c67> 9820 +<9c68> <9c6c> 21516 +<9c6d> <9c6d> 9772 +<9c6e> <9c77> 21521 +<9c78> <9c78> 9763 +<9c79> <9c79> 21531 +<9c7a> <9c7a> 9777 +<9c7b> <9c7b> 21532 +<9c7c> <9c7c> 4296 +<9c7d> <9c7e> 21533 +<9c7f> <9c7f> 7561 +endcidrange + +100 begincidrange +<9c80> <9c80> 21535 +<9c81> <9c81> 2650 +<9c82> <9c82> 7562 +<9c83> <9c84> 21536 +<9c85> <9c88> 7563 +<9c89> <9c8a> 21538 +<9c8b> <9c8b> 7568 +<9c8c> <9c8c> 21540 +<9c8d> <9c8d> 1044 +<9c8e> <9c8e> 7569 +<9c8f> <9c8f> 21541 +<9c90> <9c92> 7570 +<9c93> <9c93> 21542 +<9c94> <9c95> 7573 +<9c96> <9c99> 21543 +<9c9a> <9c9b> 7575 +<9c9c> <9c9c> 3895 +<9c9d> <9c9d> 21547 +<9c9e> <9ca3> 7577 +<9ca4> <9ca4> 2523 +<9ca5> <9ca9> 7583 +<9caa> <9caa> 21548 +<9cab> <9cab> 7588 +<9cac> <9cac> 21549 +<9cad> <9cae> 7589 +<9caf> <9caf> 21550 +<9cb0> <9cb7> 7591 +<9cb8> <9cb8> 2263 +<9cb9> <9cb9> 21551 +<9cba> <9cbd> 7599 +<9cbe> <9cc2> 21552 +<9cc3> <9cc3> 3285 +<9cc4> <9cc7> 7603 +<9cc8> <9cc9> 21557 +<9cca> <9cd0> 7607 +<9cd1> <9cd2> 21559 +<9cd3> <9cd5> 7614 +<9cd6> <9cd6> 1111 +<9cd7> <9cd9> 7617 +<9cda> <9cdb> 21561 +<9cdc> <9cdd> 7620 +<9cde> <9cde> 2596 +<9cdf> <9cdf> 7622 +<9ce0> <9ce1> 21563 +<9ce2> <9ce2> 7623 +<9ce3> <9ce4> 21565 +<9ce5> <9ce5> 8348 +<9ce6> <9ce8> 21567 +<9ce9> <9ce9> 9600 +<9cea> <9ceb> 21570 +<9cec> <9cec> 8924 +<9ced> <9cf2> 21572 +<9cf3> <9cf3> 7941 +<9cf4> <9cf4> 8331 +<9cf5> <9cf5> 21578 +<9cf6> <9cf6> 9601 +<9cf7> <9cff> 21579 +<9d00> <9d05> 21588 +<9d06> <9d06> 9603 +<9d07> <9d07> 9602 +<9d08> <9d08> 21594 +<9d09> <9d09> 8686 +<9d0a> <9d14> 21595 +<9d15> <9d15> 8578 +<9d16> <9d1a> 21606 +<9d1b> <9d1b> 8771 +<9d1c> <9d1c> 21611 +<9d1d> <9d1d> 9607 +<9d1e> <9d1e> 21612 +<9d1f> <9d1f> 9608 +<9d20> <9d22> 21613 +<9d23> <9d23> 9604 +<9d24> <9d25> 21616 +<9d26> <9d26> 8701 +<9d27> <9d27> 21618 +<9d28> <9d28> 8687 +<9d29> <9d2e> 21619 +<9d2f> <9d2f> 9610 +<9d30> <9d30> 9612 +<9d31> <9d3a> 21625 +<9d3b> <9d3b> 8007 +<9d3c> <9d3e> 21635 +<9d3f> <9d3f> 7965 +<9d40> <9d41> 21638 +<9d42> <9d42> 9613 +<9d43> <9d50> 21640 +<9d51> <9d51> 8144 +<9d52> <9d52> 9618 +<9d53> <9d53> 9615 +<9d54> <9d5b> 21654 +<9d5c> <9d5c> 9620 +<9d5d> <9d5d> 7904 +<9d5e> <9d5f> 21662 +<9d60> <9d60> 9617 +<9d61> <9d61> 9621 +<9d62> <9d69> 21664 +<9d6a> <9d6a> 9623 +<9d6b> <9d6b> 21672 +<9d6c> <9d6c> 8374 +<9d6d> <9d6e> 21673 +endcidrange + +100 begincidrange +<9d6f> <9d6f> 9624 +<9d70> <9d71> 21675 +<9d72> <9d72> 8438 +<9d73> <9d86> 21677 +<9d87> <9d87> 9605 +<9d88> <9d88> 21697 +<9d89> <9d89> 9625 +<9d8a> <9d92> 21698 +<9d93> <9d93> 9622 +<9d94> <9d97> 21707 +<9d98> <9d98> 9626 +<9d99> <9d99> 21711 +<9d9a> <9d9a> 9627 +<9d9b> <9da4> 21712 +<9da5> <9da5> 9629 +<9da6> <9da8> 21722 +<9da9> <9da9> 9630 +<9daa> <9dae> 21725 +<9daf> <9daf> 9036 +<9db0> <9db3> 21730 +<9db4> <9db4> 8004 +<9db5> <9dba> 21734 +<9dbb> <9dbb> 9824 +<9dbc> <9dbc> 9632 +<9dbd> <9dbf> 21740 +<9dc0> <9dc0> 9628 +<9dc1> <9dc1> 21743 +<9dc2> <9dc2> 9631 +<9dc3> <9dc3> 21744 +<9dc4> <9dc4> 8044 +<9dc5> <9dd2> 21745 +<9dd3> <9dd3> 9634 +<9dd4> <9dd6> 21759 +<9dd7> <9dd7> 8366 +<9dd8> <9dd8> 21762 +<9dd9> <9dd9> 9611 +<9dda> <9dda> 9635 +<9ddb> <9de4> 21763 +<9de5> <9de5> 9609 +<9de6> <9de6> 9637 +<9de7> <9dee> 21773 +<9def> <9def> 9636 +<9df0> <9df1> 21781 +<9df2> <9df2> 9638 +<9df3> <9df3> 9619 +<9df4> <9df7> 21783 +<9df8> <9df8> 9639 +<9df9> <9df9> 8738 +<9dfa> <9dfa> 9641 +<9dfb> <9dff> 21787 +<9e00> <9e0b> 21792 +<9e0c> <9e0c> 9640 +<9e0d> <9e14> 21804 +<9e15> <9e15> 9606 +<9e16> <9e19> 21812 +<9e1a> <9e1a> 9633 +<9e1b> <9e1b> 9642 +<9e1c> <9e1c> 21816 +<9e1d> <9e1d> 9616 +<9e1e> <9e1e> 9614 +<9e1f> <9e1f> 2900 +<9e20> <9e20> 6965 +<9e21> <9e21> 2073 +<9e22> <9e22> 6966 +<9e23> <9e23> 2814 +<9e24> <9e24> 21817 +<9e25> <9e25> 2937 +<9e26> <9e26> 4068 +<9e27> <9e27> 21818 +<9e28> <9e2c> 6967 +<9e2d> <9e2d> 4069 +<9e2e> <9e2e> 21819 +<9e2f> <9e2f> 4117 +<9e30> <9e30> 21820 +<9e31> <9e31> 6973 +<9e32> <9e32> 6972 +<9e33> <9e33> 4330 +<9e34> <9e34> 21821 +<9e35> <9e35> 3715 +<9e36> <9e36> 6974 +<9e37> <9e37> 6976 +<9e38> <9e38> 6975 +<9e39> <9e3a> 6977 +<9e3b> <9e3c> 21822 +<9e3d> <9e3d> 1766 +<9e3e> <9e3e> 6979 +<9e3f> <9e3f> 1951 +<9e40> <9e40> 21824 +<9e41> <9e42> 6980 +<9e43> <9e43> 2328 +<9e44> <9e44> 6982 +<9e45> <9e45> 1579 +<9e46> <9e49> 6983 +<9e4a> <9e4a> 3216 +<9e4b> <9e4c> 6987 +<9e4d> <9e4d> 21825 +<9e4e> <9e4e> 6989 +<9e4f> <9e4f> 2997 +<9e50> <9e50> 21826 +<9e51> <9e51> 6990 +endcidrange + +100 begincidrange +<9e52> <9e54> 21827 +<9e55> <9e55> 6991 +<9e56> <9e56> 21830 +<9e57> <9e57> 6992 +<9e58> <9e58> 7637 +<9e59> <9e59> 21831 +<9e5a> <9e5c> 6993 +<9e5d> <9e5d> 21832 +<9e5e> <9e5e> 6996 +<9e5f> <9e62> 21833 +<9e63> <9e63> 6997 +<9e64> <9e64> 1934 +<9e65> <9e65> 21837 +<9e66> <9e6c> 6998 +<9e6d> <9e6d> 7006 +<9e6e> <9e6f> 21838 +<9e70> <9e70> 4234 +<9e71> <9e71> 7005 +<9e72> <9e72> 21840 +<9e73> <9e73> 7007 +<9e74> <9e74> 21841 +<9e75> <9e75> 9864 +<9e76> <9e78> 21842 +<9e79> <9e79> 9886 +<9e7a> <9e7a> 9723 +<9e7b> <9e7b> 21845 +<9e7c> <9e7c> 8076 +<9e7d> <9e7d> 8692 +<9e7e> <9e7e> 7446 +<9e7f> <9e7f> 2656 +<9e80> <9e81> 21846 +<9e82> <9e82> 7676 +<9e83> <9e86> 21848 +<9e87> <9e88> 7677 +<9e89> <9e8a> 21852 +<9e8b> <9e8b> 7679 +<9e8c> <9e91> 21854 +<9e92> <9e92> 7680 +<9e93> <9e93> 2651 +<9e94> <9e96> 21860 +<9e97> <9e97> 8207 +<9e98> <9e9c> 21863 +<9e9d> <9e9d> 7682 +<9e9e> <9e9e> 21868 +<9e9f> <9e9f> 7683 +<9ea0> <9ea4> 21869 +<9ea5> <9ea5> 8305 +<9ea6> <9ea6> 2714 +<9ea7> <9ea8> 21874 +<9ea9> <9ea9> 9719 +<9eaa> <9eae> 21876 +<9eaf> <9eaf> 9878 +<9eb0> <9eb3> 21881 +<9eb4> <9eb4> 7406 +<9eb5> <9eb5> 9871 +<9eb6> <9eb7> 21885 +<9eb8> <9eb8> 7405 +<9eb9> <9eba> 21887 +<9ebb> <9ebb> 2704 +<9ebc> <9ebc> 21889 +<9ebd> <9ebe> 7673 +<9ebf> <9ec3> 21890 +<9ec4> <9ec4> 2011 +<9ec5> <9ec8> 21895 +<9ec9> <9ec9> 4856 +<9eca> <9ecb> 21899 +<9ecc> <9ecc> 8922 +<9ecd> <9ecd> 3465 +<9ece> <9ece> 2515 +<9ecf> <9ecf> 6954 +<9ed0> <9ed0> 21901 +<9ed1> <9ed1> 1937 +<9ed2> <9ed3> 21902 +<9ed4> <9ed4> 3114 +<9ed5> <9ed7> 21904 +<9ed8> <9ed8> 2831 +<9ed9> <9eda> 21907 +<9edb> <9edd> 7684 +<9ede> <9ede> 7873 +<9edf> <9edf> 7688 +<9ee0> <9ee0> 7687 +<9ee1> <9ee1> 21909 +<9ee2> <9ee2> 7689 +<9ee3> <9ee4> 21910 +<9ee5> <9ee5> 7692 +<9ee6> <9ee6> 21912 +<9ee7> <9ee7> 7691 +<9ee8> <9ee8> 7859 +<9ee9> <9ee9> 7690 +<9eea> <9eea> 7693 +<9eeb> <9eee> 21913 +<9eef> <9eef> 7694 +<9ef0> <9ef1> 21917 +<9ef2> <9ef2> 9834 +<9ef3> <9ef3> 21919 +<9ef4> <9ef4> 9866 +<9ef5> <9ef6> 21920 +<9ef7> <9ef7> 9833 +<9ef8> <9ef8> 21922 +<9ef9> <9ef9> 6741 +endcidrange + +100 begincidrange +<9efa> <9efa> 21923 +<9efb> <9efc> 6742 +<9efd> <9efd> 9752 +<9efe> <9efe> 7542 +<9eff> <9eff> 9753 +<9f00> <9f08> 21924 +<9f09> <9f09> 9754 +<9f0a> <9f0a> 21933 +<9f0b> <9f0b> 7543 +<9f0c> <9f0c> 21934 +<9f0d> <9f0d> 7544 +<9f0e> <9f0e> 1509 +<9f0f> <9f0f> 21935 +<9f10> <9f10> 4724 +<9f11> <9f12> 21936 +<9f13> <9f13> 1821 +<9f14> <9f14> 21938 +<9f15> <9f15> 9843 +<9f16> <9f16> 21939 +<9f17> <9f17> 4721 +<9f18> <9f18> 21940 +<9f19> <9f19> 5087 +<9f1a> <9f1f> 21941 +<9f20> <9f20> 3466 +<9f21> <9f21> 21947 +<9f22> <9f22> 7695 +<9f23> <9f2b> 21948 +<9f2c> <9f2c> 7696 +<9f2d> <9f2e> 21957 +<9f2f> <9f2f> 7697 +<9f30> <9f36> 21959 +<9f37> <9f37> 7699 +<9f38> <9f38> 21966 +<9f39> <9f39> 7698 +<9f3a> <9f3a> 21967 +<9f3b> <9f3b> 1072 +<9f3c> <9f3c> 21968 +<9f3d> <9f3e> 7700 +<9f3f> <9f43> 21969 +<9f44> <9f44> 7702 +<9f45> <9f49> 21974 +<9f4a> <9f4a> 8390 +<9f4b> <9f4b> 8811 +<9f4c> <9f4e> 21979 +<9f4f> <9f4f> 9427 +<9f50> <9f50> 3082 +<9f51> <9f51> 6594 +<9f52> <9f52> 7814 +<9f53> <9f53> 21982 +<9f54> <9f54> 9743 +<9f55> <9f58> 21983 +<9f59> <9f59> 9745 +<9f5a> <9f5b> 21987 +<9f5c> <9f5c> 9747 +<9f5d> <9f5e> 21989 +<9f5f> <9f5f> 9744 +<9f60> <9f60> 9746 +<9f61> <9f61> 8240 +<9f62> <9f62> 21991 +<9f63> <9f63> 9841 +<9f64> <9f65> 21992 +<9f66> <9f66> 9748 +<9f67> <9f69> 21994 +<9f6a> <9f6a> 9750 +<9f6b> <9f6b> 21997 +<9f6c> <9f6c> 9749 +<9f6d> <9f71> 21998 +<9f72> <9f72> 8434 +<9f73> <9f76> 22003 +<9f77> <9f77> 9751 +<9f78> <9f7e> 22007 +<9f7f> <9f7f> 1282 +<9f80> <9f80> 7533 +<9f81> <9f82> 22014 +<9f83> <9f83> 7534 +<9f84> <9f84> 2605 +<9f85> <9f8a> 7535 +<9f8b> <9f8b> 3198 +<9f8c> <9f8c> 7541 +<9f8d> <9f8d> 8247 +<9f8e> <9f8f> 22016 +<9f90> <9f90> 8371 +<9f91> <9f93> 22018 +<9f94> <9f94> 7970 +<9f95> <9f95> 9453 +<9f96> <9f98> 22021 +<9f99> <9f99> 2627 +<9f9a> <9f9a> 1793 +<9f9b> <9f9b> 6740 +<9f9c> <9f9c> 7988 +<9f9d> <9f9e> 22024 +<9f9f> <9f9f> 1859 +<9fa0> <9fa0> 4851 +<9fa1> <9fa5> 22026 + 22048 + 22056 + 22064 + 22069 + 22075 + 22085 +endcidrange + +25 begincidrange + 22093 + 22110 + 22126 + 22031 + 22032 + 22035 + 22036 + 22038 + 22039 + 22042 + 22044 + 10013 + 10027 + 10037 + 10041 + 10055 + 262 + 166 + 266 + 106 + 168 + 10014 + 355 + 10015 + 265 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UCS2-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UCS2-V new file mode 100644 index 00000000000..eb60a06f256 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UCS2-V @@ -0,0 +1,101 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniGB-UCS2-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniGB-UCS2-H) +%%BeginResource: CMap (UniGB-UCS2-V) +%%Title: (UniGB-UCS2-V Adobe GB1 4) +%%Version: 12.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniGB-UCS2-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 4 def +end def + +/CMapName /UniGB-UCS2-V def +/CMapVersion 12.002 def +/CMapType 1 def + +/XUID [1 10 25367] def + +/WMode 1 def + +24 begincidrange +<2014> <2014> 598 +<2026> <2026> 599 +<2225> <2225> 7708 +<3001> <3001> 575 +<3002> <3002> 574 +<3008> <300f> 584 +<3010> <3011> 594 +<3013> <3013> 7706 +<3014> <3015> 582 +<3016> <3017> 592 + 578 + 580 + 573 + 7707 + 576 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7704 + 7711 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UTF16-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UTF16-H new file mode 100644 index 00000000000..a14ee421a92 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UTF16-H @@ -0,0 +1,14378 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniGB-UTF16-H) +%%Title: (UniGB-UTF16-H Adobe GB1 5) +%%Version: 1.009 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2010 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 5 def +end def + +/CMapName /UniGB-UTF16-H def +/CMapVersion 1.009 def +/CMapType 1 def + +/XUID [1 10 25601] def + +/WMode 0 def + +3 begincodespacerange + <0000> + + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidchar +<00a4> 167 +<00a5> 22354 +<00a7> 171 +<00a8> 102 +<00a9> 7713 +<00b0> 162 +<00b1> 127 +<00b7> 99 +<00d7> 128 +<00e0> 671 +<00e1> 669 +<00e8> 675 +<00e9> 673 +<00ea> 693 +<00ec> 679 +<00ed> 677 +<00f2> 683 +<00f3> 681 +<00f7> 129 +<00f9> 687 +<00fa> 685 +<00fc> 692 +<0101> 668 +<0113> 672 +<011b> 674 +<012b> 676 +<0144> 696 +<0148> 697 +<014d> 680 +<016b> 684 +<01ce> 670 +<01d0> 678 +<01d2> 682 +<01d4> 686 +<01d6> 688 +<01d8> 689 +<01da> 690 +<01dc> 691 +<01f9> 698 +<0251> 694 +<0261> 699 +<02c7> 101 +<02c9> 100 +<02d9> 9909 +<0401> 608 +<0451> 641 +<1e3f> 695 +<2010> 10018 +<2013> 9910 +<2014> 105 +<2015> 9911 +<2016> 107 +<2022> 99 +<2025> 9912 +<2026> 108 +<2030> 170 +<2035> 9913 +<203b> 184 +<205d> 599 +<20ac> 22353 +<2103> 165 +<2105> 9914 +<2109> 9915 +<2116> 172 +<2121> 10016 +<2122> 7714 +<2192> 185 +<2193> 188 +<2208> 137 +<220f> 134 +<2211> 133 +<2215> 9920 +<221a> 139 +<221d> 151 +<221e> 157 +<221f> 9921 +<2220> 142 +<2223> 9922 +<2225> 141 +<2229> 136 +<222a> 135 +<222b> 145 +<222e> 146 +<2234> 159 +<2235> 158 +<2236> 130 +<2237> 138 +<223d> 150 +<2248> 149 +<224c> 148 +<2252> 9923 +<2260> 152 +<2261> 147 +<2295> 9988 +<2299> 144 +<22a5> 140 +<22bf> 9926 +<22ef> 108 +<2312> 143 +<25a0> 181 +endcidchar + +100 begincidchar +<25a1> 180 +<25b2> 183 +<25b3> 182 +<25c6> 179 +<25c7> 178 +<25cb> 175 +<25ce> 177 +<25cf> 176 +<2605> 174 +<2606> 173 +<2609> 9987 +<2640> 161 +<2642> 160 +<2e80> 22428 +<2e81> 22047 +<2e84> 22051 +<2e88> 22054 +<2e8b> 22055 +<2e8c> 22060 +<2e97> 22061 +<2ea7> 22074 +<2eaa> 22077 +<2eae> 22080 +<2eb3> 22082 +<2ebb> 22088 +<2eca> 22098 +<2f00> 4162 +<2f01> 4707 +<2f02> 4722 +<2f03> 4709 +<2f04> 4185 +<2f05> 10131 +<2f06> 1597 +<2f07> 4867 +<2f08> 3238 +<2f09> 1592 +<2f0a> 3270 +<2f0b> 982 +<2f0c> 4765 +<2f0d> 4884 +<2f0e> 4879 +<2f0f> 2091 +<2f10> 5017 +<2f11> 1431 +<2f12> 2543 +<2f13> 4860 +<2f14> 4710 +<2f15> 4740 +<2f16> 10778 +<2f17> 3397 +<2f18> 1150 +<2f19> 4946 +<2f1a> 1228 +<2f1b> 5020 +<2f1c> 4283 +<2f1d> 2407 +<2f1e> 5523 +<2f1f> 3698 +<2f20> 3414 +<2f21> 5660 +<2f22> 11565 +<2f23> 3859 +<2f24> 1398 +<2f25> 2927 +<2f26> 4656 +<2f27> 5934 +<2f28> 1386 +<2f29> 3948 +<2f2a> 5302 +<2f2b> 3395 +<2f2c> 6004 +<2f2d> 3318 +<2f2e> 6165 +<2f2f> 1789 +<2f30> 2093 +<2f31> 2238 +<2f32> 1732 +<2f33> 6163 +<2f34> 1852 +<2f35> 5016 +<2f36> 5293 +<2f37> 5366 +<2f38> 1798 +<2f39> 5986 +<2f3a> 5614 +<2f3b> 5600 +<2f3c> 3983 +<2f3d> 1765 +<2f3e> 12946 +<2f3f> 3437 +<2f40> 4518 +<2f41> 6409 +<2f42> 3795 +<2f43> 1526 +<2f44> 2240 +<2f45> 1626 +<2f46> 3821 +<2f47> 3248 +<2f48> 4350 +<2f49> 4357 +endcidchar + +100 begincidchar +<2f4a> 2849 +<2f4b> 3124 +<2f4c> 4536 +<2f4d> 1400 +<2f4e> 6589 +<2f4f> 3826 +<2f50> 1073 +<2f51> 2736 +<2f52> 3430 +<2f53> 3095 +<2f54> 3491 +<2f55> 2053 +<2f56> 4611 +<2f57> 1715 +<2f58> 4713 +<2f59> 5789 +<2f5a> 3019 +<2f5b> 4073 +<2f5c> 2916 +<2f5d> 3209 +<2f5e> 4041 +<2f5f> 4310 +<2f60> 1832 +<2f61> 3728 +<2f62> 1733 +<2f63> 3379 +<2f64> 4264 +<2f65> 3650 +<2f66> 7110 +<2f67> 7008 +<2f68> 16063 +<2f69> 994 +<2f6a> 3011 +<2f6b> 2808 +<2f6c> 2850 +<2f6d> 2737 +<2f6e> 3407 +<2f6f> 3398 +<2f70> 3413 +<2f71> 16587 +<2f72> 1923 +<2f73> 4049 +<2f74> 2539 +<2f75> 4592 +<2f76> 2780 +<2f77> 7399 +<2f78> 7262 +<2f79> 3753 +<2f7a> 4123 +<2f7b> 4309 +<2f7c> 2490 +<2f7d> 1591 +<2f7e> 7115 +<2f7f> 1593 +<2f80> 6686 +<2f81> 3261 +<2f82> 1249 +<2f83> 4657 +<2f84> 4544 +<2f85> 2297 +<2f86> 3353 +<2f87> 5656 +<2f88> 4570 +<2f89> 7388 +<2f8a> 3300 +<2f8b> 17826 +<2f8c> 7152 +<2f8d> 1291 +<2f8e> 4051 +<2f8f> 3995 +<2f90> 4169 +<2f91> 18908 +<2f92> 8086 +<2f93> 2200 +<2f94> 4093 +<2f95> 1825 +<2f96> 1528 +<2f97> 7445 +<2f98> 7504 +<2f99> 7739 +<2f9a> 1285 +<2f9b> 4668 +<2f9c> 4672 +<2f9d> 3366 +<2f9e> 7803 +<2f9f> 3980 +<2fa0> 1250 +<2fa1> 19731 +<2fa2> 4191 +<2fa3> 4276 +<2fa4> 19992 +<2fa5> 2522 +<2fa6> 2241 +<2fa7> 7797 +<2fa8> 8317 +<2fa9> 1714 +<2faa> 2542 +<2fab> 7545 +<2fac> 4303 +<2fad> 20714 +endcidchar + +100 begincidchar +<2fae> 1636 +<2faf> 2795 +<2fb0> 1770 +<2fb1> 8589 +<2fb2> 2289 +<2fb3> 4219 +<2fb4> 8713 +<2fb5> 7936 +<2fb6> 7924 +<2fb7> 3402 +<2fb8> 3438 +<2fb9> 3920 +<2fba> 8301 +<2fbb> 1824 +<2fbc> 1754 +<2fbd> 7660 +<2fbe> 7888 +<2fbf> 5019 +<2fc0> 4704 +<2fc1> 1862 +<2fc2> 8761 +<2fc3> 8348 +<2fc4> 9864 +<2fc5> 2656 +<2fc6> 8305 +<2fc7> 2704 +<2fc8> 21894 +<2fc9> 3465 +<2fca> 1937 +<2fcb> 6741 +<2fcc> 9752 +<2fcd> 1509 +<2fce> 1821 +<2fcf> 3466 +<2fd0> 1072 +<2fd1> 8390 +<2fd2> 7814 +<2fd3> 8247 +<2fd4> 7988 +<2fd5> 4851 +<3003> 103 +<3005> 104 +<3006> 10024 +<3007> 7703 +<3012> 9989 +<3013> 189 +<303e> 10059 +<303f> 22357 +<3094> 22375 +<30f7> 22390 +<30f8> 22392 +<30f9> 22391 +<30fa> 22393 +<30fb> 99 +<30fc> 10019 +<3231> 10017 +<32a3> 10001 +<33a1> 10007 +<33c4> 10008 +<33ce> 10009 +<33d5> 10012 +<3447> 22053 +<3473> 22052 +<359e> 22057 +<360e> 22059 +<361a> 22058 +<3918> 22063 +<396e> 22062 +<39cf> 22065 +<39d0> 22068 +<39df> 22066 +<3a73> 22067 +<3b4e> 22071 +<3c6e> 22072 +<3ce0> 22073 +<4056> 22078 +<415f> 22079 +<4337> 22081 +<43ac> 22087 +<43b1> 22086 +<43dd> 22089 +<44d6> 22090 +<464c> 22092 +<4661> 22091 +<4723> 22094 +<4729> 22095 +<477c> 22096 +<478d> 22097 +<4947> 22099 +<497a> 22100 +<497d> 22101 +<4984> 28005 +<499b> 22107 +<499f> 22106 +<49b6> 22109 +<49b7> 22108 +<4c77> 22116 +<4ca2> 22117 +<4ca3> 22112 +<4dae> 22125 +endcidchar + +100 begincidchar +<4e00> 4162 +<4e01> 1504 +<4e02> 10072 +<4e03> 3070 +<4e07> 3747 +<4e08> 4458 +<4e09> 3288 +<4e0a> 3336 +<4e0b> 3887 +<4e0c> 4696 +<4e0d> 1154 +<4e0e> 4304 +<4e0f> 10076 +<4e10> 4698 +<4e11> 1304 +<4e12> 10077 +<4e13> 4613 +<4e14> 3151 +<4e15> 4701 +<4e16> 3415 +<4e17> 10078 +<4e18> 3181 +<4e19> 1124 +<4e1a> 4156 +<4e1b> 1367 +<4e1c> 1514 +<4e1d> 3508 +<4e1e> 4703 +<4e22> 1513 +<4e23> 10082 +<4e24> 2566 +<4e25> 4088 +<4e26> 10083 +<4e27> 3294 +<4e28> 4707 +<4e29> 10084 +<4e2a> 1777 +<4e2b> 4071 +<4e2c> 5788 +<4e2d> 4559 +<4e30> 1662 +<4e31> 10087 +<4e32> 1329 +<4e33> 10088 +<4e34> 2594 +<4e35> 10089 +<4e36> 4722 +<4e37> 10090 +<4e38> 3737 +<4e39> 1413 +<4e3a> 3769 +<4e3b> 4598 +<4e3c> 10091 +<4e3d> 2529 +<4e3e> 2312 +<4e3f> 4709 +<4e43> 2862 +<4e44> 10095 +<4e45> 2290 +<4e46> 10096 +<4e47> 4711 +<4e48> 2745 +<4e49> 4204 +<4e4a> 10097 +<4e4b> 4525 +<4e4c> 3817 +<4e4d> 4424 +<4e4e> 1964 +<4e4f> 1603 +<4e50> 2497 +<4e51> 10098 +<4e52> 3032 +<4e53> 2963 +<4e54> 3140 +<4e55> 10099 +<4e56> 1837 +<4e57> 10100 +<4e58> 1264 +<4e59> 4185 +<4e5c> 4725 +<4e5d> 2292 +<4e5e> 3089 +<4e5f> 4153 +<4e60> 3869 +<4e61> 3924 +<4e66> 3456 +<4e69> 4726 +<4e70> 2713 +<4e71> 2681 +<4e72> 10115 +<4e73> 3268 +<4e7e> 3113 +<4e82> 8281 +<4e86> 2580 +<4e87> 10132 +<4e88> 4301 +<4e89> 4506 +<4e8a> 10133 +<4e8b> 3417 +<4e8c> 1597 +endcidchar + +100 begincidchar +<4e8d> 4695 +<4e8e> 4287 +<4e8f> 2436 +<4e90> 10134 +<4e91> 4361 +<4e92> 1978 +<4e93> 4727 +<4e94> 3828 +<4e95> 2269 +<4e98> 4702 +<4e99> 10137 +<4e9a> 4080 +<4e9b> 3956 +<4e9e> 8689 +<4e9f> 4723 +<4ea0> 4867 +<4ea1> 3751 +<4ea2> 2375 +<4ea3> 10140 +<4ea4> 2188 +<4ea5> 1884 +<4ea6> 4199 +<4ea7> 1217 +<4ea8> 1943 +<4ea9> 2841 +<4eaa> 10141 +<4eab> 3930 +<4eac> 2264 +<4ead> 3669 +<4eae> 2570 +<4eb2> 3156 +<4eb3> 4869 +<4eb4> 10145 +<4eb5> 4872 +<4eba> 3238 +<4ebb> 4767 +<4ebf> 4193 +<4ec0> 3401 +<4ec1> 3237 +<4ec2> 4770 +<4ec3> 4768 +<4ec4> 4732 +<4ec5> 2247 +<4ec6> 3052 +<4ec7> 1301 +<4ec8> 10153 +<4ec9> 4769 +<4eca> 2242 +<4ecb> 2234 +<4ecc> 10154 +<4ecd> 3247 +<4ece> 1366 +<4ed1> 2687 +<4ed2> 10157 +<4ed3> 1181 +<4ed4> 4653 +<4ed5> 3426 +<4ed6> 3568 +<4ed7> 4461 +<4ed8> 1713 +<4ed9> 3894 +<4edd> 4846 +<4ede> 4774 +<4edf> 3111 +<4ee0> 10161 +<4ee1> 4772 +<4ee2> 10162 +<4ee3> 1405 +<4ee4> 2615 +<4ee5> 4187 +<4ee8> 4771 +<4ee9> 10165 +<4eea> 4174 +<4eeb> 4773 +<4eec> 2764 +<4ef0> 4127 +<4ef1> 10169 +<4ef2> 4568 +<4ef3> 4776 +<4ef4> 10170 +<4ef5> 4779 +<4ef6> 2161 +<4ef7> 2126 +<4efb> 3241 +<4efc> 10174 +<4efd> 1658 +<4efe> 10175 +<4eff> 1631 +<4f00> 10176 +<4f01> 3090 +<4f09> 4782 +<4f0a> 4168 +<4f0d> 3832 +<4f0e> 2098 +<4f0f> 1689 +<4f10> 1602 +<4f11> 4008 +<4f17> 4569 +<4f18> 4266 +<4f19> 2052 +endcidchar + +100 begincidchar +<4f1a> 2038 +<4f1b> 4775 +<4f1e> 3290 +<4f1f> 3775 +<4f20> 1326 +<4f21> 10193 +<4f22> 4777 +<4f23> 10194 +<4f24> 3332 +<4f25> 4780 +<4f26> 2686 +<4f27> 4781 +<4f2a> 3776 +<4f2b> 4783 +<4f2f> 1141 +<4f30> 1817 +<4f31> 10200 +<4f32> 4791 +<4f33> 10201 +<4f34> 1012 +<4f35> 10202 +<4f36> 2607 +<4f37> 10203 +<4f38> 3365 +<4f39> 10204 +<4f3a> 3514 +<4f3b> 10205 +<4f3c> 3515 +<4f3d> 4792 +<4f43> 1481 +<4f46> 1420 +<4f4d> 3786 +<4f4e> 1454 +<4f4f> 4606 +<4f50> 4689 +<4f51> 4280 +<4f52> 10219 +<4f53> 3640 +<4f54> 10220 +<4f55> 1925 +<4f56> 10221 +<4f57> 4790 +<4f58> 4848 +<4f59> 4293 +<4f5a> 4787 +<4f5b> 1677 +<4f5c> 4692 +<4f5d> 4788 +<4f5e> 4784 +<4f5f> 4789 +<4f60> 2886 +<4f63> 4251 +<4f64> 4778 +<4f65> 4849 +<4f66> 10224 +<4f67> 4785 +<4f68> 10225 +<4f69> 2982 +<4f6c> 2491 +<4f6f> 4121 +<4f70> 998 +<4f73> 2116 +<4f74> 4794 +<4f75> 10232 +<4f76> 4793 +<4f7b> 4800 +<4f7c> 4802 +<4f7d> 10237 +<4f7e> 4799 +<4f7f> 3408 +<4f83> 4797 +<4f84> 4533 +<4f85> 10241 +<4f86> 8178 +<4f87> 10242 +<4f88> 1283 +<4f89> 4796 +<4f8a> 10243 +<4f8b> 2536 +<4f8c> 10244 +<4f8d> 3427 +<4f8e> 10245 +<4f8f> 4798 +<4f90> 10246 +<4f91> 4795 +<4f94> 4804 +<4f95> 10249 +<4f96> 8285 +<4f97> 1520 +<4f9b> 1794 +<4f9c> 10253 +<4f9d> 4167 +<4fa0> 3885 +<4fa3> 2665 +<4fa4> 10258 +<4fa5> 2197 +<4fa6> 4493 +<4fa7> 1191 +<4fa8> 3141 +<4fa9> 2424 +endcidchar + +100 begincidchar +<4faa> 4801 +<4fab> 10259 +<4fac> 4803 +<4fad> 10260 +<4fae> 3833 +<4faf> 1957 +<4fb5> 3155 +<4fbf> 1100 +<4fc2> 9884 +<4fc3> 1372 +<4fc4> 1580 +<4fc5> 4808 +<4fca> 2350 +<4fce> 4850 +<4fcf> 3147 +<4fd0> 2537 +<4fd1> 4812 +<4fd7> 3532 +<4fd8> 1690 +<4fd9> 10289 +<4fda> 4809 +<4fdb> 10290 +<4fdc> 4811 +<4fdd> 1036 +<4fde> 4294 +<4fdf> 4813 +<4fe0> 8629 +<4fe1> 3984 +<4fe2> 10291 +<4fe3> 4810 +<4fe6> 4805 +<4fe7> 10294 +<4fe8> 4806 +<4fe9> 2546 +<4fea> 4807 +<4fed> 2150 +<4fee> 4009 +<4fef> 1700 +<4ff0> 10297 +<4ff1> 2322 +<4ff2> 10298 +<4ff3> 4817 +<4ff8> 4814 +<4ff9> 10303 +<4ffa> 958 +<4ffe> 4822 +<4fff> 10307 +<5000> 8908 +<5006> 8214 +<5009> 7778 +<500a> 10315 +<500b> 7968 +<500c> 4824 +<500d> 1055 +<500e> 10316 +<500f> 4819 +<5010> 10317 +<5011> 8319 +<5012> 1434 +<5013> 10318 +<5014> 2338 +<5018> 3611 +<5019> 1961 +<501a> 4183 +<501b> 10322 +<501c> 4823 +<501f> 2233 +<5020> 10325 +<5021> 1232 +<5025> 4825 +<5026> 2330 +<5027> 10329 +<5028> 4826 +<5029> 4815 +<502a> 2882 +<502b> 8284 +<502c> 4818 +<502d> 4821 +<502e> 4820 +<503a> 4431 +<503b> 10341 +<503c> 4532 +<503d> 10342 +<503e> 3168 +<5043> 4828 +<5047> 2124 +<5048> 4830 +<5049> 8596 +<504c> 4816 +<504d> 10352 +<504e> 4831 +<504f> 3018 +<5055> 4829 +<505a> 4691 +<505b> 10362 +<505c> 3668 +<5065> 2162 +<506c> 4832 +<5074> 7781 +<5075> 8833 +endcidchar + +100 begincidchar +<5076> 2941 +<5077> 3686 +<507b> 4833 +<507e> 4827 +<507f> 1226 +<5080> 2443 +<5085> 1712 +<5088> 2535 +<508d> 1027 +<5096> 8909 +<5097> 10407 +<5098> 8458 +<5099> 7742 +<50a2> 9855 +<50a3> 1401 +<50a4> 10416 +<50a5> 4834 +<50a6> 10417 +<50a7> 4835 +<50a8> 1317 +<50a9> 4836 +<50ac> 1378 +<50ad> 8750 +<50b2> 972 +<50b3> 7830 +<50b4> 8907 +<50b5> 8812 +<50b6> 10424 +<50b7> 8471 +<50ba> 4837 +<50bb> 3310 +<50be> 8424 +<50c2> 8916 +<50c5> 8121 +<50c9> 8920 +<50cf> 3934 +<50d0> 10442 +<50d1> 8415 +<50d5> 8386 +<50d6> 4838 +<50da> 2574 +<50de> 8597 +<50e5> 8108 +<50e6> 4842 +<50e7> 3303 +<50e8> 8915 +<50ec> 4841 +<50ed> 4840 +<50ee> 4843 +<50f3> 3536 +<50f4> 10465 +<50f5> 2170 +<50f9> 8065 +<50fa> 10469 +<50fb> 3014 +<5100> 8720 +<5101> 10474 +<5102> 8911 +<5103> 10475 +<5104> 8723 +<5105> 10476 +<5106> 4839 +<5107> 4844 +<5108> 8164 +<5109> 8080 +<510a> 10477 +<510b> 4845 +<5110> 8918 +<5111> 10482 +<5112> 3264 +<5113> 10483 +<5114> 8912 +<5115> 8910 +<5118> 9857 +<511f> 7798 +<5120> 10492 +<5121> 2503 +<512a> 8753 +<5132> 7827 +<5137> 8914 +<513a> 8919 +<513b> 8917 +<513c> 8913 +<513f> 1592 +<5140> 4697 +<5141> 4365 +<5142> 10516 +<5143> 4333 +<5144> 4001 +<5145> 1289 +<5146> 4472 +<5147> 10517 +<5148> 3893 +<5149> 1851 +<514a> 10518 +<514b> 2392 +<514c> 10519 +<514d> 2791 +<5151> 1553 +<5152> 7909 +endcidchar + +100 begincidchar +<5153> 10523 +<5154> 3700 +<5155> 4866 +<5156> 4868 +<515a> 1428 +<515b> 10527 +<515c> 1524 +<5162> 2259 +<5165> 3270 +<5168> 3206 +<5169> 8229 +<516a> 10537 +<516b> 982 +<516c> 1796 +<516d> 2626 +<516e> 4854 +<516f> 10538 +<5170> 2471 +<5171> 1803 +<5172> 10539 +<5173> 1841 +<5174> 3990 +<5175> 1121 +<5176> 3075 +<5177> 2318 +<5178> 1477 +<5179> 4645 +<517a> 10540 +<517b> 4129 +<517c> 2137 +<517d> 3445 +<5180> 2096 +<5181> 4858 +<5182> 4765 +<5185> 2877 +<5188> 1743 +<5189> 3224 +<518c> 1192 +<518d> 4380 +<5192> 2741 +<5195> 2790 +<5196> 4884 +<5197> 3258 +<5198> 10555 +<5199> 3967 +<519a> 10556 +<519b> 2347 +<519c> 2922 +<51a0> 1843 +<51a1> 10560 +<51a2> 4885 +<51a3> 10561 +<51a4> 4332 +<51a5> 4886 +<51ab> 4879 +<51ac> 1515 +<51af> 1672 +<51b0> 1122 +<51b1> 4880 +<51b2> 1290 +<51b3> 2341 +<51b4> 10569 +<51b5> 2435 +<51b6> 4152 +<51b7> 2511 +<51bb> 1522 +<51bc> 4882 +<51bd> 4881 +<51c0> 2282 +<51c4> 3071 +<51c5> 10578 +<51c6> 4633 +<51c7> 4883 +<51c8> 10579 +<51c9> 2562 +<51ca> 10580 +<51cb> 1491 +<51cc> 2609 +<51cd> 7887 +<51ce> 10581 +<51cf> 2152 +<51d0> 10582 +<51d1> 1368 +<51db> 2598 +<51dc> 10592 +<51dd> 2912 +<51e0> 2091 +<51e1> 1615 +<51e4> 1676 +<51eb> 4864 +<51ec> 10603 +<51ed> 3037 +<51ee> 10604 +<51ef> 2362 +<51f0> 2016 +<51f1> 8153 +<51f2> 10605 +<51f3> 1451 +<51f4> 10606 +<51f5> 5017 +endcidchar + +100 begincidchar +<51f6> 4002 +<51f7> 10607 +<51f8> 3690 +<51f9> 967 +<51fa> 1307 +<51fb> 2060 +<51fc> 5018 +<51fd> 1894 +<51fe> 10608 +<51ff> 4391 +<5200> 1431 +<5201> 1492 +<5202> 4748 +<5203> 3243 +<5206> 1651 +<5207> 3149 +<5208> 4749 +<5209> 10611 +<520a> 2364 +<520d> 5003 +<520e> 4750 +<5211> 3991 +<5212> 1987 +<5216> 6510 +<5217> 2585 +<5218> 2622 +<5219> 4405 +<521a> 1744 +<521b> 1335 +<521c> 10619 +<521d> 1306 +<5220> 3319 +<5224> 2961 +<5228> 2970 +<5229> 2534 +<522a> 10628 +<522b> 1113 +<522c> 10629 +<522d> 4751 +<522e> 1831 +<522f> 10630 +<5230> 1438 +<5233> 4752 +<5236> 4549 +<5237> 3479 +<5238> 3210 +<5239> 3307 +<523a> 1359 +<523b> 2393 +<523c> 10635 +<523d> 1869 +<523e> 10636 +<5241> 1574 +<5242> 2100 +<5243> 3645 +<5244> 8904 +<5247> 8803 +<524a> 3940 +<524b> 9859 +<524c> 4755 +<524d> 3117 +<5250> 1833 +<5251> 2164 +<5254> 3633 +<5255> 10645 +<5256> 3049 +<525b> 7959 +<525c> 4758 +<525d> 10650 +<525e> 4756 +<5261> 4757 +<5265> 1033 +<5266> 10656 +<5267> 2326 +<5268> 10657 +<5269> 3386 +<526a> 2151 +<526e> 7979 +<526f> 1708 +<5272> 1769 +<5273> 10663 +<5274> 8906 +<5275> 7833 +<527d> 4760 +<527e> 10671 +<527f> 2204 +<5280> 10672 +<5281> 4762 +<5282> 4761 +<5283> 8015 +<5287> 8143 +<5288> 3005 +<5289> 8246 +<528a> 7994 +<528b> 10676 +<528c> 8905 +<528d> 8089 +<5290> 4763 +<5291> 8053 +<5292> 10679 +endcidchar + +100 begincidchar +<5293> 4764 +<529b> 2543 +<529c> 10687 +<529d> 3211 +<529e> 1015 +<529f> 1791 +<52a0> 2118 +<52a1> 3840 +<52a2> 5005 +<52a3> 2588 +<52a8> 1518 +<52a9> 4601 +<52aa> 2925 +<52ab> 2218 +<52b1> 2531 +<52b2> 2257 +<52b3> 2488 +<52be> 5008 +<52bf> 3421 +<52c0> 10705 +<52c1> 8126 +<52c2> 10706 +<52c3> 1137 +<52c7> 4263 +<52c8> 10710 +<52c9> 2792 +<52ca> 10711 +<52cb> 4052 +<52d0> 5010 +<52d1> 10716 +<52d2> 2496 +<52d5> 7885 +<52d6> 5011 +<52d7> 10719 +<52d8> 2366 +<52d9> 8617 +<52da> 10720 +<52db> 8678 +<52dc> 10721 +<52dd> 8487 +<52de> 8195 +<52df> 2847 +<52e2> 8498 +<52e3> 10724 +<52e4> 3159 +<52f0> 5012 +<52f1> 8995 +<52f5> 8209 +<52f8> 8437 +<52f9> 4860 +<52fa> 3344 +<52fe> 1805 +<52ff> 3839 +<5300> 4363 +<5305> 1031 +<5306> 1365 +<5307> 10748 +<5308> 4004 +<530d> 4861 +<530e> 10753 +<530f> 5301 +<5310> 4863 +<5315> 4710 +<5316> 1988 +<5317> 1050 +<5318> 10758 +<5319> 1276 +<531a> 4740 +<531d> 4372 +<5320> 2180 +<5321> 2428 +<5322> 10763 +<5323> 3880 +<5326> 4742 +<532a> 1640 +<532d> 8901 +<532e> 4743 +<532f> 8030 +<5330> 10771 +<5331> 8902 +<5339> 3012 +<533a> 3189 +<533b> 4164 +<533e> 4744 +<533f> 2887 +<5340> 8431 +<5341> 3397 +<5342> 10781 +<5343> 3108 +<5344> 10782 +<5345> 4700 +<5346> 10783 +<5347> 3382 +<5348> 3830 +<5349> 2033 +<534a> 1014 +<534e> 1983 +<534f> 3960 +<5350> 10787 +<5351> 1049 +endcidchar + +100 begincidchar +<5352> 4673 +<5353> 4636 +<5354> 8656 +<5355> 1414 +<5356> 2715 +<5357> 2866 +<535a> 1136 +<535b> 10790 +<535c> 1150 +<535d> 10791 +<535e> 1102 +<535f> 5370 +<5360> 4445 +<5361> 2357 +<5362> 2643 +<5363> 4747 +<5364> 2648 +<5365> 10792 +<5366> 4746 +<5367> 3811 +<5368> 10793 +<5369> 4946 +<536a> 10794 +<536b> 3791 +<536e> 4714 +<536f> 2739 +<5370> 4230 +<5371> 3762 +<5372> 10797 +<5373> 2087 +<5374> 3215 +<5375> 2680 +<5376> 10798 +<5377> 2332 +<5378> 3969 +<5379> 10799 +<537a> 4947 +<537f> 3169 +<5382> 1228 +<5383> 10806 +<5384> 1585 +<5385> 3663 +<5386> 2533 +<5389> 2530 +<538a> 10809 +<538b> 4066 +<538c> 4106 +<538d> 4733 +<5395> 1189 +<5398> 2512 +<5399> 8897 +<539a> 1960 +<539d> 4734 +<539e> 10821 +<539f> 4336 +<53a0> 7780 +<53a1> 10822 +<53a2> 3918 +<53a3> 4735 +<53a4> 10823 +<53a5> 4736 +<53a6> 3888 +<53a7> 10824 +<53a8> 1309 +<53a9> 2294 +<53ad> 8697 +<53ae> 4737 +<53b2> 8208 +<53b3> 10831 +<53b4> 8898 +<53b5> 10832 +<53b6> 5020 +<53bb> 3200 +<53bf> 3909 +<53c0> 10840 +<53c1> 3289 +<53c2> 1173 +<53c3> 7770 +<53c8> 4283 +<53c9> 1197 +<53ca> 2083 +<53cb> 4278 +<53cc> 3488 +<53cd> 1617 +<53d1> 1599 +<53d4> 3452 +<53d5> 10850 +<53d6> 3196 +<53d7> 3443 +<53d8> 1101 +<53d9> 4027 +<53da> 10851 +<53db> 2962 +<53df> 5013 +<53e0> 1503 +<53e1> 10855 +<53e2> 7842 +<53e3> 2407 +<53e4> 1822 +<53e5> 2323 +endcidchar + +100 begincidchar +<53e6> 2614 +<53e7> 10856 +<53e8> 5374 +<53e9> 5373 +<53ea> 4538 +<53eb> 2209 +<53ec> 4474 +<53ed> 979 +<53ee> 1506 +<53ef> 2390 +<53f0> 3579 +<53f1> 5371 +<53f2> 3406 +<53f3> 4279 +<53f4> 10857 +<53f5> 4741 +<53f6> 4157 +<53f7> 1916 +<53f8> 3507 +<53f9> 3601 +<53fa> 10858 +<53fb> 5375 +<53fc> 1489 +<53fd> 5372 +<5400> 10861 +<5401> 4314 +<5402> 10862 +<5403> 1273 +<5404> 1778 +<5405> 10863 +<5406> 5378 +<5407> 10864 +<5408> 1926 +<5409> 2077 +<540a> 1494 +<540b> 10865 +<540c> 3677 +<540d> 2816 +<540e> 1962 +<540f> 2527 +<5410> 3699 +<5411> 3935 +<5412> 5376 +<5413> 3890 +<5414> 10866 +<5415> 2663 +<5416> 5377 +<5417> 2711 +<541b> 2348 +<541c> 10870 +<541d> 2600 +<541e> 3709 +<541f> 4222 +<5420> 1642 +<5421> 5385 +<5422> 10871 +<5423> 5388 +<5426> 1678 +<5427> 980 +<5428> 1557 +<5429> 1649 +<542a> 10874 +<542b> 1891 +<542c> 3664 +<542d> 2401 +<542e> 3494 +<542f> 3091 +<5430> 10875 +<5431> 4519 +<5432> 5389 +<5433> 10876 +<5434> 3825 +<5435> 1240 +<5438> 3851 +<5439> 1336 +<543a> 10879 +<543b> 3798 +<543c> 1959 +<543d> 10880 +<543e> 3824 +<543f> 10881 +<5440> 4070 +<5443> 5384 +<5446> 1399 +<5447> 10886 +<5448> 1263 +<5449> 10887 +<544a> 1761 +<544b> 5379 +<5450> 2856 +<5451> 10892 +<5455> 2940 +<5456> 5383 +<5457> 5386 +<5458> 4340 +<5459> 5387 +<545a> 10893 +<545b> 3127 +<545c> 3815 +<5462> 2875 +endcidchar + +100 begincidchar +<5463> 10899 +<5464> 5394 +<5465> 10900 +<5466> 5399 +<5467> 10901 +<5468> 4571 +<5471> 5393 +<5472> 5410 +<5473> 3781 +<5474> 10910 +<5475> 1918 +<5476> 5398 +<5477> 5392 +<5478> 2975 +<547b> 3364 +<547c> 1963 +<547d> 2817 +<5480> 2310 +<5481> 10915 +<5482> 5390 +<5483> 10916 +<5484> 5397 +<5485> 10917 +<5486> 2969 +<548b> 4423 +<548c> 1924 +<548d> 10922 +<548e> 2299 +<548f> 4258 +<5490> 1723 +<5491> 10923 +<5492> 4579 +<5493> 10924 +<5494> 5391 +<5495> 1815 +<5496> 2356 +<5499> 2629 +<549c> 10927 +<549d> 5400 +<54a3> 5411 +<54a4> 5421 +<54a5> 10933 +<54a6> 5407 +<54a7> 5406 +<54a8> 4646 +<54ab> 5991 +<54ac> 4142 +<54ad> 5402 +<54ae> 10934 +<54af> 2358 +<54b0> 10935 +<54b1> 4382 +<54b2> 10936 +<54b3> 2389 +<54b4> 5404 +<54b8> 3897 +<54bb> 5413 +<54bc> 9069 +<54bd> 4083 +<54be> 10942 +<54bf> 5414 +<54c0> 946 +<54c1> 3030 +<54c2> 5403 +<54c3> 10943 +<54c4> 1948 +<54c5> 10944 +<54c6> 1566 +<54c7> 3724 +<54c8> 1879 +<54c9> 4376 +<54cc> 5415 +<54cd> 3929 +<54ce> 944 +<54cf> 5423 +<54d0> 5401 +<54d1> 4079 +<54d2> 5405 +<54d5> 5412 +<54d6> 10947 +<54d7> 1982 +<54d8> 10948 +<54db> 10949 +<54dc> 5418 +<54dd> 5422 +<54de> 5424 +<54df> 4249 +<54e0> 10950 +<54e1> 8775 +<54e5> 1762 +<54e6> 2935 +<54e7> 5426 +<54e8> 3347 +<54e9> 2545 +<54ea> 2855 +<54ed> 2411 +<54ee> 3941 +<54f2> 4477 +<54f3> 5430 +<54fa> 1151 +endcidchar + +100 begincidchar +<54fb> 10965 +<54fc> 1942 +<54fd> 5428 +<54fe> 10966 +<54ff> 5009 +<5500> 10967 +<5501> 4109 +<5504> 9068 +<5505> 10970 +<5506> 3561 +<5507> 1344 +<5508> 10971 +<5509> 945 +<550f> 5433 +<5510> 3609 +<5511> 5434 +<5514> 5429 +<551b> 5425 +<5520> 5427 +<5521> 10989 +<5524> 2002 +<5527> 5435 +<552a> 5436 +<552b> 10994 +<552c> 1976 +<552d> 10995 +<552e> 3442 +<552f> 3767 +<5530> 5453 +<5531> 1231 +<5532> 10996 +<5533> 5452 +<5537> 5447 +<553c> 5446 +<553d> 11004 +<553e> 3722 +<553f> 5444 +<5540> 11005 +<5541> 5442 +<5542> 11006 +<5543> 2397 +<5544> 4641 +<5545> 11007 +<5546> 3333 +<5549> 5440 +<554a> 940 +<554f> 8604 +<5550> 5445 +<5553> 8393 +<5554> 11016 +<5555> 5443 +<5556> 5448 +<555c> 5454 +<555d> 11022 +<555e> 8688 +<5561> 1637 +<5564> 3008 +<5565> 3311 +<5566> 2461 +<5567> 5437 +<556a> 2943 +<556b> 11029 +<556c> 4730 +<556d> 5441 +<556e> 2905 +<5578> 3952 +<557b> 5466 +<557c> 3639 +<557d> 11038 +<557e> 5463 +<557f> 11039 +<5580> 2355 +<5581> 5461 +<5582> 3784 +<5583> 5457 +<5584> 3327 +<5587> 2457 +<5588> 5460 +<5589> 1956 +<558a> 1895 +<558b> 5455 +<558f> 5438 +<5590> 11045 +<5591> 5465 +<5594> 5470 +<5598> 1328 +<5599> 5471 +<559c> 3871 +<559d> 1919 +<559e> 11053 +<559f> 5462 +<55a7> 4037 +<55aa> 8459 +<55ab> 11063 +<55ac> 8414 +<55ad> 11064 +<55ae> 7850 +<55b1> 5458 +<55b2> 8748 +<55b3> 4414 +endcidchar + +100 begincidchar +<55b4> 11067 +<55b5> 5439 +<55b6> 11068 +<55b7> 2984 +<55b8> 11069 +<55b9> 5459 +<55ba> 11070 +<55bb> 4316 +<55bc> 11071 +<55c4> 5482 +<55c5> 4012 +<55c6> 8408 +<55c7> 8896 +<55c8> 11077 +<55c9> 5474 +<55ce> 8303 +<55d1> 5476 +<55d2> 5456 +<55d3> 3293 +<55d4> 5479 +<55d5> 11082 +<55d6> 5464 +<55da> 8609 +<55db> 11086 +<55dc> 3423 +<55dd> 5481 +<55de> 11087 +<55df> 5467 +<55e0> 11088 +<55e1> 3802 +<55e2> 11089 +<55e3> 3512 +<55e4> 5491 +<55e5> 5484 +<55e6> 5480 +<55e7> 11090 +<55e8> 5489 +<55e9> 9081 +<55ea> 5472 +<55ef> 5483 +<55f4> 11095 +<55f5> 5490 +<55f6> 9074 +<55f7> 5473 +<55fd> 3529 +<55fe> 5499 +<55ff> 11101 +<5600> 5500 +<5601> 5496 +<5606> 8554 +<5607> 11106 +<5608> 5494 +<5609> 2113 +<560c> 5495 +<560d> 9084 +<560e> 1725 +<560f> 4731 +<5614> 8368 +<5615> 11113 +<5616> 9082 +<5617> 7796 +<5618> 4021 +<561b> 2710 +<561c> 9079 +<561d> 11116 +<561e> 5493 +<561f> 5475 +<5623> 5498 +<5624> 5497 +<5627> 5501 +<5628> 11122 +<5629> 8012 +<562c> 5506 +<562d> 5502 +<562e> 9080 +<562f> 8655 +<5630> 9064 +<5631> 4597 +<5632> 1237 +<5633> 11125 +<5634> 4681 +<5635> 9073 +<5636> 3504 +<5637> 11126 +<5638> 9065 +<5639> 5504 +<563a> 11127 +<563b> 3850 +<563f> 1936 +<5640> 11131 +<5641> 9844 +<564c> 5511 +<564d> 5507 +<564e> 4148 +<5654> 5512 +<5657> 5505 +<5658> 5503 +<5659> 5509 +<565c> 5510 +<565d> 9071 +endcidchar + +100 begincidchar +<5660> 9072 +<5661> 11153 +<5662> 5508 +<5663> 11154 +<5664> 5514 +<5665> 9078 +<5666> 9075 +<5667> 11155 +<5668> 3094 +<5669> 4706 +<566a> 4398 +<566b> 5516 +<566c> 3424 +<566f> 9087 +<5670> 11158 +<5671> 5515 +<5672> 9076 +<5673> 11159 +<5674> 8373 +<5675> 11160 +<5676> 1724 +<5677> 11161 +<5678> 7899 +<5679> 9842 +<567a> 11162 +<5680> 9070 +<5685> 5519 +<5686> 5513 +<5687> 8631 +<568c> 9077 +<568d> 11174 +<568e> 1910 +<568f> 3642 +<5693> 5520 +<5694> 11178 +<5695> 9090 +<5699> 8350 +<56a3> 3942 +<56a6> 9067 +<56a7> 11193 +<56a8> 8249 +<56ae> 9887 +<56af> 5521 +<56b3> 9085 +<56b4> 8693 +<56b5> 11202 +<56b6> 9089 +<56b7> 3229 +<56bc> 2193 +<56c0> 9083 +<56c1> 9086 +<56c2> 8652 +<56c5> 8923 +<56c8> 9066 +<56c9> 9865 +<56ca> 2869 +<56cb> 11214 +<56cc> 9879 +<56d1> 8865 +<56d4> 5522 +<56d7> 5523 +<56da> 3185 +<56db> 3513 +<56dc> 11225 +<56dd> 5524 +<56de> 2029 +<56df> 4716 +<56e0> 4217 +<56e1> 5525 +<56e2> 3702 +<56e3> 11226 +<56e4> 1561 +<56eb> 5527 +<56ec> 11233 +<56ed> 4339 +<56f0> 2450 +<56f1> 1364 +<56f4> 3766 +<56f5> 5526 +<56f9> 5528 +<56fa> 1829 +<56fd> 1875 +<56fe> 3693 +<56ff> 5529 +<5703> 3059 +<5704> 5530 +<5705> 11246 +<5706> 4341 +<5707> 9091 +<5708> 3201 +<5709> 5532 +<570a> 5531 +<570b> 7997 +<570c> 11247 +<570d> 8591 +<5712> 8774 +<5713> 8776 +<5716> 8574 +<5717> 11254 +<5718> 8576 +endcidchar + +100 begincidchar +<571c> 5533 +<571f> 3698 +<5723> 3388 +<5728> 4381 +<5729> 5031 +<572a> 5033 +<572b> 11267 +<572c> 5032 +<572d> 1856 +<5730> 1465 +<5733> 5034 +<5739> 5035 +<573a> 1222 +<573b> 5039 +<573e> 2061 +<573f> 11277 +<5740> 4534 +<5741> 11278 +<5742> 5040 +<5747> 2344 +<574a> 1624 +<574b> 11285 +<574c> 5024 +<574d> 3585 +<574e> 2367 +<574f> 1994 +<5750> 4693 +<5751> 2400 +<5757> 2422 +<575a> 2132 +<575b> 3590 +<575c> 5038 +<575d> 990 +<575e> 3834 +<575f> 1653 +<5760> 4630 +<5761> 3041 +<5764> 2447 +<5765> 11295 +<5766> 3596 +<5767> 11296 +<5768> 5047 +<5769> 5041 +<576a> 3033 +<576b> 5043 +<576c> 11297 +<576d> 5048 +<576e> 11298 +<576f> 3000 +<5773> 5050 +<5776> 5049 +<5777> 2381 +<577b> 5046 +<577c> 5045 +<5782> 1340 +<5783> 2455 +<5784> 2633 +<5785> 5042 +<5786> 5044 +<578b> 3992 +<578c> 5053 +<5792> 2504 +<5793> 5058 +<579b> 1569 +<57a0> 5059 +<57a1> 5026 +<57a2> 1809 +<57a3> 4334 +<57a4> 5052 +<57a5> 11332 +<57a6> 2398 +<57a7> 5056 +<57a8> 11333 +<57a9> 5025 +<57aa> 11334 +<57ab> 1479 +<57ac> 11335 +<57ad> 5051 +<57ae> 2418 +<57b2> 5054 +<57b3> 11339 +<57b4> 5057 +<57b8> 5065 +<57c2> 1786 +<57c3> 942 +<57cb> 2712 +<57ce> 1260 +<57cf> 5055 +<57d2> 5064 +<57d3> 11363 +<57d4> 3057 +<57d5> 5060 +<57d8> 5061 +<57d9> 5063 +<57da> 5062 +<57dd> 5070 +<57de> 11368 +<57df> 4311 +<57e0> 1153 +<57e1> 9002 +endcidchar + +100 begincidchar +<57e4> 5069 +<57ed> 5074 +<57ee> 11379 +<57ef> 5067 +<57f4> 5066 +<57f7> 8843 +<57f8> 5068 +<57f9> 2977 +<57fa> 2062 +<57fd> 5073 +<5800> 5075 +<5801> 11390 +<5802> 3606 +<5805> 8069 +<5806> 1552 +<5807> 5196 +<580a> 8997 +<580b> 5071 +<580c> 11395 +<580d> 5072 +<5811> 3122 +<5815> 1576 +<5816> 9004 +<5819> 5077 +<581d> 9006 +<581e> 5076 +<581f> 11407 +<5820> 5079 +<5821> 1037 +<5824> 1453 +<582a> 2365 +<582f> 8709 +<5830> 4104 +<5831> 7736 +<5834> 7795 +<5835> 1537 +<5844> 5078 +<584a> 8163 +<584b> 9017 +<584c> 3567 +<584d> 6563 +<584e> 11440 +<584f> 9003 +<5850> 11441 +<5851> 3537 +<5852> 9005 +<5853> 11442 +<5854> 3571 +<5857> 8575 +<5858> 3604 +<585e> 3286 +<5862> 8615 +<5863> 11453 +<5864> 9007 +<5865> 5080 +<586b> 3649 +<586c> 5081 +<5875> 7805 +<5879> 8406 +<587e> 5027 +<587f> 11474 +<5880> 5085 +<5881> 5082 +<5882> 11475 +<5883> 2274 +<5884> 11476 +<5885> 3474 +<5889> 5083 +<588a> 7874 +<5892> 3331 +<5893> 2844 +<5899> 3130 +<589a> 5084 +<589b> 11492 +<589c> 8882 +<589d> 11493 +<589e> 4409 +<589f> 4017 +<58a8> 2830 +<58a9> 1556 +<58ae> 7903 +<58b3> 7929 +<58bb> 8409 +<58bc> 5028 +<58bd> 11517 +<58be> 8157 +<58c1> 1091 +<58c5> 5029 +<58c6> 11523 +<58c7> 8551 +<58d1> 5030 +<58d2> 11533 +<58d3> 8685 +<58d4> 11534 +<58d5> 1909 +<58d8> 8199 +<58d9> 8998 +<58da> 9001 +<58de> 8018 +<58df> 8251 +endcidchar + +100 begincidchar +<58e0> 9000 +<58e1> 11540 +<58e2> 8999 +<58e3> 11541 +<58e4> 3227 +<58e9> 7723 +<58ea> 11546 +<58eb> 3414 +<58ec> 3236 +<58ed> 11547 +<58ee> 4624 +<58ef> 8878 +<58f0> 3378 +<58f3> 2388 +<58f6> 1967 +<58f9> 4163 +<58fa> 8009 +<58fd> 8504 +<5902> 5660 +<5903> 11560 +<5904> 1321 +<5907> 1057 +<590d> 1711 +<590e> 11568 +<590f> 3889 +<5914> 4859 +<5915> 3859 +<5916> 3731 +<5919> 4865 +<591a> 1567 +<591b> 11575 +<591c> 4160 +<591f> 1812 +<5922> 8321 +<5923> 11580 +<5924> 5659 +<5925> 5657 +<5926> 11581 +<5927> 1398 +<5928> 11582 +<5929> 3647 +<592a> 3582 +<592b> 1679 +<592c> 11583 +<592d> 4712 +<592e> 4116 +<592f> 1906 +<5930> 11584 +<5931> 3390 +<5934> 3688 +<5937> 4171 +<5938> 2417 +<5939> 2115 +<593a> 1568 +<593b> 11589 +<593c> 5295 +<593d> 11590 +<593e> 8060 +<5941> 5296 +<5942> 5004 +<5943> 11593 +<5944> 4098 +<5947> 3077 +<5948> 2865 +<5949> 1675 +<594a> 11596 +<594b> 1657 +<594e> 2441 +<594f> 4669 +<5950> 11599 +<5951> 3092 +<5954> 1061 +<5955> 5298 +<5956> 2178 +<5957> 3626 +<5958> 5300 +<5959> 11602 +<595a> 5299 +<5960> 1485 +<5961> 11608 +<5962> 3350 +<5965> 973 +<5969> 9051 +<596a> 7902 +<596b> 11614 +<596c> 8098 +<596d> 11615 +<596e> 7930 +<5973> 2927 +<5974> 2924 +<5975> 11620 +<5976> 2863 +<5977> 11621 +<5978> 2140 +<5979> 3570 +<597d> 1914 +<5981> 6005 +<5982> 3266 +<5983> 6006 +<5984> 3758 +endcidchar + +100 begincidchar +<5985> 11628 +<5986> 4622 +<5987> 1721 +<5988> 2703 +<5989> 11629 +<598a> 3244 +<598d> 6007 +<5992> 1545 +<5993> 2110 +<5996> 4134 +<5997> 6011 +<5998> 11638 +<5999> 2803 +<599d> 8877 +<599e> 6014 +<59a3> 6010 +<59a4> 6015 +<59a5> 3720 +<59a8> 1630 +<59ab> 6013 +<59ae> 2880 +<59af> 6018 +<59b2> 6017 +<59b9> 2760 +<59ba> 11658 +<59bb> 3069 +<59be> 6020 +<59c6> 2842 +<59ca> 6012 +<59cb> 3411 +<59d0> 2228 +<59d1> 1820 +<59d2> 6016 +<59d3> 4000 +<59d4> 3774 +<59d7> 6019 +<59d8> 6026 +<59d9> 11677 +<59da> 4141 +<59db> 11678 +<59dc> 2171 +<59dd> 6023 +<59e3> 6025 +<59e4> 11684 +<59e5> 2492 +<59e8> 4179 +<59ec> 2074 +<59f9> 6027 +<59fa> 11702 +<59fb> 4221 +<59ff> 4648 +<5a00> 11706 +<5a01> 3759 +<5a02> 11707 +<5a03> 3727 +<5a04> 2637 +<5a07> 2192 +<5a08> 6024 +<5a09> 6029 +<5a0c> 6028 +<5a11> 6032 +<5a12> 11714 +<5a13> 6034 +<5a18> 2898 +<5a1c> 2859 +<5a1f> 2329 +<5a20> 3368 +<5a23> 6033 +<5a24> 11726 +<5a25> 1583 +<5a29> 2793 +<5a31> 4302 +<5a32> 6030 +<5a33> 11737 +<5a34> 6031 +<5a35> 11738 +<5a36> 3197 +<5a3c> 6039 +<5a40> 6035 +<5a41> 8255 +<5a46> 3044 +<5a49> 3746 +<5a4a> 6037 +<5a55> 6038 +<5a5a> 2046 +<5a62> 6040 +<5a66> 7950 +<5a67> 6036 +<5a6a> 2466 +<5a6d> 9209 +<5a74> 4233 +<5a75> 6041 +<5a76> 3373 +<5a77> 6045 +<5a7a> 6046 +<5a7f> 4033 +<5a92> 2754 +<5a9a> 2761 +<5a9b> 6044 +<5aa7> 9212 +endcidchar + +100 begincidchar +<5aaa> 6043 +<5ab2> 6049 +<5ab3> 3870 +<5ab4> 11838 +<5ab5> 6564 +<5ab8> 6052 +<5abd> 8297 +<5abe> 6047 +<5ac1> 2129 +<5ac2> 3298 +<5ac9> 2088 +<5acc> 3904 +<5ad2> 6050 +<5ad3> 11860 +<5ad4> 6051 +<5ad5> 11861 +<5ad6> 6056 +<5ad7> 9207 +<5ad8> 6058 +<5adc> 6059 +<5ae0> 6053 +<5ae1> 1462 +<5ae2> 11868 +<5ae3> 6054 +<5ae6> 6057 +<5ae9> 2878 +<5aea> 11873 +<5aeb> 6048 +<5af1> 6055 +<5af5> 9206 +<5afb> 9213 +<5b00> 9208 +<5b08> 9210 +<5b09> 6060 +<5b0a> 11898 +<5b0b> 9214 +<5b0c> 8104 +<5b16> 6062 +<5b17> 6061 +<5b18> 11908 +<5b19> 9217 +<5b21> 9215 +<5b2a> 9216 +<5b30> 8737 +<5b31> 11929 +<5b32> 6063 +<5b33> 11930 +<5b34> 4876 +<5b37> 6064 +<5b38> 8482 +<5b40> 6065 +<5b4c> 9211 +<5b50> 4656 +<5b51> 6071 +<5b52> 11954 +<5b53> 6072 +<5b54> 2404 +<5b55> 4371 +<5b56> 11955 +<5b57> 4659 +<5b58> 1385 +<5b59> 3556 +<5b5a> 6068 +<5b5b> 4729 +<5b5c> 4651 +<5b5d> 3949 +<5b5e> 11956 +<5b5f> 2772 +<5b62> 6073 +<5b63> 2097 +<5b64> 1819 +<5b65> 6069 +<5b66> 4048 +<5b69> 1881 +<5b6a> 2678 +<5b6b> 8538 +<5b6c> 4705 +<5b70> 3458 +<5b71> 5994 +<5b72> 11964 +<5b73> 6070 +<5b74> 11965 +<5b75> 1682 +<5b78> 8677 +<5b79> 11968 +<5b7a> 3265 +<5b7d> 2904 +<5b7e> 11971 +<5b7f> 8279 +<5b80> 5934 +<5b81> 2913 +<5b82> 11972 +<5b83> 3569 +<5b84> 5935 +<5b85> 4429 +<5b86> 11973 +<5b87> 4307 +<5b88> 3439 +<5b89> 957 +<5b8a> 11974 +endcidchar + +100 begincidchar +<5b8b> 3523 +<5b8c> 3739 +<5b8f> 1953 +<5b93> 5937 +<5b94> 11980 +<5b95> 5936 +<5b96> 11981 +<5b97> 4663 +<5b98> 1842 +<5b99> 4581 +<5b9a> 1511 +<5b9b> 3745 +<5b9c> 4178 +<5b9d> 1039 +<5b9e> 3404 +<5b9f> 11982 +<5ba0> 1293 +<5ba1> 3372 +<5ba2> 2394 +<5ba3> 4038 +<5ba4> 3433 +<5ba5> 5938 +<5ba6> 2007 +<5baa> 3913 +<5bab> 1797 +<5bb0> 4378 +<5bb3> 1885 +<5bb4> 4112 +<5bb5> 3945 +<5bb6> 2117 +<5bb7> 11992 +<5bb8> 5939 +<5bb9> 3256 +<5bbd> 2426 +<5bbe> 1119 +<5bbf> 3539 +<5bc2> 2104 +<5bc3> 11998 +<5bc4> 2103 +<5bc5> 4225 +<5bc6> 2785 +<5bc7> 2409 +<5bcc> 1718 +<5bd0> 2759 +<5bd1> 12006 +<5bd2> 1893 +<5bd3> 4325 +<5bdd> 3163 +<5bde> 2834 +<5bdf> 1203 +<5be0> 12016 +<5be1> 1834 +<5be2> 8421 +<5be3> 12017 +<5be4> 5943 +<5be5> 2577 +<5be6> 8495 +<5be7> 8355 +<5be8> 4432 +<5be9> 8481 +<5bea> 12018 +<5beb> 8660 +<5bec> 8165 +<5bed> 12019 +<5bee> 5944 +<5bef> 12020 +<5bf0> 5946 +<5bf5> 7818 +<5bf6> 7735 +<5bf7> 12025 +<5bf8> 1386 +<5bf9> 1555 +<5bfa> 3511 +<5bfb> 4057 +<5bfc> 1437 +<5bff> 3440 +<5c00> 12028 +<5c01> 1663 +<5c04> 3357 +<5c05> 12031 +<5c06> 2172 +<5c07> 8094 +<5c08> 8870 +<5c09> 3789 +<5c0a> 4685 +<5c0b> 8680 +<5c0c> 12032 +<5c0d> 7898 +<5c0e> 7865 +<5c0f> 3948 +<5c10> 12033 +<5c11> 3346 +<5c14> 1594 +<5c15> 6066 +<5c16> 2133 +<5c17> 12036 +<5c18> 1251 +<5c19> 12037 +<5c1a> 3337 +<5c1b> 12038 +endcidchar + +100 begincidchar +<5c1c> 6067 +<5c1d> 1223 +<5c22> 5302 +<5c23> 12043 +<5c24> 4269 +<5c25> 5303 +<5c26> 12044 +<5c27> 4137 +<5c2c> 5304 +<5c31> 2300 +<5c34> 5305 +<5c37> 9052 +<5c38> 3395 +<5c39> 4227 +<5c3a> 1284 +<5c3b> 5990 +<5c3c> 2884 +<5c3d> 2256 +<5c3e> 3777 +<5c3f> 2901 +<5c40> 2309 +<5c41> 3015 +<5c42> 1194 +<5c45> 2306 +<5c48> 3193 +<5c49> 3646 +<5c4a> 2237 +<5c4b> 3820 +<5c4e> 3409 +<5c4f> 3040 +<5c50> 5992 +<5c51> 3975 +<5c55> 4442 +<5c59> 5993 +<5c5e> 3467 +<5c5f> 12073 +<5c60> 3697 +<5c61> 2668 +<5c62> 8272 +<5c63> 5995 +<5c64> 7783 +<5c65> 2667 +<5c66> 5996 +<5c67> 12074 +<5c68> 9204 +<5c6c> 8510 +<5c6d> 12078 +<5c6e> 6004 +<5c6f> 3710 +<5c70> 12079 +<5c71> 3318 +<5c79> 4192 +<5c7a> 5548 +<5c7f> 4305 +<5c80> 12091 +<5c81> 3551 +<5c82> 3088 +<5c88> 5552 +<5c8c> 5547 +<5c8d> 5549 +<5c90> 5550 +<5c91> 5555 +<5c94> 1204 +<5c95> 12104 +<5c96> 5551 +<5c97> 1749 +<5c9a> 5556 +<5c9b> 1435 +<5c9c> 5557 +<5ca1> 7958 +<5ca2> 5559 +<5ca3> 5564 +<5ca9> 4091 +<5caa> 12114 +<5cab> 5562 +<5cac> 5561 +<5cad> 2612 +<5cb1> 5563 +<5cb2> 12118 +<5cb3> 4355 +<5cb4> 12119 +<5cb5> 5558 +<5cb6> 12120 +<5cb7> 5566 +<5cb8> 961 +<5cbd> 5560 +<5cbe> 12125 +<5cbf> 2438 +<5cc0> 12126 +<5cc1> 5565 +<5cc4> 5567 +<5ccb> 5570 +<5cd2> 5568 +<5cd9> 4548 +<5ce1> 3884 +<5ce4> 5569 +<5ce5> 5571 +<5ce6> 2676 +<5ce7> 12156 +<5ce8> 1578 +endcidchar + +100 begincidchar +<5ce9> 12157 +<5cea> 4317 +<5ced> 3146 +<5cf0> 1666 +<5cf4> 9097 +<5cf5> 12165 +<5cf6> 7863 +<5cfb> 2349 +<5cfc> 12170 +<5cfd> 8628 +<5d06> 5579 +<5d07> 1292 +<5d0d> 9103 +<5d0e> 3080 +<5d14> 1377 +<5d15> 12187 +<5d16> 4075 +<5d17> 7962 +<5d1b> 5580 +<5d1e> 5578 +<5d24> 5577 +<5d25> 12198 +<5d26> 5575 +<5d27> 5574 +<5d28> 12199 +<5d29> 1065 +<5d2c> 9099 +<5d2d> 4441 +<5d2e> 5576 +<5d34> 5583 +<5d3d> 5584 +<5d3e> 5582 +<5d47> 6946 +<5d4a> 5591 +<5d4b> 5590 +<5d4c> 3123 +<5d50> 9098 +<5d58> 5581 +<5d5b> 5586 +<5d5c> 12237 +<5d5d> 5588 +<5d69> 5592 +<5d6a> 12249 +<5d6b> 5589 +<5d6c> 5585 +<5d6f> 5587 +<5d74> 5593 +<5d81> 9105 +<5d82> 5594 +<5d83> 12268 +<5d84> 8817 +<5d87> 9096 +<5d97> 9102 +<5d98> 12286 +<5d99> 5595 +<5d9d> 5596 +<5da0> 9101 +<5da7> 9100 +<5db7> 5598 +<5db8> 9104 +<5db9> 12313 +<5dba> 8243 +<5dbb> 12314 +<5dbc> 8764 +<5dc5> 5599 +<5dcb> 8169 +<5dcc> 12328 +<5dcd> 3760 +<5dd2> 8277 +<5dd3> 12333 +<5dd4> 9106 +<5ddb> 6165 +<5ddc> 12340 +<5ddd> 1323 +<5dde> 4572 +<5de1> 4059 +<5de2> 1239 +<5de5> 1789 +<5de6> 4688 +<5de7> 3142 +<5de8> 2317 +<5de9> 1799 +<5dea> 12345 +<5deb> 3814 +<5dee> 1205 +<5def> 5023 +<5df0> 8996 +<5df1> 2093 +<5df2> 4184 +<5df3> 3517 +<5df4> 984 +<5df7> 3932 +<5dfd> 4855 +<5dfe> 2238 +<5dff> 12355 +<5e00> 12356 +<5e01> 1083 +<5e02> 3431 +<5e03> 1155 +<5e04> 12357 +endcidchar + +100 begincidchar +<5e05> 3484 +<5e06> 1608 +<5e07> 12358 +<5e08> 3389 +<5e0c> 3856 +<5e0f> 5534 +<5e10> 4459 +<5e11> 5537 +<5e14> 5536 +<5e15> 2946 +<5e16> 3662 +<5e17> 12366 +<5e18> 2554 +<5e19> 5535 +<5e1a> 4578 +<5e1b> 1142 +<5e1c> 4547 +<5e1d> 1468 +<5e25> 8515 +<5e26> 1403 +<5e27> 4512 +<5e2b> 8489 +<5e2c> 12377 +<5e2d> 3868 +<5e2e> 1018 +<5e31> 5538 +<5e32> 12380 +<5e33> 8823 +<5e36> 7847 +<5e37> 5541 +<5e38> 1224 +<5e3d> 2742 +<5e40> 8837 +<5e41> 12387 +<5e42> 2786 +<5e43> 9092 +<5e44> 5542 +<5e45> 1686 +<5e4c> 2020 +<5e54> 5543 +<5e55> 2846 +<5e56> 12401 +<5e57> 9095 +<5e58> 9094 +<5e5b> 5544 +<5e5e> 5545 +<5e5f> 8848 +<5e60> 12406 +<5e61> 5546 +<5e62> 1332 +<5e63> 7748 +<5e6b> 7730 +<5e6c> 9093 +<5e72> 1732 +<5e73> 3036 +<5e74> 2893 +<5e75> 12419 +<5e76> 1129 +<5e77> 12420 +<5e78> 3997 +<5e79> 7955 +<5e7a> 6163 +<5e7b> 2008 +<5e7c> 4284 +<5e7d> 4265 +<5e7e> 8051 +<5e7f> 1852 +<5e80> 5681 +<5e84> 4620 +<5e85> 12424 +<5e86> 3177 +<5e87> 1084 +<5e8a> 1333 +<5e8b> 5683 +<5e8f> 4029 +<5e90> 2645 +<5e91> 5682 +<5e92> 12430 +<5e93> 2415 +<5e94> 4235 +<5e95> 1464 +<5e96> 5684 +<5e97> 1483 +<5e98> 12431 +<5e99> 2802 +<5e9a> 1784 +<5e9b> 12432 +<5e9c> 1705 +<5e9d> 12433 +<5e9e> 2964 +<5e9f> 1644 +<5ea0> 5686 +<5ea5> 5685 +<5ea6> 1543 +<5ea7> 4694 +<5eab> 8160 +<5eac> 12441 +<5ead> 3670 +<5eb3> 5690 +<5eb4> 12447 +endcidchar + +100 begincidchar +<5eb5> 5688 +<5eb6> 3475 +<5eb7> 2370 +<5eb8> 4254 +<5eb9> 5687 +<5ebe> 5689 +<5ec9> 2551 +<5eca> 2483 +<5ed1> 5693 +<5ed2> 5692 +<5ed3> 2453 +<5ed6> 2583 +<5edb> 5694 +<5edf> 8327 +<5ee0> 7800 +<5ee1> 9134 +<5ee2> 7926 +<5ee3> 7985 +<5ee8> 5695 +<5ee9> 12481 +<5eea> 5696 +<5eeb> 12482 +<5eec> 8261 +<5ef3> 8568 +<5ef4> 5016 +<5ef5> 12489 +<5ef6> 4092 +<5ef7> 3667 +<5efa> 2169 +<5efe> 5293 +<5eff> 4699 +<5f00> 2359 +<5f01> 5021 +<5f02> 4211 +<5f03> 3097 +<5f04> 2923 +<5f08> 5294 +<5f09> 12498 +<5f0a> 1088 +<5f0b> 5366 +<5f0f> 3412 +<5f10> 12502 +<5f11> 5369 +<5f12> 12503 +<5f13> 1798 +<5f14> 12504 +<5f15> 4228 +<5f16> 12505 +<5f17> 1696 +<5f18> 1954 +<5f1b> 1279 +<5f1f> 1469 +<5f20> 4454 +<5f25> 2779 +<5f26> 3903 +<5f27> 1974 +<5f28> 12515 +<5f29> 5999 +<5f2a> 5998 +<5f2d> 6000 +<5f2e> 12518 +<5f2f> 3733 +<5f30> 12519 +<5f31> 3280 +<5f32> 12520 +<5f33> 9205 +<5f34> 12521 +<5f35> 8821 +<5f39> 1424 +<5f3a> 3132 +<5f3b> 12525 +<5f3c> 6002 +<5f40> 6590 +<5f46> 9838 +<5f47> 12534 +<5f48> 7856 +<5f4c> 8323 +<5f4d> 12538 +<5f4e> 8584 +<5f4f> 12539 +<5f50> 5986 +<5f51> 12540 +<5f52> 1858 +<5f53> 1426 +<5f54> 12541 +<5f55> 2659 +<5f56> 5988 +<5f57> 5987 +<5f58> 5989 +<5f59> 9852 +<5f5d> 4180 +<5f61> 5614 +<5f62> 3993 +<5f63> 12548 +<5f64> 3679 +<5f65> 12549 +<5f66> 4110 +<5f69> 1169 +<5f6a> 1108 +<5f6b> 12552 +endcidchar + +100 begincidchar +<5f6c> 1115 +<5f6d> 2990 +<5f70> 4452 +<5f71> 4245 +<5f72> 12555 +<5f73> 5600 +<5f77> 5601 +<5f78> 12559 +<5f79> 4194 +<5f7a> 12560 +<5f7b> 1246 +<5f7c> 1076 +<5f80> 3754 +<5f81> 4504 +<5f82> 5602 +<5f83> 12564 +<5f84> 2277 +<5f85> 1408 +<5f86> 12565 +<5f87> 5603 +<5f88> 1939 +<5f89> 5604 +<5f8a> 1991 +<5f8b> 2672 +<5f8c> 5605 +<5f90> 4023 +<5f91> 8133 +<5f92> 3694 +<5f95> 5606 +<5f96> 12571 +<5f97> 1444 +<5f98> 2952 +<5f99> 5607 +<5f9c> 5608 +<5f9d> 12574 +<5f9e> 7841 +<5f9f> 12575 +<5fa0> 9107 +<5fa1> 4318 +<5fa8> 5609 +<5fa9> 7947 +<5faa> 4054 +<5fad> 5610 +<5fae> 3761 +<5fb5> 5611 +<5fb6> 12590 +<5fb7> 1443 +<5fb8> 12591 +<5fb9> 7804 +<5fbc> 5612 +<5fbd> 2026 +<5fc3> 3983 +<5fc4> 5698 +<5fc5> 1089 +<5fc6> 4203 +<5fc9> 5699 +<5fcc> 2108 +<5fcd> 3239 +<5fce> 12603 +<5fcf> 5701 +<5fd0> 6668 +<5fd1> 6667 +<5fd2> 5367 +<5fd6> 5700 +<5fd7> 4541 +<5fd8> 3757 +<5fd9> 2731 +<5fdd> 5763 +<5fe0> 4561 +<5fe1> 5705 +<5fe4> 5706 +<5fe7> 4268 +<5fea> 5710 +<5feb> 2425 +<5fec> 12618 +<5fed> 5711 +<5fee> 5703 +<5ff1> 1253 +<5ff5> 2897 +<5ff8> 5712 +<5ffb> 3982 +<5ffc> 12628 +<5ffd> 1965 +<5ffe> 5707 +<5fff> 1659 +<6000> 1992 +<6001> 3583 +<6002> 3520 +<6003> 5702 +<6004> 5704 +<600a> 5721 +<600d> 5718 +<600e> 4408 +<600f> 5717 +<6012> 2926 +<6013> 12636 +<6014> 4507 +<6015> 2947 +<6016> 1159 +<6019> 5713 +endcidchar + +100 begincidchar +<601a> 12639 +<601b> 5716 +<601c> 2552 +<601d> 3505 +<6020> 1410 +<6021> 5723 +<6025> 2084 +<6026> 5715 +<6027> 3999 +<6028> 4348 +<6029> 5719 +<602a> 1839 +<602b> 5720 +<602f> 3152 +<6035> 5714 +<603b> 4665 +<603c> 6669 +<603f> 5722 +<6040> 12660 +<6041> 6673 +<6042> 5728 +<6043> 3432 +<604b> 2558 +<604c> 12668 +<604d> 2021 +<6050> 2403 +<6051> 12671 +<6052> 1946 +<6055> 3478 +<6059> 6674 +<605a> 6671 +<605d> 6670 +<6062> 2027 +<6063> 6675 +<6064> 4031 +<6067> 6672 +<6068> 1941 +<6069> 1590 +<606a> 5729 +<606b> 1521 +<606c> 3652 +<606d> 1792 +<606e> 12685 +<606f> 3855 +<6070> 3102 +<6073> 2399 +<6076> 1584 +<6077> 12690 +<607a> 5727 +<607b> 5726 +<607c> 2872 +<607d> 5730 +<607e> 12691 +<607f> 4262 +<6083> 5735 +<6084> 3137 +<6089> 3857 +<608c> 5737 +<608d> 1902 +<6092> 5736 +<6093> 12705 +<6094> 2031 +<6095> 12706 +<6096> 5731 +<609a> 5732 +<609b> 5738 +<609c> 12710 +<609d> 5734 +<609e> 12711 +<609f> 3841 +<60a0> 4267 +<60a3> 2001 +<60a6> 4358 +<60a7> 12716 +<60a8> 2909 +<60ab> 6676 +<60ac> 4039 +<60ad> 5733 +<60ae> 12719 +<60af> 2810 +<60b0> 12720 +<60b1> 5741 +<60b2> 1048 +<60b3> 12721 +<60b4> 5746 +<60b5> 9140 +<60b6> 8318 +<60b7> 12722 +<60b8> 2101 +<60bb> 5740 +<60bc> 1440 +<60c5> 3174 +<60c6> 5744 +<60ca> 2265 +<60cb> 3744 +<60d1> 2056 +<60d5> 3643 +<60d8> 5743 +<60d9> 12746 +<60da> 5745 +endcidchar + +100 begincidchar +<60db> 12747 +<60dc> 3860 +<60dd> 5742 +<60de> 12748 +<60df> 3768 +<60e0> 2034 +<60e1> 7907 +<60e6> 1484 +<60e7> 2324 +<60e8> 1177 +<60e9> 1266 +<60ea> 12753 +<60eb> 1058 +<60ec> 5739 +<60ed> 1176 +<60ee> 1421 +<60ef> 1848 +<60f0> 1575 +<60f1> 8341 +<60f2> 9147 +<60f3> 3928 +<60f4> 5751 +<60f5> 12754 +<60f6> 2017 +<60f9> 3234 +<60fa> 3989 +<60fb> 9145 +<6100> 5752 +<6101> 1299 +<6106> 6677 +<6107> 12765 +<6108> 4319 +<6109> 4297 +<610d> 6678 +<610e> 5753 +<610f> 4201 +<6115> 5749 +<611a> 4291 +<611b> 7720 +<611c> 9149 +<611f> 1739 +<6120> 5747 +<6123> 5750 +<6124> 1660 +<6125> 12782 +<6126> 5748 +<6127> 2445 +<612b> 5754 +<6134> 9141 +<6137> 9146 +<613e> 9139 +<613f> 4347 +<6148> 1355 +<6149> 12810 +<614a> 5755 +<614b> 8546 +<614c> 2010 +<614d> 12811 +<614e> 3376 +<6151> 3358 +<6155> 2848 +<6158> 7774 +<6159> 12819 +<615a> 7773 +<615d> 6679 +<615e> 12822 +<615f> 9143 +<6162> 2724 +<6163> 7983 +<6164> 9439 +<6167> 2032 +<6168> 2363 +<6169> 12827 +<616a> 9138 +<616b> 8526 +<616e> 8274 +<616f> 12830 +<6170> 3790 +<6173> 9148 +<6174> 12833 +<6175> 5756 +<6176> 8427 +<6177> 2371 +<6182> 8754 +<618a> 7743 +<618b> 1112 +<618e> 4410 +<618f> 12853 +<6190> 8219 +<6191> 8380 +<6192> 9150 +<6193> 12854 +<6194> 5758 +<619a> 7854 +<619d> 6681 +<61a4> 7931 +<61a7> 5759 +<61a8> 1888 +<61a9> 6680 +<61aa> 12870 +endcidchar + +100 begincidchar +<61ab> 8329 +<61ac> 5757 +<61ad> 12871 +<61ae> 9137 +<61b2> 8644 +<61b6> 8724 +<61b7> 5760 +<61be> 1901 +<61c2> 1517 +<61c7> 8158 +<61c8> 3971 +<61c9> 8739 +<61ca> 974 +<61cb> 6682 +<61cc> 9142 +<61d1> 6683 +<61d2> 2476 +<61d3> 12895 +<61d4> 5761 +<61de> 9868 +<61df> 9438 +<61e3> 9440 +<61e6> 2932 +<61e7> 12910 +<61e8> 9144 +<61f2> 7809 +<61f5> 5762 +<61f6> 8190 +<61f7> 8017 +<61f8> 8673 +<61f9> 12922 +<61fa> 9136 +<61fb> 12923 +<61fc> 8142 +<61fd> 12924 +<61fe> 8478 +<61ff> 5088 +<6200> 8225 +<6206> 6684 +<6207> 9441 +<6208> 1765 +<6209> 12930 +<620a> 3835 +<620b> 6393 +<620c> 4018 +<620d> 3472 +<620e> 3249 +<620f> 3876 +<6210> 1262 +<6211> 3809 +<6212> 2229 +<6213> 12931 +<6214> 9379 +<6215> 5790 +<6216> 2055 +<6217> 6394 +<6218> 4446 +<6219> 12932 +<621a> 3068 +<621b> 6395 +<621f> 6396 +<6220> 12936 +<6221> 6398 +<6222> 6397 +<6223> 12937 +<6224> 6400 +<6225> 6399 +<6226> 12938 +<6227> 9380 +<622a> 2217 +<622b> 12941 +<622c> 6401 +<622d> 12942 +<622e> 2661 +<622f> 12943 +<6230> 8819 +<6231> 12944 +<6232> 8624 +<6233> 1348 +<6234> 1402 +<6237> 1980 +<623d> 6644 +<623e> 6643 +<623f> 1628 +<6240> 3566 +<6241> 1099 +<6242> 12952 +<6243> 6645 +<6247> 3329 +<624a> 12956 +<624b> 3437 +<624c> 5306 +<624d> 1164 +<624e> 4413 +<6251> 3050 +<6252> 978 +<6253> 1397 +<6254> 3246 +<6258> 3713 +<625b> 2373 +endcidchar + +100 begincidchar +<6263> 2408 +<6266> 3105 +<6267> 4531 +<6268> 12973 +<6269> 2452 +<626a> 5307 +<626b> 3297 +<626c> 4120 +<626d> 2917 +<626e> 1010 +<626f> 1243 +<6270> 3232 +<6273> 1005 +<6276> 1683 +<6279> 3003 +<627c> 1586 +<627d> 12982 +<627e> 4467 +<627f> 1269 +<6280> 2095 +<6284> 1234 +<6289> 2336 +<628a> 988 +<6291> 4189 +<6292> 3450 +<6293> 4610 +<6294> 12996 +<6295> 3687 +<6296> 1525 +<6297> 2374 +<6298> 4476 +<6299> 12997 +<629a> 1698 +<629b> 2968 +<629f> 5308 +<62a0> 2406 +<62a1> 2684 +<62a2> 3133 +<62a3> 13001 +<62a4> 1977 +<62a5> 1041 +<62a8> 2987 +<62ab> 3004 +<62ac> 3578 +<62b1> 1040 +<62b5> 1463 +<62b9> 2827 +<62ba> 13016 +<62bb> 5309 +<62bc> 4067 +<62bd> 1294 +<62be> 13017 +<62bf> 2807 +<62c2> 1684 +<62c3> 13020 +<62c4> 4595 +<62c5> 1412 +<62c6> 1207 +<62c7> 2839 +<62c8> 2892 +<62c9> 2456 +<62ca> 5310 +<62cb> 13021 +<62cc> 1011 +<62cd> 2949 +<62ce> 2601 +<62cf> 13022 +<62d0> 1838 +<62d1> 13023 +<62d2> 2315 +<62d3> 3721 +<62d4> 985 +<62d5> 13024 +<62d6> 3712 +<62d7> 5312 +<62d8> 2303 +<62d9> 4635 +<62da> 5311 +<62db> 4465 +<62dc> 1000 +<62df> 2885 +<62e2> 2634 +<62e3> 2147 +<62e4> 13029 +<62e5> 4250 +<62e6> 2468 +<62e7> 2914 +<62e8> 1133 +<62e9> 4404 +<62ec> 2451 +<62ed> 3418 +<62ee> 5313 +<62ef> 4509 +<62f0> 13032 +<62f1> 1801 +<62f2> 13033 +<62f3> 3208 +<62f4> 3486 +<62f5> 13034 +<62f6> 5315 +endcidchar + +100 begincidchar +<62f7> 2378 +<62fc> 3027 +<62fd> 4612 +<62fe> 3399 +<62ff> 2854 +<6300> 13039 +<6301> 1275 +<6302> 1835 +<6307> 4535 +<6308> 6478 +<6309> 959 +<630e> 2419 +<6311> 3655 +<6316> 3723 +<631a> 4542 +<631b> 2677 +<631c> 13057 +<631d> 3805 +<631e> 3573 +<631f> 3961 +<6320> 2870 +<6321> 1427 +<6322> 5314 +<6323> 4502 +<6324> 2090 +<6325> 2024 +<6328> 943 +<6329> 13060 +<632a> 2931 +<632b> 1391 +<632f> 4498 +<6332> 6479 +<6339> 5316 +<633a> 3671 +<633d> 3741 +<633e> 8657 +<6342> 3829 +<6343> 5318 +<6344> 13077 +<6345> 3682 +<6346> 2449 +<6349> 4634 +<634a> 13080 +<634b> 5317 +<634c> 977 +<634d> 1899 +<634e> 3340 +<634f> 2902 +<6350> 2327 +<6355> 1149 +<635e> 2487 +<635f> 3557 +<6360> 13093 +<6361> 2148 +<6362> 2000 +<6363> 1432 +<6367> 2998 +<6368> 8476 +<6369> 5328 +<636a> 13097 +<636b> 9053 +<636c> 13098 +<636d> 5325 +<636e> 2316 +<6371> 5321 +<6372> 9858 +<6376> 1338 +<6377> 2222 +<637a> 5322 +<637b> 2896 +<6380> 3891 +<6381> 13110 +<6382> 1473 +<6383> 8461 +<6384> 8282 +<6387> 1565 +<6388> 3441 +<6389> 1493 +<638a> 5327 +<638b> 13113 +<638c> 4455 +<638d> 13114 +<638e> 5323 +<638f> 3616 +<6390> 3101 +<6391> 13115 +<6392> 2950 +<6396> 4155 +<6397> 13119 +<6398> 2337 +<63a0> 2682 +<63a1> 13127 +<63a2> 3600 +<63a3> 1245 +<63a4> 13128 +<63a5> 2212 +<63a6> 13129 +<63a7> 2405 +<63a8> 3703 +<63a9> 4099 +endcidchar + +100 begincidchar +<63aa> 1390 +<63ab> 13130 +<63ac> 5326 +<63ad> 5319 +<63ae> 5329 +<63af> 13131 +<63b0> 6480 +<63b3> 2647 +<63b4> 5324 +<63b7> 4543 +<63b8> 1416 +<63b9> 13136 +<63ba> 1211 +<63bb> 13137 +<63bc> 5330 +<63bd> 13138 +<63be> 5340 +<63bf> 13139 +<63c0> 8077 +<63c4> 5335 +<63c5> 13143 +<63c6> 5339 +<63c9> 3259 +<63cd> 4670 +<63ce> 5337 +<63cf> 2797 +<63d0> 3636 +<63d1> 13149 +<63d2> 1196 +<63d6> 4165 +<63da> 8703 +<63de> 5336 +<63df> 13159 +<63e0> 5333 +<63e1> 3812 +<63e2> 13160 +<63e3> 1322 +<63e9> 2360 +<63ea> 2285 +<63ed> 2211 +<63ee> 8024 +<63f2> 5331 +<63f3> 13171 +<63f4> 4337 +<63f5> 13172 +<63f6> 5320 +<63f7> 13173 +<63f8> 5332 +<63fd> 2474 +<63fe> 13178 +<63ff> 5334 +<6400> 1210 +<6401> 1764 +<6402> 2638 +<6405> 2194 +<640b> 5343 +<640c> 5346 +<640d> 8539 +<640e> 13186 +<640f> 1138 +<6410> 1319 +<6413> 1389 +<6414> 3295 +<6417> 7862 +<641b> 5344 +<641c> 3526 +<641d> 13194 +<641e> 1758 +<641f> 13195 +<6420> 5345 +<6421> 5348 +<6426> 5347 +<642a> 3605 +<642b> 13203 +<642c> 1004 +<642d> 1393 +<6434> 5942 +<6435> 13210 +<6436> 8411 +<643a> 3962 +<643d> 1202 +<643e> 13216 +<643f> 6481 +<6440> 13217 +<6441> 5342 +<6444> 3356 +<6445> 5341 +<6446> 997 +<6447> 4136 +<6448> 1120 +<6449> 13220 +<644a> 3586 +<6451> 9056 +<6452> 5338 +<6453> 13227 +<6454> 3481 +<6458> 4427 +<645c> 9057 +<645d> 13234 +<645e> 5349 +endcidchar + +100 begincidchar +<645f> 8256 +<6467> 1376 +<6468> 13242 +<6469> 2825 +<646d> 5351 +<646e> 13246 +<646f> 8846 +<6473> 8159 +<6476> 9054 +<6477> 13252 +<647a> 5353 +<647b> 7786 +<6482> 2581 +<6483> 13259 +<6484> 5350 +<6485> 2334 +<6486> 13260 +<6487> 3025 +<6488> 8194 +<6491> 1258 +<6492> 3281 +<6493> 8339 +<6494> 13269 +<6495> 3503 +<6496> 5352 +<6499> 5356 +<649e> 4623 +<649f> 9055 +<64a3> 7852 +<64a4> 1244 +<64a5> 7764 +<64a9> 2572 +<64aa> 13282 +<64ab> 7944 +<64ac> 3144 +<64ad> 1132 +<64ae> 1388 +<64af> 13283 +<64b0> 4616 +<64b1> 13284 +<64b2> 8384 +<64b3> 9058 +<64b4> 13285 +<64b5> 2895 +<64b6> 13286 +<64b9> 13287 +<64ba> 5357 +<64bb> 8544 +<64bc> 1898 +<64bd> 13288 +<64be> 8605 +<64bf> 8078 +<64c0> 5358 +<64c1> 8749 +<64c2> 2505 +<64c3> 13289 +<64c4> 8263 +<64c5> 3324 +<64c6> 13290 +<64c7> 8802 +<64ca> 8039 +<64cb> 7858 +<64cc> 13293 +<64cd> 1184 +<64ce> 3171 +<64cf> 13294 +<64d0> 5359 +<64d1> 13295 +<64d2> 3161 +<64d3> 13296 +<64d4> 7849 +<64d7> 5360 +<64d8> 6482 +<64d9> 13299 +<64da> 8140 +<64de> 3528 +<64df> 13303 +<64e0> 8050 +<64e1> 13304 +<64e2> 5362 +<64e3> 13305 +<64e4> 5361 +<64e5> 13306 +<64e6> 1160 +<64ec> 8344 +<64ef> 7762 +<64f0> 8356 +<64f1> 7964 +<64f2> 8847 +<64f3> 13314 +<64f4> 8173 +<64f7> 9061 +<64fa> 7725 +<64fb> 8530 +<64fc> 9062 +<64fd> 13319 +<64fe> 8442 +<64ff> 13320 +<6500> 2955 +<6504> 9059 +endcidchar + +100 begincidchar +<6505> 13324 +<6506> 8346 +<6509> 5363 +<650f> 8252 +<6512> 4383 +<6513> 13334 +<6514> 8182 +<6515> 13335 +<6516> 9060 +<6517> 13336 +<6518> 3228 +<6519> 7785 +<651a> 13337 +<651b> 9063 +<651c> 13338 +<651d> 8477 +<6522> 8793 +<6523> 8278 +<6524> 8547 +<6525> 5364 +<652a> 8105 +<652b> 2335 +<652c> 8188 +<652d> 13347 +<652e> 5365 +<652f> 4518 +<6534> 6409 +<6535> 6502 +<6536> 3436 +<6537> 13352 +<6538> 4786 +<6539> 1727 +<653a> 13353 +<653b> 1790 +<653e> 1634 +<653f> 4511 +<6545> 1827 +<6548> 3954 +<6549> 7371 +<654c> 1457 +<654f> 2809 +<6550> 13367 +<6551> 2295 +<6555> 6503 +<6556> 968 +<6557> 7726 +<6558> 13371 +<6559> 2205 +<655a> 13372 +<655b> 2555 +<655c> 13373 +<655d> 1087 +<655e> 1229 +<6562> 1741 +<6563> 3291 +<6566> 1559 +<656b> 6504 +<656c> 2275 +<6570> 3476 +<6571> 13386 +<6572> 3136 +<6573> 13387 +<6574> 4508 +<6575> 7868 +<6576> 13388 +<6577> 1680 +<6578> 8514 +<6582> 8222 +<6583> 7747 +<6587> 3795 +<658b> 4428 +<658c> 1116 +<6590> 6593 +<6591> 1002 +<6592> 13407 +<6593> 6595 +<6594> 13408 +<6595> 9428 +<6596> 13409 +<6597> 1526 +<6598> 13410 +<6599> 2584 +<659a> 13411 +<659b> 7510 +<659c> 3964 +<659f> 4486 +<65a0> 13414 +<65a1> 3810 +<65a4> 2240 +<65a5> 1287 +<65a6> 13417 +<65a7> 1702 +<65a8> 13418 +<65a9> 4439 +<65aa> 13419 +<65ab> 6697 +<65ac> 8815 +<65ad> 1550 +<65ae> 13420 +<65af> 3502 +endcidchar + +100 begincidchar +<65b0> 3981 +<65b7> 7895 +<65b8> 13427 +<65b9> 1626 +<65bc> 6596 +<65bd> 3392 +<65c1> 2965 +<65c2> 13433 +<65c3> 6599 +<65c4> 6598 +<65c5> 2666 +<65c6> 6597 +<65cb> 4040 +<65cc> 6600 +<65cd> 13438 +<65ce> 6601 +<65cf> 4674 +<65d2> 6602 +<65d6> 6603 +<65d7> 3083 +<65e0> 3821 +<65e1> 13452 +<65e2> 2107 +<65e5> 3248 +<65e6> 1418 +<65e7> 2296 +<65e8> 4539 +<65e9> 4394 +<65ec> 4055 +<65ed> 4028 +<65f1> 1900 +<65f6> 3400 +<65f7> 2434 +<65fa> 3755 +<6600> 6418 +<6601> 13468 +<6602> 965 +<6603> 6416 +<6606> 2448 +<660a> 6413 +<660b> 13474 +<660c> 1220 +<660d> 13475 +<660e> 2812 +<660f> 2045 +<6613> 4190 +<6614> 3843 +<6615> 6417 +<6619> 6414 +<661d> 6421 +<661e> 13485 +<661f> 3986 +<6620> 4248 +<6625> 1341 +<6626> 13490 +<6627> 2758 +<6628> 4687 +<662d> 4466 +<662e> 13495 +<662f> 3422 +<6630> 13496 +<6631> 6423 +<6634> 6422 +<6635> 6425 +<6636> 6424 +<663c> 4582 +<663d> 13504 +<663e> 3905 +<6641> 6429 +<6642> 8493 +<6643> 2019 +<664b> 2251 +<664c> 3335 +<664f> 6430 +<6652> 3314 +<6653> 3947 +<6654> 6428 +<6655> 4369 +<6656> 6431 +<6657> 6433 +<665a> 3742 +<665d> 8859 +<665e> 13522 +<665f> 6427 +<6660> 13523 +<6661> 6432 +<6664> 3837 +<6665> 13526 +<6666> 2035 +<6667> 13527 +<6668> 1252 +<666e> 3060 +<666f> 2271 +<6670> 3849 +<6674> 3172 +<6675> 13536 +<6676> 2262 +<6677> 6434 +<667a> 4550 +<667e> 2569 +endcidchar + +100 begincidchar +<6682> 4384 +<6683> 13545 +<6684> 6435 +<6687> 3883 +<6688> 8790 +<6689> 9384 +<668c> 6436 +<6691> 3461 +<6696> 2928 +<6697> 960 +<669d> 6438 +<66a2> 7801 +<66a7> 6437 +<66a8> 7389 +<66ab> 8794 +<66ae> 2845 +<66b4> 1042 +<66b9> 5979 +<66be> 6439 +<66c4> 9383 +<66c5> 13593 +<66c6> 9862 +<66c7> 9382 +<66c8> 13594 +<66c9> 8654 +<66d6> 9385 +<66d9> 3462 +<66da> 13609 +<66dd> 3063 +<66e0> 8167 +<66e6> 6442 +<66e9> 6443 +<66ec> 8466 +<66f0> 4350 +<66f1> 13624 +<66f2> 3191 +<66f3> 4158 +<66f4> 1783 +<66f7> 6420 +<66f8> 8508 +<66f9> 1187 +<66fc> 2723 +<66fd> 13629 +<66fe> 4411 +<66ff> 3641 +<6700> 4683 +<6703> 8028 +<6708> 4357 +<6709> 4277 +<670a> 6515 +<670b> 2996 +<670c> 13636 +<670d> 1691 +<6710> 6532 +<6714> 3500 +<6715> 6542 +<6716> 13642 +<6717> 2485 +<671b> 3756 +<671c> 13646 +<671d> 1236 +<671e> 13647 +<671f> 3065 +<6726> 6572 +<6727> 9412 +<6728> 2849 +<6729> 13654 +<672a> 3779 +<672b> 2828 +<672c> 1063 +<672d> 4416 +<672e> 13655 +<672f> 3468 +<6730> 13656 +<6731> 4587 +<6734> 3058 +<6735> 1571 +<673a> 2063 +<673d> 4011 +<6740> 3306 +<6741> 13667 +<6742> 4374 +<6743> 3203 +<6746> 1734 +<6747> 13670 +<6748> 6228 +<6749> 3317 +<674c> 6225 +<674d> 13673 +<674e> 2521 +<674f> 3998 +<6750> 1163 +<6751> 1384 +<6752> 13674 +<6753> 6226 +<6756> 4457 +<675c> 1540 +<675d> 13682 +<675e> 6227 +<675f> 3471 +endcidchar + +100 begincidchar +<6760> 1751 +<6761> 3656 +<6765> 2463 +<6768> 4119 +<6769> 6229 +<676a> 6232 +<676d> 1907 +<676e> 13690 +<676f> 1046 +<6770> 2221 +<6771> 7884 +<6772> 6415 +<6773> 6233 +<6774> 13691 +<6775> 6236 +<6776> 13692 +<6777> 6241 +<677c> 6242 +<677d> 13697 +<677e> 3518 +<677f> 1008 +<6780> 13698 +<6781> 2078 +<6784> 1810 +<6787> 6231 +<6788> 13703 +<6789> 3752 +<678a> 13704 +<678b> 6240 +<6790> 3845 +<6795> 4494 +<6796> 13713 +<6797> 2591 +<6798> 6234 +<6799> 13714 +<679a> 2747 +<679b> 13715 +<679c> 1876 +<679d> 4517 +<679e> 6238 +<67a2> 3447 +<67a3> 4393 +<67a4> 13719 +<67a5> 6230 +<67a6> 13720 +<67a7> 6235 +<67a8> 6237 +<67a9> 13721 +<67aa> 3126 +<67ab> 1664 +<67ac> 13722 +<67ad> 6239 +<67ae> 13723 +<67af> 2410 +<67b0> 6248 +<67b3> 6253 +<67b4> 13726 +<67b5> 6251 +<67b6> 2127 +<67b7> 2114 +<67b8> 6257 +<67c1> 6260 +<67c2> 13735 +<67c3> 6256 +<67c4> 1123 +<67cf> 995 +<67d0> 2838 +<67d1> 1735 +<67d2> 3073 +<67d3> 3225 +<67d4> 3260 +<67d8> 6245 +<67d9> 6250 +<67da> 6252 +<67db> 13749 +<67dc> 1866 +<67dd> 6254 +<67de> 4690 +<67df> 13750 +<67e0> 2910 +<67e1> 13751 +<67e2> 6258 +<67e5> 1200 +<67e9> 6247 +<67ec> 2144 +<67ef> 2383 +<67f0> 6243 +<67f1> 4600 +<67f2> 13761 +<67f3> 2625 +<67f4> 1208 +<67fd> 6261 +<67fe> 13770 +<67ff> 3416 +<6800> 6255 +<6805> 4421 +<6806> 13775 +<6807> 1107 +<6808> 4444 +<6809> 6244 +endcidchar + +100 begincidchar +<680a> 6246 +<680b> 1519 +<680c> 6249 +<680d> 13776 +<680e> 6259 +<680f> 2467 +<6810> 13777 +<6811> 3470 +<6812> 13778 +<6813> 3485 +<6816> 3067 +<6817> 2528 +<681d> 6271 +<6821> 3950 +<6829> 6280 +<682a> 4585 +<6837> 4130 +<6838> 1922 +<6839> 1780 +<683c> 1772 +<683d> 4375 +<683e> 6277 +<683f> 13808 +<6840> 6276 +<6841> 6274 +<6842> 1865 +<6843> 3621 +<6844> 6268 +<6845> 3765 +<6846> 2431 +<6847> 13809 +<6848> 963 +<6849> 6279 +<684a> 6278 +<684b> 13810 +<684c> 4637 +<684d> 13811 +<684e> 6266 +<684f> 13812 +<6850> 3674 +<6851> 3292 +<6852> 13813 +<6853> 1997 +<6854> 2220 +<6855> 6272 +<6862> 6267 +<6863> 1430 +<6864> 6269 +<6865> 3138 +<6866> 6273 +<6867> 6275 +<6868> 2177 +<6869> 4619 +<686a> 13824 +<686b> 6286 +<6874> 6283 +<6875> 13833 +<6876> 3681 +<6877> 6284 +<6881> 2563 +<6882> 13843 +<6883> 6270 +<6884> 13844 +<6885> 2748 +<6886> 1019 +<688f> 6282 +<6893> 6285 +<6897> 1788 +<6898> 9322 +<689d> 8565 +<689e> 13863 +<689f> 9325 +<68a2> 3339 +<68a6> 2771 +<68a7> 3823 +<68a8> 2513 +<68ad> 3560 +<68ae> 13873 +<68af> 3632 +<68b0> 3968 +<68b3> 3448 +<68b4> 13876 +<68b5> 6281 +<68c0> 2143 +<68c1> 13887 +<68c2> 6287 +<68c9> 2787 +<68ca> 13894 +<68cb> 3076 +<68cc> 13895 +<68cd> 1872 +<68d2> 1023 +<68d5> 4661 +<68d6> 9323 +<68d7> 8799 +<68d8> 2079 +<68d9> 13902 +<68da> 2992 +<68df> 7886 +<68e0> 3607 +endcidchar + +100 begincidchar +<68e3> 6298 +<68e7> 8818 +<68ee> 3302 +<68ef> 13918 +<68f0> 6294 +<68f1> 2509 +<68f5> 2384 +<68f9> 6292 +<68fa> 1840 +<68fb> 13925 +<68fc> 6289 +<6900> 13929 +<6901> 6296 +<6905> 4181 +<690b> 6295 +<690c> 13938 +<690d> 4529 +<690e> 4626 +<690f> 9331 +<6910> 6299 +<6911> 13939 +<6912> 2184 +<6924> 6293 +<692d> 3719 +<6930> 4147 +<6934> 6310 +<6939> 6301 +<693d> 1325 +<693e> 13975 +<693f> 1342 +<6942> 6303 +<694a> 8702 +<6953> 7934 +<6954> 3955 +<6957> 6297 +<695a> 1315 +<695d> 6304 +<695e> 2510 +<695f> 13999 +<6960> 6302 +<6963> 6317 +<6966> 6316 +<6967> 14004 +<6968> 9333 +<696b> 6306 +<696c> 14007 +<696d> 8714 +<696e> 6288 +<6971> 6300 +<6975> 8047 +<6976> 14013 +<6977> 2361 +<6978> 6309 +<6979> 6318 +<697c> 2636 +<6980> 6307 +<6981> 14019 +<6982> 1728 +<6983> 14020 +<6984> 6305 +<6985> 14021 +<6986> 4289 +<6989> 6315 +<698d> 6331 +<6994> 2481 +<6995> 6329 +<6998> 6308 +<699b> 6319 +<699c> 1020 +<69a7> 6320 +<69a8> 4422 +<69a9> 14045 +<69aa> 9320 +<69ab> 6322 +<69ac> 14046 +<69ad> 6323 +<69ae> 8448 +<69b1> 6325 +<69b4> 2618 +<69b7> 3217 +<69bb> 6321 +<69bf> 9334 +<69c0> 14059 +<69c1> 6326 +<69ca> 6327 +<69cb> 7975 +<69cc> 6311 +<69cd> 8407 +<69ce> 6314 +<69cf> 14068 +<69d0> 1990 +<69d4> 6324 +<69db> 2154 +<69df> 6328 +<69e0> 6330 +<69e7> 9340 +<69ed> 6334 +<69f2> 6338 +<69f3> 8097 +<69fd> 1186 +endcidchar + +100 begincidchar +<69fe> 14105 +<69ff> 6332 +<6a00> 14106 +<6a01> 8874 +<6a02> 8197 +<6a05> 9324 +<6a0a> 1611 +<6a13> 8254 +<6a19> 7756 +<6a1e> 8506 +<6a1f> 4450 +<6a20> 14128 +<6a21> 2822 +<6a22> 14129 +<6a23> 8708 +<6a28> 6348 +<6a29> 14134 +<6a2a> 1944 +<6a2f> 6333 +<6a30> 14139 +<6a31> 4232 +<6a35> 6344 +<6a38> 8387 +<6a39> 8512 +<6a3a> 9335 +<6a3d> 6347 +<6a3e> 6340 +<6a44> 6339 +<6a47> 3134 +<6a48> 9332 +<6a4b> 8413 +<6a50> 6342 +<6a58> 6349 +<6a59> 1261 +<6a5a> 14167 +<6a5b> 6343 +<6a5f> 8040 +<6a60> 14171 +<6a61> 3933 +<6a62> 8581 +<6a65> 6337 +<6a71> 1308 +<6a79> 6346 +<6a7c> 6350 +<6a80> 3591 +<6a84> 3866 +<6a89> 9330 +<6a8e> 6345 +<6a8f> 14208 +<6a90> 6352 +<6a91> 6351 +<6a94> 7861 +<6a97> 6354 +<6a9c> 9336 +<6aa0> 6341 +<6aa1> 14220 +<6aa2> 8075 +<6aa3> 9348 +<6aa9> 6353 +<6aaa> 14226 +<6aab> 6355 +<6aac> 2767 +<6aaf> 9881 +<6ab3> 9346 +<6ab8> 8353 +<6abb> 8082 +<6ac3> 7992 +<6ad3> 9349 +<6ada> 9344 +<6adb> 9326 +<6adc> 14266 +<6add> 9339 +<6ade> 9350 +<6adf> 9329 +<6ae7> 9347 +<6ae8> 9328 +<6ae9> 14274 +<6aea> 9321 +<6aeb> 14275 +<6aec> 9343 +<6af3> 9327 +<6af8> 9345 +<6afb> 8736 +<6b04> 8181 +<6b0a> 8436 +<6b0f> 9341 +<6b12> 9337 +<6b16> 9342 +<6b1e> 9338 +<6b1f> 14317 +<6b20> 3124 +<6b21> 1361 +<6b22> 1995 +<6b23> 3979 +<6b24> 6577 +<6b27> 2936 +<6b32> 4320 +<6b37> 6578 +<6b38> 14334 +<6b39> 6579 +endcidchar + +100 begincidchar +<6b3a> 3066 +<6b3d> 8419 +<6b3e> 2427 +<6b43> 6580 +<6b46> 6581 +<6b47> 3957 +<6b48> 14343 +<6b49> 3125 +<6b4c> 1763 +<6b50> 8365 +<6b59> 6582 +<6b5f> 9419 +<6b60> 14362 +<6b61> 8019 +<6b62> 4536 +<6b63> 4510 +<6b64> 1358 +<6b65> 1156 +<6b66> 3827 +<6b67> 3078 +<6b6a> 3730 +<6b72> 8537 +<6b77> 8211 +<6b78> 7987 +<6b79> 1400 +<6b7a> 14376 +<6b7b> 3509 +<6b7c> 2130 +<6b83> 4115 +<6b84> 6361 +<6b85> 14381 +<6b86> 1404 +<6b87> 6360 +<6b88> 14382 +<6b89> 4060 +<6b8a> 3449 +<6b8b> 1175 +<6b8c> 14383 +<6b8d> 6364 +<6b96> 4530 +<6b97> 14390 +<6b98> 7772 +<6b99> 14391 +<6b9e> 9352 +<6ba1> 6367 +<6ba4> 9351 +<6baa> 6368 +<6bab> 9354 +<6bae> 9353 +<6baf> 9355 +<6bb2> 8067 +<6bb3> 6589 +<6bb4> 2938 +<6bb5> 1549 +<6bb6> 14407 +<6bb7> 4218 +<6bba> 8463 +<6bbb> 8155 +<6bbf> 1487 +<6bc0> 14413 +<6bc1> 2030 +<6bc2> 6591 +<6bc5> 4202 +<6bc6> 8367 +<6bcb> 3826 +<6bcc> 14420 +<6bcd> 2843 +<6bce> 14421 +<6bcf> 2756 +<6bd2> 1533 +<6bd3> 4719 +<6bd4> 1073 +<6bd5> 1080 +<6bd6> 1082 +<6bd7> 3007 +<6bd8> 14424 +<6bd9> 1081 +<6bda> 14425 +<6bdb> 2736 +<6be1> 4434 +<6bea> 6484 +<6beb> 1912 +<6bef> 3597 +<6bf3> 6485 +<6bf4> 14445 +<6bf5> 6487 +<6bf9> 6488 +<6bfd> 6486 +<6bfe> 14452 +<6bff> 9408 +<6c05> 6489 +<6c06> 6491 +<6c07> 6490 +<6c08> 8813 +<6c0c> 9409 +<6c0d> 6492 +<6c0e> 14461 +<6c0f> 3430 +<6c10> 4715 +<6c11> 2806 +endcidchar + +100 begincidchar +<6c12> 14462 +<6c13> 2730 +<6c14> 3095 +<6c15> 6493 +<6c16> 2861 +<6c17> 14463 +<6c1b> 1650 +<6c1f> 1687 +<6c20> 14467 +<6c21> 6497 +<6c22> 3167 +<6c23> 8394 +<6c24> 6499 +<6c25> 14468 +<6c26> 1883 +<6c27> 4126 +<6c28> 956 +<6c29> 6498 +<6c2a> 6500 +<6c2b> 8423 +<6c2c> 9410 +<6c2d> 14469 +<6c2e> 1419 +<6c2f> 2671 +<6c30> 3173 +<6c31> 14470 +<6c32> 6501 +<6c33> 14471 +<6c34> 3491 +<6c35> 5791 +<6c38> 4261 +<6c3d> 4847 +<6c40> 3666 +<6c41> 4524 +<6c42> 3184 +<6c46> 4852 +<6c47> 2040 +<6c48> 14483 +<6c49> 1905 +<6c4a> 5794 +<6c50> 3864 +<6c54> 5792 +<6c55> 3328 +<6c56> 14492 +<6c57> 1904 +<6c5b> 4061 +<6c5c> 5793 +<6c5d> 3269 +<6c5e> 1800 +<6c5f> 2174 +<6c60> 1277 +<6c61> 3818 +<6c64> 3603 +<6c6a> 3749 +<6c70> 3584 +<6c71> 14506 +<6c72> 2086 +<6c73> 14507 +<6c74> 5802 +<6c75> 14508 +<6c76> 5803 +<6c79> 4005 +<6c7d> 3098 +<6c7e> 1655 +<6c81> 3164 +<6c82> 4177 +<6c83> 3813 +<6c84> 14516 +<6c85> 5796 +<6c86> 5804 +<6c87> 14517 +<6c88> 3371 +<6c89> 1254 +<6c8c> 5799 +<6c8f> 3074 +<6c90> 5797 +<6c93> 6687 +<6c94> 5798 +<6c99> 3308 +<6c9a> 14528 +<6c9b> 2983 +<6c9f> 1806 +<6ca0> 14532 +<6ca1> 2752 +<6ca2> 14533 +<6ca3> 5795 +<6ca4> 2942 +<6ca5> 2541 +<6ca6> 2688 +<6ca7> 1182 +<6ca8> 14534 +<6ca9> 5805 +<6caa> 1979 +<6cab> 2832 +<6cac> 14535 +<6cad> 5808 +<6cae> 2313 +<6cb1> 5819 +<6cb2> 5813 +<6cb3> 1930 +endcidchar + +100 begincidchar +<6cb8> 1645 +<6cb9> 4274 +<6cba> 14542 +<6cbb> 4557 +<6cbc> 4468 +<6cbd> 1818 +<6cbe> 4437 +<6cbf> 4097 +<6cc4> 3972 +<6cc5> 3187 +<6cc9> 3205 +<6cca> 1147 +<6ccb> 14550 +<6ccc> 2783 +<6cd0> 5806 +<6cd3> 5820 +<6cd4> 5807 +<6cd5> 1605 +<6cd6> 5815 +<6cd7> 5812 +<6cdb> 1623 +<6cde> 2915 +<6cdf> 14561 +<6ce0> 5814 +<6ce1> 2974 +<6ce2> 1135 +<6ce3> 3099 +<6ce4> 14562 +<6ce5> 2883 +<6ce8> 4607 +<6ce9> 14565 +<6cea> 2508 +<6ceb> 5817 +<6cee> 5818 +<6cef> 5821 +<6cf0> 3580 +<6cf1> 5811 +<6cf2> 14568 +<6cf3> 4259 +<6cf4> 14569 +<6cf5> 1068 +<6cf6> 6688 +<6cf9> 14570 +<6cfa> 5816 +<6cfb> 3973 +<6cfc> 3042 +<6cfd> 4406 +<6cfe> 5822 +<6cff> 14571 +<6d00> 14572 +<6d01> 2225 +<6d04> 5829 +<6d07> 5828 +<6d0b> 4124 +<6d0c> 5825 +<6d0d> 14580 +<6d0e> 5831 +<6d12> 3282 +<6d17> 3873 +<6d18> 14588 +<6d19> 5830 +<6d1a> 5836 +<6d1b> 2700 +<6d1e> 1523 +<6d25> 2243 +<6d26> 14597 +<6d27> 5824 +<6d2a> 1952 +<6d2b> 5832 +<6d2e> 5834 +<6d31> 1596 +<6d32> 4573 +<6d33> 5840 +<6d34> 14604 +<6d35> 5835 +<6d39> 5823 +<6d3a> 14608 +<6d3b> 2051 +<6d3c> 3726 +<6d3d> 3103 +<6d3e> 2954 +<6d41> 2624 +<6d42> 14611 +<6d43> 5826 +<6d44> 14612 +<6d45> 3120 +<6d46> 2173 +<6d47> 2190 +<6d48> 5827 +<6d49> 14613 +<6d4a> 4644 +<6d4b> 1193 +<6d4c> 14614 +<6d4d> 5833 +<6d4e> 2102 +<6d4f> 5837 +<6d50> 14615 +<6d51> 2048 +<6d52> 5838 +<6d53> 2921 +endcidchar + +100 begincidchar +<6d54> 5839 +<6d59> 4484 +<6d5a> 2352 +<6d5b> 14620 +<6d5c> 5848 +<6d5d> 14621 +<6d5e> 5845 +<6d5f> 14622 +<6d60> 5849 +<6d63> 5851 +<6d66> 3061 +<6d69> 1917 +<6d6a> 2486 +<6d6e> 1692 +<6d6f> 5842 +<6d74> 4324 +<6d77> 1882 +<6d78> 2255 +<6d79> 9180 +<6d7c> 5850 +<6d82> 3696 +<6d85> 2908 +<6d86> 14647 +<6d87> 9179 +<6d88> 3944 +<6d89> 3359 +<6d8c> 4260 +<6d8d> 14650 +<6d8e> 3902 +<6d91> 5841 +<6d92> 14653 +<6d95> 3644 +<6d9b> 3617 +<6d9c> 14659 +<6d9d> 2495 +<6d9e> 5843 +<6d9f> 2553 +<6da0> 5844 +<6da1> 3807 +<6da2> 14660 +<6da3> 2006 +<6da4> 1460 +<6da5> 14661 +<6da6> 3278 +<6da7> 2168 +<6da8> 4456 +<6da9> 3301 +<6daa> 1693 +<6dab> 5864 +<6dae> 5866 +<6daf> 4077 +<6db2> 4161 +<6db5> 1892 +<6db8> 1931 +<6dbf> 5857 +<6dc0> 1486 +<6dc4> 4650 +<6dc5> 5854 +<6dc6> 3946 +<6dc7> 5853 +<6dcb> 2597 +<6dcc> 3613 +<6dd1> 3454 +<6dd6> 2874 +<6dd7> 14690 +<6dd8> 3623 +<6dd9> 5862 +<6ddd> 5861 +<6dde> 5855 +<6ddf> 14694 +<6de0> 5858 +<6de1> 1422 +<6de4> 4286 +<6de5> 14697 +<6de6> 5860 +<6dea> 8286 +<6deb> 4224 +<6dec> 1382 +<6ded> 14701 +<6dee> 1993 +<6df1> 3367 +<6df2> 14704 +<6df3> 1345 +<6df4> 14705 +<6df5> 8772 +<6df6> 9186 +<6df7> 2049 +<6df8> 14706 +<6df9> 4086 +<6dfa> 8404 +<6dfb> 3648 +<6dfc> 6689 +<6e05> 3170 +<6e0a> 4331 +<6e0b> 14719 +<6e0c> 5865 +<6e0d> 4658 +<6e0e> 5856 +<6e0f> 14720 +<6e10> 2166 +endcidchar + +100 begincidchar +<6e11> 5859 +<6e14> 4299 +<6e15> 14723 +<6e16> 5863 +<6e17> 3377 +<6e1a> 5852 +<6e1d> 4298 +<6e20> 3195 +<6e21> 1544 +<6e22> 14730 +<6e23> 4415 +<6e24> 1146 +<6e25> 5877 +<6e26> 8607 +<6e29> 3793 +<6e2a> 14733 +<6e2b> 5867 +<6e2c> 7782 +<6e2d> 3787 +<6e2e> 14734 +<6e2f> 1750 +<6e32> 5876 +<6e33> 14737 +<6e34> 2391 +<6e38> 4275 +<6e39> 14741 +<6e3a> 2801 +<6e3e> 8035 +<6e43> 2953 +<6e44> 5878 +<6e4d> 3701 +<6e4e> 5869 +<6e55> 14761 +<6e56> 1973 +<6e57> 14762 +<6e58> 3923 +<6e5b> 4448 +<6e5e> 9181 +<6e5f> 5872 +<6e6b> 5870 +<6e6e> 5868 +<6e6f> 8555 +<6e7e> 3734 +<6e7f> 3393 +<6e83> 2446 +<6e84> 14797 +<6e85> 2167 +<6e86> 5873 +<6e89> 1731 +<6e8f> 5893 +<6e90> 4343 +<6e96> 8885 +<6e97> 14810 +<6e98> 5881 +<6e9c> 2616 +<6e9d> 7974 +<6e9e> 14814 +<6e9f> 5895 +<6ea2> 4206 +<6ea5> 5885 +<6ea6> 14819 +<6ea7> 5886 +<6eaa> 3863 +<6eaf> 3538 +<6eb0> 14826 +<6eb1> 5880 +<6eb2> 5871 +<6eb3> 14827 +<6eb4> 5891 +<6eb5> 14828 +<6eb6> 3255 +<6eb7> 5889 +<6eba> 2890 +<6ebb> 5888 +<6ebc> 14831 +<6ebd> 5887 +<6ec1> 1313 +<6ec2> 5894 +<6ec3> 14835 +<6ec4> 7779 +<6ec5> 8328 +<6ec6> 14836 +<6ec7> 1474 +<6ecb> 4649 +<6ecc> 7869 +<6ecd> 14840 +<6ece> 9025 +<6ecf> 5892 +<6ed0> 14841 +<6ed1> 1985 +<6ed2> 14842 +<6ed3> 4655 +<6ed4> 3618 +<6ed5> 6568 +<6ed6> 14843 +<6ed7> 5890 +<6eda> 1871 +<6ede> 4556 +<6edf> 5879 +<6ee0> 5882 +endcidchar + +100 begincidchar +<6ee1> 2721 +<6ee2> 5884 +<6ee3> 14849 +<6ee4> 2674 +<6ee5> 2479 +<6ee6> 2679 +<6ee7> 14850 +<6ee8> 1118 +<6ee9> 3589 +<6eec> 8011 +<6eef> 8850 +<6ef2> 8484 +<6ef3> 14857 +<6ef4> 1455 +<6ef7> 8264 +<6ef8> 9184 +<6ef9> 5901 +<6eff> 8311 +<6f00> 14865 +<6f01> 8762 +<6f02> 3022 +<6f06> 3072 +<6f09> 5907 +<6f0f> 2640 +<6f13> 2519 +<6f14> 4102 +<6f15> 5900 +<6f1a> 8369 +<6f20> 2833 +<6f21> 14888 +<6f22> 8001 +<6f23> 8220 +<6f24> 5899 +<6f29> 5908 +<6f2a> 5906 +<6f2b> 2725 +<6f2c> 8888 +<6f2d> 5883 +<6f2e> 14893 +<6f2f> 5902 +<6f30> 14894 +<6f31> 3477 +<6f32> 8822 +<6f33> 4453 +<6f36> 5903 +<6f37> 14897 +<6f38> 8091 +<6f3e> 4131 +<6f3f> 8095 +<6f40> 14903 +<6f41> 9674 +<6f4b> 5904 +<6f4c> 14911 +<6f4d> 3770 +<6f51> 8382 +<6f54> 8116 +<6f58> 2956 +<6f59> 9175 +<6f5c> 3118 +<6f5d> 14922 +<6f5e> 2657 +<6f62> 5896 +<6f63> 14926 +<6f64> 8453 +<6f65> 14927 +<6f66> 2579 +<6f6d> 3593 +<6f6e> 1238 +<6f6f> 9185 +<6f70> 8172 +<6f71> 14934 +<6f72> 5913 +<6f73> 14935 +<6f74> 5905 +<6f77> 9194 +<6f78> 5912 +<6f79> 14938 +<6f7a> 5915 +<6f7b> 14939 +<6f7c> 5914 +<6f7f> 9187 +<6f80> 8462 +<6f84> 1267 +<6f85> 14945 +<6f86> 8102 +<6f87> 8196 +<6f88> 1247 +<6f89> 5909 +<6f8c> 5911 +<6f8d> 5910 +<6f8e> 2989 +<6f97> 8093 +<6f9c> 2472 +<6fa0> 9189 +<6fa1> 4395 +<6fa4> 8804 +<6fa7> 5918 +<6fa8> 14967 +<6fa9> 9442 +<6fae> 9182 +endcidchar + +100 begincidchar +<6fb1> 7876 +<6fb2> 14974 +<6fb3> 975 +<6fb6> 5920 +<6fb9> 5919 +<6fc0> 2071 +<6fc1> 8886 +<6fc2> 5921 +<6fc3> 8361 +<6fc9> 5917 +<6fd1> 5916 +<6fd2> 1117 +<6fd5> 8491 +<6fd8> 8357 +<6fdb> 9867 +<6fde> 5924 +<6fdf> 8054 +<6fe0> 5925 +<6fe1> 5922 +<6fe4> 8557 +<6feb> 8193 +<6fee> 5923 +<6fef> 5926 +<6ff0> 8593 +<6ff1> 7760 +<6ffa> 8092 +<6ffb> 15023 +<6ffc> 9178 +<6ffd> 15024 +<6ffe> 8275 +<6fff> 15025 +<7005> 9193 +<7006> 9188 +<7009> 8661 +<700a> 15033 +<700b> 9190 +<700f> 9183 +<7010> 15037 +<7011> 3064 +<7015> 7759 +<7018> 9177 +<7019> 15043 +<701a> 5927 +<701b> 5929 +<701c> 15044 +<701d> 8212 +<701e> 15045 +<701f> 9196 +<7020> 9195 +<7023> 5928 +<7027> 9176 +<7028> 9198 +<7030> 9870 +<7031> 15058 +<7032> 9197 +<7035> 5931 +<7039> 5930 +<703e> 8186 +<7043> 9174 +<7044> 9192 +<704c> 1849 +<704f> 5932 +<7050> 15081 +<7051> 8454 +<7055> 8203 +<7058> 8550 +<705d> 9199 +<705e> 5933 +<7063> 8585 +<7064> 8280 +<7067> 9191 +<706b> 2053 +<706c> 6639 +<706d> 2805 +<706e> 15100 +<706f> 1447 +<7070> 2023 +<7075> 2610 +<7076> 4401 +<7077> 15105 +<7078> 2291 +<707c> 4643 +<707d> 15109 +<707e> 4377 +<707f> 1178 +<7080> 6604 +<7085> 6419 +<7089> 2646 +<708a> 1337 +<708e> 4096 +<7092> 1241 +<7093> 15123 +<7094> 3213 +<7095> 2376 +<7096> 6606 +<7099> 4554 +<709c> 6605 +<709d> 6607 +<70ab> 6611 +<70ac> 2325 +endcidchar + +100 begincidchar +<70ad> 3602 +<70ae> 2971 +<70af> 2283 +<70b0> 15141 +<70b1> 6612 +<70b2> 15142 +<70b3> 1127 +<70b7> 6610 +<70b8> 4425 +<70b9> 1476 +<70ba> 15146 +<70bb> 6608 +<70bc> 2559 +<70bd> 1288 +<70c0> 6609 +<70c1> 3501 +<70c2> 2478 +<70c3> 3665 +<70c8> 2587 +<70c9> 15153 +<70ca> 6614 +<70cf> 8611 +<70d8> 1949 +<70d9> 2494 +<70da> 15166 +<70db> 4593 +<70df> 4085 +<70e4> 2379 +<70e5> 15174 +<70e6> 1616 +<70e7> 3342 +<70e8> 6613 +<70e9> 2039 +<70ea> 15175 +<70eb> 3615 +<70ec> 2254 +<70ed> 3235 +<70ee> 15176 +<70ef> 3862 +<70f4> 8570 +<70f7> 3738 +<70f8> 15183 +<70f9> 2988 +<70fd> 1670 +<7109> 4082 +<710a> 1903 +<7110> 6615 +<7113> 6616 +<7114> 15205 +<7115> 2005 +<7116> 6617 +<7117> 15206 +<7118> 6640 +<7119> 1059 +<711a> 1654 +<7121> 8613 +<7126> 2186 +<712f> 6618 +<7130> 4111 +<7131> 6619 +<7136> 3222 +<7145> 6623 +<7149> 8226 +<714a> 6625 +<714b> 15246 +<714c> 2018 +<714d> 15247 +<714e> 2136 +<7152> 9430 +<715c> 6621 +<715d> 15260 +<715e> 3312 +<7162> 9018 +<7163> 15264 +<7164> 2751 +<7165> 15265 +<7166> 6641 +<7167> 4470 +<7168> 6622 +<7169> 7918 +<716c> 9429 +<716d> 15268 +<716e> 4594 +<7172> 6624 +<7173> 6620 +<7178> 6626 +<7179> 15276 +<717a> 6627 +<717d> 3320 +<7184> 3861 +<718a> 4007 +<718f> 4053 +<7192> 8744 +<7193> 15296 +<7194> 3254 +<7197> 9431 +<7198> 6628 +<7199> 3844 +<719f> 3459 +<71a0> 6632 +endcidchar + +100 begincidchar +<71a8> 6631 +<71ac> 969 +<71b1> 8444 +<71b2> 15318 +<71b3> 6629 +<71b4> 15319 +<71b5> 6630 +<71b9> 6642 +<71be> 7815 +<71c1> 9432 +<71c2> 15329 +<71c3> 3223 +<71c8> 7866 +<71ce> 2576 +<71d2> 8473 +<71d3> 15342 +<71d4> 6634 +<71d5> 4105 +<71d9> 8556 +<71dc> 9433 +<71df> 8743 +<71e0> 6633 +<71e5> 4402 +<71e6> 7775 +<71e7> 6635 +<71ed> 8863 +<71ee> 5014 +<71f4> 8029 +<71f9> 6636 +<71fc> 8124 +<71fd> 15370 +<71fe> 9434 +<71ff> 15371 +<7206> 1045 +<720d> 8521 +<7210> 8262 +<721b> 8192 +<721c> 15396 +<721d> 6637 +<7228> 6638 +<7229> 15407 +<722a> 4611 +<722b> 15408 +<722c> 2945 +<7230> 6508 +<7231> 953 +<7232> 8592 +<7235> 2339 +<7236> 1715 +<7237> 4150 +<7238> 993 +<7239> 1498 +<723a> 8712 +<723b> 4713 +<723c> 15414 +<723d> 3489 +<723e> 7910 +<723f> 5789 +<7247> 3019 +<7248> 1009 +<724c> 2951 +<724d> 6505 +<7252> 6506 +<7256> 6507 +<7257> 15432 +<7258> 9411 +<7259> 4073 +<725a> 15433 +<725b> 2916 +<725c> 15434 +<725d> 6468 +<725e> 15435 +<725f> 2837 +<7260> 15436 +<7261> 2840 +<7262> 2489 +<7266> 6469 +<7267> 2852 +<7268> 15440 +<7269> 3838 +<726e> 6466 +<726f> 6470 +<7272> 3381 +<7275> 3104 +<7279> 3627 +<727a> 3853 +<727d> 8396 +<7280> 3865 +<7281> 2514 +<7284> 6473 +<728a> 1534 +<728b> 6474 +<728c> 15461 +<728d> 6475 +<728e> 15462 +<728f> 6476 +<7292> 6477 +<7296> 9024 +<729f> 6467 +<72a2> 7889 +endcidchar + +100 begincidchar +<72a7> 8620 +<72ac> 3209 +<72ad> 5615 +<72ae> 15486 +<72af> 1621 +<72b0> 5616 +<72b4> 5617 +<72b5> 15490 +<72b6> 4625 +<72b9> 4273 +<72c0> 8879 +<72c1> 5621 +<72c2> 2430 +<72c3> 5620 +<72c4> 1459 +<72c8> 1056 +<72cd> 5623 +<72ce> 5622 +<72cf> 15504 +<72d0> 1971 +<72d1> 15505 +<72d2> 5624 +<72d7> 1808 +<72d8> 15510 +<72d9> 2304 +<72de> 2911 +<72df> 15515 +<72e0> 1940 +<72e1> 2199 +<72e8> 5625 +<72e9> 5627 +<72ec> 1535 +<72ed> 3886 +<72ee> 3391 +<72ef> 5626 +<72f0> 4505 +<72f1> 4321 +<72f2> 5628 +<72f3> 5632 +<72f4> 5629 +<72f7> 5630 +<72f8> 2517 +<72f9> 8630 +<72fc> 2482 +<72fd> 7741 +<7300> 15528 +<7301> 5631 +<7302> 15529 +<7303> 5633 +<730a> 5639 +<730e> 2589 +<7313> 5637 +<7314> 15543 +<7315> 5642 +<7316> 1221 +<7317> 5636 +<731b> 2770 +<731c> 1161 +<731d> 5641 +<731e> 5640 +<7321> 5638 +<7322> 5643 +<7325> 5645 +<7329> 3988 +<732a> 4588 +<732b> 2733 +<732c> 5646 +<732d> 15554 +<732e> 3908 +<7331> 5648 +<7334> 1958 +<7335> 15559 +<7336> 8757 +<7337> 6356 +<7338> 5647 +<7339> 5644 +<733a> 15560 +<733b> 9111 +<733e> 1984 +<733f> 4342 +<7340> 15563 +<7341> 9109 +<7344> 8767 +<7345> 8490 +<734d> 5650 +<7350> 5649 +<7351> 15575 +<7352> 6357 +<7357> 5651 +<7360> 5652 +<7368> 7890 +<7369> 15595 +<736a> 9110 +<736b> 9112 +<736c> 5653 +<736d> 3572 +<736e> 15596 +<736f> 5654 +<7370> 8354 +<7371> 15597 +endcidchar + +100 begincidchar +<7372> 8036 +<7375> 8235 +<7376> 15600 +<7377> 9108 +<7378> 8505 +<7379> 15601 +<737a> 8543 +<737b> 8641 +<737c> 9114 +<737d> 15602 +<737e> 5655 +<737f> 15603 +<7380> 9113 +<7384> 4041 +<7387> 2673 +<7388> 15609 +<7389> 4310 +<738a> 15610 +<738b> 3750 +<738e> 6168 +<7391> 6169 +<7396> 2288 +<739b> 2705 +<739f> 6172 +<73a2> 6171 +<73a9> 3735 +<73aa> 15634 +<73ab> 2746 +<73ae> 6170 +<73af> 1996 +<73b0> 3907 +<73b1> 15637 +<73b2> 2602 +<73b3> 6177 +<73b7> 6176 +<73ba> 6188 +<73bb> 1130 +<73c0> 6178 +<73c1> 15647 +<73c2> 6174 +<73c8> 6180 +<73c9> 6179 +<73ca> 3315 +<73cd> 4485 +<73ce> 15655 +<73cf> 6173 +<73d0> 1606 +<73d1> 6175 +<73d9> 6182 +<73de> 6187 +<73df> 15667 +<73e0> 4584 +<73e5> 6181 +<73e6> 15672 +<73e7> 6186 +<73e8> 15673 +<73e9> 6185 +<73ed> 1003 +<73f2> 6189 +<73fe> 8640 +<73ff> 15692 +<7403> 3183 +<7404> 15696 +<7405> 2480 +<7406> 2520 +<7409> 2617 +<740a> 6184 +<740f> 6190 +<7410> 3563 +<741a> 6200 +<741b> 6199 +<7422> 4638 +<7425> 6194 +<7426> 6193 +<7427> 15720 +<7428> 6195 +<7429> 15721 +<742a> 6191 +<742b> 15722 +<742c> 6198 +<742d> 15723 +<742e> 6197 +<742f> 15724 +<7430> 6196 +<7433> 2590 +<7434> 3158 +<7435> 3006 +<7436> 2948 +<743c> 3178 +<743f> 9312 +<7440> 15734 +<7441> 6201 +<744b> 9308 +<7455> 6204 +<7456> 15753 +<7457> 6203 +<7458> 15754 +<7459> 6205 +<745a> 1966 +<745b> 6192 +endcidchar + +100 begincidchar +<745c> 6202 +<745d> 15755 +<745e> 3275 +<745f> 3299 +<7463> 8541 +<7469> 8741 +<746a> 8298 +<746d> 6207 +<7470> 1854 +<7476> 4135 +<7477> 6206 +<747e> 6208 +<747f> 15779 +<7482> 15780 +<7483> 2544 +<7487> 6213 +<7488> 15784 +<7489> 9313 +<748a> 15785 +<748b> 6214 +<748e> 6210 +<748f> 15788 +<7490> 6218 +<749c> 6209 +<749d> 15800 +<749e> 6215 +<74a3> 9307 +<74a6> 9314 +<74a7> 6219 +<74b0> 8020 +<74ba> 6221 +<74bd> 9311 +<74ca> 8428 +<74cf> 9309 +<74d2> 6220 +<74d3> 15842 +<74d4> 9315 +<74da> 9316 +<74db> 15848 +<74dc> 1832 +<74dd> 15849 +<74de> 6962 +<74df> 15850 +<74e0> 6963 +<74e1> 15851 +<74e2> 3023 +<74e3> 1013 +<74e4> 3226 +<74e5> 15852 +<74e6> 3728 +<74ee> 3804 +<74ef> 6403 +<74f4> 6404 +<74f5> 15864 +<74f6> 3038 +<74f7> 1356 +<74ff> 6405 +<7504> 4488 +<750c> 9381 +<750d> 5253 +<750e> 15883 +<750f> 6406 +<7510> 15884 +<7511> 6407 +<7512> 15885 +<7513> 6408 +<7518> 1733 +<7519> 5368 +<751a> 3374 +<751b> 15890 +<751c> 3651 +<751f> 3379 +<7523> 7792 +<7524> 15896 +<7525> 3380 +<7528> 4264 +<7529> 3483 +<752a> 15899 +<752b> 1697 +<752c> 6964 +<752d> 1067 +<752e> 15900 +<752f> 5940 +<7530> 3650 +<7531> 4270 +<7532> 2122 +<7533> 3363 +<7534> 15901 +<7535> 1480 +<7536> 15902 +<7537> 2867 +<7538> 1482 +<7539> 15903 +<753a> 6776 +<753b> 1986 +<753e> 6166 +<753f> 15906 +<7540> 6777 +<7545> 1230 +<7548> 6780 +endcidchar + +100 begincidchar +<754b> 6779 +<754c> 2232 +<754d> 15915 +<754e> 6778 +<754f> 3782 +<7554> 2960 +<7559> 2621 +<755a> 5022 +<755b> 6781 +<755c> 4030 +<755d> 8335 +<7562> 7746 +<7565> 2683 +<7566> 3079 +<756a> 1609 +<756b> 8014 +<7572> 6782 +<7573> 15939 +<7574> 1296 +<7575> 15940 +<7576> 7857 +<7577> 15941 +<7578> 2064 +<7579> 6783 +<757f> 6164 +<7583> 6784 +<7586> 2175 +<7587> 7819 +<758b> 7110 +<758f> 3455 +<7590> 15958 +<7591> 4176 +<7592> 7008 +<7593> 15959 +<7594> 7009 +<7595> 15960 +<7596> 7010 +<7597> 2575 +<7598> 15961 +<7599> 1768 +<759a> 2301 +<759d> 7012 +<759e> 15964 +<759f> 2930 +<75a0> 7011 +<75a1> 4122 +<75a2> 15965 +<75a3> 7014 +<75a4> 983 +<75a5> 2235 +<75ab> 4198 +<75ac> 7013 +<75ad> 15971 +<75ae> 1330 +<75af> 1669 +<75b0> 7020 +<75b1> 7019 +<75b2> 3010 +<75b5> 1350 +<75b8> 7017 +<75b9> 4495 +<75bc> 3630 +<75bd> 2305 +<75be> 2085 +<75c2> 7022 +<75c3> 7021 +<75c4> 7018 +<75c5> 1128 +<75c6> 15979 +<75c7> 4513 +<75c8> 4253 +<75c9> 2278 +<75ca> 3207 +<75cd> 7024 +<75d2> 4128 +<75d3> 15986 +<75d4> 4555 +<75d5> 1938 +<75d6> 7023 +<75d7> 15987 +<75d8> 1530 +<75d9> 8134 +<75da> 15988 +<75db> 3685 +<75de> 3013 +<75e2> 2538 +<75e3> 7025 +<75e4> 7028 +<75e5> 15994 +<75e6> 7027 +<75e7> 7030 +<75e8> 7026 +<75e9> 15995 +<75ea> 2003 +<75eb> 7029 +<75f0> 3592 +<75f1> 7032 +<75f4> 1274 +<75f9> 1085 +<75fc> 7033 +endcidchar + +100 begincidchar +<75ff> 7034 +<7600> 7036 +<7601> 1380 +<7602> 9646 +<7603> 7031 +<7604> 16010 +<7605> 7037 +<760a> 7040 +<760b> 7937 +<760c> 7038 +<760d> 8704 +<7610> 7035 +<7615> 7043 +<7616> 16021 +<7617> 7039 +<7618> 7042 +<7619> 7044 +<761a> 16022 +<761b> 7045 +<761e> 9650 +<761f> 3792 +<7620> 7048 +<7621> 7831 +<7622> 7047 +<7623> 16025 +<7624> 2623 +<7625> 7041 +<7626> 3444 +<7627> 8363 +<7628> 16026 +<7629> 1396 +<762a> 1114 +<762b> 3588 +<762c> 16027 +<762d> 7050 +<7630> 7051 +<7633> 7056 +<7634> 4463 +<7635> 7053 +<7638> 3214 +<763b> 9651 +<763c> 7046 +<763d> 16036 +<763e> 7055 +<763f> 7052 +<7640> 7049 +<7641> 16037 +<7642> 8232 +<7643> 7054 +<7648> 16040 +<7649> 9649 +<764c> 948 +<764d> 7057 +<7654> 7059 +<7655> 16049 +<7656> 7061 +<7657> 16050 +<7658> 9644 +<765c> 7060 +<765d> 16054 +<765e> 7058 +<765f> 7758 +<7662> 8706 +<7663> 4043 +<7664> 9643 +<7665> 8838 +<7666> 16057 +<7667> 9645 +<7668> 16058 +<7669> 9654 +<766a> 16059 +<766b> 7062 +<766c> 8675 +<766f> 7063 +<7670> 8751 +<7671> 8549 +<7672> 9655 +<7678> 1864 +<767b> 1448 +<767c> 7913 +<767d> 994 +<767e> 996 +<7682> 4400 +<7683> 16070 +<7684> 1445 +<7685> 16071 +<7686> 2213 +<7687> 2015 +<7688> 6957 +<768b> 1753 +<768e> 6958 +<7691> 947 +<7692> 16078 +<7693> 6959 +<7696> 3743 +<7699> 6960 +<769a> 7717 +<76a4> 6961 +<76ae> 3011 +<76b1> 4580 +endcidchar + +100 begincidchar +<76b2> 7112 +<76b3> 16103 +<76b4> 7113 +<76b8> 9664 +<76b9> 16107 +<76ba> 8858 +<76bf> 2808 +<76c2> 4288 +<76c5> 4560 +<76c6> 2985 +<76c7> 16116 +<76c8> 4244 +<76c9> 16117 +<76ca> 4205 +<76cd> 6795 +<76ce> 966 +<76cf> 4438 +<76d0> 4087 +<76d1> 2131 +<76d2> 1927 +<76d3> 16120 +<76d4> 2437 +<76d5> 16121 +<76d6> 1730 +<76d7> 1442 +<76d8> 2957 +<76db> 3385 +<76de> 8814 +<76df> 2768 +<76e0> 16126 +<76e1> 8125 +<76e2> 16127 +<76e3> 8068 +<76e4> 8370 +<76e5> 6796 +<76e6> 16128 +<76e7> 8259 +<76ee> 2850 +<76ef> 1505 +<76f0> 16135 +<76f1> 6744 +<76f2> 2729 +<76f3> 16136 +<76f4> 4528 +<76f8> 3917 +<76f9> 6747 +<76fc> 2959 +<76fd> 16142 +<76fe> 1563 +<76ff> 16143 +<7700> 16144 +<7701> 3384 +<7704> 6745 +<7709> 2753 +<770a> 16149 +<770b> 2369 +<770c> 16150 +<770d> 6746 +<7719> 6752 +<771a> 6750 +<771f> 4487 +<7720> 2788 +<7721> 16166 +<7722> 6751 +<7726> 6754 +<7727> 16170 +<7728> 4420 +<7729> 4044 +<772d> 6753 +<772e> 16174 +<772f> 2773 +<7735> 6755 +<7736> 2433 +<7737> 2331 +<7738> 6756 +<7739> 16180 +<773a> 3658 +<773b> 16181 +<773c> 4100 +<7740> 4642 +<7741> 4503 +<7742> 16185 +<7743> 6760 +<7747> 6759 +<774f> 9860 +<775a> 6761 +<775b> 2261 +<775e> 9455 +<7761> 3492 +<7762> 6763 +<7763> 1532 +<7764> 16208 +<7765> 6764 +<7766> 2851 +<7767> 16209 +<7768> 6762 +<776b> 2223 +<776c> 1166 +<7779> 1538 +<777d> 6767 +endcidchar + +100 begincidchar +<777e> 4720 +<777f> 6765 +<7780> 6768 +<7784> 2798 +<7785> 1303 +<778c> 6769 +<778d> 6766 +<778e> 3878 +<7791> 6770 +<7792> 2718 +<7798> 9454 +<779e> 8308 +<77a1> 16248 +<77a2> 5269 +<77a5> 3026 +<77a6> 16251 +<77a7> 3139 +<77a8> 16252 +<77a9> 4596 +<77aa> 1450 +<77ab> 16253 +<77ac> 3495 +<77ad> 9863 +<77b0> 6773 +<77b3> 3676 +<77b4> 16258 +<77b5> 6774 +<77bb> 4433 +<77bc> 9456 +<77bd> 6775 +<77be> 16264 +<77bf> 7550 +<77c7> 9869 +<77cd> 5015 +<77d7> 1318 +<77da> 8864 +<77db> 2737 +<77dc> 7114 +<77e2> 3407 +<77e3> 4186 +<77e4> 16293 +<77e5> 4521 +<77e6> 16294 +<77e7> 6938 +<77e8> 16295 +<77e9> 2311 +<77ea> 16296 +<77eb> 2196 +<77ec> 6939 +<77ed> 1547 +<77ee> 950 +<77ef> 8107 +<77f3> 3398 +<77f6> 6690 +<77f7> 16302 +<77f8> 6691 +<77fd> 3848 +<77fe> 1612 +<77ff> 2432 +<7800> 6692 +<7801> 2706 +<7802> 3305 +<7809> 6693 +<780c> 3093 +<780d> 2368 +<7811> 6696 +<7812> 3001 +<7813> 16318 +<7814> 4089 +<7815> 16319 +<7816> 4614 +<7819> 16320 +<781a> 4107 +<781b> 16321 +<781e> 16322 +<781f> 6704 +<7823> 6708 +<7824> 16326 +<7825> 6706 +<7826> 6714 +<7827> 4489 +<7828> 16327 +<7829> 6709 +<782c> 6707 +<782d> 6698 +<7830> 2986 +<7834> 3045 +<7837> 3362 +<7838> 4373 +<783c> 6705 +<783d> 16337 +<783e> 2532 +<783f> 16338 +<7840> 1316 +<7843> 9896 +<7844> 16341 +<7845> 1857 +<7846> 16342 +<7847> 6716 +<784c> 6717 +endcidchar + +100 begincidchar +<784d> 16347 +<784e> 6710 +<784f> 16348 +<7850> 6715 +<7851> 16349 +<7852> 3847 +<7855> 3499 +<785d> 3938 +<7864> 9449 +<7868> 9445 +<7869> 16366 +<786a> 6718 +<786b> 2619 +<786c> 4247 +<786d> 6711 +<786e> 3218 +<786f> 8698 +<7877> 2146 +<787c> 2993 +<7887> 6722 +<7888> 16388 +<7889> 1488 +<788c> 2652 +<788d> 952 +<788e> 3550 +<7891> 1047 +<7892> 16393 +<7893> 6720 +<7897> 3740 +<7898> 1475 +<7899> 16397 +<789a> 6721 +<789b> 6719 +<789c> 6723 +<789f> 1499 +<78a0> 16400 +<78a1> 6724 +<78a2> 16401 +<78a3> 6725 +<78a4> 16402 +<78a5> 6728 +<78a6> 16403 +<78a7> 1077 +<78a8> 16404 +<78a9> 8520 +<78ad> 9444 +<78b0> 2999 +<78b1> 2145 +<78b2> 6726 +<78b3> 3599 +<78b4> 1201 +<78b8> 9446 +<78b9> 6727 +<78ba> 8439 +<78bb> 16413 +<78bc> 8299 +<78bd> 16414 +<78be> 2894 +<78c1> 1352 +<78c5> 1024 +<78c9> 6731 +<78ca> 2501 +<78cb> 1387 +<78d0> 2958 +<78d4> 6729 +<78d5> 2385 +<78d9> 6730 +<78da> 8871 +<78e3> 9452 +<78e7> 9451 +<78e8> 2824 +<78ec> 6732 +<78ef> 9443 +<78f2> 6733 +<78f3> 16451 +<78f4> 6735 +<78f7> 2592 +<78fa> 2012 +<78fd> 9450 +<7900> 16460 +<7901> 2185 +<7905> 6734 +<790e> 7826 +<7913> 6736 +<7919> 7719 +<791e> 6738 +<7924> 6737 +<7925> 16490 +<7926> 8166 +<792a> 9447 +<792b> 8210 +<792c> 7916 +<7931> 9448 +<7934> 6739 +<793a> 3413 +<793b> 6648 +<793c> 2524 +<793d> 16505 +<793e> 3360 +<793f> 16506 +endcidchar + +100 begincidchar +<7940> 6649 +<7941> 3085 +<7946> 6650 +<7947> 16511 +<7948> 3084 +<7949> 6651 +<7953> 6654 +<7956> 4675 +<7957> 6657 +<795a> 6655 +<795d> 4608 +<795e> 3370 +<795f> 3555 +<7960> 6658 +<7961> 16525 +<7962> 6656 +<7965> 3926 +<7966> 16528 +<7967> 6660 +<7968> 3024 +<796d> 2099 +<796e> 16533 +<796f> 6659 +<7977> 1436 +<7978> 2059 +<7979> 16541 +<797a> 6661 +<7980> 4875 +<7981> 2252 +<7984> 2658 +<7985> 6662 +<798a> 6663 +<798d> 8038 +<798e> 9436 +<798f> 1694 +<799a> 6664 +<79a6> 9890 +<79a7> 6665 +<79aa> 9437 +<79ae> 8206 +<79af> 16581 +<79b0> 9435 +<79b1> 7864 +<79b2> 16582 +<79b3> 6666 +<79b9> 4306 +<79ba> 4708 +<79bb> 2518 +<79bc> 16588 +<79bd> 3162 +<79be> 1923 +<79bf> 16589 +<79c0> 4014 +<79c1> 3506 +<79c2> 16590 +<79c3> 3691 +<79c6> 1740 +<79c9> 1125 +<79ca> 16595 +<79cb> 3180 +<79cc> 16596 +<79cd> 4565 +<79d1> 2387 +<79d2> 2800 +<79d5> 6941 +<79d8> 2781 +<79df> 4671 +<79e3> 6943 +<79e4> 1272 +<79e5> 16613 +<79e6> 3157 +<79e7> 4118 +<79e8> 16614 +<79e9> 4551 +<79ea> 16615 +<79eb> 6944 +<79ec> 16616 +<79ed> 6942 +<79ee> 16617 +<79ef> 2066 +<79f0> 1259 +<79f8> 2214 +<79fb> 4173 +<79fc> 16627 +<79fd> 2037 +<7a00> 3854 +<7a01> 16630 +<7a02> 6948 +<7a03> 6947 +<7a06> 6945 +<7a0b> 1265 +<7a0c> 16637 +<7a0d> 3341 +<7a0e> 3493 +<7a14> 6950 +<7a17> 1001 +<7a1a> 4552 +<7a1e> 6949 +<7a1f> 16650 +<7a20> 1298 +endcidchar + +100 begincidchar +<7a23> 7567 +<7a2e> 8853 +<7a31> 7808 +<7a32> 16665 +<7a33> 3799 +<7a37> 6952 +<7a38> 16669 +<7a39> 6951 +<7a3a> 16670 +<7a3b> 1439 +<7a3c> 2125 +<7a3d> 2065 +<7a3e> 16671 +<7a3f> 1760 +<7a40> 9847 +<7a46> 2853 +<7a4c> 9764 +<7a4d> 8041 +<7a4e> 8747 +<7a51> 6953 +<7a57> 3552 +<7a61> 9599 +<7a62> 8027 +<7a69> 8603 +<7a6a> 16704 +<7a6b> 9853 +<7a70> 6956 +<7a74> 4049 +<7a75> 16712 +<7a76> 2286 +<7a77> 3179 +<7a7a> 2402 +<7a7f> 1324 +<7a80> 7068 +<7a81> 3692 +<7a82> 16717 +<7a83> 3153 +<7a84> 4430 +<7a85> 16718 +<7a86> 7069 +<7a87> 16719 +<7a88> 7070 +<7a8d> 3148 +<7a91> 4139 +<7a92> 4558 +<7a95> 7071 +<7a96> 2210 +<7a97> 1331 +<7a98> 2284 +<7a9c> 1375 +<7a9d> 3808 +<7a9e> 16732 +<7a9f> 2412 +<7aa0> 7073 +<7aa5> 2439 +<7aa6> 7072 +<7aa7> 16737 +<7aa8> 7075 +<7aa9> 8608 +<7aaa> 8582 +<7aab> 16738 +<7aac> 7074 +<7aad> 7076 +<7aae> 8429 +<7ab3> 7077 +<7ab6> 9657 +<7aba> 8170 +<7abf> 2631 +<7ac4> 7844 +<7ac5> 8417 +<7ac6> 16756 +<7ac7> 9656 +<7ac8> 8800 +<7ac9> 16757 +<7aca> 8418 +<7acb> 2539 +<7ad6> 3473 +<7ad9> 4447 +<7ade> 2281 +<7adf> 2280 +<7ae0> 4451 +<7ae3> 2351 +<7ae4> 16776 +<7ae5> 3680 +<7ae6> 7065 +<7aea> 8513 +<7aed> 2224 +<7aee> 16782 +<7aef> 1546 +<7af6> 8135 +<7af9> 4592 +<7afa> 7267 +<7afd> 7268 +<7afe> 16793 +<7aff> 1736 +<7b05> 16797 +<7b06> 981 +<7b07> 16798 +<7b08> 7269 +<7b09> 16799 +endcidchar + +100 begincidchar +<7b0a> 7273 +<7b0b> 3558 +<7b0f> 7275 +<7b10> 16803 +<7b11> 3953 +<7b14> 1075 +<7b15> 7272 +<7b19> 7279 +<7b1a> 16809 +<7b1b> 1458 +<7b1e> 7287 +<7b1f> 16812 +<7b20> 7282 +<7b24> 7284 +<7b25> 7283 +<7b26> 1688 +<7b27> 16816 +<7b28> 1064 +<7b29> 16817 +<7b2a> 7278 +<7b2b> 7274 +<7b2c> 1467 +<7b2d> 16818 +<7b2e> 7280 +<7b31> 7281 +<7b32> 16821 +<7b33> 7285 +<7b38> 7277 +<7b39> 16826 +<7b3a> 2134 +<7b3b> 16827 +<7b3c> 2630 +<7b3d> 16828 +<7b3e> 7286 +<7b45> 7290 +<7b46> 7745 +<7b47> 7276 +<7b48> 16835 +<7b49> 1449 +<7b4a> 16836 +<7b4b> 2239 +<7b4c> 7292 +<7b4f> 1601 +<7b50> 2429 +<7b51> 4605 +<7b52> 3683 +<7b53> 16839 +<7b54> 1395 +<7b55> 16840 +<7b56> 1190 +<7b57> 16841 +<7b58> 7288 +<7b59> 16842 +<7b5a> 7289 +<7b5b> 3313 +<7b5c> 16843 +<7b5d> 7293 +<7b60> 7294 +<7b61> 16846 +<7b62> 7297 +<7b67> 9700 +<7b6e> 7295 +<7b71> 7299 +<7b72> 7298 +<7b75> 7291 +<7b76> 16861 +<7b77> 2423 +<7b78> 16862 +<7b79> 1300 +<7b7a> 16863 +<7b7b> 7296 +<7b7e> 3110 +<7b7f> 16866 +<7b80> 2149 +<7b85> 7307 +<7b8b> 8070 +<7b8c> 16876 +<7b8d> 1816 +<7b90> 7300 +<7b94> 1140 +<7b95> 2067 +<7b96> 16882 +<7b97> 3544 +<7b9c> 7309 +<7b9d> 7305 +<7ba1> 1845 +<7ba2> 7310 +<7ba8> 7306 +<7ba9> 2696 +<7baa> 7308 +<7bab> 7311 +<7bac> 7304 +<7bad> 2160 +<7bb1> 3921 +<7bb4> 7312 +<7bb8> 7303 +<7bc0> 8115 +<7bc1> 7314 +<7bc4> 7919 +<7bc5> 16910 +endcidchar + +100 begincidchar +<7bc6> 4618 +<7bc7> 3017 +<7bc8> 16911 +<7bc9> 8868 +<7bca> 16912 +<7bcb> 9704 +<7bcc> 7315 +<7bd1> 7313 +<7bd2> 16917 +<7bd3> 2639 +<7bd9> 1752 +<7bda> 7317 +<7bdd> 7316 +<7be1> 1374 +<7be4> 9699 +<7be9> 8465 +<7bea> 7320 +<7bee> 2469 +<7bf1> 2516 +<7bf2> 16937 +<7bf3> 9702 +<7bf7> 2994 +<7bfc> 7323 +<7bfd> 16945 +<7bfe> 7322 +<7bff> 16946 +<7c00> 9703 +<7c07> 1371 +<7c0b> 7326 +<7c0c> 7321 +<7c0d> 8257 +<7c0e> 16956 +<7c0f> 7324 +<7c16> 7325 +<7c1e> 9706 +<7c1f> 7327 +<7c20> 16970 +<7c21> 8079 +<7c22> 16971 +<7c23> 9708 +<7c26> 7329 +<7c27> 2014 +<7c2a> 7328 +<7c2b> 9707 +<7c38> 7330 +<7c3d> 8400 +<7c3e> 8221 +<7c3f> 1157 +<7c40> 7332 +<7c41> 7331 +<7c42> 16992 +<7c43> 8183 +<7c4c> 7821 +<7c4d> 2081 +<7c5c> 9705 +<7c5f> 9710 +<7c60> 8250 +<7c64> 9875 +<7c69> 9701 +<7c6a> 9709 +<7c6b> 17024 +<7c6c> 8201 +<7c6d> 17025 +<7c6e> 8293 +<7c72> 9891 +<7c73> 2780 +<7c74> 4853 +<7c7b> 2507 +<7c7c> 7370 +<7c7d> 4654 +<7c89> 1656 +<7c91> 7372 +<7c92> 2540 +<7c95> 3048 +<7c96> 17055 +<7c97> 1369 +<7c98> 4436 +<7c9c> 7374 +<7c9d> 7373 +<7c9e> 7375 +<7c9f> 3535 +<7ca2> 7376 +<7ca3> 17061 +<7ca4> 4356 +<7ca5> 4575 +<7caa> 1661 +<7cae> 2561 +<7cb1> 2564 +<7cb2> 7377 +<7cb3> 2267 +<7cb9> 1381 +<7cbe> 2266 +<7cc1> 7380 +<7cc5> 7385 +<7cc6> 17083 +<7cc7> 7381 +<7cc8> 7384 +<7cc9> 17084 +<7cca> 1972 +<7ccb> 17085 +endcidchar + +100 begincidchar +<7cd5> 1757 +<7cd6> 3610 +<7cd7> 7386 +<7cd8> 17093 +<7cd9> 1185 +<7cdc> 2776 +<7cdd> 9717 +<7cde> 7932 +<7cdf> 4390 +<7ce0> 2372 +<7ce7> 8228 +<7ce8> 7387 +<7cef> 2933 +<7cf0> 9883 +<7cf1> 17108 +<7cf2> 9715 +<7cf3> 17109 +<7cf4> 8921 +<7cf5> 17110 +<7cf6> 9716 +<7cf7> 17111 +<7cf8> 7399 +<7cf9> 9243 +<7cfa> 17112 +<7cfb> 3874 +<7cfe> 8136 +<7cff> 17115 +<7d00> 8059 +<7d01> 17116 +<7d02> 9245 +<7d03> 17117 +<7d04> 8780 +<7d05> 8008 +<7d06> 9244 +<7d09> 8447 +<7d0a> 3800 +<7d0b> 8602 +<7d0c> 17118 +<7d0d> 8337 +<7d10> 8359 +<7d13> 9251 +<7d14> 7835 +<7d15> 9250 +<7d16> 17123 +<7d17> 8464 +<7d18> 17124 +<7d19> 8845 +<7d1a> 8049 +<7d1b> 7928 +<7d1c> 9249 +<7d20> 3533 +<7d21> 7923 +<7d22> 3564 +<7d27> 2245 +<7d2b> 4652 +<7d2f> 2502 +<7d30> 8625 +<7d31> 9254 +<7d32> 9253 +<7d33> 8480 +<7d39> 8474 +<7d3a> 9252 +<7d3b> 17143 +<7d3c> 9256 +<7d3f> 9258 +<7d40> 9257 +<7d41> 17146 +<7d42> 8852 +<7d43> 17147 +<7d44> 8894 +<7d45> 17148 +<7d46> 7729 +<7d4e> 9260 +<7d4f> 17156 +<7d50> 8117 +<7d5d> 9259 +<7d5e> 8111 +<7d61> 8296 +<7d62> 8676 +<7d66> 7969 +<7d67> 17174 +<7d68> 8449 +<7d6e> 4032 +<7d71> 8572 +<7d72> 8522 +<7d73> 9261 +<7d76> 8148 +<7d77> 7400 +<7d78> 17184 +<7d79> 8145 +<7d81> 7731 +<7d82> 17192 +<7d83> 9263 +<7d86> 9262 +<7d87> 17195 +<7d88> 9264 +<7d89> 8667 +<7d8f> 8536 +<7d93> 8130 +<7d9c> 8889 +endcidchar + +100 begincidchar +<7d9d> 17212 +<7d9e> 9270 +<7da2> 7822 +<7da3> 9273 +<7da6> 7401 +<7dab> 8645 +<7dac> 9271 +<7dad> 8594 +<7dae> 7402 +<7daf> 17222 +<7db0> 9274 +<7db1> 7961 +<7db2> 8588 +<7db3> 7744 +<7db4> 8883 +<7db8> 8287 +<7db9> 9272 +<7dba> 9266 +<7dbb> 8820 +<7dbc> 17226 +<7dbd> 7836 +<7dbe> 9265 +<7dbf> 8325 +<7dc4> 9269 +<7dc7> 9275 +<7dca> 8119 +<7dcb> 9267 +<7dd1> 8276 +<7dd2> 8670 +<7dd3> 17240 +<7dd4> 9268 +<7dd7> 9277 +<7dd8> 8073 +<7dd9> 9276 +<7ddd> 8046 +<7dde> 7896 +<7ddf> 17246 +<7de0> 7871 +<7de1> 9285 +<7de2> 17247 +<7de3> 8777 +<7de6> 9281 +<7de7> 17250 +<7de8> 7751 +<7de9> 8022 +<7dec> 8326 +<7def> 8598 +<7df0> 17255 +<7df1> 9283 +<7df2> 9279 +<7df3> 17256 +<7df4> 8227 +<7df5> 17257 +<7df6> 9282 +<7df9> 9278 +<7dfa> 17260 +<7dfb> 9894 +<7e08> 9038 +<7e09> 9286 +<7e0a> 9291 +<7e0b> 9284 +<7e10> 9255 +<7e11> 9292 +<7e1b> 7951 +<7e1c> 17286 +<7e1d> 9287 +<7e1e> 9289 +<7e1f> 9288 +<7e23> 8642 +<7e27> 8558 +<7e2b> 7939 +<7e2c> 17296 +<7e2d> 9290 +<7e2e> 8540 +<7e31> 8891 +<7e32> 9296 +<7e33> 17299 +<7e34> 9876 +<7e35> 9295 +<7e36> 9718 +<7e37> 8273 +<7e38> 17300 +<7e39> 9294 +<7e3a> 17301 +<7e3b> 7675 +<7e3c> 17302 +<7e3d> 8890 +<7e3e> 8045 +<7e41> 1614 +<7e45> 9298 +<7e46> 9297 +<7e47> 7403 +<7e52> 9301 +<7e53> 17318 +<7e54> 8841 +<7e55> 8470 +<7e5a> 9300 +<7e5e> 8443 +<7e62> 9280 +<7e69> 8486 +endcidchar + +100 begincidchar +<7e6a> 8033 +<7e6b> 9885 +<7e6c> 17335 +<7e6d> 8074 +<7e6e> 9302 +<7e6f> 9305 +<7e70> 9304 +<7e73> 8110 +<7e79> 8730 +<7e7c> 8058 +<7e7d> 9293 +<7e7e> 9303 +<7e82> 4680 +<7e88> 9299 +<7e89> 17353 +<7e8a> 9248 +<7e8b> 17354 +<7e8c> 8671 +<7e8d> 9861 +<7e8e> 17355 +<7e8f> 7790 +<7e93> 8740 +<7e94> 9840 +<7e95> 17359 +<7e96> 8634 +<7e97> 17360 +<7e98> 9306 +<7e9b> 7404 +<7e9c> 8191 +<7e9f> 6099 +<7ea0> 2287 +<7ea1> 6100 +<7ea2> 1955 +<7ea3> 6101 +<7ea4> 3896 +<7ea5> 6102 +<7ea6> 4351 +<7ea7> 2089 +<7eaa> 2112 +<7eab> 3245 +<7eac> 3778 +<7ead> 6105 +<7eae> 17365 +<7eaf> 1346 +<7eb0> 6106 +<7eb1> 3309 +<7eb2> 1748 +<7eb3> 2860 +<7eb4> 17366 +<7eb5> 4666 +<7eb6> 2689 +<7eb7> 1652 +<7eb8> 4540 +<7eb9> 3797 +<7eba> 1633 +<7ebd> 2919 +<7ebe> 6107 +<7ebf> 3916 +<7ec3> 2560 +<7ec4> 4678 +<7ec5> 3369 +<7ec6> 3877 +<7ec7> 4526 +<7ec8> 4564 +<7ec9> 6111 +<7eca> 1016 +<7ecd> 3349 +<7ece> 4214 +<7ecf> 2268 +<7ed0> 6114 +<7ed1> 1022 +<7ed2> 3257 +<7ed3> 2226 +<7ed4> 6115 +<7ed5> 3233 +<7ed6> 17369 +<7ed7> 6116 +<7ed8> 2043 +<7ed9> 1779 +<7eda> 4045 +<7edb> 6117 +<7edc> 2702 +<7edd> 2343 +<7ede> 2203 +<7edf> 3684 +<7ee2> 2333 +<7ee3> 4016 +<7ee4> 17370 +<7ee5> 3548 +<7ee6> 3619 +<7ee7> 2111 +<7ee8> 6120 +<7ee9> 2075 +<7eea> 4034 +<7eeb> 6121 +<7eec> 17371 +<7eed> 4035 +<7ef0> 1349 +<7ef3> 3383 +<7ef4> 3771 +endcidchar + +100 begincidchar +<7ef5> 2789 +<7ef6> 6127 +<7ef7> 1066 +<7ef8> 1302 +<7ef9> 17372 +<7efc> 4664 +<7efd> 4449 +<7efe> 6130 +<7eff> 2675 +<7f00> 4631 +<7f04> 2141 +<7f05> 2794 +<7f06> 2477 +<7f09> 2076 +<7f0a> 17373 +<7f0d> 6126 +<7f0e> 1551 +<7f0f> 6138 +<7f10> 17374 +<7f13> 1999 +<7f14> 1471 +<7f15> 2669 +<7f16> 1097 +<7f17> 6141 +<7f18> 4344 +<7f19> 6142 +<7f1a> 1722 +<7f1b> 6144 +<7f1c> 6143 +<7f1d> 1673 +<7f1e> 17375 +<7f1f> 6145 +<7f20> 1215 +<7f28> 4236 +<7f29> 3562 +<7f2e> 3330 +<7f34> 2202 +<7f35> 6162 +<7f36> 7262 +<7f37> 17376 +<7f38> 1746 +<7f39> 17377 +<7f3a> 3212 +<7f42> 7263 +<7f43> 17385 +<7f4c> 9698 +<7f4d> 17392 +<7f4e> 9882 +<7f4f> 17393 +<7f50> 1847 +<7f51> 3753 +<7f54> 4766 +<7f55> 1896 +<7f56> 17396 +<7f57> 2693 +<7f58> 6785 +<7f59> 17397 +<7f5a> 1600 +<7f5f> 6787 +<7f60> 17402 +<7f61> 6786 +<7f62> 992 +<7f68> 6789 +<7f69> 4471 +<7f6a> 4684 +<7f6e> 4546 +<7f6f> 17411 +<7f70> 7914 +<7f71> 6791 +<7f72> 3463 +<7f73> 17412 +<7f74> 6790 +<7f77> 7724 +<7f78> 17415 +<7f79> 6792 +<7f7e> 6794 +<7f81> 6793 +<7f85> 8290 +<7f86> 9457 +<7f87> 17425 +<7f88> 9458 +<7f89> 17426 +<7f8a> 4123 +<7f8b> 17427 +<7f8c> 3129 +<7f8d> 17428 +<7f8e> 2757 +<7f94> 1756 +<7f9a> 2608 +<7f9d> 7364 +<7f9e> 4010 +<7f9f> 7365 +<7fa0> 17441 +<7fa1> 3912 +<7fa4> 3221 +<7fa5> 9714 +<7fa6> 17444 +<7fa7> 7366 +<7fa8> 17445 +<7fa9> 8725 +endcidchar + +100 begincidchar +<7fb1> 17451 +<7fb2> 7369 +<7fb8> 4878 +<7fb9> 1785 +<7fbc> 5997 +<7fbd> 4309 +<7fbe> 17459 +<7fbf> 7390 +<7fc0> 17460 +<7fc1> 3803 +<7fc5> 1286 +<7fca> 7064 +<7fcb> 17468 +<7fcc> 4213 +<7fcd> 17469 +<7fce> 7391 +<7fd2> 8622 +<7fd3> 17473 +<7fd4> 3925 +<7fd5> 7392 +<7fd8> 3145 +<7fdf> 1461 +<7fe0> 1383 +<7fe1> 7394 +<7fe5> 7393 +<7fe6> 7395 +<7fe9> 7396 +<7fee> 7397 +<7fef> 17491 +<7ff0> 1897 +<7ff1> 970 +<7ff2> 17492 +<7ff3> 7398 +<7ff9> 8416 +<7ffa> 17498 +<7ffb> 1610 +<7ffc> 4212 +<8000> 4146 +<8001> 2490 +<8002> 17502 +<8003> 2377 +<8004> 6483 +<8005> 4480 +<8006> 6426 +<800b> 7127 +<800c> 1591 +<800d> 3480 +<8010> 2864 +<8011> 17509 +<8012> 7115 +<8013> 17510 +<8014> 7116 +<8015> 1782 +<8016> 7117 +<8017> 1915 +<8018> 4360 +<8019> 989 +<801c> 7118 +<8020> 7119 +<8021> 17516 +<8022> 7120 +<8028> 7125 +<8029> 7124 +<802a> 2966 +<802b> 17519 +<802c> 9666 +<802d> 17520 +<802e> 9665 +<8031> 7126 +<8032> 17523 +<8033> 1593 +<8034> 17524 +<8035> 7128 +<8036> 4149 +<8037> 5297 +<8038> 3519 +<803b> 1281 +<803c> 17527 +<803d> 1411 +<803e> 17528 +<803f> 1787 +<8042> 2903 +<8043> 7129 +<8046> 7130 +<804a> 2573 +<804b> 2628 +<804c> 4527 +<804d> 7131 +<8052> 7132 +<8053> 17540 +<8054> 2547 +<8055> 17541 +<8056> 8488 +<8057> 17542 +<8058> 3031 +<8059> 17543 +<805a> 2314 +<805e> 8601 +<8069> 7133 +<806a> 1362 +endcidchar + +100 begincidchar +<806f> 8215 +<8070> 7840 +<8071> 7134 +<8072> 8485 +<8073> 8525 +<8074> 17561 +<8075> 9668 +<8076> 8349 +<8077> 8842 +<8078> 17562 +<8079> 9667 +<807d> 8569 +<807e> 8248 +<807f> 6686 +<8080> 6685 +<8083> 3541 +<8084> 4197 +<8085> 8533 +<8086> 3510 +<8087> 4473 +<8088> 17568 +<8089> 3261 +<808a> 17569 +<808b> 2506 +<808c> 2068 +<8093> 6513 +<8096> 3951 +<8097> 17578 +<8098> 4577 +<8099> 17579 +<809a> 1542 +<809b> 1747 +<809c> 6512 +<809d> 1737 +<809e> 17580 +<809f> 6511 +<80a0> 1227 +<80a1> 1826 +<80a2> 4522 +<80a3> 17581 +<80a4> 1681 +<80a5> 1639 +<80a9> 2138 +<80aa> 1627 +<80ab> 6518 +<80ac> 17585 +<80ad> 6519 +<80ae> 964 +<80af> 2396 +<80b0> 17586 +<80b1> 6517 +<80b2> 4322 +<80b3> 17587 +<80b4> 6520 +<80b7> 6521 +<80ba> 1643 +<80bb> 17592 +<80bc> 6514 +<80bd> 6516 +<80be> 3375 +<80bf> 4566 +<80c0> 4462 +<80c1> 3965 +<80c2> 6527 +<80c3> 3783 +<80c4> 6528 +<80c5> 17593 +<80c6> 1417 +<80cc> 1052 +<80cd> 6530 +<80ce> 3576 +<80d6> 2967 +<80d7> 6531 +<80d8> 17606 +<80d9> 6529 +<80da> 2976 +<80db> 6526 +<80dc> 3387 +<80dd> 6533 +<80de> 1030 +<80e1> 1969 +<80e4> 4717 +<80e5> 7111 +<80e6> 17611 +<80eb> 6534 +<80ec> 6042 +<80ed> 6537 +<80ee> 17612 +<80ef> 2421 +<80f0> 4175 +<80f1> 6535 +<80f2> 6540 +<80f3> 1767 +<80f4> 6536 +<80f5> 17613 +<80f6> 2187 +<80f7> 17614 +<80f8> 4003 +<80f9> 17615 +<80fa> 962 +endcidchar + +100 begincidchar +<80fb> 17616 +<80fc> 6541 +<80fd> 2879 +<8102> 4523 +<8105> 8658 +<8106> 1379 +<8109> 2717 +<810a> 2092 +<810f> 4387 +<8110> 3081 +<8111> 2871 +<8112> 6543 +<8113> 2920 +<8114> 4873 +<8115> 17627 +<8116> 1144 +<8117> 17628 +<8118> 6548 +<8119> 17629 +<811a> 2198 +<811b> 9415 +<811e> 6546 +<812c> 6547 +<812f> 1703 +<8130> 17647 +<8131> 3714 +<8132> 6549 +<8136> 6545 +<8137> 17651 +<8138> 2556 +<8139> 8825 +<813e> 3009 +<8146> 3654 +<8147> 17663 +<8148> 6550 +<8149> 17664 +<814a> 2459 +<814b> 4159 +<814c> 6551 +<814d> 17665 +<814e> 8483 +<814f> 17666 +<8150> 1706 +<8151> 1704 +<8152> 17667 +<8153> 6552 +<8154> 3128 +<8155> 3748 +<8156> 9413 +<8160> 6557 +<8161> 9417 +<8165> 3987 +<8166> 8340 +<8167> 6562 +<8168> 17678 +<8169> 6558 +<816a> 17679 +<816b> 8854 +<816c> 17680 +<816d> 6561 +<816e> 3284 +<816f> 17681 +<8170> 4133 +<8171> 6556 +<8174> 6553 +<8178> 7799 +<8179> 1716 +<817a> 3910 +<817b> 2888 +<817e> 3629 +<817f> 3705 +<8180> 1021 +<8181> 17687 +<8182> 6566 +<8188> 6565 +<8189> 17693 +<818a> 1145 +<818f> 1755 +<8190> 17698 +<8191> 6567 +<8198> 1109 +<8199> 17705 +<819a> 7942 +<819b> 3608 +<819c> 2823 +<819d> 3858 +<81a0> 8101 +<81a3> 6569 +<81a6> 6576 +<81a7> 17712 +<81a8> 2995 +<81a9> 8345 +<81aa> 6570 +<81b3> 3326 +<81ba> 5697 +<81bb> 6574 +<81bc> 17727 +<81bd> 7853 +<81be> 9416 +<81bf> 8360 +endcidchar + +100 begincidchar +<81c0> 3711 +<81c1> 6575 +<81c2> 1092 +<81c3> 4252 +<81c6> 4195 +<81c9> 8223 +<81ca> 6573 +<81cb> 17732 +<81cc> 6571 +<81cd> 8389 +<81ce> 17733 +<81cf> 9418 +<81d8> 8176 +<81d9> 17742 +<81da> 9414 +<81df> 8797 +<81e0> 8926 +<81e3> 1249 +<81e7> 6402 +<81e8> 8236 +<81e9> 17752 +<81ea> 4657 +<81eb> 17753 +<81ec> 7337 +<81ed> 1305 +<81fa> 8545 +<81fb> 4490 +<81fc> 2297 +<81fd> 17764 +<81fe> 7333 +<81ff> 17765 +<8200> 4143 +<8203> 17766 +<8204> 7336 +<8205> 2298 +<8206> 4292 +<8207> 8763 +<8208> 8665 +<8209> 8139 +<820a> 8137 +<820b> 17767 +<8210> 7266 +<8211> 17770 +<8212> 3453 +<8213> 17771 +<8214> 3653 +<821b> 5656 +<821c> 3497 +<821d> 17778 +<821e> 3831 +<821f> 4570 +<8220> 17779 +<8228> 7344 +<8229> 17784 +<822a> 1908 +<822b> 7345 +<822c> 1006 +<822d> 7342 +<822e> 17785 +<822f> 7343 +<8230> 2163 +<8231> 1180 +<8232> 17786 +<8235> 1573 +<8236> 1143 +<8237> 3900 +<8238> 7346 +<8239> 1327 +<823a> 17787 +<823b> 7347 +<823e> 7350 +<8244> 7351 +<8247> 3672 +<8248> 17797 +<8249> 7352 +<824a> 17798 +<824b> 7353 +<824f> 7354 +<8258> 3527 +<8259> 7777 +<825a> 7355 +<825f> 7356 +<8264> 9711 +<8265> 17818 +<8266> 8088 +<8267> 17819 +<8268> 7357 +<826b> 9712 +<826e> 7388 +<826f> 2565 +<8270> 2139 +<8271> 8072 +<8272> 3300 +<8273> 4103 +<8274> 6001 +<8277> 8696 +<8278> 17826 +<8279> 5089 +<827a> 4188 +<827d> 5090 +endcidchar + +100 begincidchar +<827e> 951 +<827f> 5091 +<8282> 2219 +<8283> 17831 +<8284> 5095 +<8288> 4728 +<8289> 17835 +<828a> 5093 +<828b> 4312 +<828c> 17836 +<828d> 3343 +<828e> 5096 +<828f> 5092 +<8290> 17837 +<8291> 5097 +<8292> 2727 +<8297> 5098 +<8298> 5107 +<8299> 5099 +<829c> 3822 +<829d> 4516 +<829e> 17844 +<829f> 5117 +<82a0> 17845 +<82a1> 5115 +<82a4> 5120 +<82a5> 2231 +<82a6> 2642 +<82a7> 17848 +<82a8> 5094 +<82a9> 5113 +<82aa> 5116 +<82ab> 5100 +<82ac> 1647 +<82ad> 976 +<82ae> 5109 +<82af> 3977 +<82b0> 5103 +<82b1> 1981 +<82b2> 17849 +<82b3> 1625 +<82b4> 5114 +<82b7> 5108 +<82b8> 5101 +<82b9> 3160 +<82ba> 17852 +<82bb> 8994 +<82bc> 17853 +<82bd> 4072 +<82be> 5102 +<82c1> 5112 +<82c4> 5118 +<82c7> 3772 +<82c8> 5104 +<82c9> 17860 +<82ca> 5105 +<82cd> 1179 +<82ce> 5119 +<82cf> 3530 +<82d0> 17861 +<82d1> 4346 +<82d2> 5129 +<82d3> 5133 +<82d4> 3577 +<82d5> 5140 +<82d6> 17862 +<82d7> 2796 +<82d8> 5130 +<82db> 2382 +<82dc> 5127 +<82dd> 17865 +<82de> 1029 +<82df> 1807 +<82e0> 5139 +<82e1> 5121 +<82e2> 17866 +<82e3> 5106 +<82e4> 5124 +<82e5> 3279 +<82e6> 2413 +<82e7> 9014 +<82eb> 3316 +<82ef> 1062 +<82f0> 17873 +<82f1> 4231 +<82f4> 5128 +<82f7> 5123 +<82f8> 17878 +<82f9> 3034 +<82fa> 17879 +<82fb> 5132 +<8300> 17884 +<8301> 4639 +<8302> 2740 +<8303> 1619 +<8304> 3150 +<8305> 2734 +<8306> 5136 +<8307> 5126 +<8308> 5145 +endcidchar + +100 begincidchar +<8309> 5122 +<830c> 5131 +<830d> 17887 +<830e> 2260 +<830f> 5125 +<8310> 17888 +<8311> 5134 +<8316> 17891 +<8317> 5158 +<831a> 5135 +<831b> 5166 +<831c> 5141 +<8327> 2142 +<8328> 1351 +<832b> 2728 +<832c> 1198 +<832d> 5160 +<832e> 17906 +<832f> 5152 +<8330> 17907 +<8331> 5149 +<8332> 17908 +<8333> 5162 +<8334> 5148 +<8335> 4215 +<8336> 1199 +<8337> 17909 +<8338> 3250 +<8339> 3262 +<833a> 5161 +<833b> 17910 +<833c> 5147 +<8340> 5157 +<8343> 5155 +<8346> 2258 +<8347> 5154 +<8348> 17918 +<8349> 1188 +<834f> 5153 +<8350> 2153 +<8351> 5142 +<8352> 2009 +<8353> 17924 +<8354> 2526 +<835a> 2119 +<835d> 17930 +<835e> 5151 +<835f> 5156 +<8360> 5159 +<8361> 1429 +<8362> 17931 +<8363> 3252 +<8364> 2044 +<8365> 5164 +<8366> 5163 +<8367> 4240 +<8368> 5165 +<8369> 5167 +<836a> 5169 +<836b> 4216 +<836c> 5168 +<836f> 4144 +<8377> 1920 +<8378> 5173 +<837b> 5186 +<837c> 5181 +<837d> 5184 +<8385> 5180 +<8386> 3053 +<8389> 2525 +<838a> 8875 +<838e> 3304 +<8392> 5146 +<8393> 5178 +<8396> 8127 +<8397> 17958 +<8398> 5187 +<839b> 5150 +<839c> 5179 +<839d> 17961 +<839e> 5188 +<839f> 17962 +<83a0> 5176 +<83a1> 17963 +<83a2> 8061 +<83a7> 9011 +<83a8> 5189 +<83a9> 5183 +<83aa> 5177 +<83ab> 2829 +<83b0> 5172 +<83b1> 2462 +<83b2> 2548 +<83b5> 17972 +<83b6> 5182 +<83b7> 2054 +<83b8> 5185 +<83b9> 4237 +<83ba> 5190 +<83bb> 17973 +endcidchar + +100 begincidchar +<83bc> 5191 +<83bd> 2732 +<83c0> 5214 +<83c1> 5192 +<83c5> 5213 +<83c6> 17979 +<83c7> 1814 +<83ca> 2308 +<83cb> 17982 +<83cc> 2345 +<83cf> 1921 +<83d4> 5206 +<83d5> 17989 +<83d6> 5201 +<83d7> 17990 +<83d8> 5195 +<83dc> 1170 +<83dd> 5199 +<83de> 17994 +<83df> 5207 +<83e0> 1131 +<83e1> 5217 +<83e5> 5194 +<83e9> 3055 +<83ea> 5212 +<83ef> 8013 +<83f0> 5216 +<83f1> 2603 +<83f2> 1635 +<83fd> 5200 +<8400> 18015 +<8401> 5193 +<8402> 18016 +<8403> 5209 +<8404> 3620 +<8405> 18017 +<8406> 5205 +<8407> 9012 +<840a> 8177 +<840b> 5198 +<840c> 2765 +<840d> 3035 +<840e> 3773 +<840f> 5208 +<8410> 18020 +<8411> 5204 +<8418> 5197 +<841c> 5202 +<841d> 2691 +<8426> 5215 +<8427> 3937 +<8428> 3283 +<842c> 8587 +<8431> 5234 +<8435> 9033 +<8438> 5203 +<843c> 5228 +<843d> 2699 +<8446> 5229 +<8449> 8715 +<8451> 5219 +<8452> 9030 +<8457> 4599 +<8458> 18072 +<8459> 5221 +<845a> 5220 +<845b> 1771 +<845c> 5218 +<8461> 3054 +<8462> 18077 +<8463> 1516 +<8464> 9031 +<8465> 18078 +<8466> 8595 +<8469> 5230 +<846a> 18081 +<846b> 1968 +<846c> 4388 +<846d> 5235 +<846e> 18082 +<846f> 9889 +<8470> 18083 +<8471> 1363 +<8472> 18084 +<8473> 5222 +<8474> 18085 +<8475> 2440 +<8476> 5231 +<8477> 8034 +<8478> 5227 +<8479> 18086 +<847a> 5225 +<8482> 1466 +<8489> 5226 +<848a> 18098 +<848b> 2176 +<848c> 5232 +<848d> 18099 +<848e> 5233 +<8493> 9037 +endcidchar + +100 begincidchar +<8494> 9032 +<8497> 5249 +<8498> 18106 +<8499> 2766 +<849c> 3543 +<84a1> 5246 +<84af> 4759 +<84b2> 3056 +<84b3> 18128 +<84b4> 5248 +<84b8> 4501 +<84b9> 5247 +<84ba> 5244 +<84bb> 18132 +<84bc> 7776 +<84bd> 5240 +<84be> 18133 +<84bf> 5243 +<84c0> 9029 +<84c1> 5236 +<84c4> 4025 +<84c9> 3251 +<84ca> 5242 +<84cb> 7954 +<84cc> 18140 +<84cd> 5237 +<84d0> 5238 +<84d1> 3559 +<84d2> 18143 +<84d3> 5241 +<84d6> 1078 +<84dd> 2465 +<84de> 18152 +<84df> 2094 +<84e0> 5245 +<84e3> 5251 +<84e4> 18155 +<84e5> 5250 +<84e6> 5239 +<84ec> 2991 +<84ed> 18161 +<84ee> 8216 +<84ef> 9013 +<84f0> 5255 +<84fc> 5262 +<84fd> 9020 +<84fe> 18173 +<84ff> 5261 +<850c> 5252 +<8511> 2804 +<8512> 18190 +<8513> 2722 +<8514> 9839 +<8517> 4482 +<851a> 3780 +<851e> 9041 +<851f> 5257 +<8520> 18198 +<8521> 1171 +<8522> 18199 +<8523> 8096 +<8526> 9016 +<852b> 2891 +<852c> 3446 +<852d> 8731 +<8537> 3131 +<8538> 5254 +<8539> 5256 +<853a> 5258 +<853b> 5260 +<853c> 949 +<853d> 1079 +<8541> 9026 +<8542> 18218 +<8543> 5270 +<8546> 9039 +<8547> 18221 +<8548> 5264 +<8549> 2183 +<854a> 3274 +<854e> 9021 +<8552> 9028 +<8553> 9009 +<8554> 18228 +<8555> 9035 +<8556> 5259 +<8557> 18229 +<8558> 9019 +<8559> 5263 +<855e> 5267 +<8562> 9040 +<8563> 18237 +<8564> 5266 +<8568> 5265 +<8569> 7860 +<856a> 8614 +<856d> 8651 +<8572> 5271 +<8573> 18247 +<8574> 4367 +endcidchar + +100 begincidchar +<8577> 9045 +<8578> 18250 +<8579> 5277 +<857a> 5268 +<857b> 5272 +<857e> 2500 +<8584> 1034 +<8585> 5280 +<8586> 18258 +<8587> 5275 +<8588> 9022 +<8589> 18259 +<858a> 8052 +<858b> 18260 +<858c> 9008 +<858f> 5276 +<8590> 18263 +<8591> 9856 +<8594> 8410 +<859b> 4047 +<859c> 5279 +<859f> 9034 +<85a4> 5273 +<85a5> 18278 +<85a6> 8081 +<85a7> 18279 +<85a8> 5274 +<85a9> 8455 +<85aa> 3976 +<85ae> 5278 +<85af> 3460 +<85b0> 5283 +<85b7> 5282 +<85b8> 18289 +<85b9> 5281 +<85ba> 9023 +<85c1> 5285 +<85c9> 2230 +<85cd> 8180 +<85ce> 9027 +<85cf> 1183 +<85d0> 2799 +<85d3> 5284 +<85d4> 18308 +<85d5> 2939 +<85dc> 5286 +<85dd> 8722 +<85e4> 3628 +<85e5> 8711 +<85e9> 1607 +<85ea> 9049 +<85f4> 8788 +<85f5> 18333 +<85f6> 9010 +<85f9> 7718 +<85fa> 9047 +<85fb> 4392 +<85ff> 5287 +<8604> 9048 +<8605> 5289 +<8606> 8258 +<8607> 8531 +<860b> 8379 +<8611> 2821 +<8616> 5291 +<861a> 9050 +<861e> 9046 +<8622> 9015 +<8627> 5288 +<8628> 18368 +<8629> 5290 +<862d> 8185 +<8638> 4443 +<8639> 18382 +<863a> 9043 +<863b> 18383 +<863c> 5292 +<863f> 8289 +<864d> 7152 +<864e> 1975 +<864f> 2649 +<8650> 2929 +<8651> 2670 +<8654> 7153 +<8655> 7829 +<865a> 4020 +<865b> 18405 +<865c> 8265 +<865d> 18406 +<865e> 4290 +<865f> 8002 +<8662> 6509 +<8667> 8168 +<866b> 1291 +<866c> 7154 +<866d> 18416 +<866e> 7155 +<8671> 3396 +<8679> 1950 +<867a> 7157 +endcidchar + +100 begincidchar +<867b> 7159 +<867c> 7158 +<867d> 3545 +<867e> 3879 +<867f> 7156 +<8680> 3403 +<8681> 4182 +<8682> 2707 +<868a> 3794 +<868b> 7162 +<868c> 1025 +<868d> 7161 +<8693> 7168 +<8694> 18438 +<8695> 1174 +<869c> 4074 +<869d> 7164 +<86a3> 7166 +<86a4> 4396 +<86a7> 7165 +<86a8> 7160 +<86a9> 7169 +<86aa> 7167 +<86ab> 18452 +<86ac> 7163 +<86af> 7177 +<86b0> 7174 +<86b1> 7176 +<86b4> 7180 +<86b5> 7172 +<86b6> 7170 +<86ba> 7175 +<86c0> 4602 +<86c4> 7171 +<86c5> 18468 +<86c6> 3190 +<86c7> 3352 +<86c8> 18469 +<86c9> 7178 +<86ca> 1823 +<86cb> 1425 +<86ce> 7173 +<86cf> 7179 +<86d0> 7186 +<86d1> 7192 +<86d4> 2028 +<86d8> 7191 +<86d9> 3725 +<86da> 18477 +<86db> 4586 +<86de> 7188 +<86df> 7190 +<86e4> 1773 +<86e9> 7181 +<86ed> 7184 +<86ee> 2720 +<86ef> 18491 +<86f0> 4478 +<86f3> 7185 +<86f4> 7189 +<86f8> 7195 +<86f9> 4257 +<86fa> 9690 +<86fe> 1577 +<86ff> 18498 +<8700> 3464 +<8701> 18499 +<8702> 1665 +<8703> 7193 +<8706> 9687 +<8707> 7194 +<8708> 7196 +<8709> 7199 +<870a> 7197 +<870d> 7198 +<8712> 4090 +<8713> 7187 +<8714> 18508 +<8715> 3706 +<8716> 18509 +<8717> 3806 +<8718> 4520 +<8719> 18510 +<871a> 7205 +<871b> 18511 +<871c> 2784 +<871d> 18512 +<871e> 7202 +<8721> 2458 +<8722> 7214 +<8723> 7200 +<8724> 18515 +<8725> 7203 +<8729> 7210 +<872e> 7204 +<8731> 7209 +<8734> 7208 +<8737> 7211 +<873b> 7201 +<873e> 7206 +endcidchar + +100 begincidchar +<873f> 7212 +<8747> 4241 +<8748> 7207 +<8749> 1212 +<874c> 7220 +<874d> 18543 +<874e> 3958 +<8753> 7223 +<8754> 18548 +<8755> 8494 +<8756> 18549 +<8757> 2013 +<8758> 18550 +<8759> 7227 +<8760> 7218 +<8763> 7224 +<8764> 7226 +<8765> 7228 +<8766> 8626 +<876e> 7221 +<876f> 18566 +<8770> 7219 +<8774> 1970 +<8775> 18570 +<8776> 1500 +<8777> 18571 +<8778> 8606 +<877b> 7217 +<877c> 7225 +<8782> 7213 +<8783> 7238 +<8784> 9692 +<8785> 7235 +<8788> 7234 +<878b> 7222 +<878c> 18581 +<878d> 3253 +<8793> 7229 +<8797> 7237 +<879e> 8300 +<879f> 2813 +<87a2> 8742 +<87a8> 7231 +<87ab> 7239 +<87ac> 7241 +<87ad> 7236 +<87ae> 18605 +<87af> 7230 +<87b3> 7243 +<87b4> 18609 +<87b5> 7242 +<87ba> 2692 +<87bb> 9696 +<87bc> 18614 +<87bd> 7246 +<87c0> 7248 +<87c4> 8827 +<87c5> 18620 +<87c6> 7233 +<87c7> 18621 +<87c8> 9694 +<87c9> 18622 +<87ca> 7249 +<87cb> 7244 +<87ce> 9697 +<87d1> 7247 +<87d2> 7232 +<87d3> 7245 +<87db> 7250 +<87e0> 7252 +<87e3> 9685 +<87e4> 18640 +<87e5> 7240 +<87ea> 7251 +<87eb> 18645 +<87ec> 7787 +<87ed> 18646 +<87ee> 7253 +<87ef> 9691 +<87f2> 7817 +<87f6> 9689 +<87f9> 3970 +<87fa> 18654 +<87fb> 8721 +<87fe> 7256 +<87ff> 18657 +<8803> 4877 +<8804> 18661 +<8805> 8745 +<8806> 9686 +<880a> 7257 +<8810> 9693 +<8811> 9695 +<8812> 18670 +<8813> 7255 +<8814> 18671 +<8815> 3263 +<8816> 7254 +<881b> 7258 +<881f> 8175 +endcidchar + +100 begincidchar +<8820> 18679 +<8821> 7259 +<8822> 1347 +<8823> 9688 +<8831> 7977 +<8832> 6797 +<8836> 7771 +<8839> 7260 +<883a> 18698 +<883b> 8310 +<883c> 7261 +<8840> 4051 +<8844> 7338 +<8845> 3985 +<8846> 8855 +<884a> 9872 +<884b> 18708 +<884c> 3995 +<884d> 4101 +<8853> 8511 +<8854> 3899 +<8857> 2215 +<8858> 18716 +<8859> 4076 +<885a> 18717 +<885b> 8600 +<885c> 18718 +<885d> 7816 +<8861> 1945 +<8862> 5613 +<8863> 4169 +<8864> 7078 +<8865> 1152 +<8868> 1110 +<8869> 7079 +<886a> 18724 +<886b> 3321 +<886c> 1257 +<886d> 18725 +<886e> 4870 +<886f> 18726 +<8870> 3482 +<8871> 18727 +<8872> 7080 +<8877> 4563 +<8878> 18732 +<8879> 8844 +<887d> 7081 +<887e> 7358 +<887f> 7082 +<8880> 18736 +<8881> 4335 +<8882> 7083 +<8883> 18737 +<8884> 971 +<8885> 7359 +<8888> 7360 +<888b> 1407 +<888c> 18742 +<888d> 2972 +<8892> 3598 +<8896> 4015 +<889c> 3729 +<88a2> 7084 +<88a3> 18760 +<88a4> 4871 +<88ab> 1060 +<88ac> 18767 +<88ad> 3867 +<88b1> 1695 +<88b7> 7086 +<88bc> 7087 +<88c1> 1162 +<88c2> 2586 +<88c5> 4621 +<88c6> 7085 +<88c9> 7088 +<88ca> 9713 +<88ce> 7090 +<88cf> 8204 +<88d2> 4874 +<88d3> 18793 +<88d4> 4200 +<88d5> 4326 +<88d8> 7361 +<88d9> 3220 +<88dc> 7768 +<88dd> 8876 +<88de> 18798 +<88df> 7362 +<88e2> 7089 +<88e3> 7091 +<88e4> 2416 +<88e5> 7092 +<88e8> 7096 +<88f0> 7098 +<88f1> 7093 +<88f2> 18810 +<88f3> 3338 +<88f4> 2978 +endcidchar + +100 begincidchar +<88f8> 2698 +<88f9> 1877 +<88fc> 7095 +<88fd> 9895 +<88fe> 7097 +<88ff> 18816 +<8902> 1836 +<8907> 9846 +<890a> 7103 +<8910> 1933 +<8911> 18830 +<8912> 1032 +<8913> 7101 +<8919> 7100 +<891a> 7094 +<891b> 7102 +<8921> 7099 +<8925> 3271 +<892a> 3707 +<892b> 7105 +<8930> 5945 +<8931> 18852 +<8932> 8161 +<8933> 9659 +<8934> 7104 +<8935> 18853 +<8936> 7106 +<8937> 18854 +<8938> 9662 +<893b> 8925 +<8941> 7107 +<8944> 3922 +<8947> 9661 +<8956> 7722 +<895d> 9660 +<895e> 7363 +<895f> 2244 +<8960> 9658 +<8964> 9663 +<8965> 18889 +<8966> 7108 +<896a> 8583 +<896b> 18893 +<896c> 9835 +<896f> 7807 +<8972> 8621 +<897b> 7109 +<897f> 3846 +<8980> 18909 +<8981> 4145 +<8982> 18910 +<8983> 7135 +<8986> 1709 +<898b> 8086 +<898f> 7986 +<8993> 8324 +<8996> 8502 +<8997> 18925 +<8998> 9400 +<89a1> 9402 +<89a6> 9404 +<89aa> 8420 +<89ab> 18941 +<89ac> 9401 +<89af> 9405 +<89b2> 9406 +<89b7> 9407 +<89ba> 8146 +<89bd> 8189 +<89be> 18954 +<89bf> 9403 +<89c0> 7981 +<89c1> 2158 +<89c2> 1844 +<89c3> 18955 +<89c4> 1855 +<89c5> 2782 +<89c6> 3434 +<89c7> 6458 +<89c8> 2475 +<89c9> 2340 +<89cd> 18956 +<89d2> 2200 +<89d6> 7511 +<89da> 7513 +<89db> 18963 +<89dc> 7514 +<89dd> 18964 +<89de> 7512 +<89e3> 2227 +<89e4> 18969 +<89e5> 7515 +<89e6> 1320 +<89eb> 7516 +<89ef> 7517 +<89f3> 6592 +<89f4> 9737 +<89f5> 18980 +<89f6> 9738 +<89f7> 18981 +endcidchar + +100 begincidchar +<89f8> 7828 +<8a00> 4093 +<8a01> 8927 +<8a02> 7883 +<8a03> 7949 +<8a07> 4862 +<8a08> 8055 +<8a09> 18992 +<8a0a> 8683 +<8a0b> 18993 +<8a0c> 8929 +<8a0d> 18994 +<8a0e> 8559 +<8a0f> 18995 +<8a10> 8928 +<8a13> 8682 +<8a14> 18998 +<8a15> 8930 +<8a16> 8395 +<8a17> 18999 +<8a18> 8056 +<8a1b> 7906 +<8a1c> 19002 +<8a1d> 8690 +<8a1e> 19003 +<8a1f> 8528 +<8a23> 8147 +<8a24> 19007 +<8a25> 8933 +<8a2a> 7922 +<8a2d> 8479 +<8a31> 8669 +<8a34> 8532 +<8a35> 19019 +<8a36> 8935 +<8a3a> 8834 +<8a3e> 7518 +<8a41> 8934 +<8a46> 8936 +<8a47> 19032 +<8a48> 6788 +<8a4e> 8932 +<8a4f> 19038 +<8a50> 8810 +<8a51> 19039 +<8a52> 8939 +<8a53> 19040 +<8a54> 8937 +<8a55> 8381 +<8a58> 8938 +<8a5b> 8893 +<8a5e> 7838 +<8a61> 8950 +<8a62> 8679 +<8a63> 8726 +<8a66> 8503 +<8a69> 8492 +<8a6a> 19053 +<8a6b> 7784 +<8a6c> 8946 +<8a6d> 7991 +<8a6e> 8947 +<8a6f> 19054 +<8a70> 8943 +<8a71> 8016 +<8a72> 7952 +<8a73> 8648 +<8a74> 19055 +<8a75> 8945 +<8a79> 4435 +<8a7c> 8944 +<8a7f> 8942 +<8a84> 8941 +<8a85> 8862 +<8a86> 8940 +<8a87> 8162 +<8a88> 19067 +<8a89> 4323 +<8a8a> 3631 +<8a8d> 8446 +<8a93> 3419 +<8a94> 19073 +<8a95> 7855 +<8a98> 8758 +<8a99> 19076 +<8a9a> 8951 +<8a9e> 8765 +<8a9f> 19080 +<8aa0> 7810 +<8aa1> 8118 +<8aa2> 19081 +<8aa3> 8612 +<8aa4> 8618 +<8aa5> 8952 +<8aa6> 8529 +<8aa7> 19082 +<8aa8> 8032 +<8aac> 8519 +<8ab0> 8517 +<8ab1> 19089 +endcidchar + +100 begincidchar +<8ab2> 8156 +<8ab6> 8961 +<8ab9> 7925 +<8abc> 8728 +<8abf> 7878 +<8ac2> 8960 +<8ac3> 19101 +<8ac4> 8884 +<8ac7> 8553 +<8ac8> 19104 +<8ac9> 8957 +<8aca> 19105 +<8acb> 8426 +<8acc> 19106 +<8acd> 8948 +<8ace> 19107 +<8acf> 8955 +<8ad0> 19108 +<8ad1> 8956 +<8ad2> 8231 +<8ad6> 8288 +<8ad7> 8959 +<8adb> 8958 +<8adc> 7879 +<8add> 19115 +<8ade> 8972 +<8ae2> 8949 +<8ae3> 19119 +<8ae4> 8966 +<8ae5> 19120 +<8ae6> 8970 +<8ae7> 8659 +<8aeb> 8963 +<8aec> 19124 +<8aed> 8967 +<8aee> 8971 +<8af1> 8031 +<8af2> 19127 +<8af3> 8969 +<8af6> 8962 +<8af7> 7940 +<8af8> 8861 +<8af9> 19130 +<8afa> 8699 +<8afb> 19131 +<8afc> 8968 +<8afd> 19132 +<8afe> 8364 +<8aff> 19133 +<8b00> 8334 +<8b01> 8965 +<8b02> 8599 +<8b03> 19134 +<8b04> 8561 +<8b05> 8856 +<8b06> 19135 +<8b07> 5948 +<8b0a> 8023 +<8b0e> 8322 +<8b0f> 19141 +<8b10> 8977 +<8b14> 8964 +<8b15> 19145 +<8b16> 8975 +<8b17> 7733 +<8b18> 19146 +<8b19> 8401 +<8b1a> 8976 +<8b1b> 8099 +<8b1c> 19147 +<8b1d> 8662 +<8b21> 8710 +<8b26> 7519 +<8b27> 19155 +<8b28> 8973 +<8b2b> 8978 +<8b2c> 8333 +<8b2d> 8979 +<8b33> 8931 +<8b39> 8122 +<8b3e> 8312 +<8b49> 8840 +<8b4e> 8982 +<8b4f> 8043 +<8b56> 8980 +<8b57> 19192 +<8b58> 8496 +<8b59> 8981 +<8b5a> 8552 +<8b5b> 19193 +<8b5c> 8388 +<8b66> 2270 +<8b6b> 8984 +<8b6c> 3016 +<8b6f> 8729 +<8b70> 8727 +<8b74> 8405 +<8b77> 8010 +<8b7d> 8768 +<8b80> 7891 +endcidchar + +100 begincidchar +<8b8a> 7753 +<8b8e> 9755 +<8b92> 7789 +<8b93> 8440 +<8b94> 19236 +<8b95> 8187 +<8b96> 8985 +<8b9c> 8974 +<8b9d> 19242 +<8b9e> 8983 +<8b9f> 19243 +<8ba0> 4887 +<8ba1> 2105 +<8ba2> 1512 +<8ba3> 1719 +<8ba4> 3242 +<8ba5> 2072 +<8ba8> 3625 +<8ba9> 3230 +<8baa> 4890 +<8bab> 3100 +<8bac> 19244 +<8bad> 4062 +<8bae> 4208 +<8baf> 4063 +<8bb0> 2106 +<8bb1> 19245 +<8bb2> 2179 +<8bb3> 2041 +<8bb6> 4081 +<8bb7> 4893 +<8bb8> 4024 +<8bb9> 1582 +<8bba> 2690 +<8bbb> 19246 +<8bbc> 3524 +<8bbd> 1674 +<8bbe> 3361 +<8bbf> 1632 +<8bc0> 2342 +<8bc1> 4515 +<8bc4> 3039 +<8bc5> 4676 +<8bc6> 3405 +<8bc7> 19247 +<8bc8> 4426 +<8bc9> 3540 +<8bca> 4496 +<8bcb> 4896 +<8bcc> 4574 +<8bcd> 1357 +<8bce> 4898 +<8bcf> 4897 +<8bd0> 19248 +<8bd1> 4210 +<8bd5> 3435 +<8bd6> 4902 +<8bd7> 3394 +<8bda> 1268 +<8bdb> 4590 +<8bdc> 4905 +<8bdd> 1989 +<8bde> 1423 +<8be1> 1863 +<8be2> 4056 +<8be3> 4207 +<8be4> 4908 +<8be5> 1726 +<8be6> 3927 +<8be7> 1206 +<8bea> 19249 +<8beb> 2236 +<8bec> 3819 +<8bed> 4308 +<8bee> 4911 +<8bef> 3842 +<8bf0> 4912 +<8bf1> 4282 +<8bf2> 2042 +<8bf3> 4913 +<8bf4> 3498 +<8bf5> 3525 +<8bf6> 4914 +<8bf7> 3176 +<8bf8> 4589 +<8bf9> 4915 +<8bfa> 2934 +<8bfb> 1536 +<8bfc> 4916 +<8bfd> 1641 +<8bfe> 2395 +<8bff> 4917 +<8c00> 4918 +<8c01> 3490 +<8c02> 4919 +<8c03> 1496 +<8c04> 4920 +<8c05> 2571 +<8c06> 4632 +<8c07> 4921 +endcidchar + +100 begincidchar +<8c08> 3595 +<8c09> 19250 +<8c0a> 4209 +<8c0b> 2836 +<8c0c> 4922 +<8c0d> 1502 +<8c0e> 2022 +<8c0f> 4923 +<8c10> 3966 +<8c13> 3788 +<8c17> 1214 +<8c18> 4931 +<8c19> 4929 +<8c1a> 4113 +<8c1b> 4930 +<8c1c> 2778 +<8c1d> 4932 +<8c1e> 19251 +<8c22> 3974 +<8c23> 4140 +<8c24> 1028 +<8c25> 4936 +<8c26> 3112 +<8c27> 4937 +<8c28> 2248 +<8c29> 2726 +<8c2c> 2818 +<8c2d> 3594 +<8c30> 2473 +<8c31> 3062 +<8c34> 3121 +<8c37> 1825 +<8c41> 2050 +<8c46> 1528 +<8c47> 7414 +<8c48> 8392 +<8c49> 7415 +<8c4c> 3732 +<8c50> 7933 +<8c55> 7445 +<8c5a> 6544 +<8c61> 3936 +<8c62> 2004 +<8c6a> 1911 +<8c6b> 4328 +<8c73> 5597 +<8c78> 7504 +<8c79> 1043 +<8c7a> 1209 +<8c82> 7505 +<8c85> 7507 +<8c89> 1928 +<8c8a> 7506 +<8c8b> 19314 +<8c8c> 2743 +<8c94> 7509 +<8c98> 7508 +<8c9d> 7739 +<8c9e> 8831 +<8c9f> 19329 +<8ca0> 7948 +<8ca1> 7769 +<8ca2> 7972 +<8ca7> 8378 +<8ca8> 8037 +<8ca9> 7920 +<8caa> 8548 +<8cab> 7984 +<8cac> 8801 +<8caf> 8866 +<8cb0> 9387 +<8cb1> 19336 +<8cb2> 9391 +<8cb3> 7912 +<8cb4> 7993 +<8cb5> 19337 +<8cb6> 7752 +<8cb7> 8304 +<8cb8> 7848 +<8cb9> 19338 +<8cba> 9388 +<8cbb> 7927 +<8cbc> 8566 +<8cbd> 9389 +<8cbe> 19339 +<8cbf> 8315 +<8cc0> 8005 +<8cc1> 9386 +<8cc2> 8267 +<8cc3> 8239 +<8cc4> 8026 +<8cc5> 9392 +<8cc6> 19340 +<8cc7> 8887 +<8cc8> 8063 +<8cc9> 19341 +<8cca> 8805 +<8cd1> 9394 +<8cd2> 8475 +<8cd3> 7761 +endcidchar + +100 begincidchar +<8cd4> 19348 +<8cd5> 9396 +<8cda> 9395 +<8cdb> 19353 +<8cdc> 7839 +<8cdd> 19354 +<8cde> 8472 +<8cdf> 19355 +<8ce0> 8372 +<8ce1> 9135 +<8ce2> 8635 +<8ce3> 8306 +<8ce4> 8085 +<8ce5> 19356 +<8ce6> 7946 +<8ce7> 9398 +<8cea> 8849 +<8ceb> 9397 +<8cec> 8824 +<8ced> 7892 +<8cf4> 8179 +<8cfa> 8873 +<8cfb> 9399 +<8cfc> 7976 +<8cfd> 8457 +<8cfe> 8903 +<8cff> 19370 +<8d04> 9390 +<8d05> 8881 +<8d08> 8806 +<8d09> 19377 +<8d0a> 8795 +<8d0b> 8900 +<8d0c> 19378 +<8d0d> 8469 +<8d0e> 19379 +<8d0f> 8746 +<8d10> 9393 +<8d16> 8509 +<8d1b> 7957 +<8d1c> 8796 +<8d1d> 1053 +<8d1e> 4491 +<8d1f> 1717 +<8d20> 19389 +<8d21> 1802 +<8d22> 1165 +<8d23> 4403 +<8d24> 3898 +<8d25> 999 +<8d26> 4460 +<8d27> 2058 +<8d28> 4553 +<8d29> 1620 +<8d2a> 3587 +<8d2b> 3029 +<8d2c> 1098 +<8d2d> 1811 +<8d2e> 4603 +<8d2f> 1850 +<8d30> 1598 +<8d31> 2157 +<8d34> 3660 +<8d35> 1868 +<8d36> 6446 +<8d37> 1406 +<8d38> 2744 +<8d39> 1646 +<8d3a> 1935 +<8d3b> 6447 +<8d3c> 4407 +<8d3d> 6448 +<8d3e> 2121 +<8d3f> 2036 +<8d40> 6449 +<8d41> 2599 +<8d42> 2655 +<8d43> 4386 +<8d44> 4647 +<8d47> 6454 +<8d4a> 3351 +<8d4b> 1710 +<8d4c> 1539 +<8d4d> 6455 +<8d4e> 3457 +<8d4f> 3334 +<8d50> 1360 +<8d53> 5691 +<8d54> 2979 +<8d55> 6456 +<8d56> 2464 +<8d57> 19392 +<8d58> 4629 +<8d59> 6457 +<8d5a> 4617 +<8d5b> 3287 +<8d5c> 4745 +<8d5d> 4739 +<8d5e> 4385 +<8d5f> 19393 +endcidchar + +100 begincidchar +<8d60> 4412 +<8d61> 3325 +<8d62> 4243 +<8d63> 1742 +<8d64> 1285 +<8d65> 19394 +<8d66> 3355 +<8d67> 7412 +<8d6b> 1932 +<8d6c> 19398 +<8d6d> 7413 +<8d70> 4668 +<8d73> 7407 +<8d74> 1707 +<8d75> 4469 +<8d76> 1738 +<8d77> 3087 +<8d81> 1256 +<8d84> 7408 +<8d85> 1233 +<8d8a> 4352 +<8d8b> 3188 +<8d91> 7410 +<8d94> 7409 +<8d95> 7956 +<8d99> 8826 +<8d9f> 3614 +<8da3> 3199 +<8da8> 8430 +<8db1> 7411 +<8db2> 9720 +<8db3> 4672 +<8db4> 2944 +<8db5> 7452 +<8db8> 7447 +<8db9> 19450 +<8dba> 7455 +<8dbb> 19451 +<8dbc> 7454 +<8dbd> 19452 +<8dbe> 4537 +<8dbf> 7453 +<8dc3> 4353 +<8dc4> 7456 +<8dc5> 19456 +<8dc6> 7464 +<8dcb> 986 +<8dcc> 1497 +<8dcd> 19461 +<8dd0> 19462 +<8dd1> 2973 +<8dda> 7459 +<8ddb> 7463 +<8ddc> 19469 +<8ddd> 2319 +<8dde> 7460 +<8ddf> 1781 +<8de3> 7468 +<8de4> 7471 +<8de8> 2420 +<8de9> 19476 +<8dea> 1867 +<8deb> 7448 +<8dec> 7465 +<8def> 2654 +<8df3> 3659 +<8df4> 19482 +<8df5> 2156 +<8df6> 19483 +<8df9> 7469 +<8dfa> 1572 +<8dfb> 7470 +<8dfc> 19484 +<8dfd> 7473 +<8e05> 7449 +<8e09> 7472 +<8e0a> 4256 +<8e0b> 19495 +<8e0c> 1297 +<8e0f> 3575 +<8e10> 8084 +<8e14> 7474 +<8e1d> 7475 +<8e1e> 2320 +<8e1f> 7476 +<8e22> 3634 +<8e23> 7479 +<8e29> 1167 +<8e2a> 4662 +<8e2b> 19516 +<8e2c> 7477 +<8e2d> 19517 +<8e2e> 7478 +<8e2f> 7480 +<8e30> 19518 +<8e31> 7486 +<8e34> 8752 +<8e35> 7484 +<8e39> 7483 +<8e3a> 7481 +endcidchar + +100 begincidchar +<8e3d> 7485 +<8e40> 7482 +<8e43> 19528 +<8e44> 3638 +<8e47> 5947 +<8e48> 1433 +<8e49> 7487 +<8e4a> 7492 +<8e4b> 3574 +<8e4c> 9725 +<8e55> 9728 +<8e59> 7450 +<8e63> 9734 +<8e66> 1069 +<8e69> 7451 +<8e6c> 1446 +<8e6d> 1195 +<8e6e> 19555 +<8e6f> 7496 +<8e70> 7493 +<8e71> 19556 +<8e72> 1558 +<8e73> 19557 +<8e74> 7497 +<8e75> 19558 +<8e76> 7494 +<8e7a> 9727 +<8e7b> 19562 +<8e7c> 7495 +<8e7f> 1373 +<8e80> 19565 +<8e81> 4397 +<8e85> 7498 +<8e86> 19569 +<8e87> 1310 +<8e88> 19570 +<8e89> 9724 +<8e8a> 7820 +<8e8b> 9730 +<8e8c> 19571 +<8e8d> 8781 +<8e8e> 19572 +<8e8f> 7499 +<8e90> 7501 +<8e91> 9732 +<8e92> 9726 +<8e93> 9731 +<8e94> 7500 +<8e9a> 9729 +<8e9b> 19578 +<8e9c> 7502 +<8e9d> 19579 +<8e9e> 7503 +<8ea1> 9733 +<8ea5> 7843 +<8ea6> 9736 +<8eaa> 9735 +<8eab> 3366 +<8eac> 1795 +<8eaf> 3192 +<8eb2> 1570 +<8eba> 3612 +<8ec0> 8432 +<8eca> 7803 +<8ecb> 8807 +<8ecc> 7990 +<8ecd> 8150 +<8ece> 6392 +<8ed2> 8672 +<8ed3> 19616 +<8ed4> 9356 +<8edb> 9357 +<8edf> 8450 +<8ee4> 9364 +<8eeb> 9363 +<8ef2> 9358 +<8ef8> 8857 +<8ef9> 9361 +<8efa> 9366 +<8efb> 9359 +<8efc> 9362 +<8efd> 19647 +<8efe> 9367 +<8eff> 19648 +<8f03> 8113 +<8f04> 19652 +<8f05> 9370 +<8f06> 19653 +<8f07> 9369 +<8f08> 19654 +<8f09> 8792 +<8f0a> 9368 +<8f12> 9371 +<8f13> 19662 +<8f14> 7945 +<8f15> 8422 +<8f1b> 8230 +<8f1c> 9375 +<8f1d> 8025 +<8f25> 7995 +endcidchar + +100 begincidchar +<8f26> 9372 +<8f29> 7738 +<8f2a> 8283 +<8f2f> 8048 +<8f33> 9376 +<8f38> 8507 +<8f3b> 7943 +<8f3e> 8816 +<8f3f> 8759 +<8f42> 9426 +<8f43> 19692 +<8f44> 8627 +<8f45> 8773 +<8f46> 9377 +<8f49> 8872 +<8f4d> 8828 +<8f4e> 8112 +<8f54> 9378 +<8f5f> 8006 +<8f60> 19713 +<8f61> 9088 +<8f62> 9365 +<8f63> 19714 +<8f64> 9360 +<8f65> 19715 +<8f66> 1242 +<8f67> 4417 +<8f68> 1861 +<8f69> 4036 +<8f6a> 19716 +<8f6b> 6369 +<8f6c> 4615 +<8f6d> 6370 +<8f6e> 2685 +<8f6f> 3272 +<8f70> 1947 +<8f74> 4576 +<8f77> 6377 +<8f78> 6376 +<8f7b> 3166 +<8f7c> 6380 +<8f7d> 4379 +<8f7e> 6381 +<8f7f> 2207 +<8f80> 19717 +<8f83> 2208 +<8f84> 6384 +<8f85> 1699 +<8f86> 2567 +<8f87> 6385 +<8f88> 1051 +<8f89> 2025 +<8f8a> 1870 +<8f8b> 6386 +<8f8c> 19718 +<8f90> 1685 +<8f91> 2080 +<8f92> 19719 +<8f93> 3451 +<8f94> 5492 +<8f95> 4338 +<8f96> 3882 +<8f97> 4440 +<8f98> 6390 +<8f99> 4479 +<8f9a> 6391 +<8f9b> 3980 +<8f9c> 1813 +<8f9d> 19720 +<8f9e> 1354 +<8f9f> 1090 +<8fa3> 2460 +<8fa6> 7728 +<8fa7> 19726 +<8faa> 19727 +<8fab> 1105 +<8fac> 19728 +<8fad> 7837 +<8fae> 7755 +<8faf> 7754 +<8fb0> 1250 +<8fb1> 3267 +<8fb2> 8362 +<8fb6> 5949 +<8fb9> 1096 +<8fbd> 2578 +<8fbe> 1394 +<8fc1> 3109 +<8fc2> 4285 +<8fc3> 19739 +<8fc4> 3096 +<8fc5> 4065 +<8fc6> 19740 +<8fc7> 1878 +<8fc8> 2716 +<8fce> 4242 +<8fcf> 19746 +<8fd0> 4366 +<8fd1> 2253 +<8fd2> 19747 +endcidchar + +100 begincidchar +<8fd3> 5950 +<8fd4> 1618 +<8fd5> 5951 +<8fd8> 1998 +<8fd9> 4483 +<8fda> 19750 +<8fdb> 2249 +<8fdc> 4345 +<8fdd> 3764 +<8fde> 2549 +<8fdf> 1278 +<8fe2> 3657 +<8fe3> 19753 +<8fe4> 5954 +<8fe5> 5952 +<8fe6> 5956 +<8fe7> 19754 +<8fe8> 5958 +<8fe9> 5955 +<8fea> 1456 +<8feb> 3047 +<8fec> 19755 +<8fed> 1501 +<8fee> 5953 +<8fef> 19756 +<8ff0> 3469 +<8ff3> 5957 +<8ff4> 9851 +<8ff7> 2777 +<8ff8> 1070 +<8ff9> 2070 +<8ffd> 4628 +<9000> 3708 +<9001> 3522 +<9002> 3425 +<9003> 3622 +<9004> 5960 +<9005> 5959 +<9006> 2889 +<9009> 4042 +<900a> 4064 +<900b> 5961 +<900c> 19768 +<900d> 5964 +<900e> 19769 +<900f> 3689 +<9010> 4591 +<9011> 5963 +<9012> 1470 +<9013> 19770 +<9014> 3695 +<9015> 9202 +<9016> 5965 +<9017> 1529 +<9018> 19771 +<9019> 8830 +<901a> 3673 +<901b> 1853 +<901c> 19772 +<901d> 3420 +<901e> 1270 +<901f> 3534 +<9020> 4399 +<9021> 5966 +<9022> 1671 +<9023> 8217 +<9026> 5962 +<902d> 5969 +<902e> 1409 +<902f> 5970 +<9032> 8123 +<9037> 19785 +<9038> 4196 +<903b> 2694 +<903c> 1071 +<903d> 19788 +<903e> 4295 +<9041> 1564 +<9042> 3553 +<9043> 19791 +<9044> 5971 +<9047> 4315 +<904b> 8787 +<904c> 19797 +<904d> 1106 +<904e> 7998 +<904f> 1587 +<9050> 5974 +<9053> 1441 +<9054> 7846 +<9055> 8590 +<9056> 19798 +<9057> 4172 +<9058> 5976 +<905b> 5978 +<905c> 8684 +<905d> 19801 +<905e> 7870 +<905f> 19802 +<9060> 8778 +endcidchar + +100 begincidchar +<9061> 19803 +<9062> 5977 +<9063> 3119 +<9064> 19804 +<9065> 4138 +<9068> 5975 +<9069> 8499 +<906d> 4389 +<906e> 4475 +<9072> 7812 +<9073> 19813 +<9074> 5980 +<9075> 4686 +<9076> 19814 +<9077> 8399 +<9078> 8674 +<9079> 19815 +<907a> 8719 +<907b> 19816 +<907c> 8233 +<907d> 5981 +<907e> 19817 +<907f> 1093 +<9080> 4132 +<9081> 8307 +<9082> 5982 +<9083> 5984 +<9084> 8021 +<9087> 9201 +<9088> 5983 +<9089> 19820 +<908a> 7750 +<908b> 5985 +<908f> 8291 +<9090> 9203 +<9091> 4191 +<9092> 19824 +<9093> 1452 +<9094> 19825 +<9095> 6167 +<9096> 19826 +<9097> 4967 +<9098> 19827 +<9099> 4970 +<909a> 19828 +<909b> 4968 +<909c> 19829 +<909d> 4969 +<90a1> 4972 +<90a2> 3994 +<90a3> 2858 +<90a6> 1017 +<90aa> 3963 +<90ab> 19838 +<90ac> 4971 +<90ad> 19839 +<90ae> 4271 +<90af> 1889 +<90b0> 4978 +<90b1> 3182 +<90b2> 19840 +<90b3> 4974 +<90b4> 4973 +<90b5> 3348 +<90b6> 4975 +<90b7> 19841 +<90b8> 4977 +<90b9> 4667 +<90ba> 4976 +<90bb> 2595 +<90be> 4981 +<90c1> 4313 +<90c4> 4983 +<90c5> 4980 +<90c6> 19848 +<90c7> 4984 +<90ca> 2189 +<90ce> 2484 +<90cf> 4979 +<90d0> 4982 +<90d1> 4514 +<90d2> 19854 +<90d3> 4985 +<90d7> 4989 +<90db> 4990 +<90dc> 4988 +<90dd> 1913 +<90de> 19861 +<90df> 8990 +<90e0> 19862 +<90e1> 2353 +<90e2> 4987 +<90e6> 4986 +<90e7> 4362 +<90e8> 1158 +<90eb> 4991 +<90ec> 19868 +<90ed> 1874 +<90ee> 19869 +<90ef> 4992 +endcidchar + +100 begincidchar +<90f4> 1248 +<90f5> 8755 +<90f8> 1415 +<90fd> 1531 +<90fe> 4993 +<90ff> 19880 +<9102> 1588 +<9103> 19883 +<9104> 4994 +<9105> 19884 +<9106> 8992 +<9109> 8647 +<9112> 8892 +<9113> 19895 +<9114> 8988 +<9115> 19896 +<9116> 8785 +<9119> 1074 +<911e> 4996 +<9122> 4995 +<9123> 4997 +<9127> 7867 +<912d> 8839 +<912e> 19914 +<912f> 4999 +<9130> 8237 +<9131> 4998 +<9132> 7851 +<9133> 19915 +<9134> 8989 +<9135> 19916 +<9136> 8991 +<9139> 5000 +<913a> 8987 +<9143> 5001 +<9146> 5002 +<9147> 19929 +<9148> 8993 +<9149> 4276 +<914a> 7416 +<914b> 3186 +<914c> 4640 +<914d> 2981 +<9150> 7417 +<9151> 19930 +<9152> 2293 +<9157> 4026 +<915a> 1648 +<915d> 4368 +<915e> 3581 +<9161> 7422 +<9162> 7421 +<9163> 1887 +<9164> 7420 +<9165> 3531 +<9169> 7424 +<916a> 2493 +<916b> 19944 +<916c> 1295 +<916d> 19945 +<916e> 3675 +<916f> 7425 +<9170> 7423 +<9171> 2181 +<9172> 7428 +<9173> 19946 +<9174> 7429 +<9175> 2206 +<9176> 2749 +<9177> 2414 +<9178> 3542 +<9179> 7430 +<917f> 2899 +<9185> 7432 +<9186> 19955 +<9187> 1343 +<9188> 19956 +<9189> 4682 +<918a> 19957 +<918b> 1370 +<918c> 7431 +<918d> 7434 +<9190> 7433 +<9191> 7435 +<9192> 3996 +<9196> 8789 +<919a> 2774 +<919b> 3204 +<919c> 7823 +<91aa> 7438 +<91ab> 8716 +<91ac> 8100 +<91b4> 7443 +<91b5> 7442 +<91ba> 7444 +<91c0> 8347 +<91c1> 8664 +<91c2> 19990 +<91c3> 9722 +<91c4> 19991 +endcidchar + +100 begincidchar +<91c5> 9721 +<91c6> 19992 +<91c7> 1168 +<91c8> 19993 +<91c9> 4281 +<91ca> 3428 +<91cb> 8500 +<91cc> 2522 +<91cd> 4567 +<91ce> 4151 +<91cf> 2568 +<91d0> 19994 +<91d1> 2241 +<91d5> 9464 +<91d6> 19995 +<91d7> 9463 +<91d8> 7880 +<91d9> 9462 +<91dc> 1701 +<91dd> 8832 +<91e3> 7877 +<91e4> 9467 +<91e7> 9466 +<91e8> 20005 +<91e9> 7917 +<91f5> 9469 +<91f6> 20017 +<91f7> 9465 +<91f8> 20018 +<91f9> 9470 +<91fa> 8397 +<9200> 9480 +<9201> 9476 +<9204> 9478 +<9208> 9471 +<9209> 8336 +<920d> 7901 +<920e> 7973 +<920f> 20032 +<9210> 9475 +<9211> 9474 +<9214> 7802 +<9215> 8358 +<921e> 8149 +<9223> 7953 +<9224> 20047 +<9225> 9479 +<9226> 9472 +<9227> 9477 +<922e> 9497 +<922f> 20054 +<9230> 9493 +<9233> 9484 +<9234> 8241 +<9237> 9483 +<9238> 9487 +<9239> 9498 +<923a> 9481 +<923d> 9486 +<923e> 8756 +<923f> 9491 +<9240> 8064 +<9245> 9473 +<9248> 9495 +<9249> 9494 +<924d> 9496 +<9251> 7766 +<9255> 9485 +<9256> 20076 +<9257> 8403 +<925a> 8314 +<925b> 8398 +<925e> 9488 +<9262> 7765 +<9266> 9482 +<9274> 2155 +<9278> 8106 +<9279> 20101 +<927a> 9502 +<927b> 7967 +<927f> 9517 +<9280> 8733 +<9283> 9522 +<9284> 20107 +<9285> 8571 +<928e> 7552 +<9291> 8623 +<9292> 20118 +<9293> 9516 +<9296> 9512 +<9297> 20121 +<9298> 8332 +<9299> 20122 +<929a> 9519 +<929b> 20123 +<929c> 8636 +<92a0> 9501 +<92a3> 9525 +<92a4> 20129 +<92a5> 8717 +endcidchar + +100 begincidchar +<92a6> 9510 +<92a7> 20130 +<92a8> 9524 +<92a9> 9514 +<92aa> 9503 +<92ab> 9521 +<92ac> 9500 +<92ad> 20131 +<92ae> 7553 +<92b1> 9509 +<92b7> 8653 +<92b8> 20139 +<92b9> 8666 +<92ba> 20140 +<92bb> 8562 +<92bc> 9534 +<92c1> 8271 +<92c2> 20145 +<92c3> 9539 +<92c4> 20146 +<92c5> 8663 +<92c6> 20147 +<92c7> 7740 +<92c8> 7554 +<92cc> 9513 +<92cf> 9505 +<92d2> 7935 +<92dd> 9535 +<92de> 20165 +<92df> 9540 +<92e3> 9507 +<92e4> 7824 +<92e5> 9530 +<92e6> 9541 +<92e7> 20169 +<92e8> 9533 +<92e9> 20170 +<92ea> 8385 +<92ed> 8451 +<92ee> 9504 +<92ef> 9532 +<92f0> 9531 +<92f1> 9528 +<92f6> 9536 +<92f7> 20177 +<92f8> 8141 +<92fc> 7960 +<9300> 20184 +<9301> 9547 +<9306> 9543 +<9310> 8880 +<9311> 20196 +<9312> 9542 +<9315> 9548 +<9318> 7834 +<9319> 9554 +<931a> 9520 +<931b> 9545 +<931f> 9553 +<9320> 7882 +<9321> 20204 +<9322> 8402 +<9326> 8120 +<9327> 20208 +<9328> 8313 +<932b> 8619 +<932e> 9549 +<932f> 7845 +<9332> 8268 +<9333> 8320 +<9336> 9837 +<9337> 20217 +<9338> 9527 +<933e> 7555 +<933f> 20223 +<9340> 9546 +<9341> 8632 +<9342> 20224 +<9343> 9550 +<9346> 9468 +<9347> 9556 +<934b> 7996 +<934c> 20230 +<934d> 7893 +<9354> 9558 +<9358> 8808 +<935b> 7894 +<9364> 9559 +<9365> 9555 +<9369> 9544 +<936a> 7556 +<936b> 20253 +<936c> 8412 +<9370> 9561 +<9375> 8087 +<9376> 9557 +<937a> 8829 +<937e> 9598 +<9382> 8316 +<9383> 20270 +endcidchar + +100 begincidchar +<9384> 9562 +<9387> 9566 +<938a> 7732 +<938f> 7558 +<9396> 8542 +<9397> 20285 +<9398> 9568 +<93a2> 8610 +<93a3> 9044 +<93a6> 9571 +<93a7> 9511 +<93a8> 20297 +<93a9> 9518 +<93aa> 9560 +<93ab> 20298 +<93ac> 7963 +<93ad> 20299 +<93ae> 8835 +<93af> 20300 +<93b0> 9572 +<93b3> 8352 +<93b4> 20303 +<93b5> 9573 +<93b8> 9569 +<93bf> 9570 +<93c3> 9580 +<93c7> 9581 +<93c8> 8224 +<93c9> 20318 +<93ca> 7557 +<93cb> 20319 +<93cc> 9567 +<93cd> 9578 +<93d1> 9582 +<93d6> 7681 +<93d7> 9529 +<93d8> 9564 +<93de> 9579 +<93df> 7791 +<93e0> 20330 +<93e1> 8132 +<93e2> 9575 +<93e3> 20331 +<93e4> 9563 +<93e8> 9757 +<93f5> 9515 +<93f6> 20347 +<93f7> 9585 +<93f8> 20348 +<93f9> 9591 +<9403> 9506 +<940b> 9523 +<9410> 8234 +<9411> 20369 +<9412> 9526 +<9413> 9587 +<9414> 9583 +<9418> 8851 +<9419> 9592 +<941d> 9584 +<9420> 9589 +<9428> 9565 +<942e> 8218 +<9432> 9594 +<9433> 8198 +<9434> 20391 +<9435> 8567 +<9438> 9499 +<9439> 20394 +<943a> 9508 +<943e> 7559 +<943f> 9595 +<9444> 8867 +<944a> 9593 +<944b> 20407 +<944c> 9574 +<9452> 8083 +<9453> 20413 +<9454> 9596 +<9460> 9492 +<9463> 9597 +<9464> 20427 +<9465> 9586 +<946b> 7560 +<946c> 20433 +<946d> 9588 +<9470> 8782 +<9471> 20436 +<9472> 8646 +<9477> 8351 +<9478> 20441 +<9479> 9590 +<947c> 8292 +<947d> 8895 +<947e> 9756 +<947f> 8798 +<9488> 4492 +<9489> 1507 +<948a> 6802 +<948b> 6801 +endcidchar + +100 begincidchar +<948e> 3106 +<9491> 20449 +<9492> 1613 +<9493> 1495 +<9494> 6807 +<9495> 6809 +<9496> 20450 +<9497> 6808 +<9498> 20451 +<9499> 1729 +<949d> 1562 +<949e> 1235 +<949f> 4562 +<94a0> 2857 +<94a1> 1054 +<94a2> 1745 +<94a5> 4354 +<94a6> 3154 +<94a7> 2346 +<94a8> 3816 +<94a9> 1804 +<94aa> 6816 +<94ab> 6815 +<94ac> 6818 +<94ad> 6817 +<94ae> 2918 +<94b1> 3115 +<94b2> 6821 +<94b3> 3116 +<94b4> 6822 +<94b5> 1134 +<94bb> 4679 +<94be> 2123 +<94bf> 6830 +<94c0> 4272 +<94c1> 3661 +<94c2> 1139 +<94c3> 2606 +<94c4> 6831 +<94c5> 3107 +<94c6> 2738 +<94c7> 20452 +<94cf> 20453 +<94d8> 6846 +<94d9> 6845 +<94da> 20456 +<94db> 6847 +<94dc> 3678 +<94dd> 2664 +<94e1> 4418 +<94e2> 6851 +<94e3> 3872 +<94e6> 20457 +<94e9> 6857 +<94ea> 6856 +<94eb> 6858 +<94ec> 1776 +<94ed> 2815 +<94f0> 2195 +<94f1> 4166 +<94f2> 1216 +<94f6> 4223 +<94f7> 6864 +<94f8> 4604 +<94f9> 6865 +<94fa> 3051 +<94fb> 20458 +<94fe> 2557 +<94ff> 6868 +<9500> 3943 +<9501> 3565 +<9502> 6870 +<9503> 6869 +<9504> 1311 +<9505> 1873 +<9508> 4013 +<950b> 1667 +<950c> 3978 +<9510> 3276 +<9511> 3635 +<9517> 4481 +<9518> 6883 +<9519> 1392 +<951a> 2735 +<951b> 6884 +<951c> 20459 +<9520> 20460 +<9521> 3852 +<9522> 6888 +<9523> 2695 +<9524> 1339 +<9525> 4627 +<9526> 2246 +<9527> 20461 +<9528> 3892 +<9529> 6891 +<952c> 6892 +<952d> 1510 +<952e> 2159 +<952f> 2321 +endcidchar + +100 begincidchar +<9530> 2769 +<9533> 20462 +<9534> 6895 +<9535> 6903 +<9539> 3135 +<953a> 6937 +<953b> 1548 +<953c> 6899 +<953d> 20463 +<9540> 1541 +<9541> 2755 +<9542> 6902 +<9543> 20464 +<9547> 4499 +<9548> 20465 +<9549> 6907 +<954a> 2906 +<954b> 20466 +<954c> 6908 +<954d> 2907 +<9550> 1759 +<9551> 1026 +<9555> 20467 +<955a> 20468 +<955b> 6918 +<955c> 2276 +<955d> 6921 +<9560> 20469 +<9563> 2582 +<956d> 2499 +<956e> 20470 +<956f> 6933 +<9570> 2550 +<9576> 3919 +<9577> 7797 +<957f> 1225 +<9580> 8317 +<9581> 20480 +<9582> 9151 +<9583> 8467 +<9586> 9152 +<9589> 7749 +<958a> 20485 +<958b> 8152 +<958c> 9156 +<958d> 20486 +<958e> 9154 +<958f> 8452 +<9590> 20487 +<9591> 8637 +<9592> 20488 +<9593> 8071 +<9594> 9155 +<9598> 8809 +<95a1> 8003 +<95a2> 20500 +<95a3> 7966 +<95a4> 9849 +<95a5> 7915 +<95a8> 7989 +<95a9> 8330 +<95aa> 20503 +<95ab> 9159 +<95ac> 9161 +<95ad> 9158 +<95b2> 8783 +<95b6> 9163 +<95b9> 8691 +<95ba> 20513 +<95bb> 8695 +<95bc> 9167 +<95bd> 9166 +<95be> 9162 +<95bf> 9165 +<95c3> 9168 +<95c6> 9836 +<95c7> 20519 +<95c8> 9153 +<95c9> 20520 +<95ca> 8174 +<95cb> 9169 +<95cc> 8184 +<95d0> 9171 +<95d4> 9170 +<95d5> 9172 +<95d6> 7832 +<95dc> 7980 +<95dd> 20532 +<95de> 9173 +<95e1> 7793 +<95e2> 9873 +<95e5> 9157 +<95e8> 2762 +<95e9> 5765 +<95ea> 3322 +<95eb> 5766 +<95ec> 20539 +<95ed> 1086 +<95ee> 3801 +<95ef> 1334 +endcidchar + +100 begincidchar +<95f0> 3277 +<95f1> 5767 +<95f2> 3901 +<95f3> 5768 +<95f4> 2135 +<95f7> 2763 +<95f8> 4419 +<95f9> 2873 +<95fa> 1860 +<95fb> 3796 +<95fc> 5771 +<95fd> 2811 +<95fe> 5772 +<95ff> 20540 +<9600> 1604 +<9601> 1774 +<9602> 1929 +<9605> 4359 +<9606> 5775 +<9607> 20541 +<9608> 5776 +<9609> 4084 +<960e> 4095 +<960f> 5781 +<9610> 1218 +<9611> 2470 +<9612> 5782 +<9613> 20542 +<9614> 2454 +<9618> 20543 +<961b> 20544 +<961c> 1714 +<961d> 4948 +<961e> 20545 +<961f> 1554 +<9620> 20546 +<9621> 4950 +<9622> 4949 +<962a> 4952 +<962e> 3273 +<9631> 4951 +<9632> 1629 +<9633> 4125 +<9634> 4220 +<9635> 4500 +<9636> 2216 +<963b> 4677 +<963c> 4954 +<963d> 4953 +<963e> 20563 +<963f> 941 +<9640> 3716 +<9641> 20564 +<9642> 4955 +<9643> 20565 +<9644> 1720 +<9645> 2109 +<9646> 2660 +<9647> 2635 +<9648> 1255 +<9649> 4956 +<964a> 20566 +<964b> 2641 +<964c> 2835 +<964d> 2182 +<9650> 3915 +<9654> 4957 +<9655> 3323 +<9658> 8986 +<965b> 1094 +<965c> 20576 +<965d> 8468 +<965e> 20577 +<965f> 4958 +<9660> 20578 +<9661> 1527 +<9662> 4349 +<9663> 8836 +<9664> 1314 +<9667> 4959 +<9668> 4364 +<9669> 3906 +<966a> 2980 +<966b> 20581 +<966c> 4960 +<9670> 8732 +<9671> 20585 +<9672> 4961 +<9673> 7806 +<9674> 4962 +<9675> 2611 +<9676> 3624 +<9677> 3914 +<9678> 8269 +<967d> 8705 +<9685> 4300 +<9686> 2632 +<9687> 20597 +<9688> 4963 +<9689> 20598 +endcidchar + +100 begincidchar +<968a> 7897 +<968b> 3546 +<968c> 20599 +<968d> 4964 +<968e> 8114 +<968f> 3547 +<9690> 4229 +<9694> 1775 +<9695> 8786 +<9696> 20603 +<9697> 4965 +<9698> 954 +<9699> 3875 +<969a> 20604 +<969b> 8057 +<969c> 4464 +<96a7> 3554 +<96a8> 8535 +<96a9> 20615 +<96aa> 8639 +<96b0> 4966 +<96b1> 8735 +<96b2> 20621 +<96b3> 5764 +<96b4> 8253 +<96b5> 20622 +<96b6> 2542 +<96b7> 20623 +<96b8> 8213 +<96b9> 7545 +<96ba> 20624 +<96bb> 9893 +<96be> 2868 +<96bf> 20625 +<96c0> 3219 +<96c1> 4108 +<96c4> 4006 +<96c5> 4078 +<96c6> 2082 +<96c7> 1830 +<96c8> 20628 +<96c9> 6940 +<96cc> 1353 +<96cd> 4255 +<96ce> 7548 +<96cf> 1312 +<96d2> 7549 +<96d5> 1490 +<96d6> 8534 +<96d9> 8516 +<96da> 20637 +<96db> 7825 +<96dc> 8791 +<96e0> 7551 +<96e1> 20641 +<96e2> 8202 +<96e3> 8338 +<96e8> 4303 +<96e9> 7521 +<96ea> 4050 +<96ef> 7523 +<96f2> 8784 +<96f3> 7522 +<96f6> 2604 +<96f7> 2498 +<96f8> 20654 +<96f9> 1035 +<96fa> 20655 +<96fb> 7875 +<96fe> 3836 +<96ff> 20658 +<9700> 4019 +<9701> 7525 +<9704> 3939 +<9705> 20661 +<9706> 7524 +<9707> 4497 +<9708> 7526 +<9709> 2750 +<970d> 2057 +<970e> 7528 +<970f> 7527 +<9713> 2881 +<9716> 2593 +<971c> 3487 +<971d> 20675 +<971e> 3881 +<9727> 8616 +<972a> 7529 +<972d> 7530 +<9730> 7531 +<9731> 20690 +<9732> 2653 +<9738> 991 +<9739> 3002 +<973d> 9741 +<973e> 7532 +<9742> 9740 +<9743> 20702 +<9744> 9742 +endcidchar + +100 begincidchar +<9748> 8242 +<9752> 3165 +<9753> 7520 +<9756> 2279 +<9759> 2273 +<975a> 9739 +<975b> 1478 +<975e> 1636 +<975f> 20721 +<9760> 2380 +<9761> 2775 +<9762> 2795 +<9765> 4738 +<9768> 8899 +<9769> 1770 +<9773> 2250 +<9774> 4046 +<9775> 20735 +<9776> 987 +<977c> 7624 +<9785> 7625 +<978b> 3959 +<978c> 20754 +<978d> 955 +<978e> 20755 +<978f> 7971 +<9790> 20756 +<9793> 20757 +<9794> 7628 +<9798> 3143 +<97a0> 2302 +<97a3> 7631 +<97a6> 9877 +<97ab> 7630 +<97ac> 20776 +<97ad> 1095 +<97ae> 20777 +<97af> 7629 +<97b2> 7632 +<97b3> 20780 +<97b4> 7633 +<97bd> 9822 +<97c3> 9821 +<97c6> 9874 +<97c9> 9823 +<97ca> 20798 +<97cb> 8589 +<97cc> 8445 +<97d3> 8000 +<97d9> 9317 +<97dc> 9319 +<97dd> 20812 +<97de> 9318 +<97e6> 3763 +<97e7> 3240 +<97e8> 20820 +<97e9> 1890 +<97ed> 2289 +<97f3> 4219 +<97f4> 20826 +<97f5> 4370 +<97f6> 3345 +<97ff> 8649 +<9800> 20835 +<9801> 8713 +<9802> 7881 +<9803> 8425 +<9804> 20836 +<9805> 8650 +<9806> 8518 +<9807> 9669 +<9808> 8668 +<9809> 20837 +<980a> 9310 +<980b> 20838 +<980c> 8527 +<980d> 20839 +<9810> 8769 +<9811> 8586 +<9812> 7727 +<9813> 7900 +<9817> 8383 +<9818> 8244 +<981c> 9673 +<9821> 9672 +<9824> 8718 +<9825> 20852 +<9826> 9675 +<982d> 8573 +<9830> 8062 +<9837> 9676 +<9838> 8131 +<983b> 8377 +<983c> 20869 +<983d> 8577 +<9846> 8154 +<984c> 8563 +<984d> 7905 +<984e> 9677 +<9853> 9678 +endcidchar + +100 begincidchar +<9854> 8694 +<9858> 8779 +<9859> 9681 +<985a> 20890 +<985b> 7872 +<985e> 8200 +<9862> 9680 +<9865> 9682 +<9866> 20898 +<9867> 7978 +<986b> 7794 +<986c> 9683 +<986f> 8638 +<9870> 9684 +<9871> 8260 +<9872> 20904 +<9873> 9679 +<9874> 8435 +<9875> 4154 +<9876> 1508 +<9877> 3175 +<9878> 7136 +<9879> 3931 +<987a> 3496 +<987b> 4022 +<987c> 6183 +<987d> 3736 +<987e> 1828 +<987f> 1560 +<9880> 7137 +<9881> 1007 +<9882> 3521 +<9883> 7138 +<9884> 4327 +<9885> 2644 +<9886> 2613 +<9887> 3043 +<9888> 2272 +<9889> 7139 +<988a> 2120 +<988b> 20905 +<988e> 20906 +<988f> 7142 +<9890> 4170 +<9891> 3028 +<9892> 20907 +<9893> 3704 +<9894> 7143 +<9895> 20908 +<9896> 4246 +<9897> 2386 +<9898> 3637 +<9899> 20909 +<989c> 4094 +<989d> 1581 +<98a0> 1472 +<98a3> 20910 +<98a4> 1219 +<98a7> 3202 +<98a8> 7936 +<98b0> 20916 +<98b1> 9880 +<98b2> 20917 +<98b3> 9848 +<98b6> 9422 +<98bc> 9423 +<98c4> 8376 +<98c5> 20932 +<98c6> 9424 +<98c7> 20933 +<98c8> 9425 +<98ce> 1668 +<98d4> 20941 +<98d5> 6586 +<98d8> 3021 +<98db> 7924 +<98de> 1638 +<98df> 3402 +<98e0> 9115 +<98e1> 20946 +<98e2> 9854 +<98e7> 5658 +<98e8> 7655 +<98e9> 9117 +<98ec> 20951 +<98ed> 9121 +<98ee> 20952 +<98ef> 7921 +<98f2> 8734 +<98f3> 20955 +<98f4> 9122 +<98fc> 8523 +<98fd> 7734 +<98fe> 8501 +<98ff> 20963 +<9903> 8109 +<9904> 20967 +<9905> 7763 +<9909> 9123 +<990a> 8707 +endcidchar + +100 begincidchar +<990b> 20971 +<990c> 7911 +<990d> 7656 +<9910> 1172 +<9911> 9124 +<9912> 8343 +<9913> 7908 +<9918> 8760 +<991b> 9125 +<991e> 8090 +<9921> 8643 +<9928> 7982 +<992e> 7657 +<9933> 9116 +<9937> 9126 +<993c> 9118 +<993d> 21006 +<993e> 8245 +<993f> 9127 +<9943> 9128 +<9944> 21010 +<9945> 8309 +<994b> 8171 +<994c> 9132 +<9951> 8042 +<9952> 8441 +<9953> 21017 +<9954> 7659 +<9955> 7658 +<9956> 21018 +<9957> 9830 +<995c> 9831 +<995d> 21023 +<995e> 7788 +<9962> 9133 +<9963> 5661 +<9964> 21027 +<9965> 2069 +<9966> 21028 +<996d> 1622 +<996e> 4226 +<996f> 2165 +<9970> 3429 +<9971> 1038 +<9972> 3516 +<9973> 21029 +<9974> 5668 +<9975> 1595 +<9976> 3231 +<9977> 5669 +<997a> 2201 +<997b> 21032 +<997c> 1126 +<997d> 5670 +<997e> 21033 +<997f> 1589 +<9980> 5671 +<9981> 2876 +<9984> 5672 +<9985> 3911 +<9986> 1846 +<9987> 5673 +<9988> 2444 +<9989> 21036 +<998a> 5674 +<998b> 1213 +<998c> 21037 +<998d> 5675 +<998e> 21038 +<998f> 2620 +<9992> 2719 +<9996> 3438 +<9997> 4718 +<9998> 4857 +<9999> 3920 +<99a5> 6955 +<99a8> 5086 +<99ac> 8301 +<99ad> 8770 +<99ae> 7938 +<99b1> 8579 +<99b2> 21057 +<99b3> 7813 +<99b4> 8681 +<99c1> 7767 +<99d0> 8869 +<99d1> 9223 +<99d2> 8138 +<99d3> 21084 +<99d4> 9218 +<99d5> 8066 +<99d8> 9224 +<99d9> 9220 +<99da> 21087 +<99db> 8497 +<99dc> 21088 +<99dd> 8580 +<99de> 21089 +<99df> 9219 +<99e0> 21090 +endcidchar + +100 begincidchar +<99e1> 8302 +<99e2> 9227 +<99ed> 7999 +<99f1> 8295 +<99ff> 8151 +<9a00> 21117 +<9a01> 7811 +<9a05> 9231 +<9a0d> 9230 +<9a0e> 8391 +<9a0f> 9229 +<9a16> 9234 +<9a19> 8375 +<9a2b> 9200 +<9a2c> 21153 +<9a2d> 9233 +<9a2e> 9236 +<9a2f> 21154 +<9a30> 8560 +<9a36> 9221 +<9a37> 8460 +<9a38> 9237 +<9a3e> 8294 +<9a3f> 21165 +<9a40> 9042 +<9a41> 9235 +<9a42> 9232 +<9a45> 8433 +<9a4a> 9226 +<9a4d> 9225 +<9a4e> 21172 +<9a4f> 9240 +<9a55> 8103 +<9a56> 21178 +<9a57> 8700 +<9a5a> 8129 +<9a5b> 9222 +<9a5f> 8860 +<9a62> 8270 +<9a63> 21186 +<9a64> 9242 +<9a65> 9241 +<9a6a> 9228 +<9a6b> 21191 +<9a6c> 2708 +<9a6d> 4329 +<9a6e> 3717 +<9a6f> 4058 +<9a70> 1280 +<9a71> 3194 +<9a72> 21192 +<9a73> 1148 +<9a74> 2662 +<9a75> 6074 +<9a76> 3410 +<9a79> 2307 +<9a7a> 6077 +<9a7b> 4609 +<9a7c> 3718 +<9a7d> 6079 +<9a7e> 2128 +<9a7f> 6078 +<9a82> 2709 +<9a83> 21193 +<9a84> 2191 +<9a85> 6082 +<9a86> 2701 +<9a87> 1886 +<9a88> 6083 +<9a89> 21194 +<9a8a> 6084 +<9a8b> 1271 +<9a8c> 4114 +<9a8f> 2354 +<9a90> 6085 +<9a91> 3086 +<9a96> 6088 +<9a97> 3020 +<9a98> 6089 +<9a99> 21199 +<9a9a> 3296 +<9a9e> 5941 +<9aa1> 2697 +<9aa4> 4583 +<9aa5> 6097 +<9aa6> 21200 +<9aa7> 6098 +<9aa8> 1824 +<9aaf> 7721 +<9ab0> 7635 +<9ab1> 7634 +<9ab6> 7638 +<9ab7> 7636 +<9ab8> 1880 +<9ab9> 21211 +<9aba> 7639 +<9abb> 21212 +<9abc> 7640 +<9ac0> 7642 +<9ac1> 7641 +endcidchar + +100 begincidchar +<9ac2> 7644 +<9ac5> 7643 +<9acf> 9825 +<9ad0> 21225 +<9ad1> 7647 +<9ad2> 9892 +<9ad3> 3549 +<9ad4> 8564 +<9ad5> 9827 +<9ad6> 9826 +<9ad7> 21226 +<9ad8> 1754 +<9adf> 7660 +<9ae0> 21233 +<9ae1> 7661 +<9ae6> 7662 +<9aeb> 7664 +<9aec> 21242 +<9aed> 7666 +<9aee> 9845 +<9aef> 7663 +<9af9> 7667 +<9afa> 21252 +<9afb> 7665 +<9b03> 4660 +<9b06> 8524 +<9b07> 21262 +<9b08> 7668 +<9b0d> 9850 +<9b0e> 21267 +<9b0f> 7669 +<9b13> 7670 +<9b1a> 9888 +<9b1f> 7671 +<9b22> 9832 +<9b23> 7672 +<9b24> 21283 +<9b25> 7888 +<9b26> 21284 +<9b27> 8342 +<9b28> 21285 +<9b29> 9164 +<9b2e> 9160 +<9b2f> 5019 +<9b30> 21290 +<9b31> 8766 +<9b32> 4704 +<9b3b> 6003 +<9b3c> 1862 +<9b41> 2442 +<9b42> 2047 +<9b43> 7649 +<9b44> 3046 +<9b45> 7648 +<9b46> 21303 +<9b47> 7650 +<9b48> 7652 +<9b49> 7651 +<9b4d> 7653 +<9b4e> 9829 +<9b4f> 3785 +<9b50> 21307 +<9b51> 7654 +<9b54> 2826 +<9b58> 9828 +<9b59> 21313 +<9b5a> 8761 +<9b6f> 8266 +<9b74> 9759 +<9b77> 9758 +<9b81> 9760 +<9b82> 21349 +<9b83> 9761 +<9b8e> 9762 +<9b8f> 21360 +<9b90> 9767 +<9b91> 7737 +<9b92> 9765 +<9b9a> 9769 +<9b9d> 9774 +<9b9e> 9771 +<9baa> 9770 +<9bab> 9773 +<9bac> 21381 +<9bad> 9768 +<9bae> 8633 +<9bc0> 9782 +<9bc1> 9776 +<9bc7> 9784 +<9bc8> 21404 +<9bc9> 8205 +<9bca> 9783 +<9bd4> 9797 +<9bd5> 21414 +<9bd6> 9786 +<9bdb> 9795 +<9bdc> 21419 +<9bdd> 9792 +<9be1> 9789 +<9be2> 9793 +endcidchar + +100 begincidchar +<9be3> 21423 +<9be4> 9790 +<9be7> 9791 +<9be8> 8128 +<9be9> 21426 +<9bf0> 9794 +<9bf4> 9796 +<9bfd> 9785 +<9bfe> 21442 +<9bff> 9804 +<9c08> 9799 +<9c09> 9803 +<9c0d> 9801 +<9c10> 9800 +<9c11> 21456 +<9c12> 9802 +<9c13> 8456 +<9c20> 9805 +<9c23> 9780 +<9c24> 21471 +<9c25> 9809 +<9c28> 9808 +<9c29> 9810 +<9c2d> 9807 +<9c31> 9778 +<9c32> 9806 +<9c33> 9811 +<9c34> 21480 +<9c35> 9815 +<9c36> 21481 +<9c37> 9781 +<9c38> 21482 +<9c39> 9779 +<9c3a> 21483 +<9c3b> 9814 +<9c3e> 9812 +<9c45> 9816 +<9c48> 9813 +<9c49> 7757 +<9c52> 9819 +<9c53> 21502 +<9c54> 9818 +<9c55> 21503 +<9c56> 9817 +<9c57> 8238 +<9c58> 9775 +<9c5d> 9798 +<9c5e> 21508 +<9c5f> 9766 +<9c67> 9820 +<9c6d> 9772 +<9c78> 9763 +<9c79> 21531 +<9c7a> 9777 +<9c7b> 21532 +<9c7c> 4296 +<9c7f> 7561 +<9c80> 21535 +<9c81> 2650 +<9c82> 7562 +<9c8b> 7568 +<9c8c> 21540 +<9c8d> 1044 +<9c8e> 7569 +<9c8f> 21541 +<9c93> 21542 +<9c9c> 3895 +<9c9d> 21547 +<9ca4> 2523 +<9caa> 21548 +<9cab> 7588 +<9cac> 21549 +<9caf> 21550 +<9cb8> 2263 +<9cb9> 21551 +<9cc3> 3285 +<9cd6> 1111 +<9cde> 2596 +<9cdf> 7622 +<9ce2> 7623 +<9ce5> 8348 +<9ce9> 9600 +<9cec> 8924 +<9cf3> 7941 +<9cf4> 8331 +<9cf5> 21578 +<9cf6> 9601 +<9d06> 9603 +<9d07> 9602 +<9d08> 21594 +<9d09> 8686 +<9d15> 8578 +<9d1b> 8771 +<9d1c> 21611 +<9d1d> 9607 +<9d1e> 21612 +<9d1f> 9608 +<9d23> 9604 +<9d26> 8701 +<9d27> 21618 +endcidchar + +100 begincidchar +<9d28> 8687 +<9d2f> 9610 +<9d30> 9612 +<9d3b> 8007 +<9d3f> 7965 +<9d42> 9613 +<9d51> 8144 +<9d52> 9618 +<9d53> 9615 +<9d5c> 9620 +<9d5d> 7904 +<9d60> 9617 +<9d61> 9621 +<9d6a> 9623 +<9d6b> 21672 +<9d6c> 8374 +<9d6f> 9624 +<9d72> 8438 +<9d87> 9605 +<9d88> 21697 +<9d89> 9625 +<9d93> 9622 +<9d98> 9626 +<9d99> 21711 +<9d9a> 9627 +<9da5> 9629 +<9da9> 9630 +<9daf> 9036 +<9db4> 8004 +<9dbb> 9824 +<9dbc> 9632 +<9dc0> 9628 +<9dc1> 21743 +<9dc2> 9631 +<9dc3> 21744 +<9dc4> 8044 +<9dd3> 9634 +<9dd7> 8366 +<9dd8> 21762 +<9dd9> 9611 +<9dda> 9635 +<9de5> 9609 +<9de6> 9637 +<9def> 9636 +<9df2> 9638 +<9df3> 9619 +<9df8> 9639 +<9df9> 8738 +<9dfa> 9641 +<9e0c> 9640 +<9e15> 9606 +<9e1a> 9633 +<9e1b> 9642 +<9e1c> 21816 +<9e1d> 9616 +<9e1e> 9614 +<9e1f> 2900 +<9e20> 6965 +<9e21> 2073 +<9e22> 6966 +<9e23> 2814 +<9e24> 21817 +<9e25> 2937 +<9e26> 4068 +<9e27> 21818 +<9e2d> 4069 +<9e2e> 21819 +<9e2f> 4117 +<9e30> 21820 +<9e31> 6973 +<9e32> 6972 +<9e33> 4330 +<9e34> 21821 +<9e35> 3715 +<9e36> 6974 +<9e37> 6976 +<9e38> 6975 +<9e3d> 1766 +<9e3e> 6979 +<9e3f> 1951 +<9e40> 21824 +<9e43> 2328 +<9e44> 6982 +<9e45> 1579 +<9e4a> 3216 +<9e4d> 21825 +<9e4e> 6989 +<9e4f> 2997 +<9e50> 21826 +<9e51> 6990 +<9e55> 6991 +<9e56> 21830 +<9e57> 6992 +<9e58> 7637 +<9e59> 21831 +<9e5d> 21832 +<9e5e> 6996 +<9e63> 6997 +<9e64> 1934 +<9e65> 21837 +endcidchar + +100 begincidchar +<9e6d> 7006 +<9e70> 4234 +<9e71> 7005 +<9e72> 21840 +<9e73> 7007 +<9e74> 21841 +<9e75> 9864 +<9e79> 9886 +<9e7a> 9723 +<9e7b> 21845 +<9e7c> 8076 +<9e7d> 8692 +<9e7e> 7446 +<9e7f> 2656 +<9e82> 7676 +<9e8b> 7679 +<9e92> 7680 +<9e93> 2651 +<9e97> 8207 +<9e9d> 7682 +<9e9e> 21868 +<9e9f> 7683 +<9ea5> 8305 +<9ea6> 2714 +<9ea9> 9719 +<9eaf> 9878 +<9eb4> 7406 +<9eb5> 9871 +<9eb8> 7405 +<9ebb> 2704 +<9ebc> 21889 +<9ec4> 2011 +<9ec9> 4856 +<9ecc> 8922 +<9ecd> 3465 +<9ece> 2515 +<9ecf> 6954 +<9ed0> 21901 +<9ed1> 1937 +<9ed4> 3114 +<9ed8> 2831 +<9ede> 7873 +<9edf> 7688 +<9ee0> 7687 +<9ee1> 21909 +<9ee2> 7689 +<9ee5> 7692 +<9ee6> 21912 +<9ee7> 7691 +<9ee8> 7859 +<9ee9> 7690 +<9eea> 7693 +<9eef> 7694 +<9ef2> 9834 +<9ef3> 21919 +<9ef4> 9866 +<9ef7> 9833 +<9ef8> 21922 +<9ef9> 6741 +<9efa> 21923 +<9efd> 9752 +<9efe> 7542 +<9eff> 9753 +<9f09> 9754 +<9f0a> 21933 +<9f0b> 7543 +<9f0c> 21934 +<9f0d> 7544 +<9f0e> 1509 +<9f0f> 21935 +<9f10> 4724 +<9f13> 1821 +<9f14> 21938 +<9f15> 9843 +<9f16> 21939 +<9f17> 4721 +<9f18> 21940 +<9f19> 5087 +<9f20> 3466 +<9f21> 21947 +<9f22> 7695 +<9f2c> 7696 +<9f2f> 7697 +<9f37> 7699 +<9f38> 21966 +<9f39> 7698 +<9f3a> 21967 +<9f3b> 1072 +<9f3c> 21968 +<9f44> 7702 +<9f4a> 8390 +<9f4b> 8811 +<9f4f> 9427 +<9f50> 3082 +<9f51> 6594 +<9f52> 7814 +<9f53> 21982 +<9f54> 9743 +<9f59> 9745 +<9f5c> 9747 +endcidchar + +65 begincidchar +<9f5f> 9744 +<9f60> 9746 +<9f61> 8240 +<9f62> 21991 +<9f63> 9841 +<9f66> 9748 +<9f6a> 9750 +<9f6b> 21997 +<9f6c> 9749 +<9f72> 8434 +<9f77> 9751 +<9f7f> 1282 +<9f80> 7533 +<9f83> 7534 +<9f84> 2605 +<9f8b> 3198 +<9f8c> 7541 +<9f8d> 8247 +<9f90> 8371 +<9f94> 7970 +<9f95> 9453 +<9f99> 2627 +<9f9a> 1793 +<9f9b> 6740 +<9f9c> 7988 +<9f9f> 1859 +<9fa0> 4851 +<9fb4> 22056 +<9fb5> 22064 +<9fb8> 22076 +<9fb9> 22093 +<9fba> 22110 +<9fbb> 22126 + 22048 + 22049 + 22050 + 22093 + 22110 + 22075 + 22085 + 22111 + 22353 + 599 + 695 + 698 + 22031 + 2562 + 16595 + 8204 + 20611 + 4697 + 22035 + 22038 + 573 + 575 + 574 + 599 + 10013 + 598 + 166 + 106 + 10014 + 355 + 10015 + 265 +endcidchar + +100 begincidrange +<0020> <007e> 1 +<02ca> <02cb> 9907 +<0391> <03a1> 525 +<03a3> <03a9> 542 +<03b1> <03c1> 549 +<03c3> <03c9> 566 +<0410> <0415> 602 +<0416> <0435> 609 +<0436> <044f> 642 +<2018> <2019> 109 +<201c> <201d> 111 +<2032> <2033> 163 +<2160> <216b> 250 +<2170> <2179> 9897 +<2190> <2191> 186 +<2196> <2199> 9916 +<2227> <2228> 131 +<2264> <2265> 155 +<2266> <2267> 9924 +<226e> <226f> 153 +<2460> <2469> 230 +<2474> <2487> 210 +<2488> <249b> 190 +<2500> <254b> 738 +<2550> <2573> 9927 +<2581> <258f> 9963 +<2593> <2595> 9978 +<25bc> <25bd> 9981 +<25e2> <25e5> 9983 +<2e82> <2e83> 22429 +<2e85> <2e87> 22431 +<2e89> <2e8a> 22434 +<2e8d> <2e96> 22436 +<2e98> <2e99> 22446 +<2e9b> <2ea6> 22448 +<2ea8> <2ea9> 22460 +<2eab> <2ead> 22462 +<2eaf> <2eb2> 22465 +<2eb4> <2eb5> 22469 +<2eb6> <2eb7> 22083 +<2eb8> <2eba> 22471 +<2ebc> <2ec9> 22474 +<2ecb> <2ef3> 22488 +<2ff0> <2ffb> 10060 +<3000> <3002> 96 +<3008> <300f> 115 +<3010> <3011> 125 +<3014> <3015> 113 +<3016> <3017> 123 +<301d> <301e> 9990 +<3021> <3029> 9992 +<3033> <3035> 22395 +<3038> <303a> 22398 +<3041> <3093> 356 +<309b> <309c> 10020 +<309d> <309e> 10025 +<30a1> <30f6> 439 +<30fd> <30fe> 10022 +<3105> <3129> 700 +<312a> <312c> 22401 +<31a0> <31b7> 22404 +<3220> <3229> 240 +<338e> <338f> 10002 +<339c> <339e> 10004 +<33d1> <33d2> 10010 +<3400> <3446> 22529 +<3448> <3472> 22600 +<3474> <34ff> 22643 +<3500> <359d> 22783 +<359f> <35ff> 22941 +<3600> <360d> 23038 +<360f> <3619> 23052 +<361b> <36ff> 23063 +<3700> <37ff> 23292 +<3800> <38ff> 23548 +<3900> <3917> 23804 +<3919> <396d> 23828 +<396f> <39ce> 23913 +<39d1> <39de> 24009 +<39e0> <39ff> 24023 +<3a00> <3a72> 24055 +<3a74> <3aff> 24170 +<3b00> <3b4d> 24310 +<3b4f> <3bff> 24388 +<3c00> <3c6d> 24565 +<3c6f> <3cdf> 24675 +<3ce1> <3cff> 24788 +<3d00> <3dff> 24819 +<3e00> <3eff> 25075 +<3f00> <3fff> 25331 +<4000> <4055> 25587 +<4057> <40ff> 25673 +<4100> <415e> 25842 +<4160> <41ff> 25937 +<4200> <42ff> 26097 +<4300> <4336> 26353 +<4338> <43ab> 26408 +<43ad> <43b0> 26524 +<43b2> <43dc> 26528 +<43de> <43ff> 26571 +endcidrange + +100 begincidrange +<4400> <44d5> 26605 +<44d7> <44ff> 26819 +<4500> <45ff> 26860 +<4600> <464b> 27116 +<464d> <4660> 27192 +<4662> <46ff> 27212 +<4700> <4722> 27370 +<4724> <4728> 27405 +<472a> <477b> 27410 +<477d> <478c> 27492 +<478e> <47ff> 27508 +<4800> <48ff> 27622 +<4900> <4946> 27878 +<4948> <4979> 27949 +<497b> <497c> 27999 +<497e> <4981> 28001 +<4982> <4983> 22102 +<4985> <4986> 22104 +<4987> <499a> 28006 +<499c> <499e> 28026 +<49a0> <49b5> 28029 +<49b8> <49ff> 28051 +<4a00> <4aff> 28123 +<4b00> <4bff> 28379 +<4c00> <4c76> 28635 +<4c78> <4c9e> 28754 +<4c9f> <4ca1> 22113 +<4ca4> <4cff> 28793 +<4d00> <4d12> 28885 +<4d13> <4d19> 22118 +<4d1a> <4dad> 28904 +<4daf> <4db5> 29052 +<4e04> <4e06> 10073 +<4e1f> <4e21> 10079 +<4e2e> <4e2f> 10085 +<4e40> <4e42> 10092 +<4e5a> <4e5b> 10101 +<4e62> <4e65> 10103 +<4e67> <4e68> 10107 +<4e6a> <4e6f> 10109 +<4e74> <4e7d> 10116 +<4e7f> <4e81> 10126 +<4e83> <4e85> 10129 +<4e96> <4e97> 10135 +<4e9c> <4e9d> 10138 +<4eaf> <4eb1> 10142 +<4eb6> <4eb9> 10146 +<4ebc> <4ebe> 10150 +<4ecf> <4ed0> 10155 +<4eda> <4edc> 10158 +<4ee6> <4ee7> 10163 +<4eed> <4eef> 10166 +<4ef8> <4efa> 10171 +<4f02> <4f08> 10177 +<4f0b> <4f0c> 10184 +<4f12> <4f16> 10186 +<4f1c> <4f1d> 10191 +<4f28> <4f29> 10195 +<4f2c> <4f2e> 10197 +<4f3e> <4f42> 10206 +<4f44> <4f45> 10211 +<4f47> <4f4c> 10213 +<4f61> <4f62> 10222 +<4f6a> <4f6b> 10226 +<4f6d> <4f6e> 10228 +<4f71> <4f72> 10230 +<4f77> <4f7a> 10233 +<4f80> <4f82> 10238 +<4f92> <4f93> 10247 +<4f98> <4f9a> 10250 +<4f9e> <4f9f> 10254 +<4fa1> <4fa2> 10256 +<4fb0> <4fb4> 10261 +<4fb6> <4fbe> 10266 +<4fc0> <4fc1> 10275 +<4fc6> <4fc9> 10277 +<4fcb> <4fcd> 10281 +<4fd2> <4fd6> 10284 +<4fe4> <4fe5> 10292 +<4feb> <4fec> 10295 +<4ff4> <4ff7> 10299 +<4ffb> <4ffd> 10304 +<5001> <5005> 10308 +<5007> <5008> 10313 +<5015> <5017> 10319 +<501d> <501e> 10323 +<5022> <5024> 10326 +<502f> <5039> 10330 +<503f> <5042> 10343 +<5044> <5046> 10347 +<504a> <504b> 10350 +<5050> <5054> 10353 +<5056> <5059> 10358 +<505d> <5064> 10363 +<5066> <506b> 10371 +<506d> <5073> 10377 +<5078> <507a> 10384 +<507c> <507d> 10387 +<5081> <5084> 10389 +<5086> <5087> 10393 +endcidrange + +100 begincidrange +<5089> <508c> 10395 +<508e> <5095> 10399 +<509a> <50a1> 10408 +<50aa> <50ab> 10418 +<50ae> <50b1> 10420 +<50b8> <50b9> 10425 +<50bc> <50bd> 10427 +<50bf> <50c1> 10429 +<50c3> <50c4> 10432 +<50c6> <50c8> 10434 +<50ca> <50ce> 10437 +<50d2> <50d4> 10443 +<50d7> <50d9> 10446 +<50db> <50dd> 10449 +<50df> <50e4> 10452 +<50e9> <50eb> 10458 +<50ef> <50f2> 10461 +<50f6> <50f8> 10466 +<50fc> <50ff> 10470 +<510c> <510f> 10478 +<5116> <5117> 10484 +<5119> <511e> 10486 +<5122> <5129> 10493 +<512b> <5131> 10501 +<5133> <5136> 10508 +<5138> <5139> 10512 +<513d> <513e> 10514 +<514e> <5150> 10520 +<5157> <5159> 10524 +<515d> <5161> 10528 +<5163> <5164> 10533 +<5166> <5167> 10535 +<517e> <517f> 10541 +<5183> <5184> 10543 +<5186> <5187> 10545 +<518a> <518b> 10547 +<518e> <5191> 10549 +<5193> <5194> 10553 +<519d> <519f> 10557 +<51a6> <51aa> 10562 +<51ad> <51ae> 10567 +<51b8> <51ba> 10570 +<51be> <51bf> 10573 +<51c1> <51c3> 10575 +<51d2> <51da> 10583 +<51de> <51df> 10593 +<51e2> <51e3> 10595 +<51e5> <51ea> 10597 +<5204> <5205> 10609 +<520b> <520c> 10612 +<520f> <5210> 10614 +<5213> <5215> 10616 +<521e> <521f> 10620 +<5221> <5223> 10622 +<5225> <5227> 10625 +<5231> <5232> 10631 +<5234> <5235> 10633 +<523f> <5240> 4753 +<5245> <5246> 10637 +<5248> <5249> 10639 +<524e> <524f> 10641 +<5252> <5253> 10643 +<5257> <525a> 10646 +<525f> <5260> 10651 +<5262> <5264> 10653 +<526b> <526d> 10658 +<5270> <5271> 10661 +<5276> <527c> 10664 +<5284> <5286> 10673 +<528e> <528f> 10677 +<5294> <529a> 10680 +<52a4> <52a7> 10688 +<52ac> <52ad> 5006 +<52ae> <52b0> 10692 +<52b4> <52bd> 10695 +<52c4> <52c6> 10707 +<52cc> <52cf> 10712 +<52d3> <52d4> 10717 +<52e0> <52e1> 10722 +<52e5> <52ef> 10725 +<52f2> <52f4> 10736 +<52f6> <52f7> 10739 +<52fb> <52fd> 10741 +<5301> <5304> 10744 +<5309> <530c> 10749 +<5311> <5314> 10754 +<531b> <531c> 10759 +<531e> <531f> 10761 +<5324> <5325> 10764 +<5327> <5329> 10766 +<532b> <532c> 10769 +<5332> <5338> 10772 +<533c> <533d> 10779 +<534b> <534d> 10784 +<5358> <5359> 10788 +<536c> <536d> 10795 +<537b> <537e> 10800 +<5380> <5381> 10804 +<5387> <5388> 10807 +<538e> <5394> 10810 +endcidrange + +100 begincidrange +<5396> <5397> 10817 +<539b> <539c> 10819 +<53aa> <53ac> 10825 +<53af> <53b1> 10828 +<53b7> <53ba> 10833 +<53bc> <53be> 10837 +<53c4> <53c7> 10841 +<53ce> <53d0> 10845 +<53d2> <53d3> 10848 +<53dc> <53de> 10852 +<53fe> <53ff> 10859 +<5418> <541a> 10867 +<5424> <5425> 10872 +<5436> <5437> 10877 +<5441> <5442> 10882 +<5444> <5445> 10884 +<544c> <544f> 10888 +<5452> <5454> 5380 +<545d> <5461> 10894 +<5469> <5470> 10902 +<5479> <547a> 10911 +<547e> <547f> 10913 +<5487> <548a> 10918 +<5497> <5498> 10925 +<549a> <549b> 5395 +<549e> <54a2> 10928 +<54a9> <54aa> 5419 +<54b5> <54b7> 10937 +<54b9> <54ba> 10940 +<54ca> <54cb> 10945 +<54d3> <54d4> 5408 +<54d9> <54da> 5416 +<54e2> <54e4> 10951 +<54eb> <54ec> 10954 +<54ef> <54f1> 10956 +<54f4> <54f9> 10959 +<5502> <5503> 10968 +<550a> <550e> 10972 +<5512> <5513> 10977 +<5515> <551a> 10979 +<551c> <551f> 10985 +<5522> <5523> 5431 +<5525> <5526> 10990 +<5528> <5529> 10992 +<5534> <5536> 10997 +<5538> <553b> 11000 +<5547> <5548> 11008 +<554b> <554e> 11010 +<5551> <5552> 11014 +<5557> <555b> 11017 +<555f> <5560> 11023 +<5562> <5563> 11025 +<5568> <5569> 11027 +<556f> <5574> 11030 +<5575> <5577> 5449 +<5579> <557a> 11036 +<5585> <5586> 11040 +<558c> <558e> 11042 +<5592> <5593> 11046 +<5595> <5597> 11048 +<559a> <559b> 11051 +<55a0> <55a6> 11054 +<55a8> <55a9> 11061 +<55af> <55b0> 11065 +<55bd> <55be> 5468 +<55bf> <55c3> 11072 +<55ca> <55cb> 11078 +<55cc> <55cd> 5487 +<55cf> <55d0> 11080 +<55d7> <55d9> 11083 +<55eb> <55ec> 5477 +<55ed> <55ee> 11091 +<55f0> <55f1> 11093 +<55f2> <55f3> 5485 +<55f8> <55fc> 11096 +<5602> <5605> 11102 +<560a> <560b> 11107 +<5610> <5613> 11109 +<5619> <561a> 11114 +<5620> <5622> 11117 +<5625> <5626> 11120 +<562a> <562b> 11123 +<563c> <563e> 11128 +<5642> <564b> 11132 +<564f> <5653> 11142 +<5655> <5656> 11147 +<565a> <565b> 11149 +<565e> <565f> 11151 +<566d> <566e> 11156 +<567b> <567c> 5517 +<567d> <567f> 11163 +<5681> <5684> 11166 +<5688> <568b> 11170 +<5690> <5692> 11175 +<5696> <5698> 11179 +<569a> <56a2> 11182 +<56a4> <56a5> 11191 +<56a9> <56ad> 11194 +<56b0> <56b2> 11199 +<56b8> <56bb> 11203 +endcidrange + +100 begincidrange +<56bd> <56bf> 11207 +<56c3> <56c4> 11210 +<56c6> <56c7> 11212 +<56cd> <56d0> 11215 +<56d2> <56d3> 11219 +<56d5> <56d6> 11221 +<56d8> <56d9> 11223 +<56e5> <56ea> 11227 +<56ee> <56ef> 11234 +<56f2> <56f3> 11236 +<56f6> <56f8> 11238 +<56fb> <56fc> 11241 +<5700> <5702> 11243 +<570e> <5711> 11248 +<5714> <5715> 11252 +<5719> <571b> 11255 +<571d> <571e> 11258 +<5720> <5722> 11260 +<5724> <5727> 11263 +<572e> <572f> 5036 +<5731> <5732> 11268 +<5734> <5738> 11270 +<573c> <573d> 11275 +<5743> <5746> 11279 +<5748> <5749> 11283 +<5752> <5756> 11286 +<5758> <5759> 11291 +<5762> <5763> 11293 +<5770> <5772> 11299 +<5774> <5775> 11302 +<5778> <577a> 11304 +<577d> <5781> 11307 +<5787> <578a> 11312 +<578d> <5791> 11316 +<5794> <579a> 11321 +<579c> <579f> 11328 +<57af> <57b1> 11336 +<57b5> <57b7> 11340 +<57b9> <57c1> 11343 +<57c4> <57ca> 11352 +<57cc> <57cd> 11359 +<57d0> <57d1> 11361 +<57d6> <57d7> 11364 +<57db> <57dc> 11366 +<57e2> <57e3> 11369 +<57e5> <57ec> 11371 +<57f0> <57f3> 11380 +<57f5> <57f6> 11384 +<57fb> <57fc> 11386 +<57fe> <57ff> 11388 +<5803> <5804> 11391 +<5808> <5809> 11393 +<580e> <5810> 11396 +<5812> <5814> 11399 +<5817> <5818> 11402 +<581a> <581c> 11404 +<5822> <5823> 11408 +<5825> <5829> 11410 +<582b> <582e> 11415 +<5832> <5833> 11419 +<5836> <5843> 11421 +<5845> <5849> 11435 +<5855> <5856> 11443 +<5859> <585d> 11445 +<585f> <5861> 11450 +<5866> <586a> 11454 +<586d> <5874> 11459 +<5876> <5878> 11467 +<587a> <587d> 11470 +<5886> <5888> 11477 +<588b> <5891> 11480 +<5894> <5898> 11487 +<58a0> <58a7> 11494 +<58aa> <58ad> 11502 +<58af> <58b2> 11506 +<58b4> <58ba> 11510 +<58bf> <58c0> 11518 +<58c2> <58c4> 11520 +<58c8> <58d0> 11524 +<58d6> <58d7> 11535 +<58db> <58dd> 11537 +<58e5> <58e8> 11542 +<58f1> <58f2> 11548 +<58f4> <58f5> 11550 +<58f7> <58f8> 11552 +<58fb> <58fc> 11554 +<58fe> <58ff> 11556 +<5900> <5901> 11558 +<5905> <5906> 11561 +<5908> <590c> 11563 +<5910> <5913> 11569 +<5917> <5918> 11573 +<591d> <591e> 11576 +<5920> <5921> 11578 +<5932> <5933> 11585 +<5935> <5936> 11587 +<593f> <5940> 11591 +<5945> <5946> 11594 +<594c> <594d> 11597 +<5952> <5953> 11600 +endcidrange + +100 begincidrange +<595b> <595f> 11603 +<5963> <5964> 11609 +<5966> <5968> 11611 +<596f> <5972> 11616 +<597a> <597c> 11622 +<597e> <5980> 11625 +<598b> <598c> 11630 +<598e> <5991> 11632 +<5994> <5995> 11636 +<599a> <599c> 11639 +<599f> <59a2> 11642 +<59a6> <59a7> 11646 +<59a9> <59aa> 6008 +<59ac> <59ad> 11648 +<59b0> <59b1> 11650 +<59b3> <59b8> 11652 +<59bc> <59bd> 11659 +<59bf> <59c5> 11661 +<59c7> <59c9> 11668 +<59cc> <59cf> 11671 +<59d5> <59d6> 11675 +<59de> <59e2> 11679 +<59e6> <59e7> 11685 +<59e9> <59eb> 11687 +<59ed> <59f8> 11690 +<59fc> <59fe> 11703 +<5a05> <5a06> 6021 +<5a0a> <5a0b> 11708 +<5a0d> <5a10> 11710 +<5a14> <5a17> 11715 +<5a19> <5a1b> 11719 +<5a1d> <5a1e> 11722 +<5a21> <5a22> 11724 +<5a26> <5a28> 11727 +<5a2a> <5a30> 11730 +<5a37> <5a3b> 11739 +<5a3d> <5a3f> 11744 +<5a42> <5a45> 11747 +<5a47> <5a48> 11751 +<5a4b> <5a54> 11753 +<5a56> <5a59> 11763 +<5a5b> <5a61> 11767 +<5a63> <5a65> 11774 +<5a68> <5a69> 11777 +<5a6b> <5a6c> 11779 +<5a6e> <5a73> 11781 +<5a78> <5a79> 11787 +<5a7b> <5a7e> 11789 +<5a80> <5a91> 11793 +<5a93> <5a99> 11811 +<5a9c> <5aa6> 11818 +<5aa8> <5aa9> 11829 +<5aab> <5ab1> 11831 +<5ab6> <5ab7> 11839 +<5ab9> <5abc> 11841 +<5abf> <5ac0> 11845 +<5ac3> <5ac8> 11847 +<5aca> <5acb> 11853 +<5acd> <5ad1> 11855 +<5ad9> <5adb> 11862 +<5add> <5adf> 11865 +<5ae4> <5ae5> 11869 +<5ae7> <5ae8> 11871 +<5aec> <5af0> 11874 +<5af2> <5af4> 11879 +<5af6> <5afa> 11882 +<5afc> <5aff> 11887 +<5b01> <5b07> 11891 +<5b0d> <5b15> 11899 +<5b1a> <5b20> 11909 +<5b22> <5b29> 11916 +<5b2b> <5b2f> 11924 +<5b35> <5b36> 11931 +<5b39> <5b3f> 11933 +<5b41> <5b4b> 11940 +<5b4d> <5b4f> 11951 +<5b60> <5b61> 11957 +<5b67> <5b68> 11959 +<5b6d> <5b6f> 11961 +<5b76> <5b77> 11966 +<5b7b> <5b7c> 11969 +<5b8d> <5b8e> 11975 +<5b90> <5b92> 11977 +<5ba7> <5ba9> 11983 +<5bac> <5baf> 11986 +<5bb1> <5bb2> 11990 +<5bba> <5bbc> 11993 +<5bc0> <5bc1> 11996 +<5bc8> <5bcb> 11999 +<5bcd> <5bcf> 12003 +<5bd4> <5bdc> 12007 +<5bf1> <5bf4> 12021 +<5bfd> <5bfe> 12026 +<5c02> <5c03> 12029 +<5c12> <5c13> 12034 +<5c1e> <5c21> 12039 +<5c28> <5c2b> 12045 +<5c2d> <5c30> 12049 +<5c32> <5c33> 12053 +<5c35> <5c36> 12055 +endcidrange + +100 begincidrange +<5c43> <5c44> 12057 +<5c46> <5c47> 12059 +<5c4c> <5c4d> 12061 +<5c52> <5c54> 12063 +<5c56> <5c58> 12066 +<5c5a> <5c5d> 12069 +<5c69> <5c6b> 12075 +<5c72> <5c78> 12080 +<5c7b> <5c7e> 12087 +<5c83> <5c87> 12092 +<5c89> <5c8b> 12097 +<5c8e> <5c8f> 12100 +<5c92> <5c93> 12102 +<5c98> <5c99> 5553 +<5c9d> <5ca0> 12105 +<5ca4> <5ca8> 12109 +<5cae> <5cb0> 12115 +<5cb9> <5cbc> 12121 +<5cc2> <5cc3> 12127 +<5cc5> <5cca> 12129 +<5ccc> <5cd1> 12135 +<5cd3> <5cd8> 12141 +<5cda> <5ce0> 12147 +<5ce2> <5ce3> 12154 +<5ceb> <5cec> 12158 +<5cee> <5cef> 12160 +<5cf1> <5cf3> 12162 +<5cf7> <5cfa> 12166 +<5cfe> <5cff> 12171 +<5d00> <5d01> 12173 +<5d02> <5d03> 5572 +<5d04> <5d05> 12175 +<5d08> <5d0c> 12177 +<5d0f> <5d13> 12182 +<5d18> <5d1a> 12188 +<5d1c> <5d1d> 12191 +<5d1f> <5d23> 12193 +<5d2a> <5d2b> 12200 +<5d2f> <5d33> 12202 +<5d35> <5d3c> 12207 +<5d3f> <5d46> 12215 +<5d48> <5d49> 12223 +<5d4d> <5d4f> 12225 +<5d51> <5d57> 12228 +<5d59> <5d5a> 12235 +<5d5e> <5d68> 12238 +<5d6d> <5d6e> 12250 +<5d70> <5d73> 12252 +<5d75> <5d80> 12256 +<5d85> <5d86> 12269 +<5d88> <5d96> 12271 +<5d9a> <5d9c> 12287 +<5d9e> <5d9f> 12290 +<5da1> <5da6> 12292 +<5da8> <5db6> 12298 +<5dbd> <5dc4> 12315 +<5dc6> <5dca> 12323 +<5dce> <5dd1> 12329 +<5dd5> <5dda> 12334 +<5ddf> <5de0> 12341 +<5de3> <5de4> 12343 +<5dec> <5ded> 12346 +<5df5> <5df6> 12348 +<5df8> <5dfc> 12350 +<5e09> <5e0b> 12359 +<5e0d> <5e0e> 12362 +<5e12> <5e13> 12364 +<5e1e> <5e24> 12367 +<5e28> <5e2a> 12374 +<5e2f> <5e30> 12378 +<5e34> <5e35> 12381 +<5e39> <5e3a> 12383 +<5e3b> <5e3c> 5539 +<5e3e> <5e3f> 12385 +<5e46> <5e4b> 12388 +<5e4d> <5e53> 12394 +<5e59> <5e5a> 12402 +<5e5c> <5e5d> 12404 +<5e64> <5e6a> 12407 +<5e6d> <5e71> 12414 +<5e81> <5e83> 12421 +<5e88> <5e89> 12425 +<5e8c> <5e8e> 12427 +<5ea1> <5ea4> 12434 +<5ea8> <5eaa> 12438 +<5eae> <5eb2> 12442 +<5eba> <5ebd> 12448 +<5ebf> <5ec8> 12452 +<5ecb> <5ed0> 12462 +<5ed4> <5ed5> 12468 +<5ed7> <5eda> 12470 +<5edc> <5ede> 12474 +<5ee4> <5ee7> 12477 +<5eed> <5ef2> 12483 +<5ef8> <5ef9> 12490 +<5efb> <5efd> 12492 +<5f05> <5f07> 12495 +<5f0c> <5f0e> 12499 +<5f19> <5f1a> 12506 +<5f1c> <5f1e> 12508 +endcidrange + +100 begincidrange +<5f21> <5f24> 12511 +<5f2b> <5f2c> 12516 +<5f36> <5f38> 12522 +<5f3d> <5f3f> 12526 +<5f41> <5f45> 12529 +<5f49> <5f4b> 12535 +<5f5a> <5f5c> 12542 +<5f5e> <5f60> 12545 +<5f67> <5f68> 12550 +<5f6e> <5f6f> 12553 +<5f74> <5f76> 12556 +<5f7d> <5f7f> 12561 +<5f8d> <5f8f> 12566 +<5f93> <5f94> 12569 +<5f9a> <5f9b> 12572 +<5fa2> <5fa7> 12576 +<5fab> <5fac> 12582 +<5faf> <5fb4> 12584 +<5fba> <5fbb> 12592 +<5fbe> <5fc2> 12594 +<5fc7> <5fc8> 12599 +<5fca> <5fcb> 12601 +<5fd3> <5fd5> 12604 +<5fda> <5fdc> 12607 +<5fde> <5fdf> 12610 +<5fe2> <5fe3> 12612 +<5fe5> <5fe6> 12614 +<5fe8> <5fe9> 12616 +<5fef> <5ff0> 12619 +<5ff2> <5ff4> 12621 +<5ff6> <5ff7> 12624 +<5ff9> <5ffa> 12626 +<6005> <6006> 5708 +<6007> <6009> 12629 +<600b> <600c> 12632 +<6010> <6011> 12634 +<6017> <6018> 12637 +<601e> <601f> 12640 +<6022> <6024> 12642 +<602c> <602e> 12645 +<6030> <6034> 12648 +<6036> <603a> 12653 +<603d> <603e> 12658 +<6044> <604a> 12661 +<604e> <604f> 12669 +<6053> <6054> 12672 +<6056> <6058> 12674 +<605b> <605c> 12677 +<605e> <6061> 12679 +<6065> <6066> 12683 +<6071> <6072> 12686 +<6074> <6075> 12688 +<6078> <6079> 5724 +<6080> <6082> 12692 +<6085> <6088> 12695 +<608a> <608b> 12699 +<608e> <6091> 12701 +<6097> <6099> 12707 +<60a1> <60a2> 12712 +<60a4> <60a5> 12714 +<60a9> <60aa> 12717 +<60b9> <60ba> 12723 +<60bd> <60c4> 12725 +<60c7> <60c9> 12733 +<60cc> <60d0> 12736 +<60d2> <60d4> 12741 +<60d6> <60d7> 12744 +<60e2> <60e5> 12749 +<60f7> <60f8> 12755 +<60fc> <60ff> 12757 +<6102> <6105> 12761 +<610a> <610c> 12766 +<6110> <6114> 12769 +<6116> <6119> 12774 +<611d> <611e> 12778 +<6121> <6122> 12780 +<6128> <612a> 12783 +<612c> <6133> 12786 +<6135> <6136> 12794 +<6138> <613d> 12796 +<6140> <6147> 12802 +<614f> <6150> 12812 +<6152> <6154> 12814 +<6156> <6157> 12817 +<615b> <615c> 12820 +<6160> <6161> 12823 +<6165> <6166> 12825 +<616c> <616d> 12828 +<6171> <6172> 12831 +<6178> <6181> 12834 +<6183> <6189> 12844 +<618c> <618d> 12851 +<6195> <6199> 12855 +<619b> <619c> 12860 +<619e> <61a3> 12862 +<61a5> <61a6> 12868 +<61af> <61b1> 12872 +<61b3> <61b5> 12875 +<61b8> <61bd> 12878 +<61bf> <61c1> 12884 +endcidrange + +100 begincidrange +<61c3> <61c6> 12887 +<61cd> <61d0> 12891 +<61d5> <61dd> 12896 +<61e0> <61e2> 12905 +<61e4> <61e5> 12908 +<61e9> <61f1> 12911 +<61f3> <61f4> 12920 +<6201> <6205> 12925 +<621c> <621e> 12933 +<6228> <6229> 12939 +<6235> <6236> 12945 +<6238> <623c> 12947 +<6244> <6246> 12953 +<6248> <6249> 6646 +<624f> <6250> 12957 +<6255> <6257> 12959 +<6259> <625a> 12962 +<625c> <6262> 12964 +<6264> <6265> 12971 +<6271> <6272> 12974 +<6274> <6275> 12976 +<6277> <6278> 12978 +<627a> <627b> 12980 +<6281> <6283> 12983 +<6285> <6288> 12986 +<628b> <6290> 12990 +<629c> <629e> 12998 +<62a6> <62a7> 13002 +<62a9> <62aa> 13004 +<62ad> <62b0> 13006 +<62b2> <62b4> 13010 +<62b6> <62b8> 13013 +<62c0> <62c1> 13018 +<62dd> <62de> 13025 +<62e0> <62e1> 13027 +<62ea> <62eb> 13030 +<62f8> <62fb> 13035 +<6303> <6306> 13040 +<630a> <630d> 13044 +<630f> <6310> 13048 +<6312> <6315> 13050 +<6317> <6319> 13054 +<6326> <6327> 13058 +<632c> <632e> 13061 +<6330> <6331> 13064 +<6333> <6338> 13066 +<633b> <633c> 13072 +<633f> <6341> 13074 +<6347> <6348> 13078 +<6351> <6354> 13081 +<6356> <635d> 13085 +<6364> <6366> 13094 +<636f> <6370> 13099 +<6373> <6375> 13101 +<6378> <6379> 13104 +<637c> <637f> 13106 +<6385> <6386> 13111 +<6393> <6395> 13116 +<6399> <639f> 13120 +<63b1> <63b2> 13132 +<63b5> <63b6> 13134 +<63c1> <63c3> 13140 +<63c7> <63c8> 13144 +<63ca> <63cc> 13146 +<63d3> <63d5> 13150 +<63d7> <63d9> 13153 +<63db> <63dd> 13156 +<63e4> <63e8> 13161 +<63eb> <63ec> 13166 +<63ef> <63f1> 13168 +<63f9> <63fc> 13174 +<6403> <6404> 13179 +<6406> <640a> 13181 +<6411> <6412> 13187 +<6415> <6416> 13189 +<6418> <641a> 13191 +<6422> <6425> 13196 +<6427> <6429> 13200 +<642e> <6433> 13204 +<6437> <6439> 13211 +<643b> <643c> 13214 +<6442> <6443> 13218 +<644b> <6450> 13221 +<6455> <6457> 13228 +<6459> <645b> 13231 +<6460> <6466> 13235 +<646a> <646c> 13243 +<6470> <6472> 13247 +<6474> <6475> 13250 +<6478> <6479> 2819 +<647c> <6481> 13253 +<6489> <6490> 13261 +<6497> <6498> 13270 +<649a> <649d> 13272 +<64a0> <64a2> 13276 +<64a6> <64a8> 13279 +<64b7> <64b8> 5354 +<64c8> <64c9> 13291 +<64d5> <64d6> 13297 +<64db> <64dd> 13300 +endcidrange + +100 begincidrange +<64e7> <64eb> 13307 +<64ed> <64ee> 13312 +<64f5> <64f6> 13315 +<64f8> <64f9> 13317 +<6501> <6503> 13321 +<6507> <6508> 13325 +<650a> <650e> 13327 +<6510> <6511> 13332 +<651e> <6521> 13339 +<6526> <6529> 13343 +<6530> <6533> 13348 +<653c> <653d> 13354 +<6540> <6544> 13356 +<6546> <6547> 13361 +<654a> <654b> 13363 +<654d> <654e> 13365 +<6552> <6554> 13368 +<655f> <6561> 13374 +<6564> <6565> 13377 +<6567> <656a> 13379 +<656d> <656f> 13383 +<6579> <6581> 13389 +<6584> <6586> 13398 +<6588> <658a> 13401 +<658d> <658f> 13404 +<659d> <659e> 13412 +<65a2> <65a3> 13415 +<65b1> <65b6> 13421 +<65ba> <65bb> 13428 +<65be> <65c0> 13430 +<65c7> <65ca> 13434 +<65d0> <65d1> 13439 +<65d3> <65d5> 13441 +<65d8> <65df> 13444 +<65e3> <65e4> 13453 +<65ea> <65eb> 13455 +<65ee> <65f0> 6410 +<65f2> <65f5> 13457 +<65f8> <65f9> 13461 +<65fb> <65ff> 13463 +<6604> <6605> 13469 +<6607> <6609> 13471 +<6610> <6612> 13476 +<6616> <6618> 13479 +<661a> <661c> 13482 +<6621> <6624> 13486 +<6629> <662c> 13491 +<6632> <6633> 13497 +<6637> <663b> 13499 +<663f> <6640> 13505 +<6644> <664a> 13507 +<664d> <664e> 13514 +<6650> <6651> 13516 +<6658> <6659> 13518 +<665b> <665c> 13520 +<6662> <6663> 13524 +<6669> <666d> 13528 +<6671> <6673> 13533 +<6678> <6679> 13537 +<667b> <667d> 13539 +<667f> <6681> 13542 +<6685> <6686> 13546 +<668a> <668b> 13548 +<668d> <6690> 13550 +<6692> <6695> 13554 +<6698> <669c> 13558 +<669e> <66a1> 13563 +<66a3> <66a6> 13567 +<66a9> <66aa> 13571 +<66ac> <66ad> 13573 +<66af> <66b3> 13575 +<66b5> <66b8> 13580 +<66ba> <66bd> 13584 +<66bf> <66c3> 13588 +<66ca> <66d5> 13595 +<66d7> <66d8> 13607 +<66db> <66dc> 6440 +<66de> <66df> 13610 +<66e1> <66e5> 13612 +<66e7> <66e8> 13617 +<66ea> <66eb> 13619 +<66ed> <66ef> 13621 +<66f5> <66f6> 13625 +<66fa> <66fb> 13627 +<6701> <6702> 13630 +<6704> <6707> 13632 +<670e> <670f> 13637 +<6711> <6713> 13639 +<6718> <671a> 13643 +<6720> <6725> 13648 +<6732> <6733> 13657 +<6736> <6739> 13659 +<673b> <673c> 13663 +<673e> <673f> 13665 +<6744> <6745> 13668 +<674a> <674b> 13671 +<6754> <6755> 13675 +<6757> <675b> 13677 +<6762> <6764> 13683 +<6766> <6767> 13686 +endcidrange + +100 begincidrange +<676b> <676c> 13688 +<6778> <677b> 13693 +<6782> <6783> 13699 +<6785> <6786> 13701 +<678c> <678f> 13705 +<6791> <6794> 13709 +<679f> <67a1> 13716 +<67b1> <67b2> 13724 +<67b9> <67c0> 13727 +<67c5> <67ce> 13736 +<67d5> <67d7> 13746 +<67e3> <67e4> 13752 +<67e6> <67e8> 13754 +<67ea> <67eb> 13757 +<67ed> <67ee> 13759 +<67f5> <67fc> 13762 +<6801> <6804> 13771 +<6814> <6815> 13779 +<6818> <681c> 13781 +<681e> <6820> 13786 +<6822> <6828> 13789 +<682b> <6831> 13796 +<6832> <6833> 6262 +<6834> <6836> 13803 +<683a> <683b> 13806 +<6856> <685f> 13814 +<6860> <6861> 6264 +<686c> <6873> 13825 +<6878> <6880> 13834 +<6887> <688e> 13845 +<6890> <6892> 13853 +<6894> <6896> 13856 +<6899> <689c> 13859 +<68a0> <68a1> 13864 +<68a3> <68a5> 13866 +<68a9> <68ac> 13869 +<68b1> <68b2> 13874 +<68b6> <68bf> 13877 +<68c3> <68c8> 13888 +<68ce> <68d1> 13896 +<68d3> <68d4> 13900 +<68db> <68de> 13903 +<68e1> <68e2> 13907 +<68e4> <68e6> 13909 +<68e8> <68ed> 13912 +<68f2> <68f4> 13919 +<68f6> <68f8> 13922 +<68fd> <68ff> 13926 +<6902> <6904> 13930 +<6906> <690a> 13933 +<6913> <691e> 13940 +<691f> <6920> 6290 +<6921> <6923> 13952 +<6925> <692c> 13955 +<692e> <692f> 13963 +<6931> <6933> 13965 +<6935> <6938> 13968 +<693a> <693c> 13972 +<6940> <6941> 13976 +<6943> <6949> 13978 +<694b> <6952> 13985 +<6955> <6956> 13993 +<6958> <6959> 13995 +<695b> <695c> 13997 +<6961> <6962> 14000 +<6964> <6965> 14002 +<6969> <696a> 14005 +<696f> <6970> 14008 +<6972> <6974> 14010 +<697a> <697b> 14014 +<697d> <697f> 14016 +<6987> <6988> 6312 +<698a> <698c> 14022 +<698e> <6993> 14025 +<6996> <6997> 14031 +<6999> <699a> 14033 +<699d> <69a6> 14035 +<69af> <69b0> 14047 +<69b2> <69b3> 14049 +<69b5> <69b6> 14051 +<69b8> <69ba> 14053 +<69bc> <69be> 14056 +<69c2> <69c9> 14060 +<69d1> <69d3> 14069 +<69d5> <69da> 14072 +<69dc> <69de> 14078 +<69e1> <69e6> 14081 +<69e8> <69ec> 14087 +<69ee> <69f1> 14092 +<69f4> <69fc> 14096 +<6a03> <6a04> 14107 +<6a06> <6a09> 14109 +<6a0b> <6a12> 14113 +<6a14> <6a16> 14121 +<6a17> <6a18> 6335 +<6a1a> <6a1d> 14124 +<6a24> <6a27> 14130 +<6a2b> <6a2e> 14135 +<6a32> <6a34> 14140 +<6a36> <6a37> 14143 +endcidrange + +100 begincidrange +<6a3b> <6a3c> 14145 +<6a3f> <6a43> 14147 +<6a45> <6a46> 14152 +<6a49> <6a4a> 14154 +<6a4c> <6a4f> 14156 +<6a51> <6a57> 14160 +<6a5c> <6a5e> 14168 +<6a63> <6a64> 14172 +<6a66> <6a70> 14174 +<6a72> <6a78> 14185 +<6a7a> <6a7b> 14192 +<6a7d> <6a7f> 14194 +<6a81> <6a83> 14197 +<6a85> <6a88> 14200 +<6a8a> <6a8d> 14204 +<6a92> <6a93> 14209 +<6a95> <6a96> 14211 +<6a98> <6a9b> 14213 +<6a9d> <6a9f> 14217 +<6aa4> <6aa8> 14221 +<6aad> <6aae> 14227 +<6ab0> <6ab2> 14229 +<6ab4> <6ab7> 14232 +<6ab9> <6aba> 14236 +<6abc> <6ac2> 14238 +<6ac4> <6ad2> 14245 +<6ad4> <6ad9> 14260 +<6ae0> <6ae6> 14267 +<6aed> <6af2> 14276 +<6af4> <6af7> 14282 +<6af9> <6afa> 14286 +<6afc> <6aff> 14288 +<6b00> <6b03> 14292 +<6b05> <6b09> 14296 +<6b0b> <6b0e> 14301 +<6b10> <6b11> 14305 +<6b13> <6b15> 14307 +<6b17> <6b1d> 14310 +<6b25> <6b26> 14318 +<6b28> <6b31> 14320 +<6b33> <6b36> 14330 +<6b3b> <6b3c> 14335 +<6b3f> <6b42> 14337 +<6b44> <6b45> 14341 +<6b4a> <6b4b> 14344 +<6b4d> <6b4f> 14346 +<6b51> <6b58> 14349 +<6b5a> <6b5e> 14357 +<6b68> <6b69> 14363 +<6b6b> <6b71> 14365 +<6b73> <6b76> 14372 +<6b7d> <6b80> 14377 +<6b81> <6b82> 6358 +<6b8e> <6b91> 14384 +<6b92> <6b93> 6362 +<6b94> <6b95> 14388 +<6b9a> <6b9b> 6365 +<6b9c> <6b9d> 14392 +<6b9f> <6ba0> 14394 +<6ba2> <6ba3> 14396 +<6ba5> <6ba9> 14398 +<6bac> <6bad> 14403 +<6bb0> <6bb1> 14405 +<6bb8> <6bb9> 14408 +<6bbc> <6bbe> 14410 +<6bc3> <6bc4> 14414 +<6bc7> <6bca> 14416 +<6bd0> <6bd1> 14422 +<6bdc> <6be0> 14426 +<6be2> <6be9> 14431 +<6bec> <6bee> 14439 +<6bf0> <6bf2> 14442 +<6bf6> <6bf8> 14446 +<6bfa> <6bfc> 14449 +<6c00> <6c04> 14453 +<6c09> <6c0b> 14458 +<6c18> <6c1a> 6494 +<6c1c> <6c1e> 14464 +<6c36> <6c37> 14472 +<6c39> <6c3c> 14474 +<6c3e> <6c3f> 14478 +<6c43> <6c45> 14480 +<6c4b> <6c4f> 14484 +<6c51> <6c53> 14489 +<6c58> <6c5a> 14493 +<6c62> <6c63> 14496 +<6c65> <6c67> 14498 +<6c68> <6c69> 5800 +<6c6b> <6c6f> 14501 +<6c77> <6c78> 14509 +<6c7a> <6c7c> 14511 +<6c7f> <6c80> 14514 +<6c8a> <6c8b> 14518 +<6c8d> <6c8e> 14520 +<6c91> <6c92> 14522 +<6c95> <6c98> 14524 +<6c9c> <6c9e> 14529 +<6caf> <6cb0> 14536 +<6cb4> <6cb7> 14538 +<6cc0> <6cc3> 14543 +endcidrange + +100 begincidrange +<6cc6> <6cc8> 14547 +<6ccd> <6ccf> 14551 +<6cd1> <6cd2> 14554 +<6cd8> <6cda> 14556 +<6cdc> <6cdd> 14559 +<6ce6> <6ce7> 14563 +<6cec> <6ced> 14566 +<6cf7> <6cf8> 5809 +<6d02> <6d03> 14573 +<6d05> <6d06> 14575 +<6d08> <6d0a> 14577 +<6d0f> <6d11> 14581 +<6d13> <6d16> 14584 +<6d1c> <6d1d> 14589 +<6d1f> <6d24> 14591 +<6d28> <6d29> 14598 +<6d2c> <6d2d> 14600 +<6d2f> <6d30> 14602 +<6d36> <6d38> 14605 +<6d3f> <6d40> 14609 +<6d55> <6d58> 14616 +<6d61> <6d62> 14623 +<6d64> <6d65> 14625 +<6d67> <6d68> 14627 +<6d6b> <6d6d> 14629 +<6d70> <6d73> 14632 +<6d75> <6d76> 14636 +<6d7a> <6d7b> 14638 +<6d7d> <6d81> 14640 +<6d83> <6d84> 14645 +<6d8a> <6d8b> 14648 +<6d8f> <6d90> 14651 +<6d93> <6d94> 5846 +<6d96> <6d9a> 14654 +<6dac> <6dad> 14662 +<6db0> <6db1> 14664 +<6db3> <6db4> 14666 +<6db6> <6db7> 14668 +<6db9> <6dbe> 14670 +<6dc1> <6dc3> 14676 +<6dc8> <6dca> 14679 +<6dcd> <6dd0> 14682 +<6dd2> <6dd5> 14686 +<6dda> <6ddc> 14691 +<6de2> <6de3> 14695 +<6de7> <6de9> 14698 +<6def> <6df0> 14702 +<6dfd> <6dff> 14707 +<6e00> <6e04> 14710 +<6e06> <6e09> 14715 +<6e12> <6e13> 14721 +<6e18> <6e19> 14724 +<6e1b> <6e1c> 14726 +<6e1e> <6e1f> 14728 +<6e27> <6e28> 14731 +<6e30> <6e31> 14735 +<6e35> <6e37> 14738 +<6e3b> <6e3d> 14742 +<6e3f> <6e42> 14745 +<6e45> <6e4c> 14749 +<6e4f> <6e52> 14757 +<6e53> <6e54> 5874 +<6e59> <6e5a> 14763 +<6e5c> <6e5d> 14765 +<6e60> <6e6a> 14767 +<6e6c> <6e6d> 14778 +<6e70> <6e7d> 14780 +<6e80> <6e82> 14794 +<6e87> <6e88> 14798 +<6e8a> <6e8e> 14800 +<6e91> <6e95> 14805 +<6e99> <6e9b> 14811 +<6ea0> <6ea1> 14815 +<6ea3> <6ea4> 14817 +<6ea8> <6ea9> 14820 +<6eab> <6eae> 14822 +<6eb8> <6eb9> 14829 +<6ebe> <6ec0> 14832 +<6ec8> <6eca> 14837 +<6ed8> <6ed9> 14844 +<6edb> <6edd> 14846 +<6eea> <6eeb> 14851 +<6eed> <6eee> 14853 +<6ef0> <6ef1> 14855 +<6ef5> <6ef6> 14858 +<6efa> <6efe> 14860 +<6f03> <6f05> 14866 +<6f07> <6f08> 14869 +<6f0a> <6f0e> 14871 +<6f10> <6f12> 14876 +<6f16> <6f19> 14879 +<6f1b> <6f1f> 14883 +<6f25> <6f28> 14889 +<6f34> <6f35> 14895 +<6f39> <6f3d> 14898 +<6f42> <6f45> 14904 +<6f46> <6f47> 5897 +<6f48> <6f4a> 14908 +<6f4e> <6f50> 14912 +<6f52> <6f53> 14915 +endcidrange + +100 begincidrange +<6f55> <6f57> 14917 +<6f5a> <6f5b> 14920 +<6f5f> <6f61> 14923 +<6f67> <6f6c> 14928 +<6f75> <6f76> 14936 +<6f7d> <6f7e> 14940 +<6f81> <6f83> 14942 +<6f8a> <6f8b> 14946 +<6f8f> <6f96> 14948 +<6f98> <6f9b> 14956 +<6f9d> <6f9f> 14960 +<6fa2> <6fa3> 14963 +<6fa5> <6fa6> 14965 +<6faa> <6fad> 14968 +<6faf> <6fb0> 14972 +<6fb4> <6fb5> 14975 +<6fb7> <6fb8> 14977 +<6fba> <6fbf> 14979 +<6fc4> <6fc8> 14985 +<6fca> <6fd0> 14990 +<6fd3> <6fd4> 14997 +<6fd6> <6fd7> 14999 +<6fd9> <6fda> 15001 +<6fdc> <6fdd> 15003 +<6fe2> <6fe3> 15005 +<6fe5> <6fea> 15007 +<6fec> <6fed> 15013 +<6ff2> <6ff9> 15015 +<7000> <7004> 15026 +<7007> <7008> 15031 +<700c> <700e> 15034 +<7012> <7014> 15038 +<7016> <7017> 15041 +<7021> <7022> 15046 +<7024> <7026> 15048 +<7029> <702f> 15051 +<7033> <7034> 15059 +<7036> <7038> 15061 +<703a> <703d> 15064 +<703f> <7042> 15068 +<7045> <704b> 15072 +<704d> <704e> 15079 +<7052> <7054> 15082 +<7056> <7057> 15085 +<7059> <705c> 15087 +<705f> <7062> 15091 +<7065> <7066> 15095 +<7068> <706a> 15097 +<7071> <7074> 15101 +<7079> <707b> 15106 +<7081> <7084> 15110 +<7086> <7088> 15114 +<708b> <708d> 15117 +<708f> <7091> 15120 +<7097> <7098> 15124 +<709a> <709b> 15126 +<709e> <70aa> 15128 +<70b4> <70b6> 15143 +<70be> <70bf> 15147 +<70c4> <70c7> 15149 +<70cb> <70ce> 15154 +<70d0> <70d7> 15158 +<70dc> <70de> 15167 +<70e0> <70e3> 15170 +<70f0> <70f3> 15177 +<70f5> <70f6> 15181 +<70fa> <70fc> 15184 +<70fe> <70ff> 15187 +<7100> <7108> 15189 +<710b> <710f> 15198 +<7111> <7112> 15203 +<711b> <7120> 15207 +<7122> <7125> 15213 +<7127> <712e> 15217 +<7132> <7135> 15225 +<7137> <7144> 15229 +<7146> <7148> 15243 +<714f> <7151> 15248 +<7153> <715b> 15251 +<715f> <7161> 15261 +<716a> <716b> 15266 +<716f> <7171> 15269 +<7174> <7177> 15272 +<717b> <717c> 15277 +<717e> <7183> 15279 +<7185> <7189> 15285 +<718b> <718e> 15290 +<7190> <7191> 15294 +<7195> <7196> 15297 +<719a> <719e> 15299 +<71a1> <71a7> 15304 +<71a9> <71ab> 15311 +<71ad> <71b0> 15314 +<71b6> <71b8> 15320 +<71ba> <71bd> 15323 +<71bf> <71c0> 15327 +<71c4> <71c7> 15330 +<71c9> <71cd> 15334 +<71cf> <71d1> 15339 +<71d6> <71d8> 15343 +endcidrange + +100 begincidrange +<71da> <71db> 15346 +<71dd> <71de> 15348 +<71e1> <71e4> 15350 +<71e8> <71ec> 15354 +<71ef> <71f3> 15359 +<71f5> <71f8> 15364 +<71fa> <71fb> 15368 +<7200> <7205> 15372 +<7207> <720c> 15378 +<720e> <720f> 15384 +<7211> <721a> 15386 +<721e> <7227> 15397 +<722d> <722f> 15409 +<7233> <7234> 15412 +<7240> <7246> 15415 +<7249> <724b> 15422 +<724e> <7251> 15425 +<7253> <7255> 15429 +<7263> <7265> 15437 +<726a> <726d> 15441 +<7270> <7271> 15445 +<7273> <7274> 15447 +<7276> <7278> 15449 +<727b> <727c> 15452 +<727e> <727f> 6471 +<7282> <7283> 15454 +<7285> <7289> 15456 +<7290> <7291> 15463 +<7293> <7295> 15465 +<7297> <729e> 15468 +<72a0> <72a1> 15476 +<72a3> <72a6> 15478 +<72a8> <72ab> 15482 +<72b1> <72b3> 15487 +<72b7> <72b8> 5618 +<72ba> <72bf> 15491 +<72c5> <72c7> 15497 +<72c9> <72cc> 15500 +<72d3> <72d6> 15506 +<72da> <72dd> 15511 +<72e2> <72e7> 15516 +<72ea> <72eb> 15522 +<72f5> <72f6> 15524 +<72fa> <72fb> 5634 +<72fe> <72ff> 15526 +<7304> <7309> 15530 +<730b> <730d> 15536 +<730f> <7312> 15539 +<7318> <731a> 15544 +<731f> <7320> 15547 +<7323> <7324> 15549 +<7326> <7328> 15551 +<732f> <7330> 15555 +<7332> <7333> 15557 +<733c> <733d> 15561 +<7342> <7343> 15564 +<7346> <734c> 15566 +<734e> <734f> 15573 +<7353> <7356> 15576 +<7358> <735f> 15580 +<7361> <7367> 15588 +<7373> <7374> 15598 +<7381> <7383> 15604 +<7385> <7386> 15607 +<738c> <738d> 15611 +<738f> <7390> 15613 +<7392> <7395> 15615 +<7397> <739a> 15619 +<739c> <739e> 15623 +<73a0> <73a1> 15626 +<73a3> <73a8> 15628 +<73ac> <73ad> 15635 +<73b4> <73b6> 15638 +<73b8> <73b9> 15641 +<73bc> <73bf> 15643 +<73c3> <73c7> 15648 +<73cb> <73cc> 15653 +<73d2> <73d8> 15656 +<73da> <73dd> 15663 +<73e1> <73e4> 15668 +<73ea> <73ec> 15674 +<73ee> <73f1> 15677 +<73f3> <73fd> 15681 +<7400> <7402> 15693 +<7407> <7408> 15697 +<740b> <740e> 15699 +<7411> <7419> 15703 +<741c> <7421> 15712 +<7423> <7424> 15718 +<7431> <7432> 15725 +<7437> <743b> 15727 +<743d> <743e> 15732 +<7442> <744a> 15735 +<744c> <7454> 15744 +<7460> <7462> 15756 +<7464> <7468> 15759 +<746b> <746c> 15764 +<746e> <746f> 15766 +<7471> <7475> 15768 +<7478> <747d> 15773 +endcidrange + +100 begincidrange +<7480> <7481> 6211 +<7484> <7486> 15781 +<748c> <748d> 15786 +<7491> <749b> 15789 +<749f> <74a2> 15801 +<74a4> <74a5> 15805 +<74a8> <74a9> 6216 +<74aa> <74af> 15807 +<74b1> <74b9> 15813 +<74bb> <74bc> 15822 +<74be> <74c9> 15824 +<74cb> <74ce> 15836 +<74d0> <74d1> 15840 +<74d5> <74d9> 15843 +<74e7> <74ed> 15853 +<74f0> <74f3> 15860 +<74f8> <74fe> 15865 +<7500> <7503> 15872 +<7505> <750b> 15876 +<7514> <7517> 15886 +<751d> <751e> 15891 +<7520> <7522> 15893 +<7526> <7527> 15897 +<753c> <753d> 15904 +<7541> <7544> 15907 +<7546> <7547> 15911 +<7549> <754a> 15913 +<7550> <7553> 15916 +<7555> <7558> 15920 +<755e> <7561> 15924 +<7563> <7564> 15928 +<7567> <7569> 15930 +<756c> <7571> 15933 +<757a> <757e> 15942 +<7580> <7582> 15947 +<7584> <7585> 15950 +<7588> <758a> 15952 +<758c> <758e> 15955 +<759b> <759c> 15962 +<75a6> <75aa> 15966 +<75b3> <75b4> 7015 +<75b6> <75b7> 15972 +<75ba> <75bb> 15974 +<75bf> <75c1> 15976 +<75cb> <75cc> 15980 +<75ce> <75d1> 15982 +<75dc> <75dd> 15989 +<75df> <75e1> 15991 +<75ec> <75ef> 15996 +<75f2> <75f3> 16000 +<75f5> <75f8> 16002 +<75fa> <75fb> 16006 +<75fd> <75fe> 16008 +<7606> <7609> 16011 +<760e> <760f> 16015 +<7611> <7614> 16017 +<761c> <761d> 16023 +<762e> <762f> 16028 +<7631> <7632> 16030 +<7636> <7637> 16032 +<7639> <763a> 16034 +<7644> <7645> 16038 +<7646> <7647> 9647 +<764a> <764b> 16041 +<764e> <7653> 16043 +<7659> <765b> 16051 +<7660> <7661> 16055 +<766d> <766e> 9652 +<7673> <7677> 16060 +<7679> <767a> 16065 +<767f> <7681> 16067 +<7689> <768a> 16072 +<768c> <768d> 16074 +<768f> <7690> 16076 +<7694> <7695> 16079 +<7697> <7698> 16081 +<769b> <76a3> 16083 +<76a5> <76ad> 16092 +<76af> <76b0> 16101 +<76b5> <76b7> 16104 +<76bb> <76be> 16108 +<76c0> <76c1> 16112 +<76c3> <76c4> 16114 +<76cb> <76cc> 16118 +<76d9> <76da> 16122 +<76dc> <76dd> 16124 +<76e8> <76ed> 16129 +<76f5> <76f7> 16137 +<76fa> <76fb> 16140 +<7702> <7703> 16145 +<7705> <7706> 16147 +<7707> <7708> 6748 +<770e> <7718> 16151 +<771b> <771e> 16162 +<7723> <7725> 16167 +<772a> <772c> 16171 +<7730> <7734> 16175 +<773d> <773f> 16182 +<7744> <7746> 16186 +<7748> <774e> 16189 +endcidrange + +100 begincidrange +<7750> <7751> 6757 +<7752> <7759> 16196 +<775c> <775d> 16204 +<775f> <7760> 16206 +<7769> <776a> 16210 +<776d> <7778> 16212 +<777a> <777c> 16224 +<7781> <7783> 16227 +<7786> <778b> 16230 +<778f> <7790> 16236 +<7793> <7797> 16238 +<7799> <779d> 16243 +<779f> <77a0> 6771 +<77a3> <77a4> 16249 +<77ae> <77af> 16254 +<77b1> <77b2> 16256 +<77b6> <77ba> 16259 +<77c0> <77c6> 16265 +<77c8> <77cc> 16272 +<77ce> <77d6> 16277 +<77d8> <77d9> 16286 +<77dd> <77e1> 16288 +<77f0> <77f2> 16297 +<77f4> <77f5> 16300 +<77f9> <77fc> 16303 +<7803> <7808> 16307 +<780a> <780b> 16313 +<780e> <7810> 16315 +<7817> <7818> 6694 +<781c> <781d> 6699 +<7820> <7822> 16323 +<782a> <782b> 16328 +<782e> <782f> 16330 +<7831> <7833> 16332 +<7835> <7836> 16335 +<7839> <783b> 6701 +<7841> <7842> 16339 +<7848> <784b> 16343 +<7853> <7854> 16350 +<7856> <7857> 6712 +<7858> <785c> 16352 +<785e> <7863> 16357 +<7865> <7867> 16363 +<7870> <7876> 16367 +<7878> <787b> 16374 +<787d> <7886> 16378 +<788a> <788b> 16389 +<788f> <7890> 16391 +<7894> <7896> 16394 +<789d> <789e> 16398 +<78aa> <78ac> 16405 +<78ae> <78af> 16408 +<78b5> <78b7> 16410 +<78bf> <78c0> 16415 +<78c2> <78c4> 16417 +<78c6> <78c8> 16420 +<78cc> <78cf> 16423 +<78d1> <78d3> 16427 +<78d6> <78d8> 16430 +<78db> <78e2> 16433 +<78e4> <78e6> 16441 +<78e9> <78eb> 16444 +<78ed> <78ee> 16447 +<78f0> <78f1> 16449 +<78f5> <78f6> 16452 +<78f8> <78f9> 16454 +<78fb> <78fc> 16456 +<78fe> <78ff> 16458 +<7902> <7904> 16461 +<7906> <790d> 16464 +<790f> <7912> 16472 +<7914> <7918> 16476 +<791a> <791d> 16481 +<791f> <7923> 16485 +<7927> <7929> 16491 +<792d> <7930> 16494 +<7932> <7933> 16498 +<7935> <7939> 16500 +<7942> <7945> 16507 +<794a> <7952> 16512 +<7954> <7955> 16521 +<7958> <7959> 16523 +<795b> <795c> 6652 +<7963> <7964> 16526 +<7969> <796c> 16529 +<7970> <7976> 16534 +<797b> <797f> 16542 +<7982> <7983> 16547 +<7986> <7989> 16549 +<798b> <798c> 16553 +<7990> <7999> 16555 +<799b> <79a5> 16565 +<79a8> <79a9> 16576 +<79ab> <79ad> 16578 +<79b4> <79b8> 16583 +<79c4> <79c5> 16591 +<79c7> <79c8> 16593 +<79ce> <79d0> 16597 +<79d3> <79d4> 16600 +<79d6> <79d7> 16602 +endcidrange + +100 begincidrange +<79d9> <79de> 16604 +<79e0> <79e2> 16610 +<79f1> <79f7> 16618 +<79f9> <79fa> 16625 +<79fe> <79ff> 16628 +<7a04> <7a05> 16631 +<7a07> <7a0a> 16633 +<7a0f> <7a13> 16638 +<7a15> <7a16> 16643 +<7a18> <7a19> 16645 +<7a1b> <7a1d> 16647 +<7a21> <7a22> 16651 +<7a24> <7a2d> 16653 +<7a2f> <7a30> 16663 +<7a34> <7a36> 16666 +<7a41> <7a45> 16672 +<7a47> <7a4b> 16677 +<7a4f> <7a50> 16682 +<7a52> <7a56> 16684 +<7a58> <7a60> 16689 +<7a63> <7a68> 16698 +<7a6c> <7a6f> 16705 +<7a71> <7a73> 16709 +<7a78> <7a79> 7066 +<7a7b> <7a7e> 16713 +<7a89> <7a8c> 16720 +<7a8e> <7a90> 16724 +<7a93> <7a94> 16727 +<7a99> <7a9b> 16729 +<7aa1> <7aa4> 16733 +<7aaf> <7ab2> 16739 +<7ab4> <7ab5> 16743 +<7ab7> <7ab9> 16745 +<7abb> <7abe> 16748 +<7ac0> <7ac3> 16752 +<7acc> <7ad5> 16758 +<7ad7> <7ad8> 16768 +<7ada> <7add> 16770 +<7ae1> <7ae2> 16774 +<7ae7> <7ae9> 16777 +<7aeb> <7aec> 16780 +<7af0> <7af5> 16783 +<7af7> <7af8> 16789 +<7afb> <7afc> 16791 +<7b00> <7b02> 16794 +<7b03> <7b04> 7270 +<7b0c> <7b0e> 16800 +<7b12> <7b13> 16804 +<7b16> <7b18> 16806 +<7b1c> <7b1d> 16810 +<7b21> <7b23> 16813 +<7b2f> <7b30> 16819 +<7b34> <7b37> 16822 +<7b3f> <7b44> 16829 +<7b4d> <7b4e> 16837 +<7b5e> <7b5f> 16844 +<7b63> <7b66> 16847 +<7b68> <7b6d> 16851 +<7b6f> <7b70> 16857 +<7b73> <7b74> 16859 +<7b7c> <7b7d> 16864 +<7b81> <7b84> 16867 +<7b86> <7b8a> 16871 +<7b8e> <7b8f> 16877 +<7b91> <7b93> 16879 +<7b98> <7b9b> 16883 +<7b9e> <7ba0> 16887 +<7ba3> <7ba5> 16890 +<7ba6> <7ba7> 7301 +<7bae> <7bb0> 16893 +<7bb2> <7bb3> 16896 +<7bb5> <7bb7> 16898 +<7bb9> <7bbf> 16901 +<7bc2> <7bc3> 16908 +<7bcd> <7bd0> 16913 +<7bd4> <7bd8> 16918 +<7bdb> <7bdc> 16923 +<7bde> <7be0> 16925 +<7be2> <7be3> 16928 +<7be5> <7be6> 7318 +<7be7> <7be8> 16930 +<7beb> <7bed> 16932 +<7bef> <7bf0> 16935 +<7bf4> <7bf6> 16938 +<7bf8> <7bfb> 16941 +<7c01> <7c06> 16947 +<7c08> <7c0a> 16953 +<7c10> <7c15> 16957 +<7c17> <7c1d> 16963 +<7c24> <7c25> 16972 +<7c28> <7c29> 16974 +<7c2c> <7c37> 16976 +<7c39> <7c3c> 16988 +<7c44> <7c4b> 16993 +<7c4e> <7c5b> 17001 +<7c5d> <7c5e> 17015 +<7c61> <7c63> 17017 +<7c65> <7c68> 17020 +<7c6f> <7c71> 17026 +<7c75> <7c7a> 17029 +endcidrange + +100 begincidrange +<7c7e> <7c88> 17035 +<7c8a> <7c90> 17046 +<7c93> <7c94> 17053 +<7c99> <7c9b> 17056 +<7ca0> <7ca1> 17059 +<7ca6> <7ca9> 17062 +<7cab> <7cad> 17066 +<7caf> <7cb0> 17069 +<7cb4> <7cb8> 17071 +<7cba> <7cbb> 17076 +<7cbc> <7cbd> 7378 +<7cbf> <7cc0> 17078 +<7cc2> <7cc4> 17080 +<7ccc> <7ccd> 7382 +<7cce> <7cd4> 17086 +<7cda> <7cdb> 17094 +<7ce1> <7ce6> 17096 +<7ce9> <7cee> 17102 +<7cfc> <7cfd> 17113 +<7d07> <7d08> 9246 +<7d0e> <7d0f> 17119 +<7d11> <7d12> 17121 +<7d1d> <7d1f> 17125 +<7d23> <7d26> 17128 +<7d28> <7d2a> 17132 +<7d2c> <7d2e> 17135 +<7d34> <7d38> 17138 +<7d3d> <7d3e> 17144 +<7d47> <7d4d> 17149 +<7d51> <7d5c> 17157 +<7d5f> <7d60> 17169 +<7d63> <7d65> 17171 +<7d69> <7d6d> 17175 +<7d6f> <7d70> 17180 +<7d74> <7d75> 17182 +<7d7a> <7d80> 17185 +<7d84> <7d85> 17193 +<7d8a> <7d8e> 17196 +<7d90> <7d92> 17201 +<7d94> <7d9b> 17204 +<7d9f> <7da1> 17213 +<7da4> <7da5> 17216 +<7da7> <7daa> 17218 +<7db5> <7db7> 17223 +<7dc0> <7dc3> 17227 +<7dc5> <7dc6> 17231 +<7dc8> <7dc9> 17233 +<7dcc> <7dd0> 17235 +<7dd5> <7dd6> 17241 +<7dda> <7ddc> 17243 +<7de4> <7de5> 17248 +<7dea> <7deb> 17251 +<7ded> <7dee> 17253 +<7df7> <7df8> 17258 +<7dfc> <7dff> 17261 +<7e00> <7e07> 17265 +<7e0c> <7e0f> 17273 +<7e12> <7e1a> 17277 +<7e20> <7e22> 17287 +<7e24> <7e26> 17290 +<7e28> <7e2a> 17293 +<7e2f> <7e30> 17297 +<7e3f> <7e40> 17303 +<7e42> <7e44> 17305 +<7e48> <7e51> 17308 +<7e56> <7e59> 17319 +<7e5b> <7e5d> 17323 +<7e5f> <7e61> 17326 +<7e63> <7e68> 17329 +<7e71> <7e72> 17336 +<7e74> <7e78> 17338 +<7e7a> <7e7b> 17343 +<7e7f> <7e81> 17345 +<7e83> <7e87> 17348 +<7e90> <7e92> 17356 +<7e99> <7e9a> 17361 +<7e9d> <7e9e> 17363 +<7ea8> <7ea9> 6103 +<7ebb> <7ebc> 17367 +<7ec0> <7ec2> 6108 +<7ecb> <7ecc> 6112 +<7ee0> <7ee1> 6118 +<7eee> <7eef> 6122 +<7ef1> <7ef2> 6124 +<7efa> <7efb> 6128 +<7f01> <7f03> 6131 +<7f07> <7f08> 6134 +<7f0b> <7f0c> 6136 +<7f11> <7f12> 6139 +<7f21> <7f27> 6146 +<7f2a> <7f2d> 6153 +<7f2f> <7f33> 6157 +<7f3b> <7f41> 17378 +<7f44> <7f45> 7264 +<7f46> <7f4b> 17386 +<7f52> <7f53> 17394 +<7f5b> <7f5e> 17398 +<7f63> <7f67> 17403 +<7f6b> <7f6d> 17408 +<7f75> <7f76> 17413 +endcidrange + +100 begincidrange +<7f7a> <7f7d> 17416 +<7f7f> <7f80> 17420 +<7f82> <7f84> 17422 +<7f8f> <7f93> 17429 +<7f95> <7f99> 17434 +<7f9b> <7f9c> 17439 +<7fa2> <7fa3> 17442 +<7faa> <7fae> 17446 +<7faf> <7fb0> 7367 +<7fb3> <7fb7> 17452 +<7fba> <7fbb> 17457 +<7fc2> <7fc4> 17461 +<7fc6> <7fc9> 17464 +<7fcf> <7fd1> 17470 +<7fd6> <7fd7> 17474 +<7fd9> <7fde> 17476 +<7fe2> <7fe4> 17482 +<7fe7> <7fe8> 17485 +<7fea> <7fed> 17487 +<7ff4> <7ff8> 17493 +<7ffd> <7fff> 17499 +<8007> <800a> 17503 +<800e> <800f> 17507 +<801a> <801b> 17511 +<801d> <801f> 17513 +<8023> <8024> 17517 +<8025> <8027> 7121 +<802f> <8030> 17521 +<8039> <803a> 17525 +<8040> <8041> 17529 +<8044> <8045> 17531 +<8047> <8049> 17533 +<804e> <8051> 17536 +<805b> <805d> 17544 +<805f> <8068> 17547 +<806b> <806e> 17557 +<807a> <807c> 17563 +<8081> <8082> 17566 +<808d> <8092> 17570 +<8094> <8095> 17576 +<80a6> <80a8> 17582 +<80b5> <80b6> 17588 +<80b8> <80b9> 17590 +<80c7> <80cb> 17594 +<80cf> <80d5> 17599 +<80df> <80e0> 17607 +<80e2> <80e3> 17609 +<80e7> <80ea> 6522 +<80fe> <80ff> 17617 +<8100> <8101> 17619 +<8103> <8104> 17621 +<8107> <8108> 17623 +<810b> <810c> 17625 +<810d> <810e> 6538 +<811c> <811d> 17630 +<811f> <812b> 17632 +<812d> <812e> 17645 +<8133> <8135> 17648 +<813a> <813d> 17652 +<813f> <8145> 17656 +<8157> <8158> 17668 +<8159> <815a> 6554 +<815b> <815f> 17670 +<8162> <8164> 17675 +<8172> <8173> 17682 +<8175> <8177> 17684 +<817c> <817d> 6559 +<8183> <8187> 17688 +<818b> <818e> 17694 +<8192> <8197> 17699 +<819e> <819f> 17706 +<81a1> <81a2> 17708 +<81a4> <81a5> 17710 +<81ab> <81b2> 17713 +<81b4> <81b9> 17721 +<81c4> <81c5> 17728 +<81c7> <81c8> 17730 +<81d0> <81d7> 17734 +<81db> <81de> 17743 +<81e1> <81e2> 17747 +<81e4> <81e6> 17749 +<81ee> <81f2> 17754 +<81f3> <81f4> 4544 +<81f5> <81f9> 17759 +<8201> <8202> 7334 +<820c> <820d> 3353 +<820e> <820f> 17768 +<8215> <821a> 17772 +<8221> <8223> 7339 +<8224> <8227> 17780 +<8233> <8234> 7348 +<823c> <823d> 17788 +<823f> <8243> 17790 +<8245> <8246> 17795 +<824c> <824e> 17799 +<8250> <8257> 17802 +<825b> <825e> 17810 +<8260> <8263> 17814 +<8269> <826a> 17820 +<826c> <826d> 17822 +endcidrange + +100 begincidrange +<8275> <8276> 17824 +<827b> <827c> 17827 +<8280> <8281> 17829 +<8285> <8287> 17832 +<8293> <8296> 17838 +<829a> <829b> 17842 +<82a2> <82a3> 17846 +<82b5> <82b6> 17850 +<82bf> <82c0> 17854 +<82c2> <82c3> 17856 +<82c5> <82c6> 17858 +<82cb> <82cc> 5110 +<82d9> <82da> 17863 +<82e8> <82ea> 17867 +<82ec> <82ee> 17870 +<82f2> <82f3> 17874 +<82f5> <82f6> 17876 +<82fc> <82ff> 17880 +<830a> <830b> 17885 +<8312> <8313> 17889 +<8314> <8315> 5137 +<8318> <8319> 17892 +<831d> <8326> 17894 +<8329> <832a> 17904 +<833d> <833f> 17911 +<8341> <8342> 17914 +<8344> <8345> 17916 +<834a> <834e> 17919 +<8355> <8359> 17925 +<835b> <835c> 5143 +<836d> <836e> 5170 +<8370> <8376> 17932 +<8379> <837a> 17939 +<837e> <8384> 17941 +<8387> <8388> 17948 +<838b> <838d> 17950 +<838f> <8391> 17953 +<8394> <8395> 17956 +<8399> <839a> 17959 +<83a3> <83a6> 17964 +<83ac> <83af> 17968 +<83b3> <83b4> 5174 +<83be> <83bf> 17974 +<83c2> <83c4> 17976 +<83c8> <83c9> 17980 +<83cd> <83ce> 17983 +<83d0> <83d3> 17985 +<83d9> <83db> 17991 +<83e2> <83e4> 17995 +<83e6> <83e8> 17998 +<83eb> <83ee> 18001 +<83f3> <83f7> 18005 +<83f8> <83f9> 5210 +<83fa> <83fc> 18010 +<83fe> <83ff> 18013 +<8408> <8409> 18018 +<8412> <8417> 18021 +<8419> <841b> 18027 +<841e> <8423> 18030 +<8424> <8425> 4238 +<8429> <842b> 18036 +<842d> <8430> 18039 +<8432> <8434> 18043 +<8436> <8437> 18046 +<8439> <843b> 18048 +<843e> <8445> 18051 +<8447> <8448> 18059 +<844a> <8450> 18061 +<8453> <8456> 18068 +<845d> <8460> 18073 +<8467> <8468> 18079 +<847b> <8481> 18087 +<8483> <8486> 18094 +<8487> <8488> 5223 +<848f> <8492> 18100 +<8495> <8496> 18104 +<849a> <849b> 18107 +<849d> <84a0> 18109 +<84a2> <84ae> 18113 +<84b0> <84b1> 18126 +<84b5> <84b7> 18129 +<84c2> <84c3> 18134 +<84c5> <84c8> 18136 +<84ce> <84cf> 18141 +<84d4> <84d5> 18144 +<84d7> <84dc> 18146 +<84e1> <84e2> 18153 +<84e7> <84eb> 18156 +<84f1> <84fb> 18162 +<8500> <850b> 18174 +<850d> <8510> 18186 +<8515> <8516> 18191 +<8518> <8519> 18193 +<851b> <851d> 18195 +<8524> <8525> 18200 +<8527> <852a> 18202 +<852e> <8536> 18206 +<853e> <8540> 18215 +<8544> <8545> 18219 +<854b> <854d> 18222 +endcidrange + +100 begincidrange +<854f> <8551> 18225 +<855a> <855d> 18230 +<855f> <8561> 18234 +<8565> <8567> 18238 +<856b> <856c> 18241 +<856e> <8571> 18243 +<8575> <8576> 18248 +<857c> <857d> 18251 +<857f> <8583> 18253 +<858d> <858e> 18261 +<8592> <8593> 18264 +<8595> <859a> 18266 +<859d> <859e> 18272 +<85a0> <85a3> 18274 +<85ab> <85ad> 18280 +<85b1> <85b6> 18283 +<85bb> <85c0> 18290 +<85c2> <85c8> 18296 +<85ca> <85cc> 18303 +<85d1> <85d2> 18306 +<85d6> <85db> 18309 +<85de> <85e3> 18315 +<85e6> <85e8> 18321 +<85eb> <85f3> 18324 +<85f7> <85f8> 18334 +<85fc> <85fe> 18336 +<8600> <8603> 18339 +<8608> <860a> 18343 +<860c> <8610> 18346 +<8612> <8615> 18351 +<8617> <8619> 18355 +<861b> <861d> 18358 +<861f> <8621> 18361 +<8623> <8626> 18364 +<862a> <862c> 18369 +<862e> <8637> 18372 +<863d> <863e> 18384 +<8640> <864c> 18386 +<8652> <8653> 18399 +<8656> <8659> 18401 +<8660> <8661> 18407 +<8663> <8666> 18409 +<8668> <866a> 18413 +<866f> <8670> 18417 +<8672> <8678> 18419 +<8683> <8689> 18426 +<868e> <8692> 18433 +<8696> <869b> 18439 +<869e> <86a2> 18445 +<86a5> <86a6> 18450 +<86ad> <86ae> 18453 +<86b2> <86b3> 18455 +<86b7> <86b9> 18457 +<86bb> <86bf> 18460 +<86c1> <86c3> 18465 +<86cc> <86cd> 18470 +<86d2> <86d3> 18472 +<86d5> <86d7> 18474 +<86dc> <86dd> 18478 +<86e0> <86e3> 18480 +<86e5> <86e8> 18484 +<86ea> <86ec> 18488 +<86f1> <86f2> 7182 +<86f5> <86f7> 18492 +<86fb> <86fd> 18495 +<8704> <8705> 18500 +<870b> <870c> 18502 +<870e> <8711> 18504 +<871f> <8720> 18513 +<8726> <8728> 18516 +<872a> <872d> 18519 +<872f> <8730> 18523 +<8732> <8733> 18525 +<8735> <8736> 18527 +<8738> <873a> 18529 +<873c> <873d> 18532 +<8740> <8746> 18534 +<874a> <874b> 18541 +<874f> <8752> 18544 +<875a> <875f> 18551 +<8761> <8762> 18557 +<8767> <876d> 18559 +<8771> <8773> 18567 +<8779> <877a> 18572 +<877d> <877e> 7215 +<877f> <8781> 18574 +<8786> <8787> 18577 +<8789> <878a> 18579 +<878e> <8792> 18582 +<8794> <8796> 18587 +<8798> <879d> 18590 +<87a0> <87a1> 18596 +<87a3> <87a7> 18598 +<87a9> <87aa> 18603 +<87b0> <87b2> 18606 +<87b6> <87b9> 18610 +<87be> <87bf> 18615 +<87c1> <87c3> 18617 +<87cc> <87cd> 18623 +<87cf> <87d0> 18625 +endcidrange + +100 begincidrange +<87d4> <87da> 18627 +<87dc> <87df> 18634 +<87e1> <87e2> 18638 +<87e6> <87e9> 18641 +<87f0> <87f1> 18647 +<87f3> <87f5> 18649 +<87f7> <87f8> 18652 +<87fc> <87fd> 18655 +<8800> <8802> 18658 +<8807> <8809> 18662 +<880b> <880f> 18665 +<8817> <881a> 18672 +<881c> <881e> 18676 +<8824> <8830> 18680 +<8833> <8835> 18693 +<8837> <8838> 18696 +<883d> <883f> 18699 +<8841> <8843> 18702 +<8847> <8849> 18705 +<884e> <8852> 18709 +<8855> <8856> 18714 +<885e> <8860> 18719 +<8866> <8867> 18722 +<8873> <8876> 18728 +<887a> <887c> 18733 +<8886> <8887> 18738 +<8889> <888a> 18740 +<888e> <8891> 18743 +<8893> <8895> 18747 +<8897> <889b> 18750 +<889d> <88a1> 18755 +<88a5> <88aa> 18761 +<88ae> <88b0> 18768 +<88b2> <88b6> 18771 +<88b8> <88bb> 18776 +<88bd> <88c0> 18780 +<88c3> <88c4> 18784 +<88c7> <88c8> 18786 +<88cb> <88cd> 18788 +<88d0> <88d1> 18791 +<88d6> <88d7> 18794 +<88da> <88db> 18796 +<88e0> <88e1> 18799 +<88e6> <88e7> 18801 +<88e9> <88ef> 18803 +<88f5> <88f7> 18811 +<88fa> <88fb> 18814 +<8900> <8901> 18817 +<8903> <8906> 18819 +<8908> <8909> 18823 +<890b> <890f> 18825 +<8914> <8918> 18831 +<891c> <8920> 18836 +<8922> <8924> 18841 +<8926> <8929> 18844 +<892c> <892f> 18848 +<8939> <893a> 18855 +<893c> <8940> 18857 +<8942> <8943> 18862 +<8945> <8946> 18864 +<8948> <8955> 18866 +<8957> <895c> 18880 +<8961> <8963> 18886 +<8967> <8969> 18890 +<896d> <896e> 18894 +<8970> <8971> 18896 +<8973> <897a> 18898 +<897c> <897e> 18906 +<8984> <8985> 18911 +<8987> <898a> 18913 +<898c> <898e> 18917 +<8990> <8992> 18920 +<8994> <8995> 18923 +<8999> <89a0> 18926 +<89a2> <89a5> 18934 +<89a7> <89a9> 18938 +<89ad> <89ae> 18942 +<89b0> <89b1> 18944 +<89b3> <89b6> 18946 +<89b8> <89b9> 18950 +<89bb> <89bc> 18952 +<89ca> <89cc> 6459 +<89ce> <89d1> 6462 +<89d3> <89d5> 18957 +<89d7> <89d9> 18960 +<89df> <89e2> 18965 +<89e7> <89ea> 18970 +<89ec> <89ee> 18974 +<89f0> <89f2> 18977 +<89f9> <89ff> 18982 +<8a04> <8a06> 18989 +<8a11> <8a12> 18996 +<8a19> <8a1a> 19000 +<8a20> <8a22> 19004 +<8a26> <8a29> 19008 +<8a2b> <8a2c> 19012 +<8a2e> <8a30> 19014 +<8a32> <8a33> 19017 +<8a37> <8a39> 19020 +<8a3b> <8a3d> 19023 +endcidrange + +100 begincidrange +<8a3f> <8a40> 19026 +<8a42> <8a45> 19028 +<8a49> <8a4d> 19033 +<8a56> <8a57> 19041 +<8a59> <8a5a> 19043 +<8a5c> <8a5d> 19045 +<8a5f> <8a60> 19047 +<8a64> <8a65> 19049 +<8a67> <8a68> 19051 +<8a76> <8a78> 19056 +<8a7a> <8a7b> 19059 +<8a7d> <8a7e> 19061 +<8a80> <8a83> 19063 +<8a8b> <8a8c> 19068 +<8a8e> <8a90> 19070 +<8a91> <8a92> 8953 +<8a96> <8a97> 19074 +<8a9b> <8a9d> 19077 +<8aa9> <8aab> 19083 +<8aad> <8aaf> 19086 +<8ab3> <8ab5> 19090 +<8ab7> <8ab8> 19093 +<8aba> <8abb> 19095 +<8abd> <8abe> 19097 +<8ac0> <8ac1> 19099 +<8ac5> <8ac6> 19102 +<8ad3> <8ad5> 19109 +<8ad8> <8ada> 19112 +<8adf> <8ae1> 19116 +<8ae8> <8aea> 19121 +<8aef> <8af0> 19125 +<8af4> <8af5> 19128 +<8b08> <8b09> 19136 +<8b0b> <8b0d> 19138 +<8b11> <8b13> 19142 +<8b1e> <8b20> 19148 +<8b22> <8b25> 19151 +<8b29> <8b2a> 19156 +<8b2e> <8b32> 19158 +<8b34> <8b38> 19163 +<8b3a> <8b3d> 19168 +<8b3f> <8b48> 19172 +<8b4a> <8b4d> 19182 +<8b50> <8b55> 19186 +<8b5d> <8b65> 19194 +<8b67> <8b6a> 19203 +<8b6d> <8b6e> 19207 +<8b71> <8b73> 19209 +<8b75> <8b76> 19212 +<8b78> <8b7c> 19214 +<8b7e> <8b7f> 19219 +<8b81> <8b89> 19221 +<8b8b> <8b8d> 19230 +<8b8f> <8b91> 19233 +<8b97> <8b9b> 19237 +<8ba6> <8ba7> 4888 +<8bb4> <8bb5> 4891 +<8bc2> <8bc3> 4894 +<8bd2> <8bd4> 4899 +<8bd8> <8bd9> 4903 +<8bdf> <8be0> 4906 +<8be8> <8be9> 4909 +<8c11> <8c12> 4924 +<8c14> <8c16> 4926 +<8c1f> <8c21> 4933 +<8c2a> <8c2b> 4938 +<8c2e> <8c2f> 4940 +<8c32> <8c33> 4942 +<8c35> <8c36> 4944 +<8c38> <8c40> 19252 +<8c42> <8c45> 19261 +<8c4a> <8c4b> 19265 +<8c4d> <8c4f> 19267 +<8c51> <8c54> 19270 +<8c56> <8c59> 19274 +<8c5b> <8c60> 19278 +<8c63> <8c69> 19284 +<8c6c> <8c72> 19291 +<8c74> <8c77> 19298 +<8c7b> <8c81> 19302 +<8c83> <8c84> 19309 +<8c86> <8c88> 19311 +<8c8d> <8c93> 19315 +<8c95> <8c97> 19322 +<8c99> <8c9c> 19325 +<8ca3> <8ca6> 19330 +<8cad> <8cae> 19334 +<8ccb> <8cd0> 19342 +<8cd6> <8cd9> 19349 +<8ce8> <8ce9> 19357 +<8cee> <8cf3> 19359 +<8cf5> <8cf9> 19365 +<8d00> <8d03> 19371 +<8d06> <8d07> 19375 +<8d11> <8d15> 19380 +<8d17> <8d1a> 19385 +<8d32> <8d33> 6444 +<8d45> <8d46> 6450 +<8d48> <8d49> 6452 +<8d51> <8d52> 19390 +endcidrange + +100 begincidrange +<8d68> <8d6a> 19395 +<8d6e> <8d6f> 19399 +<8d71> <8d72> 19401 +<8d78> <8d80> 19403 +<8d82> <8d83> 19412 +<8d86> <8d89> 19414 +<8d8c> <8d90> 19418 +<8d92> <8d93> 19423 +<8d96> <8d98> 19425 +<8d9a> <8d9e> 19428 +<8da0> <8da2> 19433 +<8da4> <8da7> 19436 +<8da9> <8db0> 19440 +<8db6> <8db7> 19448 +<8dc0> <8dc2> 19453 +<8dc7> <8dca> 19457 +<8dce> <8dcf> 7461 +<8dd2> <8dd5> 19463 +<8dd6> <8dd7> 7457 +<8dd8> <8dd9> 19467 +<8de0> <8de2> 19470 +<8de5> <8de7> 19473 +<8ded> <8dee> 19477 +<8df0> <8df2> 19479 +<8df7> <8df8> 7466 +<8dfe> <8dff> 19485 +<8e00> <8e04> 19487 +<8e06> <8e08> 19492 +<8e0d> <8e0e> 19496 +<8e11> <8e13> 19498 +<8e15> <8e1c> 19501 +<8e20> <8e21> 19509 +<8e24> <8e28> 19511 +<8e32> <8e33> 19519 +<8e36> <8e38> 19521 +<8e3b> <8e3c> 19524 +<8e3e> <8e3f> 19526 +<8e41> <8e42> 7488 +<8e45> <8e46> 19529 +<8e4d> <8e50> 19531 +<8e51> <8e52> 7490 +<8e53> <8e54> 19535 +<8e56> <8e58> 19537 +<8e5a> <8e62> 19540 +<8e64> <8e65> 19549 +<8e67> <8e68> 19551 +<8e6a> <8e6b> 19553 +<8e77> <8e79> 19559 +<8e7d> <8e7e> 19563 +<8e82> <8e84> 19566 +<8e95> <8e99> 19573 +<8e9f> <8ea0> 19580 +<8ea2> <8ea4> 19582 +<8ea7> <8ea9> 19585 +<8ead> <8eae> 19588 +<8eb0> <8eb1> 19590 +<8eb3> <8eb9> 19592 +<8ebb> <8ebf> 19599 +<8ec1> <8ec9> 19604 +<8ecf> <8ed1> 19613 +<8ed5> <8eda> 19617 +<8edc> <8ede> 19623 +<8ee0> <8ee3> 19626 +<8ee5> <8eea> 19630 +<8eec> <8ef1> 19636 +<8ef3> <8ef7> 19642 +<8f00> <8f02> 19649 +<8f0b> <8f11> 19655 +<8f16> <8f1a> 19663 +<8f1e> <8f1f> 9373 +<8f20> <8f24> 19668 +<8f27> <8f28> 19673 +<8f2b> <8f2e> 19675 +<8f30> <8f32> 19679 +<8f34> <8f37> 19682 +<8f39> <8f3a> 19686 +<8f3c> <8f3d> 19688 +<8f40> <8f41> 19690 +<8f47> <8f48> 19693 +<8f4a> <8f4c> 19695 +<8f4f> <8f53> 19698 +<8f55> <8f5e> 19703 +<8f71> <8f73> 6371 +<8f75> <8f76> 6374 +<8f79> <8f7a> 6378 +<8f81> <8f82> 6382 +<8f8d> <8f8f> 6387 +<8fa0> <8fa2> 19721 +<8fa4> <8fa5> 19724 +<8fa8> <8fa9> 1103 +<8fb3> <8fb5> 19729 +<8fb7> <8fb8> 19732 +<8fba> <8fbc> 19734 +<8fbf> <8fc0> 19737 +<8fc9> <8fcd> 19741 +<8fd6> <8fd7> 19748 +<8fe0> <8fe1> 19751 +<8ff1> <8ff2> 19757 +<8ff5> <8ff6> 19759 +<8ffa> <8ffc> 19761 +endcidrange + +100 begincidrange +<8ffe> <8fff> 19764 +<9007> <9008> 19766 +<9024> <9025> 19773 +<9027> <902c> 19775 +<9030> <9031> 19781 +<9033> <9034> 19783 +<9035> <9036> 5967 +<9039> <903a> 19786 +<903f> <9040> 19789 +<9045> <9046> 19792 +<9048> <904a> 19794 +<9051> <9052> 5972 +<9059> <905a> 19799 +<9066> <9067> 19805 +<906a> <906c> 19807 +<906f> <9071> 19810 +<9085> <9086> 19818 +<908c> <908e> 19821 +<909e> <90a0> 19830 +<90a4> <90a5> 19833 +<90a7> <90a9> 19835 +<90bc> <90bd> 19842 +<90bf> <90c0> 19844 +<90c2> <90c3> 19846 +<90c8> <90c9> 19849 +<90cb> <90cd> 19851 +<90d4> <90d6> 19855 +<90d8> <90da> 19858 +<90e3> <90e5> 19863 +<90e9> <90ea> 19866 +<90f0> <90f3> 19870 +<90f6> <90f7> 19874 +<90f9> <90fc> 19876 +<9100> <9101> 19881 +<9107> <9108> 19885 +<910a> <9111> 19887 +<9117> <9118> 19897 +<911a> <911d> 19899 +<911f> <9121> 19903 +<9124> <9126> 19906 +<9128> <912c> 19909 +<9137> <9138> 19917 +<913b> <9142> 19919 +<9144> <9145> 19927 +<914e> <914f> 7418 +<9153> <9156> 19931 +<9158> <9159> 19935 +<915b> <915c> 19937 +<915f> <9160> 19939 +<9166> <9168> 19941 +<917a> <917c> 19947 +<917d> <917e> 7426 +<9180> <9184> 19950 +<918e> <918f> 19958 +<9193> <9195> 19960 +<9197> <9199> 19963 +<919d> <91a1> 19966 +<91a2> <91a3> 7436 +<91a4> <91a9> 19971 +<91ad> <91af> 7439 +<91b0> <91b3> 19977 +<91b6> <91b9> 19981 +<91bb> <91bf> 19985 +<91d2> <91d4> 9459 +<91da> <91db> 19996 +<91de> <91e2> 19998 +<91e5> <91e6> 20003 +<91ea> <91f4> 20006 +<91fb> <91ff> 20019 +<9202> <9203> 20024 +<9205> <9207> 20026 +<920a> <920c> 20029 +<9212> <9213> 20033 +<9216> <921d> 20035 +<921f> <9222> 20043 +<9228> <922d> 20048 +<9231> <9232> 20055 +<9235> <9236> 20057 +<923b> <923c> 20059 +<9241> <9244> 20061 +<9246> <9247> 20065 +<924a> <924c> 20067 +<924e> <9250> 20070 +<9252> <9254> 20073 +<9258> <9259> 20077 +<925c> <925d> 20079 +<925f> <9261> 20081 +<9263> <9265> 20084 +<9267> <926b> 20087 +<926c> <926d> 9489 +<926e> <9273> 20092 +<9275> <9277> 20098 +<927c> <927e> 20102 +<9281> <9282> 20105 +<9286> <928d> 20108 +<928f> <9290> 20116 +<9294> <9295> 20119 +<929d> <929f> 20124 +<92a1> <92a2> 20127 +<92af> <92b0> 20132 +endcidrange + +100 begincidrange +<92b2> <92b6> 20134 +<92bd> <92c0> 20141 +<92c9> <92cb> 20148 +<92cd> <92ce> 20151 +<92d0> <92d1> 20153 +<92d3> <92dc> 20155 +<92e0> <92e2> 20166 +<92eb> <92ec> 20171 +<92f2> <92f5> 20173 +<92f9> <92fb> 20178 +<92fd> <92ff> 20181 +<9302> <9305> 20185 +<9307> <9308> 9551 +<9309> <930f> 20189 +<9313> <9314> 20197 +<9316> <9317> 20199 +<931c> <931e> 20201 +<9323> <9325> 20205 +<9329> <932a> 20209 +<932c> <932d> 20211 +<9330> <9331> 20213 +<9334> <9335> 20215 +<9339> <933d> 20218 +<9344> <9345> 20225 +<9348> <934a> 20227 +<934e> <9353> 20231 +<9355> <9357> 20237 +<9359> <935a> 20240 +<935c> <9363> 20242 +<9366> <9368> 20250 +<936d> <936f> 20254 +<9371> <9374> 20257 +<9377> <9379> 20261 +<937b> <937d> 20264 +<937f> <9381> 20267 +<9385> <9386> 20271 +<9388> <9389> 20273 +<938b> <938e> 20275 +<9390> <9395> 20279 +<9399> <93a1> 20286 +<93a4> <93a5> 20295 +<93b1> <93b2> 20301 +<93b6> <93b7> 20304 +<93b9> <93be> 20306 +<93c0> <93c2> 20312 +<93c4> <93c6> 20315 +<93ce> <93d0> 20320 +<93d2> <93d5> 20323 +<93d9> <93db> 20327 +<93dc> <93dd> 9576 +<93e5> <93e7> 20332 +<93e9> <93f4> 20335 +<93fa> <93ff> 20349 +<9400> <9402> 20355 +<9404> <940a> 20358 +<940c> <940f> 20365 +<9415> <9417> 20370 +<941a> <941c> 20373 +<941e> <941f> 20376 +<9421> <9425> 20378 +<9426> <9427> 9537 +<9429> <942d> 20383 +<942f> <9431> 20388 +<9436> <9437> 20392 +<943b> <943d> 20395 +<9440> <9443> 20398 +<9445> <9449> 20402 +<944d> <9451> 20408 +<9455> <945f> 20414 +<9461> <9462> 20425 +<9466> <946a> 20428 +<946e> <946f> 20434 +<9473> <9476> 20437 +<947a> <947b> 20442 +<9480> <9484> 20444 +<9485> <9487> 6798 +<948c> <948d> 6803 +<948f> <9490> 6805 +<949a> <949c> 6810 +<94a3> <94a4> 6813 +<94af> <94b0> 6819 +<94b6> <94ba> 6823 +<94bc> <94bd> 6828 +<94c8> <94ce> 6832 +<94d0> <94d2> 6839 +<94d3> <94d4> 20454 +<94d5> <94d7> 6842 +<94de> <94e0> 6848 +<94e4> <94e5> 6852 +<94e7> <94e8> 6854 +<94ee> <94ef> 6859 +<94f3> <94f5> 6861 +<94fc> <94fd> 6866 +<9506> <9507> 6871 +<9509> <950a> 6873 +<950d> <950f> 6875 +<9512> <9516> 6878 +<951d> <951f> 6885 +<952a> <952b> 6889 +<9531> <9532> 6893 +endcidrange + +100 begincidrange +<9536> <9538> 6896 +<953e> <953f> 6900 +<9544> <9546> 6904 +<954e> <954f> 6909 +<9552> <9554> 6911 +<9556> <9559> 6914 +<955e> <955f> 6919 +<9561> <9562> 6922 +<9564> <956c> 6924 +<9571> <9573> 6934 +<9574> <9575> 20471 +<9578> <957e> 20473 +<9584> <9585> 20481 +<9587> <9588> 20483 +<9595> <9597> 20489 +<9599> <95a0> 20492 +<95a6> <95a7> 20501 +<95ae> <95b1> 20504 +<95b3> <95b5> 20508 +<95b7> <95b8> 20511 +<95c0> <95c2> 20514 +<95c4> <95c5> 20517 +<95cd> <95cf> 20521 +<95d1> <95d3> 20524 +<95d7> <95db> 20527 +<95df> <95e0> 20533 +<95e3> <95e4> 20535 +<95e6> <95e7> 20537 +<95f5> <95f6> 5769 +<9603> <9604> 5773 +<960a> <960d> 5777 +<9615> <9617> 5783 +<9619> <961a> 5786 +<9623> <9629> 20547 +<962b> <962d> 20554 +<962f> <9630> 20557 +<9637> <963a> 20559 +<964e> <964f> 20567 +<9651> <9653> 20569 +<9656> <9657> 20572 +<9659> <965a> 20574 +<9665> <9666> 20579 +<966d> <966f> 20582 +<9679> <967c> 20586 +<967e> <9684> 20590 +<9691> <9693> 20600 +<969d> <96a6> 20605 +<96ab> <96af> 20616 +<96bc> <96bd> 7546 +<96c2> <96c3> 20626 +<96ca> <96cb> 20629 +<96d0> <96d1> 20631 +<96d3> <96d4> 20633 +<96d7> <96d8> 20635 +<96dd> <96df> 20638 +<96e4> <96e7> 20642 +<96eb> <96ee> 20646 +<96f0> <96f1> 20650 +<96f4> <96f5> 20652 +<96fc> <96fd> 20656 +<9702> <9703> 20659 +<970a> <970c> 20662 +<9710> <9712> 20665 +<9714> <9715> 20668 +<9717> <971b> 20670 +<971f> <9726> 20676 +<9728> <9729> 20684 +<972b> <972c> 20686 +<972e> <972f> 20688 +<9733> <9737> 20691 +<973a> <973c> 20696 +<973f> <9741> 20699 +<9745> <9747> 20703 +<9749> <9751> 20706 +<9754> <9755> 20715 +<9757> <9758> 20717 +<975c> <975d> 20719 +<9763> <9764> 20722 +<9766> <9767> 20724 +<976a> <9772> 20726 +<9777> <977b> 20736 +<977d> <9784> 20741 +<9786> <978a> 20749 +<9791> <9792> 7626 +<9795> <9797> 20758 +<9799> <979f> 20761 +<97a1> <97a2> 20768 +<97a4> <97a5> 20770 +<97a7> <97aa> 20772 +<97b0> <97b1> 20778 +<97b5> <97bc> 20781 +<97be> <97c2> 20789 +<97c4> <97c5> 20794 +<97c7> <97c8> 20796 +<97cd> <97d2> 20799 +<97d4> <97d8> 20805 +<97da> <97db> 20810 +<97df> <97e5> 20813 +<97ea> <97ec> 6222 +<97ee> <97f2> 20821 +endcidrange + +100 begincidrange +<97f7> <97fe> 20827 +<980e> <980f> 9670 +<9814> <9816> 20840 +<9819> <981b> 20843 +<981d> <9820> 20846 +<9822> <9823> 20850 +<9827> <982c> 20853 +<982e> <982f> 20859 +<9831> <9836> 20861 +<9839> <983a> 20867 +<983e> <9845> 20870 +<9847> <984b> 20878 +<984f> <9852> 20883 +<9855> <9857> 20887 +<985c> <985d> 20891 +<985f> <9861> 20893 +<9863> <9864> 20896 +<9868> <986a> 20899 +<986d> <986e> 20902 +<988c> <988d> 7140 +<989a> <989b> 7144 +<989e> <989f> 7146 +<98a1> <98a2> 7148 +<98a5> <98a6> 7150 +<98a9> <98ad> 20911 +<98ae> <98af> 9420 +<98b4> <98b5> 20918 +<98b7> <98bb> 20920 +<98bd> <98c3> 20925 +<98c9> <98cd> 20934 +<98cf> <98d0> 20939 +<98d1> <98d3> 6583 +<98d6> <98d7> 20942 +<98d9> <98da> 6587 +<98dc> <98dd> 20944 +<98e3> <98e6> 20947 +<98ea> <98eb> 9119 +<98f0> <98f1> 20953 +<98f5> <98fb> 20956 +<9900> <9902> 20964 +<9906> <9908> 20968 +<990e> <990f> 20972 +<9914> <9917> 20974 +<9919> <991a> 20978 +<991c> <991d> 20980 +<991f> <9920> 20982 +<9922> <9927> 20984 +<9929> <992d> 20990 +<992f> <9932> 20995 +<9934> <9936> 20999 +<9938> <993b> 21002 +<9940> <9942> 21007 +<9946> <9947> 21011 +<9948> <994a> 9129 +<994d> <9950> 21013 +<9958> <995b> 21019 +<995f> <9961> 21024 +<9967> <996c> 5662 +<9978> <9979> 21030 +<9982> <9983> 21034 +<9990> <9991> 5676 +<9993> <9995> 5678 +<999a> <99a4> 21039 +<99a6> <99a7> 21050 +<99a9> <99ab> 21052 +<99af> <99b0> 21055 +<99b5> <99c0> 21058 +<99c2> <99cf> 21070 +<99d6> <99d7> 21085 +<99e3> <99ec> 21091 +<99ee> <99f0> 21101 +<99f2> <99fe> 21104 +<9a02> <9a04> 21118 +<9a06> <9a0c> 21121 +<9a10> <9a15> 21128 +<9a17> <9a18> 21134 +<9a1a> <9a2a> 21136 +<9a31> <9a35> 21155 +<9a39> <9a3d> 21160 +<9a43> <9a44> 9238 +<9a46> <9a49> 21166 +<9a4b> <9a4c> 21170 +<9a50> <9a54> 21173 +<9a58> <9a59> 21179 +<9a5c> <9a5e> 21181 +<9a60> <9a61> 21184 +<9a66> <9a69> 21187 +<9a77> <9a78> 6075 +<9a80> <9a81> 6080 +<9a8d> <9a8e> 21195 +<9a92> <9a93> 6086 +<9a94> <9a95> 21197 +<9a9b> <9a9d> 6090 +<9a9f> <9aa0> 6093 +<9aa2> <9aa3> 6095 +<9aa9> <9aae> 21201 +<9ab2> <9ab5> 21207 +<9abd> <9abf> 21213 +<9ac3> <9ac4> 21216 +<9ac6> <9aca> 21218 +endcidrange + +100 begincidrange +<9acb> <9acc> 7645 +<9acd> <9ace> 21223 +<9ad9> <9ade> 21227 +<9ae2> <9ae5> 21234 +<9ae7> <9aea> 21238 +<9af0> <9af8> 21243 +<9afc> <9aff> 21253 +<9b00> <9b02> 21257 +<9b04> <9b05> 21260 +<9b09> <9b0c> 21263 +<9b10> <9b12> 21268 +<9b14> <9b19> 21271 +<9b1b> <9b1e> 21277 +<9b20> <9b21> 21281 +<9b2a> <9b2d> 21286 +<9b33> <9b3a> 21291 +<9b3d> <9b40> 21299 +<9b4a> <9b4c> 21304 +<9b52> <9b53> 21308 +<9b55> <9b57> 21310 +<9b5b> <9b6e> 21314 +<9b70> <9b73> 21334 +<9b75> <9b76> 21338 +<9b78> <9b80> 21340 +<9b84> <9b8d> 21350 +<9b93> <9b99> 21361 +<9b9b> <9b9c> 21368 +<9b9f> <9ba9> 21370 +<9baf> <9bbf> 21382 +<9bc2> <9bc6> 21399 +<9bcb> <9bd3> 21405 +<9bd7> <9bda> 21415 +<9bde> <9be0> 21420 +<9be5> <9be6> 21424 +<9bea> <9beb> 9787 +<9bec> <9bef> 21427 +<9bf1> <9bf3> 21431 +<9bf5> <9bfc> 21434 +<9c00> <9c07> 21443 +<9c0a> <9c0c> 21451 +<9c0e> <9c0f> 21454 +<9c14> <9c1f> 21457 +<9c21> <9c22> 21469 +<9c26> <9c27> 21472 +<9c2a> <9c2c> 21474 +<9c2e> <9c30> 21477 +<9c3c> <9c3d> 21484 +<9c3f> <9c44> 21486 +<9c46> <9c47> 21492 +<9c4a> <9c51> 21494 +<9c59> <9c5c> 21504 +<9c60> <9c66> 21509 +<9c68> <9c6c> 21516 +<9c6e> <9c77> 21521 +<9c7d> <9c7e> 21533 +<9c83> <9c84> 21536 +<9c85> <9c88> 7563 +<9c89> <9c8a> 21538 +<9c90> <9c92> 7570 +<9c94> <9c95> 7573 +<9c96> <9c99> 21543 +<9c9a> <9c9b> 7575 +<9c9e> <9ca3> 7577 +<9ca5> <9ca9> 7583 +<9cad> <9cae> 7589 +<9cb0> <9cb7> 7591 +<9cba> <9cbd> 7599 +<9cbe> <9cc2> 21552 +<9cc4> <9cc7> 7603 +<9cc8> <9cc9> 21557 +<9cca> <9cd0> 7607 +<9cd1> <9cd2> 21559 +<9cd3> <9cd5> 7614 +<9cd7> <9cd9> 7617 +<9cda> <9cdb> 21561 +<9cdc> <9cdd> 7620 +<9ce0> <9ce1> 21563 +<9ce3> <9ce4> 21565 +<9ce6> <9ce8> 21567 +<9cea> <9ceb> 21570 +<9ced> <9cf2> 21572 +<9cf7> <9cff> 21579 +<9d00> <9d05> 21588 +<9d0a> <9d14> 21595 +<9d16> <9d1a> 21606 +<9d20> <9d22> 21613 +<9d24> <9d25> 21616 +<9d29> <9d2e> 21619 +<9d31> <9d3a> 21625 +<9d3c> <9d3e> 21635 +<9d40> <9d41> 21638 +<9d43> <9d50> 21640 +<9d54> <9d5b> 21654 +<9d5e> <9d5f> 21662 +<9d62> <9d69> 21664 +<9d6d> <9d6e> 21673 +<9d70> <9d71> 21675 +<9d73> <9d86> 21677 +<9d8a> <9d92> 21698 +<9d94> <9d97> 21707 +endcidrange + +100 begincidrange +<9d9b> <9da4> 21712 +<9da6> <9da8> 21722 +<9daa> <9dae> 21725 +<9db0> <9db3> 21730 +<9db5> <9dba> 21734 +<9dbd> <9dbf> 21740 +<9dc5> <9dd2> 21745 +<9dd4> <9dd6> 21759 +<9ddb> <9de4> 21763 +<9de7> <9dee> 21773 +<9df0> <9df1> 21781 +<9df4> <9df7> 21783 +<9dfb> <9dff> 21787 +<9e00> <9e0b> 21792 +<9e0d> <9e14> 21804 +<9e16> <9e19> 21812 +<9e28> <9e2c> 6967 +<9e39> <9e3a> 6977 +<9e3b> <9e3c> 21822 +<9e41> <9e42> 6980 +<9e46> <9e49> 6983 +<9e4b> <9e4c> 6987 +<9e52> <9e54> 21827 +<9e5a> <9e5c> 6993 +<9e5f> <9e62> 21833 +<9e66> <9e6c> 6998 +<9e6e> <9e6f> 21838 +<9e76> <9e78> 21842 +<9e80> <9e81> 21846 +<9e83> <9e86> 21848 +<9e87> <9e88> 7677 +<9e89> <9e8a> 21852 +<9e8c> <9e91> 21854 +<9e94> <9e96> 21860 +<9e98> <9e9c> 21863 +<9ea0> <9ea4> 21869 +<9ea7> <9ea8> 21874 +<9eaa> <9eae> 21876 +<9eb0> <9eb3> 21881 +<9eb6> <9eb7> 21885 +<9eb9> <9eba> 21887 +<9ebd> <9ebe> 7673 +<9ebf> <9ec3> 21890 +<9ec5> <9ec8> 21895 +<9eca> <9ecb> 21899 +<9ed2> <9ed3> 21902 +<9ed5> <9ed7> 21904 +<9ed9> <9eda> 21907 +<9edb> <9edd> 7684 +<9ee3> <9ee4> 21910 +<9eeb> <9eee> 21913 +<9ef0> <9ef1> 21917 +<9ef5> <9ef6> 21920 +<9efb> <9efc> 6742 +<9f00> <9f08> 21924 +<9f11> <9f12> 21936 +<9f1a> <9f1f> 21941 +<9f23> <9f2b> 21948 +<9f2d> <9f2e> 21957 +<9f30> <9f36> 21959 +<9f3d> <9f3e> 7700 +<9f3f> <9f43> 21969 +<9f45> <9f49> 21974 +<9f4c> <9f4e> 21979 +<9f55> <9f58> 21983 +<9f5a> <9f5b> 21987 +<9f5d> <9f5e> 21989 +<9f64> <9f65> 21992 +<9f67> <9f69> 21994 +<9f6d> <9f71> 21998 +<9f73> <9f76> 22003 +<9f78> <9f7e> 22007 +<9f81> <9f82> 22014 +<9f85> <9f8a> 7535 +<9f8e> <9f8f> 22016 +<9f91> <9f93> 22018 +<9f96> <9f98> 22021 +<9f9d> <9f9e> 22024 +<9fa1> <9fa5> 22026 +<9fb6> <9fb7> 22069 + 29064 + 29320 + 29576 + 29832 + 30088 + 30229 + 573 + 592 + 10059 + 22047 + 22032 + 22036 + 22039 + 22042 + 22044 + 576 + 592 + 600 + 580 + 596 +endcidrange + +12 begincidrange + 582 + 594 + 586 + 584 + 588 + 10027 + 10037 + 10041 + 10055 + 262 + 266 + 168 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UTF16-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UTF16-V new file mode 100644 index 00000000000..653b47747c4 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniGB-UTF16-V @@ -0,0 +1,104 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniGB-UTF16-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniGB-UTF16-H) +%%BeginResource: CMap (UniGB-UTF16-V) +%%Title: (UniGB-UTF16-V Adobe GB1 5) +%%Version: 1.004 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniGB-UTF16-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (GB1) def + /Supplement 5 def +end def + +/CMapName /UniGB-UTF16-V def +/CMapVersion 1.004 def +/CMapType 1 def + +/XUID [1 10 25602] def + +/WMode 1 def + +17 begincidchar +<2014> 598 +<2026> 599 +<3001> 575 +<3002> 574 +<3013> 7706 + 578 + 573 + 7707 + 7708 + 579 + 7709 + 7710 + 600 + 596 + 597 + 7704 + 7711 +endcidchar + +6 begincidrange +<3008> <300f> 584 +<3010> <3011> 594 +<3014> <3015> 582 +<3016> <3017> 592 + 580 + 576 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-H new file mode 100644 index 00000000000..b71c72cd16f --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-H @@ -0,0 +1,8870 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniJIS-UCS2-H) +%%Title: (UniJIS-UCS2-H Adobe Japan1 4) +%%Version: 12.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 4 def +end def + +/CMapName /UniJIS-UCS2-H def +/CMapVersion 12.003 def +/CMapType 1 def + +/XUID [1 10 25356] def + +/WMode 0 def + +2 begincodespacerange + <0000> + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidrange +<0020> <005b> 1 +<005c> <005c> 97 +<005d> <007e> 62 +<00a1> <00a3> 101 +<00a4> <00a4> 107 +<00a5> <00a5> 61 +<00a6> <00a6> 99 +<00a7> <00a7> 720 +<00a8> <00a8> 647 +<00a9> <00a9> 152 +<00aa> <00aa> 140 +<00ab> <00ab> 109 +<00ac> <00ac> 153 +<00ad> <00ad> 151 +<00ae> <00ae> 154 +<00af> <00af> 129 +<00b0> <00b0> 707 +<00b1> <00b1> 694 +<00b2> <00b3> 157 +<00b4> <00b4> 645 +<00b5> <00b5> 159 +<00b6> <00b6> 778 +<00b7> <00b7> 117 +<00b8> <00b8> 134 +<00b9> <00b9> 160 +<00ba> <00ba> 144 +<00bb> <00bb> 123 +<00bc> <00be> 161 +<00bf> <00bf> 126 +<00c0> <00c5> 164 +<00c6> <00c6> 139 +<00c7> <00d6> 170 +<00d7> <00d7> 695 +<00d8> <00d8> 142 +<00d9> <00de> 187 +<00df> <00df> 150 +<00e0> <00e5> 193 +<00e6> <00e6> 145 +<00e7> <00f6> 199 +<00f7> <00f7> 696 +<00f8> <00f8> 148 +<00f9> <00ff> 216 +<0100> <0100> 9366 +<0101> <0101> 9361 +<0112> <0112> 9369 +<0113> <0113> 9364 +<011a> <011a> 9395 +<011b> <011b> 9407 +<0127> <0127> 12092 +<0128> <0128> 9400 +<0129> <0129> 9412 +<012a> <012a> 9367 +<012b> <012b> 9362 +<0131> <0131> 146 +<0141> <0141> 141 +<0142> <0142> 147 +<014b> <014b> 9436 +<014c> <014c> 9370 +<014d> <014d> 9365 +<0152> <0152> 143 +<0153> <0153> 149 +<0160> <0160> 223 +<0161> <0161> 227 +<0168> <0168> 9405 +<0169> <0169> 9417 +<016a> <016a> 9368 +<016b> <016b> 9363 +<016e> <016e> 9404 +<016f> <016f> 9416 +<0178> <0178> 224 +<017d> <017d> 225 +<017e> <017e> 229 +<01c0> <01c0> 99 +<01cd> <01cd> 9394 +<01ce> <01ce> 9406 +<01cf> <01cf> 9398 +<01d0> <01d0> 9410 +<01d1> <01d1> 9401 +<01d2> <01d2> 9413 +<01d3> <01d3> 9403 +<01d4> <01d4> 9415 +<01fd> <01fd> 9421 +<0251> <0251> 9418 +<0254> <0254> 9423 +<0259> <0259> 9426 +<025a> <025a> 9429 +<025b> <025b> 9432 +<0275> <0275> 9437 +<0283> <0283> 9442 +<028c> <028c> 9438 +<0292> <0292> 9441 +<02d0> <02d0> 9443 +<0300> <0300> 65 +<0301> <0302> 127 +<0303> <0303> 95 +<0304> <0304> 129 +<0305> <0305> 226 +<0306> <0308> 130 +<030a> <030a> 133 +<030b> <030b> 135 +endcidrange + +100 begincidrange +<030c> <030c> 137 +<0327> <0327> 134 +<0328> <0328> 136 +<0332> <0332> 64 +<0336> <0336> 138 +<0361> <0361> 758 +<0391> <03a1> 1011 +<03a3> <03a9> 1028 +<03b1> <03c1> 1035 +<03c3> <03c9> 1052 +<03d0> <03d0> 12090 +<03d1> <03d1> 12096 +<03db> <03db> 12095 +<0401> <0401> 1065 +<0410> <0415> 1059 +<0416> <0435> 1066 +<0436> <044f> 1099 +<0451> <0451> 1098 +<045b> <045b> 12092 +<1ebc> <1ebc> 9397 +<1ebd> <1ebd> 9409 +<2002> <2002> 231 +<2003> <2003> 633 +<2010> <2010> 662 +<2011> <2011> 14 +<2012> <2012> 114 +<2013> <2013> 114 +<2014> <2014> 138 +<2015> <2015> 661 +<2016> <2016> 666 +<2018> <2019> 670 +<201a> <201a> 120 +<201c> <201d> 672 +<201e> <201e> 121 +<2020> <2021> 776 +<2022> <2022> 119 +<2025> <2025> 669 +<2026> <2026> 668 +<2030> <2030> 772 +<2032> <2033> 708 +<2039> <203a> 110 +<203b> <203b> 734 +<203c> <203c> 12111 +<203e> <203e> 325 +<2044> <2044> 104 +<2049> <2049> 12112 +<2070> <2070> 9377 +<2074> <2079> 9378 +<2080> <2089> 9384 +<20ac> <20ac> 9354 +<20dd> <20dd> 779 +<2100> <2100> 11855 +<2103> <2103> 710 +<2105> <2105> 11859 +<2109> <2109> 8305 +<210a> <210a> 8304 +<210f> <210f> 12092 +<2113> <2113> 8025 +<2116> <2116> 7610 +<2121> <2121> 8055 +<2122> <2122> 228 +<2126> <2126> 9355 +<212b> <212b> 771 +<2135> <2135> 12089 +<2153> <2154> 9375 +<215b> <215e> 9371 +<2160> <2169> 7575 +<216a> <216b> 8225 +<2170> <2179> 8092 +<217a> <217b> 8298 +<217f> <217f> 8303 +<2190> <2191> 737 +<2192> <2192> 736 +<2193> <2193> 739 +<2194> <2194> 12201 +<2195> <2195> 12215 +<2196> <2197> 12204 +<2198> <2199> 12202 +<21c4> <21c5> 8310 +<21c6> <21c6> 8309 +<21cc> <21cc> 12206 +<21d0> <21d0> 12200 +<21d2> <21d2> 752 +<21d4> <21d4> 753 +<21e6> <21e6> 8013 +<21e7> <21e7> 8012 +<21e8> <21e8> 8014 +<21e9> <21e9> 8011 +<2200> <2200> 754 +<2202> <2202> 759 +<2203> <2203> 755 +<2205> <2205> 12184 +<2207> <2207> 760 +<2208> <2208> 741 +<220a> <220a> 12091 +<220b> <220b> 742 +<2211> <2211> 7625 +<2212> <2212> 693 +<2213> <2213> 12118 +<221a> <221a> 765 +endcidrange + +100 begincidrange +<221d> <221d> 767 +<221e> <221e> 703 +<221f> <221f> 7629 +<2220> <2220> 756 +<2225> <2225> 666 +<2227> <2228> 749 +<2229> <2229> 748 +<222a> <222a> 747 +<222b> <222c> 769 +<222d> <222d> 8195 +<222e> <222e> 7624 +<2234> <2234> 704 +<2235> <2235> 768 +<223c> <223c> 665 +<223d> <223d> 766 +<2243> <2243> 12120 +<2252> <2252> 762 +<2260> <2260> 698 +<2261> <2261> 761 +<2266> <2267> 701 +<226a> <226b> 763 +<2272> <2273> 12121 +<2282> <2283> 745 +<2286> <2287> 743 +<2295> <2295> 12188 +<2296> <2296> 12186 +<2297> <2297> 12189 +<2298> <2298> 12187 +<229d> <229d> 12186 +<229e> <229e> 12190 +<22a0> <22a0> 12185 +<22a5> <22a5> 757 +<22bf> <22bf> 7630 +<22ee> <22ee> 7897 +<22ef> <22ef> 668 +<2300> <2300> 12184 +<2307> <2307> 12219 +<2312> <2312> 758 +<244a> <244a> 12116 +<2460> <2473> 7555 +<2474> <2487> 8071 +<2488> <2490> 8062 +<249c> <24b5> 8112 +<24b6> <24cf> 10339 +<24d0> <24e9> 10313 +<24ea> <24ea> 8224 +<2500> <254b> 7479 +<2550> <2550> 8251 +<255e> <255e> 8252 +<2561> <2561> 8254 +<256a> <256a> 8253 +<256d> <256e> 8247 +<256f> <256f> 8250 +<2570> <2570> 8249 +<2571> <2573> 8261 +<2581> <2588> 8230 +<2589> <2589> 8244 +<258a> <258a> 8243 +<258b> <258b> 8242 +<258c> <258c> 8241 +<258d> <258d> 8240 +<258e> <258e> 8239 +<258f> <258f> 8238 +<2594> <2595> 8245 +<25a0> <25a0> 729 +<25a1> <25a1> 728 +<25a2> <25a2> 8015 +<25aa> <25aa> 12239 +<25ab> <25ab> 12237 +<25b2> <25b2> 731 +<25b3> <25b3> 730 +<25b6> <25b6> 12195 +<25b7> <25b7> 8010 +<25bc> <25bc> 733 +<25bd> <25bd> 732 +<25c0> <25c0> 12194 +<25c1> <25c1> 8009 +<25c6> <25c6> 727 +<25c7> <25c7> 726 +<25c9> <25c9> 8210 +<25cb> <25cb> 723 +<25cc> <25cc> 10502 +<25ce> <25ce> 725 +<25cf> <25cf> 724 +<25e2> <25e3> 8255 +<25e4> <25e4> 8258 +<25e5> <25e5> 8257 +<25e6> <25e6> 12254 +<25ef> <25ef> 779 +<2600> <2603> 8215 +<2605> <2605> 722 +<2606> <2606> 721 +<260e> <260e> 8056 +<2612> <2612> 12185 +<261c> <261d> 8220 +<261e> <261e> 8219 +<261f> <261f> 8222 +<2640> <2640> 706 +<2642> <2642> 705 +<2660> <2660> 8211 +endcidrange + +100 begincidrange +<2661> <2661> 8017 +<2662> <2662> 8019 +<2663> <2663> 8213 +<2664> <2664> 8018 +<2665> <2665> 8212 +<2666> <2666> 8214 +<2667> <2667> 8016 +<2668> <2669> 12098 +<266a> <266a> 775 +<266c> <266c> 12100 +<266d> <266d> 774 +<266f> <266f> 773 +<2702> <2702> 12176 +<271a> <271a> 12241 +<2756> <2756> 12259 +<2776> <277e> 8286 +<27a1> <27a1> 8206 +<2e83> <2e83> 14305 +<2e85> <2e85> 13856 +<2e87> <2e87> 14105 +<2e89> <2e89> 14356 +<2e8b> <2e8b> 14110 +<2e8c> <2e8d> 13833 +<2e8e> <2e8e> 4209 +<2e8f> <2e8f> 14476 +<2e90> <2e90> 4646 +<2e92> <2e92> 3762 +<2e93> <2e93> 4739 +<2e94> <2e94> 4779 +<2e95> <2e95> 15391 +<2e96> <2e96> 14530 +<2e97> <2e97> 13852 +<2e98> <2e98> 14561 +<2e99> <2e99> 5059 +<2e9b> <2e9b> 5089 +<2e9f> <2e9f> 3644 +<2ea0> <2ea0> 3773 +<2ea1> <2ea2> 14689 +<2ea3> <2ea3> 14749 +<2ea4> <2ea4> 15398 +<2ea6> <2ea6> 14157 +<2ea8> <2ea8> 14780 +<2ea9> <2ea9> 13729 +<2eaa> <2eaa> 13995 +<2eab> <2eab> 14999 +<2eac> <2eac> 2260 +<2ead> <2ead> 14905 +<2eae> <2eae> 13922 +<2eb1> <2eb1> 15000 +<2eb2> <2eb2> 14999 +<2eb3> <2eb3> 14189 +<2eb7> <2eb7> 14078 +<2eb9> <2eb9> 14099 +<2ebc> <2ebc> 13747 +<2ebd> <2ebd> 13646 +<2ebe> <2ec0> 14197 +<2ec1> <2ec1> 1931 +<2ec2> <2ec2> 15114 +<2ec3> <2ec3> 13870 +<2ec4> <2ec4> 2658 +<2ec6> <2ec6> 13682 +<2eca> <2eca> 13898 +<2ecc> <2ecc> 15403 +<2ecd> <2ecd> 15184 +<2ecf> <2ecf> 15262 +<2ed1> <2ed1> 3029 +<2ed2> <2ed2> 15255 +<2ed6> <2ed6> 15262 +<2ed7> <2ed7> 13645 +<2ed8> <2ed8> 2664 +<2edd> <2edd> 13847 +<2ede> <2ede> 13849 +<2edf> <2edf> 13848 +<2ee4> <2ee4> 1614 +<2ee8> <2ee8> 3380 +<2ee9> <2ee9> 1323 +<2eeb> <2eeb> 2666 +<2eed> <2eed> 2243 +<2eef> <2eef> 3965 +<2ef2> <2ef2> 1615 +<2f00> <2f00> 1200 +<2f01> <2f01> 8371 +<2f02> <2f02> 4095 +<2f03> <2f03> 4097 +<2f04> <2f04> 1333 +<2f05> <2f05> 4102 +<2f06> <2f06> 3275 +<2f07> <2f07> 4110 +<2f08> <2f08> 2579 +<2f09> <2f09> 4208 +<2f0a> <2f0a> 3286 +<2f0b> <2f0b> 3392 +<2f0c> <2f0c> 4219 +<2f0d> <2f0d> 4227 +<2f0e> <2f0e> 4233 +<2f0f> <2f0f> 4243 +<2f10> <2f10> 4248 +<2f11> <2f11> 3163 +<2f12> <2f12> 3991 +<2f13> <2f13> 4294 +endcidrange + +100 begincidrange +<2f14> <2f15> 4301 +<2f16> <2f16> 4307 +<2f17> <2f17> 2375 +<2f18> <2f18> 3708 +<2f19> <2f19> 4316 +<2f1a> <2f1a> 4321 +<2f1b> <2f1b> 4328 +<2f1c> <2f1c> 3746 +<2f1d> <2f1d> 1969 +<2f1e> <2f1e> 4459 +<2f1f> <2f1f> 3156 +<2f20> <2f20> 2204 +<2f21> <2f22> 4538 +<2f23> <2f23> 3878 +<2f24> <2f24> 2887 +<2f25> <2f25> 2433 +<2f26> <2f26> 2208 +<2f27> <2f27> 4622 +<2f28> <2f28> 2631 +<2f29> <2f29> 2454 +<2f2a> <2f2a> 4646 +<2f2b> <2f2b> 4648 +<2f2c> <2f2c> 4658 +<2f2d> <2f2d> 2177 +<2f2e> <2f2e> 4716 +<2f2f> <2f2f> 1979 +<2f30> <2f30> 1918 +<2f31> <2f31> 1738 +<2f32> <2f32> 1519 +<2f33> <2f33> 4739 +<2f34> <2f34> 4741 +<2f35> <2f35> 4761 +<2f36> <2f36> 4763 +<2f37> <2f37> 4768 +<2f38> <2f38> 1655 +<2f39> <2f39> 14521 +<2f3a> <2f3a> 4783 +<2f3b> <2f3b> 4785 +<2f3c> <2f3c> 2554 +<2f3d> <2f3d> 4930 +<2f3e> <2f3e> 1921 +<2f3f> <2f3f> 2326 +<2f40> <2f40> 2215 +<2f41> <2f41> 5058 +<2f42> <2f42> 3592 +<2f43> <2f43> 3143 +<2f44> <2f44> 1740 +<2f45> <2f45> 3661 +<2f46> <2f46> 5088 +<2f47> <2f47> 3284 +<2f48> <2f48> 5132 +<2f49> <2f49> 1860 +<2f4a> <2f4a> 3814 +<2f4b> <2f4b> 1853 +<2f4c> <2f4c> 2221 +<2f4d> <2f4d> 5349 +<2f4e> <2f4e> 5364 +<2f4f> <2f4f> 5368 +<2f50> <2f50> 3450 +<2f51> <2f51> 3807 +<2f52> <2f52> 2223 +<2f53> <2f53> 5378 +<2f54> <2f54> 2603 +<2f55> <2f55> 1360 +<2f56> <2f56> 3066 +<2f57> <2f57> 3541 +<2f58> <2f58> 5604 +<2f59> <2f59> 5606 +<2f5a> <2f5a> 3618 +<2f5b> <2f5b> 1383 +<2f5c> <2f5c> 1671 +<2f5d> <2f5d> 1880 +<2f5e> <2f5e> 1904 +<2f5f> <2f5f> 1732 +<2f60> <2f60> 1245 +<2f61> <2f61> 1504 +<2f62> <2f62> 1537 +<2f63> <2f63> 2652 +<2f64> <2f64> 3899 +<2f65> <2f65> 3134 +<2f66> <2f66> 3479 +<2f67> <2f67> 14848 +<2f68> <2f68> 5783 +<2f69> <2f69> 3368 +<2f6a> <2f6a> 3453 +<2f6b> <2f6b> 2172 +<2f6c> <2f6c> 3816 +<2f6d> <2f6d> 3779 +<2f6e> <2f6e> 3836 +<2f6f> <2f6f> 2676 +<2f70> <2f70> 2260 +<2f71> <2f71> 14913 +<2f72> <2f72> 1363 +<2f73> <2f73> 1856 +<2f74> <2f74> 3953 +<2f75> <2f75> 2971 +<2f76> <2f76> 3606 +<2f77> <2f77> 2227 +<2f78> <2f78> 1544 +<2f79> <2f79> 6163 +endcidrange + +100 begincidrange +<2f7a> <2f7a> 3901 +<2f7b> <2f7b> 1227 +<2f7c> <2f7c> 4061 +<2f7d> <2f7d> 2261 +<2f7e> <2f7e> 6205 +<2f7f> <2f7f> 2262 +<2f80> <2f80> 6227 +<2f81> <2f81> 3281 +<2f82> <2f82> 2569 +<2f83> <2f83> 2263 +<2f84> <2f84> 2232 +<2f85> <2f85> 1235 +<2f86> <2f86> 2697 +<2f87> <2f87> 2726 +<2f88> <2f88> 2360 +<2f89> <2f89> 2081 +<2f8a> <2f8a> 2541 +<2f8b> <2f8b> 6322 +<2f8c> <2f8c> 6479 +<2f8d> <2f8d> 2988 +<2f8e> <2f8e> 1858 +<2f8f> <2f8f> 2022 +<2f90> <2f90> 1189 +<2f91> <2f91> 6635 +<2f92> <2f92> 1887 +<2f93> <2f93> 1455 +<2f94> <2f94> 1908 +<2f95> <2f95> 2921 +<2f96> <2f96> 3198 +<2f97> <2f97> 6742 +<2f98> <2f98> 6745 +<2f99> <2f99> 1419 +<2f9a> <2f9a> 2682 +<2f9b> <2f9b> 2808 +<2f9c> <2f9c> 2829 +<2f9d> <2f9d> 2574 +<2f9e> <2f9e> 2306 +<2f9f> <2f9f> 2575 +<2fa0> <2fa0> 2914 +<2fa1> <2fa1> 15183 +<2fa2> <2fa2> 3874 +<2fa3> <2fa3> 3243 +<2fa4> <2fa4> 3428 +<2fa5> <2fa5> 3948 +<2fa6> <2fa6> 1754 +<2fa7> <2fa7> 3029 +<2fa8> <2fa8> 3827 +<2fa9> <2fa9> 3550 +<2faa> <2faa> 7113 +<2fab> <2fab> 7115 +<2fac> <2fac> 1229 +<2fad> <2fad> 8695 +<2fae> <2fae> 3463 +<2faf> <2faf> 3800 +<2fb0> <2fb0> 1461 +<2fb1> <2fb1> 7171 +<2fb2> <2fb2> 7173 +<2fb3> <2fb3> 1339 +<2fb4> <2fb4> 3607 +<2fb5> <2fb5> 3561 +<2fb6> <2fb6> 3464 +<2fb7> <2fb7> 2543 +<2fb8> <2fb8> 2335 +<2fb9> <2fb9> 2035 +<2fba> <2fba> 3333 +<2fbb> <2fbb> 2062 +<2fbc> <2fbc> 2036 +<2fbd> <2fbd> 7276 +<2fbe> <2fbe> 7293 +<2fbf> <2fc0> 7299 +<2fc1> <2fc1> 1614 +<2fc2> <2fc2> 1685 +<2fc3> <2fc3> 3031 +<2fc4> <2fc4> 7414 +<2fc5> <2fc5> 2267 +<2fc6> <2fc6> 7425 +<2fc7> <2fc7> 3729 +<2fc8> <2fc8> 13323 +<2fc9> <2fc9> 1642 +<2fca> <2fca> 2055 +<2fcb> <2fcb> 7446 +<2fcc> <2fcc> 7449 +<2fcd> <2fcd> 3102 +<2fce> <2fce> 1937 +<2fcf> <2fcf> 2767 +<2fd0> <2fd0> 3475 +<2fd1> <2fd2> 7457 +<2fd3> <2fd3> 3966 +<2fd4> <2fd5> 7472 +<3000> <3002> 633 +<3003> <3003> 655 +<3004> <3004> 8308 +<3005> <3007> 657 +<3008> <3011> 682 +<3012> <3012> 735 +<3013> <3013> 740 +<3014> <3015> 676 +<301c> <301c> 665 +<301d> <301d> 7608 +<301f> <301f> 7609 +endcidrange + +100 begincidrange +<3020> <3020> 8058 +<3030> <3030> 12218 +<3033> <3035> 12108 +<3036> <3036> 8057 +<3041> <3093> 842 +<3094> <3094> 7958 +<309b> <309c> 643 +<309d> <309e> 653 +<30a1> <30f6> 925 +<30f7> <30fa> 8313 +<30fb> <30fb> 638 +<30fc> <30fc> 660 +<30fd> <30fe> 651 +<3220> <3229> 10126 +<322a> <322f> 8198 +<3230> <3230> 8197 +<3231> <3232> 7618 +<3233> <3233> 8143 +<3234> <3234> 8141 +<3235> <3235> 8148 +<3236> <3236> 8147 +<3237> <3237> 8204 +<3238> <3238> 8142 +<3239> <3239> 7620 +<323a> <323a> 8151 +<323b> <323b> 8149 +<323c> <323c> 8144 +<323d> <323d> 8139 +<323e> <323e> 8146 +<323f> <323f> 8140 +<3240> <3240> 8150 +<3241> <3241> 8205 +<3242> <3242> 8145 +<3243> <3243> 8138 +<3280> <3289> 10461 +<328a> <328f> 10472 +<3290> <3290> 10471 +<3291> <3291> 8161 +<3292> <3292> 8160 +<3293> <3293> 8162 +<3294> <3294> 8156 +<3295> <3295> 10495 +<3296> <3296> 8165 +<3297> <3297> 10492 +<3298> <3298> 8158 +<3299> <3299> 8223 +<329a> <329a> 10489 +<329b> <329b> 10488 +<329c> <329c> 10494 +<329d> <329d> 8319 +<329e> <329e> 8191 +<329f> <329f> 10479 +<32a0> <32a1> 10486 +<32a2> <32a2> 10491 +<32a3> <32a3> 10490 +<32a4> <32a8> 7613 +<32a9> <32a9> 8154 +<32aa> <32aa> 8157 +<32ab> <32ab> 8159 +<32ac> <32ac> 8163 +<32ad> <32ad> 8153 +<32ae> <32ae> 8164 +<32af> <32af> 8155 +<32b0> <32b0> 8152 +<32d0> <32fe> 10413 +<3300> <3300> 8048 +<3301> <3302> 11874 +<3303> <3303> 8042 +<3304> <3304> 11876 +<3305> <3305> 8183 +<3306> <3306> 11877 +<3307> <3307> 11881 +<3308> <3308> 11879 +<3309> <3309> 11884 +<330a> <330a> 11882 +<330b> <330b> 11886 +<330c> <330c> 11888 +<330d> <330d> 7595 +<330e> <3313> 11889 +<3314> <3314> 7586 +<3315> <3315> 8041 +<3316> <3316> 8039 +<3317> <3317> 11896 +<3318> <3318> 8040 +<3319> <3319> 11898 +<331a> <331d> 11900 +<331e> <331e> 8051 +<331f> <3321> 11904 +<3322> <3322> 8038 +<3323> <3323> 8043 +<3324> <3324> 11907 +<3325> <3325> 11909 +<3326> <3326> 7596 +<3327> <3327> 7590 +<3328> <3329> 11912 +<332a> <332a> 8052 +<332b> <332b> 7598 +<332d> <332d> 11915 +<332e> <3330> 11918 +<3331> <3331> 8049 +endcidrange + +100 begincidrange +<3332> <3332> 11921 +<3333> <3333> 8327 +<3334> <3335> 11924 +<3336> <3336> 7592 +<3337> <3337> 11930 +<3338> <3338> 11932 +<3339> <3339> 8046 +<333a> <333a> 11933 +<333b> <333b> 8047 +<333c> <333c> 11926 +<333d> <333d> 11934 +<333e> <3340> 11936 +<3341> <3341> 11935 +<3342> <3342> 8045 +<3343> <3346> 11939 +<3347> <3347> 8050 +<3348> <3348> 11943 +<3349> <3349> 7585 +<334a> <334a> 7599 +<334b> <334c> 11944 +<334d> <334d> 7588 +<334e> <334e> 8328 +<334f> <3350> 11946 +<3351> <3351> 7593 +<3352> <3352> 11950 +<3353> <3353> 11954 +<3354> <3354> 11951 +<3355> <3356> 11955 +<3357> <3357> 8044 +<3371> <3371> 11861 +<337b> <337b> 8323 +<337c> <337c> 7623 +<337d> <337d> 7622 +<337e> <337e> 7621 +<337f> <337f> 8054 +<3385> <3387> 8031 +<3388> <3389> 8192 +<338d> <338d> 11864 +<338e> <338f> 7604 +<3390> <3390> 8035 +<3396> <3396> 8037 +<3397> <3397> 8024 +<3398> <3398> 8026 +<339b> <339b> 11865 +<339c> <339e> 7601 +<339f> <339f> 8186 +<33a0> <33a0> 8020 +<33a1> <33a1> 7607 +<33a2> <33a2> 8021 +<33a3> <33a3> 8187 +<33a4> <33a5> 8022 +<33a6> <33a6> 8188 +<33b0> <33b0> 8030 +<33b1> <33b1> 8029 +<33b2> <33b2> 8028 +<33b3> <33b3> 8027 +<33c2> <33c2> 11856 +<33c4> <33c4> 7606 +<33c8> <33c8> 8194 +<33cb> <33cb> 8034 +<33cc> <33cc> 8182 +<33cd> <33cd> 7611 +<33d4> <33d4> 8036 +<33d7> <33d8> 11869 +<33da> <33da> 11851 +<3402> <3402> 13698 +<3405> <3405> 15387 +<3427> <3427> 13910 +<3488> <3488> 15442 +<34db> <34db> 15425 +<351f> <351f> 13865 +<353e> <353e> 14110 +<378d> <378d> 13850 +<37e2> <37e2> 14123 +<3af3> <3af3> 15424 +<3b22> <3b22> 15433 +<3b88> <3b88> 13965 +<3e8a> <3e8a> 15427 +<3eda> <3eda> 15432 +<3fb1> <3fb1> 14164 +<4093> <4093> 15436 +<4103> <4103> 15439 +<4264> <4264> 14176 +<4293> <4293> 15440 +<440c> <440c> 15426 +<4453> <4453> 14195 +<457a> <457a> 15435 +<4665> <4665> 15438 +<46ae> <46ae> 15441 +<4be8> <4be8> 15430 +<4e00> <4e00> 1200 +<4e01> <4e01> 3000 +<4e03> <4e03> 2275 +<4e04> <4e05> 14296 +<4e07> <4e07> 3754 +<4e08> <4e08> 2510 +<4e09> <4e09> 2174 +<4e0a> <4e0a> 2509 +<4e0b> <4e0b> 1340 +<4e0d> <4e0d> 3526 +endcidrange + +100 begincidrange +<4e0e> <4e0e> 3881 +<4e10> <4e10> 4091 +<4e11> <4e11> 1233 +<4e14> <4e14> 1484 +<4e15> <4e15> 4092 +<4e16> <4e16> 2632 +<4e17> <4e17> 4311 +<4e18> <4e18> 1648 +<4e19> <4e19> 3594 +<4e1e> <4e1e> 2511 +<4e1f> <4e1f> 14298 +<4e21> <4e21> 3974 +<4e26> <4e26> 3602 +<4e28> <4e28> 8371 +<4e2a> <4e2a> 4093 +<4e2b> <4e2b> 14299 +<4e2c> <4e2c> 14157 +<4e2d> <4e2d> 2980 +<4e2f> <4e30> 14300 +<4e31> <4e31> 4094 +<4e32> <4e32> 1778 +<4e36> <4e36> 4095 +<4e37> <4e37> 13981 +<4e38> <4e38> 1561 +<4e39> <4e39> 2926 +<4e3b> <4e3b> 2323 +<4e3c> <4e3c> 4096 +<4e3f> <4e3f> 4097 +<4e40> <4e41> 14302 +<4e42> <4e42> 4098 +<4e43> <4e43> 3307 +<4e44> <4e44> 14304 +<4e45> <4e45> 1649 +<4e48> <4e48> 14126 +<4e4b> <4e4b> 3309 +<4e4d> <4e4d> 3259 +<4e4e> <4e4e> 1911 +<4e4f> <4e4f> 3681 +<4e55> <4e55> 6480 +<4e56> <4e56> 4099 +<4e57> <4e57> 2512 +<4e58> <4e58> 4100 +<4e59> <4e59> 1333 +<4e5a> <4e5a> 14305 +<4e5d> <4e5d> 1757 +<4e5e> <4e5e> 1956 +<4e5f> <4e5f> 3829 +<4e62> <4e62> 4659 +<4e71> <4e71> 3930 +<4e73> <4e73> 3285 +<4e7e> <4e7e> 1505 +<4e7f> <4e7f> 14306 +<4e80> <4e80> 1615 +<4e82> <4e82> 4101 +<4e85> <4e85> 4102 +<4e86> <4e86> 3971 +<4e88> <4e88> 3879 +<4e89> <4e89> 2794 +<4e8a> <4e8a> 4104 +<4e8b> <4e8b> 2244 +<4e8c> <4e8c> 3275 +<4e8d> <4e8d> 14307 +<4e8e> <4e8e> 4107 +<4e91> <4e91> 1248 +<4e92> <4e92> 1939 +<4e94> <4e94> 1938 +<4e95> <4e95> 1194 +<4e96> <4e96> 14308 +<4e98> <4e98> 4081 +<4e99> <4e99> 4080 +<4e9b> <4e9b> 2083 +<4e9c> <4e9c> 1125 +<4e9e> <4ea0> 4108 +<4ea1> <4ea1> 3682 +<4ea2> <4ea2> 4111 +<4ea4> <4ea4> 1958 +<4ea5> <4ea5> 1195 +<4ea6> <4ea6> 3744 +<4ea8> <4ea8> 1686 +<4eab> <4eac> 1687 +<4ead> <4ead> 3070 +<4eae> <4eae> 3972 +<4eb0> <4eb0> 4112 +<4eb3> <4eb3> 4113 +<4eb6> <4eb6> 4114 +<4eb9> <4eb9> 14309 +<4eba> <4eba> 2579 +<4ebb> <4ebb> 13856 +<4ec0> <4ec0> 2372 +<4ec1> <4ec1> 2580 +<4ec2> <4ec2> 4119 +<4ec4> <4ec4> 4117 +<4ec6> <4ec6> 4118 +<4ec7> <4ec7> 1650 +<4eca> <4eca> 2067 +<4ecb> <4ecb> 1392 +<4ecd> <4ecd> 4116 +<4ece> <4ece> 4115 +<4ecf> <4ecf> 3577 +<4ed0> <4ed0> 14310 +endcidrange + +100 begincidrange +<4ed4> <4ed4> 2196 +<4ed5> <4ed5> 2195 +<4ed6> <4ed6> 2846 +<4ed7> <4ed7> 4120 +<4ed8> <4ed8> 3527 +<4ed9> <4ed9> 2699 +<4edd> <4edd> 656 +<4ede> <4ede> 4121 +<4edf> <4edf> 4123 +<4ee0> <4ee0> 14311 +<4ee1> <4ee1> 8372 +<4ee3> <4ee3> 2885 +<4ee4> <4ee4> 4009 +<4ee5> <4ee5> 1166 +<4eed> <4eed> 4122 +<4eee> <4eee> 1342 +<4ef0> <4ef0> 1724 +<4ef2> <4ef2> 2981 +<4ef6> <4ef6> 1861 +<4ef7> <4ef7> 4124 +<4efb> <4efb> 3290 +<4efc> <4efc> 8373 +<4efd> <4efd> 14312 +<4eff> <4eff> 14313 +<4f00> <4f00> 8374 +<4f01> <4f01> 1575 +<4f03> <4f03> 8375 +<4f09> <4f09> 4125 +<4f0a> <4f0a> 1167 +<4f0b> <4f0b> 14314 +<4f0d> <4f0d> 1940 +<4f0e> <4f0e> 1576 +<4f0f> <4f0f> 3564 +<4f10> <4f10> 3398 +<4f11> <4f11> 1651 +<4f15> <4f15> 14315 +<4f1a> <4f1a> 1393 +<4f1c> <4f1c> 4160 +<4f1d> <4f1d> 3131 +<4f2f> <4f2f> 3362 +<4f30> <4f30> 4127 +<4f34> <4f34> 3408 +<4f36> <4f36> 4010 +<4f38> <4f38> 2547 +<4f39> <4f39> 8376 +<4f3a> <4f3a> 2197 +<4f3b> <4f3b> 14317 +<4f3c> <4f3c> 2245 +<4f3d> <4f3d> 1344 +<4f43> <4f43> 3053 +<4f46> <4f46> 2912 +<4f47> <4f47> 4131 +<4f49> <4f49> 14318 +<4f4d> <4f4d> 1168 +<4f4e> <4f4e> 3071 +<4f4f> <4f4f> 2373 +<4f50> <4f50> 2084 +<4f51> <4f51> 3854 +<4f53> <4f53> 2862 +<4f54> <4f54> 14319 +<4f55> <4f55> 1343 +<4f56> <4f56> 8377 +<4f57> <4f57> 4130 +<4f59> <4f59> 3880 +<4f5a> <4f5a> 4126 +<4f5b> <4f5b> 4128 +<4f5c> <4f5c> 2142 +<4f5d> <4f5d> 4129 +<4f5e> <4f5e> 4563 +<4f60> <4f60> 14316 +<4f69> <4f69> 4137 +<4f6f> <4f6f> 4140 +<4f70> <4f70> 4138 +<4f73> <4f73> 1346 +<4f75> <4f75> 3595 +<4f76> <4f76> 4132 +<4f7a> <4f7a> 14320 +<4f7b> <4f7b> 4136 +<4f7c> <4f7c> 1959 +<4f7d> <4f7e> 14321 +<4f7f> <4f7f> 2198 +<4f83> <4f83> 1506 +<4f86> <4f86> 4141 +<4f88> <4f88> 4133 +<4f8a> <4f8a> 8379 +<4f8b> <4f8b> 4011 +<4f8d> <4f8d> 2246 +<4f8f> <4f8f> 4134 +<4f91> <4f91> 4139 +<4f92> <4f92> 8378 +<4f94> <4f94> 8381 +<4f96> <4f96> 4142 +<4f97> <4f97> 14323 +<4f98> <4f98> 4135 +<4f9a> <4f9a> 8380 +<4f9b> <4f9b> 1689 +<4f9d> <4f9d> 1169 +<4fa0> <4fa0> 1690 +<4fa1> <4fa1> 1345 +<4fab> <4fab> 4564 +endcidrange + +100 begincidrange +<4fad> <4fad> 3751 +<4fae> <4fae> 3552 +<4faf> <4faf> 1960 +<4fb5> <4fb5> 2549 +<4fb6> <4fb6> 3967 +<4fbe> <4fbe> 14324 +<4fbf> <4fbf> 3624 +<4fc2> <4fc2> 1806 +<4fc3> <4fc3> 2821 +<4fc4> <4fc4> 1380 +<4fc9> <4fc9> 8364 +<4fca> <4fca> 2397 +<4fcd> <4fcd> 8382 +<4fce> <4fce> 4146 +<4fcf> <4fcf> 14325 +<4fd0> <4fd0> 4151 +<4fd1> <4fd1> 4149 +<4fd3> <4fd3> 15407 +<4fd4> <4fd4> 4144 +<4fd7> <4fd7> 2831 +<4fd8> <4fd8> 4147 +<4fda> <4fda> 4150 +<4fdb> <4fdb> 4148 +<4fdd> <4fdd> 3629 +<4fdf> <4fdf> 4145 +<4fe0> <4fe0> 7660 +<4fe1> <4fe1> 2548 +<4fe3> <4fe3> 3745 +<4fe4> <4fe5> 4152 +<4fee> <4fee> 2350 +<4fef> <4fef> 4166 +<4ff3> <4ff3> 3334 +<4ff5> <4ff5> 3496 +<4ff6> <4ff6> 4161 +<4ff8> <4ff8> 3648 +<4ffa> <4ffa> 1334 +<4ffd> <4ffd> 14326 +<4ffe> <4ffe> 4165 +<4fff> <4fff> 8385 +<5000> <5001> 14327 +<5002> <5002> 13383 +<5005> <5005> 4159 +<5006> <5006> 4168 +<5009> <5009> 2772 +<500b> <500b> 1912 +<500d> <500d> 3346 +<500f> <500f> 5632 +<5010> <5010> 14329 +<5011> <5011> 4167 +<5012> <5012> 3159 +<5014> <5014> 4156 +<5016> <5016> 1962 +<5019> <5019> 1961 +<501a> <501a> 4154 +<501b> <501b> 14330 +<501e> <501e> 8386 +<501f> <501f> 2310 +<5021> <5021> 4162 +<5022> <5022> 8384 +<5023> <5023> 3647 +<5024> <5024> 2955 +<5025> <5025> 4158 +<5026> <5026> 1863 +<5027> <5027> 14331 +<5028> <5028> 4155 +<5029> <5029> 4163 +<502a> <502a> 4157 +<502b> <502b> 3993 +<502c> <502c> 4164 +<502d> <502d> 4071 +<502e> <502e> 14332 +<5036> <5036> 1758 +<5039> <5039> 1862 +<503b> <503b> 14336 +<5040> <5040> 8383 +<5042> <5042> 8389 +<5043> <5043> 4169 +<5046> <5046> 8387 +<5047> <5047> 4170 +<5048> <5048> 4174 +<5049> <5049> 1170 +<504f> <504f> 3616 +<5050> <5050> 4173 +<5055> <5055> 4172 +<5056> <5056> 4176 +<5057> <5057> 14333 +<505a> <505a> 4175 +<505c> <505c> 3072 +<5065> <5065> 1864 +<5066> <5066> 14334 +<506a> <506a> 14335 +<506c> <506c> 4177 +<5070> <5070> 8388 +<5072> <5072> 2289 +<5074> <5074> 2822 +<5075> <5075> 3073 +<5076> <5076> 1774 +<5078> <5078> 4178 +<507d> <507d> 1616 +<5080> <5080> 4179 +endcidrange + +100 begincidrange +<5085> <5085> 4181 +<508d> <508d> 3683 +<508f> <508f> 14337 +<5091> <5091> 1852 +<5094> <5094> 8390 +<5096> <5096> 14338 +<5098> <5098> 2175 +<5099> <5099> 3467 +<509a> <509a> 4180 +<509c> <509c> 14339 +<50ac> <50ac> 2101 +<50ad> <50ad> 3885 +<50b2> <50b2> 4183 +<50b3> <50b3> 4186 +<50b4> <50b4> 4182 +<50b5> <50b5> 2100 +<50b7> <50b7> 2439 +<50be> <50be> 1807 +<50c2> <50c2> 4187 +<50c5> <50c5> 1735 +<50c9> <50ca> 4184 +<50cc> <50cc> 14340 +<50cd> <50cd> 3207 +<50cf> <50cf> 2814 +<50d1> <50d1> 1691 +<50d5> <50d5> 3707 +<50d6> <50d6> 4188 +<50d8> <50d8> 8392 +<50d9> <50d9> 15408 +<50da> <50da> 3973 +<50de> <50de> 4189 +<50e3> <50e3> 4192 +<50e5> <50e5> 4190 +<50e6> <50e6> 14341 +<50e7> <50e7> 2768 +<50e9> <50e9> 14342 +<50ed> <50ed> 4191 +<50ee> <50ee> 4193 +<50ef> <50ef> 14343 +<50f0> <50f0> 15409 +<50f4> <50f4> 8391 +<50f5> <50f5> 4195 +<50f9> <50f9> 4194 +<50fb> <50fb> 3608 +<5100> <5100> 1617 +<5101> <5102> 4197 +<5104> <5104> 1327 +<5108> <5108> 14344 +<5109> <5109> 4196 +<510b> <510b> 14345 +<5110> <5110> 14346 +<5112> <5112> 2336 +<5114> <5114> 4201 +<5115> <5115> 4200 +<5116> <5116> 4199 +<5118> <5118> 4143 +<511a> <511a> 4202 +<511b> <511b> 14347 +<511e> <511e> 14348 +<511f> <511f> 2440 +<5121> <5121> 4203 +<512a> <512a> 3855 +<5132> <5132> 3813 +<5137> <5137> 4205 +<513a> <513a> 4204 +<513b> <513b> 4207 +<513c> <513c> 4206 +<513f> <5140> 4208 +<5141> <5141> 1208 +<5143> <5143> 1897 +<5144> <5144> 1809 +<5145> <5145> 2374 +<5146> <5146> 3001 +<5147> <5147> 1692 +<5148> <5148> 2700 +<5149> <5149> 1963 +<514a> <514a> 8393 +<514b> <514b> 2048 +<514c> <514c> 4211 +<514d> <514d> 3796 +<514e> <514e> 3136 +<5150> <5150> 2247 +<5152> <5152> 4210 +<5154> <5154> 4212 +<515a> <515a> 3160 +<515c> <515c> 1491 +<515f> <515f> 14349 +<5162> <5162> 4213 +<5164> <5164> 8394 +<5165> <5165> 3286 +<5167> <5167> 13966 +<5168> <5168> 2742 +<5169> <516a> 4215 +<516b> <516b> 3392 +<516c> <516c> 1964 +<516d> <516d> 4065 +<516e> <516e> 4217 +<5171> <5171> 1694 +<5175> <5175> 3596 +<5176> <5176> 2838 +endcidrange + +100 begincidrange +<5177> <5177> 1769 +<5178> <5178> 3119 +<5179> <5179> 14201 +<517c> <517c> 1865 +<5180> <5180> 4218 +<5182> <5182> 4219 +<5185> <5185> 3258 +<5186> <5186> 1281 +<5189> <5189> 4222 +<518a> <518a> 2157 +<518c> <518c> 4221 +<518d> <518d> 2102 +<518f> <518f> 4223 +<5190> <5190> 6235 +<5191> <5191> 4224 +<5192> <5192> 3695 +<5193> <5193> 4225 +<5195> <5196> 4226 +<5197> <5197> 2513 +<5199> <5199> 2296 +<519d> <519d> 8395 +<51a0> <51a0> 1507 +<51a1> <51a1> 14350 +<51a2> <51a2> 4230 +<51a4> <51a4> 4228 +<51a5> <51a5> 3785 +<51a6> <51a6> 4229 +<51a8> <51a8> 3532 +<51a9> <51ab> 4231 +<51ac> <51ac> 3161 +<51b0> <51b0> 4237 +<51b1> <51b2> 4235 +<51b3> <51b3> 4234 +<51b4> <51b4> 2131 +<51b5> <51b5> 4238 +<51b6> <51b6> 3830 +<51b7> <51b7> 4012 +<51bc> <51bc> 14351 +<51bd> <51bd> 4239 +<51be> <51be> 8396 +<51c3> <51c3> 15410 +<51c4> <51c4> 2636 +<51c5> <51c5> 4240 +<51c6> <51c6> 2404 +<51c9> <51c9> 4241 +<51cb> <51cb> 3002 +<51cc> <51cc> 3975 +<51cd> <51cd> 3162 +<51d6> <51d6> 4314 +<51db> <51db> 4242 +<51dc> <51dc> 8284 +<51dd> <51dd> 1725 +<51de> <51de> 14352 +<51e0> <51e0> 4243 +<51e1> <51e1> 3724 +<51e6> <51e6> 2418 +<51e7> <51e7> 2908 +<51e9> <51e9> 4245 +<51ea> <51ea> 3260 +<51ec> <51ec> 8397 +<51ed> <51ed> 4246 +<51ee> <51ee> 14353 +<51f0> <51f0> 4247 +<51f1> <51f1> 1420 +<51f4> <51f4> 14354 +<51f5> <51f5> 4248 +<51f6> <51f6> 1695 +<51f8> <51f8> 3236 +<51f9> <51f9> 1308 +<51fa> <51fa> 2394 +<51fd> <51fd> 3381 +<51fe> <51fe> 4249 +<5200> <5200> 3163 +<5201> <5202> 14355 +<5203> <5203> 2581 +<5204> <5204> 4250 +<5206> <5206> 3580 +<5207> <5207> 2686 +<5208> <5208> 1502 +<520a> <520a> 1509 +<520b> <520b> 4251 +<520e> <520e> 4253 +<5211> <5211> 1808 +<5213> <5213> 14357 +<5214> <5214> 4252 +<5215> <5215> 8398 +<5217> <5217> 4027 +<521d> <521d> 2419 +<5224> <5224> 3409 +<5225> <5225> 3612 +<5227> <5227> 4254 +<5229> <5229> 3938 +<522a> <522a> 4255 +<522e> <522e> 4256 +<5230> <5230> 3192 +<5233> <5233> 4257 +<5236> <5236> 2637 +<5237> <5237> 2158 +<5238> <5238> 1866 +<5239> <5239> 4258 +endcidrange + +100 begincidrange +<523a> <523a> 2199 +<523b> <523b> 2049 +<5243> <5243> 3074 +<5244> <5244> 4260 +<5247> <5247> 2823 +<5249> <5249> 14358 +<524a> <524a> 2143 +<524b> <524c> 4261 +<524d> <524d> 2738 +<524f> <524f> 4259 +<5254> <5254> 4264 +<5256> <5256> 3684 +<525b> <525b> 2038 +<525d> <525d> 7774 +<525e> <525e> 4263 +<5261> <5261> 14359 +<5263> <5263> 1867 +<5264> <5264> 2126 +<5265> <5265> 3363 +<5266> <5266> 14360 +<5269> <5269> 4267 +<526a> <526a> 4265 +<526f> <526f> 3565 +<5270> <5270> 2514 +<5271> <5271> 4274 +<5272> <5272> 1474 +<5273> <5273> 4268 +<5274> <5274> 4266 +<5275> <5275> 2769 +<527d> <527d> 4270 +<527f> <527f> 4269 +<5283> <5283> 1442 +<5287> <5287> 1846 +<5288> <5288> 4275 +<5289> <5289> 3957 +<528d> <528d> 4271 +<5291> <5291> 4276 +<5292> <5292> 4273 +<5293> <5293> 14361 +<5294> <5294> 4272 +<529b> <529b> 3991 +<529c> <529c> 8399 +<529f> <529f> 1965 +<52a0> <52a0> 1347 +<52a3> <52a3> 4028 +<52a6> <52a6> 8400 +<52a9> <52a9> 2431 +<52aa> <52aa> 3154 +<52ab> <52ab> 2039 +<52ac> <52ad> 4279 +<52af> <52af> 8573 +<52b1> <52b1> 4013 +<52b4> <52b4> 4049 +<52b5> <52b5> 4282 +<52b9> <52b9> 1966 +<52bc> <52bc> 4281 +<52be> <52be> 1421 +<52c0> <52c0> 8401 +<52c1> <52c1> 4283 +<52c3> <52c3> 3716 +<52c5> <52c5> 3032 +<52c7> <52c7> 3856 +<52c8> <52c8> 14362 +<52c9> <52c9> 3625 +<52cd> <52cd> 4284 +<52d0> <52d0> 14056 +<52d2> <52d2> 7150 +<52d5> <52d5> 3208 +<52d7> <52d7> 4285 +<52d8> <52d8> 1510 +<52d9> <52d9> 3775 +<52db> <52db> 8402 +<52dd> <52dd> 2441 +<52de> <52de> 4286 +<52df> <52df> 3639 +<52e0> <52e0> 4290 +<52e2> <52e2> 2638 +<52e3> <52e3> 4287 +<52e4> <52e4> 1736 +<52e6> <52e6> 4288 +<52e7> <52e7> 1511 +<52f0> <52f0> 14363 +<52f2> <52f2> 1796 +<52f3> <52f3> 4291 +<52f5> <52f5> 4292 +<52f8> <52f9> 4293 +<52fa> <52fa> 2311 +<52fe> <52fe> 1967 +<52ff> <52ff> 3818 +<5300> <5300> 8403 +<5301> <5301> 3828 +<5302> <5302> 3279 +<5305> <5305> 3649 +<5306> <5306> 4295 +<5307> <5307> 8404 +<5308> <5308> 4296 +<530a> <530b> 14364 +<530d> <530d> 4298 +<530f> <530f> 4300 +<5310> <5310> 4299 +endcidrange + +100 begincidrange +<5315> <5315> 4301 +<5316> <5316> 1341 +<5317> <5317> 3706 +<5319> <5319> 2156 +<531a> <531a> 4302 +<531d> <531d> 2779 +<5320> <5320> 2442 +<5321> <5321> 1697 +<5323> <5323> 4303 +<5324> <5324> 8405 +<532a> <532a> 3439 +<532f> <532f> 4304 +<5331> <5331> 4305 +<5333> <5333> 4306 +<5338> <5338> 4307 +<5339> <5339> 3478 +<533a> <533a> 1760 +<533b> <533b> 1193 +<533e> <533e> 14366 +<533f> <533f> 3223 +<5340> <5340> 4308 +<5341> <5341> 2375 +<5343> <5343> 2701 +<5345> <5345> 4310 +<5346> <5346> 4309 +<5347> <5347> 2443 +<5348> <5348> 1941 +<5349> <5349> 4312 +<534a> <534a> 3410 +<534b> <534b> 14368 +<534c> <534c> 14367 +<534d> <534d> 4313 +<5351> <5351> 3440 +<5352> <5352> 2836 +<5353> <5353> 2894 +<5354> <5354> 1696 +<5357> <5357> 3270 +<5358> <5358> 2927 +<535a> <535a> 3364 +<535c> <535c> 3708 +<535e> <535e> 4315 +<5360> <5360> 2702 +<5361> <5361> 14369 +<5366> <5366> 1803 +<5369> <5369> 4316 +<536c> <536c> 14370 +<536e> <536e> 4317 +<536f> <536f> 1230 +<5370> <5370> 1209 +<5371> <5371> 1577 +<5372> <5372> 8406 +<5373> <5373> 2824 +<5374> <5374> 1643 +<5375> <5375> 3931 +<5377> <5377> 4320 +<5378> <5378> 1335 +<537b> <537b> 4319 +<537d> <537d> 13365 +<537f> <537f> 1698 +<5382> <5382> 4321 +<5384> <5384> 3837 +<5389> <5389> 14288 +<5393> <5393> 8407 +<5396> <5396> 4322 +<5398> <5398> 3994 +<539a> <539a> 1968 +<539f> <539f> 1898 +<53a0> <53a0> 4323 +<53a5> <53a5> 4325 +<53a6> <53a6> 4324 +<53a8> <53a8> 2597 +<53a9> <53a9> 1243 +<53ab> <53ab> 14371 +<53ad> <53ad> 1280 +<53ae> <53ae> 4326 +<53b0> <53b0> 4327 +<53b2> <53b2> 8408 +<53b3> <53b3> 1899 +<53b6> <53b6> 4328 +<53bb> <53bb> 1672 +<53c2> <53c2> 2176 +<53c3> <53c3> 4329 +<53c8> <53c8> 3746 +<53c9> <53c9> 2085 +<53ca> <53ca> 1652 +<53cb> <53cb> 3857 +<53cc> <53cc> 2770 +<53cd> <53cd> 3411 +<53ce> <53ce> 2345 +<53d4> <53d4> 2385 +<53d6> <53d6> 2324 +<53d7> <53d7> 2337 +<53d9> <53d9> 2432 +<53da> <53da> 14372 +<53db> <53db> 3412 +<53dd> <53dd> 8409 +<53df> <53df> 4332 +<53e1> <53e1> 1253 +<53e2> <53e2> 2771 +<53e3> <53e3> 1969 +endcidrange + +100 begincidrange +<53e4> <53e4> 1913 +<53e5> <53e5> 1759 +<53e6> <53e6> 14373 +<53e8> <53e8> 4336 +<53e9> <53e9> 2911 +<53ea> <53ea> 2910 +<53eb> <53eb> 1699 +<53ec> <53ec> 2444 +<53ed> <53ed> 4337 +<53ee> <53ee> 4335 +<53ef> <53ef> 1348 +<53f0> <53f0> 2886 +<53f1> <53f1> 2276 +<53f2> <53f2> 2201 +<53f3> <53f3> 1224 +<53f5> <53f5> 14374 +<53f6> <53f6> 1486 +<53f7> <53f7> 2040 +<53f8> <53f8> 2200 +<53fa> <53fa> 4338 +<5401> <5401> 4339 +<5403> <5403> 1635 +<5404> <5404> 1444 +<5408> <5408> 2041 +<5409> <5409> 1634 +<540a> <540a> 3067 +<540b> <540b> 1223 +<540c> <540c> 3209 +<540d> <540d> 3786 +<540e> <540e> 1971 +<540f> <540f> 3939 +<5410> <5410> 3137 +<5411> <5411> 1970 +<541b> <541b> 1797 +<541d> <541d> 4348 +<541f> <541f> 1755 +<5420> <5420> 3704 +<5426> <5426> 3441 +<5427> <5427> 14375 +<5429> <5429> 4347 +<542b> <542b> 1562 +<542c> <542d> 4342 +<542e> <542e> 4345 +<5433> <5433> 13760 +<5436> <5436> 4346 +<5438> <5438> 1653 +<5439> <5439> 2599 +<543b> <543b> 3581 +<543c> <543c> 4344 +<543d> <543d> 4340 +<543e> <543e> 1943 +<543f> <543f> 13775 +<5440> <5440> 4341 +<5442> <5442> 4042 +<5446> <5446> 3650 +<5448> <5448> 3076 +<5449> <5449> 1942 +<544a> <544a> 2050 +<544d> <544d> 14376 +<544e> <544e> 4349 +<5451> <5451> 3253 +<5455> <5455> 14115 +<545f> <545f> 4353 +<5466> <5466> 14377 +<5468> <5468> 2346 +<546a> <546a> 2338 +<546b> <546b> 14378 +<5470> <5470> 4356 +<5471> <5471> 4354 +<5473> <5473> 3759 +<5474> <5474> 14379 +<5475> <5475> 4351 +<5476> <5476> 4360 +<5477> <5477> 4355 +<547b> <547b> 4358 +<547c> <547c> 1914 +<547d> <547d> 3787 +<5480> <5480> 4359 +<5484> <5484> 4361 +<5486> <5486> 4363 +<548a> <548a> 8412 +<548b> <548b> 2144 +<548c> <548c> 4072 +<548d> <548d> 14380 +<548e> <548e> 4352 +<548f> <548f> 4350 +<5490> <5490> 4362 +<5492> <5492> 4357 +<5496> <5496> 14381 +<549c> <549c> 8411 +<54a1> <54a1> 14382 +<54a2> <54a2> 4365 +<54a4> <54a4> 4374 +<54a5> <54a5> 4367 +<54a8> <54a8> 4371 +<54a9> <54a9> 8413 +<54ab> <54ab> 4372 +<54ac> <54ac> 4368 +<54ad> <54ad> 14383 +<54af> <54af> 4401 +endcidrange + +100 begincidrange +<54b2> <54b2> 2137 +<54b3> <54b3> 1423 +<54b8> <54b8> 4366 +<54b9> <54b9> 14384 +<54bc> <54bc> 4376 +<54bd> <54bd> 1210 +<54be> <54be> 4375 +<54bf> <54bf> 14385 +<54c0> <54c0> 1129 +<54c1> <54c1> 3516 +<54c2> <54c2> 4373 +<54c4> <54c4> 4369 +<54c6> <54c6> 14386 +<54c7> <54c7> 4364 +<54c8> <54c8> 4370 +<54c9> <54c9> 2104 +<54cd> <54cd> 14387 +<54d8> <54d8> 4377 +<54e1> <54e1> 1211 +<54e2> <54e2> 4386 +<54e5> <54e6> 4378 +<54e8> <54e8> 2445 +<54e9> <54e9> 3735 +<54ed> <54ed> 4384 +<54ee> <54ee> 4383 +<54f2> <54f2> 3113 +<54fa> <54fa> 4385 +<54fd> <54fd> 4382 +<54ff> <54ff> 8414 +<5504> <5504> 1238 +<5506> <5506> 2086 +<5507> <5507> 2550 +<550e> <550e> 14388 +<550f> <550f> 4380 +<5510> <5510> 3164 +<5514> <5514> 4381 +<5516> <5516> 1126 +<552b> <552b> 14389 +<552e> <552e> 4391 +<552f> <552f> 3853 +<5531> <5531> 2447 +<5533> <5533> 4397 +<5535> <5535> 14390 +<5538> <5538> 4396 +<5539> <5539> 4387 +<553e> <553e> 2851 +<5540> <5540> 4388 +<5544> <5544> 2895 +<5545> <5545> 4393 +<5546> <5546> 2446 +<554a> <554a> 14391 +<554c> <554c> 4390 +<554f> <554f> 3824 +<5553> <5553> 1810 +<5556> <5557> 4394 +<555c> <555c> 4392 +<555d> <555d> 4398 +<555e> <555e> 7633 +<5560> <5561> 14392 +<5563> <5563> 4389 +<557b> <557b> 4404 +<557c> <557c> 4409 +<557e> <557e> 4405 +<5580> <5580> 4400 +<5583> <5583> 4410 +<5584> <5584> 2739 +<5586> <5586> 8415 +<5587> <5587> 4412 +<5588> <5588> 14394 +<5589> <5589> 1972 +<558a> <558a> 4402 +<558b> <558b> 3003 +<558e> <558e> 14395 +<5598> <5598> 4406 +<5599> <5599> 4399 +<559a> <559a> 1513 +<559c> <559c> 1578 +<559d> <559d> 1475 +<559e> <559e> 4407 +<559f> <559f> 4403 +<55a7> <55a7> 1868 +<55a8> <55a8> 4413 +<55a9> <55a9> 4411 +<55aa> <55aa> 2773 +<55ab> <55ab> 1636 +<55ac> <55ac> 1700 +<55ae> <55ae> 4408 +<55b0> <55b0> 1772 +<55b6> <55b6> 1254 +<55c4> <55c4> 4417 +<55c5> <55c5> 4415 +<55c7> <55c7> 4472 +<55d4> <55d4> 4420 +<55da> <55da> 4414 +<55dc> <55dc> 4418 +<55df> <55df> 4416 +<55e3> <55e3> 2202 +<55e4> <55e4> 4419 +<55f7> <55f7> 4422 +<55f9> <55f9> 4427 +endcidrange + +100 begincidrange +<55fd> <55fd> 4425 +<55fe> <55fe> 4424 +<5606> <5606> 2928 +<5608> <5608> 14396 +<5609> <5609> 1349 +<560e> <560f> 14397 +<5614> <5614> 4421 +<5616> <5616> 4423 +<5617> <5617> 2448 +<5618> <5618> 1237 +<561b> <561b> 4426 +<5620> <5620> 15389 +<5629> <5629> 1374 +<562f> <562f> 4437 +<5631> <5631> 2532 +<5632> <5632> 4433 +<5634> <5634> 4431 +<5636> <5636> 4432 +<5637> <5637> 14399 +<5638> <5638> 4434 +<563f> <563f> 14400 +<5642> <5642> 1247 +<5649> <5649> 14401 +<564b> <564b> 14402 +<564c> <564c> 2747 +<564e> <564e> 4428 +<564f> <564f> 14403 +<5650> <5650> 4429 +<5653> <5653> 7963 +<565b> <565b> 1496 +<5664> <5664> 4436 +<5666> <5666> 14404 +<5668> <5668> 1579 +<5669> <5669> 14405 +<566a> <566a> 4439 +<566b> <566b> 4435 +<566c> <566c> 4438 +<566f> <566f> 14406 +<5671> <5672> 14407 +<5674> <5674> 3582 +<5676> <5676> 15411 +<5678> <5678> 3245 +<567a> <567a> 3404 +<5680> <5680> 4441 +<5686> <5686> 4440 +<5687> <5687> 1443 +<568a> <568a> 4442 +<568f> <568f> 4445 +<5694> <5694> 4444 +<5695> <5695> 14409 +<5699> <5699> 7654 +<569a> <569a> 14410 +<56a0> <56a0> 4443 +<56a2> <56a2> 3311 +<56a5> <56a5> 4446 +<56ac> <56ad> 14411 +<56ae> <56ae> 4447 +<56b1> <56b1> 14413 +<56b4> <56b4> 4449 +<56b6> <56b6> 4448 +<56bc> <56bc> 4451 +<56c0> <56c0> 4454 +<56c1> <56c1> 4452 +<56c2> <56c2> 4450 +<56c3> <56c3> 4453 +<56c8> <56c8> 4455 +<56c9> <56c9> 14414 +<56ca> <56ca> 7770 +<56ce> <56ce> 4456 +<56d1> <56d1> 4457 +<56d3> <56d3> 4458 +<56d7> <56d7> 4459 +<56d8> <56d8> 4220 +<56da> <56da> 2344 +<56db> <56db> 2203 +<56dd> <56dd> 14415 +<56de> <56de> 1395 +<56e0> <56e0> 1212 +<56e3> <56e3> 2946 +<56e4> <56e4> 14416 +<56ee> <56ee> 4460 +<56f0> <56f0> 2068 +<56f2> <56f2> 1171 +<56f3> <56f3> 2596 +<56f9> <56f9> 4461 +<56fa> <56fa> 1915 +<56fd> <56fd> 2051 +<56ff> <56ff> 4463 +<5700> <5700> 4462 +<5703> <5703> 3632 +<5704> <5704> 4464 +<5708> <5708> 4466 +<5709> <5709> 4465 +<570a> <570a> 14417 +<570b> <570b> 4467 +<570d> <570d> 4468 +<570f> <570f> 1869 +<5712> <5712> 1282 +<5713> <5713> 4469 +<5715> <5715> 14418 +endcidrange + +100 begincidrange +<5716> <5716> 4471 +<5718> <5718> 4470 +<571c> <571c> 4473 +<571f> <571f> 3156 +<5721> <5721> 13952 +<5723> <5723> 14419 +<5726> <5726> 4474 +<5727> <5727> 1145 +<5728> <5728> 2127 +<572d> <572d> 1811 +<572f> <572f> 14420 +<5730> <5730> 2957 +<5733> <5734> 14421 +<5737> <5738> 4475 +<573b> <573b> 4478 +<5740> <5740> 4479 +<5742> <5742> 2132 +<5747> <5747> 1737 +<574a> <574a> 3685 +<574c> <574c> 14423 +<574e> <574e> 4477 +<574f> <574f> 4480 +<5750> <5750> 2097 +<5751> <5751> 1973 +<5759> <5759> 8416 +<5761> <5761> 4484 +<5764> <5764> 2069 +<5765> <5765> 8417 +<5766> <5766> 2929 +<5769> <5769> 4481 +<576a> <576a> 3062 +<5770> <5770> 14424 +<577f> <577f> 4485 +<5782> <5782> 2600 +<5788> <5788> 4483 +<5789> <5789> 4486 +<578b> <578b> 1813 +<578c> <578c> 14425 +<5793> <5793> 4487 +<579c> <579c> 14426 +<57a0> <57a0> 4488 +<57a2> <57a2> 1974 +<57a3> <57a3> 1438 +<57a4> <57a4> 4490 +<57aa> <57aa> 4491 +<57ac> <57ac> 8418 +<57b0> <57b0> 4492 +<57b3> <57b3> 4489 +<57b8> <57b8> 14427 +<57c0> <57c0> 4482 +<57c3> <57c3> 4493 +<57c6> <57c6> 4494 +<57c7> <57c7> 8420 +<57c8> <57c8> 8419 +<57cb> <57cb> 3730 +<57ce> <57ce> 2515 +<57d2> <57d3> 4496 +<57d4> <57d4> 4495 +<57d6> <57d6> 4499 +<57dc> <57dc> 3310 +<57df> <57df> 1196 +<57e0> <57e0> 3528 +<57e3> <57e3> 4500 +<57e6> <57e6> 14428 +<57ed> <57ed> 14429 +<57f4> <57f4> 2533 +<57f5> <57f6> 14430 +<57f7> <57f7> 2277 +<57f9> <57f9> 3347 +<57fa> <57fa> 1580 +<57fc> <57fc> 2139 +<57ff> <57ff> 14432 +<5800> <5800> 3719 +<5802> <5802> 3210 +<5805> <5805> 1870 +<5806> <5806> 2863 +<5809> <5809> 14433 +<580a> <580a> 4498 +<580b> <580b> 4501 +<5815> <5815> 2852 +<5819> <5819> 4502 +<581d> <581d> 4503 +<5820> <5820> 14434 +<5821> <5821> 4505 +<5824> <5824> 3077 +<582a> <582a> 1514 +<582f> <582f> 7474 +<5830> <5830> 1283 +<5831> <5831> 3651 +<5832> <5832> 14435 +<5834> <5834> 2516 +<5835> <5835> 3138 +<583a> <583a> 2134 +<583d> <583d> 4511 +<5840> <5840> 3597 +<5841> <5841> 4005 +<584a> <584a> 1396 +<584b> <584b> 4507 +<5851> <5851> 2748 +<5852> <5852> 4510 +endcidrange + +100 begincidrange +<5854> <5854> 3165 +<5857> <5857> 3139 +<5858> <5858> 3166 +<5859> <5859> 3405 +<585a> <585a> 3049 +<585e> <585e> 2105 +<5861> <5861> 7751 +<5862> <5862> 4506 +<5869> <5869> 1304 +<586b> <586b> 3120 +<5870> <5870> 4508 +<5872> <5872> 4504 +<5875> <5875> 2582 +<5879> <5879> 4512 +<587c> <587c> 14436 +<587e> <587e> 2392 +<5880> <5880> 14437 +<5883> <5883> 1701 +<5885> <5885> 4513 +<5893> <5893> 3640 +<5897> <5897> 2815 +<589c> <589c> 3042 +<589e> <589e> 8423 +<589f> <589f> 4515 +<58a8> <58a8> 3709 +<58a9> <58a9> 14438 +<58ab> <58ab> 4516 +<58ae> <58ae> 4521 +<58b2> <58b2> 8424 +<58b3> <58b3> 3583 +<58b8> <58b8> 4520 +<58b9> <58b9> 4514 +<58ba> <58ba> 4517 +<58bb> <58bb> 4519 +<58be> <58be> 2070 +<58c1> <58c1> 3609 +<58c5> <58c5> 4522 +<58c7> <58c7> 2947 +<58ca> <58ca> 1397 +<58cc> <58cc> 2517 +<58ce> <58ce> 14439 +<58d0> <58d0> 14440 +<58d1> <58d1> 4524 +<58d3> <58d3> 4523 +<58d4> <58d4> 14441 +<58d5> <58d5> 2042 +<58d7> <58d7> 4525 +<58d8> <58d8> 4527 +<58d9> <58d9> 4526 +<58da> <58da> 14442 +<58dc> <58dc> 4529 +<58de> <58de> 4518 +<58df> <58df> 4531 +<58e4> <58e4> 4530 +<58e5> <58e5> 4528 +<58e9> <58e9> 14443 +<58eb> <58eb> 2204 +<58ec> <58ec> 2583 +<58ee> <58ee> 2774 +<58ef> <58ef> 4532 +<58f0> <58f0> 2656 +<58f1> <58f1> 1201 +<58f2> <58f2> 3354 +<58f7> <58f7> 3063 +<58f9> <58f9> 4534 +<58fa> <58fa> 4533 +<58fb> <58fd> 4535 +<5902> <5902> 4538 +<5909> <5909> 3617 +<590a> <590a> 4539 +<590b> <590b> 8425 +<590c> <590c> 14444 +<590f> <590f> 1350 +<5910> <5910> 4540 +<5915> <5915> 3878 +<5916> <5916> 1422 +<5918> <5918> 4318 +<5919> <5919> 2386 +<591a> <591a> 2847 +<591b> <591b> 4541 +<591c> <591c> 3831 +<5922> <5922> 3776 +<5924> <5924> 14445 +<5925> <5925> 4543 +<5927> <5927> 2887 +<5929> <5929> 3121 +<592a> <592a> 2848 +<592b> <592b> 3529 +<592c> <592d> 4544 +<592e> <592e> 1309 +<592f> <592f> 14446 +<5931> <5931> 2278 +<5932> <5932> 4546 +<5937> <5937> 1172 +<5938> <5938> 4547 +<5939> <5939> 14117 +<593e> <593e> 4548 +<5944> <5944> 1284 +<5947> <5947> 1581 +<5948> <5948> 3256 +endcidrange + +100 begincidrange +<5949> <5949> 3652 +<594e> <594e> 4552 +<594f> <594f> 2775 +<5950> <5950> 4551 +<5951> <5951> 1814 +<5953> <5953> 8426 +<5954> <5954> 3721 +<5955> <5955> 4550 +<5957> <5957> 3167 +<5958> <5958> 4554 +<595a> <595a> 4553 +<595b> <595b> 8427 +<595d> <595d> 8428 +<5960> <5960> 4556 +<5961> <5961> 14447 +<5962> <5962> 4555 +<5963> <5963> 8429 +<5965> <5965> 1310 +<5967> <5967> 4557 +<5968> <5968> 2449 +<5969> <5969> 4559 +<596a> <596a> 2915 +<596c> <596c> 4558 +<596d> <596d> 14448 +<596e> <596e> 3587 +<5973> <5973> 2433 +<5974> <5974> 3157 +<5978> <5978> 4560 +<597d> <597d> 1975 +<5981> <5981> 4561 +<5982> <5982> 3287 +<5983> <5983> 3442 +<5984> <5984> 3805 +<598a> <598a> 3291 +<598d> <598d> 4570 +<5993> <5993> 1618 +<5996> <5996> 3887 +<5999> <5999> 3771 +<599b> <599b> 4665 +<599d> <599d> 4562 +<59a3> <59a3> 4565 +<59a4> <59a4> 8430 +<59a5> <59a5> 2853 +<59a8> <59a8> 3686 +<59ac> <59ac> 3140 +<59b2> <59b2> 4566 +<59b9> <59b9> 3731 +<59ba> <59ba> 8431 +<59bb> <59bb> 2106 +<59be> <59be> 2450 +<59c6> <59c6> 4567 +<59c9> <59c9> 2206 +<59ca> <59ca> 14449 +<59cb> <59cb> 2205 +<59d0> <59d0> 1149 +<59d1> <59d1> 1916 +<59d2> <59d2> 14450 +<59d3> <59d3> 2639 +<59d4> <59d4> 1173 +<59d9> <59da> 4571 +<59dc> <59dc> 4569 +<59dd> <59dd> 14451 +<59e3> <59e4> 14452 +<59e5> <59e5> 1242 +<59e6> <59e6> 1515 +<59e8> <59e8> 4568 +<59ea> <59ea> 3793 +<59eb> <59eb> 3491 +<59ec> <59ec> 13997 +<59f6> <59f6> 1132 +<59fb> <59fb> 1213 +<59ff> <59ff> 2207 +<5a01> <5a01> 1174 +<5a03> <5a03> 1127 +<5a04> <5a04> 14454 +<5a09> <5a09> 4577 +<5a0c> <5a0c> 14455 +<5a11> <5a11> 4575 +<5a18> <5a18> 3784 +<5a1a> <5a1a> 4578 +<5a1b> <5a1b> 13761 +<5a1c> <5a1c> 4576 +<5a1f> <5a1f> 4574 +<5a20> <5a20> 2551 +<5a23> <5a23> 14456 +<5a25> <5a25> 4573 +<5a29> <5a29> 3626 +<5a2f> <5a2f> 1944 +<5a35> <5a36> 4582 +<5a3c> <5a3c> 2451 +<5a40> <5a40> 4579 +<5a41> <5a41> 4050 +<5a46> <5a46> 3330 +<5a47> <5a47> 14457 +<5a49> <5a49> 4581 +<5a55> <5a55> 14458 +<5a5a> <5a5a> 2071 +<5a62> <5a62> 4584 +<5a63> <5a63> 14459 +<5a66> <5a66> 3530 +endcidrange + +100 begincidrange +<5a6a> <5a6a> 4585 +<5a6c> <5a6c> 4580 +<5a6d> <5a6d> 14460 +<5a7e> <5a7e> 14461 +<5a7f> <5a7f> 3783 +<5a92> <5a92> 3348 +<5a9a> <5a9a> 4586 +<5a9b> <5a9b> 3492 +<5a9e> <5a9e> 14462 +<5aa7> <5aa7> 14463 +<5aac> <5aac> 14464 +<5ab3> <5ab3> 14465 +<5abc> <5abc> 4587 +<5abd> <5abd> 4591 +<5abe> <5abe> 4588 +<5ac1> <5ac1> 1351 +<5ac2> <5ac2> 4590 +<5ac9> <5ac9> 2279 +<5acb> <5acb> 4589 +<5acc> <5acc> 1871 +<5ad0> <5ad0> 4603 +<5ad6> <5ad6> 4596 +<5ad7> <5ad7> 4593 +<5ae0> <5ae0> 14466 +<5ae1> <5ae1> 2978 +<5ae3> <5ae3> 4592 +<5ae6> <5ae6> 4594 +<5ae9> <5ae9> 4595 +<5afa> <5afb> 4597 +<5b00> <5b00> 14467 +<5b09> <5b09> 1582 +<5b0b> <5b0b> 4600 +<5b0c> <5b0c> 4599 +<5b16> <5b16> 4601 +<5b19> <5b19> 14468 +<5b22> <5b22> 2518 +<5b25> <5b25> 14469 +<5b2a> <5b2a> 4604 +<5b2c> <5b2c> 3064 +<5b2d> <5b2d> 14470 +<5b30> <5b30> 1255 +<5b32> <5b32> 4602 +<5b36> <5b36> 4605 +<5b3e> <5b3e> 4606 +<5b40> <5b40> 4609 +<5b41> <5b41> 14471 +<5b43> <5b43> 4607 +<5b45> <5b45> 4608 +<5b50> <5b50> 2208 +<5b51> <5b51> 4610 +<5b54> <5b54> 1976 +<5b55> <5b55> 4611 +<5b56> <5b56> 8432 +<5b57> <5b57> 2248 +<5b58> <5b58> 2840 +<5b5a> <5b5b> 4612 +<5b5c> <5b5c> 2216 +<5b5d> <5b5d> 1977 +<5b5f> <5b5f> 3806 +<5b63> <5b63> 1602 +<5b64> <5b64> 1917 +<5b65> <5b65> 4614 +<5b66> <5b66> 1462 +<5b69> <5b69> 4615 +<5b6b> <5b6b> 2841 +<5b70> <5b70> 4616 +<5b71> <5b71> 4656 +<5b73> <5b73> 4617 +<5b75> <5b75> 4618 +<5b78> <5b78> 4619 +<5b7a> <5b7a> 4621 +<5b7c> <5b7c> 14472 +<5b7e> <5b7f> 14473 +<5b80> <5b80> 4622 +<5b82> <5b82> 13840 +<5b83> <5b83> 4623 +<5b85> <5b85> 2896 +<5b87> <5b87> 1225 +<5b88> <5b88> 2325 +<5b89> <5b89> 1158 +<5b8a> <5b8a> 14475 +<5b8b> <5b8b> 2777 +<5b8c> <5b8c> 1516 +<5b8d> <5b8d> 2273 +<5b8f> <5b8f> 1978 +<5b95> <5b95> 3168 +<5b97> <5b97> 2347 +<5b98> <5b98> 1517 +<5b99> <5b99> 2982 +<5b9a> <5b9a> 3078 +<5b9b> <5b9b> 1148 +<5b9c> <5b9c> 1619 +<5b9d> <5b9d> 3653 +<5b9f> <5b9f> 2286 +<5ba2> <5ba2> 1644 +<5ba3> <5ba3> 2703 +<5ba4> <5ba4> 2280 +<5ba5> <5ba5> 3858 +<5ba6> <5ba6> 4624 +<5bae> <5bae> 1654 +endcidrange + +100 begincidrange +<5bb0> <5bb0> 2107 +<5bb3> <5bb3> 1424 +<5bb4> <5bb4> 1285 +<5bb5> <5bb5> 2452 +<5bb6> <5bb6> 1352 +<5bb8> <5bb8> 4625 +<5bb9> <5bb9> 3888 +<5bbf> <5bbf> 2387 +<5bc0> <5bc0> 8433 +<5bc2> <5bc2> 2320 +<5bc3> <5bc3> 4626 +<5bc4> <5bc4> 1583 +<5bc5> <5bc5> 3242 +<5bc6> <5bc6> 3765 +<5bc7> <5bc7> 4627 +<5bc9> <5bc9> 4628 +<5bcc> <5bcc> 3531 +<5bd0> <5bd0> 4630 +<5bd2> <5bd2> 1508 +<5bd3> <5bd3> 1775 +<5bd4> <5bd4> 4629 +<5bd8> <5bd8> 8435 +<5bdb> <5bdb> 1518 +<5bdd> <5bdd> 2552 +<5bde> <5bde> 4634 +<5bdf> <5bdf> 2159 +<5be1> <5be1> 1353 +<5be2> <5be2> 4633 +<5be4> <5be4> 4631 +<5be5> <5be5> 4635 +<5be6> <5be6> 4632 +<5be7> <5be7> 3297 +<5be8> <5be8> 5262 +<5be9> <5be9> 2553 +<5beb> <5beb> 4636 +<5bec> <5bec> 8436 +<5bee> <5bee> 3976 +<5bf0> <5bf0> 4637 +<5bf3> <5bf3> 4639 +<5bf5> <5bf5> 3004 +<5bf6> <5bf6> 4638 +<5bf8> <5bf8> 2631 +<5bfa> <5bfa> 2249 +<5bfe> <5bfe> 2864 +<5bff> <5bff> 2339 +<5c01> <5c01> 3559 +<5c02> <5c02> 2704 +<5c04> <5c04> 2297 +<5c05> <5c05> 4640 +<5c06> <5c06> 2453 +<5c07> <5c08> 4641 +<5c09> <5c09> 1175 +<5c0a> <5c0a> 2842 +<5c0b> <5c0b> 2584 +<5c0d> <5c0d> 4643 +<5c0e> <5c0e> 3211 +<5c0f> <5c0f> 2454 +<5c11> <5c11> 2455 +<5c13> <5c13> 4644 +<5c14> <5c14> 14122 +<5c16> <5c16> 2705 +<5c19> <5c19> 13835 +<5c1a> <5c1a> 2456 +<5c1e> <5c1e> 8437 +<5c20> <5c20> 4645 +<5c22> <5c22> 4646 +<5c23> <5c23> 14476 +<5c24> <5c24> 3820 +<5c28> <5c28> 4647 +<5c2b> <5c2b> 14477 +<5c2d> <5c2d> 1726 +<5c30> <5c30> 14478 +<5c31> <5c31> 2348 +<5c38> <5c39> 4648 +<5c3a> <5c3a> 2312 +<5c3b> <5c3b> 2546 +<5c3c> <5c3c> 3276 +<5c3d> <5c3d> 2586 +<5c3e> <5c3e> 3468 +<5c3f> <5c3f> 3288 +<5c40> <5c40> 1729 +<5c41> <5c41> 4650 +<5c45> <5c45> 1673 +<5c46> <5c46> 4651 +<5c48> <5c48> 1782 +<5c4a> <5c4a> 3239 +<5c4b> <5c4b> 1328 +<5c4d> <5c4d> 2209 +<5c4e> <5c4e> 4652 +<5c4f> <5c4f> 4655 +<5c50> <5c50> 4654 +<5c51> <5c51> 1781 +<5c53> <5c53> 4653 +<5c55> <5c55> 3122 +<5c5b> <5c5b> 7826 +<5c5e> <5c5e> 2832 +<5c60> <5c60> 3141 +<5c61> <5c61> 2292 +<5c62> <5c62> 7693 +<5c63> <5c63> 14479 +endcidrange + +100 begincidrange +<5c64> <5c64> 2778 +<5c65> <5c65> 3940 +<5c69> <5c69> 14480 +<5c6c> <5c6c> 4657 +<5c6e> <5c6e> 4658 +<5c6f> <5c6f> 3246 +<5c71> <5c71> 2177 +<5c76> <5c76> 4660 +<5c79> <5c79> 4661 +<5c7c> <5c7c> 14481 +<5c8c> <5c8c> 4662 +<5c90> <5c90> 1584 +<5c91> <5c91> 4663 +<5c94> <5c94> 4664 +<5ca1> <5ca1> 1324 +<5ca6> <5ca6> 8438 +<5ca8> <5ca8> 2749 +<5ca9> <5ca9> 1568 +<5cab> <5cab> 4666 +<5cac> <5cac> 3764 +<5cb1> <5cb1> 2866 +<5cb3> <5cb3> 1463 +<5cb6> <5cb6> 4668 +<5cb7> <5cb7> 4670 +<5cb8> <5cb8> 1563 +<5cba> <5cba> 8439 +<5cbb> <5cbb> 4667 +<5cbc> <5cbc> 4669 +<5cbe> <5cbe> 4672 +<5cc5> <5cc5> 4671 +<5cc7> <5cc7> 4673 +<5ccb> <5ccb> 14482 +<5cd2> <5cd2> 14483 +<5cd9> <5cd9> 4674 +<5ce0> <5ce0> 3221 +<5ce1> <5ce1> 1702 +<5ce6> <5ce6> 14124 +<5ce8> <5ce8> 1381 +<5ce9> <5ce9> 4675 +<5cea> <5cea> 4680 +<5ced> <5ced> 4678 +<5cef> <5cef> 3655 +<5cf0> <5cf0> 3654 +<5cf4> <5cf4> 14484 +<5cf5> <5cf5> 8440 +<5cf6> <5cf6> 3169 +<5cfa> <5cfa> 4677 +<5cfb> <5cfb> 2398 +<5cfd> <5cfd> 4676 +<5d07> <5d07> 2616 +<5d0b> <5d0b> 4681 +<5d0e> <5d0e> 2138 +<5d11> <5d11> 4687 +<5d14> <5d14> 4688 +<5d15> <5d15> 4682 +<5d16> <5d16> 1425 +<5d17> <5d17> 4683 +<5d18> <5d18> 4692 +<5d19> <5d19> 4691 +<5d1a> <5d1a> 4690 +<5d1b> <5d1b> 4686 +<5d1f> <5d1f> 4685 +<5d22> <5d22> 4689 +<5d24> <5d24> 14485 +<5d26> <5d26> 14486 +<5d27> <5d27> 8441 +<5d29> <5d29> 3656 +<5d42> <5d42> 8444 +<5d43> <5d43> 14487 +<5d46> <5d46> 14488 +<5d4a> <5d4a> 14489 +<5d4b> <5d4b> 4696 +<5d4c> <5d4c> 4693 +<5d4e> <5d4e> 4695 +<5d50> <5d50> 3932 +<5d52> <5d52> 4694 +<5d53> <5d53> 8442 +<5d5c> <5d5c> 4684 +<5d69> <5d69> 2617 +<5d6c> <5d6c> 4697 +<5d6d> <5d6d> 8445 +<5d6f> <5d6f> 2087 +<5d73> <5d73> 4698 +<5d76> <5d76> 4699 +<5d82> <5d82> 4702 +<5d84> <5d84> 4701 +<5d87> <5d87> 4700 +<5d8b> <5d8b> 3170 +<5d8c> <5d8c> 4679 +<5d90> <5d90> 4708 +<5d92> <5d92> 14490 +<5d94> <5d94> 14491 +<5d99> <5d99> 14492 +<5d9d> <5d9d> 4704 +<5da0> <5da0> 14493 +<5da2> <5da2> 4703 +<5dac> <5dac> 4705 +<5dae> <5dae> 4706 +<5db2> <5db2> 15269 +<5db7> <5db7> 4709 +endcidrange + +100 begincidrange +<5db8> <5db9> 8446 +<5dba> <5dba> 4014 +<5dbc> <5dbc> 4710 +<5dbd> <5dbd> 4707 +<5dc9> <5dc9> 4711 +<5dcc> <5dcc> 1564 +<5dcd> <5dcd> 4712 +<5dd0> <5dd0> 8448 +<5dd2> <5dd2> 4714 +<5dd3> <5dd3> 4713 +<5dd6> <5dd6> 4715 +<5dd8> <5dd8> 14494 +<5ddb> <5ddb> 4716 +<5ddd> <5ddd> 2706 +<5dde> <5dde> 2349 +<5de0> <5de0> 14495 +<5de1> <5de1> 2414 +<5de2> <5de2> 13362 +<5de3> <5de3> 2789 +<5de5> <5de5> 1979 +<5de6> <5de6> 2088 +<5de7> <5de7> 1980 +<5de8> <5de8> 1674 +<5deb> <5deb> 4717 +<5dee> <5dee> 2089 +<5df1> <5df1> 1918 +<5df2> <5df2> 4718 +<5df3> <5df3> 3762 +<5df4> <5df4> 3321 +<5df5> <5df5> 4719 +<5df7> <5df7> 1981 +<5df8> <5df8> 14496 +<5dfb> <5dfb> 1512 +<5dfd> <5dfd> 2917 +<5dfe> <5dfe> 1738 +<5dff> <5dff> 13794 +<5e00> <5e00> 14497 +<5e02> <5e02> 2210 +<5e03> <5e03> 3533 +<5e06> <5e06> 3413 +<5e0b> <5e0b> 4720 +<5e0c> <5e0c> 1585 +<5e11> <5e11> 4723 +<5e12> <5e12> 14498 +<5e14> <5e15> 14499 +<5e16> <5e16> 3005 +<5e18> <5e18> 14501 +<5e19> <5e19> 4722 +<5e1a> <5e1a> 4721 +<5e1b> <5e1b> 4724 +<5e1d> <5e1d> 3079 +<5e25> <5e25> 2601 +<5e2b> <5e2b> 2211 +<5e2d> <5e2d> 2670 +<5e2e> <5e2e> 14502 +<5e2f> <5e2f> 2867 +<5e30> <5e30> 1596 +<5e33> <5e33> 3006 +<5e36> <5e37> 4725 +<5e38> <5e38> 2519 +<5e3d> <5e3d> 3687 +<5e40> <5e40> 4729 +<5e43> <5e43> 4728 +<5e44> <5e44> 4727 +<5e45> <5e45> 3567 +<5e47> <5e47> 4736 +<5e4c> <5e4c> 3720 +<5e4e> <5e4e> 4730 +<5e54> <5e54> 4732 +<5e55> <5e55> 3737 +<5e57> <5e57> 4731 +<5e58> <5e58> 14503 +<5e5f> <5e5f> 4733 +<5e61> <5e61> 3388 +<5e62> <5e62> 4734 +<5e63> <5e63> 3598 +<5e64> <5e64> 4735 +<5e6b> <5e6c> 14504 +<5e72> <5e72> 1519 +<5e73> <5e73> 3599 +<5e74> <5e74> 3301 +<5e75> <5e76> 4737 +<5e78> <5e78> 1982 +<5e79> <5e79> 1520 +<5e7a> <5e7a> 4739 +<5e7b> <5e7b> 1900 +<5e7c> <5e7c> 3886 +<5e7d> <5e7d> 3859 +<5e7e> <5e7e> 1586 +<5e7f> <5e7f> 4741 +<5e81> <5e81> 3007 +<5e83> <5e83> 1983 +<5e84> <5e84> 2457 +<5e87> <5e87> 3443 +<5e8a> <5e8a> 2458 +<5e8f> <5e8f> 2434 +<5e95> <5e95> 3080 +<5e96> <5e96> 3657 +<5e97> <5e97> 3123 +<5e99> <5e99> 14000 +endcidrange + +100 begincidrange +<5e9a> <5e9a> 1984 +<5e9c> <5e9c> 3534 +<5ea0> <5ea0> 4742 +<5ea6> <5ea6> 3155 +<5ea7> <5ea7> 2098 +<5ea8> <5ea8> 14506 +<5eaa> <5eaa> 14507 +<5eab> <5eab> 1919 +<5ead> <5ead> 3081 +<5eb5> <5eb5> 1159 +<5eb6> <5eb6> 2424 +<5eb7> <5eb7> 1985 +<5eb8> <5eb8> 3889 +<5ebe> <5ebf> 14508 +<5ec1> <5ec2> 4743 +<5ec3> <5ec3> 3335 +<5ec8> <5ec8> 4745 +<5ec9> <5ec9> 4031 +<5eca> <5eca> 4051 +<5ecb> <5ecb> 14510 +<5ecf> <5ecf> 4747 +<5ed0> <5ed0> 4746 +<5ed2> <5ed2> 14511 +<5ed3> <5ed3> 1445 +<5ed6> <5ed6> 4748 +<5eda> <5edb> 4751 +<5edd> <5edd> 4750 +<5edf> <5edf> 3506 +<5ee0> <5ee0> 2459 +<5ee1> <5ee1> 4754 +<5ee2> <5ee2> 4753 +<5ee3> <5ee3> 4749 +<5ee8> <5ee9> 4755 +<5eec> <5eec> 4757 +<5ef0> <5ef0> 4760 +<5ef1> <5ef1> 4758 +<5ef3> <5ef3> 4759 +<5ef4> <5ef4> 4761 +<5ef6> <5ef6> 1286 +<5ef7> <5ef7> 3082 +<5ef8> <5ef8> 4762 +<5efa> <5efa> 1872 +<5efb> <5efb> 1398 +<5efc> <5efc> 3308 +<5efe> <5efe> 4763 +<5eff> <5eff> 3283 +<5f01> <5f01> 3627 +<5f03> <5f03> 4764 +<5f04> <5f04> 4052 +<5f07> <5f07> 14512 +<5f09> <5f09> 4765 +<5f0a> <5f0a> 3600 +<5f0b> <5f0b> 4768 +<5f0c> <5f0c> 4090 +<5f0d> <5f0d> 4106 +<5f0e> <5f0e> 14513 +<5f0f> <5f0f> 2268 +<5f10> <5f10> 3277 +<5f11> <5f11> 4769 +<5f13> <5f13> 1655 +<5f14> <5f14> 3008 +<5f15> <5f15> 1214 +<5f16> <5f16> 4770 +<5f17> <5f17> 3574 +<5f18> <5f18> 1986 +<5f1b> <5f1b> 2958 +<5f1c> <5f1d> 14514 +<5f1f> <5f1f> 3083 +<5f21> <5f21> 8449 +<5f22> <5f22> 14516 +<5f25> <5f25> 3835 +<5f26> <5f26> 1901 +<5f27> <5f27> 1920 +<5f28> <5f28> 14517 +<5f29> <5f29> 4771 +<5f2d> <5f2d> 4772 +<5f2f> <5f2f> 4778 +<5f31> <5f31> 2321 +<5f34> <5f34> 8450 +<5f35> <5f35> 3009 +<5f36> <5f36> 14518 +<5f37> <5f37> 1703 +<5f38> <5f38> 4773 +<5f3a> <5f3a> 13720 +<5f3b> <5f3b> 14519 +<5f3c> <5f3c> 3485 +<5f3e> <5f3e> 2948 +<5f40> <5f40> 14520 +<5f41> <5f41> 4774 +<5f45> <5f45> 8370 +<5f48> <5f48> 4775 +<5f4a> <5f4a> 1704 +<5f4c> <5f4c> 4776 +<5f4e> <5f4e> 4777 +<5f50> <5f50> 14521 +<5f51> <5f51> 4779 +<5f53> <5f53> 3184 +<5f56> <5f57> 4780 +<5f58> <5f58> 14522 +<5f59> <5f59> 4782 +endcidrange + +100 begincidrange +<5f5c> <5f5c> 4767 +<5f5d> <5f5d> 4766 +<5f61> <5f61> 4783 +<5f62> <5f62> 1815 +<5f64> <5f64> 14523 +<5f65> <5f65> 13996 +<5f66> <5f66> 3481 +<5f67> <5f67> 8451 +<5f69> <5f69> 2108 +<5f6a> <5f6a> 3497 +<5f6b> <5f6b> 3010 +<5f6c> <5f6c> 3517 +<5f6d> <5f6d> 4784 +<5f70> <5f70> 2460 +<5f71> <5f71> 1256 +<5f73> <5f73> 4785 +<5f77> <5f77> 4786 +<5f79> <5f79> 3838 +<5f7c> <5f7c> 3444 +<5f7f> <5f7f> 4789 +<5f80> <5f80> 1311 +<5f81> <5f81> 2640 +<5f82> <5f82> 4788 +<5f83> <5f83> 4787 +<5f84> <5f84> 1816 +<5f85> <5f85> 2868 +<5f87> <5f87> 4793 +<5f88> <5f88> 4791 +<5f89> <5f89> 14524 +<5f8a> <5f8a> 4790 +<5f8b> <5f8b> 3951 +<5f8c> <5f8c> 1945 +<5f90> <5f90> 2435 +<5f91> <5f91> 4792 +<5f92> <5f92> 3142 +<5f93> <5f93> 2376 +<5f97> <5f97> 3224 +<5f98> <5f98> 4796 +<5f99> <5f99> 4795 +<5f9c> <5f9c> 14525 +<5f9e> <5f9e> 4794 +<5fa0> <5fa0> 4797 +<5fa1> <5fa1> 1946 +<5fa4> <5fa4> 14527 +<5fa7> <5fa7> 14526 +<5fa8> <5fa8> 4798 +<5fa9> <5fa9> 3566 +<5faa> <5faa> 2405 +<5fad> <5fad> 4799 +<5fae> <5fae> 3469 +<5faf> <5faf> 14528 +<5fb3> <5fb3> 3225 +<5fb4> <5fb4> 3011 +<5fb5> <5fb5> 13368 +<5fb7> <5fb7> 8452 +<5fb8> <5fb8> 14529 +<5fb9> <5fb9> 3114 +<5fbc> <5fbc> 4800 +<5fbd> <5fbd> 1605 +<5fc3> <5fc3> 2554 +<5fc4> <5fc4> 14530 +<5fc5> <5fc5> 3486 +<5fc9> <5fc9> 14531 +<5fcc> <5fcc> 1587 +<5fcd> <5fcd> 3292 +<5fd6> <5fd6> 4801 +<5fd7> <5fd7> 2212 +<5fd8> <5fd9> 3688 +<5fdc> <5fdc> 1312 +<5fdd> <5fdd> 4806 +<5fde> <5fde> 8453 +<5fe0> <5fe0> 2983 +<5fe1> <5fe1> 14532 +<5fe4> <5fe4> 4803 +<5fe9> <5fe9> 14533 +<5feb> <5feb> 1399 +<5fed> <5fed> 14534 +<5ff0> <5ff0> 4854 +<5ff1> <5ff1> 4805 +<5ff5> <5ff5> 3302 +<5ff8> <5ff8> 4804 +<5ffb> <5ffb> 4802 +<5ffc> <5ffc> 14535 +<5ffd> <5ffd> 2060 +<5fff> <5fff> 4808 +<600e> <600e> 4814 +<600f> <600f> 4820 +<6010> <6010> 4812 +<6012> <6012> 3158 +<6015> <6015> 4817 +<6016> <6016> 3535 +<6017> <6017> 14536 +<6019> <6019> 4811 +<601a> <601a> 14537 +<601b> <601b> 4816 +<601c> <601c> 4015 +<601d> <601d> 2213 +<6020> <6020> 2869 +<6021> <6021> 4809 +<6025> <6025> 1656 +endcidrange + +100 begincidrange +<6026> <6026> 4819 +<6027> <6027> 2641 +<6028> <6028> 1287 +<6029> <6029> 4813 +<602a> <602a> 1400 +<602b> <602b> 4818 +<602f> <602f> 1705 +<6031> <6031> 4815 +<6033> <6033> 14538 +<603a> <603a> 4821 +<6041> <6041> 4823 +<6042> <6042> 4833 +<6043> <6043> 4831 +<6046> <6046> 4828 +<604a> <604a> 4827 +<604b> <604b> 4032 +<604d> <604d> 4829 +<6050> <6050> 1706 +<6052> <6052> 1987 +<6055> <6055> 2436 +<6059> <6059> 4836 +<605a> <605a> 4822 +<605d> <605d> 8454 +<605f> <605f> 4826 +<6060> <6060> 4810 +<6061> <6061> 14539 +<6062> <6062> 1402 +<6063> <6063> 4830 +<6064> <6064> 4832 +<6065> <6065> 2959 +<6068> <6068> 2072 +<6069> <6069> 1336 +<606a> <606a> 4824 +<606b> <606b> 4835 +<606c> <606c> 4834 +<606d> <606d> 1707 +<606f> <606f> 2825 +<6070> <6070> 1476 +<6075> <6075> 1817 +<6077> <6077> 4825 +<607f> <607f> 14540 +<6081> <6081> 4837 +<6083> <6083> 4840 +<6084> <6084> 4842 +<6085> <6085> 8455 +<6089> <6089> 2281 +<608a> <608a> 8456 +<608b> <608b> 4848 +<608c> <608c> 3084 +<608d> <608d> 4838 +<6092> <6092> 4846 +<6094> <6094> 1401 +<6096> <6097> 4844 +<609a> <609a> 4841 +<609b> <609b> 4843 +<609e> <609e> 14541 +<609f> <609f> 1947 +<60a0> <60a0> 3860 +<60a3> <60a3> 1521 +<60a4> <60a4> 14542 +<60a6> <60a6> 1275 +<60a7> <60a7> 4847 +<60a9> <60a9> 3312 +<60aa> <60aa> 1137 +<60b0> <60b0> 14543 +<60b2> <60b2> 3445 +<60b3> <60b3> 4807 +<60b4> <60b4> 4853 +<60b5> <60b5> 4857 +<60b6> <60b6> 3825 +<60b8> <60b8> 4850 +<60bc> <60bc> 3171 +<60bd> <60bd> 4855 +<60c5> <60c5> 2520 +<60c6> <60c6> 4856 +<60c7> <60c7> 3247 +<60cb> <60cb> 14544 +<60d1> <60d1> 4077 +<60d3> <60d3> 4852 +<60d5> <60d5> 8458 +<60d8> <60d8> 4858 +<60da> <60da> 2061 +<60db> <60db> 14545 +<60dc> <60dc> 2671 +<60de> <60de> 8457 +<60df> <60df> 1176 +<60e0> <60e0> 4851 +<60e1> <60e1> 4849 +<60e3> <60e3> 2780 +<60e7> <60e7> 4839 +<60e8> <60e8> 2178 +<60f0> <60f0> 2854 +<60f1> <60f1> 4870 +<60f2> <60f2> 8460 +<60f3> <60f3> 2781 +<60f4> <60f4> 4865 +<60f6> <60f7> 4862 +<60f8> <60f8> 14546 +<60f9> <60f9> 2322 +<60fa> <60fa> 4866 +endcidrange + +100 begincidrange +<60fb> <60fb> 4869 +<6100> <6100> 4864 +<6101> <6101> 2351 +<6103> <6103> 4867 +<6106> <6106> 4861 +<6108> <6108> 3848 +<6109> <6109> 3847 +<610d> <610e> 4871 +<610f> <610f> 1177 +<6111> <6111> 8461 +<6112> <6114> 14547 +<6115> <6115> 4860 +<611a> <611a> 1770 +<611b> <611b> 1130 +<611c> <611c> 14550 +<611f> <611f> 1522 +<6120> <6120> 8459 +<6121> <6121> 4868 +<6127> <6127> 4876 +<6128> <6128> 4875 +<612c> <612c> 4880 +<6130> <6130> 8463 +<6134> <6134> 4881 +<6137> <6137> 8462 +<613c> <613c> 4879 +<613d> <613d> 4882 +<613e> <613e> 4874 +<613f> <613f> 4878 +<6142> <6142> 4883 +<6144> <6144> 4884 +<6147> <6147> 4873 +<6148> <6148> 2250 +<614a> <614a> 4877 +<614b> <614b> 2870 +<614c> <614c> 1988 +<614d> <614d> 4859 +<614e> <614e> 2555 +<6153> <6153> 4897 +<6155> <6155> 3641 +<6158> <615a> 4887 +<615d> <615d> 4896 +<615f> <615f> 4895 +<6162> <6162> 3755 +<6163> <6163> 1523 +<6165> <6165> 4893 +<6167> <6167> 1819 +<6168> <6168> 1426 +<616b> <616b> 4890 +<616e> <616e> 3968 +<616f> <616f> 4892 +<6170> <6170> 1178 +<6171> <6171> 4894 +<6173> <6173> 4885 +<6174> <6174> 4891 +<6175> <6175> 4898 +<6176> <6176> 1818 +<6177> <6177> 4886 +<617c> <617c> 14551 +<617e> <617e> 3911 +<6182> <6182> 3861 +<6187> <6187> 4901 +<618a> <618a> 4905 +<618d> <618d> 14552 +<618e> <618e> 2816 +<6190> <6190> 4033 +<6191> <6191> 4906 +<6194> <6194> 4903 +<6196> <6196> 4900 +<6198> <6198> 8464 +<6199> <6199> 4899 +<619a> <619a> 4904 +<619f> <619f> 14553 +<61a4> <61a4> 3584 +<61a7> <61a7> 3212 +<61a8> <61a8> 14554 +<61a9> <61a9> 1820 +<61ab> <61ab> 4907 +<61ac> <61ac> 4902 +<61ae> <61ae> 4908 +<61b2> <61b2> 1873 +<61b6> <61b6> 1329 +<61ba> <61ba> 4916 +<61be> <61be> 1524 +<61c2> <61c2> 14555 +<61c3> <61c3> 4914 +<61c6> <61c6> 4915 +<61c7> <61c7> 2073 +<61c8> <61c8> 4913 +<61c9> <61c9> 4911 +<61ca> <61ca> 4910 +<61cb> <61cb> 4917 +<61cc> <61cc> 4909 +<61cd> <61cd> 4919 +<61d0> <61d0> 1403 +<61df> <61df> 14556 +<61e3> <61e3> 4921 +<61e6> <61e6> 4920 +<61f2> <61f2> 3012 +<61f4> <61f4> 4924 +<61f6> <61f6> 4922 +endcidrange + +100 begincidrange +<61f7> <61f7> 4912 +<61f8> <61f8> 1874 +<61fa> <61fa> 4923 +<61fc> <61fc> 4927 +<61fd> <61fd> 4926 +<61fe> <61fe> 4928 +<61ff> <61ff> 4925 +<6200> <6200> 4929 +<6208> <6209> 4930 +<620a> <620a> 3642 +<620c> <620c> 4933 +<620d> <620d> 4932 +<620e> <620e> 2377 +<6210> <6210> 2642 +<6211> <6211> 1382 +<6212> <6212> 1404 +<6213> <6213> 8465 +<6214> <6214> 4934 +<6215> <6215> 14557 +<6216> <6216> 1155 +<621a> <621a> 2672 +<621b> <621b> 4935 +<621d> <621d> 6756 +<621e> <621e> 4936 +<621f> <621f> 1847 +<6221> <6221> 4937 +<6226> <6226> 2707 +<6229> <6229> 14558 +<622a> <622a> 4938 +<622e> <622e> 4939 +<622f> <622f> 1620 +<6230> <6230> 4940 +<6232> <6233> 4941 +<6234> <6234> 2871 +<6236> <6236> 13757 +<6238> <6238> 1921 +<623b> <623b> 3821 +<623e> <623e> 13390 +<623f> <623f> 3690 +<6240> <6240> 2420 +<6241> <6241> 4943 +<6243> <6243> 14559 +<6246> <6246> 14560 +<6247> <6247> 2708 +<6248> <6248> 6938 +<6249> <6249> 3446 +<624b> <624b> 2326 +<624c> <624c> 14561 +<624d> <624d> 2109 +<624e> <624e> 4944 +<6251> <6251> 14562 +<6253> <6253> 2855 +<6255> <6255> 3575 +<6256> <6256> 14563 +<6258> <6258> 2897 +<625b> <625b> 4947 +<625e> <625e> 4945 +<6260> <6260> 4948 +<6263> <6263> 4946 +<6268> <6268> 4949 +<626e> <626e> 3585 +<6271> <6271> 1147 +<6276> <6276> 3536 +<6279> <6279> 3447 +<627c> <627c> 4950 +<627e> <627e> 4953 +<627f> <627f> 2461 +<6280> <6280> 1621 +<6282> <6282> 4951 +<6283> <6283> 4958 +<6284> <6284> 2462 +<6285> <6285> 13765 +<6289> <6289> 4952 +<628a> <628a> 3322 +<6291> <6291> 3912 +<6292> <6293> 4954 +<6294> <6294> 4959 +<6295> <6295> 3172 +<6296> <6296> 4956 +<6297> <6297> 1989 +<6298> <6298> 2690 +<629b> <629b> 4973 +<629c> <629c> 3400 +<629e> <629e> 2898 +<62a6> <62a6> 8466 +<62ab> <62ab> 3448 +<62ac> <62ac> 5042 +<62b1> <62b1> 3658 +<62b5> <62b5> 3085 +<62b9> <62b9> 3747 +<62bb> <62bb> 4962 +<62bc> <62bc> 1313 +<62bd> <62bd> 2984 +<62c2> <62c2> 4971 +<62c4> <62c4> 14564 +<62c5> <62c5> 2930 +<62c6> <62c6> 4965 +<62c7> <62c7> 4972 +<62c8> <62c8> 4967 +<62c9> <62c9> 4974 +endcidrange + +100 begincidrange +<62ca> <62ca> 4970 +<62cc> <62cc> 4969 +<62cd> <62cd> 3365 +<62cf> <62cf> 4963 +<62d0> <62d0> 1405 +<62d1> <62d1> 4961 +<62d2> <62d2> 1675 +<62d3> <62d3> 2899 +<62d4> <62d4> 4957 +<62d7> <62d7> 4960 +<62d8> <62d8> 1990 +<62d9> <62d9> 2687 +<62db> <62db> 2463 +<62dc> <62dc> 4968 +<62dd> <62dd> 3336 +<62e0> <62e0> 1676 +<62e1> <62e1> 1446 +<62ec> <62ec> 1477 +<62ed> <62ed> 2535 +<62ee> <62ee> 4976 +<62ef> <62ef> 4981 +<62f1> <62f1> 4977 +<62f3> <62f3> 1875 +<62f5> <62f5> 4982 +<62f6> <62f6> 2160 +<62f7> <62f7> 2043 +<62fc> <62fc> 14565 +<62fe> <62fe> 2352 +<62ff> <62ff> 4964 +<6301> <6301> 2251 +<6302> <6302> 4979 +<6307> <6307> 2214 +<6308> <6308> 4980 +<6309> <6309> 1160 +<630a> <630a> 14566 +<630c> <630c> 4975 +<630d> <630d> 14567 +<6311> <6311> 3013 +<6318> <6318> 14568 +<6319> <6319> 1677 +<631b> <631b> 14135 +<631f> <631f> 1708 +<6327> <6327> 4978 +<6328> <6328> 1131 +<632b> <632b> 2099 +<632f> <632f> 2556 +<6339> <6339> 14569 +<633a> <633a> 3086 +<633d> <633d> 3432 +<633e> <633e> 4984 +<633f> <633f> 2784 +<6342> <6343> 14570 +<6349> <6349> 2826 +<634c> <634c> 2169 +<634d> <634d> 4985 +<634f> <634f> 4987 +<6350> <6350> 4983 +<6355> <6355> 3633 +<6357> <6357> 3033 +<635c> <635c> 2782 +<6365> <6365> 14572 +<6367> <6367> 3659 +<6368> <6368> 2298 +<6369> <6369> 4999 +<636b> <636b> 4998 +<636e> <636e> 2622 +<6372> <6372> 1876 +<6374> <6374> 14573 +<6376> <6376> 4992 +<6377> <6377> 2465 +<637a> <637a> 3264 +<637b> <637b> 3303 +<637d> <637d> 14574 +<6380> <6380> 4990 +<6383> <6383> 2783 +<6384> <6384> 14575 +<6387> <6387> 14576 +<6388> <6388> 2340 +<6389> <6389> 4995 +<638c> <638c> 2464 +<638e> <638e> 4989 +<638f> <638f> 4994 +<6390> <6390> 14577 +<6392> <6392> 3337 +<6396> <6396> 4988 +<6398> <6398> 1783 +<639b> <639b> 1467 +<639e> <639e> 14578 +<639f> <639f> 4996 +<63a0> <63a0> 3955 +<63a1> <63a1> 2110 +<63a2> <63a2> 2931 +<63a3> <63a3> 4993 +<63a5> <63a5> 2688 +<63a7> <63a7> 1991 +<63a8> <63a8> 2602 +<63a9> <63a9> 1288 +<63aa> <63aa> 2750 +<63ab> <63ab> 4991 +<63ac> <63ac> 1631 +endcidrange + +100 begincidrange +<63b2> <63b2> 1821 +<63b4> <63b4> 3051 +<63b5> <63b5> 4997 +<63bb> <63bb> 2785 +<63be> <63be> 5000 +<63c0> <63c0> 5002 +<63c3> <63c3> 2839 +<63c4> <63c4> 5008 +<63c6> <63c6> 5003 +<63c9> <63c9> 5005 +<63cf> <63cf> 3507 +<63d0> <63d0> 3087 +<63d1> <63d1> 14579 +<63d2> <63d2> 5006 +<63d6> <63d6> 3862 +<63da> <63da> 3890 +<63db> <63db> 1525 +<63dc> <63dc> 14580 +<63e1> <63e1> 1138 +<63e3> <63e3> 5004 +<63e9> <63e9> 5001 +<63ed> <63ed> 13340 +<63ee> <63ee> 1588 +<63f4> <63f4> 1289 +<63f5> <63f5> 8467 +<63f6> <63f6> 5007 +<63f7> <63f7> 13892 +<63fa> <63fa> 3891 +<6406> <6406> 5011 +<6409> <6409> 14581 +<640d> <640d> 2843 +<640f> <640f> 5018 +<6410> <6410> 14582 +<6413> <6413> 5012 +<6414> <6414> 7724 +<6416> <6416> 5009 +<6417> <6417> 5016 +<641c> <641c> 4986 +<6422> <6422> 14583 +<6426> <6426> 5013 +<6428> <6428> 5017 +<642c> <642c> 3414 +<642d> <642d> 3173 +<6434> <6434> 5010 +<6436> <6436> 5014 +<643a> <643a> 1822 +<643e> <643e> 2145 +<6442> <6442> 2689 +<644e> <644e> 5022 +<6451> <6451> 7747 +<6454> <6454> 14584 +<6458> <6458> 3104 +<645b> <645b> 14585 +<6460> <6460> 8468 +<6467> <6467> 5019 +<6469> <6469> 3726 +<646d> <646d> 14586 +<646f> <646f> 5020 +<6476> <6476> 5021 +<6478> <6478> 3802 +<647a> <647a> 2630 +<647b> <647b> 14587 +<6483> <6483> 1848 +<6488> <6488> 5028 +<6492> <6492> 2179 +<6493> <6493> 5025 +<6495> <6495> 5024 +<649a> <649a> 3304 +<649d> <649d> 8469 +<649e> <649e> 3213 +<64a4> <64a4> 3115 +<64a5> <64a5> 5026 +<64a9> <64a9> 5027 +<64ab> <64ab> 3553 +<64ad> <64ad> 3323 +<64ae> <64ae> 2161 +<64b0> <64b0> 2709 +<64b2> <64b2> 3710 +<64b9> <64b9> 1447 +<64bb> <64bb> 5034 +<64bc> <64bc> 5029 +<64be> <64bf> 14588 +<64c1> <64c1> 3892 +<64c2> <64c2> 5036 +<64c5> <64c5> 5032 +<64c7> <64c7> 5033 +<64ca> <64ca> 13341 +<64cd> <64cd> 2786 +<64ce> <64ce> 8470 +<64d2> <64d2> 5031 +<64d4> <64d4> 4966 +<64d8> <64d8> 5035 +<64da> <64da> 5030 +<64e0> <64e1> 5040 +<64e2> <64e2> 3105 +<64e3> <64e3> 5043 +<64e5> <64e5> 14590 +<64e6> <64e6> 2162 +<64e7> <64e7> 5038 +<64ec> <64ec> 1622 +endcidrange + +100 begincidrange +<64ef> <64ef> 5044 +<64f1> <64f1> 5037 +<64f2> <64f2> 5048 +<64f4> <64f4> 5047 +<64f6> <64f6> 5046 +<64f7> <64f7> 14591 +<64fa> <64fa> 5049 +<64fb> <64fb> 14592 +<64fd> <64fd> 5051 +<64fe> <64fe> 2521 +<6500> <6500> 5050 +<6504> <6504> 14593 +<6505> <6505> 5054 +<6516> <6516> 14594 +<6518> <6518> 5052 +<6519> <6519> 14595 +<651c> <651c> 5053 +<651d> <651d> 5015 +<6522> <6522> 7831 +<6523> <6523> 5056 +<6524> <6524> 5055 +<652a> <652a> 5023 +<652b> <652b> 5057 +<652c> <652c> 5045 +<652f> <652f> 2215 +<6534> <6535> 5058 +<6536> <6536> 5061 +<6537> <6537> 5060 +<6538> <6538> 5062 +<6539> <6539> 1406 +<653b> <653b> 1992 +<653e> <653e> 3660 +<653f> <653f> 2643 +<6545> <6545> 1922 +<6547> <6547> 14596 +<6548> <6548> 5064 +<654d> <654d> 5067 +<654e> <654e> 8471 +<654f> <654f> 3524 +<6551> <6551> 1657 +<6555> <6555> 5066 +<6556> <6556> 5065 +<6557> <6557> 3338 +<6558> <6558> 5068 +<6559> <6559> 1709 +<655d> <655d> 5070 +<655e> <655e> 5069 +<6562> <6562> 1526 +<6563> <6563> 2180 +<6566> <6566> 3248 +<6567> <6567> 14597 +<656c> <656c> 1823 +<6570> <6570> 2618 +<6572> <6572> 5071 +<6574> <6574> 2644 +<6575> <6575> 3106 +<6577> <6577> 3537 +<6578> <6578> 5072 +<6581> <6581> 14598 +<6582> <6583> 5073 +<6585> <6585> 14599 +<6587> <6587> 3592 +<6588> <6588> 4620 +<6589> <6589> 2666 +<658c> <658c> 3518 +<658e> <658e> 2120 +<6590> <6590> 3449 +<6591> <6591> 3415 +<6597> <6597> 3143 +<6599> <6599> 3977 +<659b> <659b> 5076 +<659c> <659c> 2300 +<659f> <659f> 5077 +<65a1> <65a1> 1146 +<65a4> <65a4> 1740 +<65a5> <65a5> 2673 +<65a7> <65a7> 3538 +<65ab> <65ab> 5078 +<65ac> <65ac> 2192 +<65ad> <65ad> 2949 +<65af> <65af> 2217 +<65b0> <65b0> 2557 +<65b7> <65b7> 5079 +<65b9> <65b9> 3661 +<65bc> <65bc> 1305 +<65bd> <65bd> 2218 +<65c1> <65c1> 5082 +<65c2> <65c2> 14600 +<65c3> <65c3> 5080 +<65c4> <65c4> 5083 +<65c5> <65c5> 3969 +<65c6> <65c6> 5081 +<65cb> <65cb> 2719 +<65cc> <65cc> 5084 +<65cf> <65cf> 2834 +<65d2> <65d2> 5085 +<65d7> <65d7> 1590 +<65d9> <65d9> 5087 +<65db> <65db> 5086 +<65e0> <65e1> 5088 +endcidrange + +100 begincidrange +<65e2> <65e2> 1591 +<65e3> <65e3> 13701 +<65e5> <65e5> 3284 +<65e6> <65e6> 2932 +<65e7> <65e7> 1670 +<65e8> <65e8> 2219 +<65e9> <65e9> 2787 +<65ec> <65ec> 2406 +<65ed> <65ed> 1140 +<65f0> <65f0> 14601 +<65f1> <65f1> 5090 +<65f2> <65f2> 14602 +<65fa> <65fa> 1314 +<65fb> <65fb> 5094 +<6600> <6600> 8472 +<6602> <6602> 1993 +<6603> <6603> 5093 +<6606> <6606> 2075 +<6607> <6607> 2466 +<6609> <6609> 8474 +<660a> <660a> 5092 +<660c> <660c> 2467 +<660e> <660e> 3788 +<660f> <660f> 2074 +<6613> <6613> 1179 +<6614> <6614> 2674 +<6615> <6615> 8473 +<661c> <661c> 5099 +<661e> <661e> 8476 +<661f> <661f> 2645 +<6620> <6620> 1257 +<6624> <6624> 8477 +<6625> <6625> 2399 +<6627> <6627> 3732 +<6628> <6628> 2146 +<662c> <662c> 14603 +<662d> <662d> 2468 +<662e> <662e> 8475 +<662f> <662f> 2635 +<6631> <6631> 8366 +<6634> <6634> 5098 +<6635> <6636> 5096 +<663b> <663b> 7680 +<663c> <663c> 2985 +<663f> <663f> 5129 +<6641> <6641> 5103 +<6642> <6642> 2252 +<6643> <6643> 1994 +<6644> <6644> 5101 +<6649> <6649> 5102 +<664b> <664b> 2558 +<664c> <664c> 14604 +<664f> <664f> 5100 +<6652> <6652> 2173 +<6657> <6657> 8479 +<6659> <6659> 8480 +<665b> <665c> 14605 +<665d> <665d> 5105 +<665e> <665e> 5104 +<665f> <665f> 5109 +<6661> <6661> 14607 +<6662> <6662> 5110 +<6663> <6663> 14138 +<6664> <6664> 5106 +<6665> <6665> 8478 +<6666> <6666> 1408 +<6667> <6668> 5107 +<6669> <6669> 3433 +<666b> <666b> 14608 +<666e> <666e> 3539 +<666f> <666f> 1824 +<6670> <6670> 5111 +<6673> <6673> 8482 +<6674> <6674> 2646 +<6676> <6676> 2469 +<6677> <6677> 14609 +<667a> <667a> 2960 +<6681> <6681> 1727 +<6683> <6683> 5112 +<6684> <6684> 5116 +<6687> <6687> 1355 +<6688> <6688> 5113 +<6689> <6689> 5115 +<668e> <668e> 5114 +<6691> <6691> 2421 +<6696> <6696> 2950 +<6697> <6697> 1161 +<6698> <6698> 5117 +<6699> <6699> 8483 +<669d> <669d> 5118 +<66a0> <66a0> 8484 +<66a2> <66a2> 3014 +<66a4> <66a4> 14610 +<66a6> <66a6> 4025 +<66ab> <66ab> 2193 +<66ae> <66ae> 3643 +<66b2> <66b2> 8485 +<66b4> <66b4> 3691 +<66b8> <66b8> 5125 +<66b9> <66b9> 5120 +endcidrange + +100 begincidrange +<66bc> <66bc> 5123 +<66be> <66be> 5122 +<66bf> <66bf> 8486 +<66c1> <66c1> 5119 +<66c4> <66c4> 5124 +<66c6> <66c6> 13397 +<66c7> <66c7> 3254 +<66c8> <66c8> 14611 +<66c9> <66c9> 5121 +<66d6> <66d6> 5126 +<66d9> <66d9> 2422 +<66da> <66da> 5127 +<66dc> <66dc> 3893 +<66dd> <66dd> 3374 +<66e0> <66e0> 5128 +<66e6> <66e6> 5130 +<66e9> <66e9> 5131 +<66ec> <66ec> 14612 +<66f0> <66f0> 5132 +<66f2> <66f2> 1730 +<66f3> <66f3> 1258 +<66f4> <66f4> 1995 +<66f5> <66f5> 5133 +<66f7> <66f7> 5134 +<66f8> <66f8> 2427 +<66f9> <66f9> 2788 +<66fa> <66fa> 8487 +<66fb> <66fb> 8369 +<66fc> <66fc> 4333 +<66fd> <66fd> 2752 +<66fe> <66fe> 2751 +<66ff> <66ff> 2872 +<6700> <6700> 2103 +<6703> <6703> 4171 +<6705> <6705> 14613 +<6708> <6708> 1860 +<6709> <6709> 3863 +<670b> <670b> 3662 +<670d> <670d> 3568 +<670e> <670e> 8488 +<670f> <670f> 5135 +<6713> <6713> 14614 +<6714> <6714> 2147 +<6715> <6715> 3035 +<6716> <6716> 5136 +<6717> <6717> 4053 +<671b> <671b> 3692 +<671d> <671d> 3015 +<671e> <671e> 5137 +<671f> <671f> 1592 +<6726> <6727> 5138 +<6728> <6728> 3814 +<672a> <672a> 3760 +<672b> <672b> 3748 +<672c> <672c> 3722 +<672d> <672d> 2163 +<672e> <672e> 5141 +<6731> <6731> 2327 +<6733> <6733> 14615 +<6734> <6734> 3711 +<6736> <6736> 5143 +<6737> <6737> 5146 +<6738> <6738> 5145 +<673a> <673a> 1589 +<673d> <673d> 1658 +<673f> <673f> 5142 +<6741> <6741> 5144 +<6743> <6743> 13751 +<6746> <6746> 5147 +<6748> <6748> 14616 +<6749> <6749> 2623 +<674c> <674c> 14617 +<674e> <674e> 3941 +<674f> <674f> 1165 +<6750> <6750> 2128 +<6751> <6751> 2844 +<6753> <6753> 2313 +<6756> <6756> 2523 +<6759> <6759> 5150 +<675c> <675c> 3144 +<675e> <675e> 5148 +<675f> <675f> 2827 +<6760> <6760> 5149 +<6761> <6761> 2522 +<6762> <6762> 3817 +<6763> <6764> 5151 +<6765> <6765> 3922 +<6766> <6766> 8490 +<676a> <676a> 5157 +<676d> <676d> 1996 +<676e> <676e> 13681 +<676f> <676f> 3339 +<6770> <6770> 5154 +<6771> <6771> 3174 +<6772> <6772> 5091 +<6773> <6773> 5095 +<6775> <6775> 1641 +<6776> <6776> 14618 +<6777> <6777> 3325 +<677b> <677b> 14619 +endcidrange + +100 begincidrange +<677c> <677c> 5156 +<677e> <677e> 2470 +<677f> <677f> 3416 +<6785> <6785> 5162 +<6787> <6787> 3470 +<6789> <6789> 5153 +<678b> <678b> 5159 +<678c> <678c> 5158 +<6790> <6790> 2675 +<6795> <6795> 3739 +<6797> <6797> 3995 +<679a> <679a> 3733 +<679c> <679c> 1356 +<679d> <679d> 2220 +<67a0> <67a0> 4078 +<67a1> <67a1> 5161 +<67a2> <67a2> 2619 +<67a6> <67a6> 5160 +<67a9> <67a9> 5155 +<67af> <67af> 1923 +<67b0> <67b0> 14620 +<67b2> <67b2> 14621 +<67b3> <67b3> 5167 +<67b4> <67b4> 5165 +<67b6> <67b6> 1357 +<67b7> <67b7> 5163 +<67b8> <67b8> 5169 +<67b9> <67b9> 5175 +<67bb> <67bb> 8491 +<67c0> <67c0> 8493 +<67c1> <67c1> 2856 +<67c4> <67c4> 3601 +<67c6> <67c6> 5177 +<67ca> <67ca> 3476 +<67ce> <67ce> 5176 +<67cf> <67cf> 3366 +<67d0> <67d0> 3693 +<67d1> <67d1> 1527 +<67d3> <67d3> 2715 +<67d4> <67d4> 2378 +<67d7> <67d7> 14623 +<67d8> <67d8> 3055 +<67d9> <67d9> 14624 +<67da> <67da> 3864 +<67dd> <67dd> 5172 +<67de> <67de> 5171 +<67e2> <67e2> 5173 +<67e4> <67e4> 5170 +<67e7> <67e7> 5178 +<67e9> <67e9> 5168 +<67ec> <67ec> 5166 +<67ee> <67ee> 5174 +<67ef> <67ef> 5164 +<67f0> <67f0> 14625 +<67f1> <67f1> 2986 +<67f3> <67f3> 3844 +<67f4> <67f4> 2290 +<67f5> <67f5> 2148 +<67f9> <67f9> 14622 +<67fb> <67fb> 2090 +<67fe> <67fe> 3741 +<67ff> <67ff> 1439 +<6801> <6801> 8494 +<6802> <6802> 3050 +<6803> <6803> 3234 +<6804> <6804> 1259 +<6805> <6805> 7687 +<6813> <6813> 2710 +<6816> <6816> 2648 +<6817> <6817> 1792 +<681e> <681e> 5180 +<6821> <6821> 1997 +<6822> <6822> 1498 +<6829> <6829> 5182 +<682a> <682a> 1490 +<682b> <682b> 5188 +<682c> <682c> 14626 +<6830> <6831> 14627 +<6832> <6832> 5185 +<6834> <6834> 2711 +<6838> <6838> 1449 +<6839> <6839> 2076 +<683c> <683c> 1448 +<683d> <683d> 2111 +<6840> <6840> 5183 +<6841> <6841> 1851 +<6842> <6842> 1825 +<6843> <6843> 3175 +<6844> <6844> 8495 +<6846> <6846> 5181 +<6848> <6848> 1162 +<684d> <684d> 5184 +<684e> <684e> 5186 +<6850> <6850> 1733 +<6851> <6851> 1794 +<6852> <6852> 8492 +<6853> <6853> 1528 +<6854> <6854> 1637 +<6859> <6859> 5189 +<685b> <685b> 14629 +endcidrange + +100 begincidrange +<685c> <685c> 2153 +<685d> <685d> 3743 +<685f> <685f> 2181 +<6863> <6863> 5190 +<6867> <6867> 3490 +<6872> <6872> 14630 +<6874> <6874> 5202 +<6875> <6875> 14631 +<6876> <6876> 1331 +<6877> <6877> 5191 +<687a> <687a> 14632 +<687e> <687e> 5208 +<687f> <687f> 5192 +<6881> <6881> 3978 +<6883> <6883> 5199 +<6884> <6884> 14633 +<6885> <6885> 3349 +<688d> <688d> 5207 +<688e> <688e> 7836 +<688f> <688f> 5194 +<6893> <6893> 1144 +<6894> <6894> 5196 +<6897> <6897> 1998 +<689b> <689b> 5198 +<689d> <689d> 5197 +<689f> <689f> 5193 +<68a0> <68a0> 5204 +<68a2> <68a2> 2471 +<68a5> <68a5> 14634 +<68a6> <68a6> 4542 +<68a7> <68a7> 1948 +<68a8> <68a8> 3942 +<68ad> <68ad> 5195 +<68af> <68af> 3088 +<68b0> <68b0> 1409 +<68b1> <68b1> 2077 +<68b2> <68b2> 14635 +<68b3> <68b3> 5187 +<68b5> <68b5> 5203 +<68b6> <68b6> 1471 +<68b9> <68b9> 5201 +<68ba> <68ba> 5205 +<68bc> <68bc> 3176 +<68c4> <68c4> 1594 +<68c6> <68c6> 5235 +<68c8> <68c8> 8367 +<68c9> <68c9> 3797 +<68ca> <68ca> 5210 +<68cb> <68cb> 1593 +<68cd> <68cd> 5217 +<68cf> <68cf> 8496 +<68d0> <68d0> 14636 +<68d2> <68d2> 3694 +<68d4> <68d4> 5218 +<68d5> <68d5> 5220 +<68d6> <68d6> 14637 +<68d7> <68d7> 5224 +<68d8> <68d8> 5212 +<68da> <68da> 2920 +<68df> <68df> 3177 +<68e0> <68e0> 5228 +<68e1> <68e1> 5215 +<68e3> <68e3> 5225 +<68e7> <68e7> 5219 +<68e8> <68e8> 14638 +<68ed> <68ed> 14639 +<68ee> <68ee> 2559 +<68ef> <68ef> 5229 +<68f0> <68f1> 14640 +<68f2> <68f2> 2647 +<68f9> <68f9> 5227 +<68fa> <68fa> 1529 +<68fc> <68fc> 14642 +<6900> <6900> 4086 +<6901> <6901> 5209 +<6904> <6904> 5223 +<6905> <6905> 1180 +<6908> <6908> 5211 +<690b> <690b> 3782 +<690c> <690c> 5216 +<690d> <690d> 2536 +<690e> <690e> 3043 +<690f> <690f> 5206 +<6911> <6911> 14643 +<6912> <6912> 5222 +<6913> <6913> 14644 +<6919> <6919> 2624 +<691a> <691a> 5232 +<691b> <691b> 1487 +<691c> <691c> 1877 +<6921> <6921> 5234 +<6922> <6922> 5213 +<6923> <6923> 5233 +<6925> <6925> 5226 +<6926> <6926> 5214 +<6928> <6928> 5230 +<692a> <692a> 5231 +<6930> <6930> 5248 +<6934> <6934> 3238 +<6935> <6935> 14645 +endcidrange + +100 begincidrange +<6936> <6936> 5221 +<6939> <6939> 5244 +<693b> <693b> 14646 +<693d> <693d> 5246 +<693f> <693f> 3060 +<694a> <694a> 3894 +<6953> <6953> 3560 +<6954> <6954> 5241 +<6955> <6955> 2858 +<6957> <6957> 14647 +<6959> <6959> 5247 +<695a> <695a> 2753 +<695c> <695c> 5238 +<695d> <695d> 5251 +<695e> <695e> 5250 +<6960> <6960> 3271 +<6961> <6961> 5249 +<6962> <6962> 3266 +<6963> <6963> 14648 +<6968> <6968> 8498 +<696a> <696a> 5253 +<696b> <696b> 5240 +<696d> <696d> 1728 +<696e> <696e> 5243 +<696f> <696f> 2407 +<6972> <6972> 14649 +<6973> <6973> 3350 +<6974> <6974> 5245 +<6975> <6975> 1731 +<6977> <6977> 5237 +<6978> <6978> 5239 +<6979> <6979> 5236 +<697c> <697c> 4054 +<697d> <697d> 1464 +<697e> <697e> 5242 +<697f> <6980> 14650 +<6981> <6981> 5252 +<6982> <6982> 1427 +<698a> <698a> 2135 +<698e> <698e> 1279 +<6991> <6991> 5269 +<6994> <6994> 4055 +<6995> <6995> 5272 +<6998> <6998> 8500 +<699b> <699b> 2560 +<699c> <699c> 5271 +<69a0> <69a0> 5270 +<69a6> <69a6> 14652 +<69a7> <69a7> 5267 +<69ad> <69ad> 14653 +<69ae> <69ae> 5255 +<69b1> <69b1> 5284 +<69b2> <69b2> 5254 +<69b4> <69b4> 5273 +<69b7> <69b7> 14654 +<69bb> <69bb> 5265 +<69be> <69be> 5260 +<69bf> <69bf> 5257 +<69c1> <69c1> 5258 +<69c3> <69c3> 5266 +<69c7> <69c7> 7475 +<69ca> <69ca> 5263 +<69cb> <69cb> 1999 +<69cc> <69cc> 3044 +<69cd> <69cd> 2790 +<69ce> <69ce> 5261 +<69d0> <69d0> 5256 +<69d3> <69d3> 5259 +<69d6> <69d7> 14655 +<69d8> <69d8> 3895 +<69d9> <69d9> 3736 +<69dd> <69dd> 5264 +<69de> <69de> 5274 +<69e2> <69e2> 8501 +<69e7> <69e7> 5282 +<69e8> <69e8> 5275 +<69ea> <69ea> 13679 +<69eb> <69eb> 5288 +<69ed> <69ed> 5286 +<69f2> <69f2> 5281 +<69f6> <69f6> 14143 +<69f9> <69f9> 5280 +<69fb> <69fb> 3052 +<69fd> <69fd> 2791 +<69ff> <69ff> 5278 +<6a01> <6a01> 14657 +<6a02> <6a02> 5276 +<6a05> <6a05> 5283 +<6a0a> <6a0a> 5289 +<6a0b> <6a0b> 3465 +<6a0c> <6a0c> 5295 +<6a0f> <6a0f> 14658 +<6a12> <6a12> 5290 +<6a13> <6a13> 5293 +<6a14> <6a14> 5287 +<6a15> <6a15> 14659 +<6a17> <6a17> 2994 +<6a19> <6a19> 3498 +<6a1b> <6a1b> 5277 +<6a1e> <6a1e> 5285 +endcidrange + +100 begincidrange +<6a1f> <6a1f> 2472 +<6a21> <6a21> 3803 +<6a22> <6a22> 5305 +<6a23> <6a23> 5292 +<6a28> <6a28> 14660 +<6a29> <6a29> 1878 +<6a2a> <6a2a> 1315 +<6a2b> <6a2b> 1469 +<6a2e> <6a2e> 5268 +<6a30> <6a30> 8502 +<6a34> <6a34> 14661 +<6a35> <6a35> 2473 +<6a36> <6a36> 5297 +<6a38> <6a38> 5304 +<6a39> <6a39> 2341 +<6a3a> <6a3a> 1488 +<6a3d> <6a3d> 2924 +<6a3e> <6a3e> 14662 +<6a44> <6a44> 5294 +<6a45> <6a45> 14663 +<6a46> <6a46> 8504 +<6a47> <6a47> 5299 +<6a48> <6a48> 5303 +<6a4b> <6a4b> 1710 +<6a50> <6a51> 14664 +<6a54> <6a54> 15412 +<6a56> <6a56> 14666 +<6a58> <6a58> 1638 +<6a59> <6a59> 5301 +<6a5b> <6a5b> 14667 +<6a5f> <6a5f> 1595 +<6a61> <6a61> 3235 +<6a62> <6a62> 5300 +<6a66> <6a66> 5302 +<6a6b> <6a6b> 8503 +<6a72> <6a72> 5296 +<6a73> <6a73> 8505 +<6a78> <6a78> 5298 +<6a7e> <6a7e> 8506 +<6a7f> <6a7f> 1470 +<6a80> <6a80> 2951 +<6a83> <6a83> 14668 +<6a84> <6a84> 5309 +<6a89> <6a89> 14669 +<6a8d> <6a8d> 5307 +<6a8e> <6a8e> 1949 +<6a90> <6a90> 5306 +<6a91> <6a91> 14670 +<6a97> <6a97> 5312 +<6a9c> <6a9c> 5179 +<6a9d> <6a9f> 14671 +<6aa0> <6aa0> 5308 +<6aa2> <6aa3> 5310 +<6aaa> <6aaa> 5323 +<6aac> <6aac> 5319 +<6aae> <6aae> 5200 +<6ab3> <6ab3> 5318 +<6ab8> <6ab8> 5317 +<6abb> <6abb> 5314 +<6ac1> <6ac1> 5291 +<6ac2> <6ac2> 5316 +<6ac3> <6ac3> 5315 +<6ad1> <6ad1> 5321 +<6ad3> <6ad3> 4044 +<6ada> <6ada> 5324 +<6adb> <6adb> 1779 +<6adc> <6adc> 14674 +<6ade> <6ade> 5320 +<6adf> <6adf> 5322 +<6ae2> <6ae2> 8507 +<6ae4> <6ae4> 8508 +<6ae7> <6ae7> 14675 +<6ae8> <6ae8> 3387 +<6aea> <6aea> 5325 +<6aec> <6aec> 14676 +<6afa> <6afa> 5329 +<6afb> <6afb> 5326 +<6b04> <6b04> 3933 +<6b05> <6b05> 5327 +<6b0a> <6b0a> 5279 +<6b12> <6b12> 5330 +<6b16> <6b16> 5331 +<6b1d> <6b1d> 1239 +<6b1e> <6b1e> 14677 +<6b1f> <6b1f> 5333 +<6b20> <6b20> 1853 +<6b21> <6b21> 2253 +<6b23> <6b23> 1741 +<6b24> <6b24> 14678 +<6b27> <6b27> 1316 +<6b32> <6b32> 3913 +<6b35> <6b35> 14679 +<6b37> <6b37> 5335 +<6b38> <6b38> 5334 +<6b39> <6b39> 5337 +<6b3a> <6b3a> 1623 +<6b3d> <6b3d> 1742 +<6b3e> <6b3e> 1530 +<6b43> <6b43> 5340 +<6b46> <6b46> 14680 +endcidrange + +100 begincidrange +<6b47> <6b47> 5339 +<6b49> <6b49> 5341 +<6b4c> <6b4c> 1358 +<6b4e> <6b4e> 2933 +<6b50> <6b50> 5342 +<6b53> <6b53> 1531 +<6b54> <6b54> 5344 +<6b56> <6b56> 14681 +<6b59> <6b59> 5343 +<6b5b> <6b5b> 5345 +<6b5f> <6b5f> 5346 +<6b60> <6b60> 14682 +<6b61> <6b61> 5347 +<6b62> <6b62> 2221 +<6b63> <6b63> 2649 +<6b64> <6b64> 2065 +<6b65> <6b65> 13386 +<6b66> <6b66> 3554 +<6b69> <6b69> 3634 +<6b6a> <6b6a> 4074 +<6b6f> <6b6f> 2243 +<6b72> <6b72> 13785 +<6b73> <6b73> 2112 +<6b74> <6b74> 4026 +<6b77> <6b77> 13398 +<6b78> <6b79> 5348 +<6b7b> <6b7b> 2222 +<6b7f> <6b80> 5350 +<6b82> <6b82> 14683 +<6b83> <6b83> 5353 +<6b84> <6b84> 5352 +<6b86> <6b86> 3718 +<6b89> <6b89> 2408 +<6b8a> <6b8a> 2328 +<6b8b> <6b8b> 2194 +<6b8d> <6b8d> 5354 +<6b95> <6b95> 5356 +<6b96> <6b96> 2537 +<6b98> <6b98> 5355 +<6b9e> <6b9e> 5357 +<6ba4> <6ba4> 5358 +<6baa> <6bab> 5359 +<6baf> <6baf> 5361 +<6bb1> <6bb1> 5363 +<6bb2> <6bb2> 5362 +<6bb3> <6bb3> 5364 +<6bb4> <6bb4> 1317 +<6bb5> <6bb5> 2952 +<6bb7> <6bb7> 5365 +<6bba> <6bba> 2164 +<6bbb> <6bbb> 1450 +<6bbc> <6bbc> 5366 +<6bbe> <6bbe> 14684 +<6bbf> <6bbf> 3132 +<6bc0> <6bc0> 4509 +<6bc5> <6bc5> 1597 +<6bc6> <6bc6> 5367 +<6bcb> <6bcb> 5368 +<6bcc> <6bcc> 14148 +<6bcd> <6bcd> 3644 +<6bce> <6bce> 3734 +<6bcf> <6bcf> 13388 +<6bd2> <6bd2> 3231 +<6bd3> <6bd3> 5369 +<6bd4> <6bd4> 3450 +<6bd6> <6bd6> 8509 +<6bd8> <6bd8> 3471 +<6bdb> <6bdb> 3807 +<6bdf> <6bdf> 5370 +<6be1> <6be1> 14685 +<6beb> <6beb> 5372 +<6bec> <6bec> 5371 +<6bef> <6bef> 5374 +<6bf1> <6bf1> 14686 +<6bf3> <6bf3> 5373 +<6c08> <6c08> 5376 +<6c0f> <6c0f> 2223 +<6c10> <6c10> 14687 +<6c11> <6c11> 3773 +<6c13> <6c14> 5377 +<6c17> <6c17> 1598 +<6c1b> <6c1b> 5379 +<6c23> <6c23> 5381 +<6c24> <6c24> 5380 +<6c33> <6c33> 14688 +<6c34> <6c34> 2603 +<6c35> <6c35> 14689 +<6c37> <6c37> 3499 +<6c38> <6c38> 1260 +<6c3a> <6c3a> 14690 +<6c3e> <6c3e> 3417 +<6c3f> <6c3f> 8510 +<6c40> <6c40> 3089 +<6c41> <6c41> 2379 +<6c42> <6c42> 1659 +<6c4e> <6c4e> 3418 +<6c50> <6c50> 2266 +<6c55> <6c55> 5383 +<6c57> <6c57> 1532 +<6c59> <6c59> 14691 +endcidrange + +100 begincidrange +<6c5a> <6c5a> 1306 +<6c5c> <6c5c> 8511 +<6c5d> <6c5d> 3274 +<6c5e> <6c5e> 5382 +<6c5f> <6c5f> 2000 +<6c60> <6c60> 2961 +<6c62> <6c62> 5384 +<6c68> <6c68> 5392 +<6c6a> <6c6a> 5385 +<6c6f> <6c6f> 8513 +<6c70> <6c70> 2849 +<6c72> <6c72> 1660 +<6c73> <6c73> 5393 +<6c76> <6c76> 14692 +<6c7a> <6c7a> 1854 +<6c7b> <6c7b> 14693 +<6c7d> <6c7d> 1599 +<6c7e> <6c7e> 5391 +<6c81> <6c81> 5389 +<6c82> <6c82> 5386 +<6c83> <6c83> 3914 +<6c85> <6c85> 14694 +<6c86> <6c86> 8512 +<6c88> <6c88> 3036 +<6c8c> <6c8c> 3249 +<6c8d> <6c8d> 5387 +<6c90> <6c90> 5395 +<6c92> <6c92> 5394 +<6c93> <6c93> 1785 +<6c95> <6c95> 14695 +<6c96> <6c96> 1325 +<6c99> <6c99> 2091 +<6c9a> <6c9a> 5388 +<6c9b> <6c9b> 5390 +<6c9c> <6c9c> 14696 +<6ca1> <6ca1> 3717 +<6ca2> <6ca2> 2900 +<6caa> <6caa> 14153 +<6cab> <6cab> 3749 +<6cae> <6cae> 5403 +<6cb1> <6cb1> 5404 +<6cb3> <6cb3> 1359 +<6cb8> <6cb8> 3576 +<6cb9> <6cb9> 3849 +<6cba> <6cba> 5406 +<6cbb> <6cbb> 2255 +<6cbc> <6cbc> 2474 +<6cbd> <6cbd> 5399 +<6cbe> <6cbe> 5405 +<6cbf> <6cbf> 1290 +<6cc1> <6cc1> 1711 +<6cc4> <6cc4> 5396 +<6cc5> <6cc5> 5401 +<6cc9> <6cc9> 2712 +<6cca> <6cca> 3367 +<6ccc> <6ccc> 3451 +<6cd0> <6cd0> 14697 +<6cd3> <6cd3> 5398 +<6cd4> <6cd4> 14698 +<6cd5> <6cd5> 3663 +<6cd6> <6cd6> 14699 +<6cd7> <6cd7> 5400 +<6cd9> <6cd9> 5409 +<6cda> <6cda> 8514 +<6cdb> <6cdb> 5407 +<6cdd> <6cdd> 5402 +<6ce0> <6ce0> 14700 +<6ce1> <6ce1> 3664 +<6ce2> <6ce2> 3326 +<6ce3> <6ce3> 1661 +<6ce5> <6ce5> 3103 +<6ce8> <6ce8> 2987 +<6cea> <6cea> 5410 +<6ceb> <6cec> 14701 +<6cee> <6cee> 14703 +<6cef> <6cef> 5408 +<6cf0> <6cf0> 2873 +<6cf1> <6cf1> 5397 +<6cf3> <6cf3> 1261 +<6d01> <6d01> 15413 +<6d04> <6d04> 8515 +<6d0a> <6d0a> 14704 +<6d0b> <6d0b> 3896 +<6d0c> <6d0c> 5421 +<6d0e> <6d0e> 14705 +<6d11> <6d11> 14706 +<6d12> <6d12> 5420 +<6d17> <6d17> 2714 +<6d19> <6d19> 5417 +<6d1b> <6d1b> 3926 +<6d1e> <6d1e> 3214 +<6d1f> <6d1f> 5411 +<6d25> <6d25> 3041 +<6d29> <6d29> 1262 +<6d2a> <6d2a> 2001 +<6d2b> <6d2b> 5414 +<6d2e> <6d2e> 14707 +<6d32> <6d32> 2353 +<6d33> <6d33> 5419 +<6d35> <6d35> 5418 +endcidrange + +100 begincidrange +<6d36> <6d36> 5413 +<6d38> <6d38> 5416 +<6d3b> <6d3b> 1478 +<6d3d> <6d3d> 5415 +<6d3e> <6d3e> 3327 +<6d41> <6d41> 3958 +<6d44> <6d44> 2524 +<6d45> <6d45> 2713 +<6d57> <6d57> 14708 +<6d59> <6d59> 5427 +<6d5a> <6d5a> 5425 +<6d5c> <6d5c> 3519 +<6d5e> <6d5e> 14709 +<6d63> <6d63> 5422 +<6d64> <6d64> 5424 +<6d65> <6d65> 14710 +<6d66> <6d66> 1244 +<6d69> <6d69> 2002 +<6d6a> <6d6a> 4056 +<6d6c> <6d6c> 1435 +<6d6e> <6d6e> 3540 +<6d6f> <6d6f> 8517 +<6d74> <6d74> 3915 +<6d77> <6d77> 1410 +<6d78> <6d78> 2561 +<6d79> <6d79> 5426 +<6d82> <6d82> 14711 +<6d85> <6d85> 5431 +<6d87> <6d87> 8516 +<6d88> <6d88> 2475 +<6d89> <6d89> 13354 +<6d8c> <6d8c> 3866 +<6d8e> <6d8e> 5428 +<6d93> <6d93> 5423 +<6d95> <6d95> 5429 +<6d96> <6d96> 8518 +<6d99> <6d99> 4006 +<6d9b> <6d9b> 3181 +<6d9c> <6d9c> 3226 +<6dac> <6dac> 8519 +<6daf> <6daf> 1428 +<6db2> <6db2> 1271 +<6db5> <6db5> 5435 +<6db8> <6db8> 5438 +<6dbc> <6dbc> 3979 +<6dbf> <6dbf> 14712 +<6dc0> <6dc0> 3918 +<6dc4> <6dc4> 14713 +<6dc5> <6dc5> 5445 +<6dc6> <6dc6> 5439 +<6dc7> <6dc7> 5436 +<6dca> <6dca> 14714 +<6dcb> <6dcb> 3996 +<6dcc> <6dcc> 5442 +<6dcf> <6dcf> 8520 +<6dd0> <6dd0> 15414 +<6dd1> <6dd1> 2388 +<6dd2> <6dd2> 5444 +<6dd5> <6dd5> 5449 +<6dd6> <6dd6> 14715 +<6dd8> <6dd8> 3179 +<6dd9> <6dd9> 5447 +<6dda> <6dda> 13395 +<6dde> <6dde> 5441 +<6de1> <6de1> 2934 +<6de4> <6de4> 5448 +<6de6> <6de6> 5437 +<6de8> <6de8> 5443 +<6de9> <6de9> 14716 +<6dea> <6dea> 5450 +<6deb> <6deb> 1216 +<6dec> <6dec> 5440 +<6dee> <6dee> 5451 +<6df1> <6df1> 2562 +<6df2> <6df2> 8522 +<6df3> <6df3> 2409 +<6df5> <6df5> 3573 +<6df7> <6df7> 2078 +<6df8> <6df8> 8521 +<6df9> <6df9> 5432 +<6dfa> <6dfa> 5446 +<6dfb> <6dfb> 3124 +<6dfc> <6dfc> 8523 +<6e05> <6e05> 2650 +<6e07> <6e07> 1479 +<6e08> <6e08> 2113 +<6e09> <6e09> 2476 +<6e0a> <6e0a> 5434 +<6e0b> <6e0b> 2380 +<6e13> <6e13> 1826 +<6e15> <6e15> 5433 +<6e17> <6e17> 14150 +<6e19> <6e19> 5455 +<6e1a> <6e1a> 2423 +<6e1b> <6e1b> 1902 +<6e1d> <6e1d> 5470 +<6e1f> <6e1f> 5464 +<6e20> <6e20> 1678 +<6e21> <6e21> 3145 +<6e22> <6e22> 14717 +endcidrange + +100 begincidrange +<6e23> <6e23> 5459 +<6e24> <6e24> 5468 +<6e25> <6e25> 1139 +<6e26> <6e26> 1236 +<6e27> <6e27> 8526 +<6e29> <6e29> 1337 +<6e2b> <6e2b> 5461 +<6e2c> <6e2c> 2828 +<6e2d> <6e2d> 5452 +<6e2e> <6e2e> 5454 +<6e2f> <6e2f> 2003 +<6e34> <6e34> 13330 +<6e38> <6e38> 5471 +<6e39> <6e39> 8524 +<6e3a> <6e3a> 5466 +<6e3c> <6e3c> 8527 +<6e3e> <6e3e> 5458 +<6e42> <6e42> 15415 +<6e43> <6e43> 5465 +<6e4a> <6e4a> 3767 +<6e4d> <6e4d> 5463 +<6e4e> <6e4e> 5467 +<6e51> <6e51> 14718 +<6e56> <6e56> 1924 +<6e58> <6e58> 2477 +<6e5b> <6e5b> 2935 +<6e5c> <6e5c> 8525 +<6e5f> <6e5f> 5457 +<6e67> <6e67> 3865 +<6e6b> <6e6b> 5460 +<6e6e> <6e6e> 5453 +<6e6f> <6e6f> 3180 +<6e72> <6e72> 5456 +<6e76> <6e76> 5462 +<6e7e> <6e7e> 4087 +<6e7f> <6e7f> 2282 +<6e80> <6e80> 3756 +<6e82> <6e82> 5472 +<6e8c> <6e8c> 3394 +<6e8f> <6e8f> 5484 +<6e90> <6e90> 1903 +<6e96> <6e96> 2410 +<6e98> <6e98> 5474 +<6e9c> <6e9c> 3959 +<6e9d> <6e9d> 2004 +<6e9f> <6e9f> 5487 +<6ea2> <6ea2> 1202 +<6ea5> <6ea5> 5485 +<6eaa> <6eaa> 5473 +<6eab> <6eab> 13324 +<6eaf> <6eaf> 5479 +<6eb2> <6eb2> 5481 +<6eb6> <6eb6> 3897 +<6eb7> <6eb7> 5476 +<6eba> <6eba> 3112 +<6ebd> <6ebd> 5478 +<6ebf> <6ebf> 8528 +<6ec2> <6ec2> 5486 +<6ec4> <6ec4> 5480 +<6ec5> <6ec5> 3795 +<6ec7> <6ec7> 14719 +<6ec9> <6ec9> 5475 +<6eca> <6eca> 14720 +<6ecb> <6ecb> 2254 +<6ecc> <6ecc> 5499 +<6ece> <6ece> 14721 +<6ed1> <6ed1> 1480 +<6ed3> <6ed3> 5477 +<6ed4> <6ed5> 5482 +<6ed9> <6ed9> 15416 +<6edd> <6edd> 2892 +<6ede> <6ede> 2874 +<6ee6> <6ee6> 15396 +<6eec> <6eec> 5491 +<6eef> <6eef> 5497 +<6ef2> <6ef2> 5495 +<6ef4> <6ef4> 3107 +<6ef7> <6ef7> 5502 +<6ef8> <6ef8> 5492 +<6efd> <6efd> 14722 +<6efe> <6efe> 5493 +<6eff> <6eff> 5469 +<6f01> <6f01> 1683 +<6f02> <6f02> 3500 +<6f06> <6f06> 2283 +<6f09> <6f09> 2057 +<6f0f> <6f0f> 4057 +<6f11> <6f11> 5489 +<6f13> <6f13> 5501 +<6f14> <6f14> 1291 +<6f15> <6f15> 2792 +<6f1a> <6f1a> 14723 +<6f20> <6f20> 3375 +<6f22> <6f22> 1533 +<6f23> <6f23> 4034 +<6f2a> <6f2a> 14724 +<6f2b> <6f2b> 3757 +<6f2c> <6f2c> 3054 +<6f2f> <6f2f> 14725 +<6f31> <6f31> 5496 +endcidrange + +100 begincidrange +<6f32> <6f32> 5498 +<6f33> <6f33> 14726 +<6f38> <6f38> 2740 +<6f3e> <6f3e> 5500 +<6f3f> <6f3f> 5494 +<6f41> <6f41> 5488 +<6f45> <6f45> 1535 +<6f51> <6f51> 7776 +<6f54> <6f54> 1855 +<6f58> <6f58> 5514 +<6f5a> <6f5a> 14727 +<6f5b> <6f5b> 5509 +<6f5c> <6f5c> 2716 +<6f5e> <6f5e> 14728 +<6f5f> <6f5f> 1473 +<6f62> <6f62> 14729 +<6f64> <6f64> 2411 +<6f66> <6f66> 5518 +<6f6d> <6f6d> 5511 +<6f6e> <6f6e> 3016 +<6f6f> <6f6f> 5508 +<6f70> <6f70> 3061 +<6f74> <6f74> 5543 +<6f78> <6f78> 5505 +<6f7a> <6f7a> 5504 +<6f7c> <6f7c> 5513 +<6f7d> <6f7d> 14730 +<6f80> <6f80> 5507 +<6f81> <6f81> 5506 +<6f82> <6f82> 5512 +<6f84> <6f84> 2629 +<6f86> <6f86> 5503 +<6f88> <6f88> 8529 +<6f8b> <6f8b> 14731 +<6f8d> <6f8d> 14732 +<6f8e> <6f8e> 5515 +<6f91> <6f91> 5516 +<6f92> <6f92> 14733 +<6f94> <6f94> 14734 +<6f97> <6f97> 1534 +<6f98> <6f98> 13884 +<6f9a> <6f9a> 14735 +<6fa1> <6fa1> 5521 +<6fa3> <6fa3> 5520 +<6fa4> <6fa4> 5522 +<6fa7> <6fa8> 14736 +<6faa> <6faa> 5525 +<6fb1> <6fb1> 3133 +<6fb3> <6fb3> 5519 +<6fb5> <6fb5> 8530 +<6fb6> <6fb6> 14738 +<6fb9> <6fb9> 5523 +<6fc0> <6fc0> 1849 +<6fc1> <6fc1> 2905 +<6fc2> <6fc2> 5517 +<6fc3> <6fc3> 3313 +<6fc6> <6fc6> 5524 +<6fd4> <6fd4> 5529 +<6fd5> <6fd5> 5527 +<6fd8> <6fd8> 5530 +<6fda> <6fda> 14739 +<6fdb> <6fdb> 5533 +<6fde> <6fde> 14740 +<6fdf> <6fdf> 5526 +<6fe0> <6fe0> 2044 +<6fe1> <6fe1> 3294 +<6fe4> <6fe4> 5430 +<6feb> <6feb> 3934 +<6fec> <6fec> 5528 +<6fee> <6fee> 5532 +<6fef> <6fef> 2901 +<6ff1> <6ff1> 5531 +<6ff3> <6ff3> 5510 +<6ff5> <6ff5> 8531 +<6ff6> <6ff6> 7076 +<6ff9> <6ff9> 14741 +<6ffa> <6ffa> 5536 +<6ffe> <6ffe> 5540 +<7001> <7001> 5538 +<7005> <7005> 8532 +<7006> <7006> 7760 +<7007> <7007> 8533 +<7009> <7009> 5534 +<700b> <700b> 5535 +<700f> <700f> 5539 +<7011> <7011> 5537 +<7015> <7015> 3520 +<7018> <7018> 5545 +<701a> <701a> 5542 +<701b> <701b> 5541 +<701d> <701d> 5544 +<701e> <701e> 3244 +<701f> <701f> 5546 +<7026> <7026> 2995 +<7027> <7027> 2893 +<7028> <7028> 8534 +<702c> <702c> 2633 +<7030> <7030> 5547 +<7032> <7032> 5549 +<7039> <7039> 14742 +endcidrange + +100 begincidrange +<703c> <703c> 14743 +<703e> <703e> 5548 +<704a> <704a> 14744 +<704c> <704c> 5490 +<7051> <7051> 5550 +<7054> <7054> 14745 +<7058> <7058> 3263 +<705d> <705e> 14746 +<7063> <7063> 5551 +<7064> <7064> 14748 +<706b> <706b> 1360 +<706c> <706c> 14749 +<706f> <706f> 3182 +<7070> <7070> 1411 +<7078> <7078> 1662 +<707c> <707c> 2314 +<707d> <707d> 2114 +<707e> <707e> 14750 +<7081> <7081> 14751 +<7085> <7085> 8535 +<7089> <7089> 4045 +<708a> <708a> 2604 +<708e> <708e> 1292 +<7092> <7092> 5553 +<7095> <7095> 14752 +<7099> <7099> 5552 +<70ab> <70ab> 8536 +<70ac> <70ac> 5556 +<70ad> <70ad> 2936 +<70ae> <70ae> 5559 +<70af> <70af> 5554 +<70b3> <70b3> 5558 +<70b7> <70b7> 14753 +<70b8> <70b8> 5557 +<70b9> <70b9> 3130 +<70ba> <70ba> 1181 +<70bb> <70bb> 8365 +<70c8> <70c8> 4029 +<70cb> <70cb> 5561 +<70cf> <70cf> 1226 +<70d3> <70d4> 14754 +<70d8> <70d8> 14756 +<70d9> <70d9> 5563 +<70dc> <70dc> 14757 +<70dd> <70dd> 5562 +<70df> <70df> 5560 +<70f1> <70f1> 5555 +<70f9> <70f9> 3665 +<70fd> <70fd> 5565 +<7104> <7104> 8538 +<7107> <7107> 14758 +<7109> <7109> 5564 +<710f> <710f> 8537 +<7114> <7114> 1293 +<7119> <7119> 5567 +<711a> <711a> 3586 +<711c> <711c> 5566 +<7120> <7120> 14759 +<7121> <7121> 3777 +<7126> <7126> 2479 +<7130> <7130> 7644 +<7131> <7131> 14760 +<7136> <7136> 2741 +<713c> <713c> 2478 +<7146> <7147> 8540 +<7149> <7149> 4035 +<714a> <714a> 14761 +<714c> <714c> 5573 +<714e> <714e> 2717 +<7152> <7152> 14762 +<7155> <7155> 5569 +<7156> <7156> 5574 +<7159> <7159> 1294 +<715c> <715c> 8539 +<7160> <7160> 14763 +<7162> <7162> 5572 +<7164> <7164> 3351 +<7165> <7165> 5568 +<7166> <7166> 5571 +<7167> <7167> 2480 +<7169> <7169> 3429 +<716c> <716c> 5575 +<716e> <716e> 2301 +<7179> <7179> 14764 +<717d> <717d> 2718 +<7184> <7184> 5578 +<7188> <7188> 5570 +<718a> <718a> 1789 +<718f> <718f> 5576 +<7192> <7192> 14765 +<7194> <7194> 3898 +<7195> <7195> 5579 +<7199> <7199> 8285 +<719f> <719f> 2393 +<71a8> <71a8> 5580 +<71ac> <71ac> 5581 +<71b1> <71b1> 3300 +<71b3> <71b3> 14766 +<71b9> <71b9> 5583 +<71be> <71be> 5584 +endcidrange + +100 begincidrange +<71c1> <71c1> 8543 +<71c3> <71c3> 3305 +<71c8> <71c8> 3183 +<71c9> <71c9> 5586 +<71cb> <71cb> 14767 +<71ce> <71ce> 5588 +<71d0> <71d0> 3997 +<71d2> <71d2> 5585 +<71d3> <71d3> 14768 +<71d4> <71d4> 5587 +<71d5> <71d5> 1295 +<71d6> <71d6> 14769 +<71d7> <71d7> 5582 +<71df> <71df> 4430 +<71e0> <71e0> 5589 +<71e5> <71e5> 2793 +<71e6> <71e6> 2182 +<71e7> <71e7> 5591 +<71ec> <71ec> 5590 +<71ed> <71ed> 2538 +<71ee> <71ee> 4334 +<71f5> <71f5> 5592 +<71f9> <71f9> 5594 +<71fb> <71fb> 5577 +<71fc> <71fc> 5593 +<71fe> <71fe> 8544 +<71ff> <71ff> 5595 +<7200> <7200> 14770 +<7206> <7206> 3376 +<720d> <720d> 5596 +<7210> <7210> 5597 +<721b> <721b> 5598 +<721d> <721d> 14771 +<7228> <7228> 5599 +<722a> <722a> 3066 +<722b> <722b> 14772 +<722c> <722c> 5601 +<722d> <722d> 5600 +<7230> <7230> 5602 +<7232> <7232> 5603 +<7235> <7235> 2315 +<7236> <7236> 3541 +<7238> <7238> 14773 +<723a> <723a> 3832 +<723b> <723c> 5604 +<723d> <723d> 2776 +<723e> <723e> 2256 +<723f> <7240> 5606 +<7241> <7241> 14774 +<7246> <7246> 5608 +<7247> <7247> 3618 +<7248> <7248> 3419 +<724b> <724b> 5609 +<724c> <724c> 3341 +<7252> <7252> 3017 +<7253> <7253> 14775 +<7255> <7256> 14776 +<7258> <7258> 5610 +<7259> <7259> 1383 +<725b> <725b> 1671 +<725c> <725c> 14778 +<725d> <725d> 3794 +<725f> <725f> 3778 +<7261> <7261> 1332 +<7262> <7262> 4058 +<7267> <7267> 3712 +<7269> <7269> 3578 +<7272> <7272> 2651 +<7274> <7274> 5611 +<7279> <7279> 3227 +<727d> <727d> 1879 +<727e> <727e> 5612 +<7280> <7280> 2116 +<7281> <7281> 5614 +<7282> <7282> 5613 +<7287> <7287> 5615 +<728d> <728d> 14779 +<7292> <7292> 5616 +<7296> <7296> 5617 +<72a0> <72a0> 1624 +<72a2> <72a2> 5618 +<72a7> <72a7> 5619 +<72ac> <72ac> 1880 +<72ad> <72ad> 14780 +<72af> <72af> 3420 +<72b1> <72b1> 8545 +<72b2> <72b2> 5621 +<72b4> <72b4> 14781 +<72b6> <72b6> 2525 +<72b9> <72b9> 5620 +<72be> <72be> 8546 +<72c0> <72c0> 13355 +<72c2> <72c2> 1712 +<72c3> <72c3> 5622 +<72c4> <72c4> 5624 +<72c6> <72c6> 5623 +<72c7> <72c7> 14782 +<72ce> <72ce> 5625 +<72d0> <72d0> 1925 +<72d2> <72d2> 5626 +endcidrange + +100 begincidrange +<72d7> <72d7> 1761 +<72d9> <72d9> 2754 +<72db> <72db> 2063 +<72e0> <72e1> 5628 +<72e2> <72e2> 5627 +<72e9> <72e9> 2329 +<72ec> <72ec> 3232 +<72ed> <72ed> 1713 +<72f7> <72f7> 5631 +<72f8> <72f8> 2922 +<72f9> <72f9> 5630 +<72fb> <72fb> 14783 +<72fc> <72fc> 4059 +<72fd> <72fd> 3352 +<7304> <7305> 14784 +<730a> <730a> 5634 +<7316> <7316> 5636 +<7317> <7317> 5633 +<731b> <731b> 3808 +<731c> <731c> 5635 +<731d> <731d> 5637 +<731f> <731f> 3980 +<7324> <7324> 8547 +<7325> <7325> 5641 +<7328> <7328> 14786 +<7329> <7329> 5640 +<732a> <732a> 2996 +<732b> <732b> 3299 +<732e> <732e> 1881 +<732f> <732f> 5639 +<7331> <7331> 14787 +<7334> <7334> 5638 +<7336> <7337> 3867 +<733e> <733e> 5642 +<733f> <733f> 1296 +<7343> <7343> 14788 +<7344> <7344> 2056 +<7345> <7345> 2224 +<734e> <734f> 5643 +<7357> <7357> 5646 +<7363> <7363> 2381 +<7368> <7368> 5648 +<736a> <736a> 5647 +<736c> <736c> 14789 +<7370> <7370> 5649 +<7372> <7372> 1451 +<7375> <7375> 5651 +<7377> <7377> 8549 +<7378> <7378> 5650 +<737a> <737a> 5653 +<737b> <737b> 5652 +<737c> <737c> 14790 +<7383> <7383> 14791 +<7384> <7384> 1904 +<7385> <7386> 14792 +<7387> <7387> 3952 +<7389> <7389> 1732 +<738b> <738b> 1318 +<7395> <7395> 14794 +<7396> <7396> 1762 +<739e> <73a0> 14795 +<73a6> <73a6> 14798 +<73a8> <73a8> 15423 +<73a9> <73a9> 1565 +<73ab> <73ab> 14799 +<73b2> <73b2> 4016 +<73b3> <73b3> 5655 +<73b5> <73b5> 14800 +<73b7> <73b7> 14801 +<73ba> <73ba> 13802 +<73bb> <73bb> 5657 +<73bc> <73bc> 14802 +<73bd> <73bd> 8550 +<73c0> <73c0> 5658 +<73c2> <73c2> 1361 +<73c8> <73c8> 5654 +<73c9> <73c9> 8551 +<73ca> <73ca> 2183 +<73cd> <73cd> 3037 +<73ce> <73ce> 5656 +<73cf> <73cf> 14803 +<73d2> <73d2> 8554 +<73d6> <73d6> 8552 +<73d9> <73d9> 14804 +<73de> <73de> 5661 +<73e0> <73e0> 2330 +<73e3> <73e3> 8553 +<73e4> <73e4> 15417 +<73e5> <73e5> 5659 +<73e9> <73e9> 14805 +<73ea> <73ea> 1812 +<73ed> <73ed> 3421 +<73ee> <73ee> 5660 +<73f1> <73f1> 5687 +<73f4> <73f4> 14806 +<73f5> <73f5> 8556 +<73f8> <73f8> 5666 +<73fd> <73fd> 14807 +<73fe> <73fe> 1905 +<7403> <7403> 1663 +endcidrange + +100 begincidrange +<7404> <7404> 14808 +<7405> <7405> 5663 +<7406> <7406> 3943 +<7407> <7407> 8555 +<7409> <7409> 3960 +<740a> <740a> 14809 +<741a> <741b> 14810 +<7421> <7421> 15418 +<7422> <7422> 2902 +<7424> <7424> 14812 +<7425> <7425> 5665 +<7426> <7426> 8557 +<7428> <7428> 14813 +<7429> <7429> 8559 +<742a> <742a> 8558 +<742c> <742c> 14814 +<742e> <742e> 8560 +<742f> <7431> 14815 +<7432> <7432> 5667 +<7433> <7433> 3998 +<7434> <7434> 1743 +<7435> <7435> 3472 +<7436> <7436> 3328 +<7439> <7439> 14818 +<743a> <743a> 5668 +<743f> <743f> 5670 +<7441> <7441> 5673 +<7444> <7444> 14819 +<7447> <7447> 14820 +<744b> <744b> 14821 +<744d> <744d> 14822 +<7451> <7451> 14823 +<7455> <7455> 5669 +<7457> <7457> 14824 +<7459> <7459> 5672 +<745a> <745a> 1950 +<745b> <745b> 1263 +<745c> <745c> 5674 +<745e> <745e> 2614 +<745f> <745f> 5671 +<7460> <7460> 4004 +<7462> <7462> 8561 +<7463> <7463> 5677 +<7464> <7464> 7477 +<7466> <7466> 14825 +<7469> <7469> 5675 +<746a> <746a> 5678 +<746b> <746b> 14826 +<746f> <746f> 5664 +<7470> <7470> 5676 +<7471> <7471> 14827 +<7473> <7473> 2092 +<7476> <7476> 5679 +<747e> <747e> 5680 +<7480> <7480> 14828 +<7483> <7483> 3944 +<7485> <7487> 14829 +<7489> <7489> 8562 +<748b> <748b> 5681 +<7490> <7490> 14832 +<7498> <7498> 14833 +<749c> <749c> 14834 +<749e> <749e> 5682 +<749f> <749f> 8563 +<74a0> <74a0> 14835 +<74a2> <74a2> 5662 +<74a3> <74a3> 14836 +<74a7> <74a7> 5683 +<74a8> <74a8> 14837 +<74ab> <74ab> 14838 +<74b0> <74b0> 1536 +<74b5> <74b5> 14839 +<74bd> <74bd> 2257 +<74bf> <74bf> 14840 +<74c8> <74c8> 14841 +<74ca> <74ca> 5684 +<74cf> <74cf> 5685 +<74d4> <74d4> 5686 +<74da> <74da> 14842 +<74dc> <74dc> 1245 +<74de> <74de> 14843 +<74e0> <74e0> 5688 +<74e2> <74e2> 3501 +<74e3> <74e3> 5689 +<74e6> <74e6> 1504 +<74e7> <74e7> 5690 +<74e9> <74e9> 5691 +<74ee> <74ee> 5692 +<74ef> <74ef> 14160 +<74f0> <74f1> 5694 +<74f2> <74f2> 5693 +<74f6> <74f6> 3525 +<74f7> <74f7> 5697 +<74f8> <74f8> 5696 +<7501> <7501> 8564 +<7503> <7503> 5699 +<7504> <7504> 5698 +<7505> <7505> 5700 +<750c> <750c> 5701 +<750d> <750d> 5703 +endcidrange + +100 begincidrange +<750e> <750e> 5702 +<7511> <7511> 2059 +<7513> <7513> 5705 +<7515> <7515> 5704 +<7518> <7518> 1537 +<751a> <751a> 2585 +<751c> <751c> 3126 +<751e> <751e> 5706 +<751f> <751f> 2652 +<7522> <7522> 13790 +<7523> <7523> 2184 +<7525> <7525> 1307 +<7526> <7526> 5707 +<7528> <7528> 3899 +<752b> <752b> 3635 +<752c> <752c> 5708 +<752f> <752f> 8434 +<7530> <7530> 3134 +<7531> <7531> 3869 +<7532> <7532> 2005 +<7533> <7533> 2563 +<7537> <7537> 2953 +<7538> <7538> 4297 +<753a> <753a> 3018 +<753b> <753b> 1384 +<753c> <753c> 5709 +<7544> <7544> 5710 +<7546> <7546> 5715 +<7549> <7549> 5713 +<754a> <754a> 5712 +<754b> <754b> 5063 +<754c> <754c> 1412 +<754d> <754d> 5711 +<754e> <754e> 14844 +<754f> <754f> 1182 +<7551> <7551> 3390 +<7554> <7554> 3422 +<7559> <7559> 3961 +<755a> <755a> 5716 +<755b> <755b> 5714 +<755c> <755c> 2970 +<755d> <755d> 2634 +<7560> <7560> 3391 +<7562> <7562> 3487 +<7564> <7564> 5718 +<7565> <7565> 3956 +<7566> <7566> 1827 +<7567> <7567> 5719 +<7569> <7569> 5717 +<756a> <756a> 3434 +<756b> <756b> 5720 +<756c> <756c> 15419 +<756d> <756d> 5721 +<756f> <756f> 8565 +<7570> <7570> 1183 +<7573> <7573> 2526 +<7574> <7574> 5726 +<7575> <7575> 14161 +<7576> <7576> 5723 +<7577> <7577> 3269 +<7578> <7578> 5722 +<7579> <7579> 14845 +<757f> <757f> 1600 +<7581> <7581> 14846 +<7582> <7582> 5729 +<7586> <7587> 5724 +<7589> <7589> 5728 +<758a> <758a> 5727 +<758b> <758b> 3479 +<758e> <758e> 2756 +<758f> <758f> 2755 +<7590> <7590> 14847 +<7591> <7591> 1625 +<7592> <7593> 14848 +<7594> <7594> 5730 +<759a> <759a> 5731 +<759d> <759d> 5732 +<75a3> <75a3> 5734 +<75a5> <75a5> 5733 +<75ab> <75ab> 1272 +<75b1> <75b1> 5742 +<75b2> <75b2> 3452 +<75b3> <75b3> 5736 +<75b4> <75b4> 14850 +<75b5> <75b5> 5738 +<75b8> <75b8> 5740 +<75b9> <75b9> 2564 +<75bc> <75bc> 5741 +<75bd> <75bd> 5739 +<75be> <75be> 2284 +<75c2> <75c2> 5735 +<75c3> <75c3> 5737 +<75c5> <75c5> 3508 +<75c7> <75c7> 2481 +<75ca> <75ca> 5744 +<75cd> <75cd> 5743 +<75d2> <75d2> 5745 +<75d4> <75d4> 2258 +<75d5> <75d5> 2079 +<75d8> <75d8> 3185 +endcidrange + +100 begincidrange +<75d9> <75d9> 5746 +<75db> <75db> 3047 +<75de> <75de> 5748 +<75e2> <75e2> 3945 +<75e3> <75e3> 5747 +<75e4> <75e4> 14851 +<75e9> <75e9> 2795 +<75ec> <75ec> 14162 +<75f0> <75f0> 5753 +<75f2> <75f3> 5755 +<75f4> <75f4> 2962 +<75f9> <75f9> 14852 +<75fa> <75fa> 5754 +<75fc> <75fc> 5751 +<75fe> <75ff> 5749 +<7600> <7600> 14853 +<7601> <7601> 5752 +<7609> <7609> 5759 +<760a> <760a> 14854 +<760b> <760b> 5757 +<760d> <760d> 5758 +<7615> <7616> 14855 +<7619> <7619> 14857 +<761e> <761e> 14858 +<761f> <761f> 5760 +<7620> <7622> 5762 +<7624> <7624> 5765 +<7626> <7626> 7725 +<7627> <7627> 5761 +<762d> <762d> 14859 +<7630> <7630> 5767 +<7634> <7634> 5766 +<7635> <7635> 14860 +<763b> <763b> 5768 +<7642> <7642> 3981 +<7643> <7643> 14861 +<7646> <7646> 5771 +<7647> <7648> 5769 +<764b> <764b> 14862 +<764c> <764c> 1566 +<764e> <764e> 14163 +<7652> <7652> 3850 +<7656> <7656> 3610 +<7658> <7658> 5773 +<765c> <765c> 5772 +<7661> <7662> 5774 +<7665> <7665> 14863 +<7667> <7667> 5779 +<7668> <766a> 5776 +<766c> <766c> 5780 +<766d> <766d> 14864 +<766f> <766f> 14865 +<7670> <7670> 5781 +<7671> <7671> 14866 +<7672> <7672> 5782 +<7674> <7674> 14867 +<7676> <7676> 5783 +<7678> <7678> 5784 +<767a> <767a> 3395 +<767b> <767b> 3146 +<767c> <767c> 5785 +<767d> <767d> 3368 +<767e> <767e> 3494 +<7680> <7680> 5786 +<7682> <7682> 8566 +<7683> <7683> 5787 +<7684> <7684> 3108 +<7686> <7686> 1413 +<7687> <7687> 2006 +<7688> <7688> 5788 +<768b> <768b> 5789 +<768e> <768e> 5790 +<7690> <7690> 2167 +<7693> <7693> 5792 +<7696> <7696> 5791 +<7699> <769a> 5793 +<769b> <769b> 8569 +<769c> <769c> 8567 +<769e> <769e> 8568 +<76a4> <76a5> 14868 +<76a6> <76a6> 8570 +<76ae> <76ae> 3453 +<76b0> <76b0> 5795 +<76b4> <76b4> 5796 +<76b7> <76b7> 7452 +<76b8> <76ba> 5797 +<76bf> <76bf> 2172 +<76c2> <76c2> 5800 +<76c3> <76c3> 3340 +<76c5> <76c5> 14870 +<76c6> <76c6> 3725 +<76c8> <76c8> 1264 +<76ca> <76ca> 1273 +<76cc> <76cc> 14871 +<76cd> <76cd> 5801 +<76d2> <76d2> 5803 +<76d6> <76d6> 5802 +<76d7> <76d7> 3178 +<76db> <76db> 2653 +<76dc> <76dc> 5336 +endcidrange + +100 begincidrange +<76de> <76de> 5804 +<76df> <76df> 3789 +<76e1> <76e1> 5805 +<76e3> <76e3> 1538 +<76e4> <76e4> 3435 +<76e5> <76e5> 5806 +<76e7> <76e7> 5807 +<76ea> <76ea> 5808 +<76ec> <76ec> 14872 +<76ee> <76ee> 3816 +<76f2> <76f2> 3809 +<76f4> <76f4> 3034 +<76f8> <76f8> 2796 +<76fb> <76fb> 5810 +<76fc> <76fc> 14873 +<76fe> <76fe> 2412 +<7701> <7701> 2482 +<7704> <7704> 5813 +<7707> <7707> 5812 +<7708> <7708> 5811 +<7709> <7709> 3473 +<770b> <770b> 1539 +<770c> <770c> 1885 +<771b> <771b> 5819 +<771e> <771e> 5816 +<771f> <771f> 2565 +<7720> <7720> 3774 +<7724> <7724> 5815 +<7725> <7726> 5817 +<7729> <7729> 5814 +<7734> <7734> 14874 +<7736> <7736> 14875 +<7737> <7738> 5820 +<773a> <773a> 3019 +<773c> <773c> 1567 +<7740> <7740> 2979 +<7746> <7746> 8572 +<7747> <7747> 5822 +<775a> <775a> 5823 +<775b> <775b> 5826 +<775c> <775c> 14876 +<775f> <7760> 14877 +<7761> <7761> 2605 +<7762> <7762> 7877 +<7763> <7763> 3228 +<7765> <7765> 5827 +<7766> <7766> 3713 +<7768> <7768> 5824 +<776a> <776a> 14165 +<776b> <776b> 5825 +<7772> <7772> 14879 +<7779> <7779> 5830 +<777d> <777d> 14880 +<777e> <777e> 5829 +<777f> <777f> 5828 +<778b> <778b> 5832 +<778e> <778e> 5831 +<7791> <7791> 5833 +<7795> <7795> 14881 +<779e> <779e> 5835 +<77a0> <77a0> 5834 +<77a5> <77a5> 3613 +<77a9> <77a9> 14166 +<77aa> <77aa> 14882 +<77ac> <77ac> 2400 +<77ad> <77ad> 3982 +<77b0> <77b0> 5836 +<77b3> <77b3> 3215 +<77b6> <77b6> 5837 +<77b9> <77b9> 5838 +<77bb> <77bb> 5842 +<77bc> <77bd> 5840 +<77bf> <77bf> 5839 +<77c7> <77c7> 5843 +<77cd> <77cd> 5844 +<77d7> <77d7> 5845 +<77da> <77da> 5846 +<77db> <77db> 3779 +<77dc> <77dc> 5847 +<77e2> <77e2> 3836 +<77e3> <77e3> 5848 +<77e5> <77e5> 2956 +<77e6> <77e6> 14883 +<77e7> <77e7> 3360 +<77e9> <77e9> 1763 +<77ed> <77ed> 2937 +<77ee> <77ee> 5849 +<77ef> <77ef> 1714 +<77f0> <77f0> 14884 +<77f3> <77f3> 2676 +<77f4> <77f4> 14885 +<77fc> <77fc> 5850 +<7802> <7802> 2093 +<7806> <7806> 14886 +<780c> <780c> 5851 +<7812> <7812> 5852 +<7814> <7814> 1882 +<7815> <7815> 2117 +<7820> <7820> 5854 +<7821> <7821> 8574 +endcidrange + +100 begincidrange +<7822> <7822> 14887 +<7825> <7825> 3152 +<7826> <7826> 2118 +<7827> <7827> 1640 +<782d> <782e> 14888 +<7830> <7830> 14890 +<7832> <7832> 3666 +<7834> <7834> 3329 +<7835> <7835> 14891 +<783a> <783a> 3153 +<783f> <783f> 2030 +<7845> <7845> 5856 +<784e> <784e> 8575 +<784f> <784f> 13342 +<7851> <7851> 15420 +<785d> <785d> 2483 +<7864> <7864> 8576 +<7868> <7868> 14892 +<786b> <786b> 3962 +<786c> <786c> 2007 +<786f> <786f> 1883 +<7872> <7872> 3383 +<7874> <7874> 5858 +<787a> <787a> 8577 +<787c> <787c> 5860 +<7881> <7881> 1951 +<7886> <7886> 5859 +<7887> <7887> 3090 +<788c> <788c> 5862 +<788d> <788d> 1429 +<788e> <788e> 5857 +<7891> <7891> 3454 +<7893> <7893> 1234 +<7895> <7895> 2140 +<7897> <7897> 4088 +<789a> <789a> 5861 +<789e> <789e> 14893 +<78a3> <78a3> 5863 +<78a7> <78a7> 3611 +<78a9> <78a9> 2685 +<78aa> <78aa> 5865 +<78af> <78af> 5866 +<78b5> <78b5> 5864 +<78ba> <78ba> 1452 +<78bc> <78bc> 5872 +<78be> <78be> 5871 +<78c1> <78c1> 2259 +<78c5> <78c5> 5873 +<78c6> <78c6> 5868 +<78c8> <78c8> 14894 +<78ca> <78ca> 5874 +<78cb> <78cb> 5869 +<78cc> <78cc> 14895 +<78ce> <78ce> 14896 +<78d0> <78d0> 3436 +<78d1> <78d1> 5867 +<78d4> <78d4> 5870 +<78da> <78da> 5877 +<78e0> <78e1> 14898 +<78e4> <78e4> 14897 +<78e7> <78e7> 5876 +<78e8> <78e8> 3727 +<78ec> <78ec> 5875 +<78ef> <78ef> 1199 +<78f2> <78f2> 14900 +<78f4> <78f4> 5879 +<78f7> <78f7> 14901 +<78fb> <78fb> 14902 +<78fd> <78fd> 5878 +<7901> <7901> 2484 +<7907> <7907> 5880 +<790e> <790e> 2757 +<7911> <7911> 5882 +<7912> <7912> 5881 +<7919> <7919> 5883 +<7926> <7926> 5853 +<792a> <792a> 5855 +<792b> <792b> 5885 +<792c> <792c> 5884 +<7930> <7930> 8578 +<7931> <7931> 14903 +<7934> <7934> 14904 +<793a> <793a> 2260 +<793b> <793b> 14905 +<793c> <793c> 4017 +<793d> <793d> 14906 +<793e> <793e> 2302 +<7940> <7940> 5886 +<7941> <7941> 1805 +<7945> <7945> 14907 +<7947> <7947> 1626 +<7948> <7948> 1601 +<7949> <7949> 2225 +<7950> <7950> 3870 +<7953> <7953> 5892 +<7955> <7955> 5891 +<7956> <7956> 2758 +<7957> <7957> 5888 +<795a> <795a> 5890 +<795b> <795c> 14908 +endcidrange + +100 begincidrange +<795d> <795d> 2389 +<795e> <795e> 2566 +<795f> <795f> 5889 +<7960> <7960> 5887 +<7962> <7962> 3296 +<7965> <7965> 2485 +<7968> <7968> 3502 +<796d> <796d> 2119 +<7977> <7977> 3186 +<797a> <797a> 5893 +<797f> <797f> 5894 +<7980> <7980> 5916 +<7981> <7981> 1744 +<7984> <7984> 4067 +<7985> <7985> 2743 +<798a> <798a> 5895 +<798b> <798b> 14910 +<798d> <798d> 1362 +<798e> <798e> 3091 +<798f> <798f> 3569 +<7994> <7994> 8582 +<7996> <7996> 14911 +<7998> <7998> 14912 +<799b> <799b> 8584 +<799d> <799d> 5896 +<79a6> <79a6> 1684 +<79a7> <79a7> 5897 +<79aa> <79aa> 5899 +<79ae> <79ae> 5900 +<79b0> <79b0> 3295 +<79b1> <79b1> 7758 +<79b3> <79b3> 5901 +<79b8> <79b8> 14913 +<79b9> <79ba> 5902 +<79bb> <79bb> 14914 +<79bd> <79bd> 1745 +<79be> <79be> 1363 +<79bf> <79bf> 3229 +<79c0> <79c0> 2354 +<79c1> <79c1> 2226 +<79c9> <79c9> 5904 +<79ca> <79ca> 14915 +<79cb> <79cb> 2355 +<79d1> <79d1> 1354 +<79d2> <79d2> 3509 +<79d5> <79d5> 5905 +<79d8> <79d8> 3455 +<79da> <79da> 14916 +<79df> <79df> 2759 +<79e1> <79e1> 5908 +<79e3> <79e3> 5909 +<79e4> <79e4> 3359 +<79e6> <79e6> 2567 +<79e7> <79e7> 5906 +<79e9> <79e9> 2975 +<79ec> <79ec> 5907 +<79f0> <79f0> 2486 +<79fb> <79fb> 1184 +<7a00> <7a00> 1603 +<7a03> <7a03> 14917 +<7a05> <7a05> 13875 +<7a08> <7a08> 5910 +<7a09> <7a09> 14918 +<7a0b> <7a0b> 3092 +<7a0d> <7a0d> 5911 +<7a0e> <7a0e> 2667 +<7a11> <7a11> 14919 +<7a14> <7a14> 3769 +<7a17> <7a17> 3477 +<7a18> <7a19> 5912 +<7a1a> <7a1a> 2963 +<7a1c> <7a1c> 3983 +<7a1e> <7a1e> 14920 +<7a1f> <7a1f> 5915 +<7a20> <7a20> 5914 +<7a2d> <7a2d> 14921 +<7a2e> <7a2e> 2331 +<7a31> <7a31> 5917 +<7a32> <7a32> 1204 +<7a37> <7a37> 5920 +<7a39> <7a39> 14922 +<7a3b> <7a3b> 5918 +<7a3c> <7a3c> 1364 +<7a3d> <7a3d> 1828 +<7a3e> <7a3e> 5919 +<7a3f> <7a3f> 2008 +<7a40> <7a40> 2052 +<7a42> <7a42> 3638 +<7a43> <7a43> 5921 +<7a45> <7a45> 14923 +<7a46> <7a46> 3714 +<7a49> <7a49> 5923 +<7a4c> <7a4c> 14924 +<7a4d> <7a4d> 2677 +<7a4e> <7a4e> 1265 +<7a4f> <7a4f> 1338 +<7a50> <7a50> 1136 +<7a57> <7a57> 5922 +<7a5d> <7a5d> 14925 +<7a60> <7a60> 14926 +endcidrange + +100 begincidrange +<7a61> <7a62> 5924 +<7a63> <7a63> 2527 +<7a69> <7a69> 5926 +<7a6b> <7a6b> 1453 +<7a6d> <7a6d> 14927 +<7a70> <7a70> 5928 +<7a74> <7a74> 1856 +<7a76> <7a76> 1664 +<7a78> <7a78> 14928 +<7a79> <7a79> 5929 +<7a7a> <7a7a> 1773 +<7a7d> <7a7d> 5930 +<7a7f> <7a7f> 2720 +<7a81> <7a81> 3237 +<7a83> <7a83> 2692 +<7a84> <7a84> 2149 +<7a88> <7a88> 5931 +<7a92> <7a92> 2976 +<7a93> <7a93> 2797 +<7a95> <7a95> 5933 +<7a96> <7a96> 5935 +<7a97> <7a97> 5932 +<7a98> <7a98> 5934 +<7a9f> <7a9f> 1784 +<7aa0> <7aa0> 14929 +<7aa3> <7aa3> 14930 +<7aa9> <7aa9> 5936 +<7aaa> <7aaa> 1788 +<7aae> <7aae> 1665 +<7aaf> <7aaf> 3900 +<7ab0> <7ab0> 5938 +<7ab3> <7ab3> 14931 +<7ab6> <7ab6> 5939 +<7aba> <7aba> 1232 +<7abb> <7abc> 14932 +<7abf> <7abf> 5942 +<7ac3> <7ac3> 1492 +<7ac4> <7ac4> 5941 +<7ac5> <7ac5> 5940 +<7ac6> <7ac6> 14934 +<7ac7> <7ac7> 5944 +<7ac8> <7ac8> 5937 +<7aca> <7aca> 5945 +<7acb> <7acb> 3953 +<7acd> <7acd> 5946 +<7acf> <7acf> 5947 +<7ad1> <7ad1> 8585 +<7ad2> <7ad2> 4549 +<7ad3> <7ad3> 5949 +<7ad5> <7ad5> 5948 +<7ad9> <7ada> 5950 +<7adc> <7adc> 3965 +<7add> <7add> 5952 +<7adf> <7adf> 7176 +<7ae0> <7ae0> 2487 +<7ae1> <7ae2> 5953 +<7ae3> <7ae3> 2401 +<7ae5> <7ae5> 3216 +<7ae6> <7ae6> 5955 +<7ae7> <7ae7> 8586 +<7aea> <7aea> 2918 +<7aeb> <7aeb> 8588 +<7aed> <7aed> 5956 +<7aef> <7aef> 2938 +<7af0> <7af0> 5957 +<7af6> <7af6> 1693 +<7af8> <7af8> 4214 +<7af9> <7af9> 2971 +<7afa> <7afa> 2271 +<7aff> <7aff> 1540 +<7b02> <7b02> 5958 +<7b04> <7b04> 5971 +<7b06> <7b06> 5961 +<7b07> <7b07> 14935 +<7b08> <7b08> 1666 +<7b0a> <7b0a> 5960 +<7b0b> <7b0b> 5973 +<7b0f> <7b0f> 5959 +<7b11> <7b11> 2488 +<7b14> <7b14> 14936 +<7b18> <7b19> 5963 +<7b1b> <7b1b> 3109 +<7b1e> <7b1e> 5965 +<7b20> <7b20> 1468 +<7b25> <7b25> 2592 +<7b26> <7b26> 3542 +<7b27> <7b27> 14937 +<7b28> <7b28> 5967 +<7b2c> <7b2c> 2888 +<7b31> <7b31> 14938 +<7b33> <7b33> 5962 +<7b35> <7b35> 5966 +<7b36> <7b36> 5968 +<7b39> <7b39> 2155 +<7b45> <7b45> 5975 +<7b46> <7b46> 3488 +<7b47> <7b47> 14939 +<7b48> <7b48> 3386 +<7b49> <7b49> 3187 +<7b4b> <7b4b> 1746 +endcidrange + +100 begincidrange +<7b4c> <7b4c> 5974 +<7b4d> <7b4d> 5972 +<7b4e> <7b4e> 14940 +<7b4f> <7b4f> 3401 +<7b50> <7b50> 5969 +<7b51> <7b51> 2972 +<7b52> <7b52> 3189 +<7b53> <7b53> 14173 +<7b54> <7b54> 3188 +<7b56> <7b56> 2150 +<7b5d> <7b5d> 5993 +<7b60> <7b60> 14941 +<7b65> <7b65> 5977 +<7b67> <7b67> 5979 +<7b69> <7b69> 14942 +<7b6c> <7b6c> 5982 +<7b6d> <7b6d> 14943 +<7b6e> <7b6e> 5983 +<7b70> <7b71> 5980 +<7b72> <7b72> 14944 +<7b74> <7b74> 5978 +<7b75> <7b75> 5976 +<7b7a> <7b7a> 5970 +<7b86> <7b86> 3615 +<7b87> <7b87> 1365 +<7b8b> <7b8b> 5990 +<7b8d> <7b8d> 5987 +<7b8f> <7b8f> 5992 +<7b91> <7b91> 14945 +<7b92> <7b92> 5991 +<7b94> <7b94> 3369 +<7b95> <7b95> 3763 +<7b97> <7b97> 2185 +<7b98> <7b98> 5985 +<7b99> <7b99> 5994 +<7b9a> <7b9a> 5989 +<7b9c> <7b9c> 5988 +<7b9d> <7b9d> 5984 +<7b9e> <7b9e> 8589 +<7b9f> <7b9f> 5986 +<7ba1> <7ba1> 1541 +<7baa> <7baa> 2939 +<7bad> <7bad> 2721 +<7baf> <7baf> 14946 +<7bb1> <7bb1> 3382 +<7bb4> <7bb4> 5999 +<7bb8> <7bb8> 3384 +<7bc0> <7bc0> 2693 +<7bc1> <7bc1> 5996 +<7bc4> <7bc4> 3427 +<7bc6> <7bc6> 6000 +<7bc7> <7bc7> 3619 +<7bc9> <7bc9> 2969 +<7bcb> <7bcb> 5995 +<7bcc> <7bcc> 5997 +<7bcf> <7bcf> 5998 +<7bd7> <7bd7> 14947 +<7bd9> <7bd9> 14948 +<7bdd> <7bdd> 6001 +<7be0> <7be0> 2288 +<7be4> <7be4> 3230 +<7be5> <7be5> 6006 +<7be6> <7be6> 6005 +<7be9> <7be9> 6002 +<7bed> <7bed> 4060 +<7bf3> <7bf3> 6011 +<7bf6> <7bf6> 6015 +<7bf7> <7bf7> 6012 +<7c00> <7c00> 6008 +<7c07> <7c07> 6009 +<7c0b> <7c0b> 14949 +<7c0d> <7c0d> 6014 +<7c0f> <7c0f> 14950 +<7c11> <7c11> 6003 +<7c12> <7c12> 4330 +<7c13> <7c13> 6010 +<7c14> <7c14> 6004 +<7c17> <7c17> 6013 +<7c1e> <7c1e> 7739 +<7c1f> <7c1f> 6019 +<7c20> <7c20> 14951 +<7c21> <7c21> 1542 +<7c23> <7c23> 6016 +<7c26> <7c26> 14952 +<7c27> <7c27> 6017 +<7c2a> <7c2a> 6018 +<7c2b> <7c2b> 6021 +<7c31> <7c31> 14953 +<7c36> <7c36> 14954 +<7c37> <7c37> 6020 +<7c38> <7c38> 3466 +<7c3d> <7c3d> 6022 +<7c3e> <7c3e> 4036 +<7c3f> <7c3f> 3645 +<7c40> <7c40> 6027 +<7c43> <7c43> 6024 +<7c4c> <7c4c> 6023 +<7c4d> <7c4d> 2678 +<7c4f> <7c4f> 6026 +<7c50> <7c50> 6028 +endcidrange + +100 begincidrange +<7c51> <7c51> 14955 +<7c54> <7c54> 6025 +<7c56> <7c56> 6032 +<7c58> <7c58> 6029 +<7c59> <7c59> 14956 +<7c5f> <7c5f> 6030 +<7c60> <7c60> 6007 +<7c64> <7c64> 6031 +<7c65> <7c65> 6033 +<7c67> <7c67> 14957 +<7c6c> <7c6c> 6034 +<7c6e> <7c6e> 14958 +<7c70> <7c70> 14959 +<7c73> <7c73> 3606 +<7c75> <7c75> 6035 +<7c7b> <7c7b> 14094 +<7c7e> <7c7e> 3822 +<7c81> <7c81> 1734 +<7c82> <7c82> 1791 +<7c83> <7c83> 6036 +<7c89> <7c89> 3588 +<7c8b> <7c8b> 2606 +<7c8d> <7c8d> 3772 +<7c90> <7c90> 6037 +<7c92> <7c92> 3963 +<7c95> <7c95> 3370 +<7c97> <7c97> 2760 +<7c98> <7c98> 3306 +<7c9b> <7c9b> 2391 +<7c9f> <7c9f> 1156 +<7ca1> <7ca1> 6042 +<7ca2> <7ca2> 6040 +<7ca4> <7ca4> 6038 +<7ca5> <7ca5> 1501 +<7ca7> <7ca7> 2489 +<7ca8> <7ca8> 6043 +<7cab> <7cab> 6041 +<7cad> <7cad> 6039 +<7cae> <7cae> 6047 +<7cb1> <7cb1> 6046 +<7cb2> <7cb2> 6045 +<7cb3> <7cb3> 6044 +<7cb9> <7cb9> 6048 +<7cbc> <7cbc> 14960 +<7cbd> <7cbd> 6049 +<7cbe> <7cbe> 2654 +<7cbf> <7cbf> 14961 +<7cc0> <7cc0> 6050 +<7cc2> <7cc2> 6052 +<7cc5> <7cc5> 6051 +<7cc8> <7cc9> 14962 +<7cca> <7cca> 1926 +<7cce> <7cce> 2746 +<7cd2> <7cd2> 6054 +<7cd6> <7cd6> 3190 +<7cd7> <7cd7> 14964 +<7cd8> <7cd8> 6053 +<7cd9> <7cd9> 14965 +<7cdc> <7cdc> 6055 +<7cdd> <7cdd> 14966 +<7cde> <7cde> 3589 +<7cdf> <7cdf> 2798 +<7ce0> <7ce0> 2009 +<7ce2> <7ce2> 6056 +<7ce7> <7ce7> 3984 +<7ceb> <7ceb> 14967 +<7cef> <7cef> 6058 +<7cf2> <7cf2> 6059 +<7cf4> <7cf4> 6060 +<7cf6> <7cf6> 6061 +<7cf8> <7cf8> 2227 +<7cfa> <7cfa> 6062 +<7cfb> <7cfb> 1829 +<7cfe> <7cfe> 1668 +<7d00> <7d00> 1604 +<7d02> <7d02> 6064 +<7d04> <7d04> 3839 +<7d05> <7d05> 2010 +<7d06> <7d06> 6063 +<7d07> <7d09> 14968 +<7d0a> <7d0a> 6067 +<7d0b> <7d0b> 3826 +<7d0d> <7d0d> 3314 +<7d10> <7d10> 3493 +<7d13> <7d13> 14971 +<7d14> <7d14> 2413 +<7d15> <7d15> 6066 +<7d17> <7d17> 2303 +<7d18> <7d18> 2011 +<7d19> <7d19> 2228 +<7d1a> <7d1a> 1667 +<7d1b> <7d1b> 3590 +<7d1c> <7d1c> 6065 +<7d1d> <7d1d> 14972 +<7d20> <7d20> 2761 +<7d21> <7d21> 3696 +<7d22> <7d22> 2151 +<7d23> <7d23> 14973 +<7d2b> <7d2b> 2229 +<7d2c> <7d2c> 3065 +endcidrange + +100 begincidrange +<7d2e> <7d2e> 6070 +<7d2f> <7d2f> 4007 +<7d30> <7d30> 2121 +<7d32> <7d32> 6071 +<7d33> <7d33> 2568 +<7d35> <7d35> 6073 +<7d39> <7d39> 2490 +<7d3a> <7d3a> 2080 +<7d3f> <7d3f> 6072 +<7d41> <7d41> 14974 +<7d42> <7d42> 2356 +<7d43> <7d43> 1906 +<7d44> <7d44> 2762 +<7d45> <7d45> 6068 +<7d46> <7d46> 6074 +<7d48> <7d48> 8591 +<7d4b> <7d4b> 6069 +<7d4c> <7d4c> 1830 +<7d4e> <7d4e> 6077 +<7d4f> <7d4f> 6081 +<7d50> <7d50> 1857 +<7d53> <7d53> 14975 +<7d56> <7d56> 6076 +<7d59> <7d59> 14976 +<7d5b> <7d5b> 6085 +<7d5c> <7d5c> 8592 +<7d5d> <7d5d> 14977 +<7d5e> <7d5e> 2012 +<7d61> <7d61> 3927 +<7d62> <7d62> 1152 +<7d63> <7d63> 6082 +<7d66> <7d66> 1669 +<7d68> <7d68> 6079 +<7d6e> <7d6e> 6080 +<7d71> <7d71> 3191 +<7d72> <7d72> 6078 +<7d73> <7d73> 6075 +<7d75> <7d75> 1414 +<7d76> <7d76> 2696 +<7d79> <7d79> 1884 +<7d7a> <7d7a> 14978 +<7d7d> <7d7d> 6087 +<7d86> <7d86> 14979 +<7d89> <7d89> 6084 +<7d8b> <7d8c> 14980 +<7d8f> <7d8f> 6086 +<7d93> <7d93> 6083 +<7d99> <7d99> 1831 +<7d9a> <7d9a> 2835 +<7d9b> <7d9b> 6088 +<7d9c> <7d9c> 2800 +<7d9f> <7d9f> 6101 +<7da0> <7da0> 8594 +<7da2> <7da2> 6097 +<7da3> <7da3> 6091 +<7dab> <7dab> 6095 +<7dac> <7dac> 2342 +<7dad> <7dad> 1185 +<7dae> <7dae> 6090 +<7daf> <7daf> 6098 +<7db0> <7db0> 6102 +<7db1> <7db1> 2013 +<7db2> <7db2> 3810 +<7db4> <7db4> 3058 +<7db5> <7db5> 6092 +<7db7> <7db7> 8593 +<7db8> <7db8> 6100 +<7dba> <7dba> 6089 +<7dbb> <7dbb> 2940 +<7dbd> <7dbd> 6094 +<7dbe> <7dbe> 1153 +<7dbf> <7dbf> 3798 +<7dc7> <7dc7> 6093 +<7dca> <7dca> 1747 +<7dcb> <7dcb> 3456 +<7dcc> <7dcc> 14982 +<7dcf> <7dcf> 2799 +<7dd1> <7dd1> 3992 +<7dd2> <7dd2> 2425 +<7dd5> <7dd5> 6141 +<7dd6> <7dd6> 8595 +<7dd8> <7dd8> 6103 +<7dda> <7dda> 2722 +<7ddc> <7ddc> 6099 +<7ddd> <7ddd> 6104 +<7dde> <7dde> 6106 +<7de0> <7de0> 3093 +<7de1> <7de1> 6109 +<7de3> <7de3> 13322 +<7de4> <7de4> 6105 +<7de8> <7de8> 3620 +<7de9> <7de9> 1543 +<7deb> <7deb> 14983 +<7dec> <7dec> 3799 +<7def> <7def> 1186 +<7df1> <7df1> 14984 +<7df2> <7df2> 6108 +<7df4> <7df4> 4037 +<7df9> <7df9> 14985 +<7dfb> <7dfb> 6107 +endcidrange + +100 begincidrange +<7e01> <7e01> 1297 +<7e04> <7e04> 3268 +<7e05> <7e05> 6110 +<7e08> <7e08> 14986 +<7e09> <7e09> 6117 +<7e0a> <7e0a> 6111 +<7e0b> <7e0b> 6118 +<7e11> <7e11> 14987 +<7e12> <7e12> 6114 +<7e15> <7e15> 14988 +<7e1b> <7e1b> 3377 +<7e1e> <7e1e> 2294 +<7e1f> <7e1f> 6116 +<7e20> <7e20> 14989 +<7e21> <7e21> 6113 +<7e22> <7e22> 6119 +<7e23> <7e23> 6112 +<7e26> <7e26> 2382 +<7e2b> <7e2b> 3667 +<7e2e> <7e2e> 2390 +<7e31> <7e31> 6115 +<7e32> <7e32> 6127 +<7e35> <7e35> 6123 +<7e37> <7e37> 6126 +<7e39> <7e39> 6124 +<7e3a> <7e3a> 6128 +<7e3b> <7e3b> 6122 +<7e3d> <7e3d> 6096 +<7e3e> <7e3e> 2679 +<7e41> <7e41> 3423 +<7e43> <7e43> 6125 +<7e46> <7e46> 6120 +<7e47> <7e47> 14990 +<7e48> <7e48> 14183 +<7e4a> <7e4a> 2723 +<7e4b> <7e4b> 1832 +<7e4d> <7e4d> 2357 +<7e52> <7e52> 8596 +<7e54> <7e54> 2539 +<7e55> <7e55> 2744 +<7e56> <7e56> 6131 +<7e59> <7e5a> 6133 +<7e5d> <7e5d> 6130 +<7e5e> <7e5e> 6132 +<7e61> <7e61> 7697 +<7e62> <7e62> 14991 +<7e66> <7e66> 6121 +<7e67> <7e67> 6129 +<7e69> <7e69> 6137 +<7e6a> <7e6a> 6136 +<7e6b> <7e6b> 7671 +<7e6d> <7e6d> 3752 +<7e6e> <7e6e> 14992 +<7e70> <7e70> 1793 +<7e73> <7e73> 14993 +<7e79> <7e79> 6135 +<7e7b> <7e7b> 6139 +<7e7c> <7e7c> 6138 +<7e7d> <7e7d> 6142 +<7e7f> <7e7f> 6144 +<7e82> <7e82> 2186 +<7e83> <7e83> 6140 +<7e88> <7e89> 6145 +<7e8a> <7e8a> 8359 +<7e8c> <7e8c> 6147 +<7e8d> <7e8d> 14994 +<7e8e> <7e8e> 6153 +<7e8f> <7e8f> 3125 +<7e90> <7e90> 6149 +<7e91> <7e91> 14995 +<7e92> <7e92> 6148 +<7e93> <7e94> 6150 +<7e96> <7e96> 6152 +<7e98> <7e98> 14996 +<7e9b> <7e9c> 6154 +<7f36> <7f36> 1544 +<7f38> <7f38> 6156 +<7f3a> <7f3a> 6157 +<7f44> <7f44> 14997 +<7f45> <7f45> 6158 +<7f47> <7f47> 8597 +<7f4c> <7f4e> 6159 +<7f4f> <7f4f> 14998 +<7f50> <7f51> 6162 +<7f52> <7f53> 14999 +<7f54> <7f54> 6165 +<7f55> <7f55> 6164 +<7f58> <7f58> 6166 +<7f5f> <7f60> 6167 +<7f61> <7f61> 15001 +<7f67> <7f67> 6171 +<7f68> <7f69> 6169 +<7f6a> <7f6a> 2129 +<7f6b> <7f6b> 1833 +<7f6e> <7f6e> 2964 +<7f70> <7f70> 3399 +<7f72> <7f72> 2426 +<7f75> <7f75> 3331 +<7f77> <7f77> 3457 +<7f78> <7f78> 6172 +endcidrange + +100 begincidrange +<7f79> <7f79> 4918 +<7f82> <7f82> 6173 +<7f83> <7f83> 6175 +<7f85> <7f85> 3919 +<7f86> <7f86> 6174 +<7f87> <7f87> 6177 +<7f88> <7f88> 6176 +<7f8a> <7f8a> 3901 +<7f8c> <7f8c> 6178 +<7f8e> <7f8e> 3474 +<7f91> <7f91> 15002 +<7f94> <7f94> 6179 +<7f9a> <7f9a> 6182 +<7f9d> <7f9d> 6181 +<7f9e> <7f9e> 6180 +<7fa1> <7fa1> 8598 +<7fa3> <7fa3> 6183 +<7fa4> <7fa4> 1800 +<7fa8> <7fa8> 2724 +<7fa9> <7fa9> 1627 +<7fae> <7fae> 6187 +<7faf> <7faf> 6184 +<7fb2> <7fb2> 6185 +<7fb6> <7fb6> 6188 +<7fb8> <7fb8> 6189 +<7fb9> <7fb9> 6186 +<7fbd> <7fbd> 1227 +<7fbf> <7fbf> 15003 +<7fc1> <7fc1> 1319 +<7fc5> <7fc6> 6191 +<7fca> <7fca> 6193 +<7fcc> <7fcc> 3916 +<7fce> <7fce> 15004 +<7fd2> <7fd2> 2358 +<7fd4> <7fd4> 6195 +<7fd5> <7fd5> 6194 +<7fdf> <7fdf> 15005 +<7fe0> <7fe0> 2607 +<7fe1> <7fe1> 6196 +<7fe5> <7fe5> 15006 +<7fe6> <7fe6> 6197 +<7fe9> <7fe9> 6198 +<7feb> <7feb> 1569 +<7fec> <7fec> 15007 +<7fee> <7fef> 15008 +<7ff0> <7ff0> 1545 +<7ff3> <7ff3> 6199 +<7ff9> <7ff9> 6200 +<7ffa> <7ffa> 15010 +<7ffb> <7ffb> 3723 +<7ffc> <7ffc> 3917 +<8000> <8000> 3902 +<8001> <8001> 4061 +<8002> <8002> 14099 +<8003> <8003> 2015 +<8004> <8004> 6203 +<8005> <8005> 2304 +<8006> <8006> 6202 +<800b> <800b> 6204 +<800c> <800c> 2261 +<800e> <800e> 15011 +<8010> <8010> 2865 +<8011> <8011> 15012 +<8012> <8012> 6205 +<8014> <8014> 15013 +<8015> <8015> 2014 +<8017> <8017> 3811 +<8018> <8019> 6206 +<801c> <801c> 6208 +<8021> <8021> 6209 +<8024> <8024> 15014 +<8026> <8026> 15015 +<8028> <8028> 6210 +<8033> <8033> 2262 +<8036> <8036> 3833 +<803a> <803a> 15016 +<803b> <803b> 6212 +<803c> <803c> 15017 +<803d> <803d> 2941 +<803f> <803f> 6211 +<8046> <8046> 6214 +<804a> <804a> 6213 +<8052> <8052> 6215 +<8056> <8056> 2655 +<8058> <8058> 6216 +<805a> <805a> 6217 +<805e> <805e> 3593 +<805f> <805f> 6218 +<8060> <8060> 15018 +<8061> <8061> 2801 +<8062> <8062> 6219 +<8068> <8068> 6220 +<806f> <806f> 4038 +<8070> <8070> 6223 +<8071> <8071> 15019 +<8072> <8072> 6222 +<8073> <8073> 6221 +<8074> <8074> 3020 +<8075> <8075> 15020 +<8076> <8076> 6224 +endcidrange + +100 begincidrange +<8077> <8077> 2540 +<8079> <8079> 6225 +<807d> <807d> 6226 +<807e> <807e> 4062 +<807f> <807f> 6227 +<8084> <8084> 6228 +<8085> <8085> 6230 +<8086> <8086> 6229 +<8087> <8087> 3385 +<8089> <8089> 3281 +<808b> <808b> 4068 +<808c> <808c> 3389 +<8093> <8093> 6232 +<8096> <8096> 2491 +<8098> <8098> 3484 +<809a> <809a> 6233 +<809b> <809b> 6231 +<809d> <809d> 1546 +<809e> <809e> 15021 +<80a1> <80a1> 1928 +<80a2> <80a2> 2230 +<80a5> <80a5> 3458 +<80a6> <80a6> 15022 +<80a9> <80a9> 1886 +<80aa> <80aa> 3697 +<80ab> <80ab> 15023 +<80ac> <80ac> 6236 +<80ad> <80ad> 6234 +<80af> <80af> 2016 +<80b1> <80b1> 2017 +<80b2> <80b2> 1197 +<80b4> <80b4> 2136 +<80ba> <80ba> 3343 +<80c3> <80c3> 1187 +<80c4> <80c4> 6241 +<80c6> <80c6> 2942 +<80cc> <80cc> 3342 +<80ce> <80ce> 2875 +<80d6> <80d6> 6243 +<80d7> <80d8> 15024 +<80d9> <80d9> 6239 +<80da> <80da> 6242 +<80db> <80db> 6237 +<80dd> <80dd> 6240 +<80de> <80de> 3668 +<80e1> <80e1> 1929 +<80e4> <80e4> 1217 +<80e5> <80e5> 6238 +<80ef> <80ef> 6245 +<80f1> <80f1> 6246 +<80f4> <80f4> 3217 +<80f8> <80f8> 1715 +<80fc> <80fc> 6257 +<80fd> <80fd> 3315 +<8102> <8102> 2231 +<8105> <8105> 1716 +<8106> <8106> 2668 +<8107> <8107> 4076 +<8108> <8108> 3770 +<8109> <8109> 6244 +<810a> <810a> 2680 +<8116> <8116> 15026 +<8118> <8118> 15027 +<811a> <811a> 1645 +<811b> <811b> 6247 +<8123> <8123> 6249 +<8129> <8129> 6248 +<812b> <812b> 13913 +<812f> <812f> 6250 +<8131> <8131> 2916 +<8133> <8133> 3316 +<8139> <8139> 3021 +<813a> <813a> 15028 +<813e> <813e> 6254 +<8141> <8141> 14194 +<8146> <8146> 6253 +<814a> <814a> 15029 +<814b> <814b> 6251 +<814c> <814c> 15030 +<814e> <814e> 2587 +<8150> <8150> 3543 +<8151> <8151> 6256 +<8153> <8153> 6255 +<8154> <8154> 2018 +<8155> <8155> 4089 +<815f> <815f> 6272 +<8165> <8166> 6260 +<816b> <816b> 2332 +<816e> <816e> 6259 +<8170> <8170> 2058 +<8171> <8171> 6258 +<8174> <8174> 6262 +<8178> <8178> 3022 +<8179> <8179> 3570 +<817a> <817a> 2725 +<817f> <817f> 2876 +<8180> <8180> 6266 +<8181> <8181> 15031 +<8182> <8182> 6267 +<8183> <8183> 6263 +endcidrange + +100 begincidrange +<8184> <8184> 15032 +<8188> <8188> 6264 +<818a> <818a> 6265 +<818f> <818f> 2019 +<8193> <8193> 6273 +<8195> <8195> 6269 +<819a> <819a> 3544 +<819c> <819c> 3738 +<819d> <819d> 3482 +<81a0> <81a0> 6268 +<81a3> <81a3> 6271 +<81a4> <81a4> 6270 +<81a8> <81a8> 3698 +<81a9> <81a9> 6274 +<81b0> <81b0> 6275 +<81b3> <81b3> 2745 +<81b4> <81b4> 15033 +<81b5> <81b5> 6276 +<81b8> <81b8> 6278 +<81ba> <81ba> 6282 +<81bd> <81bd> 6279 +<81be> <81be> 6277 +<81bf> <81bf> 3317 +<81c0> <81c0> 6280 +<81c2> <81c2> 6281 +<81c6> <81c6> 1330 +<81c8> <81c8> 6288 +<81c9> <81c9> 6283 +<81cd> <81cd> 6284 +<81cf> <81cf> 15034 +<81d1> <81d1> 6285 +<81d3> <81d3> 2817 +<81d8> <81d8> 6287 +<81d9> <81d9> 6286 +<81da> <81da> 6289 +<81df> <81e0> 6290 +<81e3> <81e3> 2569 +<81e5> <81e5> 1385 +<81e7> <81e7> 6292 +<81e8> <81e8> 3999 +<81ea> <81ea> 2263 +<81ed> <81ed> 2359 +<81f3> <81f3> 2232 +<81f4> <81f4> 2965 +<81f9> <81f9> 15035 +<81fa> <81fb> 6293 +<81fc> <81fc> 1235 +<81fe> <81fe> 6295 +<8201> <8202> 6296 +<8203> <8203> 15036 +<8205> <8205> 6298 +<8207> <8207> 6299 +<8208> <8208> 1717 +<8209> <8209> 5039 +<820a> <820a> 6300 +<820c> <820c> 2697 +<820d> <820d> 6301 +<820e> <820e> 2295 +<8210> <8210> 6302 +<8212> <8212> 4105 +<8216> <8216> 6303 +<8217> <8217> 3630 +<8218> <8218> 1560 +<821b> <821b> 2726 +<821c> <821c> 2402 +<821e> <821e> 3555 +<821f> <821f> 2360 +<8221> <8221> 15037 +<8229> <8229> 6304 +<822a> <822a> 2020 +<822b> <822b> 6305 +<822c> <822c> 3424 +<822e> <822e> 6319 +<8232> <8232> 15038 +<8233> <8233> 6307 +<8234> <8234> 15039 +<8235> <8235> 2857 +<8236> <8236> 3371 +<8237> <8237> 1907 +<8238> <8238> 6306 +<8239> <8239> 2727 +<8240> <8240> 6308 +<8246> <8246> 15040 +<8247> <8247> 3094 +<824b> <824b> 15041 +<824f> <824f> 15042 +<8258> <8258> 6310 +<8259> <8259> 6309 +<825a> <825a> 6312 +<825d> <825d> 6311 +<825f> <825f> 6313 +<8262> <8262> 6315 +<8264> <8264> 6314 +<8266> <8266> 1547 +<8268> <8268> 6316 +<826a> <826b> 6317 +<826e> <826e> 2081 +<826f> <826f> 3985 +<8271> <8271> 6320 +<8272> <8272> 2541 +endcidrange + +100 begincidrange +<8276> <8276> 1298 +<8277> <8278> 6321 +<8279> <8279> 14197 +<827e> <827e> 6323 +<828b> <828b> 1206 +<828d> <828d> 6324 +<828e> <828e> 15043 +<8292> <8292> 6325 +<8299> <8299> 3545 +<829d> <829d> 2291 +<829f> <829f> 6327 +<82a5> <82a5> 1415 +<82a6> <82a6> 1142 +<82ab> <82ab> 6326 +<82ac> <82ac> 6329 +<82ad> <82ad> 3332 +<82ae> <82ae> 15044 +<82af> <82af> 2570 +<82b1> <82b1> 1366 +<82b3> <82b3> 3669 +<82b7> <82b7> 15045 +<82b8> <82b8> 1843 +<82b9> <82b9> 1748 +<82bb> <82bb> 6328 +<82bd> <82bd> 1386 +<82be> <82be> 15046 +<82c5> <82c5> 1503 +<82c6> <82c6> 15047 +<82d1> <82d1> 1299 +<82d2> <82d2> 6333 +<82d3> <82d3> 4018 +<82d4> <82d4> 2877 +<82d7> <82d7> 3510 +<82d9> <82d9> 6345 +<82db> <82db> 1367 +<82dc> <82dc> 6343 +<82de> <82de> 6341 +<82df> <82df> 6332 +<82e1> <82e1> 6330 +<82e3> <82e3> 6331 +<82e5> <82e5> 2319 +<82e6> <82e6> 1764 +<82e7> <82e7> 2997 +<82eb> <82eb> 3241 +<82f1> <82f1> 1267 +<82f3> <82f3> 6335 +<82f4> <82f4> 6334 +<82f9> <82f9> 6340 +<82fa> <82fa> 6336 +<82fb> <82fb> 6339 +<82fe> <82fe> 15048 +<8301> <8301> 8600 +<8302> <8302> 3804 +<8303> <8303> 6338 +<8304> <8304> 1368 +<8305> <8305> 1499 +<8306> <8306> 6342 +<8309> <8309> 6344 +<830e> <830e> 1834 +<8316> <8316> 6348 +<8317> <8318> 6357 +<831c> <831c> 1135 +<8323> <8323> 6365 +<8328> <8328> 1205 +<832b> <832b> 6356 +<832f> <832f> 6355 +<8331> <8331> 6350 +<8332> <8332> 6349 +<8334> <8334> 6347 +<8335> <8335> 6346 +<8336> <8336> 2977 +<8338> <8338> 2907 +<8339> <8339> 6352 +<8340> <8340> 6351 +<8343> <8343> 15049 +<8345> <8345> 6354 +<8349> <8349> 2802 +<834a> <834a> 1835 +<834f> <834f> 1251 +<8350> <8350> 6353 +<8351> <8351> 15050 +<8352> <8352> 2021 +<8355> <8355> 15051 +<8358> <8358> 2803 +<8362> <8362> 8601 +<8373> <8373> 6371 +<8375> <8375> 6372 +<8377> <8377> 1369 +<837b> <837b> 1326 +<837c> <837c> 6369 +<837f> <837f> 8602 +<8385> <8385> 6359 +<8386> <8386> 15052 +<8387> <8387> 6367 +<8389> <8389> 6374 +<838a> <838a> 6368 +<838d> <838d> 15053 +<838e> <838e> 6366 +<8392> <8392> 15054 +<8393> <8393> 6337 +endcidrange + +100 begincidrange +<8396> <8396> 6364 +<8398> <8398> 15055 +<839a> <839a> 6360 +<839e> <839e> 1548 +<839f> <839f> 6362 +<83a0> <83a0> 6373 +<83a2> <83a2> 6363 +<83a8> <83a8> 6375 +<83a9> <83a9> 15056 +<83aa> <83aa> 6361 +<83ab> <83ab> 3378 +<83b1> <83b1> 3923 +<83b5> <83b5> 6370 +<83bd> <83bd> 6392 +<83bf> <83c0> 15057 +<83c1> <83c1> 6384 +<83c5> <83c5> 2625 +<83c7> <83c7> 8603 +<83ca> <83ca> 1632 +<83cc> <83cc> 1749 +<83ce> <83ce> 6379 +<83d3> <83d3> 1371 +<83d6> <83d6> 2492 +<83d8> <83d8> 6382 +<83dc> <83dc> 2122 +<83df> <83df> 3147 +<83e0> <83e0> 6387 +<83e9> <83e9> 3646 +<83ea> <83ea> 15059 +<83eb> <83eb> 6378 +<83ef> <83ef> 1370 +<83f0> <83f0> 1930 +<83f1> <83f1> 3483 +<83f2> <83f2> 6388 +<83f4> <83f4> 6376 +<83f6> <83f6> 8604 +<83f7> <83f7> 6385 +<83fb> <83fb> 6395 +<83fd> <83fd> 6380 +<8403> <8403> 6381 +<8404> <8404> 3218 +<8407> <8407> 6386 +<840a> <840a> 7807 +<840b> <840b> 6383 +<840c> <840c> 3670 +<840d> <840d> 6389 +<840e> <840e> 1188 +<840f> <840f> 15060 +<8411> <8411> 15061 +<8413> <8413> 6377 +<8420> <8420> 6391 +<8422> <8422> 6390 +<8429> <8429> 3361 +<842a> <842a> 6397 +<842c> <842c> 6408 +<8431> <8431> 1500 +<8435> <8435> 6411 +<8438> <8438> 6393 +<843c> <843c> 6398 +<843d> <843d> 3928 +<8446> <8446> 6407 +<8448> <8448> 8605 +<8449> <8449> 3903 +<844a> <844a> 15062 +<844e> <844e> 3954 +<8457> <8457> 2998 +<845b> <845b> 1481 +<8461> <8461> 3556 +<8462> <8462> 6413 +<8463> <8463> 3193 +<8466> <8466> 1141 +<8469> <8469> 6406 +<846b> <846b> 6402 +<846c> <846c> 2804 +<846d> <846d> 6396 +<846e> <846e> 6404 +<846f> <846f> 6409 +<8471> <8471> 3298 +<8475> <8475> 1134 +<8476> <8476> 15063 +<8477> <8477> 6401 +<8479> <8479> 6410 +<847a> <847a> 3562 +<8482> <8482> 6405 +<8484> <8484> 6400 +<848b> <848b> 2493 +<8490> <8490> 2361 +<8494> <8494> 2264 +<8499> <8499> 3812 +<849c> <849c> 3513 +<849f> <849f> 6416 +<84a1> <84a1> 6425 +<84a8> <84a8> 15064 +<84ad> <84ad> 6403 +<84af> <84af> 15065 +<84b2> <84b2> 1493 +<84b4> <84b4> 8606 +<84b8> <84b8> 2528 +<84b9> <84b9> 6414 +<84bb> <84bb> 6419 +endcidrange + +100 begincidrange +<84bc> <84bc> 2805 +<84bf> <84bf> 6415 +<84c0> <84c0> 15066 +<84c1> <84c1> 6422 +<84c2> <84c2> 15067 +<84c4> <84c4> 2973 +<84c6> <84c6> 6423 +<84c9> <84c9> 3904 +<84ca> <84ca> 6412 +<84cb> <84cb> 1430 +<84cd> <84cd> 6418 +<84d0> <84d0> 6421 +<84d1> <84d1> 3768 +<84d6> <84d6> 6424 +<84d9> <84d9> 6417 +<84da> <84da> 6420 +<84dc> <84dc> 8363 +<84ec> <84ec> 3671 +<84ee> <84ee> 4039 +<84f0> <84f0> 15068 +<84f4> <84f4> 6428 +<84fc> <84fc> 6435 +<84fd> <84fd> 15069 +<84ff> <84ff> 6427 +<8500> <8500> 2287 +<8506> <8506> 6394 +<850c> <850c> 15070 +<8511> <8511> 3614 +<8513> <8513> 3758 +<8514> <8514> 6434 +<8515> <8515> 6433 +<8517> <8518> 6429 +<851a> <851a> 1240 +<851f> <851f> 6432 +<8521> <8521> 6426 +<8523> <8523> 7706 +<8526> <8526> 3057 +<852c> <852c> 6431 +<852d> <852d> 1218 +<8534> <8534> 15071 +<8535> <8535> 2818 +<853d> <853d> 3603 +<853e> <853e> 7861 +<8540> <8540> 6436 +<8541> <8541> 6440 +<8543> <8543> 3437 +<8548> <8548> 6439 +<8549> <8549> 2494 +<854a> <854a> 2293 +<854b> <854b> 6442 +<854e> <854e> 1718 +<8553> <8553> 8607 +<8555> <8555> 6443 +<8557> <8557> 3563 +<8558> <8558> 6438 +<8559> <8559> 8608 +<855a> <855a> 6399 +<855e> <855e> 15072 +<8563> <8563> 6437 +<8568> <8568> 4085 +<8569> <8569> 3194 +<856a> <856a> 3557 +<856b> <856b> 8609 +<856d> <856d> 6450 +<8577> <8577> 6456 +<857e> <857e> 6457 +<8580> <8580> 6444 +<8584> <8584> 3372 +<8587> <8587> 6454 +<8588> <8588> 6446 +<858a> <858a> 6448 +<858f> <858f> 15073 +<8590> <8590> 6458 +<8591> <8591> 6447 +<8594> <8594> 6451 +<8597> <8597> 1300 +<8599> <8599> 3261 +<859b> <859b> 6452 +<859c> <859c> 6455 +<85a4> <85a4> 6445 +<85a6> <85a6> 2728 +<85a8> <85a8> 6449 +<85a9> <85a9> 2165 +<85aa> <85aa> 2571 +<85ab> <85ab> 1798 +<85ac> <85ac> 3840 +<85ad> <85ad> 15076 +<85ae> <85ae> 3845 +<85af> <85af> 2428 +<85b0> <85b0> 8611 +<85b7> <85b7> 15074 +<85b9> <85b9> 6462 +<85ba> <85ba> 6460 +<85c1> <85c1> 4084 +<85c9> <85c9> 6459 +<85cd> <85cd> 3935 +<85ce> <85ce> 15075 +<85cf> <85cf> 6461 +<85d0> <85d0> 6463 +<85d5> <85d5> 6464 +endcidrange + +100 begincidrange +<85dc> <85dc> 6467 +<85dd> <85dd> 6465 +<85e4> <85e4> 3195 +<85e5> <85e5> 6466 +<85e9> <85e9> 3425 +<85ea> <85ea> 6453 +<85f4> <85f4> 14208 +<85f7> <85f7> 2429 +<85f9> <85f9> 6468 +<85fa> <85fa> 6473 +<85fb> <85fb> 2806 +<85fe> <85fe> 6472 +<8602> <8602> 6441 +<8606> <8606> 6474 +<8607> <8607> 2763 +<860a> <860a> 6469 +<860b> <860b> 6471 +<8612> <8612> 15077 +<8613> <8613> 6470 +<8616> <8616> 5328 +<8617> <8617> 5313 +<861a> <861a> 6476 +<8622> <8622> 6475 +<8629> <8629> 15078 +<862d> <862d> 3936 +<862f> <862f> 5809 +<8630> <8630> 6477 +<863f> <863f> 6478 +<864d> <864d> 6479 +<864e> <864e> 1931 +<8650> <8650> 1646 +<8652> <8652> 15079 +<8654> <8654> 6481 +<8655> <8655> 4244 +<865a> <865a> 1679 +<865b> <865b> 13336 +<865c> <865c> 3970 +<865e> <865e> 1771 +<865f> <865f> 6482 +<8663> <8663> 15080 +<8667> <8667> 6483 +<866b> <866b> 2988 +<866c> <866c> 15081 +<866f> <866f> 15082 +<8671> <8671> 6484 +<8679> <8679> 3282 +<867a> <867a> 15083 +<867b> <867b> 1150 +<867d> <867d> 14214 +<868a> <868a> 1379 +<868b> <868c> 6489 +<868d> <868d> 15084 +<8691> <8691> 15085 +<8693> <8693> 6485 +<8695> <8695> 2187 +<8698> <8698> 15086 +<86a3> <86a3> 6486 +<86a4> <86a4> 3320 +<86a7> <86a8> 15087 +<86a9> <86aa> 6487 +<86ab> <86ab> 6498 +<86af> <86af> 6492 +<86b0> <86b0> 6495 +<86b6> <86b6> 6491 +<86c4> <86c4> 6493 +<86c6> <86c6> 6494 +<86c7> <86c7> 2308 +<86c9> <86c9> 6496 +<86cb> <86cb> 2943 +<86cd> <86cd> 1836 +<86ce> <86ce> 1440 +<86d4> <86d4> 6499 +<86d9> <86d9> 1437 +<86db> <86db> 6504 +<86de> <86de> 6500 +<86df> <86df> 6503 +<86e4> <86e4> 3406 +<86e9> <86e9> 6501 +<86ec> <86ec> 6502 +<86ed> <86ed> 3514 +<86ee> <86ee> 3438 +<86ef> <86ef> 6505 +<86f8> <86f8> 2909 +<86f9> <86f9> 6515 +<86fa> <86fa> 15089 +<86fb> <86fb> 6511 +<86fd> <86fd> 15090 +<86fe> <86fe> 1387 +<8700> <8700> 6509 +<8702> <8702> 3672 +<8703> <8703> 6510 +<8706> <8706> 6507 +<8708> <8708> 6508 +<8709> <8709> 6513 +<870a> <870a> 6516 +<870b> <870b> 15091 +<870d> <870d> 6514 +<8711> <8711> 6512 +<8712> <8712> 6506 +<8713> <8713> 15092 +endcidrange + +100 begincidrange +<8718> <8718> 2966 +<8719> <8719> 15093 +<871a> <871a> 6523 +<871c> <871c> 3766 +<871e> <871e> 15094 +<8725> <8725> 6521 +<8728> <8728> 15095 +<8729> <8729> 6522 +<8734> <8734> 6517 +<8737> <8737> 6519 +<873b> <873b> 6520 +<873e> <873e> 15096 +<873f> <873f> 6518 +<8749> <8749> 2698 +<874b> <874b> 4063 +<874c> <874c> 6527 +<874e> <874e> 6528 +<8753> <8753> 6534 +<8755> <8755> 2544 +<8757> <8757> 6530 +<8759> <8759> 6533 +<875f> <875f> 6525 +<8760> <8760> 6524 +<8763> <8763> 6535 +<8766> <8766> 1372 +<8768> <8768> 6531 +<876a> <876a> 6536 +<876e> <876e> 6532 +<8771> <8771> 15097 +<8774> <8774> 6529 +<8776> <8776> 3023 +<8778> <8778> 6526 +<877f> <877f> 3358 +<8782> <8782> 6540 +<8788> <8788> 15098 +<878d> <878d> 3877 +<8799> <8799> 15099 +<879f> <879f> 6539 +<87a2> <87a2> 6538 +<87ab> <87ab> 6547 +<87ac> <87ad> 15100 +<87af> <87af> 6541 +<87b3> <87b3> 6549 +<87b5> <87b5> 15102 +<87ba> <87ba> 3920 +<87bb> <87bb> 6552 +<87bd> <87bd> 6543 +<87c0> <87c0> 6544 +<87c4> <87c4> 6548 +<87c6> <87c6> 6551 +<87c7> <87c7> 6550 +<87cb> <87cb> 6542 +<87d0> <87d0> 6545 +<87d2> <87d2> 6562 +<87d6> <87d6> 15103 +<87e0> <87e0> 6555 +<87eb> <87eb> 15104 +<87ec> <87ec> 7715 +<87ed> <87ed> 15105 +<87ef> <87ef> 6553 +<87f2> <87f2> 6554 +<87f5> <87f5> 15421 +<87f6> <87f7> 6559 +<87f9> <87f9> 1416 +<87fb> <87fb> 1628 +<87fe> <87fe> 6558 +<8801> <8801> 15106 +<8803> <8803> 15107 +<8805> <8805> 6537 +<8806> <8806> 15108 +<8807> <8807> 8614 +<880b> <880b> 15109 +<880d> <880d> 6557 +<880e> <880e> 6561 +<880f> <880f> 6556 +<8811> <8811> 6563 +<8814> <8814> 15110 +<8815> <8815> 6565 +<8816> <8816> 6564 +<881c> <881c> 15111 +<881f> <881f> 7813 +<8821> <8821> 6567 +<8822> <8822> 6566 +<8823> <8823> 6497 +<8827> <8827> 6571 +<8831> <8831> 6568 +<8836> <8836> 6569 +<8839> <8839> 6570 +<883b> <883b> 6572 +<8840> <8840> 1858 +<8842> <8842> 6574 +<8844> <8844> 6573 +<8846> <8846> 2362 +<884c> <884c> 2022 +<884d> <884d> 5412 +<8852> <8852> 6575 +<8853> <8853> 2395 +<8856> <8856> 15112 +<8857> <8857> 1431 +<8859> <8859> 6576 +endcidrange + +100 begincidrange +<885b> <885b> 1268 +<885d> <885d> 2495 +<885e> <885e> 6577 +<885f> <885f> 15113 +<8861> <8861> 2023 +<8862> <8862> 6578 +<8863> <8863> 1189 +<8864> <8864> 15114 +<8868> <8868> 3503 +<886b> <886b> 6579 +<8870> <8870> 2608 +<8872> <8872> 6586 +<8875> <8875> 6583 +<8877> <8877> 2989 +<887d> <887d> 6584 +<887e> <887e> 6581 +<887f> <887f> 1750 +<8881> <8881> 6580 +<8882> <8882> 6587 +<8888> <8888> 1804 +<888b> <888b> 2878 +<888d> <888d> 6593 +<8892> <8892> 6589 +<8896> <8896> 2837 +<8897> <8897> 6588 +<8898> <8898> 15115 +<8899> <8899> 6591 +<889e> <889e> 6582 +<88a2> <88a2> 6592 +<88a4> <88a4> 6594 +<88aa> <88aa> 15116 +<88ab> <88ab> 3459 +<88ae> <88ae> 6590 +<88b0> <88b0> 6595 +<88b1> <88b1> 6597 +<88b4> <88b4> 1927 +<88b5> <88b5> 6585 +<88b7> <88b7> 1157 +<88bd> <88be> 15117 +<88bf> <88bf> 6596 +<88c1> <88c1> 2123 +<88c2> <88c2> 4030 +<88c3> <88c4> 6598 +<88c5> <88c5> 2807 +<88c6> <88c6> 14217 +<88ca> <88ca> 15119 +<88cf> <88cf> 3946 +<88d2> <88d2> 15120 +<88d4> <88d4> 6600 +<88d5> <88d5> 3871 +<88d8> <88d9> 6601 +<88db> <88db> 15121 +<88dc> <88dc> 3636 +<88dd> <88dd> 6603 +<88df> <88df> 2096 +<88e1> <88e1> 3947 +<88e8> <88e8> 6608 +<88f0> <88f1> 15122 +<88f2> <88f2> 6609 +<88f3> <88f3> 2496 +<88f4> <88f4> 6607 +<88f5> <88f5> 8615 +<88f8> <88f8> 3921 +<88f9> <88f9> 6604 +<88fc> <88fc> 6606 +<88fd> <88fd> 2657 +<88fe> <88fe> 2628 +<8902> <8902> 6605 +<8904> <8904> 6610 +<8906> <8906> 15124 +<8907> <8907> 3571 +<890a> <890a> 6612 +<890c> <890c> 6611 +<8910> <8910> 1482 +<8912> <8912> 3673 +<8913> <8913> 6613 +<8918> <891a> 15125 +<891c> <891c> 8360 +<891d> <891d> 6625 +<891e> <891e> 6615 +<8925> <8925> 6616 +<8927> <8927> 15128 +<892a> <892b> 6617 +<8930> <8930> 15129 +<8936> <8936> 6622 +<8938> <8938> 6623 +<893b> <893b> 6621 +<893e> <893e> 15130 +<8941> <8941> 6619 +<8943> <8943> 6614 +<8944> <8944> 6620 +<894c> <894c> 6624 +<894d> <894d> 7120 +<8956> <8956> 1320 +<895e> <895e> 6627 +<895f> <895f> 1751 +<8960> <8960> 6626 +<8964> <8964> 6629 +<8966> <8966> 6628 +<896a> <896a> 6631 +endcidrange + +100 begincidrange +<896d> <896d> 6630 +<896f> <896f> 6632 +<8972> <8972> 2363 +<8974> <8974> 6633 +<8977> <8977> 6634 +<897b> <897b> 15131 +<897e> <897e> 6635 +<897f> <897f> 2658 +<8980> <8980> 13870 +<8981> <8981> 3905 +<8983> <8983> 6636 +<8986> <8986> 3572 +<8987> <8987> 3324 +<8988> <8988> 6637 +<898a> <898a> 6638 +<898b> <898b> 1887 +<898f> <898f> 1606 +<8993> <8993> 6639 +<8996> <8996> 2233 +<8997> <8997> 3319 +<8998> <8998> 6640 +<899a> <899a> 1454 +<89a1> <89a1> 6641 +<89a6> <89a6> 6643 +<89a7> <89a7> 3937 +<89a9> <89a9> 6642 +<89aa> <89aa> 2572 +<89ac> <89ac> 6644 +<89af> <89af> 6645 +<89b2> <89b2> 6646 +<89b3> <89b3> 1549 +<89ba> <89ba> 6647 +<89bd> <89bd> 6648 +<89bf> <89c0> 6649 +<89d2> <89d2> 1455 +<89d4> <89d4> 15132 +<89d6> <89d6> 15133 +<89da> <89da> 6651 +<89dc> <89dd> 6652 +<89e3> <89e3> 1394 +<89e5> <89e5> 15134 +<89e6> <89e6> 2542 +<89e7> <89e7> 6654 +<89f1> <89f1> 15135 +<89f4> <89f4> 6655 +<89f8> <89f8> 6656 +<8a00> <8a00> 1908 +<8a01> <8a01> 13756 +<8a02> <8a02> 3095 +<8a03> <8a03> 6657 +<8a07> <8a07> 15136 +<8a08> <8a08> 1837 +<8a0a> <8a0a> 2588 +<8a0c> <8a0c> 6660 +<8a0e> <8a0e> 3196 +<8a0f> <8a0f> 15137 +<8a10> <8a10> 6659 +<8a12> <8a12> 8616 +<8a13> <8a13> 1799 +<8a15> <8a15> 15138 +<8a16> <8a16> 6658 +<8a17> <8a17> 2903 +<8a18> <8a18> 1607 +<8a1b> <8a1b> 6661 +<8a1d> <8a1d> 6662 +<8a1f> <8a1f> 2497 +<8a22> <8a22> 15139 +<8a23> <8a23> 1859 +<8a25> <8a25> 6663 +<8a2a> <8a2a> 3674 +<8a2d> <8a2d> 2691 +<8a31> <8a31> 1680 +<8a33> <8a33> 3841 +<8a34> <8a34> 2764 +<8a36> <8a36> 6664 +<8a37> <8a37> 8617 +<8a3a> <8a3a> 2573 +<8a3b> <8a3b> 2990 +<8a3c> <8a3c> 2498 +<8a41> <8a41> 6665 +<8a46> <8a46> 6668 +<8a48> <8a48> 6669 +<8a4e> <8a4e> 15140 +<8a50> <8a50> 2094 +<8a51> <8a51> 2850 +<8a52> <8a52> 6667 +<8a54> <8a54> 2499 +<8a55> <8a55> 3504 +<8a5b> <8a5b> 6666 +<8a5e> <8a5e> 2234 +<8a60> <8a60> 1269 +<8a62> <8a62> 6673 +<8a63> <8a63> 1838 +<8a66> <8a66> 2236 +<8a69> <8a69> 2235 +<8a6b> <8a6b> 4083 +<8a6c> <8a6c> 6672 +<8a6d> <8a6d> 6671 +<8a6e> <8a6e> 2729 +<8a70> <8a70> 1639 +endcidrange + +100 begincidrange +<8a71> <8a71> 4073 +<8a72> <8a72> 1432 +<8a73> <8a73> 2500 +<8a79> <8a79> 8618 +<8a7c> <8a7c> 6670 +<8a7f> <8a7f> 15141 +<8a82> <8a82> 6675 +<8a84> <8a84> 6676 +<8a85> <8a85> 6674 +<8a87> <8a87> 1932 +<8a89> <8a89> 3882 +<8a8c> <8a8c> 2237 +<8a8d> <8a8d> 3293 +<8a91> <8a91> 6679 +<8a93> <8a93> 2660 +<8a95> <8a95> 2944 +<8a98> <8a98> 3872 +<8a9a> <8a9a> 6682 +<8a9e> <8a9e> 1952 +<8aa0> <8aa0> 2659 +<8aa1> <8aa1> 6678 +<8aa3> <8aa3> 6683 +<8aa4> <8aa4> 1953 +<8aa5> <8aa6> 6680 +<8aa7> <8aa7> 8619 +<8aa8> <8aa8> 6677 +<8aaa> <8aaa> 13880 +<8aac> <8aac> 2694 +<8aad> <8aad> 3233 +<8ab0> <8ab0> 2925 +<8ab2> <8ab2> 1373 +<8ab9> <8ab9> 3460 +<8abc> <8abc> 1629 +<8abe> <8abe> 8620 +<8abf> <8abf> 3024 +<8ac2> <8ac2> 6686 +<8ac4> <8ac4> 6684 +<8ac7> <8ac7> 2954 +<8acb> <8acb> 2661 +<8acc> <8acc> 1550 +<8acd> <8acd> 6685 +<8acf> <8acf> 2593 +<8ad2> <8ad2> 3986 +<8ad6> <8ad6> 4070 +<8ada> <8ada> 6687 +<8adb> <8adb> 6698 +<8adc> <8adc> 3025 +<8ade> <8ade> 6697 +<8adf> <8adf> 8621 +<8ae0> <8ae0> 6694 +<8ae1> <8ae1> 6702 +<8ae2> <8ae2> 6695 +<8ae4> <8ae4> 6691 +<8ae6> <8ae6> 3096 +<8ae7> <8ae7> 6690 +<8aeb> <8aeb> 6688 +<8aed> <8aed> 3851 +<8aee> <8aee> 2238 +<8af1> <8af1> 6692 +<8af3> <8af3> 6689 +<8af4> <8af4> 15142 +<8af6> <8af6> 8623 +<8af7> <8af7> 6696 +<8af8> <8af8> 2430 +<8afa> <8afa> 1909 +<8afe> <8afe> 2906 +<8b00> <8b00> 3699 +<8b01> <8b01> 1276 +<8b02> <8b02> 1190 +<8b04> <8b04> 3197 +<8b07> <8b07> 6700 +<8b0c> <8b0c> 6699 +<8b0e> <8b0e> 3262 +<8b10> <8b10> 6704 +<8b14> <8b14> 6693 +<8b16> <8b16> 6703 +<8b17> <8b17> 6705 +<8b19> <8b19> 1888 +<8b1a> <8b1a> 6701 +<8b1b> <8b1b> 2024 +<8b1d> <8b1d> 2305 +<8b1f> <8b1f> 15143 +<8b20> <8b20> 6706 +<8b21> <8b21> 3906 +<8b26> <8b26> 6709 +<8b28> <8b28> 6712 +<8b2b> <8b2b> 6710 +<8b2c> <8b2c> 3495 +<8b33> <8b33> 6707 +<8b37> <8b37> 15144 +<8b39> <8b39> 1752 +<8b3e> <8b3e> 6711 +<8b41> <8b41> 6713 +<8b43> <8b44> 15145 +<8b49> <8b49> 6717 +<8b4c> <8b4c> 6714 +<8b4e> <8b4e> 6716 +<8b4f> <8b4f> 6715 +<8b53> <8b53> 8624 +<8b54> <8b54> 15147 +endcidrange + +100 begincidrange +<8b56> <8b56> 6718 +<8b58> <8b58> 2269 +<8b5a> <8b5a> 6720 +<8b5b> <8b5b> 6719 +<8b5c> <8b5c> 3546 +<8b5f> <8b5f> 6722 +<8b66> <8b66> 1839 +<8b6b> <8b6b> 6721 +<8b6c> <8b6c> 6723 +<8b6f> <8b6f> 6724 +<8b70> <8b70> 1630 +<8b71> <8b71> 6190 +<8b72> <8b72> 2529 +<8b74> <8b74> 6725 +<8b77> <8b77> 1954 +<8b7d> <8b7d> 6726 +<8b7f> <8b7f> 8625 +<8b80> <8b80> 6727 +<8b83> <8b83> 2188 +<8b8a> <8b8a> 5075 +<8b8c> <8b8c> 6728 +<8b8e> <8b8e> 6729 +<8b90> <8b90> 2364 +<8b92> <8b93> 6730 +<8b96> <8b96> 6732 +<8b99> <8b9a> 6733 +<8b9c> <8b9c> 15148 +<8b9e> <8b9e> 15149 +<8c37> <8c37> 2921 +<8c3a> <8c3a> 6735 +<8c3f> <8c3f> 6737 +<8c41> <8c41> 6736 +<8c46> <8c46> 3198 +<8c47> <8c47> 15150 +<8c48> <8c48> 6738 +<8c4a> <8c4a> 3675 +<8c4c> <8c4c> 6739 +<8c4e> <8c4e> 6740 +<8c50> <8c50> 6741 +<8c54> <8c54> 15151 +<8c55> <8c55> 6742 +<8c5a> <8c5a> 3250 +<8c61> <8c61> 2501 +<8c62> <8c62> 6743 +<8c6a> <8c6a> 2045 +<8c6b> <8c6b> 4103 +<8c6c> <8c6c> 6744 +<8c73> <8c73> 15152 +<8c78> <8c78> 6745 +<8c79> <8c79> 3505 +<8c7a> <8c7a> 6746 +<8c7c> <8c7c> 6754 +<8c82> <8c82> 6747 +<8c85> <8c85> 6749 +<8c89> <8c89> 6748 +<8c8a> <8c8a> 6750 +<8c8c> <8c8c> 3700 +<8c8d> <8c8e> 6751 +<8c94> <8c94> 6753 +<8c98> <8c98> 6755 +<8c9d> <8c9d> 1419 +<8c9e> <8c9e> 3075 +<8ca0> <8ca0> 3547 +<8ca1> <8ca1> 2130 +<8ca2> <8ca2> 2025 +<8ca4> <8ca4> 15153 +<8ca7> <8ca7> 3521 +<8ca8> <8ca8> 1375 +<8ca9> <8ca9> 3426 +<8caa> <8caa> 6758 +<8cab> <8cab> 1551 +<8cac> <8cac> 2681 +<8cad> <8cad> 6757 +<8cae> <8cae> 6762 +<8caf> <8caf> 2999 +<8cb0> <8cb0> 3823 +<8cb2> <8cb3> 6760 +<8cb4> <8cb4> 1608 +<8cb6> <8cb6> 6763 +<8cb7> <8cb7> 3353 +<8cb8> <8cb8> 2879 +<8cbb> <8cbb> 3461 +<8cbc> <8cbc> 3127 +<8cbd> <8cbd> 6759 +<8cbf> <8cbf> 3701 +<8cc0> <8cc0> 1388 +<8cc1> <8cc1> 6765 +<8cc2> <8cc2> 4046 +<8cc3> <8cc3> 3038 +<8cc4> <8cc4> 4075 +<8cc7> <8cc7> 2239 +<8cc8> <8cc8> 6764 +<8cca> <8cca> 2833 +<8ccd> <8ccd> 6781 +<8cce> <8cce> 2730 +<8cd1> <8cd1> 3280 +<8cd3> <8cd3> 3522 +<8cd9> <8cd9> 15154 +<8cda> <8cda> 6768 +<8cdb> <8cdb> 2189 +endcidrange + +100 begincidrange +<8cdc> <8cdc> 2240 +<8cde> <8cde> 2502 +<8ce0> <8ce0> 3355 +<8ce1> <8ce1> 15155 +<8ce2> <8ce2> 1889 +<8ce3> <8ce3> 6767 +<8ce4> <8ce4> 6766 +<8ce6> <8ce6> 3548 +<8cea> <8cea> 2285 +<8ced> <8ced> 3148 +<8cf0> <8cf0> 8626 +<8cf4> <8cf4> 8627 +<8cf8> <8cf8> 15156 +<8cfa> <8cfb> 6770 +<8cfc> <8cfc> 2026 +<8cfd> <8cfd> 6769 +<8cfe> <8cfe> 15157 +<8d04> <8d05> 6772 +<8d07> <8d07> 6775 +<8d08> <8d08> 2819 +<8d0a> <8d0a> 6774 +<8d0b> <8d0b> 1570 +<8d0d> <8d0d> 6777 +<8d0f> <8d0f> 6776 +<8d10> <8d10> 6778 +<8d12> <8d12> 8628 +<8d13> <8d13> 6780 +<8d14> <8d14> 6782 +<8d16> <8d16> 6783 +<8d1b> <8d1b> 15158 +<8d64> <8d64> 2682 +<8d66> <8d66> 2299 +<8d67> <8d67> 6784 +<8d69> <8d69> 15159 +<8d6b> <8d6b> 1456 +<8d6c> <8d6c> 15160 +<8d6d> <8d6d> 6785 +<8d70> <8d70> 2808 +<8d71> <8d71> 6786 +<8d73> <8d73> 6787 +<8d74> <8d74> 3549 +<8d76> <8d76> 8629 +<8d77> <8d77> 1609 +<8d81> <8d81> 6788 +<8d84> <8d84> 15161 +<8d85> <8d85> 3026 +<8d8a> <8d8a> 1277 +<8d8d> <8d8d> 15162 +<8d95> <8d95> 15163 +<8d99> <8d99> 6789 +<8da3> <8da3> 2333 +<8da6> <8da6> 15164 +<8da8> <8da8> 2620 +<8db3> <8db3> 2829 +<8dba> <8dba> 6792 +<8dbe> <8dbe> 6791 +<8dc2> <8dc2> 6790 +<8dc6> <8dc6> 15165 +<8dcb> <8dcb> 6798 +<8dcc> <8dcc> 6796 +<8dce> <8dce> 15166 +<8dcf> <8dcf> 6793 +<8dd6> <8dd6> 6795 +<8dda> <8dda> 6794 +<8ddb> <8ddb> 6797 +<8ddd> <8ddd> 1681 +<8ddf> <8ddf> 6801 +<8de1> <8de1> 2683 +<8de3> <8de3> 6802 +<8de4> <8de4> 15167 +<8de8> <8de8> 1933 +<8dea> <8deb> 6799 +<8dec> <8dec> 15168 +<8def> <8def> 4047 +<8df3> <8df3> 3027 +<8df5> <8df5> 2731 +<8dfc> <8dfc> 6803 +<8dff> <8dff> 6806 +<8e08> <8e09> 6804 +<8e0a> <8e0a> 3907 +<8e0f> <8e0f> 3199 +<8e10> <8e10> 6809 +<8e1d> <8e1e> 6807 +<8e1f> <8e1f> 6810 +<8e20> <8e20> 15169 +<8e2a> <8e2a> 6824 +<8e30> <8e30> 6813 +<8e34> <8e34> 6814 +<8e35> <8e35> 6812 +<8e42> <8e42> 6811 +<8e44> <8e44> 3097 +<8e47> <8e47> 6816 +<8e48> <8e48> 6820 +<8e49> <8e49> 6817 +<8e4a> <8e4a> 6815 +<8e4b> <8e4b> 15170 +<8e4c> <8e4c> 6818 +<8e50> <8e50> 6819 +<8e55> <8e55> 6826 +<8e59> <8e59> 6821 +endcidrange + +100 begincidrange +<8e5f> <8e5f> 2684 +<8e60> <8e60> 6823 +<8e63> <8e63> 6825 +<8e64> <8e64> 6822 +<8e6c> <8e6c> 15171 +<8e70> <8e70> 15172 +<8e72> <8e72> 6828 +<8e74> <8e74> 2365 +<8e76> <8e76> 6827 +<8e7a> <8e7a> 15173 +<8e7c> <8e7c> 6829 +<8e81> <8e81> 6830 +<8e84> <8e84> 6833 +<8e85> <8e85> 6832 +<8e87> <8e87> 6831 +<8e8a> <8e8a> 6835 +<8e8b> <8e8b> 6834 +<8e8d> <8e8d> 3842 +<8e91> <8e91> 6837 +<8e92> <8e92> 15174 +<8e93> <8e93> 6836 +<8e94> <8e94> 6838 +<8e99> <8e99> 6839 +<8ea1> <8ea1> 6841 +<8eaa> <8eaa> 6840 +<8eab> <8eab> 2574 +<8eac> <8eac> 6842 +<8eae> <8eae> 15175 +<8eaf> <8eaf> 1765 +<8eb0> <8eb0> 6843 +<8eb1> <8eb1> 6845 +<8eb3> <8eb3> 15176 +<8eb6> <8eb6> 14083 +<8ebe> <8ebe> 6846 +<8ec0> <8ec0> 7663 +<8ec5> <8ec5> 6847 +<8ec6> <8ec6> 6844 +<8ec8> <8ec8> 6848 +<8eca> <8eca> 2306 +<8ecb> <8ecb> 6849 +<8ecc> <8ecc> 1610 +<8ecd> <8ecd> 1801 +<8ecf> <8ecf> 8631 +<8ed1> <8ed1> 15177 +<8ed2> <8ed2> 1890 +<8ed4> <8ed4> 15178 +<8edb> <8edb> 6850 +<8edf> <8edf> 3272 +<8ee2> <8ee2> 3128 +<8ee3> <8ee3> 6851 +<8eeb> <8eeb> 6854 +<8ef8> <8ef8> 2272 +<8ef9> <8ef9> 15179 +<8efb> <8efb> 6853 +<8efc> <8efc> 6852 +<8efd> <8efd> 1840 +<8efe> <8efe> 6855 +<8f03> <8f03> 1457 +<8f05> <8f05> 6857 +<8f09> <8f09> 2124 +<8f0a> <8f0a> 6856 +<8f0c> <8f0c> 6865 +<8f12> <8f12> 6859 +<8f13> <8f13> 6861 +<8f14> <8f14> 3637 +<8f15> <8f15> 6858 +<8f17> <8f17> 15180 +<8f19> <8f19> 6860 +<8f1b> <8f1b> 6864 +<8f1c> <8f1c> 6862 +<8f1d> <8f1d> 1611 +<8f1f> <8f1f> 6863 +<8f26> <8f26> 6866 +<8f29> <8f29> 3344 +<8f2a> <8f2a> 4000 +<8f2f> <8f2f> 2366 +<8f33> <8f33> 6867 +<8f36> <8f36> 15181 +<8f38> <8f38> 3852 +<8f39> <8f39> 6869 +<8f3b> <8f3b> 6868 +<8f3e> <8f3e> 6872 +<8f3f> <8f3f> 3883 +<8f42> <8f42> 6871 +<8f44> <8f44> 1483 +<8f45> <8f45> 6870 +<8f46> <8f46> 6875 +<8f49> <8f49> 6874 +<8f4c> <8f4c> 6873 +<8f4d> <8f4d> 3116 +<8f4e> <8f4e> 6876 +<8f57> <8f57> 6877 +<8f5c> <8f5c> 6878 +<8f5f> <8f5f> 2046 +<8f61> <8f61> 1787 +<8f62> <8f64> 6879 +<8f9b> <8f9b> 2575 +<8f9c> <8f9c> 6882 +<8f9e> <8f9e> 2265 +<8f9f> <8f9f> 6883 +endcidrange + +100 begincidrange +<8fa3> <8fa3> 6884 +<8fa6> <8fa6> 15182 +<8fa7> <8fa7> 4278 +<8fa8> <8fa8> 4277 +<8fad> <8fad> 6885 +<8fae> <8fae> 6143 +<8faf> <8faf> 6886 +<8fb0> <8fb0> 2914 +<8fb1> <8fb1> 2545 +<8fb2> <8fb2> 3318 +<8fb5> <8fb6> 15183 +<8fb7> <8fb7> 6887 +<8fba> <8fba> 3621 +<8fbb> <8fbb> 3056 +<8fbc> <8fbc> 2064 +<8fbf> <8fbf> 2919 +<8fc2> <8fc2> 1228 +<8fc4> <8fc4> 3750 +<8fc5> <8fc5> 2589 +<8fc6> <8fc6> 15185 +<8fc8> <8fc8> 14233 +<8fce> <8fce> 1844 +<8fd1> <8fd1> 1753 +<8fd4> <8fd4> 3622 +<8fda> <8fda> 6888 +<8fe0> <8fe0> 15186 +<8fe2> <8fe2> 6890 +<8fe4> <8fe4> 15187 +<8fe5> <8fe5> 6889 +<8fe6> <8fe6> 1376 +<8fe9> <8fe9> 3278 +<8fea> <8fea> 6891 +<8feb> <8feb> 3373 +<8fed> <8fed> 3117 +<8fef> <8fef> 6892 +<8ff0> <8ff0> 2396 +<8ff4> <8ff4> 6894 +<8ff6> <8ff6> 15188 +<8ff7> <8ff7> 3790 +<8ff8> <8ff8> 6909 +<8ff9> <8ffa> 6896 +<8ffd> <8ffd> 3045 +<9000> <9000> 2880 +<9001> <9001> 2809 +<9002> <9002> 15189 +<9003> <9003> 3200 +<9005> <9005> 6895 +<9006> <9006> 1647 +<900b> <900b> 6904 +<900d> <900d> 6901 +<900e> <900e> 6914 +<900f> <900f> 3201 +<9010> <9010> 2974 +<9011> <9011> 6898 +<9013> <9013> 3098 +<9014> <9014> 3149 +<9015> <9015> 6899 +<9016> <9016> 6903 +<9017> <9017> 2598 +<9019> <9019> 3357 +<901a> <901a> 3048 +<901d> <901d> 2662 +<901e> <901e> 6902 +<901f> <901f> 2830 +<9020> <9020> 2820 +<9021> <9021> 6900 +<9022> <9022> 1133 +<9023> <9023> 4040 +<9027> <9027> 6905 +<902c> <902c> 15190 +<902e> <902e> 2881 +<9031> <9031> 2367 +<9032> <9032> 2576 +<9035> <9035> 6907 +<9036> <9036> 6906 +<9038> <9038> 1203 +<9039> <9039> 6908 +<903c> <903c> 3489 +<903e> <903e> 6916 +<9041> <9041> 3251 +<9042> <9042> 2609 +<9044> <9044> 15191 +<9045> <9045> 2967 +<9047> <9047> 1776 +<9049> <9049> 6915 +<904a> <904a> 3873 +<904b> <904b> 1249 +<904d> <904d> 3623 +<904e> <904e> 1377 +<904f> <9052> 6910 +<9053> <9053> 3219 +<9054> <9054> 2913 +<9055> <9055> 1191 +<9056> <9056> 6917 +<9058> <9058> 6918 +<9059> <9059> 7476 +<905c> <905c> 2845 +<905e> <905e> 6919 +<9060> <9060> 1301 +<9061> <9061> 2766 +endcidrange + +100 begincidrange +<9063> <9063> 1891 +<9065> <9065> 3908 +<9067> <9067> 8634 +<9068> <9068> 6920 +<9069> <9069> 3110 +<906d> <906d> 2810 +<906e> <906e> 2307 +<906f> <906f> 6921 +<9072> <9072> 6924 +<9075> <9075> 2415 +<9076> <9076> 6922 +<9077> <9077> 2733 +<9078> <9078> 2732 +<907a> <907a> 1192 +<907c> <907c> 3987 +<907d> <907d> 6926 +<907f> <907f> 3462 +<9080> <9080> 6928 +<9081> <9081> 6927 +<9082> <9082> 6925 +<9083> <9083> 5943 +<9084> <9084> 1552 +<9087> <9087> 6893 +<9088> <9088> 15192 +<9089> <9089> 6930 +<908a> <908a> 6929 +<908f> <908f> 6931 +<9091> <9091> 3874 +<9095> <9095> 15193 +<9099> <9099> 15194 +<909b> <909b> 15195 +<90a2> <90a2> 15196 +<90a3> <90a3> 3257 +<90a6> <90a6> 3676 +<90a8> <90a8> 6932 +<90aa> <90aa> 2309 +<90af> <90af> 6933 +<90b1> <90b1> 6934 +<90b4> <90b4> 15197 +<90b5> <90b5> 6935 +<90b8> <90b8> 3099 +<90c1> <90c1> 1198 +<90ca> <90ca> 2027 +<90ce> <90ce> 4064 +<90d7> <90d7> 15198 +<90db> <90db> 6939 +<90dd> <90dd> 15199 +<90de> <90de> 8635 +<90e1> <90e1> 1802 +<90e2> <90e2> 6936 +<90e4> <90e4> 6937 +<90e8> <90e8> 3558 +<90ed> <90ed> 1458 +<90f4> <90f4> 15200 +<90f5> <90f5> 3875 +<90f7> <90f7> 1719 +<90fd> <90fd> 3150 +<9102> <9102> 6940 +<9112> <9112> 6941 +<9115> <9115> 8637 +<9117> <9117> 15201 +<9119> <9119> 6942 +<911c> <911c> 15202 +<9127> <9127> 8638 +<912d> <912d> 3100 +<9130> <9130> 6944 +<9131> <9131> 15203 +<9132> <9132> 6943 +<913a> <913a> 15204 +<913d> <913d> 15205 +<9148> <9148> 15206 +<9149> <9149> 3243 +<914a> <914a> 6945 +<914b> <914b> 2368 +<914c> <914c> 2316 +<914d> <914d> 3345 +<914e> <914e> 2991 +<9152> <9152> 2334 +<9154> <9154> 2610 +<9156> <9156> 6946 +<9158> <9158> 6947 +<915b> <915b> 15207 +<9161> <9161> 15208 +<9162> <9162> 2595 +<9163> <9163> 6948 +<9164> <9164> 15209 +<9165> <9165> 6949 +<9169> <9169> 6950 +<916a> <916a> 3929 +<916c> <916c> 2369 +<9172> <9172> 6952 +<9173> <9173> 6951 +<9175> <9175> 2028 +<9177> <9177> 2053 +<9178> <9178> 2190 +<9182> <9182> 6955 +<9187> <9187> 2416 +<9189> <9189> 6954 +<918b> <918b> 6953 +<918d> <918d> 2889 +endcidrange + +100 begincidrange +<918e> <918e> 15210 +<9190> <9190> 1955 +<9192> <9192> 2663 +<9197> <9197> 3396 +<919c> <919c> 2371 +<919e> <919e> 15211 +<91a2> <91a2> 6956 +<91a4> <91a4> 2503 +<91a8> <91a8> 15212 +<91aa> <91aa> 6959 +<91ab> <91ab> 6957 +<91ac> <91ac> 7707 +<91ad> <91ae> 15213 +<91af> <91af> 6958 +<91b1> <91b1> 7777 +<91b2> <91b2> 15215 +<91b4> <91b4> 6961 +<91b5> <91b5> 6960 +<91b8> <91b8> 2530 +<91ba> <91ba> 6962 +<91bc> <91bc> 15216 +<91c0> <91c1> 6963 +<91c6> <91c6> 3428 +<91c7> <91c7> 2115 +<91c8> <91c8> 2317 +<91c9> <91c9> 6965 +<91cb> <91cb> 6966 +<91cc> <91cc> 3948 +<91cd> <91cd> 2383 +<91ce> <91ce> 3834 +<91cf> <91cf> 3988 +<91d0> <91d0> 6967 +<91d1> <91d1> 1754 +<91d6> <91d6> 6968 +<91d7> <91d7> 8640 +<91d8> <91d8> 3101 +<91da> <91da> 8639 +<91db> <91db> 6971 +<91dc> <91dc> 1494 +<91dd> <91dd> 2577 +<91de> <91de> 8641 +<91df> <91df> 6969 +<91e1> <91e1> 6970 +<91e3> <91e3> 3068 +<91e4> <91e5> 8644 +<91e6> <91e6> 3715 +<91e7> <91e7> 1780 +<91ed> <91ee> 8642 +<91f0> <91f0> 15217 +<91f5> <91f6> 6973 +<91f7> <91f7> 15218 +<91fb> <91fb> 15219 +<91fc> <91fc> 6972 +<91ff> <91ff> 6976 +<9206> <9206> 8646 +<9207> <9207> 15220 +<920a> <920a> 8648 +<920d> <920d> 3255 +<920e> <920e> 1441 +<9210> <9210> 8647 +<9211> <9211> 6980 +<9214> <9214> 6977 +<9215> <9215> 6979 +<921e> <921e> 6975 +<9228> <9228> 15221 +<9229> <9229> 7050 +<922c> <922c> 6978 +<9233> <9233> 15222 +<9234> <9234> 4019 +<9237> <9237> 1934 +<9238> <9238> 15223 +<9239> <9239> 8655 +<923a> <923a> 8649 +<923c> <923c> 8651 +<923f> <923f> 6988 +<9240> <9240> 8650 +<9243> <9243> 15224 +<9244> <9244> 3118 +<9245> <9245> 6983 +<9247> <9247> 15225 +<9248> <9248> 6986 +<9249> <9249> 6984 +<924b> <924b> 6989 +<924e> <924e> 8652 +<924f> <924f> 15226 +<9250> <9250> 6990 +<9251> <9251> 8654 +<9257> <9257> 6982 +<9259> <9259> 8653 +<925a> <925a> 6995 +<925b> <925b> 1302 +<925e> <925e> 6981 +<9260> <9260> 15227 +<9262> <9262> 3393 +<9264> <9264> 6985 +<9266> <9266> 2504 +<9267> <9267> 8656 +<9271> <9271> 2029 +<9277> <9278> 8658 +<927e> <927e> 3702 +endcidrange + +100 begincidrange +<9280> <9280> 1756 +<9283> <9283> 2384 +<9285> <9285> 3220 +<9288> <9288> 8362 +<9291> <9291> 2735 +<9293> <9293> 6993 +<9295> <9295> 6987 +<9296> <9296> 6992 +<9298> <9298> 3791 +<929a> <929a> 3028 +<929b> <929b> 6994 +<929c> <929c> 6991 +<92a7> <92a7> 8657 +<92ad> <92ad> 2734 +<92b3> <92b3> 13652 +<92b7> <92b7> 6998 +<92b9> <92b9> 6997 +<92c2> <92c2> 15228 +<92cb> <92cc> 15229 +<92cf> <92cf> 6996 +<92d0> <92d0> 8663 +<92d2> <92d2> 3677 +<92d3> <92d3> 8667 +<92d5> <92d5> 8665 +<92d7> <92d7> 8661 +<92d9> <92d9> 8662 +<92df> <92df> 15231 +<92e0> <92e0> 8666 +<92e4> <92e4> 2437 +<92e7> <92e7> 8660 +<92e9> <92e9> 6999 +<92ea> <92ea> 3631 +<92ed> <92ed> 1270 +<92f2> <92f2> 3512 +<92f3> <92f3> 2992 +<92f8> <92f8> 1682 +<92f9> <92f9> 8368 +<92fa> <92fa> 7001 +<92fb> <92fb> 8670 +<92fc> <92fc> 2031 +<92ff> <92ff> 8673 +<9302> <9302> 8675 +<9304> <9304> 13402 +<9306> <9306> 2170 +<930d> <930d> 15232 +<930f> <930f> 7000 +<9310> <9310> 2611 +<9315> <9315> 15233 +<9318> <9318> 2612 +<9319> <9319> 7004 +<931a> <931a> 7006 +<931d> <931d> 8674 +<931e> <931e> 8672 +<931f> <931f> 15234 +<9320> <9320> 2531 +<9321> <9321> 8669 +<9322> <9322> 7005 +<9323> <9323> 7007 +<9325> <9325> 8668 +<9326> <9326> 1739 +<9327> <9327> 15235 +<9328> <9328> 3511 +<932b> <932b> 2318 +<932c> <932c> 4041 +<932e> <932e> 7003 +<932f> <932f> 2152 +<9332> <9332> 4069 +<9335> <9335> 7009 +<933a> <933a> 7008 +<933b> <933b> 7010 +<9344> <9344> 7002 +<9347> <9347> 15236 +<9348> <9348> 8361 +<934a> <934a> 13400 +<934b> <934b> 3265 +<934d> <934d> 3151 +<9352> <9352> 15237 +<9354> <9354> 3059 +<9356> <9356> 7015 +<9357> <9357> 8677 +<935b> <935b> 2945 +<935c> <935c> 7011 +<9360> <9360> 7012 +<9365> <9365> 15238 +<936a> <936a> 15239 +<936c> <936c> 1795 +<936d> <936d> 15240 +<936e> <936e> 7014 +<9370> <9370> 8676 +<9375> <9375> 1892 +<937c> <937c> 7013 +<937e> <937e> 2505 +<938c> <938c> 1495 +<9394> <9394> 7019 +<9396> <9396> 2095 +<9397> <9397> 2811 +<939a> <939a> 3046 +<939b> <939b> 15241 +<93a4> <93a4> 8678 +<93a7> <93a7> 1433 +endcidrange + +100 begincidrange +<93a9> <93a9> 15243 +<93ac> <93ad> 7017 +<93ae> <93ae> 3039 +<93b0> <93b0> 7016 +<93b9> <93b9> 7020 +<93ba> <93ba> 15242 +<93c1> <93c1> 15244 +<93c3> <93c3> 7026 +<93c6> <93c6> 8679 +<93c8> <93c8> 7029 +<93ca> <93ca> 15245 +<93d0> <93d0> 7028 +<93d1> <93d1> 3111 +<93d6> <93d7> 7021 +<93d8> <93d8> 7025 +<93dd> <93dd> 7027 +<93de> <93de> 8680 +<93e1> <93e1> 1720 +<93e2> <93e2> 15246 +<93e4> <93e4> 7030 +<93e5> <93e5> 7024 +<93e8> <93e8> 7023 +<93f8> <93f8> 8681 +<93fa> <93fa> 15247 +<93fd> <93fd> 15248 +<9403> <9403> 7034 +<9407> <9407> 7035 +<940f> <940f> 15249 +<9410> <9410> 7036 +<9413> <9413> 7033 +<9414> <9414> 7032 +<9418> <9418> 2506 +<9419> <9419> 3202 +<941a> <941a> 7031 +<9421> <9421> 7040 +<942b> <942b> 7038 +<9431> <9431> 8682 +<9434> <9434> 15250 +<9435> <9435> 7039 +<9436> <9436> 7037 +<9438> <9438> 2904 +<943a> <943a> 7041 +<943f> <943f> 15251 +<9441> <9441> 7042 +<9444> <9444> 7044 +<9445> <9445> 8683 +<9448> <9448> 8684 +<9451> <9451> 1553 +<9452> <9452> 7043 +<9453> <9453> 3846 +<9455> <9455> 15252 +<945a> <945a> 7055 +<945b> <945b> 7045 +<945e> <945e> 7048 +<9460> <9460> 7046 +<9462> <9462> 7047 +<946a> <946a> 7049 +<946b> <946b> 15253 +<9470> <9470> 7051 +<9472> <9472> 15254 +<9475> <9475> 7052 +<9477> <9477> 7053 +<947c> <947c> 7056 +<947d> <947d> 7054 +<947e> <947e> 7057 +<947f> <947f> 7059 +<9481> <9481> 7058 +<9577> <9577> 3029 +<9578> <9578> 15255 +<9580> <9580> 3827 +<9582> <9582> 7060 +<9583> <9583> 2736 +<9587> <9587> 7061 +<9589> <9589> 3604 +<958a> <958a> 7062 +<958b> <958b> 1417 +<958f> <958f> 1246 +<9591> <9591> 1555 +<9592> <9592> 8685 +<9593> <9593> 1554 +<9594> <9594> 7063 +<9596> <9596> 7064 +<9598> <9599> 7065 +<95a0> <95a0> 7067 +<95a2> <95a2> 1556 +<95a3> <95a3> 1459 +<95a4> <95a4> 2032 +<95a5> <95a5> 3402 +<95a6> <95a6> 15256 +<95a7> <95a7> 7069 +<95a8> <95a8> 7068 +<95a9> <95a9> 15257 +<95ab> <95ab> 15258 +<95ad> <95ad> 7070 +<95b1> <95b1> 13653 +<95b2> <95b2> 1278 +<95b4> <95b4> 15259 +<95b9> <95b9> 7073 +<95bb> <95bb> 7072 +<95bc> <95bc> 7071 +endcidrange + +100 begincidrange +<95bd> <95bd> 15260 +<95be> <95be> 7074 +<95c3> <95c3> 7077 +<95c7> <95c7> 1163 +<95ca> <95ca> 7075 +<95cc> <95cc> 7079 +<95cd> <95cd> 7078 +<95d4> <95d4> 7081 +<95d5> <95d5> 7080 +<95d6> <95d6> 7082 +<95d8> <95d8> 3206 +<95da> <95da> 15261 +<95dc> <95dc> 7083 +<95e1> <95e1> 7084 +<95e2> <95e2> 7086 +<95e5> <95e5> 7085 +<961c> <961c> 3550 +<961d> <961d> 15262 +<9621> <9621> 7087 +<9628> <9628> 7088 +<962a> <962a> 2133 +<962e> <962f> 7089 +<9632> <9632> 3703 +<963b> <963b> 2765 +<963f> <963f> 1128 +<9640> <9640> 2859 +<9641> <9641> 15263 +<9642> <9642> 7091 +<9644> <9644> 3551 +<964b> <964b> 7094 +<964c> <964c> 7092 +<964d> <964d> 2033 +<964f> <964f> 7093 +<9650> <9650> 1910 +<9658> <9658> 15264 +<965b> <965b> 3605 +<965c> <965c> 7096 +<965d> <965d> 7098 +<965e> <965e> 7097 +<965f> <965f> 7099 +<9662> <9662> 1219 +<9663> <9663> 2590 +<9664> <9664> 2438 +<9665> <9665> 1557 +<9666> <9666> 7100 +<966a> <966a> 3356 +<966c> <966c> 7102 +<9670> <9670> 1220 +<9672> <9672> 7101 +<9673> <9673> 3040 +<9675> <9675> 3989 +<9676> <9676> 3203 +<9677> <9677> 7095 +<9678> <9678> 3950 +<967a> <967a> 1893 +<967d> <967d> 3909 +<9684> <9684> 15265 +<9685> <9685> 1777 +<9686> <9686> 3964 +<9688> <9688> 1790 +<968a> <968a> 2882 +<968b> <968b> 6252 +<968d> <968d> 7103 +<968e> <968e> 1418 +<968f> <968f> 2613 +<9694> <9694> 1460 +<9695> <9695> 7105 +<9697> <9697> 7106 +<9698> <9698> 7104 +<9699> <9699> 1850 +<969b> <969b> 2125 +<969c> <969c> 2507 +<969d> <969d> 8688 +<96a0> <96a0> 1221 +<96a3> <96a3> 4001 +<96a4> <96a4> 15266 +<96a7> <96a7> 7108 +<96a8> <96a8> 6923 +<96a9> <96a9> 15267 +<96aa> <96aa> 7107 +<96af> <96af> 8689 +<96b0> <96b0> 7111 +<96b1> <96b2> 7109 +<96b4> <96b4> 7112 +<96b6> <96b6> 7113 +<96b7> <96b7> 4020 +<96b8> <96b9> 7114 +<96bb> <96bb> 2669 +<96bc> <96bc> 3407 +<96c0> <96c0> 2627 +<96c1> <96c1> 1571 +<96c4> <96c4> 3876 +<96c5> <96c5> 1389 +<96c6> <96c6> 2370 +<96c7> <96c7> 1935 +<96c9> <96c9> 7118 +<96cb> <96cb> 7117 +<96cc> <96cc> 2241 +<96cd> <96cd> 7119 +<96ce> <96ce> 7116 +endcidrange + +100 begincidrange +<96d1> <96d1> 2166 +<96d2> <96d2> 15268 +<96d5> <96d5> 7123 +<96d6> <96d6> 6546 +<96d9> <96d9> 4331 +<96db> <96db> 2621 +<96dc> <96dc> 7121 +<96de> <96de> 15270 +<96e2> <96e2> 3949 +<96e3> <96e3> 3273 +<96e8> <96e8> 1229 +<96e9> <96e9> 15271 +<96ea> <96ea> 2695 +<96eb> <96eb> 2274 +<96f0> <96f0> 3591 +<96f1> <96f1> 15272 +<96f2> <96f2> 1250 +<96f6> <96f6> 4021 +<96f7> <96f7> 3925 +<96f9> <96f9> 7124 +<96fb> <96fb> 3135 +<9700> <9700> 2343 +<9702> <9702> 15273 +<9704> <9704> 7125 +<9706> <9706> 7126 +<9707> <9707> 2578 +<9708> <9708> 7127 +<9709> <9709> 15274 +<970a> <970a> 4022 +<970d> <970d> 7122 +<970e> <970e> 7129 +<970f> <970f> 7131 +<9711> <9711> 7130 +<9713> <9713> 7128 +<9716> <9716> 7132 +<9719> <9719> 7133 +<971c> <971c> 2812 +<971e> <971e> 1378 +<9724> <9724> 7134 +<9727> <9727> 3780 +<972a> <972a> 7135 +<9730> <9730> 7136 +<9732> <9732> 4048 +<9733> <9733> 8690 +<9738> <9738> 5140 +<9739> <9739> 7137 +<973b> <973b> 8691 +<973d> <973e> 7138 +<9742> <9742> 7143 +<9743> <9743> 8692 +<9744> <9744> 7140 +<9746> <9746> 7141 +<9748> <9748> 7142 +<9749> <9749> 7144 +<974d> <974d> 8693 +<974f> <974f> 8694 +<9751> <9751> 8695 +<9752> <9752> 2664 +<9755> <9755> 8696 +<9756> <9756> 3843 +<9759> <9759> 2665 +<975a> <975a> 15275 +<975c> <975c> 7145 +<975e> <975e> 3463 +<9760> <9760> 7146 +<9761> <9761> 7430 +<9762> <9762> 3800 +<9763> <9763> 15276 +<9764> <9764> 7147 +<9766> <9766> 7148 +<9768> <9768> 7149 +<9769> <9769> 1461 +<976b> <976b> 7151 +<976d> <976d> 2591 +<976e> <976e> 15277 +<9771> <9771> 7152 +<9773> <9773> 15278 +<9774> <9774> 1786 +<9779> <9779> 7153 +<977a> <977a> 7157 +<977c> <977c> 7155 +<9781> <9781> 7156 +<9784> <9784> 1489 +<9785> <9785> 7154 +<9786> <9786> 7158 +<978b> <978b> 7159 +<978d> <978d> 1164 +<978f> <9790> 7160 +<9798> <9798> 2508 +<979a> <979a> 15279 +<979c> <979c> 7162 +<97a0> <97a0> 1633 +<97a2> <97a2> 15280 +<97a3> <97a3> 7165 +<97a6> <97a6> 7164 +<97a8> <97a8> 7163 +<97ab> <97ab> 6708 +<97ad> <97ad> 3628 +<97b3> <97b4> 7166 +<97b5> <97b6> 15281 +endcidrange + +100 begincidrange +<97c3> <97c3> 7168 +<97c6> <97c6> 7169 +<97c8> <97c8> 7170 +<97cb> <97cb> 7171 +<97d3> <97d3> 1558 +<97d9> <97d9> 15283 +<97dc> <97dc> 7172 +<97de> <97de> 15284 +<97ed> <97ed> 7173 +<97ee> <97ee> 3289 +<97f2> <97f2> 7175 +<97f3> <97f3> 1339 +<97f4> <97f4> 15285 +<97f5> <97f5> 7178 +<97f6> <97f6> 7177 +<97fb> <97fb> 1222 +<97ff> <97ff> 1721 +<9801> <9801> 3607 +<9802> <9802> 3030 +<9803> <9803> 2066 +<9805> <9805> 2034 +<9806> <9806> 2417 +<9808> <9808> 2594 +<980a> <980a> 15286 +<980c> <980c> 7180 +<980e> <980e> 15287 +<980f> <980f> 7179 +<9810> <9810> 3884 +<9811> <9811> 1572 +<9812> <9812> 3430 +<9813> <9813> 3252 +<9817> <9817> 2626 +<9818> <9818> 3990 +<981a> <981a> 1841 +<981e> <981e> 15288 +<9821> <9821> 7183 +<9823> <9823> 15289 +<9824> <9824> 7182 +<982b> <982b> 15290 +<982c> <982c> 3705 +<982d> <982d> 3204 +<9830> <9830> 7795 +<9834> <9834> 1266 +<9837> <9837> 7184 +<9838> <9838> 7181 +<9839> <9839> 14259 +<983b> <983b> 3523 +<983c> <983c> 3924 +<983d> <983d> 7185 +<983e> <983e> 15291 +<9846> <9846> 7186 +<984b> <984b> 7188 +<984c> <984c> 2890 +<984d> <984e> 1465 +<984f> <984f> 7187 +<9852> <9853> 15292 +<9854> <9854> 1573 +<9855> <9855> 1894 +<9857> <9857> 8697 +<9858> <9858> 1574 +<9859> <9859> 15294 +<985a> <985a> 7752 +<985b> <985b> 3129 +<985e> <985e> 4008 +<9865> <9865> 8698 +<9867> <9867> 1936 +<986b> <986b> 7189 +<986c> <986c> 15295 +<986f> <9871> 7190 +<9873> <9873> 7194 +<9874> <9874> 7193 +<98a8> <98a8> 3561 +<98aa> <98aa> 7195 +<98af> <98af> 7196 +<98b1> <98b1> 7197 +<98b6> <98b6> 7198 +<98b8> <98b8> 15296 +<98ba> <98ba> 15297 +<98bf> <98bf> 15298 +<98c3> <98c3> 7200 +<98c4> <98c4> 7199 +<98c6> <98c6> 7201 +<98c8> <98c8> 15299 +<98db> <98db> 3464 +<98dc> <98dc> 6201 +<98df> <98df> 2543 +<98e0> <98e0> 13848 +<98e2> <98e2> 1612 +<98e5> <98e5> 15300 +<98e9> <98e9> 7202 +<98eb> <98eb> 7203 +<98ed> <98ed> 4289 +<98ee> <98ee> 5338 +<98ef> <98ef> 3431 +<98f2> <98f2> 1215 +<98f4> <98f4> 1151 +<98fc> <98fc> 2242 +<98fd> <98fd> 3678 +<98fe> <98fe> 2534 +<9903> <9903> 7204 +endcidrange + +100 begincidrange +<9905> <9905> 3819 +<9909> <9909> 7205 +<990a> <990a> 3910 +<990c> <990c> 1252 +<9910> <9910> 2191 +<9912> <9912> 7206 +<9913> <9913> 1390 +<9914> <9914> 7207 +<9918> <9918> 7208 +<991d> <991e> 7210 +<9920> <9920> 7213 +<9921> <9921> 7209 +<9924> <9924> 7212 +<9927> <9927> 8701 +<9928> <9928> 1559 +<992c> <992c> 7214 +<992e> <992e> 7215 +<9932> <9933> 15301 +<993d> <993e> 7216 +<9940> <9940> 15303 +<9942> <9942> 7218 +<9945> <9945> 7220 +<9949> <9949> 7219 +<994b> <994b> 7222 +<994c> <994c> 7225 +<994d> <994d> 15304 +<9950> <9950> 7221 +<9951> <9952> 7223 +<9955> <9955> 7226 +<9957> <9957> 1722 +<995c> <995c> 15305 +<995f> <995f> 15306 +<9996> <9996> 2335 +<9997> <9998> 7227 +<9999> <9999> 2035 +<999e> <999e> 8703 +<99a5> <99a5> 7229 +<99a8> <99a8> 1436 +<99ac> <99ac> 3333 +<99ad> <99ae> 7230 +<99b1> <99b1> 15307 +<99b3> <99b3> 2968 +<99b4> <99b4> 3267 +<99b9> <99ba> 15308 +<99bc> <99bc> 7232 +<99c1> <99c1> 3379 +<99c4> <99c4> 2860 +<99c5> <99c5> 1274 +<99c6> <99c6> 1766 +<99c8> <99c8> 1767 +<99c9> <99c9> 15310 +<99d0> <99d0> 2993 +<99d1> <99d1> 7237 +<99d2> <99d2> 1768 +<99d5> <99d5> 1391 +<99d8> <99d8> 7236 +<99db> <99db> 7234 +<99dd> <99dd> 7235 +<99df> <99df> 7233 +<99e2> <99e2> 7247 +<99ed> <99ee> 7238 +<99f1> <99f2> 7240 +<99f8> <99f8> 7243 +<99fb> <99fb> 7242 +<99ff> <99ff> 2403 +<9a01> <9a01> 7244 +<9a02> <9a02> 15311 +<9a05> <9a05> 7246 +<9a08> <9a08> 14266 +<9a0e> <9a0e> 1613 +<9a0f> <9a0f> 7245 +<9a12> <9a12> 2813 +<9a13> <9a13> 1895 +<9a16> <9a16> 15312 +<9a19> <9a19> 7248 +<9a24> <9a24> 15313 +<9a27> <9a27> 15314 +<9a28> <9a28> 2861 +<9a2b> <9a2b> 7249 +<9a2d> <9a2e> 15315 +<9a30> <9a30> 3205 +<9a36> <9a36> 15317 +<9a37> <9a37> 7250 +<9a38> <9a38> 15318 +<9a3e> <9a3e> 7255 +<9a40> <9a40> 7253 +<9a42> <9a42> 7252 +<9a43> <9a43> 7254 +<9a45> <9a45> 7251 +<9a4a> <9a4a> 15319 +<9a4d> <9a4d> 7257 +<9a4e> <9a4e> 8704 +<9a52> <9a52> 7727 +<9a55> <9a55> 7256 +<9a56> <9a56> 15320 +<9a57> <9a57> 7259 +<9a5a> <9a5a> 1723 +<9a5b> <9a5b> 7258 +<9a5f> <9a5f> 7260 +<9a62> <9a62> 7261 +endcidrange + +100 begincidrange +<9a64> <9a64> 7263 +<9a65> <9a65> 7262 +<9a69> <9a69> 7264 +<9a6a> <9a6a> 7266 +<9a6b> <9a6b> 7265 +<9aa8> <9aa8> 2062 +<9aad> <9aad> 7267 +<9ab0> <9ab0> 7268 +<9ab5> <9ab6> 15321 +<9ab8> <9ab8> 1434 +<9abc> <9abc> 7269 +<9ac0> <9ac0> 7270 +<9ac4> <9ac4> 2615 +<9acf> <9acf> 7271 +<9ad1> <9ad1> 7272 +<9ad3> <9ad4> 7273 +<9ad8> <9ad8> 2036 +<9ad9> <9ad9> 8705 +<9adc> <9adc> 8706 +<9ade> <9adf> 7275 +<9ae2> <9ae3> 7277 +<9ae6> <9ae6> 7279 +<9aea> <9aea> 3397 +<9aeb> <9aeb> 7281 +<9aed> <9aed> 3480 +<9aee> <9aee> 7282 +<9aef> <9aef> 7280 +<9af1> <9af1> 7284 +<9af4> <9af4> 7283 +<9af7> <9af7> 7285 +<9af9> <9af9> 15323 +<9afb> <9afb> 7286 +<9b03> <9b03> 15324 +<9b06> <9b06> 7287 +<9b18> <9b18> 7288 +<9b1a> <9b1a> 7289 +<9b1f> <9b1f> 7290 +<9b20> <9b20> 15325 +<9b22> <9b23> 7291 +<9b25> <9b25> 7293 +<9b27> <9b2a> 7294 +<9b2d> <9b2d> 13372 +<9b2e> <9b2f> 7298 +<9b31> <9b31> 5332 +<9b32> <9b32> 7300 +<9b33> <9b34> 15326 +<9b3b> <9b3b> 6057 +<9b3c> <9b3c> 1614 +<9b41> <9b41> 1407 +<9b42> <9b42> 2082 +<9b43> <9b43> 7302 +<9b44> <9b44> 7301 +<9b45> <9b45> 3761 +<9b4d> <9b4e> 7304 +<9b4f> <9b4f> 7303 +<9b51> <9b51> 7306 +<9b54> <9b54> 3728 +<9b58> <9b58> 7307 +<9b5a> <9b5a> 1685 +<9b6f> <9b6f> 4043 +<9b72> <9b72> 8708 +<9b73> <9b73> 15328 +<9b74> <9b74> 7308 +<9b75> <9b75> 8707 +<9b79> <9b79> 15329 +<9b83> <9b83> 7310 +<9b8e> <9b8e> 1154 +<9b8f> <9b8f> 8709 +<9b91> <9b91> 7311 +<9b92> <9b92> 3579 +<9b93> <9b93> 7309 +<9b96> <9b97> 7312 +<9b9f> <9ba0> 7314 +<9ba7> <9ba7> 15330 +<9ba8> <9ba8> 7316 +<9baa> <9baa> 3740 +<9bab> <9bab> 2171 +<9bad> <9bad> 2154 +<9bae> <9bae> 2737 +<9bb1> <9bb1> 8710 +<9bb4> <9bb4> 7317 +<9bb9> <9bb9> 7320 +<9bbb> <9bbb> 8711 +<9bc0> <9bc0> 7318 +<9bc1> <9bc1> 15331 +<9bc6> <9bc6> 7321 +<9bc7> <9bc7> 15332 +<9bc9> <9bc9> 1957 +<9bca> <9bca> 7319 +<9bcf> <9bcf> 7322 +<9bd1> <9bd2> 7323 +<9bd4> <9bd4> 7328 +<9bd6> <9bd6> 2168 +<9bd7> <9bd7> 15333 +<9bdb> <9bdb> 2884 +<9bdf> <9bdf> 14271 +<9be1> <9be1> 7329 +<9be2> <9be2> 7326 +<9be3> <9be3> 7325 +<9be4> <9be4> 7327 +endcidrange + +100 begincidrange +<9be7> <9be7> 15334 +<9be8> <9be8> 1845 +<9beb> <9beb> 15335 +<9bf0> <9bf0> 7333 +<9bf1> <9bf1> 7332 +<9bf2> <9bf2> 7331 +<9bf5> <9bf5> 1143 +<9bf7> <9bf7> 15336 +<9bfa> <9bfa> 15337 +<9bfd> <9bfd> 15338 +<9c00> <9c00> 8712 +<9c04> <9c04> 7343 +<9c06> <9c06> 7339 +<9c08> <9c08> 7340 +<9c09> <9c09> 7336 +<9c0a> <9c0a> 7342 +<9c0b> <9c0b> 15339 +<9c0c> <9c0c> 7338 +<9c0d> <9c0d> 1472 +<9c10> <9c10> 4082 +<9c12> <9c12> 7341 +<9c13> <9c13> 7337 +<9c14> <9c14> 7335 +<9c15> <9c15> 7334 +<9c1b> <9c1b> 7345 +<9c21> <9c21> 7348 +<9c24> <9c24> 7347 +<9c25> <9c25> 7346 +<9c27> <9c27> 15340 +<9c2a> <9c2a> 15341 +<9c2d> <9c2d> 3515 +<9c2e> <9c2e> 7344 +<9c2f> <9c2f> 1207 +<9c30> <9c30> 7349 +<9c32> <9c32> 7351 +<9c36> <9c36> 15342 +<9c39> <9c39> 1485 +<9c3a> <9c3a> 7330 +<9c3b> <9c3b> 1241 +<9c3e> <9c3e> 7353 +<9c41> <9c41> 15343 +<9c46> <9c46> 7352 +<9c47> <9c47> 7350 +<9c48> <9c48> 2923 +<9c52> <9c52> 3742 +<9c53> <9c53> 15344 +<9c57> <9c57> 4002 +<9c5a> <9c5a> 7354 +<9c60> <9c60> 7355 +<9c63> <9c63> 15345 +<9c67> <9c67> 7356 +<9c6a> <9c6a> 15346 +<9c76> <9c76> 7357 +<9c77> <9c77> 15347 +<9c78> <9c78> 7358 +<9ce5> <9ce5> 3031 +<9ce7> <9ce7> 7359 +<9ce9> <9ce9> 3403 +<9ceb> <9ceb> 7364 +<9cec> <9cec> 7360 +<9cf0> <9cf0> 7361 +<9cf3> <9cf3> 3679 +<9cf4> <9cf4> 3792 +<9cf6> <9cf6> 3240 +<9d02> <9d02> 15348 +<9d03> <9d03> 7365 +<9d06> <9d06> 7366 +<9d07> <9d07> 3222 +<9d08> <9d08> 7363 +<9d09> <9d09> 7362 +<9d0e> <9d0e> 1322 +<9d12> <9d12> 7374 +<9d15> <9d15> 7373 +<9d1b> <9d1b> 1303 +<9d1f> <9d1f> 7371 +<9d23> <9d23> 7370 +<9d26> <9d26> 7368 +<9d28> <9d28> 1497 +<9d2a> <9d2a> 7367 +<9d2b> <9d2b> 2270 +<9d2c> <9d2c> 1321 +<9d3b> <9d3b> 2037 +<9d3e> <9d3e> 7377 +<9d3f> <9d3f> 7376 +<9d41> <9d41> 7375 +<9d42> <9d42> 15349 +<9d44> <9d44> 7372 +<9d46> <9d46> 7378 +<9d47> <9d47> 15350 +<9d48> <9d48> 7379 +<9d50> <9d50> 7384 +<9d51> <9d51> 7383 +<9d59> <9d59> 7385 +<9d5c> <9d5c> 1231 +<9d5d> <9d5e> 7380 +<9d60> <9d60> 2054 +<9d61> <9d61> 3781 +<9d63> <9d63> 15351 +<9d64> <9d64> 7382 +<9d69> <9d69> 15352 +endcidrange + +100 begincidrange +<9d6b> <9d6b> 8714 +<9d6c> <9d6c> 3680 +<9d6f> <9d6f> 7390 +<9d70> <9d70> 8713 +<9d72> <9d72> 7386 +<9d7a> <9d7a> 7391 +<9d7c> <9d7c> 15353 +<9d7e> <9d7e> 15354 +<9d87> <9d87> 7388 +<9d89> <9d89> 7387 +<9d8d> <9d8d> 15355 +<9d8f> <9d8f> 1842 +<9d9a> <9d9a> 7392 +<9da4> <9da4> 7393 +<9da9> <9da9> 7394 +<9dab> <9dab> 7389 +<9daf> <9daf> 7369 +<9db1> <9db1> 15356 +<9db2> <9db2> 7395 +<9db4> <9db4> 3069 +<9db8> <9db8> 7399 +<9dba> <9dba> 7400 +<9dbb> <9dbb> 7398 +<9dc1> <9dc1> 7397 +<9dc2> <9dc2> 7403 +<9dc3> <9dc3> 15357 +<9dc4> <9dc4> 7396 +<9dc6> <9dc6> 7401 +<9dc7> <9dc7> 15358 +<9dcf> <9dcf> 7402 +<9dd3> <9dd3> 7405 +<9dd6> <9dd6> 15359 +<9dd7> <9dd7> 7646 +<9dd9> <9dd9> 7404 +<9ddf> <9ddf> 15360 +<9de6> <9de6> 7407 +<9deb> <9deb> 15361 +<9ded> <9ded> 7408 +<9def> <9def> 7409 +<9df2> <9df2> 4079 +<9df4> <9df4> 15362 +<9df8> <9df8> 7406 +<9df9> <9df9> 2891 +<9dfa> <9dfa> 2141 +<9dfd> <9dfd> 7410 +<9e15> <9e15> 15363 +<9e19> <9e19> 8716 +<9e1a> <9e1b> 7411 +<9e1d> <9e1d> 15364 +<9e1e> <9e1e> 7413 +<9e75> <9e75> 7414 +<9e78> <9e78> 1896 +<9e79> <9e79> 7415 +<9e7c> <9e7c> 7677 +<9e7d> <9e7d> 7416 +<9e7f> <9e7f> 2267 +<9e81> <9e81> 7417 +<9e88> <9e88> 7418 +<9e8b> <9e8c> 7419 +<9e91> <9e91> 7423 +<9e92> <9e92> 7421 +<9e93> <9e93> 4066 +<9e95> <9e95> 7422 +<9e97> <9e97> 4023 +<9e9d> <9e9d> 7424 +<9e9f> <9e9f> 4003 +<9ea4> <9ea4> 15365 +<9ea5> <9ea5> 7425 +<9ea6> <9ea6> 3380 +<9ea8> <9ea8> 15366 +<9ea9> <9ea9> 7426 +<9eaa> <9eaa> 7428 +<9eac> <9eac> 15367 +<9ead> <9ead> 7429 +<9eb4> <9eb4> 7682 +<9eb5> <9eb5> 7797 +<9eb8> <9eb8> 7427 +<9eb9> <9eb9> 2047 +<9eba> <9eba> 3801 +<9ebb> <9ebb> 3729 +<9ebc> <9ebc> 4740 +<9ebe> <9ebe> 5375 +<9ebf> <9ebf> 3753 +<9ec3> <9ec3> 13323 +<9ec4> <9ec4> 1323 +<9ecc> <9ecc> 7431 +<9ecd> <9ecd> 1642 +<9ece> <9ed0> 7432 +<9ed1> <9ed1> 8717 +<9ed2> <9ed2> 2055 +<9ed4> <9ed4> 7435 +<9ed8> <9ed8> 5645 +<9ed9> <9ed9> 3815 +<9edb> <9edb> 2883 +<9edc> <9edc> 7436 +<9edd> <9edd> 7438 +<9ede> <9ede> 7437 +<9ee0> <9ee0> 7439 +<9ee5> <9ee5> 7440 +<9ee7> <9ee7> 15368 +endcidrange + +100 begincidrange +<9ee8> <9ee8> 7441 +<9eee> <9eee> 15369 +<9eef> <9eef> 7442 +<9ef4> <9ef4> 7443 +<9ef6> <9ef7> 7444 +<9ef9> <9ef9> 7446 +<9efb> <9efd> 7447 +<9f07> <9f08> 7450 +<9f0e> <9f0e> 3102 +<9f10> <9f10> 15370 +<9f12> <9f12> 15371 +<9f13> <9f13> 1937 +<9f15> <9f15> 7453 +<9f17> <9f17> 15372 +<9f19> <9f19> 15373 +<9f20> <9f20> 2767 +<9f21> <9f21> 7454 +<9f2c> <9f2c> 7455 +<9f2f> <9f2f> 15374 +<9f37> <9f37> 15375 +<9f39> <9f39> 15376 +<9f3b> <9f3b> 3475 +<9f3e> <9f3e> 7456 +<9f41> <9f41> 15377 +<9f45> <9f45> 15378 +<9f4a> <9f4a> 7457 +<9f4b> <9f4b> 5898 +<9f4e> <9f4e> 6779 +<9f4f> <9f4f> 7174 +<9f52> <9f52> 7458 +<9f54> <9f54> 7459 +<9f57> <9f57> 15379 +<9f5f> <9f61> 7461 +<9f62> <9f62> 4024 +<9f63> <9f63> 7460 +<9f66> <9f67> 7464 +<9f68> <9f68> 15380 +<9f6a> <9f6a> 7467 +<9f6c> <9f6c> 7466 +<9f71> <9f71> 15381 +<9f72> <9f72> 7469 +<9f75> <9f75> 15382 +<9f76> <9f76> 7470 +<9f77> <9f77> 7468 +<9f8d> <9f8d> 3966 +<9f90> <9f90> 15383 +<9f94> <9f94> 15384 +<9f95> <9f95> 7471 +<9f9c> <9f9c> 7472 +<9f9d> <9f9d> 5927 +<9fa0> <9fa0> 7473 +<9fa2> <9fa2> 15385 + 8489 + 8686 + 8410 + 8421 + 8443 + 8481 + 8497 + 8499 + 8542 + 8548 + 8571 + 8579 + 8583 + 8587 + 8590 + 8599 + 8610 + 8612 + 8622 + 8630 + 8632 + 8636 + 8664 + 8671 + 8687 + 8699 + 8702 + 8715 + 9358 + 112 + 9359 + 7898 + 7892 + 7890 + 7899 + 7905 + 7901 + 7915 + 7909 + 7907 + 7911 + 642 + 8007 + 716 + 712 + 715 + 717 + 8006 +endcidrange + +33 begincidrange + 674 + 718 + 692 + 636 + 693 + 637 + 663 + 780 + 639 + 699 + 697 + 700 + 641 + 719 + 790 + 678 + 664 + 679 + 648 + 650 + 646 + 816 + 680 + 667 + 681 + 665 + 327 + 713 + 751 + 649 + 8005 + 711 + 323 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-HW-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-HW-H new file mode 100644 index 00000000000..641bcc7bb7b --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-HW-H @@ -0,0 +1,81 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniJIS-UCS2-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniJIS-UCS2-H) +%%BeginResource: CMap (UniJIS-UCS2-HW-H) +%%Title: (UniJIS-UCS2-HW-H Adobe Japan1 4) +%%Version: 12.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniJIS-UCS2-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 4 def +end def + +/CMapName /UniJIS-UCS2-HW-H def +/CMapVersion 12.002 def +/CMapType 1 def + +/XUID [1 10 25448] def + +/WMode 0 def + +4 begincidrange +<0020> <005b> 231 +<005c> <005c> 8719 +<005d> <007e> 292 +<00a5> <00a5> 291 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-HW-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-HW-V new file mode 100644 index 00000000000..d3ad59cf5a8 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-HW-V @@ -0,0 +1,279 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniJIS-UCS2-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniJIS-UCS2-H) +%%BeginResource: CMap (UniJIS-UCS2-HW-V) +%%Title: (UniJIS-UCS2-HW-V Adobe Japan1 4) +%%Version: 12.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniJIS-UCS2-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 4 def +end def + +/CMapName /UniJIS-UCS2-HW-V def +/CMapVersion 12.003 def +/CMapType 1 def + +/XUID [1 10 25449] def + +/WMode 1 def + +100 begincidrange +<0020> <005b> 231 +<005c> <005c> 8719 +<005d> <007e> 292 +<00a5> <00a5> 291 +<00b0> <00b0> 8269 +<2010> <2010> 7893 +<2015> <2015> 7892 +<2016> <2016> 7895 +<2018> <2019> 8281 +<201c> <201d> 8279 +<2025> <2025> 7898 +<2026> <2026> 7897 +<2032> <2032> 8273 +<2033> <2033> 8283 +<2190> <2190> 738 +<2191> <2191> 736 +<2192> <2192> 739 +<2193> <2193> 737 +<2195> <2195> 12214 +<21c4> <21c4> 8311 +<21c5> <21c5> 8310 +<21c6> <21c6> 8312 +<21e6> <21e6> 8012 +<21e7> <21e7> 8014 +<21e8> <21e8> 8011 +<21e9> <21e9> 8013 +<2225> <2225> 7895 +<223c> <223c> 7894 +<22ef> <22ef> 7897 +<2500> <2501> 7481 +<2502> <2503> 7479 +<2504> <2505> 7485 +<2506> <2507> 7483 +<2508> <2509> 7489 +<250a> <250b> 7487 +<250c> <250c> 7495 +<250d> <250d> 7497 +<250e> <250e> 7496 +<250f> <250f> 7498 +<2510> <2510> 7503 +<2511> <2511> 7505 +<2512> <2512> 7504 +<2513> <2513> 7506 +<2514> <2514> 7491 +<2515> <2515> 7493 +<2516> <2516> 7492 +<2517> <2517> 7494 +<2518> <2518> 7499 +<2519> <2519> 7501 +<251a> <251a> 7500 +<251b> <251b> 7502 +<251c> <251c> 7523 +<251d> <251d> 7527 +<251e> <251e> 7525 +<251f> <251f> 7524 +<2520> <2520> 7526 +<2521> <2521> 7529 +<2522> <2522> 7528 +<2523> <2524> 7530 +<2525> <2525> 7535 +<2526> <2526> 7533 +<2527> <2527> 7532 +<2528> <2528> 7534 +<2529> <2529> 7537 +<252a> <252a> 7536 +<252b> <252b> 7538 +<252c> <252c> 7515 +<252d> <252f> 7517 +<2530> <2530> 7516 +<2531> <2533> 7520 +<2534> <2534> 7507 +<2535> <2537> 7509 +<2538> <2538> 7508 +<2539> <253b> 7512 +<253d> <253f> 7543 +<2540> <2540> 7541 +<2541> <2541> 7540 +<2542> <2542> 7542 +<2543> <2543> 7547 +<2544> <2544> 7549 +<2545> <2545> 7546 +<2546> <2546> 7548 +<2547> <2547> 7553 +<2548> <2548> 7552 +<2549> <254a> 7550 +<261c> <261c> 8221 +<261d> <261d> 8219 +<261e> <261e> 8222 +<261f> <261f> 8220 +<2702> <2702> 12178 +<27a1> <27a1> 8209 +<3001> <3002> 7887 +<3008> <3011> 7907 +<3013> <3013> 8270 +<3014> <3015> 7901 +<301c> <301c> 7894 +<301d> <301d> 7956 +<301f> <301f> 7957 +<3041> <3041> 7918 +<3043> <3043> 7919 +endcidrange + +99 begincidrange +<3045> <3045> 7920 +<3047> <3047> 7921 +<3049> <3049> 7922 +<3063> <3063> 7923 +<3083> <3083> 7924 +<3085> <3085> 7925 +<3087> <3087> 7926 +<308e> <308e> 7927 +<309b> <309b> 8272 +<309c> <309c> 8271 +<30a1> <30a1> 7928 +<30a3> <30a3> 7929 +<30a5> <30a5> 7930 +<30a7> <30a7> 7931 +<30a9> <30a9> 7932 +<30c3> <30c3> 7933 +<30e3> <30e3> 7934 +<30e5> <30e5> 7935 +<30e7> <30e7> 7936 +<30ee> <30ee> 7937 +<30f5> <30f6> 7938 +<30fc> <30fc> 7891 +<3300> <3300> 8350 +<3301> <3302> 11958 +<3303> <3303> 8338 +<3304> <3304> 11960 +<3305> <3305> 8333 +<3306> <3306> 11961 +<3307> <3307> 11965 +<3308> <3308> 11963 +<3309> <3309> 11968 +<330a> <330a> 11966 +<330b> <330b> 11970 +<330c> <330c> 11972 +<330d> <330d> 7950 +<330e> <3313> 11973 +<3314> <3314> 7941 +<3315> <3315> 8340 +<3316> <3316> 8330 +<3317> <3317> 11980 +<3318> <3318> 8339 +<3319> <3319> 11982 +<331a> <331d> 11984 +<331e> <331e> 8353 +<331f> <3321> 11988 +<3322> <3322> 8329 +<3323> <3323> 8348 +<3324> <3324> 11991 +<3325> <3325> 11993 +<3326> <3326> 7951 +<3327> <3327> 7945 +<3328> <3329> 11996 +<332a> <332a> 8356 +<332b> <332b> 7953 +<332d> <332d> 11999 +<332e> <3330> 12002 +<3331> <3331> 8358 +<3332> <3332> 12005 +<3333> <3333> 8334 +<3334> <3335> 12008 +<3336> <3336> 7947 +<3337> <3337> 12014 +<3338> <3338> 12016 +<3339> <3339> 8343 +<333a> <333a> 12017 +<333b> <333b> 8349 +<333c> <333c> 12010 +<333d> <333d> 12018 +<333e> <3340> 12020 +<3341> <3341> 12019 +<3342> <3342> 8347 +<3343> <3346> 12023 +<3347> <3347> 8357 +<3348> <3348> 12027 +<3349> <3349> 7940 +<334a> <334a> 7954 +<334b> <334c> 12028 +<334d> <334d> 7943 +<334e> <334e> 8337 +<334f> <3350> 12030 +<3351> <3351> 7948 +<3352> <3352> 12034 +<3353> <3353> 12038 +<3354> <3354> 12035 +<3355> <3356> 12039 +<3357> <3357> 8344 +<337f> <337f> 8324 + 7899 + 8268 + 8274 + 7917 + 7903 + 7904 + 7890 + 7905 + 7896 + 7906 + 7894 + 7889 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-V new file mode 100644 index 00000000000..4e142612877 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UCS2-V @@ -0,0 +1,275 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniJIS-UCS2-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniJIS-UCS2-H) +%%BeginResource: CMap (UniJIS-UCS2-V) +%%Title: (UniJIS-UCS2-V Adobe Japan1 4) +%%Version: 12.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniJIS-UCS2-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 4 def +end def + +/CMapName /UniJIS-UCS2-V def +/CMapVersion 12.003 def +/CMapType 1 def + +/XUID [1 10 25357] def + +/WMode 1 def + +100 begincidrange +<00b0> <00b0> 8269 +<2010> <2010> 7893 +<2015> <2015> 7892 +<2016> <2016> 7895 +<2018> <2019> 8281 +<201c> <201d> 8279 +<2025> <2025> 7898 +<2026> <2026> 7897 +<2032> <2032> 8273 +<2033> <2033> 8283 +<2190> <2190> 738 +<2191> <2191> 736 +<2192> <2192> 739 +<2193> <2193> 737 +<2195> <2195> 12214 +<21c4> <21c4> 8311 +<21c5> <21c5> 8310 +<21c6> <21c6> 8312 +<21e6> <21e6> 8012 +<21e7> <21e7> 8014 +<21e8> <21e8> 8011 +<21e9> <21e9> 8013 +<2225> <2225> 7895 +<223c> <223c> 7894 +<22ef> <22ef> 7897 +<2500> <2501> 7481 +<2502> <2503> 7479 +<2504> <2505> 7485 +<2506> <2507> 7483 +<2508> <2509> 7489 +<250a> <250b> 7487 +<250c> <250c> 7495 +<250d> <250d> 7497 +<250e> <250e> 7496 +<250f> <250f> 7498 +<2510> <2510> 7503 +<2511> <2511> 7505 +<2512> <2512> 7504 +<2513> <2513> 7506 +<2514> <2514> 7491 +<2515> <2515> 7493 +<2516> <2516> 7492 +<2517> <2517> 7494 +<2518> <2518> 7499 +<2519> <2519> 7501 +<251a> <251a> 7500 +<251b> <251b> 7502 +<251c> <251c> 7523 +<251d> <251d> 7527 +<251e> <251e> 7525 +<251f> <251f> 7524 +<2520> <2520> 7526 +<2521> <2521> 7529 +<2522> <2522> 7528 +<2523> <2524> 7530 +<2525> <2525> 7535 +<2526> <2526> 7533 +<2527> <2527> 7532 +<2528> <2528> 7534 +<2529> <2529> 7537 +<252a> <252a> 7536 +<252b> <252b> 7538 +<252c> <252c> 7515 +<252d> <252f> 7517 +<2530> <2530> 7516 +<2531> <2533> 7520 +<2534> <2534> 7507 +<2535> <2537> 7509 +<2538> <2538> 7508 +<2539> <253b> 7512 +<253d> <253f> 7543 +<2540> <2540> 7541 +<2541> <2541> 7540 +<2542> <2542> 7542 +<2543> <2543> 7547 +<2544> <2544> 7549 +<2545> <2545> 7546 +<2546> <2546> 7548 +<2547> <2547> 7553 +<2548> <2548> 7552 +<2549> <254a> 7550 +<261c> <261c> 8221 +<261d> <261d> 8219 +<261e> <261e> 8222 +<261f> <261f> 8220 +<2702> <2702> 12178 +<27a1> <27a1> 8209 +<3001> <3002> 7887 +<3008> <3011> 7907 +<3013> <3013> 8270 +<3014> <3015> 7901 +<301c> <301c> 7894 +<301d> <301d> 7956 +<301f> <301f> 7957 +<3041> <3041> 7918 +<3043> <3043> 7919 +<3045> <3045> 7920 +<3047> <3047> 7921 +<3049> <3049> 7922 +<3063> <3063> 7923 +endcidrange + +95 begincidrange +<3083> <3083> 7924 +<3085> <3085> 7925 +<3087> <3087> 7926 +<308e> <308e> 7927 +<309b> <309b> 8272 +<309c> <309c> 8271 +<30a1> <30a1> 7928 +<30a3> <30a3> 7929 +<30a5> <30a5> 7930 +<30a7> <30a7> 7931 +<30a9> <30a9> 7932 +<30c3> <30c3> 7933 +<30e3> <30e3> 7934 +<30e5> <30e5> 7935 +<30e7> <30e7> 7936 +<30ee> <30ee> 7937 +<30f5> <30f6> 7938 +<30fc> <30fc> 7891 +<3300> <3300> 8350 +<3301> <3302> 11958 +<3303> <3303> 8338 +<3304> <3304> 11960 +<3305> <3305> 8333 +<3306> <3306> 11961 +<3307> <3307> 11965 +<3308> <3308> 11963 +<3309> <3309> 11968 +<330a> <330a> 11966 +<330b> <330b> 11970 +<330c> <330c> 11972 +<330d> <330d> 7950 +<330e> <3313> 11973 +<3314> <3314> 7941 +<3315> <3315> 8340 +<3316> <3316> 8330 +<3317> <3317> 11980 +<3318> <3318> 8339 +<3319> <3319> 11982 +<331a> <331d> 11984 +<331e> <331e> 8353 +<331f> <3321> 11988 +<3322> <3322> 8329 +<3323> <3323> 8348 +<3324> <3324> 11991 +<3325> <3325> 11993 +<3326> <3326> 7951 +<3327> <3327> 7945 +<3328> <3329> 11996 +<332a> <332a> 8356 +<332b> <332b> 7953 +<332d> <332d> 11999 +<332e> <3330> 12002 +<3331> <3331> 8358 +<3332> <3332> 12005 +<3333> <3333> 8334 +<3334> <3335> 12008 +<3336> <3336> 7947 +<3337> <3337> 12014 +<3338> <3338> 12016 +<3339> <3339> 8343 +<333a> <333a> 12017 +<333b> <333b> 8349 +<333c> <333c> 12010 +<333d> <333d> 12018 +<333e> <3340> 12020 +<3341> <3341> 12019 +<3342> <3342> 8347 +<3343> <3346> 12023 +<3347> <3347> 8357 +<3348> <3348> 12027 +<3349> <3349> 7940 +<334a> <334a> 7954 +<334b> <334c> 12028 +<334d> <334d> 7943 +<334e> <334e> 8337 +<334f> <3350> 12030 +<3351> <3351> 7948 +<3352> <3352> 12034 +<3353> <3353> 12038 +<3354> <3354> 12035 +<3355> <3356> 12039 +<3357> <3357> 8344 +<337f> <337f> 8324 + 7899 + 8268 + 8274 + 7917 + 7903 + 7904 + 7890 + 7905 + 7896 + 7906 + 7894 + 7889 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UTF16-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UTF16-H new file mode 100644 index 00000000000..ab42c2307e8 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UTF16-H @@ -0,0 +1,14445 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniJIS-UTF16-H) +%%Title: (UniJIS-UTF16-H Adobe Japan1 6) +%%Version: 1.013 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2010 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 6 def +end def + +/CMapName /UniJIS-UTF16-H def +/CMapVersion 1.013 def +/CMapType 1 def + +/XUID [1 10 25611] def + +/WMode 0 def + +3 begincodespacerange + <0000> + + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidchar +<005c> 97 +<007c> 99 +<007d> 94 +<007e> 100 +<00a0> 1 +<00a4> 107 +<00a5> 61 +<00a6> 93 +<00a7> 720 +<00a8> 647 +<00a9> 152 +<00aa> 140 +<00ab> 109 +<00ac> 153 +<00ad> 151 +<00ae> 154 +<00af> 129 +<00b0> 707 +<00b1> 694 +<00b4> 645 +<00b5> 159 +<00b6> 778 +<00b7> 117 +<00b8> 134 +<00b9> 160 +<00ba> 144 +<00bb> 123 +<00bf> 126 +<00c6> 139 +<00d7> 695 +<00d8> 142 +<00df> 150 +<00e6> 145 +<00f7> 696 +<00f8> 148 +<0100> 9366 +<0101> 9361 +<0102> 15756 +<0103> 15769 +<0104> 15737 +<0105> 15745 +<0106> 15758 +<0107> 15771 +<0108> 15783 +<0109> 15789 +<010a> 20333 +<010b> 20352 +<010c> 15759 +<010d> 15772 +<010e> 15761 +<010f> 15774 +<0110> 20322 +<0111> 15775 +<0112> 9369 +<0113> 9364 +<0116> 20334 +<0117> 20353 +<0118> 15760 +<0119> 15773 +<011a> 9395 +<011b> 9407 +<011c> 15784 +<011d> 15790 +<011e> 20335 +<011f> 20355 +<0120> 20337 +<0121> 20356 +<0122> 20336 +<0124> 15785 +<0125> 15791 +<0126> 20323 +<0127> 15816 +<0128> 9400 +<0129> 9412 +<012a> 9367 +<012b> 9362 +<012e> 20339 +<012f> 20357 +<0130> 20338 +<0131> 146 +<0132> 20324 +<0133> 20328 +<0134> 15786 +<0135> 15792 +<0136> 20340 +<0137> 20358 +<0138> 20329 +<0139> 15757 +<013a> 15770 +<013b> 20342 +<013c> 20360 +<013d> 15739 +<013e> 15747 +<013f> 20325 +<0140> 20330 +<0141> 141 +<0142> 147 +<0143> 15762 +<0144> 15776 +<0145> 20343 +endcidchar + +100 begincidchar +<0146> 20361 +<0147> 15763 +<0148> 15777 +<0149> 20331 +<014a> 20326 +<014b> 9436 +<014c> 9370 +<014d> 9365 +<0150> 15764 +<0151> 15778 +<0152> 143 +<0153> 149 +<0154> 15755 +<0155> 15768 +<0156> 20344 +<0157> 20362 +<0158> 15765 +<0159> 15779 +<015a> 15740 +<015b> 15748 +<015c> 15787 +<015d> 15793 +<015e> 15741 +<015f> 15750 +<0160> 223 +<0161> 227 +<0162> 15767 +<0163> 15781 +<0164> 15742 +<0165> 15751 +<0166> 20327 +<0167> 20332 +<0168> 9405 +<0169> 9417 +<016a> 9368 +<016b> 9363 +<016c> 15788 +<016d> 15794 +<016e> 9404 +<016f> 9416 +<0170> 15766 +<0171> 15780 +<0172> 20345 +<0173> 20363 +<0174> 20350 +<0175> 20364 +<0176> 20351 +<0177> 20365 +<0178> 224 +<0179> 15743 +<017a> 15752 +<017b> 15744 +<017c> 15754 +<017d> 225 +<017e> 229 +<0192> 105 +<0193> 15826 +<01c2> 15821 +<01cd> 9394 +<01ce> 9406 +<01cf> 9398 +<01d0> 9410 +<01d1> 9401 +<01d2> 9413 +<01d3> 9403 +<01d4> 9415 +<01d5> 20349 +<01d6> 15733 +<01d7> 20346 +<01d8> 15734 +<01d9> 20348 +<01da> 15735 +<01db> 20347 +<01dc> 15736 +<01f5> 20354 +<01fd> 9421 +<0237> 9435 +<0250> 15832 +<0251> 9418 +<0252> 15836 +<0253> 15822 +<0254> 9423 +<0255> 15841 +<0256> 15802 +<0257> 15823 +<0258> 15829 +<0259> 9426 +<025a> 9429 +<025b> 9432 +<025c> 15830 +<025e> 15831 +<025f> 15809 +<0260> 15825 +<0261> 15813 +<0264> 15835 +<0265> 15838 +<0266> 15819 +<0267> 15844 +<0268> 15827 +<026a> 15885 +endcidchar + +100 begincidchar +<026c> 15798 +<026d> 15808 +<026e> 15799 +<026f> 15833 +<0270> 15814 +<0271> 15795 +<0272> 15810 +<0273> 15803 +<0274> 15886 +<0275> 9437 +<0276> 15887 +<0278> 15888 +<0279> 15800 +<027a> 15843 +<027b> 15807 +<027d> 15804 +<027e> 15797 +<0280> 15889 +<0281> 15815 +<0282> 15805 +<0283> 9442 +<0284> 15824 +<0288> 15801 +<0289> 15828 +<028a> 15834 +<028b> 15796 +<028c> 9438 +<028d> 15837 +<028e> 15812 +<028f> 15890 +<0290> 15806 +<0291> 15842 +<0292> 9441 +<0294> 15818 +<0295> 15817 +<0298> 15820 +<0299> 15891 +<029c> 15892 +<029d> 15811 +<029f> 15893 +<02a1> 15840 +<02a2> 15839 +<02b0> 15894 +<02b2> 15895 +<02b7> 15896 +<02bb> 98 +<02bc> 96 +<02c1> 15897 +<02c6> 128 +<02c7> 15749 +<02c8> 15846 +<02cc> 15847 +<02d0> 9443 +<02d1> 15848 +<02d8> 15738 +<02d9> 15782 +<02da> 133 +<02db> 15746 +<02dc> 95 +<02dd> 15753 +<02de> 15867 +<0300> 65 +<0303> 95 +<0304> 129 +<0305> 226 +<030a> 133 +<030b> 135 +<030c> 137 +<030f> 15850 +<031a> 15879 +<031c> 15861 +<0324> 15868 +<0325> 15858 +<0327> 134 +<0328> 136 +<0329> 15865 +<032a> 15876 +<032c> 15859 +<032f> 15866 +<0330> 15869 +<0332> 64 +<0334> 15871 +<0336> 138 +<0339> 15860 +<033c> 15870 +<033d> 15864 +<0361> 15845 +<0386> 20427 +<038c> 20432 +<038e> 20433 +<038f> 20435 +<0390> 20441 +<03aa> 20431 +<03ab> 20434 +<03b0> 20445 +<03c2> 16222 +<03ca> 20440 +<03cb> 20444 +<03ce> 20446 +<03d0> 12090 +endcidchar + +100 begincidchar +<03d1> 12096 +<03d5> 12094 +<03db> 12095 +<0401> 1065 +<0451> 1098 +<1ebc> 9397 +<1ebd> 9409 +<1f70> 9420 +<1f71> 9419 +<1f72> 9434 +<1f73> 9433 +<2002> 231 +<2003> 633 +<2010> 662 +<2011> 14 +<2012> 114 +<2013> 114 +<2014> 138 +<2015> 661 +<2016> 666 +<2018> 98 +<2019> 96 +<201a> 120 +<201c> 108 +<201d> 122 +<201e> 121 +<2022> 119 +<2025> 669 +<2026> 668 +<2030> 772 +<203b> 734 +<203c> 12111 +<203e> 226 +<203f> 15849 +<2042> 16282 +<2044> 104 +<2049> 12112 +<2051> 16281 +<205a> 7898 +<205d> 7897 +<2070> 9377 +<20ac> 9354 +<20dd> 16328 +<20de> 11035 +<2100> 11855 +<2103> 710 +<2105> 11859 +<2109> 8305 +<210a> 8304 +<210f> 12092 +<2113> 8025 +<2116> 7610 +<2121> 8055 +<2122> 228 +<2126> 9355 +<2127> 15515 +<212b> 771 +<212e> 20366 +<2135> 12089 +<213b> 8307 +<2150> 9790 +<2151> 9800 +<2152> 9806 +<2155> 15727 +<217f> 8303 +<2189> 9780 +<2192> 736 +<2193> 739 +<2194> 12201 +<21c6> 8309 +<21cb> 12207 +<21cc> 12206 +<21d0> 12200 +<21d2> 752 +<21d4> 753 +<21e6> 8013 +<21e7> 8012 +<21e8> 8014 +<21e9> 8011 +<2200> 754 +<2202> 759 +<2203> 755 +<2205> 12184 +<2206> 20367 +<2207> 760 +<2208> 741 +<2209> 15476 +<220a> 12091 +<220b> 742 +<220f> 20368 +<2211> 7625 +<2212> 693 +<2213> 12118 +<2219> 117 +<221a> 765 +<221d> 767 +<221e> 703 +<221f> 7629 +<2220> 756 +<2229> 748 +endcidchar + +100 begincidchar +<222a> 747 +<222d> 8195 +<222e> 7624 +<2234> 704 +<2235> 768 +<223c> 100 +<223d> 766 +<2243> 12120 +<2245> 15507 +<2248> 15508 +<2252> 762 +<2260> 698 +<2261> 761 +<2262> 15505 +<2295> 12188 +<2296> 12186 +<2297> 12189 +<2298> 12187 +<229e> 15906 +<22a0> 12185 +<22a5> 757 +<22bf> 7630 +<2307> 12219 +<2312> 758 +<2318> 15728 +<239b> 12143 +<239c> 12167 +<239f> 12167 +<23a0> 12146 +<23a1> 12151 +<23a2> 12167 +<23a5> 12167 +<23a6> 12154 +<23aa> 12167 +<23ce> 16273 +<2423> 16272 +<24ea> 8224 +<24ff> 10503 +<2550> 8251 +<255e> 8252 +<2561> 8254 +<256a> 8253 +<256f> 8250 +<2570> 8249 +<2589> 8244 +<258a> 8243 +<258b> 8242 +<258c> 8241 +<258d> 8240 +<258e> 8239 +<258f> 8238 +<25a0> 729 +<25a1> 728 +<25a2> 8015 +<25aa> 12239 +<25ab> 12237 +<25b1> 16235 +<25b2> 731 +<25b3> 730 +<25b6> 12195 +<25b7> 8010 +<25bc> 733 +<25bd> 732 +<25c0> 12194 +<25c1> 8009 +<25c6> 727 +<25c7> 726 +<25c9> 8210 +<25ca> 20371 +<25cb> 723 +<25cc> 10502 +<25ce> 725 +<25cf> 724 +<25e4> 8258 +<25e5> 8257 +<25e6> 12254 +<25ef> 779 +<2605> 722 +<2606> 721 +<260e> 8056 +<261e> 8219 +<261f> 8222 +<2640> 706 +<2642> 705 +<2660> 8211 +<2661> 8017 +<2662> 8019 +<2663> 8213 +<2664> 8018 +<2665> 8212 +<2666> 8214 +<2667> 8016 +<266a> 775 +<266b> 16200 +<266c> 12100 +<266d> 774 +<266e> 16199 +<266f> 773 +<26a0> 12192 +<26bd> 20957 +endcidchar + +100 begincidchar +<26be> 12097 +<2702> 12176 +<2713> 16270 +<271a> 12241 +<273f> 12229 +<2740> 12228 +<2756> 12259 +<277f> 10514 +<27a1> 8206 +<29bf> 16203 +<2b1a> 11036 +<2e83> 14305 +<2e85> 13856 +<2e87> 14105 +<2e89> 14356 +<2e8b> 14110 +<2e8e> 4209 +<2e8f> 14476 +<2e90> 4646 +<2e92> 3762 +<2e93> 4739 +<2e94> 4779 +<2e95> 15391 +<2e96> 14530 +<2e97> 13852 +<2e98> 14561 +<2e99> 5059 +<2e9b> 5089 +<2e9e> 17893 +<2e9f> 3644 +<2ea0> 3773 +<2ea3> 14749 +<2ea4> 15398 +<2ea6> 14157 +<2ea8> 14780 +<2ea9> 13729 +<2eaa> 13995 +<2eab> 14999 +<2eac> 19130 +<2ead> 14905 +<2eae> 13922 +<2eb1> 15000 +<2eb2> 14999 +<2eb3> 14189 +<2eb7> 14078 +<2eb9> 14099 +<2ebc> 13747 +<2ebd> 13646 +<2ec1> 1931 +<2ec2> 15114 +<2ec3> 13870 +<2ec4> 2658 +<2ec6> 13682 +<2eca> 13898 +<2ecc> 15403 +<2ecd> 15184 +<2ecf> 15262 +<2ed1> 3029 +<2ed2> 15255 +<2ed6> 15262 +<2ed7> 13645 +<2ed8> 2664 +<2edd> 13847 +<2ede> 13849 +<2edf> 13848 +<2ee4> 1614 +<2ee8> 3380 +<2ee9> 1323 +<2eeb> 2666 +<2eed> 2243 +<2eef> 3965 +<2ef2> 1615 +<2f00> 1200 +<2f01> 8371 +<2f02> 4095 +<2f03> 4097 +<2f04> 1333 +<2f05> 4102 +<2f06> 3275 +<2f07> 4110 +<2f08> 2579 +<2f09> 4208 +<2f0a> 3286 +<2f0b> 3392 +<2f0c> 4219 +<2f0d> 4227 +<2f0e> 4233 +<2f0f> 4243 +<2f10> 4248 +<2f11> 3163 +<2f12> 3991 +<2f13> 4294 +<2f16> 4307 +<2f17> 2375 +<2f18> 3708 +<2f19> 4316 +<2f1a> 4321 +<2f1b> 4328 +<2f1c> 3746 +<2f1d> 1969 +endcidchar + +100 begincidchar +<2f1e> 4459 +<2f1f> 3156 +<2f20> 2204 +<2f23> 3878 +<2f24> 2887 +<2f25> 2433 +<2f26> 2208 +<2f27> 4622 +<2f28> 2631 +<2f29> 2454 +<2f2a> 4646 +<2f2b> 4648 +<2f2c> 4658 +<2f2d> 2177 +<2f2e> 4716 +<2f2f> 1979 +<2f30> 1918 +<2f31> 1738 +<2f32> 1519 +<2f33> 4739 +<2f34> 4741 +<2f35> 4761 +<2f36> 4763 +<2f37> 4768 +<2f38> 1655 +<2f39> 14521 +<2f3a> 4783 +<2f3b> 4785 +<2f3c> 2554 +<2f3d> 4930 +<2f3e> 1921 +<2f3f> 2326 +<2f40> 2215 +<2f41> 5058 +<2f42> 3592 +<2f43> 3143 +<2f44> 1740 +<2f45> 3661 +<2f46> 5088 +<2f47> 3284 +<2f48> 5132 +<2f49> 1860 +<2f4a> 3814 +<2f4b> 1853 +<2f4c> 2221 +<2f4d> 5349 +<2f4e> 5364 +<2f4f> 5368 +<2f50> 3450 +<2f51> 3807 +<2f52> 2223 +<2f53> 5378 +<2f54> 2603 +<2f55> 1360 +<2f56> 3066 +<2f57> 3541 +<2f58> 5604 +<2f59> 5606 +<2f5a> 3618 +<2f5b> 1383 +<2f5c> 1671 +<2f5d> 1880 +<2f5e> 1904 +<2f5f> 1732 +<2f60> 1245 +<2f61> 1504 +<2f62> 1537 +<2f63> 2652 +<2f64> 3899 +<2f65> 3134 +<2f66> 3479 +<2f67> 14848 +<2f68> 5783 +<2f69> 3368 +<2f6a> 3453 +<2f6b> 2172 +<2f6c> 3816 +<2f6d> 3779 +<2f6e> 3836 +<2f6f> 2676 +<2f70> 2260 +<2f71> 14913 +<2f72> 1363 +<2f73> 1856 +<2f74> 3953 +<2f75> 2971 +<2f76> 3606 +<2f77> 2227 +<2f78> 1544 +<2f79> 6163 +<2f7a> 3901 +<2f7b> 1227 +<2f7c> 4061 +<2f7d> 2261 +<2f7e> 6205 +<2f7f> 2262 +<2f80> 6227 +<2f81> 3281 +<2f82> 2569 +<2f83> 2263 +endcidchar + +100 begincidchar +<2f84> 2232 +<2f85> 1235 +<2f86> 2697 +<2f87> 2726 +<2f88> 2360 +<2f89> 2081 +<2f8a> 2541 +<2f8b> 6322 +<2f8c> 6479 +<2f8d> 2988 +<2f8e> 1858 +<2f8f> 2022 +<2f90> 1189 +<2f91> 6635 +<2f92> 1887 +<2f93> 1455 +<2f94> 1908 +<2f95> 2921 +<2f96> 3198 +<2f97> 6742 +<2f98> 6745 +<2f99> 1419 +<2f9a> 2682 +<2f9b> 2808 +<2f9c> 2829 +<2f9d> 2574 +<2f9e> 2306 +<2f9f> 2575 +<2fa0> 2914 +<2fa1> 15183 +<2fa2> 3874 +<2fa3> 3243 +<2fa4> 3428 +<2fa5> 3948 +<2fa6> 1754 +<2fa7> 3029 +<2fa8> 3827 +<2fa9> 3550 +<2faa> 7113 +<2fab> 7115 +<2fac> 1229 +<2fad> 8695 +<2fae> 3463 +<2faf> 3800 +<2fb0> 1461 +<2fb1> 7171 +<2fb2> 7173 +<2fb3> 1339 +<2fb4> 3607 +<2fb5> 3561 +<2fb6> 3464 +<2fb7> 2543 +<2fb8> 2335 +<2fb9> 2035 +<2fba> 3333 +<2fbb> 2062 +<2fbc> 2036 +<2fbd> 7276 +<2fbe> 7293 +<2fc1> 1614 +<2fc2> 1685 +<2fc3> 3031 +<2fc4> 7414 +<2fc5> 2267 +<2fc6> 7425 +<2fc7> 3729 +<2fc8> 13323 +<2fc9> 1642 +<2fca> 2055 +<2fcb> 7446 +<2fcc> 7449 +<2fcd> 3102 +<2fce> 1937 +<2fcf> 2767 +<2fd0> 3475 +<2fd3> 3966 +<3003> 655 +<3004> 8308 +<3012> 735 +<3013> 740 +<301c> 665 +<301d> 7608 +<301f> 7609 +<3020> 8058 +<3030> 12218 +<3036> 8057 +<303b> 12106 +<303c> 16194 +<303d> 12179 +<309f> 12181 +<30a0> 16205 +<30fb> 638 +<30fc> 660 +<30ff> 16195 +<3230> 8197 +<3233> 8143 +<3234> 8141 +<3235> 8148 +<3236> 8147 +<3237> 8204 +endcidchar + +100 begincidchar +<3238> 8142 +<3239> 7620 +<323a> 8151 +<323b> 8149 +<323c> 8144 +<323d> 8139 +<323e> 8146 +<323f> 8140 +<3240> 8150 +<3241> 8205 +<3242> 8145 +<3243> 8138 +<3244> 10498 +<3251> 8091 +<3290> 10471 +<3291> 8161 +<3292> 8160 +<3293> 8162 +<3294> 8156 +<3295> 10495 +<3296> 8165 +<3297> 10492 +<3298> 8158 +<3299> 8223 +<329a> 10489 +<329b> 10488 +<329c> 10494 +<329d> 8319 +<329e> 8191 +<329f> 10479 +<32a2> 10491 +<32a3> 10490 +<32a9> 8154 +<32aa> 8157 +<32ab> 8159 +<32ac> 8163 +<32ad> 8153 +<32ae> 8164 +<32af> 8155 +<32b0> 8152 +<3300> 8048 +<3303> 8042 +<3304> 11876 +<3305> 8183 +<3306> 11877 +<3307> 11881 +<3308> 11879 +<3309> 11884 +<330a> 11882 +<330b> 11886 +<330c> 11888 +<330d> 7595 +<3314> 7586 +<3315> 8041 +<3316> 8039 +<3317> 11896 +<3318> 8040 +<3319> 11898 +<331e> 8051 +<3322> 8038 +<3323> 8043 +<3324> 11907 +<3325> 11909 +<3326> 7596 +<3327> 7590 +<332a> 8052 +<332b> 7598 +<332d> 11915 +<3331> 8049 +<3332> 11921 +<3333> 8327 +<3336> 7592 +<3337> 11930 +<3338> 11932 +<3339> 8046 +<333a> 11933 +<333b> 8047 +<333c> 11926 +<333d> 11934 +<3341> 11935 +<3342> 8045 +<3347> 8050 +<3348> 11943 +<3349> 7585 +<334a> 7599 +<334d> 7588 +<334e> 8328 +<3351> 7593 +<3352> 11950 +<3353> 11954 +<3354> 11951 +<3357> 8044 +<3371> 11861 +<337b> 8323 +<337c> 7623 +<337d> 7622 +<337e> 7621 +<337f> 8054 +<338d> 11864 +<3390> 8035 +endcidchar + +100 begincidchar +<3396> 8037 +<3397> 8024 +<3398> 8026 +<339b> 11865 +<339f> 8186 +<33a0> 8020 +<33a1> 7607 +<33a2> 8021 +<33a3> 8187 +<33a6> 8188 +<33b0> 8030 +<33b1> 8029 +<33b2> 8028 +<33b3> 8027 +<33c2> 11856 +<33c4> 7606 +<33c8> 8194 +<33cb> 8034 +<33cc> 8182 +<33cd> 7611 +<33d4> 8036 +<33da> 11851 +<3402> 13698 +<3405> 15387 +<3406> 17242 +<3427> 13910 +<342c> 17246 +<342e> 14216 +<3468> 14047 +<346a> 17269 +<3488> 15442 +<3492> 17294 +<34b5> 16793 +<34bc> 17303 +<34c1> 18384 +<34c7> 17307 +<34db> 15425 +<351f> 13865 +<353e> 14110 +<3563> 17344 +<356e> 17348 +<35a6> 17369 +<35a8> 17371 +<35c5> 17377 +<35da> 17386 +<35de> 20067 +<35f4> 17395 +<3605> 17402 +<3614> 19131 +<364a> 17441 +<3691> 17473 +<3696> 17477 +<3699> 17475 +<36cf> 17494 +<376b> 17533 +<376c> 17532 +<3775> 17536 +<378d> 13850 +<37c1> 17550 +<37e2> 14123 +<37e8> 17570 +<37f4> 17573 +<37fd> 17576 +<3800> 17578 +<382f> 17588 +<3836> 17589 +<3840> 17590 +<385c> 17594 +<3861> 17596 +<38a1> 20171 +<38ad> 19132 +<38fa> 13852 +<3917> 17625 +<391a> 17628 +<396f> 17643 +<39a4> 20122 +<39b8> 20123 +<3a5c> 20127 +<3a6e> 17713 +<3a73> 17716 +<3a85> 20142 +<3ac4> 20135 +<3acb> 20136 +<3ad6> 17731 +<3ad7> 17758 +<3aea> 17741 +<3af3> 15424 +<3b0e> 17752 +<3b1a> 17756 +<3b1c> 17757 +<3b22> 15433 +<3b6d> 17804 +<3b77> 17797 +<3b87> 17826 +<3b88> 13965 +<3b8d> 17828 +<3ba4> 17834 +<3bb6> 16910 +<3bc3> 16911 +<3bcd> 17848 +endcidchar + +100 begincidchar +<3bf0> 17865 +<3bf3> 20151 +<3c0f> 16919 +<3c26> 17887 +<3cc3> 17916 +<3cd2> 17921 +<3d11> 17957 +<3d1e> 17968 +<3d31> 20158 +<3d4e> 7655 +<3d64> 17994 +<3d9a> 18008 +<3dc0> 18026 +<3dcc> 19133 +<3dd4> 18031 +<3e05> 18043 +<3e3f> 16968 +<3e40> 20170 +<3e60> 18059 +<3e66> 18061 +<3e68> 18062 +<3e83> 18069 +<3e8a> 15427 +<3e94> 18075 +<3eda> 15432 +<3f57> 18123 +<3f72> 16984 +<3f75> 18137 +<3f77> 18139 +<3fae> 18157 +<3fb1> 14164 +<3fc9> 18168 +<3fd7> 18173 +<3fdc> 19134 +<4039> 18191 +<4058> 18198 +<4093> 15436 +<4103> 15439 +<4105> 18235 +<4148> 18247 +<414f> 18250 +<4163> 18254 +<41b4> 18269 +<41bf> 18272 +<41e6> 18283 +<41ee> 18287 +<41f3> 18284 +<4207> 18294 +<420e> 18297 +<4264> 14176 +<4293> 15440 +<42c6> 18335 +<42d6> 18346 +<42dd> 18350 +<4302> 18364 +<432b> 18377 +<4343> 18379 +<43ee> 18423 +<43f0> 18426 +<4408> 18432 +<440c> 15426 +<4417> 18434 +<441c> 18435 +<4422> 18437 +<4453> 14195 +<445b> 17060 +<4476> 18460 +<447a> 18461 +<4491> 18467 +<44b3> 18494 +<44be> 18492 +<44d4> 18493 +<4508> 18524 +<450d> 18520 +<4525> 14206 +<4543> 18540 +<457a> 15435 +<459d> 17108 +<45b8> 18592 +<45be> 19135 +<45e5> 18618 +<45ea> 17113 +<460f> 18634 +<4610> 19136 +<4641> 18648 +<4665> 15438 +<46a1> 18665 +<46ae> 15441 +<46af> 18669 +<470c> 18690 +<471f> 20219 +<4764> 18712 +<47e6> 14224 +<47fd> 18724 +<4816> 18734 +<481e> 20225 +<4844> 17141 +<484e> 18746 +<48b5> 18779 +<49b0> 17183 +endcidchar + +100 begincidchar +<49e7> 18898 +<49fa> 18902 +<4a04> 18907 +<4a29> 18910 +<4abc> 18934 +<4b38> 13791 +<4b3b> 18958 +<4b7e> 19137 +<4bc2> 18995 +<4bca> 18997 +<4bd2> 18999 +<4be8> 15430 +<4c17> 17204 +<4c20> 19016 +<4c38> 19138 +<4cc4> 19076 +<4cd1> 19079 +<4ce1> 19139 +<4d07> 19099 +<4d77> 19115 +<4e00> 1200 +<4e01> 3000 +<4e02> 17234 +<4e03> 2275 +<4e07> 3754 +<4e08> 2510 +<4e09> 2174 +<4e0a> 2509 +<4e0b> 1340 +<4e0c> 19140 +<4e0d> 3526 +<4e0e> 3881 +<4e0f> 17235 +<4e10> 4091 +<4e11> 1233 +<4e12> 17236 +<4e14> 1484 +<4e15> 4092 +<4e16> 2632 +<4e17> 4311 +<4e18> 1648 +<4e19> 3594 +<4e1e> 2511 +<4e1f> 14298 +<4e21> 3974 +<4e26> 3602 +<4e28> 8371 +<4e29> 17237 +<4e2a> 4093 +<4e2b> 14299 +<4e2c> 14157 +<4e2d> 2980 +<4e2e> 17238 +<4e31> 4094 +<4e32> 1778 +<4e35> 21075 +<4e36> 4095 +<4e37> 13981 +<4e38> 1561 +<4e39> 2926 +<4e3b> 2323 +<4e3c> 4096 +<4e3f> 4097 +<4e42> 4098 +<4e43> 3307 +<4e44> 14304 +<4e45> 1649 +<4e47> 17239 +<4e48> 14126 +<4e4b> 3309 +<4e4d> 3259 +<4e4e> 1911 +<4e4f> 3681 +<4e51> 17241 +<4e55> 6480 +<4e56> 4099 +<4e57> 2512 +<4e58> 4100 +<4e59> 1333 +<4e5a> 14305 +<4e5c> 21076 +<4e5d> 1757 +<4e5e> 1956 +<4e5f> 3829 +<4e62> 4659 +<4e63> 21077 +<4e68> 21078 +<4e69> 17244 +<4e71> 3930 +<4e73> 3285 +<4e79> 19143 +<4e7e> 1505 +<4e7f> 14306 +<4e80> 1615 +<4e82> 4101 +<4e85> 4102 +<4e86> 3971 +<4e88> 3879 +<4e89> 2794 +<4e8a> 4104 +endcidchar + +100 begincidchar +<4e8b> 2244 +<4e8c> 3275 +<4e8d> 14307 +<4e8e> 4107 +<4e91> 1248 +<4e92> 1939 +<4e94> 1938 +<4e95> 1194 +<4e96> 14308 +<4e97> 21081 +<4e98> 4081 +<4e99> 4080 +<4e9b> 2083 +<4e9c> 1125 +<4e9d> 17245 +<4ea1> 3682 +<4ea2> 4111 +<4ea4> 1958 +<4ea5> 1195 +<4ea6> 3744 +<4ea8> 1686 +<4ead> 3070 +<4eae> 3972 +<4eaf> 21082 +<4eb0> 4112 +<4eb3> 4113 +<4eb6> 4114 +<4eb9> 14309 +<4eba> 2579 +<4ebb> 13856 +<4ebc> 17247 +<4ec0> 2372 +<4ec1> 2580 +<4ec2> 4119 +<4ec3> 17248 +<4ec4> 4117 +<4ec6> 4118 +<4ec7> 1650 +<4ec8> 17249 +<4eca> 2067 +<4ecb> 1392 +<4ecd> 4116 +<4ece> 4115 +<4ecf> 3577 +<4ed0> 14310 +<4ed4> 2196 +<4ed5> 2195 +<4ed6> 2846 +<4ed7> 4120 +<4ed8> 3527 +<4ed9> 2699 +<4eda> 17251 +<4edb> 21083 +<4edd> 656 +<4ede> 4121 +<4edf> 4123 +<4ee0> 14311 +<4ee1> 8372 +<4ee2> 21084 +<4ee3> 2885 +<4ee4> 4009 +<4ee5> 1166 +<4ee8> 21085 +<4eeb> 17250 +<4eed> 4122 +<4eee> 1342 +<4eef> 21086 +<4ef0> 1724 +<4ef1> 17252 +<4ef2> 2981 +<4ef3> 19144 +<4ef5> 17253 +<4ef6> 1861 +<4ef7> 4124 +<4efb> 3290 +<4efc> 8373 +<4efd> 14312 +<4efe> 21087 +<4eff> 14313 +<4f00> 8374 +<4f01> 1575 +<4f02> 21088 +<4f03> 8375 +<4f08> 21089 +<4f09> 4125 +<4f0a> 1167 +<4f0b> 14314 +<4f0c> 19145 +<4f0d> 1940 +<4f0e> 1576 +<4f0f> 3564 +<4f10> 3398 +<4f11> 1651 +<4f12> 21090 +<4f15> 14315 +<4f16> 17254 +<4f17> 21091 +<4f19> 19146 +<4f1a> 1393 +<4f1c> 4160 +endcidchar + +100 begincidchar +<4f1d> 3131 +<4f2b> 19147 +<4f2e> 19148 +<4f2f> 3362 +<4f30> 4127 +<4f31> 19149 +<4f33> 21092 +<4f34> 3408 +<4f35> 21093 +<4f36> 4010 +<4f37> 17256 +<4f38> 2547 +<4f39> 8376 +<4f3a> 2197 +<4f3b> 14317 +<4f3c> 2245 +<4f3d> 1344 +<4f3e> 17257 +<4f40> 21094 +<4f42> 21095 +<4f43> 3053 +<4f46> 2912 +<4f47> 4131 +<4f48> 16779 +<4f49> 14318 +<4f4d> 1168 +<4f4e> 3071 +<4f4f> 2373 +<4f50> 2084 +<4f51> 3854 +<4f52> 21098 +<4f53> 2862 +<4f54> 14319 +<4f55> 1343 +<4f56> 8377 +<4f57> 4130 +<4f58> 17258 +<4f59> 3880 +<4f5a> 4126 +<4f5b> 4128 +<4f5c> 2142 +<4f5d> 4129 +<4f5e> 4563 +<4f5f> 16780 +<4f60> 14316 +<4f63> 21099 +<4f64> 17255 +<4f69> 4137 +<4f6a> 16781 +<4f6c> 16782 +<4f6e> 21100 +<4f6f> 4140 +<4f70> 4138 +<4f71> 21101 +<4f73> 1346 +<4f75> 3595 +<4f76> 4132 +<4f79> 21102 +<4f7a> 14320 +<4f7b> 4136 +<4f7c> 1959 +<4f7f> 2198 +<4f81> 21103 +<4f82> 17262 +<4f83> 1506 +<4f84> 19150 +<4f85> 17263 +<4f86> 4141 +<4f88> 4133 +<4f89> 21104 +<4f8a> 8379 +<4f8b> 4011 +<4f8c> 21105 +<4f8d> 2246 +<4f8e> 21106 +<4f8f> 4134 +<4f90> 21107 +<4f91> 4139 +<4f92> 8378 +<4f93> 21108 +<4f94> 8381 +<4f96> 4142 +<4f97> 14323 +<4f98> 4135 +<4f99> 21109 +<4f9a> 8380 +<4f9b> 1689 +<4f9d> 1169 +<4f9e> 19151 +<4f9f> 21110 +<4fa0> 1690 +<4fa1> 1345 +<4fab> 4564 +<4fad> 3751 +<4fae> 3552 +<4faf> 1960 +<4fb2> 17265 +<4fb5> 2549 +<4fb6> 3967 +<4fb7> 19152 +endcidchar + +100 begincidchar +<4fb9> 21111 +<4fbe> 14324 +<4fbf> 3624 +<4fc2> 1806 +<4fc3> 2821 +<4fc4> 1380 +<4fc5> 17266 +<4fc6> 21117 +<4fc8> 21118 +<4fc9> 8364 +<4fca> 2397 +<4fcb> 17267 +<4fcc> 21119 +<4fcd> 8382 +<4fce> 4146 +<4fcf> 14325 +<4fd0> 4151 +<4fd1> 4149 +<4fd2> 17268 +<4fd3> 15407 +<4fd4> 4144 +<4fd7> 2831 +<4fd8> 4147 +<4fda> 4150 +<4fdb> 4148 +<4fdc> 21120 +<4fdd> 3629 +<4fdf> 4145 +<4fe0> 7660 +<4fe1> 2548 +<4fe2> 21121 +<4fe3> 3745 +<4fe6> 17264 +<4fee> 2350 +<4fef> 4166 +<4ff0> 21122 +<4ff1> 13731 +<4ff2> 17270 +<4ff3> 3334 +<4ff5> 3496 +<4ff6> 4161 +<4ff8> 3648 +<4ffa> 1334 +<4ffc> 21123 +<4ffd> 14326 +<4ffe> 4165 +<4fff> 8385 +<5002> 20299 +<5004> 19153 +<5005> 4159 +<5006> 4168 +<5007> 21124 +<5009> 2772 +<500a> 21125 +<500b> 1912 +<500c> 19154 +<500d> 3346 +<500e> 16783 +<500f> 5632 +<5010> 14329 +<5011> 4167 +<5012> 3159 +<5013> 17271 +<5014> 4156 +<5016> 1962 +<5017> 21126 +<5018> 16784 +<5019> 1961 +<501a> 4154 +<501b> 14330 +<501c> 17272 +<501d> 21127 +<501e> 8386 +<501f> 2310 +<5021> 4162 +<5022> 8384 +<5023> 3647 +<5024> 2955 +<5025> 4158 +<5026> 1863 +<5027> 14331 +<5028> 4155 +<5029> 4163 +<502a> 4157 +<502b> 3993 +<502c> 4164 +<502d> 4071 +<502e> 14332 +<5030> 21128 +<5035> 21131 +<5036> 1758 +<5039> 1862 +<503b> 14336 +<5040> 8383 +<5041> 16785 +<5042> 8389 +<5043> 4169 +<5045> 21132 +<5046> 8387 +<5047> 4170 +endcidchar + +100 begincidchar +<5048> 4174 +<5049> 1170 +<504a> 21133 +<504c> 19155 +<504e> 17273 +<504f> 3616 +<5050> 4173 +<5053> 17274 +<5055> 4172 +<5056> 4176 +<5057> 14333 +<5059> 21136 +<505a> 4175 +<505c> 3072 +<505f> 19156 +<5060> 21137 +<5062> 19157 +<5063> 17275 +<5065> 1864 +<5066> 14334 +<5067> 21138 +<506a> 14335 +<506c> 4177 +<506d> 21139 +<5070> 8388 +<5071> 21140 +<5072> 2289 +<5074> 2822 +<5075> 3073 +<5076> 1774 +<5077> 19158 +<5078> 4178 +<507d> 1616 +<5080> 4179 +<5081> 21141 +<5085> 4181 +<5086> 21144 +<5088> 17277 +<508a> 21145 +<508d> 3683 +<508e> 19159 +<508f> 14337 +<5090> 21146 +<5091> 1852 +<5094> 8390 +<5095> 17280 +<5096> 14338 +<5098> 2175 +<5099> 3467 +<509a> 4180 +<509b> 21147 +<509c> 14339 +<509e> 19160 +<50a2> 19161 +<50a3> 17276 +<50aa> 17281 +<50ac> 2101 +<50ad> 3885 +<50b1> 17283 +<50b2> 4183 +<50b3> 4186 +<50b4> 4182 +<50b5> 2100 +<50b7> 2439 +<50b9> 21153 +<50bd> 21154 +<50be> 1807 +<50c0> 21155 +<50c2> 4187 +<50c3> 19162 +<50c4> 17286 +<50c5> 1735 +<50c7> 17287 +<50cc> 14340 +<50cd> 3207 +<50ce> 17290 +<50cf> 2814 +<50d0> 16787 +<50d1> 1691 +<50d3> 21156 +<50d4> 17292 +<50d5> 3707 +<50d6> 4188 +<50d8> 8392 +<50d9> 15408 +<50da> 3973 +<50de> 4189 +<50df> 21159 +<50e1> 17293 +<50e2> 21160 +<50e3> 4192 +<50e4> 21161 +<50e5> 4190 +<50e6> 14341 +<50e7> 2768 +<50e8> 19163 +<50e9> 14342 +<50ed> 4191 +<50ee> 4193 +<50ef> 14343 +endcidchar + +100 begincidchar +<50f0> 15409 +<50f1> 19164 +<50f2> 16786 +<50f3> 17288 +<50f4> 8391 +<50f5> 4195 +<50f6> 21162 +<50f9> 4194 +<50fa> 21163 +<50fb> 3608 +<50fe> 19165 +<5100> 1617 +<5103> 16789 +<5104> 1327 +<5106> 16788 +<5107> 19166 +<5108> 14344 +<5109> 4196 +<510b> 14345 +<5110> 14346 +<5112> 2336 +<5114> 4201 +<5115> 4200 +<5116> 4199 +<5117> 17296 +<5118> 4143 +<5119> 21165 +<511a> 4202 +<511b> 14347 +<511e> 14348 +<511f> 2440 +<5121> 4203 +<5123> 21168 +<512a> 3855 +<512f> 21173 +<5131> 21174 +<5132> 3813 +<5133> 19170 +<5134> 21175 +<5135> 16790 +<5137> 4205 +<5138> 19171 +<5139> 21176 +<513a> 4204 +<513b> 4207 +<513c> 4206 +<5141> 1208 +<5142> 21177 +<5143> 1897 +<5144> 1809 +<5145> 2374 +<5146> 3001 +<5147> 1692 +<5148> 2700 +<5149> 1963 +<514a> 8393 +<514b> 2048 +<514c> 4211 +<514d> 3796 +<514e> 3136 +<514f> 21178 +<5150> 2247 +<5152> 4210 +<5153> 21179 +<5154> 4212 +<5155> 16791 +<5157> 16792 +<5158> 21180 +<515a> 3160 +<515c> 1491 +<515f> 14349 +<5160> 17298 +<5162> 4213 +<5164> 8394 +<5165> 3286 +<5166> 21181 +<5167> 13966 +<5168> 2742 +<516b> 3392 +<516c> 1964 +<516d> 4065 +<516e> 4217 +<5171> 1694 +<5173> 17300 +<5174> 19172 +<5175> 3596 +<5176> 2838 +<5177> 1769 +<5178> 3119 +<5179> 14201 +<517b> 18393 +<517c> 1865 +<517e> 21182 +<5180> 4218 +<5182> 4219 +<5183> 17301 +<5184> 19173 +<5185> 3258 +<5186> 1281 +<5189> 4222 +endcidchar + +100 begincidchar +<518a> 2157 +<518b> 17302 +<518c> 4221 +<518d> 2102 +<518e> 21183 +<518f> 4223 +<5190> 6235 +<5191> 4224 +<5192> 3695 +<5193> 4225 +<5197> 2513 +<5198> 17304 +<5199> 2296 +<519d> 8395 +<51a0> 1507 +<51a1> 14350 +<51a2> 4230 +<51a3> 17305 +<51a4> 4228 +<51a5> 3785 +<51a6> 4229 +<51a8> 3532 +<51ac> 3161 +<51ad> 17306 +<51b0> 4237 +<51b3> 4234 +<51b4> 2131 +<51b5> 4238 +<51b6> 3830 +<51b7> 4012 +<51b8> 19174 +<51ba> 19175 +<51bc> 14351 +<51bd> 4239 +<51be> 8396 +<51bf> 21184 +<51c2> 21185 +<51c3> 15410 +<51c4> 2636 +<51c5> 4240 +<51c6> 2404 +<51c8> 19176 +<51c9> 4241 +<51ca> 16794 +<51cb> 3002 +<51cc> 3975 +<51cd> 3162 +<51cf> 19177 +<51d1> 19178 +<51d2> 21186 +<51d5> 21187 +<51d6> 4314 +<51d8> 19181 +<51db> 4242 +<51dc> 8284 +<51dd> 1725 +<51de> 20300 +<51df> 19182 +<51e0> 4243 +<51e1> 3724 +<51e2> 16795 +<51e5> 21188 +<51e6> 2418 +<51e7> 2908 +<51e9> 4245 +<51ea> 3260 +<51ec> 8397 +<51ed> 4246 +<51ee> 14353 +<51f0> 4247 +<51f1> 1420 +<51f2> 21189 +<51f3> 17309 +<51f4> 14354 +<51f5> 4248 +<51f6> 1695 +<51f7> 21190 +<51f8> 3236 +<51f9> 1308 +<51fa> 2394 +<51fd> 3381 +<51fe> 4249 +<5200> 3163 +<5203> 2581 +<5204> 4250 +<5205> 19183 +<5206> 3580 +<5207> 2686 +<5208> 1502 +<520a> 1509 +<520b> 4251 +<520e> 4253 +<5211> 1808 +<5212> 17310 +<5213> 14357 +<5214> 4252 +<5215> 8398 +<5216> 17311 +<5217> 4027 +<5218> 21191 +endcidchar + +100 begincidchar +<521d> 2419 +<5222> 21192 +<5224> 3409 +<5225> 3612 +<5226> 19184 +<5227> 4254 +<5228> 19185 +<5229> 3938 +<522a> 4255 +<522b> 19186 +<522e> 4256 +<5230> 3192 +<5233> 4257 +<5235> 19189 +<5236> 2637 +<5237> 2158 +<5238> 1866 +<5239> 4258 +<523a> 2199 +<523b> 2049 +<523c> 19190 +<5243> 3074 +<5244> 4260 +<5245> 21193 +<5247> 2823 +<5249> 14358 +<524a> 2143 +<524d> 2738 +<524f> 4259 +<5254> 4264 +<5255> 17313 +<5256> 3684 +<5257> 16796 +<5258> 21194 +<525a> 19191 +<525b> 2038 +<525c> 17314 +<525d> 7774 +<525e> 4263 +<525f> 21195 +<5260> 19192 +<5261> 14359 +<5263> 1867 +<5264> 2126 +<5265> 3363 +<5266> 14360 +<5269> 4267 +<526a> 4265 +<526c> 17315 +<526e> 19193 +<526f> 3565 +<5270> 2514 +<5271> 4274 +<5272> 1474 +<5273> 4268 +<5274> 4266 +<5275> 2769 +<5277> 17316 +<527d> 4270 +<527f> 4269 +<5280> 21196 +<5282> 17318 +<5283> 1442 +<5284> 17317 +<5285> 21197 +<5287> 1846 +<5288> 4275 +<5289> 3957 +<528a> 19196 +<528c> 19197 +<528d> 4271 +<5291> 4276 +<5292> 4273 +<5293> 14361 +<5294> 4272 +<5298> 17320 +<529a> 21201 +<529b> 3991 +<529c> 8399 +<529f> 1965 +<52a0> 1347 +<52a3> 4028 +<52a4> 17322 +<52a5> 21202 +<52a6> 8400 +<52a7> 21203 +<52a9> 2431 +<52aa> 3154 +<52ab> 2039 +<52af> 8573 +<52b0> 21204 +<52b1> 4013 +<52b4> 4049 +<52b5> 4282 +<52b9> 1966 +<52bc> 4281 +<52bd> 21208 +<52be> 1421 +<52c0> 8401 +<52c1> 4283 +endcidchar + +100 begincidchar +<52c3> 3716 +<52c4> 21209 +<52c5> 3032 +<52c6> 21210 +<52c7> 3856 +<52c8> 14362 +<52c9> 3625 +<52ca> 17325 +<52cc> 16797 +<52cd> 4284 +<52cf> 21211 +<52d0> 14056 +<52d1> 17326 +<52d2> 7150 +<52d4> 21212 +<52d5> 3208 +<52d6> 16798 +<52d7> 4285 +<52d8> 1510 +<52d9> 3775 +<52db> 8402 +<52dc> 21213 +<52dd> 2441 +<52de> 4286 +<52df> 3639 +<52e0> 4290 +<52e1> 19198 +<52e2> 2638 +<52e3> 4287 +<52e4> 1736 +<52e5> 21214 +<52e6> 4288 +<52e7> 1511 +<52e8> 21215 +<52e9> 19199 +<52ea> 21216 +<52ec> 21217 +<52f0> 14363 +<52f1> 19200 +<52f2> 1796 +<52f3> 4291 +<52f4> 21218 +<52f5> 4292 +<52f6> 21219 +<52f7> 17328 +<52fa> 2311 +<52fb> 16799 +<52fe> 1967 +<52ff> 3818 +<5300> 8403 +<5301> 3828 +<5302> 3279 +<5303> 19201 +<5305> 3649 +<5306> 4295 +<5307> 20301 +<5308> 4296 +<530c> 21220 +<530d> 4298 +<530f> 4300 +<5310> 4299 +<5311> 19202 +<5313> 21221 +<5315> 4301 +<5316> 1341 +<5317> 3706 +<5318> 21222 +<5319> 2156 +<531a> 4302 +<531b> 21223 +<531c> 16800 +<531d> 2779 +<531e> 21224 +<531f> 19203 +<5320> 2442 +<5321> 1697 +<5323> 4303 +<5324> 8405 +<5325> 21225 +<532a> 3439 +<532d> 19204 +<532f> 4304 +<5330> 21231 +<5331> 4305 +<5332> 19205 +<5333> 4306 +<5335> 17329 +<5338> 4307 +<5339> 3478 +<533a> 1760 +<533b> 1193 +<533c> 21232 +<533d> 19206 +<533e> 14366 +<533f> 3223 +<5340> 4308 +<5341> 2375 +<5342> 17330 +<5343> 2701 +<5345> 4310 +endcidchar + +100 begincidchar +<5346> 4309 +<5347> 2443 +<5348> 1941 +<5349> 4312 +<534a> 3410 +<534b> 14368 +<534c> 14367 +<534d> 4313 +<5351> 3440 +<5352> 2836 +<5353> 2894 +<5354> 1696 +<5357> 3270 +<5358> 2927 +<5359> 21233 +<535a> 3364 +<535b> 21234 +<535c> 3708 +<535e> 4315 +<5360> 2702 +<5361> 14369 +<5363> 16801 +<5365> 19207 +<5366> 1803 +<5367> 17333 +<5369> 4316 +<536c> 14370 +<536d> 19208 +<536e> 4317 +<536f> 1230 +<5370> 1209 +<5371> 1577 +<5372> 8406 +<5373> 2824 +<5374> 1643 +<5375> 3931 +<5377> 4320 +<5378> 1335 +<5379> 19209 +<537a> 17334 +<537b> 4319 +<537d> 13365 +<537e> 19210 +<537f> 1698 +<5382> 4321 +<5383> 21236 +<5384> 3837 +<5389> 14288 +<538e> 21239 +<5393> 8407 +<5394> 19211 +<5396> 4322 +<5398> 3994 +<5399> 19212 +<539a> 1968 +<539d> 16802 +<539f> 1898 +<53a0> 4323 +<53a1> 21240 +<53a4> 17335 +<53a5> 4325 +<53a6> 4324 +<53a8> 2597 +<53a9> 1243 +<53aa> 19213 +<53ab> 14371 +<53ad> 1280 +<53ae> 4326 +<53af> 19214 +<53b0> 4327 +<53b2> 8408 +<53b3> 1899 +<53b4> 17336 +<53b5> 21241 +<53b6> 4328 +<53b7> 17338 +<53b8> 21242 +<53ba> 19215 +<53bb> 1672 +<53bd> 21243 +<53c0> 17339 +<53c1> 19216 +<53c2> 2176 +<53c3> 4329 +<53c8> 3746 +<53c9> 2085 +<53ca> 1652 +<53cb> 3857 +<53cc> 2770 +<53cd> 3411 +<53ce> 2345 +<53cf> 21244 +<53d4> 2385 +<53d5> 17343 +<53d6> 2324 +<53d7> 2337 +<53d9> 2432 +<53da> 14372 +<53db> 3412 +<53dd> 8409 +endcidchar + +100 begincidchar +<53de> 21247 +<53df> 4332 +<53e0> 19219 +<53e1> 1253 +<53e2> 2771 +<53e3> 1969 +<53e4> 1913 +<53e5> 1759 +<53e6> 14373 +<53e7> 21249 +<53e8> 4336 +<53e9> 2911 +<53ea> 2910 +<53eb> 1699 +<53ec> 2444 +<53ed> 4337 +<53ee> 4335 +<53ef> 1348 +<53f0> 2886 +<53f1> 2276 +<53f2> 2201 +<53f3> 1224 +<53f4> 17345 +<53f5> 14374 +<53f6> 1486 +<53f7> 2040 +<53f8> 2200 +<53fa> 4338 +<5401> 4339 +<5402> 21250 +<5403> 1635 +<5404> 1444 +<5408> 2041 +<5409> 1634 +<540a> 3067 +<540b> 1223 +<540c> 3209 +<540d> 3786 +<540e> 1971 +<540f> 3939 +<5410> 3137 +<5411> 1970 +<5412> 16803 +<5413> 19220 +<541a> 21251 +<541b> 1797 +<541d> 4348 +<541e> 13964 +<541f> 1755 +<5420> 3704 +<5421> 21252 +<5424> 17346 +<5426> 3441 +<5427> 14375 +<5428> 17347 +<5429> 4347 +<542a> 19221 +<542b> 1562 +<542e> 4345 +<542f> 21253 +<5431> 19222 +<5433> 13760 +<5436> 4346 +<5438> 1653 +<5439> 2599 +<543b> 3581 +<543c> 4344 +<543d> 4340 +<543e> 1943 +<543f> 13775 +<5440> 4341 +<5442> 4042 +<5443> 17349 +<5444> 21254 +<5446> 3650 +<5447> 21255 +<5448> 3076 +<5449> 1942 +<544a> 2050 +<544c> 19225 +<544d> 14376 +<544e> 4349 +<544f> 21256 +<5451> 3253 +<5455> 14115 +<545e> 21257 +<545f> 4353 +<5462> 17350 +<5464> 21258 +<5466> 14377 +<5467> 21259 +<5468> 2346 +<5469> 21260 +<546a> 2338 +<546b> 14378 +<546c> 17351 +<5470> 4356 +<5471> 4354 +<5473> 3759 +<5474> 14379 +endcidchar + +100 begincidchar +<5475> 4351 +<5476> 4360 +<5477> 4355 +<547b> 4358 +<547c> 1914 +<547d> 3787 +<547f> 16804 +<5480> 4359 +<5481> 21263 +<5483> 21264 +<5484> 4361 +<5485> 21265 +<5486> 4363 +<5488> 16805 +<5489> 21266 +<548a> 8412 +<548b> 2144 +<548c> 4072 +<548d> 14380 +<548e> 4352 +<548f> 4350 +<5490> 4362 +<5491> 21267 +<5492> 4357 +<5495> 17352 +<5496> 14381 +<549c> 8411 +<549f> 21268 +<54a0> 17353 +<54a1> 14382 +<54a2> 4365 +<54a4> 4374 +<54a5> 4367 +<54a6> 17354 +<54a7> 19226 +<54a8> 4371 +<54a9> 8413 +<54aa> 19227 +<54ab> 4372 +<54ac> 4368 +<54ad> 14383 +<54ae> 17355 +<54af> 4401 +<54b1> 19228 +<54b2> 2137 +<54b3> 1423 +<54b7> 17356 +<54b8> 4366 +<54b9> 14384 +<54ba> 17357 +<54bb> 19229 +<54bc> 4376 +<54bd> 1210 +<54be> 4375 +<54bf> 14385 +<54c0> 1129 +<54c1> 3516 +<54c2> 4373 +<54c3> 17358 +<54c4> 4369 +<54c6> 14386 +<54c7> 4364 +<54c8> 4370 +<54c9> 2104 +<54ca> 21269 +<54cd> 14387 +<54ce> 19230 +<54d8> 4377 +<54e0> 21270 +<54e1> 1211 +<54e2> 4386 +<54e8> 2445 +<54e9> 3735 +<54ea> 19231 +<54ec> 17360 +<54ed> 4384 +<54ee> 4383 +<54ef> 17361 +<54f1> 17362 +<54f2> 3113 +<54f3> 17363 +<54f6> 21271 +<54fa> 4385 +<54fc> 19232 +<54fd> 4382 +<54fe> 21272 +<54ff> 8414 +<5504> 1238 +<5505> 19233 +<5506> 2086 +<5507> 2550 +<5508> 19234 +<5509> 17366 +<550e> 14388 +<550f> 4380 +<5510> 3164 +<5514> 4381 +<5515> 19235 +<5516> 1126 +<5527> 19236 +endcidchar + +100 begincidchar +<552a> 19237 +<552b> 14389 +<552e> 4391 +<552f> 3853 +<5531> 2447 +<5532> 21275 +<5533> 4397 +<5535> 14390 +<5536> 19238 +<5538> 4396 +<5539> 4387 +<553b> 21276 +<553c> 17367 +<553d> 21277 +<553e> 2851 +<5540> 4388 +<5541> 17368 +<5544> 2895 +<5545> 4393 +<5546> 2446 +<5547> 17370 +<5549> 21278 +<554a> 14391 +<554c> 4390 +<554d> 21279 +<554f> 3824 +<5550> 16806 +<5551> 19239 +<5553> 1810 +<5558> 21280 +<555c> 4392 +<555d> 4398 +<555e> 7633 +<5560> 14392 +<5561> 20308 +<5563> 4389 +<5564> 17372 +<5566> 19240 +<557b> 4404 +<557c> 4409 +<557d> 17374 +<557e> 4405 +<557f> 21283 +<5580> 4400 +<5581> 16807 +<5582> 17375 +<5583> 4410 +<5584> 2739 +<5586> 8415 +<5587> 4412 +<5588> 14394 +<5589> 1972 +<558a> 4402 +<558b> 3003 +<558e> 14395 +<558f> 19241 +<5591> 17376 +<5592> 19242 +<5593> 21284 +<5594> 19243 +<5597> 21285 +<5598> 4406 +<5599> 4399 +<559a> 1513 +<559c> 1578 +<559d> 1475 +<559e> 4407 +<559f> 4403 +<55a3> 21286 +<55a4> 19244 +<55a7> 1868 +<55a8> 4413 +<55a9> 4411 +<55aa> 2773 +<55ab> 1636 +<55ac> 1700 +<55ad> 16808 +<55ae> 4408 +<55b0> 1772 +<55b2> 19245 +<55b6> 1254 +<55bf> 17381 +<55c1> 21287 +<55c3> 19246 +<55c4> 4417 +<55c5> 4415 +<55c6> 19247 +<55c7> 4472 +<55c9> 17382 +<55cb> 21288 +<55cc> 17383 +<55ce> 16809 +<55d1> 17384 +<55d2> 17378 +<55d3> 19248 +<55d4> 4420 +<55da> 4414 +<55db> 19249 +<55dc> 4418 +<55dd> 17385 +endcidchar + +100 begincidchar +<55de> 21291 +<55df> 4416 +<55e2> 17387 +<55e3> 2202 +<55e4> 4419 +<55e9> 17389 +<55ec> 19250 +<55ee> 19251 +<55f1> 19252 +<55f6> 19253 +<55f7> 4422 +<55f8> 19254 +<55f9> 4427 +<55fd> 4425 +<55fe> 4424 +<55ff> 21292 +<5605> 19255 +<5606> 2928 +<5607> 17392 +<5608> 14396 +<5609> 1349 +<560a> 21294 +<560d> 19256 +<5610> 17393 +<5614> 4421 +<5616> 4423 +<5617> 2448 +<5618> 1237 +<5619> 21295 +<561b> 4426 +<5620> 15389 +<5628> 17390 +<5629> 1374 +<562c> 19259 +<562f> 4437 +<5630> 17394 +<5631> 2532 +<5632> 4433 +<5633> 21296 +<5634> 4431 +<5635> 19260 +<5636> 4432 +<5637> 14399 +<5638> 4434 +<5639> 19261 +<563b> 16810 +<563c> 21297 +<563d> 17396 +<563f> 14400 +<5640> 17397 +<5641> 21298 +<5642> 1247 +<5646> 21301 +<5647> 17398 +<5649> 14401 +<564b> 14402 +<564c> 2747 +<564d> 19262 +<564e> 4428 +<564f> 14403 +<5650> 4429 +<5653> 7963 +<5654> 19263 +<565b> 1496 +<565e> 17399 +<5660> 17400 +<5664> 4436 +<5666> 14404 +<5668> 1579 +<5669> 14405 +<566a> 4439 +<566b> 4435 +<566c> 4438 +<566d> 17401 +<566f> 14406 +<5674> 3582 +<5675> 21305 +<5676> 15411 +<5678> 3245 +<567a> 3404 +<5680> 4441 +<5684> 21306 +<5685> 19264 +<5686> 4440 +<5687> 1443 +<5688> 17403 +<568a> 4442 +<568b> 21307 +<568c> 17404 +<568f> 4445 +<5694> 4444 +<5695> 14409 +<5699> 7654 +<569a> 14410 +<569d> 17405 +<569e> 16811 +<569f> 19265 +<56a0> 4443 +<56a2> 3311 +<56a5> 4446 +endcidchar + +100 begincidchar +<56a6> 19266 +<56a7> 21308 +<56a8> 17406 +<56a9> 16812 +<56ab> 21309 +<56ae> 4447 +<56b1> 14413 +<56b2> 17407 +<56b3> 16813 +<56b4> 4449 +<56b6> 4448 +<56b7> 19267 +<56bc> 4451 +<56be> 21310 +<56c0> 4454 +<56c1> 4452 +<56c2> 4450 +<56c3> 4453 +<56c5> 17408 +<56c8> 4455 +<56c9> 14414 +<56ca> 7770 +<56cb> 21311 +<56cc> 19268 +<56cd> 17409 +<56ce> 4456 +<56cf> 19269 +<56d0> 21312 +<56d1> 4457 +<56d3> 4458 +<56d7> 4459 +<56d8> 4220 +<56d9> 19270 +<56da> 2344 +<56db> 2203 +<56dc> 21313 +<56dd> 14415 +<56de> 1395 +<56df> 17410 +<56e0> 1212 +<56e1> 19271 +<56e3> 2946 +<56e4> 14416 +<56e8> 17411 +<56eb> 19272 +<56ed> 19273 +<56ee> 4460 +<56f0> 2068 +<56f1> 19274 +<56f2> 1171 +<56f3> 2596 +<56f9> 4461 +<56fa> 1915 +<56fd> 2051 +<56ff> 4463 +<5700> 4462 +<5703> 3632 +<5704> 4464 +<5707> 19275 +<5708> 4466 +<5709> 4465 +<570a> 14417 +<570b> 4467 +<570c> 19276 +<570d> 4468 +<570f> 1869 +<5711> 21319 +<5712> 1282 +<5713> 4469 +<5715> 14418 +<5716> 4471 +<5718> 4470 +<571c> 4473 +<571d> 19279 +<571f> 3156 +<5720> 21320 +<5721> 13952 +<5722> 21321 +<5723> 14419 +<5726> 4474 +<5727> 1145 +<5728> 2127 +<5729> 17416 +<572a> 21324 +<572c> 19280 +<572d> 1811 +<572e> 19281 +<572f> 14420 +<5730> 2957 +<573b> 4478 +<573f> 21325 +<5740> 4479 +<5742> 2132 +<5747> 1737 +<574a> 3685 +<574c> 14423 +<574d> 17420 +<574e> 4477 +<574f> 4480 +<5750> 2097 +endcidchar + +100 begincidchar +<5751> 1973 +<5752> 21326 +<5759> 8416 +<575f> 19284 +<5761> 4484 +<5762> 21327 +<5764> 2069 +<5765> 8417 +<5766> 2929 +<5767> 21328 +<5768> 17422 +<5769> 4481 +<576a> 3062 +<576b> 19285 +<576d> 19286 +<576e> 21329 +<576f> 17423 +<5770> 14424 +<5771> 21330 +<5777> 16814 +<5779> 21331 +<577a> 19287 +<577b> 17427 +<577c> 16815 +<577e> 21332 +<577f> 4485 +<5781> 21333 +<5782> 2600 +<5783> 19288 +<5788> 4483 +<5789> 4486 +<578b> 1813 +<578c> 14425 +<5793> 4487 +<5794> 21334 +<5795> 21338 +<5797> 19289 +<5799> 21335 +<579a> 17430 +<579c> 14426 +<579f> 21336 +<57a0> 4488 +<57a1> 21337 +<57a2> 1974 +<57a3> 1438 +<57a4> 4490 +<57a7> 21339 +<57a8> 17433 +<57a9> 21340 +<57aa> 4491 +<57ac> 8418 +<57ae> 19290 +<57b0> 4492 +<57b3> 4489 +<57b8> 14427 +<57bd> 21341 +<57c0> 4482 +<57c3> 4493 +<57c6> 4494 +<57c7> 8420 +<57c8> 8419 +<57cb> 3730 +<57cc> 17436 +<57ce> 2515 +<57cf> 16817 +<57d4> 4495 +<57d5> 19291 +<57d6> 4499 +<57d7> 17434 +<57dc> 3310 +<57dd> 21342 +<57de> 17439 +<57df> 1196 +<57e0> 3528 +<57e1> 21347 +<57e3> 4500 +<57e4> 16818 +<57e6> 14428 +<57e7> 19292 +<57e9> 21343 +<57ed> 14429 +<57f0> 17440 +<57f4> 2533 +<57f7> 2277 +<57f8> 17442 +<57f9> 3347 +<57fa> 1580 +<57fb> 17443 +<57fc> 2139 +<57fd> 17444 +<57fe> 21344 +<57ff> 14432 +<5800> 3719 +<5802> 3210 +<5803> 21345 +<5804> 17445 +<5805> 1870 +<5806> 2863 +<5808> 21346 +<5809> 14433 +endcidchar + +100 begincidchar +<580a> 4498 +<580b> 4501 +<580c> 21348 +<580d> 19293 +<5815> 2852 +<5819> 4502 +<581b> 21349 +<581d> 4503 +<581e> 17446 +<581f> 21350 +<5820> 14434 +<5821> 4505 +<5824> 3077 +<5826> 19294 +<5827> 17447 +<582a> 1514 +<582d> 21351 +<582f> 7474 +<5830> 1283 +<5831> 3651 +<5832> 14435 +<5834> 2516 +<5835> 3138 +<5839> 17448 +<583a> 2134 +<583d> 4511 +<583f> 21352 +<5840> 3597 +<5841> 4005 +<5849> 17450 +<584a> 1396 +<584b> 4507 +<584c> 17451 +<584d> 19295 +<584f> 19296 +<5850> 21353 +<5851> 2748 +<5852> 4510 +<5854> 3165 +<5855> 21354 +<5857> 3139 +<5858> 3166 +<5859> 3405 +<585a> 3049 +<585e> 2105 +<585f> 19297 +<5861> 7751 +<5862> 4506 +<5864> 16819 +<5867> 17452 +<5868> 21355 +<5869> 1304 +<586b> 3120 +<586d> 19298 +<5870> 4508 +<5872> 4504 +<5875> 2582 +<5878> 21356 +<5879> 4512 +<587c> 14436 +<587e> 2392 +<587f> 19299 +<5880> 14437 +<5881> 19300 +<5883> 1701 +<5885> 4513 +<5889> 16820 +<588c> 21359 +<588d> 17455 +<5893> 3640 +<5894> 17458 +<5896> 21360 +<5897> 2815 +<5898> 19301 +<589c> 3042 +<589d> 17459 +<589e> 8423 +<589f> 4515 +<58a6> 21364 +<58a8> 3709 +<58a9> 14438 +<58aa> 17460 +<58ab> 4516 +<58ae> 4521 +<58b1> 17461 +<58b2> 8424 +<58b3> 3583 +<58b8> 4520 +<58b9> 4514 +<58ba> 4517 +<58bb> 4519 +<58bc> 19302 +<58be> 2070 +<58c1> 3609 +<58c2> 21366 +<58c3> 17463 +<58c4> 21365 +<58c5> 4522 +<58c7> 2947 +<58c8> 21367 +endcidchar + +100 begincidchar +<58ca> 1397 +<58cc> 2517 +<58cd> 17464 +<58ce> 14439 +<58d0> 14440 +<58d1> 4524 +<58d2> 16822 +<58d3> 4523 +<58d4> 14441 +<58d5> 2042 +<58d6> 21368 +<58d7> 4525 +<58d8> 4527 +<58d9> 4526 +<58da> 14442 +<58dc> 4529 +<58dd> 21369 +<58de> 4518 +<58df> 4531 +<58e0> 16823 +<58e1> 21370 +<58e2> 17465 +<58e4> 4530 +<58e5> 4528 +<58e9> 14443 +<58eb> 2204 +<58ec> 2583 +<58ee> 2774 +<58ef> 4532 +<58f0> 2656 +<58f1> 1201 +<58f2> 3354 +<58f7> 3063 +<58f9> 4534 +<58fa> 4533 +<5902> 4538 +<5909> 3617 +<590a> 4539 +<590b> 8425 +<590c> 14444 +<590d> 17470 +<590f> 1350 +<5910> 4540 +<5914> 17471 +<5915> 3878 +<5916> 1422 +<5918> 4318 +<5919> 2386 +<591a> 2847 +<591b> 4541 +<591c> 3831 +<591d> 21374 +<591f> 19303 +<5921> 21375 +<5922> 3776 +<5923> 19304 +<5924> 14445 +<5925> 4543 +<5927> 2887 +<5928> 21376 +<5929> 3121 +<592a> 2848 +<592b> 3529 +<592e> 1309 +<592f> 14446 +<5930> 21377 +<5931> 2278 +<5932> 4546 +<5933> 21378 +<5937> 1172 +<5938> 4547 +<5939> 14117 +<593d> 17474 +<593e> 4548 +<593f> 21381 +<5943> 21382 +<5944> 1284 +<5946> 17476 +<5947> 1581 +<5948> 3256 +<5949> 3652 +<594e> 4552 +<594f> 2775 +<5950> 4551 +<5951> 1814 +<5952> 21383 +<5953> 8426 +<5954> 3721 +<5955> 4550 +<5957> 3167 +<5958> 4554 +<5959> 19305 +<595a> 4553 +<595b> 8427 +<595d> 8428 +<595e> 21384 +<595f> 17479 +<5960> 4556 +<5961> 14447 +<5962> 4555 +endcidchar + +100 begincidchar +<5963> 8429 +<5965> 1310 +<5967> 4557 +<5968> 2449 +<5969> 4559 +<596a> 2915 +<596b> 21385 +<596c> 4558 +<596d> 14448 +<596e> 3587 +<596f> 21386 +<5972> 21387 +<5973> 2433 +<5974> 3157 +<5978> 4560 +<5979> 19306 +<597b> 21388 +<597c> 17483 +<597d> 1975 +<5981> 4561 +<5982> 3287 +<5983> 3442 +<5984> 3805 +<598a> 3291 +<598b> 16825 +<598c> 21389 +<598d> 4570 +<598e> 21390 +<5992> 16826 +<5993> 1618 +<5995> 21391 +<5996> 3887 +<5997> 19307 +<5999> 3771 +<599b> 4665 +<599d> 4562 +<599f> 17484 +<59a3> 4565 +<59a4> 8430 +<59a5> 2853 +<59a7> 21392 +<59a8> 3686 +<59ac> 3140 +<59ad> 21393 +<59ae> 17485 +<59af> 19308 +<59b0> 21394 +<59b2> 4566 +<59b3> 19309 +<59b7> 21395 +<59b9> 3731 +<59ba> 8431 +<59bb> 2106 +<59bc> 17486 +<59be> 2450 +<59c1> 21396 +<59c3> 16827 +<59c4> 21397 +<59c6> 4567 +<59c8> 17487 +<59c9> 2206 +<59ca> 14449 +<59cb> 2205 +<59cd> 17488 +<59d0> 1149 +<59d1> 1916 +<59d2> 14450 +<59d3> 2639 +<59d4> 1173 +<59dc> 4569 +<59dd> 14451 +<59de> 17489 +<59df> 19310 +<59e5> 1242 +<59e6> 1515 +<59e7> 17490 +<59e8> 4568 +<59ea> 3793 +<59eb> 3491 +<59ec> 13997 +<59ee> 17491 +<59ef> 21398 +<59f1> 19311 +<59f2> 21399 +<59f4> 21400 +<59f6> 1132 +<59f7> 21401 +<59f8> 19312 +<59fb> 1213 +<59ff> 2207 +<5a00> 21402 +<5a01> 1174 +<5a03> 1127 +<5a04> 14454 +<5a09> 4577 +<5a0c> 14455 +<5a0d> 17495 +<5a0e> 21403 +<5a11> 4575 +<5a12> 21404 +endcidchar + +100 begincidchar +<5a13> 16828 +<5a17> 17496 +<5a18> 3784 +<5a1a> 4578 +<5a1b> 13761 +<5a1c> 4576 +<5a1e> 21405 +<5a1f> 4574 +<5a20> 2551 +<5a23> 14456 +<5a24> 21406 +<5a25> 4573 +<5a27> 17497 +<5a28> 21407 +<5a29> 3626 +<5a2a> 21408 +<5a2d> 17498 +<5a2f> 1944 +<5a30> 21409 +<5a3c> 2451 +<5a40> 4579 +<5a41> 4050 +<5a46> 3330 +<5a47> 14457 +<5a48> 21412 +<5a49> 4581 +<5a4c> 21413 +<5a50> 21414 +<5a55> 14458 +<5a5a> 2071 +<5a5e> 21415 +<5a62> 4584 +<5a63> 14459 +<5a65> 17499 +<5a66> 3530 +<5a67> 16829 +<5a6a> 4585 +<5a6c> 4580 +<5a6d> 14460 +<5a77> 16830 +<5a7a> 17500 +<5a7b> 21416 +<5a7e> 14461 +<5a7f> 3783 +<5a84> 16831 +<5a8b> 17501 +<5a90> 21417 +<5a92> 3348 +<5a93> 21418 +<5a96> 21419 +<5a99> 21420 +<5a9a> 4586 +<5a9b> 3492 +<5a9c> 17502 +<5a9e> 14462 +<5aa2> 17505 +<5aa7> 14463 +<5aac> 14464 +<5ab1> 17506 +<5ab2> 19313 +<5ab3> 14465 +<5ab5> 17507 +<5ab8> 19314 +<5aba> 17508 +<5abb> 21421 +<5abc> 4587 +<5abd> 4591 +<5abe> 4588 +<5abf> 17509 +<5ac1> 1351 +<5ac2> 4590 +<5ac4> 16832 +<5ac6> 21422 +<5ac8> 21423 +<5ac9> 2279 +<5acb> 4589 +<5acc> 1871 +<5acf> 21424 +<5ad0> 4603 +<5ad6> 4596 +<5ad7> 4593 +<5ada> 17510 +<5adc> 17511 +<5ae0> 14466 +<5ae1> 2978 +<5ae3> 4592 +<5ae5> 17512 +<5ae6> 4594 +<5ae9> 4595 +<5aea> 19315 +<5aee> 17514 +<5af0> 17513 +<5af5> 17515 +<5af6> 19316 +<5afd> 21425 +<5b00> 14467 +<5b01> 21426 +<5b08> 17516 +<5b09> 1582 +<5b0b> 4600 +endcidchar + +100 begincidchar +<5b0c> 4599 +<5b16> 4601 +<5b17> 17517 +<5b19> 14468 +<5b1b> 19317 +<5b1d> 19318 +<5b21> 19319 +<5b22> 2518 +<5b25> 14469 +<5b2a> 4604 +<5b2c> 3064 +<5b2d> 14470 +<5b30> 1255 +<5b32> 4602 +<5b34> 17518 +<5b36> 4605 +<5b38> 19320 +<5b3e> 4606 +<5b40> 4609 +<5b41> 14471 +<5b43> 4607 +<5b45> 4608 +<5b4b> 21427 +<5b4c> 17519 +<5b50> 2208 +<5b51> 4610 +<5b52> 17520 +<5b54> 1976 +<5b55> 4611 +<5b56> 8432 +<5b57> 2248 +<5b58> 2840 +<5b5c> 2216 +<5b5d> 1977 +<5b5e> 21428 +<5b5f> 3806 +<5b63> 1602 +<5b64> 1917 +<5b65> 4614 +<5b66> 1462 +<5b68> 17521 +<5b69> 4615 +<5b6b> 2841 +<5b6e> 21429 +<5b6f> 17522 +<5b70> 4616 +<5b71> 4656 +<5b73> 4617 +<5b75> 4618 +<5b76> 14120 +<5b78> 4619 +<5b7a> 4621 +<5b7c> 14472 +<5b7d> 16834 +<5b80> 4622 +<5b81> 17523 +<5b82> 13840 +<5b83> 4623 +<5b84> 17524 +<5b85> 2896 +<5b86> 21430 +<5b87> 1225 +<5b88> 2325 +<5b89> 1158 +<5b8a> 14475 +<5b8b> 2777 +<5b8c> 1516 +<5b8d> 2273 +<5b8e> 21431 +<5b8f> 1978 +<5b93> 16835 +<5b94> 21434 +<5b95> 3168 +<5b96> 17526 +<5b97> 2347 +<5b98> 1517 +<5b99> 2982 +<5b9a> 3078 +<5b9b> 1148 +<5b9c> 1619 +<5b9d> 3653 +<5b9f> 2286 +<5ba2> 1644 +<5ba3> 2703 +<5ba4> 2280 +<5ba5> 3858 +<5ba6> 4624 +<5bac> 17527 +<5bad> 21437 +<5bae> 1654 +<5baf> 21438 +<5bb0> 2107 +<5bb3> 1424 +<5bb4> 1285 +<5bb5> 2452 +<5bb6> 1352 +<5bb7> 19321 +<5bb8> 4625 +<5bb9> 3888 +<5bba> 21441 +endcidchar + +100 begincidchar +<5bbc> 21442 +<5bbf> 2387 +<5bc0> 8433 +<5bc1> 21443 +<5bc2> 2320 +<5bc3> 4626 +<5bc4> 1583 +<5bc5> 3242 +<5bc6> 3765 +<5bc7> 4627 +<5bc9> 4628 +<5bcc> 3531 +<5bcd> 21444 +<5bce> 17530 +<5bcf> 21445 +<5bd0> 4630 +<5bd2> 1508 +<5bd3> 1775 +<5bd4> 4629 +<5bd6> 17531 +<5bd7> 19322 +<5bd8> 8435 +<5bdb> 1518 +<5bdd> 2552 +<5bde> 4634 +<5bdf> 2159 +<5be0> 19323 +<5be1> 1353 +<5be2> 4633 +<5be4> 4631 +<5be5> 4635 +<5be6> 4632 +<5be7> 3297 +<5be8> 5262 +<5be9> 2553 +<5beb> 4636 +<5bec> 20302 +<5bee> 3976 +<5bef> 21448 +<5bf0> 4637 +<5bf1> 17534 +<5bf3> 4639 +<5bf4> 21449 +<5bf5> 3004 +<5bf6> 4638 +<5bf8> 2631 +<5bfa> 2249 +<5bfd> 17535 +<5bfe> 2864 +<5bff> 2339 +<5c01> 3559 +<5c02> 2704 +<5c03> 17537 +<5c04> 2297 +<5c05> 4640 +<5c06> 2453 +<5c09> 1175 +<5c0a> 2842 +<5c0b> 2584 +<5c0c> 21450 +<5c0d> 4643 +<5c0e> 3211 +<5c0f> 2454 +<5c11> 2455 +<5c12> 16836 +<5c13> 4644 +<5c14> 14122 +<5c16> 2705 +<5c17> 21451 +<5c19> 13835 +<5c1a> 2456 +<5c1e> 8437 +<5c1f> 19324 +<5c20> 4645 +<5c22> 4646 +<5c23> 14476 +<5c24> 3820 +<5c26> 21452 +<5c28> 4647 +<5c29> 17538 +<5c2a> 19325 +<5c2b> 14477 +<5c2c> 19326 +<5c2d> 1726 +<5c2e> 21453 +<5c30> 14478 +<5c31> 2348 +<5c32> 21454 +<5c35> 21455 +<5c36> 19327 +<5c3a> 2312 +<5c3b> 2546 +<5c3c> 3276 +<5c3d> 2586 +<5c3e> 3468 +<5c3f> 3288 +<5c40> 1729 +<5c41> 4650 +<5c45> 1673 +<5c46> 4651 +endcidchar + +100 begincidchar +<5c48> 1782 +<5c4a> 3239 +<5c4b> 1328 +<5c4d> 2209 +<5c4e> 4652 +<5c4f> 4655 +<5c50> 4654 +<5c51> 1781 +<5c53> 4653 +<5c55> 3122 +<5c59> 19328 +<5c5a> 21456 +<5c5b> 7826 +<5c5c> 19329 +<5c5e> 2832 +<5c5f> 17540 +<5c60> 3141 +<5c61> 2292 +<5c62> 7693 +<5c63> 14479 +<5c64> 2778 +<5c65> 3940 +<5c69> 14480 +<5c6c> 4657 +<5c6d> 19330 +<5c6e> 4658 +<5c6f> 3246 +<5c70> 17543 +<5c71> 2177 +<5c76> 4660 +<5c79> 4661 +<5c7a> 16839 +<5c7b> 21459 +<5c7c> 14481 +<5c7d> 21460 +<5c87> 21461 +<5c88> 17548 +<5c8a> 17549 +<5c8c> 4662 +<5c8f> 16840 +<5c90> 1584 +<5c91> 4663 +<5c92> 21462 +<5c94> 4664 +<5c9d> 21463 +<5c9f> 16841 +<5ca0> 17553 +<5ca1> 1324 +<5ca2> 17554 +<5ca3> 16842 +<5ca6> 8438 +<5ca7> 17555 +<5ca8> 2749 +<5ca9> 1568 +<5caa> 16843 +<5cab> 4666 +<5cac> 3764 +<5cad> 17557 +<5cb1> 2866 +<5cb2> 21464 +<5cb3> 1463 +<5cb4> 21465 +<5cb5> 17558 +<5cb6> 4668 +<5cb7> 4670 +<5cb8> 1563 +<5cba> 8439 +<5cbb> 4667 +<5cbc> 4669 +<5cbe> 4672 +<5cc5> 4671 +<5cc7> 4673 +<5cc9> 17560 +<5ccb> 14482 +<5cd0> 16844 +<5cd2> 14483 +<5cd7> 21466 +<5cd9> 4674 +<5cdd> 19331 +<5ce0> 3221 +<5ce1> 1702 +<5ce6> 14124 +<5ce8> 1381 +<5ce9> 4675 +<5cea> 4680 +<5ced> 4678 +<5cee> 21467 +<5cef> 3655 +<5cf0> 3654 +<5cf4> 14484 +<5cf5> 8440 +<5cf6> 3169 +<5cfa> 4677 +<5cfb> 2398 +<5cfd> 4676 +<5d01> 19332 +<5d06> 17563 +<5d07> 2616 +<5d0b> 4681 +<5d0d> 16846 +endcidchar + +100 begincidchar +<5d0e> 2138 +<5d10> 17564 +<5d11> 4687 +<5d12> 21470 +<5d14> 4688 +<5d15> 4682 +<5d16> 1425 +<5d17> 4683 +<5d18> 4692 +<5d19> 4691 +<5d1a> 4690 +<5d1b> 4686 +<5d1d> 17566 +<5d1f> 4685 +<5d20> 17567 +<5d22> 4689 +<5d23> 21471 +<5d24> 14485 +<5d26> 14486 +<5d27> 8441 +<5d29> 3656 +<5d2b> 17565 +<5d31> 17568 +<5d34> 19333 +<5d39> 17569 +<5d3d> 19334 +<5d3f> 21472 +<5d42> 8444 +<5d43> 14487 +<5d46> 14488 +<5d47> 16847 +<5d48> 21473 +<5d4a> 14489 +<5d4b> 4696 +<5d4c> 4693 +<5d4e> 4695 +<5d50> 3932 +<5d51> 21475 +<5d52> 4694 +<5d53> 8442 +<5d55> 21474 +<5d59> 19335 +<5d5c> 4684 +<5d61> 17571 +<5d62> 21478 +<5d64> 21479 +<5d69> 2617 +<5d6a> 17572 +<5d6c> 4697 +<5d6d> 8445 +<5d6f> 2087 +<5d70> 17574 +<5d73> 4698 +<5d76> 4699 +<5d7e> 19336 +<5d7f> 21482 +<5d81> 16848 +<5d82> 4702 +<5d83> 19337 +<5d84> 4701 +<5d87> 4700 +<5d88> 17577 +<5d8a> 21483 +<5d8b> 3170 +<5d8c> 4679 +<5d90> 4708 +<5d92> 14490 +<5d93> 21484 +<5d94> 14491 +<5d95> 21485 +<5d97> 17579 +<5d99> 14492 +<5d9b> 21486 +<5d9d> 4704 +<5d9f> 21487 +<5da0> 14493 +<5da2> 4703 +<5da4> 16849 +<5da7> 16850 +<5dab> 21488 +<5dac> 4705 +<5dae> 4706 +<5db0> 17580 +<5db2> 15405 +<5db4> 17581 +<5db7> 4709 +<5dba> 4014 +<5dbc> 4710 +<5dbd> 4707 +<5dc3> 21489 +<5dc7> 19338 +<5dc9> 4711 +<5dcb> 16851 +<5dcc> 1564 +<5dcd> 4712 +<5dce> 21490 +<5dd0> 8448 +<5dd1> 17583 +<5dd2> 4714 +<5dd3> 4713 +endcidchar + +100 begincidchar +<5dd6> 4715 +<5dd7> 17584 +<5dd8> 14494 +<5dd9> 21491 +<5ddb> 4716 +<5ddd> 2706 +<5dde> 2349 +<5de0> 14495 +<5de1> 2414 +<5de2> 13362 +<5de3> 2789 +<5de4> 17586 +<5de5> 1979 +<5de6> 2088 +<5de7> 1980 +<5de8> 1674 +<5de9> 17587 +<5deb> 4717 +<5dee> 2089 +<5df1> 1918 +<5df2> 4718 +<5df3> 3762 +<5df4> 3321 +<5df5> 4719 +<5df7> 1981 +<5df8> 14496 +<5df9> 19339 +<5dfb> 1512 +<5dfd> 2917 +<5dfe> 1738 +<5dff> 13794 +<5e00> 14497 +<5e02> 2210 +<5e03> 3533 +<5e06> 3413 +<5e07> 21492 +<5e0b> 4720 +<5e0c> 1585 +<5e0d> 21493 +<5e11> 4723 +<5e12> 14498 +<5e16> 3005 +<5e18> 14501 +<5e19> 4722 +<5e1a> 4721 +<5e1b> 4724 +<5e1d> 3079 +<5e1f> 17591 +<5e20> 21494 +<5e25> 2601 +<5e28> 19340 +<5e2b> 2211 +<5e2d> 2670 +<5e2e> 14502 +<5e2f> 2867 +<5e30> 1596 +<5e32> 19341 +<5e33> 3006 +<5e35> 19342 +<5e38> 2519 +<5e3d> 3687 +<5e3e> 17592 +<5e40> 4729 +<5e43> 4728 +<5e44> 4727 +<5e45> 3567 +<5e47> 4736 +<5e49> 17593 +<5e4b> 21495 +<5e4c> 3720 +<5e4e> 4730 +<5e54> 4732 +<5e55> 3737 +<5e56> 17595 +<5e57> 4731 +<5e58> 14503 +<5e5b> 19343 +<5e5c> 21498 +<5e5e> 16852 +<5e5f> 4733 +<5e61> 3388 +<5e62> 4734 +<5e63> 3598 +<5e64> 4735 +<5e68> 19344 +<5e6a> 19345 +<5e70> 21499 +<5e72> 1519 +<5e73> 3599 +<5e74> 3301 +<5e77> 19346 +<5e78> 1982 +<5e79> 1520 +<5e7a> 4739 +<5e7b> 1900 +<5e7c> 3886 +<5e7d> 3859 +<5e7e> 1586 +<5e7f> 4741 +<5e80> 19347 +endcidchar + +100 begincidchar +<5e81> 3007 +<5e83> 1983 +<5e84> 2457 +<5e87> 3443 +<5e8a> 2458 +<5e8b> 19348 +<5e8e> 21500 +<5e8f> 2434 +<5e95> 3080 +<5e96> 3657 +<5e97> 3123 +<5e99> 14000 +<5e9a> 1984 +<5e9c> 3534 +<5ea0> 4742 +<5ea2> 21501 +<5ea4> 21502 +<5ea5> 17600 +<5ea6> 3155 +<5ea7> 2098 +<5ea8> 14506 +<5eaa> 14507 +<5eab> 1919 +<5eac> 17601 +<5ead> 3081 +<5eb1> 21503 +<5eb3> 19349 +<5eb5> 1159 +<5eb6> 2424 +<5eb7> 1985 +<5eb8> 3889 +<5eb9> 17602 +<5ebd> 19350 +<5ec3> 3335 +<5ec6> 17603 +<5ec8> 4745 +<5ec9> 4031 +<5eca> 4051 +<5ecb> 15390 +<5ecc> 21504 +<5ece> 21505 +<5ecf> 4747 +<5ed0> 4746 +<5ed1> 19351 +<5ed2> 14511 +<5ed3> 1445 +<5ed6> 4748 +<5ed9> 17604 +<5edc> 21506 +<5edd> 4750 +<5ede> 21507 +<5edf> 3506 +<5ee0> 2459 +<5ee1> 4754 +<5ee2> 4753 +<5ee3> 4749 +<5ee5> 21508 +<5eeb> 21509 +<5eec> 4757 +<5ef0> 4760 +<5ef1> 4758 +<5ef3> 4759 +<5ef4> 4761 +<5ef6> 1286 +<5ef7> 3082 +<5ef8> 4762 +<5ef9> 16853 +<5efa> 1872 +<5efb> 1398 +<5efc> 3308 +<5efd> 17606 +<5efe> 4763 +<5eff> 3283 +<5f00> 16854 +<5f01> 3627 +<5f02> 16855 +<5f03> 4764 +<5f04> 4052 +<5f06> 21510 +<5f07> 14512 +<5f08> 17607 +<5f09> 4765 +<5f0a> 3600 +<5f0b> 4768 +<5f0c> 4090 +<5f0d> 4106 +<5f0e> 14513 +<5f0f> 2268 +<5f10> 3277 +<5f11> 4769 +<5f13> 1655 +<5f14> 3008 +<5f15> 1214 +<5f16> 4770 +<5f17> 3574 +<5f18> 1986 +<5f19> 21511 +<5f1b> 2958 +<5f1e> 17609 +<5f1f> 3083 +endcidchar + +100 begincidchar +<5f21> 8449 +<5f22> 14516 +<5f23> 16856 +<5f24> 21512 +<5f25> 3835 +<5f26> 1901 +<5f27> 1920 +<5f28> 14517 +<5f29> 4771 +<5f2d> 4772 +<5f2e> 21515 +<5f2f> 4778 +<5f30> 21516 +<5f31> 2321 +<5f34> 8450 +<5f35> 3009 +<5f36> 14518 +<5f37> 1703 +<5f38> 4773 +<5f3a> 13720 +<5f3b> 14519 +<5f3c> 3485 +<5f3d> 16857 +<5f3e> 2948 +<5f3f> 21517 +<5f40> 14520 +<5f41> 4774 +<5f44> 21518 +<5f45> 8370 +<5f47> 17610 +<5f48> 4775 +<5f4a> 1704 +<5f4c> 4776 +<5f4d> 19354 +<5f4e> 4777 +<5f50> 14521 +<5f51> 4779 +<5f53> 3184 +<5f54> 16858 +<5f58> 14522 +<5f59> 4782 +<5f5b> 21519 +<5f5c> 4767 +<5f5d> 4766 +<5f60> 21520 +<5f61> 4783 +<5f62> 1815 +<5f63> 17611 +<5f64> 14523 +<5f65> 13996 +<5f66> 3481 +<5f67> 8451 +<5f69> 2108 +<5f6a> 3497 +<5f6b> 3010 +<5f6c> 3517 +<5f6d> 4784 +<5f6f> 21521 +<5f70> 2460 +<5f71> 1256 +<5f72> 17612 +<5f73> 4785 +<5f77> 4786 +<5f78> 21524 +<5f79> 3838 +<5f7a> 21525 +<5f7c> 3444 +<5f7d> 16859 +<5f7e> 17613 +<5f7f> 4789 +<5f80> 1311 +<5f81> 2640 +<5f82> 4788 +<5f83> 4787 +<5f84> 1816 +<5f85> 2868 +<5f87> 4793 +<5f88> 4791 +<5f89> 14524 +<5f8a> 4790 +<5f8b> 3951 +<5f8c> 1945 +<5f8d> 21526 +<5f8f> 17614 +<5f90> 2435 +<5f91> 4792 +<5f92> 3142 +<5f93> 2376 +<5f96> 21527 +<5f97> 3224 +<5f98> 4796 +<5f99> 4795 +<5f9c> 14525 +<5f9d> 21528 +<5f9e> 4794 +<5fa0> 4797 +<5fa1> 1946 +<5fa2> 17615 +<5fa4> 14527 +<5fa7> 14526 +endcidchar + +100 begincidchar +<5fa8> 4798 +<5fa9> 3566 +<5faa> 2405 +<5fab> 21529 +<5fac> 19355 +<5fad> 4799 +<5fae> 3469 +<5faf> 14528 +<5fb3> 3225 +<5fb4> 3011 +<5fb5> 13368 +<5fb7> 8452 +<5fb8> 14529 +<5fb9> 3114 +<5fbc> 4800 +<5fbd> 1605 +<5fc3> 2554 +<5fc4> 14530 +<5fc5> 3486 +<5fc7> 17616 +<5fc8> 21532 +<5fc9> 14531 +<5fcb> 17617 +<5fcc> 1587 +<5fcd> 3292 +<5fd6> 4801 +<5fd7> 2212 +<5fdc> 1312 +<5fdd> 4806 +<5fde> 8453 +<5fe0> 2983 +<5fe1> 14532 +<5fe2> 17621 +<5fe4> 4803 +<5fe8> 21535 +<5fe9> 14533 +<5fea> 19356 +<5feb> 1399 +<5fec> 21536 +<5fed> 14534 +<5ff0> 4854 +<5ff1> 4805 +<5ff2> 21537 +<5ff3> 17624 +<5ff5> 3302 +<5ff6> 21538 +<5ff8> 4804 +<5ffa> 21539 +<5ffb> 4802 +<5ffc> 14535 +<5ffd> 2060 +<5fff> 4808 +<6007> 19357 +<600a> 21540 +<600d> 16860 +<600e> 4814 +<600f> 4820 +<6010> 4812 +<6012> 3158 +<6013> 21541 +<6014> 16861 +<6015> 4817 +<6016> 3535 +<6017> 14536 +<6018> 16862 +<6019> 4811 +<601a> 14537 +<601b> 4816 +<601c> 4015 +<601d> 2213 +<601f> 21542 +<6020> 2869 +<6021> 4809 +<6022> 17626 +<6024> 17627 +<6025> 1656 +<6026> 4819 +<6027> 2641 +<6028> 1287 +<6029> 4813 +<602a> 1400 +<602b> 4818 +<602d> 21543 +<602f> 1705 +<6031> 4815 +<6033> 14538 +<6035> 16863 +<603a> 4821 +<6040> 21544 +<6041> 4823 +<6042> 4833 +<6043> 4831 +<6046> 4828 +<6047> 16864 +<6048> 21545 +<6049> 19358 +<604a> 4827 +<604b> 4032 +<604c> 17629 +<604d> 4829 +endcidchar + +100 begincidchar +<6050> 1706 +<6051> 21546 +<6052> 1987 +<6054> 19359 +<6055> 2436 +<6059> 4836 +<605a> 4822 +<605d> 8454 +<605f> 4826 +<6060> 4810 +<6061> 14539 +<6062> 1402 +<6063> 4830 +<6064> 4832 +<6065> 2959 +<6067> 19360 +<6068> 2072 +<6069> 1336 +<606a> 4824 +<606b> 4835 +<606c> 4834 +<606d> 1707 +<606f> 2825 +<6070> 1476 +<6071> 21549 +<6075> 1817 +<6077> 4825 +<607e> 21550 +<607f> 14540 +<6081> 4837 +<6082> 21551 +<6083> 4840 +<6084> 4842 +<6085> 8455 +<6086> 21552 +<6088> 21553 +<6089> 2281 +<608a> 8456 +<608b> 4848 +<608c> 3084 +<608d> 4838 +<608e> 21554 +<6091> 21555 +<6092> 4846 +<6093> 21556 +<6094> 1401 +<6095> 17630 +<6098> 21557 +<609a> 4841 +<609b> 4843 +<609d> 16865 +<609e> 14541 +<609f> 1947 +<60a0> 3860 +<60a2> 21559 +<60a3> 1521 +<60a4> 14542 +<60a5> 21560 +<60a6> 1275 +<60a7> 4847 +<60a8> 17631 +<60a9> 3312 +<60aa> 1137 +<60b0> 14543 +<60b1> 17633 +<60b2> 3445 +<60b3> 4807 +<60b4> 4853 +<60b5> 4857 +<60b6> 3825 +<60b7> 21561 +<60b8> 4850 +<60bb> 19361 +<60bc> 3171 +<60bd> 4855 +<60be> 17634 +<60c2> 21562 +<60c4> 19362 +<60c5> 2520 +<60c6> 4856 +<60c7> 3247 +<60c8> 17635 +<60cb> 14544 +<60d1> 4077 +<60d3> 4852 +<60d4> 16866 +<60d5> 8458 +<60d8> 4858 +<60d9> 17636 +<60da> 2061 +<60db> 14545 +<60dc> 2671 +<60dd> 16867 +<60de> 8457 +<60df> 1176 +<60e0> 4851 +<60e1> 4849 +<60e2> 21567 +<60e3> 2780 +<60e5> 21568 +endcidchar + +100 begincidchar +<60e7> 4839 +<60e8> 2178 +<60ee> 17637 +<60f0> 2854 +<60f1> 4870 +<60f2> 8460 +<60f3> 2781 +<60f4> 4865 +<60f5> 17638 +<60f8> 14546 +<60f9> 2322 +<60fa> 4866 +<60fb> 4869 +<60fc> 21569 +<60fd> 19363 +<6100> 4864 +<6101> 2351 +<6102> 21570 +<6103> 4867 +<6106> 4861 +<6107> 21571 +<6108> 3848 +<6109> 3847 +<610a> 19364 +<610c> 21572 +<610f> 1177 +<6110> 17639 +<6111> 8461 +<6115> 4860 +<6116> 19365 +<6117> 21573 +<6119> 17640 +<611a> 1770 +<611b> 1130 +<611c> 14550 +<611e> 17641 +<611f> 1522 +<6120> 8459 +<6121> 4868 +<6122> 21574 +<6127> 4876 +<6128> 4875 +<612a> 19366 +<612b> 16868 +<612c> 4880 +<6130> 8463 +<6131> 21575 +<6134> 4881 +<6135> 21576 +<6136> 19367 +<6137> 8462 +<6139> 21577 +<613a> 17642 +<613c> 4879 +<613d> 4882 +<613e> 4874 +<613f> 4878 +<6141> 17644 +<6142> 4883 +<6144> 4884 +<6145> 21578 +<6146> 17645 +<6147> 4873 +<6148> 2250 +<6149> 21579 +<614a> 4877 +<614b> 2870 +<614c> 1988 +<614d> 4859 +<614e> 2555 +<6153> 4897 +<6155> 3641 +<615d> 4896 +<615e> 19368 +<615f> 4895 +<6160> 17646 +<6162> 3755 +<6163> 1523 +<6164> 19369 +<6165> 4893 +<6167> 1819 +<6168> 1426 +<616b> 4890 +<616c> 21580 +<616e> 3968 +<616f> 4892 +<6170> 1178 +<6171> 4894 +<6172> 21581 +<6173> 4885 +<6174> 4891 +<6175> 4898 +<6176> 1818 +<6177> 4886 +<6178> 21582 +<617b> 19370 +<617c> 14551 +<617d> 19371 +<617e> 3911 +<617f> 19372 +endcidchar + +100 begincidchar +<6182> 3861 +<6187> 4901 +<618a> 4905 +<618b> 21587 +<618d> 14552 +<618e> 2816 +<6190> 4033 +<6191> 4906 +<6194> 4903 +<6196> 4900 +<6197> 17650 +<6198> 8464 +<6199> 4899 +<619a> 4904 +<619c> 21588 +<619d> 19373 +<619f> 14553 +<61a0> 21589 +<61a4> 3584 +<61a5> 17651 +<61a7> 3212 +<61a8> 14554 +<61a9> 1820 +<61aa> 21590 +<61ab> 4907 +<61ac> 4902 +<61ad> 17652 +<61ae> 4908 +<61b2> 1873 +<61b6> 1329 +<61b8> 19374 +<61b9> 16870 +<61ba> 4916 +<61bc> 16869 +<61be> 1524 +<61c2> 14555 +<61c3> 4914 +<61c6> 4915 +<61c7> 2073 +<61c8> 4913 +<61c9> 4911 +<61ca> 4910 +<61cb> 4917 +<61cc> 4909 +<61cd> 4919 +<61d0> 1403 +<61d5> 17654 +<61dc> 19375 +<61dd> 17655 +<61de> 21595 +<61df> 14556 +<61e1> 21596 +<61e2> 19376 +<61e3> 4921 +<61e5> 19377 +<61e6> 4920 +<61e7> 21597 +<61e8> 19378 +<61e9> 21598 +<61ef> 21601 +<61f2> 3012 +<61f4> 4924 +<61f5> 17656 +<61f6> 4922 +<61f7> 4912 +<61f8> 1874 +<61fa> 4923 +<61fc> 4927 +<61fd> 4926 +<61fe> 4928 +<61ff> 4925 +<6200> 4929 +<6201> 21602 +<6203> 21603 +<6204> 19379 +<6207> 19380 +<620a> 3642 +<620c> 4933 +<620d> 4932 +<620e> 2377 +<6210> 2642 +<6211> 1382 +<6212> 1404 +<6213> 8465 +<6214> 4934 +<6215> 14557 +<6216> 1155 +<621a> 2672 +<621b> 4935 +<621c> 21604 +<621d> 6756 +<621e> 4936 +<621f> 1847 +<6220> 21605 +<6221> 4937 +<6222> 16871 +<6223> 17658 +<6226> 2707 +<6227> 21606 +<6229> 14558 +endcidchar + +100 begincidchar +<622a> 4938 +<622b> 21607 +<622e> 4939 +<622f> 1620 +<6230> 4940 +<6231> 19381 +<6234> 2871 +<6236> 13757 +<6238> 1921 +<6239> 19382 +<623b> 3821 +<623d> 19383 +<623e> 13390 +<623f> 3690 +<6240> 2420 +<6241> 4943 +<6242> 21608 +<6243> 14559 +<6244> 21609 +<6246> 14560 +<6247> 2708 +<6248> 6938 +<6249> 3446 +<624b> 2326 +<624c> 14561 +<624d> 2109 +<624e> 4944 +<6250> 21610 +<6251> 14562 +<6252> 17659 +<6253> 2855 +<6254> 21611 +<6255> 3575 +<6256> 14563 +<6258> 2897 +<625a> 16872 +<625b> 4947 +<625c> 21612 +<625e> 4945 +<6260> 4948 +<6261> 17660 +<6263> 4946 +<6264> 17661 +<6268> 4949 +<626d> 17663 +<626e> 3585 +<626f> 16873 +<6271> 1147 +<6273> 17664 +<6276> 3536 +<6279> 3447 +<627a> 19384 +<627b> 17662 +<627c> 4950 +<627d> 21613 +<627e> 4953 +<627f> 2461 +<6280> 1621 +<6282> 4951 +<6283> 4958 +<6284> 2462 +<6285> 13765 +<6289> 4952 +<628a> 3322 +<6290> 19385 +<6291> 3912 +<6294> 4959 +<6295> 3172 +<6296> 4956 +<6297> 1989 +<6298> 2690 +<6299> 17665 +<629b> 4973 +<629c> 3400 +<629e> 2898 +<62a6> 8466 +<62a8> 19386 +<62ab> 3448 +<62ac> 5042 +<62b1> 3658 +<62b3> 21617 +<62b5> 3085 +<62b9> 3747 +<62ba> 21620 +<62bb> 4962 +<62bc> 1313 +<62bd> 2984 +<62c2> 4971 +<62c4> 14564 +<62c5> 2930 +<62c6> 4965 +<62c7> 4972 +<62c8> 4967 +<62c9> 4974 +<62ca> 4970 +<62cc> 4969 +<62cd> 3365 +<62ce> 21623 +<62cf> 4963 +<62d0> 1405 +endcidchar + +100 begincidchar +<62d1> 4961 +<62d2> 1675 +<62d3> 2899 +<62d4> 4957 +<62d5> 17666 +<62d6> 16874 +<62d7> 4960 +<62d8> 1990 +<62d9> 2687 +<62da> 19387 +<62db> 2463 +<62dc> 4968 +<62dd> 3336 +<62e0> 1676 +<62e1> 1446 +<62ea> 21624 +<62ec> 1477 +<62ed> 2535 +<62ee> 4976 +<62ef> 4981 +<62f1> 4977 +<62f2> 21625 +<62f3> 1875 +<62f4> 19388 +<62f5> 4982 +<62f6> 2160 +<62f7> 2043 +<62fc> 14565 +<62fd> 17668 +<62fe> 2352 +<62ff> 4964 +<6301> 2251 +<6302> 4979 +<6303> 17669 +<6304> 21626 +<6307> 2214 +<6308> 4980 +<6309> 1160 +<630a> 14566 +<630b> 21627 +<630c> 4975 +<630d> 14567 +<6310> 17670 +<6311> 3013 +<6313> 21628 +<6316> 19389 +<6318> 14568 +<6319> 1677 +<631b> 14135 +<631f> 1708 +<6327> 4978 +<6328> 1131 +<6329> 21629 +<632a> 19390 +<632b> 2099 +<632d> 21630 +<632f> 2556 +<6332> 17673 +<6335> 17674 +<6336> 19391 +<6339> 14569 +<633a> 3086 +<633d> 3432 +<633e> 4984 +<633f> 2784 +<6341> 17677 +<6344> 17678 +<6346> 19392 +<6349> 2826 +<634a> 21631 +<634b> 19393 +<634c> 2169 +<634d> 4985 +<634e> 17679 +<634f> 4987 +<6350> 4983 +<6352> 21632 +<6353> 19394 +<6354> 21633 +<6355> 3633 +<6357> 3033 +<6358> 21634 +<6359> 17681 +<635b> 21635 +<635c> 2782 +<6365> 14572 +<6366> 21636 +<6367> 3659 +<6368> 2298 +<6369> 4999 +<636b> 4998 +<636c> 17684 +<636d> 21637 +<636e> 2622 +<6371> 19395 +<6372> 1876 +<6374> 14573 +<6375> 19396 +<6376> 4992 +<6377> 2465 +endcidchar + +100 begincidchar +<6378> 21638 +<637a> 3264 +<637b> 3303 +<637c> 16875 +<637d> 14574 +<637f> 19397 +<6380> 4990 +<6382> 19398 +<6383> 2783 +<6384> 14575 +<6387> 14576 +<6388> 2340 +<6389> 4995 +<638a> 19399 +<638c> 2464 +<638e> 4989 +<638f> 4994 +<6390> 14577 +<6392> 3337 +<6394> 17687 +<6395> 21639 +<6396> 4988 +<6398> 1783 +<6399> 17685 +<639a> 21640 +<639b> 1467 +<639e> 14578 +<639f> 4996 +<63a0> 3955 +<63a1> 2110 +<63a2> 2931 +<63a3> 4993 +<63a4> 21641 +<63a5> 2688 +<63a6> 21642 +<63a7> 1991 +<63a8> 2602 +<63a9> 1288 +<63aa> 2750 +<63ab> 4991 +<63ac> 1631 +<63ad> 21643 +<63b2> 1821 +<63b4> 3051 +<63b5> 4997 +<63bb> 2785 +<63bd> 17688 +<63be> 5000 +<63c0> 5002 +<63c1> 21644 +<63c3> 2839 +<63c4> 5008 +<63c5> 21645 +<63c6> 5003 +<63c8> 21646 +<63c9> 5005 +<63ce> 21647 +<63cf> 3507 +<63d0> 3087 +<63d1> 14579 +<63d2> 5006 +<63d3> 21648 +<63d6> 3862 +<63da> 3890 +<63db> 1525 +<63dc> 14580 +<63e0> 17691 +<63e1> 1138 +<63e3> 5004 +<63e5> 16876 +<63e9> 5001 +<63ea> 19402 +<63ed> 13340 +<63ee> 1588 +<63f2> 17694 +<63f3> 21649 +<63f4> 1289 +<63f5> 8467 +<63f6> 5007 +<63f7> 13892 +<63fa> 3891 +<6406> 5011 +<6409> 14581 +<640a> 21650 +<640d> 2843 +<640f> 5018 +<6410> 14582 +<6412> 19405 +<6413> 5012 +<6414> 7724 +<6416> 5009 +<6417> 5016 +<6418> 19406 +<641c> 4986 +<641e> 17695 +<6420> 19407 +<6422> 14583 +<6424> 19408 +<6425> 17696 +<6426> 5013 +endcidchar + +100 begincidchar +<6428> 5017 +<6429> 17697 +<642a> 19409 +<642c> 3414 +<642d> 3173 +<642f> 17698 +<6430> 21651 +<6434> 5010 +<6435> 19410 +<6436> 5014 +<643a> 1822 +<643d> 19411 +<643e> 2145 +<643f> 19412 +<6442> 2689 +<644b> 21652 +<644e> 5022 +<644f> 21653 +<6451> 7747 +<6452> 19413 +<6453> 21654 +<6454> 14584 +<6458> 3104 +<645a> 17699 +<645b> 14585 +<645c> 21655 +<645d> 17700 +<645f> 19414 +<6460> 8468 +<6461> 21656 +<6463> 21657 +<6467> 5019 +<6469> 3726 +<646d> 14586 +<646f> 5020 +<6473> 17701 +<6474> 19415 +<6476> 5021 +<6478> 3802 +<6479> 16877 +<647a> 2630 +<647b> 14587 +<647d> 17702 +<6483> 1848 +<6485> 21658 +<6487> 17703 +<6488> 5028 +<648f> 21659 +<6490> 19416 +<6491> 17704 +<6492> 2179 +<6493> 5025 +<6495> 5024 +<649a> 3304 +<649b> 21660 +<649d> 8469 +<649e> 3213 +<649f> 17705 +<64a1> 21661 +<64a3> 21662 +<64a4> 3115 +<64a5> 5026 +<64a6> 21663 +<64a8> 21664 +<64a9> 5027 +<64ab> 3553 +<64ac> 19419 +<64ad> 3323 +<64ae> 2161 +<64b0> 2709 +<64b2> 3710 +<64b3> 19420 +<64b9> 1447 +<64bb> 5034 +<64bc> 5029 +<64bd> 21665 +<64c1> 3892 +<64c2> 5036 +<64c4> 16878 +<64c5> 5032 +<64c7> 5033 +<64c9> 21666 +<64ca> 13341 +<64cd> 2786 +<64ce> 8470 +<64d0> 16879 +<64d1> 21667 +<64d2> 5031 +<64d4> 4966 +<64d5> 17708 +<64d7> 17709 +<64d8> 5035 +<64da> 5030 +<64e2> 3105 +<64e3> 5043 +<64e4> 17711 +<64e5> 14590 +<64e6> 2162 +<64e7> 5038 +<64ec> 1622 +endcidchar + +100 begincidchar +<64ed> 19421 +<64ef> 5044 +<64f0> 19422 +<64f1> 5037 +<64f2> 5048 +<64f4> 5047 +<64f5> 21670 +<64f6> 5046 +<64f7> 14591 +<64fa> 5049 +<64fb> 14592 +<64fd> 5051 +<64fe> 2521 +<64ff> 17712 +<6500> 5050 +<6501> 21671 +<6504> 14593 +<6505> 5054 +<650f> 17714 +<6513> 21675 +<6514> 17715 +<6516> 14594 +<6518> 5052 +<6519> 14595 +<651b> 19423 +<651c> 5053 +<651d> 5015 +<651e> 17717 +<651f> 19424 +<6522> 7831 +<6523> 5056 +<6524> 5055 +<6526> 21676 +<6529> 16880 +<652a> 5023 +<652b> 5057 +<652c> 5045 +<652e> 19425 +<652f> 2215 +<6531> 21677 +<6532> 17718 +<6536> 5061 +<6537> 5060 +<6538> 5062 +<6539> 1406 +<653a> 21678 +<653b> 1992 +<653e> 3660 +<653f> 2643 +<6543> 21681 +<6544> 17719 +<6545> 1922 +<6547> 14596 +<6548> 5064 +<6549> 19426 +<654d> 5067 +<654e> 8471 +<654f> 3524 +<6550> 21682 +<6551> 1657 +<6552> 21683 +<6554> 17720 +<6555> 5066 +<6556> 5065 +<6557> 3338 +<6558> 5068 +<6559> 1709 +<655d> 5070 +<655e> 5069 +<655f> 21684 +<6560> 19427 +<6562> 1526 +<6563> 2180 +<6566> 3248 +<6567> 14597 +<656b> 17721 +<656c> 1823 +<6570> 2618 +<6572> 5071 +<6574> 2644 +<6575> 3106 +<6577> 3537 +<6578> 5072 +<657a> 17722 +<657d> 21685 +<6581> 14598 +<6584> 17723 +<6585> 14599 +<6587> 3592 +<6588> 4620 +<6589> 2666 +<658a> 17724 +<658c> 3518 +<658e> 2120 +<6590> 3449 +<6591> 3415 +<6592> 19428 +<6595> 19429 +<6597> 3143 +<6598> 21686 +endcidchar + +100 begincidchar +<6599> 3977 +<659b> 5076 +<659c> 2300 +<659d> 16881 +<659f> 5077 +<65a0> 21687 +<65a1> 1146 +<65a3> 21688 +<65a4> 1740 +<65a5> 2673 +<65a6> 21689 +<65a7> 3538 +<65ab> 5078 +<65ac> 2192 +<65ad> 2949 +<65ae> 21690 +<65af> 2217 +<65b0> 2557 +<65b2> 17725 +<65b3> 21691 +<65b4> 19430 +<65b5> 17726 +<65b7> 5079 +<65b8> 17727 +<65b9> 3661 +<65bc> 1305 +<65bd> 2218 +<65be> 19431 +<65bf> 17728 +<65c1> 5082 +<65c2> 14600 +<65c3> 5080 +<65c4> 5083 +<65c5> 3969 +<65c6> 5081 +<65c8> 19432 +<65c9> 17729 +<65cb> 2719 +<65cc> 5084 +<65ce> 19433 +<65cf> 2834 +<65d0> 19434 +<65d2> 5085 +<65d4> 17730 +<65d6> 21692 +<65d7> 1590 +<65d8> 21693 +<65d9> 5087 +<65db> 5086 +<65df> 19435 +<65e2> 1591 +<65e3> 13701 +<65e5> 3284 +<65e6> 2932 +<65e7> 1670 +<65e8> 2219 +<65e9> 2787 +<65ec> 2406 +<65ed> 1140 +<65f0> 14601 +<65f1> 5090 +<65f2> 14602 +<65f9> 17732 +<65fa> 1314 +<65fb> 5094 +<65fc> 17733 +<6600> 8472 +<6602> 1993 +<6603> 5093 +<6604> 17734 +<6606> 2075 +<6607> 2466 +<6608> 17735 +<6609> 8474 +<660a> 5092 +<660c> 2467 +<660d> 21699 +<660e> 3788 +<660f> 2074 +<6613> 1179 +<6614> 2674 +<6615> 8473 +<6616> 21702 +<661c> 5099 +<661d> 21703 +<661e> 20304 +<661f> 2645 +<6620> 1257 +<6621> 17736 +<6622> 16883 +<6623> 21704 +<6624> 8477 +<6625> 2399 +<6626> 21705 +<6627> 3732 +<6628> 2146 +<6629> 21706 +<662a> 17737 +<662b> 16884 +<662c> 14603 +endcidchar + +100 begincidchar +<662d> 2468 +<662e> 8475 +<662f> 2635 +<6630> 16885 +<6631> 8366 +<6633> 16886 +<6634> 5098 +<6637> 21708 +<6639> 21707 +<663a> 16882 +<663b> 7680 +<663c> 2985 +<663f> 5129 +<6640> 21709 +<6641> 5103 +<6642> 2252 +<6643> 1994 +<6644> 5101 +<6645> 17738 +<6646> 21710 +<6648> 16887 +<6649> 5102 +<664a> 21711 +<664b> 2558 +<664c> 14604 +<664e> 17740 +<664f> 5100 +<6651> 17739 +<6652> 2173 +<6657> 8479 +<6658> 21712 +<6659> 8480 +<665a> 13377 +<665d> 5105 +<665e> 5104 +<665f> 5109 +<6660> 21713 +<6661> 14607 +<6662> 5110 +<6663> 14138 +<6664> 5106 +<6665> 8478 +<6666> 1408 +<6669> 3433 +<666a> 17745 +<666b> 14608 +<666e> 3539 +<666f> 1824 +<6670> 5111 +<6673> 8482 +<6674> 2646 +<6675> 21714 +<6676> 2469 +<6679> 21716 +<667a> 2960 +<667b> 17748 +<667c> 21717 +<667e> 19436 +<667f> 21715 +<6680> 17749 +<6681> 1727 +<6683> 5112 +<6684> 5116 +<6687> 1355 +<6688> 5113 +<6689> 5115 +<668d> 16891 +<668e> 5114 +<6690> 17750 +<6691> 2421 +<6692> 17751 +<6696> 2950 +<6697> 1161 +<6698> 5117 +<6699> 8483 +<669d> 5118 +<669f> 21721 +<66a0> 8484 +<66a2> 3014 +<66a4> 14610 +<66a6> 4025 +<66ab> 2193 +<66ad> 17753 +<66ae> 3643 +<66b1> 17754 +<66b2> 8485 +<66b3> 19439 +<66b4> 3691 +<66b5> 17755 +<66b8> 5125 +<66b9> 5120 +<66bb> 16892 +<66bc> 5123 +<66be> 5122 +<66bf> 8486 +<66c0> 19440 +<66c1> 5119 +<66c4> 5124 +<66c6> 13397 +<66c7> 3254 +endcidchar + +100 begincidchar +<66c8> 14611 +<66c9> 5121 +<66cc> 21725 +<66ce> 21726 +<66cf> 19441 +<66d4> 21727 +<66d6> 5126 +<66d9> 2422 +<66da> 5127 +<66db> 16893 +<66dc> 3893 +<66dd> 3374 +<66df> 21728 +<66e0> 5128 +<66e6> 5130 +<66e8> 16894 +<66e9> 5131 +<66eb> 21729 +<66ec> 14612 +<66ee> 21730 +<66f0> 5132 +<66f2> 1730 +<66f3> 1258 +<66f4> 1995 +<66f5> 5133 +<66f7> 5134 +<66f8> 2427 +<66f9> 2788 +<66fa> 8487 +<66fb> 8369 +<66fc> 4333 +<66fd> 2752 +<66fe> 2751 +<66ff> 2872 +<6700> 2103 +<6701> 17759 +<6703> 4171 +<6705> 14613 +<6707> 21731 +<6708> 1860 +<6709> 3863 +<670b> 3662 +<670d> 3568 +<670e> 8488 +<670f> 5135 +<6712> 17760 +<6713> 14614 +<6714> 2147 +<6715> 3035 +<6716> 5136 +<6717> 4053 +<6719> 17762 +<671b> 3692 +<671c> 21732 +<671d> 3015 +<671e> 5137 +<671f> 1592 +<6720> 21733 +<6722> 21734 +<6725> 19442 +<6728> 3814 +<672a> 3760 +<672b> 3748 +<672c> 3722 +<672d> 2163 +<672e> 5141 +<6731> 2327 +<6733> 14615 +<6734> 3711 +<6735> 19443 +<6736> 5143 +<6737> 5146 +<6738> 5145 +<673a> 1589 +<673d> 1658 +<673e> 21735 +<673f> 5142 +<6741> 5144 +<6743> 13751 +<6745> 21736 +<6746> 5147 +<6747> 16895 +<6748> 14616 +<6749> 2623 +<674c> 14617 +<674d> 17765 +<674e> 3941 +<674f> 1165 +<6750> 2128 +<6751> 2844 +<6753> 2313 +<6754> 17766 +<6755> 19444 +<6756> 2523 +<6759> 5150 +<675c> 3144 +<675d> 17767 +<675e> 5148 +<675f> 2827 +<6760> 5149 +endcidchar + +100 begincidchar +<6761> 2522 +<6762> 3817 +<6765> 3922 +<6766> 8490 +<676a> 5157 +<676c> 21737 +<676d> 1996 +<676e> 13681 +<676f> 3339 +<6770> 5154 +<6771> 3174 +<6772> 5091 +<6773> 5095 +<6774> 17771 +<6775> 1641 +<6776> 14618 +<6777> 3325 +<677b> 14619 +<677c> 5156 +<677e> 2470 +<677f> 3416 +<6780> 19445 +<6781> 16896 +<6784> 21738 +<6785> 5162 +<6787> 3470 +<6789> 5153 +<678b> 5159 +<678c> 5158 +<678e> 21739 +<678f> 19446 +<6790> 2675 +<6791> 19447 +<6792> 17773 +<6793> 16897 +<6795> 3739 +<6796> 21740 +<6797> 3995 +<6798> 16898 +<6799> 21741 +<679a> 3733 +<679b> 16899 +<679c> 1356 +<679d> 2220 +<67a0> 4078 +<67a1> 5161 +<67a2> 2619 +<67a4> 19448 +<67a6> 5160 +<67a9> 5155 +<67af> 1923 +<67b0> 14620 +<67b1> 19449 +<67b2> 14621 +<67b3> 5167 +<67b4> 5165 +<67b5> 19450 +<67b6> 1357 +<67b7> 5163 +<67b8> 5169 +<67b9> 5175 +<67bb> 8491 +<67be> 19451 +<67c0> 8493 +<67c1> 2856 +<67c2> 21744 +<67c3> 17777 +<67c4> 3601 +<67c5> 21745 +<67c6> 5177 +<67c8> 17778 +<67c9> 21746 +<67ca> 3476 +<67ce> 5176 +<67cf> 3366 +<67d0> 3693 +<67d1> 1527 +<67d2> 17779 +<67d3> 2715 +<67d4> 2378 +<67d7> 14623 +<67d8> 3055 +<67d9> 14624 +<67da> 3864 +<67db> 17780 +<67dc> 21747 +<67dd> 5172 +<67de> 5171 +<67e1> 21748 +<67e2> 5173 +<67e4> 5170 +<67e6> 21749 +<67e7> 5178 +<67e9> 5168 +<67ec> 5166 +<67ee> 5174 +<67ef> 5164 +<67f0> 14625 +<67f1> 2986 +<67f2> 21750 +endcidchar + +100 begincidchar +<67f3> 3844 +<67f4> 2290 +<67f5> 2148 +<67f6> 21751 +<67f7> 17781 +<67f9> 14622 +<67fa> 7834 +<67fb> 2090 +<67fc> 16900 +<67fe> 3741 +<67ff> 1439 +<6801> 14066 +<6802> 3050 +<6803> 3234 +<6804> 1259 +<6805> 7687 +<6810> 17776 +<6813> 2710 +<6814> 21752 +<6816> 2648 +<6817> 1792 +<6818> 17785 +<6819> 21753 +<681d> 16901 +<681e> 5180 +<681f> 17786 +<6821> 1997 +<6822> 1498 +<6827> 21754 +<6828> 19452 +<6829> 5182 +<682a> 1490 +<682b> 5188 +<682c> 14626 +<682d> 17787 +<682f> 21755 +<6832> 5185 +<6833> 17789 +<6834> 2711 +<6838> 1449 +<6839> 2076 +<683b> 17790 +<683c> 1448 +<683d> 2111 +<683e> 17791 +<683f> 21756 +<6840> 5183 +<6841> 1851 +<6842> 1825 +<6843> 3175 +<6844> 8495 +<6845> 17792 +<6846> 5181 +<6848> 1162 +<6849> 17793 +<684a> 21757 +<684c> 17794 +<684d> 5184 +<684e> 5186 +<6850> 1733 +<6851> 1794 +<6852> 8492 +<6853> 1528 +<6854> 1637 +<6855> 17795 +<6857> 17796 +<6858> 21758 +<6859> 5189 +<685b> 14629 +<685c> 2153 +<685d> 3743 +<685f> 2181 +<6863> 5190 +<6867> 3490 +<686b> 17798 +<686e> 17799 +<6872> 14630 +<6874> 5202 +<6875> 14631 +<6876> 1331 +<6877> 5191 +<6879> 21762 +<687a> 14632 +<687b> 21763 +<687c> 17800 +<687e> 5208 +<687f> 5192 +<6881> 3978 +<6882> 17801 +<6883> 5199 +<6884> 14633 +<6885> 3349 +<6886> 19453 +<6888> 21764 +<688d> 5207 +<688e> 7836 +<688f> 5194 +<6890> 17802 +<6893> 1144 +<6894> 5196 +endcidchar + +100 begincidchar +<6896> 17803 +<6897> 1998 +<689b> 5198 +<689c> 17808 +<689d> 5197 +<689f> 5193 +<68a0> 5204 +<68a1> 21765 +<68a2> 2471 +<68a3> 16902 +<68a5> 14634 +<68a6> 4542 +<68a7> 1948 +<68a8> 3942 +<68a9> 21766 +<68ad> 5195 +<68ae> 21767 +<68af> 3088 +<68b0> 1409 +<68b1> 2077 +<68b2> 14635 +<68b3> 5187 +<68b4> 17811 +<68b5> 5203 +<68b6> 1471 +<68b9> 5201 +<68ba> 5205 +<68bb> 17812 +<68bc> 3176 +<68c3> 17816 +<68c4> 1594 +<68c5> 17817 +<68c6> 5235 +<68c8> 8367 +<68c9> 3797 +<68ca> 5210 +<68cb> 1593 +<68cc> 17818 +<68cd> 5217 +<68cf> 8496 +<68d0> 14636 +<68d1> 21768 +<68d2> 3694 +<68d3> 21769 +<68d4> 5218 +<68d5> 5220 +<68d6> 14637 +<68d7> 5224 +<68d8> 5212 +<68d9> 17819 +<68da> 2920 +<68df> 3177 +<68e0> 5228 +<68e1> 5215 +<68e3> 5225 +<68e7> 5219 +<68e8> 14638 +<68ea> 21772 +<68eb> 19454 +<68ec> 17822 +<68ed> 14639 +<68ee> 2559 +<68ef> 5229 +<68f2> 2647 +<68f5> 19455 +<68f6> 21773 +<68f7> 17823 +<68f9> 5227 +<68fa> 1529 +<68fb> 17813 +<68fc> 14642 +<68fd> 21774 +<6900> 4086 +<6901> 5209 +<6903> 17824 +<6904> 5223 +<6905> 1180 +<6906> 21775 +<6907> 17825 +<6908> 5211 +<6909> 21776 +<690a> 16903 +<690b> 3782 +<690c> 5216 +<690d> 2536 +<690e> 3043 +<690f> 5206 +<6910> 21777 +<6911> 14643 +<6912> 5222 +<6913> 14644 +<6916> 21778 +<6917> 19456 +<6919> 2624 +<691a> 5232 +<691b> 1487 +<691c> 1877 +<6921> 5234 +<6922> 5213 +<6923> 5233 +endcidchar + +100 begincidchar +<6925> 5226 +<6926> 5214 +<6928> 5230 +<692a> 5231 +<6930> 5248 +<6931> 21779 +<6933> 19457 +<6934> 3238 +<6935> 14645 +<6936> 5221 +<6938> 19458 +<6939> 5244 +<693b> 14646 +<693d> 5246 +<693f> 3060 +<6942> 16906 +<6945> 21780 +<6946> 17829 +<6949> 16904 +<694a> 3894 +<694e> 21781 +<6953> 3560 +<6954> 5241 +<6955> 2858 +<6957> 14647 +<6959> 5247 +<695a> 2753 +<695b> 19459 +<695c> 5238 +<695d> 5251 +<695e> 5250 +<6960> 3271 +<6961> 5249 +<6962> 3266 +<6963> 14648 +<6964> 16907 +<6965> 19460 +<6966> 21782 +<6968> 8498 +<6969> 17830 +<696a> 5253 +<696b> 5240 +<696c> 17831 +<696d> 1728 +<696e> 5243 +<696f> 2407 +<6972> 14649 +<6973> 3350 +<6974> 5245 +<6975> 1731 +<6977> 5237 +<6978> 5239 +<6979> 5236 +<697a> 17832 +<697b> 21785 +<697c> 4054 +<697d> 1464 +<697e> 5242 +<6981> 5252 +<6982> 1427 +<6986> 14144 +<698a> 2135 +<698d> 21786 +<698e> 1279 +<6991> 5269 +<6992> 17833 +<6994> 4055 +<6995> 5272 +<6996> 17835 +<6998> 8500 +<699b> 2560 +<699c> 5271 +<69a0> 5270 +<69a1> 21787 +<69a5> 16908 +<69a6> 14652 +<69a7> 5267 +<69a8> 19461 +<69ab> 19462 +<69ad> 14653 +<69ae> 5255 +<69af> 19463 +<69b0> 17836 +<69b1> 5284 +<69b2> 5254 +<69b4> 5273 +<69b7> 14654 +<69b8> 21788 +<69ba> 17837 +<69bb> 5265 +<69bc> 17838 +<69be> 5260 +<69bf> 5257 +<69c0> 17839 +<69c1> 5258 +<69c3> 5266 +<69c5> 21789 +<69c7> 7475 +<69c8> 21790 +<69ca> 5263 +endcidchar + +100 begincidchar +<69cb> 1999 +<69cc> 3044 +<69cd> 2790 +<69ce> 5261 +<69cf> 16909 +<69d0> 5256 +<69d1> 17840 +<69d3> 5259 +<69d8> 3895 +<69d9> 3736 +<69dd> 5264 +<69de> 5274 +<69e2> 8501 +<69e3> 17844 +<69e5> 19464 +<69e7> 5282 +<69e8> 5275 +<69e9> 16912 +<69ea> 13329 +<69eb> 5288 +<69ed> 5286 +<69f1> 19465 +<69f2> 5281 +<69f3> 17847 +<69f4> 17849 +<69f5> 16913 +<69f6> 14143 +<69f9> 5280 +<69fb> 3052 +<69fd> 2791 +<69fe> 17850 +<69ff> 5278 +<6a00> 21792 +<6a01> 14657 +<6a02> 5276 +<6a03> 21793 +<6a05> 5283 +<6a0a> 5289 +<6a0b> 3465 +<6a0c> 5295 +<6a0f> 14658 +<6a11> 17851 +<6a12> 5290 +<6a13> 5293 +<6a14> 5287 +<6a15> 14659 +<6a17> 2994 +<6a19> 3498 +<6a1a> 17852 +<6a1b> 5277 +<6a1d> 17853 +<6a1e> 5285 +<6a1f> 2472 +<6a20> 21794 +<6a21> 3803 +<6a22> 5305 +<6a23> 5292 +<6a24> 21795 +<6a28> 14660 +<6a29> 1878 +<6a2a> 1315 +<6a2b> 1469 +<6a2e> 5268 +<6a30> 8502 +<6a34> 14661 +<6a35> 2473 +<6a36> 5297 +<6a37> 21796 +<6a38> 5304 +<6a39> 2341 +<6a3a> 1488 +<6a3b> 16915 +<6a3d> 2924 +<6a3e> 14662 +<6a3f> 17857 +<6a44> 5294 +<6a45> 14663 +<6a46> 8504 +<6a47> 5299 +<6a48> 5303 +<6a49> 17858 +<6a4a> 19466 +<6a4b> 1710 +<6a4e> 17860 +<6a52> 17861 +<6a54> 15412 +<6a55> 19467 +<6a56> 14666 +<6a58> 1638 +<6a59> 5301 +<6a5b> 14667 +<6a5f> 1595 +<6a61> 3235 +<6a62> 5300 +<6a64> 17862 +<6a66> 5302 +<6a67> 19468 +<6a6a> 21798 +<6a6b> 8503 +<6a71> 19469 +endcidchar + +100 begincidchar +<6a72> 5296 +<6a73> 8505 +<6a78> 5298 +<6a7a> 17859 +<6a7e> 8506 +<6a7f> 1470 +<6a80> 2951 +<6a81> 21799 +<6a83> 14668 +<6a84> 5309 +<6a89> 14669 +<6a8b> 17864 +<6a8d> 5307 +<6a8e> 1949 +<6a90> 5306 +<6a91> 14670 +<6a94> 16917 +<6a97> 5312 +<6a9b> 21802 +<6a9c> 5179 +<6aa0> 5308 +<6aa1> 17866 +<6aa5> 16918 +<6aaa> 5323 +<6aab> 17868 +<6aac> 5319 +<6aae> 5200 +<6aaf> 19470 +<6ab3> 5318 +<6ab4> 21805 +<6ab8> 5317 +<6abb> 5314 +<6abd> 17869 +<6ac1> 5291 +<6ac2> 5316 +<6ac3> 5315 +<6ac6> 17870 +<6acc> 21808 +<6ad0> 17872 +<6ad1> 5321 +<6ad3> 4044 +<6ad4> 17871 +<6ada> 5324 +<6adb> 1779 +<6adc> 14674 +<6add> 17873 +<6ade> 5320 +<6adf> 5322 +<6ae2> 8507 +<6ae4> 8508 +<6ae7> 14675 +<6ae8> 3387 +<6aea> 5325 +<6aec> 14676 +<6af0> 21811 +<6af8> 20152 +<6afa> 5329 +<6afb> 5326 +<6afc> 21812 +<6afd> 17879 +<6b02> 21813 +<6b03> 19473 +<6b04> 3933 +<6b05> 5327 +<6b09> 21816 +<6b0a> 5279 +<6b0b> 17881 +<6b12> 5330 +<6b16> 5331 +<6b17> 17886 +<6b1b> 16920 +<6b1d> 1239 +<6b1e> 14677 +<6b1f> 5333 +<6b20> 1853 +<6b21> 2253 +<6b23> 1741 +<6b24> 14678 +<6b27> 1316 +<6b28> 21817 +<6b2b> 21818 +<6b2c> 16921 +<6b2f> 17888 +<6b32> 3913 +<6b35> 14679 +<6b36> 21819 +<6b37> 5335 +<6b38> 5334 +<6b39> 5337 +<6b3a> 1623 +<6b3b> 19474 +<6b3d> 1742 +<6b3e> 1530 +<6b3f> 19475 +<6b43> 5340 +<6b46> 14680 +<6b47> 5339 +<6b49> 5341 +<6b4a> 17889 +<6b4c> 1358 +endcidchar + +100 begincidchar +<6b4d> 21820 +<6b4e> 2933 +<6b50> 5342 +<6b52> 21821 +<6b53> 1531 +<6b54> 5344 +<6b56> 14681 +<6b58> 17890 +<6b59> 5343 +<6b5b> 5345 +<6b5d> 21822 +<6b5f> 5346 +<6b60> 14682 +<6b61> 5347 +<6b62> 2221 +<6b63> 2649 +<6b64> 2065 +<6b65> 13386 +<6b66> 3554 +<6b67> 16922 +<6b69> 3634 +<6b6a> 4074 +<6b6b> 21823 +<6b6c> 17891 +<6b6e> 21824 +<6b6f> 2243 +<6b70> 21825 +<6b72> 13785 +<6b73> 2112 +<6b74> 4026 +<6b75> 17892 +<6b77> 13398 +<6b7a> 17893 +<6b7b> 2222 +<6b81> 17894 +<6b82> 14683 +<6b83> 5353 +<6b84> 5352 +<6b85> 21826 +<6b86> 3718 +<6b89> 2408 +<6b8a> 2328 +<6b8b> 2194 +<6b8d> 5354 +<6b95> 5356 +<6b96> 2537 +<6b97> 21827 +<6b98> 5355 +<6b9b> 17895 +<6b9e> 5357 +<6ba4> 5358 +<6ba8> 21832 +<6ba9> 16923 +<6bac> 21833 +<6bad> 16924 +<6bae> 17896 +<6baf> 5361 +<6bb0> 19478 +<6bb1> 5363 +<6bb2> 5362 +<6bb3> 5364 +<6bb4> 1317 +<6bb5> 2952 +<6bb7> 5365 +<6bba> 2164 +<6bbb> 1450 +<6bbc> 5366 +<6bbd> 17898 +<6bbe> 14684 +<6bbf> 3132 +<6bc0> 4509 +<6bc5> 1597 +<6bc6> 5367 +<6bcb> 5368 +<6bcc> 14148 +<6bcd> 3644 +<6bce> 3734 +<6bcf> 13388 +<6bd2> 3231 +<6bd3> 5369 +<6bd4> 3450 +<6bd6> 8509 +<6bd7> 16925 +<6bd8> 3471 +<6bda> 17902 +<6bdb> 3807 +<6bdf> 5370 +<6be1> 14685 +<6be3> 21838 +<6beb> 5372 +<6bec> 5371 +<6bee> 17905 +<6bef> 5374 +<6bf1> 14686 +<6bf3> 5373 +<6bf7> 19479 +<6bf9> 19480 +<6bff> 16926 +<6c02> 17906 +<6c04> 19481 +endcidchar + +100 begincidchar +<6c05> 16927 +<6c08> 5376 +<6c09> 19482 +<6c0a> 17907 +<6c0d> 19483 +<6c0e> 17908 +<6c0f> 2223 +<6c10> 14687 +<6c11> 3773 +<6c12> 21839 +<6c17> 1598 +<6c19> 21840 +<6c1b> 5379 +<6c1f> 21841 +<6c23> 5381 +<6c24> 5380 +<6c2c> 19484 +<6c2e> 21845 +<6c33> 14688 +<6c34> 2603 +<6c35> 14689 +<6c36> 17909 +<6c37> 3499 +<6c38> 1260 +<6c3a> 20309 +<6c3b> 21846 +<6c3e> 3417 +<6c3f> 8510 +<6c40> 3089 +<6c41> 2379 +<6c42> 1659 +<6c4a> 19485 +<6c4b> 21847 +<6c4d> 17911 +<6c4e> 3418 +<6c4f> 21848 +<6c50> 2266 +<6c52> 19486 +<6c54> 19487 +<6c55> 5383 +<6c57> 1532 +<6c59> 14691 +<6c5a> 1306 +<6c5b> 17912 +<6c5c> 8511 +<6c5d> 3274 +<6c5e> 5382 +<6c5f> 2000 +<6c60> 2961 +<6c62> 5384 +<6c67> 17930 +<6c68> 5392 +<6c6a> 5385 +<6c6b> 21849 +<6c6d> 17913 +<6c6f> 8513 +<6c70> 2849 +<6c72> 1660 +<6c73> 5393 +<6c74> 16928 +<6c76> 14692 +<6c78> 21850 +<6c79> 19488 +<6c7a> 1854 +<6c7b> 14693 +<6c7d> 1599 +<6c7e> 5391 +<6c81> 5389 +<6c82> 5386 +<6c83> 3914 +<6c84> 17914 +<6c85> 14694 +<6c86> 8512 +<6c87> 21851 +<6c88> 3036 +<6c89> 17915 +<6c8c> 3249 +<6c8d> 5387 +<6c90> 5395 +<6c92> 5394 +<6c93> 1785 +<6c94> 17917 +<6c95> 14695 +<6c96> 1325 +<6c97> 17918 +<6c98> 16929 +<6c99> 2091 +<6c9a> 5388 +<6c9b> 5390 +<6c9c> 14696 +<6c9f> 21852 +<6ca1> 3717 +<6ca2> 2900 +<6caa> 14153 +<6cab> 3749 +<6cac> 19489 +<6cad> 17919 +<6cae> 5403 +<6cb0> 21853 +<6cb1> 5404 +endcidchar + +100 begincidchar +<6cb2> 21854 +<6cb3> 1359 +<6cb4> 19490 +<6cb8> 3576 +<6cb9> 3849 +<6cba> 5406 +<6cbb> 2255 +<6cbc> 2474 +<6cbd> 5399 +<6cbe> 5405 +<6cbf> 1290 +<6cc1> 1711 +<6cc2> 17920 +<6cc4> 5396 +<6cc5> 5401 +<6cc6> 16931 +<6cc9> 2712 +<6cca> 3367 +<6ccc> 3451 +<6ccd> 21855 +<6ccf> 21856 +<6cd0> 14697 +<6cd1> 21857 +<6cd2> 19491 +<6cd3> 5398 +<6cd4> 14698 +<6cd5> 3663 +<6cd6> 14699 +<6cd7> 5400 +<6cd9> 5409 +<6cda> 8514 +<6cdb> 5407 +<6cdc> 17922 +<6cdd> 5402 +<6ce0> 14700 +<6ce1> 3664 +<6ce2> 3326 +<6ce3> 1661 +<6ce5> 3103 +<6ce7> 21858 +<6ce8> 2987 +<6ce9> 17923 +<6cea> 5410 +<6ced> 17924 +<6cee> 14703 +<6cef> 5408 +<6cf0> 2873 +<6cf1> 5397 +<6cf2> 21859 +<6cf3> 1261 +<6cf4> 21860 +<6cfb> 16930 +<6d00> 17926 +<6d01> 15413 +<6d04> 8515 +<6d07> 21861 +<6d0a> 14704 +<6d0b> 3896 +<6d0c> 5421 +<6d0e> 14705 +<6d0f> 21862 +<6d11> 14706 +<6d12> 5420 +<6d13> 21863 +<6d17> 2714 +<6d19> 5417 +<6d1a> 21864 +<6d1b> 3926 +<6d1e> 3214 +<6d1f> 5411 +<6d24> 17927 +<6d25> 3041 +<6d28> 21865 +<6d29> 1262 +<6d2a> 2001 +<6d2b> 5414 +<6d2e> 14707 +<6d2f> 17931 +<6d31> 16932 +<6d32> 2353 +<6d33> 5419 +<6d34> 17950 +<6d35> 5418 +<6d36> 5413 +<6d38> 5416 +<6d39> 16933 +<6d3b> 1478 +<6d3c> 17932 +<6d3d> 5415 +<6d3e> 3327 +<6d3f> 16934 +<6d41> 3958 +<6d44> 2524 +<6d45> 2713 +<6d57> 14708 +<6d58> 16935 +<6d59> 5427 +<6d5a> 5425 +<6d5b> 17933 +<6d5c> 3519 +endcidchar + +100 begincidchar +<6d5e> 14709 +<6d5f> 21866 +<6d60> 17934 +<6d61> 19492 +<6d63> 5422 +<6d64> 5424 +<6d65> 14710 +<6d66> 1244 +<6d67> 21867 +<6d69> 2002 +<6d6a> 4056 +<6d6c> 1435 +<6d6e> 3540 +<6d6f> 8517 +<6d70> 17935 +<6d74> 3915 +<6d77> 1410 +<6d78> 2561 +<6d79> 5426 +<6d7c> 19493 +<6d82> 14711 +<6d85> 5431 +<6d87> 8516 +<6d88> 2475 +<6d89> 13354 +<6d8a> 17938 +<6d8c> 3866 +<6d8d> 17939 +<6d8e> 5428 +<6d91> 17940 +<6d92> 21868 +<6d93> 5423 +<6d94> 16936 +<6d95> 5429 +<6d96> 8518 +<6d97> 21869 +<6d98> 17941 +<6d99> 4006 +<6d9b> 3181 +<6d9c> 3226 +<6daa> 16937 +<6dab> 17946 +<6dac> 8519 +<6dae> 17947 +<6daf> 1428 +<6db2> 1271 +<6db4> 17948 +<6db5> 5435 +<6db7> 21870 +<6db8> 5438 +<6db9> 19494 +<6dbc> 3979 +<6dbd> 21871 +<6dbf> 14712 +<6dc0> 3918 +<6dc2> 17949 +<6dc4> 14713 +<6dc5> 5445 +<6dc6> 5439 +<6dc7> 5436 +<6dc8> 17951 +<6dca> 14714 +<6dcb> 3996 +<6dcc> 5442 +<6dce> 17952 +<6dcf> 8520 +<6dd0> 15414 +<6dd1> 2388 +<6dd2> 5444 +<6dd5> 5449 +<6dd6> 14715 +<6dd8> 3179 +<6dd9> 5447 +<6dda> 13395 +<6ddb> 16938 +<6ddd> 16939 +<6dde> 5441 +<6ddf> 17953 +<6de0> 21872 +<6de1> 2934 +<6de2> 21873 +<6de4> 5448 +<6de5> 21874 +<6de6> 5437 +<6de8> 5443 +<6de9> 14716 +<6dea> 5450 +<6deb> 1216 +<6dec> 5440 +<6dee> 5451 +<6def> 21875 +<6df0> 19495 +<6df1> 2562 +<6df2> 8522 +<6df3> 2409 +<6df4> 21876 +<6df5> 3573 +<6df6> 17954 +<6df7> 2078 +<6df8> 8521 +endcidchar + +100 begincidchar +<6df9> 5432 +<6dfa> 5446 +<6dfb> 3124 +<6dfc> 8523 +<6e00> 21877 +<6e04> 21878 +<6e05> 2650 +<6e07> 1479 +<6e08> 2113 +<6e09> 2476 +<6e0a> 5434 +<6e0b> 2380 +<6e13> 1826 +<6e15> 5433 +<6e17> 14150 +<6e19> 5455 +<6e1a> 2423 +<6e1b> 1902 +<6e1d> 5470 +<6e1e> 17956 +<6e1f> 5464 +<6e20> 1678 +<6e21> 3145 +<6e22> 14717 +<6e23> 5459 +<6e24> 5468 +<6e25> 1139 +<6e26> 1236 +<6e27> 8526 +<6e29> 1337 +<6e2b> 5461 +<6e2c> 2828 +<6e2d> 5452 +<6e2e> 5454 +<6e2f> 2003 +<6e32> 17958 +<6e34> 13330 +<6e36> 17955 +<6e38> 5471 +<6e39> 8524 +<6e3a> 5466 +<6e3b> 21879 +<6e3c> 8527 +<6e3e> 5458 +<6e42> 15415 +<6e43> 5465 +<6e44> 16940 +<6e45> 19496 +<6e4a> 3767 +<6e4d> 5463 +<6e4e> 5467 +<6e4f> 17963 +<6e51> 14718 +<6e52> 21880 +<6e56> 1924 +<6e57> 17966 +<6e58> 2477 +<6e5b> 2935 +<6e5c> 8525 +<6e5d> 21881 +<6e5e> 16941 +<6e5f> 5457 +<6e62> 21882 +<6e63> 17967 +<6e67> 3865 +<6e68> 21883 +<6e6b> 5460 +<6e6e> 5453 +<6e6f> 3180 +<6e72> 5456 +<6e73> 19497 +<6e76> 5462 +<6e7b> 19498 +<6e7d> 19499 +<6e7e> 4087 +<6e7f> 2282 +<6e80> 3756 +<6e82> 5472 +<6e89> 19500 +<6e8c> 3394 +<6e8d> 21884 +<6e8f> 5484 +<6e90> 1903 +<6e93> 17969 +<6e96> 2410 +<6e98> 5474 +<6e99> 21885 +<6e9c> 3959 +<6e9d> 2004 +<6e9f> 5487 +<6ea0> 21886 +<6ea2> 1202 +<6ea5> 5485 +<6ea7> 17970 +<6eaa> 5473 +<6eab> 13324 +<6eaf> 5479 +<6eb1> 16942 +<6eb2> 5481 +<6eb3> 21889 +endcidchar + +100 begincidchar +<6eb4> 17971 +<6eb6> 3897 +<6eb7> 5476 +<6eba> 3112 +<6ebb> 21890 +<6ebc> 19501 +<6ebd> 5478 +<6ebf> 8528 +<6ec0> 21891 +<6ec1> 16943 +<6ec2> 5486 +<6ec3> 17972 +<6ec4> 5480 +<6ec5> 3795 +<6ec7> 14719 +<6ec8> 21892 +<6ec9> 5475 +<6eca> 14720 +<6ecb> 2254 +<6ecc> 5499 +<6ecd> 21893 +<6ece> 14721 +<6ecf> 21894 +<6ed1> 1480 +<6ed3> 5477 +<6ed9> 15416 +<6edd> 2892 +<6ede> 2874 +<6ee6> 15396 +<6eeb> 17974 +<6eec> 5491 +<6eef> 5497 +<6ef2> 5495 +<6ef4> 3107 +<6ef7> 5502 +<6ef8> 5492 +<6ef9> 17975 +<6efb> 17976 +<6efd> 14722 +<6efe> 5493 +<6eff> 5469 +<6f01> 1683 +<6f02> 3500 +<6f04> 21897 +<6f06> 2283 +<6f08> 21898 +<6f09> 2057 +<6f0a> 17977 +<6f0c> 17978 +<6f0d> 21899 +<6f0f> 4057 +<6f10> 16944 +<6f11> 5489 +<6f13> 5501 +<6f14> 1291 +<6f15> 2792 +<6f16> 21900 +<6f18> 17979 +<6f1a> 14723 +<6f1b> 21901 +<6f20> 3375 +<6f22> 1533 +<6f23> 4034 +<6f25> 17980 +<6f26> 19504 +<6f29> 19505 +<6f2a> 14724 +<6f2b> 3757 +<6f2c> 3054 +<6f2d> 21903 +<6f2f> 14725 +<6f30> 19506 +<6f31> 5496 +<6f32> 5498 +<6f33> 14726 +<6f35> 17973 +<6f36> 17981 +<6f38> 2740 +<6f3b> 21902 +<6f3c> 17982 +<6f3e> 5500 +<6f3f> 5494 +<6f41> 5488 +<6f45> 1535 +<6f4f> 21904 +<6f51> 7776 +<6f52> 17984 +<6f53> 21905 +<6f54> 1855 +<6f57> 17985 +<6f58> 5514 +<6f59> 16945 +<6f5a> 14727 +<6f5b> 5509 +<6f5c> 2716 +<6f5d> 21906 +<6f5e> 14728 +<6f5f> 1473 +<6f60> 17986 +<6f61> 16946 +endcidchar + +100 begincidchar +<6f62> 14729 +<6f64> 2411 +<6f66> 5518 +<6f68> 17987 +<6f6c> 21907 +<6f6d> 5511 +<6f6e> 3016 +<6f6f> 5508 +<6f70> 3061 +<6f74> 5543 +<6f78> 5505 +<6f7a> 5504 +<6f7c> 5513 +<6f7d> 14730 +<6f7e> 16947 +<6f80> 5507 +<6f81> 5506 +<6f82> 5512 +<6f83> 21908 +<6f84> 2629 +<6f86> 5503 +<6f87> 19507 +<6f88> 8529 +<6f8b> 14731 +<6f8c> 16948 +<6f8d> 14732 +<6f8e> 5515 +<6f90> 17988 +<6f91> 5516 +<6f92> 14733 +<6f93> 21909 +<6f94> 14734 +<6f96> 17989 +<6f97> 1534 +<6f98> 13884 +<6f9a> 14735 +<6f9d> 19508 +<6f9f> 17991 +<6fa0> 16949 +<6fa1> 5521 +<6fa3> 5520 +<6fa4> 5522 +<6fa5> 17992 +<6fa6> 21910 +<6faa> 5525 +<6fae> 19509 +<6faf> 17993 +<6fb0> 21911 +<6fb1> 3133 +<6fb3> 5519 +<6fb5> 8530 +<6fb6> 14738 +<6fb7> 19510 +<6fb9> 5523 +<6fbc> 16950 +<6fbe> 17990 +<6fc0> 1849 +<6fc1> 2905 +<6fc2> 5517 +<6fc3> 3313 +<6fc5> 21912 +<6fc6> 5524 +<6fc7> 16951 +<6fca> 16952 +<6fd4> 5529 +<6fd5> 5527 +<6fd8> 5530 +<6fda> 14739 +<6fdb> 5533 +<6fde> 14740 +<6fdf> 5526 +<6fe0> 2044 +<6fe1> 3294 +<6fe4> 5430 +<6fe8> 21913 +<6fe9> 17997 +<6feb> 3934 +<6fec> 5528 +<6fee> 5532 +<6fef> 2901 +<6ff0> 16953 +<6ff1> 5531 +<6ff3> 5510 +<6ff5> 8531 +<6ff6> 7076 +<6ff9> 15395 +<6ffa> 5536 +<6ffc> 17999 +<6ffd> 21914 +<6ffe> 5540 +<7000> 18000 +<7001> 5538 +<7005> 8532 +<7006> 7760 +<7007> 8533 +<7009> 5534 +<700a> 18001 +<700b> 5535 +<700d> 19511 +<700f> 5539 +endcidchar + +100 begincidchar +<7011> 5537 +<7015> 3520 +<7017> 21915 +<7018> 5545 +<701a> 5542 +<701b> 5541 +<701d> 5544 +<701e> 3244 +<701f> 5546 +<7020> 19512 +<7023> 18002 +<7026> 2995 +<7027> 2893 +<7028> 8534 +<702c> 2633 +<702f> 21916 +<7030> 5547 +<7032> 5549 +<7034> 21917 +<7037> 21918 +<7039> 14742 +<703a> 18004 +<703c> 14743 +<703e> 5548 +<7043> 18005 +<7044> 21919 +<7047> 18006 +<7048> 21920 +<7049> 19513 +<704a> 20306 +<704b> 18007 +<704c> 5490 +<704e> 16954 +<7051> 5550 +<7054> 14745 +<7055> 21921 +<7058> 3263 +<7063> 5551 +<7064> 14748 +<7065> 18009 +<7069> 18010 +<706b> 1360 +<706c> 14749 +<706e> 18011 +<706f> 3182 +<7070> 1411 +<7075> 16955 +<7076> 18012 +<7078> 1662 +<707c> 2314 +<707d> 2114 +<707e> 14750 +<7081> 14751 +<7085> 8535 +<7086> 18013 +<7089> 4045 +<708a> 2604 +<708e> 1292 +<7092> 5553 +<7094> 21922 +<7095> 14752 +<7096> 21923 +<7097> 18014 +<7098> 19514 +<7099> 5552 +<709b> 21924 +<709f> 18016 +<70a4> 16956 +<70ab> 8536 +<70ac> 5556 +<70ad> 2936 +<70ae> 5559 +<70af> 5554 +<70b0> 19515 +<70b1> 18017 +<70b3> 5558 +<70b4> 21925 +<70b7> 14753 +<70b8> 5557 +<70b9> 3130 +<70ba> 1181 +<70bb> 8365 +<70c8> 4029 +<70ca> 18020 +<70cb> 5561 +<70cf> 1226 +<70d1> 18021 +<70d8> 14756 +<70d9> 5563 +<70dc> 14757 +<70dd> 5562 +<70df> 5560 +<70e4> 16957 +<70ec> 18019 +<70f1> 5555 +<70f9> 3665 +<70fa> 21926 +<70fd> 5565 +<7103> 18022 +<7104> 8538 +endcidchar + +100 begincidchar +<7105> 21927 +<7106> 18023 +<7107> 14758 +<7108> 18024 +<7109> 5564 +<710b> 21928 +<710c> 18025 +<710f> 8537 +<7114> 1293 +<7119> 5567 +<711a> 3586 +<711c> 5566 +<711e> 16959 +<7120> 14759 +<7121> 3777 +<7126> 2479 +<712b> 16958 +<712d> 21929 +<712e> 16960 +<712f> 18027 +<7130> 7644 +<7131> 14760 +<7136> 2741 +<7138> 21930 +<713c> 2478 +<7141> 21931 +<7145> 19518 +<7149> 4035 +<714a> 14761 +<714b> 21932 +<714c> 5573 +<714e> 2717 +<7150> 18028 +<7151> 16961 +<7152> 14762 +<7153> 18029 +<7155> 5569 +<7156> 5574 +<7157> 21934 +<7159> 1294 +<715a> 21935 +<715c> 8539 +<715e> 18030 +<7160> 14763 +<7162> 5572 +<7164> 3351 +<7165> 5568 +<7166> 5571 +<7167> 2480 +<7168> 16962 +<7169> 3429 +<716c> 5575 +<716e> 2301 +<7179> 14764 +<717d> 2718 +<7180> 18033 +<7184> 5578 +<7185> 16963 +<7187> 16964 +<7188> 5570 +<718a> 1789 +<718c> 21936 +<718f> 5576 +<7192> 14765 +<7194> 3898 +<7195> 5579 +<7196> 18032 +<7199> 8285 +<719a> 21937 +<719b> 18034 +<719f> 2393 +<71a0> 18035 +<71a2> 18036 +<71a8> 5580 +<71ac> 5581 +<71b0> 21938 +<71b1> 3300 +<71b2> 19519 +<71b3> 15397 +<71b9> 5583 +<71ba> 16965 +<71be> 5584 +<71c1> 8543 +<71c3> 3305 +<71c4> 16966 +<71c8> 3183 +<71c9> 5586 +<71cb> 14767 +<71cc> 21941 +<71ce> 5588 +<71d0> 3997 +<71d2> 5585 +<71d3> 14768 +<71d4> 5587 +<71d5> 1295 +<71d6> 14769 +<71d7> 5582 +<71d9> 18040 +<71da> 21942 +<71dc> 18041 +endcidchar + +100 begincidchar +<71df> 4430 +<71e0> 5589 +<71e5> 2793 +<71e6> 2182 +<71e7> 5591 +<71ec> 5590 +<71ed> 2538 +<71ee> 4334 +<71f4> 19520 +<71f5> 5592 +<71f8> 21943 +<71f9> 5594 +<71fb> 5577 +<71fc> 5593 +<71fe> 8544 +<71ff> 5595 +<7200> 14770 +<7206> 3376 +<7207> 18042 +<720d> 5596 +<7210> 5597 +<7213> 21946 +<7215> 16967 +<7217> 19521 +<721a> 21947 +<721b> 5598 +<721d> 14771 +<721f> 19522 +<7224> 21948 +<7228> 5599 +<722a> 3066 +<722b> 14772 +<722c> 5601 +<722d> 5600 +<722f> 21949 +<7230> 5602 +<7232> 5603 +<7234> 18044 +<7235> 2315 +<7236> 3541 +<7238> 14773 +<7239> 18045 +<723a> 3832 +<723d> 2776 +<723e> 2256 +<7241> 14774 +<7242> 18046 +<7243> 19523 +<7245> 21950 +<7246> 5608 +<7247> 3618 +<7248> 3419 +<724b> 5609 +<724c> 3341 +<724e> 21951 +<7252> 3017 +<7253> 14775 +<7257> 18047 +<7258> 5610 +<7259> 1383 +<725a> 19526 +<725b> 1671 +<725c> 14778 +<725d> 3794 +<725e> 21952 +<725f> 3778 +<7260> 19527 +<7261> 1332 +<7262> 4058 +<7263> 18048 +<7267> 3712 +<7268> 19528 +<7269> 3578 +<726b> 21953 +<7271> 21954 +<7272> 2651 +<7274> 5611 +<7277> 19529 +<7278> 18052 +<7279> 3227 +<727d> 1879 +<727e> 5612 +<727f> 18053 +<7280> 2116 +<7281> 5614 +<7282> 5613 +<7284> 19530 +<7287> 5615 +<7289> 21957 +<728d> 14779 +<728e> 18054 +<7292> 5616 +<7293> 21958 +<7296> 5617 +<729b> 16969 +<72a0> 1624 +<72a2> 5618 +<72a7> 5619 +<72a8> 21959 +<72ac> 1880 +endcidchar + +100 begincidchar +<72ad> 14780 +<72ae> 18056 +<72af> 3420 +<72b0> 18057 +<72b1> 8545 +<72b2> 5621 +<72b4> 14781 +<72b6> 2525 +<72b9> 5620 +<72be> 8546 +<72c0> 13355 +<72c1> 18058 +<72c2> 1712 +<72c3> 5622 +<72c4> 5624 +<72c6> 5623 +<72c7> 14782 +<72c9> 19531 +<72cc> 18060 +<72ce> 5625 +<72d0> 1925 +<72d2> 5626 +<72d7> 1761 +<72d8> 21962 +<72d9> 2754 +<72db> 2063 +<72df> 21963 +<72e2> 5627 +<72e5> 19532 +<72e9> 2329 +<72ec> 3232 +<72ed> 1713 +<72f3> 18063 +<72f4> 19533 +<72f7> 5631 +<72f8> 2922 +<72f9> 5630 +<72fa> 18064 +<72fb> 14783 +<72fc> 4059 +<72fd> 3352 +<72fe> 21964 +<7302> 19534 +<7307> 18065 +<730a> 5634 +<730b> 19535 +<730d> 21965 +<7312> 18066 +<7313> 21966 +<7316> 5636 +<7317> 5633 +<731b> 3808 +<731c> 5635 +<731d> 5637 +<731e> 19536 +<731f> 3980 +<7322> 19537 +<7324> 8547 +<7325> 5641 +<7327> 16971 +<7328> 14786 +<7329> 5640 +<732a> 2996 +<732b> 3299 +<732c> 18071 +<732e> 1881 +<732f> 5639 +<7331> 14787 +<7332> 21967 +<7333> 18072 +<7334> 5638 +<7335> 21968 +<7339> 18070 +<733d> 18073 +<733e> 5642 +<733f> 1296 +<7343> 14788 +<7344> 2056 +<7345> 2224 +<734d> 19540 +<7350> 16972 +<7352> 18074 +<7356> 21969 +<7357> 5646 +<7358> 19541 +<7363> 2381 +<7366> 16973 +<7367> 19542 +<7368> 5648 +<7369> 21974 +<736a> 5647 +<736b> 18076 +<736c> 14789 +<7370> 5649 +<7371> 18080 +<7372> 1451 +<7375> 5651 +<7377> 8549 +<7378> 5650 +<7379> 21975 +endcidchar + +100 begincidchar +<737a> 5653 +<737b> 5652 +<737c> 14790 +<7380> 21976 +<7381> 18081 +<7383> 14791 +<7384> 1904 +<7387> 3952 +<7389> 1732 +<738a> 18082 +<738b> 1318 +<738e> 21977 +<7390> 21978 +<7393> 21979 +<7394> 18083 +<7395> 14794 +<7396> 1762 +<7397> 21980 +<7398> 18084 +<739c> 18085 +<73a2> 16974 +<73a5> 18086 +<73a6> 14798 +<73a8> 15423 +<73a9> 1565 +<73aa> 21981 +<73ab> 14799 +<73ad> 21982 +<73b2> 4016 +<73b3> 5655 +<73b5> 14800 +<73b7> 14801 +<73b9> 18087 +<73ba> 13802 +<73bb> 5657 +<73bc> 14802 +<73bd> 8550 +<73bf> 18088 +<73c0> 5658 +<73c2> 1361 +<73c5> 18089 +<73c6> 21983 +<73c8> 5654 +<73c9> 8551 +<73ca> 2183 +<73cb> 18090 +<73cc> 21984 +<73cd> 3037 +<73ce> 5656 +<73cf> 14803 +<73d2> 8554 +<73d3> 21985 +<73d6> 8552 +<73d9> 14804 +<73dd> 21986 +<73de> 5661 +<73e0> 2330 +<73e1> 18091 +<73e3> 8553 +<73e4> 15417 +<73e5> 5659 +<73e6> 21987 +<73e7> 18092 +<73e9> 14805 +<73ea> 1812 +<73ed> 3421 +<73ee> 5660 +<73f1> 5687 +<73f4> 14806 +<73f5> 8556 +<73f7> 21988 +<73f8> 5666 +<73f9> 18093 +<73fa> 18095 +<73fb> 21989 +<73fd> 14807 +<73fe> 1905 +<73ff> 21990 +<7400> 21991 +<7401> 18096 +<7403> 1663 +<7404> 14808 +<7405> 5663 +<7406> 3943 +<7407> 8555 +<7409> 3960 +<740a> 14809 +<7411> 21992 +<7413> 18094 +<7421> 15418 +<7422> 2902 +<7424> 14812 +<7425> 5665 +<7426> 8557 +<7428> 14813 +<7429> 8559 +<742a> 8558 +<742b> 16975 +<742c> 14814 +<742d> 21993 +endcidchar + +100 begincidchar +<742e> 8560 +<7432> 5667 +<7433> 3998 +<7434> 1743 +<7435> 3472 +<7436> 3328 +<7439> 14818 +<743a> 5668 +<743f> 5670 +<7440> 18098 +<7441> 5673 +<7443> 18099 +<7444> 14819 +<7446> 16976 +<7447> 14820 +<744b> 14821 +<744d> 14822 +<7451> 14823 +<7452> 18100 +<7453> 18097 +<7455> 5669 +<7457> 14824 +<7459> 5672 +<745a> 1950 +<745b> 1263 +<745c> 5674 +<745d> 18101 +<745e> 2614 +<745f> 5671 +<7460> 4004 +<7462> 16977 +<7463> 5677 +<7464> 7477 +<7466> 14825 +<7469> 5675 +<746a> 5678 +<746b> 14826 +<746d> 16978 +<746e> 21996 +<746f> 5664 +<7470> 5676 +<7471> 14827 +<7472> 19543 +<7473> 2092 +<7476> 5679 +<747e> 5680 +<7480> 14828 +<7481> 18102 +<7483> 3944 +<7488> 18103 +<7489> 8562 +<748b> 5681 +<748f> 21997 +<7490> 14832 +<7491> 21998 +<7492> 18105 +<7497> 18106 +<7498> 14833 +<7499> 18107 +<749a> 21999 +<749c> 14834 +<749e> 5682 +<749f> 8563 +<74a0> 14835 +<74a1> 18108 +<74a2> 5662 +<74a3> 14836 +<74a5> 18109 +<74a6> 16979 +<74a7> 5683 +<74a8> 14837 +<74a9> 16980 +<74aa> 18110 +<74ab> 14838 +<74ae> 22000 +<74af> 19544 +<74b0> 1536 +<74b5> 14839 +<74b9> 18111 +<74ba> 18113 +<74bb> 18112 +<74bd> 2257 +<74bf> 14840 +<74c8> 14841 +<74c9> 16981 +<74ca> 5684 +<74cc> 22003 +<74cf> 5685 +<74d0> 22004 +<74d3> 22005 +<74d4> 5686 +<74d6> 18114 +<74d8> 18115 +<74da> 14842 +<74db> 22007 +<74dc> 1245 +<74de> 14843 +<74df> 19545 +<74e0> 5688 +<74e2> 3501 +endcidchar + +100 begincidchar +<74e3> 5689 +<74e4> 19546 +<74e6> 1504 +<74e7> 5690 +<74e8> 22008 +<74e9> 5691 +<74ea> 22009 +<74eb> 18116 +<74ee> 5692 +<74ef> 14160 +<74f2> 5693 +<74f4> 19547 +<74f6> 3525 +<74f7> 5697 +<74f8> 5696 +<74fa> 18118 +<74fb> 19548 +<74fc> 22011 +<74ff> 16982 +<7501> 8564 +<7503> 5699 +<7504> 5698 +<7505> 5700 +<7506> 22012 +<750c> 5701 +<750d> 5703 +<750e> 5702 +<7511> 2059 +<7512> 22013 +<7513> 5705 +<7515> 5704 +<7516> 19549 +<7517> 16983 +<7518> 1537 +<751a> 2585 +<751c> 3126 +<751e> 5706 +<751f> 2652 +<7520> 18120 +<7521> 19550 +<7522> 13790 +<7523> 2184 +<7524> 18121 +<7525> 1307 +<7526> 5707 +<7527> 22014 +<7528> 3899 +<7529> 22015 +<752a> 18122 +<752b> 3635 +<752c> 5708 +<752f> 8434 +<7530> 3134 +<7531> 3869 +<7532> 2005 +<7533> 2563 +<7536> 22016 +<7537> 2953 +<7538> 4297 +<7539> 22017 +<753a> 3018 +<753b> 1384 +<753c> 5709 +<753f> 19551 +<7540> 18127 +<7543> 22018 +<7544> 5710 +<7546> 5715 +<7547> 22019 +<7548> 18128 +<7549> 5713 +<754a> 5712 +<754b> 5063 +<754c> 1412 +<754d> 5711 +<754e> 14844 +<754f> 1182 +<7550> 18129 +<7551> 3390 +<7552> 18130 +<7554> 3422 +<7557> 22020 +<7559> 3961 +<755a> 5716 +<755b> 5714 +<755c> 2970 +<755d> 2634 +<755e> 19552 +<755f> 22021 +<7560> 3391 +<7561> 22022 +<7562> 3487 +<7564> 5718 +<7565> 3956 +<7566> 1827 +<7567> 5719 +<7569> 5717 +<756a> 3434 +<756b> 5720 +<756c> 15419 +endcidchar + +100 begincidchar +<756d> 5721 +<756f> 8565 +<7570> 1183 +<7571> 18132 +<7572> 18131 +<7573> 2526 +<7574> 5726 +<7575> 14161 +<7576> 5723 +<7577> 3269 +<7578> 5722 +<7579> 14845 +<757a> 18133 +<757f> 1600 +<7581> 14846 +<7582> 5729 +<7585> 22025 +<7589> 5728 +<758a> 5727 +<758b> 3479 +<758c> 18136 +<758e> 2756 +<758f> 2755 +<7590> 14847 +<7591> 1625 +<7594> 5730 +<7595> 22026 +<7599> 19553 +<759a> 5731 +<759c> 22027 +<759d> 5732 +<75a2> 18138 +<75a3> 5734 +<75a4> 19554 +<75a5> 5733 +<75ab> 1272 +<75b0> 18140 +<75b1> 5742 +<75b2> 3452 +<75b3> 5736 +<75b4> 14850 +<75b5> 5738 +<75b7> 18141 +<75b8> 5740 +<75b9> 2564 +<75ba> 22028 +<75bc> 5741 +<75bd> 5739 +<75be> 2284 +<75c1> 19555 +<75c2> 5735 +<75c3> 5737 +<75c4> 19556 +<75c5> 3508 +<75c6> 18144 +<75c7> 2481 +<75ca> 5744 +<75cc> 19557 +<75cd> 5743 +<75ce> 16985 +<75cf> 18145 +<75d2> 5745 +<75d3> 18146 +<75d4> 2258 +<75d5> 2079 +<75d7> 19558 +<75d8> 3185 +<75d9> 5746 +<75db> 3047 +<75dc> 19559 +<75dd> 18147 +<75de> 5748 +<75e1> 19560 +<75e2> 3945 +<75e3> 5747 +<75e4> 14851 +<75e7> 18150 +<75e9> 2795 +<75ec> 14162 +<75ee> 18151 +<75ef> 19561 +<75f0> 5753 +<75f1> 18152 +<75f4> 2962 +<75f9> 14852 +<75fa> 5754 +<75fc> 5751 +<7600> 14853 +<7601> 5752 +<7602> 16986 +<7603> 18153 +<7604> 19562 +<7607> 18155 +<7608> 16987 +<7609> 5759 +<760a> 14854 +<760b> 5757 +<760c> 19563 +<760d> 5758 +<760f> 18156 +endcidchar + +100 begincidchar +<7612> 22029 +<7613> 18159 +<7618> 18154 +<7619> 14857 +<761d> 19564 +<761e> 14858 +<761f> 5760 +<7623> 22030 +<7624> 5765 +<7625> 18163 +<7626> 13893 +<7627> 5761 +<7628> 18164 +<7629> 22031 +<762d> 14859 +<7630> 5767 +<7632> 19565 +<7633> 18166 +<7634> 5766 +<7635> 14860 +<7638> 19566 +<763b> 5768 +<763c> 18165 +<7640> 22034 +<7641> 18169 +<7642> 3981 +<7643> 14861 +<7644> 22035 +<7645> 19567 +<7646> 5771 +<7649> 18171 +<764a> 19568 +<764b> 14862 +<764c> 1566 +<764e> 14163 +<7652> 3850 +<7655> 18172 +<7656> 3610 +<7658> 5773 +<7659> 22036 +<765c> 5772 +<765f> 19569 +<7664> 16988 +<7665> 14863 +<7667> 5779 +<766c> 5780 +<766d> 14864 +<766e> 18174 +<766f> 14865 +<7670> 5781 +<7671> 14866 +<7672> 5782 +<7674> 14867 +<7676> 5783 +<7678> 5784 +<767a> 3395 +<767b> 3146 +<767c> 5785 +<767d> 3368 +<767e> 3494 +<7680> 5786 +<7681> 16989 +<7682> 8566 +<7683> 5787 +<7684> 3108 +<7685> 22037 +<7686> 1413 +<7687> 2006 +<7688> 5788 +<768b> 5789 +<768e> 5790 +<7690> 2167 +<7693> 5792 +<7695> 18175 +<7696> 5791 +<769b> 8569 +<769c> 8567 +<769d> 16990 +<769e> 8568 +<769f> 22040 +<76a0> 18177 +<76a1> 18176 +<76a6> 8570 +<76aa> 16991 +<76ad> 19570 +<76ae> 3453 +<76af> 18180 +<76b0> 5795 +<76b4> 5796 +<76b6> 16992 +<76b7> 7452 +<76bd> 19571 +<76bf> 2172 +<76c1> 22043 +<76c2> 5800 +<76c3> 3340 +<76c5> 14870 +<76c6> 3725 +<76c8> 1264 +<76c9> 18182 +endcidchar + +100 begincidchar +<76ca> 1273 +<76cb> 22044 +<76cc> 14871 +<76cd> 5801 +<76ce> 16993 +<76d2> 5803 +<76d4> 16994 +<76d6> 5802 +<76d7> 3178 +<76d9> 19572 +<76db> 2653 +<76dc> 5336 +<76de> 5804 +<76df> 3789 +<76e0> 22046 +<76e1> 5805 +<76e3> 1538 +<76e4> 3435 +<76e5> 5806 +<76e6> 16995 +<76e7> 5807 +<76e8> 18184 +<76ea> 5808 +<76eb> 19573 +<76ec> 14872 +<76ee> 3816 +<76f0> 19574 +<76f1> 16996 +<76f2> 3809 +<76f4> 3034 +<76f6> 22047 +<76f8> 2796 +<76f9> 19575 +<76fb> 5810 +<76fc> 14873 +<76fe> 2412 +<7700> 19576 +<7701> 2482 +<7704> 5813 +<7706> 22048 +<7707> 5812 +<7708> 5811 +<7709> 3473 +<770a> 16997 +<770b> 1539 +<770c> 1885 +<770e> 19577 +<7712> 22049 +<7717> 18186 +<7719> 16998 +<771a> 18187 +<771b> 5819 +<771c> 22052 +<771e> 5816 +<771f> 2565 +<7720> 3774 +<7722> 19578 +<7724> 5815 +<7728> 19579 +<7729> 5814 +<772d> 18188 +<772e> 22053 +<772f> 19580 +<7734> 14874 +<7735> 18189 +<7736> 14875 +<7739> 19581 +<773a> 3019 +<773c> 1567 +<773d> 22054 +<773e> 19582 +<7740> 2979 +<7742> 22055 +<7745> 19583 +<7746> 8572 +<7747> 5822 +<774a> 19584 +<774f> 19585 +<7752> 22056 +<7758> 18194 +<775a> 5823 +<775b> 5826 +<775c> 14876 +<775e> 19586 +<7761> 2605 +<7762> 7877 +<7763> 3228 +<7764> 19587 +<7765> 5827 +<7766> 3713 +<7767> 19588 +<7768> 5824 +<776a> 14165 +<776b> 5825 +<776c> 19589 +<7770> 22059 +<7772> 14879 +<7779> 5830 +<777a> 17001 +<777c> 18196 +endcidchar + +100 begincidchar +<777d> 14880 +<777e> 5829 +<777f> 5828 +<7780> 17002 +<7784> 19590 +<778b> 5832 +<778e> 5831 +<7791> 5833 +<7794> 17003 +<7795> 14881 +<7796> 19593 +<779a> 18199 +<779e> 5835 +<779f> 18200 +<77a0> 5834 +<77a2> 18201 +<77a4> 18202 +<77a5> 3613 +<77a7> 19594 +<77a9> 14166 +<77aa> 14882 +<77ac> 2400 +<77ad> 3982 +<77ae> 22064 +<77af> 19595 +<77b0> 5836 +<77b1> 22065 +<77b3> 3215 +<77b5> 22066 +<77b6> 5837 +<77b7> 19596 +<77b9> 5838 +<77bb> 5842 +<77be> 19597 +<77bf> 5839 +<77c3> 22067 +<77c7> 5843 +<77c9> 19598 +<77cd> 5844 +<77d1> 19599 +<77d2> 22068 +<77d5> 22069 +<77d7> 5845 +<77d9> 19600 +<77da> 5846 +<77db> 3779 +<77dc> 5847 +<77e0> 17004 +<77e2> 3836 +<77e3> 5848 +<77e4> 18205 +<77e5> 2956 +<77e6> 14883 +<77e7> 3360 +<77e9> 1763 +<77ea> 18206 +<77ec> 18207 +<77ed> 2937 +<77ee> 5849 +<77ef> 1714 +<77f0> 14884 +<77f1> 19601 +<77f3> 2676 +<77f4> 14885 +<77f8> 22070 +<77fb> 18208 +<77fc> 5850 +<7802> 2093 +<7805> 18210 +<7806> 14886 +<7809> 18211 +<780c> 5851 +<780d> 18212 +<780e> 22071 +<7811> 22072 +<7812> 5852 +<7814> 1882 +<7815> 2117 +<7819> 18213 +<781d> 22073 +<7820> 5854 +<7821> 8574 +<7822> 14887 +<7823> 22074 +<7825> 3152 +<7826> 2118 +<7827> 1640 +<782c> 18214 +<7830> 14890 +<7832> 3666 +<7834> 3329 +<7835> 14891 +<7837> 19602 +<783a> 3153 +<783f> 2030 +<7843> 17006 +<7844> 22075 +<7845> 5856 +<7847> 18215 +<7848> 22076 +endcidchar + +100 begincidchar +<784c> 22077 +<784e> 8575 +<784f> 13342 +<7851> 15420 +<7852> 22078 +<785c> 19603 +<785d> 2483 +<785e> 22079 +<7863> 22082 +<7864> 8576 +<7868> 14892 +<786a> 18216 +<786b> 3962 +<786c> 2007 +<786e> 17007 +<786f> 1883 +<7872> 3383 +<7874> 5858 +<787a> 8577 +<787c> 5860 +<787e> 19604 +<7881> 1951 +<7886> 5859 +<7887> 3090 +<788a> 18218 +<788c> 5862 +<788d> 1429 +<788e> 5857 +<788f> 22083 +<7891> 3454 +<7893> 1234 +<7894> 18219 +<7895> 2140 +<7897> 4088 +<7898> 19605 +<789a> 5861 +<789d> 18221 +<789e> 14893 +<789f> 18222 +<78a1> 19606 +<78a3> 5863 +<78a4> 18220 +<78a7> 3611 +<78a8> 22084 +<78a9> 2685 +<78aa> 5865 +<78ac> 22085 +<78ad> 17010 +<78af> 5866 +<78b0> 17008 +<78b1> 19607 +<78b2> 22086 +<78b3> 19608 +<78b5> 5864 +<78ba> 1452 +<78bb> 18223 +<78bc> 5872 +<78bd> 22087 +<78be> 5871 +<78bf> 22088 +<78c1> 2259 +<78c5> 5873 +<78c6> 5868 +<78c7> 22089 +<78c8> 14894 +<78c9> 19609 +<78ca> 5874 +<78cb> 5869 +<78cc> 14895 +<78ce> 14896 +<78d0> 3436 +<78d1> 5867 +<78d2> 22090 +<78d3> 19610 +<78d4> 5870 +<78d5> 18224 +<78d6> 22091 +<78da> 5877 +<78db> 22092 +<78df> 22093 +<78e4> 14897 +<78e6> 18225 +<78e7> 5876 +<78e8> 3727 +<78ea> 22094 +<78ec> 5875 +<78ef> 1199 +<78f2> 14900 +<78f3> 22095 +<78f4> 5879 +<78f6> 22096 +<78f7> 14901 +<78fb> 14902 +<78fd> 5878 +<78fe> 18228 +<78ff> 22097 +<7900> 17011 +<7901> 2484 +<7906> 22098 +<7907> 5880 +endcidchar + +100 begincidchar +<790c> 19611 +<790e> 2757 +<7910> 18230 +<7911> 5882 +<7912> 5881 +<7919> 5883 +<791a> 22099 +<791b> 18231 +<791c> 17012 +<791e> 22100 +<791f> 19612 +<7920> 22101 +<7925> 18232 +<7926> 5853 +<7929> 22102 +<792a> 5855 +<792b> 5885 +<792c> 5884 +<792d> 22103 +<792e> 17013 +<7930> 8578 +<7931> 14903 +<7934> 17014 +<7935> 22104 +<793a> 2260 +<793b> 14905 +<793c> 4017 +<793d> 14906 +<793e> 2302 +<793f> 19615 +<7940> 5886 +<7941> 1805 +<7942> 19616 +<7944> 22105 +<7945> 14907 +<7946> 17015 +<7947> 1626 +<7948> 1601 +<7949> 2225 +<794a> 18233 +<794b> 22106 +<794f> 22107 +<7950> 3870 +<7951> 22108 +<7953> 5892 +<7954> 19617 +<7955> 5891 +<7956> 2758 +<7957> 5888 +<7958> 18234 +<795a> 5890 +<795d> 2389 +<795e> 2566 +<795f> 5889 +<7960> 5887 +<7962> 3296 +<7965> 2485 +<7967> 18236 +<7968> 3502 +<7969> 22109 +<796b> 19618 +<796d> 2119 +<7972> 18237 +<7977> 3186 +<7979> 17016 +<797a> 5893 +<797b> 22110 +<797c> 19619 +<797e> 22111 +<797f> 5894 +<7980> 5916 +<7981> 1744 +<7984> 4067 +<7985> 2743 +<798a> 5895 +<798b> 14910 +<798c> 22112 +<798d> 1362 +<798e> 3091 +<798f> 3569 +<7991> 22113 +<7993> 22114 +<7994> 8582 +<7995> 18238 +<7996> 14911 +<7998> 14912 +<799b> 8584 +<799c> 22115 +<799d> 5896 +<79a1> 18239 +<79a6> 1684 +<79a7> 5897 +<79a8> 22116 +<79a9> 18240 +<79aa> 5899 +<79ab> 19620 +<79ae> 5900 +<79af> 22117 +<79b0> 3295 +<79b1> 7758 +endcidchar + +100 begincidchar +<79b3> 5901 +<79b4> 18241 +<79b8> 14913 +<79bb> 14914 +<79bd> 1745 +<79be> 1363 +<79bf> 3229 +<79c0> 2354 +<79c1> 2226 +<79c2> 18242 +<79c4> 19621 +<79c7> 18243 +<79c8> 17017 +<79c9> 5904 +<79ca> 14915 +<79cb> 2355 +<79cf> 22118 +<79d1> 1354 +<79d2> 3509 +<79d4> 17019 +<79d5> 5905 +<79d6> 18246 +<79d8> 3455 +<79da> 14916 +<79dd> 22119 +<79de> 17020 +<79df> 2759 +<79e0> 22120 +<79e1> 5908 +<79e2> 22121 +<79e3> 5909 +<79e4> 3359 +<79e5> 22122 +<79e6> 2567 +<79e7> 5906 +<79e9> 2975 +<79ea> 19622 +<79eb> 17021 +<79ec> 5907 +<79ed> 17022 +<79f0> 2486 +<79f1> 22123 +<79f8> 22124 +<79fb> 1184 +<79fc> 22125 +<7a00> 1603 +<7a02> 19623 +<7a03> 14917 +<7a05> 13875 +<7a07> 22126 +<7a08> 5910 +<7a09> 14918 +<7a0a> 18251 +<7a0b> 3092 +<7a0c> 19624 +<7a0d> 5911 +<7a0e> 2667 +<7a11> 14919 +<7a14> 3769 +<7a15> 18252 +<7a17> 3477 +<7a1a> 2963 +<7a1b> 18253 +<7a1c> 3983 +<7a1e> 14920 +<7a1f> 5915 +<7a20> 5914 +<7a21> 22127 +<7a27> 22128 +<7a2b> 22129 +<7a2d> 14921 +<7a2e> 2331 +<7a2f> 22130 +<7a30> 19625 +<7a31> 5917 +<7a32> 1204 +<7a37> 5920 +<7a38> 18255 +<7a39> 14922 +<7a3a> 19626 +<7a3b> 5918 +<7a3c> 1364 +<7a3d> 1828 +<7a3e> 5919 +<7a3f> 2008 +<7a40> 2052 +<7a42> 3638 +<7a43> 5921 +<7a44> 19627 +<7a45> 14923 +<7a46> 3714 +<7a47> 18256 +<7a48> 22133 +<7a49> 5923 +<7a4c> 14924 +<7a4d> 2677 +<7a4e> 1265 +<7a4f> 1338 +<7a50> 1136 +<7a55> 22134 +endcidchar + +100 begincidchar +<7a56> 18257 +<7a57> 5922 +<7a59> 18258 +<7a5c> 18259 +<7a5d> 14925 +<7a5f> 18260 +<7a60> 20310 +<7a63> 2527 +<7a65> 22135 +<7a67> 18261 +<7a69> 5926 +<7a6a> 18262 +<7a6b> 1453 +<7a6d> 14927 +<7a70> 5928 +<7a74> 1856 +<7a75> 18263 +<7a76> 1664 +<7a78> 14928 +<7a79> 5929 +<7a7a> 1773 +<7a7d> 5930 +<7a7e> 22136 +<7a7f> 2720 +<7a80> 19628 +<7a81> 3237 +<7a82> 18264 +<7a83> 2692 +<7a84> 2149 +<7a85> 17023 +<7a86> 19629 +<7a88> 5931 +<7a8a> 18265 +<7a8b> 22137 +<7a90> 18266 +<7a91> 22138 +<7a92> 2976 +<7a93> 2797 +<7a94> 19630 +<7a95> 5933 +<7a96> 5935 +<7a97> 5932 +<7a98> 5934 +<7a9e> 22139 +<7a9f> 1784 +<7aa0> 14929 +<7aa3> 14930 +<7aa9> 5936 +<7aaa> 1788 +<7aac> 18267 +<7aae> 1665 +<7aaf> 3900 +<7ab0> 5938 +<7ab3> 14931 +<7ab5> 19631 +<7ab6> 5939 +<7ab9> 18270 +<7aba> 1232 +<7abd> 19632 +<7abe> 18271 +<7abf> 5942 +<7ac3> 1492 +<7ac4> 5941 +<7ac5> 5940 +<7ac6> 14934 +<7ac7> 5944 +<7ac8> 5937 +<7ac9> 22140 +<7aca> 5945 +<7acb> 3953 +<7acc> 18273 +<7acd> 5946 +<7ace> 17025 +<7acf> 5947 +<7ad1> 8585 +<7ad2> 4549 +<7ad3> 5949 +<7ad5> 5948 +<7adb> 22141 +<7adc> 3965 +<7add> 5952 +<7adf> 7176 +<7ae0> 2487 +<7ae3> 2401 +<7ae5> 3216 +<7ae6> 5955 +<7ae7> 8586 +<7ae8> 18274 +<7ae9> 22142 +<7aea> 2918 +<7aeb> 8588 +<7aec> 22143 +<7aed> 5956 +<7aef> 2938 +<7af0> 5957 +<7af1> 22144 +<7af4> 18275 +<7af6> 1693 +<7af8> 4214 +<7af9> 2971 +endcidchar + +100 begincidchar +<7afa> 2271 +<7afb> 22145 +<7afd> 17026 +<7afe> 19633 +<7aff> 1540 +<7b02> 5958 +<7b04> 5971 +<7b06> 5961 +<7b07> 14935 +<7b08> 1666 +<7b0a> 5960 +<7b0b> 5973 +<7b0f> 5959 +<7b11> 2488 +<7b12> 17027 +<7b14> 14936 +<7b1b> 3109 +<7b1e> 5965 +<7b1f> 22146 +<7b20> 1468 +<7b23> 22147 +<7b25> 2592 +<7b26> 3542 +<7b27> 14937 +<7b28> 5967 +<7b29> 22148 +<7b2a> 18280 +<7b2b> 19634 +<7b2c> 2888 +<7b2d> 17028 +<7b30> 22149 +<7b31> 14938 +<7b33> 5962 +<7b34> 22150 +<7b35> 5966 +<7b36> 5968 +<7b39> 2155 +<7b3b> 17029 +<7b3d> 18279 +<7b41> 18286 +<7b45> 5975 +<7b46> 3488 +<7b47> 14939 +<7b48> 3386 +<7b49> 3187 +<7b4b> 1746 +<7b4c> 5974 +<7b4d> 5972 +<7b4e> 14940 +<7b4f> 3401 +<7b50> 5969 +<7b51> 2972 +<7b52> 3189 +<7b53> 14173 +<7b54> 3188 +<7b55> 18288 +<7b56> 2150 +<7b5d> 5993 +<7b60> 14941 +<7b64> 18290 +<7b65> 5977 +<7b66> 18291 +<7b67> 5979 +<7b69> 14942 +<7b6a> 22153 +<7b6c> 5982 +<7b6d> 14943 +<7b6e> 5983 +<7b6f> 17030 +<7b72> 14944 +<7b73> 18292 +<7b74> 5978 +<7b75> 5976 +<7b77> 19635 +<7b79> 18289 +<7b7a> 5970 +<7b7f> 18285 +<7b84> 22154 +<7b86> 3615 +<7b87> 1365 +<7b89> 22155 +<7b8b> 5990 +<7b8d> 5987 +<7b8e> 22156 +<7b8f> 5992 +<7b90> 18295 +<7b91> 14945 +<7b92> 5991 +<7b94> 3369 +<7b95> 3763 +<7b96> 22157 +<7b97> 2185 +<7b98> 5985 +<7b99> 5994 +<7b9a> 5989 +<7b9b> 18296 +<7b9c> 5988 +<7b9d> 5984 +<7b9e> 8589 +<7b9f> 5986 +endcidchar + +100 begincidchar +<7ba0> 19636 +<7ba1> 1541 +<7ba5> 22158 +<7baa> 2939 +<7bac> 19637 +<7bad> 2721 +<7baf> 14946 +<7bb0> 19638 +<7bb1> 3382 +<7bb2> 22159 +<7bb4> 5999 +<7bb5> 18298 +<7bb6> 22160 +<7bb8> 3384 +<7bbc> 18299 +<7bbd> 22163 +<7bc0> 2693 +<7bc1> 5996 +<7bc2> 22164 +<7bc4> 3427 +<7bc5> 18300 +<7bc6> 6000 +<7bc7> 3619 +<7bc8> 22165 +<7bc9> 2969 +<7bca> 18301 +<7bcb> 5995 +<7bcc> 5997 +<7bcf> 5998 +<7bd4> 18304 +<7bd6> 18305 +<7bd7> 14947 +<7bd9> 14948 +<7bda> 18306 +<7bdb> 22166 +<7bdd> 6001 +<7be0> 2288 +<7be4> 3230 +<7be5> 6006 +<7be6> 6005 +<7be8> 19639 +<7be9> 6002 +<7bea> 18307 +<7bed> 4060 +<7bf0> 18308 +<7bf2> 19640 +<7bf3> 6011 +<7bf6> 6015 +<7bf7> 6012 +<7bf8> 19641 +<7bfc> 19642 +<7bfe> 19643 +<7c00> 6008 +<7c01> 17031 +<7c02> 22171 +<7c03> 18309 +<7c04> 22172 +<7c06> 22173 +<7c07> 6009 +<7c09> 19644 +<7c0b> 14949 +<7c0c> 22174 +<7c0d> 6014 +<7c0e> 18310 +<7c0f> 14950 +<7c11> 6003 +<7c12> 4330 +<7c13> 6010 +<7c14> 6004 +<7c17> 6013 +<7c19> 22175 +<7c1b> 22176 +<7c1e> 7739 +<7c1f> 6019 +<7c20> 14951 +<7c21> 1542 +<7c23> 6016 +<7c25> 22177 +<7c26> 14952 +<7c27> 6017 +<7c28> 19645 +<7c2a> 6018 +<7c2b> 6021 +<7c2c> 22178 +<7c2f> 19646 +<7c31> 14953 +<7c33> 17032 +<7c34> 22179 +<7c36> 14954 +<7c37> 6020 +<7c38> 3466 +<7c3d> 6022 +<7c3e> 4036 +<7c3f> 3645 +<7c40> 6027 +<7c42> 19647 +<7c43> 6024 +<7c45> 18311 +<7c46> 22182 +<7c4a> 18312 +endcidchar + +100 begincidchar +<7c4c> 6023 +<7c4d> 2678 +<7c4f> 6026 +<7c50> 6028 +<7c51> 14955 +<7c54> 6025 +<7c55> 22183 +<7c56> 6032 +<7c57> 18313 +<7c58> 6029 +<7c59> 14956 +<7c5a> 22184 +<7c5e> 18314 +<7c5f> 6030 +<7c60> 6007 +<7c61> 18315 +<7c63> 22185 +<7c64> 6031 +<7c65> 6033 +<7c67> 14957 +<7c69> 18316 +<7c6c> 6034 +<7c6d> 17034 +<7c6e> 14958 +<7c6f> 18317 +<7c70> 14959 +<7c72> 19653 +<7c73> 3606 +<7c75> 6035 +<7c79> 17035 +<7c7b> 14094 +<7c7c> 22187 +<7c7d> 19654 +<7c7e> 3822 +<7c81> 1734 +<7c82> 1791 +<7c83> 6036 +<7c86> 22188 +<7c87> 19655 +<7c89> 3588 +<7c8b> 2606 +<7c8d> 3772 +<7c8f> 17036 +<7c90> 6037 +<7c92> 3963 +<7c94> 17037 +<7c95> 3370 +<7c97> 2760 +<7c98> 3306 +<7c9b> 2391 +<7c9e> 19656 +<7c9f> 1156 +<7ca0> 17038 +<7ca1> 6042 +<7ca2> 6040 +<7ca4> 6038 +<7ca5> 1501 +<7ca6> 18321 +<7ca7> 2489 +<7ca8> 6043 +<7cab> 6041 +<7cad> 6039 +<7cae> 6047 +<7cb0> 22189 +<7cb1> 6046 +<7cb2> 6045 +<7cb3> 6044 +<7cb9> 6048 +<7cba> 19657 +<7cbb> 22190 +<7cbc> 14960 +<7cbd> 6049 +<7cbe> 2654 +<7cbf> 14961 +<7cc0> 6050 +<7cc2> 6052 +<7cc4> 18326 +<7cc5> 6051 +<7cc7> 19658 +<7cca> 1926 +<7ccd> 18328 +<7cce> 2746 +<7ccf> 22191 +<7cd2> 6054 +<7cd3> 19659 +<7cd4> 22192 +<7cd5> 17039 +<7cd6> 3190 +<7cd7> 14964 +<7cd8> 6053 +<7cd9> 14965 +<7cda> 19660 +<7cdc> 6055 +<7cdd> 14966 +<7cde> 3589 +<7cdf> 2798 +<7ce0> 2009 +<7ce2> 6056 +<7ce6> 18331 +<7ce7> 3984 +endcidchar + +100 begincidchar +<7ce9> 22193 +<7ceb> 14967 +<7cef> 6058 +<7cf2> 6059 +<7cf4> 6060 +<7cf5> 18333 +<7cf6> 6061 +<7cf8> 2227 +<7cfa> 6062 +<7cfb> 1829 +<7cfe> 1668 +<7d00> 1604 +<7d02> 6064 +<7d03> 18334 +<7d04> 3839 +<7d05> 2010 +<7d06> 6063 +<7d0a> 6067 +<7d0b> 3826 +<7d0d> 3314 +<7d0f> 22194 +<7d10> 3493 +<7d11> 22195 +<7d12> 18336 +<7d13> 14971 +<7d14> 2413 +<7d15> 6066 +<7d16> 22196 +<7d17> 2303 +<7d18> 2011 +<7d19> 2228 +<7d1a> 1667 +<7d1b> 3590 +<7d1c> 6065 +<7d1d> 14972 +<7d1e> 18337 +<7d20> 2761 +<7d21> 3696 +<7d22> 2151 +<7d23> 14973 +<7d26> 22197 +<7d2a> 22198 +<7d2b> 2229 +<7d2c> 3065 +<7d2d> 22199 +<7d2e> 6070 +<7d2f> 4007 +<7d30> 2121 +<7d31> 17040 +<7d32> 6071 +<7d33> 2568 +<7d35> 6073 +<7d39> 2490 +<7d3a> 2080 +<7d3c> 19661 +<7d3f> 6072 +<7d40> 18342 +<7d41> 14974 +<7d42> 2356 +<7d43> 1906 +<7d44> 2762 +<7d45> 6068 +<7d46> 6074 +<7d47> 18343 +<7d48> 8591 +<7d4b> 6069 +<7d4c> 1830 +<7d4d> 19662 +<7d4e> 6077 +<7d4f> 6081 +<7d50> 1857 +<7d51> 22200 +<7d53> 14975 +<7d55> 13882 +<7d56> 6076 +<7d57> 22201 +<7d59> 14976 +<7d5a> 18347 +<7d5b> 6085 +<7d5c> 17041 +<7d5d> 14977 +<7d5e> 2012 +<7d61> 3927 +<7d62> 1152 +<7d63> 6082 +<7d65> 22202 +<7d66> 1669 +<7d67> 22203 +<7d68> 6079 +<7d6a> 18348 +<7d6e> 6080 +<7d70> 18349 +<7d71> 3191 +<7d72> 6078 +<7d73> 6075 +<7d75> 1414 +<7d76> 2696 +<7d78> 22204 +<7d79> 1884 +<7d7a> 14978 +endcidchar + +100 begincidchar +<7d7b> 22205 +<7d7d> 6087 +<7d7f> 18351 +<7d81> 22206 +<7d82> 19663 +<7d83> 17042 +<7d85> 19664 +<7d86> 14979 +<7d88> 18353 +<7d89> 6084 +<7d8d> 19665 +<7d8f> 6086 +<7d91> 19666 +<7d93> 6083 +<7d96> 22207 +<7d97> 18354 +<7d99> 1831 +<7d9a> 2835 +<7d9b> 6088 +<7d9c> 2800 +<7d9d> 18356 +<7d9e> 19667 +<7d9f> 6101 +<7da0> 8594 +<7da2> 6097 +<7da3> 6091 +<7da6> 17043 +<7da7> 18357 +<7daa> 18358 +<7dab> 6095 +<7dac> 2342 +<7dad> 1185 +<7dae> 6090 +<7daf> 6098 +<7db0> 6102 +<7db1> 2013 +<7db2> 3810 +<7db3> 19668 +<7db4> 3058 +<7db5> 6092 +<7db6> 18359 +<7db7> 8593 +<7db8> 6100 +<7db9> 19669 +<7dba> 6089 +<7dbb> 2940 +<7dbd> 6094 +<7dbe> 1153 +<7dbf> 3798 +<7dc0> 18360 +<7dc2> 17044 +<7dc7> 6093 +<7dca> 1747 +<7dcb> 3456 +<7dcc> 14982 +<7dcf> 2799 +<7dd0> 19670 +<7dd1> 3992 +<7dd2> 2425 +<7dd5> 6141 +<7dd6> 8595 +<7dd7> 18361 +<7dd8> 6103 +<7dd9> 18362 +<7dda> 2722 +<7ddc> 6099 +<7ddd> 6104 +<7dde> 6106 +<7de0> 3093 +<7de1> 6109 +<7de2> 22215 +<7de3> 13322 +<7de4> 6105 +<7de5> 19671 +<7de6> 18363 +<7de8> 3620 +<7de9> 1543 +<7dea> 22216 +<7deb> 14983 +<7dec> 3799 +<7ded> 22217 +<7def> 1186 +<7df1> 14984 +<7df2> 6108 +<7df4> 4037 +<7df9> 14985 +<7dfa> 22218 +<7dfb> 6107 +<7e00> 22214 +<7e01> 1297 +<7e04> 3268 +<7e05> 6110 +<7e08> 14986 +<7e09> 6117 +<7e0a> 6111 +<7e0b> 6118 +<7e10> 18367 +<7e11> 14987 +<7e12> 6114 +<7e15> 14988 +endcidchar + +100 begincidchar +<7e17> 18368 +<7e1b> 3377 +<7e1c> 22219 +<7e1d> 18369 +<7e1e> 2294 +<7e1f> 6116 +<7e20> 14989 +<7e21> 6113 +<7e22> 6119 +<7e23> 6112 +<7e26> 2382 +<7e27> 18370 +<7e28> 17045 +<7e2b> 3667 +<7e2c> 18371 +<7e2d> 22220 +<7e2e> 2390 +<7e2f> 19674 +<7e31> 6115 +<7e32> 6127 +<7e33> 22221 +<7e35> 6123 +<7e36> 19675 +<7e37> 6126 +<7e39> 6124 +<7e3a> 6128 +<7e3b> 6122 +<7e3d> 6096 +<7e3e> 2679 +<7e3f> 22222 +<7e41> 3423 +<7e43> 6125 +<7e44> 19676 +<7e45> 18372 +<7e46> 6120 +<7e47> 14990 +<7e48> 14183 +<7e4a> 2723 +<7e4b> 1832 +<7e4d> 2357 +<7e4e> 22223 +<7e50> 22224 +<7e52> 8596 +<7e54> 2539 +<7e55> 2744 +<7e56> 6131 +<7e58> 22225 +<7e5d> 6130 +<7e5e> 6132 +<7e5f> 22226 +<7e61> 7697 +<7e62> 14991 +<7e65> 22227 +<7e66> 6121 +<7e67> 6129 +<7e69> 6137 +<7e6a> 6136 +<7e6b> 7671 +<7e6d> 3752 +<7e6e> 14992 +<7e6f> 19677 +<7e70> 1793 +<7e73> 14993 +<7e75> 18373 +<7e78> 19678 +<7e79> 6135 +<7e7b> 6139 +<7e7c> 6138 +<7e7d> 6142 +<7e7e> 18374 +<7e7f> 6144 +<7e81> 19679 +<7e82> 2186 +<7e83> 6140 +<7e8a> 8359 +<7e8c> 6147 +<7e8d> 14994 +<7e8e> 6153 +<7e8f> 3125 +<7e90> 6149 +<7e91> 14995 +<7e92> 6148 +<7e95> 22228 +<7e96> 6152 +<7e98> 14996 +<7e9a> 18378 +<7f36> 1544 +<7f38> 6156 +<7f3a> 6157 +<7f3b> 18381 +<7f3c> 18380 +<7f3d> 19680 +<7f3e> 18382 +<7f3f> 22231 +<7f43> 18383 +<7f44> 14997 +<7f45> 6158 +<7f47> 8597 +<7f4f> 14998 +<7f54> 6165 +endcidchar + +100 begincidchar +<7f55> 6164 +<7f58> 6166 +<7f5b> 19681 +<7f5c> 22232 +<7f5d> 19682 +<7f61> 15001 +<7f65> 19683 +<7f66> 22233 +<7f67> 6171 +<7f6a> 2129 +<7f6b> 1833 +<7f6d> 18389 +<7f6e> 2964 +<7f70> 3399 +<7f71> 19684 +<7f72> 2426 +<7f75> 3331 +<7f77> 3457 +<7f78> 6172 +<7f79> 4918 +<7f82> 6173 +<7f83> 6175 +<7f85> 3919 +<7f86> 6174 +<7f87> 6177 +<7f88> 6176 +<7f8a> 3901 +<7f8b> 19687 +<7f8c> 6178 +<7f8d> 22235 +<7f8e> 3474 +<7f8f> 22236 +<7f90> 18392 +<7f91> 15002 +<7f94> 6179 +<7f96> 18395 +<7f97> 17046 +<7f9a> 6182 +<7f9c> 18396 +<7f9d> 6181 +<7f9e> 6180 +<7fa1> 8598 +<7fa2> 19688 +<7fa3> 6183 +<7fa4> 1800 +<7fa6> 22237 +<7fa8> 2724 +<7fa9> 1627 +<7faa> 22238 +<7fad> 18397 +<7fae> 6187 +<7faf> 6184 +<7fb2> 6185 +<7fb4> 22239 +<7fb6> 6188 +<7fb8> 6189 +<7fb9> 6186 +<7fbc> 22240 +<7fbd> 1227 +<7fbf> 15003 +<7fc0> 22241 +<7fc1> 1319 +<7fc3> 18399 +<7fc8> 22242 +<7fca> 6193 +<7fcc> 3916 +<7fce> 15004 +<7fcf> 18400 +<7fd2> 2358 +<7fd4> 6195 +<7fd5> 6194 +<7fdb> 17047 +<7fdf> 15005 +<7fe0> 2607 +<7fe1> 6196 +<7fe3> 18401 +<7fe5> 15006 +<7fe6> 6197 +<7fe8> 22243 +<7fe9> 6198 +<7feb> 1569 +<7fec> 15007 +<7ff0> 1545 +<7ff2> 18402 +<7ff3> 6199 +<7ff9> 6200 +<7ffa> 15010 +<7ffb> 3723 +<7ffc> 3917 +<8000> 3902 +<8001> 4061 +<8002> 14099 +<8003> 2015 +<8004> 6203 +<8005> 2304 +<8006> 6202 +<8007> 19692 +<8008> 18404 +<800a> 18403 +<800b> 6204 +endcidchar + +100 begincidchar +<800c> 2261 +<800d> 19693 +<800e> 15011 +<800f> 22244 +<8010> 2865 +<8011> 15012 +<8012> 6205 +<8013> 22245 +<8014> 15013 +<8015> 2014 +<8016> 18405 +<8017> 3811 +<801c> 6208 +<801d> 22246 +<801e> 19694 +<8021> 6209 +<8024> 15014 +<8026> 15015 +<8028> 6210 +<802c> 18406 +<802e> 22249 +<8030> 18407 +<8033> 2262 +<8034> 22250 +<8035> 17048 +<8036> 3833 +<8037> 17049 +<8039> 19695 +<803a> 15016 +<803b> 6212 +<803c> 15017 +<803d> 2941 +<803e> 22251 +<803f> 6211 +<8040> 22252 +<8043> 18408 +<8044> 22253 +<8046> 6214 +<804a> 6213 +<8052> 6215 +<8056> 2655 +<8058> 6216 +<805a> 6217 +<805e> 3593 +<805f> 6218 +<8060> 15018 +<8061> 2801 +<8062> 6219 +<8064> 22254 +<8066> 18409 +<8068> 6220 +<806d> 22255 +<806f> 4038 +<8070> 6223 +<8071> 15019 +<8072> 6222 +<8073> 6221 +<8074> 3020 +<8075> 15020 +<8076> 6224 +<8077> 2540 +<8079> 6225 +<807b> 18410 +<807d> 6226 +<807e> 4062 +<807f> 6227 +<8081> 22256 +<8084> 6228 +<8085> 6230 +<8086> 6229 +<8087> 3385 +<8088> 19696 +<8089> 3281 +<808b> 4068 +<808c> 3389 +<808e> 19697 +<8093> 6232 +<8096> 2491 +<8098> 3484 +<8099> 18411 +<809a> 6233 +<809b> 6231 +<809c> 18412 +<809d> 1546 +<809e> 15021 +<80a1> 1928 +<80a2> 2230 +<80a4> 18413 +<80a5> 3458 +<80a6> 15022 +<80a7> 18414 +<80a9> 1886 +<80aa> 3697 +<80ab> 15023 +<80ac> 6236 +<80ad> 6234 +<80af> 2016 +<80b1> 2017 +<80b2> 1197 +<80b4> 2136 +endcidchar + +100 begincidchar +<80b8> 18415 +<80b9> 22257 +<80ba> 3343 +<80c3> 1187 +<80c4> 6241 +<80c5> 18417 +<80c6> 2942 +<80c8> 22258 +<80ca> 17050 +<80cc> 3342 +<80cd> 22259 +<80ce> 2875 +<80cf> 19698 +<80d2> 22260 +<80d4> 19699 +<80d5> 18418 +<80d6> 6243 +<80d9> 6239 +<80da> 6242 +<80db> 6237 +<80dd> 6240 +<80de> 3668 +<80e0> 17051 +<80e1> 1929 +<80e4> 1217 +<80e5> 6238 +<80e6> 18419 +<80ed> 19700 +<80ee> 22261 +<80ef> 6245 +<80f0> 19701 +<80f1> 6246 +<80f2> 22262 +<80f3> 17052 +<80f4> 3217 +<80f5> 18421 +<80f6> 22263 +<80f7> 19702 +<80f8> 1715 +<80f9> 22264 +<80fa> 19703 +<80fb> 18422 +<80fc> 6257 +<80fd> 3315 +<80fe> 19704 +<8102> 2231 +<8103> 19705 +<8105> 1716 +<8106> 2668 +<8107> 4076 +<8108> 3770 +<8109> 6244 +<810a> 2680 +<810b> 22265 +<810d> 18420 +<8116> 15026 +<8117> 19706 +<8118> 15027 +<811a> 1645 +<811b> 6247 +<811c> 22266 +<811e> 18425 +<8120> 22267 +<8123> 6249 +<8124> 18427 +<8127> 18428 +<8129> 6248 +<812b> 13913 +<812c> 18429 +<812f> 6250 +<8130> 19707 +<8131> 2916 +<8133> 3316 +<8135> 18424 +<8139> 3021 +<813a> 15028 +<813c> 22268 +<813d> 18431 +<813e> 6254 +<8141> 14194 +<8145> 22269 +<8146> 6253 +<8147> 22270 +<814a> 15029 +<814b> 6251 +<814c> 15030 +<814e> 2587 +<8150> 3543 +<8151> 6256 +<8152> 22271 +<8153> 6255 +<8154> 2018 +<8155> 4089 +<8157> 19708 +<815f> 6272 +<8160> 17053 +<8161> 22272 +<8169> 18433 +<816b> 2332 +<816d> 17056 +endcidchar + +100 begincidchar +<816e> 6259 +<816f> 19709 +<8170> 2058 +<8171> 6258 +<8173> 19710 +<8174> 6262 +<8177> 22273 +<8178> 3022 +<8179> 3570 +<817a> 2725 +<817f> 2876 +<8180> 6266 +<8181> 15031 +<8182> 6267 +<8183> 6263 +<8184> 15032 +<8185> 18436 +<8186> 22274 +<8188> 6264 +<818a> 6265 +<818b> 19711 +<818e> 22275 +<818f> 2019 +<8190> 19712 +<8193> 6273 +<8195> 6269 +<8196> 22276 +<8198> 18438 +<819a> 3544 +<819b> 19713 +<819c> 3738 +<819d> 3482 +<819e> 19714 +<81a0> 6268 +<81a2> 22277 +<81a3> 6271 +<81a4> 6270 +<81a8> 3698 +<81a9> 6274 +<81ae> 22278 +<81b0> 6275 +<81b2> 18439 +<81b3> 2745 +<81b4> 15033 +<81b5> 6276 +<81b8> 6278 +<81ba> 6282 +<81bb> 17057 +<81bd> 6279 +<81be> 6277 +<81bf> 3317 +<81c0> 6280 +<81c1> 18440 +<81c2> 6281 +<81c3> 18441 +<81c5> 22279 +<81c6> 1330 +<81c8> 6288 +<81c9> 6283 +<81ca> 17058 +<81cb> 19715 +<81cd> 6284 +<81ce> 22280 +<81cf> 15034 +<81d1> 6285 +<81d3> 2817 +<81d5> 19716 +<81d6> 18442 +<81d7> 17059 +<81d8> 6287 +<81d9> 6286 +<81da> 6289 +<81db> 18443 +<81e1> 19719 +<81e3> 2569 +<81e4> 18445 +<81e5> 1385 +<81e7> 6292 +<81e8> 3999 +<81ea> 2263 +<81eb> 22281 +<81ec> 18447 +<81ed> 2359 +<81ef> 19720 +<81f3> 2232 +<81f4> 2965 +<81f5> 22285 +<81f6> 19721 +<81f8> 22286 +<81f9> 15035 +<81fc> 1235 +<81fd> 18448 +<81fe> 6295 +<81ff> 18449 +<8200> 19722 +<8203> 15036 +<8204> 18451 +<8205> 6298 +<8207> 6299 +<8208> 1717 +endcidchar + +100 begincidchar +<8209> 5039 +<820a> 6300 +<820b> 19723 +<820c> 2697 +<820d> 6301 +<820e> 2295 +<820f> 22288 +<8210> 6302 +<8212> 4105 +<8216> 6303 +<8217> 3630 +<8218> 1560 +<8219> 18453 +<821a> 19726 +<821b> 2726 +<821c> 2402 +<821d> 22289 +<821e> 3555 +<821f> 2360 +<8221> 15037 +<8222> 18454 +<8228> 22290 +<8229> 6304 +<822a> 2020 +<822b> 6305 +<822c> 3424 +<822e> 6319 +<8232> 15038 +<8233> 6307 +<8234> 15039 +<8235> 2857 +<8236> 3371 +<8237> 1907 +<8238> 6306 +<8239> 2727 +<823a> 19727 +<823c> 18456 +<8240> 6308 +<8243> 22291 +<8244> 19728 +<8245> 18458 +<8246> 15040 +<8247> 3094 +<8249> 18457 +<824b> 15041 +<824e> 22292 +<824f> 15042 +<8251> 22293 +<8256> 22294 +<8257> 18462 +<8258> 6310 +<8259> 6309 +<825a> 6312 +<825c> 18464 +<825d> 6311 +<825f> 6313 +<8260> 17061 +<8262> 6315 +<8263> 18465 +<8264> 6314 +<8266> 1547 +<8267> 22295 +<8268> 6316 +<826d> 19729 +<826e> 2081 +<826f> 3985 +<8271> 6320 +<8272> 2541 +<8274> 17062 +<8276> 1298 +<8279> 14197 +<827b> 22296 +<827d> 18468 +<827e> 6323 +<827f> 18469 +<8283> 18470 +<8284> 19730 +<8287> 22299 +<8289> 19731 +<828a> 18471 +<828b> 1206 +<828d> 6324 +<828e> 15043 +<8291> 19732 +<8292> 6325 +<8293> 18472 +<8294> 22300 +<8296> 22301 +<8298> 22302 +<8299> 3545 +<829d> 2291 +<829f> 6327 +<82a0> 22305 +<82a1> 17064 +<82a5> 1415 +<82a6> 1142 +<82a9> 17067 +<82aa> 19733 +<82ab> 6326 +<82ac> 6329 +endcidchar + +100 begincidchar +<82ad> 3332 +<82ae> 15044 +<82af> 2570 +<82b0> 19734 +<82b1> 1366 +<82b2> 18475 +<82b3> 3669 +<82b4> 18476 +<82b7> 15045 +<82b8> 1843 +<82b9> 1748 +<82ba> 18477 +<82bb> 6328 +<82bc> 18478 +<82bd> 1386 +<82be> 15046 +<82bf> 17068 +<82c5> 1503 +<82c6> 15047 +<82d0> 19735 +<82d1> 1299 +<82d2> 6333 +<82d3> 4018 +<82d4> 2877 +<82d5> 17069 +<82d7> 3510 +<82d9> 6345 +<82da> 22306 +<82db> 1367 +<82dc> 6343 +<82de> 6341 +<82df> 6332 +<82e0> 22307 +<82e1> 6330 +<82e2> 18479 +<82e3> 6331 +<82e4> 22308 +<82e5> 2319 +<82e6> 1764 +<82e7> 2997 +<82e8> 18480 +<82ea> 19736 +<82eb> 3241 +<82ed> 22309 +<82ef> 19737 +<82f1> 1267 +<82f3> 6335 +<82f4> 6334 +<82f6> 19738 +<82f7> 18481 +<82f9> 6340 +<82fa> 6336 +<82fb> 6339 +<82fd> 17070 +<82fe> 15048 +<8300> 17071 +<8301> 8600 +<8302> 3804 +<8303> 6338 +<8304> 1368 +<8305> 1499 +<8306> 6342 +<8309> 6344 +<830c> 18484 +<830e> 1834 +<8316> 6348 +<831b> 18486 +<831c> 1135 +<831d> 18487 +<8321> 22314 +<8322> 17072 +<8323> 6365 +<8328> 1205 +<832b> 6356 +<832c> 22315 +<832d> 17073 +<832e> 22316 +<832f> 6355 +<8330> 18488 +<8331> 6350 +<8332> 6349 +<8333> 22317 +<8334> 6347 +<8335> 6346 +<8336> 2977 +<8337> 22318 +<8338> 2907 +<8339> 6352 +<833a> 17074 +<833c> 18489 +<833d> 22319 +<8340> 6351 +<8342> 22320 +<8343> 15049 +<8344> 18490 +<8345> 6354 +<8346> 7672 +<8347> 17075 +<8349> 2802 +<834a> 1835 +endcidchar + +100 begincidchar +<834f> 1251 +<8350> 6353 +<8351> 15050 +<8352> 2021 +<8353> 22332 +<8354> 18485 +<8355> 15051 +<8356> 19739 +<8357> 18491 +<8358> 2803 +<835a> 14202 +<8362> 8601 +<8363> 17775 +<8370> 22323 +<8373> 6371 +<8375> 6372 +<8377> 1369 +<8378> 19740 +<837b> 1326 +<837c> 6369 +<837d> 17076 +<837f> 8602 +<8380> 22324 +<8382> 22325 +<8384> 22326 +<8385> 6359 +<8386> 15052 +<8387> 6367 +<8389> 6374 +<838a> 6368 +<838d> 15053 +<838e> 6366 +<8392> 15054 +<8393> 6337 +<8396> 6364 +<8398> 15055 +<8399> 22327 +<839a> 6360 +<839b> 18497 +<839c> 22328 +<839d> 18498 +<839e> 1548 +<839f> 6362 +<83a0> 6373 +<83a2> 6363 +<83a6> 22329 +<83a7> 17077 +<83a8> 6375 +<83a9> 15056 +<83aa> 6361 +<83ab> 3378 +<83ac> 22330 +<83ad> 22335 +<83b1> 3923 +<83b5> 6370 +<83bd> 6392 +<83be> 22331 +<83c1> 6384 +<83c5> 2625 +<83c7> 8603 +<83c9> 18499 +<83ca> 1632 +<83cc> 1749 +<83ce> 6379 +<83cf> 17078 +<83d0> 18500 +<83d1> 17079 +<83d3> 1371 +<83d4> 18501 +<83d6> 2492 +<83d8> 6382 +<83dc> 2122 +<83dd> 18502 +<83df> 3147 +<83e0> 6387 +<83e1> 17080 +<83e5> 18503 +<83e8> 22333 +<83e9> 3646 +<83ea> 15059 +<83eb> 6378 +<83ef> 1370 +<83f0> 1930 +<83f1> 3483 +<83f2> 6388 +<83f4> 6376 +<83f6> 8604 +<83f7> 6385 +<83f8> 19741 +<83f9> 18504 +<83fb> 6395 +<83fc> 19742 +<83fd> 6380 +<8401> 17081 +<8403> 6381 +<8404> 3218 +<8406> 17082 +<8407> 6386 +<840a> 7807 +<840b> 6383 +endcidchar + +100 begincidchar +<840c> 3670 +<840d> 6389 +<840e> 1188 +<840f> 15060 +<8411> 15061 +<8413> 6377 +<8415> 18505 +<8417> 18507 +<8419> 22334 +<8420> 6391 +<8422> 6390 +<8429> 3361 +<842a> 6397 +<842c> 6408 +<842f> 22336 +<8431> 1500 +<8435> 6411 +<8438> 6393 +<8439> 18508 +<843c> 6398 +<843d> 3928 +<8445> 22337 +<8446> 6407 +<8447> 22338 +<8448> 8605 +<8449> 3903 +<844a> 15062 +<844d> 22339 +<844e> 3954 +<844f> 18509 +<8456> 22340 +<8457> 2998 +<8458> 19743 +<845b> 1481 +<845c> 18514 +<845f> 17083 +<8460> 22342 +<8461> 3556 +<8462> 6413 +<8463> 3193 +<8464> 22343 +<8465> 18516 +<8466> 1141 +<8467> 22344 +<8469> 6406 +<846a> 22345 +<846b> 6402 +<846c> 2804 +<846d> 6396 +<846e> 6404 +<846f> 6409 +<8470> 17084 +<8471> 3298 +<8473> 17085 +<8474> 22346 +<8475> 1134 +<8476> 15063 +<8477> 6401 +<8478> 18517 +<8479> 6410 +<847a> 3562 +<847c> 18518 +<847d> 22347 +<8481> 18519 +<8482> 6405 +<8484> 6400 +<8485> 17086 +<848b> 2493 +<8490> 2361 +<8492> 22348 +<8493> 19744 +<8494> 2264 +<8495> 22349 +<8497> 18521 +<8499> 3812 +<849c> 3513 +<849e> 17087 +<849f> 6416 +<84a1> 6425 +<84a6> 18522 +<84a8> 15064 +<84ad> 6403 +<84af> 15065 +<84b1> 19745 +<84b2> 1493 +<84b4> 8606 +<84b8> 2528 +<84b9> 6414 +<84ba> 17088 +<84bb> 6419 +<84bc> 2805 +<84bd> 19746 +<84be> 18523 +<84bf> 6415 +<84c0> 15066 +<84c1> 6422 +<84c2> 15067 +<84c4> 2973 +<84c6> 6423 +<84c9> 3904 +endcidchar + +100 begincidchar +<84ca> 6412 +<84cb> 1430 +<84cc> 22354 +<84cd> 6418 +<84d0> 6421 +<84d1> 3768 +<84d3> 18527 +<84d6> 6424 +<84d9> 6417 +<84da> 6420 +<84dc> 8363 +<84e7> 18529 +<84ea> 18530 +<84ec> 3671 +<84ee> 4039 +<84ef> 18531 +<84f0> 15068 +<84f1> 18532 +<84f2> 22355 +<84f4> 6428 +<84f7> 22356 +<84fa> 18533 +<84fb> 19747 +<84fc> 6435 +<84fd> 15069 +<84ff> 6427 +<8500> 2287 +<8506> 6394 +<8507> 22359 +<850c> 15070 +<850e> 22360 +<8510> 22361 +<8511> 3614 +<8513> 3758 +<8514> 6434 +<8515> 6433 +<851a> 1240 +<851b> 18534 +<851c> 22362 +<851e> 17091 +<851f> 6432 +<8521> 6426 +<8522> 22363 +<8523> 7706 +<8526> 3057 +<8527> 22364 +<852a> 22365 +<852b> 18537 +<852c> 6431 +<852d> 1218 +<852f> 17092 +<8532> 17090 +<8533> 22366 +<8534> 15071 +<8535> 2818 +<8536> 22367 +<853d> 3603 +<853e> 7861 +<853f> 22368 +<8540> 6436 +<8541> 6440 +<8543> 3437 +<8546> 19748 +<8548> 6439 +<8549> 2494 +<854a> 2293 +<854b> 6442 +<854e> 1718 +<854f> 18538 +<8550> 22369 +<8551> 18541 +<8552> 22370 +<8553> 8607 +<8555> 6443 +<8556> 19749 +<8557> 3563 +<8558> 6438 +<8559> 8608 +<855a> 6399 +<855c> 22371 +<855d> 19750 +<855e> 15072 +<8563> 6437 +<8564> 17093 +<8568> 4085 +<8569> 3194 +<856a> 3557 +<856b> 8609 +<856d> 6450 +<856f> 18539 +<8577> 6456 +<8579> 22375 +<857a> 17094 +<857b> 18545 +<857d> 18546 +<857e> 6457 +<857f> 18547 +<8580> 6444 +<8581> 18548 +<8584> 3372 +endcidchar + +100 begincidchar +<8585> 19751 +<8586> 18549 +<8587> 6454 +<8588> 6446 +<8589> 22376 +<858a> 6448 +<858b> 22377 +<858c> 17095 +<858f> 15073 +<8590> 6458 +<8591> 6447 +<8593> 18550 +<8594> 6451 +<8597> 1300 +<8598> 19752 +<8599> 3261 +<859b> 6452 +<859c> 6455 +<859d> 18551 +<859f> 18552 +<85a0> 22378 +<85a2> 17096 +<85a4> 6445 +<85a5> 22379 +<85a6> 2728 +<85a7> 22380 +<85a8> 6449 +<85a9> 2165 +<85aa> 2571 +<85ab> 1798 +<85ac> 3840 +<85ad> 15076 +<85ae> 3845 +<85af> 2428 +<85b0> 8611 +<85b4> 22381 +<85b6> 22382 +<85b7> 15074 +<85b8> 22383 +<85b9> 6462 +<85ba> 6460 +<85bc> 18556 +<85c1> 4084 +<85c2> 22387 +<85c7> 18557 +<85c9> 6459 +<85ca> 18558 +<85cb> 17097 +<85cd> 3935 +<85ce> 15075 +<85cf> 6461 +<85d0> 6463 +<85d5> 6464 +<85da> 22388 +<85dc> 6467 +<85dd> 6465 +<85df> 18561 +<85e0> 22389 +<85e1> 18562 +<85e4> 3195 +<85e5> 6466 +<85e6> 18563 +<85e8> 22390 +<85e9> 3425 +<85ea> 6453 +<85ed> 17098 +<85f3> 22391 +<85f4> 14208 +<85f6> 18564 +<85f7> 2429 +<85f9> 6468 +<85fa> 6473 +<85fb> 2806 +<85fc> 22392 +<85fe> 6472 +<85ff> 17099 +<8600> 18565 +<8602> 6441 +<8606> 6474 +<8607> 2763 +<860a> 6469 +<860b> 6471 +<8610> 17102 +<8611> 18566 +<8612> 15077 +<8613> 6470 +<8616> 5328 +<8617> 5313 +<8618> 17104 +<8619> 22395 +<861a> 6476 +<861b> 22396 +<861e> 18567 +<8621> 18568 +<8622> 6475 +<8624> 18569 +<8627> 18570 +<8629> 15078 +<862d> 3936 +<862f> 5809 +endcidchar + +100 begincidchar +<8630> 6477 +<8636> 22397 +<8638> 17105 +<8639> 18572 +<863a> 22398 +<863c> 18573 +<863d> 22399 +<863f> 6478 +<8640> 18575 +<8641> 16824 +<8642> 19753 +<8646> 19754 +<864d> 6479 +<864e> 1931 +<8650> 1646 +<8652> 15079 +<8653> 18576 +<8654> 6481 +<8655> 4244 +<8656> 18577 +<8657> 17106 +<865a> 1679 +<865b> 13336 +<865c> 3970 +<865d> 22402 +<865e> 1771 +<865f> 6482 +<8662> 17107 +<8663> 15080 +<8664> 22405 +<8667> 6483 +<8669> 22406 +<866b> 2988 +<866c> 15081 +<866f> 15082 +<8671> 6484 +<8675> 17109 +<8676> 22407 +<8677> 18578 +<8679> 3282 +<867a> 15083 +<867b> 1150 +<867d> 14214 +<8687> 18579 +<8688> 22425 +<8689> 18580 +<868a> 1379 +<868d> 15084 +<8691> 15085 +<8693> 6485 +<8695> 2187 +<8696> 22408 +<8698> 15086 +<869a> 22409 +<86a1> 22410 +<86a3> 6486 +<86a4> 3320 +<86a6> 22411 +<86ab> 6498 +<86ad> 22412 +<86af> 6492 +<86b0> 6495 +<86b1> 18583 +<86b3> 18584 +<86b6> 6491 +<86b7> 22415 +<86b8> 17110 +<86b9> 22416 +<86bf> 22417 +<86c0> 19755 +<86c1> 18585 +<86c3> 18586 +<86c4> 6493 +<86c5> 22418 +<86c6> 6494 +<86c7> 2308 +<86c9> 6496 +<86cb> 2943 +<86cd> 1836 +<86ce> 1440 +<86d1> 18587 +<86d2> 22419 +<86d4> 6499 +<86d5> 18588 +<86d7> 18589 +<86d9> 1437 +<86da> 22420 +<86db> 6504 +<86dc> 22421 +<86de> 6500 +<86df> 6503 +<86e0> 22422 +<86e3> 18590 +<86e4> 3406 +<86e5> 22423 +<86e6> 18591 +<86e7> 22424 +<86e9> 6501 +<86ec> 6502 +<86ed> 3514 +endcidchar + +100 begincidchar +<86ee> 3438 +<86ef> 6505 +<86f8> 2909 +<86f9> 6515 +<86fa> 15089 +<86fb> 6511 +<86fc> 17111 +<86fd> 15090 +<86fe> 1387 +<8700> 6509 +<8702> 3672 +<8703> 6510 +<8704> 22426 +<8705> 18593 +<8706> 6507 +<8707> 18594 +<8708> 6508 +<8709> 6513 +<870a> 6516 +<870b> 15091 +<870d> 6514 +<870e> 18595 +<870f> 22427 +<8710> 18596 +<8711> 6512 +<8712> 6506 +<8713> 15092 +<8714> 19756 +<8718> 2966 +<8719> 15093 +<871a> 6523 +<871c> 3766 +<871e> 15094 +<871f> 18597 +<8721> 18598 +<8722> 19757 +<8723> 18599 +<8725> 6521 +<8728> 15095 +<8729> 6522 +<872e> 19758 +<872f> 22428 +<8731> 18600 +<8732> 22429 +<8734> 6517 +<8737> 6519 +<8739> 19759 +<873a> 18601 +<873b> 6520 +<873e> 15096 +<873f> 6518 +<8740> 18602 +<8743> 18603 +<8745> 22432 +<8749> 2698 +<874b> 4063 +<874c> 6527 +<874d> 22433 +<874e> 6528 +<8751> 18604 +<8753> 6534 +<8755> 2544 +<8757> 6530 +<8758> 18605 +<8759> 6533 +<875d> 19760 +<875f> 6525 +<8760> 6524 +<8761> 22434 +<8763> 6535 +<8766> 1372 +<8768> 6531 +<876a> 6536 +<876e> 6532 +<876f> 22435 +<8771> 15097 +<8772> 18608 +<8774> 6529 +<8776> 3023 +<8778> 6526 +<877b> 19761 +<877c> 18609 +<877f> 3358 +<8782> 6540 +<8787> 17112 +<8788> 15098 +<8789> 18613 +<878b> 18614 +<878c> 19762 +<878d> 3877 +<878e> 19763 +<8790> 22440 +<8793> 18615 +<8795> 22441 +<8799> 15099 +<879e> 19766 +<879f> 6539 +<87a0> 18616 +<87a2> 6538 +<87a3> 19767 +endcidchar + +100 begincidchar +<87a7> 18612 +<87ab> 6547 +<87ae> 19768 +<87af> 6541 +<87b1> 22443 +<87b3> 6549 +<87b5> 15102 +<87ba> 3920 +<87bb> 6552 +<87bd> 6543 +<87be> 18619 +<87bf> 19769 +<87c0> 6544 +<87c1> 18621 +<87c4> 6548 +<87c6> 6551 +<87c7> 6550 +<87c8> 22444 +<87c9> 19770 +<87ca> 22445 +<87cb> 6542 +<87ce> 18622 +<87d0> 6545 +<87d2> 6562 +<87d5> 22446 +<87d6> 15103 +<87d9> 22447 +<87da> 19771 +<87dc> 22448 +<87df> 18623 +<87e0> 6555 +<87e2> 22449 +<87e3> 18625 +<87e4> 22450 +<87ea> 18628 +<87eb> 15104 +<87ec> 7715 +<87ed> 15105 +<87ef> 6553 +<87f1> 22451 +<87f2> 6554 +<87f3> 22452 +<87f5> 15421 +<87f8> 22453 +<87f9> 1416 +<87fa> 22454 +<87fb> 1628 +<87fe> 6558 +<87ff> 22455 +<8801> 15106 +<8803> 20312 +<8805> 6537 +<8806> 15108 +<8807> 8614 +<8809> 22456 +<880a> 17114 +<880b> 15109 +<880d> 6557 +<880e> 6561 +<880f> 6556 +<8810> 17115 +<8811> 6563 +<8812> 22458 +<8813> 18629 +<8814> 15110 +<8815> 6565 +<8816> 6564 +<8818> 19772 +<8819> 22457 +<881a> 22459 +<881b> 19773 +<881c> 15111 +<881e> 22460 +<881f> 7813 +<8821> 6567 +<8822> 6566 +<8823> 6497 +<8827> 6571 +<8828> 18630 +<882d> 19774 +<882e> 18631 +<8830> 22461 +<8831> 6568 +<8832> 18632 +<8835> 22462 +<8836> 6569 +<8839> 6570 +<883a> 19775 +<883b> 6572 +<883c> 18633 +<8840> 1858 +<8841> 22463 +<8842> 6574 +<8843> 22464 +<8844> 6573 +<8845> 19776 +<8846> 2362 +<884a> 18635 +<884b> 19777 +<884c> 2022 +endcidchar + +100 begincidchar +<884d> 5412 +<884e> 19778 +<8851> 22468 +<8852> 6575 +<8853> 2395 +<8855> 19779 +<8856> 15112 +<8857> 1431 +<8858> 18636 +<8859> 6576 +<885a> 19780 +<885b> 1268 +<885c> 22469 +<885d> 2495 +<885e> 6577 +<885f> 15113 +<8860> 22470 +<8861> 2023 +<8862> 6578 +<8863> 1189 +<8864> 15114 +<8868> 3503 +<8869> 18639 +<886b> 6579 +<886e> 19781 +<886f> 18641 +<8870> 2608 +<8871> 22471 +<8872> 6586 +<8875> 6583 +<8877> 2989 +<8879> 22472 +<887b> 22473 +<887d> 6584 +<887e> 6581 +<887f> 1750 +<8880> 22474 +<8881> 6580 +<8882> 6587 +<8888> 1804 +<888b> 2878 +<888d> 6593 +<8892> 6589 +<8896> 2837 +<8897> 6588 +<8898> 15115 +<8899> 6591 +<889e> 6582 +<889f> 22475 +<88a0> 18642 +<88a2> 6592 +<88a4> 6594 +<88a8> 22476 +<88aa> 15116 +<88ab> 3459 +<88ae> 6590 +<88b0> 6595 +<88b1> 6597 +<88b4> 1927 +<88b5> 6585 +<88b7> 1157 +<88ba> 22477 +<88bc> 18643 +<88bf> 6596 +<88c0> 18644 +<88c1> 2123 +<88c2> 4030 +<88c5> 2807 +<88c6> 14217 +<88ca> 15119 +<88cd> 19785 +<88ce> 17116 +<88cf> 3946 +<88d1> 18646 +<88d2> 15120 +<88d3> 18647 +<88d4> 6600 +<88d5> 3871 +<88db> 15121 +<88dc> 3636 +<88dd> 6603 +<88de> 22480 +<88df> 2096 +<88e0> 19786 +<88e1> 3947 +<88e7> 22481 +<88e8> 6608 +<88ef> 19787 +<88f2> 6609 +<88f3> 2496 +<88f4> 6607 +<88f5> 8615 +<88f7> 22482 +<88f8> 3921 +<88f9> 6604 +<88fc> 6606 +<88fd> 2657 +<88fe> 2628 +<8901> 18649 +<8902> 6605 +endcidchar + +100 begincidchar +<8904> 6610 +<8906> 15124 +<8907> 3571 +<890a> 6612 +<890c> 6611 +<890d> 22483 +<8910> 1482 +<8912> 3673 +<8913> 6613 +<891c> 8360 +<891d> 6625 +<891e> 6615 +<8920> 22486 +<8925> 6616 +<8926> 19790 +<8927> 15128 +<8928> 22487 +<8930> 15129 +<8931> 22488 +<8932> 17118 +<8935> 19791 +<8936> 6622 +<8937> 18651 +<8938> 6623 +<8939> 17119 +<893a> 22489 +<893b> 6621 +<893e> 15130 +<8940> 17120 +<8941> 6619 +<8942> 18653 +<8943> 6614 +<8944> 6620 +<8945> 18654 +<8946> 22490 +<8949> 18655 +<894c> 6624 +<894d> 7120 +<894f> 22491 +<8952> 22492 +<8956> 1320 +<8957> 22493 +<895a> 19792 +<895b> 22494 +<895c> 19793 +<895e> 6627 +<895f> 1751 +<8960> 6626 +<8961> 22495 +<8962> 18657 +<8963> 22496 +<8964> 6629 +<8966> 6628 +<896a> 6631 +<896b> 19794 +<896d> 6630 +<896e> 22497 +<896f> 6632 +<8970> 19795 +<8972> 2363 +<8973> 22498 +<8974> 6633 +<8975> 22499 +<8977> 6634 +<897a> 22500 +<897b> 15131 +<897c> 19796 +<897d> 22501 +<897e> 6635 +<897f> 2658 +<8980> 13870 +<8981> 3905 +<8983> 6636 +<8986> 3572 +<8987> 3324 +<8988> 6637 +<8989> 18658 +<898a> 6638 +<898b> 1887 +<898d> 22502 +<898f> 1606 +<8990> 18659 +<8993> 6639 +<8994> 17121 +<8995> 22503 +<8996> 2233 +<8997> 3319 +<8998> 6640 +<899a> 1454 +<899f> 18660 +<89a0> 22506 +<89a1> 6641 +<89a5> 19797 +<89a6> 6643 +<89a7> 3937 +<89a9> 6642 +<89aa> 2572 +<89ac> 6644 +<89af> 6645 +<89b0> 18661 +endcidchar + +100 begincidchar +<89b2> 6646 +<89b3> 1549 +<89b4> 22507 +<89b5> 19798 +<89b6> 22508 +<89b7> 18662 +<89ba> 6647 +<89bc> 19799 +<89bd> 6648 +<89d2> 1455 +<89d4> 15132 +<89d5> 19800 +<89d6> 15133 +<89d7> 22509 +<89d8> 18663 +<89da> 6651 +<89e3> 1394 +<89e5> 15134 +<89e6> 2542 +<89e7> 6654 +<89e9> 22510 +<89eb> 18664 +<89ed> 22511 +<89f1> 15135 +<89f3> 18666 +<89f4> 6655 +<89f6> 17122 +<89f8> 6656 +<89f9> 22512 +<89fd> 18667 +<89ff> 18668 +<8a00> 1908 +<8a01> 13756 +<8a02> 3095 +<8a03> 6657 +<8a07> 15136 +<8a08> 1837 +<8a0a> 2588 +<8a0c> 6660 +<8a0e> 3196 +<8a0f> 15137 +<8a10> 6659 +<8a11> 18670 +<8a12> 8616 +<8a13> 1799 +<8a14> 18671 +<8a15> 15138 +<8a16> 6658 +<8a17> 2903 +<8a18> 1607 +<8a1b> 6661 +<8a1d> 6662 +<8a1e> 22515 +<8a1f> 2497 +<8a20> 22516 +<8a21> 18673 +<8a22> 15139 +<8a23> 1859 +<8a24> 22517 +<8a25> 6663 +<8a26> 22518 +<8a2a> 3674 +<8a2d> 2691 +<8a2f> 22521 +<8a31> 1680 +<8a33> 3841 +<8a34> 2764 +<8a35> 18674 +<8a36> 6664 +<8a37> 8617 +<8a3a> 2573 +<8a3b> 2990 +<8a3c> 2498 +<8a3d> 22522 +<8a3e> 18675 +<8a40> 22523 +<8a41> 6665 +<8a43> 22524 +<8a45> 18676 +<8a46> 6668 +<8a47> 17123 +<8a48> 6669 +<8a49> 19801 +<8a4d> 18677 +<8a4e> 15140 +<8a50> 2094 +<8a51> 2850 +<8a52> 6667 +<8a53> 22525 +<8a54> 2499 +<8a55> 3504 +<8a56> 22526 +<8a57> 19802 +<8a58> 18678 +<8a5b> 6666 +<8a5c> 22527 +<8a5d> 17124 +<8a5e> 2234 +<8a60> 1269 +<8a61> 17125 +endcidchar + +100 begincidchar +<8a62> 6673 +<8a63> 1838 +<8a65> 22528 +<8a66> 2236 +<8a67> 19803 +<8a69> 2235 +<8a6b> 4083 +<8a6c> 6672 +<8a6d> 6671 +<8a6e> 2729 +<8a70> 1639 +<8a71> 4073 +<8a72> 1432 +<8a73> 2500 +<8a75> 17126 +<8a79> 8618 +<8a7c> 6670 +<8a7e> 19804 +<8a7f> 15141 +<8a80> 22533 +<8a82> 6675 +<8a83> 22534 +<8a84> 6676 +<8a85> 6674 +<8a86> 19805 +<8a87> 1932 +<8a89> 3882 +<8a8b> 22535 +<8a8c> 2237 +<8a8d> 3293 +<8a8f> 22536 +<8a90> 18680 +<8a91> 6679 +<8a92> 22537 +<8a93> 2660 +<8a95> 2944 +<8a96> 19806 +<8a97> 22538 +<8a98> 3872 +<8a99> 22539 +<8a9a> 6682 +<8a9e> 1952 +<8a9f> 22540 +<8aa0> 2659 +<8aa1> 6678 +<8aa3> 6683 +<8aa4> 1953 +<8aa7> 8619 +<8aa8> 6677 +<8aa9> 22541 +<8aaa> 13880 +<8aac> 2694 +<8aad> 3233 +<8aae> 18679 +<8aaf> 22542 +<8ab0> 2925 +<8ab2> 1373 +<8ab3> 22543 +<8ab6> 19807 +<8ab7> 18681 +<8ab9> 3460 +<8abb> 22544 +<8abc> 1629 +<8abe> 8620 +<8abf> 3024 +<8ac2> 6686 +<8ac3> 22545 +<8ac4> 6684 +<8ac6> 22546 +<8ac7> 2954 +<8ac8> 22547 +<8ac9> 19808 +<8aca> 22548 +<8acb> 2661 +<8acc> 1550 +<8acd> 6685 +<8acf> 2593 +<8ad0> 17127 +<8ad1> 19809 +<8ad2> 3986 +<8ad6> 4070 +<8ad7> 18682 +<8ada> 6687 +<8adb> 6698 +<8adc> 3025 +<8add> 19810 +<8ade> 6697 +<8adf> 8621 +<8ae0> 6694 +<8ae1> 6702 +<8ae2> 6695 +<8ae4> 6691 +<8ae6> 3096 +<8ae7> 6690 +<8aeb> 6688 +<8aec> 19811 +<8aed> 3851 +<8aee> 2238 +<8af0> 22552 +<8af1> 6692 +endcidchar + +100 begincidchar +<8af3> 6689 +<8af4> 15142 +<8af5> 19812 +<8af6> 8623 +<8af7> 6696 +<8af8> 2430 +<8afa> 1909 +<8afc> 18683 +<8afe> 2906 +<8aff> 22553 +<8b00> 3699 +<8b01> 1276 +<8b02> 1190 +<8b04> 3197 +<8b05> 18686 +<8b06> 19813 +<8b07> 6700 +<8b0a> 18685 +<8b0b> 22554 +<8b0c> 6699 +<8b0d> 18687 +<8b0e> 3262 +<8b0f> 19814 +<8b10> 6704 +<8b11> 19815 +<8b14> 6693 +<8b16> 6703 +<8b17> 6705 +<8b19> 1888 +<8b1a> 6701 +<8b1b> 2024 +<8b1c> 18688 +<8b1d> 2305 +<8b1e> 22555 +<8b1f> 15143 +<8b20> 6706 +<8b21> 3906 +<8b26> 6709 +<8b28> 6712 +<8b2b> 6710 +<8b2c> 3495 +<8b2d> 18689 +<8b30> 22556 +<8b33> 6707 +<8b37> 15144 +<8b39> 1752 +<8b3c> 22557 +<8b3e> 6711 +<8b41> 6713 +<8b42> 22558 +<8b45> 19816 +<8b46> 17128 +<8b48> 22559 +<8b49> 6717 +<8b4c> 6714 +<8b4d> 22560 +<8b4e> 6716 +<8b4f> 6715 +<8b51> 18691 +<8b52> 19817 +<8b53> 8624 +<8b54> 15147 +<8b56> 6718 +<8b58> 2269 +<8b59> 17129 +<8b5a> 6720 +<8b5b> 6719 +<8b5c> 3546 +<8b5e> 18692 +<8b5f> 6722 +<8b63> 22561 +<8b66> 1839 +<8b69> 17130 +<8b6b> 6721 +<8b6c> 6723 +<8b6d> 19818 +<8b6f> 6724 +<8b70> 1630 +<8b71> 6190 +<8b72> 2529 +<8b74> 6725 +<8b76> 18693 +<8b77> 1954 +<8b78> 19819 +<8b79> 22562 +<8b7c> 19820 +<8b7d> 6726 +<8b7e> 19821 +<8b7f> 8625 +<8b80> 6727 +<8b81> 18694 +<8b83> 2188 +<8b84> 22563 +<8b85> 19822 +<8b8a> 5075 +<8b8b> 18695 +<8b8c> 6728 +<8b8d> 22564 +<8b8e> 6729 +<8b8f> 22565 +endcidchar + +100 begincidchar +<8b90> 2364 +<8b96> 6732 +<8b9c> 15148 +<8b9d> 17131 +<8b9e> 15149 +<8b9f> 19823 +<8c37> 2921 +<8c38> 22566 +<8c39> 18698 +<8c3a> 6735 +<8c3d> 18700 +<8c3e> 22567 +<8c3f> 6737 +<8c41> 6736 +<8c45> 18703 +<8c46> 3198 +<8c47> 15150 +<8c48> 6738 +<8c49> 17132 +<8c4a> 3675 +<8c4b> 19824 +<8c4c> 6739 +<8c4e> 6740 +<8c4f> 18704 +<8c50> 6741 +<8c51> 22568 +<8c53> 19825 +<8c54> 15151 +<8c55> 6742 +<8c57> 18705 +<8c58> 22569 +<8c59> 22572 +<8c5a> 3250 +<8c5b> 22570 +<8c5d> 22571 +<8c61> 2501 +<8c62> 6743 +<8c66> 22575 +<8c68> 17133 +<8c69> 18706 +<8c6a> 2045 +<8c6b> 4103 +<8c6c> 6744 +<8c6d> 18707 +<8c73> 15152 +<8c78> 6745 +<8c79> 3505 +<8c7a> 6746 +<8c7b> 19826 +<8c7c> 6754 +<8c7e> 22578 +<8c82> 6747 +<8c85> 6749 +<8c89> 6748 +<8c8a> 6750 +<8c8b> 22581 +<8c8c> 3700 +<8c90> 22582 +<8c92> 18710 +<8c93> 18709 +<8c94> 6753 +<8c98> 6755 +<8c99> 18711 +<8c9b> 18713 +<8c9c> 22584 +<8c9d> 1419 +<8c9e> 3075 +<8c9f> 13644 +<8ca0> 3547 +<8ca1> 2130 +<8ca2> 2025 +<8ca4> 15153 +<8ca7> 3521 +<8ca8> 1375 +<8ca9> 3426 +<8caa> 6758 +<8cab> 1551 +<8cac> 2681 +<8cad> 6757 +<8cae> 6762 +<8caf> 2999 +<8cb0> 3823 +<8cb4> 1608 +<8cb6> 6763 +<8cb7> 3353 +<8cb8> 2879 +<8cb9> 22585 +<8cba> 19827 +<8cbb> 3461 +<8cbc> 3127 +<8cbd> 6759 +<8cbf> 3701 +<8cc0> 1388 +<8cc1> 6765 +<8cc2> 4046 +<8cc3> 3038 +<8cc4> 4075 +<8cc5> 19828 +<8cc6> 22586 +<8cc7> 2239 +endcidchar + +100 begincidchar +<8cc8> 6764 +<8cc9> 19829 +<8cca> 2833 +<8ccb> 22587 +<8ccd> 6781 +<8cce> 2730 +<8ccf> 22588 +<8cd1> 3280 +<8cd2> 19830 +<8cd3> 3522 +<8cd5> 18715 +<8cd6> 18714 +<8cd9> 15154 +<8cda> 6768 +<8cdb> 2189 +<8cdc> 2240 +<8cdd> 22589 +<8cde> 2502 +<8ce0> 3355 +<8ce1> 15155 +<8ce2> 1889 +<8ce3> 6767 +<8ce4> 6766 +<8ce6> 3548 +<8ce8> 22590 +<8cea> 2285 +<8cec> 19831 +<8ced> 3148 +<8cef> 22591 +<8cf0> 8626 +<8cf1> 18717 +<8cf2> 22592 +<8cf4> 8627 +<8cf5> 19832 +<8cf7> 19833 +<8cf8> 15156 +<8cfc> 2026 +<8cfd> 6769 +<8cfe> 15157 +<8cff> 22593 +<8d01> 19834 +<8d03> 19835 +<8d07> 6775 +<8d08> 2819 +<8d09> 18719 +<8d0a> 6774 +<8d0b> 1570 +<8d0d> 6777 +<8d0e> 18720 +<8d0f> 6776 +<8d10> 6778 +<8d12> 8628 +<8d13> 6780 +<8d14> 6782 +<8d16> 6783 +<8d17> 19836 +<8d1b> 15158 +<8d1c> 19837 +<8d64> 2682 +<8d65> 22594 +<8d66> 2299 +<8d67> 6784 +<8d69> 15159 +<8d6b> 1456 +<8d6c> 15160 +<8d6d> 6785 +<8d6e> 19838 +<8d70> 2808 +<8d71> 6786 +<8d73> 6787 +<8d74> 3549 +<8d76> 8629 +<8d77> 1609 +<8d7f> 22595 +<8d81> 6788 +<8d82> 22596 +<8d84> 15161 +<8d85> 3026 +<8d88> 22597 +<8d8a> 1277 +<8d8d> 15162 +<8d90> 22598 +<8d91> 19839 +<8d95> 15163 +<8d99> 6789 +<8d9e> 22599 +<8d9f> 19840 +<8da0> 22600 +<8da3> 2333 +<8da6> 15164 +<8da8> 2620 +<8dab> 19841 +<8dac> 22601 +<8daf> 17134 +<8db2> 19842 +<8db3> 2829 +<8db5> 22602 +<8db7> 22603 +<8db9> 22604 +<8dba> 6792 +endcidchar + +100 begincidchar +<8dbb> 22605 +<8dbc> 22613 +<8dbe> 6791 +<8dc0> 22606 +<8dc2> 6790 +<8dc5> 22607 +<8dc6> 15165 +<8dc7> 22608 +<8dc8> 18721 +<8dca> 22609 +<8dcb> 6798 +<8dcc> 6796 +<8dce> 15166 +<8dcf> 6793 +<8dd1> 17135 +<8dd4> 22610 +<8dd5> 19843 +<8dd6> 6795 +<8dd7> 17136 +<8dd9> 18722 +<8dda> 6794 +<8ddb> 6797 +<8ddd> 1681 +<8ddf> 6801 +<8de1> 2683 +<8de3> 6802 +<8de4> 15167 +<8de5> 22611 +<8de7> 19844 +<8de8> 1933 +<8dec> 15168 +<8def> 4047 +<8df0> 22612 +<8df3> 3027 +<8df4> 19847 +<8df5> 2731 +<8dfc> 6803 +<8dfd> 18725 +<8dff> 6806 +<8e01> 19848 +<8e06> 18726 +<8e0a> 3907 +<8e0b> 19849 +<8e0c> 18723 +<8e0f> 3199 +<8e10> 6809 +<8e11> 22616 +<8e14> 18728 +<8e16> 18729 +<8e1f> 6810 +<8e20> 15169 +<8e23> 17137 +<8e26> 19850 +<8e27> 18732 +<8e2a> 6824 +<8e30> 6813 +<8e31> 19851 +<8e33> 22617 +<8e34> 6814 +<8e35> 6812 +<8e36> 18735 +<8e39> 18736 +<8e3d> 17138 +<8e42> 6811 +<8e44> 3097 +<8e47> 6816 +<8e48> 6820 +<8e49> 6817 +<8e4a> 6815 +<8e4b> 15170 +<8e4c> 6818 +<8e4d> 19854 +<8e4e> 22620 +<8e4f> 19855 +<8e50> 6819 +<8e54> 18737 +<8e55> 6826 +<8e59> 6821 +<8e5b> 22621 +<8e5c> 19856 +<8e5f> 2684 +<8e60> 6823 +<8e61> 19857 +<8e62> 18738 +<8e63> 6825 +<8e64> 6822 +<8e69> 19858 +<8e6c> 15171 +<8e6d> 18739 +<8e6f> 18740 +<8e70> 15172 +<8e71> 19859 +<8e72> 6828 +<8e74> 2365 +<8e75> 19860 +<8e76> 6827 +<8e77> 19861 +<8e79> 22624 +<8e7a> 15173 +<8e7b> 17139 +endcidchar + +100 begincidchar +<8e7c> 6829 +<8e81> 6830 +<8e84> 6833 +<8e85> 6832 +<8e87> 6831 +<8e89> 19862 +<8e8a> 6835 +<8e8b> 6834 +<8e8d> 3842 +<8e90> 19863 +<8e91> 6837 +<8e92> 15174 +<8e93> 6836 +<8e94> 6838 +<8e95> 19864 +<8e98> 18741 +<8e99> 6839 +<8e9a> 19865 +<8e9b> 22627 +<8e9d> 22628 +<8e9e> 18742 +<8ea1> 6841 +<8ea2> 22629 +<8ea7> 19866 +<8ea9> 19867 +<8eaa> 6840 +<8eab> 2574 +<8eac> 6842 +<8ead> 19868 +<8eae> 15175 +<8eaf> 1765 +<8eb0> 6843 +<8eb1> 6845 +<8eb3> 15176 +<8eb5> 18743 +<8eb6> 14083 +<8eba> 22630 +<8ebb> 18744 +<8ebe> 6846 +<8ec0> 7663 +<8ec1> 22631 +<8ec5> 6847 +<8ec6> 6844 +<8ec7> 22634 +<8ec8> 6848 +<8eca> 2306 +<8ecb> 6849 +<8ecc> 1610 +<8ecd> 1801 +<8ecf> 8631 +<8ed1> 15177 +<8ed2> 1890 +<8ed4> 15178 +<8edb> 6850 +<8edc> 22635 +<8edf> 3272 +<8ee2> 3128 +<8ee3> 6851 +<8ee8> 19869 +<8eeb> 6854 +<8eed> 22639 +<8eee> 22636 +<8ef0> 19870 +<8ef1> 22637 +<8ef7> 22638 +<8ef8> 2272 +<8ef9> 15179 +<8efa> 17142 +<8efb> 6853 +<8efc> 6852 +<8efd> 1840 +<8efe> 6855 +<8f00> 18748 +<8f02> 22640 +<8f03> 1457 +<8f05> 6857 +<8f07> 19871 +<8f08> 18749 +<8f09> 2124 +<8f0a> 6856 +<8f0c> 6865 +<8f12> 6859 +<8f13> 6861 +<8f14> 3637 +<8f15> 6858 +<8f16> 22643 +<8f17> 15180 +<8f18> 19872 +<8f19> 6860 +<8f1b> 6864 +<8f1c> 6862 +<8f1d> 1611 +<8f1e> 17143 +<8f1f> 6863 +<8f23> 22646 +<8f25> 19873 +<8f26> 6866 +<8f27> 19874 +<8f28> 22647 +<8f29> 3344 +endcidchar + +100 begincidchar +<8f2a> 4000 +<8f2b> 18750 +<8f2c> 19875 +<8f2d> 17144 +<8f2e> 22648 +<8f2f> 2366 +<8f33> 6867 +<8f34> 22649 +<8f35> 19876 +<8f36> 15181 +<8f37> 22650 +<8f38> 3852 +<8f39> 6869 +<8f3a> 19877 +<8f3b> 6868 +<8f3e> 6872 +<8f3f> 3883 +<8f40> 18751 +<8f41> 22651 +<8f42> 6871 +<8f43> 19878 +<8f44> 1483 +<8f45> 6870 +<8f46> 6875 +<8f47> 19879 +<8f49> 6874 +<8f4a> 18752 +<8f4c> 6873 +<8f4d> 3116 +<8f4e> 6876 +<8f4f> 22652 +<8f51> 19880 +<8f54> 17145 +<8f55> 19881 +<8f57> 6877 +<8f58> 18753 +<8f5c> 6878 +<8f5f> 2046 +<8f61> 1787 +<8f65> 22657 +<8f9b> 2575 +<8f9c> 6882 +<8f9d> 22658 +<8f9e> 2265 +<8f9f> 6883 +<8fa3> 6884 +<8fa4> 18755 +<8fa5> 19885 +<8fa6> 15182 +<8fa7> 4278 +<8fa8> 4277 +<8fad> 6885 +<8fae> 6143 +<8faf> 6886 +<8fb0> 2914 +<8fb1> 2545 +<8fb2> 3318 +<8fb4> 18756 +<8fb7> 6887 +<8fb8> 22659 +<8fba> 3621 +<8fbb> 3056 +<8fbc> 2064 +<8fbe> 22660 +<8fbf> 2919 +<8fc0> 22661 +<8fc1> 18758 +<8fc2> 1228 +<8fc4> 3750 +<8fc5> 2589 +<8fc6> 18759 +<8fc8> 14233 +<8fca> 18761 +<8fcb> 22662 +<8fcd> 18762 +<8fce> 1844 +<8fd0> 22663 +<8fd1> 1753 +<8fd2> 22664 +<8fd3> 18763 +<8fd4> 3622 +<8fd5> 18764 +<8fda> 6888 +<8fe0> 15186 +<8fe2> 6890 +<8fe3> 22665 +<8fe4> 15187 +<8fe5> 6889 +<8fe6> 1376 +<8fe8> 17147 +<8fe9> 3278 +<8fea> 6891 +<8feb> 3373 +<8fed> 3117 +<8fee> 17148 +<8fef> 6892 +<8ff0> 2396 +<8ff1> 18765 +<8ff4> 6894 +<8ff5> 18766 +endcidchar + +100 begincidchar +<8ff6> 15188 +<8ff7> 3790 +<8ff8> 6909 +<8ffb> 18767 +<8ffd> 3045 +<8ffe> 22666 +<9000> 2880 +<9001> 2809 +<9002> 15189 +<9003> 3200 +<9004> 19886 +<9005> 6895 +<9006> 1647 +<9008> 17149 +<900b> 6904 +<900c> 18768 +<900d> 6901 +<900e> 6914 +<900f> 3201 +<9010> 2974 +<9011> 6898 +<9013> 3098 +<9014> 3149 +<9015> 6899 +<9016> 6903 +<9017> 2598 +<9018> 22667 +<9019> 3357 +<901a> 3048 +<901b> 19887 +<901d> 2662 +<901e> 6902 +<901f> 2830 +<9020> 2820 +<9021> 6900 +<9022> 1133 +<9023> 4040 +<9027> 6905 +<902c> 15190 +<902d> 17150 +<902e> 2881 +<902f> 19888 +<9031> 2367 +<9032> 2576 +<9035> 6907 +<9036> 6906 +<9037> 18769 +<9038> 1203 +<9039> 6908 +<903c> 3489 +<903e> 6916 +<903f> 22673 +<9041> 3251 +<9042> 2609 +<9043> 18771 +<9044> 15191 +<9045> 2967 +<9047> 1776 +<9049> 6915 +<904a> 3873 +<904b> 1249 +<904c> 19889 +<904d> 3623 +<904e> 1377 +<9053> 3219 +<9054> 2913 +<9055> 1191 +<9056> 6917 +<9058> 6918 +<9059> 7476 +<905b> 19890 +<905c> 2845 +<905d> 18772 +<905e> 6919 +<9060> 1301 +<9061> 2766 +<9062> 22674 +<9063> 1891 +<9065> 3908 +<9066> 22675 +<9067> 8634 +<9068> 6920 +<9069> 3110 +<906c> 22676 +<906d> 2810 +<906e> 2307 +<906f> 6921 +<9070> 19891 +<9072> 6924 +<9074> 19892 +<9075> 2415 +<9076> 6922 +<9077> 2733 +<9078> 2732 +<9079> 19893 +<907a> 1192 +<907c> 3987 +<907d> 6926 +<907f> 3462 +<9080> 6928 +endcidchar + +100 begincidchar +<9081> 6927 +<9082> 6925 +<9083> 5943 +<9084> 1552 +<9085> 18775 +<9087> 6893 +<9088> 15192 +<9089> 6930 +<908a> 6929 +<908b> 19894 +<908c> 18776 +<908e> 22677 +<908f> 6931 +<9090> 18777 +<9091> 3874 +<9095> 15193 +<9097> 17151 +<9098> 19895 +<9099> 15194 +<909b> 15195 +<90a0> 19896 +<90a1> 18778 +<90a2> 15196 +<90a3> 3257 +<90a5> 22678 +<90a6> 3676 +<90a8> 6932 +<90aa> 2309 +<90af> 6933 +<90b0> 18780 +<90b1> 6934 +<90b2> 19897 +<90b3> 17152 +<90b4> 15197 +<90b5> 6935 +<90b6> 18781 +<90b8> 3099 +<90bd> 19898 +<90be> 17153 +<90c1> 1198 +<90c3> 18782 +<90c7> 17156 +<90c8> 18783 +<90c9> 19899 +<90ca> 2027 +<90cc> 22679 +<90ce> 4064 +<90d2> 22684 +<90d5> 22680 +<90d7> 15198 +<90db> 6939 +<90dc> 18785 +<90dd> 15199 +<90de> 8635 +<90df> 18786 +<90e1> 1802 +<90e2> 6936 +<90e4> 6937 +<90e5> 22683 +<90e8> 3558 +<90eb> 18791 +<90ed> 1458 +<90ef> 17157 +<90f0> 19900 +<90f2> 18789 +<90f4> 15200 +<90f5> 3875 +<90f6> 18788 +<90f7> 1719 +<90fd> 3150 +<9100> 18790 +<9102> 6940 +<9104> 18794 +<9105> 19901 +<9106> 18795 +<9108> 22685 +<910d> 22686 +<9110> 22687 +<9112> 6941 +<9114> 17158 +<9115> 8637 +<9116> 17159 +<9117> 15201 +<9118> 18796 +<9119> 6942 +<911a> 22688 +<911c> 15202 +<911e> 18797 +<9120> 22689 +<9125> 19902 +<9127> 8638 +<9129> 22690 +<912d> 3100 +<912e> 22691 +<912f> 17162 +<9130> 6944 +<9131> 15203 +<9132> 6943 +<9134> 17163 +<9136> 22692 +endcidchar + +100 begincidchar +<9137> 18798 +<9139> 18799 +<913a> 15204 +<913c> 22693 +<913d> 15205 +<9143> 22694 +<9148> 15206 +<9149> 3243 +<914a> 6945 +<914b> 2368 +<914c> 2316 +<914d> 3345 +<914e> 2991 +<914f> 22695 +<9152> 2334 +<9153> 22696 +<9154> 2610 +<9156> 6946 +<9157> 18802 +<9158> 6947 +<9159> 18803 +<915a> 19903 +<915b> 15207 +<9161> 15208 +<9162> 2595 +<9163> 6948 +<9164> 15209 +<9165> 6949 +<9167> 19904 +<9169> 6950 +<916a> 3929 +<916c> 2369 +<916d> 22697 +<9172> 6952 +<9173> 6951 +<9174> 18804 +<9175> 2028 +<9177> 2053 +<9178> 2190 +<9179> 18805 +<917a> 19905 +<917b> 22698 +<9181> 22699 +<9182> 6955 +<9183> 17164 +<9185> 18806 +<9186> 22700 +<9187> 2416 +<9189> 6954 +<918a> 19906 +<918b> 6953 +<918d> 2889 +<918e> 15210 +<9190> 1955 +<9191> 19907 +<9192> 2663 +<9195> 19908 +<9197> 3396 +<9198> 22703 +<919c> 2371 +<919e> 15211 +<91a1> 22704 +<91a2> 6956 +<91a4> 2503 +<91a6> 22705 +<91a8> 15212 +<91aa> 6959 +<91ab> 6957 +<91ac> 7707 +<91af> 6958 +<91b0> 19909 +<91b1> 7777 +<91b2> 15215 +<91b3> 18807 +<91b4> 6961 +<91b5> 6960 +<91b6> 18808 +<91b8> 2530 +<91ba> 6962 +<91bb> 19910 +<91bc> 15216 +<91bd> 19911 +<91bf> 22706 +<91c2> 19912 +<91c5> 19913 +<91c6> 3428 +<91c7> 2115 +<91c8> 2317 +<91c9> 6965 +<91cb> 6966 +<91cc> 3948 +<91cd> 2383 +<91ce> 3834 +<91cf> 3988 +<91d0> 6967 +<91d1> 1754 +<91d6> 6968 +<91d7> 8640 +<91d8> 3101 +<91d9> 22709 +endcidchar + +100 begincidchar +<91da> 8639 +<91db> 6971 +<91dc> 1494 +<91dd> 2577 +<91de> 8641 +<91df> 6969 +<91e1> 6970 +<91e3> 3068 +<91e6> 3715 +<91e7> 1780 +<91ec> 18813 +<91ef> 22712 +<91f0> 15217 +<91f1> 17165 +<91f7> 15218 +<91f9> 22713 +<91fb> 15219 +<91fc> 6972 +<91fd> 22714 +<91ff> 6976 +<9200> 19914 +<9201> 18814 +<9206> 8646 +<9207> 15220 +<9209> 19915 +<920a> 8648 +<920c> 22717 +<920d> 3255 +<920e> 1441 +<9210> 8647 +<9211> 6980 +<9214> 6977 +<9215> 6979 +<9218> 22720 +<921e> 6975 +<9223> 19916 +<9228> 15221 +<9229> 7050 +<922c> 6978 +<9233> 15222 +<9234> 4019 +<9237> 1934 +<9238> 15223 +<9239> 8655 +<923a> 8649 +<923c> 8651 +<923e> 22731 +<923f> 6988 +<9240> 8650 +<9242> 18818 +<9243> 15224 +<9244> 3118 +<9245> 6983 +<9246> 22732 +<9247> 15225 +<9248> 6986 +<9249> 6984 +<924a> 18819 +<924b> 6989 +<924d> 22733 +<924e> 8652 +<924f> 15226 +<9250> 6990 +<9251> 8654 +<9256> 18820 +<9257> 6982 +<9258> 22734 +<9259> 8653 +<925a> 6995 +<925b> 1302 +<925e> 6981 +<9260> 15227 +<9261> 18821 +<9262> 3393 +<9264> 6985 +<9265> 18822 +<9266> 2504 +<9267> 8656 +<9268> 18823 +<9269> 22737 +<9271> 2029 +<9275> 22741 +<9276> 19917 +<9279> 22742 +<927b> 22743 +<927e> 3702 +<927f> 18827 +<9280> 1756 +<9283> 2384 +<9285> 3220 +<9288> 8362 +<9289> 18828 +<928a> 22744 +<928d> 18829 +<928e> 19918 +<9291> 2735 +<9292> 22745 +<9293> 6993 +<9295> 6987 +<9296> 6992 +endcidchar + +100 begincidchar +<9297> 18830 +<9298> 3791 +<9299> 18831 +<929a> 3028 +<929b> 6994 +<929c> 6991 +<929f> 18832 +<92a0> 22746 +<92a7> 8657 +<92a8> 22749 +<92ab> 18833 +<92ad> 2734 +<92af> 19919 +<92b2> 18836 +<92b3> 13652 +<92b6> 22750 +<92b7> 6998 +<92b8> 22751 +<92b9> 6997 +<92ba> 22752 +<92bd> 22753 +<92c1> 19922 +<92c2> 15228 +<92c3> 19923 +<92c5> 19924 +<92c6> 18839 +<92c7> 22754 +<92c8> 19925 +<92cd> 22755 +<92ce> 18840 +<92cf> 6996 +<92d0> 8663 +<92d2> 3677 +<92d3> 8667 +<92d5> 8665 +<92d7> 8661 +<92d8> 22756 +<92d9> 8662 +<92df> 15231 +<92e0> 8666 +<92e1> 22759 +<92e3> 22760 +<92e4> 2437 +<92e5> 18841 +<92e7> 8660 +<92e8> 22761 +<92e9> 6999 +<92ea> 3631 +<92ec> 22762 +<92ed> 1270 +<92ee> 22763 +<92f0> 22764 +<92f2> 3512 +<92f3> 2992 +<92f7> 18845 +<92f8> 1682 +<92f9> 8368 +<92fa> 7001 +<92fb> 8670 +<92fc> 2031 +<92ff> 8673 +<9300> 22765 +<9302> 8675 +<9304> 13402 +<9306> 2170 +<9308> 22766 +<930d> 15232 +<930f> 7000 +<9310> 2611 +<9311> 18842 +<9314> 19926 +<9315> 15233 +<9318> 2612 +<9319> 7004 +<931a> 7006 +<931c> 22767 +<931d> 8674 +<931e> 8672 +<931f> 15234 +<9320> 2531 +<9321> 8669 +<9322> 7005 +<9323> 7007 +<9324> 22768 +<9325> 8668 +<9326> 1739 +<9327> 15235 +<9328> 3511 +<9329> 18846 +<932a> 22769 +<932b> 2318 +<932c> 4041 +<932e> 7003 +<932f> 2152 +<9332> 4069 +<9333> 19927 +<9334> 22770 +<9335> 7009 +<9336> 19928 +<9337> 22771 +endcidchar + +100 begincidchar +<933a> 7008 +<933b> 7010 +<9344> 7002 +<9347> 15236 +<9348> 8361 +<9349> 17166 +<934a> 13400 +<934b> 3265 +<934d> 3151 +<9350> 22772 +<9351> 18849 +<9352> 15237 +<9354> 3059 +<9355> 22773 +<9356> 7015 +<9357> 8677 +<9358> 19929 +<935a> 18850 +<935b> 2945 +<935c> 7011 +<935e> 22774 +<9360> 7012 +<9367> 22775 +<9369> 22776 +<936a> 15239 +<936b> 18851 +<936c> 1795 +<936d> 15240 +<936e> 7014 +<936f> 22777 +<9370> 8676 +<9371> 18852 +<9373> 18853 +<9374> 22778 +<9375> 1892 +<9376> 22779 +<937a> 22780 +<937c> 7013 +<937d> 22781 +<937e> 2505 +<937f> 19930 +<9382> 19931 +<9388> 18857 +<938a> 19932 +<938b> 18858 +<938c> 1495 +<938d> 22784 +<938f> 18859 +<9392> 22785 +<9394> 7019 +<9395> 22786 +<9396> 2095 +<9397> 2811 +<9398> 22787 +<939a> 3046 +<939b> 15241 +<939e> 18860 +<93a1> 18854 +<93a3> 17169 +<93a4> 8678 +<93a6> 22789 +<93a7> 1433 +<93a8> 22790 +<93a9> 15243 +<93ab> 22791 +<93ae> 3039 +<93b0> 7016 +<93b9> 7020 +<93ba> 15242 +<93bb> 19933 +<93c1> 15244 +<93c3> 7026 +<93c6> 8679 +<93c7> 18865 +<93c8> 7029 +<93c9> 22797 +<93ca> 15245 +<93cb> 22798 +<93cc> 19934 +<93cd> 22799 +<93d0> 7028 +<93d1> 3111 +<93d3> 22800 +<93d8> 7025 +<93d9> 22801 +<93dc> 18866 +<93dd> 7027 +<93de> 8680 +<93df> 17170 +<93e1> 1720 +<93e2> 15246 +<93e4> 7030 +<93e5> 7024 +<93e6> 19935 +<93e7> 18867 +<93e8> 7023 +<93f1> 18864 +<93f5> 18861 +<93f7> 22802 +<93f8> 8681 +endcidchar + +100 begincidchar +<93f9> 19936 +<93fa> 15247 +<93fb> 18871 +<93fd> 15248 +<9401> 22803 +<9402> 19937 +<9403> 7034 +<9404> 17171 +<9407> 7035 +<9408> 22804 +<9409> 18868 +<940f> 15249 +<9410> 7036 +<9413> 7033 +<9414> 7032 +<9415> 22805 +<9418> 2506 +<9419> 3202 +<941a> 7031 +<941f> 22806 +<9421> 7040 +<942b> 7038 +<942e> 19940 +<942f> 22807 +<9431> 8682 +<9432> 18872 +<9433> 17172 +<9434> 15250 +<9435> 7039 +<9436> 7037 +<9438> 2904 +<943a> 7041 +<943b> 18873 +<943d> 22808 +<943f> 15251 +<9441> 7042 +<9443> 22809 +<9444> 7044 +<9445> 8683 +<9448> 8684 +<944a> 17173 +<944c> 19941 +<9451> 1553 +<9452> 7043 +<9453> 3846 +<9455> 15252 +<9459> 22810 +<945a> 7055 +<945b> 7045 +<945c> 22811 +<945e> 7048 +<945f> 22812 +<9460> 7046 +<9461> 22813 +<9462> 7047 +<9463> 17174 +<9468> 22814 +<946a> 7049 +<946b> 15253 +<946d> 18876 +<946e> 22815 +<946f> 18877 +<9470> 7051 +<9471> 17175 +<9472> 15254 +<9475> 7052 +<9477> 7053 +<947c> 7056 +<947d> 7054 +<947e> 7057 +<947f> 7059 +<9481> 7058 +<9483> 22817 +<9484> 22816 +<9577> 3029 +<9578> 15255 +<9579> 18878 +<957e> 22818 +<9580> 3827 +<9582> 7060 +<9583> 2736 +<9584> 22819 +<9586> 18879 +<9587> 7061 +<9588> 19942 +<9589> 3604 +<958a> 7062 +<958b> 1417 +<958e> 17176 +<958f> 1246 +<9591> 1555 +<9592> 8685 +<9593> 1554 +<9594> 7063 +<9596> 7064 +<959f> 17177 +<95a0> 7067 +<95a1> 19943 +<95a2> 1556 +<95a3> 1459 +endcidchar + +100 begincidchar +<95a4> 2032 +<95a5> 3402 +<95a6> 15256 +<95a7> 7069 +<95a8> 7068 +<95a9> 15257 +<95ab> 20313 +<95ac> 17178 +<95ad> 7070 +<95b1> 13653 +<95b2> 1278 +<95b4> 15259 +<95b6> 17179 +<95b9> 7073 +<95ba> 22822 +<95bb> 7072 +<95bc> 7071 +<95bd> 15260 +<95be> 7074 +<95bf> 19944 +<95c3> 7077 +<95c6> 19945 +<95c7> 1163 +<95c8> 18884 +<95c9> 19946 +<95ca> 7075 +<95cb> 17180 +<95cc> 7079 +<95cd> 7078 +<95d0> 17181 +<95d3> 17182 +<95d4> 7081 +<95d5> 7080 +<95d6> 7082 +<95d8> 3206 +<95d9> 22823 +<95da> 15261 +<95dc> 7083 +<95dd> 22824 +<95de> 17184 +<95df> 22825 +<95e0> 19949 +<95e1> 7084 +<95e2> 7086 +<95e4> 19950 +<95e5> 7085 +<95e6> 19951 +<95e8> 14061 +<961c> 3550 +<961d> 15262 +<961e> 22826 +<9621> 7087 +<9622> 22827 +<9624> 19952 +<9628> 7088 +<962a> 2133 +<962c> 18887 +<9631> 19953 +<9632> 3703 +<9637> 22830 +<9638> 19954 +<963b> 2765 +<963c> 18891 +<963d> 19955 +<963f> 1128 +<9640> 2859 +<9641> 15263 +<9642> 7091 +<9644> 3551 +<964b> 7094 +<964c> 7092 +<964d> 2033 +<964f> 7093 +<9650> 1910 +<9652> 22833 +<9654> 19956 +<9658> 15264 +<965b> 3605 +<965c> 7096 +<965d> 7098 +<965e> 7097 +<965f> 7099 +<9661> 18892 +<9662> 1219 +<9663> 2590 +<9664> 2438 +<9665> 1557 +<9666> 7100 +<966a> 3356 +<966c> 7102 +<966e> 22836 +<9670> 1220 +<9672> 7101 +<9673> 3040 +<9674> 19957 +<9675> 3989 +<9676> 3203 +<9677> 7095 +<9678> 3950 +<967a> 1893 +endcidchar + +100 begincidchar +<967b> 19958 +<967c> 22837 +<967d> 3909 +<967e> 22838 +<967f> 19959 +<9681> 19960 +<9682> 18894 +<9683> 19961 +<9684> 15265 +<9685> 1777 +<9686> 3964 +<9688> 1790 +<9689> 19962 +<968a> 2882 +<968b> 6252 +<968d> 7103 +<968e> 1418 +<968f> 2613 +<9691> 22839 +<9694> 1460 +<9695> 7105 +<9696> 19963 +<9697> 7106 +<9698> 7104 +<9699> 1850 +<969a> 18896 +<969b> 2125 +<969c> 2507 +<969d> 8688 +<969f> 22840 +<96a0> 1221 +<96a3> 4001 +<96a4> 15266 +<96a5> 17185 +<96a6> 22841 +<96a7> 7108 +<96a8> 6923 +<96a9> 15267 +<96aa> 7107 +<96ae> 19964 +<96af> 8689 +<96b0> 7111 +<96b3> 18899 +<96b4> 7112 +<96b6> 7113 +<96b7> 4020 +<96ba> 18900 +<96bb> 2669 +<96bc> 3407 +<96bd> 18901 +<96c0> 2627 +<96c1> 1571 +<96c4> 3876 +<96c5> 1389 +<96c6> 2370 +<96c7> 1935 +<96c9> 7118 +<96ca> 22842 +<96cb> 7117 +<96cc> 2241 +<96cd> 7119 +<96ce> 7116 +<96d1> 2166 +<96d2> 15268 +<96d5> 7123 +<96d6> 6546 +<96d8> 18904 +<96d9> 4331 +<96da> 18905 +<96db> 2621 +<96dc> 7121 +<96dd> 18906 +<96de> 15270 +<96df> 22844 +<96e2> 3949 +<96e3> 3273 +<96e8> 1229 +<96e9> 15271 +<96ea> 2695 +<96eb> 2274 +<96ef> 17186 +<96f0> 3591 +<96f1> 15272 +<96f2> 1250 +<96f6> 4021 +<96f7> 3925 +<96f9> 7124 +<96fa> 22845 +<96fb> 3135 +<9700> 2343 +<9702> 15273 +<9703> 19965 +<9704> 7125 +<9705> 22846 +<9706> 7126 +<9707> 2578 +<9708> 7127 +<9709> 15274 +<970a> 4022 +<970d> 7122 +endcidchar + +100 begincidchar +<970e> 7129 +<970f> 7131 +<9711> 7130 +<9713> 7128 +<9714> 18908 +<9716> 7132 +<9719> 7133 +<971a> 22847 +<971b> 19966 +<971c> 2812 +<971d> 22848 +<971e> 1378 +<9723> 18909 +<9724> 7134 +<9727> 3780 +<9728> 19969 +<972a> 7135 +<9730> 7136 +<9731> 19970 +<9732> 4048 +<9733> 8690 +<9736> 18911 +<9738> 5140 +<9739> 7137 +<973b> 8691 +<9741> 18912 +<9742> 7143 +<9743> 8692 +<9744> 7140 +<9746> 7141 +<9747> 18913 +<9748> 7142 +<9749> 7144 +<974a> 22850 +<974d> 8693 +<974e> 17187 +<974f> 8694 +<9751> 8695 +<9752> 2664 +<9755> 20314 +<9756> 3843 +<9757> 18914 +<9758> 22851 +<9759> 2665 +<975a> 15275 +<975b> 18915 +<975c> 7145 +<975e> 3463 +<9760> 7146 +<9761> 7430 +<9762> 3800 +<9763> 15276 +<9764> 7147 +<9766> 7148 +<9767> 19971 +<9768> 7149 +<9769> 1461 +<976a> 18916 +<976b> 7151 +<976d> 2591 +<976e> 15277 +<9771> 7152 +<9773> 15278 +<9774> 1786 +<9776> 19972 +<9779> 7153 +<977a> 7157 +<977b> 22854 +<977c> 7155 +<977d> 19973 +<977f> 19974 +<9780> 22855 +<9781> 7156 +<9784> 1489 +<9785> 7154 +<9786> 7158 +<9789> 22856 +<978b> 7159 +<978d> 1164 +<9795> 17188 +<9796> 18919 +<9797> 22857 +<9798> 2508 +<9799> 19975 +<979a> 15279 +<979c> 7162 +<979e> 18920 +<979f> 19976 +<97a0> 1633 +<97a2> 15280 +<97a3> 7165 +<97a6> 7164 +<97a8> 7163 +<97ab> 6708 +<97ac> 19977 +<97ad> 3628 +<97ae> 17189 +<97b8> 22858 +<97b9> 19978 +<97ba> 17190 +endcidchar + +100 begincidchar +<97bc> 22859 +<97be> 18923 +<97bf> 22860 +<97c1> 17191 +<97c3> 7168 +<97c6> 7169 +<97c7> 22863 +<97c8> 7170 +<97c9> 17192 +<97ca> 22864 +<97cb> 7171 +<97cc> 18924 +<97cd> 19979 +<97ce> 22865 +<97d0> 22866 +<97d1> 18925 +<97d3> 1558 +<97d4> 18926 +<97d7> 22867 +<97d8> 18927 +<97d9> 15283 +<97db> 17193 +<97dc> 7172 +<97dd> 22868 +<97de> 15284 +<97e0> 19980 +<97e1> 18928 +<97e4> 22869 +<97ed> 7173 +<97ee> 3289 +<97ef> 19981 +<97f1> 18929 +<97f2> 7175 +<97f3> 1339 +<97f4> 15285 +<97f5> 7178 +<97f6> 7177 +<97fa> 22872 +<97fb> 1222 +<97ff> 1721 +<9801> 3607 +<9802> 3030 +<9803> 2066 +<9804> 18930 +<9805> 2034 +<9806> 2417 +<9807> 19982 +<9808> 2594 +<980a> 15286 +<980c> 7180 +<980d> 18931 +<980e> 15287 +<980f> 7179 +<9810> 3884 +<9811> 1572 +<9812> 3430 +<9813> 3252 +<9814> 18932 +<9816> 18933 +<9817> 2626 +<9818> 3990 +<9819> 22873 +<981a> 1841 +<981c> 22874 +<981e> 15288 +<9820> 22875 +<9821> 7183 +<9823> 15289 +<9824> 7182 +<9825> 18938 +<9826> 19983 +<982b> 15290 +<982c> 3705 +<982d> 3204 +<982e> 19984 +<982f> 22876 +<9830> 7795 +<9834> 1266 +<9835> 22877 +<9837> 7184 +<9838> 7181 +<9839> 14259 +<983b> 3523 +<983c> 3924 +<983d> 7185 +<983e> 15291 +<9844> 22878 +<9846> 7186 +<9847> 18939 +<984a> 22879 +<984b> 7188 +<984c> 2890 +<984f> 7187 +<9851> 22880 +<9854> 1573 +<9855> 1894 +<9856> 17194 +<9857> 8697 +<9858> 1574 +<9859> 15294 +endcidchar + +100 begincidchar +<985a> 7752 +<985b> 3129 +<985e> 4008 +<9865> 8698 +<9866> 18940 +<9867> 1936 +<986a> 22881 +<986b> 7189 +<986c> 15295 +<9873> 7194 +<9874> 7193 +<98a8> 3561 +<98aa> 7195 +<98ab> 18941 +<98ad> 18942 +<98ae> 22882 +<98af> 7196 +<98b0> 18943 +<98b1> 7197 +<98b4> 19987 +<98b6> 7198 +<98b7> 18945 +<98b8> 15296 +<98ba> 15297 +<98bf> 15298 +<98c2> 18948 +<98c3> 7200 +<98c4> 7199 +<98c5> 19988 +<98c6> 7201 +<98c7> 18949 +<98c8> 15299 +<98cb> 18950 +<98cc> 22883 +<98db> 3464 +<98dc> 6201 +<98df> 2543 +<98e0> 13848 +<98e1> 18951 +<98e2> 1612 +<98e3> 18952 +<98e5> 15300 +<98e6> 22884 +<98e7> 17195 +<98e9> 7202 +<98ea> 18953 +<98eb> 7203 +<98ed> 4289 +<98ee> 5338 +<98ef> 3431 +<98f2> 1215 +<98f3> 18956 +<98f4> 1151 +<98f6> 22885 +<98fc> 2242 +<98fd> 3678 +<98fe> 2534 +<9902> 19989 +<9903> 7204 +<9905> 3819 +<9907> 22886 +<9908> 18957 +<9909> 7205 +<990a> 3910 +<990c> 1252 +<9910> 2191 +<9911> 19990 +<9912> 7206 +<9913> 1390 +<9914> 7207 +<9915> 19991 +<9918> 7208 +<991f> 22887 +<9920> 7213 +<9921> 7209 +<9922> 22888 +<9924> 7212 +<9926> 22889 +<9927> 8701 +<9928> 1559 +<992b> 22890 +<992c> 7214 +<992e> 7215 +<9931> 18967 +<9934> 22891 +<9935> 19992 +<9939> 22892 +<9940> 15303 +<9941> 18971 +<9942> 7218 +<9945> 7220 +<9946> 18972 +<9947> 22893 +<9948> 19993 +<9949> 7219 +<994b> 7222 +<994c> 7225 +<994d> 15304 +<994e> 18973 +<9950> 7221 +endcidchar + +100 begincidchar +<9954> 19994 +<9955> 7226 +<9957> 1722 +<9958> 17196 +<9959> 22894 +<995b> 22895 +<995c> 15305 +<995e> 19995 +<995f> 15306 +<9960> 18974 +<9996> 2335 +<9999> 2035 +<999b> 22896 +<999d> 22897 +<999e> 8703 +<999f> 22898 +<99a3> 18975 +<99a5> 7229 +<99a6> 18976 +<99a8> 1436 +<99ac> 3333 +<99b0> 22899 +<99b1> 15307 +<99b2> 22900 +<99b3> 2968 +<99b4> 3267 +<99b5> 22901 +<99bc> 7232 +<99bd> 18977 +<99bf> 18978 +<99c1> 3379 +<99c3> 18979 +<99c4> 2860 +<99c5> 1274 +<99c6> 1766 +<99c8> 1767 +<99c9> 15310 +<99d0> 2993 +<99d1> 7237 +<99d2> 1768 +<99d3> 22902 +<99d4> 18980 +<99d5> 1391 +<99d8> 7236 +<99d9> 18981 +<99da> 22903 +<99db> 7234 +<99dc> 22904 +<99dd> 7235 +<99de> 18982 +<99df> 7233 +<99e1> 19996 +<99e2> 7247 +<99e7> 22905 +<99f0> 18984 +<99f8> 7243 +<99f9> 18985 +<99fb> 7242 +<99fc> 18986 +<99ff> 2403 +<9a01> 7244 +<9a02> 15311 +<9a03> 17197 +<9a04> 22913 +<9a05> 7246 +<9a08> 14266 +<9a0a> 18987 +<9a0b> 22914 +<9a0c> 19997 +<9a0e> 1613 +<9a0f> 7245 +<9a10> 19998 +<9a11> 18988 +<9a12> 2813 +<9a13> 1895 +<9a16> 15312 +<9a19> 7248 +<9a1a> 18989 +<9a1e> 22915 +<9a20> 18990 +<9a22> 22916 +<9a23> 19999 +<9a24> 15313 +<9a27> 15314 +<9a28> 2861 +<9a2b> 7249 +<9a30> 3205 +<9a31> 18991 +<9a33> 22917 +<9a35> 22918 +<9a36> 15317 +<9a37> 7250 +<9a38> 15318 +<9a3e> 7255 +<9a40> 7253 +<9a41> 20000 +<9a42> 7252 +<9a43> 7254 +<9a44> 18992 +<9a45> 7251 +endcidchar + +100 begincidchar +<9a47> 22919 +<9a4a> 15319 +<9a4b> 22921 +<9a4c> 18993 +<9a4d> 7257 +<9a4e> 8704 +<9a51> 20001 +<9a52> 7727 +<9a54> 22922 +<9a55> 7256 +<9a56> 15320 +<9a57> 7259 +<9a58> 18994 +<9a5a> 1723 +<9a5b> 7258 +<9a5d> 22923 +<9a5f> 7260 +<9a62> 7261 +<9a64> 7263 +<9a65> 7262 +<9a69> 7264 +<9a6a> 7266 +<9a6b> 7265 +<9aa8> 2062 +<9aaa> 22924 +<9aac> 22925 +<9aad> 7267 +<9aae> 22926 +<9aaf> 18996 +<9ab0> 7268 +<9ab2> 22927 +<9ab4> 22928 +<9ab7> 18998 +<9ab8> 1434 +<9ab9> 19000 +<9abb> 22929 +<9abc> 7269 +<9abf> 22930 +<9ac0> 7270 +<9ac1> 17198 +<9ac3> 17199 +<9ac4> 2615 +<9ac6> 19002 +<9ac8> 22931 +<9ace> 17200 +<9acf> 7271 +<9ad0> 19003 +<9ad1> 7272 +<9ad2> 19004 +<9ad5> 19005 +<9ad6> 17201 +<9ad7> 22932 +<9ad8> 2036 +<9ad9> 8705 +<9adb> 22933 +<9adc> 8706 +<9ae0> 19006 +<9ae4> 22934 +<9ae5> 19007 +<9ae6> 7279 +<9ae7> 22935 +<9ae9> 19008 +<9aea> 3397 +<9aeb> 7281 +<9aec> 22936 +<9aed> 3480 +<9aee> 7282 +<9aef> 7280 +<9af1> 7284 +<9af4> 7283 +<9af5> 22939 +<9af7> 7285 +<9af9> 15323 +<9afa> 22940 +<9afb> 7286 +<9afd> 22941 +<9aff> 22942 +<9b00> 22943 +<9b01> 20004 +<9b02> 17202 +<9b03> 15324 +<9b06> 7287 +<9b08> 17203 +<9b09> 20005 +<9b0b> 20006 +<9b0c> 19009 +<9b10> 19010 +<9b12> 19011 +<9b16> 19012 +<9b18> 7288 +<9b19> 20009 +<9b1a> 7289 +<9b1b> 22946 +<9b1c> 19013 +<9b1d> 20297 +<9b1f> 7290 +<9b20> 15325 +<9b25> 7293 +<9b26> 22947 +<9b2b> 19014 +endcidchar + +100 begincidchar +<9b2c> 20298 +<9b2d> 17205 +<9b31> 5332 +<9b32> 7300 +<9b35> 20010 +<9b37> 22949 +<9b3b> 6057 +<9b3c> 1614 +<9b3d> 19015 +<9b41> 1407 +<9b42> 2082 +<9b43> 7302 +<9b44> 7301 +<9b45> 3761 +<9b48> 20011 +<9b4b> 19017 +<9b4c> 22952 +<9b4f> 7303 +<9b51> 7306 +<9b54> 3728 +<9b55> 20012 +<9b58> 7307 +<9b5a> 1685 +<9b5b> 22955 +<9b5e> 17206 +<9b61> 22956 +<9b63> 19018 +<9b65> 19019 +<9b66> 17207 +<9b68> 20013 +<9b6a> 22957 +<9b6f> 4043 +<9b72> 8708 +<9b73> 15328 +<9b74> 7308 +<9b75> 8707 +<9b78> 22960 +<9b79> 15329 +<9b7f> 22961 +<9b80> 20014 +<9b83> 7310 +<9b84> 17208 +<9b85> 22962 +<9b86> 20015 +<9b87> 22963 +<9b89> 22964 +<9b8a> 17209 +<9b8b> 22965 +<9b8d> 22966 +<9b8e> 1154 +<9b8f> 8709 +<9b90> 20016 +<9b91> 7311 +<9b92> 3579 +<9b93> 7309 +<9b94> 22967 +<9b9a> 22968 +<9b9d> 20017 +<9b9e> 17210 +<9ba6> 19024 +<9ba7> 15330 +<9ba8> 7316 +<9ba9> 22969 +<9baa> 3740 +<9bab> 2171 +<9bac> 19025 +<9bad> 2154 +<9bae> 2737 +<9bb0> 20018 +<9bb1> 8710 +<9bb2> 19027 +<9bb4> 7317 +<9bb7> 22970 +<9bb8> 19028 +<9bb9> 7320 +<9bbb> 8711 +<9bbc> 22971 +<9bbe> 19029 +<9bbf> 20019 +<9bc0> 7318 +<9bc1> 15331 +<9bc6> 7321 +<9bc7> 15332 +<9bc8> 20020 +<9bc9> 1957 +<9bca> 7319 +<9bce> 17211 +<9bcf> 7322 +<9bd0> 22972 +<9bd4> 7328 +<9bd6> 2168 +<9bd7> 15333 +<9bd8> 19031 +<9bdb> 2884 +<9bdd> 19032 +<9bdf> 14271 +<9be1> 7329 +<9be2> 7326 +<9be3> 7325 +<9be4> 7327 +endcidchar + +100 begincidchar +<9be5> 17212 +<9be7> 15334 +<9be8> 1845 +<9bea> 19033 +<9beb> 15335 +<9bee> 19035 +<9bef> 19034 +<9bf0> 7333 +<9bf1> 7332 +<9bf2> 7331 +<9bf3> 19030 +<9bf5> 1143 +<9bf7> 15336 +<9bf8> 17213 +<9bf9> 22973 +<9bfa> 15337 +<9bfd> 15338 +<9bff> 20021 +<9c00> 8712 +<9c02> 20022 +<9c04> 7343 +<9c06> 7339 +<9c08> 7340 +<9c09> 7336 +<9c0a> 7342 +<9c0b> 15339 +<9c0c> 7338 +<9c0d> 1472 +<9c0f> 22974 +<9c10> 4082 +<9c11> 22975 +<9c12> 7341 +<9c13> 7337 +<9c14> 7335 +<9c15> 7334 +<9c16> 19039 +<9c1b> 7345 +<9c1c> 20023 +<9c1d> 19043 +<9c1e> 22976 +<9c21> 7348 +<9c22> 19044 +<9c23> 17214 +<9c24> 7347 +<9c25> 7346 +<9c26> 22977 +<9c27> 15340 +<9c28> 22978 +<9c29> 19045 +<9c2a> 15341 +<9c2d> 3515 +<9c2e> 7344 +<9c2f> 1207 +<9c30> 7349 +<9c31> 19047 +<9c32> 7351 +<9c35> 20024 +<9c36> 15342 +<9c37> 19048 +<9c39> 1485 +<9c3a> 7330 +<9c3b> 1241 +<9c3d> 22979 +<9c3e> 7353 +<9c41> 15343 +<9c43> 22980 +<9c44> 20025 +<9c45> 19049 +<9c46> 7352 +<9c47> 7350 +<9c48> 2923 +<9c4e> 22981 +<9c52> 3742 +<9c53> 15344 +<9c54> 19055 +<9c56> 20026 +<9c57> 4002 +<9c58> 19056 +<9c5a> 7354 +<9c5b> 19057 +<9c5c> 19050 +<9c5d> 19058 +<9c5e> 22982 +<9c5f> 19059 +<9c60> 7355 +<9c61> 20027 +<9c63> 15345 +<9c65> 17217 +<9c67> 7356 +<9c68> 20028 +<9c70> 15346 +<9c72> 19065 +<9c75> 19066 +<9c76> 7357 +<9c77> 15347 +<9c78> 7358 +<9c7a> 19067 +<9c7b> 22983 +<9ce5> 3031 +<9ce6> 19068 +endcidchar + +100 begincidchar +<9ce7> 7359 +<9ce9> 3403 +<9ceb> 7364 +<9cec> 7360 +<9cf0> 7361 +<9cf2> 19069 +<9cf3> 3679 +<9cf4> 3792 +<9cf6> 3240 +<9cf7> 22984 +<9cf9> 22985 +<9d02> 15348 +<9d03> 7365 +<9d06> 7366 +<9d07> 3222 +<9d08> 7363 +<9d09> 7362 +<9d0b> 19070 +<9d0e> 1322 +<9d11> 19072 +<9d12> 7374 +<9d15> 7373 +<9d1b> 1303 +<9d1c> 22986 +<9d1f> 7371 +<9d23> 7370 +<9d26> 7368 +<9d28> 1497 +<9d2a> 7367 +<9d2b> 2270 +<9d2c> 1321 +<9d2f> 22987 +<9d30> 20029 +<9d32> 19078 +<9d3a> 22990 +<9d3b> 2037 +<9d3c> 22991 +<9d3d> 20030 +<9d3e> 7377 +<9d3f> 7376 +<9d41> 7375 +<9d42> 15349 +<9d43> 17220 +<9d44> 7372 +<9d45> 22992 +<9d46> 7378 +<9d47> 15350 +<9d48> 7379 +<9d4a> 19080 +<9d50> 7384 +<9d51> 7383 +<9d52> 17221 +<9d59> 7385 +<9d5c> 1231 +<9d5f> 19081 +<9d60> 2054 +<9d61> 3781 +<9d62> 19082 +<9d63> 15351 +<9d64> 7382 +<9d65> 22995 +<9d69> 15352 +<9d6a> 20031 +<9d6b> 8714 +<9d6c> 3680 +<9d6f> 7390 +<9d70> 8713 +<9d72> 7386 +<9d73> 19085 +<9d7a> 7391 +<9d7b> 20032 +<9d7c> 15353 +<9d7e> 15354 +<9d83> 22996 +<9d84> 19088 +<9d86> 22997 +<9d87> 7388 +<9d89> 7387 +<9d8a> 17222 +<9d8d> 15355 +<9d8e> 22998 +<9d8f> 1842 +<9d95> 23001 +<9d96> 17223 +<9d99> 19089 +<9d9a> 7392 +<9da1> 19090 +<9da4> 7393 +<9da9> 7394 +<9daa> 23004 +<9dab> 7389 +<9dac> 17225 +<9dae> 23005 +<9daf> 7369 +<9db1> 15356 +<9db2> 7395 +<9db4> 3069 +<9db5> 19092 +<9db8> 7399 +<9db9> 19093 +endcidchar + +100 begincidchar +<9dba> 7400 +<9dbb> 7398 +<9dbc> 17226 +<9dbd> 19094 +<9dbf> 19091 +<9dc0> 17224 +<9dc1> 7397 +<9dc2> 7403 +<9dc3> 15357 +<9dc4> 7396 +<9dc6> 7401 +<9dc7> 15358 +<9dc9> 19095 +<9dca> 23007 +<9dcf> 7402 +<9dd3> 7405 +<9dd6> 15359 +<9dd7> 7646 +<9dd9> 7404 +<9dda> 19096 +<9dde> 23010 +<9ddf> 15360 +<9de0> 19097 +<9de3> 19098 +<9de5> 20033 +<9de6> 7407 +<9de7> 17228 +<9de9> 20034 +<9deb> 15361 +<9ded> 7408 +<9dee> 23011 +<9def> 7409 +<9df0> 23012 +<9df2> 4079 +<9df3> 20035 +<9df4> 15362 +<9df8> 7406 +<9df9> 2891 +<9dfa> 2141 +<9dfd> 7410 +<9dfe> 23013 +<9e02> 19101 +<9e07> 17229 +<9e0a> 19100 +<9e0d> 19102 +<9e0e> 23014 +<9e15> 15363 +<9e16> 23018 +<9e19> 8716 +<9e1c> 19103 +<9e1d> 15364 +<9e1e> 7413 +<9e75> 7414 +<9e78> 1896 +<9e79> 7415 +<9e7a> 20036 +<9e7b> 19104 +<9e7c> 7677 +<9e7d> 7416 +<9e7f> 2267 +<9e80> 19106 +<9e81> 7417 +<9e85> 19107 +<9e87> 23019 +<9e88> 7418 +<9e91> 7423 +<9e92> 7421 +<9e93> 4066 +<9e95> 7422 +<9e96> 23022 +<9e97> 4023 +<9e98> 23023 +<9e9b> 19108 +<9e9d> 7424 +<9e9e> 17230 +<9e9f> 4003 +<9ea4> 15365 +<9ea5> 7425 +<9ea6> 3380 +<9ea8> 15366 +<9ea9> 7426 +<9eaa> 7428 +<9eac> 15367 +<9ead> 7429 +<9eae> 23024 +<9eaf> 17231 +<9eb0> 20040 +<9eb3> 23025 +<9eb4> 7682 +<9eb5> 7797 +<9eb8> 7427 +<9eb9> 2047 +<9eba> 3801 +<9ebb> 3729 +<9ebc> 4740 +<9ebd> 19110 +<9ebe> 5375 +<9ebf> 3753 +<9ec3> 13323 +<9ec4> 1323 +endcidchar + +100 begincidchar +<9ec6> 23026 +<9ec8> 23027 +<9ecb> 23028 +<9ecc> 7431 +<9ecd> 1642 +<9ed1> 8717 +<9ed2> 2055 +<9ed4> 7435 +<9ed5> 23029 +<9ed8> 5645 +<9ed9> 3815 +<9edb> 2883 +<9edc> 7436 +<9edd> 7438 +<9ede> 7437 +<9edf> 19112 +<9ee0> 7439 +<9ee4> 20041 +<9ee5> 7440 +<9ee7> 15368 +<9ee8> 7441 +<9eee> 15369 +<9eef> 7442 +<9ef0> 20042 +<9ef1> 23032 +<9ef2> 20043 +<9ef4> 7443 +<9ef5> 23033 +<9ef8> 23034 +<9ef9> 7446 +<9eff> 19113 +<9f02> 19114 +<9f03> 19116 +<9f09> 20044 +<9f0e> 3102 +<9f0f> 20045 +<9f10> 15370 +<9f11> 23035 +<9f12> 15371 +<9f13> 1937 +<9f14> 20046 +<9f15> 7453 +<9f16> 23036 +<9f17> 15372 +<9f19> 15373 +<9f1a> 23037 +<9f1b> 20047 +<9f1f> 23038 +<9f20> 2767 +<9f21> 7454 +<9f22> 20048 +<9f26> 20049 +<9f2c> 7455 +<9f2f> 15374 +<9f34> 20052 +<9f37> 15375 +<9f39> 15376 +<9f3a> 19117 +<9f3b> 3475 +<9f3c> 23041 +<9f3d> 19118 +<9f3e> 7456 +<9f3f> 23042 +<9f41> 15377 +<9f45> 15378 +<9f46> 19119 +<9f47> 23045 +<9f4a> 7457 +<9f4b> 5898 +<9f4e> 6779 +<9f4f> 7174 +<9f52> 7458 +<9f53> 19120 +<9f54> 7459 +<9f55> 19121 +<9f56> 23046 +<9f57> 15379 +<9f58> 19122 +<9f5a> 20053 +<9f5d> 19124 +<9f5e> 23047 +<9f62> 4024 +<9f63> 7460 +<9f68> 15380 +<9f69> 19126 +<9f6a> 7467 +<9f6c> 7466 +<9f6d> 19127 +<9f6e> 23048 +<9f6f> 20054 +<9f70> 19128 +<9f71> 15381 +<9f72> 7469 +<9f73> 23049 +<9f75> 15382 +<9f76> 7470 +<9f77> 7468 +<9f7a> 23050 +<9f7d> 23051 +<9f8d> 3966 +endcidchar + +100 begincidchar +<9f8f> 23052 +<9f90> 15383 +<9f94> 15384 +<9f95> 7471 +<9f96> 23055 +<9f97> 17232 +<9f9c> 7472 +<9f9d> 5927 +<9f9e> 20055 +<9fa0> 7473 +<9fa1> 23056 +<9fa2> 15385 +<9fa3> 23057 +<9fa5> 20056 +<9fb4> 14048 +<9fbc> 15431 +<9fbd> 15429 +<9fbe> 15434 +<9fc4> 14089 +<9fc6> 14168 + 8061 + 10902 + 10914 + 10916 + 10919 + 10923 + 10638 + 10646 + 11722 + 11728 + 13839 + 17233 + 14108 + 17240 + 17243 + 14209 + 20057 + 20075 + 13857 + 17259 + 17282 + 17291 + 17289 + 17295 + 17297 + 17299 + 14188 + 20080 + 17308 + 14294 + 14105 + 20083 + 17312 + 20128 + 17319 + 17321 + 17327 + 13523 + 17331 + 14109 + 17332 + 13755 + 17337 + 17340 + 13803 + 13706 + 17359 + 20090 + 17373 + 17388 + 17380 + 17379 + 17391 + 17414 + 13953 + 17415 + 17421 + 17417 + 17429 + 17428 + 17435 + 16816 + 17437 + 17438 + 17449 + 17462 + 16821 + 17472 + 17480 + 16838 + 17492 + 17493 + 16833 + 17525 + 7825 + 17539 + 17544 + 17545 + 17547 + 17546 +endcidchar + +100 begincidchar + 17556 + 17552 + 17551 + 17559 + 17561 + 17562 + 16845 + 17575 + 17582 + 17585 + 17599 + 19105 + 17605 + 17608 + 15443 + 17632 + 17647 + 17653 + 17657 + 17667 + 17680 + 17683 + 17682 + 17686 + 17710 + 20124 + 20130 + 17744 + 17742 + 16888 + 17743 + 17761 + 14140 + 17768 + 17764 + 17763 + 17770 + 17772 + 17774 + 17769 + 15422 + 17782 + 17784 + 17783 + 17788 + 17814 + 17815 + 17827 + 16905 + 17843 + 17841 + 15393 + 17842 + 17863 + 17854 + 16914 + 16916 + 17867 + 17875 + 17874 + 17880 + 17885 + 17897 + 17910 + 14293 + 13904 + 17925 + 18394 + 17942 + 17945 + 17944 + 17943 + 17983 + 20168 + 17998 + 18003 + 18015 + 18018 + 14282 + 18039 + 7838 + 18049 + 18055 + 16970 + 18077 + 18104 + 18117 + 18119 + 18124 + 13995 + 20058 + 18158 + 18162 + 18167 + 18170 + 20059 + 18181 + 18183 + 18185 + 18190 +endcidchar + +100 begincidchar + 18193 + 18192 + 18195 + 18197 + 18209 + 17005 + 18217 + 17009 + 18229 + 14075 + 17018 + 18248 + 18249 + 7670 + 17024 + 20112 + 18268 + 13922 + 18277 + 18276 + 18278 + 18293 + 18302 + 18303 + 17033 + 18318 + 18319 + 18322 + 18320 + 18327 + 18325 + 18329 + 18330 + 18332 + 18339 + 18338 + 18345 + 18344 + 18352 + 18355 + 18365 + 13691 + 14189 + 18385 + 18386 + 20311 + 18398 + 18416 + 14100 + 18430 + 18444 + 18446 + 13646 + 18450 + 14134 + 18452 + 18455 + 18459 + 18463 + 18466 + 17063 + 17478 + 18506 + 20206 + 18515 + 17089 + 18528 + 18544 + 18553 + 17103 + 18571 + 18574 + 18611 + 18610 + 18617 + 18620 + 18624 + 18638 + 18637 + 18640 + 17117 + 18645 + 18650 + 18652 + 18656 + 18672 + 20133 + 18684 + 18699 + 18701 + 18702 + 20220 + 18708 + 20060 + 18716 + 18718 + 13898 + 18727 + 18733 + 17140 +endcidchar + +100 begincidchar + 18745 + 18747 + 17146 + 18754 + 18757 + 18770 + 18784 + 18787 + 18812 + 18811 + 18817 + 14253 + 18824 + 18843 + 18844 + 18848 + 18847 + 18855 + 18856 + 18863 + 18862 + 18874 + 18875 + 7641 + 18882 + 18883 + 18885 + 14256 + 18886 + 18890 + 18893 + 18895 + 7673 + 18897 + 18903 + 18917 + 18918 + 18935 + 18944 + 13849 + 18959 + 18962 + 18966 + 18983 + 19001 + 13717 + 19026 + 19036 + 20315 + 19038 + 19037 + 19046 + 19054 + 19051 + 19071 + 19071 + 19077 + 19075 + 19084 + 19083 + 17227 + 20072 + 19109 + 19111 + 19123 + 19125 + 20316 + 19129 + 14145 + 13780 + 13866 + 20088 + 20096 + 20097 + 20247 + 20114 + 13782 + 20125 + 20141 + 14064 + 20149 + 13724 + 20153 + 20176 + 20180 + 14174 + 20194 + 20201 + 20204 + 13651 + 20240 + 20256 + 20260 + 14278 + 15388 + 7814 + 20061 + 7817 + 13954 + 13684 +endcidchar + +100 begincidchar + 13807 + 14109 + 13719 + 13815 + 20062 + 13841 + 13998 + 14121 + 13832 + 7754 + 7734 + 20063 + 13928 + 20064 + 13750 + 13867 + 14129 + 7816 + 14140 + 7695 + 14291 + 20065 + 13679 + 7665 + 13656 + 13768 + 13801 + 13932 + 13916 + 7839 + 13809 + 13357 + 13854 + 14180 + 13670 + 14068 + 20066 + 14069 + 15269 + 15447 + 15448 + 13739 + 13392 + 14084 + 20303 + 20305 + 13394 + 13971 + 13344 + 14088 + 7811 + 14097 + 14095 + 7808 + 13396 + 13393 + 7750 + 13956 + 8410 + 8421 + 7746 + 14290 + 8481 + 8497 + 8499 + 20307 + 8548 + 8571 + 8583 + 8587 + 8590 + 8599 + 8610 + 8622 + 8630 + 18760 + 8633 + 8636 + 8664 + 8671 + 8687 + 8702 + 8715 + 13382 + 13360 + 13389 + 13385 + 13338 + 13378 + 7651 + 13366 + 13333 + 13384 + 13387 + 13361 + 16837 + 13326 + 13328 + 13363 + 13369 +endcidchar + +81 begincidchar + 13381 + 13334 + 13352 + 13375 + 13327 + 7700 + 13332 + 13347 + 15398 + 7732 + 13379 + 13348 + 13345 + 13335 + 13391 + 13359 + 13351 + 13325 + 13371 + 13343 + 13373 + 13358 + 13399 + 18366 + 13376 + 13353 + 14199 + 14198 + 13367 + 13331 + 13346 + 13321 + 13339 + 13380 + 13364 + 15403 + 13320 + 13374 + 13337 + 7788 + 13740 + 14281 + 13695 + 9358 + 8268 + 7897 + 7898 + 7890 + 642 + 8007 + 716 + 712 + 715 + 717 + 8006 + 718 + 692 + 636 + 693 + 637 + 663 + 699 + 697 + 700 + 641 + 719 + 678 + 664 + 679 + 648 + 650 + 646 + 680 + 667 + 681 + 665 + 751 + 649 + 8005 + 711 + 323 +endcidchar + +100 begincidrange +<0020> <005b> 1 +<005d> <007b> 62 +<00a1> <00a3> 101 +<00b2> <00b3> 157 +<00bc> <00be> 161 +<00c0> <00c5> 164 +<00c7> <00d6> 170 +<00d9> <00de> 187 +<00e0> <00e5> 193 +<00e7> <00f6> 199 +<00f9> <00ff> 216 +<01f8> <01f9> 15731 +<0262> <0263> 15883 +<02e0> <02e1> 15898 +<02e5> <02e9> 15851 +<0301> <0302> 127 +<0306> <0308> 130 +<0318> <0319> 15874 +<031d> <031e> 15872 +<031f> <0320> 15862 +<033a> <033b> 15877 +<0384> <0385> 20317 +<0388> <038a> 20428 +<0391> <03a1> 1011 +<03a3> <03a9> 1028 +<03ac> <03af> 20436 +<03b1> <03c1> 1035 +<03c3> <03c9> 1052 +<03cc> <03cd> 20442 +<0402> <040c> 20447 +<040e> <040f> 20458 +<0410> <0415> 1059 +<0416> <0435> 1066 +<0436> <044f> 1099 +<0452> <045c> 20460 +<045e> <045f> 20471 +<1e3e> <1e3f> 15729 +<2020> <2021> 776 +<2032> <2033> 708 +<2039> <203a> 110 +<2047> <2048> 16278 +<2074> <2079> 9378 +<2080> <2089> 9384 +<2153> <2154> 9375 +<2156> <215a> 9785 +<215b> <215e> 9371 +<2160> <2169> 7575 +<216a> <216b> 8225 +<2170> <2179> 8092 +<217a> <217b> 8298 +<2190> <2191> 737 +<2196> <2197> 12204 +<2198> <2199> 12202 +<21c4> <21c5> 8310 +<2225> <2226> 15489 +<2227> <2228> 749 +<222b> <222c> 769 +<2264> <2265> 20369 +<2266> <2267> 701 +<226a> <226b> 763 +<2272> <2273> 12121 +<2276> <2277> 15509 +<2282> <2283> 745 +<2284> <2285> 15472 +<2286> <2287> 743 +<228a> <228b> 15474 +<22da> <22db> 15725 +<2305> <2306> 15478 +<239d> <239e> 12144 +<23a3> <23a4> 12152 +<23a7> <23a9> 8178 +<23ab> <23ad> 8174 +<23b0> <23b1> 16312 +<23be> <23cc> 16253 +<2460> <2473> 7555 +<2474> <2487> 8071 +<2488> <2490> 8062 +<2491> <2492> 20587 +<249c> <24b5> 8112 +<24b6> <24cf> 10339 +<24d0> <24e9> 10313 +<24eb> <24f4> 10515 +<24f5> <24fe> 16223 +<2500> <254b> 7479 +<256d> <256e> 8247 +<2571> <2573> 8261 +<2581> <2588> 8230 +<2594> <2595> 8245 +<25d0> <25d3> 16274 +<25e2> <25e3> 8255 +<2600> <2603> 8215 +<2616> <2617> 16233 +<261c> <261d> 8220 +<2668> <2669> 12098 +<2672> <267d> 16314 +<2776> <277e> 8286 +<2934> <2935> 16201 +<29fa> <29fb> 16207 +<2b05> <2b07> 8207 +<2e8c> <2e8d> 13833 +endcidrange + +100 begincidrange +<2ea1> <2ea2> 14689 +<2ebe> <2ec0> 14197 +<2f14> <2f15> 4301 +<2f21> <2f22> 4538 +<2fbf> <2fc0> 7299 +<2fd1> <2fd2> 7457 +<2fd4> <2fd5> 7472 +<3000> <3002> 633 +<3005> <3007> 657 +<3008> <3011> 682 +<3014> <3015> 676 +<3016> <3017> 16197 +<3018> <3019> 12129 +<3033> <3035> 12108 +<3041> <3093> 842 +<3094> <3096> 7958 +<3099> <309a> 16326 +<309b> <309c> 643 +<309d> <309e> 653 +<30a1> <30f6> 925 +<30f7> <30fa> 8313 +<30fd> <30fe> 651 +<3190> <319f> 16283 +<31f0> <31f9> 16236 +<31fa> <31ff> 16247 +<3220> <3229> 10126 +<322a> <322f> 8198 +<3231> <3232> 7618 +<3252> <325b> 8102 +<325c> <325f> 10244 +<3280> <3289> 10461 +<328a> <328f> 10472 +<32a0> <32a1> 10486 +<32a4> <32a8> 7613 +<32b1> <32bf> 10248 +<32d0> <32fe> 10413 +<3301> <3302> 11874 +<330e> <3313> 11889 +<331a> <331d> 11900 +<331f> <3321> 11904 +<3328> <3329> 11912 +<332e> <3330> 11918 +<3334> <3335> 11924 +<333e> <3340> 11936 +<3343> <3346> 11939 +<334b> <334c> 11944 +<334f> <3350> 11946 +<3355> <3356> 11955 +<3385> <3387> 8031 +<3388> <3389> 8192 +<338e> <338f> 7604 +<339c> <339e> 7601 +<33a4> <33a5> 8022 +<33d7> <33d8> 11869 +<355d> <355e> 17341 +<3761> <3762> 17528 +<4e04> <4e05> 14296 +<4e23> <4e24> 19141 +<4e2f> <4e30> 14300 +<4e40> <4e41> 14302 +<4e74> <4e75> 21079 +<4e9e> <4ea0> 4108 +<4eab> <4eac> 1687 +<4f4b> <4f4c> 21096 +<4f77> <4f78> 17260 +<4f7d> <4f7e> 14321 +<4fbb> <4fbd> 21112 +<4fc0> <4fc1> 21115 +<4fe4> <4fe5> 4152 +<5000> <5001> 14327 +<5032> <5033> 21129 +<5051> <5052> 21134 +<5083> <5084> 21142 +<5092> <5093> 17278 +<509f> <50a1> 21148 +<50af> <50b0> 21151 +<50ba> <50bb> 17284 +<50c9> <50ca> 4184 +<50dc> <50dd> 21157 +<5101> <5102> 4197 +<510c> <510e> 19167 +<511c> <511d> 21166 +<5127> <5128> 21169 +<512c> <512d> 21171 +<513f> <5140> 4208 +<5169> <516a> 4215 +<5195> <5196> 4226 +<51a9> <51ab> 4231 +<51b1> <51b2> 4235 +<51d3> <51d4> 19179 +<5201> <5202> 14355 +<5231> <5232> 19187 +<524b> <524c> 4261 +<5278> <5279> 19194 +<5295> <5297> 21198 +<52ac> <52ad> 4279 +<52b6> <52b8> 21205 +<52ba> <52bb> 17323 +<52f8> <52f9> 4293 +<530a> <530b> 14364 +endcidrange + +100 begincidrange +<5327> <5329> 21226 +<532b> <532c> 21229 +<5387> <5388> 21237 +<53c4> <53c5> 19217 +<53d2> <53d3> 21245 +<542c> <542d> 4342 +<5434> <5435> 19223 +<546d> <546e> 21261 +<54e5> <54e6> 4378 +<5500> <5501> 17364 +<550c> <550d> 21273 +<5556> <5557> 4394 +<555a> <555b> 21281 +<55d7> <55d8> 21289 +<560e> <560f> 14397 +<5611> <5612> 19257 +<5643> <5644> 21299 +<5661> <5663> 21302 +<5671> <5672> 14407 +<56ac> <56ad> 14411 +<56e5> <56e7> 21314 +<56f6> <56f7> 17412 +<5701> <5702> 21317 +<571a> <571b> 19277 +<5724> <5725> 21322 +<5733> <5734> 14421 +<5737> <5738> 4475 +<573d> <573e> 19282 +<5745> <5746> 17418 +<5773> <5775> 17424 +<579d> <579e> 17431 +<57d2> <57d3> 4496 +<57f5> <57f6> 14430 +<5887> <5888> 21357 +<588a> <588b> 17453 +<588f> <5890> 17456 +<58a0> <58a2> 21361 +<58f3> <58f4> 17466 +<58fb> <58fd> 4535 +<5905> <5906> 17468 +<5912> <5913> 21372 +<592c> <592d> 4544 +<5935> <5936> 21379 +<5975> <5976> 17481 +<59d9> <59da> 4571 +<59e3> <59e4> 14452 +<5a35> <5a36> 4582 +<5a44> <5a45> 21410 +<5a9f> <5aa0> 17503 +<5afa> <5afb> 4597 +<5b5a> <5b5b> 4612 +<5b7e> <5b7f> 14473 +<5b90> <5b91> 21432 +<5ba8> <5ba9> 21435 +<5bb1> <5bb2> 21439 +<5bd9> <5bda> 21446 +<5c07> <5c08> 4641 +<5c38> <5c39> 4648 +<5c67> <5c68> 17541 +<5c74> <5c75> 21457 +<5cf1> <5cf2> 21468 +<5d5f> <5d60> 21476 +<5d79> <5d7a> 21480 +<5db8> <5db9> 8446 +<5e14> <5e15> 14499 +<5e36> <5e37> 4725 +<5e50> <5e51> 21496 +<5e6b> <5e6c> 14504 +<5e6d> <5e6e> 17597 +<5e75> <5e76> 4737 +<5ebe> <5ebf> 14508 +<5ec1> <5ec2> 4743 +<5ed4> <5ed5> 19352 +<5eda> <5edb> 4751 +<5ee8> <5ee9> 4755 +<5f1c> <5f1d> 14514 +<5f2b> <5f2c> 21513 +<5f56> <5f57> 4780 +<5f74> <5f75> 21522 +<5fb0> <5fb1> 21530 +<5fd0> <5fd1> 21533 +<5fd2> <5fd4> 17618 +<5fd8> <5fd9> 3688 +<5fee> <5fef> 17622 +<6056> <6057> 21547 +<6096> <6097> 4844 +<60c9> <60ca> 21563 +<60ce> <60cf> 21565 +<60f6> <60f7> 4862 +<610d> <610e> 4871 +<6112> <6114> 14547 +<6158> <615a> 4887 +<6180> <6181> 21583 +<6183> <6184> 21585 +<6192> <6193> 17648 +<61c0> <61c1> 21591 +<61ce> <61cf> 21593 +<61ec> <61ed> 21599 +<6208> <6209> 4930 +<6232> <6233> 4941 +endcidrange + +100 begincidrange +<628d> <628f> 21614 +<6292> <6293> 4954 +<62b6> <62b7> 21618 +<62be> <62bf> 21621 +<633b> <633c> 17675 +<6342> <6343> 14570 +<63ae> <63af> 19400 +<63d4> <63d5> 17689 +<63eb> <63ec> 17692 +<63f8> <63f9> 19403 +<6498> <6499> 19417 +<64be> <64bf> 14588 +<64cb> <64cc> 17706 +<64e0> <64e1> 5040 +<64e9> <64ea> 21668 +<6508> <650a> 21672 +<6534> <6535> 5058 +<653c> <653d> 21679 +<6582> <6583> 5073 +<65e0> <65e1> 5088 +<65f4> <65f5> 21695 +<65fe> <65ff> 21697 +<6611> <6612> 21700 +<6635> <6636> 5096 +<665b> <665c> 14605 +<6667> <6668> 5107 +<666c> <666d> 17746 +<6677> <6678> 16889 +<668b> <668c> 19437 +<669a> <669c> 21718 +<66c2> <66c3> 21723 +<6726> <6727> 5138 +<6763> <6764> 5151 +<67bc> <67bd> 21742 +<6830> <6831> 14627 +<686f> <6871> 21759 +<6898> <689a> 17805 +<68aa> <68ab> 17809 +<68dc> <68dd> 21770 +<68e4> <68e5> 17820 +<68f0> <68f1> 14640 +<6970> <6971> 21783 +<697f> <6980> 14650 +<69d6> <69d7> 14655 +<69ee> <69ef> 17845 +<6a32> <6a33> 17855 +<6a50> <6a51> 14664 +<6a86> <6a87> 21800 +<6a9d> <6a9f> 14671 +<6aa2> <6aa3> 5310 +<6ab0> <6ab1> 21803 +<6abe> <6abf> 21806 +<6ac8> <6ac9> 19471 +<6ad5> <6ad6> 21809 +<6af1> <6af3> 17876 +<6b06> <6b07> 21814 +<6b0f> <6b11> 17882 +<6b78> <6b79> 5348 +<6b7d> <6b7e> 19476 +<6b7f> <6b80> 5350 +<6b9f> <6ba0> 21828 +<6ba2> <6ba3> 21830 +<6baa> <6bab> 5359 +<6bb8> <6bb9> 21834 +<6bc3> <6bc4> 21836 +<6bc7> <6bc9> 17899 +<6be6> <6be7> 17903 +<6c13> <6c14> 5377 +<6c26> <6c28> 21842 +<6ceb> <6cec> 14701 +<6d26> <6d27> 17928 +<6d80> <6d81> 17936 +<6e48> <6e49> 17959 +<6e4b> <6e4c> 17961 +<6e53> <6e54> 17964 +<6ead> <6eae> 21887 +<6ed4> <6ed5> 5482 +<6eda> <6edb> 19502 +<6eed> <6eee> 21895 +<6fa7> <6fa8> 14736 +<6fc8> <6fc9> 17995 +<705d> <705e> 14746 +<70d3> <70d4> 14754 +<70d5> <70d6> 19516 +<7146> <7147> 8540 +<71ae> <71af> 18037 +<71bf> <71c0> 21939 +<7208> <7209> 21944 +<723b> <723c> 5604 +<723f> <7240> 5606 +<724f> <7250> 19524 +<7255> <7256> 14776 +<726e> <726f> 18050 +<727b> <727c> 21955 +<72d5> <72d6> 21960 +<72e0> <72e1> 5628 +<7304> <7305> 14784 +<7318> <7319> 18067 +<7336> <7337> 3867 +<733a> <733b> 19538 +endcidrange + +100 begincidrange +<734e> <734f> 5643 +<735d> <7360> 21970 +<736e> <736f> 18078 +<7385> <7386> 14792 +<739e> <73a0> 14795 +<741a> <741b> 14810 +<742f> <7431> 14815 +<7467> <7468> 21994 +<7485> <7487> 14829 +<74b1> <74b2> 22001 +<74f0> <74f1> 5694 +<753d> <753e> 18125 +<757b> <757c> 22023 +<757d> <757e> 18134 +<7586> <7587> 5724 +<7592> <7593> 14848 +<75bf> <75c0> 18142 +<75df> <75e0> 18148 +<75f2> <75f3> 5755 +<75fe> <75ff> 5749 +<7615> <7616> 14855 +<761b> <761c> 18160 +<7620> <7622> 5762 +<7639> <763a> 22032 +<7647> <7648> 5769 +<7661> <7662> 5774 +<7668> <766a> 5776 +<768c> <768d> 22038 +<7699> <769a> 5793 +<76a2> <76a3> 22041 +<76a4> <76a5> 14868 +<76a7> <76a8> 18178 +<76b8> <76ba> 5797 +<7714> <7715> 22050 +<7725> <7726> 5817 +<7737> <7738> 5820 +<774d> <774e> 16999 +<7756> <7757> 22057 +<775f> <7760> 14877 +<7773> <7774> 22060 +<778c> <778d> 19591 +<77bc> <77bd> 5840 +<77de> <77df> 18203 +<782d> <782e> 14888 +<7860> <7861> 22080 +<78e0> <78e1> 14898 +<78f9> <78fa> 18226 +<7927> <7928> 19613 +<795b> <795c> 14908 +<79b9> <79ba> 5902 +<79cc> <79cd> 18244 +<7a18> <7a19> 5912 +<7a34> <7a35> 22131 +<7a61> <7a62> 5924 +<7abb> <7abc> 14932 +<7ad9> <7ada> 5950 +<7ae1> <7ae2> 5953 +<7b18> <7b19> 5963 +<7b2e> <7b2f> 18281 +<7b3f> <7b40> 22151 +<7b70> <7b71> 5980 +<7bba> <7bbb> 22161 +<7bf4> <7bf5> 22167 +<7bf9> <7bfa> 22169 +<7c39> <7c3a> 22180 +<7c52> <7c53> 19648 +<7c5b> <7c5d> 19650 +<7cb6> <7cb7> 18323 +<7cc8> <7cc9> 14962 +<7d07> <7d09> 14968 +<7d3d> <7d3e> 18340 +<7d8b> <7d8c> 14980 +<7dc3> <7dc6> 22208 +<7dcd> <7dce> 22212 +<7df5> <7df6> 19672 +<7e59> <7e5a> 6133 +<7e86> <7e87> 18375 +<7e88> <7e89> 6145 +<7e93> <7e94> 6150 +<7e9b> <7e9c> 6154 +<7e9d> <7e9e> 22229 +<7f4c> <7f4e> 6159 +<7f50> <7f51> 6162 +<7f52> <7f53> 14999 +<7f5f> <7f60> 6167 +<7f63> <7f64> 18387 +<7f68> <7f69> 6169 +<7f7d> <7f7e> 18390 +<7f7f> <7f80> 19685 +<7fc5> <7fc6> 6191 +<7fee> <7fef> 15008 +<7ffd> <7fff> 19689 +<8018> <8019> 6206 +<801f> <8020> 22247 +<80d7> <80d8> 15024 +<8165> <8166> 6260 +<8167> <8168> 17054 +<81dd> <81de> 19717 +<81df> <81e0> 6290 +<81f0> <81f2> 22282 +endcidrange + +100 begincidrange +<81fa> <81fb> 6293 +<8201> <8202> 6296 +<8213> <8214> 19724 +<826a> <826b> 6317 +<8277> <8278> 6321 +<8280> <8281> 22297 +<829a> <829b> 22303 +<82a3> <82a4> 17065 +<82a7> <82a8> 18473 +<8307> <8308> 18482 +<830a> <830b> 22310 +<8317> <8318> 6357 +<831e> <831f> 22312 +<834d> <834e> 22321 +<8394> <8395> 18495 +<83bf> <83c0> 15057 +<8451> <8452> 18510 +<8459> <845a> 18512 +<84a9> <84aa> 22350 +<84c7> <84c8> 22352 +<84ce> <84cf> 18525 +<8502> <8503> 22357 +<8517> <8518> 6429 +<8524> <8525> 18535 +<855f> <8560> 22373 +<8561> <8562> 18542 +<85bd> <85bf> 22384 +<85d8> <85d9> 18559 +<8604> <8605> 17100 +<860d> <860e> 22393 +<8658> <8659> 22400 +<8660> <8661> 22403 +<868b> <868c> 6489 +<869c> <869d> 18581 +<86a7> <86a8> 15087 +<86a9> <86aa> 6487 +<86b4> <86b5> 22413 +<873c> <873d> 22430 +<8764> <8765> 18606 +<8783> <8786> 22436 +<8797> <8798> 19764 +<87ac> <87ad> 15100 +<87e5> <87e6> 18626 +<87f6> <87f7> 6559 +<8848> <8849> 22465 +<889a> <889c> 19782 +<88bd> <88be> 15117 +<88c3> <88c4> 6598 +<88cb> <88cc> 22478 +<88d8> <88d9> 6601 +<88f0> <88f1> 15122 +<890e> <890f> 19788 +<8915> <8916> 22484 +<8918> <891a> 15125 +<892a> <892b> 6617 +<899b> <899c> 22504 +<89bf> <89c0> 6649 +<89dc> <89dd> 6652 +<8a04> <8a05> 22513 +<8a2b> <8a2c> 22519 +<8a76> <8a77> 22529 +<8a7a> <8a7b> 22531 +<8aa5> <8aa6> 6680 +<8ad3> <8ad5> 22549 +<8b43> <8b44> 15145 +<8b92> <8b93> 6730 +<8b94> <8b95> 18696 +<8b99> <8b9a> 6733 +<8c63> <8c64> 22573 +<8c75> <8c76> 22576 +<8c86> <8c87> 22579 +<8c8d> <8c8e> 6751 +<8cb2> <8cb3> 6760 +<8cfa> <8cfb> 6770 +<8d04> <8d05> 6772 +<8dea> <8deb> 6799 +<8df1> <8df2> 19845 +<8e04> <8e05> 22614 +<8e08> <8e09> 6804 +<8e1d> <8e1e> 6807 +<8e21> <8e22> 18730 +<8e37> <8e38> 22618 +<8e40> <8e41> 19852 +<8e5d> <8e5e> 22622 +<8e82> <8e83> 22625 +<8ec3> <8ec4> 22632 +<8f0f> <8f10> 22641 +<8f20> <8f21> 22644 +<8f52> <8f53> 22653 +<8f5d> <8f5e> 22655 +<8f62> <8f64> 6879 +<8fa0> <8fa2> 19882 +<8fb5> <8fb6> 15183 +<8ff9> <8ffa> 6896 +<9028> <902a> 22668 +<9033> <9034> 22671 +<904f> <9052> 6910 +<90c4> <90c5> 17154 +<90d8> <90d9> 22681 +<90fe> <90ff> 18792 +endcidrange + +100 begincidrange +<9122> <9123> 17160 +<9146> <9147> 18800 +<9193> <9194> 22701 +<91ad> <91ae> 15213 +<91c0> <91c1> 6963 +<91c3> <91c4> 18809 +<91d3> <91d4> 22707 +<91e4> <91e5> 8644 +<91e9> <91ea> 22710 +<91ed> <91ee> 8642 +<91f5> <91f6> 6973 +<9204> <9205> 22715 +<9212> <9213> 22718 +<9216> <9217> 18815 +<921c> <921d> 22721 +<9224> <9226> 22723 +<922e> <9230> 22726 +<9235> <9236> 22729 +<925c> <925d> 22735 +<926e> <9270> 22738 +<9277> <9278> 8658 +<927c> <927d> 18825 +<92a4> <92a5> 22747 +<92bb> <92bc> 19920 +<92bf> <92c0> 18837 +<92cb> <92cc> 15229 +<92dc> <92dd> 22757 +<9364> <9365> 17167 +<9380> <9381> 22782 +<93ac> <93ad> 7017 +<93b4> <93b6> 22792 +<93c4> <93c5> 22795 +<93d6> <93d7> 7021 +<940d> <940e> 19938 +<9416> <9417> 18869 +<958c> <958d> 18880 +<9598> <9599> 7065 +<959d> <959e> 22820 +<95d1> <95d2> 19947 +<9625> <9626> 22828 +<962e> <962f> 7089 +<9633> <9634> 18888 +<9639> <963a> 22831 +<9656> <9657> 22834 +<96b1> <96b2> 7109 +<96b8> <96b9> 7114 +<9721> <9722> 19967 +<973d> <973e> 7138 +<9777> <9778> 22852 +<978f> <9790> 7160 +<97b1> <97b2> 18921 +<97b3> <97b4> 7166 +<97b5> <97b6> 15281 +<97c4> <97c5> 22861 +<97f7> <97f8> 22870 +<9832> <9833> 18936 +<984d> <984e> 1465 +<9852> <9853> 15292 +<9862> <9863> 19985 +<986f> <9871> 7190 +<98bb> <98bc> 18946 +<98f0> <98f1> 18954 +<9916> <9917> 18960 +<991a> <991c> 18963 +<991d> <991e> 7210 +<9932> <9933> 15301 +<993a> <993c> 18968 +<993d> <993e> 7216 +<9951> <9952> 7223 +<9997> <9998> 7227 +<99ad> <99ae> 7230 +<99b9> <99ba> 15308 +<99ea> <99ec> 22906 +<99ed> <99ee> 7238 +<99f1> <99f2> 7240 +<99f4> <99f5> 22909 +<99fd> <99fe> 22911 +<9a2d> <9a2e> 15315 +<9ab5> <9ab6> 15321 +<9abd> <9abe> 20002 +<9ad3> <9ad4> 7273 +<9ade> <9adf> 7275 +<9ae2> <9ae3> 7277 +<9af2> <9af3> 22937 +<9b04> <9b05> 22944 +<9b0d> <9b0e> 20007 +<9b22> <9b23> 7291 +<9b27> <9b2a> 7294 +<9b2e> <9b2f> 7298 +<9b33> <9b34> 15326 +<9b39> <9b3a> 22950 +<9b4d> <9b4e> 7304 +<9b56> <9b57> 22953 +<9b6b> <9b6c> 19020 +<9b6d> <9b6e> 22958 +<9b76> <9b77> 19022 +<9b96> <9b97> 7312 +<9b9f> <9ba0> 7314 +<9bd1> <9bd2> 7323 +<9c18> <9c1a> 19040 +endcidrange + +63 begincidrange +<9c49> <9c4a> 19052 +<9c4f> <9c50> 17215 +<9c69> <9c6b> 19060 +<9c6d> <9c6e> 19063 +<9d17> <9d18> 19073 +<9d1d> <9d1e> 17218 +<9d33> <9d34> 22988 +<9d53> <9d54> 22993 +<9d5d> <9d5e> 7380 +<9d76> <9d77> 19086 +<9d92> <9d93> 22999 +<9d97> <9d98> 23002 +<9dd4> <9dd5> 23008 +<9e10> <9e12> 23015 +<9e1a> <9e1b> 7411 +<9e82> <9e84> 20037 +<9e8b> <9e8c> 7419 +<9e8e> <9e8f> 23020 +<9ece> <9ed0> 7432 +<9eec> <9eed> 23030 +<9ef6> <9ef7> 7444 +<9efb> <9efd> 7447 +<9f07> <9f08> 7450 +<9f2a> <9f2b> 20050 +<9f31> <9f32> 23039 +<9f43> <9f44> 23043 +<9f5f> <9f61> 7461 +<9f66> <9f67> 7464 +<9f91> <9f92> 23053 +<9fbf> <9fc2> 20068 + 10004 + 11724 + 17671 + 18554 + 18773 + 18834 + 15444 + 7809 + 8579 + 8612 + 8699 + 13349 + 112 + 9359 + 7887 + 7892 + 7899 + 7905 + 7901 + 7915 + 7909 + 7907 + 7911 + 12639 + 7903 + 674 + 780 + 639 + 790 + 816 + 12131 + 327 + 713 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UTF16-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UTF16-V new file mode 100644 index 00000000000..089ec8b4106 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniJIS-UTF16-V @@ -0,0 +1,299 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniJIS-UTF16-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniJIS-UTF16-H) +%%BeginResource: CMap (UniJIS-UTF16-V) +%%Title: (UniJIS-UTF16-V Adobe Japan1 6) +%%Version: 1.004 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniJIS-UTF16-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 6 def +end def + +/CMapName /UniJIS-UTF16-V def +/CMapVersion 1.004 def +/CMapType 1 def + +/XUID [1 10 25612] def + +/WMode 1 def + +100 begincidchar +<00b0> 8269 +<2010> 7893 +<2015> 7892 +<2016> 7895 +<2025> 7898 +<2026> 7897 +<2032> 8273 +<2033> 8283 +<2190> 738 +<2191> 736 +<2192> 739 +<2193> 737 +<21c4> 8311 +<21c5> 8310 +<21c6> 8312 +<21e6> 8012 +<21e7> 8014 +<21e8> 8011 +<21e9> 8013 +<239b> 12148 +<239c> 12168 +<239d> 12147 +<239e> 12150 +<239f> 12168 +<23a0> 12149 +<23a1> 12156 +<23a2> 12168 +<23a3> 12155 +<23a4> 12158 +<23a5> 12168 +<23a6> 12157 +<23a7> 8168 +<23a8> 8167 +<23a9> 8166 +<23aa> 12168 +<23ab> 8172 +<23ac> 8171 +<23ad> 8170 +<250c> 7495 +<250d> 7497 +<250e> 7496 +<250f> 7498 +<2510> 7503 +<2511> 7505 +<2512> 7504 +<2513> 7506 +<2514> 7491 +<2515> 7493 +<2516> 7492 +<2517> 7494 +<2518> 7499 +<2519> 7501 +<251a> 7500 +<251b> 7502 +<251c> 7523 +<251d> 7527 +<251e> 7525 +<251f> 7524 +<2520> 7526 +<2521> 7529 +<2522> 7528 +<2525> 7535 +<2526> 7533 +<2527> 7532 +<2528> 7534 +<2529> 7537 +<252a> 7536 +<252b> 7538 +<252c> 7515 +<2530> 7516 +<2534> 7507 +<2538> 7508 +<2540> 7541 +<2541> 7540 +<2542> 7542 +<2543> 7547 +<2544> 7549 +<2545> 7546 +<2546> 7548 +<2547> 7553 +<2548> 7552 +<261c> 8221 +<261d> 8219 +<261e> 8222 +<261f> 8220 +<2702> 12178 +<27a1> 8209 +<301c> 7894 +<301d> 7956 +<301f> 7957 +<3041> 7918 +<3043> 7919 +<3045> 7920 +<3047> 7921 +<3049> 7922 +<3063> 7923 +<3083> 7924 +<3085> 7925 +<3087> 7926 +<308e> 7927 +endcidchar + +78 begincidchar +<309b> 8272 +<309c> 8271 +<30a0> 16331 +<30a1> 7928 +<30a3> 7929 +<30a5> 7930 +<30a7> 7931 +<30a9> 7932 +<30c3> 7933 +<30e3> 7934 +<30e5> 7935 +<30e7> 7936 +<30ee> 7937 +<30fc> 7891 +<3300> 8350 +<3303> 8338 +<3304> 11960 +<3305> 8333 +<3306> 11961 +<3307> 11965 +<3308> 11963 +<3309> 11968 +<330a> 11966 +<330b> 11970 +<330c> 11972 +<330d> 7950 +<3314> 7941 +<3315> 8340 +<3316> 8330 +<3317> 11980 +<3318> 8339 +<3319> 11982 +<331e> 8353 +<3322> 8329 +<3323> 8348 +<3324> 11991 +<3325> 11993 +<3326> 7951 +<3327> 7945 +<332a> 8356 +<332b> 7953 +<332d> 11999 +<3331> 8358 +<3332> 12005 +<3333> 8334 +<3336> 7947 +<3337> 12014 +<3338> 12016 +<3339> 8343 +<333a> 12017 +<333b> 8349 +<333c> 12010 +<333d> 12018 +<3341> 12019 +<3342> 8347 +<3347> 8357 +<3348> 12027 +<3349> 7940 +<334a> 7954 +<334d> 7943 +<334e> 8337 +<3351> 7948 +<3352> 12034 +<3353> 12038 +<3354> 12035 +<3357> 8344 +<337f> 8324 + 8268 + 8274 + 7917 + 7903 + 7904 + 7890 + 7905 + 7896 + 7906 + 7894 + 7889 +endcidchar + +37 begincidrange +<23b0> <23b1> 16350 +<2500> <2501> 7481 +<2502> <2503> 7479 +<2504> <2505> 7485 +<2506> <2507> 7483 +<2508> <2509> 7489 +<250a> <250b> 7487 +<2523> <2524> 7530 +<252d> <252f> 7517 +<2531> <2533> 7520 +<2535> <2537> 7509 +<2539> <253b> 7512 +<253d> <253f> 7543 +<2549> <254a> 7550 +<3001> <3002> 7887 +<3008> <3011> 7907 +<3014> <3015> 7901 +<3016> <3017> 16329 +<3018> <3019> 12139 +<3095> <3096> 8264 +<30f5> <30f6> 7938 +<31f0> <31f9> 16333 +<31fa> <31ff> 16344 +<3301> <3302> 11958 +<330e> <3313> 11973 +<331a> <331d> 11984 +<331f> <3321> 11988 +<3328> <3329> 11996 +<332e> <3330> 12002 +<3334> <3335> 12008 +<333e> <3340> 12020 +<3343> <3346> 12023 +<334b> <334c> 12028 +<334f> <3350> 12030 +<3355> <3356> 12039 + 7899 + 12141 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UCS2-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UCS2-H new file mode 100644 index 00000000000..b699bcaed31 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UCS2-H @@ -0,0 +1,8725 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniKS-UCS2-H) +%%Title: (UniKS-UCS2-H Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /UniKS-UCS2-H def +/CMapVersion 10.003 def +/CMapType 1 def + +/XUID [1 10 25406] def + +/WMode 0 def + +2 begincodespacerange + <0000> + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidrange +<0020> <007e> 1 +<00a1> <00a1> 208 +<00a4> <00a4> 214 +<00a7> <00a7> 155 +<00a8> <00a8> 107 +<00aa> <00aa> 668 +<00ab> <00ab> 176 +<00b0> <00b0> 138 +<00b1> <00b1> 130 +<00b2> <00b3> 843 +<00b4> <00b4> 199 +<00b6> <00b6> 244 +<00b8> <00b8> 206 +<00b9> <00b9> 842 +<00ba> <00ba> 675 +<00bb> <00bb> 177 +<00bc> <00bc> 751 +<00bd> <00bd> 748 +<00be> <00be> 752 +<00bf> <00bf> 209 +<00c6> <00c6> 666 +<00d0> <00d0> 667 +<00d7> <00d7> 131 +<00d8> <00d8> 673 +<00de> <00de> 676 +<00df> <00df> 768 +<00e6> <00e6> 757 +<00f0> <00f0> 759 +<00f7> <00f7> 132 +<00f8> <00f8> 766 +<00fe> <00fe> 769 +<0111> <0111> 758 +<0126> <0126> 669 +<0127> <0127> 760 +<0131> <0131> 761 +<0132> <0132> 670 +<0133> <0133> 762 +<0138> <0138> 763 +<013f> <013f> 671 +<0140> <0140> 764 +<0141> <0141> 672 +<0142> <0142> 765 +<0149> <0149> 772 +<014a> <014a> 678 +<014b> <014b> 771 +<0152> <0152> 674 +<0153> <0153> 767 +<0166> <0166> 677 +<0167> <0167> 770 +<02bc> <02bc> 8275 +<02c7> <02c7> 201 +<02d8> <02d8> 202 +<02d9> <02d9> 205 +<02da> <02da> 204 +<02db> <02db> 207 +<02dc> <02dc> 200 +<02dd> <02dd> 203 +<0391> <03a1> 471 +<03a3> <03a9> 488 +<03b1> <03c1> 495 +<03c3> <03c9> 512 +<0401> <0401> 1026 +<0410> <0415> 1020 +<0416> <0435> 1027 +<0436> <044f> 1060 +<0451> <0451> 1059 +<2013> <2014> 109 +<2016> <2016> 111 +<2018> <2019> 114 +<201b> <201b> 8238 +<201c> <201d> 116 +<201f> <201f> 8237 +<2020> <2021> 245 +<2022> <2022> 8607 +<2025> <2026> 105 +<2030> <2030> 216 +<2032> <2033> 139 +<2034> <2034> 8582 +<2035> <2035> 9326 +<2036> <2036> 9324 +<2039> <203a> 8612 +<203b> <203b> 156 +<203c> <203c> 8763 +<2042> <2042> 8599 +<2074> <2074> 845 +<207a> <207b> 8239 +<207c> <207c> 8248 +<207d> <207e> 8250 +<207f> <207f> 846 +<2081> <2084> 847 +<2103> <2103> 141 +<2109> <2109> 215 +<2113> <2113> 590 +<2116> <2116> 258 +<2121> <2121> 263 +<2122> <2122> 260 +<2126> <2126> 643 +<212b> <212b> 142 +<2153> <2154> 749 +<215b> <215e> 753 +endcidrange + +100 begincidrange +<2160> <2169> 461 +<2170> <2179> 451 +<2190> <2191> 171 +<2192> <2192> 170 +<2193> <2194> 173 +<2195> <2195> 247 +<2196> <2196> 250 +<2197> <2197> 248 +<2198> <2198> 251 +<2199> <2199> 249 +<21b0> <21b0> 8868 +<21b1> <21b1> 8865 +<21b2> <21b2> 8864 +<21b3> <21b3> 8869 +<21b4> <21b4> 8867 +<21bc> <21bc> 8884 +<21c0> <21c0> 8885 +<21c4> <21c5> 8896 +<21cd> <21cd> 8816 +<21cf> <21cf> 8815 +<21d0> <21d0> 8814 +<21d1> <21d1> 8854 +<21d2> <21d2> 195 +<21d3> <21d3> 8855 +<21d4> <21d4> 196 +<21e0> <21e0> 9190 +<21e1> <21e1> 9192 +<21e2> <21e2> 9191 +<21e3> <21e3> 9193 +<21e6> <21e6> 9198 +<21e7> <21e7> 9200 +<21e8> <21e8> 9199 +<21e9> <21e9> 9201 +<2200> <2200> 197 +<2202> <2202> 151 +<2203> <2203> 198 +<2206> <2206> 8715 +<2207> <2207> 152 +<2208> <2208> 184 +<2209> <2209> 8749 +<220b> <220b> 185 +<220c> <220c> 8750 +<220f> <220f> 213 +<2211> <2211> 212 +<2213> <2213> 8726 +<221a> <221a> 178 +<221d> <221d> 180 +<221e> <221e> 136 +<221f> <221f> 8717 +<2220> <2220> 148 +<2222> <2222> 8738 +<2225> <2226> 8719 +<2227> <2228> 192 +<2229> <2229> 191 +<222a> <222a> 190 +<222b> <222c> 182 +<222e> <222e> 211 +<2234> <2234> 137 +<2235> <2235> 181 +<2236> <2236> 210 +<2237> <2237> 8321 +<223d> <223d> 179 +<2243> <2243> 8500 +<2245> <2245> 8499 +<2248> <2248> 8501 +<2250> <2250> 8739 +<2251> <2251> 8723 +<2252> <2252> 154 +<2253> <2253> 8722 +<225a> <225a> 8753 +<2260> <2260> 133 +<2261> <2261> 153 +<2262> <2262> 8734 +<2264> <2265> 134 +<2266> <2267> 8724 +<226e> <226f> 8745 +<2270> <2273> 8481 +<2276> <2277> 8489 +<2279> <2279> 8491 +<227a> <227b> 8475 +<2280> <2281> 8479 +<2282> <2283> 188 +<2284> <2284> 8748 +<2285> <2285> 8747 +<2286> <2287> 186 +<228a> <228a> 8486 +<228b> <228b> 8488 +<2295> <2297> 8727 +<22a3> <22a3> 8742 +<22a4> <22a4> 8503 +<22a5> <22a5> 149 +<22bb> <22bc> 8751 +<22ce> <22cf> 8477 +<22da> <22db> 8492 +<22ee> <22ee> 8320 +<22ef> <22ef> 106 +<2306> <2306> 8754 +<2312> <2312> 150 +<2314> <2314> 8731 +<2460> <246e> 733 +endcidrange + +100 begincidrange +<246f> <2473> 8791 +<2474> <2482> 827 +<2483> <2487> 9042 +<249c> <24b5> 801 +<24b6> <24cf> 8388 +<24d0> <24e9> 707 +<2500> <2500> 519 +<2501> <2501> 530 +<2502> <2502> 520 +<2503> <2503> 531 +<250c> <250c> 521 +<250d> <250d> 558 +<250e> <250e> 557 +<250f> <250f> 532 +<2510> <2510> 522 +<2511> <2511> 552 +<2512> <2512> 551 +<2513> <2513> 533 +<2514> <2514> 524 +<2515> <2515> 556 +<2516> <2516> 555 +<2517> <2517> 535 +<2518> <2518> 523 +<2519> <2519> 554 +<251a> <251a> 553 +<251b> <251b> 534 +<251c> <251c> 525 +<251d> <251d> 546 +<251e> <251f> 559 +<2520> <2520> 541 +<2521> <2522> 561 +<2523> <2523> 536 +<2524> <2524> 527 +<2525> <2525> 548 +<2526> <2527> 563 +<2528> <2528> 543 +<2529> <252a> 565 +<252b> <252b> 538 +<252c> <252c> 526 +<252d> <252e> 567 +<252f> <252f> 542 +<2530> <2530> 547 +<2531> <2532> 569 +<2533> <2533> 537 +<2534> <2534> 528 +<2535> <2536> 571 +<2537> <2537> 544 +<2538> <2538> 549 +<2539> <253a> 573 +<253b> <253b> 539 +<253c> <253c> 529 +<253d> <253e> 575 +<253f> <253f> 545 +<2540> <2541> 577 +<2542> <2542> 550 +<2543> <254a> 579 +<254b> <254b> 540 +<2592> <2592> 232 +<25a0> <25a0> 165 +<25a1> <25a1> 164 +<25a3> <25a3> 229 +<25a4> <25a5> 233 +<25a6> <25a6> 237 +<25a7> <25a7> 236 +<25a8> <25a8> 235 +<25a9> <25a9> 238 +<25b1> <25b1> 8736 +<25b2> <25b2> 167 +<25b3> <25b3> 166 +<25b5> <25b5> 8780 +<25b6> <25b6> 220 +<25b7> <25b7> 219 +<25b9> <25b9> 8781 +<25bc> <25bc> 169 +<25bd> <25bd> 168 +<25bf> <25bf> 8779 +<25c0> <25c0> 218 +<25c1> <25c1> 217 +<25c3> <25c3> 8782 +<25c6> <25c6> 163 +<25c7> <25c7> 162 +<25c8> <25c8> 228 +<25c9> <25c9> 227 +<25ca> <25ca> 8787 +<25cb> <25cb> 159 +<25cc> <25cc> 8639 +<25ce> <25ce> 161 +<25cf> <25cf> 160 +<25d0> <25d1> 230 +<25e6> <25e6> 8775 +<25ef> <25ef> 8633 +<2605> <2605> 158 +<2606> <2606> 157 +<260e> <260e> 241 +<260f> <260f> 240 +<261c> <261c> 242 +<261d> <261d> 9222 +<261e> <261e> 243 +<261f> <261f> 9223 +<262f> <262f> 8664 +endcidrange + +100 begincidrange +<2640> <2640> 147 +<2642> <2642> 146 +<2660> <2661> 222 +<2663> <2663> 226 +<2664> <2664> 221 +<2665> <2665> 224 +<2667> <2667> 225 +<2668> <2668> 239 +<2669> <266a> 253 +<266c> <266c> 255 +<266d> <266d> 252 +<266f> <266f> 8594 +<2716> <2716> 8631 +<271a> <271a> 8630 +<273d> <273d> 8604 +<2756> <2756> 8637 +<2776> <277f> 8673 +<278a> <2793> 8342 +<3000> <3002> 101 +<3003> <3003> 108 +<3008> <3011> 120 +<3012> <3012> 8700 +<3013> <3013> 175 +<3014> <3015> 118 +<3016> <3019> 8219 +<301e> <301f> 9322 +<3020> <3020> 8671 +<3036> <3036> 8701 +<3041> <3093> 851 +<30a1> <30f6> 934 +<30fb> <30fb> 104 +<30fc> <30fc> 9330 +<3131> <3163> 358 +<3164> <3164> 101 +<3165> <318e> 409 +<3200> <321b> 773 +<321c> <321c> 257 +<3231> <3231> 8788 +<3239> <3239> 8789 +<3260> <327b> 679 +<327f> <327f> 256 +<328a> <328f> 9301 +<3290> <3290> 9300 +<3294> <3294> 9080 +<329e> <329e> 8761 +<32a5> <32a5> 9096 +<3380> <3384> 627 +<3388> <3389> 612 +<338a> <338c> 646 +<338d> <338f> 608 +<3390> <3394> 638 +<3395> <3397> 587 +<3398> <3398> 591 +<3399> <33a2> 597 +<33a3> <33a6> 593 +<33a7> <33a8> 615 +<33a9> <33ac> 655 +<33ad> <33af> 651 +<33b0> <33b9> 617 +<33ba> <33bf> 632 +<33c0> <33c1> 644 +<33c2> <33c2> 261 +<33c3> <33c3> 662 +<33c4> <33c4> 592 +<33c5> <33c5> 650 +<33c6> <33c6> 665 +<33c7> <33c7> 259 +<33c8> <33c8> 614 +<33c9> <33c9> 663 +<33ca> <33ca> 607 +<33cb> <33cb> 8790 +<33cf> <33cf> 611 +<33d0> <33d0> 660 +<33d3> <33d3> 661 +<33d6> <33d6> 649 +<33d8> <33d8> 262 +<33db> <33db> 654 +<33dc> <33dc> 664 +<33dd> <33dd> 659 +<4e00> <4e00> 6460 +<4e01> <4e01> 6704 +<4e03> <4e03> 7364 +<4e07> <4e07> 4670 +<4e08> <4e08> 6534 +<4e09> <4e09> 5320 +<4e0a> <4e0a> 5331 +<4e0b> <4e0b> 7616 +<4e0d> <4e0d> 5109 +<4e11> <4e11> 7288 +<4e14> <4e14> 7041 +<4e15> <4e15> 5181 +<4e16> <4e16> 5492 +<4e18> <4e18> 3893 +<4e19> <4e19> 5041 +<4e1e> <4e1e> 5682 +<4e2d> <4e2d> 6922 +<4e32> <4e32> 3802 +<4e38> <4e38> 7882 +<4e39> <4e39> 4192 +<4e3b> <4e3b> 6860 +endcidrange + +100 begincidrange +<4e42> <4e42> 6029 +<4e43> <4e43> 4154 +<4e45> <4e45> 3894 +<4e4b> <4e4b> 6942 +<4e4d> <4e4d> 5241 +<4e4e> <4e4e> 7800 +<4e4f> <4e4f> 7614 +<4e56> <4e56> 3855 +<4e58> <4e58> 5683 +<4e59> <4e59> 6380 +<4e5d> <4e5d> 3895 +<4e5e> <4e5e> 3613 +<4e5f> <4e5f> 5862 +<4e6b> <4e6b> 3500 +<4e6d> <4e6d> 4329 +<4e73> <4e73> 6309 +<4e76> <4e76> 5092 +<4e77> <4e77> 5315 +<4e7e> <4e7e> 3601 +<4e82> <4e82> 4389 +<4e86> <4e86> 4551 +<4e88> <4e88> 5934 +<4e8b> <4e8b> 5242 +<4e8c> <4e8c> 6413 +<4e8e> <4e8e> 6197 +<4e90> <4e90> 6252 +<4e91> <4e91> 6238 +<4e92> <4e92> 7801 +<4e94> <4e94> 6049 +<4e95> <4e95> 6705 +<4e98> <4e98> 4058 +<4e9b> <4e9b> 5243 +<4e9e> <4e9e> 5775 +<4ea1> <4ea1> 4696 +<4ea2> <4ea2> 7670 +<4ea4> <4ea4> 3868 +<4ea5> <4ea5> 7685 +<4ea6> <4ea6> 5947 +<4ea8> <4ea8> 7771 +<4eab> <4eab> 7710 +<4eac> <4eac> 3660 +<4ead> <4ead> 6706 +<4eae> <4eae> 4427 +<4eb6> <4eb6> 4193 +<4eba> <4eba> 6443 +<4ec0> <4ec0> 5771 +<4ec1> <4ec1> 6444 +<4ec4> <4ec4> 7331 +<4ec7> <4ec7> 3896 +<4eca> <4eca> 4038 +<4ecb> <4ecb> 3560 +<4ecd> <4ecd> 6479 +<4ed4> <4ed4> 6483 +<4ed5> <4ed5> 5244 +<4ed6> <4ed6> 7380 +<4ed7> <4ed7> 6535 +<4ed8> <4ed8> 5110 +<4ed9> <4ed9> 5418 +<4edd> <4edd> 4331 +<4edf> <4edf> 7148 +<4ee3> <4ee3> 4250 +<4ee4> <4ee4> 4489 +<4ee5> <4ee5> 6414 +<4ef0> <4ef0> 5833 +<4ef2> <4ef2> 6923 +<4ef6> <4ef6> 3602 +<4ef7> <4ef7> 3561 +<4efb> <4efb> 6469 +<4f01> <4f01> 4062 +<4f09> <4f09> 7671 +<4f0a> <4f0a> 6415 +<4f0b> <4f0b> 4051 +<4f0d> <4f0d> 6050 +<4f0e> <4f0e> 4063 +<4f0f> <4f0f> 5074 +<4f10> <4f10> 5005 +<4f11> <4f11> 8005 +<4f2f> <4f2f> 4988 +<4f34> <4f34> 4905 +<4f36> <4f36> 4490 +<4f38> <4f38> 5735 +<4f3a> <4f3a> 5245 +<4f3c> <4f3c> 5246 +<4f3d> <4f3d> 3436 +<4f43> <4f43> 6643 +<4f46> <4f46> 4194 +<4f47> <4f47> 6591 +<4f48> <4f48> 7544 +<4f4d> <4f4d> 6284 +<4f4e> <4f4e> 6592 +<4f4f> <4f4f> 6861 +<4f50> <4f50> 6854 +<4f51> <4f51> 6198 +<4f55> <4f55> 7617 +<4f59> <4f59> 5935 +<4f5a> <4f5a> 6461 +<4f5b> <4f5b> 5171 +<4f5c> <4f5c> 6509 +<4f69> <4f69> 7502 +<4f6f> <4f6f> 5879 +endcidrange + +100 begincidrange +<4f70> <4f70> 4989 +<4f73> <4f73> 3437 +<4f76> <4f76> 4127 +<4f7a> <4f7a> 6644 +<4f7e> <4f7e> 6462 +<4f7f> <4f7f> 5247 +<4f81> <4f81> 5736 +<4f83> <4f83> 3476 +<4f84> <4f84> 7015 +<4f86> <4f86> 4420 +<4f88> <4f88> 7336 +<4f8a> <4f8a> 3839 +<4f8b> <4f8b> 4506 +<4f8d> <4f8d> 5692 +<4f8f> <4f8f> 6862 +<4f91> <4f91> 6310 +<4f96> <4f96> 4594 +<4f98> <4f98> 7042 +<4f9b> <4f9b> 3786 +<4f9d> <4f9d> 6394 +<4fae> <4fae> 4764 +<4faf> <4faf> 7966 +<4fb5> <4fb5> 7367 +<4fb6> <4fb6> 4440 +<4fbf> <4fbf> 7518 +<4fc2> <4fc2> 3705 +<4fc3> <4fc3> 7241 +<4fc4> <4fc4> 5776 +<4fc9> <4fc9> 6051 +<4fca> <4fca> 6902 +<4fce> <4fce> 6782 +<4fd1> <4fd1> 6174 +<4fd3> <4fd3> 3661 +<4fd4> <4fd4> 7734 +<4fd7> <4fd7> 5537 +<4fda> <4fda> 4613 +<4fdd> <4fdd> 5058 +<4fdf> <4fdf> 5248 +<4fe0> <4fe0> 7759 +<4fe1> <4fe1> 5737 +<4fee> <4fee> 5567 +<4fef> <4fef> 5111 +<4ff1> <4ff1> 3897 +<4ff3> <4ff3> 4970 +<4ff5> <4ff5> 7576 +<4ff8> <4ff8> 5093 +<4ffa> <4ffa> 5925 +<5002> <5002> 5042 +<5006> <5006> 4428 +<5009> <5009> 7092 +<500b> <500b> 3562 +<500d> <500d> 4969 +<5011> <5011> 4836 +<5012> <5012> 4269 +<5016> <5016> 7705 +<5019> <5019> 7967 +<501a> <501a> 6395 +<501c> <501c> 7134 +<501e> <501e> 3662 +<501f> <501f> 7043 +<5021> <5021> 7093 +<5023> <5023> 4941 +<5024> <5024> 7337 +<5026> <5026> 3969 +<5027> <5027> 6837 +<5028> <5028> 3585 +<502a> <502a> 6030 +<502b> <502b> 4595 +<502c> <502c> 7394 +<502d> <502d> 6131 +<503b> <503b> 5863 +<5043> <5043> 5917 +<5047> <5047> 3438 +<5048> <5048> 3627 +<5049> <5049> 6285 +<504f> <504f> 7519 +<5055> <5055> 7686 +<505a> <505a> 6863 +<505c> <505c> 6707 +<5065> <5065> 3603 +<5074> <5074> 7330 +<5075> <5075> 6708 +<5076> <5076> 6199 +<5078> <5078> 7465 +<5080> <5080> 3856 +<5085> <5085> 5112 +<508d> <508d> 4942 +<5091> <5091> 3614 +<5098> <5098> 5303 +<5099> <5099> 5182 +<50ac> <50ac> 7262 +<50ad> <50ad> 6175 +<50b2> <50b2> 6052 +<50b3> <50b3> 6645 +<50b5> <50b5> 7114 +<50b7> <50b7> 5332 +<50be> <50be> 3663 +<50c5> <50c5> 4023 +<50c9> <50c9> 7177 +<50ca> <50ca> 5419 +endcidrange + +100 begincidrange +<50cf> <50cf> 5333 +<50d1> <50d1> 3869 +<50d5> <50d5> 5075 +<50d6> <50d6> 8035 +<50da> <50da> 4552 +<50de> <50de> 6286 +<50e5> <50e5> 6140 +<50e7> <50e7> 5684 +<50ed> <50ed> 7082 +<50f9> <50f9> 3439 +<50fb> <50fb> 5020 +<50ff> <50ff> 5249 +<5100> <5100> 6396 +<5101> <5101> 6903 +<5104> <5104> 5912 +<5106> <5106> 3664 +<5109> <5109> 3617 +<5112> <5112> 6311 +<511f> <511f> 5334 +<5121> <5121> 4543 +<512a> <512a> 6200 +<5132> <5132> 6593 +<5137> <5137> 4441 +<513a> <513a> 4133 +<513c> <513c> 5926 +<5140> <5140> 6089 +<5141> <5141> 6359 +<5143> <5143> 6255 +<5144> <5144> 7772 +<5145> <5145> 7306 +<5146> <5146> 6783 +<5147> <5147> 8013 +<5148> <5148> 5420 +<5149> <5149> 3840 +<514b> <514b> 4016 +<514c> <514c> 7431 +<514d> <514d> 4735 +<514e> <514e> 7449 +<5152> <5152> 5777 +<515c> <515c> 4348 +<5162> <5162> 4059 +<5165> <5165> 6477 +<5167> <5167> 4155 +<5168> <5168> 6646 +<5169> <5169> 4429 +<516a> <516a> 6312 +<516b> <516b> 7499 +<516c> <516c> 3787 +<516d> <516d> 4591 +<516e> <516e> 7791 +<5171> <5171> 3788 +<5175> <5175> 5043 +<5176> <5176> 4064 +<5177> <5177> 3898 +<5178> <5178> 6647 +<517c> <517c> 3654 +<5180> <5180> 4065 +<5186> <5186> 5933 +<518a> <518a> 7126 +<518d> <518d> 6570 +<5192> <5192> 4765 +<5195> <5195> 4736 +<5197> <5197> 6176 +<51a0> <51a0> 3819 +<51a5> <51a5> 4748 +<51aa> <51aa> 4733 +<51ac> <51ac> 4332 +<51b6> <51b6> 5864 +<51b7> <51b7> 4424 +<51bd> <51bd> 4477 +<51c4> <51c4> 7130 +<51c6> <51c6> 6904 +<51c9> <51c9> 4430 +<51cb> <51cb> 6784 +<51cc> <51cc> 4607 +<51cd> <51cd> 4333 +<51dc> <51dc> 4606 +<51dd> <51dd> 6390 +<51de> <51de> 8036 +<51e1> <51e1> 5009 +<51f0> <51f0> 7904 +<51f1> <51f1> 3563 +<51f6> <51f6> 8014 +<51f8> <51f8> 7167 +<51f9> <51f9> 6141 +<51fa> <51fa> 7303 +<51fd> <51fd> 7651 +<5200> <5200> 4270 +<5203> <5203> 6445 +<5206> <5206> 5152 +<5207> <5207> 6684 +<5208> <5208> 6031 +<520a> <520a> 3477 +<520e> <520e> 4837 +<5211> <5211> 7773 +<5217> <5217> 4478 +<521d> <521d> 7214 +<5224> <5224> 7490 +<5225> <5225> 5037 +<5229> <5229> 4614 +endcidrange + +100 begincidrange +<522a> <522a> 5304 +<522e> <522e> 3835 +<5230> <5230> 4271 +<5236> <5236> 6759 +<5237> <5237> 5561 +<5238> <5238> 3970 +<5239> <5239> 7077 +<523a> <523a> 6484 +<523b> <523b> 3465 +<5243> <5243> 7205 +<5247> <5247> 7360 +<524a> <524a> 5301 +<524b> <524b> 4017 +<524c> <524c> 4397 +<524d> <524d> 6648 +<5254> <5254> 7135 +<5256> <5256> 5113 +<525b> <525b> 3536 +<525d> <525d> 4886 +<5261> <5261> 5463 +<5269> <5269> 6480 +<526a> <526a> 6649 +<526f> <526f> 5114 +<5272> <5272> 7649 +<5275> <5275> 7094 +<527d> <527d> 7577 +<527f> <527f> 7215 +<5283> <5283> 7948 +<5287> <5287> 4018 +<5288> <5288> 5021 +<5289> <5289> 4577 +<528d> <528d> 3618 +<5291> <5291> 6760 +<5292> <5292> 3619 +<529b> <529b> 4458 +<529f> <529f> 3789 +<52a0> <52a0> 3440 +<52a3> <52a3> 4479 +<52a4> <52a4> 4024 +<52a9> <52a9> 6785 +<52aa> <52aa> 4169 +<52ab> <52ab> 3624 +<52be> <52be> 7703 +<52c1> <52c1> 3665 +<52c3> <52c3> 4930 +<52c5> <52c5> 7361 +<52c7> <52c7> 6177 +<52c9> <52c9> 4737 +<52cd> <52cd> 3666 +<52d2> <52d2> 4604 +<52d5> <52d5> 4334 +<52d6> <52d6> 6229 +<52d8> <52d8> 3510 +<52d9> <52d9> 4812 +<52db> <52db> 7979 +<52dd> <52dd> 5685 +<52de> <52de> 4511 +<52df> <52df> 4766 +<52e2> <52e2> 5493 +<52e3> <52e3> 6619 +<52e4> <52e4> 4025 +<52f3> <52f3> 7980 +<52f5> <52f5> 4442 +<52f8> <52f8> 3971 +<52fa> <52fa> 6510 +<52fb> <52fb> 4009 +<52fe> <52fe> 3899 +<52ff> <52ff> 4848 +<5305> <5305> 7545 +<5308> <5308> 8015 +<530d> <530d> 7546 +<530f> <530f> 7547 +<5310> <5310> 5076 +<5315> <5315> 5183 +<5316> <5316> 7863 +<5317> <5317> 5151 +<5319> <5319> 5693 +<5320> <5320> 6536 +<5321> <5321> 3841 +<5323> <5323> 3530 +<532a> <532a> 5184 +<532f> <532f> 7928 +<5339> <5339> 7604 +<533f> <533f> 4188 +<5340> <5340> 3900 +<5341> <5341> 5772 +<5343> <5343> 7149 +<5344> <5344> 6478 +<5347> <5347> 5686 +<5348> <5348> 6053 +<5349> <5349> 7994 +<534a> <534a> 4906 +<534d> <534d> 4671 +<5351> <5351> 5185 +<5352> <5352> 6834 +<5353> <5353> 7395 +<5354> <5354> 7760 +<5357> <5357> 4145 +<535a> <535a> 4887 +<535c> <535c> 5077 +endcidrange + +100 begincidrange +<535e> <535e> 5031 +<5360> <5360> 6692 +<5366> <5366> 3852 +<5368> <5368> 5450 +<536f> <536f> 4800 +<5370> <5370> 6446 +<5371> <5371> 6287 +<5374> <5374> 3466 +<5375> <5375> 4390 +<5377> <5377> 3972 +<537d> <537d> 6926 +<537f> <537f> 3667 +<5384> <5384> 5851 +<5393> <5393> 5840 +<5398> <5398> 4615 +<539a> <539a> 7968 +<539f> <539f> 6256 +<53a0> <53a0> 7332 +<53a5> <53a5> 3979 +<53a6> <53a6> 7618 +<53ad> <53ad> 5989 +<53bb> <53bb> 3586 +<53c3> <53c3> 7083 +<53c8> <53c8> 6201 +<53c9> <53c9> 7044 +<53ca> <53ca> 4052 +<53cb> <53cb> 6202 +<53cd> <53cd> 4907 +<53d4> <53d4> 5628 +<53d6> <53d6> 7316 +<53d7> <53d7> 5568 +<53db> <53db> 4908 +<53e1> <53e1> 6032 +<53e2> <53e2> 7251 +<53e3> <53e3> 3901 +<53e4> <53e4> 3729 +<53e5> <53e5> 3902 +<53e9> <53e9> 3730 +<53ea> <53ea> 6943 +<53eb> <53eb> 3994 +<53ec> <53ec> 5500 +<53ed> <53ed> 7500 +<53ef> <53ef> 3441 +<53f0> <53f0> 7432 +<53f1> <53f1> 7016 +<53f2> <53f2> 5250 +<53f3> <53f3> 6203 +<53f8> <53f8> 5251 +<5403> <5403> 8023 +<5404> <5404> 3467 +<5408> <5408> 7663 +<5409> <5409> 4128 +<540a> <540a> 6620 +<540c> <540c> 4335 +<540d> <540d> 4749 +<540e> <540e> 7969 +<540f> <540f> 4616 +<5410> <5410> 7450 +<5411> <5411> 7711 +<541b> <541b> 3953 +<541d> <541d> 4638 +<541f> <541f> 6381 +<5420> <5420> 7534 +<5426> <5426> 5115 +<5429> <5429> 5153 +<542b> <542b> 7652 +<5433> <5433> 6055 +<5438> <5438> 8030 +<5439> <5439> 7317 +<543b> <543b> 4838 +<543c> <543c> 7970 +<543e> <543e> 6054 +<5442> <5442> 4443 +<5448> <5448> 6709 +<544a> <544a> 3731 +<5451> <5451> 7408 +<5468> <5468> 6867 +<546a> <546a> 6866 +<5471> <5471> 3732 +<5473> <5473> 4851 +<5475> <5475> 3442 +<547b> <547b> 5738 +<547c> <547c> 7802 +<547d> <547d> 4750 +<5480> <5480> 6594 +<5486> <5486> 7548 +<548c> <548c> 7864 +<548e> <548e> 3903 +<5490> <5490> 5116 +<54a4> <54a4> 7381 +<54a8> <54a8> 6485 +<54ab> <54ab> 6944 +<54ac> <54ac> 3870 +<54b3> <54b3> 7687 +<54b8> <54b8> 7653 +<54bd> <54bd> 6447 +<54c0> <54c0> 5841 +<54c1> <54c1> 7590 +<54c4> <54c4> 7853 +<54c8> <54c8> 7664 +endcidrange + +100 begincidrange +<54c9> <54c9> 6571 +<54e1> <54e1> 6257 +<54e5> <54e5> 3443 +<54e8> <54e8> 7216 +<54ed> <54ed> 3767 +<54ee> <54ee> 7953 +<54f2> <54f2> 7168 +<54fa> <54fa> 7549 +<5504> <5504> 7503 +<5506> <5506> 5252 +<5507> <5507> 6980 +<550e> <550e> 4617 +<5510> <5510> 4239 +<551c> <551c> 4689 +<552f> <552f> 6313 +<5531> <5531> 7095 +<5535> <5535> 5821 +<553e> <553e> 7382 +<5544> <5544> 7396 +<5546> <5546> 5335 +<554f> <554f> 4839 +<5553> <5553> 3706 +<5556> <5556> 4217 +<555e> <555e> 5778 +<5563> <5563> 7654 +<557c> <557c> 6761 +<5580> <5580> 3579 +<5584> <5584> 5421 +<5586> <5586> 7169 +<5587> <5587> 4374 +<5589> <5589> 7971 +<558a> <558a> 7655 +<5598> <5598> 7150 +<5599> <5599> 7995 +<559a> <559a> 7883 +<559c> <559c> 8037 +<559d> <559d> 3501 +<55a7> <55a7> 7990 +<55a9> <55a9> 6314 +<55aa> <55aa> 5336 +<55ab> <55ab> 4132 +<55ac> <55ac> 3871 +<55ae> <55ae> 4195 +<55c5> <55c5> 7972 +<55c7> <55c7> 5365 +<55d4> <55d4> 6981 +<55da> <55da> 6056 +<55dc> <55dc> 4066 +<55df> <55df> 7045 +<55e3> <55e3> 5253 +<55e4> <55e4> 7338 +<55fd> <55fd> 5569 +<55fe> <55fe> 6868 +<5606> <5606> 7409 +<5609> <5609> 3444 +<5614> <5614> 3904 +<5617> <5617> 5337 +<562f> <562f> 5501 +<5632> <5632> 6786 +<5634> <5634> 7318 +<5636> <5636> 5694 +<5653> <5653> 7719 +<5668> <5668> 4067 +<566b> <566b> 8038 +<5674> <5674> 5154 +<5686> <5686> 7954 +<56a5> <56a5> 5956 +<56ac> <56ac> 5223 +<56ae> <56ae> 7712 +<56b4> <56b4> 5927 +<56bc> <56bc> 6511 +<56ca> <56ca> 4152 +<56cd> <56cd> 8039 +<56d1> <56d1> 7242 +<56da> <56da> 5570 +<56db> <56db> 5254 +<56de> <56de> 7929 +<56e0> <56e0> 6448 +<56f0> <56f0> 3774 +<56f9> <56f9> 4491 +<56fa> <56fa> 3733 +<5703> <5703> 7550 +<5704> <5704> 5902 +<5708> <5708> 3973 +<570b> <570b> 3947 +<570d> <570d> 6288 +<5712> <5712> 6259 +<5713> <5713> 6258 +<5716> <5716> 4272 +<5718> <5718> 4196 +<571f> <571f> 7451 +<5728> <5728> 6572 +<572d> <572d> 3995 +<5730> <5730> 6945 +<573b> <573b> 4068 +<5740> <5740> 6946 +<5742> <5742> 7491 +<5747> <5747> 4010 +<574a> <574a> 4943 +<574d> <574d> 4218 +endcidrange + +100 begincidrange +<574e> <574e> 3511 +<5750> <5750> 6855 +<5751> <5751> 3581 +<5761> <5761> 7474 +<5764> <5764> 3775 +<5766> <5766> 7410 +<576a> <576a> 7529 +<576e> <576e> 4252 +<5770> <5770> 3668 +<5775> <5775> 3905 +<577c> <577c> 7397 +<5782> <5782> 5571 +<5788> <5788> 4251 +<578b> <578b> 7774 +<5793> <5793> 7688 +<57a0> <57a0> 6373 +<57a2> <57a2> 3906 +<57a3> <57a3> 6260 +<57c3> <57c3> 5842 +<57c7> <57c7> 6178 +<57c8> <57c8> 6905 +<57cb> <57cb> 4708 +<57ce> <57ce> 5474 +<57df> <57df> 5948 +<57e0> <57e0> 5117 +<57f0> <57f0> 7115 +<57f4> <57f4> 5720 +<57f7> <57f7> 7032 +<57f9> <57f9> 4971 +<57fa> <57fa> 4069 +<57fc> <57fc> 4070 +<5800> <5800> 3959 +<5802> <5802> 4240 +<5805> <5805> 3637 +<5806> <5806> 7459 +<5808> <5808> 3537 +<5809> <5809> 6355 +<580a> <580a> 5793 +<581e> <581e> 7187 +<5821> <5821> 5059 +<5824> <5824> 6762 +<5827> <5827> 5957 +<582a> <582a> 3512 +<582f> <582f> 6142 +<5830> <5830> 5918 +<5831> <5831> 5060 +<5834> <5834> 6537 +<5835> <5835> 4273 +<583a> <583a> 3707 +<584a> <584a> 3857 +<584b> <584b> 6002 +<584f> <584f> 3564 +<5851> <5851> 5502 +<5854> <5854> 7424 +<5857> <5857> 4274 +<5858> <5858> 4241 +<585a> <585a> 7252 +<585e> <585e> 5362 +<5861> <5861> 6650 +<5862> <5862> 6057 +<5864> <5864> 7981 +<5875> <5875> 6982 +<5879> <5879> 7084 +<587c> <587c> 6651 +<587e> <587e> 5629 +<5883> <5883> 3669 +<5885> <5885> 5373 +<5889> <5889> 6179 +<5893> <5893> 4801 +<589c> <589c> 7265 +<589e> <589e> 6931 +<589f> <589f> 7720 +<58a8> <58a8> 4834 +<58a9> <58a9> 4319 +<58ae> <58ae> 7383 +<58b3> <58b3> 5155 +<58ba> <58ba> 6058 +<58bb> <58bb> 6538 +<58be> <58be> 3478 +<58c1> <58c1> 5022 +<58c5> <58c5> 6090 +<58c7> <58c7> 4197 +<58ce> <58ce> 7982 +<58d1> <58d1> 7630 +<58d3> <58d3> 5829 +<58d5> <58d5> 7803 +<58d8> <58d8> 4564 +<58d9> <58d9> 3842 +<58de> <58de> 3858 +<58df> <58df> 4536 +<58e4> <58e4> 5880 +<58eb> <58eb> 5255 +<58ec> <58ec> 6470 +<58ef> <58ef> 6539 +<58f9> <58f9> 6463 +<58fa> <58fa> 7804 +<58fb> <58fb> 5374 +<58fd> <58fd> 5572 +<590f> <590f> 7619 +<5914> <5914> 4071 +endcidrange + +100 begincidrange +<5915> <5915> 5403 +<5916> <5916> 6135 +<5919> <5919> 5630 +<591a> <591a> 4190 +<591c> <591c> 5865 +<5922> <5922> 4797 +<5927> <5927> 4253 +<5929> <5929> 7151 +<592a> <592a> 7433 +<592b> <592b> 5118 +<592d> <592d> 6143 +<592e> <592e> 5834 +<5931> <5931> 5758 +<5937> <5937> 6416 +<593e> <593e> 7761 +<5944> <5944> 5928 +<5947> <5947> 4072 +<5948> <5948> 4156 +<5949> <5949> 5094 +<594e> <594e> 3996 +<594f> <594f> 6869 +<5950> <5950> 7884 +<5951> <5951> 3708 +<5954> <5954> 5156 +<5955> <5955> 7730 +<5957> <5957> 7466 +<595a> <595a> 7689 +<5960> <5960> 6652 +<5962> <5962> 5256 +<5967> <5967> 6059 +<596a> <596a> 7418 +<596b> <596b> 6360 +<596c> <596c> 6540 +<596d> <596d> 5404 +<596e> <596e> 5157 +<5973> <5973> 4159 +<5974> <5974> 4170 +<5978> <5978> 3479 +<597d> <597d> 7805 +<5982> <5982> 5936 +<5983> <5983> 5186 +<5984> <5984> 4697 +<598a> <598a> 6471 +<5993> <5993> 4073 +<5996> <5996> 6144 +<5997> <5997> 4039 +<5999> <5999> 4802 +<59a5> <59a5> 7384 +<59a8> <59a8> 4944 +<59ac> <59ac> 7467 +<59b9> <59b9> 4709 +<59bb> <59bb> 7131 +<59be> <59be> 7188 +<59c3> <59c3> 6710 +<59c6> <59c6> 4767 +<59c9> <59c9> 6486 +<59cb> <59cb> 5695 +<59d0> <59d0> 6595 +<59d1> <59d1> 3734 +<59d3> <59d3> 5475 +<59d4> <59d4> 6289 +<59d9> <59d9> 6472 +<59da> <59da> 6145 +<59dc> <59dc> 3538 +<59dd> <59dd> 6864 +<59e6> <59e6> 3480 +<59e8> <59e8> 6417 +<59ea> <59ea> 7017 +<59ec> <59ec> 8040 +<59ee> <59ee> 7672 +<59f8> <59f8> 5958 +<59fb> <59fb> 6449 +<59ff> <59ff> 6487 +<5a01> <5a01> 6290 +<5a03> <5a03> 6132 +<5a11> <5a11> 5257 +<5a18> <5a18> 4153 +<5a1b> <5a1b> 6060 +<5a1c> <5a1c> 4134 +<5a1f> <5a1f> 5959 +<5a20> <5a20> 5739 +<5a25> <5a25> 5779 +<5a29> <5a29> 4672 +<5a36> <5a36> 7319 +<5a3c> <5a3c> 7096 +<5a41> <5a41> 4565 +<5a46> <5a46> 7475 +<5a49> <5a49> 6107 +<5a5a> <5a5a> 7844 +<5a62> <5a62> 5187 +<5a66> <5a66> 5119 +<5a92> <5a92> 4710 +<5a9a> <5a9a> 4852 +<5a9b> <5a9b> 6261 +<5aa4> <5aa4> 5696 +<5ac1> <5ac1> 3445 +<5ac2> <5ac2> 5573 +<5ac4> <5ac4> 6262 +<5ac9> <5ac9> 7018 +<5acc> <5acc> 7758 +endcidrange + +100 begincidrange +<5ae1> <5ae1> 6621 +<5ae6> <5ae6> 7673 +<5ae9> <5ae9> 4181 +<5b05> <5b05> 7865 +<5b09> <5b09> 8041 +<5b0b> <5b0b> 5422 +<5b0c> <5b0c> 3872 +<5b16> <5b16> 7535 +<5b2a> <5b2a> 5224 +<5b40> <5b40> 5338 +<5b43> <5b43> 5881 +<5b50> <5b50> 6488 +<5b51> <5b51> 7754 +<5b54> <5b54> 3790 +<5b55> <5b55> 6481 +<5b57> <5b57> 6489 +<5b58> <5b58> 6832 +<5b5a> <5b5a> 5120 +<5b5c> <5b5c> 6490 +<5b5d> <5b5d> 7955 +<5b5f> <5b5f> 4727 +<5b63> <5b63> 3709 +<5b64> <5b64> 3735 +<5b69> <5b69> 7690 +<5b6b> <5b6b> 5546 +<5b70> <5b70> 5631 +<5b71> <5b71> 6522 +<5b75> <5b75> 5121 +<5b78> <5b78> 7631 +<5b7a> <5b7a> 6315 +<5b7c> <5b7c> 5923 +<5b85> <5b85> 4266 +<5b87> <5b87> 6204 +<5b88> <5b88> 5574 +<5b89> <5b89> 5807 +<5b8b> <5b8b> 5553 +<5b8c> <5b8c> 6108 +<5b8f> <5b8f> 3864 +<5b93> <5b93> 5078 +<5b95> <5b95> 7427 +<5b96> <5b96> 7950 +<5b97> <5b97> 6838 +<5b98> <5b98> 3820 +<5b99> <5b99> 6870 +<5b9a> <5b9a> 6711 +<5b9b> <5b9b> 6109 +<5b9c> <5b9c> 6397 +<5ba2> <5ba2> 3580 +<5ba3> <5ba3> 5423 +<5ba4> <5ba4> 5759 +<5ba5> <5ba5> 6316 +<5ba6> <5ba6> 7885 +<5bac> <5bac> 5476 +<5bae> <5bae> 3963 +<5bb0> <5bb0> 6573 +<5bb3> <5bb3> 7691 +<5bb4> <5bb4> 5960 +<5bb5> <5bb5> 5503 +<5bb6> <5bb6> 3446 +<5bb8> <5bb8> 5740 +<5bb9> <5bb9> 6180 +<5bbf> <5bbf> 5632 +<5bc0> <5bc0> 7116 +<5bc2> <5bc2> 6622 +<5bc3> <5bc3> 6263 +<5bc4> <5bc4> 4074 +<5bc5> <5bc5> 6450 +<5bc6> <5bc6> 4883 +<5bc7> <5bc7> 3907 +<5bcc> <5bcc> 5122 +<5bd0> <5bd0> 4711 +<5bd2> <5bd2> 7635 +<5bd3> <5bd3> 6205 +<5bd4> <5bd4> 5721 +<5bd7> <5bd7> 4168 +<5bde> <5bde> 4664 +<5bdf> <5bdf> 7078 +<5be1> <5be1> 3803 +<5be2> <5be2> 7368 +<5be4> <5be4> 6061 +<5be5> <5be5> 6146 +<5be6> <5be6> 5760 +<5be7> <5be7> 4167 +<5be8> <5be8> 7117 +<5be9> <5be9> 5762 +<5beb> <5beb> 5258 +<5bec> <5bec> 3821 +<5bee> <5bee> 4553 +<5bef> <5bef> 6906 +<5bf5> <5bf5> 7253 +<5bf6> <5bf6> 5061 +<5bf8> <5bf8> 7247 +<5bfa> <5bfa> 5259 +<5c01> <5c01> 5095 +<5c04> <5c04> 5260 +<5c07> <5c07> 6541 +<5c08> <5c08> 6653 +<5c09> <5c09> 6291 +<5c0a> <5c0a> 6833 +<5c0b> <5c0b> 5763 +endcidrange + +100 begincidrange +<5c0d> <5c0d> 4254 +<5c0e> <5c0e> 4275 +<5c0f> <5c0f> 5504 +<5c11> <5c11> 5505 +<5c16> <5c16> 7178 +<5c19> <5c19> 5339 +<5c24> <5c24> 6206 +<5c28> <5c28> 4945 +<5c31> <5c31> 7320 +<5c38> <5c38> 5697 +<5c39> <5c39> 6361 +<5c3a> <5c3a> 7136 +<5c3b> <5c3b> 3736 +<5c3c> <5c3c> 4186 +<5c3e> <5c3e> 4853 +<5c3f> <5c3f> 4180 +<5c40> <5c40> 3948 +<5c45> <5c45> 3587 +<5c46> <5c46> 3710 +<5c48> <5c48> 3960 +<5c4b> <5c4b> 6078 +<5c4d> <5c4d> 5699 +<5c4e> <5c4e> 5698 +<5c51> <5c51> 5451 +<5c55> <5c55> 6654 +<5c5b> <5c5b> 5044 +<5c60> <5c60> 4276 +<5c62> <5c62> 4566 +<5c64> <5c64> 7335 +<5c65> <5c65> 4618 +<5c6c> <5c6c> 5538 +<5c6f> <5c6f> 4358 +<5c71> <5c71> 5305 +<5c79> <5c79> 8024 +<5c90> <5c90> 4075 +<5c91> <5c91> 6527 +<5ca1> <5ca1> 3539 +<5ca9> <5ca9> 5822 +<5cab> <5cab> 5575 +<5cac> <5cac> 3531 +<5cb1> <5cb1> 4255 +<5cb3> <5cb3> 5794 +<5cb5> <5cb5> 7806 +<5cb7> <5cb7> 4870 +<5cb8> <5cb8> 5808 +<5cba> <5cba> 4492 +<5cbe> <5cbe> 6693 +<5cc0> <5cc0> 5576 +<5cd9> <5cd9> 7339 +<5ce0> <5ce0> 5340 +<5ce8> <5ce8> 5780 +<5cef> <5cf0> 5096 +<5cf4> <5cf4> 7735 +<5cf6> <5cf6> 4277 +<5cfb> <5cfb> 6907 +<5cfd> <5cfd> 7762 +<5d07> <5d07> 5671 +<5d0d> <5d0d> 4421 +<5d0e> <5d0e> 4076 +<5d11> <5d11> 3776 +<5d14> <5d14> 7263 +<5d16> <5d16> 5843 +<5d17> <5d17> 3540 +<5d19> <5d19> 4596 +<5d27> <5d27> 5672 +<5d29> <5d29> 5175 +<5d4b> <5d4b> 4854 +<5d4c> <5d4c> 3513 +<5d50> <5d50> 4399 +<5d69> <5d69> 5673 +<5d6c> <5d6c> 6136 +<5d6f> <5d6f> 7046 +<5d87> <5d87> 3908 +<5d8b> <5d8b> 4278 +<5d9d> <5d9d> 4365 +<5da0> <5da0> 3873 +<5da2> <5da2> 6147 +<5daa> <5daa> 5931 +<5db8> <5db8> 6003 +<5dba> <5dba> 4493 +<5dbc> <5dbc> 5375 +<5dbd> <5dbd> 5795 +<5dcd> <5dcd> 6137 +<5dd2> <5dd2> 4673 +<5dd6> <5dd6> 5823 +<5ddd> <5ddd> 7152 +<5dde> <5dde> 6871 +<5de1> <5de1> 5640 +<5de2> <5de2> 5506 +<5de5> <5de5> 3791 +<5de6> <5de6> 6856 +<5de7> <5de7> 3874 +<5de8> <5de8> 3588 +<5deb> <5deb> 4813 +<5dee> <5dee> 7047 +<5df1> <5df1> 4077 +<5df2> <5df2> 6418 +<5df3> <5df3> 5261 +<5df4> <5df4> 7476 +<5df7> <5df7> 7674 +endcidrange + +100 begincidrange +<5dfd> <5dfd> 5547 +<5dfe> <5dfe> 3604 +<5e02> <5e02> 5700 +<5e03> <5e03> 7551 +<5e06> <5e06> 5010 +<5e0c> <5e0c> 8042 +<5e11> <5e11> 7428 +<5e16> <5e16> 7189 +<5e19> <5e19> 7019 +<5e1b> <5e1b> 4990 +<5e1d> <5e1d> 6763 +<5e25> <5e25> 5577 +<5e2b> <5e2b> 5262 +<5e2d> <5e2d> 5405 +<5e33> <5e33> 6542 +<5e36> <5e36> 4256 +<5e38> <5e38> 5341 +<5e3d> <5e3d> 4768 +<5e3f> <5e3f> 7973 +<5e40> <5e40> 6712 +<5e44> <5e44> 5796 +<5e45> <5e45> 7571 +<5e47> <5e47> 4946 +<5e4c> <5e4c> 7905 +<5e55> <5e55> 4665 +<5e5f> <5e5f> 7340 +<5e61> <5e61> 4996 +<5e62> <5e62> 4242 +<5e63> <5e63> 7536 +<5e72> <5e72> 3481 +<5e73> <5e73> 7530 +<5e74> <5e74> 4160 +<5e77> <5e77> 5045 +<5e78> <5e78> 7706 +<5e79> <5e79> 3482 +<5e7b> <5e7b> 7886 +<5e7c> <5e7d> 6317 +<5e7e> <5e7e> 4078 +<5e84> <5e84> 6543 +<5e87> <5e87> 5188 +<5e8a> <5e8a> 5342 +<5e8f> <5e8f> 5376 +<5e95> <5e95> 6596 +<5e97> <5e97> 6694 +<5e9a> <5e9a> 3670 +<5e9c> <5e9c> 5123 +<5ea0> <5ea0> 5343 +<5ea6> <5ea6> 4279 +<5ea7> <5ea7> 6857 +<5eab> <5eab> 3737 +<5ead> <5ead> 6713 +<5eb5> <5eb5> 5824 +<5eb6> <5eb6> 5377 +<5eb7> <5eb7> 3541 +<5eb8> <5eb8> 6181 +<5ebe> <5ebe> 6319 +<5ec2> <5ec2> 5344 +<5ec8> <5ec8> 7620 +<5ec9> <5ec9> 4483 +<5eca> <5eca> 4412 +<5ed0> <5ed0> 3909 +<5ed3> <5ed3> 3815 +<5ed6> <5ed6> 4554 +<5eda> <5eda> 6872 +<5edb> <5edb> 6655 +<5edf> <5edf> 4803 +<5ee0> <5ee0> 7097 +<5ee2> <5ee2> 7537 +<5ee3> <5ee3> 3843 +<5eec> <5eec> 4444 +<5ef3> <5ef3> 7197 +<5ef6> <5ef6> 5961 +<5ef7> <5ef7> 6714 +<5efa> <5efa> 3605 +<5efb> <5efb> 7930 +<5f01> <5f01> 5032 +<5f04> <5f04> 4537 +<5f0a> <5f0a> 7538 +<5f0f> <5f0f> 5722 +<5f11> <5f11> 5701 +<5f13> <5f13> 3964 +<5f14> <5f14> 6787 +<5f15> <5f15> 6451 +<5f17> <5f17> 5172 +<5f18> <5f18> 7854 +<5f1b> <5f1b> 6419 +<5f1f> <5f1f> 6764 +<5f26> <5f26> 7736 +<5f27> <5f27> 7807 +<5f29> <5f29> 4171 +<5f31> <5f31> 5872 +<5f35> <5f35> 6544 +<5f3a> <5f3a> 3542 +<5f3c> <5f3c> 7605 +<5f48> <5f48> 7411 +<5f4a> <5f4a> 3543 +<5f4c> <5f4c> 4855 +<5f4e> <5f4e> 4674 +<5f56> <5f56> 4198 +<5f57> <5f57> 7792 +endcidrange + +100 begincidrange +<5f59> <5f59> 7997 +<5f5b> <5f5b> 6420 +<5f62> <5f62> 7775 +<5f66> <5f66> 5919 +<5f67> <5f67> 6230 +<5f69> <5f69> 7118 +<5f6a> <5f6a> 7578 +<5f6b> <5f6b> 6788 +<5f6c> <5f6c> 5225 +<5f6d> <5f6d> 7513 +<5f70> <5f70> 7098 +<5f71> <5f71> 6004 +<5f77> <5f77> 4947 +<5f79> <5f79> 5949 +<5f7c> <5f7c> 7597 +<5f7f> <5f7f> 5173 +<5f80> <5f80> 6126 +<5f81> <5f81> 6715 +<5f85> <5f85> 4257 +<5f87> <5f87> 5641 +<5f8a> <5f8a> 7931 +<5f8b> <5f8b> 4600 +<5f8c> <5f8c> 7974 +<5f90> <5f90> 5378 +<5f91> <5f91> 3671 +<5f92> <5f92> 4280 +<5f97> <5f97> 4364 +<5f98> <5f98> 4972 +<5f99> <5f99> 5263 +<5f9e> <5f9e> 6839 +<5fa0> <5fa0> 4422 +<5fa1> <5fa1> 5903 +<5fa8> <5fa8> 7906 +<5fa9> <5fa9> 5079 +<5faa> <5faa> 5642 +<5fae> <5fae> 4856 +<5fb5> <5fb5> 7038 +<5fb7> <5fb7> 4267 +<5fb9> <5fb9> 7170 +<5fbd> <5fbd> 7998 +<5fc3> <5fc3> 5764 +<5fc5> <5fc5> 7606 +<5fcc> <5fcc> 4079 +<5fcd> <5fcd> 6452 +<5fd6> <5fd6> 7248 +<5fd7> <5fd7> 6947 +<5fd8> <5fd9> 4698 +<5fe0> <5fe0> 7307 +<5feb> <5feb> 7379 +<5ff5> <5ff5> 4163 +<5ffd> <5ffd> 7850 +<5fff> <5fff> 5158 +<600f> <600f> 5835 +<6012> <6012> 4172 +<6016> <6016> 7552 +<601c> <601c> 4494 +<601d> <601d> 5264 +<6020> <6020> 7434 +<6021> <6021> 6421 +<6025> <6025> 4053 +<6027> <6027> 5477 +<6028> <6028> 6264 +<602a> <602a> 3859 +<602f> <602f> 3625 +<6041> <6041> 6473 +<6042> <6042> 5643 +<6043> <6043> 5702 +<604d> <604d> 7907 +<6050> <6050> 3792 +<6052> <6052> 7675 +<6055> <6055> 5379 +<6059> <6059> 5882 +<605d> <605d> 3836 +<6062> <6062> 7932 +<6063> <6063> 6491 +<6064> <6064> 8010 +<6065> <6065> 7341 +<6068> <6068> 7636 +<6069> <6069> 6374 +<606a> <606a> 3468 +<606c> <606c> 4164 +<606d> <606d> 3793 +<606f> <606f> 5723 +<6070> <6070> 8031 +<6085> <6085> 5985 +<6089> <6089> 5761 +<608c> <608c> 6765 +<608d> <608d> 7637 +<6094> <6094> 7933 +<6096> <6096> 7504 +<609a> <609a> 5554 +<609b> <609b> 6656 +<609f> <609f> 6062 +<60a0> <60a0> 6320 +<60a3> <60a3> 7887 +<60a4> <60a4> 7254 +<60a7> <60a7> 4619 +<60b0> <60b0> 6840 +<60b2> <60b2> 5189 +<60b3> <60b3> 4268 +endcidrange + +100 begincidrange +<60b4> <60b4> 7312 +<60b6> <60b6> 4871 +<60b8> <60b8> 3711 +<60bc> <60bc> 4281 +<60bd> <60bd> 7132 +<60c5> <60c5> 6716 +<60c7> <60c7> 4320 +<60d1> <60d1> 7841 +<60da> <60da> 7851 +<60dc> <60dc> 5406 +<60df> <60df> 6321 +<60e0> <60e0> 7793 +<60e1> <60e1> 5797 +<60f0> <60f0> 7385 +<60f1> <60f1> 4178 +<60f3> <60f3> 5345 +<60f6> <60f6> 7908 +<60f9> <60f9> 5866 +<60fa> <60fa> 5478 +<60fb> <60fb> 7333 +<6101> <6101> 5578 +<6106> <6106> 3606 +<6108> <6109> 6322 +<610d> <610d> 4872 +<610e> <610e> 7517 +<610f> <610f> 6398 +<6115> <6115> 5798 +<611a> <611a> 6207 +<611b> <611b> 5844 +<611f> <611f> 3514 +<6127> <6127> 3860 +<6130> <6130> 7909 +<6134> <6134> 7099 +<6137> <6137> 3565 +<613c> <613c> 5741 +<613e> <613e> 3566 +<613f> <613f> 6265 +<6142> <6142> 6182 +<6144> <6144> 4601 +<6147> <6147> 6375 +<6148> <6148> 6492 +<614a> <614a> 3655 +<614b> <614b> 7435 +<614c> <614c> 7910 +<6153> <6153> 7579 +<6155> <6155> 4769 +<6158> <6159> 7085 +<615d> <615d> 7471 +<615f> <615f> 7453 +<6162> <6162> 4675 +<6163> <6163> 3822 +<6164> <6164> 3469 +<6167> <6167> 7794 +<6168> <6168> 3567 +<616b> <616b> 6841 +<616e> <616e> 4445 +<6170> <6170> 6292 +<6176> <6176> 3672 +<6177> <6177> 3544 +<617d> <617d> 7137 +<617e> <617e> 6168 +<6181> <6181> 7255 +<6182> <6182> 6208 +<618a> <618a> 5190 +<618e> <618e> 6932 +<6190> <6190> 4465 +<6191> <6191> 5237 +<6194> <6194> 7217 +<6198> <6198> 8044 +<6199> <6199> 8043 +<619a> <619a> 7412 +<61a4> <61a4> 5159 +<61a7> <61a7> 4336 +<61a9> <61a9> 3628 +<61ab> <61ab> 4873 +<61ac> <61ac> 3673 +<61ae> <61ae> 4814 +<61b2> <61b2> 7723 +<61b6> <61b6> 5913 +<61ba> <61ba> 4219 +<61be> <61be> 3515 +<61c3> <61c3> 4026 +<61c7> <61c7> 3483 +<61c8> <61c8> 7692 +<61c9> <61c9> 6391 +<61ca> <61ca> 6063 +<61cb> <61cb> 4815 +<61e6> <61e6> 4135 +<61f2> <61f2> 7039 +<61f6> <61f6> 4375 +<61f7> <61f7> 7934 +<61f8> <61f8> 7737 +<61fa> <61fa> 7087 +<61fc> <61fc> 3910 +<61ff> <61ff> 6399 +<6200> <6200> 4466 +<6207> <6207> 4243 +<6208> <6208> 3804 +<620a> <620a> 4816 +<620c> <620c> 5667 +endcidrange + +100 begincidrange +<620d> <620d> 5579 +<620e> <620e> 6369 +<6210> <6210> 5479 +<6211> <6211> 5781 +<6212> <6212> 3712 +<6216> <6216> 7842 +<621a> <621a> 7138 +<621f> <621f> 4019 +<6221> <6221> 3516 +<622a> <622a> 6685 +<622e> <622e> 4592 +<6230> <6230> 6657 +<6231> <6231> 8045 +<6234> <6234> 4258 +<6236> <6236> 7808 +<623e> <623e> 4446 +<623f> <623f> 4948 +<6240> <6240> 5507 +<6241> <6241> 7520 +<6247> <6247> 5424 +<6248> <6248> 7809 +<6249> <6249> 5191 +<624b> <624b> 5580 +<624d> <624d> 6574 +<6253> <6253> 7386 +<6258> <6258> 7398 +<626e> <626e> 5160 +<6271> <6271> 4054 +<6276> <6276> 5124 +<6279> <6279> 5192 +<627c> <627c> 5852 +<627f> <627f> 5687 +<6280> <6280> 4080 +<6284> <6284> 7218 +<6289> <6289> 3648 +<628a> <628a> 7477 +<6291> <6291> 5914 +<6292> <6292> 5380 +<6295> <6295> 7468 +<6297> <6297> 7676 +<6298> <6298> 6686 +<629b> <629b> 7553 +<62ab> <62ab> 7598 +<62b1> <62b1> 7554 +<62b5> <62b5> 6597 +<62b9> <62b9> 4690 +<62bc> <62bc> 5830 +<62bd> <62bd> 7266 +<62c2> <62c2> 5174 +<62c7> <62c7> 4817 +<62c8> <62c8> 4165 +<62c9> <62c9> 4409 +<62cc> <62cc> 4909 +<62cd> <62cd> 4888 +<62cf> <62cf> 4136 +<62d0> <62d0> 3861 +<62d2> <62d2> 3589 +<62d3> <62d3> 7139 +<62d4> <62d4> 4931 +<62d6> <62d6> 7387 +<62d7> <62d7> 6148 +<62d8> <62d8> 3911 +<62d9> <62d9> 6835 +<62db> <62db> 7219 +<62dc> <62dc> 4973 +<62ec> <62ec> 3837 +<62ed> <62ed> 5724 +<62ee> <62ee> 4129 +<62ef> <62ef> 6934 +<62f1> <62f1> 3794 +<62f3> <62f3> 3974 +<62f7> <62f7> 3738 +<62fe> <62fe> 5678 +<62ff> <62ff> 4137 +<6301> <6301> 6948 +<6307> <6307> 6949 +<6309> <6309> 5809 +<6311> <6311> 4282 +<632b> <632b> 6858 +<632f> <632f> 6983 +<633a> <633a> 6717 +<633b> <633b> 5963 +<633d> <633d> 4676 +<633e> <633e> 7763 +<6349> <6349> 7055 +<634c> <634c> 7501 +<634f> <634f> 4143 +<6350> <6350> 5962 +<6355> <6355> 7555 +<6367> <6367> 5098 +<6368> <6368> 5265 +<636e> <636e> 3590 +<6372> <6372> 3975 +<6377> <6377> 7190 +<637a> <637a> 4144 +<637b> <637b> 4166 +<637f> <637f> 5381 +<6383> <6383> 5508 +<6388> <6388> 5581 +<6389> <6389> 4283 +endcidrange + +100 begincidrange +<638c> <638c> 6545 +<6392> <6392> 4974 +<6396> <6396> 5853 +<6398> <6398> 3961 +<639b> <639b> 3853 +<63a0> <63a0> 4425 +<63a1> <63a1> 7119 +<63a2> <63a2> 7420 +<63a5> <63a5> 6701 +<63a7> <63a7> 3795 +<63a8> <63a8> 7267 +<63a9> <63a9> 5929 +<63aa> <63aa> 6789 +<63c0> <63c0> 3484 +<63c4> <63c4> 6324 +<63c6> <63c6> 3997 +<63cf> <63cf> 4804 +<63d0> <63d0> 6766 +<63d6> <63d6> 6387 +<63da> <63da> 5883 +<63db> <63db> 7888 +<63e1> <63e1> 5799 +<63ed> <63ed> 3629 +<63ee> <63ee> 7999 +<63f4> <63f4> 6266 +<63f6> <63f6> 5867 +<63f7> <63f7> 5327 +<640d> <640d> 5548 +<640f> <640f> 4889 +<6414> <6414> 5509 +<6416> <6416> 6149 +<6417> <6417> 4284 +<641c> <641c> 5582 +<6422> <6422> 6984 +<642c> <642c> 4910 +<642d> <642d> 7425 +<643a> <643a> 8006 +<643e> <643e> 7056 +<6458> <6458> 6623 +<6460> <6460> 7256 +<6469> <6469> 4656 +<646f> <646f> 6950 +<6478> <6479> 4770 +<647a> <647a> 6702 +<6488> <6488> 4512 +<6491> <6491> 7447 +<6492> <6492> 5316 +<6493> <6493> 6150 +<649a> <649a> 4161 +<649e> <649e> 4244 +<64a4> <64a4> 7171 +<64a5> <64a5> 4932 +<64ab> <64ab> 4818 +<64ad> <64ad> 7478 +<64ae> <64ae> 7261 +<64b0> <64b0> 7062 +<64b2> <64b2> 4890 +<64bb> <64bb> 4212 +<64c1> <64c1> 6091 +<64c4> <64c4> 4513 +<64c5> <64c5> 7153 +<64c7> <64c7> 7445 +<64ca> <64ca> 3630 +<64cd> <64cd> 6790 +<64ce> <64ce> 3674 +<64d2> <64d2> 4040 +<64d4> <64d4> 4220 +<64d8> <64d8> 5023 +<64da> <64da> 3591 +<64e1> <64e1> 4259 +<64e2> <64e2> 7399 +<64e5> <64e5> 4400 +<64e6> <64e6> 7079 +<64e7> <64e7> 3592 +<64ec> <64ec> 6400 +<64f2> <64f2> 7140 +<64f4> <64f4> 7877 +<64fa> <64fa> 7479 +<64fe> <64fe> 6151 +<6500> <6500> 4911 +<6504> <6504> 7448 +<6518> <6518> 5884 +<651d> <651d> 5471 +<6523> <6523> 4467 +<652a> <652a> 3875 +<652b> <652b> 7878 +<652c> <652c> 4401 +<652f> <652f> 6951 +<6536> <6536> 5583 +<6537> <6537> 3739 +<6538> <6538> 6325 +<6539> <6539> 3568 +<653b> <653b> 3796 +<653e> <653e> 4949 +<653f> <653f> 6718 +<6545> <6545> 3740 +<6548> <6548> 7956 +<654d> <654d> 5382 +<654e> <654e> 3876 +<654f> <654f> 4874 +endcidrange + +100 begincidrange +<6551> <6551> 3912 +<6556> <6556> 6064 +<6557> <6557> 7505 +<655e> <655e> 7100 +<6562> <6562> 3517 +<6563> <6563> 5306 +<6566> <6566> 4321 +<656c> <656c> 3675 +<656d> <656d> 5885 +<6572> <6572> 3741 +<6574> <6574> 6719 +<6575> <6575> 6624 +<6577> <6577> 5125 +<6578> <6578> 5584 +<657e> <657e> 5425 +<6582> <6582> 4484 +<6583> <6583> 7539 +<6585> <6585> 7957 +<6587> <6587> 4840 +<658c> <658c> 5226 +<6590> <6590> 5193 +<6591> <6591> 4912 +<6597> <6597> 4349 +<6599> <6599> 4555 +<659b> <659b> 3768 +<659c> <659c> 5266 +<659f> <659f> 7030 +<65a1> <65a1> 5817 +<65a4> <65a4> 4027 +<65a5> <65a5> 7141 +<65a7> <65a7> 5126 +<65ab> <65ab> 6512 +<65ac> <65ac> 7088 +<65af> <65af> 5267 +<65b0> <65b0> 5742 +<65b7> <65b7> 4199 +<65b9> <65b9> 4950 +<65bc> <65bc> 5904 +<65bd> <65bd> 5703 +<65c1> <65c1> 4951 +<65c5> <65c5> 4447 +<65cb> <65cb> 5426 +<65cc> <65cc> 6720 +<65cf> <65cf> 6828 +<65d2> <65d2> 4578 +<65d7> <65d7> 4081 +<65e0> <65e0> 4819 +<65e3> <65e3> 4082 +<65e5> <65e5> 6464 +<65e6> <65e6> 4200 +<65e8> <65e8> 6952 +<65e9> <65e9> 6791 +<65ec> <65ec> 5644 +<65ed> <65ed> 6231 +<65f1> <65f1> 7638 +<65f4> <65f4> 6209 +<65fa> <65fa> 6127 +<65fb> <65fc> 4875 +<65fd> <65fd> 4322 +<65ff> <65ff> 6065 +<6606> <6606> 3777 +<6607> <6607> 5688 +<6609> <6609> 4952 +<660a> <660a> 7810 +<660c> <660c> 7101 +<660e> <660e> 4751 +<660f> <660f> 7845 +<6610> <6610> 5161 +<6611> <6611> 4041 +<6613> <6613> 5950 +<6614> <6614> 5407 +<6615> <6615> 8019 +<661e> <661e> 5046 +<661f> <661f> 5480 +<6620> <6620> 6005 +<6625> <6625> 7300 +<6627> <6627> 4712 +<6628> <6628> 6513 +<662d> <662d> 5510 +<662f> <662f> 5704 +<6630> <6630> 7621 +<6631> <6631> 6232 +<6634> <6634> 4805 +<6636> <6636> 7102 +<663a> <663a> 5047 +<663b> <663b> 5836 +<6641> <6641> 6792 +<6642> <6642> 5705 +<6643> <6644> 7911 +<6649> <6649> 6985 +<664b> <664b> 6986 +<664f> <664f> 5810 +<6659> <6659> 6908 +<665b> <665b> 7738 +<665d> <665d> 6873 +<665e> <665e> 8046 +<665f> <665f> 5481 +<6664> <6664> 6066 +<6665> <6665> 7890 +<6666> <6666> 7935 +endcidrange + +100 begincidrange +<6667> <6667> 7811 +<6668> <6668> 5743 +<6669> <6669> 4677 +<666b> <666b> 7400 +<666e> <666e> 5062 +<666f> <666f> 3676 +<6673> <6673> 5408 +<6674> <6674> 7198 +<6676> <6676> 6721 +<6677> <6677> 3990 +<6678> <6678> 6722 +<667a> <667a> 6953 +<6684> <6684> 7991 +<6687> <6687> 3447 +<6688> <6688> 7988 +<6689> <6689> 8000 +<668e> <668e> 6006 +<6690> <6690> 6293 +<6691> <6691> 5383 +<6696> <6696> 4140 +<6697> <6697> 5825 +<6698> <6698> 5886 +<669d> <669d> 4752 +<66a0> <66a0> 3742 +<66a2> <66a2> 7103 +<66ab> <66ab> 6528 +<66ae> <66ae> 4772 +<66b2> <66b2> 6546 +<66b3> <66b3> 7795 +<66b4> <66b4> 7572 +<66b9> <66b9> 5464 +<66bb> <66bb> 3677 +<66be> <66be> 4323 +<66c4> <66c4> 5999 +<66c6> <66c6> 4459 +<66c7> <66c7> 4221 +<66c9> <66c9> 7958 +<66d6> <66d6> 5845 +<66d9> <66d9> 5384 +<66dc> <66dc> 6152 +<66dd> <66dd> 7573 +<66e0> <66e0> 3844 +<66e6> <66e6> 8047 +<66f0> <66f0> 6125 +<66f2> <66f2> 3769 +<66f3> <66f3> 6033 +<66f4> <66f4> 3678 +<66f7> <66f7> 3502 +<66f8> <66f8> 5385 +<66f9> <66f9> 6794 +<66fa> <66fa> 6793 +<66fc> <66fc> 4678 +<66fe> <66fe> 6933 +<66ff> <66ff> 7206 +<6700> <6700> 7264 +<6703> <6703> 7936 +<6708> <6708> 6281 +<6709> <6709> 6326 +<670b> <670b> 5176 +<670d> <670d> 5080 +<6714> <6714> 5302 +<6715> <6715> 7031 +<6717> <6717> 4413 +<671b> <671b> 4700 +<671d> <671d> 6795 +<671e> <671f> 4083 +<6726> <6726> 4798 +<6727> <6727> 4538 +<6728> <6728> 4788 +<672a> <672a> 4857 +<672b> <672b> 4691 +<672c> <672c> 5091 +<672d> <672d> 7080 +<672e> <672e> 7304 +<6731> <6731> 6874 +<6734> <6734> 4891 +<6736> <6736> 7388 +<673a> <673a> 3984 +<673d> <673d> 7975 +<6746> <6746> 3485 +<6749> <6749> 5321 +<674e> <674e> 4620 +<674f> <674f> 7707 +<6750> <6750> 6575 +<6751> <6751> 7249 +<6753> <6753> 7580 +<6756> <6756> 6547 +<675c> <675c> 4350 +<675e> <675e> 4085 +<675f> <675f> 5539 +<676d> <676d> 7677 +<676f> <676f> 4975 +<6770> <6770> 3615 +<6771> <6771> 4337 +<6773> <6773> 4806 +<6775> <6775> 6598 +<6777> <6777> 7480 +<677b> <677b> 4183 +<677e> <677e> 5555 +<677f> <677f> 7492 +endcidrange + +100 begincidrange +<6787> <6787> 5194 +<6789> <6789> 6128 +<678b> <678b> 4953 +<678f> <678f> 4146 +<6790> <6790> 5409 +<6793> <6793> 4351 +<6795> <6795> 7369 +<6797> <6797> 4647 +<679a> <679a> 4713 +<679c> <679c> 3805 +<679d> <679d> 6954 +<67af> <67af> 3743 +<67b0> <67b0> 7531 +<67b3> <67b3> 6955 +<67b6> <67b7> 3448 +<67b8> <67b8> 3913 +<67be> <67be> 5706 +<67c4> <67c4> 5048 +<67cf> <67cf> 4991 +<67d0> <67d0> 4773 +<67d1> <67d1> 3518 +<67d2> <67d2> 7365 +<67d3> <67d3> 5990 +<67d4> <67d4> 6327 +<67da> <67da> 6328 +<67dd> <67dd> 7401 +<67e9> <67e9> 3914 +<67ec> <67ec> 3486 +<67ef> <67ef> 3450 +<67f0> <67f0> 4157 +<67f1> <67f1> 6875 +<67f3> <67f3> 4579 +<67f4> <67f4> 5707 +<67f5> <67f5> 7127 +<67f6> <67f6> 5268 +<67fb> <67fb> 5269 +<67fe> <67fe> 6723 +<6812> <6812> 5645 +<6813> <6813> 6658 +<6816> <6816> 5386 +<6817> <6817> 4602 +<6821> <6821> 3877 +<6822> <6822> 4992 +<682a> <682a> 6876 +<682f> <682f> 6233 +<6838> <6838> 7704 +<6839> <6839> 4028 +<683c> <683c> 3631 +<683d> <683d> 6576 +<6840> <6840> 3616 +<6841> <6841> 7678 +<6842> <6842> 3713 +<6843> <6843> 4285 +<6848> <6848> 5811 +<684e> <684e> 7020 +<6850> <6850> 4338 +<6851> <6851> 5346 +<6853> <6853> 7891 +<6854> <6854> 4130 +<686d> <686d> 6987 +<6876> <6876> 7454 +<687f> <687f> 3487 +<6881> <6881> 4431 +<6885> <6885> 4714 +<688f> <688f> 3770 +<6893> <6893> 6577 +<6894> <6894> 7342 +<6897> <6897> 3679 +<689d> <689d> 6796 +<689f> <689f> 7959 +<68a1> <68a1> 6110 +<68a2> <68a2> 7220 +<68a7> <68a7> 6067 +<68a8> <68a8> 4621 +<68ad> <68ad> 5270 +<68af> <68af> 6767 +<68b0> <68b0> 3714 +<68b1> <68b1> 3778 +<68b3> <68b3> 5511 +<68b5> <68b5> 5011 +<68b6> <68b6> 4858 +<68c4> <68c4> 4087 +<68c5> <68c5> 5049 +<68c9> <68c9> 4738 +<68cb> <68cb> 4086 +<68cd> <68cd> 3779 +<68d2> <68d2> 5099 +<68d5> <68d5> 6842 +<68d7> <68d7> 6797 +<68d8> <68d8> 4020 +<68da> <68da> 5177 +<68df> <68df> 4339 +<68e0> <68e0> 4245 +<68e7> <68e7> 6523 +<68e8> <68e8> 3715 +<68ee> <68ee> 5322 +<68f2> <68f2> 5387 +<68f9> <68f9> 4286 +<68fa> <68fa> 3823 +<6900> <6900> 6111 +endcidrange + +100 begincidrange +<6905> <6905> 6401 +<690d> <690d> 5725 +<690e> <690e> 7268 +<6912> <6912> 7221 +<6927> <6927> 4753 +<6930> <6930> 5868 +<693d> <693d> 5964 +<693f> <693f> 7301 +<694a> <694a> 5887 +<6953> <6953> 7592 +<6954> <6954> 5452 +<6955> <6955> 7389 +<6957> <6957> 3607 +<6959> <6959> 4820 +<695a> <695a> 7222 +<695e> <695e> 4608 +<6960> <6960> 4147 +<6961> <6962> 6329 +<6963> <6963> 4859 +<6968> <6968> 6724 +<696b> <696b> 6928 +<696d> <696d> 5932 +<696e> <696e> 6599 +<696f> <696f> 5646 +<6975> <6975> 4021 +<6977> <6977> 7693 +<6978> <6978> 7269 +<6979> <6979> 6007 +<6995> <6995> 6183 +<699b> <699b> 6988 +<699c> <699c> 4954 +<69a5> <69a5> 7913 +<69a7> <69a7> 5195 +<69ae> <69ae> 6008 +<69b4> <69b4> 4580 +<69bb> <69bb> 7426 +<69c1> <69c1> 3744 +<69c3> <69c3> 4913 +<69cb> <69cb> 3915 +<69cc> <69cc> 7460 +<69cd> <69cd> 7104 +<69d0> <69d0> 3862 +<69e8> <69e8> 3816 +<69ea> <69ea> 3569 +<69fb> <69fb> 3998 +<69fd> <69fd> 6798 +<69ff> <69ff> 4029 +<6a02> <6a02> 5800 +<6a0a> <6a0a> 4997 +<6a11> <6a11> 4432 +<6a13> <6a13> 4567 +<6a17> <6a17> 6600 +<6a19> <6a19> 7581 +<6a1e> <6a1e> 7270 +<6a1f> <6a1f> 6548 +<6a21> <6a21> 4774 +<6a23> <6a23> 5888 +<6a35> <6a35> 7223 +<6a38> <6a38> 4892 +<6a39> <6a39> 5585 +<6a3a> <6a3a> 7866 +<6a3d> <6a3d> 6909 +<6a44> <6a44> 3519 +<6a48> <6a48> 6153 +<6a4b> <6a4b> 3878 +<6a52> <6a52> 6239 +<6a53> <6a53> 5647 +<6a58> <6a58> 4015 +<6a59> <6a59> 4366 +<6a5f> <6a5f> 4088 +<6a61> <6a61> 5347 +<6a6b> <6a6b> 7951 +<6a80> <6a80> 4201 +<6a84> <6a84> 3632 +<6a89> <6a89> 6725 +<6a8d> <6a8d> 5915 +<6a8e> <6a8e> 4042 +<6a97> <6a97> 5024 +<6a9c> <6a9c> 7937 +<6aa2> <6aa2> 3620 +<6aa3> <6aa3> 6549 +<6ab3> <6ab3> 5227 +<6abb> <6abb> 7656 +<6ac2> <6ac2> 4287 +<6ac3> <6ac3> 3985 +<6ad3> <6ad3> 4514 +<6ada> <6ada> 4448 +<6adb> <6adb> 6927 +<6af6> <6af6> 7724 +<6afb> <6afb> 5858 +<6b04> <6b04> 4391 +<6b0a> <6b0a> 3976 +<6b0c> <6b0c> 6550 +<6b12> <6b12> 4392 +<6b16> <6b16> 4402 +<6b20> <6b20> 8027 +<6b21> <6b21> 7048 +<6b23> <6b23> 8020 +<6b32> <6b32> 6169 +<6b3a> <6b3a> 4089 +endcidrange + +100 begincidrange +<6b3d> <6b3d> 8028 +<6b3e> <6b3e> 3824 +<6b46> <6b46> 8029 +<6b47> <6b47> 7727 +<6b4c> <6b4c> 3451 +<6b4e> <6b4e> 7413 +<6b50> <6b50> 3916 +<6b5f> <6b5f> 5937 +<6b61> <6b61> 7889 +<6b62> <6b62> 6956 +<6b63> <6b63> 6726 +<6b64> <6b64> 7049 +<6b65> <6b65> 5063 +<6b66> <6b66> 4821 +<6b6a> <6b6a> 6133 +<6b72> <6b72> 5494 +<6b77> <6b77> 4460 +<6b78> <6b78> 3991 +<6b7b> <6b7b> 5271 +<6b7f> <6b7f> 4795 +<6b83> <6b83> 5837 +<6b84> <6b84> 6989 +<6b86> <6b86> 7436 +<6b89> <6b89> 5648 +<6b8a> <6b8a> 5586 +<6b96> <6b96> 5726 +<6b98> <6b98> 6524 +<6b9e> <6b9e> 6240 +<6bae> <6bae> 4485 +<6baf> <6baf> 5228 +<6bb2> <6bb2> 5465 +<6bb5> <6bb5> 4202 +<6bb7> <6bb7> 6376 +<6bba> <6bba> 5317 +<6bbc> <6bbc> 3470 +<6bbf> <6bbf> 6659 +<6bc1> <6bc1> 7996 +<6bc5> <6bc5> 6402 +<6bc6> <6bc6> 3917 +<6bcb> <6bcb> 4822 +<6bcd> <6bcd> 4775 +<6bcf> <6bcf> 4715 +<6bd2> <6bd2> 4309 +<6bd3> <6bd3> 6356 +<6bd4> <6bd4> 5196 +<6bd6> <6bd8> 5197 +<6bdb> <6bdb> 4776 +<6beb> <6beb> 7812 +<6bec> <6bec> 3918 +<6c08> <6c08> 6660 +<6c0f> <6c0f> 5774 +<6c11> <6c11> 4877 +<6c13> <6c13> 4728 +<6c23> <6c23> 4090 +<6c34> <6c34> 5587 +<6c37> <6c37> 5238 +<6c38> <6c38> 6009 +<6c3e> <6c3e> 5012 +<6c40> <6c40> 6727 +<6c41> <6c41> 6929 +<6c42> <6c42> 3919 +<6c4e> <6c4e> 5013 +<6c50> <6c50> 5410 +<6c55> <6c55> 5307 +<6c57> <6c57> 7639 +<6c5a> <6c5a> 6068 +<6c5d> <6c5d> 5938 +<6c5e> <6c5e> 7855 +<6c5f> <6c5f> 3545 +<6c60> <6c60> 6957 +<6c68> <6c68> 3784 +<6c6a> <6c6a> 6129 +<6c6d> <6c6d> 6034 +<6c70> <6c70> 7437 +<6c72> <6c72> 4055 +<6c76> <6c76> 4841 +<6c7a> <6c7a> 3649 +<6c7d> <6c7d> 4091 +<6c7e> <6c7e> 5162 +<6c81> <6c81> 5765 +<6c82> <6c82> 4092 +<6c83> <6c83> 6079 +<6c85> <6c85> 6267 +<6c86> <6c86> 7679 +<6c87> <6c87> 5965 +<6c88> <6c88> 7370 +<6c8c> <6c8c> 4324 +<6c90> <6c90> 4789 +<6c92> <6c92> 4796 +<6c93> <6c93> 4234 +<6c94> <6c94> 4739 +<6c95> <6c95> 4849 +<6c96> <6c96> 7308 +<6c99> <6c99> 5272 +<6c9a> <6c9a> 6958 +<6c9b> <6c9b> 7506 +<6cab> <6cab> 4692 +<6cae> <6cae> 6601 +<6cb3> <6cb3> 7622 +<6cb8> <6cb8> 5200 +endcidrange + +100 begincidrange +<6cb9> <6cb9> 6331 +<6cbb> <6cbb> 7343 +<6cbc> <6cbc> 5512 +<6cbd> <6cbd> 3745 +<6cbe> <6cbe> 7179 +<6cbf> <6cbf> 5966 +<6cc1> <6cc1> 7914 +<6cc2> <6cc2> 7776 +<6cc4> <6cc4> 5453 +<6cc9> <6cc9> 7154 +<6cca> <6cca> 4893 +<6ccc> <6ccc> 7607 +<6cd3> <6cd3> 7856 +<6cd5> <6cd5> 5018 +<6cd7> <6cd7> 5273 +<6cdb> <6cdb> 5014 +<6ce1> <6ce1> 7556 +<6ce2> <6ce2> 7481 +<6ce3> <6ce3> 6388 +<6ce5> <6ce5> 4187 +<6ce8> <6ce8> 6877 +<6ceb> <6ceb> 7739 +<6cee> <6cee> 4914 +<6cef> <6cef> 4878 +<6cf0> <6cf0> 7438 +<6cf3> <6cf3> 6010 +<6d0b> <6d0b> 5889 +<6d0c> <6d0c> 4480 +<6d11> <6d11> 5064 +<6d17> <6d17> 5495 +<6d19> <6d19> 5588 +<6d1b> <6d1b> 4382 +<6d1e> <6d1e> 4340 +<6d25> <6d25> 6990 +<6d27> <6d27> 6332 +<6d29> <6d29> 5454 +<6d2a> <6d2a> 7857 +<6d32> <6d32> 6878 +<6d35> <6d35> 5649 +<6d36> <6d36> 8016 +<6d38> <6d38> 3845 +<6d39> <6d39> 6268 +<6d3b> <6d3b> 7899 +<6d3d> <6d3d> 8032 +<6d3e> <6d3e> 7482 +<6d41> <6d41> 4581 +<6d59> <6d59> 6687 +<6d5a> <6d5a> 6910 +<6d5c> <6d5c> 5229 +<6d63> <6d63> 6112 +<6d66> <6d66> 7557 +<6d69> <6d69> 7813 +<6d6a> <6d6a> 4414 +<6d6c> <6d6c> 4622 +<6d6e> <6d6e> 5127 +<6d74> <6d74> 6170 +<6d77> <6d77> 7694 +<6d78> <6d78> 7371 +<6d79> <6d79> 7764 +<6d7f> <6d7f> 7507 +<6d85> <6d85> 5986 +<6d87> <6d87> 3680 +<6d88> <6d88> 5513 +<6d89> <6d89> 5472 +<6d8c> <6d8c> 6184 +<6d8d> <6d8d> 7960 +<6d8e> <6d8e> 5967 +<6d91> <6d91> 5540 +<6d93> <6d93> 5968 +<6d95> <6d95> 7207 +<6daf> <6daf> 5846 +<6db2> <6db2> 5854 +<6db5> <6db5> 7657 +<6dc0> <6dc0> 6728 +<6dc3> <6dc3> 3977 +<6dc4> <6dc4> 7344 +<6dc5> <6dc5> 5411 +<6dc6> <6dc6> 7961 +<6dc7> <6dc7> 4093 +<6dcb> <6dcb> 4648 +<6dcf> <6dcf> 7814 +<6dd1> <6dd1> 5633 +<6dd8> <6dd8> 4288 +<6dd9> <6dd9> 6843 +<6dda> <6dda> 4568 +<6dde> <6dde> 5556 +<6de1> <6de1> 4222 +<6de8> <6de8> 6729 +<6dea> <6dea> 4597 +<6deb> <6deb> 6382 +<6dee> <6dee> 7938 +<6df1> <6df1> 5766 +<6df3> <6df3> 5650 +<6df5> <6df5> 5969 +<6df7> <6df7> 7846 +<6df8> <6df8> 7199 +<6df9> <6df9> 5930 +<6dfa> <6dfa> 7155 +<6dfb> <6dfb> 7180 +<6e17> <6e17> 5323 +endcidrange + +100 begincidrange +<6e19> <6e19> 7892 +<6e1a> <6e1a> 6602 +<6e1b> <6e1b> 3520 +<6e1f> <6e1f> 6730 +<6e20> <6e20> 3593 +<6e21> <6e21> 4289 +<6e23> <6e23> 5274 +<6e24> <6e24> 4933 +<6e25> <6e25> 5801 +<6e26> <6e26> 6099 +<6e2b> <6e2b> 5455 +<6e2c> <6e2c> 7334 +<6e2d> <6e2d> 6294 +<6e2f> <6e2f> 7680 +<6e32> <6e32> 5427 +<6e34> <6e34> 3503 +<6e36> <6e36> 6011 +<6e38> <6e38> 6333 +<6e3a> <6e3a> 4807 +<6e3c> <6e3c> 4860 +<6e3d> <6e3d> 6578 +<6e3e> <6e3e> 7847 +<6e43> <6e43> 4976 +<6e44> <6e44> 4861 +<6e4a> <6e4a> 6879 +<6e4d> <6e4d> 4203 +<6e56> <6e56> 7815 +<6e58> <6e58> 5348 +<6e5b> <6e5b> 4223 +<6e5c> <6e5c> 5727 +<6e5e> <6e5e> 6731 +<6e5f> <6e5f> 7915 +<6e67> <6e67> 6185 +<6e6b> <6e6b> 7271 +<6e6e> <6e6e> 6453 +<6e6f> <6e6f> 7429 +<6e72> <6e72> 6269 +<6e73> <6e73> 4148 +<6e7a> <6e7a> 5065 +<6e90> <6e90> 6270 +<6e96> <6e96> 6911 +<6e9c> <6e9c> 4582 +<6e9d> <6e9d> 3920 +<6e9f> <6e9f> 4754 +<6ea2> <6ea2> 6465 +<6ea5> <6ea5> 5128 +<6eaa> <6eaa> 3716 +<6eab> <6eab> 6083 +<6eaf> <6eaf> 5514 +<6eb1> <6eb1> 6991 +<6eb6> <6eb6> 6186 +<6eba> <6eba> 4189 +<6ec2> <6ec2> 4955 +<6ec4> <6ec4> 7105 +<6ec5> <6ec5> 4746 +<6ec9> <6ec9> 7916 +<6ecb> <6ecb> 6493 +<6ecc> <6ecc> 7142 +<6ece> <6ece> 7777 +<6ed1> <6ed1> 7900 +<6ed3> <6ed3> 6579 +<6ed4> <6ed4> 4290 +<6eef> <6eef> 7208 +<6ef4> <6ef4> 6625 +<6ef8> <6ef8> 7816 +<6efe> <6efe> 3780 +<6eff> <6eff> 4679 +<6f01> <6f01> 5905 +<6f02> <6f02> 7582 +<6f06> <6f06> 7366 +<6f0f> <6f0f> 4569 +<6f11> <6f11> 3570 +<6f14> <6f14> 5970 +<6f15> <6f15> 6799 +<6f20> <6f20> 4666 +<6f22> <6f22> 7640 +<6f23> <6f23> 4468 +<6f2b> <6f2b> 4680 +<6f2c> <6f2c> 6959 +<6f31> <6f31> 5589 +<6f32> <6f32> 7106 +<6f38> <6f38> 6695 +<6f3f> <6f3f> 6551 +<6f41> <6f41> 6012 +<6f51> <6f51> 4934 +<6f54> <6f54> 3650 +<6f57> <6f57> 7033 +<6f58> <6f58> 4915 +<6f5a> <6f5a> 5634 +<6f5b> <6f5b> 6529 +<6f5e> <6f5e> 4515 +<6f5f> <6f5f> 5412 +<6f62> <6f62> 7917 +<6f64> <6f64> 6362 +<6f6d> <6f6d> 4224 +<6f6e> <6f6e> 6800 +<6f70> <6f70> 3986 +<6f7a> <6f7a> 6525 +<6f7c> <6f7c> 4341 +<6f7d> <6f7d> 5066 +endcidrange + +100 begincidrange +<6f7e> <6f7e> 4639 +<6f81> <6f81> 5328 +<6f84> <6f84> 7040 +<6f88> <6f88> 7172 +<6f8d> <6f8d> 6880 +<6f8e> <6f8e> 7514 +<6f90> <6f90> 6241 +<6f94> <6f94> 7817 +<6f97> <6f97> 3488 +<6fa3> <6fa3> 7641 +<6fa4> <6fa4> 7446 +<6fa7> <6fa7> 4507 +<6fae> <6fae> 7939 +<6faf> <6faf> 7063 +<6fb1> <6fb1> 6661 +<6fb3> <6fb3> 6069 +<6fb9> <6fb9> 4225 +<6fbe> <6fbe> 4213 +<6fc0> <6fc0> 3633 +<6fc1> <6fc1> 7402 +<6fc2> <6fc2> 4486 +<6fc3> <6fc3> 4175 +<6fca> <6fca> 6035 +<6fd5> <6fd5> 5677 +<6fda> <6fda> 6013 +<6fdf> <6fdf> 6768 +<6fe0> <6fe0> 7818 +<6fe1> <6fe1> 6334 +<6fe4> <6fe4> 4291 +<6fe9> <6fe9> 7819 +<6feb> <6feb> 4403 +<6fec> <6fec> 6912 +<6fef> <6fef> 7403 +<6ff1> <6ff1> 5230 +<6ffe> <6ffe> 4449 +<7001> <7001> 5890 +<7005> <7005> 7778 +<7006> <7006> 4310 +<7009> <7009> 5275 +<700b> <700b> 5767 +<700f> <700f> 4583 +<7011> <7011> 7574 +<7015> <7015> 5231 +<7018> <7018> 4516 +<701a> <701a> 7642 +<701b> <701b> 6014 +<701c> <701c> 6370 +<701d> <701d> 4461 +<701e> <701e> 6732 +<701f> <701f> 5515 +<7023> <7023> 7695 +<7027> <7027> 4539 +<7028> <7028> 4544 +<702f> <702f> 6015 +<7037> <7037> 6437 +<703e> <703e> 4393 +<704c> <704c> 3825 +<7050> <7050> 7779 +<7051> <7051> 5562 +<7058> <7058> 7414 +<705d> <705d> 7820 +<7063> <7063> 4681 +<706b> <706b> 7867 +<7070> <7070> 7940 +<7078> <7078> 3921 +<707c> <707c> 6514 +<707d> <707d> 6580 +<7085> <7085> 3681 +<708a> <708a> 7321 +<708e> <708e> 5991 +<7092> <7092> 7224 +<7098> <7098> 8021 +<7099> <7099> 6494 +<709a> <709a> 3846 +<70a1> <70a1> 6733 +<70a4> <70a4> 5516 +<70ab> <70ab> 7740 +<70ac> <70ac> 3594 +<70ad> <70ad> 7415 +<70af> <70af> 7780 +<70b3> <70b3> 5050 +<70b7> <70b7> 6881 +<70b8> <70b8> 6515 +<70b9> <70b9> 6696 +<70c8> <70c8> 4481 +<70cb> <70cb> 8007 +<70cf> <70cf> 6070 +<70d8> <70d8> 7858 +<70d9> <70d9> 4383 +<70dd> <70dd> 6935 +<70df> <70df> 5971 +<70f1> <70f1> 3682 +<70f9> <70f9> 7515 +<70fd> <70fd> 5100 +<7104> <7104> 7983 +<7109> <7109> 5920 +<710c> <710c> 6913 +<7119> <7119> 4977 +<711a> <711a> 5163 +<711e> <711e> 4325 +endcidrange + +100 begincidrange +<7121> <7121> 4823 +<7126> <7126> 7225 +<7130> <7130> 5992 +<7136> <7136> 5972 +<7147> <7147> 8001 +<7149> <7149> 4469 +<714a> <714a> 7992 +<714c> <714c> 7918 +<714e> <714e> 6662 +<7150> <7150> 6016 +<7156> <7156> 4141 +<7159> <7159> 5973 +<715c> <715c> 6234 +<715e> <715e> 5318 +<7164> <7164> 4716 +<7165> <7165> 7893 +<7166> <7166> 7976 +<7167> <7167> 6801 +<7169> <7169> 4998 +<716c> <716c> 5891 +<716e> <716e> 6495 +<717d> <717d> 5428 +<7184> <7184> 5728 +<7189> <7189> 6242 +<718a> <718a> 6253 +<718f> <718f> 7984 +<7192> <7192> 7781 +<7194> <7194> 6187 +<7199> <7199> 8048 +<719f> <719f> 5635 +<71a2> <71a2> 5101 +<71ac> <71ac> 6071 +<71b1> <71b1> 5987 +<71b9> <71ba> 8049 +<71be> <71be> 7345 +<71c1> <71c1> 6000 +<71c3> <71c3> 5974 +<71c8> <71c8> 4367 +<71c9> <71c9> 4326 +<71ce> <71ce> 4556 +<71d0> <71d0> 4640 +<71d2> <71d2> 5517 +<71d4> <71d4> 4999 +<71d5> <71d5> 5975 +<71df> <71df> 6017 +<71e5> <71e5> 6802 +<71e6> <71e6> 7064 +<71e7> <71e7> 5590 +<71ed> <71ed> 7243 +<71ee> <71ee> 5473 +<71fb> <71fb> 7985 +<71fc> <71fc> 5744 +<71fe> <71fe> 4292 +<71ff> <71ff> 6154 +<7200> <7200> 7731 +<7206> <7206> 7575 +<7210> <7210> 4517 +<721b> <721b> 4394 +<722a> <722a> 6803 +<722c> <722c> 7483 +<722d> <722d> 6587 +<7230> <7230> 6271 +<7232> <7232> 6295 +<7235> <7235> 6516 +<7236> <7236> 5129 +<723a> <723a> 5869 +<723b> <723b> 7962 +<723d> <723d> 5349 +<723e> <723e> 6422 +<7240> <7240> 5350 +<7246> <7246> 6552 +<7247> <7247> 7521 +<7248> <7248> 7493 +<724c> <724c> 7508 +<7252> <7252> 7191 +<7258> <7258> 4311 +<7259> <7259> 5782 +<725b> <725b> 6210 +<725d> <725d> 5232 +<725f> <725f> 4777 +<7261> <7261> 4778 +<7262> <7262> 4545 +<7267> <7267> 4790 +<7269> <7269> 4850 +<7272> <7272> 5369 +<7279> <7279> 7472 +<727d> <727d> 3638 +<7280> <7280> 5388 +<7281> <7281> 4623 +<72a2> <72a2> 4312 +<72a7> <72a7> 8051 +<72ac> <72ac> 3639 +<72af> <72af> 5015 +<72c0> <72c0> 5351 +<72c2> <72c2> 3847 +<72c4> <72c4> 6626 +<72ce> <72ce> 5831 +<72d0> <72d0> 7821 +<72d7> <72d7> 3922 +<72d9> <72d9> 6603 +endcidrange + +100 begincidrange +<72e1> <72e1> 3879 +<72e9> <72e9> 5591 +<72f8> <72f8> 4624 +<72f9> <72f9> 7765 +<72fc> <72fc> 4415 +<72fd> <72fd> 7509 +<730a> <730a> 6036 +<7316> <7316> 7107 +<731b> <731b> 4729 +<731c> <731c> 5708 +<731d> <731d> 6836 +<7325> <7325> 6138 +<7329> <7329> 5482 +<732a> <732a> 6604 +<732b> <732b> 4808 +<7336> <7337> 6335 +<733e> <733e> 7901 +<733f> <733f> 6272 +<7344> <7344> 6080 +<7345> <7345> 5276 +<7350> <7350> 6553 +<7352> <7352> 6072 +<7357> <7357> 3980 +<7368> <7368> 4313 +<736a> <736a> 7941 +<7370> <7370> 6018 +<7372> <7372> 7949 +<7375> <7375> 4488 +<7378> <7378> 5592 +<737a> <737a> 4214 +<737b> <737b> 7725 +<7384> <7384> 7741 +<7386> <7386> 6496 +<7387> <7387> 5552 +<7389> <7389> 6081 +<738b> <738b> 6130 +<738e> <738e> 6734 +<7394> <7394> 7156 +<7396> <7396> 3923 +<7397> <7397> 6211 +<7398> <7398> 4094 +<739f> <739f> 4879 +<73a7> <73a7> 6363 +<73a9> <73a9> 6113 +<73ad> <73ad> 5233 +<73b2> <73b2> 4495 +<73b3> <73b3> 4260 +<73b9> <73b9> 7742 +<73c0> <73c0> 4894 +<73c2> <73c2> 3452 +<73c9> <73c9> 4880 +<73ca> <73ca> 5308 +<73cc> <73cc> 7608 +<73cd> <73cd> 6992 +<73cf> <73cf> 3471 +<73d6> <73d6> 3848 +<73d9> <73d9> 3797 +<73dd> <73dd> 7977 +<73de> <73de> 4384 +<73e0> <73e0> 6882 +<73e3> <73e3> 5651 +<73e4> <73e4> 5067 +<73e5> <73e5> 6423 +<73e6> <73e6> 7713 +<73e9> <73e9> 7782 +<73ea> <73ea> 3999 +<73ed> <73ed> 4916 +<73f7> <73f7> 4824 +<73f9> <73f9> 5483 +<73fd> <73fd> 6735 +<73fe> <73fe> 7743 +<7401> <7401> 5429 +<7403> <7403> 3924 +<7405> <7405> 4416 +<7406> <7406> 4625 +<7407> <7407> 5593 +<7409> <7409> 4584 +<7413> <7413> 6114 +<741b> <741b> 7372 +<7420> <7420> 6663 +<7421> <7421> 5636 +<7422> <7422> 7404 +<7425> <7425> 7822 +<7426> <7426> 4095 +<7428> <7428> 3781 +<742a> <742a> 4096 +<742b> <742b> 5102 +<742c> <742c> 6115 +<742e> <742e> 6844 +<742f> <742f> 3826 +<7430> <7430> 5993 +<7433> <7433> 4649 +<7434> <7434> 4043 +<7435> <7435> 5201 +<7436> <7436> 7484 +<7438> <7438> 7405 +<743a> <743a> 5019 +<743f> <743f> 7848 +<7440> <7440> 6212 +<7441> <7441> 4779 +endcidrange + +100 begincidrange +<7443> <7443> 7302 +<7444> <7444> 5430 +<744b> <744b> 6296 +<7455> <7455> 7623 +<7457> <7457> 6273 +<7459> <7459> 4173 +<745a> <745a> 7823 +<745b> <745b> 6019 +<745c> <745c> 6337 +<745e> <745e> 5389 +<745f> <745f> 5674 +<7460> <7460> 4585 +<7462> <7462> 6188 +<7464> <7464> 6155 +<7465> <7465> 6084 +<7468> <7468> 6993 +<7469> <7469> 7783 +<746a> <746a> 4657 +<746f> <746f> 4417 +<747e> <747e> 4030 +<7482> <7482> 4097 +<7483> <7483> 4626 +<7487> <7487> 5431 +<7489> <7489> 4470 +<748b> <748b> 6554 +<7498> <7498> 4641 +<749c> <749c> 7919 +<749e> <749e> 4895 +<749f> <749f> 3683 +<74a1> <74a1> 6994 +<74a3> <74a3> 4098 +<74a5> <74a5> 3684 +<74a7> <74a7> 5025 +<74a8> <74a8> 7065 +<74aa> <74aa> 6804 +<74b0> <74b0> 7894 +<74b2> <74b2> 5594 +<74b5> <74b5> 5939 +<74b9> <74b9> 5637 +<74bd> <74bd> 5363 +<74bf> <74bf> 5432 +<74c6> <74c6> 7021 +<74ca> <74ca> 3685 +<74cf> <74cf> 4540 +<74d4> <74d4> 6020 +<74d8> <74d8> 3827 +<74da> <74da> 7066 +<74dc> <74dc> 3806 +<74e0> <74e0> 7824 +<74e2> <74e2> 7583 +<74e3> <74e3> 7494 +<74e6> <74e6> 6100 +<74ee> <74ee> 6092 +<74f7> <74f7> 6497 +<7501> <7501> 5051 +<7504> <7504> 3640 +<7511> <7511> 6936 +<7515> <7515> 6093 +<7518> <7518> 3521 +<751a> <751a> 5768 +<751b> <751b> 7181 +<751f> <751f> 5370 +<7523> <7523> 5309 +<7525> <7525> 5371 +<7526> <7526> 5518 +<7528> <7528> 6189 +<752b> <752b> 5068 +<752c> <752c> 6190 +<7530> <7530> 6664 +<7531> <7531> 6338 +<7532> <7532> 3532 +<7533> <7533> 5745 +<7537> <7537> 4149 +<7538> <7538> 6665 +<753a> <753a> 6736 +<7547> <7547> 4011 +<754c> <754c> 3717 +<754f> <754f> 6139 +<7551> <7551> 6666 +<7553> <7553> 4235 +<7554> <7554> 4917 +<7559> <7559> 4586 +<755b> <755b> 6995 +<755c> <755c> 7289 +<755d> <755d> 4825 +<7562> <7562> 7609 +<7565> <7565> 4426 +<7566> <7566> 8008 +<756a> <756a> 5000 +<756f> <756f> 6914 +<7570> <7570> 6424 +<7575> <7575> 7868 +<7576> <7576> 4246 +<7578> <7578> 4099 +<757a> <757a> 3546 +<757f> <757f> 4100 +<7586> <7586> 3547 +<7587> <7587> 6883 +<758a> <758a> 7192 +<758b> <758b> 7610 +endcidrange + +100 begincidrange +<758e> <758e> 5520 +<758f> <758f> 5519 +<7591> <7591> 6403 +<759d> <759d> 5310 +<75a5> <75a5> 3571 +<75ab> <75ab> 5951 +<75b1> <75b1> 7558 +<75b2> <75b2> 7599 +<75b3> <75b3> 3522 +<75b5> <75b5> 6498 +<75b8> <75b8> 4215 +<75b9> <75b9> 6996 +<75bc> <75bc> 4342 +<75bd> <75bd> 6605 +<75be> <75be> 7022 +<75c2> <75c2> 3453 +<75c5> <75c5> 5052 +<75c7> <75c7> 6937 +<75cd> <75cd> 6425 +<75d2> <75d2> 5892 +<75d4> <75d4> 7346 +<75d5> <75d5> 8022 +<75d8> <75d8> 4352 +<75d9> <75d9> 3686 +<75db> <75db> 7455 +<75e2> <75e2> 4627 +<75f0> <75f0> 4226 +<75f2> <75f2> 4658 +<75f4> <75f4> 7347 +<75fa> <75fa> 5202 +<75fc> <75fc> 3746 +<7600> <7600> 5906 +<760d> <760d> 5893 +<7619> <7619> 5521 +<761f> <761f> 6085 +<7620> <7620> 7143 +<7621> <7621> 7108 +<7622> <7622> 4918 +<7624> <7624> 4587 +<7626> <7626> 5595 +<763b> <763b> 4570 +<7642> <7642> 4557 +<764c> <764c> 5826 +<764e> <764e> 3489 +<7652> <7652> 6339 +<7656> <7656> 5026 +<7661> <7661> 7348 +<7664> <7664> 6688 +<7669> <7669> 4376 +<766c> <766c> 5433 +<7670> <7670> 6094 +<7672> <7672> 6667 +<7678> <7678> 3718 +<767b> <767b> 4368 +<767c> <767c> 4935 +<767d> <767e> 4993 +<7684> <7684> 6627 +<7686> <7686> 3572 +<7687> <7687> 7920 +<768e> <768e> 3880 +<7690> <7690> 3747 +<7693> <7693> 7825 +<76ae> <76ae> 7600 +<76ba> <76ba> 7272 +<76bf> <76bf> 4755 +<76c2> <76c2> 6213 +<76c3> <76c3> 4978 +<76c6> <76c6> 5164 +<76c8> <76c8> 6021 +<76ca> <76ca> 6438 +<76d2> <76d2> 7665 +<76d6> <76d6> 3573 +<76db> <76db> 5484 +<76dc> <76dc> 4293 +<76de> <76de> 6526 +<76df> <76df> 4731 +<76e1> <76e1> 6997 +<76e3> <76e3> 3523 +<76e4> <76e4> 4919 +<76e7> <76e7> 4518 +<76ee> <76ee> 4791 +<76f2> <76f2> 4730 +<76f4> <76f4> 6975 +<76f8> <76f8> 5352 +<76fc> <76fc> 4920 +<76fe> <76fe> 5652 +<7701> <7701> 5485 +<7704> <7704> 4740 +<7708> <7708> 7421 +<7709> <7709> 4862 +<770b> <770b> 3490 +<771e> <771e> 6998 +<7720> <7720> 4741 +<7729> <7729> 7744 +<7737> <7737> 3978 +<7738> <7738> 4780 +<773a> <773a> 6805 +<773c> <773c> 5812 +<7740> <7740> 7057 +<774d> <774d> 7745 +endcidrange + +100 begincidrange +<775b> <775b> 6737 +<7761> <7761> 5596 +<7763> <7763> 4314 +<7766> <7766> 4792 +<776b> <776b> 7193 +<7779> <7779> 4294 +<777e> <777e> 3748 +<777f> <777f> 6037 +<778b> <778b> 6999 +<7791> <7791> 4756 +<779e> <779e> 4682 +<77a5> <77a5> 5038 +<77ac> <77ac> 5653 +<77ad> <77ad> 4558 +<77b0> <77b0> 3524 +<77b3> <77b3> 4343 +<77bb> <77bb> 7182 +<77bc> <77bc> 3621 +<77bf> <77bf> 3925 +<77d7> <77d7> 7244 +<77db> <77db> 4781 +<77dc> <77dc> 4060 +<77e2> <77e2> 5709 +<77e3> <77e3> 6404 +<77e5> <77e5> 6960 +<77e9> <77e9> 3926 +<77ed> <77ed> 4204 +<77ee> <77ee> 6134 +<77ef> <77ef> 3881 +<77f3> <77f3> 5413 +<7802> <7802> 5277 +<7812> <7812> 5203 +<7825> <7825> 6961 +<7826> <7826> 7120 +<7827> <7827> 7373 +<782c> <782c> 4652 +<7832> <7832> 7559 +<7834> <7834> 7485 +<7845> <7845> 4000 +<784f> <784f> 5976 +<785d> <785d> 7226 +<786b> <786b> 4588 +<786c> <786c> 3687 +<786f> <786f> 5977 +<787c> <787c> 5178 +<7881> <7881> 4101 +<7887> <7887> 6738 +<788c> <788c> 4528 +<788d> <788d> 5847 +<788e> <788e> 5563 +<7891> <7891> 5204 +<7897> <7897> 6116 +<78a3> <78a3> 3504 +<78a7> <78a7> 5027 +<78a9> <78a9> 5414 +<78ba> <78bb> 7879 +<78bc> <78bc> 4659 +<78c1> <78c1> 6499 +<78c5> <78c5> 4956 +<78ca> <78ca> 4546 +<78cb> <78cb> 7050 +<78ce> <78ce> 3719 +<78d0> <78d0> 4921 +<78e8> <78e8> 4660 +<78ec> <78ec> 3688 +<78ef> <78ef> 4102 +<78f5> <78f5> 3491 +<78fb> <78fb> 4922 +<7901> <7901> 7227 +<790e> <790e> 7228 +<7916> <7916> 5940 +<792a> <792a> 4450 +<792b> <792b> 4462 +<792c> <792c> 4923 +<793a> <793a> 5710 +<793e> <793e> 5278 +<7940> <7940> 5279 +<7941> <7941> 4103 +<7947> <7948> 4104 +<7949> <7949> 6962 +<7950> <7950> 6214 +<7956> <7956> 6806 +<7957> <7957> 6963 +<795a> <795a> 6807 +<795b> <795b> 3595 +<795c> <795c> 7826 +<795d> <795d> 7290 +<795e> <795e> 5746 +<7960> <7960> 5280 +<7965> <7965> 5353 +<7968> <7968> 7584 +<796d> <796d> 6769 +<797a> <797a> 4106 +<797f> <797f> 4529 +<7981> <7981> 4044 +<798d> <798d> 7869 +<798e> <798e> 6739 +<798f> <798f> 5081 +<7991> <7991> 6215 +<79a6> <79a6> 5907 +endcidrange + +100 begincidrange +<79a7> <79a7> 8052 +<79aa> <79aa> 5434 +<79ae> <79ae> 4508 +<79b1> <79b1> 4295 +<79b3> <79b3> 5894 +<79b9> <79b9> 6216 +<79bd> <79bd> 4045 +<79be> <79be> 7870 +<79bf> <79bf> 4315 +<79c0> <79c0> 5597 +<79c1> <79c1> 5281 +<79c9> <79c9> 5053 +<79ca> <79ca> 4162 +<79cb> <79cb> 7273 +<79d1> <79d1> 3807 +<79d2> <79d2> 7229 +<79d5> <79d5> 5205 +<79d8> <79d8> 5206 +<79df> <79df> 6808 +<79e4> <79e4> 7377 +<79e6> <79e6> 7000 +<79e7> <79e7> 5838 +<79e9> <79e9> 7023 +<79fb> <79fb> 6426 +<7a00> <7a00> 8053 +<7a05> <7a05> 5496 +<7a08> <7a08> 3492 +<7a0b> <7a0b> 6740 +<7a0d> <7a0d> 7230 +<7a14> <7a14> 6474 +<7a17> <7a17> 7510 +<7a19> <7a19> 6976 +<7a1a> <7a1a> 7349 +<7a1c> <7a1c> 4609 +<7a1f> <7a1f> 7591 +<7a20> <7a20> 6809 +<7a2e> <7a2e> 6845 +<7a31> <7a31> 7378 +<7a36> <7a36> 6235 +<7a37> <7a37> 6977 +<7a3b> <7a3b> 4296 +<7a3c> <7a3c> 3454 +<7a3d> <7a3d> 3720 +<7a3f> <7a3f> 3749 +<7a40> <7a40> 3771 +<7a46> <7a46> 4793 +<7a49> <7a49> 7350 +<7a4d> <7a4d> 6628 +<7a4e> <7a4e> 6022 +<7a57> <7a57> 5598 +<7a61> <7a61> 5366 +<7a62> <7a62> 6038 +<7a69> <7a69> 6086 +<7a6b> <7a6b> 7881 +<7a70> <7a70> 5895 +<7a74> <7a74> 7755 +<7a76> <7a76> 3927 +<7a79> <7a79> 3965 +<7a7a> <7a7a> 3798 +<7a7d> <7a7d> 6741 +<7a7f> <7a7f> 7157 +<7a81> <7a81> 4330 +<7a84> <7a84> 7058 +<7a88> <7a88> 6156 +<7a92> <7a92> 7024 +<7a93> <7a93> 7109 +<7a95> <7a95> 6810 +<7a98> <7a98> 3954 +<7a9f> <7a9f> 3962 +<7aa9> <7aaa> 6101 +<7aae> <7aae> 3966 +<7aaf> <7aaf> 6157 +<7aba> <7aba> 4001 +<7ac4> <7ac4> 7067 +<7ac5> <7ac5> 4002 +<7ac7> <7ac7> 4353 +<7aca> <7aca> 6689 +<7acb> <7acb> 4653 +<7ad7> <7ad7> 4809 +<7ad9> <7ad9> 7089 +<7add> <7add> 5054 +<7adf> <7adf> 3689 +<7ae0> <7ae0> 6555 +<7ae3> <7ae3> 6915 +<7ae5> <7ae5> 4344 +<7aea> <7aea> 5599 +<7aed> <7aed> 3505 +<7aef> <7aef> 4205 +<7af6> <7af6> 3690 +<7af9> <7af9> 6900 +<7afa> <7afa> 7291 +<7aff> <7aff> 3493 +<7b0f> <7b0f> 7852 +<7b11> <7b11> 5522 +<7b19> <7b19> 5372 +<7b1b> <7b1b> 6629 +<7b1e> <7b1e> 7439 +<7b20> <7b20> 4654 +<7b26> <7b26> 5130 +<7b2c> <7b2c> 6770 +endcidrange + +100 begincidrange +<7b2d> <7b2d> 4496 +<7b39> <7b39> 5497 +<7b46> <7b46> 7611 +<7b49> <7b49> 4369 +<7b4b> <7b4b> 4031 +<7b4c> <7b4c> 6668 +<7b4d> <7b4d> 5654 +<7b4f> <7b4f> 5006 +<7b50> <7b50> 3849 +<7b51> <7b51> 7292 +<7b52> <7b52> 7456 +<7b54> <7b54> 4236 +<7b56> <7b56> 7128 +<7b60> <7b60> 4012 +<7b6c> <7b6c> 5486 +<7b6e> <7b6e> 5390 +<7b75> <7b75> 5978 +<7b7d> <7b7d> 6073 +<7b87> <7b87> 3574 +<7b8b> <7b8b> 6669 +<7b8f> <7b8f> 6588 +<7b94> <7b94> 4896 +<7b95> <7b95> 4107 +<7b97> <7b97> 5311 +<7b9a> <7b9a> 7051 +<7b9d> <7b9d> 3656 +<7ba1> <7ba1> 3828 +<7bad> <7bad> 6670 +<7bb1> <7bb1> 5354 +<7bb4> <7bb4> 6530 +<7bb8> <7bb8> 6606 +<7bc0> <7bc0> 6690 +<7bc1> <7bc1> 7921 +<7bc4> <7bc4> 5016 +<7bc6> <7bc6> 6671 +<7bc7> <7bc7> 7522 +<7bc9> <7bc9> 7293 +<7bd2> <7bd2> 5729 +<7be0> <7be0> 5523 +<7be4> <7be4> 4316 +<7be9> <7be9> 5282 +<7c07> <7c07> 6829 +<7c12> <7c12> 7068 +<7c1e> <7c1e> 4206 +<7c21> <7c21> 3494 +<7c27> <7c27> 7922 +<7c2a> <7c2a> 6531 +<7c2b> <7c2b> 5524 +<7c3d> <7c3d> 7183 +<7c3e> <7c3e> 4487 +<7c3f> <7c3f> 5131 +<7c43> <7c43> 4404 +<7c4c> <7c4c> 6884 +<7c4d> <7c4d> 6630 +<7c60> <7c60> 4541 +<7c64> <7c64> 7184 +<7c6c> <7c6c> 4628 +<7c73> <7c73> 4863 +<7c83> <7c83> 5207 +<7c89> <7c89> 5165 +<7c92> <7c92> 4655 +<7c95> <7c95> 4897 +<7c97> <7c97> 6811 +<7c98> <7c98> 6697 +<7c9f> <7c9f> 5541 +<7ca5> <7ca5> 6901 +<7ca7> <7ca7> 6556 +<7cae> <7cae> 4433 +<7cb1> <7cb1> 4434 +<7cb2> <7cb2> 7070 +<7cb3> <7cb3> 3582 +<7cb9> <7cb9> 5600 +<7cbe> <7cbe> 6742 +<7cca> <7cca> 7827 +<7cd6> <7cd6> 4247 +<7cde> <7cde> 5166 +<7cdf> <7cdf> 6812 +<7ce0> <7ce0> 3548 +<7ce7> <7ce7> 4435 +<7cfb> <7cfb> 3721 +<7cfe> <7cfe> 4003 +<7d00> <7d00> 4108 +<7d02> <7d02> 6885 +<7d04> <7d04> 5873 +<7d05> <7d05> 7859 +<7d06> <7d06> 6217 +<7d07> <7d07> 8025 +<7d08> <7d08> 7895 +<7d0a> <7d0b> 4842 +<7d0d> <7d0d> 4150 +<7d10> <7d10> 4184 +<7d14> <7d14> 5655 +<7d17> <7d17> 5283 +<7d18> <7d18> 3865 +<7d19> <7d19> 6964 +<7d1a> <7d1a> 4056 +<7d1b> <7d1b> 5167 +<7d20> <7d20> 5525 +<7d21> <7d21> 4957 +<7d22> <7d22> 5367 +endcidrange + +100 begincidrange +<7d2b> <7d2b> 6500 +<7d2c> <7d2c> 6886 +<7d2e> <7d2e> 7081 +<7d2f> <7d2f> 4571 +<7d30> <7d30> 5498 +<7d33> <7d33> 5747 +<7d35> <7d35> 6607 +<7d39> <7d39> 5526 +<7d3a> <7d3a> 3525 +<7d42> <7d42> 6846 +<7d43> <7d43> 7746 +<7d44> <7d44> 6813 +<7d45> <7d45> 3691 +<7d46> <7d46> 4924 +<7d50> <7d50> 3651 +<7d5e> <7d5e> 3882 +<7d61> <7d61> 4385 +<7d62> <7d62> 7747 +<7d66> <7d66> 4057 +<7d68> <7d68> 6371 +<7d6a> <7d6a> 6454 +<7d6e> <7d6e> 5391 +<7d71> <7d71> 7457 +<7d72> <7d72> 5284 +<7d73> <7d73> 3549 +<7d76> <7d76> 6691 +<7d79> <7d79> 3641 +<7d7f> <7d7f> 3928 +<7d8e> <7d8e> 6743 +<7d8f> <7d8f> 5601 +<7d93> <7d93> 3692 +<7d9c> <7d9c> 6847 +<7da0> <7da0> 4530 +<7da2> <7da2> 6887 +<7dac> <7dac> 5602 +<7dad> <7dad> 6340 +<7db1> <7db1> 3550 +<7db2> <7db2> 4701 +<7db4> <7db4> 7173 +<7db5> <7db5> 7121 +<7db8> <7db8> 4598 +<7dba> <7dba> 4109 +<7dbb> <7dbb> 7416 +<7dbd> <7dbd> 6517 +<7dbe> <7dbe> 4610 +<7dbf> <7dbf> 4742 +<7dc7> <7dc7> 7351 +<7dca> <7dca> 4126 +<7dcb> <7dcb> 5208 +<7dd6> <7dd6> 5392 +<7dd8> <7dd8> 7658 +<7dda> <7dda> 5435 +<7ddd> <7ddd> 7034 +<7dde> <7dde> 4207 +<7de0> <7de0> 7209 +<7de1> <7de1> 4881 +<7de3> <7de3> 5979 +<7de8> <7de8> 7523 +<7de9> <7de9> 6117 +<7dec> <7dec> 4743 +<7def> <7def> 6297 +<7df4> <7df4> 4471 +<7dfb> <7dfb> 7352 +<7e09> <7e09> 7001 +<7e0a> <7e0a> 5855 +<7e15> <7e15> 6087 +<7e1b> <7e1b> 4898 +<7e1d> <7e1d> 7002 +<7e1e> <7e1e> 7828 +<7e1f> <7e1f> 6171 +<7e21> <7e21> 6581 +<7e23> <7e23> 7748 +<7e2b> <7e2b> 5103 +<7e2e> <7e2e> 7294 +<7e2f> <7e2f> 5980 +<7e31> <7e31> 6848 +<7e37> <7e37> 4572 +<7e3d> <7e3d> 7257 +<7e3e> <7e3e> 6631 +<7e41> <7e41> 5001 +<7e43> <7e43> 5179 +<7e46> <7e46> 4826 +<7e47> <7e47> 6158 +<7e52> <7e52> 6938 +<7e54> <7e54> 6978 +<7e55> <7e55> 5436 +<7e5e> <7e5e> 6159 +<7e61> <7e61> 5603 +<7e69> <7e69> 5689 +<7e6a> <7e6a> 7942 +<7e6b> <7e6b> 3722 +<7e6d> <7e6d> 3642 +<7e70> <7e70> 6814 +<7e79> <7e79> 5952 +<7e7c> <7e7c> 3723 +<7e82> <7e82> 7069 +<7e8c> <7e8c> 5542 +<7e8f> <7e8f> 6672 +<7e93> <7e93> 6023 +<7e96> <7e96> 5466 +endcidrange + +100 begincidrange +<7e98> <7e98> 7071 +<7e9b> <7e9b> 4317 +<7e9c> <7e9c> 4405 +<7f36> <7f36> 5132 +<7f38> <7f38> 7681 +<7f3a> <7f3a> 3652 +<7f4c> <7f4c> 5859 +<7f50> <7f50> 3829 +<7f54> <7f54> 4702 +<7f55> <7f55> 7643 +<7f6a> <7f6a> 6859 +<7f6b> <7f6b> 3854 +<7f6e> <7f6e> 7353 +<7f70> <7f70> 5007 +<7f72> <7f72> 5393 +<7f75> <7f75> 4717 +<7f77> <7f77> 7486 +<7f79> <7f79> 4629 +<7f85> <7f85> 4377 +<7f88> <7f88> 4110 +<7f8a> <7f8a> 5896 +<7f8c> <7f8c> 3551 +<7f8e> <7f8e> 4864 +<7f94> <7f94> 3750 +<7f9a> <7f9a> 4497 +<7f9e> <7f9e> 5604 +<7fa4> <7fa4> 3955 +<7fa8> <7fa8> 5437 +<7fa9> <7fa9> 6405 +<7fb2> <7fb2> 8054 +<7fb8> <7fb8> 4630 +<7fb9> <7fb9> 3583 +<7fbd> <7fbd> 6218 +<7fc1> <7fc1> 6095 +<7fc5> <7fc5> 5711 +<7fca> <7fca> 6439 +<7fcc> <7fcc> 6440 +<7fce> <7fce> 4498 +<7fd2> <7fd2> 5679 +<7fd4> <7fd4> 5355 +<7fd5> <7fd5> 8033 +<7fdf> <7fdf> 6632 +<7fe0> <7fe0> 7322 +<7fe1> <7fe1> 5209 +<7fe9> <7fe9> 7524 +<7feb> <7feb> 6118 +<7ff0> <7ff0> 7644 +<7ff9> <7ff9> 3883 +<7ffc> <7ffc> 6441 +<8000> <8000> 6160 +<8001> <8001> 4519 +<8003> <8003> 3751 +<8005> <8005> 6501 +<8006> <8006> 4111 +<8009> <8009> 3929 +<800c> <800c> 6427 +<8010> <8010> 4158 +<8015> <8015> 3693 +<8017> <8017> 4782 +<8018> <8018> 6243 +<802d> <802d> 4112 +<8033> <8033> 6428 +<8036> <8036> 5870 +<803d> <803d> 7422 +<803f> <803f> 3694 +<8043> <8043> 4227 +<8046> <8046> 4499 +<804a> <804a> 4559 +<8056> <8056> 5487 +<8058> <8058> 5239 +<805a> <805a> 7323 +<805e> <805e> 4844 +<806f> <806f> 4472 +<8070> <8070> 7258 +<8072> <8072> 5488 +<8073> <8073> 6191 +<8077> <8077> 6979 +<807d> <807d> 7200 +<807e> <807e> 4542 +<807f> <807f> 6368 +<8084> <8084> 6429 +<8085> <8085> 5638 +<8086> <8086> 5285 +<8087> <8087> 6815 +<8089> <8089> 6357 +<808b> <808b> 4605 +<808c> <808c> 4113 +<8096> <8096> 7231 +<809b> <809b> 7682 +<809d> <809d> 3495 +<80a1> <80a1> 3752 +<80a2> <80a2> 6965 +<80a5> <80a5> 5210 +<80a9> <80a9> 3643 +<80aa> <80aa> 4958 +<80af> <80af> 4061 +<80b1> <80b1> 3866 +<80b2> <80b2> 6358 +<80b4> <80b4> 7963 +<80ba> <80ba> 7540 +endcidrange + +100 begincidrange +<80c3> <80c3> 6298 +<80c4> <80c4> 6865 +<80cc> <80cc> 4979 +<80ce> <80ce> 7440 +<80da> <80da> 4980 +<80db> <80db> 3533 +<80de> <80de> 7560 +<80e1> <80e1> 7829 +<80e4> <80e4> 6364 +<80e5> <80e5> 5394 +<80f1> <80f1> 3850 +<80f4> <80f4> 4345 +<80f8> <80f8> 8017 +<80fd> <80fd> 4185 +<8102> <8102> 6966 +<8105> <8105> 7766 +<8106> <8106> 7324 +<8107> <8107> 7767 +<8108> <8108> 4722 +<810a> <810a> 7144 +<8118> <8118> 6119 +<811a> <811a> 3472 +<811b> <811b> 3695 +<8123> <8123> 5656 +<8129> <8129> 5605 +<812b> <812b> 7419 +<812f> <812f> 7561 +<8139> <8139> 7110 +<813e> <813e> 5211 +<814b> <814b> 5856 +<814e> <814e> 5748 +<8150> <8151> 5133 +<8154> <8154> 3552 +<8155> <8155> 6120 +<8165> <8165> 5489 +<8166> <8166> 4179 +<816b> <816b> 6849 +<8170> <8170> 6161 +<8171> <8171> 3608 +<8178> <8178> 6557 +<8179> <8179> 5082 +<817a> <817a> 5438 +<817f> <817f> 7461 +<8180> <8180> 4959 +<8188> <8188> 3634 +<818a> <818a> 4899 +<818f> <818f> 3753 +<819a> <819a> 5135 +<819c> <819c> 4667 +<819d> <819d> 5675 +<81a0> <81a0> 3884 +<81a3> <81a3> 7025 +<81a8> <81a8> 7516 +<81b3> <81b3> 5439 +<81b5> <81b5> 7313 +<81ba> <81ba> 6392 +<81bd> <81bd> 4228 +<81be> <81be> 7943 +<81bf> <81bf> 4176 +<81c0> <81c0> 4359 +<81c2> <81c2> 5212 +<81c6> <81c6> 5916 +<81cd> <81cd> 6771 +<81d8> <81d8> 4410 +<81df> <81df> 6558 +<81e3> <81e3> 5749 +<81e5> <81e5> 6103 +<81e7> <81e7> 6559 +<81e8> <81e8> 4650 +<81ea> <81ea> 6502 +<81ed> <81ed> 7325 +<81f3> <81f3> 6967 +<81f4> <81f4> 7354 +<81fa> <81fa> 4261 +<81fb> <81fb> 7003 +<81fc> <81fc> 3930 +<81fe> <81fe> 6341 +<8205> <8205> 3931 +<8207> <8207> 5941 +<8208> <8208> 8034 +<820a> <820a> 3932 +<820c> <820c> 5456 +<820d> <820d> 5286 +<8212> <8212> 5395 +<821b> <821b> 7158 +<821c> <821c> 5657 +<821e> <821e> 4827 +<821f> <821f> 6888 +<8221> <8221> 3553 +<822a> <822a> 7683 +<822b> <822b> 4960 +<822c> <822c> 4925 +<8235> <8235> 7390 +<8236> <8236> 4900 +<8237> <8237> 7749 +<8239> <8239> 5440 +<8240> <8240> 5136 +<8245> <8245> 5942 +<8247> <8247> 6744 +<8259> <8259> 7111 +endcidrange + +100 begincidrange +<8264> <8264> 6406 +<8266> <8266> 7659 +<826e> <826e> 3496 +<826f> <826f> 4436 +<8271> <8271> 3497 +<8272> <8272> 5368 +<8276> <8276> 5994 +<8278> <8278> 7232 +<827e> <827e> 5848 +<828b> <828b> 6219 +<828d> <828d> 6518 +<828e> <828e> 3967 +<8292> <8292> 4703 +<8299> <8299> 5137 +<829a> <829a> 4360 +<829d> <829d> 6968 +<829f> <829f> 5324 +<82a5> <82a5> 3575 +<82a6> <82a6> 7830 +<82a9> <82a9> 4046 +<82ac> <82ac> 5168 +<82ad> <82ad> 7487 +<82ae> <82ae> 6039 +<82af> <82af> 5769 +<82b1> <82b1> 7871 +<82b3> <82b3> 4961 +<82b7> <82b7> 6969 +<82b8> <82b8> 6244 +<82b9> <82b9> 4032 +<82bb> <82bb> 7274 +<82bc> <82bc> 4783 +<82bd> <82bd> 5783 +<82bf> <82bf> 6482 +<82d1> <82d1> 6274 +<82d2> <82d2> 5995 +<82d4> <82d4> 7441 +<82d5> <82d5> 7233 +<82d7> <82d7> 4810 +<82db> <82db> 3455 +<82de> <82de> 7562 +<82df> <82df> 3933 +<82e1> <82e1> 6430 +<82e5> <82e5> 5874 +<82e6> <82e6> 3754 +<82e7> <82e7> 6608 +<82f1> <82f1> 6024 +<82fd> <82fd> 3755 +<82fe> <82fe> 7612 +<8301> <8301> 6921 +<8302> <8302> 4828 +<8303> <8303> 5017 +<8304> <8304> 3456 +<8305> <8305> 4784 +<8309> <8309> 4693 +<8317> <8317> 4757 +<8328> <8328> 6503 +<832b> <832b> 4704 +<832f> <832f> 5083 +<8331> <8331> 5606 +<8334> <8334> 7944 +<8335> <8335> 6455 +<8336> <8336> 4191 +<8338> <8338> 6192 +<8339> <8339> 5943 +<8340> <8340> 5658 +<8347> <8347> 7708 +<8349> <8349> 7234 +<834a> <834a> 7784 +<834f> <834f> 6475 +<8351> <8351> 6431 +<8352> <8352> 7923 +<8373> <8373> 4354 +<8377> <8377> 7624 +<837b> <837b> 6633 +<8389> <8389> 4631 +<838a> <838a> 6560 +<838e> <838e> 5287 +<8396> <8396> 3696 +<8398> <8398> 5750 +<839e> <839e> 6121 +<83a2> <83a2> 7768 +<83a9> <83a9> 5138 +<83aa> <83aa> 5784 +<83ab> <83ab> 4668 +<83bd> <83bd> 4705 +<83c1> <83c1> 7201 +<83c5> <83c5> 3830 +<83c9> <83c9> 4531 +<83ca> <83ca> 3949 +<83cc> <83cc> 4013 +<83d3> <83d3> 3808 +<83d6> <83d6> 7112 +<83dc> <83dc> 7122 +<83e9> <83e9> 5069 +<83eb> <83eb> 4033 +<83ef> <83ef> 7872 +<83f0> <83f0> 3756 +<83f1> <83f1> 4611 +<83f2> <83f2> 5213 +<83f4> <83f4> 5827 +endcidrange + +100 begincidrange +<83f9> <83f9> 6609 +<83fd> <83fd> 5639 +<8403> <8403> 7314 +<8404> <8404> 4297 +<840a> <840a> 4423 +<840c> <840c> 4732 +<840d> <840d> 7532 +<840e> <840e> 6299 +<8429> <8429> 7275 +<842c> <842c> 4683 +<8431> <8431> 7993 +<8438> <8438> 6342 +<843d> <843d> 4386 +<8449> <8449> 6001 +<8457> <8457> 6610 +<845b> <845b> 3506 +<8461> <8461> 7563 +<8463> <8463> 4346 +<8466> <8466> 6300 +<846b> <846b> 7831 +<846c> <846c> 6561 +<846f> <846f> 5875 +<8475> <8475> 4004 +<847a> <847a> 6930 +<8490> <8490> 5607 +<8494> <8494> 5712 +<8499> <8499> 4799 +<849c> <849c> 5312 +<84a1> <84a1> 4962 +<84b2> <84b2> 7564 +<84b8> <84b8> 6939 +<84bb> <84bb> 5876 +<84bc> <84bc> 7113 +<84bf> <84bf> 7832 +<84c0> <84c0> 5549 +<84c2> <84c2> 4758 +<84c4> <84c4> 7295 +<84c6> <84c6> 5415 +<84c9> <84c9> 6193 +<84cb> <84cb> 3576 +<84cd> <84cd> 5713 +<84d1> <84d1> 5288 +<84da> <84da> 5608 +<84ec> <84ec> 5104 +<84ee> <84ee> 4473 +<84f4> <84f4> 5659 +<84fc> <84fc> 4560 +<8511> <8511> 4747 +<8513> <8513> 4684 +<8514> <8514> 5084 +<8517> <8517> 6504 +<8518> <8518> 5325 +<851a> <851a> 6250 +<851e> <851e> 4573 +<8521> <8521> 7123 +<8523> <8523> 6562 +<8525> <8525> 7259 +<852c> <852c> 5527 +<852d> <852d> 6383 +<852f> <852f> 7004 +<853d> <853d> 7541 +<853f> <853f> 6301 +<8541> <8541> 4229 +<8543> <8543> 5002 +<8549> <8549> 7235 +<854e> <854e> 3885 +<8553> <8553> 6245 +<8559> <8559> 7796 +<8563> <8563> 5660 +<8568> <8568> 3981 +<8569> <8569> 7430 +<856a> <856a> 4829 +<856d> <856d> 5528 +<8584> <8584> 4901 +<8587> <8587> 4865 +<858f> <858f> 6407 +<8591> <8591> 3554 +<8594> <8594> 6563 +<859b> <859b> 5457 +<85a6> <85a6> 7159 +<85a8> <85a8> 7989 +<85a9> <85a9> 5319 +<85aa> <85aa> 5751 +<85af> <85af> 5396 +<85b0> <85b0> 7986 +<85ba> <85ba> 6772 +<85c1> <85c1> 3757 +<85c9> <85c9> 6505 +<85cd> <85cd> 4406 +<85ce> <85ce> 5752 +<85cf> <85cf> 6564 +<85d5> <85d5> 6220 +<85dc> <85dc> 4451 +<85dd> <85dd> 6040 +<85e4> <85e4> 4370 +<85e5> <85e5> 5877 +<85e9> <85e9> 5003 +<85ea> <85ea> 5609 +<85f7> <85f7> 6611 +<85fa> <85fa> 4642 +endcidrange + +100 begincidrange +<85fb> <85fb> 6816 +<85ff> <85ff> 3817 +<8602> <8602> 6041 +<8606> <8606> 4520 +<8607> <8607> 5529 +<860a> <860a> 6088 +<8616> <8616> 5924 +<8617> <8617> 5028 +<861a> <861a> 5441 +<862d> <862d> 4395 +<863f> <863f> 4378 +<864e> <864e> 7833 +<8650> <8650> 7632 +<8654> <8654> 3609 +<8655> <8655> 7133 +<865b> <865b> 7721 +<865c> <865c> 4521 +<865e> <865e> 6221 +<865f> <865f> 7834 +<8667> <8667> 8009 +<8679> <8679> 7860 +<868a> <868a> 4845 +<868c> <868c> 4963 +<8693> <8693> 6456 +<86a3> <86a3> 3799 +<86a4> <86a4> 6817 +<86a9> <86a9> 7355 +<86c7> <86c7> 5289 +<86cb> <86cb> 4208 +<86d4> <86d4> 7945 +<86d9> <86d9> 6104 +<86db> <86db> 6889 +<86df> <86df> 3886 +<86e4> <86e4> 7666 +<86ed> <86ed> 7026 +<86fe> <86fe> 5785 +<8700> <8700> 7245 +<8702> <8702> 5105 +<8703> <8703> 5753 +<8708> <8708> 6074 +<8718> <8718> 6970 +<871a> <871a> 5214 +<871c> <871c> 4884 +<874e> <874e> 3508 +<8755> <8755> 5730 +<8757> <8757> 7924 +<875f> <875f> 6302 +<8766> <8766> 7625 +<8768> <8768> 5676 +<8774> <8774> 7835 +<8776> <8776> 6703 +<8778> <8778> 6105 +<8782> <8782> 4418 +<878d> <878d> 6372 +<879f> <879f> 4759 +<87a2> <87a2> 7785 +<87b3> <87b3> 4248 +<87ba> <87ba> 4379 +<87c4> <87c4> 7376 +<87e0> <87e0> 4926 +<87ec> <87ec> 5442 +<87ef> <87ef> 6162 +<87f2> <87f2> 7309 +<87f9> <87f9> 7696 +<87fb> <87fb> 6408 +<87fe> <87fe> 5467 +<8805> <8805> 5690 +<881f> <881f> 4411 +<8822> <8822> 6916 +<8823> <8823> 4452 +<8831> <8831> 3758 +<8836> <8836> 6532 +<883b> <883b> 4685 +<8840> <8840> 7756 +<8846> <8846> 6924 +<884c> <884c> 7709 +<884d> <884d> 5981 +<8852> <8852> 7750 +<8853> <8853> 5668 +<8857> <8857> 3457 +<8859> <8859> 5786 +<885b> <885b> 6303 +<885d> <885d> 7310 +<8861> <8861> 7786 +<8862> <8862> 3934 +<8863> <8863> 6409 +<8868> <8868> 7585 +<886b> <886b> 5326 +<8870> <8870> 5565 +<8872> <8872> 4151 +<8877> <8877> 7311 +<887e> <887f> 4047 +<8881> <8881> 6275 +<8882> <8882> 4763 +<8888> <8888> 3458 +<888b> <888b> 4262 +<888d> <888d> 7565 +<8892> <8892> 4209 +<8896> <8896> 5610 +<8897> <8897> 7005 +endcidrange + +100 begincidrange +<889e> <889e> 3782 +<88ab> <88ab> 7601 +<88b4> <88b4> 3759 +<88c1> <88c1> 6582 +<88c2> <88c2> 4482 +<88cf> <88cf> 4632 +<88d4> <88d4> 6042 +<88d5> <88d5> 6343 +<88d9> <88d9> 3956 +<88dc> <88dc> 5070 +<88dd> <88dd> 6565 +<88df> <88df> 5290 +<88e1> <88e1> 4633 +<88e8> <88e8> 5215 +<88f3> <88f3> 5356 +<88f4> <88f5> 4981 +<88f8> <88f8> 4380 +<88fd> <88fd> 6773 +<8907> <8907> 5085 +<8910> <8910> 3507 +<8912> <8912> 7566 +<8913> <8913> 5071 +<8918> <8918> 6304 +<8919> <8919> 4983 +<8925> <8925> 6172 +<892a> <892a> 7462 +<8936> <8936> 5680 +<8938> <8938> 4574 +<893b> <893b> 5458 +<8941> <8941> 3555 +<8944> <8944> 5897 +<895f> <895f> 4049 +<8964> <8964> 4407 +<896a> <896a> 4694 +<8972> <8972> 5681 +<897f> <897f> 5397 +<8981> <8981> 6163 +<8983> <8983> 4230 +<8986> <8986> 5086 +<8987> <8987> 7511 +<898b> <898b> 3644 +<898f> <898f> 4005 +<8993> <8993> 4734 +<8996> <8996> 5714 +<89a1> <89a1> 3635 +<89a9> <89a9> 4298 +<89aa> <89aa> 7363 +<89b2> <89b2> 4034 +<89ba> <89ba> 3473 +<89bd> <89bd> 4408 +<89c0> <89c0> 3831 +<89d2> <89d2> 3474 +<89e3> <89e3> 7697 +<89f4> <89f4> 5357 +<89f8> <89f8> 7246 +<8a00> <8a00> 5921 +<8a02> <8a02> 6745 +<8a03> <8a03> 5139 +<8a08> <8a08> 3724 +<8a0a> <8a0a> 5754 +<8a0c> <8a0c> 7861 +<8a0e> <8a0e> 7452 +<8a13> <8a13> 7987 +<8a16> <8a16> 8026 +<8a17> <8a17> 7406 +<8a18> <8a18> 4114 +<8a1b> <8a1b> 6106 +<8a1d> <8a1d> 5787 +<8a1f> <8a1f> 5557 +<8a23> <8a23> 3653 +<8a25> <8a25> 4182 +<8a2a> <8a2a> 4964 +<8a2d> <8a2d> 5459 +<8a31> <8a31> 7722 +<8a34> <8a34> 5530 +<8a36> <8a36> 3459 +<8a3a> <8a3a> 7006 +<8a3b> <8a3b> 6890 +<8a50> <8a50> 5291 +<8a54> <8a54> 6818 +<8a55> <8a55> 7533 +<8a5b> <8a5b> 6612 +<8a5e> <8a5e> 5292 +<8a60> <8a60> 6025 +<8a62> <8a62> 5661 +<8a63> <8a63> 6043 +<8a66> <8a66> 5715 +<8a69> <8a69> 5716 +<8a6d> <8a6d> 3987 +<8a6e> <8a6e> 6673 +<8a70> <8a70> 8055 +<8a71> <8a71> 7873 +<8a72> <8a72> 7698 +<8a73> <8a73> 5358 +<8a75> <8a75> 5443 +<8a79> <8a79> 7185 +<8a85> <8a85> 6891 +<8a87> <8a87> 3809 +<8a8c> <8a8c> 6971 +<8a8d> <8a8d> 6457 +endcidrange + +100 begincidrange +<8a93> <8a93> 5398 +<8a95> <8a95> 7417 +<8a98> <8a98> 6344 +<8a9e> <8a9e> 5908 +<8aa0> <8aa0> 5490 +<8aa1> <8aa1> 3725 +<8aa3> <8aa3> 4830 +<8aa4> <8aa4> 6075 +<8aa5> <8aa5> 3760 +<8aa6> <8aa6> 5558 +<8aa8> <8aa8> 7946 +<8aaa> <8aaa> 5460 +<8ab0> <8ab0> 5611 +<8ab2> <8ab2> 3810 +<8ab9> <8ab9> 5216 +<8abc> <8abc> 6410 +<8abe> <8abe> 6377 +<8abf> <8abf> 6819 +<8ac2> <8ac2> 7186 +<8ac4> <8ac4> 5662 +<8ac7> <8ac7> 4231 +<8acb> <8acb> 7202 +<8acd> <8acd> 6589 +<8acf> <8acf> 7276 +<8ad2> <8ad2> 4437 +<8ad6> <8ad6> 4535 +<8adb> <8adb> 6345 +<8adc> <8adc> 7194 +<8ae1> <8ae1> 5717 +<8ae6> <8ae6> 7210 +<8ae7> <8ae7> 7699 +<8aea> <8aea> 6746 +<8aeb> <8aeb> 3498 +<8aed> <8aed> 6346 +<8aee> <8aee> 6506 +<8af1> <8af1> 8002 +<8af6> <8af6> 5770 +<8af7> <8af7> 7593 +<8af8> <8af8> 6774 +<8afa> <8afa> 5922 +<8afe> <8afe> 4139 +<8b00> <8b00> 4785 +<8b01> <8b01> 5818 +<8b02> <8b02> 6305 +<8b04> <8b04> 4371 +<8b0e> <8b0e> 4866 +<8b10> <8b10> 4885 +<8b14> <8b14> 7633 +<8b16> <8b16> 5543 +<8b17> <8b17> 4965 +<8b19> <8b19> 3657 +<8b1a> <8b1a> 6442 +<8b1b> <8b1b> 3556 +<8b1d> <8b1d> 5293 +<8b20> <8b20> 6164 +<8b28> <8b28> 4786 +<8b2b> <8b2b> 6634 +<8b2c> <8b2c> 4589 +<8b33> <8b33> 3935 +<8b39> <8b39> 4035 +<8b41> <8b41> 7874 +<8b49> <8b49> 6940 +<8b4e> <8b4e> 8011 +<8b4f> <8b4f> 4115 +<8b58> <8b58> 5731 +<8b5a> <8b5a> 4232 +<8b5c> <8b5c> 5072 +<8b66> <8b66> 3697 +<8b6c> <8b6c> 5217 +<8b6f> <8b6f> 5953 +<8b70> <8b70> 6411 +<8b74> <8b74> 3645 +<8b77> <8b77> 7836 +<8b7d> <8b7d> 6044 +<8b80> <8b80> 4318 +<8b8a> <8b8a> 5033 +<8b90> <8b90> 5612 +<8b92> <8b92> 7090 +<8b93> <8b93> 5898 +<8b96> <8b96> 7091 +<8b9a> <8b9a> 7072 +<8c37> <8c37> 3772 +<8c3f> <8c3f> 3726 +<8c41> <8c41> 7902 +<8c46> <8c46> 4355 +<8c48> <8c48> 4116 +<8c4a> <8c4a> 7594 +<8c4c> <8c4c> 6122 +<8c55> <8c55> 5718 +<8c5a> <8c5a> 4327 +<8c61> <8c61> 5359 +<8c6a> <8c6a> 7837 +<8c6b> <8c6b> 6045 +<8c79> <8c79> 7586 +<8c7a> <8c7a> 5719 +<8c82> <8c82> 7236 +<8c8a> <8c8a> 4723 +<8c8c> <8c8c> 4787 +<8c9d> <8c9d> 7512 +<8c9e> <8c9e> 6747 +endcidrange + +100 begincidrange +<8ca0> <8ca0> 5140 +<8ca1> <8ca1> 6583 +<8ca2> <8ca2> 3800 +<8ca7> <8ca7> 5234 +<8ca8> <8ca8> 7875 +<8ca9> <8ca9> 7495 +<8caa> <8caa> 7423 +<8cab> <8cab> 3832 +<8cac> <8cac> 7129 +<8caf> <8caf> 6613 +<8cb0> <8cb0> 5499 +<8cb3> <8cb3> 6433 +<8cb4> <8cb4> 3992 +<8cb6> <8cb6> 7528 +<8cb7> <8cb7> 4718 +<8cb8> <8cb8> 4263 +<8cbb> <8cbb> 5218 +<8cbc> <8cbc> 7195 +<8cbd> <8cbd> 6432 +<8cbf> <8cbf> 4831 +<8cc0> <8cc0> 7626 +<8cc1> <8cc1> 5169 +<8cc2> <8cc2> 4547 +<8cc3> <8cc3> 6476 +<8cc4> <8cc4> 7947 +<8cc7> <8cc7> 6507 +<8cc8> <8cc8> 3460 +<8cca> <8cca> 6635 +<8cd1> <8cd1> 7007 +<8cd3> <8cd3> 5235 +<8cda> <8cda> 4548 +<8cdc> <8cdc> 5294 +<8cde> <8cde> 5360 +<8ce0> <8ce0> 4984 +<8ce2> <8ce2> 7751 +<8ce3> <8ce3> 4719 +<8ce4> <8ce4> 7160 +<8ce6> <8ce6> 5141 +<8cea> <8cea> 7027 +<8ced> <8ced> 4299 +<8cf4> <8cf4> 4549 +<8cfb> <8cfb> 5142 +<8cfc> <8cfc> 3936 +<8cfd> <8cfd> 5364 +<8d04> <8d04> 6972 +<8d05> <8d05> 7315 +<8d07> <8d07> 6365 +<8d08> <8d08> 6941 +<8d0a> <8d0a> 7073 +<8d0d> <8d0d> 5468 +<8d13> <8d13> 6566 +<8d16> <8d16> 5544 +<8d64> <8d64> 6636 +<8d66> <8d66> 5295 +<8d6b> <8d6b> 7732 +<8d70> <8d70> 6892 +<8d73> <8d73> 4006 +<8d74> <8d74> 5143 +<8d77> <8d77> 4117 +<8d85> <8d85> 7237 +<8d8a> <8d8a> 6282 +<8d99> <8d99> 6820 +<8da3> <8da3> 7326 +<8da8> <8da8> 7277 +<8db3> <8db3> 6830 +<8dba> <8dba> 5144 +<8dbe> <8dbe> 6973 +<8dc6> <8dc6> 7442 +<8dcb> <8dcb> 4936 +<8dcc> <8dcc> 7028 +<8dcf> <8dcf> 3461 +<8ddb> <8ddb> 7488 +<8ddd> <8ddd> 3596 +<8de1> <8de1> 6637 +<8de3> <8de3> 5444 +<8de8> <8de8> 3811 +<8def> <8def> 4522 +<8df3> <8df3> 4300 +<8e0a> <8e0a> 6194 +<8e0f> <8e0f> 4237 +<8e10> <8e10> 7161 +<8e1e> <8e1e> 3597 +<8e2a> <8e2a> 6850 +<8e30> <8e30> 6347 +<8e35> <8e35> 6851 +<8e42> <8e42> 6348 +<8e44> <8e44> 6775 +<8e47> <8e47> 3610 +<8e48> <8e48> 4301 +<8e49> <8e49> 7052 +<8e4a> <8e4a> 7797 +<8e59> <8e59> 7296 +<8e5f> <8e5f> 6638 +<8e60> <8e60> 7145 +<8e74> <8e74> 7297 +<8e76> <8e76> 3982 +<8e81> <8e81> 6821 +<8e87> <8e87> 6614 +<8e8a> <8e8a> 6893 +<8e8d> <8e8d> 5878 +endcidrange + +100 begincidrange +<8eaa> <8eaa> 4643 +<8eab> <8eab> 5755 +<8eac> <8eac> 3968 +<8ec0> <8ec0> 3937 +<8eca> <8eca> 7053 +<8ecb> <8ecb> 5819 +<8ecc> <8ecc> 3988 +<8ecd> <8ecd> 3957 +<8ed2> <8ed2> 7726 +<8edf> <8edf> 5982 +<8eeb> <8eeb> 7008 +<8ef8> <8ef8> 7298 +<8efb> <8efb> 3462 +<8efe> <8efe> 5732 +<8f03> <8f03> 3887 +<8f05> <8f05> 4523 +<8f09> <8f09> 6584 +<8f12> <8f12> 7196 +<8f13> <8f13> 4686 +<8f14> <8f14> 5073 +<8f15> <8f15> 3698 +<8f1b> <8f1b> 4438 +<8f1c> <8f1c> 7356 +<8f1d> <8f1d> 8003 +<8f1e> <8f1e> 4706 +<8f1f> <8f1f> 7174 +<8f26> <8f26> 4474 +<8f27> <8f27> 5055 +<8f29> <8f29> 4985 +<8f2a> <8f2a> 4599 +<8f2f> <8f2f> 7035 +<8f33> <8f33> 6894 +<8f38> <8f38> 5613 +<8f39> <8f39> 5087 +<8f3b> <8f3b> 5088 +<8f3e> <8f3e> 6674 +<8f3f> <8f3f> 5944 +<8f44> <8f44> 7650 +<8f45> <8f45> 6276 +<8f49> <8f49> 6675 +<8f4d> <8f4d> 7175 +<8f4e> <8f4e> 3888 +<8f5d> <8f5d> 5945 +<8f5f> <8f5f> 3867 +<8f62> <8f62> 4463 +<8f9b> <8f9b> 5756 +<8f9c> <8f9c> 3761 +<8fa3> <8fa3> 4398 +<8fa6> <8fa6> 7496 +<8fa8> <8fa8> 5034 +<8fad> <8fad> 5296 +<8faf> <8faf> 5035 +<8fb0> <8fb0> 7009 +<8fb1> <8fb1> 6173 +<8fb2> <8fb2> 4177 +<8fc2> <8fc2> 6222 +<8fc5> <8fc5> 5757 +<8fce> <8fce> 6026 +<8fd1> <8fd1> 4036 +<8fd4> <8fd4> 4927 +<8fe6> <8fe6> 3463 +<8fea> <8fea> 6639 +<8feb> <8feb> 4902 +<8fed> <8fed> 7029 +<8ff0> <8ff0> 5669 +<8ff2> <8ff2> 3626 +<8ff7> <8ff7> 4867 +<8ff9> <8ff9> 6640 +<8ffd> <8ffd> 7278 +<9000> <9000> 7463 +<9001> <9001> 5559 +<9002> <9002> 3838 +<9003> <9003> 4302 +<9005> <9005> 7978 +<9006> <9006> 5954 +<9008> <9008> 7787 +<900b> <900b> 7567 +<900d> <900d> 5531 +<900f> <900f> 7469 +<9010> <9010> 7299 +<9011> <9011> 3938 +<9014> <9014> 4303 +<9015> <9015> 3699 +<9017> <9017> 4356 +<9019> <9019> 6615 +<901a> <901a> 7458 +<901d> <901d> 5399 +<901e> <901e> 4500 +<901f> <901f> 5545 +<9020> <9020> 6822 +<9021> <9021> 6917 +<9022> <9022> 5106 +<9023> <9023> 4475 +<902e> <902e> 7211 +<9031> <9031> 6895 +<9032> <9032> 7010 +<9035> <9035> 4007 +<9038> <9038> 6466 +<903c> <903c> 7615 +<903e> <903e> 6350 +endcidrange + +100 begincidrange +<9041> <9041> 4361 +<9042> <9042> 5614 +<9047> <9047> 6223 +<904a> <904a> 6349 +<904b> <904b> 6246 +<904d> <904d> 7525 +<904e> <904e> 3812 +<9050> <9050> 7627 +<9051> <9051> 7925 +<9053> <9053> 4304 +<9054> <9054> 4216 +<9055> <9055> 6306 +<9059> <9059> 6165 +<905c> <905c> 5550 +<905d> <905d> 4238 +<905e> <905e> 7212 +<9060> <9060> 6277 +<9061> <9061> 5532 +<9063> <9063> 3646 +<9069> <9069> 6641 +<906d> <906d> 6823 +<906e> <906e> 7054 +<906f> <906f> 4362 +<9072> <9072> 6974 +<9075> <9075> 6918 +<9077> <9077> 7162 +<9078> <9078> 5445 +<907a> <907a> 6351 +<907c> <907c> 4561 +<907d> <907d> 3598 +<907f> <907f> 7602 +<9080> <9080> 6166 +<9081> <9081> 4720 +<9082> <9082> 7700 +<9083> <9083> 5615 +<9084> <9084> 7896 +<9087> <9087> 6434 +<9088> <9088> 4669 +<908a> <908a> 5036 +<908f> <908f> 4381 +<9091> <9091> 6389 +<9095> <9095> 6096 +<9099> <9099> 4707 +<90a2> <90a2> 7788 +<90a3> <90a3> 4138 +<90a6> <90a6> 4966 +<90a8> <90a8> 7250 +<90aa> <90aa> 5297 +<90af> <90af> 3526 +<90b0> <90b0> 7443 +<90b1> <90b1> 3939 +<90b5> <90b5> 5533 +<90b8> <90b8> 6616 +<90c1> <90c1> 6236 +<90ca> <90ca> 3889 +<90de> <90de> 4419 +<90e1> <90e1> 3958 +<90e8> <90e8> 5145 +<90ed> <90ed> 3818 +<90f5> <90f5> 6224 +<90fd> <90fd> 4305 +<9102> <9102> 5802 +<9112> <9112> 7279 +<9115> <9115> 7714 +<9119> <9119> 5219 +<9127> <9127> 4372 +<912d> <912d> 6748 +<9132> <9132> 4210 +<9149> <9149> 6352 +<914a> <914a> 6749 +<914b> <914b> 7280 +<914c> <914c> 6519 +<914d> <914d> 4986 +<914e> <914e> 6896 +<9152> <9152> 6897 +<9162> <9162> 7238 +<9169> <9169> 4760 +<916a> <916a> 4387 +<916c> <916c> 5616 +<9175> <9175> 7964 +<9177> <9177> 7843 +<9178> <9178> 5313 +<9187> <9187> 5663 +<9189> <9189> 7327 +<918b> <918b> 7239 +<918d> <918d> 6776 +<9192> <9192> 5491 +<919c> <919c> 7281 +<91ab> <91ab> 6412 +<91ac> <91ac> 6567 +<91ae> <91ae> 7240 +<91af> <91af> 7798 +<91b1> <91b1> 4937 +<91b4> <91b4> 4509 +<91b5> <91b5> 3584 +<91c0> <91c0> 5899 +<91c7> <91c7> 7124 +<91c9> <91c9> 6353 +<91cb> <91cb> 5416 +<91cc> <91cc> 4634 +endcidrange + +100 begincidrange +<91cd> <91cd> 6925 +<91ce> <91ce> 5871 +<91cf> <91cf> 4439 +<91d0> <91d0> 4635 +<91d1> <91d1> 4131 +<91d7> <91d7> 5566 +<91d8> <91d8> 6750 +<91dc> <91dc> 5146 +<91dd> <91dd> 7374 +<91e3> <91e3> 6824 +<91e7> <91e7> 7163 +<91ea> <91ea> 6225 +<91f5> <91f5> 7125 +<920d> <920d> 4363 +<9210> <9210> 3622 +<9211> <9211> 7497 +<9212> <9212> 5329 +<9217> <9217> 6366 +<921e> <921e> 4014 +<9234> <9234> 4501 +<923a> <923a> 6082 +<923f> <923f> 6676 +<9240> <9240> 3534 +<9245> <9245> 3599 +<9249> <9249> 7752 +<9257> <9257> 3658 +<925b> <925b> 5983 +<925e> <925e> 6283 +<9262> <9262> 4938 +<9264> <9264> 3940 +<9265> <9265> 5670 +<9266> <9266> 6751 +<9280> <9280> 6378 +<9283> <9283> 7260 +<9285> <9285> 4347 +<9291> <9291> 5446 +<9293> <9293> 6677 +<9296> <9296> 5617 +<9298> <9298> 4761 +<929c> <929c> 7660 +<92b3> <92b3> 6046 +<92b6> <92b6> 3941 +<92b7> <92b7> 5534 +<92b9> <92b9> 5618 +<92cc> <92cc> 6752 +<92cf> <92cf> 7769 +<92d2> <92d2> 5107 +<92e4> <92e4> 5400 +<92ea> <92ea> 7568 +<92f8> <92f8> 3600 +<92fc> <92fc> 3557 +<9304> <9304> 4532 +<9310> <9310> 7282 +<9318> <9318> 7283 +<931a> <931a> 6590 +<931e> <931e> 5664 +<931f> <931f> 4233 +<9320> <9320> 6753 +<9321> <9321> 4118 +<9322> <9322> 6678 +<9324> <9324> 4119 +<9326> <9326> 4050 +<9328> <9328> 4811 +<932b> <932b> 5417 +<932e> <932e> 3762 +<932f> <932f> 7059 +<9348> <9348> 6027 +<934a> <934a> 4476 +<934b> <934b> 3813 +<934d> <934d> 4306 +<9354> <9354> 5803 +<935b> <935b> 4211 +<936e> <936e> 6354 +<9375> <9375> 3611 +<937c> <937c> 7375 +<937e> <937e> 6852 +<938c> <938c> 3659 +<9394> <9394> 6195 +<9396> <9396> 5564 +<939a> <939a> 7284 +<93a3> <93a3> 7789 +<93a7> <93a7> 3577 +<93ac> <93ac> 7838 +<93ad> <93ad> 7011 +<93b0> <93b0> 6467 +<93c3> <93c3> 6831 +<93d1> <93d1> 6642 +<93de> <93de> 6196 +<93e1> <93e1> 3700 +<93e4> <93e4> 4575 +<93f6> <93f6> 7036 +<9404> <9404> 7952 +<9418> <9418> 6853 +<9425> <9425> 5447 +<942b> <942b> 6679 +<9435> <9435> 7176 +<9438> <9438> 7407 +<9444> <9444> 6898 +<9451> <9452> 3527 +<945b> <945b> 3851 +endcidrange + +100 begincidrange +<947d> <947d> 7074 +<947f> <947f> 7060 +<9577> <9577> 6568 +<9580> <9580> 4846 +<9583> <9583> 5469 +<9589> <9589> 7542 +<958b> <958b> 3578 +<958f> <958f> 6367 +<9591> <9592> 7645 +<9593> <9593> 3499 +<9594> <9594> 4882 +<9598> <9598> 3535 +<95a3> <95a3> 3475 +<95a4> <95a4> 7667 +<95a5> <95a5> 5008 +<95a8> <95a8> 4008 +<95ad> <95ad> 4453 +<95b1> <95b1> 5988 +<95bb> <95bb> 5996 +<95bc> <95bc> 5820 +<95c7> <95c7> 5828 +<95ca> <95ca> 7903 +<95d4> <95d4> 7668 +<95d5> <95d5> 3983 +<95d6> <95d6> 7473 +<95dc> <95dc> 3833 +<95e1> <95e1> 7164 +<95e2> <95e2> 5029 +<961c> <961c> 5147 +<9621> <9621> 7165 +<962a> <962a> 7498 +<962e> <962e> 6123 +<9632> <9632> 4967 +<963b> <963b> 6825 +<963f> <963f> 5788 +<9640> <9640> 7391 +<9642> <9642> 7603 +<9644> <9644> 5148 +<964b> <964b> 4576 +<964c> <964c> 4724 +<964d> <964d> 3558 +<9650> <9650> 7647 +<965b> <965b> 7543 +<965c> <965c> 7669 +<965d> <965d> 5470 +<965e> <965e> 5691 +<965f> <965f> 7146 +<9662> <9662> 6278 +<9663> <9663> 7012 +<9664> <9664> 6777 +<966a> <966a> 4987 +<9670> <9670> 6384 +<9673> <9673> 7013 +<9675> <9675> 4612 +<9676> <9676> 4307 +<9677> <9677> 7661 +<9678> <9678> 4593 +<967d> <967d> 5900 +<9685> <9685> 6226 +<9686> <9686> 4603 +<968a> <968a> 4264 +<968b> <968b> 5619 +<968d> <968d> 7926 +<968e> <968e> 3727 +<9694> <9694> 3636 +<9695> <9695> 6247 +<9698> <9698> 5849 +<9699> <9699> 4022 +<969b> <969b> 6778 +<969c> <969c> 6569 +<96a3> <96a3> 4644 +<96a7> <96a8> 5620 +<96aa> <96aa> 7728 +<96b1> <96b1> 6379 +<96b7> <96b7> 4510 +<96bb> <96bb> 7147 +<96c0> <96c0> 6520 +<96c1> <96c1> 5813 +<96c4> <96c4> 6254 +<96c5> <96c5> 5789 +<96c6> <96c6> 7037 +<96c7> <96c7> 3763 +<96c9> <96c9> 7357 +<96cb> <96cb> 6919 +<96cc> <96cc> 6508 +<96cd> <96cd> 6097 +<96ce> <96ce> 6617 +<96d5> <96d5> 6826 +<96d6> <96d6> 5622 +<96d9> <96d9> 5773 +<96db> <96db> 7285 +<96dc> <96dc> 6533 +<96e2> <96e2> 4636 +<96e3> <96e3> 4142 +<96e8> <96e9> 6227 +<96ea> <96ea> 5461 +<96ef> <96ef> 4847 +<96f0> <96f0> 5170 +<96f2> <96f2> 6248 +<96f6> <96f6> 4502 +endcidrange + +100 begincidrange +<96f7> <96f7> 4550 +<96f9> <96f9> 4903 +<96fb> <96fb> 6680 +<9700> <9700> 5623 +<9706> <9706> 6754 +<9707> <9707> 7014 +<9711> <9711> 6698 +<9713> <9713> 6047 +<9716> <9716> 4651 +<9719> <9719> 6028 +<971c> <971c> 5361 +<971e> <971e> 7628 +<9727> <9727> 4832 +<9730> <9730> 5314 +<9732> <9732> 4524 +<9739> <9739> 5030 +<973d> <973d> 6779 +<9742> <9742> 4464 +<9744> <9744> 5850 +<9748> <9748> 4503 +<9751> <9751> 7203 +<9756> <9756> 6755 +<975c> <975c> 6756 +<975e> <975e> 5220 +<9761> <9761> 4868 +<9762> <9762> 4744 +<9769> <9769> 7733 +<976d> <976d> 6458 +<9774> <9774> 7876 +<9777> <9777> 6459 +<977a> <977a> 4695 +<978b> <978b> 7799 +<978d> <978d> 5814 +<978f> <978f> 3801 +<97a0> <97a0> 3950 +<97a8> <97a8> 3509 +<97ab> <97ab> 3951 +<97ad> <97ad> 7526 +<97c6> <97c6> 7166 +<97cb> <97cb> 6307 +<97d3> <97d3> 7648 +<97dc> <97dc> 4308 +<97f3> <97f3> 6385 +<97f6> <97f6> 5535 +<97fb> <97fb> 6249 +<97ff> <97ff> 7715 +<9800> <9800> 7839 +<9801> <9801> 7757 +<9802> <9802> 6757 +<9803> <9803> 3701 +<9805> <9805> 7684 +<9806> <9806> 5665 +<9808> <9808> 5624 +<980a> <980a> 6237 +<980c> <980c> 5560 +<9810> <9810> 6048 +<9811> <9811> 6124 +<9812> <9812> 4928 +<9813> <9813> 4328 +<9817> <9817> 7489 +<9818> <9818> 4504 +<982d> <982d> 4357 +<9830> <9830> 7770 +<9838> <9838> 3702 +<9839> <9839> 7464 +<983b> <983b> 5236 +<9846> <9846> 3814 +<984c> <984c> 6780 +<984d> <984d> 5857 +<984e> <984e> 5804 +<9854> <9854> 5815 +<9858> <9858> 6279 +<985a> <985a> 6681 +<985e> <985e> 4590 +<9865> <9865> 7840 +<9867> <9867> 3764 +<986b> <986b> 6682 +<986f> <986f> 7753 +<98a8> <98a8> 7595 +<98af> <98af> 5330 +<98b1> <98b1> 7444 +<98c4> <98c4> 7588 +<98c7> <98c7> 7587 +<98db> <98db> 5221 +<98dc> <98dc> 5004 +<98df> <98df> 5733 +<98e1> <98e1> 5551 +<98e2> <98e2> 4120 +<98ed> <98ed> 7362 +<98ee> <98ee> 6386 +<98ef> <98ef> 4929 +<98f4> <98f4> 6435 +<98fc> <98fc> 5298 +<98fd> <98fd> 7569 +<98fe> <98fe> 5734 +<9903> <9903> 3890 +<9909> <9909> 7716 +<990a> <990a> 5901 +<990c> <990c> 6436 +<9910> <9910> 7075 +endcidrange + +100 begincidrange +<9913> <9913> 5790 +<9918> <9918> 5946 +<991e> <991e> 6683 +<9920> <9920> 5056 +<9928> <9928> 3834 +<9945> <9945> 4687 +<9949> <9949> 4037 +<994b> <994b> 3989 +<994c> <994c> 7076 +<994d> <994d> 5448 +<9951> <9951> 4121 +<9952> <9952> 6167 +<9954> <9954> 6098 +<9957> <9957> 7717 +<9996> <9996> 5625 +<9999> <9999> 7718 +<999d> <999d> 7613 +<99a5> <99a5> 5089 +<99a8> <99a8> 7790 +<99ac> <99ac> 4661 +<99ad> <99ad> 5909 +<99ae> <99ae> 7596 +<99b1> <99b1> 7392 +<99b3> <99b3> 7358 +<99b4> <99b4> 5666 +<99b9> <99b9> 6468 +<99c1> <99c1> 4904 +<99d0> <99d0> 6899 +<99d1> <99d1> 4174 +<99d2> <99d2> 3942 +<99d5> <99d5> 3464 +<99d9> <99d9> 5149 +<99dd> <99dd> 7393 +<99df> <99df> 5299 +<99ed> <99ed> 7701 +<99f1> <99f1> 4388 +<99ff> <99ff> 6920 +<9a01> <9a01> 5240 +<9a08> <9a08> 5057 +<9a0e> <9a0f> 4122 +<9a19> <9a19> 7527 +<9a2b> <9a2b> 3612 +<9a30> <9a30> 4373 +<9a36> <9a36> 7286 +<9a37> <9a37> 5536 +<9a40> <9a40> 4725 +<9a43> <9a43> 7589 +<9a45> <9a45> 3943 +<9a4d> <9a4d> 7965 +<9a55> <9a55> 3891 +<9a57> <9a57> 7729 +<9a5a> <9a5a> 3703 +<9a5b> <9a5b> 5955 +<9a5f> <9a5f> 7328 +<9a62> <9a62> 4454 +<9a65> <9a65> 4124 +<9a69> <9a69> 7897 +<9a6a> <9a6a> 4455 +<9aa8> <9aa8> 3785 +<9ab8> <9ab8> 7702 +<9ad3> <9ad3> 5626 +<9ad4> <9ad4> 7213 +<9ad8> <9ad8> 3765 +<9ae5> <9ae5> 5997 +<9aee> <9aee> 4939 +<9b1a> <9b1a> 5627 +<9b27> <9b27> 4562 +<9b2a> <9b2a> 7470 +<9b31> <9b31> 6251 +<9b3c> <9b3c> 3993 +<9b41> <9b41> 3863 +<9b42> <9b42> 7849 +<9b43> <9b43> 4940 +<9b44> <9b44> 4995 +<9b45> <9b45> 4721 +<9b4f> <9b4f> 6308 +<9b54> <9b54> 4662 +<9b5a> <9b5a> 5910 +<9b6f> <9b6f> 4525 +<9b8e> <9b8e> 6699 +<9b91> <9b91> 7570 +<9b9f> <9b9f> 5816 +<9bab> <9bab> 3892 +<9bae> <9bae> 5449 +<9bc9> <9bc9> 4637 +<9bd6> <9bd6> 7204 +<9be4> <9be4> 3783 +<9be8> <9be8> 3704 +<9c0d> <9c0d> 7287 +<9c10> <9c10> 5805 +<9c12> <9c12> 5090 +<9c15> <9c15> 7629 +<9c25> <9c25> 7898 +<9c32> <9c32> 6076 +<9c3b> <9c3b> 4688 +<9c47> <9c47> 3559 +<9c49> <9c49> 5039 +<9c57> <9c57> 4645 +<9ce5> <9ce5> 6827 +<9ce7> <9ce7> 5150 +endcidrange + +100 begincidrange +<9ce9> <9ce9> 3944 +<9cf3> <9cf3> 5108 +<9cf4> <9cf4> 4762 +<9cf6> <9cf6> 5984 +<9d09> <9d09> 5791 +<9d1b> <9d1b> 6280 +<9d26> <9d26> 5839 +<9d28> <9d28> 5832 +<9d3b> <9d3b> 7862 +<9d51> <9d51> 3647 +<9d5d> <9d5d> 5792 +<9d60> <9d60> 3773 +<9d61> <9d61> 4833 +<9d6c> <9d6c> 5180 +<9d72> <9d72> 6521 +<9da9> <9da9> 4794 +<9daf> <9daf> 5860 +<9db4> <9db4> 7634 +<9dc4> <9dc4> 3728 +<9dd7> <9dd7> 3945 +<9df2> <9df2> 7329 +<9df8> <9df8> 8012 +<9df9> <9df9> 6393 +<9dfa> <9dfa> 4526 +<9e1a> <9e1a> 5861 +<9e1e> <9e1e> 4396 +<9e75> <9e75> 4527 +<9e79> <9e79> 7662 +<9e7d> <9e7d> 5998 +<9e7f> <9e7f> 4533 +<9e92> <9e92> 4125 +<9e93> <9e93> 4534 +<9e97> <9e97> 4456 +<9e9d> <9e9d> 5300 +<9e9f> <9e9f> 4646 +<9ea5> <9ea5> 4726 +<9eb4> <9eb4> 3952 +<9eb5> <9eb5> 4745 +<9ebb> <9ebb> 4663 +<9ebe> <9ebe> 8004 +<9ec3> <9ec3> 7927 +<9ecd> <9ecd> 5401 +<9ece> <9ece> 4457 +<9ed1> <9ed1> 8018 +<9ed4> <9ed4> 3623 +<9ed8> <9ed8> 4835 +<9edb> <9edb> 4265 +<9edc> <9edc> 7305 +<9ede> <9ede> 6700 +<9ee8> <9ee8> 4249 +<9ef4> <9ef4> 4869 +<9f07> <9f07> 6077 +<9f08> <9f08> 5040 +<9f0e> <9f0e> 6758 +<9f13> <9f13> 3766 +<9f20> <9f20> 5402 +<9f3b> <9f3b> 5222 +<9f4a> <9f4a> 6781 +<9f4b> <9f4b> 6585 +<9f4e> <9f4e> 6586 +<9f52> <9f52> 7359 +<9f5f> <9f5f> 6618 +<9f61> <9f61> 4505 +<9f67> <9f67> 5462 +<9f6a> <9f6a> 7061 +<9f6c> <9f6c> 5911 +<9f77> <9f77> 5806 +<9f8d> <9f8d> 4563 +<9f90> <9f90> 4968 +<9f95> <9f95> 3529 +<9f9c> <9f9c> 3946 + 1086 + 9333 + 1088 + 9335 + 1089 + 9337 + 1093 + 9342 + 1101 + 9343 + 1106 + 9345 + 1107 + 9348 + 1108 + 9355 + 1110 + 9356 + 1113 + 9362 + 1115 + 9364 + 1116 + 9367 + 1117 + 9377 + 1118 + 9378 + 1119 +endcidrange + +100 begincidrange + 9384 + 1120 + 9387 + 1121 + 9390 + 1122 + 9409 + 1124 + 9411 + 1125 + 9413 + 1127 + 9414 + 1128 + 9419 + 1130 + 9420 + 1134 + 9422 + 1138 + 9425 + 1139 + 9428 + 1140 + 9435 + 1142 + 9436 + 1145 + 9442 + 1148 + 9443 + 1149 + 9445 + 1151 + 9452 + 1153 + 9453 + 1156 + 9456 + 1157 + 9458 + 1158 + 9461 + 1159 + 9464 + 1160 + 9472 + 1161 + 9473 + 1162 + 9481 + 1164 + 9483 + 1165 + 9485 + 1167 + 9486 + 1168 + 9487 + 1169 + 9489 + 1172 + 9490 + 1173 + 9491 + 1175 + 9496 + 1177 + 9498 + 1178 + 9501 + 1179 + 9502 + 1180 + 9507 + 1182 + 9508 + 1183 + 9509 + 1184 + 9515 + 1185 + 9518 + 1186 + 9521 + 1187 + 9529 + 1188 + 9531 + 1190 + 9537 + 1192 + 9539 + 1193 + 9542 + 1194 + 9549 + 1196 + 9550 + 1197 +endcidrange + +100 begincidrange + 9551 + 1198 + 9557 + 1199 + 9560 + 1200 + 9563 + 1201 + 9571 + 1202 + 9572 + 1203 + 9580 + 1205 + 9582 + 1206 + 9584 + 1210 + 9588 + 1213 + 9589 + 1214 + 9590 + 1216 + 9595 + 1218 + 9597 + 1219 + 9600 + 1220 + 9611 + 1222 + 9617 + 1223 + 9635 + 1224 + 9643 + 1226 + 9645 + 1227 + 9648 + 1228 + 9655 + 1230 + 9656 + 1231 + 9664 + 1232 + 9667 + 1233 + 9670 + 1234 + 9689 + 1236 + 9691 + 1237 + 1238 + 9693 + 1240 + 9699 + 1242 + 9700 + 1243 + 9701 + 1244 + 9707 + 1245 + 9734 + 1247 + 9736 + 1248 + 9738 + 1250 + 9739 + 1251 + 9744 + 1253 + 9745 + 1254 + 9746 + 1256 + 9749 + 1257 + 9750 + 1260 + 9751 + 1261 + 9754 + 1262 + 9755 + 1263 + 9760 + 1265 + 9761 + 1268 + 9764 + 1269 + 9766 + 1271 + 9768 +endcidrange + +100 begincidrange + 1272 + 9771 + 1273 + 9778 + 1275 + 9779 + 1278 + 9785 + 1280 + 9791 + 1281 + 9838 + 1284 + 9839 + 1285 + 9842 + 1286 + 9849 + 1288 + 9850 + 1291 + 9856 + 1293 + 9858 + 1294 + 9869 + 1295 + 9871 + 1296 + 9872 + 1297 + 9878 + 1298 + 9881 + 1299 + 9884 + 9887 + 1300 + 9894 + 1302 + 9898 + 1303 + 9900 + 1304 + 9927 + 1306 + 9929 + 1307 + 9930 + 1308 + 9931 + 1309 + 9938 + 1311 + 9939 + 1312 + 9940 + 1315 + 9944 + 1317 + 9950 + 1318 + 9961 + 1320 + 9967 + 1322 + 9986 + 1323 + 9992 + 1324 + 9995 + 1325 + 9998 + 1326 + 10005 + 1328 + 10008 + 1329 + 10014 + 1330 + 10041 + 1332 + 10043 + 1333 + 10046 + 1334 + 10052 + 1337 + 10053 + 1338 + 10054 + 1340 + 10059 + 1341 + 10066 + 1342 + 10077 + 1344 + 10083 + 1346 +endcidrange + +100 begincidrange + 10085 + 1347 + 10088 + 1348 + 10095 + 1350 + 10097 + 1351 + 10104 + 1352 + 10107 + 1353 + 10110 + 1354 + 10117 + 1356 + 10127 + 1357 + 10154 + 1359 + 10156 + 1360 + 10157 + 1361 + 10158 + 1362 + 10159 + 1363 + 10163 + 1366 + 10164 + 1367 + 10165 + 1368 + 10168 + 1369 + 10198 + 1371 + 10200 + 1372 + 10203 + 1373 + 10210 + 1375 + 10211 + 1376 + 10212 + 1377 + 10218 + 1380 + 10219 + 1381 + 10221 + 1385 + 10226 + 1387 + 10227 + 1392 + 10228 + 1393 + 10229 + 1396 + 10231 + 1397 + 10234 + 1398 + 10241 + 1400 + 10242 + 1403 + 10248 + 1405 + 10250 + 1406 + 10253 + 1407 + 10260 + 1408 + 10264 + 10290 + 1409 + 10298 + 1411 + 10299 + 1413 + 10302 + 1414 + 10303 + 1416 + 10307 + 1418 + 10308 + 1421 + 10313 + 1424 + 10315 + 1425 + 10318 + 1426 + 10325 +endcidrange + +100 begincidrange + 1428 + 10326 + 1431 + 10332 + 1433 + 10334 + 1434 + 10337 + 1435 + 10344 + 1437 + 10346 + 1439 + 10348 + 1440 + 10351 + 1441 + 10354 + 1442 + 10377 + 1444 + 10379 + 1445 + 10382 + 1446 + 10383 + 1447 + 10388 + 1449 + 10389 + 1450 + 10390 + 1451 + 10394 + 1454 + 10397 + 1455 + 10400 + 1456 + 10411 + 1457 + 10446 + 1458 + 10449 + 1459 + 10452 + 1460 + 10459 + 1462 + 10460 + 1463 + 10468 + 1465 + 10470 + 1466 + 10473 + 1467 + 10481 + 1468 + 10482 + 1469 + 10483 + 10485 + 1470 + 10489 + 1472 + 10491 + 1473 + 10493 + 1475 + 10500 + 1477 + 10501 + 1478 + 10502 + 1479 + 10508 + 1480 + 10527 + 1481 + 10534 + 1482 + 10561 + 1483 + 10564 + 1484 + 10567 + 1485 + 10574 + 1487 + 10584 + 1489 + 10590 + 1490 + 10597 + 1492 + 10600 + 1493 + 10606 + 1495 +endcidrange + +100 begincidrange + 10608 + 1496 + 10611 + 1499 + 10616 + 1501 + 10617 + 1502 + 10618 + 1504 + 10621 + 1505 + 10622 + 1506 + 10625 + 1507 + 10628 + 1508 + 10647 + 1510 + 10649 + 1511 + 10652 + 1512 + 10653 + 1513 + 10658 + 1515 + 10659 + 1516 + 10660 + 1517 + 10664 + 1518 + 10665 + 1521 + 10666 + 1522 + 10668 + 1527 + 10671 + 1530 + 10672 + 1535 + 1536 + 10675 + 1538 + 10677 + 1539 + 10680 + 1540 + 10687 + 1542 + 10688 + 1545 + 10694 + 1546 + 10749 + 1549 + 10750 + 1550 + 10752 + 1552 + 10753 + 1554 + 10757 + 1556 + 10758 + 1557 + 10759 + 1558 + 10760 + 1559 + 10762 + 1560 + 10763 + 1562 + 10765 + 1563 + 10768 + 1564 + 10775 + 1566 + 10776 + 1569 + 10782 + 1570 + 10785 + 1571 + 10788 + 1572 + 10799 + 1574 + 10805 + 1575 + 10808 + 1576 + 10831 + 1578 + 10833 +endcidrange + +100 begincidrange + 1579 + 10835 + 1581 + 10836 + 1582 + 10837 + 1583 + 10840 + 1585 + 10841 + 1586 + 10842 + 1587 + 10843 + 1588 + 10844 + 1589 + 10846 + 1590 + 10849 + 1591 + 10852 + 1592 + 10871 + 10874 + 1593 + 10890 + 1594 + 10897 + 1595 + 10900 + 1596 + 10903 + 1597 + 10910 + 1599 + 10911 + 1600 + 10919 + 1601 + 10946 + 1603 + 10948 + 1604 + 10951 + 1605 + 10958 + 1607 + 10959 + 1608 + 10960 + 1609 + 10966 + 1610 + 10985 + 1611 + 10992 + 1612 + 11012 + 1613 + 11018 + 1614 + 11021 + 1615 + 11024 + 1616 + 11032 + 1617 + 11033 + 1618 + 11034 + 1619 + 11040 + 1620 + 11043 + 1621 + 11046 + 1622 + 11053 + 1623 + 11057 + 1624 + 11063 + 1626 + 11065 + 1627 + 11067 + 1629 + 11068 + 1630 + 11073 + 1632 + 11074 + 1633 + 11075 + 1634 + 11081 + 11088 + 1635 + 11108 +endcidrange + +100 begincidrange + 1637 + 11110 + 1638 + 11112 + 1640 + 11119 + 1642 + 11120 + 1646 + 11125 + 1648 + 11127 + 1649 + 11130 + 1650 + 11137 + 1652 + 11138 + 1655 + 11143 + 1658 + 11145 + 1659 + 11148 + 1660 + 11155 + 1662 + 11156 + 1665 + 11218 + 1667 + 11220 + 1668 + 11223 + 1669 + 11224 + 1671 + 11228 + 1673 + 11229 + 1676 + 11234 + 1679 + 11236 + 1680 + 11239 + 1681 + 11246 + 1683 + 11247 + 1686 + 11253 + 1687 + 11272 + 11291 + 1688 + 11307 + 1690 + 11309 + 1691 + 11312 + 1692 + 11324 + 1693 + 11330 + 1694 + 11337 + 1695 + 11356 + 1696 + 11383 + 1697 + 11386 + 1698 + 11437 + 1700 + 11439 + 1701 + 11442 + 1702 + 11448 + 1704 + 11452 + 1705 + 11486 + 1706 + 11513 + 1707 + 11516 + 1708 + 11519 + 1709 + 11526 + 1711 + 11529 + 1712 + 11563 + 1714 + 11565 + 1715 +endcidrange + +100 begincidrange + 11567 + 1717 + 11574 + 1719 + 11575 + 1720 + 11583 + 1721 + 11586 + 1722 + 11589 + 1723 + 11596 + 1725 + 11606 + 1726 + 11609 + 1727 + 11612 + 1728 + 11619 + 1730 + 11620 + 1731 + 11621 + 1732 + 11627 + 1734 + 11629 + 1735 + 11632 + 1736 + 11639 + 1738 + 11640 + 1742 + 11643 + 1746 + 11645 + 1747 + 11648 + 1748 + 11655 + 1750 + 11656 + 1753 + 11662 + 1755 + 11664 + 1756 + 11678 + 1757 + 11679 + 1758 + 11713 + 1760 + 11715 + 1761 + 11718 + 1762 + 11725 + 1764 + 1765 + 11726 + 1767 + 11731 + 1770 + 11733 + 1771 + 11736 + 1772 + 11743 + 1774 + 11744 + 1775 + 11745 + 1776 + 11751 + 1778 + 11753 + 1779 + 11756 + 1780 + 11763 + 1782 + 11764 + 1785 + 11770 + 1786 + 11773 + 1787 + 11785 + 1788 + 11786 + 1789 + 11794 + 1791 + 11796 + 1792 + 11799 +endcidrange + +100 begincidrange + 1793 + 11806 + 1795 + 11807 + 1796 + 11808 + 1797 + 11814 + 1798 + 11817 + 1799 + 11833 + 1800 + 11859 + 1801 + 11866 + 1802 + 11869 + 1803 + 11872 + 1804 + 11879 + 1806 + 11880 + 1807 + 11881 + 1808 + 11887 + 1809 + 11890 + 1810 + 11893 + 1811 + 11901 + 1812 + 11902 + 1813 + 11903 + 1814 + 11909 + 1816 + 11911 + 1817 + 11914 + 1818 + 11921 + 1820 + 11922 + 1821 + 11923 + 11925 + 1822 + 11929 + 1823 + 11948 + 1824 + 11955 + 1825 + 11982 + 1827 + 11984 + 1828 + 11987 + 1829 + 11994 + 1830 + 11996 + 1831 + 11997 + 1832 + 12003 + 1834 + 12005 + 1835 + 12008 + 1836 + 12015 + 1838 + 12016 + 1839 + 12017 + 1840 + 12023 + 1842 + 12025 + 1843 + 12028 + 1844 + 12035 + 1846 + 12036 + 1847 + 12037 + 1849 + 12039 + 1851 + 12068 + 1853 + 12070 + 1854 +endcidrange + +100 begincidrange + 12073 + 1855 + 12080 + 1857 + 12081 + 1858 + 12082 + 1859 + 12088 + 1861 + 12090 + 1862 + 12091 + 1867 + 12096 + 1869 + 12097 + 1870 + 12098 + 1872 + 12100 + 1873 + 12101 + 1876 + 12103 + 1877 + 12106 + 1878 + 12113 + 1880 + 12114 + 1884 + 12119 + 1886 + 12125 + 1887 + 12137 + 1888 + 12171 + 1890 + 12173 + 1891 + 12176 + 1892 + 12177 + 1893 + 12182 + 1895 + 12183 + 1896 + 12184 + 1898 + 12188 + 1901 + 12190 + 1902 + 12193 + 1903 + 12200 + 1905 + 12201 + 1908 + 12207 + 1910 + 12209 + 1911 + 12212 + 1912 + 12222 + 1915 + 12223 + 1916 + 12227 + 1917 + 12254 + 1919 + 12255 + 1921 + 12258 + 1922 + 12259 + 1923 + 12264 + 1925 + 12265 + 1926 + 12266 + 1927 + 12272 + 1928 + 12275 + 1929 + 12290 + 1931 + 12324 + 1932 + 12327 + 1933 + 12330 + 1934 +endcidrange + +100 begincidrange + 12338 + 1935 + 12339 + 1936 + 12340 + 1937 + 12346 + 1938 + 12349 + 1939 + 12352 + 1940 + 12360 + 1941 + 12361 + 1942 + 12369 + 1945 + 12370 + 1946 + 12372 + 1950 + 12377 + 1952 + 12378 + 1953 + 12379 + 1954 + 12382 + 1955 + 12383 + 1957 + 12386 + 1958 + 12389 + 1959 + 12397 + 1960 + 12398 + 1961 + 12406 + 1962 + 12433 + 1963 + 12436 + 1964 + 12439 + 1965 + 12458 + 1966 + 12461 + 1967 + 12464 + 1968 + 12471 + 1969 + 12473 + 1970 + 12481 + 1971 + 12484 + 1972 + 12487 + 1973 + 12494 + 1974 + 12496 + 1975 + 12532 + 1977 + 12534 + 1978 + 1979 + 12536 + 1980 + 12537 + 1981 + 12542 + 1983 + 12543 + 1986 + 12544 + 1987 + 12545 + 1988 + 12547 + 1993 + 12549 + 1998 + 12553 + 2000 + 12554 + 2001 + 12555 + 2002 + 12558 + 2003 + 12560 + 2005 + 12562 +endcidrange + +100 begincidrange + 2006 + 12565 + 2007 + 12572 + 2009 + 12573 + 2012 + 12576 + 2013 + 12578 + 2015 + 12580 + 2016 + 12592 + 2017 + 12630 + 2019 + 12632 + 2020 + 12634 + 2022 + 12635 + 2023 + 12640 + 2025 + 12641 + 2026 + 12642 + 2028 + 12647 + 2030 + 12649 + 2031 + 12651 + 2033 + 12658 + 2035 + 12659 + 2038 + 12665 + 2040 + 12667 + 2041 + 12670 + 2042 + 12678 + 2043 + 12679 + 2046 + 12682 + 2047 + 12684 + 2048 + 12687 + 2049 + 12710 + 2052 + 12711 + 2053 + 12714 + 12717 + 2054 + 12721 + 2056 + 12722 + 2057 + 12723 + 2058 + 12729 + 2059 + 12732 + 2060 + 12747 + 2061 + 12754 + 2062 + 12773 + 2063 + 12780 + 2065 + 12782 + 2066 + 12785 + 2067 + 12792 + 2069 + 12802 + 2070 + 12805 + 2071 + 12828 + 2073 + 12830 + 2074 + 12832 + 2078 + 12837 + 2080 + 12838 + 2081 +endcidrange + +100 begincidrange + 12839 + 2082 + 12842 + 2084 + 12843 + 2085 + 12850 + 2086 + 12861 + 2087 + 12868 + 2088 + 12895 + 2090 + 12897 + 2091 + 12900 + 2092 + 12912 + 2093 + 12918 + 2094 + 12921 + 2095 + 12924 + 2096 + 12931 + 2097 + 12933 + 2098 + 12934 + 2099 + 12940 + 2101 + 12942 + 2102 + 12945 + 2103 + 12952 + 2105 + 12953 + 2106 + 12989 + 2108 + 12991 + 2109 + 12994 + 2110 + 12995 + 2111 + 13000 + 2113 + 13001 + 2114 + 13002 + 2117 + 13006 + 2119 + 13008 + 2120 + 13011 + 2121 + 13012 + 2122 + 13017 + 2124 + 13018 + 2127 + 13023 + 2130 + 13025 + 2131 + 13028 + 2132 + 13035 + 2134 + 13036 + 2137 + 13042 + 2139 + 13056 + 2140 + 13095 + 2142 + 13097 + 2143 + 13099 + 2145 + 13106 + 2146 + 13108 + 2149 + 13114 + 13133 + 2150 + 13134 + 2151 + 13140 + 2153 + 13154 +endcidrange + +100 begincidrange + 2155 + 13155 + 2158 + 13189 + 2160 + 13191 + 2161 + 13194 + 2162 + 13201 + 2164 + 13204 + 2165 + 13266 + 2166 + 13293 + 2167 + 13313 + 2168 + 13319 + 2170 + 13321 + 2171 + 13324 + 2172 + 13331 + 2173 + 13333 + 2174 + 13334 + 13364 + 2175 + 13424 + 2176 + 13444 + 2177 + 13450 + 2178 + 13453 + 2179 + 13456 + 2180 + 13463 + 2182 + 13501 + 2184 + 13503 + 2185 + 13506 + 2186 + 13513 + 2188 + 13514 + 2189 + 13515 + 2190 + 13521 + 2192 + 13522 + 2194 + 13524 + 2198 + 13529 + 2200 + 13530 + 2203 + 13533 + 2204 + 13535 + 2206 + 13537 + 2207 + 13540 + 2208 + 13547 + 2210 + 13548 + 2213 + 13554 + 2215 + 13556 + 2216 + 13559 + 2217 + 13566 + 2219 + 13567 + 2220 + 13568 + 2221 + 13574 + 2222 + 13577 + 2223 + 13580 + 2224 + 13587 + 2225 + 13591 + 2226 +endcidrange + +100 begincidrange + 13597 + 2231 + 13599 + 2233 + 13600 + 2235 + 13604 + 2237 + 13605 + 2240 + 13609 + 2241 + 13610 + 2243 + 13612 + 2244 + 13615 + 2245 + 13622 + 2247 + 13623 + 2250 + 13629 + 2252 + 13631 + 2253 + 13634 + 2254 + 13641 + 2256 + 13642 + 2259 + 13648 + 2260 + 13651 + 2261 + 13654 + 2262 + 13666 + 2263 + 13672 + 2266 + 13673 + 2267 + 13676 + 2268 + 13677 + 2269 + 13682 + 2271 + 13683 + 2272 + 13684 + 2273 + 13687 + 2274 + 13689 + 2276 + 13691 + 2277 + 13694 + 2278 + 13706 + 2279 + 13712 + 2280 + 13715 + 2281 + 13718 + 2282 + 13725 + 2283 + 13727 + 2285 + 13734 + 2286 + 13737 + 2287 + 13740 + 2288 + 13747 + 2290 + 13748 + 2291 + 13756 + 2293 + 13758 + 2294 + 13761 + 2295 + 13768 + 2297 + 13769 + 2298 + 13770 + 2299 + 13776 + 2301 + 13778 + 2302 +endcidrange + +100 begincidrange + 13780 + 2304 + 13787 + 2306 + 13788 + 2307 + 13789 + 2308 + 13790 + 2309 + 13791 + 2311 + 13792 + 2312 + 13811 + 2313 + 13818 + 2315 + 13820 + 2316 + 13823 + 2317 + 13830 + 2318 + 13834 + 2319 + 13840 + 2321 + 13842 + 2322 + 13845 + 2323 + 13852 + 2325 + 13853 + 2326 + 13854 + 2327 + 13860 + 2329 + 13866 + 2330 + 13873 + 2331 + 13875 + 2332 + 13876 + 2333 + 13882 + 2335 + 13884 + 2336 + 13887 + 2338 + 13893 + 2340 + 13894 + 2341 + 13895 + 2342 + 13929 + 2344 + 13931 + 2345 + 13933 + 2347 + 13939 + 2350 + 13940 + 2351 + 13941 + 2352 + 13945 + 2353 + 13946 + 2355 + 13947 + 2357 + 13950 + 2358 + 13957 + 2360 + 13959 + 2362 + 13964 + 2365 + 13966 + 2366 + 13969 + 2367 + 13976 + 2369 + 13978 + 2371 + 14005 + 2372 + 14039 + 2374 + 14041 + 2375 +endcidrange + +100 begincidrange + 14044 + 2376 + 14045 + 2377 + 14050 + 2379 + 14052 + 2381 + 14058 + 2382 + 14061 + 2383 + 14064 + 2384 + 14115 + 2385 + 14138 + 2387 + 14140 + 2388 + 14142 + 2390 + 14143 + 2391 + 14148 + 2393 + 14151 + 2394 + 14157 + 2396 + 14159 + 14166 + 2397 + 14174 + 2398 + 14181 + 2399 + 14200 + 2400 + 14207 + 2401 + 14210 + 2402 + 14213 + 2403 + 14220 + 2405 + 14230 + 2406 + 14257 + 2408 + 14259 + 2409 + 14262 + 2410 + 14269 + 2412 + 14272 + 2413 + 14278 + 2414 + 14297 + 2415 + 14304 + 2416 + 14331 + 2417 + 14334 + 2418 + 14378 + 2419 + 14384 + 2421 + 14386 + 2422 + 14389 + 2423 + 14390 + 2424 + 2425 + 14394 + 2427 + 14404 + 2428 + 14407 + 2429 + 14410 + 2430 + 14417 + 2431 + 14428 + 2433 + 14430 + 2434 + 14433 + 2435 + 14440 + 2437 + 14441 + 2438 +endcidrange + +100 begincidrange + 14442 + 2439 + 14448 + 2441 + 14450 + 2444 + 14451 + 2447 + 14455 + 2450 + 14456 + 2453 + 14459 + 2455 + 14460 + 2457 + 14462 + 2458 + 14465 + 2459 + 14472 + 2461 + 14473 + 2464 + 14479 + 2466 + 14481 + 2467 + 14484 + 2468 + 14486 + 2469 + 14490 + 2471 + 14491 + 2472 + 14492 + 2473 + 14495 + 2474 + 14496 + 2476 + 14499 + 2477 + 14502 + 2478 + 14510 + 2479 + 14520 + 2481 + 14522 + 2483 + 14523 + 2487 + 14528 + 2494 + 14529 + 2495 + 14530 + 2496 + 14531 + 2498 + 14533 + 2499 + 14536 + 2500 + 14543 + 2502 + 14544 + 2503 + 14545 + 2504 + 14551 + 2507 + 14552 + 2508 + 14555 + 2509 + 14556 + 2511 + 2515 + 14560 + 2517 + 14563 + 2521 + 14566 + 2522 + 14569 + 2523 + 14576 + 2525 + 14577 + 2527 + 14584 + 2529 + 14586 + 2530 + 14589 + 2533 + 14590 +endcidrange + +100 begincidrange + 2534 + 14592 + 2537 + 14593 + 2538 + 14594 + 2539 + 14595 + 2540 + 14599 + 2542 + 14601 + 2543 + 14604 + 2544 + 14611 + 2546 + 14612 + 2549 + 14618 + 2551 + 14620 + 2552 + 14631 + 2553 + 14633 + 2554 + 14634 + 2555 + 14640 + 2557 + 14642 + 2558 + 14645 + 2559 + 14652 + 2561 + 14653 + 2562 + 14654 + 2563 + 14660 + 2565 + 14662 + 2566 + 14665 + 2567 + 14672 + 2569 + 14673 + 2570 + 14674 + 2571 + 14680 + 2573 + 14682 + 2574 + 14685 + 2577 + 14690 + 2579 + 14691 + 2580 + 14692 + 2581 + 14698 + 2583 + 14700 + 2584 + 14703 + 2585 + 14710 + 2587 + 14712 + 2589 + 14718 + 2591 + 14720 + 2592 + 14723 + 2593 + 14730 + 2595 + 14733 + 14735 + 2596 + 14739 + 2598 + 14741 + 2599 + 14744 + 2600 + 14751 + 2602 + 14752 + 2603 + 14753 + 2604 + 14759 + 2606 +endcidrange + +100 begincidrange + 14761 + 2607 + 14764 + 2608 + 14771 + 2610 + 14772 + 2611 + 14773 + 2612 + 14774 + 2613 + 14778 + 2615 + 14780 + 2616 + 14783 + 2617 + 14788 + 2618 + 14789 + 2620 + 14790 + 2621 + 14791 + 2629 + 14794 + 2630 + 14797 + 2631 + 14804 + 2632 + 14806 + 2633 + 14814 + 2635 + 14816 + 2636 + 14819 + 2639 + 14823 + 2642 + 14824 + 2646 + 14827 + 2647 + 14828 + 2649 + 14830 + 2650 + 14831 + 2653 + 14832 + 2654 + 14837 + 2656 + 14838 + 2660 + 14843 + 2662 + 14845 + 2663 + 14848 + 2664 + 14855 + 2666 + 14856 + 2669 + 14862 + 2671 + 14864 + 2672 + 14865 + 2673 + 14866 + 2674 + 14873 + 2675 + 14877 + 2676 + 14883 + 2677 + 14886 + 2678 + 14889 + 2679 + 14908 + 2681 + 14910 + 2682 + 14913 + 2683 + 14914 + 2684 + 14919 + 2686 + 14920 + 2687 + 14921 + 2689 +endcidrange + +100 begincidrange + 14926 + 2691 + 14928 + 2692 + 14931 + 2693 + 14938 + 2695 + 14939 + 2696 + 14940 + 2697 + 14946 + 2698 + 14949 + 2699 + 14952 + 2700 + 14959 + 2702 + 14961 + 2704 + 14967 + 2705 + 14994 + 2707 + 14996 + 2708 + 14999 + 2709 + 15000 + 2710 + 15005 + 2712 + 15006 + 2713 + 15007 + 2716 + 15010 + 2719 + 15016 + 2720 + 15024 + 2721 + 15025 + 2722 + 15026 + 2723 + 15032 + 2724 + 15051 + 2726 + 15057 + 2727 + 15060 + 2728 + 15063 + 2729 + 15070 + 2731 + 15071 + 2732 + 15072 + 2733 + 15078 + 2735 + 15080 + 2736 + 15096 + 2737 + 15102 + 2739 + 15104 + 2740 + 15107 + 2743 + 15112 + 2745 + 15113 + 2746 + 15114 + 2747 + 15120 + 2748 + 15139 + 2749 + 15146 + 2750 + 15173 + 2752 + 15175 + 2753 + 15178 + 2754 + 15185 + 2756 + 15186 + 2757 + 15194 + 2758 +endcidrange + +100 begincidrange + 15197 + 2759 + 15200 + 2760 + 15207 + 2761 + 15218 + 2763 + 15220 + 2764 + 15223 + 2765 + 15230 + 2767 + 15231 + 2768 + 15232 + 2769 + 15266 + 2771 + 15268 + 2772 + 15270 + 2774 + 15271 + 2775 + 15276 + 2777 + 15277 + 2778 + 15278 + 2780 + 15280 + 2782 + 15281 + 2784 + 15283 + 2785 + 15284 + 2786 + 15285 + 2787 + 15287 + 2788 + 15291 + 2790 + 15292 + 2793 + 15298 + 2795 + 15300 + 2796 + 15303 + 2797 + 15310 + 2799 + 15311 + 2802 + 15317 + 2803 + 15320 + 2804 + 15336 + 2805 + 15370 + 2807 + 15372 + 2808 + 15375 + 2809 + 15382 + 2811 + 15383 + 2814 + 15389 + 2815 + 15409 + 2816 + 15415 + 2817 + 15434 + 2818 + 15469 + 2820 + 15471 + 2821 + 15474 + 2822 + 15481 + 2824 + 15482 + 2825 + 15483 + 2826 + 15484 + 2827 + 15488 + 2829 + 15494 + 2830 +endcidrange + +100 begincidrange + 15505 + 2831 + 15512 + 15523 + 2832 + 15531 + 2833 + 15538 + 2834 + 15541 + 2835 + 15544 + 2836 + 15551 + 2838 + 15582 + 2839 + 15588 + 2841 + 15590 + 2842 + 15593 + 2843 + 15600 + 2845 + 15603 + 2846 + 15609 + 2847 + 15628 + 2849 + 15662 + 2850 + 15689 + 2851 + 15716 + 2852 + 15731 + 2853 + 15733 + 2854 + 15734 + 15756 + 2855 + 15768 + 2857 + 15770 + 2858 + 15773 + 2859 + 15780 + 2861 + 15783 + 2863 + 15787 + 2866 + 15789 + 2867 + 15790 + 2868 + 15791 + 2869 + 15798 + 2871 + 15799 + 2875 + 15804 + 2877 + 15806 + 2878 + 15809 + 2879 + 15816 + 2881 + 15817 + 2884 + 15823 + 2885 + 15826 + 2886 + 15827 + 2887 + 15828 + 2888 + 15835 + 2889 + 15839 + 2890 + 15873 + 2892 + 15875 + 2893 + 15878 + 2894 + 15885 + 2896 + 15886 + 2899 + 15892 + 2901 +endcidrange + +100 begincidrange + 15894 + 2902 + 15897 + 2903 + 15904 + 2905 + 15905 + 2906 + 15906 + 2907 + 15912 + 2908 + 15915 + 2909 + 15930 + 2910 + 15937 + 2911 + 15940 + 15955 + 2912 + 15956 + 2913 + 15962 + 2915 + 15964 + 2916 + 15967 + 2917 + 15974 + 2919 + 15975 + 2920 + 15976 + 2921 + 15982 + 2922 + 15985 + 2923 + 15988 + 2924 + 16000 + 2925 + 16034 + 2926 + 16037 + 2927 + 16040 + 2928 + 16047 + 2930 + 16048 + 2931 + 16049 + 2932 + 16055 + 2933 + 16070 + 2934 + 16081 + 2936 + 16083 + 2937 + 16086 + 2938 + 16093 + 2940 + 16094 + 2941 + 16095 + 2942 + 16101 + 2943 + 16120 + 2944 + 16127 + 2945 + 16130 + 2946 + 16153 + 2947 + 16156 + 2948 + 16159 + 2949 + 16166 + 2951 + 16167 + 2952 + 16168 + 16170 + 2953 + 16174 + 2954 + 16177 + 2955 + 16180 + 2956 + 16187 + 2957 +endcidrange + +100 begincidrange + 16191 + 2958 + 16197 + 2960 + 16199 + 2961 + 16202 + 2962 + 16209 + 2964 + 16210 + 2965 + 16211 + 2966 + 16245 + 2968 + 16247 + 2969 + 16249 + 2972 + 16255 + 2974 + 16256 + 2975 + 16257 + 2976 + 16263 + 2978 + 16265 + 2979 + 16268 + 2980 + 16275 + 2982 + 16276 + 2983 + 16277 + 2984 + 16283 + 2986 + 16285 + 2987 + 16288 + 2988 + 16295 + 2990 + 16296 + 2993 + 16302 + 2995 + 16321 + 2996 + 16355 + 2998 + 16357 + 2999 + 16359 + 3001 + 16366 + 3003 + 16367 + 3006 + 16373 + 3008 + 16375 + 3009 + 16378 + 3010 + 16385 + 3012 + 16386 + 3013 + 16387 + 3014 + 16393 + 3015 + 16396 + 3016 + 16399 + 3017 + 16406 + 3019 + 16407 + 3022 + 16413 + 3023 + 16440 + 3025 + 16442 + 3026 + 16445 + 3027 + 16452 + 3029 + 16453 + 3030 + 16454 + 3031 + 16460 + 3033 +endcidrange + +100 begincidrange + 16462 + 3034 + 16465 + 3035 + 16472 + 3036 + 16476 + 3037 + 16482 + 3038 + 16502 + 3039 + 16508 + 3040 + 16515 + 3041 + 16534 + 3042 + 16561 + 3044 + 16563 + 3045 + 16566 + 3046 + 16573 + 3048 + 16574 + 3049 + 16575 + 3050 + 16581 + 3051 + 16584 + 3052 + 16587 + 3053 + 16599 + 3054 + 16605 + 3055 + 16625 + 3056 + 16631 + 3058 + 16633 + 3059 + 16636 + 3060 + 16643 + 3062 + 16644 + 3063 + 16645 + 3064 + 16651 + 3065 + 16654 + 3066 + 16657 + 3067 + 16664 + 3068 + 16675 + 3070 + 16677 + 3071 + 16680 + 3072 + 16687 + 3074 + 16690 + 3075 + 16724 + 3077 + 16726 + 3078 + 16729 + 3079 + 16736 + 3081 + 16737 + 3082 + 16738 + 3083 + 16744 + 3085 + 16746 + 3086 + 16749 + 3088 + 16755 + 3090 + 16756 + 3093 + 16762 + 3095 + 16764 + 3096 + 16767 + 3097 +endcidrange + +100 begincidrange + 16774 + 3099 + 16775 + 3102 + 16781 + 16788 + 3103 + 16801 + 3104 + 16835 + 3106 + 16837 + 3107 + 16840 + 3108 + 16841 + 3109 + 16846 + 3111 + 16847 + 3114 + 16853 + 3116 + 16855 + 3117 + 16858 + 3118 + 16865 + 3120 + 16866 + 3121 + 16867 + 3122 + 16873 + 3123 + 16876 + 3124 + 16891 + 3125 + 16898 + 3126 + 16901 + 3127 + 16924 + 3129 + 16926 + 3130 + 16929 + 3131 + 16936 + 3133 + 16937 + 3134 + 16938 + 3135 + 16942 + 3136 + 16943 + 3137 + 16946 + 3138 + 16969 + 3139 + 16996 + 3140 + 16999 + 17006 + 3141 + 17013 + 3142 + 17014 + 3143 + 17020 + 3144 + 17047 + 3146 + 17049 + 3147 + 17052 + 3148 + 17059 + 3150 + 17060 + 3151 + 17061 + 3152 + 17067 + 3153 + 17086 + 3154 + 17093 + 3155 + 17120 + 3157 + 17122 + 3158 + 17125 + 3159 + 17132 + 3161 +endcidrange + +100 begincidrange + 17135 + 3162 + 17141 + 3163 + 17144 + 3164 + 17147 + 3165 + 17154 + 3166 + 17158 + 3167 + 17164 + 3169 + 17166 + 3170 + 17168 + 3172 + 17169 + 3173 + 17174 + 3175 + 17175 + 3176 + 17183 + 3177 + 17186 + 3178 + 17189 + 3179 + 17196 + 3181 + 17206 + 3183 + 17208 + 3184 + 17211 + 3185 + 17218 + 3187 + 17219 + 3188 + 17220 + 3189 + 17226 + 3192 + 17227 + 3193 + 17230 + 3194 + 17231 + 3195 + 17236 + 3197 + 17237 + 3200 + 17240 + 3201 + 17242 + 3203 + 17244 + 3204 + 17247 + 3205 + 17254 + 3207 + 17255 + 3210 + 17261 + 3212 + 17315 + 3214 + 17317 + 3215 + 17320 + 3216 + 17327 + 3218 + 17328 + 3221 + 17334 + 3223 + 17336 + 3224 + 17339 + 3225 + 17346 + 3227 + 17347 + 3228 + 17348 + 3229 + 17354 + 3230 + 17357 + 3231 + 17360 + 3232 + 17367 + 3234 +endcidrange + +100 begincidrange + 17369 + 3236 + 17375 + 3237 + 17382 + 3238 + 17390 + 3239 + 17391 + 3240 + 17399 + 3242 + 17401 + 3243 + 17404 + 3244 + 17411 + 3246 + 17412 + 3247 + 17413 + 3248 + 17419 + 3249 + 17439 + 3250 + 17473 + 3251 + 17476 + 3252 + 17499 + 3253 + 17502 + 3254 + 17505 + 3255 + 17513 + 3256 + 17514 + 3257 + 17522 + 3259 + 17524 + 3260 + 17526 + 3262 + 17527 + 3263 + 17532 + 3265 + 17533 + 3266 + 17534 + 3267 + 17540 + 3268 + 17560 + 3269 + 17594 + 3270 + 17597 + 3271 + 17600 + 3272 + 17607 + 3273 + 17609 + 3274 + 17617 + 3275 + 17620 + 3276 + 17623 + 3277 + 17630 + 3278 + 17632 + 3279 + 17633 + 17635 + 3280 + 17639 + 3281 + 17642 + 3282 + 17645 + 3283 + 17652 + 3285 + 17653 + 3286 + 17689 + 3288 + 17691 + 3289 + 17694 + 3290 + 17701 + 3292 + 17702 +endcidrange + +100 begincidrange + 3293 + 17703 + 3294 + 17709 + 3296 + 17711 + 3297 + 17714 + 3298 + 17718 + 3299 + 17720 + 3301 + 17721 + 3302 + 17722 + 3303 + 17728 + 3305 + 17730 + 3306 + 17733 + 3307 + 17740 + 3309 + 17741 + 3312 + 17747 + 3313 + 17767 + 3314 + 17801 + 3316 + 17803 + 3317 + 17806 + 3318 + 17807 + 3319 + 17812 + 3321 + 17813 + 3322 + 17814 + 3323 + 17820 + 3325 + 17822 + 3326 + 17825 + 3327 + 17832 + 3329 + 17833 + 3330 + 17834 + 3331 + 17840 + 3333 + 17842 + 3334 + 17845 + 3335 + 17852 + 3337 + 17853 + 3340 + 17859 + 3341 + 17862 + 3342 + 17865 + 3343 + 17873 + 3344 + 17883 + 3346 + 17885 + 3347 + 17888 + 3348 + 17892 + 3349 + 17894 + 3351 + 17895 + 3352 + 17896 + 3353 + 17899 + 3354 + 17901 + 3356 + 17903 + 3357 + 17906 + 3358 + 17916 + 3359 + 17917 +endcidrange + +100 begincidrange + 3360 + 17923 + 3362 + 17925 + 3363 + 17939 + 3364 + 17940 + 3365 + 17946 + 3367 + 17948 + 3368 + 17951 + 3369 + 17959 + 3370 + 17960 + 3371 + 17961 + 3372 + 17967 + 3373 + 17970 + 3374 + 17973 + 3375 + 17981 + 3376 + 17982 + 3377 + 17990 + 3379 + 17992 + 3380 + 17995 + 3381 + 17999 + 3382 + 18001 + 3383 + 18003 + 3384 + 18004 + 3385 + 18010 + 3386 + 18013 + 3387 + 18016 + 3388 + 18023 + 3389 + 18027 + 3390 + 18033 + 3392 + 18035 + 3393 + 18038 + 3394 + 18050 + 3395 + 18056 + 3397 + 18058 + 3398 + 18061 + 3399 + 18068 + 3401 + 18069 + 3402 + 18070 + 3403 + 18076 + 3405 + 18078 + 3406 + 18081 + 3407 + 18088 + 3408 + 18090 + 3409 + 18091 + 3410 + 18097 + 3412 + 18099 + 3413 + 18100 + 3417 + 18106 + 3419 + 18107 + 3420 + 18108 + 3421 + 18111 +endcidrange + +100 begincidrange + 3422 + 18113 + 3423 + 18116 + 3424 + 18119 + 3425 + 18126 + 3427 + 18129 + 3428 + 18135 + 3430 + 18137 + 3431 + 18140 + 3432 + 18147 + 3434 + 18148 + 3435 + 18149 + 4116 + 3678 + 7053 + 3460 + 7900 + 3802 + 3902 + 3946 + 3946 + 3708 + 4131 + 4374 + 4156 + 4375 + 5800 + 4382 + 4386 + 4394 + 4399 + 4403 + 4406 + 4409 + 4419 + 4424 + 4511 + 4513 + 4517 + 4524 + 4528 + 4535 + 4541 + 4545 + 4550 + 4564 + 4566 + 4571 + 4576 + 4604 + 4609 + 4318 + 4136 + 5800 + 4139 + 4192 + 4167 + 4172 + 5552 + 6424 + 5151 + 4922 + 7518 + 5079 + 5109 + 7607 + 5584 + 5367 + 7083 + 5362 + 5485 + 6001 + 5460 + 5317 + 7009 + 7370 + 5678 + 5874 + 4425 + 4429 + 4435 + 4439 + 4442 + 4159 + 4444 + 4447 + 4449 + 4453 + 4455 + 4463 +endcidrange + +94 begincidrange + 4160 + 4465 + 4161 + 4468 + 4162 + 4471 + 4474 + 4473 + 4475 + 4478 + 6447 + 4481 + 5460 + 4483 + 4163 + 4166 + 4485 + 4487 + 4491 + 4167 + 4493 + 7783 + 4497 + 4499 + 4501 + 4506 + 4508 + 5797 + 4551 + 4180 + 4555 + 5800 + 4556 + 4560 + 4563 + 7988 + 6123 + 4577 + 4183 + 4579 + 4581 + 4584 + 4586 + 4588 + 4184 + 4590 + 4595 + 4599 + 5552 + 4603 + 4614 + 4616 + 4618 + 5950 + 4620 + 4187 + 4625 + 4627 + 4629 + 4632 + 4636 + 4188 + 4638 + 4640 + 4644 + 4650 + 4653 + 5351 + 6494 + 5731 + 5771 + 4191 + 6484 + 6684 + 4279 + 7139 + 4247 + 4266 + 4340 + 7572 + 5088 + 7709 + 3558 + 3644 + 3815 + 264 + 112 + 324 + 113 + 143 + 194 + 357 + 145 + 323 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UCS2-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UCS2-V new file mode 100644 index 00000000000..738578842d1 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UCS2-V @@ -0,0 +1,95 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniKS-UCS2-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniKS-UCS2-H) +%%BeginResource: CMap (UniKS-UCS2-V) +%%Title: (UniKS-UCS2-V Adobe Korea1 1) +%%Version: 10.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniKS-UCS2-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /UniKS-UCS2-V def +/CMapVersion 10.003 def +/CMapType 1 def + +/XUID [1 10 25407] def + +/WMode 1 def + +18 begincidrange +<2013> <2014> 8059 +<2016> <2016> 8061 +<2025> <2025> 8058 +<3001> <3002> 8056 +<3008> <3011> 8065 +<3013> <3013> 8075 +<3014> <3015> 8063 + 8076 + 8077 + 8079 + 8080 + 8081 + 8087 + 8088 + 8089 + 8090 + 8062 + 8093 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UTF16-H b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UTF16-H new file mode 100644 index 00000000000..431dede59c4 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UTF16-H @@ -0,0 +1,8892 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (UniKS-UTF16-H) +%%Title: (UniKS-UTF16-H Adobe Korea1 1) +%%Version: 1.003 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /UniKS-UTF16-H def +/CMapVersion 1.003 def +/CMapType 1 def + +/XUID [1 10 25544] def + +/WMode 0 def + +3 begincodespacerange + <0000> + + +endcodespacerange + +1 beginnotdefrange +<0000> <001f> 1 +endnotdefrange + +100 begincidchar +<00a1> 208 +<00a4> 214 +<00a7> 155 +<00a8> 107 +<00a9> 98 +<00aa> 668 +<00ab> 176 +<00b0> 138 +<00b1> 130 +<00b4> 199 +<00b6> 244 +<00b7> 104 +<00b8> 206 +<00b9> 842 +<00ba> 675 +<00bb> 177 +<00bc> 751 +<00bd> 748 +<00be> 752 +<00bf> 209 +<00c6> 666 +<00d0> 667 +<00d7> 131 +<00d8> 673 +<00de> 676 +<00df> 768 +<00e6> 757 +<00f0> 759 +<00f7> 132 +<00f8> 766 +<00fe> 769 +<0111> 758 +<0126> 669 +<0127> 760 +<0131> 761 +<0132> 670 +<0133> 762 +<0138> 763 +<013f> 671 +<0140> 764 +<0141> 672 +<0142> 765 +<0149> 772 +<014a> 678 +<014b> 771 +<0152> 674 +<0153> 767 +<0166> 677 +<0167> 770 +<02bc> 8275 +<02c7> 201 +<02d8> 202 +<02d9> 205 +<02da> 204 +<02db> 207 +<02dc> 200 +<02dd> 203 +<0401> 1026 +<0451> 1059 +<2010> 97 +<2016> 111 +<201b> 8238 +<201f> 8237 +<2022> 8607 +<2030> 216 +<2034> 8582 +<2035> 9326 +<2036> 9324 +<203b> 156 +<203c> 8763 +<2042> 8599 +<2074> 845 +<207c> 8248 +<207f> 846 +<20a9> 96 +<2103> 141 +<2109> 215 +<2113> 590 +<2116> 258 +<2121> 263 +<2122> 260 +<2126> 643 +<212b> 142 +<2192> 170 +<2195> 247 +<2196> 250 +<2197> 248 +<2198> 251 +<2199> 249 +<21b0> 8868 +<21b1> 8865 +<21b2> 8864 +<21b3> 8869 +<21b4> 8867 +<21bc> 8884 +<21c0> 8885 +<21cd> 8816 +<21cf> 8815 +<21d0> 8814 +<21d1> 8854 +endcidchar + +100 begincidchar +<21d2> 195 +<21d3> 8855 +<21d4> 196 +<21e0> 9190 +<21e1> 9192 +<21e2> 9191 +<21e3> 9193 +<21e6> 9198 +<21e7> 9200 +<21e8> 9199 +<21e9> 9201 +<2200> 197 +<2202> 151 +<2203> 198 +<2206> 8715 +<2207> 152 +<2208> 184 +<2209> 8749 +<220b> 185 +<220c> 8750 +<220f> 213 +<2211> 212 +<2213> 8726 +<221a> 178 +<221d> 180 +<221e> 136 +<221f> 8717 +<2220> 148 +<2222> 8738 +<2229> 191 +<222a> 190 +<222e> 211 +<2234> 137 +<2235> 181 +<2236> 210 +<2237> 8321 +<223d> 179 +<2243> 8500 +<2245> 8499 +<2248> 8501 +<2250> 8739 +<2251> 8723 +<2252> 154 +<2253> 8722 +<225a> 8753 +<2260> 133 +<2261> 153 +<2262> 8734 +<2279> 8491 +<2284> 8748 +<2285> 8747 +<228a> 8486 +<228b> 8488 +<22a3> 8742 +<22a4> 8503 +<22a5> 149 +<22ee> 8320 +<22ef> 106 +<2306> 8754 +<2312> 150 +<2314> 8731 +<2500> 519 +<2501> 530 +<2502> 520 +<2503> 531 +<250c> 521 +<250d> 558 +<250e> 557 +<250f> 532 +<2510> 522 +<2511> 552 +<2512> 551 +<2513> 533 +<2514> 524 +<2515> 556 +<2516> 555 +<2517> 535 +<2518> 523 +<2519> 554 +<251a> 553 +<251b> 534 +<251c> 525 +<251d> 546 +<2520> 541 +<2523> 536 +<2524> 527 +<2525> 548 +<2528> 543 +<252b> 538 +<252c> 526 +<252f> 542 +<2530> 547 +<2533> 537 +<2534> 528 +<2537> 544 +<2538> 549 +<253b> 539 +<253c> 529 +<253f> 545 +<2542> 550 +endcidchar + +100 begincidchar +<254b> 540 +<2592> 232 +<25a0> 165 +<25a1> 164 +<25a3> 229 +<25a6> 237 +<25a7> 236 +<25a8> 235 +<25a9> 238 +<25b1> 8736 +<25b2> 167 +<25b3> 166 +<25b5> 8780 +<25b6> 220 +<25b7> 219 +<25b9> 8781 +<25bc> 169 +<25bd> 168 +<25bf> 8779 +<25c0> 218 +<25c1> 217 +<25c3> 8782 +<25c6> 163 +<25c7> 162 +<25c8> 228 +<25c9> 227 +<25ca> 8787 +<25cb> 159 +<25cc> 8639 +<25ce> 161 +<25cf> 160 +<25e6> 8775 +<25ef> 8633 +<2605> 158 +<2606> 157 +<260e> 241 +<260f> 240 +<261c> 242 +<261d> 9222 +<261e> 243 +<261f> 9223 +<262f> 8664 +<2640> 147 +<2642> 146 +<2663> 226 +<2664> 221 +<2665> 224 +<2667> 225 +<2668> 239 +<266c> 255 +<266d> 252 +<266f> 8594 +<2716> 8631 +<271a> 8630 +<273d> 8604 +<2756> 8637 +<2f00> 6460 +<2f04> 6380 +<2f06> 6413 +<2f08> 6443 +<2f0a> 6477 +<2f0b> 7499 +<2f11> 4270 +<2f12> 4458 +<2f14> 5183 +<2f17> 5772 +<2f18> 5077 +<2f1c> 6201 +<2f1d> 3901 +<2f1f> 7451 +<2f20> 5255 +<2f23> 5403 +<2f24> 4253 +<2f25> 4159 +<2f26> 6488 +<2f28> 7247 +<2f29> 5504 +<2f2b> 5697 +<2f2d> 5305 +<2f2f> 3791 +<2f30> 4077 +<2f31> 3604 +<2f32> 3481 +<2f38> 3964 +<2f3c> 5764 +<2f3d> 3804 +<2f3e> 7808 +<2f3f> 5580 +<2f40> 6951 +<2f42> 4840 +<2f43> 4349 +<2f44> 4027 +<2f45> 4950 +<2f46> 4819 +<2f47> 6464 +<2f48> 6125 +<2f49> 6281 +<2f4a> 4788 +<2f4b> 8027 +<2f4c> 6956 +endcidchar + +100 begincidchar +<2f4f> 4822 +<2f50> 5196 +<2f51> 4776 +<2f52> 5774 +<2f54> 5587 +<2f55> 7867 +<2f56> 6803 +<2f57> 5129 +<2f58> 7962 +<2f5a> 7521 +<2f5b> 5782 +<2f5c> 6210 +<2f5d> 3639 +<2f5e> 7741 +<2f5f> 6081 +<2f60> 3806 +<2f61> 6100 +<2f62> 3521 +<2f63> 5370 +<2f64> 6189 +<2f65> 6664 +<2f66> 7610 +<2f69> 4993 +<2f6a> 7600 +<2f6b> 4755 +<2f6c> 4791 +<2f6d> 4781 +<2f6e> 5709 +<2f6f> 5413 +<2f70> 5710 +<2f72> 7870 +<2f73> 7755 +<2f74> 4653 +<2f75> 6900 +<2f76> 4863 +<2f78> 5132 +<2f7a> 5896 +<2f7b> 6218 +<2f7c> 4519 +<2f7d> 6427 +<2f7f> 6428 +<2f80> 6368 +<2f81> 6357 +<2f82> 5749 +<2f83> 6502 +<2f84> 6967 +<2f85> 3930 +<2f86> 5456 +<2f87> 7158 +<2f88> 6888 +<2f89> 3496 +<2f8a> 5368 +<2f8b> 7232 +<2f8e> 7756 +<2f8f> 7709 +<2f90> 6409 +<2f92> 3644 +<2f93> 3474 +<2f94> 5921 +<2f95> 3772 +<2f96> 4355 +<2f97> 5718 +<2f99> 7512 +<2f9a> 6636 +<2f9b> 6892 +<2f9c> 6830 +<2f9d> 5755 +<2f9e> 7053 +<2f9f> 5756 +<2fa0> 7009 +<2fa2> 6389 +<2fa3> 6352 +<2fa5> 4634 +<2fa6> 4131 +<2fa7> 6568 +<2fa8> 4846 +<2fa9> 5147 +<2fac> 6227 +<2fad> 7203 +<2fae> 5220 +<2faf> 4744 +<2fb0> 7733 +<2fb1> 6307 +<2fb3> 6385 +<2fb4> 7757 +<2fb5> 7595 +<2fb6> 5221 +<2fb7> 5733 +<2fb8> 5625 +<2fb9> 7718 +<2fba> 4661 +<2fbb> 3785 +<2fbc> 3765 +<2fc1> 3993 +<2fc2> 5910 +<2fc3> 6827 +<2fc4> 4527 +<2fc5> 4533 +<2fc6> 4726 +<2fc7> 4663 +endcidchar + +100 begincidchar +<2fc8> 7927 +<2fc9> 5401 +<2fca> 8018 +<2fcd> 6758 +<2fce> 3766 +<2fcf> 5402 +<2fd0> 5222 +<2fd1> 6781 +<2fd2> 7359 +<2fd3> 4563 +<2fd4> 3946 +<3003> 108 +<3012> 8700 +<3013> 175 +<3020> 8671 +<3036> 8701 +<30fb> 104 +<30fc> 9330 +<3164> 101 +<321c> 257 +<3231> 8788 +<3239> 8789 +<327f> 256 +<3290> 9300 +<3294> 9080 +<329e> 8761 +<32a5> 9096 +<3398> 591 +<33c2> 261 +<33c3> 662 +<33c4> 592 +<33c5> 650 +<33c6> 665 +<33c7> 259 +<33c8> 614 +<33c9> 663 +<33ca> 607 +<33cb> 8790 +<33cf> 611 +<33d0> 660 +<33d3> 661 +<33d6> 649 +<33d8> 262 +<33db> 654 +<33dc> 664 +<33dd> 659 +<4e00> 6460 +<4e01> 6704 +<4e03> 7364 +<4e07> 4670 +<4e08> 6534 +<4e09> 5320 +<4e0a> 5331 +<4e0b> 7616 +<4e0d> 5109 +<4e11> 7288 +<4e14> 7041 +<4e15> 5181 +<4e16> 5492 +<4e18> 3893 +<4e19> 5041 +<4e1e> 5682 +<4e2d> 6922 +<4e32> 3802 +<4e38> 7882 +<4e39> 4192 +<4e3b> 6860 +<4e42> 6029 +<4e43> 4154 +<4e45> 3894 +<4e4b> 6942 +<4e4d> 5241 +<4e4e> 7800 +<4e4f> 7614 +<4e56> 3855 +<4e58> 5683 +<4e59> 6380 +<4e5d> 3895 +<4e5e> 3613 +<4e5f> 5862 +<4e6b> 3500 +<4e6d> 4329 +<4e73> 6309 +<4e76> 5092 +<4e77> 5315 +<4e7e> 3601 +<4e82> 4389 +<4e86> 4551 +<4e88> 5934 +<4e8b> 5242 +<4e8c> 6413 +<4e8e> 6197 +<4e90> 6252 +<4e91> 6238 +<4e92> 7801 +<4e94> 6049 +<4e95> 6705 +<4e98> 4058 +<4e9b> 5243 +<4e9e> 5775 +endcidchar + +100 begincidchar +<4ea1> 4696 +<4ea2> 7670 +<4ea4> 3868 +<4ea5> 7685 +<4ea6> 5947 +<4ea8> 7771 +<4eab> 7710 +<4eac> 3660 +<4ead> 6706 +<4eae> 4427 +<4eb6> 4193 +<4eba> 6443 +<4ec0> 5771 +<4ec1> 6444 +<4ec4> 7331 +<4ec7> 3896 +<4eca> 4038 +<4ecb> 3560 +<4ecd> 6479 +<4ed4> 6483 +<4ed5> 5244 +<4ed6> 7380 +<4ed7> 6535 +<4ed8> 5110 +<4ed9> 5418 +<4edd> 4331 +<4edf> 7148 +<4ee3> 4250 +<4ee4> 4489 +<4ee5> 6414 +<4ef0> 5833 +<4ef2> 6923 +<4ef6> 3602 +<4ef7> 3561 +<4efb> 6469 +<4f01> 4062 +<4f09> 7671 +<4f0a> 6415 +<4f0b> 4051 +<4f0d> 6050 +<4f0e> 4063 +<4f0f> 5074 +<4f10> 5005 +<4f11> 8005 +<4f2f> 4988 +<4f34> 4905 +<4f36> 4490 +<4f38> 5735 +<4f3a> 5245 +<4f3c> 5246 +<4f3d> 3436 +<4f43> 6643 +<4f46> 4194 +<4f47> 6591 +<4f48> 7544 +<4f4d> 6284 +<4f4e> 6592 +<4f4f> 6861 +<4f50> 6854 +<4f51> 6198 +<4f55> 7617 +<4f59> 5935 +<4f5a> 6461 +<4f5b> 5171 +<4f5c> 6509 +<4f69> 7502 +<4f6f> 5879 +<4f70> 4989 +<4f73> 3437 +<4f76> 4127 +<4f7a> 6644 +<4f7e> 6462 +<4f7f> 5247 +<4f81> 5736 +<4f83> 3476 +<4f84> 7015 +<4f86> 4420 +<4f88> 7336 +<4f8a> 3839 +<4f8b> 4506 +<4f8d> 5692 +<4f8f> 6862 +<4f91> 6310 +<4f96> 4594 +<4f98> 7042 +<4f9b> 3786 +<4f9d> 6394 +<4fae> 4764 +<4faf> 7966 +<4fb5> 7367 +<4fb6> 4440 +<4fbf> 7518 +<4fc2> 3705 +<4fc3> 7241 +<4fc4> 5776 +<4fc9> 6051 +<4fca> 6902 +<4fce> 6782 +<4fd1> 6174 +<4fd3> 3661 +endcidchar + +100 begincidchar +<4fd4> 7734 +<4fd7> 5537 +<4fda> 4613 +<4fdd> 5058 +<4fdf> 5248 +<4fe0> 7759 +<4fe1> 5737 +<4fee> 5567 +<4fef> 5111 +<4ff1> 3897 +<4ff3> 4970 +<4ff5> 7576 +<4ff8> 5093 +<4ffa> 5925 +<5002> 5042 +<5006> 4428 +<5009> 7092 +<500b> 3562 +<500d> 4969 +<5011> 4836 +<5012> 4269 +<5016> 7705 +<5019> 7967 +<501a> 6395 +<501c> 7134 +<501e> 3662 +<501f> 7043 +<5021> 7093 +<5023> 4941 +<5024> 7337 +<5026> 3969 +<5027> 6837 +<5028> 3585 +<502a> 6030 +<502b> 4595 +<502c> 7394 +<502d> 6131 +<503b> 5863 +<5043> 5917 +<5047> 3438 +<5048> 3627 +<5049> 6285 +<504f> 7519 +<5055> 7686 +<505a> 6863 +<505c> 6707 +<5065> 3603 +<5074> 7330 +<5075> 6708 +<5076> 6199 +<5078> 7465 +<5080> 3856 +<5085> 5112 +<508d> 4942 +<5091> 3614 +<5098> 5303 +<5099> 5182 +<50ac> 7262 +<50ad> 6175 +<50b2> 6052 +<50b3> 6645 +<50b5> 7114 +<50b7> 5332 +<50be> 3663 +<50c5> 4023 +<50c9> 7177 +<50ca> 5419 +<50cf> 5333 +<50d1> 3869 +<50d5> 5075 +<50d6> 8035 +<50da> 4552 +<50de> 6286 +<50e5> 6140 +<50e7> 5684 +<50ed> 7082 +<50f9> 3439 +<50fb> 5020 +<50ff> 5249 +<5100> 6396 +<5101> 6903 +<5104> 5912 +<5106> 3664 +<5109> 3617 +<5112> 6311 +<511f> 5334 +<5121> 4543 +<512a> 6200 +<5132> 6593 +<5137> 4441 +<513a> 4133 +<513c> 5926 +<5140> 6089 +<5141> 6359 +<5143> 6255 +<5144> 7772 +<5145> 7306 +<5146> 6783 +<5147> 8013 +<5148> 5420 +endcidchar + +100 begincidchar +<5149> 3840 +<514b> 4016 +<514c> 7431 +<514d> 4735 +<514e> 7449 +<5152> 5777 +<515c> 4348 +<5162> 4059 +<5165> 6477 +<5167> 4155 +<5168> 6646 +<5169> 4429 +<516a> 6312 +<516b> 7499 +<516c> 3787 +<516d> 4591 +<516e> 7791 +<5171> 3788 +<5175> 5043 +<5176> 4064 +<5177> 3898 +<5178> 6647 +<517c> 3654 +<5180> 4065 +<5186> 5933 +<518a> 7126 +<518d> 6570 +<5192> 4765 +<5195> 4736 +<5197> 6176 +<51a0> 3819 +<51a5> 4748 +<51aa> 4733 +<51ac> 4332 +<51b6> 5864 +<51b7> 4424 +<51bd> 4477 +<51c4> 7130 +<51c6> 6904 +<51c9> 4430 +<51cb> 6784 +<51cc> 4607 +<51cd> 4333 +<51dc> 4606 +<51dd> 6390 +<51de> 8036 +<51e1> 5009 +<51f0> 7904 +<51f1> 3563 +<51f6> 8014 +<51f8> 7167 +<51f9> 6141 +<51fa> 7303 +<51fd> 7651 +<5200> 4270 +<5203> 6445 +<5206> 5152 +<5207> 6684 +<5208> 6031 +<520a> 3477 +<520e> 4837 +<5211> 7773 +<5217> 4478 +<521d> 7214 +<5224> 7490 +<5225> 5037 +<5229> 4614 +<522a> 5304 +<522e> 3835 +<5230> 4271 +<5236> 6759 +<5237> 5561 +<5238> 3970 +<5239> 7077 +<523a> 6484 +<523b> 3465 +<5243> 7205 +<5247> 7360 +<524a> 5301 +<524b> 4017 +<524c> 4397 +<524d> 6648 +<5254> 7135 +<5256> 5113 +<525b> 3536 +<525d> 4886 +<5261> 5463 +<5269> 6480 +<526a> 6649 +<526f> 5114 +<5272> 7649 +<5275> 7094 +<527d> 7577 +<527f> 7215 +<5283> 7948 +<5287> 4018 +<5288> 5021 +<5289> 4577 +<528d> 3618 +<5291> 6760 +endcidchar + +100 begincidchar +<5292> 3619 +<529b> 4458 +<529f> 3789 +<52a0> 3440 +<52a3> 4479 +<52a4> 4024 +<52a9> 6785 +<52aa> 4169 +<52ab> 3624 +<52be> 7703 +<52c1> 3665 +<52c3> 4930 +<52c5> 7361 +<52c7> 6177 +<52c9> 4737 +<52cd> 3666 +<52d2> 4604 +<52d5> 4334 +<52d6> 6229 +<52d8> 3510 +<52d9> 4812 +<52db> 7979 +<52dd> 5685 +<52de> 4511 +<52df> 4766 +<52e2> 5493 +<52e3> 6619 +<52e4> 4025 +<52f3> 7980 +<52f5> 4442 +<52f8> 3971 +<52fa> 6510 +<52fb> 4009 +<52fe> 3899 +<52ff> 4848 +<5305> 7545 +<5308> 8015 +<530d> 7546 +<530f> 7547 +<5310> 5076 +<5315> 5183 +<5316> 7863 +<5317> 5151 +<5319> 5693 +<5320> 6536 +<5321> 3841 +<5323> 3530 +<532a> 5184 +<532f> 7928 +<5339> 7604 +<533f> 4188 +<5340> 3900 +<5341> 5772 +<5343> 7149 +<5344> 6478 +<5347> 5686 +<5348> 6053 +<5349> 7994 +<534a> 4906 +<534d> 4671 +<5351> 5185 +<5352> 6834 +<5353> 7395 +<5354> 7760 +<5357> 4145 +<535a> 4887 +<535c> 5077 +<535e> 5031 +<5360> 6692 +<5366> 3852 +<5368> 5450 +<536f> 4800 +<5370> 6446 +<5371> 6287 +<5374> 3466 +<5375> 4390 +<5377> 3972 +<537d> 6926 +<537f> 3667 +<5384> 5851 +<5393> 5840 +<5398> 4615 +<539a> 7968 +<539f> 6256 +<53a0> 7332 +<53a5> 3979 +<53a6> 7618 +<53ad> 5989 +<53bb> 3586 +<53c3> 7083 +<53c8> 6201 +<53c9> 7044 +<53ca> 4052 +<53cb> 6202 +<53cd> 4907 +<53d4> 5628 +<53d6> 7316 +<53d7> 5568 +<53db> 4908 +<53e1> 6032 +endcidchar + +100 begincidchar +<53e2> 7251 +<53e3> 3901 +<53e4> 3729 +<53e5> 3902 +<53e9> 3730 +<53ea> 6943 +<53eb> 3994 +<53ec> 5500 +<53ed> 7500 +<53ef> 3441 +<53f0> 7432 +<53f1> 7016 +<53f2> 5250 +<53f3> 6203 +<53f8> 5251 +<5403> 8023 +<5404> 3467 +<5408> 7663 +<5409> 4128 +<540a> 6620 +<540c> 4335 +<540d> 4749 +<540e> 7969 +<540f> 4616 +<5410> 7450 +<5411> 7711 +<541b> 3953 +<541d> 4638 +<541f> 6381 +<5420> 7534 +<5426> 5115 +<5429> 5153 +<542b> 7652 +<5433> 6055 +<5438> 8030 +<5439> 7317 +<543b> 4838 +<543c> 7970 +<543e> 6054 +<5442> 4443 +<5448> 6709 +<544a> 3731 +<5451> 7408 +<5468> 6867 +<546a> 6866 +<5471> 3732 +<5473> 4851 +<5475> 3442 +<547b> 5738 +<547c> 7802 +<547d> 4750 +<5480> 6594 +<5486> 7548 +<548c> 7864 +<548e> 3903 +<5490> 5116 +<54a4> 7381 +<54a8> 6485 +<54ab> 6944 +<54ac> 3870 +<54b3> 7687 +<54b8> 7653 +<54bd> 6447 +<54c0> 5841 +<54c1> 7590 +<54c4> 7853 +<54c8> 7664 +<54c9> 6571 +<54e1> 6257 +<54e5> 3443 +<54e8> 7216 +<54ed> 3767 +<54ee> 7953 +<54f2> 7168 +<54fa> 7549 +<5504> 7503 +<5506> 5252 +<5507> 6980 +<550e> 4617 +<5510> 4239 +<551c> 4689 +<552f> 6313 +<5531> 7095 +<5535> 5821 +<553e> 7382 +<5544> 7396 +<5546> 5335 +<554f> 4839 +<5553> 3706 +<5556> 4217 +<555e> 5778 +<5563> 7654 +<557c> 6761 +<5580> 3579 +<5584> 5421 +<5586> 7169 +<5587> 4374 +<5589> 7971 +<558a> 7655 +<5598> 7150 +endcidchar + +100 begincidchar +<5599> 7995 +<559a> 7883 +<559c> 8037 +<559d> 3501 +<55a7> 7990 +<55a9> 6314 +<55aa> 5336 +<55ab> 4132 +<55ac> 3871 +<55ae> 4195 +<55c5> 7972 +<55c7> 5365 +<55d4> 6981 +<55da> 6056 +<55dc> 4066 +<55df> 7045 +<55e3> 5253 +<55e4> 7338 +<55fd> 5569 +<55fe> 6868 +<5606> 7409 +<5609> 3444 +<5614> 3904 +<5617> 5337 +<562f> 5501 +<5632> 6786 +<5634> 7318 +<5636> 5694 +<5653> 7719 +<5668> 4067 +<566b> 8038 +<5674> 5154 +<5686> 7954 +<56a5> 5956 +<56ac> 5223 +<56ae> 7712 +<56b4> 5927 +<56bc> 6511 +<56ca> 4152 +<56cd> 8039 +<56d1> 7242 +<56da> 5570 +<56db> 5254 +<56de> 7929 +<56e0> 6448 +<56f0> 3774 +<56f9> 4491 +<56fa> 3733 +<5703> 7550 +<5704> 5902 +<5708> 3973 +<570b> 3947 +<570d> 6288 +<5712> 6259 +<5713> 6258 +<5716> 4272 +<5718> 4196 +<571f> 7451 +<5728> 6572 +<572d> 3995 +<5730> 6945 +<573b> 4068 +<5740> 6946 +<5742> 7491 +<5747> 4010 +<574a> 4943 +<574d> 4218 +<574e> 3511 +<5750> 6855 +<5751> 3581 +<5761> 7474 +<5764> 3775 +<5766> 7410 +<576a> 7529 +<576e> 4252 +<5770> 3668 +<5775> 3905 +<577c> 7397 +<5782> 5571 +<5788> 4251 +<578b> 7774 +<5793> 7688 +<57a0> 6373 +<57a2> 3906 +<57a3> 6260 +<57c3> 5842 +<57c7> 6178 +<57c8> 6905 +<57cb> 4708 +<57ce> 5474 +<57df> 5948 +<57e0> 5117 +<57f0> 7115 +<57f4> 5720 +<57f7> 7032 +<57f9> 4971 +<57fa> 4069 +<57fc> 4070 +<5800> 3959 +<5802> 4240 +endcidchar + +100 begincidchar +<5805> 3637 +<5806> 7459 +<5808> 3537 +<5809> 6355 +<580a> 5793 +<581e> 7187 +<5821> 5059 +<5824> 6762 +<5827> 5957 +<582a> 3512 +<582f> 6142 +<5830> 5918 +<5831> 5060 +<5834> 6537 +<5835> 4273 +<583a> 3707 +<584a> 3857 +<584b> 6002 +<584f> 3564 +<5851> 5502 +<5854> 7424 +<5857> 4274 +<5858> 4241 +<585a> 7252 +<585e> 5362 +<5861> 6650 +<5862> 6057 +<5864> 7981 +<5875> 6982 +<5879> 7084 +<587c> 6651 +<587e> 5629 +<5883> 3669 +<5885> 5373 +<5889> 6179 +<5893> 4801 +<589c> 7265 +<589e> 6931 +<589f> 7720 +<58a8> 4834 +<58a9> 4319 +<58ae> 7383 +<58b3> 5155 +<58ba> 6058 +<58bb> 6538 +<58be> 3478 +<58c1> 5022 +<58c5> 6090 +<58c7> 4197 +<58ce> 7982 +<58d1> 7630 +<58d3> 5829 +<58d5> 7803 +<58d8> 4564 +<58d9> 3842 +<58de> 3858 +<58df> 4536 +<58e4> 5880 +<58eb> 5255 +<58ec> 6470 +<58ef> 6539 +<58f9> 6463 +<58fa> 7804 +<58fb> 5374 +<58fd> 5572 +<590f> 7619 +<5914> 4071 +<5915> 5403 +<5916> 6135 +<5919> 5630 +<591a> 4190 +<591c> 5865 +<5922> 4797 +<5927> 4253 +<5929> 7151 +<592a> 7433 +<592b> 5118 +<592d> 6143 +<592e> 5834 +<5931> 5758 +<5937> 6416 +<593e> 7761 +<5944> 5928 +<5947> 4072 +<5948> 4156 +<5949> 5094 +<594e> 3996 +<594f> 6869 +<5950> 7884 +<5951> 3708 +<5954> 5156 +<5955> 7730 +<5957> 7466 +<595a> 7689 +<5960> 6652 +<5962> 5256 +<5967> 6059 +<596a> 7418 +<596b> 6360 +<596c> 6540 +endcidchar + +100 begincidchar +<596d> 5404 +<596e> 5157 +<5973> 4159 +<5974> 4170 +<5978> 3479 +<597d> 7805 +<5982> 5936 +<5983> 5186 +<5984> 4697 +<598a> 6471 +<5993> 4073 +<5996> 6144 +<5997> 4039 +<5999> 4802 +<59a5> 7384 +<59a8> 4944 +<59ac> 7467 +<59b9> 4709 +<59bb> 7131 +<59be> 7188 +<59c3> 6710 +<59c6> 4767 +<59c9> 6486 +<59cb> 5695 +<59d0> 6595 +<59d1> 3734 +<59d3> 5475 +<59d4> 6289 +<59d9> 6472 +<59da> 6145 +<59dc> 3538 +<59dd> 6864 +<59e6> 3480 +<59e8> 6417 +<59ea> 7017 +<59ec> 8040 +<59ee> 7672 +<59f8> 5958 +<59fb> 6449 +<59ff> 6487 +<5a01> 6290 +<5a03> 6132 +<5a11> 5257 +<5a18> 4153 +<5a1b> 6060 +<5a1c> 4134 +<5a1f> 5959 +<5a20> 5739 +<5a25> 5779 +<5a29> 4672 +<5a36> 7319 +<5a3c> 7096 +<5a41> 4565 +<5a46> 7475 +<5a49> 6107 +<5a5a> 7844 +<5a62> 5187 +<5a66> 5119 +<5a92> 4710 +<5a9a> 4852 +<5a9b> 6261 +<5aa4> 5696 +<5ac1> 3445 +<5ac2> 5573 +<5ac4> 6262 +<5ac9> 7018 +<5acc> 7758 +<5ae1> 6621 +<5ae6> 7673 +<5ae9> 4181 +<5b05> 7865 +<5b09> 8041 +<5b0b> 5422 +<5b0c> 3872 +<5b16> 7535 +<5b2a> 5224 +<5b40> 5338 +<5b43> 5881 +<5b50> 6488 +<5b51> 7754 +<5b54> 3790 +<5b55> 6481 +<5b57> 6489 +<5b58> 6832 +<5b5a> 5120 +<5b5c> 6490 +<5b5d> 7955 +<5b5f> 4727 +<5b63> 3709 +<5b64> 3735 +<5b69> 7690 +<5b6b> 5546 +<5b70> 5631 +<5b71> 6522 +<5b75> 5121 +<5b78> 7631 +<5b7a> 6315 +<5b7c> 5923 +<5b85> 4266 +<5b87> 6204 +endcidchar + +100 begincidchar +<5b88> 5574 +<5b89> 5807 +<5b8b> 5553 +<5b8c> 6108 +<5b8f> 3864 +<5b93> 5078 +<5b95> 7427 +<5b96> 7950 +<5b97> 6838 +<5b98> 3820 +<5b99> 6870 +<5b9a> 6711 +<5b9b> 6109 +<5b9c> 6397 +<5ba2> 3580 +<5ba3> 5423 +<5ba4> 5759 +<5ba5> 6316 +<5ba6> 7885 +<5bac> 5476 +<5bae> 3963 +<5bb0> 6573 +<5bb3> 7691 +<5bb4> 5960 +<5bb5> 5503 +<5bb6> 3446 +<5bb8> 5740 +<5bb9> 6180 +<5bbf> 5632 +<5bc0> 7116 +<5bc2> 6622 +<5bc3> 6263 +<5bc4> 4074 +<5bc5> 6450 +<5bc6> 4883 +<5bc7> 3907 +<5bcc> 5122 +<5bd0> 4711 +<5bd2> 7635 +<5bd3> 6205 +<5bd4> 5721 +<5bd7> 4168 +<5bde> 4664 +<5bdf> 7078 +<5be1> 3803 +<5be2> 7368 +<5be4> 6061 +<5be5> 6146 +<5be6> 5760 +<5be7> 4167 +<5be8> 7117 +<5be9> 5762 +<5beb> 5258 +<5bec> 3821 +<5bee> 4553 +<5bef> 6906 +<5bf5> 7253 +<5bf6> 5061 +<5bf8> 7247 +<5bfa> 5259 +<5c01> 5095 +<5c04> 5260 +<5c07> 6541 +<5c08> 6653 +<5c09> 6291 +<5c0a> 6833 +<5c0b> 5763 +<5c0d> 4254 +<5c0e> 4275 +<5c0f> 5504 +<5c11> 5505 +<5c16> 7178 +<5c19> 5339 +<5c24> 6206 +<5c28> 4945 +<5c31> 7320 +<5c38> 5697 +<5c39> 6361 +<5c3a> 7136 +<5c3b> 3736 +<5c3c> 4186 +<5c3e> 4853 +<5c3f> 4180 +<5c40> 3948 +<5c45> 3587 +<5c46> 3710 +<5c48> 3960 +<5c4b> 6078 +<5c4d> 5699 +<5c4e> 5698 +<5c51> 5451 +<5c55> 6654 +<5c5b> 5044 +<5c60> 4276 +<5c62> 4566 +<5c64> 7335 +<5c65> 4618 +<5c6c> 5538 +<5c6f> 4358 +<5c71> 5305 +endcidchar + +100 begincidchar +<5c79> 8024 +<5c90> 4075 +<5c91> 6527 +<5ca1> 3539 +<5ca9> 5822 +<5cab> 5575 +<5cac> 3531 +<5cb1> 4255 +<5cb3> 5794 +<5cb5> 7806 +<5cb7> 4870 +<5cb8> 5808 +<5cba> 4492 +<5cbe> 6693 +<5cc0> 5576 +<5cd9> 7339 +<5ce0> 5340 +<5ce8> 5780 +<5cf4> 7735 +<5cf6> 4277 +<5cfb> 6907 +<5cfd> 7762 +<5d07> 5671 +<5d0d> 4421 +<5d0e> 4076 +<5d11> 3776 +<5d14> 7263 +<5d16> 5843 +<5d17> 3540 +<5d19> 4596 +<5d27> 5672 +<5d29> 5175 +<5d4b> 4854 +<5d4c> 3513 +<5d50> 4399 +<5d69> 5673 +<5d6c> 6136 +<5d6f> 7046 +<5d87> 3908 +<5d8b> 4278 +<5d9d> 4365 +<5da0> 3873 +<5da2> 6147 +<5daa> 5931 +<5db8> 6003 +<5dba> 4493 +<5dbc> 5375 +<5dbd> 5795 +<5dcd> 6137 +<5dd2> 4673 +<5dd6> 5823 +<5ddd> 7152 +<5dde> 6871 +<5de1> 5640 +<5de2> 5506 +<5de5> 3791 +<5de6> 6856 +<5de7> 3874 +<5de8> 3588 +<5deb> 4813 +<5dee> 7047 +<5df1> 4077 +<5df2> 6418 +<5df3> 5261 +<5df4> 7476 +<5df7> 7674 +<5dfd> 5547 +<5dfe> 3604 +<5e02> 5700 +<5e03> 7551 +<5e06> 5010 +<5e0c> 8042 +<5e11> 7428 +<5e16> 7189 +<5e19> 7019 +<5e1b> 4990 +<5e1d> 6763 +<5e25> 5577 +<5e2b> 5262 +<5e2d> 5405 +<5e33> 6542 +<5e36> 4256 +<5e38> 5341 +<5e3d> 4768 +<5e3f> 7973 +<5e40> 6712 +<5e44> 5796 +<5e45> 7571 +<5e47> 4946 +<5e4c> 7905 +<5e55> 4665 +<5e5f> 7340 +<5e61> 4996 +<5e62> 4242 +<5e63> 7536 +<5e72> 3481 +<5e73> 7530 +<5e74> 4160 +<5e77> 5045 +<5e78> 7706 +endcidchar + +100 begincidchar +<5e79> 3482 +<5e7b> 7886 +<5e7e> 4078 +<5e84> 6543 +<5e87> 5188 +<5e8a> 5342 +<5e8f> 5376 +<5e95> 6596 +<5e97> 6694 +<5e9a> 3670 +<5e9c> 5123 +<5ea0> 5343 +<5ea6> 4279 +<5ea7> 6857 +<5eab> 3737 +<5ead> 6713 +<5eb5> 5824 +<5eb6> 5377 +<5eb7> 3541 +<5eb8> 6181 +<5ebe> 6319 +<5ec2> 5344 +<5ec8> 7620 +<5ec9> 4483 +<5eca> 4412 +<5ed0> 3909 +<5ed3> 3815 +<5ed6> 4554 +<5eda> 6872 +<5edb> 6655 +<5edf> 4803 +<5ee0> 7097 +<5ee2> 7537 +<5ee3> 3843 +<5eec> 4444 +<5ef3> 7197 +<5ef6> 5961 +<5ef7> 6714 +<5efa> 3605 +<5efb> 7930 +<5f01> 5032 +<5f04> 4537 +<5f0a> 7538 +<5f0f> 5722 +<5f11> 5701 +<5f13> 3964 +<5f14> 6787 +<5f15> 6451 +<5f17> 5172 +<5f18> 7854 +<5f1b> 6419 +<5f1f> 6764 +<5f26> 7736 +<5f27> 7807 +<5f29> 4171 +<5f31> 5872 +<5f35> 6544 +<5f3a> 3542 +<5f3c> 7605 +<5f48> 7411 +<5f4a> 3543 +<5f4c> 4855 +<5f4e> 4674 +<5f56> 4198 +<5f57> 7792 +<5f59> 7997 +<5f5b> 6420 +<5f62> 7775 +<5f66> 5919 +<5f67> 6230 +<5f69> 7118 +<5f6a> 7578 +<5f6b> 6788 +<5f6c> 5225 +<5f6d> 7513 +<5f70> 7098 +<5f71> 6004 +<5f77> 4947 +<5f79> 5949 +<5f7c> 7597 +<5f7f> 5173 +<5f80> 6126 +<5f81> 6715 +<5f85> 4257 +<5f87> 5641 +<5f8a> 7931 +<5f8b> 4600 +<5f8c> 7974 +<5f90> 5378 +<5f91> 3671 +<5f92> 4280 +<5f97> 4364 +<5f98> 4972 +<5f99> 5263 +<5f9e> 6839 +<5fa0> 4422 +<5fa1> 5903 +<5fa8> 7906 +<5fa9> 5079 +<5faa> 5642 +endcidchar + +100 begincidchar +<5fae> 4856 +<5fb5> 7038 +<5fb7> 4267 +<5fb9> 7170 +<5fbd> 7998 +<5fc3> 5764 +<5fc5> 7606 +<5fcc> 4079 +<5fcd> 6452 +<5fd6> 7248 +<5fd7> 6947 +<5fe0> 7307 +<5feb> 7379 +<5ff5> 4163 +<5ffd> 7850 +<5fff> 5158 +<600f> 5835 +<6012> 4172 +<6016> 7552 +<601c> 4494 +<601d> 5264 +<6020> 7434 +<6021> 6421 +<6025> 4053 +<6027> 5477 +<6028> 6264 +<602a> 3859 +<602f> 3625 +<6041> 6473 +<6042> 5643 +<6043> 5702 +<604d> 7907 +<6050> 3792 +<6052> 7675 +<6055> 5379 +<6059> 5882 +<605d> 3836 +<6062> 7932 +<6063> 6491 +<6064> 8010 +<6065> 7341 +<6068> 7636 +<6069> 6374 +<606a> 3468 +<606c> 4164 +<606d> 3793 +<606f> 5723 +<6070> 8031 +<6085> 5985 +<6089> 5761 +<608c> 6765 +<608d> 7637 +<6094> 7933 +<6096> 7504 +<609a> 5554 +<609b> 6656 +<609f> 6062 +<60a0> 6320 +<60a3> 7887 +<60a4> 7254 +<60a7> 4619 +<60b0> 6840 +<60b2> 5189 +<60b3> 4268 +<60b4> 7312 +<60b6> 4871 +<60b8> 3711 +<60bc> 4281 +<60bd> 7132 +<60c5> 6716 +<60c7> 4320 +<60d1> 7841 +<60da> 7851 +<60dc> 5406 +<60df> 6321 +<60e0> 7793 +<60e1> 5797 +<60f0> 7385 +<60f1> 4178 +<60f3> 5345 +<60f6> 7908 +<60f9> 5866 +<60fa> 5478 +<60fb> 7333 +<6101> 5578 +<6106> 3606 +<610d> 4872 +<610e> 7517 +<610f> 6398 +<6115> 5798 +<611a> 6207 +<611b> 5844 +<611f> 3514 +<6127> 3860 +<6130> 7909 +<6134> 7099 +<6137> 3565 +<613c> 5741 +<613e> 3566 +<613f> 6265 +endcidchar + +100 begincidchar +<6142> 6182 +<6144> 4601 +<6147> 6375 +<6148> 6492 +<614a> 3655 +<614b> 7435 +<614c> 7910 +<6153> 7579 +<6155> 4769 +<615d> 7471 +<615f> 7453 +<6162> 4675 +<6163> 3822 +<6164> 3469 +<6167> 7794 +<6168> 3567 +<616b> 6841 +<616e> 4445 +<6170> 6292 +<6176> 3672 +<6177> 3544 +<617d> 7137 +<617e> 6168 +<6181> 7255 +<6182> 6208 +<618a> 5190 +<618e> 6932 +<6190> 4465 +<6191> 5237 +<6194> 7217 +<6198> 8044 +<6199> 8043 +<619a> 7412 +<61a4> 5159 +<61a7> 4336 +<61a9> 3628 +<61ab> 4873 +<61ac> 3673 +<61ae> 4814 +<61b2> 7723 +<61b6> 5913 +<61ba> 4219 +<61be> 3515 +<61c3> 4026 +<61c7> 3483 +<61c8> 7692 +<61c9> 6391 +<61ca> 6063 +<61cb> 4815 +<61e6> 4135 +<61f2> 7039 +<61f6> 4375 +<61f7> 7934 +<61f8> 7737 +<61fa> 7087 +<61fc> 3910 +<61ff> 6399 +<6200> 4466 +<6207> 4243 +<6208> 3804 +<620a> 4816 +<620c> 5667 +<620d> 5579 +<620e> 6369 +<6210> 5479 +<6211> 5781 +<6212> 3712 +<6216> 7842 +<621a> 7138 +<621f> 4019 +<6221> 3516 +<622a> 6685 +<622e> 4592 +<6230> 6657 +<6231> 8045 +<6234> 4258 +<6236> 7808 +<623e> 4446 +<623f> 4948 +<6240> 5507 +<6241> 7520 +<6247> 5424 +<6248> 7809 +<6249> 5191 +<624b> 5580 +<624d> 6574 +<6253> 7386 +<6258> 7398 +<626e> 5160 +<6271> 4054 +<6276> 5124 +<6279> 5192 +<627c> 5852 +<627f> 5687 +<6280> 4080 +<6284> 7218 +<6289> 3648 +<628a> 7477 +<6291> 5914 +<6292> 5380 +endcidchar + +100 begincidchar +<6295> 7468 +<6297> 7676 +<6298> 6686 +<629b> 7553 +<62ab> 7598 +<62b1> 7554 +<62b5> 6597 +<62b9> 4690 +<62bc> 5830 +<62bd> 7266 +<62c2> 5174 +<62c7> 4817 +<62c8> 4165 +<62c9> 4409 +<62cc> 4909 +<62cd> 4888 +<62cf> 4136 +<62d0> 3861 +<62d2> 3589 +<62d3> 7139 +<62d4> 4931 +<62d6> 7387 +<62d7> 6148 +<62d8> 3911 +<62d9> 6835 +<62db> 7219 +<62dc> 4973 +<62ec> 3837 +<62ed> 5724 +<62ee> 4129 +<62ef> 6934 +<62f1> 3794 +<62f3> 3974 +<62f7> 3738 +<62fe> 5678 +<62ff> 4137 +<6301> 6948 +<6307> 6949 +<6309> 5809 +<6311> 4282 +<632b> 6858 +<632f> 6983 +<633a> 6717 +<633b> 5963 +<633d> 4676 +<633e> 7763 +<6349> 7055 +<634c> 7501 +<634f> 4143 +<6350> 5962 +<6355> 7555 +<6367> 5098 +<6368> 5265 +<636e> 3590 +<6372> 3975 +<6377> 7190 +<637a> 4144 +<637b> 4166 +<637f> 5381 +<6383> 5508 +<6388> 5581 +<6389> 4283 +<638c> 6545 +<6392> 4974 +<6396> 5853 +<6398> 3961 +<639b> 3853 +<63a0> 4425 +<63a1> 7119 +<63a2> 7420 +<63a5> 6701 +<63a7> 3795 +<63a8> 7267 +<63a9> 5929 +<63aa> 6789 +<63c0> 3484 +<63c4> 6324 +<63c6> 3997 +<63cf> 4804 +<63d0> 6766 +<63d6> 6387 +<63da> 5883 +<63db> 7888 +<63e1> 5799 +<63ed> 3629 +<63ee> 7999 +<63f4> 6266 +<63f6> 5867 +<63f7> 5327 +<640d> 5548 +<640f> 4889 +<6414> 5509 +<6416> 6149 +<6417> 4284 +<641c> 5582 +<6422> 6984 +<642c> 4910 +<642d> 7425 +<643a> 8006 +<643e> 7056 +endcidchar + +100 begincidchar +<6458> 6623 +<6460> 7256 +<6469> 4656 +<646f> 6950 +<647a> 6702 +<6488> 4512 +<6491> 7447 +<6492> 5316 +<6493> 6150 +<649a> 4161 +<649e> 4244 +<64a4> 7171 +<64a5> 4932 +<64ab> 4818 +<64ad> 7478 +<64ae> 7261 +<64b0> 7062 +<64b2> 4890 +<64bb> 4212 +<64c1> 6091 +<64c4> 4513 +<64c5> 7153 +<64c7> 7445 +<64ca> 3630 +<64cd> 6790 +<64ce> 3674 +<64d2> 4040 +<64d4> 4220 +<64d8> 5023 +<64da> 3591 +<64e1> 4259 +<64e2> 7399 +<64e5> 4400 +<64e6> 7079 +<64e7> 3592 +<64ec> 6400 +<64f2> 7140 +<64f4> 7877 +<64fa> 7479 +<64fe> 6151 +<6500> 4911 +<6504> 7448 +<6518> 5884 +<651d> 5471 +<6523> 4467 +<652a> 3875 +<652b> 7878 +<652c> 4401 +<652f> 6951 +<6536> 5583 +<6537> 3739 +<6538> 6325 +<6539> 3568 +<653b> 3796 +<653e> 4949 +<653f> 6718 +<6545> 3740 +<6548> 7956 +<654d> 5382 +<654e> 3876 +<654f> 4874 +<6551> 3912 +<6556> 6064 +<6557> 7505 +<655e> 7100 +<6562> 3517 +<6563> 5306 +<6566> 4321 +<656c> 3675 +<656d> 5885 +<6572> 3741 +<6574> 6719 +<6575> 6624 +<6577> 5125 +<6578> 5584 +<657e> 5425 +<6582> 4484 +<6583> 7539 +<6585> 7957 +<6587> 4840 +<658c> 5226 +<6590> 5193 +<6591> 4912 +<6597> 4349 +<6599> 4555 +<659b> 3768 +<659c> 5266 +<659f> 7030 +<65a1> 5817 +<65a4> 4027 +<65a5> 7141 +<65a7> 5126 +<65ab> 6512 +<65ac> 7088 +<65af> 5267 +<65b0> 5742 +<65b7> 4199 +<65b9> 4950 +<65bc> 5904 +<65bd> 5703 +endcidchar + +100 begincidchar +<65c1> 4951 +<65c5> 4447 +<65cb> 5426 +<65cc> 6720 +<65cf> 6828 +<65d2> 4578 +<65d7> 4081 +<65e0> 4819 +<65e3> 4082 +<65e5> 6464 +<65e6> 4200 +<65e8> 6952 +<65e9> 6791 +<65ec> 5644 +<65ed> 6231 +<65f1> 7638 +<65f4> 6209 +<65fa> 6127 +<65fd> 4322 +<65ff> 6065 +<6606> 3777 +<6607> 5688 +<6609> 4952 +<660a> 7810 +<660c> 7101 +<660e> 4751 +<660f> 7845 +<6610> 5161 +<6611> 4041 +<6613> 5950 +<6614> 5407 +<6615> 8019 +<661e> 5046 +<661f> 5480 +<6620> 6005 +<6625> 7300 +<6627> 4712 +<6628> 6513 +<662d> 5510 +<662f> 5704 +<6630> 7621 +<6631> 6232 +<6634> 4805 +<6636> 7102 +<663a> 5047 +<663b> 5836 +<6641> 6792 +<6642> 5705 +<6649> 6985 +<664b> 6986 +<664f> 5810 +<6659> 6908 +<665b> 7738 +<665d> 6873 +<665e> 8046 +<665f> 5481 +<6664> 6066 +<6665> 7890 +<6666> 7935 +<6667> 7811 +<6668> 5743 +<6669> 4677 +<666b> 7400 +<666e> 5062 +<666f> 3676 +<6673> 5408 +<6674> 7198 +<6676> 6721 +<6677> 3990 +<6678> 6722 +<667a> 6953 +<6684> 7991 +<6687> 3447 +<6688> 7988 +<6689> 8000 +<668e> 6006 +<6690> 6293 +<6691> 5383 +<6696> 4140 +<6697> 5825 +<6698> 5886 +<669d> 4752 +<66a0> 3742 +<66a2> 7103 +<66ab> 6528 +<66ae> 4772 +<66b2> 6546 +<66b3> 7795 +<66b4> 7572 +<66b9> 5464 +<66bb> 3677 +<66be> 4323 +<66c4> 5999 +<66c6> 4459 +<66c7> 4221 +<66c9> 7958 +<66d6> 5845 +<66d9> 5384 +<66dc> 6152 +<66dd> 7573 +endcidchar + +100 begincidchar +<66e0> 3844 +<66e6> 8047 +<66f0> 6125 +<66f2> 3769 +<66f3> 6033 +<66f4> 3678 +<66f7> 3502 +<66f8> 5385 +<66f9> 6794 +<66fa> 6793 +<66fc> 4678 +<66fe> 6933 +<66ff> 7206 +<6700> 7264 +<6703> 7936 +<6708> 6281 +<6709> 6326 +<670b> 5176 +<670d> 5080 +<6714> 5302 +<6715> 7031 +<6717> 4413 +<671b> 4700 +<671d> 6795 +<6726> 4798 +<6727> 4538 +<6728> 4788 +<672a> 4857 +<672b> 4691 +<672c> 5091 +<672d> 7080 +<672e> 7304 +<6731> 6874 +<6734> 4891 +<6736> 7388 +<673a> 3984 +<673d> 7975 +<6746> 3485 +<6749> 5321 +<674e> 4620 +<674f> 7707 +<6750> 6575 +<6751> 7249 +<6753> 7580 +<6756> 6547 +<675c> 4350 +<675e> 4085 +<675f> 5539 +<676d> 7677 +<676f> 4975 +<6770> 3615 +<6771> 4337 +<6773> 4806 +<6775> 6598 +<6777> 7480 +<677b> 4183 +<677e> 5555 +<677f> 7492 +<6787> 5194 +<6789> 6128 +<678b> 4953 +<678f> 4146 +<6790> 5409 +<6793> 4351 +<6795> 7369 +<6797> 4647 +<679a> 4713 +<679c> 3805 +<679d> 6954 +<67af> 3743 +<67b0> 7531 +<67b3> 6955 +<67b8> 3913 +<67be> 5706 +<67c4> 5048 +<67cf> 4991 +<67d0> 4773 +<67d1> 3518 +<67d2> 7365 +<67d3> 5990 +<67d4> 6327 +<67da> 6328 +<67dd> 7401 +<67e9> 3914 +<67ec> 3486 +<67ef> 3450 +<67f0> 4157 +<67f1> 6875 +<67f3> 4579 +<67f4> 5707 +<67f5> 7127 +<67f6> 5268 +<67fb> 5269 +<67fe> 6723 +<6812> 5645 +<6813> 6658 +<6816> 5386 +<6817> 4602 +<6821> 3877 +<6822> 4992 +endcidchar + +100 begincidchar +<682a> 6876 +<682f> 6233 +<6838> 7704 +<6839> 4028 +<683c> 3631 +<683d> 6576 +<6840> 3616 +<6841> 7678 +<6842> 3713 +<6843> 4285 +<6848> 5811 +<684e> 7020 +<6850> 4338 +<6851> 5346 +<6853> 7891 +<6854> 4130 +<686d> 6987 +<6876> 7454 +<687f> 3487 +<6881> 4431 +<6885> 4714 +<688f> 3770 +<6893> 6577 +<6894> 7342 +<6897> 3679 +<689d> 6796 +<689f> 7959 +<68a1> 6110 +<68a2> 7220 +<68a7> 6067 +<68a8> 4621 +<68ad> 5270 +<68af> 6767 +<68b0> 3714 +<68b1> 3778 +<68b3> 5511 +<68b5> 5011 +<68b6> 4858 +<68c4> 4087 +<68c5> 5049 +<68c9> 4738 +<68cb> 4086 +<68cd> 3779 +<68d2> 5099 +<68d5> 6842 +<68d7> 6797 +<68d8> 4020 +<68da> 5177 +<68df> 4339 +<68e0> 4245 +<68e7> 6523 +<68e8> 3715 +<68ee> 5322 +<68f2> 5387 +<68f9> 4286 +<68fa> 3823 +<6900> 6111 +<6905> 6401 +<690d> 5725 +<690e> 7268 +<6912> 7221 +<6927> 4753 +<6930> 5868 +<693d> 5964 +<693f> 7301 +<694a> 5887 +<6953> 7592 +<6954> 5452 +<6955> 7389 +<6957> 3607 +<6959> 4820 +<695a> 7222 +<695e> 4608 +<6960> 4147 +<6963> 4859 +<6968> 6724 +<696b> 6928 +<696d> 5932 +<696e> 6599 +<696f> 5646 +<6975> 4021 +<6977> 7693 +<6978> 7269 +<6979> 6007 +<6995> 6183 +<699b> 6988 +<699c> 4954 +<69a5> 7913 +<69a7> 5195 +<69ae> 6008 +<69b4> 4580 +<69bb> 7426 +<69c1> 3744 +<69c3> 4913 +<69cb> 3915 +<69cc> 7460 +<69cd> 7104 +<69d0> 3862 +<69e8> 3816 +<69ea> 3569 +endcidchar + +100 begincidchar +<69fb> 3998 +<69fd> 6798 +<69ff> 4029 +<6a02> 5800 +<6a0a> 4997 +<6a11> 4432 +<6a13> 4567 +<6a17> 6600 +<6a19> 7581 +<6a1e> 7270 +<6a1f> 6548 +<6a21> 4774 +<6a23> 5888 +<6a35> 7223 +<6a38> 4892 +<6a39> 5585 +<6a3a> 7866 +<6a3d> 6909 +<6a44> 3519 +<6a48> 6153 +<6a4b> 3878 +<6a52> 6239 +<6a53> 5647 +<6a58> 4015 +<6a59> 4366 +<6a5f> 4088 +<6a61> 5347 +<6a6b> 7951 +<6a80> 4201 +<6a84> 3632 +<6a89> 6725 +<6a8d> 5915 +<6a8e> 4042 +<6a97> 5024 +<6a9c> 7937 +<6aa2> 3620 +<6aa3> 6549 +<6ab3> 5227 +<6abb> 7656 +<6ac2> 4287 +<6ac3> 3985 +<6ad3> 4514 +<6ada> 4448 +<6adb> 6927 +<6af6> 7724 +<6afb> 5858 +<6b04> 4391 +<6b0a> 3976 +<6b0c> 6550 +<6b12> 4392 +<6b16> 4402 +<6b20> 8027 +<6b21> 7048 +<6b23> 8020 +<6b32> 6169 +<6b3a> 4089 +<6b3d> 8028 +<6b3e> 3824 +<6b46> 8029 +<6b47> 7727 +<6b4c> 3451 +<6b4e> 7413 +<6b50> 3916 +<6b5f> 5937 +<6b61> 7889 +<6b62> 6956 +<6b63> 6726 +<6b64> 7049 +<6b65> 5063 +<6b66> 4821 +<6b6a> 6133 +<6b72> 5494 +<6b77> 4460 +<6b78> 3991 +<6b7b> 5271 +<6b7f> 4795 +<6b83> 5837 +<6b84> 6989 +<6b86> 7436 +<6b89> 5648 +<6b8a> 5586 +<6b96> 5726 +<6b98> 6524 +<6b9e> 6240 +<6bae> 4485 +<6baf> 5228 +<6bb2> 5465 +<6bb5> 4202 +<6bb7> 6376 +<6bba> 5317 +<6bbc> 3470 +<6bbf> 6659 +<6bc1> 7996 +<6bc5> 6402 +<6bc6> 3917 +<6bcb> 4822 +<6bcd> 4775 +<6bcf> 4715 +<6bd2> 4309 +<6bd3> 6356 +endcidchar + +100 begincidchar +<6bd4> 5196 +<6bdb> 4776 +<6beb> 7812 +<6bec> 3918 +<6c08> 6660 +<6c0f> 5774 +<6c11> 4877 +<6c13> 4728 +<6c23> 4090 +<6c34> 5587 +<6c37> 5238 +<6c38> 6009 +<6c3e> 5012 +<6c40> 6727 +<6c41> 6929 +<6c42> 3919 +<6c4e> 5013 +<6c50> 5410 +<6c55> 5307 +<6c57> 7639 +<6c5a> 6068 +<6c5d> 5938 +<6c5e> 7855 +<6c5f> 3545 +<6c60> 6957 +<6c68> 3784 +<6c6a> 6129 +<6c6d> 6034 +<6c70> 7437 +<6c72> 4055 +<6c76> 4841 +<6c7a> 3649 +<6c7d> 4091 +<6c7e> 5162 +<6c81> 5765 +<6c82> 4092 +<6c83> 6079 +<6c85> 6267 +<6c86> 7679 +<6c87> 5965 +<6c88> 7370 +<6c8c> 4324 +<6c90> 4789 +<6c92> 4796 +<6c93> 4234 +<6c94> 4739 +<6c95> 4849 +<6c96> 7308 +<6c99> 5272 +<6c9a> 6958 +<6c9b> 7506 +<6cab> 4692 +<6cae> 6601 +<6cb3> 7622 +<6cb8> 5200 +<6cb9> 6331 +<6cbb> 7343 +<6cbc> 5512 +<6cbd> 3745 +<6cbe> 7179 +<6cbf> 5966 +<6cc1> 7914 +<6cc2> 7776 +<6cc4> 5453 +<6cc9> 7154 +<6cca> 4893 +<6ccc> 7607 +<6cd3> 7856 +<6cd5> 5018 +<6cd7> 5273 +<6cdb> 5014 +<6ce1> 7556 +<6ce2> 7481 +<6ce3> 6388 +<6ce5> 4187 +<6ce8> 6877 +<6ceb> 7739 +<6cee> 4914 +<6cef> 4878 +<6cf0> 7438 +<6cf3> 6010 +<6d0b> 5889 +<6d0c> 4480 +<6d11> 5064 +<6d17> 5495 +<6d19> 5588 +<6d1b> 4382 +<6d1e> 4340 +<6d25> 6990 +<6d27> 6332 +<6d29> 5454 +<6d2a> 7857 +<6d32> 6878 +<6d35> 5649 +<6d36> 8016 +<6d38> 3845 +<6d39> 6268 +<6d3b> 7899 +<6d3d> 8032 +<6d3e> 7482 +endcidchar + +100 begincidchar +<6d41> 4581 +<6d59> 6687 +<6d5a> 6910 +<6d5c> 5229 +<6d63> 6112 +<6d66> 7557 +<6d69> 7813 +<6d6a> 4414 +<6d6c> 4622 +<6d6e> 5127 +<6d74> 6170 +<6d77> 7694 +<6d78> 7371 +<6d79> 7764 +<6d7f> 7507 +<6d85> 5986 +<6d87> 3680 +<6d88> 5513 +<6d89> 5472 +<6d8c> 6184 +<6d8d> 7960 +<6d8e> 5967 +<6d91> 5540 +<6d93> 5968 +<6d95> 7207 +<6daf> 5846 +<6db2> 5854 +<6db5> 7657 +<6dc0> 6728 +<6dc3> 3977 +<6dc4> 7344 +<6dc5> 5411 +<6dc6> 7961 +<6dc7> 4093 +<6dcb> 4648 +<6dcf> 7814 +<6dd1> 5633 +<6dd8> 4288 +<6dd9> 6843 +<6dda> 4568 +<6dde> 5556 +<6de1> 4222 +<6de8> 6729 +<6dea> 4597 +<6deb> 6382 +<6dee> 7938 +<6df1> 5766 +<6df3> 5650 +<6df5> 5969 +<6df7> 7846 +<6df8> 7199 +<6df9> 5930 +<6dfa> 7155 +<6dfb> 7180 +<6e17> 5323 +<6e19> 7892 +<6e1a> 6602 +<6e1b> 3520 +<6e1f> 6730 +<6e20> 3593 +<6e21> 4289 +<6e23> 5274 +<6e24> 4933 +<6e25> 5801 +<6e26> 6099 +<6e2b> 5455 +<6e2c> 7334 +<6e2d> 6294 +<6e2f> 7680 +<6e32> 5427 +<6e34> 3503 +<6e36> 6011 +<6e38> 6333 +<6e3a> 4807 +<6e3c> 4860 +<6e3d> 6578 +<6e3e> 7847 +<6e43> 4976 +<6e44> 4861 +<6e4a> 6879 +<6e4d> 4203 +<6e56> 7815 +<6e58> 5348 +<6e5b> 4223 +<6e5c> 5727 +<6e5e> 6731 +<6e5f> 7915 +<6e67> 6185 +<6e6b> 7271 +<6e6e> 6453 +<6e6f> 7429 +<6e72> 6269 +<6e73> 4148 +<6e7a> 5065 +<6e90> 6270 +<6e96> 6911 +<6e9c> 4582 +<6e9d> 3920 +<6e9f> 4754 +<6ea2> 6465 +endcidchar + +100 begincidchar +<6ea5> 5128 +<6eaa> 3716 +<6eab> 6083 +<6eaf> 5514 +<6eb1> 6991 +<6eb6> 6186 +<6eba> 4189 +<6ec2> 4955 +<6ec4> 7105 +<6ec5> 4746 +<6ec9> 7916 +<6ecb> 6493 +<6ecc> 7142 +<6ece> 7777 +<6ed1> 7900 +<6ed3> 6579 +<6ed4> 4290 +<6eef> 7208 +<6ef4> 6625 +<6ef8> 7816 +<6efe> 3780 +<6eff> 4679 +<6f01> 5905 +<6f02> 7582 +<6f06> 7366 +<6f0f> 4569 +<6f11> 3570 +<6f14> 5970 +<6f15> 6799 +<6f20> 4666 +<6f22> 7640 +<6f23> 4468 +<6f2b> 4680 +<6f2c> 6959 +<6f31> 5589 +<6f32> 7106 +<6f38> 6695 +<6f3f> 6551 +<6f41> 6012 +<6f51> 4934 +<6f54> 3650 +<6f57> 7033 +<6f58> 4915 +<6f5a> 5634 +<6f5b> 6529 +<6f5e> 4515 +<6f5f> 5412 +<6f62> 7917 +<6f64> 6362 +<6f6d> 4224 +<6f6e> 6800 +<6f70> 3986 +<6f7a> 6525 +<6f7c> 4341 +<6f7d> 5066 +<6f7e> 4639 +<6f81> 5328 +<6f84> 7040 +<6f88> 7172 +<6f8d> 6880 +<6f8e> 7514 +<6f90> 6241 +<6f94> 7817 +<6f97> 3488 +<6fa3> 7641 +<6fa4> 7446 +<6fa7> 4507 +<6fae> 7939 +<6faf> 7063 +<6fb1> 6661 +<6fb3> 6069 +<6fb9> 4225 +<6fbe> 4213 +<6fc0> 3633 +<6fc1> 7402 +<6fc2> 4486 +<6fc3> 4175 +<6fca> 6035 +<6fd5> 5677 +<6fda> 6013 +<6fdf> 6768 +<6fe0> 7818 +<6fe1> 6334 +<6fe4> 4291 +<6fe9> 7819 +<6feb> 4403 +<6fec> 6912 +<6fef> 7403 +<6ff1> 5230 +<6ffe> 4449 +<7001> 5890 +<7005> 7778 +<7006> 4310 +<7009> 5275 +<700b> 5767 +<700f> 4583 +<7011> 7574 +<7015> 5231 +<7018> 4516 +<701a> 7642 +endcidchar + +100 begincidchar +<701b> 6014 +<701c> 6370 +<701d> 4461 +<701e> 6732 +<701f> 5515 +<7023> 7695 +<7027> 4539 +<7028> 4544 +<702f> 6015 +<7037> 6437 +<703e> 4393 +<704c> 3825 +<7050> 7779 +<7051> 5562 +<7058> 7414 +<705d> 7820 +<7063> 4681 +<706b> 7867 +<7070> 7940 +<7078> 3921 +<707c> 6514 +<707d> 6580 +<7085> 3681 +<708a> 7321 +<708e> 5991 +<7092> 7224 +<7098> 8021 +<7099> 6494 +<709a> 3846 +<70a1> 6733 +<70a4> 5516 +<70ab> 7740 +<70ac> 3594 +<70ad> 7415 +<70af> 7780 +<70b3> 5050 +<70b7> 6881 +<70b8> 6515 +<70b9> 6696 +<70c8> 4481 +<70cb> 8007 +<70cf> 6070 +<70d8> 7858 +<70d9> 4383 +<70dd> 6935 +<70df> 5971 +<70f1> 3682 +<70f9> 7515 +<70fd> 5100 +<7104> 7983 +<7109> 5920 +<710c> 6913 +<7119> 4977 +<711a> 5163 +<711e> 4325 +<7121> 4823 +<7126> 7225 +<7130> 5992 +<7136> 5972 +<7147> 8001 +<7149> 4469 +<714a> 7992 +<714c> 7918 +<714e> 6662 +<7150> 6016 +<7156> 4141 +<7159> 5973 +<715c> 6234 +<715e> 5318 +<7164> 4716 +<7165> 7893 +<7166> 7976 +<7167> 6801 +<7169> 4998 +<716c> 5891 +<716e> 6495 +<717d> 5428 +<7184> 5728 +<7189> 6242 +<718a> 6253 +<718f> 7984 +<7192> 7781 +<7194> 6187 +<7199> 8048 +<719f> 5635 +<71a2> 5101 +<71ac> 6071 +<71b1> 5987 +<71be> 7345 +<71c1> 6000 +<71c3> 5974 +<71c8> 4367 +<71c9> 4326 +<71ce> 4556 +<71d0> 4640 +<71d2> 5517 +<71d4> 4999 +<71d5> 5975 +<71df> 6017 +<71e5> 6802 +endcidchar + +100 begincidchar +<71e6> 7064 +<71e7> 5590 +<71ed> 7243 +<71ee> 5473 +<71fb> 7985 +<71fc> 5744 +<71fe> 4292 +<71ff> 6154 +<7200> 7731 +<7206> 7575 +<7210> 4517 +<721b> 4394 +<722a> 6803 +<722c> 7483 +<722d> 6587 +<7230> 6271 +<7232> 6295 +<7235> 6516 +<7236> 5129 +<723a> 5869 +<723b> 7962 +<723d> 5349 +<723e> 6422 +<7240> 5350 +<7246> 6552 +<7247> 7521 +<7248> 7493 +<724c> 7508 +<7252> 7191 +<7258> 4311 +<7259> 5782 +<725b> 6210 +<725d> 5232 +<725f> 4777 +<7261> 4778 +<7262> 4545 +<7267> 4790 +<7269> 4850 +<7272> 5369 +<7279> 7472 +<727d> 3638 +<7280> 5388 +<7281> 4623 +<72a2> 4312 +<72a7> 8051 +<72ac> 3639 +<72af> 5015 +<72c0> 5351 +<72c2> 3847 +<72c4> 6626 +<72ce> 5831 +<72d0> 7821 +<72d7> 3922 +<72d9> 6603 +<72e1> 3879 +<72e9> 5591 +<72f8> 4624 +<72f9> 7765 +<72fc> 4415 +<72fd> 7509 +<730a> 6036 +<7316> 7107 +<731b> 4729 +<731c> 5708 +<731d> 6836 +<7325> 6138 +<7329> 5482 +<732a> 6604 +<732b> 4808 +<733e> 7901 +<733f> 6272 +<7344> 6080 +<7345> 5276 +<7350> 6553 +<7352> 6072 +<7357> 3980 +<7368> 4313 +<736a> 7941 +<7370> 6018 +<7372> 7949 +<7375> 4488 +<7378> 5592 +<737a> 4214 +<737b> 7725 +<7384> 7741 +<7386> 6496 +<7387> 5552 +<7389> 6081 +<738b> 6130 +<738e> 6734 +<7394> 7156 +<7396> 3923 +<7397> 6211 +<7398> 4094 +<739f> 4879 +<73a7> 6363 +<73a9> 6113 +<73ad> 5233 +<73b2> 4495 +<73b3> 4260 +endcidchar + +100 begincidchar +<73b9> 7742 +<73c0> 4894 +<73c2> 3452 +<73c9> 4880 +<73ca> 5308 +<73cc> 7608 +<73cd> 6992 +<73cf> 3471 +<73d6> 3848 +<73d9> 3797 +<73dd> 7977 +<73de> 4384 +<73e0> 6882 +<73e3> 5651 +<73e4> 5067 +<73e5> 6423 +<73e6> 7713 +<73e9> 7782 +<73ea> 3999 +<73ed> 4916 +<73f7> 4824 +<73f9> 5483 +<73fd> 6735 +<73fe> 7743 +<7401> 5429 +<7403> 3924 +<7405> 4416 +<7406> 4625 +<7407> 5593 +<7409> 4584 +<7413> 6114 +<741b> 7372 +<7420> 6663 +<7421> 5636 +<7422> 7404 +<7425> 7822 +<7426> 4095 +<7428> 3781 +<742a> 4096 +<742b> 5102 +<742c> 6115 +<742e> 6844 +<742f> 3826 +<7430> 5993 +<7433> 4649 +<7434> 4043 +<7435> 5201 +<7436> 7484 +<7438> 7405 +<743a> 5019 +<743f> 7848 +<7440> 6212 +<7441> 4779 +<7443> 7302 +<7444> 5430 +<744b> 6296 +<7455> 7623 +<7457> 6273 +<7459> 4173 +<745a> 7823 +<745b> 6019 +<745c> 6337 +<745e> 5389 +<745f> 5674 +<7460> 4585 +<7462> 6188 +<7464> 6155 +<7465> 6084 +<7468> 6993 +<7469> 7783 +<746a> 4657 +<746f> 4417 +<747e> 4030 +<7482> 4097 +<7483> 4626 +<7487> 5431 +<7489> 4470 +<748b> 6554 +<7498> 4641 +<749c> 7919 +<749e> 4895 +<749f> 3683 +<74a1> 6994 +<74a3> 4098 +<74a5> 3684 +<74a7> 5025 +<74a8> 7065 +<74aa> 6804 +<74b0> 7894 +<74b2> 5594 +<74b5> 5939 +<74b9> 5637 +<74bd> 5363 +<74bf> 5432 +<74c6> 7021 +<74ca> 3685 +<74cf> 4540 +<74d4> 6020 +<74d8> 3827 +<74da> 7066 +endcidchar + +100 begincidchar +<74dc> 3806 +<74e0> 7824 +<74e2> 7583 +<74e3> 7494 +<74e6> 6100 +<74ee> 6092 +<74f7> 6497 +<7501> 5051 +<7504> 3640 +<7511> 6936 +<7515> 6093 +<7518> 3521 +<751a> 5768 +<751b> 7181 +<751f> 5370 +<7523> 5309 +<7525> 5371 +<7526> 5518 +<7528> 6189 +<752b> 5068 +<752c> 6190 +<7530> 6664 +<7531> 6338 +<7532> 3532 +<7533> 5745 +<7537> 4149 +<7538> 6665 +<753a> 6736 +<7547> 4011 +<754c> 3717 +<754f> 6139 +<7551> 6666 +<7553> 4235 +<7554> 4917 +<7559> 4586 +<755b> 6995 +<755c> 7289 +<755d> 4825 +<7562> 7609 +<7565> 4426 +<7566> 8008 +<756a> 5000 +<756f> 6914 +<7570> 6424 +<7575> 7868 +<7576> 4246 +<7578> 4099 +<757a> 3546 +<757f> 4100 +<7586> 3547 +<7587> 6883 +<758a> 7192 +<758b> 7610 +<758e> 5520 +<758f> 5519 +<7591> 6403 +<759d> 5310 +<75a5> 3571 +<75ab> 5951 +<75b1> 7558 +<75b2> 7599 +<75b3> 3522 +<75b5> 6498 +<75b8> 4215 +<75b9> 6996 +<75bc> 4342 +<75bd> 6605 +<75be> 7022 +<75c2> 3453 +<75c5> 5052 +<75c7> 6937 +<75cd> 6425 +<75d2> 5892 +<75d4> 7346 +<75d5> 8022 +<75d8> 4352 +<75d9> 3686 +<75db> 7455 +<75e2> 4627 +<75f0> 4226 +<75f2> 4658 +<75f4> 7347 +<75fa> 5202 +<75fc> 3746 +<7600> 5906 +<760d> 5893 +<7619> 5521 +<761f> 6085 +<7620> 7143 +<7621> 7108 +<7622> 4918 +<7624> 4587 +<7626> 5595 +<763b> 4570 +<7642> 4557 +<764c> 5826 +<764e> 3489 +<7652> 6339 +<7656> 5026 +<7661> 7348 +endcidchar + +100 begincidchar +<7664> 6688 +<7669> 4376 +<766c> 5433 +<7670> 6094 +<7672> 6667 +<7678> 3718 +<767b> 4368 +<767c> 4935 +<7684> 6627 +<7686> 3572 +<7687> 7920 +<768e> 3880 +<7690> 3747 +<7693> 7825 +<76ae> 7600 +<76ba> 7272 +<76bf> 4755 +<76c2> 6213 +<76c3> 4978 +<76c6> 5164 +<76c8> 6021 +<76ca> 6438 +<76d2> 7665 +<76d6> 3573 +<76db> 5484 +<76dc> 4293 +<76de> 6526 +<76df> 4731 +<76e1> 6997 +<76e3> 3523 +<76e4> 4919 +<76e7> 4518 +<76ee> 4791 +<76f2> 4730 +<76f4> 6975 +<76f8> 5352 +<76fc> 4920 +<76fe> 5652 +<7701> 5485 +<7704> 4740 +<7708> 7421 +<7709> 4862 +<770b> 3490 +<771e> 6998 +<7720> 4741 +<7729> 7744 +<7737> 3978 +<7738> 4780 +<773a> 6805 +<773c> 5812 +<7740> 7057 +<774d> 7745 +<775b> 6737 +<7761> 5596 +<7763> 4314 +<7766> 4792 +<776b> 7193 +<7779> 4294 +<777e> 3748 +<777f> 6037 +<778b> 6999 +<7791> 4756 +<779e> 4682 +<77a5> 5038 +<77ac> 5653 +<77ad> 4558 +<77b0> 3524 +<77b3> 4343 +<77bb> 7182 +<77bc> 3621 +<77bf> 3925 +<77d7> 7244 +<77db> 4781 +<77dc> 4060 +<77e2> 5709 +<77e3> 6404 +<77e5> 6960 +<77e9> 3926 +<77ed> 4204 +<77ee> 6134 +<77ef> 3881 +<77f3> 5413 +<7802> 5277 +<7812> 5203 +<7825> 6961 +<7826> 7120 +<7827> 7373 +<782c> 4652 +<7832> 7559 +<7834> 7485 +<7845> 4000 +<784f> 5976 +<785d> 7226 +<786b> 4588 +<786c> 3687 +<786f> 5977 +<787c> 5178 +<7881> 4101 +<7887> 6738 +<788c> 4528 +endcidchar + +100 begincidchar +<788d> 5847 +<788e> 5563 +<7891> 5204 +<7897> 6116 +<78a3> 3504 +<78a7> 5027 +<78a9> 5414 +<78bc> 4659 +<78c1> 6499 +<78c5> 4956 +<78ca> 4546 +<78cb> 7050 +<78ce> 3719 +<78d0> 4921 +<78e8> 4660 +<78ec> 3688 +<78ef> 4102 +<78f5> 3491 +<78fb> 4922 +<7901> 7227 +<790e> 7228 +<7916> 5940 +<792a> 4450 +<792b> 4462 +<792c> 4923 +<793a> 5710 +<793e> 5278 +<7940> 5279 +<7941> 4103 +<7949> 6962 +<7950> 6214 +<7956> 6806 +<7957> 6963 +<795a> 6807 +<795b> 3595 +<795c> 7826 +<795d> 7290 +<795e> 5746 +<7960> 5280 +<7965> 5353 +<7968> 7584 +<796d> 6769 +<797a> 4106 +<797f> 4529 +<7981> 4044 +<798d> 7869 +<798e> 6739 +<798f> 5081 +<7991> 6215 +<79a6> 5907 +<79a7> 8052 +<79aa> 5434 +<79ae> 4508 +<79b1> 4295 +<79b3> 5894 +<79b9> 6216 +<79bd> 4045 +<79be> 7870 +<79bf> 4315 +<79c0> 5597 +<79c1> 5281 +<79c9> 5053 +<79ca> 4162 +<79cb> 7273 +<79d1> 3807 +<79d2> 7229 +<79d5> 5205 +<79d8> 5206 +<79df> 6808 +<79e4> 7377 +<79e6> 7000 +<79e7> 5838 +<79e9> 7023 +<79fb> 6426 +<7a00> 8053 +<7a05> 5496 +<7a08> 3492 +<7a0b> 6740 +<7a0d> 7230 +<7a14> 6474 +<7a17> 7510 +<7a19> 6976 +<7a1a> 7349 +<7a1c> 4609 +<7a1f> 7591 +<7a20> 6809 +<7a2e> 6845 +<7a31> 7378 +<7a36> 6235 +<7a37> 6977 +<7a3b> 4296 +<7a3c> 3454 +<7a3d> 3720 +<7a3f> 3749 +<7a40> 3771 +<7a46> 4793 +<7a49> 7350 +<7a4d> 6628 +<7a4e> 6022 +<7a57> 5598 +endcidchar + +100 begincidchar +<7a61> 5366 +<7a62> 6038 +<7a69> 6086 +<7a6b> 7881 +<7a70> 5895 +<7a74> 7755 +<7a76> 3927 +<7a79> 3965 +<7a7a> 3798 +<7a7d> 6741 +<7a7f> 7157 +<7a81> 4330 +<7a84> 7058 +<7a88> 6156 +<7a92> 7024 +<7a93> 7109 +<7a95> 6810 +<7a98> 3954 +<7a9f> 3962 +<7aae> 3966 +<7aaf> 6157 +<7aba> 4001 +<7ac4> 7067 +<7ac5> 4002 +<7ac7> 4353 +<7aca> 6689 +<7acb> 4653 +<7ad7> 4809 +<7ad9> 7089 +<7add> 5054 +<7adf> 3689 +<7ae0> 6555 +<7ae3> 6915 +<7ae5> 4344 +<7aea> 5599 +<7aed> 3505 +<7aef> 4205 +<7af6> 3690 +<7af9> 6900 +<7afa> 7291 +<7aff> 3493 +<7b0f> 7852 +<7b11> 5522 +<7b19> 5372 +<7b1b> 6629 +<7b1e> 7439 +<7b20> 4654 +<7b26> 5130 +<7b2c> 6770 +<7b2d> 4496 +<7b39> 5497 +<7b46> 7611 +<7b49> 4369 +<7b4b> 4031 +<7b4c> 6668 +<7b4d> 5654 +<7b4f> 5006 +<7b50> 3849 +<7b51> 7292 +<7b52> 7456 +<7b54> 4236 +<7b56> 7128 +<7b60> 4012 +<7b6c> 5486 +<7b6e> 5390 +<7b75> 5978 +<7b7d> 6073 +<7b87> 3574 +<7b8b> 6669 +<7b8f> 6588 +<7b94> 4896 +<7b95> 4107 +<7b97> 5311 +<7b9a> 7051 +<7b9d> 3656 +<7ba1> 3828 +<7bad> 6670 +<7bb1> 5354 +<7bb4> 6530 +<7bb8> 6606 +<7bc0> 6690 +<7bc1> 7921 +<7bc4> 5016 +<7bc6> 6671 +<7bc7> 7522 +<7bc9> 7293 +<7bd2> 5729 +<7be0> 5523 +<7be4> 4316 +<7be9> 5282 +<7c07> 6829 +<7c12> 7068 +<7c1e> 4206 +<7c21> 3494 +<7c27> 7922 +<7c2a> 6531 +<7c2b> 5524 +<7c3d> 7183 +<7c3e> 4487 +<7c3f> 5131 +endcidchar + +100 begincidchar +<7c43> 4404 +<7c4c> 6884 +<7c4d> 6630 +<7c60> 4541 +<7c64> 7184 +<7c6c> 4628 +<7c73> 4863 +<7c83> 5207 +<7c89> 5165 +<7c92> 4655 +<7c95> 4897 +<7c97> 6811 +<7c98> 6697 +<7c9f> 5541 +<7ca5> 6901 +<7ca7> 6556 +<7cae> 4433 +<7cb1> 4434 +<7cb2> 7070 +<7cb3> 3582 +<7cb9> 5600 +<7cbe> 6742 +<7cca> 7827 +<7cd6> 4247 +<7cde> 5166 +<7cdf> 6812 +<7ce0> 3548 +<7ce7> 4435 +<7cfb> 3721 +<7cfe> 4003 +<7d00> 4108 +<7d02> 6885 +<7d04> 5873 +<7d05> 7859 +<7d06> 6217 +<7d07> 8025 +<7d08> 7895 +<7d0d> 4150 +<7d10> 4184 +<7d14> 5655 +<7d17> 5283 +<7d18> 3865 +<7d19> 6964 +<7d1a> 4056 +<7d1b> 5167 +<7d20> 5525 +<7d21> 4957 +<7d22> 5367 +<7d2b> 6500 +<7d2c> 6886 +<7d2e> 7081 +<7d2f> 4571 +<7d30> 5498 +<7d33> 5747 +<7d35> 6607 +<7d39> 5526 +<7d3a> 3525 +<7d42> 6846 +<7d43> 7746 +<7d44> 6813 +<7d45> 3691 +<7d46> 4924 +<7d50> 3651 +<7d5e> 3882 +<7d61> 4385 +<7d62> 7747 +<7d66> 4057 +<7d68> 6371 +<7d6a> 6454 +<7d6e> 5391 +<7d71> 7457 +<7d72> 5284 +<7d73> 3549 +<7d76> 6691 +<7d79> 3641 +<7d7f> 3928 +<7d8e> 6743 +<7d8f> 5601 +<7d93> 3692 +<7d9c> 6847 +<7da0> 4530 +<7da2> 6887 +<7dac> 5602 +<7dad> 6340 +<7db1> 3550 +<7db2> 4701 +<7db4> 7173 +<7db5> 7121 +<7db8> 4598 +<7dba> 4109 +<7dbb> 7416 +<7dbd> 6517 +<7dbe> 4610 +<7dbf> 4742 +<7dc7> 7351 +<7dca> 4126 +<7dcb> 5208 +<7dd6> 5392 +<7dd8> 7658 +<7dda> 5435 +endcidchar + +100 begincidchar +<7ddd> 7034 +<7dde> 4207 +<7de0> 7209 +<7de1> 4881 +<7de3> 5979 +<7de8> 7523 +<7de9> 6117 +<7dec> 4743 +<7def> 6297 +<7df4> 4471 +<7dfb> 7352 +<7e09> 7001 +<7e0a> 5855 +<7e15> 6087 +<7e1b> 4898 +<7e1d> 7002 +<7e1e> 7828 +<7e1f> 6171 +<7e21> 6581 +<7e23> 7748 +<7e2b> 5103 +<7e2e> 7294 +<7e2f> 5980 +<7e31> 6848 +<7e37> 4572 +<7e3d> 7257 +<7e3e> 6631 +<7e41> 5001 +<7e43> 5179 +<7e46> 4826 +<7e47> 6158 +<7e52> 6938 +<7e54> 6978 +<7e55> 5436 +<7e5e> 6159 +<7e61> 5603 +<7e69> 5689 +<7e6a> 7942 +<7e6b> 3722 +<7e6d> 3642 +<7e70> 6814 +<7e79> 5952 +<7e7c> 3723 +<7e82> 7069 +<7e8c> 5542 +<7e8f> 6672 +<7e93> 6023 +<7e96> 5466 +<7e98> 7071 +<7e9b> 4317 +<7e9c> 4405 +<7f36> 5132 +<7f38> 7681 +<7f3a> 3652 +<7f4c> 5859 +<7f50> 3829 +<7f54> 4702 +<7f55> 7643 +<7f6a> 6859 +<7f6b> 3854 +<7f6e> 7353 +<7f70> 5007 +<7f72> 5393 +<7f75> 4717 +<7f77> 7486 +<7f79> 4629 +<7f85> 4377 +<7f88> 4110 +<7f8a> 5896 +<7f8c> 3551 +<7f8e> 4864 +<7f94> 3750 +<7f9a> 4497 +<7f9e> 5604 +<7fa4> 3955 +<7fa8> 5437 +<7fa9> 6405 +<7fb2> 8054 +<7fb8> 4630 +<7fb9> 3583 +<7fbd> 6218 +<7fc1> 6095 +<7fc5> 5711 +<7fca> 6439 +<7fcc> 6440 +<7fce> 4498 +<7fd2> 5679 +<7fd4> 5355 +<7fd5> 8033 +<7fdf> 6632 +<7fe0> 7322 +<7fe1> 5209 +<7fe9> 7524 +<7feb> 6118 +<7ff0> 7644 +<7ff9> 3883 +<7ffc> 6441 +<8000> 6160 +<8001> 4519 +<8003> 3751 +endcidchar + +100 begincidchar +<8005> 6501 +<8006> 4111 +<8009> 3929 +<800c> 6427 +<8010> 4158 +<8015> 3693 +<8017> 4782 +<8018> 6243 +<802d> 4112 +<8033> 6428 +<8036> 5870 +<803d> 7422 +<803f> 3694 +<8043> 4227 +<8046> 4499 +<804a> 4559 +<8056> 5487 +<8058> 5239 +<805a> 7323 +<805e> 4844 +<806f> 4472 +<8070> 7258 +<8072> 5488 +<8073> 6191 +<8077> 6979 +<807d> 7200 +<807e> 4542 +<807f> 6368 +<8084> 6429 +<8085> 5638 +<8086> 5285 +<8087> 6815 +<8089> 6357 +<808b> 4605 +<808c> 4113 +<8096> 7231 +<809b> 7682 +<809d> 3495 +<80a1> 3752 +<80a2> 6965 +<80a5> 5210 +<80a9> 3643 +<80aa> 4958 +<80af> 4061 +<80b1> 3866 +<80b2> 6358 +<80b4> 7963 +<80ba> 7540 +<80c3> 6298 +<80c4> 6865 +<80cc> 4979 +<80ce> 7440 +<80da> 4980 +<80db> 3533 +<80de> 7560 +<80e1> 7829 +<80e4> 6364 +<80e5> 5394 +<80f1> 3850 +<80f4> 4345 +<80f8> 8017 +<80fd> 4185 +<8102> 6966 +<8105> 7766 +<8106> 7324 +<8107> 7767 +<8108> 4722 +<810a> 7144 +<8118> 6119 +<811a> 3472 +<811b> 3695 +<8123> 5656 +<8129> 5605 +<812b> 7419 +<812f> 7561 +<8139> 7110 +<813e> 5211 +<814b> 5856 +<814e> 5748 +<8154> 3552 +<8155> 6120 +<8165> 5489 +<8166> 4179 +<816b> 6849 +<8170> 6161 +<8171> 3608 +<8178> 6557 +<8179> 5082 +<817a> 5438 +<817f> 7461 +<8180> 4959 +<8188> 3634 +<818a> 4899 +<818f> 3753 +<819a> 5135 +<819c> 4667 +<819d> 5675 +<81a0> 3884 +<81a3> 7025 +<81a8> 7516 +endcidchar + +100 begincidchar +<81b3> 5439 +<81b5> 7313 +<81ba> 6392 +<81bd> 4228 +<81be> 7943 +<81bf> 4176 +<81c0> 4359 +<81c2> 5212 +<81c6> 5916 +<81cd> 6771 +<81d8> 4410 +<81df> 6558 +<81e3> 5749 +<81e5> 6103 +<81e7> 6559 +<81e8> 4650 +<81ea> 6502 +<81ed> 7325 +<81f3> 6967 +<81f4> 7354 +<81fa> 4261 +<81fb> 7003 +<81fc> 3930 +<81fe> 6341 +<8205> 3931 +<8207> 5941 +<8208> 8034 +<820a> 3932 +<820c> 5456 +<820d> 5286 +<8212> 5395 +<821b> 7158 +<821c> 5657 +<821e> 4827 +<821f> 6888 +<8221> 3553 +<822a> 7683 +<822b> 4960 +<822c> 4925 +<8235> 7390 +<8236> 4900 +<8237> 7749 +<8239> 5440 +<8240> 5136 +<8245> 5942 +<8247> 6744 +<8259> 7111 +<8264> 6406 +<8266> 7659 +<826e> 3496 +<826f> 4436 +<8271> 3497 +<8272> 5368 +<8276> 5994 +<8278> 7232 +<827e> 5848 +<828b> 6219 +<828d> 6518 +<828e> 3967 +<8292> 4703 +<8299> 5137 +<829a> 4360 +<829d> 6968 +<829f> 5324 +<82a5> 3575 +<82a6> 7830 +<82a9> 4046 +<82ac> 5168 +<82ad> 7487 +<82ae> 6039 +<82af> 5769 +<82b1> 7871 +<82b3> 4961 +<82b7> 6969 +<82b8> 6244 +<82b9> 4032 +<82bb> 7274 +<82bc> 4783 +<82bd> 5783 +<82bf> 6482 +<82d1> 6274 +<82d2> 5995 +<82d4> 7441 +<82d5> 7233 +<82d7> 4810 +<82db> 3455 +<82de> 7562 +<82df> 3933 +<82e1> 6430 +<82e5> 5874 +<82e6> 3754 +<82e7> 6608 +<82f1> 6024 +<82fd> 3755 +<82fe> 7612 +<8301> 6921 +<8302> 4828 +<8303> 5017 +<8304> 3456 +<8305> 4784 +endcidchar + +100 begincidchar +<8309> 4693 +<8317> 4757 +<8328> 6503 +<832b> 4704 +<832f> 5083 +<8331> 5606 +<8334> 7944 +<8335> 6455 +<8336> 4191 +<8338> 6192 +<8339> 5943 +<8340> 5658 +<8347> 7708 +<8349> 7234 +<834a> 7784 +<834f> 6475 +<8351> 6431 +<8352> 7923 +<8373> 4354 +<8377> 7624 +<837b> 6633 +<8389> 4631 +<838a> 6560 +<838e> 5287 +<8396> 3696 +<8398> 5750 +<839e> 6121 +<83a2> 7768 +<83a9> 5138 +<83aa> 5784 +<83ab> 4668 +<83bd> 4705 +<83c1> 7201 +<83c5> 3830 +<83c9> 4531 +<83ca> 3949 +<83cc> 4013 +<83d3> 3808 +<83d6> 7112 +<83dc> 7122 +<83e9> 5069 +<83eb> 4033 +<83ef> 7872 +<83f0> 3756 +<83f1> 4611 +<83f2> 5213 +<83f4> 5827 +<83f9> 6609 +<83fd> 5639 +<8403> 7314 +<8404> 4297 +<840a> 4423 +<840c> 4732 +<840d> 7532 +<840e> 6299 +<8429> 7275 +<842c> 4683 +<8431> 7993 +<8438> 6342 +<843d> 4386 +<8449> 6001 +<8457> 6610 +<845b> 3506 +<8461> 7563 +<8463> 4346 +<8466> 6300 +<846b> 7831 +<846c> 6561 +<846f> 5875 +<8475> 4004 +<847a> 6930 +<8490> 5607 +<8494> 5712 +<8499> 4799 +<849c> 5312 +<84a1> 4962 +<84b2> 7564 +<84b8> 6939 +<84bb> 5876 +<84bc> 7113 +<84bf> 7832 +<84c0> 5549 +<84c2> 4758 +<84c4> 7295 +<84c6> 5415 +<84c9> 6193 +<84cb> 3576 +<84cd> 5713 +<84d1> 5288 +<84da> 5608 +<84ec> 5104 +<84ee> 4473 +<84f4> 5659 +<84fc> 4560 +<8511> 4747 +<8513> 4684 +<8514> 5084 +<8517> 6504 +<8518> 5325 +<851a> 6250 +endcidchar + +100 begincidchar +<851e> 4573 +<8521> 7123 +<8523> 6562 +<8525> 7259 +<852c> 5527 +<852d> 6383 +<852f> 7004 +<853d> 7541 +<853f> 6301 +<8541> 4229 +<8543> 5002 +<8549> 7235 +<854e> 3885 +<8553> 6245 +<8559> 7796 +<8563> 5660 +<8568> 3981 +<8569> 7430 +<856a> 4829 +<856d> 5528 +<8584> 4901 +<8587> 4865 +<858f> 6407 +<8591> 3554 +<8594> 6563 +<859b> 5457 +<85a6> 7159 +<85a8> 7989 +<85a9> 5319 +<85aa> 5751 +<85af> 5396 +<85b0> 7986 +<85ba> 6772 +<85c1> 3757 +<85c9> 6505 +<85cd> 4406 +<85ce> 5752 +<85cf> 6564 +<85d5> 6220 +<85dc> 4451 +<85dd> 6040 +<85e4> 4370 +<85e5> 5877 +<85e9> 5003 +<85ea> 5609 +<85f7> 6611 +<85fa> 4642 +<85fb> 6816 +<85ff> 3817 +<8602> 6041 +<8606> 4520 +<8607> 5529 +<860a> 6088 +<8616> 5924 +<8617> 5028 +<861a> 5441 +<862d> 4395 +<863f> 4378 +<864e> 7833 +<8650> 7632 +<8654> 3609 +<8655> 7133 +<865b> 7721 +<865c> 4521 +<865e> 6221 +<865f> 7834 +<8667> 8009 +<8679> 7860 +<868a> 4845 +<868c> 4963 +<8693> 6456 +<86a3> 3799 +<86a4> 6817 +<86a9> 7355 +<86c7> 5289 +<86cb> 4208 +<86d4> 7945 +<86d9> 6104 +<86db> 6889 +<86df> 3886 +<86e4> 7666 +<86ed> 7026 +<86fe> 5785 +<8700> 7245 +<8702> 5105 +<8703> 5753 +<8708> 6074 +<8718> 6970 +<871a> 5214 +<871c> 4884 +<874e> 3508 +<8755> 5730 +<8757> 7924 +<875f> 6302 +<8766> 7625 +<8768> 5676 +<8774> 7835 +<8776> 6703 +<8778> 6105 +<8782> 4418 +endcidchar + +100 begincidchar +<878d> 6372 +<879f> 4759 +<87a2> 7785 +<87b3> 4248 +<87ba> 4379 +<87c4> 7376 +<87e0> 4926 +<87ec> 5442 +<87ef> 6162 +<87f2> 7309 +<87f9> 7696 +<87fb> 6408 +<87fe> 5467 +<8805> 5690 +<881f> 4411 +<8822> 6916 +<8823> 4452 +<8831> 3758 +<8836> 6532 +<883b> 4685 +<8840> 7756 +<8846> 6924 +<884c> 7709 +<884d> 5981 +<8852> 7750 +<8853> 5668 +<8857> 3457 +<8859> 5786 +<885b> 6303 +<885d> 7310 +<8861> 7786 +<8862> 3934 +<8863> 6409 +<8868> 7585 +<886b> 5326 +<8870> 5565 +<8872> 4151 +<8877> 7311 +<8881> 6275 +<8882> 4763 +<8888> 3458 +<888b> 4262 +<888d> 7565 +<8892> 4209 +<8896> 5610 +<8897> 7005 +<889e> 3782 +<88ab> 7601 +<88b4> 3759 +<88c1> 6582 +<88c2> 4482 +<88cf> 4632 +<88d4> 6042 +<88d5> 6343 +<88d9> 3956 +<88dc> 5070 +<88dd> 6565 +<88df> 5290 +<88e1> 4633 +<88e8> 5215 +<88f3> 5356 +<88f8> 4380 +<88fd> 6773 +<8907> 5085 +<8910> 3507 +<8912> 7566 +<8913> 5071 +<8918> 6304 +<8919> 4983 +<8925> 6172 +<892a> 7462 +<8936> 5680 +<8938> 4574 +<893b> 5458 +<8941> 3555 +<8944> 5897 +<895f> 4049 +<8964> 4407 +<896a> 4694 +<8972> 5681 +<897f> 5397 +<8981> 6163 +<8983> 4230 +<8986> 5086 +<8987> 7511 +<898b> 3644 +<898f> 4005 +<8993> 4734 +<8996> 5714 +<89a1> 3635 +<89a9> 4298 +<89aa> 7363 +<89b2> 4034 +<89ba> 3473 +<89bd> 4408 +<89c0> 3831 +<89d2> 3474 +<89e3> 7697 +<89f4> 5357 +<89f8> 7246 +endcidchar + +100 begincidchar +<8a00> 5921 +<8a02> 6745 +<8a03> 5139 +<8a08> 3724 +<8a0a> 5754 +<8a0c> 7861 +<8a0e> 7452 +<8a13> 7987 +<8a16> 8026 +<8a17> 7406 +<8a18> 4114 +<8a1b> 6106 +<8a1d> 5787 +<8a1f> 5557 +<8a23> 3653 +<8a25> 4182 +<8a2a> 4964 +<8a2d> 5459 +<8a31> 7722 +<8a34> 5530 +<8a36> 3459 +<8a3a> 7006 +<8a3b> 6890 +<8a50> 5291 +<8a54> 6818 +<8a55> 7533 +<8a5b> 6612 +<8a5e> 5292 +<8a60> 6025 +<8a62> 5661 +<8a63> 6043 +<8a66> 5715 +<8a69> 5716 +<8a6d> 3987 +<8a6e> 6673 +<8a70> 8055 +<8a71> 7873 +<8a72> 7698 +<8a73> 5358 +<8a75> 5443 +<8a79> 7185 +<8a85> 6891 +<8a87> 3809 +<8a8c> 6971 +<8a8d> 6457 +<8a93> 5398 +<8a95> 7417 +<8a98> 6344 +<8a9e> 5908 +<8aa0> 5490 +<8aa1> 3725 +<8aa3> 4830 +<8aa4> 6075 +<8aa5> 3760 +<8aa6> 5558 +<8aa8> 7946 +<8aaa> 5460 +<8ab0> 5611 +<8ab2> 3810 +<8ab9> 5216 +<8abc> 6410 +<8abe> 6377 +<8abf> 6819 +<8ac2> 7186 +<8ac4> 5662 +<8ac7> 4231 +<8acb> 7202 +<8acd> 6589 +<8acf> 7276 +<8ad2> 4437 +<8ad6> 4535 +<8adb> 6345 +<8adc> 7194 +<8ae1> 5717 +<8ae6> 7210 +<8ae7> 7699 +<8aea> 6746 +<8aeb> 3498 +<8aed> 6346 +<8aee> 6506 +<8af1> 8002 +<8af6> 5770 +<8af7> 7593 +<8af8> 6774 +<8afa> 5922 +<8afe> 4139 +<8b00> 4785 +<8b01> 5818 +<8b02> 6305 +<8b04> 4371 +<8b0e> 4866 +<8b10> 4885 +<8b14> 7633 +<8b16> 5543 +<8b17> 4965 +<8b19> 3657 +<8b1a> 6442 +<8b1b> 3556 +<8b1d> 5293 +<8b20> 6164 +endcidchar + +100 begincidchar +<8b28> 4786 +<8b2b> 6634 +<8b2c> 4589 +<8b33> 3935 +<8b39> 4035 +<8b41> 7874 +<8b49> 6940 +<8b4e> 8011 +<8b4f> 4115 +<8b58> 5731 +<8b5a> 4232 +<8b5c> 5072 +<8b66> 3697 +<8b6c> 5217 +<8b6f> 5953 +<8b70> 6411 +<8b74> 3645 +<8b77> 7836 +<8b7d> 6044 +<8b80> 4318 +<8b8a> 5033 +<8b90> 5612 +<8b92> 7090 +<8b93> 5898 +<8b96> 7091 +<8b9a> 7072 +<8c37> 3772 +<8c3f> 3726 +<8c41> 7902 +<8c46> 4355 +<8c48> 4116 +<8c4a> 7594 +<8c4c> 6122 +<8c55> 5718 +<8c5a> 4327 +<8c61> 5359 +<8c6a> 7837 +<8c6b> 6045 +<8c79> 7586 +<8c7a> 5719 +<8c82> 7236 +<8c8a> 4723 +<8c8c> 4787 +<8c9d> 7512 +<8c9e> 6747 +<8ca0> 5140 +<8ca1> 6583 +<8ca2> 3800 +<8ca7> 5234 +<8ca8> 7875 +<8ca9> 7495 +<8caa> 7423 +<8cab> 3832 +<8cac> 7129 +<8caf> 6613 +<8cb0> 5499 +<8cb3> 6433 +<8cb4> 3992 +<8cb6> 7528 +<8cb7> 4718 +<8cb8> 4263 +<8cbb> 5218 +<8cbc> 7195 +<8cbd> 6432 +<8cbf> 4831 +<8cc0> 7626 +<8cc1> 5169 +<8cc2> 4547 +<8cc3> 6476 +<8cc4> 7947 +<8cc7> 6507 +<8cc8> 3460 +<8cca> 6635 +<8cd1> 7007 +<8cd3> 5235 +<8cda> 4548 +<8cdc> 5294 +<8cde> 5360 +<8ce0> 4984 +<8ce2> 7751 +<8ce3> 4719 +<8ce4> 7160 +<8ce6> 5141 +<8cea> 7027 +<8ced> 4299 +<8cf4> 4549 +<8cfb> 5142 +<8cfc> 3936 +<8cfd> 5364 +<8d04> 6972 +<8d05> 7315 +<8d07> 6365 +<8d08> 6941 +<8d0a> 7073 +<8d0d> 5468 +<8d13> 6566 +<8d16> 5544 +<8d64> 6636 +<8d66> 5295 +<8d6b> 7732 +endcidchar + +100 begincidchar +<8d70> 6892 +<8d73> 4006 +<8d74> 5143 +<8d77> 4117 +<8d85> 7237 +<8d8a> 6282 +<8d99> 6820 +<8da3> 7326 +<8da8> 7277 +<8db3> 6830 +<8dba> 5144 +<8dbe> 6973 +<8dc6> 7442 +<8dcb> 4936 +<8dcc> 7028 +<8dcf> 3461 +<8ddb> 7488 +<8ddd> 3596 +<8de1> 6637 +<8de3> 5444 +<8de8> 3811 +<8def> 4522 +<8df3> 4300 +<8e0a> 6194 +<8e0f> 4237 +<8e10> 7161 +<8e1e> 3597 +<8e2a> 6850 +<8e30> 6347 +<8e35> 6851 +<8e42> 6348 +<8e44> 6775 +<8e47> 3610 +<8e48> 4301 +<8e49> 7052 +<8e4a> 7797 +<8e59> 7296 +<8e5f> 6638 +<8e60> 7145 +<8e74> 7297 +<8e76> 3982 +<8e81> 6821 +<8e87> 6614 +<8e8a> 6893 +<8e8d> 5878 +<8eaa> 4643 +<8eab> 5755 +<8eac> 3968 +<8ec0> 3937 +<8eca> 7053 +<8ecb> 5819 +<8ecc> 3988 +<8ecd> 3957 +<8ed2> 7726 +<8edf> 5982 +<8eeb> 7008 +<8ef8> 7298 +<8efb> 3462 +<8efe> 5732 +<8f03> 3887 +<8f05> 4523 +<8f09> 6584 +<8f12> 7196 +<8f13> 4686 +<8f14> 5073 +<8f15> 3698 +<8f1b> 4438 +<8f1c> 7356 +<8f1d> 8003 +<8f1e> 4706 +<8f1f> 7174 +<8f26> 4474 +<8f27> 5055 +<8f29> 4985 +<8f2a> 4599 +<8f2f> 7035 +<8f33> 6894 +<8f38> 5613 +<8f39> 5087 +<8f3b> 5088 +<8f3e> 6674 +<8f3f> 5944 +<8f44> 7650 +<8f45> 6276 +<8f49> 6675 +<8f4d> 7175 +<8f4e> 3888 +<8f5d> 5945 +<8f5f> 3867 +<8f62> 4463 +<8f9b> 5756 +<8f9c> 3761 +<8fa3> 4398 +<8fa6> 7496 +<8fa8> 5034 +<8fad> 5296 +<8faf> 5035 +<8fb0> 7009 +<8fb1> 6173 +<8fb2> 4177 +endcidchar + +100 begincidchar +<8fc2> 6222 +<8fc5> 5757 +<8fce> 6026 +<8fd1> 4036 +<8fd4> 4927 +<8fe6> 3463 +<8fea> 6639 +<8feb> 4902 +<8fed> 7029 +<8ff0> 5669 +<8ff2> 3626 +<8ff7> 4867 +<8ff9> 6640 +<8ffd> 7278 +<9000> 7463 +<9001> 5559 +<9002> 3838 +<9003> 4302 +<9005> 7978 +<9006> 5954 +<9008> 7787 +<900b> 7567 +<900d> 5531 +<900f> 7469 +<9010> 7299 +<9011> 3938 +<9014> 4303 +<9015> 3699 +<9017> 4356 +<9019> 6615 +<901a> 7458 +<901d> 5399 +<901e> 4500 +<901f> 5545 +<9020> 6822 +<9021> 6917 +<9022> 5106 +<9023> 4475 +<902e> 7211 +<9031> 6895 +<9032> 7010 +<9035> 4007 +<9038> 6466 +<903c> 7615 +<903e> 6350 +<9041> 4361 +<9042> 5614 +<9047> 6223 +<904a> 6349 +<904b> 6246 +<904d> 7525 +<904e> 3812 +<9050> 7627 +<9051> 7925 +<9053> 4304 +<9054> 4216 +<9055> 6306 +<9059> 6165 +<905c> 5550 +<905d> 4238 +<905e> 7212 +<9060> 6277 +<9061> 5532 +<9063> 3646 +<9069> 6641 +<906d> 6823 +<906e> 7054 +<906f> 4362 +<9072> 6974 +<9075> 6918 +<9077> 7162 +<9078> 5445 +<907a> 6351 +<907c> 4561 +<907d> 3598 +<907f> 7602 +<9080> 6166 +<9081> 4720 +<9082> 7700 +<9083> 5615 +<9084> 7896 +<9087> 6434 +<9088> 4669 +<908a> 5036 +<908f> 4381 +<9091> 6389 +<9095> 6096 +<9099> 4707 +<90a2> 7788 +<90a3> 4138 +<90a6> 4966 +<90a8> 7250 +<90aa> 5297 +<90af> 3526 +<90b0> 7443 +<90b1> 3939 +<90b5> 5533 +<90b8> 6616 +<90c1> 6236 +<90ca> 3889 +endcidchar + +100 begincidchar +<90de> 4419 +<90e1> 3958 +<90e8> 5145 +<90ed> 3818 +<90f5> 6224 +<90fd> 4305 +<9102> 5802 +<9112> 7279 +<9115> 7714 +<9119> 5219 +<9127> 4372 +<912d> 6748 +<9132> 4210 +<9149> 6352 +<914a> 6749 +<914b> 7280 +<914c> 6519 +<914d> 4986 +<914e> 6896 +<9152> 6897 +<9162> 7238 +<9169> 4760 +<916a> 4387 +<916c> 5616 +<9175> 7964 +<9177> 7843 +<9178> 5313 +<9187> 5663 +<9189> 7327 +<918b> 7239 +<918d> 6776 +<9192> 5491 +<919c> 7281 +<91ab> 6412 +<91ac> 6567 +<91ae> 7240 +<91af> 7798 +<91b1> 4937 +<91b4> 4509 +<91b5> 3584 +<91c0> 5899 +<91c7> 7124 +<91c9> 6353 +<91cb> 5416 +<91cc> 4634 +<91cd> 6925 +<91ce> 5871 +<91cf> 4439 +<91d0> 4635 +<91d1> 4131 +<91d7> 5566 +<91d8> 6750 +<91dc> 5146 +<91dd> 7374 +<91e3> 6824 +<91e7> 7163 +<91ea> 6225 +<91f5> 7125 +<920d> 4363 +<9210> 3622 +<9211> 7497 +<9212> 5329 +<9217> 6366 +<921e> 4014 +<9234> 4501 +<923a> 6082 +<923f> 6676 +<9240> 3534 +<9245> 3599 +<9249> 7752 +<9257> 3658 +<925b> 5983 +<925e> 6283 +<9262> 4938 +<9264> 3940 +<9265> 5670 +<9266> 6751 +<9280> 6378 +<9283> 7260 +<9285> 4347 +<9291> 5446 +<9293> 6677 +<9296> 5617 +<9298> 4761 +<929c> 7660 +<92b3> 6046 +<92b6> 3941 +<92b7> 5534 +<92b9> 5618 +<92cc> 6752 +<92cf> 7769 +<92d2> 5107 +<92e4> 5400 +<92ea> 7568 +<92f8> 3600 +<92fc> 3557 +<9304> 4532 +<9310> 7282 +<9318> 7283 +<931a> 6590 +endcidchar + +100 begincidchar +<931e> 5664 +<931f> 4233 +<9320> 6753 +<9321> 4118 +<9322> 6678 +<9324> 4119 +<9326> 4050 +<9328> 4811 +<932b> 5417 +<932e> 3762 +<932f> 7059 +<9348> 6027 +<934a> 4476 +<934b> 3813 +<934d> 4306 +<9354> 5803 +<935b> 4211 +<936e> 6354 +<9375> 3611 +<937c> 7375 +<937e> 6852 +<938c> 3659 +<9394> 6195 +<9396> 5564 +<939a> 7284 +<93a3> 7789 +<93a7> 3577 +<93ac> 7838 +<93ad> 7011 +<93b0> 6467 +<93c3> 6831 +<93d1> 6642 +<93de> 6196 +<93e1> 3700 +<93e4> 4575 +<93f6> 7036 +<9404> 7952 +<9418> 6853 +<9425> 5447 +<942b> 6679 +<9435> 7176 +<9438> 7407 +<9444> 6898 +<945b> 3851 +<947d> 7074 +<947f> 7060 +<9577> 6568 +<9580> 4846 +<9583> 5469 +<9589> 7542 +<958b> 3578 +<958f> 6367 +<9593> 3499 +<9594> 4882 +<9598> 3535 +<95a3> 3475 +<95a4> 7667 +<95a5> 5008 +<95a8> 4008 +<95ad> 4453 +<95b1> 5988 +<95bb> 5996 +<95bc> 5820 +<95c7> 5828 +<95ca> 7903 +<95d4> 7668 +<95d5> 3983 +<95d6> 7473 +<95dc> 3833 +<95e1> 7164 +<95e2> 5029 +<961c> 5147 +<9621> 7165 +<962a> 7498 +<962e> 6123 +<9632> 4967 +<963b> 6825 +<963f> 5788 +<9640> 7391 +<9642> 7603 +<9644> 5148 +<964b> 4576 +<964c> 4724 +<964d> 3558 +<9650> 7647 +<965b> 7543 +<965c> 7669 +<965d> 5470 +<965e> 5691 +<965f> 7146 +<9662> 6278 +<9663> 7012 +<9664> 6777 +<966a> 4987 +<9670> 6384 +<9673> 7013 +<9675> 4612 +<9676> 4307 +<9677> 7661 +<9678> 4593 +endcidchar + +100 begincidchar +<967d> 5900 +<9685> 6226 +<9686> 4603 +<968a> 4264 +<968b> 5619 +<968d> 7926 +<968e> 3727 +<9694> 3636 +<9695> 6247 +<9698> 5849 +<9699> 4022 +<969b> 6778 +<969c> 6569 +<96a3> 4644 +<96aa> 7728 +<96b1> 6379 +<96b7> 4510 +<96bb> 7147 +<96c0> 6520 +<96c1> 5813 +<96c4> 6254 +<96c5> 5789 +<96c6> 7037 +<96c7> 3763 +<96c9> 7357 +<96cb> 6919 +<96cc> 6508 +<96cd> 6097 +<96ce> 6617 +<96d5> 6826 +<96d6> 5622 +<96d9> 5773 +<96db> 7285 +<96dc> 6533 +<96e2> 4636 +<96e3> 4142 +<96ea> 5461 +<96ef> 4847 +<96f0> 5170 +<96f2> 6248 +<96f6> 4502 +<96f7> 4550 +<96f9> 4903 +<96fb> 6680 +<9700> 5623 +<9706> 6754 +<9707> 7014 +<9711> 6698 +<9713> 6047 +<9716> 4651 +<9719> 6028 +<971c> 5361 +<971e> 7628 +<9727> 4832 +<9730> 5314 +<9732> 4524 +<9739> 5030 +<973d> 6779 +<9742> 4464 +<9744> 5850 +<9748> 4503 +<9751> 7203 +<9756> 6755 +<975c> 6756 +<975e> 5220 +<9761> 4868 +<9762> 4744 +<9769> 7733 +<976d> 6458 +<9774> 7876 +<9777> 6459 +<977a> 4695 +<978b> 7799 +<978d> 5814 +<978f> 3801 +<97a0> 3950 +<97a8> 3509 +<97ab> 3951 +<97ad> 7526 +<97c6> 7166 +<97cb> 6307 +<97d3> 7648 +<97dc> 4308 +<97f3> 6385 +<97f6> 5535 +<97fb> 6249 +<97ff> 7715 +<9800> 7839 +<9801> 7757 +<9802> 6757 +<9803> 3701 +<9805> 7684 +<9806> 5665 +<9808> 5624 +<980a> 6237 +<980c> 5560 +<9810> 6048 +<9811> 6124 +<9812> 4928 +<9813> 4328 +endcidchar + +100 begincidchar +<9817> 7489 +<9818> 4504 +<982d> 4357 +<9830> 7770 +<9838> 3702 +<9839> 7464 +<983b> 5236 +<9846> 3814 +<984c> 6780 +<984d> 5857 +<984e> 5804 +<9854> 5815 +<9858> 6279 +<985a> 6681 +<985e> 4590 +<9865> 7840 +<9867> 3764 +<986b> 6682 +<986f> 7753 +<98a8> 7595 +<98af> 5330 +<98b1> 7444 +<98c4> 7588 +<98c7> 7587 +<98db> 5221 +<98dc> 5004 +<98df> 5733 +<98e1> 5551 +<98e2> 4120 +<98ed> 7362 +<98ee> 6386 +<98ef> 4929 +<98f4> 6435 +<98fc> 5298 +<98fd> 7569 +<98fe> 5734 +<9903> 3890 +<9909> 7716 +<990a> 5901 +<990c> 6436 +<9910> 7075 +<9913> 5790 +<9918> 5946 +<991e> 6683 +<9920> 5056 +<9928> 3834 +<9945> 4687 +<9949> 4037 +<994b> 3989 +<994c> 7076 +<994d> 5448 +<9951> 4121 +<9952> 6167 +<9954> 6098 +<9957> 7717 +<9996> 5625 +<9999> 7718 +<999d> 7613 +<99a5> 5089 +<99a8> 7790 +<99ac> 4661 +<99ad> 5909 +<99ae> 7596 +<99b1> 7392 +<99b3> 7358 +<99b4> 5666 +<99b9> 6468 +<99c1> 4904 +<99d0> 6899 +<99d1> 4174 +<99d2> 3942 +<99d5> 3464 +<99d9> 5149 +<99dd> 7393 +<99df> 5299 +<99ed> 7701 +<99f1> 4388 +<99ff> 6920 +<9a01> 5240 +<9a08> 5057 +<9a19> 7527 +<9a2b> 3612 +<9a30> 4373 +<9a36> 7286 +<9a37> 5536 +<9a40> 4725 +<9a43> 7589 +<9a45> 3943 +<9a4d> 7965 +<9a55> 3891 +<9a57> 7729 +<9a5a> 3703 +<9a5b> 5955 +<9a5f> 7328 +<9a62> 4454 +<9a65> 4124 +<9a69> 7897 +<9a6a> 4455 +<9aa8> 3785 +<9ab8> 7702 +endcidchar + +100 begincidchar +<9ad3> 5626 +<9ad4> 7213 +<9ad8> 3765 +<9ae5> 5997 +<9aee> 4939 +<9b1a> 5627 +<9b27> 4562 +<9b2a> 7470 +<9b31> 6251 +<9b3c> 3993 +<9b41> 3863 +<9b42> 7849 +<9b43> 4940 +<9b44> 4995 +<9b45> 4721 +<9b4f> 6308 +<9b54> 4662 +<9b5a> 5910 +<9b6f> 4525 +<9b8e> 6699 +<9b91> 7570 +<9b9f> 5816 +<9bab> 3892 +<9bae> 5449 +<9bc9> 4637 +<9bd6> 7204 +<9be4> 3783 +<9be8> 3704 +<9c0d> 7287 +<9c10> 5805 +<9c12> 5090 +<9c15> 7629 +<9c25> 7898 +<9c32> 6076 +<9c3b> 4688 +<9c47> 3559 +<9c49> 5039 +<9c57> 4645 +<9ce5> 6827 +<9ce7> 5150 +<9ce9> 3944 +<9cf3> 5108 +<9cf4> 4762 +<9cf6> 5984 +<9d09> 5791 +<9d1b> 6280 +<9d26> 5839 +<9d28> 5832 +<9d3b> 7862 +<9d51> 3647 +<9d5d> 5792 +<9d60> 3773 +<9d61> 4833 +<9d6c> 5180 +<9d72> 6521 +<9da9> 4794 +<9daf> 5860 +<9db4> 7634 +<9dc4> 3728 +<9dd7> 3945 +<9df2> 7329 +<9df8> 8012 +<9df9> 6393 +<9dfa> 4526 +<9e1a> 5861 +<9e1e> 4396 +<9e75> 4527 +<9e79> 7662 +<9e7d> 5998 +<9e7f> 4533 +<9e92> 4125 +<9e93> 4534 +<9e97> 4456 +<9e9d> 5300 +<9e9f> 4646 +<9ea5> 4726 +<9eb4> 3952 +<9eb5> 4745 +<9ebb> 4663 +<9ebe> 8004 +<9ec3> 7927 +<9ecd> 5401 +<9ece> 4457 +<9ed1> 8018 +<9ed4> 3623 +<9ed8> 4835 +<9edb> 4265 +<9edc> 7305 +<9ede> 6700 +<9ee8> 4249 +<9ef4> 4869 +<9f07> 6077 +<9f08> 5040 +<9f0e> 6758 +<9f13> 3766 +<9f20> 5402 +<9f3b> 5222 +<9f4a> 6781 +<9f4b> 6585 +<9f4e> 6586 +endcidchar + +100 begincidchar +<9f52> 7359 +<9f5f> 6618 +<9f61> 4505 +<9f67> 5462 +<9f6a> 7061 +<9f6c> 5911 +<9f77> 5806 +<9f8d> 4563 +<9f90> 4968 +<9f95> 3529 +<9f9c> 3946 + 1088 + 9342 + 1106 + 1107 + 9355 + 1115 + 1116 + 1117 + 9377 + 1118 + 1119 + 1120 + 1121 + 1124 + 9413 + 1127 + 9419 + 1138 + 1139 + 9435 + 9442 + 1148 + 9452 + 1156 + 1157 + 1158 + 1159 + 1160 + 9472 + 1161 + 1164 + 9485 + 1167 + 9486 + 1168 + 9489 + 1172 + 9490 + 1177 + 1178 + 9501 + 1179 + 9507 + 1182 + 9508 + 1183 + 1184 + 1185 + 1186 + 1187 + 1192 + 1193 + 9549 + 1196 + 9550 + 1197 + 1198 + 1199 + 1200 + 1201 + 9571 + 1202 + 1205 + 9588 + 1213 + 9589 + 1218 + 1219 + 1222 + 1223 + 1226 + 1227 + 9655 + 1230 + 1231 + 1232 + 1233 + 1236 + 1237 + 9699 + 1242 + 9700 + 1243 + 1244 + 1247 + 9738 + 1250 + 9744 + 1253 +endcidchar + +100 begincidchar + 9745 + 1256 + 9749 + 9750 + 1260 + 1261 + 9754 + 1262 + 9760 + 1268 + 1271 + 1272 + 9778 + 1280 + 9838 + 1284 + 1285 + 9849 + 1293 + 1294 + 1295 + 9871 + 1296 + 1297 + 1298 + 1299 + 1302 + 1303 + 1306 + 9929 + 1307 + 9930 + 1308 + 9938 + 1311 + 9939 + 1317 + 1322 + 1323 + 1324 + 1325 + 1328 + 1329 + 1332 + 1333 + 10052 + 1337 + 10053 + 1340 + 1341 + 1346 + 1347 + 1350 + 1351 + 1352 + 1353 + 1356 + 1359 + 10156 + 1360 + 10157 + 1361 + 10158 + 1362 + 10163 + 1366 + 10164 + 1367 + 1368 + 1371 + 1372 + 10210 + 1375 + 10211 + 1376 + 10218 + 1380 + 10226 + 10227 + 1392 + 10228 + 1396 + 1397 + 10241 + 1405 + 1406 + 1407 + 1408 + 10298 + 1413 + 10302 + 10307 + 1424 + 1425 + 10325 + 1433 + 1434 + 1439 + 1440 + 1441 +endcidchar + +100 begincidchar + 1444 + 1445 + 10382 + 1446 + 10388 + 1449 + 10389 + 1450 + 1454 + 1455 + 1456 + 1457 + 1458 + 1459 + 10459 + 1462 + 1465 + 1466 + 1467 + 10481 + 1468 + 10482 + 1469 + 1472 + 10500 + 1477 + 10501 + 1478 + 1479 + 1480 + 1481 + 1482 + 1483 + 1484 + 1489 + 1492 + 1495 + 10616 + 1501 + 10617 + 1504 + 10621 + 1505 + 1506 + 1507 + 1510 + 1511 + 10652 + 1512 + 10658 + 1515 + 10659 + 1516 + 1517 + 10664 + 10665 + 1521 + 10671 + 1535 + 1538 + 1539 + 10687 + 1545 + 10749 + 1549 + 10752 + 10757 + 1556 + 10758 + 1557 + 10759 + 1558 + 1559 + 10762 + 1562 + 1563 + 10775 + 1569 + 1570 + 1571 + 1574 + 1575 + 1578 + 10835 + 1581 + 10836 + 1582 + 10840 + 1585 + 10841 + 1586 + 10842 + 1587 + 10843 + 1588 + 1589 + 1590 + 1591 + 1592 + 1593 +endcidchar + +100 begincidchar + 1594 + 1595 + 1596 + 10910 + 1599 + 1600 + 1603 + 1604 + 10958 + 1607 + 10959 + 1608 + 1609 + 1610 + 1611 + 1612 + 1613 + 1614 + 1615 + 1616 + 11032 + 1617 + 11033 + 1618 + 1619 + 1620 + 1621 + 1622 + 1623 + 1626 + 11067 + 1629 + 11073 + 1632 + 11074 + 1633 + 1634 + 1637 + 11119 + 1648 + 1649 + 11137 + 1658 + 1659 + 11155 + 1667 + 1668 + 11223 + 11228 + 1679 + 1680 + 11246 + 1686 + 1687 + 1690 + 1691 + 1692 + 1693 + 1694 + 1695 + 1696 + 1697 + 1700 + 1701 + 1704 + 1705 + 1706 + 1707 + 1708 + 1711 + 1714 + 11574 + 1719 + 1720 + 1721 + 1722 + 1725 + 1726 + 1727 + 11619 + 1730 + 11620 + 1731 + 1734 + 1735 + 11639 + 1746 + 1747 + 11655 + 1755 + 1756 + 11678 + 1757 + 1760 + 1761 + 11725 + 1764 + 1770 + 1771 + 11743 +endcidchar + +100 begincidchar + 1774 + 11744 + 1775 + 1778 + 1779 + 11763 + 1785 + 1786 + 1787 + 11785 + 1788 + 1791 + 1792 + 11806 + 1795 + 11807 + 1796 + 1797 + 1798 + 1799 + 1800 + 1801 + 1802 + 1803 + 11879 + 1806 + 11880 + 1807 + 1808 + 1809 + 1810 + 1811 + 11901 + 1812 + 11902 + 1813 + 1816 + 1817 + 11921 + 1820 + 11922 + 1821 + 1822 + 1823 + 1824 + 1827 + 1828 + 1829 + 1830 + 11996 + 1831 + 1834 + 1835 + 12015 + 1838 + 12016 + 1839 + 1842 + 1843 + 12035 + 1846 + 12036 + 1853 + 1854 + 12080 + 1857 + 12081 + 1858 + 1861 + 12090 + 12096 + 1869 + 12097 + 1872 + 12100 + 1876 + 1877 + 12113 + 1886 + 1887 + 1890 + 1891 + 12176 + 1892 + 12182 + 1895 + 12183 + 1901 + 1902 + 12200 + 1910 + 1911 + 12222 + 1915 + 1916 + 12254 + 1921 + 12258 + 1922 + 12264 +endcidchar + +100 begincidchar + 1925 + 12265 + 1926 + 1927 + 1928 + 1931 + 1932 + 1933 + 1934 + 12338 + 1935 + 12339 + 1936 + 1937 + 1938 + 1939 + 1940 + 12360 + 1941 + 12369 + 1945 + 12377 + 1952 + 12378 + 1953 + 1954 + 12382 + 1957 + 1958 + 1959 + 12397 + 1960 + 1961 + 1962 + 1963 + 1964 + 1965 + 1966 + 1967 + 1968 + 1969 + 1970 + 1971 + 1972 + 1973 + 1974 + 1977 + 1978 + 1979 + 12536 + 1980 + 12542 + 12543 + 1986 + 12544 + 1987 + 12553 + 2000 + 12554 + 2001 + 2002 + 2005 + 2006 + 12572 + 2012 + 2015 + 2016 + 2019 + 12634 + 2022 + 12640 + 2025 + 12641 + 2030 + 12658 + 2040 + 2041 + 2042 + 12678 + 2046 + 2047 + 2048 + 12710 + 2052 + 2053 + 12721 + 2056 + 12722 + 2057 + 2058 + 2059 + 2060 + 2061 + 2062 + 2065 + 2066 + 2069 + 2070 + 2073 + 12837 +endcidchar + +100 begincidchar + 2080 + 12838 + 2081 + 12842 + 2084 + 2085 + 2086 + 2087 + 2090 + 2091 + 2092 + 2093 + 2094 + 2095 + 2096 + 2097 + 12933 + 2098 + 2101 + 2102 + 12952 + 2105 + 2108 + 2109 + 12994 + 2110 + 13000 + 2113 + 13001 + 2119 + 2120 + 13011 + 2121 + 13017 + 2130 + 2131 + 13035 + 2139 + 2142 + 2145 + 2149 + 13133 + 2150 + 13154 + 2160 + 2161 + 2164 + 2165 + 2166 + 2167 + 2170 + 2171 + 2172 + 2173 + 13333 + 2174 + 2175 + 2176 + 2177 + 2178 + 2179 + 2184 + 2185 + 13513 + 2188 + 13514 + 2189 + 13521 + 13529 + 2203 + 2206 + 2207 + 13547 + 2215 + 2216 + 13566 + 2219 + 13567 + 2220 + 2221 + 2222 + 2223 + 2224 + 2225 + 13599 + 13604 + 2240 + 13609 + 2243 + 2244 + 13622 + 2252 + 2253 + 13641 + 2259 + 2260 + 2261 + 2262 + 13672 + 2266 +endcidchar + +100 begincidchar + 2267 + 13676 + 2268 + 13682 + 2271 + 13683 + 2272 + 2273 + 2276 + 2277 + 2278 + 2279 + 2280 + 2281 + 2282 + 2285 + 2286 + 2287 + 13747 + 2290 + 2293 + 2294 + 13768 + 2297 + 13769 + 2298 + 2301 + 13787 + 2306 + 13788 + 2307 + 13789 + 2308 + 13790 + 13791 + 2311 + 2312 + 2315 + 2316 + 2317 + 2318 + 2321 + 2322 + 13852 + 2325 + 13853 + 2326 + 2329 + 2330 + 2331 + 13875 + 2332 + 2335 + 13893 + 2340 + 13894 + 2341 + 2344 + 13939 + 2350 + 13940 + 2351 + 2352 + 13945 + 13946 + 2357 + 2365 + 2366 + 2371 + 2374 + 2375 + 14044 + 2376 + 2381 + 2382 + 2383 + 2384 + 2387 + 14142 + 2390 + 2393 + 2396 + 2397 + 2398 + 2399 + 2400 + 2401 + 2402 + 2405 + 2408 + 2409 + 2412 + 2413 + 2414 + 2415 + 2416 + 2417 + 2418 + 2421 + 2422 +endcidchar + +100 begincidchar + 14389 + 2423 + 2424 + 2427 + 2428 + 2429 + 2430 + 2433 + 2434 + 14440 + 2437 + 14441 + 2438 + 14450 + 14455 + 14459 + 2457 + 2458 + 14472 + 2466 + 2467 + 2468 + 14490 + 2471 + 14491 + 2472 + 2473 + 14495 + 2476 + 2477 + 2478 + 14522 + 14528 + 2494 + 14529 + 2495 + 14530 + 2498 + 2499 + 14543 + 2502 + 14544 + 2503 + 14551 + 2507 + 2508 + 14555 + 2521 + 2522 + 14576 + 2529 + 14589 + 2533 + 14592 + 2537 + 14593 + 2538 + 14594 + 2539 + 2542 + 2543 + 14611 + 2551 + 2552 + 2553 + 14633 + 2554 + 2557 + 2558 + 14652 + 2561 + 14653 + 2562 + 2565 + 2566 + 14672 + 2569 + 14673 + 2570 + 2573 + 14690 + 2579 + 14691 + 2580 + 2583 + 2584 + 2591 + 2592 + 2595 + 2598 + 2599 + 14751 + 2602 + 14752 + 2603 + 2606 + 2607 + 14771 + 2610 + 14772 +endcidchar + +100 begincidchar + 2611 + 14773 + 2612 + 2615 + 2616 + 2617 + 14788 + 14789 + 2620 + 14790 + 2629 + 2630 + 2631 + 2632 + 2635 + 14823 + 2646 + 14827 + 2649 + 14830 + 14831 + 2653 + 14837 + 2662 + 2663 + 14855 + 2671 + 14864 + 2672 + 14865 + 2673 + 2674 + 2675 + 2676 + 2677 + 2678 + 2681 + 2682 + 14913 + 2683 + 14919 + 2686 + 14920 + 2691 + 2692 + 14938 + 2695 + 14939 + 2696 + 2697 + 2698 + 2699 + 2704 + 2707 + 2708 + 14999 + 2709 + 15005 + 2712 + 15006 + 2719 + 2720 + 15024 + 2721 + 15025 + 2722 + 2723 + 2726 + 2727 + 2728 + 15070 + 2731 + 15071 + 2732 + 2735 + 2736 + 2739 + 15112 + 2745 + 15113 + 2746 + 2747 + 2748 + 2749 + 2752 + 2753 + 15185 + 2756 + 2757 + 2758 + 2759 + 2760 + 2763 + 2764 + 15230 + 2767 + 15231 + 2768 + 2771 + 15270 +endcidchar + +100 begincidchar + 2774 + 15276 + 2777 + 15277 + 15280 + 2784 + 15283 + 2785 + 15284 + 2786 + 2787 + 15291 + 2795 + 2796 + 15310 + 2802 + 2803 + 2804 + 2807 + 2808 + 15382 + 2814 + 2815 + 2816 + 2817 + 2820 + 2821 + 15481 + 2824 + 15482 + 2825 + 15483 + 2826 + 2829 + 2830 + 2831 + 2832 + 2833 + 2834 + 2835 + 2838 + 2841 + 2842 + 2845 + 2846 + 2849 + 2850 + 2851 + 2852 + 2853 + 15733 + 2854 + 2857 + 2858 + 2866 + 15789 + 2867 + 15790 + 2868 + 15798 + 2877 + 2878 + 15816 + 2884 + 2885 + 15826 + 2886 + 15827 + 2887 + 2888 + 2889 + 2892 + 2893 + 15885 + 2901 + 2902 + 15904 + 2905 + 15905 + 2906 + 2907 + 2908 + 2909 + 2910 + 2911 + 15955 + 2912 + 2915 + 2916 + 15974 + 2919 + 15975 + 2920 + 2921 + 2922 + 2923 + 2924 + 2925 + 2926 + 2927 +endcidchar + +100 begincidchar + 16047 + 2930 + 16048 + 2931 + 2932 + 2933 + 2936 + 2937 + 16093 + 2940 + 16094 + 2941 + 2942 + 2943 + 2944 + 2945 + 2946 + 2947 + 2948 + 16166 + 2951 + 16167 + 2952 + 2953 + 2954 + 2955 + 2956 + 2957 + 2960 + 2961 + 16209 + 2964 + 16210 + 2965 + 2968 + 16255 + 2974 + 16256 + 2975 + 2978 + 2979 + 16275 + 2982 + 16276 + 2983 + 2986 + 2987 + 16295 + 2995 + 2998 + 16366 + 3008 + 3009 + 16385 + 3012 + 16386 + 3013 + 3014 + 3015 + 3016 + 16406 + 3022 + 3025 + 3026 + 16452 + 3029 + 16453 + 3030 + 3033 + 3034 + 3035 + 3036 + 3037 + 3038 + 3039 + 3040 + 3041 + 3044 + 3045 + 16573 + 3048 + 16574 + 3049 + 3050 + 3051 + 3052 + 3053 + 3054 + 3055 + 3058 + 3059 + 16643 + 3062 + 16644 + 3063 + 3064 + 3065 + 3066 + 3067 + 3070 +endcidchar + +100 begincidchar + 3071 + 3074 + 3077 + 3078 + 16736 + 3081 + 16737 + 3082 + 3085 + 16755 + 3095 + 3096 + 16774 + 3102 + 3103 + 3106 + 3107 + 16840 + 3108 + 16846 + 3116 + 3117 + 16865 + 3120 + 16866 + 3121 + 3122 + 3123 + 3124 + 3125 + 3126 + 3129 + 3130 + 16936 + 3133 + 16937 + 3134 + 3135 + 16942 + 3136 + 3137 + 3138 + 3139 + 3140 + 3141 + 17013 + 3142 + 3143 + 3146 + 3147 + 17059 + 3150 + 17060 + 3151 + 3152 + 3153 + 3154 + 3157 + 3158 + 3161 + 3162 + 3163 + 3164 + 3165 + 3166 + 3169 + 17168 + 3172 + 17174 + 3175 + 3176 + 3177 + 3178 + 3183 + 3184 + 17218 + 3187 + 17219 + 3188 + 17226 + 3192 + 3193 + 17230 + 3194 + 17236 + 3200 + 3203 + 3204 + 17254 + 3214 + 3215 + 17327 + 3223 + 3224 + 17346 + 3227 + 17347 + 3228 + 3229 + 3230 +endcidchar + +100 begincidchar + 3231 + 3236 + 3237 + 3238 + 17390 + 3239 + 3242 + 3243 + 17411 + 3246 + 17412 + 3247 + 3248 + 3249 + 3250 + 3251 + 3252 + 3253 + 3254 + 3255 + 17513 + 3256 + 3259 + 17526 + 3262 + 17532 + 3265 + 17533 + 3266 + 3267 + 3268 + 3269 + 3270 + 3271 + 3272 + 3273 + 3274 + 3275 + 3276 + 3277 + 3278 + 17632 + 3279 + 3280 + 3281 + 3282 + 17652 + 3285 + 3288 + 3289 + 17701 + 3292 + 17702 + 3293 + 3296 + 3297 + 3298 + 17720 + 3301 + 17721 + 3302 + 3305 + 3306 + 17740 + 3312 + 3313 + 3316 + 3317 + 17806 + 3318 + 17812 + 3321 + 17813 + 3322 + 3325 + 3326 + 17832 + 3329 + 17833 + 3330 + 3333 + 3334 + 17852 + 3340 + 3341 + 3342 + 3343 + 3346 + 3347 + 3348 + 17894 + 3351 + 17895 + 3352 + 3353 + 3356 + 3357 + 3358 + 17916 + 3359 +endcidchar + +100 begincidchar + 3362 + 3363 + 17939 + 3364 + 3367 + 3368 + 3369 + 17959 + 3370 + 17960 + 3371 + 3372 + 3373 + 3374 + 3375 + 17981 + 3376 + 3379 + 3380 + 3381 + 3382 + 3383 + 18003 + 3384 + 3385 + 3386 + 3387 + 3388 + 3389 + 3392 + 3393 + 3394 + 3397 + 3398 + 18068 + 3401 + 18069 + 3402 + 3405 + 3406 + 3407 + 3408 + 18090 + 3409 + 3412 + 18099 + 18106 + 3419 + 18107 + 3420 + 3421 + 3422 + 3423 + 3424 + 3427 + 3430 + 3431 + 18147 + 3434 + 18148 + 3435 + 4116 + 3678 + 7053 + 3460 + 7900 + 3802 + 3902 + 3946 + 3946 + 3708 + 4131 + 4374 + 4156 + 5800 + 4399 + 4403 + 4424 + 4511 + 4550 + 4564 + 4576 + 4318 + 4136 + 5800 + 4139 + 4192 + 4167 + 4172 + 5552 + 6424 + 5151 + 4922 + 7518 + 5079 + 5109 + 7607 + 5584 + 5367 + 7083 +endcidchar + +83 begincidchar + 5362 + 5485 + 6001 + 5460 + 5317 + 7009 + 7370 + 5678 + 5874 + 4439 + 4159 + 4444 + 4447 + 4453 + 4463 + 4160 + 4161 + 4162 + 4474 + 4473 + 6447 + 5460 + 4483 + 4163 + 4166 + 4485 + 4491 + 4167 + 7783 + 4497 + 4499 + 4506 + 5797 + 4180 + 4555 + 5800 + 4563 + 7988 + 6123 + 4577 + 4183 + 4579 + 4584 + 4586 + 4588 + 4184 + 5552 + 4603 + 4614 + 4616 + 4618 + 5950 + 4187 + 4625 + 4627 + 4629 + 4636 + 4638 + 4650 + 5351 + 6494 + 5731 + 5771 + 4191 + 6484 + 6684 + 4279 + 7139 + 4247 + 4266 + 4340 + 7572 + 5088 + 7709 + 3558 + 3644 + 3815 + 112 + 113 + 194 + 357 + 145 + 323 +endcidchar + +100 begincidrange +<0020> <007e> 1 +<00b2> <00b3> 843 +<0391> <03a1> 471 +<03a3> <03a9> 488 +<03b1> <03c1> 495 +<03c3> <03c9> 512 +<0410> <0415> 1020 +<0416> <0435> 1027 +<0436> <044f> 1060 +<2013> <2014> 109 +<2018> <2019> 114 +<201c> <201d> 116 +<2020> <2021> 245 +<2025> <2026> 105 +<2032> <2033> 139 +<2039> <203a> 8612 +<207a> <207b> 8239 +<207d> <207e> 8250 +<2081> <2084> 847 +<2153> <2154> 749 +<215b> <215e> 753 +<2160> <2169> 461 +<2170> <2179> 451 +<2190> <2191> 171 +<2193> <2194> 173 +<21c4> <21c5> 8896 +<2225> <2226> 8719 +<2227> <2228> 192 +<222b> <222c> 182 +<2264> <2265> 134 +<2266> <2267> 8724 +<226e> <226f> 8745 +<2270> <2273> 8481 +<2276> <2277> 8489 +<227a> <227b> 8475 +<2280> <2281> 8479 +<2282> <2283> 188 +<2286> <2287> 186 +<2295> <2297> 8727 +<22bb> <22bc> 8751 +<22ce> <22cf> 8477 +<22da> <22db> 8492 +<2460> <246e> 733 +<246f> <2473> 8791 +<2474> <2482> 827 +<2483> <2487> 9042 +<249c> <24b5> 801 +<24b6> <24cf> 8388 +<24d0> <24e9> 707 +<251e> <251f> 559 +<2521> <2522> 561 +<2526> <2527> 563 +<2529> <252a> 565 +<252d> <252e> 567 +<2531> <2532> 569 +<2535> <2536> 571 +<2539> <253a> 573 +<253d> <253e> 575 +<2540> <2541> 577 +<2543> <254a> 579 +<25a4> <25a5> 233 +<25d0> <25d1> 230 +<2660> <2661> 222 +<2669> <266a> 253 +<2776> <277f> 8673 +<278a> <2793> 8342 +<3000> <3002> 101 +<3008> <3011> 120 +<3014> <3015> 118 +<3016> <3019> 8219 +<301e> <301f> 9322 +<3041> <3093> 851 +<30a1> <30f6> 934 +<3131> <3163> 358 +<3165> <318e> 409 +<3200> <321b> 773 +<3260> <327b> 679 +<328a> <328f> 9301 +<3380> <3384> 627 +<3388> <3389> 612 +<338a> <338c> 646 +<338d> <338f> 608 +<3390> <3394> 638 +<3395> <3397> 587 +<3399> <33a2> 597 +<33a3> <33a6> 593 +<33a7> <33a8> 615 +<33a9> <33ac> 655 +<33ad> <33af> 651 +<33b0> <33b9> 617 +<33ba> <33bf> 632 +<33c0> <33c1> 644 +<5cef> <5cf0> 5096 +<5e7c> <5e7d> 6317 +<5fd8> <5fd9> 4698 +<6108> <6109> 6322 +<6158> <6159> 7085 +<6478> <6479> 4770 +<65fb> <65fc> 4875 +<6643> <6644> 7911 +endcidrange + +100 begincidrange +<671e> <671f> 4083 +<67b6> <67b7> 3448 +<6961> <6962> 6329 +<6bd6> <6bd8> 5197 +<71b9> <71ba> 8049 +<7336> <7337> 6335 +<767d> <767e> 4993 +<78ba> <78bb> 7879 +<7947> <7948> 4104 +<7aa9> <7aaa> 6101 +<7d0a> <7d0b> 4842 +<8150> <8151> 5133 +<887e> <887f> 4047 +<88f4> <88f5> 4981 +<9451> <9452> 3527 +<9591> <9592> 7645 +<96a7> <96a8> 5620 +<96e8> <96e9> 6227 +<9a0e> <9a0f> 4122 + 1086 + 9333 + 9335 + 1089 + 9337 + 1093 + 1101 + 9343 + 9345 + 9348 + 1108 + 1110 + 9356 + 1113 + 9362 + 9364 + 9367 + 9378 + 9384 + 9387 + 9390 + 1122 + 9409 + 9411 + 1125 + 9414 + 1128 + 1130 + 9420 + 1134 + 9422 + 9425 + 9428 + 1140 + 1142 + 9436 + 1145 + 9443 + 1149 + 9445 + 1151 + 1153 + 9453 + 9456 + 9458 + 9461 + 9464 + 9473 + 1162 + 9481 + 9483 + 1165 + 9487 + 1169 + 1173 + 9491 + 1175 + 9496 + 9498 + 9502 + 1180 + 9509 + 9515 + 9518 + 9521 + 9529 + 1188 + 9531 + 1190 + 9537 + 9539 + 9542 + 1194 + 9551 + 9557 + 9560 + 9563 + 9572 + 1203 + 9580 + 9582 +endcidrange + +100 begincidrange + 1206 + 9584 + 1210 + 1214 + 9590 + 1216 + 9595 + 9597 + 9600 + 1220 + 9611 + 9617 + 9635 + 1224 + 9643 + 9645 + 9648 + 1228 + 9656 + 9664 + 9667 + 9670 + 1234 + 9689 + 9691 + 1238 + 9693 + 1240 + 9701 + 9707 + 1245 + 9734 + 9736 + 1248 + 9739 + 1251 + 1254 + 9746 + 1257 + 9751 + 9755 + 1263 + 1265 + 9761 + 9764 + 1269 + 9766 + 9768 + 9771 + 1273 + 1275 + 9779 + 1278 + 9785 + 9791 + 1281 + 9839 + 9842 + 1286 + 1288 + 9850 + 1291 + 9856 + 9858 + 9869 + 9872 + 9878 + 9881 + 9884 + 9887 + 1300 + 9894 + 9898 + 9900 + 1304 + 9927 + 9931 + 1309 + 1312 + 9940 + 1315 + 9944 + 9950 + 1318 + 9961 + 1320 + 9967 + 9986 + 9992 + 9995 + 9998 + 1326 + 10005 + 10008 + 10014 + 1330 + 10041 + 10043 + 10046 + 1334 +endcidrange + +100 begincidrange + 1338 + 10054 + 10059 + 10066 + 1342 + 10077 + 1344 + 10083 + 10085 + 10088 + 1348 + 10095 + 10097 + 10104 + 10107 + 10110 + 1354 + 10117 + 10127 + 1357 + 10154 + 10159 + 1363 + 10165 + 10168 + 1369 + 10198 + 10200 + 10203 + 1373 + 10212 + 1377 + 10219 + 1381 + 10221 + 1385 + 1387 + 1393 + 10229 + 10231 + 10234 + 1398 + 1400 + 10242 + 1403 + 10248 + 10250 + 10253 + 10260 + 10264 + 10290 + 1409 + 1411 + 10299 + 1414 + 10303 + 1416 + 1418 + 10308 + 1421 + 10313 + 10315 + 10318 + 1426 + 1428 + 10326 + 1431 + 10332 + 10334 + 10337 + 1435 + 10344 + 1437 + 10346 + 10348 + 10351 + 10354 + 1442 + 10377 + 10379 + 10383 + 1447 + 10390 + 1451 + 10394 + 10397 + 10400 + 10411 + 10446 + 10449 + 10452 + 1460 + 10460 + 1463 + 10468 + 10470 + 10473 + 10483 + 10485 + 1470 +endcidrange + +100 begincidrange + 10489 + 10491 + 1473 + 10493 + 1475 + 10502 + 10508 + 10527 + 10534 + 10561 + 10564 + 10567 + 1485 + 10574 + 1487 + 10584 + 10590 + 1490 + 10597 + 10600 + 1493 + 10606 + 10608 + 1496 + 10611 + 1499 + 1502 + 10618 + 10622 + 10625 + 10628 + 1508 + 10647 + 10649 + 10653 + 1513 + 10660 + 1518 + 10666 + 1522 + 10668 + 1527 + 1530 + 10672 + 1536 + 10675 + 10677 + 10680 + 1540 + 1542 + 10688 + 10694 + 1546 + 10750 + 1550 + 1552 + 10753 + 1554 + 10760 + 1560 + 10763 + 10765 + 10768 + 1564 + 1566 + 10776 + 10782 + 10785 + 10788 + 1572 + 10799 + 10805 + 10808 + 1576 + 10831 + 10833 + 1579 + 10837 + 1583 + 10844 + 10846 + 10849 + 10852 + 10871 + 10874 + 10890 + 10897 + 10900 + 10903 + 1597 + 10911 + 10919 + 1601 + 10946 + 10948 + 10951 + 1605 + 10960 + 10966 + 10985 +endcidrange + +100 begincidrange + 10992 + 11012 + 11018 + 11021 + 11024 + 11034 + 11040 + 11043 + 11046 + 11053 + 11057 + 1624 + 11063 + 11065 + 1627 + 11068 + 1630 + 11075 + 11081 + 11088 + 1635 + 11108 + 11110 + 1638 + 11112 + 1640 + 1642 + 11120 + 1646 + 11125 + 11127 + 11130 + 1650 + 1652 + 11138 + 1655 + 11143 + 11145 + 11148 + 1660 + 1662 + 11156 + 1665 + 11218 + 11220 + 1669 + 11224 + 1671 + 1673 + 11229 + 1676 + 11234 + 11236 + 11239 + 1681 + 1683 + 11247 + 11253 + 11272 + 11291 + 1688 + 11307 + 11309 + 11312 + 11324 + 11330 + 11337 + 11356 + 11383 + 11386 + 1698 + 11437 + 11439 + 11442 + 1702 + 11448 + 11452 + 11486 + 11513 + 11516 + 11519 + 1709 + 11526 + 11529 + 1712 + 11563 + 11565 + 1715 + 11567 + 1717 + 11575 + 11583 + 11586 + 11589 + 1723 + 11596 + 11606 + 11609 + 11612 + 1728 +endcidrange + +100 begincidrange + 11621 + 1732 + 11627 + 11629 + 11632 + 1736 + 1738 + 11640 + 1742 + 11643 + 11645 + 11648 + 1748 + 1750 + 11656 + 1753 + 11662 + 11664 + 11679 + 1758 + 11713 + 11715 + 11718 + 1762 + 1765 + 11726 + 1767 + 11731 + 11733 + 11736 + 1772 + 11745 + 1776 + 11751 + 11753 + 11756 + 1780 + 1782 + 11764 + 11770 + 11773 + 11786 + 1789 + 11794 + 11796 + 11799 + 1793 + 11808 + 11814 + 11817 + 11833 + 11859 + 11866 + 11869 + 11872 + 1804 + 11881 + 11887 + 11890 + 11893 + 11903 + 1814 + 11909 + 11911 + 11914 + 1818 + 11923 + 11925 + 11929 + 11948 + 11955 + 1825 + 11982 + 11984 + 11987 + 11994 + 11997 + 1832 + 12003 + 12005 + 12008 + 1836 + 12017 + 1840 + 12023 + 12025 + 12028 + 1844 + 1847 + 12037 + 1849 + 12039 + 1851 + 12068 + 12070 + 12073 + 1855 + 12082 + 1859 + 12088 +endcidrange + +100 begincidrange + 1862 + 12091 + 1867 + 1870 + 12098 + 1873 + 12101 + 12103 + 12106 + 1878 + 1880 + 12114 + 1884 + 12119 + 12125 + 12137 + 1888 + 12171 + 12173 + 12177 + 1893 + 1896 + 12184 + 1898 + 12188 + 12190 + 12193 + 1903 + 1905 + 12201 + 1908 + 12207 + 12209 + 12212 + 1912 + 12223 + 12227 + 1917 + 1919 + 12255 + 12259 + 1923 + 12266 + 12272 + 12275 + 1929 + 12290 + 12324 + 12327 + 12330 + 12340 + 12346 + 12349 + 12352 + 12361 + 1942 + 12370 + 1946 + 12372 + 1950 + 12379 + 1955 + 12383 + 12386 + 12389 + 12398 + 12406 + 12433 + 12436 + 12439 + 12458 + 12461 + 12464 + 12471 + 12473 + 12481 + 12484 + 12487 + 12494 + 12496 + 1975 + 12532 + 12534 + 12537 + 1981 + 1983 + 12545 + 1988 + 12547 + 1993 + 12549 + 1998 + 12555 + 12558 + 2003 + 12560 + 12562 + 12565 + 2007 + 2009 +endcidrange + +100 begincidrange + 12573 + 12576 + 2013 + 12578 + 12580 + 12592 + 2017 + 12630 + 12632 + 2020 + 12635 + 2023 + 2026 + 12642 + 2028 + 12647 + 12649 + 2031 + 12651 + 2033 + 2035 + 12659 + 2038 + 12665 + 12667 + 12670 + 2043 + 12679 + 12682 + 12684 + 12687 + 2049 + 12711 + 12714 + 12717 + 2054 + 12723 + 12729 + 12732 + 12747 + 12754 + 12773 + 2063 + 12780 + 12782 + 12785 + 2067 + 12792 + 12802 + 12805 + 2071 + 12828 + 12830 + 2074 + 12832 + 2078 + 12839 + 2082 + 12843 + 12850 + 12861 + 12868 + 2088 + 12895 + 12897 + 12900 + 12912 + 12918 + 12921 + 12924 + 12931 + 12934 + 2099 + 12940 + 12942 + 12945 + 2103 + 12953 + 2106 + 12989 + 12991 + 12995 + 2111 + 2114 + 13002 + 2117 + 13006 + 13008 + 13012 + 2122 + 2124 + 13018 + 2127 + 13023 + 13025 + 13028 + 2132 + 2134 + 13036 + 2137 +endcidrange + +100 begincidrange + 13042 + 13056 + 2140 + 13095 + 13097 + 2143 + 13099 + 13106 + 2146 + 13108 + 13114 + 13134 + 2151 + 13140 + 2153 + 2155 + 13155 + 2158 + 13189 + 13191 + 13194 + 2162 + 13201 + 13204 + 13266 + 13293 + 13313 + 2168 + 13319 + 13321 + 13324 + 13331 + 13334 + 13364 + 13424 + 13444 + 13450 + 13453 + 13456 + 2180 + 13463 + 2182 + 13501 + 13503 + 13506 + 2186 + 13515 + 2190 + 2192 + 13522 + 2194 + 13524 + 2198 + 2200 + 13530 + 13533 + 2204 + 13535 + 13537 + 13540 + 2208 + 2210 + 13548 + 2213 + 13554 + 13556 + 13559 + 2217 + 13568 + 13574 + 13577 + 13580 + 13587 + 13591 + 2226 + 13597 + 2231 + 2233 + 13600 + 2235 + 2237 + 13605 + 2241 + 13610 + 13612 + 13615 + 2245 + 2247 + 13623 + 2250 + 13629 + 13631 + 13634 + 2254 + 2256 + 13642 + 13648 + 13651 + 13654 + 13666 +endcidrange + +100 begincidrange + 2263 + 13673 + 13677 + 2269 + 13684 + 13687 + 2274 + 13689 + 13691 + 13694 + 13706 + 13712 + 13715 + 13718 + 13725 + 2283 + 13727 + 13734 + 13737 + 13740 + 2288 + 13748 + 2291 + 13756 + 13758 + 13761 + 2295 + 13770 + 2299 + 13776 + 13778 + 2302 + 13780 + 2304 + 2309 + 13792 + 13811 + 2313 + 13818 + 13820 + 13823 + 13830 + 13834 + 2319 + 13840 + 13842 + 13845 + 2323 + 13854 + 2327 + 13860 + 13866 + 13873 + 13876 + 2333 + 13882 + 13884 + 2336 + 13887 + 2338 + 13895 + 2342 + 13929 + 13931 + 2345 + 13933 + 2347 + 13941 + 2353 + 2355 + 13947 + 13950 + 2358 + 13957 + 2360 + 13959 + 2362 + 13964 + 13966 + 13969 + 2367 + 13976 + 2369 + 13978 + 14005 + 2372 + 14039 + 14041 + 14045 + 2377 + 14050 + 2379 + 14052 + 14058 + 14061 + 14064 + 14115 + 2385 + 14138 + 14140 +endcidrange + +100 begincidrange + 2388 + 14143 + 2391 + 14148 + 14151 + 2394 + 14157 + 14159 + 14166 + 14174 + 14181 + 14200 + 14207 + 14210 + 14213 + 2403 + 14220 + 14230 + 2406 + 14257 + 14259 + 14262 + 2410 + 14269 + 14272 + 14278 + 14297 + 14304 + 14331 + 14334 + 14378 + 2419 + 14384 + 14386 + 14390 + 2425 + 14394 + 14404 + 14407 + 14410 + 14417 + 2431 + 14428 + 14430 + 14433 + 2435 + 14442 + 2439 + 14448 + 2441 + 2444 + 14451 + 2447 + 2450 + 14456 + 2453 + 2455 + 14460 + 14462 + 14465 + 2459 + 2461 + 14473 + 2464 + 14479 + 14481 + 14484 + 14486 + 2469 + 14492 + 2474 + 14496 + 14499 + 14502 + 14510 + 2479 + 14520 + 2481 + 2483 + 14523 + 2487 + 2496 + 14531 + 14533 + 14536 + 2500 + 14545 + 2504 + 14552 + 2509 + 14556 + 2511 + 2515 + 14560 + 2517 + 14563 + 14566 + 14569 + 2523 + 2525 +endcidrange + +100 begincidrange + 14577 + 2527 + 14584 + 14586 + 2530 + 14590 + 2534 + 14595 + 2540 + 14599 + 14601 + 14604 + 2544 + 2546 + 14612 + 2549 + 14618 + 14620 + 14631 + 14634 + 2555 + 14640 + 14642 + 14645 + 2559 + 14654 + 2563 + 14660 + 14662 + 14665 + 2567 + 14674 + 2571 + 14680 + 14682 + 2574 + 14685 + 2577 + 14692 + 2581 + 14698 + 14700 + 14703 + 2585 + 14710 + 2587 + 14712 + 2589 + 14718 + 14720 + 14723 + 2593 + 14730 + 14733 + 14735 + 2596 + 14739 + 14741 + 14744 + 2600 + 14753 + 2604 + 14759 + 14761 + 14764 + 2608 + 14774 + 2613 + 14778 + 14780 + 14783 + 2618 + 2621 + 14791 + 14794 + 14797 + 14804 + 14806 + 2633 + 14814 + 14816 + 2636 + 14819 + 2639 + 2642 + 14824 + 2647 + 14828 + 2650 + 14832 + 2654 + 2656 + 14838 + 2660 + 14843 + 14845 + 14848 + 2664 + 2666 + 14856 +endcidrange + +100 begincidrange + 2669 + 14862 + 14866 + 14873 + 14877 + 14883 + 14886 + 14889 + 2679 + 14908 + 14910 + 14914 + 2684 + 2687 + 14921 + 2689 + 14926 + 14928 + 14931 + 2693 + 14940 + 14946 + 14949 + 14952 + 2700 + 14959 + 2702 + 14961 + 14967 + 2705 + 14994 + 14996 + 15000 + 2710 + 2713 + 15007 + 2716 + 15010 + 15016 + 15026 + 15032 + 2724 + 15051 + 15057 + 15060 + 15063 + 2729 + 15072 + 2733 + 15078 + 15080 + 15096 + 2737 + 15102 + 15104 + 2740 + 15107 + 2743 + 15114 + 15120 + 15139 + 15146 + 2750 + 15173 + 15175 + 15178 + 2754 + 15186 + 15194 + 15197 + 15200 + 15207 + 2761 + 15218 + 15220 + 15223 + 2765 + 15232 + 2769 + 15266 + 15268 + 2772 + 15271 + 2775 + 2778 + 15278 + 2780 + 2782 + 15281 + 15285 + 15287 + 2788 + 2790 + 15292 + 2793 + 15298 + 15300 + 15303 + 2797 + 2799 +endcidrange + +100 begincidrange + 15311 + 15317 + 15320 + 15336 + 2805 + 15370 + 15372 + 15375 + 2809 + 2811 + 15383 + 15389 + 15409 + 15415 + 15434 + 2818 + 15469 + 15471 + 15474 + 2822 + 15484 + 2827 + 15488 + 15494 + 15505 + 15512 + 15523 + 15531 + 15538 + 15541 + 15544 + 2836 + 15551 + 15582 + 2839 + 15588 + 15590 + 15593 + 2843 + 15600 + 15603 + 15609 + 2847 + 15628 + 15662 + 15689 + 15716 + 15731 + 15734 + 15756 + 2855 + 15768 + 15770 + 15773 + 2859 + 15780 + 2861 + 15783 + 2863 + 15787 + 15791 + 2869 + 2871 + 15799 + 2875 + 15804 + 15806 + 15809 + 2879 + 2881 + 15817 + 15823 + 15828 + 15835 + 15839 + 2890 + 15873 + 15875 + 15878 + 2894 + 2896 + 15886 + 2899 + 15892 + 15894 + 15897 + 2903 + 15906 + 15912 + 15915 + 15930 + 15937 + 15940 + 15956 + 2913 + 15962 + 15964 + 15967 + 2917 + 15976 +endcidrange + +100 begincidrange + 15982 + 15985 + 15988 + 16000 + 16034 + 16037 + 16040 + 2928 + 16049 + 16055 + 16070 + 2934 + 16081 + 16083 + 16086 + 2938 + 16095 + 16101 + 16120 + 16127 + 16130 + 16153 + 16156 + 16159 + 2949 + 16168 + 16170 + 16174 + 16177 + 16180 + 16187 + 16191 + 2958 + 16197 + 16199 + 16202 + 2962 + 16211 + 2966 + 16245 + 16247 + 2969 + 16249 + 2972 + 16257 + 2976 + 16263 + 16265 + 16268 + 2980 + 16277 + 2984 + 16283 + 16285 + 16288 + 2988 + 2990 + 16296 + 2993 + 16302 + 16321 + 2996 + 16355 + 16357 + 2999 + 16359 + 3001 + 3003 + 16367 + 3006 + 16373 + 16375 + 16378 + 3010 + 16387 + 16393 + 16396 + 16399 + 3017 + 3019 + 16407 + 16413 + 3023 + 16440 + 16442 + 16445 + 3027 + 16454 + 3031 + 16460 + 16462 + 16465 + 16472 + 16476 + 16482 + 16502 + 16508 + 16515 + 16534 + 3042 +endcidrange + +100 begincidrange + 16561 + 16563 + 16566 + 3046 + 16575 + 16581 + 16584 + 16587 + 16599 + 16605 + 16625 + 3056 + 16631 + 16633 + 16636 + 3060 + 16645 + 16651 + 16654 + 16657 + 16664 + 3068 + 16675 + 16677 + 16680 + 3072 + 16687 + 16690 + 3075 + 16724 + 16726 + 16729 + 3079 + 16738 + 3083 + 16744 + 16746 + 3086 + 16749 + 3088 + 3090 + 16756 + 3093 + 16762 + 16764 + 16767 + 3097 + 3099 + 16775 + 16781 + 16788 + 16801 + 3104 + 16835 + 16837 + 16841 + 3109 + 3111 + 16847 + 3114 + 16853 + 16855 + 16858 + 3118 + 16867 + 16873 + 16876 + 16891 + 16898 + 16901 + 3127 + 16924 + 16926 + 16929 + 3131 + 16938 + 16943 + 16946 + 16969 + 16996 + 16999 + 17006 + 17014 + 17020 + 3144 + 17047 + 17049 + 17052 + 3148 + 17061 + 17067 + 17086 + 17093 + 3155 + 17120 + 17122 + 17125 + 3159 + 17132 + 17135 +endcidrange + +100 begincidrange + 17141 + 17144 + 17147 + 17154 + 17158 + 3167 + 17164 + 17166 + 3170 + 17169 + 3173 + 17175 + 17183 + 17186 + 17189 + 3179 + 17196 + 3181 + 17206 + 17208 + 17211 + 3185 + 17220 + 3189 + 17227 + 17231 + 3195 + 3197 + 17237 + 17240 + 3201 + 17242 + 17244 + 17247 + 3205 + 3207 + 17255 + 3210 + 17261 + 3212 + 17315 + 17317 + 17320 + 3216 + 3218 + 17328 + 3221 + 17334 + 17336 + 17339 + 3225 + 17348 + 17354 + 17357 + 17360 + 3232 + 17367 + 3234 + 17369 + 17375 + 17382 + 17391 + 3240 + 17399 + 17401 + 17404 + 3244 + 17413 + 17419 + 17439 + 17473 + 17476 + 17499 + 17502 + 17505 + 17514 + 3257 + 17522 + 17524 + 3260 + 17527 + 3263 + 17534 + 17540 + 17560 + 17594 + 17597 + 17600 + 17607 + 17609 + 17617 + 17620 + 17623 + 17630 + 17633 + 17635 + 17639 + 17642 + 17645 + 3283 +endcidrange + +100 begincidrange + 17653 + 3286 + 17689 + 17691 + 17694 + 3290 + 17703 + 3294 + 17709 + 17711 + 17714 + 17718 + 3299 + 17722 + 3303 + 17728 + 17730 + 17733 + 3307 + 3309 + 17741 + 17747 + 17767 + 3314 + 17801 + 17803 + 17807 + 3319 + 17814 + 3323 + 17820 + 17822 + 17825 + 3327 + 17834 + 3331 + 17840 + 17842 + 17845 + 3335 + 3337 + 17853 + 17859 + 17862 + 17865 + 17873 + 3344 + 17883 + 17885 + 17888 + 17892 + 3349 + 17896 + 17899 + 3354 + 17901 + 17903 + 17906 + 17917 + 3360 + 17923 + 17925 + 17940 + 3365 + 17946 + 17948 + 17951 + 17961 + 17967 + 17970 + 17973 + 17982 + 3377 + 17990 + 17992 + 17995 + 17999 + 18001 + 18004 + 18010 + 18013 + 18016 + 18023 + 18027 + 3390 + 18033 + 18035 + 18038 + 18050 + 3395 + 18056 + 18058 + 18061 + 3399 + 18070 + 3403 + 18076 + 18078 + 18081 + 18088 +endcidrange + +70 begincidrange + 18091 + 3410 + 18097 + 3413 + 18100 + 3417 + 18108 + 18111 + 18113 + 18116 + 18119 + 3425 + 18126 + 18129 + 3428 + 18135 + 18137 + 18140 + 3432 + 18149 + 4375 + 4382 + 4386 + 4394 + 4406 + 4409 + 4419 + 4513 + 4517 + 4524 + 4528 + 4535 + 4541 + 4545 + 4566 + 4571 + 4604 + 4609 + 4425 + 4429 + 4435 + 4442 + 4449 + 4455 + 4465 + 4468 + 4471 + 4475 + 4478 + 4481 + 4487 + 4493 + 4501 + 4508 + 4551 + 4556 + 4560 + 4581 + 4590 + 4595 + 4599 + 4620 + 4632 + 4188 + 4640 + 4644 + 4653 + 264 + 324 + 143 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UTF16-V b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UTF16-V new file mode 100644 index 00000000000..ce5190e30a3 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/UniKS-UTF16-V @@ -0,0 +1,99 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (UniKS-UTF16-H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (UniKS-UTF16-H) +%%BeginResource: CMap (UniKS-UTF16-V) +%%Title: (UniKS-UTF16-V Adobe Korea1 1) +%%Version: 1.002 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/UniKS-UTF16-H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Korea1) def + /Supplement 1 def +end def + +/CMapName /UniKS-UTF16-V def +/CMapVersion 1.002 def +/CMapType 1 def + +/XUID [1 10 25545] def + +/WMode 1 def + +11 begincidchar +<2016> 8061 +<2025> 8058 +<3013> 8075 + 8076 + 8079 + 8080 + 8087 + 8088 + 8089 + 8062 + 8093 +endcidchar + +7 begincidrange +<2013> <2014> 8059 +<3001> <3002> 8056 +<3008> <3011> 8065 +<3014> <3015> 8063 + 8077 + 8081 + 8090 +endcidrange + +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/cmap/V b/fontbox/src/main/resources/org/apache/fontbox/cmap/V new file mode 100644 index 00000000000..bf5f97b15a8 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/cmap/V @@ -0,0 +1,105 @@ +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%DocumentNeededResources: CMap (H) +%%IncludeResource: ProcSet (CIDInit) +%%IncludeResource: CMap (H) +%%BeginResource: CMap (V) +%%Title: (V Adobe Japan1 1) +%%Version: 12.004 +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2015 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- +%%EndComments + +/CIDInit /ProcSet findresource begin + +12 dict begin + +begincmap + +/H usecmap + +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Japan1) def + /Supplement 1 def +end def + +/CMapName /V def +/CMapVersion 12.004 def +/CMapType 1 def + +/UIDOffset 850 def +/XUID [1 10 25340] def + +/WMode 1 def + +27 begincidrange +<2122> <2123> 7887 +<2131> <2132> 7889 +<213c> <213e> 7891 +<2141> <2145> 7894 +<214a> <215b> 7899 +<2161> <2161> 7917 +<2421> <2421> 7918 +<2423> <2423> 7919 +<2425> <2425> 7920 +<2427> <2427> 7921 +<2429> <2429> 7922 +<2443> <2443> 7923 +<2463> <2463> 7924 +<2465> <2465> 7925 +<2467> <2467> 7926 +<246e> <246e> 7927 +<2521> <2521> 7928 +<2523> <2523> 7929 +<2525> <2525> 7930 +<2527> <2527> 7931 +<2529> <2529> 7932 +<2543> <2543> 7933 +<2563> <2563> 7934 +<2565> <2565> 7935 +<2567> <2567> 7936 +<256e> <256e> 7937 +<2575> <2576> 7938 +endcidrange +endcmap +CMapName currentdict /CMap defineresource pop +end +end + +%%EndResource +%%EOF diff --git a/fontbox/src/main/resources/org/apache/fontbox/unicode/Scripts.txt b/fontbox/src/main/resources/org/apache/fontbox/unicode/Scripts.txt new file mode 100644 index 00000000000..72319448e96 --- /dev/null +++ b/fontbox/src/main/resources/org/apache/fontbox/unicode/Scripts.txt @@ -0,0 +1,2693 @@ +# Scripts-10.0.0.txt +# Date: 2017-03-11, 06:40:37 GMT +# © 2017 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see http://www.unicode.org/reports/tr44/ +# For more information, see: +# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/ +# Especially the sections: +# http://www.unicode.org/reports/tr24/#Assignment_Script_Values +# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values +# + +# ================================================ + +# Property: Script + +# All code points not explicitly listed for Script +# have the value Unknown (Zzzz). + +# @missing: 0000..10FFFF; Unknown + +# ================================================ + +0000..001F ; Common # Cc [32] .. +0020 ; Common # Zs SPACE +0021..0023 ; Common # Po [3] EXCLAMATION MARK..NUMBER SIGN +0024 ; Common # Sc DOLLAR SIGN +0025..0027 ; Common # Po [3] PERCENT SIGN..APOSTROPHE +0028 ; Common # Ps LEFT PARENTHESIS +0029 ; Common # Pe RIGHT PARENTHESIS +002A ; Common # Po ASTERISK +002B ; Common # Sm PLUS SIGN +002C ; Common # Po COMMA +002D ; Common # Pd HYPHEN-MINUS +002E..002F ; Common # Po [2] FULL STOP..SOLIDUS +0030..0039 ; Common # Nd [10] DIGIT ZERO..DIGIT NINE +003A..003B ; Common # Po [2] COLON..SEMICOLON +003C..003E ; Common # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN +003F..0040 ; Common # Po [2] QUESTION MARK..COMMERCIAL AT +005B ; Common # Ps LEFT SQUARE BRACKET +005C ; Common # Po REVERSE SOLIDUS +005D ; Common # Pe RIGHT SQUARE BRACKET +005E ; Common # Sk CIRCUMFLEX ACCENT +005F ; Common # Pc LOW LINE +0060 ; Common # Sk GRAVE ACCENT +007B ; Common # Ps LEFT CURLY BRACKET +007C ; Common # Sm VERTICAL LINE +007D ; Common # Pe RIGHT CURLY BRACKET +007E ; Common # Sm TILDE +007F..009F ; Common # Cc [33] .. +00A0 ; Common # Zs NO-BREAK SPACE +00A1 ; Common # Po INVERTED EXCLAMATION MARK +00A2..00A5 ; Common # Sc [4] CENT SIGN..YEN SIGN +00A6 ; Common # So BROKEN BAR +00A7 ; Common # Po SECTION SIGN +00A8 ; Common # Sk DIAERESIS +00A9 ; Common # So COPYRIGHT SIGN +00AB ; Common # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC ; Common # Sm NOT SIGN +00AD ; Common # Cf SOFT HYPHEN +00AE ; Common # So REGISTERED SIGN +00AF ; Common # Sk MACRON +00B0 ; Common # So DEGREE SIGN +00B1 ; Common # Sm PLUS-MINUS SIGN +00B2..00B3 ; Common # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B4 ; Common # Sk ACUTE ACCENT +00B5 ; Common # L& MICRO SIGN +00B6..00B7 ; Common # Po [2] PILCROW SIGN..MIDDLE DOT +00B8 ; Common # Sk CEDILLA +00B9 ; Common # No SUPERSCRIPT ONE +00BB ; Common # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC..00BE ; Common # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +00BF ; Common # Po INVERTED QUESTION MARK +00D7 ; Common # Sm MULTIPLICATION SIGN +00F7 ; Common # Sm DIVISION SIGN +02B9..02C1 ; Common # Lm [9] MODIFIER LETTER PRIME..MODIFIER LETTER REVERSED GLOTTAL STOP +02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD +02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT +02E5..02E9 ; Common # Sk [5] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER EXTRA-LOW TONE BAR +02EC ; Common # Lm MODIFIER LETTER VOICING +02ED ; Common # Sk MODIFIER LETTER UNASPIRATED +02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE +02EF..02FF ; Common # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW +0374 ; Common # Lm GREEK NUMERAL SIGN +037E ; Common # Po GREEK QUESTION MARK +0385 ; Common # Sk GREEK DIALYTIKA TONOS +0387 ; Common # Po GREEK ANO TELEIA +0589 ; Common # Po ARMENIAN FULL STOP +0605 ; Common # Cf ARABIC NUMBER MARK ABOVE +060C ; Common # Po ARABIC COMMA +061B ; Common # Po ARABIC SEMICOLON +061F ; Common # Po ARABIC QUESTION MARK +0640 ; Common # Lm ARABIC TATWEEL +06DD ; Common # Cf ARABIC END OF AYAH +08E2 ; Common # Cf ARABIC DISPUTED END OF AYAH +0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA +0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT +0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS +10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR +16EB..16ED ; Common # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION +1735..1736 ; Common # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION +1802..1803 ; Common # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP +1805 ; Common # Po MONGOLIAN FOUR DOTS +1CD3 ; Common # Po VEDIC SIGN NIHSHVASA +1CE1 ; Common # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CE9..1CEC ; Common # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE..1CF1 ; Common # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA +1CF2..1CF3 ; Common # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF5..1CF6 ; Common # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CF7 ; Common # Mc VEDIC SIGN ATIKRAMA +2000..200A ; Common # Zs [11] EN QUAD..HAIR SPACE +200B ; Common # Cf ZERO WIDTH SPACE +200E..200F ; Common # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK +2010..2015 ; Common # Pd [6] HYPHEN..HORIZONTAL BAR +2016..2017 ; Common # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE +2018 ; Common # Pi LEFT SINGLE QUOTATION MARK +2019 ; Common # Pf RIGHT SINGLE QUOTATION MARK +201A ; Common # Ps SINGLE LOW-9 QUOTATION MARK +201B..201C ; Common # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK +201D ; Common # Pf RIGHT DOUBLE QUOTATION MARK +201E ; Common # Ps DOUBLE LOW-9 QUOTATION MARK +201F ; Common # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020..2027 ; Common # Po [8] DAGGER..HYPHENATION POINT +2028 ; Common # Zl LINE SEPARATOR +2029 ; Common # Zp PARAGRAPH SEPARATOR +202A..202E ; Common # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +202F ; Common # Zs NARROW NO-BREAK SPACE +2030..2038 ; Common # Po [9] PER MILLE SIGN..CARET +2039 ; Common # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A ; Common # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203B..203E ; Common # Po [4] REFERENCE MARK..OVERLINE +203F..2040 ; Common # Pc [2] UNDERTIE..CHARACTER TIE +2041..2043 ; Common # Po [3] CARET INSERTION POINT..HYPHEN BULLET +2044 ; Common # Sm FRACTION SLASH +2045 ; Common # Ps LEFT SQUARE BRACKET WITH QUILL +2046 ; Common # Pe RIGHT SQUARE BRACKET WITH QUILL +2047..2051 ; Common # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY +2052 ; Common # Sm COMMERCIAL MINUS SIGN +2053 ; Common # Po SWUNG DASH +2054 ; Common # Pc INVERTED UNDERTIE +2055..205E ; Common # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS +205F ; Common # Zs MEDIUM MATHEMATICAL SPACE +2060..2064 ; Common # Cf [5] WORD JOINER..INVISIBLE PLUS +2066..206F ; Common # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +2070 ; Common # No SUPERSCRIPT ZERO +2074..2079 ; Common # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +207A..207C ; Common # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; Common # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; Common # Pe SUPERSCRIPT RIGHT PARENTHESIS +2080..2089 ; Common # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS +20A0..20BF ; Common # Sc [32] EURO-CURRENCY SIGN..BITCOIN SIGN +2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2102 ; Common # L& DOUBLE-STRUCK CAPITAL C +2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA +2107 ; Common # L& EULER CONSTANT +2108..2109 ; Common # So [2] SCRUPLE..DEGREE FAHRENHEIT +210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2114 ; Common # So L B BAR SYMBOL +2115 ; Common # L& DOUBLE-STRUCK CAPITAL N +2116..2117 ; Common # So [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT +2118 ; Common # Sm SCRIPT CAPITAL P +2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE +2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z +2125 ; Common # So OUNCE SIGN +2127 ; Common # So INVERTED OHM SIGN +2128 ; Common # L& BLACK-LETTER CAPITAL Z +2129 ; Common # So TURNED GREEK SMALL LETTER IOTA +212C..212D ; Common # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C +212E ; Common # So ESTIMATED SYMBOL +212F..2131 ; Common # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F +2133..2134 ; Common # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O +2135..2138 ; Common # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; Common # L& INFORMATION SOURCE +213A..213B ; Common # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN +213C..213F ; Common # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2140..2144 ; Common # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y +2145..2149 ; Common # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214A ; Common # So PROPERTY LINE +214B ; Common # Sm TURNED AMPERSAND +214C..214D ; Common # So [2] PER SIGN..AKTIESELSKAB +214F ; Common # So SYMBOL FOR SAMARITAN SOURCE +2150..215F ; Common # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE +2189 ; Common # No VULGAR FRACTION ZERO THIRDS +218A..218B ; Common # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE +2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW +2195..2199 ; Common # So [5] UP DOWN ARROW..SOUTH WEST ARROW +219A..219B ; Common # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +219C..219F ; Common # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW +21A0 ; Common # Sm RIGHTWARDS TWO HEADED ARROW +21A1..21A2 ; Common # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL +21A3 ; Common # Sm RIGHTWARDS ARROW WITH TAIL +21A4..21A5 ; Common # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR +21A6 ; Common # Sm RIGHTWARDS ARROW FROM BAR +21A7..21AD ; Common # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW +21AE ; Common # Sm LEFT RIGHT ARROW WITH STROKE +21AF..21CD ; Common # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; Common # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0..21D1 ; Common # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW +21D2 ; Common # Sm RIGHTWARDS DOUBLE ARROW +21D3 ; Common # So DOWNWARDS DOUBLE ARROW +21D4 ; Common # Sm LEFT RIGHT DOUBLE ARROW +21D5..21F3 ; Common # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW +21F4..22FF ; Common # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP +2300..2307 ; Common # So [8] DIAMETER SIGN..WAVY LINE +2308 ; Common # Ps LEFT CEILING +2309 ; Common # Pe RIGHT CEILING +230A ; Common # Ps LEFT FLOOR +230B ; Common # Pe RIGHT FLOOR +230C..231F ; Common # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER +2320..2321 ; Common # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL +2322..2328 ; Common # So [7] FROWN..KEYBOARD +2329 ; Common # Ps LEFT-POINTING ANGLE BRACKET +232A ; Common # Pe RIGHT-POINTING ANGLE BRACKET +232B..237B ; Common # So [81] ERASE TO THE LEFT..NOT CHECK MARK +237C ; Common # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +237D..239A ; Common # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL +239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM +23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE +23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +23E2..2426 ; Common # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO +2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH +2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP +249C..24E9 ; Common # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +24EA..24FF ; Common # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO +2500..25B6 ; Common # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE +25B7 ; Common # Sm WHITE RIGHT-POINTING TRIANGLE +25B8..25C0 ; Common # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE +25C1 ; Common # Sm WHITE LEFT-POINTING TRIANGLE +25C2..25F7 ; Common # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT +25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE +2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN +266F ; Common # Sm MUSIC SHARP SIGN +2670..2767 ; Common # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET +2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT +2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT +276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B ; Common # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C ; Common # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D ; Common # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E ; Common # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F ; Common # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770 ; Common # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771 ; Common # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772 ; Common # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2773 ; Common # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT +2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT +2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +2794..27BF ; Common # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP +27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER +27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER +27C7..27E5 ; Common # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK +27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET +27E9 ; Common # Pe MATHEMATICAL RIGHT ANGLE BRACKET +27EA ; Common # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB ; Common # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC ; Common # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED ; Common # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE ; Common # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF ; Common # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS +27F0..27FF ; Common # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW +2900..2982 ; Common # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON +2983 ; Common # Ps LEFT WHITE CURLY BRACKET +2984 ; Common # Pe RIGHT WHITE CURLY BRACKET +2985 ; Common # Ps LEFT WHITE PARENTHESIS +2986 ; Common # Pe RIGHT WHITE PARENTHESIS +2987 ; Common # Ps Z NOTATION LEFT IMAGE BRACKET +2988 ; Common # Pe Z NOTATION RIGHT IMAGE BRACKET +2989 ; Common # Ps Z NOTATION LEFT BINDING BRACKET +298A ; Common # Pe Z NOTATION RIGHT BINDING BRACKET +298B ; Common # Ps LEFT SQUARE BRACKET WITH UNDERBAR +298C ; Common # Pe RIGHT SQUARE BRACKET WITH UNDERBAR +298D ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991 ; Common # Ps LEFT ANGLE BRACKET WITH DOT +2992 ; Common # Pe RIGHT ANGLE BRACKET WITH DOT +2993 ; Common # Ps LEFT ARC LESS-THAN BRACKET +2994 ; Common # Pe RIGHT ARC GREATER-THAN BRACKET +2995 ; Common # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET +2996 ; Common # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET +2997 ; Common # Ps LEFT BLACK TORTOISE SHELL BRACKET +2998 ; Common # Pe RIGHT BLACK TORTOISE SHELL BRACKET +2999..29D7 ; Common # Sm [63] DOTTED FENCE..BLACK HOURGLASS +29D8 ; Common # Ps LEFT WIGGLY FENCE +29D9 ; Common # Pe RIGHT WIGGLY FENCE +29DA ; Common # Ps LEFT DOUBLE WIGGLY FENCE +29DB ; Common # Pe RIGHT DOUBLE WIGGLY FENCE +29DC..29FB ; Common # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS +29FC ; Common # Ps LEFT-POINTING CURVED ANGLE BRACKET +29FD ; Common # Pe RIGHT-POINTING CURVED ANGLE BRACKET +29FE..2AFF ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR +2B00..2B2F ; Common # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE +2B30..2B44 ; Common # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET +2B45..2B46 ; Common # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW +2B47..2B4C ; Common # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +2B4D..2B73 ; Common # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR +2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW +2B98..2BB9 ; Common # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX +2BBD..2BC8 ; Common # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED +2BCA..2BD2 ; Common # So [9] TOP HALF BLACK CIRCLE..GROUP MARK +2BEC..2BEF ; Common # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS +2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET +2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET +2E04 ; Common # Pi LEFT DOTTED SUBSTITUTION BRACKET +2E05 ; Common # Pf RIGHT DOTTED SUBSTITUTION BRACKET +2E06..2E08 ; Common # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER +2E09 ; Common # Pi LEFT TRANSPOSITION BRACKET +2E0A ; Common # Pf RIGHT TRANSPOSITION BRACKET +2E0B ; Common # Po RAISED SQUARE +2E0C ; Common # Pi LEFT RAISED OMISSION BRACKET +2E0D ; Common # Pf RIGHT RAISED OMISSION BRACKET +2E0E..2E16 ; Common # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE +2E17 ; Common # Pd DOUBLE OBLIQUE HYPHEN +2E18..2E19 ; Common # Po [2] INVERTED INTERROBANG..PALM BRANCH +2E1A ; Common # Pd HYPHEN WITH DIAERESIS +2E1B ; Common # Po TILDE WITH RING ABOVE +2E1C ; Common # Pi LEFT LOW PARAPHRASE BRACKET +2E1D ; Common # Pf RIGHT LOW PARAPHRASE BRACKET +2E1E..2E1F ; Common # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW +2E20 ; Common # Pi LEFT VERTICAL BAR WITH QUILL +2E21 ; Common # Pf RIGHT VERTICAL BAR WITH QUILL +2E22 ; Common # Ps TOP LEFT HALF BRACKET +2E23 ; Common # Pe TOP RIGHT HALF BRACKET +2E24 ; Common # Ps BOTTOM LEFT HALF BRACKET +2E25 ; Common # Pe BOTTOM RIGHT HALF BRACKET +2E26 ; Common # Ps LEFT SIDEWAYS U BRACKET +2E27 ; Common # Pe RIGHT SIDEWAYS U BRACKET +2E28 ; Common # Ps LEFT DOUBLE PARENTHESIS +2E29 ; Common # Pe RIGHT DOUBLE PARENTHESIS +2E2A..2E2E ; Common # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK +2E2F ; Common # Lm VERTICAL TILDE +2E30..2E39 ; Common # Po [10] RING POINT..TOP HALF SECTION SIGN +2E3A..2E3B ; Common # Pd [2] TWO-EM DASH..THREE-EM DASH +2E3C..2E3F ; Common # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM +2E40 ; Common # Pd DOUBLE HYPHEN +2E41 ; Common # Po REVERSED COMMA +2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E43..2E49 ; Common # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA +2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +3000 ; Common # Zs IDEOGRAPHIC SPACE +3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK +3004 ; Common # So JAPANESE INDUSTRIAL STANDARD SYMBOL +3006 ; Common # Lo IDEOGRAPHIC CLOSING MARK +3008 ; Common # Ps LEFT ANGLE BRACKET +3009 ; Common # Pe RIGHT ANGLE BRACKET +300A ; Common # Ps LEFT DOUBLE ANGLE BRACKET +300B ; Common # Pe RIGHT DOUBLE ANGLE BRACKET +300C ; Common # Ps LEFT CORNER BRACKET +300D ; Common # Pe RIGHT CORNER BRACKET +300E ; Common # Ps LEFT WHITE CORNER BRACKET +300F ; Common # Pe RIGHT WHITE CORNER BRACKET +3010 ; Common # Ps LEFT BLACK LENTICULAR BRACKET +3011 ; Common # Pe RIGHT BLACK LENTICULAR BRACKET +3012..3013 ; Common # So [2] POSTAL MARK..GETA MARK +3014 ; Common # Ps LEFT TORTOISE SHELL BRACKET +3015 ; Common # Pe RIGHT TORTOISE SHELL BRACKET +3016 ; Common # Ps LEFT WHITE LENTICULAR BRACKET +3017 ; Common # Pe RIGHT WHITE LENTICULAR BRACKET +3018 ; Common # Ps LEFT WHITE TORTOISE SHELL BRACKET +3019 ; Common # Pe RIGHT WHITE TORTOISE SHELL BRACKET +301A ; Common # Ps LEFT WHITE SQUARE BRACKET +301B ; Common # Pe RIGHT WHITE SQUARE BRACKET +301C ; Common # Pd WAVE DASH +301D ; Common # Ps REVERSED DOUBLE PRIME QUOTATION MARK +301E..301F ; Common # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK +3020 ; Common # So POSTAL MARK FACE +3030 ; Common # Pd WAVY DASH +3031..3035 ; Common # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3036..3037 ; Common # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +303C ; Common # Lo MASU MARK +303D ; Common # Po PART ALTERNATION MARK +303E..303F ; Common # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE +309B..309C ; Common # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +30A0 ; Common # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN +30FB ; Common # Po KATAKANA MIDDLE DOT +30FC ; Common # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK +3190..3191 ; Common # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK +3192..3195 ; Common # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3196..319F ; Common # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +31C0..31E3 ; Common # So [36] CJK STROKE T..CJK STROKE Q +3220..3229 ; Common # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3247 ; Common # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO +3248..324F ; Common # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE +3250 ; Common # So PARTNERSHIP SIGN +3251..325F ; Common # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +327F ; Common # So KOREAN STANDARD SYMBOL +3280..3289 ; Common # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +328A..32B0 ; Common # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32B1..32BF ; Common # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..32CF ; Common # So [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN +3358..33FF ; Common # So [168] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..SQUARE GAL +4DC0..4DFF ; Common # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION +A700..A716 ; Common # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717..A71F ; Common # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A720..A721 ; Common # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A788 ; Common # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A789..A78A ; Common # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A830..A835 ; Common # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS +A836..A837 ; Common # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK +A838 ; Common # Sc NORTH INDIC RUPEE MARK +A839 ; Common # So NORTH INDIC QUANTITY MARK +A92E ; Common # Po KAYAH LI SIGN CWI +A9CF ; Common # Lm JAVANESE PANGRANGKEP +AB5B ; Common # Sk MODIFIER BREVE WITH INVERTED BREVE +FD3E ; Common # Pe ORNATE LEFT PARENTHESIS +FD3F ; Common # Ps ORNATE RIGHT PARENTHESIS +FE10..FE16 ; Common # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; Common # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; Common # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31..FE32 ; Common # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; Common # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE45..FE46 ; Common # Po [2] SESAME DOT..WHITE SESAME DOT +FE47 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; Common # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; Common # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE50..FE52 ; Common # Po [3] SMALL COMMA..SMALL FULL STOP +FE54..FE57 ; Common # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE58 ; Common # Pd SMALL EM DASH +FE59 ; Common # Ps SMALL LEFT PARENTHESIS +FE5A ; Common # Pe SMALL RIGHT PARENTHESIS +FE5B ; Common # Ps SMALL LEFT CURLY BRACKET +FE5C ; Common # Pe SMALL RIGHT CURLY BRACKET +FE5D ; Common # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; Common # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE5F..FE61 ; Common # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK +FE62 ; Common # Sm SMALL PLUS SIGN +FE63 ; Common # Pd SMALL HYPHEN-MINUS +FE64..FE66 ; Common # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; Common # Po SMALL REVERSE SOLIDUS +FE69 ; Common # Sc SMALL DOLLAR SIGN +FE6A..FE6B ; Common # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT +FEFF ; Common # Cf ZERO WIDTH NO-BREAK SPACE +FF01..FF03 ; Common # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN +FF04 ; Common # Sc FULLWIDTH DOLLAR SIGN +FF05..FF07 ; Common # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE +FF08 ; Common # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; Common # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; Common # Po FULLWIDTH ASTERISK +FF0B ; Common # Sm FULLWIDTH PLUS SIGN +FF0C ; Common # Po FULLWIDTH COMMA +FF0D ; Common # Pd FULLWIDTH HYPHEN-MINUS +FF0E..FF0F ; Common # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF10..FF19 ; Common # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF1A..FF1B ; Common # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON +FF1C..FF1E ; Common # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF1F..FF20 ; Common # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF3B ; Common # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; Common # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; Common # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; Common # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; Common # Pc FULLWIDTH LOW LINE +FF40 ; Common # Sk FULLWIDTH GRAVE ACCENT +FF5B ; Common # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; Common # Sm FULLWIDTH VERTICAL LINE +FF5D ; Common # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; Common # Sm FULLWIDTH TILDE +FF5F ; Common # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; Common # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; Common # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; Common # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; Common # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64..FF65 ; Common # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +FF70 ; Common # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF9E..FF9F ; Common # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFE0..FFE1 ; Common # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE2 ; Common # Sm FULLWIDTH NOT SIGN +FFE3 ; Common # Sk FULLWIDTH MACRON +FFE4 ; Common # So FULLWIDTH BROKEN BAR +FFE5..FFE6 ; Common # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN +FFE8 ; Common # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9..FFEC ; Common # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +FFED..FFEE ; Common # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +FFF9..FFFB ; Common # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER +10100..10102 ; Common # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK +10107..10133 ; Common # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND +10137..1013F ; Common # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT +10190..1019B ; Common # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN +101D0..101FC ; Common # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND +102E1..102FB ; Common # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED +1BCA0..1BCA3 ; Common # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1D000..1D0F5 ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D100..1D126 ; Common # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 +1D129..1D164 ; Common # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D165..1D166 ; Common # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D16A..1D16C ; Common # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 +1D16D..1D172 ; Common # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN +1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH +1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING +1D360..1D371 ; Common # No [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE +1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; Common # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Common # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Common # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; Common # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Common # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Common # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; Common # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Common # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Common # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Common # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; Common # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Common # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Common # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Common # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Common # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; Common # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; Common # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; Common # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; Common # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; Common # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; Common # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; Common # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; Common # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; Common # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; Common # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; Common # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; Common # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; Common # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; Common # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; Common # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; Common # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; Common # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1F000..1F02B ; Common # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK +1F030..1F093 ; Common # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F0A0..1F0AE ; Common # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES +1F0B1..1F0BF ; Common # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER +1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER +1F0D1..1F0F5 ; Common # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 +1F100..1F10C ; Common # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO +1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ +1F130..1F16B ; Common # So [60] SQUARED LATIN CAPITAL LETTER A..RAISED MD SIGN +1F170..1F1AC ; Common # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD +1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z +1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA +1F210..1F23B ; Common # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D +1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT +1F260..1F265 ; Common # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI +1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA +1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +1F400..1F6D4 ; Common # So [725] RAT..PAGODA +1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6F0..1F6F8 ; Common # So [9] SATELLITE..FLYING SAUCER +1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE +1F780..1F7D4 ; Common # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR +1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F810..1F847 ; Common # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW +1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW +1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW +1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS +1F900..1F90B ; Common # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT +1F910..1F93E ; Common # So [47] ZIPPER-MOUTH FACE..HANDBALL +1F940..1F94C ; Common # So [13] WILTED FLOWER..CURLING STONE +1F950..1F96B ; Common # So [28] CROISSANT..CANNED FOOD +1F980..1F997 ; Common # So [24] CRAB..CRICKET +1F9C0 ; Common # So CHEESE WEDGE +1F9D0..1F9E6 ; Common # So [23] FACE WITH MONOCLE..SOCKS +E0001 ; Common # Cf LANGUAGE TAG +E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG + +# Total code points: 7363 + +# ================================================ + +0041..005A ; Latin # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; Latin # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; Latin # Lo FEMININE ORDINAL INDICATOR +00BA ; Latin # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; Latin # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; Latin # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; Latin # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; Latin # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; Latin # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; Latin # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294 ; Latin # Lo LATIN LETTER GLOTTAL STOP +0295..02AF ; Latin # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02B8 ; Latin # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y +02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN +1D2C..1D5C ; Latin # Lm [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN +1D62..1D65 ; Latin # Lm [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V +1D6B..1D77 ; Latin # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D79..1D9A ; Latin # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBE ; Latin # Lm [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH +1E00..1EFF ; Latin # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP +2071 ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; Latin # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; Latin # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN +2132 ; Latin # L& TURNED CAPITAL F +214E ; Latin # L& TURNED SMALL F +2160..2182 ; Latin # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; Latin # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; Latin # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2C60..2C7B ; Latin # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; Latin # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2C7F ; Latin # L& [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL +A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; Latin # Lm MODIFIER LETTER US +A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7AE ; Latin # L& [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0..A7B7 ; Latin # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA +A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M +AB30..AB5A ; Latin # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; Latin # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB64 ; Latin # L& [5] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER INVERTED ALPHA +FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z + +# Total code points: 1350 + +# ================================================ + +0370..0373 ; Greek # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0375 ; Greek # Sk GREEK LOWER NUMERAL SIGN +0376..0377 ; Greek # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; Greek # Lm GREEK YPOGEGRAMMENI +037B..037D ; Greek # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; Greek # L& GREEK CAPITAL LETTER YOT +0384 ; Greek # Sk GREEK TONOS +0386 ; Greek # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Greek # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Greek # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; Greek # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03E1 ; Greek # L& [63] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER SAMPI +03F0..03F5 ; Greek # L& [6] GREEK KAPPA SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F6 ; Greek # Sm GREEK REVERSED LUNATE EPSILON SYMBOL +03F7..03FF ; Greek # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +1D26..1D2A ; Greek # L& [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI +1D5D..1D61 ; Greek # Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI +1D66..1D6A ; Greek # Lm [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI +1DBF ; Greek # Lm MODIFIER LETTER SMALL THETA +1F00..1F15 ; Greek # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Greek # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Greek # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Greek # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Greek # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Greek # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Greek # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Greek # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD ; Greek # Sk GREEK KORONIS +1FBE ; Greek # L& GREEK PROSGEGRAMMENI +1FBF..1FC1 ; Greek # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; Greek # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Greek # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; Greek # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; Greek # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Greek # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; Greek # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; Greek # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEF ; Greek # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF2..1FF4 ; Greek # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Greek # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD..1FFE ; Greek # Sk [2] GREEK OXIA..GREEK DASIA +2126 ; Greek # L& OHM SIGN +AB65 ; Greek # L& GREEK LETTER SMALL CAPITAL OMEGA +10140..10174 ; Greek # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10175..10178 ; Greek # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN +10179..10189 ; Greek # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN +1018A..1018B ; Greek # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN +1018C..1018E ; Greek # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN +101A0 ; Greek # So GREEK SYMBOL TAU RHO +1D200..1D241 ; Greek # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D242..1D244 ; Greek # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1D245 ; Greek # So GREEK MUSICAL LEIMMA + +# Total code points: 518 + +# ================================================ + +0400..0481 ; Cyrillic # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA +0482 ; Cyrillic # So CYRILLIC THOUSANDS SIGN +0483..0484 ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PALATALIZATION +0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE +0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +048A..052F ; Cyrillic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +1C80..1C88 ; Cyrillic # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL +1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN +2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +A640..A66D ; Cyrillic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O +A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET +A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A673 ; Cyrillic # Po SLAVONIC ASTERISK +A674..A67D ; Cyrillic # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A67E ; Cyrillic # Po CYRILLIC KAVYKA +A67F ; Cyrillic # Lm CYRILLIC PAYEROK +A680..A69B ; Cyrillic # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; Cyrillic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A69E..A69F ; Cyrillic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +FE2E..FE2F ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF + +# Total code points: 443 + +# ================================================ + +0531..0556 ; Armenian # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK +0561..0587 ; Armenian # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN +058A ; Armenian # Pd ARMENIAN HYPHEN +058D..058E ; Armenian # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN +058F ; Armenian # Sc ARMENIAN DRAM SIGN +FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH + +# Total code points: 93 + +# ================================================ + +0591..05BD ; Hebrew # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BE ; Hebrew # Pd HEBREW PUNCTUATION MAQAF +05BF ; Hebrew # Mn HEBREW POINT RAFE +05C0 ; Hebrew # Po HEBREW PUNCTUATION PASEQ +05C1..05C2 ; Hebrew # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C3 ; Hebrew # Po HEBREW PUNCTUATION SOF PASUQ +05C4..05C5 ; Hebrew # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C6 ; Hebrew # Po HEBREW PUNCTUATION NUN HAFUKHA +05C7 ; Hebrew # Mn HEBREW POINT QAMATS QATAN +05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05F0..05F2 ; Hebrew # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD +05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM +FB1D ; Hebrew # Lo HEBREW LETTER YOD WITH HIRIQ +FB1E ; Hebrew # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FB1F..FB28 ; Hebrew # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB29 ; Hebrew # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A..FB36 ; Hebrew # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Hebrew # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Hebrew # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Hebrew # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED + +# Total code points: 133 + +# ================================================ + +0600..0604 ; Arabic # Cf [5] ARABIC NUMBER SIGN..ARABIC SIGN SAMVAT +0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY +0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN +060B ; Arabic # Sc AFGHANI SIGN +060D ; Arabic # Po ARABIC DATE SEPARATOR +060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA +0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +061C ; Arabic # Cf ARABIC LETTER MARK +061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK +0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +0656..065F ; Arabic # Mn [10] ARABIC SUBSCRIPT ALEF..ARABIC WAVY HAMZA BELOW +0660..0669 ; Arabic # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR +066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D4 ; Arabic # Po ARABIC FULL STOP +06D5 ; Arabic # Lo ARABIC LETTER AE +06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DE ; Arabic # So ARABIC START OF RUB EL HIZB +06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06E9 ; Arabic # So ARABIC PLACE OF SAJDAH +06EA..06ED ; Arabic # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +06EE..06EF ; Arabic # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06F0..06F9 ; Arabic # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +06FA..06FC ; Arabic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN +06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V +0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE +08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW +08B6..08BD ; Arabic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON +08D4..08E1 ; Arabic # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA +08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA +FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; Arabic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; Arabic # Sc RIAL SIGN +FDFD ; Arabic # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS +1EE00..1EE03 ; Arabic # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; Arabic # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; Arabic # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; Arabic # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; Arabic # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; Arabic # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; Arabic # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; Arabic # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; Arabic # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; Arabic # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; Arabic # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; Arabic # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; Arabic # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; Arabic # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; Arabic # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; Arabic # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; Arabic # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; Arabic # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; Arabic # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; Arabic # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; Arabic # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; Arabic # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; Arabic # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; Arabic # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; Arabic # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; Arabic # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL + +# Total code points: 1280 + +# ================================================ + +0700..070D ; Syriac # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS +070F ; Syriac # Cf SYRIAC ABBREVIATION MARK +0710 ; Syriac # Lo SYRIAC LETTER ALAPH +0711 ; Syriac # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0712..072F ; Syriac # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +0730..074A ; Syriac # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +074D..074F ; Syriac # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE +0860..086A ; Syriac # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA + +# Total code points: 88 + +# ================================================ + +0780..07A5 ; Thaana # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU +07A6..07B0 ; Thaana # Mn [11] THAANA ABAFILI..THAANA SUKUN +07B1 ; Thaana # Lo THAANA LETTER NAA + +# Total code points: 50 + +# ================================================ + +0900..0902 ; Devanagari # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA +0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093A ; Devanagari # Mn DEVANAGARI VOWEL SIGN OE +093B ; Devanagari # Mc DEVANAGARI VOWEL SIGN OOE +093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA +093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA +094E..094F ; Devanagari # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0950 ; Devanagari # Lo DEVANAGARI OM +0953..0957 ; Devanagari # Mn [5] DEVANAGARI GRAVE ACCENT..DEVANAGARI VOWEL SIGN UUE +0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +0970 ; Devanagari # Po DEVANAGARI ABBREVIATION SIGN +0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..097F ; Devanagari # Lo [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA +A8E0..A8F1 ; Devanagari # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET +A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE +A8FC ; Devanagari # Po DEVANAGARI SIGN SIDDHAM +A8FD ; Devanagari # Lo DEVANAGARI JAIN OM + +# Total code points: 154 + +# ================================================ + +0980 ; Bengali # Lo BENGALI ANJI +0981 ; Bengali # Mn BENGALI SIGN CANDRABINDU +0982..0983 ; Bengali # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; Bengali # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; Bengali # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; Bengali # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; Bengali # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; Bengali # Lo BENGALI LETTER LA +09B6..09B9 ; Bengali # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BC ; Bengali # Mn BENGALI SIGN NUKTA +09BD ; Bengali # Lo BENGALI SIGN AVAGRAHA +09BE..09C0 ; Bengali # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C1..09C4 ; Bengali # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09C7..09C8 ; Bengali # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; Bengali # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CD ; Bengali # Mn BENGALI SIGN VIRAMA +09CE ; Bengali # Lo BENGALI LETTER KHANDA TA +09D7 ; Bengali # Mc BENGALI AU LENGTH MARK +09DC..09DD ; Bengali # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; Bengali # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E2..09E3 ; Bengali # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09E6..09EF ; Bengali # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +09F0..09F1 ; Bengali # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09F2..09F3 ; Bengali # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN +09F4..09F9 ; Bengali # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN +09FA ; Bengali # So BENGALI ISSHAR +09FB ; Bengali # Sc BENGALI GANDA MARK +09FC ; Bengali # Lo BENGALI LETTER VEDIC ANUSVARA +09FD ; Bengali # Po BENGALI ABBREVIATION SIGN + +# Total code points: 95 + +# ================================================ + +0A01..0A02 ; Gurmukhi # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A03 ; Gurmukhi # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; Gurmukhi # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; Gurmukhi # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; Gurmukhi # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; Gurmukhi # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; Gurmukhi # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; Gurmukhi # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; Gurmukhi # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3C ; Gurmukhi # Mn GURMUKHI SIGN NUKTA +0A3E..0A40 ; Gurmukhi # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A41..0A42 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; Gurmukhi # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; Gurmukhi # Mn GURMUKHI SIGN UDAAT +0A59..0A5C ; Gurmukhi # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; Gurmukhi # Lo GURMUKHI LETTER FA +0A66..0A6F ; Gurmukhi # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0A70..0A71 ; Gurmukhi # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A72..0A74 ; Gurmukhi # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A75 ; Gurmukhi # Mn GURMUKHI SIGN YAKASH + +# Total code points: 79 + +# ================================================ + +0A81..0A82 ; Gujarati # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0A83 ; Gujarati # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; Gujarati # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; Gujarati # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; Gujarati # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; Gujarati # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; Gujarati # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; Gujarati # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABC ; Gujarati # Mn GUJARATI SIGN NUKTA +0ABD ; Gujarati # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; Gujarati # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC1..0AC5 ; Gujarati # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AC9 ; Gujarati # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; Gujarati # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0ACD ; Gujarati # Mn GUJARATI SIGN VIRAMA +0AD0 ; Gujarati # Lo GUJARATI OM +0AE0..0AE1 ; Gujarati # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE2..0AE3 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0AF0 ; Gujarati # Po GUJARATI ABBREVIATION SIGN +0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN +0AF9 ; Gujarati # Lo GUJARATI LETTER ZHA +0AFA..0AFF ; Gujarati # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE + +# Total code points: 91 + +# ================================================ + +0B01 ; Oriya # Mn ORIYA SIGN CANDRABINDU +0B02..0B03 ; Oriya # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; Oriya # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; Oriya # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; Oriya # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; Oriya # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; Oriya # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; Oriya # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3C ; Oriya # Mn ORIYA SIGN NUKTA +0B3D ; Oriya # Lo ORIYA SIGN AVAGRAHA +0B3E ; Oriya # Mc ORIYA VOWEL SIGN AA +0B3F ; Oriya # Mn ORIYA VOWEL SIGN I +0B40 ; Oriya # Mc ORIYA VOWEL SIGN II +0B41..0B44 ; Oriya # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B47..0B48 ; Oriya # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; Oriya # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B4D ; Oriya # Mn ORIYA SIGN VIRAMA +0B56 ; Oriya # Mn ORIYA AI LENGTH MARK +0B57 ; Oriya # Mc ORIYA AU LENGTH MARK +0B5C..0B5D ; Oriya # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; Oriya # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B62..0B63 ; Oriya # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0B70 ; Oriya # So ORIYA ISSHAR +0B71 ; Oriya # Lo ORIYA LETTER WA +0B72..0B77 ; Oriya # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS + +# Total code points: 90 + +# ================================================ + +0B82 ; Tamil # Mn TAMIL SIGN ANUSVARA +0B83 ; Tamil # Lo TAMIL SIGN VISARGA +0B85..0B8A ; Tamil # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; Tamil # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; Tamil # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; Tamil # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; Tamil # Lo TAMIL LETTER JA +0B9E..0B9F ; Tamil # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; Tamil # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; Tamil # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; Tamil # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBE..0BBF ; Tamil # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC0 ; Tamil # Mn TAMIL VOWEL SIGN II +0BC1..0BC2 ; Tamil # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; Tamil # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; Tamil # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BCD ; Tamil # Mn TAMIL SIGN VIRAMA +0BD0 ; Tamil # Lo TAMIL OM +0BD7 ; Tamil # Mc TAMIL AU LENGTH MARK +0BE6..0BEF ; Tamil # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0BF0..0BF2 ; Tamil # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND +0BF3..0BF8 ; Tamil # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN +0BF9 ; Tamil # Sc TAMIL RUPEE SIGN +0BFA ; Tamil # So TAMIL NUMBER SIGN + +# Total code points: 72 + +# ================================================ + +0C00 ; Telugu # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C01..0C03 ; Telugu # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C05..0C0C ; Telugu # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; Telugu # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3D ; Telugu # Lo TELUGU SIGN AVAGRAHA +0C3E..0C40 ; Telugu # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C41..0C44 ; Telugu # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C46..0C48 ; Telugu # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C58..0C5A ; Telugu # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C62..0C63 ; Telugu # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR +0C7F ; Telugu # So TELUGU SIGN TUUMU + +# Total code points: 96 + +# ================================================ + +0C80 ; Kannada # Lo KANNADA SIGN SPACING CANDRABINDU +0C81 ; Kannada # Mn KANNADA SIGN CANDRABINDU +0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; Kannada # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; Kannada # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; Kannada # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; Kannada # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBC ; Kannada # Mn KANNADA SIGN NUKTA +0CBD ; Kannada # Lo KANNADA SIGN AVAGRAHA +0CBE ; Kannada # Mc KANNADA VOWEL SIGN AA +0CBF ; Kannada # Mn KANNADA VOWEL SIGN I +0CC0..0CC4 ; Kannada # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC6 ; Kannada # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; Kannada # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Kannada # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; Kannada # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; Kannada # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CDE ; Kannada # Lo KANNADA LETTER FA +0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA + +# Total code points: 88 + +# ================================================ + +0D00..0D01 ; Malayalam # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3B..0D3C ; Malayalam # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA +0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA +0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH +0D4F ; Malayalam # So MALAYALAM SIGN PARA +0D54..0D56 ; Malayalam # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK +0D58..0D5E ; Malayalam # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH +0D5F..0D61 ; Malayalam # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0D70..0D78 ; Malayalam # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS +0D79 ; Malayalam # So MALAYALAM DATE MARK +0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K + +# Total code points: 117 + +# ================================================ + +0D82..0D83 ; Sinhala # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; Sinhala # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; Sinhala # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; Sinhala # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; Sinhala # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; Sinhala # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DCA ; Sinhala # Mn SINHALA SIGN AL-LAKUNA +0DCF..0DD1 ; Sinhala # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD2..0DD4 ; Sinhala # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Sinhala # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD8..0DDF ; Sinhala # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DE6..0DEF ; Sinhala # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE +0DF2..0DF3 ; Sinhala # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0DF4 ; Sinhala # Po SINHALA PUNCTUATION KUNDDALIYA +111E1..111F4 ; Sinhala # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND + +# Total code points: 110 + +# ================================================ + +0E01..0E30 ; Thai # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E31 ; Thai # Mn THAI CHARACTER MAI HAN-AKAT +0E32..0E33 ; Thai # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E34..0E3A ; Thai # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E40..0E45 ; Thai # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; Thai # Lm THAI CHARACTER MAIYAMOK +0E47..0E4E ; Thai # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0E4F ; Thai # Po THAI CHARACTER FONGMAN +0E50..0E59 ; Thai # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE +0E5A..0E5B ; Thai # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT + +# Total code points: 86 + +# ================================================ + +0E81..0E82 ; Lao # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; Lao # Lo LAO LETTER KHO TAM +0E87..0E88 ; Lao # Lo [2] LAO LETTER NGO..LAO LETTER CO +0E8A ; Lao # Lo LAO LETTER SO TAM +0E8D ; Lao # Lo LAO LETTER NYO +0E94..0E97 ; Lao # Lo [4] LAO LETTER DO..LAO LETTER THO TAM +0E99..0E9F ; Lao # Lo [7] LAO LETTER NO..LAO LETTER FO SUNG +0EA1..0EA3 ; Lao # Lo [3] LAO LETTER MO..LAO LETTER LO LING +0EA5 ; Lao # Lo LAO LETTER LO LOOT +0EA7 ; Lao # Lo LAO LETTER WO +0EAA..0EAB ; Lao # Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG +0EAD..0EB0 ; Lao # Lo [4] LAO LETTER O..LAO VOWEL SIGN A +0EB1 ; Lao # Mn LAO VOWEL SIGN MAI KAN +0EB2..0EB3 ; Lao # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EB4..0EB9 ; Lao # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU +0EBB..0EBC ; Lao # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO +0EBD ; Lao # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; Lao # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; Lao # Lm LAO KO LA +0EC8..0ECD ; Lao # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA +0ED0..0ED9 ; Lao # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE +0EDC..0EDF ; Lao # Lo [4] LAO HO NO..LAO LETTER KHMU NYO + +# Total code points: 67 + +# ================================================ + +0F00 ; Tibetan # Lo TIBETAN SYLLABLE OM +0F01..0F03 ; Tibetan # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA +0F04..0F12 ; Tibetan # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD +0F13 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN +0F14 ; Tibetan # Po TIBETAN MARK GTER TSHEG +0F15..0F17 ; Tibetan # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS +0F18..0F19 ; Tibetan # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F1A..0F1F ; Tibetan # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG +0F20..0F29 ; Tibetan # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +0F2A..0F33 ; Tibetan # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO +0F34 ; Tibetan # So TIBETAN MARK BSDUS RTAGS +0F35 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F36 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN +0F37 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F38 ; Tibetan # So TIBETAN MARK CHE MGO +0F39 ; Tibetan # Mn TIBETAN MARK TSA -PHRU +0F3A ; Tibetan # Ps TIBETAN MARK GUG RTAGS GYON +0F3B ; Tibetan # Pe TIBETAN MARK GUG RTAGS GYAS +0F3C ; Tibetan # Ps TIBETAN MARK ANG KHANG GYON +0F3D ; Tibetan # Pe TIBETAN MARK ANG KHANG GYAS +0F3E..0F3F ; Tibetan # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F40..0F47 ; Tibetan # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; Tibetan # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F71..0F7E ; Tibetan # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F7F ; Tibetan # Mc TIBETAN SIGN RNAM BCAD +0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F85 ; Tibetan # Po TIBETAN MARK PALUTA +0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F88..0F8C ; Tibetan # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +0F8D..0F97 ; Tibetan # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE +0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN +0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCE..0FCF ; Tibetan # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM +0FD0..0FD4 ; Tibetan # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA +0FD9..0FDA ; Tibetan # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS + +# Total code points: 207 + +# ================================================ + +1000..102A ; Myanmar # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +102B..102C ; Myanmar # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +102D..1030 ; Myanmar # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1031 ; Myanmar # Mc MYANMAR VOWEL SIGN E +1032..1037 ; Myanmar # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1038 ; Myanmar # Mc MYANMAR SIGN VISARGA +1039..103A ; Myanmar # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103B..103C ; Myanmar # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +103D..103E ; Myanmar # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +103F ; Myanmar # Lo MYANMAR LETTER GREAT SA +1040..1049 ; Myanmar # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +104A..104F ; Myanmar # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE +1050..1055 ; Myanmar # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; Myanmar # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1058..1059 ; Myanmar # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105A..105D ; Myanmar # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +105E..1060 ; Myanmar # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1061 ; Myanmar # Lo MYANMAR LETTER SGAW KAREN SHA +1062..1064 ; Myanmar # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1065..1066 ; Myanmar # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +1067..106D ; Myanmar # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +106E..1070 ; Myanmar # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1071..1074 ; Myanmar # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1075..1081 ; Myanmar # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +1082 ; Myanmar # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1083..1084 ; Myanmar # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1085..1086 ; Myanmar # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +1087..108C ; Myanmar # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108D ; Myanmar # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +108E ; Myanmar # Lo MYANMAR LETTER RUMAI PALAUNG FA +108F ; Myanmar # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 +1090..1099 ; Myanmar # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE +109A..109C ; Myanmar # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +109D ; Myanmar # Mn MYANMAR VOWEL SIGN AITON AI +109E..109F ; Myanmar # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION +A9E0..A9E4 ; Myanmar # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E5 ; Myanmar # Mn MYANMAR SIGN SHAN SAW +A9E6 ; Myanmar # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; Myanmar # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9F0..A9F9 ; Myanmar # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE +A9FA..A9FE ; Myanmar # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA60..AA6F ; Myanmar # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; Myanmar # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; Myanmar # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA77..AA79 ; Myanmar # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO +AA7A ; Myanmar # Lo MYANMAR LETTER AITON RA +AA7B ; Myanmar # Mc MYANMAR SIGN PAO KAREN TONE +AA7C ; Myanmar # Mn MYANMAR SIGN TAI LAING TONE-2 +AA7D ; Myanmar # Mc MYANMAR SIGN TAI LAING TONE-5 +AA7E..AA7F ; Myanmar # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA + +# Total code points: 223 + +# ================================================ + +10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Georgian # L& GEORGIAN CAPITAL LETTER YN +10CD ; Georgian # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; Georgian # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; Georgian # Lo [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Georgian # L& GEORGIAN SMALL LETTER YN +2D2D ; Georgian # L& GEORGIAN SMALL LETTER AEN + +# Total code points: 127 + +# ================================================ + +1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN +302E..302F ; Hangul # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U +A960..A97C ; Hangul # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +AC00..D7A3 ; Hangul # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; Hangul # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; Hangul # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +FFA0..FFBE ; Hangul # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I + +# Total code points: 11739 + +# ================================================ + +1200..1248 ; Ethiopic # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA +124A..124D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; Ethiopic # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; Ethiopic # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; Ethiopic # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; Ethiopic # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +135D..135F ; Ethiopic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1360..1368 ; Ethiopic # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR +1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND +1380..138F ; Ethiopic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +1390..1399 ; Ethiopic # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT +2D80..2D96 ; Ethiopic # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +AB01..AB06 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO + +# Total code points: 495 + +# ================================================ + +13A0..13F5 ; Cherokee # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; Cherokee # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA + +# Total code points: 172 + +# ================================================ + +1400 ; Canadian_Aboriginal # Pd CANADIAN SYLLABICS HYPHEN +1401..166C ; Canadian_Aboriginal # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166D..166E ; Canadian_Aboriginal # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP +166F..167F ; Canadian_Aboriginal # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +18B0..18F5 ; Canadian_Aboriginal # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S + +# Total code points: 710 + +# ================================================ + +1680 ; Ogham # Zs OGHAM SPACE MARK +1681..169A ; Ogham # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +169B ; Ogham # Ps OGHAM FEATHER MARK +169C ; Ogham # Pe OGHAM REVERSED FEATHER MARK + +# Total code points: 29 + +# ================================================ + +16A0..16EA ; Runic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EE..16F0 ; Runic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; Runic # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC + +# Total code points: 86 + +# ================================================ + +1780..17B3 ; Khmer # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B4..17B5 ; Khmer # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B6 ; Khmer # Mc KHMER VOWEL SIGN AA +17B7..17BD ; Khmer # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17BE..17C5 ; Khmer # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C6 ; Khmer # Mn KHMER SIGN NIKAHIT +17C7..17C8 ; Khmer # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17C9..17D3 ; Khmer # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17D4..17D6 ; Khmer # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH +17D7 ; Khmer # Lm KHMER SIGN LEK TOO +17D8..17DA ; Khmer # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT +17DB ; Khmer # Sc KHMER CURRENCY SYMBOL RIEL +17DC ; Khmer # Lo KHMER SIGN AVAKRAHASANYA +17DD ; Khmer # Mn KHMER SIGN ATTHACAN +17E0..17E9 ; Khmer # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +17F0..17F9 ; Khmer # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON +19E0..19FF ; Khmer # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC + +# Total code points: 146 + +# ================================================ + +1800..1801 ; Mongolian # Po [2] MONGOLIAN BIRGA..MONGOLIAN ELLIPSIS +1804 ; Mongolian # Po MONGOLIAN COLON +1806 ; Mongolian # Pd MONGOLIAN TODO SOFT HYPHEN +1807..180A ; Mongolian # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU +180B..180D ; Mongolian # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180E ; Mongolian # Cf MONGOLIAN VOWEL SEPARATOR +1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1877 ; Mongolian # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA +1880..1884 ; Mongolian # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; Mongolian # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; Mongolian # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18A9 ; Mongolian # Mn MONGOLIAN LETTER ALI GALI DAGALGA +18AA ; Mongolian # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +11660..1166C ; Mongolian # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT + +# Total code points: 166 + +# ================================================ + +3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI +1B001..1B11E ; Hiragana # Lo [286] HIRAGANA LETTER ARCHAIC YE..HENTAIGANA LETTER N-MU-MO-2 +1F200 ; Hiragana # So SQUARE HIRAGANA HOKA + +# Total code points: 376 + +# ================================================ + +30A1..30FA ; Katakana # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FD..30FE ; Katakana # Lm [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK +30FF ; Katakana # Lo KATAKANA DIGRAPH KOTO +31F0..31FF ; Katakana # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +32D0..32FE ; Katakana # So [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO +3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO +FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +1B000 ; Katakana # Lo KATAKANA LETTER ARCHAIC E + +# Total code points: 300 + +# ================================================ + +02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK +3105..312E ; Bopomofo # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE +31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY + +# Total code points: 71 + +# ================================================ + +2E80..2E99 ; Han # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP +2E9B..2EF3 ; Han # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +3005 ; Han # Lm IDEOGRAPHIC ITERATION MARK +3007 ; Han # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; Han # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 +4E00..9FEA ; Han # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA +F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 +2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D + +# Total code points: 89228 + +# ================================================ + +A000..A014 ; Yi # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +A015 ; Yi # Lm YI SYLLABLE WU +A016..A48C ; Yi # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE + +# Total code points: 1220 + +# ================================================ + +10300..1031F ; Old_Italic # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +10320..10323 ; Old_Italic # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +1032D..1032F ; Old_Italic # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE + +# Total code points: 39 + +# ================================================ + +10330..10340 ; Gothic # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA +10341 ; Gothic # Nl GOTHIC LETTER NINETY +10342..10349 ; Gothic # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; Gothic # Nl GOTHIC LETTER NINE HUNDRED + +# Total code points: 27 + +# ================================================ + +10400..1044F ; Deseret # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW + +# Total code points: 80 + +# ================================================ + +0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0485..0486 ; Inherited # Mn [2] COMBINING CYRILLIC DASIA PNEUMATA..COMBINING CYRILLIC PSILI PNEUMATA +064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW +0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF +0951..0952 ; Inherited # Mn [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA +1AB0..1ABD ; Inherited # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; Inherited # Me COMBINING PARENTHESES OVERLAY +1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; Inherited # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; Inherited # Mn VEDIC SIGN TIRYAK +1CF4 ; Inherited # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; Inherited # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DF9 ; Inherited # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW +1DFB..1DFF ; Inherited # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER +20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; Inherited # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +302A..302D ; Inherited # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CONJOINING MACRON BELOW +101FD ; Inherited # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; Inherited # Mn COPTIC EPACT THOUSANDS MARK +1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 568 + +# ================================================ + +1700..170C ; Tagalog # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA +170E..1711 ; Tagalog # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1712..1714 ; Tagalog # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA + +# Total code points: 20 + +# ================================================ + +1720..1731 ; Hanunoo # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1732..1734 ; Hanunoo # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD + +# Total code points: 21 + +# ================================================ + +1740..1751 ; Buhid # Lo [18] BUHID LETTER A..BUHID LETTER HA +1752..1753 ; Buhid # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U + +# Total code points: 20 + +# ================================================ + +1760..176C ; Tagbanwa # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; Tagbanwa # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1772..1773 ; Tagbanwa # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U + +# Total code points: 18 + +# ================================================ + +1900..191E ; Limbu # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1920..1922 ; Limbu # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1923..1926 ; Limbu # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1927..1928 ; Limbu # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1929..192B ; Limbu # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; Limbu # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1932 ; Limbu # Mn LIMBU SMALL LETTER ANUSVARA +1933..1938 ; Limbu # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1939..193B ; Limbu # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1940 ; Limbu # So LIMBU SIGN LOO +1944..1945 ; Limbu # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK +1946..194F ; Limbu # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE + +# Total code points: 68 + +# ================================================ + +1950..196D ; Tai_Le # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; Tai_Le # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 + +# Total code points: 35 + +# ================================================ + +10000..1000B ; Linear_B # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; Linear_B # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; Linear_B # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; Linear_B # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; Linear_B # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; Linear_B # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; Linear_B # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 + +# Total code points: 211 + +# ================================================ + +10380..1039D ; Ugaritic # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +1039F ; Ugaritic # Po UGARITIC WORD DIVIDER + +# Total code points: 31 + +# ================================================ + +10450..1047F ; Shavian # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW + +# Total code points: 48 + +# ================================================ + +10480..1049D ; Osmanya # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO +104A0..104A9 ; Osmanya # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE + +# Total code points: 40 + +# ================================================ + +10800..10805 ; Cypriot # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; Cypriot # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; Cypriot # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; Cypriot # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; Cypriot # Lo CYPRIOT SYLLABLE ZA +1083F ; Cypriot # Lo CYPRIOT SYLLABLE ZO + +# Total code points: 55 + +# ================================================ + +2800..28FF ; Braille # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 + +# Total code points: 256 + +# ================================================ + +1A00..1A16 ; Buginese # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A17..1A18 ; Buginese # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A19..1A1A ; Buginese # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A1B ; Buginese # Mn BUGINESE VOWEL SIGN AE +1A1E..1A1F ; Buginese # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION + +# Total code points: 30 + +# ================================================ + +03E2..03EF ; Coptic # L& [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI +2C80..2CE4 ; Coptic # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI +2CE5..2CEA ; Coptic # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA +2CEB..2CEE ; Coptic # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CEF..2CF1 ; Coptic # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2CF2..2CF3 ; Coptic # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2CF9..2CFC ; Coptic # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER +2CFD ; Coptic # No COPTIC FRACTION ONE HALF +2CFE..2CFF ; Coptic # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER + +# Total code points: 137 + +# ================================================ + +1980..19AB ; New_Tai_Lue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; New_Tai_Lue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +19DA ; New_Tai_Lue # No NEW TAI LUE THAM DIGIT ONE +19DE..19DF ; New_Tai_Lue # So [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV + +# Total code points: 83 + +# ================================================ + +2C00..2C2E ; Glagolitic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C30..2C5E ; Glagolitic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +1E000..1E006 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Glagolitic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Glagolitic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Glagolitic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA + +# Total code points: 132 + +# ================================================ + +2D30..2D67 ; Tifinagh # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D70 ; Tifinagh # Po TIFINAGH SEPARATOR MARK +2D7F ; Tifinagh # Mn TIFINAGH CONSONANT JOINER + +# Total code points: 59 + +# ================================================ + +A800..A801 ; Syloti_Nagri # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I +A802 ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN DVISVARA +A803..A805 ; Syloti_Nagri # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A806 ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN HASANTA +A807..A80A ; Syloti_Nagri # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80B ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN ANUSVARA +A80C..A822 ; Syloti_Nagri # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; Syloti_Nagri # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A825..A826 ; Syloti_Nagri # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A827 ; Syloti_Nagri # Mc SYLOTI NAGRI VOWEL SIGN OO +A828..A82B ; Syloti_Nagri # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 + +# Total code points: 44 + +# ================================================ + +103A0..103C3 ; Old_Persian # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; Old_Persian # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D0 ; Old_Persian # Po OLD PERSIAN WORD DIVIDER +103D1..103D5 ; Old_Persian # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED + +# Total code points: 50 + +# ================================================ + +10A00 ; Kharoshthi # Lo KHAROSHTHI LETTER A +10A01..10A03 ; Kharoshthi # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Kharoshthi # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Kharoshthi # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A10..10A13 ; Kharoshthi # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; Kharoshthi # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A33 ; Kharoshthi # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA +10A38..10A3A ; Kharoshthi # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; Kharoshthi # Mn KHAROSHTHI VIRAMA +10A40..10A47 ; Kharoshthi # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND +10A50..10A58 ; Kharoshthi # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES + +# Total code points: 65 + +# ================================================ + +1B00..1B03 ; Balinese # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B04 ; Balinese # Mc BALINESE SIGN BISAH +1B05..1B33 ; Balinese # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B34 ; Balinese # Mn BALINESE SIGN REREKAN +1B35 ; Balinese # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; Balinese # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; Balinese # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; Balinese # Mn BALINESE VOWEL SIGN LA LENGA +1B3D..1B41 ; Balinese # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B42 ; Balinese # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; Balinese # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B45..1B4B ; Balinese # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B50..1B59 ; Balinese # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B5A..1B60 ; Balinese # Po [7] BALINESE PANTI..BALINESE PAMENENG +1B61..1B6A ; Balinese # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE +1B6B..1B73 ; Balinese # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B74..1B7C ; Balinese # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING + +# Total code points: 121 + +# ================================================ + +12000..12399 ; Cuneiform # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; Cuneiform # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12470..12474 ; Cuneiform # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON +12480..12543 ; Cuneiform # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU + +# Total code points: 1234 + +# ================================================ + +10900..10915 ; Phoenician # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10916..1091B ; Phoenician # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE +1091F ; Phoenician # Po PHOENICIAN WORD SEPARATOR + +# Total code points: 29 + +# ================================================ + +A840..A873 ; Phags_Pa # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A874..A877 ; Phags_Pa # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD + +# Total code points: 56 + +# ================================================ + +07C0..07C9 ; Nko # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; Nko # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07EB..07F3 ; Nko # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07F4..07F5 ; Nko # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07F6 ; Nko # So NKO SYMBOL OO DENNEN +07F7..07F9 ; Nko # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK +07FA ; Nko # Lm NKO LAJANYALAN + +# Total code points: 59 + +# ================================================ + +1B80..1B81 ; Sundanese # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1B82 ; Sundanese # Mc SUNDANESE SIGN PANGWISAD +1B83..1BA0 ; Sundanese # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BA1 ; Sundanese # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA2..1BA5 ; Sundanese # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA6..1BA7 ; Sundanese # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BA8..1BA9 ; Sundanese # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; Sundanese # Mc SUNDANESE SIGN PAMAAEH +1BAB..1BAD ; Sundanese # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BAE..1BAF ; Sundanese # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BB0..1BB9 ; Sundanese # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE +1BBA..1BBF ; Sundanese # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M +1CC0..1CC7 ; Sundanese # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA + +# Total code points: 72 + +# ================================================ + +1C00..1C23 ; Lepcha # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C24..1C2B ; Lepcha # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C2C..1C33 ; Lepcha # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C34..1C35 ; Lepcha # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1C36..1C37 ; Lepcha # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1C3B..1C3F ; Lepcha # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK +1C40..1C49 ; Lepcha # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE +1C4D..1C4F ; Lepcha # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA + +# Total code points: 74 + +# ================================================ + +1C50..1C59 ; Ol_Chiki # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE +1C5A..1C77 ; Ol_Chiki # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; Ol_Chiki # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C7E..1C7F ; Ol_Chiki # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD + +# Total code points: 48 + +# ================================================ + +A500..A60B ; Vai # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; Vai # Lm VAI SYLLABLE LENGTHENER +A60D..A60F ; Vai # Po [3] VAI COMMA..VAI QUESTION MARK +A610..A61F ; Vai # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A620..A629 ; Vai # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE +A62A..A62B ; Vai # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO + +# Total code points: 300 + +# ================================================ + +A880..A881 ; Saurashtra # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A882..A8B3 ; Saurashtra # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8B4..A8C3 ; Saurashtra # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A8C4..A8C5 ; Saurashtra # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8CE..A8CF ; Saurashtra # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA +A8D0..A8D9 ; Saurashtra # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE + +# Total code points: 82 + +# ================================================ + +A900..A909 ; Kayah_Li # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE +A90A..A925 ; Kayah_Li # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A926..A92D ; Kayah_Li # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A92F ; Kayah_Li # Po KAYAH LI SIGN SHYA + +# Total code points: 47 + +# ================================================ + +A930..A946 ; Rejang # Lo [23] REJANG LETTER KA..REJANG LETTER A +A947..A951 ; Rejang # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A952..A953 ; Rejang # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A95F ; Rejang # Po REJANG SECTION MARK + +# Total code points: 37 + +# ================================================ + +10280..1029C ; Lycian # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X + +# Total code points: 29 + +# ================================================ + +102A0..102D0 ; Carian # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 + +# Total code points: 49 + +# ================================================ + +10920..10939 ; Lydian # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +1093F ; Lydian # Po LYDIAN TRIANGULAR MARK + +# Total code points: 27 + +# ================================================ + +AA00..AA28 ; Cham # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA29..AA2E ; Cham # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA2F..AA30 ; Cham # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA31..AA32 ; Cham # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA33..AA34 ; Cham # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA35..AA36 ; Cham # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA40..AA42 ; Cham # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA43 ; Cham # Mn CHAM CONSONANT SIGN FINAL NG +AA44..AA4B ; Cham # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA4C ; Cham # Mn CHAM CONSONANT SIGN FINAL M +AA4D ; Cham # Mc CHAM CONSONANT SIGN FINAL H +AA50..AA59 ; Cham # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE +AA5C..AA5F ; Cham # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA + +# Total code points: 83 + +# ================================================ + +1A20..1A54 ; Tai_Tham # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1A55 ; Tai_Tham # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A56 ; Tai_Tham # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A57 ; Tai_Tham # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A58..1A5E ; Tai_Tham # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; Tai_Tham # Mn TAI THAM SIGN SAKOT +1A61 ; Tai_Tham # Mc TAI THAM VOWEL SIGN A +1A62 ; Tai_Tham # Mn TAI THAM VOWEL SIGN MAI SAT +1A63..1A64 ; Tai_Tham # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A65..1A6C ; Tai_Tham # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A6D..1A72 ; Tai_Tham # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1A73..1A7C ; Tai_Tham # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; Tai_Tham # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1A80..1A89 ; Tai_Tham # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE +1A90..1A99 ; Tai_Tham # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1AA0..1AA6 ; Tai_Tham # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA +1AA7 ; Tai_Tham # Lm TAI THAM SIGN MAI YAMOK +1AA8..1AAD ; Tai_Tham # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG + +# Total code points: 127 + +# ================================================ + +AA80..AAAF ; Tai_Viet # Lo [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O +AAB0 ; Tai_Viet # Mn TAI VIET MAI KANG +AAB1 ; Tai_Viet # Lo TAI VIET VOWEL AA +AAB2..AAB4 ; Tai_Viet # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB5..AAB6 ; Tai_Viet # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB7..AAB8 ; Tai_Viet # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AAB9..AABD ; Tai_Viet # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AABE..AABF ; Tai_Viet # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC0 ; Tai_Viet # Lo TAI VIET TONE MAI NUENG +AAC1 ; Tai_Viet # Mn TAI VIET TONE MAI THO +AAC2 ; Tai_Viet # Lo TAI VIET TONE MAI SONG +AADB..AADC ; Tai_Viet # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; Tai_Viet # Lm TAI VIET SYMBOL SAM +AADE..AADF ; Tai_Viet # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI + +# Total code points: 72 + +# ================================================ + +10B00..10B35 ; Avestan # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B39..10B3F ; Avestan # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION + +# Total code points: 61 + +# ================================================ + +13000..1342E ; Egyptian_Hieroglyphs # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 + +# Total code points: 1071 + +# ================================================ + +0800..0815 ; Samaritan # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +0816..0819 ; Samaritan # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081A ; Samaritan # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B..0823 ; Samaritan # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0824 ; Samaritan # Lm SAMARITAN MODIFIER LETTER SHORT A +0825..0827 ; Samaritan # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0828 ; Samaritan # Lm SAMARITAN MODIFIER LETTER I +0829..082D ; Samaritan # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0830..083E ; Samaritan # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU + +# Total code points: 61 + +# ================================================ + +A4D0..A4F7 ; Lisu # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; Lisu # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A4FE..A4FF ; Lisu # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP + +# Total code points: 48 + +# ================================================ + +A6A0..A6E5 ; Bamum # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; Bamum # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A6F0..A6F1 ; Bamum # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A6F2..A6F7 ; Bamum # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK +16800..16A38 ; Bamum # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ + +# Total code points: 657 + +# ================================================ + +A980..A982 ; Javanese # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A983 ; Javanese # Mc JAVANESE SIGN WIGNYAN +A984..A9B2 ; Javanese # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9B3 ; Javanese # Mn JAVANESE SIGN CECAK TELU +A9B4..A9B5 ; Javanese # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9B6..A9B9 ; Javanese # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BA..A9BB ; Javanese # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BC ; Javanese # Mn JAVANESE VOWEL SIGN PEPET +A9BD..A9C0 ; Javanese # Mc [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON +A9C1..A9CD ; Javanese # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH +A9D0..A9D9 ; Javanese # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE +A9DE..A9DF ; Javanese # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN + +# Total code points: 90 + +# ================================================ + +AAE0..AAEA ; Meetei_Mayek # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAEB ; Meetei_Mayek # Mc MEETEI MAYEK VOWEL SIGN II +AAEC..AAED ; Meetei_Mayek # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAEE..AAEF ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF0..AAF1 ; Meetei_Mayek # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM +AAF2 ; Meetei_Mayek # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; Meetei_Mayek # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF5 ; Meetei_Mayek # Mc MEETEI MAYEK VOWEL SIGN VISARGA +AAF6 ; Meetei_Mayek # Mn MEETEI MAYEK VIRAMA +ABC0..ABE2 ; Meetei_Mayek # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +ABE3..ABE4 ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE5 ; Meetei_Mayek # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE6..ABE7 ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE8 ; Meetei_Mayek # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABE9..ABEA ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEB ; Meetei_Mayek # Po MEETEI MAYEK CHEIKHEI +ABEC ; Meetei_Mayek # Mc MEETEI MAYEK LUM IYEK +ABED ; Meetei_Mayek # Mn MEETEI MAYEK APUN IYEK +ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE + +# Total code points: 79 + +# ================================================ + +10840..10855 ; Imperial_Aramaic # Lo [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW +10857 ; Imperial_Aramaic # Po IMPERIAL ARAMAIC SECTION SIGN +10858..1085F ; Imperial_Aramaic # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND + +# Total code points: 31 + +# ================================================ + +10A60..10A7C ; Old_South_Arabian # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A7D..10A7E ; Old_South_Arabian # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY +10A7F ; Old_South_Arabian # Po OLD SOUTH ARABIAN NUMERIC INDICATOR + +# Total code points: 32 + +# ================================================ + +10B40..10B55 ; Inscriptional_Parthian # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B58..10B5F ; Inscriptional_Parthian # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND + +# Total code points: 30 + +# ================================================ + +10B60..10B72 ; Inscriptional_Pahlavi # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B78..10B7F ; Inscriptional_Pahlavi # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND + +# Total code points: 27 + +# ================================================ + +10C00..10C48 ; Old_Turkic # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH + +# Total code points: 73 + +# ================================================ + +11080..11081 ; Kaithi # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA +11082 ; Kaithi # Mc KAITHI SIGN VISARGA +11083..110AF ; Kaithi # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110B0..110B2 ; Kaithi # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B3..110B6 ; Kaithi # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B7..110B8 ; Kaithi # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110B9..110BA ; Kaithi # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110BB..110BC ; Kaithi # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN +110BD ; Kaithi # Cf KAITHI NUMBER SIGN +110BE..110C1 ; Kaithi # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA + +# Total code points: 66 + +# ================================================ + +1BC0..1BE5 ; Batak # Lo [38] BATAK LETTER A..BATAK LETTER U +1BE6 ; Batak # Mn BATAK SIGN TOMPI +1BE7 ; Batak # Mc BATAK VOWEL SIGN E +1BE8..1BE9 ; Batak # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BEA..1BEC ; Batak # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BED ; Batak # Mn BATAK VOWEL SIGN KARO O +1BEE ; Batak # Mc BATAK VOWEL SIGN U +1BEF..1BF1 ; Batak # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; Batak # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1BFC..1BFF ; Batak # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT + +# Total code points: 56 + +# ================================================ + +11000 ; Brahmi # Mc BRAHMI SIGN CANDRABINDU +11001 ; Brahmi # Mn BRAHMI SIGN ANUSVARA +11002 ; Brahmi # Mc BRAHMI SIGN VISARGA +11003..11037 ; Brahmi # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11038..11046 ; Brahmi # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11047..1104D ; Brahmi # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS +11052..11065 ; Brahmi # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND +11066..1106F ; Brahmi # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +1107F ; Brahmi # Mn BRAHMI NUMBER JOINER + +# Total code points: 109 + +# ================================================ + +0840..0858 ; Mandaic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0859..085B ; Mandaic # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +085E ; Mandaic # Po MANDAIC PUNCTUATION + +# Total code points: 29 + +# ================================================ + +11100..11102 ; Chakma # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11103..11126 ; Chakma # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11127..1112B ; Chakma # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112C ; Chakma # Mc CHAKMA VOWEL SIGN E +1112D..11134 ; Chakma # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11136..1113F ; Chakma # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE +11140..11143 ; Chakma # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK + +# Total code points: 67 + +# ================================================ + +109A0..109B7 ; Meroitic_Cursive # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA +109BC..109BD ; Meroitic_Cursive # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF +109BE..109BF ; Meroitic_Cursive # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +109C0..109CF ; Meroitic_Cursive # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY +109D2..109FF ; Meroitic_Cursive # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS + +# Total code points: 90 + +# ================================================ + +10980..1099F ; Meroitic_Hieroglyphs # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 + +# Total code points: 32 + +# ================================================ + +16F00..16F44 ; Miao # Lo [69] MIAO LETTER PA..MIAO LETTER HHA +16F50 ; Miao # Lo MIAO LETTER NASALIZATION +16F51..16F7E ; Miao # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG +16F8F..16F92 ; Miao # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16F93..16F9F ; Miao # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 + +# Total code points: 133 + +# ================================================ + +11180..11181 ; Sharada # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +11182 ; Sharada # Mc SHARADA SIGN VISARGA +11183..111B2 ; Sharada # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111B3..111B5 ; Sharada # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111C5..111C9 ; Sharada # Po [5] SHARADA DANDA..SHARADA SANDHI MARK +111CA..111CC ; Sharada # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK +111CD ; Sharada # Po SHARADA SUTRA MARK +111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE +111DA ; Sharada # Lo SHARADA EKAM +111DB ; Sharada # Po SHARADA SIGN SIDDHAM +111DC ; Sharada # Lo SHARADA HEADSTROKE +111DD..111DF ; Sharada # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 + +# Total code points: 94 + +# ================================================ + +110D0..110E8 ; Sora_Sompeng # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +110F0..110F9 ; Sora_Sompeng # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE + +# Total code points: 35 + +# ================================================ + +11680..116AA ; Takri # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116AB ; Takri # Mn TAKRI SIGN ANUSVARA +116AC ; Takri # Mc TAKRI SIGN VISARGA +116AD ; Takri # Mn TAKRI VOWEL SIGN AA +116AE..116AF ; Takri # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B0..116B5 ; Takri # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; Takri # Mc TAKRI SIGN VIRAMA +116B7 ; Takri # Mn TAKRI SIGN NUKTA +116C0..116C9 ; Takri # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE + +# Total code points: 66 + +# ================================================ + +10530..10563 ; Caucasian_Albanian # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +1056F ; Caucasian_Albanian # Po CAUCASIAN ALBANIAN CITATION MARK + +# Total code points: 53 + +# ================================================ + +16AD0..16AED ; Bassa_Vah # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16AF0..16AF4 ; Bassa_Vah # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16AF5 ; Bassa_Vah # Po BASSA VAH FULL STOP + +# Total code points: 36 + +# ================================================ + +1BC00..1BC6A ; Duployan # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; Duployan # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; Duployan # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; Duployan # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1BC9C ; Duployan # So DUPLOYAN SIGN O WITH CROSS +1BC9D..1BC9E ; Duployan # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1BC9F ; Duployan # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP + +# Total code points: 143 + +# ================================================ + +10500..10527 ; Elbasan # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE + +# Total code points: 40 + +# ================================================ + +11300..11301 ; Grantha # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +11302..11303 ; Grantha # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +11305..1130C ; Grantha # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; Grantha # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; Grantha # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; Grantha # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; Grantha # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; Grantha # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133C ; Grantha # Mn GRANTHA SIGN NUKTA +1133D ; Grantha # Lo GRANTHA SIGN AVAGRAHA +1133E..1133F ; Grantha # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I +11340 ; Grantha # Mn GRANTHA VOWEL SIGN II +11341..11344 ; Grantha # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; Grantha # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; Grantha # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11350 ; Grantha # Lo GRANTHA OM +11357 ; Grantha # Mc GRANTHA AU LENGTH MARK +1135D..11361 ; Grantha # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11362..11363 ; Grantha # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11366..1136C ; Grantha # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; Grantha # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA + +# Total code points: 85 + +# ================================================ + +16B00..16B2F ; Pahawh_Hmong # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B30..16B36 ; Pahawh_Hmong # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16B37..16B3B ; Pahawh_Hmong # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM +16B3C..16B3F ; Pahawh_Hmong # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB +16B40..16B43 ; Pahawh_Hmong # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B44 ; Pahawh_Hmong # Po PAHAWH HMONG SIGN XAUS +16B45 ; Pahawh_Hmong # So PAHAWH HMONG SIGN CIM TSOV ROG +16B50..16B59 ; Pahawh_Hmong # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE +16B5B..16B61 ; Pahawh_Hmong # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS +16B63..16B77 ; Pahawh_Hmong # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; Pahawh_Hmong # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ + +# Total code points: 127 + +# ================================================ + +11200..11211 ; Khojki # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; Khojki # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1122C..1122E ; Khojki # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +1122F..11231 ; Khojki # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11232..11233 ; Khojki # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11234 ; Khojki # Mn KHOJKI SIGN ANUSVARA +11235 ; Khojki # Mc KHOJKI SIGN VIRAMA +11236..11237 ; Khojki # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +11238..1123D ; Khojki # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN +1123E ; Khojki # Mn KHOJKI SIGN SUKUN + +# Total code points: 62 + +# ================================================ + +10600..10736 ; Linear_A # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; Linear_A # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; Linear_A # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 + +# Total code points: 341 + +# ================================================ + +11150..11172 ; Mahajani # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11173 ; Mahajani # Mn MAHAJANI SIGN NUKTA +11174..11175 ; Mahajani # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK +11176 ; Mahajani # Lo MAHAJANI LIGATURE SHRI + +# Total code points: 39 + +# ================================================ + +10AC0..10AC7 ; Manichaean # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC8 ; Manichaean # So MANICHAEAN SIGN UD +10AC9..10AE4 ; Manichaean # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10AE5..10AE6 ; Manichaean # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10AEB..10AEF ; Manichaean # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED +10AF0..10AF6 ; Manichaean # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER + +# Total code points: 51 + +# ================================================ + +1E800..1E8C4 ; Mende_Kikakui # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E8C7..1E8CF ; Mende_Kikakui # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE +1E8D0..1E8D6 ; Mende_Kikakui # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS + +# Total code points: 213 + +# ================================================ + +11600..1162F ; Modi # Lo [48] MODI LETTER A..MODI LETTER LLA +11630..11632 ; Modi # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +11633..1163A ; Modi # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163B..1163C ; Modi # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163D ; Modi # Mn MODI SIGN ANUSVARA +1163E ; Modi # Mc MODI SIGN VISARGA +1163F..11640 ; Modi # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +11641..11643 ; Modi # Po [3] MODI DANDA..MODI ABBREVIATION SIGN +11644 ; Modi # Lo MODI SIGN HUVA +11650..11659 ; Modi # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE + +# Total code points: 79 + +# ================================================ + +16A40..16A5E ; Mro # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A60..16A69 ; Mro # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A6E..16A6F ; Mro # Po [2] MRO DANDA..MRO DOUBLE DANDA + +# Total code points: 43 + +# ================================================ + +10A80..10A9C ; Old_North_Arabian # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10A9D..10A9F ; Old_North_Arabian # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY + +# Total code points: 32 + +# ================================================ + +10880..1089E ; Nabataean # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108A7..108AF ; Nabataean # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED + +# Total code points: 40 + +# ================================================ + +10860..10876 ; Palmyrene # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10877..10878 ; Palmyrene # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON +10879..1087F ; Palmyrene # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY + +# Total code points: 32 + +# ================================================ + +11AC0..11AF8 ; Pau_Cin_Hau # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL + +# Total code points: 57 + +# ================================================ + +10350..10375 ; Old_Permic # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10376..1037A ; Old_Permic # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII + +# Total code points: 43 + +# ================================================ + +10B80..10B91 ; Psalter_Pahlavi # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10B99..10B9C ; Psalter_Pahlavi # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT +10BA9..10BAF ; Psalter_Pahlavi # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED + +# Total code points: 29 + +# ================================================ + +11580..115AE ; Siddham # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115AF..115B1 ; Siddham # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II +115B2..115B5 ; Siddham # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115B8..115BB ; Siddham # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BC..115BD ; Siddham # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BE ; Siddham # Mc SIDDHAM SIGN VISARGA +115BF..115C0 ; Siddham # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115C1..115D7 ; Siddham # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES +115D8..115DB ; Siddham # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +115DC..115DD ; Siddham # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU + +# Total code points: 92 + +# ================================================ + +112B0..112DE ; Khudawadi # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +112DF ; Khudawadi # Mn KHUDAWADI SIGN ANUSVARA +112E0..112E2 ; Khudawadi # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +112E3..112EA ; Khudawadi # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +112F0..112F9 ; Khudawadi # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE + +# Total code points: 69 + +# ================================================ + +11480..114AF ; Tirhuta # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114B0..114B2 ; Tirhuta # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II +114B3..114B8 ; Tirhuta # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114B9 ; Tirhuta # Mc TIRHUTA VOWEL SIGN E +114BA ; Tirhuta # Mn TIRHUTA VOWEL SIGN SHORT E +114BB..114BE ; Tirhuta # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU +114BF..114C0 ; Tirhuta # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C1 ; Tirhuta # Mc TIRHUTA SIGN VISARGA +114C2..114C3 ; Tirhuta # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +114C4..114C5 ; Tirhuta # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C6 ; Tirhuta # Po TIRHUTA ABBREVIATION SIGN +114C7 ; Tirhuta # Lo TIRHUTA OM +114D0..114D9 ; Tirhuta # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE + +# Total code points: 82 + +# ================================================ + +118A0..118DF ; Warang_Citi # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118E0..118E9 ; Warang_Citi # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE +118EA..118F2 ; Warang_Citi # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY +118FF ; Warang_Citi # Lo WARANG CITI OM + +# Total code points: 84 + +# ================================================ + +11700..11719 ; Ahom # Lo [26] AHOM LETTER KA..AHOM LETTER JHA +1171D..1171F ; Ahom # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +11720..11721 ; Ahom # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11722..11725 ; Ahom # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11726 ; Ahom # Mc AHOM VOWEL SIGN E +11727..1172B ; Ahom # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +11730..11739 ; Ahom # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +1173A..1173B ; Ahom # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY +1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI +1173F ; Ahom # So AHOM SYMBOL VI + +# Total code points: 57 + +# ================================================ + +14400..14646 ; Anatolian_Hieroglyphs # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 + +# Total code points: 583 + +# ================================================ + +108E0..108F2 ; Hatran # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; Hatran # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +108FB..108FF ; Hatran # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED + +# Total code points: 26 + +# ================================================ + +11280..11286 ; Multani # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; Multani # Lo MULTANI LETTER GHA +1128A..1128D ; Multani # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; Multani # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; Multani # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112A9 ; Multani # Po MULTANI SECTION MARK + +# Total code points: 38 + +# ================================================ + +10C80..10CB2 ; Old_Hungarian # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; Old_Hungarian # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10CFA..10CFF ; Old_Hungarian # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND + +# Total code points: 108 + +# ================================================ + +1D800..1D9FF ; SignWriting # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD +1DA00..1DA36 ; SignWriting # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA37..1DA3A ; SignWriting # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE +1DA3B..1DA6C ; SignWriting # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA6D..1DA74 ; SignWriting # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING +1DA75 ; SignWriting # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA76..1DA83 ; SignWriting # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH +1DA84 ; SignWriting # Mn SIGNWRITING LOCATION HEAD NECK +1DA85..1DA86 ; SignWriting # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS +1DA87..1DA8B ; SignWriting # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS +1DA9B..1DA9F ; SignWriting # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; SignWriting # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 + +# Total code points: 672 + +# ================================================ + +1E900..1E943 ; Adlam # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E944..1E94A ; Adlam # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1E950..1E959 ; Adlam # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE +1E95E..1E95F ; Adlam # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK + +# Total code points: 87 + +# ================================================ + +11C00..11C08 ; Bhaiksuki # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; Bhaiksuki # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C2F ; Bhaiksuki # Mc BHAIKSUKI VOWEL SIGN AA +11C30..11C36 ; Bhaiksuki # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Bhaiksuki # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3E ; Bhaiksuki # Mc BHAIKSUKI SIGN VISARGA +11C3F ; Bhaiksuki # Mn BHAIKSUKI SIGN VIRAMA +11C40 ; Bhaiksuki # Lo BHAIKSUKI SIGN AVAGRAHA +11C41..11C45 ; Bhaiksuki # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 +11C50..11C59 ; Bhaiksuki # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE +11C5A..11C6C ; Bhaiksuki # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK + +# Total code points: 97 + +# ================================================ + +11C70..11C71 ; Marchen # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD +11C72..11C8F ; Marchen # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11C92..11CA7 ; Marchen # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CA9 ; Marchen # Mc MARCHEN SUBJOINED LETTER YA +11CAA..11CB0 ; Marchen # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB1 ; Marchen # Mc MARCHEN VOWEL SIGN I +11CB2..11CB3 ; Marchen # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB4 ; Marchen # Mc MARCHEN VOWEL SIGN O +11CB5..11CB6 ; Marchen # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU + +# Total code points: 68 + +# ================================================ + +11400..11434 ; Newa # Lo [53] NEWA LETTER A..NEWA LETTER HA +11435..11437 ; Newa # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11438..1143F ; Newa # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11440..11441 ; Newa # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11442..11444 ; Newa # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11445 ; Newa # Mc NEWA SIGN VISARGA +11446 ; Newa # Mn NEWA SIGN NUKTA +11447..1144A ; Newa # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1144B..1144F ; Newa # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN +11450..11459 ; Newa # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE +1145B ; Newa # Po NEWA PLACEHOLDER MARK +1145D ; Newa # Po NEWA INSERTION SIGN + +# Total code points: 92 + +# ================================================ + +104B0..104D3 ; Osage # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; Osage # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA + +# Total code points: 72 + +# ================================================ + +16FE0 ; Tangut # Lm TANGUT ITERATION MARK +17000..187EC ; Tangut # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC +18800..18AF2 ; Tangut # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755 + +# Total code points: 6881 + +# ================================================ + +11D00..11D06 ; Masaram_Gondi # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; Masaram_Gondi # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; Masaram_Gondi # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D31..11D36 ; Masaram_Gondi # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Masaram_Gondi # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Masaram_Gondi # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; Masaram_Gondi # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D46 ; Masaram_Gondi # Lo MASARAM GONDI REPHA +11D47 ; Masaram_Gondi # Mn MASARAM GONDI RA-KARA +11D50..11D59 ; Masaram_Gondi # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE + +# Total code points: 75 + +# ================================================ + +16FE1 ; Nushu # Lm NUSHU ITERATION MARK +1B170..1B2FB ; Nushu # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB + +# Total code points: 397 + +# ================================================ + +11A50 ; Soyombo # Lo SOYOMBO LETTER A +11A51..11A56 ; Soyombo # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A57..11A58 ; Soyombo # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A59..11A5B ; Soyombo # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A5C..11A83 ; Soyombo # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA +11A86..11A89 ; Soyombo # Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A8A..11A96 ; Soyombo # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A97 ; Soyombo # Mc SOYOMBO SIGN VISARGA +11A98..11A99 ; Soyombo # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11A9A..11A9C ; Soyombo # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD +11A9E..11AA2 ; Soyombo # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 + +# Total code points: 80 + +# ================================================ + +11A00 ; Zanabazar_Square # Lo ZANABAZAR SQUARE LETTER A +11A01..11A06 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O +11A07..11A08 ; Zanabazar_Square # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU +11A09..11A0A ; Zanabazar_Square # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A0B..11A32 ; Zanabazar_Square # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A33..11A38 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A39 ; Zanabazar_Square # Mc ZANABAZAR SQUARE SIGN VISARGA +11A3A ; Zanabazar_Square # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3B..11A3E ; Zanabazar_Square # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A3F..11A46 ; Zanabazar_Square # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK +11A47 ; Zanabazar_Square # Mn ZANABAZAR SQUARE SUBJOINER + +# Total code points: 72 + +# EOF diff --git a/fontbox/src/test/java/org/apache/fontbox/afm/AFMParserTest.java b/fontbox/src/test/java/org/apache/fontbox/afm/AFMParserTest.java new file mode 100644 index 00000000000..0cda90d6ce5 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/afm/AFMParserTest.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.afm; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import org.apache.fontbox.util.Charsets; +import org.junit.Assert; +import org.junit.Test; + +/** + * + * @author Tilman Hausherr + */ +public class AFMParserTest +{ + @Test + public void testEof() throws IOException + { + try + { + new AFMParser(new ByteArrayInputStream("huhu".getBytes(Charsets.US_ASCII))).parse(); + } + catch (IOException ex) + { + Assert.assertEquals("Error: The AFM file should start with StartFontMetrics and not 'huhu'", ex.getMessage()); + } + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/cff/CFFParserTest.java b/fontbox/src/test/java/org/apache/fontbox/cff/CFFParserTest.java new file mode 100644 index 00000000000..086d2133c32 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/cff/CFFParserTest.java @@ -0,0 +1,86 @@ +/* + * Copyright 2017 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import static junit.framework.TestCase.assertEquals; +import org.junit.Test; + +/** + * + * @author Petr Slaby + */ +public class CFFParserTest +{ + /** + * PDFBOX-4038: Test whether BlueValues and other delta encoded lists are read correctly. The + * test file is from FOP-2432. + * + * @throws IOException + */ + @Test + public void testDeltaLists() throws IOException + { + List fonts = readFont("target/pdfs/SourceSansProBold.otf"); + CFFType1Font font = (CFFType1Font) fonts.get(0); + List blues = (List)font.getPrivateDict().get("BlueValues"); + + // Expected values found for this font + assertNumberList("Blue values are different than expected: " + blues.toString(), + new int[]{-12, 0, 496, 508, 578, 590, 635, 647, 652, 664, 701, 713}, blues); + + List otherBlues = (List)font.getPrivateDict().get("OtherBlues"); + assertNumberList("Other blues are different than expected: " + otherBlues.toString(), + new int[]{-196, -184}, otherBlues); + + List familyBlues = (List)font.getPrivateDict().get("FamilyBlues"); + assertNumberList("Other blues are different than expected: " + familyBlues.toString(), + new int[]{-12, 0, 486, 498, 574, 586, 638, 650, 656, 668, 712, 724}, familyBlues); + + List familyOtherBlues = (List)font.getPrivateDict().get("FamilyOtherBlues"); + assertNumberList("Other blues are different than expected: " + familyOtherBlues.toString(), + new int[]{-217, -205}, familyOtherBlues); + + List stemSnapH = (List)font.getPrivateDict().get("StemSnapH"); + assertNumberList("StemSnapH values are different than expected: " + stemSnapH.toString(), + new int[]{115}, stemSnapH); + + List stemSnapV = (List)font.getPrivateDict().get("StemSnapV"); + assertNumberList("StemSnapV values are different than expected: " + stemSnapV.toString(), + new int[]{146, 150}, stemSnapV); + } + + private List readFont(String filename) throws IOException + { + ByteArrayOutputStream content = new ByteArrayOutputStream(); + Files.copy(Paths.get(filename), content); + CFFParser parser = new CFFParser(); + return parser.parse(content.toByteArray()); + } + + private void assertNumberList(String message, int[] expected, List found) + { + assertEquals(message, expected.length, found.size()); + for (int i = 0; i < expected.length; i++) + { + assertEquals(message, expected[i], found.get(i).intValue()); + } + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java b/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java new file mode 100644 index 00000000000..d2f68a0edda --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/cff/Type1FontUtilTest.java @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cff; + +import java.util.Random; +import junit.framework.TestCase; +import static org.junit.Assert.assertArrayEquals; +import org.junit.internal.ArrayComparisonFailure; + +/** + * This class includes some tests for the Type1FontUtil class. + * + * @author Villu Ruusmann + */ +public class Type1FontUtilTest extends TestCase +{ + static final long DEFAULTSEED = 12345; + static final long LOOPS = 1000; + + /** + * Tests the hex encoding/decoding. + */ + public void testHexEncoding() + { + long seed = DEFAULTSEED; + tryHexEncoding(seed); + for (int i = 0; i < LOOPS; ++i) + { + tryHexEncoding(System.currentTimeMillis()); + } + } + + private void tryHexEncoding(long seed) throws ArrayComparisonFailure + { + byte[] bytes = createRandomByteArray(128, seed); + + String encodedBytes = Type1FontUtil.hexEncode(bytes); + byte[] decodedBytes = Type1FontUtil.hexDecode(encodedBytes); + + assertArrayEquals("Seed: " + seed, bytes, decodedBytes); + } + + /** + * Tests the eexec encryption/decryption. + */ + public void testEexecEncryption() + { + long seed = DEFAULTSEED; + tryEexecEncryption(seed); + for (int i = 0; i < LOOPS; ++i) + { + tryEexecEncryption(System.currentTimeMillis()); + } + } + + private void tryEexecEncryption(long seed) throws ArrayComparisonFailure + { + byte[] bytes = createRandomByteArray(128, seed); + + byte[] encryptedBytes = Type1FontUtil.eexecEncrypt(bytes); + byte[] decryptedBytes = Type1FontUtil.eexecDecrypt(encryptedBytes); + + assertArrayEquals("Seed: " + seed, bytes, decryptedBytes); + } + + /** + * Tests the charstring encryption/decryption. + */ + public void testCharstringEncryption() + { + long seed = DEFAULTSEED; + tryCharstringEncryption(seed); + for (int i = 0; i < LOOPS; ++i) + { + tryCharstringEncryption(System.currentTimeMillis()); + } + } + + private void tryCharstringEncryption(long seed) throws ArrayComparisonFailure + { + byte[] bytes = createRandomByteArray(128, seed); + + byte[] encryptedBytes = Type1FontUtil.charstringEncrypt(bytes, 4); + byte[] decryptedBytes = Type1FontUtil.charstringDecrypt(encryptedBytes, 4); + + assertArrayEquals("Seed: " + seed, bytes, decryptedBytes); + } + + private static byte[] createRandomByteArray(int arrayLength, long seed) + { + byte[] bytes = new byte[arrayLength]; + Random ramdom = new Random(seed); + + for (int i = 0; i < arrayLength; i++) + { + bytes[i] = (byte) ramdom.nextInt(256); + } + return bytes; + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java b/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java new file mode 100644 index 00000000000..1399161482e --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cmap; + +import java.io.IOException; + +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TrueTypeFont; + +import junit.framework.TestCase; + +/** + * This will test the CMap implementation. + * + */ +public class TestCMap extends TestCase +{ + + /** + * Check whether the mapping is working correct. + * @throws IOException If something went wrong during adding a mapping + */ + public void testLookup() throws IOException + { + byte[] bs = new byte[1]; + bs[0] = (byte)200; + + CMap cMap = new CMap(); + cMap.addCharMapping(bs, "a"); + assertTrue("a".equals(cMap.toUnicode(200))); + } + + /** + * PDFBOX-3997: test unicode that is above the basic multilingual plane, here: helicopter + * symbol, or D83D DE81 in the Noto Emoji font. + * + * @throws IOException + */ + public void testPDFBox3997() throws IOException + { + try (TrueTypeFont ttf = new TTFParser().parse("target/pdfs/NotoEmoji-Regular.ttf")) + { + CmapLookup cmap = ttf.getUnicodeCmapLookup(false); + assertEquals(886, cmap.getGlyphId(0x1F681)); + } + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java b/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java new file mode 100644 index 00000000000..d46adb5aa00 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.cmap; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import static org.apache.fontbox.cmap.CMap.toInt; + +/** + * This will test the CMapParser implementation. + * + */ +public class TestCMapParser extends TestCase +{ + + /** + * Check whether the parser and the resulting mapping is working correct. + * + * @throws IOException If something went wrong + */ + public void testLookup() throws IOException + { + final String resourceDir = "src/test/resources/cmap"; + File inDir = new File(resourceDir); + + CMapParser parser = new CMapParser(); + CMap cMap = parser.parse(new File(inDir, "CMapTest")); + + // char mappings + byte[] bytes1 = {0, 1}; + assertEquals("bytes 00 01 from bfrange <0001> <0005> <0041>", "A", + cMap.toUnicode(toInt(bytes1, bytes1.length))); + + byte[] bytes2 = {1, 00}; + String str2 = "0"; + assertEquals("bytes 01 00 from bfrange <0100> <0109> <0030>", str2, + cMap.toUnicode(toInt(bytes2, bytes2.length))); + + byte[] bytes3 = { 1, 32 }; + assertEquals("bytes 01 00 from bfrange <0100> <0109> <0030>", "P", + cMap.toUnicode(toInt(bytes3, bytes3.length))); + + byte[] bytes4 = { 1, 33 }; + assertEquals("bytes 01 00 from bfrange <0100> <0109> <0030>", "R", + cMap.toUnicode(toInt(bytes4, bytes4.length))); + + byte[] bytes5 = { 0, 10 }; + String str5 = "*"; + assertEquals("bytes 00 0A from bfchar <000A> <002A>", str5, + cMap.toUnicode(toInt(bytes5, bytes5.length))); + + byte[] bytes6 = { 1, 10 }; + String str6 = "+"; + assertEquals("bytes 01 0A from bfchar <010A> <002B>", str6, + cMap.toUnicode(toInt(bytes6, bytes6.length))); + + // CID mappings + int cid1 = 65; + assertEquals("CID 65 from cidrange <0000> <00ff> 0 ", 65, cMap.toCID(cid1)); + + int cid2 = 280; + int strCID2 = 0x0118; + assertEquals("CID 280 from cidrange <0100> <01ff> 256", strCID2, cMap.toCID(cid2)); + + int cid3 = 520; + int strCID3 = 0x0208; + assertEquals("CID 520 from cidchar <0208> 520", strCID3, cMap.toCID(cid3)); + + int cid4 = 300; + int strCID4 = 0x12C; + assertEquals("CID 300 from cidrange <0300> <0300> 300", strCID4, cMap.toCID(cid4)); + } + + public void testIdentity() throws IOException + { + final String resourceDir = "src/main/resources/org/apache/fontbox/cmap"; + File inDir = new File(resourceDir); + + CMapParser parser = new CMapParser(); + CMap cMap = parser.parse(new File(inDir, "Identity-H")); + + assertEquals("Indentity-H CID 65", 65, cMap.toCID(65)); + assertEquals("Indentity-H CID 12345", 12345, cMap.toCID(12345)); + assertEquals("Indentity-H CID 0xFFFF", 0xFFFF, cMap.toCID(0xFFFF)); + } + + public void testUniJIS_UCS2_H() throws IOException + { + final String resourceDir = "src/main/resources/org/apache/fontbox/cmap"; + File inDir = new File(resourceDir); + + CMapParser parser = new CMapParser(); + CMap cMap = parser.parse(new File(inDir, "UniJIS-UCS2-H")); + + assertEquals("UniJIS-UCS2-H CID 65 -> 34", 34, cMap.toCID(65)); + } + + /** + * Test the parser against a valid, but poorly formatted CMap file. + * @throws IOException If something went wrong + */ + public void testParserWithPoorWhitespace() throws IOException + { + CMap cMap = new CMapParser().parse(new File("src/test/resources/cmap", "CMapNoWhitespace")); + + assertNotNull("Failed to parse nasty CMap file", cMap); + } + + public void testParserWithMalformedbfrange1() throws IOException + { + CMap cMap = new CMapParser() + .parse(new File("src/test/resources/cmap", "CMapMalformedbfrange1")); + + assertNotNull("Failed to parse malformed CMap file", cMap); + + byte[] bytes1 = { 0, 1 }; + assertEquals("bytes 00 01 from bfrange <0001> <0009> <0041>", "A", + cMap.toUnicode(toInt(bytes1, bytes1.length))); + + byte[] bytes2 = { 1, 00 }; + assertNull(cMap.toUnicode(toInt(bytes2, bytes2.length))); + + } + + public void testParserWithMalformedbfrange2() throws IOException + { + CMap cMap = new CMapParser() + .parse(new File("src/test/resources/cmap", "CMapMalformedbfrange2")); + + assertNotNull("Failed to parse malformed CMap file", cMap); + + byte[] bytes1 = { 0, 1 }; + assertEquals("bytes 00 01 from bfrange <0001> <0009> <0041>", "A", + cMap.toUnicode(toInt(bytes1, bytes1.length))); + + byte[] bytes2 = { 2, 00 }; + assertNull(cMap.toUnicode(toInt(bytes2, bytes2.length))); + + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/BufferedRandomAccessFileTest.java b/fontbox/src/test/java/org/apache/fontbox/ttf/BufferedRandomAccessFileTest.java new file mode 100644 index 00000000000..45753a96a84 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/BufferedRandomAccessFileTest.java @@ -0,0 +1,61 @@ +package org.apache.fontbox.ttf; + +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Cameron Rollhieser + */ +public class BufferedRandomAccessFileTest +{ + + /** + * Before solving PDFBOX-3605, this test never ended. + * + * @throws IOException + */ + @Test + public void ensureReadFinishes() throws IOException + { + final File file = File.createTempFile("apache-pdfbox", ".dat"); + + try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file))) + { + final String content = "1234567890"; + outputStream.write(content.getBytes("UTF-8")); + outputStream.flush(); + } + + final byte[] readBuffer = new byte[2]; + final BufferedRandomAccessFile buffer = new BufferedRandomAccessFile(file, "r", 4); + + int amountRead; + int totalAmountRead = 0; + while ((amountRead = buffer.read(readBuffer, 0, 2)) != -1) + { + totalAmountRead += amountRead; + } + Assert.assertEquals(10, totalAmountRead); + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java b/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java new file mode 100644 index 00000000000..eab35a1c3d0 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf; + +import java.io.IOException; + +import org.apache.fontbox.ttf.gsub.GSUBTablePrintUtil; +import org.apache.fontbox.ttf.model.GsubData; +import org.junit.Test; + +/** + * This class is to be used mainly for debugging purposes. Prints the GSUB Feature table for debugging. + * + * @author Palash Ray + */ +public class GSUBTableDebugger +{ + + private static final String LOHIT_BENGALI_FONT_FILE = "/ttf/Lohit-Bengali.ttf"; + + @Test + public void printLohitBengaliTTF() throws IOException + { + MemoryTTFDataStream memoryTTFDataStream = new MemoryTTFDataStream( + GSUBTableDebugger.class.getResourceAsStream(LOHIT_BENGALI_FONT_FILE)); + + memoryTTFDataStream.seek(GlyphSubstitutionTableTest.DATA_POSITION_FOR_GSUB_TABLE); + + GlyphSubstitutionTable glyphSubstitutionTable = new GlyphSubstitutionTable(null); + + glyphSubstitutionTable.read(null, memoryTTFDataStream); + + TrueTypeFont trueTypeFont = new TTFParser() + .parse(GSUBTableDebugger.class.getResourceAsStream(LOHIT_BENGALI_FONT_FILE)); + + GsubData gsubData = glyphSubstitutionTable.getGsubData(); + new GSUBTablePrintUtil().printCharacterToGlyph(gsubData, + trueTypeFont.getUnicodeCmapLookup()); + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/GlyphSubstitutionTableTest.java b/fontbox/src/test/java/org/apache/fontbox/ttf/GlyphSubstitutionTableTest.java new file mode 100644 index 00000000000..cee4a832907 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/GlyphSubstitutionTableTest.java @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.ttf.model.Language; +import org.apache.fontbox.ttf.model.MapBackedScriptFeature; +import org.apache.fontbox.ttf.model.ScriptFeature; +import org.junit.Test; + +public class GlyphSubstitutionTableTest +{ + + static final int DATA_POSITION_FOR_GSUB_TABLE = 120544; + + private static final Collection EXPECTED_FEATURE_NAMES = Arrays.asList("abvs", "akhn", + "blwf", "blws", "half", "haln", "init", "nukt", "pres", "pstf", "rphf", "vatu"); + + @Test + public void testGetGsubData() throws IOException + { + // given + MemoryTTFDataStream memoryTTFDataStream = new MemoryTTFDataStream( + GlyphSubstitutionTableTest.class.getResourceAsStream("/ttf/Lohit-Bengali.ttf")); + memoryTTFDataStream.seek(DATA_POSITION_FOR_GSUB_TABLE); + + GlyphSubstitutionTable testClass = new GlyphSubstitutionTable(null); + + // when + testClass.read(null, memoryTTFDataStream); + + // then + GsubData gsubData = testClass.getGsubData(); + assertNotNull(gsubData); + assertNotEquals(GsubData.NO_DATA_FOUND, gsubData); + assertEquals(Language.BENGALI, gsubData.getLanguage()); + assertEquals("bng2", gsubData.getActiveScriptName()); + + assertEquals(new HashSet<>(EXPECTED_FEATURE_NAMES), gsubData.getSupportedFeatures()); + + String templatePathToFile = "/gsub/lohit_bengali/bng2/%s.txt"; + + for (String featureName : EXPECTED_FEATURE_NAMES) + { + System.out.println("******* Testing feature: " + featureName); + Map, Integer> expectedGsubTableRawData = getExpectedGsubTableRawData( + String.format(templatePathToFile, featureName)); + ScriptFeature scriptFeature = new MapBackedScriptFeature(featureName, + expectedGsubTableRawData); + assertEquals(scriptFeature, gsubData.getFeature(featureName)); + } + + } + + private Map, Integer> getExpectedGsubTableRawData(String pathToResource) + throws IOException + { + Map, Integer> gsubData = new HashMap<>(); + + try (BufferedReader br = new BufferedReader( + new InputStreamReader(TestTTFParser.class.getResourceAsStream(pathToResource)));) + { + while (true) + { + String line = br.readLine(); + + if (line == null) + { + break; + } + + if (line.trim().length() == 0) + { + continue; + } + + if (line.startsWith("#")) + { + continue; + } + String[] lineSplittedByKeyValue = line.split("="); + + if (lineSplittedByKeyValue.length != 2) + { + throw new IllegalArgumentException("invalid format"); + } + + List oldGlyphIds = new ArrayList<>(); + for (String value : lineSplittedByKeyValue[0].split(",")) + { + oldGlyphIds.add(Integer.valueOf(value)); + } + + Integer newGlyphId = Integer.valueOf(lineSplittedByKeyValue[1]); + + gsubData.put(oldGlyphIds, newGlyphId); + + } + } + + return gsubData; + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/RAFDataStreamTest.java b/fontbox/src/test/java/org/apache/fontbox/ttf/RAFDataStreamTest.java new file mode 100644 index 00000000000..dab0a644f2a --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/RAFDataStreamTest.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.IOException; +import org.junit.Test; + +/** + * + * @author Tilman Hausherr + */ +public class RAFDataStreamTest +{ + /** + * Test of PDFBOX-4242: make sure that the Closeable.close() contract is fulfilled. + * + * @throws IOException + */ + @Test + public void testDoubleClose() throws IOException + { + RAFDataStream raf = new RAFDataStream("src/test/resources/ttf/LiberationSans-Regular.ttf", "r"); + raf.close(); + raf.close(); + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java b/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java new file mode 100644 index 00000000000..9b31134a4c7 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java @@ -0,0 +1,263 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map.Entry; +import org.apache.fontbox.util.autodetect.FontFileFinder; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +/** + * + * @author Tilman Hausherr + */ +public class TTFSubsetterTest +{ + + /** + * Test of PDFBOX-2854: empty subset with all tables. + * + * @throws java.io.IOException + */ + @Test + public void testEmptySubset() throws IOException + { + TrueTypeFont x = new TTFParser().parse("src/test/resources/ttf/LiberationSans-Regular.ttf"); + TTFSubsetter ttfSubsetter = new TTFSubsetter(x); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ttfSubsetter.writeToStream(baos); + try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray()))) + { + assertEquals(1, subset.getNumberOfGlyphs()); + assertEquals(0, subset.nameToGID(".notdef")); + assertNotNull(subset.getGlyph().getGlyph(0)); + } + } + + /** + * Test of PDFBOX-2854: empty subset with selected tables. + * + * @throws java.io.IOException + */ + @Test + public void testEmptySubset2() throws IOException + { + TrueTypeFont x = new TTFParser().parse("src/test/resources/ttf/LiberationSans-Regular.ttf"); + // List copied from TrueTypeEmbedder.java + List tables = new ArrayList<>(); + tables.add("head"); + tables.add("hhea"); + tables.add("loca"); + tables.add("maxp"); + tables.add("cvt "); + tables.add("prep"); + tables.add("glyf"); + tables.add("hmtx"); + tables.add("fpgm"); + tables.add("gasp"); + TTFSubsetter ttfSubsetter = new TTFSubsetter(x, tables); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ttfSubsetter.writeToStream(baos); + try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray()))) + { + assertEquals(1, subset.getNumberOfGlyphs()); + assertEquals(0, subset.nameToGID(".notdef")); + assertNotNull(subset.getGlyph().getGlyph(0)); + } + } + + /** + * Test of PDFBOX-2854: subset with one glyph. + * + * @throws java.io.IOException + */ + @Test + public void testNonEmptySubset() throws IOException + { + TrueTypeFont full = new TTFParser().parse("src/test/resources/ttf/LiberationSans-Regular.ttf"); + TTFSubsetter ttfSubsetter = new TTFSubsetter(full); + ttfSubsetter.add('a'); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ttfSubsetter.writeToStream(baos); + try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray()))) + { + assertEquals(2, subset.getNumberOfGlyphs()); + assertEquals(0, subset.nameToGID(".notdef")); + assertEquals(1, subset.nameToGID("a")); + assertNotNull(subset.getGlyph().getGlyph(0)); + assertNotNull(subset.getGlyph().getGlyph(1)); + assertNull(subset.getGlyph().getGlyph(2)); + assertEquals(full.getAdvanceWidth(full.nameToGID("a")), + subset.getAdvanceWidth(subset.nameToGID("a"))); + assertEquals(full.getHorizontalMetrics().getLeftSideBearing(full.nameToGID("a")), + subset.getHorizontalMetrics().getLeftSideBearing(subset.nameToGID("a"))); + } + } + + /** + * Test of PDFBOX-3319: check that widths and left side bearings in partially monospaced font + * are kept. + * + * @throws java.io.IOException + */ + @Test + public void testPDFBox3319() throws IOException + { + System.out.println("Searching for SimHei font..."); + FontFileFinder fontFileFinder = new FontFileFinder(); + List files = fontFileFinder.find(); + File simhei = null; + for (URI uri : files) + { + if (uri.getPath() != null && uri.getPath().toLowerCase(Locale.US).endsWith("simhei.ttf")) + { + simhei = new File(uri); + } + } + if (simhei == null) + { + System.err.println("SimHei font not available on this machine, test skipped"); + return; + } + System.out.println("SimHei font found!"); + TrueTypeFont full = new TTFParser().parse(simhei); + + // List copied from TrueTypeEmbedder.java + // Without it, the test would fail because of missing post table in source font + List tables = new ArrayList<>(); + tables.add("head"); + tables.add("hhea"); + tables.add("loca"); + tables.add("maxp"); + tables.add("cvt "); + tables.add("prep"); + tables.add("glyf"); + tables.add("hmtx"); + tables.add("fpgm"); + tables.add("gasp"); + + TTFSubsetter ttfSubsetter = new TTFSubsetter(full, tables); + + String chinese = "中国你好!"; + for (int offset = 0; offset < chinese.length();) + { + int codePoint = chinese.codePointAt(offset); + ttfSubsetter.add(codePoint); + offset += Character.charCount(codePoint); + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ttfSubsetter.writeToStream(baos); + try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray()))) + { + assertEquals(6, subset.getNumberOfGlyphs()); + + for (Entry entry : ttfSubsetter.getGIDMap().entrySet()) + { + Integer newGID = entry.getKey(); + Integer oldGID = entry.getValue(); + assertEquals(full.getAdvanceWidth(oldGID), subset.getAdvanceWidth(newGID)); + assertEquals(full.getHorizontalMetrics().getLeftSideBearing(oldGID), + subset.getHorizontalMetrics().getLeftSideBearing(newGID)); + } + } + } + + /** + * Test of PDFBOX-3379: check that left side bearings in partially monospaced font are kept. + * + * @throws java.io.IOException + */ + @Test + public void testPDFBox3379() throws IOException + { + TrueTypeFont full = new TTFParser().parse("target/pdfs/DejaVuSansMono.ttf"); + TTFSubsetter ttfSubsetter = new TTFSubsetter(full); + ttfSubsetter.add('A'); + ttfSubsetter.add(' '); + ttfSubsetter.add('B'); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ttfSubsetter.writeToStream(baos); + try (TrueTypeFont subset = new TTFParser().parse(new ByteArrayInputStream(baos.toByteArray()))) + { + assertEquals(4, subset.getNumberOfGlyphs()); + assertEquals(0, subset.nameToGID(".notdef")); + assertEquals(1, subset.nameToGID("space")); + assertEquals(2, subset.nameToGID("A")); + assertEquals(3, subset.nameToGID("B")); + String [] names = new String[]{"A","B","space"}; + for (String name : names) + { + assertEquals(full.getAdvanceWidth(full.nameToGID(name)), + subset.getAdvanceWidth(subset.nameToGID(name))); + assertEquals(full.getHorizontalMetrics().getLeftSideBearing(full.nameToGID(name)), + subset.getHorizontalMetrics().getLeftSideBearing(subset.nameToGID(name))); + } + } + } + + /** + * Test of PDFBOX-3757: check that PostScript names that are not part of WGL4Names don't get + * shuffled in buildPostTable(). + * + * @throws java.io.IOException + */ + @Test + public void testPDFBox3757() throws IOException + { + final File testFile = new File("src/test/resources/ttf/LiberationSans-Regular.ttf"); + TrueTypeFont ttf = new TTFParser().parse(testFile); + TTFSubsetter ttfSubsetter = new TTFSubsetter(ttf); + ttfSubsetter.add('Ö'); + ttfSubsetter.add('\u200A'); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ttfSubsetter.writeToStream(baos); + try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray()))) + { + assertEquals(5, subset.getNumberOfGlyphs()); + + assertEquals(0, subset.nameToGID(".notdef")); + assertEquals(1, subset.nameToGID("O")); + assertEquals(2, subset.nameToGID("Odieresis")); + assertEquals(3, subset.nameToGID("uni200A")); + assertEquals(4, subset.nameToGID("dieresis.uc")); + + PostScriptTable pst = subset.getPostScript(); + assertEquals(pst.getName(0), ".notdef"); + assertEquals(pst.getName(1), "O"); + assertEquals(pst.getName(2), "Odieresis"); + assertEquals(pst.getName(3), "uni200A"); + assertEquals(pst.getName(4), "dieresis.uc"); + + assertTrue("Hair space path should be empty", subset.getPath("uni200A").getBounds2D().isEmpty()); + assertFalse("UC dieresis path should not be empty", subset.getPath("dieresis.uc").getBounds2D().isEmpty()); + } + } +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/TestMemoryTTFDataStream.java b/fontbox/src/test/java/org/apache/fontbox/ttf/TestMemoryTTFDataStream.java new file mode 100644 index 00000000000..74ddf83d7c7 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/TestMemoryTTFDataStream.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.ByteArrayInputStream; +import java.io.IOException; + +import org.junit.Test; + +import junit.framework.TestCase; + +public class TestMemoryTTFDataStream extends TestCase +{ + @Test + public void testEOF() throws IOException + { + byte[] byteArray = new byte[10]; + ByteArrayInputStream inputStream = new ByteArrayInputStream(byteArray); + MemoryTTFDataStream dataStream = new MemoryTTFDataStream(inputStream); + int value = dataStream.read(); + try + { + while (value > -1) + { + value = dataStream.read(); + } + } + catch (ArrayIndexOutOfBoundsException exception) + { + fail("EOF not detected!"); + } + finally + { + dataStream.close(); + } + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java b/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java new file mode 100644 index 00000000000..751e08d04a2 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java @@ -0,0 +1,56 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.fontbox.ttf; + +import java.io.File; +import java.io.IOException; +import java.util.Calendar; +import java.util.TimeZone; + +import junit.framework.TestCase; + +/** + * This will test the TTFParser implementation. + * + * @author Tim Allison + */ +public class TestTTFParser extends TestCase +{ + + /** + * Check whether the creation date is UTC + * + * @throws IOException If something went wrong + */ + public void testUTCDate() throws IOException + { + final File testFile = new File("src/test/resources/ttf/LiberationSans-Regular.ttf"); + TimeZone utc = TimeZone.getTimeZone("UTC"); + //Before PDFBOX-2122, TTFDataStream was using the default TimeZone + //Set the default to something not UTC and see if a UTC timeZone is returned + TimeZone.setDefault(TimeZone.getTimeZone("America/Los Angeles")); + TTFParser parser = new TTFParser(); + TrueTypeFont ttf = parser.parse(testFile); + Calendar created = ttf.getHeader().getCreated(); + assertEquals(created.getTimeZone(), utc); + + Calendar target = Calendar.getInstance(utc); + target.set(2012, 9, 4, 11, 2, 31); + target.set(Calendar.MILLISECOND, 0); + assertEquals(target, created); + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/CompoundCharacterTokenizerTest.java b/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/CompoundCharacterTokenizerTest.java new file mode 100644 index 00000000000..424c52bc3f7 --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/CompoundCharacterTokenizerTest.java @@ -0,0 +1,224 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import org.junit.Test; + +public class CompoundCharacterTokenizerTest +{ + + @Test + public void testTokenize_happyPath_1() + { + + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "HrkJj", "68RetP", "Yx!23uyt" }))); + String text = "12345HrkJjxabbcc68RetPxxxcfb1245678Yx!23uyt889000"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + assertEquals(Arrays.asList("12345", "HrkJj", "xabbcc", "68RetP", "xxxcfb1245678", + "Yx!23uyt", "889000"), tokens); + } + + @Test + public void testTokenize_happyPath_2() + { + + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "84_93", "104_82", "104_87" }))); + String text = "84_112_93_104_82_61_96_102_93_104_87_110"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + assertEquals(Arrays.asList("84_112_93_", "104_82", "_61_96_102_93_", "104_87", "_110"), + tokens); + } + + @Test + public void testTokenize_happyPath_3() + { + + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "67_112_96", "74_112_76" }))); + String text = "67_112_96_103_93_108_93"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + assertEquals(Arrays.asList("67_112_96", "_103_93_108_93"), tokens); + } + + @Test + public void testTokenize_happyPath_4() + { + + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "67_112_96", "74_112_76" }))); + String text = "94_67_112_96_112_91_103"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + assertEquals(Arrays.asList("94_", "67_112_96", "_112_91_103"), tokens); + } + + @Test + public void testTokenize_happyPath_5() + { + + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "67_112", "76_112" }))); + String text = "94_167_112_91_103"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + assertEquals(Arrays.asList("94_1", "67_112", "_91_103"), tokens); + } + + @Test + public void testTokenize_regexAtStart() + { + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "HrkJj", "68RetP", "Yx!23uyt" }))); + String text = "Yx!23uyte12345HrkJjxabbcc68RetPxxxcfb1245678Yx!23uyt889000"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + + List tokenList = tokens; + + assertEquals(0, tokenList.indexOf("Yx!23uyt")); + } + + @Test + public void testTokenize_regexAtEnd() + { + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer( + new HashSet<>(Arrays.asList(new String[] { "HrkJj", "68RetP", "Yx!23uyt" }))); + String text = "Yx!23uyte12345HrkJjxabbcc68RetPxxxcfb1245678Yx!23uyt889000HrkJj"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + assertEquals(0, tokens.indexOf("Yx!23uyt")); + assertEquals(2, tokens.indexOf("HrkJj")); + assertEquals(tokens.size() - 1, tokens.lastIndexOf("HrkJj")); + } + + @Test + public void testTokenize_Bangla() + { + // given + CompoundCharacterTokenizer tokenizer = new CompoundCharacterTokenizer(new HashSet<>( + Arrays.asList(new String[] { "\u0995\u09cd\u09b7", "\u09aa\u09c1\u09a4\u09c1" }))); + String text = "\u0986\u09ae\u09bf \u0995\u09cb\u09a8 \u09aa\u09a5\u09c7 \u0995\u09cd\u09b7\u09c0\u09b0\u09c7\u09b0 \u09b7\u09a8\u09cd\u09a1 \u09aa\u09c1\u09a4\u09c1\u09b2 \u09b0\u09c1\u09aa\u09cb \u0997\u0999\u09cd\u0997\u09be \u098b\u09b7\u09bf"; + + // when + List tokens = tokenizer.tokenize(text); + + // then + StringBuilder sb = new StringBuilder(); + for (String token : tokens) + { + sb.append(token); + } + + assertEquals(text, sb.toString()); + + List tokenList = tokens; + + assertTrue(tokenList.contains("\u0995\u09cd\u09b7")); + assertTrue(tokenList.contains("\u09aa\u09c1\u09a4\u09c1")); + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/GSUBTablePrintUtil.java b/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/GSUBTablePrintUtil.java new file mode 100644 index 00000000000..1f62144d44d --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/GSUBTablePrintUtil.java @@ -0,0 +1,143 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.GSUBTableDebugger; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.ttf.model.ScriptFeature; + +/** + * This class is to be used mainly for debugging purposes. It is used in {@link GSUBTableDebugger}. It is used to print + * all the GSUB Glyphs to characters. The format is:
+ * + * <Serial no.>.) <Space separated characters to be replaced> : RawUnicode: [<Space separated unicode + * representation of each character to be replaced in hexadecimal>] : <The compound character> : <The + * GlyphId with which these characters are replaced> + * + * @author Palash Ray + * + */ +public class GSUBTablePrintUtil +{ + + public void printCharacterToGlyph(GsubData gsubData, CmapLookup cmap) + { + System.err.println( + "Format:\n.) : RawUnicode: [] : : "); + Map> rawGSubTableData = new HashMap<>(); + + for (String featureName : gsubData.getSupportedFeatures()) + { + ScriptFeature scriptFeature = gsubData.getFeature(featureName); + for (List glyphsToBeReplaced : scriptFeature.getAllGlyphIdsForSubstitution()) + { + rawGSubTableData.put(scriptFeature.getReplacementForGlyphs(glyphsToBeReplaced), + glyphsToBeReplaced); + } + + } + + for (String featureName : gsubData.getSupportedFeatures()) + { + System.out + .println("****************** " + featureName + " ******************"); + ScriptFeature scriptFeature = gsubData.getFeature(featureName); + int index = 0; + for (List glyphsToBeReplaced : scriptFeature.getAllGlyphIdsForSubstitution()) + { + String unicodeText = getUnicodeString(rawGSubTableData, cmap, glyphsToBeReplaced); + System.out.println(++index + ".) " + getExplainedUnicodeText(unicodeText) + " : " + + scriptFeature.getReplacementForGlyphs(glyphsToBeReplaced)); + } + + } + + } + + private String getUnicodeChar(Map> rawGSubTableData, CmapLookup cmap, + Integer glyphId) + { + List keyChars = cmap.getCharCodes(glyphId); + + // its a compound glyph + if (keyChars == null) + { + List constituentGlyphs = rawGSubTableData.get(glyphId); + + if (constituentGlyphs == null || constituentGlyphs.isEmpty()) + { + String message = "lookup for the glyphId: " + glyphId + + " failed, as no corresponding Unicode char found mapped to it"; + throw new IllegalStateException(message); + } + else + { + return getUnicodeString(rawGSubTableData, cmap, constituentGlyphs); + } + } + else + { + StringBuilder sb = new StringBuilder(); + for (int unicodeChar : keyChars) + { + sb.append((char) unicodeChar); + } + return sb.toString(); + } + + } + + private String getUnicodeString(Map> rawGSubTableData, CmapLookup cmap, + List glyphIDs) + { + StringBuilder sb = new StringBuilder(); + for (Integer glyphId : glyphIDs) + { + sb.append(getUnicodeChar(rawGSubTableData, cmap, glyphId)); + } + return sb.toString(); + } + + private String getExplainedUnicodeText(String unicodeText) + { + StringBuilder sb = new StringBuilder(); + + for (char unicode : unicodeText.toCharArray()) + { + sb.append(unicode).append(" "); + } + sb.append(":"); + + sb.append(" RawUnicode: ["); + for (char unicode : unicodeText.toCharArray()) + { + sb.append("\\u0").append(Integer.toHexString(unicode).toUpperCase()).append(" "); + } + sb.append("] : "); + + sb.append(unicodeText); + + return sb.toString(); + } + +} diff --git a/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitterRegexImplTest.java b/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitterRegexImplTest.java new file mode 100644 index 00000000000..d3bded3c23e --- /dev/null +++ b/fontbox/src/test/java/org/apache/fontbox/ttf/gsub/GlyphArraySplitterRegexImplTest.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.fontbox.ttf.gsub; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.Test; + +public class GlyphArraySplitterRegexImplTest +{ + + @Test + public void testSplit_1() + { + // given + Set> matchers = new HashSet<>(Arrays.asList(Arrays.asList(84, 93), + Arrays.asList(102, 82), Arrays.asList(104, 87))); + GlyphArraySplitter testClass = new GlyphArraySplitterRegexImpl(matchers); + List glyphIds = Arrays.asList(84, 112, 93, 104, 82, 61, 96, 102, 93, 104, 87, 110); + + // when + List> tokens = testClass.split(glyphIds); + + // then + assertEquals(Arrays.asList(Arrays.asList(84, 112, 93, 104, 82, 61, 96, 102, 93), + Arrays.asList(104, 87), Arrays.asList(110)), tokens); + } + + @Test + public void testSplit_2() + { + + // given + Set> matchers = new HashSet<>( + Arrays.asList(Arrays.asList(67, 112, 96), Arrays.asList(74, 112, 76))); + GlyphArraySplitter testClass = new GlyphArraySplitterRegexImpl(matchers); + List glyphIds = Arrays.asList(67, 112, 96, 103, 93, 108, 93); + + // when + List> tokens = testClass.split(glyphIds); + + // then + assertEquals(Arrays.asList(Arrays.asList(67, 112, 96), Arrays.asList(103, 93, 108, 93)), + tokens); + } + + @Test + public void testSplit_3() + { + + // given + Set> matchers = new HashSet<>( + Arrays.asList(Arrays.asList(67, 112, 96), Arrays.asList(74, 112, 76))); + GlyphArraySplitter testClass = new GlyphArraySplitterRegexImpl(matchers); + List glyphIds = Arrays.asList(94, 67, 112, 96, 112, 91, 103); + + // when + List> tokens = testClass.split(glyphIds); + + // then + assertEquals(Arrays.asList(Arrays.asList(94), Arrays.asList(67, 112, 96), + Arrays.asList(112, 91, 103)), tokens); + } + + @Test + public void testSplit_4() + { + + // given + Set> matchers = new HashSet<>( + Arrays.asList(Arrays.asList(67, 112), Arrays.asList(76, 112))); + GlyphArraySplitter testClass = new GlyphArraySplitterRegexImpl(matchers); + List glyphIds = Arrays.asList(94, 167, 112, 91, 103); + + // when + List> tokens = testClass.split(glyphIds); + + // then + assertEquals(Arrays.asList(Arrays.asList(94, 167, 112, 91, 103)), tokens); + } + +} diff --git a/fontbox/src/test/resources/cmap/CMapMalformedbfrange1 b/fontbox/src/test/resources/cmap/CMapMalformedbfrange1 new file mode 100644 index 00000000000..b918d0db43b --- /dev/null +++ b/fontbox/src/test/resources/cmap/CMapMalformedbfrange1 @@ -0,0 +1,32 @@ +%% Licensed to the Apache Software Foundation (ASF) under one or more +%% contributor license agreements. See the NOTICE file distributed with +%% this work for additional information regarding copyright ownership. +%% The ASF licenses this file to You under the Apache License, Version 2.0 +%% (the "License"); you may not use this file except in compliance with +%% the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% This file isn't a valid CMap file, but it contains everything what +%% is needed to test the CMapParser +%% +%%EndComments + +1 begincodespacerange<0000> <02FF> +endcodespacerange + +2 beginbfrange +<0001> <0009> <0041> +<0109> <0100> <0030> +endbfrange + +endcmap + +%%EndResource +%%EOF diff --git a/fontbox/src/test/resources/cmap/CMapMalformedbfrange2 b/fontbox/src/test/resources/cmap/CMapMalformedbfrange2 new file mode 100644 index 00000000000..f80cde31c6c --- /dev/null +++ b/fontbox/src/test/resources/cmap/CMapMalformedbfrange2 @@ -0,0 +1,32 @@ +%% Licensed to the Apache Software Foundation (ASF) under one or more +%% contributor license agreements. See the NOTICE file distributed with +%% this work for additional information regarding copyright ownership. +%% The ASF licenses this file to You under the Apache License, Version 2.0 +%% (the "License"); you may not use this file except in compliance with +%% the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% This file isn't a valid CMap file, but it contains everything what +%% is needed to test the CMapParser +%% +%%EndComments + +1 begincodespacerange<0000> <02FF> +endcodespacerange + +2 beginbfrange +<0001> <0009> <0041> +<0200> <0400> <0030> +endbfrange + +endcmap + +%%EndResource +%%EOF diff --git a/fontbox/src/test/resources/cmap/CMapNoWhitespace b/fontbox/src/test/resources/cmap/CMapNoWhitespace new file mode 100644 index 00000000000..86a12fa5dd3 --- /dev/null +++ b/fontbox/src/test/resources/cmap/CMapNoWhitespace @@ -0,0 +1,32 @@ +%% Licensed to the Apache Software Foundation (ASF) under one or more +%% contributor license agreements. See the NOTICE file distributed with +%% this work for additional information regarding copyright ownership. +%% The ASF licenses this file to You under the Apache License, Version 2.0 +%% (the "License"); you may not use this file except in compliance with +%% the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% This file isn't a valid CMap file, but it contains everything what +%% is needed to test the CMapParser +%% +%%EndComments + +/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo <> def/CMapName /DDACTR+F1+0 def +/CMapType 2 def1 begincodespacerange <0000> endcodespacerange7 beginbfchar<0003> <0020> +<0011> <002e> +<001a> <0037> +<001b> <0038> +<0026> <0043> +<0083> <00b0> +<00ed> <2212> +endbfcharendcmap CMapName currentdict /CMap defineresource pop end end + +%%EndResource +%%EOF diff --git a/fontbox/src/test/resources/cmap/CMapTest b/fontbox/src/test/resources/cmap/CMapTest new file mode 100644 index 00000000000..a6ff8642193 --- /dev/null +++ b/fontbox/src/test/resources/cmap/CMapTest @@ -0,0 +1,50 @@ +%% Licensed to the Apache Software Foundation (ASF) under one or more +%% contributor license agreements. See the NOTICE file distributed with +%% this work for additional information regarding copyright ownership. +%% The ASF licenses this file to You under the Apache License, Version 2.0 +%% (the "License"); you may not use this file except in compliance with +%% the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% This file isn't a valid CMap file, but it contains everything what +%% is needed to test the CMapParser +%% +%%EndComments + +1 begincodespacerange<0000> <02FF> +endcodespacerange + +2 beginbfchar +<000A> <002A> +<010A> <002B> +endbfchar + +3 beginbfrange +<0001> <0005> <0041> +<0100> <0109> <0030> +<0120> <0122> [<0050> <0052> <0054>] +endbfrange + +3 begincidchar +<0200> 512 +<0208> 520 +<020A> 522 +endcidchar + +2 begincidrange +<0000> <00ff> 0 +<0100> <01ff> 256 +<0300> <0300> 300 +endcidrange + +endcmap + +%%EndResource +%%EOF diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/abvs.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/abvs.txt new file mode 100644 index 00000000000..3e1501a7270 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/abvs.txt @@ -0,0 +1,29 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +52,114=437 +52,103=436 +103,52=436 +114,52=437 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/akhn.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/akhn.txt new file mode 100644 index 00000000000..5bc647611f3 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/akhn.txt @@ -0,0 +1,27 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +67,112,96=167 +74,112,76=214 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/blwf.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/blwf.txt new file mode 100644 index 00000000000..e123675c6da --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/blwf.txt @@ -0,0 +1,28 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +112,89=472 +112,93=442 +112,132=442 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/blws.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/blws.txt new file mode 100644 index 00000000000..63631a087b1 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/blws.txt @@ -0,0 +1,84 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +67,472=166 +68,472=174 +69,144,104=175 +69,472=187 +69,104=175 +70,472=190 +72,112,89=208 +73,472=210 +74,472=216 +77,472=228 +79,472=234 +81,472=247 +82,472=257 +83,472=261 +84,472=276 +85,472=282 +86,472=304 +89,472=328 +91,472=345 +93,105=353 +93,104=352 +94,472=366 +95,144,104=370 +95,472=376 +95,104=370 +96,472=392 +97,472=412 +98,472=422 +98,106=419 +98,104=418 +115,112=477 +132,105=431 +132,104=430 +133,105=433 +133,104=432 +183,105=185 +183,104=184 +227,104=259 +229,105=260 +235,105=281 +235,104=280 +253,105=255 +253,104=254 +273,105=275 +273,104=274 +289,104=290 +307,104=308 +313,105=315 +313,104=314 +330,105=332 +330,104=331 +334,105=336 +334,104=335 +355,144,104=356 +377,105=380 +377,104=379 +401,104=402 +414,105=416 +414,104=415 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/half.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/half.txt new file mode 100644 index 00000000000..e802b330114 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/half.txt @@ -0,0 +1,53 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +67,112=444 +69,112=446 +70,112=447 +71,112=448 +72,112=449 +74,112=451 +76,112=453 +77,112=454 +79,112=456 +80,112=457 +81,112=458 +82,112,145=113 +82,112=459 +83,112=460 +84,112=461 +85,112=462 +86,112=463 +87,112=464 +88,112=465 +89,112=466 +90,112=467 +91,112=468 +94,112=471 +95,112=473 +96,112=474 +97,112=475 +98,112=476 +115,112=477 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/haln.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/haln.txt new file mode 100644 index 00000000000..f22368b90b0 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/haln.txt @@ -0,0 +1,61 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +67,112=444 +68,112=445 +69,112=446 +70,112=447 +71,112=448 +72,112=449 +73,112=450 +74,112=451 +75,112=452 +76,112=453 +77,112=454 +78,112=455 +79,112=456 +80,112=457 +81,112=458 +82,112=459 +83,112=460 +84,112=461 +85,112=462 +86,112=463 +87,112=464 +88,112=465 +89,112=466 +90,112=467 +91,112=468 +92,112=469 +94,112=471 +95,112=473 +96,112=474 +97,112=475 +98,112=476 +116,112=478 +117,112=479 +132,112=482 +133,112=481 +172,112=480 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/init.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/init.txt new file mode 100644 index 00000000000..5ded3acfc12 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/init.txt @@ -0,0 +1,27 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +108=438 +109=439 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/nukt.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/nukt.txt new file mode 100644 index 00000000000..3b04e6c8afd --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/nukt.txt @@ -0,0 +1,28 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +79,99=115 +80,99=116 +92,99=117 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/pres.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/pres.txt new file mode 100644 index 00000000000..fac466e22df --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/pres.txt @@ -0,0 +1,217 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +67,112,96,472=171 +67,112,96,442=170 +67,112,82,472=161 +67,112,253=160 +69,112,85,472=179 +69,112,279=180 +71,112,67,112,391=194 +71,112,67,112,96=193 +71,112,189=198 +71,112,164=192 +76,112,72,472=219 +77,112,82,112,93=225 +81,112,235=243 +81,112,233=241 +81,112,229=239 +81,112,227=237 +84,112,334=271 +84,112,273=265 +86,112,258=294 +86,112,233=287 +86,112,227=284 +86,442=303 +87,112,253=309 +89,112,75=322 +91,112,319=344 +94,112,233=361 +94,112,227=359 +94,472=366 +97,112,82,472=404 +97,112,313=408 +167,112,91=169 +167,112,81=168 +444,227=484 +444,97=172 +444,94=165 +444,91=163 +444,86=162 +444,82=159 +444,77=158 +444,67=157 +446,94=186 +446,91=182 +446,86=181 +446,85=178 +446,84=177 +446,69=176 +447,86=188 +448,91=199 +448,70=197 +448,69=196 +448,68=195 +448,67=191 +449,73,472=204 +449,76=205 +449,86=206 +449,209=203 +449,73=202 +449,72=201 +450,89=210 +450,93=209 +451,74,472=212 +451,76=214 +451,75=213 +451,89=216 +451,74=211 +453,85=223 +453,75=222 +453,74=221 +453,73=220 +453,72=218 +454,91=226 +454,77=224 +456,91=232 +456,79=231 +456,69=230 +458,91=245 +458,81=244 +458,80=242 +458,79=240 +458,78=238 +458,77=236 +459,82,472=249 +459,91=252 +459,86=251 +459,83=250 +459,94=256 +459,82=248 +461,85,472=268 +461,84,472=266 +461,86=269 +461,91=272 +461,85=267 +461,90=270 +461,84=264 +461,70=263 +461,69=262 +462,91=278 +462,86=277 +463,85,472=299 +463,84,472=297 +463,82,472=292 +463,279=300 +463,97=305 +463,85=298 +463,91=302 +463,273=296 +463,84=295 +463,83=293 +463,86=301 +463,253=291 +463,82=289 +463,79=286 +463,78=285 +463,77=283 +464,97=317 +464,94=316 +464,91=312 +464,87=311 +464,86=310 +464,82=307 +464,77=306 +465,94=320 +465,77=318 +466,94=333 +466,89=328 +466,85=327 +466,273=326 +466,84=325 +466,74=321 +467,94=337 +468,83=485 +468,94=350 +468,91=348 +468,334=347 +468,90=346 +468,88=343 +468,313=342 +468,87=341 +468,86=340 +468,84=339 +468,82=338 +471,85=487 +471,82=486 +471,94=369 +471,91=367 +471,88=365 +471,87=364 +471,84=363 +471,80=362 +471,79=360 +471,77=358 +471,70=357 +471,69=355 +471,67=354 +472,90=329 +472,80=324 +472,79=323 +473,94=381 +473,91=375 +473,86=374 +473,82=373 +473,73=372 +473,72=371 +474,91=393 +474,88=390 +474,313=389 +474,87=388 +474,81=387 +474,78=386 +474,227=385 +474,77=384 +474,164=383 +474,67=382 +475,94=417 +475,91=413 +475,88=411 +475,316=410 +475,87=407 +475,86=406 +475,83=405 +475,253=403 +475,82=401 +475,227=399 +475,77=398 +475,68=397 +475,164=395 +475,67=394 +476,94=425 +476,91=423 +476,86=421 +476,81=420 +477,69=426 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/pstf.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/pstf.txt new file mode 100644 index 00000000000..51b59b73ddf --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/pstf.txt @@ -0,0 +1,26 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +112,92=156 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/rphf.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/rphf.txt new file mode 100644 index 00000000000..a1164aeb6a4 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/rphf.txt @@ -0,0 +1,27 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +93,112=440 +132,112=440 diff --git a/fontbox/src/test/resources/gsub/lohit_bengali/bng2/vatu.txt b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/vatu.txt new file mode 100644 index 00000000000..b75db089205 --- /dev/null +++ b/fontbox/src/test/resources/gsub/lohit_bengali/bng2/vatu.txt @@ -0,0 +1,60 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE: This file is used for testing only, and might change frequently and without any prior notice +# +# This file contains the raw GSUB table data that can be extracted from the Lohit-Bengali.ttf font file. The name of the file +# is the name of the *feature* of the GSUB Table. +# Each line of this file is formatted as: +# = +# + +67,442=164 +68,442=173 +69,442=183 +70,442=189 +71,442=200 +72,442=207 +73,442=209 +74,442=215 +75,442=217 +77,442=227 +78,442=229 +79,99,442=427 +79,442=233 +80,99,442=428 +80,442=235 +81,442=246 +82,442=253 +83,442=258 +84,442=273 +85,442=279 +87,442=313 +88,442=319 +89,442=330 +90,442=334 +91,442=349 +92,442=351 +94,442=368 +95,442=377 +96,442=391 +97,442=414 +98,442=424 +115,442=427 +116,442=428 +117,442=429 +133,442=434 diff --git a/fontbox/src/test/resources/ttf/LiberationSans-Regular.ttf b/fontbox/src/test/resources/ttf/LiberationSans-Regular.ttf new file mode 100644 index 00000000000..626dd9364f1 Binary files /dev/null and b/fontbox/src/test/resources/ttf/LiberationSans-Regular.ttf differ diff --git a/fontbox/src/test/resources/ttf/Lohit-Bengali.ttf b/fontbox/src/test/resources/ttf/Lohit-Bengali.ttf new file mode 100644 index 00000000000..fa0f51627e7 Binary files /dev/null and b/fontbox/src/test/resources/ttf/Lohit-Bengali.ttf differ diff --git a/licenses/ant/LICENSE b/licenses/ant/LICENSE deleted file mode 100644 index f820d4bd3a6..00000000000 --- a/licenses/ant/LICENSE +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Apache License - * Version 2.0, January 2004 - * http://www.apache.org/licenses/ - * - * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - * - * 1. Definitions. - * - * "License" shall mean the terms and conditions for use, reproduction, - * and distribution as defined by Sections 1 through 9 of this document. - * - * "Licensor" shall mean the copyright owner or entity authorized by - * the copyright owner that is granting the License. - * - * "Legal Entity" shall mean the union of the acting entity and all - * other entities that control, are controlled by, or are under common - * control with that entity. For the purposes of this definition, - * "control" means (i) the power, direct or indirect, to cause the - * direction or management of such entity, whether by contract or - * otherwise, or (ii) ownership of fifty percent (50%) or more of the - * outstanding shares, or (iii) beneficial ownership of such entity. - * - * "You" (or "Your") shall mean an individual or Legal Entity - * exercising permissions granted by this License. - * - * "Source" form shall mean the preferred form for making modifications, - * including but not limited to software source code, documentation - * source, and configuration files. - * - * "Object" form shall mean any form resulting from mechanical - * transformation or translation of a Source form, including but - * not limited to compiled object code, generated documentation, - * and conversions to other media types. - * - * "Work" shall mean the work of authorship, whether in Source or - * Object form, made available under the License, as indicated by a - * copyright notice that is included in or attached to the work - * (an example is provided in the Appendix below). - * - * "Derivative Works" shall mean any work, whether in Source or Object - * form, that is based on (or derived from) the Work and for which the - * editorial revisions, annotations, elaborations, or other modifications - * represent, as a whole, an original work of authorship. For the purposes - * of this License, Derivative Works shall not include works that remain - * separable from, or merely link (or bind by name) to the interfaces of, - * the Work and Derivative Works thereof. - * - * "Contribution" shall mean any work of authorship, including - * the original version of the Work and any modifications or additions - * to that Work or Derivative Works thereof, that is intentionally - * submitted to Licensor for inclusion in the Work by the copyright owner - * or by an individual or Legal Entity authorized to submit on behalf of - * the copyright owner. For the purposes of this definition, "submitted" - * means any form of electronic, verbal, or written communication sent - * to the Licensor or its representatives, including but not limited to - * communication on electronic mailing lists, source code control systems, - * and issue tracking systems that are managed by, or on behalf of, the - * Licensor for the purpose of discussing and improving the Work, but - * excluding communication that is conspicuously marked or otherwise - * designated in writing by the copyright owner as "Not a Contribution." - * - * "Contributor" shall mean Licensor and any individual or Legal Entity - * on behalf of whom a Contribution has been received by Licensor and - * subsequently incorporated within the Work. - * - * 2. Grant of Copyright License. Subject to the terms and conditions of - * this License, each Contributor hereby grants to You a perpetual, - * worldwide, non-exclusive, no-charge, royalty-free, irrevocable - * copyright license to reproduce, prepare Derivative Works of, - * publicly display, publicly perform, sublicense, and distribute the - * Work and such Derivative Works in Source or Object form. - * - * 3. Grant of Patent License. Subject to the terms and conditions of - * this License, each Contributor hereby grants to You a perpetual, - * worldwide, non-exclusive, no-charge, royalty-free, irrevocable - * (except as stated in this section) patent license to make, have made, - * use, offer to sell, sell, import, and otherwise transfer the Work, - * where such license applies only to those patent claims licensable - * by such Contributor that are necessarily infringed by their - * Contribution(s) alone or by combination of their Contribution(s) - * with the Work to which such Contribution(s) was submitted. If You - * institute patent litigation against any entity (including a - * cross-claim or counterclaim in a lawsuit) alleging that the Work - * or a Contribution incorporated within the Work constitutes direct - * or contributory patent infringement, then any patent licenses - * granted to You under this License for that Work shall terminate - * as of the date such litigation is filed. - * - * 4. Redistribution. You may reproduce and distribute copies of the - * Work or Derivative Works thereof in any medium, with or without - * modifications, and in Source or Object form, provided that You - * meet the following conditions: - * - * (a) You must give any other recipients of the Work or - * Derivative Works a copy of this License; and - * - * (b) You must cause any modified files to carry prominent notices - * stating that You changed the files; and - * - * (c) You must retain, in the Source form of any Derivative Works - * that You distribute, all copyright, patent, trademark, and - * attribution notices from the Source form of the Work, - * excluding those notices that do not pertain to any part of - * the Derivative Works; and - * - * (d) If the Work includes a "NOTICE" text file as part of its - * distribution, then any Derivative Works that You distribute must - * include a readable copy of the attribution notices contained - * within such NOTICE file, excluding those notices that do not - * pertain to any part of the Derivative Works, in at least one - * of the following places: within a NOTICE text file distributed - * as part of the Derivative Works; within the Source form or - * documentation, if provided along with the Derivative Works; or, - * within a display generated by the Derivative Works, if and - * wherever such third-party notices normally appear. The contents - * of the NOTICE file are for informational purposes only and - * do not modify the License. You may add Your own attribution - * notices within Derivative Works that You distribute, alongside - * or as an addendum to the NOTICE text from the Work, provided - * that such additional attribution notices cannot be construed - * as modifying the License. - * - * You may add Your own copyright statement to Your modifications and - * may provide additional or different license terms and conditions - * for use, reproduction, or distribution of Your modifications, or - * for any such Derivative Works as a whole, provided Your use, - * reproduction, and distribution of the Work otherwise complies with - * the conditions stated in this License. - * - * 5. Submission of Contributions. Unless You explicitly state otherwise, - * any Contribution intentionally submitted for inclusion in the Work - * by You to the Licensor shall be under the terms and conditions of - * this License, without any additional terms or conditions. - * Notwithstanding the above, nothing herein shall supersede or modify - * the terms of any separate license agreement you may have executed - * with Licensor regarding such Contributions. - * - * 6. Trademarks. This License does not grant permission to use the trade - * names, trademarks, service marks, or product names of the Licensor, - * except as required for reasonable and customary use in describing the - * origin of the Work and reproducing the content of the NOTICE file. - * - * 7. Disclaimer of Warranty. Unless required by applicable law or - * agreed to in writing, Licensor provides the Work (and each - * Contributor provides its Contributions) on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied, including, without limitation, any warranties or conditions - * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - * PARTICULAR PURPOSE. You are solely responsible for determining the - * appropriateness of using or redistributing the Work and assume any - * risks associated with Your exercise of permissions under this License. - * - * 8. Limitation of Liability. In no event and under no legal theory, - * whether in tort (including negligence), contract, or otherwise, - * unless required by applicable law (such as deliberate and grossly - * negligent acts) or agreed to in writing, shall any Contributor be - * liable to You for damages, including any direct, indirect, special, - * incidental, or consequential damages of any character arising as a - * result of this License or out of the use or inability to use the - * Work (including but not limited to damages for loss of goodwill, - * work stoppage, computer failure or malfunction, or any and all - * other commercial damages or losses), even if such Contributor - * has been advised of the possibility of such damages. - * - * 9. Accepting Warranty or Additional Liability. While redistributing - * the Work or Derivative Works thereof, You may choose to offer, - * and charge a fee for, acceptance of support, warranty, indemnity, - * or other liability obligations and/or rights consistent with this - * License. However, in accepting such obligations, You may act only - * on Your own behalf and on Your sole responsibility, not on behalf - * of any other Contributor, and only if You agree to indemnify, - * defend, and hold each Contributor harmless for any liability - * incurred by, or claims asserted against, such Contributor by reason - * of your accepting any such warranty or additional liability. - * - * END OF TERMS AND CONDITIONS - * - * APPENDIX: How to apply the Apache License to your work. - * - * To apply the Apache License to your work, attach the following - * boilerplate notice, with the fields enclosed by brackets "[]" - * replaced with your own identifying information. (Don't include - * the brackets!) The text should be enclosed in the appropriate - * comment syntax for the file format. We also recommend that a - * file or class name and description of purpose be included on the - * same "printed page" as the copyright notice for easier - * identification within third-party archives. - * - * Copyright [yyyy] [name of copyright owner] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ diff --git a/licenses/ant/LICENSE.dom b/licenses/ant/LICENSE.dom deleted file mode 100644 index 8f7fae03549..00000000000 --- a/licenses/ant/LICENSE.dom +++ /dev/null @@ -1,71 +0,0 @@ -This license came from: -http://www.w3.org/Consortium/Legal/copyright-software-19980720 - - -W3C SOFTWARE NOTICE AND LICENSE -Copyright 1994-2001 World -Wide Web Consortium, World -Wide Web Consortium, (Massachusetts Institute of -Technology, Institut National de -Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. -http://www.w3.org/Consortium/Legal/ - -This W3C work (including software, documents, or other related -items) is being provided by the copyright holders under the -following license. By obtaining, using and/or copying this work, -you (the licensee) agree that you have read, understood, and will -comply with the following terms and conditions: -Permission to use, copy, modify, and distribute this software -and its documentation, with or without modification, for any -purpose and without fee or royalty is hereby granted, provided that -you include the following on ALL copies of the software and -documentation or portions thereof, including modifications, that -you make: - -The full text of this NOTICE in a location viewable to users of -the redistributed or derivative work. - -Any pre-existing intellectual property disclaimers, notices, or -terms and conditions. If none exist, a short notice of the -following form (hypertext is preferred, text is permitted) should -be used within the body of any redistributed or derivative code: -"Copyright [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of -Technology, Institut National de -Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. -http://www.w3.org/Consortium/Legal/" - -Notice of any changes or modifications to the W3C files, -including the date changes were made. (We recommend you provide -URIs to the location from which the code is derived.) - -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND -COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF -MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE -USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD -PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, -SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE -SOFTWARE OR DOCUMENTATION. - -The name and trademarks of copyright holders may NOT be used in -advertising or publicity pertaining to the software without -specific, written prior permission. Title to copyright in this -software and any associated documentation will at all times remain -with copyright holders. -____________________________________ -This formulation of W3C's notice and license became active on -August 14 1998 so as to improve compatibility with GPL. This -version ensures that W3C software licensing terms are no more -restrictive than GPL and consequently W3C software may be -distributed in GPL packages. See the older formulation for the -policy prior to this date. Please see our Copyright FAQ for common -questions about using materials from -our site, including specific terms and conditions for packages like -libwww, Amaya, and Jigsaw. -Other questions about this notice can be -directed to site-policy@w3.org. - -webmaster diff --git a/licenses/ant/LICENSE.sax b/licenses/ant/LICENSE.sax deleted file mode 100644 index d563cd409ec..00000000000 --- a/licenses/ant/LICENSE.sax +++ /dev/null @@ -1,20 +0,0 @@ -This license came from: http://www.megginson.com/SAX/copying.html - However please note future versions of SAX may be covered - under http://saxproject.org/?selected=pd - - -This page is now out of date -- see the new SAX site at -http://www.saxproject.org/ for more up-to-date -releases and other information. Please change your bookmarks. - - -SAX2 is Free! - -I hereby abandon any property rights to SAX 2.0 (the Simple API for -XML), and release all of the SAX 2.0 source code, compiled code, and -documentation contained in this distribution into the Public Domain. -SAX comes with NO WARRANTY or guarantee of fitness for any -purpose. - -David Megginson, david@megginson.com -2000-05-05 diff --git a/licenses/ant/LICENSE.xerces b/licenses/ant/LICENSE.xerces deleted file mode 100644 index f0e1964ba3b..00000000000 --- a/licenses/ant/LICENSE.xerces +++ /dev/null @@ -1,56 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * - * Copyright (c) 1999-2002 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Xerces" and "Apache Software Foundation" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * nor may "Apache" appear in their name, without prior written - * permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation and was - * originally based on software copyright (c) 1999, International - * Business Machines, Inc., http://www.ibm.com. For more - * information on the Apache Software Foundation, please see - * . - */ diff --git a/licenses/bouncycastle/licence.html b/licenses/bouncycastle/licence.html deleted file mode 100644 index ba273b075c8..00000000000 --- a/licenses/bouncycastle/licence.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - bouncycastle.org - - - - - - - - - - - - - -
- -
- - - - -
- -

License

-

Copyright (c) 2000 - 2006 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) -

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

-
 
- -
-
-
 
- - - - - - diff --git a/licenses/checkstyle/LICENSE b/licenses/checkstyle/LICENSE deleted file mode 100644 index 0d3dec198dc..00000000000 --- a/licenses/checkstyle/LICENSE +++ /dev/null @@ -1,504 +0,0 @@ - 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. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/licenses/checkstyle/LICENSE.apache b/licenses/checkstyle/LICENSE.apache deleted file mode 100644 index 016d1725f94..00000000000 --- a/licenses/checkstyle/LICENSE.apache +++ /dev/null @@ -1,60 +0,0 @@ -/* - * $Header: /cvsroot/pdfbox/pdfbox/licenses/checkstyle/LICENSE.apache,v 1.2 2004/08/28 22:46:52 benlitchfield Exp $ - * $Revision: 1.2 $ - * $Date: 2004/08/28 22:46:52 $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 1999 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ diff --git a/licenses/fontbox/LICENSE b/licenses/fontbox/LICENSE deleted file mode 100644 index 0f963fec7c0..00000000000 --- a/licenses/fontbox/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2003-2005, www.fontbox.org -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of fontbox; nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/ikvm/LICENSE b/licenses/ikvm/LICENSE deleted file mode 100644 index 73e41f50b77..00000000000 --- a/licenses/ikvm/LICENSE +++ /dev/null @@ -1,34 +0,0 @@ -IMPORTANT NOTICE - - Some files in this distribution are part of GNU Classpath and have a - different license. This applies in particular to: - - IKVM.GNU.Classpath.dll - - some of the *.java files (see each file header for license) - - See http://www.gnu.org/software/classpath/ for information on the - GNU Classpath license. - ------------------------------------------------------------------------------ - - Copyright (C) 2002, 2003, 2004 Jeroen Frijters - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jeroen Frijters - jeroen@frijters.net - ------------------------------------------------------------------------------ diff --git a/licenses/jempbox/LICENSE b/licenses/jempbox/LICENSE deleted file mode 100644 index 0f963fec7c0..00000000000 --- a/licenses/jempbox/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2003-2005, www.fontbox.org -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of fontbox; nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/junit/cpl-v10.html b/licenses/junit/cpl-v10.html deleted file mode 100644 index 158d99ce80f..00000000000 --- a/licenses/junit/cpl-v10.html +++ /dev/null @@ -1,125 +0,0 @@ - - - -Common Public License - v 1.0 - - - - - - -

Common Public License - v 1.0 -

-

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. -

-

1. DEFINITIONS -

"Contribution" means: - -

    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
    -b) in the case of each subsequent Contributor:
- - -
    i) changes to the Program, and
- - -
    ii) additions to the Program;
- - -
    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
- -

-

"Contributor" means any person or entity that distributes the Program. -

-

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. -

-

"Program" means the Contributions distributed in accordance with this Agreement. -

-

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors. -

-

2. GRANT OF RIGHTS - -

    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
- - -
- - -
    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
- - -
- - -
    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
- - -
- - -
    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
- - -
- -

3. REQUIREMENTS -

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: - -

    a) it complies with the terms and conditions of this Agreement; and
- - -
    b) its license agreement:
- - -
    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
- - -
    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
- - -
    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
- - -
    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
- - -
- -

When the Program is made available in source code form: - -

    a) it must be made available under this Agreement; and
- - -
    b) a copy of this Agreement must be included with each copy of the Program.
- -

-

Contributors may not remove or alter any copyright notices contained within the Program. -

-

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. -

-

4. COMMERCIAL DISTRIBUTION -

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. -

-

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. -

-

5. NO WARRANTY -

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. -

-

6. DISCLAIMER OF LIABILITY -

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -

-

7. GENERAL -

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -

-

If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. -

-

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. -

-

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. -

-

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. -

-

- - - - diff --git a/licenses/lucene/LICENSE.txt b/licenses/lucene/LICENSE.txt deleted file mode 100644 index aac7fca4910..00000000000 --- a/licenses/lucene/LICENSE.txt +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright 2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ diff --git a/licenses/pdfbox/LICENSE b/licenses/pdfbox/LICENSE deleted file mode 100644 index 348b087096d..00000000000 --- a/licenses/pdfbox/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2002-2007, www.pdfbox.org -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of pdfbox; nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/sun-jaicmm/COPYRIGHT-jai.txt b/licenses/sun-jaicmm/COPYRIGHT-jai.txt deleted file mode 100644 index e337a1ac45f..00000000000 --- a/licenses/sun-jaicmm/COPYRIGHT-jai.txt +++ /dev/null @@ -1,34 +0,0 @@ -Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -California 95054, U.S.A. All rights reserved. U.S. Government Rights - -Commercial software. Government users are subject to the Sun Microsystems, -Inc. standard license agreement and applicable provisions of the FAR and its -supplements. Use is subject to license terms. This distribution may include -materials developed by third parties. Sun, Sun Microsystems, the Sun logo -and Java are trademarks or registered trademarks of Sun Microsystems, Inc. -in the U.S. and other countries. This product is covered and controlled by -U.S.Export Control laws and may be subject to the export or import laws in -other countries. Nuclear, missile, chemical biological weapons or nuclear -maritime end uses or end users, whether direct or indirect, are strictly -prohibited. Export or reexport to countries subject to U.S. embargo or to -entities identified on U.S. export exclusion lists, including, but not -limited to, the denied persons and specially designated nationals lists is -strictly prohibited. - -Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, -California 95054, Etats-Unis. Tous droits rservs.L'utilisation est soumise -aux termes de la Licence.Cette distribution peut comprendre des composants -dvelopps par des tierces parties.Sun, Sun Microsystems, le logo Sun et -Java sont des marques de fabrique ou des marques dposes de Sun Microsystems, -Inc. aux Etats-Unis et dans d'autres pays.Ce produit est soumis la -lgislation amricaine en matire de contrle des exportations et peut tre -soumis la rglementation en vigueur dans d'autres pays dans le domaine des -exportations et importations. Les utilisations, ou utilisateurs finaux, pour -des armes nuclaires,des missiles, des armes biologiques et chimiques ou du -nuclaire maritime, directement ou indirectement, sont strictement interdites. -Les exportations ou rexportations vers les pays sous embargo amricain, ou -vers des entits figurant sur les listes d'exclusion d'exportation -amricaines, y compris, mais de manire non exhaustive, la liste de personnes -qui font objet d'un ordre de ne pas participer, d'une faon directe ou -indirecte, aux exportations des produits ou des services qui sont rgis par -la lgislation amricaine en matire de contrle des exportations et la liste -de ressortissants spcifiquement dsigns, sont rigoureusement interdites. diff --git a/licenses/sun-jaicmm/DISTRIBUTIONREADME-jai.txt b/licenses/sun-jaicmm/DISTRIBUTIONREADME-jai.txt deleted file mode 100644 index 98d87091d99..00000000000 --- a/licenses/sun-jaicmm/DISTRIBUTIONREADME-jai.txt +++ /dev/null @@ -1,27 +0,0 @@ -DistributionREADME - -DISTRIBUTION BY DEVELOPERS. Subject to the terms and conditions of the Software License Agreement and the obligations, restrictions, and exceptions set forth below, You may reproduce and distribute the portions of Software identified below ("each a Redistributable"), provided that you comply with the following (note that You may be entitled to reproduce and distribute other portions of the Software not defined here as a Redistributable under certain other licenses as described in the THIRDPARTYLICENSEREADME): - -(a) You distribute the Redistributable complete and unmodified and only bundled as part of Your applets and applications ("Programs"), - -(b) You do not distribute additional software intended to replace any -component(s) of the Redistributable, - -(c) You do not remove or alter any proprietary legends or notices contained in or on the Redistributable. - -(d) You only distribute the Redistributable subject to a license agreement that protects Sun's interests consistent with the terms contained in the Software License Agreement, and - -(e) You agree to defend and indemnify Sun and its licensors from and against any damages, costs, liabilities, settlement amounts and/or expenses (including attorneys' fees) incurred in connection with any claim, lawsuit or action by any third party that arises or results from the use or distribution of any and all Programs and/or Redistributable. - -The following files are each a Redistributable: - -The following Redistributables may be redistributed only as a whole - -JAVA Advanced Imaging API, Version 1.1.3 - - -The following Redistributables may be redistributed separately - -JAI Codecs - jai_codec.jar - -JAI Java Implementation - jai_core.jar and jai_codec.jar (required to be redistributed together) diff --git a/licenses/sun-jaicmm/JAI-LICENSE b/licenses/sun-jaicmm/JAI-LICENSE deleted file mode 100644 index 671f446d84d..00000000000 --- a/licenses/sun-jaicmm/JAI-LICENSE +++ /dev/null @@ -1,283 +0,0 @@ -Sun Microsystems, Inc. - -Binary Code License Agreement - - - -JAVA ADVANCED IMAGING API, VERSION 1.1.2 - - - -READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED -SUPPLEMENTAL LICENS E TERMS (COLLECTIVELY "AGREEMENT") -CAREFULLY BEFORE OPENING THE SOFTW ARE MEDIA PACKAGE. BY -OPENING THE SOFTWARE MEDIA PACKAGE, YOU AGRE E TO THE TERMS -OF THIS AGREEMENT. IF YOU ARE ACCESSING THE SOFTWAR E -ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY -SELECTIN G THE "ACCEPT" BUTTON AT THE END OF THIS -AGREEMENT. IF YOU DO NOT AGREE TO ALL THESE TERMS, -PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR - PLACE OF PURCHASE FOR A REFUND OR, IF THE SOFTWARE IS - ACCESSED ELECT RONICALLY, SELECT THE "DECLINE" BUTTON AT -THE END OF THIS AGREEMENT. - - - - -1. LICENSE TO USE. Sun grants you a non-exclusive and -non-trans ferable license for the internal use only of the -accompanying softwar e and documentation and any error -corrections provided by Sun (collec tively "Software"), by -the number of users and the class of computer hardware for -which the corresponding fee has been paid. - - - -2. RESTRICTIONS. Software is confidential and -copyrighted. Titl e to Software and all associated -intellectual property rights is reta ined by Sun and/or its -licensors. Except as specifically authorize d in any -Supplemental License Terms, you may not make copies of -Softw are, other than a single copy of Software for -archival purposes. U nless enforcement is prohibited by -applicable law, you may not modify , decompile, or reverse -engineer Software. Licensee acknowledges t hat Software is -not designed or intended for use in the design, const -ruction, operation or maintenance of any nuclear facility. -Sun Micros ystems, Inc. disclaims any express or implied -warranty of fitness for - such uses. No right, title or interest in or to any - trademark, s ervice mark, logo or trade name of Sun or its -licensors is granted un der this Agreement. - - - -3. LIMITED WARRANTY. Sun warrants to you that for a -period of nin ety (90) days from the date of purchase, as -evidenced by a copy of th e receipt, the media on which -Software is furnished (if any) will be free of defects in -materials and workmanship under normal use. Exc ept for -the foregoing, Software is provided "AS IS". Your exclusiv -e remedy and Sun's entire liability under this limited -warranty will be at Sun's option to replace Software media -or refund the fee paid f or Software. - - - -4. DISCLAIMER OF WARRANTY. UNLESS SPECIFIED IN THIS -AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, -REPRESENTATIONS AND WARRANTIES, IN CLUDING ANY IMPLIED -WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTIC ULAR -PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE -EXTENT - THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. - - - -5. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED -BY LAW , IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE -FOR ANY LOST REVENU E, PROFIT OR DATA, OR FOR SPECIAL, -INDIRECT, CONSEQUENTIAL, INCIDENTA L OR PUNITIVE DAMAGES, -HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIA BILITY, -ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE -S OFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMA GES. In no event will Sun's liability to you, -whether in contract, - tort (including negligence), or otherwise, exceed the - amount paid by you for Software under this Agreement. The - foregoing limitations will apply even if the above stated -warranty fails of its essential p urpose. - - - -6. Termination. This Agreement is effective until -terminated. You may terminate this Agreement at any time -by destroying all co pies of Software. This Agreement will -terminate immediately withou t notice from Sun if you fail -to comply with any provision of this Ag reement. Upon -Termination, you must destroy all copies of Software -. - - - -7. Export Regulations. All Software and technical data -delivered und er this Agreement are subject to US export -control laws and may be su bject to export or import -regulations in other countries. You agre e to comply -strictly with all such laws and regulations and acknowled -ge that you have the responsibility to obtain such licenses -to export , re-export, or import as may be required after -delivery to you. - - - -8. U.S. Government Restricted Rights. If Software is -being acqu ired by or on behalf of the U.S. Government or -by a U.S. Government p rime contractor or subcontractor (at -any tier), then the Government's - rights in Software and accompanying documentation will be - only as se t forth in this Agreement; this is in -accordance with 48 CFR 227.7201 - through 227.7202-4 (for Department of Defense (DOD) - acquisitions) an d with 48 CFR 2.101 and 12.212 (for -non-DOD acquisitions). - - - -9. Governing Law. Any action related to this Agreement -will be governed by California law and controlling U.S. -federal law. No ch oice of law rules of any jurisdiction -will apply. - - - -10. Severability. If any provision of this Agreement is -held to be un enforceable, this Agreement will remain in -effect with the provision omitted, unless omission would -frustrate the intent of the parties, i n which case this -Agreement will immediately terminate. - - - -11. Integration. This Agreement is the entire agreement -between yo u and Sun relating to its subject matter. It -supersedes all prior or contemporaneous oral or written -communications, proposals, represe ntations and warranties -and prevails over any conflicting or addition al terms of -any quote, order, acknowledgment, or other communication -between the parties relating to its subject matter during -the term of - this Agreement. No modification of this Agreement will be - binding , unless in writing and signed by an authorized -representative of eac h party. - - - - - - JAVA ADVANCED IMAGING, VERSION 1.1.2 - - - - SUPPLEMENTAL LICENSE TERMS - - - -These supplemental license terms ("Supplemental Terms") add -to or mod ify the terms of the Binary Code License -Agreement (collectively, the - "Agreement"). Capitalized terms not defined in these - Supplemental Te rms shall have the same meanings ascribed -to them in the Agreement. T hese Supplemental Terms shall -supersede any inconsistent or conflicti ng terms in the -Agreement, or in any license contained within the Sof -tware. - - - -1. Software Internal Use and Development License Grant. -Subject to - the terms and conditions of this Agreement, including, but - not limit ed to Section 3 (Java Technology Restrictions) -of these Supplemental Terms, Sun grants you a -non-exclusive, non-transferable, limited lice nse to -reproduce internally and use internally the binary form of -the - Software, complete and unmodified, for the sole purpose of - designing , developing and testing your Java applets and -applications ("Program s"). - - - -2. License to Distribute Software. In addition to the -license gran ted in Section 1 (Software Internal Use and -Development License Grant ) of these Supplemental Terms, -subject to the terms and conditions of - this Agreement, including but not limited to, Section 3 - (Java Techno logy Restrictions) of these Supplemental -Terms, Sun grants you a non- exclusive, non-transferable, -limited license to reproduce and distrib ute the Software -in binary code form only, provided that you (i) dist ribute -the Software complete and unmodified and only bundled as -part of your Programs, (ii) do not distribute additional -software intended - to replace any component(s) of the Software, (iii) do not - remove or alter any proprietary legends or notices -contained in the Software, ( iv) only distribute the -Software subject to a license agreement that protects Sun's -interests consistent with the terms contained in this -Agreement, and (v) agree to defend and indemnify Sun and -its licensor s from and against any damages, costs, -liabilities, settlement amount s and/or expenses (including -attorneys' fees) incurred in connection with any claim, -lawsuit or action by any third party that arises or r -esults from the use or distribution of any and all Programs -and/or So ftware. - - - -3. Java Technology Restrictions. You may not modify the -Java Platform - Interface ("JPI", identified as classes contained within - the "java" package or any subpackages of the "java" -package), by creating additi onal classes within the JPI or -otherwise causing the addition to or m odification of the -classes in the JPI. In the event that you creat e an -additional class and associated API(s) which (i) extends -the fun ctionality of the Java platform, and (ii) is -exposed to third party s oftware developers for the purpose -of developing additional software which invokes such -additional API, you must promptly publish broadly an -accurate specification for such API for free use by all -developers -. You may not create, or authorize your licensees to create additi -onal classes, interfaces, or subpackages that are in any -way identifi ed as "java", "javax", "sun" or similar -convention as specified by Su n in any naming convention -designation. - - - -4. Java Runtime Availability. Refer to the appropriate -version of t he Java Runtime Environment binary code -license (currently located at - http://www.java.sun.com/jdk/index.html) for the - availability of runt ime code which may be distributed -with Java applets and applications. - - - -5. Trademarks and Logos. You acknowledge and agree as -between you and - Sun that Sun owns the SUN, SOLARIS, JAVA, JINI, FORTE, and - iPLANET t rademarks and all SUN, SOLARIS, JAVA, JINI, -FORTE, and iPLANET-relate d trademarks, service marks, -logos and other brand designations ("Sun - Marks"), and you agree to comply with the Sun Trademark - and Logo Usa ge Requirements currently located at -http://www.sun.com/policies/trad emarks. Any use you make -of the Sun Marks inures to Sun's benefit. - - - - -6. Source Code. Software may contain source code that is -provided sol ely for reference purposes pursuant to the -terms of this Agreement. Source code may not be -redistributed unless expressly provided fo r in this -Agreement. - - - -7. Termination for Infringement. Either party may -terminate this A greement immediately should any Software -become, or in either party's - opinion be likely to become, the subject of a claim of - infringement of any intellectual property right. - - - -For inquiries please contact: Sun Microsystems, Inc., 4150 -Network Ci rcle, Santa Clara, California 95054, U.S.A - -(LFI#143342/Form ID#011801) diff --git a/licenses/sun-jaicmm/LICENSE b/licenses/sun-jaicmm/LICENSE deleted file mode 100644 index 7d5585dbbcd..00000000000 --- a/licenses/sun-jaicmm/LICENSE +++ /dev/null @@ -1,186 +0,0 @@ -License for sun JAI ICC color profiles. Downloaded from -http://java.sun.com/products/java-media/jai/downloads/download-1_1_2.html - - - Java(TM) Advanced Imaging API - Version 1.0 - Binary Code License - -This binary code license ("License") contains -rights and restrictions associated with use of -the accompanying Java(TM) Advanced Imaging API -software and documentation ("Software"). Read the -License carefully before using the Software. By -using the Software you agree to the terms and -conditions of this License. - -1. License to Distribute. Licensee is granted a - royalty-free right to reproduce and - distribute the Software provided that - Licensee: - - (A) distributes the Software complete and - unmodified (except for the specific files - identified as optional in the Software - README file), only as part of, and for - the sole purpose of running, Licensee's - Java compatible applet or application - ("Program") into which the Software is - incorporated; - - (B) does not distribute additional software - intended to replace any component(s) of - the Software; - - (C) agrees to incorporate the most current - version of the Software that was - available 180 days prior to each - production release of the Program; - - (D) does not remove or alter any proprietary - legends or notices contained in the - Software; - - (E) includes the provisions of Sections 2, 3, - 5, 6, 8 and 9 in Licensee's license - agreement for the Program; and - - (F) agrees to indemnify, hold harmless, and - defend Sun and its licensors from and - against any claims or lawsuits, including - attorneys' fees, that arise or result - from the use or distribution of the - Program. - -2. Java Platform Interface. Licensee may not - modify the Java Platform Interface ("JPI", - identified as classes contained within the - "java" package or any subpackages of the - "java" package), by creating additional - classes within the JPI or otherwise causing - the addition to or modification of the - classes in the JPI. In the event that - Licensee creates any Java-related API and - distributes such API to others for applet or - application development, Licensee must - promptly publish broadly, an accurate - specification for such API for free use by - all developers of Java-based software. - -3. Restrictions. Software is confidential - copyrighted information of Sun and title to - all copies is retained by Sun and/or its - licensors. Licensee shall not decompile, - disassemble, decrypt, extract, or otherwise - reverse engineer Software. Software may not - be leased, assigned, or sublicensed, in whole - or in part, except as specifically authorized - in Section 1. Software is not designed or - intended for use in online control of - aircraft, air traffic, aircraft navigation or - aircraft communications; or in the design, - construction, operation or maintenance of any - nuclear facility. Licensee warrants that it - will not use or redistribute the Software for - such purposes. - -4. Trademarks and Logos. This License does not - authorize Licensee to use any Sun name, - trademark or logo. Licensee acknowledges that - Sun owns the Java trademark and all - Java-related trademarks, logos and icons - including the Coffee Cup and Duke ("Java - Marks") and agrees to: - - (A) comply with the Java Trademark Guidelines - at http://java.sun.com/trademarks.html; - - (B) not do anything harmful to or - inconsistent - with Sun's rights in the Java Marks; and - - (C) assist Sun in protecting those rights, - including assigning to Sun any rights - acquired by Licensee in any Java Mark. - -5. Disclaimer of Warranty. Software is provided - "AS IS," without a warranty of any kind. ALL - EXPRESS OR IMPLIED REPRESENTATIONS AND - WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE OR NON-INFRINGEMENT, ARE HEREBY - EXCLUDED. - -6. Limitation of Liability. SUN AND ITS -LICENSORS - SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED - BY LICENSEE OR ANY THIRD PARTY AS A RESULT OF - USING OR DISTRIBUTING SOFTWARE. IN NO EVENT - WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY - LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, - INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL - OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - REGARDLESS OF THE THEORY OF LIABILITY, - ARISING OUT OF THE USE OF OR INABILITY TO USE - SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGES. - -7. Termination. This license shall automatically - terminate 180 days after production release - of the next version of the Software by Sun. - Licensee may terminate this License at any - time by destroying all copies of Software. - This License will terminate immediately - without notice from Sun if Licensee fails to - comply with any provision of this License. - Upon such termination, Licensee must destroy - all copies of Software. - -8. Export Regulations. Software, including - technical data, is subject to U.S. export - control laws, including the U.S. Export - Administration Act and its associated - regulations, and may be subject to export or - import regulations in other countries. - Licensee agrees to comply strictly with all - such regulations and acknowledges that it has - the responsibility to obtain licenses to - export, re-export, or import Software. - Software may not be downloaded, or otherwise - exported or re-exported - - (A) into, or to a national or resident of, - Cuba, Iraq, Iran, North Korea, Libya, - Sudan, Syria or any country to which the - U.S. has embargoed goods; or - - (B) to anyone on the U.S. Treasury - Department's list of Specially Designated - Nations or the U.S. Commerce Department's - Table of Denial Orders. - -9. Restricted Rights. Use, duplication or - disclosure by the United States government is - subject to the restrictions as set forth in - the Rights in Technical Data and Computer - Software Clauses in DFARS 252.227-7013(c) (1) - (ii) and FAR 52.227-19(c) (2) as applicable. - -10. Governing Law. Any action related to this - License will be governed by California law - and controlling U.S. federal law. No choice - of law rules of any jurisdiction will apply. - -11. Severability. If any of the above provisions - are held to be in violation of applicable - law, void, or unenforceable in any - jurisdiction, then such provisions are - herewith waived or amended to the extent - necessary for the License to be otherwise - enforceable in such jurisdiction. However, - if in Sun's opinion deletion or amendment of - any provisions of the License by operation of - this paragraph unreasonably compromises the - rights or increase the liabilities of Sun or - its licensors, Sun reserves the right to - terminate the License. diff --git a/licenses/sun-jaicmm/LICENSE-jai.txt b/licenses/sun-jaicmm/LICENSE-jai.txt deleted file mode 100644 index a9c43b9bdba..00000000000 --- a/licenses/sun-jaicmm/LICENSE-jai.txt +++ /dev/null @@ -1,55 +0,0 @@ -Sun Microsystems, Inc. -Binary Code License Agreement - -JAVA ADVANCED IMAGING API, VERSION 1.1.3 - -READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED SUPPLEMENTAL LICENSE TERMS (COLLECTIVELY "AGREEMENT") CAREFULLY BEFORE OPENING THE SOFTWARE MEDIA PACKAGE. BY OPENING THE SOFTWARE MEDIA PACKAGE, YOU AGREE TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY SELECTING THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL THESE TERMS, PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR PLACE OF PURCHASE FOR A REFUND OR, IF THE SOFTWARE IS ACCESSED ELECTRONICALLY, SELECT THE "DECLINE" BUTTON AT THE END OF THIS AGREEMENT. - -1. LICENSE TO USE. Sun grants you a non-exclusive and non-transferable license for the internal use only of the accompanying software and documentation and any error corrections provided by Sun (collectively "Software"), by the number of users and the class of computer hardware for which the corresponding fee has been paid. - -2. RESTRICTIONS. Software is confidential and copyrighted. Title to Software and all associated intellectual property rights is retained by Sun and/or its licensors. Except as specifically authorized in any Supplemental License Terms, you may not make copies of Software, other than a single copy of Software for archival purposes. Unless enforcement is prohibited by applicable law, you may not modify, decompile, or reverse engineer Software. Licensee acknowledges that Software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility. Sun Microsystems, Inc. disclaims any express or implied warranty of fitness for such uses. No right, title or interest in or to any trademark, service mark, logo or trade name of Sun or its licensors is granted under this Agreement. - -3. LIMITED WARRANTY. Sun warrants to you that for a period of ninety (90) days from the date of purchase, as evidenced by a copy of the receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, Software is provided "AS IS". Your exclusive remedy and Sun's entire liability under this limited warranty will be at Sun's option to replace Software media or refund the fee paid for Software. - -4. DISCLAIMER OF WARRANTY. UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. - -5. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will Sun's liability to you, whether in contract, tort (including negligence), or otherwise, exceed the amount paid by you for Software under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose. - -6. Termination. This Agreement is effective until terminated. You may terminate this Agreement at any time by destroying all copies of Software. This Agreement will terminate immediately without notice from Sun if you fail to comply with any provision of this Agreement. Upon Termination, you must destroy all copies of Software. - -7. Export Regulations. All Software and technical data delivered under this Agreement are subject to US export control laws and may be subject to export or import regulations in other countries. You agree to comply strictly with all such laws and regulations and acknowledge that you have the responsibility to obtain such licenses to export, re-export, or import as may be required after delivery to you. - -8. U.S. Government Restricted Rights. If Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in Software and accompanying documentation will be only as set forth in this Agreement; this is in accordance with 48 CFR 227.7201 through 227.7202-4 (for Department of Defense (DOD) acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD acquisitions). - -9. Governing Law. Any action related to this Agreement will be governed by California law and controlling U.S. federal law. No choice of law rules of any jurisdiction will apply. - -10. Severability. If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate. - -11. Integration. This Agreement is the entire agreement between you and Sun relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter during the term of this Agreement. No modification of this Agreement will be binding, unless in writing and signed by an authorized representative of each party. - - - JAVA ADVANCED IMAGING, VERSION 1.1.3 - - SUPPLEMENTAL LICENSE TERMS - -These supplemental license terms ("Supplemental Terms") add to or modify the terms of the Binary Code License Agreement (collectively, the "Agreement"). Capitalized terms not defined in these Supplemental Terms shall have the same meanings ascribed to them in the Agreement. These Supplemental Terms shall supersede any inconsistent or conflicting terms in the Agreement, or in any license contained within the Software. - -1. Software Internal Use and Development License Grant. Subject to the terms and conditions of this Agreement, including, but not limited to Section 3 (Java Technology Restrictions) of these Supplemental Terms, Sun grants you a non-exclusive, non-transferable, limited license to reproduce internally and use internally the binary form of the Software, complete and unmodified, for the sole purpose of designing, developing and testing your Java applets and applications ("Programs"). - -2. License to Distribute Software. In addition to the license granted in Section 1 (Software Internal Use and Development License Grant) of these Supplemental Terms, subject to the terms and conditions of this Agreement, including but not limited to, Section 3 (Java Technology Restrictions) of these Supplemental Terms, Sun grants you a non-exclusive, non-transferable, limited license to reproduce and distribute the Software in binary code form only, provided that you (i) distribute the Software complete and unmodified and only bundled as part of your Programs, (ii) do not distribute additional software intended to replace any component(s) of the Software, (iii) do not remove or alter any proprietary legends or notices contained in the Software, (iv) only distribute the Software subject to a license agreement that protects Sun's interests consistent with the terms contained in this Agreement, and (v) agree to defend and indemnify Sun and its licensors from and against any damages, costs, liabilities, settlement amounts and/or expenses (including attorneys' fees) incurred in connection with any claim, lawsuit or action by any third party that arises or results from the use or distribution of any and all Programs and/or Software. - -3. Java Technology Restrictions. You may not modify the Java Platform Interface ("JPI", identified as classes contained within the "java" package or any subpackages of the "java" package), by creating additional classes within the JPI or otherwise causing the addition to or modification of the classes in the JPI. In the event that you create an additional class and associated API(s) which (i) extends the functionality of the Java platform, and (ii) is exposed to third party software developers for the purpose of developing additional software which invokes such additional API, you must promptly publish broadly an accurate specification for such API for free use by all developers. You may not create, or authorize your licensees to create additional classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar convention as specified by Sun in any naming convention designation. - -4. Java Runtime Availability. Refer to the appropriate version of the Java Runtime Environment binary code license (currently located at http://www.java.sun.com/jdk/index.html) for the availability of runtime code which may be distributed with Java applets and applications. - -5. Trademarks and Logos. You acknowledge and agree as between you and Sun that Sun owns the SUN, SOLARIS, JAVA, JINI, FORTE, and iPLANET trademarks and all SUN, SOLARIS, JAVA, JINI, FORTE, and iPLANET-related trademarks, service marks, logos and other brand designations ("Sun Marks"), and you agree to comply with the Sun Trademark and Logo Usage Requirements currently located at http://www.sun.com/policies/trademarks. Any use you make of the Sun Marks inures to Sun's benefit. - -6. Source Code. Software may contain source code that is provided solely for reference purposes pursuant to the terms of this Agreement. Source code may not be redistributed unless expressly provided for in this Agreement. - -7. Termination for Infringement. Either party may terminate this Agreement immediately should any Software become, or in either party's opinion be likely to become, the subject of a claim of infringement of any intellectual property right. - -8. Third Party Code. Additional copyright notices and license terms applicable to portions of the Software are set forth in the THIRDPARTYLICENSEREADME. In addition to any terms and conditions of any third party open source/freeware license identified in the THIRDPARTYLICENSEREADME, the disclaimer of warranty and limitation of liability provisions in paragraphs 5 and 6 of the Binary Code License Agreement shall apply to all Software in this distribution. - -For inquiries please contact: Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A - -(LFI#143342/Form ID#011801) diff --git a/licenses/sun-jaicmm/THIRDPARTYLICENSEREADME-jai.txt b/licenses/sun-jaicmm/THIRDPARTYLICENSEREADME-jai.txt deleted file mode 100644 index c9d75aa8f05..00000000000 --- a/licenses/sun-jaicmm/THIRDPARTYLICENSEREADME-jai.txt +++ /dev/null @@ -1,54 +0,0 @@ -DO NOT TRANSLATE OR LOCALIZE. - -%% The following software may be included in this product: NeuQuant Color Quantization. Use of any of this software is governed by the terms of the license below: - -* NeuQuant Neural-Net Quantization Algorithm - * ------------------------------------------ - * - * Copyright (c) 1994 Anthony Dekker - * - * NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. - * See "Kohonen neural networks for optimal colour quantization" - * in "Network: Computation in Neural Systems" Vol. 5 (1994) pp 351-367. - * for a discussion of the algorithm. - * See also http://www.acm.org/~dekker/NEUQUANT.HTML - * - * Any party obtaining a copy of these files from the author, directly or - * indirectly, is granted, free of charge, a full and unrestricted irrevocable, - * world-wide, paid up, royalty-free, nonexclusive right and license to deal - * in this software and documentation files (the "Software"), including without - * limitation the rights to use, copy, modify, merge, publish, distribute, -sublicense, - * and/or sell copies of the Software, and to permit persons who receive - * copies from any such party to do so, with the only requirement being - * that this copyright notice remain intact. - */ - -%% The following software may be included in this product: Oct-Tree Color Quantization. Use of any of this software is governed by the terms of the license below: - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Permission is hereby granted, free of charge, to any person obtaining a % -% copy of this software and associated documentation files ("ImageMagick"), % -% to deal in ImageMagick without restriction, including without limitation % -% the rights to use, copy, modify, merge, publish, distribute, sublicense, % -% and/or sell copies of ImageMagick, and to permit persons to whom the % -% ImageMagick 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 ImageMagick. % -% % -% 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 % -% E. I. du Pont de Nemours and Company 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 ImageMagick or the use or other % -% dealings in ImageMagick. % -% % -% Except as contained in this notice, the name of the E. I. du Pont de % -% Nemours and Company shall not be used in advertising or otherwise to % -% promote the sale, use or other dealings in ImageMagick without prior % -% written authorization from the E. I. du Pont de Nemours and Company. % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - diff --git a/parent/pom.xml b/parent/pom.xml new file mode 100644 index 00000000000..6ad98a55b79 --- /dev/null +++ b/parent/pom.xml @@ -0,0 +1,474 @@ + + + + + + 4.0.0 + + + org.apache + apache + 21 + + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + pom + + PDFBox parent + 2002 + + + The Apache Software Foundation + http://pdfbox.apache.org + + + + jira + https://issues.apache.org/jira/browse/PDFBOX + + + + UTF-8 + UTF-8 + + 1.61 + + + + + + junit + junit + 4.12 + test + + + commons-logging + commons-logging + 1.2 + + + commons-io + commons-io + 2.6 + test + + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + + + org.bouncycastle + bcmail-jdk15on + ${bouncycastle.version} + + + org.bouncycastle + bcpkix-jdk15on + ${bouncycastle.version} + + + + org.apache.pdfbox + jbig2-imageio + 3.0.2 + test + + + + + com.github.jai-imageio + jai-imageio-core + 1.4.0 + test + + + com.github.jai-imageio + jai-imageio-jpeg2000 + 1.3.0 + test + + + + + + + + jdk9 + + + [9,10] + + + --add-modules java.xml.bind + + + + + + jdk11 + + [11,) + + + + + javax.xml.bind + jaxb-api + 2.3.1 + + + + + + pedantic + + + + org.apache.rat + apache-rat-plugin + + + verify + + check + + + + + + org.owasp + dependency-check-maven + 4.0.2 + + true + + true + + + + + check + + + + + + + + + + + + + maven-compiler-plugin + + true + 1.7 + 1.7 + UTF-8 + + + + maven-javadoc-plugin + + 1.7 + + https://docs.oracle.com/javase/7/docs/api/ + + UTF-8 + true + en + + + + maven-release-plugin + + false + deploy + -Papache-release,pedantic + true + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + true + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + org.codehaus.mojo + animal-sniffer-maven-plugin + 1.17 + + + check-java-version + test + + check + + + ${skipTests} + + org.codehaus.mojo.signature + java17 + 1.0 + + + + + + + com.googlecode.maven-download-plugin + download-maven-plugin + 1.3.0 + + ${skipTests} + + + + + + + maven-enforcer-plugin + + + + enforce + + + + + 3.5 + + + + + + + + org.apache.rat + apache-rat-plugin + + + release.properties + + + + + org.apache.felix + maven-bundle-plugin + 4.1.0 + + + + + + + + + lehmi + Andreas Lehmkühler + + PMC Chair + + + + adam + Adam Nichols + + PMC Member + + + + blitchfield + Ben Litchfield + + PMC Member + + + + carrier + Brian Carrier + + PMC Member + + + + danielwilson + Daniel Wilson + + PMC Member + + + + gbailleul + Guillaume Bailleul + + PMC Member + + + + hennejg + Jörg Henne + + PMC Member + + + + holdersn + Sebastian Holder + + PMC Member + + + + jahewson + John Hewson + + PMC Member + + + + jeremias + Jeremias Maerki + + PMC Member + + + + kjackson + Kevin Jackson + + PMC Member + + + + koch + Johannes Koch + + PMC Member + + + + koehlecn + Carolin Köhler + + PMC Member + + + + mmayer + Matthäus Mayer + + PMC Member + + + + msahyoun + Maruan Sahyoun + + PMC Member + + + + pkoch + Phillipp Koch + + PMC Member + + + + tallison + Tim Allison + + PMC Member + + + + tchojecki + Thomas Chojecki + + PMC Member + + + + tboehme + Timo Boehme + + PMC Member + + + + tilman + Tilman Hausherr + + PMC Member + + + + vfed + Villu Ruusmann + + PMC Member + + + + leleueri + Eric Leleu + + Emeritus PMC Member + + + + jukka + Jukka Zitting + + Emeritus PMC Member + + + + diff --git a/pdfbox-checkstyle-5.xml b/pdfbox-checkstyle-5.xml new file mode 100644 index 00000000000..ee04bbaccec --- /dev/null +++ b/pdfbox-checkstyle-5.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pdfbox-checkstyle.xml b/pdfbox-checkstyle.xml deleted file mode 100644 index 87683cee60c..00000000000 --- a/pdfbox-checkstyle.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pdfbox-eclipse-formatter.xml b/pdfbox-eclipse-formatter.xml new file mode 100755 index 00000000000..b474b54c6b9 --- /dev/null +++ b/pdfbox-eclipse-formatter.xml @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pdfbox.war/WEB-INF/web.xml b/pdfbox.war/WEB-INF/web.xml deleted file mode 100644 index f850f44db3d..00000000000 --- a/pdfbox.war/WEB-INF/web.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Web application for PDFBox examples. - diff --git a/pdfbox.war/bookmarks.xml b/pdfbox.war/bookmarks.xml deleted file mode 100644 index 5a0b9dbb311..00000000000 --- a/pdfbox.war/bookmarks.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - diff --git a/pdfbox.war/highlight.jsp b/pdfbox.war/highlight.jsp deleted file mode 100644 index a2629df09c1..00000000000 --- a/pdfbox.war/highlight.jsp +++ /dev/null @@ -1,47 +0,0 @@ - -<%@ page import="org.pdfbox.pdmodel.PDDocument"%> -<%@ page import="org.pdfbox.util.PDFHighlighter"%> -<%@ page import="java.net.URL"%> - -<% - long start = System.currentTimeMillis(); - response.setHeader("Cache-Control","no-cache") ; - response.setHeader("Pragma","no-cache") ; - response.setDateHeader("Expires",0); - - String pdfURLString = request.getParameter( "pdf" ); - String highlightWords = request.getParameter( "words" ); - - URL pdfURL = new URL( pdfURLString ); - PDDocument doc = null; - try - { - doc = PDDocument.load( pdfURL.openStream() ); - PDFHighlighter highlighter = new PDFHighlighter(); - highlighter.generateXMLHighlight( doc, highlightWords.split( " " ), out ); - } - finally - { - if( doc != null ) - { - doc.close(); - } - } - long stop = System.currentTimeMillis(); - System.out.println( "Highlighter time:" +(stop-start) ); -%> diff --git a/pdfbox.war/index.html b/pdfbox.war/index.html deleted file mode 100644 index afa62443925..00000000000 --- a/pdfbox.war/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - PDFBox Examples - - - - - - -

PDFBox Highlighter example

- -This is a simple example to show off the PDFBox highlighting capabilities. Enter a URL PDF that you would like to view and -some words that you would like to search on.

- -See the PDF Highlighter spec for more detailed information. - -
-PDF:
-Highligh words:

- -
- - - - diff --git a/pdfbox/pom.xml b/pdfbox/pom.xml new file mode 100644 index 00000000000..d5109226d67 --- /dev/null +++ b/pdfbox/pom.xml @@ -0,0 +1,655 @@ + + + + + + 4.0.0 + + + org.apache.pdfbox + pdfbox-parent + 3.0.0-SNAPSHOT + ../parent/pom.xml + + + pdfbox + bundle + + Apache PDFBox + + The Apache PDFBox library is an open source Java tool for working with PDF documents. + + 2002 + + + git:https://git-wip-us.apache.org/repos/asf/pdfbox-docs//content/docs/${project.version}/javadocs + + + + + org.apache.pdfbox + fontbox + ${project.version} + + + commons-logging + commons-logging + + + org.bouncycastle + bcmail-jdk15on + true + + + org.bouncycastle + bcprov-jdk15on + true + + + junit + junit + test + + + com.googlecode.java-diff-utils + diffutils + 1.3.0 + test + + + org.apache.pdfbox + jbig2-imageio + test + + + + com.github.jai-imageio + jai-imageio-core + test + + + com.github.jai-imageio + jai-imageio-jpeg2000 + test + + + + + + + src/main/resources + true + + **/*.properties + + + + src/main/resources + false + + **/*.properties + + + + + + maven-surefire-plugin + + -Xmx768m + + org/apache/pdfbox/rendering/TestPDFToImage.java + + + src/test/resources/logging.properties + + + + + org.apache.felix + maven-bundle-plugin + true + + + + {maven-resources}, + META-INF=target/maven-shared-archive-resources/META-INF, + org/apache/pdfbox/resources=target/classes/org/apache/pdfbox/resources + + + + + + org.apache.rat + apache-rat-plugin + + + src/main/resources/org/apache/pdfbox/resources/afm/* + src/main/resources/org/apache/pdfbox/resources/icc/* + src/main/resources/org/apache/pdfbox/resources/glyphlist/glyphlist.txt + src/main/resources/org/apache/pdfbox/resources/glyphlist/zapfdingbats.txt + src/main/resources/org/apache/pdfbox/resources/text/BidiMirroring.txt + src/main/resources/META-INF/services/* + src/test/resources/input/rendering/*.ai + src/test/resources/input/*.txt + src/test/resources/output/* + src/test/resources/org/apache/pdfbox/pdmodel/sRGB.* + src/test/resources/org/apache/pdfbox/pdfparser/*.fdf + release.properties + src/test/resources/org/apache/pdfbox/encryption/*.der + src/test/resources/org/apache/pdfbox/encryption/*.pfx + src/test/resources/org/apache/pdfbox/filter/*.bin + src/test/resources/org/apache/pdfbox/text/*.txt + src/main/java/org/apache/pdfbox/filter/CCITTFaxDecoderStream.java + src/main/java/org/apache/pdfbox/filter/CCITTFaxEncoderStream.java + src/main/java/org/apache/pdfbox/filter/TIFFExtension.java + + + + + + org.apache.maven.plugins + maven-scm-publish-plugin + + ${project.reporting.outputDirectory}/apidocs + scm:${git.scmJavadocUrl} + true + ${svn.scmJavadocCheckoutDirectory} + pdfbox-site + + + + + + com.googlecode.maven-download-plugin + download-maven-plugin + + + PDFBOX-1031-1 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12481683/1.pdf + ${project.build.directory}/pdfs + PDFBOX-1031-1.pdf + f943df43cc2a6929caa484c79eafa44b06a5902e325139e19e1f1ebda7c5fd0c86cc221311659d68351c0ff56d921350ff61e97b9d2c425180d810842c963a5b + + + + PDFBOX-1031-2 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12481684/2.pdf + ${project.build.directory}/pdfs + PDFBOX-1031-2.pdf + 8a9e836ad77c3e9e1e75476f4b46ff4b8958c099970bf57a0b4789fd37236b2bed7e1f14909fa0e3bbacf1a867c1a5c56cbe293383275c1b9c6c0396bec51085 + + + + PDFBOX-1065-1 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12486525/1_testfile1.pdf + ${project.build.directory}/pdfs + PDFBOX-1065-1.pdf + 6b44f363653a9c0cba049495d0ed67659f98b2622b25d647ae556dc4a708847f6c3e4428aa5de2fa0d67f5e8ba08183abf9e8e640e474c6b00c544782e3bba3e + + + + PDFBOX-1065-2 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12486526/2_testfile1.pdf + ${project.build.directory}/pdfs + PDFBOX-1065-2.pdf + 3b19a2a4c35fbacb36774553bedc0b3f2caf60d96aa021a9151d1f18a248577f13229f101ed7ed4375f36b9f481c0488ceb5ac00e4669d6802cd7cee1b0b4ad7 + + + + PDFBOX-1100-1 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12490774/a.pdf + ${project.build.directory}/pdfs + PDFBOX-1100-1.pdf + 9e59c8eb5cde5823a78e8e773bab393ab52eb5ac3f3a576b5d665d0267dca9c677abe08bb3b503a8ebf43479b4e6f61725ad85affd95803e12009c0b1919111a + + + + PDFBOX-1100-2 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12490775/b.pdf + ${project.build.directory}/pdfs + PDFBOX-1100-2.pdf + f55ec23a9b7350410eef95e6bd6de3c3605fa3dc2e9f9c28dfd2f6007bd693da252787350ad6d1d49570ee07fbbfcaba1f8638c1d7e63d4a8875f44c39867e6f + + + + PDFBOX-3208 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12784025/PDFBOX-3208-L33MUTT2SVCWGCS6UIYL5TH3PNPXHIS6.pdf + ${project.build.directory}/pdfs + 5aa19dff76b980ad43c873b7a47f089b3914468e0eaca320d67e18cbfa121c99b9e65bfb86d1b106b034bc6e6833f79c54b3d0c064695f5eac5a2797da687ef2 + + + + PDFBOX-3656 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12848122/SF1199AEG%20%28Complete%29.pdf + ${project.build.directory}/pdfs + PDFBOX-3656.pdf + 031d958a84cbd9eb520e5af308f635b37c48b77f7df4e43ecbcdabd04f4ba8574fac71b62548594b0f26e9e4e7fa3c1c7679d66c2a8e4bf141157fb6e50df97d + + + + PDFBOX-3682 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12852207/test.pdf + ${project.build.directory}/pdfs + PDFBOX-3682.pdf + b57628fc15898c1fbd5947c93659aa40b34071a2e8cf04e46ff787cb01687668456e59a13c3fba8b56ab0ef76c933408b3b0f3a781990bfd475cd8fa4325d730 + + + + PDFBOX-3940 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12888957/079977.pdf + ${project.build.directory}/pdfs + PDFBOX-3940-079977.pdf + f4a8875b03422af85a03ece2d46edffbb72e98b58c87584a936c2e80b0ef4c87e069b6f8e9237a61187e640f6a1059c4516beedcea50cd323f6788dc1e9f6482 + + + + PDFBOX-3783 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12867102/PDFBOX-3783-72GLBIGUC6LB46ELZFBARRJTLN4RBSQM.pdf + ${project.build.directory}/pdfs + 158ce94951c6166193065120023badf90e9d0f84a436583acabd59d9290a58eb1459c29dab2fd65f59368a9b39ee62b786771f92cc823df9b4f41d14448fcc81 + + + + PDFBOX-3785 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12867113/202097.pdf + ${project.build.directory}/pdfs + PDFBOX-3785-202097.pdf + 5031db8cee73aa5199afb0c45dfec284fa6903a5ff31f27788893cfdf80474156f0d5d6feb7947323f874f37d15acfbccfecd4ca5a5cc9edc46d63c9e606a3eb + + + + PDFBOX-3947 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12890031/670064.pdf + ${project.build.directory}/pdfs + PDFBOX-3947-670064.pdf + 7005a6314ae625b7514f429d8ebe146c4d47f715cb8816403134ab047a1f78664c1e95c92413d52b87c4cfcfcb660265d6fe086e4bd3c44ee767151e3fee115e + + + + PDFBOX-3948 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12890034/EUWO6SQS5TM4VGOMRD3FLXZHU35V2CP2.pdf + ${project.build.directory}/pdfs + PDFBOX-3948-EUWO6SQS5TM4VGOMRD3FLXZHU35V2CP2.pdf + f8a9b0b9ea6132f24e54136a40ad99d67df2402f3849a5cb0b7d80cd72298737fe4701e0e77ddd602a06e3ea0a7e107ca40d8d29389eea5834ff37245829c2d2 + + + + PDFBOX-3949 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12890037/MKFYUGZWS3OPXLLVU2Z4LWCTVA5WNOGF.pdf + ${project.build.directory}/pdfs + PDFBOX-3949-MKFYUGZWS3OPXLLVU2Z4LWCTVA5WNOGF.pdf + f450fb40ed5589ce0f390eb110d78bc721b766c34b753770b0cb00b2e40ffe15878f54df2423ab99d7df80dd91512858bf56a7cdc392d5c179b4440176fdd2fb + + + + PDFBOX-3950 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12890042/23EGDHXSBBYQLKYOKGZUOVYVNE675PRD.pdf + ${project.build.directory}/pdfs + PDFBOX-3950-23EGDHXSBBYQLKYOKGZUOVYVNE675PRD.pdf + ee1d464c3ed2ad91a4cafbc474b38e5c961282f53ef599d6d10e02058da5a67064550ddc54774dfa843a8b45f34b7e6e8ab4f9a445ba459fdcd858e8dce65b25 + + + + PDFBOX-3951 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12890047/FIHUZWDDL2VGPOE34N6YHWSIGSH5LVGZ.pdf + ${project.build.directory}/pdfs + PDFBOX-3951-FIHUZWDDL2VGPOE34N6YHWSIGSH5LVGZ.pdf + 2c0b91beb4a2b098738512fefdd40135bf66286cd350ac4e155a5a0150d649acb1da819c817ee9822e8686f526af6b7862fc63a0dae6dc7f1407c7f8b271c65e + + + + PDFBOX-3964 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12892097/c687766d68ac766be3f02aaec5e0d713_2.pdf + ${project.build.directory}/pdfs + PDFBOX-3964-c687766d68ac766be3f02aaec5e0d713_2.pdf + 0457fd291a7f83f531fef205128929c8fa8147dd781ea7b7cd49d4d1287941989e72739329a7b172c6f53df0b54d991b514b9baa6145effa8ec7705ef273877b + + + + PDFBOX-3977 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12893582/63NGFQRI44HQNPIPEJH5W2TBM6DJZWMI.pdf + ${project.build.directory}/pdfs + PDFBOX-3977-63NGFQRI44HQNPIPEJH5W2TBM6DJZWMI.pdf + 42a47b7b800ec035895af73f6793b7155652ce7b06db28ff97939e52b4fbce321fc45064480359c3371e90a7a47f5e20843a9ba71d4597b9bc3516fa17cfbb32 + + + + Genko + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12867433/genko_oc_shiryo1.pdf + ${project.build.directory}/pdfs + 71888e06a0323ac6196c5942c5961f76f8a4d8c6913114aaa9e215f43112cfa5f1b741b7c801e794dc44e62c2d34bfaafe89267a4c7de753e4da1481b35820f3 + + + + PDFBOX-3999 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12896905/GeneralForbearance.pdf + ${project.build.directory}/pdfs + PDFBOX-3999-GeneralForbearance.pdf + 6ed5287342ec8a5459a86462d80917bb625d5973df96fdebd5e3c8bc2e9093e6c389f5c8151eb17472a24e1349386a3e7c1a0021e9a967761a554ac1ade557eb + + + + PDFBOX-4106 + generate-test-resources + + wget + + + https://ipafont.ipa.go.jp/old/ipafont/ipag00303.php + ${project.build.directory}/fonts + ipag00303.zip + true + 59535137c649a2f8bdbb463cd716426811a6003a65883ca6e45bb0af1d526b3889af0fba3a353e90bc8d373cd32b90a27ff9ff6916ecbccb42e922c09e9b046a + + + + PDFBOX-4106b + generate-test-resources + + wget + + + https://ipafont.ipa.go.jp/old/ipafont/ipagp00303.php + ${project.build.directory}/fonts + ipagp00303.zip + true + 26d0a9bfba7f5457a98b0bf45a4a6b081bca4140047a0886625691231459f8c81a6cdbe523e9abcbd45fd7caed21d78f1baf3a2cf9167320f6b79be3d697cb5b + + + + PDFBOX-4115 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12911053/n019003l.pfb + ${project.build.directory}/fonts + n019003l.pfb + 8eafe21ffa6f3d7d0a50e9f4e5bcdeb727e804b552d74e65b709e778c9ed4605e5aa63743be285f0bc17ad162768583fec4196e1d1146d98f8703359247f22d0 + + + + PDFBOX-4197 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12919726/sample.pdf + ${project.build.directory}/pdfs + PDFBOX-4197.pdf + 6fefc869dff9db8cd539db177d35beeacc62304173245742eaee8882dab330860a31cbbd4c4ec6cc724603cc453afc07ec61361fbc1e80a47f44b04ccfbaf40d + + + + PDFBOX-4184 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12949710/032163.jpg + + ${project.build.directory}/imgs + PDFBOX-4184-032163.jpg + 35241c979d3808ca9d2641b5ec5e40637132b313f75070faca8b8f6d00ddce394070414236db3993f1092fe3bc16995750d528b6d803a7851423c14c308ccdde + + + + PDFBOX-4184-2 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12929821/16bit.png + + ${project.build.directory}/imgs + PDFBOX-4184-16bit.png + 45f148913590ea1a94c3ac17080969b74e579fe51967a5bf535caa3f7104ea81ee222b99deb8ee528b0a53640f97d87cf668633a1bdd61a62092246df1807471 + + + + PDFBOX-4308 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12938094/Quelldatei.pdf + ${project.build.directory}/pdfs + PDFBOX-4308.pdf + 566346239d51f10b2ccfc435620e8f3b0281e91286983cb86660060a8d48777998eab46dfda93d35024e7e4b50b7ab6654f9a1002524163d228a5e41a80a1221 + + + + PDFBOX-4338 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12943502/ArrayIndexOutOfBoundsException%20COSParser + ${project.build.directory}/pdfs + PDFBOX-4338.pdf + 130fa4b49345410b203613f3e67263f483f9a9797bef22322647655bb55cc55bcb1d1e0eb03c27f6f2855b3823675b27e8899d8eeb880d27a74fad5f60f23b47 + + + + PDFBOX-4339 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12943503/NullPointerException%20COSParser + ${project.build.directory}/pdfs + PDFBOX-4339.pdf + 2e48aeae83ef6fc4c5f95aafdfe8c76dd8d2dcf3516701c70ffeb14f06ba246a17c21f2dadf8fa48bccef5b72daffdd30ed7c9aa7f5183ddf889968caa2ded6a + + + + PDFBOX-4408 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12952086/form.pdf + ${project.build.directory}/pdfs + PDFBOX-4408.pdf + eaabebdc39eb9df2f96de4d322ce02478c61193311fdbabf310995cbab55d72e80047bd562d506c391f53a15b1cac9a5d225245b1c5d8a0745acd1b506f571f8 + + + + PDFBOX-4418-1 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12953423/000314.pdf + ${project.build.directory}/pdfs + PDFBOX-4418-000314.pdf + 1e16476ff9cdf11fdcb8bfd7d1e6e434d85bce187164936d352846e6804694cd89c9f789da1b9fcae13b51058c1bab0cc4f50dd63e3544ab02050b00044cc5df + + + + PDFBOX-4418-2 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12953421/000671.pdf + ${project.build.directory}/pdfs + PDFBOX-4418-000671.pdf + a0fc0cfd42cb7eb8d521db259f53723f1e8a1618e740e89c787157f85623ed3f8a85b1920933328dfef355c8a468f26c459f37eeeaf5cdafa86540b56fb46090 + + + + PDFBOX-4423 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12953866/000746.pdf + ${project.build.directory}/pdfs + PDFBOX-4423-000746.pdf + 42a61d0061b0b3b0bcc92c9f3ddc78daca79e9d5ea56c19796270316fb7cf3858db9f51efafa3776e1fef17f85202b35c8eed0e88ba6b7ebc7bb05c6014b9fc8 + + + + PDFBOX-4517 + generate-test-resources + + wget + + + https://issues.apache.org/jira/secure/attachment/12966453/cryptfilter.pdf + ${project.build.directory}/pdfs + PDFBOX-4517-cryptfilter.pdf + ed55a65bad6f91104846d28e9e7dcb18b11efbf980a74781350551428bbaecba375d9e22af02edf0f91263c7f668e93ec7c52d397898b7640c2d60e7dd3ae940 + + + + + + + + + diff --git a/pdfbox/src/main/appended-resources/META-INF/LICENSE b/pdfbox/src/main/appended-resources/META-INF/LICENSE new file mode 100644 index 00000000000..5ecb41e5c9a --- /dev/null +++ b/pdfbox/src/main/appended-resources/META-INF/LICENSE @@ -0,0 +1,741 @@ + +EXTERNAL COMPONENTS + +Apache PDFBox includes a number of components with separate copyright notices +and license terms. Your use of these components is subject to the terms and +conditions of the following licenses. + +Contributions made to the original PDFBox project: + + Copyright (c) 2002-2007, www.pdfbox.org + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of pdfbox; nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Adobe Font Metrics (AFM) for PDF Core 14 Fonts + + 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. + +CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads) + + Copyright 1990-2009 Adobe Systems Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + +Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html) + + Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file to use, copy, publish, distribute, + sublicense, and/or sell copies of the documentation, and to permit + others to do the same, provided that: + - No modification, editing or other alteration of this document is + allowed; and + - The above copyright notice and this permission notice shall be + included in all copies of the documentation. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this documentation file, to create their own derivative works + from the content of this document to use, copy, publish, distribute, + sublicense, and/or sell the derivative works, and to permit others to do + the same, provided that the derived work is not represented as being a + copy or version of this document. + + Adobe shall not be liable to any party for any loss of revenue or profit + or for indirect, incidental, special, consequential, or other similar + damages, whether based on tort (including without limitation negligence + or strict liability), contract or other legal or equitable grounds even + if Adobe has been advised or had reason to know of the possibility of + such damages. The Adobe materials are provided on an "AS IS" basis. + Adobe specifically disclaims all express, statutory, or implied + warranties relating to the Adobe materials, including but not limited to + those concerning merchantability or fitness for a particular purpose or + non-infringement of any third party rights regarding the Adobe + materials. + +Liberation Fonts (https://fedorahosted.org/liberation-fonts) + + Digitized data copyright (c) 2010 Google Corporation + with Reserved Font Arimo, Tinos and Cousine. + Copyright (c) 2012 Red Hat, Inc. + with Reserved Font Name Liberation. + + This Font Software is licensed under the SIL Open Font License, + Version 1.1. + + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + + PREAMBLE The goals of the Open Font License (OFL) are to stimulate + worldwide development of collaborative font projects, to support the font + creation efforts of academic and linguistic communities, and to provide + a free and open framework in which fonts may be shared and improved in + partnership with others. + + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. + The fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply to + any document created using the fonts or their derivatives. + + DEFINITIONS + "Font Software" refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. + This may include source files, build scripts and documentation. + + "Reserved Font Name" refers to any names specified as such after the + copyright statement(s). + + "Original Version" refers to the collection of Font Software components + as distributed by the Copyright Holder(s). + + "Modified Version" refers to any derivative made by adding to, deleting, + or substituting ? in part or in whole ? + any of the components of the Original Version, by changing formats or + by porting the Font Software to a new environment. + + "Author" refers to any designer, engineer, programmer, technical writer + or other person who contributed to the Font Software. + + PERMISSION & CONDITIONS + + Permission is hereby granted, free of charge, to any person obtaining a + copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: + + 1) Neither the Font Software nor any of its individual components,in + Original or Modified Versions, may be sold by itself. + + 2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + + 3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the + corresponding Copyright Holder. This restriction only applies to the + primary font name as presented to the users. + + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + + 5) The Font Software, modified or unmodified, in part or in whole, must + be distributed entirely under this license, and must not be distributed + under any other license. The requirement for fonts to remain under + this license does not apply to any document created using the Font + Software. + + TERMINATION + This license becomes null and void if any of the above conditions are not met. + + DISCLAIMER + 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 THE + COPYRIGHT HOLDER 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. + +Twelvemonkeys (https://github.com/haraldk/TwelveMonkeys/) + + Copyright (c) 2008-2016, Harald Kuhr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + o Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + o Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + o Neither the name "TwelveMonkeys" nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Lohit-Bengali font (https://pagure.io/lohit): + + Copyright 2011-13 Lohit Fonts Project contributors + + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + + ----------------------------------------------------------- + SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + ----------------------------------------------------------- + + PREAMBLE + The goals of the Open Font License (OFL) are to stimulate worldwide + development of collaborative font projects, to support the font creation + efforts of academic and linguistic communities, and to provide a free and + open framework in which fonts may be shared and improved in partnership + with others. + + The OFL allows the licensed fonts to be used, studied, modified and + redistributed freely as long as they are not sold by themselves. The + fonts, including any derivative works, can be bundled, embedded, + redistributed and/or sold with any software provided that any reserved + names are not used by derivative works. The fonts and derivatives, + however, cannot be released under any other type of license. The + requirement for fonts to remain under this license does not apply + to any document created using the fonts or their derivatives. + + DEFINITIONS + "Font Software" refers to the set of files released by the Copyright + Holder(s) under this license and clearly marked as such. This may + include source files, build scripts and documentation. + + "Reserved Font Name" refers to any names specified as such after the + copyright statement(s). + + "Original Version" refers to the collection of Font Software components as + distributed by the Copyright Holder(s). + + "Modified Version" refers to any derivative made by adding to, deleting, + or substituting -- in part or in whole -- any of the components of the + Original Version, by changing formats or by porting the Font Software to a + new environment. + + "Author" refers to any designer, engineer, programmer, technical + writer or other person who contributed to the Font Software. + + PERMISSION & CONDITIONS + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Font Software, to use, study, copy, merge, embed, modify, + redistribute, and sell modified and unmodified copies of the Font + Software, subject to the following conditions: + + 1) Neither the Font Software nor any of its individual components, + in Original or Modified Versions, may be sold by itself. + + 2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + + 3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the corresponding + Copyright Holder. This restriction only applies to the primary font name as + presented to the users. + + 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + + 5) The Font Software, modified or unmodified, in part or in whole, + must be distributed entirely under this license, and must not be + distributed under any other license. The requirement for fonts to + remain under this license does not apply to any document created + using the Font Software. + + TERMINATION + This license becomes null and void if any of the above conditions are + not met. + + DISCLAIMER + 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 THE + COPYRIGHT HOLDER 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. + +Font Awesome (http://fontawesome.io): + http://fontawesome.io/license + CC BY 4.0 License + https://creativecommons.org/licenses/by/4.0/ + https://creativecommons.org/licenses/by/4.0/legalcode.txt + Modification made: + shapes gathered by printing the original .svg files (not included) + into PDF and using the coordinates. + + Attribution 4.0 International + + ======================================================================= + + Creative Commons Corporation ("Creative Commons") is not a law firm and + does not provide legal services or legal advice. Distribution of + Creative Commons public licenses does not create a lawyer-client or + other relationship. Creative Commons makes its licenses and related + information available on an "as-is" basis. Creative Commons gives no + warranties regarding its licenses, any material licensed under their + terms and conditions, or any related information. Creative Commons + disclaims all liability for damages resulting from their use to the + fullest extent possible. + + Using Creative Commons Public Licenses + + Creative Commons public licenses provide a standard set of terms and + conditions that creators and other rights holders may use to share + original works of authorship and other material subject to copyright + and certain other rights specified in the public license below. The + following considerations are for informational purposes only, are not + exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + + ======================================================================= + + Creative Commons Attribution 4.0 International Public License + + By exercising the Licensed Rights (defined below), You accept and agree + to be bound by the terms and conditions of this Creative Commons + Attribution 4.0 International Public License ("Public License"). To the + extent this Public License may be interpreted as a contract, You are + granted the Licensed Rights in consideration of Your acceptance of + these terms and conditions, and the Licensor grants You such rights in + consideration of benefits the Licensor receives from making the + Licensed Material available under these terms and conditions. + + + Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + + Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + + Section 3 -- License Conditions. + + Your exercise of the Licensed Rights is expressly made subject to the + following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + + Section 4 -- Sui Generis Database Rights. + + Where the Licensed Rights include Sui Generis Database Rights that + apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + + For the avoidance of doubt, this Section 4 supplements and does not + replace Your obligations under this Public License where the Licensed + Rights include other Copyright and Similar Rights. + + + Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + + Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + + Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + + Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + + ======================================================================= + + Creative Commons is not a party to its public + licenses. Notwithstanding, Creative Commons may elect to apply one of + its public licenses to material it publishes and in those instances + will be considered the “Licensor.” The text of the Creative Commons + public licenses is dedicated to the public domain under the CC0 Public + Domain Dedication. Except for the limited purpose of indicating that + material is shared under a Creative Commons public license or as + otherwise permitted by the Creative Commons policies published at + creativecommons.org/policies, Creative Commons does not authorize the + use of the trademark "Creative Commons" or any other trademark or logo + of Creative Commons without its prior written consent including, + without limitation, in connection with any unauthorized modifications + to any of its public licenses or any other arrangements, + understandings, or agreements concerning use of licensed material. For + the avoidance of doubt, this paragraph does not form part of the + public licenses. + + Creative Commons may be contacted at creativecommons.org. diff --git a/pdfbox/src/main/appended-resources/META-INF/NOTICE b/pdfbox/src/main/appended-resources/META-INF/NOTICE new file mode 100644 index 00000000000..d37168726be --- /dev/null +++ b/pdfbox/src/main/appended-resources/META-INF/NOTICE @@ -0,0 +1,14 @@ +Based on source code contributed to the original PDFBox project. +Copyright (c) 2002-2007, www.pdfbox.org + +Includes the Adobe Glyph List +Copyright 1997, 1998, 2002, 2007, 2010 Adobe Systems Incorporated. + +Includes the Zapf Dingbats Glyph List +Copyright 2002, 2010 Adobe Systems Incorporated. + +Includes the Bidi Mirroring Glyph Property (BidiMirroring-8.0.0.txt) +Copyright 1991-2015 Unicode, Inc. + +Includes parts of TwelveMonkeys ImageIO +Copyright 2008-2016 Harald Kuhr diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java new file mode 100644 index 00000000000..d396812b238 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream; + +import java.io.IOException; +import java.io.InputStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.util.Matrix; + +/** + * A content stream. + * + * @author John Hewson + */ +public interface PDContentStream +{ + /** + * Returns this stream's content, if any. + * + * @return An InputStream or null. + * @throws IOException If the stream could not be read + */ + InputStream getContents() throws IOException; + + /** + * Returns this stream's resources, if any. + */ + PDResources getResources(); + + /** + * Returns the bounding box of the contents. + */ + PDRectangle getBBox(); + + /** + * Returns the matrix which transforms from the stream's space to user space. + */ + Matrix getMatrix(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFGraphicsStreamEngine.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFGraphicsStreamEngine.java new file mode 100644 index 00000000000..f51f46ae38b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFGraphicsStreamEngine.java @@ -0,0 +1,264 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.graphics.image.PDImage; + +import java.awt.geom.Point2D; +import java.io.IOException; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColor; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColorN; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColorSpace; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceCMYKColor; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceGrayColor; +import org.apache.pdfbox.contentstream.operator.color.SetNonStrokingDeviceRGBColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingColorN; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingColorSpace; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingDeviceCMYKColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingDeviceGrayColor; +import org.apache.pdfbox.contentstream.operator.color.SetStrokingDeviceRGBColor; +import org.apache.pdfbox.contentstream.operator.graphics.AppendRectangleToPath; +import org.apache.pdfbox.contentstream.operator.graphics.BeginInlineImage; +import org.apache.pdfbox.contentstream.operator.graphics.ClipEvenOddRule; +import org.apache.pdfbox.contentstream.operator.graphics.ClipNonZeroRule; +import org.apache.pdfbox.contentstream.operator.graphics.CloseAndStrokePath; +import org.apache.pdfbox.contentstream.operator.graphics.CloseFillEvenOddAndStrokePath; +import org.apache.pdfbox.contentstream.operator.graphics.CloseFillNonZeroAndStrokePath; +import org.apache.pdfbox.contentstream.operator.graphics.ClosePath; +import org.apache.pdfbox.contentstream.operator.graphics.CurveTo; +import org.apache.pdfbox.contentstream.operator.graphics.CurveToReplicateFinalPoint; +import org.apache.pdfbox.contentstream.operator.graphics.CurveToReplicateInitialPoint; +import org.apache.pdfbox.contentstream.operator.graphics.DrawObject; +import org.apache.pdfbox.contentstream.operator.graphics.EndPath; +import org.apache.pdfbox.contentstream.operator.graphics.FillEvenOddAndStrokePath; +import org.apache.pdfbox.contentstream.operator.graphics.FillEvenOddRule; +import org.apache.pdfbox.contentstream.operator.graphics.FillNonZeroAndStrokePath; +import org.apache.pdfbox.contentstream.operator.graphics.FillNonZeroRule; +import org.apache.pdfbox.contentstream.operator.graphics.LegacyFillNonZeroRule; +import org.apache.pdfbox.contentstream.operator.graphics.LineTo; +import org.apache.pdfbox.contentstream.operator.graphics.MoveTo; +import org.apache.pdfbox.contentstream.operator.graphics.ShadingFill; +import org.apache.pdfbox.contentstream.operator.graphics.StrokePath; +import org.apache.pdfbox.contentstream.operator.markedcontent.BeginMarkedContentSequence; +import org.apache.pdfbox.contentstream.operator.markedcontent.BeginMarkedContentSequenceWithProperties; +import org.apache.pdfbox.contentstream.operator.markedcontent.EndMarkedContentSequence; +import org.apache.pdfbox.contentstream.operator.state.Concatenate; +import org.apache.pdfbox.contentstream.operator.state.Restore; +import org.apache.pdfbox.contentstream.operator.state.Save; +import org.apache.pdfbox.contentstream.operator.state.SetFlatness; +import org.apache.pdfbox.contentstream.operator.state.SetGraphicsStateParameters; +import org.apache.pdfbox.contentstream.operator.state.SetLineCapStyle; +import org.apache.pdfbox.contentstream.operator.state.SetLineDashPattern; +import org.apache.pdfbox.contentstream.operator.state.SetLineJoinStyle; +import org.apache.pdfbox.contentstream.operator.state.SetLineMiterLimit; +import org.apache.pdfbox.contentstream.operator.state.SetLineWidth; +import org.apache.pdfbox.contentstream.operator.state.SetMatrix; +import org.apache.pdfbox.contentstream.operator.state.SetRenderingIntent; +import org.apache.pdfbox.contentstream.operator.text.BeginText; +import org.apache.pdfbox.contentstream.operator.text.EndText; +import org.apache.pdfbox.contentstream.operator.text.SetFontAndSize; +import org.apache.pdfbox.contentstream.operator.text.SetTextHorizontalScaling; +import org.apache.pdfbox.contentstream.operator.text.ShowTextAdjusted; +import org.apache.pdfbox.contentstream.operator.text.ShowTextLine; +import org.apache.pdfbox.contentstream.operator.text.ShowTextLineAndSpace; +import org.apache.pdfbox.contentstream.operator.text.MoveText; +import org.apache.pdfbox.contentstream.operator.text.MoveTextSetLeading; +import org.apache.pdfbox.contentstream.operator.text.NextLine; +import org.apache.pdfbox.contentstream.operator.text.SetCharSpacing; +import org.apache.pdfbox.contentstream.operator.text.SetTextLeading; +import org.apache.pdfbox.contentstream.operator.text.SetTextRenderingMode; +import org.apache.pdfbox.contentstream.operator.text.SetTextRise; +import org.apache.pdfbox.contentstream.operator.text.SetWordSpacing; +import org.apache.pdfbox.contentstream.operator.text.ShowText; + +/** + * PDFStreamEngine subclass for advanced processing of graphics. + * This class should be subclassed by end users looking to hook into graphics operations. + * + * @author John Hewson + */ +public abstract class PDFGraphicsStreamEngine extends PDFStreamEngine +{ + // may be null, for example if the stream is a tiling pattern + private final PDPage page; + + /** + * Constructor. + */ + protected PDFGraphicsStreamEngine(PDPage page) + { + this.page = page; + + addOperator(new CloseFillNonZeroAndStrokePath()); + addOperator(new FillNonZeroAndStrokePath()); + addOperator(new CloseFillEvenOddAndStrokePath()); + addOperator(new FillEvenOddAndStrokePath()); + addOperator(new BeginInlineImage()); + addOperator(new BeginText()); + addOperator(new CurveTo()); + addOperator(new Concatenate()); + addOperator(new SetStrokingColorSpace()); + addOperator(new SetNonStrokingColorSpace()); + addOperator(new SetLineDashPattern()); + addOperator(new DrawObject()); // special graphics version + addOperator(new EndText()); + addOperator(new FillNonZeroRule()); + addOperator(new LegacyFillNonZeroRule()); + addOperator(new FillEvenOddRule()); + addOperator(new SetStrokingDeviceGrayColor()); + addOperator(new SetNonStrokingDeviceGrayColor()); + addOperator(new SetGraphicsStateParameters()); + addOperator(new ClosePath()); + addOperator(new SetFlatness()); + addOperator(new SetLineJoinStyle()); + addOperator(new SetLineCapStyle()); + addOperator(new SetStrokingDeviceCMYKColor()); + addOperator(new SetNonStrokingDeviceCMYKColor()); + addOperator(new LineTo()); + addOperator(new MoveTo()); + addOperator(new SetLineMiterLimit()); + addOperator(new EndPath()); + addOperator(new Save()); + addOperator(new Restore()); + addOperator(new AppendRectangleToPath()); + addOperator(new SetStrokingDeviceRGBColor()); + addOperator(new SetNonStrokingDeviceRGBColor()); + addOperator(new SetRenderingIntent()); + addOperator(new CloseAndStrokePath()); + addOperator(new StrokePath()); + addOperator(new SetStrokingColor()); + addOperator(new SetNonStrokingColor()); + addOperator(new SetStrokingColorN()); + addOperator(new SetNonStrokingColorN()); + addOperator(new ShadingFill()); + addOperator(new NextLine()); + addOperator(new SetCharSpacing()); + addOperator(new MoveText()); + addOperator(new MoveTextSetLeading()); + addOperator(new SetFontAndSize()); + addOperator(new ShowText()); + addOperator(new ShowTextAdjusted()); + addOperator(new SetTextLeading()); + addOperator(new SetMatrix()); + addOperator(new SetTextRenderingMode()); + addOperator(new SetTextRise()); + addOperator(new SetWordSpacing()); + addOperator(new SetTextHorizontalScaling()); + addOperator(new CurveToReplicateInitialPoint()); + addOperator(new SetLineWidth()); + addOperator(new ClipNonZeroRule()); + addOperator(new ClipEvenOddRule()); + addOperator(new CurveToReplicateFinalPoint()); + addOperator(new ShowTextLine()); + addOperator(new ShowTextLineAndSpace()); + addOperator(new BeginMarkedContentSequence()); + addOperator(new BeginMarkedContentSequenceWithProperties()); + addOperator(new EndMarkedContentSequence()); + } + + /** + * Returns the page. + */ + protected final PDPage getPage() + { + return page; + } + + /** + * Append a rectangle to the current path. + */ + public abstract void appendRectangle(Point2D p0, Point2D p1, + Point2D p2, Point2D p3) throws IOException; + + /** + * Draw the image. + * + * @param pdImage The image to draw. + */ + public abstract void drawImage(PDImage pdImage) throws IOException; + + /** + * Modify the current clipping path by intersecting it with the current path. + * The clipping path will not be updated until the succeeding painting operator is called. + * + * @param windingRule The winding rule which will be used for clipping. + */ + public abstract void clip(int windingRule) throws IOException; + + /** + * Starts a new path at (x,y). + */ + public abstract void moveTo(float x, float y) throws IOException; + + /** + * Draws a line from the current point to (x,y). + */ + public abstract void lineTo(float x, float y) throws IOException; + + /** + * Draws a curve from the current point to (x3,y3) using (x1,y1) and (x2,y2) as control points. + */ + public abstract void curveTo(float x1, float y1, + float x2, float y2, + float x3, float y3) throws IOException; + + /** + * Returns the current point of the current path. + */ + public abstract Point2D getCurrentPoint() throws IOException; + + /** + * Closes the current path. + */ + public abstract void closePath() throws IOException; + + /** + * Ends the current path without filling or stroking it. The clipping path is updated here. + */ + public abstract void endPath() throws IOException; + + /** + * Stroke the path. + * + * @throws IOException If there is an IO error while stroking the path. + */ + public abstract void strokePath() throws IOException; + + /** + * Fill the path. + * + * @param windingRule The winding rule this path will use. + */ + public abstract void fillPath(int windingRule) throws IOException; + + /** + * Fills and then strokes the path. + * + * @param windingRule The winding rule this path will use. + */ + public abstract void fillAndStrokePath(int windingRule) throws IOException; + + /** + * Fill with Shading. + * + * @param shadingName The name of the Shading Dictionary to use for this fill instruction. + */ + public abstract void shadingFill(COSName shadingName) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java new file mode 100644 index 00000000000..21d240d741b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java @@ -0,0 +1,1066 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream; + +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Stack; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.state.EmptyGraphicsStackException; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.filter.MissingImageReaderException; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdmodel.MissingResourceException; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDFontFactory; +import org.apache.pdfbox.pdmodel.font.PDType3CharProc; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; +import org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.state.PDTextState; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; + +/** + * Processes a PDF content stream and executes certain operations. + * Provides a callback interface for clients that want to do things with the stream. + * + * @author Ben Litchfield + */ +public abstract class PDFStreamEngine +{ + private static final Log LOG = LogFactory.getLog(PDFStreamEngine.class); + + private final Map operators = new HashMap<>(80); + + private Matrix textMatrix; + private Matrix textLineMatrix; + + private Stack graphicsStack = new Stack<>(); + + private PDResources resources; + private PDPage currentPage; + private boolean isProcessingPage; + private Matrix initialMatrix; + + /** + * Creates a new PDFStreamEngine. + */ + protected PDFStreamEngine() + { + } + + /** + * Register a custom operator processor with the engine. + * + * @param operator The operator as a string. + * @param op Processor instance. + * @deprecated Use {@link #addOperator(OperatorProcessor)} instead + */ + @Deprecated + public void registerOperatorProcessor(String operator, OperatorProcessor op) + { + op.setContext(this); + operators.put(operator, op); + } + + /** + * Adds an operator processor to the engine. + * + * @param op operator processor + */ + public final void addOperator(OperatorProcessor op) + { + op.setContext(this); + operators.put(op.getName(), op); + } + + /** + * Initializes the stream engine for the given page. + */ + private void initPage(PDPage page) + { + if (page == null) + { + throw new IllegalArgumentException("Page cannot be null"); + } + currentPage = page; + graphicsStack.clear(); + graphicsStack.push(new PDGraphicsState(page.getCropBox())); + textMatrix = null; + textLineMatrix = null; + resources = null; + initialMatrix = page.getMatrix(); + } + + /** + * This will initialize and process the contents of the stream. + * + * @param page the page to process + * @throws IOException if there is an error accessing the stream + */ + public void processPage(PDPage page) throws IOException + { + initPage(page); + if (page.hasContents()) + { + isProcessingPage = true; + processStream(page); + isProcessingPage = false; + } + } + + /** + * Shows a transparency group from the content stream. + * + * @param form transparency group (form) XObject + * @throws IOException if the transparency group cannot be processed + */ + public void showTransparencyGroup(PDTransparencyGroup form) throws IOException + { + processTransparencyGroup(form); + } + + /** + * Shows a form from the content stream. + * + * @param form form XObject + * @throws IOException if the form cannot be processed + */ + public void showForm(PDFormXObject form) throws IOException + { + if (currentPage == null) + { + throw new IllegalStateException("No current page, call " + + "#processChildStream(PDContentStream, PDPage) instead"); + } + if (form.getCOSObject().getLength() > 0) + { + processStream(form); + } + } + + /** + * Processes a soft mask transparency group stream. + * @param group + * @throws IOException + */ + protected void processSoftMask(PDTransparencyGroup group) throws IOException + { + saveGraphicsState(); + Matrix softMaskCTM = getGraphicsState().getSoftMask().getInitialTransformationMatrix(); + getGraphicsState().setCurrentTransformationMatrix(softMaskCTM); + processTransparencyGroup(group); + restoreGraphicsState(); + } + + /** + * Processes a transparency group stream. + * @param group + * @throws IOException + */ + protected void processTransparencyGroup(PDTransparencyGroup group) throws IOException + { + if (currentPage == null) + { + throw new IllegalStateException("No current page, call " + + "#processChildStream(PDContentStream, PDPage) instead"); + } + + PDResources parent = pushResources(group); + Stack savedStack = saveGraphicsStack(); + + Matrix parentMatrix = initialMatrix; + + // the stream's initial matrix includes the parent CTM, e.g. this allows a scaled form + initialMatrix = getGraphicsState().getCurrentTransformationMatrix().clone(); + + // transform the CTM using the stream's matrix + getGraphicsState().getCurrentTransformationMatrix().concatenate(group.getMatrix()); + + // Before execution of the transparency group XObject’s content stream, + // the current blend mode in the graphics state shall be initialized to Normal, + // the current stroking and nonstroking alpha constants to 1.0, and the current soft mask to None. + getGraphicsState().setBlendMode(BlendMode.NORMAL); + getGraphicsState().setAlphaConstant(1); + getGraphicsState().setNonStrokeAlphaConstant(1); + getGraphicsState().setSoftMask(null); + + // clip to bounding box + clipToRect(group.getBBox()); + + processStreamOperators(group); + + initialMatrix = parentMatrix; + + restoreGraphicsStack(savedStack); + popResources(parent); + } + + /** + * Processes a Type 3 character stream. + * + * @param charProc Type 3 character procedure + * @param textRenderingMatrix the Text Rendering Matrix + * @throws IOException if there is an error reading or parsing the character content stream. + */ + protected void processType3Stream(PDType3CharProc charProc, Matrix textRenderingMatrix) + throws IOException + { + if (currentPage == null) + { + throw new IllegalStateException("No current page, call " + + "#processChildStream(PDContentStream, PDPage) instead"); + } + + PDResources parent = pushResources(charProc); + Stack savedStack = saveGraphicsStack(); + + // replace the CTM with the TRM + getGraphicsState().setCurrentTransformationMatrix(textRenderingMatrix); + + // transform the CTM using the stream's matrix (this is the FontMatrix) + getGraphicsState().getCurrentTransformationMatrix().concatenate(charProc.getMatrix()); + + // note: we don't clip to the BBox as it is often wrong, see PDFBOX-1917 + + // save text matrices (Type 3 stream may contain BT/ET, see PDFBOX-2137) + Matrix textMatrixOld = textMatrix; + textMatrix = new Matrix(); + Matrix textLineMatrixOld = textLineMatrix; + textLineMatrix = new Matrix(); + + processStreamOperators(charProc); + + // restore text matrices + textMatrix = textMatrixOld; + textLineMatrix = textLineMatrixOld; + + restoreGraphicsStack(savedStack); + popResources(parent); + } + + /** + * Process the given annotation with the specified appearance stream. + * + * @param annotation The annotation containing the appearance stream to process. + * @param appearance The appearance stream to process. + * @throws IOException If there is an error reading or parsing the appearance content stream. + */ + protected void processAnnotation(PDAnnotation annotation, PDAppearanceStream appearance) + throws IOException + { + PDResources parent = pushResources(appearance); + Stack savedStack = saveGraphicsStack(); + + PDRectangle bbox = appearance.getBBox(); + PDRectangle rect = annotation.getRectangle(); + Matrix matrix = appearance.getMatrix(); + + // zero-sized rectangles are not valid + if (rect != null && rect.getWidth() > 0 && rect.getHeight() > 0 && bbox != null) + { + // transformed appearance box fixme: may be an arbitrary shape + Rectangle2D transformedBox = bbox.transform(matrix).getBounds2D(); + + // compute a matrix which scales and translates the transformed appearance box to align + // with the edges of the annotation's rectangle + Matrix a = Matrix.getTranslateInstance(rect.getLowerLeftX(), rect.getLowerLeftY()); + a.concatenate(Matrix.getScaleInstance((float)(rect.getWidth() / transformedBox.getWidth()), + (float)(rect.getHeight() / transformedBox.getHeight()))); + a.concatenate(Matrix.getTranslateInstance((float) -transformedBox.getX(), + (float) -transformedBox.getY())); + + // Matrix shall be concatenated with A to form a matrix AA that maps from the appearance's + // coordinate system to the annotation's rectangle in default user space + // + // HOWEVER only the opposite order works for rotated pages with + // filled fields / annotations that have a matrix in the appearance stream, see PDFBOX-3083 + Matrix aa = Matrix.concatenate(a, matrix); + + // make matrix AA the CTM + getGraphicsState().setCurrentTransformationMatrix(aa); + + // clip to bounding box + clipToRect(bbox); + + // needed for patterns in appearance streams, e.g. PDFBOX-2182 + initialMatrix = aa.clone(); + + processStreamOperators(appearance); + } + + restoreGraphicsStack(savedStack); + popResources(parent); + } + + /** + * Process the given tiling pattern. + * + * @param tilingPattern the tiling pattern + * @param color color to use, if this is an uncoloured pattern, otherwise null. + * @param colorSpace color space to use, if this is an uncoloured pattern, otherwise null. + * @throws IOException if there is an error reading or parsing the tiling pattern content stream. + */ + protected final void processTilingPattern(PDTilingPattern tilingPattern, PDColor color, + PDColorSpace colorSpace) throws IOException + { + processTilingPattern(tilingPattern, color, colorSpace, tilingPattern.getMatrix()); + } + + /** + * Process the given tiling pattern. Allows the pattern matrix to be overridden for custom + * rendering. + * + * @param tilingPattern the tiling pattern + * @param color color to use, if this is an uncoloured pattern, otherwise null. + * @param colorSpace color space to use, if this is an uncoloured pattern, otherwise null. + * @param patternMatrix the pattern matrix, may be overridden for custom rendering. + * @throws IOException if there is an error reading or parsing the tiling pattern content stream. + */ + protected final void processTilingPattern(PDTilingPattern tilingPattern, PDColor color, + PDColorSpace colorSpace, Matrix patternMatrix) + throws IOException + { + PDResources parent = pushResources(tilingPattern); + + Matrix parentMatrix = initialMatrix; + initialMatrix = Matrix.concatenate(initialMatrix, patternMatrix); + + // save the original graphics state + Stack savedStack = saveGraphicsStack(); + + // save a clean state (new clipping path, line path, etc.) + Rectangle2D bbox = tilingPattern.getBBox().transform(patternMatrix).getBounds2D(); + PDRectangle rect = new PDRectangle((float)bbox.getX(), (float)bbox.getY(), + (float)bbox.getWidth(), (float)bbox.getHeight()); + graphicsStack.push(new PDGraphicsState(rect)); + + // non-colored patterns have to be given a color + if (colorSpace != null) + { + color = new PDColor(color.getComponents(), colorSpace); + getGraphicsState().setNonStrokingColorSpace(colorSpace); + getGraphicsState().setNonStrokingColor(color); + getGraphicsState().setStrokingColorSpace(colorSpace); + getGraphicsState().setStrokingColor(color); + } + + // transform the CTM using the stream's matrix + getGraphicsState().getCurrentTransformationMatrix().concatenate(patternMatrix); + + // clip to bounding box + clipToRect(tilingPattern.getBBox()); + + processStreamOperators(tilingPattern); + + initialMatrix = parentMatrix; + restoreGraphicsStack(savedStack); + popResources(parent); + } + + /** + * Shows the given annotation. + * + * @param annotation An annotation on the current page. + * @throws IOException If an error occurred reading the annotation + */ + public void showAnnotation(PDAnnotation annotation) throws IOException + { + PDAppearanceStream appearanceStream = getAppearance(annotation); + if (appearanceStream != null) + { + processAnnotation(annotation, appearanceStream); + } + } + + /** + * Returns the appearance stream to process for the given annotation. May be used to render + * a specific appearance such as "hover". + * + * @param annotation The current annotation. + * @return The stream to process. + */ + public PDAppearanceStream getAppearance(PDAnnotation annotation) + { + return annotation.getNormalAppearanceStream(); + } + + /** + * Process a child stream of the given page. Cannot be used with {@link #processPage(PDPage)}. + * + * @param contentStream the child content stream + * @param page + * @throws IOException if there is an exception while processing the stream + */ + protected void processChildStream(PDContentStream contentStream, PDPage page) throws IOException + { + if (isProcessingPage) + { + throw new IllegalStateException("Current page has already been set via " + + " #processPage(PDPage) call #processChildStream(PDContentStream) instead"); + } + initPage(page); + processStream(contentStream); + currentPage = null; + } + + /** + * Process a content stream. + * + * @param contentStream the content stream + * @throws IOException if there is an exception while processing the stream + */ + private void processStream(PDContentStream contentStream) throws IOException + { + PDResources parent = pushResources(contentStream); + Stack savedStack = saveGraphicsStack(); + Matrix parentMatrix = initialMatrix; + + // transform the CTM using the stream's matrix + getGraphicsState().getCurrentTransformationMatrix().concatenate(contentStream.getMatrix()); + + // the stream's initial matrix includes the parent CTM, e.g. this allows a scaled form + initialMatrix = getGraphicsState().getCurrentTransformationMatrix().clone(); + + // clip to bounding box + PDRectangle bbox = contentStream.getBBox(); + clipToRect(bbox); + + processStreamOperators(contentStream); + + initialMatrix = parentMatrix; + restoreGraphicsStack(savedStack); + popResources(parent); + } + + /** + * Processes the operators of the given content stream. + * + * @param contentStream to content stream to parse. + * @throws IOException if there is an error reading or parsing the content stream. + */ + private void processStreamOperators(PDContentStream contentStream) throws IOException + { + List arguments = new ArrayList<>(); + try (InputStream is = contentStream.getContents()) + { + PDFStreamParser parser = new PDFStreamParser(is); + Object token = parser.parseNextToken(); + while (token != null) + { + if (token instanceof COSObject) + { + arguments.add(((COSObject) token).getObject()); + } + else if (token instanceof Operator) + { + processOperator((Operator) token, arguments); + arguments = new ArrayList<>(); + } + else + { + arguments.add((COSBase) token); + } + token = parser.parseNextToken(); + } + } + } + + /** + * Pushes the given stream's resources, returning the previous resources. + */ + private PDResources pushResources(PDContentStream contentStream) + { + // resource lookup: first look for stream resources, then fallback to the current page + PDResources parentResources = resources; + PDResources streamResources = contentStream.getResources(); + if (streamResources != null) + { + resources = streamResources; + } + else if (resources != null) + { + // inherit directly from parent stream, this is not in the PDF spec, but the file from + // PDFBOX-1359 does this and works in Acrobat + } + else + { + resources = currentPage.getResources(); + } + + // resources are required in PDF + if (resources == null) + { + resources = new PDResources(); + } + return parentResources; + } + + /** + * Pops the current resources, replacing them with the given resources. + */ + private void popResources(PDResources parentResources) + { + resources = parentResources; + } + + /** + * Transforms the given rectangle using the CTM and then intersects it with the current + * clipping area. + */ + private void clipToRect(PDRectangle rectangle) + { + if (rectangle != null) + { + GeneralPath clip = rectangle.transform(getGraphicsState().getCurrentTransformationMatrix()); + getGraphicsState().intersectClippingPath(clip); + } + } + + /** + * Called when the BT operator is encountered. This method is for overriding in subclasses, the + * default implementation does nothing. + * + * @throws IOException if there was an error processing the text + */ + public void beginText() throws IOException + { + // overridden in subclasses + } + + /** + * Called when the ET operator is encountered. This method is for overriding in subclasses, the + * default implementation does nothing. + * + * @throws IOException if there was an error processing the text + */ + public void endText() throws IOException + { + // overridden in subclasses + } + + /** + * Called when a string of text is to be shown. + * + * @param string the encoded text + * @throws IOException if there was an error showing the text + */ + public void showTextString(byte[] string) throws IOException + { + showText(string); + } + + /** + * Called when a string of text with spacing adjustments is to be shown. + * + * @param array array of encoded text strings and adjustments + * @throws IOException if there was an error showing the text + */ + public void showTextStrings(COSArray array) throws IOException + { + PDTextState textState = getGraphicsState().getTextState(); + float fontSize = textState.getFontSize(); + float horizontalScaling = textState.getHorizontalScaling() / 100f; + PDFont font = textState.getFont(); + boolean isVertical = false; + if (font != null) + { + isVertical = font.isVertical(); + } + + for (COSBase obj : array) + { + if (obj instanceof COSNumber) + { + float tj = ((COSNumber)obj).floatValue(); + + // calculate the combined displacements + float tx, ty; + if (isVertical) + { + tx = 0; + ty = -tj / 1000 * fontSize; + } + else + { + tx = -tj / 1000 * fontSize * horizontalScaling; + ty = 0; + } + + applyTextAdjustment(tx, ty); + } + else if(obj instanceof COSString) + { + byte[] string = ((COSString)obj).getBytes(); + showText(string); + } + else + { + throw new IOException("Unknown type in array for TJ operation:" + obj); + } + } + } + + /** + * Applies a text position adjustment from the TJ operator. May be overridden in subclasses. + * + * @param tx x-translation + * @param ty y-translation + */ + protected void applyTextAdjustment(float tx, float ty) throws IOException + { + // update the text matrix + textMatrix.concatenate(Matrix.getTranslateInstance(tx, ty)); + } + + /** + * Process text from the PDF Stream. You should override this method if you want to + * perform an action when encoded text is being processed. + * + * @param string the encoded text + * @throws IOException if there is an error processing the string + */ + protected void showText(byte[] string) throws IOException + { + PDGraphicsState state = getGraphicsState(); + PDTextState textState = state.getTextState(); + + // get the current font + PDFont font = textState.getFont(); + if (font == null) + { + LOG.warn("No current font, will use default"); + font = PDFontFactory.createDefaultFont(); + } + + float fontSize = textState.getFontSize(); + float horizontalScaling = textState.getHorizontalScaling() / 100f; + float charSpacing = textState.getCharacterSpacing(); + + // put the text state parameters into matrix form + Matrix parameters = new Matrix( + fontSize * horizontalScaling, 0, // 0 + 0, fontSize, // 0 + 0, textState.getRise()); // 1 + + // read the stream until it is empty + InputStream in = new ByteArrayInputStream(string); + while (in.available() > 0) + { + // decode a character + int before = in.available(); + int code = font.readCode(in); + int codeLength = before - in.available(); + String unicode = font.toUnicode(code); + + // Word spacing shall be applied to every occurrence of the single-byte character code + // 32 in a string when using a simple font or a composite font that defines code 32 as + // a single-byte code. + float wordSpacing = 0; + if (codeLength == 1 && code == 32) + { + wordSpacing += textState.getWordSpacing(); + } + + // text rendering matrix (text space -> device space) + Matrix ctm = state.getCurrentTransformationMatrix(); + Matrix textRenderingMatrix = parameters.multiply(textMatrix).multiply(ctm); + + // get glyph's position vector if this is vertical text + // changes to vertical text should be tested with PDFBOX-2294 and PDFBOX-1422 + if (font.isVertical()) + { + // position vector, in text space + Vector v = font.getPositionVector(code); + + // apply the position vector to the horizontal origin to get the vertical origin + textRenderingMatrix.translate(v); + } + + // get glyph's horizontal and vertical displacements, in text space + Vector w = font.getDisplacement(code); + + // process the decoded glyph + saveGraphicsState(); + Matrix textMatrixOld = textMatrix; + Matrix textLineMatrixOld = textLineMatrix; + showGlyph(textRenderingMatrix, font, code, unicode, w); + textMatrix = textMatrixOld; + textLineMatrix = textLineMatrixOld; + restoreGraphicsState(); + + // calculate the combined displacements + float tx, ty; + if (font.isVertical()) + { + tx = 0; + ty = w.getY() * fontSize + charSpacing + wordSpacing; + } + else + { + tx = (w.getX() * fontSize + charSpacing + wordSpacing) * horizontalScaling; + ty = 0; + } + + // update the text matrix + textMatrix.concatenate(Matrix.getTranslateInstance(tx, ty)); + } + } + + /** + * Called when a glyph is to be processed.This method is intended for overriding in subclasses, + * the default implementation does nothing. + * + * @param textRenderingMatrix the current text rendering matrix, Trm + * @param font the current font + * @param code internal PDF character code for the glyph + * @param unicode the Unicode text for this glyph, or null if the PDF does provide it + * @param displacement the displacement (i.e. advance) of the glyph in text space + * @throws IOException if the glyph cannot be processed + */ + protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + if (font instanceof PDType3Font) + { + showType3Glyph(textRenderingMatrix, (PDType3Font)font, code, unicode, displacement); + } + else + { + showFontGlyph(textRenderingMatrix, font, code, unicode, displacement); + } + } + + /** + * Called when a glyph is to be processed.This method is intended for overriding in subclasses, + * the default implementation does nothing. + * + * @param textRenderingMatrix the current text rendering matrix, Trm + * @param font the current font + * @param code internal PDF character code for the glyph + * @param unicode the Unicode text for this glyph, or null if the PDF does provide it + * @param displacement the displacement (i.e. advance) of the glyph in text space + * @throws IOException if the glyph cannot be processed + */ + protected void showFontGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + // overridden in subclasses + } + + /** + * Called when a glyph is to be processed.This method is intended for overriding in subclasses, + * the default implementation does nothing. + * + * @param textRenderingMatrix the current text rendering matrix, Trm + * @param font the current font + * @param code internal PDF character code for the glyph + * @param unicode the Unicode text for this glyph, or null if the PDF does provide it + * @param displacement the displacement (i.e. advance) of the glyph in text space + * @throws IOException if the glyph cannot be processed + */ + protected void showType3Glyph(Matrix textRenderingMatrix, PDType3Font font, int code, + String unicode, Vector displacement) throws IOException + { + PDType3CharProc charProc = font.getCharProc(code); + if (charProc != null) + { + processType3Stream(charProc, textRenderingMatrix); + } + } + + /** + * Called when a marked content group begins + * + * @param tag indicates the role or significance of the sequence + * @param properties optional properties + */ + public void beginMarkedContentSequence(COSName tag, COSDictionary properties) + { + // overridden in subclasses + } + + /** + * Called when a a marked content group ends + */ + public void endMarkedContentSequence() + { + // overridden in subclasses + } + + /** + * This is used to handle an operation. + * + * @param operation The operation to perform. + * @param arguments The list of arguments. + * @throws IOException If there is an error processing the operation. + */ + public void processOperator(String operation, List arguments) throws IOException + { + Operator operator = Operator.getOperator(operation); + processOperator(operator, arguments); + } + + /** + * This is used to handle an operation. + * + * @param operator The operation to perform. + * @param operands The list of arguments. + * @throws IOException If there is an error processing the operation. + */ + protected void processOperator(Operator operator, List operands) throws IOException + { + String name = operator.getName(); + OperatorProcessor processor = operators.get(name); + if (processor != null) + { + processor.setContext(this); + try + { + processor.process(operator, operands); + } + catch (IOException e) + { + operatorException(operator, operands, e); + } + } + else + { + unsupportedOperator(operator, operands); + } + } + + /** + * Called when an unsupported operator is encountered. + * + * @param operator The unknown operator. + * @param operands The list of operands. + */ + protected void unsupportedOperator(Operator operator, List operands) throws IOException + { + // overridden in subclasses + } + + /** + * Called when an exception is thrown by an operator. + * + * @param operator The unknown operator. + * @param operands The list of operands. + */ + protected void operatorException(Operator operator, List operands, IOException e) + throws IOException + { + if (e instanceof MissingOperandException || + e instanceof MissingResourceException || + e instanceof MissingImageReaderException) + { + LOG.error(e.getMessage()); + } + else if (e instanceof EmptyGraphicsStackException) + { + LOG.warn(e.getMessage()); + } + else if (operator.getName().equals("Do")) + { + // todo: this too forgiving, but PDFBox has always worked this way for DrawObject + // some careful refactoring is needed + LOG.warn(e.getMessage()); + } + else + { + throw e; + } + } + + /** + * Pushes the current graphics state to the stack. + */ + public void saveGraphicsState() + { + graphicsStack.push(graphicsStack.peek().clone()); + } + + /** + * Pops the current graphics state from the stack. + */ + public void restoreGraphicsState() + { + graphicsStack.pop(); + } + + /** + * Saves the entire graphics stack. + * + * @return the saved graphics state stack. + */ + protected final Stack saveGraphicsStack() + { + Stack savedStack = graphicsStack; + graphicsStack = new Stack<>(); + graphicsStack.add(savedStack.peek().clone()); + return savedStack; + } + + /** + * Restores the entire graphics stack. + */ + protected final void restoreGraphicsStack(Stack snapshot) + { + graphicsStack = snapshot; + } + + /** + * @return Returns the size of the graphicsStack. + */ + public int getGraphicsStackSize() + { + return graphicsStack.size(); + } + + /** + * @return Returns the graphicsState. + */ + public PDGraphicsState getGraphicsState() + { + return graphicsStack.peek(); + } + + /** + * @return Returns the textLineMatrix. + */ + public Matrix getTextLineMatrix() + { + return textLineMatrix; + } + + /** + * @param value The textLineMatrix to set. + */ + public void setTextLineMatrix(Matrix value) + { + textLineMatrix = value; + } + + /** + * @return Returns the textMatrix. + */ + public Matrix getTextMatrix() + { + return textMatrix; + } + + /** + * @param value The textMatrix to set. + */ + public void setTextMatrix(Matrix value) + { + textMatrix = value; + } + + /** + * @param array dash array + * @param phase dash phase + */ + public void setLineDashPattern(COSArray array, int phase) + { + if (phase < 0) + { + LOG.warn("Dash phase has negative value " + phase + ", set to 0"); + phase = 0; + } + PDLineDashPattern lineDash = new PDLineDashPattern(array, phase); + getGraphicsState().setLineDashPattern(lineDash); + } + + /** + * @return the stream' resources. This is mainly to be used by the {@link OperatorProcessor} + * classes. + */ + public PDResources getResources() + { + return resources; + } + + /** + * Returns the current page. + */ + public PDPage getCurrentPage() + { + return currentPage; + } + + /** + * Gets the stream's initial matrix. + */ + public Matrix getInitialMatrix() + { + return initialMatrix; + } + + /** + * Transforms a point using the CTM. + */ + public Point2D.Float transformedPoint(float x, float y) + { + float[] position = { x, y }; + getGraphicsState().getCurrentTransformationMatrix().createAffineTransform() + .transform(position, 0, position, 0, 1); + return new Point2D.Float(position[0], position[1]); + } + + /** + * Transforms a width using the CTM. + */ + protected float transformWidth(float width) + { + Matrix ctm = getGraphicsState().getCurrentTransformationMatrix(); + float x = ctm.getScaleX() + ctm.getShearX(); + float y = ctm.getScaleY() + ctm.getShearY(); + return width * (float)Math.sqrt((x * x + y * y) * 0.5); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/DrawObject.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/DrawObject.java new file mode 100644 index 00000000000..24d6a1928fe --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/DrawObject.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; + +import java.io.IOException; +import java.util.List; + +/** + * Do: Draws an XObject. + * + * @author Ben Litchfield + * @author Mario Ivankovits + */ +public class DrawObject extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + COSBase base0 = arguments.get(0); + if (!(base0 instanceof COSName)) + { + return; + } + COSName name = (COSName) base0; + + if (context.getResources().isImageXObject(name)) + { + // we're done here, don't decode images when doing text extraction + return; + } + + PDXObject xobject = context.getResources().getXObject(name); + + if (xobject instanceof PDTransparencyGroup) + { + context.showTransparencyGroup((PDTransparencyGroup) xobject); + } + else if (xobject instanceof PDFormXObject) + { + PDFormXObject form = (PDFormXObject) xobject; + context.showForm(form); + } + } + + @Override + public String getName() + { + return OperatorName.DRAW_OBJECT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/MissingOperandException.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/MissingOperandException.java new file mode 100644 index 00000000000..ee65b67fb97 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/MissingOperandException.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator; + +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.cos.COSBase; + +/** + * Throw when a PDF operator is missing required operands. + */ +public final class MissingOperandException extends IOException +{ + public MissingOperandException(Operator operator, List operands) + { + super("Operator " + operator.getName() + " has too few operands: " + operands); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java new file mode 100644 index 00000000000..8abc27b7c6f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/Operator.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator; + +import org.apache.pdfbox.cos.COSDictionary; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * An Operator in a PDF content stream. + * + * @author Ben Litchfield + */ +public final class Operator +{ + private final String theOperator; + private byte[] imageData; + private COSDictionary imageParameters; + + /** map for singleton operator objects; use {@link ConcurrentHashMap} for better scalability with multiple threads */ + private static final ConcurrentMap operators = new ConcurrentHashMap<>(); + + /** + * Constructor. + * + * @param aOperator The operator that this object will represent. + * @throws IllegalArgumentException if the operator starts with "/". + */ + private Operator(String aOperator) + { + theOperator = aOperator; + if( aOperator.startsWith( "/" ) ) + { + throw new IllegalArgumentException( "Operators are not allowed to start with / '" + aOperator + "'" ); + } + } + + /** + * This is used to create/cache operators in the system. + * + * @param operator The operator for the system. + * + * @return The operator that matches the operator keyword. + */ + public static Operator getOperator( String operator ) + { + Operator operation; + if (operator.equals(OperatorName.BEGIN_INLINE_IMAGE_DATA) + || OperatorName.BEGIN_INLINE_IMAGE.equals(operator)) + { + //we can't cache the ID operators. + operation = new Operator( operator ); + } + else + { + operation = operators.get( operator ); + if( operation == null ) + { + // another thread may has already added an operator of this kind + // make sure that we get the same operator + operation = operators.putIfAbsent( operator, new Operator( operator ) ); + if ( operation == null ) + { + operation = operators.get( operator ); + } + } + } + + return operation; + } + + /** + * This will get the name of the operator. + * + * @return The string representation of the operation. + */ + public String getName() + { + return theOperator; + } + + /** + * This will print a string rep of this class. + * + * @return A string rep of this class. + */ + @Override + public String toString() + { + return "PDFOperator{" + theOperator + "}"; + } + + /** + * This is the special case for the ID operator where there are just random + * bytes inlined the stream. + * + * @return Value of property imageData. + */ + public byte[] getImageData() + { + return this.imageData; + } + + /** + * This will set the image data, this is only used for the ID operator. + * + * @param imageDataArray New value of property imageData. + */ + public void setImageData(byte[] imageDataArray) + { + imageData = imageDataArray; + } + + /** + * This will get the image parameters, this is only valid for BI operators. + * + * @return The image parameters. + */ + public COSDictionary getImageParameters() + { + return imageParameters; + } + + /** + * This will set the image parameters, this is only valid for BI operators. + * + * @param params The image parameters. + */ + public void setImageParameters( COSDictionary params) + { + imageParameters = params; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorName.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorName.java new file mode 100644 index 00000000000..f6325e1e810 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorName.java @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator; + +public final class OperatorName +{ + + // non stroking color + public static final String NON_STROKING_COLOR = "sc"; + public static final String NON_STROKING_COLOR_N = "scn"; + public static final String NON_STROKING_RGB = "rg"; + public static final String NON_STROKING_GRAY = "g"; + public static final String NON_STROKING_CMYK = "k"; + public static final String NON_STROKING_COLORSPACE = "cs"; + + // stroking color + public static final String STROKING_COLOR = "SC"; + public static final String STROKING_COLOR_N = "SCN"; + public static final String STROKING_COLOR_RGB = "RG"; + public static final String STROKING_COLOR_GRAY = "G"; + public static final String STROKING_COLOR_CMYK = "K"; + public static final String STROKING_COLORSPACE = "CS"; + + // marked content + public static final String BEGIN_MARKED_CONTENT_SEQ = "BDC"; + public static final String BEGIN_MARKED_CONTENT = "BMC"; + public static final String END_MARKED_CONTENT = "EMC"; + public static final String MARKED_CONTENT_POINT_WITH_PROPS = "DP"; + public static final String MARKED_CONTENT_POINT = "MP"; + public static final String DRAW_OBJECT = "Do"; + + // state + public static final String CONCAT = "cm"; + public static final String RESTORE = "Q"; + public static final String SAVE = "q"; + public static final String SET_FLATNESS = "i"; + public static final String SET_GRAPHICS_STATE_PARAMS = "gs"; + public static final String SET_LINE_CAPSTYLE = "J"; + public static final String SET_LINE_DASHPATTERN = "d"; + public static final String SET_LINE_JOINSTYLE = "j"; + public static final String SET_LINE_MITERLIMIT = "M"; + public static final String SET_LINE_WIDTH = "w"; + public static final String SET_MATRIX = "Tm"; + public static final String SET_RENDERINGINTENT = "ri"; + + // graphics + public static final String APPEND_RECT = "re"; + public static final String BEGIN_INLINE_IMAGE = "BI"; + public static final String BEGIN_INLINE_IMAGE_DATA = "ID"; + public static final String END_INLINE_IMAGE = "EI"; + public static final String CLIP_EVEN_ODD = "W*"; + public static final String CLIP_NON_ZERO = "W"; + public static final String CLOSE_AND_STROKE = "s"; + public static final String CLOSE_FILL_EVEN_ODD_AND_STROKE = "b*"; + public static final String CLOSE_FILL_NON_ZERO_AND_STROKE = "b"; + public static final String CLOSE_PATH = "h"; + public static final String CURVE_TO = "c"; + public static final String CURVE_TO_REPLICATE_FINAL_POINT = "y"; + public static final String CURVE_TO_REPLICATE_INITIAL_POINT = "v"; + public static final String ENDPATH = "n"; + public static final String FILL_EVEN_ODD_AND_STROKE = "B*"; + public static final String FILL_EVEN_ODD = "f*"; + public static final String FILL_NON_ZERO_AND_STROKE = "B"; + public static final String FILL_NON_ZERO = "f"; + public static final String LEGACY_FILL_NON_ZERO = "F"; + public static final String LINE_TO = "l"; + public static final String MOVE_TO = "m"; + public static final String SHADING_FILL = "sh"; + public static final String STROKE_PATH = "S"; + + // text + public static final String BEGIN_TEXT = "BT"; + public static final String END_TEXT = "ET"; + public static final String MOVE_TEXT = "Td"; + public static final String MOVE_TEXT_SET_LEADING = "TD"; + public static final String NEXT_LINE = "T*"; + public static final String SET_CHAR_SPACING = "Tc"; + public static final String SET_FONT_AND_SIZE = "Tf"; + public static final String SET_TEXT_HORIZONTAL_SCALING = "Tz"; + public static final String SET_TEXT_LEADING = "TL"; + public static final String SET_TEXT_RENDERINGMODE = "Tr"; + public static final String SET_TEXT_RISE = "Ts"; + public static final String SET_WORD_SPACING = "Tw"; + public static final String SHOW_TEXT = "Tj"; + public static final String SHOW_TEXT_ADJUSTED = "TJ"; + public static final String SHOW_TEXT_LINE = "'"; + public static final String SHOW_TEXT_LINE_AND_SPACE = "\""; + + // type3 font + public static final String TYPE3_D0 = "d0"; + public static final String TYPE3_D1 = "d1"; + + // compatibility section + public static final String BEGIN_COMPATIBILITY_SECTION = "BX"; + public static final String END_COMPATIBILITY_SECTION = "EX"; + + /** + * private constructor + */ + private OperatorName() + { + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java new file mode 100644 index 00000000000..ba2199539ea --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/OperatorProcessor.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.PDFStreamEngine; +import java.util.List; +import java.io.IOException; + +/** + * Processes a PDF operator. + * + * @author Laurent Huault + */ +public abstract class OperatorProcessor +{ + /** The processing context. */ + protected PDFStreamEngine context; + + /** + * Creates a new OperatorProcessor. + */ + protected OperatorProcessor() + { + } + + /** + * Returns the processing context. + * @return the processing context + */ + protected final PDFStreamEngine getContext() + { + return context; + } + + /** + * Sets the processing context. + * @param context the processing context. + */ + public void setContext(PDFStreamEngine context) + { + this.context = context; + } + + /** + * Process the operator. + * @param operator the operator to process + * @param operands the operands to use when processing + * @throws IOException if the operator cannot be processed + */ + public abstract void process(Operator operator, List operands) throws IOException; + + /** + * Returns the name of this operator, e.g. "BI". + */ + public abstract String getName(); + + /** + * Check whether all operands list elements are an instance of a specific class. + * + * @param operands The operands list. + * @param clazz The expected class. + * @return the boolean + */ + public boolean checkArrayTypesClass(List operands, Class clazz) + { + for (COSBase base : operands) + { + if (!clazz.isInstance(base)) + { + return false; + } + } + return true; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java new file mode 100644 index 00000000000..9f43c4f58ae --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetColor.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; + +/** + * sc,scn,SC,SCN: Sets the color to use for stroking or non-stroking operations. + * + * @author John Hewson + */ +public abstract class SetColor extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace colorSpace = getColorSpace(); + if (!(colorSpace instanceof PDPattern)) + { + if (arguments.size() < colorSpace.getNumberOfComponents()) + { + throw new MissingOperandException(operator, arguments); + } + if (!checkArrayTypesClass(arguments, COSNumber.class)) + { + return; + } + } + COSArray array = new COSArray(); + array.addAll(arguments); + setColor(new PDColor(array, colorSpace)); + } + + /** + * Returns either the stroking or non-stroking color value. + * @return The stroking or non-stroking color value. + */ + protected abstract PDColor getColor(); + + /** + * Sets either the stroking or non-stroking color value. + * @param color The stroking or non-stroking color value. + */ + protected abstract void setColor(PDColor color); + + /** + * Returns either the stroking or non-stroking color space. + * @return The stroking or non-stroking color space. + */ + protected abstract PDColorSpace getColorSpace(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColor.java new file mode 100644 index 00000000000..2d872e00990 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColor.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; + +/** + * sc: Sets the colour to use for non-stroking operations. + * + * @author John Hewson + */ +public class SetNonStrokingColor extends SetColor +{ + /** + * Returns the non-stroking color. + * @return The non-stroking color. + */ + @Override + protected PDColor getColor() + { + return context.getGraphicsState().getNonStrokingColor(); + } + + /** + * Sets the non-stroking color. + * @param color The new non-stroking color. + */ + @Override + protected void setColor(PDColor color) + { + context.getGraphicsState().setNonStrokingColor(color); + } + + /** + * Returns the non-stroking color space. + * @return The non-stroking color space. + */ + @Override + protected PDColorSpace getColorSpace() + { + return context.getGraphicsState().getNonStrokingColorSpace(); + } + + @Override + public String getName() + { + return OperatorName.NON_STROKING_COLOR; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorN.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorN.java new file mode 100644 index 00000000000..8b3bb7b8c5c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorN.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * scn: Sets the colour to use for non-stroking operations. + * Supports Pattern, Separation, DeviceN and ICCBased colour spaces. + * + * @author John Hewson + */ +public class SetNonStrokingColorN extends SetNonStrokingColor +{ + @Override + public String getName() + { + return OperatorName.NON_STROKING_COLOR_N; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java new file mode 100644 index 00000000000..57483148840 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingColorSpace.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * cs: Sets the non-stroking color space. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class SetNonStrokingColorSpace extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + COSName name = (COSName)arguments.get(0); + + PDColorSpace cs = context.getResources().getColorSpace(name); + context.getGraphicsState().setNonStrokingColorSpace(cs); + context.getGraphicsState().setNonStrokingColor(cs.getInitialColor()); + } + + @Override + public String getName() + { + return OperatorName.NON_STROKING_COLORSPACE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java new file mode 100644 index 00000000000..c18f5d333f1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceCMYKColor.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; +import java.util.List; + +/** + * k: Set the non-stroking colour space to DeviceCMYK and set the colour to + * use for non-stroking operations. + * + * @author John Hewson + */ +public class SetNonStrokingDeviceCMYKColor extends SetNonStrokingColor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICECMYK); + context.getGraphicsState().setNonStrokingColorSpace(cs); + super.process(operator, arguments); + } + + @Override + public String getName() + { + return OperatorName.NON_STROKING_CMYK; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java new file mode 100644 index 00000000000..dff4df64379 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceGrayColor.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; +import java.util.List; + +/** + * g: Set the non-stroking colour space to DeviceGray and set the gray + * level to use for non-stroking operations. + * + * @author John Hewson + */ +public class SetNonStrokingDeviceGrayColor extends SetNonStrokingColor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICEGRAY); + context.getGraphicsState().setNonStrokingColorSpace(cs); + super.process(operator, arguments); + } + + @Override + public String getName() + { + return OperatorName.NON_STROKING_GRAY; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java new file mode 100644 index 00000000000..8d1d6b2d83a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetNonStrokingDeviceRGBColor.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; +import java.util.List; + +/** + * rg: Set the non-stroking colour space to DeviceRGB and set the colour to + * use for non-stroking operations. + * + * @author John Hewson + */ +public class SetNonStrokingDeviceRGBColor extends SetNonStrokingColor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICERGB); + context.getGraphicsState().setNonStrokingColorSpace(cs); + super.process(operator, arguments); + } + + @Override + public String getName() + { + return OperatorName.NON_STROKING_RGB; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColor.java new file mode 100644 index 00000000000..1a83aefd69a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColor.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; + +/** + * SC: Sets the colour to use for stroking stroking operations. + * + * @author John Hewson + */ +public class SetStrokingColor extends SetColor +{ + /** + * Returns the stroking color. + * @return The stroking color. + */ + @Override + protected PDColor getColor() + { + return context.getGraphicsState().getStrokingColor(); + } + + /** + * Sets the stroking color. + * @param color The new stroking color. + */ + @Override + protected void setColor(PDColor color) + { + context.getGraphicsState().setStrokingColor(color); + } + + /** + * Returns the stroking color space. + * @return The stroking color space. + */ + @Override + protected PDColorSpace getColorSpace() + { + return context.getGraphicsState().getStrokingColorSpace(); + } + + @Override + public String getName() + { + return OperatorName.STROKING_COLOR; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorN.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorN.java new file mode 100644 index 00000000000..b514fd047d7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorN.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * SCN: Sets the colour to use for stroking stroking operations. + * Supports Pattern, Separation, DeviceN and ICCBased colour spaces. + * + * @author John Hewson + */ +public class SetStrokingColorN extends SetStrokingColor +{ + @Override + public String getName() + { + return OperatorName.STROKING_COLOR_N; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java new file mode 100644 index 00000000000..a91977d8e37 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingColorSpace.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * CS: Set color space for stroking operations. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class SetStrokingColorSpace extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + COSBase base = arguments.get(0); + if (!(base instanceof COSName)) + { + return; + } + PDColorSpace cs = context.getResources().getColorSpace((COSName) base); + context.getGraphicsState().setStrokingColorSpace(cs); + context.getGraphicsState().setStrokingColor(cs.getInitialColor()); + } + + @Override + public String getName() + { + return OperatorName.STROKING_COLORSPACE; + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java new file mode 100644 index 00000000000..92fa217f47f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceCMYKColor.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; +import java.util.List; + +/** + * K: Set the stroking colour space to DeviceCMYK and set the colour to use for stroking operations. + * + * @author John Hewson + */ +public class SetStrokingDeviceCMYKColor extends SetStrokingColor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICECMYK); + context.getGraphicsState().setStrokingColorSpace(cs); + super.process(operator, arguments); + } + + @Override + public String getName() + { + return OperatorName.STROKING_COLOR_CMYK; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java new file mode 100644 index 00000000000..cdaeb4d021a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceGrayColor.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; +import java.util.List; + +/** + * G: Set the stroking colour space to DeviceGray and set the gray level to use for stroking + * operations. + * + * @author John Hewson + */ +public class SetStrokingDeviceGrayColor extends SetStrokingColor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICEGRAY); + context.getGraphicsState().setStrokingColorSpace(cs); + super.process(operator, arguments); + } + + @Override + public String getName() + { + return OperatorName.STROKING_COLOR_GRAY; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java new file mode 100644 index 00000000000..414d1ca6b62 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/color/SetStrokingDeviceRGBColor.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; +import java.util.List; + +/** + * RG: Set the stroking colour space to DeviceRGB and set the colour to use for stroking operations. + * + * @author John Hewson + */ +public class SetStrokingDeviceRGBColor extends SetStrokingColor +{ + /** + * RG Set the stroking colour space to DeviceRGB and set the colour to + * use for stroking operations. + * + * @param operator The operator that is being executed. + * @param arguments List + * @throws IOException If the color space cannot be read. + */ + @Override + public void process(Operator operator, List arguments) throws IOException + { + PDColorSpace cs = context.getResources().getColorSpace(COSName.DEVICERGB); + context.getGraphicsState().setStrokingColorSpace(cs); + super.process(operator, arguments); + } + + @Override + public String getName() + { + return OperatorName.STROKING_COLOR_RGB; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/AppendRectangleToPath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/AppendRectangleToPath.java new file mode 100644 index 00000000000..d9923a67e74 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/AppendRectangleToPath.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.Point2D; +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * re Appends a rectangle to the path. + * + * @author Ben Litchfield + */ +public final class AppendRectangleToPath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.size() < 4) + { + throw new MissingOperandException(operator, operands); + } + if (!checkArrayTypesClass(operands, COSNumber.class)) + { + return; + } + COSNumber x = (COSNumber) operands.get(0); + COSNumber y = (COSNumber) operands.get(1); + COSNumber w = (COSNumber) operands.get(2); + COSNumber h = (COSNumber) operands.get(3); + + float x1 = x.floatValue(); + float y1 = y.floatValue(); + + // create a pair of coordinates for the transformation + float x2 = w.floatValue() + x1; + float y2 = h.floatValue() + y1; + + Point2D p0 = context.transformedPoint(x1, y1); + Point2D p1 = context.transformedPoint(x2, y1); + Point2D p2 = context.transformedPoint(x2, y2); + Point2D p3 = context.transformedPoint(x1, y2); + + context.appendRectangle(p0, p1, p2, p3); + } + + @Override + public String getName() + { + return OperatorName.APPEND_RECT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/BeginInlineImage.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/BeginInlineImage.java new file mode 100644 index 00000000000..1bc5beda86a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/BeginInlineImage.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.pdmodel.graphics.image.PDImage; +import org.apache.pdfbox.pdmodel.graphics.image.PDInlineImage; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * BI Begins an inline image. + * + * @author Ben Litchfield + */ +public final class BeginInlineImage extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operator.getImageData() == null || operator.getImageData().length == 0) + { + return; + } + PDImage image = new PDInlineImage(operator.getImageParameters(), + operator.getImageData(), + context.getResources()); + context.drawImage(image); + } + + @Override + public String getName() + { + return OperatorName.BEGIN_INLINE_IMAGE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClipEvenOddRule.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClipEvenOddRule.java new file mode 100644 index 00000000000..1ff261c84cb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClipEvenOddRule.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * W* Set clipping path using even odd rule. + * + * @author Daniel Wilson + */ +public final class ClipEvenOddRule extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.clip(GeneralPath.WIND_EVEN_ODD); + } + + @Override + public String getName() + { + return OperatorName.CLIP_EVEN_ODD; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClipNonZeroRule.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClipNonZeroRule.java new file mode 100644 index 00000000000..81e65107229 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClipNonZeroRule.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * W Set the clipping path using non zero winding rule. + * + * @author Daniel Wilson + */ +public class ClipNonZeroRule extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.clip(GeneralPath.WIND_NON_ZERO); + } + + @Override + public String getName() + { + return OperatorName.CLIP_NON_ZERO; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseAndStrokePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseAndStrokePath.java new file mode 100644 index 00000000000..e16092667ce --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseAndStrokePath.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; + +/** + * s: close and stroke the path. + * + * @author Ben Litchfield + */ +public class CloseAndStrokePath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + context.processOperator(OperatorName.CLOSE_PATH, arguments); + context.processOperator(OperatorName.STROKE_PATH, arguments); + } + + @Override + public String getName() + { + return OperatorName.CLOSE_AND_STROKE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseFillEvenOddAndStrokePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseFillEvenOddAndStrokePath.java new file mode 100644 index 00000000000..3c97023581a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseFillEvenOddAndStrokePath.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; + +/** + * b* Close, fill and stroke the path with even-odd winding rule. + * + */ +public final class CloseFillEvenOddAndStrokePath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.processOperator(OperatorName.CLOSE_PATH, operands); + context.processOperator(OperatorName.FILL_EVEN_ODD_AND_STROKE, operands); + } + + @Override + public String getName() + { + return OperatorName.CLOSE_FILL_EVEN_ODD_AND_STROKE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseFillNonZeroAndStrokePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseFillNonZeroAndStrokePath.java new file mode 100644 index 00000000000..65facff9e86 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CloseFillNonZeroAndStrokePath.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; + +/** + * b Close, fill and stroke the path with non-zero winding rule. + * + * @author Ben Litchfield + */ +public final class CloseFillNonZeroAndStrokePath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.processOperator(OperatorName.CLOSE_PATH, operands); + context.processOperator(OperatorName.FILL_NON_ZERO_AND_STROKE, operands); + } + + @Override + public String getName() + { + return OperatorName.CLOSE_FILL_NON_ZERO_AND_STROKE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClosePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClosePath.java new file mode 100644 index 00000000000..a79c82229a8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ClosePath.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * h Close the path. + * + * @author Ben Litchfield + */ +public final class ClosePath extends GraphicsOperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(ClosePath.class); + + @Override + public void process(Operator operator, List operands) throws IOException + { + if (context.getCurrentPoint() == null) + { + LOG.warn("ClosePath without initial MoveTo"); + return; + } + context.closePath(); + } + + @Override + public String getName() + { + return OperatorName.CLOSE_PATH; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveTo.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveTo.java new file mode 100644 index 00000000000..dedc06e3205 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveTo.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; +import java.awt.geom.Point2D; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * c Append curved segment to path. + * + * @author Ben Litchfield + */ +public class CurveTo extends GraphicsOperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(CurveTo.class); + + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.size() < 6) + { + throw new MissingOperandException(operator, operands); + } + if (!checkArrayTypesClass(operands, COSNumber.class)) + { + return; + } + COSNumber x1 = (COSNumber)operands.get(0); + COSNumber y1 = (COSNumber)operands.get(1); + COSNumber x2 = (COSNumber)operands.get(2); + COSNumber y2 = (COSNumber)operands.get(3); + COSNumber x3 = (COSNumber)operands.get(4); + COSNumber y3 = (COSNumber)operands.get(5); + + Point2D.Float point1 = context.transformedPoint(x1.floatValue(), y1.floatValue()); + Point2D.Float point2 = context.transformedPoint(x2.floatValue(), y2.floatValue()); + Point2D.Float point3 = context.transformedPoint(x3.floatValue(), y3.floatValue()); + + if (context.getCurrentPoint() == null) + { + LOG.warn("curveTo (" + point3.x + "," + point3.y + ") without initial MoveTo"); + context.moveTo(point3.x, point3.y); + } + else + { + context.curveTo(point1.x, point1.y, + point2.x, point2.y, + point3.x, point3.y); + } + } + + @Override + public String getName() + { + return OperatorName.CURVE_TO; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveToReplicateFinalPoint.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveToReplicateFinalPoint.java new file mode 100644 index 00000000000..d93a53ad2b6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveToReplicateFinalPoint.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; +import java.awt.geom.Point2D; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * y Append curved segment to path with final point replicated. + * + * @author Ben Litchfield + */ +public final class CurveToReplicateFinalPoint extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.size() < 4) + { + throw new MissingOperandException(operator, operands); + } + if (!checkArrayTypesClass(operands, COSNumber.class)) + { + return; + } + COSNumber x1 = (COSNumber)operands.get(0); + COSNumber y1 = (COSNumber)operands.get(1); + COSNumber x3 = (COSNumber)operands.get(2); + COSNumber y3 = (COSNumber)operands.get(3); + + Point2D.Float point1 = context.transformedPoint(x1.floatValue(), y1.floatValue()); + Point2D.Float point3 = context.transformedPoint(x3.floatValue(), y3.floatValue()); + + context.curveTo(point1.x, point1.y, + point3.x, point3.y, + point3.x, point3.y); + } + + @Override + public String getName() + { + return OperatorName.CURVE_TO_REPLICATE_FINAL_POINT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveToReplicateInitialPoint.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveToReplicateInitialPoint.java new file mode 100644 index 00000000000..51789541490 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/CurveToReplicateInitialPoint.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.Point2D; +import java.io.IOException; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * v Append curved segment to path with the initial point replicated. + * + * @author Ben Litchfield + */ +public class CurveToReplicateInitialPoint extends GraphicsOperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(CurveToReplicateInitialPoint.class); + + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.size() < 4) + { + throw new MissingOperandException(operator, operands); + } + if (!checkArrayTypesClass(operands, COSNumber.class)) + { + return; + } + COSNumber x2 = (COSNumber)operands.get(0); + COSNumber y2 = (COSNumber)operands.get(1); + COSNumber x3 = (COSNumber)operands.get(2); + COSNumber y3 = (COSNumber)operands.get(3); + + Point2D currentPoint = context.getCurrentPoint(); + + Point2D.Float point2 = context.transformedPoint(x2.floatValue(), y2.floatValue()); + Point2D.Float point3 = context.transformedPoint(x3.floatValue(), y3.floatValue()); + + if (currentPoint == null) + { + LOG.warn("curveTo (" + point3.x + "," + point3.y + ") without initial MoveTo"); + context.moveTo(point3.x, point3.y); + } + else + { + context.curveTo((float) currentPoint.getX(), (float) currentPoint.getY(), + point2.x, point2.y, + point3.x, point3.y); + } + } + + @Override + public String getName() + { + return OperatorName.CURVE_TO_REPLICATE_INITIAL_POINT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/DrawObject.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/DrawObject.java new file mode 100644 index 00000000000..d31f6921b08 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/DrawObject.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.MissingResourceException; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * Do: Draws an XObject. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class DrawObject extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.isEmpty()) + { + throw new MissingOperandException(operator, operands); + } + COSBase base0 = operands.get(0); + if (!(base0 instanceof COSName)) + { + return; + } + COSName objectName = (COSName) base0; + PDXObject xobject = context.getResources().getXObject(objectName); + + if (xobject == null) + { + throw new MissingResourceException("Missing XObject: " + objectName.getName()); + } + else if (xobject instanceof PDImageXObject) + { + PDImageXObject image = (PDImageXObject)xobject; + context.drawImage(image); + } + else if (xobject instanceof PDTransparencyGroup) + { + getContext().showTransparencyGroup((PDTransparencyGroup) xobject); + } + else if (xobject instanceof PDFormXObject) + { + getContext().showForm((PDFormXObject) xobject); + } + } + + @Override + public String getName() + { + return OperatorName.DRAW_OBJECT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/EndPath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/EndPath.java new file mode 100644 index 00000000000..dd3be612a37 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/EndPath.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * n End the path. + * + * @author Ben Litchfield + */ +public final class EndPath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.endPath(); + } + + @Override + public String getName() + { + return OperatorName.ENDPATH; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillEvenOddAndStrokePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillEvenOddAndStrokePath.java new file mode 100644 index 00000000000..3cf039e3769 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillEvenOddAndStrokePath.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.awt.geom.GeneralPath; +import java.io.IOException; + +/** + * B* Fill and then stroke the path, using the even-odd rule to determine the region to fill. + * + */ +public final class FillEvenOddAndStrokePath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.fillAndStrokePath(GeneralPath.WIND_EVEN_ODD); + } + + @Override + public String getName() + { + return OperatorName.FILL_EVEN_ODD_AND_STROKE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillEvenOddRule.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillEvenOddRule.java new file mode 100644 index 00000000000..3c6952b16da --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillEvenOddRule.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * f* Fill path using even odd rule. + * + * @author Ben Litchfield + */ +public final class FillEvenOddRule extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.fillPath(GeneralPath.WIND_EVEN_ODD); + } + + @Override + public String getName() + { + return OperatorName.FILL_EVEN_ODD; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillNonZeroAndStrokePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillNonZeroAndStrokePath.java new file mode 100644 index 00000000000..7828f16b19c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillNonZeroAndStrokePath.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.awt.geom.GeneralPath; +import java.io.IOException; + +/** + * B Fill and then stroke the path, using the nonzero winding number rule to determine the region + * to fill. + * + * @author Ben Litchfield + */ +public class FillNonZeroAndStrokePath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.fillAndStrokePath(GeneralPath.WIND_NON_ZERO); + } + + @Override + public String getName() + { + return OperatorName.FILL_NON_ZERO_AND_STROKE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillNonZeroRule.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillNonZeroRule.java new file mode 100644 index 00000000000..70a40e50bd9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/FillNonZeroRule.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * f Fill path using non zero winding rule. + * + * @author Ben Litchfield + */ +public class FillNonZeroRule extends GraphicsOperatorProcessor +{ + @Override + public final void process(Operator operator, List operands) throws IOException + { + context.fillPath(GeneralPath.WIND_NON_ZERO); + } + + @Override + public String getName() + { + return OperatorName.FILL_NON_ZERO; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/GraphicsOperatorProcessor.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/GraphicsOperatorProcessor.java new file mode 100644 index 00000000000..7f7a8c8159b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/GraphicsOperatorProcessor.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine; +import org.apache.pdfbox.contentstream.PDFStreamEngine; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * Base class for graphics operators. + * + * @author John Hewson + */ +public abstract class GraphicsOperatorProcessor extends OperatorProcessor +{ + /** The processing context. */ + protected PDFGraphicsStreamEngine context; + + @Override + public void setContext(PDFStreamEngine context) + { + super.setContext(context); + this.context = (PDFGraphicsStreamEngine)context; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/LegacyFillNonZeroRule.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/LegacyFillNonZeroRule.java new file mode 100644 index 00000000000..80b6349eee4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/LegacyFillNonZeroRule.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.graphics; + +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * F Fill path using non zero winding rule. Included only for compatibility with Acrobat. + * + * @author John Hewson + */ +public final class LegacyFillNonZeroRule extends FillNonZeroRule +{ + @Override + public String getName() + { + return OperatorName.LEGACY_FILL_NON_ZERO; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/LineTo.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/LineTo.java new file mode 100644 index 00000000000..b72d6177453 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/LineTo.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; +import java.awt.geom.Point2D; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * l Append straight line segment to path. + * + * @author Ben Litchfield + */ +public class LineTo extends GraphicsOperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(LineTo.class); + + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.size() < 2) + { + throw new MissingOperandException(operator, operands); + } + COSBase base0 = operands.get(0); + if (!(base0 instanceof COSNumber)) + { + return; + } + COSBase base1 = operands.get(1); + if (!(base1 instanceof COSNumber)) + { + return; + } + // append straight line segment from the current point to the point + COSNumber x = (COSNumber) base0; + COSNumber y = (COSNumber) base1; + + Point2D.Float pos = context.transformedPoint(x.floatValue(), y.floatValue()); + + if (context.getCurrentPoint() == null) + { + LOG.warn("LineTo (" + pos.x + "," + pos.y + ") without initial MoveTo"); + context.moveTo(pos.x, pos.y); + } + else + { + context.lineTo(pos.x, pos.y); + } + } + + @Override + public String getName() + { + return OperatorName.LINE_TO; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/MoveTo.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/MoveTo.java new file mode 100644 index 00000000000..78519e95c38 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/MoveTo.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.awt.geom.Point2D; +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * m Begins a new subpath. + * + * @author Ben Litchfield + */ +public final class MoveTo extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.size() < 2) + { + throw new MissingOperandException(operator, operands); + } + COSBase base0 = operands.get(0); + if (!(base0 instanceof COSNumber)) + { + return; + } + COSBase base1 = operands.get(1); + if (!(base1 instanceof COSNumber)) + { + return; + } + COSNumber x = (COSNumber) base0; + COSNumber y = (COSNumber) base1; + Point2D.Float pos = context.transformedPoint(x.floatValue(), y.floatValue()); + context.moveTo(pos.x, pos.y); + } + + @Override + public String getName() + { + return OperatorName.MOVE_TO; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ShadingFill.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ShadingFill.java new file mode 100644 index 00000000000..9120ba3cfbc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/ShadingFill.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +/** + * sh Fills the clipping area with the given shading pattern. + * + * @author Daniel Wilson + */ +public final class ShadingFill extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.isEmpty()) + { + throw new MissingOperandException(operator, operands); + } + context.shadingFill((COSName) operands.get(0)); + } + + @Override + public String getName() + { + return OperatorName.SHADING_FILL; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/StrokePath.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/StrokePath.java new file mode 100644 index 00000000000..3fe1a8c7add --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/StrokePath.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.graphics; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import java.io.IOException; + +/** + * S Stroke the path. + * + * @author Ben Litchfield + */ +public final class StrokePath extends GraphicsOperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + context.strokePath(); + } + + @Override + public String getName() + { + return OperatorName.STROKE_PATH; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/package.html b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/package.html new file mode 100644 index 00000000000..b6c90e36fad --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/graphics/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains implementations of all of the PDF graphics operators. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequence.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequence.java new file mode 100644 index 00000000000..5370194ae9f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequence.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.markedcontent; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * BMC : Begins a marked-content sequence. + * + * @author Johannes Koch + */ +public class BeginMarkedContentSequence extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + COSName tag = null; + for (COSBase argument : arguments) + { + if (argument instanceof COSName) + { + tag = (COSName) argument; + } + } + context.beginMarkedContentSequence(tag, null); + } + + @Override + public String getName() + { + return OperatorName.BEGIN_MARKED_CONTENT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java new file mode 100644 index 00000000000..1ab058d0e74 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/BeginMarkedContentSequenceWithProperties.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.markedcontent; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * BDC : Begins a marked-content sequence with property list. + * + * @author Johannes Koch + */ +public class BeginMarkedContentSequenceWithProperties extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + COSName tag = null; + COSDictionary properties = null; + for (COSBase argument : arguments) + { + if (argument instanceof COSName) + { + tag = (COSName) argument; + } + else if (argument instanceof COSDictionary) + { + properties = (COSDictionary) argument; + } + } + context.beginMarkedContentSequence(tag, properties); + } + + @Override + public String getName() + { + return OperatorName.BEGIN_MARKED_CONTENT_SEQ; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/DrawObject.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/DrawObject.java new file mode 100644 index 00000000000..f823e07d508 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/DrawObject.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.markedcontent; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; +import org.apache.pdfbox.text.PDFMarkedContentExtractor; + +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * Do: Draws an XObject. + * + * @author Ben Litchfield + * @author Mario Ivankovits + */ +public class DrawObject extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + COSBase base0 = arguments.get(0); + if (!(base0 instanceof COSName)) + { + return; + } + COSName name = (COSName) base0; + PDXObject xobject = context.getResources().getXObject(name); + ((PDFMarkedContentExtractor) context).xobject(xobject); + + if (xobject instanceof PDTransparencyGroup) + { + context.showTransparencyGroup((PDTransparencyGroup) xobject); + } + else if (xobject instanceof PDFormXObject) + { + PDFormXObject form = (PDFormXObject) xobject; + context.showForm(form); + } + } + + @Override + public String getName() + { + return OperatorName.DRAW_OBJECT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/EndMarkedContentSequence.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/EndMarkedContentSequence.java new file mode 100644 index 00000000000..80fd8a1b8cb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/markedcontent/EndMarkedContentSequence.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.markedcontent; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * EMC : Ends a marked-content sequence begun by BMC or BDC. + * + * @author Johannes Koch + */ +public class EndMarkedContentSequence extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + context.endMarkedContentSequence(); + } + + @Override + public String getName() + { + return OperatorName.END_MARKED_CONTENT; + } +} diff --git a/src/org/pdfbox/util/operator/package.html b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/package.html similarity index 100% rename from src/org/pdfbox/util/operator/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Concatenate.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Concatenate.java new file mode 100644 index 00000000000..c2dbd0730f9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Concatenate.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.util.List; +import java.io.IOException; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * cm: Concatenate matrix to current transformation matrix. + * + * @author Laurent Huault + */ +public class Concatenate extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.size() < 6) + { + throw new MissingOperandException(operator, arguments); + } + if (!checkArrayTypesClass(arguments, COSNumber.class)) + { + return; + } + + // concatenate matrix to current transformation matrix + COSNumber a = (COSNumber) arguments.get(0); + COSNumber b = (COSNumber) arguments.get(1); + COSNumber c = (COSNumber) arguments.get(2); + COSNumber d = (COSNumber) arguments.get(3); + COSNumber e = (COSNumber) arguments.get(4); + COSNumber f = (COSNumber) arguments.get(5); + + Matrix matrix = new Matrix(a.floatValue(), b.floatValue(), c.floatValue(), + d.floatValue(), e.floatValue(), f.floatValue()); + + context.getGraphicsState().getCurrentTransformationMatrix().concatenate(matrix); + } + + @Override + public String getName() + { + return OperatorName.CONCAT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/EmptyGraphicsStackException.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/EmptyGraphicsStackException.java new file mode 100644 index 00000000000..8b55aa7fa63 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/EmptyGraphicsStackException.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; + +/** + * Throw when restore is executed when the graphics stack is empty. + */ +public final class EmptyGraphicsStackException extends IOException +{ + /** + * See https://stackoverflow.com/questions/285793/ + */ + private static final long serialVersionUID = 1L; + + EmptyGraphicsStackException() + { + super("Cannot execute restore, the graphics stack is empty"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Restore.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Restore.java new file mode 100644 index 00000000000..c303120148a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Restore.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; + +/** + * Q: Restore the graphics state. + * + * @author Laurent Huault + */ +public class Restore extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (context.getGraphicsStackSize() > 1) + { + context.restoreGraphicsState(); + } + else + { + // this shouldn't happen but it does, see PDFBOX-161 + throw new EmptyGraphicsStackException(); + } + } + + @Override + public String getName() + { + return OperatorName.RESTORE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Save.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Save.java new file mode 100644 index 00000000000..b88024c3a88 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/Save.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * q: Save the graphics state. + * + * @author Laurent Huault + */ +public class Save extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) + { + context.saveGraphicsState(); + } + + @Override + public String getName() + { + return OperatorName.SAVE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetFlatness.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetFlatness.java new file mode 100644 index 00000000000..2d834c5af0a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetFlatness.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * i: Set the flatness tolerance. + * + * @author John Hewson + */ +public class SetFlatness extends OperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.isEmpty()) + { + throw new MissingOperandException(operator, operands); + } + if (!checkArrayTypesClass(operands, COSNumber.class)) + { + return; + } + COSNumber value = (COSNumber) operands.get(0); + context.getGraphicsState().setFlatness(value.floatValue()); + } + + @Override + public String getName() + { + return OperatorName.SET_FLATNESS; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetGraphicsStateParameters.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetGraphicsStateParameters.java new file mode 100644 index 00000000000..e28ef13e2c5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetGraphicsStateParameters.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +/** + * gs: Set parameters from graphics state parameter dictionary. + * + * @author Ben Litchfield + */ +public class SetGraphicsStateParameters extends OperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(SetGraphicsStateParameters.class); + + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + COSBase base0 = arguments.get(0); + if (!(base0 instanceof COSName)) + { + return; + } + + // set parameters from graphics state parameter dictionary + COSName graphicsName = (COSName) base0; + PDExtendedGraphicsState gs = context.getResources().getExtGState(graphicsName); + if (gs == null) + { + LOG.error("name for 'gs' operator not found in resources: /" + graphicsName.getName()); + return; + } + gs.copyIntoGraphicsState( context.getGraphicsState() ); + } + + @Override + public String getName() + { + return OperatorName.SET_GRAPHICS_STATE_PARAMS; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineCapStyle.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineCapStyle.java new file mode 100644 index 00000000000..10b40a06572 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineCapStyle.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; + +/** + * J: Set the line cap style. + * + */ +public class SetLineCapStyle extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + int lineCapStyle = ((COSNumber)arguments.get( 0 )).intValue(); + context.getGraphicsState().setLineCap( lineCapStyle ); + } + + @Override + public String getName() + { + return OperatorName.SET_LINE_CAPSTYLE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java new file mode 100644 index 00000000000..6ff06848061 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; + +/** + * d: Set the line dash pattern. + * + * @author Ben Litchfield + */ +public class SetLineDashPattern extends OperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(SetLineDashPattern.class); + + @Override + public void process(Operator operator, List arguments) throws MissingOperandException + { + if (arguments.size() < 2) + { + throw new MissingOperandException(operator, arguments); + } + COSBase base0 = arguments.get(0); + if (!(base0 instanceof COSArray)) + { + return; + } + COSBase base1 = arguments.get(1); + if (!(base1 instanceof COSNumber)) + { + return; + } + COSArray dashArray = (COSArray) base0; + int dashPhase = ((COSNumber) base1).intValue(); + + boolean allZero = true; + for (COSBase base : dashArray) + { + if (base instanceof COSNumber) + { + COSNumber num = (COSNumber) base; + if (Float.compare(num.floatValue(), 0) != 0) + { + allZero = false; + break; + } + } + else + { + LOG.warn("dash array has non number element " + base + ", ignored"); + dashArray = new COSArray(); + break; + } + } + if (dashArray.size() > 0 && allZero) + { + LOG.warn("dash lengths all zero, ignored"); + dashArray = new COSArray(); + } + context.setLineDashPattern(dashArray, dashPhase); + } + + @Override + public String getName() + { + return OperatorName.SET_LINE_DASHPATTERN; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineJoinStyle.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineJoinStyle.java new file mode 100644 index 00000000000..addcc6f28bd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineJoinStyle.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +/** + * j: Set the line join style. + * + */ +public class SetLineJoinStyle extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + int lineJoinStyle = ((COSNumber)arguments.get( 0 )).intValue(); + context.getGraphicsState().setLineJoin( lineJoinStyle ); + } + + @Override + public String getName() + { + return OperatorName.SET_LINE_JOINSTYLE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineMiterLimit.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineMiterLimit.java new file mode 100644 index 00000000000..d3c844a38c0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineMiterLimit.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; + + +/** + * M: Set miter limit. + * + */ +public class SetLineMiterLimit extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + COSNumber miterLimit = (COSNumber)arguments.get( 0 ); + context.getGraphicsState().setMiterLimit( miterLimit.floatValue() ); + } + + @Override + public String getName() + { + return OperatorName.SET_LINE_MITERLIMIT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineWidth.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineWidth.java new file mode 100644 index 00000000000..531ee6e0485 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineWidth.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; + +/** + * w: Set line width. + * + * @author Ben Litchfield + */ +public class SetLineWidth extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + COSNumber width = (COSNumber) arguments.get(0); + context.getGraphicsState().setLineWidth(width.floatValue()); + } + + @Override + public String getName() + { + return OperatorName.SET_LINE_WIDTH; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetMatrix.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetMatrix.java new file mode 100644 index 00000000000..b1a8a343045 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetMatrix.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.state; + +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.util.Matrix; + +/** + * Tm: Set text matrix and text line matrix. + * + * @author Laurent Huault + */ +public class SetMatrix extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws MissingOperandException + { + if (arguments.size() < 6) + { + throw new MissingOperandException(operator, arguments); + } + if (!checkArrayTypesClass(arguments, COSNumber.class)) + { + return; + } + + COSNumber a = (COSNumber)arguments.get( 0 ); + COSNumber b = (COSNumber)arguments.get( 1 ); + COSNumber c = (COSNumber)arguments.get( 2 ); + COSNumber d = (COSNumber)arguments.get( 3 ); + COSNumber e = (COSNumber)arguments.get( 4 ); + COSNumber f = (COSNumber)arguments.get( 5 ); + + Matrix matrix = new Matrix(a.floatValue(), b.floatValue(), c.floatValue(), + d.floatValue(), e.floatValue(), f.floatValue()); + + context.setTextMatrix(matrix); + context.setTextLineMatrix(matrix.clone()); + } + + @Override + public String getName() + { + return OperatorName.SET_MATRIX; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetRenderingIntent.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetRenderingIntent.java new file mode 100644 index 00000000000..10d14e9a7bf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetRenderingIntent.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.state; + +import java.io.IOException; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingIntent; + +/** + * ri: Set the rendering intent. + * + * @author John Hewson + */ +public class SetRenderingIntent extends OperatorProcessor +{ + @Override + public void process(Operator operator, List operands) throws IOException + { + if (operands.isEmpty()) + { + throw new MissingOperandException(operator, operands); + } + COSBase base = operands.get(0); + if (!(base instanceof COSName)) + { + return; + } + context.getGraphicsState().setRenderingIntent( + RenderingIntent.fromString(((COSName)base).getName())); + } + + @Override + public String getName() + { + return OperatorName.SET_RENDERINGINTENT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/BeginText.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/BeginText.java new file mode 100644 index 00000000000..358e35d1e7f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/BeginText.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * BT: Begin text. + * + * @author Ben Litchfield + * @author Laurent Huault + */ +public class BeginText extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + context.setTextMatrix( new Matrix()); + context.setTextLineMatrix( new Matrix() ); + context.beginText(); + } + + @Override + public String getName() + { + return OperatorName.BEGIN_TEXT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/EndText.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/EndText.java new file mode 100644 index 00000000000..eb79937d15c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/EndText.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * ET: End text. + * + * @author Laurent Huault + */ +public class EndText extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + context.setTextMatrix(null); + context.setTextLineMatrix(null); + context.endText(); + } + + @Override + public String getName() + { + return OperatorName.END_TEXT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/MoveText.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/MoveText.java new file mode 100644 index 00000000000..94ea02eaac0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/MoveText.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.util.Matrix; + +/** + * Td: Move text position. + * + * @author Laurent Huault + */ +public class MoveText extends OperatorProcessor +{ + private static final Log LOG = LogFactory.getLog(MoveText.class); + + @Override + public void process(Operator operator, List arguments) throws MissingOperandException + { + if (arguments.size() < 2) + { + throw new MissingOperandException(operator, arguments); + } + Matrix textLineMatrix = context.getTextLineMatrix(); + if (textLineMatrix == null) + { + LOG.warn("TextLineMatrix is null, " + getName() + " operator will be ignored"); + return; + } + + COSBase base0 = arguments.get(0); + COSBase base1 = arguments.get(1); + if (!(base0 instanceof COSNumber)) + { + return; + } + if (!(base1 instanceof COSNumber)) + { + return; + } + COSNumber x = (COSNumber) base0; + COSNumber y = (COSNumber) base1; + + Matrix matrix = new Matrix(1, 0, 0, 1, x.floatValue(), y.floatValue()); + textLineMatrix.concatenate(matrix); + context.setTextMatrix(textLineMatrix.clone()); + } + + @Override + public String getName() + { + return OperatorName.MOVE_TEXT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/MoveTextSetLeading.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/MoveTextSetLeading.java new file mode 100644 index 00000000000..77ef702d969 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/MoveTextSetLeading.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * TD: Move text position and set leading. + * + * @author Laurent Huault + */ +public class MoveTextSetLeading extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.size() < 2) + { + throw new MissingOperandException(operator, arguments); + } + + //move text position and set leading + COSBase base1 = arguments.get(1); + if (!(base1 instanceof COSNumber)) + { + return; + } + COSNumber y = (COSNumber) base1; + + List args = new ArrayList<>(); + args.add(new COSFloat(-1 * y.floatValue())); + context.processOperator(OperatorName.SET_TEXT_LEADING, args); + context.processOperator(OperatorName.MOVE_TEXT, arguments); + } + + @Override + public String getName() + { + return OperatorName.MOVE_TEXT_SET_LEADING; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/NextLine.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/NextLine.java new file mode 100644 index 00000000000..4124e301aa0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/NextLine.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * T*: Move to start of next text line. + * + * @author Laurent Huault + */ +public class NextLine extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + //move to start of next text line + List args = new ArrayList<>(); + args.add(new COSFloat(0f)); + // this must be -leading instead of just leading as written in the + // specification (p.369) the acrobat reader seems to implement it the same way + args.add(new COSFloat(-1 * context.getGraphicsState().getTextState().getLeading())); + // use Td instead of repeating code + context.processOperator(OperatorName.MOVE_TEXT, args); + } + + @Override + public String getName() + { + return OperatorName.NEXT_LINE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetCharSpacing.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetCharSpacing.java new file mode 100644 index 00000000000..33ee8080171 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetCharSpacing.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * Tc: Set character spacing. + * + * @author Laurent Huault + */ +public class SetCharSpacing extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + + // there are some documents which are incorrectly structured, and have + // a wrong number of arguments to this, so we will assume the last argument + // in the list + Object charSpacing = arguments.get(arguments.size()-1); + if (charSpacing instanceof COSNumber) + { + COSNumber characterSpacing = (COSNumber)charSpacing; + context.getGraphicsState().getTextState().setCharacterSpacing(characterSpacing.floatValue()); + } + } + + @Override + public String getName() + { + return OperatorName.SET_CHAR_SPACING; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetFontAndSize.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetFontAndSize.java new file mode 100644 index 00000000000..39ba27c1a95 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetFontAndSize.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * Tf: Set text font and size. + * + * @author Laurent Huault + */ +public class SetFontAndSize extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.size() < 2) + { + throw new MissingOperandException(operator, arguments); + } + + COSBase base0 = arguments.get(0); + COSBase base1 = arguments.get(1); + if (!(base0 instanceof COSName)) + { + return; + } + if (!(base1 instanceof COSNumber)) + { + return; + } + COSName fontName = (COSName) base0; + float fontSize = ((COSNumber) base1).floatValue(); + context.getGraphicsState().getTextState().setFontSize(fontSize); + PDFont font = context.getResources().getFont(fontName); + context.getGraphicsState().getTextState().setFont(font); + } + + @Override + public String getName() + { + return OperatorName.SET_FONT_AND_SIZE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextHorizontalScaling.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextHorizontalScaling.java new file mode 100644 index 00000000000..45130e29c2a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextHorizontalScaling.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; + +/** + * Tz: Set horizontal text scaling. + * + * @author Ben Litchfield + */ +public class SetTextHorizontalScaling extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + + COSNumber scaling = (COSNumber)arguments.get(0); + context.getGraphicsState().getTextState().setHorizontalScaling(scaling.floatValue()); + } + + @Override + public String getName() + { + return OperatorName.SET_TEXT_HORIZONTAL_SCALING; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextLeading.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextLeading.java new file mode 100644 index 00000000000..47de5aafb7b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextLeading.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * TL: Set text leading. + * + * @author Laurent Huault + */ +public class SetTextLeading extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) + { + COSNumber leading = (COSNumber)arguments.get( 0 ); + context.getGraphicsState().getTextState().setLeading( leading.floatValue() ); + } + + @Override + public String getName() + { + return OperatorName.SET_TEXT_LEADING; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextRenderingMode.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextRenderingMode.java new file mode 100644 index 00000000000..2562b815eb2 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextRenderingMode.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.MissingOperandException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; + +/** + * Tr: Set text rendering mode. + * + * @author Ben Litchfield + */ +public class SetTextRenderingMode extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + throw new MissingOperandException(operator, arguments); + } + COSBase base0 = arguments.get(0); + if (!(base0 instanceof COSNumber)) + { + return; + } + COSNumber mode = (COSNumber) base0; + int val = mode.intValue(); + if (val < 0 || val >= RenderingMode.values().length) + { + return; + } + RenderingMode renderingMode = RenderingMode.fromInt(val); + context.getGraphicsState().getTextState().setRenderingMode(renderingMode); + } + + @Override + public String getName() + { + return OperatorName.SET_TEXT_RENDERINGMODE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextRise.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextRise.java new file mode 100644 index 00000000000..9a1a281e5cf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetTextRise.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; + +/** + * Ts: Set text rise. + * + * @author Ben Litchfield + */ +public class SetTextRise extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + return; + } + COSBase base = arguments.get(0); + if (!(base instanceof COSNumber)) + { + return; + } + COSNumber rise = (COSNumber) base; + context.getGraphicsState().getTextState().setRise( rise.floatValue() ); + } + + @Override + public String getName() + { + return OperatorName.SET_TEXT_RISE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetWordSpacing.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetWordSpacing.java new file mode 100644 index 00000000000..4991e3963ca --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/SetWordSpacing.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * Tw: Set word spacing. + * + * @author Laurent Huault + */ +public class SetWordSpacing extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) + { + if (arguments.isEmpty()) + { + return; + } + COSBase base = arguments.get(0); + if (!(base instanceof COSNumber)) + { + return; + } + COSNumber wordSpacing = (COSNumber) base; + context.getGraphicsState().getTextState().setWordSpacing( wordSpacing.floatValue() ); + } + + @Override + public String getName() + { + return OperatorName.SET_WORD_SPACING; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowText.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowText.java new file mode 100644 index 00000000000..bca6aeee036 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowText.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; + +/** + * Tj: Show text. + * + * @author Laurent Huault + */ +public class ShowText extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + // ignore ( )Tj + return; + } + COSBase base = arguments.get(0); + if (!(base instanceof COSString)) + { + // ignore + return; + } + if (context.getTextMatrix() == null) + { + // ignore: outside of BT...ET + return; + } + COSString string = (COSString) base; + context.showTextString(string.getBytes()); + } + + @Override + public String getName() + { + return OperatorName.SHOW_TEXT; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextAdjusted.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextAdjusted.java new file mode 100644 index 00000000000..de6e438cae8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextAdjusted.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import java.io.IOException; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +/** + * TJ: Show text, with position adjustments. + * + * @author Laurent Huault + */ +public class ShowTextAdjusted extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.isEmpty()) + { + return; + } + COSBase base = arguments.get(0); + if (!(base instanceof COSArray)) + { + return; + } + if (context.getTextMatrix() == null) + { + // ignore: outside of BT...ET + return; + } + COSArray array = (COSArray) base; + context.showTextStrings(array); + } + + @Override + public String getName() + { + return OperatorName.SHOW_TEXT_ADJUSTED; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextLine.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextLine.java new file mode 100644 index 00000000000..f5240183648 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextLine.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; + +/** + * ': Move to the next line and show text. + * + * @author Laurent Huault + */ +public class ShowTextLine extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + context.processOperator(OperatorName.NEXT_LINE, null); + context.processOperator(OperatorName.SHOW_TEXT, arguments); + } + + @Override + public String getName() + { + return OperatorName.SHOW_TEXT_LINE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextLineAndSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextLineAndSpace.java new file mode 100644 index 00000000000..a7afae3fbcf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/text/ShowTextLineAndSpace.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.contentstream.operator.text; + +import java.util.List; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.contentstream.operator.OperatorProcessor; + +import java.io.IOException; +import org.apache.pdfbox.contentstream.operator.MissingOperandException; + +/** + * ": Set word and character spacing, move to next line, and show text. + * + * @author Laurent Huault + */ +public class ShowTextLineAndSpace extends OperatorProcessor +{ + @Override + public void process(Operator operator, List arguments) throws IOException + { + if (arguments.size() < 3) + { + throw new MissingOperandException(operator, arguments); + } + context.processOperator(OperatorName.SET_WORD_SPACING, arguments.subList(0, 1)); + context.processOperator(OperatorName.SET_CHAR_SPACING, arguments.subList(1, 2)); + context.processOperator(OperatorName.SHOW_TEXT_LINE, arguments.subList(2, 3)); + } + + @Override + public String getName() + { + return OperatorName.SHOW_TEXT_LINE_AND_SPACE; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/contentstream/package.html b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/package.html new file mode 100644 index 00000000000..a5ce5b91928 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/contentstream/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains provides classes for working with content streams. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java new file mode 100644 index 00000000000..763073603f8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java @@ -0,0 +1,583 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * An array of PDFBase objects as part of the PDF document. + * + * @author Ben Litchfield + */ +public class COSArray extends COSBase implements Iterable, COSUpdateInfo +{ + private final List objects = new ArrayList<>(); + private boolean needToBeUpdated; + + /** + * Constructor. + */ + public COSArray() + { + //default constructor + } + + /** + * This will add an object to the array. + * + * @param object The object to add to the array. + */ + public void add( COSBase object ) + { + objects.add( object ); + } + + /** + * This will add an object to the array. + * + * @param object The object to add to the array. + */ + public void add( COSObjectable object ) + { + objects.add( object.getCOSObject() ); + } + + /** + * Add the specified object at the ith location and push the rest to the + * right. + * + * @param i The index to add at. + * @param object The object to add at that index. + */ + public void add( int i, COSBase object) + { + objects.add( i, object ); + } + + /** + * This will remove all of the objects in the collection. + */ + public void clear() + { + objects.clear(); + } + + /** + * This will remove all of the objects in the collection. + * + * @param objectsList The list of objects to remove from the collection. + */ + public void removeAll( Collection objectsList ) + { + objects.removeAll( objectsList ); + } + + /** + * This will retain all of the objects in the collection. + * + * @param objectsList The list of objects to retain from the collection. + */ + public void retainAll( Collection objectsList ) + { + objects.retainAll( objectsList ); + } + + /** + * This will add an object to the array. + * + * @param objectsList The object to add to the array. + */ + public void addAll( Collection objectsList ) + { + objects.addAll( objectsList ); + } + + /** + * This will add all objects to this array. + * + * @param objectList The objects to add. + */ + public void addAll( COSArray objectList ) + { + if( objectList != null ) + { + objects.addAll( objectList.objects ); + } + } + + /** + * Add the specified object at the ith location and push the rest to the + * right. + * + * @param i The index to add at. + * @param objectList The object to add at that index. + */ + public void addAll( int i, Collection objectList ) + { + objects.addAll( i, objectList ); + } + + /** + * This will set an object at a specific index. + * + * @param index zero based index into array. + * @param object The object to set. + */ + public void set( int index, COSBase object ) + { + objects.set( index, object ); + } + + /** + * This will set an object at a specific index. + * + * @param index zero based index into array. + * @param intVal The object to set. + */ + public void set( int index, int intVal ) + { + objects.set( index, COSInteger.get(intVal) ); + } + + /** + * This will set an object at a specific index. + * + * @param index zero based index into array. + * @param object The object to set. + */ + public void set( int index, COSObjectable object ) + { + COSBase base = null; + if( object != null ) + { + base = object.getCOSObject(); + } + objects.set( index, base ); + } + + /** + * This will get an object from the array. This will dereference the object. + * If the object is COSNull then null will be returned. + * + * @param index The index into the array to get the object. + * + * @return The object at the requested index. + */ + public COSBase getObject( int index ) + { + Object obj = objects.get( index ); + if( obj instanceof COSObject ) + { + obj = ((COSObject)obj).getObject(); + } + if (obj instanceof COSNull) + { + obj = null; + } + return (COSBase)obj; + } + + /** + * This will get an object from the array. This will NOT dereference + * the COS object. + * + * @param index The index into the array to get the object. + * + * @return The object at the requested index. + */ + public COSBase get( int index ) + { + return objects.get( index ); + } + + /** + * Get the value of the array as an integer. + * + * @param index The index into the list. + * + * @return The value at that index or -1 if does not exist. + */ + public int getInt( int index ) + { + return getInt( index, -1 ); + } + + /** + * Get the value of the array as an integer, return the default if it does not exist. + * + * @param index The value of the array. + * @param defaultValue The value to return if the value is null. + * @return The value at the index or the defaultValue. + */ + public int getInt( int index, int defaultValue ) + { + int retval = defaultValue; + if ( index < size() ) + { + Object obj = objects.get( index ); + if( obj instanceof COSNumber ) + { + retval = ((COSNumber)obj).intValue(); + } + } + return retval; + } + + /** + * Set the value in the array as an integer. + * + * @param index The index into the array. + * @param value The value to set. + */ + public void setInt( int index, int value ) + { + set( index, COSInteger.get( value ) ); + } + + /** + * Set the value in the array as a name. + * @param index The index into the array. + * @param name The name to set in the array. + */ + public void setName( int index, String name ) + { + set( index, COSName.getPDFName( name ) ); + } + + /** + * Get the value of the array as a string. + * + * @param index The index into the array. + * @return The name converted to a string or null if it does not exist. + */ + public String getName( int index ) + { + return getName( index, null ); + } + + /** + * Get an entry in the array that is expected to be a COSName. + * @param index The index into the array. + * @param defaultValue The value to return if it is null. + * @return The value at the index or defaultValue if none is found. + */ + public String getName( int index, String defaultValue ) + { + String retval = defaultValue; + if( index < size() ) + { + Object obj = objects.get( index ); + if( obj instanceof COSName ) + { + retval = ((COSName)obj).getName(); + } + } + return retval; + } + + /** + * Set the value in the array as a string. + * @param index The index into the array. + * @param string The string to set in the array. + */ + public void setString( int index, String string ) + { + if ( string != null ) + { + set( index, new COSString( string ) ); + } + else + { + set( index, null ); + } + } + + /** + * Get the value of the array as a string. + * + * @param index The index into the array. + * @return The string or null if it does not exist. + */ + public String getString( int index ) + { + return getString( index, null ); + } + + /** + * Get an entry in the array that is expected to be a COSName. + * @param index The index into the array. + * @param defaultValue The value to return if it is null. + * @return The value at the index or defaultValue if none is found. + */ + public String getString( int index, String defaultValue ) + { + String retval = defaultValue; + if( index < size() ) + { + Object obj = objects.get( index ); + if( obj instanceof COSString ) + { + retval = ((COSString)obj).getString(); + } + } + return retval; + } + + /** + * This will get the size of this array. + * + * @return The number of elements in the array. + */ + public int size() + { + return objects.size(); + } + + /** + * This will remove an element from the array. + * + * @param i The index of the object to remove. + * + * @return The object that was removed. + */ + public COSBase remove( int i ) + { + return objects.remove( i ); + } + + /** + * This will remove an element from the array. + * + * @param o The object to remove. + * + * @return true if the object was removed, false + * otherwise + */ + public boolean remove( COSBase o ) + { + return objects.remove( o ); + } + + /** + * This will remove an element from the array. + * This method will also remove a reference to the object. + * + * @param o The object to remove. + * @return true if the object was removed, false + * otherwise + */ + public boolean removeObject(COSBase o) + { + boolean removed = this.remove(o); + if (!removed) + { + for (int i = 0; i < this.size(); i++) + { + COSBase entry = this.get(i); + if (entry instanceof COSObject) + { + COSObject objEntry = (COSObject) entry; + if (objEntry.getObject().equals(o)) + { + return this.remove(entry); + } + } + } + } + return removed; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "COSArray{" + objects + "}"; + } + + /** + * Get access to the list. + * + * @return an iterator over the array elements + */ + @Override + public Iterator iterator() + { + return objects.iterator(); + } + + /** + * This will return the index of the entry or -1 if it is not found. + * + * @param object The object to search for. + * @return The index of the object or -1. + */ + public int indexOf( COSBase object ) + { + int retval = -1; + for( int i=0; retval < 0 && i + * Although the state is set, it has no effect on COSWriter behavior because arrays are always + * written as direct object. If an array is to be part of an incremental save, then the method + * should be called for its holding dictionary. + * + * @param flag + */ + @Override + public void setNeedToBeUpdated(boolean flag) + { + needToBeUpdated = flag; + } + + /** + * This will take an COSArray of numbers and convert it to a float[]. + * + * @return This COSArray as an array of float numbers. + */ + public float[] toFloatArray() + { + float[] retval = new float[size()]; + for (int i = 0; i < size(); i++) + { + COSBase base = getObject(i); + retval[i] = + base instanceof COSNumber ? ((COSNumber) base).floatValue() : 0; + } + return retval; + } + + /** + * Clear the current contents of the COSArray and set it with the float[]. + * + * @param value The new value of the float array. + */ + public void setFloatArray( float[] value ) + { + this.clear(); + for (float aValue : value) + { + add(new COSFloat(aValue)); + } + } + + /** + * Return contents of COSArray as a Java List. + * + * @return the COSArray as List + */ + public List toList() + { + List retList = new ArrayList<>(size()); + for (int i = 0; i < size(); i++) + { + retList.add(get(i)); + } + return retList; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSBase.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSBase.java new file mode 100644 index 00000000000..34f6c7d076c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSBase.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +import java.io.IOException; + +/** + * The base object that all objects in the PDF document will extend. + * + * @author Ben Litchfield + */ +public abstract class COSBase implements COSObjectable +{ + private boolean direct; + + /** + * Constructor. + */ + public COSBase() + { + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSBase getCOSObject() + { + return this; + } + + /** + * visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return any object, depending on the visitor implementation, or null + * @throws IOException If an error occurs while visiting this object. + */ + public abstract Object accept(ICOSVisitor visitor) throws IOException; + + /** + * If the state is set true, the dictionary will be written direct into the called object. + * This means, no indirect object will be created. + * + * @return the state + */ + public boolean isDirect() + { + return direct; + } + + /** + * Set the state true, if the dictionary should be written as a direct object and not indirect. + * + * @param direct set it true, for writing direct object + */ + public void setDirect(boolean direct) + { + this.direct = direct; + } +} diff --git a/src/org/pdfbox/cos/COSBoolean.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSBoolean.java similarity index 89% rename from src/org/pdfbox/cos/COSBoolean.java rename to pdfbox/src/main/java/org/apache/pdfbox/cos/COSBoolean.java index 7145586008c..ccf7f429ff9 100644 --- a/src/org/pdfbox/cos/COSBoolean.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSBoolean.java @@ -14,20 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.cos; +package org.apache.pdfbox.cos; import java.io.IOException; import java.io.OutputStream; -import org.pdfbox.exceptions.COSVisitorException; - /** * This class represents a boolean value in the PDF document. * - * @author Ben Litchfield - * @version $Revision: 1.14 $ + * @author Ben Litchfield */ -public class COSBoolean extends COSBase +public final class COSBoolean extends COSBase { /** * The true boolean token. @@ -48,14 +45,14 @@ public class COSBoolean extends COSBase */ public static final COSBoolean FALSE = new COSBoolean( false ); - private boolean value; + private final boolean value; /** * Constructor. * * @param aValue The boolean value. */ - private COSBoolean(boolean aValue ) + private COSBoolean(boolean aValue) { value = aValue; } @@ -109,9 +106,10 @@ public static COSBoolean getBoolean( Boolean value ) * * @param visitor The object to notify when visiting this object. * @return any object, depending on the visitor implementation, or null - * @throws COSVisitorException If an error occurs while visiting this object. + * @throws IOException If an error occurs while visiting this object. */ - public Object accept(ICOSVisitor visitor) throws COSVisitorException + @Override + public Object accept(ICOSVisitor visitor) throws IOException { return visitor.visitFromBoolean(this); } @@ -121,6 +119,7 @@ public Object accept(ICOSVisitor visitor) throws COSVisitorException * * @return The string value of this object. */ + @Override public String toString() { return String.valueOf( value ); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java new file mode 100644 index 00000000000..0389a97407c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java @@ -0,0 +1,1583 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.util.DateConverter; +import org.apache.pdfbox.util.SmallMap; + +/** + * This class represents a dictionary where name/value pairs reside. + * + * @author Ben Litchfield + * + */ +public class COSDictionary extends COSBase implements COSUpdateInfo +{ + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(COSDictionary.class); + + private static final String PATH_SEPARATOR = "/"; + private boolean needToBeUpdated; + + /** + * The name-value pairs of this dictionary. The pairs are kept in the order they were added to the dictionary. + */ +// protected Map items = new LinkedHashMap(); + protected Map items = new SmallMap<>(); + + /** + * Constructor. + */ + public COSDictionary() + { + // default constructor + debugInstanceCount(); + } + + /** + * Copy Constructor. This will make a shallow copy of this dictionary. + * + * @param dict The dictionary to copy. + */ + public COSDictionary(COSDictionary dict) + { + items.putAll(dict.items); + + debugInstanceCount(); + } + + private static final boolean DO_DEBUG_INSTANCE_COUNT = false; + private static final List> DICT_INSTANCES = + DO_DEBUG_INSTANCE_COUNT ? new ArrayList>() : null; + + /** + * Only for memory debugging purposes (especially PDFBOX-3284): holds weak + * references to all instances and prints after each 10,000th instance a + * statistic across all instances showing how many instances we have per + * dictionary size (item count). + * This is to show that there can be a large number of COSDictionary instances + * but each having only few items, thus using a {@link LinkedHashMap} is a + * waste of memory resources. + * + *

This method should be removed if further testing of COSDictionary uses + * is not needed anymore.

+ */ + private void debugInstanceCount() + { + if (DO_DEBUG_INSTANCE_COUNT) + { + synchronized (DICT_INSTANCES) + { + DICT_INSTANCES.add(new WeakReference<>(this)); + // print statistics at each 10,000th instance + if (DICT_INSTANCES.size() % 10000 == 0) + { + int[] sizeCount = new int[100]; + for (WeakReference dict : DICT_INSTANCES) + { + COSDictionary curDict = dict.get(); + if (curDict != null) + { + int sizeIdx = curDict.size(); + sizeCount[sizeIdx < sizeCount.length ? sizeIdx + : sizeCount.length - 1]++; + } + } + // find biggest + int maxIdx = -1; + int max = 0; + for (int sizeIdx = 0; sizeIdx < sizeCount.length; ++sizeIdx) + { + if (max < sizeCount[sizeIdx]) + { + maxIdx = sizeIdx; + max = sizeCount[sizeIdx]; + } + } + System.out.println("COSDictionary: dictionary size occurrences (max idx: " + maxIdx + "): " + Arrays.toString(sizeCount)); + } + } + } + } + + + /** + * @see java.util.Map#containsValue(java.lang.Object) + * + * @param value The value to find in the map. + * + * @return true if the map contains this value. + */ + public boolean containsValue(Object value) + { + boolean contains = items.containsValue(value); + if (!contains && value instanceof COSObject) + { + contains = items.containsValue(((COSObject) value).getObject()); + } + return contains; + } + + /** + * Search in the map for the value that matches the parameter and return the first key that maps to that value. + * + * @param value The value to search for in the map. + * @return The key for the value in the map or null if it does not exist. + */ + public COSName getKeyForValue(Object value) + { + for (Map.Entry entry : items.entrySet()) + { + Object nextValue = entry.getValue(); + if (nextValue.equals(value) + || (nextValue instanceof COSObject && ((COSObject) nextValue).getObject() + .equals(value))) + { + return entry.getKey(); + } + } + return null; + } + + /** + * This will return the number of elements in this dictionary. + * + * @return The number of elements in the dictionary. + */ + public int size() + { + return items.size(); + } + + /** + * This will clear all items in the map. + */ + public void clear() + { + items.clear(); + } + + /** + * This will get an object from this dictionary. If the object is a reference then it will dereference it and get it + * from the document. If the object is COSNull then null will be returned. + * + * @param key The key to the object that we are getting. + * + * @return The object that matches the key. + */ + public COSBase getDictionaryObject(String key) + { + return getDictionaryObject(COSName.getPDFName(key)); + } + + /** + * This is a special case of getDictionaryObject that takes multiple keys, it will handle the situation where + * multiple keys could get the same value, ie if either CS or ColorSpace is used to get the colorspace. This will + * get an object from this dictionary. If the object is a reference then it will dereference it and get it from the + * document. If the object is COSNull then null will be returned. + * + * @param firstKey The first key to try. + * @param secondKey The second key to try. + * + * @return The object that matches the key. + */ + public COSBase getDictionaryObject(COSName firstKey, COSName secondKey) + { + COSBase retval = getDictionaryObject(firstKey); + if (retval == null && secondKey != null) + { + retval = getDictionaryObject(secondKey); + } + return retval; + } + + /** + * This will get an object from this dictionary. If the object is a reference then it will dereference it and get it + * from the document. If the object is COSNull then null will be returned. + * + * @param key The key to the object that we are getting. + * + * @return The object that matches the key. + */ + public COSBase getDictionaryObject(COSName key) + { + COSBase retval = items.get(key); + if (retval instanceof COSObject) + { + retval = ((COSObject) retval).getObject(); + } + if (retval instanceof COSNull) + { + retval = null; + } + return retval; + } + + /** + * This will set an item in the dictionary. If value is null then the result will be the same as removeItem( key ). + * + * @param key The key to the dictionary object. + * @param value The value to the dictionary object. + */ + public void setItem(COSName key, COSBase value) + { + if (value == null) + { + removeItem(key); + } + else + { + items.put(key, value); + } + } + + /** + * This will set an item in the dictionary. If value is null then the result will be the same as removeItem( key ). + * + * @param key The key to the dictionary object. + * @param value The value to the dictionary object. + */ + public void setItem(COSName key, COSObjectable value) + { + COSBase base = null; + if (value != null) + { + base = value.getCOSObject(); + } + setItem(key, base); + } + + /** + * This will set an item in the dictionary. If value is null then the result will be the same as removeItem( key ). + * + * @param key The key to the dictionary object. + * @param value The value to the dictionary object. + */ + public void setItem(String key, COSObjectable value) + { + setItem(COSName.getPDFName(key), value); + } + + /** + * This will set an item in the dictionary. + * + * @param key The key to the dictionary object. + * @param value The value to the dictionary object. + */ + public void setBoolean(String key, boolean value) + { + setItem(COSName.getPDFName(key), COSBoolean.getBoolean(value)); + } + + /** + * This will set an item in the dictionary. + * + * @param key The key to the dictionary object. + * @param value The value to the dictionary object. + */ + public void setBoolean(COSName key, boolean value) + { + setItem(key, COSBoolean.getBoolean(value)); + } + + /** + * This will set an item in the dictionary. If value is null then the result will be the same as removeItem( key ). + * + * @param key The key to the dictionary object. + * @param value The value to the dictionary object. + */ + public void setItem(String key, COSBase value) + { + setItem(COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSName object. If it is null then the object will + * be removed. + * + * @param key The key to the object, + * @param value The string value for the name. + */ + public void setName(String key, String value) + { + setName(COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSName object. If it is null then the object will + * be removed. + * + * @param key The key to the object, + * @param value The string value for the name. + */ + public void setName(COSName key, String value) + { + COSName name = null; + if (value != null) + { + name = COSName.getPDFName(value); + } + setItem(key, name); + } + + /** + * Set the value of a date entry in the dictionary. + * + * @param key The key to the date value. + * @param date The date value. + */ + public void setDate(String key, Calendar date) + { + setDate(COSName.getPDFName(key), date); + } + + /** + * Set the date object. + * + * @param key The key to the date. + * @param date The date to set. + */ + public void setDate(COSName key, Calendar date) + { + setString(key, DateConverter.toString(date)); + } + + /** + * Set the value of a date entry in the dictionary. + * + * @param embedded The embedded dictionary. + * @param key The key to the date value. + * @param date The date value. + */ + public void setEmbeddedDate(String embedded, String key, Calendar date) + { + setEmbeddedDate(embedded, COSName.getPDFName(key), date); + } + + /** + * Set the date object. + * + * @param embedded The embedded dictionary. + * @param key The key to the date. + * @param date The date to set. + */ + public void setEmbeddedDate(String embedded, COSName key, Calendar date) + { + COSDictionary dic = (COSDictionary) getDictionaryObject(embedded); + if (dic == null && date != null) + { + dic = new COSDictionary(); + setItem(embedded, dic); + } + if (dic != null) + { + dic.setDate(key, date); + } + } + + /** + * This is a convenience method that will convert the value to a COSString object. If it is null then the object + * will be removed. + * + * @param key The key to the object, + * @param value The string value for the name. + */ + public void setString(String key, String value) + { + setString(COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSString object. If it is null then the object + * will be removed. + * + * @param key The key to the object, + * @param value The string value for the name. + */ + public void setString(COSName key, String value) + { + COSString name = null; + if (value != null) + { + name = new COSString(value); + } + setItem(key, name); + } + + /** + * This is a convenience method that will convert the value to a COSString object. If it is null then the object + * will be removed. + * + * @param embedded The embedded dictionary to set the item in. + * @param key The key to the object, + * @param value The string value for the name. + */ + public void setEmbeddedString(String embedded, String key, String value) + { + setEmbeddedString(embedded, COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSString object. If it is null then the object + * will be removed. + * + * @param embedded The embedded dictionary to set the item in. + * @param key The key to the object, + * @param value The string value for the name. + */ + public void setEmbeddedString(String embedded, COSName key, String value) + { + COSDictionary dic = (COSDictionary) getDictionaryObject(embedded); + if (dic == null && value != null) + { + dic = new COSDictionary(); + setItem(embedded, dic); + } + if (dic != null) + { + dic.setString(key, value); + } + } + + /** + * This is a convenience method that will convert the value to a COSInteger object. + * + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setInt(String key, int value) + { + setInt(COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSInteger object. + * + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setInt(COSName key, int value) + { + setItem(key, COSInteger.get(value)); + } + + /** + * This is a convenience method that will convert the value to a COSInteger object. + * + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setLong(String key, long value) + { + setLong(COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSInteger object. + * + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setLong(COSName key, long value) + { + COSInteger intVal = COSInteger.get(value); + setItem(key, intVal); + } + + /** + * This is a convenience method that will convert the value to a COSInteger object. + * + * @param embeddedDictionary The embedded dictionary. + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setEmbeddedInt(String embeddedDictionary, String key, int value) + { + setEmbeddedInt(embeddedDictionary, COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSInteger object. + * + * @param embeddedDictionary The embedded dictionary. + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setEmbeddedInt(String embeddedDictionary, COSName key, int value) + { + COSDictionary embedded = (COSDictionary) getDictionaryObject(embeddedDictionary); + if (embedded == null) + { + embedded = new COSDictionary(); + setItem(embeddedDictionary, embedded); + } + embedded.setInt(key, value); + } + + /** + * This is a convenience method that will convert the value to a COSFloat object. + * + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setFloat(String key, float value) + { + setFloat(COSName.getPDFName(key), value); + } + + /** + * This is a convenience method that will convert the value to a COSFloat object. + * + * @param key The key to the object, + * @param value The int value for the name. + */ + public void setFloat(COSName key, float value) + { + COSFloat fltVal = new COSFloat(value); + setItem(key, fltVal); + } + + /** + * Sets the given boolean value at bitPos in the flags. + * + * @param field The COSName of the field to set the value into. + * @param bitFlag the bit position to set the value in. + * @param value the value the bit position should have. + */ + public void setFlag(COSName field, int bitFlag, boolean value) + { + int currentFlags = getInt(field, 0); + if (value) + { + currentFlags = currentFlags | bitFlag; + } + else + { + currentFlags &= ~bitFlag; + } + setInt(field, currentFlags); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name. Null is returned + * if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The COS name. + */ + public COSName getCOSName(COSName key) + { + COSBase name = getDictionaryObject(key); + if (name instanceof COSName) + { + return (COSName) name; + } + return null; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a COSObject. Null is + * returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The COSObject. + */ + public COSObject getCOSObject(COSName key) + { + COSBase object = getItem(key); + if (object instanceof COSObject) + { + return (COSObject) object; + } + return null; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a COSDictionary. Null is + * returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The COSDictionary. + */ + public COSDictionary getCOSDictionary(COSName key) + { + COSBase dictionary = getDictionaryObject(key); + if (dictionary instanceof COSDictionary) + { + return (COSDictionary) dictionary; + } + return null; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a + * COSStream. Null is returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The COSStream. + */ + public COSStream getCOSStream(COSName key) + { + COSBase base = getDictionaryObject(key); + if (base instanceof COSStream) + { + return (COSStream) base; + } + return null; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a COSArray. Null is + * returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The COSArray. + */ + public COSArray getCOSArray(COSName key) + { + COSBase array = getDictionaryObject(key); + if (array instanceof COSArray) + { + return (COSArray) array; + } + return null; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name. Default is + * returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The COS name. + */ + public COSName getCOSName(COSName key, COSName defaultValue) + { + COSBase name = getDictionaryObject(key); + if (name instanceof COSName) + { + return (COSName) name; + } + return defaultValue; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public String getNameAsString(String key) + { + return getNameAsString(COSName.getPDFName(key)); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public String getNameAsString(COSName key) + { + String retval = null; + COSBase name = getDictionaryObject(key); + if (name instanceof COSName) + { + retval = ((COSName) name).getName(); + } + else if (name instanceof COSString) + { + retval = ((COSString) name).getString(); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The name converted to a string. + */ + public String getNameAsString(String key, String defaultValue) + { + return getNameAsString(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The name converted to a string. + */ + public String getNameAsString(COSName key, String defaultValue) + { + String retval = getNameAsString(key); + if (retval == null) + { + retval = defaultValue; + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a + * string. Null is returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public String getString(String key) + { + return getString(COSName.getPDFName(key)); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a + * string. Null is returned if the entry does not exist in the dictionary. + * + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public String getString(COSName key) + { + String retval = null; + COSBase value = getDictionaryObject(key); + if (value instanceof COSString) + { + retval = ((COSString) value).getString(); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a + * string. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return. + * @return The name converted to a string. + */ + public String getString(String key, String defaultValue) + { + return getString(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a + * string. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return. + * @return The name converted to a string. + */ + public String getString(COSName key, String defaultValue) + { + String retval = getString(key); + if (retval == null) + { + retval = defaultValue; + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary. + * + * @param embedded The embedded dictionary. + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public String getEmbeddedString(String embedded, String key) + { + return getEmbeddedString(embedded, COSName.getPDFName(key), null); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary. + * + * @param embedded The embedded dictionary. + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public String getEmbeddedString(String embedded, COSName key) + { + return getEmbeddedString(embedded, key, null); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. + * + * @param embedded The embedded dictionary. + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return. + * @return The name converted to a string. + */ + public String getEmbeddedString(String embedded, String key, String defaultValue) + { + return getEmbeddedString(embedded, COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. + * + * @param embedded The embedded dictionary. + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return. + * @return The name converted to a string. + */ + public String getEmbeddedString(String embedded, COSName key, String defaultValue) + { + String retval = defaultValue; + COSBase base = getDictionaryObject(embedded); + if (base instanceof COSDictionary) + { + retval = ((COSDictionary) base).getString(key, defaultValue); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary or if the date was invalid. + * + * @param key The key to the item in the dictionary. + * @return The name converted to a date. + */ + public Calendar getDate(String key) + { + return getDate(COSName.getPDFName(key)); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary or if the date was invalid. + * + * @param key The key to the item in the dictionary. + * @return The name converted to a date. + */ + public Calendar getDate(COSName key) + { + COSBase base = getDictionaryObject(key); + if (base instanceof COSString) + { + return DateConverter.toCalendar((COSString) base); + } + return null; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a date. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return if the entry does not exist in the dictionary or if the date was invalid. + * @return The name converted to a date. + */ + public Calendar getDate(String key, Calendar defaultValue) + { + return getDate(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a date. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return if the entry does not exist in the dictionary or if the date was invalid. + * @return The name converted to a date. + */ + public Calendar getDate(COSName key, Calendar defaultValue) + { + Calendar retval = getDate(key); + if (retval == null) + { + retval = defaultValue; + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary. + * + * @param embedded The embedded dictionary to get. + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public Calendar getEmbeddedDate(String embedded, String key) + { + return getEmbeddedDate(embedded, COSName.getPDFName(key), null); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a name and convert it to + * a string. Null is returned if the entry does not exist in the dictionary. + * + * @param embedded The embedded dictionary to get. + * @param key The key to the item in the dictionary. + * @return The name converted to a string. + */ + public Calendar getEmbeddedDate(String embedded, COSName key) + { + return getEmbeddedDate(embedded, key, null); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a date. + * + * @param embedded The embedded dictionary to get. + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return if the entry does not exist in the dictionary or if the date was invalid. + * @return The name converted to a string. + */ + public Calendar getEmbeddedDate(String embedded, String key, Calendar defaultValue) + { + return getEmbeddedDate(embedded, COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a date. + * + * @param embedded The embedded dictionary to get. + * @param key The key to the item in the dictionary. + * @param defaultValue The default value to return if the entry does not exist in the dictionary or if the date was invalid. + * @return The name converted to a string. + */ + public Calendar getEmbeddedDate(String embedded, COSName key, Calendar defaultValue) + { + Calendar retval = defaultValue; + COSDictionary eDic = (COSDictionary) getDictionaryObject(embedded); + if (eDic != null) + { + retval = eDic.getDate(key, defaultValue); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a cos boolean and convert + * it to a primitive boolean. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value returned if the entry is null. + * + * @return The value converted to a boolean. + */ + public boolean getBoolean(String key, boolean defaultValue) + { + return getBoolean(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a COSBoolean and convert + * it to a primitive boolean. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value returned if the entry is null. + * + * @return The entry converted to a boolean. + */ + public boolean getBoolean(COSName key, boolean defaultValue) + { + return getBoolean(key, null, defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a COSBoolean and convert + * it to a primitive boolean. + * + * @param firstKey The first key to the item in the dictionary. + * @param secondKey The second key to the item in the dictionary. + * @param defaultValue The value returned if the entry is null. + * + * @return The entry converted to a boolean. + */ + public boolean getBoolean(COSName firstKey, COSName secondKey, boolean defaultValue) + { + boolean retval = defaultValue; + COSBase bool = getDictionaryObject(firstKey, secondKey); + if (bool instanceof COSBoolean) + { + retval = ((COSBoolean) bool).getValue(); + } + return retval; + } + + /** + * Get an integer from an embedded dictionary. Useful for 1-1 mappings. default:-1 + * + * @param embeddedDictionary The name of the embedded dictionary. + * @param key The key in the embedded dictionary. + * + * @return The value of the embedded integer. + */ + public int getEmbeddedInt(String embeddedDictionary, String key) + { + return getEmbeddedInt(embeddedDictionary, COSName.getPDFName(key)); + } + + /** + * Get an integer from an embedded dictionary. Useful for 1-1 mappings. default:-1 + * + * @param embeddedDictionary The name of the embedded dictionary. + * @param key The key in the embedded dictionary. + * + * @return The value of the embedded integer. + */ + public int getEmbeddedInt(String embeddedDictionary, COSName key) + { + return getEmbeddedInt(embeddedDictionary, key, -1); + } + + /** + * Get an integer from an embedded dictionary. Useful for 1-1 mappings. + * + * @param embeddedDictionary The name of the embedded dictionary. + * @param key The key in the embedded dictionary. + * @param defaultValue The value if there is no embedded dictionary or it does not contain the key. + * + * @return The value of the embedded integer. + */ + public int getEmbeddedInt(String embeddedDictionary, String key, int defaultValue) + { + return getEmbeddedInt(embeddedDictionary, COSName.getPDFName(key), defaultValue); + } + + /** + * Get an integer from an embedded dictionary. Useful for 1-1 mappings. + * + * @param embeddedDictionary The name of the embedded dictionary. + * @param key The key in the embedded dictionary. + * @param defaultValue The value if there is no embedded dictionary or it does not contain the key. + * + * @return The value of the embedded integer. + */ + public int getEmbeddedInt(String embeddedDictionary, COSName key, int defaultValue) + { + int retval = defaultValue; + COSDictionary embedded = (COSDictionary) getDictionaryObject(embeddedDictionary); + if (embedded != null) + { + retval = embedded.getInt(key, defaultValue); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an int. -1 is returned if + * there is no value. + * + * @param key The key to the item in the dictionary. + * @return The integer value. + */ + public int getInt(String key) + { + return getInt(COSName.getPDFName(key), -1); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an int. -1 is returned if + * there is no value. + * + * @param key The key to the item in the dictionary. + * @return The integer value.. + */ + public int getInt(COSName key) + { + return getInt(key, -1); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an integer. If the + * dictionary value is null then the default value will be returned. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The integer value. + */ + public int getInt(String key, int defaultValue) + { + return getInt(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an integer. If the + * dictionary value is null then the defaultvalue will be returned. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The integer value. + */ + public int getInt(COSName key, int defaultValue) + { + return getInt(key, null, defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an integer. If the + * dictionary value is null then the default value -1 will be returned. + * + * @param firstKey The first key to the item in the dictionary. + * @param secondKey The second key to the item in the dictionary. + * @return The integer value. + */ + public int getInt(COSName firstKey, COSName secondKey) + { + return getInt(firstKey, secondKey, -1); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an integer. If the + * dictionary value is null then the default value will be returned. + * + * @param firstKey The first key to the item in the dictionary. + * @param secondKey The second key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The integer value. + */ + public int getInt(COSName firstKey, COSName secondKey, int defaultValue) + { + int retval = defaultValue; + COSBase obj = getDictionaryObject(firstKey, secondKey); + if (obj instanceof COSNumber) + { + retval = ((COSNumber) obj).intValue(); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an long. -1 is returned + * if there is no value. + * + * @param key The key to the item in the dictionary. + * + * @return The long value. + */ + public long getLong(String key) + { + return getLong(COSName.getPDFName(key), -1L); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an long. -1 is returned + * if there is no value. + * + * @param key The key to the item in the dictionary. + * @return The long value. + */ + public long getLong(COSName key) + { + return getLong(key, -1L); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an integer. If the + * dictionary value is null then the default value will be returned. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The integer value. + */ + public long getLong(String key, long defaultValue) + { + return getLong(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an integer. If the + * dictionary value is null then the default value will be returned. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The integer value. + */ + public long getLong(COSName key, long defaultValue) + { + long retval = defaultValue; + COSBase obj = getDictionaryObject(key); + if (obj instanceof COSNumber) + { + retval = ((COSNumber) obj).longValue(); + } + return retval; + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an float. -1 is returned + * if there is no value. + * + * @param key The key to the item in the dictionary. + * @return The float value. + */ + public float getFloat(String key) + { + return getFloat(COSName.getPDFName(key), -1); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an float. -1 is returned + * if there is no value. + * + * @param key The key to the item in the dictionary. + * @return The float value. + */ + public float getFloat(COSName key) + { + return getFloat(key, -1); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be a float. If the + * dictionary value is null then the default value will be returned. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The float value. + */ + public float getFloat(String key, float defaultValue) + { + return getFloat(COSName.getPDFName(key), defaultValue); + } + + /** + * This is a convenience method that will get the dictionary object that is expected to be an float. If the + * dictionary value is null then the default value will be returned. + * + * @param key The key to the item in the dictionary. + * @param defaultValue The value to return if the dictionary item is null. + * @return The float value. + */ + public float getFloat(COSName key, float defaultValue) + { + float retval = defaultValue; + COSBase obj = getDictionaryObject(key); + if (obj instanceof COSNumber) + { + retval = ((COSNumber) obj).floatValue(); + } + return retval; + } + + /** + * Gets the boolean value from the flags at the given bit position. + * + * @param field The COSName of the field to get the flag from. + * @param bitFlag the bitPosition to get the value from. + * + * @return true if the number at bitPos is '1' + */ + public boolean getFlag(COSName field, int bitFlag) + { + int ff = getInt(field, 0); + return (ff & bitFlag) == bitFlag; + } + + /** + * This will remove an item for the dictionary. This will do nothing of the object does not exist. + * + * @param key The key to the item to remove from the dictionary. + */ + public void removeItem(COSName key) + { + items.remove(key); + } + + /** + * This will do a lookup into the dictionary. + * + * @param key The key to the object. + * + * @return The item that matches the key. + */ + public COSBase getItem(COSName key) + { + return items.get(key); + } + + /** + * This will do a lookup into the dictionary. + * + * @param key The key to the object. + * + * @return The item that matches the key. + */ + public COSBase getItem(String key) + { + return getItem(COSName.getPDFName(key)); + } + + /** + * This is a special case of getItem that takes multiple keys, it will handle the situation + * where multiple keys could get the same value, ie if either CS or ColorSpace is used to get + * the colorspace. This will get an object from this dictionary. + * + * @param firstKey The first key to try. + * @param secondKey The second key to try. + * + * @return The object that matches the key. + */ + public COSBase getItem(COSName firstKey, COSName secondKey) + { + COSBase retval = getItem(firstKey); + if (retval == null && secondKey != null) + { + retval = getItem(secondKey); + } + return retval; + } + + /** + * Returns the names of the entries in this dictionary. The returned set is in the order the entries were added to + * the dictionary. + * + * @since Apache PDFBox 1.1.0 + * @return names of the entries in this dictionary + */ + public Set keySet() + { + return items.keySet(); + } + + /** + * Returns the name-value entries in this dictionary. The returned set is in the order the entries were added to the + * dictionary. + * + * @since Apache PDFBox 1.1.0 + * @return name-value entries in this dictionary + */ + public Set> entrySet() + { + return items.entrySet(); + } + + /** + * This will get all of the values for the dictionary. + * + * @return All the values for the dictionary. + */ + public Collection getValues() + { + return items.values(); + } + + /** + * visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return The object that the visitor returns. + * + * @throws IOException If there is an error visiting this object. + */ + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromDictionary(this); + } + + @Override + public boolean isNeedToBeUpdated() + { + return needToBeUpdated; + } + + @Override + public void setNeedToBeUpdated(boolean flag) + { + needToBeUpdated = flag; + } + + /** + * This will add all of the dictionaries keys/values to this dictionary. + * Only called when adding keys to a trailer that already exists. + * + * @param dic The dictionaries to get the keys from. + */ + public void addAll(COSDictionary dic) + { + for (Map.Entry entry : dic.entrySet()) + { + /* + * If we're at a second trailer, we have a linearized pdf file, meaning that the first Size entry represents + * all of the objects so we don't need to grab the second. + */ + if (!entry.getKey().getName().equals("Size") + || !items.containsKey(COSName.getPDFName("Size"))) + { + setItem(entry.getKey(), entry.getValue()); + } + } + } + + /** + * @see java.util.Map#containsKey(Object) + * + * @param name The key to find in the map. + * @return true if the map contains this key. + */ + public boolean containsKey(COSName name) + { + return this.items.containsKey(name); + } + + /** + * @see java.util.Map#containsKey(Object) + * + * @param name The key to find in the map. + * @return true if the map contains this key. + */ + public boolean containsKey(String name) + { + return containsKey(COSName.getPDFName(name)); + } + + /** + * Nice method, gives you every object you want Arrays works properly too. Try "P/Annots/[k]/Rect" where k means the + * index of the Annotsarray. + * + * @param objPath the relative path to the object. + * @return the object + */ + public COSBase getObjectFromPath(String objPath) + { + String[] path = objPath.split(PATH_SEPARATOR); + COSBase retval = this; + for (String pathString : path) + { + if (retval instanceof COSArray) + { + int idx = Integer.parseInt(pathString.replaceAll("\\[", "").replaceAll("\\]", "")); + retval = ((COSArray) retval).getObject(idx); + } + else if (retval instanceof COSDictionary) + { + retval = ((COSDictionary) retval).getDictionaryObject(pathString); + } + } + return retval; + } + + /** + * Returns an unmodifiable view of this dictionary. + * + * @return an unmodifiable view of this dictionary + */ + public COSDictionary asUnmodifiableDictionary() + { + return new UnmodifiableCOSDictionary(this); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + try + { + return getDictionaryString(this, new ArrayList()); + } + catch (IOException e) + { + LOG.debug("An exception occured trying - returning error message instead", e); + return "COSDictionary{" + e.getMessage() + "}"; + } + } + + private static String getDictionaryString(COSBase base, List objs) throws IOException + { + if (base == null) + { + return "null"; + } + if (objs.contains(base)) + { + // avoid endless recursion + return String.valueOf(base.hashCode()); + } + objs.add(base); + if (base instanceof COSDictionary) + { + StringBuilder sb = new StringBuilder(); + sb.append("COSDictionary{"); + for (Map.Entry x : ((COSDictionary) base).entrySet()) + { + sb.append(x.getKey()); + sb.append(":"); + sb.append(getDictionaryString(x.getValue(), objs)); + sb.append(";"); + } + sb.append("}"); + if (base instanceof COSStream) + { + try (InputStream stream = ((COSStream) base).createRawInputStream()) + { + byte[] b = IOUtils.toByteArray(stream); + sb.append("COSStream{").append(Arrays.hashCode(b)).append("}"); + } + } + return sb.toString(); + } + if (base instanceof COSArray) + { + StringBuilder sb = new StringBuilder(); + sb.append("COSArray{"); + for (COSBase x : ((COSArray) base).toList()) + { + sb.append(getDictionaryString(x, objs)); + sb.append(";"); + } + sb.append("}"); + return sb.toString(); + } + if (base instanceof COSObject) + { + COSObject obj = (COSObject) base; + return "COSObject{" + getDictionaryString(obj.getObject(), objs) + "}"; + } + return base.toString(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java new file mode 100644 index 00000000000..5c2b073d3fe --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java @@ -0,0 +1,658 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.ScratchFile; +import org.apache.pdfbox.pdfparser.PDFObjectStreamParser; + +/** + * This is the in-memory representation of the PDF document. You need to call + * close() on this object when you are done using it!! + * + * @author Ben Litchfield + * + */ +public class COSDocument extends COSBase implements Closeable +{ + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(COSDocument.class); + + private float version = 1.4f; + + /** + * Maps ObjectKeys to a COSObject. Note that references to these objects + * are also stored in COSDictionary objects that map a name to a specific object. + */ + private final Map objectPool = + new HashMap<>(); + + /** + * Maps object and generation id to object byte offsets. + */ + private final Map xrefTable = + new HashMap<>(); + + /** + * List containing all streams which are created when creating a new pdf. + */ + private final List streams = new ArrayList<>(); + + /** + * Document trailer dictionary. + */ + private COSDictionary trailer; + + private boolean warnMissingClose = true; + + /** + * Signal that document is already decrypted. + */ + private boolean isDecrypted = false; + + private long startXref; + + private boolean closed = false; + + private boolean isXRefStream; + + private ScratchFile scratchFile; + + /** + * Used for incremental saving, to avoid XRef object numbers from being reused. + */ + private long highestXRefObjectNumber; + + /** + * Constructor. Uses main memory to buffer PDF streams. + */ + public COSDocument() + { + this(ScratchFile.getMainMemoryOnlyInstance()); + } + + /** + * Constructor that will use the provide memory handler for storage of the + * PDF streams. + * + * @param scratchFile memory handler for buffering of PDF streams + * + */ + public COSDocument(ScratchFile scratchFile) + { + this.scratchFile = scratchFile; + } + + /** + * Creates a new COSStream using the current configuration for scratch files. + * + * @return the new COSStream + */ + public COSStream createCOSStream() + { + COSStream stream = new COSStream(scratchFile); + // collect all COSStreams so that they can be closed when closing the COSDocument. + // This is limited to newly created pdfs as all COSStreams of an existing pdf are + // collected within the map objectPool + streams.add(stream); + return stream; + } + + /** + * Creates a new COSStream using the current configuration for scratch files. + * Not for public use. Only COSParser should call this method. + * + * @param dictionary the corresponding dictionary + * @return the new COSStream + */ + public COSStream createCOSStream(COSDictionary dictionary) + { + COSStream stream = new COSStream(scratchFile); + for (Map.Entry entry : dictionary.entrySet()) + { + stream.setItem(entry.getKey(), entry.getValue()); + } + return stream; + } + + /** + * This will get the first dictionary object by type. + * + * @param type The type of the object. + * + * @return This will return an object with the specified type. + */ + public COSObject getObjectByType(COSName type) + { + for( COSObject object : objectPool.values() ) + { + COSBase realObject = object.getObject(); + if( realObject instanceof COSDictionary ) + { + try + { + COSDictionary dic = (COSDictionary)realObject; + COSBase typeItem = dic.getItem(COSName.TYPE); + if (typeItem instanceof COSName) + { + COSName objectType = (COSName) typeItem; + if (objectType.equals(type)) + { + return object; + } + } + else if (typeItem != null) + { + LOG.debug("Expected a /Name object after /Type, got '" + typeItem + "' instead"); + } + } + catch (ClassCastException e) + { + LOG.warn(e, e); + } + } + } + return null; + } + + /** + * This will get all dictionary objects by type. + * + * @param type The type of the object. + * + * @return This will return an object with the specified type. + */ + public List getObjectsByType( String type ) + { + return getObjectsByType( COSName.getPDFName( type ) ); + } + + /** + * This will get a dictionary object by type. + * + * @param type The type of the object. + * + * @return This will return an object with the specified type. + */ + public List getObjectsByType( COSName type ) + { + List retval = new ArrayList<>(); + for( COSObject object : objectPool.values() ) + { + COSBase realObject = object.getObject(); + if( realObject instanceof COSDictionary ) + { + try + { + COSDictionary dic = (COSDictionary)realObject; + COSBase typeItem = dic.getItem(COSName.TYPE); + if (typeItem instanceof COSName) + { + COSName objectType = (COSName) typeItem; + if (objectType.equals(type)) + { + retval.add( object ); + } + } + else if (typeItem != null) + { + LOG.debug("Expected a /Name object after /Type, got '" + typeItem + "' instead"); + } + } + catch (ClassCastException e) + { + LOG.warn(e, e); + } + } + } + return retval; + } + + /** + * Returns the COSObjectKey for a given COS object, or null if there is none. + * This lookup iterates over all objects in a PDF, which may be slow for large files. + * + * @param object COS object + * @return key + */ + public COSObjectKey getKey(COSBase object) + { + for (Map.Entry entry : objectPool.entrySet()) + { + if (entry.getValue().getObject() == object) + { + return entry.getKey(); + } + } + return null; + } + + /** + * This will print contents to stdout. + */ + public void print() + { + for( COSObject object : objectPool.values() ) + { + System.out.println( object); + } + } + + /** + * This will set the header version of this PDF document. + * + * @param versionValue The version of the PDF document. + */ + public void setVersion( float versionValue ) + { + version = versionValue; + } + + /** + * This will get the version extracted from the header of this PDF document. + * + * @return The header version. + */ + public float getVersion() + { + return version; + } + + /** + * Signals that the document is decrypted completely. + */ + public void setDecrypted() + { + isDecrypted = true; + } + + /** + * Indicates if a encrypted pdf is already decrypted after parsing. + * + * @return true indicates that the pdf is decrypted. + */ + public boolean isDecrypted() + { + return isDecrypted; + } + + /** + * This will tell if this is an encrypted document. + * + * @return true If this document is encrypted. + */ + public boolean isEncrypted() + { + boolean encrypted = false; + if (trailer != null) + { + encrypted = trailer.getDictionaryObject(COSName.ENCRYPT) instanceof COSDictionary; + } + return encrypted; + } + + /** + * This will get the encryption dictionary if the document is encrypted or null if the document + * is not encrypted. + * + * @return The encryption dictionary. + */ + public COSDictionary getEncryptionDictionary() + { + return trailer.getCOSDictionary(COSName.ENCRYPT); + } + + /** + * This will set the encryption dictionary, this should only be called when + * encrypting the document. + * + * @param encDictionary The encryption dictionary. + */ + public void setEncryptionDictionary( COSDictionary encDictionary ) + { + trailer.setItem( COSName.ENCRYPT, encDictionary ); + } + + /** + * This will get the document ID. + * + * @return The document id. + */ + public COSArray getDocumentID() + { + return getTrailer().getCOSArray(COSName.ID); + } + + /** + * This will set the document ID. + * + * @param id The document id. + */ + public void setDocumentID( COSArray id ) + { + getTrailer().setItem(COSName.ID, id); + } + + /** + * This will get the document catalog. + * + * @return The catalog that is the root of the document; never null. + * + * @throws IOException If no catalog can be found. + */ + public COSObject getCatalog() throws IOException + { + COSObject catalog = getObjectByType( COSName.CATALOG ); + if( catalog == null ) + { + throw new IOException( "Catalog cannot be found" ); + } + return catalog; + } + + /** + * This will get a list of all available objects. + * + * @return A list of all objects, never null. + */ + public List getObjects() + { + return new ArrayList<>(objectPool.values()); + } + + /** + * This will get the document trailer. + * + * @return the document trailer dict + */ + public COSDictionary getTrailer() + { + return trailer; + } + + /** + * // MIT added, maybe this should not be supported as trailer is a persistence construct. + * This will set the document trailer. + * + * @param newTrailer the document trailer dictionary + */ + public void setTrailer(COSDictionary newTrailer) + { + trailer = newTrailer; + } + + /** + * Internal PDFBox use only. Get the object number of the highest XRef stream. This is needed to + * avoid reusing such a number in incremental saving. + * + * @return The object number of the highest XRef stream, or 0 if there was no XRef stream. + */ + public long getHighestXRefObjectNumber() + { + return highestXRefObjectNumber; + } + + /** + * Internal PDFBox use only. Sets the object number of the highest XRef stream. This is needed + * to avoid reusing such a number in incremental saving. + * + * @param highestXRefObjectNumber The object number of the highest XRef stream. + */ + public void setHighestXRefObjectNumber(long highestXRefObjectNumber) + { + this.highestXRefObjectNumber = highestXRefObjectNumber; + } + + /** + * visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return any object, depending on the visitor implementation, or null + * @throws IOException If an error occurs while visiting this object. + */ + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromDocument( this ); + } + + /** + * This will close all storage and delete the tmp files. + * + * @throws IOException If there is an error close resources. + */ + @Override + public void close() throws IOException + { + if (!closed) + { + // Make sure that: + // - first Exception is kept + // - all COSStreams are closed + // - ScratchFile is closed + // - there's a way to see which errors occured + + IOException firstException = null; + + // close all open I/O streams + for (COSObject object : getObjects()) + { + COSBase cosObject = object.getObject(); + if (cosObject instanceof COSStream) + { + firstException = IOUtils.closeAndLogException((COSStream) cosObject, LOG, "COSStream", firstException); + } + } + + for (COSStream stream : streams) + { + firstException = IOUtils.closeAndLogException(stream, LOG, "COSStream", firstException); + } + + if (scratchFile != null) + { + firstException = IOUtils.closeAndLogException(scratchFile, LOG, "ScratchFile", firstException); + } + closed = true; + + // rethrow first exception to keep method contract + if (firstException != null) + { + throw firstException; + } + } + } + + /** + * Returns true if this document has been closed. + */ + public boolean isClosed() + { + return closed; + } + + /** + * Warn the user in the finalizer if he didn't close the PDF document. The method also + * closes the document just in case, to avoid abandoned temporary files. It's still a good + * idea for the user to close the PDF document at the earliest possible to conserve resources. + * @throws IOException if an error occurs while closing the temporary files + */ + @Override + protected void finalize() throws IOException + { + if (!closed) + { + if (warnMissingClose) + { + LOG.warn( "Warning: You did not close a PDF Document" ); + } + close(); + } + } + + /** + * Controls whether this instance shall issue a warning if the PDF document wasn't closed + * properly through a call to the {@link #close()} method. If the PDF document is held in + * a cache governed by soft references it is impossible to reliably close the document + * before the warning is raised. By default, the warning is enabled. + * @param warn true enables the warning, false disables it. + */ + public void setWarnMissingClose(boolean warn) + { + this.warnMissingClose = warn; + } + + /** + * This method will search the list of objects for types of ObjStm. If it finds + * them then it will parse out all of the objects from the stream that is contains. + * + * @throws IOException If there is an error parsing the stream. + */ + public void dereferenceObjectStreams() throws IOException + { + for( COSObject objStream : getObjectsByType( COSName.OBJ_STM ) ) + { + COSStream stream = (COSStream)objStream.getObject(); + PDFObjectStreamParser parser = new PDFObjectStreamParser(stream, this); + parser.parse(); + for (COSObject next : parser.getObjects()) + { + COSObjectKey key = new COSObjectKey(next); + if (objectPool.get(key) == null || objectPool.get(key).getObject() == null + // xrefTable stores negated objNr of objStream for objects in objStreams + || (xrefTable.containsKey(key) + && xrefTable.get(key) == -objStream.getObjectNumber())) + { + COSObject obj = getObjectFromPool(key); + obj.setObject(next.getObject()); + } + } + } + } + + /** + * This will get an object from the pool. + * + * @param key The object key. + * + * @return The object in the pool or a new one if it has not been parsed yet. + */ + public COSObject getObjectFromPool(COSObjectKey key) + { + COSObject obj = null; + if( key != null ) + { + obj = objectPool.get(key); + } + if (obj == null) + { + // this was a forward reference, make "proxy" object + obj = new COSObject(null); + if( key != null ) + { + obj.setObjectNumber(key.getNumber()); + obj.setGenerationNumber(key.getGeneration()); + objectPool.put(key, obj); + } + } + return obj; + } + + /** + * Removes an object from the object pool. + * @param key the object key + * @return the object that was removed or null if the object was not found + */ + public COSObject removeObject(COSObjectKey key) + { + return objectPool.remove(key); + } + + /** + * Populate XRef HashMap with given values. + * Each entry maps ObjectKeys to byte offsets in the file. + * @param xrefTableValues xref table entries to be added + */ + public void addXRefTable( Map xrefTableValues ) + { + xrefTable.putAll( xrefTableValues ); + } + + /** + * Returns the xrefTable which is a mapping of ObjectKeys + * to byte offsets in the file. + * @return mapping of ObjectsKeys to byte offsets + */ + public Map getXrefTable() + { + return xrefTable; + } + + /** + * This method set the startxref value of the document. This will only + * be needed for incremental updates. + * + * @param startXrefValue the value for startXref + */ + public void setStartXref(long startXrefValue) + { + startXref = startXrefValue; + } + + /** + * Return the startXref Position of the parsed document. This will only be needed for incremental updates. + * + * @return a long with the old position of the startxref + */ + public long getStartXref() + { + return startXref; + } + + /** + * Determines if the trailer is a XRef stream or not. + * + * @return true if the trailer is a XRef stream + */ + public boolean isXRefStream() + { + return isXRefStream; + } + + /** + * Sets isXRefStream to the given value. You need to take care that the version of your PDF is + * 1.5 or higher. + * + * @param isXRefStreamValue the new value for isXRefStream + */ + public void setIsXRefStream(boolean isXRefStreamValue) + { + isXRefStream = isXRefStreamValue; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java new file mode 100644 index 00000000000..dcaaf5aa0fe --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; +import java.io.OutputStream; +import java.math.BigDecimal; + +/** + * This class represents a floating point number in a PDF document. + * + * @author Ben Litchfield + * + */ +public class COSFloat extends COSNumber +{ + private BigDecimal value; + private String valueAsString; + + /** + * Constructor. + * + * @param aFloat The primitive float object that this object wraps. + */ + public COSFloat( float aFloat ) + { + // use a BigDecimal as intermediate state to avoid + // a floating point string representation of the float value + value = new BigDecimal(String.valueOf(aFloat)); + valueAsString = removeNullDigits(value.toPlainString()); + } + + /** + * Constructor. + * + * @param aFloat The primitive float object that this object wraps. + * + * @throws IOException If aFloat is not a float. + */ + public COSFloat( String aFloat ) throws IOException + { + try + { + valueAsString = aFloat; + value = new BigDecimal( valueAsString ); + checkMinMaxValues(); + } + catch( NumberFormatException e ) + { + if (aFloat.startsWith("--")) + { + // PDFBOX-4289 has --16.33 + valueAsString = aFloat.substring(1); + } + else if (aFloat.matches("^0\\.0*\\-\\d+")) + { + // PDFBOX-2990 has 0.00000-33917698 + // PDFBOX-3369 has 0.00-35095424 + // PDFBOX-3500 has 0.-262 + valueAsString = "-" + valueAsString.replaceFirst("\\-", ""); + } + else + { + throw new IOException("Error expected floating point number actual='" + aFloat + "'", e); + } + try + { + value = new BigDecimal(valueAsString); + checkMinMaxValues(); + } + catch (NumberFormatException e2) + { + throw new IOException("Error expected floating point number actual='" + aFloat + "'", e2); + } + } + } + + private void checkMinMaxValues() + { + float floatValue = value.floatValue(); + double doubleValue = value.doubleValue(); + boolean valueReplaced = false; + // check for huge values + if (Float.isInfinite(floatValue)) + { + if (Math.abs(doubleValue) > Float.MAX_VALUE) + { + floatValue = Float.MAX_VALUE * (Float.compare(floatValue, Float.POSITIVE_INFINITY) == 0 ? 1 : -1); + valueReplaced = true; + } + } + // check for very small values + else if (Float.compare(floatValue, 0) == 0 && Double.compare(doubleValue, 0) != 0) + { + if (Math.abs(doubleValue) < Float.MIN_NORMAL ) + { + floatValue = Float.MIN_NORMAL; + floatValue *= doubleValue >= 0 ? 1 : -1; + valueReplaced = true; + } + } + if (valueReplaced) + { + value = BigDecimal.valueOf(floatValue); + valueAsString = removeNullDigits(value.toPlainString()); + } + } + + private String removeNullDigits(String plainStringValue) + { + // remove fraction digit "0" only + if (plainStringValue.indexOf('.') > -1 && !plainStringValue.endsWith(".0")) + { + while (plainStringValue.endsWith("0") && !plainStringValue.endsWith(".0")) + { + plainStringValue = plainStringValue.substring(0,plainStringValue.length()-1); + } + } + return plainStringValue; + } + + /** + * The value of the float object that this one wraps. + * + * @return The value of this object. + */ + @Override + public float floatValue() + { + return value.floatValue(); + } + + /** + * The value of the double object that this one wraps. + * + * @return The double of this object. + */ + @Override + public double doubleValue() + { + return value.doubleValue(); + } + + /** + * This will get the long value of this object. + * + * @return The long value of this object, + */ + @Override + public long longValue() + { + return value.longValue(); + } + + /** + * This will get the integer value of this object. + * + * @return The int value of this object, + */ + @Override + public int intValue() + { + return value.intValue(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals( Object o ) + { + return o instanceof COSFloat && + Float.floatToIntBits(((COSFloat)o).value.floatValue()) == Float.floatToIntBits(value.floatValue()); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return value.hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "COSFloat{" + valueAsString + "}"; + } + + /** + * visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return any object, depending on the visitor implementation, or null + * @throws IOException If an error occurs while visiting this object. + */ + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromFloat(this); + } + + /** + * This will output this string as a PDF object. + * + * @param output The stream to write to. + * @throws IOException If there is an error writing to the stream. + */ + public void writePDF( OutputStream output ) throws IOException + { + output.write(valueAsString.getBytes("ISO-8859-1")); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java new file mode 100644 index 00000000000..4afa392b87c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.filter.DecodeResult; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.io.RandomAccess; +import org.apache.pdfbox.io.RandomAccessInputStream; +import org.apache.pdfbox.io.RandomAccessOutputStream; +import org.apache.pdfbox.io.ScratchFile; + +/** + * An InputStream which reads from an encoded COS stream. + * + * @author John Hewson + */ +public final class COSInputStream extends FilterInputStream +{ + /** + * Creates a new COSInputStream from an encoded input stream. + * + * @param filters Filters to be applied. + * @param parameters Filter parameters. + * @param in Encoded input stream. + * @param scratchFile Scratch file to use, or null. + * @return Decoded stream. + * @throws IOException If the stream could not be read. + */ + static COSInputStream create(List filters, COSDictionary parameters, InputStream in, + ScratchFile scratchFile) throws IOException + { + return create(filters, parameters, in, scratchFile, DecodeOptions.DEFAULT); + } + + static COSInputStream create(List filters, COSDictionary parameters, InputStream in, + ScratchFile scratchFile, DecodeOptions options) throws IOException + { + List results = new ArrayList<>(); + InputStream input = in; + if (filters.isEmpty()) + { + input = in; + } + else + { + // apply filters + for (int i = 0; i < filters.size(); i++) + { + if (scratchFile != null) + { + // scratch file + final RandomAccess buffer = scratchFile.createBuffer(); + DecodeResult result = filters.get(i).decode(input, new RandomAccessOutputStream(buffer), parameters, i, options); + results.add(result); + input = new RandomAccessInputStream(buffer) + { + @Override + public void close() throws IOException + { + buffer.close(); + } + }; + } + else + { + // in-memory + ByteArrayOutputStream output = new ByteArrayOutputStream(); + DecodeResult result = filters.get(i).decode(input, output, parameters, i, options); + results.add(result); + input = new ByteArrayInputStream(output.toByteArray()); + } + } + } + return new COSInputStream(input, results); + } + + private final List decodeResults; + + /** + * Constructor. + * + * @param input decoded stream + * @param decodeResults results of decoding + */ + private COSInputStream(InputStream input, List decodeResults) + { + super(input); + this.decodeResults = decodeResults; + } + + /** + * Returns the result of the last filter, for use by repair mechanisms. + */ + public DecodeResult getDecodeResult() + { + if (decodeResults.isEmpty()) + { + return DecodeResult.DEFAULT; + } + else + { + return decodeResults.get(decodeResults.size() - 1); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInteger.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInteger.java new file mode 100644 index 00000000000..c10b0aa95ed --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInteger.java @@ -0,0 +1,201 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * This class represents an integer number in a PDF document. + * + * @author Ben Litchfield + */ +public final class COSInteger extends COSNumber +{ + + /** + * The lowest integer to be kept in the {@link #STATIC} array. + */ + private static final int LOW = -100; + + /** + * The highest integer to be kept in the {@link #STATIC} array. + */ + private static final int HIGH = 256; + + /** + * Static instances of all COSIntegers in the range from {@link #LOW} + * to {@link #HIGH}. + */ + private static final COSInteger[] STATIC = new COSInteger[HIGH - LOW + 1]; + + /** + * Constant for the number zero. + * @since Apache PDFBox 1.1.0 + */ + public static final COSInteger ZERO = get(0); + + /** + * Constant for the number one. + * @since Apache PDFBox 1.1.0 + */ + public static final COSInteger ONE = get(1); + + /** + * Constant for the number two. + * @since Apache PDFBox 1.1.0 + */ + public static final COSInteger TWO = get(2); + + /** + * Constant for the number three. + * @since Apache PDFBox 1.1.0 + */ + public static final COSInteger THREE = get(3); + + /** + * Returns a COSInteger instance with the given value. + * + * @param val integer value + * @return COSInteger instance + */ + public static COSInteger get(long val) + { + if (LOW <= val && val <= HIGH) + { + int index = (int) val - LOW; + // no synchronization needed + if (STATIC[index] == null) + { + STATIC[index] = new COSInteger(val); + } + return STATIC[index]; + } + return new COSInteger(val); + } + + private final long value; + + /** + * constructor. + * + * @param val The integer value of this object. + */ + private COSInteger( long val ) + { + value = val; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object o) + { + return o instanceof COSInteger && ((COSInteger)o).intValue() == intValue(); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + //taken from java.lang.Long + return (int)(value ^ (value >> 32)); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "COSInt{" + value + "}"; + } + + /** + * polymorphic access to value as float. + * + * @return The float value of this object. + */ + @Override + public float floatValue() + { + return value; + } + + /** + * polymorphic access to value as float. + * + * @return The double value of this object. + */ + @Override + public double doubleValue() + { + return value; + } + + /** + * Polymorphic access to value as int + * This will get the integer value of this object. + * + * @return The int value of this object, + */ + @Override + public int intValue() + { + return (int)value; + } + + /** + * Polymorphic access to value as int + * This will get the integer value of this object. + * + * @return The int value of this object, + */ + @Override + public long longValue() + { + return value; + } + + /** + * visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return any object, depending on the visitor implementation, or null + * @throws IOException If an error occurs while visiting this object. + */ + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromInt(this); + } + + /** + * This will output this string as a PDF object. + * + * @param output The stream to write to. + * @throws IOException If there is an error writing to the stream. + */ + public void writePDF( OutputStream output ) throws IOException + { + output.write(String.valueOf(value).getBytes("ISO-8859-1")); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java new file mode 100644 index 00000000000..e6ff9d77ed3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java @@ -0,0 +1,759 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Hex; + +/** + * A PDF Name object. + * + * @author Ben Litchfield + */ +public final class COSName extends COSBase implements Comparable +{ + // using ConcurrentHashMap because this can be accessed by multiple threads + private static Map nameMap = new ConcurrentHashMap<>(8192); + + // all common COSName values are stored in this HashMap + // they are already defined as static constants and don't need to be synchronized + private static Map commonNameMap = new HashMap<>(768); + + // + // IMPORTANT: this list is *alphabetized* and does not need any JavaDoc + // + + // A + public static final COSName A = new COSName("A"); + public static final COSName AA = new COSName("AA"); + public static final COSName AC = new COSName("AC"); + public static final COSName ACRO_FORM = new COSName("AcroForm"); + public static final COSName ACTUAL_TEXT = new COSName("ActualText"); + public static final COSName ADBE_PKCS7_DETACHED = new COSName("adbe.pkcs7.detached"); + public static final COSName ADBE_PKCS7_SHA1 = new COSName("adbe.pkcs7.sha1"); + public static final COSName ADBE_X509_RSA_SHA1 = new COSName("adbe.x509.rsa_sha1"); + public static final COSName ADOBE_PPKLITE = new COSName("Adobe.PPKLite"); + public static final COSName AESV2 = new COSName("AESV2"); + public static final COSName AESV3 = new COSName("AESV3"); + public static final COSName AFTER = new COSName("After"); + public static final COSName AIS = new COSName("AIS"); + public static final COSName ALL_OFF = new COSName("AllOff"); + public static final COSName ALL_ON = new COSName("AllOn"); + public static final COSName ALT = new COSName("Alt"); + public static final COSName ALPHA = new COSName("Alpha"); + public static final COSName ALTERNATE = new COSName("Alternate"); + public static final COSName ANNOT = new COSName("Annot"); + public static final COSName ANNOTS = new COSName("Annots"); + public static final COSName ANTI_ALIAS = new COSName("AntiAlias"); + public static final COSName ANY_OFF = new COSName("AnyOff"); + public static final COSName ANY_ON = new COSName("AnyOn"); + public static final COSName AP = new COSName("AP"); + public static final COSName AP_REF = new COSName("APRef"); + public static final COSName APP = new COSName("App"); + public static final COSName ART_BOX = new COSName("ArtBox"); + public static final COSName ARTIFACT = new COSName("Artifact"); + public static final COSName AS = new COSName("AS"); + public static final COSName ASCENT = new COSName("Ascent"); + public static final COSName ASCII_HEX_DECODE = new COSName("ASCIIHexDecode"); + public static final COSName ASCII_HEX_DECODE_ABBREVIATION = new COSName("AHx"); + public static final COSName ASCII85_DECODE = new COSName("ASCII85Decode"); + public static final COSName ASCII85_DECODE_ABBREVIATION = new COSName("A85"); + public static final COSName ATTACHED = new COSName("Attached"); + public static final COSName AUTHOR = new COSName("Author"); + public static final COSName AVG_WIDTH = new COSName("AvgWidth"); + // B + public static final COSName B = new COSName("B"); + public static final COSName BACKGROUND = new COSName("Background"); + public static final COSName BASE_ENCODING = new COSName("BaseEncoding"); + public static final COSName BASE_FONT = new COSName("BaseFont"); + public static final COSName BASE_STATE = new COSName("BaseState"); + public static final COSName BBOX = new COSName("BBox"); + public static final COSName BC = new COSName("BC"); + public static final COSName BE = new COSName("BE"); + public static final COSName BEFORE = new COSName("Before"); + public static final COSName BG = new COSName("BG"); + public static final COSName BITS_PER_COMPONENT = new COSName("BitsPerComponent"); + public static final COSName BITS_PER_COORDINATE = new COSName("BitsPerCoordinate"); + public static final COSName BITS_PER_FLAG = new COSName("BitsPerFlag"); + public static final COSName BITS_PER_SAMPLE = new COSName("BitsPerSample"); + public static final COSName BLACK_IS_1 = new COSName("BlackIs1"); + public static final COSName BLACK_POINT = new COSName("BlackPoint"); + public static final COSName BLEED_BOX = new COSName("BleedBox"); + public static final COSName BM = new COSName("BM"); + public static final COSName BORDER = new COSName("Border"); + public static final COSName BOUNDS = new COSName("Bounds"); + public static final COSName BPC = new COSName("BPC"); + public static final COSName BS = new COSName("BS"); + //** Acro form field type for button fields. + public static final COSName BTN = new COSName("Btn"); + public static final COSName BYTERANGE = new COSName("ByteRange"); + // C + public static final COSName C = new COSName("C"); + public static final COSName C0 = new COSName("C0"); + public static final COSName C1 = new COSName("C1"); + public static final COSName CA = new COSName("CA"); + public static final COSName CA_NS = new COSName("ca"); + public static final COSName CALGRAY = new COSName("CalGray"); + public static final COSName CALRGB = new COSName("CalRGB"); + public static final COSName CAP = new COSName("Cap"); + public static final COSName CAP_HEIGHT = new COSName("CapHeight"); + public static final COSName CATALOG = new COSName("Catalog"); + public static final COSName CCITTFAX_DECODE = new COSName("CCITTFaxDecode"); + public static final COSName CCITTFAX_DECODE_ABBREVIATION = new COSName("CCF"); + public static final COSName CENTER_WINDOW = new COSName("CenterWindow"); + public static final COSName CERT = new COSName("Cert"); + public static final COSName CF = new COSName("CF"); + public static final COSName CFM = new COSName("CFM"); + //** Acro form field type for choice fields. + public static final COSName CH = new COSName("Ch"); + public static final COSName CHAR_PROCS = new COSName("CharProcs"); + public static final COSName CHAR_SET = new COSName("CharSet"); + public static final COSName CICI_SIGNIT = new COSName("CICI.SignIt"); + public static final COSName CID_FONT_TYPE0 = new COSName("CIDFontType0"); + public static final COSName CID_FONT_TYPE2 = new COSName("CIDFontType2"); + public static final COSName CID_TO_GID_MAP = new COSName("CIDToGIDMap"); + public static final COSName CID_SET = new COSName("CIDSet"); + public static final COSName CIDSYSTEMINFO = new COSName("CIDSystemInfo"); + public static final COSName CL = new COSName("CL"); + public static final COSName CLR_F = new COSName("ClrF"); + public static final COSName CLR_FF = new COSName("ClrFf"); + public static final COSName CMAP = new COSName("CMap"); + public static final COSName CMAPNAME = new COSName("CMapName"); + public static final COSName CMYK = new COSName("CMYK"); + public static final COSName CO = new COSName("CO"); + public static final COSName COLOR = new COSName("Color"); + public static final COSName COLLECTION = new COSName("Collection"); + public static final COSName COLOR_BURN = new COSName("ColorBurn"); + public static final COSName COLOR_DODGE = new COSName("ColorDodge"); + public static final COSName COLORANTS = new COSName("Colorants"); + public static final COSName COLORS = new COSName("Colors"); + public static final COSName COLORSPACE = new COSName("ColorSpace"); + public static final COSName COLUMNS = new COSName("Columns"); + public static final COSName COMPATIBLE = new COSName("Compatible"); + public static final COSName COMPONENTS = new COSName("Components"); + public static final COSName CONTACT_INFO = new COSName("ContactInfo"); + public static final COSName CONTENTS = new COSName("Contents"); + public static final COSName COORDS = new COSName("Coords"); + public static final COSName COUNT = new COSName("Count"); + public static final COSName CP = new COSName("CP"); + public static final COSName CREATION_DATE = new COSName("CreationDate"); + public static final COSName CREATOR = new COSName("Creator"); + public static final COSName CROP_BOX = new COSName("CropBox"); + public static final COSName CRYPT = new COSName("Crypt"); + public static final COSName CS = new COSName("CS"); + // D + public static final COSName D = new COSName("D"); + public static final COSName DA = new COSName("DA"); + public static final COSName DARKEN = new COSName("Darken"); + public static final COSName DATE = new COSName("Date"); + public static final COSName DCT_DECODE = new COSName("DCTDecode"); + public static final COSName DCT_DECODE_ABBREVIATION = new COSName("DCT"); + public static final COSName DECODE = new COSName("Decode"); + public static final COSName DECODE_PARMS = new COSName("DecodeParms"); + public static final COSName DEFAULT = new COSName("default"); + public static final COSName DEFAULT_CMYK = new COSName("DefaultCMYK"); + public static final COSName DEFAULT_CRYPT_FILTER = new COSName("DefaultCryptFilter"); + public static final COSName DEFAULT_GRAY = new COSName("DefaultGray"); + public static final COSName DEFAULT_RGB = new COSName("DefaultRGB"); + public static final COSName DESC = new COSName("Desc"); + public static final COSName DESCENDANT_FONTS = new COSName("DescendantFonts"); + public static final COSName DESCENT = new COSName("Descent"); + public static final COSName DEST = new COSName("Dest"); + public static final COSName DEST_OUTPUT_PROFILE = new COSName("DestOutputProfile"); + public static final COSName DESTS = new COSName("Dests"); + public static final COSName DEVICECMYK = new COSName("DeviceCMYK"); + public static final COSName DEVICEGRAY = new COSName("DeviceGray"); + public static final COSName DEVICEN = new COSName("DeviceN"); + public static final COSName DEVICERGB = new COSName("DeviceRGB"); + public static final COSName DI = new COSName("Di"); + public static final COSName DIFFERENCE = new COSName("Difference"); + public static final COSName DIFFERENCES = new COSName("Differences"); + public static final COSName DIGEST_METHOD = new COSName("DigestMethod"); + public static final COSName DIGEST_RIPEMD160 = new COSName("RIPEMD160"); + public static final COSName DIGEST_SHA1 = new COSName("SHA1"); + public static final COSName DIGEST_SHA256 = new COSName("SHA256"); + public static final COSName DIGEST_SHA384 = new COSName("SHA384"); + public static final COSName DIGEST_SHA512 = new COSName("SHA512"); + public static final COSName DIRECTION = new COSName("Direction"); + public static final COSName DISPLAY_DOC_TITLE = new COSName("DisplayDocTitle"); + public static final COSName DL = new COSName("DL"); + public static final COSName DM = new COSName("Dm"); + public static final COSName DOC = new COSName("Doc"); + public static final COSName DOC_CHECKSUM = new COSName("DocChecksum"); + public static final COSName DOC_TIME_STAMP = new COSName("DocTimeStamp"); + public static final COSName DOCMDP = new COSName("DocMDP"); + public static final COSName DOCUMENT = new COSName("Document"); + public static final COSName DOMAIN = new COSName("Domain"); + public static final COSName DOS = new COSName("DOS"); + public static final COSName DP = new COSName("DP"); + public static final COSName DR = new COSName("DR"); + public static final COSName DS = new COSName("DS"); + public static final COSName DUPLEX = new COSName("Duplex"); + public static final COSName DUR = new COSName("Dur"); + public static final COSName DV = new COSName("DV"); + public static final COSName DW = new COSName("DW"); + public static final COSName DW2 = new COSName("DW2"); + // E + public static final COSName E = new COSName("E"); + public static final COSName EARLY_CHANGE = new COSName("EarlyChange"); + public static final COSName EF = new COSName("EF"); + public static final COSName EMBEDDED_FDFS = new COSName("EmbeddedFDFs"); + public static final COSName EMBEDDED_FILES = new COSName("EmbeddedFiles"); + public static final COSName EMPTY = new COSName(""); + public static final COSName ENCODE = new COSName("Encode"); + public static final COSName ENCODED_BYTE_ALIGN = new COSName("EncodedByteAlign"); + public static final COSName ENCODING = new COSName("Encoding"); + public static final COSName ENCODING_90MS_RKSJ_H = new COSName("90ms-RKSJ-H"); + public static final COSName ENCODING_90MS_RKSJ_V = new COSName("90ms-RKSJ-V"); + public static final COSName ENCODING_ETEN_B5_H = new COSName("ETen-B5-H"); + public static final COSName ENCODING_ETEN_B5_V = new COSName("ETen-B5-V"); + public static final COSName ENCRYPT = new COSName("Encrypt"); + public static final COSName ENCRYPT_META_DATA = new COSName("EncryptMetadata"); + public static final COSName END_OF_LINE = new COSName("EndOfLine"); + public static final COSName ENTRUST_PPKEF = new COSName("Entrust.PPKEF"); + public static final COSName EXCLUSION = new COSName("Exclusion"); + public static final COSName EXT_G_STATE = new COSName("ExtGState"); + public static final COSName EXTEND = new COSName("Extend"); + public static final COSName EXTENDS = new COSName("Extends"); + // F + public static final COSName F = new COSName("F"); + public static final COSName F_DECODE_PARMS = new COSName("FDecodeParms"); + public static final COSName F_FILTER = new COSName("FFilter"); + public static final COSName FB = new COSName("FB"); + public static final COSName FDF = new COSName("FDF"); + public static final COSName FF = new COSName("Ff"); + public static final COSName FIELDS = new COSName("Fields"); + public static final COSName FILESPEC = new COSName("Filespec"); + public static final COSName FILTER = new COSName("Filter"); + public static final COSName FIRST = new COSName("First"); + public static final COSName FIRST_CHAR = new COSName("FirstChar"); + public static final COSName FIT_WINDOW = new COSName("FitWindow"); + public static final COSName FL = new COSName("FL"); + public static final COSName FLAGS = new COSName("Flags"); + public static final COSName FLATE_DECODE = new COSName("FlateDecode"); + public static final COSName FLATE_DECODE_ABBREVIATION = new COSName("Fl"); + public static final COSName FOLDERS = new COSName("Folders"); + public static final COSName FONT = new COSName("Font"); + public static final COSName FONT_BBOX = new COSName("FontBBox"); + public static final COSName FONT_DESC = new COSName("FontDescriptor"); + public static final COSName FONT_FAMILY = new COSName("FontFamily"); + public static final COSName FONT_FILE = new COSName("FontFile"); + public static final COSName FONT_FILE2 = new COSName("FontFile2"); + public static final COSName FONT_FILE3 = new COSName("FontFile3"); + public static final COSName FONT_MATRIX = new COSName("FontMatrix"); + public static final COSName FONT_NAME = new COSName("FontName"); + public static final COSName FONT_STRETCH = new COSName("FontStretch"); + public static final COSName FONT_WEIGHT = new COSName("FontWeight"); + public static final COSName FORM = new COSName("Form"); + public static final COSName FORMTYPE = new COSName("FormType"); + public static final COSName FRM = new COSName("FRM"); + public static final COSName FT = new COSName("FT"); + public static final COSName FUNCTION = new COSName("Function"); + public static final COSName FUNCTION_TYPE = new COSName("FunctionType"); + public static final COSName FUNCTIONS = new COSName("Functions"); + // G + public static final COSName G = new COSName("G"); + public static final COSName GAMMA = new COSName("Gamma"); + public static final COSName GROUP = new COSName("Group"); + public static final COSName GTS_PDFA1 = new COSName("GTS_PDFA1"); + // H + public static final COSName H = new COSName("H"); + public static final COSName HARD_LIGHT = new COSName("HardLight"); + public static final COSName HEIGHT = new COSName("Height"); + public static final COSName HELV = new COSName("Helv"); + public static final COSName HIDE_MENUBAR = new COSName("HideMenubar"); + public static final COSName HIDE_TOOLBAR = new COSName("HideToolbar"); + public static final COSName HIDE_WINDOWUI = new COSName("HideWindowUI"); + public static final COSName HUE = new COSName("Hue"); + // I + public static final COSName I = new COSName("I"); + public static final COSName IC = new COSName("IC"); + public static final COSName ICCBASED = new COSName("ICCBased"); + public static final COSName ID = new COSName("ID"); + public static final COSName ID_TREE = new COSName("IDTree"); + public static final COSName IDENTITY = new COSName("Identity"); + public static final COSName IDENTITY_H = new COSName("Identity-H"); + public static final COSName IDENTITY_V = new COSName("Identity-V"); + public static final COSName IF = new COSName("IF"); + public static final COSName IM = new COSName("IM"); + public static final COSName IMAGE = new COSName("Image"); + public static final COSName IMAGE_MASK = new COSName("ImageMask"); + public static final COSName INDEX = new COSName("Index"); + public static final COSName INDEXED = new COSName("Indexed"); + public static final COSName INFO = new COSName("Info"); + public static final COSName INKLIST = new COSName("InkList"); + public static final COSName INTERPOLATE = new COSName("Interpolate"); + public static final COSName IT = new COSName("IT"); + public static final COSName ITALIC_ANGLE = new COSName("ItalicAngle"); + public static final COSName ISSUER = new COSName("Issuer"); + public static final COSName IX = new COSName("IX"); + + // J + public static final COSName JAVA_SCRIPT = new COSName("JavaScript"); + public static final COSName JBIG2_DECODE = new COSName("JBIG2Decode"); + public static final COSName JBIG2_GLOBALS = new COSName("JBIG2Globals"); + public static final COSName JPX_DECODE = new COSName("JPXDecode"); + public static final COSName JS = new COSName("JS"); + // K + public static final COSName K = new COSName("K"); + public static final COSName KEYWORDS = new COSName("Keywords"); + public static final COSName KEY_USAGE = new COSName("KeyUsage"); + public static final COSName KIDS = new COSName("Kids"); + // L + public static final COSName L = new COSName("L"); + public static final COSName LAB = new COSName("Lab"); + public static final COSName LANG = new COSName("Lang"); + public static final COSName LAST = new COSName("Last"); + public static final COSName LAST_CHAR = new COSName("LastChar"); + public static final COSName LAST_MODIFIED = new COSName("LastModified"); + public static final COSName LC = new COSName("LC"); + public static final COSName LE = new COSName("LE"); + public static final COSName LEADING = new COSName("Leading"); + public static final COSName LEGAL_ATTESTATION = new COSName("LegalAttestation"); + public static final COSName LENGTH = new COSName("Length"); + public static final COSName LENGTH1 = new COSName("Length1"); + public static final COSName LENGTH2 = new COSName("Length2"); + public static final COSName LIGHTEN = new COSName("Lighten"); + public static final COSName LIMITS = new COSName("Limits"); + public static final COSName LJ = new COSName("LJ"); + public static final COSName LL = new COSName("LL"); + public static final COSName LLE = new COSName("LLE"); + public static final COSName LLO = new COSName("LLO"); + public static final COSName LOCATION = new COSName("Location"); + public static final COSName LUMINOSITY = new COSName("Luminosity"); + public static final COSName LW = new COSName("LW"); + public static final COSName LZW_DECODE = new COSName("LZWDecode"); + public static final COSName LZW_DECODE_ABBREVIATION = new COSName("LZW"); + // M + public static final COSName M = new COSName("M"); + public static final COSName MAC = new COSName("Mac"); + public static final COSName MAC_EXPERT_ENCODING = new COSName("MacExpertEncoding"); + public static final COSName MAC_ROMAN_ENCODING = new COSName("MacRomanEncoding"); + public static final COSName MARK_INFO = new COSName("MarkInfo"); + public static final COSName MASK = new COSName("Mask"); + public static final COSName MATRIX = new COSName("Matrix"); + public static final COSName MATTE = new COSName("Matte"); + public static final COSName MAX_LEN = new COSName("MaxLen"); + public static final COSName MAX_WIDTH = new COSName("MaxWidth"); + public static final COSName MCID = new COSName("MCID"); + public static final COSName MDP = new COSName("MDP"); + public static final COSName MEDIA_BOX = new COSName("MediaBox"); + public static final COSName MEASURE = new COSName("Measure"); + public static final COSName METADATA = new COSName("Metadata"); + public static final COSName MISSING_WIDTH = new COSName("MissingWidth"); + public static final COSName MIX = new COSName("Mix"); + public static final COSName MK = new COSName("MK"); + public static final COSName ML = new COSName("ML"); + public static final COSName MM_TYPE1 = new COSName("MMType1"); + public static final COSName MOD_DATE = new COSName("ModDate"); + public static final COSName MULTIPLY = new COSName("Multiply"); + // N + public static final COSName N = new COSName("N"); + public static final COSName NAME = new COSName("Name"); + public static final COSName NAMES = new COSName("Names"); + public static final COSName NAVIGATOR = new COSName("Navigator"); + public static final COSName NEED_APPEARANCES = new COSName("NeedAppearances"); + public static final COSName NEW_WINDOW = new COSName("NewWindow"); + public static final COSName NEXT = new COSName("Next"); + public static final COSName NM = new COSName("NM"); + public static final COSName NON_EFONT_NO_WARN = new COSName("NonEFontNoWarn"); + public static final COSName NON_FULL_SCREEN_PAGE_MODE = new COSName("NonFullScreenPageMode"); + public static final COSName NONE = new COSName("None"); + public static final COSName NORMAL = new COSName("Normal"); + public static final COSName NUMS = new COSName("Nums"); + // O + public static final COSName O = new COSName("O"); + public static final COSName OBJ = new COSName("Obj"); + public static final COSName OBJ_STM = new COSName("ObjStm"); + public static final COSName OC = new COSName("OC"); + public static final COSName OCG = new COSName("OCG"); + public static final COSName OCGS = new COSName("OCGs"); + public static final COSName OCMD = new COSName("OCMD"); + public static final COSName OCPROPERTIES = new COSName("OCProperties"); + public static final COSName OE = new COSName("OE"); + public static final COSName OID = new COSName("OID"); + + /** + * "OFF", to be used for OCGs, not for Acroform + */ + public static final COSName OFF = new COSName("OFF"); + + /** + * "Off", to be used for Acroform, not for OCGs + */ + public static final COSName Off = new COSName("Off"); + + public static final COSName ON = new COSName("ON"); + public static final COSName OP = new COSName("OP"); + public static final COSName OP_NS = new COSName("op"); + public static final COSName OPEN_ACTION = new COSName("OpenAction"); + public static final COSName OPEN_TYPE = new COSName("OpenType"); + public static final COSName OPM = new COSName("OPM"); + public static final COSName OPT = new COSName("Opt"); + public static final COSName ORDER = new COSName("Order"); + public static final COSName ORDERING = new COSName("Ordering"); + public static final COSName OS = new COSName("OS"); + public static final COSName OUTLINES = new COSName("Outlines"); + public static final COSName OUTPUT_CONDITION = new COSName("OutputCondition"); + public static final COSName OUTPUT_CONDITION_IDENTIFIER = new COSName( + "OutputConditionIdentifier"); + public static final COSName OUTPUT_INTENT = new COSName("OutputIntent"); + public static final COSName OUTPUT_INTENTS = new COSName("OutputIntents"); + public static final COSName OVERLAY = new COSName("Overlay"); + // P + public static final COSName P = new COSName("P"); + public static final COSName PAGE = new COSName("Page"); + public static final COSName PAGE_LABELS = new COSName("PageLabels"); + public static final COSName PAGE_LAYOUT = new COSName("PageLayout"); + public static final COSName PAGE_MODE = new COSName("PageMode"); + public static final COSName PAGES = new COSName("Pages"); + public static final COSName PAINT_TYPE = new COSName("PaintType"); + public static final COSName PANOSE = new COSName("Panose"); + public static final COSName PARAMS = new COSName("Params"); + public static final COSName PARENT = new COSName("Parent"); + public static final COSName PARENT_TREE = new COSName("ParentTree"); + public static final COSName PARENT_TREE_NEXT_KEY = new COSName("ParentTreeNextKey"); + public static final COSName PATH = new COSName("Path"); + public static final COSName PATTERN = new COSName("Pattern"); + public static final COSName PATTERN_TYPE = new COSName("PatternType"); + public static final COSName PDF_DOC_ENCODING = new COSName("PDFDocEncoding"); + public static final COSName PERMS = new COSName("Perms"); + public static final COSName PG = new COSName("Pg"); + public static final COSName PRE_RELEASE = new COSName("PreRelease"); + public static final COSName PREDICTOR = new COSName("Predictor"); + public static final COSName PREV = new COSName("Prev"); + public static final COSName PRINT_AREA = new COSName("PrintArea"); + public static final COSName PRINT_CLIP = new COSName("PrintClip"); + public static final COSName PRINT_SCALING = new COSName("PrintScaling"); + public static final COSName PROC_SET = new COSName("ProcSet"); + public static final COSName PROCESS = new COSName("Process"); + public static final COSName PRODUCER = new COSName("Producer"); + public static final COSName PROP_BUILD = new COSName("Prop_Build"); + public static final COSName PROPERTIES = new COSName("Properties"); + public static final COSName PS = new COSName("PS"); + public static final COSName PUB_SEC = new COSName("PubSec"); + // Q + public static final COSName Q = new COSName("Q"); + public static final COSName QUADPOINTS = new COSName("QuadPoints"); + // R + public static final COSName R = new COSName("R"); + public static final COSName RANGE = new COSName("Range"); + public static final COSName RC = new COSName("RC"); + public static final COSName RD = new COSName("RD"); + public static final COSName REASON = new COSName("Reason"); + public static final COSName REASONS = new COSName("Reasons"); + public static final COSName REPEAT = new COSName("Repeat"); + public static final COSName RECIPIENTS = new COSName("Recipients"); + public static final COSName RECT = new COSName("Rect"); + public static final COSName REGISTRY = new COSName("Registry"); + public static final COSName REGISTRY_NAME = new COSName("RegistryName"); + public static final COSName RENAME = new COSName("Rename"); + public static final COSName RESOURCES = new COSName("Resources"); + public static final COSName RGB = new COSName("RGB"); + public static final COSName RI = new COSName("RI"); + public static final COSName ROLE_MAP = new COSName("RoleMap"); + public static final COSName ROOT = new COSName("Root"); + public static final COSName ROTATE = new COSName("Rotate"); + public static final COSName ROWS = new COSName("Rows"); + public static final COSName RUN_LENGTH_DECODE = new COSName("RunLengthDecode"); + public static final COSName RUN_LENGTH_DECODE_ABBREVIATION = new COSName("RL"); + public static final COSName RV = new COSName("RV"); + // S + public static final COSName S = new COSName("S"); + public static final COSName SA = new COSName("SA"); + public static final COSName SATURATION = new COSName("Saturation"); + public static final COSName SCHEMA = new COSName("Schema"); + public static final COSName SCREEN = new COSName("Screen"); + public static final COSName SE = new COSName("SE"); + public static final COSName SEPARATION = new COSName("Separation"); + public static final COSName SET_F = new COSName("SetF"); + public static final COSName SET_FF = new COSName("SetFf"); + public static final COSName SHADING = new COSName("Shading"); + public static final COSName SHADING_TYPE = new COSName("ShadingType"); + public static final COSName SIG = new COSName("Sig"); + public static final COSName SIG_FLAGS = new COSName("SigFlags"); + public static final COSName SIZE = new COSName("Size"); + public static final COSName SM = new COSName("SM"); + public static final COSName SMASK = new COSName("SMask"); + public static final COSName SOFT_LIGHT = new COSName("SoftLight"); + public static final COSName SORT = new COSName("Sort"); + public static final COSName SOUND = new COSName("Sound"); + public static final COSName SPLIT = new COSName("Split"); + public static final COSName SS = new COSName("SS"); + public static final COSName ST = new COSName("St"); + public static final COSName STANDARD_ENCODING = new COSName("StandardEncoding"); + public static final COSName STATE = new COSName("State"); + public static final COSName STATE_MODEL = new COSName("StateModel"); + public static final COSName STATUS = new COSName("Status"); + public static final COSName STD_CF = new COSName("StdCF"); + public static final COSName STEM_H = new COSName("StemH"); + public static final COSName STEM_V = new COSName("StemV"); + public static final COSName STM_F = new COSName("StmF"); + public static final COSName STR_F = new COSName("StrF"); + public static final COSName STRUCT_ELEM = new COSName("StructElem"); + public static final COSName STRUCT_PARENT = new COSName("StructParent"); + public static final COSName STRUCT_PARENTS = new COSName("StructParents"); + public static final COSName STRUCT_TREE_ROOT = new COSName("StructTreeRoot"); + public static final COSName STYLE = new COSName("Style"); + public static final COSName SUB_FILTER = new COSName("SubFilter"); + public static final COSName SUBJ = new COSName("Subj"); + public static final COSName SUBJECT = new COSName("Subject"); + public static final COSName SUBJECT_DN = new COSName("SubjectDN"); + public static final COSName SUBTYPE = new COSName("Subtype"); + public static final COSName SUPPLEMENT = new COSName("Supplement"); + public static final COSName SV = new COSName("SV"); + public static final COSName SV_CERT = new COSName("SVCert"); + public static final COSName SW = new COSName("SW"); + public static final COSName SY = new COSName("Sy"); + public static final COSName SYNCHRONOUS = new COSName("Synchronous"); + // T + public static final COSName T = new COSName("T"); + public static final COSName TARGET = new COSName("Target"); + public static final COSName TEMPLATES = new COSName("Templates"); + public static final COSName THREADS = new COSName("Threads"); + public static final COSName THUMB = new COSName("Thumb"); + public static final COSName TI = new COSName("TI"); + public static final COSName TILING_TYPE = new COSName("TilingType"); + public static final COSName TIME_STAMP = new COSName("TimeStamp"); + public static final COSName TITLE = new COSName("Title"); + public static final COSName TK = new COSName("TK"); + public static final COSName TM = new COSName("TM"); + public static final COSName TO_UNICODE = new COSName("ToUnicode"); + public static final COSName TR = new COSName("TR"); + public static final COSName TR2 = new COSName("TR2"); + public static final COSName TRAPPED = new COSName("Trapped"); + public static final COSName TRANS = new COSName("Trans"); + public static final COSName TRANSPARENCY = new COSName("Transparency"); + public static final COSName TREF = new COSName("TRef"); + public static final COSName TRIM_BOX = new COSName("TrimBox"); + public static final COSName TRUE_TYPE = new COSName("TrueType"); + public static final COSName TRUSTED_MODE = new COSName("TrustedMode"); + public static final COSName TU = new COSName("TU"); + /** Acro form field type for text field. */ + public static final COSName TX = new COSName("Tx"); + public static final COSName TYPE = new COSName("Type"); + public static final COSName TYPE0 = new COSName("Type0"); + public static final COSName TYPE1 = new COSName("Type1"); + public static final COSName TYPE3 = new COSName("Type3"); + // U + public static final COSName U = new COSName("U"); + public static final COSName UE = new COSName("UE"); + public static final COSName UF = new COSName("UF"); + public static final COSName UNCHANGED = new COSName("Unchanged"); + public static final COSName UNIX = new COSName("Unix"); + public static final COSName URI = new COSName("URI"); + public static final COSName URL = new COSName("URL"); + public static final COSName URL_TYPE = new COSName("URLType"); + // V + public static final COSName V = new COSName("V"); + public static final COSName VE = new COSName("VE"); + public static final COSName VERISIGN_PPKVS = new COSName("VeriSign.PPKVS"); + public static final COSName VERSION = new COSName("Version"); + public static final COSName VERTICES = new COSName("Vertices"); + public static final COSName VERTICES_PER_ROW = new COSName("VerticesPerRow"); + public static final COSName VIEW = new COSName("View"); + public static final COSName VIEW_AREA = new COSName("ViewArea"); + public static final COSName VIEW_CLIP = new COSName("ViewClip"); + public static final COSName VIEWER_PREFERENCES = new COSName("ViewerPreferences"); + public static final COSName VOLUME = new COSName("Volume"); + public static final COSName VP = new COSName("VP"); + // W + public static final COSName W = new COSName("W"); + public static final COSName W2 = new COSName("W2"); + public static final COSName WHITE_POINT = new COSName("WhitePoint"); + public static final COSName WIDGET = new COSName("Widget"); + public static final COSName WIDTH = new COSName("Width"); + public static final COSName WIDTHS = new COSName("Widths"); + public static final COSName WIN_ANSI_ENCODING = new COSName("WinAnsiEncoding"); + // X + public static final COSName XFA = new COSName("XFA"); + public static final COSName X_STEP = new COSName("XStep"); + public static final COSName XHEIGHT = new COSName("XHeight"); + public static final COSName XOBJECT = new COSName("XObject"); + public static final COSName XREF = new COSName("XRef"); + public static final COSName XREF_STM = new COSName("XRefStm"); + // Y + public static final COSName Y_STEP = new COSName("YStep"); + public static final COSName YES = new COSName("Yes"); + + // Z + public static final COSName ZA_DB = new COSName("ZaDb"); + + // fields + private final String name; + private final int hashCode; + + /** + * This will get a COSName object with that name. + * + * @param aName The name of the object. + * + * @return A COSName with the specified name. + */ + public static COSName getPDFName(String aName) + { + COSName name = null; + if (aName != null) + { + // Is it a common COSName ?? + name = commonNameMap.get(aName); + if (name == null) + { + // It seems to be a document specific COSName + name = nameMap.get(aName); + if (name == null) + { + // name is added to the synchronized map in the constructor + name = new COSName(aName, false); + } + } + } + return name; + } + + /** + * Private constructor. This will limit the number of COSName objects. that are created. + * + * @param aName The name of the COSName object. + * @param staticValue Indicates if the COSName object is static so that it can be stored in the HashMap without + * synchronizing. + */ + private COSName(String aName, boolean staticValue) + { + name = aName; + if (staticValue) + { + commonNameMap.put(aName, this); + } + else + { + nameMap.put(aName, this); + } + hashCode = name.hashCode(); + } + + /** + * Private constructor. This will limit the number of COSName objects. that are created. + * + * @param aName The name of the COSName object. + */ + private COSName(String aName) + { + this(aName, true); + } + + /** + * This will get the name of this COSName object. + * + * @return The name of the object. + */ + public String getName() + { + return name; + } + + @Override + public String toString() + { + return "COSName{" + name + "}"; + } + + @Override + public boolean equals(Object object) + { + return object instanceof COSName && name.equals(((COSName) object).name); + } + + @Override + public int hashCode() + { + return hashCode; + } + + @Override + public int compareTo(COSName other) + { + return name.compareTo(other.name); + } + + /** + * Returns true if the name is the empty string. + * @return true if the name is the empty string. + */ + public boolean isEmpty() + { + return name.isEmpty(); + } + + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromName(this); + } + + /** + * This will output this string as a PDF object. + * + * @param output The stream to write to. + * @throws IOException If there is an error writing to the stream. + */ + public void writePDF(OutputStream output) throws IOException + { + output.write('/'); + byte[] bytes = getName().getBytes(Charsets.UTF_8); + for (byte b : bytes) + { + int current = b & 0xFF; + + // be more restrictive than the PDF spec, "Name Objects", see PDFBOX-2073 + if (current >= 'A' && current <= 'Z' || + current >= 'a' && current <= 'z' || + current >= '0' && current <= '9' || + current == '+' || + current == '-' || + current == '_' || + current == '@' || + current == '*' || + current == '$' || + current == ';' || + current == '.') + { + output.write(current); + } + else + { + output.write('#'); + Hex.writeHexByte(b, output); + } + } + } + + /** + * Not usually needed except if resources need to be reclaimed in a long running process. + */ + public static synchronized void clearResources() + { + // Clear them all + nameMap.clear(); + } +} diff --git a/src/org/pdfbox/cos/COSNull.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNull.java similarity index 83% rename from src/org/pdfbox/cos/COSNull.java rename to pdfbox/src/main/java/org/apache/pdfbox/cos/COSNull.java index 992d35a50cb..f10e4c68a05 100644 --- a/src/org/pdfbox/cos/COSNull.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNull.java @@ -14,22 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.cos; - - +package org.apache.pdfbox.cos; import java.io.IOException; import java.io.OutputStream; -import org.pdfbox.exceptions.COSVisitorException; - /** * This class represents a null PDF object. * - * @author Ben Litchfield - * @version $Revision: 1.13 $ + * @author Ben Litchfield */ -public class COSNull extends COSBase +public final class COSNull extends COSBase { /** * The null token. @@ -54,9 +49,10 @@ private COSNull() * * @param visitor The object to notify when visiting this object. * @return any object, depending on the visitor implementation, or null - * @throws COSVisitorException If an error occurs while visiting this object. + * @throws IOException If an error occurs while visiting this object. */ - public Object accept( ICOSVisitor visitor ) throws COSVisitorException + @Override + public Object accept( ICOSVisitor visitor ) throws IOException { return visitor.visitFromNull( this ); } @@ -71,4 +67,13 @@ public void writePDF( OutputStream output ) throws IOException { output.write(NULL_BYTES); } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "COSNull{}"; + } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java new file mode 100644 index 00000000000..ab06074eb07 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; + +/** + * This class represents an abstract number in a PDF document. + * + * @author Ben Litchfield + */ +public abstract class COSNumber extends COSBase +{ + /** + * This will get the float value of this number. + * + * @return The float value of this object. + */ + public abstract float floatValue(); + + /** + * This will get the double value of this number. + * + * @return The double value of this number. + */ + public abstract double doubleValue(); + + /** + * This will get the integer value of this number. + * + * @return The integer value of this number. + */ + public abstract int intValue(); + + /** + * This will get the long value of this number. + * + * @return The long value of this number. + */ + public abstract long longValue(); + + /** + * This factory method will get the appropriate number object. + * + * @param number The string representation of the number. + * + * @return A number object, either float or int. + * + * @throws IOException If the string is not a number. + */ + public static COSNumber get( String number ) throws IOException + { + if (number.length() == 1) + { + char digit = number.charAt(0); + if ('0' <= digit && digit <= '9') + { + return COSInteger.get(digit - '0'); + } + else if (digit == '-' || digit == '.') + { + // See https://issues.apache.org/jira/browse/PDFBOX-592 + return COSInteger.ZERO; + } + else + { + throw new IOException("Not a number: " + number); + } + } + else if (number.indexOf('.') == -1 && (number.toLowerCase().indexOf('e') == -1)) + { + try + { + if (number.charAt(0) == '+') + { + return COSInteger.get(Long.parseLong(number.substring(1))); + } + return COSInteger.get(Long.parseLong(number)); + } + catch( NumberFormatException e ) + { + // might be a huge number, see PDFBOX-3116 + return new COSFloat(number); + } + } + else + { + return new COSFloat(number); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java new file mode 100644 index 00000000000..3ddbe36a183 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObject.java @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; + +/** + * This class represents a PDF object. + * + * @author Ben Litchfield + * + */ +public class COSObject extends COSBase implements COSUpdateInfo +{ + private COSBase baseObject; + private long objectNumber; + private int generationNumber; + private boolean needToBeUpdated; + + /** + * Constructor. + * + * @param object The object that this encapsulates. + * + */ + public COSObject(COSBase object) + { + setObject( object ); + } + + /** + * This will get the dictionary object in this object that has the name key and + * if it is a pdfobjref then it will dereference that and return it. + * + * @param key The key to the value that we are searching for. + * + * @return The pdf object that matches the key. + */ + public COSBase getDictionaryObject( COSName key ) + { + COSBase retval =null; + if( baseObject instanceof COSDictionary ) + { + retval = ((COSDictionary)baseObject).getDictionaryObject( key ); + } + return retval; + } + + /** + * This will get the dictionary object in this object that has the name key. + * + * @param key The key to the value that we are searching for. + * + * @return The pdf object that matches the key. + */ + public COSBase getItem( COSName key ) + { + COSBase retval =null; + if( baseObject instanceof COSDictionary ) + { + retval = ((COSDictionary)baseObject).getItem( key ); + } + return retval; + } + + /** + * This will get the object that this object encapsulates. + * + * @return The encapsulated object. + */ + public COSBase getObject() + { + return baseObject; + } + + /** + * This will set the object that this object encapsulates. + * + * @param object The new object to encapsulate. + */ + public final void setObject(COSBase object) + { + baseObject = object; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "COSObject{" + Long.toString(objectNumber) + ", " + Integer.toString(generationNumber) + "}"; + } + + /** + * Getter for property objectNumber. + * @return Value of property objectNumber. + */ + public long getObjectNumber() + { + return objectNumber; + } + + /** + * Setter for property objectNumber. + * @param objectNum New value of property objectNumber. + */ + public void setObjectNumber(long objectNum) + { + objectNumber = objectNum; + } + + /** + * Getter for property generationNumber. + * @return Value of property generationNumber. + */ + public int getGenerationNumber() + { + return generationNumber; + } + + /** + * Setter for property generationNumber. + * @param generationNumberValue New value of property generationNumber. + */ + public void setGenerationNumber(int generationNumberValue) + { + generationNumber = generationNumberValue; + } + + /** + * visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return any object, depending on the visitor implementation, or null + * @throws IOException If an error occurs while visiting this object. + */ + @Override + public Object accept( ICOSVisitor visitor ) throws IOException + { + return getObject() != null ? getObject().accept( visitor ) : COSNull.NULL.accept( visitor ); + } + + /** + * Get the update state for the COSWriter. + * + * @return the update state. + */ + @Override + public boolean isNeedToBeUpdated() + { + return needToBeUpdated; + } + + /** + * Set the update state of the dictionary for the COSWriter. + * + * @param flag the update state. + */ + @Override + public void setNeedToBeUpdated(boolean flag) + { + needToBeUpdated = flag; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java new file mode 100644 index 00000000000..5ce57b762be --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +/** + * Object representing the physical reference to an indirect pdf object. + * + * @author Michael Traut + * + */ +public class COSObjectKey implements Comparable +{ + private final long number; + private int generation; + + /** + * Constructor. + * + * @param object The object that this key will represent. + */ + public COSObjectKey(COSObject object) + { + this(object.getObjectNumber(), object.getGenerationNumber()); + } + + /** + * Constructor. + * + * @param num The object number. + * @param gen The object generation number. + */ + public COSObjectKey(long num, int gen) + { + number = num; + generation = gen; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object obj) + { + COSObjectKey objToBeCompared = obj instanceof COSObjectKey ? (COSObjectKey)obj : null; + return objToBeCompared != null && + objToBeCompared.getNumber() == getNumber() && + objToBeCompared.getGeneration() == getGeneration(); + } + + /** + * This will get the generation number. + * + * @return The objects generation number. + */ + public int getGeneration() + { + return generation; + } + + /** + * This will set the generation number. It is intended for fixes only. + * + * @param genNumber the new generation number. + */ + public void fixGeneration(int genNumber) + { + generation = genNumber; + } + + /** + * This will get the objects id. + * + * @return The object's id. + */ + public long getNumber() + { + return number; + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return Long.valueOf(number+generation).hashCode(); + } + + @Override + public String toString() + { + return Long.toString(number) + " " + Integer.toString(generation) + " R"; + } + + @Override + public int compareTo(COSObjectKey other) + { + int result = Long.compare(getNumber(), other.getNumber()); + if (result == 0) + { + return Integer.compare(getGeneration(), other.getGeneration()); + } + return result; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSOutputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSOutputStream.java new file mode 100644 index 00000000000..ff72d1c1cf7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSOutputStream.java @@ -0,0 +1,171 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.io.RandomAccess; +import org.apache.pdfbox.io.RandomAccessInputStream; +import org.apache.pdfbox.io.RandomAccessOutputStream; +import org.apache.pdfbox.io.ScratchFile; + +/** + * An OutputStream which writes to an encoded COS stream. + * + * @author John Hewson + */ +public final class COSOutputStream extends FilterOutputStream +{ + private final List filters; + private final COSDictionary parameters; + private final ScratchFile scratchFile; + private RandomAccess buffer; + + /** + * Creates a new COSOutputStream writes to an encoded COS stream. + * + * @param filters Filters to apply. + * @param parameters Filter parameters. + * @param output Encoded stream. + * @param scratchFile Scratch file to use. + * + * @throws IOException If there was an error creating a temporary buffer + */ + COSOutputStream(List filters, COSDictionary parameters, OutputStream output, + ScratchFile scratchFile) throws IOException + { + super(output); + this.filters = filters; + this.parameters = parameters; + this.scratchFile = scratchFile; + + if (filters.isEmpty()) + { + this.buffer = null; + } + else + { + this.buffer = scratchFile.createBuffer(); + } + } + + @Override + public void write(byte[] b) throws IOException + { + if (buffer != null) + { + buffer.write(b); + } + else + { + super.write(b); + } + } + + @Override + public void write(byte[] b, int off, int len) throws IOException + { + if (buffer != null) + { + buffer.write(b, off, len); + } + else + { + super.write(b, off, len); + } + } + + @Override + public void write(int b) throws IOException + { + if (buffer != null) + { + buffer.write(b); + } + else + { + super.write(b); + } + } + + @Override + public void flush() throws IOException + { + } + + @Override + public void close() throws IOException + { + try + { + if (buffer != null) + { + try + { + // apply filters in reverse order + for (int i = filters.size() - 1; i >= 0; i--) + { + try (InputStream unfilteredIn = new RandomAccessInputStream(buffer)) + { + if (i == 0) + { + /* + * The last filter to run can encode directly to the enclosed output + * stream. + */ + filters.get(i).encode(unfilteredIn, out, parameters, i); + } + else + { + RandomAccess filteredBuffer = scratchFile.createBuffer(); + try + { + try (OutputStream filteredOut = new RandomAccessOutputStream(filteredBuffer)) + { + filters.get(i).encode(unfilteredIn, filteredOut, parameters, i); + } + + RandomAccess tmpSwap = filteredBuffer; + filteredBuffer = buffer; + buffer = tmpSwap; + } + finally + { + filteredBuffer.close(); + } + } + } + } + } + finally + { + buffer.close(); + buffer = null; + } + } + } + finally + { + super.close(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java new file mode 100644 index 00000000000..d59909adb9e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java @@ -0,0 +1,411 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccess; +import org.apache.pdfbox.io.RandomAccessInputStream; +import org.apache.pdfbox.io.RandomAccessOutputStream; +import org.apache.pdfbox.io.ScratchFile; + +/** + * This class represents a stream object in a PDF document. + * + * @author Ben Litchfield + */ +public class COSStream extends COSDictionary implements Closeable +{ + private RandomAccess randomAccess; // backing store, in-memory or on-disk + private final ScratchFile scratchFile; // used as a temp buffer during decoding + private boolean isWriting; // true if there's an open OutputStream + + private static final Log LOG = LogFactory.getLog(COSStream.class); + + /** + * Creates a new stream with an empty dictionary. + *

+ * Try to avoid using this constructor because it creates a new scratch file in memory. Instead, + * use {@link COSDocument#createCOSStream() document.getDocument().createCOSStream()} which will + * use the existing scratch file (in memory or in temp file) of the document. + *

+ */ + public COSStream() + { + this(ScratchFile.getMainMemoryOnlyInstance()); + } + + /** + * Creates a new stream with an empty dictionary. Data is stored in the given scratch file. + * + * @param scratchFile Scratch file for writing stream data. + */ + public COSStream(ScratchFile scratchFile) + { + setInt(COSName.LENGTH, 0); + this.scratchFile = scratchFile != null ? scratchFile : ScratchFile.getMainMemoryOnlyInstance(); + } + + /** + * Throws if the random access backing store has been closed. Helpful for catching cases where + * a user tries to use a COSStream which has outlived its COSDocument. + */ + private void checkClosed() throws IOException + { + if (randomAccess != null && randomAccess.isClosed()) + { + throw new IOException("COSStream has been closed and cannot be read. " + + "Perhaps its enclosing PDDocument has been closed?"); + // Tip for debugging: look at the destination file with an editor, you'll see an + // incomplete stream at the bottom. + } + } + + /** + * This will get the stream with all of the filters applied. + * + * @return the bytes of the physical (encoded) stream + * @throws IOException when encoding causes an exception + * @deprecated Use {@link #createRawInputStream()} instead. + */ + @Deprecated + public InputStream getFilteredStream() throws IOException + { + return createRawInputStream(); + } + + /** + * Ensures {@link #randomAccess} is not null by creating a + * buffer from {@link #scratchFile} if needed. + * + * @param forInputStream if true and {@link #randomAccess} is null + * a debug message is logged - input stream should be retrieved after + * data being written to stream + * @throws IOException + */ + private void ensureRandomAccessExists(boolean forInputStream) throws IOException + { + if (randomAccess == null) + { + if (forInputStream && LOG.isDebugEnabled()) + { + // no data written to stream - maybe this should be an exception + LOG.debug("Create InputStream called without data being written before to stream."); + } + randomAccess = scratchFile.createBuffer(); + } + } + + /** + * Returns a new InputStream which reads the encoded PDF stream data. Experts only! + * + * @return InputStream containing raw, encoded PDF stream data. + * @throws IOException If the stream could not be read. + */ + public InputStream createRawInputStream() throws IOException + { + checkClosed(); + if (isWriting) + { + throw new IllegalStateException("Cannot read while there is an open stream writer"); + } + ensureRandomAccessExists(true); + return new RandomAccessInputStream(randomAccess); + } + + /** + * This will get the logical content stream with none of the filters. + * + * @return the bytes of the logical (decoded) stream + * @throws IOException when decoding causes an exception + * @deprecated Use {@link #createInputStream()} instead. + */ + @Deprecated + public InputStream getUnfilteredStream() throws IOException + { + return createInputStream(); + } + + /** + * Returns a new InputStream which reads the decoded stream data. + * + * @return InputStream containing decoded stream data. + * @throws IOException If the stream could not be read. + */ + public COSInputStream createInputStream() throws IOException + { + return createInputStream(DecodeOptions.DEFAULT); + } + + public COSInputStream createInputStream(DecodeOptions options) throws IOException + { + checkClosed(); + if (isWriting) + { + throw new IllegalStateException("Cannot read while there is an open stream writer"); + } + ensureRandomAccessExists(true); + InputStream input = new RandomAccessInputStream(randomAccess); + return COSInputStream.create(getFilterList(), this, input, scratchFile, options); + } + + /** + * This will create an output stream that can be written to. + * + * @return An output stream which raw data bytes should be written to. + * @throws IOException If there is an error creating the stream. + * @deprecated Use {@link #createOutputStream()} instead. + */ + @Deprecated + public OutputStream createUnfilteredStream() throws IOException + { + return createOutputStream(); + } + + /** + * Returns a new OutputStream for writing stream data, using the current filters. + * + * @return OutputStream for un-encoded stream data. + * @throws IOException If the output stream could not be created. + */ + public OutputStream createOutputStream() throws IOException + { + return createOutputStream(null); + } + + /** + * Returns a new OutputStream for writing stream data, using and the given filters. + * + * @param filters COSArray or COSName of filters to be used. + * @return OutputStream for un-encoded stream data. + * @throws IOException If the output stream could not be created. + */ + public OutputStream createOutputStream(COSBase filters) throws IOException + { + checkClosed(); + if (isWriting) + { + throw new IllegalStateException("Cannot have more than one open stream writer."); + } + // apply filters, if any + if (filters != null) + { + setItem(COSName.FILTER, filters); + } + IOUtils.closeQuietly(randomAccess); + randomAccess = scratchFile.createBuffer(); + OutputStream randomOut = new RandomAccessOutputStream(randomAccess); + OutputStream cosOut = new COSOutputStream(getFilterList(), this, randomOut, scratchFile); + isWriting = true; + return new FilterOutputStream(cosOut) + { + @Override + public void write(byte[] b, int off, int len) throws IOException + { + this.out.write(b, off, len); + } + + @Override + public void close() throws IOException + { + super.close(); + setInt(COSName.LENGTH, (int)randomAccess.length()); + isWriting = false; + } + }; + } + + /** + * This will create a new stream for which filtered byte should be + * written to. You probably don't want this but want to use the + * createUnfilteredStream, which is used to write raw bytes to. + * + * @return A stream that can be written to. + * @throws IOException If there is an error creating the stream. + * @deprecated Use {@link #createRawOutputStream()} instead. + */ + @Deprecated + public OutputStream createFilteredStream() throws IOException + { + return createRawOutputStream(); + } + + /** + * Returns a new OutputStream for writing encoded PDF data. Experts only! + * + * @return OutputStream for raw PDF stream data. + * @throws IOException If the output stream could not be created. + */ + public OutputStream createRawOutputStream() throws IOException + { + checkClosed(); + if (isWriting) + { + throw new IllegalStateException("Cannot have more than one open stream writer."); + } + IOUtils.closeQuietly(randomAccess); + randomAccess = scratchFile.createBuffer(); + OutputStream out = new RandomAccessOutputStream(randomAccess); + isWriting = true; + return new FilterOutputStream(out) + { + @Override + public void write(byte[] b, int off, int len) throws IOException + { + this.out.write(b, off, len); + } + + @Override + public void close() throws IOException + { + super.close(); + setInt(COSName.LENGTH, (int)randomAccess.length()); + isWriting = false; + } + }; + } + + /** + * Returns the list of filters. + */ + private List getFilterList() throws IOException + { + List filterList = new ArrayList<>(); + COSBase filters = getFilters(); + if (filters instanceof COSName) + { + filterList.add(FilterFactory.INSTANCE.getFilter((COSName)filters)); + } + else if (filters instanceof COSArray) + { + COSArray filterArray = (COSArray)filters; + for (int i = 0; i < filterArray.size(); i++) + { + COSName filterName = (COSName)filterArray.get(i); + filterList.add(FilterFactory.INSTANCE.getFilter(filterName)); + } + } + return filterList; + } + + /** + * Returns the length of the encoded stream. + * + * @return length in bytes + */ + public long getLength() + { + if (isWriting) + { + throw new IllegalStateException("There is an open OutputStream associated with " + + "this COSStream. It must be closed before querying" + + "length of this COSStream."); + } + return getInt(COSName.LENGTH, 0); + } + + /** + * This will return the filters to apply to the byte stream. + * The method will return + * - null if no filters are to be applied + * - a COSName if one filter is to be applied + * - a COSArray containing COSNames if multiple filters are to be applied + * + * @return the COSBase object representing the filters + */ + public COSBase getFilters() + { + return getDictionaryObject(COSName.FILTER); + } + + /** + * Sets the filters to be applied when encoding or decoding the stream. + * + * @param filters The filters to set on this stream. + * @throws IOException If there is an error clearing the old filters. + * @deprecated Use {@link #createOutputStream(COSBase)} instead. + */ + @Deprecated + public void setFilters(COSBase filters) throws IOException + { + setItem(COSName.FILTER, filters); + } + + /** + * Returns the contents of the stream as a text string. + * + * @deprecated Use {@link #toTextString()} instead. + */ + @Deprecated + public String getString() + { + return toTextString(); + } + + /** + * Returns the contents of the stream as a PDF "text string". + */ + public String toTextString() + { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + InputStream input = null; + try + { + input = createInputStream(); + IOUtils.copy(input, out); + } + catch (IOException e) + { + LOG.debug("An exception occured trying to get the content - returning empty string instead", e); + return ""; + } + finally + { + IOUtils.closeQuietly(input); + } + COSString string = new COSString(out.toByteArray()); + return string.getString(); + } + + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromStream(this); + } + + @Override + public void close() throws IOException + { + // marks the scratch file pages as free + if (randomAccess != null) + { + randomAccess.close(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSString.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSString.java new file mode 100644 index 00000000000..85fb409a027 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSString.java @@ -0,0 +1,270 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import java.util.Arrays; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Hex; + +/** + * A string object, which may be a text string, a PDFDocEncoded string, ASCII string, or byte string. + * + *

Text strings are used for character strings that contain information intended to be + * human-readable, such as text annotations, bookmark names, article names, document information, + * and so forth. + * + *

PDFDocEncoded strings are used for characters that are represented in a single byte. + * + *

ASCII strings are used for characters that are represented in a single byte using ASCII + * encoding. + * + *

Byte strings are used for binary data represented as a series of bytes, but the encoding is + * not known. The bytes of the string need not represent characters. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class COSString extends COSBase +{ + private static final Log LOG = LogFactory.getLog(COSString.class); + + // legacy behaviour for old PDFParser + public static final boolean FORCE_PARSING = + Boolean.getBoolean("org.apache.pdfbox.forceParsing"); + + /** + * This will create a COS string from a string of hex characters. + * + * @param hex A hex string. + * @return A cos string with the hex characters converted to their actual bytes. + * @throws IOException If there is an error with the hex string. + */ + public static COSString parseHex(String hex) throws IOException + { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + StringBuilder hexBuffer = new StringBuilder(hex.trim()); + + // if odd number then the last hex digit is assumed to be 0 + if (hexBuffer.length() % 2 != 0) + { + hexBuffer.append('0'); + } + + int length = hexBuffer.length(); + for (int i = 0; i < length; i += 2) + { + try + { + bytes.write(Integer.parseInt(hexBuffer.substring(i, i + 2), 16)); + } + catch (NumberFormatException e) + { + if (FORCE_PARSING) + { + LOG.warn("Encountered a malformed hex string"); + bytes.write('?'); // todo: what does Acrobat do? Any example PDFs? + } + else + { + throw new IOException("Invalid hex string: " + hex, e); + } + } + } + + return new COSString(bytes.toByteArray()); + } + + private byte[] bytes; + private boolean forceHexForm; + + /** + * Creates a new PDF string from a byte array. This method can be used to read a string from + * an existing PDF file, or to create a new byte string. + * + * @param bytes The raw bytes of the PDF text string or byte string. + */ + public COSString(byte[] bytes) + { + setValue(bytes); + } + + /** + * Creates a new text string from a Java String. + * + * @param text The string value of the object. + */ + public COSString(String text) + { + // check whether the string uses only characters available in PDFDocEncoding + boolean isOnlyPDFDocEncoding = true; + for (char c : text.toCharArray()) + { + if (!PDFDocEncoding.containsChar(c)) + { + isOnlyPDFDocEncoding = false; + break; + } + } + + if (isOnlyPDFDocEncoding) + { + // PDFDocEncoded string + bytes = PDFDocEncoding.getBytes(text); + } + else + { + // UTF-16BE encoded string with a leading byte order marker + byte[] data = text.getBytes(Charsets.UTF_16BE); + ByteArrayOutputStream out = new ByteArrayOutputStream(data.length + 2); + out.write(0xFE); // BOM + out.write(0xFF); // BOM + try + { + out.write(data); + } + catch (IOException e) + { + // should never happen + throw new RuntimeException(e); + } + bytes = out.toByteArray(); + } + } + + /** + * Sets the raw value of this string. + * + * @param value The raw bytes of the PDF text string or byte string. + */ + public void setValue(byte[] value) + { + bytes = value.clone(); + } + + /** + * Sets whether or not to force the string is to be written in hex form. + * This is needed when signing PDF files. + * + * @param value True to force hex. + */ + public void setForceHexForm(boolean value) + { + this.forceHexForm = value; + } + + /** + * Returns true if the string is to be written in hex form. + */ + public boolean getForceHexForm() + { + return forceHexForm; + } + + /** + * Returns the content of this string as a PDF text string. + */ + public String getString() + { + // text string - BOM indicates Unicode + if (bytes.length >= 2) + { + if ((bytes[0] & 0xff) == 0xFE && (bytes[1] & 0xff) == 0xFF) + { + // UTF-16BE + return new String(bytes, 2, bytes.length - 2, Charsets.UTF_16BE); + } + else if ((bytes[0] & 0xff) == 0xFF && (bytes[1] & 0xff) == 0xFE) + { + // UTF-16LE - not in the PDF spec! + return new String(bytes, 2, bytes.length - 2, Charsets.UTF_16LE); + } + } + + // otherwise use PDFDocEncoding + return PDFDocEncoding.toString(bytes); + } + + /** + * Returns the content of this string as a PDF ASCII string. + */ + public String getASCII() + { + // ASCII string + return new String(bytes, Charsets.US_ASCII); + } + + /** + * Returns the raw bytes of the string. Best used with a PDF byte string. + */ + public byte[] getBytes() + { + return bytes; + } + + /** + * This will take this string and create a hex representation of the bytes that make the string. + * + * @return A hex string representing the bytes in this string. + */ + public String toHexString() + { + return Hex.getString(bytes); + } + + /** + * Visitor pattern double dispatch method. + * + * @param visitor The object to notify when visiting this object. + * @return any object, depending on the visitor implementation, or null + * @throws IOException If an error occurs while visiting this object. + */ + @Override + public Object accept(ICOSVisitor visitor) throws IOException + { + return visitor.visitFromString(this); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof COSString) + { + COSString strObj = (COSString) obj; + return getString().equals(strObj.getString()) && + forceHexForm == strObj.forceHexForm; + } + return false; + } + + @Override + public int hashCode() + { + int result = Arrays.hashCode(bytes); + return result + (forceHexForm ? 17 : 0); + } + + @Override + public String toString() + { + return "COSString{" + getString() + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSUpdateInfo.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSUpdateInfo.java new file mode 100644 index 00000000000..1bd54d445ec --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSUpdateInfo.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +public interface COSUpdateInfo +{ + /** + * Get the update state for the COSWriter. This indicates whether an object is to be written + * when there is an incremental save. + * + * @return the update state. + */ + boolean isNeedToBeUpdated(); + + /** + * Set the update state of the dictionary for the COSWriter. This indicates whether an object is + * to be written when there is an incremental save. + * + * @param flag the update state. + */ + void setNeedToBeUpdated(boolean flag); + +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSVisitor.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSVisitor.java new file mode 100644 index 00000000000..cb31393e441 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSVisitor.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.IOException; + +/** + * An interface for visiting a PDF document at the type (COS) level. + * + * @author Michael Traut + */ +public interface ICOSVisitor +{ + /** + * Notification of visit to Array object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromArray( COSArray obj ) throws IOException; + + /** + * Notification of visit to boolean object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromBoolean( COSBoolean obj ) throws IOException; + + /** + * Notification of visit to dictionary object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromDictionary( COSDictionary obj ) throws IOException; + + /** + * Notification of visit to document object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromDocument( COSDocument obj ) throws IOException; + + /** + * Notification of visit to float object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromFloat( COSFloat obj ) throws IOException; + + /** + * Notification of visit to integer object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromInt( COSInteger obj ) throws IOException; + + /** + * Notification of visit to name object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromName( COSName obj ) throws IOException; + + /** + * Notification of visit to null object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromNull( COSNull obj ) throws IOException; + + /** + * Notification of visit to stream object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromStream( COSStream obj ) throws IOException; + + /** + * Notification of visit to string object. + * + * @param obj The Object that is being visited. + * @return any Object depending on the visitor implementation, or null + * @throws IOException If there is an error while visiting this object. + */ + Object visitFromString( COSString obj ) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/PDFDocEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/PDFDocEncoding.java new file mode 100644 index 00000000000..ad3d7114ec6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/PDFDocEncoding.java @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * The "PDFDocEncoding" encoding. Note that this is *not* a Type 1 font encoding, it is used only + * within PDF "text strings". + */ +final class PDFDocEncoding +{ + private static final char REPLACEMENT_CHARACTER = '\uFFFD'; + + private static final int[] CODE_TO_UNI; + private static final Map UNI_TO_CODE; + + static + { + CODE_TO_UNI = new int[256]; + UNI_TO_CODE = new HashMap<>(256); + + // initialize with basically ISO-8859-1 + for (int i = 0; i < 256; i++) + { + // skip entries not in Unicode column + if (i > 0x17 && i < 0x20) + { + continue; + } + if (i > 0x7E && i < 0xA1) + { + continue; + } + if (i == 0xAD) + { + continue; + } + + set(i, (char)i); + } + + // then do all deviations (based on the table in ISO 32000-1:2008) + // block 1 + set(0x18, '\u02D8'); // BREVE + set(0x19, '\u02C7'); // CARON + set(0x1A, '\u02C6'); // MODIFIER LETTER CIRCUMFLEX ACCENT + set(0x1B, '\u02D9'); // DOT ABOVE + set(0x1C, '\u02DD'); // DOUBLE ACUTE ACCENT + set(0x1D, '\u02DB'); // OGONEK + set(0x1E, '\u02DA'); // RING ABOVE + set(0x1F, '\u02DC'); // SMALL TILDE + // block 2 + set(0x7F, REPLACEMENT_CHARACTER); // undefined + set(0x80, '\u2022'); // BULLET + set(0x81, '\u2020'); // DAGGER + set(0x82, '\u2021'); // DOUBLE DAGGER + set(0x83, '\u2026'); // HORIZONTAL ELLIPSIS + set(0x84, '\u2014'); // EM DASH + set(0x85, '\u2013'); // EN DASH + set(0x86, '\u0192'); // LATIN SMALL LETTER SCRIPT F + set(0x87, '\u2044'); // FRACTION SLASH (solidus) + set(0x88, '\u2039'); // SINGLE LEFT-POINTING ANGLE QUOTATION MARK + set(0x89, '\u203A'); // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + set(0x8A, '\u2212'); // MINUS SIGN + set(0x8B, '\u2030'); // PER MILLE SIGN + set(0x8C, '\u201E'); // DOUBLE LOW-9 QUOTATION MARK (quotedblbase) + set(0x8D, '\u201C'); // LEFT DOUBLE QUOTATION MARK (quotedblleft) + set(0x8E, '\u201D'); // RIGHT DOUBLE QUOTATION MARK (quotedblright) + set(0x8F, '\u2018'); // LEFT SINGLE QUOTATION MARK (quoteleft) + set(0x90, '\u2019'); // RIGHT SINGLE QUOTATION MARK (quoteright) + set(0x91, '\u201A'); // SINGLE LOW-9 QUOTATION MARK (quotesinglbase) + set(0x92, '\u2122'); // TRADE MARK SIGN + set(0x93, '\uFB01'); // LATIN SMALL LIGATURE FI + set(0x94, '\uFB02'); // LATIN SMALL LIGATURE FL + set(0x95, '\u0141'); // LATIN CAPITAL LETTER L WITH STROKE + set(0x96, '\u0152'); // LATIN CAPITAL LIGATURE OE + set(0x97, '\u0160'); // LATIN CAPITAL LETTER S WITH CARON + set(0x98, '\u0178'); // LATIN CAPITAL LETTER Y WITH DIAERESIS + set(0x99, '\u017D'); // LATIN CAPITAL LETTER Z WITH CARON + set(0x9A, '\u0131'); // LATIN SMALL LETTER DOTLESS I + set(0x9B, '\u0142'); // LATIN SMALL LETTER L WITH STROKE + set(0x9C, '\u0153'); // LATIN SMALL LIGATURE OE + set(0x9D, '\u0161'); // LATIN SMALL LETTER S WITH CARON + set(0x9E, '\u017E'); // LATIN SMALL LETTER Z WITH CARON + set(0x9F, REPLACEMENT_CHARACTER); // undefined + set(0xA0, '\u20AC'); // EURO SIGN + // end of deviations + } + + private PDFDocEncoding() + { + } + + private static void set(int code, char unicode) + { + CODE_TO_UNI[code] = unicode; + UNI_TO_CODE.put(unicode, code); + } + + /** + * Returns the string representation of the given PDFDocEncoded bytes. + */ + public static String toString(byte[] bytes) + { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) + { + if ((b & 0xff) >= CODE_TO_UNI.length) + { + sb.append('?'); + } + else + { + sb.append((char)CODE_TO_UNI[b & 0xff]); + } + } + return sb.toString(); + } + + /** + * Returns the given string encoded with PDFDocEncoding. + */ + public static byte[] getBytes(String text) + { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + for (char c : text.toCharArray()) + { + Integer code = UNI_TO_CODE.get(c); + if (code == null) + { + out.write(0); + } + else + { + out.write(code); + } + } + return out.toByteArray(); + } + + /** + * Returns true if the given character is available in PDFDocEncoding. + * + * @param character UTF-16 character + */ + public static boolean containsChar(char character) + { + return UNI_TO_CODE.containsKey(character); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java new file mode 100644 index 00000000000..a31b3e220aa --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/UnmodifiableCOSDictionary.java @@ -0,0 +1,281 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.util.Calendar; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * An unmodifiable COSDictionary. + * + * @author John Hewson + */ +final class UnmodifiableCOSDictionary extends COSDictionary +{ + /** + * {@inheritDoc} + */ + UnmodifiableCOSDictionary(COSDictionary dict) + { + super(); + items = dict.items; + } + + /** + * {@inheritDoc} + */ + @Override + public void clear() + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setItem(COSName key, COSBase value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setItem(COSName key, COSObjectable value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setItem(String key, COSObjectable value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setBoolean(String key, boolean value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setBoolean(COSName key, boolean value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setItem(String key, COSBase value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setName(String key, String value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setName(COSName key, String value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setDate(String key, Calendar date) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setDate(COSName key, Calendar date) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setEmbeddedDate(String embedded, String key, Calendar date) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setEmbeddedDate(String embedded, COSName key, Calendar date) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setString(String key, String value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setString(COSName key, String value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setEmbeddedString(String embedded, String key, String value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setEmbeddedString(String embedded, COSName key, String value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setInt(String key, int value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setInt(COSName key, int value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setLong(String key, long value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setLong(COSName key, long value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setEmbeddedInt(String embeddedDictionary, String key, int value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setEmbeddedInt(String embeddedDictionary, COSName key, int value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setFloat(String key, float value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void setFloat(COSName key, float value) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeItem(COSName key) + { + throw new UnsupportedOperationException(); + } + + /** + * {@inheritDoc} + */ + @Override + public void addAll(COSDictionary dic) + { + throw new UnsupportedOperationException(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/package.html b/pdfbox/src/main/java/org/apache/pdfbox/cos/package.html new file mode 100644 index 00000000000..67e41187c68 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/package.html @@ -0,0 +1,28 @@ + + + + + + + +These are the low level objects that make up a PDF document. +

+ +See the PDF Reference 1.4. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85Filter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85Filter.java new file mode 100644 index 00000000000..25d7c8ed044 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85Filter.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.io.IOUtils; + +/** + * Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data. + * @author Ben Litchfield + */ +final class ASCII85Filter extends Filter +{ + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + try (ASCII85InputStream is = new ASCII85InputStream(encoded)) + { + IOUtils.copy(is, decoded); + } + decoded.flush(); + return new DecodeResult(parameters); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + try (ASCII85OutputStream os = new ASCII85OutputStream(encoded)) + { + IOUtils.copy(input, os); + } + encoded.flush(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85InputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85InputStream.java new file mode 100644 index 00000000000..73e55d37299 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85InputStream.java @@ -0,0 +1,274 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * This class represents an ASCII85 stream. + * + * @author Ben Litchfield + * + */ +final class ASCII85InputStream extends FilterInputStream +{ + private int index; + private int n; + private boolean eof; + + private byte[] ascii; + private byte[] b; + + private static final char TERMINATOR = '~'; + private static final char OFFSET = '!'; + private static final char NEWLINE = '\n'; + private static final char RETURN = '\r'; + private static final char SPACE = ' '; + private static final char PADDING_U = 'u'; + private static final char Z = 'z'; + + /** + * Constructor. + * + * @param is The input stream to actually read from. + */ + ASCII85InputStream(InputStream is) + { + super(is); + index = 0; + n = 0; + eof = false; + ascii = new byte[5]; + b = new byte[4]; + } + + /** + * This will read the next byte from the stream. + * + * @return The next byte read from the stream. + * + * @throws IOException If there is an error reading from the wrapped stream. + */ + @Override + public int read() throws IOException + { + if (index >= n) + { + if (eof) + { + return -1; + } + index = 0; + int k; + byte z; + do + { + int zz = (byte) in.read(); + if (zz == -1) + { + eof = true; + return -1; + } + z = (byte) zz; + } while (z == NEWLINE || z == RETURN || z == SPACE); + + if (z == TERMINATOR) + { + eof = true; + ascii = b = null; + n = 0; + return -1; + } + else if (z == Z) + { + b[0] = b[1] = b[2] = b[3] = 0; + n = 4; + } + else + { + ascii[0] = z; // may be EOF here.... + for (k = 1; k < 5; ++k) + { + do + { + int zz = (byte) in.read(); + if (zz == -1) + { + eof = true; + return -1; + } + z = (byte) zz; + } while (z == NEWLINE || z == RETURN || z == SPACE); + ascii[k] = z; + if (z == TERMINATOR) + { + // don't include ~ as padding byte + ascii[k] = (byte) PADDING_U; + break; + } + } + n = k - 1; + if (n == 0) + { + eof = true; + ascii = null; + b = null; + return -1; + } + if (k < 5) + { + for (++k; k < 5; ++k) + { + // use 'u' for padding + ascii[k] = (byte) PADDING_U; + } + eof = true; + } + // decode stream + long t = 0; + for (k = 0; k < 5; ++k) + { + z = (byte) (ascii[k] - OFFSET); + if (z < 0 || z > 93) + { + n = 0; + eof = true; + ascii = null; + b = null; + throw new IOException("Invalid data in Ascii85 stream"); + } + t = (t * 85L) + z; + } + for (k = 3; k >= 0; --k) + { + b[k] = (byte) (t & 0xFFL); + t >>>= 8; + } + } + } + return b[index++] & 0xFF; + } + + /** + * This will read a chunk of data. + * + * @param data The buffer to write data to. + * @param offset The offset into the data stream. + * @param len The number of byte to attempt to read. + * + * @return The number of bytes actually read. + * + * @throws IOException If there is an error reading data from the underlying stream. + */ + @Override + public int read(byte[] data, int offset, int len) throws IOException + { + if (eof && index >= n) + { + return -1; + } + for (int i = 0; i < len; i++) + { + if (index < n) + { + data[i + offset] = b[index++]; + } + else + { + int t = read(); + if (t == -1) + { + return i; + } + data[i + offset] = (byte) t; + } + } + return len; + } + + /** + * This will close the underlying stream and release any resources. + * + * @throws IOException If there is an error closing the underlying stream. + */ + @Override + public void close() throws IOException + { + ascii = null; + eof = true; + b = null; + super.close(); + } + + /** + * non supported interface methods. + * + * @return False always. + */ + @Override + public boolean markSupported() + { + return false; + } + + /** + * Unsupported. + * + * @param nValue ignored. + * + * @return Always zero. + */ + @Override + public long skip(long nValue) + { + return 0; + } + + /** + * Unsupported. + * + * @return Always zero. + */ + @Override + public int available() + { + return 0; + } + + /** + * Unsupported. + * + * @param readlimit ignored. + */ + @Override + public void mark(int readlimit) + { + } + + /** + * Unsupported. + * + * @throws IOException telling that this is an unsupported action. + */ + @Override + public void reset() throws IOException + { + throw new IOException("Reset is not supported"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85OutputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85OutputStream.java new file mode 100644 index 00000000000..f645ba954ad --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCII85OutputStream.java @@ -0,0 +1,246 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +/** + * This class represents an ASCII85 output stream. + * + * @author Ben Litchfield + * + */ +final class ASCII85OutputStream extends FilterOutputStream +{ + + private int lineBreak; + private int count; + + private byte[] indata; + private byte[] outdata; + + /** + * Function produces five ASCII printing characters from + * four bytes of binary data. + */ + private int maxline; + private boolean flushed; + private char terminator; + private static final char OFFSET = '!'; + private static final char NEWLINE = '\n'; + private static final char Z = 'z'; + + /** + * Constructor. + * + * @param out The output stream to write to. + */ + ASCII85OutputStream(OutputStream out) + { + super(out); + lineBreak = 36 * 2; + maxline = 36 * 2; + count = 0; + indata = new byte[4]; + outdata = new byte[5]; + flushed = true; + terminator = '~'; + } + + /** + * This will set the terminating character. + * + * @param term The terminating character. + */ + public void setTerminator(char term) + { + if (term < 118 || term > 126 || term == Z) + { + throw new IllegalArgumentException("Terminator must be 118-126 excluding z"); + } + terminator = term; + } + + /** + * This will get the terminating character. + * + * @return The terminating character. + */ + public char getTerminator() + { + return terminator; + } + + /** + * This will set the line length that will be used. + * + * @param l The length of the line to use. + */ + public void setLineLength(int l) + { + if (lineBreak > l) + { + lineBreak = l; + } + maxline = l; + } + + /** + * This will get the length of the line. + * + * @return The line length attribute. + */ + public int getLineLength() + { + return maxline; + } + + /** + * This will transform the next four ascii bytes. + */ + private void transformASCII85() + { + long word = ((((indata[0] << 8) | (indata[1] & 0xFF)) << 16) | ((indata[2] & 0xFF) << 8) | (indata[3] & 0xFF)) & 0xFFFFFFFFL; + + if (word == 0) + { + outdata[0] = (byte) Z; + outdata[1] = 0; + return; + } + long x; + x = word / (85L * 85L * 85L * 85L); + outdata[0] = (byte) (x + OFFSET); + word -= x * 85L * 85L * 85L * 85L; + + x = word / (85L * 85L * 85L); + outdata[1] = (byte) (x + OFFSET); + word -= x * 85L * 85L * 85L; + + x = word / (85L * 85L); + outdata[2] = (byte) (x + OFFSET); + word -= x * 85L * 85L; + + x = word / 85L; + outdata[3] = (byte) (x + OFFSET); + + outdata[4] = (byte) ((word % 85L) + OFFSET); + } + + /** + * This will write a single byte. + * + * @param b The byte to write. + * + * @throws IOException If there is an error writing to the stream. + */ + @Override + public void write(int b) throws IOException + { + flushed = false; + indata[count++] = (byte) b; + if (count < 4) + { + return; + } + transformASCII85(); + for (int i = 0; i < 5; i++) + { + if (outdata[i] == 0) + { + break; + } + out.write(outdata[i]); + if (--lineBreak == 0) + { + out.write(NEWLINE); + lineBreak = maxline; + } + } + count = 0; + } + + /** + * This will flush the data to the stream. + * + * @throws IOException If there is an error writing the data to the stream. + */ + @Override + public void flush() throws IOException + { + if (flushed) + { + return; + } + if (count > 0) + { + for (int i = count; i < 4; i++) + { + indata[i] = 0; + } + transformASCII85(); + if (outdata[0] == Z) + { + for (int i = 0; i < 5; i++) // expand 'z', + { + outdata[i] = (byte) OFFSET; + } + } + for (int i = 0; i < count + 1; i++) + { + out.write(outdata[i]); + if (--lineBreak == 0) + { + out.write(NEWLINE); + lineBreak = maxline; + } + } + } + if (--lineBreak == 0) + { + out.write(NEWLINE); + } + out.write(terminator); + out.write('>'); + out.write(NEWLINE); + count = 0; + lineBreak = maxline; + flushed = true; + super.flush(); + } + + /** + * This will close the stream. + * + * @throws IOException If there is an error closing the wrapped stream. + */ + @Override + public void close() throws IOException + { + try + { + flush(); + super.close(); + } + finally + { + indata = outdata = null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCIIHexFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCIIHexFilter.java new file mode 100644 index 00000000000..6faedb3556a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/ASCIIHexFilter.java @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.util.Hex; + +/** + * Decodes data encoded in an ASCII hexadecimal form, reproducing the original binary data. + * + * @author Ben Litchfield + */ +final class ASCIIHexFilter extends Filter +{ + private static final Log LOG = LogFactory.getLog(ASCIIHexFilter.class); + + private static final int[] REVERSE_HEX = { + /* 0 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 10 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 20 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 30 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 40 */ -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, + /* 50 */ 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, + /* 60 */ -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, + /* 70 */ 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 80 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 90 */ -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, + /* 100 */ 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, + /* 110 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 120 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 130 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 140 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 150 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 160 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 170 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 180 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 190 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 200 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 210 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 220 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 230 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 240 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* 250 */ -1, -1, -1, -1, -1, -1 + }; + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + int value, firstByte, secondByte; + while ((firstByte = encoded.read()) != -1) + { + // always after first char + while (isWhitespace(firstByte)) + { + firstByte = encoded.read(); + } + if (firstByte == -1 || isEOD(firstByte)) + { + break; + } + + if (REVERSE_HEX[firstByte] == -1) + { + LOG.error("Invalid hex, int: " + firstByte + " char: " + (char)firstByte); + } + value = REVERSE_HEX[firstByte] * 16; + secondByte = encoded.read(); + + if (secondByte == -1 || isEOD(secondByte)) + { + // second value behaves like 0 in case of EOD + decoded.write(value); + break; + } + if (secondByte >= 0) + { + if (REVERSE_HEX[secondByte] == -1) + { + LOG.error("Invalid hex, int: " + secondByte + " char: " + (char)secondByte); + } + value += REVERSE_HEX[secondByte]; + } + decoded.write(value); + } + decoded.flush(); + return new DecodeResult(parameters); + } + + // whitespace + // 0 0x00 Null (NUL) + // 9 0x09 Tab (HT) + // 10 0x0A Line feed (LF) + // 12 0x0C Form feed (FF) + // 13 0x0D Carriage return (CR) + // 32 0x20 Space (SP) + private boolean isWhitespace(int c) + { + return c == 0 || c == 9 || c == 10 || c == 12 || c == 13 || c == 32; + } + + private boolean isEOD(int c) + { + return c == '>'; + } + + @Override + public void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + int byteRead; + while ((byteRead = input.read()) != -1) + { + Hex.writeHexByte((byte)byteRead, encoded); + } + encoded.flush(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecoderStream.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecoderStream.java new file mode 100644 index 00000000000..9e6e9462651 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecoderStream.java @@ -0,0 +1,809 @@ +/* + * Copyright (c) 2012, Harald Kuhr + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name "TwelveMonkeys" nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.apache.pdfbox.filter; + + +import java.io.EOFException; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; + +/** + * CCITT Modified Huffman RLE, Group 3 (T4) and Group 4 (T6) fax compression. + * + * @author Harald Kuhr + * @author Oliver Schmidtmer + * @author last modified by $Author: haraldk$ + * @version $Id: CCITTFaxDecoderStream.java,v 1.0 23.05.12 15:55 haraldk Exp$ + * + * Taken from commit fa0341f30237effe523e9905e672d709ffe9c6bd of 7.5.2016 from twelvemonkeys/imageio/plugins/tiff/CCITTFaxDecoderStream.java + * + * Initial changes for PDFBox, discussed in PDFBOX-3338: + * - added optionByteAligned to constructor and to each decodeRowType() method + * - removed Validate() usages + * - catch VALUE_EOL in decode1D() + */ +final class CCITTFaxDecoderStream extends FilterInputStream { + // See TIFF 6.0 Specification, Section 10: "Modified Huffman Compression", page 43. + + private final int columns; + private final byte[] decodedRow; + + private int decodedLength; + private int decodedPos; + + // Need to take fill order into account (?) (use flip table?) + private final int fillOrder; + private final int type; + + private int[] changesReferenceRow; + private int[] changesCurrentRow; + private int changesReferenceRowCount; + private int changesCurrentRowCount; + private int lastChangingElement = 0; + + private boolean optionG32D = false; + + @SuppressWarnings("unused") // Leading zeros for aligning EOL + private boolean optionG3Fill = false; + + private boolean optionUncompressed = false; + private boolean optionByteAligned = false; + + CCITTFaxDecoderStream(final InputStream stream, final int columns, final int type, final int fillOrder, + final long options) { + super(stream); + + this.columns = columns; + // We know this is only used for b/w (1 bit) + this.decodedRow = new byte[(columns + 7) / 8]; + this.type = type; + + this.fillOrder = fillOrder; + + this.changesReferenceRow = new int[columns + 2]; + this.changesCurrentRow = new int[columns + 2]; + + switch (type) { + case TIFFExtension.COMPRESSION_CCITT_MODIFIED_HUFFMAN_RLE: + optionByteAligned = (options & TIFFExtension.GROUP3OPT_BYTEALIGNED) != 0; + break; + case TIFFExtension.COMPRESSION_CCITT_T4: + optionG32D = (options & TIFFExtension.GROUP3OPT_2DENCODING) != 0; + optionG3Fill = (options & TIFFExtension.GROUP3OPT_FILLBITS) != 0; + optionUncompressed = (options & TIFFExtension.GROUP3OPT_UNCOMPRESSED) != 0; + optionByteAligned = (options & TIFFExtension.GROUP3OPT_BYTEALIGNED) != 0; + break; + case TIFFExtension.COMPRESSION_CCITT_T6: + optionUncompressed = (options & TIFFExtension.GROUP4OPT_UNCOMPRESSED) != 0; + optionByteAligned = (options & TIFFExtension.GROUP4OPT_BYTEALIGNED) != 0; + break; + } + + } + + private void fetch() throws IOException { + if (decodedPos >= decodedLength) { + decodedLength = 0; + + try { + decodeRow(); + } + catch (EOFException e) { + // TODO: Rewrite to avoid throw/catch for normal flow... + if (decodedLength != 0) { + throw e; + } + + // ..otherwise, just client code trying to read past the end of + // stream + decodedLength = -1; + } + + decodedPos = 0; + } + } + + private void decode1D() throws IOException { + int index = 0; + boolean white = true; + changesCurrentRowCount = 0; + + do { + int completeRun; + + if (white) { + completeRun = decodeRun(whiteRunTree); + } + else { + completeRun = decodeRun(blackRunTree); + } + + if (completeRun == VALUE_EOL) + { + continue; + } + + index += completeRun; + changesCurrentRow[changesCurrentRowCount++] = index; + + // Flip color for next run + white = !white; + } while (index < columns); + } + + private void decode2D() throws IOException { + changesReferenceRowCount = changesCurrentRowCount; + int[] tmp = changesCurrentRow; + changesCurrentRow = changesReferenceRow; + changesReferenceRow = tmp; + + boolean white = true; + int index = 0; + changesCurrentRowCount = 0; + + mode: while (index < columns) { + // read mode + Node n = codeTree.root; + + while (true) { + n = n.walk(readBit()); + + if (n == null) { + continue mode; + } + else if (n.isLeaf) { + switch (n.value) { + case VALUE_HMODE: + int runLength; + runLength = decodeRun(white ? whiteRunTree : blackRunTree); + index += runLength; + changesCurrentRow[changesCurrentRowCount++] = index; + + runLength = decodeRun(white ? blackRunTree : whiteRunTree); + index += runLength; + changesCurrentRow[changesCurrentRowCount++] = index; + break; + + case VALUE_PASSMODE: + int pChangingElement = getNextChangingElement(index, white) + 1; + + if (pChangingElement >= changesReferenceRowCount) { + index = columns; + } + else { + index = changesReferenceRow[pChangingElement]; + } + + break; + + default: + // Vertical mode (-3 to 3) + int vChangingElement = getNextChangingElement(index, white); + + if (vChangingElement >= changesReferenceRowCount || vChangingElement == -1) { + index = columns + n.value; + } + else { + index = changesReferenceRow[vChangingElement] + n.value; + } + + changesCurrentRow[changesCurrentRowCount] = index; + changesCurrentRowCount++; + white = !white; + + break; + } + + continue mode; + } + } + } + } + + private int getNextChangingElement(final int a0, final boolean white) { + int start = (lastChangingElement & 0xFFFFFFFE) + (white ? 0 : 1); + if (start > 2) { + start -= 2; + } + + if (a0 == 0) { + return start; + } + + for (int i = start; i < changesReferenceRowCount; i += 2) { + if (a0 < changesReferenceRow[i]) { + lastChangingElement = i; + return i; + } + } + + return -1; + } + + private void decodeRowType2() throws IOException { + if (optionByteAligned) + { + resetBuffer(); + } + decode1D(); + } + + private void decodeRowType4() throws IOException { + if(optionByteAligned) { + resetBuffer(); + } + eof: while (true) { + // read till next EOL code + Node n = eolOnlyTree.root; + + while (true) { + n = n.walk(readBit()); + + if (n == null) { + continue eof; + } + + if (n.isLeaf) { + break eof; + } + } + } + + if (!optionG32D || readBit()) { + decode1D(); + } + else { + decode2D(); + } + } + + private void decodeRowType6() throws IOException { + if(optionByteAligned) { + resetBuffer(); + } + decode2D(); + } + + private void decodeRow() throws IOException { + switch (type) { + case TIFFExtension.COMPRESSION_CCITT_MODIFIED_HUFFMAN_RLE: + decodeRowType2(); + break; + case TIFFExtension.COMPRESSION_CCITT_T4: + decodeRowType4(); + break; + case TIFFExtension.COMPRESSION_CCITT_T6: + decodeRowType6(); + break; + } + + int index = 0; + boolean white = true; + + lastChangingElement = 0; + for (int i = 0; i <= changesCurrentRowCount; i++) { + int nextChange = columns; + + if (i != changesCurrentRowCount) { + nextChange = changesCurrentRow[i]; + } + + if (nextChange > columns) { + nextChange = columns; + } + + int byteIndex = index / 8; + + while (index % 8 != 0 && (nextChange - index) > 0) { + decodedRow[byteIndex] |= (white ? 0 : 1 << (7 - ((index) % 8))); + index++; + } + + if (index % 8 == 0) { + byteIndex = index / 8; + final byte value = (byte) (white ? 0x00 : 0xff); + + while ((nextChange - index) > 7) { + decodedRow[byteIndex] = value; + index += 8; + ++byteIndex; + } + } + + while ((nextChange - index) > 0) { + if (index % 8 == 0) { + decodedRow[byteIndex] = 0; + } + + decodedRow[byteIndex] |= (white ? 0 : 1 << (7 - ((index) % 8))); + index++; + } + + white = !white; + } + + if (index != columns) { + throw new IOException("Sum of run-lengths does not equal scan line width: " + index + " > " + columns); + } + + decodedLength = (index + 7) / 8; + } + + private int decodeRun(final Tree tree) throws IOException { + int total = 0; + + Node n = tree.root; + + while (true) { + boolean bit = readBit(); + n = n.walk(bit); + + if (n == null) { + throw new IOException("Unknown code in Huffman RLE stream"); + } + + if (n.isLeaf) { + total += n.value; + if (n.value < 64) { + return total; + } + else { + n = tree.root; + } + } + } + } + + private void resetBuffer() throws IOException { + bufferPos = -1; + } + + int buffer = -1; + int bufferPos = -1; + + private boolean readBit() throws IOException { + if (bufferPos < 0 || bufferPos > 7) { + buffer = in.read(); + + if (buffer == -1) { + throw new EOFException("Unexpected end of Huffman RLE stream"); + } + + bufferPos = 0; + } + + boolean isSet; + + if (fillOrder == TIFFExtension.FILL_LEFT_TO_RIGHT) { + isSet = ((buffer >> (7 - bufferPos)) & 1) == 1; + } + else { + isSet = ((buffer >> (bufferPos)) & 1) == 1; + } + + bufferPos++; + + if (bufferPos > 7) { + bufferPos = -1; + } + + return isSet; + } + + @Override + public int read() throws IOException { + if (decodedLength < 0) { + return 0x0; + } + + if (decodedPos >= decodedLength) { + fetch(); + + if (decodedLength < 0) { + return 0x0; + } + } + + return decodedRow[decodedPos++] & 0xff; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + if (decodedLength < 0) { + //TODO better? Math.min(off + len, b.length) + Arrays.fill(b, off, off + len, (byte) 0x0); + return len; + } + + if (decodedPos >= decodedLength) { + fetch(); + + if (decodedLength < 0) { + Arrays.fill(b, off, off + len, (byte) 0x0); + return len; + } + } + + int read = Math.min(decodedLength - decodedPos, len); + System.arraycopy(decodedRow, decodedPos, b, off, read); + decodedPos += read; + + return read; + } + + @Override + public long skip(long n) throws IOException { + if (decodedLength < 0) { + return -1; + } + + if (decodedPos >= decodedLength) { + fetch(); + + if (decodedLength < 0) { + return -1; + } + } + + int skipped = (int) Math.min(decodedLength - decodedPos, n); + decodedPos += skipped; + + return skipped; + } + + @Override + public boolean markSupported() { + return false; + } + + @Override + public synchronized void reset() throws IOException { + throw new IOException("mark/reset not supported"); + } + + private static final class Node { + Node left; + Node right; + + int value; // > 63 non term. + + boolean canBeFill = false; + boolean isLeaf = false; + + void set(final boolean next, final Node node) { + if (!next) { + left = node; + } + else { + right = node; + } + } + + Node walk(final boolean next) { + return next ? right : left; + } + + @Override + public String toString() { + return "[leaf=" + isLeaf + ", value=" + value + ", canBeFill=" + canBeFill + "]"; + } + } + + private static final class Tree { + final Node root = new Node(); + + void fill(final int depth, final int path, final int value) throws IOException { + Node current = root; + + for (int i = 0; i < depth; i++) { + int bitPos = depth - 1 - i; + boolean isSet = ((path >> bitPos) & 1) == 1; + Node next = current.walk(isSet); + + if (next == null) { + next = new Node(); + + if (i == depth - 1) { + next.value = value; + next.isLeaf = true; + } + + if (path == 0) { + next.canBeFill = true; + } + + current.set(isSet, next); + } + else { + if (next.isLeaf) { + throw new IOException("node is leaf, no other following"); + } + } + + current = next; + } + } + + void fill(final int depth, final int path, final Node node) throws IOException { + Node current = root; + + for (int i = 0; i < depth; i++) { + int bitPos = depth - 1 - i; + boolean isSet = ((path >> bitPos) & 1) == 1; + Node next = current.walk(isSet); + + if (next == null) { + if (i == depth - 1) { + next = node; + } + else { + next = new Node(); + } + + if (path == 0) { + next.canBeFill = true; + } + + current.set(isSet, next); + } + else { + if (next.isLeaf) { + throw new IOException("node is leaf, no other following"); + } + } + + current = next; + } + } + } + + static final short[][] BLACK_CODES = { + { // 2 bits + 0x2, 0x3, + }, + { // 3 bits + 0x2, 0x3, + }, + { // 4 bits + 0x2, 0x3, + }, + { // 5 bits + 0x3, + }, + { // 6 bits + 0x4, 0x5, + }, + { // 7 bits + 0x4, 0x5, 0x7, + }, + { // 8 bits + 0x4, 0x7, + }, + { // 9 bits + 0x18, + }, + { // 10 bits + 0x17, 0x18, 0x37, 0x8, 0xf, + }, + { // 11 bits + 0x17, 0x18, 0x28, 0x37, 0x67, 0x68, 0x6c, 0x8, 0xc, 0xd, + }, + { // 12 bits + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1c, 0x1d, 0x1e, 0x1f, 0x24, 0x27, 0x28, 0x2b, 0x2c, 0x33, + 0x34, 0x35, 0x37, 0x38, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xd2, 0xd3, + 0xd4, 0xd5, 0xd6, 0xd7, 0xda, 0xdb, + }, + { // 13 bits + 0x4a, 0x4b, 0x4c, 0x4d, 0x52, 0x53, 0x54, 0x55, 0x5a, 0x5b, 0x64, 0x65, 0x6c, 0x6d, 0x72, 0x73, + 0x74, 0x75, 0x76, 0x77, + } + }; + static final short[][] BLACK_RUN_LENGTHS = { + { // 2 bits + 3, 2, + }, + { // 3 bits + 1, 4, + }, + { // 4 bits + 6, 5, + }, + { // 5 bits + 7, + }, + { // 6 bits + 9, 8, + }, + { // 7 bits + 10, 11, 12, + }, + { // 8 bits + 13, 14, + }, + { // 9 bits + 15, + }, + { // 10 bits + 16, 17, 0, 18, 64, + }, + { // 11 bits + 24, 25, 23, 22, 19, 20, 21, 1792, 1856, 1920, + }, + { // 12 bits + 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560, 52, 55, 56, 59, 60, 320, 384, 448, 53, + 54, 50, 51, 44, 45, 46, 47, 57, 58, 61, 256, 48, 49, 62, 63, 30, 31, 32, 33, 40, 41, 128, 192, 26, + 27, 28, 29, 34, 35, 36, 37, 38, 39, 42, 43, + }, + { // 13 bits + 640, 704, 768, 832, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 512, 576, 896, 960, 1024, 1088, + 1152, 1216, + } + }; + + public static final short[][] WHITE_CODES = { + { // 4 bits + 0x7, 0x8, 0xb, 0xc, 0xe, 0xf, + }, + { // 5 bits + 0x12, 0x13, 0x14, 0x1b, 0x7, 0x8, + }, + { // 6 bits + 0x17, 0x18, 0x2a, 0x2b, 0x3, 0x34, 0x35, 0x7, 0x8, + }, + { // 7 bits + 0x13, 0x17, 0x18, 0x24, 0x27, 0x28, 0x2b, 0x3, 0x37, 0x4, 0x8, 0xc, + }, + { // 8 bits + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1a, 0x1b, 0x2, 0x24, 0x25, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x3, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x4, 0x4a, 0x4b, 0x5, 0x52, 0x53, 0x54, 0x55, 0x58, 0x59, + 0x5a, 0x5b, 0x64, 0x65, 0x67, 0x68, 0xa, 0xb, + }, + { // 9 bits + 0x98, 0x99, 0x9a, 0x9b, 0xcc, 0xcd, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, + }, + { // 10 bits + }, + { // 11 bits + 0x8, 0xc, 0xd, + }, + { // 12 bits + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1c, 0x1d, 0x1e, 0x1f, + } + }; + + public static final short[][] WHITE_RUN_LENGTHS = { + { // 4 bits + 2, 3, 4, 5, 6, 7, + }, + { // 5 bits + 128, 8, 9, 64, 10, 11, + }, + { // 6 bits + 192, 1664, 16, 17, 13, 14, 15, 1, 12, + }, + { // 7 bits + 26, 21, 28, 27, 18, 24, 25, 22, 256, 23, 20, 19, + }, + { // 8 bits + 33, 34, 35, 36, 37, 38, 31, 32, 29, 53, 54, 39, 40, 41, 42, 43, 44, 30, 61, 62, 63, 0, 320, 384, 45, + 59, 60, 46, 49, 50, 51, 52, 55, 56, 57, 58, 448, 512, 640, 576, 47, 48, + }, + { // 9 bits + 1472, 1536, 1600, 1728, 704, 768, 832, 896, 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, + }, + { // 10 bits + }, + { // 11 bits + 1792, 1856, 1920, + }, + { // 12 bits + 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560, + } + }; + + final static Node EOL; + final static Node FILL; + final static Tree blackRunTree; + final static Tree whiteRunTree; + final static Tree eolOnlyTree; + final static Tree codeTree; + + final static int VALUE_EOL = -2000; + final static int VALUE_FILL = -1000; + final static int VALUE_PASSMODE = -3000; + final static int VALUE_HMODE = -4000; + + static { + EOL = new Node(); + EOL.isLeaf = true; + EOL.value = VALUE_EOL; + FILL = new Node(); + FILL.value = VALUE_FILL; + FILL.left = FILL; + FILL.right = EOL; + + eolOnlyTree = new Tree(); + try { + eolOnlyTree.fill(12, 0, FILL); + eolOnlyTree.fill(12, 1, EOL); + } + catch (IOException e) { + throw new AssertionError(e); + } + + blackRunTree = new Tree(); + try { + for (int i = 0; i < BLACK_CODES.length; i++) { + for (int j = 0; j < BLACK_CODES[i].length; j++) { + blackRunTree.fill(i + 2, BLACK_CODES[i][j], BLACK_RUN_LENGTHS[i][j]); + } + } + blackRunTree.fill(12, 0, FILL); + blackRunTree.fill(12, 1, EOL); + } + catch (IOException e) { + throw new AssertionError(e); + } + + whiteRunTree = new Tree(); + try { + for (int i = 0; i < WHITE_CODES.length; i++) { + for (int j = 0; j < WHITE_CODES[i].length; j++) { + whiteRunTree.fill(i + 4, WHITE_CODES[i][j], WHITE_RUN_LENGTHS[i][j]); + } + } + + whiteRunTree.fill(12, 0, FILL); + whiteRunTree.fill(12, 1, EOL); + } + catch (IOException e) { + throw new AssertionError(e); + } + + codeTree = new Tree(); + try { + codeTree.fill(4, 1, VALUE_PASSMODE); // pass mode + codeTree.fill(3, 1, VALUE_HMODE); // H mode + codeTree.fill(1, 1, 0); // V(0) + codeTree.fill(3, 3, 1); // V_R(1) + codeTree.fill(6, 3, 2); // V_R(2) + codeTree.fill(7, 3, 3); // V_R(3) + codeTree.fill(3, 2, -1); // V_L(1) + codeTree.fill(6, 2, -2); // V_L(2) + codeTree.fill(7, 2, -3); // V_L(3) + } + catch (IOException e) { + throw new AssertionError(e); + } + } +} + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxEncoderStream.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxEncoderStream.java new file mode 100644 index 00000000000..e597cd2c2e3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxEncoderStream.java @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2013, Harald Kuhr + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name "TwelveMonkeys" nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * CCITT Modified Group 4 (T6) fax compression. + * + * @author Oliver Schmidtmer + * + * Taken from commit 047884e3d9e1b30516c79b147ead763303dc9bcb of 21.4.2016 from + * twelvemonkeys/imageio/plugins/tiff/CCITTFaxEncoderStream.java + * + * Initial changes for PDFBox: + * - removed Validate + * - G4 compression only + * - removed options + */ +final class CCITTFaxEncoderStream extends OutputStream { + + private int currentBufferLength = 0; + private final byte[] inputBuffer; + private final int inputBufferLength; + private final int columns; + private final int rows; + + private int[] changesCurrentRow; + private int[] changesReferenceRow; + private int currentRow = 0; + private int changesCurrentRowLength = 0; + private int changesReferenceRowLength = 0; + private byte outputBuffer = 0; + private byte outputBufferBitLength = 0; + private final int fillOrder; + private final OutputStream stream; + + CCITTFaxEncoderStream(final OutputStream stream, final int columns, final int rows, final int fillOrder) { + + this.stream = stream; + this.columns = columns; + this.rows = rows; + this.fillOrder = fillOrder; + + this.changesReferenceRow = new int[columns]; + this.changesCurrentRow = new int[columns]; + + inputBufferLength = (columns + 7) / 8; + inputBuffer = new byte[inputBufferLength]; + } + + @Override + public void write(int b) throws IOException { + inputBuffer[currentBufferLength] = (byte) b; + currentBufferLength++; + + if (currentBufferLength == inputBufferLength) { + encodeRow(); + currentBufferLength = 0; + } + } + + @Override + public void flush() throws IOException { + stream.flush(); + } + + @Override + public void close() throws IOException { + stream.close(); + } + + private void encodeRow() throws IOException { + currentRow++; + int[] tmp = changesReferenceRow; + changesReferenceRow = changesCurrentRow; + changesCurrentRow = tmp; + changesReferenceRowLength = changesCurrentRowLength; + changesCurrentRowLength = 0; + + int index = 0; + boolean white = true; + while (index < columns) { + int byteIndex = index / 8; + int bit = index % 8; + if ((((inputBuffer[byteIndex] >> (7 - bit)) & 1) == 1) == (white)) { + changesCurrentRow[changesCurrentRowLength] = index; + changesCurrentRowLength++; + white = !white; + } + index++; + } + + encodeRowType6(); + + if (currentRow == rows) { + writeEOL(); + writeEOL(); + fill(); + } + } + + + private void encodeRowType6() throws IOException { + encode2D(); + } + + private int[] getNextChanges(int pos, boolean white) { + int[] result = new int[] {columns, columns}; + for (int i = 0; i < changesCurrentRowLength; i++) { + if (pos < changesCurrentRow[i] || (pos == 0 && white)) { + result[0] = changesCurrentRow[i]; + if ((i + 1) < changesCurrentRowLength) { + result[1] = changesCurrentRow[i + 1]; + } + break; + } + } + + return result; + } + + private void writeRun(int runLength, boolean white) throws IOException { + int nonterm = runLength / 64; + Code[] codes = white ? WHITE_NONTERMINATING_CODES : BLACK_NONTERMINATING_CODES; + while (nonterm > 0) { + if (nonterm >= codes.length) { + write(codes[codes.length - 1].code, codes[codes.length - 1].length); + nonterm -= codes.length; + } + else { + write(codes[nonterm - 1].code, codes[nonterm - 1].length); + nonterm = 0; + } + } + + Code c = white ? WHITE_TERMINATING_CODES[runLength % 64] : BLACK_TERMINATING_CODES[runLength % 64]; + write(c.code, c.length); + } + + private void encode2D() throws IOException { + boolean white = true; + int index = 0; // a0 + while (index < columns) { + int[] nextChanges = getNextChanges(index, white); // a1, a2 + + int[] nextRefs = getNextRefChanges(index, white); // b1, b2 + + int difference = nextChanges[0] - nextRefs[0]; + if (nextChanges[0] > nextRefs[1]) { + // PMODE + write(1, 4); + index = nextRefs[1]; + } + else if (difference > 3 || difference < -3) { + // HMODE + write(1, 3); + writeRun(nextChanges[0] - index, white); + writeRun(nextChanges[1] - nextChanges[0], !white); + index = nextChanges[1]; + + } + else { + // VMODE + switch (difference) { + case 0: + write(1, 1); + break; + case 1: + write(3, 3); + break; + case 2: + write(3, 6); + break; + case 3: + write(3, 7); + break; + case -1: + write(2, 3); + break; + case -2: + write(2, 6); + break; + case -3: + write(2, 7); + break; + } + white = !white; + index = nextRefs[0] + difference; + } + } + } + + private int[] getNextRefChanges(int a0, boolean white) { + int[] result = new int[] {columns, columns}; + for (int i = (white ? 0 : 1); i < changesReferenceRowLength; i += 2) { + if (changesReferenceRow[i] > a0 || (a0 == 0 && i == 0)) { + result[0] = changesReferenceRow[i]; + if ((i + 1) < changesReferenceRowLength) { + result[1] = changesReferenceRow[i + 1]; + } + break; + } + } + return result; + } + + private void write(int code, int codeLength) throws IOException { + + for (int i = 0; i < codeLength; i++) { + boolean codeBit = ((code >> (codeLength - i - 1)) & 1) == 1; + if (fillOrder == TIFFExtension.FILL_LEFT_TO_RIGHT) { + outputBuffer |= (codeBit ? 1 << (7 - ((outputBufferBitLength) % 8)) : 0); + } + else { + outputBuffer |= (codeBit ? 1 << (((outputBufferBitLength) % 8)) : 0); + } + outputBufferBitLength++; + + if (outputBufferBitLength == 8) { + stream.write(outputBuffer); + clearOutputBuffer(); + } + } + } + + private void writeEOL() throws IOException { + write(1, 12); + } + + private void fill() throws IOException { + if (outputBufferBitLength != 0) { + stream.write(outputBuffer); + } + clearOutputBuffer(); + } + + private void clearOutputBuffer() { + outputBuffer = 0; + outputBufferBitLength = 0; + } + + private static class Code { + private Code(int code, int length) { + this.code = code; + this.length = length; + } + + final int code; + final int length; + } + + private static final Code[] WHITE_TERMINATING_CODES; + + private static final Code[] WHITE_NONTERMINATING_CODES; + + private static final Code[] BLACK_TERMINATING_CODES; + + private static final Code[] BLACK_NONTERMINATING_CODES; + + static { + // Setup HUFFMAN Codes + WHITE_TERMINATING_CODES = new Code[64]; + WHITE_NONTERMINATING_CODES = new Code[40]; + for (int i = 0; i < CCITTFaxDecoderStream.WHITE_CODES.length; i++) { + int bitLength = i + 4; + for (int j = 0; j < CCITTFaxDecoderStream.WHITE_CODES[i].length; j++) { + int value = CCITTFaxDecoderStream.WHITE_RUN_LENGTHS[i][j]; + int code = CCITTFaxDecoderStream.WHITE_CODES[i][j]; + + if (value < 64) { + WHITE_TERMINATING_CODES[value] = new Code(code, bitLength); + } + else { + WHITE_NONTERMINATING_CODES[(value / 64) - 1] = new Code(code, bitLength); + } + } + } + + BLACK_TERMINATING_CODES = new Code[64]; + BLACK_NONTERMINATING_CODES = new Code[40]; + for (int i = 0; i < CCITTFaxDecoderStream.BLACK_CODES.length; i++) { + int bitLength = i + 2; + for (int j = 0; j < CCITTFaxDecoderStream.BLACK_CODES[i].length; j++) { + int value = CCITTFaxDecoderStream.BLACK_RUN_LENGTHS[i][j]; + int code = CCITTFaxDecoderStream.BLACK_CODES[i][j]; + + if (value < 64) { + BLACK_TERMINATING_CODES[value] = new Code(code, bitLength); + } + else { + BLACK_NONTERMINATING_CODES[(value / 64) - 1] = new Code(code, bitLength); + } + } + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java new file mode 100644 index 00000000000..5cb61de6b46 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; + +/** + * Decodes image data that has been encoded using either Group 3 or Group 4 + * CCITT facsimile (fax) encoding, and encodes image data to Group 4. + * + * @author Ben Litchfield + * @author Marcel Kammer + * @author Paul King + */ +final class CCITTFaxFilter extends Filter +{ + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + // get decode parameters + COSDictionary decodeParms = getDecodeParams(parameters, index); + + // parse dimensions + int cols = decodeParms.getInt(COSName.COLUMNS, 1728); + int rows = decodeParms.getInt(COSName.ROWS, 0); + int height = parameters.getInt(COSName.HEIGHT, COSName.H, 0); + if (rows > 0 && height > 0) + { + // PDFBOX-771, PDFBOX-3727: rows in DecodeParms sometimes contains an incorrect value + rows = height; + } + else + { + // at least one of the values has to have a valid value + rows = Math.max(rows, height); + } + + // decompress data + int k = decodeParms.getInt(COSName.K, 0); + boolean encodedByteAlign = decodeParms.getBoolean(COSName.ENCODED_BYTE_ALIGN, false); + int arraySize = (cols + 7) / 8 * rows; + // TODO possible options?? + byte[] decompressed = new byte[arraySize]; + CCITTFaxDecoderStream s; + int type; + long tiffOptions; + if (k == 0) + { + tiffOptions = encodedByteAlign ? TIFFExtension.GROUP3OPT_BYTEALIGNED : 0; + type = TIFFExtension.COMPRESSION_CCITT_MODIFIED_HUFFMAN_RLE; + } + else + { + if (k > 0) + { + tiffOptions = encodedByteAlign ? TIFFExtension.GROUP3OPT_BYTEALIGNED : 0; + tiffOptions |= TIFFExtension.GROUP3OPT_2DENCODING; + type = TIFFExtension.COMPRESSION_CCITT_T4; + } + else + { + // k < 0 + tiffOptions = encodedByteAlign ? TIFFExtension.GROUP4OPT_BYTEALIGNED : 0; + type = TIFFExtension.COMPRESSION_CCITT_T6; + } + } + s = new CCITTFaxDecoderStream(encoded, cols, type, TIFFExtension.FILL_LEFT_TO_RIGHT, tiffOptions); + readFromDecoderStream(s, decompressed); + + // invert bitmap + boolean blackIsOne = decodeParms.getBoolean(COSName.BLACK_IS_1, false); + if (!blackIsOne) + { + // Inverting the bitmap + // Note the previous approach with starting from an IndexColorModel didn't work + // reliably. In some cases the image wouldn't be painted for some reason. + // So a safe but slower approach was taken. + invertBitmap(decompressed); + } + + decoded.write(decompressed); + return new DecodeResult(parameters); + } + + void readFromDecoderStream(CCITTFaxDecoderStream decoderStream, byte[] result) + throws IOException + { + int pos = 0; + int read; + while ((read = decoderStream.read(result, pos, result.length - pos)) > -1) + { + pos += read; + if (pos >= result.length) + { + break; + } + } + decoderStream.close(); + } + + private void invertBitmap(byte[] bufferData) + { + for (int i = 0, c = bufferData.length; i < c; i++) + { + bufferData[i] = (byte) (~bufferData[i] & 0xFF); + } + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + int cols = parameters.getInt(COSName.COLUMNS); + int rows = parameters.getInt(COSName.ROWS); + CCITTFaxEncoderStream ccittFaxEncoderStream = + new CCITTFaxEncoderStream(encoded, cols, rows, TIFFExtension.FILL_LEFT_TO_RIGHT); + IOUtils.copy(input, ccittFaxEncoderStream); + input.close(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/CryptFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/CryptFilter.java new file mode 100644 index 00000000000..c6acf516e15 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/CryptFilter.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * Decrypts data encrypted by a security handler, reproducing the data as it was before encryption. + * @author Adam Nichols + */ +final class CryptFilter extends Filter +{ + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + COSName encryptionName = (COSName) parameters.getDictionaryObject(COSName.NAME); + if(encryptionName == null || encryptionName.equals(COSName.IDENTITY)) + { + // currently the only supported implementation is the Identity crypt filter + Filter identityFilter = new IdentityFilter(); + identityFilter.decode(encoded, decoded, parameters, index); + return new DecodeResult(parameters); + } + throw new IOException("Unsupported crypt filter " + encryptionName.getName()); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + COSName encryptionName = (COSName) parameters.getDictionaryObject(COSName.NAME); + if(encryptionName == null || encryptionName.equals(COSName.IDENTITY)) + { + // currently the only supported implementation is the Identity crypt filter + Filter identityFilter = new IdentityFilter(); + identityFilter.encode(input, encoded, parameters); + } + else + { + throw new IOException("Unsupported crypt filter " + encryptionName.getName()); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java new file mode 100644 index 00000000000..7da75d6b3be --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java @@ -0,0 +1,361 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferByte; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import javax.imageio.IIOException; +import javax.imageio.ImageIO; +import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; +import javax.imageio.metadata.IIOMetadata; +import javax.imageio.metadata.IIOMetadataNode; +import javax.imageio.stream.ImageInputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +/** + * Decompresses data encoded using a DCT (discrete cosine transform) + * technique based on the JPEG standard. + * + * @author John Hewson + */ +final class DCTFilter extends Filter +{ + private static final Log LOG = LogFactory.getLog(DCTFilter.class); + + private static final int POS_TRANSFORM = 11; + private static final String ADOBE = "Adobe"; + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary + parameters, int index, DecodeOptions options) throws IOException + { + ImageReader reader = findImageReader("JPEG", "a suitable JAI I/O image filter is not installed"); + try (ImageInputStream iis = ImageIO.createImageInputStream(encoded)) + { + + // skip one LF if there + if (iis.read() != 0x0A) + { + iis.seek(0); + } + + reader.setInput(iis); + ImageReadParam irp = reader.getDefaultReadParam(); + irp.setSourceSubsampling(options.getSubsamplingX(), options.getSubsamplingY(), + options.getSubsamplingOffsetX(), options.getSubsamplingOffsetY()); + irp.setSourceRegion(options.getSourceRegion()); + options.setFilterSubsampled(true); + + String numChannels = getNumChannels(reader); + + // get the raster using horrible JAI workarounds + ImageIO.setUseCache(false); + Raster raster; + + // Strategy: use read() for RGB or "can't get metadata" + // use readRaster() for CMYK and gray and as fallback if read() fails + // after "can't get metadata" because "no meta" file was CMYK + if ("3".equals(numChannels) || numChannels.isEmpty()) + { + try + { + // I'd like to use ImageReader#readRaster but it is buggy and can't read RGB correctly + BufferedImage image = reader.read(0, irp); + raster = image.getRaster(); + } + catch (IIOException e) + { + // JAI can't read CMYK JPEGs using ImageReader#read or ImageIO.read but + // fortunately ImageReader#readRaster isn't buggy when reading 4-channel files + LOG.debug("Couldn't read use read() for RGB image - using readRaster() as fallback", e); + raster = reader.readRaster(0, irp); + } + } + else + { + // JAI can't read CMYK JPEGs using ImageReader#read or ImageIO.read but + // fortunately ImageReader#readRaster isn't buggy when reading 4-channel files + raster = reader.readRaster(0, irp); + } + + // special handling for 4-component images + if (raster.getNumBands() == 4) + { + // get APP14 marker + Integer transform; + try + { + transform = getAdobeTransform(reader.getImageMetadata(0)); + } + catch (IIOException | NegativeArraySizeException e) + { + // we really tried asking nicely, now we're using brute force. + LOG.debug("Couldn't read usíng getAdobeTransform() - using getAdobeTransformByBruteForce() as fallback", e); + transform = getAdobeTransformByBruteForce(iis); + } + int colorTransform = transform != null ? transform : 0; + + // 0 = Unknown (RGB or CMYK), 1 = YCbCr, 2 = YCCK + switch (colorTransform) + { + case 0: + // already CMYK + break; + case 1: + raster = fromYCbCrtoCMYK(raster); + break; + case 2: + raster = fromYCCKtoCMYK(raster); + break; + default: + throw new IllegalArgumentException("Unknown colorTransform"); + } + } + else if (raster.getNumBands() == 3) + { + // BGR to RGB + raster = fromBGRtoRGB(raster); + } + + DataBufferByte dataBuffer = (DataBufferByte)raster.getDataBuffer(); + decoded.write(dataBuffer.getData()); + } + finally + { + reader.dispose(); + } + return new DecodeResult(parameters); + } + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + return decode(encoded, decoded, parameters, index, DecodeOptions.DEFAULT); + } + + // reads the APP14 Adobe transform tag and returns its value, or 0 if unknown + private Integer getAdobeTransform(IIOMetadata metadata) + { + Element tree = (Element)metadata.getAsTree("javax_imageio_jpeg_image_1.0"); + Element markerSequence = (Element)tree.getElementsByTagName("markerSequence").item(0); + NodeList app14AdobeNodeList = markerSequence.getElementsByTagName("app14Adobe"); + if (app14AdobeNodeList != null && app14AdobeNodeList.getLength() > 0) + { + Element adobe = (Element) app14AdobeNodeList.item(0); + return Integer.parseInt(adobe.getAttribute("transform")); + } + return 0; + } + + // See in https://github.com/haraldk/TwelveMonkeys + // com.twelvemonkeys.imageio.plugins.jpeg.AdobeDCT class for structure of APP14 segment + private int getAdobeTransformByBruteForce(ImageInputStream iis) throws IOException + { + int a = 0; + iis.seek(0); + int by; + while ((by = iis.read()) != -1) + { + if (ADOBE.charAt(a) == by) + { + ++a; + if (a != ADOBE.length()) + { + continue; + } + // match + a = 0; + long afterAdobePos = iis.getStreamPosition(); + iis.seek(iis.getStreamPosition() - 9); + int tag = iis.readUnsignedShort(); + if (tag != 0xFFEE) + { + iis.seek(afterAdobePos); + continue; + } + int len = iis.readUnsignedShort(); + if (len >= POS_TRANSFORM + 1) + { + byte[] app14 = new byte[Math.max(len, POS_TRANSFORM + 1)]; + if (iis.read(app14) >= POS_TRANSFORM + 1) + { + return app14[POS_TRANSFORM]; + } + } + } + else + { + a = 0; + } + } + return 0; + } + + // converts YCCK image to CMYK. YCCK is an equivalent encoding for + // CMYK data, so no color management code is needed here, nor does the + // PDF color space have to be consulted + private WritableRaster fromYCCKtoCMYK(Raster raster) + { + WritableRaster writableRaster = raster.createCompatibleWritableRaster(); + + int[] value = new int[4]; + for (int y = 0, height = raster.getHeight(); y < height; y++) + { + for (int x = 0, width = raster.getWidth(); x < width; x++) + { + raster.getPixel(x, y, value); + + // 4-channels 0..255 + float Y = value[0]; + float Cb = value[1]; + float Cr = value[2]; + float K = value[3]; + + // YCCK to RGB, see http://software.intel.com/en-us/node/442744 + int r = clamp(Y + 1.402f * Cr - 179.456f); + int g = clamp(Y - 0.34414f * Cb - 0.71414f * Cr + 135.45984f); + int b = clamp(Y + 1.772f * Cb - 226.816f); + + // naive RGB to CMYK + int cyan = 255 - r; + int magenta = 255 - g; + int yellow = 255 - b; + + // update new raster + value[0] = cyan; + value[1] = magenta; + value[2] = yellow; + value[3] = (int)K; + writableRaster.setPixel(x, y, value); + } + } + return writableRaster; + } + + private WritableRaster fromYCbCrtoCMYK(Raster raster) + { + WritableRaster writableRaster = raster.createCompatibleWritableRaster(); + + int[] value = new int[4]; + for (int y = 0, height = raster.getHeight(); y < height; y++) + { + for (int x = 0, width = raster.getWidth(); x < width; x++) + { + raster.getPixel(x, y, value); + + // 4-channels 0..255 + float Y = value[0]; + float Cb = value[1]; + float Cr = value[2]; + float K = value[3]; + + // YCbCr to RGB, see http://www.equasys.de/colorconversion.html + int r = clamp( (1.164f * (Y-16)) + (1.596f * (Cr - 128)) ); + int g = clamp( (1.164f * (Y-16)) + (-0.392f * (Cb-128)) + (-0.813f * (Cr-128))); + int b = clamp( (1.164f * (Y-16)) + (2.017f * (Cb-128))); + + // naive RGB to CMYK + int cyan = 255 - r; + int magenta = 255 - g; + int yellow = 255 - b; + + // update new raster + value[0] = cyan; + value[1] = magenta; + value[2] = yellow; + value[3] = (int)K; + writableRaster.setPixel(x, y, value); + } + } + return writableRaster; + } + + // converts from BGR to RGB + private WritableRaster fromBGRtoRGB(Raster raster) + { + WritableRaster writableRaster = raster.createCompatibleWritableRaster(); + + int width = raster.getWidth(); + int height = raster.getHeight(); + int w3 = width * 3; + int[] tab = new int[w3]; + //BEWARE: handling the full image at a time is slower than one line at a time + for (int y = 0; y < height; y++) + { + raster.getPixels(0, y, width, 1, tab); + for (int off = 0; off < w3; off += 3) + { + int tmp = tab[off]; + tab[off] = tab[off + 2]; + tab[off + 2] = tmp; + } + writableRaster.setPixels(0, y, width, 1, tab); + } + return writableRaster; + } + + // returns the number of channels as a string, or an empty string if there is an error getting the meta data + private String getNumChannels(ImageReader reader) + { + try + { + IIOMetadata imageMetadata = reader.getImageMetadata(0); + if (imageMetadata == null) + { + return ""; + } + IIOMetadataNode metaTree = (IIOMetadataNode) imageMetadata.getAsTree("javax_imageio_1.0"); + Element numChannelsItem = (Element) metaTree.getElementsByTagName("NumChannels").item(0); + if (numChannelsItem == null) + { + return ""; + } + return numChannelsItem.getAttribute("value"); + } + catch (IOException | NegativeArraySizeException e) + { + LOG.debug("Couldn't read metadata - returning empty string", e); + return ""; + } + } + + // clamps value to 0-255 range + private int clamp(float value) + { + return (int)((value < 0) ? 0 : ((value > 255) ? 255 : value)); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + throw new UnsupportedOperationException("DCTFilter encoding not implemented, use the JPEGFactory methods instead"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/DecodeOptions.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/DecodeOptions.java new file mode 100644 index 00000000000..dadf91a07c4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/DecodeOptions.java @@ -0,0 +1,264 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.awt.Rectangle; + +/** + * Options that may be passed to a Filter to request special handling when decoding the stream. + * Filters may not honor some or all of the specified options, and so callers should check the + * honored flag if further processing relies on the options being used. + */ +public class DecodeOptions +{ + /** + * Default decode options. The honored flag for this instance is always true, as it represents + * the default behavior. + */ + public static final DecodeOptions DEFAULT = new FinalDecodeOptions(true); + + private Rectangle sourceRegion = null; + private int subsamplingX = 1; + private int subsamplingY = 1; + private int subsamplingOffsetX = 0; + private int subsamplingOffsetY = 0; + private boolean filterSubsampled = false; + + /** + * Constructs an empty DecodeOptions instance + */ + public DecodeOptions() + { + // this constructor is intentionally left empty + } + + /** + * Constructs an instance specifying the region of the image that should be decoded. The actual + * region will be clipped to the dimensions of the image. + * + * @param sourceRegion Region of the source image that should be decoded + */ + public DecodeOptions(Rectangle sourceRegion) + { + this.sourceRegion = sourceRegion; + } + + /** + * Constructs an instance specifying the region of the image that should be decoded. The actual + * region will be clipped to the dimensions of the image. + * + * @param x x-coordinate of the top-left corner of the region to be decoded + * @param y y-coordinate of the top-left corner of the region to be decoded + * @param width Width of the region to be decoded + * @param height Height of the region to be decoded + */ + public DecodeOptions(int x, int y, int width, int height) + { + this(new Rectangle(x, y, width, height)); + } + + /** + * Constructs an instance specifying the image should be decoded using subsampling. The + * subsampling will be the same for the X and Y axes. + * + * @param subsampling The number of rows and columns to advance in the source for each pixel in + * the decoded image. + */ + public DecodeOptions(int subsampling) + { + subsamplingX = subsampling; + subsamplingY = subsampling; + } + + /** + * When decoding an image, the part of the image that should be decoded, or null if the entire + * image is needed. + * + * @return The source region to decode, or null if the entire image should be decoded + */ + public Rectangle getSourceRegion() + { + return sourceRegion; + } + + /** + * Sets the region of the source image that should be decoded. The region will be clipped to the + * dimensions of the source image. Setting this value to null will result in the entire image + * being decoded. + * + * @param sourceRegion The source region to decode, or null if the entire image should be + * decoded. + */ + public void setSourceRegion(Rectangle sourceRegion) + { + this.sourceRegion = sourceRegion; + } + + /** + * When decoding an image, the number of columns to advance in the source for every pixel + * decoded. + * + * @return The x-axis subsampling value + */ + public int getSubsamplingX() + { + return subsamplingX; + } + + /** + * Sets the number of columns to advance in the source for every pixel decoded + * + * @param ssX The x-axis subsampling value + */ + public void setSubsamplingX(int ssX) + { + this.subsamplingX = ssX; + } + + /** + * When decoding an image, the number of rows to advance in the source for every pixel decoded. + * + * @return The y-axis subsampling value + */ + public int getSubsamplingY() + { + return subsamplingY; + } + + /** + * Sets the number of rows to advance in the source for every pixel decoded + * + * @param ssY The y-axis subsampling value + */ + public void setSubsamplingY(int ssY) + { + this.subsamplingY = ssY; + } + + /** + * When decoding an image, the horizontal offset for subsampling + * + * @return The x-axis subsampling offset + */ + public int getSubsamplingOffsetX() + { + return subsamplingOffsetX; + } + + /** + * Sets the horizontal subsampling offset for decoding images + * + * @param ssOffsetX The x-axis subsampling offset + */ + public void setSubsamplingOffsetX(int ssOffsetX) + { + this.subsamplingOffsetX = ssOffsetX; + } + + /** + * When decoding an image, the vertical offset for subsampling + * + * @return The y-axis subsampling offset + */ + public int getSubsamplingOffsetY() + { + return subsamplingOffsetY; + } + + /** + * Sets the vertical subsampling offset for decoding images + * + * @param ssOffsetY The y-axis subsampling offset + */ + public void setSubsamplingOffsetY(int ssOffsetY) + { + this.subsamplingOffsetY = ssOffsetY; + } + + /** + * Flag used by the filter to specify if it performed subsampling. + * + * Some filters may be unable or unwilling to apply subsampling, and so the caller must check + * this flag after decoding. + * + * @return True if the filter applied the options specified by this instance, false otherwise. + */ + public boolean isFilterSubsampled() + { + return filterSubsampled; + } + + /** + * Used internally by filters to signal they have applied subsampling as requested by this + * options instance. + * + * @param filterSubsampled Value specifying if the filter could meet the requested options. + * Usually a filter will only call this with the value true, as the default value + * for the flag is false. + */ + void setFilterSubsampled(boolean filterSubsampled) + { + this.filterSubsampled = filterSubsampled; + } + + /** + * Helper class for reusable instances which may not be modified. + */ + private static class FinalDecodeOptions extends DecodeOptions + { + FinalDecodeOptions(boolean filterSubsampled) + { + super.setFilterSubsampled(filterSubsampled); + } + + @Override + public void setSourceRegion(Rectangle sourceRegion) + { + throw new UnsupportedOperationException("This instance may not be modified."); + } + + @Override + public void setSubsamplingX(int ssX) + { + throw new UnsupportedOperationException("This instance may not be modified."); + } + + @Override + public void setSubsamplingY(int ssY) + { + throw new UnsupportedOperationException("This instance may not be modified."); + } + + @Override + public void setSubsamplingOffsetX(int ssOffsetX) + { + throw new UnsupportedOperationException("This instance may not be modified."); + } + + @Override + public void setSubsamplingOffsetY(int ssOffsetY) + { + throw new UnsupportedOperationException("This instance may not be modified."); + } + + @Override + void setFilterSubsampled(boolean filterSubsampled) + { + // Silently ignore the request. + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/DecodeResult.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/DecodeResult.java new file mode 100644 index 00000000000..96eaa16c9df --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/DecodeResult.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.graphics.color.PDJPXColorSpace; + +/** + * The result of a filter decode operation. Allows information such as color space to be + * extracted from image streams, and for stream parameters to be repaired during reading. + * + * @author John Hewson + */ +public final class DecodeResult +{ + /** Default decode result. */ + public static final DecodeResult DEFAULT = new DecodeResult(new COSDictionary()); + + private final COSDictionary parameters; + private PDJPXColorSpace colorSpace; + + DecodeResult(COSDictionary parameters) + { + this.parameters = parameters; + } + + DecodeResult(COSDictionary parameters, PDJPXColorSpace colorSpace) + { + this.parameters = parameters; + this.colorSpace = colorSpace; + } + + /** + * Returns the stream parameters, repaired using the embedded stream data. + * @return the repaired stream parameters, or an empty dictionary + */ + public COSDictionary getParameters() + { + return parameters; + } + + /** + * Returns the embedded JPX color space, if any. + * @return the embedded JPX color space, or null if there is none. + */ + public PDJPXColorSpace getJPXColorSpace() + { + return colorSpace; + } + + // Sets the JPX color space + void setColorSpace(PDJPXColorSpace colorSpace) + { + this.colorSpace = colorSpace; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java new file mode 100644 index 00000000000..bb4aec33818 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java @@ -0,0 +1,184 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Iterator; +import java.util.zip.Deflater; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A filter for stream data. + * + * @author Ben Litchfield + * @author John Hewson + */ +public abstract class Filter +{ + private static final Log LOG = LogFactory.getLog(Filter.class); + + /** + * Compression Level System Property. Set this to a value from 0 to 9 to change the zlib deflate + * compression level used to compress /Flate streams. The default value is -1 which is + * {@link Deflater#DEFAULT_COMPRESSION}. To set maximum compression, use + * {@code System.setProperty(Filter.SYSPROP_DEFLATELEVEL, "9");} + */ + public static final String SYSPROP_DEFLATELEVEL = "org.apache.pdfbox.filter.deflatelevel"; + + /** + * Constructor. + */ + protected Filter() + { + } + + /** + * Decodes data, producing the original non-encoded data. + * @param encoded the encoded byte stream + * @param decoded the stream where decoded data will be written + * @param parameters the parameters used for decoding + * @param index the index to the filter being decoded + * @return repaired parameters dictionary, or the original parameters dictionary + * @throws IOException if the stream cannot be decoded + */ + public abstract DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary parameters, + int index) throws IOException; + + /** + * Decodes data, with optional DecodeOptions. Not all filters support all options, and so + * callers should check the options' honored flag to test if they were applied. + * + * @param encoded the encoded byte stream + * @param decoded the stream where decoded data will be written + * @param parameters the parameters used for decoding + * @param index the index to the filter being decoded + * @param options additional options for decoding + * @return repaired parameters dictionary, or the original parameters dictionary + * @throws IOException if the stream cannot be decoded + */ + public DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary parameters, + int index, DecodeOptions options) throws IOException + { + return decode(encoded, decoded, parameters, index); + } + + /** + * Encodes data. + * @param input the byte stream to encode + * @param encoded the stream where encoded data will be written + * @param parameters the parameters used for encoding + * @param index the index to the filter being encoded + * @throws IOException if the stream cannot be encoded + */ + public final void encode(InputStream input, OutputStream encoded, COSDictionary parameters, + int index) throws IOException + { + encode(input, encoded, parameters.asUnmodifiableDictionary()); + } + + // implemented in subclasses + protected abstract void encode(InputStream input, OutputStream encoded, + COSDictionary parameters) throws IOException; + + // gets the decode params for a specific filter index, this is used to + // normalise the DecodeParams entry so that it is always a dictionary + protected COSDictionary getDecodeParams(COSDictionary dictionary, int index) + { + COSBase filter = dictionary.getDictionaryObject(COSName.FILTER, COSName.F); + COSBase obj = dictionary.getDictionaryObject(COSName.DECODE_PARMS, COSName.DP); + if (filter instanceof COSName && obj instanceof COSDictionary) + { + // PDFBOX-3932: The PDF specification requires "If there is only one filter and that + // filter has parameters, DecodeParms shall be set to the filter’s parameter dictionary" + // but tests show that Adobe means "one filter name object". + return (COSDictionary)obj; + } + else if (filter instanceof COSArray && obj instanceof COSArray) + { + COSArray array = (COSArray)obj; + if (index < array.size()) + { + COSBase objAtIndex = array.getObject(index); + if (objAtIndex instanceof COSDictionary) + { + return (COSDictionary)array.getObject(index); + } + } + } + else if (obj != null && !(filter instanceof COSArray || obj instanceof COSArray)) + { + LOG.error("Expected DecodeParams to be an Array or Dictionary but found " + + obj.getClass().getName()); + } + return new COSDictionary(); + } + + /** + * Finds a suitable image reader for a format. + * + * @param formatName The format to search for. + * @param errorCause The probably cause if something goes wrong. + * @return The image reader for the format. + * @throws MissingImageReaderException if no image reader is found. + */ + protected static ImageReader findImageReader(String formatName, String errorCause) throws MissingImageReaderException + { + Iterator readers = ImageIO.getImageReadersByFormatName(formatName); + ImageReader reader = null; + while (readers.hasNext()) + { + reader = readers.next(); + if (reader != null && reader.canReadRaster()) + { + break; + } + } + if (reader == null) + { + throw new MissingImageReaderException("Cannot read " + formatName + " image: " + errorCause); + } + return reader; + } + + /** + * @return the ZIP compression level configured for PDFBox + */ + public static int getCompressionLevel() + { + int compressionLevel = Deflater.DEFAULT_COMPRESSION; + try + { + compressionLevel = Integer.parseInt(System.getProperty(Filter.SYSPROP_DEFLATELEVEL, "-1")); + } + catch (NumberFormatException ex) + { + LOG.warn(ex.getMessage(), ex); + } + return Math.max(-1, Math.min(Deflater.BEST_COMPRESSION, compressionLevel)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterFactory.java new file mode 100644 index 00000000000..e06a4a38327 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterFactory.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import org.apache.pdfbox.cos.COSName; + +/** + * Factory for Filter classes. + * + * @author Ben Litchfield + */ +public final class FilterFactory +{ + /** + * Singleton instance. + */ + public static final FilterFactory INSTANCE = new FilterFactory(); + + private final Map filters = new HashMap<>(); + + private FilterFactory() + { + Filter flate = new FlateFilter(); + Filter dct = new DCTFilter(); + Filter ccittFax = new CCITTFaxFilter(); + Filter lzw = new LZWFilter(); + Filter asciiHex = new ASCIIHexFilter(); + Filter ascii85 = new ASCII85Filter(); + Filter runLength = new RunLengthDecodeFilter(); + Filter crypt = new CryptFilter(); + Filter jpx = new JPXFilter(); + Filter jbig2 = new JBIG2Filter(); + + filters.put(COSName.FLATE_DECODE, flate); + filters.put(COSName.FLATE_DECODE_ABBREVIATION, flate); + filters.put(COSName.DCT_DECODE, dct); + filters.put(COSName.DCT_DECODE_ABBREVIATION, dct); + filters.put(COSName.CCITTFAX_DECODE, ccittFax); + filters.put(COSName.CCITTFAX_DECODE_ABBREVIATION, ccittFax); + filters.put(COSName.LZW_DECODE, lzw); + filters.put(COSName.LZW_DECODE_ABBREVIATION, lzw); + filters.put(COSName.ASCII_HEX_DECODE, asciiHex); + filters.put(COSName.ASCII_HEX_DECODE_ABBREVIATION, asciiHex); + filters.put(COSName.ASCII85_DECODE, ascii85); + filters.put(COSName.ASCII85_DECODE_ABBREVIATION, ascii85); + filters.put(COSName.RUN_LENGTH_DECODE, runLength); + filters.put(COSName.RUN_LENGTH_DECODE_ABBREVIATION, runLength); + filters.put(COSName.CRYPT, crypt); + filters.put(COSName.JPX_DECODE, jpx); + filters.put(COSName.JBIG2_DECODE, jbig2); + } + + /** + * Returns a filter instance given its name as a string. + * @param filterName the name of the filter to retrieve + * @return the filter that matches the name + * @throws IOException if the filter name was invalid + */ + public Filter getFilter(String filterName) throws IOException + { + return getFilter(COSName.getPDFName(filterName)); + } + + /** + * Returns a filter instance given its COSName. + * @param filterName the name of the filter to retrieve + * @return the filter that matches the name + * @throws IOException if the filter name was invalid + */ + public Filter getFilter(COSName filterName) throws IOException + { + Filter filter = filters.get(filterName); + if (filter == null) + { + throw new IOException("Invalid filter: " + filterName); + } + return filter; + } + + // returns all available filters, for testing + Collection getAllFilters() + { + return filters.values(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java new file mode 100644 index 00000000000..7c43a7dabbf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.Inflater; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; + +/** + * Decompresses data encoded using the zlib/deflate compression method, + * reproducing the original text or binary data. + * + * @author Ben Litchfield + * @author Marcel Kammer + */ +final class FlateFilter extends Filter +{ + private static final Log LOG = LogFactory.getLog(FlateFilter.class); + private static final int BUFFER_SIZE = 0x4000; + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + final COSDictionary decodeParams = getDecodeParams(parameters, index); + + try + { + decompress(encoded, Predictor.wrapPredictor(decoded, decodeParams)); + } + catch (DataFormatException e) + { + // if the stream is corrupt a DataFormatException may occur + LOG.error("FlateFilter: stop reading corrupt stream due to a DataFormatException"); + + // re-throw the exception + throw new IOException(e); + } + return new DecodeResult(parameters); + } + + // Use Inflater instead of InflateInputStream to avoid an EOFException due to a probably + // missing Z_STREAM_END, see PDFBOX-1232 for details + private void decompress(InputStream in, OutputStream out) throws IOException, DataFormatException + { + byte[] buf = new byte[2048]; + // skip zlib header + in.read(buf,0,2); + int read = in.read(buf); + if (read > 0) + { + // use nowrap mode to bypass zlib-header and checksum to avoid a DataFormatException + Inflater inflater = new Inflater(true); + inflater.setInput(buf,0,read); + byte[] res = new byte[1024]; + boolean dataWritten = false; + while (true) + { + int resRead = 0; + try + { + resRead = inflater.inflate(res); + } + catch(DataFormatException exception) + { + if (dataWritten) + { + // some data could be read -> don't throw an exception + LOG.warn("FlateFilter: premature end of stream due to a DataFormatException"); + break; + } + else + { + // nothing could be read -> re-throw exception + throw exception; + } + } + if (resRead != 0) + { + out.write(res,0,resRead); + dataWritten = true; + continue; + } + if (inflater.finished() || inflater.needsDictionary() || in.available() == 0) + { + break; + } + read = in.read(buf); + inflater.setInput(buf,0,read); + } + inflater.end(); + } + out.flush(); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + int compressionLevel = getCompressionLevel(); + Deflater deflater = new Deflater(compressionLevel); + try (DeflaterOutputStream out = new DeflaterOutputStream(encoded,deflater)) + { + int amountRead; + int mayRead = input.available(); + if (mayRead > 0) + { + byte[] buffer = new byte[Math.min(mayRead,BUFFER_SIZE)]; + while ((amountRead = input.read(buffer, 0, Math.min(mayRead,BUFFER_SIZE))) != -1) + { + out.write(buffer, 0, amountRead); + } + } + } + encoded.flush(); + deflater.end(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/IdentityFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/IdentityFilter.java new file mode 100644 index 00000000000..74b47b2b904 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/IdentityFilter.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.io.IOUtils; + +/** + * The IdentityFilter filter passes the data through without any modifications. + * It is defined in section 7.6.5 of the PDF 1.7 spec and also stated in table 26. + * + * @author Adam Nichols + */ +final class IdentityFilter extends Filter +{ + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) + throws IOException + { + IOUtils.copy(encoded, decoded); + decoded.flush(); + return new DecodeResult(parameters); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + IOUtils.copy(input, encoded); + encoded.flush(); + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java new file mode 100644 index 00000000000..743206c0e7e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.SequenceInputStream; +import javax.imageio.ImageIO; +import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; + +/** + * Decompresses data encoded using the JBIG2 standard, reproducing the original + * monochrome (1 bit per pixel) image data (or an approximation of that data). + * + * Requires a JBIG2 plugin for Java Image I/O to be installed. A known working + * plug-in is the Apache PDFBox JBIG2 plugin. + * + * @author Timo Boehme + */ +final class JBIG2Filter extends Filter +{ + private static final Log LOG = LogFactory.getLog(JBIG2Filter.class); + + private static boolean levigoLogged = false; + + private static synchronized void logLevigoDonated() + { + if (!levigoLogged) + { + LOG.info("The Levigo JBIG2 plugin has been donated to the Apache Foundation"); + LOG.info("and an improved version is available for download at " + + "https://pdfbox.apache.org/download.cgi"); + levigoLogged = true; + } + } + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary + parameters, int index, DecodeOptions options) throws IOException + { + ImageReader reader = findImageReader("JBIG2", "jbig2-imageio is not installed"); + if (reader.getClass().getName().contains("levigo")) + { + logLevigoDonated(); + } + + int bits = parameters.getInt(COSName.BITS_PER_COMPONENT, 1); + COSDictionary params = getDecodeParams(parameters, index); + + ImageReadParam irp = reader.getDefaultReadParam(); + irp.setSourceSubsampling(options.getSubsamplingX(), options.getSubsamplingY(), + options.getSubsamplingOffsetX(), options.getSubsamplingOffsetY()); + irp.setSourceRegion(options.getSourceRegion()); + options.setFilterSubsampled(true); + + InputStream source = encoded; + if (params != null) + { + COSBase globals = params.getDictionaryObject(COSName.JBIG2_GLOBALS); + if (globals instanceof COSStream) + { + source = new SequenceInputStream(((COSStream) globals).createInputStream(), encoded); + } + } + + try (ImageInputStream iis = ImageIO.createImageInputStream(source)) + { + reader.setInput(iis); + + BufferedImage image; + try + { + image = reader.read(0, irp); + } + catch (Exception e) + { + // wrap and rethrow any exceptions + throw new IOException("Could not read JBIG2 image", e); + } + + // I am assuming since JBIG2 is always black and white + // depending on your renderer this might or might be needed + if (image.getColorModel().getPixelSize() != bits) + { + if (bits != 1) + { + LOG.warn("Attempting to handle a JBIG2 with more than 1-bit depth"); + } + BufferedImage packedImage = new BufferedImage(image.getWidth(), image.getHeight(), + BufferedImage.TYPE_BYTE_BINARY); + Graphics graphics = packedImage.getGraphics(); + graphics.drawImage(image, 0, 0, null); + graphics.dispose(); + image = packedImage; + } + + DataBuffer dBuf = image.getData().getDataBuffer(); + if (dBuf.getDataType() == DataBuffer.TYPE_BYTE) + { + decoded.write(((DataBufferByte) dBuf).getData()); + } + else + { + throw new IOException("Unexpected image buffer type"); + } + } + finally + { + reader.dispose(); + } + + return new DecodeResult(parameters); + } + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + return decode(encoded, decoded, parameters, index, DecodeOptions.DEFAULT); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + throw new UnsupportedOperationException("JBIG2 encoding not implemented"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java new file mode 100644 index 00000000000..9837e52718f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; +import java.awt.color.ColorSpace; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.DataBufferUShort; +import java.awt.image.IndexColorModel; +import java.awt.image.MultiPixelPackedSampleModel; +import java.awt.image.Raster; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import javax.imageio.ImageReadParam; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDJPXColorSpace; + +/** + * Decompress data encoded using the wavelet-based JPEG 2000 standard, + * reproducing the original data. + * + * Requires the Java Advanced Imaging (JAI) Image I/O Tools to be installed from java.net, see + * jai-imageio. + * Alternatively you can build from the source available in the + * jai-imageio-core svn repo. + * + * Mac OS X users should download the tar.gz file for linux and unpack it to obtain the + * required jar files. The .so file can be safely ignored. + * + * @author John Hewson + * @author Timo Boehme + */ +public final class JPXFilter extends Filter +{ + /** + * {@inheritDoc} + */ + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary + parameters, int index, DecodeOptions options) throws IOException + { + DecodeResult result = new DecodeResult(new COSDictionary()); + result.getParameters().addAll(parameters); + BufferedImage image = readJPX(encoded, options, result); + + Raster raster = image.getRaster(); + switch (raster.getDataBuffer().getDataType()) + { + case DataBuffer.TYPE_BYTE: + DataBufferByte byteBuffer = (DataBufferByte) raster.getDataBuffer(); + decoded.write(byteBuffer.getData()); + return result; + + case DataBuffer.TYPE_USHORT: + DataBufferUShort wordBuffer = (DataBufferUShort) raster.getDataBuffer(); + for (short w : wordBuffer.getData()) + { + decoded.write(w >> 8); + decoded.write(w); + } + return result; + + case DataBuffer.TYPE_INT: + // not yet used (as of October 2018) but works as fallback + // if we decide to convert to BufferedImage.TYPE_INT_RGB + int[] ar = new int[raster.getNumBands()]; + for (int y = 0; y < image.getHeight(); ++y) + { + for (int x = 0; x < image.getWidth(); ++x) + { + raster.getPixel(x, y, ar); + for (int i = 0; i < ar.length; ++i) + { + decoded.write(ar[i]); + } + } + } + return result; + + default: + throw new IOException("Data type " + raster.getDataBuffer().getDataType() + " not implemented"); + } + } + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + return decode(encoded, decoded, parameters, index, DecodeOptions.DEFAULT); + } + + // try to read using JAI Image I/O + private BufferedImage readJPX(InputStream input, DecodeOptions options, DecodeResult result) throws IOException + { + ImageReader reader = findImageReader("JPEG2000", "Java Advanced Imaging (JAI) Image I/O Tools are not installed"); + // PDFBOX-4121: ImageIO.createImageInputStream() is much slower + try (ImageInputStream iis = new MemoryCacheImageInputStream(input)) + { + reader.setInput(iis, true, true); + ImageReadParam irp = reader.getDefaultReadParam(); + irp.setSourceRegion(options.getSourceRegion()); + irp.setSourceSubsampling(options.getSubsamplingX(), options.getSubsamplingY(), + options.getSubsamplingOffsetX(), options.getSubsamplingOffsetY()); + options.setFilterSubsampled(true); + + BufferedImage image; + try + { + image = reader.read(0, irp); + } + catch (Exception e) + { + // wrap and rethrow any exceptions + throw new IOException("Could not read JPEG 2000 (JPX) image", e); + } + + COSDictionary parameters = result.getParameters(); + + // "If the image stream uses the JPXDecode filter, this entry is optional + // and shall be ignored if present" + // + // note that indexed color spaces make the BPC logic tricky, see PDFBOX-2204 + int bpc = image.getColorModel().getPixelSize() / image.getRaster().getNumBands(); + parameters.setInt(COSName.BITS_PER_COMPONENT, bpc); + + // "Decode shall be ignored, except in the case where the image is treated as a mask" + if (!parameters.getBoolean(COSName.IMAGE_MASK, false)) + { + parameters.setItem(COSName.DECODE, null); + } + + // override dimensions, see PDFBOX-1735 + parameters.setInt(COSName.WIDTH, reader.getWidth(0)); + parameters.setInt(COSName.HEIGHT, reader.getHeight(0)); + + // extract embedded color space + if (!parameters.containsKey(COSName.COLORSPACE)) + { + if (image.getSampleModel() instanceof MultiPixelPackedSampleModel && + image.getColorModel().getPixelSize() == 1 && + image.getRaster().getNumBands() == 1 && + image.getColorModel() instanceof IndexColorModel) + { + // PDFBOX-4326: + // force CS_GRAY colorspace because colorspace in IndexColorModel + // has 3 colors despite that there is only 1 color per pixel + // in raster + result.setColorSpace(new PDJPXColorSpace(ColorSpace.getInstance(ColorSpace.CS_GRAY))); + } + else + { + result.setColorSpace(new PDJPXColorSpace(image.getColorModel().getColorSpace())); + } + } + + return image; + } + finally + { + reader.dispose(); + } + } + + /** + * {@inheritDoc} + */ + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + throw new UnsupportedOperationException("JPX encoding not implemented"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java new file mode 100644 index 00000000000..f7274193b4c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java @@ -0,0 +1,306 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.imageio.stream.MemoryCacheImageInputStream; +import javax.imageio.stream.MemoryCacheImageOutputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * + * This is the filter used for the LZWDecode filter. + * + * @author Ben Litchfield + * @author Tilman Hausherr + */ +public class LZWFilter extends Filter +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(LZWFilter.class); + + /** + * The LZW clear table code. + */ + public static final long CLEAR_TABLE = 256; + + /** + * The LZW end of data code. + */ + public static final long EOD = 257; + + //BEWARE: codeTable must be local to each method, because there is only + // one instance of each filter + + /** + * {@inheritDoc} + */ + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + COSDictionary decodeParams = getDecodeParams(parameters, index); + int earlyChange = decodeParams.getInt(COSName.EARLY_CHANGE, 1); + + if (earlyChange != 0 && earlyChange != 1) + { + earlyChange = 1; + } + + doLZWDecode(encoded, Predictor.wrapPredictor(decoded, decodeParams), earlyChange); + return new DecodeResult(parameters); + } + + private void doLZWDecode(InputStream encoded, OutputStream decoded, int earlyChange) throws IOException + { + List codeTable = new ArrayList<>(); + int chunk = 9; + final MemoryCacheImageInputStream in = new MemoryCacheImageInputStream(encoded); + long nextCommand; + long prevCommand = -1; + + try + { + while ((nextCommand = in.readBits(chunk)) != EOD) + { + if (nextCommand == CLEAR_TABLE) + { + chunk = 9; + codeTable = createCodeTable(); + prevCommand = -1; + } + else + { + if (nextCommand < codeTable.size()) + { + byte[] data = codeTable.get((int) nextCommand); + byte firstByte = data[0]; + decoded.write(data); + if (prevCommand != -1) + { + checkIndexBounds(codeTable, prevCommand, in); + data = codeTable.get((int) prevCommand); + byte[] newData = Arrays.copyOf(data, data.length + 1); + newData[data.length] = firstByte; + codeTable.add(newData); + } + } + else + { + checkIndexBounds(codeTable, prevCommand, in); + byte[] data = codeTable.get((int) prevCommand); + byte[] newData = Arrays.copyOf(data, data.length + 1); + newData[data.length] = data[0]; + decoded.write(newData); + codeTable.add(newData); + } + + chunk = calculateChunk(codeTable.size(), earlyChange); + prevCommand = nextCommand; + } + } + } + catch (EOFException ex) + { + LOG.warn("Premature EOF in LZW stream, EOD code missing", ex); + } + decoded.flush(); + } + + private void checkIndexBounds(List codeTable, long index, MemoryCacheImageInputStream in) + throws IOException + { + if (index < 0) + { + throw new IOException("negative array index: " + index + " near offset " + + in.getStreamPosition()); + } + if (index >= codeTable.size()) + { + throw new IOException("array index overflow: " + index + + " >= " + codeTable.size() + " near offset " + + in.getStreamPosition()); + } + } + + /** + * {@inheritDoc} + */ + @Override + protected void encode(InputStream rawData, OutputStream encoded, COSDictionary parameters) + throws IOException + { + List codeTable = createCodeTable(); + int chunk = 9; + + byte[] inputPattern = null; + try (MemoryCacheImageOutputStream out = new MemoryCacheImageOutputStream(encoded)) + { + out.writeBits(CLEAR_TABLE, chunk); + int foundCode = -1; + int r; + while ((r = rawData.read()) != -1) + { + byte by = (byte) r; + if (inputPattern == null) + { + inputPattern = new byte[] { by }; + foundCode = by & 0xff; + } + else + { + inputPattern = Arrays.copyOf(inputPattern, inputPattern.length + 1); + inputPattern[inputPattern.length - 1] = by; + int newFoundCode = findPatternCode(codeTable, inputPattern); + if (newFoundCode == -1) + { + // use previous + chunk = calculateChunk(codeTable.size() - 1, 1); + out.writeBits(foundCode, chunk); + // create new table entry + codeTable.add(inputPattern); + + if (codeTable.size() == 4096) + { + // code table is full + out.writeBits(CLEAR_TABLE, chunk); + codeTable = createCodeTable(); + } + + inputPattern = new byte[] { by }; + foundCode = by & 0xff; + } + else + { + foundCode = newFoundCode; + } + } + } + if (foundCode != -1) + { + chunk = calculateChunk(codeTable.size() - 1, 1); + out.writeBits(foundCode, chunk); + } + + // PPDFBOX-1977: the decoder wouldn't know that the encoder would output + // an EOD as code, so he would have increased his own code table and + // possibly adjusted the chunk. Therefore, the encoder must behave as + // if the code table had just grown and thus it must be checked it is + // needed to adjust the chunk, based on an increased table size parameter + chunk = calculateChunk(codeTable.size(), 1); + + out.writeBits(EOD, chunk); + + // pad with 0 + out.writeBits(0, 7); + + // must do or file will be empty :-( + out.flush(); + } + } + + /** + * Find the longest matching pattern in the code table. + * + * @param codeTable The LZW code table. + * @param pattern The pattern to be searched for. + * @return The index of the longest matching pattern or -1 if nothing is + * found. + */ + private int findPatternCode(List codeTable, byte[] pattern) + { + int foundCode = -1; + int foundLen = 0; + for (int i = codeTable.size() - 1; i >= 0; --i) + { + if (i <= EOD) + { + // we're in the single byte area + if (foundCode != -1) + { + // we already found pattern with size > 1 + return foundCode; + } + else if (pattern.length > 1) + { + // we won't find anything here anyway + return -1; + } + } + byte[] tryPattern = codeTable.get(i); + if ((foundCode != -1 || tryPattern.length > foundLen) && Arrays.equals(tryPattern, pattern)) + { + foundCode = i; + foundLen = tryPattern.length; + } + } + return foundCode; + } + + /** + * Init the code table with 1 byte entries and the EOD and CLEAR_TABLE + * markers. + */ + private List createCodeTable() + { + List codeTable = new ArrayList<>(4096); + for (int i = 0; i < 256; ++i) + { + codeTable.add(new byte[] { (byte) (i & 0xFF) }); + } + codeTable.add(null); // 256 EOD + codeTable.add(null); // 257 CLEAR_TABLE + return codeTable; + } + + /** + * Calculate the appropriate chunk size + * + * @param tabSize the size of the code table + * @param earlyChange 0 or 1 for early chunk increase + * + * @return a value between 9 and 12 + */ + private int calculateChunk(int tabSize, int earlyChange) + { + if (tabSize >= 2048 - earlyChange) + { + return 12; + } + if (tabSize >= 1024 - earlyChange) + { + return 11; + } + if (tabSize >= 512 - earlyChange) + { + return 10; + } + return 9; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java new file mode 100644 index 00000000000..a675c757093 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/MissingImageReaderException.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; + +/** + * Thrown when a required JAI ImageReader is missing. + * + * @author John Hewson + */ +public class MissingImageReaderException extends IOException +{ + /** + * + */ + private static final long serialVersionUID = 1L; + + public MissingImageReaderException(String message) + { + super(message); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java new file mode 100644 index 00000000000..27266000f94 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java @@ -0,0 +1,415 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; + +/** + * Helper class to contain predictor decoding used by Flate and LZW filter. + * To see the history, look at the FlateFilter class. + */ +public final class Predictor +{ + + private Predictor() + { + } + + /** + * Decodes a single line of data in-place. + * @param predictor Predictor value for the current line + * @param colors Number of color components, from decode parameters. + * @param bitsPerComponent Number of bits per components, from decode parameters. + * @param columns Number samples in a row, from decode parameters. + * @param actline Current (active) line to decode. Data will be decoded in-place, + * i.e. - the contents of this buffer will be modified. + * @param lastline The previous decoded line. When decoding the first line, this + * parameter should be an empty byte array of the same length as + * actline. + */ + static void decodePredictorRow(int predictor, int colors, int bitsPerComponent, int columns, byte[] actline, byte[] lastline) + { + if (predictor == 1) + { + // no prediction + return; + } + final int bitsPerPixel = colors * bitsPerComponent; + final int bytesPerPixel = (bitsPerPixel + 7) / 8; + final int rowlength = actline.length; + switch (predictor) + { + case 2: + // PRED TIFF SUB + if (bitsPerComponent == 8) + { + // for 8 bits per component it is the same algorithm as PRED SUB of PNG format + for (int p = bytesPerPixel; p < rowlength; p++) + { + int sub = actline[p] & 0xff; + int left = actline[p - bytesPerPixel] & 0xff; + actline[p] = (byte) (sub + left); + } + break; + } + if (bitsPerComponent == 16) + { + for (int p = bytesPerPixel; p < rowlength; p += 2) + { + int sub = ((actline[p] & 0xff) << 8) + (actline[p + 1] & 0xff); + int left = (((actline[p - bytesPerPixel] & 0xff) << 8) + + (actline[p - bytesPerPixel + 1] & 0xff)); + actline[p] = (byte) (((sub + left) >> 8) & 0xff); + actline[p + 1] = (byte) ((sub + left) & 0xff); + } + break; + } + if (bitsPerComponent == 1 && colors == 1) + { + // bytesPerPixel cannot be used: + // "A row shall occupy a whole number of bytes, rounded up if necessary. + // Samples and their components shall be packed into bytes + // from high-order to low-order bits." + for (int p = 0; p < rowlength; p++) + { + for (int bit = 7; bit >= 0; --bit) + { + int sub = (actline[p] >> bit) & 1; + if (p == 0 && bit == 7) + { + continue; + } + int left; + if (bit == 7) + { + // use bit #0 from previous byte + left = actline[p - 1] & 1; + } + else + { + // use "previous" bit + left = (actline[p] >> (bit + 1)) & 1; + } + if (((sub + left) & 1) == 0) + { + // reset bit + actline[p] = (byte) (actline[p] & ~(1 << bit)); + } + else + { + // set bit + actline[p] = (byte) (actline[p] | (1 << bit)); + } + } + } + break; + } + // everything else, i.e. bpc 2 and 4, but has been tested for bpc 1 and 8 too + int elements = columns * colors; + for (int p = colors; p < elements; ++p) + { + int bytePosSub = p * bitsPerComponent / 8; + int bitPosSub = 8 - p * bitsPerComponent % 8 - bitsPerComponent; + int bytePosLeft = (p - colors) * bitsPerComponent / 8; + int bitPosLeft = 8 - (p - colors) * bitsPerComponent % 8 - bitsPerComponent; + + int sub = getBitSeq(actline[bytePosSub], bitPosSub, bitsPerComponent); + int left = getBitSeq(actline[bytePosLeft], bitPosLeft, bitsPerComponent); + actline[bytePosSub] = (byte) calcSetBitSeq(actline[bytePosSub], bitPosSub, bitsPerComponent, sub + left); + } + break; + case 10: + // PRED NONE + // do nothing + break; + case 11: + // PRED SUB + for (int p = bytesPerPixel; p < rowlength; p++) + { + int sub = actline[p]; + int left = actline[p - bytesPerPixel]; + actline[p] = (byte) (sub + left); + } + break; + case 12: + // PRED UP + for (int p = 0; p < rowlength; p++) + { + int up = actline[p] & 0xff; + int prior = lastline[p] & 0xff; + actline[p] = (byte) ((up + prior) & 0xff); + } + break; + case 13: + // PRED AVG + for (int p = 0; p < rowlength; p++) + { + int avg = actline[p] & 0xff; + int left = p - bytesPerPixel >= 0 ? actline[p - bytesPerPixel] & 0xff : 0; + int up = lastline[p] & 0xff; + actline[p] = (byte) ((avg + (left + up) / 2) & 0xff); + } + break; + case 14: + // PRED PAETH + for (int p = 0; p < rowlength; p++) + { + int paeth = actline[p] & 0xff; + int a = p - bytesPerPixel >= 0 ? actline[p - bytesPerPixel] & 0xff : 0;// left + int b = lastline[p] & 0xff;// upper + int c = p - bytesPerPixel >= 0 ? lastline[p - bytesPerPixel] & 0xff : 0;// upperleft + int value = a + b - c; + int absa = Math.abs(value - a); + int absb = Math.abs(value - b); + int absc = Math.abs(value - c); + + if (absa <= absb && absa <= absc) + { + actline[p] = (byte) ((paeth + a) & 0xff); + } + else if (absb <= absc) + { + actline[p] = (byte) ((paeth + b) & 0xff); + } + else + { + actline[p] = (byte) ((paeth + c) & 0xff); + } + } + break; + default: + break; + } + } + + static void decodePredictor(int predictor, int colors, int bitsPerComponent, int columns, InputStream in, OutputStream out) + throws IOException + { + if (predictor == 1) + { + // no prediction + IOUtils.copy(in, out); + } + else + { + // calculate sizes + final int rowlength = calculateRowLength(colors, bitsPerComponent, columns); + byte[] actline = new byte[rowlength]; + byte[] lastline = new byte[rowlength]; + + int linepredictor = predictor; + + while (in.available() > 0) + { + // test for PNG predictor; each value >= 10 (not only 15) indicates usage of PNG predictor + if (predictor >= 10) + { + // PNG predictor; each row starts with predictor type (0, 1, 2, 3, 4) + // read per line predictor + linepredictor = in.read(); + if (linepredictor == -1) + { + return; + } + // add 10 to tread value 0 as 10, 1 as 11, ... + linepredictor += 10; + } + + // read line + int i, offset = 0; + while (offset < rowlength && ((i = in.read(actline, offset, rowlength - offset)) != -1)) + { + offset += i; + } + + decodePredictorRow(linepredictor, colors, bitsPerComponent, columns, actline, lastline); + System.arraycopy(actline, 0, lastline, 0, rowlength); + out.write(actline); + } + } + } + + static int calculateRowLength(int colors, int bitsPerComponent, int columns) + { + final int bitsPerPixel = colors * bitsPerComponent; + return (columns * bitsPerPixel + 7) / 8; + } + + // get value from bit interval from a byte + static int getBitSeq(int by, int startBit, int bitSize) + { + int mask = ((1 << bitSize) - 1); + return (by >>> startBit) & mask; + } + + // set value in a bit interval and return that value + static int calcSetBitSeq(int by, int startBit, int bitSize, int val) + { + int mask = ((1 << bitSize) - 1); + int truncatedVal = val & mask; + mask = ~(mask << startBit); + return (by & mask) | (truncatedVal << startBit); + } + + /** + * Wraps and OutputStream in a predictor decoding stream as necessary. + * If no predictor is specified by the parameters, the original stream is returned as is. + * + * @param out The stream to which decoded data should be written + * @param decodeParams Decode parameters for the stream + * @return An OutputStream is returned, which will write decoded data + * into the given stream. If no predictor is specified, the original stream is returned. + */ + static OutputStream wrapPredictor(OutputStream out, COSDictionary decodeParams) + { + int predictor = decodeParams.getInt(COSName.PREDICTOR); + if (predictor > 1) + { + int colors = Math.min(decodeParams.getInt(COSName.COLORS, 1), 32); + int bitsPerPixel = decodeParams.getInt(COSName.BITS_PER_COMPONENT, 8); + int columns = decodeParams.getInt(COSName.COLUMNS, 1); + + return new PredictorOutputStream(out, predictor, colors, bitsPerPixel, columns); + } + else + { + return out; + } + } + + /** + * Output stream that implements predictor decoding. Data is buffered until a complete + * row is available, which is then decoded and written to the underlying stream. + * The previous row is retained for decoding the next row. + */ + private static final class PredictorOutputStream extends FilterOutputStream + { + // current predictor type + private int predictor; + // image decode parameters + private final int colors; + private final int bitsPerComponent; + private final int columns; + private final int rowLength; + // PNG predictor (predictor>=10) means every row has a (potentially different) + // predictor value + private final boolean predictorPerRow; + + // data buffers + private byte[] currentRow, lastRow; + // amount of data in the current row + private int currentRowData = 0; + // was the per-row predictor value read for the current row being processed + private boolean predictorRead = false; + + PredictorOutputStream(OutputStream out, int predictor, int colors, int bitsPerComponent, int columns) + { + super(out); + this.predictor = predictor; + this.colors = colors; + this.bitsPerComponent = bitsPerComponent; + this.columns = columns; + this.rowLength = calculateRowLength(colors, bitsPerComponent, columns); + this.predictorPerRow = predictor >= 10; + currentRow = new byte[rowLength]; + lastRow = new byte[rowLength]; + } + + @Override + public void write(byte[] bytes) throws IOException + { + write(bytes, 0, bytes.length); + } + + @Override + public void write(byte[] bytes, int off, int len) throws IOException + { + int currentOffset = off; + int maxOffset = currentOffset + len; + while (currentOffset < maxOffset) + { + if (predictorPerRow && currentRowData == 0 && !predictorRead) + { + // PNG predictor; each row starts with predictor type (0, 1, 2, 3, 4) + // read per line predictor, add 10 to tread value 0 as 10, 1 as 11, ... + predictor = bytes[currentOffset] + 10; + currentOffset++; + predictorRead = true; + } + else + { + int toRead = Math.min(rowLength - currentRowData, maxOffset - currentOffset); + System.arraycopy(bytes, currentOffset, currentRow, currentRowData, toRead); + currentRowData += toRead; + currentOffset += toRead; + + // current row is filled, decode it, write it to underlying stream, + // and reset the state. + if (currentRowData == currentRow.length) + { + decodeAndWriteRow(); + } + } + } + } + + private void decodeAndWriteRow() throws IOException + { + decodePredictorRow(predictor, colors, bitsPerComponent, columns, currentRow, lastRow); + out.write(currentRow); + flipRows(); + } + + /** + * Flips the row buffers (to avoid copying), and resets the current-row index + * and predictorRead flag + */ + private void flipRows() + { + byte[] temp = lastRow; + lastRow = currentRow; + currentRow = temp; + currentRowData = 0; + predictorRead = false; + } + + @Override + public void flush() throws IOException + { + // The last row is allowed to be incomplete, and should be completed with zeros. + if (currentRowData > 0) + { + Arrays.fill(currentRow, currentRowData, rowLength, (byte)0); + decodeAndWriteRow(); + } + super.flush(); + } + + @Override + public void write(int i) throws IOException + { + throw new UnsupportedOperationException("Not supported"); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/RunLengthDecodeFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/RunLengthDecodeFilter.java new file mode 100644 index 00000000000..c9dab1762ed --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/RunLengthDecodeFilter.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; + +/** + * Decompresses data encoded using a byte-oriented run-length encoding algorithm, + * reproducing the original text or binary data + * + * @author Ben Litchfield + */ +final class RunLengthDecodeFilter extends Filter +{ + private static final Log LOG = LogFactory.getLog(RunLengthDecodeFilter.class); + private static final int RUN_LENGTH_EOD = 128; + + @Override + public DecodeResult decode(InputStream encoded, OutputStream decoded, + COSDictionary parameters, int index) throws IOException + { + int dupAmount; + byte[] buffer = new byte[128]; + while ((dupAmount = encoded.read()) != -1 && dupAmount != RUN_LENGTH_EOD) + { + if (dupAmount <= 127) + { + int amountToCopy = dupAmount + 1; + int compressedRead; + while (amountToCopy > 0) + { + compressedRead = encoded.read(buffer, 0, amountToCopy); + // EOF reached? + if (compressedRead == -1) + { + break; + } + decoded.write(buffer, 0, compressedRead); + amountToCopy -= compressedRead; + } + } + else + { + int dupByte = encoded.read(); + // EOF reached? + if (dupByte == -1) + { + break; + } + for (int i = 0; i < 257 - dupAmount; i++) + { + decoded.write(dupByte); + } + } + } + return new DecodeResult(parameters); + } + + @Override + protected void encode(InputStream input, OutputStream encoded, COSDictionary parameters) + throws IOException + { + LOG.warn("RunLengthDecodeFilter.encode is not implemented yet, skipping this stream."); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFExtension.java b/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFExtension.java new file mode 100644 index 00000000000..392f43feb06 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFExtension.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2012, Harald Kuhr + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name "TwelveMonkeys" nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.apache.pdfbox.filter; + +/** + * TIFFExtension + * + * @author Harald Kuhr + * @author last modified by $Author: haraldk$ + * @version $Id: TIFFExtension.java,v 1.0 08.05.12 16:45 haraldk Exp$ + */ +interface TIFFExtension { + /** CCITT T.4/Group 3 Fax compression. */ + int COMPRESSION_CCITT_T4 = 3; + /** CCITT T.6/Group 4 Fax compression. */ + int COMPRESSION_CCITT_T6 = 4; + /** LZW Compression. Was baseline, but moved to extension due to license issues in the LZW algorithm. */ + int COMPRESSION_LZW = 5; + /** Deprecated. For backwards compatibility only ("Old-style" JPEG). */ + int COMPRESSION_OLD_JPEG = 6; + /** JPEG Compression (lossy). */ + int COMPRESSION_JPEG = 7; + /** Custom: PKZIP-style Deflate. */ + int COMPRESSION_DEFLATE = 32946; + /** Adobe-style Deflate. */ + int COMPRESSION_ZLIB = 8; + + int PHOTOMETRIC_SEPARATED = 5; + int PHOTOMETRIC_YCBCR = 6; + int PHOTOMETRIC_CIELAB = 8; + int PHOTOMETRIC_ICCLAB = 9; + int PHOTOMETRIC_ITULAB = 10; + + int PLANARCONFIG_PLANAR = 2; + + int PREDICTOR_HORIZONTAL_DIFFERENCING = 2; + int PREDICTOR_HORIZONTAL_FLOATINGPOINT = 3; + + int FILL_RIGHT_TO_LEFT = 2; + + int SAMPLEFORMAT_INT = 2; + int SAMPLEFORMAT_FP = 3; + int SAMPLEFORMAT_UNDEFINED = 4; + + int YCBCR_POSITIONING_CENTERED = 1; + int YCBCR_POSITIONING_COSITED = 2; + + /** Deprecated. For backwards compatibility only ("Old-style" JPEG). */ + int JPEG_PROC_BASELINE = 1; + /** Deprecated. For backwards compatibility only ("Old-style" JPEG). */ + int JPEG_PROC_LOSSLESS = 14; + + /** For use with Photometric: 5 (Separated), when image data is in CMYK color space. */ + int INKSET_CMYK = 1; + + /** + * For use with Photometric: 5 (Separated), when image data is in a color space other than CMYK. + * See {@link com.twelvemonkeys.imageio.metadata.exif.TIFF#TAG_INK_NAMES InkNames} field for a + * description of the inks to be used. + */ + int INKSET_NOT_CMYK = 2; + + int ORIENTATION_TOPRIGHT = 2; + int ORIENTATION_BOTRIGHT = 3; + int ORIENTATION_BOTLEFT = 4; + int ORIENTATION_LEFTTOP = 5; + int ORIENTATION_RIGHTTOP = 6; + int ORIENTATION_RIGHTBOT = 7; + int ORIENTATION_LEFTBOT = 8; + + int GROUP3OPT_2DENCODING = 1; + int GROUP3OPT_UNCOMPRESSED = 2; + int GROUP3OPT_FILLBITS = 4; + int GROUP3OPT_BYTEALIGNED = 8; + int GROUP4OPT_UNCOMPRESSED = 2; + int GROUP4OPT_BYTEALIGNED = 4; + int COMPRESSION_CCITT_MODIFIED_HUFFMAN_RLE = 2; + int FILL_LEFT_TO_RIGHT = 1; // Default +} + diff --git a/src/org/pdfbox/filter/package.html b/pdfbox/src/main/java/org/apache/pdfbox/filter/package.html similarity index 100% rename from src/org/pdfbox/filter/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/filter/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/IOUtils.java b/pdfbox/src/main/java/org/apache/pdfbox/io/IOUtils.java new file mode 100644 index 00000000000..f11f219f3da --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/IOUtils.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.pdfbox.io; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class contains various I/O-related methods. + */ +public final class IOUtils +{ + + //TODO PDFBox should really use Apache Commons IO. + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(IOUtils.class); + + private IOUtils() + { + //Utility class. Don't instantiate. + } + + /** + * Reads the input stream and returns its contents as a byte array. + * @param in the input stream to read from. + * @return the byte array + * @throws IOException if an I/O error occurs + */ + public static byte[] toByteArray(InputStream in) throws IOException + { + ByteArrayOutputStream baout = new ByteArrayOutputStream(); + copy(in, baout); + return baout.toByteArray(); + } + + /** + * Copies all the contents from the given input stream to the given output stream. + * @param input the input stream + * @param output the output stream + * @return the number of bytes that have been copied + * @throws IOException if an I/O error occurs + */ + public static long copy(InputStream input, OutputStream output) throws IOException + { + byte[] buffer = new byte[4096]; + long count = 0; + int n = 0; + while (-1 != (n = input.read(buffer))) + { + output.write(buffer, 0, n); + count += n; + } + return count; + } + + /** + * Populates the given buffer with data read from the input stream. If the data doesn't + * fit the buffer, only the data that fits in the buffer is read. If the data is less than + * fits in the buffer, the buffer is not completely filled. + * @param in the input stream to read from + * @param buffer the buffer to fill + * @return the number of bytes written to the buffer + * @throws IOException if an I/O error occurs + */ + public static long populateBuffer(InputStream in, byte[] buffer) throws IOException + { + int remaining = buffer.length; + while (remaining > 0) + { + int bufferWritePos = buffer.length - remaining; + int bytesRead = in.read(buffer, bufferWritePos, remaining); + if (bytesRead < 0) + { + break; //EOD + } + remaining -= bytesRead; + } + return buffer.length - remaining; + } + + /** + * Null safe close of the given {@link Closeable} suppressing any exception. + * + * @param closeable to be closed + */ + public static void closeQuietly(Closeable closeable) + { + try + { + if (closeable != null) + { + closeable.close(); + } + } + catch (IOException ioe) + { + LOG.debug("An exception occured while trying to close - ignoring", ioe); + // ignore + } + } + + /** + * Try to close an IO resource and log and return if there was an exception. + * + *

An exception is only returned if the IOException passed in is null. + * + * @param closeable to be closed + * @param logger the logger to be used so that logging appears under that log instance + * @param resourceName the name to appear in the log output + * @param initialException to be closed + * @return the IOException is there was any but only if initialException is null + */ + public static IOException closeAndLogException(Closeable closeable, Log logger, String resourceName, IOException initialException) + { + try + { + closeable.close(); + } + catch (IOException ioe) + { + logger.warn("Error closing " + resourceName, ioe); + if (initialException == null) + { + return ioe; + } + } + return initialException; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/MemoryUsageSetting.java b/pdfbox/src/main/java/org/apache/pdfbox/io/MemoryUsageSetting.java new file mode 100644 index 00000000000..1060da26394 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/MemoryUsageSetting.java @@ -0,0 +1,281 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.File; + +/** + * Controls how memory/temporary files are used for + * buffering streams etc. + */ +public final class MemoryUsageSetting +{ + private final boolean useMainMemory; + private final boolean useTempFile; + + /** maximum number of main-memory bytes allowed to be used; + * -1 means 'unrestricted' */ + private final long maxMainMemoryBytes; + + /** maximum number of bytes allowed for storage at all (main-memory+file); + * -1 means 'unrestricted' */ + private final long maxStorageBytes; + + /** directory to be used for scratch file */ + private File tempDir; + + /** + * Private constructor for setup buffering memory usage called by one of the setup methods. + * + * @param useMainMemory if true main memory usage is enabled; in case of + * false and useTempFile is false too + * we set this to true + * @param useTempFile if true using of temporary file(s) is enabled + * @param maxMainMemoryBytes maximum number of main-memory to be used; + * if -1 means 'unrestricted'; + * if 0 we only use temporary file if useTempFile + * is true otherwise main-memory usage will have restriction + * defined by maxStorageBytes + * @param maxStorageBytes maximum size the main-memory and temporary file(s) may have all together; + * 0 or less will be ignored; if it is less than + * maxMainMemoryBytes we use maxMainMemoryBytes value instead + */ + private MemoryUsageSetting(boolean useMainMemory, boolean useTempFile, + long maxMainMemoryBytes, long maxStorageBytes) + { + // do some checks; adjust values as needed to get consistent setting + boolean locUseMainMemory = useTempFile ? useMainMemory : true; + long locMaxMainMemoryBytes = useMainMemory ? maxMainMemoryBytes : -1; + long locMaxStorageBytes = maxStorageBytes > 0 ? maxStorageBytes : -1; + + if (locMaxMainMemoryBytes < -1) + { + locMaxMainMemoryBytes = -1; + } + + if (locUseMainMemory && (locMaxMainMemoryBytes == 0)) + { + if (useTempFile) { + locUseMainMemory = false; + } + else + { + locMaxMainMemoryBytes = locMaxStorageBytes; + } + } + + if (locUseMainMemory && (locMaxStorageBytes > -1) && + ((locMaxMainMemoryBytes == -1) || (locMaxMainMemoryBytes > locMaxStorageBytes))) + { + locMaxStorageBytes = locMaxMainMemoryBytes; + } + + + this.useMainMemory = locUseMainMemory; + this.useTempFile = useTempFile; + this.maxMainMemoryBytes = locMaxMainMemoryBytes; + this.maxStorageBytes = locMaxStorageBytes; + } + + /** + * Setups buffering memory usage to only use main-memory (no temporary file) + * which is not restricted in size. + */ + public static MemoryUsageSetting setupMainMemoryOnly() + { + return setupMainMemoryOnly(-1); + } + + /** + * Setups buffering memory usage to only use main-memory with the defined maximum. + * + * @param maxMainMemoryBytes maximum number of main-memory to be used; + * -1 for no restriction; + * 0 will also be interpreted here as no restriction + */ + public static MemoryUsageSetting setupMainMemoryOnly(long maxMainMemoryBytes) + { + return new MemoryUsageSetting(true, false, maxMainMemoryBytes, maxMainMemoryBytes); + } + + /** + * Setups buffering memory usage to only use temporary file(s) (no main-memory) + * with not restricted size. + */ + public static MemoryUsageSetting setupTempFileOnly() + { + return setupTempFileOnly(-1); + } + + /** + * Setups buffering memory usage to only use temporary file(s) (no main-memory) + * with the specified maximum size. + * + * @param maxStorageBytes maximum size the temporary file(s) may have all together; + * -1 for no restriction; + * 0 will also be interpreted here as no restriction + */ + public static MemoryUsageSetting setupTempFileOnly(long maxStorageBytes) + { + return new MemoryUsageSetting(false, true, 0, maxStorageBytes); + } + + /** + * Setups buffering memory usage to use a portion of main-memory and additionally + * temporary file(s) in case the specified portion is exceeded. + * + * @param maxMainMemoryBytes maximum number of main-memory to be used; + * if -1 this is the same as {@link #setupMainMemoryOnly()}; + * if 0 this is the same as {@link #setupTempFileOnly()} + */ + public static MemoryUsageSetting setupMixed(long maxMainMemoryBytes) + { + return setupMixed(maxMainMemoryBytes, -1); + } + + /** + * Setups buffering memory usage to use a portion of main-memory and additionally + * temporary file(s) in case the specified portion is exceeded. + * + * @param maxMainMemoryBytes maximum number of main-memory to be used; + * if -1 this is the same as {@link #setupMainMemoryOnly()}; + * if 0 this is the same as {@link #setupTempFileOnly()} + * @param maxStorageBytes maximum size the main-memory and temporary file(s) may have all together; + * 0 or less will be ignored; if it is less than + * maxMainMemoryBytes we use maxMainMemoryBytes value instead + */ + public static MemoryUsageSetting setupMixed(long maxMainMemoryBytes, long maxStorageBytes) + { + return new MemoryUsageSetting(true, true, maxMainMemoryBytes, maxStorageBytes); + } + + /** + * Returns a copy of this instance with the maximum memory/storage restriction + * divided by the provided number of parallel uses. + * + * @param parallelUseCount specifies the number of parallel usages for the setting to + * be returned + * + * @return a copy from this instance with the maximum memory/storage restrictions + * adjusted to the multiple usage + */ + public MemoryUsageSetting getPartitionedCopy(int parallelUseCount) + { + long newMaxMainMemoryBytes = maxMainMemoryBytes <= 0 ? maxMainMemoryBytes : + maxMainMemoryBytes / parallelUseCount; + long newMaxStorageBytes = maxStorageBytes <= 0 ? maxStorageBytes : + maxStorageBytes / parallelUseCount; + + MemoryUsageSetting copy = new MemoryUsageSetting( useMainMemory, useTempFile, + newMaxMainMemoryBytes, newMaxStorageBytes ); + copy.tempDir = tempDir; + + return copy; + } + + /** + * Sets directory to be used for temporary files. + * + * @param tempDir directory for temporary files + * + * @return this instance + */ + public MemoryUsageSetting setTempDir(File tempDir) + { + this.tempDir = tempDir; + return this; + } + + /** + * Returns true if main-memory is to be used. + * + *

If this returns false it is ensured {@link #useTempFile()} + * returns true.

+ */ + public boolean useMainMemory() + { + return useMainMemory; + } + + /** + * Returns true if temporary file is to be used. + * + *

If this returns false it is ensured {@link #useMainMemory} + * returns true.

+ */ + public boolean useTempFile() + { + return useTempFile; + } + + /** + * Returns true if maximum main memory is restricted to a specific + * number of bytes. + */ + public boolean isMainMemoryRestricted() + { + return maxMainMemoryBytes >= 0; + } + + /** + * Returns true if maximum amount of storage is restricted to a specific + * number of bytes. + */ + public boolean isStorageRestricted() + { + return maxStorageBytes > 0; + } + + /** + * Returns maximum size of main-memory in bytes to be used. + */ + public long getMaxMainMemoryBytes() + { + return maxMainMemoryBytes; + } + + /** + * Returns maximum size of storage bytes to be used + * (main-memory in temporary files all together). + */ + public long getMaxStorageBytes() + { + return maxStorageBytes; + } + + /** + * Returns directory to be used for temporary files or null + * if it was not set. + */ + public File getTempDir() + { + return tempDir; + } + + @Override + public String toString() + { + return useMainMemory ? + (useTempFile ? "Mixed mode with max. of " + maxMainMemoryBytes + " main memory bytes" + + (isStorageRestricted() ? " and max. of " + maxStorageBytes + " storage bytes" : + " and unrestricted scratch file size") : + (isMainMemoryRestricted() ? "Main memory only with max. of " + maxMainMemoryBytes + " bytes" : + "Main memory only with no size restriction")): + (isStorageRestricted() ? "Scratch file only with max. of " + maxStorageBytes + " bytes" : + "Scratch file only with no size restriction"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java new file mode 100644 index 00000000000..ae04fe2900d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +/** + * An interface to allow data to be stored completely in memory or + * to use a scratch file on the disk. + * + * @author Ben Litchfield + */ +public interface RandomAccess extends RandomAccessRead, RandomAccessWrite +{ + // super interface for both read and write +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java new file mode 100644 index 00000000000..d9c619b4cb7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java @@ -0,0 +1,520 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * An implementation of the RandomAccess interface to store data in memory. + * The data will be stored in chunks organized in an ArrayList. + */ +public class RandomAccessBuffer implements RandomAccess, Cloneable +{ + // default chunk size is 1kb + private static final int DEFAULT_CHUNK_SIZE = 1024; + // use the default chunk size + private int chunkSize = DEFAULT_CHUNK_SIZE; + // list containing all chunks + private List bufferList = null; + // current chunk + private byte[] currentBuffer; + // current pointer to the whole buffer + private long pointer; + // current pointer for the current chunk + private int currentBufferPointer; + // size of the whole buffer + private long size; + // current chunk list index + private int bufferListIndex; + // maximum chunk list index + private int bufferListMaxIndex; + + /** + * Default constructor. + */ + public RandomAccessBuffer() + { + this(DEFAULT_CHUNK_SIZE); + } + + /** + * Default constructor. + */ + private RandomAccessBuffer(int definedChunkSize) + { + // starting with one chunk + bufferList = new ArrayList<>(); + chunkSize = definedChunkSize; + currentBuffer = new byte[chunkSize]; + bufferList.add(currentBuffer); + pointer = 0; + currentBufferPointer = 0; + size = 0; + bufferListIndex = 0; + bufferListMaxIndex = 0; + } + + /** + * Create a random access buffer using the given byte array. + * + * @param input the byte array to be read + */ + public RandomAccessBuffer(byte[] input) + { + // this is a special case. The given byte array is used as the one + // and only chunk. + bufferList = new ArrayList<>(1); + chunkSize = input.length; + currentBuffer = input; + bufferList.add(currentBuffer); + pointer = 0; + currentBufferPointer = 0; + size = chunkSize; + bufferListIndex = 0; + bufferListMaxIndex = 0; + } + + /** + * Create a random access buffer of the given input stream by copying the data. + * + * @param input the input stream to be read + * @throws IOException if something went wrong while copying the data + */ + public RandomAccessBuffer(InputStream input) throws IOException + { + this(); + byte[] byteBuffer = new byte[8192]; + int bytesRead = 0; + while ((bytesRead = input.read(byteBuffer)) > -1) + { + write(byteBuffer, 0, bytesRead); + } + seek(0); + } + + @Override + public RandomAccessBuffer clone() + { + RandomAccessBuffer copy = new RandomAccessBuffer(chunkSize); + + copy.bufferList = new ArrayList<>(bufferList.size()); + for (byte [] buffer : bufferList) + { + byte [] newBuffer = new byte [buffer.length]; + System.arraycopy(buffer,0,newBuffer,0,buffer.length); + copy.bufferList.add(newBuffer); + } + if (currentBuffer!=null) + { + copy.currentBuffer = copy.bufferList.get(copy.bufferList.size()-1); + } + else + { + copy.currentBuffer = null; + } + copy.pointer = pointer; + copy.currentBufferPointer = currentBufferPointer; + copy.size = size; + copy.bufferListIndex = bufferListIndex; + copy.bufferListMaxIndex = bufferListMaxIndex; + + return copy; + } + + /** + * {@inheritDoc} + */ + @Override + public void close() throws IOException + { + currentBuffer = null; + bufferList.clear(); + pointer = 0; + currentBufferPointer = 0; + size = 0; + bufferListIndex = 0; + } + + /** + * {@inheritDoc} + */ + @Override + public void clear() + { + bufferList.clear(); + currentBuffer = new byte[chunkSize]; + bufferList.add(currentBuffer); + pointer = 0; + currentBufferPointer = 0; + size = 0; + bufferListIndex = 0; + bufferListMaxIndex = 0; + } + + /** + * {@inheritDoc} + */ + @Override + public void seek(long position) throws IOException + { + checkClosed(); + if (position < 0) + { + throw new IOException("Invalid position "+position); + } + pointer = position; + if (pointer < size) + { + // calculate the chunk list index + bufferListIndex = (int)(pointer / chunkSize); + currentBufferPointer = (int)(pointer % chunkSize); + currentBuffer = bufferList.get(bufferListIndex); + } + else + { + // it is allowed to jump beyond the end of the file + // jump to the end of the buffer + bufferListIndex = bufferListMaxIndex; + currentBuffer = bufferList.get(bufferListIndex); + currentBufferPointer = (int)(size % chunkSize); + } + } + + /** + * {@inheritDoc} + */ + @Override + public long getPosition() throws IOException + { + checkClosed(); + return pointer; + } + + /** + * {@inheritDoc} + */ + @Override + public int read() throws IOException + { + checkClosed(); + if (pointer >= this.size) + { + return -1; + } + if (currentBufferPointer >= chunkSize) + { + if (bufferListIndex >= bufferListMaxIndex) + { + return -1; + } + else + { + currentBuffer = bufferList.get(++bufferListIndex); + currentBufferPointer = 0; + } + } + pointer++; + return currentBuffer[currentBufferPointer++] & 0xff; + } + + /** + * {@inheritDoc} + */ + @Override + public int read(byte[] b, int offset, int length) throws IOException + { + checkClosed(); + if (pointer >= size) + { + return 0; + } + int bytesRead = readRemainingBytes(b, offset, length); + while (bytesRead < length && available() > 0) + { + bytesRead += readRemainingBytes(b, offset + bytesRead, length - bytesRead); + if (currentBufferPointer == chunkSize) + { + nextBuffer(); + } + } + return bytesRead; + } + + private int readRemainingBytes(byte[] b, int offset, int length) throws IOException + { + if (pointer >= size) + { + return 0; + } + int maxLength = (int) Math.min(length, size-pointer); + int remainingBytes = chunkSize - currentBufferPointer; + // no more bytes left + if (remainingBytes == 0) + { + return 0; + } + if (maxLength >= remainingBytes) + { + // copy the remaining bytes from the current buffer + System.arraycopy(currentBuffer, currentBufferPointer, b, offset, remainingBytes); + // end of file reached + currentBufferPointer += remainingBytes; + pointer += remainingBytes; + return remainingBytes; + } + else + { + // copy the remaining bytes from the whole buffer + System.arraycopy(currentBuffer, currentBufferPointer, b, offset, maxLength); + // end of file reached + currentBufferPointer += maxLength; + pointer += maxLength; + return maxLength; + } + } + + /** + * {@inheritDoc} + */ + @Override + public long length() throws IOException + { + checkClosed(); + return size; + } + + /** + * {@inheritDoc} + */ + @Override + public void write(int b) throws IOException + { + checkClosed(); + // end of buffer reached? + if (currentBufferPointer >= chunkSize) + { + if (pointer + chunkSize >= Integer.MAX_VALUE) + { + throw new IOException("RandomAccessBuffer overflow"); + } + expandBuffer(); + } + currentBuffer[currentBufferPointer++] = (byte)b; + pointer++; + if (pointer > this.size) + { + this.size = pointer; + } + // end of buffer reached now? + if (currentBufferPointer >= chunkSize) + { + if (pointer + chunkSize >= Integer.MAX_VALUE) + { + throw new IOException("RandomAccessBuffer overflow"); + } + expandBuffer(); + } + } + + + /** + * {@inheritDoc} + */ + @Override + public void write(byte[] b) throws IOException + { + write(b, 0, b.length); + } + + /** + * {@inheritDoc} + */ + @Override + public void write(byte[] b, int offset, int length) throws IOException + { + checkClosed(); + long newSize = pointer + length; + int remainingBytes = chunkSize - currentBufferPointer; + if (length >= remainingBytes) + { + if (newSize > Integer.MAX_VALUE) + { + throw new IOException("RandomAccessBuffer overflow"); + } + // copy the first bytes to the current buffer + System.arraycopy(b, offset, currentBuffer, currentBufferPointer, remainingBytes); + int newOffset = offset + remainingBytes; + long remainingBytes2Write = length - remainingBytes; + // determine how many buffers are needed for the remaining bytes + int numberOfNewArrays = (int)remainingBytes2Write / chunkSize; + for (int i=0;i= 0) + { + expandBuffer(); + if (remainingBytes2Write > 0) + { + System.arraycopy(b, newOffset, currentBuffer, currentBufferPointer, (int)remainingBytes2Write); + } + currentBufferPointer = (int)remainingBytes2Write; + } + } + else + { + System.arraycopy(b, offset, currentBuffer, currentBufferPointer, length); + currentBufferPointer += length; + } + pointer += length; + if (pointer > this.size) + { + this.size = pointer; + } + } + + /** + * create a new buffer chunk and adjust all pointers and indices. + */ + private void expandBuffer() throws IOException + { + if (bufferListMaxIndex > bufferListIndex) + { + // there is already an existing chunk + nextBuffer(); + } + else + { + // create a new chunk and add it to the buffer + currentBuffer = new byte[chunkSize]; + bufferList.add(currentBuffer); + currentBufferPointer = 0; + bufferListMaxIndex++; + bufferListIndex++; + } + } + + /** + * switch to the next buffer chunk and reset the buffer pointer. + */ + private void nextBuffer() throws IOException + { + if (bufferListIndex == bufferListMaxIndex) + { + throw new IOException("No more chunks available, end of buffer reached"); + } + currentBufferPointer = 0; + currentBuffer = bufferList.get(++bufferListIndex); + } + + /** + * Ensure that the RandomAccessBuffer is not closed + * @throws IOException + */ + private void checkClosed() throws IOException + { + if (currentBuffer==null) + { + // consider that the rab is closed if there is no current buffer + throw new IOException("RandomAccessBuffer already closed"); + } + + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isClosed() + { + return currentBuffer == null; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isEOF() throws IOException + { + checkClosed(); + return pointer >= size; + } + + /** + * {@inheritDoc} + */ + @Override + public int available() throws IOException + { + return (int) Math.min(length() - getPosition(), Integer.MAX_VALUE); + } + + /** + * {@inheritDoc} + */ + @Override + public int peek() throws IOException + { + int result = read(); + if (result != -1) + { + rewind(1); + } + return result; + } + + /** + * {@inheritDoc} + */ + @Override + public void rewind(int bytes) throws IOException + { + checkClosed(); + seek(getPosition() - bytes); + } + + /** + * {@inheritDoc} + */ + @Override + public byte[] readFully(int length) throws IOException + { + byte[] b = new byte[length]; + int bytesRead = read(b); + while (bytesRead < length) + { + bytesRead += read(b, bytesRead, length - bytesRead); + } + return b; + } + + /** + * {@inheritDoc} + */ + @Override + public int read(byte[] b) throws IOException + { + return read(b, 0, b.length); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFileInputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFileInputStream.java new file mode 100644 index 00000000000..8a314bec1b9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFileInputStream.java @@ -0,0 +1,351 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Provides {@link InputStream} access to portions of a file combined with + * buffered reading of content. Start of next bytes to read can be set via seek + * method. + * + * File is accessed via {@link RandomAccessFile} and is read in byte chunks + * which are cached. + * + * @author Timo Boehme + */ +public class RandomAccessBufferedFileInputStream +extends InputStream implements RandomAccessRead +{ + /** + * The prefix for the temp file being used. + */ + private static final String TMP_FILE_PREFIX = "tmpPDFBox"; + + private int pageSizeShift = 12; + private int pageSize = 1 << pageSizeShift; + private long pageOffsetMask = -1L << pageSizeShift; + private int maxCachedPages = 1000; + private File tempFile; + + private byte[] lastRemovedCachePage = null; + + /** Create a LRU page cache. */ + private final Map pageCache = + new LinkedHashMap( maxCachedPages, 0.75f, true ) + { + private static final long serialVersionUID = -6302488539257741101L; + + @Override + protected boolean removeEldestEntry( Map.Entry eldest ) + { + final boolean doRemove = size() > maxCachedPages; + if (doRemove) + { + lastRemovedCachePage = eldest.getValue(); + } + return doRemove; + } + }; + + private long curPageOffset = -1; + private byte[] curPage = new byte[pageSize]; + private int offsetWithinPage = 0; + + private final RandomAccessFile raFile; + private final long fileLength; + private long fileOffset = 0; + private boolean isClosed; + + /** + * Create a random access input stream instance for the file with the given name. + * + * @param filename the filename of the file to be read. + * @throws IOException if something went wrong while accessing the given file. + */ + public RandomAccessBufferedFileInputStream( String filename ) throws IOException + { + this(new File(filename)); + } + + /** + * Create a random access input stream instance for the given file. + * + * @param file the file to be read. + * @throws IOException if something went wrong while accessing the given file. + */ + public RandomAccessBufferedFileInputStream( File file ) throws IOException + { + raFile = new RandomAccessFile(file, "r"); + fileLength = file.length(); + seek(0); + } + + /** + * Create a random access input stream for the given input stream by copying the data to a + * temporary file. + * + * @param input the input stream to be read. It will be closed by this method. + * @throws IOException if something went wrong while creating the temporary file. + */ + public RandomAccessBufferedFileInputStream( InputStream input ) throws IOException + { + tempFile = createTmpFile(input); + fileLength = tempFile.length(); + raFile = new RandomAccessFile(tempFile, "r"); + seek(0); + } + + private File createTmpFile(InputStream input) throws IOException + { + File tmpFile = File.createTempFile(TMP_FILE_PREFIX, ".pdf"); + try (FileOutputStream fos = new FileOutputStream(tmpFile)) + { + IOUtils.copy(input, fos); + return tmpFile; + } + finally + { + IOUtils.closeQuietly(input); + } + } + + /** + * Remove the temporary file. A temporary file is created if this class is instantiated with an InputStream + */ + private void deleteTempFile() + { + if (tempFile != null) + { + tempFile.delete(); + } + } + + /** Returns offset in file at which next byte would be read. */ + @Override + public long getPosition() + { + return fileOffset; + } + + /** + * Seeks to new position. If new position is outside of current page the new page is either + * taken from cache or read from file and added to cache. + * + * @param newOffset the position to seek to. + * @throws java.io.IOException if something went wrong. + */ + @Override + public void seek( final long newOffset ) throws IOException + { + final long newPageOffset = newOffset & pageOffsetMask; + if ( newPageOffset != curPageOffset ) + { + byte[] newPage = pageCache.get( newPageOffset ); + if ( newPage == null ) + { + raFile.seek( newPageOffset ); + newPage = readPage(); + pageCache.put( newPageOffset, newPage ); + } + curPageOffset = newPageOffset; + curPage = newPage; + } + + offsetWithinPage = (int) ( newOffset - curPageOffset ); + fileOffset = newOffset; + } + + /** + * Reads a page with data from current file position. If we have a + * previously removed page from cache the buffer of this page is reused. + * Otherwise a new byte buffer is created. + */ + private byte[] readPage() throws IOException + { + byte[] page; + + if ( lastRemovedCachePage != null ) + { + page = lastRemovedCachePage; + lastRemovedCachePage = null; + } + else + { + page = new byte[pageSize]; + } + + int readBytes = 0; + while ( readBytes < pageSize ) + { + int curBytesRead = raFile.read( page, readBytes, pageSize - readBytes); + if (curBytesRead < 0) + { + // EOF + break; + } + readBytes += curBytesRead; + } + + return page; + } + + @Override + public int read() throws IOException + { + if ( fileOffset >= fileLength ) + { + return -1; + } + + if ( offsetWithinPage == pageSize ) + { + seek( fileOffset ); + } + + fileOffset++; + return curPage[offsetWithinPage++] & 0xff; + } + + @Override + public int read(byte[] b) throws IOException + { + return read(b, 0, b.length); + } + + @Override + public int read( byte[] b, int off, int len ) throws IOException + { + if ( fileOffset >= fileLength ) + { + return -1; + } + + if ( offsetWithinPage == pageSize ) + { + seek( fileOffset ); + } + + int commonLen = Math.min( pageSize - offsetWithinPage, len ); + if ( ( fileLength - fileOffset ) < pageSize ) + { + commonLen = Math.min( commonLen, (int) ( fileLength - fileOffset ) ); + } + + System.arraycopy( curPage, offsetWithinPage, b, off, commonLen ); + + offsetWithinPage += commonLen; + fileOffset += commonLen; + + return commonLen; + } + + @Override + public int available() throws IOException + { + return (int) Math.min( fileLength - fileOffset, Integer.MAX_VALUE ); + } + + @Override + public long skip( long n ) throws IOException + { + // test if we have to reduce skip count because of EOF + long toSkip = n; + + if ( fileLength - fileOffset < toSkip ) + { + toSkip = fileLength - fileOffset; + } + + if ( ( toSkip < pageSize ) && ( ( offsetWithinPage + toSkip ) <= pageSize ) ) + { + // we can skip within current page + offsetWithinPage += toSkip; + fileOffset += toSkip; + } + else + { + // seek to the page we will get after skipping + seek( fileOffset + toSkip ); + } + + return toSkip; + } + + @Override + public long length() throws IOException + { + return fileLength; + } + + @Override + public void close() throws IOException + { + raFile.close(); + deleteTempFile(); + pageCache.clear(); + isClosed = true; + } + + @Override + public boolean isClosed() + { + return isClosed; + } + + @Override + public int peek() throws IOException + { + int result = read(); + if (result != -1) + { + rewind(1); + } + return result; + } + + @Override + public void rewind(int bytes) throws IOException + { + seek(getPosition() - bytes); + } + + @Override + public byte[] readFully(int length) throws IOException + { + byte[] b = new byte[length]; + int bytesRead = read(b); + while(bytesRead < length) + { + bytesRead += read(b, bytesRead, length-bytesRead); + } + return b; + } + + @Override + public boolean isEOF() throws IOException + { + int peek = peek(); + return peek == -1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java new file mode 100644 index 00000000000..11f1179fc55 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + * A RandomAccess implementation which allows data to be stored in a scratch file on the disk to + * reduce memory consumption. + * + * @author Ben Litchfield + */ +public class RandomAccessFile implements RandomAccess +{ + private final java.io.RandomAccessFile ras; + private boolean isClosed; + + /** + * Constructor. + * + * @param file The file to write the data to. + * @param mode The writing mode. + * @throws FileNotFoundException If the file cannot be created. + */ + public RandomAccessFile(File file, String mode) throws FileNotFoundException + { + ras = new java.io.RandomAccessFile(file, mode); + } + + @Override + public void close() throws IOException + { + ras.close(); + isClosed = true; + } + + @Override + public void clear() throws IOException + { + checkClosed(); + ras.seek(0); + ras.setLength(0); + } + + @Override + public void seek(long position) throws IOException + { + checkClosed(); + ras.seek(position); + } + + @Override + public long getPosition() throws IOException + { + checkClosed(); + return ras.getFilePointer(); + } + + @Override + public int read() throws IOException + { + checkClosed(); + return ras.read(); + } + + @Override + public int read(byte[] b) throws IOException + { + checkClosed(); + return ras.read(b); + } + + @Override + public int read(byte[] b, int offset, int length) throws IOException + { + checkClosed(); + return ras.read(b, offset, length); + } + + @Override + public long length() throws IOException + { + checkClosed(); + return ras.length(); + } + + /** + * Ensure that the RandomAccessFile is not closed + * + * @throws IOException + */ + private void checkClosed() throws IOException + { + if (isClosed) + { + throw new IOException("RandomAccessFile already closed"); + } + + } + + @Override + public boolean isClosed() + { + return isClosed; + } + + @Override + public void write(byte[] b, int offset, int length) throws IOException + { + checkClosed(); + ras.write(b, offset, length); + } + + @Override + public void write(byte[] b) throws IOException + { + write(b, 0, b.length); + } + + @Override + public void write(int b) throws IOException + { + checkClosed(); + ras.write(b); + } + + @Override + public int peek() throws IOException + { + int result = read(); + if (result != -1) + { + rewind(1); + } + return result; + } + + @Override + public void rewind(int bytes) throws IOException + { + checkClosed(); + ras.seek(ras.getFilePointer() - bytes); + } + + @Override + public byte[] readFully(int length) throws IOException + { + checkClosed(); + byte[] b = new byte[length]; + ras.readFully(b); + return b; + } + + @Override + public boolean isEOF() throws IOException + { + return peek() == -1; + } + + @Override + public int available() throws IOException + { + checkClosed(); + return (int) Math.min(ras.length() - getPosition(), Integer.MAX_VALUE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessInputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessInputStream.java new file mode 100644 index 00000000000..2d962f41117 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessInputStream.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.InputStream; +import java.io.IOException; + +/** + * An InputStream which reads from a RandomAccessRead. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class RandomAccessInputStream extends InputStream +{ + private final RandomAccessRead input; + private long position; + + /** + * Creates a new RandomAccessInputStream, with a position of zero. The InputStream will maintain + * its own position independent of the RandomAccessRead. + * + * @param randomAccessRead The RandomAccessRead to read from. + */ + public RandomAccessInputStream(RandomAccessRead randomAccessRead) + { + input = randomAccessRead; + position = 0; + } + + void restorePosition() throws IOException + { + input.seek(position); + } + + @Override + public int available() throws IOException + { + restorePosition(); + long available = input.length() - input.getPosition(); + if (available > Integer.MAX_VALUE) + { + return Integer.MAX_VALUE; + } + return (int)available; + } + + @Override + public int read() throws IOException + { + restorePosition(); + if (input.isEOF()) + { + return -1; + } + int b = input.read(); + position += 1; + return b; + } + + @Override + public int read(byte[] b, int off, int len) throws IOException + { + restorePosition(); + if (input.isEOF()) + { + return -1; + } + int n = input.read(b, off, len); + position += n; + return n; + } + + @Override + public long skip(long n) throws IOException + { + restorePosition(); + input.seek(position + n); + position += n; + return n; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessOutputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessOutputStream.java new file mode 100644 index 00000000000..c82c48bbda5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessOutputStream.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * An OutputStream which writes to a RandomAccessWrite. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class RandomAccessOutputStream extends OutputStream +{ + private final RandomAccessWrite writer; + + /** + * Constructor to create a new output stream which writes to the given RandomAccessWrite. + * + * @param writer The random access writer for output + */ + public RandomAccessOutputStream(RandomAccessWrite writer) + { + this.writer = writer; + // we don't have to maintain a position, as each COSStream can only have one writer. + } + + @Override + public void write(byte[] b, int offset, int length) throws IOException + { + writer.write(b, offset, length); + } + + @Override + public void write(byte[] b) throws IOException + { + writer.write(b); + } + + @Override + public void write(int b) throws IOException + { + writer.write(b); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java new file mode 100644 index 00000000000..189c93d6991 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.Closeable; +import java.io.IOException; + +/** + * An interface allowing random access read operations. + */ +public interface RandomAccessRead extends Closeable +{ + /** + * Read a single byte of data. + * + * @return The byte of data that is being read. + * + * @throws IOException If there is an error while reading the data. + */ + int read() throws IOException; + + /** + * Read a buffer of data. + * + * @param b The buffer to write the data to. + * @return The number of bytes that were actually read. + * @throws IOException If there was an error while reading the data. + */ + int read(byte[] b) throws IOException; + + /** + * Read a buffer of data. + * + * @param b The buffer to write the data to. + * @param offset Offset into the buffer to start writing. + * @param length The amount of data to attempt to read. + * @return The number of bytes that were actually read. + * @throws IOException If there was an error while reading the data. + */ + int read(byte[] b, int offset, int length) throws IOException; + + /** + * Returns offset of next byte to be returned by a read method. + * + * @return offset of next byte which will be returned with next {@link #read()} + * (if no more bytes are left it returns a value >= length of source) + * + * @throws IOException + */ + long getPosition() throws IOException; + + /** + * Seek to a position in the data. + * + * @param position The position to seek to. + * @throws IOException If there is an error while seeking. + */ + void seek(long position) throws IOException; + + /** + * The total number of bytes that are available. + * + * @return The number of bytes available. + * + * @throws IOException If there is an IO error while determining the + * length of the data stream. + */ + long length() throws IOException; + + /** + * Returns true if this stream has been closed. + */ + boolean isClosed(); + + /** + * This will peek at the next byte. + * + * @return The next byte on the stream, leaving it as available to read. + * + * @throws IOException If there is an error reading the next byte. + */ + int peek() throws IOException; + + /** + * Seek backwards the given number of bytes. + * + * @param bytes the number of bytes to be seeked backwards + * @throws IOException If there is an error while seeking + */ + void rewind(int bytes) throws IOException; + + /** + * Reads a given number of bytes. + * @param length the number of bytes to be read + * @return a byte array containing the bytes just read + * @throws IOException if an I/O error occurs while reading data + */ + byte[] readFully(int length) throws IOException; + + /** + * A simple test to see if we are at the end of the data. + * + * @return true if we are at the end of the data. + * + * @throws IOException If there is an error reading the next byte. + */ + boolean isEOF() throws IOException; + + /** + * Returns an estimate of the number of bytes that can be read. + * + * @return the number of bytes that can be read + * @throws IOException if this random access has been closed + */ + int available() throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessWrite.java b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessWrite.java new file mode 100644 index 00000000000..16ab0268de1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessWrite.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.io; + +import java.io.Closeable; +import java.io.IOException; + +/** + * An interface allowing random access write operations. + */ +public interface RandomAccessWrite extends Closeable +{ + /** + * Write a byte to the stream. + * + * @param b The byte to write. + * @throws IOException If there is an IO error while writing. + */ + void write(int b) throws IOException; + + /** + * Write a buffer of data to the stream. + * + * @param b The buffer to get the data from. + * @throws IOException If there is an error while writing the data. + */ + void write(byte[] b) throws IOException; + + /** + * Write a buffer of data to the stream. + * + * @param b The buffer to get the data from. + * @param offset An offset into the buffer to get the data from. + * @param length The length of data to write. + * @throws IOException If there is an error while writing the data. + */ + void write(byte[] b, int offset, int length) throws IOException; + + /** + * Clears all data of the buffer. + */ + void clear() throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFile.java b/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFile.java new file mode 100644 index 00000000000..8345b2e5d59 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFile.java @@ -0,0 +1,537 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.BitSet; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Implements a memory page handling mechanism as base for creating (multiple) + * {@link RandomAccess} buffers each having its set of pages (implemented by + * {@link ScratchFileBuffer}). A buffer is created calling {@link #createBuffer()}. + * + *

Pages can be stored in main memory or in a temporary file. A mixed mode + * is supported storing a certain amount of pages in memory and only the + * additional ones in temporary file (defined by maximum main memory to + * be used).

+ * + *

Pages can be marked as 'free' in order to re-use them. For in-memory pages + * this will release the used memory while for pages in temporary file this + * simply marks the area as free to re-use.

+ * + *

If a temporary file was created (done with the first page to be stored + * in temporary file) it is deleted when {@link ScratchFile#close()} is called.

+ * + *

Using this class for {@link RandomAccess} buffers allows for a direct control + * on the maximum memory usage and allows processing large files for which we + * otherwise would get an {@link OutOfMemoryError} in case of using {@link RandomAccessBuffer}.

+ * + *

This base class for providing pages is thread safe (the buffer implementations are not).

+ */ +public class ScratchFile implements Closeable +{ + private static final Log LOG = LogFactory.getLog(ScratchFile.class); + + /** number of pages by which we enlarge the scratch file (reduce I/O-operations) */ + private static final int ENLARGE_PAGE_COUNT = 16; + /** in case of unrestricted main memory usage this is the initial number of pages + * {@link #inMemoryPages} is setup for */ + private static final int INIT_UNRESTRICTED_MAINMEM_PAGECOUNT = 100000; + private static final int PAGE_SIZE = 4096; + + private final Object ioLock = new Object(); + private final File scratchFileDirectory; + /** scratch file; only to be accessed under synchronization of {@link #ioLock} */ + private File file; + /** random access to scratch file; only to be accessed under synchronization of {@link #ioLock} */ + private java.io.RandomAccessFile raf; + private volatile int pageCount = 0; + private final BitSet freePages = new BitSet(); + /** holds pointers to in-memory page content; will be initialized once in case of restricted + * main memory, otherwise it is enlarged as needed and first initialized to a size of + * {@link #INIT_UNRESTRICTED_MAINMEM_PAGECOUNT} */ + private volatile byte[][] inMemoryPages; + private final int inMemoryMaxPageCount; + private final int maxPageCount; + private final boolean useScratchFile; + private final boolean maxMainMemoryIsRestricted; + + private volatile boolean isClosed = false; + + /** + * Initializes page handler. If a scratchFileDirectory is supplied, + * then the scratch file will be created in that directory. + * + *

All pages will be stored in the scratch file.

+ * + * @param scratchFileDirectory The directory in which to create the scratch file + * or null to created it in the default temporary directory. + * + * @throws IOException If scratch file directory was given but don't exist. + */ + public ScratchFile(File scratchFileDirectory) throws IOException + { + this(MemoryUsageSetting.setupTempFileOnly().setTempDir(scratchFileDirectory)); + } + + /** + * Initializes page handler. If a scratchFileDirectory is supplied, + * then the scratch file will be created in that directory. + * + *

Depending on the size of allowed memory usage a number of pages (memorySize/{@link #PAGE_SIZE}) + * will be stored in-memory and only additional pages will be written to/read from scratch file.

+ * + * @param memUsageSetting set how memory/temporary files are used for buffering streams etc. + * + * @throws IOException If scratch file directory was given but don't exist. + */ + public ScratchFile(MemoryUsageSetting memUsageSetting) throws IOException + { + maxMainMemoryIsRestricted = (!memUsageSetting.useMainMemory()) || memUsageSetting.isMainMemoryRestricted(); + useScratchFile = maxMainMemoryIsRestricted ? memUsageSetting.useTempFile() : false; + scratchFileDirectory = useScratchFile ? memUsageSetting.getTempDir() : null; + + if ((scratchFileDirectory != null) && (!scratchFileDirectory.isDirectory())) + { + throw new IOException("Scratch file directory does not exist: " + this.scratchFileDirectory); + } + + maxPageCount = memUsageSetting.isStorageRestricted() ? + (int) Math.min(Integer.MAX_VALUE, memUsageSetting.getMaxStorageBytes() / PAGE_SIZE) : + Integer.MAX_VALUE; + + inMemoryMaxPageCount = memUsageSetting.useMainMemory() ? + (memUsageSetting.isMainMemoryRestricted() ? + (int) Math.min(Integer.MAX_VALUE, memUsageSetting.getMaxMainMemoryBytes() / PAGE_SIZE) : + Integer.MAX_VALUE) : + 0; + inMemoryPages = new byte[maxMainMemoryIsRestricted ? inMemoryMaxPageCount : INIT_UNRESTRICTED_MAINMEM_PAGECOUNT][]; + + freePages.set(0, inMemoryPages.length); + } + + /** + * Getter for an instance using only unrestricted main memory for buffering + * (same as new ScratchFile(MemoryUsageSetting.setupMainMemoryOnly())). + * + * @return instance configured to only use main memory with no size restriction + */ + public static ScratchFile getMainMemoryOnlyInstance() + { + try + { + return new ScratchFile(MemoryUsageSetting.setupMainMemoryOnly()); + } + catch (IOException ioe) + { + // cannot happen for main memory setup + LOG.error("Unexpected exception occurred creating main memory scratch file instance: " + ioe.getMessage(), ioe); + return null; + } + } + + /** + * Getter for an instance to only use main-memory with the defined maximum. + * + * @param maxMainMemoryBytes maximum number of main-memory to be used; + * -1 for no restriction; + * 0 will also be interpreted here as no restriction + * + * @return instance configured to only use main memory with no size restriction + */ + public static ScratchFile getMainMemoryOnlyInstance(long maxMainMemoryBytes) + { + try + { + return new ScratchFile(MemoryUsageSetting.setupMainMemoryOnly(maxMainMemoryBytes)); + } + catch (IOException ioe) + { + // cannot happen for main memory setup + LOG.error("Unexpected exception occurred creating main memory scratch file instance: " + ioe.getMessage(), ioe); + return null; + } + } + + /** + * Returns a new free page, either from free page pool + * or by enlarging scratch file (may be created). + * + * @return index of new page + */ + int getNewPage() throws IOException + { + synchronized (freePages) + { + int idx = freePages.nextSetBit( 0 ); + + if (idx < 0) + { + enlarge(); + + idx = freePages.nextSetBit( 0 ); + if (idx < 0) + { + throw new IOException("Maximum allowed scratch file memory exceeded."); + } + } + + freePages.clear(idx); + + if (idx >= pageCount) + { + pageCount = idx + 1; + } + + return idx; + } + } + + /** + * This will provide new free pages by either enlarging the scratch file + * by a number of pages defined by {@link #ENLARGE_PAGE_COUNT} - in case + * scratch file usage is allowed - or increase the {@link #inMemoryPages} + * array in case main memory was not restricted. If neither of both is + * allowed/the case than free pages count won't be changed. The same is true + * if no new pages could be added because we reached the maximum of + * {@link Integer#MAX_VALUE} pages. + * + *

If scratch file uage is allowed and scratch file does not exist already + * it will be created.

+ * + *

Only to be called under synchronization on {@link #freePages}.

+ */ + private void enlarge() throws IOException + { + synchronized (ioLock) + { + checkClosed(); + + if (pageCount >= maxPageCount) + { + return; + } + + if (useScratchFile) + { + // create scratch file is needed + if ( raf == null ) + { + file = File.createTempFile("PDFBox", ".tmp", scratchFileDirectory); + try + { + raf = new java.io.RandomAccessFile(file, "rw"); + } + catch (IOException e) + { + if (!file.delete()) + { + LOG.warn("Error deleting scratch file: " + file.getAbsolutePath()); + } + throw e; + } + } + + long fileLen = raf.length(); + long expectedFileLen = ((long)pageCount - inMemoryMaxPageCount) * PAGE_SIZE; + + if (expectedFileLen != fileLen) + { + throw new IOException("Expected scratch file size of " + expectedFileLen + " but found " + fileLen); + } + + // enlarge if we do not overflow + if (pageCount + ENLARGE_PAGE_COUNT > pageCount) + { + fileLen += ENLARGE_PAGE_COUNT * PAGE_SIZE; + + raf.setLength(fileLen); + + freePages.set(pageCount, pageCount + ENLARGE_PAGE_COUNT); + } + } + else if (!maxMainMemoryIsRestricted) + { + // increase number of in-memory pages + int oldSize = inMemoryPages.length; + int newSize = (int) Math.min( ((long)oldSize) * 2, Integer.MAX_VALUE); // this handles integer overflow + if (newSize > oldSize) + { + byte[][] newInMemoryPages = new byte[newSize][]; + System.arraycopy(inMemoryPages, 0, newInMemoryPages, 0, oldSize); + inMemoryPages = newInMemoryPages; + + freePages.set(oldSize, newSize); + } + } + } + } + + /** + * Returns byte size of a page. + * + * @return byte size of a page + */ + int getPageSize() + { + return PAGE_SIZE; + } + + /** + * Reads the page with specified index. + * + * @param pageIdx index of page to read + * + * @return byte array of size {@link #PAGE_SIZE} filled with page data read from file + * + * @throws IOException + */ + byte[] readPage(int pageIdx) throws IOException + { + if ((pageIdx < 0) || (pageIdx >= pageCount)) + { + checkClosed(); + throw new IOException("Page index out of range: " + pageIdx + ". Max value: " + (pageCount - 1) ); + } + + // check if we have the page in memory + if (pageIdx < inMemoryMaxPageCount) + { + byte[] page = inMemoryPages[pageIdx]; + + // handle case that we are closed + if (page == null) + { + checkClosed(); + throw new IOException("Requested page with index " + pageIdx + " was not written before."); + } + + return page; + } + + synchronized (ioLock) + { + if (raf == null) + { + checkClosed(); + throw new IOException("Missing scratch file to read page with index " + pageIdx + " from."); + } + + byte[] page = new byte[PAGE_SIZE]; + raf.seek(((long)pageIdx - inMemoryMaxPageCount) * PAGE_SIZE); + raf.readFully(page); + + return page; + } + } + + /** + * Writes updated page. Page is either kept in-memory if pageIdx < {@link #inMemoryMaxPageCount} + * or is written to scratch file. + * + *

Provided page byte array must not be re-used for other pages since we + * store it as is in case of in-memory handling.

+ * + * @param pageIdx index of page to write + * @param page page to write (length has to be {@value #PAGE_SIZE}) + * + * @throws IOException in case page index is out of range or page has wrong length + * or writing to file failed + */ + void writePage(int pageIdx, byte[] page) throws IOException + { + if ((pageIdx<0) || (pageIdx>=pageCount)) + { + checkClosed(); + throw new IOException("Page index out of range: " + pageIdx + ". Max value: " + (pageCount - 1) ); + } + + if (page.length != PAGE_SIZE) + { + throw new IOException("Wrong page size to write: " + page.length + ". Expected: " + PAGE_SIZE ); + } + + if (pageIdx < inMemoryMaxPageCount) + { + if (maxMainMemoryIsRestricted) + { + inMemoryPages[pageIdx] = page; + } + else + { + // need synchronization since inMemoryPages may change + synchronized (ioLock) + { + inMemoryPages[pageIdx] = page; + } + } + + // in case we were closed in between throw exception + checkClosed(); + } + else + { + synchronized (ioLock) + { + checkClosed(); + raf.seek(((long)pageIdx - inMemoryMaxPageCount) * PAGE_SIZE); + raf.write(page); + } + } + } + + /** + * Checks if this page handler has already been closed. If so, + * an {@link IOException} is thrown. + * + * @throws IOException If {@link #close()} has already been called. + */ + void checkClosed() throws IOException + { + if (isClosed) + { + throw new IOException("Scratch file already closed"); + } + } + + /** + * Creates a new buffer using this page handler. + * + * @return A new buffer. + * + * @throws IOException If an error occurred. + */ + public RandomAccess createBuffer() throws IOException + { + return new ScratchFileBuffer(this); + } + + /** + * Creates a new buffer using this page handler and initializes it with the + * data read from provided input stream (input stream is copied to buffer). + * The buffer data pointer is reset to point to first byte. + * + * @param input The input stream that is to be copied into the buffer. + * @return A new buffer containing data read from input stream. + * + * @throws IOException If an error occurred. + */ + public RandomAccess createBuffer(InputStream input) throws IOException + { + ScratchFileBuffer buf = new ScratchFileBuffer(this); + + byte[] byteBuffer = new byte[8192]; + int bytesRead = 0; + while ((bytesRead = input.read(byteBuffer)) > -1) + { + buf.write(byteBuffer, 0, bytesRead); + } + buf.seek(0); + + return buf; + } + + /** + * Allows a buffer which is cleared/closed to release its pages to be re-used. + * + * @param pageIndexes pages indexes of pages to release + * @param count number of page indexes contained in provided array + */ + void markPagesAsFree(int[] pageIndexes, int off, int count) { + + synchronized (freePages) + { + for (int aIdx = off; aIdx < count; aIdx++) + { + int pageIdx = pageIndexes[aIdx]; + if ((pageIdx>=0) && (pageIdxtrue if current page was changed by a write method + */ + private boolean currentPageContentChanged = false; + + /** contains ordered list of pages with the index the page is known by page handler ({@link ScratchFile}) */ + private int[] pageIndexes = new int[16]; + /** number of pages held by this buffer */ + private int pageCount = 0; + + private static final Log LOG = LogFactory.getLog(ScratchFileBuffer.class); + + /** + * Creates a new buffer using pages handled by provided {@link ScratchFile}. + * + * @param pageHandler The {@link ScratchFile} managing the pages to be used by this buffer. + * + * @throws IOException If getting first page failed. + */ + ScratchFileBuffer(ScratchFile pageHandler) throws IOException + { + pageHandler.checkClosed(); + + this.pageHandler = pageHandler; + + pageSize = this.pageHandler.getPageSize(); + + addPage(); + } + + /** + * Checks if this buffer, or the underlying {@link ScratchFile} have been closed, + * throwing {@link IOException} if so. + * + * @throws IOException If either this buffer, or the underlying {@link ScratchFile} have been closed. + */ + private void checkClosed() throws IOException + { + if (pageHandler == null) + { + throw new IOException("Buffer already closed"); + } + pageHandler.checkClosed(); + } + + /** + * Adds a new page and positions all pointers to start of new page. + * + * @throws IOException if requesting a new page fails + */ + private void addPage() throws IOException + { + if (pageCount+1 >= pageIndexes.length) + { + int newSize = pageIndexes.length*2; + // check overflow + if (newSizeIf this is not the case we go to next page (writing + * current one if changed). If current buffer has no more + * pages we add a new one.

+ * + * @param addNewPageIfNeeded if true it is allowed to add a new page in case + * we are currently at end of last buffer page + * + * @return true if we were successful positioning pointer before end of page; + * we might return false if it is not allowed to add another page + * and current pointer points at end of last page + * + * @throws IOException + */ + private boolean ensureAvailableBytesInPage(boolean addNewPageIfNeeded) throws IOException + { + if (positionInPage >= pageSize) + { + // page full + if (currentPageContentChanged) + { + // write page + pageHandler.writePage(pageIndexes[currentPagePositionInPageIndexes], currentPage); + currentPageContentChanged = false; + } + // get new page + if (currentPagePositionInPageIndexes+1 < pageCount) + { + // we already have more pages assigned (there was a backward seek before) + currentPage = pageHandler.readPage(pageIndexes[++currentPagePositionInPageIndexes]); + currentPageOffset = ((long)currentPagePositionInPageIndexes) * pageSize; + positionInPage = 0; + } + else if (addNewPageIfNeeded) + { + // need new page + addPage(); + } + else + { + // we are at last page and are not allowed to add new page + return false; + } + } + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public void write(int b) throws IOException + { + checkClosed(); + + ensureAvailableBytesInPage(true); + + currentPage[positionInPage++] = (byte) b; + currentPageContentChanged = true; + + if(currentPageOffset + positionInPage > size) + { + size = currentPageOffset + positionInPage; + } + } + + /** + * {@inheritDoc} + */ + @Override + public void write(byte[] b) throws IOException + { + write(b, 0, b.length); + } + + /** + * {@inheritDoc} + */ + @Override + public void write(byte[] b, int off, int len) throws IOException + { + checkClosed(); + + int remain = len; + int bOff = off; + + while (remain > 0) + { + ensureAvailableBytesInPage(true); + + int bytesToWrite = Math.min(remain, pageSize-positionInPage); + + System.arraycopy(b, bOff, currentPage, positionInPage, bytesToWrite); + + positionInPage += bytesToWrite; + currentPageContentChanged = true; + + bOff += bytesToWrite; + remain -= bytesToWrite; + } + + if(currentPageOffset + positionInPage > size) + { + size = currentPageOffset + positionInPage; + } + } + + /** + * {@inheritDoc} + */ + @Override + public final void clear() throws IOException + { + checkClosed(); + + // keep only the first page, discard all other pages + pageHandler.markPagesAsFree(pageIndexes, 1, pageCount - 1); + pageCount = 1; + + // change to first page if we are not already there + if (currentPagePositionInPageIndexes > 0) + { + currentPage = pageHandler.readPage(pageIndexes[0]); + currentPagePositionInPageIndexes = 0; + currentPageOffset = 0; + } + positionInPage = 0; + size = 0; + currentPageContentChanged = false; + } + + /** + * {@inheritDoc} + */ + @Override + public long getPosition() throws IOException + { + checkClosed(); + return currentPageOffset + positionInPage; + } + + /** + * {@inheritDoc} + */ + @Override + public void seek(long seekToPosition) throws IOException + { + checkClosed(); + + /* + * for now we won't allow to seek past end of buffer; this can be changed by adding new pages as needed + */ + if (seekToPosition > size) + { + throw new EOFException(); + } + + if (seekToPosition < 0) + { + throw new IOException("Negative seek offset: " + seekToPosition); + } + + if ((seekToPosition >= currentPageOffset) && (seekToPosition <= currentPageOffset + pageSize)) + { + // within same page + positionInPage = (int) (seekToPosition - currentPageOffset); + } + else + { + // have to go to another page + + // check if current page needs to be written to file + if (currentPageContentChanged) + { + pageHandler.writePage(pageIndexes[currentPagePositionInPageIndexes], currentPage); + currentPageContentChanged = false; + } + + int newPagePosition = (int) (seekToPosition / pageSize); + + currentPage = pageHandler.readPage(pageIndexes[newPagePosition]); + currentPagePositionInPageIndexes = newPagePosition; + currentPageOffset = ((long)currentPagePositionInPageIndexes) * pageSize; + positionInPage = (int) (seekToPosition - currentPageOffset); + } + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isClosed() + { + return pageHandler == null; + } + + /** + * {@inheritDoc} + */ + @Override + public int peek() throws IOException + { + int result = read(); + if (result != -1) + { + rewind(1); + } + return result; + } + + /** + * {@inheritDoc} + */ + @Override + public void rewind(int bytes) throws IOException + { + seek(currentPageOffset + positionInPage - bytes); + } + + /** + * {@inheritDoc} + */ + @Override + public byte[] readFully(int len) throws IOException + { + byte[] b = new byte[len]; + + int n = 0; + do + { + int count = read(b, n, len - n); + if (count < 0) + { + throw new EOFException(); + } + n += count; + } while (n < len); + + return b; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isEOF() throws IOException + { + checkClosed(); + return currentPageOffset + positionInPage >= size; + } + + /** + * {@inheritDoc} + */ + @Override + public int available() throws IOException + { + checkClosed(); + return (int) Math.min(size - (currentPageOffset + positionInPage), Integer.MAX_VALUE); + } + + /** + * {@inheritDoc} + */ + @Override + public int read() throws IOException + { + checkClosed(); + + if (currentPageOffset + positionInPage >= size) + { + return -1; + } + + if (! ensureAvailableBytesInPage(false)) + { + // should not happen, we checked it before + throw new IOException("Unexpectedly no bytes available for read in buffer."); + } + + return currentPage[positionInPage++] & 0xff; + } + + /** + * {@inheritDoc} + */ + @Override + public int read(byte[] b) throws IOException + { + return read(b, 0, b.length); + } + + /** + * {@inheritDoc} + */ + @Override + public int read(byte[] b, int off, int len) throws IOException + { + checkClosed(); + + if (currentPageOffset + positionInPage >= size) + { + return -1; + } + + int remain = (int) Math.min(len, size - (currentPageOffset + positionInPage)); + + int totalBytesRead = 0; + int bOff = off; + + while (remain > 0) + { + if (! ensureAvailableBytesInPage(false)) + { + // should not happen, we checked it before + throw new IOException("Unexpectedly no bytes available for read in buffer."); + } + + int readBytes = Math.min(remain, pageSize - positionInPage); + + System.arraycopy(currentPage, positionInPage, b, bOff, readBytes); + + positionInPage += readBytes; + totalBytesRead += readBytes; + bOff += readBytes; + remain -= readBytes; + } + + return totalBytesRead; + } + + /** + * {@inheritDoc} + */ + @Override + public void close() throws IOException + { + if (pageHandler != null) { + + pageHandler.markPagesAsFree(pageIndexes, 0, pageCount); + pageHandler = null; + + pageIndexes = null; + currentPage = null; + currentPageOffset = 0; + currentPagePositionInPageIndexes = -1; + positionInPage = 0; + size = 0; + } + } + + /** + * While calling finalize is normally discouraged we will have to + * use it here as long as closing a scratch file buffer is not + * done in every case. Currently {@link COSStream} creates new + * buffers without closing the old one - which might still be + * used. + * + *

Enabling debugging one will see if there are still cases + * where the buffer is not closed.

+ */ + @Override + protected void finalize() throws Throwable + { + try + { + if ((pageHandler != null) && LOG.isDebugEnabled()) + { + LOG.debug("ScratchFileBuffer not closed!"); + } + close(); + } + finally + { + super.finalize(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/io/SequentialRead.java b/pdfbox/src/main/java/org/apache/pdfbox/io/SequentialRead.java new file mode 100644 index 00000000000..f856a901d90 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/io/SequentialRead.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.Closeable; +import java.io.IOException; + +/** + * An interface allowing sequential read operations. + */ +public interface SequentialRead extends Closeable +{ + + /** + * Read a single byte of data. + * + * @return The byte of data that is being read. + * + * @throws IOException If there is an error while reading the data. + */ + int read() throws IOException; + + /** + * Read a buffer of data. + * + * @param b The buffer to write the data to. + * @return The number of bytes that were actually read. + * @throws IOException If there was an error while reading the data. + */ + int read(byte[] b) throws IOException; + + /** + * Read a buffer of data. + * + * @param b The buffer to write the data to. + * @param offset Offset into the buffer to start writing. + * @param length The amount of data to attempt to read. + * @return The number of bytes that were actually read. + * @throws IOException If there was an error while reading the data. + */ + int read(byte[] b, int offset, int length) throws IOException; + +} diff --git a/src/org/pdfbox/io/package.html b/pdfbox/src/main/java/org/apache/pdfbox/io/package.html similarity index 100% rename from src/org/pdfbox/io/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/io/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java new file mode 100644 index 00000000000..0ada6b89fcd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java @@ -0,0 +1,334 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.awt.geom.AffineTransform; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentProperties; +import org.apache.pdfbox.util.Matrix; + +/** + * This class allows to import pages as Form XObjects into a document and use them to create layers + * (optional content groups). It should used only on loaded documents, not on generated documents + * because these can contain unfinished parts, e.g. font subsetting information. + */ +public class LayerUtility +{ + private static final Log LOG = LogFactory.getLog(LayerUtility.class); + + private static final boolean DEBUG = true; + + private final PDDocument targetDoc; + private final PDFCloneUtility cloner; + + /** + * Creates a new instance. + * @param document the PDF document to modify + */ + public LayerUtility(PDDocument document) + { + this.targetDoc = document; + this.cloner = new PDFCloneUtility(document); + } + + /** + * Returns the PDF document we work on. + * @return the PDF document + */ + public PDDocument getDocument() + { + return this.targetDoc; + } + + /** + * Some applications may not wrap their page content in a save/restore (q/Q) pair which can + * lead to problems with coordinate system transformations when content is appended. This + * method lets you add a q/Q pair around the existing page's content. + * @param page the page + * @throws IOException if an I/O error occurs + */ + public void wrapInSaveRestore(PDPage page) throws IOException + { + COSStream saveGraphicsStateStream = getDocument().getDocument().createCOSStream(); + try (OutputStream saveStream = saveGraphicsStateStream.createOutputStream()) + { + saveStream.write("q\n".getBytes("ISO-8859-1")); + } + + COSStream restoreGraphicsStateStream = getDocument().getDocument().createCOSStream(); + try (OutputStream restoreStream = restoreGraphicsStateStream.createOutputStream()) + { + restoreStream.write("Q\n".getBytes("ISO-8859-1")); + } + + //Wrap the existing page's content in a save/restore pair (q/Q) to have a controlled + //environment to add additional content. + COSDictionary pageDictionary = page.getCOSObject(); + COSBase contents = pageDictionary.getDictionaryObject(COSName.CONTENTS); + if (contents instanceof COSStream) + { + COSStream contentsStream = (COSStream)contents; + + COSArray array = new COSArray(); + array.add(saveGraphicsStateStream); + array.add(contentsStream); + array.add(restoreGraphicsStateStream); + + pageDictionary.setItem(COSName.CONTENTS, array); + } + else if( contents instanceof COSArray ) + { + COSArray contentsArray = (COSArray)contents; + + contentsArray.add(0, saveGraphicsStateStream); + contentsArray.add(restoreGraphicsStateStream); + } + else + { + throw new IOException("Contents are unknown type: " + contents.getClass().getName()); + } + } + + /** + * Imports a page from some PDF file as a Form XObject so it can be placed on another page + * in the target document. + *

+ * You may want to call {@link #wrapInSaveRestore(PDPage) wrapInSaveRestore(PDPage)} before invoking the Form XObject to + * make sure that the graphics state is reset. + * + * @param sourceDoc the source PDF document that contains the page to be copied + * @param pageNumber the page number of the page to be copied + * @return a Form XObject containing the original page's content + * @throws IOException if an I/O error occurs + */ + public PDFormXObject importPageAsForm(PDDocument sourceDoc, int pageNumber) throws IOException + { + PDPage page = sourceDoc.getPage(pageNumber); + return importPageAsForm(sourceDoc, page); + } + + private static final Set PAGE_TO_FORM_FILTER = new java.util.HashSet<>( + Arrays.asList(new String[] {"Group", "LastModified", "Metadata"})); + + /** + * Imports a page from some PDF file as a Form XObject so it can be placed on another page + * in the target document. + *

+ * You may want to call {@link #wrapInSaveRestore(PDPage) wrapInSaveRestore(PDPage)} before invoking the Form XObject to + * make sure that the graphics state is reset. + * + * @param sourceDoc the source PDF document that contains the page to be copied + * @param page the page in the source PDF document to be copied + * @return a Form XObject containing the original page's content + * @throws IOException if an I/O error occurs + */ + public PDFormXObject importPageAsForm(PDDocument sourceDoc, PDPage page) throws IOException + { + importOcProperties(sourceDoc); + + PDStream newStream = new PDStream(targetDoc, page.getContents(), COSName.FLATE_DECODE); + PDFormXObject form = new PDFormXObject(newStream); + + //Copy resources + PDResources pageRes = page.getResources(); + PDResources formRes = new PDResources(); + cloner.cloneMerge(pageRes, formRes); + form.setResources(formRes); + + //Transfer some values from page to form + transferDict(page.getCOSObject(), form.getCOSObject(), PAGE_TO_FORM_FILTER, true); + + Matrix matrix = form.getMatrix(); + AffineTransform at = matrix.createAffineTransform(); + PDRectangle mediaBox = page.getMediaBox(); + PDRectangle cropBox = page.getCropBox(); + PDRectangle viewBox = (cropBox != null ? cropBox : mediaBox); + + //Handle the /Rotation entry on the page dict + int rotation = page.getRotation(); + + //Transform to FOP's user space + //at.scale(1 / viewBox.getWidth(), 1 / viewBox.getHeight()); + at.translate(mediaBox.getLowerLeftX() - viewBox.getLowerLeftX(), + mediaBox.getLowerLeftY() - viewBox.getLowerLeftY()); + switch (rotation) + { + case 90: + at.scale(viewBox.getWidth() / viewBox.getHeight(), viewBox.getHeight() / viewBox.getWidth()); + at.translate(0, viewBox.getWidth()); + at.rotate(-Math.PI / 2.0); + break; + case 180: + at.translate(viewBox.getWidth(), viewBox.getHeight()); + at.rotate(-Math.PI); + break; + case 270: + at.scale(viewBox.getWidth() / viewBox.getHeight(), viewBox.getHeight() / viewBox.getWidth()); + at.translate(viewBox.getHeight(), 0); + at.rotate(-Math.PI * 1.5); + break; + default: + //no additional transformations necessary + } + //Compensate for Crop Boxes not starting at 0,0 + at.translate(-viewBox.getLowerLeftX(), -viewBox.getLowerLeftY()); + if (!at.isIdentity()) + { + form.setMatrix(at); + } + + BoundingBox bbox = new BoundingBox(); + bbox.setLowerLeftX(viewBox.getLowerLeftX()); + bbox.setLowerLeftY(viewBox.getLowerLeftY()); + bbox.setUpperRightX(viewBox.getUpperRightX()); + bbox.setUpperRightY(viewBox.getUpperRightY()); + form.setBBox(new PDRectangle(bbox)); + + return form; + } + + /** + * Places the given form over the existing content of the indicated page (like an overlay). + * The form is enveloped in a marked content section to indicate that it's part of an + * optional content group (OCG), here used as a layer. This optional group is returned and + * can be enabled and disabled through methods on {@link PDOptionalContentProperties}. + *

+ * You may want to call {@link #wrapInSaveRestore(PDPage) wrapInSaveRestore(PDPage)} before calling this method to make + * sure that the graphics state is reset. + * + * @param targetPage the target page + * @param form the form to place + * @param transform the transformation matrix that controls the placement of your form. You'll + * need this if your page has a crop box different than the media box, or if these have negative + * coordinates, or if you want to scale or adjust your form. + * @param layerName the name for the layer/OCG to produce + * @return the optional content group that was generated for the form usage + * @throws IOException if an I/O error occurs + */ + public PDOptionalContentGroup appendFormAsLayer(PDPage targetPage, + PDFormXObject form, AffineTransform transform, + String layerName) throws IOException + { + PDDocumentCatalog catalog = targetDoc.getDocumentCatalog(); + PDOptionalContentProperties ocprops = catalog.getOCProperties(); + if (ocprops == null) + { + ocprops = new PDOptionalContentProperties(); + catalog.setOCProperties(ocprops); + } + if (ocprops.hasGroup(layerName)) + { + throw new IllegalArgumentException("Optional group (layer) already exists: " + layerName); + } + + PDRectangle cropBox = targetPage.getCropBox(); + if ((cropBox.getLowerLeftX() < 0 || cropBox.getLowerLeftY() < 0) && transform.isIdentity()) + { + // PDFBOX-4044 + LOG.warn("Negative cropBox " + cropBox + + " and identity transform may make your form invisible"); + } + + PDOptionalContentGroup layer = new PDOptionalContentGroup(layerName); + ocprops.addGroup(layer); + + try (PDPageContentStream contentStream = new PDPageContentStream( + targetDoc, targetPage, AppendMode.APPEND, !DEBUG)) + { + contentStream.beginMarkedContent(COSName.OC, layer); + contentStream.saveGraphicsState(); + contentStream.transform(new Matrix(transform)); + contentStream.drawForm(form); + contentStream.restoreGraphicsState(); + contentStream.endMarkedContent(); + } + + return layer; + } + + private void transferDict(COSDictionary orgDict, COSDictionary targetDict, + Set filter, boolean inclusive) throws IOException + { + for (Map.Entry entry : orgDict.entrySet()) + { + COSName key = entry.getKey(); + if (inclusive && !filter.contains(key.getName())) + { + continue; + } + else if (!inclusive && filter.contains(key.getName())) + { + continue; + } + targetDict.setItem(key, + cloner.cloneForNewDocument(entry.getValue())); + } + } + + /** + * Imports OCProperties from source document to target document so hidden layers can still be + * hidden after import. + * + * @param sourceDoc The source PDF document that contains the /OCProperties to be copied. + * @throws IOException If an I/O error occurs. + */ + private void importOcProperties(PDDocument srcDoc) throws IOException + { + PDDocumentCatalog srcCatalog = srcDoc.getDocumentCatalog(); + PDOptionalContentProperties srcOCProperties = srcCatalog.getOCProperties(); + if (srcOCProperties == null) + { + return; + } + + PDDocumentCatalog dstCatalog = targetDoc.getDocumentCatalog(); + PDOptionalContentProperties dstOCProperties = dstCatalog.getOCProperties(); + + if (dstOCProperties == null) + { + dstCatalog.setOCProperties(new PDOptionalContentProperties( + (COSDictionary) cloner.cloneForNewDocument(srcOCProperties))); + } + else + { + cloner.cloneMerge(srcOCProperties, dstOCProperties); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java new file mode 100644 index 00000000000..d00f6c59e7e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java @@ -0,0 +1,724 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.awt.geom.AffineTransform; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; + +/** + * Adds an overlay to an existing PDF document. + * + * Based on code contributed by Balazs Jerk. + * + */ +public class Overlay implements Closeable +{ + /** + * Possible location of the overlayed pages: foreground or background. + */ + public enum Position + { + FOREGROUND, BACKGROUND + } + + private LayoutPage defaultOverlayPage; + private LayoutPage firstPageOverlayPage; + private LayoutPage lastPageOverlayPage; + private LayoutPage oddPageOverlayPage; + private LayoutPage evenPageOverlayPage; + + private final Set openDocuments = new HashSet<>(); + private Map specificPageOverlayPage = new HashMap<>(); + + private Position position = Position.BACKGROUND; + + private String inputFileName = null; + private PDDocument inputPDFDocument = null; + + private String defaultOverlayFilename = null; + private PDDocument defaultOverlay = null; + + private String firstPageOverlayFilename = null; + private PDDocument firstPageOverlay = null; + + private String lastPageOverlayFilename = null; + private PDDocument lastPageOverlay = null; + + private String allPagesOverlayFilename = null; + private PDDocument allPagesOverlay = null; + + private String oddPageOverlayFilename = null; + private PDDocument oddPageOverlay = null; + + private String evenPageOverlayFilename = null; + private PDDocument evenPageOverlay = null; + + private int numberOfOverlayPages = 0; + private boolean useAllOverlayPages = false; + + /** + * This will add overlays to a document. + * + * @param specificPageOverlayFile Optional map of overlay files for specific pages. The page + * numbers are 1-based. The map must be empty (but not null) if no specific mappings are used. + * + * @return The modified input PDF document, which has to be saved and closed by the caller. If + * the input document was passed by {@link #setInputPDF(PDDocument) setInputPDF(PDDocument)} + * then it is that object that is returned. + * + * @throws IOException if something went wrong + */ + public PDDocument overlay(Map specificPageOverlayFile) throws IOException + { + Map loadedDocuments = new HashMap<>(); + Map layouts = new HashMap<>(); + loadPDFs(); + for (Map.Entry e : specificPageOverlayFile.entrySet()) + { + PDDocument doc = loadedDocuments.get(e.getValue()); + if (doc == null) + { + doc = loadPDF(e.getValue()); + loadedDocuments.put(e.getValue(), doc); + layouts.put(doc, getLayoutPage(doc)); + } + openDocuments.add(doc); + specificPageOverlayPage.put(e.getKey(), layouts.get(doc)); + } + processPages(inputPDFDocument); + return inputPDFDocument; + } + + /** + * This will add overlays documents to a document. + * + * @param specificPageOverlayDocuments Optional map of overlay documents for specific pages. The + * page numbers are 1-based. The map must be empty (but not null) if no specific mappings are + * used. + * + * @return The modified input PDF document, which has to be saved and closed by the caller. If + * the input document was passed by {@link #setInputPDF(PDDocument) setInputPDF(PDDocument)} + * then it is that object that is returned. + * + * @throws IOException if something went wrong + */ + public PDDocument overlayDocuments(Map specificPageOverlayDocuments) throws IOException + { + loadPDFs(); + for (Map.Entry e : specificPageOverlayDocuments.entrySet()) + { + PDDocument doc = e.getValue(); + if (doc != null) + { + specificPageOverlayPage.put(e.getKey(), getLayoutPage(doc)); + } + } + processPages(inputPDFDocument); + return inputPDFDocument; + } + + /** + * Close all input documents which were used for the overlay and opened by this class. + * + * @throws IOException if something went wrong + */ + @Override + public void close() throws IOException + { + if (defaultOverlay != null) + { + defaultOverlay.close(); + } + if (firstPageOverlay != null) + { + firstPageOverlay.close(); + } + if (lastPageOverlay != null) + { + lastPageOverlay.close(); + } + if (allPagesOverlay != null) + { + allPagesOverlay.close(); + } + if (oddPageOverlay != null) + { + oddPageOverlay.close(); + } + if (evenPageOverlay != null) + { + evenPageOverlay.close(); + } + for (PDDocument doc : openDocuments) + { + doc.close(); + } + openDocuments.clear(); + specificPageOverlayPage.clear(); + } + + private void loadPDFs() throws IOException + { + // input PDF + if (inputFileName != null) + { + inputPDFDocument = loadPDF(inputFileName); + } + // default overlay PDF + if (defaultOverlayFilename != null) + { + defaultOverlay = loadPDF(defaultOverlayFilename); + } + if (defaultOverlay != null) + { + defaultOverlayPage = getLayoutPage(defaultOverlay); + } + // first page overlay PDF + if (firstPageOverlayFilename != null) + { + firstPageOverlay = loadPDF(firstPageOverlayFilename); + } + if (firstPageOverlay != null) + { + firstPageOverlayPage = getLayoutPage(firstPageOverlay); + } + // last page overlay PDF + if (lastPageOverlayFilename != null) + { + lastPageOverlay = loadPDF(lastPageOverlayFilename); + } + if (lastPageOverlay != null) + { + lastPageOverlayPage = getLayoutPage(lastPageOverlay); + } + // odd pages overlay PDF + if (oddPageOverlayFilename != null) + { + oddPageOverlay = loadPDF(oddPageOverlayFilename); + } + if (oddPageOverlay != null) + { + oddPageOverlayPage = getLayoutPage(oddPageOverlay); + } + // even pages overlay PDF + if (evenPageOverlayFilename != null) + { + evenPageOverlay = loadPDF(evenPageOverlayFilename); + } + if (evenPageOverlay != null) + { + evenPageOverlayPage = getLayoutPage(evenPageOverlay); + } + // all pages overlay PDF + if (allPagesOverlayFilename != null) + { + allPagesOverlay = loadPDF(allPagesOverlayFilename); + } + if (allPagesOverlay != null) + { + specificPageOverlayPage = getLayoutPages(allPagesOverlay); + useAllOverlayPages = true; + numberOfOverlayPages = specificPageOverlayPage.size(); + } + } + + private PDDocument loadPDF(String pdfName) throws IOException + { + return PDDocument.load(new File(pdfName)); + } + + /** + * Stores the overlay page information. + */ + private static final class LayoutPage + { + private final PDRectangle overlayMediaBox; + private final COSStream overlayContentStream; + private final COSDictionary overlayResources; + + private LayoutPage(PDRectangle mediaBox, COSStream contentStream, COSDictionary resources) + { + overlayMediaBox = mediaBox; + overlayContentStream = contentStream; + overlayResources = resources; + } + } + + private LayoutPage getLayoutPage(PDDocument doc) throws IOException + { + PDPage page = doc.getPage(0); + COSBase contents = page.getCOSObject().getDictionaryObject(COSName.CONTENTS); + PDResources resources = page.getResources(); + if (resources == null) + { + resources = new PDResources(); + } + return new LayoutPage(page.getMediaBox(), createCombinedContentStream(contents), + resources.getCOSObject()); + } + + private Map getLayoutPages(PDDocument doc) throws IOException + { + int numberOfPages = doc.getNumberOfPages(); + Map layoutPages = new HashMap<>(numberOfPages); + for (int i=0;i contentStreams = createContentStreamList(contents); + // concatenate streams + COSStream concatStream = inputPDFDocument.getDocument().createCOSStream(); + try (OutputStream out = concatStream.createOutputStream(COSName.FLATE_DECODE)) + { + for (COSStream contentStream : contentStreams) + { + try (InputStream in = contentStream.createInputStream()) + { + IOUtils.copy(in, out); + out.flush(); + } + } + } + return concatStream; + } + + // get the content streams as a list + private List createContentStreamList(COSBase contents) throws IOException + { + List contentStreams = new ArrayList<>(); + if (contents == null) + { + return contentStreams; + } + else if (contents instanceof COSStream) + { + contentStreams.add((COSStream) contents); + } + else if (contents instanceof COSArray) + { + for (COSBase item : (COSArray) contents) + { + contentStreams.addAll(createContentStreamList(item)); + } + } + else if (contents instanceof COSObject) + { + contentStreams.addAll(createContentStreamList(((COSObject) contents).getObject())); + } + else + { + throw new IOException("Unknown content type: " + contents.getClass().getName()); + } + return contentStreams; + } + + private void processPages(PDDocument document) throws IOException + { + int pageCounter = 0; + for (PDPage page : document.getPages()) + { + pageCounter++; + COSDictionary pageDictionary = page.getCOSObject(); + COSBase originalContent = pageDictionary.getDictionaryObject(COSName.CONTENTS); + COSArray newContentArray = new COSArray(); + LayoutPage layoutPage = getLayoutPage(pageCounter, document.getNumberOfPages()); + if (layoutPage == null) + { + continue; + } + switch (position) + { + case FOREGROUND: + // save state + newContentArray.add(createStream("q\n")); + addOriginalContent(originalContent, newContentArray); + // restore state + newContentArray.add(createStream("Q\n")); + // overlay content last + overlayPage(page, layoutPage, newContentArray); + break; + case BACKGROUND: + // overlay content first + overlayPage(page, layoutPage, newContentArray); + + addOriginalContent(originalContent, newContentArray); + break; + default: + throw new IOException("Unknown type of position:" + position); + } + pageDictionary.setItem(COSName.CONTENTS, newContentArray); + } + } + + private void addOriginalContent(COSBase contents, COSArray contentArray) throws IOException + { + if (contents == null) + { + return; + } + + if (contents instanceof COSStream) + { + contentArray.add(contents); + } + else if (contents instanceof COSArray) + { + contentArray.addAll((COSArray) contents); + } + else + { + throw new IOException("Unknown content type: " + contents.getClass().getName()); + } + } + + private void overlayPage(PDPage page, LayoutPage layoutPage, COSArray array) + throws IOException + { + PDResources resources = page.getResources(); + if (resources == null) + { + resources = new PDResources(); + page.setResources(resources); + } + COSName xObjectId = createOverlayXObject(page, layoutPage, + layoutPage.overlayContentStream); + array.add(createOverlayStream(page, layoutPage, xObjectId)); + } + + private LayoutPage getLayoutPage(int pageNumber, int numberOfPages) + { + LayoutPage layoutPage = null; + if (!useAllOverlayPages && specificPageOverlayPage.containsKey(pageNumber)) + { + layoutPage = specificPageOverlayPage.get(pageNumber); + } + else if ((pageNumber == 1) && (firstPageOverlayPage != null)) + { + layoutPage = firstPageOverlayPage; + } + else if ((pageNumber == numberOfPages) && (lastPageOverlayPage != null)) + { + layoutPage = lastPageOverlayPage; + } + else if ((pageNumber % 2 == 1) && (oddPageOverlayPage != null)) + { + layoutPage = oddPageOverlayPage; + } + else if ((pageNumber % 2 == 0) && (evenPageOverlayPage != null)) + { + layoutPage = evenPageOverlayPage; + } + else if (defaultOverlayPage != null) + { + layoutPage = defaultOverlayPage; + } + else if (useAllOverlayPages) + { + int usePageNum = (pageNumber -1 ) % numberOfOverlayPages; + layoutPage = specificPageOverlayPage.get(usePageNum); + } + return layoutPage; + } + + private COSName createOverlayXObject(PDPage page, LayoutPage layoutPage, COSStream contentStream) + { + PDFormXObject xobjForm = new PDFormXObject(contentStream); + xobjForm.setResources(new PDResources(layoutPage.overlayResources)); + xobjForm.setFormType(1); + xobjForm.setBBox( layoutPage.overlayMediaBox.createRetranslatedRectangle()); + xobjForm.setMatrix(new AffineTransform()); + PDResources resources = page.getResources(); + return resources.add(xobjForm, "OL"); + } + + private COSStream createOverlayStream(PDPage page, LayoutPage layoutPage, COSName xObjectId) + throws IOException + { + // create a new content stream that executes the XObject content + StringBuilder overlayStream = new StringBuilder(); + overlayStream.append("q\nq\n"); + AffineTransform at = calculateAffineTransform(page, layoutPage.overlayMediaBox); + double[] flatmatrix = new double[6]; + at.getMatrix(flatmatrix); + for (double v : flatmatrix) + { + overlayStream.append(float2String((float) v)); + overlayStream.append(" "); + } + overlayStream.append(" cm\n/"); + overlayStream.append(xObjectId.getName()); + overlayStream.append(" Do Q\nQ\n"); + return createStream(overlayStream.toString()); + } + + /** + * Calculate the transform to be used when positioning the overlay. The default implementation + * centers on the destination. Override this method to do your own, e.g. move to a corner, or + * rotate. + * + * @param page The page that will get the overlay. + * @param overlayMediaBox The overlay media box. + * @return The affine transform to be used. + */ + protected AffineTransform calculateAffineTransform(PDPage page, PDRectangle overlayMediaBox) + { + AffineTransform at = new AffineTransform(); + PDRectangle pageMediaBox = page.getMediaBox(); + float hShift = (pageMediaBox.getWidth() - overlayMediaBox.getWidth()) / 2.0f; + float vShift = (pageMediaBox.getHeight() - overlayMediaBox.getHeight()) / 2.0f; + at.translate(hShift, vShift); + return at; + } + + private String float2String(float floatValue) + { + // use a BigDecimal as intermediate state to avoid + // a floating point string representation of the float value + BigDecimal value = new BigDecimal(String.valueOf(floatValue)); + String stringValue = value.toPlainString(); + // remove fraction digit "0" only + if (stringValue.indexOf('.') > -1 && !stringValue.endsWith(".0")) + { + while (stringValue.endsWith("0") && !stringValue.endsWith(".0")) + { + stringValue = stringValue.substring(0,stringValue.length()-1); + } + } + return stringValue; + } + + private COSStream createStream(String content) throws IOException + { + COSStream stream = inputPDFDocument.getDocument().createCOSStream(); + try (OutputStream out = stream.createOutputStream( + content.length() > 20 ? COSName.FLATE_DECODE : null)) + { + out.write(content.getBytes("ISO-8859-1")); + } + return stream; + } + + /** + * Sets the overlay position. + * + * @param overlayPosition the overlay position + */ + public void setOverlayPosition(Position overlayPosition) + { + position = overlayPosition; + } + + /** + * Sets the file to be overlayed. + * + * @param inputFile the file to be overlayed. The {@link PDDocument} object gathered from + * opening this file will be returned by + * {@link #overlay(java.util.Map) overlay(Map<Integer, String>)}. + */ + public void setInputFile(String inputFile) + { + inputFileName = inputFile; + } + + /** + * Sets the PDF to be overlayed. + * + * @param inputPDF the PDF to be overlayed. This will be the object that is returned by + * {@link #overlay(java.util.Map) overlay(Map<Integer, String>)}. + */ + public void setInputPDF(PDDocument inputPDF) + { + inputPDFDocument = inputPDF; + } + + /** + * Returns the input file. + * + * @return the input file + */ + public String getInputFile() + { + return inputFileName; + } + + /** + * Sets the default overlay file. + * + * @param defaultOverlayFile the default overlay file + */ + public void setDefaultOverlayFile(String defaultOverlayFile) + { + defaultOverlayFilename = defaultOverlayFile; + } + + /** + * Sets the default overlay PDF. + * + * @param defaultOverlayPDF the default overlay PDF + */ + public void setDefaultOverlayPDF(PDDocument defaultOverlayPDF) + { + defaultOverlay = defaultOverlayPDF; + } + + /** + * Returns the default overlay file. + * + * @return the default overlay file + */ + public String getDefaultOverlayFile() + { + return defaultOverlayFilename; + } + + /** + * Sets the first page overlay file. + * + * @param firstPageOverlayFile the first page overlay file + */ + public void setFirstPageOverlayFile(String firstPageOverlayFile) + { + firstPageOverlayFilename = firstPageOverlayFile; + } + + /** + * Sets the first page overlay PDF. + * + * @param firstPageOverlayPDF the first page overlay PDF + */ + public void setFirstPageOverlayPDF(PDDocument firstPageOverlayPDF) + { + firstPageOverlay = firstPageOverlayPDF; + } + + /** + * Sets the last page overlay file. + * + * @param lastPageOverlayFile the last page overlay file + */ + public void setLastPageOverlayFile(String lastPageOverlayFile) + { + lastPageOverlayFilename = lastPageOverlayFile; + } + + /** + * Sets the last page overlay PDF. + * + * @param lastPageOverlayPDF the last page overlay PDF + */ + public void setLastPageOverlayPDF(PDDocument lastPageOverlayPDF) + { + lastPageOverlay = lastPageOverlayPDF; + } + + /** + * Sets the all pages overlay file. + * + * @param allPagesOverlayFile the all pages overlay file + */ + public void setAllPagesOverlayFile(String allPagesOverlayFile) + { + allPagesOverlayFilename = allPagesOverlayFile; + } + + /** + * Sets the all pages overlay PDF. + * + * @param allPagesOverlayPDF the all pages overlay PDF. This should not be a PDDocument that you + * created on the fly, it should be saved first, if it contains any fonts that are subset. + */ + public void setAllPagesOverlayPDF(PDDocument allPagesOverlayPDF) + { + allPagesOverlay = allPagesOverlayPDF; + } + + /** + * Sets the odd page overlay file. + * + * @param oddPageOverlayFile the odd page overlay file + */ + public void setOddPageOverlayFile(String oddPageOverlayFile) + { + oddPageOverlayFilename = oddPageOverlayFile; + } + + /** + * Sets the odd page overlay PDF. + * + * @param oddPageOverlayPDF the odd page overlay PDF + */ + public void setOddPageOverlayPDF(PDDocument oddPageOverlayPDF) + { + oddPageOverlay = oddPageOverlayPDF; + } + + /** + * Sets the even page overlay file. + * + * @param evenPageOverlayFile the even page overlay file + */ + public void setEvenPageOverlayFile(String evenPageOverlayFile) + { + evenPageOverlayFilename = evenPageOverlayFile; + } + + /** + * Sets the even page overlay PDF. + * + * @param evenPageOverlayPDF the even page overlay PDF + */ + public void setEvenPageOverlayPDF(PDDocument evenPageOverlayPDF) + { + evenPageOverlay = evenPageOverlayPDF; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java new file mode 100644 index 00000000000..4d9d4314c3b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java @@ -0,0 +1,244 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * Utility class used to clone PDF objects. It keeps track of objects it has + * already cloned. + * + */ +class PDFCloneUtility +{ + private final PDDocument destination; + private final Map clonedVersion = new HashMap<>(); + private final Set clonedValues = new HashSet<>(); + // It might be useful to use IdentityHashMap like in PDFBOX-4477 for speed, + // but we need a really huge file to test this. A test with the file from PDFBOX-4477 + // did not show a noticeable speed difference. + + /** + * Creates a new instance for the given target document. + * @param dest the destination PDF document that will receive the clones + */ + PDFCloneUtility(PDDocument dest) + { + this.destination = dest; + } + + /** + * Returns the destination PDF document this cloner instance is set up for. + * @return the destination PDF document + */ + PDDocument getDestination() + { + return this.destination; + } + + /** + * Deep-clones the given object for inclusion into a different PDF document identified by + * the destination parameter. + * @param base the initial object as the root of the deep-clone operation + * @return the cloned instance of the base object + * @throws IOException if an I/O error occurs + */ + COSBase cloneForNewDocument( Object base ) throws IOException + { + if( base == null ) + { + return null; + } + COSBase retval = clonedVersion.get(base); + if( retval != null ) + { + //we are done, it has already been converted. + return retval; + } + if (base instanceof COSBase && clonedValues.contains(base)) + { + // Don't clone a clone + return (COSBase) base; + } + if (base instanceof List) + { + COSArray array = new COSArray(); + List list = (List) base; + for (Object obj : list) + { + array.add(cloneForNewDocument(obj)); + } + retval = array; + } + else if( base instanceof COSObjectable && !(base instanceof COSBase) ) + { + retval = cloneForNewDocument( ((COSObjectable)base).getCOSObject() ); + } + else if( base instanceof COSObject ) + { + COSObject object = (COSObject)base; + retval = cloneForNewDocument( object.getObject() ); + } + else if( base instanceof COSArray ) + { + COSArray newArray = new COSArray(); + COSArray array = (COSArray)base; + for( int i=0; i entry : originalStream.entrySet() ) + { + stream.setItem(entry.getKey(), cloneForNewDocument(entry.getValue())); + } + retval = stream; + } + else if( base instanceof COSDictionary ) + { + COSDictionary dic = (COSDictionary)base; + retval = new COSDictionary(); + clonedVersion.put( base, retval ); + for( Map.Entry entry : dic.entrySet() ) + { + ((COSDictionary)retval).setItem( + entry.getKey(), + cloneForNewDocument(entry.getValue())); + } + } + else + { + retval = (COSBase)base; + } + clonedVersion.put( base, retval ); + clonedValues.add(retval); + return retval; + } + + /** + * Merges two objects of the same type by deep-cloning its members. + *
+ * Base and target must be instances of the same class. + * @param base the base object to be cloned + * @param target the merge target + * @throws IOException if an I/O error occurs + */ + void cloneMerge( final COSObjectable base, COSObjectable target) throws IOException + { + if( base == null ) + { + return; + } + COSBase retval = clonedVersion.get( base ); + if( retval != null ) + { + return; + //we are done, it has already been converted. // ### Is that correct for cloneMerge??? + } + //TODO what when clone-merging a clone? Does it ever happen? + if (!(base instanceof COSBase)) + { + cloneMerge(base.getCOSObject(), target.getCOSObject()); + } + else if( base instanceof COSObject ) + { + if(target instanceof COSObject) + { + cloneMerge(((COSObject) base).getObject(),((COSObject) target).getObject() ); + } + else if (target instanceof COSDictionary || target instanceof COSArray) + { + cloneMerge(((COSObject) base).getObject(), target); + } + } + else if( base instanceof COSArray ) + { + COSArray array = (COSArray)base; + for( int i=0; i entry : originalStream.entrySet() ) + { + stream.setItem(entry.getKey(), cloneForNewDocument(entry.getValue())); + } + retval = stream; + } + else if( base instanceof COSDictionary ) + { + COSDictionary dic = (COSDictionary)base; + clonedVersion.put( base, retval ); + for( Map.Entry entry : dic.entrySet() ) + { + COSName key = entry.getKey(); + COSBase value = entry.getValue(); + if (((COSDictionary)target).getItem(key) != null) + { + cloneMerge(value, ((COSDictionary)target).getItem(key)); + } + else + { + ((COSDictionary)target).setItem( key, cloneForNewDocument(value)); + } + } + } + else + { + retval = (COSBase)base; + } + clonedVersion.put( base, retval ); + clonedValues.add(retval); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java new file mode 100644 index 00000000000..2bfac6dbc6b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java @@ -0,0 +1,1459 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.PDDocumentNameDestinationDictionary; +import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.PDStructureElementNameTreeNode; +import org.apache.pdfbox.pdmodel.PageMode; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDDestinationOrAction; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDMarkInfo; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDParentTreeValue; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; +import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.viewerpreferences.PDViewerPreferences; + +/** + * This class will take a list of pdf documents and merge them, saving the + * result in a new document. + * + * @author Ben Litchfield + */ +public class PDFMergerUtility +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDFMergerUtility.class); + + private final List sources; + private String destinationFileName; + private OutputStream destinationStream; + private boolean ignoreAcroFormErrors = false; + private PDDocumentInformation destinationDocumentInformation = null; + private PDMetadata destinationMetadata = null; + + private DocumentMergeMode documentMergeMode = DocumentMergeMode.PDFBOX_LEGACY_MODE; + private AcroFormMergeMode acroFormMergeMode = AcroFormMergeMode.PDFBOX_LEGACY_MODE; + + /** + * The mode to use when merging documents: + * + *
    + *
  • {@link DocumentMergeMode#OPTIMIZE_RESOURCES_MODE} Optimizes resource handling such as + * closing documents early. Not all document elements are merged compared to + * the PDFBOX_LEGACY_MODE. Currently supported are: + *
      + *
    • Page content and resources + *
    + *
  • {@link DocumentMergeMode#PDFBOX_LEGACY_MODE} Keeps all files open until the + * merge has been completed. This is currently necessary to merge documents + * containing a Structure Tree. + *
+ */ + public enum DocumentMergeMode + { + OPTIMIZE_RESOURCES_MODE, + PDFBOX_LEGACY_MODE + } + + /** + * The mode to use when merging AcroForm between documents: + * + *
    + *
  • {@link AcroFormMergeMode#JOIN_FORM_FIELDS_MODE} fields with the same fully qualified name + * will be merged into one with the widget annotations of the merged fields + * becoming part of the same field. + *
  • {@link AcroFormMergeMode#PDFBOX_LEGACY_MODE} fields with the same fully qualified name + * will be renamed and treated as independent. This mode was used in versions + * of PDFBox up to 2.x. + *
+ */ + public enum AcroFormMergeMode + { + JOIN_FORM_FIELDS_MODE, + PDFBOX_LEGACY_MODE + } + + /** + * Instantiate a new PDFMergerUtility. + */ + public PDFMergerUtility() + { + sources = new ArrayList<>(); + } + + /** + * Get the merge mode to be used for merging AcroForms between documents + * + * {@link AcroFormMergeMode} + */ + public AcroFormMergeMode getAcroFormMergeMode() + { + return acroFormMergeMode; + } + + /** + * Set the merge mode to be used for merging AcroForms between documents + * + * {@link AcroFormMergeMode} + */ + public void setAcroFormMergeMode(AcroFormMergeMode theAcroFormMergeMode) + { + this.acroFormMergeMode = theAcroFormMergeMode; + } + + /** + * Get the merge mode to be used for merging documents + * + * {@link DocumentMergeMode} + */ + public DocumentMergeMode getDocumentMergeMode() + { + return documentMergeMode; + } + + /** + * Set the merge mode to be used for merging documents + * + * {@link DocumentMergeMode} + */ + public void setDocumentMergeMode(DocumentMergeMode theDocumentMergeMode) + { + this.documentMergeMode = theDocumentMergeMode; + } + + + /** + * Set the mode to be used for merging the documents + * + * {@link DocumentMergeMode} + */ + public void setAcroFormMergeMode(DocumentMergeMode theDocumentMergeMode) + { + this.documentMergeMode = theDocumentMergeMode; + } + + /** + * Get the name of the destination file. + * + * @return Returns the destination. + */ + public String getDestinationFileName() + { + return destinationFileName; + } + + /** + * Set the name of the destination file. + * + * @param destination The destination to set. + */ + public void setDestinationFileName(String destination) + { + destinationFileName = destination; + } + + /** + * Get the destination OutputStream. + * + * @return Returns the destination OutputStream. + */ + public OutputStream getDestinationStream() + { + return destinationStream; + } + + /** + * Set the destination OutputStream. + * + * @param destStream The destination to set. + */ + public void setDestinationStream(OutputStream destStream) + { + destinationStream = destStream; + } + + /** + * Get the destination document information that is to be set in {@link #mergeDocuments(org.apache.pdfbox.io.MemoryUsageSetting) + * }. The default is null, which means that it is ignored. + * + * @return The destination document information. + */ + public PDDocumentInformation getDestinationDocumentInformation() + { + return destinationDocumentInformation; + } + + /** + * Set the destination document information that is to be set in {@link #mergeDocuments(org.apache.pdfbox.io.MemoryUsageSetting) + * }. The default is null, which means that it is ignored. + * + * @param info The destination document information. + */ + public void setDestinationDocumentInformation(PDDocumentInformation info) + { + destinationDocumentInformation = info; + } + + /** + * Set the destination metadata that is to be set in {@link #mergeDocuments(org.apache.pdfbox.io.MemoryUsageSetting) + * }. The default is null, which means that it is ignored. + * + * @return The destination metadata. + */ + public PDMetadata getDestinationMetadata() + { + return destinationMetadata; + } + + /** + * Set the destination metadata that is to be set in {@link #mergeDocuments(org.apache.pdfbox.io.MemoryUsageSetting) + * }. The default is null, which means that it is ignored. + * + * @param meta The destination metadata. + */ + public void setDestinationMetadata(PDMetadata meta) + { + destinationMetadata = meta; + } + + /** + * Add a source file to the list of files to merge. + * + * @param source Full path and file name of source document. + * + * @throws FileNotFoundException If the file doesn't exist + */ + public void addSource(String source) throws FileNotFoundException + { + addSource(new File(source)); + } + + /** + * Add a source file to the list of files to merge. + * + * @param source File representing source document + * + * @throws FileNotFoundException If the file doesn't exist + */ + public void addSource(File source) throws FileNotFoundException + { + sources.add(source); + } + + /** + * Add a source to the list of documents to merge. + * + * @param source InputStream representing source document + */ + public void addSource(InputStream source) + { + sources.add(source); + } + + /** + * Add a list of sources to the list of documents to merge. + * + * @param sourcesList List of InputStream objects representing source + * documents + */ + public void addSources(List sourcesList) + { + sources.addAll(sourcesList); + } + + /** + * Merge the list of source documents, saving the result in the destination file. + * + * @throws IOException If there is an error saving the document. + * @deprecated use {@link #mergeDocuments(org.apache.pdfbox.io.MemoryUsageSetting) } + */ + @Deprecated + public void mergeDocuments() throws IOException + { + mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Merge the list of source documents, saving the result in the destination + * file. + * + * @param memUsageSetting defines how memory is used for buffering PDF streams; + * in case of null unrestricted main memory is used + * + * @throws IOException If there is an error saving the document. + */ + public void mergeDocuments(MemoryUsageSetting memUsageSetting) throws IOException + { + if (documentMergeMode == DocumentMergeMode.PDFBOX_LEGACY_MODE) + { + legacyMergeDocuments(memUsageSetting); + } + else if (documentMergeMode == DocumentMergeMode.OPTIMIZE_RESOURCES_MODE) + { + optimizedMergeDocuments(memUsageSetting); + } + } + + private void optimizedMergeDocuments(MemoryUsageSetting memUsageSetting) throws IOException + { + try (PDDocument destination = new PDDocument(memUsageSetting)) + { + PDFCloneUtility cloner = new PDFCloneUtility(destination); + for (Object sourceObject : sources) + { + PDDocument sourceDoc = null; + try + { + if (sourceObject instanceof File) + { + sourceDoc = PDDocument.load((File) sourceObject, memUsageSetting); + } + else + { + sourceDoc = PDDocument.load((InputStream) sourceObject, memUsageSetting); + } + for (PDPage page : sourceDoc.getPages()) + { + PDPage newPage = new PDPage( + (COSDictionary) cloner.cloneForNewDocument(page.getCOSObject())); + newPage.setCropBox(page.getCropBox()); + newPage.setMediaBox(page.getMediaBox()); + newPage.setRotation(page.getRotation()); + PDResources resources = page.getResources(); + if (resources != null) + { + // this is smart enough to just create references for resources that are used on multiple + // pages + newPage.setResources(new PDResources( + (COSDictionary) cloner.cloneForNewDocument(resources))); + } + else + { + newPage.setResources(new PDResources()); + } + destination.addPage(newPage); + } + } + finally + { + IOUtils.closeQuietly(sourceDoc); + } + } + + if (destinationStream == null) + { + destination.save(destinationFileName); + } + else + { + destination.save(destinationStream); + } + } + } + + + /** + * Merge the list of source documents, saving the result in the destination + * file. + * + * @param memUsageSetting defines how memory is used for buffering PDF streams; + * in case of null unrestricted main memory is used + * + * @throws IOException If there is an error saving the document. + */ + private void legacyMergeDocuments(MemoryUsageSetting memUsageSetting) throws IOException + { + if (sources != null && !sources.isEmpty()) + { + // Make sure that: + // - first Exception is kept + // - all PDDocuments are closed + // - all FileInputStreams are closed + // - there's a way to see which errors occured + + List tobeclosed = new ArrayList<>(); + MemoryUsageSetting partitionedMemSetting = memUsageSetting != null ? + memUsageSetting.getPartitionedCopy(sources.size()+1) : + MemoryUsageSetting.setupMainMemoryOnly(); + try (PDDocument destination = new PDDocument(partitionedMemSetting)) + { + for (Object sourceObject : sources) + { + PDDocument sourceDoc = null; + if (sourceObject instanceof File) + { + sourceDoc = PDDocument.load((File) sourceObject, partitionedMemSetting); + } + else + { + sourceDoc = PDDocument.load((InputStream) sourceObject, + partitionedMemSetting); + } + tobeclosed.add(sourceDoc); + appendDocument(destination, sourceDoc); + } + + // optionally set meta data + if (destinationDocumentInformation != null) + { + destination.setDocumentInformation(destinationDocumentInformation); + } + if (destinationMetadata != null) + { + destination.getDocumentCatalog().setMetadata(destinationMetadata); + } + + if (destinationStream == null) + { + destination.save(destinationFileName); + } + else + { + destination.save(destinationStream); + } + } + finally + { + for (PDDocument doc : tobeclosed) + { + IOUtils.closeAndLogException(doc, LOG, "PDDocument", null); + } + } + } + } + + /** + * append all pages from source to destination. + * + * @param destination the document to receive the pages + * @param source the document originating the new pages + * + * @throws IOException If there is an error accessing data from either + * document. + */ + public void appendDocument(PDDocument destination, PDDocument source) throws IOException + { + if (source.getDocument().isClosed()) + { + throw new IOException("Error: source PDF is closed."); + } + if (destination.getDocument().isClosed()) + { + throw new IOException("Error: destination PDF is closed."); + } + + PDDocumentCatalog destCatalog = destination.getDocumentCatalog(); + PDDocumentCatalog srcCatalog = source.getDocumentCatalog(); + + if (isDynamicXfa(srcCatalog.getAcroForm())) + { + throw new IOException("Error: can't merge source document containing dynamic XFA form content."); + } + + PDDocumentInformation destInfo = destination.getDocumentInformation(); + PDDocumentInformation srcInfo = source.getDocumentInformation(); + mergeInto(srcInfo.getCOSObject(), destInfo.getCOSObject(), Collections.emptySet()); + + // use the highest version number for the resulting pdf + float destVersion = destination.getVersion(); + float srcVersion = source.getVersion(); + + if (destVersion < srcVersion) + { + destination.setVersion(srcVersion); + } + + int pageIndexOpenActionDest = -1; + if (destCatalog.getOpenAction() == null) + { + // PDFBOX-3972: get local dest page index, it must be reassigned after the page cloning + PDDestinationOrAction openAction = null; + try + { + openAction = srcCatalog.getOpenAction(); + } + catch (IOException ex) + { + // PDFBOX-4223 + LOG.error("Invalid OpenAction ignored", ex); + } + PDDestination openActionDestination = null; + if (openAction instanceof PDActionGoTo) + { + openActionDestination = ((PDActionGoTo) openAction).getDestination(); + } + else if (openAction instanceof PDDestination) + { + openActionDestination = (PDDestination) openAction; + } + // note that it can also be something else, e.g. PDActionJavaScript, then do nothing + + if (openActionDestination instanceof PDPageDestination) + { + PDPage page = ((PDPageDestination) openActionDestination).getPage(); + if (page != null) + { + pageIndexOpenActionDest = srcCatalog.getPages().indexOf(page); + } + } + + destCatalog.setOpenAction(openAction); + } + + PDFCloneUtility cloner = new PDFCloneUtility(destination); + + mergeAcroForm(cloner, destCatalog, srcCatalog); + + COSArray destThreads = (COSArray) destCatalog.getCOSObject().getDictionaryObject(COSName.THREADS); + COSArray srcThreads = (COSArray) cloner.cloneForNewDocument(destCatalog.getCOSObject().getDictionaryObject( + COSName.THREADS)); + if (destThreads == null) + { + destCatalog.getCOSObject().setItem(COSName.THREADS, srcThreads); + } + else + { + destThreads.addAll(srcThreads); + } + + PDDocumentNameDictionary destNames = destCatalog.getNames(); + PDDocumentNameDictionary srcNames = srcCatalog.getNames(); + if (srcNames != null) + { + if (destNames == null) + { + destCatalog.getCOSObject().setItem(COSName.NAMES, cloner.cloneForNewDocument(srcNames)); + } + else + { + cloner.cloneMerge(srcNames, destNames); + } + } + + if (destNames != null) + { + // found in 054080.pdf from PDFBOX-4417 and doesn't belong there + destNames.getCOSObject().removeItem(COSName.ID_TREE); + LOG.warn("Removed /IDTree from /Names dictionary, doesn't belong there"); + } + + PDDocumentNameDestinationDictionary destDests = destCatalog.getDests(); + PDDocumentNameDestinationDictionary srcDests = srcCatalog.getDests(); + if (srcDests != null) + { + if (destDests == null) + { + destCatalog.getCOSObject().setItem(COSName.DESTS, cloner.cloneForNewDocument(srcDests)); + } + else + { + cloner.cloneMerge(srcDests, destDests); + } + } + + PDDocumentOutline destOutline = destCatalog.getDocumentOutline(); + PDDocumentOutline srcOutline = srcCatalog.getDocumentOutline(); + if (srcOutline != null) + { + if (destOutline == null || destOutline.getFirstChild() == null) + { + PDDocumentOutline cloned = new PDDocumentOutline((COSDictionary) cloner.cloneForNewDocument(srcOutline)); + destCatalog.setDocumentOutline(cloned); + } + else + { + // search last sibling for dest, because /Last entry is sometimes wrong + PDOutlineItem destLastOutlineItem = destOutline.getFirstChild(); + while (destLastOutlineItem.getNextSibling() != null) + { + destLastOutlineItem = destLastOutlineItem.getNextSibling(); + } + for (PDOutlineItem item : srcOutline.children()) + { + // get each child, clone its dictionary, remove siblings info, + // append outline item created from there + COSDictionary clonedDict = (COSDictionary) cloner.cloneForNewDocument(item); + clonedDict.removeItem(COSName.PREV); + clonedDict.removeItem(COSName.NEXT); + PDOutlineItem clonedItem = new PDOutlineItem(clonedDict); + destLastOutlineItem.insertSiblingAfter(clonedItem); + destLastOutlineItem = destLastOutlineItem.getNextSibling(); + } + } + } + + PageMode destPageMode = destCatalog.getPageMode(); + PageMode srcPageMode = srcCatalog.getPageMode(); + if (destPageMode == null) + { + destCatalog.setPageMode(srcPageMode); + } + + COSDictionary destLabels = (COSDictionary) destCatalog.getCOSObject().getDictionaryObject( + COSName.PAGE_LABELS); + COSDictionary srcLabels = (COSDictionary) srcCatalog.getCOSObject() + .getDictionaryObject(COSName.PAGE_LABELS); + if (srcLabels != null) + { + int destPageCount = destination.getNumberOfPages(); + COSArray destNums; + if (destLabels == null) + { + destLabels = new COSDictionary(); + destNums = new COSArray(); + destLabels.setItem(COSName.NUMS, destNums); + destCatalog.getCOSObject().setItem(COSName.PAGE_LABELS, destLabels); + } + else + { + destNums = (COSArray) destLabels.getDictionaryObject(COSName.NUMS); + } + COSArray srcNums = (COSArray) srcLabels.getDictionaryObject(COSName.NUMS); + if (srcNums != null) + { + int startSize = destNums.size(); + for (int i = 0; i < srcNums.size(); i += 2) + { + COSBase base = srcNums.getObject(i); + if (!(base instanceof COSNumber)) + { + LOG.error("page labels ignored, index " + i + " should be a number, but is " + base); + // remove what we added + while (destNums.size() > startSize) + { + destNums.remove(startSize); + } + break; + } + COSNumber labelIndex = (COSNumber) base; + long labelIndexValue = labelIndex.intValue(); + destNums.add(COSInteger.get(labelIndexValue + destPageCount)); + destNums.add(cloner.cloneForNewDocument(srcNums.getObject(i + 1))); + } + } + } + + COSStream destMetadata = (COSStream) destCatalog.getCOSObject().getDictionaryObject(COSName.METADATA); + COSStream srcMetadata = (COSStream) srcCatalog.getCOSObject().getDictionaryObject(COSName.METADATA); + if (destMetadata == null && srcMetadata != null) + { + try + { + PDStream newStream = new PDStream(destination, srcMetadata.createInputStream(), (COSName) null); + mergeInto(srcMetadata, newStream.getCOSObject(), + new HashSet<>(Arrays.asList(COSName.FILTER, COSName.LENGTH))); + destCatalog.getCOSObject().setItem(COSName.METADATA, newStream); + } + catch (IOException ex) + { + // PDFBOX-4227 cleartext XMP stream with /Flate + LOG.error("Metadata skipped because it could not be read", ex); + } + } + + COSDictionary destOCP = (COSDictionary) destCatalog.getCOSObject().getDictionaryObject(COSName.OCPROPERTIES); + COSDictionary srcOCP = (COSDictionary) srcCatalog.getCOSObject().getDictionaryObject(COSName.OCPROPERTIES); + if (destOCP == null && srcOCP != null) + { + destCatalog.getCOSObject().setItem(COSName.OCPROPERTIES, cloner.cloneForNewDocument(srcOCP)); + } + else if (destOCP != null && srcOCP != null) + { + cloner.cloneMerge(srcOCP, destOCP); + } + + mergeOutputIntents(cloner, srcCatalog, destCatalog); + + // merge logical structure hierarchy + boolean mergeStructTree = false; + int destParentTreeNextKey = -1; + Map srcNumberTreeAsMap = null; + Map destNumberTreeAsMap = null; + PDStructureTreeRoot srcStructTree = srcCatalog.getStructureTreeRoot(); + PDStructureTreeRoot destStructTree = destCatalog.getStructureTreeRoot(); + if (destStructTree == null && srcStructTree != null) + { + // create a dummy structure tree in the destination, so that the source + // tree is cloned. (We can't just copy the tree reference due to PDFBOX-3999) + destStructTree = new PDStructureTreeRoot(); + destCatalog.setStructureTreeRoot(destStructTree); + destStructTree.setParentTree(new PDNumberTreeNode(PDParentTreeValue.class)); + // PDFBOX-4429: remove bogus StructParent(s) + for (PDPage page : destCatalog.getPages()) + { + page.getCOSObject().removeItem(COSName.STRUCT_PARENTS); + for (PDAnnotation ann : page.getAnnotations()) + { + ann.getCOSObject().removeItem(COSName.STRUCT_PARENT); + } + } + } + if (destStructTree != null) + { + PDNumberTreeNode destParentTree = destStructTree.getParentTree(); + destParentTreeNextKey = destStructTree.getParentTreeNextKey(); + if (destParentTree != null) + { + destNumberTreeAsMap = getNumberTreeAsMap(destParentTree); + if (destParentTreeNextKey < 0) + { + if (destNumberTreeAsMap.isEmpty()) + { + destParentTreeNextKey = 0; + } + else + { + destParentTreeNextKey = Collections.max(destNumberTreeAsMap.keySet()) + 1; + } + } + if (destParentTreeNextKey >= 0 && srcStructTree != null) + { + PDNumberTreeNode srcParentTree = srcStructTree.getParentTree(); + if (srcParentTree != null) + { + srcNumberTreeAsMap = getNumberTreeAsMap(srcParentTree); + if (!srcNumberTreeAsMap.isEmpty()) + { + mergeStructTree = true; + } + } + } + } + } + + Map objMapping = new HashMap<>(); + int pageIndex = 0; + for (PDPage page : srcCatalog.getPages()) + { + PDPage newPage = new PDPage((COSDictionary) cloner.cloneForNewDocument(page.getCOSObject())); + if (!mergeStructTree) + { + // PDFBOX-4429: remove bogus StructParent(s) + newPage.getCOSObject().removeItem(COSName.STRUCT_PARENTS); + for (PDAnnotation ann : newPage.getAnnotations()) + { + ann.getCOSObject().removeItem(COSName.STRUCT_PARENT); + } + } + newPage.setCropBox(page.getCropBox()); + newPage.setMediaBox(page.getMediaBox()); + newPage.setRotation(page.getRotation()); + PDResources resources = page.getResources(); + if (resources != null) + { + // this is smart enough to just create references for resources that are used on multiple pages + newPage.setResources(new PDResources((COSDictionary) cloner.cloneForNewDocument(resources))); + } + else + { + newPage.setResources(new PDResources()); + } + if (mergeStructTree) + { + // add the value of the destination ParentTreeNextKey to every source element + // StructParent(s) value so that these don't overlap with the existing values + updateStructParentEntries(newPage, destParentTreeNextKey); + objMapping.put(page.getCOSObject(), newPage.getCOSObject()); + List oldAnnots = page.getAnnotations(); + List newAnnots = newPage.getAnnotations(); + for (int i = 0; i < oldAnnots.size(); i++) + { + objMapping.put(oldAnnots.get(i).getCOSObject(), newAnnots.get(i).getCOSObject()); + } + // TODO update mapping for XObjects + } + destination.addPage(newPage); + + if (pageIndex == pageIndexOpenActionDest) + { + // PDFBOX-3972: reassign the page. + // The openAction is either a PDActionGoTo or a PDPageDestination + PDDestinationOrAction openAction = destCatalog.getOpenAction(); + PDPageDestination pageDestination; + if (openAction instanceof PDActionGoTo) + { + pageDestination = (PDPageDestination) ((PDActionGoTo) openAction).getDestination(); + } + else + { + pageDestination = (PDPageDestination) openAction; + } + pageDestination.setPage(newPage); + } + ++pageIndex; + } + if (mergeStructTree) + { + updatePageReferences(cloner, srcNumberTreeAsMap, objMapping); + int maxSrcKey = -1; + for (Map.Entry entry : srcNumberTreeAsMap.entrySet()) + { + int srcKey = entry.getKey(); + maxSrcKey = Math.max(srcKey, maxSrcKey); + destNumberTreeAsMap.put(destParentTreeNextKey + srcKey, cloner.cloneForNewDocument(entry.getValue())); + } + destParentTreeNextKey += maxSrcKey + 1; + PDNumberTreeNode newParentTreeNode = new PDNumberTreeNode(PDParentTreeValue.class); + + // Note that all elements are stored flatly. This could become a problem for large files + // when these are opened in a viewer that uses the tagging information. + // If this happens, then ​PDNumberTreeNode should be improved with a convenience method that + // stores the map into a B+Tree, see https://en.wikipedia.org/wiki/B+_tree + newParentTreeNode.setNumbers(destNumberTreeAsMap); + + destStructTree.setParentTree(newParentTreeNode); + destStructTree.setParentTreeNextKey(destParentTreeNextKey); + + mergeKEntries(cloner, srcStructTree, destStructTree); + mergeRoleMap(srcStructTree, destStructTree); + mergeIDTree(cloner, srcStructTree, destStructTree); + mergeMarkInfo(destCatalog, srcCatalog); + mergeLanguage(destCatalog, srcCatalog); + mergeViewerPreferences(destCatalog, srcCatalog); + } + } + + private void mergeViewerPreferences(PDDocumentCatalog destCatalog, PDDocumentCatalog srcCatalog) + { + PDViewerPreferences srcViewerPreferences = srcCatalog.getViewerPreferences(); + if (srcViewerPreferences == null) + { + return; + } + PDViewerPreferences destViewerPreferences = destCatalog.getViewerPreferences(); + if (destViewerPreferences == null) + { + destViewerPreferences = new PDViewerPreferences(new COSDictionary()); + destCatalog.setViewerPreferences(destViewerPreferences); + } + mergeInto(srcViewerPreferences.getCOSObject(), destViewerPreferences.getCOSObject(), + Collections.emptySet()); + + // check the booleans - set to true if one is set and true + if (srcViewerPreferences.hideToolbar() || destViewerPreferences.hideToolbar()) + { + destViewerPreferences.setHideToolbar(true); + } + if (srcViewerPreferences.hideMenubar() || destViewerPreferences.hideMenubar()) + { + destViewerPreferences.setHideMenubar(true); + } + if (srcViewerPreferences.hideWindowUI() || destViewerPreferences.hideWindowUI()) + { + destViewerPreferences.setHideWindowUI(true); + } + if (srcViewerPreferences.fitWindow() || destViewerPreferences.fitWindow()) + { + destViewerPreferences.setFitWindow(true); + } + if (srcViewerPreferences.centerWindow() || destViewerPreferences.centerWindow()) + { + destViewerPreferences.setCenterWindow(true); + } + if (srcViewerPreferences.displayDocTitle() || destViewerPreferences.displayDocTitle()) + { + destViewerPreferences.setDisplayDocTitle(true); + } + } + + private void mergeLanguage(PDDocumentCatalog destCatalog, PDDocumentCatalog srcCatalog) + { + if (destCatalog.getLanguage() == null && srcCatalog.getLanguage() != null) + { + destCatalog.setLanguage(srcCatalog.getLanguage()); + } + } + + private void mergeMarkInfo(PDDocumentCatalog destCatalog, PDDocumentCatalog srcCatalog) + { + PDMarkInfo destMark = destCatalog.getMarkInfo(); + PDMarkInfo srcMark = srcCatalog.getMarkInfo(); + if (destMark == null) + { + destMark = new PDMarkInfo(); + } + if (srcMark == null) + { + srcMark = new PDMarkInfo(); + } + destMark.setMarked(true); + destMark.setSuspect(srcMark.isSuspect() || destMark.isSuspect()); + destMark.setSuspect(srcMark.usesUserProperties() || destMark.usesUserProperties()); + destCatalog.setMarkInfo(destMark); + } + + private void mergeKEntries(PDFCloneUtility cloner, + PDStructureTreeRoot srcStructTree, + PDStructureTreeRoot destStructTree) throws IOException + { + // make new /K with array that has the input /K entries + COSArray newKArray = new COSArray(); + if (destStructTree.getK() != null) + { + COSBase base = destStructTree.getK(); + if (base instanceof COSArray) + { + newKArray.addAll((COSArray) base); + } + else + { + newKArray.add(base); + } + } + if (srcStructTree.getK() != null) + { + COSBase base = cloner.cloneForNewDocument(srcStructTree.getK()); + if (base instanceof COSArray) + { + newKArray.addAll((COSArray) base); + } + else + { + newKArray.add(base); + } + } + if (newKArray.size() > 0) + { + COSDictionary kDictLevel0 = new COSDictionary(); + updateParentEntry(newKArray, kDictLevel0); + kDictLevel0.setItem(COSName.K, newKArray); + kDictLevel0.setItem(COSName.P, destStructTree); + kDictLevel0.setItem(COSName.S, COSName.DOCUMENT); + destStructTree.setK(kDictLevel0); + } + } + + private void mergeIDTree(PDFCloneUtility cloner, + PDStructureTreeRoot srcStructTree, + PDStructureTreeRoot destStructTree) throws IOException + { + PDNameTreeNode srcIDTree = srcStructTree.getIDTree(); + PDNameTreeNode destIDTree = destStructTree.getIDTree(); + if (srcIDTree == null) + { + return; + } + if (destIDTree == null) + { + destIDTree = new PDStructureElementNameTreeNode(); + } + Map srcNames = getIDTreeAsMap(srcIDTree); + Map destNames = getIDTreeAsMap(destIDTree); + for (Map.Entry entry : srcNames.entrySet()) + { + if (destNames.containsKey(entry.getKey())) + { + LOG.warn("key " + entry.getKey() + " already exists in destination IDTree"); + } + else + { + destNames.put(entry.getKey(), + new PDStructureElement((COSDictionary) cloner.cloneForNewDocument(entry.getValue().getCOSObject()))); + } + } + destIDTree = new PDStructureElementNameTreeNode(); + destIDTree.setNames(destNames); + destStructTree.setIDTree(destIDTree); + // Note that all elements are stored flatly. This could become a problem for large files + // when these are opened in a viewer that uses the tagging information. + // If this happens, then PDNameTreeNode should be improved with a convenience method that + // stores the map into a B+Tree, see https://en.wikipedia.org/wiki/B+_tree + } + + // PDNameTreeNode.getNames() only brings one level, this is why we need this + // might be made public at a later time, or integrated into PDNameTreeNode with template. + static Map getIDTreeAsMap(PDNameTreeNode idTree) + throws IOException + { + Map names = idTree.getNames(); + if (names == null) + { + names = new LinkedHashMap<>(); + } + else + { + // must copy because the map is read only + names = new LinkedHashMap<>(names); + } + List> kids = idTree.getKids(); + if (kids != null) + { + for (PDNameTreeNode kid : kids) + { + names.putAll(getIDTreeAsMap(kid)); + } + } + return names; + } + + // PDNumberTreeNode.getNumbers() only brings one level, this is why we need this + // might be made public at a later time, or integrated into PDNumberTreeNode. + static Map getNumberTreeAsMap(PDNumberTreeNode tree) + throws IOException + { + Map numbers = tree.getNumbers(); + if (numbers == null) + { + numbers = new LinkedHashMap<>(); + } + else + { + // must copy because the map is read only + numbers = new LinkedHashMap<>(numbers); + } + List kids = tree.getKids(); + if (kids != null) + { + for (PDNumberTreeNode kid : kids) + { + numbers.putAll(getNumberTreeAsMap(kid)); + } + } + return numbers; + } + + private void mergeRoleMap(PDStructureTreeRoot srcStructTree, PDStructureTreeRoot destStructTree) + { + COSDictionary srcDict = srcStructTree.getCOSObject().getCOSDictionary(COSName.ROLE_MAP); + COSDictionary destDict = destStructTree.getCOSObject().getCOSDictionary(COSName.ROLE_MAP); + if (srcDict == null) + { + return; + } + if (destDict == null) + { + destStructTree.getCOSObject().setItem(COSName.ROLE_MAP, srcDict); // clone not needed + return; + } + for (Map.Entry entry : srcDict.entrySet()) + { + COSBase destValue = destDict.getDictionaryObject(entry.getKey()); + if (destValue != null && destValue.equals(entry.getValue())) + { + // already exists, but identical + continue; + } + if (destDict.containsKey(entry.getKey())) + { + LOG.warn("key " + entry.getKey() + " already exists in destination RoleMap"); + } + else + { + destDict.setItem(entry.getKey(), entry.getValue()); + } + } + } + + private void mergeAcroForm(PDFCloneUtility cloner, PDDocumentCatalog destCatalog, + PDDocumentCatalog srcCatalog ) throws IOException + { + try + { + PDAcroForm destAcroForm = destCatalog.getAcroForm(); + PDAcroForm srcAcroForm = srcCatalog.getAcroForm(); + + if (destAcroForm == null && srcAcroForm != null) + { + destCatalog.getCOSObject().setItem(COSName.ACRO_FORM, + cloner.cloneForNewDocument(srcAcroForm.getCOSObject())); + + } + else + { + if (srcAcroForm != null) + { + if (acroFormMergeMode == AcroFormMergeMode.PDFBOX_LEGACY_MODE) + { + acroFormLegacyMode(cloner, destAcroForm, srcAcroForm); + } + else if (acroFormMergeMode == AcroFormMergeMode.JOIN_FORM_FIELDS_MODE) + { + acroFormJoinFieldsMode(cloner, destAcroForm, srcAcroForm); + } + } + } + } + catch (IOException e) + { + // if we are not ignoring exceptions, we'll re-throw this + if (!ignoreAcroFormErrors) + { + throw new IOException(e); + } + } + } + + /* + * Merge the contents of the source form into the destination form for the + * destination file. + * + * @param cloner the object cloner for the destination document + * @param destAcroForm the destination form + * @param srcAcroForm the source form + * @throws IOException If an error occurs while adding the field. + */ + private void acroFormJoinFieldsMode(PDFCloneUtility cloner, PDAcroForm destAcroForm, PDAcroForm srcAcroForm) + throws IOException + { + acroFormLegacyMode(cloner, destAcroForm, srcAcroForm); + } + + /* + * Merge the contents of the source form into the destination form for the + * destination file. + * + * @param cloner the object cloner for the destination document + * @param destAcroForm the destination form + * @param srcAcroForm the source form + * @throws IOException If an error occurs while adding the field. + */ + private void acroFormLegacyMode(PDFCloneUtility cloner, PDAcroForm destAcroForm, PDAcroForm srcAcroForm) + throws IOException + { + List srcFields = srcAcroForm.getFields(); + COSArray destFields; + + if (srcFields != null && !srcFields.isEmpty()) + { + // if a form is merged multiple times using PDFBox the newly generated + // fields starting with dummyFieldName may already exist. We need to determine the last unique + // number used and increment that. + final String prefix = "dummyFieldName"; + final int prefixLength = prefix.length(); + + for (PDField destField : destAcroForm.getFieldTree()) + { + String fieldName = destField.getPartialName(); + if (fieldName.startsWith(prefix)) + { + nextFieldNum = Math.max(nextFieldNum, Integer.parseInt(fieldName.substring(prefixLength, fieldName.length())) + 1); + } + } + + // get the destinations root fields. Could be that the entry doesn't exist + // or is of wrong type + COSBase base = destAcroForm.getCOSObject().getItem(COSName.FIELDS); + if (base instanceof COSArray) + { + destFields = (COSArray) base; + } + else + { + destFields = new COSArray(); + } + + for (PDField srcField : srcAcroForm.getFields()) + { + COSDictionary dstField = (COSDictionary) cloner.cloneForNewDocument(srcField.getCOSObject()); + // if the form already has a field with this name then we need to rename this field + // to prevent merge conflicts. + if (destAcroForm.getField(srcField.getFullyQualifiedName()) != null) + { + dstField.setString(COSName.T, prefix + nextFieldNum++); + } + destFields.add(dstField); + } + destAcroForm.getCOSObject().setItem(COSName.FIELDS,destFields); + } + } + + + // copy outputIntents to destination, but avoid duplicate OutputConditionIdentifier, + // except when it is missing or is named "Custom". + private void mergeOutputIntents(PDFCloneUtility cloner, + PDDocumentCatalog srcCatalog, PDDocumentCatalog destCatalog) throws IOException + { + List srcOutputIntents = srcCatalog.getOutputIntents(); + List dstOutputIntents = destCatalog.getOutputIntents(); + for (PDOutputIntent srcOI : srcOutputIntents) + { + String srcOCI = srcOI.getOutputConditionIdentifier(); + if (srcOCI != null && !"Custom".equals(srcOCI)) + { + // is that identifier already there? + boolean skip = false; + for (PDOutputIntent dstOI : dstOutputIntents) + { + if (dstOI.getOutputConditionIdentifier().equals(srcOCI)) + { + skip = true; + break; + } + } + if (skip) + { + continue; + } + } + destCatalog.addOutputIntent(new PDOutputIntent((COSDictionary) cloner.cloneForNewDocument(srcOI))); + dstOutputIntents.add(srcOI); + } + } + + private int nextFieldNum = 1; + + + /** + * Indicates if acroform errors are ignored or not. + * + * @return true if acroform errors are ignored + */ + public boolean isIgnoreAcroFormErrors() + { + return ignoreAcroFormErrors; + } + + /** + * Set to true to ignore acroform errors. + * + * @param ignoreAcroFormErrorsValue true if acroform errors should be + * ignored + */ + public void setIgnoreAcroFormErrors(boolean ignoreAcroFormErrorsValue) + { + ignoreAcroFormErrors = ignoreAcroFormErrorsValue; + } + + /** + * Update the Pg and Obj references to the new (merged) page. + */ + private void updatePageReferences(PDFCloneUtility cloner, + Map numberTreeAsMap, + Map objMapping) throws IOException + { + for (COSObjectable obj : numberTreeAsMap.values()) + { + if (obj == null) + { + continue; + } + PDParentTreeValue val = (PDParentTreeValue) obj; + COSBase base = val.getCOSObject(); + if (base instanceof COSArray) + { + updatePageReferences(cloner, (COSArray) base, objMapping); + } + else + { + updatePageReferences(cloner, (COSDictionary) base, objMapping); + } + } + } + + /** + * Update the Pg and Obj references to the new (merged) page. + * + * @param parentTreeEntry + * @param objMapping mapping between old and new references + */ + private void updatePageReferences(PDFCloneUtility cloner, + COSDictionary parentTreeEntry, Map objMapping) + throws IOException + { + COSDictionary pageDict = parentTreeEntry.getCOSDictionary(COSName.PG); + if (objMapping.containsKey(pageDict)) + { + parentTreeEntry.setItem(COSName.PG, objMapping.get(pageDict)); + } + COSBase obj = parentTreeEntry.getDictionaryObject(COSName.OBJ); + if (obj instanceof COSDictionary) + { + COSDictionary objDict = (COSDictionary) obj; + if (objMapping.containsKey(objDict)) + { + parentTreeEntry.setItem(COSName.OBJ, objMapping.get(objDict)); + } + else + { + // PDFBOX-3999: clone objects that are not in mapping to make sure that + // these don't remain attached to the source document + COSBase item = parentTreeEntry.getItem(COSName.OBJ); + if (item instanceof COSObject) + { + LOG.debug("clone potential orphan object in structure tree: " + item + + ", Type: " + objDict.getNameAsString(COSName.TYPE) + + ", Subtype: " + objDict.getNameAsString(COSName.SUBTYPE) + + ", T: " + objDict.getNameAsString(COSName.T)); + } + else + { + // don't display in full because of stack overflow + LOG.debug("clone potential orphan object in structure tree" + + ", Type: " + objDict.getNameAsString(COSName.TYPE) + + ", Subtype: " + objDict.getNameAsString(COSName.SUBTYPE) + + ", T: " + objDict.getNameAsString(COSName.T)); + } + parentTreeEntry.setItem(COSName.OBJ, cloner.cloneForNewDocument(obj)); + } + } + COSBase kSubEntry = parentTreeEntry.getDictionaryObject(COSName.K); + if (kSubEntry instanceof COSArray) + { + updatePageReferences(cloner, (COSArray) kSubEntry, objMapping); + } + else if (kSubEntry instanceof COSDictionary) + { + updatePageReferences(cloner, (COSDictionary) kSubEntry, objMapping); + } + } + + private void updatePageReferences(PDFCloneUtility cloner, + COSArray parentTreeEntry, Map objMapping) + throws IOException + { + for (int i = 0; i < parentTreeEntry.size(); i++) + { + COSBase subEntry = parentTreeEntry.getObject(i); + if (subEntry instanceof COSArray) + { + updatePageReferences(cloner, (COSArray) subEntry, objMapping); + } + else if (subEntry instanceof COSDictionary) + { + updatePageReferences(cloner, (COSDictionary) subEntry, objMapping); + } + } + } + + /** + * Update the P reference to the new parent dictionary. + * + * @param kArray the kids array + * @param newParent the new parent + */ + private void updateParentEntry(COSArray kArray, COSDictionary newParent) + { + for (int i = 0; i < kArray.size(); i++) + { + COSBase subEntry = kArray.getObject(i); + if (subEntry instanceof COSDictionary) + { + COSDictionary dictEntry = (COSDictionary) subEntry; + if (dictEntry.getDictionaryObject(COSName.P) != null) + { + dictEntry.setItem(COSName.P, newParent); + } + } + } + } + + /** + * Update the StructParents and StructParent values in a PDPage. + * + * @param page the new page + * @param structParentOffset the offset which should be applied + */ + private void updateStructParentEntries(PDPage page, int structParentOffset) throws IOException + { + if (page.getStructParents() >= 0) + { + page.setStructParents(page.getStructParents() + structParentOffset); + } + List annots = page.getAnnotations(); + List newannots = new ArrayList<>(); + for (PDAnnotation annot : annots) + { + if (annot.getStructParent() >= 0) + { + annot.setStructParent(annot.getStructParent() + structParentOffset); + } + newannots.add(annot); + } + page.setAnnotations(newannots); + } + + /** + * Test for dynamic XFA content. + * + * @param acroForm the AcroForm + * @return true if there is a dynamic XFA form. + */ + private boolean isDynamicXfa(PDAcroForm acroForm) + { + return acroForm != null && acroForm.xfaIsDynamic(); + } + + /** + * This will add all of the dictionaries keys/values to this dictionary, but + * only if they are not in an exclusion list and if they don't already + * exist. If a key already exists in this dictionary then nothing is + * changed. + * + * @param src The source dictionary to get the keys/values from. + * @param dst The destination dictionary to merge the keys/values into. + * @param exclude Names of keys that shall be skipped. + */ + private void mergeInto(COSDictionary src, COSDictionary dst, Set exclude) + { + for (Map.Entry entry : src.entrySet()) + { + if (!exclude.contains(entry.getKey()) && !dst.containsKey(entry.getKey())) + { + dst.setItem(entry.getKey(), entry.getValue()); + } + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PageExtractor.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PageExtractor.java new file mode 100644 index 00000000000..8ad64262435 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PageExtractor.java @@ -0,0 +1,127 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.multipdf; + +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; + +/** + * This class will extract one or more sequential pages and create a new document. + * @author Adam Nichols (adam@apache.org) + */ +public class PageExtractor +{ + private PDDocument sourceDocument; + + // first page to extract is page 1 (by default) + private int startPage = 1; + + private int endPage = 0; + + /** + * Creates a new instance of PageExtractor + * @param sourceDocument The document to split. + */ + public PageExtractor(PDDocument sourceDocument) + { + this.sourceDocument = sourceDocument; + endPage = sourceDocument.getNumberOfPages(); + } + + /** + * Creates a new instance of PageExtractor + * @param sourceDocument The document to split. + * @param startPage The first page you want extracted (inclusive) + * @param endPage The last page you want extracted (inclusive) + */ + public PageExtractor(PDDocument sourceDocument, int startPage, int endPage) + { + this(sourceDocument); + this.startPage = startPage; + this.endPage = endPage; + } + + /** + * This will take a document and extract the desired pages into a new + * document. Both startPage and endPage are included in the extracted + * document. If the endPage is greater than the number of pages in the + * source document, it will go to the end of the document. If startPage is + * less than 1, it'll start with page 1. If startPage is greater than + * endPage or greater than the number of pages in the source document, a + * blank document will be returned. + * + * @return The extracted document + * @throws IOException If there is an IOError + */ + public PDDocument extract() throws IOException + { + PDDocument extractedDocument = new PDDocument(); + extractedDocument.setDocumentInformation(sourceDocument.getDocumentInformation()); + extractedDocument.getDocumentCatalog().setViewerPreferences( + sourceDocument.getDocumentCatalog().getViewerPreferences()); + + for (int i = startPage; i <= endPage; i++) + { + PDPage page = sourceDocument.getPage(i - 1); + PDPage imported = extractedDocument.importPage(page); + imported.setCropBox(page.getCropBox()); + imported.setMediaBox(page.getMediaBox()); + imported.setResources(page.getResources()); + imported.setRotation(page.getRotation()); + } + + return extractedDocument; + } + + /** + * Gets the first page number to be extracted. + * @return the first page number which should be extracted + */ + public int getStartPage() + { + return startPage; + } + + /** + * Sets the first page number to be extracted. + * @param startPage the first page number which should be extracted + */ + public void setStartPage(int startPage) + { + this.startPage = startPage; + } + + /** + * Gets the last page number (inclusive) to be extracted. + * @return the last page number which should be extracted + */ + public int getEndPage() + { + return endPage; + } + + /** + * Sets the last page number to be extracted. + * @param endPage the last page number which should be extracted + */ + public void setEndPage(int endPage) + { + this.endPage = endPage; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java new file mode 100644 index 00000000000..26fa34461c4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java @@ -0,0 +1,279 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; + +/** + * Split a document into several other documents. + * + * @author Mario Ivankovits + * @author Ben Litchfield + */ +public class Splitter +{ + private PDDocument sourceDocument; + private PDDocument currentDestinationDocument; + + private int splitLength = 1; + private int startPage = Integer.MIN_VALUE; + private int endPage = Integer.MAX_VALUE; + private List destinationDocuments; + + private int currentPageNumber = 0; + + private MemoryUsageSetting memoryUsageSetting = null; + + /** + * @return the current memory setting. + */ + public MemoryUsageSetting getMemoryUsageSetting() + { + return memoryUsageSetting; + } + + /** + * Set the memory setting. + * + * @param memoryUsageSetting + */ + public void setMemoryUsageSetting(MemoryUsageSetting memoryUsageSetting) + { + this.memoryUsageSetting = memoryUsageSetting; + } + + /** + * This will take a document and split into several other documents. + * + * @param document The document to split. + * + * @return A list of all the split documents. + * + * @throws IOException If there is an IOError + */ + public List split(PDDocument document) throws IOException + { + destinationDocuments = new ArrayList<>(); + sourceDocument = document; + processPages(); + return destinationDocuments; + } + + /** + * This will tell the splitting algorithm where to split the pages. The default + * is 1, so every page will become a new document. If it was two then each document would + * contain 2 pages. If the source document had 5 pages it would split into + * 3 new documents, 2 documents containing 2 pages and 1 document containing one + * page. + * + * @param split The number of pages each split document should contain. + * @throws IllegalArgumentException if the page is smaller than one. + */ + public void setSplitAtPage(int split) + { + if(split <= 0) + { + throw new IllegalArgumentException("Number of pages is smaller than one"); + } + splitLength = split; + } + + /** + * This will set the start page. + * + * @param start the 1-based start page + * @throws IllegalArgumentException if the start page is smaller than one. + */ + public void setStartPage(int start) + { + if(start <= 0) + { + throw new IllegalArgumentException("Start page is smaller than one"); + } + startPage = start; + } + + /** + * This will set the end page. + * + * @param end the 1-based end page + * @throws IllegalArgumentException if the end page is smaller than one. + */ + public void setEndPage(int end) + { + if(end <= 0) + { + throw new IllegalArgumentException("End page is smaller than one"); + } + endPage = end; + } + + /** + * Interface method to handle the start of the page processing. + * + * @throws IOException If an IO error occurs. + */ + private void processPages() throws IOException + { + for (PDPage page : sourceDocument.getPages()) + { + if (currentPageNumber + 1 >= startPage && currentPageNumber + 1 <= endPage) + { + processPage(page); + currentPageNumber++; + } + else + { + if (currentPageNumber > endPage) + { + break; + } + else + { + currentPageNumber++; + } + } + } + } + + /** + * Helper method for creating new documents at the appropriate pages. + * + * @throws IOException If there is an error creating the new document. + */ + private void createNewDocumentIfNecessary() throws IOException + { + if (splitAtPage(currentPageNumber) || currentDestinationDocument == null) + { + currentDestinationDocument = createNewDocument(); + destinationDocuments.add(currentDestinationDocument); + } + } + + /** + * Check if it is necessary to create a new document. + * By default a split occurs at every page. If you wanted to split + * based on some complex logic then you could override this method. For example. + * + * protected void splitAtPage() + * { + * // will split at pages with prime numbers only + * return isPrime(pageNumber); + * } + * + * @param pageNumber the 0-based page number to be checked as splitting page + * + * @return true If a new document should be created. + */ + protected boolean splitAtPage(int pageNumber) + { + return (pageNumber + 1 - Math.max(1, startPage)) % splitLength == 0; + } + + /** + * Create a new document to write the split contents to. + * + * @return the newly created PDDocument. + * @throws IOException If there is an problem creating the new document. + */ + protected PDDocument createNewDocument() throws IOException + { + PDDocument document = memoryUsageSetting == null ? + new PDDocument() : new PDDocument(memoryUsageSetting); + document.getDocument().setVersion(getSourceDocument().getVersion()); + document.setDocumentInformation(getSourceDocument().getDocumentInformation()); + document.getDocumentCatalog().setViewerPreferences( + getSourceDocument().getDocumentCatalog().getViewerPreferences()); + return document; + } + + /** + * Interface to start processing a new page. + * + * @param page The page that is about to get processed. + * + * @throws IOException If there is an error creating the new document. + */ + protected void processPage(PDPage page) throws IOException + { + createNewDocumentIfNecessary(); + + PDPage imported = getDestinationDocument().importPage(page); + imported.setResources(page.getResources()); + // remove page links to avoid copying not needed resources + processAnnotations(imported); + } + + private void processAnnotations(PDPage imported) throws IOException + { + List annotations = imported.getAnnotations(); + for (PDAnnotation annotation : annotations) + { + if (annotation instanceof PDAnnotationLink) + { + PDAnnotationLink link = (PDAnnotationLink)annotation; + PDDestination destination = link.getDestination(); + if (destination == null && link.getAction() != null) + { + PDAction action = link.getAction(); + if (action instanceof PDActionGoTo) + { + destination = ((PDActionGoTo)action).getDestination(); + } + } + if (destination instanceof PDPageDestination) + { + // TODO preserve links to pages within the splitted result + ((PDPageDestination) destination).setPage(null); + } + } + // TODO preserve links to pages within the splitted result + annotation.setPage(null); + } + } + /** + * The source PDF document. + * + * @return the pdf to be splitted + */ + protected final PDDocument getSourceDocument() + { + return sourceDocument; + } + + /** + * The source PDF document. + * + * @return current destination pdf + */ + protected final PDDocument getDestinationDocument() + { + return currentDestinationDocument; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java new file mode 100644 index 00000000000..016ce658762 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java @@ -0,0 +1,1405 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.CharsetDecoder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSObjectKey; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.util.Charsets; + + +import static org.apache.pdfbox.util.Charsets.ISO_8859_1; + +/** + * This class is used to contain parsing logic that will be used by both the + * PDFParser and the COSStreamParser. + * + * @author Ben Litchfield + */ +public abstract class BaseParser +{ + private static final long OBJECT_NUMBER_THRESHOLD = 10000000000L; + + private static final long GENERATION_NUMBER_THRESHOLD = 65535; + + static final int MAX_LENGTH_LONG = Long.toString(Long.MAX_VALUE).length(); + + private final CharsetDecoder utf8Decoder = Charsets.UTF_8.newDecoder(); + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(BaseParser.class); + + protected static final int E = 'e'; + protected static final int N = 'n'; + protected static final int D = 'd'; + + protected static final int S = 's'; + protected static final int T = 't'; + protected static final int R = 'r'; + protected static final int A = 'a'; + protected static final int M = 'm'; + + protected static final int O = 'o'; + protected static final int B = 'b'; + protected static final int J = 'j'; + + /** + * This is a string constant that will be used for comparisons. + */ + public static final String DEF = "def"; + /** + * This is a string constant that will be used for comparisons. + */ + protected static final String ENDOBJ_STRING = "endobj"; + /** + * This is a string constant that will be used for comparisons. + */ + protected static final String ENDSTREAM_STRING = "endstream"; + /** + * This is a string constant that will be used for comparisons. + */ + protected static final String STREAM_STRING = "stream"; + /** + * This is a string constant that will be used for comparisons. + */ + private static final String TRUE = "true"; + /** + * This is a string constant that will be used for comparisons. + */ + private static final String FALSE = "false"; + /** + * This is a string constant that will be used for comparisons. + */ + private static final String NULL = "null"; + + /** + * ASCII code for line feed. + */ + protected static final byte ASCII_LF = 10; + /** + * ASCII code for carriage return. + */ + protected static final byte ASCII_CR = 13; + private static final byte ASCII_ZERO = 48; + private static final byte ASCII_NINE = 57; + private static final byte ASCII_SPACE = 32; + + /** + * This is the stream that will be read from. + */ + protected final SequentialSource seqSource; + + /** + * This is the document that will be parsed. + */ + protected COSDocument document; + + /** + * Default constructor. + */ + public BaseParser(SequentialSource pdfSource) + { + this.seqSource = pdfSource; + } + + private static boolean isHexDigit(char ch) + { + return isDigit(ch) || + (ch >= 'a' && ch <= 'f') || + (ch >= 'A' && ch <= 'F'); + } + + /** + * This will parse a PDF dictionary value. + * + * @return The parsed Dictionary object. + * + * @throws IOException If there is an error parsing the dictionary object. + */ + private COSBase parseCOSDictionaryValue() throws IOException + { + long numOffset = seqSource.getPosition(); + COSBase value = parseDirObject(); + skipSpaces(); + // proceed if the given object is a number and the following is a number as well + if (!(value instanceof COSNumber) || !isDigit()) + { + return value; + } + // read the remaining information of the object number + long genOffset = seqSource.getPosition(); + COSBase generationNumber = parseDirObject(); + skipSpaces(); + readExpectedChar('R'); + if (!(value instanceof COSInteger)) + { + LOG.error("expected number, actual=" + value + " at offset " + numOffset); + return COSNull.NULL; + } + if (!(generationNumber instanceof COSInteger)) + { + LOG.error("expected number, actual=" + value + " at offset " + genOffset); + return COSNull.NULL; + } + COSObjectKey key = new COSObjectKey(((COSInteger) value).longValue(), + ((COSInteger) generationNumber).intValue()); + // dereference the object + return getObjectFromPool(key); + } + + private COSBase getObjectFromPool(COSObjectKey key) throws IOException + { + if (document == null) + { + throw new IOException("object reference " + key + " at offset " + seqSource.getPosition() + + " in content stream"); + } + return document.getObjectFromPool(key); + } + + /** + * This will parse a PDF dictionary. + * + * @return The parsed dictionary, never null. + * + * @throws IOException If there is an error reading the stream. + */ + protected COSDictionary parseCOSDictionary() throws IOException + { + readExpectedChar('<'); + readExpectedChar('<'); + skipSpaces(); + COSDictionary obj = new COSDictionary(); + boolean done = false; + while (!done) + { + skipSpaces(); + char c = (char) seqSource.peek(); + if (c == '>') + { + done = true; + } + else if (c == '/') + { + parseCOSDictionaryNameValuePair(obj); + } + else + { + // invalid dictionary, we were expecting a /Name, read until the end or until we can recover + LOG.warn("Invalid dictionary, found: '" + c + "' but expected: '/' at offset " + seqSource.getPosition()); + if (readUntilEndOfCOSDictionary()) + { + // we couldn't recover + return obj; + } + } + } + readExpectedChar('>'); + readExpectedChar('>'); + return obj; + } + + /** + * Keep reading until the end of the dictionary object or the file has been hit, or until a '/' + * has been found. + * + * @return true if the end of the object or the file has been found, false if not, i.e. that the + * caller can continue to parse the dictionary at the current position. + * + * @throws IOException if there is a reading error. + */ + private boolean readUntilEndOfCOSDictionary() throws IOException + { + int c = seqSource.read(); + while (c != -1 && c != '/' && c != '>') + { + // in addition to stopping when we find / or >, we also want + // to stop when we find endstream or endobj. + if (c == E) + { + c = seqSource.read(); + if (c == N) + { + c = seqSource.read(); + if (c == D) + { + c = seqSource.read(); + boolean isStream = c == S && seqSource.read() == T && seqSource.read() == R + && seqSource.read() == E && seqSource.read() == A && seqSource.read() == M; + boolean isObj = !isStream && c == O && seqSource.read() == B && seqSource.read() == J; + if (isStream || isObj) + { + // we're done reading this object! + return true; + } + } + } + } + c = seqSource.read(); + } + if (c == -1) + { + return true; + } + seqSource.unread(c); + return false; + } + + private void parseCOSDictionaryNameValuePair(COSDictionary obj) throws IOException + { + COSName key = parseCOSName(); + COSBase value = parseCOSDictionaryValue(); + skipSpaces(); + if (((char) seqSource.peek()) == 'd') + { + // if the next string is 'def' then we are parsing a cmap stream + // and want to ignore it, otherwise throw an exception. + String potentialDEF = readString(); + if (!potentialDEF.equals(DEF)) + { + seqSource.unread(potentialDEF.getBytes(ISO_8859_1)); + } + else + { + skipSpaces(); + } + } + + if (value == null) + { + LOG.warn("Bad dictionary declaration at offset " + seqSource.getPosition()); + } + else + { + // label this item as direct, to avoid signature problems. + value.setDirect(true); + obj.setItem(key, value); + } + } + + protected void skipWhiteSpaces() throws IOException + { + //PDF Ref 3.2.7 A stream must be followed by either + //a CRLF or LF but nothing else. + + int whitespace = seqSource.read(); + + //see brother_scan_cover.pdf, it adds whitespaces + //after the stream but before the start of the + //data, so just read those first + while (ASCII_SPACE == whitespace) + { + whitespace = seqSource.read(); + } + + if (ASCII_CR == whitespace) + { + whitespace = seqSource.read(); + if (ASCII_LF != whitespace) + { + seqSource.unread(whitespace); + //The spec says this is invalid but it happens in the real + //world so we must support it. + } + } + else if (ASCII_LF != whitespace) + { + //we are in an error. + //but again we will do a lenient parsing and just assume that everything + //is fine + seqSource.unread(whitespace); + } + } + + /** + * This is really a bug in the Document creators code, but it caused a crash in PDFBox, the first bug was in this + * format: /Title ( (5) /Creator which was patched in 1 place. + * + * However it missed the case where the number of opening and closing parenthesis isn't balanced + * + * The second bug was in this format /Title (c:\) /Producer + * + * This patch moves this code out of the parseCOSString method, so it can be used twice. + * + * @param bracesParameter the number of braces currently open. + * + * @return the corrected value of the brace counter + * @throws IOException + */ + private int checkForEndOfString(final int bracesParameter) throws IOException + { + int braces = bracesParameter; + byte[] nextThreeBytes = new byte[3]; + int amountRead = seqSource.read(nextThreeBytes); + + // Check the next 3 bytes if available + // The following cases are valid indicators for the end of the string + // 1. Next line contains another COSObject: CR + LF + '/' + // 2. COSDictionary ends in the next line: CR + LF + '>' + // 3. Next line contains another COSObject: CR + '/' + // 4. COSDictionary ends in the next line: CR + '>' + if (amountRead == 3 && nextThreeBytes[0] == ASCII_CR) + { + if ( (nextThreeBytes[1] == ASCII_LF && (nextThreeBytes[2] == '/') || nextThreeBytes[2] == '>') + || nextThreeBytes[1] == '/' || nextThreeBytes[1] == '>') + { + braces = 0; + } + } + if (amountRead > 0) + { + seqSource.unread(nextThreeBytes, 0, amountRead); + } + return braces; + } + + /** + * This will parse a PDF string. + * + * @return The parsed PDF string. + * + * @throws IOException If there is an error reading from the stream. + */ + protected COSString parseCOSString() throws IOException + { + char nextChar = (char) seqSource.read(); + if (nextChar == '<') + { + return parseCOSHexString(); + } + else if (nextChar != '(') + { + throw new IOException( "parseCOSString string should start with '(' or '<' and not '" + + nextChar + "' at offset " + seqSource.getPosition()); + } + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // This is the number of braces read + int braces = 1; + int c = seqSource.read(); + while( braces > 0 && c != -1) + { + char ch = (char)c; + int nextc = -2; // not yet read + + if (ch == ')') + { + + braces--; + braces = checkForEndOfString(braces); + if( braces != 0 ) + { + out.write(ch); + } + } + else if (ch == '(') + { + braces++; + out.write(ch); + } + else if( ch == '\\' ) + { + //patched by ram + char next = (char) seqSource.read(); + switch(next) + { + case 'n': + out.write('\n'); + break; + case 'r': + out.write('\r'); + break; + case 't': + out.write('\t'); + break; + case 'b': + out.write('\b'); + break; + case 'f': + out.write('\f'); + break; + case ')': + // PDFBox 276 /Title (c:\) + braces = checkForEndOfString(braces); + if( braces != 0 ) + { + out.write(next); + } + else + { + out.write('\\'); + } + break; + case '(': + case '\\': + out.write(next); + break; + case ASCII_LF: + case ASCII_CR: + //this is a break in the line so ignore it and the newline and continue + c = seqSource.read(); + while( isEOL(c) && c != -1) + { + c = seqSource.read(); + } + nextc = c; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + { + StringBuilder octal = new StringBuilder(); + octal.append( next ); + c = seqSource.read(); + char digit = (char)c; + if( digit >= '0' && digit <= '7' ) + { + octal.append( digit ); + c = seqSource.read(); + digit = (char)c; + if( digit >= '0' && digit <= '7' ) + { + octal.append( digit ); + } + else + { + nextc = c; + } + } + else + { + nextc = c; + } + + int character = 0; + try + { + character = Integer.parseInt( octal.toString(), 8 ); + } + catch( NumberFormatException e ) + { + throw new IOException( "Error: Expected octal character, actual='" + octal + "'", e ); + } + out.write(character); + break; + } + default: + { + // dropping the backslash + // see 7.3.4.2 Literal Strings for further information + out.write(next); + } + } + } + else + { + out.write(ch); + } + if (nextc != -2) + { + c = nextc; + } + else + { + c = seqSource.read(); + } + } + if (c != -1) + { + seqSource.unread(c); + } + return new COSString(out.toByteArray()); + } + + /** + * This will parse a PDF HEX string with fail fast semantic + * meaning that we stop if a not allowed character is found. + * This is necessary in order to detect malformed input and + * be able to skip to next object start. + * + * We assume starting '<' was already read. + * + * @return The parsed PDF string. + * + * @throws IOException If there is an error reading from the stream. + */ + private COSString parseCOSHexString() throws IOException + { + final StringBuilder sBuf = new StringBuilder(); + while( true ) + { + int c = seqSource.read(); + if ( isHexDigit((char)c) ) + { + sBuf.append( (char) c ); + } + else if ( c == '>' ) + { + break; + } + else if ( c < 0 ) + { + throw new IOException( "Missing closing bracket for hex string. Reached EOS." ); + } + else if ( ( c == ' ' ) || ( c == '\n' ) || + ( c == '\t' ) || ( c == '\r' ) || + ( c == '\b' ) || ( c == '\f' ) ) + { + continue; + } + else + { + // if invalid chars was found: discard last + // hex character if it is not part of a pair + if (sBuf.length()%2!=0) + { + sBuf.deleteCharAt(sBuf.length()-1); + } + + // read till the closing bracket was found + do + { + c = seqSource.read(); + } + while ( c != '>' && c >= 0 ); + + // might have reached EOF while looking for the closing bracket + // this can happen for malformed PDFs only. Make sure that there is + // no endless loop. + if ( c < 0 ) + { + throw new IOException( "Missing closing bracket for hex string. Reached EOS." ); + } + + // exit loop + break; + } + } + return COSString.parseHex(sBuf.toString()); + } + + /** + * This will parse a PDF array object. + * + * @return The parsed PDF array. + * + * @throws IOException If there is an error parsing the stream. + */ + protected COSArray parseCOSArray() throws IOException + { + long startPosition = seqSource.getPosition(); + readExpectedChar('['); + COSArray po = new COSArray(); + COSBase pbo; + skipSpaces(); + int i; + while( ((i = seqSource.peek()) > 0) && ((char)i != ']') ) + { + pbo = parseDirObject(); + if( pbo instanceof COSObject ) + { + // We have to check if the expected values are there or not PDFBOX-385 + if (po.size() > 0 && po.get(po.size() - 1) instanceof COSInteger) + { + COSInteger genNumber = (COSInteger)po.remove( po.size() -1 ); + if (po.size() > 0 && po.get(po.size() - 1) instanceof COSInteger) + { + COSInteger number = (COSInteger)po.remove( po.size() -1 ); + COSObjectKey key = new COSObjectKey(number.longValue(), genNumber.intValue()); + pbo = getObjectFromPool(key); + } + else + { + // the object reference is somehow wrong + pbo = null; + } + } + else + { + pbo = null; + } + } + if( pbo != null ) + { + po.add( pbo ); + } + else + { + //it could be a bad object in the array which is just skipped + LOG.warn("Corrupt object reference at offset " + + seqSource.getPosition() + ", start offset: " + startPosition); + + // This could also be an "endobj" or "endstream" which means we can assume that + // the array has ended. + String isThisTheEnd = readString(); + seqSource.unread(isThisTheEnd.getBytes(ISO_8859_1)); + if(ENDOBJ_STRING.equals(isThisTheEnd) || ENDSTREAM_STRING.equals(isThisTheEnd)) + { + return po; + } + } + skipSpaces(); + } + // read ']' + seqSource.read(); + skipSpaces(); + return po; + } + + /** + * Determine if a character terminates a PDF name. + * + * @param ch The character + * @return true if the character terminates a PDF name, otherwise false. + */ + protected boolean isEndOfName(int ch) + { + return ch == ASCII_SPACE || ch == ASCII_CR || ch == ASCII_LF || ch == 9 || ch == '>' || + ch == '<' || ch == '[' || ch =='/' || ch ==']' || ch ==')' || ch =='(' || + ch == 0 || ch == '\f'; + } + + /** + * This will parse a PDF name from the stream. + * + * @return The parsed PDF name. + * @throws IOException If there is an error reading from the stream. + */ + protected COSName parseCOSName() throws IOException + { + readExpectedChar('/'); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int c = seqSource.read(); + while (c != -1) + { + int ch = c; + if (ch == '#') + { + int ch1 = seqSource.read(); + int ch2 = seqSource.read(); + // Prior to PDF v1.2, the # was not a special character. Also, + // it has been observed that various PDF tools do not follow the + // spec with respect to the # escape, even though they report + // PDF versions of 1.2 or later. The solution here is that we + // interpret the # as an escape only when it is followed by two + // valid hex digits. + if (isHexDigit((char)ch1) && isHexDigit((char)ch2)) + { + String hex = "" + (char)ch1 + (char)ch2; + try + { + buffer.write(Integer.parseInt(hex, 16)); + } + catch (NumberFormatException e) + { + throw new IOException("Error: expected hex digit, actual='" + hex + "'", e); + } + c = seqSource.read(); + } + else + { + // check for premature EOF + if (ch2 == -1 || ch1 == -1) + { + LOG.error("Premature EOF in BaseParser#parseCOSName"); + c = -1; + break; + } + seqSource.unread(ch2); + c = ch1; + buffer.write(ch); + } + } + else if (isEndOfName(ch)) + { + break; + } + else + { + buffer.write(ch); + c = seqSource.read(); + } + } + if (c != -1) + { + seqSource.unread(c); + } + + byte[] bytes = buffer.toByteArray(); + String string; + if (isValidUTF8(bytes)) + { + string = new String(buffer.toByteArray(), Charsets.UTF_8); + } + else + { + // some malformed PDFs don't use UTF-8 see PDFBOX-3347 + string = new String(buffer.toByteArray(), Charsets.WINDOWS_1252); + } + return COSName.getPDFName(string); + } + + /** + * Returns true if a byte sequence is valid UTF-8. + */ + private boolean isValidUTF8(byte[] input) + { + try + { + utf8Decoder.decode(ByteBuffer.wrap(input)); + return true; + } + catch (CharacterCodingException e) + { + LOG.debug("Character could not be decoded using Charsets.UTF_8 - returning false", e); + return false; + } + } + + /** + * This will parse a boolean object from the stream. + * + * @return The parsed boolean object. + * + * @throws IOException If an IO error occurs during parsing. + */ + protected COSBoolean parseBoolean() throws IOException + { + COSBoolean retval = null; + char c = (char) seqSource.peek(); + if( c == 't' ) + { + String trueString = new String( seqSource.readFully( 4 ), ISO_8859_1 ); + if( !trueString.equals( TRUE ) ) + { + throw new IOException( "Error parsing boolean: expected='true' actual='" + trueString + + "' at offset " + seqSource.getPosition()); + } + else + { + retval = COSBoolean.TRUE; + } + } + else if( c == 'f' ) + { + String falseString = new String( seqSource.readFully( 5 ), ISO_8859_1 ); + if( !falseString.equals( FALSE ) ) + { + throw new IOException( "Error parsing boolean: expected='true' actual='" + falseString + + "' at offset " + seqSource.getPosition()); + } + else + { + retval = COSBoolean.FALSE; + } + } + else + { + throw new IOException( "Error parsing boolean expected='t or f' actual='" + c + + "' at offset " + seqSource.getPosition()); + } + return retval; + } + + /** + * This will parse a directory object from the stream. + * + * @return The parsed object. + * + * @throws IOException If there is an error during parsing. + */ + protected COSBase parseDirObject() throws IOException + { + COSBase retval = null; + + skipSpaces(); + int nextByte = seqSource.peek(); + char c = (char)nextByte; + switch(c) + { + case '<': + { + // pull off first left bracket + int leftBracket = seqSource.read(); + // check for second left bracket + c = (char) seqSource.peek(); + seqSource.unread(leftBracket); + if(c == '<') + { + + retval = parseCOSDictionary(); + skipSpaces(); + } + else + { + retval = parseCOSString(); + } + break; + } + case '[': + { + // array + retval = parseCOSArray(); + break; + } + case '(': + retval = parseCOSString(); + break; + case '/': + // name + retval = parseCOSName(); + break; + case 'n': + { + // null + readExpectedString(NULL); + retval = COSNull.NULL; + break; + } + case 't': + { + String trueString = new String( seqSource.readFully(4), ISO_8859_1 ); + if( trueString.equals( TRUE ) ) + { + retval = COSBoolean.TRUE; + } + else + { + throw new IOException( "expected true actual='" + trueString + "' " + seqSource + + "' at offset " + seqSource.getPosition()); + } + break; + } + case 'f': + { + String falseString = new String( seqSource.readFully(5), ISO_8859_1 ); + if( falseString.equals( FALSE ) ) + { + retval = COSBoolean.FALSE; + } + else + { + throw new IOException( "expected false actual='" + falseString + "' " + seqSource + + "' at offset " + seqSource.getPosition()); + } + break; + } + case 'R': + seqSource.read(); + retval = new COSObject(null); + break; + case (char)-1: + return null; + default: + { + if( Character.isDigit(c) || c == '-' || c == '+' || c == '.') + { + StringBuilder buf = new StringBuilder(); + int ic = seqSource.read(); + c = (char)ic; + while( Character.isDigit( c )|| + c == '-' || + c == '+' || + c == '.' || + c == 'E' || + c == 'e' ) + { + buf.append( c ); + ic = seqSource.read(); + c = (char)ic; + } + if( ic != -1 ) + { + seqSource.unread(ic); + } + retval = COSNumber.get( buf.toString() ); + } + else + { + //This is not suppose to happen, but we will allow for it + //so we are more compatible with POS writers that don't + //follow the spec + String badString = readString(); + if (badString.isEmpty()) + { + int peek = seqSource.peek(); + // we can end up in an infinite loop otherwise + throw new IOException( "Unknown dir object c='" + c + + "' cInt=" + (int)c + " peek='" + (char)peek + + "' peekInt=" + peek + " at offset " + seqSource.getPosition() ); + } + + // if it's an endstream/endobj, we want to put it back so the caller will see it + if(ENDOBJ_STRING.equals(badString) || ENDSTREAM_STRING.equals(badString)) + { + seqSource.unread(badString.getBytes(ISO_8859_1)); + } + } + } + } + return retval; + } + + /** + * This will read the next string from the stream. + * + * @return The string that was read from the stream, never null. + * + * @throws IOException If there is an error reading from the stream. + */ + protected String readString() throws IOException + { + skipSpaces(); + StringBuilder buffer = new StringBuilder(); + int c = seqSource.read(); + while( !isEndOfName((char)c) && c != -1 ) + { + buffer.append( (char)c ); + c = seqSource.read(); + } + if (c != -1) + { + seqSource.unread(c); + } + return buffer.toString(); + } + + /** + * Read one String and throw an exception if it is not the expected value. + * + * @param expectedString the String value that is expected. + * @throws IOException if the String char is not the expected value or if an + * I/O error occurs. + */ + protected void readExpectedString(String expectedString) throws IOException + { + readExpectedString(expectedString.toCharArray(), false); + } + + /** + * Reads given pattern from {@link #seqSource}. Skipping whitespace at start and end if wanted. + * + * @param expectedString pattern to be skipped + * @param skipSpaces if set to true spaces before and after the string will be skipped + * @throws IOException if pattern could not be read + */ + protected final void readExpectedString(final char[] expectedString, boolean skipSpaces) throws IOException + { + skipSpaces(); + for (char c : expectedString) + { + if (seqSource.read() != c) + { + throw new IOException("Expected string '" + new String(expectedString) + + "' but missed at character '" + c + "' at offset " + + seqSource.getPosition()); + } + } + skipSpaces(); + } + + /** + * Read one char and throw an exception if it is not the expected value. + * + * @param ec the char value that is expected. + * @throws IOException if the read char is not the expected value or if an + * I/O error occurs. + */ + protected void readExpectedChar(char ec) throws IOException + { + char c = (char) seqSource.read(); + if (c != ec) + { + throw new IOException("expected='" + ec + "' actual='" + c + "' at offset " + seqSource.getPosition()); + } + } + + /** + * This will read the next string from the stream up to a certain length. + * + * @param length The length to stop reading at. + * + * @return The string that was read from the stream of length 0 to length. + * + * @throws IOException If there is an error reading from the stream. + */ + protected String readString( int length ) throws IOException + { + skipSpaces(); + + int c = seqSource.read(); + + //average string size is around 2 and the normal string buffer size is + //about 16 so lets save some space. + StringBuilder buffer = new StringBuilder(length); + while( !isWhitespace(c) && !isClosing(c) && c != -1 && buffer.length() < length && + c != '[' && + c != '<' && + c != '(' && + c != '/' ) + { + buffer.append( (char)c ); + c = seqSource.read(); + } + if (c != -1) + { + seqSource.unread(c); + } + return buffer.toString(); + } + + /** + * This will tell if the next character is a closing brace( close of PDF array ). + * + * @return true if the next byte is ']', false otherwise. + * + * @throws IOException If an IO error occurs. + */ + protected boolean isClosing() throws IOException + { + return isClosing(seqSource.peek()); + } + + /** + * This will tell if the next character is a closing brace( close of PDF array ). + * + * @param c The character to check against end of line + * @return true if the next byte is ']', false otherwise. + */ + protected boolean isClosing(int c) + { + return c == ']'; + } + + /** + * This will read bytes until the first end of line marker occurs. + * NOTE: The EOL marker may consists of 1 (CR or LF) or 2 (CR and CL) bytes + * which is an important detail if one wants to unread the line. + * + * @return The characters between the current position and the end of the line. + * + * @throws IOException If there is an error reading from the stream. + */ + protected String readLine() throws IOException + { + if (seqSource.isEOF()) + { + throw new IOException( "Error: End-of-File, expected line"); + } + + StringBuilder buffer = new StringBuilder( 11 ); + + int c; + while ((c = seqSource.read()) != -1) + { + // CR and LF are valid EOLs + if (isEOL(c)) + { + break; + } + buffer.append( (char)c ); + } + // CR+LF is also a valid EOL + if (isCR(c) && isLF(seqSource.peek())) + { + seqSource.read(); + } + return buffer.toString(); + } + + /** + * This will tell if the next byte to be read is an end of line byte. + * + * @return true if the next byte is 0x0A or 0x0D. + * + * @throws IOException If there is an error reading from the stream. + */ + protected boolean isEOL() throws IOException + { + return isEOL(seqSource.peek()); + } + + /** + * This will tell if the next byte to be read is an end of line byte. + * + * @param c The character to check against end of line + * @return true if the next byte is 0x0A or 0x0D. + */ + protected boolean isEOL(int c) + { + return isLF(c) || isCR(c); + } + + private boolean isLF(int c) + { + return ASCII_LF == c; + } + + private boolean isCR(int c) + { + return ASCII_CR == c; + } + + /** + * This will tell if the next byte is whitespace or not. + * + * @return true if the next byte in the stream is a whitespace character. + * + * @throws IOException If there is an error reading from the stream. + */ + protected boolean isWhitespace() throws IOException + { + return isWhitespace(seqSource.peek()); + } + + /** + * This will tell if a character is whitespace or not. These values are + * specified in table 1 (page 12) of ISO 32000-1:2008. + * @param c The character to check against whitespace + * @return true if the character is a whitespace character. + */ + protected boolean isWhitespace( int c ) + { + return c == 0 || c == 9 || c == 12 || c == ASCII_LF + || c == ASCII_CR || c == ASCII_SPACE; + } + + /** + * This will tell if the next byte is a space or not. + * + * @return true if the next byte in the stream is a space character. + * + * @throws IOException If there is an error reading from the stream. + */ + protected boolean isSpace() throws IOException + { + return isSpace(seqSource.peek()); + } + + /** + * This will tell if the given value is a space or not. + * + * @param c The character to check against space + * @return true if the next byte in the stream is a space character. + */ + protected boolean isSpace(int c) + { + return ASCII_SPACE == c; + } + + /** + * This will tell if the next byte is a digit or not. + * + * @return true if the next byte in the stream is a digit. + * + * @throws IOException If there is an error reading from the stream. + */ + protected boolean isDigit() throws IOException + { + return isDigit(seqSource.peek()); + } + + /** + * This will tell if the given value is a digit or not. + * + * @param c The character to be checked + * @return true if the next byte in the stream is a digit. + */ + protected static boolean isDigit(int c) + { + return c >= ASCII_ZERO && c <= ASCII_NINE; + } + + /** + * This will skip all spaces and comments that are present. + * + * @throws IOException If there is an error reading from the stream. + */ + protected void skipSpaces() throws IOException + { + int c = seqSource.read(); + // 37 is the % character, a comment + while( isWhitespace(c) || c == 37) + { + if ( c == 37 ) + { + // skip past the comment section + c = seqSource.read(); + while(!isEOL(c) && c != -1) + { + c = seqSource.read(); + } + } + else + { + c = seqSource.read(); + } + } + if (c != -1) + { + seqSource.unread(c); + } + } + + /** + * This will read a long from the Stream and throw an {@link IOException} if + * the long value is negative or has more than 10 digits (i.e. : bigger than + * {@link #OBJECT_NUMBER_THRESHOLD}) + * + * @return the object number being read. + * @throws IOException if an I/O error occurs + */ + protected long readObjectNumber() throws IOException + { + long retval = readLong(); + if (retval < 0 || retval >= OBJECT_NUMBER_THRESHOLD) + { + throw new IOException("Object Number '" + retval + "' has more than 10 digits or is negative"); + } + return retval; + } + + /** + * This will read a integer from the Stream and throw an {@link IllegalArgumentException} if the integer value + * has more than the maximum object revision (i.e. : bigger than {@link #GENERATION_NUMBER_THRESHOLD}) + * @return the generation number being read. + * @throws IOException if an I/O error occurs + */ + protected int readGenerationNumber() throws IOException + { + int retval = readInt(); + if(retval < 0 || retval > GENERATION_NUMBER_THRESHOLD) + { + throw new IOException("Generation Number '" + retval + "' has more than 5 digits"); + } + return retval; + } + + /** + * This will read an integer from the stream. + * + * @return The integer that was read from the stream. + * + * @throws IOException If there is an error reading from the stream. + */ + protected int readInt() throws IOException + { + skipSpaces(); + int retval = 0; + + StringBuilder intBuffer = readStringNumber(); + + try + { + retval = Integer.parseInt( intBuffer.toString() ); + } + catch( NumberFormatException e ) + { + seqSource.unread(intBuffer.toString().getBytes(ISO_8859_1)); + throw new IOException("Error: Expected an integer type at offset " + + seqSource.getPosition() + + ", instead got '" + intBuffer + "'", e); + } + return retval; + } + + + /** + * This will read an long from the stream. + * + * @return The long that was read from the stream. + * + * @throws IOException If there is an error reading from the stream. + */ + protected long readLong() throws IOException + { + skipSpaces(); + long retval = 0; + + StringBuilder longBuffer = readStringNumber(); + + try + { + retval = Long.parseLong( longBuffer.toString() ); + } + catch( NumberFormatException e ) + { + seqSource.unread(longBuffer.toString().getBytes(ISO_8859_1)); + throw new IOException( "Error: Expected a long type at offset " + + seqSource.getPosition() + ", instead got '" + longBuffer + "'", e); + } + return retval; + } + + /** + * This method is used to read a token by the {@linkplain #readInt()} method + * and the {@linkplain #readLong()} method. + * + * @return the token to parse as integer or long by the calling method. + * @throws IOException throws by the {@link #seqSource} methods. + */ + protected final StringBuilder readStringNumber() throws IOException + { + int lastByte = 0; + StringBuilder buffer = new StringBuilder(); + while( (lastByte = seqSource.read() ) != ASCII_SPACE && + lastByte != ASCII_LF && + lastByte != ASCII_CR && + lastByte != 60 && //see sourceforge bug 1714707 + lastByte != '[' && // PDFBOX-1845 + lastByte != '(' && // PDFBOX-2579 + lastByte != 0 && //See sourceforge bug 853328 + lastByte != -1 ) + { + buffer.append( (char)lastByte ); + if (buffer.length() > MAX_LENGTH_LONG) + { + throw new IOException("Number '" + buffer + + "' is getting too long, stop reading at offset " + seqSource.getPosition()); + } + } + if( lastByte != -1 ) + { + seqSource.unread(lastByte); + } + return buffer; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java new file mode 100644 index 00000000000..29436ac8f5a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java @@ -0,0 +1,2944 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import static org.apache.pdfbox.util.Charsets.ISO_8859_1; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.KeyStore; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Queue; +import java.util.Set; +import java.util.TreeMap; +import java.util.Vector; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSInputStream; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSObjectKey; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.pdfparser.XrefTrailerResolver.XRefType; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; +import org.apache.pdfbox.pdmodel.encryption.DecryptionMaterial; +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; +import org.apache.pdfbox.pdmodel.encryption.PDEncryption; +import org.apache.pdfbox.pdmodel.encryption.PublicKeyDecryptionMaterial; +import org.apache.pdfbox.pdmodel.encryption.SecurityHandler; +import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial; + +/** + * PDF-Parser which first reads startxref and xref tables in order to know valid objects and parse only these objects. + * + * First {@link PDFParser#parse()} or {@link FDFParser#parse()} must be called before page objects + * can be retrieved, e.g. {@link PDFParser#getPDDocument()}. + * + * This class is a much enhanced version of QuickParser presented in PDFBOX-1104 by Jeremy Villalobos. + */ +public class COSParser extends BaseParser +{ + private static final String PDF_HEADER = "%PDF-"; + private static final String FDF_HEADER = "%FDF-"; + + private static final String PDF_DEFAULT_VERSION = "1.4"; + private static final String FDF_DEFAULT_VERSION = "1.0"; + + private static final char[] XREF_TABLE = new char[] { 'x', 'r', 'e', 'f' }; + private static final char[] XREF_STREAM = new char[] { '/', 'X', 'R', 'e', 'f' }; + private static final char[] STARTXREF = new char[] { 's','t','a','r','t','x','r','e','f' }; + + private static final byte[] ENDSTREAM = new byte[] { E, N, D, S, T, R, E, A, M }; + + private static final byte[] ENDOBJ = new byte[] { E, N, D, O, B, J }; + + private static final long MINIMUM_SEARCH_OFFSET = 6; + + private static final int X = 'x'; + + private static final int STRMBUFLEN = 2048; + private final byte[] strmBuf = new byte[ STRMBUFLEN ]; + + protected final RandomAccessRead source; + + private AccessPermission accessPermission; + private InputStream keyStoreInputStream = null; + private String password = ""; + private String keyAlias = null; + + /** + * Only parse the PDF file minimally allowing access to basic information. + */ + public static final String SYSPROP_PARSEMINIMAL = + "org.apache.pdfbox.pdfparser.nonSequentialPDFParser.parseMinimal"; + + /** + * The range within the %%EOF marker will be searched. + * Useful if there are additional characters after %%EOF within the PDF. + */ + public static final String SYSPROP_EOFLOOKUPRANGE = + "org.apache.pdfbox.pdfparser.nonSequentialPDFParser.eofLookupRange"; + + /** + * How many trailing bytes to read for EOF marker. + */ + private static final int DEFAULT_TRAIL_BYTECOUNT = 2048; + /** + * EOF-marker. + */ + protected static final char[] EOF_MARKER = new char[] { '%', '%', 'E', 'O', 'F' }; + /** + * obj-marker. + */ + protected static final char[] OBJ_MARKER = new char[] { 'o', 'b', 'j' }; + + /** + * trailer-marker. + */ + private static final char[] TRAILER_MARKER = new char[] { 't', 'r', 'a', 'i', 'l', 'e', 'r' }; + + /** + * ObjStream-marker. + */ + private static final char[] OBJ_STREAM = new char[] { '/', 'O', 'b', 'j', 'S', 't', 'm' }; + + private long trailerOffset; + + /** + * file length. + */ + protected long fileLen; + + /** + * is parser using auto healing capacity ? + */ + private boolean isLenient = true; + + protected boolean initialParseDone = false; + + private boolean trailerWasRebuild = false; + /** + * Contains all found objects of a brute force search. + */ + private Map bfSearchCOSObjectKeyOffsets = null; + private Long lastEOFMarker = null; + private List bfSearchXRefTablesOffsets = null; + private List bfSearchXRefStreamsOffsets = null; + private PDEncryption encryption = null; + + /** + * The security handler. + */ + protected SecurityHandler securityHandler = null; + + /** + * how many trailing bytes to read for EOF marker. + */ + private int readTrailBytes = DEFAULT_TRAIL_BYTECOUNT; + + private static final Log LOG = LogFactory.getLog(COSParser.class); + + /** + * Collects all Xref/trailer objects and resolves them into single + * object using startxref reference. + */ + protected XrefTrailerResolver xrefTrailerResolver = new XrefTrailerResolver(); + + + /** + * The prefix for the temp file being used. + */ + public static final String TMP_FILE_PREFIX = "tmpPDF"; + + /** + * Default constructor. + * + * @param source input representing the pdf. + */ + public COSParser(RandomAccessRead source) + { + super(new RandomAccessSource(source)); + this.source = source; + } + + /** + * Constructor for encrypted pdfs. + * + * @param source input representing the pdf. + * @param password password to be used for decryption. + * @param keyStore key store to be used for decryption when using public key security + * @param keyAlias alias to be used for decryption when using public key security + * + */ + public COSParser(RandomAccessRead source, String password, InputStream keyStore, + String keyAlias) + { + super(new RandomAccessSource(source)); + this.source = source; + this.password = password; + this.keyAlias = keyAlias; + keyStoreInputStream = keyStore; + } + + /** + * Sets how many trailing bytes of PDF file are searched for EOF marker and 'startxref' marker. If not set we use + * default value {@link #DEFAULT_TRAIL_BYTECOUNT}. + * + *

We check that new value is at least 16. However for practical use cases this value should not be lower than + * 1000; even 2000 was found to not be enough in some cases where some trailing garbage like HTML snippets followed + * the EOF marker.

+ * + *

+ * In case system property {@link #SYSPROP_EOFLOOKUPRANGE} is defined this value will be set on initialization but + * can be overwritten later. + *

+ * + * @param byteCount number of trailing bytes + */ + public void setEOFLookupRange(int byteCount) + { + if (byteCount > 15) + { + readTrailBytes = byteCount; + } + } + + /** + * Read the trailer information and provide a COSDictionary containing the trailer information. + * + * @return a COSDictionary containing the trailer information + * @throws IOException if something went wrong + */ + protected COSDictionary retrieveTrailer() throws IOException + { + COSDictionary trailer = null; + boolean rebuildTrailer = false; + try + { + // parse startxref + // TODO FDF files don't have a startxref value, so that rebuildTrailer is triggered + long startXRefOffset = getStartxrefOffset(); + if (startXRefOffset > -1) + { + trailer = parseXref(startXRefOffset); + } + else + { + rebuildTrailer = isLenient(); + } + } + catch (IOException exception) + { + if (isLenient()) + { + rebuildTrailer = true; + } + else + { + throw exception; + } + } + // check if the trailer contains a Root object + if (trailer != null && trailer.getItem(COSName.ROOT) == null) + { + rebuildTrailer = isLenient(); + } + if (rebuildTrailer) + { + trailer = rebuildTrailer(); + } + else + { + // prepare decryption if necessary + prepareDecryption(); + if (bfSearchCOSObjectKeyOffsets != null && !bfSearchCOSObjectKeyOffsets.isEmpty()) + { + bfSearchForObjStreams(); + } + } + return trailer; + } + + /** + * Parses cross reference tables. + * + * @param startXRefOffset start offset of the first table + * @return the trailer dictionary + * @throws IOException if something went wrong + */ + private COSDictionary parseXref(long startXRefOffset) throws IOException + { + source.seek(startXRefOffset); + long startXrefOffset = Math.max(0, parseStartXref()); + // check the startxref offset + long fixedOffset = checkXRefOffset(startXrefOffset); + if (fixedOffset > -1) + { + startXrefOffset = fixedOffset; + } + document.setStartXref(startXrefOffset); + long prev = startXrefOffset; + // ---- parse whole chain of xref tables/object streams using PREV reference + Set prevSet = new HashSet<>(); + while (prev > 0) + { + // seek to xref table + source.seek(prev); + + // skip white spaces + skipSpaces(); + // -- parse xref + if (source.peek() == X) + { + // xref table and trailer + // use existing parser to parse xref table + if (!parseXrefTable(prev) || !parseTrailer()) + { + throw new IOException("Expected trailer object at offset " + + source.getPosition()); + } + COSDictionary trailer = xrefTrailerResolver.getCurrentTrailer(); + // check for a XRef stream, it may contain some object ids of compressed objects + if(trailer.containsKey(COSName.XREF_STM)) + { + int streamOffset = trailer.getInt(COSName.XREF_STM); + // check the xref stream reference + fixedOffset = checkXRefOffset(streamOffset); + if (fixedOffset > -1 && fixedOffset != streamOffset) + { + LOG.warn("/XRefStm offset " + streamOffset + " is incorrect, corrected to " + fixedOffset); + streamOffset = (int)fixedOffset; + trailer.setInt(COSName.XREF_STM, streamOffset); + } + if (streamOffset > 0) + { + source.seek(streamOffset); + skipSpaces(); + try + { + parseXrefObjStream(prev, false); + } + catch (IOException ex) + { + if (isLenient) + { + LOG.error("Failed to parse /XRefStm at offset " + streamOffset, ex); + } + else + { + throw ex; + } + } + } + else + { + if(isLenient) + { + LOG.error("Skipped XRef stream due to a corrupt offset:"+streamOffset); + } + else + { + throw new IOException("Skipped XRef stream due to a corrupt offset:"+streamOffset); + } + } + } + prev = trailer.getLong(COSName.PREV); + if (prev > 0) + { + // check the xref table reference + fixedOffset = checkXRefOffset(prev); + if (fixedOffset > -1 && fixedOffset != prev) + { + prev = fixedOffset; + trailer.setLong(COSName.PREV, prev); + } + } + } + else + { + // parse xref stream + prev = parseXrefObjStream(prev, true); + if (prev > 0) + { + // check the xref table reference + fixedOffset = checkXRefOffset(prev); + if (fixedOffset > -1 && fixedOffset != prev) + { + prev = fixedOffset; + COSDictionary trailer = xrefTrailerResolver.getCurrentTrailer(); + trailer.setLong(COSName.PREV, prev); + } + } + } + if (prevSet.contains(prev)) + { + throw new IOException("/Prev loop at offset " + prev); + } + prevSet.add(prev); + } + // ---- build valid xrefs out of the xref chain + xrefTrailerResolver.setStartxref(startXrefOffset); + COSDictionary trailer = xrefTrailerResolver.getTrailer(); + document.setTrailer(trailer); + document.setIsXRefStream(XRefType.STREAM == xrefTrailerResolver.getXrefType()); + // check the offsets of all referenced objects + checkXrefOffsets(); + // copy xref table + document.addXRefTable(xrefTrailerResolver.getXrefTable()); + return trailer; + } + + /** + * Parses an xref object stream starting with indirect object id. + * + * @return value of PREV item in dictionary or -1 if no such item exists + */ + private long parseXrefObjStream(long objByteOffset, boolean isStandalone) throws IOException + { + // ---- parse indirect object head + long objectNumber = readObjectNumber(); + + // remember the highest XRef object number to avoid it being reused in incremental saving + long currentHighestXRefObjectNumber = document.getHighestXRefObjectNumber(); + document.setHighestXRefObjectNumber(Math.max(currentHighestXRefObjectNumber, objectNumber)); + + readGenerationNumber(); + readExpectedString(OBJ_MARKER, true); + + COSDictionary dict = parseCOSDictionary(); + try (COSStream xrefStream = parseCOSStream(dict)) + { + parseXrefStream(xrefStream, objByteOffset, isStandalone); + } + + return dict.getLong(COSName.PREV); + } + + /** + * Looks for and parses startxref. We first look for last '%%EOF' marker (within last + * {@link #DEFAULT_TRAIL_BYTECOUNT} bytes (or range set via {@link #setEOFLookupRange(int)}) and go back to find + * startxref. + * + * @return the offset of StartXref + * @throws IOException If something went wrong. + */ + private long getStartxrefOffset() throws IOException + { + byte[] buf; + long skipBytes; + // read trailing bytes into buffer + try + { + final int trailByteCount = (fileLen < readTrailBytes) ? (int) fileLen : readTrailBytes; + buf = new byte[trailByteCount]; + skipBytes = fileLen - trailByteCount; + source.seek(skipBytes); + int off = 0; + int readBytes; + while (off < trailByteCount) + { + readBytes = source.read(buf, off, trailByteCount - off); + // in order to not get stuck in a loop we check readBytes (this should never happen) + if (readBytes < 1) + { + throw new IOException( + "No more bytes to read for trailing buffer, but expected: " + + (trailByteCount - off)); + } + off += readBytes; + } + } + finally + { + source.seek(0); + } + // find last '%%EOF' + int bufOff = lastIndexOf(EOF_MARKER, buf, buf.length); + if (bufOff < 0) + { + if (isLenient) + { + // in lenient mode the '%%EOF' isn't needed + bufOff = buf.length; + LOG.debug("Missing end of file marker '" + new String(EOF_MARKER) + "'"); + } + else + { + throw new IOException("Missing end of file marker '" + new String(EOF_MARKER) + "'"); + } + } + // find last startxref preceding EOF marker + bufOff = lastIndexOf(STARTXREF, buf, bufOff); + if (bufOff < 0) + { + throw new IOException("Missing 'startxref' marker."); + } + else + { + return skipBytes + bufOff; + } + } + + /** + * Searches last appearance of pattern within buffer. Lookup before _lastOff and goes back until 0. + * + * @param pattern pattern to search for + * @param buf buffer to search pattern in + * @param endOff offset (exclusive) where lookup starts at + * + * @return start offset of pattern within buffer or -1 if pattern could not be found + */ + protected int lastIndexOf(final char[] pattern, final byte[] buf, final int endOff) + { + final int lastPatternChOff = pattern.length - 1; + + int bufOff = endOff; + int patOff = lastPatternChOff; + char lookupCh = pattern[patOff]; + + while (--bufOff >= 0) + { + if (buf[bufOff] == lookupCh) + { + if (--patOff < 0) + { + // whole pattern matched + return bufOff; + } + // matched current char, advance to preceding one + lookupCh = pattern[patOff]; + } + else if (patOff < lastPatternChOff) + { + // no char match but already matched some chars; reset + patOff = lastPatternChOff; + lookupCh = pattern[patOff]; + } + } + return -1; + } + + /** + * Return true if parser is lenient. Meaning auto healing capacity of the parser are used. + * + * @return true if parser is lenient + */ + public boolean isLenient() + { + return isLenient; + } + + /** + * Change the parser leniency flag. + * + * This method can only be called before the parsing of the file. + * + * @param lenient try to handle malformed PDFs. + * + */ + public void setLenient(boolean lenient) + { + if (initialParseDone) + { + throw new IllegalArgumentException("Cannot change leniency after parsing"); + } + this.isLenient = lenient; + } + + /** + * Creates a unique object id using object number and object generation + * number. (requires object number < 2^31)) + */ + private long getObjectId(final COSObject obj) + { + return obj.getObjectNumber() << 32 | obj.getGenerationNumber(); + } + + /** + * Adds all from newObjects to toBeParsedList if it is not an COSObject or + * we didn't add this COSObject already (checked via addedObjects). + */ + private void addNewToList(final Queue toBeParsedList, + final Collection newObjects, final Set addedObjects) + { + for (COSBase newObject : newObjects) + { + addNewToList(toBeParsedList, newObject, addedObjects); + } + } + + /** + * Adds newObject to toBeParsedList if it is not an COSObject or we didn't + * add this COSObject already (checked via addedObjects). Simple objects are + * not added because nothing is done with them when toBeParsedList is + * processed. + */ + private void addNewToList(final Queue toBeParsedList, final COSBase newObject, + final Set addedObjects) + { + if (newObject instanceof COSObject) + { + final long objId = getObjectId((COSObject) newObject); + if (!addedObjects.add(objId)) + { + return; + } + toBeParsedList.add(newObject); + } + else if (newObject instanceof COSDictionary || newObject instanceof COSArray) + { + toBeParsedList.add(newObject); + } + } + + /** + * Will parse every object necessary to load a single page from the pdf document. We try our + * best to order objects according to offset in file before reading to minimize seek operations. + * + * @param dict the COSObject from the parent pages. + * @param excludeObjects dictionary object reference entries with these names will not be parsed + * + * @throws IOException if something went wrong + */ + protected void parseDictObjects(COSDictionary dict, COSName... excludeObjects) throws IOException + { + // ---- create queue for objects waiting for further parsing + final Queue toBeParsedList = new LinkedList<>(); + // offset ordered object map + final TreeMap> objToBeParsed = new TreeMap<>(); + // in case of compressed objects offset points to stmObj + final Set parsedObjects = new HashSet<>(); + final Set addedObjects = new HashSet<>(); + + addExcludedToList(excludeObjects, dict, parsedObjects); + addNewToList(toBeParsedList, dict.getValues(), addedObjects); + + // ---- go through objects to be parsed + while (!(toBeParsedList.isEmpty() && objToBeParsed.isEmpty())) + { + // -- first get all COSObject from other kind of objects and + // put them in objToBeParsed; afterwards toBeParsedList is empty + COSBase baseObj; + while ((baseObj = toBeParsedList.poll()) != null) + { + if (baseObj instanceof COSDictionary) + { + addNewToList(toBeParsedList, ((COSDictionary) baseObj).getValues(), addedObjects); + } + else if (baseObj instanceof COSArray) + { + for (COSBase cosBase : ((COSArray) baseObj)) + { + addNewToList(toBeParsedList, cosBase, addedObjects); + } + } + else if (baseObj instanceof COSObject) + { + COSObject obj = (COSObject) baseObj; + long objId = getObjectId(obj); + COSObjectKey objKey = new COSObjectKey(obj.getObjectNumber(), obj.getGenerationNumber()); + + if (!parsedObjects.contains(objId)) + { + Long fileOffset = document.getXrefTable().get(objKey); + if (fileOffset == null && isLenient) + { + Map bfCOSObjectKeyOffsets = getBFCOSObjectOffsets(); + fileOffset = bfCOSObjectKeyOffsets.get(objKey); + if (fileOffset != null) + { + LOG.debug("Set missing " + fileOffset + " for object " + objKey); + document.getXrefTable().put(objKey, fileOffset); + } + } + + // it is allowed that object references point to null, thus we have to test + if (fileOffset != null && fileOffset != 0) + { + if (fileOffset > 0) + { + objToBeParsed.put(fileOffset, Collections.singletonList(obj)); + } + else + { + // negative offset means we have a compressed + // object within object stream; + // get offset of object stream + COSObjectKey key = new COSObjectKey((int) -fileOffset, 0); + fileOffset = document.getXrefTable().get(key); + if ((fileOffset == null) || (fileOffset <= 0)) + { + if (isLenient) + { + Map bfCOSObjectKeyOffsets = getBFCOSObjectOffsets(); + fileOffset = bfCOSObjectKeyOffsets.get(key); + if (fileOffset != null) + { + LOG.debug("Set missing " + fileOffset + " for object " + + key); + document.getXrefTable().put(key, fileOffset); + } + else + { + LOG.warn("Invalid object stream xref object reference for key '" + + objKey + "': " + fileOffset); + continue; + } + } + else + { + throw new IOException( + "Invalid object stream xref object reference for key '" + + objKey + "': " + fileOffset); + } + } + + List stmObjects = objToBeParsed.get(fileOffset); + if (stmObjects == null) + { + stmObjects = new ArrayList<>(); + objToBeParsed.put(fileOffset, stmObjects); + } + // java does not have a test for immutable + else if (!(stmObjects instanceof ArrayList)) + { + throw new IOException(obj + " cannot be assigned to offset " + + fileOffset + ", this belongs to " + stmObjects.get(0)); + } + stmObjects.add(obj); + } + } + else + { + // NULL object + COSObject pdfObject = document.getObjectFromPool(objKey); + pdfObject.setObject(COSNull.NULL); + } + } + } + } + + // ---- read first COSObject with smallest offset + // resulting object will be added to toBeParsedList + if (objToBeParsed.isEmpty()) + { + break; + } + + for (COSObject obj : objToBeParsed.remove(objToBeParsed.firstKey())) + { + COSBase parsedObj = parseObjectDynamically(obj, false); + if (parsedObj != null) + { + obj.setObject(parsedObj); + addNewToList(toBeParsedList, parsedObj, addedObjects); + parsedObjects.add(getObjectId(obj)); + } + } + } + } + + // add objects not to be parsed to list of already parsed objects + private void addExcludedToList(COSName[] excludeObjects, COSDictionary dict, final Set parsedObjects) + { + if (excludeObjects != null) + { + for (COSName objName : excludeObjects) + { + COSBase baseObj = dict.getItem(objName); + if (baseObj instanceof COSObject) + { + parsedObjects.add(getObjectId((COSObject) baseObj)); + } + } + } + } + + /** + * This will parse the next object from the stream and add it to the local state. + * + * @param obj object to be parsed (we only take object number and generation number for lookup start offset) + * @param requireExistingNotCompressedObj if true object to be parsed must not be contained within + * compressed stream + * @return the parsed object (which is also added to document object) + * + * @throws IOException If an IO error occurs. + */ + protected final COSBase parseObjectDynamically(COSObject obj, + boolean requireExistingNotCompressedObj) throws IOException + { + return parseObjectDynamically(obj.getObjectNumber(), + obj.getGenerationNumber(), requireExistingNotCompressedObj); + } + + /** + * This will parse the next object from the stream and add it to the local state. + * It's reduced to parsing an indirect object. + * + * @param objNr object number of object to be parsed + * @param objGenNr object generation number of object to be parsed + * @param requireExistingNotCompressedObj if true the object to be parsed must be defined in xref + * (comment: null objects may be missing from xref) and it must not be a compressed object within object stream + * (this is used to circumvent being stuck in a loop in a malicious PDF) + * + * @return the parsed object (which is also added to document object) + * + * @throws IOException If an IO error occurs. + */ + protected COSBase parseObjectDynamically(long objNr, int objGenNr, + boolean requireExistingNotCompressedObj) throws IOException + { + // ---- create object key and get object (container) from pool + final COSObjectKey objKey = new COSObjectKey(objNr, objGenNr); + final COSObject pdfObject = document.getObjectFromPool(objKey); + + if (pdfObject.getObject() == null) + { + // not previously parsed + // ---- read offset or object stream object number from xref table + Long offsetOrObjstmObNr = document.getXrefTable().get(objKey); + + // maybe something is wrong with the xref table -> perform brute force search for all objects + if (offsetOrObjstmObNr == null && isLenient) + { + Map bfCOSObjectKeyOffsets = getBFCOSObjectOffsets(); + offsetOrObjstmObNr = bfCOSObjectKeyOffsets.get(objKey); + if (offsetOrObjstmObNr != null) + { + LOG.debug("Set missing offset " + offsetOrObjstmObNr + " for object " + objKey); + document.getXrefTable().put(objKey, offsetOrObjstmObNr); + } + } + + // sanity test to circumvent loops with broken documents + if (requireExistingNotCompressedObj + && ((offsetOrObjstmObNr == null) || (offsetOrObjstmObNr <= 0))) + { + throw new IOException("Object must be defined and must not be compressed object: " + + objKey.getNumber() + ":" + objKey.getGeneration()); + } + + if (offsetOrObjstmObNr == null) + { + // not defined object -> NULL object (Spec. 1.7, chap. 3.2.9) + pdfObject.setObject(COSNull.NULL); + } + else if (offsetOrObjstmObNr > 0) + { + // offset of indirect object in file + parseFileObject(offsetOrObjstmObNr, objKey, pdfObject); + } + else + { + // xref value is object nr of object stream containing object to be parsed + // since our object was not found it means object stream was not parsed so far + parseObjectStream((int) -offsetOrObjstmObNr); + } + } + return pdfObject.getObject(); + } + + private void parseFileObject(Long offsetOrObjstmObNr, final COSObjectKey objKey, final COSObject pdfObject) throws IOException + { + // ---- go to object start + source.seek(offsetOrObjstmObNr); + + // ---- we must have an indirect object + final long readObjNr = readObjectNumber(); + final int readObjGen = readGenerationNumber(); + readExpectedString(OBJ_MARKER, true); + + // ---- consistency check + if ((readObjNr != objKey.getNumber()) || (readObjGen != objKey.getGeneration())) + { + throw new IOException("XREF for " + objKey.getNumber() + ":" + + objKey.getGeneration() + " points to wrong object: " + readObjNr + + ":" + readObjGen + " at offset " + offsetOrObjstmObNr); + } + + skipSpaces(); + COSBase pb = parseDirObject(); + String endObjectKey = readString(); + + if (endObjectKey.equals(STREAM_STRING)) + { + source.rewind(endObjectKey.getBytes(ISO_8859_1).length); + if (pb instanceof COSDictionary) + { + COSStream stream = parseCOSStream((COSDictionary) pb); + + if (securityHandler != null) + { + securityHandler.decryptStream(stream, objKey.getNumber(), objKey.getGeneration()); + } + pb = stream; + } + else + { + // this is not legal + // the combination of a dict and the stream/endstream + // forms a complete stream object + throw new IOException("Stream not preceded by dictionary (offset: " + + offsetOrObjstmObNr + ")."); + } + skipSpaces(); + endObjectKey = readLine(); + + // we have case with a second 'endstream' before endobj + if (!endObjectKey.startsWith(ENDOBJ_STRING) && endObjectKey.startsWith(ENDSTREAM_STRING)) + { + endObjectKey = endObjectKey.substring(9).trim(); + if (endObjectKey.length() == 0) + { + // no other characters in extra endstream line + // read next line + endObjectKey = readLine(); + } + } + } + else if (securityHandler != null) + { + securityHandler.decrypt(pb, objKey.getNumber(), objKey.getGeneration()); + } + + pdfObject.setObject(pb); + + if (!endObjectKey.startsWith(ENDOBJ_STRING)) + { + if (isLenient) + { + LOG.warn("Object (" + readObjNr + ":" + readObjGen + ") at offset " + + offsetOrObjstmObNr + " does not end with 'endobj' but with '" + + endObjectKey + "'"); + } + else + { + throw new IOException("Object (" + readObjNr + ":" + readObjGen + + ") at offset " + offsetOrObjstmObNr + + " does not end with 'endobj' but with '" + endObjectKey + "'"); + } + } + } + + private void parseObjectStream(int objstmObjNr) throws IOException + { + final COSBase objstmBaseObj = parseObjectDynamically(objstmObjNr, 0, true); + if (objstmBaseObj instanceof COSStream) + { + // parse object stream + PDFObjectStreamParser parser; + try + { + parser = new PDFObjectStreamParser((COSStream) objstmBaseObj, document); + } + catch (IOException ex) + { + if (isLenient) + { + LOG.error("object stream " + objstmObjNr + " could not be parsed due to an exception", ex); + return; + } + else + { + throw ex; + } + } + + try + { + parser.parse(); + } + catch(IOException exception) + { + if (isLenient) + { + LOG.debug("Stop reading object stream "+objstmObjNr+" due to an exception", exception); + // the error is handled in parseDictObjects + return; + } + else + { + throw exception; + } + } + // register all objects which are referenced to be contained in object stream + for (COSObject next : parser.getObjects()) + { + COSObjectKey stmObjKey = new COSObjectKey(next); + Long offset = xrefTrailerResolver.getXrefTable().get(stmObjKey); + if (offset != null && offset == -objstmObjNr) + { + COSObject stmObj = document.getObjectFromPool(stmObjKey); + stmObj.setObject(next.getObject()); + } + } + } + } + + /** + * Returns length value referred to or defined in given object. + */ + private COSNumber getLength(final COSBase lengthBaseObj, final COSName streamType) throws IOException + { + if (lengthBaseObj == null) + { + return null; + } + COSNumber retVal = null; + // maybe length was given directly + if (lengthBaseObj instanceof COSNumber) + { + retVal = (COSNumber) lengthBaseObj; + } + // length in referenced object + else if (lengthBaseObj instanceof COSObject) + { + COSObject lengthObj = (COSObject) lengthBaseObj; + COSBase length = lengthObj.getObject(); + if (length == null) + { + // not read so far, keep current stream position + final long curFileOffset = source.getPosition(); + boolean isObjectStream = COSName.OBJ_STM.equals(streamType); + parseObjectDynamically(lengthObj, isObjectStream); + // reset current stream position + source.seek(curFileOffset); + length = lengthObj.getObject(); + } + if (length == null) + { + throw new IOException("Length object content was not read."); + } + if (COSNull.NULL == length) + { + LOG.warn("Length object (" + lengthObj.getObjectNumber() + " " + + lengthObj.getGenerationNumber() + ") not found"); + return null; + } + if (!(length instanceof COSNumber)) + { + throw new IOException("Wrong type of referenced length object " + lengthObj + + ": " + length.getClass().getSimpleName()); + } + retVal = (COSNumber) length; + } + else + { + throw new IOException("Wrong type of length object: " + + lengthBaseObj.getClass().getSimpleName()); + } + return retVal; + } + + private static final int STREAMCOPYBUFLEN = 8192; + private final byte[] streamCopyBuf = new byte[STREAMCOPYBUFLEN]; + + /** + * This will read a COSStream from the input stream using length attribute within dictionary. If + * length attribute is a indirect reference it is first resolved to get the stream length. This + * means we copy stream data without testing for 'endstream' or 'endobj' and thus it is no + * problem if these keywords occur within stream. We require 'endstream' to be found after + * stream data is read. + * + * @param dic dictionary that goes with this stream. + * + * @return parsed pdf stream. + * + * @throws IOException if an error occurred reading the stream, like problems with reading + * length attribute, stream does not end with 'endstream' after data read, stream too short etc. + */ + protected COSStream parseCOSStream(COSDictionary dic) throws IOException + { + COSStream stream = document.createCOSStream(dic); + + // read 'stream'; this was already tested in parseObjectsDynamically() + readString(); + + skipWhiteSpaces(); + + /* + * This needs to be dic.getItem because when we are parsing, the underlying object might still be null. + */ + COSNumber streamLengthObj = getLength(dic.getItem(COSName.LENGTH), dic.getCOSName(COSName.TYPE)); + if (streamLengthObj == null) + { + if (isLenient) + { + LOG.warn("The stream doesn't provide any stream length, using fallback readUntilEnd, at offset " + + source.getPosition()); + } + else + { + throw new IOException("Missing length for stream."); + } + } + + // get output stream to copy data to + try (OutputStream out = stream.createRawOutputStream()) + { + if (streamLengthObj != null && validateStreamLength(streamLengthObj.longValue())) + { + readValidStream(out, streamLengthObj); + } + else + { + readUntilEndStream(new EndstreamOutputStream(out)); + } + } + String endStream = readString(); + if (endStream.equals("endobj") && isLenient) + { + LOG.warn("stream ends with 'endobj' instead of 'endstream' at offset " + + source.getPosition()); + // avoid follow-up warning about missing endobj + source.rewind(ENDOBJ.length); + } + else if (endStream.length() > 9 && isLenient && endStream.substring(0,9).equals(ENDSTREAM_STRING)) + { + LOG.warn("stream ends with '" + endStream + "' instead of 'endstream' at offset " + + source.getPosition()); + // unread the "extra" bytes + source.rewind(endStream.substring(9).getBytes(ISO_8859_1).length); + } + else if (!endStream.equals(ENDSTREAM_STRING)) + { + throw new IOException( + "Error reading stream, expected='endstream' actual='" + + endStream + "' at offset " + source.getPosition()); + } + + return stream; + } + + /** + * This method will read through the current stream object until + * we find the keyword "endstream" meaning we're at the end of this + * object. Some pdf files, however, forget to write some endstream tags + * and just close off objects with an "endobj" tag so we have to handle + * this case as well. + * + * This method is optimized using buffered IO and reduced number of + * byte compare operations. + * + * @param out stream we write out to. + * + * @throws IOException if something went wrong + */ + private void readUntilEndStream( final OutputStream out ) throws IOException + { + int bufSize; + int charMatchCount = 0; + byte[] keyw = ENDSTREAM; + + // last character position of shortest keyword ('endobj') + final int quickTestOffset = 5; + + // read next chunk into buffer; already matched chars are added to beginning of buffer + while ( ( bufSize = source.read( strmBuf, charMatchCount, STRMBUFLEN - charMatchCount ) ) > 0 ) + { + bufSize += charMatchCount; + + int bIdx = charMatchCount; + int quickTestIdx; + + // iterate over buffer, trying to find keyword match + for ( int maxQuicktestIdx = bufSize - quickTestOffset; bIdx < bufSize; bIdx++ ) + { + // reduce compare operations by first test last character we would have to + // match if current one matches; if it is not a character from keywords + // we can move behind the test character; this shortcut is inspired by the + // Boyer-Moore string search algorithm and can reduce parsing time by approx. 20% + quickTestIdx = bIdx + quickTestOffset; + if (charMatchCount == 0 && quickTestIdx < maxQuicktestIdx) + { + final byte ch = strmBuf[quickTestIdx]; + if ( ( ch > 't' ) || ( ch < 'a' ) ) + { + // last character we would have to match if current character would match + // is not a character from keywords -> jump behind and start over + bIdx = quickTestIdx; + continue; + } + } + + // could be negative - but we only compare to ASCII + final byte ch = strmBuf[bIdx]; + + if ( ch == keyw[ charMatchCount ] ) + { + if ( ++charMatchCount == keyw.length ) + { + // match found + bIdx++; + break; + } + } + else + { + if ( ( charMatchCount == 3 ) && ( ch == ENDOBJ[ charMatchCount ] ) ) + { + // maybe ENDSTREAM is missing but we could have ENDOBJ + keyw = ENDOBJ; + charMatchCount++; + } + else + { + // no match; incrementing match start by 1 would be dumb since we already know + // matched chars depending on current char read we may already have beginning + // of a new match: 'e': first char matched; 'n': if we are at match position + // idx 7 we already read 'e' thus 2 chars matched for each other char we have + // to start matching first keyword char beginning with next read position + charMatchCount = ( ch == E ) ? 1 : ( ( ch == N ) && ( charMatchCount == 7 ) ) ? 2 : 0; + // search again for 'endstream' + keyw = ENDSTREAM; + } + } + } + + int contentBytes = Math.max( 0, bIdx - charMatchCount ); + + // write buffer content until first matched char to output stream + if ( contentBytes > 0 ) + { + out.write( strmBuf, 0, contentBytes ); + } + if ( charMatchCount == keyw.length ) + { + // keyword matched; unread matched keyword (endstream/endobj) and following buffered content + source.rewind( bufSize - contentBytes ); + break; + } + else + { + // copy matched chars at start of buffer + System.arraycopy( keyw, 0, strmBuf, 0, charMatchCount ); + } + } + // this writes a lonely CR or drops trailing CR LF and LF + out.flush(); + } + + private void readValidStream(OutputStream out, COSNumber streamLengthObj) throws IOException + { + long remainBytes = streamLengthObj.longValue(); + while (remainBytes > 0) + { + final int chunk = (remainBytes > STREAMCOPYBUFLEN) ? STREAMCOPYBUFLEN : (int) remainBytes; + final int readBytes = source.read(streamCopyBuf, 0, chunk); + if (readBytes <= 0) + { + // shouldn't happen, the stream length has already been validated + throw new IOException("read error at offset " + source.getPosition() + + ": expected " + chunk + " bytes, but read() returns " + readBytes); + } + out.write(streamCopyBuf, 0, readBytes); + remainBytes -= readBytes; + } + } + + private boolean validateStreamLength(long streamLength) throws IOException + { + boolean streamLengthIsValid = true; + long originOffset = source.getPosition(); + long expectedEndOfStream = originOffset + streamLength; + if (expectedEndOfStream > fileLen) + { + streamLengthIsValid = false; + LOG.warn("The end of the stream is out of range, using workaround to read the stream, " + + "stream start position: " + originOffset + ", length: " + streamLength + + ", expected end position: " + expectedEndOfStream); + } + else + { + source.seek(expectedEndOfStream); + skipSpaces(); + if (!isString(ENDSTREAM)) + { + streamLengthIsValid = false; + LOG.warn("The end of the stream doesn't point to the correct offset, using workaround to read the stream, " + + "stream start position: " + originOffset + ", length: " + streamLength + + ", expected end position: " + expectedEndOfStream); + } + source.seek(originOffset); + } + return streamLengthIsValid; + } + + /** + * Check if the cross reference table/stream can be found at the current offset. + * + * @param startXRefOffset + * @return the revised offset + * @throws IOException + */ + private long checkXRefOffset(long startXRefOffset) throws IOException + { + // repair mode isn't available in non-lenient mode + if (!isLenient) + { + return startXRefOffset; + } + source.seek(startXRefOffset); + skipSpaces(); + if (source.peek() == X && isString(XREF_TABLE)) + { + return startXRefOffset; + } + if (startXRefOffset > 0) + { + if (checkXRefStreamOffset(startXRefOffset)) + { + return startXRefOffset; + } + else + { + return calculateXRefFixedOffset(startXRefOffset); + } + } + // can't find a valid offset + return -1; + } + + /** + * Check if the cross reference stream can be found at the current offset. + * + * @param startXRefOffset the expected start offset of the XRef stream + * @return the revised offset + * @throws IOException if something went wrong + */ + private boolean checkXRefStreamOffset(long startXRefOffset) throws IOException + { + // repair mode isn't available in non-lenient mode + if (!isLenient || startXRefOffset == 0) + { + return true; + } + // seek to offset-1 + source.seek(startXRefOffset-1); + int nextValue = source.read(); + // the first character has to be a whitespace, and then a digit + if (isWhitespace(nextValue)) + { + skipSpaces(); + if (isDigit()) + { + try + { + // it's a XRef stream + readObjectNumber(); + readGenerationNumber(); + readExpectedString(OBJ_MARKER, true); + // check the dictionary to avoid false positives + COSDictionary dict = parseCOSDictionary(); + source.seek(startXRefOffset); + if ("XRef".equals(dict.getNameAsString(COSName.TYPE))) + { + return true; + } + } + catch (IOException exception) + { + // there wasn't an object of a xref stream + LOG.debug("No Xref stream at given location " + startXRefOffset, exception); + source.seek(startXRefOffset); + } + } + } + return false; + } + + /** + * Try to find a fixed offset for the given xref table/stream. + * + * @param objectOffset the given offset where to look at + * @return the fixed offset + * + * @throws IOException if something went wrong + */ + private long calculateXRefFixedOffset(long objectOffset) throws IOException + { + if (objectOffset < 0) + { + LOG.error("Invalid object offset " + objectOffset + " when searching for a xref table/stream"); + return 0; + } + // start a brute force search for all xref tables and try to find the offset we are looking for + long newOffset = bfSearchForXRef(objectOffset); + if (newOffset > -1) + { + LOG.debug("Fixed reference for xref table/stream " + objectOffset + " -> " + newOffset); + return newOffset; + } + LOG.error("Can't find the object xref table/stream at offset " + objectOffset); + return 0; + } + + private boolean validateXrefOffsets(Map xrefOffset) throws IOException + { + if (xrefOffset == null) + { + return true; + } + for (Entry objectEntry : xrefOffset.entrySet()) + { + COSObjectKey objectKey = objectEntry.getKey(); + Long objectOffset = objectEntry.getValue(); + // a negative offset number represents an object number itself + // see type 2 entry in xref stream + if (objectOffset != null && objectOffset >= 0 + && !checkObjectKey(objectKey, objectOffset)) + { + LOG.debug("Stop checking xref offsets as at least one (" + objectKey + + ") couldn't be dereferenced"); + return false; + } + } + return true; + } + + /** + * Check the XRef table by dereferencing all objects and fixing the offset if necessary. + * + * @throws IOException if something went wrong. + */ + private void checkXrefOffsets() throws IOException + { + // repair mode isn't available in non-lenient mode + if (!isLenient) + { + return; + } + Map xrefOffset = xrefTrailerResolver.getXrefTable(); + if (!validateXrefOffsets(xrefOffset)) + { + Map bfCOSObjectKeyOffsets = getBFCOSObjectOffsets(); + if (!bfCOSObjectKeyOffsets.isEmpty()) + { + LOG.debug("Replaced read xref table with the results of a brute force search"); + xrefOffset.clear(); + xrefOffset.putAll(bfCOSObjectKeyOffsets); + } + } + } + + /** + * Check if the given object can be found at the given offset. + * + * @param objectKey the object we are looking for + * @param offset the offset where to look + * @return returns true if the given object can be dereferenced at the given offset + * @throws IOException if something went wrong + */ + private boolean checkObjectKey(COSObjectKey objectKey, long offset) throws IOException + { + // there can't be any object at the very beginning of a pdf + if (offset < MINIMUM_SEARCH_OFFSET) + { + return false; + } + boolean objectKeyFound = false; + try + { + source.seek(offset); + // try to read the given object/generation number + if (objectKey.getNumber() == readObjectNumber()) + { + int genNumber = readGenerationNumber(); + if (genNumber == objectKey.getGeneration()) + { + // finally try to read the object marker + readExpectedString(OBJ_MARKER, true); + objectKeyFound = true; + } + else if (isLenient && genNumber > objectKey.getGeneration()) + { + // finally try to read the object marker + readExpectedString(OBJ_MARKER, true); + objectKeyFound = true; + objectKey.fixGeneration(genNumber); + } + } + } + catch (IOException exception) + { + // Swallow the exception, obviously there isn't any valid object number + LOG.debug("No valid object at given location " + offset + " - ignoring", exception); + } + // return resulting value + return objectKeyFound; + } + + private Map getBFCOSObjectOffsets() throws IOException + { + if (bfSearchCOSObjectKeyOffsets == null) + { + bfSearchForObjects(); + } + return bfSearchCOSObjectKeyOffsets; + } + + /** + * Brute force search for every object in the pdf. + * + * @throws IOException if something went wrong + */ + private void bfSearchForObjects() throws IOException + { + bfSearchForLastEOFMarker(); + bfSearchCOSObjectKeyOffsets = new HashMap<>(); + long originOffset = source.getPosition(); + long currentOffset = MINIMUM_SEARCH_OFFSET; + long lastObjectId = Long.MIN_VALUE; + int lastGenID = Integer.MIN_VALUE; + long lastObjOffset = Long.MIN_VALUE; + char[] endobjString = "ndo".toCharArray(); + char[] endobjRemainingString = "bj".toCharArray(); + boolean endOfObjFound = false; + do + { + source.seek(currentOffset); + int nextChar = source.read(); + currentOffset++; + if (isWhitespace(nextChar) && isString(OBJ_MARKER)) + { + long tempOffset = currentOffset - 2; + source.seek(tempOffset); + int genID = source.peek(); + // is the next char a digit? + if (isDigit(genID)) + { + genID -= 48; + tempOffset--; + source.seek(tempOffset); + if (isWhitespace()) + { + while (tempOffset > MINIMUM_SEARCH_OFFSET && isWhitespace()) + { + source.seek(--tempOffset); + } + boolean objectIDFound = false; + while (tempOffset > MINIMUM_SEARCH_OFFSET && isDigit()) + { + source.seek(--tempOffset); + objectIDFound = true; + } + if (objectIDFound) + { + source.read(); + long objectId = readObjectNumber(); + if (lastObjOffset > 0) + { + // add the former object ID only if there was a subsequent object ID + bfSearchCOSObjectKeyOffsets.put( + new COSObjectKey(lastObjectId, lastGenID), lastObjOffset); + } + lastObjectId = objectId; + lastGenID = genID; + lastObjOffset = tempOffset + 1; + currentOffset += OBJ_MARKER.length - 1; + endOfObjFound = false; + } + } + } + } + // check for "endo" as abbreviation for "endobj", as the pdf may be cut off + // in the middle of the keyword, see PDFBOX-3936. + // We could possibly implement a more intelligent algorithm if necessary + else if (nextChar == 'e' && isString(endobjString)) + { + currentOffset += endobjString.length; + source.seek(currentOffset); + if (source.isEOF()) + { + endOfObjFound = true; + continue; + } + if (isString(endobjRemainingString)) + { + currentOffset += endobjRemainingString.length; + endOfObjFound = true; + continue; + } + } + } while (currentOffset < lastEOFMarker && !source.isEOF()); + if ((lastEOFMarker < Long.MAX_VALUE || endOfObjFound) && lastObjOffset > 0) + { + // if the pdf wasn't cut off in the middle or if the last object ends with a "endobj" marker + // the last object id has to be added here so that it can't get lost as there isn't any subsequent object id + bfSearchCOSObjectKeyOffsets.put(new COSObjectKey(lastObjectId, lastGenID), + lastObjOffset); + } + // reestablish origin position + source.seek(originOffset); + } + + /** + * Search for the offset of the given xref table/stream among those found by a brute force search. + * + * @return the offset of the xref entry + * @throws IOException if something went wrong + */ + private long bfSearchForXRef(long xrefOffset) throws IOException + { + long newOffset = -1; + + // initialize bfSearchXRefTablesOffsets -> not null + bfSearchForXRefTables(); + // initialize bfSearchXRefStreamsOffsets -> not null + bfSearchForXRefStreams(); + + // TODO to be optimized, this won't work in every case + long newOffsetTable = searchNearestValue(bfSearchXRefTablesOffsets, xrefOffset); + + // TODO to be optimized, this won't work in every case + long newOffsetStream = searchNearestValue(bfSearchXRefStreamsOffsets, xrefOffset); + + // choose the nearest value + if (newOffsetTable > -1 && newOffsetStream > -1) + { + long differenceTable = xrefOffset - newOffsetTable; + long differenceStream = xrefOffset - newOffsetStream; + if (Math.abs(differenceTable) > Math.abs(differenceStream)) + { + newOffset = newOffsetStream; + bfSearchXRefStreamsOffsets.remove(newOffsetStream); + } + else + { + newOffset = newOffsetTable; + bfSearchXRefTablesOffsets.remove(newOffsetTable); + } + } + else if (newOffsetTable > -1) + { + newOffset = newOffsetTable; + bfSearchXRefTablesOffsets.remove(newOffsetTable); + } + else if (newOffsetStream > -1) + { + newOffset = newOffsetStream; + bfSearchXRefStreamsOffsets.remove(newOffsetStream); + } + return newOffset; + } + + private long searchNearestValue(List values, long offset) + { + long newValue = -1; + Long currentDifference = null; + int currentOffsetIndex = -1; + int numberOfOffsets = values.size(); + // find the nearest value + for (int i = 0; i < numberOfOffsets; i++) + { + long newDifference = offset - values.get(i); + // find the nearest offset + if (currentDifference == null + || (Math.abs(currentDifference) > Math.abs(newDifference))) + { + currentDifference = newDifference; + currentOffsetIndex = i; + } + } + if (currentOffsetIndex > -1) + { + newValue = values.get(currentOffsetIndex); + } + return newValue; + } + + /** + * Brute force search for all trailer marker. + * + * @throws IOException if something went wrong + */ + private boolean bfSearchForTrailer(COSDictionary trailer) throws IOException + { + Map trailerDicts = new HashMap<>(); + long originOffset = source.getPosition(); + source.seek(MINIMUM_SEARCH_OFFSET); + while (!source.isEOF()) + { + // search for trailer marker + if (isString(TRAILER_MARKER)) + { + source.seek(source.getPosition() + TRAILER_MARKER.length); + try + { + boolean rootFound = false; + boolean infoFound = false; + skipSpaces(); + COSDictionary trailerDict = parseCOSDictionary(); + StringBuilder trailerKeys = new StringBuilder(); + COSObject rootObj = trailerDict.getCOSObject(COSName.ROOT); + if (rootObj != null) + { + long objNumber = rootObj.getObjectNumber(); + int genNumber = rootObj.getGenerationNumber(); + trailerKeys.append(objNumber).append(" "); + trailerKeys.append(genNumber).append(" "); + rootFound = true; + } + COSObject infoObj = trailerDict.getCOSObject(COSName.INFO); + if (infoObj != null) + { + long objNumber = infoObj.getObjectNumber(); + int genNumber = infoObj.getGenerationNumber(); + trailerKeys.append(objNumber).append(" "); + trailerKeys.append(genNumber).append(" "); + infoFound = true; + } + if (rootFound && infoFound) + { + trailerDicts.put(trailerKeys.toString(), trailerDict); + } + } + catch (IOException exception) + { + LOG.debug("An exception occured during brute force search for trailer - ignoring", exception); + continue; + } + } + source.read(); + } + source.seek(originOffset); + // eliminate double entries + int trailerdictsSize = trailerDicts.size(); + String firstEntry = null; + if (trailerdictsSize > 0) + { + String[] keys = new String[trailerdictsSize]; + trailerDicts.keySet().toArray(keys); + firstEntry = keys[0]; + for (int i = 1; i < trailerdictsSize; i++) + { + if (firstEntry.equals(keys[i])) + { + trailerDicts.remove(keys[i]); + } + } + } + // continue if one entry is left only + if (trailerDicts.size() == 1) + { + boolean rootFound = false; + boolean infoFound = false; + COSDictionary trailerDict = trailerDicts.get(firstEntry); + COSBase rootObj = trailerDict.getItem(COSName.ROOT); + if (rootObj instanceof COSObject) + { + // check if the dictionary can be dereferenced and is the one we are looking for + COSDictionary rootDict = retrieveCOSDictionary((COSObject) rootObj); + if (rootDict != null && isCatalog(rootDict)) + { + rootFound = true; + } + } + COSBase infoObj = trailerDict.getItem(COSName.INFO); + if (infoObj instanceof COSObject) + { + // check if the dictionary can be dereferenced and is the one we are looking for + COSDictionary infoDict = retrieveCOSDictionary((COSObject) infoObj); + if (infoDict != null && isInfo(infoDict)) + { + infoFound = true; + } + } + if (rootFound && infoFound) + { + trailer.setItem(COSName.ROOT, rootObj); + trailer.setItem(COSName.INFO, infoObj); + if (trailerDict.containsKey(COSName.ENCRYPT)) + { + COSBase encObj = trailerDict.getItem(COSName.ENCRYPT); + if (encObj instanceof COSObject) + { + // check if the dictionary can be dereferenced + // TODO check if the dictionary is an encryption dictionary? + COSDictionary encDict = retrieveCOSDictionary((COSObject) encObj); + if (encDict != null) + { + trailer.setItem(COSName.ENCRYPT, encObj); + } + } + } + if (trailerDict.containsKey(COSName.ID)) + { + COSBase idObj = trailerDict.getItem(COSName.ID); + if (idObj instanceof COSArray) + { + trailer.setItem(COSName.ID, idObj); + } + } + return true; + } + } + return false; + } + + /** + * Brute force search for the last EOF marker. + * + * @throws IOException if something went wrong + */ + private void bfSearchForLastEOFMarker() throws IOException + { + if (lastEOFMarker == null) + { + long originOffset = source.getPosition(); + source.seek(MINIMUM_SEARCH_OFFSET); + while (!source.isEOF()) + { + // search for EOF marker + if (isString(EOF_MARKER)) + { + long tempMarker = source.getPosition(); + source.seek(tempMarker + 5); + try + { + // check if the following data is some valid pdf content + // which most likely indicates that the pdf is linearized, + // updated or just cut off somewhere in the middle + skipSpaces(); + if (!isString(XREF_TABLE)) + { + readObjectNumber(); + readGenerationNumber(); + } + } + catch (IOException exception) + { + // save the EOF marker as the following data is most likely some garbage + LOG.debug("An exception occured during brute force for last EOF - ignoring", exception); + lastEOFMarker = tempMarker; + } + } + source.read(); + } + source.seek(originOffset); + // no EOF marker found + if (lastEOFMarker == null) + { + lastEOFMarker = Long.MAX_VALUE; + } + } + } + + /** + * Brute force search for all object streams. + * + * @throws IOException if something went wrong + */ + private void bfSearchForObjStreams() throws IOException + { + HashMap bfSearchObjStreamsOffsets = new HashMap<>(); + long originOffset = source.getPosition(); + source.seek(MINIMUM_SEARCH_OFFSET); + char[] string = " obj".toCharArray(); + while (!source.isEOF()) + { + // search for EOF marker + if (isString(OBJ_STREAM)) + { + long currentPosition = source.getPosition(); + // search backwards for the beginning of the object + long newOffset = -1; + boolean objFound = false; + for (int i = 1; i < 40 && !objFound; i++) + { + long currentOffset = currentPosition - (i * 10); + if (currentOffset > 0) + { + source.seek(currentOffset); + for (int j = 0; j < 10; j++) + { + if (isString(string)) + { + long tempOffset = currentOffset - 1; + source.seek(tempOffset); + int genID = source.peek(); + // is the next char a digit? + if (isDigit(genID)) + { + tempOffset--; + source.seek(tempOffset); + if (isSpace()) + { + int length = 0; + source.seek(--tempOffset); + while (tempOffset > MINIMUM_SEARCH_OFFSET && isDigit()) + { + source.seek(--tempOffset); + length++; + } + if (length > 0) + { + source.read(); + newOffset = source.getPosition(); + long objNumber = readObjectNumber(); + int genNumber = readGenerationNumber(); + COSObjectKey streamObjectKey = new COSObjectKey(objNumber, + genNumber); + bfSearchObjStreamsOffsets.put(newOffset, + streamObjectKey); + } + } + } + LOG.debug("Dictionary start for object stream -> " + newOffset); + objFound = true; + break; + } + else + { + currentOffset++; + source.read(); + } + } + } + } + source.seek(currentPosition + OBJ_STREAM.length); + } + source.read(); + } + // add all found compressed objects to the brute force search result + for (Entry streamOffsetsEntry : bfSearchObjStreamsOffsets.entrySet()) + { + Long offset = streamOffsetsEntry.getKey(); + Long bfOffset = bfSearchCOSObjectKeyOffsets.get(streamOffsetsEntry.getValue()); + // incomplete object stream found? + if (bfOffset == null) + { + LOG.warn("Skipped incomplete object stream:" + streamOffsetsEntry.getValue() + + " at " + offset); + continue; + } + // check if the object was overwritten + if (offset.equals(bfOffset)) + { + source.seek(offset); + long stmObjNumber = readObjectNumber(); + int stmGenNumber = readGenerationNumber(); + readExpectedString(OBJ_MARKER, true); + int nrOfObjects = 0; + byte[] numbersBytes = null; + COSStream stream = null; + COSInputStream is = null; + try + { + COSDictionary dict = parseCOSDictionary(); + int offsetFirstStream = dict.getInt(COSName.FIRST); + nrOfObjects = dict.getInt(COSName.N); + // skip the stream if required values are missing + if (offsetFirstStream == -1 || nrOfObjects == -1) + { + continue; + } + stream = parseCOSStream(dict); + if (securityHandler != null) + { + securityHandler.decryptStream(stream, stmObjNumber, stmGenNumber); + } + is = stream.createInputStream(); + numbersBytes = new byte[offsetFirstStream]; + long isResult = is.read(numbersBytes); + + if (Long.compare(isResult, numbersBytes.length) != 0) + { + LOG.debug("Tried reading " + numbersBytes.length + " bytes but only " + isResult + " bytes read"); + } + } + catch (IOException exception) + { + LOG.debug( + "Skipped corrupt stream: (" + stmObjNumber + " 0 at offset " + offset, exception); + continue; + } + finally + { + if (is != null) + { + is.close(); + } + if (stream != null) + { + stream.close(); + } + } + int start = 0; + // skip spaces + while (start < numbersBytes.length && numbersBytes[start] == 32) + { + start++; + } + String numbersStr = new String(numbersBytes, start, numbersBytes.length - start, + "ISO-8859-1"); + numbersStr = numbersStr.replaceAll("\n", " ").replaceAll(" ", " "); + String[] numbers = numbersStr.split(" "); + if (numbers.length < nrOfObjects * 2) + { + LOG.debug( + "Skipped corrupt stream: (" + stmObjNumber + " 0 at offset " + offset); + continue; + } + Map xrefOffset = xrefTrailerResolver.getXrefTable(); + for (int i = 0; i < nrOfObjects; i++) + { + try + { + long objNumber = Long.parseLong(numbers[i * 2]); + COSObjectKey objKey = new COSObjectKey(objNumber, 0); + Long existingOffset = bfSearchCOSObjectKeyOffsets.get(objKey); + if (existingOffset != null && existingOffset < 0) + { + // translate stream object key to its offset + COSObjectKey objStmKey = new COSObjectKey(Math.abs(existingOffset), 0); + existingOffset = bfSearchCOSObjectKeyOffsets.get(objStmKey); + } + if (existingOffset == null || offset > existingOffset) + { + bfSearchCOSObjectKeyOffsets.put(objKey, -stmObjNumber); + xrefOffset.put(objKey, -stmObjNumber); + } + } + catch (NumberFormatException exception) + { + LOG.debug("Skipped corrupt object key in stream: " + stmObjNumber); + } + } + } + } + source.seek(originOffset); + } + + /** + * Brute force search for all xref entries (tables). + * + * @throws IOException if something went wrong + */ + private void bfSearchForXRefTables() throws IOException + { + if (bfSearchXRefTablesOffsets == null) + { + // a pdf may contain more than one xref entry + bfSearchXRefTablesOffsets = new Vector<>(); + long originOffset = source.getPosition(); + source.seek(MINIMUM_SEARCH_OFFSET); + // search for xref tables + while (!source.isEOF()) + { + if (isString(XREF_TABLE)) + { + long newOffset = source.getPosition(); + source.seek(newOffset - 1); + // ensure that we don't read "startxref" instead of "xref" + if (isWhitespace()) + { + bfSearchXRefTablesOffsets.add(newOffset); + } + source.seek(newOffset + 4); + } + source.read(); + } + source.seek(originOffset); + } + } + + /** + * Brute force search for all /XRef entries (streams). + * + * @throws IOException if something went wrong + */ + private void bfSearchForXRefStreams() throws IOException + { + if (bfSearchXRefStreamsOffsets == null) + { + // a pdf may contain more than one /XRef entry + bfSearchXRefStreamsOffsets = new Vector<>(); + long originOffset = source.getPosition(); + source.seek(MINIMUM_SEARCH_OFFSET); + // search for XRef streams + String objString = " obj"; + char[] string = objString.toCharArray(); + while (!source.isEOF()) + { + if (isString(XREF_STREAM)) + { + // search backwards for the beginning of the stream + long newOffset = -1; + long xrefOffset = source.getPosition(); + boolean objFound = false; + for (int i = 1; i < 40 && !objFound; i++) + { + long currentOffset = xrefOffset - (i * 10); + if (currentOffset > 0) + { + source.seek(currentOffset); + for (int j = 0; j < 10; j++) + { + if (isString(string)) + { + long tempOffset = currentOffset - 1; + source.seek(tempOffset); + int genID = source.peek(); + // is the next char a digit? + if (isDigit(genID)) + { + tempOffset--; + source.seek(tempOffset); + if (isSpace()) + { + int length = 0; + source.seek(--tempOffset); + while (tempOffset > MINIMUM_SEARCH_OFFSET && isDigit()) + { + source.seek(--tempOffset); + length++; + } + if (length > 0) + { + source.read(); + newOffset = source.getPosition(); + } + } + } + LOG.debug("Fixed reference for xref stream " + xrefOffset + + " -> " + newOffset); + objFound = true; + break; + } + else + { + currentOffset++; + source.read(); + } + } + } + } + if (newOffset > -1) + { + bfSearchXRefStreamsOffsets.add(newOffset); + } + source.seek(xrefOffset + 5); + } + source.read(); + } + source.seek(originOffset); + } + } + + /** + * Rebuild the trailer dictionary if startxref can't be found. + * + * @return the rebuild trailer dictionary + * + * @throws IOException if something went wrong + */ + private COSDictionary rebuildTrailer() throws IOException + { + COSDictionary trailer = null; + bfSearchForObjects(); + if (bfSearchCOSObjectKeyOffsets != null) + { + // reset trailer resolver + xrefTrailerResolver.reset(); + // use the found objects to rebuild the trailer resolver + xrefTrailerResolver.nextXrefObj(0, XRefType.TABLE); + for (Entry entry : bfSearchCOSObjectKeyOffsets.entrySet()) + { + xrefTrailerResolver.setXRef(entry.getKey(), entry.getValue()); + } + xrefTrailerResolver.setStartxref(0); + trailer = xrefTrailerResolver.getTrailer(); + getDocument().setTrailer(trailer); + boolean searchForObjStreamsDone = false; + if (!bfSearchForTrailer(trailer)) + { + // search for the different parts of the trailer dictionary + if (!searchForTrailerItems(trailer)) + { + // root entry wasn't found, maybe it is part of an object stream + bfSearchForObjStreams(); + searchForObjStreamsDone = true; + // search again for the root entry + searchForTrailerItems(trailer); + } + } + // prepare decryption if necessary + prepareDecryption(); + if (!searchForObjStreamsDone) + { + bfSearchForObjStreams(); + } + } + trailerWasRebuild = true; + return trailer; + } + + private boolean searchForTrailerItems(COSDictionary trailer) throws IOException + { + boolean rootFound = false; + for (Entry entry : bfSearchCOSObjectKeyOffsets.entrySet()) + { + COSDictionary dictionary = retrieveCOSDictionary(entry.getKey(), entry.getValue()); + if (dictionary == null) + { + continue; + } + // document catalog + if (isCatalog(dictionary)) + { + trailer.setItem(COSName.ROOT, document.getObjectFromPool(entry.getKey())); + rootFound = true; + } + // info dictionary + else if (isInfo(dictionary)) + { + trailer.setItem(COSName.INFO, document.getObjectFromPool(entry.getKey())); + } + // encryption dictionary, if existing, is lost + // We can't run "Algorithm 2" from PDF specification because of missing ID + } + return rootFound; + } + + private COSDictionary retrieveCOSDictionary(COSObject object) throws IOException + { + COSObjectKey key = new COSObjectKey(object); + Long offset = bfSearchCOSObjectKeyOffsets.get(key); + if (offset != null) + { + return retrieveCOSDictionary(key, offset); + } + return null; + } + + private COSDictionary retrieveCOSDictionary(COSObjectKey key, long offset) throws IOException + { + COSDictionary dictionary = null; + // handle compressed objects + if (offset < 0) + { + COSObject compressedObject = document.getObjectFromPool(key); + if (compressedObject.getObject() == null) + { + parseObjectStream((int) -offset); + } + COSBase baseObject = compressedObject.getObject(); + if (baseObject instanceof COSDictionary) + { + dictionary = (COSDictionary) baseObject; + } + } + else + { + source.seek(offset); + readObjectNumber(); + readGenerationNumber(); + readExpectedString(OBJ_MARKER, true); + if (source.peek() != '<') + { + return null; + } + try + { + dictionary = parseCOSDictionary(); + } + catch (IOException exception) + { + LOG.debug("Skipped object " + key + ", either it's corrupt or not a dictionary", exception); + } + } + return dictionary; + } + + /** + * Check if all entries of the pages dictionary are present. Those which can't be dereferenced are removed. + * + * @param root the root dictionary of the pdf + * @throws java.io.IOException if the page tree root is null + */ + protected void checkPages(COSDictionary root) throws IOException + { + if (trailerWasRebuild) + { + // check if all page objects are dereferenced + COSBase pages = root.getDictionaryObject(COSName.PAGES); + if (pages instanceof COSDictionary) + { + checkPagesDictionary((COSDictionary) pages, new HashSet()); + } + } + if (!(root.getDictionaryObject(COSName.PAGES) instanceof COSDictionary)) + { + throw new IOException("Page tree root must be a dictionary"); + } + } + + private int checkPagesDictionary(COSDictionary pagesDict, Set set) + { + // check for kids + COSBase kids = pagesDict.getDictionaryObject(COSName.KIDS); + int numberOfPages = 0; + if (kids instanceof COSArray) + { + COSArray kidsArray = (COSArray) kids; + List kidsList = kidsArray.toList(); + for (COSBase kid : kidsList) + { + if (!(kid instanceof COSObject) || set.contains((COSObject) kid)) + { + kidsArray.remove(kid); + continue; + } + COSObject kidObject = (COSObject) kid; + COSBase kidBaseobject = kidObject.getObject(); + // object wasn't dereferenced -> remove it + if (kidBaseobject == null || kidBaseobject.equals(COSNull.NULL)) + { + LOG.warn("Removed null object " + kid + " from pages dictionary"); + kidsArray.remove(kid); + } + else if (kidBaseobject instanceof COSDictionary) + { + COSDictionary kidDictionary = (COSDictionary) kidBaseobject; + COSName type = kidDictionary.getCOSName(COSName.TYPE); + if (COSName.PAGES.equals(type)) + { + // process nested pages dictionaries + set.add(kidObject); + numberOfPages += checkPagesDictionary(kidDictionary, set); + } + else if (COSName.PAGE.equals(type)) + { + // count pages + numberOfPages++; + } + } + } + } + // fix counter + pagesDict.setInt(COSName.COUNT, numberOfPages); + return numberOfPages; + } + + /** + * Tell if the dictionary is a PDF catalog. Override this for an FDF catalog. + * + * @param dictionary + * @return true if the given dictionary is a root dictionary + */ + protected boolean isCatalog(COSDictionary dictionary) + { + return COSName.CATALOG.equals(dictionary.getCOSName(COSName.TYPE)); + } + + /** + * Tell if the dictionary is an info dictionary. + * + * @param dictionary + * @return true if the given dictionary is an info dictionary + */ + private boolean isInfo(COSDictionary dictionary) + { + if (dictionary.containsKey(COSName.PARENT) || dictionary.containsKey(COSName.A) + || dictionary.containsKey(COSName.DEST)) + { + return false; + } + if (!dictionary.containsKey(COSName.MOD_DATE) && !dictionary.containsKey(COSName.TITLE) + && !dictionary.containsKey(COSName.AUTHOR) + && !dictionary.containsKey(COSName.SUBJECT) + && !dictionary.containsKey(COSName.KEYWORDS) + && !dictionary.containsKey(COSName.CREATOR) + && !dictionary.containsKey(COSName.PRODUCER) + && !dictionary.containsKey(COSName.CREATION_DATE)) + { + return false; + } + return true; + } + + /** + * This will parse the startxref section from the stream. The startxref value is ignored. + * + * @return the startxref value or -1 on parsing error + * @throws IOException If an IO error occurs. + */ + private long parseStartXref() throws IOException + { + long startXref = -1; + if (isString(STARTXREF)) + { + readString(); + skipSpaces(); + // This integer is the byte offset of the first object referenced by the xref or xref stream + startXref = readLong(); + } + return startXref; + } + + /** + * Checks if the given string can be found at the current offset. + * + * @param string the bytes of the string to look for + * @return true if the bytes are in place, false if not + * @throws IOException if something went wrong + */ + private boolean isString(byte[] string) throws IOException + { + boolean bytesMatching = false; + if (source.peek() == string[0]) + { + int length = string.length; + byte[] bytesRead = new byte[length]; + int numberOfBytes = source.read(bytesRead, 0, length); + while (numberOfBytes < length) + { + int readMore = source.read(bytesRead, numberOfBytes, length - numberOfBytes); + if (readMore < 0) + { + break; + } + numberOfBytes += readMore; + } + bytesMatching = Arrays.equals(string, bytesRead); + source.rewind(numberOfBytes); + } + return bytesMatching; + } + + /** + * Checks if the given string can be found at the current offset. + * + * @param string the bytes of the string to look for + * @return true if the bytes are in place, false if not + * @throws IOException if something went wrong + */ + private boolean isString(char[] string) throws IOException + { + boolean bytesMatching = true; + long originOffset = source.getPosition(); + for (char c : string) + { + if (source.read() != c) + { + bytesMatching = false; + break; + } + } + source.seek(originOffset); + return bytesMatching; + } + + /** + * This will parse the trailer from the stream and add it to the state. + * + * @return false on parsing error + * @throws IOException If an IO error occurs. + */ + private boolean parseTrailer() throws IOException + { + // parse the last trailer. + trailerOffset = source.getPosition(); + // PDFBOX-1739 skip extra xref entries in RegisSTAR documents + if (isLenient) + { + int nextCharacter = source.peek(); + while (nextCharacter != 't' && isDigit(nextCharacter)) + { + if (source.getPosition() == trailerOffset) + { + // warn only the first time + LOG.warn("Expected trailer object at offset " + trailerOffset + + ", keep trying"); + } + readLine(); + nextCharacter = source.peek(); + } + } + if(source.peek() != 't') + { + return false; + } + //read "trailer" + long currentOffset = source.getPosition(); + String nextLine = readLine(); + if( !nextLine.trim().equals( "trailer" ) ) + { + // in some cases the EOL is missing and the trailer immediately + // continues with "<<" or with a blank character + // even if this does not comply with PDF reference we want to support as many PDFs as possible + // Acrobat reader can also deal with this. + if (nextLine.startsWith("trailer")) + { + // we can't just unread a portion of the read data as we don't know if the EOL consist of 1 or 2 bytes + int len = "trailer".length(); + // jump back right after "trailer" + source.seek(currentOffset + len); + } + else + { + return false; + } + } + + // in some cases the EOL is missing and the trailer continues with " <<" + // even if this does not comply with PDF reference we want to support as many PDFs as possible + // Acrobat reader can also deal with this. + skipSpaces(); + + COSDictionary parsedTrailer = parseCOSDictionary(); + xrefTrailerResolver.setTrailer( parsedTrailer ); + + skipSpaces(); + return true; + } + + /** + * Parse the header of a pdf. + * + * @return true if a PDF header was found + * @throws IOException if something went wrong + */ + protected boolean parsePDFHeader() throws IOException + { + return parseHeader(PDF_HEADER, PDF_DEFAULT_VERSION); + } + + /** + * Parse the header of a fdf. + * + * @return true if a FDF header was found + * @throws IOException if something went wrong + */ + protected boolean parseFDFHeader() throws IOException + { + return parseHeader(FDF_HEADER, FDF_DEFAULT_VERSION); + } + + private boolean parseHeader(String headerMarker, String defaultVersion) throws IOException + { + // read first line + String header = readLine(); + // some pdf-documents are broken and the pdf-version is in one of the following lines + if (!header.contains(headerMarker)) + { + header = readLine(); + while (!header.contains(headerMarker)) + { + // if a line starts with a digit, it has to be the first one with data in it + if ((header.length() > 0) && (Character.isDigit(header.charAt(0)))) + { + break; + } + header = readLine(); + } + } + + // nothing found + if (!header.contains(headerMarker)) + { + source.seek(0); + return false; + } + + //sometimes there is some garbage in the header before the header + //actually starts, so lets try to find the header first. + int headerStart = header.indexOf( headerMarker ); + + // greater than zero because if it is zero then there is no point of trimming + if ( headerStart > 0 ) + { + //trim off any leading characters + header = header.substring( headerStart, header.length() ); + } + + // This is used if there is garbage after the header on the same line + if (header.startsWith(headerMarker) && !header.matches(headerMarker + "\\d.\\d")) + { + if (header.length() < headerMarker.length() + 3) + { + // No version number at all, set to 1.4 as default + header = headerMarker + defaultVersion; + LOG.debug("No version found, set to " + defaultVersion + " as default."); + } + else + { + String headerGarbage = header.substring(headerMarker.length() + 3, header.length()) + "\n"; + header = header.substring(0, headerMarker.length() + 3); + source.rewind(headerGarbage.getBytes(ISO_8859_1).length); + } + } + float headerVersion = -1; + try + { + String[] headerParts = header.split("-"); + if (headerParts.length == 2) + { + headerVersion = Float.parseFloat(headerParts[1]); + } + } + catch (NumberFormatException exception) + { + LOG.debug("Can't parse the header version.", exception); + } + if (headerVersion < 0) + { + if (isLenient) + { + headerVersion = 1.7f; + } + else + { + throw new IOException("Error getting header version: " + header); + } + } + document.setVersion(headerVersion); + // rewind + source.seek(0); + return true; + } + + /** + * This will parse the xref table from the stream and add it to the state + * The XrefTable contents are ignored. + * @param startByteOffset the offset to start at + * @return false on parsing error + * @throws IOException If an IO error occurs. + */ + protected boolean parseXrefTable(long startByteOffset) throws IOException + { + if(source.peek() != 'x') + { + return false; + } + String xref = readString(); + if( !xref.trim().equals( "xref" ) ) + { + return false; + } + + // check for trailer after xref + String str = readString(); + byte[] b = str.getBytes(ISO_8859_1); + source.rewind(b.length); + + // signal start of new XRef + xrefTrailerResolver.nextXrefObj( startByteOffset, XRefType.TABLE ); + + if (str.startsWith("trailer")) + { + LOG.warn("skipping empty xref table"); + return false; + } + + // Xref tables can have multiple sections. Each starts with a starting object id and a count. + while(true) + { + String currentLine = readLine(); + String[] splitString = currentLine.split("\\s"); + if (splitString.length != 2) + { + LOG.warn("Unexpected XRefTable Entry: " + currentLine); + return false; + } + // first obj id + long currObjID; + try + { + currObjID = Long.parseLong(splitString[0]); + } + catch (NumberFormatException exception) + { + LOG.warn("XRefTable: invalid ID for the first object: " + currentLine); + return false; + } + + // the number of objects in the xref table + int count = 0; + try + { + count = Integer.parseInt(splitString[1]); + } + catch (NumberFormatException exception) + { + LOG.warn("XRefTable: invalid number of objects: " + currentLine); + return false; + } + + skipSpaces(); + for(int i = 0; i < count; i++) + { + if(source.isEOF() || isEndOfName((char)source.peek())) + { + break; + } + if(source.peek() == 't') + { + break; + } + //Ignore table contents + currentLine = readLine(); + splitString = currentLine.split("\\s"); + if (splitString.length < 3) + { + LOG.warn("invalid xref line: " + currentLine); + break; + } + /* This supports the corrupt table as reported in + * PDFBOX-474 (XXXX XXX XX n) */ + if(splitString[splitString.length-1].equals("n")) + { + try + { + long currOffset = Long.parseLong(splitString[0]); + int currGenID = Integer.parseInt(splitString[1]); + COSObjectKey objKey = new COSObjectKey(currObjID, currGenID); + xrefTrailerResolver.setXRef(objKey, currOffset); + } + catch(NumberFormatException e) + { + throw new IOException(e); + } + } + else if(!splitString[2].equals("f")) + { + throw new IOException("Corrupt XRefTable Entry - ObjID:" + currObjID); + } + currObjID++; + skipSpaces(); + } + skipSpaces(); + if (!isDigit()) + { + break; + } + } + return true; + } + + /** + * Fills XRefTrailerResolver with data of given stream. + * Stream must be of type XRef. + * @param stream the stream to be read + * @param objByteOffset the offset to start at + * @param isStandalone should be set to true if the stream is not part of a hybrid xref table + * @throws IOException if there is an error parsing the stream + */ + private void parseXrefStream(COSStream stream, long objByteOffset, boolean isStandalone) throws IOException + { + // the cross reference stream of a hybrid xref table will be added to the existing one + // and we must not override the offset and the trailer + if ( isStandalone ) + { + xrefTrailerResolver.nextXrefObj( objByteOffset, XRefType.STREAM ); + xrefTrailerResolver.setTrailer( stream ); + } + PDFXrefStreamParser parser = new PDFXrefStreamParser( stream, document, xrefTrailerResolver ); + parser.parse(); + } + + /** + * This will get the document that was parsed. The document must be parsed before this is called. When you are done + * with this document you must call close() on it to release resources. + * + * @return The document that was parsed. + * + * @throws IOException If there is an error getting the document. + */ + public COSDocument getDocument() throws IOException + { + if( document == null ) + { + throw new IOException("You must parse the document first before calling getDocument()"); + } + return document; + } + + /** + * This will get the encryption dictionary. The document must be parsed before this is called. + * + * @return The encryption dictionary of the document that was parsed. + * + * @throws IOException If there is an error getting the document. + */ + public PDEncryption getEncryption() throws IOException + { + if (document == null) + { + throw new IOException( + "You must parse the document first before calling getEncryption()"); + } + return encryption; + } + + /** + * This will get the AccessPermission. The document must be parsed before this is called. + * + * @return The access permission of document that was parsed. + * + * @throws IOException If there is an error getting the document. + */ + public AccessPermission getAccessPermission() throws IOException + { + if (document == null) + { + throw new IOException( + "You must parse the document first before calling getAccessPermission()"); + } + return accessPermission; + } + + /** + * Parse the values of the trailer dictionary and return the root object. + * + * @param trailer The trailer dictionary. + * @return The parsed root object. + * @throws IOException If an IO error occurs or if the root object is missing in the trailer dictionary. + */ + protected COSBase parseTrailerValuesDynamically(COSDictionary trailer) throws IOException + { + // PDFBOX-1557 - ensure that all COSObject are loaded in the trailer + // PDFBOX-1606 - after securityHandler has been instantiated + for (COSBase trailerEntry : trailer.getValues()) + { + if (trailerEntry instanceof COSObject) + { + COSObject tmpObj = (COSObject) trailerEntry; + parseObjectDynamically(tmpObj, false); + } + } + // parse catalog or root object + COSObject root = trailer.getCOSObject(COSName.ROOT); + if (root == null) + { + throw new IOException("Missing root object specification in trailer."); + } + return root.getObject(); + } + + /** + * Prepare for decryption. + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException if something went wrong + */ + private void prepareDecryption() throws InvalidPasswordException, IOException + { + if (encryption == null) + { + COSBase trailerEncryptItem = document.getTrailer().getItem(COSName.ENCRYPT); + if (trailerEncryptItem != null && !(trailerEncryptItem instanceof COSNull)) + { + if (trailerEncryptItem instanceof COSObject) + { + COSObject trailerEncryptObj = (COSObject) trailerEncryptItem; + parseDictionaryRecursive(trailerEncryptObj); + } + try + { + encryption = new PDEncryption(document.getEncryptionDictionary()); + DecryptionMaterial decryptionMaterial; + if (keyStoreInputStream != null) + { + KeyStore ks = KeyStore.getInstance("PKCS12"); + ks.load(keyStoreInputStream, password.toCharArray()); + + decryptionMaterial = new PublicKeyDecryptionMaterial(ks, keyAlias, + password); + } + else + { + decryptionMaterial = new StandardDecryptionMaterial(password); + } + + securityHandler = encryption.getSecurityHandler(); + securityHandler.prepareForDecryption(encryption, document.getDocumentID(), + decryptionMaterial); + accessPermission = securityHandler.getCurrentAccessPermission(); + } + catch (IOException e) + { + throw e; + } + catch (Exception e) + { + throw new IOException("Error (" + e.getClass().getSimpleName() + + ") while creating security handler for decryption", e); + } + finally + { + if (keyStoreInputStream != null) + { + IOUtils.closeQuietly(keyStoreInputStream); + } + } + } + } + } + + /** + * Resolves all not already parsed objects of a dictionary recursively. + * + * @param dictionaryObject dictionary to be parsed + * @throws IOException if something went wrong + * + */ + private void parseDictionaryRecursive(COSObject dictionaryObject) throws IOException + { + parseObjectDynamically(dictionaryObject, true); + if (!(dictionaryObject.getObject() instanceof COSDictionary)) + { + // we can't be lenient here, this is called by prepareDecryption() + // to get the encryption directory + throw new IOException("Dictionary object expected at offset " + source.getPosition()); + } + COSDictionary dictionary = (COSDictionary) dictionaryObject.getObject(); + for (COSBase value : dictionary.getValues()) + { + if (value instanceof COSObject) + { + COSObject object = (COSObject) value; + if (object.getObject() == null) + { + parseDictionaryRecursive(object); + } + } + } + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/EndstreamOutputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/EndstreamOutputStream.java new file mode 100644 index 00000000000..1b81bc43b1d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/EndstreamOutputStream.java @@ -0,0 +1,139 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdfparser; + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +/** + * This class is only for the readUntilEndStream method, to prevent a + * final CR LF or LF (but not a final CR!) from being written to the output, + * unless the beginning of the stream is assumed to be ASCII. + * Only the 3-param write() method is implemented. This solves + * PDFBOX-2079 and PDFBOX-2120 and avoids making readUntilEndStream() + * even more complex than it already is. + * + * @author Tilman Hausherr + */ +class EndstreamOutputStream extends BufferedOutputStream +{ + //TODO: replace this class with a PullBackOutputStream class if there ever is one + + private boolean hasCR = false; + private boolean hasLF = false; + private int pos = 0; + private boolean mustFilter = true; + + EndstreamOutputStream(OutputStream out) + { + super(out); + } + + /** + * Write CR and/or LF that were kept, then writes len bytes from the + * specified byte array starting at offset off to this output stream, + * except trailing CR, CR LF, or LF. No filtering will be done for the + * entire stream if the beginning is assumed to be ASCII. + * @param b byte array. + * @param off offset. + * @param len length of segment to write. + * @throws IOException + */ + @Override + public void write(byte[] b, int off, int len) throws IOException + { + if (pos == 0 && len > 10) + { + // PDFBOX-2120 Don't filter if ASCII, i.e. keep a final CR LF or LF + mustFilter = false; + for (int i = 0; i < 10; ++i) + { + // Heuristic approach, taken from PDFStreamParser, PDFBOX-1164 + if ((b[i] < 0x09) || ((b[i] > 0x0a) && (b[i] < 0x20) && (b[i] != 0x0d))) + { + // control character or > 0x7f -> we have binary data + mustFilter = true; + break; + } + } + } + if (mustFilter) + { + // first write what we kept last time + if (hasCR) + { + // previous buffer ended with CR + hasCR = false; + if (!hasLF && len == 1 && b[off] == '\n') + { + // actual buffer contains only LF so it will be the last one + // => we're done + // reset hasCR done too to avoid CR getting written in the flush + return; + } + super.write('\r'); + } + if (hasLF) + { + super.write('\n'); + hasLF = false; + } + // don't write CR, LF, or CR LF if at the end of the buffer + if (len > 0) + { + if (b[off + len - 1] == '\r') + { + hasCR = true; + --len; + } + else if (b[off + len - 1] == '\n') + { + hasLF = true; + --len; + if (len > 0 && b[off + len - 1] == '\r') + { + hasCR = true; + --len; + } + } + } + } + super.write(b, off, len); + pos += len; + } + + /** + * write out a single CR if one was kept. Don't write kept CR LF or LF, + * and then call the base method to flush. + * + * @throws IOException + */ + @Override + public void flush() throws IOException + { + // if there is only a CR and no LF, write it + if (hasCR && !hasLF) + { + super.write('\r'); + ++pos; + } + hasCR = false; + hasLF = false; + super.flush(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java new file mode 100644 index 00000000000..6b40bbc3211 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/FDFParser.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccessBuffer; +import org.apache.pdfbox.io.RandomAccessFile; + +public class FDFParser extends COSParser +{ + private static final Log LOG = LogFactory.getLog(FDFParser.class); + + /** + * Constructs parser for given file using memory buffer. + * + * @param filename the filename of the pdf to be parsed + * + * @throws IOException If something went wrong. + */ + public FDFParser(String filename) throws IOException + { + this(new File(filename)); + } + + /** + * Constructs parser for given file using given buffer for temporary + * storage. + * + * @param file the pdf to be parsed + * + * @throws IOException If something went wrong. + */ + public FDFParser(File file) throws IOException + { + super(new RandomAccessFile(file, "r")); + fileLen = file.length(); + init(); + } + + /** + * Constructor. + * + * @param input input stream representing the pdf. + * @throws IOException If something went wrong. + */ + public FDFParser(InputStream input) throws IOException + { + super(new RandomAccessBuffer(input)); + fileLen = source.length(); + init(); + } + + /** + * Tell if the dictionary is a FDF catalog. + * + * @param dictionary + * @return true if the dictionary is a FDF catalog + */ + @Override + protected final boolean isCatalog(COSDictionary dictionary) + { + return dictionary.containsKey(COSName.FDF); + } + + private void init() throws IOException + { + String eofLookupRangeStr = System.getProperty(SYSPROP_EOFLOOKUPRANGE); + if (eofLookupRangeStr != null) + { + try + { + setEOFLookupRange(Integer.parseInt(eofLookupRangeStr)); + } + catch (NumberFormatException nfe) + { + LOG.warn("System property " + SYSPROP_EOFLOOKUPRANGE + + " does not contain an integer value, but: '" + eofLookupRangeStr + "'"); + } + } + document = new COSDocument(); + } + + /** + * The initial parse will first parse only the trailer, the xrefstart and all xref tables to have a pointer (offset) + * to all the pdf's objects. It can handle linearized pdfs, which will have an xref at the end pointing to an xref + * at the beginning of the file. Last the root object is parsed. + * + * @throws IOException If something went wrong. + */ + private void initialParse() throws IOException + { + COSDictionary trailer = retrieveTrailer(); + + COSBase rootObject = parseTrailerValuesDynamically(trailer); + + // resolve all objects + // A FDF doesn't have a catalog, all FDF fields are within the root object + if (rootObject instanceof COSDictionary) + { + parseDictObjects((COSDictionary) rootObject, (COSName[]) null); + } + initialParseDone = true; + } + + /** + * This will parse the stream and populate the COSDocument object. + * + * @throws IOException If there is an error reading from the stream or corrupt data + * is found. + */ + public void parse() throws IOException + { + // set to false if all is processed + boolean exceptionOccurred = true; + try + { + if (!parseFDFHeader()) + { + throw new IOException( "Error: Header doesn't contain versioninfo" ); + } + initialParse(); + exceptionOccurred = false; + } + finally + { + if (exceptionOccurred && document != null) + { + IOUtils.closeQuietly(document); + document = null; + } + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java new file mode 100644 index 00000000000..25079314e45 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; + +/** + * A SequentialSource backed by an InputStream. + */ +final class InputStreamSource implements SequentialSource +{ + private final PushbackInputStream input; + private int position; + + /** + * Constructor. + * + * @param input The input stream to wrap. + */ + InputStreamSource(InputStream input) + { + this.input = new PushbackInputStream(input, 32767); // maximum length of a PDF string + this.position = 0; + } + + @Override + public int read() throws IOException + { + int b = input.read(); + position++; + return b; + } + + @Override + public int read(byte[] b) throws IOException + { + int n = input.read(b); + if (n > 0) + { + position += n; + return n; + } + else + { + return -1; + } + } + + @Override + public int read(byte[] b, int offset, int length) throws IOException + { + int n = input.read(b, offset, length); + if (n > 0) + { + position += n; + return n; + } + else + { + return -1; + } + } + + @Override + public long getPosition() throws IOException + { + return position; + } + + @Override + public int peek() throws IOException + { + int b = input.read(); + if (b != -1) + { + input.unread(b); + } + return b; + } + + @Override + public void unread(int b) throws IOException + { + input.unread(b); + position--; + } + + @Override + public void unread(byte[] bytes) throws IOException + { + input.unread(bytes); + position -= bytes.length; + } + + @Override + public void unread(byte[] bytes, int start, int len) throws IOException + { + input.unread(bytes, start, len); + position -= len - start; + } + + @Override + public byte[] readFully(int length) throws IOException + { + byte[] bytes = new byte[length]; + int off = 0; + int len = length; + while (len > 0) + { + int n = this.read(bytes, off, len); + if (n > 0) + { + off += n; + len -= n; + position += n; + } + else + { + break; + } + } + return bytes; + } + + @Override + public boolean isEOF() throws IOException + { + return peek() == -1; + } + + @Override + public void close() throws IOException + { + input.close(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java new file mode 100644 index 00000000000..dde7ded712f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFObjectStreamParser.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; + +/** + * This will parse a PDF 1.5 object stream and extract all of the objects from the stream. + * + * @author Ben Litchfield + * + */ +public class PDFObjectStreamParser extends BaseParser +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDFObjectStreamParser.class); + + private List streamObjects = null; + private final COSStream stream; + + /** + * Constructor. + * + * @param stream The stream to parse. + * @param document The document for the current parsing. + * @throws IOException If there is an error initializing the stream. + */ + public PDFObjectStreamParser(COSStream stream, COSDocument document) throws IOException + { + super(new InputStreamSource(stream.createInputStream())); + this.stream = stream; + this.document = document; + } + + /** + * This will parse the tokens in the stream. This will close the + * stream when it is finished parsing. + * + * @throws IOException If there is an error while parsing the stream. + */ + public void parse() throws IOException + { + try + { + //need to first parse the header. + int numberOfObjects = stream.getInt( "N" ); + if (numberOfObjects == -1) + { + throw new IOException("/N entry missing in object stream"); + } + List objectNumbers = new ArrayList<>( numberOfObjects ); + streamObjects = new ArrayList<>( numberOfObjects ); + for( int i=0; i= objectNumbers.size()) + { + LOG.error("/ObjStm (object stream) has more objects than /N " + numberOfObjects); + break; + } + object.setObjectNumber( objectNumbers.get( objectCounter) ); + streamObjects.add( object ); + if(LOG.isDebugEnabled()) + { + LOG.debug( "parsed=" + object ); + } + // According to the spec objects within an object stream shall not be enclosed + // by obj/endobj tags, but there are some pdfs in the wild using those tags + // skip endobject marker if present + if (!seqSource.isEOF() && seqSource.peek() == 'e') + { + readLine(); + } + objectCounter++; + } + } + finally + { + seqSource.close(); + } + } + + /** + * This will get the objects that were parsed from the stream. + * + * @return All of the objects in the stream. + */ + public List getObjects() + { + return streamObjects; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java new file mode 100644 index 00000000000..3d05afc2f39 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java @@ -0,0 +1,234 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.io.ScratchFile; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; + +public class PDFParser extends COSParser +{ + private static final Log LOG = LogFactory.getLog(PDFParser.class); + + /** + * Constructor. + * Unrestricted main memory will be used for buffering PDF streams. + * + * @param source source representing the pdf. + * @throws IOException If something went wrong. + */ + public PDFParser(RandomAccessRead source) throws IOException + { + this(source, "", ScratchFile.getMainMemoryOnlyInstance()); + } + + /** + * Constructor. + * + * @param source input representing the pdf. + * @param scratchFile use a {@link ScratchFile} for temporary storage. + * + * @throws IOException If something went wrong. + */ + public PDFParser(RandomAccessRead source, ScratchFile scratchFile) throws IOException + { + this(source, "", scratchFile); + } + + /** + * Constructor. + * Unrestricted main memory will be used for buffering PDF streams. + * + * @param source input representing the pdf. + * @param decryptionPassword password to be used for decryption. + * @throws IOException If something went wrong. + */ + public PDFParser(RandomAccessRead source, String decryptionPassword) throws IOException + { + this(source, decryptionPassword, ScratchFile.getMainMemoryOnlyInstance()); + } + + /** + * Constructor. + * + * @param source input representing the pdf. + * @param decryptionPassword password to be used for decryption. + * @param scratchFile use a {@link ScratchFile} for temporary storage. + * + * @throws IOException If something went wrong. + */ + public PDFParser(RandomAccessRead source, String decryptionPassword, ScratchFile scratchFile) + throws IOException + { + this(source, decryptionPassword, null, null, scratchFile); + } + + /** + * Constructor. + * Unrestricted main memory will be used for buffering PDF streams. + * + * @param source input representing the pdf. + * @param decryptionPassword password to be used for decryption. + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * + * @throws IOException If something went wrong. + */ + public PDFParser(RandomAccessRead source, String decryptionPassword, InputStream keyStore, + String alias) throws IOException + { + this(source, decryptionPassword, keyStore, alias, ScratchFile.getMainMemoryOnlyInstance()); + } + + /** + * Constructor. + * + * @param source input representing the pdf. + * @param decryptionPassword password to be used for decryption. + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * @param scratchFile buffer handler for temporary storage; it will be closed on + * {@link COSDocument#close()} + * + * @throws IOException If something went wrong. + */ + public PDFParser(RandomAccessRead source, String decryptionPassword, InputStream keyStore, + String alias, ScratchFile scratchFile) throws IOException + { + super(source, decryptionPassword, keyStore, alias); + fileLen = source.length(); + init(scratchFile); + } + + private void init(ScratchFile scratchFile) throws IOException + { + String eofLookupRangeStr = System.getProperty(SYSPROP_EOFLOOKUPRANGE); + if (eofLookupRangeStr != null) + { + try + { + setEOFLookupRange(Integer.parseInt(eofLookupRangeStr)); + } + catch (NumberFormatException nfe) + { + LOG.warn("System property " + SYSPROP_EOFLOOKUPRANGE + + " does not contain an integer value, but: '" + eofLookupRangeStr + "'"); + } + } + document = new COSDocument(scratchFile); + } + + /** + * This will get the PD document that was parsed. When you are done with + * this document you must call close() on it to release resources. + * + * @return The document at the PD layer. + * + * @throws IOException If there is an error getting the document. + */ + public PDDocument getPDDocument() throws IOException + { + PDDocument doc = new PDDocument(getDocument(), source, getAccessPermission()); + doc.setEncryptionDictionary(getEncryption()); + return doc; + } + + /** + * The initial parse will first parse only the trailer, the xrefstart and all xref tables to have a pointer (offset) + * to all the pdf's objects. It can handle linearized pdfs, which will have an xref at the end pointing to an xref + * at the beginning of the file. Last the root object is parsed. + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException If something went wrong. + */ + protected void initialParse() throws InvalidPasswordException, IOException + { + COSDictionary trailer = retrieveTrailer(); + + COSBase base = parseTrailerValuesDynamically(trailer); + if (!(base instanceof COSDictionary)) + { + throw new IOException("Expected root dictionary, but got this: " + base); + } + COSDictionary root = (COSDictionary) base; + // in some pdfs the type value "Catalog" is missing in the root object + if (isLenient() && !root.containsKey(COSName.TYPE)) + { + root.setItem(COSName.TYPE, COSName.CATALOG); + } + // parse all objects, starting at the root dictionary + parseDictObjects(root, (COSName[]) null); + // parse all objects of the info dictionary + COSBase infoBase = trailer.getDictionaryObject(COSName.INFO); + if (infoBase instanceof COSDictionary) + { + parseDictObjects((COSDictionary) infoBase, (COSName[]) null); + } + // check pages dictionaries + checkPages(root); + document.setDecrypted(); + initialParseDone = true; + } + + /** + * This will parse the stream and populate the COSDocument object. This will close + * the keystore stream when it is done parsing. + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException If there is an error reading from the stream or corrupt data + * is found. + */ + public void parse() throws InvalidPasswordException, IOException + { + // set to false if all is processed + boolean exceptionOccurred = true; + try + { + // PDFBOX-1922 read the version header and rewind + if (!parsePDFHeader() && !parseFDFHeader()) + { + throw new IOException( "Error: Header doesn't contain versioninfo" ); + } + + if (!initialParseDone) + { + initialParse(); + } + exceptionOccurred = false; + } + finally + { + if (exceptionOccurred && document != null) + { + IOUtils.closeQuietly(document); + document = null; + } + } + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java new file mode 100644 index 00000000000..805c2bf620c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java @@ -0,0 +1,467 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; + +/** + * This will parse a PDF byte stream and extract operands and such. + * + * @author Ben Litchfield + */ +public class PDFStreamParser extends BaseParser +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDFStreamParser.class); + + private final List streamObjects = new ArrayList<>( 100 ); + + private static final int MAX_BIN_CHAR_TEST_LENGTH = 10; + private final byte[] binCharTestArr = new byte[MAX_BIN_CHAR_TEST_LENGTH]; + + /** + * Constructor. + * + * @param stream The content stream to parse. + * @throws IOException If there is an error initializing the stream. + */ + public PDFStreamParser(InputStream stream) throws IOException + { + super(new InputStreamSource(stream)); + } + + /** + * Constructor. + * + * @param bytes the bytes to parse. + * @throws IOException If there is an error initializing the stream. + */ + public PDFStreamParser(byte[] bytes) throws IOException + { + super(new InputStreamSource(new ByteArrayInputStream(bytes))); + } + + /** + * This will parse all the tokens in the stream. This will close the stream when it is finished + * parsing. You can then access these with {@link #getTokens() getTokens()}. + * + * @throws IOException If there is an error while parsing the stream. + */ + public void parse() throws IOException + { + Object token; + while( (token = parseNextToken()) != null ) + { + streamObjects.add( token ); + } + } + + /** + * This will get the tokens that were parsed from the stream by the {@link #parse() parse()} method. + * + * @return All of the tokens in the stream. + */ + public List getTokens() + { + return streamObjects; + } + + /** + * This will parse the next token in the stream. + * + * @return The next token in the stream or null if there are no more tokens in the stream. + * + * @throws IOException If an io error occurs while parsing the stream. + */ + public Object parseNextToken() throws IOException + { + Object retval; + + skipSpaces(); + int nextByte = seqSource.peek(); + if( ((byte)nextByte) == -1 ) + { + return null; + } + char c = (char)nextByte; + switch (c) + { + case '<': + { + // pull off first left bracket + int leftBracket = seqSource.read(); + + // check for second left bracket + c = (char) seqSource.peek(); + + // put back first bracket + seqSource.unread(leftBracket); + + if (c == '<') + { + retval = parseCOSDictionary(); + } + else + { + retval = parseCOSString(); + } + break; + } + case '[': + { + // array + retval = parseCOSArray(); + break; + } + case '(': + // string + retval = parseCOSString(); + break; + case '/': + // name + retval = parseCOSName(); + break; + case 'n': + { + // null + String nullString = readString(); + if( nullString.equals( "null") ) + { + retval = COSNull.NULL; + } + else + { + retval = Operator.getOperator(nullString); + } + break; + } + case 't': + case 'f': + { + String next = readString(); + if( next.equals( "true" ) ) + { + retval = COSBoolean.TRUE; + break; + } + else if( next.equals( "false" ) ) + { + retval = COSBoolean.FALSE; + } + else + { + retval = Operator.getOperator(next); + } + break; + } + case 'R': + { + String line = readString(); + if( line.equals( "R" ) ) + { + retval = new COSObject( null ); + } + else + { + retval = Operator.getOperator(line); + } + break; + } + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + case '+': + case '.': + { + /* We will be filling buf with the rest of the number. Only + * allow 1 "." and "-" and "+" at start of number. */ + StringBuilder buf = new StringBuilder(); + buf.append( c ); + seqSource.read(); + + // Ignore double negative (this is consistent with Adobe Reader) + if (c == '-' && seqSource.peek() == c) + { + seqSource.read(); + } + + boolean dotNotRead = c != '.'; + while( Character.isDigit(c = (char) seqSource.peek()) || dotNotRead && c == '.' || c == '-') + { + if (c != '-') + { + // PDFBOX-4064: ignore "-" in the middle of a number + buf.append(c); + } + seqSource.read(); + + if (dotNotRead && c == '.') + { + dotNotRead = false; + } + } + retval = COSNumber.get( buf.toString() ); + break; + } + case 'B': + { + String next = readString(); + retval = Operator.getOperator(next); + if( next.equals( OperatorName.BEGIN_INLINE_IMAGE ) ) + { + Operator beginImageOP = (Operator)retval; + COSDictionary imageParams = new COSDictionary(); + beginImageOP.setImageParameters( imageParams ); + Object nextToken = null; + while( (nextToken = parseNextToken()) instanceof COSName ) + { + Object value = parseNextToken(); + imageParams.setItem( (COSName)nextToken, (COSBase)value ); + } + //final token will be the image data, maybe?? + if (nextToken instanceof Operator) + { + Operator imageData = (Operator) nextToken; + if (imageData.getImageData() == null || imageData.getImageData().length == 0) + { + LOG.warn("empty inline image at stream offset " + seqSource.getPosition()); + } + beginImageOP.setImageData(imageData.getImageData()); + } + } + break; + } + case 'I': + { + //Special case for ID operator + String id = "" + (char) seqSource.read() + (char) seqSource.read(); + if (!id.equals(OperatorName.BEGIN_INLINE_IMAGE_DATA)) + { + throw new IOException( "Error: Expected operator 'ID' actual='" + id + + "' at stream offset " + seqSource.getPosition()); + } + ByteArrayOutputStream imageData = new ByteArrayOutputStream(); + if( isWhitespace() ) + { + //pull off the whitespace character + seqSource.read(); + } + int lastByte = seqSource.read(); + int currentByte = seqSource.read(); + // PDF spec is kinda unclear about this. Should a whitespace + // always appear before EI? Not sure, so that we just read + // until EI. + // Be aware not all kind of whitespaces are allowed here. see PDFBOX-1561 + while( !(lastByte == 'E' && + currentByte == 'I' && + hasNextSpaceOrReturn() && + hasNoFollowingBinData(seqSource)) && + !seqSource.isEOF() ) + { + imageData.write( lastByte ); + lastByte = currentByte; + currentByte = seqSource.read(); + } + // the EI operator isn't unread, as it won't be processed anyway + retval = Operator.getOperator(OperatorName.BEGIN_INLINE_IMAGE_DATA); + // save the image data to the operator, so that it can be accessed later + ((Operator)retval).setImageData( imageData.toByteArray() ); + break; + } + case ']': + { + // some ']' around without its previous '[' + // this means a PDF is somewhat corrupt but we will continue to parse. + seqSource.read(); + + // must be a better solution than null... + retval = COSNull.NULL; + break; + } + default: + { + //we must be an operator + String operator = readOperator(); + if( operator.trim().length() == 0 ) + { + //we have a corrupt stream, stop reading here + retval = null; + } + else + { + retval = Operator.getOperator(operator); + } + } + } + return retval; + } + + /** + * Looks up an amount of bytes if they contain only ASCII characters (no + * control sequences etc.), and that these ASCII characters begin with a + * sequence of 1-3 non-blank characters between blanks + * + * @return true if next bytes are probably printable ASCII + * characters starting with a PDF operator, otherwise false + */ + private boolean hasNoFollowingBinData(SequentialSource pdfSource) throws IOException + { + // as suggested in PDFBOX-1164 + final int readBytes = pdfSource.read(binCharTestArr, 0, MAX_BIN_CHAR_TEST_LENGTH); + boolean noBinData = true; + int startOpIdx = -1; + int endOpIdx = -1; + + if (readBytes > 0) + { + for (int bIdx = 0; bIdx < readBytes; bIdx++) + { + final byte b = binCharTestArr[bIdx]; + if (b != 0 && b < 0x09 || b > 0x0a && b < 0x20 && b != 0x0d) + { + // control character or > 0x7f -> we have binary data + noBinData = false; + break; + } + // find the start of a PDF operator + if (startOpIdx == -1 && !(b == 0 || b == 9 || b == 0x20 || b == 0x0a || b == 0x0d)) + { + startOpIdx = bIdx; + } + else if (startOpIdx != -1 && endOpIdx == -1 && + (b == 0 || b == 9 || b == 0x20 || b == 0x0a || b == 0x0d)) + { + endOpIdx = bIdx; + } + } + + // PDFBOX-3742: just assuming that 1-3 non blanks is a PDF operator isn't enough + if (endOpIdx != -1 && startOpIdx != -1) + { + // usually, the operator here is Q, sometimes EMC (PDFBOX-2376), S (PDFBOX-3784). + String s = new String(binCharTestArr, startOpIdx, endOpIdx - startOpIdx); + if (!"Q".equals(s) && !"EMC".equals(s) && !"S".equals(s)) + { + noBinData = false; + } + } + + // only if not close to eof + if (readBytes == MAX_BIN_CHAR_TEST_LENGTH) + { + // a PDF operator is 1-3 bytes long + if (startOpIdx != -1 && endOpIdx == -1) + { + endOpIdx = MAX_BIN_CHAR_TEST_LENGTH; + } + if (endOpIdx != -1 && startOpIdx != -1 && endOpIdx - startOpIdx > 3) + { + noBinData = false; + } + } + pdfSource.unread(binCharTestArr, 0, readBytes); + } + if (!noBinData) + { + LOG.warn("ignoring 'EI' assumed to be in the middle of inline image at stream offset " + + pdfSource.getPosition()); + } + return noBinData; + } + + /** + * This will read an operator from the stream. + * + * @return The operator that was read from the stream. + * + * @throws IOException If there is an error reading from the stream. + */ + protected String readOperator() throws IOException + { + skipSpaces(); + + //average string size is around 2 and the normal string buffer size is + //about 16 so lets save some space. + StringBuilder buffer = new StringBuilder(4); + int nextChar = seqSource.peek(); + while( + nextChar != -1 && // EOF + !isWhitespace(nextChar) && + !isClosing(nextChar) && + nextChar != '[' && + nextChar != '<' && + nextChar != '(' && + nextChar != '/' && + (nextChar < '0' || + nextChar > '9' ) ) + { + char currentChar = (char) seqSource.read(); + nextChar = seqSource.peek(); + buffer.append( currentChar ); + // Type3 Glyph description has operators with a number in the name + if (currentChar == 'd' && (nextChar == '0' || nextChar == '1') ) + { + buffer.append( (char) seqSource.read() ); + nextChar = seqSource.peek(); + } + } + return buffer.toString(); + } + + + private boolean isSpaceOrReturn( int c ) + { + return c == 10 || c == 13 || c == 32; + } + + /** + * Checks if the next char is a space or a return. + * + * @return true if the next char is a space or a return + * @throws IOException if something went wrong + */ + private boolean hasNextSpaceOrReturn() throws IOException + { + return isSpaceOrReturn( seqSource.peek() ); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRef.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRef.java new file mode 100644 index 00000000000..582317d12a0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRef.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import org.apache.pdfbox.cos.COSObject; + +/** + * @author Alexander Funk + */ +public interface PDFXRef +{ + + /** + * Returns the object referenced by the given object number. + * + * @param objectNumber the object to be returned + * @return the object corresponding to the given object number + */ + + COSObject getObject(int objectNumber); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java new file mode 100644 index 00000000000..d408dc8ad0b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java @@ -0,0 +1,358 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdfwriter.COSWriterXRefEntry; + +/** + * @author Alexander Funk + */ +public class PDFXRefStream implements PDFXRef +{ + + private static final int ENTRY_OBJSTREAM = 2; + + private static final int ENTRY_NORMAL = 1; + + private static final int ENTRY_FREE = 0; + + private final Map streamData; + + private final Set objectNumbers; + + private final COSStream stream; + + private long size = -1; + + /** + * Create a fresh XRef stream like for a fresh file or an incremental update. + * + * @param cosDocument + */ + public PDFXRefStream(COSDocument cosDocument) + { + stream = cosDocument.createCOSStream(); + streamData = new TreeMap<>(); + objectNumbers = new TreeSet<>(); + } + + /** + * Returns the stream of the XRef. + * @return the XRef stream + * @throws IOException if something went wrong + */ + public COSStream getStream() throws IOException + { + stream.setItem(COSName.TYPE, COSName.XREF); + if (size == -1) + { + throw new IllegalArgumentException("size is not set in xrefstream"); + } + stream.setLong(COSName.SIZE, size); + + List indexEntry = getIndexEntry(); + COSArray indexAsArray = new COSArray(); + for ( Long i : indexEntry ) + { + indexAsArray.add(COSInteger.get(i)); + } + stream.setItem(COSName.INDEX, indexAsArray); + + int[] wEntry = getWEntry(); + COSArray wAsArray = new COSArray(); + for (int j : wEntry) + { + wAsArray.add(COSInteger.get(j)); + } + stream.setItem(COSName.W, wAsArray); + + try (OutputStream outputStream = this.stream.createOutputStream(COSName.FLATE_DECODE)) + { + writeStreamData(outputStream, wEntry); + outputStream.flush(); + } + + Set keySet = this.stream.keySet(); + for ( COSName cosName : keySet ) + { + // "Other cross-reference stream entries not listed in Table 17 may be indirect; in fact, + // some (such as Root in Table 15) shall be indirect." + if (COSName.ROOT.equals(cosName) || COSName.INFO.equals(cosName) || COSName.PREV.equals(cosName)) + { + continue; + } + // this one too, because it has already been written in COSWriter.doWriteBody() + if (COSName.ENCRYPT.equals(cosName)) + { + continue; + } + COSBase dictionaryObject = this.stream.getDictionaryObject(cosName); + dictionaryObject.setDirect(true); + } + return this.stream; + } + + /** + * Copy all Trailer Information to this file. + * + * @param trailerDict dictionary to be added as trailer info + */ + public void addTrailerInfo(COSDictionary trailerDict) + { + Set> entrySet = trailerDict.entrySet(); + for ( Entry entry : entrySet ) + { + COSName key = entry.getKey(); + if (COSName.INFO.equals(key) || COSName.ROOT.equals(key) || COSName.ENCRYPT.equals(key) + || COSName.ID.equals(key) || COSName.PREV.equals(key)) + { + stream.setItem(key, entry.getValue()); + } + } + } + + /** + * Add an new entry to the XRef stream. + * + * @param entry new entry to be added + */ + public void addEntry(COSWriterXRefEntry entry) + { + objectNumbers.add(entry.getKey().getNumber()); + if (entry.isFree()) + { + // what would be a f-Entry in the xref table + FreeReference value = new FreeReference(); + value.nextGenNumber = entry.getKey().getGeneration(); + value.nextFree = entry.getKey().getNumber(); + streamData.put(value.nextFree, value); + } + else + { + // we don't care for ObjectStreamReferences for now and only handle + // normal references that would be f-Entrys in the xref table. + NormalReference value = new NormalReference(); + value.genNumber = entry.getKey().getGeneration(); + value.offset = entry.getOffset(); + streamData.put(entry.getKey().getNumber(), value); + } + } + + /** + * determines the minimal length required for all the lengths. + * + * @return the length information + */ + private int[] getWEntry() + { + long[] wMax = new long[3]; + for ( Object entry : streamData.values() ) + { + if (entry instanceof FreeReference) + { + FreeReference free = (FreeReference)entry; + wMax[0] = Math.max(wMax[0], ENTRY_FREE); // the type field for a free reference + wMax[1] = Math.max(wMax[1], free.nextFree); + wMax[2] = Math.max(wMax[2], free.nextGenNumber); + } + else if (entry instanceof NormalReference) + { + NormalReference ref = (NormalReference)entry; + wMax[0] = Math.max(wMax[0], ENTRY_NORMAL); // the type field for a normal reference + wMax[1] = Math.max(wMax[1], ref.offset); + wMax[2] = Math.max(wMax[2], ref.genNumber); + } + else if (entry instanceof ObjectStreamReference) + { + ObjectStreamReference objStream = (ObjectStreamReference)entry; + wMax[0] = Math.max(wMax[0], ENTRY_OBJSTREAM); // the type field for a objstm reference + wMax[1] = Math.max(wMax[1], objStream.offset); + wMax[2] = Math.max(wMax[2], objStream.objectNumberOfObjectStream); + } + // TODO add here if new standard versions define new types + else + { + throw new RuntimeException("unexpected reference type"); + } + } + // find the max bytes needed to display that column + int[] w = new int[3]; + for ( int i = 0; i < w.length; i++ ) + { + while (wMax[i] > 0) + { + w[i]++; + wMax[i] >>= 8; + } + } + return w; + } + + /** + * Set the size of the XRef stream. + * + * @param streamSize size to bet set as stream size + */ + public void setSize(long streamSize) + { + this.size = streamSize; + } + + private List getIndexEntry() + { + LinkedList linkedList = new LinkedList<>(); + Long first = null; + Long length = null; + Set objNumbers = new TreeSet<>(); + // add object number 0 to the set + objNumbers.add(0L); + objNumbers.addAll(objectNumbers); + for ( Long objNumber : objNumbers ) + { + if (first == null) + { + first = objNumber; + length = 1L; + } + if (first + length == objNumber) + { + length += 1; + } + if (first + length < objNumber) + { + linkedList.add(first); + linkedList.add(length); + first = objNumber; + length = 1L; + } + } + linkedList.add(first); + linkedList.add(length); + + return linkedList; + } + + private void writeNumber(OutputStream os, long number, int bytes) throws IOException + { + byte[] buffer = new byte[bytes]; + for ( int i = 0; i < bytes; i++ ) + { + buffer[i] = (byte)(number & 0xff); + number >>= 8; + } + + for ( int i = 0; i < bytes; i++ ) + { + os.write(buffer[bytes-i-1]); + } + } + + private void writeStreamData(OutputStream os, int[] w) throws IOException + { + // write dummy entry for object number 0 + writeNumber(os, ENTRY_FREE, w[0]); + writeNumber(os, ENTRY_FREE, w[1]); + writeNumber(os, 0xFFFF, w[2]); + // iterate over all streamData and write it in the required format + for ( Object entry : streamData.values() ) + { + if (entry instanceof FreeReference) + { + FreeReference free = (FreeReference)entry; + writeNumber(os, ENTRY_FREE, w[0]); + writeNumber(os, free.nextFree, w[1]); + writeNumber(os, free.nextGenNumber, w[2]); + } + else if (entry instanceof NormalReference) + { + NormalReference ref = (NormalReference)entry; + writeNumber(os, ENTRY_NORMAL, w[0]); + writeNumber(os, ref.offset, w[1]); + writeNumber(os, ref.genNumber, w[2]); + } + else if (entry instanceof ObjectStreamReference) + { + ObjectStreamReference objStream = (ObjectStreamReference)entry; + writeNumber(os, ENTRY_OBJSTREAM, w[0]); + writeNumber(os, objStream.offset, w[1]); + writeNumber(os, objStream.objectNumberOfObjectStream, w[2]); + } + // TODO add here if new standard versions define new types + else + { + throw new RuntimeException("unexpected reference type"); + } + } + } + + /** + * A class representing an object stream reference. + * + */ + static class ObjectStreamReference + { + long objectNumberOfObjectStream; + long offset; + } + + /** + * A class representing a normal reference. + * + */ + static class NormalReference + { + int genNumber; + long offset; + } + + /** + * A class representing a free reference. + * + */ + static class FreeReference + { + int nextGenNumber; + long nextFree; + } + + /** + * {@inheritDoc} + */ + @Override + public COSObject getObject(int objectNumber) + { + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java new file mode 100755 index 00000000000..bd91b652f64 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java @@ -0,0 +1,206 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSObjectKey; + +/** + * This will parse a PDF 1.5 (or better) Xref stream and + * extract the xref information from the stream. + * + * @author Justin LeFebvre + */ +public class PDFXrefStreamParser extends BaseParser +{ + private final COSStream stream; + private final XrefTrailerResolver xrefTrailerResolver; + + /** + * Constructor. + * + * @param stream The stream to parse. + * @param document The document for the current parsing. + * @param resolver resolver to read the xref/trailer information + * + * @throws IOException If there is an error initializing the stream. + */ + public PDFXrefStreamParser(COSStream stream, COSDocument document, XrefTrailerResolver resolver) + throws IOException + { + super(new InputStreamSource(stream.createInputStream())); + this.stream = stream; + this.document = document; + this.xrefTrailerResolver = resolver; + } + + /** + * Parses through the unfiltered stream and populates the xrefTable HashMap. + * @throws IOException If there is an error while parsing the stream. + */ + public void parse() throws IOException + { + COSBase w = stream.getDictionaryObject(COSName.W); + if (!(w instanceof COSArray)) + { + throw new IOException("/W array is missing in Xref stream"); + } + COSArray xrefFormat = (COSArray) w; + + COSBase base = stream.getDictionaryObject(COSName.INDEX); + COSArray indexArray; + if (base instanceof COSArray) + { + indexArray = (COSArray) base; + } + else + { + // If /Index doesn't exist, we will use the default values. + indexArray = new COSArray(); + indexArray.add(COSInteger.ZERO); + indexArray.add(COSInteger.get(stream.getInt(COSName.SIZE, 0))); + } + + List objNums = new ArrayList<>(); + + /* + * Populates objNums with all object numbers available + */ + Iterator indexIter = indexArray.iterator(); + while (indexIter.hasNext()) + { + base = indexIter.next(); + if (!(base instanceof COSInteger)) + { + throw new IOException("Xref stream must have integer in /Index array"); + } + long objID = ((COSInteger) base).longValue(); + if (!indexIter.hasNext()) + { + break; + } + base = indexIter.next(); + if (!(base instanceof COSInteger)) + { + throw new IOException("Xref stream must have integer in /Index array"); + } + int size = ((COSInteger) base).intValue(); + for (int i = 0; i < size; i++) + { + objNums.add(objID + i); + } + } + Iterator objIter = objNums.iterator(); + /* + * Calculating the size of the line in bytes + */ + int w0 = xrefFormat.getInt(0, 0); + int w1 = xrefFormat.getInt(1, 0); + int w2 = xrefFormat.getInt(2, 0); + int lineSize = w0 + w1 + w2; + + while(!seqSource.isEOF() && objIter.hasNext()) + { + byte[] currLine = new byte[lineSize]; + seqSource.read(currLine); + + int type; + if (w0 == 0) + { + // "If the first element is zero, + // the type field shall not be present, and shall default to type 1" + type = 1; + } + else + { + type = 0; + /* + * Grabs the number of bytes specified for the first column in + * the W array and stores it. + */ + for (int i = 0; i < w0; i++) + { + type += (currLine[i] & 0x00ff) << ((w0 - i - 1) * 8); + } + } + //Need to remember the current objID + Long objID = objIter.next(); + /* + * 3 different types of entries. + */ + switch(type) + { + case 0: + /* + * Skipping free objects + */ + break; + case 1: + int offset = 0; + for(int i = 0; i < w1; i++) + { + offset += (currLine[i + w0] & 0x00ff) << ((w1 - i - 1) * 8); + } + int genNum = 0; + for(int i = 0; i < w2; i++) + { + genNum += (currLine[i + w0 + w1] & 0x00ff) << ((w2 - i - 1) * 8); + } + COSObjectKey objKey = new COSObjectKey(objID, genNum); + xrefTrailerResolver.setXRef(objKey, offset); + break; + case 2: + /* + * object stored in object stream: + * 2nd argument is object number of object stream + * 3rd argument is index of object within object stream + * + * For sequential PDFParser we do not need this information + * because + * These objects are handled by the dereferenceObjects() method + * since they're only pointing to object numbers + * + * However for XRef aware parsers we have to know which objects contain + * object streams. We will store this information in normal xref mapping + * table but add object stream number with minus sign in order to + * distinguish from file offsets + */ + int objstmObjNr = 0; + for(int i = 0; i < w1; i++) + { + objstmObjNr += (currLine[i + w0] & 0x00ff) << ((w1 - i - 1) * 8); + } + objKey = new COSObjectKey( objID, 0 ); + xrefTrailerResolver.setXRef( objKey, -objstmObjNr ); + break; + default: + break; + } + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java new file mode 100644 index 00000000000..23c90bf198f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; +import org.apache.pdfbox.io.RandomAccessRead; + +/** + * A SequentialSource backed by a RandomAccessRead. + */ +final class RandomAccessSource implements SequentialSource +{ + private final RandomAccessRead reader; + + /** + * Constructor. + * + * @param reader The random access reader to wrap. + */ + RandomAccessSource(RandomAccessRead reader) + { + this.reader = reader; + } + + @Override + public int read() throws IOException + { + return reader.read(); + } + + @Override + public int read(byte[] b) throws IOException + { + return reader.read(b); + } + + @Override + public int read(byte[] b, int offset, int length) throws IOException + { + return reader.read(b, offset, length); + } + + @Override + public long getPosition() throws IOException + { + return reader.getPosition(); + } + + @Override + public int peek() throws IOException + { + return reader.peek(); + } + + @Override + public void unread(int b) throws IOException + { + reader.rewind(1); + } + + @Override + public void unread(byte[] bytes) throws IOException + { + reader.rewind(bytes.length); + } + + @Override + public void unread(byte[] bytes, int start, int len) throws IOException + { + reader.rewind(len - start); + } + + @Override + public byte[] readFully(int length) throws IOException + { + return reader.readFully(length); + } + + @Override + public boolean isEOF() throws IOException + { + return reader.isEOF(); + } + + @Override + public void close() throws IOException + { + reader.close(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java new file mode 100644 index 00000000000..5d8367a80d1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdfparser; + +import java.io.Closeable; +import java.io.IOException; + +/** + * A SequentialSource provides access to sequential data for parsing. + */ +interface SequentialSource extends Closeable +{ + /** + * Read a single byte of data. + * + * @return The byte of data that is being read. + * @throws IOException If there is an error while reading the data. + */ + int read() throws IOException; + + /** + * Read a buffer of data. + * + * @param b The buffer to write the data to. + * @return The number of bytes that were actually read. + * @throws IOException If there was an error while reading the data. + */ + int read(byte[] b) throws IOException; + + /** + * Read a buffer of data. + * + * @param b The buffer to write the data to. + * @param offset Offset into the buffer to start writing. + * @param length The amount of data to attempt to read. + * @return The number of bytes that were actually read. + * @throws IOException If there was an error while reading the data. + */ + int read(byte[] b, int offset, int length) throws IOException; + + /** + * Returns offset of next byte to be returned by a read method. + * + * @return offset of next byte which will be returned with next {@link #read()} (if no more + * bytes are left it returns a value >= length of source). + * @throws IOException If there was an error while reading the data. + */ + long getPosition() throws IOException; + + /** + * This will peek at the next byte. + * + * @return The next byte on the stream, leaving it as available to read. + * @throws IOException If there is an error reading the next byte. + */ + int peek() throws IOException; + + /** + * Unreads a single byte. + * + * @param b byte array to push back + * @throws IOException if there is an error while unreading + */ + void unread(int b) throws IOException; + + /** + * Unreads an array of bytes. + * + * @param bytes byte array to be unread + * @throws IOException if there is an error while unreading + */ + void unread(byte[] bytes) throws IOException; + + /** + * Unreads a portion of an array of bytes. + * + * @param bytes byte array to be unread + * @param start start index + * @param len number of bytes to be unread + * @throws IOException if there is an error while unreading + */ + void unread(byte[] bytes, int start, int len) throws IOException; + + /** + * Reads a given number of bytes in its entirety. + * + * @param length the number of bytes to be read + * @return a byte array containing the bytes just read + * @throws IOException if an I/O error occurs while reading data + */ + byte[] readFully(int length) throws IOException; + + /** + * Returns true if the end of the data source has been reached. + * + * @return true if we are at the end of the data. + * @throws IOException If there is an error reading the next byte. + */ + boolean isEOF() throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java new file mode 100644 index 00000000000..77cab3239ce --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java @@ -0,0 +1,368 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObjectKey; + +/** + * This class will collect all XRef/trailer objects and creates correct + * xref/trailer information after all objects are read using startxref + * and 'Prev' information (unused XRef/trailer objects are discarded). + * + * In case of missing startxref or wrong startxref pointer all + * XRef/trailer objects are used to create xref table / trailer dictionary + * in order they occur. + * + * For each new xref object/XRef stream method {@link #nextXrefObj(long, XRefType)} + * must be called with start byte position. All following calls to + * {@link #setXRef(COSObjectKey, long)} or {@link #setTrailer(COSDictionary)} + * will add the data for this byte position. + * + * After all objects are parsed the startxref position must be provided + * using {@link #setStartxref(long)}. This is used to build the chain of + * active xref/trailer objects used for creating document trailer and xref table. + * + * @author Timo Böhme + */ +public class XrefTrailerResolver +{ + + /** + * A class which represents a xref/trailer object. + */ + private static class XrefTrailerObj + { + protected COSDictionary trailer = null; + + private XRefType xrefType; + + private final Map xrefTable = new HashMap<>(); + + /** + * Default constructor. + */ + private XrefTrailerObj() + { + xrefType = XRefType.TABLE; + } + + public void reset() + { + xrefTable.clear(); + } + } + + /** + * The XRefType of a trailer. + */ + public enum XRefType + { + /** + * XRef table type. + */ + TABLE, + /** + * XRef stream type. + */ + STREAM + } + + private final Map bytePosToXrefMap = new HashMap<>(); + private XrefTrailerObj curXrefTrailerObj = null; + private XrefTrailerObj resolvedXrefTrailer = null; + + /** Log instance. */ + private static final Log LOG = LogFactory.getLog( XrefTrailerResolver.class ); + + /** + * Returns the first trailer if at least one exists. + * + * @return the first trailer or null + */ + public final COSDictionary getFirstTrailer() + { + if (bytePosToXrefMap.isEmpty()) + { + return null; + } + Set offsets = bytePosToXrefMap.keySet(); + SortedSet sortedOffset = new TreeSet<>(offsets); + return bytePosToXrefMap.get(sortedOffset.first()).trailer; + } + + /** + * Returns the last trailer if at least one exists. + * + * @return the last trailer ir null + */ + public final COSDictionary getLastTrailer() + { + if (bytePosToXrefMap.isEmpty()) + { + return null; + } + Set offsets = bytePosToXrefMap.keySet(); + SortedSet sortedOffset = new TreeSet<>(offsets); + return bytePosToXrefMap.get(sortedOffset.last()).trailer; + } + + /** + * Returns the count of trailers. + * + * @return the count of trailers. + */ + public final int getTrailerCount() + { + return bytePosToXrefMap.size(); + } + + /** + * Signals that a new XRef object (table or stream) starts. + * @param startBytePos the offset to start at + * @param type the type of the Xref object + */ + public void nextXrefObj( final long startBytePos, XRefType type ) + { + bytePosToXrefMap.put( startBytePos, curXrefTrailerObj = new XrefTrailerObj() ); + curXrefTrailerObj.xrefType = type; + } + + /** + * Returns the XRefTxpe of the resolved trailer. + * + * @return the XRefType or null. + */ + public XRefType getXrefType() + { + return ( resolvedXrefTrailer == null ) ? null : resolvedXrefTrailer.xrefType; + } + + /** + * Populate XRef HashMap of current XRef object. + * Will add an Xreftable entry that maps ObjectKeys to byte offsets in the file. + * @param objKey The objkey, with id and gen numbers + * @param offset The byte offset in this file + */ + public void setXRef( COSObjectKey objKey, long offset ) + { + if ( curXrefTrailerObj == null ) + { + // should not happen... + LOG.warn( "Cannot add XRef entry for '" + objKey.getNumber() + "' because XRef start was not signalled." ); + return; + } + // PDFBOX-3506 check before adding to the map, to avoid entries from the table being + // overwritten by obsolete entries in hybrid files (/XRefStm entry) + if (!curXrefTrailerObj.xrefTable.containsKey(objKey) ) + { + curXrefTrailerObj.xrefTable.put(objKey, offset); + } + } + + /** + * Adds trailer information for current XRef object. + * + * @param trailer the current document trailer dictionary + */ + public void setTrailer( COSDictionary trailer ) + { + if ( curXrefTrailerObj == null ) + { + // should not happen... + LOG.warn( "Cannot add trailer because XRef start was not signalled." ); + return; + } + curXrefTrailerObj.trailer = trailer; + } + + /** + * Returns the trailer last set by {@link #setTrailer(COSDictionary)}. + * + * @return the current trailer. + * + */ + public COSDictionary getCurrentTrailer() + { + return curXrefTrailerObj.trailer; + } + + /** + * Sets the byte position of the first XRef + * (has to be called after very last startxref was read). + * This is used to resolve chain of active XRef/trailer. + * + * In case startxref position is not found we output a + * warning and use all XRef/trailer objects combined + * in byte position order. + * Thus for incomplete PDF documents with missing + * startxref one could call this method with parameter value -1. + * + * @param startxrefBytePosValue starting position of the first XRef + * + */ + public void setStartxref( long startxrefBytePosValue ) + { + if ( resolvedXrefTrailer != null ) + { + LOG.warn( "Method must be called only ones with last startxref value." ); + return; + } + + resolvedXrefTrailer = new XrefTrailerObj(); + resolvedXrefTrailer.trailer = new COSDictionary(); + + XrefTrailerObj curObj = bytePosToXrefMap.get( startxrefBytePosValue ); + List xrefSeqBytePos = new ArrayList<>(); + + if ( curObj == null ) + { + // no XRef at given position + LOG.warn( "Did not found XRef object at specified startxref position " + startxrefBytePosValue ); + + // use all objects in byte position order (last entries overwrite previous ones) + xrefSeqBytePos.addAll( bytePosToXrefMap.keySet() ); + Collections.sort( xrefSeqBytePos ); + } + else + { + // copy xref type + resolvedXrefTrailer.xrefType = curObj.xrefType; + // found starting Xref object + // add this and follow chain defined by 'Prev' keys + xrefSeqBytePos.add( startxrefBytePosValue ); + while ( curObj.trailer != null ) + { + long prevBytePos = curObj.trailer.getLong( COSName.PREV, -1L ); + if ( prevBytePos == -1 ) + { + break; + } + + curObj = bytePosToXrefMap.get( prevBytePos ); + if ( curObj == null ) + { + LOG.warn( "Did not found XRef object pointed to by 'Prev' key at position " + prevBytePos ); + break; + } + xrefSeqBytePos.add( prevBytePos ); + + // sanity check to prevent infinite loops + if ( xrefSeqBytePos.size() >= bytePosToXrefMap.size() ) + { + break; + } + } + // have to reverse order so that later XRefs will overwrite previous ones + Collections.reverse( xrefSeqBytePos ); + } + + // merge used and sorted XRef/trailer + for ( Long bPos : xrefSeqBytePos ) + { + curObj = bytePosToXrefMap.get( bPos ); + if ( curObj.trailer != null ) + { + resolvedXrefTrailer.trailer.addAll( curObj.trailer ); + } + resolvedXrefTrailer.xrefTable.putAll( curObj.xrefTable ); + } + + } + + /** + * Gets the resolved trailer. Might return null in case + * {@link #setStartxref(long)} was not called before. + * + * @return the trailer if available + */ + public COSDictionary getTrailer() + { + return ( resolvedXrefTrailer == null ) ? null : resolvedXrefTrailer.trailer; + } + + /** + * Gets the resolved xref table. Might return null in case + * {@link #setStartxref(long)} was not called before. + * + * @return the xrefTable if available + */ + public Map getXrefTable() + { + return ( resolvedXrefTrailer == null ) ? null : resolvedXrefTrailer.xrefTable; + } + + /** Returns object numbers which are referenced as contained + * in object stream with specified object number. + * + * This will scan resolved xref table for all entries having negated + * stream object number as value. + * + * @param objstmObjNr object number of object stream for which contained object numbers + * should be returned + * + * @return set of object numbers referenced for given object stream + * or null if {@link #setStartxref(long)} was not + * called before so that no resolved xref table exists + */ + public Set getContainedObjectNumbers( final int objstmObjNr ) + { + if ( resolvedXrefTrailer == null ) + { + return null; + } + final Set refObjNrs = new HashSet<>(); + final long cmpVal = - objstmObjNr; + + for ( Entry xrefEntry : resolvedXrefTrailer.xrefTable.entrySet() ) + { + if ( xrefEntry.getValue() == cmpVal ) + { + refObjNrs.add( xrefEntry.getKey().getNumber() ); + } + } + return refObjNrs; + } + + /** + * Reset all data so that it can be used to rebuild the trailer. + * + */ + protected void reset() + { + for (XrefTrailerObj trailerObj : bytePosToXrefMap.values()) + { + trailerObj.reset(); + } + curXrefTrailerObj = null; + resolvedXrefTrailer = null; + } +} diff --git a/src/org/pdfbox/pdfparser/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/package.html similarity index 100% rename from src/org/pdfbox/pdfparser/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdfparser/package.html diff --git a/src/org/pdfbox/pdfwriter/COSStandardOutputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSStandardOutputStream.java similarity index 81% rename from src/org/pdfbox/pdfwriter/COSStandardOutputStream.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSStandardOutputStream.java index afe3d8f7d5b..1ff37cc45ef 100644 --- a/src/org/pdfbox/pdfwriter/COSStandardOutputStream.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSStandardOutputStream.java @@ -14,46 +14,42 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdfwriter; - - +package org.apache.pdfbox.pdfwriter; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; /** - * simple output stream with some minor features for generating "pretty" - * pdf files. + * simple output stream with some minor features for generating "pretty" PDF files. * * @author Michael Traut - * @version $Revision: 1.5 $ */ public class COSStandardOutputStream extends FilterOutputStream { - /** * To be used when 2 byte sequence is enforced. */ - public static final byte[] CRLF = "\r\n".getBytes(); + public static final byte[] CRLF = { '\r', '\n' }; /** * Line feed character. */ - public static final byte[] LF = "\n".getBytes(); + public static final byte[] LF = { '\n' }; /** - * standard line separator on this platform. + * standard line separator. */ - public static final byte[] EOL = System.getProperty("line.separator").getBytes(); + public static final byte[] EOL = { '\n' }; + + // current byte position in the output stream + private long position = 0; - // current byte pos in the output stream - private long pos = 0; // flag to prevent generating two newlines in sequence private boolean onNewLine = false; - + /** - * COSOutputStream constructor comment. + * Constructor. * * @param out The underlying stream to write to. */ @@ -61,6 +57,19 @@ public COSStandardOutputStream(OutputStream out) { super(out); } + + /** + * Constructor. + * + * @param out The underlying stream to write to. + * @param position The current position of output stream. + */ + public COSStandardOutputStream(OutputStream out, long position) + { + super(out); + this.position = position; + } + /** * This will get the current position in the stream. * @@ -68,10 +77,11 @@ public COSStandardOutputStream(OutputStream out) */ public long getPos() { - return pos; + return position; } + /** - * This will tell if we are on a newling. + * This will tell if we are on a newline. * * @return true If we are on a newline. */ @@ -98,11 +108,12 @@ public void setOnNewLine(boolean newOnNewLine) * * @throws IOException If the underlying stream throws an exception. */ + @Override public void write(byte[] b, int off, int len) throws IOException { setOnNewLine(false); out.write(b, off, len); - pos += len; + position += len; } /** @@ -112,13 +123,14 @@ public void write(byte[] b, int off, int len) throws IOException * * @throws IOException If there is an error writing to the underlying stream. */ + @Override public void write(int b) throws IOException { setOnNewLine(false); out.write(b); - pos++; + position++; } - + /** * This will write a CRLF to the stream. * @@ -127,7 +139,6 @@ public void write(int b) throws IOException public void writeCRLF() throws IOException { write(CRLF); - // setOnNewLine(true); } /** @@ -152,6 +163,5 @@ public void writeEOL() throws IOException public void writeLF() throws IOException { write(LF); - // setOnNewLine(true); } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java new file mode 100644 index 00000000000..0cdff4904b0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java @@ -0,0 +1,1477 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfwriter; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.SequenceInputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSObjectKey; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.cos.COSUpdateInfo; +import org.apache.pdfbox.cos.ICOSVisitor; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.RandomAccessInputStream; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.pdfparser.PDFXRefStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.encryption.SecurityHandler; +import org.apache.pdfbox.pdmodel.fdf.FDFDocument; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.COSFilterInputStream; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Hex; + +/** + * This class acts on a in-memory representation of a PDF document. + * + * @author Michael Traut + * @author Ben Litchfield + */ +public class COSWriter implements ICOSVisitor, Closeable +{ + /** + * The dictionary open token. + */ + public static final byte[] DICT_OPEN = "<<".getBytes(Charsets.US_ASCII); + /** + * The dictionary close token. + */ + public static final byte[] DICT_CLOSE = ">>".getBytes(Charsets.US_ASCII); + /** + * space character. + */ + public static final byte[] SPACE = { ' ' }; + /** + * The start to a PDF comment. + */ + public static final byte[] COMMENT = { '%' }; + + /** + * The output version of the PDF. + */ + public static final byte[] VERSION = "PDF-1.4".getBytes(Charsets.US_ASCII); + /** + * Garbage bytes used to create the PDF header. + */ + public static final byte[] GARBAGE = new byte[] {(byte)0xf6, (byte)0xe4, (byte)0xfc, (byte)0xdf}; + /** + * The EOF constant. + */ + public static final byte[] EOF = "%%EOF".getBytes(Charsets.US_ASCII); + // pdf tokens + + /** + * The reference token. + */ + public static final byte[] REFERENCE = "R".getBytes(Charsets.US_ASCII); + /** + * The XREF token. + */ + public static final byte[] XREF = "xref".getBytes(Charsets.US_ASCII); + /** + * The xref free token. + */ + public static final byte[] XREF_FREE = "f".getBytes(Charsets.US_ASCII); + /** + * The xref used token. + */ + public static final byte[] XREF_USED = "n".getBytes(Charsets.US_ASCII); + /** + * The trailer token. + */ + public static final byte[] TRAILER = "trailer".getBytes(Charsets.US_ASCII); + /** + * The start xref token. + */ + public static final byte[] STARTXREF = "startxref".getBytes(Charsets.US_ASCII); + /** + * The starting object token. + */ + public static final byte[] OBJ = "obj".getBytes(Charsets.US_ASCII); + /** + * The end object token. + */ + public static final byte[] ENDOBJ = "endobj".getBytes(Charsets.US_ASCII); + /** + * The array open token. + */ + public static final byte[] ARRAY_OPEN = "[".getBytes(Charsets.US_ASCII); + /** + * The array close token. + */ + public static final byte[] ARRAY_CLOSE = "]".getBytes(Charsets.US_ASCII); + /** + * The open stream token. + */ + public static final byte[] STREAM = "stream".getBytes(Charsets.US_ASCII); + /** + * The close stream token. + */ + public static final byte[] ENDSTREAM = "endstream".getBytes(Charsets.US_ASCII); + + private final NumberFormat formatXrefOffset = new DecimalFormat("0000000000", + DecimalFormatSymbols.getInstance(Locale.US)); + + // the decimal format for the xref object generation number data + private final NumberFormat formatXrefGeneration = new DecimalFormat("00000", + DecimalFormatSymbols.getInstance(Locale.US)); + + // the stream where we create the pdf output + private OutputStream output; + + // the stream used to write standard cos data + private COSStandardOutputStream standardOutput; + + // the start position of the x ref section + private long startxref = 0; + + // the current object number + private long number = 0; + + // maps the object to the keys generated in the writer + // these are used for indirect references in other objects + //A hashtable is used on purpose over a hashmap + //so that null entries will not get added. + private final Map objectKeys = new Hashtable<>(); + private final Map keyObject = new Hashtable<>(); + + // the list of x ref entries to be made so far + private final List xRefEntries = new ArrayList<>(); + private final Set objectsToWriteSet = new HashSet<>(); + + //A list of objects to write. + private final Deque objectsToWrite = new LinkedList<>(); + + //a list of objects already written + private final Set writtenObjects = new HashSet<>(); + + //An 'actual' is any COSBase that is not a COSObject. + //need to keep a list of the actuals that are added + //as well as the objects because there is a problem + //when adding a COSObject and then later adding + //the actual for that object, so we will track + //actuals separately. + private final Set actualsAdded = new HashSet<>(); + + private COSObjectKey currentObjectKey = null; + private PDDocument pdDocument = null; + private FDFDocument fdfDocument = null; + private boolean willEncrypt = false; + + // signing + private boolean incrementalUpdate = false; + private boolean reachedSignature = false; + private long signatureOffset, signatureLength; + private long byteRangeOffset, byteRangeLength; + private RandomAccessRead incrementalInput; + private OutputStream incrementalOutput; + private SignatureInterface signatureInterface; + private byte[] incrementPart; + private COSArray byteRangeArray; + + /** + * COSWriter constructor. + * + * @param outputStream The output stream to write the PDF. It will be closed when this object is + * closed. + */ + public COSWriter(OutputStream outputStream) + { + setOutput(outputStream); + setStandardOutput(new COSStandardOutputStream(output)); + } + + /** + * COSWriter constructor for incremental updates. There must be a path of objects that have + * {@link COSUpdateInfo#isNeedToBeUpdated()} set, starting from the document catalog. For + * signatures this is taken care by PDFBox itself. + * + * @param outputStream output stream where the new PDF data will be written. It will be closed + * when this object is closed. + * @param inputData random access read containing source PDF data + * + * @throws IOException if something went wrong + */ + public COSWriter(OutputStream outputStream, RandomAccessRead inputData) throws IOException + { + // write to buffer instead of output + setOutput(new ByteArrayOutputStream()); + setStandardOutput(new COSStandardOutputStream(output, inputData.length())); + + incrementalInput = inputData; + incrementalOutput = outputStream; + incrementalUpdate = true; + } + + private void prepareIncrement(PDDocument doc) + { + if (doc != null) + { + COSDocument cosDoc = doc.getDocument(); + + Map xrefTable = cosDoc.getXrefTable(); + Set keySet = xrefTable.keySet(); + long highestNumber = doc.getDocument().getHighestXRefObjectNumber(); + for ( COSObjectKey cosObjectKey : keySet ) + { + COSBase object = cosDoc.getObjectFromPool(cosObjectKey).getObject(); + if (object != null && cosObjectKey!= null && !(object instanceof COSNumber)) + { + objectKeys.put(object, cosObjectKey); + keyObject.put(cosObjectKey,object); + } + + if (cosObjectKey != null) + { + long num = cosObjectKey.getNumber(); + if (num > highestNumber) + { + highestNumber = num; + } + } + } + setNumber(highestNumber); + } + } + + /** + * add an entry in the x ref table for later dump. + * + * @param entry The new entry to add. + */ + protected void addXRefEntry(COSWriterXRefEntry entry) + { + getXRefEntries().add(entry); + } + + /** + * This will close the stream. + * + * @throws IOException If the underlying stream throws an exception. + */ + @Override + public void close() throws IOException + { + if (getStandardOutput() != null) + { + getStandardOutput().close(); + } + if (incrementalOutput != null) + { + incrementalOutput.close(); + } + } + + /** + * This will get the current object number. + * + * @return The current object number. + */ + protected long getNumber() + { + return number; + } + + /** + * This will get all available object keys. + * + * @return A map of all object keys. + */ + public Map getObjectKeys() + { + return objectKeys; + } + + /** + * This will get the output stream. + * + * @return The output stream. + */ + protected java.io.OutputStream getOutput() + { + return output; + } + + /** + * This will get the standard output stream. + * + * @return The standard output stream. + */ + protected COSStandardOutputStream getStandardOutput() + { + return standardOutput; + } + + /** + * This will get the current start xref. + * + * @return The current start xref. + */ + protected long getStartxref() + { + return startxref; + } + /** + * This will get the xref entries. + * + * @return All available xref entries. + */ + protected List getXRefEntries() + { + return xRefEntries; + } + + /** + * This will set the current object number. + * + * @param newNumber The new object number. + */ + protected void setNumber(long newNumber) + { + number = newNumber; + } + + /** + * This will set the output stream. + * + * @param newOutput The new output stream. + */ + private void setOutput( OutputStream newOutput ) + { + output = newOutput; + } + + /** + * This will set the standard output stream. + * + * @param newStandardOutput The new standard output stream. + */ + private void setStandardOutput(COSStandardOutputStream newStandardOutput) + { + standardOutput = newStandardOutput; + } + + /** + * This will set the start xref. + * + * @param newStartxref The new start xref attribute. + */ + protected void setStartxref(long newStartxref) + { + startxref = newStartxref; + } + + /** + * This will write the body of the document. + * + * @param doc The document to write the body for. + * + * @throws IOException If there is an error writing the data. + */ + protected void doWriteBody(COSDocument doc) throws IOException + { + COSDictionary trailer = doc.getTrailer(); + COSDictionary root = trailer.getCOSDictionary(COSName.ROOT); + COSDictionary info = trailer.getCOSDictionary(COSName.INFO); + COSDictionary encrypt = trailer.getCOSDictionary(COSName.ENCRYPT); + if( root != null ) + { + addObjectToWrite( root ); + } + if( info != null ) + { + addObjectToWrite( info ); + } + + doWriteObjects(); + willEncrypt = false; + if( encrypt != null ) + { + addObjectToWrite( encrypt ); + } + + doWriteObjects(); + } + + private void doWriteObjects() throws IOException + { + while( objectsToWrite.size() > 0 ) + { + COSBase nextObject = objectsToWrite.removeFirst(); + objectsToWriteSet.remove(nextObject); + doWriteObject( nextObject ); + } + } + + private void addObjectToWrite( COSBase object ) + { + COSBase actual = object; + if( actual instanceof COSObject ) + { + actual = ((COSObject)actual).getObject(); + } + + if( !writtenObjects.contains( object ) && + !objectsToWriteSet.contains( object ) && + !actualsAdded.contains( actual ) ) + { + COSBase cosBase=null; + COSObjectKey cosObjectKey = null; + if(actual != null) + { + cosObjectKey= objectKeys.get(actual); + } + if(cosObjectKey!=null) + { + cosBase = keyObject.get(cosObjectKey); + } + if (actual != null && objectKeys.containsKey(actual) + && object instanceof COSUpdateInfo && !((COSUpdateInfo)object).isNeedToBeUpdated() + && cosBase instanceof COSUpdateInfo && !((COSUpdateInfo)cosBase).isNeedToBeUpdated() ) + { + return; + } + objectsToWrite.add( object ); + objectsToWriteSet.add( object ); + if( actual != null ) + { + actualsAdded.add( actual ); + } + } + } + + /** + * This will write a COS object. + * + * @param obj The object to write. + * + * @throws IOException if the output cannot be written + */ + public void doWriteObject( COSBase obj ) throws IOException + { + writtenObjects.add( obj ); + // find the physical reference + currentObjectKey = getObjectKey( obj ); + // add a x ref entry + addXRefEntry( new COSWriterXRefEntry(getStandardOutput().getPos(), obj, currentObjectKey)); + // write the object + getStandardOutput().write(String.valueOf(currentObjectKey.getNumber()).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(String.valueOf(currentObjectKey.getGeneration()).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(OBJ); + getStandardOutput().writeEOL(); + // null test added to please Sonar + // TODO: shouldn't all public methods be guarded against passing null. Passing null to most methods will + // fail with an NPE + if (obj != null) { + obj.accept( this ); + } + getStandardOutput().writeEOL(); + getStandardOutput().write(ENDOBJ); + getStandardOutput().writeEOL(); + } + + /** + * This will write the header to the PDF document. + * + * @param doc The document to get the data from. + * + * @throws IOException If there is an error writing to the stream. + */ + protected void doWriteHeader(COSDocument doc) throws IOException + { + String headerString; + if (fdfDocument != null) + { + headerString = "%FDF-"+ Float.toString(doc.getVersion()); + } + else + { + headerString = "%PDF-"+ Float.toString(doc.getVersion()); + } + getStandardOutput().write( headerString.getBytes(Charsets.ISO_8859_1) ); + + getStandardOutput().writeEOL(); + getStandardOutput().write(COMMENT); + getStandardOutput().write(GARBAGE); + getStandardOutput().writeEOL(); + } + + + /** + * This will write the trailer to the PDF document. + * + * @param doc The document to create the trailer for. + * + * @throws IOException If there is an IOError while writing the document. + */ + protected void doWriteTrailer(COSDocument doc) throws IOException + { + getStandardOutput().write(TRAILER); + getStandardOutput().writeEOL(); + + COSDictionary trailer = doc.getTrailer(); + //sort xref, needed only if object keys not regenerated + Collections.sort(getXRefEntries()); + COSWriterXRefEntry lastEntry = getXRefEntries().get( getXRefEntries().size()-1); + trailer.setLong(COSName.SIZE, lastEntry.getKey().getNumber()+1); + // Only need to stay, if an incremental update will be performed + if (!incrementalUpdate) + { + trailer.removeItem( COSName.PREV ); + } + if (!doc.isXRefStream()) + { + trailer.removeItem( COSName.XREF_STM ); + } + // Remove a checksum if present + trailer.removeItem( COSName.DOC_CHECKSUM ); + + COSArray idArray = trailer.getCOSArray(COSName.ID); + if (idArray != null) + { + idArray.setDirect(true); + } + + trailer.accept(this); + } + + private void doWriteXRefInc(COSDocument doc, long hybridPrev) throws IOException + { + if (doc.isXRefStream() || hybridPrev != -1) + { + // the file uses XrefStreams, so we need to update + // it with an xref stream. We create a new one and fill it + // with data available here + + // create a new XRefStrema object + PDFXRefStream pdfxRefStream = new PDFXRefStream(doc); + + // add all entries from the incremental update. + List xRefEntries2 = getXRefEntries(); + for ( COSWriterXRefEntry cosWriterXRefEntry : xRefEntries2 ) + { + pdfxRefStream.addEntry(cosWriterXRefEntry); + } + + COSDictionary trailer = doc.getTrailer(); + if (incrementalUpdate) + { + // use previous startXref value as new PREV value + trailer.setLong(COSName.PREV, doc.getStartXref()); + } + else + { + trailer.removeItem(COSName.PREV); + } + pdfxRefStream.addTrailerInfo(trailer); + // the size is the highest object number+1. we add one more + // for the xref stream object we are going to write + pdfxRefStream.setSize(getNumber() + 2); + + setStartxref(getStandardOutput().getPos()); + COSStream stream2 = pdfxRefStream.getStream(); + doWriteObject(stream2); + } + + if (!doc.isXRefStream() || hybridPrev != -1) + { + COSDictionary trailer = doc.getTrailer(); + trailer.setLong(COSName.PREV, doc.getStartXref()); + if (hybridPrev != -1) + { + COSName xrefStm = COSName.XREF_STM; + trailer.removeItem(xrefStm); + trailer.setLong(xrefStm, getStartxref()); + } + doWriteXRefTable(); + doWriteTrailer(doc); + } + } + + // writes the "xref" table + private void doWriteXRefTable() throws IOException + { + addXRefEntry(COSWriterXRefEntry.getNullEntry()); + + // sort xref, needed only if object keys not regenerated + Collections.sort(getXRefEntries()); + + // remember the position where x ref was written + setStartxref(getStandardOutput().getPos()); + + getStandardOutput().write(XREF); + getStandardOutput().writeEOL(); + // write start object number and object count for this x ref section + // we assume starting from scratch + + Long[] xRefRanges = getXRefRanges(getXRefEntries()); + int xRefLength = xRefRanges.length; + int x = 0; + int j = 0; + while (x < xRefLength && (xRefLength % 2) == 0) + { + writeXrefRange(xRefRanges[x], xRefRanges[x + 1]); + + for (int i = 0; i < xRefRanges[x + 1]; ++i) + { + writeXrefEntry(xRefEntries.get(j++)); + } + x += 2; + } + } + + /** + * Write an incremental update for a non signature case. This can be used for e.g. augmenting + * signatures. + * + * @throws IOException + */ + private void doWriteIncrement() throws IOException + { + // write existing PDF + IOUtils.copy(new RandomAccessInputStream(incrementalInput), incrementalOutput); + // write the actual incremental update + incrementalOutput.write(((ByteArrayOutputStream) output).toByteArray()); + } + + private void doWriteSignature() throws IOException + { + // calculate the ByteRange values + long inLength = incrementalInput.length(); + long beforeLength = signatureOffset; + long afterOffset = signatureOffset + signatureLength; + long afterLength = getStandardOutput().getPos() - (inLength + signatureLength) - (signatureOffset - inLength); + + String byteRange = "0 " + beforeLength + " " + afterOffset + " " + afterLength + "]"; + + // Assign the values to the actual COSArray, so that the user can access it before closing + byteRangeArray.set(0, COSInteger.ZERO); + byteRangeArray.set(1, COSInteger.get(beforeLength)); + byteRangeArray.set(2, COSInteger.get(afterOffset)); + byteRangeArray.set(3, COSInteger.get(afterLength)); + + if (byteRange.length() > byteRangeLength) + { + throw new IOException("Can't write new byteRange '" + byteRange + + "' not enough space: byteRange.length(): " + byteRange.length() + + ", byteRangeLength: " + byteRangeLength); + } + + // copy the new incremental data into a buffer (e.g. signature dict, trailer) + ByteArrayOutputStream byteOut = (ByteArrayOutputStream) output; + byteOut.flush(); + incrementPart = byteOut.toByteArray(); + + // overwrite the ByteRange in the buffer + byte[] byteRangeBytes = byteRange.getBytes(Charsets.ISO_8859_1); + for (int i = 0; i < byteRangeLength; i++) + { + if (i >= byteRangeBytes.length) + { + incrementPart[(int) (byteRangeOffset + i - inLength)] = 0x20; // SPACE + } + else + { + incrementPart[(int) (byteRangeOffset + i - inLength)] = byteRangeBytes[i]; + } + } + + if (signatureInterface != null) + { + // data to be signed + final InputStream dataToSign = getDataToSign(); + + // sign the bytes + byte[] signatureBytes = signatureInterface.sign(dataToSign); + writeExternalSignature(signatureBytes); + } + // else signature should created externally and set via writeSignature() + } + + /** + * Return the stream of PDF data to be signed. Clients should use this method only to create + * signatures externally. {@link #write(PDDocument)} method should have been called prior. The + * created signature should be set using {@link #writeExternalSignature(byte[])}. + *

+ * When {@link SignatureInterface} instance is used, COSWriter obtains and writes the signature + * itself. + *

+ * + * @return data stream to be signed + * @throws IllegalStateException if PDF is not prepared for external signing + * @throws IOException if input data is closed + */ + public InputStream getDataToSign() throws IOException + { + if (incrementPart == null || incrementalInput == null) + { + throw new IllegalStateException("PDF not prepared for signing"); + } + // range of incremental bytes to be signed (includes /ByteRange but not /Contents) + int incPartSigOffset = (int) (signatureOffset - incrementalInput.length()); + int afterSigOffset = incPartSigOffset + (int) signatureLength; + int[] range = + { + 0, incPartSigOffset, + afterSigOffset, incrementPart.length - afterSigOffset + }; + + return new SequenceInputStream( + new RandomAccessInputStream(incrementalInput), + new COSFilterInputStream(incrementPart, range)); + } + + /** + * Write externally created signature of PDF data obtained via {@link #getDataToSign()} method. + * + * @param cmsSignature CMS signature byte array + * @throws IllegalStateException if PDF is not prepared for external signing + * @throws IOException if source data stream is closed + */ + public void writeExternalSignature(byte[] cmsSignature) throws IOException + { + + if (incrementPart == null || incrementalInput == null) + { + throw new IllegalStateException("PDF not prepared for setting signature"); + } + byte[] signatureBytes = Hex.getBytes(cmsSignature); + + // substract 2 bytes because of the enclosing "<>" + if (signatureBytes.length > signatureLength - 2) + { + throw new IOException("Can't write signature, not enough space"); + } + + // overwrite the signature Contents in the buffer + int incPartSigOffset = (int) (signatureOffset - incrementalInput.length()); + System.arraycopy(signatureBytes, 0, incrementPart, incPartSigOffset + 1, signatureBytes.length); + + // write the data to the incremental output stream + IOUtils.copy(new RandomAccessInputStream(incrementalInput), incrementalOutput); + incrementalOutput.write(incrementPart); + + // prevent further use + incrementPart = null; + } + + private void writeXrefRange(long x, long y) throws IOException + { + getStandardOutput().write(String.valueOf(x).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(String.valueOf(y).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().writeEOL(); + } + + private void writeXrefEntry(COSWriterXRefEntry entry) throws IOException + { + String offset = formatXrefOffset.format(entry.getOffset()); + String generation = formatXrefGeneration.format(entry.getKey().getGeneration()); + getStandardOutput().write(offset.getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(generation.getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(entry.isFree() ? XREF_FREE : XREF_USED); + getStandardOutput().writeCRLF(); + } + + /** + * check the xref entries and write out the ranges. The format of the + * returned array is exactly the same as the pdf specification. See section + * 7.5.4 of ISO32000-1:2008, example 1 (page 40) for reference. + *

+ * example: 0 1 2 5 6 7 8 10 + *

+ * will create a array with follow ranges + *

+ * 0 3 5 4 10 1 + *

+ * this mean that the element 0 is followed by two other related numbers + * that represent a cluster of the size 3. 5 is follow by three other + * related numbers and create a cluster of size 4. etc. + * + * @param xRefEntriesList list with the xRef entries that was written + * @return a integer array with the ranges + */ + protected Long[] getXRefRanges(List xRefEntriesList) + { + long last = -2; + long count = 1; + + List list = new ArrayList<>(); + for( Object object : xRefEntriesList ) + { + long nr = (int) ((COSWriterXRefEntry) object).getKey().getNumber(); + if (nr == last + 1) + { + ++count; + last = nr; + } + else if (last == -2) + { + last = nr; + } + else + { + list.add(last - count + 1); + list.add(count); + last = nr; + count = 1; + } + } + // If no new entry is found, we need to write out the last result + if(xRefEntriesList.size() > 0) + { + list.add(last - count + 1); + list.add(count); + } + return list.toArray(new Long[list.size()]); + } + + /** + * This will get the object key for the object. + * + * @param obj The object to get the key for. + * + * @return The object key for the object. + */ + private COSObjectKey getObjectKey( COSBase obj ) + { + COSBase actual = obj; + if( actual instanceof COSObject ) + { + actual = ((COSObject)obj).getObject(); + } + // PDFBOX-4540: because objectKeys is accessible from outside, it is possible + // that a COSObject obj is already in the objectKeys map. + COSObjectKey key = objectKeys.get(obj); + if( key == null && actual != null ) + { + key = objectKeys.get(actual); + } + if (key == null) + { + setNumber(getNumber()+1); + key = new COSObjectKey(getNumber(),0); + objectKeys.put(obj, key); + if( actual != null ) + { + objectKeys.put(actual, key); + } + } + return key; + } + + @Override + public Object visitFromArray( COSArray obj ) throws IOException + { + int count = 0; + getStandardOutput().write(ARRAY_OPEN); + for (Iterator i = obj.iterator(); i.hasNext();) + { + COSBase current = i.next(); + if( current instanceof COSDictionary ) + { + if (current.isDirect()) + { + visitFromDictionary((COSDictionary)current); + } + else + { + addObjectToWrite( current ); + writeReference( current ); + } + } + else if( current instanceof COSObject ) + { + COSBase subValue = ((COSObject)current).getObject(); + if (willEncrypt || incrementalUpdate || subValue instanceof COSDictionary || subValue == null) + { + // PDFBOX-4308: added willEncrypt to prevent an object + // that is referenced several times from being written + // direct and indirect, thus getting encrypted + // with wrong object number or getting encrypted twice + addObjectToWrite( current ); + writeReference( current ); + } + else + { + subValue.accept( this ); + } + } + else if( current == null ) + { + COSNull.NULL.accept( this ); + } + else + { + current.accept(this); + } + count++; + if (i.hasNext()) + { + if (count % 10 == 0) + { + getStandardOutput().writeEOL(); + } + else + { + getStandardOutput().write(SPACE); + } + } + } + getStandardOutput().write(ARRAY_CLOSE); + getStandardOutput().writeEOL(); + return null; + } + + @Override + public Object visitFromBoolean(COSBoolean obj) throws IOException + { + obj.writePDF( getStandardOutput() ); + return null; + } + + @Override + public Object visitFromDictionary(COSDictionary obj) throws IOException + { + if (!reachedSignature) + { + COSBase itemType = obj.getItem(COSName.TYPE); + if (COSName.SIG.equals(itemType) || COSName.DOC_TIME_STAMP.equals(itemType)) + { + reachedSignature = true; + } + } + getStandardOutput().write(DICT_OPEN); + getStandardOutput().writeEOL(); + for (Map.Entry entry : obj.entrySet()) + { + COSBase value = entry.getValue(); + if (value != null) + { + entry.getKey().accept(this); + getStandardOutput().write(SPACE); + if( value instanceof COSDictionary ) + { + COSDictionary dict = (COSDictionary)value; + + if (!incrementalUpdate) + { + // write all XObjects as direct objects, this will save some size + // PDFBOX-3684: but avoid dictionary that references itself + COSBase item = dict.getItem(COSName.XOBJECT); + if (item != null && !COSName.XOBJECT.equals(entry.getKey())) + { + item.setDirect(true); + } + item = dict.getItem(COSName.RESOURCES); + if (item != null && !COSName.RESOURCES.equals(entry.getKey())) + { + item.setDirect(true); + } + } + + if(dict.isDirect()) + { + // If the object should be written direct, we need + // to pass the dictionary to the visitor again. + visitFromDictionary(dict); + } + else + { + addObjectToWrite( dict ); + writeReference( dict ); + } + } + else if( value instanceof COSObject ) + { + COSBase subValue = ((COSObject)value).getObject(); + if (willEncrypt || incrementalUpdate || subValue instanceof COSDictionary || subValue == null) + { + // PDFBOX-4308: added willEncrypt to prevent an object + // that is referenced several times from being written + // direct and indirect, thus getting encrypted + // with wrong object number or getting encrypted twice + addObjectToWrite( value ); + writeReference( value ); + } + else + { + subValue.accept( this ); + } + } + else + { + // If we reach the pdf signature, we need to determinate the position of the + // content and byterange + if(reachedSignature && COSName.CONTENTS.equals(entry.getKey())) + { + signatureOffset = getStandardOutput().getPos(); + value.accept(this); + signatureLength = getStandardOutput().getPos()- signatureOffset; + } + else if(reachedSignature && COSName.BYTERANGE.equals(entry.getKey())) + { + byteRangeArray = (COSArray) entry.getValue(); + byteRangeOffset = getStandardOutput().getPos() + 1; + value.accept(this); + byteRangeLength = getStandardOutput().getPos() - 1 - byteRangeOffset; + reachedSignature = false; + } + else + { + value.accept(this); + } + } + getStandardOutput().writeEOL(); + + } + else + { + //then we won't write anything, there are a couple cases + //were the value of an entry in the COSDictionary will + //be a dangling reference that points to nothing + //so we will just not write out the entry if that is the case + } + } + getStandardOutput().write(DICT_CLOSE); + getStandardOutput().writeEOL(); + return null; + } + + @Override + public Object visitFromDocument(COSDocument doc) throws IOException + { + if(!incrementalUpdate) + { + doWriteHeader(doc); + } + else + { + // Sometimes the original file will be missing a newline at the end + // In order to avoid having %%EOF the first object on the same line + // as the %%EOF, we put a newline here. If there's already one at + // the end of the file, an extra one won't hurt. PDFBOX-1051 + getStandardOutput().writeCRLF(); + } + + doWriteBody(doc); + + // get the previous trailer + COSDictionary trailer = doc.getTrailer(); + long hybridPrev = -1; + + if (trailer != null) + { + hybridPrev = trailer.getLong(COSName.XREF_STM); + } + + if(incrementalUpdate || doc.isXRefStream()) + { + doWriteXRefInc(doc, hybridPrev); + } + else + { + doWriteXRefTable(); + doWriteTrailer(doc); + } + + // write endof + getStandardOutput().write(STARTXREF); + getStandardOutput().writeEOL(); + getStandardOutput().write(String.valueOf(getStartxref()).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().writeEOL(); + getStandardOutput().write(EOF); + getStandardOutput().writeEOL(); + + if (incrementalUpdate) + { + if (signatureOffset == 0 || byteRangeOffset == 0) + { + doWriteIncrement(); + } + else + { + doWriteSignature(); + } + } + + return null; + } + + @Override + public Object visitFromFloat(COSFloat obj) throws IOException + { + obj.writePDF( getStandardOutput() ); + return null; + } + + @Override + public Object visitFromInt(COSInteger obj) throws IOException + { + obj.writePDF( getStandardOutput() ); + return null; + } + + @Override + public Object visitFromName(COSName obj) throws IOException + { + obj.writePDF( getStandardOutput() ); + return null; + } + + @Override + public Object visitFromNull(COSNull obj) throws IOException + { + obj.writePDF(getStandardOutput()); + return null; + } + + /** + * visitFromObjRef method comment. + * + * @param obj The object that is being visited. + * + * @throws IOException If there is an exception while visiting this object. + */ + public void writeReference(COSBase obj) throws IOException + { + COSObjectKey key = getObjectKey(obj); + getStandardOutput().write(String.valueOf(key.getNumber()).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(String.valueOf(key.getGeneration()).getBytes(Charsets.ISO_8859_1)); + getStandardOutput().write(SPACE); + getStandardOutput().write(REFERENCE); + } + + @Override + public Object visitFromStream(COSStream obj) throws IOException + { + if (willEncrypt) + { + pdDocument.getEncryption().getSecurityHandler() + .encryptStream(obj, currentObjectKey.getNumber(), currentObjectKey.getGeneration()); + } + + InputStream input = null; + try + { + // write the stream content + visitFromDictionary(obj); + getStandardOutput().write(STREAM); + getStandardOutput().writeCRLF(); + + input = obj.createRawInputStream(); + IOUtils.copy(input, getStandardOutput()); + + getStandardOutput().writeCRLF(); + getStandardOutput().write(ENDSTREAM); + getStandardOutput().writeEOL(); + return null; + } + finally + { + if (input != null) + { + input.close(); + } + } + } + + @Override + public Object visitFromString(COSString obj) throws IOException + { + if (willEncrypt) + { + pdDocument.getEncryption().getSecurityHandler().encryptString( + obj, + currentObjectKey.getNumber(), + currentObjectKey.getGeneration()); + } + COSWriter.writeString(obj, getStandardOutput()); + return null; + } + + /** + * This will write the pdf document. + * + * @throws IOException If an error occurs while generating the data. + * @param doc The document to write. + */ + public void write(COSDocument doc) throws IOException + { + PDDocument pdDoc = new PDDocument( doc ); + write( pdDoc ); + } + + /** + * This will write the pdf document. If signature should be created externally, + * {@link #writeExternalSignature(byte[])} should be invoked to set signature after calling this method. + * + * @param doc The document to write. + * + * @throws IOException If an error occurs while generating the data. + */ + public void write(PDDocument doc) throws IOException + { + write(doc, null); + } + + /** + * This will write the pdf document. If signature should be created externally, + * {@link #writeExternalSignature(byte[])} should be invoked to set signature after calling this method. + * + * @param doc The document to write. + * @param signInterface class to be used for signing; {@code null} if external signing would be performed + * or there will be no signing at all + * + * @throws IOException If an error occurs while generating the data. + * @throws IllegalStateException If the document has an encryption dictionary but no protection + * policy. + */ + public void write(PDDocument doc, SignatureInterface signInterface) throws IOException + { + Long idTime = doc.getDocumentId() == null ? System.currentTimeMillis() : + doc.getDocumentId(); + + pdDocument = doc; + signatureInterface = signInterface; + + if(incrementalUpdate) + { + prepareIncrement(doc); + } + + // if the document says we should remove encryption, then we shouldn't encrypt + if(doc.isAllSecurityToBeRemoved()) + { + willEncrypt = false; + // also need to get rid of the "Encrypt" in the trailer so readers + // don't try to decrypt a document which is not encrypted + COSDocument cosDoc = doc.getDocument(); + COSDictionary trailer = cosDoc.getTrailer(); + trailer.removeItem(COSName.ENCRYPT); + } + else + { + if (pdDocument.getEncryption() != null) + { + if (!incrementalUpdate) + { + SecurityHandler securityHandler = pdDocument.getEncryption().getSecurityHandler(); + if (!securityHandler.hasProtectionPolicy()) + { + throw new IllegalStateException("PDF contains an encryption dictionary, please remove it with " + + "setAllSecurityToBeRemoved() or set a protection policy with protect()"); + } + securityHandler.prepareDocumentForEncryption(pdDocument); + } + willEncrypt = true; + } + else + { + willEncrypt = false; + } + } + + COSDocument cosDoc = pdDocument.getDocument(); + COSDictionary trailer = cosDoc.getTrailer(); + COSArray idArray; + boolean missingID = true; + COSBase base = trailer.getDictionaryObject(COSName.ID); + if (base instanceof COSArray) + { + idArray = (COSArray) base; + if (idArray.size() == 2) + { + missingID = false; + } + } + else + { + idArray = new COSArray(); + } + if( missingID || incrementalUpdate) + { + MessageDigest md5; + try + { + md5 = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException e) + { + // should never happen + throw new RuntimeException(e); + } + + // algorithm says to use time/path/size/values in doc to generate the id. + // we don't have path or size, so do the best we can + md5.update( Long.toString(idTime).getBytes(Charsets.ISO_8859_1) ); + + COSDictionary info = trailer.getCOSDictionary(COSName.INFO); + if( info != null ) + { + for (COSBase cosBase : info.getValues()) + { + md5.update(cosBase.toString().getBytes(Charsets.ISO_8859_1)); + } + } + // reuse origin documentID if available as first value + COSString firstID = missingID ? new COSString( md5.digest() ) : (COSString)idArray.get(0); + // it's ok to use the same ID for the second part if the ID is created for the first time + COSString secondID = missingID ? firstID : new COSString( md5.digest() ); + idArray = new COSArray(); + idArray.add( firstID ); + idArray.add( secondID ); + trailer.setItem(COSName.ID, idArray); + } + cosDoc.accept(this); + } + + /** + * This will write the fdf document. + * + * @param doc The document to write. + * + * @throws IOException If an error occurs while generating the data. + */ + public void write(FDFDocument doc) throws IOException + { + fdfDocument = doc; + willEncrypt = false; + COSDocument cosDoc = fdfDocument.getDocument(); + cosDoc.accept(this); + } + /** + * This will output the given byte getString as a PDF object. + * + * @param string COSString to be written + * @param output The stream to write to. + * @throws IOException If there is an error writing to the stream. + */ + public static void writeString(COSString string, OutputStream output) throws IOException + { + writeString(string.getBytes(), string.getForceHexForm(), output); + } + + /** + * This will output the given text/byte getString as a PDF object. + * + * @param bytes byte array representation of a string to be written + * @param output The stream to write to. + * @throws IOException If there is an error writing to the stream. + */ + public static void writeString(byte[] bytes, OutputStream output) throws IOException + { + writeString(bytes, false, output); + } + + /** + * This will output the given text/byte string as a PDF object. + * + * @param output The stream to write to. + * @throws IOException If there is an error writing to the stream. + */ + private static void writeString(byte[] bytes, boolean forceHex, OutputStream output) + throws IOException + { + // check for non-ASCII characters + boolean isASCII = true; + if (!forceHex) + { + for (byte b : bytes) + { + // if the byte is negative then it is an eight bit byte and is outside the ASCII range + if (b < 0) + { + isASCII = false; + break; + } + // PDFBOX-3107 EOL markers within a string are troublesome + if (b == 0x0d || b == 0x0a) + { + isASCII = false; + break; + } + } + } + + if (isASCII && !forceHex) + { + // write ASCII string + output.write('('); + for (byte b : bytes) + { + switch (b) + { + case '(': + case ')': + case '\\': + output.write('\\'); + output.write(b); + break; + default: + output.write(b); + break; + } + } + output.write(')'); + } + else + { + // write hex string + output.write('<'); + Hex.writeHexBytes(bytes, output); + output.write('>'); + } + } +} diff --git a/src/org/pdfbox/pdfwriter/COSWriterXRefEntry.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriterXRefEntry.java similarity index 76% rename from src/org/pdfbox/pdfwriter/COSWriterXRefEntry.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriterXRefEntry.java index a208cc22a70..8d0f3812bef 100644 --- a/src/org/pdfbox/pdfwriter/COSWriterXRefEntry.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriterXRefEntry.java @@ -14,42 +14,69 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdfwriter; +package org.apache.pdfbox.pdfwriter; -import org.pdfbox.persistence.util.COSObjectKey; +import org.apache.pdfbox.cos.COSObjectKey; -import org.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBase; /** * this is en entry in the xref section of the physical pdf document * generated by the COSWriter. * * @author Michael Traut - * @version $Revision: 1.7 $ */ -public class COSWriterXRefEntry implements Comparable +public class COSWriterXRefEntry implements Comparable { private long offset; private COSBase object; private COSObjectKey key; private boolean free = false; + private static final COSWriterXRefEntry NULLENTRY; + + static + { + NULLENTRY = new COSWriterXRefEntry(0, null, new COSObjectKey(0, 65535)); + NULLENTRY.setFree(true); + } - + /** + * Constructor. + * + * @param start The start attribute. + * @param obj The COS object that this entry represents. + * @param keyValue The key to the COS object. + */ + public COSWriterXRefEntry(long start, COSBase obj, COSObjectKey keyValue) + { + setOffset(start); + setObject(obj); + setKey(keyValue); + } /** * {@inheritDoc} */ - public int compareTo(Object obj) + @Override + public int compareTo(COSWriterXRefEntry obj) { - if (obj instanceof COSWriterXRefEntry) - { - return (int)(getKey().getNumber() - ((COSWriterXRefEntry)obj).getKey().getNumber()); - } - else + if (obj != null) { - return -1; + return Long.compare(getKey().getNumber(), obj.getKey().getNumber()); } + return -1; } + + /** + * This will return a null entry: 0000000000 65535 f. + * + * @return null COSWriterXRefEntry + */ + public static COSWriterXRefEntry getNullEntry() + { + return NULLENTRY; + } + /** * This will get the Object key. * @@ -105,26 +132,11 @@ private void setKey(COSObjectKey newKey) * * @param newOffset The new value for the offset. */ - public void setOffset(long newOffset) + public final void setOffset(long newOffset) { offset = newOffset; } - /** - * COSWriterXRefEntry constructor comment. - * - * @param start The start attribute. - * @param obj The COS object that this entry represents. - * @param keyValue The key to the COS object. - */ - public COSWriterXRefEntry(long start, COSBase obj, COSObjectKey keyValue) - { - super(); - setOffset(start); - setObject(obj); - setKey(keyValue); - } - /** * This will get the object. * diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java new file mode 100644 index 00000000000..da9d8204ce5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/ContentStreamWriter.java @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfwriter; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; +import java.util.Map; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.util.Charsets; + +/** + * A class that will take a list of tokens and write out a stream with them. + * + * @author Ben Litchfield + */ +public class ContentStreamWriter +{ + private final OutputStream output; + /** + * space character. + */ + public static final byte[] SPACE = new byte[] { 32 }; + + /** + * standard line separator + */ + public static final byte[] EOL = new byte[] { 0x0A }; + + /** + * This will create a new content stream writer. + * + * @param out The stream to write the data to. + */ + public ContentStreamWriter( OutputStream out ) + { + output = out; + } + + /** + * Writes a single operand token. + * + * @param base The operand to write to the stream. + * @throws IOException If there is an error writing to the stream. + */ + public void writeToken(COSBase base) throws IOException + { + writeObject(base); + } + + /** + * Writes a single operator token. + * + * @param op The operator to write to the stream. + * @throws IOException If there is an error writing to the stream. + */ + public void writeToken(Operator op) throws IOException + { + writeObject(op); + } + + /** + * Writes a series of tokens followed by a new line. + * + * @param tokens The tokens to write to the stream. + * @throws IOException If there is an error writing to the stream. + */ + public void writeTokens(Object... tokens) throws IOException + { + for (Object token : tokens) + { + writeObject(token); + } + output.write("\n".getBytes(Charsets.US_ASCII)); + } + + /** + * This will write out the list of tokens to the stream. + * + * @param tokens The tokens to write to the stream. + * @throws IOException If there is an error writing to the stream. + */ + public void writeTokens( List tokens ) throws IOException + { + for (Object token : tokens) + { + writeObject(token); + } + } + + private void writeObject( Object o ) throws IOException + { + if( o instanceof COSString ) + { + COSWriter.writeString((COSString)o, output); + output.write( SPACE ); + } + else if( o instanceof COSFloat ) + { + ((COSFloat)o).writePDF( output ); + output.write( SPACE ); + } + else if( o instanceof COSInteger ) + { + ((COSInteger)o).writePDF( output ); + output.write( SPACE ); + } + else if( o instanceof COSBoolean ) + { + ((COSBoolean)o).writePDF( output ); + output.write( SPACE ); + } + else if( o instanceof COSName ) + { + ((COSName)o).writePDF( output ); + output.write( SPACE ); + } + else if( o instanceof COSArray ) + { + COSArray array = (COSArray)o; + output.write(COSWriter.ARRAY_OPEN); + for( int i=0; i entry : obj.entrySet()) + { + if (entry.getValue() != null) + { + writeObject( entry.getKey() ); + output.write( SPACE ); + writeObject( entry.getValue() ); + output.write( SPACE ); + } + } + output.write( COSWriter.DICT_CLOSE ); + output.write( SPACE ); + } + else if( o instanceof Operator) + { + Operator op = (Operator)o; + if( op.getName().equals( OperatorName.BEGIN_INLINE_IMAGE ) ) + { + output.write( OperatorName.BEGIN_INLINE_IMAGE.getBytes(Charsets.ISO_8859_1) ); + COSDictionary dic = op.getImageParameters(); + for( COSName key : dic.keySet() ) + { + Object value = dic.getDictionaryObject( key ); + key.writePDF( output ); + output.write( SPACE ); + writeObject( value ); + output.write( EOL ); + } + output.write( OperatorName.BEGIN_INLINE_IMAGE_DATA.getBytes(Charsets.ISO_8859_1) ); + output.write( EOL ); + output.write( op.getImageData() ); + output.write( EOL ); + output.write( OperatorName.END_INLINE_IMAGE.getBytes(Charsets.ISO_8859_1) ); + output.write( EOL ); + } + else + { + output.write( op.getName().getBytes(Charsets.ISO_8859_1) ); + output.write( EOL ); + } + } + else + { + throw new IOException( "Error:Unknown type in content stream:" + o ); + } + } +} diff --git a/src/org/pdfbox/pdfwriter/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/package.html similarity index 100% rename from src/org/pdfbox/pdfwriter/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/DefaultResourceCache.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/DefaultResourceCache.java new file mode 100644 index 00000000000..91851053ca4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/DefaultResourceCache.java @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import java.lang.ref.SoftReference; +import java.util.HashMap; +import java.util.Map; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; + +/** + * A resource cached based on SoftReference, retains resources until memory pressure causes them + * to be garbage collected. + * + * @author John Hewson + */ +public class DefaultResourceCache implements ResourceCache +{ + private final Map> fonts = + new HashMap<>(); + + private final Map> colorSpaces = + new HashMap<>(); + + private final Map> xobjects = + new HashMap<>(); + + private final Map> extGStates = + new HashMap<>(); + + private final Map> shadings = + new HashMap<>(); + + private final Map> patterns = + new HashMap<>(); + + private final Map> properties = + new HashMap<>(); + + @Override + public PDFont getFont(COSObject indirect) throws IOException + { + SoftReference font = fonts.get(indirect); + if (font != null) + { + return font.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDFont font) throws IOException + { + fonts.put(indirect, new SoftReference<>(font)); + } + + @Override + public PDColorSpace getColorSpace(COSObject indirect) throws IOException + { + SoftReference colorSpace = colorSpaces.get(indirect); + if (colorSpace != null) + { + return colorSpace.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDColorSpace colorSpace) throws IOException + { + colorSpaces.put(indirect, new SoftReference<>(colorSpace)); + } + + @Override + public PDExtendedGraphicsState getExtGState(COSObject indirect) + { + SoftReference extGState = extGStates.get(indirect); + if (extGState != null) + { + return extGState.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDExtendedGraphicsState extGState) + { + extGStates.put(indirect, new SoftReference<>(extGState)); + } + + @Override + public PDShading getShading(COSObject indirect) throws IOException + { + SoftReference shading = shadings.get(indirect); + if (shading != null) + { + return shading.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDShading shading) throws IOException + { + shadings.put(indirect, new SoftReference<>(shading)); + } + + @Override + public PDAbstractPattern getPattern(COSObject indirect) throws IOException + { + SoftReference pattern = patterns.get(indirect); + if (pattern != null) + { + return pattern.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDAbstractPattern pattern) throws IOException + { + patterns.put(indirect, new SoftReference<>(pattern)); + } + + @Override + public PDPropertyList getProperties(COSObject indirect) + { + SoftReference propertyList = properties.get(indirect); + if (propertyList != null) + { + return propertyList.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDPropertyList propertyList) + { + properties.put(indirect, new SoftReference<>(propertyList)); + } + + @Override + public PDXObject getXObject(COSObject indirect) throws IOException + { + SoftReference xobject = xobjects.get(indirect); + if (xobject != null) + { + return xobject.get(); + } + return null; + } + + @Override + public void put(COSObject indirect, PDXObject xobject) throws IOException + { + xobjects.put(indirect, new SoftReference<>(xobject)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/MissingResourceException.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/MissingResourceException.java new file mode 100644 index 00000000000..974319308a7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/MissingResourceException.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; + +/** + * Thrown when a named resource is missing. + */ +public final class MissingResourceException extends IOException +{ + public MissingResourceException(String message) + { + super(message); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java new file mode 100644 index 00000000000..03b3de96845 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java @@ -0,0 +1,1705 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.awt.Color; +import java.awt.geom.AffineTransform; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.OutputStream; +import java.text.NumberFormat; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.gsub.CompoundCharacterTokenizer; +import org.apache.fontbox.ttf.gsub.GsubWorker; +import org.apache.fontbox.ttf.gsub.GsubWorkerFactory; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdfwriter.COSWriter; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceN; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; +import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDInlineImage; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.NumberFormatUtil; + +/** + * Provides the ability to write to a content stream. + * + * @author Ben Litchfield + */ +abstract class PDAbstractContentStream implements Closeable +{ + private static final Log LOG = LogFactory.getLog(PDAbstractContentStream.class); + + protected final PDDocument document; // may be null + + protected final OutputStream outputStream; + protected final PDResources resources; + + protected boolean inTextMode = false; + protected final Deque fontStack = new ArrayDeque<>(); + + protected final Deque nonStrokingColorSpaceStack = new ArrayDeque<>(); + protected final Deque strokingColorSpaceStack = new ArrayDeque<>(); + + // number format + private final NumberFormat formatDecimal = NumberFormat.getNumberInstance(Locale.US); + private final byte[] formatBuffer = new byte[32]; + + private final Map gsubWorkers = new HashMap<>(); + private final GsubWorkerFactory gsubWorkerFactory = new GsubWorkerFactory(); + + /** + * Create a new appearance stream. + * + * @param document may be null + * @param outputStream The appearances output stream to write to. + * @param resources The resources to use + */ + PDAbstractContentStream(PDDocument document, OutputStream outputStream, PDResources resources) + { + this.document = document; + this.outputStream = outputStream; + this.resources = resources; + + formatDecimal.setMaximumFractionDigits(4); + formatDecimal.setGroupingUsed(false); + } + + /** + * Sets the maximum number of digits allowed for fractional numbers. + * + * @see NumberFormat#setMaximumFractionDigits(int) + * @param fractionDigitsNumber + */ + protected void setMaximumFractionDigits(int fractionDigitsNumber) + { + formatDecimal.setMaximumFractionDigits(fractionDigitsNumber); + } + + /** + * Begin some text operations. + * + * @throws IOException If there is an error writing to the stream or if you attempt to + * nest beginText calls. + * @throws IllegalStateException If the method was not allowed to be called at this time. + */ + public void beginText() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: Nested beginText() calls are not allowed."); + } + writeOperator(OperatorName.BEGIN_TEXT); + inTextMode = true; + } + + /** + * End some text operations. + * + * @throws IOException If there is an error writing to the stream or if you attempt to + * nest endText calls. + * @throws IllegalStateException If the method was not allowed to be called at this time. + */ + public void endText() throws IOException + { + if (!inTextMode) + { + throw new IllegalStateException("Error: You must call beginText() before calling endText."); + } + writeOperator(OperatorName.END_TEXT); + inTextMode = false; + } + + /** + * Set the font and font size to draw text with. + * + * @param font The font to use. + * @param fontSize The font size to draw the text. + * @throws IOException If there is an error writing the font information. + */ + public void setFont(PDFont font, float fontSize) throws IOException + { + if (fontStack.isEmpty()) + { + fontStack.add(font); + } + else + { + fontStack.pop(); + fontStack.push(font); + } + + // keep track of fonts which are configured for subsetting + if (font.willBeSubset()) + { + if (document != null) + { + document.getFontsToSubset().add(font); + } + else + { + LOG.warn("attempting to use subset font " + font.getName() + " without proper context"); + } + } + + // complex text layout + if (font instanceof PDType0Font) + { + PDType0Font pdType0Font = (PDType0Font) font; + GsubData gsubData = pdType0Font.getGsubData(); + if (gsubData != GsubData.NO_DATA_FOUND) + { + GsubWorker gsubWorker = gsubWorkerFactory.getGsubWorker(pdType0Font.getCmapLookup(), + gsubData); + gsubWorkers.put((PDType0Font) font, gsubWorker); + } + } + + writeOperand(resources.add(font)); + writeOperand(fontSize); + writeOperator(OperatorName.SET_FONT_AND_SIZE); + } + + /** + * Shows the given text at the location specified by the current text matrix with the given + * interspersed positioning. This allows the user to efficiently position each glyph or sequence + * of glyphs. + * + * @param textWithPositioningArray An array consisting of String and Float types. Each String is + * output to the page using the current text matrix. Using the default coordinate system, each + * interspersed number adjusts the current text matrix by translating to the left or down for + * horizontal and vertical text respectively. The number is expressed in thousands of a text + * space unit, and may be negative. + * + * @throws IOException if an io exception occurs. + */ + public void showTextWithPositioning(Object[] textWithPositioningArray) throws IOException + { + write("["); + for (Object obj : textWithPositioningArray) + { + if (obj instanceof String) + { + showTextInternal((String) obj); + } + else if (obj instanceof Float) + { + writeOperand((Float) obj); + } + else + { + throw new IllegalArgumentException("Argument must consist of array of Float and String types"); + } + } + write("] "); + writeOperator(OperatorName.SHOW_TEXT_ADJUSTED); + } + + /** + * Shows the given text at the location specified by the current text matrix. + * + * @param text The Unicode text to show. + * @throws IOException If an io exception occurs. + * @throws IllegalArgumentException if a character isn't supported by the current font + */ + public void showText(String text) throws IOException + { + showTextInternal(text); + write(" "); + writeOperator(OperatorName.SHOW_TEXT); + } + + /** + * Outputs a string using the correct encoding and subsetting as required. + * + * @param text The Unicode text to show. + * + * @throws IOException If an io exception occurs. + */ + protected void showTextInternal(String text) throws IOException + { + if (!inTextMode) + { + throw new IllegalStateException("Must call beginText() before showText()"); + } + + if (fontStack.isEmpty()) + { + throw new IllegalStateException("Must call setFont() before showText()"); + } + + PDFont font = fontStack.peek(); + + // complex text layout + byte[] encodedText = null; + if (font instanceof PDType0Font) + { + + GsubWorker gsubWorker = gsubWorkers.get(font); + if (gsubWorker != null) + { + PDType0Font pdType0Font = (PDType0Font) font; + Set glyphIds = new HashSet<>(); + encodedText = encodeForGsub(gsubWorker, glyphIds, pdType0Font, text); + if (pdType0Font.willBeSubset()) + { + pdType0Font.addGlyphsToSubset(glyphIds); + } + } + } + + if (encodedText == null) + { + encodedText = font.encode(text); + } + + // Unicode code points to keep when subsetting + if (font.willBeSubset()) + { + int offset = 0; + while (offset < text.length()) + { + int codePoint = text.codePointAt(offset); + font.addToSubset(codePoint); + offset += Character.charCount(codePoint); + } + } + + COSWriter.writeString(encodedText, outputStream); + } + + /** + * Sets the text leading. + * + * @param leading The leading in unscaled text units. + * @throws IOException If there is an error writing to the stream. + */ + public void setLeading(float leading) throws IOException + { + writeOperand(leading); + writeOperator(OperatorName.SET_TEXT_LEADING); + } + + /** + * Move to the start of the next line of text. Requires the leading (see {@link #setLeading}) + * to have been set. + * + * @throws IOException If there is an error writing to the stream. + */ + public void newLine() throws IOException + { + if (!inTextMode) + { + throw new IllegalStateException("Must call beginText() before newLine()"); + } + writeOperator(OperatorName.NEXT_LINE); + } + + /** + * The Td operator. + * Move to the start of the next line, offset from the start of the current line by (tx, ty). + * + * @param tx The x translation. + * @param ty The y translation. + * @throws IOException If there is an error writing to the stream. + * @throws IllegalStateException If the method was not allowed to be called at this time. + */ + public void newLineAtOffset(float tx, float ty) throws IOException + { + if (!inTextMode) + { + throw new IllegalStateException("Error: must call beginText() before newLineAtOffset()"); + } + writeOperand(tx); + writeOperand(ty); + writeOperator(OperatorName.MOVE_TEXT); + } + + /** + * The Tm operator. Sets the text matrix to the given values. + * A current text matrix will be replaced with the new one. + * + * @param matrix the transformation matrix + * @throws IOException If there is an error writing to the stream. + * @throws IllegalStateException If the method was not allowed to be called at this time. + */ + public void setTextMatrix(Matrix matrix) throws IOException + { + if (!inTextMode) + { + throw new IllegalStateException("Error: must call beginText() before setTextMatrix"); + } + writeAffineTransform(matrix.createAffineTransform()); + writeOperator(OperatorName.SET_MATRIX); + } + + /** + * Draw an image at the x,y coordinates, with the default size of the image. + * + * @param image The image to draw. + * @param x The x-coordinate to draw the image. + * @param y The y-coordinate to draw the image. + * + * @throws IOException If there is an error writing to the stream. + */ + public void drawImage(PDImageXObject image, float x, float y) throws IOException + { + drawImage(image, x, y, image.getWidth(), image.getHeight()); + } + + /** + * Draw an image at the x,y coordinates, with the given size. + * + * @param image The image to draw. + * @param x The x-coordinate to draw the image. + * @param y The y-coordinate to draw the image. + * @param width The width to draw the image. + * @param height The height to draw the image. + * + * @throws IOException If there is an error writing to the stream. + * @throws IllegalStateException If the method was called within a text block. + */ + public void drawImage(PDImageXObject image, float x, float y, float width, float height) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawImage is not allowed within a text block."); + } + + saveGraphicsState(); + + AffineTransform transform = new AffineTransform(width, 0, 0, height, x, y); + transform(new Matrix(transform)); + + writeOperand(resources.add(image)); + writeOperator(OperatorName.DRAW_OBJECT); + + restoreGraphicsState(); + } + + /** + * Draw an image at the origin with the given transformation matrix. + * + * @param image The image to draw. + * @param matrix The transformation matrix to apply to the image. + * + * @throws IOException If there is an error writing to the stream. + * @throws IllegalStateException If the method was called within a text block. + */ + public void drawImage(PDImageXObject image, Matrix matrix) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawImage is not allowed within a text block."); + } + + saveGraphicsState(); + + AffineTransform transform = matrix.createAffineTransform(); + transform(new Matrix(transform)); + + writeOperand(resources.add(image)); + writeOperator(OperatorName.DRAW_OBJECT); + + restoreGraphicsState(); + } + + /** + * Draw an inline image at the x,y coordinates, with the default size of the image. + * + * @param inlineImage The inline image to draw. + * @param x The x-coordinate to draw the inline image. + * @param y The y-coordinate to draw the inline image. + * + * @throws IOException If there is an error writing to the stream. + */ + public void drawImage(PDInlineImage inlineImage, float x, float y) throws IOException + { + drawImage(inlineImage, x, y, inlineImage.getWidth(), inlineImage.getHeight()); + } + + /** + * Draw an inline image at the x,y coordinates and a certain width and height. + * + * @param inlineImage The inline image to draw. + * @param x The x-coordinate to draw the inline image. + * @param y The y-coordinate to draw the inline image. + * @param width The width of the inline image to draw. + * @param height The height of the inline image to draw. + * + * @throws IOException If there is an error writing to the stream. + * @throws IllegalStateException If the method was called within a text block. + */ + public void drawImage(PDInlineImage inlineImage, float x, float y, float width, float height) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawImage is not allowed within a text block."); + } + + saveGraphicsState(); + transform(new Matrix(width, 0, 0, height, x, y)); + + // create the image dictionary + StringBuilder sb = new StringBuilder(); + sb.append(OperatorName.BEGIN_INLINE_IMAGE); + + sb.append("\n /W "); + sb.append(inlineImage.getWidth()); + + sb.append("\n /H "); + sb.append(inlineImage.getHeight()); + + sb.append("\n /CS "); + sb.append("/"); + sb.append(inlineImage.getColorSpace().getName()); + + if (inlineImage.getDecode() != null && inlineImage.getDecode().size() > 0) + { + sb.append("\n /D "); + sb.append("["); + for (COSBase base : inlineImage.getDecode()) + { + sb.append(((COSNumber) base).intValue()); + sb.append(" "); + } + sb.append("]"); + } + + if (inlineImage.isStencil()) + { + sb.append("\n /IM true"); + } + + sb.append("\n /BPC "); + sb.append(inlineImage.getBitsPerComponent()); + + // image dictionary + write(sb.toString()); + writeLine(); + + // binary data + writeOperator(OperatorName.BEGIN_INLINE_IMAGE_DATA); + writeBytes(inlineImage.getData()); + writeLine(); + writeOperator(OperatorName.END_INLINE_IMAGE); + + restoreGraphicsState(); + } + + /** + * Draws the given Form XObject at the current location. + * + * @param form Form XObject + * @throws IOException if the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void drawForm(PDFormXObject form) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawForm is not allowed within a text block."); + } + + writeOperand(resources.add(form)); + writeOperator(OperatorName.DRAW_OBJECT); + } + + /** + * The cm operator. Concatenates the given matrix with the CTM. + * + * @param matrix the transformation matrix + * @throws IOException If there is an error writing to the stream. + */ + public void transform(Matrix matrix) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: Modifying the current transformation matrix is not allowed within text objects."); + } + + writeAffineTransform(matrix.createAffineTransform()); + writeOperator(OperatorName.CONCAT); + } + + /** + * q operator. Saves the current graphics state. + * @throws IOException If an error occurs while writing to the stream. + */ + public void saveGraphicsState() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: Saving the graphics state is not allowed within text objects."); + } + + if (!fontStack.isEmpty()) + { + fontStack.push(fontStack.peek()); + } + if (!strokingColorSpaceStack.isEmpty()) + { + strokingColorSpaceStack.push(strokingColorSpaceStack.peek()); + } + if (!nonStrokingColorSpaceStack.isEmpty()) + { + nonStrokingColorSpaceStack.push(nonStrokingColorSpaceStack.peek()); + } + writeOperator(OperatorName.SAVE); + } + + /** + * Q operator. Restores the current graphics state. + * @throws IOException If an error occurs while writing to the stream. + */ + public void restoreGraphicsState() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: Restoring the graphics state is not allowed within text objects."); + } + + if (!fontStack.isEmpty()) + { + fontStack.pop(); + } + if (!strokingColorSpaceStack.isEmpty()) + { + strokingColorSpaceStack.pop(); + } + if (!nonStrokingColorSpaceStack.isEmpty()) + { + nonStrokingColorSpaceStack.pop(); + } + writeOperator(OperatorName.RESTORE); + } + + protected COSName getName(PDColorSpace colorSpace) + { + if (colorSpace instanceof PDDeviceGray || + colorSpace instanceof PDDeviceRGB || + colorSpace instanceof PDDeviceCMYK) + { + return COSName.getPDFName(colorSpace.getName()); + } + else + { + return resources.add(colorSpace); + } + } + + /** + * Sets the stroking color and, if necessary, the stroking color space. + * + * @param color Color in a specific color space. + * @throws IOException If an IO error occurs while writing to the stream. + */ + public void setStrokingColor(PDColor color) throws IOException + { + if (strokingColorSpaceStack.isEmpty() || + strokingColorSpaceStack.peek() != color.getColorSpace()) + { + writeOperand(getName(color.getColorSpace())); + writeOperator(OperatorName.STROKING_COLORSPACE); + setStrokingColorSpaceStack(color.getColorSpace()); + } + + for (float value : color.getComponents()) + { + writeOperand(value); + } + + if (color.getColorSpace() instanceof PDPattern) + { + writeOperand(color.getPatternName()); + } + + if (color.getColorSpace() instanceof PDPattern || + color.getColorSpace() instanceof PDSeparation || + color.getColorSpace() instanceof PDDeviceN || + color.getColorSpace() instanceof PDICCBased) + { + writeOperator(OperatorName.STROKING_COLOR_N); + } + else + { + writeOperator(OperatorName.STROKING_COLOR); + } + } + + /** + * Set the stroking color using an AWT color. Conversion uses the default sRGB color space. + * + * @param color The color to set. + * @throws IOException If an IO error occurs while writing to the stream. + */ + public void setStrokingColor(Color color) throws IOException + { + float[] components = new float[] { + color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f }; + PDColor pdColor = new PDColor(components, PDDeviceRGB.INSTANCE); + setStrokingColor(pdColor); + } + + /** + * Set the stroking color in the DeviceRGB color space. Range is 0..255. + * + * @param r The red value + * @param g The green value. + * @param b The blue value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameters are invalid. + */ + public void setStrokingColor(int r, int g, int b) throws IOException + { + if (isOutside255Interval(r) || isOutside255Interval(g) || isOutside255Interval(b)) + { + throw new IllegalArgumentException("Parameters must be within 0..255, but are " + + String.format("(%d,%d,%d)", r, g, b)); + } + writeOperand(r / 255f); + writeOperand(g / 255f); + writeOperand(b / 255f); + writeOperator(OperatorName.STROKING_COLOR_RGB); + setStrokingColorSpaceStack(PDDeviceRGB.INSTANCE); + } + + /** + * Set the stroking color in the DeviceCMYK color space. Range is 0..1 + * + * @param c The cyan value. + * @param m The magenta value. + * @param y The yellow value. + * @param k The black value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameters are invalid. + */ + public void setStrokingColor(float c, float m, float y, float k) throws IOException + { + if (isOutsideOneInterval(c) || isOutsideOneInterval(m) || isOutsideOneInterval(y) || isOutsideOneInterval(k)) + { + throw new IllegalArgumentException("Parameters must be within 0..1, but are " + + String.format("(%.2f,%.2f,%.2f,%.2f)", c, m, y, k)); + } + writeOperand(c); + writeOperand(m); + writeOperand(y); + writeOperand(k); + writeOperator(OperatorName.STROKING_COLOR_CMYK); + setStrokingColorSpaceStack(PDDeviceCMYK.INSTANCE); + } + + /** + * Set the stroking color in the DeviceGray color space. Range is 0..1. + * + * @param g The gray value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameter is invalid. + */ + public void setStrokingColor(float g) throws IOException + { + if (isOutsideOneInterval(g)) + { + throw new IllegalArgumentException("Parameter must be within 0..1, but is " + g); + } + writeOperand(g); + writeOperator(OperatorName.STROKING_COLOR_GRAY); + setStrokingColorSpaceStack(PDDeviceGray.INSTANCE); + } + + /** + * Sets the non-stroking color and, if necessary, the non-stroking color space. + * + * @param color Color in a specific color space. + * @throws IOException If an IO error occurs while writing to the stream. + */ + public void setNonStrokingColor(PDColor color) throws IOException + { + if (nonStrokingColorSpaceStack.isEmpty() || + nonStrokingColorSpaceStack.peek() != color.getColorSpace()) + { + writeOperand(getName(color.getColorSpace())); + writeOperator(OperatorName.NON_STROKING_COLORSPACE); + setNonStrokingColorSpaceStack(color.getColorSpace()); + } + + for (float value : color.getComponents()) + { + writeOperand(value); + } + + if (color.getColorSpace() instanceof PDPattern) + { + writeOperand(color.getPatternName()); + } + + if (color.getColorSpace() instanceof PDPattern || + color.getColorSpace() instanceof PDSeparation || + color.getColorSpace() instanceof PDDeviceN || + color.getColorSpace() instanceof PDICCBased) + { + writeOperator(OperatorName.NON_STROKING_COLOR_N); + } + else + { + writeOperator(OperatorName.NON_STROKING_COLOR); + } + } + + /** + * Set the non-stroking color using an AWT color. Conversion uses the default sRGB color space. + * + * @param color The color to set. + * @throws IOException If an IO error occurs while writing to the stream. + */ + public void setNonStrokingColor(Color color) throws IOException + { + float[] components = new float[] { + color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f }; + PDColor pdColor = new PDColor(components, PDDeviceRGB.INSTANCE); + setNonStrokingColor(pdColor); + } + + /** + * Set the non-stroking color in the DeviceRGB color space. Range is 0..255. + * + * @param r The red value. + * @param g The green value. + * @param b The blue value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameters are invalid. + */ + public void setNonStrokingColor(int r, int g, int b) throws IOException + { + if (isOutside255Interval(r) || isOutside255Interval(g) || isOutside255Interval(b)) + { + throw new IllegalArgumentException("Parameters must be within 0..255, but are " + + String.format("(%d,%d,%d)", r, g, b)); + } + writeOperand(r / 255f); + writeOperand(g / 255f); + writeOperand(b / 255f); + writeOperator(OperatorName.NON_STROKING_RGB); + setNonStrokingColorSpaceStack(PDDeviceRGB.INSTANCE); + } + + /** + * Set the non-stroking color in the DeviceCMYK color space. Range is 0..255. + * + * @param c The cyan value. + * @param m The magenta value. + * @param y The yellow value. + * @param k The black value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameters are invalid. + */ + public void setNonStrokingColor(int c, int m, int y, int k) throws IOException + { + if (isOutside255Interval(c) || isOutside255Interval(m) || isOutside255Interval(y) || isOutside255Interval(k)) + { + throw new IllegalArgumentException("Parameters must be within 0..255, but are " + + String.format("(%d,%d,%d,%d)", c, m, y, k)); + } + setNonStrokingColor(c / 255f, m / 255f, y / 255f, k / 255f); + } + + /** + * Set the non-stroking color in the DeviceCMYK color space. Range is 0..1. + * + * @param c The cyan value. + * @param m The magenta value. + * @param y The yellow value. + * @param k The black value. + * @throws IOException If an IO error occurs while writing to the stream. + */ + public void setNonStrokingColor(float c, float m, float y, float k) throws IOException + { + if (isOutsideOneInterval(c) || isOutsideOneInterval(m) || isOutsideOneInterval(y) || isOutsideOneInterval(k)) + { + throw new IllegalArgumentException("Parameters must be within 0..1, but are " + + String.format("(%.2f,%.2f,%.2f,%.2f)", c, m, y, k)); + } + writeOperand(c); + writeOperand(m); + writeOperand(y); + writeOperand(k); + writeOperator(OperatorName.NON_STROKING_CMYK); + setNonStrokingColorSpaceStack(PDDeviceCMYK.INSTANCE); + } + + /** + * Set the non-stroking color in the DeviceGray color space. Range is 0..255. + * + * @param g The gray value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameter is invalid. + */ + public void setNonStrokingColor(int g) throws IOException + { + if (isOutside255Interval(g)) + { + throw new IllegalArgumentException("Parameter must be within 0..255, but is " + g); + } + setNonStrokingColor(g / 255f); + } + + /** + * Set the non-stroking color in the DeviceGray color space. Range is 0..1. + * + * @param g The gray value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameter is invalid. + */ + public void setNonStrokingColor(float g) throws IOException + { + if (isOutsideOneInterval(g)) + { + throw new IllegalArgumentException("Parameter must be within 0..1, but is " + g); + } + writeOperand(g); + writeOperator(OperatorName.NON_STROKING_GRAY); + setNonStrokingColorSpaceStack(PDDeviceGray.INSTANCE); + } + + /** + * Add a rectangle to the current path. + * + * @param x The lower left x coordinate. + * @param y The lower left y coordinate. + * @param width The width of the rectangle. + * @param height The height of the rectangle. + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + */ + public void addRect(float x, float y, float width, float height) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: addRect is not allowed within a text block."); + } + writeOperand(x); + writeOperand(y); + writeOperand(width); + writeOperand(height); + writeOperator(OperatorName.APPEND_RECT); + } + + /** + * Append a cubic Bézier curve to the current path. The curve extends from the current point to + * the point (x3, y3), using (x1, y1) and (x2, y2) as the Bézier control points. + * + * @param x1 x coordinate of the point 1 + * @param y1 y coordinate of the point 1 + * @param x2 x coordinate of the point 2 + * @param y2 y coordinate of the point 2 + * @param x3 x coordinate of the point 3 + * @param y3 y coordinate of the point 3 + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + */ + public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: curveTo is not allowed within a text block."); + } + writeOperand(x1); + writeOperand(y1); + writeOperand(x2); + writeOperand(y2); + writeOperand(x3); + writeOperand(y3); + writeOperator(OperatorName.CURVE_TO); + } + + /** + * Append a cubic Bézier curve to the current path. The curve extends from the current point to + * the point (x3, y3), using the current point and (x2, y2) as the Bézier control points. + * + * @param x2 x coordinate of the point 2 + * @param y2 y coordinate of the point 2 + * @param x3 x coordinate of the point 3 + * @param y3 y coordinate of the point 3 + * @throws IllegalStateException If the method was called within a text block. + * @throws IOException If the content stream could not be written. + */ + public void curveTo2(float x2, float y2, float x3, float y3) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: curveTo2 is not allowed within a text block."); + } + writeOperand(x2); + writeOperand(y2); + writeOperand(x3); + writeOperand(y3); + writeOperator(OperatorName.CURVE_TO_REPLICATE_INITIAL_POINT); + } + + /** + * Append a cubic Bézier curve to the current path. The curve extends from the current point to + * the point (x3, y3), using (x1, y1) and (x3, y3) as the Bézier control points. + * + * @param x1 x coordinate of the point 1 + * @param y1 y coordinate of the point 1 + * @param x3 x coordinate of the point 3 + * @param y3 y coordinate of the point 3 + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + */ + public void curveTo1(float x1, float y1, float x3, float y3) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: curveTo1 is not allowed within a text block."); + } + writeOperand(x1); + writeOperand(y1); + writeOperand(x3); + writeOperand(y3); + writeOperator(OperatorName.CURVE_TO_REPLICATE_FINAL_POINT); + } + + /** + * Move the current position to the given coordinates. + * + * @param x The x coordinate. + * @param y The y coordinate. + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + */ + public void moveTo(float x, float y) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: moveTo is not allowed within a text block."); + } + writeOperand(x); + writeOperand(y); + writeOperator(OperatorName.MOVE_TO); + } + + /** + * Draw a line from the current position to the given coordinates. + * + * @param x The x coordinate. + * @param y The y coordinate. + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + */ + public void lineTo(float x, float y) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: lineTo is not allowed within a text block."); + } + writeOperand(x); + writeOperand(y); + writeOperator(OperatorName.LINE_TO); + } + + /** + * Stroke the path. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void stroke() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: stroke is not allowed within a text block."); + } + writeOperator(OperatorName.STROKE_PATH); + } + + /** + * Close and stroke the path. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void closeAndStroke() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: closeAndStroke is not allowed within a text block."); + } + writeOperator(OperatorName.CLOSE_AND_STROKE); + } + + /** + * Fills the path using the nonzero winding number rule. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void fill() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: fill is not allowed within a text block."); + } + writeOperator(OperatorName.FILL_NON_ZERO); + } + + /** + * Fills the path using the even-odd winding rule. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void fillEvenOdd() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: fillEvenOdd is not allowed within a text block."); + } + writeOperator(OperatorName.FILL_EVEN_ODD); + } + + /** + * Fill and then stroke the path, using the nonzero winding number rule to determine the region + * to fill. This shall produce the same result as constructing two identical path objects, + * painting the first with {@link #fill() } and the second with {@link #stroke() }. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void fillAndStroke() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: fillAndStroke is not allowed within a text block."); + } + writeOperator(OperatorName.FILL_NON_ZERO_AND_STROKE); + } + + /** + * Fill and then stroke the path, using the even-odd rule to determine the region to + * fill. This shall produce the same result as constructing two identical path objects, painting + * the first with {@link #fillEvenOdd() } and the second with {@link #stroke() }. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void fillAndStrokeEvenOdd() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: fillAndStrokeEvenOdd is not allowed within a text block."); + } + writeOperator(OperatorName.FILL_EVEN_ODD_AND_STROKE); + } + + /** + * Close, fill, and then stroke the path, using the nonzero winding number rule to determine the + * region to fill. This shall have the same effect as the sequence {@link #closePath() } + * and then {@link #fillAndStroke() }. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void closeAndFillAndStroke() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: closeAndFillAndStroke is not allowed within a text block."); + } + writeOperator(OperatorName.CLOSE_FILL_NON_ZERO_AND_STROKE); + } + + /** + * Close, fill, and then stroke the path, using the even-odd rule to determine the region to + * fill. This shall have the same effect as the sequence {@link #closePath() } + * and then {@link #fillAndStrokeEvenOdd() }. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void closeAndFillAndStrokeEvenOdd() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: closeAndFillAndStrokeEvenOdd is not allowed within a text block."); + } + writeOperator(OperatorName.CLOSE_FILL_EVEN_ODD_AND_STROKE); + } + + /** + * Fills the clipping area with the given shading. + * + * @param shading Shading resource + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void shadingFill(PDShading shading) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: shadingFill is not allowed within a text block."); + } + + writeOperand(resources.add(shading)); + writeOperator(OperatorName.SHADING_FILL); + } + + /** + * Closes the current subpath. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void closePath() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: closePath is not allowed within a text block."); + } + writeOperator(OperatorName.CLOSE_PATH); + } + + /** + * Intersects the current clipping path with the current path, using the nonzero rule. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void clip() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: clip is not allowed within a text block."); + } + writeOperator(OperatorName.CLIP_NON_ZERO); + + // end path without filling or stroking + writeOperator(OperatorName.ENDPATH); + } + + /** + * Intersects the current clipping path with the current path, using the even-odd rule. + * + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void clipEvenOdd() throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: clipEvenOdd is not allowed within a text block."); + } + writeOperator(OperatorName.CLIP_EVEN_ODD); + + // end path without filling or stroking + writeOperator(OperatorName.ENDPATH); + } + + /** + * Set line width to the given value. + * + * @param lineWidth The width which is used for drawing. + * @throws IOException If the content stream could not be written + * @throws IllegalStateException If the method was called within a text block. + */ + public void setLineWidth(float lineWidth) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: setLineWidth is not allowed within a text block."); + } + writeOperand(lineWidth); + writeOperator(OperatorName.SET_LINE_WIDTH); + } + + /** + * Set the line join style. + * + * @param lineJoinStyle 0 for miter join, 1 for round join, and 2 for bevel join. + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + * @throws IllegalArgumentException If the parameter is not a valid line join style. + */ + public void setLineJoinStyle(int lineJoinStyle) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: setLineJoinStyle is not allowed within a text block."); + } + if (lineJoinStyle >= 0 && lineJoinStyle <= 2) + { + writeOperand(lineJoinStyle); + writeOperator(OperatorName.SET_LINE_JOINSTYLE); + } + else + { + throw new IllegalArgumentException("Error: unknown value for line join style"); + } + } + + /** + * Set the line cap style. + * + * @param lineCapStyle 0 for butt cap, 1 for round cap, and 2 for projecting square cap. + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + * @throws IllegalArgumentException If the parameter is not a valid line cap style. + */ + public void setLineCapStyle(int lineCapStyle) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: setLineCapStyle is not allowed within a text block."); + } + if (lineCapStyle >= 0 && lineCapStyle <= 2) + { + writeOperand(lineCapStyle); + writeOperator(OperatorName.SET_LINE_CAPSTYLE); + } + else + { + throw new IllegalArgumentException("Error: unknown value for line cap style"); + } + } + + /** + * Set the line dash pattern. + * + * @param pattern The pattern array + * @param phase The phase of the pattern + * @throws IOException If the content stream could not be written. + * @throws IllegalStateException If the method was called within a text block. + */ + public void setLineDashPattern(float[] pattern, float phase) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: setLineDashPattern is not allowed within a text block."); + } + write("["); + for (float value : pattern) + { + writeOperand(value); + } + write("] "); + writeOperand(phase); + writeOperator(OperatorName.SET_LINE_DASHPATTERN); + } + + /** + * Set the miter limit. + * + * @param miterLimit the new miter limit. + * @throws IOException If the content stream could not be written. + */ + public void setMiterLimit(float miterLimit) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: setMiterLimit is not allowed within a text block."); + } + if (miterLimit <= 0.0) + { + throw new IllegalArgumentException("A miter limit <= 0 is invalid and will not render in Acrobat Reader"); + } + writeOperand(miterLimit); + writeOperator(OperatorName.SET_LINE_MITERLIMIT); + } + + /** + * Begin a marked content sequence. + * + * @param tag the tag + * @throws IOException If the content stream could not be written + */ + public void beginMarkedContent(COSName tag) throws IOException + { + writeOperand(tag); + writeOperator(OperatorName.BEGIN_MARKED_CONTENT); + } + + /** + * Begin a marked content sequence with a reference to an entry in the page resources' + * Properties dictionary. + * + * @param tag the tag + * @param propertyList property list + * @throws IOException If the content stream could not be written + */ + public void beginMarkedContent(COSName tag, PDPropertyList propertyList) throws IOException + { + writeOperand(tag); + writeOperand(resources.add(propertyList)); + writeOperator(OperatorName.BEGIN_MARKED_CONTENT_SEQ); + } + + /** + * End a marked content sequence. + * + * @throws IOException If the content stream could not be written + */ + public void endMarkedContent() throws IOException + { + writeOperator(OperatorName.END_MARKED_CONTENT); + } + + /** + * Set an extended graphics state. + * + * @param state The extended graphics state. + * @throws IOException If the content stream could not be written. + */ + public void setGraphicsStateParameters(PDExtendedGraphicsState state) throws IOException + { + writeOperand(resources.add(state)); + writeOperator(OperatorName.SET_GRAPHICS_STATE_PARAMS); + } + + /** + * Write a comment line. + * + * @param comment + * @throws IOException If the content stream could not be written. + * @throws IllegalArgumentException If the comment contains a newline. This is not allowed, + * because the next line could be ordinary PDF content. + */ + public void addComment(String comment) throws IOException + { + if (comment.indexOf('\n') >= 0 || comment.indexOf('\r') >= 0) + { + throw new IllegalArgumentException("comment should not include a newline"); + } + outputStream.write('%'); + outputStream.write(comment.getBytes(Charsets.US_ASCII)); + outputStream.write('\n'); + } + + /** + * Writes a real number to the content stream. + * @param real + * @throws java.io.IOException + */ + protected void writeOperand(float real) throws IOException + { + int byteCount = NumberFormatUtil.formatFloatFast(real, formatDecimal.getMaximumFractionDigits(), formatBuffer); + + if (byteCount == -1) + { + //Fast formatting failed + write(formatDecimal.format(real)); + } + else + { + outputStream.write(formatBuffer, 0, byteCount); + } + outputStream.write(' '); + } + + /** + * Writes an integer number to the content stream. + * @param integer + * @throws java.io.IOException + */ + protected void writeOperand(int integer) throws IOException + { + write(formatDecimal.format(integer)); + outputStream.write(' '); + } + + /** + * Writes a COSName to the content stream. + * @param name + * @throws java.io.IOException + */ + protected void writeOperand(COSName name) throws IOException + { + name.writePDF(outputStream); + outputStream.write(' '); + } + + /** + * Writes a string to the content stream as ASCII. + * @param text + * @throws java.io.IOException + */ + protected void writeOperator(String text) throws IOException + { + outputStream.write(text.getBytes(Charsets.US_ASCII)); + outputStream.write('\n'); + } + + /** + * Writes a string to the content stream as ASCII. + * @param text + * @throws java.io.IOException + */ + protected void write(String text) throws IOException + { + outputStream.write(text.getBytes(Charsets.US_ASCII)); + } + + /** + * Writes a byte[] to the content stream. + * @param data + * @throws java.io.IOException + */ + protected void write(byte[] data) throws IOException + { + outputStream.write(data); + } + + /** + * Writes a newline to the content stream as ASCII. + * @throws java.io.IOException + */ + protected void writeLine() throws IOException + { + outputStream.write('\n'); + } + + /** + * Writes binary data to the content stream. + * @param data + * @throws java.io.IOException + */ + protected void writeBytes(byte[] data) throws IOException + { + outputStream.write(data); + } + + /** + * Writes an AffineTransform to the content stream as an array. + */ + private void writeAffineTransform(AffineTransform transform) throws IOException + { + double[] values = new double[6]; + transform.getMatrix(values); + for (double v : values) + { + writeOperand((float) v); + } + } + + /** + * Close the content stream. This must be called when you are done with this object. + * + * @throws IOException If the underlying stream has a problem being written to. + */ + @Override + public void close() throws IOException + { + if (inTextMode) + { + LOG.warn("You did not call endText(), some viewers won't display your text"); + } + outputStream.close(); + } + + protected boolean isOutside255Interval(int val) + { + return val < 0 || val > 255; + } + + private boolean isOutsideOneInterval(double val) + { + return val < 0 || val > 1; + } + + protected void setStrokingColorSpaceStack(PDColorSpace colorSpace) + { + if (strokingColorSpaceStack.isEmpty()) + { + strokingColorSpaceStack.add(colorSpace); + } + else + { + strokingColorSpaceStack.pop(); + strokingColorSpaceStack.push(colorSpace); + } + } + + protected void setNonStrokingColorSpaceStack(PDColorSpace colorSpace) + { + if (nonStrokingColorSpaceStack.isEmpty()) + { + nonStrokingColorSpaceStack.add(colorSpace); + } + else + { + nonStrokingColorSpaceStack.pop(); + nonStrokingColorSpaceStack.push(colorSpace); + } + } + + /** + * Set the character spacing. The value shall be added to the horizontal or vertical component + * of the glyph's displacement, depending on the writing mode. + * + * @param spacing character spacing + * @throws IOException If the content stream could not be written. + */ + public void setCharacterSpacing(float spacing) throws IOException + { + writeOperand(spacing); + writeOperator(OperatorName.SET_CHAR_SPACING); + } + + /** + * Set the word spacing. The value shall be added to the horizontal or vertical component of the + * ASCII SPACE character, depending on the writing mode. + *

+ * This will have an effect only with Type1 and TrueType fonts, not with Type0 fonts. The PDF + * specification tells why: "Word spacing shall be applied to every occurrence of the + * single-byte character code 32 in a string when using a simple font or a composite font that + * defines code 32 as a single-byte code. It shall not apply to occurrences of the byte value 32 + * in multiple-byte codes." + * + * @param spacing word spacing + * @throws IOException If the content stream could not be written. + */ + public void setWordSpacing(float spacing) throws IOException + { + writeOperand(spacing); + writeOperator(OperatorName.SET_WORD_SPACING); + } + + /** + * Set the horizontal scaling to scale / 100. + * + * @param scale number specifying the percentage of the normal width. Default value: 100 (normal + * width). + * @throws IOException If the content stream could not be written. + */ + public void setHorizontalScaling(float scale) throws IOException + { + writeOperand(scale); + writeOperator(OperatorName.SET_TEXT_HORIZONTAL_SCALING); + } + + /** + * Set the text rendering mode. This determines whether showing text shall cause glyph outlines + * to be stroked, filled, used as a clipping boundary, or some combination of the three. + * + * @param rm The text rendering mode. + * @throws IOException If the content stream could not be written. + */ + public void setRenderingMode(RenderingMode rm) throws IOException + { + writeOperand(rm.intValue()); + writeOperator(OperatorName.SET_TEXT_RENDERINGMODE); + } + + /** + * Set the text rise value, i.e. move the baseline up or down. This is useful for drawing + * superscripts or subscripts. + * + * @param rise Specifies the distance, in unscaled text space units, to move the baseline up or + * down from its default location. 0 restores the default location. + * @throws IOException + */ + public void setTextRise(float rise) throws IOException + { + writeOperand(rise); + writeOperator(OperatorName.SET_TEXT_RISE); + } + + private byte[] encodeForGsub(GsubWorker gsubWorker, + Set glyphIds, PDType0Font font, String text) throws IOException + { + Pattern spaceRegex = Pattern.compile("\\s"); + + // break the entire chunk of text into words by splitting it with space + List words = new CompoundCharacterTokenizer("\\s").tokenize(text); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + for (String word : words) + { + if (spaceRegex.matcher(word).matches()) + { + out.write(font.encode(word)); + } + else + { + glyphIds.addAll(applyGSUBRules(gsubWorker, out, font, word)); + } + } + + return out.toByteArray(); + } + + private List applyGSUBRules(GsubWorker gsubWorker, ByteArrayOutputStream out, PDType0Font font, String word) throws IOException + { + List originalGlyphIds = new ArrayList<>(); + CmapLookup cmapLookup = font.getCmapLookup(); + + // convert characters into glyphIds + for (char unicodeChar : word.toCharArray()) + { + int glyphId = cmapLookup.getGlyphId(unicodeChar); + if (glyphId <= 0) + { + throw new IllegalStateException( + "could not find the glyphId for the character: " + unicodeChar); + } + originalGlyphIds.add(glyphId); + } + + List glyphIdsAfterGsub = gsubWorker.applyTransforms(originalGlyphIds); + + for (Integer glyphId : glyphIdsAfterGsub) + { + out.write(font.encodeGlyphId(glyphId)); + } + + return glyphIdsAfterGsub; + + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java new file mode 100644 index 00000000000..6a834305b53 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java @@ -0,0 +1,279 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.Closeable; +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSArray; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; + +/** + * Provides the ability to write to an appearance content stream. + * + * @author Ben Litchfield + */ +public final class PDAppearanceContentStream extends PDAbstractContentStream implements Closeable +{ + /** + * Create a new appearance stream. + * + * @param appearance + * The appearance stream to write to. + * @throws IOException If there is an error writing to the content stream. + */ + public PDAppearanceContentStream(PDAppearanceStream appearance) throws IOException + { + this(appearance, appearance.getStream().createOutputStream()); + } + + /** + * Create a new appearance stream. + * + * @param appearance The appearance stream to write to. + * @param compress whether the content stream is to be compressed. Set this to true when + * creating long content streams. + * @throws IOException If there is an error writing to the content stream. + */ + public PDAppearanceContentStream(PDAppearanceStream appearance, boolean compress) throws IOException + { + this(appearance, appearance.getStream().createOutputStream(compress ? COSName.FLATE_DECODE : null)); + } + + /** + * Create a new appearance stream. + * + * @param appearance + * The appearance stream to add to. + * @param outputStream + * The appearances output stream to write to. + */ + public PDAppearanceContentStream(PDAppearanceStream appearance, OutputStream outputStream) + { + super(null, outputStream, appearance.getResources()); + } + + /** + * Set the stroking color. + * + *

+ * The command is only emitted if the color is not null and the number of + * components is > 0. + * + * @param color The colorspace to write. + * @throws IOException If there is an error writing to the content stream. + * @see PDAbstractContentStream#setStrokingColor(PDColor) + */ + public boolean setStrokingColorOnDemand(PDColor color) throws IOException + { + if (color != null) + { + float[] components = color.getComponents(); + if (components.length > 0) + { + setStrokingColor(components); + return true; + } + } + return false; + } + + /** + * Set the stroking color. + * + * @see PDAbstractContentStream#setStrokingColor(java.awt.Color) + * @param components + * the color components dependent on the color space being used. + * @throws IOException If there is an error writing to the content stream. + */ + public void setStrokingColor(float[] components) throws IOException + { + for (float value : components) + { + writeOperand(value); + } + + int numComponents = components.length; + switch (numComponents) + { + case 1: + writeOperator(OperatorName.STROKING_COLOR_GRAY); + break; + case 3: + writeOperator(OperatorName.STROKING_COLOR_RGB); + break; + case 4: + writeOperator(OperatorName.STROKING_COLOR_CMYK); + break; + default: + break; + } + //TODO shouldn't we set the stack? + //Or call the appropriate setStrokingColor() method from the base class? + } + + /** + * Set the non stroking color. + * + *

+ * The command is only emitted if the color is not null and the number of + * components is > 0. + * + * @param color The colorspace to write. + * @throws IOException If there is an error writing to the content stream. + * @see PDAbstractContentStream#setNonStrokingColor(PDColor) + */ + public boolean setNonStrokingColorOnDemand(PDColor color) throws IOException + { + if (color != null) + { + float[] components = color.getComponents(); + if (components.length > 0) + { + setNonStrokingColor(components); + return true; + } + } + return false; + } + + /** + * Set the non stroking color. + * + * @see PDAbstractContentStream#setNonStrokingColor(java.awt.Color) + * @param components + * the color components dependent on the color space being used. + * @throws IOException If there is an error writing to the content stream. + */ + public void setNonStrokingColor(float[] components) throws IOException + { + for (float value : components) + { + writeOperand(value); + } + + int numComponents = components.length; + switch (numComponents) + { + case 1: + writeOperator(OperatorName.NON_STROKING_GRAY); + break; + case 3: + writeOperator(OperatorName.NON_STROKING_RGB); + break; + case 4: + writeOperator(OperatorName.NON_STROKING_CMYK); + break; + default: + break; + } + //TODO shouldn't we set the stack? + //Or call the appropriate setNonStrokingColor() method from the base class? + } + + /** + * Convenience method for annotations: sets the line with and dash style. + * + * @param lineWidth The line width. + * @param bs The border style, may be null. + * @param border The border array, must have at least three entries. This is + * only used if the border style is null. + * + * @throws IOException If there is an error writing to the content stream. + */ + public void setBorderLine(float lineWidth, PDBorderStyleDictionary bs, + COSArray border) throws IOException + { + // Can't use PDBorderStyleDictionary.getDashStyle() as + // this will return a default dash style if non is existing + if (bs != null && bs.getCOSObject().containsKey(COSName.D) && + bs.getStyle().equals(PDBorderStyleDictionary.STYLE_DASHED)) + { + setLineDashPattern(bs.getDashStyle().getDashArray(), 0); + } + else if (bs == null && border.size() > 3 && border.getObject(3) instanceof COSArray) + { + setLineDashPattern(((COSArray) border.getObject(3)).toFloatArray(), 0); + } + setLineWidthOnDemand(lineWidth); + } + + /** + * Sets the line width. The command is only emitted if the lineWidth is + * different to 1. + * + * @param lineWidth the line width of the path. + * @throws IOException If there is an error writing to the content stream. + * @see PDAbstractContentStream#setLineWidth(float) + */ + public void setLineWidthOnDemand(float lineWidth) throws IOException + { + // Acrobat doesn't write a line width command + // for a line width of 1 as this is default. + // Will do the same. + if (!(Math.abs(lineWidth - 1) < 1e-6)) + { + setLineWidth(lineWidth); + } + } + + /** + * Draw a shape. + * + *

+ * Dependent on the lineWidth and whether or not there is a background to be generated there are + * different commands to be used for draw a shape. + * + * @param lineWidth the line width of the path. + * @param hasStroke shall there be a stroking color. + * @param hasFill shall there be a fill color. + * @throws IOException If there is an error writing to the content stream. + */ + public void drawShape(float lineWidth, boolean hasStroke, boolean hasFill) throws IOException + { + // initial setting if stroking shall be done + boolean resolvedHasStroke = hasStroke; + + // no stroking for very small lines + if (lineWidth < 1e-6) + { + resolvedHasStroke = false; + } + if (hasFill && resolvedHasStroke) + { + fillAndStroke(); + } + else if (resolvedHasStroke) + { + stroke(); + } + else if (hasFill) + { + fill(); + } + else + { + writeOperator(OperatorName.ENDPATH); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java new file mode 100644 index 00000000000..9544ed726be --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDestinationNameTreeNode.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; + +/** + * This class holds all of the name trees that are available at the document level. + * + * @author Ben Litchfield + */ +public class PDDestinationNameTreeNode extends PDNameTreeNode +{ + /** + * Constructor. + */ + public PDDestinationNameTreeNode() + { + super(); + } + + /** + * Constructor. + * + * @param dic The COS dictionary. + */ + public PDDestinationNameTreeNode( COSDictionary dic ) + { + super(dic); + } + + @Override + protected PDPageDestination convertCOSToPD( COSBase base ) throws IOException + { + COSBase destination = base; + if( base instanceof COSDictionary ) + { + //the destination is sometimes stored in the D dictionary + //entry instead of being directly an array, so just dereference + //it for now + destination = ((COSDictionary)base).getDictionaryObject( COSName.D ); + } + return (PDPageDestination)PDDestination.create( destination ); + } + + @Override + protected PDNameTreeNode createChildNode( COSDictionary dic ) + { + return new PDDestinationNameTreeNode(dic); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java new file mode 100644 index 00000000000..fdff96bcb7c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java @@ -0,0 +1,1608 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.awt.Point; +import java.awt.image.DataBuffer; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.BufferedOutputStream; +import java.io.Closeable; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSUpdateInfo; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.io.RandomAccessBuffer; +import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.io.ScratchFile; +import org.apache.pdfbox.pdfparser.PDFParser; +import org.apache.pdfbox.pdfwriter.COSWriter; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; +import org.apache.pdfbox.pdmodel.encryption.PDEncryption; +import org.apache.pdfbox.pdmodel.encryption.ProtectionPolicy; +import org.apache.pdfbox.pdmodel.encryption.SecurityHandler; +import org.apache.pdfbox.pdmodel.encryption.SecurityHandlerFactory; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.ExternalSigningSupport; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SigningSupport; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; + +/** + * This is the in-memory representation of the PDF document. + * The #close() method must be called once the document is no longer needed. + * + * @author Ben Litchfield + */ +public class PDDocument implements Closeable +{ + /** + * For signing: large reserve byte range used as placeholder in the saved PDF until the actual + * length of the PDF is known. You'll need to fetch (with + * {@link PDSignature#getByteRange()} ) and reassign this yourself (with + * {@link PDSignature#setByteRange(int[])} ) only if you call + * {@link #saveIncrementalForExternalSigning(java.io.OutputStream) saveIncrementalForExternalSigning()} + * twice. + */ + private static final int[] RESERVE_BYTE_RANGE = new int[] { 0, 1000000000, 1000000000, 1000000000 }; + + private static final Log LOG = LogFactory.getLog(PDDocument.class); + + /** + * avoid concurrency issues with PDDeviceRGB + */ + static + { + try + { + WritableRaster raster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE, 1, 1, 3, new Point(0, 0)); + PDDeviceRGB.INSTANCE.toRGBImage(raster); + } + catch (IOException ex) + { + LOG.debug("voodoo error", ex); + } + } + + private final COSDocument document; + + // cached values + private PDDocumentInformation documentInformation; + private PDDocumentCatalog documentCatalog; + + // the encryption will be cached here. When the document is decrypted then + // the COSDocument will not have an "Encrypt" dictionary anymore and this object must be used + private PDEncryption encryption; + + // holds a flag which tells us if we should remove all security from this documents. + private boolean allSecurityToBeRemoved; + + // keep tracking customized documentId for the trailer. If null, a new id will be generated + // this ID doesn't represent the actual documentId from the trailer + private Long documentId; + + // the pdf to be read + private final RandomAccessRead pdfSource; + + // the access permissions of the document + private AccessPermission accessPermission; + + // fonts to subset before saving + private final Set fontsToSubset = new HashSet<>(); + + // fonts to close when closing document + private final Set fontsToClose = new HashSet<>(); + + // Signature interface + private SignatureInterface signInterface; + + // helper class used to create external signature + private SigningSupport signingSupport; + + // document-wide cached resources + private ResourceCache resourceCache = new DefaultResourceCache(); + + // to make sure only one signature is added + private boolean signatureAdded = false; + + /** + * Creates an empty PDF document. + * You need to add at least one page for the document to be valid. + */ + public PDDocument() + { + this(MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Creates an empty PDF document. + * You need to add at least one page for the document to be valid. + * + * @param memUsageSetting defines how memory is used for buffering PDF streams + */ + public PDDocument(MemoryUsageSetting memUsageSetting) + { + ScratchFile scratchFile = null; + try + { + scratchFile = new ScratchFile(memUsageSetting); + } + catch (IOException ioe) + { + LOG.warn("Error initializing scratch file: " + ioe.getMessage() + + ". Fall back to main memory usage only.", ioe); + + scratchFile = ScratchFile.getMainMemoryOnlyInstance(); + } + + document = new COSDocument(scratchFile); + pdfSource = null; + + // First we need a trailer + COSDictionary trailer = new COSDictionary(); + document.setTrailer(trailer); + + // Next we need the root dictionary. + COSDictionary rootDictionary = new COSDictionary(); + trailer.setItem(COSName.ROOT, rootDictionary); + rootDictionary.setItem(COSName.TYPE, COSName.CATALOG); + rootDictionary.setItem(COSName.VERSION, COSName.getPDFName("1.4")); + + // next we need the pages tree structure + COSDictionary pages = new COSDictionary(); + rootDictionary.setItem(COSName.PAGES, pages); + pages.setItem(COSName.TYPE, COSName.PAGES); + COSArray kidsArray = new COSArray(); + pages.setItem(COSName.KIDS, kidsArray); + pages.setItem(COSName.COUNT, COSInteger.ZERO); + } + + /** + * This will add a page to the document. This is a convenience method, that will add the page to the root of the + * hierarchy and set the parent of the page to the root. + * + * @param page The page to add to the document. + */ + public void addPage(PDPage page) + { + getPages().add(page); + } + + /** + * Add parameters of signature to be created externally using default signature options. See + * {@link #saveIncrementalForExternalSigning(OutputStream)} method description on external + * signature creation scenario details. + *

+ * Only one signature may be added in a document. To sign several times, + * load document, add signature, save incremental and close again. + * + * @param sigObject is the PDSignatureField model + * @throws IOException if there is an error creating required fields + * @throws IllegalStateException if one attempts to add several signature + * fields. + */ + public void addSignature(PDSignature sigObject) throws IOException + { + addSignature(sigObject, new SignatureOptions()); + } + + /** + * Add parameters of signature to be created externally. See + * {@link #saveIncrementalForExternalSigning(OutputStream)} method description on external + * signature creation scenario details. + *

+ * Only one signature may be added in a document. To sign several times, + * load document, add signature, save incremental and close again. + * + * @param sigObject is the PDSignatureField model + * @param options signature options + * @throws IOException if there is an error creating required fields + * @throws IllegalStateException if one attempts to add several signature + * fields. + */ + public void addSignature(PDSignature sigObject, SignatureOptions options) throws IOException + { + addSignature(sigObject, null, options); + } + + /** + * Add a signature to be created using the instance of given interface. + *

+ * Only one signature may be added in a document. To sign several times, + * load document, add signature, save incremental and close again. + * + * @param sigObject is the PDSignatureField model + * @param signatureInterface is an interface whose implementation provides + * signing capabilities. Can be null if external signing if used. + * @throws IOException if there is an error creating required fields + * @throws IllegalStateException if one attempts to add several signature + * fields. + */ + public void addSignature(PDSignature sigObject, SignatureInterface signatureInterface) throws IOException + { + addSignature(sigObject, signatureInterface, new SignatureOptions()); + } + + /** + * This will add a signature to the document. If the 0-based page number in the options + * parameter is smaller than 0 or larger than max, the nearest valid page number will be used + * (i.e. 0 or max) and no exception will be thrown. + *

+ * Only one signature may be added in a document. To sign several times, + * load document, add signature, save incremental and close again. + * + * @param sigObject is the PDSignatureField model + * @param signatureInterface is an interface whose implementation provides + * signing capabilities. Can be null if external signing if used. + * @param options signature options + * @throws IOException if there is an error creating required fields + * @throws IllegalStateException if one attempts to add several signature + * fields. + */ + public void addSignature(PDSignature sigObject, SignatureInterface signatureInterface, + SignatureOptions options) throws IOException + { + if (signatureAdded) + { + throw new IllegalStateException("Only one signature may be added in a document"); + } + signatureAdded = true; + + // Reserve content + // We need to reserve some space for the signature. Some signatures including + // big certificate chain and we need enough space to store it. + int preferredSignatureSize = options.getPreferredSignatureSize(); + if (preferredSignatureSize > 0) + { + sigObject.setContents(new byte[preferredSignatureSize]); + } + else + { + sigObject.setContents(new byte[SignatureOptions.DEFAULT_SIGNATURE_SIZE]); + } + + // Reserve ByteRange, will be overwritten in COSWriter + sigObject.setByteRange(RESERVE_BYTE_RANGE); + + signInterface = signatureInterface; + + // Create SignatureForm for signature and append it to the document + + // Get the first valid page + int pageCount = getNumberOfPages(); + if (pageCount == 0) + { + throw new IllegalStateException("Cannot sign an empty document"); + } + + int startIndex = Math.min(Math.max(options.getPage(), 0), pageCount - 1); + PDPage page = getPage(startIndex); + + // Get the AcroForm from the Root-Dictionary and append the annotation + PDDocumentCatalog catalog = getDocumentCatalog(); + PDAcroForm acroForm = catalog.getAcroForm(); + catalog.getCOSObject().setNeedToBeUpdated(true); + + if (acroForm == null) + { + acroForm = new PDAcroForm(this); + catalog.setAcroForm(acroForm); + } + else + { + acroForm.getCOSObject().setNeedToBeUpdated(true); + } + + PDSignatureField signatureField = null; + if (!(acroForm.getCOSObject().getDictionaryObject(COSName.FIELDS) instanceof COSArray)) + { + acroForm.getCOSObject().setItem(COSName.FIELDS, new COSArray()); + } + else + { + COSArray fieldArray = (COSArray) acroForm.getCOSObject().getDictionaryObject(COSName.FIELDS); + fieldArray.setNeedToBeUpdated(true); + signatureField = findSignatureField(acroForm.getFieldIterator(), sigObject); + } + if (signatureField == null) + { + signatureField = new PDSignatureField(acroForm); + // append the signature object + signatureField.setValue(sigObject); + // backward linking + signatureField.getWidgets().get(0).setPage(page); + } + else + { + sigObject.getCOSObject().setNeedToBeUpdated(true); + } + + // TODO This "overwrites" the settings of the original signature field which might not be intended by the user + // better make it configurable (not all users need/want PDF/A but their own setting): + + // to conform PDF/A-1 requirement: + // The /F key's Print flag bit shall be set to 1 and + // its Hidden, Invisible and NoView flag bits shall be set to 0 + signatureField.getWidgets().get(0).setPrinted(true); + + // Set the AcroForm Fields + List acroFormFields = acroForm.getFields(); + acroForm.getCOSObject().setDirect(true); + acroForm.setSignaturesExist(true); + acroForm.setAppendOnly(true); + + boolean checkFields = checkSignatureField(acroForm.getFieldIterator(), signatureField); + if (checkFields) + { + signatureField.getCOSObject().setNeedToBeUpdated(true); + } + else + { + acroFormFields.add(signatureField); + } + + // Get the object from the visual signature + COSDocument visualSignature = options.getVisualSignature(); + + // Distinction of case for visual and non-visual signature + if (visualSignature == null) + { + prepareNonVisibleSignature(signatureField); + return; + } + + prepareVisibleSignature(signatureField, acroForm, visualSignature); + + // Create Annotation / Field for signature + List annotations = page.getAnnotations(); + + // Make /Annots a direct object to avoid problem if it is an existing indirect object: + // it would not be updated in incremental save, and if we'd set the /Annots array "to be updated" + // while keeping it indirect, Adobe Reader would claim that the document had been modified. + page.setAnnotations(annotations); + + // Get the annotations of the page and append the signature-annotation to it + // take care that page and acroforms do not share the same array (if so, we don't need to add it twice) + if (!(annotations instanceof COSArrayList && + acroFormFields instanceof COSArrayList && + ((COSArrayList) annotations).toList().equals(((COSArrayList) acroFormFields).toList()) && + checkFields)) + { + PDAnnotationWidget widget = signatureField.getWidgets().get(0); + // use check to prevent the annotation widget from appearing twice + if (checkSignatureAnnotation(annotations, widget)) + { + widget.getCOSObject().setNeedToBeUpdated(true); + } + else + { + annotations.add(widget); + } + } + page.getCOSObject().setNeedToBeUpdated(true); + } + + /** + * Search acroform fields for signature field with specific signature dictionary. + * + * @param fieldIterator iterator on all fields. + * @param sigObject signature object (the /V part). + * @return a signature field if found, or null if none was found. + */ + private PDSignatureField findSignatureField(Iterator fieldIterator, PDSignature sigObject) + { + PDSignatureField signatureField = null; + while (fieldIterator.hasNext()) + { + PDField pdField = fieldIterator.next(); + if (pdField instanceof PDSignatureField) + { + PDSignature signature = ((PDSignatureField) pdField).getSignature(); + if (signature != null && signature.getCOSObject().equals(sigObject.getCOSObject())) + { + signatureField = (PDSignatureField) pdField; + } + } + } + return signatureField; + } + + /** + * Check if the field already exists in the field list. + * + * @param fieldIterator iterator on all fields. + * @param signatureField the signature field. + * @return true if the field already existed in the field list, false if not. + */ + private boolean checkSignatureField(Iterator fieldIterator, PDSignatureField signatureField) + { + while (fieldIterator.hasNext()) + { + PDField field = fieldIterator.next(); + if (field instanceof PDSignatureField + && field.getCOSObject().equals(signatureField.getCOSObject())) + { + return true; + } + } + return false; + } + + /** + * Check if the widget already exists in the annotation list + * + * @param acroFormFields the list of AcroForm fields. + * @param signatureField the signature field. + * @return true if the widget already existed in the annotation list, false if not. + */ + private boolean checkSignatureAnnotation(List annotations, PDAnnotationWidget widget) + { + for (PDAnnotation annotation : annotations) + { + if (annotation.getCOSObject().equals(widget.getCOSObject())) + { + return true; + } + } + return false; + } + + private void prepareVisibleSignature(PDSignatureField signatureField, PDAcroForm acroForm, + COSDocument visualSignature) + { + // Obtain visual signature object + boolean annotNotFound = true; + boolean sigFieldNotFound = true; + for (COSObject cosObject : visualSignature.getObjects()) + { + if (!annotNotFound && !sigFieldNotFound) + { + break; + } + + COSBase base = cosObject.getObject(); + if (base instanceof COSDictionary) + { + COSDictionary cosBaseDict = (COSDictionary) base; + + // Search for signature annotation + COSBase type = cosBaseDict.getDictionaryObject(COSName.TYPE); + if (annotNotFound && COSName.ANNOT.equals(type)) + { + assignSignatureRectangle(signatureField, cosBaseDict); + annotNotFound = false; + } + + // Search for signature field + COSBase fieldType = cosBaseDict.getDictionaryObject(COSName.FT); + COSBase apDict = cosBaseDict.getDictionaryObject(COSName.AP); + if (sigFieldNotFound && COSName.SIG.equals(fieldType) && apDict instanceof COSDictionary) + { + assignAppearanceDictionary(signatureField, (COSDictionary) apDict); + assignAcroFormDefaultResource(acroForm, cosBaseDict); + sigFieldNotFound = false; + } + } + } + + if (annotNotFound || sigFieldNotFound) + { + throw new IllegalArgumentException("Template is missing required objects"); + } + } + + private void assignSignatureRectangle(PDSignatureField signatureField, COSDictionary annotDict) + { + // Read and set the rectangle for visual signature + COSArray rectArray = (COSArray) annotDict.getDictionaryObject(COSName.RECT); + PDRectangle rect = new PDRectangle(rectArray); + PDRectangle existingRectangle = signatureField.getWidgets().get(0).getRectangle(); + + //in case of an existing field keep the original rect + if (existingRectangle == null || existingRectangle.getCOSArray().size() != 4) + { + signatureField.getWidgets().get(0).setRectangle(rect); + } + } + + private void assignAppearanceDictionary(PDSignatureField signatureField, COSDictionary apDict) + { + // read and set Appearance Dictionary + PDAppearanceDictionary ap = new PDAppearanceDictionary(apDict); + apDict.setDirect(true); + signatureField.getWidgets().get(0).setAppearance(ap); + } + + private void assignAcroFormDefaultResource(PDAcroForm acroForm, COSDictionary newDict) + { + // read and set/update AcroForm default resource dictionary /DR if available + COSBase newBase = newDict.getDictionaryObject(COSName.DR); + if (newBase instanceof COSDictionary) + { + COSDictionary newDR = (COSDictionary) newBase; + PDResources defaultResources = acroForm.getDefaultResources(); + if (defaultResources == null) + { + acroForm.getCOSObject().setItem(COSName.DR, newDR); + newDR.setDirect(true); + newDR.setNeedToBeUpdated(true); + } + else + { + COSDictionary oldDR = defaultResources.getCOSObject(); + COSBase newXObjectBase = newDR.getItem(COSName.XOBJECT); + COSBase oldXObjectBase = oldDR.getItem(COSName.XOBJECT); + if (newXObjectBase instanceof COSDictionary && + oldXObjectBase instanceof COSDictionary) + { + ((COSDictionary) oldXObjectBase).addAll((COSDictionary) newXObjectBase); + oldDR.setNeedToBeUpdated(true); + } + } + } + } + + private void prepareNonVisibleSignature(PDSignatureField signatureField) + { + // "Signature fields that are not intended to be visible shall + // have an annotation rectangle that has zero height and width." + // Set rectangle for non-visual signature to rectangle array [ 0 0 0 0 ] + signatureField.getWidgets().get(0).setRectangle(new PDRectangle()); + } + + /** + * Remove the page from the document. + * + * @param page The page to remove from the document. + */ + public void removePage(PDPage page) + { + getPages().remove(page); + } + + /** + * Remove the page from the document. + * + * @param pageNumber 0 based index to page number. + */ + public void removePage(int pageNumber) + { + getPages().remove(pageNumber); + } + + /** + * This will import and copy the contents from another location. Currently the content stream is + * stored in a scratch file. The scratch file is associated with the document. If you are adding + * a page to this document from another document and want to copy the contents to this + * document's scratch file then use this method otherwise just use the {@link #addPage addPage()} + * method. + *

+ * Unlike {@link #addPage addPage()}, this method creates a new PDPage object. If your page has + * annotations, and if these link to pages not in the target document, then the target document + * might become huge. What you need to do is to delete page references of such annotations. See + * here for how to do this. + *

+ * Inherited (global) resources are ignored because these can contain resources not needed for + * this page which could bloat your document, see + * PDFBOX-28 and related issues. + * If you need them, call importedPage.setResources(page.getResources()); + *

+ * This method should only be used to import a page from a loaded document, not from a generated + * document because these can contain unfinished parts, e.g. font subsetting information. + * + * @param page The page to import. + * @return The page that was imported. + * + * @throws IOException If there is an error copying the page. + */ + public PDPage importPage(PDPage page) throws IOException + { + PDPage importedPage = new PDPage(new COSDictionary(page.getCOSObject()), resourceCache); + PDStream dest = new PDStream(this, page.getContents(), COSName.FLATE_DECODE); + importedPage.setContents(dest); + addPage(importedPage); + importedPage.setCropBox(page.getCropBox()); + importedPage.setMediaBox(page.getMediaBox()); + importedPage.setRotation(page.getRotation()); + if (page.getResources() != null && !page.getCOSObject().containsKey(COSName.RESOURCES)) + { + LOG.warn("inherited resources of source document are not imported to destination page"); + LOG.warn("call importedPage.setResources(page.getResources()) to do this"); + } + return importedPage; + } + + /** + * Constructor that uses an existing document. The COSDocument that is passed in must be valid. + * + * @param doc The COSDocument that this document wraps. + */ + public PDDocument(COSDocument doc) + { + this(doc, null); + } + + /** + * Constructor that uses an existing document. The COSDocument that is passed in must be valid. + * + * @param doc The COSDocument that this document wraps. + * @param source the parser which is used to read the pdf + */ + public PDDocument(COSDocument doc, RandomAccessRead source) + { + this(doc, source, null); + } + + /** + * Constructor that uses an existing document. The COSDocument that is passed in must be valid. + * + * @param doc The COSDocument that this document wraps. + * @param source the parser which is used to read the pdf + * @param permission he access permissions of the pdf + * + */ + public PDDocument(COSDocument doc, RandomAccessRead source, AccessPermission permission) + { + document = doc; + pdfSource = source; + accessPermission = permission; + } + + /** + * This will get the low level document. + * + * @return The document that this layer sits on top of. + */ + public COSDocument getDocument() + { + return document; + } + + /** + * This will get the document info dictionary. If it doesn't exist, an empty document info + * dictionary is created in the document trailer. + * + * @return The documents /Info dictionary, never null. + */ + public PDDocumentInformation getDocumentInformation() + { + if (documentInformation == null) + { + COSDictionary trailer = document.getTrailer(); + COSDictionary infoDic = trailer.getCOSDictionary(COSName.INFO); + if (infoDic == null) + { + infoDic = new COSDictionary(); + trailer.setItem(COSName.INFO, infoDic); + } + documentInformation = new PDDocumentInformation(infoDic); + } + return documentInformation; + } + + /** + * This will set the document information for this document. + * + * @param info The updated document information. + */ + public void setDocumentInformation(PDDocumentInformation info) + { + documentInformation = info; + document.getTrailer().setItem(COSName.INFO, info.getCOSObject()); + } + + /** + * This will get the document CATALOG. This is guaranteed to not return null. + * + * @return The documents /Root dictionary + */ + public PDDocumentCatalog getDocumentCatalog() + { + if (documentCatalog == null) + { + COSDictionary trailer = document.getTrailer(); + COSBase dictionary = trailer.getDictionaryObject(COSName.ROOT); + if (dictionary instanceof COSDictionary) + { + documentCatalog = new PDDocumentCatalog(this, (COSDictionary) dictionary); + } + else + { + documentCatalog = new PDDocumentCatalog(this); + } + } + return documentCatalog; + } + + /** + * This will tell if this document is encrypted or not. + * + * @return true If this document is encrypted. + */ + public boolean isEncrypted() + { + return document.isEncrypted(); + } + + /** + * This will get the encryption dictionary for this document. This will still return the parameters if the document + * was decrypted. As the encryption architecture in PDF documents is plugable this returns an abstract class, + * but the only supported subclass at this time is a + * PDStandardEncryption object. + * + * @return The encryption dictionary(most likely a PDStandardEncryption object) + */ + public PDEncryption getEncryption() + { + if (encryption == null && isEncrypted()) + { + encryption = new PDEncryption(document.getEncryptionDictionary()); + } + return encryption; + } + + /** + * This will set the encryption dictionary for this document. + * + * @param encryption The encryption dictionary(most likely a PDStandardEncryption object) + */ + public void setEncryptionDictionary(PDEncryption encryption) + { + this.encryption = encryption; + } + + /** + * This will return the last signature from the field tree. Note that this may not be the + * last in time when empty signature fields are created first but signed after other fields. + * + * @return the last signature as PDSignatureField. + */ + public PDSignature getLastSignatureDictionary() + { + List signatureDictionaries = getSignatureDictionaries(); + int size = signatureDictionaries.size(); + if (size > 0) + { + return signatureDictionaries.get(size - 1); + } + return null; + } + + /** + * Retrieve all signature fields from the document. + * + * @return a List of PDSignatureFields + */ + public List getSignatureFields() + { + List fields = new ArrayList<>(); + PDAcroForm acroForm = getDocumentCatalog().getAcroForm(); + if (acroForm != null) + { + for (PDField field : acroForm.getFieldTree()) + { + if (field instanceof PDSignatureField) + { + fields.add((PDSignatureField)field); + } + } + } + return fields; + } + + /** + * Retrieve all signature dictionaries from the document. + * + * @return a List of PDSignatureFields + */ + public List getSignatureDictionaries() + { + List signatures = new ArrayList<>(); + for (PDSignatureField field : getSignatureFields()) + { + COSBase value = field.getCOSObject().getDictionaryObject(COSName.V); + if (value instanceof COSDictionary) + { + signatures.add(new PDSignature((COSDictionary)value)); + } + } + return signatures; + } + + /** + * For internal PDFBox use when creating PDF documents: register a TrueTypeFont to make sure it + * is closed when the PDDocument is closed to avoid memory leaks. Users don't have to call this + * method, it is done by the appropriate PDFont classes. + * + * @param ttf + */ + public void registerTrueTypeFontForClosing(TrueTypeFont ttf) + { + fontsToClose.add(ttf); + } + + /** + * Returns the list of fonts which will be subset before the document is saved. + */ + Set getFontsToSubset() + { + return fontsToSubset; + } + + /** + * Parses a PDF. Unrestricted main memory will be used for buffering PDF streams. + * + * @param file file to be loaded + * + * @return loaded document + * + * @throws InvalidPasswordException If the file required a non-empty password. + * @throws IOException in case of a file reading or parsing error + */ + public static PDDocument load(File file) throws InvalidPasswordException, IOException + { + return load(file, "", MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. + * + * @param file file to be loaded + * @param memUsageSetting defines how memory is used for buffering PDF streams + * + * @return loaded document + * + * @throws InvalidPasswordException If the file required a non-empty password. + * @throws IOException in case of a file reading or parsing error + */ + public static PDDocument load(File file, MemoryUsageSetting memUsageSetting) + throws InvalidPasswordException, IOException + { + return load(file, "", null, null, memUsageSetting); + } + + /** + * Parses a PDF. Unrestricted main memory will be used for buffering PDF streams. + * + * @param file file to be loaded + * @param password password to be used for decryption + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException in case of a file reading or parsing error + */ + public static PDDocument load(File file, String password) + throws InvalidPasswordException, IOException + { + return load(file, password, null, null, MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. + * + * @param file file to be loaded + * @param password password to be used for decryption + * @param memUsageSetting defines how memory is used for buffering PDF streams + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException in case of a file reading or parsing error + */ + public static PDDocument load(File file, String password, MemoryUsageSetting memUsageSetting) + throws InvalidPasswordException, IOException + { + return load(file, password, null, null, memUsageSetting); + } + + /** + * Parses a PDF. Unrestricted main memory will be used for buffering PDF streams. + * + * @param file file to be loaded + * @param password password to be used for decryption + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * + * @return loaded document + * + * @throws IOException in case of a file reading or parsing error + */ + public static PDDocument load(File file, String password, InputStream keyStore, String alias) + throws IOException + { + return load(file, password, keyStore, alias, MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. + * + * @param file file to be loaded + * @param password password to be used for decryption + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * @param memUsageSetting defines how memory is used for buffering PDF streams + * + * @return loaded document + * + * @throws IOException in case of a file reading or parsing error + */ + public static PDDocument load(File file, String password, InputStream keyStore, String alias, + MemoryUsageSetting memUsageSetting) throws IOException + { + RandomAccessBufferedFileInputStream raFile = new RandomAccessBufferedFileInputStream(file); + try + { + ScratchFile scratchFile = new ScratchFile(memUsageSetting); + try + { + PDFParser parser = new PDFParser(raFile, password, keyStore, alias, scratchFile); + parser.parse(); + return parser.getPDDocument(); + } + catch (IOException ioe) + { + IOUtils.closeQuietly(scratchFile); + throw ioe; + } + } + catch (IOException ioe) + { + IOUtils.closeQuietly(raFile); + throw ioe; + } + } + + /** + * Parses a PDF. The given input stream is copied to the memory to enable random access to the + * pdf. Unrestricted main memory will be used for buffering PDF streams. + * + * @param input stream that contains the document. Don't forget to close it after loading. + * + * @return loaded document + * + * @throws InvalidPasswordException If the PDF required a non-empty password. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(InputStream input) throws InvalidPasswordException, IOException + { + return load(input, "", null, null, MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. Depending on the memory settings parameter the given input stream is either + * copied to main memory or to a temporary file to enable random access to the pdf. + * + * @param input stream that contains the document. Don't forget to close it after loading. + * @param memUsageSetting defines how memory is used for buffering input stream and PDF streams + * + * @return loaded document + * + * @throws InvalidPasswordException If the PDF required a non-empty password. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(InputStream input, MemoryUsageSetting memUsageSetting) + throws InvalidPasswordException, IOException + { + return load(input, "", null, null, memUsageSetting); + } + + /** + * Parses a PDF. The given input stream is copied to the memory to enable random access to the + * pdf. Unrestricted main memory will be used for buffering PDF streams. + * + * @param input stream that contains the document. Don't forget to close it after loading. + * @param password password to be used for decryption + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(InputStream input, String password) + throws InvalidPasswordException, IOException + { + return load(input, password, null, null, MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. The given input stream is copied to the memory to enable random access to the + * pdf. Unrestricted main memory will be used for buffering PDF streams. + * + * @param input stream that contains the document. Don't forget to close it after loading. + * @param password password to be used for decryption + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * + * @return loaded document + * + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(InputStream input, String password, InputStream keyStore, String alias) + throws IOException + { + return load(input, password, keyStore, alias, MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. Depending on the memory settings parameter the given input stream is either + * copied to main memory or to a temporary file to enable random access to the pdf. + * + * @param input stream that contains the document. Don't forget to close it after loading. + * @param password password to be used for decryption + * @param memUsageSetting defines how memory is used for buffering input stream and PDF streams + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(InputStream input, String password, MemoryUsageSetting memUsageSetting) + throws InvalidPasswordException, IOException + { + return load(input, password, null, null, memUsageSetting); + } + + /** + * Parses a PDF. Depending on the memory settings parameter the given input stream is either + * copied to memory or to a temporary file to enable random access to the pdf. + * + * @param input stream that contains the document. Don't forget to close it after loading. + * @param password password to be used for decryption + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * @param memUsageSetting defines how memory is used for buffering input stream and PDF streams + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(InputStream input, String password, InputStream keyStore, + String alias, MemoryUsageSetting memUsageSetting) throws IOException + { + ScratchFile scratchFile = new ScratchFile(memUsageSetting); + try + { + RandomAccessRead source = scratchFile.createBuffer(input); + PDFParser parser = new PDFParser(source, password, keyStore, alias, scratchFile); + parser.parse(); + return parser.getPDDocument(); + } + catch (IOException ioe) + { + IOUtils.closeQuietly(scratchFile); + throw ioe; + } + } + + /** + * Parses a PDF. Unrestricted main memory will be used for buffering PDF streams. + * + * @param input byte array that contains the document. + * + * @return loaded document + * + * @throws InvalidPasswordException If the PDF required a non-empty password. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(byte[] input) throws InvalidPasswordException, IOException + { + return load(input, ""); + } + + /** + * Parses a PDF. Unrestricted main memory will be used for buffering PDF streams. + * + * @param input byte array that contains the document. + * @param password password to be used for decryption + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(byte[] input, String password) + throws InvalidPasswordException, IOException + { + return load(input, password, null, null); + } + + /** + * Parses a PDF. Unrestricted main memory will be used for buffering PDF streams. + * + * @param input byte array that contains the document. + * @param password password to be used for decryption + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(byte[] input, String password, InputStream keyStore, + String alias) throws IOException + { + return load(input, password, keyStore, alias, MemoryUsageSetting.setupMainMemoryOnly()); + } + + /** + * Parses a PDF. + * + * @param input byte array that contains the document. + * @param password password to be used for decryption + * @param keyStore key store to be used for decryption when using public key security + * @param alias alias to be used for decryption when using public key security + * @param memUsageSetting defines how memory is used for buffering input stream and PDF streams + * + * @return loaded document + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException In case of a reading or parsing error. + */ + public static PDDocument load(byte[] input, String password, InputStream keyStore, + String alias, MemoryUsageSetting memUsageSetting) throws IOException + { + ScratchFile scratchFile = new ScratchFile(memUsageSetting); + RandomAccessRead source = new RandomAccessBuffer(input); + PDFParser parser = new PDFParser(source, password, keyStore, alias, scratchFile); + parser.parse(); + return parser.getPDDocument(); + } + + /** + * Save the document to a file. + * + * @param fileName The file to save as. + * + * @throws IOException if the output could not be written + */ + public void save(String fileName) throws IOException + { + save(new File(fileName)); + } + + /** + * Save the document to a file. + * + * @param file The file to save as. + * + * @throws IOException if the output could not be written + */ + public void save(File file) throws IOException + { + save(new BufferedOutputStream(new FileOutputStream(file))); + } + + /** + * This will save the document to an output stream. + * + * @param output The stream to write to. It will be closed when done. It is recommended to wrap + * it in a {@link java.io.BufferedOutputStream}, unless it is already buffered. + * + * @throws IOException if the output could not be written + */ + public void save(OutputStream output) throws IOException + { + if (document.isClosed()) + { + throw new IOException("Cannot save a document which has been closed"); + } + + // subset designated fonts + for (PDFont font : fontsToSubset) + { + font.subset(); + } + fontsToSubset.clear(); + + // save PDF + try (COSWriter writer = new COSWriter(output)) + { + writer.write(this); + } + } + + /** + * Save the PDF as an incremental update. This is only possible if the PDF was loaded from a + * file or a stream, not if the document was created in PDFBox itself. There must be a path of + * objects that have {@link COSUpdateInfo#isNeedToBeUpdated()} set, starting from the document + * catalog. For signatures this is taken care by PDFBox itself. + *

+ * Other usages of this method are for experienced users only. You will usually never need it. + * It is useful only if you are required to keep the current revision and append the changes. A + * typical use case is changing a signed file without invalidating the signature. + * + * @param output stream to write to. It will be closed when done. It + * must never point to the source file or that one will be + * harmed! + * @throws IOException if the output could not be written + * @throws IllegalStateException if the document was not loaded from a file or a stream. + */ + public void saveIncremental(OutputStream output) throws IOException + { + if (pdfSource == null) + { + throw new IllegalStateException("document was not loaded from a file or a stream"); + } + try (COSWriter writer = new COSWriter(output, pdfSource)) + { + writer.write(this, signInterface); + } + } + + /** + * Save PDF incrementally without closing for external signature creation scenario. The general + * sequence is: + *

+     *    PDDocument pdDocument = ...;
+     *    OutputStream outputStream = ...;
+     *    SignatureOptions signatureOptions = ...; // options to specify fine tuned signature options or null for defaults
+     *    PDSignature pdSignature = ...;
+     *
+     *    // add signature parameters to be used when creating signature dictionary
+     *    pdDocument.addSignature(pdSignature, signatureOptions);
+     *    // prepare PDF for signing and obtain helper class to be used
+     *    ExternalSigningSupport externalSigningSupport = pdDocument.saveIncrementalForExternalSigning(outputStream);
+     *    // get data to be signed
+     *    InputStream dataToBeSigned = externalSigningSupport.getContent();
+     *    // invoke signature service
+     *    byte[] signature = sign(dataToBeSigned);
+     *    // set resulted CMS signature
+     *    externalSigningSupport.setSignature(signature);
+     *
+     *    // last step is to close the document
+     *    pdDocument.close();
+     * 
+ *

+ * Note that after calling this method, only {@code close()} method may invoked for + * {@code PDDocument} instance and only AFTER {@link ExternalSigningSupport} instance is used. + *

+ * + * @param output stream to write the final PDF. It will be closed when the + * document is closed. It must never point to the source file + * or that one will be harmed! + * @return instance to be used for external signing and setting CMS signature + * @throws IOException if the output could not be written + * @throws IllegalStateException if the document was not loaded from a file or a stream or + * signature options were not set. + */ + public ExternalSigningSupport saveIncrementalForExternalSigning(OutputStream output) throws IOException + { + if (pdfSource == null) + { + throw new IllegalStateException("document was not loaded from a file or a stream"); + } + // PDFBOX-3978: getLastSignatureDictionary() not helpful if signing into a template + // that is not the last signature. So give higher priority to signature with update flag. + PDSignature foundSignature = null; + for (PDSignature sig : getSignatureDictionaries()) + { + foundSignature = sig; + if (sig.getCOSObject().isNeedToBeUpdated()) + { + break; + } + } + + if (foundSignature == null) + { + throw new IllegalStateException("document does not contain signature fields"); + } + + int[] byteRange = foundSignature.getByteRange(); + if (!Arrays.equals(byteRange, RESERVE_BYTE_RANGE)) + { + throw new IllegalStateException("signature reserve byte range has been changed " + + "after addSignature(), please set the byte range that existed after addSignature()"); + } + COSWriter writer = new COSWriter(output, pdfSource); + writer.write(this); + signingSupport = new SigningSupport(writer); + return signingSupport; + } + + /** + * Returns the page at the given 0-based index. + *

+ * This method is too slow to get all the pages from a large PDF document + * (1000 pages or more). For such documents, use the iterator of + * {@link PDDocument#getPages()} instead. + * + * @param pageIndex the 0-based page index + * @return the page at the given index. + */ + public PDPage getPage(int pageIndex) // todo: REPLACE most calls to this method with BELOW method + { + return getDocumentCatalog().getPages().get(pageIndex); + } + + /** + * Returns the page tree. + * + * @return the page tree + */ + public PDPageTree getPages() + { + return getDocumentCatalog().getPages(); + } + + /** + * This will return the total page count of the PDF document. + * + * @return The total number of pages in the PDF document. + */ + public int getNumberOfPages() + { + return getDocumentCatalog().getPages().getCount(); + } + + /** + * This will close the underlying COSDocument object. + * + * @throws IOException If there is an error releasing resources. + */ + @Override + public void close() throws IOException + { + if (!document.isClosed()) + { + // Make sure that: + // - first Exception is kept + // - all IO resources are closed + // - there's a way to see which errors occured + + IOException firstException = null; + + // close resources and COSWriter + if (signingSupport != null) + { + firstException = IOUtils.closeAndLogException(signingSupport, LOG, "SigningSupport", firstException); + } + + // close all intermediate I/O streams + firstException = IOUtils.closeAndLogException(document, LOG, "COSDocument", firstException); + + // close the source PDF stream, if we read from one + if (pdfSource != null) + { + firstException = IOUtils.closeAndLogException(pdfSource, LOG, "RandomAccessRead pdfSource", firstException); + } + + // close fonts + for (TrueTypeFont ttf : fontsToClose) + { + firstException = IOUtils.closeAndLogException(ttf, LOG, "TrueTypeFont", firstException); + } + + // rethrow first exception to keep method contract + if (firstException != null) + { + throw firstException; + } + } + } + + /** + * Protects the document with a protection policy. The document content will be really + * encrypted when it will be saved. This method only marks the document for encryption. It also + * calls {@link #setAllSecurityToBeRemoved(boolean)} with a false argument if it was set to true + * previously and logs a warning. + * + * @see org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy + * @see org.apache.pdfbox.pdmodel.encryption.PublicKeyProtectionPolicy + * + * @param policy The protection policy. + * @throws IOException if there isn't any suitable security handler. + */ + public void protect(ProtectionPolicy policy) throws IOException + { + if (isAllSecurityToBeRemoved()) + { + LOG.warn("do not call setAllSecurityToBeRemoved(true) before calling protect(), " + + "as protect() implies setAllSecurityToBeRemoved(false)"); + setAllSecurityToBeRemoved(false); + } + + if (!isEncrypted()) + { + encryption = new PDEncryption(); + } + + SecurityHandler securityHandler = SecurityHandlerFactory.INSTANCE.newSecurityHandlerForPolicy(policy); + if (securityHandler == null) + { + throw new IOException("No security handler for policy " + policy); + } + + getEncryption().setSecurityHandler(securityHandler); + } + + /** + * Returns the access permissions granted when the document was decrypted. If the document was not decrypted this + * method returns the access permission for a document owner (ie can do everything). The returned object is in read + * only mode so that permissions cannot be changed. Methods providing access to content should rely on this object + * to verify if the current user is allowed to proceed. + * + * @return the access permissions for the current user on the document. + */ + public AccessPermission getCurrentAccessPermission() + { + if (accessPermission == null) + { + accessPermission = AccessPermission.getOwnerAccessPermission(); + } + return accessPermission; + } + + /** + * Indicates if all security is removed or not when writing the pdf. + * + * @return returns true if all security shall be removed otherwise false + */ + public boolean isAllSecurityToBeRemoved() + { + return allSecurityToBeRemoved; + } + + /** + * Activates/Deactivates the removal of all security when writing the pdf. + * + * @param removeAllSecurity remove all security if set to true + */ + public void setAllSecurityToBeRemoved(boolean removeAllSecurity) + { + allSecurityToBeRemoved = removeAllSecurity; + } + + /** + * Provides the document ID. + * + * @return the dcoument ID + */ + public Long getDocumentId() + { + return documentId; + } + + /** + * Sets the document ID to the given value. + * + * @param docId the new document ID + */ + public void setDocumentId(Long docId) + { + documentId = docId; + } + + /** + * Returns the PDF specification version this document conforms to. + * + * @return the PDF version (e.g. 1.4f) + */ + public float getVersion() + { + float headerVersionFloat = getDocument().getVersion(); + // there may be a second version information in the document catalog starting with 1.4 + if (headerVersionFloat >= 1.4f) + { + String catalogVersion = getDocumentCatalog().getVersion(); + float catalogVersionFloat = -1; + if (catalogVersion != null) + { + try + { + catalogVersionFloat = Float.parseFloat(catalogVersion); + } + catch(NumberFormatException exception) + { + LOG.error("Can't extract the version number of the document catalog.", exception); + } + } + // the most recent version is the correct one + return Math.max(catalogVersionFloat, headerVersionFloat); + } + else + { + return headerVersionFloat; + } + } + + /** + * Sets the PDF specification version for this document. + * + * @param newVersion the new PDF version (e.g. 1.4f) + * + */ + public void setVersion(float newVersion) + { + float currentVersion = getVersion(); + // nothing to do? + if (Float.compare(newVersion,currentVersion) == 0) + { + return; + } + // the version can't be downgraded + if (newVersion < currentVersion) + { + LOG.error("It's not allowed to downgrade the version of a pdf."); + return; + } + // update the catalog version if the document version is >= 1.4 + if (getDocument().getVersion() >= 1.4f) + { + getDocumentCatalog().setVersion(Float.toString(newVersion)); + } + else + { + // versions < 1.4f have a version header only + getDocument().setVersion(newVersion); + } + } + + /** + * Returns the resource cache associated with this document, or null if there is none. + */ + public ResourceCache getResourceCache() + { + return resourceCache; + } + + /** + * Sets the resource cache associated with this document. + * + * @param resourceCache A resource cache, or null. + */ + public void setResourceCache(ResourceCache resourceCache) + { + this.resourceCache = resourceCache; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java new file mode 100644 index 00000000000..9ad83b90ab4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentCatalog.java @@ -0,0 +1,620 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDDestinationOrAction; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.pdfbox.pdmodel.common.PDPageLabels; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDMarkInfo; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; +import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentProperties; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDDocumentCatalogAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.action.PDURIDictionary; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDNamedDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDThread; +import org.apache.pdfbox.pdmodel.interactive.viewerpreferences.PDViewerPreferences; + +/** + * The Document Catalog of a PDF. + * + * @author Ben Litchfield + */ +public class PDDocumentCatalog implements COSObjectable +{ + private static final Log LOG = LogFactory.getLog(PDDocumentCatalog.class); + + private final COSDictionary root; + private final PDDocument document; + private PDAcroForm cachedAcroForm; + + /** + * Constructor. Internal PDFBox use only! If you need to get the document catalog, call + * {@link PDDocument#getDocumentCatalog()}. + * + * @param doc The document that this catalog is part of. + */ + protected PDDocumentCatalog(PDDocument doc) + { + document = doc; + root = new COSDictionary(); + root.setItem(COSName.TYPE, COSName.CATALOG); + document.getDocument().getTrailer().setItem(COSName.ROOT, root); + } + + /** + * Constructor. Internal PDFBox use only! If you need to get the document catalog, call + * {@link PDDocument#getDocumentCatalog()}. + * + * @param doc The document that this catalog is part of. + * @param rootDictionary The root dictionary that this object wraps. + */ + protected PDDocumentCatalog(PDDocument doc, COSDictionary rootDictionary) + { + document = doc; + root = rootDictionary; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return root; + } + + /** + * Get the documents AcroForm. This will return null if no AcroForm is part of the document. + * + * @return The document's AcroForm. + */ + public PDAcroForm getAcroForm() + { + if (cachedAcroForm == null) + { + COSDictionary dict = (COSDictionary)root.getDictionaryObject(COSName.ACRO_FORM); + cachedAcroForm = dict == null ? null : new PDAcroForm(document, dict); + } + return cachedAcroForm; + } + + /** + * Sets the AcroForm for this catalog. + * + * @param acroForm The new AcroForm. + */ + public void setAcroForm(PDAcroForm acroForm) + { + root.setItem(COSName.ACRO_FORM, acroForm); + cachedAcroForm = null; + } + + /** + * Returns all pages in the document, as a page tree. + */ + public PDPageTree getPages() + { + // todo: cache me? + return new PDPageTree((COSDictionary)root.getDictionaryObject(COSName.PAGES), document); + } + + /** + * Get the viewer preferences associated with this document or null if they do not exist. + * + * @return The document's viewer preferences. + */ + public PDViewerPreferences getViewerPreferences() + { + COSBase base = root.getDictionaryObject(COSName.VIEWER_PREFERENCES); + return base instanceof COSDictionary ? new PDViewerPreferences((COSDictionary) base) : null; + } + + /** + * Sets the viewer preferences. + * + * @param prefs The new viewer preferences. + */ + public void setViewerPreferences(PDViewerPreferences prefs) + { + root.setItem(COSName.VIEWER_PREFERENCES, prefs); + } + + /** + * Get the outline associated with this document or null if it does not exist. + * + * @return The document's outline. + */ + public PDDocumentOutline getDocumentOutline() + { + COSBase cosObj = root.getDictionaryObject(COSName.OUTLINES); + return cosObj instanceof COSDictionary ? new PDDocumentOutline((COSDictionary)cosObj) : null; + } + + /** + * Sets the document outlines. + * + * @param outlines The new document outlines. + */ + public void setDocumentOutline(PDDocumentOutline outlines) + { + root.setItem(COSName.OUTLINES, outlines); + } + + /** + * Returns the document's article threads. + */ + public List getThreads() + { + COSArray array = (COSArray)root.getDictionaryObject(COSName.THREADS); + if (array == null) + { + array = new COSArray(); + root.setItem(COSName.THREADS, array); + } + List pdObjects = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) + { + pdObjects.add(new PDThread((COSDictionary)array.getObject(i))); + } + return new COSArrayList<>(pdObjects, array); + } + + /** + * Sets the list of threads for this pdf document. + * + * @param threads The list of threads, or null to clear it. + */ + public void setThreads(List threads) + { + root.setItem(COSName.THREADS, COSArrayList.converterToCOSArray(threads)); + } + + /** + * Get the metadata that is part of the document catalog. This will return null if there is no + * meta data for this object. + * + * @return The metadata for this object. + */ + public PDMetadata getMetadata() + { + COSBase metaObj = root.getDictionaryObject(COSName.METADATA); + if (metaObj instanceof COSStream) + { + return new PDMetadata((COSStream) metaObj); + } + return null; + } + + /** + * Sets the metadata for this object. This can be null. + * + * @param meta The meta data for this object. + */ + public void setMetadata(PDMetadata meta) + { + root.setItem(COSName.METADATA, meta); + } + + /** + * Sets the Document Open Action for this object. + * + * @param action The action you want to perform. + */ + public void setOpenAction(PDDestinationOrAction action) + { + root.setItem(COSName.OPEN_ACTION, action); + } + + /** + * Get the Document Open Action for this object. + * + * @return The action to perform when the document is opened. + * @throws IOException If there is an error creating the destination or action. + */ + public PDDestinationOrAction getOpenAction() throws IOException + { + COSBase openAction = root.getDictionaryObject(COSName.OPEN_ACTION); + if (openAction instanceof COSDictionary) + { + return PDActionFactory.createAction((COSDictionary)openAction); + } + else if (openAction instanceof COSArray) + { + return PDDestination.create(openAction); + } + else + { + return null; + } + } + /** + * @return The Additional Actions for this Document + */ + public PDDocumentCatalogAdditionalActions getActions() + { + COSDictionary addAction = (COSDictionary) root.getDictionaryObject(COSName.AA); + if (addAction == null) + { + addAction = new COSDictionary(); + root.setItem(COSName.AA, addAction); + } + return new PDDocumentCatalogAdditionalActions(addAction); + } + + /** + * Sets the additional actions for the document. + * + * @param actions The actions that are associated with this document. + */ + public void setActions(PDDocumentCatalogAdditionalActions actions) + { + root.setItem(COSName.AA, actions); + } + + /** + * @return The names dictionary for this document or null if none exist. + */ + public PDDocumentNameDictionary getNames() + { + COSDictionary names = (COSDictionary) root.getDictionaryObject(COSName.NAMES); + return names == null ? null : new PDDocumentNameDictionary(this, names); + } + + /** + * @return The named destinations dictionary for this document or null if none exists. + */ + public PDDocumentNameDestinationDictionary getDests() + { + PDDocumentNameDestinationDictionary nameDic = null; + COSDictionary dests = (COSDictionary) root.getDictionaryObject(COSName.DESTS); + if (dests != null) + { + nameDic = new PDDocumentNameDestinationDictionary(dests); + } + return nameDic; + } + + /** + * Find the page destination from a named destination. + * @param namedDest the named destination. + * @return a PDPageDestination object or null if not found. + * @throws IOException if there is an error creating the PDPageDestination object. + */ + public PDPageDestination findNamedDestinationPage(PDNamedDestination namedDest) + throws IOException + { + PDPageDestination pageDestination = null; + PDDocumentNameDictionary namesDict = getNames(); + if (namesDict != null) + { + PDDestinationNameTreeNode destsTree = namesDict.getDests(); + if (destsTree != null) + { + pageDestination = destsTree.getValue(namedDest.getNamedDestination()); + } + } + if (pageDestination == null) + { + // Look up /Dests dictionary from catalog + PDDocumentNameDestinationDictionary nameDestDict = getDests(); + if (nameDestDict != null) + { + String name = namedDest.getNamedDestination(); + pageDestination = (PDPageDestination) nameDestDict.getDestination(name); + } + } + return pageDestination; + } + + /** + * Sets the names dictionary for the document. + * + * @param names The names dictionary that is associated with this document. + */ + public void setNames(PDDocumentNameDictionary names) + { + root.setItem(COSName.NAMES, names); + } + + /** + * Get info about doc's usage of tagged features. This will return null if there is no + * information. + * + * @return The new mark info. + */ + public PDMarkInfo getMarkInfo() + { + COSDictionary dic = (COSDictionary)root.getDictionaryObject(COSName.MARK_INFO); + return dic == null ? null : new PDMarkInfo(dic); + } + + /** + * Set information about the doc's usage of tagged features. + * + * @param markInfo The new MarkInfo data. + */ + public void setMarkInfo(PDMarkInfo markInfo) + { + root.setItem(COSName.MARK_INFO, markInfo); + } + + /** + * Get the list of OutputIntents defined in the document. + * + * @return The list of PDOutputIntent + */ + public List getOutputIntents() + { + List retval = new ArrayList<>(); + COSArray array = (COSArray)root.getDictionaryObject(COSName.OUTPUT_INTENTS); + if (array != null) + { + for (COSBase cosBase : array) + { + if (cosBase instanceof COSObject) + { + cosBase = ((COSObject)cosBase).getObject(); + } + PDOutputIntent oi = new PDOutputIntent((COSDictionary) cosBase); + retval.add(oi); + } + } + return retval; + } + + /** + * Add an OutputIntent to the list. If there is not OutputIntent, the list is created and the + * first element added. + * + * @param outputIntent the OutputIntent to add. + */ + public void addOutputIntent(PDOutputIntent outputIntent) + { + COSArray array = (COSArray)root.getDictionaryObject(COSName.OUTPUT_INTENTS); + if (array == null) + { + array = new COSArray(); + root.setItem(COSName.OUTPUT_INTENTS, array); + } + array.add(outputIntent.getCOSObject()); + } + + /** + * Replace the list of OutputIntents of the document. + * + * @param outputIntents the list of OutputIntents, if the list is empty all OutputIntents are + * removed. + */ + public void setOutputIntents(List outputIntents) + { + COSArray array = new COSArray(); + for (PDOutputIntent intent : outputIntents) + { + array.add(intent.getCOSObject()); + } + root.setItem(COSName.OUTPUT_INTENTS, array); + } + + /** + * Returns the page display mode. + */ + public PageMode getPageMode() + { + String mode = root.getNameAsString(COSName.PAGE_MODE); + if (mode != null) + { + try + { + return PageMode.fromString(mode); + } + catch (IllegalArgumentException e) + { + LOG.debug("Invalid PageMode used '" + mode + "' - setting to PageMode.USE_NONE", e); + return PageMode.USE_NONE; + } + } + else + { + return PageMode.USE_NONE; + } + } + + /** + * Sets the page mode. + * + * @param mode The new page mode. + */ + public void setPageMode(PageMode mode) + { + root.setName(COSName.PAGE_MODE, mode.stringValue()); + } + + /** + * Returns the page layout. + */ + public PageLayout getPageLayout() + { + String mode = root.getNameAsString(COSName.PAGE_LAYOUT); + if (mode != null) + { + return PageLayout.fromString(mode); + } + else + { + return PageLayout.SINGLE_PAGE; + } + } + + /** + * Sets the page layout. + * + * @param layout The new page layout. + */ + public void setPageLayout(PageLayout layout) + { + root.setName(COSName.PAGE_LAYOUT, layout.stringValue()); + } + + /** + * Returns the document-level URI. + */ + public PDURIDictionary getURI() + { + COSDictionary uri = (COSDictionary)root.getDictionaryObject(COSName.URI); + return uri == null ? null : new PDURIDictionary(uri); + } + + /** + * Sets the document level URI. + * + * @param uri The new document level URI. + */ + public void setURI(PDURIDictionary uri) + { + root.setItem(COSName.URI, uri); + } + + /** + * Get the document's structure tree root, or null if none exists. + */ + public PDStructureTreeRoot getStructureTreeRoot() + { + COSDictionary dict = root.getCOSDictionary(COSName.STRUCT_TREE_ROOT); + return dict == null ? null : new PDStructureTreeRoot(dict); + } + + /** + * Sets the document's structure tree root. + * + * @param treeRoot The new structure tree. + */ + public void setStructureTreeRoot(PDStructureTreeRoot treeRoot) + { + root.setItem(COSName.STRUCT_TREE_ROOT, treeRoot); + } + + /** + * Returns the language for the document, or null. + */ + public String getLanguage() + { + return root.getString(COSName.LANG); + } + + /** + * Sets the Language for the document. + * + * @param language The new document language. + */ + public void setLanguage(String language) + { + root.setString(COSName.LANG, language); + } + + /** + * Returns the PDF specification version this document conforms to. + * + * @return the PDF version (e.g. "1.4") + */ + public String getVersion() + { + return root.getNameAsString(COSName.VERSION); + } + + /** + * Sets the PDF specification version this document conforms to. + * + * @param version the PDF version (e.g. "1.4") + */ + public void setVersion(String version) + { + root.setName(COSName.VERSION, version); + } + + /** + * Returns the page labels descriptor of the document. + * + * @return the page labels descriptor of the document. + * @throws IOException If there is a problem retrieving the page labels. + */ + public PDPageLabels getPageLabels() throws IOException + { + COSDictionary dict = (COSDictionary) root.getDictionaryObject(COSName.PAGE_LABELS); + return dict == null ? null : new PDPageLabels(document, dict); + } + + /** + * Sets the page label descriptor for the document. + * + * @param labels the new page label descriptor to set. + */ + public void setPageLabels(PDPageLabels labels) + { + root.setItem(COSName.PAGE_LABELS, labels); + } + + /** + * Get the optional content properties dictionary associated with this document. + * + * @return the optional properties dictionary or null if it is not present + */ + public PDOptionalContentProperties getOCProperties() + { + COSDictionary dict = (COSDictionary)root.getDictionaryObject(COSName.OCPROPERTIES); + return dict == null ? null : new PDOptionalContentProperties(dict); + } + + /** + * Sets the optional content properties dictionary. The document version is incremented to 1.5 + * if lower. + * + * @param ocProperties the optional properties dictionary + */ + public void setOCProperties(PDOptionalContentProperties ocProperties) + { + root.setItem(COSName.OCPROPERTIES, ocProperties); + + // optional content groups require PDF 1.5 + if (ocProperties != null && document.getVersion() < 1.5) + { + document.setVersion(1.5f); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentInformation.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentInformation.java new file mode 100644 index 00000000000..be0328b4992 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentInformation.java @@ -0,0 +1,315 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.util.Calendar; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This is the document metadata. Each getXXX method will return the entry if + * it exists or null if it does not exist. If you pass in null for the setXXX + * method then it will clear the value. + * + * @author Ben Litchfield + * @author Gerardo Ortiz + * + */ +public class PDDocumentInformation implements COSObjectable +{ + private final COSDictionary info; + + /** + * Default Constructor. + */ + public PDDocumentInformation() + { + info = new COSDictionary(); + } + + /** + * Constructor that is used for a preexisting dictionary. + * + * @param dic The underlying dictionary. + */ + public PDDocumentInformation( COSDictionary dic ) + { + info = dic; + } + + /** + * This will get the underlying dictionary that this object wraps. + * + * @return The underlying info dictionary. + */ + @Override + public COSDictionary getCOSObject() + { + return info; + } + + /** + * Return the properties String value. + *

+ * Allows to retrieve the + * low level date for validation purposes. + *

+ * + * @param propertyKey the dictionaries key + * @return the properties value + */ + public Object getPropertyStringValue(String propertyKey) + { + return info.getString(propertyKey); + } + + /** + * This will get the title of the document. This will return null if no title exists. + * + * @return The title of the document. + */ + public String getTitle() + { + return info.getString( COSName.TITLE ); + } + + /** + * This will set the title of the document. + * + * @param title The new title for the document. + */ + public void setTitle( String title ) + { + info.setString( COSName.TITLE, title ); + } + + /** + * This will get the author of the document. This will return null if no author exists. + * + * @return The author of the document. + */ + public String getAuthor() + { + return info.getString( COSName.AUTHOR ); + } + + /** + * This will set the author of the document. + * + * @param author The new author for the document. + */ + public void setAuthor( String author ) + { + info.setString( COSName.AUTHOR, author ); + } + + /** + * This will get the subject of the document. This will return null if no subject exists. + * + * @return The subject of the document. + */ + public String getSubject() + { + return info.getString( COSName.SUBJECT ); + } + + /** + * This will set the subject of the document. + * + * @param subject The new subject for the document. + */ + public void setSubject( String subject ) + { + info.setString( COSName.SUBJECT, subject ); + } + + /** + * This will get the keywords of the document. This will return null if no keywords exists. + * + * @return The keywords of the document. + */ + public String getKeywords() + { + return info.getString( COSName.KEYWORDS ); + } + + /** + * This will set the keywords of the document. + * + * @param keywords The new keywords for the document. + */ + public void setKeywords( String keywords ) + { + info.setString( COSName.KEYWORDS, keywords ); + } + + /** + * This will get the creator of the document. This will return null if no creator exists. + * + * @return The creator of the document. + */ + public String getCreator() + { + return info.getString( COSName.CREATOR ); + } + + /** + * This will set the creator of the document. + * + * @param creator The new creator for the document. + */ + public void setCreator( String creator ) + { + info.setString( COSName.CREATOR, creator ); + } + + /** + * This will get the producer of the document. This will return null if no producer exists. + * + * @return The producer of the document. + */ + public String getProducer() + { + return info.getString( COSName.PRODUCER ); + } + + /** + * This will set the producer of the document. + * + * @param producer The new producer for the document. + */ + public void setProducer( String producer ) + { + info.setString( COSName.PRODUCER, producer ); + } + + /** + * This will get the creation date of the document. This will return null if no creation date exists. + * + * @return The creation date of the document. + */ + public Calendar getCreationDate() + { + return info.getDate( COSName.CREATION_DATE ); + } + + /** + * This will set the creation date of the document. + * + * @param date The new creation date for the document. + */ + public void setCreationDate( Calendar date ) + { + info.setDate( COSName.CREATION_DATE, date ); + } + + /** + * This will get the modification date of the document. This will return null if no modification date exists. + * + * @return The modification date of the document. + */ + public Calendar getModificationDate() + { + return info.getDate( COSName.MOD_DATE ); + } + + /** + * This will set the modification date of the document. + * + * @param date The new modification date for the document. + */ + public void setModificationDate( Calendar date ) + { + info.setDate( COSName.MOD_DATE, date ); + } + + /** + * This will get the trapped value for the document. + * This will return null if one is not found. + * + * @return The trapped value for the document. + */ + public String getTrapped() + { + return info.getNameAsString( COSName.TRAPPED ); + } + + /** + * This will get the keys of all metadata information fields for the document. + * + * @return all metadata key strings. + * @since Apache PDFBox 1.3.0 + */ + public Set getMetadataKeys() + { + Set keys = new TreeSet<>(); + for (COSName key : info.keySet()) + { + keys.add(key.getName()); + } + return keys; + } + + /** + * This will get the value of a custom metadata information field for the document. + * This will return null if one is not found. + * + * @param fieldName Name of custom metadata field from pdf document. + * + * @return String Value of metadata field + */ + public String getCustomMetadataValue(String fieldName) + { + return info.getString( fieldName ); + } + + /** + * Set the custom metadata value. + * + * @param fieldName The name of the custom metadata field. + * @param fieldValue The value to the custom metadata field. + */ + public void setCustomMetadataValue( String fieldName, String fieldValue ) + { + info.setString( fieldName, fieldValue ); + } + + /** + * This will set the trapped of the document. This will be + * 'True', 'False', or 'Unknown'. + * + * @param value The new trapped value for the document. + */ + public void setTrapped( String value ) + { + if( value != null && + !value.equals( "True" ) && + !value.equals( "False" ) && + !value.equals( "Unknown" ) ) + { + throw new RuntimeException( "Valid values for trapped are " + + "'True', 'False', or 'Unknown'" ); + } + + info.setName( COSName.TRAPPED, value ); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java new file mode 100644 index 00000000000..edf09336acf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java @@ -0,0 +1,87 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; + +/** + * This encapsulates the "dictionary of names and corresponding destinations" for the /Dests entry + * in the document catalog. + * + * @author Tilman Hausherr + */ +public class PDDocumentNameDestinationDictionary implements COSObjectable +{ + private final COSDictionary nameDictionary; + + /** + * Constructor. + * + * @param dict The dictionary of names and corresponding destinations. + */ + public PDDocumentNameDestinationDictionary(COSDictionary dict) + { + this.nameDictionary = dict; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos dictionary for this object. + */ + @Override + public COSDictionary getCOSObject() + { + return nameDictionary; + } + + /** + * Returns the destination corresponding to the parameter. + * + * @param name The destination name. + * @return The destination for that name, or null if there isn't any. + * + * @throws IOException if something goes wrong when creating the destination object. + */ + public PDDestination getDestination(String name) throws IOException + { + COSBase item = nameDictionary.getDictionaryObject(name); + + // "The value of this entry shall be a dictionary in which each key is a destination name + // and the corresponding value is either an array defining the destination (...) + // or a dictionary with a D entry whose value is such an array." + if (item instanceof COSArray) + { + return PDDestination.create(item); + } + else if (item instanceof COSDictionary) + { + COSDictionary dict = (COSDictionary) item; + if (dict.containsKey(COSName.D)) + { + return PDDestination.create(dict.getDictionaryObject(COSName.D)); + } + } + return null; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDictionary.java new file mode 100644 index 00000000000..fe484defaa2 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDictionary.java @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class holds all of the name trees that are available at the document level. + * + * @author Ben Litchfield + */ +public class PDDocumentNameDictionary implements COSObjectable +{ + private final COSDictionary nameDictionary; + private final PDDocumentCatalog catalog; + + /** + * Constructor. + * + * @param cat The document catalog that this dictionary is part of. + */ + public PDDocumentNameDictionary( PDDocumentCatalog cat ) + { + COSBase names = cat.getCOSObject().getDictionaryObject(COSName.NAMES); + if (names != null) + { + nameDictionary = (COSDictionary)names; + } + else + { + nameDictionary = new COSDictionary(); + cat.getCOSObject().setItem(COSName.NAMES, nameDictionary); + } + catalog = cat; + } + + /** + * Constructor. + * + * @param cat The document that this dictionary is part of. + * @param names The names dictionary. + */ + public PDDocumentNameDictionary( PDDocumentCatalog cat, COSDictionary names ) + { + catalog = cat; + nameDictionary = names; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos dictionary for this object. + */ + @Override + public COSDictionary getCOSObject() + { + return nameDictionary; + } + + /** + * Get the destination named tree node. The values in this name tree will be + * PDPageDestination objects. + * + * @return The destination name tree node. + */ + public PDDestinationNameTreeNode getDests() + { + PDDestinationNameTreeNode dests = null; + + COSDictionary dic = (COSDictionary)nameDictionary.getDictionaryObject( COSName.DESTS ); + + //The document catalog also contains the Dests entry sometimes + //so check there as well. + if( dic == null ) + { + dic = (COSDictionary)catalog.getCOSObject().getDictionaryObject( COSName.DESTS ); + } + + if( dic != null ) + { + dests = new PDDestinationNameTreeNode( dic ); + } + + return dests; + } + + /** + * Set the named destinations that are associated with this document. + * + * @param dests The destination names. + */ + public void setDests( PDDestinationNameTreeNode dests ) + { + nameDictionary.setItem( COSName.DESTS, dests ); + //The dests can either be in the document catalog or in the + //names dictionary, PDFBox will just maintain the one in the + //names dictionary for now unless there is a reason to do + //something else. + //clear the potentially out of date Dests reference. + catalog.getCOSObject().setItem( COSName.DESTS, (COSObjectable)null); + } + + /** + * Get the embedded files named tree node. The values in this name tree will + * be PDComplexFileSpecification objects. + * + * @return The embedded files name tree node. + */ + public PDEmbeddedFilesNameTreeNode getEmbeddedFiles() + { + PDEmbeddedFilesNameTreeNode retval = null; + + COSDictionary dic = (COSDictionary)nameDictionary.getDictionaryObject( COSName.EMBEDDED_FILES ); + + if( dic != null ) + { + retval = new PDEmbeddedFilesNameTreeNode( dic ); + } + + return retval; + } + + /** + * Set the named embedded files that are associated with this document. + * + * @param ef The new embedded files + */ + public void setEmbeddedFiles( PDEmbeddedFilesNameTreeNode ef ) + { + nameDictionary.setItem( COSName.EMBEDDED_FILES, ef ); + } + + /** + * Get the document level javascript entries. The values in this name tree + * will be PDTextStream objects. + * + * @return The document level named javascript. + */ + public PDJavascriptNameTreeNode getJavaScript() + { + PDJavascriptNameTreeNode retval = null; + + COSDictionary dic = (COSDictionary) nameDictionary.getDictionaryObject(COSName.JAVA_SCRIPT); + + if( dic != null ) + { + retval = new PDJavascriptNameTreeNode( dic ); + } + + return retval; + } + + /** + * Set the named javascript entries that are associated with this document. + * + * @param js The new Javascript entries. + */ + public void setJavascript( PDJavascriptNameTreeNode js ) + { + nameDictionary.setItem( COSName.JAVA_SCRIPT, js ); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java new file mode 100644 index 00000000000..a7463c0bf68 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDEmbeddedFilesNameTreeNode.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; + +/** + * This class holds all of the name trees that are available at the document level. + * + * @author Ben Litchfield + */ +public class PDEmbeddedFilesNameTreeNode extends PDNameTreeNode +{ + /** + * Constructor. + */ + public PDEmbeddedFilesNameTreeNode() + { + super(); + } + + /** + * Constructor. + * + * @param dic The COS dictionary. + */ + public PDEmbeddedFilesNameTreeNode( COSDictionary dic ) + { + super(dic); + } + + @Override + protected PDComplexFileSpecification convertCOSToPD( COSBase base ) throws IOException + { + return new PDComplexFileSpecification( (COSDictionary)base ); + } + + @Override + protected PDNameTreeNode createChildNode( COSDictionary dic ) + { + return new PDEmbeddedFilesNameTreeNode(dic); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java new file mode 100644 index 00000000000..276e63e9c1f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java @@ -0,0 +1,39 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; + +/** + * + * @author Tilman Hausherr + */ +public final class PDFormContentStream extends PDAbstractContentStream +{ + /** + * Create a new form XObject content stream. + * + * @param form The form XObject stream to write to. + * + * @throws IOException If there is an error writing to the form contents. + */ + public PDFormContentStream(PDFormXObject form) throws IOException + { + super(null, form.getContentStream().createOutputStream(), form.getResources()); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java new file mode 100644 index 00000000000..c6870ce0296 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDJavascriptNameTreeNode.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript; + +/** + * This class holds all of the name trees that are available at the document level. + * + * @author Ben Litchfield + */ +public class PDJavascriptNameTreeNode extends PDNameTreeNode +{ + /** + * Constructor. + */ + public PDJavascriptNameTreeNode() + { + super(); + } + + /** + * Constructor. + * + * @param dic The COS dictionary. + */ + public PDJavascriptNameTreeNode( COSDictionary dic ) + { + super(dic); + } + + @Override + protected PDActionJavaScript convertCOSToPD( COSBase base ) throws IOException + { + if (!(base instanceof COSDictionary)) + { + throw new IOException( "Error creating Javascript object, expected a COSDictionary and not " + base); + } + return (PDActionJavaScript)PDActionFactory.createAction((COSDictionary) base); + } + + @Override + protected PDNameTreeNode createChildNode( COSDictionary dic ) + { + return new PDJavascriptNameTreeNode(dic); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java new file mode 100644 index 00000000000..b8280b52e4e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java @@ -0,0 +1,784 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.SequenceInputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.PDContentStream; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.interactive.action.PDPageAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.annotation.AnnotationFilter; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.measurement.PDViewportDictionary; +import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDThreadBead; +import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDTransition; +import org.apache.pdfbox.util.Matrix; + +/** + * A page in a PDF document. + * + * @author Ben Litchfield + */ +public class PDPage implements COSObjectable, PDContentStream +{ + /** + * Log instance + */ + private static final Log LOG = LogFactory.getLog(PDPage.class); + + private final COSDictionary page; + private PDResources pageResources; + private ResourceCache resourceCache; + private PDRectangle mediaBox; + + /** + * Creates a new PDPage instance for embedding, with a size of U.S. Letter (8.5 x 11 inches). + */ + public PDPage() + { + this(PDRectangle.LETTER); + } + + /** + * Creates a new instance of PDPage for embedding. + * + * @param mediaBox The MediaBox of the page. + */ + public PDPage(PDRectangle mediaBox) + { + page = new COSDictionary(); + page.setItem(COSName.TYPE, COSName.PAGE); + page.setItem(COSName.MEDIA_BOX, mediaBox); + } + + /** + * Creates a new instance of PDPage for reading. + * + * @param pageDictionary A page dictionary in a PDF document. + */ + public PDPage(COSDictionary pageDictionary) + { + page = pageDictionary; + } + + /** + * Creates a new instance of PDPage for reading. + * + * @param pageDictionary A page dictionary in a PDF document. + */ + PDPage(COSDictionary pageDictionary, ResourceCache resourceCache) + { + page = pageDictionary; + this.resourceCache = resourceCache; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return page; + } + + /** + * Returns the content streams which make up this page. + * + * @return content stream iterator + */ + public Iterator getContentStreams() + { + List streams = new ArrayList<>(); + COSBase base = page.getDictionaryObject(COSName.CONTENTS); + if (base instanceof COSStream) + { + streams.add(new PDStream((COSStream) base)); + } + else if (base instanceof COSArray && ((COSArray) base).size() > 0) + { + COSArray array = (COSArray)base; + for (int i = 0; i < array.size(); i++) + { + COSStream stream = (COSStream) array.getObject(i); + streams.add(new PDStream(stream)); + } + } + return streams.iterator(); + } + + /** + * Returns the content stream(s) of this page as a single input stream. + * + * @return An InputStream, never null. Multiple content streams are concatenated and separated + * with a newline. An empty stream is returned if the page doesn't have any content stream. + * @throws IOException If the stream could not be read + */ + @Override + public InputStream getContents() throws IOException + { + COSBase base = page.getDictionaryObject(COSName.CONTENTS); + if (base instanceof COSStream) + { + return ((COSStream)base).createInputStream(); + } + else if (base instanceof COSArray && ((COSArray) base).size() > 0) + { + COSArray streams = (COSArray)base; + byte[] delimiter = new byte[] { '\n' }; + List inputStreams = new ArrayList<>(); + for (int i = 0; i < streams.size(); i++) + { + COSBase strm = streams.getObject(i); + if (strm instanceof COSStream) + { + COSStream stream = (COSStream) strm; + inputStreams.add(stream.createInputStream()); + inputStreams.add(new ByteArrayInputStream(delimiter)); + } + } + return new SequenceInputStream(Collections.enumeration(inputStreams)); + } + return new ByteArrayInputStream(new byte[0]); + } + + /** + * Returns true if this page has one or more content streams. + */ + public boolean hasContents() + { + COSBase contents = page.getDictionaryObject(COSName.CONTENTS); + if (contents instanceof COSStream) + { + return ((COSStream) contents).size() > 0; + } + else if (contents instanceof COSArray) + { + return ((COSArray) contents).size() > 0; + } + return false; + } + + /** + * A dictionary containing any resources required by the page. + */ + @Override + public PDResources getResources() + { + if (pageResources == null) + { + COSBase base = PDPageTree.getInheritableAttribute(page, COSName.RESOURCES); + + // note: it's an error for resources to not be present + if (base instanceof COSDictionary) + { + pageResources = new PDResources((COSDictionary) base, resourceCache); + } + } + return pageResources; + } + + /** + * This will set the resources for this page. + * + * @param resources The new resources for this page. + */ + public void setResources(PDResources resources) + { + pageResources = resources; + if (resources != null) + { + page.setItem(COSName.RESOURCES, resources); + } + else + { + page.removeItem(COSName.RESOURCES); + } + } + + /** + * This will get the key of this Page in the structural parent tree. + * + * @return the integer key of the page's entry in the structural parent tree or -1 if + * there isn't any. + */ + public int getStructParents() + { + return page.getInt(COSName.STRUCT_PARENTS); + } + + /** + * This will set the key for this page in the structural parent tree. + * + * @param structParents The new key for this page. + */ + public void setStructParents(int structParents) + { + page.setInt(COSName.STRUCT_PARENTS, structParents); + } + + @Override + public PDRectangle getBBox() + { + return getCropBox(); + } + + @Override + public Matrix getMatrix() + { + // todo: take into account user-space unit redefinition as scale? + return new Matrix(); + } + + /** + * A rectangle, expressed in default user space units, defining the boundaries of the physical + * medium on which the page is intended to be displayed or printed. + */ + public PDRectangle getMediaBox() + { + if (mediaBox == null) + { + COSBase base = PDPageTree.getInheritableAttribute(page, COSName.MEDIA_BOX); + if (base instanceof COSArray) + { + mediaBox = new PDRectangle((COSArray) base); + } + } + if (mediaBox == null) + { + LOG.debug("Can't find MediaBox, will use U.S. Letter"); + mediaBox = PDRectangle.LETTER; + } + return mediaBox; + } + + /** + * This will set the mediaBox for this page. + * + * @param mediaBox The new mediaBox for this page. + */ + public void setMediaBox(PDRectangle mediaBox) + { + this.mediaBox = mediaBox; + if (mediaBox == null) + { + page.removeItem(COSName.MEDIA_BOX); + } + else + { + page.setItem(COSName.MEDIA_BOX, mediaBox); + } + } + + /** + * A rectangle, expressed in default user space units, defining the visible region of default + * user space. When the page is displayed or printed, its contents are to be clipped (cropped) + * to this rectangle. + */ + public PDRectangle getCropBox() + { + COSBase base = PDPageTree.getInheritableAttribute(page, COSName.CROP_BOX); + if (base instanceof COSArray) + { + return clipToMediaBox(new PDRectangle((COSArray) base)); + } + else + { + return getMediaBox(); + } + } + + /** + * This will set the CropBox for this page. + * + * @param cropBox The new CropBox for this page. + */ + public void setCropBox(PDRectangle cropBox) + { + if (cropBox == null) + { + page.removeItem(COSName.CROP_BOX); + } + else + { + page.setItem(COSName.CROP_BOX, cropBox.getCOSArray()); + } + } + + /** + * A rectangle, expressed in default user space units, defining the region to which the contents + * of the page should be clipped when output in a production environment. The default is the + * CropBox. + * + * @return The BleedBox attribute. + */ + public PDRectangle getBleedBox() + { + COSBase base = page.getDictionaryObject(COSName.BLEED_BOX); + if (base instanceof COSArray) + { + return clipToMediaBox(new PDRectangle((COSArray) base)); + } + else + { + return getCropBox(); + } + } + + /** + * This will set the BleedBox for this page. + * + * @param bleedBox The new BleedBox for this page. + */ + public void setBleedBox(PDRectangle bleedBox) + { + if (bleedBox == null) + { + page.removeItem(COSName.BLEED_BOX); + } + else + { + page.setItem(COSName.BLEED_BOX, bleedBox); + } + } + + /** + * A rectangle, expressed in default user space units, defining the intended dimensions of the + * finished page after trimming. The default is the CropBox. + * + * @return The TrimBox attribute. + */ + public PDRectangle getTrimBox() + { + COSBase base = page.getDictionaryObject(COSName.TRIM_BOX); + if (base instanceof COSArray) + { + return clipToMediaBox(new PDRectangle((COSArray) base)); + } + else + { + return getCropBox(); + } + } + + /** + * This will set the TrimBox for this page. + * + * @param trimBox The new TrimBox for this page. + */ + public void setTrimBox(PDRectangle trimBox) + { + if (trimBox == null) + { + page.removeItem(COSName.TRIM_BOX); + } + else + { + page.setItem(COSName.TRIM_BOX, trimBox); + } + } + + /** + * A rectangle, expressed in default user space units, defining the extent of the page's + * meaningful content (including potential white space) as intended by the page's creator The + * default is the CropBox. + * + * @return The ArtBox attribute. + */ + public PDRectangle getArtBox() + { + COSBase base = page.getDictionaryObject(COSName.ART_BOX); + if (base instanceof COSArray) + { + return clipToMediaBox(new PDRectangle((COSArray) base)); + } + else + { + return getCropBox(); + } + } + + /** + * This will set the ArtBox for this page. + * + * @param artBox The new ArtBox for this page. + */ + public void setArtBox(PDRectangle artBox) + { + if (artBox == null) + { + page.removeItem(COSName.ART_BOX); + } + else + { + page.setItem(COSName.ART_BOX, artBox); + } + } + + /** + * Clips the given box to the bounds of the media box. + */ + private PDRectangle clipToMediaBox(PDRectangle box) + { + PDRectangle mediaBox = getMediaBox(); + PDRectangle result = new PDRectangle(); + result.setLowerLeftX(Math.max(mediaBox.getLowerLeftX(), box.getLowerLeftX())); + result.setLowerLeftY(Math.max(mediaBox.getLowerLeftY(), box.getLowerLeftY())); + result.setUpperRightX(Math.min(mediaBox.getUpperRightX(), box.getUpperRightX())); + result.setUpperRightY(Math.min(mediaBox.getUpperRightY(), box.getUpperRightY())); + return result; + } + + /** + * Returns the rotation angle in degrees by which the page should be rotated + * clockwise when displayed or printed. Valid values in a PDF must be a + * multiple of 90. + * + * @return The rotation angle in degrees in normalized form (0, 90, 180 or + * 270) or 0 if invalid or not set at this level. + */ + public int getRotation() + { + COSBase obj = PDPageTree.getInheritableAttribute(page, COSName.ROTATE); + if (obj instanceof COSNumber) + { + int rotationAngle = ((COSNumber) obj).intValue(); + if (rotationAngle % 90 == 0) + { + return (rotationAngle % 360 + 360) % 360; + } + } + return 0; + } + + /** + * This will set the rotation for this page. + * + * @param rotation The new rotation for this page in degrees. + */ + public void setRotation(int rotation) + { + page.setInt(COSName.ROTATE, rotation); + } + + /** + * This will set the contents of this page. + * + * @param contents The new contents of the page. + */ + public void setContents(PDStream contents) + { + page.setItem(COSName.CONTENTS, contents); + } + + /** + * This will set the contents of this page. + * + * @param contents Array of new contents of the page. + */ + public void setContents(List contents) + { + COSArray array = new COSArray(); + for (PDStream stream : contents) + { + array.add(stream); + } + page.setItem(COSName.CONTENTS, array); + } + + /** + * This will get a list of PDThreadBead objects, which are article threads in the document. This + * will return an empty list if there are no thread beads. + * + * @return A list of article threads on this page, never null. The returned list is backed by + * the beads COSArray, so any adding or deleting in this list will change the document too. + */ + public List getThreadBeads() + { + COSArray beads = (COSArray) page.getDictionaryObject(COSName.B); + if (beads == null) + { + beads = new COSArray(); + } + List pdObjects = new ArrayList<>(); + for (int i = 0; i < beads.size(); i++) + { + COSBase base = beads.getObject(i); + PDThreadBead bead = null; + // in some cases the bead is null + if (base instanceof COSDictionary) + { + bead = new PDThreadBead((COSDictionary) base); + } + pdObjects.add(bead); + } + return new COSArrayList<>(pdObjects, beads); + } + + /** + * This will set the list of thread beads. + * + * @param beads A list of PDThreadBead objects or null. + */ + public void setThreadBeads(List beads) + { + page.setItem(COSName.B, COSArrayList.converterToCOSArray(beads)); + } + + /** + * Get the metadata that is part of the document catalog. This will return null if there is + * no meta data for this object. + * + * @return The metadata for this object. + */ + public PDMetadata getMetadata() + { + PDMetadata retval = null; + COSBase base = page.getDictionaryObject(COSName.METADATA); + if (base instanceof COSStream) + { + retval = new PDMetadata((COSStream) base); + } + return retval; + } + + /** + * Set the metadata for this object. This can be null. + * + * @param meta The meta data for this object. + */ + public void setMetadata(PDMetadata meta) + { + page.setItem(COSName.METADATA, meta); + } + + /** + * Get the page actions. + * + * @return The Actions for this Page + */ + public PDPageAdditionalActions getActions() + { + COSDictionary addAct; + COSBase base = page.getDictionaryObject(COSName.AA); + if (base instanceof COSDictionary) + { + addAct = (COSDictionary) base; + } + else + { + addAct = new COSDictionary(); + page.setItem(COSName.AA, addAct); + } + return new PDPageAdditionalActions(addAct); + } + + /** + * Set the page actions. + * + * @param actions The actions for the page. + */ + public void setActions(PDPageAdditionalActions actions) + { + page.setItem(COSName.AA, actions); + } + + /** + * @return The page transition associated with this page or null if no transition is defined + */ + public PDTransition getTransition() + { + COSBase base = page.getDictionaryObject(COSName.TRANS); + return base instanceof COSDictionary ? new PDTransition((COSDictionary) base) : null; + } + + /** + * @param transition The new transition to set on this page. + */ + public void setTransition(PDTransition transition) + { + page.setItem(COSName.TRANS, transition); + } + + /** + * Convenient method to set a transition and the display duration + * + * @param transition The new transition to set on this page. + * @param duration The maximum length of time, in seconds, that the page shall be displayed during presentations + * before the viewer application shall automatically advance to the next page. + */ + public void setTransition(PDTransition transition, float duration) + { + page.setItem(COSName.TRANS, transition); + page.setItem(COSName.DUR, new COSFloat(duration)); + } + + /** + * This will return a list of the annotations for this page. + * + * @return List of the PDAnnotation objects, never null. The returned list is backed by the + * annotations COSArray, so any adding or deleting in this list will change the document too. + * + * @throws IOException If there is an error while creating the annotation list. + */ + public List getAnnotations() throws IOException + { + return getAnnotations(new AnnotationFilter() + { + @Override + public boolean accept(PDAnnotation annotation) + { + return true; + } + }); + } + + /** + * This will return a list of the annotations for this page. + * + * @param annotationFilter the annotation filter provided allowing to filter out specific annotations + * @return List of the PDAnnotation objects, never null. The returned list is backed by the + * annotations COSArray, so any adding or deleting in this list will change the document too. + * + * @throws IOException If there is an error while creating the annotation list. + */ + public List getAnnotations(AnnotationFilter annotationFilter) throws IOException + { + COSBase base = page.getDictionaryObject(COSName.ANNOTS); + if (base instanceof COSArray) + { + COSArray annots = (COSArray) base; + List actuals = new ArrayList<>(); + for (int i = 0; i < annots.size(); i++) + { + COSBase item = annots.getObject(i); + if (item == null) + { + continue; + } + PDAnnotation createdAnnotation = PDAnnotation.createAnnotation(item); + if (annotationFilter.accept(createdAnnotation)) + { + actuals.add(createdAnnotation); + } + } + return new COSArrayList<>(actuals, annots); + } + return new COSArrayList<>(page, COSName.ANNOTS); + } + + /** + * This will set the list of annotations. + * + * @param annotations The new list of annotations. + */ + public void setAnnotations(List annotations) + { + page.setItem(COSName.ANNOTS, COSArrayList.converterToCOSArray(annotations)); + } + + @Override + public boolean equals(Object other) + { + return other instanceof PDPage && ((PDPage) other).getCOSObject() == this.getCOSObject(); + } + + @Override + public int hashCode() + { + return page.hashCode(); + } + + /** + * Returns the resource cache associated with this page, or null if there is none. + */ + public ResourceCache getResourceCache() + { + return resourceCache; + } + + /** + * Get the viewports. + * + * @return a list of viewports or null if there is no /VP entry. + */ + public List getViewports() + { + COSBase base = page.getDictionaryObject(COSName.VP); + if (!(base instanceof COSArray)) + { + return null; + } + COSArray array = (COSArray) base; + List viewports = new ArrayList<>(); + for (int i = 0; i < array.size(); ++i) + { + COSBase base2 = array.getObject(i); + if (base2 instanceof COSDictionary) + { + viewports.add(new PDViewportDictionary((COSDictionary) base2)); + } + else + { + LOG.warn("Array element " + base2 + " is skipped, must be a (viewport) dictionary"); + } + } + return viewports; + } + + /** + * Set the viewports. + * + * @param viewports A list of viewports, or null if the entry is to be deleted. + */ + public void setViewports(List viewports) + { + if (viewports == null) + { + page.removeItem(COSName.VP); + return; + } + COSArray array = new COSArray(); + for (PDViewportDictionary viewport : viewports) + { + array.add(viewport); + } + page.setItem(COSName.VP, array); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java new file mode 100644 index 00000000000..9bcb30e84ca --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java @@ -0,0 +1,979 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.awt.geom.AffineTransform; +import java.awt.geom.PathIterator; +import java.io.Closeable; +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.OperatorName; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; +import org.apache.pdfbox.pdmodel.graphics.color.PDSeparation; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDInlineImage; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Matrix; + +/** + * Provides the ability to write to a page content stream. + * + * @author Ben Litchfield + */ +public final class PDPageContentStream extends PDAbstractContentStream implements Closeable +{ + /** + * This is to choose what to do with the stream: overwrite, append or prepend. + */ + public enum AppendMode + { + /** + * Overwrite the existing page content streams. + */ + OVERWRITE, + /** + * Append the content stream after all existing page content streams. + */ + APPEND, + /** + * Insert before all other page content streams. + */ + PREPEND; + + public boolean isOverwrite() + { + return this == OVERWRITE; + } + + public boolean isPrepend() + { + return this == PREPEND; + } + } + + private static final Log LOG = LogFactory.getLog(PDPageContentStream.class); + + /** + * Create a new PDPage content stream. This constructor overwrites all existing content streams + * of this page. + * + * @param document The document the page is part of. + * @param sourcePage The page to write the contents to. + * @throws IOException If there is an error writing to the page contents. + */ + public PDPageContentStream(PDDocument document, PDPage sourcePage) throws IOException + { + this(document, sourcePage, AppendMode.OVERWRITE, true, false); + } + + /** + * Create a new PDPage content stream. If the appendContent parameter is set to + * {@link AppendMode#APPEND}, you may want to use + * {@link #PDPageContentStream(PDDocument, PDPage, PDPageContentStream.AppendMode, boolean, boolean)} + * instead, with the fifth parameter set to true. + * + * @param document The document the page is part of. + * @param sourcePage The page to write the contents to. + * @param appendContent Indicates whether content will be overwritten, appended or prepended. + * @param compress Tell if the content stream should compress the page contents. + * @throws IOException If there is an error writing to the page contents. + */ + public PDPageContentStream(PDDocument document, PDPage sourcePage, AppendMode appendContent, + boolean compress) throws IOException + { + this(document, sourcePage, appendContent, compress, false); + } + + /** + * Create a new PDPage content stream. + * + * @param document The document the page is part of. + * @param sourcePage The page to write the contents to. + * @param appendContent Indicates whether content will be overwritten, appended or prepended. + * @param compress Tell if the content stream should compress the page contents. + * @param resetContext Tell if the graphic context should be reset. This is only relevant when + * the appendContent parameter is set to {@link AppendMode#APPEND}. You should use this when + * appending to an existing stream, because the existing stream may have changed graphic + * properties (e.g. scaling, rotation). + * @throws IOException If there is an error writing to the page contents. + */ + public PDPageContentStream(PDDocument document, PDPage sourcePage, AppendMode appendContent, + boolean compress, boolean resetContext) throws IOException + { + this(document, sourcePage, appendContent, compress, resetContext, new PDStream(document), + sourcePage.getResources() != null ? sourcePage.getResources() : new PDResources()); + } + + private PDPageContentStream(PDDocument document, PDPage sourcePage, AppendMode appendContent, + boolean compress, boolean resetContext,PDStream stream, + PDResources resources) throws IOException + { + super(document, stream.createOutputStream(compress ? COSName.FLATE_DECODE : null), resources); + + // propagate resources to the page + if (sourcePage.getResources() == null) + { + sourcePage.setResources(resources); + } + + // If request specifies the need to append/prepend to the document + if (!appendContent.isOverwrite() && sourcePage.hasContents()) + { + // Add new stream to contents array + COSBase contents = sourcePage.getCOSObject().getDictionaryObject(COSName.CONTENTS); + COSArray array; + if (contents instanceof COSArray) + { + // If contents is already an array, a new stream is simply appended to it + array = (COSArray) contents; + } + else + { + // Creates a new array and adds the current stream plus a new one to it + array = new COSArray(); + array.add(contents); + } + + if (appendContent.isPrepend()) + { + array.add(0, stream.getCOSObject()); + } + else + { + array.add(stream); + } + + // save the initial/unmodified graphics context + if (resetContext) + { + // create a new stream to prefix existing stream + PDStream prefixStream = new PDStream(document); + + // save the pre-append graphics state + OutputStream prefixOut = prefixStream.createOutputStream(); + prefixOut.write("q".getBytes(Charsets.US_ASCII)); + prefixOut.write('\n'); + prefixOut.close(); + + // insert the new stream at the beginning + array.add(0, prefixStream.getCOSObject()); + } + + // Sets the compoundStream as page contents + sourcePage.getCOSObject().setItem(COSName.CONTENTS, array); + + // restore the pre-append graphics state + if (resetContext) + { + restoreGraphicsState(); + } + } + else + { + if (sourcePage.hasContents()) + { + LOG.warn("You are overwriting an existing content, you should use the append mode"); + } + sourcePage.setContents(stream); + } + + // configure NumberFormat + setMaximumFractionDigits(5); + } + + /** + * Create a new appearance stream. Note that this is not actually a "page" content stream. + * + * @param doc The document the page is part of. + * @param appearance The appearance stream to write to. + * @throws IOException If there is an error writing to the page contents. + */ + public PDPageContentStream(PDDocument doc, PDAppearanceStream appearance) throws IOException + { + this (doc, appearance, appearance.getStream().createOutputStream()); + } + + /** + * Create a new appearance stream. Note that this is not actually a "page" content stream. + * + * @param doc The document the appearance is part of. + * @param appearance The appearance stream to add to. + * @param outputStream The appearances output stream to write to. + */ + public PDPageContentStream(PDDocument doc, PDAppearanceStream appearance, OutputStream outputStream) + { + super(doc, outputStream, appearance.getResources()); + } + + /** + * This will draw a string at the current location on the screen. + * + * @param text The text to draw. + * @throws IOException If an io exception occurs. + * @deprecated Use {@link #showText} instead. + */ + @Deprecated + public void drawString(String text) throws IOException + { + showText(text); + } + + /** + * The Td operator. + * A current text matrix will be replaced with a new one (1 0 0 1 x y). + * @param tx The x translation. + * @param ty The y translation. + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #newLineAtOffset} instead. + */ + @Deprecated + public void moveTextPositionByAmount(float tx, float ty) throws IOException + { + newLineAtOffset(tx, ty); + } + + /** + * The Tm operator. Sets the text matrix to the given values. + * A current text matrix will be replaced with the new one. + * @param a The a value of the matrix. + * @param b The b value of the matrix. + * @param c The c value of the matrix. + * @param d The d value of the matrix. + * @param e The e value of the matrix. + * @param f The f value of the matrix. + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #setTextMatrix(Matrix)} instead. + */ + @Deprecated + public void setTextMatrix(double a, double b, double c, double d, double e, double f) throws IOException + { + setTextMatrix(new Matrix((float)a, (float)b, (float)c, (float)d, (float)e, (float)f)); + } + + /** + * The Tm operator. Sets the text matrix to the given values. + * A current text matrix will be replaced with the new one. + * @param matrix the transformation matrix + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #setTextMatrix(Matrix)} instead. + */ + @Deprecated + public void setTextMatrix(AffineTransform matrix) throws IOException + { + setTextMatrix(new Matrix(matrix)); + } + + /** + * The Tm operator. Sets the text matrix to the given scaling and translation values. + * A current text matrix will be replaced with the new one. + * @param sx The scaling factor in x-direction. + * @param sy The scaling factor in y-direction. + * @param tx The translation value in x-direction. + * @param ty The translation value in y-direction. + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #setTextMatrix(Matrix)} instead. + */ + @Deprecated + public void setTextScaling(double sx, double sy, double tx, double ty) throws IOException + { + setTextMatrix(new Matrix((float) sx, 0f, 0f, (float) sy, (float) tx, (float) ty)); + } + + /** + * The Tm operator. Sets the text matrix to the given translation values. + * A current text matrix will be replaced with the new one. + * @param tx The translation value in x-direction. + * @param ty The translation value in y-direction. + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #setTextMatrix(Matrix)} instead. + */ + @Deprecated + public void setTextTranslation(double tx, double ty) throws IOException + { + setTextMatrix(Matrix.getTranslateInstance((float) tx, (float) ty)); + } + + /** + * The Tm operator. Sets the text matrix to the given rotation and translation values. + * A current text matrix will be replaced with the new one. + * @param angle The angle used for the counterclockwise rotation in radians. + * @param tx The translation value in x-direction. + * @param ty The translation value in y-direction. + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #setTextMatrix(Matrix)} instead. + */ + @Deprecated + public void setTextRotation(double angle, double tx, double ty) throws IOException + { + setTextMatrix(Matrix.getRotateInstance(angle, (float) tx, (float) ty)); + } + + /** + * Draw an inline image at the x,y coordinates, with the default size of the image. + * + * @param inlineImage The inline image to draw. + * @param x The x-coordinate to draw the inline image. + * @param y The y-coordinate to draw the inline image. + * + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #drawImage(PDInlineImage, float, float)} instead. + */ + @Deprecated + public void drawInlineImage(PDInlineImage inlineImage, float x, float y) throws IOException + { + drawImage(inlineImage, x, y, inlineImage.getWidth(), inlineImage.getHeight()); + } + + /** + * Draw an inline image at the x,y coordinates and a certain width and height. + * + * @param inlineImage The inline image to draw. + * @param x The x-coordinate to draw the inline image. + * @param y The y-coordinate to draw the inline image. + * @param width The width of the inline image to draw. + * @param height The height of the inline image to draw. + * + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #drawImage(PDInlineImage, float, float, float, float)} instead. + */ + @Deprecated + public void drawInlineImage(PDInlineImage inlineImage, float x, float y, float width, float height) throws IOException + { + drawImage(inlineImage, x, y, width, height); + } + + /** + * Draw an xobject(form or image) at the x,y coordinates and a certain width and height. + * + * @param xobject The xobject to draw. + * @param x The x-coordinate to draw the image. + * @param y The y-coordinate to draw the image. + * @param width The width of the image to draw. + * @param height The height of the image to draw. + * + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #drawImage} instead. + */ + @Deprecated + public void drawXObject(PDXObject xobject, float x, float y, float width, float height) throws IOException + { + AffineTransform transform = new AffineTransform(width, 0, 0, height, x, y); + drawXObject(xobject, transform); + } + + /** + * Draw an xobject(form or image) using the given {@link AffineTransform} to position + * the xobject. + * + * @param xobject The xobject to draw. + * @param transform the transformation matrix + * @throws IOException If there is an error writing to the stream. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #drawImage(PDImageXObject, Matrix) drawImage(PDImageXObject, Matrix)} + * or {@link #drawForm(PDFormXObject) drawForm(PDFormXObject)} with + * {@link #transform(Matrix) transform(Matrix)} instead. + */ + @Deprecated + public void drawXObject(PDXObject xobject, AffineTransform transform) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawXObject is not allowed within a text block."); + } + + String xObjectPrefix; + if (xobject instanceof PDImageXObject) + { + xObjectPrefix = "Im"; + } + else + { + xObjectPrefix = "Form"; + } + COSName objMapping = resources.add(xobject, xObjectPrefix); + + saveGraphicsState(); + transform(new Matrix(transform)); + + writeOperand(objMapping); + writeOperator(OperatorName.DRAW_OBJECT); + + restoreGraphicsState(); + } + + /** + * The cm operator. Concatenates the current transformation matrix with the given values. + * @param a The a value of the matrix. + * @param b The b value of the matrix. + * @param c The c value of the matrix. + * @param d The d value of the matrix. + * @param e The e value of the matrix. + * @param f The f value of the matrix. + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #transform} instead. + */ + @Deprecated + public void concatenate2CTM(double a, double b, double c, double d, double e, double f) throws IOException + { + transform(new Matrix((float) a, (float) b, (float) c, (float) d, (float) e, (float) f)); + } + + /** + * The cm operator. Concatenates the current transformation matrix with the given + * {@link AffineTransform}. + * @param at the transformation matrix + * @throws IOException If there is an error writing to the stream. + * @deprecated Use {@link #transform} instead. + */ + @Deprecated + public void concatenate2CTM(AffineTransform at) throws IOException + { + transform(new Matrix(at)); + } + + /** + * Set the stroking color space. This will add the colorspace to the PDResources + * if necessary. + * + * @param colorSpace The colorspace to write. + * @throws IOException If there is an error writing the colorspace. + * @deprecated Use {@link #setStrokingColor} instead. + */ + @Deprecated + public void setStrokingColorSpace(PDColorSpace colorSpace) throws IOException + { + setStrokingColorSpaceStack(colorSpace); + writeOperand(getName(colorSpace)); + writeOperator(OperatorName.STROKING_COLORSPACE); + } + + /** + * Set the stroking color space. This will add the colorspace to the PDResources + * if necessary. + * + * @param colorSpace The colorspace to write. + * @throws IOException If there is an error writing the colorspace. + * @deprecated Use {@link #setNonStrokingColor(PDColor)} instead. + */ + @Deprecated + public void setNonStrokingColorSpace(PDColorSpace colorSpace) throws IOException + { + setNonStrokingColorSpaceStack(colorSpace); + writeOperand(getName(colorSpace)); + writeOperator(OperatorName.NON_STROKING_COLORSPACE); + } + + /** + * Set the color components of current stroking color space. + * + * @param components The components to set for the current color. + * @throws IOException If there is an error while writing to the stream. + * @deprecated Use {@link #setStrokingColor(PDColor)} instead. + */ + @Deprecated + public void setStrokingColor(float[] components) throws IOException + { + if (strokingColorSpaceStack.isEmpty()) + { + throw new IllegalStateException("The color space must be set before setting a color"); + } + + for (float component : components) + { + writeOperand(component); + } + + PDColorSpace currentStrokingColorSpace = strokingColorSpaceStack.peek(); + + if (currentStrokingColorSpace instanceof PDSeparation || + currentStrokingColorSpace instanceof PDPattern || + currentStrokingColorSpace instanceof PDICCBased) + { + writeOperator(OperatorName.STROKING_COLOR_N); + } + else + { + writeOperator(OperatorName.STROKING_COLOR); + } + } + + /** + * Set the stroking color in the DeviceCMYK color space. Range is 0..255. + * + * @param c The cyan value. + * @param m The magenta value. + * @param y The yellow value. + * @param k The black value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameters are invalid. + * @deprecated Use {@link #setStrokingColor(float, float, float, float)} instead. + */ + @Deprecated + public void setStrokingColor(int c, int m, int y, int k) throws IOException + { + if (isOutside255Interval(c) || isOutside255Interval(m) || isOutside255Interval(y) || isOutside255Interval(k)) + { + throw new IllegalArgumentException("Parameters must be within 0..255, but are " + + String.format("(%d,%d,%d,%d)", c, m, y, k)); + } + setStrokingColor(c / 255f, m / 255f, y / 255f, k / 255f); + } + + /** + * Set the stroking color in the DeviceGray color space. Range is 0..255. + * + * @param g The gray value. + * @throws IOException If an IO error occurs while writing to the stream. + * @throws IllegalArgumentException If the parameter is invalid. + * @deprecated Use {@link #setStrokingColor(float)} instead. + */ + @Deprecated + public void setStrokingColor(int g) throws IOException + { + if (isOutside255Interval(g)) + { + throw new IllegalArgumentException("Parameter must be within 0..255, but is " + g); + } + setStrokingColor(g / 255f); + } + + /** + * Set the color components of current non-stroking color space. + * + * @param components The components to set for the current color. + * @throws IOException If there is an error while writing to the stream. + * @deprecated Use {@link #setNonStrokingColor(PDColor)} instead. + */ + @Deprecated + public void setNonStrokingColor(float[] components) throws IOException + { + if (nonStrokingColorSpaceStack.isEmpty()) + { + throw new IllegalStateException("The color space must be set before setting a color"); + } + + for (float component : components) + { + writeOperand(component); + } + + PDColorSpace currentNonStrokingColorSpace = nonStrokingColorSpaceStack.peek(); + + if (currentNonStrokingColorSpace instanceof PDSeparation || + currentNonStrokingColorSpace instanceof PDPattern || + currentNonStrokingColorSpace instanceof PDICCBased) + { + writeOperator(OperatorName.NON_STROKING_COLOR_N); + } + else + { + writeOperator(OperatorName.NON_STROKING_COLOR); + } + } + + /** + * Fill a rectangle on the page using the current non stroking color. + * + * @param x The lower left x coordinate. + * @param y The lower left y coordinate. + * @param width The width of the rectangle. + * @param height The height of the rectangle. + * @throws IOException If there is an error while drawing on the screen. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #addRect} followed by {@link #fill()} instead. + */ + @Deprecated + public void fillRect(float x, float y, float width, float height) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: fillRect is not allowed within a text block."); + } + addRect(x, y, width, height); + fill(); + } + + /** + * Append a cubic Bézier curve to the current path. The curve extends from the current + * point to the point (x3 , y3 ), using (x1 , y1 ) and (x2 , y2 ) as the Bézier control points + * @param x1 x coordinate of the point 1 + * @param y1 y coordinate of the point 1 + * @param x2 x coordinate of the point 2 + * @param y2 y coordinate of the point 2 + * @param x3 x coordinate of the point 3 + * @param y3 y coordinate of the point 3 + * @throws IOException If there is an error while adding the . + * @deprecated Use {@link #curveTo} instead. + */ + @Deprecated + public void addBezier312(float x1, float y1, float x2, float y2, float x3, float y3) throws IOException + { + curveTo(x1, y1, x2, y2, x3, y3); + } + + /** + * Append a cubic Bézier curve to the current path. The curve extends from the current + * point to the point (x3 , y3 ), using the current point and (x2 , y2 ) as the Bézier control points/ + * + * @param x2 x coordinate of the point 2 + * @param y2 y coordinate of the point 2 + * @param x3 x coordinate of the point 3 + * @param y3 y coordinate of the point 3 + * @throws IOException If there is an error while adding the . + * @deprecated Use {@link #curveTo2} instead. + */ + @Deprecated + public void addBezier32(float x2, float y2, float x3, float y3) throws IOException + { + curveTo2(x2, y2, x3, y3); + } + + /** + * Append a cubic Bézier curve to the current path. The curve extends from the current + * point to the point (x3 , y3 ), using (x1 , y1 ) and (x3 , y3 ) as the Bézier control points/ + * + * @param x1 x coordinate of the point 1 + * @param y1 y coordinate of the point 1 + * @param x3 x coordinate of the point 3 + * @param y3 y coordinate of the point 3 + * @throws IOException If there is an error while adding the . + * @deprecated Use {@link #curveTo1} instead. + */ + @Deprecated + public void addBezier31(float x1, float y1, float x3, float y3) throws IOException + { + curveTo1(x1, y1, x3, y3); + } + + /** + * add a line to the current path. + * + * @param xStart The start x coordinate. + * @param yStart The start y coordinate. + * @param xEnd The end x coordinate. + * @param yEnd The end y coordinate. + * @throws IOException If there is an error while adding the line. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #moveTo moveto(xStart,yStart)} followed by + * {@link #lineTo lineTo(xEnd,yEnd)}. + */ + @Deprecated + public void addLine(float xStart, float yStart, float xEnd, float yEnd) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: addLine is not allowed within a text block."); + } + moveTo(xStart, yStart); + lineTo(xEnd, yEnd); + } + + /** + * Draw a line on the page using the current stroking color and the current line width. + * + * @param xStart The start x coordinate. + * @param yStart The start y coordinate. + * @param xEnd The end x coordinate. + * @param yEnd The end y coordinate. + * @throws IOException If there is an error while drawing on the screen. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #moveTo moveto(xStart,yStart)} followed by + * {@link #lineTo lineTo(xEnd,yEnd)} followed by {@link #stroke stroke()}. + */ + @Deprecated + public void drawLine(float xStart, float yStart, float xEnd, float yEnd) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawLine is not allowed within a text block."); + } + moveTo(xStart, yStart); + lineTo(xEnd, yEnd); + stroke(); + } + + /** + * Add a polygon to the current path. + * @param x x coordinate of each points + * @param y y coordinate of each points + * @throws IOException If there is an error while drawing on the screen. + * @throws IllegalStateException If the method was called within a text block. + * @throws IllegalArgumentException If the two arrays have different lengths. + * @deprecated Use {@link #moveTo} and {@link #lineTo} methods instead. + */ + @Deprecated + public void addPolygon(float[] x, float[] y) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: addPolygon is not allowed within a text block."); + } + if (x.length != y.length) + { + throw new IllegalArgumentException("Error: some points are missing coordinate"); + } + for (int i = 0; i < x.length; i++) + { + if (i == 0) + { + moveTo(x[i], y[i]); + } + else + { + lineTo(x[i], y[i]); + } + } + closeSubPath(); + } + + /** + * Draw a polygon on the page using the current stroking color. + * @param x x coordinate of each points + * @param y y coordinate of each points + * @throws IOException If there is an error while drawing on the screen. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #moveTo} and {@link #lineTo} methods instead. + */ + @Deprecated + public void drawPolygon(float[] x, float[] y) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: drawPolygon is not allowed within a text block."); + } + addPolygon(x, y); + stroke(); + } + + /** + * Draw and fill a polygon on the page using the current stroking / non stroking colors. + * @param x x coordinate of each points + * @param y y coordinate of each points + * @throws IOException If there is an error while drawing on the screen. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #moveTo} and {@link #lineTo} methods instead. + */ + @Deprecated + public void fillPolygon(float[] x, float[] y) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: fillPolygon is not allowed within a text block."); + } + addPolygon(x, y); + fill(); + } + + /** + * Fill the path. + * + * @param windingRule the winding rule to be used for filling + * @throws IOException If the content stream could not be written + * @throws IllegalArgumentException If the parameter is not a valid winding rule. + * @deprecated Use {@link #fill()} or {@link #fillEvenOdd} instead. + */ + @Deprecated + public void fill(int windingRule) throws IOException + { + switch (windingRule) + { + case PathIterator.WIND_NON_ZERO: + fill(); + break; + case PathIterator.WIND_EVEN_ODD: + fillEvenOdd(); + break; + default: + throw new IllegalArgumentException("Error: unknown value for winding rule"); + } + } + + /** + * Closes the current subpath. + * + * @throws IOException If the content stream could not be written + * @deprecated Use {@link #closePath()} instead. + */ + @Deprecated + public void closeSubPath() throws IOException + { + closePath(); + } + + /** + * Clip path. + * + * @param windingRule the winding rule to be used for clipping + * @throws IOException If there is an error while clipping the path. + * @throws IllegalStateException If the method was called within a text block. + * @deprecated Use {@link #clip()} or {@link #clipEvenOdd} instead. + */ + @Deprecated + public void clipPath(int windingRule) throws IOException + { + if (inTextMode) + { + throw new IllegalStateException("Error: clipPath is not allowed within a text block."); + } + switch (windingRule) + { + case PathIterator.WIND_NON_ZERO: + writeOperator(OperatorName.CLIP_NON_ZERO); + break; + case PathIterator.WIND_EVEN_ODD: + writeOperator(OperatorName.CLIP_EVEN_ODD); + break; + default: + throw new IllegalArgumentException("Error: unknown value for winding rule"); + } + writeOperator(OperatorName.ENDPATH); + } + + /** + * Begin a marked content sequence. + * + * @param tag the tag + * @throws IOException if an I/O error occurs + * @deprecated Use {@link #beginMarkedContent} instead. + */ + @Deprecated + public void beginMarkedContentSequence(COSName tag) throws IOException + { + beginMarkedContent(tag); + } + + /** + * Begin a marked content sequence with a reference to an entry in the page resources' + * Properties dictionary. + * + * @param tag the tag + * @param propsName the properties reference + * @throws IOException if an I/O error occurs + * @deprecated Use {@link #beginMarkedContent(COSName, PDPropertyList)} instead. + */ + @Deprecated + public void beginMarkedContentSequence(COSName tag, COSName propsName) throws IOException + { + writeOperand(tag); + writeOperand(propsName); + writeOperator(OperatorName.BEGIN_MARKED_CONTENT_SEQ); + } + + /** + * End a marked content sequence. + * + * @throws IOException If the content stream could not be written + * @deprecated Use {@link #endMarkedContent} instead. + */ + @Deprecated + public void endMarkedContentSequence() throws IOException + { + endMarkedContent(); + } + + /** + * This will append raw commands to the content stream. + * + * @param commands The commands to append to the stream. + * @throws IOException If an error occurs while writing to the stream. + * @deprecated Usage of this method is discouraged. + */ + @Deprecated + public void appendRawCommands(String commands) throws IOException + { + write(commands); + } + + /** + * This will append raw commands to the content stream. + * + * @param commands The commands to append to the stream. + * @throws IOException If an error occurs while writing to the stream. + * @deprecated Usage of this method is discouraged. + */ + @Deprecated + public void appendRawCommands(byte[] commands) throws IOException + { + write(commands); + } + + /** + * This will append raw commands to the content stream. + * + * @param data Append a raw byte to the stream. + * @throws IOException If an error occurs while writing to the stream. + * @deprecated Usage of this method is discouraged. + */ + @Deprecated + public void appendRawCommands(int data) throws IOException + { + writeOperand(data); + } + + /** + * This will append raw commands to the content stream. + * + * @param data Append a formatted double value to the stream. + * @throws IOException If an error occurs while writing to the stream. + * @deprecated Usage of this method is discouraged. + */ + @Deprecated + public void appendRawCommands(double data) throws IOException + { + writeOperand((float) data); + } + + /** + * This will append raw commands to the content stream. + * + * @param data Append a formatted float value to the stream. + * @throws IOException If an error occurs while writing to the stream. + * @deprecated Usage of this method is discouraged. + */ + @Deprecated + public void appendRawCommands(float data) throws IOException + { + writeOperand(data); + } + + /** + * This will append a {@link COSName} to the content stream. + * + * @param name the name + * @throws IOException If an error occurs while writing to the stream. + * @deprecated Usage of this method is discouraged. + */ + @Deprecated + public void appendCOSName(COSName name) throws IOException + { + writeOperand(name); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java new file mode 100644 index 00000000000..a3453dc2da4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java @@ -0,0 +1,542 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.util.ArrayDeque; +import java.util.Iterator; +import java.util.Queue; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * The page tree, which defines the ordering of pages in the document in an efficient manner. + * + * @author John Hewson + */ +public class PDPageTree implements COSObjectable, Iterable +{ + private static final Log LOG = LogFactory.getLog(PDPageTree.class); + private final COSDictionary root; + private final PDDocument document; // optional + + /** + * Constructor for embedding. + */ + public PDPageTree() + { + root = new COSDictionary(); + root.setItem(COSName.TYPE, COSName.PAGES); + root.setItem(COSName.KIDS, new COSArray()); + root.setItem(COSName.COUNT, COSInteger.ZERO); + document = null; + } + + /** + * Constructor for reading. + * + * @param root A page tree root. + */ + public PDPageTree(COSDictionary root) + { + this(root, null); + } + + /** + * Constructor for reading. + * + * @param root A page tree root. + * @param document The document which contains "root". + */ + PDPageTree(COSDictionary root, PDDocument document) + { + if (root == null) + { + throw new IllegalArgumentException("page tree root cannot be null"); + } + // repair bad PDFs which contain a Page dict instead of a page tree, see PDFBOX-3154 + if (COSName.PAGE.equals(root.getCOSName(COSName.TYPE))) + { + COSArray kids = new COSArray(); + kids.add(root); + this.root = new COSDictionary(); + this.root.setItem(COSName.KIDS, kids); + this.root.setInt(COSName.COUNT, 1); + } + else + { + this.root = root; + } + this.document = document; + } + + /** + * Returns the given attribute, inheriting from parent tree nodes if necessary. + * + * @param node page object + * @param key the key to look up + * @return COS value for the given key + */ + public static COSBase getInheritableAttribute(COSDictionary node, COSName key) + { + COSBase value = node.getDictionaryObject(key); + if (value != null) + { + return value; + } + + COSBase base = node.getDictionaryObject(COSName.PARENT, COSName.P); + if (base instanceof COSDictionary) + { + COSDictionary parent = (COSDictionary) base; + if (COSName.PAGES.equals(parent.getDictionaryObject(COSName.TYPE))) + { + return getInheritableAttribute(parent, key); + } + } + + return null; + } + + /** + * Returns an iterator which walks all pages in the tree, in order. + */ + @Override + public Iterator iterator() + { + return new PageIterator(root); + } + + /** + * Helper to get kids from malformed PDFs. + * @param node page tree node + * @return list of kids + */ + private List getKids(COSDictionary node) + { + List result = new ArrayList<>(); + + COSArray kids = node.getCOSArray(COSName.KIDS); + if (kids == null) + { + // probably a malformed PDF + return result; + } + + for (int i = 0, size = kids.size(); i < size; i++) + { + COSBase base = kids.getObject(i); + if (base instanceof COSDictionary) + { + result.add((COSDictionary) base); + } + else + { + LOG.warn("COSDictionary expected, but got " + + (base == null ? "null" : base.getClass().getSimpleName())); + } + } + + return result; + } + + /** + * Iterator which walks all pages in the tree, in order. + */ + private final class PageIterator implements Iterator + { + private final Queue queue = new ArrayDeque<>(); + + private PageIterator(COSDictionary node) + { + enqueueKids(node); + } + + private void enqueueKids(COSDictionary node) + { + if (isPageTreeNode(node)) + { + List kids = getKids(node); + for (COSDictionary kid : kids) + { + enqueueKids(kid); + } + } + else + { + queue.add(node); + } + } + + @Override + public boolean hasNext() + { + return !queue.isEmpty(); + } + + @Override + public PDPage next() + { + COSDictionary next = queue.poll(); + + sanitizeType(next); + + ResourceCache resourceCache = document != null ? document.getResourceCache() : null; + return new PDPage(next, resourceCache); + } + + @Override + public void remove() + { + throw new UnsupportedOperationException(); + } + } + + /** + * Returns the page at the given index. + * + * @param index zero-based index + */ + public PDPage get(int index) + { + COSDictionary dict = get(index + 1, root, 0); + + sanitizeType(dict); + + ResourceCache resourceCache = document != null ? document.getResourceCache() : null; + return new PDPage(dict, resourceCache); + } + + private static void sanitizeType(COSDictionary dictionary) + { + COSName type = dictionary.getCOSName(COSName.TYPE); + if (type == null) + { + dictionary.setItem(COSName.TYPE, COSName.PAGE); + return; + } + if (!COSName.PAGE.equals(type)) + { + throw new IllegalStateException("Expected 'Page' but found " + type); + } + } + + /** + * Returns the given COS page using a depth-first search. + * + * @param pageNum 1-based page number + * @param node page tree node to search + * @param encountered number of pages encountered so far + * @return COS dictionary of the Page object + */ + private COSDictionary get(int pageNum, COSDictionary node, int encountered) + { + if (pageNum < 0) + { + throw new IndexOutOfBoundsException("Index out of bounds: " + pageNum); + } + + if (isPageTreeNode(node)) + { + int count = node.getInt(COSName.COUNT, 0); + if (pageNum <= encountered + count) + { + // it's a kid of this node + for (COSDictionary kid : getKids(node)) + { + // which kid? + if (isPageTreeNode(kid)) + { + int kidCount = kid.getInt(COSName.COUNT, 0); + if (pageNum <= encountered + kidCount) + { + // it's this kid + return get(pageNum, kid, encountered); + } + else + { + encountered += kidCount; + } + } + else + { + // single page + encountered++; + if (pageNum == encountered) + { + // it's this page + return get(pageNum, kid, encountered); + } + } + } + + throw new IllegalStateException("Index not found: " + pageNum); + } + else + { + throw new IndexOutOfBoundsException("Index out of bounds: " + pageNum); + } + } + else + { + if (encountered == pageNum) + { + return node; + } + else + { + throw new IllegalStateException("Index not found: " + pageNum); + } + } + } + + /** + * Returns true if the node is a page tree node (i.e. and intermediate). + */ + private boolean isPageTreeNode(COSDictionary node ) + { + // some files such as PDFBOX-2250-229205.pdf don't have Pages set as the Type, so we have + // to check for the presence of Kids too + return node != null && + (node.getCOSName(COSName.TYPE) == COSName.PAGES || node.containsKey(COSName.KIDS)); + } + + /** + * Returns the index of the given page, or -1 if it does not exist. + * + * @param page The page to search for. + * @return the zero-based index of the given page, or -1 if the page is not found. + */ + public int indexOf(PDPage page) + { + SearchContext context = new SearchContext(page); + if (findPage(context, root)) + { + return context.index; + } + return -1; + } + + private boolean findPage(SearchContext context, COSDictionary node) + { + for (COSDictionary kid : getKids(node)) + { + if (context.found) + { + break; + } + if (isPageTreeNode(kid)) + { + findPage(context, kid); + } + else + { + context.visitPage(kid); + } + } + return context.found; + } + + private static final class SearchContext + { + private final COSDictionary searched; + private int index = -1; + private boolean found; + + private SearchContext(PDPage page) + { + this.searched = page.getCOSObject(); + } + + private void visitPage(COSDictionary current) + { + index++; + found = searched.equals(current); + } + } + + /** + * Returns the number of leaf nodes (page objects) that are descendants of this root within the + * page tree. + */ + public int getCount() + { + return root.getInt(COSName.COUNT, 0); + } + + @Override + public COSDictionary getCOSObject() + { + return root; + } + + /** + * Removes the page with the given index from the page tree. + * @param index zero-based page index + */ + public void remove(int index) + { + COSDictionary node = get(index + 1, root, 0); + remove(node); + } + + /** + * Removes the given page from the page tree. + * + * @param page The page to remove. + */ + public void remove(PDPage page) + { + remove(page.getCOSObject()); + } + + /** + * Removes the given COS page. + */ + private void remove(COSDictionary node) + { + // remove from parent's kids + COSDictionary parent = (COSDictionary) node.getDictionaryObject(COSName.PARENT, COSName.P); + COSArray kids = (COSArray)parent.getDictionaryObject(COSName.KIDS); + if (kids.removeObject(node)) + { + // update ancestor counts + do + { + node = (COSDictionary) node.getDictionaryObject(COSName.PARENT, COSName.P); + if (node != null) + { + node.setInt(COSName.COUNT, node.getInt(COSName.COUNT) - 1); + } + } + while (node != null); + } + } + + /** + * Adds the given page to this page tree. + * + * @param page The page to add. + */ + public void add(PDPage page) + { + // set parent + COSDictionary node = page.getCOSObject(); + node.setItem(COSName.PARENT, root); + + // todo: re-balance tree? (or at least group new pages into tree nodes of e.g. 20) + + // add to parent's kids + COSArray kids = (COSArray)root.getDictionaryObject(COSName.KIDS); + kids.add(node); + + // update ancestor counts + do + { + node = (COSDictionary) node.getDictionaryObject(COSName.PARENT, COSName.P); + if (node != null) + { + node.setInt(COSName.COUNT, node.getInt(COSName.COUNT) + 1); + } + } + while (node != null); + } + + /** + * Insert a page before another page within a page tree. + * + * @param newPage the page to be inserted. + * @param nextPage the page that is to be after the new page. + * @throws IllegalArgumentException if one attempts to insert a page that isn't part of a page + * tree. + */ + public void insertBefore(PDPage newPage, PDPage nextPage) + { + COSDictionary nextPageDict = nextPage.getCOSObject(); + COSDictionary parentDict = (COSDictionary) nextPageDict.getDictionaryObject(COSName.PARENT); + COSArray kids = (COSArray) parentDict.getDictionaryObject(COSName.KIDS); + boolean found = false; + for (int i = 0; i < kids.size(); ++i) + { + COSDictionary pageDict = (COSDictionary) kids.getObject(i); + if (pageDict.equals(nextPage.getCOSObject())) + { + kids.add(i, newPage.getCOSObject()); + newPage.getCOSObject().setItem(COSName.PARENT, parentDict); + found = true; + break; + } + } + if (!found) + { + throw new IllegalArgumentException("attempted to insert before orphan page"); + } + increaseParents(parentDict); + } + + /** + * Insert a page after another page within a page tree. + * + * @param newPage the page to be inserted. + * @param prevPage the page that is to be before the new page. + * @throws IllegalArgumentException if one attempts to insert a page that isn't part of a page + * tree. + */ + public void insertAfter(PDPage newPage, PDPage prevPage) + { + COSDictionary prevPageDict = prevPage.getCOSObject(); + COSDictionary parentDict = (COSDictionary) prevPageDict.getDictionaryObject(COSName.PARENT); + COSArray kids = (COSArray) parentDict.getDictionaryObject(COSName.KIDS); + boolean found = false; + for (int i = 0; i < kids.size(); ++i) + { + COSDictionary pageDict = (COSDictionary) kids.getObject(i); + if (pageDict.equals(prevPage.getCOSObject())) + { + kids.add(i + 1, newPage.getCOSObject()); + newPage.getCOSObject().setItem(COSName.PARENT, parentDict); + found = true; + break; + } + } + if (!found) + { + throw new IllegalArgumentException("attempted to insert before orphan page"); + } + increaseParents(parentDict); + } + + private void increaseParents(COSDictionary parentDict) + { + do + { + int cnt = parentDict.getInt(COSName.COUNT); + parentDict.setInt(COSName.COUNT, cnt + 1); + parentDict = (COSDictionary) parentDict.getDictionaryObject(COSName.PARENT); + } + while (parentDict != null); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPatternContentStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPatternContentStream.java new file mode 100644 index 00000000000..c4a6bf88e54 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPatternContentStream.java @@ -0,0 +1,39 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; + +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; + +/** + * + * @author Tilman Hausherr + */ +public final class PDPatternContentStream extends PDAbstractContentStream +{ + /** + * Create a new tiling pattern content stream. + * + * @param pattern The tiling pattern stream to write to. + * + * @throws IOException If there is an error writing to the form contents. + */ + public PDPatternContentStream(PDTilingPattern pattern) throws IOException + { + super(null, pattern.getContentStream().createOutputStream(), pattern.getResources()); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java new file mode 100644 index 00000000000..30fb4cd761f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java @@ -0,0 +1,818 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import java.lang.ref.SoftReference; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDFontFactory; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; + +/** + * A set of resources available at the page/pages/stream level. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDResources implements COSObjectable +{ + private final COSDictionary resources; + private final ResourceCache cache; + + // PDFBOX-3442 cache fonts that are not indirect objects, as these aren't cached in ResourceCache + // and this would result in huge memory footprint in text extraction + private final Map > directFontCache = + new HashMap<>(); + + /** + * Constructor for embedding. + */ + public PDResources() + { + resources = new COSDictionary(); + cache = null; + } + + /** + * Constructor for reading. + * + * @param resourceDictionary The cos dictionary for this resource. + */ + public PDResources(COSDictionary resourceDictionary) + { + if (resourceDictionary == null) + { + throw new IllegalArgumentException("resourceDictionary is null"); + } + resources = resourceDictionary; + cache = null; + } + + /** + * Constructor for reading. + * + * @param resourceDictionary The cos dictionary for this resource. + * @param resourceCache The document's resource cache, may be null. + */ + public PDResources(COSDictionary resourceDictionary, ResourceCache resourceCache) + { + if (resourceDictionary == null) + { + throw new IllegalArgumentException("resourceDictionary is null"); + } + resources = resourceDictionary; + cache = resourceCache; + } + + /** + * Returns the underlying dictionary. + */ + @Override + public COSDictionary getCOSObject() + { + return resources; + } + + /** + * Returns the font resource with the given name, or null if none exists. + * + * @param name Name of the font resource. + * @throws IOException if something went wrong. + */ + public PDFont getFont(COSName name) throws IOException + { + COSObject indirect = getIndirect(COSName.FONT, name); + if (cache != null && indirect != null) + { + PDFont cached = cache.getFont(indirect); + if (cached != null) + { + return cached; + } + } + else if (indirect == null) + { + SoftReference ref = directFontCache.get(name); + if (ref != null) + { + PDFont cached = ref.get(); + if (cached != null) + { + return cached; + } + } + } + + PDFont font = null; + COSDictionary dict = (COSDictionary)get(COSName.FONT, name); + if (dict != null) + { + font = PDFontFactory.createFont(dict, cache); + } + + if (cache != null && indirect != null) + { + cache.put(indirect, font); + } + else if (indirect == null) + { + directFontCache.put(name, new SoftReference<>(font)); + } + return font; + } + + /** + * Returns the color space resource with the given name, or null if none exists. + * + * @param name Name of the color space resource. + * @return a new color space. + * @throws IOException if something went wrong. + */ + public PDColorSpace getColorSpace(COSName name) throws IOException + { + return getColorSpace(name, false); + } + + /** + * Returns the color space resource with the given name, or null if none exists. This method is + * for PDFBox internal use only, others should use {@link #getColorSpace(COSName)}. + * + * @param name Name of the color space resource. + * @param wasDefault if current color space was used by a default color space. This parameter is + * to + * @return a new color space. + * @throws IOException if something went wrong. + */ + public PDColorSpace getColorSpace(COSName name, boolean wasDefault) throws IOException + { + COSObject indirect = getIndirect(COSName.COLORSPACE, name); + if (cache != null && indirect != null) + { + PDColorSpace cached = cache.getColorSpace(indirect); + if (cached != null) + { + return cached; + } + } + + // get the instance + PDColorSpace colorSpace; + COSBase object = get(COSName.COLORSPACE, name); + if (object != null) + { + colorSpace = PDColorSpace.create(object, this, wasDefault); + } + else + { + colorSpace = PDColorSpace.create(name, this, wasDefault); + } + + // we can't cache PDPattern, because it holds page resources, see PDFBOX-2370 + if (cache != null && !(colorSpace instanceof PDPattern)) + { + cache.put(indirect, colorSpace); + } + return colorSpace; + } + + /** + * Returns true if the given color space name exists in these resources. + * + * @param name Name of the color space resource. + */ + public boolean hasColorSpace(COSName name) + { + return get(COSName.COLORSPACE, name) != null; + } + + /** + * Returns the extended graphics state resource with the given name, or null + * if none exists. + * + * @param name Name of the graphics state resource. + */ + public PDExtendedGraphicsState getExtGState(COSName name) + { + COSObject indirect = getIndirect(COSName.EXT_G_STATE, name); + if (cache != null && indirect != null) + { + PDExtendedGraphicsState cached = cache.getExtGState(indirect); + if (cached != null) + { + return cached; + } + } + + // get the instance + PDExtendedGraphicsState extGState = null; + COSDictionary dict = (COSDictionary)get(COSName.EXT_G_STATE, name); + if (dict != null) + { + extGState = new PDExtendedGraphicsState(dict); + } + + if (cache != null) + { + cache.put(indirect, extGState); + } + return extGState; + } + + /** + * Returns the shading resource with the given name, or null if none exists. + * + * @param name Name of the shading resource. + * @throws IOException if something went wrong. + */ + public PDShading getShading(COSName name) throws IOException + { + COSObject indirect = getIndirect(COSName.SHADING, name); + if (cache != null && indirect != null) + { + PDShading cached = cache.getShading(indirect); + if (cached != null) + { + return cached; + } + } + + // get the instance + PDShading shading = null; + COSDictionary dict = (COSDictionary)get(COSName.SHADING, name); + if (dict != null) + { + shading = PDShading.create(dict); + } + + if (cache != null) + { + cache.put(indirect, shading); + } + return shading; + } + + /** + * Returns the pattern resource with the given name, or null if none exists. + * + * @param name Name of the pattern resource. + * @throws IOException if something went wrong. + */ + public PDAbstractPattern getPattern(COSName name) throws IOException + { + COSObject indirect = getIndirect(COSName.PATTERN, name); + if (cache != null && indirect != null) + { + PDAbstractPattern cached = cache.getPattern(indirect); + if (cached != null) + { + return cached; + } + } + + // get the instance + PDAbstractPattern pattern = null; + COSDictionary dict = (COSDictionary)get(COSName.PATTERN, name); + if (dict != null) + { + pattern = PDAbstractPattern.create(dict); + } + + if (cache != null) + { + cache.put(indirect, pattern); + } + return pattern; + } + + /** + * Returns the property list resource with the given name, or null if none exists. + * + * @param name Name of the property list resource. + */ + public PDPropertyList getProperties(COSName name) + { + COSObject indirect = getIndirect(COSName.PROPERTIES, name); + if (cache != null && indirect != null) + { + PDPropertyList cached = cache.getProperties(indirect); + if (cached != null) + { + return cached; + } + } + + // get the instance + PDPropertyList propertyList = null; + COSDictionary dict = (COSDictionary)get(COSName.PROPERTIES, name); + if (dict != null) + { + propertyList = PDPropertyList.create(dict); + } + + if (cache != null) + { + cache.put(indirect, propertyList); + } + return propertyList; + } + + /** + * Tells whether the XObject resource with the given name is an image. + * + * @param name Name of the XObject resource. + * @return true if it is an image XObject, false if not. + */ + public boolean isImageXObject(COSName name) + { + // get the instance + COSBase value = get(COSName.XOBJECT, name); + if (value == null) + { + return false; + } + else if (value instanceof COSObject) + { + value = ((COSObject) value).getObject(); + } + if (!(value instanceof COSStream)) + { + return false; + } + COSStream stream = (COSStream) value; + return COSName.IMAGE.equals(stream.getCOSName(COSName.SUBTYPE)); + } + + /** + * Returns the XObject resource with the given name, or null if none exists. + * + * @param name Name of the XObject resource. + * @throws IOException if something went wrong. + */ + public PDXObject getXObject(COSName name) throws IOException + { + COSObject indirect = getIndirect(COSName.XOBJECT, name); + if (cache != null && indirect != null) + { + PDXObject cached = cache.getXObject(indirect); + if (cached != null) + { + return cached; + } + } + + // get the instance + PDXObject xobject; + COSBase value = get(COSName.XOBJECT, name); + if (value == null) + { + xobject = null; + } + else if (value instanceof COSObject) + { + xobject = PDXObject.createXObject(((COSObject) value).getObject(), this); + } + else + { + xobject = PDXObject.createXObject(value, this); + } + if (cache != null && isAllowedCache(xobject)) + { + cache.put(indirect, xobject); + } + return xobject; + } + + private boolean isAllowedCache(PDXObject xobject) + { + if (xobject instanceof PDImageXObject) + { + COSBase colorSpace = xobject.getCOSObject().getDictionaryObject(COSName.COLORSPACE); + if (colorSpace instanceof COSName) + { + // don't cache if it might use page resources, see PDFBOX-2370 and PDFBOX-3484 + COSName colorSpaceName = (COSName) colorSpace; + if (colorSpaceName.equals(COSName.DEVICECMYK) && hasColorSpace(COSName.DEFAULT_CMYK)) + { + return false; + } + if (colorSpaceName.equals(COSName.DEVICERGB) && hasColorSpace(COSName.DEFAULT_RGB)) + { + return false; + } + if (colorSpaceName.equals(COSName.DEVICEGRAY) && hasColorSpace(COSName.DEFAULT_GRAY)) + { + return false; + } + if (hasColorSpace(colorSpaceName)) + { + return false; + } + } + } + return true; + } + + /** + * Returns the resource with the given name and kind as an indirect object, or null. + */ + private COSObject getIndirect(COSName kind, COSName name) + { + COSDictionary dict = (COSDictionary)resources.getDictionaryObject(kind); + if (dict == null) + { + return null; + } + COSBase base = dict.getItem(name); + if (base instanceof COSObject) + { + return (COSObject)base; + } + // not an indirect object. Resource may have been added at runtime. + return null; + } + + /** + * Returns the resource with the given name and kind, or null. + */ + private COSBase get(COSName kind, COSName name) + { + COSDictionary dict = (COSDictionary)resources.getDictionaryObject(kind); + if (dict == null) + { + return null; + } + return dict.getDictionaryObject(name); + } + + /** + * Returns the names of the color space resources, if any. + */ + public Iterable getColorSpaceNames() + { + return getNames(COSName.COLORSPACE); + } + + /** + * Returns the names of the XObject resources, if any. + */ + public Iterable getXObjectNames() + { + return getNames(COSName.XOBJECT); + } + + /** + * Returns the names of the font resources, if any. + */ + public Iterable getFontNames() + { + return getNames(COSName.FONT); + } + + /** + * Returns the names of the property list resources, if any. + */ + public Iterable getPropertiesNames() + { + return getNames(COSName.PROPERTIES); + } + + /** + * Returns the names of the shading resources, if any. + */ + public Iterable getShadingNames() + { + return getNames(COSName.SHADING); + } + + /** + * Returns the names of the pattern resources, if any. + */ + public Iterable getPatternNames() + { + return getNames(COSName.PATTERN); + } + + /** + * Returns the names of the extended graphics state resources, if any. + */ + public Iterable getExtGStateNames() + { + return getNames(COSName.EXT_G_STATE); + } + + /** + * Returns the resource names of the given kind. + */ + private Iterable getNames(COSName kind) + { + COSDictionary dict = (COSDictionary)resources.getDictionaryObject(kind); + if (dict == null) + { + return Collections.emptySet(); + } + return dict.keySet(); + } + + /** + * Adds the given font to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param font the font to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDFont font) + { + return add(COSName.FONT, "F", font); + } + + /** + * Adds the given color space to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param colorSpace the color space to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDColorSpace colorSpace) + { + return add(COSName.COLORSPACE, "cs", colorSpace); + } + + /** + * Adds the given extended graphics state to the resources of the current page and returns the + * name for the new resources. Returns the existing resource name if the given item already exists. + * + * @param extGState the extended graphics state to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDExtendedGraphicsState extGState) + { + return add(COSName.EXT_G_STATE, "gs", extGState); + } + + /** + * Adds the given shading to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param shading the shading to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDShading shading) + { + return add(COSName.SHADING, "sh", shading); + } + + /** + * Adds the given pattern to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param pattern the pattern to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDAbstractPattern pattern) + { + return add(COSName.PATTERN, "p", pattern); + } + + /** + * Adds the given property list to the resources of the current page and returns the name for + * the new resources. Returns the existing resource name if the given item already exists. + * + * @param properties the property list to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDPropertyList properties) + { + if (properties instanceof PDOptionalContentGroup) + { + return add(COSName.PROPERTIES, "oc", properties); + } + else + { + return add(COSName.PROPERTIES, "Prop", properties); + } + } + + /** + * Adds the given image to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param image the image to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDImageXObject image) + { + return add(COSName.XOBJECT, "Im", image); + } + + /** + * Adds the given form to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param form the form to add + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDFormXObject form) + { + return add(COSName.XOBJECT, "Form", form); + } + + /** + * Adds the given XObject to the resources of the current page and returns the name for the + * new resources. Returns the existing resource name if the given item already exists. + * + * @param xobject the XObject to add + * @param prefix the prefix to be used when creating the resource name + * @return the name of the resource in the resources dictionary + */ + public COSName add(PDXObject xobject, String prefix) + { + return add(COSName.XOBJECT, prefix, xobject); + } + + /** + * Adds the given resource if it does not already exist. + */ + private COSName add(COSName kind, String prefix, COSObjectable object) + { + // return the existing key if the item exists already + COSDictionary dict = (COSDictionary)resources.getDictionaryObject(kind); + if (dict != null && dict.containsValue(object.getCOSObject())) + { + return dict.getKeyForValue(object.getCOSObject()); + } + + // PDFBOX-4509: It could exist as an indirect object, happens when a font is taken from the + // AcroForm default resources of a loaded PDF. + if (dict != null && COSName.FONT.equals(kind)) + { + for (Map.Entry entry : dict.entrySet()) + { + if (entry.getValue() instanceof COSObject && + object.getCOSObject() == ((COSObject) entry.getValue()).getObject()) + { + return entry.getKey(); + } + } + } + + // add the item with a new key + COSName name = createKey(kind, prefix); + put(kind, name, object); + return name; + } + + /** + * Returns a unique key for a new resource. + */ + private COSName createKey(COSName kind, String prefix) + { + COSDictionary dict = (COSDictionary)resources.getDictionaryObject(kind); + if (dict == null) + { + return COSName.getPDFName(prefix + 1); + } + + // find a unique key + String key; + int n = dict.keySet().size(); + do + { + ++n; + key = prefix + n; + } + while (dict.containsKey(key)); + return COSName.getPDFName(key); + } + + /** + * Sets the value of a given named resource. + */ + private void put(COSName kind, COSName name, COSObjectable object) + { + COSDictionary dict = (COSDictionary)resources.getDictionaryObject(kind); + if (dict == null) + { + dict = new COSDictionary(); + resources.setItem(kind, dict); + } + dict.setItem(name, object); + } + + /** + * Sets the font resource with the given name. + * + * @param name the name of the resource + * @param font the font to be added + */ + public void put(COSName name, PDFont font) + { + put(COSName.FONT, name, font); + } + + /** + * Sets the color space resource with the given name. + * + * @param name the name of the resource + * @param colorSpace the color space to be added + */ + public void put(COSName name, PDColorSpace colorSpace) + { + put(COSName.COLORSPACE, name, colorSpace); + } + + /** + * Sets the extended graphics state resource with the given name. + * + * @param name the name of the resource + * @param extGState the extended graphics state to be added + */ + public void put(COSName name, PDExtendedGraphicsState extGState) + { + put(COSName.EXT_G_STATE, name, extGState); + } + + /** + * Sets the shading resource with the given name. + * + * @param name the name of the resource + * @param shading the shading to be added + */ + public void put(COSName name, PDShading shading) + { + put(COSName.SHADING, name, shading); + } + + /** + * Sets the pattern resource with the given name. + * + * @param name the name of the resource + * @param pattern the pattern to be added + */ + public void put(COSName name, PDAbstractPattern pattern) + { + put(COSName.PATTERN, name, pattern); + } + + /** + * Sets the property list resource with the given name. + * + * @param name the name of the resource + * @param properties the property list to be added + */ + public void put(COSName name, PDPropertyList properties) + { + put(COSName.PROPERTIES, name, properties); + } + + /** + * Sets the XObject resource with the given name. + * + * @param name the name of the resource + * @param xobject the XObject to be added + */ + public void put(COSName name, PDXObject xobject) + { + put(COSName.XOBJECT, name, xobject); + } + + /** + * Returns the resource cache associated with the Resources, or null if there is none. + */ + public ResourceCache getResourceCache() + { + return cache; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDStructureElementNameTreeNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDStructureElementNameTreeNode.java new file mode 100644 index 00000000000..d4520e7e7df --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDStructureElementNameTreeNode.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; + +/** + * todo: JavaDoc + * + * @author John Hewson + */ +public class PDStructureElementNameTreeNode extends PDNameTreeNode +{ + /** + * Constructor. + */ + public PDStructureElementNameTreeNode() + { + // just calls super() + } + + /** + * Constructor. + * + * @param dic The COS dictionary. + */ + public PDStructureElementNameTreeNode( COSDictionary dic ) + { + super(dic); + } + + @Override + protected PDStructureElement convertCOSToPD( COSBase base ) throws IOException + { + return new PDStructureElement((COSDictionary)base); + } + + @Override + protected PDNameTreeNode createChildNode( COSDictionary dic ) + { + return new PDStructureElementNameTreeNode(dic); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PageLayout.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PageLayout.java new file mode 100644 index 00000000000..1f7f1698143 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PageLayout.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License), Version 2.0 + * (the "License")), you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing), software + * distributed under the License is distributed on an "AS IS" BASIS), + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND), either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel; + +/** + * A name object specifying the page layout shall be used when the document is opened. + * + * @author John Hewson + */ +public enum PageLayout +{ + /** Display one page at a time. */ + SINGLE_PAGE("SinglePage"), + + /** Display the pages in one column. */ + ONE_COLUMN("OneColumn"), + + /** Display the pages in two columns), with odd numbered pages on the left. */ + TWO_COLUMN_LEFT("TwoColumnLeft"), + + /** Display the pages in two columns), with odd numbered pages on the right. */ + TWO_COLUMN_RIGHT("TwoColumnRight"), + + /** Display the pages two at a time), with odd-numbered pages on the left. */ + TWO_PAGE_LEFT("TwoPageLeft"), + + /** Display the pages two at a time), with odd-numbered pages on the right. */ + TWO_PAGE_RIGHT("TwoPageRight"); + + public static PageLayout fromString(String value) + { + for (PageLayout instance : PageLayout.values()) + { + if (instance.value.equals(value)) + { + return instance; + } + } + throw new IllegalArgumentException(value); + } + + private final String value; + + PageLayout(String value) + { + this.value = value; + } + + /** + * Returns the string value, as used in a PDF file. + */ + public String stringValue() + { + return value; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PageMode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PageMode.java new file mode 100644 index 00000000000..edd386a947d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PageMode.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel; + +/** + * A name object specifying how the document shall be displayed when opened. + * + * @author John Hewson + */ +public enum PageMode +{ + /** Neither the outline nor the thumbnails are displayed. */ + USE_NONE("UseNone"), + + /** Show bookmarks when pdf is opened. */ + USE_OUTLINES("UseOutlines"), + + /** Show thumbnails when pdf is opened. */ + USE_THUMBS("UseThumbs"), + + /** Full screen mode with no menu bar, window controls. */ + FULL_SCREEN("FullScreen"), + + /** Optional content group panel is visible when opened. */ + USE_OPTIONAL_CONTENT("UseOC"), + + /** Attachments panel is visible. */ + USE_ATTACHMENTS("UseAttachments"); + + public static PageMode fromString(String value) + { + for (PageMode instance : PageMode.values()) + { + if (instance.value.equals(value)) + { + return instance; + } + } + throw new IllegalArgumentException(value); + } + + private final String value; + + PageMode(String value) + { + this.value = value; + } + + /** + * Returns the string value, as used in a PDF file. + */ + public String stringValue() + { + return value; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/ResourceCache.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/ResourceCache.java new file mode 100644 index 00000000000..85a1aee5e31 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/ResourceCache.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; + +/** + * A document-wide cache for page resources. + * + * @author John Hewson + */ +public interface ResourceCache +{ + /** + * Returns the font resource for the given indirect object, if it is in the cache. + */ + PDFont getFont(COSObject indirect) throws IOException; + + /** + * Returns the color space resource for the given indirect object, if it is in the cache. + */ + PDColorSpace getColorSpace(COSObject indirect) throws IOException; + + /** + * Returns the external graphics state resource for the given indirect object, if it is in the + * cache. + */ + PDExtendedGraphicsState getExtGState(COSObject indirect); + + /** + * Returns the shading resource for the given indirect object, if it is in the cache. + */ + PDShading getShading(COSObject indirect) throws IOException; + + /** + *Returns the pattern resource for the given indirect object, if it is in the cache. + */ + PDAbstractPattern getPattern(COSObject indirect) throws IOException; + + /** + * Returns the property list resource for the given indirect object, if it is in the cache. + */ + PDPropertyList getProperties(COSObject indirect); + + /** + * Returns the XObject resource for the given indirect object, if it is in the cache. + */ + PDXObject getXObject(COSObject indirect) throws IOException; + + /** + * Puts the given indirect font resource in the cache. + */ + void put(COSObject indirect, PDFont font) throws IOException; + + /** + * Puts the given indirect color space resource in the cache. + */ + void put(COSObject indirect, PDColorSpace colorSpace) throws IOException; + + /** + * Puts the given indirect extended graphics state resource in the cache. + */ + void put(COSObject indirect, PDExtendedGraphicsState extGState); + + /** + * Puts the given indirect shading resource in the cache. + */ + void put(COSObject indirect, PDShading shading) throws IOException; + + /** + * Puts the given indirect pattern resource in the cache. + */ + void put(COSObject indirect, PDAbstractPattern pattern) throws IOException; + + /** + * Puts the given indirect property list resource in the cache. + */ + void put(COSObject indirect, PDPropertyList propertyList); + + /** + * Puts the given indirect XObject resource in the cache. + */ + void put(COSObject indirect, PDXObject xobject) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java new file mode 100644 index 00000000000..304c0ecbdd0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java @@ -0,0 +1,675 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSNumber; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import org.apache.pdfbox.cos.COSObject; + +/** + * This is an implementation of a List that will sync its contents to a COSArray. + * + * @author Ben Litchfield + */ +public class COSArrayList implements List +{ + private final COSArray array; + private final List actual; + + private COSDictionary parentDict; + private COSName dictKey; + + /** + * Default constructor. + */ + public COSArrayList() + { + array = new COSArray(); + actual = new ArrayList<>(); + } + + /** + * Constructor. + * + * @param actualList The list of standard java objects + * @param cosArray The COS array object to sync to. + */ + public COSArrayList( List actualList, COSArray cosArray ) + { + actual = actualList; + array = cosArray; + } + + /** + * This constructor is to be used if the array doesn't exist, but is to be created and added to + * the parent dictionary as soon as the first element is added to the array. + * + * @param dictionary The dictionary that holds the item, and will hold the array if an item is + * added. + * @param dictionaryKey The key into the dictionary to set the item. + */ + public COSArrayList(COSDictionary dictionary, COSName dictionaryKey) + { + array = new COSArray(); + actual = new ArrayList<>(); + parentDict = dictionary; + dictKey = dictionaryKey; + } + + /** + * This is a really special constructor. Sometimes the PDF spec says + * that a dictionary entry can either be a single item or an array of those + * items. But in the PDModel interface we really just want to always return + * a java.util.List. In the case were we get the list and never modify it + * we don't want to convert to COSArray and put one element, unless we append + * to the list. So here we are going to create this object with a single + * item instead of a list, but allow more items to be added and then converted + * to an array. + * + * @param actualObject The PDModel object. + * @param item The COS Model object. + * @param dictionary The dictionary that holds the item, and will hold the array if an item is added. + * @param dictionaryKey The key into the dictionary to set the item. + */ + public COSArrayList( E actualObject, COSBase item, COSDictionary dictionary, COSName dictionaryKey ) + { + array = new COSArray(); + array.add( item ); + actual = new ArrayList<>(); + actual.add( actualObject ); + + parentDict = dictionary; + dictKey = dictionaryKey; + } + + /** + * {@inheritDoc} + */ + @Override + public int size() + { + return actual.size(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isEmpty() + { + return actual.isEmpty(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean contains(Object o) + { + return actual.contains(o); + } + + /** + * {@inheritDoc} + */ + @Override + public Iterator iterator() + { + return actual.iterator(); + } + + /** + * {@inheritDoc} + */ + @Override + public Object[] toArray() + { + return actual.toArray(); + } + + /** + * {@inheritDoc} + */ + @Override + public X[] toArray(X[] a) + { + return actual.toArray(a); + + } + + /** + * {@inheritDoc} + */ + @Override + public boolean add(E o) + { + //when adding if there is a parentDict then change the item + //in the dictionary from a single item to an array. + if( parentDict != null ) + { + parentDict.setItem( dictKey, array ); + //clear the parent dict so it doesn't happen again, there might be + //a usecase for keeping the parentDict around but not now. + parentDict = null; + } + //string is a special case because we can't subclass to be COSObjectable + if( o instanceof String ) + { + array.add( new COSString( (String)o ) ); + } + else + { + if(array != null) + { + array.add(((COSObjectable)o).getCOSObject()); + } + } + return actual.add(o); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean remove(Object o) + { + boolean retval = true; + int index = actual.indexOf( o ); + if( index >= 0 ) + { + actual.remove( index ); + array.remove( index ); + } + else + { + retval = false; + } + return retval; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean containsAll(Collection c) + { + return actual.containsAll( c ); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean addAll(Collection c) + { + //when adding if there is a parentDict then change the item + //in the dictionary from a single item to an array. + if( parentDict != null && c.size() > 0) + { + parentDict.setItem( dictKey, array ); + //clear the parent dict so it doesn't happen again, there might be + //a usecase for keeping the parentDict around but not now. + parentDict = null; + } + array.addAll( toCOSObjectList( c ) ); + return actual.addAll( c ); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean addAll(int index, Collection c) + { + //when adding if there is a parentDict then change the item + //in the dictionary from a single item to an array. + if( parentDict != null && c.size() > 0) + { + parentDict.setItem( dictKey, array ); + //clear the parent dict so it doesn't happen again, there might be + //a usecase for keeping the parentDict around but not now. + parentDict = null; + } + + array.addAll( index, toCOSObjectList( c ) ); + return actual.addAll( index, c ); + } + + /** + * This will take an array of COSNumbers and return a COSArrayList of + * java.lang.Integer values. + * + * @param intArray The existing integer Array. + * + * @return A list that is part of the core Java collections. + */ + public static List convertIntegerCOSArrayToList(COSArray intArray) + { + List retval = null; + if (intArray != null) + { + List numbers = new ArrayList<>(); + for (int i = 0; i < intArray.size(); i++) + { + COSNumber num; + if (intArray.get(i) instanceof COSObject) + { + num = (COSNumber) ((COSObject) intArray.get(i)).getObject(); + } + else + { + num = (COSNumber) intArray.get(i); + } + numbers.add(num.intValue()); + } + retval = new COSArrayList<>(numbers, intArray); + } + return retval; + } + + /** + * This will take an array of COSNumbers and return a COSArrayList of + * java.lang.Float values. + * + * @param floatArray The existing float Array. + * + * @return The list of Float objects. + */ + public static List convertFloatCOSArrayToList( COSArray floatArray ) + { + List retval = null; + if( floatArray != null ) + { + List numbers = new ArrayList<>(floatArray.size()); + for( int i=0; i( numbers, floatArray ); + } + return retval; + } + + /** + * This will take an array of COSName and return a COSArrayList of + * java.lang.String values. + * + * @param nameArray The existing name Array. + * + * @return The list of String objects. + */ + public static List convertCOSNameCOSArrayToList( COSArray nameArray ) + { + List retval = null; + if( nameArray != null ) + { + Listnames = new ArrayList<>(); + for( int i=0; i( names, nameArray ); + } + return retval; + } + + /** + * This will take an array of COSString and return a COSArrayList of + * java.lang.String values. + * + * @param stringArray The existing name Array. + * + * @return The list of String objects. + */ + public static List convertCOSStringCOSArrayToList( COSArray stringArray ) + { + List retval = null; + if( stringArray != null ) + { + List string = new ArrayList<>(); + for( int i=0; i( string, stringArray ); + } + return retval; + } + + /** + * This will take an list of string objects and return a COSArray of COSName + * objects. + * + * @param strings A list of strings + * + * @return An array of COSName objects + */ + public static COSArray convertStringListToCOSNameCOSArray( List strings ) + { + COSArray retval = new COSArray(); + for (String string : strings) + { + retval.add(COSName.getPDFName(string)); + } + return retval; + } + + /** + * This will take an list of string objects and return a COSArray of COSName + * objects. + * + * @param strings A list of strings + * + * @return An array of COSName objects + */ + public static COSArray convertStringListToCOSStringCOSArray( List strings ) + { + COSArray retval = new COSArray(); + for (String string : strings) + { + retval.add(new COSString(string)); + } + return retval; + } + + /** + * This will convert a list of COSObjectables to an array list of COSBase objects. + * + * @param cosObjectableList A list of COSObjectable. + * + * @return A list of COSBase. + * @throws IllegalArgumentException if an object type is not supported for conversion to a + * COSBase object. + */ + public static COSArray converterToCOSArray( List cosObjectableList ) + { + COSArray array = null; + if( cosObjectableList != null ) + { + if( cosObjectableList instanceof COSArrayList ) + { + //if it is already a COSArrayList then we don't want to recreate the array, we want to reuse it. + array = ((COSArrayList)cosObjectableList).array; + } + else + { + array = new COSArray(); + for (Object next : cosObjectableList) + { + if( next instanceof String ) + { + array.add( new COSString( (String)next ) ); + } + else if( next instanceof Integer || next instanceof Long ) + { + array.add( COSInteger.get( ((Number)next).longValue() ) ); + } + else if( next instanceof Float || next instanceof Double ) + { + array.add( new COSFloat( ((Number)next).floatValue() ) ); + } + else if( next instanceof COSObjectable ) + { + COSObjectable object = (COSObjectable)next; + array.add( object.getCOSObject() ); + } + else if( next == null ) + { + array.add( COSNull.NULL ); + } + else + { + throw new IllegalArgumentException( "Error: Don't know how to convert type to COSBase '" + + next.getClass().getName() + "'" ); + } + } + } + } + return array; + } + + private List toCOSObjectList( Collection list ) + { + List cosObjects = new ArrayList<>(); + for (Object next : list) + { + if( next instanceof String ) + { + cosObjects.add( new COSString( (String)next ) ); + } + else + { + COSObjectable cos = (COSObjectable)next; + cosObjects.add( cos.getCOSObject() ); + } + } + return cosObjects; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean removeAll(Collection c) + { + array.removeAll( toCOSObjectList( c ) ); + return actual.removeAll( c ); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean retainAll(Collection c) + { + array.retainAll( toCOSObjectList( c ) ); + return actual.retainAll( c ); + } + + /** + * {@inheritDoc} + */ + @Override + public void clear() + { + //when adding if there is a parentDict then change the item + //in the dictionary from a single item to an array. + if( parentDict != null ) + { + parentDict.setItem( dictKey, null ); + } + actual.clear(); + array.clear(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object o) + { + return actual.equals( o ); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return actual.hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public E get(int index) + { + return actual.get( index ); + + } + + /** + * {@inheritDoc} + */ + @Override + public E set(int index, E element) + { + if( element instanceof String ) + { + COSString item = new COSString( (String)element ); + if( parentDict != null && index == 0 ) + { + parentDict.setItem( dictKey, item ); + } + array.set( index, item ); + } + else + { + if( parentDict != null && index == 0 ) + { + parentDict.setItem( dictKey, ((COSObjectable)element).getCOSObject() ); + } + array.set( index, ((COSObjectable)element).getCOSObject() ); + } + return actual.set( index, element ); + } + + /** + * {@inheritDoc} + */ + @Override + public void add(int index, E element) + { + //when adding if there is a parentDict then change the item + //in the dictionary from a single item to an array. + if( parentDict != null ) + { + parentDict.setItem( dictKey, array ); + //clear the parent dict so it doesn't happen again, there might be + //a usecase for keeping the parentDict around but not now. + parentDict = null; + } + actual.add( index, element ); + if( element instanceof String ) + { + array.add( index, new COSString( (String)element ) ); + } + else + { + array.add( index, ((COSObjectable)element).getCOSObject() ); + } + } + + /** + * {@inheritDoc} + */ + @Override + public E remove(int index) + { + array.remove( index ); + return actual.remove( index ); + } + + /** + * {@inheritDoc} + */ + @Override + public int indexOf(Object o) + { + return actual.indexOf( o ); + } + + /** + * {@inheritDoc} + */ + @Override + public int lastIndexOf(Object o) + { + return actual.indexOf( o ); + + } + + /** + * {@inheritDoc} + */ + @Override + public ListIterator listIterator() + { + return actual.listIterator(); + } + + /** + * {@inheritDoc} + */ + @Override + public ListIterator listIterator(int index) + { + return actual.listIterator( index ); + } + + /** + * {@inheritDoc} + */ + @Override + public List subList(int fromIndex, int toIndex) + { + return actual.subList( fromIndex, toIndex ); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "COSArrayList{" + array.toString() + "}"; + } + + /** + * This will return then underlying COSArray. + * + * @return the COSArray + */ + public COSArray toList() + { + return array; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSDictionaryMap.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSDictionaryMap.java new file mode 100644 index 00000000000..bb149ce9aa6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSDictionaryMap.java @@ -0,0 +1,272 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; + +/** + * This is a Map that will automatically sync the contents to a COSDictionary. + * + * @author Ben Litchfield + */ +public class COSDictionaryMap implements Map +{ + private final COSDictionary map; + private final Map actuals; + + /** + * Constructor for this map. + * + * @param actualsMap The map with standard java objects as values. + * @param dicMap The map with COSBase objects as values. + */ + public COSDictionaryMap( Map actualsMap, COSDictionary dicMap ) + { + actuals = actualsMap; + map = dicMap; + } + + + /** + * {@inheritDoc} + */ + @Override + public int size() + { + return map.size(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isEmpty() + { + return size() == 0; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean containsKey(Object key) + { + return actuals.containsKey( key ); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean containsValue(Object value) + { + return actuals.containsValue( value ); + } + + /** + * {@inheritDoc} + */ + @Override + public V get(Object key) + { + return actuals.get( key ); + } + + /** + * {@inheritDoc} + */ + @Override + public V put(K key, V value) + { + COSObjectable object = (COSObjectable)value; + + map.setItem( COSName.getPDFName( (String)key ), object.getCOSObject() ); + return actuals.put( key, value ); + } + + /** + * {@inheritDoc} + */ + @Override + public V remove(Object key) + { + map.removeItem( COSName.getPDFName( (String)key ) ); + return actuals.remove( key ); + } + + /** + * {@inheritDoc} + */ + @Override + public void putAll(Map t) + { + throw new RuntimeException( "Not yet implemented" ); + } + + /** + * {@inheritDoc} + */ + @Override + public void clear() + { + map.clear(); + actuals.clear(); + } + + /** + * {@inheritDoc} + */ + @Override + public Set keySet() + { + return actuals.keySet(); + } + + /** + * {@inheritDoc} + */ + @Override + public Collection values() + { + return actuals.values(); + } + + /** + * {@inheritDoc} + */ + @Override + public Set> entrySet() + { + return Collections.unmodifiableSet(actuals.entrySet()); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object o) + { + boolean retval = false; + if( o instanceof COSDictionaryMap ) + { + COSDictionaryMap other = (COSDictionaryMap) o; + retval = other.map.equals( this.map ); + } + return retval; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return actuals.toString(); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() + { + return map.hashCode(); + } + + /** + * This will take a map<java.lang.String,org.apache.pdfbox.pdmodel.COSObjectable> + * and convert it into a COSDictionary. + * + * @param someMap A map containing COSObjectables + * + * @return A proper COSDictionary + */ + public static COSDictionary convert(Map someMap) + { + COSDictionary dic = new COSDictionary(); + for (Entry entry : someMap.entrySet()) + { + String name = entry.getKey(); + COSObjectable object = (COSObjectable) entry.getValue(); + dic.setItem( COSName.getPDFName( name ), object.getCOSObject() ); + } + return dic; + } + + /** + * This will take a COS dictionary and convert it into COSDictionaryMap. All cos + * objects will be converted to their primitive form. + * + * @param map The COS mappings. + * @return A standard java map. + * @throws IOException If there is an error during the conversion. + */ + public static COSDictionaryMap convertBasicTypesToMap( COSDictionary map ) throws IOException + { + COSDictionaryMap retval = null; + if( map != null ) + { + Map actualMap = new HashMap<>(); + for( COSName key : map.keySet() ) + { + COSBase cosObj = map.getDictionaryObject( key ); + Object actualObject = null; + if( cosObj instanceof COSString ) + { + actualObject = ((COSString)cosObj).getString(); + } + else if( cosObj instanceof COSInteger ) + { + actualObject = ((COSInteger)cosObj).intValue(); + } + else if( cosObj instanceof COSName ) + { + actualObject = ((COSName)cosObj).getName(); + } + else if( cosObj instanceof COSFloat ) + { + actualObject = ((COSFloat)cosObj).floatValue(); + } + else if( cosObj instanceof COSBoolean ) + { + actualObject = ((COSBoolean)cosObj).getValue() ? Boolean.TRUE : Boolean.FALSE; + } + else + { + throw new IOException( "Error:unknown type of object to convert:" + cosObj ); + } + actualMap.put( key.getName(), actualObject ); + } + retval = new COSDictionaryMap<>( actualMap, map ); + } + + return retval; + } +} diff --git a/src/org/pdfbox/pdmodel/common/COSObjectable.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSObjectable.java similarity index 84% rename from src/org/pdfbox/pdmodel/common/COSObjectable.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSObjectable.java index 1080900b139..f6782f8cd21 100644 --- a/src/org/pdfbox/pdmodel/common/COSObjectable.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSObjectable.java @@ -14,15 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.common; +package org.apache.pdfbox.pdmodel.common; -import org.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBase; /** * This is an interface used to get/create the underlying COSObject. * - * @author Ben Litchfield - * @version $Revision: 1.3 $ + * @author Ben Litchfield */ public interface COSObjectable { @@ -31,5 +30,5 @@ public interface COSObjectable * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject(); + COSBase getCOSObject(); } diff --git a/src/org/pdfbox/pdmodel/common/PDDestinationOrAction.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDDestinationOrAction.java similarity index 88% rename from src/org/pdfbox/pdmodel/common/PDDestinationOrAction.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDDestinationOrAction.java index 3ff791fa98a..ee05e6f316f 100644 --- a/src/org/pdfbox/pdmodel/common/PDDestinationOrAction.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDDestinationOrAction.java @@ -14,15 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.common; +package org.apache.pdfbox.pdmodel.common; /** * This is an interface used for some elements such as the document * OpenAction that can be either a Destination or an Action. * - * @author Ben Litchfield + * @author Ben Litchfield * - * @version $Revision: 1.2 $ */ public interface PDDestinationOrAction extends COSObjectable { diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDDictionaryWrapper.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDDictionaryWrapper.java new file mode 100644 index 00000000000..56bdf891dce --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDDictionaryWrapper.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * A wrapper for a COS dictionary. + * + * @author Johannes Koch + * + */ +public class PDDictionaryWrapper implements COSObjectable +{ + + private final COSDictionary dictionary; + + /** + * Default constructor + */ + public PDDictionaryWrapper() + { + this.dictionary = new COSDictionary(); + } + + /** + * Creates a new instance with a given COS dictionary. + * + * @param dictionary the dictionary + */ + public PDDictionaryWrapper(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + /** + * {@inheritDoc} + */ + @Override + public COSDictionary getCOSObject() + { + return this.dictionary; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (obj instanceof PDDictionaryWrapper) + { + return this.dictionary.equals(((PDDictionaryWrapper) obj).dictionary); + } + return false; + } + + @Override + public int hashCode() + { + return this.dictionary.hashCode(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDMetadata.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDMetadata.java new file mode 100644 index 00000000000..ef6c18b4eac --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDMetadata.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import org.apache.pdfbox.cos.COSName; + + +import org.apache.pdfbox.cos.COSStream; + +import org.apache.pdfbox.pdmodel.PDDocument; + +/** + * This class represents metadata for various objects in a PDF document. + * + * @author Ben Litchfield + */ +public class PDMetadata extends PDStream +{ + + /** + * This will create a new PDMetadata object. + * + * @param document The document that the stream will be part of. + */ + public PDMetadata( PDDocument document ) + { + super( document ); + getCOSObject().setName( COSName.TYPE, "Metadata" ); + getCOSObject().setName( COSName.SUBTYPE, "XML" ); + } + + /** + * Constructor. Reads all data from the input stream and embeds it into the + * document, this will close the InputStream. + * + * @param doc The document that will hold the stream. + * @param str The stream parameter. + * @throws IOException If there is an error creating the stream in the document. + */ + public PDMetadata( PDDocument doc, InputStream str) throws IOException + { + super( doc, str ); + getCOSObject().setName( COSName.TYPE, "Metadata" ); + getCOSObject().setName( COSName.SUBTYPE, "XML" ); + } + + /** + * Constructor. + * + * @param str The stream parameter. + */ + public PDMetadata( COSStream str ) + { + super( str ); + } + + /** + * Extract the XMP metadata. + * To persist changes back to the PDF you must call importXMPMetadata. + * + * @return A stream to get the xmp data from. + * + * @throws IOException If there is an error parsing the XMP data. + */ + public InputStream exportXMPMetadata() throws IOException + { + return createInputStream(); + } + + /** + * Import an XMP stream into the PDF document. + * + * @param xmp The XMP data. + * + * @throws IOException If there is an error generating the XML document. + */ + public void importXMPMetadata( byte[] xmp ) + throws IOException + { + try (OutputStream os = createOutputStream()) + { + os.write(xmp); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java new file mode 100644 index 00000000000..6ccc51fcba0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNameTreeNode.java @@ -0,0 +1,392 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; + +/** + * This class represents a node in a name tree. + * + * @author Ben Litchfield + * + * @param The type of the values in this name tree. + */ +public abstract class PDNameTreeNode implements COSObjectable +{ + private static final Log LOG = LogFactory.getLog(PDNameTreeNode.class); + + private final COSDictionary node; + private PDNameTreeNode parent; + + /** + * Constructor. + */ + protected PDNameTreeNode() + { + node = new COSDictionary(); + } + + /** + * Constructor. + * + * @param dict The dictionary that holds the name information. + */ + protected PDNameTreeNode( COSDictionary dict ) + { + node = dict; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return node; + } + + /** + * Returns the parent node. + * + * @return parent node + */ + public PDNameTreeNode getParent() + { + return parent; + } + + /** + * Sets the parent to the given node. + * + * @param parentNode the node to be set as parent + */ + public void setParent(PDNameTreeNode parentNode) + { + parent = parentNode; + calculateLimits(); + } + + /** + * Determines if this is a root node or not. + * + * @return true if this is a root node + */ + public boolean isRootNode() + { + return parent == null; + } + + /** + * Return the children of this node. This list will contain PDNameTreeNode objects. + * + * @return The list of children or null if there are no children. + */ + public List> getKids() + { + List> retval = null; + COSArray kids = (COSArray)node.getDictionaryObject( COSName.KIDS ); + if( kids != null ) + { + List> pdObjects = new ArrayList<>(); + for( int i=0; i(pdObjects, kids); + } + + return retval; + } + + /** + * Set the children of this named tree. + * + * @param kids The children of this named tree. + */ + public void setKids( List> kids ) + { + if (kids != null && kids.size() > 0) + { + for (PDNameTreeNode kidsNode : kids) + { + kidsNode.setParent(this); + } + node.setItem( COSName.KIDS, COSArrayList.converterToCOSArray( kids ) ); + // root nodes with kids don't have Names + if (isRootNode()) + { + node.setItem(COSName.NAMES, null); + } + } + else + { + // remove kids + node.setItem(COSName.KIDS, null); + // remove Limits + node.setItem(COSName.LIMITS, null); + } + calculateLimits(); + } + + private void calculateLimits() + { + if (isRootNode()) + { + node.setItem(COSName.LIMITS, null); + } + else + { + List> kids = getKids(); + if (kids != null && kids.size() > 0) + { + PDNameTreeNode firstKid = kids.get(0); + PDNameTreeNode lastKid = kids.get(kids.size() - 1); + String lowerLimit = firstKid.getLowerLimit(); + setLowerLimit(lowerLimit); + String upperLimit = lastKid.getUpperLimit(); + setUpperLimit(upperLimit); + } + else + { + try + { + Map names = getNames(); + if (names != null && names.size() > 0) + { + Set strings = names.keySet(); + String[] keys = strings.toArray(new String[strings.size()]); + String lowerLimit = keys[0]; + setLowerLimit(lowerLimit); + String upperLimit = keys[keys.length-1]; + setUpperLimit(upperLimit); + } + else + { + node.setItem(COSName.LIMITS, null); + } + } + catch (IOException exception) + { + node.setItem(COSName.LIMITS, null); + LOG.error("Error while calculating the Limits of a PageNameTreeNode:", exception); + } + } + } + } + + /** + * The name to retrieve. + * + * @param name The name in the tree. + * @return The value of the name in the tree. + * @throws IOException If an there is a problem creating the destinations. + */ + public T getValue( String name ) throws IOException + { + T retval = null; + Map names = getNames(); + if( names != null ) + { + retval = names.get( name ); + } + else + { + List> kids = getKids(); + if (kids != null) + { + for( int i=0; i childNode = kids.get( i ); + String upperLimit = childNode.getUpperLimit(); + String lowerLimit = childNode.getLowerLimit(); + if (upperLimit == null || lowerLimit == null || + upperLimit.compareTo(lowerLimit) < 0 || + (lowerLimit.compareTo(name) <= 0 && upperLimit.compareTo(name) >= 0)) + { + retval = childNode.getValue( name ); + } + } + } + else + { + LOG.warn("NameTreeNode does not have \"names\" nor \"kids\" objects."); + } + } + return retval; + } + + /** + * This will return a map of names on this level. The key will be a string, + * and the value will depend on where this class is being used. + * + * @return ordered map of COS objects or null if the dictionary + * contains no 'Names' entry on this level. + * + * @throws IOException If there is an error while creating the sub types. + * @see #getKids() + */ + public Map getNames() throws IOException + { + COSArray namesArray = (COSArray)node.getDictionaryObject( COSName.NAMES ); + if( namesArray != null ) + { + Map names = new LinkedHashMap<>(); + for( int i=0; i createChildNode( COSDictionary dic ); + + /** + * Set the names for this node. This method will set the appropriate upper and lower limits + * based on the keys in the map. + * + * @param names map of names to objects, or null for nothing. + */ + public void setNames( Map names ) + { + if( names == null ) + { + node.setItem( COSName.NAMES, (COSObjectable)null ); + node.setItem( COSName.LIMITS, (COSObjectable)null); + } + else + { + COSArray array = new COSArray(); + List keys = new ArrayList<>(names.keySet()); + Collections.sort(keys); + for (String key : keys) + { + array.add(new COSString(key)); + array.add(names.get(key)); + } + node.setItem(COSName.NAMES, array); + calculateLimits(); + } + } + + /** + * Get the highest value for a key in the name map. + * + * @return The highest value for a key in the map. + */ + public String getUpperLimit() + { + String retval = null; + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr != null ) + { + retval = arr.getString( 1 ); + } + return retval; + } + + /** + * Set the highest value for the key in the map. + * + * @param upper The new highest value for a key in the map. + */ + private void setUpperLimit( String upper ) + { + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr == null ) + { + arr = new COSArray(); + arr.add( null ); + arr.add( null ); + node.setItem(COSName.LIMITS, arr); + } + arr.setString( 1, upper ); + } + + /** + * Get the lowest value for a key in the name map. + * + * @return The lowest value for a key in the map. + */ + public String getLowerLimit() + { + String retval = null; + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr != null ) + { + retval = arr.getString( 0 ); + } + return retval; + } + + /** + * Set the lowest value for the key in the map. + * + * @param lower The new lowest value for a key in the map. + */ + private void setLowerLimit( String lower ) + { + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr == null ) + { + arr = new COSArray(); + arr.add( null ); + arr.add( null ); + node.setItem(COSName.LIMITS, arr); + } + arr.setString( 0, lower ); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNumberTreeNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNumberTreeNode.java new file mode 100644 index 00000000000..661f0eef9bb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDNumberTreeNode.java @@ -0,0 +1,351 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; + +/** + * This class represents a PDF Number tree. See the PDF Reference 1.7 section + * 7.9.7 for more details. + * + * @author Ben Litchfield, + * @author Igor Podolskiy + */ +public class PDNumberTreeNode implements COSObjectable +{ + private static final Log LOG = LogFactory.getLog( PDNumberTreeNode.class ); + + private final COSDictionary node; + private Class valueType = null; + + /** + * Constructor. + * + * @param valueClass The PD Model type of object that is the value. + */ + public PDNumberTreeNode( Class valueClass ) + { + node = new COSDictionary(); + valueType = valueClass; + } + + /** + * Constructor. + * + * @param dict The dictionary that holds the number information. + * @param valueClass The PD Model type of object that is the value. + */ + public PDNumberTreeNode( COSDictionary dict, Class valueClass ) + { + node = dict; + valueType = valueClass; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return node; + } + + /** + * Return the children of this node. This list will contain PDNumberTreeNode objects. + * + * @return The list of children or null if there are no children. + */ + public List getKids() + { + List retval = null; + COSArray kids = (COSArray)node.getDictionaryObject( COSName.KIDS ); + if( kids != null ) + { + List pdObjects = new ArrayList<>(); + for( int i=0; i(pdObjects,kids); + } + + return retval; + } + + /** + * Set the children of this number tree. + * + * @param kids The children of this number tree. + */ + public void setKids( List kids ) + { + if (kids != null && !kids.isEmpty()) + { + PDNumberTreeNode firstKid = kids.get(0); + PDNumberTreeNode lastKid = kids.get(kids.size() - 1); + Integer lowerLimit = firstKid.getLowerLimit(); + this.setLowerLimit(lowerLimit); + Integer upperLimit = lastKid.getUpperLimit(); + this.setUpperLimit(upperLimit); + } + else if ( node.getDictionaryObject( COSName.NUMS ) == null ) + { + // Remove limits if there are no kids and no numbers set. + node.setItem( COSName.LIMITS, null); + } + node.setItem( COSName.KIDS, COSArrayList.converterToCOSArray( kids ) ); + } + + /** + * Returns the value corresponding to an index in the number tree. + * + * @param index The index in the number tree. + * + * @return The value corresponding to the index. + * + * @throws IOException If there is a problem creating the values. + */ + public Object getValue(Integer index) throws IOException + { + Map numbers = getNumbers(); + if (numbers != null) + { + return numbers.get(index); + } + Object retval = null; + List kids = getKids(); + if (kids != null) + { + for (int i = 0; i < kids.size() && retval == null; i++) + { + PDNumberTreeNode childNode = kids.get(i); + if (childNode.getLowerLimit().compareTo(index) <= 0 && + childNode.getUpperLimit().compareTo(index) >= 0) + { + retval = childNode.getValue(index); + } + } + } + else + { + LOG.warn("NumberTreeNode does not have \"nums\" nor \"kids\" objects."); + } + return retval; + } + + + /** + * This will return a map of numbers. The key will be a java.lang.Integer, the value will + * depend on where this class is being used. + * + * @return A map of COS objects. + * + * @throws IOException If there is a problem creating the values. + */ + public Map getNumbers() throws IOException + { + Map indices = null; + COSBase numBase = node.getDictionaryObject(COSName.NUMS); + if (numBase instanceof COSArray) + { + COSArray numbersArray = (COSArray) numBase; + indices = new HashMap<>(); + for (int i = 0; i < numbersArray.size(); i += 2) + { + COSBase base = numbersArray.getObject(i); + if (!(base instanceof COSInteger)) + { + LOG.error("page labels ignored, index " + i + " should be a number, but is " + base); + return null; + } + COSInteger key = (COSInteger) base; + COSBase cosValue = numbersArray.getObject(i + 1); + indices.put(key.intValue(), cosValue == null ? null : convertCOSToPD(cosValue)); + } + indices = Collections.unmodifiableMap(indices); + } + return indices; + } + + /** + * Method to convert the COS value in the number tree to the PD Model object. The default + * implementation will simply use reflection to create the correct object type. Subclasses can + * do whatever they want. + * + * @param base The COS object to convert. + * @return The converted PD Model object. + * @throws IOException If there is an error during creation. + */ + protected COSObjectable convertCOSToPD(COSBase base) throws IOException + { + // valueType (passed in constructor here) must have a constructor of type of COSBase as parameter + try + { + return valueType.getDeclaredConstructor(base.getClass()).newInstance(base); + } + catch( Exception t ) + { + throw new IOException("Error while trying to create value in number tree:" + t.getMessage(), t); + } + } + + /** + * Create a child node object. + * + * @param dic The dictionary for the child node object to refer to. + * @return The new child node object. + */ + protected PDNumberTreeNode createChildNode( COSDictionary dic ) + { + return new PDNumberTreeNode(dic,valueType); + } + + /** + * Set the numbers for this node. This method will set the appropriate upper and lower limits + * based on the keys in the map. + * + * @param numbers The map of numbers to objects, or null for nothing. + */ + public void setNumbers( Map numbers ) + { + if( numbers == null ) + { + node.setItem( COSName.NUMS, (COSObjectable)null ); + node.setItem( COSName.LIMITS, (COSObjectable)null); + } + else + { + List keys = new ArrayList<>( numbers.keySet() ); + Collections.sort( keys ); + COSArray array = new COSArray(); + for (Integer key : keys) + { + array.add( COSInteger.get( key ) ); + COSObjectable obj = numbers.get( key ); + array.add(obj == null ? COSNull.NULL : obj); + } + Integer lower = null; + Integer upper = null; + if (!keys.isEmpty()) + { + lower = keys.get( 0 ); + upper = keys.get( keys.size()-1 ); + } + setUpperLimit( upper ); + setLowerLimit( lower ); + node.setItem( COSName.NUMS, array ); + } + } + + /** + * Get the highest value for a key in the number map. + * + * @return The highest value for a key in the map. + */ + public Integer getUpperLimit() + { + Integer retval = null; + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr != null && arr.get(0) != null ) + { + retval = arr.getInt( 1 ); + } + return retval; + } + + /** + * Set the highest value for the key in the map. + * + * @param upper The new highest value for a key in the map. + */ + private void setUpperLimit( Integer upper ) + { + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr == null ) + { + arr = new COSArray(); + arr.add( null ); + arr.add( null ); + node.setItem( COSName.LIMITS, arr ); + } + if ( upper != null) + { + arr.setInt( 1, upper); + } + else + { + arr.set( 1, null ); + } + } + + /** + * Get the lowest value for a key in the number map. + * + * @return The lowest value for a key in the map. + */ + public Integer getLowerLimit() + { + Integer retval = null; + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr != null && arr.get(0) != null ) + { + retval = arr.getInt( 0 ); + } + return retval; + } + + /** + * Set the lowest value for the key in the map. + * + * @param lower The new lowest value for a key in the map. + */ + private void setLowerLimit( Integer lower ) + { + COSArray arr = (COSArray)node.getDictionaryObject( COSName.LIMITS ); + if( arr == null ) + { + arr = new COSArray(); + arr.add( null ); + arr.add( null ); + node.setItem( COSName.LIMITS, arr ); + } + if ( lower != null ) + { + arr.setInt( 0, lower); + } + else + { + arr.set( 0, null ); + } + } +} diff --git a/src/org/pdfbox/pdmodel/common/PDObjectStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDObjectStream.java similarity index 78% rename from src/org/pdfbox/pdmodel/common/PDObjectStream.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDObjectStream.java index 18110e1beff..53937308ce6 100644 --- a/src/org/pdfbox/pdmodel/common/PDObjectStream.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDObjectStream.java @@ -14,11 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.common; +package org.apache.pdfbox.pdmodel.common; -import org.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; -import org.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocument; @@ -26,8 +27,7 @@ * A PDStream represents a stream in a PDF document. Streams are tied to a single * PDF document. * - * @author Ben Litchfield - * @version $Revision: 1.3 $ + * @author Ben Litchfield */ public class PDObjectStream extends PDStream { @@ -43,16 +43,16 @@ public PDObjectStream( COSStream str ) } /** - * This will create a new PDStream object. + * This will create a new PDObjectStream object. * * @param document The document that the stream will be part of. * @return A new stream object. */ public static PDObjectStream createStream( PDDocument document ) { - COSStream cosStream = new COSStream( document.getDocument().getScratchFile() ); + COSStream cosStream = document.getDocument().createCOSStream(); PDObjectStream strm = new PDObjectStream( cosStream ); - strm.getStream().setName( "Type", "ObjStm" ); + strm.getCOSObject().setItem( COSName.TYPE, COSName.OBJ_STM ); return strm; } @@ -63,7 +63,7 @@ public static PDObjectStream createStream( PDDocument document ) */ public String getType() { - return getStream().getNameAsString( "Type" ); + return getCOSObject().getNameAsString( COSName.TYPE ); } /** @@ -73,7 +73,7 @@ public String getType() */ public int getNumberOfObjects() { - return getStream().getInt( "N", 0 ); + return getCOSObject().getInt( COSName.N, 0 ); } /** @@ -83,7 +83,7 @@ public int getNumberOfObjects() */ public void setNumberOfObjects( int n ) { - getStream().setInt( "N", n ); + getCOSObject().setInt( COSName.N, n ); } /** @@ -93,7 +93,7 @@ public void setNumberOfObjects( int n ) */ public int getFirstByteOffset() { - return getStream().getInt( "First", 0 ); + return getCOSObject().getInt( COSName.FIRST, 0 ); } /** @@ -103,7 +103,7 @@ public int getFirstByteOffset() */ public void setFirstByteOffset( int n ) { - getStream().setInt( "First", n ); + getCOSObject().setInt( COSName.FIRST, n ); } /** @@ -115,7 +115,7 @@ public void setFirstByteOffset( int n ) public PDObjectStream getExtends() { PDObjectStream retval = null; - COSStream stream = (COSStream)getStream().getDictionaryObject( "Extends" ); + COSStream stream = (COSStream)getCOSObject().getDictionaryObject( COSName.EXTENDS ); if( stream != null ) { retval = new PDObjectStream( stream ); @@ -132,6 +132,6 @@ public PDObjectStream getExtends() */ public void setExtends( PDObjectStream stream ) { - getStream().setItem( "Extends", stream ); + getCOSObject().setItem( COSName.EXTENDS, stream ); } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabelRange.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabelRange.java new file mode 100644 index 00000000000..54b41104f0b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabelRange.java @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * Contains information for a page label range. + * + * @author Igor Podolskiy + * + * @see PDPageLabels + * + */ +public class PDPageLabelRange implements COSObjectable +{ + + private COSDictionary root; + + // Page label dictonary (PDF32000-1:2008 Section 12.4.2, Table 159) + private static final COSName KEY_START = COSName.ST; + private static final COSName KEY_PREFIX = COSName.P; + private static final COSName KEY_STYLE = COSName.S; + + // Style entry values (PDF32000-1:2008 Section 12.4.2, Table 159) + + /** + * Decimal page numbering style (1, 2, 3, ...). + */ + public static final String STYLE_DECIMAL = "D"; + + /** + * Roman numbers (upper case) numbering style (I, II, III, IV, ...). + */ + public static final String STYLE_ROMAN_UPPER = "R"; + + /** + * Roman numbers (lower case) numbering style (i, ii, iii, iv, ...). + */ + public static final String STYLE_ROMAN_LOWER = "r"; + + /** + * Letter (upper case) numbering style (A, B, ..., Z, AA, BB, ..., ZZ, AAA, + * ...). + */ + public static final String STYLE_LETTERS_UPPER = "A"; + + /** + * Letter (lower case) numbering style (a, b, ..., z, aa, bb, ..., zz, aaa, + * ...). + */ + public static final String STYLE_LETTERS_LOWER = "a"; + + /** + * Creates a new empty page label range object. + */ + public PDPageLabelRange() + { + this(new COSDictionary()); + } + + /** + * Creates a new page label range object from the given dictionary. + * + * @param dict + * the base dictionary for the new object. + */ + public PDPageLabelRange(COSDictionary dict) + { + root = dict; + } + + /** + * Returns the underlying dictionary. + * + * @return the underlying dictionary. + */ + @Override + public COSDictionary getCOSObject() + { + return root; + } + + /** + * Returns the numbering style for this page range. + * + * @return one of the STYLE_* constants + */ + public String getStyle() + { + return root.getNameAsString(KEY_STYLE); + } + + /** + * Sets the numbering style for this page range. + * + * @param style + * one of the STYLE_* constants or {@code null} if no page + * numbering is desired. + */ + public void setStyle(String style) + { + if (style != null) + { + root.setName(KEY_STYLE, style); + } + else + { + root.removeItem(KEY_STYLE); + } + } + + /** + * Returns the start value for page numbering in this page range. + * + * @return a positive integer the start value for numbering. + */ + public int getStart() + { + return root.getInt(KEY_START, 1); + } + + /** + * Sets the start value for page numbering in this page range. + * + * @param start + * a positive integer representing the start value. + * @throws IllegalArgumentException + * if {@code start} is not a positive integer + */ + public void setStart(int start) + { + if (start <= 0) + { + throw new IllegalArgumentException( + "The page numbering start value must be a positive integer"); + } + root.setInt(KEY_START, start); + } + + /** + * Returns the page label prefix for this page range. + * + * @return the page label prefix for this page range, or {@code null} if no + * prefix has been defined. + */ + public String getPrefix() + { + return root.getString(KEY_PREFIX); + } + + /** + * Sets the page label prefix for this page range. + * + * @param prefix + * the page label prefix for this page range, or {@code null} to + * unset the prefix. + */ + public void setPrefix(String prefix) + { + if (prefix != null) + { + root.setString(KEY_PREFIX, prefix); + } + else + { + root.removeItem(KEY_PREFIX); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java new file mode 100644 index 00000000000..cd228e9ff2e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDPageLabels.java @@ -0,0 +1,429 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.TreeMap; +import java.util.Map.Entry; +import java.util.NavigableSet; +import java.util.TreeSet; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; + +/** + * Represents the page label dictionary of a document. + * + * @author Igor Podolskiy + */ +public class PDPageLabels implements COSObjectable +{ + + private Map labels; + + private PDDocument doc; + + /** + * Creates an empty page label dictionary for the given document. + * + *

+ * Note that the page label dictionary won't be automatically added to the + * document; you will still need to do it manually (see + * {@link org.apache.pdfbox.pdmodel.PDDocumentCatalog#setPageLabels(PDPageLabels)}. + *

+ * + * @param document + * The document the page label dictionary is created for. + * @see org.apache.pdfbox.pdmodel.PDDocumentCatalog#setPageLabels(PDPageLabels) + */ + public PDPageLabels(PDDocument document) + { + labels = new TreeMap<>(); + this.doc = document; + PDPageLabelRange defaultRange = new PDPageLabelRange(); + defaultRange.setStyle(PDPageLabelRange.STYLE_DECIMAL); + labels.put(0, defaultRange); + } + + /** + * Creates an page label dictionary for a document using the information in + * the given COS dictionary. + * + *

+ * Note that the page label dictionary won't be automatically added to the + * document; you will still need to do it manually (see + * {@link org.apache.pdfbox.pdmodel.PDDocumentCatalog#setPageLabels(PDPageLabels)}. + *

+ * + * @param document + * The document the page label dictionary is created for. + * @param dict + * an existing page label dictionary + * @see org.apache.pdfbox.pdmodel.PDDocumentCatalog#setPageLabels(PDPageLabels) + * @throws IOException + * If something goes wrong during the number tree conversion. + */ + public PDPageLabels(PDDocument document, COSDictionary dict) throws IOException + { + this(document); + if (dict == null) + { + return; + } + PDNumberTreeNode root = new PDNumberTreeNode(dict, PDPageLabelRange.class); + findLabels(root); + } + + private void findLabels(PDNumberTreeNode node) throws IOException + { + if (node.getKids() != null) + { + List kids = node.getKids(); + for (PDNumberTreeNode kid : kids) + { + findLabels(kid); + } + } + else if (node.getNumbers() != null) + { + Map numbers = node.getNumbers(); + for (Entry i : numbers.entrySet()) + { + if(i.getKey() >= 0) + { + labels.put(i.getKey(), (PDPageLabelRange) i.getValue()); + } + } + } + } + + + /** + * Returns the number of page label ranges. + * + *

+ * This will be always >= 1, as the required default entry for the page + * range starting at the first page is added automatically by this + * implementation (see PDF32000-1:2008, p. 375). + *

+ * + * @return the number of page label ranges. + */ + public int getPageRangeCount() + { + return labels.size(); + } + + /** + * Returns the page label range starting at the given page, or {@code null} + * if no such range is defined. + * + * @param startPage + * the 0-based page index representing the start page of the page + * range the item is defined for. + * @return the page label range or {@code null} if no label range is defined + * for the given start page. + */ + public PDPageLabelRange getPageLabelRange(int startPage) + { + return labels.get(startPage); + } + + /** + * Sets the page label range beginning at the specified start page. + * + * @param startPage + * the 0-based index of the page representing the start of the + * page label range. + * @param item + * the page label item to set. + * @throws IllegalArgumentException if the startPage parameter is < 0. + */ + public void setLabelItem(int startPage, PDPageLabelRange item) + { + if (startPage < 0) + { + throw new IllegalArgumentException("startPage parameter of setLabelItem may not be < 0"); + } + labels.put(startPage, item); + } + + /** + * {@inheritDoc} + */ + @Override + public COSBase getCOSObject() + { + COSDictionary dict = new COSDictionary(); + COSArray arr = new COSArray(); + for (Entry i : labels.entrySet()) + { + arr.add(COSInteger.get(i.getKey())); + arr.add(i.getValue()); + } + dict.setItem(COSName.NUMS, arr); + return dict; + } + + /** + * Returns a mapping with computed page labels as keys and corresponding + * 0-based page indices as values. The returned map will contain at most as + * much entries as the document has pages. + * + *

+ * NOTE: If the document contains duplicate page labels, + * the returned map will contain less entries than the document has + * pages. The page index returned in this case is the highest index + * among all pages sharing the same label. + *

+ * + * @return a mapping from labels to 0-based page indices. + */ + public Map getPageIndicesByLabels() + { + final Map labelMap = + new HashMap<>(doc.getNumberOfPages()); + computeLabels(new LabelHandler() + { + @Override + public void newLabel(int pageIndex, String label) + { + labelMap.put(label, pageIndex); + } + }); + return labelMap; + } + + /** + * Returns a mapping with 0-based page indices as keys and corresponding + * page labels as values as an array. The array will have exactly as much + * entries as the document has pages. + * + * @return an array mapping from 0-based page indices to labels. + */ + public String[] getLabelsByPageIndices() + { + final String[] map = new String[doc.getNumberOfPages()]; + computeLabels(new LabelHandler() + { + @Override + public void newLabel(int pageIndex, String label) + { + if(pageIndex < doc.getNumberOfPages()) + { + map[pageIndex] = label; + } + } + }); + return map; + } + + /** + * Get an ordered set of page indices having a page label range. + * + * @return set of page indices. + */ + public NavigableSet getPageIndices() + { + return new TreeSet<>(labels.keySet()); + } + + /** + * Internal interface for the control flow support. + * + * @author Igor Podolskiy + */ + private interface LabelHandler + { + void newLabel(int pageIndex, String label); + } + + private void computeLabels(LabelHandler handler) + { + Iterator> iterator = + labels.entrySet().iterator(); + if (!iterator.hasNext()) + { + return; + } + int pageIndex = 0; + Entry lastEntry = iterator.next(); + while (iterator.hasNext()) + { + Entry entry = iterator.next(); + int numPages = entry.getKey() - lastEntry.getKey(); + LabelGenerator gen = new LabelGenerator(lastEntry.getValue(), + numPages); + while (gen.hasNext()) + { + handler.newLabel(pageIndex, gen.next()); + pageIndex++; + } + lastEntry = entry; + } + LabelGenerator gen = new LabelGenerator(lastEntry.getValue(), + doc.getNumberOfPages() - lastEntry.getKey()); + while (gen.hasNext()) + { + handler.newLabel(pageIndex, gen.next()); + pageIndex++; + } + } + + /** + * Generates the labels in a page range. + * + * @author Igor Podolskiy + * + */ + private static class LabelGenerator implements Iterator + { + private final PDPageLabelRange labelInfo; + private final int numPages; + private int currentPage; + + LabelGenerator(PDPageLabelRange label, int pages) + { + this.labelInfo = label; + this.numPages = pages; + this.currentPage = 0; + } + + @Override + public boolean hasNext() + { + return currentPage < numPages; + } + + @Override + public String next() + { + if (!hasNext()) + { + throw new NoSuchElementException(); + } + StringBuilder buf = new StringBuilder(); + if (labelInfo.getPrefix() != null) + { + String label = labelInfo.getPrefix(); + // there may be some labels with some null bytes at the end + // which will lead to an incomplete output, see PDFBOX-1047 + while (label.lastIndexOf(0) != -1) + { + label = label.substring(0, label.length()-1); + } + buf.append(label); + } + if (labelInfo.getStyle() != null) + { + buf.append(getNumber(labelInfo.getStart() + currentPage, + labelInfo.getStyle())); + } + currentPage++; + return buf.toString(); + } + + private String getNumber(int pageIndex, String style) + { + if (style != null) + { + switch (style) + { + case PDPageLabelRange.STYLE_DECIMAL: + return Integer.toString(pageIndex); + case PDPageLabelRange.STYLE_LETTERS_LOWER: + return makeLetterLabel(pageIndex); + case PDPageLabelRange.STYLE_LETTERS_UPPER: + return makeLetterLabel(pageIndex).toUpperCase(); + case PDPageLabelRange.STYLE_ROMAN_LOWER: + return makeRomanLabel(pageIndex); + case PDPageLabelRange.STYLE_ROMAN_UPPER: + return makeRomanLabel(pageIndex).toUpperCase(); + default: + break; + } + } + // Fall back to decimals. + return Integer.toString(pageIndex); + } + + /** + * Lookup table used by the {@link #makeRomanLabel(int)} method. + */ + private static final String[][] ROMANS = new String[][] { + { "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix" }, + { "", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc" }, + { "", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm" } + }; + + private static String makeRomanLabel(int pageIndex) + { + StringBuilder buf = new StringBuilder(); + int power = 0; + while (power < 3 && pageIndex > 0) + { + buf.insert(0, ROMANS[power][pageIndex % 10]); + pageIndex /= 10; + power++; + } + // Prepend as many m as there are thousands (which is + // incorrect by the roman numeral rules for numbers > 3999, + // but is unbounded and Adobe Acrobat does it this way). + // This code is somewhat inefficient for really big numbers, + // but those don't occur too often (and the numbers in those cases + // would be incomprehensible even if we and Adobe + // used strict Roman rules). + for (int i = 0; i < pageIndex; i++) + { + buf.insert(0, 'm'); + } + return buf.toString(); + } + + /** + * a..z, aa..zz, aaa..zzz ... labeling as described in PDF32000-1:2008, + * Table 159, Page 375. + */ + private static String makeLetterLabel(int num) + { + StringBuilder buf = new StringBuilder(); + int numLetters = num / 26 + Integer.signum(num % 26); + int letter = num % 26 + 26 * (1 - Integer.signum(num % 26)) + 'a' - 1; + for (int i = 0; i < numLetters; i++) + { + buf.appendCodePoint(letter); + } + return buf.toString(); + } + + @Override + public void remove() + { + // This is a generator, no removing allowed. + throw new UnsupportedOperationException(); + } + } +} \ No newline at end of file diff --git a/src/org/pdfbox/pdmodel/common/PDRange.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRange.java similarity index 87% rename from src/org/pdfbox/pdmodel/common/PDRange.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRange.java index 33a4b0ac632..fa9a6f9a340 100644 --- a/src/org/pdfbox/pdmodel/common/PDRange.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRange.java @@ -14,18 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.common; +package org.apache.pdfbox.pdmodel.common; -import org.pdfbox.cos.COSArray; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSFloat; -import org.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; /** - * This class will be used to signify a range. a(min) <= a* <= a(max) + * This class will be used to signify a range. a(min) <= a* <= a(max) * - * @author Ben Litchfield - * @version $Revision: 1.4 $ + * @author Ben Litchfield */ public class PDRange implements COSObjectable { @@ -73,6 +72,7 @@ public PDRange( COSArray range, int index ) * * @return The cos object that matches this Java object. */ + @Override public COSBase getCOSObject() { return rangeArray; @@ -129,4 +129,14 @@ public void setMax( float max ) { rangeArray.set( startingIndex*2+1, new COSFloat( max ) ); } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "PDRange{" + getMin() + ", " + getMax() + '}'; + } + } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java new file mode 100644 index 00000000000..e23980f984c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDRectangle.java @@ -0,0 +1,352 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.util.Arrays; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; + +import org.apache.fontbox.util.BoundingBox; + +import org.apache.pdfbox.util.Matrix; + +/** + * A rectangle in a PDF document. + * + * @author Ben Litchfield + */ +public class PDRectangle implements COSObjectable +{ + /** user space units per inch */ + private static final float POINTS_PER_INCH = 72; + + /** user space units per millimeter */ + private static final float POINTS_PER_MM = 1 / (10 * 2.54f) * POINTS_PER_INCH; + + /** A rectangle the size of U.S. Letter, 8.5" x 11". */ + public static final PDRectangle LETTER = new PDRectangle(8.5f * POINTS_PER_INCH, + 11f *POINTS_PER_INCH); + /** A rectangle the size of U.S. Legal, 8.5" x 14". */ + public static final PDRectangle LEGAL = new PDRectangle(8.5f * POINTS_PER_INCH, + 14f * POINTS_PER_INCH); + /** A rectangle the size of A0 Paper. */ + public static final PDRectangle A0 = new PDRectangle(841 * POINTS_PER_MM, 1189 * POINTS_PER_MM); + + /** A rectangle the size of A1 Paper. */ + public static final PDRectangle A1 = new PDRectangle(594 * POINTS_PER_MM, 841 * POINTS_PER_MM); + + /** A rectangle the size of A2 Paper. */ + public static final PDRectangle A2 = new PDRectangle(420 * POINTS_PER_MM, 594 * POINTS_PER_MM); + + /** A rectangle the size of A3 Paper. */ + public static final PDRectangle A3 = new PDRectangle(297 * POINTS_PER_MM, 420 * POINTS_PER_MM); + + /** A rectangle the size of A4 Paper. */ + public static final PDRectangle A4 = new PDRectangle(210 * POINTS_PER_MM, 297 * POINTS_PER_MM); + + /** A rectangle the size of A5 Paper. */ + public static final PDRectangle A5 = new PDRectangle(148 * POINTS_PER_MM, 210 * POINTS_PER_MM); + + /** A rectangle the size of A6 Paper. */ + public static final PDRectangle A6 = new PDRectangle(105 * POINTS_PER_MM, 148 * POINTS_PER_MM); + + private final COSArray rectArray; + + /** + * Constructor. + * + * Initializes to 0,0,0,0 + */ + public PDRectangle() + { + this(0.0f, 0.0f, 0.0f, 0.0f); + } + + /** + * Constructor. + * + * @param width The width of the rectangle. + * @param height The height of the rectangle. + */ + public PDRectangle( float width, float height ) + { + this(0.0f, 0.0f, width, height); + } + + /** + * Constructor. + * + * @param x the x coordinate of the rectangle + * @param y the y coordinate of the rectangle + * @param width The width of the rectangle. + * @param height The height of the rectangle. + */ + public PDRectangle( float x, float y, float width, float height ) + { + rectArray = new COSArray(); + rectArray.add( new COSFloat( x ) ); + rectArray.add( new COSFloat( y ) ); + rectArray.add( new COSFloat( x + width ) ); + rectArray.add( new COSFloat( y + height ) ); + } + + /** + * Constructor. + * + * @param box the bounding box to be used for the rectangle + */ + public PDRectangle( BoundingBox box ) + { + rectArray = new COSArray(); + rectArray.add( new COSFloat( box.getLowerLeftX() ) ); + rectArray.add( new COSFloat( box.getLowerLeftY() ) ); + rectArray.add( new COSFloat( box.getUpperRightX() ) ); + rectArray.add( new COSFloat( box.getUpperRightY() ) ); + } + + /** + * Constructor. + * + * @param array An array of numbers as specified in the PDF Reference for a rectangle type. + */ + public PDRectangle( COSArray array ) + { + float[] values = Arrays.copyOf(array.toFloatArray(), 4); + rectArray = new COSArray(); + // we have to start with the lower left corner + rectArray.add( new COSFloat( Math.min(values[0],values[2] )) ); + rectArray.add( new COSFloat( Math.min(values[1],values[3] )) ); + rectArray.add( new COSFloat( Math.max(values[0],values[2] )) ); + rectArray.add( new COSFloat( Math.max(values[1],values[3] )) ); + } + + /** + * Method to determine if the x/y point is inside this rectangle. + * @param x The x-coordinate to test. + * @param y The y-coordinate to test. + * @return True if the point is inside this rectangle. + */ + public boolean contains( float x, float y ) + { + float llx = getLowerLeftX(); + float urx = getUpperRightX(); + float lly = getLowerLeftY(); + float ury = getUpperRightY(); + return x >= llx && x <= urx && + y >= lly && y <= ury; + } + + /** + * This will create a translated rectangle based off of this rectangle, such + * that the new rectangle retains the same dimensions(height/width), but the + * lower left x,y values are zero.
+ * 100, 100, 400, 400 (llx, lly, urx, ury )
+ * will be translated to 0,0,300,300 + * + * @return A new rectangle that has been translated back to the origin. + */ + public PDRectangle createRetranslatedRectangle() + { + PDRectangle retval = new PDRectangle(); + retval.setUpperRightX( getWidth() ); + retval.setUpperRightY( getHeight() ); + return retval; + } + + /** + * This will get the underlying array for this rectangle. + * + * @return The cos array. + */ + public COSArray getCOSArray() + { + return rectArray; + } + + /** + * This will get the lower left x coordinate. + * + * @return The lower left x. + */ + public float getLowerLeftX() + { + return ((COSNumber)rectArray.get(0)).floatValue(); + } + + /** + * This will set the lower left x coordinate. + * + * @param value The lower left x. + */ + public void setLowerLeftX(float value) + { + rectArray.set(0, new COSFloat( value ) ); + } + + /** + * This will get the lower left y coordinate. + * + * @return The lower left y. + */ + public float getLowerLeftY() + { + return ((COSNumber)rectArray.get(1)).floatValue(); + } + + /** + * This will set the lower left y coordinate. + * + * @param value The lower left y. + */ + public void setLowerLeftY(float value) + { + rectArray.set(1, new COSFloat( value ) ); + } + + /** + * This will get the upper right x coordinate. + * + * @return The upper right x . + */ + public float getUpperRightX() + { + return ((COSNumber)rectArray.get(2)).floatValue(); + } + + /** + * This will set the upper right x coordinate. + * + * @param value The upper right x . + */ + public void setUpperRightX(float value) + { + rectArray.set(2, new COSFloat( value ) ); + } + + /** + * This will get the upper right y coordinate. + * + * @return The upper right y. + */ + public float getUpperRightY() + { + return ((COSNumber)rectArray.get(3)).floatValue(); + } + + /** + * This will set the upper right y coordinate. + * + * @param value The upper right y. + */ + public void setUpperRightY(float value) + { + rectArray.set(3, new COSFloat( value ) ); + } + + /** + * This will get the width of this rectangle as calculated by + * upperRightX - lowerLeftX. + * + * @return The width of this rectangle. + */ + public float getWidth() + { + return getUpperRightX() - getLowerLeftX(); + } + + /** + * This will get the height of this rectangle as calculated by + * upperRightY - lowerLeftY. + * + * @return The height of this rectangle. + */ + public float getHeight() + { + return getUpperRightY() - getLowerLeftY(); + } + + /** + * Returns a path which represents this rectangle having been transformed by the given matrix. + * Note that the resulting path need not be rectangular. + */ + public GeneralPath transform(Matrix matrix) + { + float x1 = getLowerLeftX(); + float y1 = getLowerLeftY(); + float x2 = getUpperRightX(); + float y2 = getUpperRightY(); + + Point2D.Float p0 = matrix.transformPoint(x1, y1); + Point2D.Float p1 = matrix.transformPoint(x2, y1); + Point2D.Float p2 = matrix.transformPoint(x2, y2); + Point2D.Float p3 = matrix.transformPoint(x1, y2); + + GeneralPath path = new GeneralPath(); + path.moveTo(p0.getX(), p0.getY()); + path.lineTo(p1.getX(), p1.getY()); + path.lineTo(p2.getX(), p2.getY()); + path.lineTo(p3.getX(), p3.getY()); + path.closePath(); + return path; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSBase getCOSObject() + { + return rectArray; + } + + /** + * Returns a general path equivalent to this rectangle. This method avoids the problems + * caused by Rectangle2D not working well with -ve rectangles. + */ + public GeneralPath toGeneralPath() + { + float x1 = getLowerLeftX(); + float y1 = getLowerLeftY(); + float x2 = getUpperRightX(); + float y2 = getUpperRightY(); + GeneralPath path = new GeneralPath(); + path.moveTo(x1, y1); + path.lineTo(x2, y1); + path.lineTo(x2, y2); + path.lineTo(x1, y2); + path.closePath(); + return path; + } + + /** + * This will return a string representation of this rectangle. + * + * @return This object as a string. + */ + @Override + public String toString() + { + return "[" + getLowerLeftX() + "," + getLowerLeftY() + "," + + getUpperRightX() + "," + getUpperRightY() +"]"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java new file mode 100644 index 00000000000..dfcf0f89249 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java @@ -0,0 +1,551 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSInputStream; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +/** + * A PDStream represents a stream in a PDF document. Streams are tied to a single PDF document. + * + * @author Ben Litchfield + */ +public class PDStream implements COSObjectable +{ + private final COSStream stream; + + /** + * Creates a new empty PDStream object. + * + * @param document The document that the stream will be part of. + */ + public PDStream(PDDocument document) + { + stream = document.getDocument().createCOSStream(); + } + + /** + * Creates a new empty PDStream object. + * + * @param document The document that the stream will be part of. + */ + public PDStream(COSDocument document) + { + stream = document.createCOSStream(); + } + + /** + * Creates a PDStream which wraps the given COSStream. + * + * @param str The stream parameter. + */ + public PDStream(COSStream str) + { + stream = str; + } + + /** + * Constructor. Reads all data from the input stream and embeds it into the document. This + * method closes the InputStream. + * + * @param doc The document that will hold the stream. + * @param input The stream parameter. + * @throws IOException If there is an error creating the stream in the document. + */ + public PDStream(PDDocument doc, InputStream input) throws IOException + { + this(doc, input, (COSBase)null); + } + + /** + * Constructor. Reads all data from the input stream and embeds it into the document with the + * given filter applied. This method closes the InputStream. + * + * @param doc The document that will hold the stream. + * @param input The stream parameter. + * @param filter Filter to apply to the stream. + * @throws IOException If there is an error creating the stream in the document. + */ + public PDStream(PDDocument doc, InputStream input, COSName filter) throws IOException + { + this(doc, input, (COSBase)filter); + } + + /** + * Constructor. Reads all data from the input stream and embeds it into the document with the + * given filters applied. This method closes the InputStream. + * + * @param doc The document that will hold the stream. + * @param input The stream parameter. + * @param filters Filters to apply to the stream. + * @throws IOException If there is an error creating the stream in the document. + */ + public PDStream(PDDocument doc, InputStream input, COSArray filters) throws IOException + { + this(doc, input, (COSBase)filters); + } + + /** + * Constructor. Reads all data from the input stream and embeds it into the document with the + * given filters applied, if any. This method closes the InputStream. + */ + private PDStream(PDDocument doc, InputStream input, COSBase filters) throws IOException + { + stream = doc.getDocument().createCOSStream(); + try (OutputStream output = stream.createOutputStream(filters)) + { + IOUtils.copy(input, output); + } + finally + { + if (input != null) + { + input.close(); + } + } + } + + /** + * If there are not compression filters on the current stream then this will + * add a compression filter, flate compression for example. + * + * @deprecated This method is inefficient. To copying an existing InputStream, use + * {@link #PDStream(PDDocument, InputStream, COSName)} instead, with + * COSName.FLATE_DECODE as the final argument. + * + * Otherwise, to write new compressed data, use {@link #createOutputStream(COSName)}, + * with COSName.FLATE_DECODE as the argument. + */ + @Deprecated + public void addCompression() + { + List filters = getFilters(); + if (filters == null) + { + if (stream.getLength() > 0) + { + OutputStream out = null; + try + { + byte[] bytes = IOUtils.toByteArray(stream.createInputStream()); + out = stream.createOutputStream(COSName.FLATE_DECODE); + out.write(bytes); + } + catch (IOException e) + { + // not much else we can do here without breaking the existing API, sorry. + throw new RuntimeException(e); + } + finally + { + IOUtils.closeQuietly(out); + } + } + else + { + filters = new ArrayList<>(); + filters.add(COSName.FLATE_DECODE); + setFilters(filters); + } + } + } + + /** + * Get the cos stream associated with this object. + * + * @return The cos object that matches this Java object. + * + */ + @Override + public COSStream getCOSObject() + { + return stream; + } + + /** + * This will get a stream that can be written to. + * + * @return An output stream to write data to. + * @throws IOException If an IO error occurs during writing. + */ + public OutputStream createOutputStream() throws IOException + { + return stream.createOutputStream(); + } + + /** + * This will get a stream that can be written to, with the given filter. + * + * @param filter the filter to be used. + * @return An output stream to write data to. + * @throws IOException If an IO error occurs during writing. + */ + public OutputStream createOutputStream(COSName filter) throws IOException + { + return stream.createOutputStream(filter); + } + + /** + * This will get a stream that can be read from. + * + * @return An input stream that can be read from. + * @throws IOException If an IO error occurs during reading. + */ + public COSInputStream createInputStream() throws IOException + { + return stream.createInputStream(); + } + + public COSInputStream createInputStream(DecodeOptions options) throws IOException + { + return stream.createInputStream(options); + } + + /** + * This will get a stream with some filters applied but not others. This is + * useful when doing images, ie filters = [flate,dct], we want to remove + * flate but leave dct + * + * @param stopFilters A list of filters to stop decoding at. + * @return A stream with decoded data. + * @throws IOException If there is an error processing the stream. + */ + public InputStream createInputStream(List stopFilters) throws IOException + { + InputStream is = stream.createRawInputStream(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + List filters = getFilters(); + if (filters != null) + { + for (int i = 0; i < filters.size(); i++) + { + COSName nextFilter = filters.get(i); + if ((stopFilters != null) && stopFilters.contains(nextFilter.getName())) + { + break; + } + else + { + Filter filter = FilterFactory.INSTANCE.getFilter(nextFilter); + filter.decode(is, os, stream, i); + IOUtils.closeQuietly(is); + is = new ByteArrayInputStream(os.toByteArray()); + os.reset(); + } + } + } + return is; + } + + /** + * This will get the length of the filtered/compressed stream. This is + * readonly in the PD Model and will be managed by this class. + * + * @return The length of the filtered stream. + */ + public int getLength() + { + return stream.getInt(COSName.LENGTH, 0); + } + + /** + * This will get the list of filters that are associated with this stream. + * Or null if there are none. + * + * @return A list of all encoding filters to apply to this stream. + */ + public List getFilters() + { + List retval = null; + COSBase filters = stream.getFilters(); + if (filters instanceof COSName) + { + COSName name = (COSName) filters; + retval = new COSArrayList<>(name, name, stream, COSName.FILTER); + } + else if (filters instanceof COSArray) + { + retval = (List) ((COSArray) filters).toList(); + } + return retval; + } + + /** + * This will set the filters that are part of this stream. + * + * @param filters The filters that are part of this stream. + */ + public void setFilters(List filters) + { + COSBase obj = COSArrayList.converterToCOSArray(filters); + stream.setItem(COSName.FILTER, obj); + } + + /** + * Get the list of decode parameters. Each entry in the list will refer to + * an entry in the filters list. + * + * @return The list of decode parameters. + * @throws IOException if there is an error retrieving the parameters. + */ + public List getDecodeParms() throws IOException + { + List retval = null; + + COSBase dp = stream.getDictionaryObject(COSName.DECODE_PARMS); + if (dp == null) + { + // See PDF Ref 1.5 implementation note 7, the DP is sometimes used + // instead. + dp = stream.getDictionaryObject(COSName.DP); + } + if (dp instanceof COSDictionary) + { + Map map = COSDictionaryMap + .convertBasicTypesToMap((COSDictionary) dp); + retval = new COSArrayList(map, dp, stream, + COSName.DECODE_PARMS); + } + else if (dp instanceof COSArray) + { + COSArray array = (COSArray) dp; + List actuals = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) + { + actuals.add(COSDictionaryMap + .convertBasicTypesToMap((COSDictionary) array + .getObject(i))); + } + retval = new COSArrayList<>(actuals, array); + } + + return retval; + } + + /** + * This will set the list of decode parameterss. + * + * @param decodeParams The list of decode parameterss. + */ + public void setDecodeParms(List decodeParams) + { + stream.setItem(COSName.DECODE_PARMS, + COSArrayList.converterToCOSArray(decodeParams)); + } + + /** + * This will get the file specification for this stream. This is only + * required for external files. + * + * @return The file specification. + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + COSBase f = stream.getDictionaryObject(COSName.F); + return PDFileSpecification.createFS(f); + } + + /** + * Set the file specification. + * + * @param f The file specification. + */ + public void setFile(PDFileSpecification f) + { + stream.setItem(COSName.F, f); + } + + /** + * This will get the list of filters that are associated with this stream. + * Or null if there are none. + * + * @return A list of all encoding filters to apply to this stream. + */ + public List getFileFilters() + { + List retval = null; + COSBase filters = stream.getDictionaryObject(COSName.F_FILTER); + if (filters instanceof COSName) + { + COSName name = (COSName) filters; + retval = new COSArrayList<>(name.getName(), name, stream, + COSName.F_FILTER); + } + else if (filters instanceof COSArray) + { + retval = COSArrayList + .convertCOSNameCOSArrayToList((COSArray) filters); + } + return retval; + } + + /** + * This will set the filters that are part of this stream. + * + * @param filters The filters that are part of this stream. + */ + public void setFileFilters(List filters) + { + COSBase obj = COSArrayList.convertStringListToCOSNameCOSArray(filters); + stream.setItem(COSName.F_FILTER, obj); + } + + /** + * Get the list of decode parameters. Each entry in the list will refer to + * an entry in the filters list. + * + * @return The list of decode parameters. + * @throws IOException if there is an error retrieving the parameters. + */ + public List getFileDecodeParams() throws IOException + { + List retval = null; + + COSBase dp = stream.getDictionaryObject(COSName.F_DECODE_PARMS); + if (dp instanceof COSDictionary) + { + Map map = COSDictionaryMap + .convertBasicTypesToMap((COSDictionary) dp); + retval = new COSArrayList(map, dp, stream, + COSName.F_DECODE_PARMS); + } + else if (dp instanceof COSArray) + { + COSArray array = (COSArray) dp; + List actuals = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) + { + actuals.add(COSDictionaryMap + .convertBasicTypesToMap((COSDictionary) array + .getObject(i))); + } + retval = new COSArrayList<>(actuals, array); + } + + return retval; + } + + /** + * This will set the list of decode params. + * + * @param decodeParams The list of decode params. + */ + public void setFileDecodeParams(List decodeParams) + { + stream.setItem("FDecodeParams", + COSArrayList.converterToCOSArray(decodeParams)); + } + + /** + * This will copy the stream into a byte array. + * + * @return The byte array of the filteredStream. + * @throws IOException if an I/O error occurs. + */ + public byte[] toByteArray() throws IOException + { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + try (InputStream is = createInputStream()) + { + IOUtils.copy(is, output); + } + return output.toByteArray(); + } + + /** + * Get the metadata that is part of the document catalog. This will return + * null if there is no meta data for this object. + * + * @return The metadata for this object. + * @throws IllegalStateException if the value of the metadata entry is different from a stream + * or null + */ + public PDMetadata getMetadata() + { + PDMetadata retval = null; + COSBase mdStream = stream.getDictionaryObject(COSName.METADATA); + if (mdStream != null) + { + if (mdStream instanceof COSStream) + { + retval = new PDMetadata((COSStream) mdStream); + } + else if (mdStream instanceof COSNull) + { + // null is authorized + } + else + { + throw new IllegalStateException( + "Expected a COSStream but was a " + + mdStream.getClass().getSimpleName()); + } + } + return retval; + } + + /** + * Set the metadata for this object. This can be null. + * + * @param meta The meta data for this object. + */ + public void setMetadata(PDMetadata meta) + { + stream.setItem(COSName.METADATA, meta); + } + + /** + * Get the decoded stream length. + * + * @return the decoded stream length + */ + public int getDecodedStreamLength() + { + return this.stream.getInt(COSName.DL); + } + + /** + * Set the decoded stream length. + * + * @param decodedStreamLength the decoded stream length + */ + public void setDecodedStreamLength(int decodedStreamLength) + { + this.stream.setInt(COSName.DL, decodedStreamLength); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDTypedDictionaryWrapper.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDTypedDictionaryWrapper.java new file mode 100644 index 00000000000..2ed155be4b4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDTypedDictionaryWrapper.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A wrapper for a COS dictionary including Type information. + * + * @author Johannes Koch + * + */ +public class PDTypedDictionaryWrapper extends PDDictionaryWrapper +{ + + /** + * Creates a new instance with a given type. + * + * @param type the type (Type) + */ + public PDTypedDictionaryWrapper(String type) + { + super(); + this.getCOSObject().setName(COSName.TYPE, type); + } + + /** + * Creates a new instance with a given COS dictionary. + * + * @param dictionary the dictionary + */ + public PDTypedDictionaryWrapper(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the type. + * + * @return the type + */ + public String getType() + { + return this.getCOSObject().getNameAsString(COSName.TYPE); + } + + // There is no setType(String) method because changing the Type would most + // probably also change the type of PD object. +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDComplexFileSpecification.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDComplexFileSpecification.java new file mode 100644 index 00000000000..b3dfe045231 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDComplexFileSpecification.java @@ -0,0 +1,463 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.filespecification; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; + +/** + * This represents a file specification. + * + * @author Ben Litchfield + * + */ +public class PDComplexFileSpecification extends PDFileSpecification +{ + private final COSDictionary fs; + private COSDictionary efDictionary; + + /** + * Default Constructor. + */ + public PDComplexFileSpecification() + { + fs = new COSDictionary(); + fs.setItem( COSName.TYPE, COSName.FILESPEC ); + } + + /** + * Constructor. Creates empty COSDictionary if dict is null. + * + * @param dict The dictionary that fulfils this file specification. + */ + public PDComplexFileSpecification( COSDictionary dict ) + { + if (dict == null) + { + fs = new COSDictionary(); + fs.setItem( COSName.TYPE, COSName.FILESPEC ); + } + else + { + fs = dict; + } + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return fs; + } + + private COSDictionary getEFDictionary() + { + if (efDictionary == null && fs != null) + { + efDictionary = (COSDictionary)fs.getDictionaryObject( COSName.EF ); + } + return efDictionary; + } + + private COSBase getObjectFromEFDictionary(COSName key) + { + COSDictionary ef = getEFDictionary(); + if (ef != null) + { + return ef.getDictionaryObject(key); + } + return null; + } + + /** + *

Preferred method for getting the filename. + * It will determinate the recommended file name.

+ *

First of all we try to get the unicode filename if it exist. + * If it doesn't exist we take a look at the DOS, MAC UNIX filenames. + * If no one exist the required F entry will be returned.

+ * + * @return The preferred file name. + */ + public String getFilename() + { + String filename = getFileUnicode(); + if (filename == null) + { + filename = getFileDos(); + } + if (filename == null) + { + filename = getFileMac(); + } + if (filename == null) + { + filename = getFileUnix(); + } + if (filename == null) + { + filename = getFile(); + } + return filename; + } + + /** + * This will get the unicode file name. + * + * @return The file name. + */ + public String getFileUnicode() + { + return fs.getString(COSName.UF); + } + + /** + * This will set the unicode file name. If you call this, then do not forget to also call + * {@link #setFile(java.lang.String) setFile(String)} or the attachment will not be visible on + * some viewers. + * + * @param file The name of the file. + */ + public void setFileUnicode( String file ) + { + fs.setString( COSName.UF, file ); + } + + /** + * This will get the file name. + * + * @return The file name. + */ + @Override + public String getFile() + { + return fs.getString( COSName.F ); + } + + /** + * This will set the file name. You should also call + * {@link #setFileUnicode(java.lang.String) setFileUnicode(String)} for cross-platform and + * cross-language compatibility. + * + * @param file The name of the file. + */ + @Override + public void setFile( String file ) + { + fs.setString( COSName.F, file ); + } + + /** + * This will get the name representing a Dos file. + * + * @return The file name. + */ + public String getFileDos() + { + return fs.getString( COSName.DOS ); + } + + /** + * This will set name representing a dos file. + * + * @param file The name of the file. + * @deprecated This method is obsolescent and should not be used by conforming writers. + */ + @Deprecated + public void setFileDos( String file ) + { + fs.setString( COSName.DOS, file ); + } + + /** + * This will get the name representing a Mac file. + * + * @return The file name. + */ + public String getFileMac() + { + return fs.getString( COSName.MAC ); + } + + /** + * This will set name representing a Mac file. + * + * @param file The name of the file. + * @deprecated This method is obsolescent and should not be used by conforming writers. + */ + @Deprecated + public void setFileMac( String file ) + { + fs.setString( COSName.MAC, file ); + } + + /** + * This will get the name representing a Unix file. + * + * @return The file name. + */ + public String getFileUnix() + { + return fs.getString( COSName.UNIX ); + } + + /** + * This will set name representing a Unix file. + * + * @param file The name of the file. + * @deprecated This method is obsolescent and should not be used by conforming writers. + */ + @Deprecated + public void setFileUnix( String file ) + { + fs.setString( COSName.UNIX, file ); + } + + /** + * Tell if the underlying file is volatile and should not be cached by the + * reader application. Default: false + * + * @param fileIsVolatile The new value for the volatility of the file. + */ + public void setVolatile( boolean fileIsVolatile ) + { + fs.setBoolean( COSName.V, fileIsVolatile ); + } + + /** + * Get if the file is volatile. Default: false + * + * @return True if the file is volatile attribute is set. + */ + public boolean isVolatile() + { + return fs.getBoolean( COSName.V, false ); + } + + /** + * Get the embedded file. + * + * @return The embedded file for this file spec. + */ + public PDEmbeddedFile getEmbeddedFile() + { + PDEmbeddedFile file = null; + COSStream stream = (COSStream)getObjectFromEFDictionary(COSName.F); + if( stream != null ) + { + file = new PDEmbeddedFile( stream ); + } + return file; + } + + /** + * Set the embedded file for this spec. You should also call + * {@link #setEmbeddedFileUnicode(org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile) setEmbeddedFileUnicode(PDEmbeddedFile)} + * for cross-platform and cross-language compatibility. + * + * @param file The file to be embedded. + */ + public void setEmbeddedFile( PDEmbeddedFile file ) + { + COSDictionary ef = getEFDictionary(); + if( ef == null && file != null ) + { + ef = new COSDictionary(); + fs.setItem( COSName.EF, ef ); + } + if( ef != null ) + { + ef.setItem( COSName.F, file ); + } + } + + /** + * Get the embedded dos file. + * + * @return The embedded dos file for this file spec. + */ + public PDEmbeddedFile getEmbeddedFileDos() + { + PDEmbeddedFile file = null; + COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.DOS ); + if( stream != null ) + { + file = new PDEmbeddedFile( stream ); + } + return file; + } + + /** + * Set the embedded dos file for this spec. + * + * @param file The dos file to be embedded. + * @deprecated This method is obsolescent and should not be used by conforming writers. + */ + @Deprecated + public void setEmbeddedFileDos( PDEmbeddedFile file ) + { + COSDictionary ef = getEFDictionary(); + if( ef == null && file != null ) + { + ef = new COSDictionary(); + fs.setItem( COSName.EF, ef ); + } + if( ef != null ) + { + ef.setItem( COSName.DOS, file ); + } + } + + /** + * Get the embedded Mac file. + * + * @return The embedded Mac file for this file spec. + */ + public PDEmbeddedFile getEmbeddedFileMac() + { + PDEmbeddedFile file = null; + COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.MAC ); + if( stream != null ) + { + file = new PDEmbeddedFile( stream ); + } + return file; + } + + /** + * Set the embedded Mac file for this spec. + * + * @param file The Mac file to be embedded. + * @deprecated This method is obsolescent and should not be used by conforming writers. + */ + @Deprecated + public void setEmbeddedFileMac( PDEmbeddedFile file ) + { + COSDictionary ef = getEFDictionary(); + if( ef == null && file != null ) + { + ef = new COSDictionary(); + fs.setItem( COSName.EF, ef ); + } + if( ef != null ) + { + ef.setItem( COSName.MAC, file ); + } + } + + /** + * Get the embedded Unix file. + * + * @return The embedded file for this file spec. + */ + public PDEmbeddedFile getEmbeddedFileUnix() + { + PDEmbeddedFile file = null; + COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.UNIX ); + if( stream != null ) + { + file = new PDEmbeddedFile( stream ); + } + return file; + } + + /** + * Set the embedded Unix file for this spec. + * + * @param file The Unix file to be embedded. + * @deprecated This method is obsolescent and should not be used by conforming writers. + */ + @Deprecated + public void setEmbeddedFileUnix( PDEmbeddedFile file ) + { + COSDictionary ef = getEFDictionary(); + if( ef == null && file != null ) + { + ef = new COSDictionary(); + fs.setItem( COSName.EF, ef ); + } + if( ef != null ) + { + ef.setItem( COSName.UNIX, file ); + } + } + + /** + * Get the embedded unicode file. + * + * @return The embedded unicode file for this file spec. + */ + public PDEmbeddedFile getEmbeddedFileUnicode() + { + PDEmbeddedFile file = null; + COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.UF ); + if( stream != null ) + { + file = new PDEmbeddedFile( stream ); + } + return file; + } + + /** + * Set the embedded Unicode file for this spec. If you call this, then do not forget to also + * call + * {@link #setEmbeddedFile(org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile) setEmbeddedFile(PDEmbeddedFile)} + * or the attachment will not be visible on some viewers. + * + * @param file The Unicode file to be embedded. + */ + public void setEmbeddedFileUnicode( PDEmbeddedFile file ) + { + COSDictionary ef = getEFDictionary(); + if( ef == null && file != null ) + { + ef = new COSDictionary(); + fs.setItem( COSName.EF, ef ); + } + if( ef != null ) + { + ef.setItem( COSName.UF, file ); + } + } + + /** + * Set the file description. + * + * @param description The file description + */ + public void setFileDescription( String description ) + { + fs.setString( COSName.DESC, description ); + } + + /** + * This will get the description. + * + * @return The file description. + */ + public String getFileDescription() + { + return fs.getString( COSName.DESC ); + } + +} + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDEmbeddedFile.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDEmbeddedFile.java new file mode 100644 index 00000000000..250a77d3189 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDEmbeddedFile.java @@ -0,0 +1,297 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.filespecification; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Calendar; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * This represents an embedded file in a file specification. + * + * @author Ben Litchfield + */ +public class PDEmbeddedFile extends PDStream +{ + + /** + * Constructor. + * + * @param document {@inheritDoc} + */ + public PDEmbeddedFile( PDDocument document ) + { + super( document ); + getCOSObject().setName(COSName.TYPE, "EmbeddedFile" ); + + } + + /** + * Constructor. + * + * @param str The stream parameter. + */ + public PDEmbeddedFile( COSStream str ) + { + super(str); + } + + /** + * Constructor. + * + * @param doc {@inheritDoc} + * @param str {@inheritDoc} + * + * @throws IOException {@inheritDoc} + */ + public PDEmbeddedFile( PDDocument doc, InputStream str ) throws IOException + { + super(doc, str); + getCOSObject().setName(COSName.TYPE, "EmbeddedFile"); + } + + /** + * Constructor. + * + * @param doc {@inheritDoc} + * @param input {@inheritDoc} + * @param filter Filter to apply to the stream. + * + * @throws IOException {@inheritDoc} + */ + public PDEmbeddedFile(PDDocument doc, InputStream input, COSName filter) throws IOException + { + super(doc, input, filter); + getCOSObject().setName(COSName.TYPE, "EmbeddedFile"); + } + + /** + * Set the subtype for this embedded file. This should be a mime type value. Optional. + * + * @param mimeType The mimeType for the file. + */ + public void setSubtype( String mimeType ) + { + getCOSObject().setName(COSName.SUBTYPE, mimeType); + } + + /** + * Get the subtype(mimetype) for the embedded file. + * + * @return The type of embedded file. + */ + public String getSubtype() + { + return getCOSObject().getNameAsString(COSName.SUBTYPE ); + } + + /** + * Get the size of the embedded file. + * + * @return The size of the embedded file. + */ + public int getSize() + { + return getCOSObject().getEmbeddedInt( "Params", "Size" ); + } + + /** + * Set the size of the embedded file. + * + * @param size The size of the embedded file. + */ + public void setSize( int size ) + { + getCOSObject().setEmbeddedInt( "Params", "Size", size ); + } + + /** + * Get the creation date of the embedded file. + * + * @return The Creation date. + * @throws IOException If there is an error while constructing the date. + */ + public Calendar getCreationDate() throws IOException + { + return getCOSObject().getEmbeddedDate( "Params", "CreationDate" ); + } + + /** + * Set the creation date. + * + * @param creation The new creation date. + */ + public void setCreationDate( Calendar creation ) + { + getCOSObject().setEmbeddedDate( "Params", "CreationDate", creation ); + } + + /** + * Get the mod date of the embedded file. + * + * @return The mod date. + * @throws IOException If there is an error while constructing the date. + */ + public Calendar getModDate() throws IOException + { + return getCOSObject().getEmbeddedDate( "Params", "ModDate" ); + } + + /** + * Set the mod date. + * + * @param mod The new creation mod. + */ + public void setModDate( Calendar mod ) + { + getCOSObject().setEmbeddedDate( "Params", "ModDate", mod ); + } + + /** + * Get the check sum of the embedded file. + * + * @return The check sum of the file. + */ + public String getCheckSum() + { + return getCOSObject().getEmbeddedString( "Params", "CheckSum" ); + } + + /** + * Set the check sum. + * + * @param checksum The checksum of the file. + */ + public void setCheckSum( String checksum ) + { + getCOSObject().setEmbeddedString( "Params", "CheckSum", checksum ); + } + + /** + * Get the mac subtype. + * + * @return The mac subtype. + */ + public String getMacSubtype() + { + String retval = null; + COSDictionary params = (COSDictionary)getCOSObject().getDictionaryObject( COSName.PARAMS ); + if( params != null ) + { + retval = params.getEmbeddedString( "Mac", "Subtype" ); + } + return retval; + } + + /** + * Set the mac subtype. + * + * @param macSubtype The mac subtype. + */ + public void setMacSubtype( String macSubtype ) + { + COSDictionary params = (COSDictionary)getCOSObject().getDictionaryObject( COSName.PARAMS ); + if( params == null && macSubtype != null ) + { + params = new COSDictionary(); + getCOSObject().setItem( COSName.PARAMS, params ); + } + if( params != null ) + { + params.setEmbeddedString( "Mac", "Subtype", macSubtype ); + } + } + + /** + * Get the mac Creator. + * + * @return The mac Creator. + */ + public String getMacCreator() + { + String retval = null; + COSDictionary params = (COSDictionary)getCOSObject().getDictionaryObject( COSName.PARAMS ); + if( params != null ) + { + retval = params.getEmbeddedString( "Mac", "Creator" ); + } + return retval; + } + + /** + * Set the mac Creator. + * + * @param macCreator The mac Creator. + */ + public void setMacCreator( String macCreator ) + { + COSDictionary params = (COSDictionary)getCOSObject().getDictionaryObject( COSName.PARAMS ); + if( params == null && macCreator != null ) + { + params = new COSDictionary(); + getCOSObject().setItem( COSName.PARAMS, params ); + } + if( params != null ) + { + params.setEmbeddedString( "Mac", "Creator", macCreator ); + } + } + + /** + * Get the mac ResFork. + * + * @return The mac ResFork. + */ + public String getMacResFork() + { + String retval = null; + COSDictionary params = (COSDictionary)getCOSObject().getDictionaryObject( COSName.PARAMS ); + if( params != null ) + { + retval = params.getEmbeddedString( "Mac", "ResFork" ); + } + return retval; + } + + /** + * Set the mac ResFork. + * + * @param macResFork The mac ResFork. + */ + public void setMacResFork( String macResFork ) + { + COSDictionary params = (COSDictionary)getCOSObject().getDictionaryObject( COSName.PARAMS ); + if( params == null && macResFork != null ) + { + params = new COSDictionary(); + getCOSObject().setItem( COSName.PARAMS, params ); + } + if( params != null ) + { + params.setEmbeddedString( "Mac", "ResFork", macResFork); + } + } + + + +} diff --git a/src/org/pdfbox/pdmodel/common/filespecification/PDFileSpecification.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDFileSpecification.java similarity index 88% rename from src/org/pdfbox/pdmodel/common/filespecification/PDFileSpecification.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDFileSpecification.java index cdc50d52707..efb3ff5340c 100644 --- a/src/org/pdfbox/pdmodel/common/filespecification/PDFileSpecification.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDFileSpecification.java @@ -14,21 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.common.filespecification; +package org.apache.pdfbox.pdmodel.common.filespecification; import java.io.IOException; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; -import org.pdfbox.cos.COSString; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSString; -import org.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * This represents a file specification. * - * @author Ben Litchfield - * @version $Revision: 1.4 $ + * @author Ben Litchfield */ public abstract class PDFileSpecification implements COSObjectable { diff --git a/src/org/pdfbox/pdmodel/common/filespecification/PDSimpleFileSpecification.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDSimpleFileSpecification.java similarity index 89% rename from src/org/pdfbox/pdmodel/common/filespecification/PDSimpleFileSpecification.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDSimpleFileSpecification.java index 1d3d378e7cc..18830d214ae 100644 --- a/src/org/pdfbox/pdmodel/common/filespecification/PDSimpleFileSpecification.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDSimpleFileSpecification.java @@ -14,16 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.common.filespecification; +package org.apache.pdfbox.pdmodel.common.filespecification; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSString; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSString; /** * A file specification that is just a string. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDSimpleFileSpecification extends PDFileSpecification { @@ -53,6 +52,7 @@ public PDSimpleFileSpecification( COSString fileName ) * * @return The file name. */ + @Override public String getFile() { return file.getString(); @@ -63,6 +63,7 @@ public String getFile() * * @param fileName The name of the file. */ + @Override public void setFile( String fileName ) { file = new COSString( fileName ); @@ -73,6 +74,7 @@ public void setFile( String fileName ) * * @return The cos object that matches this Java object. */ + @Override public COSBase getCOSObject() { return file; diff --git a/src/org/pdfbox/pdmodel/common/filespecification/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/common/filespecification/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java new file mode 100644 index 00000000000..02e220a3d67 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunction.java @@ -0,0 +1,354 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * This class represents a function in a PDF document. + * + * @author Ben Litchfield + * + */ +public abstract class PDFunction implements COSObjectable +{ + + private PDStream functionStream = null; + private COSDictionary functionDictionary = null; + private COSArray domain = null; + private COSArray range = null; + private int numberOfInputValues = -1; + private int numberOfOutputValues = -1; + + /** + * Constructor. + * + * @param function The function stream. + * + */ + public PDFunction( COSBase function ) + { + if (function instanceof COSStream) + { + functionStream = new PDStream( (COSStream)function ); + functionStream.getCOSObject().setItem( COSName.TYPE, COSName.FUNCTION ); + } + else if (function instanceof COSDictionary) + { + functionDictionary = (COSDictionary)function; + } + } + + /** + * Returns the function type. + * + * Possible values are: + * + * 0 - Sampled function + * 2 - Exponential interpolation function + * 3 - Stitching function + * 4 - PostScript calculator function + * + * @return the function type. + */ + public abstract int getFunctionType(); + + /** + * Returns the stream. + * @return The stream for this object. + */ + @Override + public COSDictionary getCOSObject() + { + if (functionStream != null) + { + return functionStream.getCOSObject(); + } + else + { + return functionDictionary; + } + } + + /** + * Returns the underlying PDStream. + * @return The stream. + */ + protected PDStream getPDStream() + { + return functionStream; + } + /** + * Create the correct PD Model function based on the COS base function. + * + * @param function The COS function dictionary. + * + * @return The PDModel Function object. + * + * @throws IOException If we are unable to create the PDFunction object. + */ + public static PDFunction create( COSBase function ) throws IOException + { + if (function == COSName.IDENTITY) + { + return new PDFunctionTypeIdentity(null); + } + + COSBase base = function; + if (function instanceof COSObject) + { + base = ((COSObject) function).getObject(); + } + if (!(base instanceof COSDictionary)) + { + throw new IOException("Error: Function must be a Dictionary, but is " + + base.getClass().getSimpleName()); + } + COSDictionary functionDictionary = (COSDictionary) base; + int functionType = functionDictionary.getInt(COSName.FUNCTION_TYPE); + switch (functionType) + { + case 0: + return new PDFunctionType0(functionDictionary); + case 2: + return new PDFunctionType2(functionDictionary); + case 3: + return new PDFunctionType3(functionDictionary); + case 4: + return new PDFunctionType4(functionDictionary); + default: + throw new IOException("Error: Unknown function type " + functionType); + } + } + + /** + * This will get the number of output parameters that + * have a range specified. A range for output parameters + * is optional so this may return zero for a function + * that does have output parameters, this will simply return the + * number that have the range specified. + * + * @return The number of output parameters that have a range + * specified. + */ + public int getNumberOfOutputParameters() + { + if (numberOfOutputValues == -1) + { + COSArray rangeValues = getRangeValues(); + numberOfOutputValues = rangeValues.size() / 2; + } + return numberOfOutputValues; + } + + /** + * This will get the range for a certain output parameters. This is will never + * return null. If it is not present then the range 0 to 0 will + * be returned. + * + * @param n The output parameter number to get the range for. + * + * @return The range for this component. + */ + public PDRange getRangeForOutput(int n) + { + COSArray rangeValues = getRangeValues(); + return new PDRange( rangeValues, n ); + } + + /** + * This will set the range values. + * + * @param rangeValues The new range values. + */ + public void setRangeValues(COSArray rangeValues) + { + range = rangeValues; + getCOSObject().setItem(COSName.RANGE, rangeValues); + } + + /** + * This will get the number of input parameters that + * have a domain specified. + * + * @return The number of input parameters that have a domain + * specified. + */ + public int getNumberOfInputParameters() + { + if (numberOfInputValues == -1) + { + COSArray array = getDomainValues(); + numberOfInputValues = array.size() / 2; + } + return numberOfInputValues; + } + + /** + * This will get the range for a certain input parameter. This is will never + * return null. If it is not present then the range 0 to 0 will + * be returned. + * + * @param n The parameter number to get the domain for. + * + * @return The domain range for this component. + */ + public PDRange getDomainForInput(int n) + { + COSArray domainValues = getDomainValues(); + return new PDRange( domainValues, n ); + } + + /** + * This will set the domain values. + * + * @param domainValues The new domain values. + */ + public void setDomainValues(COSArray domainValues) + { + domain = domainValues; + getCOSObject().setItem(COSName.DOMAIN, domainValues); + } + + /** + * Evaluates the function at the given input. + * ReturnValue = f(input) + * + * @param input The array of input values for the function. + * In many cases will be an array of a single value, but not always. + * + * @return The of outputs the function returns based on those inputs. + * In many cases will be an array of a single value, but not always. + * + * @throws IOException an IOExcpetion is thrown if something went wrong processing the function. + */ + public abstract float[] eval(float[] input) throws IOException; + + /** + * Returns all ranges for the output values as COSArray . + * Required for type 0 and type 4 functions + * @return the ranges array. + */ + protected COSArray getRangeValues() + { + if (range == null) + { + range = (COSArray) getCOSObject().getDictionaryObject(COSName.RANGE); + } + return range; + } + + /** + * Returns all domains for the input values as COSArray. + * Required for all function types. + * @return the domains array. + */ + private COSArray getDomainValues() + { + if (domain == null) + { + domain = (COSArray) getCOSObject().getDictionaryObject(COSName.DOMAIN); + } + return domain; + } + + /** + * Clip the given input values to the ranges. + * + * @param inputValues the input values + * @return the clipped values + */ + protected float[] clipToRange(float[] inputValues) + { + COSArray rangesArray = getRangeValues(); + float[] result; + if (rangesArray != null) + { + float[] rangeValues = rangesArray.toFloatArray(); + int numberOfRanges = rangeValues.length/2; + result = new float[numberOfRanges]; + for (int i=0; i rangeMax) + { + return rangeMax; + } + return x; + } + + /** + * For a given value of x, interpolate calculates the y value + * on the line defined by the two points (xRangeMin , xRangeMax ) + * and (yRangeMin , yRangeMax ). + * + * @param x the to be interpolated value. + * @param xRangeMin the min value of the x range + * @param xRangeMax the max value of the x range + * @param yRangeMin the min value of the y range + * @param yRangeMax the max value of the y range + * @return the interpolated y value + */ + protected float interpolate(float x, float xRangeMin, float xRangeMax, float yRangeMin, float yRangeMax) + { + return yRangeMin + ((x - xRangeMin) * (yRangeMax - yRangeMin)/(xRangeMax - xRangeMin)); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "FunctionType" + getFunctionType(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java new file mode 100644 index 00000000000..9cc51e48c51 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java @@ -0,0 +1,463 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function; + +import java.io.IOException; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRange; + +/** + * This class represents a type 0 function in a PDF document. + * + * @author Ben Litchfield + * @author Tilman Hausherr + * + */ +public class PDFunctionType0 extends PDFunction +{ + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDFunctionType0.class); + + /** + * An array of 2 x m numbers specifying the linear mapping of input values + * into the domain of the function's sample table. Default value: [ 0 (Size0 + * - 1) 0 (Size1 - 1) ...]. + */ + private COSArray encode = null; + /** + * An array of 2 x n numbers specifying the linear mapping of sample values + * into the range appropriate for the function's output values. Default + * value: same as the value of Range + */ + private COSArray decode = null; + /** + * An array of m positive integers specifying the number of samples in each + * input dimension of the sample table. + */ + private COSArray size = null; + /** + * The samples of the function. + */ + private int[][] samples = null; + + /** + * Constructor. + * + * @param function The function. + */ + public PDFunctionType0(COSBase function) + { + super(function); + } + + /** + * {@inheritDoc} + */ + @Override + public int getFunctionType() + { + return 0; + } + + /** + * The "Size" entry, which is the number of samples in each input dimension + * of the sample table. + * + * @return A List of java.lang.Integer objects. + */ + public COSArray getSize() + { + if (size == null) + { + size = (COSArray) getCOSObject().getDictionaryObject(COSName.SIZE); + } + return size; + } + + /** + * Get all sample values of this function. + * + * @return an array with all samples. + */ + private int[][] getSamples() + { + if (samples == null) + { + int arraySize = 1; + int numberOfInputValues = getNumberOfInputParameters(); + int numberOfOutputValues = getNumberOfOutputParameters(); + COSArray sizes = getSize(); + for (int i = 0; i < numberOfInputValues; i++) + { + arraySize *= sizes.getInt(i); + } + samples = new int[arraySize][numberOfOutputValues]; + int bitsPerSample = getBitsPerSample(); + int index = 0; + try + { + // PDF spec 1.7 p.171: + // Each sample value is represented as a sequence of BitsPerSample bits. + // Successive values are adjacent in the bit stream; there is no padding at byte boundaries. + try (ImageInputStream mciis = new MemoryCacheImageInputStream(getPDStream().createInputStream())) + { + for (int i = 0; i < arraySize; i++) + { + for (int k = 0; k < numberOfOutputValues; k++) + { + // TODO will this cast work properly for 32 bitsPerSample or should we use long[]? + samples[index][k] = (int) mciis.readBits(bitsPerSample); + } + index++; + } + } + } + catch (IOException exception) + { + LOG.error("IOException while reading the sample values of this function.", exception); + } + } + return samples; + } + + /** + * Get the number of bits that the output value will take up. + * + * Valid values are 1,2,4,8,12,16,24,32. + * + * @return Number of bits for each output value. + */ + public int getBitsPerSample() + { + return getCOSObject().getInt(COSName.BITS_PER_SAMPLE); + } + + /** + * Get the order of interpolation between samples. Valid values are 1 and 3, + * specifying linear and cubic spline interpolation, respectively. Default + * is 1. See p.170 in PDF spec 1.7. + * + * @return order of interpolation. + */ + public int getOrder() + { + return getCOSObject().getInt(COSName.ORDER, 1); + } + + /** + * Set the number of bits that the output value will take up. Valid values + * are 1,2,4,8,12,16,24,32. + * + * @param bps The number of bits for each output value. + */ + public void setBitsPerSample(int bps) + { + getCOSObject().setInt(COSName.BITS_PER_SAMPLE, bps); + } + + /** + * Returns all encode values as COSArray. + * + * @return the encode array. + */ + private COSArray getEncodeValues() + { + if (encode == null) + { + encode = (COSArray) getCOSObject().getDictionaryObject(COSName.ENCODE); + // the default value is [0 (size[0]-1) 0 (size[1]-1) ...] + if (encode == null) + { + encode = new COSArray(); + COSArray sizeValues = getSize(); + int sizeValuesSize = sizeValues.size(); + for (int i = 0; i < sizeValuesSize; i++) + { + encode.add(COSInteger.ZERO); + encode.add(COSInteger.get(sizeValues.getInt(i) - 1)); + } + } + } + return encode; + } + + /** + * Returns all decode values as COSArray. + * + * @return the decode array. + */ + private COSArray getDecodeValues() + { + if (decode == null) + { + decode = (COSArray) getCOSObject().getDictionaryObject(COSName.DECODE); + // if decode is null, the default values are the range values + if (decode == null) + { + decode = getRangeValues(); + } + } + return decode; + } + + /** + * Get the encode for the input parameter. + * + * @param paramNum The function parameter number. + * + * @return The encode parameter range or null if none is set. + */ + public PDRange getEncodeForParameter(int paramNum) + { + PDRange retval = null; + COSArray encodeValues = getEncodeValues(); + if (encodeValues != null && encodeValues.size() >= paramNum * 2 + 1) + { + retval = new PDRange(encodeValues, paramNum); + } + return retval; + } + + /** + * This will set the encode values. + * + * @param encodeValues The new encode values. + */ + public void setEncodeValues(COSArray encodeValues) + { + encode = encodeValues; + getCOSObject().setItem(COSName.ENCODE, encodeValues); + } + + /** + * Get the decode for the input parameter. + * + * @param paramNum The function parameter number. + * + * @return The decode parameter range or null if none is set. + */ + public PDRange getDecodeForParameter(int paramNum) + { + PDRange retval = null; + COSArray decodeValues = getDecodeValues(); + if (decodeValues != null && decodeValues.size() >= paramNum * 2 + 1) + { + retval = new PDRange(decodeValues, paramNum); + } + return retval; + } + + /** + * This will set the decode values. + * + * @param decodeValues The new decode values. + */ + public void setDecodeValues(COSArray decodeValues) + { + decode = decodeValues; + getCOSObject().setItem(COSName.DECODE, decodeValues); + } + + /** + * calculate array index (structure described in p.171 PDF spec 1.7) in + * multiple dimensions. + * + * @param vector with coordinates + * @return index in flat array + */ + private int calcSampleIndex(int[] vector) + { + // inspiration: http://stackoverflow.com/a/12113479/535646 + // but used in reverse + float[] sizeValues = getSize().toFloatArray(); + int index = 0; + int sizeProduct = 1; + int dimension = vector.length; + for (int i = dimension - 2; i >= 0; --i) + { + sizeProduct *= sizeValues[i]; + } + for (int i = dimension - 1; i >= 0; --i) + { + index += sizeProduct * vector[i]; + if (i - 1 >= 0) + { + sizeProduct /= sizeValues[i - 1]; + } + } + return index; + } + + /** + * Inner class do to an interpolation in the Nth dimension by comparing the + * content size of N-1 dimensional objects. This is done with the help of + * recursive calls. To understand the algorithm without recursion, here is a + * bilinear + * interpolation and here's a trilinear + * interpolation (external links). + */ + private class Rinterpol + { + // coordinate that is to be interpolated + private final float[] in; + // coordinate of the "ceil" point + private final int[] inPrev; + // coordinate of the "floor" point + private final int[] inNext; + private final int numberOfInputValues; + private final int numberOfOutputValues = getNumberOfOutputParameters(); + + /** + * Constructor. + * + * @param input the input coordinates + * @param inputPrev coordinate of the "ceil" point + * @param inputNext coordinate of the "floor" point + * + */ + Rinterpol(float[] input, int[] inputPrev, int[] inputNext) + { + in = input; + inPrev = inputPrev; + inNext = inputNext; + numberOfInputValues = input.length; + } + + /** + * Calculate the interpolation. + * + * @return interpolated result sample + */ + float[] rinterpolate() + { + return rinterpol(new int[numberOfInputValues], 0); + } + + /** + * Do a linear interpolation if the two coordinates can be known, or + * call itself recursively twice. + * + * @param coord coord partially set coordinate (not set from step + * upwards); gets fully filled in the last call ("leaf"), where it is + * used to get the correct sample + * @param step between 0 (first call) and dimension - 1 + * @return interpolated result sample + */ + private float[] rinterpol(int[] coord, int step) + { + float[] resultSample = new float[numberOfOutputValues]; + if (step == in.length - 1) + { + // leaf + if (inPrev[step] == inNext[step]) + { + coord[step] = inPrev[step]; + int[] tmpSample = getSamples()[calcSampleIndex(coord)]; + for (int i = 0; i < numberOfOutputValues; ++i) + { + resultSample[i] = tmpSample[i]; + } + return resultSample; + } + coord[step] = inPrev[step]; + int[] sample1 = getSamples()[calcSampleIndex(coord)]; + coord[step] = inNext[step]; + int[] sample2 = getSamples()[calcSampleIndex(coord)]; + for (int i = 0; i < numberOfOutputValues; ++i) + { + resultSample[i] = interpolate(in[step], inPrev[step], inNext[step], sample1[i], sample2[i]); + } + return resultSample; + } + else + { + // branch + if (inPrev[step] == inNext[step]) + { + coord[step] = inPrev[step]; + return rinterpol(coord, step + 1); + } + coord[step] = inPrev[step]; + float[] sample1 = rinterpol(coord, step + 1); + coord[step] = inNext[step]; + float[] sample2 = rinterpol(coord, step + 1); + for (int i = 0; i < numberOfOutputValues; ++i) + { + resultSample[i] = interpolate(in[step], inPrev[step], inNext[step], sample1[i], sample2[i]); + } + return resultSample; + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public float[] eval(float[] input) throws IOException + { + //This involves linear interpolation based on a set of sample points. + //Theoretically it's not that difficult ... see section 3.9.1 of the PDF Reference. + + float[] sizeValues = getSize().toFloatArray(); + int bitsPerSample = getBitsPerSample(); + float maxSample = (float) (Math.pow(2, bitsPerSample) - 1.0); + int numberOfInputValues = input.length; + int numberOfOutputValues = getNumberOfOutputParameters(); + + int[] inputPrev = new int[numberOfInputValues]; + int[] inputNext = new int[numberOfInputValues]; + input = input.clone(); // PDFBOX-4461 + + for (int i = 0; i < numberOfInputValues; i++) + { + PDRange domain = getDomainForInput(i); + PDRange encodeValues = getEncodeForParameter(i); + input[i] = clipToRange(input[i], domain.getMin(), domain.getMax()); + input[i] = interpolate(input[i], domain.getMin(), domain.getMax(), + encodeValues.getMin(), encodeValues.getMax()); + input[i] = clipToRange(input[i], 0, sizeValues[i] - 1); + inputPrev[i] = (int) Math.floor(input[i]); + inputNext[i] = (int) Math.ceil(input[i]); + } + + float[] outputValues = new Rinterpol(input, inputPrev, inputNext).rinterpolate(); + + for (int i = 0; i < numberOfOutputValues; i++) + { + PDRange range = getRangeForOutput(i); + PDRange decodeValues = getDecodeForParameter(i); + outputValues[i] = interpolate(outputValues[i], 0, maxSample, decodeValues.getMin(), decodeValues.getMax()); + outputValues[i] = clipToRange(outputValues[i], range.getMin(), range.getMax()); + } + + return outputValues; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType2.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType2.java new file mode 100644 index 00000000000..f01a15c0192 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType2.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import java.io.IOException; + +/** + * This class represents a Type 2 (exponential interpolation) function in a PDF + * document. + * + * @author Ben Litchfield + */ +public class PDFunctionType2 extends PDFunction +{ + + /** + * The C0 values of the exponential function. + */ + private final COSArray c0; + /** + * The C1 values of the exponential function. + */ + private final COSArray c1; + /** + * The exponent value of the exponential function. + */ + private final float exponent; + + /** + * Constructor. + * + * @param function The function. + */ + public PDFunctionType2(COSBase function) + { + super(function); + + if (getCOSObject().getDictionaryObject(COSName.C0) instanceof COSArray) + { + c0 = (COSArray) getCOSObject().getDictionaryObject(COSName.C0); + } + else + { + c0 = new COSArray(); + } + if (c0.size() == 0) + { + c0.add(new COSFloat(0)); + } + + if (getCOSObject().getDictionaryObject(COSName.C1) instanceof COSArray) + { + c1 = (COSArray) getCOSObject().getDictionaryObject(COSName.C1); + } + else + { + c1 = new COSArray(); + } + if (c1.size() == 0) + { + c1.add(new COSFloat(1)); + } + + exponent = getCOSObject().getFloat(COSName.N); + } + + /** + * {@inheritDoc} + */ + @Override + public int getFunctionType() + { + return 2; + } + + /** + * Performs exponential interpolation + * + * {@inheritDoc} + */ + @Override + public float[] eval(float[] input) throws IOException + { + // exponential interpolation + float xToN = (float) Math.pow(input[0], exponent); // x^exponent + + float[] result = new float[Math.min(c0.size(),c1.size())]; + for (int j = 0; j < result.length; j++) + { + float c0j = ((COSNumber) c0.get(j)).floatValue(); + float c1j = ((COSNumber) c1.get(j)).floatValue(); + result[j] = c0j + xToN * (c1j - c0j); + } + + return clipToRange(result); + } + + /** + * Returns the C0 values of the function, 0 if empty. + * + * @return a COSArray with the C0 values + */ + public COSArray getC0() + { + return c0; + } + + /** + * Returns the C1 values of the function, 1 if empty. + * + * @return a COSArray with the C1 values + */ + public COSArray getC1() + { + return c1; + } + + /** + * Returns the exponent of the function. + * + * @return the float value of the exponent + */ + public float getN() + { + return exponent; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "FunctionType2{" + + "C0: " + getC0() + " " + + "C1: " + getC1() + " " + + "N: " + getN() + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType3.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType3.java new file mode 100644 index 00000000000..f5c1287182e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType3.java @@ -0,0 +1,183 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRange; + +import java.io.IOException; + +/** + * This class represents a Type 3 (stitching) function in a PDF document. + * + * @author Ben Litchfield + */ +public class PDFunctionType3 extends PDFunction +{ + private COSArray functions = null; + private COSArray encode = null; + private COSArray bounds = null; + private PDFunction[] functionsArray = null; + private float[] boundsValues = null; + + /** + * Constructor. + * + * @param functionStream The function . + */ + public PDFunctionType3(COSBase functionStream) + { + super( functionStream ); + } + + /** + * {@inheritDoc} + */ + @Override + public int getFunctionType() + { + return 3; + } + + /** + * {@inheritDoc} + */ + @Override + public float[] eval(float[] input) throws IOException + { + //This function is known as a "stitching" function. Based on the input, it decides which child function to call. + // All functions in the array are 1-value-input functions + //See PDF Reference section 3.9.3. + PDFunction function = null; + float x = input[0]; + PDRange domain = getDomainForInput(0); + // clip input value to domain + x = clipToRange(x, domain.getMin(), domain.getMax()); + + if (functionsArray == null) + { + COSArray ar = getFunctions(); + functionsArray = new PDFunction[ar.size()]; + for (int i = 0; i < ar.size(); ++i) + { + functionsArray[i] = PDFunction.create(ar.getObject(i)); + } + } + + if (functionsArray.length == 1) + { + // This doesn't make sense but it may happen ... + function = functionsArray[0]; + PDRange encRange = getEncodeForParameter(0); + x = interpolate(x, domain.getMin(), domain.getMax(), encRange.getMin(), encRange.getMax()); + } + else + { + if (boundsValues == null) + { + boundsValues = getBounds().toFloatArray(); + } + int boundsSize = boundsValues.length; + // create a combined array containing the domain and the bounds values + // domain.min, bounds[0], bounds[1], ...., bounds[boundsSize-1], domain.max + float[] partitionValues = new float[boundsSize+2]; + int partitionValuesSize = partitionValues.length; + partitionValues[0] = domain.getMin(); + partitionValues[partitionValuesSize-1] = domain.getMax(); + System.arraycopy(boundsValues, 0, partitionValues, 1, boundsSize); + // find the partition + for (int i=0; i < partitionValuesSize-1; i++) + { + if ( x >= partitionValues[i] && + (x < partitionValues[i+1] || (i == partitionValuesSize - 2 && Float.compare(x,partitionValues[i+1]) == 0))) + { + function = functionsArray[i]; + PDRange encRange = getEncodeForParameter(i); + x = interpolate(x, partitionValues[i], partitionValues[i+1], encRange.getMin(), encRange.getMax()); + break; + } + } + if (function == null) + { + throw new IOException("partition not found in type 3 function"); + } + } + float[] functionValues = new float[]{x}; + // calculate the output values using the chosen function + float[] functionResult = function.eval(functionValues); + // clip to range if available + return clipToRange(functionResult); + } + + /** + * Returns all functions values as COSArray. + * + * @return the functions array. + */ + public COSArray getFunctions() + { + if (functions == null) + { + functions = (COSArray)(getCOSObject().getDictionaryObject( COSName.FUNCTIONS )); + } + return functions; + } + + /** + * Returns all bounds values as COSArray. + * + * @return the bounds array. + */ + public COSArray getBounds() + { + if (bounds == null) + { + bounds = (COSArray)(getCOSObject().getDictionaryObject( COSName.BOUNDS )); + } + return bounds; + } + + /** + * Returns all encode values as COSArray. + * + * @return the encode array. + */ + public COSArray getEncode() + { + if (encode == null) + { + encode = (COSArray)(getCOSObject().getDictionaryObject( COSName.ENCODE )); + } + return encode; + } + + /** + * Get the encode for the input parameter. + * + * @param n The function parameter number. + * + * @return The encode parameter range or null if none is set. + */ + private PDRange getEncodeForParameter(int n) + { + COSArray encodeValues = getEncode(); + return new PDRange( encodeValues, n ); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java new file mode 100644 index 00000000000..37747ca80a7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.pdmodel.common.function.type4.ExecutionContext; +import org.apache.pdfbox.pdmodel.common.function.type4.InstructionSequence; +import org.apache.pdfbox.pdmodel.common.function.type4.InstructionSequenceBuilder; +import org.apache.pdfbox.pdmodel.common.function.type4.Operators; + +import java.io.IOException; + +/** + * This class represents a Type 4 (PostScript calculator) function in a PDF document. + *

+ * See section 3.9.4 of the PDF 1.4 Reference. + * + */ +public class PDFunctionType4 extends PDFunction +{ + + private static final Operators OPERATORS = new Operators(); + + private final InstructionSequence instructions; + + /** + * Constructor. + * + * @param functionStream The function stream. + * @throws IOException if an I/O error occurs while reading the function + */ + public PDFunctionType4(COSBase functionStream) throws IOException + { + super( functionStream ); + byte[] bytes = getPDStream().toByteArray(); + String string = new String(bytes, "ISO-8859-1"); + this.instructions = InstructionSequenceBuilder.parse(string); + } + + /** + * {@inheritDoc} + */ + @Override + public int getFunctionType() + { + return 4; + } + + /** + * {@inheritDoc} + */ + @Override + public float[] eval(float[] input) throws IOException + { + //Setup the input values + ExecutionContext context = new ExecutionContext(OPERATORS); + for (int i = 0; i < input.length; i++) + { + PDRange domain = getDomainForInput(i); + float value = clipToRange(input[i], domain.getMin(), domain.getMax()); + context.getStack().push(value); + } + + //Execute the type 4 function. + instructions.execute(context); + + //Extract the output values + int numberOfOutputValues = getNumberOfOutputParameters(); + int numberOfActualOutputValues = context.getStack().size(); + if (numberOfActualOutputValues < numberOfOutputValues) + { + throw new IllegalStateException("The type 4 function returned " + + numberOfActualOutputValues + + " values but the Range entry indicates that " + + numberOfOutputValues + " values be returned."); + } + float[] outputValues = new float[numberOfOutputValues]; + for (int i = numberOfOutputValues - 1; i >= 0; i--) + { + PDRange range = getRangeForOutput(i); + outputValues[i] = context.popReal(); + outputValues[i] = clipToRange(outputValues[i], range.getMin(), range.getMax()); + } + + //Return the resulting array + return outputValues; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionTypeIdentity.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionTypeIdentity.java new file mode 100644 index 00000000000..4e87742200d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionTypeIdentity.java @@ -0,0 +1,57 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBase; + +/** + * The identity function. + * + * @author Tilman Hausherr + */ +public class PDFunctionTypeIdentity extends PDFunction +{ + + public PDFunctionTypeIdentity(COSBase function) + { + super(null); + } + + @Override + public int getFunctionType() + { + // shouldn't be called + throw new UnsupportedOperationException(); + //TODO this is a violation of the interface segregation principle + } + + @Override + public float[] eval(float[] input) throws IOException + { + return input; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + return "FunctionTypeIdentity"; + } + +} diff --git a/src/org/pdfbox/pdmodel/common/function/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/common/function/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ArithmeticOperators.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ArithmeticOperators.java new file mode 100644 index 00000000000..200e66c11c1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ArithmeticOperators.java @@ -0,0 +1,400 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Stack; + +/** + * Provides the arithmetic operators such as "add" and "sub". + * + */ +class ArithmeticOperators +{ + + /** Implements the "abs" operator. */ + static class Abs implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + if (num instanceof Integer) + { + context.getStack().push(Math.abs(num.intValue())); + } + else + { + context.getStack().push(Math.abs(num.floatValue())); + } + } + + } + + /** Implements the "add" operator. */ + static class Add implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num2 = context.popNumber(); + Number num1 = context.popNumber(); + if (num1 instanceof Integer && num2 instanceof Integer) + { + long sum = num1.longValue() + num2.longValue(); + if (sum < Integer.MIN_VALUE || sum > Integer.MAX_VALUE) + { + context.getStack().push((float) sum); + } + else + { + context.getStack().push((int)sum); + } + } + else + { + float sum = num1.floatValue() + num2.floatValue(); + context.getStack().push(sum); + } + } + + } + + /** Implements the "atan" operator. */ + static class Atan implements Operator + { + @Override + public void execute(ExecutionContext context) + { + float den = context.popReal(); + float num = context.popReal(); + float atan = (float)Math.atan2(num, den); + atan = (float)Math.toDegrees(atan) % 360; + if (atan < 0) + { + atan = atan + 360; + } + context.getStack().push(atan); + } + + } + + /** Implements the "ceiling" operator. */ + static class Ceiling implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + if (num instanceof Integer) + { + context.getStack().push(num); + } + else + { + context.getStack().push((float)Math.ceil(num.doubleValue())); + } + } + + } + + /** Implements the "cos" operator. */ + static class Cos implements Operator + { + @Override + public void execute(ExecutionContext context) + { + float angle = context.popReal(); + float cos = (float)Math.cos(Math.toRadians(angle)); + context.getStack().push(cos); + } + + } + + /** Implements the "cvi" operator. */ + static class Cvi implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + context.getStack().push(num.intValue()); + } + + } + + /** Implements the "cvr" operator. */ + static class Cvr implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + context.getStack().push(num.floatValue()); + } + + } + + /** Implements the "div" operator. */ + static class Div implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num2 = context.popNumber(); + Number num1 = context.popNumber(); + context.getStack().push(num1.floatValue() / num2.floatValue()); + } + + } + + /** Implements the "exp" operator. */ + static class Exp implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number exp = context.popNumber(); + Number base = context.popNumber(); + double value = Math.pow(base.doubleValue(), exp.doubleValue()); + context.getStack().push((float)value); + } + + } + + /** Implements the "floor" operator. */ + static class Floor implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + if (num instanceof Integer) + { + context.getStack().push(num); + } + else + { + context.getStack().push((float)Math.floor(num.doubleValue())); + } + } + + } + + /** Implements the "idiv" operator. */ + static class IDiv implements Operator + { + @Override + public void execute(ExecutionContext context) + { + int num2 = context.popInt(); + int num1 = context.popInt(); + context.getStack().push(num1 / num2); + } + + } + + /** Implements the "ln" operator. */ + static class Ln implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + context.getStack().push((float)Math.log(num.doubleValue())); + } + + } + + /** Implements the "log" operator. */ + static class Log implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + context.getStack().push((float)Math.log10(num.doubleValue())); + } + + } + + /** Implements the "mod" operator. */ + static class Mod implements Operator + { + @Override + public void execute(ExecutionContext context) + { + int int2 = context.popInt(); + int int1 = context.popInt(); + context.getStack().push(int1 % int2); + } + + } + + /** Implements the "mul" operator. */ + static class Mul implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num2 = context.popNumber(); + Number num1 = context.popNumber(); + if (num1 instanceof Integer && num2 instanceof Integer) + { + long result = num1.longValue() * num2.longValue(); + if (result >= Integer.MIN_VALUE && result <= Integer.MAX_VALUE) + { + context.getStack().push((int)result); + } + else + { + context.getStack().push((float)result); + } + } + else + { + double result = num1.doubleValue() * num2.doubleValue(); + context.getStack().push((float)result); + } + } + + } + + /** Implements the "neg" operator. */ + static class Neg implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + if (num instanceof Integer) + { + int v = num.intValue(); + if (v == Integer.MIN_VALUE) + { + context.getStack().push(-num.floatValue()); + } + else + { + context.getStack().push(-num.intValue()); + } + } + else + { + context.getStack().push(-num.floatValue()); + } + } + + } + + /** Implements the "round" operator. */ + static class Round implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + if (num instanceof Integer) + { + context.getStack().push(num.intValue()); + } + else + { + context.getStack().push((float)Math.round(num.doubleValue())); + } + } + + } + + /** Implements the "sin" operator. */ + static class Sin implements Operator + { + @Override + public void execute(ExecutionContext context) + { + float angle = context.popReal(); + float sin = (float)Math.sin(Math.toRadians(angle)); + context.getStack().push(sin); + } + + } + + /** Implements the "sqrt" operator. */ + static class Sqrt implements Operator + { + @Override + public void execute(ExecutionContext context) + { + float num = context.popReal(); + if (num < 0) + { + throw new IllegalArgumentException("argument must be nonnegative"); + } + context.getStack().push((float)Math.sqrt(num)); + } + + } + + /** Implements the "sub" operator. */ + static class Sub implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + Number num2 = context.popNumber(); + Number num1 = context.popNumber(); + if (num1 instanceof Integer && num2 instanceof Integer) + { + long result = num1.longValue() - num2.longValue(); + if (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE) + { + stack.push((float) result); + } + else + { + stack.push((int)result); + } + } + else + { + float result = num1.floatValue() - num2.floatValue(); + stack.push(result); + } + } + + } + + /** Implements the "truncate" operator. */ + static class Truncate implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Number num = context.popNumber(); + if (num instanceof Integer) + { + context.getStack().push(num.intValue()); + } + else + { + context.getStack().push((float)(int)(num.floatValue())); + } + } + + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/BitwiseOperators.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/BitwiseOperators.java new file mode 100644 index 00000000000..f1eb3ecfe2f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/BitwiseOperators.java @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Stack; + +/** + * Provides the bitwise operators such as "and" and "xor". + * + */ +class BitwiseOperators +{ + + /** Abstract base class for logical operators. */ + private abstract static class AbstractLogicalOperator implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + Object op2 = stack.pop(); + Object op1 = stack.pop(); + if (op1 instanceof Boolean && op2 instanceof Boolean) + { + boolean bool1 = (Boolean)op1; + boolean bool2 = (Boolean)op2; + boolean result = applyForBoolean(bool1, bool2); + stack.push(result); + } + else if (op1 instanceof Integer && op2 instanceof Integer) + { + int int1 = (Integer)op1; + int int2 = (Integer)op2; + int result = applyforInteger(int1, int2); + stack.push(result); + } + else + { + throw new ClassCastException("Operands must be bool/bool or int/int"); + } + } + + + protected abstract boolean applyForBoolean(boolean bool1, boolean bool2); + + protected abstract int applyforInteger(int int1, int int2); + + } + + /** Implements the "and" operator. */ + static class And extends AbstractLogicalOperator + { + + @Override + protected boolean applyForBoolean(boolean bool1, boolean bool2) + { + return bool1 & bool2; + } + + @Override + protected int applyforInteger(int int1, int int2) + { + return int1 & int2; + } + } + + /** Implements the "bitshift" operator. */ + static class Bitshift implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + int shift = (Integer)stack.pop(); + int int1 = (Integer)stack.pop(); + if (shift < 0) + { + int result = int1 >> Math.abs(shift); + stack.push(result); + } + else + { + int result = int1 << shift; + stack.push(result); + } + } + + } + + /** Implements the "false" operator. */ + static class False implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + stack.push(Boolean.FALSE); + } + + } + + /** Implements the "not" operator. */ + static class Not implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + Object op1 = stack.pop(); + if (op1 instanceof Boolean) + { + boolean bool1 = (Boolean)op1; + boolean result = !bool1; + stack.push(result); + } + else if (op1 instanceof Integer) + { + int int1 = (Integer)op1; + int result = -int1; + stack.push(result); + } + else + { + throw new ClassCastException("Operand must be bool or int"); + } + } + + } + + /** Implements the "or" operator. */ + static class Or extends AbstractLogicalOperator + { + + @Override + protected boolean applyForBoolean(boolean bool1, boolean bool2) + { + return bool1 | bool2; + } + + @Override + protected int applyforInteger(int int1, int int2) + { + return int1 | int2; + } + + } + + /** Implements the "true" operator. */ + static class True implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + stack.push(Boolean.TRUE); + } + + } + + /** Implements the "xor" operator. */ + static class Xor extends AbstractLogicalOperator + { + + @Override + protected boolean applyForBoolean(boolean bool1, boolean bool2) + { + return bool1 ^ bool2; + } + + @Override + protected int applyforInteger(int int1, int int2) + { + return int1 ^ int2; + } + + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ConditionalOperators.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ConditionalOperators.java new file mode 100644 index 00000000000..d33b97ff575 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ConditionalOperators.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Stack; + +/** + * Provides the conditional operators such as "if" and "ifelse". + * + */ +class ConditionalOperators +{ + + /** Implements the "if" operator. */ + static class If implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + InstructionSequence proc = (InstructionSequence)stack.pop(); + Boolean condition = (Boolean)stack.pop(); + if (condition) + { + proc.execute(context); + } + } + + } + + /** Implements the "ifelse" operator. */ + static class IfElse implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + InstructionSequence proc2 = (InstructionSequence)stack.pop(); + InstructionSequence proc1 = (InstructionSequence)stack.pop(); + Boolean condition = (Boolean)stack.pop(); + if (condition) + { + proc1.execute(context); + } + else + { + proc2.execute(context); + } + } + + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ExecutionContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ExecutionContext.java new file mode 100644 index 00000000000..7da41899e82 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/ExecutionContext.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Stack; + +/** + * Makes up the execution context, holding the available operators and the execution stack. + * + */ +public class ExecutionContext +{ + + private final Operators operators; + private final Stack stack = new Stack<>(); + + /** + * Creates a new execution context. + * @param operatorSet the operator set + */ + public ExecutionContext(Operators operatorSet) + { + this.operators = operatorSet; + } + + /** + * Returns the stack used by this execution context. + * @return the stack + */ + public Stack getStack() + { + return this.stack; + } + + /** + * Returns the operator set used by this execution context. + * @return the operator set + */ + public Operators getOperators() + { + return this.operators; + } + + /** + * Pops a number (int or real) from the stack. If it's neither data type, a + * ClassCastException is thrown. + * @return the number + */ + public Number popNumber() + { + return (Number)stack.pop(); + } + + /** + * Pops a value of type int from the stack. If the value is not of type int, a + * ClassCastException is thrown. + * @return the int value + */ + public int popInt() + { + return ((Integer)stack.pop()); + } + + /** + * Pops a number from the stack and returns it as a real value. If the value is not of a + * numeric type, a ClassCastException is thrown. + * @return the real value + */ + public float popReal() + { + return ((Number)stack.pop()).floatValue(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/InstructionSequence.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/InstructionSequence.java new file mode 100644 index 00000000000..fccccfac1f5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/InstructionSequence.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.List; +import java.util.Stack; + +/** + * Represents an instruction sequence, a combination of values, operands and nested procedures. + * + */ +public class InstructionSequence +{ + + private final List instructions = new java.util.ArrayList<>(); + + /** + * Add a name (ex. an operator) + * @param name the name + */ + public void addName(String name) + { + this.instructions.add(name); + } + + /** + * Adds an int value. + * @param value the value + */ + public void addInteger(int value) + { + this.instructions.add(value); + } + + /** + * Adds a real value. + * @param value the value + */ + public void addReal(float value) + { + this.instructions.add(value); + } + + /** + * Adds a bool value. + * @param value the value + */ + public void addBoolean(boolean value) + { + this.instructions.add(value); + } + + /** + * Adds a proc (sub-sequence of instructions). + * @param child the child proc + */ + public void addProc(InstructionSequence child) + { + this.instructions.add(child); + } + + /** + * Executes the instruction sequence. + * @param context the execution context + */ + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + for (Object o : instructions) + { + if (o instanceof String) + { + String name = (String)o; + Operator cmd = context.getOperators().getOperator(name); + if (cmd != null) + { + cmd.execute(context); + } + else + { + throw new UnsupportedOperationException("Unknown operator or name: " + name); + } + } + else + { + stack.push(o); + } + } + + //Handles top-level procs that simply need to be executed + while (!stack.isEmpty() && stack.peek() instanceof InstructionSequence) + { + InstructionSequence nested = (InstructionSequence)stack.pop(); + nested.execute(context); + } + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/InstructionSequenceBuilder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/InstructionSequenceBuilder.java new file mode 100644 index 00000000000..551aabf954e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/InstructionSequenceBuilder.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Stack; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Basic parser for Type 4 functions which is used to build up instruction sequences. + * + */ +public final class InstructionSequenceBuilder extends Parser.AbstractSyntaxHandler +{ + + private final InstructionSequence mainSequence = new InstructionSequence(); + private final Stack seqStack = new Stack<>(); + + private InstructionSequenceBuilder() + { + this.seqStack.push(this.mainSequence); + } + + /** + * Returns the instruction sequence that has been build from the syntactic elements. + * @return the instruction sequence + */ + public InstructionSequence getInstructionSequence() + { + return this.mainSequence; + } + + /** + * Parses the given text into an instruction sequence representing a Type 4 function + * that can be executed. + * @param text the Type 4 function text + * @return the instruction sequence + */ + public static InstructionSequence parse(CharSequence text) + { + InstructionSequenceBuilder builder = new InstructionSequenceBuilder(); + Parser.parse(text, builder); + return builder.getInstructionSequence(); + } + + private InstructionSequence getCurrentSequence() + { + return this.seqStack.peek(); + } + + private static final Pattern INTEGER_PATTERN = Pattern.compile("[\\+\\-]?\\d+"); + private static final Pattern REAL_PATTERN = Pattern.compile("[\\-]?\\d*\\.\\d*([Ee]\\-?\\d+)?"); + + /** {@inheritDoc} */ + @Override + public void token(CharSequence text) + { + String token = text.toString(); + token(token); + } + + private void token(String token) + { + if ("{".equals(token)) + { + InstructionSequence child = new InstructionSequence(); + getCurrentSequence().addProc(child); + this.seqStack.push(child); + } + else if ("}".equals(token)) + { + this.seqStack.pop(); + } + else + { + Matcher m = INTEGER_PATTERN.matcher(token); + if (m.matches()) + { + getCurrentSequence().addInteger(parseInt(token)); + return; + } + + m = REAL_PATTERN.matcher(token); + if (m.matches()) + { + getCurrentSequence().addReal(parseReal(token)); + return; + } + + //TODO Maybe implement radix numbers, such as 8#1777 or 16#FFFE + + getCurrentSequence().addName(token); + } + } + + /** + * Parses a value of type "int". + * @param token the token to be parsed + * @return the parsed value + */ + public static int parseInt(String token) + { + return Integer.parseInt(token); + } + + /** + * Parses a value of type "real". + * @param token the token to be parsed + * @return the parsed value + */ + public static float parseReal(String token) + { + return Float.parseFloat(token); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Operator.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Operator.java new file mode 100644 index 00000000000..2c0a3fb0292 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Operator.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +/** + * Interface for PostScript operators. + * + */ +public interface Operator +{ + + /** + * Executes the operator. The method can inspect and manipulate the stack. + * @param context the execution context + */ + void execute(ExecutionContext context); + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Operators.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Operators.java new file mode 100644 index 00000000000..fb510ccbd96 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Operators.java @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Map; + +/** + * This class provides all the supported operators. + */ +public class Operators +{ + + //Arithmetic operators + private static final Operator ABS = new ArithmeticOperators.Abs(); + private static final Operator ADD = new ArithmeticOperators.Add(); + private static final Operator ATAN = new ArithmeticOperators.Atan(); + private static final Operator CEILING = new ArithmeticOperators.Ceiling(); + private static final Operator COS = new ArithmeticOperators.Cos(); + private static final Operator CVI = new ArithmeticOperators.Cvi(); + private static final Operator CVR = new ArithmeticOperators.Cvr(); + private static final Operator DIV = new ArithmeticOperators.Div(); + private static final Operator EXP = new ArithmeticOperators.Exp(); + private static final Operator FLOOR = new ArithmeticOperators.Floor(); + private static final Operator IDIV = new ArithmeticOperators.IDiv(); + private static final Operator LN = new ArithmeticOperators.Ln(); + private static final Operator LOG = new ArithmeticOperators.Log(); + private static final Operator MOD = new ArithmeticOperators.Mod(); + private static final Operator MUL = new ArithmeticOperators.Mul(); + private static final Operator NEG = new ArithmeticOperators.Neg(); + private static final Operator ROUND = new ArithmeticOperators.Round(); + private static final Operator SIN = new ArithmeticOperators.Sin(); + private static final Operator SQRT = new ArithmeticOperators.Sqrt(); + private static final Operator SUB = new ArithmeticOperators.Sub(); + private static final Operator TRUNCATE = new ArithmeticOperators.Truncate(); + + //Relational, boolean and bitwise operators + private static final Operator AND = new BitwiseOperators.And(); + private static final Operator BITSHIFT = new BitwiseOperators.Bitshift(); + private static final Operator EQ = new RelationalOperators.Eq(); + private static final Operator FALSE = new BitwiseOperators.False(); + private static final Operator GE = new RelationalOperators.Ge(); + private static final Operator GT = new RelationalOperators.Gt(); + private static final Operator LE = new RelationalOperators.Le(); + private static final Operator LT = new RelationalOperators.Lt(); + private static final Operator NE = new RelationalOperators.Ne(); + private static final Operator NOT = new BitwiseOperators.Not(); + private static final Operator OR = new BitwiseOperators.Or(); + private static final Operator TRUE = new BitwiseOperators.True(); + private static final Operator XOR = new BitwiseOperators.Xor(); + + //Conditional operators + private static final Operator IF = new ConditionalOperators.If(); + private static final Operator IFELSE = new ConditionalOperators.IfElse(); + + //Stack operators + private static final Operator COPY = new StackOperators.Copy(); + private static final Operator DUP = new StackOperators.Dup(); + private static final Operator EXCH = new StackOperators.Exch(); + private static final Operator INDEX = new StackOperators.Index(); + private static final Operator POP = new StackOperators.Pop(); + private static final Operator ROLL = new StackOperators.Roll(); + + private final Map operators = new java.util.HashMap<>(); + + /** + * Creates a new Operators object with the default set of operators. + */ + public Operators() + { + operators.put("add", ADD); + operators.put("abs", ABS); + operators.put("atan", ATAN); + operators.put("ceiling", CEILING); + operators.put("cos", COS); + operators.put("cvi", CVI); + operators.put("cvr", CVR); + operators.put("div", DIV); + operators.put("exp", EXP); + operators.put("floor", FLOOR); + operators.put("idiv", IDIV); + operators.put("ln", LN); + operators.put("log", LOG); + operators.put("mod", MOD); + operators.put("mul", MUL); + operators.put("neg", NEG); + operators.put("round", ROUND); + operators.put("sin", SIN); + operators.put("sqrt", SQRT); + operators.put("sub", SUB); + operators.put("truncate", TRUNCATE); + + operators.put("and", AND); + operators.put("bitshift", BITSHIFT); + operators.put("eq", EQ); + operators.put("false", FALSE); + operators.put("ge", GE); + operators.put("gt", GT); + operators.put("le", LE); + operators.put("lt", LT); + operators.put("ne", NE); + operators.put("not", NOT); + operators.put("or", OR); + operators.put("true", TRUE); + operators.put("xor", XOR); + + operators.put("if", IF); + operators.put("ifelse", IFELSE); + + operators.put("copy", COPY); + operators.put("dup", DUP); + operators.put("exch", EXCH); + operators.put("index", INDEX); + operators.put("pop", POP); + operators.put("roll", ROLL); + } + + /** + * Returns the operator for the given operator name. + * @param operatorName the operator name + * @return the operator (or null if there's no such operator + */ + public Operator getOperator(String operatorName) + { + return this.operators.get(operatorName); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Parser.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Parser.java new file mode 100644 index 00000000000..da828844ca9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/Parser.java @@ -0,0 +1,319 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +/** + * Parser for PDF Type 4 functions. This implements a small subset of the PostScript + * language but is no full PostScript interpreter. + * + */ +public final class Parser +{ + + /** Used to indicate the parsers current state. */ + private enum State + { + NEWLINE, WHITESPACE, COMMENT, TOKEN + } + + private Parser() + { + //nop + } + + /** + * Parses a Type 4 function and sends the syntactic elements to the given + * syntax handler. + * @param input the text source + * @param handler the syntax handler + */ + public static void parse(CharSequence input, SyntaxHandler handler) + { + Tokenizer tokenizer = new Tokenizer(input, handler); + tokenizer.tokenize(); + } + + /** + * This interface defines all possible syntactic elements of a Type 4 function. + * It is called by the parser as the function is interpreted. + */ + public interface SyntaxHandler + { + + /** + * Indicates that a new line starts. + * @param text the new line character (CR, LF, CR/LF or FF) + */ + void newLine(CharSequence text); + + /** + * Called when whitespace characters are encountered. + * @param text the whitespace text + */ + void whitespace(CharSequence text); + + /** + * Called when a token is encountered. No distinction between operators and values + * is done here. + * @param text the token text + */ + void token(CharSequence text); + + /** + * Called for a comment. + * @param text the comment + */ + void comment(CharSequence text); + } + + /** + * Abstract base class for a {@link SyntaxHandler}. + */ + public abstract static class AbstractSyntaxHandler implements SyntaxHandler + { + + /** {@inheritDoc} */ + @Override + public void comment(CharSequence text) + { + //nop + } + + /** {@inheritDoc} */ + @Override + public void newLine(CharSequence text) + { + //nop + } + + /** {@inheritDoc} */ + @Override + public void whitespace(CharSequence text) + { + //nop + } + + } + + /** + * Tokenizer for Type 4 functions. + */ + private static final class Tokenizer + { + + private static final char NUL = '\u0000'; //NUL + private static final char EOT = '\u0004'; //END OF TRANSMISSION + private static final char TAB = '\u0009'; //TAB CHARACTER + private static final char FF = '\u000C'; //FORM FEED + private static final char CR = '\r'; //CARRIAGE RETURN + private static final char LF = '\n'; //LINE FEED + private static final char SPACE = '\u0020'; //SPACE + + private final CharSequence input; + private int index; + private final SyntaxHandler handler; + private State state = State.WHITESPACE; + private final StringBuilder buffer = new StringBuilder(); + + private Tokenizer(CharSequence text, SyntaxHandler syntaxHandler) + { + this.input = text; + this.handler = syntaxHandler; + } + + private boolean hasMore() + { + return index < input.length(); + } + + private char currentChar() + { + return input.charAt(index); + } + + private char nextChar() + { + index++; + if (!hasMore()) + { + return EOT; + } + else + { + return currentChar(); + } + } + + private char peek() + { + if (index < input.length() - 1) + { + return input.charAt(index + 1); + } + else + { + return EOT; + } + } + + private State nextState() + { + char ch = currentChar(); + switch (ch) + { + case CR: + case LF: + case FF: //FF + state = State.NEWLINE; + break; + case NUL: + case TAB: + case SPACE: + state = State.WHITESPACE; + break; + case '%': + state = State.COMMENT; + break; + default: + state = State.TOKEN; + } + return state; + } + + private void tokenize() + { + while (hasMore()) + { + buffer.setLength(0); + nextState(); + switch (state) + { + case NEWLINE: + scanNewLine(); + break; + case WHITESPACE: + scanWhitespace(); + break; + case COMMENT: + scanComment(); + break; + default: + scanToken(); + } + } + } + + private void scanNewLine() + { + assert state == State.NEWLINE; + char ch = currentChar(); + buffer.append(ch); + if (ch == CR && peek() == LF) + { + //CRLF is treated as one newline + buffer.append(nextChar()); + } + handler.newLine(buffer); + nextChar(); + } + + private void scanWhitespace() + { + assert state == State.WHITESPACE; + buffer.append(currentChar()); + loop: + while (hasMore()) + { + char ch = nextChar(); + switch (ch) + { + case NUL: + case TAB: + case SPACE: + buffer.append(ch); + break; + default: + break loop; + } + } + handler.whitespace(buffer); + } + + private void scanComment() + { + assert state == State.COMMENT; + buffer.append(currentChar()); + loop: + while (hasMore()) + { + char ch = nextChar(); + switch (ch) + { + case CR: + case LF: + case FF: + break loop; + default: + buffer.append(ch); + } + } + //EOF reached + handler.comment(buffer); + } + + private void scanToken() + { + assert state == State.TOKEN; + char ch = currentChar(); + buffer.append(ch); + switch (ch) + { + case '{': + case '}': + handler.token(buffer); + nextChar(); + return; + default: + //continue + } + loop: + while (hasMore()) + { + ch = nextChar(); + switch (ch) + { + case NUL: + case TAB: + case SPACE: + case CR: + case LF: + case FF: + case EOT: + case '{': + case '}': + break loop; + default: + buffer.append(ch); + } + } + //EOF reached + handler.token(buffer); + } + + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/RelationalOperators.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/RelationalOperators.java new file mode 100644 index 00000000000..499f87c946e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/RelationalOperators.java @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.Stack; + +/** + * Provides the relational operators such as "eq" and "le". + * + */ +class RelationalOperators +{ + + /** Implements the "eq" operator. */ + static class Eq implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + Object op2 = stack.pop(); + Object op1 = stack.pop(); + boolean result = isEqual(op1, op2); + stack.push(result); + } + + protected boolean isEqual(Object op1, Object op2) + { + boolean result; + if (op1 instanceof Number && op2 instanceof Number) + { + Number num1 = (Number)op1; + Number num2 = (Number)op2; + result = Float.compare(num1.floatValue(),num2.floatValue()) == 0; + } + else + { + result = op1.equals(op2); + } + return result; + } + + } + + /** Abstract base class for number comparison operators. */ + private abstract static class AbstractNumberComparisonOperator implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + Object op2 = stack.pop(); + Object op1 = stack.pop(); + Number num1 = (Number)op1; + Number num2 = (Number)op2; + boolean result = compare(num1, num2); + stack.push(result); + } + + protected abstract boolean compare(Number num1, Number num2); + + } + + /** Implements the "ge" operator. */ + static class Ge extends AbstractNumberComparisonOperator + { + + @Override + protected boolean compare(Number num1, Number num2) + { + return num1.floatValue() >= num2.floatValue(); + } + + } + + /** Implements the "gt" operator. */ + static class Gt extends AbstractNumberComparisonOperator + { + + @Override + protected boolean compare(Number num1, Number num2) + { + return num1.floatValue() > num2.floatValue(); + } + + } + + /** Implements the "le" operator. */ + static class Le extends AbstractNumberComparisonOperator + { + + @Override + protected boolean compare(Number num1, Number num2) + { + return num1.floatValue() <= num2.floatValue(); + } + + } + + /** Implements the "lt" operator. */ + static class Lt extends AbstractNumberComparisonOperator + { + + @Override + protected boolean compare(Number num1, Number num2) + { + return num1.floatValue() < num2.floatValue(); + } + + } + + /** Implements the "ne" operator. */ + static class Ne extends Eq + { + + @Override + protected boolean isEqual(Object op1, Object op2) + { + boolean result = super.isEqual(op1, op2); + return !result; + } + + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/StackOperators.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/StackOperators.java new file mode 100644 index 00000000000..b32c8d6c8af --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/StackOperators.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.common.function.type4; + +import java.util.LinkedList; +import java.util.List; +import java.util.Stack; + +/** + * Provides the stack operators such as "pop" and "dup". + * + */ +class StackOperators +{ + + /** Implements the "copy" operator. */ + static class Copy implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + int n = ((Number)stack.pop()).intValue(); + if (n > 0) + { + int size = stack.size(); + //Need to copy to a new list to avoid ConcurrentModificationException + List copy = new java.util.ArrayList<>( + stack.subList(size - n, size)); + stack.addAll(copy); + } + } + + } + + /** Implements the "dup" operator. */ + static class Dup implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + stack.push(stack.peek()); + } + + } + + /** Implements the "exch" operator. */ + static class Exch implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + Object any2 = stack.pop(); + Object any1 = stack.pop(); + stack.push(any2); + stack.push(any1); + } + + } + + /** Implements the "index" operator. */ + static class Index implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + int n = ((Number)stack.pop()).intValue(); + if (n < 0) + { + throw new IllegalArgumentException("rangecheck: " + n); + } + int size = stack.size(); + stack.push(stack.get(size - n - 1)); + } + + } + + /** Implements the "pop" operator. */ + static class Pop implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + stack.pop(); + } + + } + + /** Implements the "roll" operator. */ + static class Roll implements Operator + { + @Override + public void execute(ExecutionContext context) + { + Stack stack = context.getStack(); + int j = ((Number)stack.pop()).intValue(); + int n = ((Number)stack.pop()).intValue(); + if (j == 0) + { + return; //Nothing to do + } + if (n < 0) + { + throw new IllegalArgumentException("rangecheck: " + n); + } + + LinkedList rolled = new LinkedList<>(); + LinkedList moved = new LinkedList<>(); + if (j < 0) + { + //negative roll + int n1 = n + j; + for (int i = 0; i < n1; i++) + { + moved.addFirst(stack.pop()); + } + for (int i = j; i < 0; i++) + { + rolled.addFirst(stack.pop()); + } + stack.addAll(moved); + stack.addAll(rolled); + } + else + { + //positive roll + int n1 = n - j; + for (int i = j; i > 0; i--) + { + rolled.addFirst(stack.pop()); + } + for (int i = 0; i < n1; i++) + { + moved.addFirst(stack.pop()); + } + stack.addAll(rolled); + stack.addAll(moved); + } + } + + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html new file mode 100644 index 00000000000..4c25940a656 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains Type 4 function support. + + diff --git a/src/org/pdfbox/pdmodel/common/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/common/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDAttributeObject.java new file mode 100644 index 00000000000..40f746a067f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDAttributeObject.java @@ -0,0 +1,239 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDDictionaryWrapper; +import org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.PDExportFormatAttributeObject; +import org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.PDLayoutAttributeObject; +import org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.PDListAttributeObject; +import org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.PDPrintFieldAttributeObject; +import org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.PDTableAttributeObject; + +/** + * An attribute object. + * + * @author Johannes Koch + * + */ +public abstract class PDAttributeObject extends PDDictionaryWrapper +{ + + /** + * Creates an attribute object. + * + * @param dictionary the dictionary + * @return the attribute object + */ + public static PDAttributeObject create(COSDictionary dictionary) + { + String owner = dictionary.getNameAsString(COSName.O); + if (owner != null) + { + switch (owner) + { + case PDUserAttributeObject.OWNER_USER_PROPERTIES: + return new PDUserAttributeObject(dictionary); + case PDListAttributeObject.OWNER_LIST: + return new PDListAttributeObject(dictionary); + case PDPrintFieldAttributeObject.OWNER_PRINT_FIELD: + return new PDPrintFieldAttributeObject(dictionary); + case PDTableAttributeObject.OWNER_TABLE: + return new PDTableAttributeObject(dictionary); + case PDLayoutAttributeObject.OWNER_LAYOUT: + return new PDLayoutAttributeObject(dictionary); + case PDExportFormatAttributeObject.OWNER_XML_1_00: + case PDExportFormatAttributeObject.OWNER_HTML_3_20: + case PDExportFormatAttributeObject.OWNER_HTML_4_01: + case PDExportFormatAttributeObject.OWNER_OEB_1_00: + case PDExportFormatAttributeObject.OWNER_RTF_1_05: + case PDExportFormatAttributeObject.OWNER_CSS_1_00: + case PDExportFormatAttributeObject.OWNER_CSS_2_00: + return new PDExportFormatAttributeObject(dictionary); + default: + break; + } + } + return new PDDefaultAttributeObject(dictionary); + } + + private PDStructureElement structureElement; + + /** + * Gets the structure element. + * + * @return the structure element + */ + private PDStructureElement getStructureElement() + { + return this.structureElement; + } + + /** + * Sets the structure element. + * + * @param structureElement the structure element + */ + protected void setStructureElement(PDStructureElement structureElement) + { + this.structureElement = structureElement; + } + + + /** + * Default constructor. + */ + public PDAttributeObject() + { + } + + /** + * Creates a new attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Returns the owner of the attributes. + * + * @return the owner of the attributes + */ + public String getOwner() + { + return this.getCOSObject().getNameAsString(COSName.O); + } + + /** + * Sets the owner of the attributes. + * + * @param owner the owner of the attributes + */ + protected void setOwner(String owner) + { + this.getCOSObject().setName(COSName.O, owner); + } + + /** + * Detects whether there are no properties in the attribute object. + * + * @return true if the attribute object is empty, + * false otherwise + */ + public boolean isEmpty() + { + // only entry is the owner? + return (this.getCOSObject().size() == 1) && (this.getOwner() != null); + } + + + /** + * Notifies the attribute object change listeners if the attribute is changed. + * + * @param oldBase old value + * @param newBase new value + */ + protected void potentiallyNotifyChanged(COSBase oldBase, COSBase newBase) + { + if (this.isValueChanged(oldBase, newBase)) + { + this.notifyChanged(); + } + } + + /** + * Is the value changed? + * + * @param oldValue old value + * @param newValue new value + * @return true if the value is changed, false + * otherwise + */ + private boolean isValueChanged(COSBase oldValue, COSBase newValue) + { + if (oldValue == null) + { + return newValue != null; + } + return !oldValue.equals(newValue); + } + + /** + * Notifies the attribute object change listeners about a change in this + * attribute object. + */ + protected void notifyChanged() + { + if (this.getStructureElement() != null) + { + this.getStructureElement().attributeChanged(this); + } + } + + @Override + public String toString() + { + return "O=" + this.getOwner(); + } + + /** + * Creates a String representation of an Object array. + * + * @param array the Object array + * @return the String representation + */ + protected static String arrayToString(Object[] array) + { + StringBuilder sb = new StringBuilder("["); + for (int i = 0; i < array.length; i++) + { + if (i > 0) + { + sb.append(", "); + } + sb.append(array[i]); + } + return sb.append(']').toString(); + } + + /** + * Creates a String representation of a float array. + * + * @param array the float array + * @return the String representation + */ + protected static String arrayToString(float[] array) + { + StringBuilder sb = new StringBuilder("["); + for (int i = 0; i < array.length; i++) + { + if (i > 0) + { + sb.append(", "); + } + sb.append(array[i]); + } + return sb.append(']').toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDDefaultAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDDefaultAttributeObject.java new file mode 100644 index 00000000000..ac9697278f4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDDefaultAttributeObject.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A default attribute object. + * + * @author Johannes Koch + */ +public class PDDefaultAttributeObject extends PDAttributeObject +{ + + /** + * Default constructor. + */ + public PDDefaultAttributeObject() + { + } + + /** + * Creates a default attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDDefaultAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the attribute names. + * + * @return the attribute names + */ + public List getAttributeNames() + { + List attrNames = new ArrayList<>(); + for (Entry entry : this.getCOSObject().entrySet()) + { + COSName key = entry.getKey(); + if (!COSName.O.equals(key)) + { + attrNames.add(key.getName()); + } + } + return attrNames; + } + + /** + * Gets the attribute value for a given name. + * + * @param attrName the given attribute name + * @return the attribute value for a given name + */ + public COSBase getAttributeValue(String attrName) + { + return this.getCOSObject().getDictionaryObject(attrName); + } + + /** + * Gets the attribute value for a given name. + * + * @param attrName the given attribute name + * @param defaultValue the default value + * @return the attribute value for a given name + */ + protected COSBase getAttributeValue(String attrName, COSBase defaultValue) + { + COSBase value = this.getCOSObject().getDictionaryObject(attrName); + if (value == null) + { + return defaultValue; + } + return value; + } + + /** + * Sets an attribute. + * + * @param attrName the attribute name + * @param attrValue the attribute value + */ + public void setAttribute(String attrName, COSBase attrValue) + { + COSBase old = this.getAttributeValue(attrName); + this.getCOSObject().setItem(COSName.getPDFName(attrName), attrValue); + this.potentiallyNotifyChanged(old, attrValue); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder().append(super.toString()) + .append(", attributes={"); + Iterator it = this.getAttributeNames().iterator(); + while (it.hasNext()) + { + String name = it.next(); + sb.append(name).append('=').append(this.getAttributeValue(name)); + if (it.hasNext()) + { + sb.append(", "); + } + } + return sb.append('}').toString(); + } + +} diff --git a/src/org/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkInfo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkInfo.java similarity index 84% rename from src/org/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkInfo.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkInfo.java index 95348c173c2..e24b8a266bf 100644 --- a/src/org/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkInfo.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkInfo.java @@ -14,22 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.documentinterchange.logicalstructure; +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; -import org.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * The MarkInfo provides additional information relevant to specialized * uses of structured documents. * - * @author Ben Litchfield - * @version $Revision: 1.4 $ + * @author Ben Litchfield */ public class PDMarkInfo implements COSObjectable { - private COSDictionary dictionary; + private final COSDictionary dictionary; /** * Default Constructor. @@ -55,17 +53,8 @@ public PDMarkInfo( COSDictionary dic ) * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject() - { - return dictionary; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSDictionary getDictionary() + @Override + public COSDictionary getCOSObject() { return dictionary; } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkedContentReference.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkedContentReference.java new file mode 100644 index 00000000000..35907cf1767 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDMarkedContentReference.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * A marked-content reference. + * + * @author Johannes Koch + */ +public class PDMarkedContentReference implements COSObjectable +{ + public static final String TYPE = "MCR"; + + private final COSDictionary dictionary; + + /** + * {@inheritDoc} + */ + @Override + public COSDictionary getCOSObject() + { + return this.dictionary; + } + + /** + * Default constructor + */ + public PDMarkedContentReference() + { + this.dictionary = new COSDictionary(); + this.dictionary.setName(COSName.TYPE, TYPE); + } + + /** + * Constructor for an existing marked content reference. + * + * @param dictionary the page dictionary + */ + public PDMarkedContentReference(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + /** + * Gets the page. + * + * @return the page + */ + public PDPage getPage() + { + COSDictionary pg = (COSDictionary) this.getCOSObject().getDictionaryObject(COSName.PG); + if (pg != null) + { + return new PDPage(pg); + } + return null; + } + + /** + * Sets the page. + * + * @param page the page + */ + public void setPage(PDPage page) + { + this.getCOSObject().setItem(COSName.PG, page); + } + + /** + * Gets the marked content identifier. + * + * @return the marked content identifier + */ + public int getMCID() + { + return this.getCOSObject().getInt(COSName.MCID); + } + + /** + * Sets the marked content identifier. + * + * @param mcid the marked content identifier + */ + public void setMCID(int mcid) + { + this.getCOSObject().setInt(COSName.MCID, mcid); + } + + + @Override + public String toString() + { + return "mcid=" + this.getMCID(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDObjectReference.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDObjectReference.java new file mode 100644 index 00000000000..9899bdcc57b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDObjectReference.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationUnknown; + +/** + * An object reference. + *

+ * This is described as "Entries in an object reference dictionary" in the PDF specification. + * + * @author Johannes Koch + */ +public class PDObjectReference implements COSObjectable +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDObjectReference.class); + + /** + * TYPE of this object. + */ + public static final String TYPE = "OBJR"; + + private final COSDictionary dictionary; + + /** + * Returns the underlying dictionary. + * + * @return the dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.dictionary; + } + + /** + * Default Constructor. + * + */ + public PDObjectReference() + { + this.dictionary = new COSDictionary(); + this.dictionary.setName(COSName.TYPE, TYPE); + } + + /** + * Constructor for an existing object reference. + * + * @param theDictionary The existing dictionary. + */ + public PDObjectReference(COSDictionary theDictionary) + { + dictionary = theDictionary; + } + + /** + * Gets a higher-level object for the referenced object. + * Currently this method may return a {@link PDAnnotation}, + * a {@link PDXObject} or null. + * + * @return a higher-level object for the referenced object + */ + public COSObjectable getReferencedObject() + { + COSBase obj = this.getCOSObject().getDictionaryObject(COSName.OBJ); + if (!(obj instanceof COSDictionary)) + { + return null; + } + try + { + if (obj instanceof COSStream) + { + PDXObject xobject = PDXObject.createXObject(obj, null); // <-- TODO: valid? + if (xobject != null) + { + return xobject; + } + } + COSDictionary objDictionary = (COSDictionary)obj; + PDAnnotation annotation = PDAnnotation.createAnnotation(obj); + /* + * COSName.TYPE is optional, so if annotation is of type unknown and + * COSName.TYPE is not COSName.ANNOT it still may be an annotation. + * TODO shall we return the annotation object instead of null? + * what else can be the target of the object reference? + */ + if (!(annotation instanceof PDAnnotationUnknown) + || COSName.ANNOT.equals(objDictionary.getDictionaryObject(COSName.TYPE))) + { + return annotation; + } + } + catch (IOException exception) + { + LOG.debug("Couldn't get the referenced object - returning null instead", exception); + // this can only happen if the target is an XObject. + } + return null; + } + + /** + * Sets the referenced annotation. + * + * @param annotation the referenced annotation + */ + public void setReferencedObject(PDAnnotation annotation) + { + this.getCOSObject().setItem(COSName.OBJ, annotation); + } + + /** + * Sets the referenced XObject. + * + * @param xobject the referenced XObject + */ + public void setReferencedObject(PDXObject xobject) + { + this.getCOSObject().setItem(COSName.OBJ, xobject); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDParentTreeValue.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDParentTreeValue.java new file mode 100644 index 00000000000..914c932861c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDParentTreeValue.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * Described in the PDF specification in the ParentTree segment of the table "Entries in the + * structure tree root". This is either a dictionary or an array. + * + * @author Tilman Hausherr + */ +public class PDParentTreeValue implements COSObjectable +{ + COSObjectable obj; + + public PDParentTreeValue(COSArray obj) + { + this.obj = obj; + } + + public PDParentTreeValue(COSDictionary obj) + { + this.obj = obj; + } + + @Override + public COSBase getCOSObject() + { + return obj.getCOSObject(); + } + + @Override + public String toString() + { + return obj.toString(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java new file mode 100644 index 00000000000..9274108c0dc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java @@ -0,0 +1,758 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDMarkedContent; + +/** + * A structure element. + * + * @author Ben Litchfield + * @author Johannes Koch + */ +public class PDStructureElement extends PDStructureNode +{ + + public static final String TYPE = "StructElem"; + + /** + * Constructor with required values. + * + * @param structureType the structure type + * @param parent the parent structure node + */ + public PDStructureElement(String structureType, PDStructureNode parent) + { + super(TYPE); + this.setStructureType(structureType); + this.setParent(parent); + } + + /** + * Constructor for an existing structure element. + * + * @param dic The existing dictionary. + */ + public PDStructureElement( COSDictionary dic ) + { + super(dic); + } + + + /** + * Returns the structure type (S). + * + * @return the structure type + */ + public String getStructureType() + { + return this.getCOSObject().getNameAsString(COSName.S); + } + + /** + * Sets the structure type (S). + * + * @param structureType the structure type + */ + public final void setStructureType(String structureType) + { + this.getCOSObject().setName(COSName.S, structureType); + } + + /** + * Returns the parent in the structure hierarchy (P). + * + * @return the parent in the structure hierarchy + */ + public PDStructureNode getParent() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.P); + if (base instanceof COSDictionary) + { + return PDStructureNode.create((COSDictionary) base); + } + return null; + } + + /** + * Sets the parent in the structure hierarchy (P). + * + * @param structureNode the parent in the structure hierarchy + */ + public final void setParent(PDStructureNode structureNode) + { + this.getCOSObject().setItem(COSName.P, structureNode); + } + + /** + * Returns the element identifier (ID). + * + * @return the element identifier + */ + public String getElementIdentifier() + { + return this.getCOSObject().getString(COSName.ID); + } + + /** + * Sets the element identifier (ID). + * + * @param id the element identifier + */ + public void setElementIdentifier(String id) + { + this.getCOSObject().setString(COSName.ID, id); + } + + /** + * Returns the page on which some or all of the content items designated by + * the K entry shall be rendered (Pg). + * + * @return the page on which some or all of the content items designated by + * the K entry shall be rendered + */ + public PDPage getPage() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.PG); + if (base instanceof COSDictionary) + { + return new PDPage((COSDictionary) base); + } + return null; + } + + /** + * Sets the page on which some or all of the content items designated by + * the K entry shall be rendered (Pg). + * @param page the page on which some or all of the content items designated + * by the K entry shall be rendered. + */ + public void setPage(PDPage page) + { + this.getCOSObject().setItem(COSName.PG, page); + } + + /** + * Returns the attributes together with their revision numbers (A). + * + * @return the attributes as a list, never null. + */ + public Revisions getAttributes() + { + Revisions attributes = new Revisions<>(); + COSBase a = this.getCOSObject().getDictionaryObject(COSName.A); + if (a instanceof COSArray) + { + COSArray aa = (COSArray) a; + Iterator it = aa.iterator(); + PDAttributeObject ao = null; + while (it.hasNext()) + { + COSBase item = it.next(); + if (item instanceof COSObject) + { + item = ((COSObject) item).getObject(); + } + if (item instanceof COSDictionary) + { + ao = PDAttributeObject.create((COSDictionary) item); + ao.setStructureElement(this); + attributes.addObject(ao, 0); + } + else if (item instanceof COSInteger) + { + attributes.setRevisionNumber(ao, ((COSNumber) item).intValue()); + } + } + } + if (a instanceof COSDictionary) + { + PDAttributeObject ao = PDAttributeObject.create((COSDictionary) a); + ao.setStructureElement(this); + attributes.addObject(ao, 0); + } + return attributes; + } + + /** + * Sets the attributes together with their revision numbers (A). + * + * @param attributes the attributes + */ + public void setAttributes(Revisions attributes) + { + COSName key = COSName.A; + if ((attributes.size() == 1) && (attributes.getRevisionNumber(0) == 0)) + { + PDAttributeObject attributeObject = attributes.getObject(0); + attributeObject.setStructureElement(this); + this.getCOSObject().setItem(key, attributeObject); + return; + } + COSArray array = new COSArray(); + for (int i = 0; i < attributes.size(); i++) + { + PDAttributeObject attributeObject = attributes.getObject(i); + attributeObject.setStructureElement(this); + int revisionNumber = attributes.getRevisionNumber(i); + if (revisionNumber < 0) + { + throw new IllegalArgumentException("The revision number shall be > -1"); + } + array.add(attributeObject); + array.add(COSInteger.get(revisionNumber)); + } + this.getCOSObject().setItem(key, array); + } + + /** + * Adds an attribute object. + * + * @param attributeObject the attribute object + */ + public void addAttribute(PDAttributeObject attributeObject) + { + COSName key = COSName.A; + attributeObject.setStructureElement(this); + COSBase a = this.getCOSObject().getDictionaryObject(key); + COSArray array; + if (a instanceof COSArray) + { + array = (COSArray) a; + } + else + { + array = new COSArray(); + if (a != null) + { + array.add(a); + array.add(COSInteger.get(0)); + } + } + this.getCOSObject().setItem(key, array); + array.add(attributeObject); + array.add(COSInteger.get(this.getRevisionNumber())); + } + + /** + * Removes an attribute object. + * + * @param attributeObject the attribute object + */ + public void removeAttribute(PDAttributeObject attributeObject) + { + COSName key = COSName.A; + COSBase a = this.getCOSObject().getDictionaryObject(key); + if (a instanceof COSArray) + { + COSArray array = (COSArray) a; + array.remove(attributeObject.getCOSObject()); + if ((array.size() == 2) && (array.getInt(1) == 0)) + { + this.getCOSObject().setItem(key, array.getObject(0)); + } + } + else + { + COSBase directA = a; + if (a instanceof COSObject) + { + directA = ((COSObject) a).getObject(); + } + if (attributeObject.getCOSObject().equals(directA)) + { + this.getCOSObject().setItem(key, null); + } + } + attributeObject.setStructureElement(null); + } + + /** + * Updates the revision number for the given attribute object. + * + * @param attributeObject the attribute object + */ + public void attributeChanged(PDAttributeObject attributeObject) + { + COSName key = COSName.A; + COSBase a = this.getCOSObject().getDictionaryObject(key); + if (a instanceof COSArray) + { + COSArray array = (COSArray) a; + for (int i = 0; i < array.size(); i++) + { + COSBase entry = array.getObject(i); + if (entry.equals(attributeObject.getCOSObject())) + { + COSBase next = array.get(i + 1); + if (next instanceof COSInteger) + { + array.set(i + 1, COSInteger.get(this.getRevisionNumber())); + } + } + } + } + else + { + COSArray array = new COSArray(); + array.add(a); + array.add(COSInteger.get(this.getRevisionNumber())); + this.getCOSObject().setItem(key, array); + } + } + + /** + * Returns the class names together with their revision numbers (C). + * + * @return the class names as a list, never null. + */ + public Revisions getClassNames() + { + COSName key = COSName.C; + Revisions classNames = new Revisions<>(); + COSBase c = this.getCOSObject().getDictionaryObject(key); + if (c instanceof COSName) + { + classNames.addObject(((COSName) c).getName(), 0); + } + if (c instanceof COSArray) + { + COSArray array = (COSArray) c; + Iterator it = array.iterator(); + String className = null; + while (it.hasNext()) + { + COSBase item = it.next(); + if (item instanceof COSObject) + { + item = ((COSObject) item).getObject(); + } + if (item instanceof COSName) + { + className = ((COSName) item).getName(); + classNames.addObject(className, 0); + } + else if (item instanceof COSInteger) + { + classNames.setRevisionNumber(className, ((COSNumber) item).intValue()); + } + } + } + return classNames; + } + + /** + * Sets the class names together with their revision numbers (C). + * + * @param classNames the class names + */ + public void setClassNames(Revisions classNames) + { + if (classNames == null) + { + return; + } + COSName key = COSName.C; + if ((classNames.size() == 1) && (classNames.getRevisionNumber(0) == 0)) + { + String className = classNames.getObject(0); + this.getCOSObject().setName(key, className); + return; + } + COSArray array = new COSArray(); + for (int i = 0; i < classNames.size(); i++) + { + String className = classNames.getObject(i); + int revisionNumber = classNames.getRevisionNumber(i); + if (revisionNumber < 0) + { + throw new IllegalArgumentException("The revision number shall be > -1"); + } + array.add(COSName.getPDFName(className)); + array.add(COSInteger.get(revisionNumber)); + } + this.getCOSObject().setItem(key, array); + } + + /** + * Adds a class name. + * + * @param className the class name + */ + public void addClassName(String className) + { + if (className == null) + { + return; + } + COSName key = COSName.C; + COSBase c = this.getCOSObject().getDictionaryObject(key); + COSArray array; + if (c instanceof COSArray) + { + array = (COSArray) c; + } + else + { + array = new COSArray(); + if (c != null) + { + array.add(c); + array.add(COSInteger.get(0)); + } + } + this.getCOSObject().setItem(key, array); + array.add(COSName.getPDFName(className)); + array.add(COSInteger.get(this.getRevisionNumber())); + } + + /** + * Removes a class name. + * + * @param className the class name + */ + public void removeClassName(String className) + { + if (className == null) + { + return; + } + COSName key = COSName.C; + COSBase c = this.getCOSObject().getDictionaryObject(key); + COSName name = COSName.getPDFName(className); + if (c instanceof COSArray) + { + COSArray array = (COSArray) c; + array.remove(name); + if ((array.size() == 2) && (array.getInt(1) == 0)) + { + this.getCOSObject().setItem(key, array.getObject(0)); + } + } + else + { + COSBase directC = c; + if (c instanceof COSObject) + { + directC = ((COSObject) c).getObject(); + } + if (name.equals(directC)) + { + this.getCOSObject().setItem(key, null); + } + } + } + + /** + * Returns the revision number (R). + * + * @return the revision number + */ + public int getRevisionNumber() + { + return this.getCOSObject().getInt(COSName.R, 0); + } + + /** + * Sets the revision number (R). + * + * @param revisionNumber the revision number + */ + public void setRevisionNumber(int revisionNumber) + { + if (revisionNumber < 0) + { + throw new IllegalArgumentException("The revision number shall be > -1"); + } + this.getCOSObject().setInt(COSName.R, revisionNumber); + } + + /** + * Increments th revision number. + */ + public void incrementRevisionNumber() + { + this.setRevisionNumber(this.getRevisionNumber() + 1); + } + + /** + * Returns the title (T). + * + * @return the title + */ + public String getTitle() + { + return this.getCOSObject().getString(COSName.T); + } + + /** + * Sets the title (T). + * + * @param title the title + */ + public void setTitle(String title) + { + this.getCOSObject().setString(COSName.T, title); + } + + /** + * Returns the language (Lang). + * + * @return the language + */ + public String getLanguage() + { + return this.getCOSObject().getString(COSName.LANG); + } + + /** + * Sets the language (Lang). + * + * @param language the language + */ + public void setLanguage(String language) + { + this.getCOSObject().setString(COSName.LANG, language); + } + + /** + * Returns the alternate description (Alt). + * + * @return the alternate description + */ + public String getAlternateDescription() + { + return this.getCOSObject().getString(COSName.ALT); + } + + /** + * Sets the alternate description (Alt). + * + * @param alternateDescription the alternate description + */ + public void setAlternateDescription(String alternateDescription) + { + this.getCOSObject().setString(COSName.ALT, alternateDescription); + } + + /** + * Returns the expanded form (E). + * + * @return the expanded form + */ + public String getExpandedForm() + { + return this.getCOSObject().getString(COSName.E); + } + + /** + * Sets the expanded form (E). + * + * @param expandedForm the expanded form + */ + public void setExpandedForm(String expandedForm) + { + this.getCOSObject().setString(COSName.E, expandedForm); + } + + /** + * Returns the actual text (ActualText). + * + * @return the actual text + */ + public String getActualText() + { + return this.getCOSObject().getString(COSName.ACTUAL_TEXT); + } + + /** + * Sets the actual text (ActualText). + * + * @param actualText the actual text + */ + public void setActualText(String actualText) + { + this.getCOSObject().setString(COSName.ACTUAL_TEXT, actualText); + } + + /** + * Returns the standard structure type, the actual structure type is mapped + * to in the role map. + * + * @return the standard structure type + */ + public String getStandardStructureType() + { + String type = this.getStructureType(); + Map roleMap = getRoleMap(); + if (roleMap.containsKey(type)) + { + Object mappedValue = getRoleMap().get(type); + if (mappedValue instanceof String) + { + type = (String)mappedValue; + } + } + return type; + } + + /** + * Appends a marked-content sequence kid. + * + * @param markedContent the marked-content sequence + */ + public void appendKid(PDMarkedContent markedContent) + { + if (markedContent == null) + { + return; + } + this.appendKid(COSInteger.get(markedContent.getMCID())); + } + + /** + * Appends a marked-content reference kid. + * + * @param markedContentReference the marked-content reference + */ + public void appendKid(PDMarkedContentReference markedContentReference) + { + this.appendObjectableKid(markedContentReference); + } + + /** + * Appends an object reference kid. + * + * @param objectReference the object reference + */ + public void appendKid(PDObjectReference objectReference) + { + this.appendObjectableKid(objectReference); + } + + /** + * Inserts a marked-content identifier kid before a reference kid. + * + * @param markedContentIdentifier the marked-content identifier + * @param refKid the reference kid + */ + public void insertBefore(COSInteger markedContentIdentifier, Object refKid) + { + this.insertBefore((COSBase) markedContentIdentifier, refKid); + } + + /** + * Inserts a marked-content reference kid before a reference kid. + * + * @param markedContentReference the marked-content reference + * @param refKid the reference kid + */ + public void insertBefore(PDMarkedContentReference markedContentReference, + Object refKid) + { + this.insertObjectableBefore(markedContentReference, refKid); + } + + /** + * Inserts an object reference kid before a reference kid. + * + * @param objectReference the object reference + * @param refKid the reference kid + */ + public void insertBefore(PDObjectReference objectReference, Object refKid) + { + this.insertObjectableBefore(objectReference, refKid); + } + + /** + * Removes a marked-content identifier kid. + * + * @param markedContentIdentifier the marked-content identifier + */ + public void removeKid(COSInteger markedContentIdentifier) + { + this.removeKid((COSBase) markedContentIdentifier); + } + + /** + * Removes a marked-content reference kid. + * + * @param markedContentReference the marked-content reference + */ + public void removeKid(PDMarkedContentReference markedContentReference) + { + this.removeObjectableKid(markedContentReference); + } + + /** + * Removes an object reference kid. + * + * @param objectReference the object reference + */ + public void removeKid(PDObjectReference objectReference) + { + this.removeObjectableKid(objectReference); + } + + + /** + * Returns the structure tree root. + * + * @return the structure tree root + */ + private PDStructureTreeRoot getStructureTreeRoot() + { + PDStructureNode parent = this.getParent(); + while (parent instanceof PDStructureElement) + { + parent = ((PDStructureElement) parent).getParent(); + } + if (parent instanceof PDStructureTreeRoot) + { + return (PDStructureTreeRoot) parent; + } + return null; + } + + /** + * Returns the role map. + * + * @return the role map + */ + private Map getRoleMap() + { + PDStructureTreeRoot root = this.getStructureTreeRoot(); + if (root != null) + { + return root.getRoleMap(); + } + return Collections.emptyMap(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureNode.java new file mode 100644 index 00000000000..09820731c9d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureNode.java @@ -0,0 +1,422 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * A node in the structure tree. + * + * @author Johannes Koch + */ +public abstract class PDStructureNode implements COSObjectable +{ + + /** + * Creates a node in the structure tree. Can be either a structure tree root, + * or a structure element. + * + * @param node the node dictionary + * @return the structure node + */ + public static PDStructureNode create(COSDictionary node) + { + String type = node.getNameAsString(COSName.TYPE); + if ("StructTreeRoot".equals(type)) + { + return new PDStructureTreeRoot(node); + } + if (type == null || "StructElem".equals(type)) + { + return new PDStructureElement(node); + } + throw new IllegalArgumentException("Dictionary must not include a Type entry with a value that is neither StructTreeRoot nor StructElem."); + } + + + private final COSDictionary dictionary; + + /** + * {@inheritDoc} + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Constructor. + * + * @param type the type + */ + protected PDStructureNode(String type) + { + this.dictionary = new COSDictionary(); + this.dictionary.setName(COSName.TYPE, type); + } + + /** + * Constructor for an existing structure node. + * + * @param dictionary The existing dictionary. + */ + protected PDStructureNode(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + /** + * Returns the type. + * + * @return the type + */ + public String getType() + { + return this.getCOSObject().getNameAsString(COSName.TYPE); + } + + /** + * Returns a list of objects for the kids (K). + * + * @return a list of objects for the kids, never null. + */ + public List getKids() + { + List kidObjects = new ArrayList<>(); + COSBase k = this.getCOSObject().getDictionaryObject(COSName.K); + if (k instanceof COSArray) + { + for (COSBase kid : ((COSArray) k)) + { + Object kidObject = this.createObject(kid); + if (kidObject != null) + { + kidObjects.add(kidObject); + } + } + } + else + { + Object kidObject = this.createObject(k); + if (kidObject != null) + { + kidObjects.add(kidObject); + } + } + return kidObjects; + } + + /** + * Sets the kids (K). + * + * @param kids the kids + */ + public void setKids(List kids) + { + this.getCOSObject().setItem(COSName.K, + COSArrayList.converterToCOSArray(kids)); + } + + /** + * Appends a structure element kid. + * + * @param structureElement the structure element + */ + public void appendKid(PDStructureElement structureElement) + { + this.appendObjectableKid(structureElement); + structureElement.setParent(this); + } + + /** + * Appends an objectable kid. + * + * @param objectable the objectable + */ + protected void appendObjectableKid(COSObjectable objectable) + { + if (objectable == null) + { + return; + } + this.appendKid(objectable.getCOSObject()); + } + + /** + * Appends a COS base kid. + * + * @param object the COS base + */ + protected void appendKid(COSBase object) + { + if (object == null) + { + return; + } + COSBase k = this.getCOSObject().getDictionaryObject(COSName.K); + if (k == null) + { + // currently no kid: set new kid as kids + this.getCOSObject().setItem(COSName.K, object); + } + else if (k instanceof COSArray) + { + // currently more than one kid: add new kid to existing array + COSArray array = (COSArray) k; + array.add(object); + } + else + { + // currently one kid: put current and new kid into array and set array as kids + COSArray array = new COSArray(); + array.add(k); + array.add(object); + this.getCOSObject().setItem(COSName.K, array); + } + } + + /** + * Inserts a structure element kid before a reference kid. + * + * @param newKid the structure element + * @param refKid the reference kid + */ + public void insertBefore(PDStructureElement newKid, Object refKid) + { + this.insertObjectableBefore(newKid, refKid); + } + + /** + * Inserts an objectable kid before a reference kid. + * + * @param newKid the objectable + * @param refKid the reference kid + */ + protected void insertObjectableBefore(COSObjectable newKid, Object refKid) + { + if (newKid == null) + { + return; + } + this.insertBefore(newKid.getCOSObject(), refKid); + } + + /** + * Inserts an COS base kid before a reference kid. + * + * @param newKid the COS base + * @param refKid the reference kid + */ + protected void insertBefore(COSBase newKid, Object refKid) + { + if (newKid == null || refKid == null) + { + return; + } + COSBase k = this.getCOSObject().getDictionaryObject(COSName.K); + if (k == null) + { + return; + } + COSBase refKidBase = null; + if (refKid instanceof COSObjectable) + { + refKidBase = ((COSObjectable) refKid).getCOSObject(); + } + else if (refKid instanceof COSInteger) + { + refKidBase = (COSBase) refKid; + } + if (k instanceof COSArray) + { + COSArray array = (COSArray) k; + int refIndex = array.indexOfObject(refKidBase); + array.add(refIndex, newKid.getCOSObject()); + } + else + { + boolean onlyKid = k.equals(refKidBase); + if (!onlyKid && (k instanceof COSObject)) + { + COSBase kObj = ((COSObject) k).getObject(); + onlyKid = kObj.equals(refKidBase); + } + if (onlyKid) + { + COSArray array = new COSArray(); + array.add(newKid); + array.add(refKidBase); + this.getCOSObject().setItem(COSName.K, array); + } + } + } + + /** + * Removes a structure element kid. + * + * @param structureElement the structure element + * @return true if the kid was removed, false otherwise + */ + public boolean removeKid(PDStructureElement structureElement) + { + boolean removed = this.removeObjectableKid(structureElement); + if (removed) + { + structureElement.setParent(null); + } + return removed; + } + + /** + * Removes an objectable kid. + * + * @param objectable the objectable + * @return true if the kid was removed, false otherwise + */ + protected boolean removeObjectableKid(COSObjectable objectable) + { + if (objectable == null) + { + return false; + } + return this.removeKid(objectable.getCOSObject()); + } + + /** + * Removes a COS base kid. + * + * @param object the COS base + * @return true if the kid was removed, false otherwise + */ + protected boolean removeKid(COSBase object) + { + if (object == null) + { + return false; + } + COSBase k = this.getCOSObject().getDictionaryObject(COSName.K); + if (k == null) + { + // no kids: objectable is not a kid + return false; + } + else if (k instanceof COSArray) + { + // currently more than one kid: remove kid from existing array + COSArray array = (COSArray) k; + boolean removed = array.removeObject(object); + // if now only one kid: set remaining kid as kids + if (array.size() == 1) + { + this.getCOSObject().setItem(COSName.K, array.getObject(0)); + } + return removed; + } + else + { + // currently one kid: if current kid equals given object, remove kids entry + boolean onlyKid = k.equals(object); + if (!onlyKid && (k instanceof COSObject)) + { + COSBase kObj = ((COSObject) k).getObject(); + onlyKid = kObj.equals(object); + } + if (onlyKid) + { + this.getCOSObject().setItem(COSName.K, null); + return true; + } + return false; + } + } + + /** + * Creates an object for a kid of this structure node. + * The type of object depends on the type of the kid. It can be + *
    + *
  • a {@link PDStructureElement},
  • + *
  • a {@link PDObjectReference},
  • + *
  • a {@link PDMarkedContentReference},
  • + *
  • an {@link Integer}
  • + *
+ * + * @param kid the kid + * @return the object + */ + protected Object createObject(COSBase kid) + { + COSDictionary kidDic = null; + if (kid instanceof COSDictionary) + { + kidDic = (COSDictionary) kid; + } + else if (kid instanceof COSObject) + { + COSBase base = ((COSObject) kid).getObject(); + if (base instanceof COSDictionary) + { + kidDic = (COSDictionary) base; + } + } + if (kidDic != null) + { + return createObjectFromDic(kidDic); + } + else if (kid instanceof COSInteger) + { + // An integer marked-content identifier denoting a marked-content sequence + COSInteger mcid = (COSInteger) kid; + return mcid.intValue(); + } + return null; + } + + private COSObjectable createObjectFromDic(COSDictionary kidDic) + { + String type = kidDic.getNameAsString(COSName.TYPE); + if (type == null) + { + // A structure element dictionary denoting another structure element + return new PDStructureElement(kidDic); + } + switch (type) + { + case PDStructureElement.TYPE: + // A structure element dictionary denoting another structure element + return new PDStructureElement(kidDic); + case PDObjectReference.TYPE: + // An object reference dictionary denoting a PDF object + return new PDObjectReference(kidDic); + case PDMarkedContentReference.TYPE: + // A marked-content reference dictionary denoting a marked-content sequence + return new PDMarkedContentReference(kidDic); + default: + return null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java new file mode 100644 index 00000000000..4571a78b71e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java @@ -0,0 +1,196 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.io.IOException; +import java.util.Hashtable; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDStructureElementNameTreeNode; +import org.apache.pdfbox.pdmodel.common.COSDictionaryMap; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode; + +/** + * A root of a structure tree. + * + * @author Ben Litchfield + * @author Johannes Koch + * + */ +public class PDStructureTreeRoot extends PDStructureNode +{ + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDStructureTreeRoot.class); + + private static final String TYPE = "StructTreeRoot"; + + /** + * Default Constructor. + * + */ + public PDStructureTreeRoot() + { + super(TYPE); + } + + /** + * Constructor for an existing structure element. + * + * @param dic The existing dictionary. + */ + public PDStructureTreeRoot(COSDictionary dic) + { + super(dic); + } + + /** + * Returns the K entry. This can be a dictionary representing a structure element, or an array + * of them. + * + * @return the K entry. + */ + public COSBase getK() + { + return this.getCOSObject().getDictionaryObject(COSName.K); + } + + /** + * Sets the K entry. + * + * @param k the K value + */ + public void setK(COSBase k) + { + this.getCOSObject().setItem(COSName.K, k); + } + + /** + * Returns the ID tree. + * + * @return the ID tree + */ + public PDNameTreeNode getIDTree() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.ID_TREE); + if (base instanceof COSDictionary) + { + return new PDStructureElementNameTreeNode((COSDictionary) base); + } + return null; + } + + /** + * Sets the ID tree. + * + * @param idTree the ID tree + */ + public void setIDTree(PDNameTreeNode idTree) + { + this.getCOSObject().setItem(COSName.ID_TREE, idTree); + } + + /** + * Returns the parent tree. + * + * @return the parent tree + */ + public PDNumberTreeNode getParentTree() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.PARENT_TREE); + if (base instanceof COSDictionary) + { + return new PDNumberTreeNode((COSDictionary) base, PDParentTreeValue.class); + } + return null; + } + + /** + * Sets the parent tree. + * + * @param parentTree the parent tree + */ + public void setParentTree(PDNumberTreeNode parentTree) + { + this.getCOSObject().setItem(COSName.PARENT_TREE, parentTree); + } + + /** + * Returns the next key in the parent tree. + * + * @return the next key in the parent tree + */ + public int getParentTreeNextKey() + { + return this.getCOSObject().getInt(COSName.PARENT_TREE_NEXT_KEY); + } + + /** + * Sets the next key in the parent tree. + * + * @param parentTreeNextkey the next key in the parent tree. + */ + public void setParentTreeNextKey(int parentTreeNextkey) + { + this.getCOSObject().setInt(COSName.PARENT_TREE_NEXT_KEY, parentTreeNextkey); + } + + /** + * Returns the role map. + * + * @return the role map + */ + public Map getRoleMap() + { + COSBase rm = this.getCOSObject().getDictionaryObject(COSName.ROLE_MAP); + if (rm instanceof COSDictionary) + { + try + { + return COSDictionaryMap.convertBasicTypesToMap((COSDictionary) rm); + } + catch (IOException e) + { + LOG.error(e,e); + } + } + return new Hashtable<>(); + } + + /** + * Sets the role map. + * + * @param roleMap the role map + */ + public void setRoleMap(Map roleMap) + { + COSDictionary rmDic = new COSDictionary(); + for (Map.Entry entry : roleMap.entrySet()) + { + rmDic.setName(entry.getKey(), entry.getValue()); + } + this.getCOSObject().setItem(COSName.ROLE_MAP, rmDic); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDUserAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDUserAttributeObject.java new file mode 100644 index 00000000000..f4157913be4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDUserAttributeObject.java @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A User attribute object. + * + * @author Johannes Koch + */ +public class PDUserAttributeObject extends PDAttributeObject +{ + + /** + * Attribute owner for user properties + */ + public static final String OWNER_USER_PROPERTIES = "UserProperties"; + + + /** + * Default constructor + */ + public PDUserAttributeObject() + { + this.setOwner(OWNER_USER_PROPERTIES); + } + + /** + * + * @param dictionary the dictionary + */ + public PDUserAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Returns the user properties. + * + * @return the user properties + */ + public List getOwnerUserProperties() + { + COSArray p = (COSArray) this.getCOSObject() + .getDictionaryObject(COSName.P); + List properties = new ArrayList<>(p.size()); + for (int i = 0; i < p.size(); i++) + { + properties.add( + new PDUserProperty((COSDictionary) p.getObject(i), this)); + } + return properties; + } + + /** + * Sets the user properties. + * + * @param userProperties the user properties + */ + public void setUserProperties(List userProperties) + { + COSArray p = new COSArray(); + for (PDUserProperty userProperty : userProperties) + { + p.add(userProperty); + } + this.getCOSObject().setItem(COSName.P, p); + } + + /** + * Adds a user property. + * + * @param userProperty the user property + */ + public void addUserProperty(PDUserProperty userProperty) + { + COSArray p = (COSArray) this.getCOSObject().getDictionaryObject(COSName.P); + p.add(userProperty); + this.notifyChanged(); + } + + /** + * Removes a user property. + * + * @param userProperty the user property + */ + public void removeUserProperty(PDUserProperty userProperty) + { + if (userProperty == null) + { + return; + } + COSArray p = (COSArray) this.getCOSObject().getDictionaryObject(COSName.P); + p.remove(userProperty.getCOSObject()); + this.notifyChanged(); + } + + /** + * @param userProperty + */ + public void userPropertyChanged(PDUserProperty userProperty) + { + + } + + @Override + public String toString() + { + return super.toString() + ", userProperties=" + this.getOwnerUserProperties(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDUserProperty.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDUserProperty.java new file mode 100644 index 00000000000..ea9692fbc4d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDUserProperty.java @@ -0,0 +1,226 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDDictionaryWrapper; + +/** + * A user property. + * + * @author Johannes Koch + */ +public class PDUserProperty extends PDDictionaryWrapper +{ + + private final PDUserAttributeObject userAttributeObject; + + /** + * Creates a new user property. + * + * @param userAttributeObject the user attribute object + */ + public PDUserProperty(PDUserAttributeObject userAttributeObject) + { + this.userAttributeObject = userAttributeObject; + } + + /** + * Creates a user property with a given dictionary. + * + * @param dictionary the dictionary + * @param userAttributeObject the user attribute object + */ + public PDUserProperty(COSDictionary dictionary, + PDUserAttributeObject userAttributeObject) + { + super(dictionary); + this.userAttributeObject = userAttributeObject; + } + + + /** + * Returns the property name. + * + * @return the property name + */ + public String getName() + { + return this.getCOSObject().getNameAsString(COSName.N); + } + + /** + * Sets the property name. + * + * @param name the property name + */ + public void setName(String name) + { + this.potentiallyNotifyChanged(this.getName(), name); + this.getCOSObject().setName(COSName.N, name); + } + + /** + * Returns the property value. + * + * @return the property value + */ + public COSBase getValue() + { + return this.getCOSObject().getDictionaryObject(COSName.V); + } + + /** + * Sets the property value. + * + * @param value the property value + */ + public void setValue(COSBase value) + { + this.potentiallyNotifyChanged(this.getValue(), value); + this.getCOSObject().setItem(COSName.V, value); + } + + /** + * Returns the string for the property value. + * + * @return the string for the property value + */ + public String getFormattedValue() + { + return this.getCOSObject().getString(COSName.F); + } + + /** + * Sets the string for the property value. + * + * @param formattedValue the string for the property value + */ + public void setFormattedValue(String formattedValue) + { + this.potentiallyNotifyChanged(this.getFormattedValue(), formattedValue); + this.getCOSObject().setString(COSName.F, formattedValue); + } + + /** + * Shall the property be hidden? + * + * @return true if the property shall be hidden, + * false otherwise + */ + public boolean isHidden() + { + return this.getCOSObject().getBoolean(COSName.H, false); + } + + /** + * Specifies whether the property shall be hidden. + * + * @param hidden true if the property shall be hidden, + * false otherwise + */ + public void setHidden(boolean hidden) + { + this.potentiallyNotifyChanged(this.isHidden(), hidden); + this.getCOSObject().setBoolean(COSName.H, hidden); + } + + + @Override + public String toString() + { + return "Name=" + this.getName() + + ", Value=" + this.getValue() + + ", FormattedValue=" + this.getFormattedValue() + + ", Hidden=" + this.isHidden(); + } + + + /** + * Notifies the user attribute object if the user property is changed. + * + * @param oldEntry old entry + * @param newEntry new entry + */ + private void potentiallyNotifyChanged(Object oldEntry, Object newEntry) + { + if (this.isEntryChanged(oldEntry, newEntry)) + { + this.userAttributeObject.userPropertyChanged(this); + } + } + + /** + * Is the value changed? + * + * @param oldEntry old entry + * @param newEntry new entry + * @return true if the entry is changed, false + * otherwise + */ + private boolean isEntryChanged(Object oldEntry, Object newEntry) + { + if (oldEntry == null) + { + return newEntry != null; + } + return !oldEntry.equals(newEntry); + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + + ((userAttributeObject == null) ? 0 : userAttributeObject.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (!super.equals(obj)) + { + return false; + } + if (getClass() != obj.getClass()) + { + return false; + } + PDUserProperty other = (PDUserProperty) obj; + if (userAttributeObject == null) + { + if (other.userAttributeObject != null) + { + return false; + } + } + else if (!userAttributeObject.equals(other.userAttributeObject)) + { + return false; + } + return true; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/Revisions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/Revisions.java new file mode 100644 index 00000000000..b6e19ed227a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/Revisions.java @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author Johannes Koch + + * @param the type of object to store the revision numbers with + */ +public class Revisions +{ + private List objects; + private List revisionNumbers; + + private List getObjects() + { + if (this.objects == null) + { + this.objects = new ArrayList<>(); + } + return this.objects; + } + + private List getRevisionNumbers() + { + if (this.revisionNumbers == null) + { + this.revisionNumbers = new ArrayList<>(); + } + return this.revisionNumbers; + } + + /** + * + */ + public Revisions() + { + } + + /** + * Returns the object at the specified position. + * + * @param index the position + * @return the object + * @throws IndexOutOfBoundsException if the index is out of range + */ + public T getObject(int index) + { + return this.getObjects().get(index); + } + + /** + * Returns the revision number at the specified position. + * + * @param index the position + * @return the revision number + * @throws IndexOutOfBoundsException if the index is out of range + */ + public int getRevisionNumber(int index) + { + return this.getRevisionNumbers().get(index); + } + + /** + * Adds an object with a specified revision number. + * + * @param object the object + * @param revisionNumber the revision number + */ + public void addObject(T object, int revisionNumber) + { + this.getObjects().add(object); + this.getRevisionNumbers().add(revisionNumber); + } + + /** + * Sets the revision number of a specified object. + * + * @param object the object + * @param revisionNumber the revision number + */ + protected void setRevisionNumber(T object, int revisionNumber) + { + int index = this.getObjects().indexOf(object); + if (index > -1) + { + this.getRevisionNumbers().set(index, revisionNumber); + } + } + + /** + * Returns the size. + * + * @return the size + */ + public int size() + { + return this.getObjects().size(); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < this.getObjects().size(); i++) + { + if (i > 0) + { + sb.append("; "); + } + sb.append("object=").append(this.getObjects().get(i)) + .append(", revisionNumber=").append(this.getRevisionNumber(i)); + } + return sb.toString(); + } + +} diff --git a/src/org/pdfbox/pdmodel/documentinterchange/logicalstructure/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/documentinterchange/logicalstructure/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDMarkedContent.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDMarkedContent.java new file mode 100644 index 00000000000..157dfece037 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDMarkedContent.java @@ -0,0 +1,201 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.markedcontent; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf.PDArtifactMarkedContent; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.text.TextPosition; + +/** + * A marked content. + * + * @author Johannes Koch + */ +public class PDMarkedContent +{ + + /** + * Creates a marked-content sequence. + * + * @param tag the tag + * @param properties the properties + * @return the marked-content sequence + */ + public static PDMarkedContent create(COSName tag, COSDictionary properties) + { + if (COSName.ARTIFACT.equals(tag)) + { + return new PDArtifactMarkedContent(properties); + } + return new PDMarkedContent(tag, properties); + } + + + private final String tag; + private final COSDictionary properties; + private final List contents; + + + /** + * Creates a new marked content object. + * + * @param tag the tag + * @param properties the properties + */ + public PDMarkedContent(COSName tag, COSDictionary properties) + { + this.tag = tag == null ? null : tag.getName(); + this.properties = properties; + this.contents = new ArrayList<>(); + } + + + /** + * Gets the tag. + * + * @return the tag + */ + public String getTag() + { + return this.tag; + } + + /** + * Gets the properties. + * + * @return the properties + */ + public COSDictionary getProperties() + { + return this.properties; + } + + /** + * Gets the marked-content identifier. + * + * @return the marked-content identifier, or -1 if it doesn't exist. + */ + public int getMCID() + { + return this.getProperties() == null ? -1 : + this.getProperties().getInt(COSName.MCID); + } + + /** + * Gets the language (Lang). + * + * @return the language + */ + public String getLanguage() + { + return this.getProperties() == null ? null : + this.getProperties().getNameAsString(COSName.LANG); + } + + /** + * Gets the actual text (ActualText). + * + * @return the actual text + */ + public String getActualText() + { + return this.getProperties() == null ? null : + this.getProperties().getString(COSName.ACTUAL_TEXT); + } + + /** + * Gets the alternate description (Alt). + * + * @return the alternate description + */ + public String getAlternateDescription() + { + return this.getProperties() == null ? null : + this.getProperties().getString(COSName.ALT); + } + + /** + * Gets the expanded form (E). + * + * @return the expanded form + */ + public String getExpandedForm() + { + return this.getProperties() == null ? null : + this.getProperties().getString(COSName.E); + } + + /** + * Gets the contents of the marked content sequence. Can be + *
    + *
  • {@link TextPosition},
  • + *
  • {@link PDMarkedContent}, or
  • + *
  • {@link PDXObject}.
  • + *
+ * + * @return the contents of the marked content sequence + */ + public List getContents() + { + return this.contents; + } + + /** + * Adds a text position to the contents. + * + * @param text the text position + */ + public void addText(TextPosition text) + { + this.getContents().add(text); + } + + /** + * Adds a marked content to the contents. + * + * @param markedContent the marked content + */ + public void addMarkedContent(PDMarkedContent markedContent) + { + this.getContents().add(markedContent); + } + + /** + * Adds an XObject to the contents. + * + * @param xobject the XObject + */ + public void addXObject(PDXObject xobject) + { + this.getContents().add(xobject); + } + + + @Override + public String toString() + { + return "tag=" + this.tag + + ", properties=" + this.properties + + ", contents=" + this.contents; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDPropertyList.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDPropertyList.java new file mode 100644 index 00000000000..28cb0b48d16 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/PDPropertyList.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.markedcontent; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentMembershipDictionary; + +/** + * A property list is a dictionary containing private information meaningful to the conforming + * writer creating the marked content. + */ +public class PDPropertyList implements COSObjectable +{ + protected final COSDictionary dict; + + /** + * Creates a property list from the given dictionary. + * @param dict COS dictionary + */ + public static PDPropertyList create(COSDictionary dict) + { + if (COSName.OCG.equals(dict.getItem(COSName.TYPE))) + { + return new PDOptionalContentGroup(dict); + } + else if (COSName.OCMD.equals(dict.getItem(COSName.TYPE))) + { + return new PDOptionalContentMembershipDictionary(dict); + } + else + { + // todo: more types + return new PDPropertyList(dict); + } + } + + /** + * Constructor for subclasses. + */ + protected PDPropertyList() + { + this.dict = new COSDictionary(); + } + + /** + * Constructor for subclasses. + */ + protected PDPropertyList(COSDictionary dict) + { + this.dict = dict; + } + + @Override + public COSDictionary getCOSObject() + { + return dict; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/package.html new file mode 100644 index 00000000000..35ba6751f10 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/markedcontent/package.html @@ -0,0 +1,26 @@ + + + + + + + +The marked content package provides a mechanism for modeling marked-content +sequences. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java new file mode 100644 index 00000000000..2ea176c27bd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/PDBoxStyle.java @@ -0,0 +1,195 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.prepress; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; + +/** + * The Box Style specifies visual characteristics for displaying box areas. + * + * @author Ben Litchfield + */ +public class PDBoxStyle implements COSObjectable +{ + /** + * Style for guideline. + */ + public static final String GUIDELINE_STYLE_SOLID = "S"; + /** + * Style for guideline. + */ + public static final String GUIDELINE_STYLE_DASHED = "D"; + + private final COSDictionary dictionary; + + /** + * Default Constructor. + * + */ + public PDBoxStyle() + { + dictionary = new COSDictionary(); + } + + /** + * Constructor for an existing BoxStyle element. + * + * @param dic The existing dictionary. + */ + public PDBoxStyle( COSDictionary dic ) + { + dictionary = dic; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Get the RGB color to be used for the guidelines. This is guaranteed to + * not return null. The default color is [0,0,0]. + * + *@return The guideline color. + */ + public PDColor getGuidelineColor() + { + COSArray colorValues = (COSArray) dictionary.getDictionaryObject(COSName.C); + if( colorValues == null ) + { + colorValues = new COSArray(); + colorValues.add( COSInteger.ZERO ); + colorValues.add( COSInteger.ZERO ); + colorValues.add( COSInteger.ZERO ); + dictionary.setItem(COSName.C, colorValues); + } + PDColor color = new PDColor(colorValues.toFloatArray(), PDDeviceRGB.INSTANCE); + return color; + } + + /** + * Set the color space instance for this box style. This must be a + * PDDeviceRGB! + * + * @param color The new colorspace value. + */ + public void setGuideLineColor( PDColor color ) + { + COSArray values = null; + if( color != null ) + { + values = color.toCOSArray(); + } + dictionary.setItem(COSName.C, values); + } + + /** + * Get the width of the of the guideline in default user space units. + * The default is 1. + * + * @return The width of the guideline. + */ + public float getGuidelineWidth() + { + return dictionary.getFloat(COSName.W, 1); + } + + /** + * Set the guideline width. + * + * @param width The width in default user space units. + */ + public void setGuidelineWidth( float width ) + { + dictionary.setFloat(COSName.W, width); + } + + /** + * Get the style for the guideline. The default is "S" for solid. + * + * @return The guideline style. + * @see PDBoxStyle#GUIDELINE_STYLE_DASHED + * @see PDBoxStyle#GUIDELINE_STYLE_SOLID + */ + public String getGuidelineStyle() + { + return dictionary.getNameAsString(COSName.S, GUIDELINE_STYLE_SOLID); + } + + /** + * Set the style for the box. + * + * @param style The style for the box line. + * @see PDBoxStyle#GUIDELINE_STYLE_DASHED + * @see PDBoxStyle#GUIDELINE_STYLE_SOLID + */ + public void setGuidelineStyle( String style ) + { + dictionary.setName(COSName.S, style); + } + + /** + * Get the line dash pattern for this box style. This is guaranteed to not + * return null. The default is [3],0. + * + * @return The line dash pattern. + */ + public PDLineDashPattern getLineDashPattern() + { + PDLineDashPattern pattern; + COSArray d = (COSArray) dictionary.getDictionaryObject(COSName.D); + if( d == null ) + { + d = new COSArray(); + d.add( COSInteger.THREE ); + dictionary.setItem(COSName.D, d); + } + COSArray lineArray = new COSArray(); + lineArray.add( d ); + //dash phase is not specified and assumed to be zero. + pattern = new PDLineDashPattern( lineArray, 0 ); + return pattern; + } + + /** + * Set the line dash pattern associated with this box style. + * + * @param dashArray The patter for this box style. + */ + public void setLineDashPattern( COSArray dashArray ) + { + COSArray array = null; + if( dashArray != null ) + { + array = dashArray; + } + dictionary.setItem(COSName.D, array); + } +} diff --git a/src/org/pdfbox/pdmodel/documentinterchange/prepress/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/documentinterchange/prepress/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/prepress/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDArtifactMarkedContent.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDArtifactMarkedContent.java new file mode 100644 index 00000000000..24ee7405c8e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDArtifactMarkedContent.java @@ -0,0 +1,146 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDMarkedContent; + +/** + * An artifact marked content. + * + * @author Johannes Koch + * + */ +public class PDArtifactMarkedContent extends PDMarkedContent +{ + + public PDArtifactMarkedContent(COSDictionary properties) + { + super(COSName.ARTIFACT, properties); + } + + + /** + * Gets the type (Type). + * + * @return the type + */ + public String getType() + { + return this.getProperties().getNameAsString(COSName.TYPE); + } + + /** + * Gets the artifact's bounding box (BBox). + * + * @return the artifact's bounding box + */ + public PDRectangle getBBox() + { + PDRectangle retval = null; + COSArray a = (COSArray) this.getProperties().getDictionaryObject( + COSName.BBOX); + if (a != null) + { + retval = new PDRectangle(a); + } + return retval; + } + + /** + * Is the artifact attached to the top edge? + * + * @return true if the artifact is attached to the top edge, + * false otherwise + */ + public boolean isTopAttached() + { + return this.isAttached("Top"); + } + + /** + * Is the artifact attached to the bottom edge? + * + * @return true if the artifact is attached to the bottom edge, + * false otherwise + */ + public boolean isBottomAttached() + { + return this.isAttached("Bottom"); + } + + /** + * Is the artifact attached to the left edge? + * + * @return true if the artifact is attached to the left edge, + * false otherwise + */ + public boolean isLeftAttached() + { + return this.isAttached("Left"); + } + + /** + * Is the artifact attached to the right edge? + * + * @return true if the artifact is attached to the right edge, + * false otherwise + */ + public boolean isRightAttached() + { + return this.isAttached("Right"); + } + + /** + * Gets the subtype (Subtype). + * + * @return the subtype + */ + public String getSubtype() + { + return this.getProperties().getNameAsString(COSName.SUBTYPE); + } + + + /** + * Is the artifact attached to the given edge? + * + * @param edge the edge + * @return true if the artifact is attached to the given edge, + * false otherwise + */ + private boolean isAttached(String edge) + { + COSArray a = (COSArray) this.getProperties().getDictionaryObject( + COSName.ATTACHED); + if (a != null) + { + for (int i = 0; i < a.size(); i++) + { + if (edge.equals(a.getName(i))) + { + return true; + } + } + } + return false; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDExportFormatAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDExportFormatAttributeObject.java new file mode 100644 index 00000000000..cf1343902c0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDExportFormatAttributeObject.java @@ -0,0 +1,264 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * An Export Format attribute object. + * + * @author Johannes Koch + */ +public class PDExportFormatAttributeObject extends PDLayoutAttributeObject +{ + + /** + * standard attribute owner: XML-1.00 + */ + public static final String OWNER_XML_1_00 = "XML-1.00"; + /** + * standard attribute owner: HTML-3.2 + */ + public static final String OWNER_HTML_3_20 = "HTML-3.2"; + /** + * standard attribute owner: HTML-4.01 + */ + public static final String OWNER_HTML_4_01 = "HTML-4.01"; + /** + * standard attribute owner: OEB-1.00 + */ + public static final String OWNER_OEB_1_00 = "OEB-1.00"; + /** + * standard attribute owner: RTF-1.05 + */ + public static final String OWNER_RTF_1_05 = "RTF-1.05"; + /** + * standard attribute owner: CSS-1.00 + */ + public static final String OWNER_CSS_1_00 = "CSS-1.00"; + /** + * standard attribute owner: CSS-2.00 + */ + public static final String OWNER_CSS_2_00 = "CSS-2.00"; + + + /** + * Default constructor. + */ + public PDExportFormatAttributeObject(String owner) + { + this.setOwner(owner); + } + + /** + * Creates a new ExportFormat attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDExportFormatAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the list numbering (ListNumbering). The default value is + * {@link PDListAttributeObject#LIST_NUMBERING_NONE}. + * + * @return the list numbering + */ + public String getListNumbering() + { + return this.getName(PDListAttributeObject.LIST_NUMBERING, + PDListAttributeObject.LIST_NUMBERING_NONE); + } + + /** + * Sets the list numbering (ListNumbering). The value shall be one of the + * following: + *
    + *
  • {@link PDListAttributeObject#LIST_NUMBERING_NONE},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_DISC},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_CIRCLE},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_SQUARE},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_DECIMAL},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_UPPER_ROMAN},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_LOWER_ROMAN},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_UPPER_ALPHA},
  • + *
  • {@link PDListAttributeObject#LIST_NUMBERING_LOWER_ALPHA}.
  • + *
+ * + * @param listNumbering the list numbering + */ + public void setListNumbering(String listNumbering) + { + this.setName(PDListAttributeObject.LIST_NUMBERING, listNumbering); + } + + /** + * Gets the number of rows in the enclosing table that shall be spanned by + * the cell (RowSpan). The default value is 1. + * + * @return the row span + */ + public int getRowSpan() + { + return this.getInteger(PDTableAttributeObject.ROW_SPAN, 1); + } + + /** + * Sets the number of rows in the enclosing table that shall be spanned by + * the cell (RowSpan). + * + * @param rowSpan the row span + */ + public void setRowSpan(int rowSpan) + { + this.setInteger(PDTableAttributeObject.ROW_SPAN, rowSpan); + } + + /** + * Gets the number of columns in the enclosing table that shall be spanned + * by the cell (ColSpan). The default value is 1. + * + * @return the column span + */ + public int getColSpan() + { + return this.getInteger(PDTableAttributeObject.COL_SPAN, 1); + } + + /** + * Sets the number of columns in the enclosing table that shall be spanned + * by the cell (ColSpan). + * + * @param colSpan the column span + */ + public void setColSpan(int colSpan) + { + this.setInteger(PDTableAttributeObject.COL_SPAN, colSpan); + } + + /** + * Gets the headers (Headers). An array of byte strings, where each string + * shall be the element identifier (see the + * {@link org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement#getElementIdentifier()}) for a TH structure + * element that shall be used as a header associated with this cell. + * + * @return the headers. + */ + public String[] getHeaders() + { + return this.getArrayOfString(PDTableAttributeObject.HEADERS); + } + + /** + * Sets the headers (Headers). An array of byte strings, where each string + * shall be the element identifier (see the + * {@link org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement#getElementIdentifier()}) for a TH structure + * element that shall be used as a header associated with this cell. + * + * @param headers the headers + */ + public void setHeaders(String[] headers) + { + this.setArrayOfString(PDTableAttributeObject.HEADERS, headers); + } + + /** + * Gets the scope (Scope). It shall reflect whether the header cell applies + * to the rest of the cells in the row that contains it, the column that + * contains it, or both the row and the column that contain it. + * + * @return the scope + */ + public String getScope() + { + return this.getName(PDTableAttributeObject.SCOPE); + } + + /** + * Sets the scope (Scope). It shall reflect whether the header cell applies + * to the rest of the cells in the row that contains it, the column that + * contains it, or both the row and the column that contain it. The value + * shall be one of the following: + *
    + *
  • {@link PDTableAttributeObject#SCOPE_ROW},
  • + *
  • {@link PDTableAttributeObject#SCOPE_COLUMN}, or
  • + *
  • {@link PDTableAttributeObject#SCOPE_BOTH}.
  • + *
+ * + * @param scope the scope + */ + public void setScope(String scope) + { + this.setName(PDTableAttributeObject.SCOPE, scope); + } + + /** + * Gets the summary of the table’s purpose and structure. + * + * @return the summary + */ + public String getSummary() + { + return this.getString(PDTableAttributeObject.SUMMARY); + } + + /** + * Sets the summary of the table’s purpose and structure. + * + * @param summary the summary + */ + public void setSummary(String summary) + { + this.setString(PDTableAttributeObject.SUMMARY, summary); + } + + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder().append(super.toString()); + if (this.isSpecified(PDListAttributeObject.LIST_NUMBERING)) + { + sb.append(", ListNumbering=").append(this.getListNumbering()); + } + if (this.isSpecified(PDTableAttributeObject.ROW_SPAN)) + { + sb.append(", RowSpan=").append(String.valueOf(this.getRowSpan())); + } + if (this.isSpecified(PDTableAttributeObject.COL_SPAN)) + { + sb.append(", ColSpan=").append(String.valueOf(this.getColSpan())); + } + if (this.isSpecified(PDTableAttributeObject.HEADERS)) + { + sb.append(", Headers=").append(arrayToString(this.getHeaders())); + } + if (this.isSpecified(PDTableAttributeObject.SCOPE)) + { + sb.append(", Scope=").append(this.getScope()); + } + if (this.isSpecified(PDTableAttributeObject.SUMMARY)) + { + sb.append(", Summary=").append(this.getSummary()); + } + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDFourColours.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDFourColours.java new file mode 100644 index 00000000000..760899fdddf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDFourColours.java @@ -0,0 +1,186 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.color.PDGamma; + +/** + * An object for four colours. + * + * @author Johannes Koch + */ +public class PDFourColours implements COSObjectable +{ + + private final COSArray array; + + public PDFourColours() + { + this.array = new COSArray(); + this.array.add(COSNull.NULL); + this.array.add(COSNull.NULL); + this.array.add(COSNull.NULL); + this.array.add(COSNull.NULL); + } + + public PDFourColours(COSArray array) + { + this.array = array; + // ensure that array has 4 items + if (this.array.size() < 4) + { + for (int i = (this.array.size() - 1); i < 4; i++) + { + this.array.add(COSNull.NULL); + } + } + } + + + /** + * Gets the colour for the before edge. + * + * @return the colour for the before edge + */ + public PDGamma getBeforeColour() + { + return this.getColourByIndex(0); + } + + /** + * Sets the colour for the before edge. + * + * @param colour the colour for the before edge + */ + public void setBeforeColour(PDGamma colour) + { + this.setColourByIndex(0, colour); + } + + /** + * Gets the colour for the after edge. + * + * @return the colour for the after edge + */ + public PDGamma getAfterColour() + { + return this.getColourByIndex(1); + } + + /** + * Sets the colour for the after edge. + * + * @param colour the colour for the after edge + */ + public void setAfterColour(PDGamma colour) + { + this.setColourByIndex(1, colour); + } + + /** + * Gets the colour for the start edge. + * + * @return the colour for the start edge + */ + public PDGamma getStartColour() + { + return this.getColourByIndex(2); + } + + /** + * Sets the colour for the start edge. + * + * @param colour the colour for the start edge + */ + public void setStartColour(PDGamma colour) + { + this.setColourByIndex(2, colour); + } + + /** + * Gets the colour for the end edge. + * + * @return the colour for the end edge + */ + public PDGamma getEndColour() + { + return this.getColourByIndex(3); + } + + /** + * Sets the colour for the end edge. + * + * @param colour the colour for the end edge + */ + public void setEndColour(PDGamma colour) + { + this.setColourByIndex(3, colour); + } + + + /** + * {@inheritDoc} + */ + @Override + public COSBase getCOSObject() + { + return this.array; + } + + + /** + * Gets the colour by edge index. + * + * @param index edge index + * @return the colour + */ + private PDGamma getColourByIndex(int index) + { + PDGamma retval = null; + COSBase item = this.array.getObject(index); + if (item instanceof COSArray) + { + retval = new PDGamma((COSArray) item); + } + return retval; + } + + /** + * Sets the colour by edge index. + * + * @param index the edge index + * @param colour the colour + */ + private void setColourByIndex(int index, PDGamma colour) + { + COSBase base; + if (colour == null) + { + base = COSNull.NULL; + } + else + { + base = colour.getCOSArray(); + } + this.array.set(index, base); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDLayoutAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDLayoutAttributeObject.java new file mode 100644 index 00000000000..21ca37755dc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDLayoutAttributeObject.java @@ -0,0 +1,1714 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDGamma; + +/** + * A Layout attribute object. + * + * @author Johannes Koch + */ +public class PDLayoutAttributeObject extends PDStandardAttributeObject +{ + + /** + * standard attribute owner: Layout + */ + public static final String OWNER_LAYOUT = "Layout"; + + private static final String PLACEMENT = "Placement"; + private static final String WRITING_MODE = "WritingMode"; + private static final String BACKGROUND_COLOR = "BackgroundColor"; + private static final String BORDER_COLOR = "BorderColor"; + private static final String BORDER_STYLE = "BorderStyle"; + private static final String BORDER_THICKNESS = "BorderThickness"; + private static final String PADDING = "Padding"; + private static final String COLOR = "Color"; + private static final String SPACE_BEFORE = "SpaceBefore"; + private static final String SPACE_AFTER = "SpaceAfter"; + private static final String START_INDENT = "StartIndent"; + private static final String END_INDENT = "EndIndent"; + private static final String TEXT_INDENT = "TextIndent"; + private static final String TEXT_ALIGN = "TextAlign"; + private static final String BBOX = "BBox"; + private static final String WIDTH = "Width"; + private static final String HEIGHT = "Height"; + private static final String BLOCK_ALIGN = "BlockAlign"; + private static final String INLINE_ALIGN = "InlineAlign"; + private static final String T_BORDER_STYLE = "TBorderStyle"; + private static final String T_PADDING = "TPadding"; + private static final String BASELINE_SHIFT = "BaselineShift"; + private static final String LINE_HEIGHT = "LineHeight"; + private static final String TEXT_DECORATION_COLOR = "TextDecorationColor"; + private static final String TEXT_DECORATION_THICKNESS = "TextDecorationThickness"; + private static final String TEXT_DECORATION_TYPE = "TextDecorationType"; + private static final String RUBY_ALIGN = "RubyAlign"; + private static final String RUBY_POSITION = "RubyPosition"; + private static final String GLYPH_ORIENTATION_VERTICAL = "GlyphOrientationVertical"; + private static final String COLUMN_COUNT = "ColumnCount"; + private static final String COLUMN_GAP = "ColumnGap"; + private static final String COLUMN_WIDTHS = "ColumnWidths"; + + /** + * Placement: Block: Stacked in the block-progression direction within an + * enclosing reference area or parent BLSE. + */ + public static final String PLACEMENT_BLOCK = "Block"; + /** + * Placement: Inline: Packed in the inline-progression direction within an + * enclosing BLSE. + */ + public static final String PLACEMENT_INLINE = "Inline"; + /** + * Placement: Before: Placed so that the before edge of the element’s + * allocation rectangle coincides with that of the nearest enclosing + * reference area. The element may float, if necessary, to achieve the + * specified placement. The element shall be treated as a block occupying + * the full extent of the enclosing reference area in the inline direction. + * Other content shall be stacked so as to begin at the after edge of the + * element’s allocation rectangle. + */ + public static final String PLACEMENT_BEFORE = "Before"; + /** + * Placement: Start: Placed so that the start edge of the element’s + * allocation rectangle coincides with that of the nearest enclosing + * reference area. The element may float, if necessary, to achieve the + * specified placement. Other content that would intrude into the element’s + * allocation rectangle shall be laid out as a runaround. + */ + public static final String PLACEMENT_START = "Start"; + /** + * Placement: End: Placed so that the end edge of the element’s allocation + * rectangle coincides with that of the nearest enclosing reference area. + * The element may float, if necessary, to achieve the specified placement. + * Other content that would intrude into the element’s allocation rectangle + * shall be laid out as a runaround. + */ + public static final String PLACEMENT_END = "End"; + /** + * WritingMode: LrTb: Inline progression from left to right; block + * progression from top to bottom. This is the typical writing mode for + * Western writing systems. + */ + public static final String WRITING_MODE_LRTB = "LrTb"; + /** + * WritingMode: RlTb: Inline progression from right to left; block + * progression from top to bottom. This is the typical writing mode for + * Arabic and Hebrew writing systems. + */ + public static final String WRITING_MODE_RLTB = "RlTb"; + /** + * WritingMode: TbRl: Inline progression from top to bottom; block + * progression from right to left. This is the typical writing mode for + * Chinese and Japanese writing systems. + */ + public static final String WRITING_MODE_TBRL = "TbRl"; + /** + * BorderStyle: None: No border. Forces the computed value of + * BorderThickness to be 0. + */ + public static final String BORDER_STYLE_NONE = "None"; + /** + * BorderStyle: Hidden: Same as {@link #BORDER_STYLE_NONE}, except in terms + * of border conflict resolution for table elements. + */ + public static final String BORDER_STYLE_HIDDEN = "Hidden"; + /** + * BorderStyle: Dotted: The border is a series of dots. + */ + public static final String BORDER_STYLE_DOTTED = "Dotted"; + /** + * BorderStyle: Dashed: The border is a series of short line segments. + */ + public static final String BORDER_STYLE_DASHED = "Dashed"; + /** + * BorderStyle: Solid: The border is a single line segment. + */ + public static final String BORDER_STYLE_SOLID = "Solid"; + /** + * BorderStyle: Double: The border is two solid lines. The sum of the two + * lines and the space between them equals the value of BorderThickness. + */ + public static final String BORDER_STYLE_DOUBLE = "Double"; + /** + * BorderStyle: Groove: The border looks as though it were carved into the + * canvas. + */ + public static final String BORDER_STYLE_GROOVE = "Groove"; + /** + * BorderStyle: Ridge: The border looks as though it were coming out of the + * canvas (the opposite of {@link #BORDER_STYLE_GROOVE}). + */ + public static final String BORDER_STYLE_RIDGE = "Ridge"; + /** + * BorderStyle: Inset: The border makes the entire box look as though it + * were embedded in the canvas. + */ + public static final String BORDER_STYLE_INSET = "Inset"; + /** + * BorderStyle: Outset: The border makes the entire box look as though it + * were coming out of the canvas (the opposite of {@link #BORDER_STYLE_INSET}. + */ + public static final String BORDER_STYLE_OUTSET = "Outset"; + /** + * TextAlign: Start: Aligned with the start edge. + */ + public static final String TEXT_ALIGN_START = "Start"; + /** + * TextAlign: Center: Centered between the start and end edges. + */ + public static final String TEXT_ALIGN_CENTER = "Center"; + /** + * TextAlign: End: Aligned with the end edge. + */ + public static final String TEXT_ALIGN_END = "End"; + /** + * TextAlign: Justify: Aligned with both the start and end edges, with + * internal spacing within each line expanded, if necessary, to achieve such + * alignment. The last (or only) line shall be aligned with the start edge + * only. + */ + public static final String TEXT_ALIGN_JUSTIFY = "Justify"; + /** + * Width: Auto + */ + public static final String WIDTH_AUTO = "Auto"; + /** + * Height: Auto + */ + public static final String HEIGHT_AUTO = "Auto"; + /** + * BlockAlign: Before: Before edge of the first child’s allocation rectangle + * aligned with that of the table cell’s content rectangle. + */ + public static final String BLOCK_ALIGN_BEFORE = "Before"; + /** + * BlockAlign: Middle: Children centered within the table cell. The distance + * between the before edge of the first child’s allocation rectangle and + * that of the table cell’s content rectangle shall be the same as the + * distance between the after edge of the last child’s allocation rectangle + * and that of the table cell’s content rectangle. + */ + public static final String BLOCK_ALIGN_MIDDLE = "Middle"; + /** + * BlockAlign: After: After edge of the last child’s allocation rectangle + * aligned with that of the table cell’s content rectangle. + */ + public static final String BLOCK_ALIGN_AFTER = "After"; + /** + * BlockAlign: Justify: Children aligned with both the before and after + * edges of the table cell’s content rectangle. The first child shall be + * placed as described for {@link #BLOCK_ALIGN_BEFORE} and the last child as + * described for {@link #BLOCK_ALIGN_AFTER}, with equal spacing between the + * children. If there is only one child, it shall be aligned with the before + * edge only, as for {@link #BLOCK_ALIGN_BEFORE}. + */ + public static final String BLOCK_ALIGN_JUSTIFY = "Justify"; + /** + * InlineAlign: Start: Start edge of each child’s allocation rectangle + * aligned with that of the table cell’s content rectangle. + */ + public static final String INLINE_ALIGN_START = "Start"; + /** + * InlineAlign: Center: Each child centered within the table cell. The + * distance between the start edges of the child’s allocation rectangle and + * the table cell’s content rectangle shall be the same as the distance + * between their end edges. + */ + public static final String INLINE_ALIGN_CENTER = "Center"; + /** + * InlineAlign: End: End edge of each child’s allocation rectangle aligned + * with that of the table cell’s content rectangle. + */ + public static final String INLINE_ALIGN_END = "End"; + /** + * LineHeight: NormalAdjust the line height to include any nonzero value + * specified for BaselineShift. + */ + public static final String LINE_HEIGHT_NORMAL = "Normal"; + /** + * LineHeight: Auto: Adjustment for the value of BaselineShift shall not be + * made. + */ + public static final String LINE_HEIGHT_AUTO = "Auto"; + /** + * TextDecorationType: None: No text decoration + */ + public static final String TEXT_DECORATION_TYPE_NONE = "None"; + /** + * TextDecorationType: Underline: A line below the text + */ + public static final String TEXT_DECORATION_TYPE_UNDERLINE = "Underline"; + /** + * TextDecorationType: Overline: A line above the text + */ + public static final String TEXT_DECORATION_TYPE_OVERLINE = "Overline"; + /** + * TextDecorationType: LineThrough: A line through the middle of the text + */ + public static final String TEXT_DECORATION_TYPE_LINE_THROUGH = "LineThrough"; + /** + * RubyAlign: Start: The content shall be aligned on the start edge in the + * inline-progression direction. + */ + public static final String RUBY_ALIGN_START = "Start"; + /** + * RubyAlign: Center: The content shall be centered in the + * inline-progression direction. + */ + public static final String RUBY_ALIGN_CENTER = "Center"; + /** + * RubyAlign: End: The content shall be aligned on the end edge in the + * inline-progression direction. + */ + public static final String RUBY_ALIGN_END = "End"; + /** + * RubyAlign: Justify: The content shall be expanded to fill the available + * width in the inline-progression direction. + */ + public static final String RUBY_ALIGN_JUSTIFY = "Justify"; + /** + * RubyAlign: Distribute: The content shall be expanded to fill the + * available width in the inline-progression direction. However, space shall + * also be inserted at the start edge and end edge of the text. The spacing + * shall be distributed using a 1:2:1 (start:infix:end) ratio. It shall be + * changed to a 0:1:1 ratio if the ruby appears at the start of a text line + * or to a 1:1:0 ratio if the ruby appears at the end of the text line. + */ + public static final String RUBY_ALIGN_DISTRIBUTE = "Distribute"; + /** + * RubyPosition: Before: The RT content shall be aligned along the before + * edge of the element. + */ + public static final String RUBY_POSITION_BEFORE = "Before"; + /** + * RubyPosition: After: The RT content shall be aligned along the after edge + * of the element. + */ + public static final String RUBY_POSITION_AFTER = "After"; + /** + * RubyPosition: Warichu: The RT and associated RP elements shall be + * formatted as a warichu, following the RB element. + */ + public static final String RUBY_POSITION_WARICHU = "Warichu"; + /** + * RubyPosition: Inline: The RT and associated RP elements shall be + * formatted as a parenthesis comment, following the RB element. + */ + public static final String RUBY_POSITION_INLINE = "Inline"; + /** + * GlyphOrientationVertical: Auto + */ + public static final String GLYPH_ORIENTATION_VERTICAL_AUTO = "Auto"; + /** + * GlyphOrientationVertical: -180° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_MINUS_180_DEGREES = "-180"; + /** + * GlyphOrientationVertical: -90° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_MINUS_90_DEGREES = "-90"; + /** + * GlyphOrientationVertical: 0° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_ZERO_DEGREES = "0"; + /** + * GlyphOrientationVertical: 90° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_90_DEGREES = "90"; + /** + * GlyphOrientationVertical: 180° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_180_DEGREES = "180"; + /** + * GlyphOrientationVertical: 270° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_270_DEGREES = "270"; + /** + * GlyphOrientationVertical: 360° + */ + public static final String GLYPH_ORIENTATION_VERTICAL_360_DEGREES = "360"; + + + /** + * Default constructor. + */ + public PDLayoutAttributeObject() + { + this.setOwner(OWNER_LAYOUT); + } + + /** + * Creates a new Layout attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDLayoutAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the positioning of the element with respect to the enclosing + * reference area and other content (Placement). The default value is + * {@link #PLACEMENT_INLINE}. + * + * @return the placement + */ + public String getPlacement() + { + return this.getName(PLACEMENT, PLACEMENT_INLINE); + } + + /** + * Sets the positioning of the element with respect to the enclosing + * reference area and other content (Placement). The value should be one of: + *
    + *
  • {@link #PLACEMENT_BLOCK},
  • + *
  • {@link #PLACEMENT_INLINE},
  • + *
  • {@link #PLACEMENT_BEFORE},
  • + *
  • {@link #PLACEMENT_START},
  • + *
  • {@link #PLACEMENT_END}.
  • + *
+ * + * @param placement the placement + */ + public void setPlacement(String placement) + { + this.setName(PLACEMENT, placement); + } + + /** + * Gets the writing mode (WritingMode). The default value is + * {@link #WRITING_MODE_LRTB}. + * + * @return the writing mode + */ + public String getWritingMode() + { + return this.getName(WRITING_MODE, WRITING_MODE_LRTB); + } + + /** + * Sets the writing mode (WritingMode). The value should be one of: + *
    + *
  • {@link #WRITING_MODE_LRTB},
  • + *
  • {@link #WRITING_MODE_RLTB},
  • + *
  • {@link #WRITING_MODE_TBRL}.
  • + *
+ * + * @param writingMode the writing mode + */ + public void setWritingMode(String writingMode) + { + this.setName(WRITING_MODE, writingMode); + } + + /** + * Gets the background colour (BackgroundColor). + * + * @return the background colour + */ + public PDGamma getBackgroundColor() + { + return this.getColor(BACKGROUND_COLOR); + } + + /** + * Sets the background colour (BackgroundColor). + * + * @param backgroundColor the background colour + */ + public void setBackgroundColor(PDGamma backgroundColor) + { + this.setColor(BACKGROUND_COLOR, backgroundColor); + } + + /** + * Gets the border colour (BorderColor). + * + * @return a single border colour ({@link PDGamma}) or four border colours + * ({@link PDFourColours}) + */ + public Object getBorderColors() + { + return this.getColorOrFourColors(BORDER_COLOR); + } + + /** + * Sets the same border colour for all four sides (BorderColor). + * + * @param borderColor the border colour + */ + public void setAllBorderColors(PDGamma borderColor) + { + this.setColor(BORDER_COLOR, borderColor); + } + + /** + * Sets the border colours for four sides separately (BorderColor). + * + * @param borderColors the border colours + */ + public void setBorderColors(PDFourColours borderColors) + { + this.setFourColors(BORDER_COLOR, borderColors); + } + + /** + * Gets the border style (BorderStyle). The default value is + * {@link #BORDER_STYLE_NONE}. + * + * @return the border styles (a String or an array of four Strings) + */ + public Object getBorderStyle() + { + return this.getNameOrArrayOfName(BORDER_STYLE, BORDER_STYLE_NONE); + } + + /** + * Sets the same border style for all four sides (BorderStyle). The value + * should be one of: + *
    + *
  • {@link #BORDER_STYLE_NONE},
  • + *
  • {@link #BORDER_STYLE_HIDDEN},
  • + *
  • {@link #BORDER_STYLE_DOTTED},
  • + *
  • {@link #BORDER_STYLE_DASHED},
  • + *
  • {@link #BORDER_STYLE_SOLID},
  • + *
  • {@link #BORDER_STYLE_DOUBLE},
  • + *
  • {@link #BORDER_STYLE_GROOVE},
  • + *
  • {@link #BORDER_STYLE_RIDGE},
  • + *
  • {@link #BORDER_STYLE_INSET},
  • + *
  • {@link #BORDER_STYLE_OUTSET}.
  • + *
+ * + * @param borderStyle the border style + */ + public void setAllBorderStyles(String borderStyle) + { + this.setName(BORDER_STYLE, borderStyle); + } + + /** + * Sets the border styles for four sides separately (BorderStyle). The + * values should be of: + *
    + *
  • {@link #BORDER_STYLE_NONE},
  • + *
  • {@link #BORDER_STYLE_HIDDEN},
  • + *
  • {@link #BORDER_STYLE_DOTTED},
  • + *
  • {@link #BORDER_STYLE_DASHED},
  • + *
  • {@link #BORDER_STYLE_SOLID},
  • + *
  • {@link #BORDER_STYLE_DOUBLE},
  • + *
  • {@link #BORDER_STYLE_GROOVE},
  • + *
  • {@link #BORDER_STYLE_RIDGE},
  • + *
  • {@link #BORDER_STYLE_INSET},
  • + *
  • {@link #BORDER_STYLE_OUTSET}.
  • + *
+ * + * @param borderStyles the border styles (an array of four Strings) + */ + public void setBorderStyles(String[] borderStyles) + { + this.setArrayOfName(BORDER_STYLE, borderStyles); + } + + /** + * Gets the border thickness (BorderThickness). + * + * @return the border thickness (a Float or an array of four floats) + */ + public Object getBorderThickness() + { + return this.getNumberOrArrayOfNumber(BORDER_THICKNESS, UNSPECIFIED); + } + + /** + * Sets the same border thickness for all four sides (BorderThickness). + * + * @param borderThickness the border thickness + */ + public void setAllBorderThicknesses(float borderThickness) + { + this.setNumber(BORDER_THICKNESS, borderThickness); + } + + /** + * Sets the same border thickness for all four sides (BorderThickness). + * + * @param borderThickness the border thickness + */ + public void setAllBorderThicknesses(int borderThickness) + { + this.setNumber(BORDER_THICKNESS, borderThickness); + } + + /** + * Sets the border thicknesses for four sides separately (BorderThickness). + * + * @param borderThicknesses the border thickness (an array of four floats) + */ + public void setBorderThicknesses(float[] borderThicknesses) + { + this.setArrayOfNumber(BORDER_THICKNESS, borderThicknesses); + } + + /** + * Gets the padding (Padding). The default value is 0. + * + * @return the padding (a Float or an array of float) + */ + public Object getPadding() + { + return this.getNumberOrArrayOfNumber(PADDING, 0.f); + } + + /** + * Sets the same padding for all four sides (Padding). + * + * @param padding the padding + */ + public void setAllPaddings(float padding) + { + this.setNumber(PADDING, padding); + } + + /** + * Sets the same padding for all four sides (Padding). + * + * @param padding the padding + */ + public void setAllPaddings(int padding) + { + this.setNumber(PADDING, padding); + } + + /** + * Sets the paddings for four sides separately (Padding). + * + * @param paddings the paddings (an array of four floats) + */ + public void setPaddings(float[] paddings) + { + this.setArrayOfNumber(PADDING, paddings); + } + + /** + * Gets the color to be used for drawing text and the default value for the + * colour of table borders and text decorations (Color). + * + * @return the colour + */ + public PDGamma getColor() + { + return this.getColor(COLOR); + } + + /** + * Sets the color to be used for drawing text and the default value for the + * colour of table borders and text decorations (Color). + * + * @param color the colour + */ + public void setColor(PDGamma color) + { + this.setColor(COLOR, color); + } + + /** + * Gets the amount of extra space preceding the before edge of the BLSE in + * the block-progression direction (SpaceBefore). The default value is 0. + * + * @return the space before + */ + public float getSpaceBefore() + { + return this.getNumber(SPACE_BEFORE, 0.f); + } + + /** + * Sets the amount of extra space preceding the before edge of the BLSE in + * the block-progression direction (SpaceBefore). + * + * @param spaceBefore the space before + */ + public void setSpaceBefore(float spaceBefore) + { + this.setNumber(SPACE_BEFORE, spaceBefore); + } + + /** + * Sets the amount of extra space preceding the before edge of the BLSE in + * the block-progression direction (SpaceBefore). + * + * @param spaceBefore the space before + */ + public void setSpaceBefore(int spaceBefore) + { + this.setNumber(SPACE_BEFORE, spaceBefore); + } + + /** + * Gets the amount of extra space following the after edge of the BLSE in + * the block-progression direction (SpaceAfter). The default value is 0. + * + * @return the space after + */ + public float getSpaceAfter() + { + return this.getNumber(SPACE_AFTER, 0.f); + } + + /** + * Sets the amount of extra space following the after edge of the BLSE in + * the block-progression direction (SpaceAfter). + * + * @param spaceAfter the space after + */ + public void setSpaceAfter(float spaceAfter) + { + this.setNumber(SPACE_AFTER, spaceAfter); + } + + /** + * Sets the amount of extra space following the after edge of the BLSE in + * the block-progression direction (SpaceAfter). + * + * @param spaceAfter the space after + */ + public void setSpaceAfter(int spaceAfter) + { + this.setNumber(SPACE_AFTER, spaceAfter); + } + + /** + * Gets the distance from the start edge of the reference area to that of + * the BLSE in the inline-progression direction (StartIndent). The default value is 0. + * + * @return the start indent + */ + public float getStartIndent() + { + return this.getNumber(START_INDENT, 0.f); + } + + /** + * Sets the distance from the start edge of the reference area to that of + * the BLSE in the inline-progression direction (StartIndent). + * + * @param startIndent the start indent + */ + public void setStartIndent(float startIndent) + { + this.setNumber(START_INDENT, startIndent); + } + + /** + * Sets the distance from the start edge of the reference area to that of + * the BLSE in the inline-progression direction (StartIndent). + * + * @param startIndent the start indent + */ + public void setStartIndent(int startIndent) + { + this.setNumber(START_INDENT, startIndent); + } + + /** + * Gets the distance from the end edge of the BLSE to that of the reference + * area in the inline-progression direction (EndIndent). The default value + * is 0. + * + * @return the end indent + */ + public float getEndIndent() + { + return this.getNumber(END_INDENT, 0.f); + } + + /** + * Sets the distance from the end edge of the BLSE to that of the reference + * area in the inline-progression direction (EndIndent). + * + * @param endIndent the end indent + */ + public void setEndIndent(float endIndent) + { + this.setNumber(END_INDENT, endIndent); + } + + /** + * Sets the distance from the end edge of the BLSE to that of the reference + * area in the inline-progression direction (EndIndent). + * + * @param endIndent the end indent + */ + public void setEndIndent(int endIndent) + { + this.setNumber(END_INDENT, endIndent); + } + + /** + * Gets the additional distance in the inline-progression direction from the + * start edge of the BLSE, as specified by StartIndent, to that of the first + * line of text (TextIndent). The default value is 0. + * + * @return the text indent + */ + public float getTextIndent() + { + return this.getNumber(TEXT_INDENT, 0.f); + } + + /** + * Sets the additional distance in the inline-progression direction from the + * start edge of the BLSE, as specified by StartIndent, to that of the first + * line of text (TextIndent). + * + * @param textIndent the text indent + */ + public void setTextIndent(float textIndent) + { + this.setNumber(TEXT_INDENT, textIndent); + } + + /** + * Sets the additional distance in the inline-progression direction from the + * start edge of the BLSE, as specified by StartIndent, to that of the first + * line of text (TextIndent). + * + * @param textIndent the text indent + */ + public void setTextIndent(int textIndent) + { + this.setNumber(TEXT_INDENT, textIndent); + } + + /** + * Gets the alignment, in the inline-progression direction, of text and + * other content within lines of the BLSE (TextAlign). The default value is + * {@link #TEXT_ALIGN_START}. + * + * @return the text alignment + */ + public String getTextAlign() + { + return this.getName(TEXT_ALIGN, TEXT_ALIGN_START); + } + + /** + * Sets the alignment, in the inline-progression direction, of text and + * other content within lines of the BLSE (TextAlign). The value should be + * one of: + *
    + *
  • {@link #TEXT_ALIGN_START},
  • + *
  • {@link #TEXT_ALIGN_CENTER},
  • + *
  • {@link #TEXT_ALIGN_END},
  • + *
  • {@link #TEXT_ALIGN_JUSTIFY}.
  • + *
+ * + * @param textIndent the text alignment + */ + public void setTextAlign(String textIndent) + { + this.setName(TEXT_ALIGN, textIndent); + } + + /** + * Gets the bounding box. + * + * @return the bounding box. + */ + public PDRectangle getBBox() + { + COSArray array = + (COSArray) this.getCOSObject().getDictionaryObject(BBOX); + if (array != null) + { + return new PDRectangle(array); + } + return null; + } + + /** + * Sets the bounding box. + * + * @param bbox the bounding box + */ + public void setBBox(PDRectangle bbox) + { + String name = BBOX; + COSBase oldValue = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setItem(name, bbox); + COSBase newValue = bbox == null ? null : bbox.getCOSObject(); + this.potentiallyNotifyChanged(oldValue, newValue); + } + + /** + * Gets the width of the element’s content rectangle in the + * inline-progression direction (Width). The default value is + * {@link #WIDTH_AUTO}. + * + * @return the width (a Float or a String) + */ + public Object getWidth() + { + return this.getNumberOrName(WIDTH, WIDTH_AUTO); + } + + /** + * Sets the width of the element’s content rectangle in the + * inline-progression direction (Width) to {@link #WIDTH_AUTO}. + */ + public void setWidthAuto() + { + this.setName(WIDTH, WIDTH_AUTO); + } + + /** + * Sets the width of the element’s content rectangle in the + * inline-progression direction (Width). + * + * @param width the width + */ + public void setWidth(float width) + { + this.setNumber(WIDTH, width); + } + + /** + * Sets the width of the element’s content rectangle in the + * inline-progression direction (Width). + * + * @param width the width + */ + public void setWidth(int width) + { + this.setNumber(WIDTH, width); + } + + /** + * Gets the height of the element’s content rectangle in the + * block-progression direction (Height). The default value is + * {@link #HEIGHT_AUTO}. + * + * @return the height (a Float or a String) + */ + public Object getHeight() + { + return this.getNumberOrName(HEIGHT, HEIGHT_AUTO); + } + + /** + * Sets the height of the element’s content rectangle in the + * block-progression direction (Height) to {@link #HEIGHT_AUTO}. + */ + public void setHeightAuto() + { + this.setName(HEIGHT, HEIGHT_AUTO); + } + + /** + * Sets the height of the element’s content rectangle in the + * block-progression direction (Height). + * + * @param height the height + */ + public void setHeight(float height) + { + this.setNumber(HEIGHT, height); + } + + /** + * Sets the height of the element’s content rectangle in the + * block-progression direction (Height). + * + * @param height the height + */ + public void setHeight(int height) + { + this.setNumber(HEIGHT, height); + } + + /** + * Gets the alignment, in the block-progression direction, of content within + * the table cell (BlockAlign). The default value is + * {@link #BLOCK_ALIGN_BEFORE}. + * + * @return the block alignment + */ + public String getBlockAlign() + { + return this.getName(BLOCK_ALIGN, BLOCK_ALIGN_BEFORE); + } + + /** + * Sets the alignment, in the block-progression direction, of content within + * the table cell (BlockAlign). The value should be one of: + *
    + *
  • {@link #BLOCK_ALIGN_BEFORE},
  • + *
  • {@link #BLOCK_ALIGN_MIDDLE},
  • + *
  • {@link #BLOCK_ALIGN_AFTER},
  • + *
  • {@link #BLOCK_ALIGN_JUSTIFY}.
  • + *
+ * + * @param blockAlign the block alignment + */ + public void setBlockAlign(String blockAlign) + { + this.setName(BLOCK_ALIGN, blockAlign); + } + + /** + * Gets the alignment, in the inline-progression direction, of content + * within the table cell (InlineAlign). The default value is + * {@link #INLINE_ALIGN_START}. + * + * @return the inline alignment + */ + public String getInlineAlign() + { + return this.getName(INLINE_ALIGN, INLINE_ALIGN_START); + } + + /** + * Sets the alignment, in the inline-progression direction, of content + * within the table cell (InlineAlign). The value should be one of + *
    + *
  • {@link #INLINE_ALIGN_START},
  • + *
  • {@link #INLINE_ALIGN_CENTER},
  • + *
  • {@link #INLINE_ALIGN_END}.
  • + *
+ * + * @param inlineAlign the inline alignment + */ + public void setInlineAlign(String inlineAlign) + { + this.setName(INLINE_ALIGN, inlineAlign); + } + + /** + * Gets the style of the border drawn on each edge of a table cell + * (TBorderStyle). + * + * @return the border style. + */ + public Object getTBorderStyle() + { + return this.getNameOrArrayOfName(T_BORDER_STYLE, BORDER_STYLE_NONE); + } + + /** + * Sets the same table border style for all four sides (TBorderStyle). The + * value should be one of: + *
    + *
  • {@link #BORDER_STYLE_NONE},
  • + *
  • {@link #BORDER_STYLE_HIDDEN},
  • + *
  • {@link #BORDER_STYLE_DOTTED},
  • + *
  • {@link #BORDER_STYLE_DASHED},
  • + *
  • {@link #BORDER_STYLE_SOLID},
  • + *
  • {@link #BORDER_STYLE_DOUBLE},
  • + *
  • {@link #BORDER_STYLE_GROOVE},
  • + *
  • {@link #BORDER_STYLE_RIDGE},
  • + *
  • {@link #BORDER_STYLE_INSET},
  • + *
  • {@link #BORDER_STYLE_OUTSET}.
  • + *
+ * + * @param tBorderStyle the table border style + */ + public void setAllTBorderStyles(String tBorderStyle) + { + this.setName(T_BORDER_STYLE, tBorderStyle); + } + + /** + * Sets the style of the border drawn on each edge of a table cell + * (TBorderStyle). The values should be of: + *
    + *
  • {@link #BORDER_STYLE_NONE},
  • + *
  • {@link #BORDER_STYLE_HIDDEN},
  • + *
  • {@link #BORDER_STYLE_DOTTED},
  • + *
  • {@link #BORDER_STYLE_DASHED},
  • + *
  • {@link #BORDER_STYLE_SOLID},
  • + *
  • {@link #BORDER_STYLE_DOUBLE},
  • + *
  • {@link #BORDER_STYLE_GROOVE},
  • + *
  • {@link #BORDER_STYLE_RIDGE},
  • + *
  • {@link #BORDER_STYLE_INSET},
  • + *
  • {@link #BORDER_STYLE_OUTSET}.
  • + *
+ * + * @param tBorderStyles + */ + public void setTBorderStyles(String[] tBorderStyles) + { + this.setArrayOfName(T_BORDER_STYLE, tBorderStyles); + } + + /** + * Gets the offset to account for the separation between the table cell’s + * content rectangle and the surrounding border (TPadding). The default + * value is 0. + * + * @return the table padding (a Float or an array of float) + */ + public Object getTPadding() + { + return this.getNumberOrArrayOfNumber(T_PADDING, 0.f); + } + + /** + * Sets the same table padding for all four sides (TPadding). + * + * @param tPadding the table padding + */ + public void setAllTPaddings(float tPadding) + { + this.setNumber(T_PADDING, tPadding); + } + + /** + * Sets the same table padding for all four sides (TPadding). + * + * @param tPadding the table padding + */ + public void setAllTPaddings(int tPadding) + { + this.setNumber(T_PADDING, tPadding); + } + + /** + * Sets the table paddings for four sides separately (TPadding). + * + * @param tPaddings the table paddings (an array of four floats) + */ + public void setTPaddings(float[] tPaddings) + { + this.setArrayOfNumber(T_PADDING, tPaddings); + } + + /** + * Gets the distance by which the element’s baseline shall be shifted + * relative to that of its parent element (BaselineShift). The default value + * is 0. + * + * @return the baseline shift + */ + public float getBaselineShift() + { + return this.getNumber(BASELINE_SHIFT, 0.f); + } + + /** + * Sets the distance by which the element’s baseline shall be shifted + * relative to that of its parent element (BaselineShift). + * + * @param baselineShift the baseline shift + */ + public void setBaselineShift(float baselineShift) + { + this.setNumber(BASELINE_SHIFT, baselineShift); + } + + /** + * Sets the distance by which the element’s baseline shall be shifted + * relative to that of its parent element (BaselineShift). + * + * @param baselineShift the baseline shift + */ + public void setBaselineShift(int baselineShift) + { + this.setNumber(BASELINE_SHIFT, baselineShift); + } + + /** + * Gets the element’s preferred height in the block-progression direction + * (LineHeight). The default value is {@link #LINE_HEIGHT_NORMAL}. + * + * @return the line height (a Float or a String) + */ + public Object getLineHeight() + { + return this.getNumberOrName(LINE_HEIGHT, LINE_HEIGHT_NORMAL); + } + + /** + * Sets the element’s preferred height in the block-progression direction + * (LineHeight) to {@link #LINE_HEIGHT_NORMAL}. + */ + public void setLineHeightNormal() + { + this.setName(LINE_HEIGHT, LINE_HEIGHT_NORMAL); + } + + /** + * Sets the element’s preferred height in the block-progression direction + * (LineHeight) to {@link #LINE_HEIGHT_AUTO}. + */ + public void setLineHeightAuto() + { + this.setName(LINE_HEIGHT, LINE_HEIGHT_AUTO); + } + + /** + * Sets the element’s preferred height in the block-progression direction + * (LineHeight). + * + * @param lineHeight the line height + */ + public void setLineHeight(float lineHeight) + { + this.setNumber(LINE_HEIGHT, lineHeight); + } + + /** + * Sets the element’s preferred height in the block-progression direction + * (LineHeight). + * + * @param lineHeight the line height + */ + public void setLineHeight(int lineHeight) + { + this.setNumber(LINE_HEIGHT, lineHeight); + } + + /** + * Gets the colour to be used for drawing text decorations + * (TextDecorationColor). + * + * @return the text decoration colour + */ + public PDGamma getTextDecorationColor() + { + return this.getColor(TEXT_DECORATION_COLOR); + } + + /** + * Sets the colour to be used for drawing text decorations + * (TextDecorationColor). + * + * @param textDecorationColor the text decoration colour + */ + public void setTextDecorationColor(PDGamma textDecorationColor) + { + this.setColor(TEXT_DECORATION_COLOR, textDecorationColor); + } + + /** + * Gets the thickness of each line drawn as part of the text decoration + * (TextDecorationThickness). + * + * @return the text decoration thickness + */ + public float getTextDecorationThickness() + { + return this.getNumber(TEXT_DECORATION_THICKNESS); + } + + /** + * Sets the thickness of each line drawn as part of the text decoration + * (TextDecorationThickness). + * + * @param textDecorationThickness the text decoration thickness + */ + public void setTextDecorationThickness(float textDecorationThickness) + { + this.setNumber(TEXT_DECORATION_THICKNESS, textDecorationThickness); + } + + /** + * Sets the thickness of each line drawn as part of the text decoration + * (TextDecorationThickness). + * + * @param textDecorationThickness the text decoration thickness + */ + public void setTextDecorationThickness(int textDecorationThickness) + { + this.setNumber(TEXT_DECORATION_THICKNESS, textDecorationThickness); + } + + /** + * Gets the type of text decoration (TextDecorationType). The default value + * is {@link #TEXT_DECORATION_TYPE_NONE}. + * + * @return the type of text decoration + */ + public String getTextDecorationType() + { + return this.getName(TEXT_DECORATION_TYPE, TEXT_DECORATION_TYPE_NONE); + } + + /** + * Sets the type of text decoration (TextDecorationType). The value should + * be one of: + *
    + *
  • {@link #TEXT_DECORATION_TYPE_NONE},
  • + *
  • {@link #TEXT_DECORATION_TYPE_UNDERLINE},
  • + *
  • {@link #TEXT_DECORATION_TYPE_OVERLINE},
  • + *
  • {@link #TEXT_DECORATION_TYPE_LINE_THROUGH}.
  • + *
+ * + * @param textDecorationType the type of text decoration + */ + public void setTextDecorationType(String textDecorationType) + { + this.setName(TEXT_DECORATION_TYPE, textDecorationType); + } + + /** + * Gets the justification of the lines within a ruby assembly (RubyAlign). + * The default value is {@link #RUBY_ALIGN_DISTRIBUTE}. + * + * @return the ruby alignment + */ + public String getRubyAlign() + { + return this.getName(RUBY_ALIGN, RUBY_ALIGN_DISTRIBUTE); + } + + /** + * Sets the justification of the lines within a ruby assembly (RubyAlign). + * The value should be one of: + *
    + *
  • {@link #RUBY_ALIGN_START},
  • + *
  • {@link #RUBY_ALIGN_CENTER},
  • + *
  • {@link #RUBY_ALIGN_END},
  • + *
  • {@link #RUBY_ALIGN_JUSTIFY},
  • + *
  • {@link #RUBY_ALIGN_DISTRIBUTE},
  • + *
+ * + * @param rubyAlign the ruby alignment + */ + public void setRubyAlign(String rubyAlign) + { + this.setName(RUBY_ALIGN, rubyAlign); + } + + /** + * Gets the placement of the RT structure element relative to the RB element + * in a ruby assembly (RubyPosition). The default value is + * {@link #RUBY_POSITION_BEFORE}. + * + * @return the ruby position + */ + public String getRubyPosition() + { + return this.getName(RUBY_POSITION, RUBY_POSITION_BEFORE); + } + + /** + * Sets the placement of the RT structure element relative to the RB element + * in a ruby assembly (RubyPosition). The value should be one of: + *
    + *
  • {@link #RUBY_POSITION_BEFORE},
  • + *
  • {@link #RUBY_POSITION_AFTER},
  • + *
  • {@link #RUBY_POSITION_WARICHU},
  • + *
  • {@link #RUBY_POSITION_INLINE}.
  • + *
+ * + * @param rubyPosition the ruby position + */ + public void setRubyPosition(String rubyPosition) + { + this.setName(RUBY_POSITION, rubyPosition); + } + + /** + * Gets the orientation of glyphs when the inline-progression direction is + * top to bottom or bottom to top (GlyphOrientationVertical). The default + * value is {@link #GLYPH_ORIENTATION_VERTICAL_AUTO}. + * + * @return the vertical glyph orientation + */ + public String getGlyphOrientationVertical() + { + return this.getName(GLYPH_ORIENTATION_VERTICAL, + GLYPH_ORIENTATION_VERTICAL_AUTO); + } + + /** + * Sets the orientation of glyphs when the inline-progression direction is + * top to bottom or bottom to top (GlyphOrientationVertical). The value + * should be one of: + *
    + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_AUTO},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_MINUS_180_DEGREES},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_MINUS_90_DEGREES},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_ZERO_DEGREES},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_90_DEGREES},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_180_DEGREES},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_270_DEGREES},
  • + *
  • {@link #GLYPH_ORIENTATION_VERTICAL_360_DEGREES}.
  • + *
+ * + * @param glyphOrientationVertical the vertical glyph orientation + */ + public void setGlyphOrientationVertical(String glyphOrientationVertical) + { + this.setName(GLYPH_ORIENTATION_VERTICAL, glyphOrientationVertical); + } + + /** + * Gets the number of columns in the content of the grouping element + * (ColumnCount). The default value is 1. + * + * @return the column count + */ + public int getColumnCount() + { + return this.getInteger(COLUMN_COUNT, 1); + } + + /** + * Sets the number of columns in the content of the grouping element + * (ColumnCount). + * + * @param columnCount the column count + */ + public void setColumnCount(int columnCount) + { + this.setInteger(COLUMN_COUNT, columnCount); + } + + /** + * Gets the desired space between adjacent columns in the inline-progression + * direction (ColumnGap). + * + * @return the column gap (FLoat or array of floats) + */ + public Object getColumnGap() + { + return this.getNumberOrArrayOfNumber(COLUMN_GAP, UNSPECIFIED); + } + + /** + * Sets the desired space between all columns in the inline-progression + * direction (ColumnGap). + * + * @param columnGap the column gap + */ + public void setColumnGap(float columnGap) + { + this.setNumber(COLUMN_GAP, columnGap); + } + + /** + * Sets the desired space between all columns in the inline-progression + * direction (ColumnGap). + * + * @param columnGap the column gap + */ + public void setColumnGap(int columnGap) + { + this.setNumber(COLUMN_GAP, columnGap); + } + + /** + * Sets the desired space between adjacent columns in the inline-progression + * direction (ColumnGap), the first element specifying the space between the + * first and second columns, the second specifying the space between the + * second and third columns, and so on. + * + * @param columnGaps the column gaps + */ + public void setColumnGaps(float[] columnGaps) + { + this.setArrayOfNumber(COLUMN_GAP, columnGaps); + } + + /** + * Gets the desired width of the columns, measured in default user space + * units in the inline-progression direction (ColumnWidths). + * + * @return the column widths (Float or array of floats) + */ + public Object getColumnWidths() + { + return this.getNumberOrArrayOfNumber(COLUMN_WIDTHS, UNSPECIFIED); + } + + /** + * Sets the same column width for all columns (ColumnWidths). + * + * @param columnWidth the column width + */ + public void setAllColumnWidths(float columnWidth) + { + this.setNumber(COLUMN_WIDTHS, columnWidth); + } + + /** + * Sets the same column width for all columns (ColumnWidths). + * + * @param columnWidth the column width + */ + public void setAllColumnWidths(int columnWidth) + { + this.setNumber(COLUMN_WIDTHS, columnWidth); + } + + /** + * Sets the column widths for the columns separately (ColumnWidths). + * + * @param columnWidths the column widths + */ + public void setColumnWidths(float[] columnWidths) + { + this.setArrayOfNumber(COLUMN_WIDTHS, columnWidths); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder().append(super.toString()); + if (this.isSpecified(PLACEMENT)) + { + sb.append(", Placement=").append(this.getPlacement()); + } + if (this.isSpecified(WRITING_MODE)) + { + sb.append(", WritingMode=").append(this.getWritingMode()); + } + if (this.isSpecified(BACKGROUND_COLOR)) + { + sb.append(", BackgroundColor=").append(this.getBackgroundColor()); + } + if (this.isSpecified(BORDER_COLOR)) + { + sb.append(", BorderColor=").append(this.getBorderColors()); + } + if (this.isSpecified(BORDER_STYLE)) + { + Object borderStyle = this.getBorderStyle(); + sb.append(", BorderStyle="); + if (borderStyle instanceof String[]) + { + sb.append(arrayToString((String[]) borderStyle)); + } + else + { + sb.append(borderStyle); + } + } + if (this.isSpecified(BORDER_THICKNESS)) + { + Object borderThickness = this.getBorderThickness(); + sb.append(", BorderThickness="); + if (borderThickness instanceof float[]) + { + sb.append(arrayToString((float[]) borderThickness)); + } + else + { + sb.append(String.valueOf(borderThickness)); + } + } + if (this.isSpecified(PADDING)) + { + Object padding = this.getPadding(); + sb.append(", Padding="); + if (padding instanceof float[]) + { + sb.append(arrayToString((float[]) padding)); + } + else + { + sb.append(String.valueOf(padding)); + } + } + if (this.isSpecified(COLOR)) + { + sb.append(", Color=").append(this.getColor()); + } + if (this.isSpecified(SPACE_BEFORE)) + { + sb.append(", SpaceBefore=") + .append(String.valueOf(this.getSpaceBefore())); + } + if (this.isSpecified(SPACE_AFTER)) + { + sb.append(", SpaceAfter=") + .append(String.valueOf(this.getSpaceAfter())); + } + if (this.isSpecified(START_INDENT)) + { + sb.append(", StartIndent=") + .append(String.valueOf(this.getStartIndent())); + } + if (this.isSpecified(END_INDENT)) + { + sb.append(", EndIndent=") + .append(String.valueOf(this.getEndIndent())); + } + if (this.isSpecified(TEXT_INDENT)) + { + sb.append(", TextIndent=") + .append(String.valueOf(this.getTextIndent())); + } + if (this.isSpecified(TEXT_ALIGN)) + { + sb.append(", TextAlign=").append(this.getTextAlign()); + } + if (this.isSpecified(BBOX)) + { + sb.append(", BBox=").append(this.getBBox()); + } + if (this.isSpecified(WIDTH)) + { + Object width = this.getWidth(); + sb.append(", Width="); + if (width instanceof Float) + { + sb.append(String.valueOf(width)); + } + else + { + sb.append(width); + } + } + if (this.isSpecified(HEIGHT)) + { + Object height = this.getHeight(); + sb.append(", Height="); + if (height instanceof Float) + { + sb.append(String.valueOf(height)); + } + else + { + sb.append(height); + } + } + if (this.isSpecified(BLOCK_ALIGN)) + { + sb.append(", BlockAlign=").append(this.getBlockAlign()); + } + if (this.isSpecified(INLINE_ALIGN)) + { + sb.append(", InlineAlign=").append(this.getInlineAlign()); + } + if (this.isSpecified(T_BORDER_STYLE)) + { + Object tBorderStyle = this.getTBorderStyle(); + sb.append(", TBorderStyle="); + if (tBorderStyle instanceof String[]) + { + sb.append(arrayToString((String[]) tBorderStyle)); + } + else + { + sb.append(tBorderStyle); + } + } + if (this.isSpecified(T_PADDING)) + { + Object tPadding = this.getTPadding(); + sb.append(", TPadding="); + if (tPadding instanceof float[]) + { + sb.append(arrayToString((float[]) tPadding)); + } + else + { + sb.append(String.valueOf(tPadding)); + } + } + if (this.isSpecified(BASELINE_SHIFT)) + { + sb.append(", BaselineShift=") + .append(String.valueOf(this.getBaselineShift())); + } + if (this.isSpecified(LINE_HEIGHT)) + { + Object lineHeight = this.getLineHeight(); + sb.append(", LineHeight="); + if (lineHeight instanceof Float) + { + sb.append(String.valueOf(lineHeight)); + } + else + { + sb.append(lineHeight); + } + } + if (this.isSpecified(TEXT_DECORATION_COLOR)) + { + sb.append(", TextDecorationColor=") + .append(this.getTextDecorationColor()); + } + if (this.isSpecified(TEXT_DECORATION_THICKNESS)) + { + sb.append(", TextDecorationThickness=") + .append(String.valueOf(this.getTextDecorationThickness())); + } + if (this.isSpecified(TEXT_DECORATION_TYPE)) + { + sb.append(", TextDecorationType=") + .append(this.getTextDecorationType()); + } + if (this.isSpecified(RUBY_ALIGN)) + { + sb.append(", RubyAlign=").append(this.getRubyAlign()); + } + if (this.isSpecified(RUBY_POSITION)) + { + sb.append(", RubyPosition=").append(this.getRubyPosition()); + } + if (this.isSpecified(GLYPH_ORIENTATION_VERTICAL)) + { + sb.append(", GlyphOrientationVertical=") + .append(this.getGlyphOrientationVertical()); + } + if (this.isSpecified(COLUMN_COUNT)) + { + sb.append(", ColumnCount=") + .append(String.valueOf(this.getColumnCount())); + } + if (this.isSpecified(COLUMN_GAP)) + { + Object columnGap = this.getColumnGap(); + sb.append(", ColumnGap="); + if (columnGap instanceof float[]) + { + sb.append(arrayToString((float[]) columnGap)); + } + else + { + sb.append(String.valueOf(columnGap)); + } + } + if (this.isSpecified(COLUMN_WIDTHS)) + { + Object columnWidth = this.getColumnWidths(); + sb.append(", ColumnWidths="); + if (columnWidth instanceof float[]) + { + sb.append(arrayToString((float[]) columnWidth)); + } + else + { + sb.append(String.valueOf(columnWidth)); + } + } + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDListAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDListAttributeObject.java new file mode 100644 index 00000000000..de03fdabbc6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDListAttributeObject.java @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * A List attribute object. + * + * @author Johannes Koch + */ +public class PDListAttributeObject extends PDStandardAttributeObject +{ + + /** + * standard attribute owner: List + */ + public static final String OWNER_LIST = "List"; + + protected static final String LIST_NUMBERING = "ListNumbering"; + + /** + * ListNumbering: Circle: Open circular bullet + */ + public static final String LIST_NUMBERING_CIRCLE = "Circle"; + /** + * ListNumbering: Decimal: Decimal arabic numerals (1–9, 10–99, …) + */ + public static final String LIST_NUMBERING_DECIMAL = "Decimal"; + /** + * ListNumbering: Disc: Solid circular bullet + */ + public static final String LIST_NUMBERING_DISC = "Disc"; + /** + * ListNumbering: LowerAlpha: Lowercase letters (a, b, c, …) + */ + public static final String LIST_NUMBERING_LOWER_ALPHA = "LowerAlpha"; + /** + * ListNumbering: LowerRoman: Lowercase roman numerals (i, ii, iii, iv, …) + */ + public static final String LIST_NUMBERING_LOWER_ROMAN = "LowerRoman"; + /** + * ListNumbering: None: No autonumbering; Lbl elements (if present) contain arbitrary text + * not subject to any numbering scheme + */ + public static final String LIST_NUMBERING_NONE = "None"; + /** + * ListNumbering: Square: Solid square bullet + */ + public static final String LIST_NUMBERING_SQUARE = "Square"; + /** + * ListNumbering: UpperAlpha: Uppercase letters (A, B, C, …) + */ + public static final String LIST_NUMBERING_UPPER_ALPHA = "UpperAlpha"; + /** + * ListNumbering: UpperRoman: Uppercase roman numerals (I, II, III, IV, …) + */ + public static final String LIST_NUMBERING_UPPER_ROMAN = "UpperRoman"; + + + /** + * Default constructor. + */ + public PDListAttributeObject() + { + this.setOwner(OWNER_LIST); + } + + /** + * Creates a new List attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDListAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the list numbering (ListNumbering). The default value is + * {@link #LIST_NUMBERING_NONE}. + * + * @return the list numbering + */ + public String getListNumbering() + { + return this.getName(LIST_NUMBERING, LIST_NUMBERING_NONE); + } + + /** + * Sets the list numbering (ListNumbering). The value shall be one of the + * following: + *
    + *
  • {@link #LIST_NUMBERING_NONE},
  • + *
  • {@link #LIST_NUMBERING_DISC},
  • + *
  • {@link #LIST_NUMBERING_CIRCLE},
  • + *
  • {@link #LIST_NUMBERING_SQUARE},
  • + *
  • {@link #LIST_NUMBERING_DECIMAL},
  • + *
  • {@link #LIST_NUMBERING_UPPER_ROMAN},
  • + *
  • {@link #LIST_NUMBERING_LOWER_ROMAN},
  • + *
  • {@link #LIST_NUMBERING_UPPER_ALPHA},
  • + *
  • {@link #LIST_NUMBERING_LOWER_ALPHA}.
  • + *
+ * + * @param listNumbering the list numbering + */ + public void setListNumbering(String listNumbering) + { + this.setName(LIST_NUMBERING, listNumbering); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder().append(super.toString()); + if (this.isSpecified(LIST_NUMBERING)) + { + sb.append(", ListNumbering=").append(this.getListNumbering()); + } + return sb.toString(); + } + + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDPrintFieldAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDPrintFieldAttributeObject.java new file mode 100644 index 00000000000..2ec47330461 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDPrintFieldAttributeObject.java @@ -0,0 +1,177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * A PrintField attribute object. + * + * @author Johannes Koch + */ +public class PDPrintFieldAttributeObject extends PDStandardAttributeObject +{ + + /** + * standard attribute owner: PrintField + */ + public static final String OWNER_PRINT_FIELD = "PrintField"; + + private static final String ROLE = "Role"; + private static final String CHECKED = "checked"; + private static final String DESC = "Desc"; + + /** + * role: rb: Radio button + */ + public static final String ROLE_RB = "rb"; + /** + * role: cb: Check box + */ + public static final String ROLE_CB = "cb"; + /** + * role: pb: Push button + */ + public static final String ROLE_PB = "pb"; + /** + * role: tv: Text-value field + */ + public static final String ROLE_TV = "tv"; + /** + * checked state: on + */ + public static final String CHECKED_STATE_ON = "on"; + /** + * checked state: off + */ + public static final String CHECKED_STATE_OFF = "off"; + /** + * checked state: neutral + */ + public static final String CHECKED_STATE_NEUTRAL = "neutral"; + + + /** + * Default constructor. + */ + public PDPrintFieldAttributeObject() + { + this.setOwner(OWNER_PRINT_FIELD); + } + + /** + * Creates a new PrintField attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDPrintFieldAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the role. + * + * @return the role + */ + public String getRole() + { + return this.getName(ROLE); + } + + /** + * Sets the role. The value of Role shall be one of the following: + *
    + *
  • {@link #ROLE_RB},
  • + *
  • {@link #ROLE_CB},
  • + *
  • {@link #ROLE_PB},
  • + *
  • {@link #ROLE_TV}.
  • + *
+ * + * @param role the role + */ + public void setRole(String role) + { + this.setName(ROLE, role); + } + + /** + * Gets the checked state. The default value is {@link #CHECKED_STATE_OFF}. + * + * @return the checked state + */ + public String getCheckedState() + { + return this.getName(CHECKED, CHECKED_STATE_OFF); + } + + /** + * Sets the checked state. The value shall be one of: + *
    + *
  • {@link #CHECKED_STATE_ON},
  • + *
  • {@link #CHECKED_STATE_OFF} (default), or
  • + *
  • {@link #CHECKED_STATE_NEUTRAL}.
  • + *
+ * + * @param checkedState the checked state + */ + public void setCheckedState(String checkedState) + { + this.setName(CHECKED, checkedState); + } + + /** + * Gets the alternate name of the field (Desc). + * + * @return the alternate name of the field + */ + public String getAlternateName() + { + return this.getString(DESC); + } + + /** + * Sets the alternate name of the field (Desc). + * + * @param alternateName the alternate name of the field + */ + public void setAlternateName(String alternateName) + { + this.setString(DESC, alternateName); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder().append(super.toString()); + if (this.isSpecified(ROLE)) + { + sb.append(", Role=").append(this.getRole()); + } + if (this.isSpecified(CHECKED)) + { + sb.append(", Checked=").append(this.getCheckedState()); + } + if (this.isSpecified(DESC)) + { + sb.append(", Desc=").append(this.getAlternateName()); + } + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java new file mode 100644 index 00000000000..ebd64d880b9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java @@ -0,0 +1,447 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDAttributeObject; +import org.apache.pdfbox.pdmodel.graphics.color.PDGamma; + +/** + * A standard attribute object. + * + * @author Johannes Koch + */ +public abstract class PDStandardAttributeObject extends PDAttributeObject +{ + /** + * An "unspecified" default float value. + */ + protected static final float UNSPECIFIED = -1.f; + + /** + * Default constructor. + */ + public PDStandardAttributeObject() + { + } + + /** + * Creates a new standard attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDStandardAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Is the attribute with the given name specified in this attribute object? + * + * @param name the attribute name + * @return true if the attribute is specified, + * false otherwise + */ + public boolean isSpecified(String name) + { + return this.getCOSObject().getDictionaryObject(name) != null; + } + + + /** + * Gets a string attribute value. + * + * @param name the attribute name + * @return the string attribute value + */ + protected String getString(String name) + { + return this.getCOSObject().getString(name); + } + + /** + * Sets a string attribute value. + * + * @param name the attribute name + * @param value the string attribute value + */ + protected void setString(String name, String value) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setString(name, value); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Gets an array of strings. + * + * @param name the attribute name + * @return the array of strings + */ + protected String[] getArrayOfString(String name) + { + COSBase v = this.getCOSObject().getDictionaryObject(name); + if (v instanceof COSArray) + { + COSArray array = (COSArray) v; + String[] strings = new String[array.size()]; + for (int i = 0; i < array.size(); i++) + { + strings[i] = ((COSName) array.getObject(i)).getName(); + } + return strings; + } + return null; + } + + /** + * Sets an array of strings. + * + * @param name the attribute name + * @param values the array of strings + */ + protected void setArrayOfString(String name, String[] values) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + COSArray array = new COSArray(); + for (String value : values) + { + array.add(new COSString(value)); + } + this.getCOSObject().setItem(name, array); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Gets a name value. + * + * @param name the attribute name + * @return the name value + */ + protected String getName(String name) + { + return this.getCOSObject().getNameAsString(name); + } + + /** + * Gets a name value. + * + * @param name the attribute name + * @param defaultValue the default value + * @return the name value + */ + protected String getName(String name, String defaultValue) + { + return this.getCOSObject().getNameAsString(name, defaultValue); + } + + /** + * Gets a name value or array of name values. + * + * @param name the attribute name + * @param defaultValue the default value + * @return a String or array of Strings + */ + protected Object getNameOrArrayOfName(String name, String defaultValue) + { + COSBase v = this.getCOSObject().getDictionaryObject(name); + if (v instanceof COSArray) + { + COSArray array = (COSArray) v; + String[] names = new String[array.size()]; + for (int i = 0; i < array.size(); i++) + { + COSBase item = array.getObject(i); + if (item instanceof COSName) + { + names[i] = ((COSName) item).getName(); + } + } + return names; + } + if (v instanceof COSName) + { + return ((COSName) v).getName(); + } + return defaultValue; + } + + /** + * Sets a name value. + * + * @param name the attribute name + * @param value the name value + */ + protected void setName(String name, String value) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setName(name, value); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Sets an array of name values. + * + * @param name the attribute name + * @param values the array of name values + */ + protected void setArrayOfName(String name, String[] values) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + COSArray array = new COSArray(); + for (String value : values) + { + array.add(COSName.getPDFName(value)); + } + this.getCOSObject().setItem(name, array); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Gets a number or a name value. + * + * @param name the attribute name + * @param defaultValue the default name + * @return a Float or a String + */ + protected Object getNumberOrName(String name, String defaultValue) + { + COSBase value = this.getCOSObject().getDictionaryObject(name); + if (value instanceof COSNumber) + { + return ((COSNumber) value).floatValue(); + } + if (value instanceof COSName) + { + return ((COSName) value).getName(); + } + return defaultValue; + } + + /** + * Gets an integer. + * + * @param name the attribute name + * @param defaultValue the default value + * @return the integer + */ + protected int getInteger(String name, int defaultValue) + { + return this.getCOSObject().getInt(name, defaultValue); + } + + /** + * Sets an integer. + * + * @param name the attribute name + * @param value the integer + */ + protected void setInteger(String name, int value) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setInt(name, value); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Gets a number value. + * + * @param name the attribute name + * @param defaultValue the default value + * @return the number value + */ + protected float getNumber(String name, float defaultValue) + { + return this.getCOSObject().getFloat(name, defaultValue); + } + + /** + * Gets a number value. + * + * @param name the attribute name + * @return the number value + */ + protected float getNumber(String name) + { + return this.getCOSObject().getFloat(name); + } + + /** + * Gets a number or an array of numbers. + * + * @param name the attribute name + * @param defaultValue the default value + * @return a Float or an array of floats + */ + protected Object getNumberOrArrayOfNumber(String name, float defaultValue) + { + COSBase v = this.getCOSObject().getDictionaryObject(name); + if (v instanceof COSArray) + { + COSArray array = (COSArray) v; + float[] values = new float[array.size()]; + for (int i = 0; i < array.size(); i++) + { + COSBase item = array.getObject(i); + if (item instanceof COSNumber) + { + values[i] = ((COSNumber) item).floatValue(); + } + } + return values; + } + if (v instanceof COSNumber) + { + return ((COSNumber) v).floatValue(); + } + if (Float.compare(defaultValue, UNSPECIFIED) == 0) + { + return null; + } + return defaultValue; + } + + /** + * Sets a float number. + * + * @param name the attribute name + * @param value the float number + */ + protected void setNumber(String name, float value) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setFloat(name, value); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Sets an integer number. + * + * @param name the attribute name + * @param value the integer number + */ + protected void setNumber(String name, int value) + { + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setInt(name, value); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Sets an array of float numbers. + * + * @param name the attribute name + * @param values the float numbers + */ + protected void setArrayOfNumber(String name, float[] values) + { + COSArray array = new COSArray(); + for (float value : values) + { + array.add(new COSFloat(value)); + } + COSBase oldBase = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setItem(name, array); + COSBase newBase = this.getCOSObject().getDictionaryObject(name); + this.potentiallyNotifyChanged(oldBase, newBase); + } + + /** + * Gets a colour. + * + * @param name the attribute name + * @return the colour + */ + protected PDGamma getColor(String name) + { + COSArray c = (COSArray) this.getCOSObject().getDictionaryObject(name); + if (c != null) + { + return new PDGamma(c); + } + return null; + } + + /** + * Gets a single colour or four colours. + * + * @param name the attribute name + * @return the single ({@link PDGamma}) or a ({@link PDFourColours}) + */ + protected Object getColorOrFourColors(String name) + { + COSArray array = + (COSArray) this.getCOSObject().getDictionaryObject(name); + if (array == null) + { + return null; + } + if (array.size() == 3) + { + // only one colour + return new PDGamma(array); + } + else if (array.size() == 4) + { + return new PDFourColours(array); + } + return null; + } + + /** + * Sets a colour. + * + * @param name the attribute name + * @param value the colour + */ + protected void setColor(String name, PDGamma value) + { + COSBase oldValue = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setItem(name, value); + COSBase newValue = value == null ? null : value.getCOSObject(); + this.potentiallyNotifyChanged(oldValue, newValue); + } + + /** + * Sets four colours. + * + * @param name the attribute name + * @param value the four colours + */ + protected void setFourColors(String name, PDFourColours value) + { + COSBase oldValue = this.getCOSObject().getDictionaryObject(name); + this.getCOSObject().setItem(name, value); + COSBase newValue = value == null ? null : value.getCOSObject(); + this.potentiallyNotifyChanged(oldValue, newValue); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDTableAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDTableAttributeObject.java new file mode 100644 index 00000000000..5250e228012 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDTableAttributeObject.java @@ -0,0 +1,220 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * A Table attribute object. + * + * @author Johannes Koch + */ +public class PDTableAttributeObject extends PDStandardAttributeObject +{ + + /** + * standard attribute owner: Table + */ + public static final String OWNER_TABLE = "Table"; + + protected static final String ROW_SPAN = "RowSpan"; + protected static final String COL_SPAN = "ColSpan"; + protected static final String HEADERS = "Headers"; + protected static final String SCOPE = "Scope"; + protected static final String SUMMARY = "Summary"; + + /** + * Scope: Both + */ + public static final String SCOPE_BOTH = "Both"; + /** + * Scope: Column + */ + public static final String SCOPE_COLUMN = "Column"; + /** + * Scope: Row + */ + public static final String SCOPE_ROW = "Row"; + + + /** + * Default constructor. + */ + public PDTableAttributeObject() + { + this.setOwner(OWNER_TABLE); + } + + /** + * Creates a new Table attribute object with a given dictionary. + * + * @param dictionary the dictionary + */ + public PDTableAttributeObject(COSDictionary dictionary) + { + super(dictionary); + } + + + /** + * Gets the number of rows in the enclosing table that shall be spanned by + * the cell (RowSpan). The default value is 1. + * + * @return the row span + */ + public int getRowSpan() + { + return this.getInteger(ROW_SPAN, 1); + } + + /** + * Sets the number of rows in the enclosing table that shall be spanned by + * the cell (RowSpan). + * + * @param rowSpan the row span + */ + public void setRowSpan(int rowSpan) + { + this.setInteger(ROW_SPAN, rowSpan); + } + + /** + * Gets the number of columns in the enclosing table that shall be spanned + * by the cell (ColSpan). The default value is 1. + * + * @return the column span + */ + public int getColSpan() + { + return this.getInteger(COL_SPAN, 1); + } + + /** + * Sets the number of columns in the enclosing table that shall be spanned + * by the cell (ColSpan). + * + * @param colSpan the column span + */ + public void setColSpan(int colSpan) + { + this.setInteger(COL_SPAN, colSpan); + } + + /** + * Gets the headers (Headers). An array of byte strings, where each string + * shall be the element identifier (see the + * {@link org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement#getElementIdentifier()}) for a TH structure + * element that shall be used as a header associated with this cell. + * + * @return the headers. + */ + public String[] getHeaders() + { + return this.getArrayOfString(HEADERS); + } + + /** + * Sets the headers (Headers). An array of byte strings, where each string + * shall be the element identifier (see the + * {@link org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement#getElementIdentifier()}) for a TH structure + * element that shall be used as a header associated with this cell. + * + * @param headers the headers + */ + public void setHeaders(String[] headers) + { + this.setArrayOfString(HEADERS, headers); + } + + /** + * Gets the scope (Scope). It shall reflect whether the header cell applies + * to the rest of the cells in the row that contains it, the column that + * contains it, or both the row and the column that contain it. + * + * @return the scope + */ + public String getScope() + { + return this.getName(SCOPE); + } + + /** + * Sets the scope (Scope). It shall reflect whether the header cell applies + * to the rest of the cells in the row that contains it, the column that + * contains it, or both the row and the column that contain it. The value + * shall be one of the following: + *
    + *
  • {@link #SCOPE_ROW},
  • + *
  • {@link #SCOPE_COLUMN}, or
  • + *
  • {@link #SCOPE_BOTH}.
  • + *
+ * + * @param scope the scope + */ + public void setScope(String scope) + { + this.setName(SCOPE, scope); + } + + /** + * Gets the summary of the table’s purpose and structure. + * + * @return the summary + */ + public String getSummary() + { + return this.getString(SUMMARY); + } + + /** + * Sets the summary of the table’s purpose and structure. + * + * @param summary the summary + */ + public void setSummary(String summary) + { + this.setString(SUMMARY, summary); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder().append(super.toString()); + if (this.isSpecified(ROW_SPAN)) + { + sb.append(", RowSpan=").append(String.valueOf(this.getRowSpan())); + } + if (this.isSpecified(COL_SPAN)) + { + sb.append(", ColSpan=").append(String.valueOf(this.getColSpan())); + } + if (this.isSpecified(HEADERS)) + { + sb.append(", Headers=").append(arrayToString(this.getHeaders())); + } + if (this.isSpecified(SCOPE)) + { + sb.append(", Scope=").append(this.getScope()); + } + if (this.isSpecified(SUMMARY)) + { + sb.append(", Summary=").append(this.getSummary()); + } + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/StandardStructureTypes.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/StandardStructureTypes.java new file mode 100644 index 00000000000..3a906e33b34 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/StandardStructureTypes.java @@ -0,0 +1,322 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.documentinterchange.taggedpdf; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * The standard structure types. + * + * @author Johannes Koch + */ +public class StandardStructureTypes +{ + + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(StandardStructureTypes.class); + + private StandardStructureTypes() + { + } + + + // Grouping Elements + /** + * Document + */ + public static final String DOCUMENT = "Document"; + + /** + * Part + */ + public static final String PART = "Part"; + + /** + * Art + */ + public static final String ART = "Art"; + + /** + * Sect + */ + public static final String SECT = "Sect"; + + /** + * Div + */ + public static final String DIV = "Div"; + + /** + * BlockQuote + */ + public static final String BLOCK_QUOTE = "BlockQuote"; + + /** + * Caption + */ + public static final String CAPTION = "Caption"; + + /** + * TOC + */ + public static final String TOC = "TOC"; + + /** + * TOCI + */ + public static final String TOCI = "TOCI"; + + /** + * Index + */ + public static final String INDEX = "Index"; + + /** + * NonStruct + */ + public static final String NON_STRUCT = "NonStruct"; + + /** + * Private + */ + public static final String PRIVATE = "Private"; + + + // Block-Level Structure Elements + /** + * P + */ + public static final String P = "P"; + + /** + * H + */ + public static final String H = "H"; + + /** + * H1 + */ + public static final String H1 = "H1"; + + /** + * H2 + */ + public static final String H2 = "H2"; + + /** + * H3 + */ + public static final String H3 = "H3"; + + /** + * H4 + */ + public static final String H4 = "H4"; + + /** + * H5 + */ + public static final String H5 = "H5"; + + /** + * H6 + */ + public static final String H6 = "H6"; + + /** + * L + */ + public static final String L = "L"; + + /** + * LI + */ + public static final String LI = "LI"; + + /** + * Lbl + */ + public static final String LBL = "Lbl"; + + /** + * LBody + */ + public static final String L_BODY = "LBody"; + + /** + * Table + */ + public static final String TABLE = "Table"; + + /** + * TR + */ + public static final String TR = "TR"; + + /** + * TH + */ + public static final String TH = "TH"; + + /** + * TD + */ + public static final String TD = "TD"; + + /** + * THead + */ + public static final String T_HEAD = "THead"; + + /** + * TBody + */ + public static final String T_BODY = "TBody"; + + /** + * TFoot + */ + public static final String T_FOOT = "TFoot"; + + + // Inline-Level Structure Elements + /** + * Span + */ + public static final String SPAN = "Span"; + + /** + * Quote + */ + public static final String QUOTE = "Quote"; + + /** + * Note + */ + public static final String NOTE = "Note"; + + /** + * Reference + */ + public static final String REFERENCE = "Reference"; + + /** + * BibEntry + */ + public static final String BIB_ENTRY = "BibEntry"; + + /** + * Code + */ + public static final String CODE = "Code"; + + /** + * Link + */ + public static final String LINK = "Link"; + + /** + * Annot + */ + public static final String ANNOT = "Annot"; + + /** + * Ruby + */ + public static final String RUBY = "Ruby"; + + /** + * RB + */ + public static final String RB = "RB"; + + /** + * RT + */ + public static final String RT = "RT"; + + /** + * RP + */ + public static final String RP = "RP"; + + /** + * Warichu + */ + public static final String WARICHU = "Warichu"; + + /** + * WT + */ + public static final String WT = "WT"; + + /** + * WP + */ + public static final String WP = "WP"; + + + // Illustration Elements + /** + * Figure + */ + public static final String Figure = "Figure"; + + /** + * Formula + */ + public static final String FORMULA = "Formula"; + + /** + * Form + */ + public static final String FORM = "Form"; + + /** + * All standard structure types. + */ + public static List types = new ArrayList<>(); + + static + { + Field[] fields = StandardStructureTypes.class.getFields(); + for (Field field : fields) + { + if (Modifier.isFinal(field.getModifiers())) + { + try + { + types.add(field.get(null).toString()); + } + catch (IllegalArgumentException | IllegalAccessException e) + { + LOG.error(e,e); + } + } + } + Collections.sort(types); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/package.html new file mode 100644 index 00000000000..ca5daa9e7a4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/package.html @@ -0,0 +1,26 @@ + + + + + + + +The tagged PDF package provides a mechanism for incorporating "tags" (standard +structure types and attributes) into a PDF file. + + diff --git a/src/org/pdfbox/pdmodel/encryption/AccessPermission.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/AccessPermission.java similarity index 81% rename from src/org/pdfbox/pdmodel/encryption/AccessPermission.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/AccessPermission.java index 0b95051a1ae..f16634ec0bc 100644 --- a/src/org/pdfbox/pdmodel/encryption/AccessPermission.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/AccessPermission.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.pdfbox.pdmodel.encryption; +package org.apache.pdfbox.pdmodel.encryption; /** * This class represents the access permissions to a document. @@ -39,18 +39,17 @@ * granted to the user who decrypted the document. * * @see ProtectionPolicy - * @see org.pdfbox.pdmodel.PDDocument#getCurrentAccessPermission() + * @see org.apache.pdfbox.pdmodel.PDDocument#getCurrentAccessPermission() * - * @author Ben Litchfield - * @author Benoit Guillon (benoit.guillon@snv.jussieu.fr) + * @author Ben Litchfield + * @author Benoit Guillon * - * @version $Revision: 1.4 $ */ public class AccessPermission { - private static final int DEFAULT_PERMISSIONS = 0xFFFFFFFF ^ 3;//bits 0 & 1 need to be zero + private static final int DEFAULT_PERMISSIONS = ~3; //bits 0 & 1 need to be zero private static final int PRINT_BIT = 3; private static final int MODIFICATION_BIT = 4; private static final int EXTRACT_BIT = 5; @@ -116,7 +115,7 @@ private boolean setPermissionBit( int bit, boolean value ) } else { - permissions = permissions & (0xFFFFFFFF ^ (1 << (bit-1))); + permissions = permissions & (~(1 << (bit - 1))); } bytes = permissions; @@ -210,7 +209,8 @@ public boolean canPrint() /** * Set if the user can print. - * This method will have no effect if the object is in read only mode + *

+ * This method will have no effect if the object is in read only mode. * * @param allowPrinting A boolean determining if the user can print. */ @@ -234,7 +234,8 @@ public boolean canModify() /** * Set if the user can modify the document. - * This method will have no effect if the object is in read only mode + *

+ * This method will have no effect if the object is in read only mode. * * @param allowModifications A boolean determining if the user can modify the document. */ @@ -259,7 +260,8 @@ public boolean canExtractContent() /** * Set if the user can extract content from the document. - * This method will have no effect if the object is in read only mode + *

+ * This method will have no effect if the object is in read only mode. * * @param allowExtraction A boolean determining if the user can extract content * from the document. @@ -273,7 +275,11 @@ public void setCanExtractContent( boolean allowExtraction ) } /** - * This will tell if the user can add/modify text annotations, fill in interactive forms fields. + * This will tell if the user can add or modify text annotations and fill in interactive forms + * fields and, if {@link #canModify() canModify()} returns true, create or modify interactive + * form fields (including signature fields). Note that if + * {@link #canFillInForm() canFillInForm()} returns true, it is still possible to fill in + * interactive forms (including signature fields) even if this method here returns false. * * @return true If supplied with the user password they are allowed to modify annotations. */ @@ -283,10 +289,15 @@ public boolean canModifyAnnotations() } /** - * Set if the user can modify annotations. - * This method will have no effect if the object is in read only mode + * Set if the user can add or modify text annotations and fill in interactive forms fields and, + * if {@link #canModify() canModify()} returns true, create or modify interactive form fields + * (including signature fields). Note that if {@link #canFillInForm() canFillInForm()} returns + * true, it is still possible to fill in interactive forms (including signature fields) even the + * parameter here is false. + *

+ * This method will have no effect if the object is in read only mode. * - * @param allowAnnotationModification A boolean determining if the user can modify annotations. + * @param allowAnnotationModification A boolean determining the new setting. */ public void setCanModifyAnnotations( boolean allowAnnotationModification ) { @@ -297,7 +308,8 @@ public void setCanModifyAnnotations( boolean allowAnnotationModification ) } /** - * This will tell if the user can fill in interactive forms. + * This will tell if the user can fill in interactive form fields (including signature fields) + * even if {@link #canModifyAnnotations() canModifyAnnotations()} returns false. * * @return true If supplied with the user password they are allowed to fill in form fields. */ @@ -307,8 +319,12 @@ public boolean canFillInForm() } /** - * Set if the user can fill in interactive forms. - * This method will have no effect if the object is in read only mode + * Set if the user can fill in interactive form fields (including signature fields) even if + * {@link #canModifyAnnotations() canModifyAnnotations()} returns false. Therefore, if you want + * to prevent a user from filling in interactive form fields, you need to call + * {@link #setCanModifyAnnotations(boolean) setCanModifyAnnotations(false)} as well. + *

+ * This method will have no effect if the object is in read only mode. * * @param allowFillingInForm A boolean determining if the user can fill in interactive forms. */ @@ -334,7 +350,8 @@ public boolean canExtractForAccessibility() /** * Set if the user can extract content from the document for accessibility purposes. - * This method will have no effect if the object is in read only mode + *

+ * This method will have no effect if the object is in read only mode. * * @param allowExtraction A boolean determining if the user can extract content * from the document. @@ -350,8 +367,7 @@ public void setCanExtractForAccessibility( boolean allowExtraction ) /** * This will tell if the user can insert/rotate/delete pages. * - * @return true If supplied with the user password they are allowed to extract content - * from the PDF document + * @return true If supplied with the user password they are allowed to assemble the document. */ public boolean canAssembleDocument() { @@ -360,7 +376,8 @@ public boolean canAssembleDocument() /** * Set if the user can insert/rotate/delete pages. - * This method will have no effect if the object is in read only mode + *

+ * This method will have no effect if the object is in read only mode. * * @param allowAssembly A boolean determining if the user can assemble the document. */ @@ -385,16 +402,17 @@ public boolean canPrintDegraded() /** * Set if the user can print the document in a degraded format. - * This method will have no effect if the object is in read only mode + *

+ * This method will have no effect if the object is in read only mode. * - * @param allowAssembly A boolean determining if the user can print the + * @param canPrintDegraded A boolean determining if the user can print the * document in a degraded format. */ - public void setCanPrintDegraded( boolean allowAssembly ) + public void setCanPrintDegraded( boolean canPrintDegraded ) { if(!readOnly) { - setPermissionBit( DEGRADED_PRINT_BIT, allowAssembly ); + setPermissionBit( DEGRADED_PRINT_BIT, canPrintDegraded ); } } @@ -419,4 +437,26 @@ public boolean isReadOnly() { return readOnly; } + + /** + * Indicates if any revision 3 access permission is set or not. + * + * @return true if any revision 3 access permission is set + */ + protected boolean hasAnyRevision3PermissionSet() + { + if (canFillInForm()) + { + return true; + } + if (canExtractForAccessibility()) + { + return true; + } + if (canAssembleDocument()) + { + return true; + } + return canPrintDegraded(); + } } diff --git a/src/org/pdfbox/pdmodel/encryption/DecryptionMaterial.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/DecryptionMaterial.java similarity index 89% rename from src/org/pdfbox/pdmodel/encryption/DecryptionMaterial.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/DecryptionMaterial.java index 1fcb1d2f4c6..696501c5d6c 100644 --- a/src/org/pdfbox/pdmodel/encryption/DecryptionMaterial.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/DecryptionMaterial.java @@ -15,15 +15,14 @@ * limitations under the License. */ -package org.pdfbox.pdmodel.encryption; +package org.apache.pdfbox.pdmodel.encryption; /** * This class represents data required to decrypt PDF documents. This can * be a password for standard security or a X509 certificate with a private * key for public key security. * - * @author Benoit Guillon (benoit.guillon@snv.jussieu.fr) - * @version $Revision: 1.2 $ + * @author Benoit Guillon */ public abstract class DecryptionMaterial { diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/InvalidPasswordException.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/InvalidPasswordException.java new file mode 100644 index 00000000000..697a0b51059 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/InvalidPasswordException.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.IOException; + +/** + * Indicates that an invalid password was supplied. + * @author Ben Litchfield + */ +public class InvalidPasswordException extends IOException +{ + /** + * Creates a new InvalidPasswordException. + * @param message A msg to go with this exception. + */ + InvalidPasswordException( String message ) + { + super( message ); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java new file mode 100644 index 00000000000..cf9ca28be09 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/MessageDigests.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.encryption; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * Utility class for creating MessageDigest instances. + * @author John Hewson + */ +final class MessageDigests +{ + private MessageDigests() + { + } + + /** + * @return MD5 message digest + */ + static MessageDigest getMD5() + { + try + { + return MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException e) + { + // should never happen + throw new RuntimeException(e); + } + } + + /** + * @return SHA-1 message digest + */ + static MessageDigest getSHA1() + { + try + { + return MessageDigest.getInstance("SHA-1"); + } + catch (NoSuchAlgorithmException e) + { + // should never happen + throw new RuntimeException(e); + } + } + + /** + * @return SHA-256 message digest + */ + static MessageDigest getSHA256() + { + try + { + return MessageDigest.getInstance("SHA-256"); + } + catch (NoSuchAlgorithmException e) + { + // should never happen + throw new RuntimeException(e); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDCryptFilterDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDCryptFilterDictionary.java new file mode 100644 index 00000000000..8370ef8771e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDCryptFilterDictionary.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.encryption; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class is a specialized view of the crypt filter dictionary of a PDF document. + * It contains a low level dictionary (COSDictionary) and provides the methods to + * manage its fields. + * + */ +public class PDCryptFilterDictionary implements COSObjectable +{ + + /** + * COS crypt filter dictionary. + */ + protected COSDictionary cryptFilterDictionary = null; + + /** + * creates a new empty crypt filter dictionary. + */ + public PDCryptFilterDictionary() + { + cryptFilterDictionary = new COSDictionary(); + } + + /** + * creates a new crypt filter dictionary from the low level dictionary provided. + * @param d the low level dictionary that will be managed by the newly created object + */ + public PDCryptFilterDictionary(COSDictionary d) + { + cryptFilterDictionary = d; + } + + /** + * This will get the dictionary associated with this crypt filter dictionary. + * + * @return The COS dictionary that this object wraps. + */ + @Override + public COSDictionary getCOSObject() + { + return cryptFilterDictionary; + } + + /** + * This will set the number of bits to use for the crypt filter algorithm. + * + * @param length The new key length. + */ + public void setLength(int length) + { + cryptFilterDictionary.setInt(COSName.LENGTH, length); + } + + /** + * This will return the Length entry of the crypt filter dictionary.

+ * The length in bits for the crypt filter algorithm. This will return a multiple of 8. + * + * @return The length in bits for the encryption algorithm + */ + public int getLength() + { + return cryptFilterDictionary.getInt( COSName.LENGTH, 40 ); + } + + /** + * This will set the crypt filter method. + * Allowed values are: NONE, V2, AESV2, AESV3 + * + * @param cfm name of the crypt filter method. + * + */ + public void setCryptFilterMethod(COSName cfm) + { + cryptFilterDictionary.setItem( COSName.CFM, cfm ); + } + + /** + * This will return the crypt filter method. + * Allowed values are: NONE, V2, AESV2, AESV3 + * + * @return the name of the crypt filter method. + */ + public COSName getCryptFilterMethod() + { + return (COSName)cryptFilterDictionary.getDictionaryObject( COSName.CFM ); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java new file mode 100644 index 00000000000..3679933d464 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PDEncryption.java @@ -0,0 +1,629 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class is a specialized view of the encryption dictionary of a PDF document. + * It contains a low level dictionary (COSDictionary) and provides the methods to + * manage its fields. + * + * The available fields are the ones who are involved by standard security handler + * and public key security handler. + * + * @author Ben Litchfield + * @author Benoit Guillon + */ +public class PDEncryption implements COSObjectable +{ + /** + * See PDF Reference 1.4 Table 3.13. + */ + public static final int VERSION0_UNDOCUMENTED_UNSUPPORTED = 0; + /** + * See PDF Reference 1.4 Table 3.13. + */ + public static final int VERSION1_40_BIT_ALGORITHM = 1; + /** + * See PDF Reference 1.4 Table 3.13. + */ + public static final int VERSION2_VARIABLE_LENGTH_ALGORITHM = 2; + /** + * See PDF Reference 1.4 Table 3.13. + */ + public static final int VERSION3_UNPUBLISHED_ALGORITHM = 3; + /** + * See PDF Reference 1.4 Table 3.13. + */ + public static final int VERSION4_SECURITY_HANDLER = 4; + + /** + * The default security handler. + */ + public static final String DEFAULT_NAME = "Standard"; + + /** + * The default length for the encryption key. + */ + public static final int DEFAULT_LENGTH = 40; + + /** + * The default version, according to the PDF Reference. + */ + public static final int DEFAULT_VERSION = VERSION0_UNDOCUMENTED_UNSUPPORTED; + + private final COSDictionary dictionary; + private SecurityHandler securityHandler; + + /** + * creates a new empty encryption dictionary. + */ + public PDEncryption() + { + dictionary = new COSDictionary(); + } + + /** + * creates a new encryption dictionary from the low level dictionary provided. + * @param dictionary a COS encryption dictionary + */ + public PDEncryption(COSDictionary dictionary) + { + this.dictionary = dictionary; + securityHandler = SecurityHandlerFactory.INSTANCE.newSecurityHandlerForFilter(getFilter()); + } + + /** + * Returns the security handler specified in the dictionary's Filter entry. + * @return a security handler instance + * @throws IOException if there is no security handler available which matches the Filter + */ + public SecurityHandler getSecurityHandler() throws IOException + { + if (securityHandler == null) + { + throw new IOException("No security handler for filter " + getFilter()); + } + return securityHandler; + } + + /** + * Sets the security handler used in this encryption dictionary + * @param securityHandler new security handler + */ + public void setSecurityHandler(SecurityHandler securityHandler) + { + this.securityHandler = securityHandler; + // TODO set Filter (currently this is done by the security handlers) + } + + /** + * Returns true if the security handler specified in the dictionary's Filter is available. + * @return true if the security handler is available + */ + public boolean hasSecurityHandler() + { + return securityHandler == null; + } + + /** + * This will get the dictionary associated with this encryption dictionary. + * + * @return The COS dictionary that this object wraps. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Sets the filter entry of the encryption dictionary. + * + * @param filter The filter name. + */ + public void setFilter(String filter) + { + dictionary.setItem(COSName.FILTER, COSName.getPDFName(filter)); + } + + /** + * Get the name of the filter. + * + * @return The filter name contained in this encryption dictionary. + */ + public final String getFilter() + { + return dictionary.getNameAsString( COSName.FILTER ); + } + + /** + * Get the name of the subfilter. + * + * @return The subfilter name contained in this encryption dictionary. + */ + public String getSubFilter() + { + return dictionary.getNameAsString( COSName.SUB_FILTER ); + } + + /** + * Set the subfilter entry of the encryption dictionary. + * + * @param subfilter The value of the subfilter field. + */ + public void setSubFilter(String subfilter) + { + dictionary.setName(COSName.SUB_FILTER, subfilter); + } + + /** + * This will set the V entry of the encryption dictionary.

+ * See PDF Reference 1.4 Table 3.13.

+ * Note: This value is used to decrypt the pdf document. If you change this when + * the document is encrypted then decryption will fail!. + * + * @param version The new encryption version. + */ + public void setVersion(int version) + { + dictionary.setInt(COSName.V, version); + } + + /** + * This will return the V entry of the encryption dictionary.

+ * See PDF Reference 1.4 Table 3.13. + * + * @return The encryption version to use. + */ + public int getVersion() + { + return dictionary.getInt( COSName.V, 0 ); + } + + /** + * This will set the number of bits to use for the encryption algorithm. + * + * @param length The new key length. + */ + public void setLength(int length) + { + dictionary.setInt(COSName.LENGTH, length); + } + + /** + * This will return the Length entry of the encryption dictionary.

+ * The length in bits for the encryption algorithm. This will return a multiple of 8. + * + * @return The length in bits for the encryption algorithm + */ + public int getLength() + { + return dictionary.getInt( COSName.LENGTH, 40 ); + } + + /** + * This will set the R entry of the encryption dictionary.

+ * See PDF Reference 1.4 Table 3.14.

+ * + * Note: This value is used to decrypt the pdf document. If you change this when + * the document is encrypted then decryption will fail!. + * + * @param revision The new encryption version. + */ + public void setRevision(int revision) + { + dictionary.setInt(COSName.R, revision); + } + + /** + * This will return the R entry of the encryption dictionary.

+ * See PDF Reference 1.4 Table 3.14. + * + * @return The encryption revision to use. + */ + public int getRevision() + { + return dictionary.getInt( COSName.R, DEFAULT_VERSION ); + } + + /** + * This will set the O entry in the standard encryption dictionary. + * + * @param o A 32 byte array or null if there is no owner key. + * + * @throws IOException If there is an error setting the data. + */ + public void setOwnerKey(byte[] o) throws IOException + { + dictionary.setItem(COSName.O, new COSString(o)); + } + + /** + * This will get the O entry in the standard encryption dictionary. + * + * @return A 32 byte array or null if there is no owner key. + * + * @throws IOException If there is an error accessing the data. + */ + public byte[] getOwnerKey() throws IOException + { + byte[] o = null; + COSString owner = (COSString) dictionary.getDictionaryObject( COSName.O ); + if( owner != null ) + { + o = owner.getBytes(); + } + return o; + } + + /** + * This will set the U entry in the standard encryption dictionary. + * + * @param u A 32 byte array. + * + * @throws IOException If there is an error setting the data. + */ + public void setUserKey(byte[] u) throws IOException + { + dictionary.setItem(COSName.U, new COSString(u)); + } + + /** + * This will get the U entry in the standard encryption dictionary. + * + * @return A 32 byte array or null if there is no user key. + * + * @throws IOException If there is an error accessing the data. + */ + public byte[] getUserKey() throws IOException + { + byte[] u = null; + COSString user = (COSString) dictionary.getDictionaryObject( COSName.U ); + if( user != null ) + { + u = user.getBytes(); + } + return u; + } + + /** + * This will set the OE entry in the standard encryption dictionary. + * + * @param oe A 32 byte array or null if there is no owner encryption key. + * + * @throws IOException If there is an error setting the data. + */ + public void setOwnerEncryptionKey(byte[] oe) throws IOException + { + dictionary.setItem( COSName.OE, new COSString(oe) ); + } + + /** + * This will get the OE entry in the standard encryption dictionary. + * + * @return A 32 byte array or null if there is no owner encryption key. + * + * @throws IOException If there is an error accessing the data. + */ + public byte[] getOwnerEncryptionKey() throws IOException + { + byte[] oe = null; + COSString ownerEncryptionKey = (COSString)dictionary.getDictionaryObject( COSName.OE ); + if( ownerEncryptionKey != null ) + { + oe = ownerEncryptionKey.getBytes(); + } + return oe; + } + + /** + * This will set the UE entry in the standard encryption dictionary. + * + * @param ue A 32 byte array or null if there is no user encryption key. + * + * @throws IOException If there is an error setting the data. + */ + public void setUserEncryptionKey(byte[] ue) throws IOException + { + dictionary.setItem( COSName.UE, new COSString(ue) ); + } + + /** + * This will get the UE entry in the standard encryption dictionary. + * + * @return A 32 byte array or null if there is no user encryption key. + * + * @throws IOException If there is an error accessing the data. + */ + public byte[] getUserEncryptionKey() throws IOException + { + byte[] ue = null; + COSString userEncryptionKey = (COSString)dictionary.getDictionaryObject( COSName.UE ); + if( userEncryptionKey != null ) + { + ue = userEncryptionKey.getBytes(); + } + return ue; + } + + /** + * This will set the permissions bit mask. + * + * @param permissions The new permissions bit mask + */ + public void setPermissions(int permissions) + { + dictionary.setInt(COSName.P, permissions); + } + + /** + * This will get the permissions bit mask. + * + * @return The permissions bit mask. + */ + public int getPermissions() + { + return dictionary.getInt( COSName.P, 0 ); + } + + /** + * Will get the EncryptMetaData dictionary info. + * + * @return true if EncryptMetaData is explicitly set to false (the default is true) + */ + public boolean isEncryptMetaData() + { + // default is true (see 7.6.3.2 Standard Encryption Dictionary PDF 32000-1:2008) + boolean encryptMetaData = true; + + COSBase value = dictionary.getDictionaryObject(COSName.ENCRYPT_META_DATA); + + if (value instanceof COSBoolean) + { + encryptMetaData = ((COSBoolean)value).getValue(); + } + + return encryptMetaData; + } + + /** + * This will set the Recipients field of the dictionary. This field contains an array + * of string. + * @param recipients the array of bytes arrays to put in the Recipients field. + * @throws IOException If there is an error setting the data. + */ + public void setRecipients(byte[][] recipients) throws IOException + { + COSArray array = new COSArray(); + for (byte[] recipient : recipients) + { + COSString recip = new COSString(recipient); + array.add(recip); + } + dictionary.setItem(COSName.RECIPIENTS, array); + array.setDirect(true); + } + + /** + * Returns the number of recipients contained in the Recipients field of the dictionary. + * + * @return the number of recipients contained in the Recipients field. + */ + public int getRecipientsLength() + { + COSArray array = (COSArray) dictionary.getItem(COSName.RECIPIENTS); + return array.size(); + } + + /** + * returns the COSString contained in the Recipients field at position i. + * + * @param i the position in the Recipients field array. + * + * @return a COSString object containing information about the recipient number i. + */ + public COSString getRecipientStringAt(int i) + { + COSArray array = (COSArray) dictionary.getItem(COSName.RECIPIENTS); + return (COSString)array.get(i); + } + + /** + * Returns the standard crypt filter. + * + * @return the standard crypt filter if available. + */ + public PDCryptFilterDictionary getStdCryptFilterDictionary() + { + return getCryptFilterDictionary(COSName.STD_CF); + } + + /** + * Returns the default crypt filter (for public-key security handler). + * + * @return the default crypt filter if available. + */ + public PDCryptFilterDictionary getDefaultCryptFilterDictionary() + { + return getCryptFilterDictionary(COSName.DEFAULT_CRYPT_FILTER); + } + + /** + * Returns the crypt filter with the given name. + * + * @param cryptFilterName the name of the crypt filter + * + * @return the crypt filter with the given name if available + */ + public PDCryptFilterDictionary getCryptFilterDictionary(COSName cryptFilterName) + { + // See CF in "Table 20 – Entries common to all encryption dictionaries" + COSBase base = dictionary.getDictionaryObject(COSName.CF); + if (base instanceof COSDictionary) + { + COSBase base2 = ((COSDictionary) base).getDictionaryObject(cryptFilterName); + if (base2 instanceof COSDictionary) + { + return new PDCryptFilterDictionary((COSDictionary) base2); + } + } + return null; + } + + /** + * Sets the crypt filter with the given name. + * + * @param cryptFilterName the name of the crypt filter + * @param cryptFilterDictionary the crypt filter to set + */ + public void setCryptFilterDictionary(COSName cryptFilterName, PDCryptFilterDictionary cryptFilterDictionary) + { + COSDictionary cfDictionary = dictionary.getCOSDictionary(COSName.CF); + if (cfDictionary == null) + { + cfDictionary = new COSDictionary(); + dictionary.setItem(COSName.CF, cfDictionary); + } + cfDictionary.setDirect(true); // PDFBOX-4436 direct obj needed for Adobe Reader on Android + cfDictionary.setItem(cryptFilterName, cryptFilterDictionary.getCOSObject()); + } + + /** + * Sets the standard crypt filter. + * + * @param cryptFilterDictionary the standard crypt filter to set + */ + public void setStdCryptFilterDictionary(PDCryptFilterDictionary cryptFilterDictionary) + { + cryptFilterDictionary.getCOSObject().setDirect(true); // PDFBOX-4436 + setCryptFilterDictionary(COSName.STD_CF, cryptFilterDictionary); + } + + /** + * Sets the default crypt filter (for public-key security handler). + * + * @param defaultFilterDictionary the standard crypt filter to set + */ + public void setDefaultCryptFilterDictionary(PDCryptFilterDictionary defaultFilterDictionary) + { + defaultFilterDictionary.getCOSObject().setDirect(true); // PDFBOX-4436 + setCryptFilterDictionary(COSName.DEFAULT_CRYPT_FILTER, defaultFilterDictionary); + } + + /** + * Returns the name of the filter which is used for de/encrypting streams. + * Default value is "Identity". + * + * @return the name of the filter + */ + public COSName getStreamFilterName() + { + COSName stmF = (COSName) dictionary.getDictionaryObject( COSName.STM_F ); + if (stmF == null) + { + stmF = COSName.IDENTITY; + } + return stmF; + } + + /** + * Sets the name of the filter which is used for de/encrypting streams. + * + * @param streamFilterName the name of the filter + */ + public void setStreamFilterName(COSName streamFilterName) + { + dictionary.setItem(COSName.STM_F, streamFilterName); + } + + /** + * Returns the name of the filter which is used for de/encrypting strings. + * Default value is "Identity". + * + * @return the name of the filter + */ + public COSName getStringFilterName() + { + COSName strF = (COSName) dictionary.getDictionaryObject( COSName.STR_F ); + if (strF == null) + { + strF = COSName.IDENTITY; + } + return strF; + } + + /** + * Sets the name of the filter which is used for de/encrypting strings. + * + * @param stringFilterName the name of the filter + */ + public void setStringFilterName(COSName stringFilterName) + { + dictionary.setItem(COSName.STR_F, stringFilterName); + } + + /** + * Set the Perms entry in the encryption dictionary. + * + * @param perms A 16 byte array. + * + * @throws IOException If there is an error setting the data. + */ + public void setPerms(byte[] perms) throws IOException + { + dictionary.setItem( COSName.PERMS, new COSString(perms) ); + } + + /** + * Get the Perms entry in the encryption dictionary. + * + * @return A 16 byte array or null if there is no Perms entry. + * + * @throws IOException If there is an error accessing the data. + */ + public byte[] getPerms() throws IOException + { + byte[] perms = null; + COSString permsCosString = (COSString)dictionary.getDictionaryObject( COSName.PERMS ); + if( permsCosString != null ) + { + perms = permsCosString.getBytes(); + } + return perms; + } + + /** + * remove CF, StmF, and StrF entries. This is to be called if V is not 4 or 5. + */ + public void removeV45filters() + { + dictionary.setItem(COSName.CF, null); + dictionary.setItem(COSName.STM_F, null); + dictionary.setItem(COSName.STR_F, null); + } +} diff --git a/src/org/pdfbox/pdmodel/encryption/ProtectionPolicy.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/ProtectionPolicy.java similarity index 85% rename from src/org/pdfbox/pdmodel/encryption/ProtectionPolicy.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/ProtectionPolicy.java index a8520e38a00..a4f4d82a7ed 100644 --- a/src/org/pdfbox/pdmodel/encryption/ProtectionPolicy.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/ProtectionPolicy.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.pdfbox.pdmodel.encryption; +package org.apache.pdfbox.pdmodel.encryption; /** * This class represents the protection policy to apply to a document. @@ -23,10 +23,9 @@ * Objects implementing this abstract class can be passed to the protect method of PDDocument * to protect a document. * - * @see org.pdfbox.pdmodel.PDDocument#protect(ProtectionPolicy) + * @see org.apache.pdfbox.pdmodel.PDDocument#protect(ProtectionPolicy) * * @author Benoit Guillon (benoit.guillon@snv.jussieu.fr) - * @version $Revision: 1.3 $ */ public abstract class ProtectionPolicy { @@ -41,13 +40,13 @@ public abstract class ProtectionPolicy * The default value is 40 bits, which provides a low security level * but is compatible with old versions of Acrobat Reader. * - * @param l the length in bits (must be 40 or 128) + * @param l the length in bits (must be 40, 128 or 256) */ public void setEncryptionKeyLength(int l) { - if(l!=40 && l!=128) + if(l!=40 && l!=128 && l!=256) { - throw new RuntimeException("Invalid key length '" + l + "' value must be 40 or 128!"); + throw new IllegalArgumentException("Invalid key length '" + l + "' value must be 40, 128 or 256!"); } encryptionKeyLength = l; } diff --git a/src/org/pdfbox/pdmodel/encryption/PublicKeyDecryptionMaterial.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyDecryptionMaterial.java similarity index 78% rename from src/org/pdfbox/pdmodel/encryption/PublicKeyDecryptionMaterial.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyDecryptionMaterial.java index 3224c4e51ca..a9669571d65 100644 --- a/src/org/pdfbox/pdmodel/encryption/PublicKeyDecryptionMaterial.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyDecryptionMaterial.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.pdfbox.pdmodel.encryption; +package org.apache.pdfbox.pdmodel.encryption; import java.security.Key; import java.security.KeyStore; @@ -36,25 +36,8 @@ *

  • the password to decrypt the private key if necessary
  • * * - * Objects of this class can be used with the openProtection method of PDDocument. - * - * The following example shows how to decrypt a document using a PKCS#12 certificate - * (typically files with a pfx extension). - * - *
    - * PDDocument doc = PDDocument.load(document_path);
    - * KeyStore ks = KeyStore.getInstance("PKCS12");
    - * ks.load(new FileInputStream(certificate_path), password.toCharArray());
    - * PublicKeyDecryptionMaterial dm = new PublicKeyDecryptionMaterial(ks, null, password);
    - * doc.openProtection(dm);
    - * 
    - * - * In this code sample certificate_path contains the path to the PKCS#12 certificate. - * - * @see org.pdfbox.pdmodel.PDDocument#openProtection(DecryptionMaterial) - * - * @author Benoit Guillon (benoit.guillon@snv.jussieu.fr) - * @version $Revision: 1.2 $ + * @author Benoit Guillon + * */ public class PublicKeyDecryptionMaterial extends DecryptionMaterial @@ -92,8 +75,8 @@ public X509Certificate getCertificate() throws KeyStoreException { if(keyStore.size() == 1) { - Enumeration aliases = keyStore.aliases(); - String keyStoreAlias = (String)aliases.nextElement(); + Enumeration aliases = keyStore.aliases(); + String keyStoreAlias = aliases.nextElement(); return (X509Certificate)keyStore.getCertificate(keyStoreAlias); } else @@ -128,8 +111,8 @@ public Key getPrivateKey() throws KeyStoreException { if(keyStore.size() == 1) { - Enumeration aliases = keyStore.aliases(); - String keyStoreAlias = (String)aliases.nextElement(); + Enumeration aliases = keyStore.aliases(); + String keyStoreAlias = aliases.nextElement(); return keyStore.getKey(keyStoreAlias, password.toCharArray()); } else @@ -143,11 +126,11 @@ public Key getPrivateKey() throws KeyStoreException } catch(UnrecoverableKeyException ex) { - throw new KeyStoreException("the private key is not recoverable"); + throw new KeyStoreException("the private key is not recoverable", ex); } catch(NoSuchAlgorithmException ex) { - throw new KeyStoreException("the algorithm necessary to recover the key is not available"); + throw new KeyStoreException("the algorithm necessary to recover the key is not available", ex); } } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyProtectionPolicy.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyProtectionPolicy.java new file mode 100644 index 00000000000..cac4185e28c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyProtectionPolicy.java @@ -0,0 +1,127 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.encryption; + +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * The protection policy to use to protect a document with the public key security handler. + * + * PDF documents are encrypted so that they can be decrypted by + * one or more recipients. Each recipient have its own access permission. + * + * The following code sample shows how to protect a document using + * the public key security handler. In this code sample, doc is + * a PDDocument object. + * + *
    + * PublicKeyProtectionPolicy policy = new PublicKeyProtectionPolicy();
    + * PublicKeyRecipient recip = new PublicKeyRecipient();
    + * AccessPermission ap = new AccessPermission();
    + * ap.setCanModify(false);
    + * recip.setPermission(ap);
    + *
    + * // load the recipient's certificate
    + * InputStream inStream = new FileInputStream(certificate_path);
    + * CertificateFactory cf = CertificateFactory.getInstance("X.509");
    + * X509Certificate certificate = (X509Certificate)cf.generateCertificate(inStream);
    + * inStream.close();
    + *
    + * recip.setX509(certificate); // set the recipient's certificate
    + * policy.addRecipient(recip);
    + * policy.setEncryptionKeyLength(128); // the document will be encrypted with 128 bits secret key
    + * doc.protect(policy);
    + * doc.save(out);
    + * 
    + * + * @see org.apache.pdfbox.pdmodel.PDDocument#protect(ProtectionPolicy) + * @see AccessPermission + * @see PublicKeyRecipient + * @author Benoit Guillon + */ +public final class PublicKeyProtectionPolicy extends ProtectionPolicy +{ + private final List recipients = new ArrayList<>(); + private X509Certificate decryptionCertificate; + + /** + * Creates a new PublicKeyProtectionPolicy with an empty recipients list. + */ + public PublicKeyProtectionPolicy() + { + } + + /** + * Adds a new recipient to the recipients list. + * @param recipient A new recipient. + */ + public void addRecipient(PublicKeyRecipient recipient) + { + recipients.add(recipient); + } + + /** + * Removes a recipient from the recipients list. + * @param recipient The recipient to remove. + * @return true If a recipient was found and removed. + */ + public boolean removeRecipient(PublicKeyRecipient recipient) + { + return recipients.remove(recipient); + } + + /** + * Returns an iterator to browse the list of recipients. + * Object found in this iterator are PublicKeyRecipient. + * @return The recipients list iterator. + */ + public Iterator getRecipientsIterator() + { + return recipients.iterator(); + } + + /** + * Returns the decryption certificate. + * @return the decryption certificate + */ + public X509Certificate getDecryptionCertificate() + { + return decryptionCertificate; + } + + /** + * Sets the decryption certificate + * @param decryptionCertificate the new decryption certificate. + */ + public void setDecryptionCertificate(X509Certificate decryptionCertificate) + { + this.decryptionCertificate = decryptionCertificate; + } + + /** + * Returns the number of recipients + * @return the number of recipients + */ + public int getNumberOfRecipients() + { + return recipients.size(); + } +} diff --git a/src/org/pdfbox/pdmodel/encryption/PublicKeyRecipient.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyRecipient.java similarity index 93% rename from src/org/pdfbox/pdmodel/encryption/PublicKeyRecipient.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyRecipient.java index 119e23c0257..b04d12aea71 100644 --- a/src/org/pdfbox/pdmodel/encryption/PublicKeyRecipient.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeyRecipient.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.encryption; +package org.apache.pdfbox.pdmodel.encryption; import java.security.cert.X509Certificate; @@ -23,9 +23,8 @@ * * @see PublicKeyProtectionPolicy * - * @author Benoit Guillon (benoit.guillon@snv.jussieu.fr) + * @author Benoit Guillon * - * @version $Revision: 1.2 $ */ public class PublicKeyRecipient { diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java new file mode 100644 index 00000000000..03c10c33d1a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/PublicKeySecurityHandler.java @@ -0,0 +1,565 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.security.AlgorithmParameterGenerator; +import java.security.AlgorithmParameters; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.SecureRandom; +import java.security.cert.CertificateEncodingException; +import java.security.cert.X509Certificate; +import java.util.Collection; +import java.util.Iterator; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.KeyGenerator; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.ASN1ObjectIdentifier; +import org.bouncycastle.asn1.ASN1Primitive; +import org.bouncycastle.asn1.ASN1Set; +import org.bouncycastle.asn1.DEROctetString; +import org.bouncycastle.asn1.DEROutputStream; +import org.bouncycastle.asn1.DERSet; +import org.bouncycastle.asn1.cms.ContentInfo; +import org.bouncycastle.asn1.cms.EncryptedContentInfo; +import org.bouncycastle.asn1.cms.EnvelopedData; +import org.bouncycastle.asn1.cms.IssuerAndSerialNumber; +import org.bouncycastle.asn1.cms.KeyTransRecipientInfo; +import org.bouncycastle.asn1.cms.RecipientIdentifier; +import org.bouncycastle.asn1.cms.RecipientInfo; +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import org.bouncycastle.asn1.x509.TBSCertificate; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cms.CMSEnvelopedData; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.KeyTransRecipientId; +import org.bouncycastle.cms.RecipientId; +import org.bouncycastle.cms.RecipientInformation; +import org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient; + +/** + * This class implements the public key security handler described in the PDF specification. + * + * @see PublicKeyProtectionPolicy to see how to protect document with this security handler. + * @author Benoit Guillon + */ +public final class PublicKeySecurityHandler extends SecurityHandler +{ + /** The filter name. */ + public static final String FILTER = "Adobe.PubSec"; + + private static final String SUBFILTER4 = "adbe.pkcs7.s4"; + private static final String SUBFILTER5 = "adbe.pkcs7.s5"; + + private PublicKeyProtectionPolicy policy = null; + + /** + * Constructor. + */ + public PublicKeySecurityHandler() + { + } + + /** + * Constructor used for encryption. + * + * @param p The protection policy. + */ + public PublicKeySecurityHandler(PublicKeyProtectionPolicy p) + { + policy = p; + this.keyLength = policy.getEncryptionKeyLength(); + } + + /** + * Prepares everything to decrypt the document. + * + * @param encryption encryption dictionary, can be retrieved via + * {@link PDDocument#getEncryption()} + * @param documentIDArray document id which is returned via + * {@link org.apache.pdfbox.cos.COSDocument#getDocumentID()} (not used by + * this handler) + * @param decryptionMaterial Information used to decrypt the document. + * + * @throws IOException If there is an error accessing data. If verbose mode + * is enabled, the exception message will provide more details why the + * match wasn't successful. + */ + @Override + public void prepareForDecryption(PDEncryption encryption, COSArray documentIDArray, + DecryptionMaterial decryptionMaterial) + throws IOException + { + if (!(decryptionMaterial instanceof PublicKeyDecryptionMaterial)) + { + throw new IOException( + "Provided decryption material is not compatible with the document"); + } + + setDecryptMetadata(encryption.isEncryptMetaData()); + if (encryption.getLength() != 0) + { + this.keyLength = encryption.getLength(); + } + + PublicKeyDecryptionMaterial material = (PublicKeyDecryptionMaterial) decryptionMaterial; + + try + { + boolean foundRecipient = false; + + X509Certificate certificate = material.getCertificate(); + X509CertificateHolder materialCert = null; + if (certificate != null) + { + materialCert = new X509CertificateHolder(certificate.getEncoded()); + } + + // the decrypted content of the enveloped data that match + // the certificate in the decryption material provided + byte[] envelopedData = null; + + // the bytes of each recipient in the recipients array + COSArray array = (COSArray) encryption.getCOSObject().getItem(COSName.RECIPIENTS); + if (array == null) + { + PDCryptFilterDictionary defaultCryptFilterDictionary = encryption.getDefaultCryptFilterDictionary(); + array = (COSArray) defaultCryptFilterDictionary.getCOSObject().getItem(COSName.RECIPIENTS); + } + byte[][] recipientFieldsBytes = new byte[array.size()][]; + //TODO encryption.getRecipientsLength() and getRecipientStringAt() should be deprecated + + int recipientFieldsLength = 0; + StringBuilder extraInfo = new StringBuilder(); + for (int i = 0; i < array.size(); i++) + { + COSString recipientFieldString = (COSString) array.getObject(i); + byte[] recipientBytes = recipientFieldString.getBytes(); + CMSEnvelopedData data = new CMSEnvelopedData(recipientBytes); + Collection recipCertificatesIt = data.getRecipientInfos() + .getRecipients(); + int j = 0; + for (RecipientInformation ri : recipCertificatesIt) + { + // Impl: if a matching certificate was previously found it is an error, + // here we just don't care about it + RecipientId rid = ri.getRID(); + if (!foundRecipient && rid.match(materialCert)) + { + foundRecipient = true; + PrivateKey privateKey = (PrivateKey) material.getPrivateKey(); + // might need to call setContentProvider() if we use PKI token, see + // http://bouncy-castle.1462172.n4.nabble.com/CMSException-exception-unwrapping-key-key-invalid-unknown-key-type-passed-to-RSA-td4658109.html + envelopedData = ri.getContent(new JceKeyTransEnvelopedRecipient(privateKey)); + break; + } + j++; + if (certificate != null) + { + extraInfo.append('\n'); + extraInfo.append(j); + extraInfo.append(": "); + if (rid instanceof KeyTransRecipientId) + { + appendCertInfo(extraInfo, (KeyTransRecipientId) rid, certificate, materialCert); + } + } + } + recipientFieldsBytes[i] = recipientBytes; + recipientFieldsLength += recipientBytes.length; + } + if (!foundRecipient || envelopedData == null) + { + throw new IOException("The certificate matches none of " + array.size() + + " recipient entries" + extraInfo.toString()); + } + if (envelopedData.length != 24) + { + throw new IOException("The enveloped data does not contain 24 bytes"); + } + // now envelopedData contains: + // - the 20 bytes seed + // - the 4 bytes of permission for the current user + + byte[] accessBytes = new byte[4]; + System.arraycopy(envelopedData, 20, accessBytes, 0, 4); + + AccessPermission currentAccessPermission = new AccessPermission(accessBytes); + currentAccessPermission.setReadOnly(); + setCurrentAccessPermission(currentAccessPermission); + + // what we will put in the SHA1 = the seed + each byte contained in the recipients array + byte[] sha1Input = new byte[recipientFieldsLength + 20]; + + // put the seed in the sha1 input + System.arraycopy(envelopedData, 0, sha1Input, 0, 20); + + // put each bytes of the recipients array in the sha1 input + int sha1InputOffset = 20; + for (byte[] recipientFieldsByte : recipientFieldsBytes) + { + System.arraycopy(recipientFieldsByte, 0, sha1Input, sha1InputOffset, + recipientFieldsByte.length); + sha1InputOffset += recipientFieldsByte.length; + } + + byte[] mdResult; + if (encryption.getVersion() == 4 || encryption.getVersion() == 5) + { + mdResult = MessageDigests.getSHA256().digest(sha1Input); + + // detect whether AES encryption is used. This assumes that the encryption algo is + // stored in the PDCryptFilterDictionary + // However, crypt filters are used only when V is 4 or 5. + PDCryptFilterDictionary defaultCryptFilterDictionary = encryption.getDefaultCryptFilterDictionary(); + if (defaultCryptFilterDictionary != null) + { + COSName cryptFilterMethod = defaultCryptFilterDictionary.getCryptFilterMethod(); + setAES(COSName.AESV2.equals(cryptFilterMethod) || + COSName.AESV3.equals(cryptFilterMethod)); + } + } + else + { + mdResult = MessageDigests.getSHA1().digest(sha1Input); + } + + // we have the encryption key ... + encryptionKey = new byte[this.keyLength / 8]; + System.arraycopy(mdResult, 0, encryptionKey, 0, this.keyLength / 8); + } + catch (CMSException | KeyStoreException | CertificateEncodingException e) + { + throw new IOException(e); + } + } + + private void appendCertInfo(StringBuilder extraInfo, KeyTransRecipientId ktRid, + X509Certificate certificate, X509CertificateHolder materialCert) + { + BigInteger ridSerialNumber = ktRid.getSerialNumber(); + if (ridSerialNumber != null) + { + String certSerial = "unknown"; + BigInteger certSerialNumber = certificate.getSerialNumber(); + if (certSerialNumber != null) + { + certSerial = certSerialNumber.toString(16); + } + extraInfo.append("serial-#: rid "); + extraInfo.append(ridSerialNumber.toString(16)); + extraInfo.append(" vs. cert "); + extraInfo.append(certSerial); + extraInfo.append(" issuer: rid \'"); + extraInfo.append(ktRid.getIssuer()); + extraInfo.append("\' vs. cert \'"); + extraInfo.append(materialCert == null ? "null" : materialCert.getIssuer()); + extraInfo.append("\' "); + } + } + + /** + * Prepare the document for encryption. + * + * @param doc The document that will be encrypted. + * + * @throws IOException If there is an error while encrypting. + */ + @Override + public void prepareDocumentForEncryption(PDDocument doc) throws IOException + { + try + { + PDEncryption dictionary = doc.getEncryption(); + if (dictionary == null) + { + dictionary = new PDEncryption(); + } + + dictionary.setFilter(FILTER); + dictionary.setLength(this.keyLength); + int version = computeVersionNumber(); + dictionary.setVersion(version); + + // remove CF, StmF, and StrF entries that may be left from a previous encryption + dictionary.removeV45filters(); + + // create the 20 bytes seed + byte[] seed = new byte[20]; + + KeyGenerator key; + try + { + key = KeyGenerator.getInstance("AES"); + } + catch (NoSuchAlgorithmException e) + { + // should never happen + throw new RuntimeException(e); + } + + key.init(192, new SecureRandom()); + SecretKey sk = key.generateKey(); + + // create the 20 bytes seed + System.arraycopy(sk.getEncoded(), 0, seed, 0, 20); + + byte[][] recipientsFields = computeRecipientsField(seed); + + int shaInputLength = seed.length; + + for (byte[] field : recipientsFields) + { + shaInputLength += field.length; + } + + byte[] shaInput = new byte[shaInputLength]; + + System.arraycopy(seed, 0, shaInput, 0, 20); + + int shaInputOffset = 20; + + for (byte[] recipientsField : recipientsFields) + { + System.arraycopy(recipientsField, 0, shaInput, shaInputOffset, recipientsField.length); + shaInputOffset += recipientsField.length; + } + + byte[] mdResult; + if (version == 4 || version == 5) + { + dictionary.setSubFilter(SUBFILTER5); + mdResult = MessageDigests.getSHA256().digest(shaInput); + COSName aesVName = version == 5 ? COSName.AESV3 : COSName.AESV2; + prepareEncryptionDictAES(dictionary, aesVName, recipientsFields); + } + else + { + dictionary.setSubFilter(SUBFILTER4); + mdResult = MessageDigests.getSHA1().digest(shaInput); + dictionary.setRecipients(recipientsFields); + } + + this.encryptionKey = new byte[this.keyLength/8]; + System.arraycopy(mdResult, 0, this.encryptionKey, 0, this.keyLength/8); + + doc.setEncryptionDictionary(dictionary); + doc.getDocument().setEncryptionDictionary(dictionary.getCOSObject()); + } + catch(GeneralSecurityException e) + { + throw new IOException(e); + } + } + + /** + * Computes the version number of the StandardSecurityHandler based on the encryption key + * length. See PDF Spec 1.6 p 93 and + * PDF + * 1.7 Supplement ExtensionLevel: 3 + * + * @return The computed version number. + */ + private int computeVersionNumber() + { + switch (keyLength) + { + case 40: + return 1; + case 128: + return 2; // prefer RC4 (AES 128 doesn't work yet) + //return 4; // prefer AES + case 256: + return 5; + default: + throw new IllegalArgumentException("key length must be 40, 128 or 256"); + } + } + + private void prepareEncryptionDictAES(PDEncryption encryptionDictionary, COSName aesVName, byte[][] recipients) + { + PDCryptFilterDictionary cryptFilterDictionary = new PDCryptFilterDictionary(); + cryptFilterDictionary.setCryptFilterMethod(aesVName); + cryptFilterDictionary.setLength(keyLength); + COSArray array = new COSArray(); + for (byte[] recipient : recipients) + { + array.add(new COSString(recipient)); + } + cryptFilterDictionary.getCOSObject().setItem(COSName.RECIPIENTS, array); + array.setDirect(true); + encryptionDictionary.setDefaultCryptFilterDictionary(cryptFilterDictionary); + encryptionDictionary.setStreamFilterName(COSName.DEFAULT_CRYPT_FILTER); + encryptionDictionary.setStringFilterName(COSName.DEFAULT_CRYPT_FILTER); + cryptFilterDictionary.getCOSObject().setDirect(true); + setAES(true); + } + + private byte[][] computeRecipientsField(byte[] seed) throws GeneralSecurityException, IOException + { + byte[][] recipientsField = new byte[policy.getNumberOfRecipients()][]; + Iterator it = policy.getRecipientsIterator(); + int i = 0; + + while(it.hasNext()) + { + PublicKeyRecipient recipient = it.next(); + X509Certificate certificate = recipient.getX509(); + int permission = recipient.getPermission().getPermissionBytesForPublicKey(); + + byte[] pkcs7input = new byte[24]; + byte one = (byte)(permission); + byte two = (byte)(permission >>> 8); + byte three = (byte)(permission >>> 16); + byte four = (byte)(permission >>> 24); + + // put this seed in the pkcs7 input + System.arraycopy(seed, 0, pkcs7input, 0, 20); + + pkcs7input[20] = four; + pkcs7input[21] = three; + pkcs7input[22] = two; + pkcs7input[23] = one; + + ASN1Primitive obj = createDERForRecipient(pkcs7input, certificate); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + DEROutputStream derOS = new DEROutputStream(baos); + + derOS.writeObject(obj); + + recipientsField[i] = baos.toByteArray(); + + i++; + } + return recipientsField; + } + + private ASN1Primitive createDERForRecipient(byte[] in, X509Certificate cert) + throws IOException, GeneralSecurityException + { + String algorithm = PKCSObjectIdentifiers.RC2_CBC.getId(); + AlgorithmParameterGenerator apg; + KeyGenerator keygen; + Cipher cipher; + try + { + apg = AlgorithmParameterGenerator.getInstance(algorithm, SecurityProvider.getProvider()); + keygen = KeyGenerator.getInstance(algorithm, SecurityProvider.getProvider()); + cipher = Cipher.getInstance(algorithm, SecurityProvider.getProvider()); + } + catch (NoSuchAlgorithmException e) + { + // happens when using the command line app .jar file + throw new IOException("Could not find a suitable javax.crypto provider for algorithm " + + algorithm + "; possible reason: using an unsigned .jar file", e); + } + catch (NoSuchPaddingException e) + { + // should never happen, if this happens throw IOException instead + throw new RuntimeException("Could not find a suitable javax.crypto provider", e); + } + + AlgorithmParameters parameters = apg.generateParameters(); + + ASN1Primitive object; + try (ASN1InputStream input = new ASN1InputStream(parameters.getEncoded("ASN.1"))) + { + object = input.readObject(); + } + + keygen.init(128); + SecretKey secretkey = keygen.generateKey(); + + cipher.init(1, secretkey, parameters); + byte[] bytes = cipher.doFinal(in); + + KeyTransRecipientInfo recipientInfo = computeRecipientInfo(cert, secretkey.getEncoded()); + DERSet set = new DERSet(new RecipientInfo(recipientInfo)); + + AlgorithmIdentifier algorithmId = new AlgorithmIdentifier(new ASN1ObjectIdentifier(algorithm), object); + EncryptedContentInfo encryptedInfo = + new EncryptedContentInfo(PKCSObjectIdentifiers.data, algorithmId, new DEROctetString(bytes)); + EnvelopedData enveloped = new EnvelopedData(null, set, encryptedInfo, (ASN1Set) null); + + ContentInfo contentInfo = new ContentInfo(PKCSObjectIdentifiers.envelopedData, enveloped); + return contentInfo.toASN1Primitive(); + } + + private KeyTransRecipientInfo computeRecipientInfo(X509Certificate x509certificate, byte[] abyte0) + throws IOException, CertificateEncodingException, InvalidKeyException, + BadPaddingException, IllegalBlockSizeException + { + TBSCertificate certificate; + try (ASN1InputStream input = new ASN1InputStream(x509certificate.getTBSCertificate())) + { + certificate = TBSCertificate.getInstance(input.readObject()); + } + + AlgorithmIdentifier algorithmId = certificate.getSubjectPublicKeyInfo().getAlgorithm(); + + IssuerAndSerialNumber serial = new IssuerAndSerialNumber( + certificate.getIssuer(), + certificate.getSerialNumber().getValue()); + + Cipher cipher; + try + { + cipher = Cipher.getInstance(algorithmId.getAlgorithm().getId(), + SecurityProvider.getProvider()); + } + catch (NoSuchAlgorithmException | NoSuchPaddingException e) + { + // should never happen, if this happens throw IOException instead + throw new RuntimeException("Could not find a suitable javax.crypto provider", e); + } + + cipher.init(1, x509certificate.getPublicKey()); + + DEROctetString octets = new DEROctetString(cipher.doFinal(abyte0)); + RecipientIdentifier recipientId = new RecipientIdentifier(serial); + return new KeyTransRecipientInfo(recipientId, algorithmId, octets); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean hasProtectionPolicy() + { + return policy != null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java new file mode 100644 index 00000000000..a1c077caf1a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/RC4Cipher.java @@ -0,0 +1,166 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * An implementation of the RC4 stream cipher. + * + * @author Ben Litchfield + */ +class RC4Cipher +{ + private final int[] salt; + private int b; + private int c; + + /** + * Constructor. + */ + RC4Cipher() + { + salt = new int[256]; + } + + /** + * This will reset the key to be used. + * + * @param key The RC4 key used during encryption. + */ + public void setKey( byte[] key ) + { + b = 0; + c = 0; + + if(key.length < 1 || key.length > 32) + { + throw new IllegalArgumentException("number of bytes must be between 1 and 32"); + } + for(int i = 0; i < salt.length; i++) + { + salt[i] = i; + } + + int keyIndex = 0; + int saltIndex = 0; + for( int i = 0; i < salt.length; i++) + { + saltIndex = (fixByte(key[keyIndex]) + salt[i] + saltIndex) % 256; + swap( salt, i, saltIndex ); + keyIndex = (keyIndex + 1) % key.length; + } + + } + + /** + * This will ensure that the value for a byte >=0. + * + * @param aByte The byte to test against. + * + * @return A value >=0 and < 256 + */ + private static int fixByte( byte aByte ) + { + return aByte < 0 ? 256 + aByte : aByte; + } + + /** + * This will swap two values in an array. + * + * @param data The array to swap from. + * @param firstIndex The index of the first element to swap. + * @param secondIndex The index of the second element to swap. + */ + private static void swap( int[] data, int firstIndex, int secondIndex ) + { + int tmp = data[ firstIndex ]; + data[ firstIndex ] = data[ secondIndex ]; + data[ secondIndex ] = tmp; + } + + /** + * This will encrypt and write the next byte. + * + * @param aByte The byte to encrypt. + * @param output The stream to write to. + * + * @throws IOException If there is an error writing to the output stream. + */ + public void write( byte aByte, OutputStream output ) throws IOException + { + b = (b + 1) % 256; + c = (salt[b] + c) % 256; + swap( salt, b, c ); + int saltIndex = (salt[b] + salt[c]) % 256; + output.write(aByte ^ (byte)salt[saltIndex]); + } + + /** + * This will encrypt and write the data. + * + * @param data The data to encrypt. + * @param output The stream to write to. + * + * @throws IOException If there is an error writing to the output stream. + */ + public void write( byte[] data, OutputStream output ) throws IOException + { + for (byte aData : data) + { + write(aData, output); + } + } + + /** + * This will encrypt and write the data. + * + * @param data The data to encrypt. + * @param output The stream to write to. + * + * @throws IOException If there is an error writing to the output stream. + */ + public void write( InputStream data, OutputStream output ) throws IOException + { + byte[] buffer = new byte[1024]; + int amountRead; + while( (amountRead = data.read( buffer )) != -1 ) + { + write( buffer, 0, amountRead, output ); + } + } + + /** + * This will encrypt and write the data. + * + * @param data The data to encrypt. + * @param offset The offset into the array to start reading data from. + * @param len The number of bytes to attempt to read. + * @param output The stream to write to. + * + * @throws IOException If there is an error writing to the output stream. + */ + public void write( byte[] data, int offset, int len, OutputStream output) throws IOException + { + for( int i = offset; i < offset + len; i++ ) + { + write( data[i], output ); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java new file mode 100644 index 00000000000..0dab765fec9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java @@ -0,0 +1,688 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.GeneralSecurityException; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Collections; +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.Set; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.CipherInputStream; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.util.Charsets; + +/** + * A security handler as described in the PDF specifications. + * A security handler is responsible of documents protection. + * + * @author Ben Litchfield + * @author Benoit Guillon + * @author Manuel Kasper + */ +public abstract class SecurityHandler +{ + private static final Log LOG = LogFactory.getLog(SecurityHandler.class); + + private static final int DEFAULT_KEY_LENGTH = 40; + + // see 7.6.2, page 58, PDF 32000-1:2008 + private static final byte[] AES_SALT = { (byte) 0x73, (byte) 0x41, (byte) 0x6c, (byte) 0x54 }; + + /** The length in bits of the secret key used to encrypt the document. */ + protected int keyLength = DEFAULT_KEY_LENGTH; + + /** The encryption key that will used to encrypt / decrypt.*/ + protected byte[] encryptionKey; + + /** The RC4 implementation used for cryptographic functions. */ + private final RC4Cipher rc4 = new RC4Cipher(); + + /** indicates if the Metadata have to be decrypted of not. */ + private boolean decryptMetadata; + + // PDFBOX-4453, PDFBOX-4477: Originally this was just a Set. This failed in rare cases + // when a decrypted string was identical to an encrypted string. + // Because COSString.equals() checks the contents, decryption was then skipped. + // This solution keeps all different "equal" objects. + // IdentityHashMap solves this problem and is also faster than a HashMap + private final Set objects = + Collections.newSetFromMap(new IdentityHashMap()); + + private boolean useAES; + + /** + * The access permission granted to the current user for the document. These + * permissions are computed during decryption and are in read only mode. + */ + private AccessPermission currentAccessPermission = null; + + /** + * The stream filter name. + */ + private COSName streamFilterName; + + /** + * The string filter name. + */ + private COSName stringFilterName; + + /** + * Set wether to decrypt meta data. + * + * @param decryptMetadata true if meta data has to be decrypted. + */ + protected void setDecryptMetadata(boolean decryptMetadata) + { + this.decryptMetadata = decryptMetadata; + } + + /** + * Set the string filter name. + * + * @param stringFilterName the string filter name. + */ + protected void setStringFilterName(COSName stringFilterName) + { + this.stringFilterName = stringFilterName; + } + + /** + * Set the stream filter name. + * + * @param streamFilterName the stream filter name. + */ + protected void setStreamFilterName(COSName streamFilterName) + { + this.streamFilterName = streamFilterName; + } + + /** + * Prepare the document for encryption. + * + * @param doc The document that will be encrypted. + * + * @throws IOException If there is an error with the document. + */ + public abstract void prepareDocumentForEncryption(PDDocument doc) throws IOException; + + /** + * Prepares everything to decrypt the document. + * + * @param encryption encryption dictionary, can be retrieved via {@link PDDocument#getEncryption()} + * @param documentIDArray document id which is returned via {@link org.apache.pdfbox.cos.COSDocument#getDocumentID()} + * @param decryptionMaterial Information used to decrypt the document. + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException If there is an error accessing data. + */ + public abstract void prepareForDecryption(PDEncryption encryption, COSArray documentIDArray, + DecryptionMaterial decryptionMaterial) throws InvalidPasswordException, IOException; + + /** + * Encrypt or decrypt a set of data. + * + * @param objectNumber The data object number. + * @param genNumber The data generation number. + * @param data The data to encrypt. + * @param output The output to write the encrypted data to. + * @param decrypt true to decrypt the data, false to encrypt it. + * + * @throws IOException If there is an error reading the data. + */ + private void encryptData(long objectNumber, long genNumber, InputStream data, + OutputStream output, boolean decrypt) throws IOException + { + // Determine whether we're using Algorithm 1 (for RC4 and AES-128), or 1.A (for AES-256) + if (useAES && encryptionKey.length == 32) + { + encryptDataAES256(data, output, decrypt); + } + else + { + byte[] finalKey = calcFinalKey(objectNumber, genNumber); + + if (useAES) + { + encryptDataAESother(finalKey, data, output, decrypt); + } + else + { + encryptDataRC4(finalKey, data, output); + } + } + output.flush(); + } + + /** + * Calculate the key to be used for RC4 and AES-128. + * + * @param objectNumber The data object number. + * @param genNumber The data generation number. + * @return the calculated key. + */ + private byte[] calcFinalKey(long objectNumber, long genNumber) + { + byte[] newKey = new byte[encryptionKey.length + 5]; + System.arraycopy(encryptionKey, 0, newKey, 0, encryptionKey.length); + // PDF 1.4 reference pg 73 + // step 1 + // we have the reference + // step 2 + newKey[newKey.length - 5] = (byte) (objectNumber & 0xff); + newKey[newKey.length - 4] = (byte) (objectNumber >> 8 & 0xff); + newKey[newKey.length - 3] = (byte) (objectNumber >> 16 & 0xff); + newKey[newKey.length - 2] = (byte) (genNumber & 0xff); + newKey[newKey.length - 1] = (byte) (genNumber >> 8 & 0xff); + // step 3 + MessageDigest md = MessageDigests.getMD5(); + md.update(newKey); + if (useAES) + { + md.update(AES_SALT); + } + byte[] digestedKey = md.digest(); + // step 4 + int length = Math.min(newKey.length, 16); + byte[] finalKey = new byte[length]; + System.arraycopy(digestedKey, 0, finalKey, 0, length); + return finalKey; + } + + /** + * Encrypt or decrypt data with RC4. + * + * @param finalKey The final key obtained with via {@link #calcFinalKey(long, long)}. + * @param input The data to encrypt. + * @param output The output to write the encrypted data to. + * + * @throws IOException If there is an error reading the data. + */ + protected void encryptDataRC4(byte[] finalKey, InputStream input, OutputStream output) + throws IOException + { + rc4.setKey(finalKey); + rc4.write(input, output); + } + + /** + * Encrypt or decrypt data with RC4. + * + * @param finalKey The final key obtained with via {@link #calcFinalKey(long, long)}. + * @param input The data to encrypt. + * @param output The output to write the encrypted data to. + * + * @throws IOException If there is an error reading the data. + */ + protected void encryptDataRC4(byte[] finalKey, byte[] input, OutputStream output) throws IOException + { + rc4.setKey(finalKey); + rc4.write(input, output); + } + + + /** + * Encrypt or decrypt data with AES with key length other than 256 bits. + * + * @param finalKey The final key obtained with via {@link #calcFinalKey(long, long)}. + * @param data The data to encrypt. + * @param output The output to write the encrypted data to. + * @param decrypt true to decrypt the data, false to encrypt it. + * + * @throws IOException If there is an error reading the data. + */ + private void encryptDataAESother(byte[] finalKey, InputStream data, OutputStream output, boolean decrypt) + throws IOException + { + byte[] iv = new byte[16]; + + if (!prepareAESInitializationVector(decrypt, iv, data, output)) + { + return; + } + + try + { + Cipher decryptCipher; + try + { + decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + } + catch (NoSuchAlgorithmException e) + { + // should never happen + throw new RuntimeException(e); + } + + SecretKey aesKey = new SecretKeySpec(finalKey, "AES"); + IvParameterSpec ips = new IvParameterSpec(iv); + decryptCipher.init(decrypt ? Cipher.DECRYPT_MODE : Cipher.ENCRYPT_MODE, aesKey, ips); + byte[] buffer = new byte[256]; + int n; + while ((n = data.read(buffer)) != -1) + { + byte[] dst = decryptCipher.update(buffer, 0, n); + if (dst != null) + { + output.write(dst); + } + } + output.write(decryptCipher.doFinal()); + } + catch (InvalidKeyException | InvalidAlgorithmParameterException | NoSuchPaddingException | + IllegalBlockSizeException | BadPaddingException e) + { + throw new IOException(e); + } + } + + /** + * Encrypt or decrypt data with AES256. + * + * @param data The data to encrypt. + * @param output The output to write the encrypted data to. + * @param decrypt true to decrypt the data, false to encrypt it. + * + * @throws IOException If there is an error reading the data. + */ + private void encryptDataAES256(InputStream data, OutputStream output, boolean decrypt) throws IOException + { + byte[] iv = new byte[16]; + + if (!prepareAESInitializationVector(decrypt, iv, data, output)) + { + return; + } + + Cipher cipher; + try + { + cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKeySpec keySpec = new SecretKeySpec(encryptionKey, "AES"); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(decrypt ? Cipher.DECRYPT_MODE : Cipher.ENCRYPT_MODE, keySpec, ivSpec); + } + catch (GeneralSecurityException e) + { + throw new IOException(e); + } + + try (CipherInputStream cis = new CipherInputStream(data, cipher)) + { + IOUtils.copy(cis, output); + } + catch(IOException exception) + { + // starting with java 8 the JVM wraps an IOException around a GeneralSecurityException + // it should be safe to swallow a GeneralSecurityException + if (!(exception.getCause() instanceof GeneralSecurityException)) + { + throw exception; + } + LOG.debug("A GeneralSecurityException occured when decrypting some stream data", exception); + } + } + + private boolean prepareAESInitializationVector(boolean decrypt, byte[] iv, InputStream data, OutputStream output) throws IOException + { + if (decrypt) + { + // read IV from stream + int ivSize = data.read(iv); + if (ivSize == -1) + { + return false; + } + if (ivSize != iv.length) + { + throw new IOException( + "AES initialization vector not fully read: only " + + ivSize + " bytes read instead of " + iv.length); + } + } + else + { + // generate random IV and write to stream + SecureRandom rnd = new SecureRandom(); + rnd.nextBytes(iv); + output.write(iv); + } + return true; + } + + /** + * This will dispatch to the correct method. + * + * @param obj The object to decrypt. + * @param objNum The object number. + * @param genNum The object generation Number. + * + * @throws IOException If there is an error getting the stream data. + */ + public void decrypt(COSBase obj, long objNum, long genNum) throws IOException + { + if (!(obj instanceof COSString || obj instanceof COSDictionary || obj instanceof COSArray)) + { + return; + } + // PDFBOX-4477: only cache strings and streams, this improves speed and memory footprint + if (obj instanceof COSString) + { + if (objects.contains(obj)) + { + return; + } + objects.add(obj); + decryptString((COSString) obj, objNum, genNum); + } + else if (obj instanceof COSStream) + { + if (objects.contains(obj)) + { + return; + } + objects.add(obj); + decryptStream((COSStream) obj, objNum, genNum); + } + else if (obj instanceof COSDictionary) + { + decryptDictionary((COSDictionary) obj, objNum, genNum); + } + else if (obj instanceof COSArray) + { + decryptArray((COSArray) obj, objNum, genNum); + } + } + + /** + * This will decrypt a stream. + * + * @param stream The stream to decrypt. + * @param objNum The object number. + * @param genNum The object generation number. + * + * @throws IOException If there is an error getting the stream data. + */ + public void decryptStream(COSStream stream, long objNum, long genNum) throws IOException + { + // Stream encrypted with identity filter + if (COSName.IDENTITY.equals(streamFilterName)) + { + return; + } + + COSBase type = stream.getCOSName(COSName.TYPE); + if (!decryptMetadata && COSName.METADATA.equals(type)) + { + return; + } + // "The cross-reference stream shall not be encrypted" + if (COSName.XREF.equals(type)) + { + return; + } + if (COSName.METADATA.equals(type)) + { + byte[] buf; + // PDFBOX-3229 check case where metadata is not encrypted despite /EncryptMetadata missing + try (InputStream is = stream.createRawInputStream()) + { + buf = new byte[10]; + long isResult = is.read(buf); + + if (Long.compare(isResult, buf.length) != 0) + { + LOG.debug("Tried reading " + buf.length + " bytes but only " + isResult + " bytes read"); + } + } + if (Arrays.equals(buf, " entry : dictionary.entrySet()) + { + if (isSignature && COSName.CONTENTS.equals(entry.getKey())) + { + // do not decrypt the signature contents string + continue; + } + COSBase value = entry.getValue(); + // within a dictionary only the following kind of COS objects have to be decrypted + if (value instanceof COSString || value instanceof COSArray || value instanceof COSDictionary) + { + decrypt(value, objNum, genNum); + } + } + } + + /** + * This will decrypt a string. + * + * @param string the string to decrypt. + * @param objNum The object number. + * @param genNum The object generation number. + * + * @throws IOException If an error occurs writing the new string. + */ + private void decryptString(COSString string, long objNum, long genNum) throws IOException + { + // String encrypted with identity filter + if (COSName.IDENTITY.equals(stringFilterName)) + { + return; + } + + ByteArrayInputStream data = new ByteArrayInputStream(string.getBytes()); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try + { + encryptData(objNum, genNum, data, outputStream, true /* decrypt */); + string.setValue(outputStream.toByteArray()); + } + catch (IOException ex) + { + LOG.error("Failed to decrypt COSString of length " + string.getBytes().length + + " in object " + objNum + ": " + ex.getMessage(), ex); + } + } + + /** + * This will encrypt a string. + * + * @param string the string to encrypt. + * @param objNum The object number. + * @param genNum The object generation number. + * + * @throws IOException If an error occurs writing the new string. + */ + public void encryptString(COSString string, long objNum, int genNum) throws IOException + { + ByteArrayInputStream data = new ByteArrayInputStream(string.getBytes()); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + encryptData(objNum, genNum, data, buffer, false /* encrypt */); + string.setValue(buffer.toByteArray()); + } + + /** + * This will decrypt an array. + * + * @param array The array to decrypt. + * @param objNum The object number. + * @param genNum The object generation number. + * + * @throws IOException If there is an error accessing the data. + */ + private void decryptArray(COSArray array, long objNum, long genNum) throws IOException + { + for (int i = 0; i < array.size(); i++) + { + decrypt(array.get(i), objNum, genNum); + } + } + + /** + * Getter of the property keyLength. + * @return Returns the keyLength. + */ + public int getKeyLength() + { + return keyLength; + } + + /** + * Setter of the property keyLength. + * + * @param keyLen The keyLength to set. + */ + public void setKeyLength(int keyLen) + { + this.keyLength = keyLen; + } + + /** + * Sets the access permissions. + * + * @param currentAccessPermission The access permissions to be set. + */ + public void setCurrentAccessPermission(AccessPermission currentAccessPermission) + { + this.currentAccessPermission = currentAccessPermission; + } + + /** + * Returns the access permissions that were computed during document decryption. + * The returned object is in read only mode. + * + * @return the access permissions or null if the document was not decrypted. + */ + public AccessPermission getCurrentAccessPermission() + { + return currentAccessPermission; + } + + /** + * True if AES is used for encryption and decryption. + * + * @return true if AEs is used + */ + public boolean isAES() + { + return useAES; + } + + /** + * Set to true if AES for encryption and decryption should be used. + * + * @param aesValue if true AES will be used + * + */ + public void setAES(boolean aesValue) + { + useAES = aesValue; + } + + /** + * Returns whether a protection policy has been set. + * + * @return true if a protection policy has been set. + */ + public abstract boolean hasProtectionPolicy(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandlerFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandlerFactory.java new file mode 100644 index 00000000000..5a38a9afd23 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandlerFactory.java @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.encryption; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; + +/** + * Manages security handlers for the application. + * It follows the singleton pattern. + * To be usable, security managers must be registered in it. + * Security managers are retrieved by the application when necessary. + * + * @author Benoit Guillon + * @author John Hewson + */ +public final class SecurityHandlerFactory +{ + /** Singleton instance */ + public static final SecurityHandlerFactory INSTANCE = new SecurityHandlerFactory(); + + private final Map> nameToHandler = new HashMap<>(); + + private final Map, + Class> policyToHandler = new HashMap<>(); + + private SecurityHandlerFactory() + { + registerHandler(StandardSecurityHandler.FILTER, + StandardSecurityHandler.class, + StandardProtectionPolicy.class); + + registerHandler(PublicKeySecurityHandler.FILTER, + PublicKeySecurityHandler.class, + PublicKeyProtectionPolicy.class); + } + + /** + * Registers a security handler. + * + * If the security handler was already registered an exception is thrown. + * If another handler was previously registered for the same filter name or + * for the same policy name, an exception is thrown + * + * @param name the name of the filter + * @param securityHandler security handler class to register + * @param protectionPolicy protection policy class to register + */ + public void registerHandler(String name, + Class securityHandler, + Class protectionPolicy) + { + if (nameToHandler.containsKey(name)) + { + throw new IllegalStateException("The security handler name is already registered"); + } + + nameToHandler.put(name, securityHandler); + policyToHandler.put(protectionPolicy, securityHandler); + } + + /** + * Returns a new security handler for the given protection policy, or null none is available. + * @param policy the protection policy for which to create a security handler + * @return a new SecurityHandler instance, or null if none is available + */ + public SecurityHandler newSecurityHandlerForPolicy(ProtectionPolicy policy) + { + Class handlerClass = policyToHandler.get(policy.getClass()); + if (handlerClass == null) + { + return null; + } + + Class[] argsClasses = { policy.getClass() }; + Object[] args = { policy }; + return newSecurityHandler(handlerClass, argsClasses, args); + } + + /** + * Returns a new security handler for the given Filter name, or null none is available. + * @param name the Filter name from the PDF encryption dictionary + * @return a new SecurityHandler instance, or null if none is available + */ + public SecurityHandler newSecurityHandlerForFilter(String name) + { + Class handlerClass = nameToHandler.get(name); + if (handlerClass == null) + { + return null; + } + + Class[] argsClasses = { }; + Object[] args = { }; + return newSecurityHandler(handlerClass, argsClasses, args); + } + + /* Returns a new security handler for the given parameters, or null none is available. + * + * @param handlerClass the handler class. + * @param argsClasses the parameter array. + * @param args array of objects to be passed as arguments to the constructor call. + * @return a new SecurityHandler instance, or null if none is available. + */ + private SecurityHandler newSecurityHandler(Class handlerClass, + Class[] argsClasses, Object[] args) + { + try + { + Constructor ctor = + handlerClass.getDeclaredConstructor(argsClasses); + return ctor.newInstance(args); + } + catch(NoSuchMethodException | IllegalAccessException | InstantiationException | + InvocationTargetException e) + { + // should not happen in normal operation + throw new RuntimeException(e); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java new file mode 100644 index 00000000000..8492c08461f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityProvider.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.security.Provider; + +/** + * Singleton which provides a security provider. + * + */ +public class SecurityProvider +{ + private static Provider provider = null; + + private SecurityProvider() + { + } + + /** + * Returns the provider to be used for advanced encrypting/decrypting. Default is the BouncyCastleProvider. + * + * @return the security provider + * + * @throws IOException if the default provider can't be instantiated + */ + public static Provider getProvider() throws IOException + { + // TODO synchronize access + if (provider == null) + { + try + { + Class providerClass = (Class) Class + .forName("org.bouncycastle.jce.provider.BouncyCastleProvider"); + provider = providerClass.getDeclaredConstructor().newInstance(); + } + catch (ClassNotFoundException | InstantiationException | IllegalAccessException | + NoSuchMethodException | SecurityException | IllegalArgumentException | + InvocationTargetException ex) + { + throw new IOException(ex); + } + } + return provider; + } + + /** + * Set the provider to be used for advanced encrypting/decrypting. + * + * @param provider the security provider + */ + public static void setProvider(Provider provider) + { + SecurityProvider.provider = provider; + } +} diff --git a/src/org/pdfbox/pdmodel/encryption/StandardDecryptionMaterial.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardDecryptionMaterial.java similarity index 78% rename from src/org/pdfbox/pdmodel/encryption/StandardDecryptionMaterial.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardDecryptionMaterial.java index b61d94c3109..1524f3cdc5e 100644 --- a/src/org/pdfbox/pdmodel/encryption/StandardDecryptionMaterial.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardDecryptionMaterial.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.pdfbox.pdmodel.encryption; +package org.apache.pdfbox.pdmodel.encryption; /** @@ -25,18 +25,8 @@ * * This is only composed of a password. * - * The following example shows how to decrypt a document protected with - * the standard security handler: + * @author Benoit Guillon * - *
    - *  PDDocument doc = PDDocument.load(in);
    - *  StandardDecryptionMaterial dm = new StandardDecryptionMaterial("password");
    - *  doc.openProtection(dm);
    - *  
    - * - * @author Benoit Guillon (benoit.guillon@snv.jussieu.fr) - * - * @version $Revision: 1.2 $ */ public class StandardDecryptionMaterial extends DecryptionMaterial diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardProtectionPolicy.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardProtectionPolicy.java new file mode 100644 index 00000000000..cb1dd2477b8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardProtectionPolicy.java @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.encryption; + +/** + * The protection policy to add to a document for password-based protection. + * + * The following example shows how to protect a PDF document with password. + * In this example, the document will be protected so that someone opening + * the document with the user password user_pwd will not be + * able to modify the document. + * + *
    + * AccessPermission ap = new AccessPermission();
    + * ap.setCanModify(false);
    + * StandardProtectionPolicy policy = new StandardProtectionPolicy(owner_pwd, user_pwd, ap);
    + * doc.protect(policy);
    + * 
    + * + * @author Benoit Guillon + */ +public final class StandardProtectionPolicy extends ProtectionPolicy +{ + private AccessPermission permissions; + private String ownerPassword = ""; + private String userPassword = ""; + private boolean preferAES = false; + + /** + * Creates an new instance of the standard protection policy + * in order to protect a PDF document with passwords. + * + * @param ownerPassword The owner's password. + * @param userPassword The users's password. + * @param permissions The access permissions given to the user. + */ + public StandardProtectionPolicy(String ownerPassword, String userPassword, + AccessPermission permissions) + { + this.ownerPassword = ownerPassword; + this.userPassword = userPassword; + this.permissions = permissions; + } + + /** + * Returns the access permissions + * @return the access permissions + */ + public AccessPermission getPermissions() + { + return permissions; + } + + /** + * Sets the access permissions + * @param permissions the new access permissions + */ + public void setPermissions(AccessPermission permissions) + { + this.permissions = permissions; + } + + /** + * Returns the owner password. + * @return the owner password + */ + public String getOwnerPassword() + { + return ownerPassword; + } + + /** + * Sets the owner password + * @param ownerPassword the new owner password + */ + public void setOwnerPassword(String ownerPassword) + { + this.ownerPassword = ownerPassword; + } + + /** + * Returns the user password. + * @return the user password + */ + public String getUserPassword() + { + return userPassword; + } + + /** + * Sets the user password. + * @param userPassword the new user password + */ + public void setUserPassword(String userPassword) + { + this.userPassword = userPassword; + } + + /** + * Tell whether AES encryption is preferred when several encryption methods are available for + * the chosen key length. The default is false. This setting is only relevant if the key length + * is 128 bits. + * + * @return true if AES encryption is preferred + */ + public boolean isPreferAES() + { + return this.preferAES; + } + + /** + * Set whether AES encryption is preferred when several encryption methods are available for the + * chosen key length. The default is false. This setting is only relevant if the key length is + * 128 bits. + * + * @param preferAES + */ + public void setPreferAES(boolean preferAES) + { + this.preferAES = preferAES; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java new file mode 100644 index 00000000000..8503b7da3e3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/StandardSecurityHandler.java @@ -0,0 +1,1221 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.encryption; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.nio.charset.Charset; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Arrays; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.util.Charsets; + +/** + * The standard security handler. This security handler protects document with password. + * @see StandardProtectionPolicy to see how to protect document with this security handler. + * @author Ben Litchfield + * @author Benoit Guillon + * @author Manuel Kasper + */ +public final class StandardSecurityHandler extends SecurityHandler +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(StandardSecurityHandler.class); + + /** Type of security handler. */ + public static final String FILTER = "Standard"; + + /** Protection policy class for this handler. */ + public static final Class PROTECTION_POLICY_CLASS = StandardProtectionPolicy.class; + + /** Standard padding for encryption. */ + private static final byte[] ENCRYPT_PADDING = + { + (byte)0x28, (byte)0xBF, (byte)0x4E, (byte)0x5E, (byte)0x4E, + (byte)0x75, (byte)0x8A, (byte)0x41, (byte)0x64, (byte)0x00, + (byte)0x4E, (byte)0x56, (byte)0xFF, (byte)0xFA, (byte)0x01, + (byte)0x08, (byte)0x2E, (byte)0x2E, (byte)0x00, (byte)0xB6, + (byte)0xD0, (byte)0x68, (byte)0x3E, (byte)0x80, (byte)0x2F, + (byte)0x0C, (byte)0xA9, (byte)0xFE, (byte)0x64, (byte)0x53, + (byte)0x69, (byte)0x7A + }; + + // hashes used for Algorithm 2.B, depending on remainder from E modulo 3 + private static final String[] HASHES_2B = new String[] {"SHA-256", "SHA-384", "SHA-512"}; + + private static final int DEFAULT_VERSION = 1; + + private StandardProtectionPolicy policy; + + /** + * Constructor. + */ + public StandardSecurityHandler() + { + } + + /** + * Constructor used for encryption. + * + * @param p The protection policy. + */ + public StandardSecurityHandler(StandardProtectionPolicy p) + { + policy = p; + keyLength = policy.getEncryptionKeyLength(); + } + + /** + * Computes the version number of the StandardSecurityHandler based on the encryption key + * length. See PDF Spec 1.6 p 93 and + * PDF + * 1.7 Supplement ExtensionLevel: 3 and + * PDF + * Spec 2.0. + * + * @return The computed version number. + */ + private int computeVersionNumber() + { + if(keyLength == 40) + { + return DEFAULT_VERSION; + } + else if (keyLength == 128 && policy.isPreferAES()) + { + return 4; + } + else if (keyLength == 256) + { + return 5; + } + + return 2; + } + + /** + * Computes the revision version of the StandardSecurityHandler to + * use regarding the version number and the permissions bits set. + * See PDF Spec 1.6 p98 + * + * @param version The version number. + * + * @return The computed revision number. + */ + private int computeRevisionNumber(int version) + { + if(version < 2 && !policy.getPermissions().hasAnyRevision3PermissionSet()) + { + return 2; + } + if (version == 5) + { + // note about revision 5: "Shall not be used. This value was used by a deprecated Adobe extension." + return 6; + } + if (version == 4) + { + return 4; + } + if ( version == 2 || version == 3 || policy.getPermissions().hasAnyRevision3PermissionSet()) + { + return 3; + } + return 4; + } + + /** + * Prepares everything to decrypt the document. + * + * Only if decryption of single objects is needed this should be called. + * + * @param encryption encryption dictionary + * @param documentIDArray document id + * @param decryptionMaterial Information used to decrypt the document. + * + * @throws InvalidPasswordException If the password is incorrect. + * @throws IOException If there is an error accessing data. + */ + @Override + public void prepareForDecryption(PDEncryption encryption, COSArray documentIDArray, + DecryptionMaterial decryptionMaterial) + throws InvalidPasswordException, IOException + { + if(!(decryptionMaterial instanceof StandardDecryptionMaterial)) + { + throw new IOException("Decryption material is not compatible with the document"); + } + + // This is only used with security version 4 and 5. + if (encryption.getVersion() >= 4) { + setStreamFilterName(encryption.getStreamFilterName()); + setStringFilterName(encryption.getStreamFilterName()); + } + setDecryptMetadata(encryption.isEncryptMetaData()); + StandardDecryptionMaterial material = (StandardDecryptionMaterial)decryptionMaterial; + + String password = material.getPassword(); + if(password == null) + { + password = ""; + } + + int dicPermissions = encryption.getPermissions(); + int dicRevision = encryption.getRevision(); + int dicLength = encryption.getVersion() == 1 ? 5 : encryption.getLength() / 8; + + byte[] documentIDBytes = getDocumentIDBytes(documentIDArray); + + // we need to know whether the meta data was encrypted for password calculation + boolean encryptMetadata = encryption.isEncryptMetaData(); + + byte[] userKey = encryption.getUserKey(); + byte[] ownerKey = encryption.getOwnerKey(); + byte[] ue = null, oe = null; + + Charset passwordCharset = Charsets.ISO_8859_1; + if (dicRevision == 6 || dicRevision == 5) + { + passwordCharset = Charsets.UTF_8; + ue = encryption.getUserEncryptionKey(); + oe = encryption.getOwnerEncryptionKey(); + } + + AccessPermission currentAccessPermission; + + if( isOwnerPassword(password.getBytes(passwordCharset), userKey, ownerKey, + dicPermissions, documentIDBytes, dicRevision, + dicLength, encryptMetadata) ) + { + currentAccessPermission = AccessPermission.getOwnerAccessPermission(); + setCurrentAccessPermission(currentAccessPermission); + + byte[] computedPassword; + if (dicRevision == 6 || dicRevision == 5) + { + computedPassword = password.getBytes(passwordCharset); + } + else + { + computedPassword = getUserPassword(password.getBytes(passwordCharset), + ownerKey, dicRevision, dicLength ); + } + + encryptionKey = + computeEncryptedKey( + computedPassword, + ownerKey, userKey, oe, ue, + dicPermissions, + documentIDBytes, + dicRevision, + dicLength, + encryptMetadata, true ); + } + else if( isUserPassword(password.getBytes(passwordCharset), userKey, ownerKey, + dicPermissions, documentIDBytes, dicRevision, + dicLength, encryptMetadata) ) + { + currentAccessPermission = new AccessPermission(dicPermissions); + currentAccessPermission.setReadOnly(); + setCurrentAccessPermission(currentAccessPermission); + + encryptionKey = + computeEncryptedKey( + password.getBytes(passwordCharset), + ownerKey, userKey, oe, ue, + dicPermissions, + documentIDBytes, + dicRevision, + dicLength, + encryptMetadata, false ); + } + else + { + throw new InvalidPasswordException("Cannot decrypt PDF, the password is incorrect"); + } + + if (dicRevision == 6 || dicRevision == 5) + { + validatePerms(encryption, dicPermissions, encryptMetadata); + } + + if (encryption.getVersion() == 4 || encryption.getVersion() == 5) + { + // detect whether AES encryption is used. This assumes that the encryption algo is + // stored in the PDCryptFilterDictionary + // However, crypt filters are used only when V is 4 or 5. + PDCryptFilterDictionary stdCryptFilterDictionary = encryption.getStdCryptFilterDictionary(); + + if (stdCryptFilterDictionary != null) + { + COSName cryptFilterMethod = stdCryptFilterDictionary.getCryptFilterMethod(); + setAES(COSName.AESV2.equals(cryptFilterMethod) || + COSName.AESV3.equals(cryptFilterMethod)); + } + } + } + + private byte[] getDocumentIDBytes(COSArray documentIDArray) + { + //some documents may not have document id, see + //test\encryption\encrypted_doc_no_id.pdf + byte[] documentIDBytes; + if( documentIDArray != null && documentIDArray.size() >= 1 ) + { + COSString id = (COSString)documentIDArray.getObject( 0 ); + documentIDBytes = id.getBytes(); + } + else + { + documentIDBytes = new byte[0]; + } + return documentIDBytes; + } + + // Algorithm 13: validate permissions ("Perms" field). Relaxed to accomodate buggy encoders + // https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/adobe_supplement_iso32000.pdf + private void validatePerms(PDEncryption encryption, int dicPermissions, boolean encryptMetadata) throws IOException + { + try + { + // "Decrypt the 16-byte Perms string using AES-256 in ECB mode with an + // initialization vector of zero and the file encryption key as the key." + Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(encryptionKey, "AES")); + byte[] perms = cipher.doFinal(encryption.getPerms()); + + // "Verify that bytes 9-11 of the result are the characters ‘a’, ‘d’, ‘b’." + if (perms[9] != 'a' || perms[10] != 'd' || perms[11] != 'b') + { + LOG.warn("Verification of permissions failed (constant)"); + } + + // "Bytes 0-3 of the decrypted Perms entry, treated as a little-endian integer, + // are the user permissions. They should match the value in the P key." + int permsP = perms[0] & 0xFF | (perms[1] & 0xFF) << 8 | (perms[2] & 0xFF) << 16 | + (perms[3] & 0xFF) << 24; + + if (permsP != dicPermissions) + { + LOG.warn("Verification of permissions failed (" + String.format("%08X",permsP) + + " != " + String.format("%08X",dicPermissions) + ")"); + } + + if (encryptMetadata && perms[8] != 'T' || !encryptMetadata && perms[8] != 'F') + { + LOG.warn("Verification of permissions failed (EncryptMetadata)"); + } + } + catch (GeneralSecurityException e) + { + logIfStrongEncryptionMissing(); + throw new IOException(e); + } + } + + /** + * Prepare document for encryption. + * + * @param document The document to encrypt. + * + * @throws IOException If there is an error accessing data. + */ + @Override + public void prepareDocumentForEncryption(PDDocument document) throws IOException + { + PDEncryption encryptionDictionary = document.getEncryption(); + if(encryptionDictionary == null) + { + encryptionDictionary = new PDEncryption(); + } + int version = computeVersionNumber(); + int revision = computeRevisionNumber(version); + encryptionDictionary.setFilter(FILTER); + encryptionDictionary.setVersion(version); + if (version != 4 && version != 5) + { + // remove CF, StmF, and StrF entries that may be left from a previous encryption + encryptionDictionary.removeV45filters(); + } + encryptionDictionary.setRevision(revision); + encryptionDictionary.setLength(keyLength); + + String ownerPassword = policy.getOwnerPassword(); + String userPassword = policy.getUserPassword(); + if( ownerPassword == null ) + { + ownerPassword = ""; + } + if( userPassword == null ) + { + userPassword = ""; + } + + // If no owner password is set, use the user password instead. + if (ownerPassword.isEmpty()) + { + ownerPassword = userPassword; + } + + int permissionInt = policy.getPermissions().getPermissionBytes(); + + encryptionDictionary.setPermissions(permissionInt); + + int length = keyLength/8; + + if (revision == 6) + { + prepareEncryptionDictRev6(ownerPassword, userPassword, encryptionDictionary, permissionInt); + } + else + { + prepareEncryptionDictRev2345(ownerPassword, userPassword, encryptionDictionary, permissionInt, + document, revision, length); + } + + document.setEncryptionDictionary( encryptionDictionary ); + document.getDocument().setEncryptionDictionary(encryptionDictionary.getCOSObject()); + } + + private void prepareEncryptionDictRev6(String ownerPassword, String userPassword, + PDEncryption encryptionDictionary, int permissionInt) + throws IOException + { + try + { + SecureRandom rnd = new SecureRandom(); + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + + // make a random 256-bit file encryption key + encryptionKey = new byte[32]; + rnd.nextBytes(encryptionKey); + + // Algorithm 8a: Compute U + byte[] userPasswordBytes = truncate127(userPassword.getBytes(Charsets.UTF_8)); + byte[] userValidationSalt = new byte[8]; + byte[] userKeySalt = new byte[8]; + rnd.nextBytes(userValidationSalt); + rnd.nextBytes(userKeySalt); + byte[] hashU = computeHash2B(concat(userPasswordBytes, userValidationSalt), + userPasswordBytes, null); + byte[] u = concat(hashU, userValidationSalt, userKeySalt); + + // Algorithm 8b: Compute UE + byte[] hashUE = computeHash2B(concat(userPasswordBytes, userKeySalt), + userPasswordBytes, null); + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(hashUE, "AES"), + // "an initialization vector of zero" + new IvParameterSpec(new byte[16])); + byte[] ue = cipher.doFinal(encryptionKey); + + // Algorithm 9a: Compute O + byte[] ownerPasswordBytes = truncate127(ownerPassword.getBytes(Charsets.UTF_8)); + byte[] ownerValidationSalt = new byte[8]; + byte[] ownerKeySalt = new byte[8]; + rnd.nextBytes(ownerValidationSalt); + rnd.nextBytes(ownerKeySalt); + byte[] hashO = computeHash2B(concat(ownerPasswordBytes, ownerValidationSalt, u), + ownerPasswordBytes, u); + byte[] o = concat(hashO, ownerValidationSalt, ownerKeySalt); + + // Algorithm 9b: Compute OE + byte[] hashOE = computeHash2B(concat(ownerPasswordBytes, ownerKeySalt, u), + ownerPasswordBytes, u); + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(hashOE, "AES"), + // "an initialization vector of zero" + new IvParameterSpec(new byte[16])); + byte[] oe = cipher.doFinal(encryptionKey); + + // Set keys and other required constants in encryption dictionary + encryptionDictionary.setUserKey(u); + encryptionDictionary.setUserEncryptionKey(ue); + encryptionDictionary.setOwnerKey(o); + encryptionDictionary.setOwnerEncryptionKey(oe); + + prepareEncryptionDictAES(encryptionDictionary, COSName.AESV3); + + // Algorithm 10: compute "Perms" value + byte[] perms = new byte[16]; + perms[0] = (byte) permissionInt; + perms[1] = (byte) (permissionInt >>> 8); + perms[2] = (byte) (permissionInt >>> 16); + perms[3] = (byte) (permissionInt >>> 24); + perms[4] = (byte) 0xFF; + perms[5] = (byte) 0xFF; + perms[6] = (byte) 0xFF; + perms[7] = (byte) 0xFF; + perms[8] = 'T'; // we always encrypt Metadata + perms[9] = 'a'; + perms[10] = 'd'; + perms[11] = 'b'; + for (int i = 12; i <= 15; i++) + { + perms[i] = (byte) rnd.nextInt(); + } + + cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptionKey, "AES"), + // "an initialization vector of zero" + new IvParameterSpec(new byte[16])); + + byte[] permsEnc = cipher.doFinal(perms); + + encryptionDictionary.setPerms(permsEnc); + } + catch (GeneralSecurityException e) + { + logIfStrongEncryptionMissing(); + throw new IOException(e); + } + } + + private void prepareEncryptionDictRev2345(String ownerPassword, String userPassword, + PDEncryption encryptionDictionary, int permissionInt, PDDocument document, + int revision, int length) + throws IOException + { + COSArray idArray = document.getDocument().getDocumentID(); + + //check if the document has an id yet. If it does not then generate one + if (idArray == null || idArray.size() < 2) + { + MessageDigest md = MessageDigests.getMD5(); + BigInteger time = BigInteger.valueOf(System.currentTimeMillis()); + md.update(time.toByteArray()); + md.update(ownerPassword.getBytes(Charsets.ISO_8859_1)); + md.update(userPassword.getBytes(Charsets.ISO_8859_1)); + md.update(document.getDocument().toString().getBytes(Charsets.ISO_8859_1)); + + byte[] id = md.digest(this.toString().getBytes(Charsets.ISO_8859_1)); + COSString idString = new COSString(id); + + idArray = new COSArray(); + idArray.add(idString); + idArray.add(idString); + document.getDocument().setDocumentID(idArray); + } + + COSString id = (COSString) idArray.getObject(0); + + byte[] ownerBytes = computeOwnerPassword( + ownerPassword.getBytes(Charsets.ISO_8859_1), + userPassword.getBytes(Charsets.ISO_8859_1), revision, length); + + byte[] userBytes = computeUserPassword( + userPassword.getBytes(Charsets.ISO_8859_1), + ownerBytes, permissionInt, id.getBytes(), revision, length, true); + + encryptionKey = computeEncryptedKey(userPassword.getBytes(Charsets.ISO_8859_1), ownerBytes, + null, null, null, permissionInt, id.getBytes(), revision, length, true, false); + + encryptionDictionary.setOwnerKey(ownerBytes); + encryptionDictionary.setUserKey(userBytes); + + if (revision == 4) + { + prepareEncryptionDictAES(encryptionDictionary, COSName.AESV2); + } + } + + private void prepareEncryptionDictAES(PDEncryption encryptionDictionary, COSName aesVName) + { + PDCryptFilterDictionary cryptFilterDictionary = new PDCryptFilterDictionary(); + cryptFilterDictionary.setCryptFilterMethod(aesVName); + cryptFilterDictionary.setLength(keyLength); + encryptionDictionary.setStdCryptFilterDictionary(cryptFilterDictionary); + encryptionDictionary.setStreamFilterName(COSName.STD_CF); + encryptionDictionary.setStringFilterName(COSName.STD_CF); + setAES(true); + } + + /** + * Check for owner password. + * + * @param ownerPassword The owner password. + * @param user The u entry of the encryption dictionary. + * @param owner The o entry of the encryption dictionary. + * @param permissions The set of permissions on the document. + * @param id The document id. + * @param encRevision The encryption algorithm revision. + * @param keyLengthInBytes The encryption key length in bytes. + * @param encryptMetadata The encryption metadata + * + * @return True If the ownerPassword param is the owner password. + * + * @throws IOException If there is an error accessing data. + */ + public boolean isOwnerPassword(byte[] ownerPassword, byte[] user, byte[] owner, + int permissions, byte[] id, int encRevision, int keyLengthInBytes, + boolean encryptMetadata) throws IOException + { + if (encRevision == 6 || encRevision == 5) + { + byte[] truncatedOwnerPassword = truncate127(ownerPassword); + + byte[] oHash = new byte[32]; + byte[] oValidationSalt = new byte[8]; + System.arraycopy(owner, 0, oHash, 0, 32); + System.arraycopy(owner, 32, oValidationSalt, 0, 8); + + byte[] hash; + if (encRevision == 5) + { + hash = computeSHA256(truncatedOwnerPassword, oValidationSalt, user); + } + else + { + hash = computeHash2A(truncatedOwnerPassword, oValidationSalt, user); + } + + return Arrays.equals(hash, oHash); + } + else + { + byte[] userPassword = getUserPassword( ownerPassword, owner, encRevision, keyLengthInBytes ); + return isUserPassword( userPassword, user, owner, permissions, id, encRevision, keyLengthInBytes, + encryptMetadata ); + } + } + + /** + * Get the user password based on the owner password. + * + * @param ownerPassword The plaintext owner password. + * @param owner The o entry of the encryption dictionary. + * @param encRevision The encryption revision number. + * @param length The key length. + * + * @return The u entry of the encryption dictionary. + * + * @throws IOException If there is an error accessing data while generating the user password. + */ + public byte[] getUserPassword( byte[] ownerPassword, byte[] owner, int encRevision, + int length ) throws IOException + { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] rc4Key = computeRC4key(ownerPassword, encRevision, length); + + if( encRevision == 2 ) + { + encryptDataRC4(rc4Key, owner, result); + } + else if( encRevision == 3 || encRevision == 4) + { + byte[] iterationKey = new byte[ rc4Key.length ]; + byte[] otemp = new byte[ owner.length ]; + System.arraycopy( owner, 0, otemp, 0, owner.length ); + + for( int i=19; i>=0; i-- ) + { + System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length ); + for( int j=0; j< iterationKey.length; j++ ) + { + iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i); + } + result.reset(); + encryptDataRC4(iterationKey, otemp, result); + otemp = result.toByteArray(); + } + } + return result.toByteArray(); + } + + /** + * Compute the encryption key. + * + * @param password The password to compute the encrypted key. + * @param o The O entry of the encryption dictionary. + * @param u The U entry of the encryption dictionary. + * @param oe The OE entry of the encryption dictionary. + * @param ue The UE entry of the encryption dictionary. + * @param permissions The permissions for the document. + * @param id The document id. + * @param encRevision The revision of the encryption algorithm. + * @param keyLengthInBytes The length of the encryption key in bytes. + * @param encryptMetadata The encryption metadata + * @param isOwnerPassword whether the password given is the owner password (for revision 6) + * + * @return The encrypted key bytes. + * + * @throws IOException If there is an error with encryption. + */ + public byte[] computeEncryptedKey(byte[] password, byte[] o, byte[] u, byte[] oe, byte[] ue, + int permissions, byte[] id, int encRevision, int keyLengthInBytes, + boolean encryptMetadata, boolean isOwnerPassword) + throws IOException + { + if (encRevision == 6 || encRevision == 5) + { + return computeEncryptedKeyRev56(password, isOwnerPassword, o, u, oe, ue, encRevision); + } + else + { + return computeEncryptedKeyRev234(password, o, permissions, id, encryptMetadata, keyLengthInBytes, encRevision); + } + } + + private byte[] computeEncryptedKeyRev234(byte[] password, byte[] o, int permissions, + byte[] id, boolean encryptMetadata, int length, int encRevision) + { + //Algorithm 2, based on MD5 + + //PDFReference 1.4 pg 78 + byte[] padded = truncateOrPad(password); + + MessageDigest md = MessageDigests.getMD5(); + md.update(padded); + + md.update(o); + + md.update((byte) permissions); + md.update((byte) (permissions >>> 8)); + md.update((byte) (permissions >>> 16)); + md.update((byte) (permissions >>> 24)); + + md.update(id); + + //(Security handlers of revision 4 or greater) If document metadata is not being + // encrypted, pass 4 bytes with the value 0xFFFFFFFF to the MD5 hash function. + //see 7.6.3.3 Algorithm 2 Step f of PDF 32000-1:2008 + if (encRevision == 4 && !encryptMetadata) + { + md.update(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff }); + } + byte[] digest = md.digest(); + + if (encRevision == 3 || encRevision == 4) + { + for (int i = 0; i < 50; i++) + { + md.update(digest, 0, length); + digest = md.digest(); + } + } + + byte[] result = new byte[length]; + System.arraycopy(digest, 0, result, 0, length); + return result; + } + + private byte[] computeEncryptedKeyRev56(byte[] password, boolean isOwnerPassword, + byte[] o, byte[] u, byte[] oe, byte[] ue, int encRevision) + throws IOException + { + byte[] hash, fileKeyEnc; + + if (isOwnerPassword) + { + byte[] oKeySalt = new byte[8]; + System.arraycopy(o, 40, oKeySalt, 0, 8); + + if (encRevision == 5) + { + hash = computeSHA256(password, oKeySalt, u); + } + else + { + hash = computeHash2A(password, oKeySalt, u); + } + + fileKeyEnc = oe; + } + else + { + byte[] uKeySalt = new byte[8]; + System.arraycopy(u, 40, uKeySalt, 0, 8); + + if (encRevision == 5) + { + hash = computeSHA256(password, uKeySalt, null); + } + else + { + hash = computeHash2A(password, uKeySalt, null); + } + + fileKeyEnc = ue; + } + try + { + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(hash, "AES"), new IvParameterSpec(new byte[16])); + return cipher.doFinal(fileKeyEnc); + } + catch (GeneralSecurityException e) + { + logIfStrongEncryptionMissing(); + throw new IOException(e); + } + } + + /** + * This will compute the user password hash. + * + * @param password The plain text password. + * @param owner The owner password hash. + * @param permissions The document permissions. + * @param id The document id. + * @param encRevision The revision of the encryption. + * @param keyLengthInBytes The length of the encryption key in bytes. + * @param encryptMetadata The encryption metadata + * + * @return The user password. + * + * @throws IOException if the password could not be computed + */ + public byte[] computeUserPassword(byte[] password, byte[] owner, int permissions, + byte[] id, int encRevision, int keyLengthInBytes, + boolean encryptMetadata) throws IOException + { + ByteArrayOutputStream result = new ByteArrayOutputStream(); + byte[] encKey = computeEncryptedKey( password, owner, null, null, null, permissions, + id, encRevision, keyLengthInBytes, encryptMetadata, true ); + + if( encRevision == 2 ) + { + encryptDataRC4(encKey, ENCRYPT_PADDING, result ); + } + else if( encRevision == 3 || encRevision == 4 ) + { + MessageDigest md = MessageDigests.getMD5(); + md.update( ENCRYPT_PADDING ); + + md.update( id ); + result.write( md.digest() ); + + byte[] iterationKey = new byte[ encKey.length ]; + for( int i=0; i<20; i++ ) + { + System.arraycopy( encKey, 0, iterationKey, 0, iterationKey.length ); + for( int j=0; j< iterationKey.length; j++ ) + { + iterationKey[j] = (byte)(iterationKey[j] ^ i); + } + ByteArrayInputStream input = new ByteArrayInputStream(result.toByteArray()); + result.reset(); + encryptDataRC4(iterationKey, input, result); + } + + byte[] finalResult = new byte[32]; + System.arraycopy( result.toByteArray(), 0, finalResult, 0, 16 ); + System.arraycopy( ENCRYPT_PADDING, 0, finalResult, 16, 16 ); + result.reset(); + result.write( finalResult ); + } + return result.toByteArray(); + } + + /** + * Compute the owner entry in the encryption dictionary. + * + * @param ownerPassword The plaintext owner password. + * @param userPassword The plaintext user password. + * @param encRevision The revision number of the encryption algorithm. + * @param length The length of the encryption key. + * + * @return The o entry of the encryption dictionary. + * + * @throws IOException if the owner password could not be computed + */ + public byte[] computeOwnerPassword(byte[] ownerPassword, byte[] userPassword, + int encRevision, int length ) throws IOException + { + if( encRevision == 2 && length != 5 ) + { + throw new IOException("Expected length=5 actual=" + length ); + } + + byte[] rc4Key = computeRC4key(ownerPassword, encRevision, length); + byte[] paddedUser = truncateOrPad( userPassword ); + + ByteArrayOutputStream encrypted = new ByteArrayOutputStream(); + encryptDataRC4(rc4Key, new ByteArrayInputStream(paddedUser), encrypted); + + if( encRevision == 3 || encRevision == 4 ) + { + byte[] iterationKey = new byte[ rc4Key.length ]; + for( int i=1; i<20; i++ ) + { + System.arraycopy( rc4Key, 0, iterationKey, 0, rc4Key.length ); + for( int j=0; j< iterationKey.length; j++ ) + { + iterationKey[j] = (byte)(iterationKey[j] ^ (byte)i); + } + ByteArrayInputStream input = new ByteArrayInputStream( encrypted.toByteArray() ); + encrypted.reset(); + encryptDataRC4(iterationKey, input, encrypted ); + } + } + + return encrypted.toByteArray(); + } + + // steps (a) to (d) of "Algorithm 3: Computing the encryption dictionary’s O (owner password) value". + private byte[] computeRC4key(byte[] ownerPassword, int encRevision, int length) + { + MessageDigest md = MessageDigests.getMD5(); + byte[] digest = md.digest(truncateOrPad(ownerPassword)); + if (encRevision == 3 || encRevision == 4) + { + for (int i = 0; i < 50; i++) + { + // this deviates from the spec - however, omitting the length + // parameter prevents the file to be opened in Adobe Reader + // with the owner password when the key length is 40 bit (= 5 bytes) + md.update(digest, 0, length); + digest = md.digest(); + } + } + byte[] rc4Key = new byte[length]; + System.arraycopy(digest, 0, rc4Key, 0, length); + return rc4Key; + } + + + /** + * This will take the password and truncate or pad it as necessary. + * + * @param password The password to pad or truncate. + * + * @return The padded or truncated password. + */ + private byte[] truncateOrPad( byte[] password ) + { + byte[] padded = new byte[ ENCRYPT_PADDING.length ]; + int bytesBeforePad = Math.min( password.length, padded.length ); + System.arraycopy( password, 0, padded, 0, bytesBeforePad ); + System.arraycopy( ENCRYPT_PADDING, 0, padded, bytesBeforePad, + ENCRYPT_PADDING.length-bytesBeforePad ); + return padded; + } + + /** + * Check if a plaintext password is the user password. + * + * @param password The plaintext password. + * @param user The u entry of the encryption dictionary. + * @param owner The o entry of the encryption dictionary. + * @param permissions The permissions set in the PDF. + * @param id The document id used for encryption. + * @param encRevision The revision of the encryption algorithm. + * @param keyLengthInBytes The length of the encryption key in bytes. + * @param encryptMetadata The encryption metadata. + * + * @return true If the plaintext password is the user password. + * + * @throws IOException If there is an error accessing data. + */ + public boolean isUserPassword(byte[] password, byte[] user, byte[] owner, int permissions, + byte[] id, int encRevision, int keyLengthInBytes, boolean encryptMetadata) + throws IOException + { + switch (encRevision) + { + case 2: + case 3: + case 4: + return isUserPassword234(password, user, owner, permissions, id, encRevision, + keyLengthInBytes, encryptMetadata); + case 5: + case 6: + return isUserPassword56(password, user, encRevision); + default: + throw new IOException("Unknown Encryption Revision " + encRevision); + } + } + + private boolean isUserPassword234(byte[] password, byte[] user, byte[] owner, int permissions, + byte[] id, int encRevision, int length, boolean encryptMetadata) + throws IOException + { + byte[] passwordBytes = computeUserPassword(password, owner, permissions, id, encRevision, + length, encryptMetadata); + if (encRevision == 2) + { + return Arrays.equals(user, passwordBytes); + } + else + { + // compare first 16 bytes only + return Arrays.equals(Arrays.copyOf(user, 16), Arrays.copyOf(passwordBytes, 16)); + } + } + + private boolean isUserPassword56(byte[] password, byte[] user, int encRevision) throws IOException + { + byte[] truncatedPassword = truncate127(password); + byte[] uHash = new byte[32]; + byte[] uValidationSalt = new byte[8]; + System.arraycopy(user, 0, uHash, 0, 32); + System.arraycopy(user, 32, uValidationSalt, 0, 8); + + byte[] hash; + if (encRevision == 5) + { + hash = computeSHA256(truncatedPassword, uValidationSalt, null); + } + else + { + hash = computeHash2A(truncatedPassword, uValidationSalt, null); + } + + return Arrays.equals(hash, uHash); + } + + /** + * Check if a plaintext password is the user password. + * + * @param password The plaintext password. + * @param user The u entry of the encryption dictionary. + * @param owner The o entry of the encryption dictionary. + * @param permissions The permissions set in the PDF. + * @param id The document id used for encryption. + * @param encRevision The revision of the encryption algorithm. + * @param keyLengthInBytes The length of the encryption key in bytes. + * @param encryptMetadata The encryption metadata + * + * @return true If the plaintext password is the user password. + * + * @throws IOException If there is an error accessing data. + */ + public boolean isUserPassword(String password, byte[] user, byte[] owner, int permissions, + byte[] id, int encRevision, int keyLengthInBytes, boolean encryptMetadata) + throws IOException + { + if (encRevision == 6 || encRevision == 5) + { + return isUserPassword(password.getBytes(Charsets.UTF_8), user, owner, permissions, id, + encRevision, keyLengthInBytes, encryptMetadata); + } + else + { + return isUserPassword(password.getBytes(Charsets.ISO_8859_1), user, owner, permissions, id, + encRevision, keyLengthInBytes, encryptMetadata); + } + } + + /** + * Check for owner password. + * + * @param password The owner password. + * @param user The u entry of the encryption dictionary. + * @param owner The o entry of the encryption dictionary. + * @param permissions The set of permissions on the document. + * @param id The document id. + * @param encRevision The encryption algorithm revision. + * @param keyLengthInBytes The encryption key length in bytes. + * @param encryptMetadata The encryption metadata + * + * @return True If the ownerPassword param is the owner password. + * + * @throws IOException If there is an error accessing data. + */ + public boolean isOwnerPassword(String password, byte[] user, byte[] owner, int permissions, + byte[] id, int encRevision, int keyLengthInBytes, boolean encryptMetadata) + throws IOException + { + return isOwnerPassword(password.getBytes(Charsets.ISO_8859_1), user,owner,permissions, id, + encRevision, keyLengthInBytes, encryptMetadata); + } + + // Algorithm 2.A from ISO 32000-1 + private byte[] computeHash2A(byte[] password, byte[] salt, byte[] u) throws IOException + { + byte[] userKey; + if (u == null) + { + userKey = new byte[0]; + } + else if (u.length < 48) + { + throw new IOException("Bad U length"); + } + else if (u.length > 48) + { + // must truncate + userKey = new byte[48]; + System.arraycopy(u, 0, userKey, 0, 48); + } + else + { + userKey = u; + } + + byte[] truncatedPassword = truncate127(password); + byte[] input = concat(truncatedPassword, salt, userKey); + return computeHash2B(input, truncatedPassword, userKey); + } + + // Algorithm 2.B from ISO 32000-2 + private static byte[] computeHash2B(byte[] input, byte[] password, byte[] userKey) + throws IOException + { + try + { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] k = md.digest(input); + + byte[] e = null; + for (int round = 0; round < 64 || ((int)e[e.length-1] & 0xFF) > round - 32; round++) + { + byte[] k1; + if (userKey != null && userKey.length >= 48) + { + k1 = new byte[64*(password.length + k.length + 48)]; + } + else + { + k1 = new byte[64*(password.length + k.length)]; + } + + int pos = 0; + for (int i = 0; i < 64; i++) + { + System.arraycopy(password, 0, k1, pos, password.length); + pos += password.length; + System.arraycopy(k, 0, k1, pos, k.length); + pos += k.length; + if (userKey != null && userKey.length >= 48) + { + System.arraycopy(userKey, 0, k1, pos, 48); + pos += 48; + } + } + + byte[] kFirst = new byte[16]; + byte[] kSecond = new byte[16]; + System.arraycopy(k, 0, kFirst, 0, 16); + System.arraycopy(k, 16, kSecond, 0, 16); + + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(kFirst, "AES"); + IvParameterSpec ivSpec = new IvParameterSpec(kSecond); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + e = cipher.doFinal(k1); + + byte[] eFirst = new byte[16]; + System.arraycopy(e, 0, eFirst, 0, 16); + BigInteger bi = new BigInteger(1, eFirst); + BigInteger remainder = bi.mod(new BigInteger("3")); + String nextHash = HASHES_2B[remainder.intValue()]; + + md = MessageDigest.getInstance(nextHash); + k = md.digest(e); + } + + if (k.length > 32) + { + byte[] kTrunc = new byte[32]; + System.arraycopy(k, 0, kTrunc, 0, 32); + return kTrunc; + } + else + { + return k; + } + } + catch (GeneralSecurityException e) + { + logIfStrongEncryptionMissing(); + throw new IOException(e); + } + } + + private static byte[] computeSHA256(byte[] input, byte[] password, byte[] userKey) + throws IOException + { + try + { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + md.update(input); + md.update(password); + return userKey == null ? md.digest() : md.digest(userKey); + } + catch (NoSuchAlgorithmException e) + { + throw new IOException(e); + } + } + + private static byte[] concat(byte[] a, byte[] b) + { + byte[] o = new byte[a.length + b.length]; + System.arraycopy(a, 0, o, 0, a.length); + System.arraycopy(b, 0, o, a.length, b.length); + return o; + } + + private static byte[] concat(byte[] a, byte[] b, byte[] c) + { + byte[] o = new byte[a.length + b.length + c.length]; + System.arraycopy(a, 0, o, 0, a.length); + System.arraycopy(b, 0, o, a.length, b.length); + System.arraycopy(c, 0, o, a.length + b.length, c.length); + return o; + } + + private static byte[] truncate127(byte[] in) + { + if (in.length <= 127) + { + return in; + } + byte[] trunc = new byte[127]; + System.arraycopy(in, 0, trunc, 0, 127); + return trunc; + } + + private static void logIfStrongEncryptionMissing() + { + try + { + if (Cipher.getMaxAllowedKeyLength("AES") != Integer.MAX_VALUE) + { + LOG.warn("JCE unlimited strength jurisdiction policy files are not installed"); + } + } + catch (NoSuchAlgorithmException ex) + { + LOG.debug("AES Algorithm not available", ex); + } + } + + /** + * {@inheritDoc} + */ + @Override + public boolean hasProtectionPolicy() + { + return policy != null; + } +} diff --git a/src/org/pdfbox/pdmodel/encryption/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/encryption/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java new file mode 100644 index 00000000000..72b95c21005 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java @@ -0,0 +1,1002 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.awt.Color; +import java.io.IOException; +import java.util.Calendar; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderEffectDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.util.DateConverter; +import org.w3c.dom.CDATASection; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +/** + * This represents an FDF annotation that is part of the FDF document. + * + * @author Ben Litchfield + * @author Johanneke Lamberink + * + * */ +public abstract class FDFAnnotation implements COSObjectable +{ + private static final Log LOG = LogFactory.getLog(FDFAnnotation.class); + + /** + * An annotation flag. + */ + private static final int FLAG_INVISIBLE = 1 << 0; + /** + * An annotation flag. + */ + private static final int FLAG_HIDDEN = 1 << 1; + /** + * An annotation flag. + */ + private static final int FLAG_PRINTED = 1 << 2; + /** + * An annotation flag. + */ + private static final int FLAG_NO_ZOOM = 1 << 3; + /** + * An annotation flag. + */ + private static final int FLAG_NO_ROTATE = 1 << 4; + /** + * An annotation flag. + */ + private static final int FLAG_NO_VIEW = 1 << 5; + /** + * An annotation flag. + */ + private static final int FLAG_READ_ONLY = 1 << 6; + /** + * An annotation flag. + */ + private static final int FLAG_LOCKED = 1 << 7; + /** + * An annotation flag. + */ + private static final int FLAG_TOGGLE_NO_VIEW = 1 << 8; + + /** + * Annotation dictionary. + */ + protected COSDictionary annot; + + /** + * Default constructor. + */ + public FDFAnnotation() + { + annot = new COSDictionary(); + annot.setItem(COSName.TYPE, COSName.ANNOT); + } + + /** + * Constructor. + * + * @param a The FDF annotation. + */ + public FDFAnnotation(COSDictionary a) + { + annot = a; + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting data from the element. + */ + public FDFAnnotation(Element element) throws IOException + { + this(); + + String page = element.getAttribute("page"); + if (page == null || page.isEmpty()) + { + throw new IOException("Error: missing required attribute 'page'"); + } + setPage(Integer.parseInt(page)); + + String color = element.getAttribute("color"); + if (color != null && color.length() == 7 && color.charAt(0) == '#') + { + int colorValue = Integer.parseInt(color.substring(1, 7), 16); + setColor(new Color(colorValue)); + } + + setDate(element.getAttribute("date")); + + String flags = element.getAttribute("flags"); + if (flags != null) + { + String[] flagTokens = flags.split(","); + for (String flagToken : flagTokens) + { + switch (flagToken) + { + case "invisible": + setInvisible(true); + break; + case "hidden": + setHidden(true); + break; + case "print": + setPrinted(true); + break; + case "nozoom": + setNoZoom(true); + break; + case "norotate": + setNoRotate(true); + break; + case "noview": + setNoView(true); + break; + case "readonly": + setReadOnly(true); + break; + case "locked": + setLocked(true); + break; + case "togglenoview": + setToggleNoView(true); + break; + default: + break; + } + } + } + + setName(element.getAttribute("name")); + + String rect = element.getAttribute("rect"); + if (rect == null) + { + throw new IOException("Error: missing attribute 'rect'"); + } + String[] rectValues = rect.split(","); + if (rectValues.length != 4) + { + throw new IOException("Error: wrong amount of numbers in attribute 'rect'"); + } + float[] values = new float[4]; + for (int i = 0; i < 4; i++) + { + values[i] = Float.parseFloat(rectValues[i]); + } + COSArray array = new COSArray(); + array.setFloatArray(values); + setRectangle(new PDRectangle(array)); + + setTitle(element.getAttribute("title")); + + /* + * Set the markup annotation attributes + */ + setCreationDate(DateConverter.toCalendar(element.getAttribute("creationdate"))); + String opac = element.getAttribute("opacity"); + if (opac != null && !opac.isEmpty()) + { + setOpacity(Float.parseFloat(opac)); + } + setSubject(element.getAttribute("subject")); + + String intent = element.getAttribute("intent"); + if (intent.isEmpty()) + { + // not conforming to spec, but qoppa produces it and Adobe accepts it + intent = element.getAttribute("IT"); + } + setIntent(intent); + + XPath xpath = XPathFactory.newInstance().newXPath(); + try + { + setContents(xpath.evaluate("contents[1]", element)); + } + catch (XPathExpressionException e) + { + LOG.debug("Error while evaluating XPath expression for richtext contents", e); + } + + try + { + Node richContents = (Node) xpath.evaluate("contents-richtext[1]", element, + XPathConstants.NODE); + if (richContents != null) + { + setRichContents(richContentsToString(richContents, true)); + setContents(richContents.getTextContent().trim()); + } + } + catch (XPathExpressionException e) + { + LOG.debug("Error while evaluating XPath expression for richtext contents", e); + } + + PDBorderStyleDictionary borderStyle = new PDBorderStyleDictionary(); + String width = element.getAttribute("width"); + if (width != null && !width.isEmpty()) + { + borderStyle.setWidth(Float.parseFloat(width)); + } + if (borderStyle.getWidth() > 0) + { + String style = element.getAttribute("style"); + if (style != null && !style.isEmpty()) + { + switch (style) + { + case "dash": + borderStyle.setStyle("D"); + break; + case "bevelled": + borderStyle.setStyle("B"); + break; + case "inset": + borderStyle.setStyle("I"); + break; + case "underline": + borderStyle.setStyle("U"); + break; + case "cloudy": + borderStyle.setStyle("S"); + PDBorderEffectDictionary borderEffect = new PDBorderEffectDictionary(); + borderEffect.setStyle("C"); + String intensity = element.getAttribute("intensity"); + if (intensity != null && !intensity.isEmpty()) + { + borderEffect.setIntensity(Float.parseFloat(element + .getAttribute("intensity"))); + } + setBorderEffect(borderEffect); + break; + default: + borderStyle.setStyle("S"); + break; + } + } + String dashes = element.getAttribute("dashes"); + if (dashes != null && !dashes.isEmpty()) + { + String[] dashesValues = dashes.split(","); + COSArray dashPattern = new COSArray(); + for (String dashesValue : dashesValues) + { + dashPattern.add(COSNumber.get(dashesValue)); + } + borderStyle.setDashStyle(dashPattern); + } + setBorderStyle(borderStyle); + } + } + + /** + * Create the correct FDFAnnotation. + * + * @param fdfDic The FDF dictionary. + * + * @return A newly created FDFAnnotation + * + * @throws IOException If there is an error accessing the FDF information. + */ + public static FDFAnnotation create(COSDictionary fdfDic) throws IOException + { + FDFAnnotation retval = null; + if (fdfDic != null) + { + if (FDFAnnotationText.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationText(fdfDic); + } + else if (FDFAnnotationCaret.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationCaret(fdfDic); + } + else if (FDFAnnotationFreeText.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationFreeText(fdfDic); + } + else if (FDFAnnotationFileAttachment.SUBTYPE.equals(fdfDic + .getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationFileAttachment(fdfDic); + } + else if (FDFAnnotationHighlight.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationHighlight(fdfDic); + } + else if (FDFAnnotationInk.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationInk(fdfDic); + } + else if (FDFAnnotationLine.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationLine(fdfDic); + } + else if (FDFAnnotationLink.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationLink(fdfDic); + } + else if (FDFAnnotationCircle.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationCircle(fdfDic); + } + else if (FDFAnnotationSquare.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationSquare(fdfDic); + } + else if (FDFAnnotationPolygon.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationPolygon(fdfDic); + } + else if (FDFAnnotationPolyline.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationPolyline(fdfDic); + } + else if (FDFAnnotationSound.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationSound(fdfDic); + } + else if (FDFAnnotationSquiggly.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationSquiggly(fdfDic); + } + else if (FDFAnnotationStamp.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationStamp(fdfDic); + } + else if (FDFAnnotationStrikeOut.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationStrikeOut(fdfDic); + } + else if (FDFAnnotationUnderline.SUBTYPE.equals(fdfDic.getNameAsString(COSName.SUBTYPE))) + { + retval = new FDFAnnotationUnderline(fdfDic); + } + else + { + LOG.warn("Unknown or unsupported annotation type '" + + fdfDic.getNameAsString(COSName.SUBTYPE) + "'"); + } + } + return retval; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return annot; + } + + /** + * This will get the page number or null if it does not exist. + * + * @return The page number. + */ + public Integer getPage() + { + Integer retval = null; + COSNumber page = (COSNumber) annot.getDictionaryObject(COSName.PAGE); + if (page != null) + { + retval = page.intValue(); + } + return retval; + } + + /** + * This will set the page. + * + * @param page The page number. + */ + public final void setPage(int page) + { + annot.setInt(COSName.PAGE, page); + } + + /** + * Get the annotation color. + * + * @return The annotation color, or null if there is none. + */ + public Color getColor() + { + Color retval = null; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.C); + if (array != null) + { + float[] rgb = array.toFloatArray(); + if (rgb.length >= 3) + { + retval = new Color(rgb[0], rgb[1], rgb[2]); + } + } + return retval; + } + + /** + * Set the annotation color. + * + * @param c The annotation color. + */ + public final void setColor(Color c) + { + COSArray color = null; + if (c != null) + { + float[] colors = c.getRGBColorComponents(null); + color = new COSArray(); + color.setFloatArray(colors); + } + annot.setItem(COSName.C, color); + } + + /** + * Modification date. + * + * @return The date as a string. + */ + public String getDate() + { + return annot.getString(COSName.M); + } + + /** + * The annotation modification date. + * + * @param date The date to store in the FDF annotation. + */ + public final void setDate(String date) + { + annot.setString(COSName.M, date); + } + + /** + * Get the invisible flag. + * + * @return The invisible flag. + */ + public boolean isInvisible() + { + return annot.getFlag(COSName.F, FLAG_INVISIBLE); + } + + /** + * Set the invisible flag. + * + * @param invisible The new invisible flag. + */ + public final void setInvisible(boolean invisible) + { + annot.setFlag(COSName.F, FLAG_INVISIBLE, invisible); + } + + /** + * Get the hidden flag. + * + * @return The hidden flag. + */ + public boolean isHidden() + { + return annot.getFlag(COSName.F, FLAG_HIDDEN); + } + + /** + * Set the hidden flag. + * + * @param hidden The new hidden flag. + */ + public final void setHidden(boolean hidden) + { + annot.setFlag(COSName.F, FLAG_HIDDEN, hidden); + } + + /** + * Get the printed flag. + * + * @return The printed flag. + */ + public boolean isPrinted() + { + return annot.getFlag(COSName.F, FLAG_PRINTED); + } + + /** + * Set the printed flag. + * + * @param printed The new printed flag. + */ + public final void setPrinted(boolean printed) + { + annot.setFlag(COSName.F, FLAG_PRINTED, printed); + } + + /** + * Get the noZoom flag. + * + * @return The noZoom flag. + */ + public boolean isNoZoom() + { + return annot.getFlag(COSName.F, FLAG_NO_ZOOM); + } + + /** + * Set the noZoom flag. + * + * @param noZoom The new noZoom flag. + */ + public final void setNoZoom(boolean noZoom) + { + annot.setFlag(COSName.F, FLAG_NO_ZOOM, noZoom); + } + + /** + * Get the noRotate flag. + * + * @return The noRotate flag. + */ + public boolean isNoRotate() + { + return annot.getFlag(COSName.F, FLAG_NO_ROTATE); + } + + /** + * Set the noRotate flag. + * + * @param noRotate The new noRotate flag. + */ + public final void setNoRotate(boolean noRotate) + { + annot.setFlag(COSName.F, FLAG_NO_ROTATE, noRotate); + } + + /** + * Get the noView flag. + * + * @return The noView flag. + */ + public boolean isNoView() + { + return annot.getFlag(COSName.F, FLAG_NO_VIEW); + } + + /** + * Set the noView flag. + * + * @param noView The new noView flag. + */ + public final void setNoView(boolean noView) + { + annot.setFlag(COSName.F, FLAG_NO_VIEW, noView); + } + + /** + * Get the readOnly flag. + * + * @return The readOnly flag. + */ + public boolean isReadOnly() + { + return annot.getFlag(COSName.F, FLAG_READ_ONLY); + } + + /** + * Set the readOnly flag. + * + * @param readOnly The new readOnly flag. + */ + public final void setReadOnly(boolean readOnly) + { + annot.setFlag(COSName.F, FLAG_READ_ONLY, readOnly); + } + + /** + * Get the locked flag. + * + * @return The locked flag. + */ + public boolean isLocked() + { + return annot.getFlag(COSName.F, FLAG_LOCKED); + } + + /** + * Set the locked flag. + * + * @param locked The new locked flag. + */ + public final void setLocked(boolean locked) + { + annot.setFlag(COSName.F, FLAG_LOCKED, locked); + } + + /** + * Get the toggleNoView flag. + * + * @return The toggleNoView flag. + */ + public boolean isToggleNoView() + { + return annot.getFlag(COSName.F, FLAG_TOGGLE_NO_VIEW); + } + + /** + * Set the toggleNoView flag. + * + * @param toggleNoView The new toggleNoView flag. + */ + public final void setToggleNoView(boolean toggleNoView) + { + annot.setFlag(COSName.F, FLAG_TOGGLE_NO_VIEW, toggleNoView); + } + + /** + * Set a unique name for an annotation. + * + * @param name The unique annotation name. + */ + public final void setName(String name) + { + annot.setString(COSName.NM, name); + } + + /** + * Get the annotation name. + * + * @return The unique name of the annotation. + */ + public String getName() + { + return annot.getString(COSName.NM); + } + + /** + * Set the rectangle associated with this annotation. + * + * @param rectangle The annotation rectangle. + */ + public final void setRectangle(PDRectangle rectangle) + { + annot.setItem(COSName.RECT, rectangle); + } + + /** + * The rectangle associated with this annotation. + * + * @return The annotation rectangle. + */ + public PDRectangle getRectangle() + { + PDRectangle retval = null; + COSArray rectArray = (COSArray) annot.getDictionaryObject(COSName.RECT); + if (rectArray != null) + { + retval = new PDRectangle(rectArray); + } + return retval; + } + + /** + * Set the contents, or a description, for an annotation. + * + * @param contents The annotation contents, or a description. + */ + public final void setContents(String contents) + { + annot.setString(COSName.CONTENTS, contents); + } + + /** + * Get the text, or a description, of the annotation. + * + * @return The text, or a description, of the annotation. + */ + public String getContents() + { + return annot.getString(COSName.CONTENTS); + } + + /** + * Set a unique title for an annotation. + * + * @param title The annotation title. + */ + public final void setTitle(String title) + { + annot.setString(COSName.T, title); + } + + /** + * Get the annotation title. + * + * @return The title of the annotation. + */ + public String getTitle() + { + return annot.getString(COSName.T); + } + + /** + * The annotation create date. + * + * @return The date of the creation of the annotation date + * + * @throws IOException If there is an error converting the string to a Calendar object. + */ + public Calendar getCreationDate() throws IOException + { + return annot.getDate(COSName.CREATION_DATE); + } + + /** + * Set the creation date. + * + * @param date The date the annotation was created. + */ + public final void setCreationDate(Calendar date) + { + annot.setDate(COSName.CREATION_DATE, date); + } + + /** + * Set the annotation opacity. + * + * @param opacity The new opacity value. + */ + public final void setOpacity(float opacity) + { + annot.setFloat(COSName.CA, opacity); + } + + /** + * Get the opacity value. + * + * @return The opacity of the annotation. + */ + public float getOpacity() + { + return annot.getFloat(COSName.CA, 1f); + + } + + /** + * A short description of the annotation. + * + * @param subject The annotation subject. + */ + public final void setSubject(String subject) + { + annot.setString(COSName.SUBJ, subject); + } + + /** + * Get the description of the annotation. + * + * @return The subject of the annotation. + */ + public String getSubject() + { + return annot.getString(COSName.SUBJ); + } + + /** + * The intent of the annotation. + * + * @param intent The annotation's intent. + */ + public final void setIntent(String intent) + { + annot.setName(COSName.IT, intent); + } + + /** + * Get the intent of the annotation. + * + * @return The intent of the annotation. + */ + public String getIntent() + { + return annot.getNameAsString(COSName.IT); + } + + /** + * This will retrieve the rich text stream which is displayed in the popup window. + * + * @return the rich text stream. + */ + public String getRichContents() + { + return getStringOrStream(annot.getDictionaryObject(COSName.RC)); + } + + /** + * This will set the rich text stream which is displayed in the popup window. + * + * @param rc the rich text stream. + */ + public final void setRichContents(String rc) + { + annot.setItem(COSName.RC, new COSString(rc)); + } + + /** + * This will set the border style dictionary, specifying the width and dash pattern used in drawing the annotation. + * + * @param bs the border style dictionary to set. + * + */ + public final void setBorderStyle(PDBorderStyleDictionary bs) + { + annot.setItem(COSName.BS, bs); + } + + /** + * This will retrieve the border style dictionary, specifying the width and dash pattern used in drawing the + * annotation. + * + * @return the border style dictionary. + */ + public PDBorderStyleDictionary getBorderStyle() + { + COSDictionary bs = (COSDictionary) annot.getDictionaryObject(COSName.BS); + if (bs != null) + { + return new PDBorderStyleDictionary(bs); + } + else + { + return null; + } + } + + /** + * This will set the border effect dictionary, describing the effect applied to the border described by the BS + * entry. + * + * @param be the border effect dictionary to set. + * + */ + public final void setBorderEffect(PDBorderEffectDictionary be) + { + annot.setItem(COSName.BE, be); + } + + /** + * This will retrieve the border style dictionary, describing the effect applied to the border described by the BS + * entry. + * + * @return the border effect dictionary. + */ + public PDBorderEffectDictionary getBorderEffect() + { + COSDictionary be = (COSDictionary) annot.getDictionaryObject(COSName.BE); + if (be != null) + { + return new PDBorderEffectDictionary(be); + } + else + { + return null; + } + } + + /** + * Get a text or text stream. + * + * Some dictionary entries allow either a text or a text stream. + * + * @param base the potential text or text stream + * @return the text stream + */ + protected final String getStringOrStream(COSBase base) + { + if (base == null) + { + return ""; + } + else if (base instanceof COSString) + { + return ((COSString) base).getString(); + } + else if (base instanceof COSStream) + { + return ((COSStream) base).toTextString(); + } + else + { + return ""; + } + } + + private String richContentsToString(Node node, boolean root) + { + String subString = ""; + + NodeList nodelist = node.getChildNodes(); + for (int i = 0; i < nodelist.getLength(); i++) + { + Node child = nodelist.item(i); + if (child instanceof Element) + { + subString += richContentsToString(child, false); + } + else if (child instanceof CDATASection) + { + subString += ""; + } + else if (child instanceof Text) + { + String cdata = ((Text) child).getData(); + if (cdata!=null) + { + cdata = cdata.replace("&", "&").replace("<", "<"); + } + subString += cdata; + } + } + if (root) + { + return subString; + } + + NamedNodeMap attributes = node.getAttributes(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < attributes.getLength(); i++) + { + Node attribute = attributes.item(i); + String attributeNodeValue = attribute.getNodeValue(); + if (attributeNodeValue!=null) + { + attributeNodeValue = attributeNodeValue.replace("\"", """); + } + builder.append(String.format(" %s=\"%s\"", attribute.getNodeName(), + attributeNodeValue)); + } + return String.format("<%s%s>%s", node.getNodeName(), builder.toString(), + subString, node.getNodeName()); + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationCaret.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationCaret.java new file mode 100644 index 00000000000..39a3246e66a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationCaret.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.w3c.dom.Element; + +/** + * This represents a Caret FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationCaret extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Caret"; + + /** + * Default constructor. + */ + public FDFAnnotationCaret() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationCaret(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationCaret(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + initFringe(element); + + String symbol = element.getAttribute("symbol"); + if (symbol != null && !symbol.isEmpty()) + { + setSymbol(element.getAttribute("symbol")); + } + } + + private void initFringe(Element element) throws IOException + { + String fringe = element.getAttribute("fringe"); + if (fringe != null && !fringe.isEmpty()) + { + String[] fringeValues = fringe.split(","); + if (fringeValues.length != 4) + { + throw new IOException("Error: wrong amount of numbers in attribute 'fringe'"); + } + PDRectangle rect = new PDRectangle(); + rect.setLowerLeftX(Float.parseFloat(fringeValues[0])); + rect.setLowerLeftY(Float.parseFloat(fringeValues[1])); + rect.setUpperRightX(Float.parseFloat(fringeValues[2])); + rect.setUpperRightY(Float.parseFloat(fringeValues[3])); + setFringe(rect); + } + } + + /** + * This will set the fringe rectangle. Giving the difference between the annotations rectangle and where the drawing + * occurs. + * + * @param fringe the fringe + */ + public final void setFringe(PDRectangle fringe) + { + annot.setItem(COSName.RD, fringe); + } + + /** + * This will retrieve the fringe. Giving the difference between the annotations rectangle and where the drawing + * occurs. + * + * @return the rectangle difference + */ + public PDRectangle getFringe() + { + COSArray rd = (COSArray) annot.getDictionaryObject(COSName.RD); + if (rd != null) + { + return new PDRectangle(rd); + } + else + { + return null; + } + } + + /** + * This will set the symbol that shall be associated with the caret. + * + * @param symbol the symbol + */ + public final void setSymbol(String symbol) + { + String newSymbol = "None"; + if ("paragraph".equals(symbol)) + { + newSymbol = "P"; + } + annot.setString(COSName.SY, newSymbol); + } + + /** + * This will retrieve the symbol that shall be associated with the caret. + * + * @return the symbol + */ + public String getSymbol() + { + return annot.getString(COSName.SY); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationCircle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationCircle.java new file mode 100644 index 00000000000..bbbbf913bcd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationCircle.java @@ -0,0 +1,166 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.awt.Color; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.w3c.dom.Element; + +/** + * This represents a Circle FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationCircle extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Circle"; + + /** + * Default constructor. + */ + public FDFAnnotationCircle() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationCircle(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationCircle(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + String color = element.getAttribute("interior-color"); + if (color != null && color.length() == 7 && color.charAt(0) == '#') + { + int colorValue = Integer.parseInt(color.substring(1, 7), 16); + setInteriorColor(new Color(colorValue)); + } + + initFringe(element); + } + + private void initFringe(Element element) throws IOException + { + String fringe = element.getAttribute("fringe"); + if (fringe != null && !fringe.isEmpty()) + { + String[] fringeValues = fringe.split(","); + if (fringeValues.length != 4) + { + throw new IOException("Error: wrong amount of numbers in attribute 'fringe'"); + } + PDRectangle rect = new PDRectangle(); + rect.setLowerLeftX(Float.parseFloat(fringeValues[0])); + rect.setLowerLeftY(Float.parseFloat(fringeValues[1])); + rect.setUpperRightX(Float.parseFloat(fringeValues[2])); + rect.setUpperRightY(Float.parseFloat(fringeValues[3])); + setFringe(rect); + } + } + + /** + * This will set interior color of the drawn area. + * + * @param color The interior color of the circle. + */ + public final void setInteriorColor(Color color) + { + COSArray array = null; + if (color != null) + { + float[] colors = color.getRGBColorComponents(null); + array = new COSArray(); + array.setFloatArray(colors); + } + annot.setItem(COSName.IC, array); + } + + /** + * This will retrieve the interior color of the drawn area. + * + * @return object representing the color. + */ + public Color getInteriorColor() + { + Color retval = null; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.IC); + if (array != null) + { + float[] rgb = array.toFloatArray(); + if (rgb.length >= 3) + { + retval = new Color(rgb[0], rgb[1], rgb[2]); + } + } + return retval; + } + + /** + * This will set the fringe rectangle. Giving the difference between the annotations rectangle and where the drawing + * occurs. (To take account of any effects applied through the BE entry for example) + * + * @param fringe the fringe + */ + public final void setFringe(PDRectangle fringe) + { + annot.setItem(COSName.RD, fringe); + } + + /** + * This will get the fringe. Giving the difference between the annotations rectangle and where the drawing occurs. + * (To take account of any effects applied through the BE entry for example) + * + * @return the rectangle difference + */ + public PDRectangle getFringe() + { + COSArray rd = (COSArray) annot.getDictionaryObject(COSName.RD); + if (rd != null) + { + return new PDRectangle(rd); + } + else + { + return null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationFileAttachment.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationFileAttachment.java new file mode 100644 index 00000000000..14152ac2aef --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationFileAttachment.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a FileAttachment FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationFileAttachment extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "FileAttachment"; + + /** + * Default constructor. + */ + public FDFAnnotationFileAttachment() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationFileAttachment(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationFileAttachment(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationFreeText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationFreeText.java new file mode 100644 index 00000000000..975c4ed61e8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationFreeText.java @@ -0,0 +1,312 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.w3c.dom.Element; + +/** + * This represents a FreeText FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationFreeText extends FDFAnnotation +{ + private static final Log LOG = LogFactory.getLog(FDFAnnotationFreeText.class); + + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "FreeText"; + + /** + * Default constructor. + */ + public FDFAnnotationFreeText() + { + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationFreeText(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationFreeText(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + setJustification(element.getAttribute("justification")); + + XPath xpath = XPathFactory.newInstance().newXPath(); + try + { + setDefaultAppearance(xpath.evaluate("defaultappearance", element)); + setDefaultStyle(xpath.evaluate("defaultstyle", element)); + } + catch (XPathExpressionException ex) + { + LOG.debug("Error while evaluating XPath expression", ex); + } + initCallout(element); + String rotation = element.getAttribute("rotation"); + if (rotation != null && !rotation.isEmpty()) + { + setRotation(Integer.parseInt(rotation)); + } + initFringe(element); + String lineEndingStyle = element.getAttribute("head"); + if (lineEndingStyle != null && !lineEndingStyle.isEmpty()) + { + setLineEndingStyle(lineEndingStyle); + } + } + + private void initFringe(Element element) throws IOException + { + String fringe = element.getAttribute("fringe"); + if (fringe != null && !fringe.isEmpty()) + { + String[] fringeValues = fringe.split(","); + if (fringeValues.length != 4) + { + throw new IOException("Error: wrong amount of numbers in attribute 'fringe'"); + } + PDRectangle rect = new PDRectangle(); + rect.setLowerLeftX(Float.parseFloat(fringeValues[0])); + rect.setLowerLeftY(Float.parseFloat(fringeValues[1])); + rect.setUpperRightX(Float.parseFloat(fringeValues[2])); + rect.setUpperRightY(Float.parseFloat(fringeValues[3])); + setFringe(rect); + } + } + + private void initCallout(Element element) throws IOException + { + String callout = element.getAttribute("callout"); + if (callout != null && !callout.isEmpty()) + { + String[] calloutValues = callout.split(","); + float[] values = new float[calloutValues.length]; + for (int i = 0; i < calloutValues.length; i++) + { + values[i] = Float.parseFloat(calloutValues[i]); + } + setCallout(values); + } + } + + /** + * This will set the coordinates of the callout line. + * + * @param callout An array of four or six numbers specifying a callout line attached to the free + * text annotation. Six numbers [ x1 y1 x2 y2 x3 y3 ] represent the starting, knee point, and + * ending coordinates of the line in default user space, Four numbers [ x1 y1 x2 y2 ] represent + * the starting and ending coordinates of the line. + */ + public final void setCallout(float[] callout) + { + COSArray newCallout = new COSArray(); + newCallout.setFloatArray(callout); + annot.setItem(COSName.CL, newCallout); + } + + /** + * This will get the coordinates of the callout line. + * + * @return An array of four or six numbers specifying a callout line attached to the free text + * annotation. Six numbers [ x1 y1 x2 y2 x3 y3 ] represent the starting, knee point, and ending + * coordinates of the line in default user space, Four numbers [ x1 y1 x2 y2 ] represent the + * starting and ending coordinates of the line. + */ + public float[] getCallout() + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.CL); + if (array != null) + { + return array.toFloatArray(); + } + else + { + return null; + } + } + + /** + * This will set the form of quadding (justification) of the annotation text. + * + * @param justification The quadding of the text. + */ + public final void setJustification(String justification) + { + int quadding = 0; + if ("centered".equals(justification)) + { + quadding = 1; + } + else if ("right".equals(justification)) + { + quadding = 2; + } + annot.setInt(COSName.Q, quadding); + } + + /** + * This will get the form of quadding (justification) of the annotation text. + * + * @return The quadding of the text. + */ + public String getJustification() + { + return "" + annot.getInt(COSName.Q, 0); + } + + /** + * This will set the clockwise rotation in degrees. + * + * @param rotation The number of degrees of clockwise rotation. + */ + public final void setRotation(int rotation) + { + annot.setInt(COSName.ROTATE, rotation); + } + + /** + * This will get the clockwise rotation in degrees. + * + * @return The number of degrees of clockwise rotation. + */ + public String getRotation() + { + return annot.getString(COSName.ROTATE); + } + + /** + * Set the default appearance string. + * + * @param appearance The new default appearance string. + */ + public final void setDefaultAppearance(String appearance) + { + annot.setString(COSName.DA, appearance); + } + + /** + * Get the default appearance string. + * + * @return The default appearance of the annotation. + */ + public String getDefaultAppearance() + { + return annot.getString(COSName.DA); + + } + + /** + * Set the default style string. + * + * @param style The new default style string. + */ + public final void setDefaultStyle(String style) + { + annot.setString(COSName.DS, style); + } + + /** + * Get the default style string. + * + * @return The default style of the annotation. + */ + public String getDefaultStyle() + { + return annot.getString(COSName.DS); + } + + /** + * This will set the fringe rectangle. Giving the difference between the annotations rectangle + * and where the drawing occurs. (To take account of any effects applied through the BE entry + * for example) + * + * @param fringe the fringe + */ + public final void setFringe(PDRectangle fringe) + { + annot.setItem(COSName.RD, fringe); + } + + /** + * This will get the fringe. Giving the difference between the annotations rectangle and where + * the drawing occurs. (To take account of any effects applied through the BE entry for example) + * + * @return the rectangle difference + */ + public PDRectangle getFringe() + { + COSArray rd = (COSArray) annot.getDictionaryObject(COSName.RD); + if (rd != null) + { + return new PDRectangle(rd); + } + else + { + return null; + } + } + + /** + * This will set the line ending style. + * + * @param style The new style. + */ + public final void setLineEndingStyle(String style) + { + annot.setName(COSName.LE, style); + } + + /** + * This will retrieve the line ending style. + * + * @return The ending style for the start point. + */ + public String getLineEndingStyle() + { + return annot.getNameAsString(COSName.LE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationHighlight.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationHighlight.java new file mode 100644 index 00000000000..3a5235aeeef --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationHighlight.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a Highlight FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationHighlight extends FDFAnnotationTextMarkup +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Highlight"; + + /** + * Default constructor. + */ + public FDFAnnotationHighlight() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationHighlight(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationHighlight(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationInk.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationInk.java new file mode 100644 index 00000000000..37588116f01 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationInk.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * This represents a Ink FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationInk extends FDFAnnotation +{ + private static final Log LOG = LogFactory.getLog(FDFAnnotationInk.class); + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Ink"; + + /** + * Default constructor. + */ + public FDFAnnotationInk() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationInk(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationInk(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + XPath xpath = XPathFactory.newInstance().newXPath(); + try + { + NodeList gestures = (NodeList) xpath.evaluate("inklist/gesture", element, + XPathConstants.NODESET); + if (gestures.getLength() == 0) + { + throw new IOException("Error: missing element 'gesture'"); + } + List inklist = new ArrayList<>(); + for (int i = 0; i < gestures.getLength(); i++) + { + Node node = gestures.item(i); + if (node instanceof Element) + { + String gesture = node.getFirstChild().getNodeValue(); + String[] gestureValues = gesture.split(",|;"); + float[] values = new float[gestureValues.length]; + for (int j = 0; j < gestureValues.length; j++) + { + values[j] = Float.parseFloat(gestureValues[j]); + } + inklist.add(values); + } + } + setInkList(inklist); + } + catch (XPathExpressionException e) + { + LOG.debug("Error while evaluating XPath expression for inklist gestures", e); + } + } + + /** + * Set the paths making up the freehand "scribble". + * + * The ink annotation is made up of one ore more disjoint paths. Each array entry is an array representing a stroked + * path, being a series of alternating horizontal and vertical coordinates in default user space. + * + * @param inklist the List of arrays representing the paths. + */ + public final void setInkList(List inklist) + { + COSArray newInklist = new COSArray(); + for (float[] array : inklist) + { + COSArray newArray = new COSArray(); + newArray.setFloatArray(array); + newInklist.add(newArray); + } + annot.setItem(COSName.INKLIST, newInklist); + } + + /** + * Get the paths making up the freehand "scribble". + * + * @see #setInkList(List) + * @return the List of arrays representing the paths. + */ + public List getInkList() + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.INKLIST); + if (array != null) + { + List retval = new ArrayList<>(); + for (COSBase entry : array) + { + retval.add(((COSArray) entry).toFloatArray()); + } + return retval; + } + else + { + return null; // Should never happen as this is a required item + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationLine.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationLine.java new file mode 100644 index 00000000000..6846ca43000 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationLine.java @@ -0,0 +1,474 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.awt.Color; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine; +import org.w3c.dom.Element; + +/** + * This represents a Line FDF annotation. + * + * @author Ben Litchfield + * @author Johanneke Lamberink + */ +public class FDFAnnotationLine extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Line"; + + /** + * Default constructor. + */ + public FDFAnnotationLine() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationLine(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationLine(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + String startCoords = element.getAttribute("start"); + if (startCoords == null || startCoords.isEmpty()) + { + throw new IOException("Error: missing attribute 'start'"); + } + String endCoords = element.getAttribute("end"); + if (endCoords == null || endCoords.isEmpty()) + { + throw new IOException("Error: missing attribute 'end'"); + } + String line = startCoords + "," + endCoords; + String[] lineValues = line.split(","); + if (lineValues.length != 4) + { + throw new IOException("Error: wrong amount of line coordinates"); + } + float[] values = new float[4]; + for (int i = 0; i < 4; i++) + { + values[i] = Float.parseFloat(lineValues[i]); + } + setLine(values); + + String leaderLine = element.getAttribute("leaderLength"); + if (leaderLine != null && !leaderLine.isEmpty()) + { + setLeaderLength(Float.parseFloat(leaderLine)); + } + + String leaderLineExtension = element.getAttribute("leaderExtend"); + if (leaderLineExtension != null && !leaderLineExtension.isEmpty()) + { + setLeaderExtend(Float.parseFloat(leaderLineExtension)); + } + + String leaderLineOffset = element.getAttribute("leaderOffset"); + if (leaderLineOffset != null && !leaderLineOffset.isEmpty()) + { + setLeaderOffset(Float.parseFloat(leaderLineOffset)); + } + + String startStyle = element.getAttribute("head"); + if (startStyle != null && !startStyle.isEmpty()) + { + setStartPointEndingStyle(startStyle); + } + String endStyle = element.getAttribute("tail"); + if (endStyle != null && !endStyle.isEmpty()) + { + setEndPointEndingStyle(endStyle); + } + + String color = element.getAttribute("interior-color"); + if (color != null && color.length() == 7 && color.charAt(0) == '#') + { + int colorValue = Integer.parseInt(color.substring(1, 7), 16); + setInteriorColor(new Color(colorValue)); + } + + String caption = element.getAttribute("caption"); + if (caption != null && !caption.isEmpty()) + { + setCaption("yes".equals(caption)); + } + + String captionH = element.getAttribute("caption-offset-h"); + if (captionH != null && !captionH.isEmpty()) + { + setCaptionHorizontalOffset(Float.parseFloat(captionH)); + } + + String captionV = element.getAttribute("caption-offset-v"); + if (captionV != null && !captionV.isEmpty()) + { + setCaptionVerticalOffset(Float.parseFloat(captionV)); + } + + String captionStyle = element.getAttribute("caption-style"); + if (captionStyle != null && !captionStyle.isEmpty()) + { + setCaptionStyle(captionStyle); + } + } + + /** + * This will set start and end coordinates of the line (or leader line if LL entry is set). + * + * @param line array of 4 floats [x1, y1, x2, y2] line start and end points in default user space. + */ + public final void setLine(float[] line) + { + COSArray newLine = new COSArray(); + newLine.setFloatArray(line); + annot.setItem(COSName.L, newLine); + } + + /** + * This will retrieve the start and end coordinates of the line (or leader line if LL entry is set). + * + * @return array of floats [x1, y1, x2, y2] line start and end points in default user space. + */ + public float[] getLine() + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.L); + if (array != null) + { + return array.toFloatArray(); + } + else + { + return null; // Should never happen as this is a required item + } + } + + /** + * This will set the line ending style for the start point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public final void setStartPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array == null) + { + array = new COSArray(); + array.add(COSName.getPDFName(actualStyle)); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + annot.setItem(COSName.LE, array); + } + else + { + array.setName(0, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the start point, possible values shown in the LE_ constants section. + * + * @return The ending style for the start point. + */ + public String getStartPointEndingStyle() + { + String retval = PDAnnotationLine.LE_NONE; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array != null) + { + retval = array.getName(0); + } + + return retval; + } + + /** + * This will set the line ending style for the end point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public final void setEndPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array == null) + { + array = new COSArray(); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + array.add(COSName.getPDFName(actualStyle)); + annot.setItem(COSName.LE, array); + } + else + { + array.setName(1, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the end point, possible values shown in the LE_ constants section. + * + * @return The ending style for the end point. + */ + public String getEndPointEndingStyle() + { + String retval = PDAnnotationLine.LE_NONE; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array != null) + { + retval = array.getName(1); + } + + return retval; + } + + /** + * This will set interior color of the line endings defined in the LE entry. + * + * @param color The interior color of the line endings. + */ + public final void setInteriorColor(Color color) + { + COSArray array = null; + if (color != null) + { + float[] colors = color.getRGBColorComponents(null); + array = new COSArray(); + array.setFloatArray(colors); + } + annot.setItem(COSName.IC, array); + } + + /** + * This will retrieve the interior color of the line endings defined in the LE entry. + * + * @return object representing the color. + */ + public Color getInteriorColor() + { + Color retval = null; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.IC); + if (array != null) + { + float[] rgb = array.toFloatArray(); + if (rgb.length >= 3) + { + retval = new Color(rgb[0], rgb[1], rgb[2]); + } + } + return retval; + } + + /** + * This will set if the contents are shown as a caption to the line. + * + * @param cap Boolean value. + */ + public final void setCaption(boolean cap) + { + annot.setBoolean(COSName.CAP, cap); + } + + /** + * This will retrieve if the contents are shown as a caption or not. + * + * @return boolean if the content is shown as a caption. + */ + public boolean getCaption() + { + return annot.getBoolean(COSName.CAP, false); + } + + /** + * This will retrieve the length of the leader line. + * + * @return the length of the leader line + */ + public float getLeaderLength() + { + return annot.getFloat(COSName.LL); + } + + /** + * This will set the length of the leader line. + * + * @param leaderLength length of the leader line + */ + public final void setLeaderLength(float leaderLength) + { + annot.setFloat(COSName.LL, leaderLength); + } + + /** + * This will retrieve the length of the leader line extensions. + * + * @return the length of the leader line extensions + */ + public float getLeaderExtend() + { + return annot.getFloat(COSName.LLE); + } + + /** + * This will set the length of the leader line extensions. + * + * @param leaderExtend length of the leader line extensions + */ + public final void setLeaderExtend(float leaderExtend) + { + annot.setFloat(COSName.LLE, leaderExtend); + } + + /** + * This will retrieve the length of the leader line offset. + * + * @return the length of the leader line offset + */ + public float getLeaderOffset() + { + return annot.getFloat(COSName.LLO); + } + + /** + * This will set the length of the leader line offset. + * + * @param leaderOffset length of the leader line offset + */ + public final void setLeaderOffset(float leaderOffset) + { + annot.setFloat(COSName.LLO, leaderOffset); + } + + /** + * This will retrieve the caption positioning. + * + * @return the caption positioning + */ + public String getCaptionStyle() + { + return annot.getString(COSName.CP); + } + + /** + * This will set the caption positioning. Allowed values are: "Inline" and "Top" + * + * @param captionStyle caption positioning + */ + public final void setCaptionStyle(String captionStyle) + { + annot.setString(COSName.CP, captionStyle); + } + + /** + * This will set the horizontal offset of the caption. + * + * @param offset the horizontal offset of the caption + */ + public final void setCaptionHorizontalOffset(float offset) + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.CO); + if (array == null) + { + array = new COSArray(); + array.setFloatArray(new float[] { offset, 0.f }); + annot.setItem(COSName.CO, array); + } + else + { + array.set(0, new COSFloat(offset)); + } + } + + /** + * This will retrieve the horizontal offset of the caption. + * + * @return the horizontal offset of the caption + */ + public float getCaptionHorizontalOffset() + { + float retval = 0.f; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.CO); + if (array != null) + { + retval = array.toFloatArray()[0]; + } + + return retval; + } + + /** + * This will set the vertical offset of the caption. + * + * @param offset vertical offset of the caption + */ + public final void setCaptionVerticalOffset(float offset) + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.CO); + if (array == null) + { + array = new COSArray(); + array.setFloatArray(new float[] { 0.f, offset }); + annot.setItem(COSName.CO, array); + } + else + { + array.set(1, new COSFloat(offset)); + } + } + + /** + * This will retrieve the vertical offset of the caption. + * + * @return the vertical offset of the caption + */ + public float getCaptionVerticalOffset() + { + float retval = 0.f; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.CO); + if (array != null) + { + retval = array.toFloatArray()[1]; + } + return retval; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationLink.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationLink.java new file mode 100644 index 00000000000..a6a1519ab94 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationLink.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a Polygon FDF annotation. + */ +public class FDFAnnotationLink extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Link"; + + /** + * Default constructor. + */ + public FDFAnnotationLink() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationLink(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationLink(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolygon.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolygon.java new file mode 100644 index 00000000000..da1f4766e57 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolygon.java @@ -0,0 +1,177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.awt.Color; +import java.io.IOException; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a Polygon FDF annotation. + * + * @author Ben Litchfield + * @author Johanneke Lamberink + */ +public class FDFAnnotationPolygon extends FDFAnnotation +{ + private static final Log LOG = LogFactory.getLog(FDFAnnotationPolygon.class); + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Polygon"; + + /** + * Default constructor. + */ + public FDFAnnotationPolygon() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationPolygon(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationPolygon(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + initVertices(element); + String color = element.getAttribute("interior-color"); + if (color != null && color.length() == 7 && color.charAt(0) == '#') + { + int colorValue = Integer.parseInt(color.substring(1, 7), 16); + setInteriorColor(new Color(colorValue)); + } + } + + private void initVertices(Element element) throws IOException + { + XPath xpath = XPathFactory.newInstance().newXPath(); + try + { + String vertices = xpath.evaluate("vertices", element); + if (vertices == null || vertices.isEmpty()) + { + throw new IOException("Error: missing element 'vertices'"); + } + String[] verticesValues = vertices.split(",|;"); + float[] values = new float[verticesValues.length]; + for (int i = 0; i < verticesValues.length; i++) + { + values[i] = Float.parseFloat(verticesValues[i]); + } + setVertices(values); + } + catch (XPathExpressionException e) + { + LOG.debug("Error while evaluating XPath expression for polygon vertices", e); + } + } + + /** + * This will set the coordinates of the vertices. + * + * @param vertices array of floats [x1, y1, x2, y2, ...] vertex coordinates in default user space. + */ + public final void setVertices(float[] vertices) + { + COSArray newVertices = new COSArray(); + newVertices.setFloatArray(vertices); + annot.setItem(COSName.VERTICES, newVertices); + } + + /** + * This will get the coordinates of the vertices. + * + * @return array of floats [x1, y1, x2, y2, ...] vertex coordinates in default user space. + */ + public float[] getVertices() + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.VERTICES); + if (array != null) + { + return array.toFloatArray(); + } + else + { + return null; // Should never happen as this is a required item + } + } + + /** + * This will set interior color of the drawn area. + * + * @param color The interior color of the drawn area. + */ + public final void setInteriorColor(Color color) + { + COSArray array = null; + if (color != null) + { + float[] colors = color.getRGBColorComponents(null); + array = new COSArray(); + array.setFloatArray(colors); + } + annot.setItem(COSName.IC, array); + } + + /** + * This will get interior color of the drawn area. + * + * @return object representing the color. + */ + public Color getInteriorColor() + { + Color retval = null; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.IC); + if (array != null) + { + float[] rgb = array.toFloatArray(); + if (rgb.length >= 3) + { + retval = new Color(rgb[0], rgb[1], rgb[2]); + } + } + return retval; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java new file mode 100644 index 00000000000..9b0c1fc57de --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java @@ -0,0 +1,272 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.awt.Color; +import java.io.IOException; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine; +import org.w3c.dom.Element; + +/** + * This represents a Polyline FDF annotation. + * + * @author Ben Litchfield + * @author Johanneke Lamberink + */ +public class FDFAnnotationPolyline extends FDFAnnotation +{ + private static final Log LOG = LogFactory.getLog(FDFAnnotationPolyline.class); + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Polyline"; + + /** + * Default constructor. + */ + public FDFAnnotationPolyline() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationPolyline(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationPolyline(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + initVertices(element); + initStyles(element); + } + + private void initVertices(Element element) throws IOException + { + XPath xpath = XPathFactory.newInstance().newXPath(); + try + { + String vertices = xpath.evaluate("vertices[1]", element); + if (vertices == null || vertices.isEmpty()) + { + throw new IOException("Error: missing element 'vertices'"); + } + String[] verticesValues = vertices.split(",|;"); + float[] values = new float[verticesValues.length]; + for (int i = 0; i < verticesValues.length; i++) + { + values[i] = Float.parseFloat(verticesValues[i]); + } + setVertices(values); + } + catch (XPathExpressionException e) + { + LOG.debug("Error while evaluating XPath expression for polyline vertices", e); + } + } + + private void initStyles(Element element) + { + String startStyle = element.getAttribute("head"); + if (startStyle != null && !startStyle.isEmpty()) + { + setStartPointEndingStyle(startStyle); + } + String endStyle = element.getAttribute("tail"); + if (endStyle != null && !endStyle.isEmpty()) + { + setEndPointEndingStyle(endStyle); + } + + String color = element.getAttribute("interior-color"); + if (color != null && color.length() == 7 && color.charAt(0) == '#') + { + int colorValue = Integer.parseInt(color.substring(1, 7), 16); + setInteriorColor(new Color(colorValue)); + } + } + + /** + * This will set the coordinates of the the vertices. + * + * @param vertices array of floats [x1, y1, x2, y2, ...] vertex coordinates in default user space. + */ + public void setVertices(float[] vertices) + { + COSArray newVertices = new COSArray(); + newVertices.setFloatArray(vertices); + annot.setItem(COSName.VERTICES, newVertices); + } + + /** + * This will get the coordinates of the the vertices. + * + * @return array of floats [x1, y1, x2, y2, ...] vertex coordinates in default user space. + */ + public float[] getVertices() + { + COSArray array = (COSArray) annot.getDictionaryObject(COSName.VERTICES); + if (array != null) + { + return array.toFloatArray(); + } + else + { + return null; // Should never happen as this is a required item + } + } + + /** + * This will set the line ending style for the start point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public void setStartPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array == null) + { + array = new COSArray(); + array.add(COSName.getPDFName(actualStyle)); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + annot.setItem(COSName.LE, array); + } + else + { + array.setName(0, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the start point, possible values shown in the LE_ constants section. + * + * @return The ending style for the start point. + */ + public String getStartPointEndingStyle() + { + String retval = PDAnnotationLine.LE_NONE; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array != null) + { + retval = array.getName(0); + } + + return retval; + } + + /** + * This will set the line ending style for the end point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public void setEndPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array == null) + { + array = new COSArray(); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + array.add(COSName.getPDFName(actualStyle)); + annot.setItem(COSName.LE, array); + } + else + { + array.setName(1, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the end point, possible values shown in the LE_ constants section. + * + * @return The ending style for the end point. + */ + public String getEndPointEndingStyle() + { + String retval = PDAnnotationLine.LE_NONE; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.LE); + if (array != null) + { + retval = array.getName(1); + } + + return retval; + } + + /** + * This will set interior color of the line endings defined in the LE entry. + * + * @param color The interior color of the line endings. + */ + public void setInteriorColor(Color color) + { + COSArray array = null; + if (color != null) + { + float[] colors = color.getRGBColorComponents(null); + array = new COSArray(); + array.setFloatArray(colors); + } + annot.setItem(COSName.IC, array); + } + + /** + * This will retrieve the interior color of the line endings defined in the LE entry. + * + * @return object representing the color. + */ + public Color getInteriorColor() + { + Color retval = null; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.IC); + if (array != null) + { + float[] rgb = array.toFloatArray(); + if (rgb.length >= 3) + { + retval = new Color(rgb[0], rgb[1], rgb[2]); + } + } + return retval; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSound.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSound.java new file mode 100644 index 00000000000..6948c59f79f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSound.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a Sound FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationSound extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Sound"; + + /** + * Default constructor. + */ + public FDFAnnotationSound() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationSound(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationSound(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSquare.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSquare.java new file mode 100644 index 00000000000..e8678b32303 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSquare.java @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.awt.Color; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.w3c.dom.Element; + +/** + * This represents a Square FDF annotation. + * + * @author Ben Litchfield + * @author Johanneke Lamberink + */ +public class FDFAnnotationSquare extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Square"; + + /** + * Default constructor. + */ + public FDFAnnotationSquare() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationSquare(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationSquare(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + String color = element.getAttribute("interior-color"); + if (color != null && color.length() == 7 && color.charAt(0) == '#') + { + int colorValue = Integer.parseInt(color.substring(1, 7), 16); + setInteriorColor(new Color(colorValue)); + } + + initFringe(element); + } + + private void initFringe(Element element) throws IOException + { + String fringe = element.getAttribute("fringe"); + if (fringe != null && !fringe.isEmpty()) + { + String[] fringeValues = fringe.split(","); + if (fringeValues.length != 4) + { + throw new IOException("Error: wrong amount of numbers in attribute 'fringe'"); + } + PDRectangle rect = new PDRectangle(); + rect.setLowerLeftX(Float.parseFloat(fringeValues[0])); + rect.setLowerLeftY(Float.parseFloat(fringeValues[1])); + rect.setUpperRightX(Float.parseFloat(fringeValues[2])); + rect.setUpperRightY(Float.parseFloat(fringeValues[3])); + setFringe(rect); + } + } + + /** + * This will set interior color of the drawn area. + * + * @param color The interior color of the circle. + */ + public final void setInteriorColor(Color color) + { + COSArray array = null; + if (color != null) + { + float[] colors = color.getRGBColorComponents(null); + array = new COSArray(); + array.setFloatArray(colors); + } + annot.setItem(COSName.IC, array); + } + + /** + * This will retrieve the interior color of the drawn area. + * + * @return object representing the color. + */ + public Color getInteriorColor() + { + Color retval = null; + COSArray array = (COSArray) annot.getDictionaryObject(COSName.IC); + if (array != null) + { + float[] rgb = array.toFloatArray(); + if (rgb.length >= 3) + { + retval = new Color(rgb[0], rgb[1], rgb[2]); + } + } + return retval; + } + + /** + * This will set the fringe rectangle. Giving the difference between the annotations rectangle and where the drawing + * occurs. (To take account of any effects applied through the BE entry for example) + * + * @param fringe the fringe + */ + public final void setFringe(PDRectangle fringe) + { + annot.setItem(COSName.RD, fringe); + } + + /** + * This will get the fringe. Giving the difference between the annotations rectangle and where the drawing occurs. + * (To take account of any effects applied through the BE entry for example) + * + * @return the rectangle difference + */ + public PDRectangle getFringe() + { + COSArray rd = (COSArray) annot.getDictionaryObject(COSName.RD); + if (rd != null) + { + return new PDRectangle(rd); + } + else + { + return null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSquiggly.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSquiggly.java new file mode 100644 index 00000000000..b517dd9d77e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationSquiggly.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a Squiggly FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationSquiggly extends FDFAnnotationTextMarkup +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Squiggly"; + + /** + * Default constructor. + */ + public FDFAnnotationSquiggly() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationSquiggly(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationSquiggly(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationStamp.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationStamp.java new file mode 100644 index 00000000000..1ab2a1fc00d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationStamp.java @@ -0,0 +1,422 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.OutputStream; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBoolean; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.util.Hex; +import org.apache.pdfbox.util.XMLUtil; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * This represents a Stamp FDF annotation. + * + * @author Ben Litchfield + * @author Andrew Hung + */ +public class FDFAnnotationStamp extends FDFAnnotation +{ + private static final Log LOG = LogFactory.getLog(FDFAnnotationStamp.class); + + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Stamp"; + + /** + * Default constructor. + */ + public FDFAnnotationStamp() + { + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationStamp(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationStamp(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + + // PDFBOX-4437: Initialize the Stamp appearance from the XFDF + // https://www.immagic.com/eLibrary/ARCHIVES/TECH/ADOBE/A070914X.pdf + // appearance is only defined for stamps + XPath xpath = XPathFactory.newInstance().newXPath(); + + // Set the Appearance to the annotation + LOG.debug("Get the DOM Document for the stamp appearance"); + String base64EncodedAppearance; + try + { + base64EncodedAppearance = xpath.evaluate("appearance", element); + } + catch (XPathExpressionException e) + { + // should not happen + LOG.error("Error while evaluating XPath expression for appearance: " + e); + return; + } + byte[] decodedAppearanceXML; + try + { + decodedAppearanceXML = Hex.decodeBase64(base64EncodedAppearance); + } + catch (IllegalArgumentException ex) + { + LOG.error("Bad base64 encoded appearance ignored", ex); + return; + } + if (base64EncodedAppearance != null && !base64EncodedAppearance.isEmpty()) + { + LOG.debug("Decoded XML: " + new String(decodedAppearanceXML)); + + Document stampAppearance = XMLUtil + .parse(new ByteArrayInputStream(decodedAppearanceXML)); + + Element appearanceEl = stampAppearance.getDocumentElement(); + + // Is the root node have tag as DICT, error otherwise + if (!"dict".equalsIgnoreCase(appearanceEl.getNodeName())) + { + throw new IOException("Error while reading stamp document, " + + "root should be 'dict' and not '" + appearanceEl.getNodeName() + "'"); + } + LOG.debug("Generate and set the appearance dictionary to the stamp annotation"); + annot.setItem(COSName.AP, parseStampAnnotationAppearanceXML(appearanceEl)); + } + } + + /** + * This will create an Appearance dictionary from an appearance XML document. + * + * @param fdfXML The XML document that contains the appearance data. + */ + private COSDictionary parseStampAnnotationAppearanceXML(Element appearanceXML) throws IOException + { + COSDictionary dictionary = new COSDictionary(); + // the N entry is required. + dictionary.setItem(COSName.N, new COSStream()); + LOG.debug("Build dictionary for Appearance based on the appearanceXML"); + + NodeList nodeList = appearanceXML.getChildNodes(); + String parentAttrKey = appearanceXML.getAttribute("KEY"); + LOG.debug("Appearance Root - tag: " + appearanceXML.getTagName() + ", name: " + + appearanceXML.getNodeName() + ", key: " + parentAttrKey + ", children: " + + nodeList.getLength()); + + // Currently only handles Appearance dictionary (AP key on the root) + if (!"AP".equals(appearanceXML.getAttribute("KEY"))) + { + LOG.warn(parentAttrKey + " => Not handling element: " + appearanceXML.getTagName() + + " with key: " + appearanceXML.getAttribute("KEY")); + return dictionary; + } + for (int i = 0; i < nodeList.getLength(); i++) + { + Node node = nodeList.item(i); + if (node instanceof Element) + { + Element child = (Element) node; + if ("STREAM".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + + " => Process " + child.getAttribute("KEY") + + " item in the dictionary after processing the " + + child.getTagName()); + dictionary.setItem(child.getAttribute("KEY"), parseStreamElement(child)); + LOG.debug(parentAttrKey + " => Set " + child.getAttribute("KEY")); + } + else + { + LOG.warn(parentAttrKey + " => Not handling element: " + child.getTagName()); + } + } + } + return dictionary; + } + + private COSStream parseStreamElement(Element streamEl) throws IOException + { + LOG.debug("Parse " + streamEl.getAttribute("KEY") + " Stream"); + COSStream stream = new COSStream(); + + NodeList nodeList = streamEl.getChildNodes(); + String parentAttrKey = streamEl.getAttribute("KEY"); + + for (int i = 0; i < nodeList.getLength(); i++) + { + Node node = nodeList.item(i); + if (node instanceof Element) + { + Element child = (Element) node; + String childAttrKey = child.getAttribute("KEY"); + String childAttrVal = child.getAttribute("VAL"); + LOG.debug(parentAttrKey + " => reading child: " + child.getTagName() + + " with key: " + childAttrKey); + if ("INT".equalsIgnoreCase(child.getTagName())) + { + if (!"Length".equals(childAttrKey)) + { + stream.setInt(COSName.getPDFName(childAttrKey), Integer.parseInt(childAttrVal)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey + ": " + childAttrVal); + } + } + else if ("FIXED".equalsIgnoreCase(child.getTagName())) + { + stream.setFloat(COSName.getPDFName(childAttrKey), Float.parseFloat(childAttrVal)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey + ": " + childAttrVal); + } + else if ("NAME".equalsIgnoreCase(child.getTagName())) + { + stream.setName(COSName.getPDFName(childAttrKey), childAttrVal); + LOG.debug(parentAttrKey + " => Set " + childAttrKey + ": " + childAttrVal); + } + else if ("BOOL".equalsIgnoreCase(child.getTagName())) + { + stream.setBoolean(COSName.getPDFName(childAttrKey), Boolean.parseBoolean(childAttrVal)); + LOG.debug(parentAttrKey + " => Set " + childAttrVal); + } + else if ("ARRAY".equalsIgnoreCase(child.getTagName())) + { + stream.setItem(COSName.getPDFName(childAttrKey), parseArrayElement(child)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey); + } + else if ("DICT".equalsIgnoreCase(child.getTagName())) + { + stream.setItem(COSName.getPDFName(childAttrKey), parseDictElement(child)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey); + } + else if ("STREAM".equalsIgnoreCase(child.getTagName())) + { + stream.setItem(COSName.getPDFName(childAttrKey), parseStreamElement(child)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey); + } + else if ("DATA".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " => Handling DATA with encoding: " + + child.getAttribute("ENCODING")); + if ("HEX".equals(child.getAttribute("ENCODING"))) + { + try (OutputStream os = stream.createRawOutputStream()) + { + os.write(Hex.decodeHex(child.getTextContent())); + LOG.debug(parentAttrKey + " => Data was streamed"); + } + } + else if ("ASCII".equals(child.getAttribute("ENCODING"))) + { + try (OutputStream os = stream.createOutputStream()) + { + // not sure about charset + os.write(child.getTextContent().getBytes()); + LOG.debug(parentAttrKey + " => Data was streamed"); + } + } + else + { + LOG.warn(parentAttrKey + " => Not handling element DATA encoding: " + + child.getAttribute("ENCODING")); + } + } + else + { + LOG.warn(parentAttrKey + " => Not handling child element: " + child.getTagName()); + } + } + } + + return stream; + } + + private COSArray parseArrayElement(Element arrayEl) throws IOException + { + LOG.debug("Parse " + arrayEl.getAttribute("KEY") + " Array"); + COSArray array = new COSArray(); + + NodeList nodeList = arrayEl.getChildNodes(); + String parentAttrKey = arrayEl.getAttribute("KEY"); + + if ("BBox".equals(parentAttrKey)) + { + if (nodeList.getLength() < 4) + { + throw new IOException("BBox does not have enough coordinates, only has: " + + nodeList.getLength()); + } + } + else if ("Matrix".equals(parentAttrKey)) + { + if (nodeList.getLength() < 6) + { + throw new IOException("Matrix does not have enough coordinates, only has: " + + nodeList.getLength()); + } + } + + for (int i = 0; i < nodeList.getLength(); i++) + { + Node node = nodeList.item(i); + if (node instanceof Element) + { + Element child = (Element) node; + String childAttrKey = child.getAttribute("KEY"); + String childAttrVal = child.getAttribute("VAL"); + LOG.debug(parentAttrKey + " => reading child: " + child.getTagName() + + " with key: " + childAttrKey); + if ("INT".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(COSFloat.get(childAttrVal)); + } + else if ("FIXED".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(COSInteger.get(childAttrVal)); + } + else if ("NAME".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(COSName.getPDFName(childAttrVal)); + } + else if ("BOOL".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(COSBoolean.getBoolean(Boolean.parseBoolean(childAttrVal))); + } + else if ("DICT".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(parseDictElement(child)); + } + else if ("STREAM".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(parseStreamElement(child)); + } + else if ("ARRAY".equalsIgnoreCase(child.getTagName())) + { + LOG.debug(parentAttrKey + " value(" + i + "): " + child.getAttribute("VAL")); + array.add(parseArrayElement(child)); + } + else + { + LOG.warn(parentAttrKey + " => Not handling child element: " + child.getTagName()); + } + } + } + + return array; + } + + private COSDictionary parseDictElement(Element dictEl) throws IOException + { + LOG.debug("Parse " + dictEl.getAttribute("KEY") + " Dictionary"); + COSDictionary dict = new COSDictionary(); + + NodeList nodeList = dictEl.getChildNodes(); + String parentAttrKey = dictEl.getAttribute("KEY"); + + for (int i = 0; i < nodeList.getLength(); i++) + { + Node node = nodeList.item(i); + if (node instanceof Element) + { + Element child = (Element) node; + String childAttrKey = child.getAttribute("KEY"); + String childAttrVal = child.getAttribute("VAL"); + + if ("DICT".equals(child.getTagName())) + { + LOG.debug(parentAttrKey + " => Handling DICT element with key: " + childAttrKey); + dict.setItem(COSName.getPDFName(childAttrKey), parseDictElement(child)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey); + } + else if ("STREAM".equals(child.getTagName())) + { + LOG.debug(parentAttrKey + " => Handling STREAM element with key: " + childAttrKey); + dict.setItem(COSName.getPDFName(childAttrKey), parseStreamElement(child)); + } + else if ("NAME".equals(child.getTagName())) + { + LOG.debug(parentAttrKey + " => Handling NAME element with key: " + childAttrKey); + dict.setName(COSName.getPDFName(childAttrKey), childAttrVal); + LOG.debug(parentAttrKey + " => Set " + childAttrKey + ": " + childAttrVal); + } + else if ("INT".equalsIgnoreCase(child.getTagName())) + { + dict.setInt(COSName.getPDFName(childAttrKey), Integer.parseInt(childAttrVal)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey + ": " + childAttrVal); + } + else if ("FIXED".equalsIgnoreCase(child.getTagName())) + { + dict.setFloat(COSName.getPDFName(childAttrKey), Float.parseFloat(childAttrVal)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey + ": " + childAttrVal); + } + else if ("BOOL".equalsIgnoreCase(child.getTagName())) + { + dict.setBoolean(COSName.getPDFName(childAttrKey), Boolean.parseBoolean(childAttrVal)); + LOG.debug(parentAttrKey + " => Set " + childAttrVal); + } + else if ("ARRAY".equalsIgnoreCase(child.getTagName())) + { + dict.setItem(COSName.getPDFName(childAttrKey), parseArrayElement(child)); + LOG.debug(parentAttrKey + " => Set " + childAttrKey); + } + else + { + LOG.warn(parentAttrKey + " => NOT handling child element: " + child.getTagName()); + } + } + } + + return dict; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationStrikeOut.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationStrikeOut.java new file mode 100644 index 00000000000..a882d30ee34 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationStrikeOut.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a StrikeOut FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationStrikeOut extends FDFAnnotationTextMarkup +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "StrikeOut"; + + /** + * Default constructor. + */ + public FDFAnnotationStrikeOut() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationStrikeOut(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationStrikeOut(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationText.java new file mode 100644 index 00000000000..700efbbd975 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationText.java @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationText; +import org.w3c.dom.Element; + +/** + * This represents a Text FDF annotation. + * + * @author Ben Litchfield + * @author Johanneke Lamberink + */ +public class FDFAnnotationText extends FDFAnnotation +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Text"; + + /** + * Default constructor. + */ + public FDFAnnotationText() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationText(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationText(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + String icon = element.getAttribute("icon"); + if (icon != null && !icon.isEmpty()) + { + setIcon(element.getAttribute("icon")); + } + String state = element.getAttribute("state"); + if (state != null && !state.isEmpty()) + { + String statemodel = element.getAttribute("statemodel"); + if (statemodel != null && !statemodel.isEmpty()) + { + setState(element.getAttribute("state")); + setStateModel(element.getAttribute("statemodel")); + } + } + } + + /** + * This will set the icon (and hence appearance, AP taking precedence) For this annotation. See the + * PDAnnotationText.NAME_XXX constants for valid values. + * + * @param icon The name of the annotation + */ + public final void setIcon(String icon) + { + annot.setName(COSName.NAME, icon); + } + + /** + * This will retrieve the icon (and hence appearance, AP taking precedence) For this annotation. The default is + * NOTE. + * + * @return The name of this annotation, see the PDAnnotationText.NAME_XXX constants. + */ + public String getIcon() + { + return annot.getNameAsString(COSName.NAME, PDAnnotationText.NAME_NOTE); + } + + /** + * This will retrieve the annotation state. + * + * @return the annotation state + */ + public String getState() + { + return annot.getString(COSName.STATE); + } + + /** + * This will set the annotation state. + * + * @param state the annotation state + */ + public final void setState(String state) + { + annot.setString(COSName.STATE, state); + } + + /** + * This will retrieve the annotation state model. + * + * @return the annotation state model + */ + public String getStateModel() + { + return annot.getString(COSName.STATE_MODEL); + } + + /** + * This will set the annotation state model. Allowed values are "Marked" and "Review" + * + * @param stateModel the annotation state model + */ + public final void setStateModel(String stateModel) + { + annot.setString(COSName.STATE_MODEL, stateModel); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationTextMarkup.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationTextMarkup.java new file mode 100644 index 00000000000..bfc190efe30 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationTextMarkup.java @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This abstract class is used as a superclass for the different FDF annotations with text markup attributes. + * + * @author Johanneke Lamberink + */ +public abstract class FDFAnnotationTextMarkup extends FDFAnnotation +{ + /** + * Default constructor. + */ + public FDFAnnotationTextMarkup() + { + super(); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationTextMarkup(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationTextMarkup(Element element) throws IOException + { + super(element); + + String coords = element.getAttribute("coords"); + if (coords == null || coords.isEmpty()) + { + throw new IOException("Error: missing attribute 'coords'"); + } + String[] coordsValues = coords.split(","); + if (coordsValues.length < 8) + { + throw new IOException("Error: too little numbers in attribute 'coords'"); + } + float[] values = new float[coordsValues.length]; + for (int i = 0; i < coordsValues.length; i++) + { + values[i] = Float.parseFloat(coordsValues[i]); + } + setCoords(values); + } + + /** + * Set the coordinates of individual words or group of words. + * + * The quadliterals shall encompasses a word or group of contiguous words in the text underlying the annotation. The + * coordinates for each quadrilateral shall be given in the order x1 y1 x2 y2 x3 y3 x4 y4. + * + * @param coords an array of 8 􏰍 n numbers specifying the coordinates of n quadrilaterals. + */ + public void setCoords(float[] coords) + { + COSArray newQuadPoints = new COSArray(); + newQuadPoints.setFloatArray(coords); + annot.setItem(COSName.QUADPOINTS, newQuadPoints); + } + + /** + * Get the coordinates of individual words or group of words. + * + * @see #setCoords(float[]) + * @return the array of 8 􏰍 n numbers specifying the coordinates of n quadrilaterals. + */ + public float[] getCoords() + { + COSArray quadPoints = (COSArray) annot.getItem(COSName.QUADPOINTS); + if (quadPoints != null) + { + return quadPoints.toFloatArray(); + } + else + { + return null; // Should never happen as this is a required item + } + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationUnderline.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationUnderline.java new file mode 100644 index 00000000000..90fbc89fc50 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationUnderline.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.w3c.dom.Element; + +/** + * This represents a Underline FDF annotation. + * + * @author Ben Litchfield + */ +public class FDFAnnotationUnderline extends FDFAnnotationTextMarkup +{ + /** + * COS Model value for SubType entry. + */ + public static final String SUBTYPE = "Underline"; + + /** + * Default constructor. + */ + public FDFAnnotationUnderline() + { + super(); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } + + /** + * Constructor. + * + * @param a An existing FDF Annotation. + */ + public FDFAnnotationUnderline(COSDictionary a) + { + super(a); + } + + /** + * Constructor. + * + * @param element An XFDF element. + * + * @throws IOException If there is an error extracting information from the element. + */ + public FDFAnnotationUnderline(Element element) throws IOException + { + super(element); + annot.setName(COSName.SUBTYPE, SUBTYPE); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFCatalog.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFCatalog.java new file mode 100644 index 00000000000..9aa21ea84ce --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFCatalog.java @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; +import java.io.Writer; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.w3c.dom.Element; + +/** + * This represents an FDF catalog that is part of the FDF document. + * + * @author Ben Litchfield + */ +public class FDFCatalog implements COSObjectable +{ + private COSDictionary catalog; + + /** + * Default constructor. + */ + public FDFCatalog() + { + catalog = new COSDictionary(); + } + + /** + * Constructor. + * + * @param cat The FDF documents catalog. + */ + public FDFCatalog(COSDictionary cat) + { + catalog = cat; + } + + /** + * This will create an FDF catalog from an XFDF XML document. + * + * @param element The XML document that contains the XFDF data. + */ + public FDFCatalog(Element element) + { + this(); + FDFDictionary fdfDict = new FDFDictionary(element); + setFDF(fdfDict); + } + + /** + * This will write this element as an XML document. + * + * @param output The stream to write the xml to. + * + * @throws IOException If there is an error writing the XML. + */ + public void writeXML(Writer output) throws IOException + { + FDFDictionary fdf = getFDF(); + fdf.writeXML(output); + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return catalog; + } + + /** + * This will get the version that was specified in the catalog dictionary. + * + * @return The FDF version. + */ + public String getVersion() + { + return catalog.getNameAsString(COSName.VERSION); + } + + /** + * This will set the version of the FDF document. + * + * @param version The new version for the FDF document. + */ + public void setVersion(String version) + { + catalog.setName(COSName.VERSION, version); + } + + /** + * This will get the FDF dictionary. + * + * @return The FDF dictionary. + */ + public FDFDictionary getFDF() + { + COSDictionary fdf = (COSDictionary) catalog.getDictionaryObject(COSName.FDF); + FDFDictionary retval; + if (fdf != null) + { + retval = new FDFDictionary(fdf); + } + else + { + retval = new FDFDictionary(); + setFDF(retval); + } + return retval; + } + + /** + * This will set the FDF document. + * + * @param fdf The new FDF dictionary. + */ + public final void setFDF(FDFDictionary fdf) + { + catalog.setItem(COSName.FDF, fdf); + } + + /** + * This will get the signature or null if there is none. + * + * @return The signature. + */ + public PDSignature getSignature() + { + PDSignature signature = null; + COSDictionary sig = (COSDictionary) catalog.getDictionaryObject(COSName.SIG); + if (sig != null) + { + signature = new PDSignature(sig); + } + return signature; + } + + /** + * This will set the signature that is associated with this catalog. + * + * @param sig The new signature. + */ + public void setSignature(PDSignature sig) + { + catalog.setItem(COSName.SIG, sig); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDictionary.java new file mode 100644 index 00000000000..880d693670b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDictionary.java @@ -0,0 +1,558 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; +import org.apache.pdfbox.pdmodel.common.filespecification.PDSimpleFileSpecification; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * This represents an FDF dictionary that is part of the FDF document. + * + * @author Ben Litchfield + */ +public class FDFDictionary implements COSObjectable +{ + + private static final Log LOG = LogFactory.getLog(FDFDictionary.class); + + private COSDictionary fdf; + + /** + * Default constructor. + */ + public FDFDictionary() + { + fdf = new COSDictionary(); + } + + /** + * Constructor. + * + * @param fdfDictionary The FDF documents catalog. + */ + public FDFDictionary(COSDictionary fdfDictionary) + { + fdf = fdfDictionary; + } + + /** + * This will create an FDF dictionary from an XFDF XML document. + * + * @param fdfXML The XML document that contains the XFDF data. + */ + public FDFDictionary(Element fdfXML) + { + this(); + NodeList nodeList = fdfXML.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) + { + Node node = nodeList.item(i); + if (node instanceof Element) + { + Element child = (Element) node; + switch (child.getTagName()) + { + case "f": + PDSimpleFileSpecification fs = new PDSimpleFileSpecification(); + fs.setFile(child.getAttribute("href")); + setFile(fs); + break; + case "ids": + COSArray ids = new COSArray(); + String original = child.getAttribute("original"); + String modified = child.getAttribute("modified"); + try + { + ids.add(COSString.parseHex(original)); + } + catch (IOException e) + { + LOG.warn("Error parsing ID entry for attribute 'original' [" + original + + "]. ID entry ignored.", e); + } + try + { + ids.add(COSString.parseHex(modified)); + } + catch (IOException e) + { + LOG.warn("Error parsing ID entry for attribute 'modified' [" + modified + + "]. ID entry ignored.", e); + } + setID(ids); + break; + case "fields": + NodeList fields = child.getChildNodes(); + List fieldList = new ArrayList<>(); + for (int f = 0; f < fields.getLength(); f++) + { + Node currentNode = fields.item(f); + if (currentNode instanceof Element + && ((Element) currentNode).getTagName().equals("field")) + { + try + { + fieldList.add(new FDFField((Element) fields.item(f))); + } + catch (IOException e) + { + LOG.warn("Error parsing field entry [" + currentNode.getNodeValue() + + "]. Field ignored.", e); + } + } + } + setFields(fieldList); + break; + case "annots": + NodeList annots = child.getChildNodes(); + List annotList = new ArrayList<>(); + for (int j = 0; j < annots.getLength(); j++) + { + Node annotNode = annots.item(j); + if (annotNode instanceof Element) + { + // the node name defines the annotation type + Element annot = (Element) annotNode; + String annotationName = annot.getNodeName(); + try + { + switch (annotationName) + { + case "text": + annotList.add(new FDFAnnotationText(annot)); + break; + case "caret": + annotList.add(new FDFAnnotationCaret(annot)); + break; + case "freetext": + annotList.add(new FDFAnnotationFreeText(annot)); + break; + case "fileattachment": + annotList.add(new FDFAnnotationFileAttachment(annot)); + break; + case "highlight": + annotList.add(new FDFAnnotationHighlight(annot)); + break; + case "ink": + annotList.add(new FDFAnnotationInk(annot)); + break; + case "line": + annotList.add(new FDFAnnotationLine(annot)); + break; + case "link": + annotList.add(new FDFAnnotationLink(annot)); + break; + case "circle": + annotList.add(new FDFAnnotationCircle(annot)); + break; + case "square": + annotList.add(new FDFAnnotationSquare(annot)); + break; + case "polygon": + annotList.add(new FDFAnnotationPolygon(annot)); + break; + case "polyline": + annotList.add(new FDFAnnotationPolyline(annot)); + break; + case "sound": + annotList.add(new FDFAnnotationSound(annot)); + break; + case "squiggly": + annotList.add(new FDFAnnotationSquiggly(annot)); + break; + case "stamp": + annotList.add(new FDFAnnotationStamp(annot)); + break; + case "strikeout": + annotList.add(new FDFAnnotationStrikeOut(annot)); + break; + case "underline": + annotList.add(new FDFAnnotationUnderline(annot)); + break; + default: + LOG.warn("Unknown or unsupported annotation type '" + + annotationName + "'"); + break; + } + } + catch (IOException e) + { + LOG.warn("Error parsing annotation information [" + + annot.getNodeValue() + "]. Annotation ignored", e); + } + } + } + setAnnotations(annotList); + break; + default: + break; + } + } + } + } + + /** + * This will write this element as an XML document. + * + * @param output The stream to write the xml to. + * + * @throws IOException If there is an error writing the XML. + */ + public void writeXML(Writer output) throws IOException + { + PDFileSpecification fs = this.getFile(); + if (fs != null) + { + output.write("\n"); + } + COSArray ids = this.getID(); + if (ids != null) + { + COSString original = (COSString) ids.getObject(0); + COSString modified = (COSString) ids.getObject(1); + output.write("\n"); + } + List fields = getFields(); + if (fields != null && fields.size() > 0) + { + output.write("\n"); + for (FDFField field : fields) + { + field.writeXML(output); + } + output.write("\n"); + } + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return fdf; + } + + /** + * The source file or target file: the PDF document file that this FDF file was exported from or is intended to be + * imported into. + * + * @return The F entry of the FDF dictionary. + * + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(fdf.getDictionaryObject(COSName.F)); + } + + /** + * This will set the file specification. + * + * @param fs The file specification. + */ + public final void setFile(PDFileSpecification fs) + { + fdf.setItem(COSName.F, fs); + } + + /** + * This is the FDF id. + * + * @return The FDF ID. + */ + public COSArray getID() + { + return (COSArray) fdf.getDictionaryObject(COSName.ID); + } + + /** + * This will set the FDF id. + * + * @param id The new id for the FDF. + */ + public final void setID(COSArray id) + { + fdf.setItem(COSName.ID, id); + } + + /** + * This will get the list of FDF Fields. This will return a list of FDFField objects. + * + * @return A list of FDF fields. + */ + public List getFields() + { + List retval = null; + COSArray fieldArray = (COSArray) fdf.getDictionaryObject(COSName.FIELDS); + if (fieldArray != null) + { + List fields = new ArrayList<>(); + for (int i = 0; i < fieldArray.size(); i++) + { + fields.add(new FDFField((COSDictionary) fieldArray.getObject(i))); + } + retval = new COSArrayList<>(fields, fieldArray); + } + return retval; + } + + /** + * This will set the list of fields. This should be a list of FDFField objects. + * + * @param fields The list of fields. + */ + public final void setFields(List fields) + { + fdf.setItem(COSName.FIELDS, COSArrayList.converterToCOSArray(fields)); + } + + /** + * This will get the status string to be displayed as the result of an action. + * + * @return The status. + */ + public String getStatus() + { + return fdf.getString(COSName.STATUS); + } + + /** + * This will set the status string. + * + * @param status The new status string. + */ + public void setStatus(String status) + { + fdf.setString(COSName.STATUS, status); + } + + /** + * This will get the list of FDF Pages. This will return a list of FDFPage objects. + * + * @return A list of FDF pages. + */ + public List getPages() + { + List retval = null; + COSArray pageArray = (COSArray) fdf.getDictionaryObject(COSName.PAGES); + if (pageArray != null) + { + List pages = new ArrayList<>(); + for (int i = 0; i < pageArray.size(); i++) + { + pages.add(new FDFPage((COSDictionary) pageArray.get(i))); + } + retval = new COSArrayList<>(pages, pageArray); + } + return retval; + } + + /** + * This will set the list of pages. This should be a list of FDFPage objects. + * + * + * @param pages The list of pages. + */ + public void setPages(List pages) + { + fdf.setItem(COSName.PAGES, COSArrayList.converterToCOSArray(pages)); + } + + /** + * The encoding to be used for a FDF field. The default is PDFDocEncoding and this method will never return null. + * + * @return The encoding value. + */ + public String getEncoding() + { + String encoding = fdf.getNameAsString(COSName.ENCODING); + if (encoding == null) + { + encoding = "PDFDocEncoding"; + } + return encoding; + + } + + /** + * This will set the encoding. + * + * @param encoding The new encoding. + */ + public void setEncoding(String encoding) + { + fdf.setName(COSName.ENCODING, encoding); + } + + /** + * This will get the list of FDF Annotations. This will return a list of FDFAnnotation objects or null if the entry + * is not set. + * + * @return A list of FDF annotations. + * + * @throws IOException If there is an error creating the annotation list. + */ + public List getAnnotations() throws IOException + { + List retval = null; + COSArray annotArray = (COSArray) fdf.getDictionaryObject(COSName.ANNOTS); + if (annotArray != null) + { + List annots = new ArrayList<>(); + for (int i = 0; i < annotArray.size(); i++) + { + annots.add(FDFAnnotation.create((COSDictionary) annotArray.getObject(i))); + } + retval = new COSArrayList<>(annots, annotArray); + } + return retval; + } + + /** + * This will set the list of annotations. This should be a list of FDFAnnotation objects. + * + * + * @param annots The list of annotations. + */ + public final void setAnnotations(List annots) + { + fdf.setItem(COSName.ANNOTS, COSArrayList.converterToCOSArray(annots)); + } + + /** + * This will get the incremental updates since the PDF was last opened. + * + * @return The differences entry of the FDF dictionary. + */ + public COSStream getDifferences() + { + return (COSStream) fdf.getDictionaryObject(COSName.DIFFERENCES); + } + + /** + * This will set the differences stream. + * + * @param diff The new differences stream. + */ + public void setDifferences(COSStream diff) + { + fdf.setItem(COSName.DIFFERENCES, diff); + } + + /** + * This will get the target frame in the browser to open this document. + * + * @return The target frame. + */ + public String getTarget() + { + return fdf.getString(COSName.TARGET); + } + + /** + * This will set the target frame in the browser to open this document. + * + * @param target The new target frame. + */ + public void setTarget(String target) + { + fdf.setString(COSName.TARGET, target); + } + + /** + * This will get the list of embedded FDF entries, or null if the entry is null. This will return a list of + * PDFileSpecification objects. + * + * @return A list of embedded FDF files. + * + * @throws IOException If there is an error creating the file spec. + */ + public List getEmbeddedFDFs() throws IOException + { + List retval = null; + COSArray embeddedArray = (COSArray) fdf.getDictionaryObject(COSName.EMBEDDED_FDFS); + if (embeddedArray != null) + { + List embedded = new ArrayList<>(); + for (int i = 0; i < embeddedArray.size(); i++) + { + embedded.add(PDFileSpecification.createFS(embeddedArray.get(i))); + } + retval = new COSArrayList<>(embedded, embeddedArray); + } + return retval; + } + + /** + * This will set the list of embedded FDFs. This should be a list of PDFileSpecification objects. + * + * + * @param embedded The list of embedded FDFs. + */ + public void setEmbeddedFDFs(List embedded) + { + fdf.setItem(COSName.EMBEDDED_FDFS, COSArrayList.converterToCOSArray(embedded)); + } + + /** + * This will get the java script entry. + * + * @return The java script entry describing javascript commands. + */ + public FDFJavaScript getJavaScript() + { + FDFJavaScript fs = null; + COSDictionary dic = (COSDictionary) fdf.getDictionaryObject(COSName.JAVA_SCRIPT); + if (dic != null) + { + fs = new FDFJavaScript(dic); + } + return fs; + } + + /** + * This will set the JavaScript entry. + * + * @param js The javascript entries. + */ + public void setJavaScript(FDFJavaScript js) + { + fdf.setItem(COSName.JAVA_SCRIPT, js); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDocument.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDocument.java new file mode 100644 index 00000000000..6817dfee3dd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFDocument.java @@ -0,0 +1,343 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.BufferedInputStream; +import java.io.BufferedWriter; +import java.io.Closeable; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdfparser.FDFParser; +import org.apache.pdfbox.pdfwriter.COSWriter; +import org.apache.pdfbox.util.XMLUtil; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * This is the in-memory representation of the FDF document. You need to call close() on this object when you are done + * using it!! + * + * @author Ben Litchfield + */ +public class FDFDocument implements Closeable +{ + private COSDocument document; + + /** + * Constructor, creates a new FDF document. + * + */ + public FDFDocument() + { + document = new COSDocument(); + document.setVersion(1.2f); + + // First we need a trailer + document.setTrailer(new COSDictionary()); + + // Next we need the root dictionary. + FDFCatalog catalog = new FDFCatalog(); + setCatalog(catalog); + } + + /** + * Constructor that uses an existing document. The COSDocument that is passed in must be valid. + * + * @param doc The COSDocument that this document wraps. + */ + public FDFDocument(COSDocument doc) + { + document = doc; + } + + /** + * This will create an FDF document from an XFDF XML document. + * + * @param doc The XML document that contains the XFDF data. + * @throws IOException If there is an error reading from the dom. + */ + public FDFDocument(Document doc) throws IOException + { + this(); + Element xfdf = doc.getDocumentElement(); + if (!xfdf.getNodeName().equals("xfdf")) + { + throw new IOException("Error while importing xfdf document, " + + "root should be 'xfdf' and not '" + xfdf.getNodeName() + "'"); + } + FDFCatalog cat = new FDFCatalog(xfdf); + setCatalog(cat); + } + + /** + * This will write this element as an XML document. + * + * @param output The stream to write the xml to. + * + * @throws IOException If there is an error writing the XML. + */ + public void writeXML(Writer output) throws IOException + { + output.write("\n"); + output.write("\n"); + + getCatalog().writeXML(output); + + output.write("\n"); + } + + /** + * This will get the low level document. + * + * @return The document that this layer sits on top of. + */ + public COSDocument getDocument() + { + return document; + } + + /** + * This will get the FDF Catalog. This is guaranteed to not return null. + * + * @return The documents /Root dictionary + */ + public FDFCatalog getCatalog() + { + FDFCatalog retval = null; + COSDictionary trailer = document.getTrailer(); + COSDictionary root = trailer.getCOSDictionary(COSName.ROOT); + if (root == null) + { + retval = new FDFCatalog(); + setCatalog(retval); + } + else + { + retval = new FDFCatalog(root); + } + return retval; + } + + /** + * This will set the FDF catalog for this FDF document. + * + * @param cat The FDF catalog. + */ + public final void setCatalog(FDFCatalog cat) + { + COSDictionary trailer = document.getTrailer(); + trailer.setItem(COSName.ROOT, cat); + } + + /** + * This will load a document from a file. + * + * @param filename The name of the file to load. + * + * @return The document that was loaded. + * + * @throws IOException If there is an error reading from the stream. + */ + public static FDFDocument load(String filename) throws IOException + { + FDFParser parser = new FDFParser(filename); + parser.parse(); + return new FDFDocument(parser.getDocument()); + } + + /** + * This will load a document from a file. + * + * @param file The name of the file to load. + * + * @return The document that was loaded. + * + * @throws IOException If there is an error reading from the stream. + */ + public static FDFDocument load(File file) throws IOException + { + FDFParser parser = new FDFParser(file); + parser.parse(); + return new FDFDocument(parser.getDocument()); + } + + /** + * This will load a document from an input stream. + * + * @param input The stream that contains the document. + * + * @return The document that was loaded. + * + * @throws IOException If there is an error reading from the stream. + */ + public static FDFDocument load(InputStream input) throws IOException + { + FDFParser parser = new FDFParser(input); + parser.parse(); + return new FDFDocument(parser.getDocument()); + } + + /** + * This will load a document from a file. + * + * @param filename The name of the file to load. + * + * @return The document that was loaded. + * + * @throws IOException If there is an error reading from the stream. + */ + public static FDFDocument loadXFDF(String filename) throws IOException + { + return loadXFDF(new BufferedInputStream(new FileInputStream(filename))); + } + + /** + * This will load a document from a file. + * + * @param file The name of the file to load. + * + * @return The document that was loaded. + * + * @throws IOException If there is an error reading from the stream. + */ + public static FDFDocument loadXFDF(File file) throws IOException + { + return loadXFDF(new BufferedInputStream(new FileInputStream(file))); + } + + /** + * This will load a document from an input stream. + * + * @param input The stream that contains the document. + * + * @return The document that was loaded. + * + * @throws IOException If there is an error reading from the stream. + */ + public static FDFDocument loadXFDF(InputStream input) throws IOException + { + return new FDFDocument(XMLUtil.parse(input)); + } + + /** + * This will save this document to the filesystem. + * + * @param fileName The file to save as. + * + * @throws IOException If there is an error saving the document. + */ + public void save(File fileName) throws IOException + { + save(new FileOutputStream(fileName)); + } + + /** + * This will save this document to the filesystem. + * + * @param fileName The file to save as. + * + * @throws IOException If there is an error saving the document. + */ + public void save(String fileName) throws IOException + { + save(new FileOutputStream(fileName)); + } + + /** + * This will save the document to an output stream. + * + * @param output The stream to write to. + * + * @throws IOException If there is an error writing the document. + */ + public void save(OutputStream output) throws IOException + { + try (COSWriter writer = new COSWriter(output)) + { + writer.write(this); + } + } + + /** + * This will save this document to the filesystem. + * + * @param fileName The file to save as. + * + * @throws IOException If there is an error saving the document. + */ + public void saveXFDF(File fileName) throws IOException + { + saveXFDF(new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8"))); + } + + /** + * This will save this document to the filesystem. + * + * @param fileName The file to save as. + * + * @throws IOException If there is an error saving the document. + */ + public void saveXFDF(String fileName) throws IOException + { + saveXFDF(new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8"))); + } + + /** + * This will save the document to an output stream and close the stream. + * + * @param output The stream to write to. + * + * @throws IOException If there is an error writing the document. + */ + public void saveXFDF(Writer output) throws IOException + { + try + { + writeXML(output); + } + finally + { + if (output != null) + { + output.close(); + } + } + } + + /** + * This will close the underlying COSDocument object. + * + * @throws IOException If there is an error releasing resources. + */ + @Override + public void close() throws IOException + { + document.close(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java new file mode 100644 index 00000000000..50714f18a4b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFField.java @@ -0,0 +1,827 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.util.XMLUtil; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * This represents an FDF field that is part of the FDF document. + * + * @author Ben Litchfield + */ +public class FDFField implements COSObjectable +{ + private COSDictionary field; + + /** + * Default constructor. + */ + public FDFField() + { + field = new COSDictionary(); + } + + /** + * Constructor. + * + * @param f The FDF field. + */ + public FDFField(COSDictionary f) + { + field = f; + } + + /** + * This will create an FDF field from an XFDF XML document. + * + * @param fieldXML The XML document that contains the XFDF data. + * @throws IOException If there is an error reading from the dom. + */ + public FDFField(Element fieldXML) throws IOException + { + this(); + this.setPartialFieldName(fieldXML.getAttribute("name")); + NodeList nodeList = fieldXML.getChildNodes(); + List kids = new ArrayList<>(); + for (int i = 0; i < nodeList.getLength(); i++) + { + Node node = nodeList.item(i); + if (node instanceof Element) + { + Element child = (Element) node; + switch (child.getTagName()) + { + case "value": + setValue(XMLUtil.getNodeValue(child)); + break; + case "value-richtext": + setRichText(new COSString(XMLUtil.getNodeValue(child))); + break; + case "field": + kids.add(new FDFField(child)); + break; + default: + break; + } + } + } + if (kids.size() > 0) + { + setKids(kids); + } + + } + + /** + * This will write this element as an XML document. + * + * @param output The stream to write the xml to. + * + * @throws IOException If there is an error writing the XML. + */ + public void writeXML(Writer output) throws IOException + { + output.write("\n"); + Object value = getValue(); + + if (value instanceof String) + { + output.write("" + escapeXML((String) value) + "\n"); + } + else if (value instanceof List) + { + List items = (List) value; + for (String item : items) + { + output.write("" + escapeXML((String) item) + "\n"); + } + } + + String rt = getRichText(); + if (rt != null) + { + output.write("" + escapeXML(rt) + "\n"); + } + List kids = getKids(); + if (kids != null) + { + for (FDFField kid : kids) + { + kid.writeXML(output); + } + } + output.write("\n"); + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return field; + } + + /** + * This will get the list of kids. This will return a list of FDFField objects. This will return null if the + * underlying list is null. + * + * @return The list of kids. + */ + public List getKids() + { + COSArray kids = (COSArray) field.getDictionaryObject(COSName.KIDS); + List retval = null; + if (kids != null) + { + List actuals = new ArrayList<>(); + for (int i = 0; i < kids.size(); i++) + { + actuals.add(new FDFField((COSDictionary) kids.getObject(i))); + } + retval = new COSArrayList<>(actuals, kids); + } + return retval; + } + + /** + * This will set the list of kids. + * + * @param kids A list of FDFField objects. + */ + public final void setKids(List kids) + { + field.setItem(COSName.KIDS, COSArrayList.converterToCOSArray(kids)); + } + + /** + * This will get the "T" entry in the field dictionary. A partial field name. Where the fully qualified field name + * is a concatenation of the parent's fully qualified field name and "." as a separator. For example
    + * Address.State
    + * Address.City
    + * + * @return The partial field name. + */ + public String getPartialFieldName() + { + return field.getString(COSName.T); + } + + /** + * This will set the partial field name. + * + * @param partial The partial field name. + */ + public void setPartialFieldName(String partial) + { + field.setString(COSName.T, partial); + } + + /** + * This will get the value for the field. This will return type will either be
    + * String : Checkboxes, Radio Button, Textfields
    + * java.util.List of strings: Choice Field + * + * @return The value of the field. + * @throws IOException If there is an error getting the value. + */ + public Object getValue() throws IOException + { + COSBase value = field.getDictionaryObject(COSName.V); + if (value instanceof COSName) + { + return ((COSName) value).getName(); + } + else if (value instanceof COSArray) + { + return COSArrayList.convertCOSStringCOSArrayToList((COSArray) value); + } + else if (value instanceof COSString) + { + return ((COSString) value).getString(); + } + else if (value instanceof COSStream) + { + return ((COSStream) value).toTextString(); + } + else if (value != null) + { + throw new IOException("Error:Unknown type for field import" + value); + } + else + { + return null; + } + } + + /** + * Returns the COS value of this field. + * + * @return The COS value of the field. + * @throws IOException If there is an error getting the value. + */ + public COSBase getCOSValue() throws IOException + { + COSBase value = field.getDictionaryObject(COSName.V); + + if (value instanceof COSName) + { + return value; + } + else if (value instanceof COSArray) + { + return value; + } + else if (value instanceof COSString || value instanceof COSStream) + { + return value; + } + else if (value != null) + { + throw new IOException("Error:Unknown type for field import" + value); + } + else + { + return null; + } + } + + /** + * You should pass in a string, or a java.util.List of strings to set the value. + * + * @param value The value that should populate when imported. + * + * @throws IOException If there is an error setting the value. + */ + public void setValue(Object value) throws IOException + { + COSBase cos = null; + if (value instanceof List) + { + cos = COSArrayList.convertStringListToCOSStringCOSArray((List) value); + } + else if (value instanceof String) + { + cos = new COSString((String) value); + } + else if (value instanceof COSObjectable) + { + cos = ((COSObjectable) value).getCOSObject(); + } + else if (value != null) + { + throw new IOException("Error:Unknown type for field import" + value); + } + field.setItem(COSName.V, cos); + } + + /** + * Sets the COS value of this field. + * + * @param value COS value. + */ + public void setValue(COSBase value) + { + field.setItem(COSName.V, value); + } + + /** + * This will get the Ff entry of the cos dictionary. If it it not present then this method will return null. + * + * @return The field flags. + */ + public Integer getFieldFlags() + { + Integer retval = null; + COSNumber ff = (COSNumber) field.getDictionaryObject(COSName.FF); + if (ff != null) + { + retval = ff.intValue(); + } + return retval; + } + + /** + * This will get the field flags that are associated with this field. The Ff entry in the FDF field dictionary. + * + * @param ff The new value for the field flags. + */ + public void setFieldFlags(Integer ff) + { + COSInteger value = null; + if (ff != null) + { + value = COSInteger.get(ff); + } + field.setItem(COSName.FF, value); + } + + /** + * This will get the field flags that are associated with this field. The Ff entry in the FDF field dictionary. + * + * @param ff The new value for the field flags. + */ + public void setFieldFlags(int ff) + { + field.setInt(COSName.FF, ff); + } + + /** + * This will get the SetFf entry of the cos dictionary. If it it not present then this method will return null. + * + * @return The field flags. + */ + public Integer getSetFieldFlags() + { + Integer retval = null; + COSNumber ff = (COSNumber) field.getDictionaryObject(COSName.SET_FF); + if (ff != null) + { + retval = ff.intValue(); + } + return retval; + } + + /** + * This will get the field flags that are associated with this field. The SetFf entry in the FDF field dictionary. + * + * @param ff The new value for the "set field flags". + */ + public void setSetFieldFlags(Integer ff) + { + COSInteger value = null; + if (ff != null) + { + value = COSInteger.get(ff); + } + field.setItem(COSName.SET_FF, value); + } + + /** + * This will get the field flags that are associated with this field. The SetFf entry in the FDF field dictionary. + * + * @param ff The new value for the "set field flags". + */ + public void setSetFieldFlags(int ff) + { + field.setInt(COSName.SET_FF, ff); + } + + /** + * This will get the ClrFf entry of the cos dictionary. If it it not present then this method will return null. + * + * @return The field flags. + */ + public Integer getClearFieldFlags() + { + Integer retval = null; + COSNumber ff = (COSNumber) field.getDictionaryObject(COSName.CLR_FF); + if (ff != null) + { + retval = ff.intValue(); + } + return retval; + } + + /** + * This will get the field flags that are associated with this field. The ClrFf entry in the FDF field dictionary. + * + * @param ff The new value for the "clear field flags". + */ + public void setClearFieldFlags(Integer ff) + { + COSInteger value = null; + if (ff != null) + { + value = COSInteger.get(ff); + } + field.setItem(COSName.CLR_FF, value); + } + + /** + * This will get the field flags that are associated with this field. The ClrFf entry in the FDF field dictionary. + * + * @param ff The new value for the "clear field flags". + */ + public void setClearFieldFlags(int ff) + { + field.setInt(COSName.CLR_FF, ff); + } + + /** + * This will get the F entry of the cos dictionary. If it it not present then this method will return null. + * + * @return The widget field flags. + */ + public Integer getWidgetFieldFlags() + { + Integer retval = null; + COSNumber f = (COSNumber) field.getDictionaryObject("F"); + if (f != null) + { + retval = f.intValue(); + } + return retval; + } + + /** + * This will get the widget field flags that are associated with this field. The F entry in the FDF field + * dictionary. + * + * @param f The new value for the field flags. + */ + public void setWidgetFieldFlags(Integer f) + { + COSInteger value = null; + if (f != null) + { + value = COSInteger.get(f); + } + field.setItem(COSName.F, value); + } + + /** + * This will get the field flags that are associated with this field. The F entry in the FDF field dictionary. + * + * @param f The new value for the field flags. + */ + public void setWidgetFieldFlags(int f) + { + field.setInt(COSName.F, f); + } + + /** + * This will get the SetF entry of the cos dictionary. If it it not present then this method will return null. + * + * @return The field flags. + */ + public Integer getSetWidgetFieldFlags() + { + Integer retval = null; + COSNumber ff = (COSNumber) field.getDictionaryObject(COSName.SET_F); + if (ff != null) + { + retval = ff.intValue(); + } + return retval; + } + + /** + * This will get the widget field flags that are associated with this field. The SetF entry in the FDF field + * dictionary. + * + * @param ff The new value for the "set widget field flags". + */ + public void setSetWidgetFieldFlags(Integer ff) + { + COSInteger value = null; + if (ff != null) + { + value = COSInteger.get(ff); + } + field.setItem(COSName.SET_F, value); + } + + /** + * This will get the widget field flags that are associated with this field. The SetF entry in the FDF field + * dictionary. + * + * @param ff The new value for the "set widget field flags". + */ + public void setSetWidgetFieldFlags(int ff) + { + field.setInt(COSName.SET_F, ff); + } + + /** + * This will get the ClrF entry of the cos dictionary. If it it not present then this method will return null. + * + * @return The widget field flags. + */ + public Integer getClearWidgetFieldFlags() + { + Integer retval = null; + COSNumber ff = (COSNumber) field.getDictionaryObject(COSName.CLR_F); + if (ff != null) + { + retval = ff.intValue(); + } + return retval; + } + + /** + * This will get the field flags that are associated with this field. The ClrF entry in the FDF field dictionary. + * + * @param ff The new value for the "clear widget field flags". + */ + public void setClearWidgetFieldFlags(Integer ff) + { + COSInteger value = null; + if (ff != null) + { + value = COSInteger.get(ff); + } + field.setItem(COSName.CLR_F, value); + } + + /** + * This will get the field flags that are associated with this field. The ClrF entry in the FDF field dictionary. + * + * @param ff The new value for the "clear field flags". + */ + public void setClearWidgetFieldFlags(int ff) + { + field.setInt(COSName.CLR_F, ff); + } + + /** + * This will get the appearance dictionary that specifies the appearance of a pushbutton field. + * + * @return The AP entry of this dictionary. + */ + public PDAppearanceDictionary getAppearanceDictionary() + { + PDAppearanceDictionary retval = null; + COSDictionary dict = (COSDictionary) field.getDictionaryObject(COSName.AP); + if (dict != null) + { + retval = new PDAppearanceDictionary(dict); + } + return retval; + } + + /** + * This will set the appearance dictionary. + * + * @param ap The appearance dictionary. + */ + public void setAppearanceDictionary(PDAppearanceDictionary ap) + { + field.setItem(COSName.AP, ap); + } + + /** + * This will get named page references.. + * + * @return The named page references. + */ + public FDFNamedPageReference getAppearanceStreamReference() + { + FDFNamedPageReference retval = null; + COSDictionary ref = (COSDictionary) field.getDictionaryObject(COSName.AP_REF); + if (ref != null) + { + retval = new FDFNamedPageReference(ref); + } + return retval; + } + + /** + * This will set the named page references. + * + * @param ref The named page references. + */ + public void setAppearanceStreamReference(FDFNamedPageReference ref) + { + field.setItem(COSName.AP_REF, ref); + } + + /** + * This will get the icon fit that is associated with this field. + * + * @return The IF entry. + */ + public FDFIconFit getIconFit() + { + FDFIconFit retval = null; + COSDictionary dic = (COSDictionary) field.getDictionaryObject(COSName.IF); + if (dic != null) + { + retval = new FDFIconFit(dic); + } + return retval; + } + + /** + * This will set the icon fit entry. + * + * @param fit The icon fit object. + */ + public void setIconFit(FDFIconFit fit) + { + field.setItem(COSName.IF, fit); + } + + /** + * This will return a list of options for a choice field. The value in the list will be 1 of 2 types. + * java.lang.String or FDFOptionElement. + * + * @return A list of all options. + */ + public List getOptions() + { + List retval = null; + COSArray array = (COSArray) field.getDictionaryObject(COSName.OPT); + if (array != null) + { + List objects = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) + { + COSBase next = array.getObject(i); + if (next instanceof COSString) + { + objects.add(((COSString) next).getString()); + } + else + { + COSArray value = (COSArray) next; + objects.add(new FDFOptionElement(value)); + } + } + retval = new COSArrayList<>(objects, array); + } + return retval; + } + + /** + * This will set the options for the choice field. The objects in the list should either be java.lang.String or + * FDFOptionElement. + * + * @param options The options to set. + */ + public void setOptions(List options) + { + COSArray value = COSArrayList.converterToCOSArray(options); + field.setItem(COSName.OPT, value); + } + + /** + * This will get the action that is associated with this field. + * + * @return The A entry in the field dictionary. + */ + public PDAction getAction() + { + return PDActionFactory.createAction((COSDictionary) field.getDictionaryObject(COSName.A)); + } + + /** + * This will set the action that is associated with this field. + * + * @param a The new action. + */ + public void setAction(PDAction a) + { + field.setItem(COSName.A, a); + } + + /** + * This will get a list of additional actions that will get executed based on events. + * + * @return The AA entry in this field dictionary. + */ + public PDAdditionalActions getAdditionalActions() + { + PDAdditionalActions retval = null; + COSDictionary dict = (COSDictionary) field.getDictionaryObject(COSName.AA); + if (dict != null) + { + retval = new PDAdditionalActions(dict); + } + + return retval; + } + + /** + * This will set the additional actions that are associated with this field. + * + * @param aa The additional actions. + */ + public void setAdditionalActions(PDAdditionalActions aa) + { + field.setItem(COSName.AA, aa); + } + + /** + * This will set the rich text that is associated with this field. + * + * @return The rich text XHTML stream. + */ + public String getRichText() + { + COSBase rv = field.getDictionaryObject(COSName.RV); + if (rv == null) + { + return null; + } + else if (rv instanceof COSString) + { + return ((COSString) rv).getString(); + } + else + { + return ((COSStream) rv).toTextString(); + } + } + + /** + * This will set the rich text value. + * + * @param rv The rich text value for the stream. + */ + public void setRichText(COSString rv) + { + field.setItem(COSName.RV, rv); + } + + /** + * This will set the rich text value. + * + * @param rv The rich text value for the stream. + */ + public void setRichText(COSStream rv) + { + field.setItem(COSName.RV, rv); + } + + /** + * Escape special characters. + * + * @param input the string to be escaped + * + * @return the resulting string + */ + private String escapeXML(String input) + { + StringBuilder escapedXML = new StringBuilder(); + for (int i = 0; i < input.length(); i++) + { + char c = input.charAt(i); + switch (c) + { + case '<': + escapedXML.append("<"); + break; + case '>': + escapedXML.append(">"); + break; + case '\"': + escapedXML.append("""); + break; + case '&': + escapedXML.append("&"); + break; + case '\'': + escapedXML.append("'"); + break; + default: + if (c > 0x7e) + { + escapedXML.append("&#").append((int) c).append(";"); + } + else + { + escapedXML.append(c); + } + } + } + return escapedXML.toString(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFIconFit.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFIconFit.java new file mode 100644 index 00000000000..b7b5954ce20 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFIconFit.java @@ -0,0 +1,198 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRange; + +/** + * This represents an Icon fit dictionary for an FDF field. + * + * @author Ben Litchfield + */ +public class FDFIconFit implements COSObjectable +{ + private COSDictionary fit; + + /** + * A scale option. + */ + public static final String SCALE_OPTION_ALWAYS = "A"; + /** + * A scale option. + */ + public static final String SCALE_OPTION_ONLY_WHEN_ICON_IS_BIGGER = "B"; + /** + * A scale option. + */ + public static final String SCALE_OPTION_ONLY_WHEN_ICON_IS_SMALLER = "S"; + /** + * A scale option. + */ + public static final String SCALE_OPTION_NEVER = "N"; + + /** + * Scale to fill with of annotation, disregarding aspect ratio. + */ + public static final String SCALE_TYPE_ANAMORPHIC = "A"; + /** + * Scale to fit width or height, smaller of two, while retaining aspect ration. + */ + public static final String SCALE_TYPE_PROPORTIONAL = "P"; + + /** + * Default constructor. + */ + public FDFIconFit() + { + fit = new COSDictionary(); + } + + /** + * Constructor. + * + * @param f The icon fit dictionary. + */ + public FDFIconFit(COSDictionary f) + { + fit = f; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return fit; + } + + /** + * This will get the scale option. See the SCALE_OPTION_XXX constants. This is guaranteed to never return null. + * Default: Always + * + * @return The scale option. + */ + public String getScaleOption() + { + String retval = fit.getNameAsString(COSName.SW); + if (retval == null) + { + retval = SCALE_OPTION_ALWAYS; + } + return retval; + } + + /** + * This will set the scale option for the icon. Set the SCALE_OPTION_XXX constants. + * + * @param option The scale option. + */ + public void setScaleOption(String option) + { + fit.setName(COSName.SW, option); + } + + /** + * This will get the scale type. See the SCALE_TYPE_XXX constants. This is guaranteed to never return null. Default: + * Proportional + * + * @return The scale type. + */ + public String getScaleType() + { + String retval = fit.getNameAsString(COSName.S); + if (retval == null) + { + retval = SCALE_TYPE_PROPORTIONAL; + } + return retval; + } + + /** + * This will set the scale type. See the SCALE_TYPE_XXX constants. + * + * @param scale The scale type. + */ + public void setScaleType(String scale) + { + fit.setName(COSName.S, scale); + } + + /** + * This is guaranteed to never return null.
    + * + * To quote the PDF Spec "An array of two numbers between 0.0 and 1.0 indicating the fraction of leftover space to + * allocate at the left and bottom of the icon. A value of [0.0 0.0] positions the icon at the bottom-left corner of + * the annotation rectangle; a value of [0.5 0.5] centers it within the rectangle. This entry is used only if the + * icon is scaled proportionally. Default value: [0.5 0.5]." + * + * @return The fractional space to allocate. + */ + public PDRange getFractionalSpaceToAllocate() + { + PDRange retval = null; + COSArray array = (COSArray) fit.getDictionaryObject(COSName.A); + if (array == null) + { + retval = new PDRange(); + retval.setMin(.5f); + retval.setMax(.5f); + setFractionalSpaceToAllocate(retval); + } + else + { + retval = new PDRange(array); + } + return retval; + } + + /** + * This will set frational space to allocate. + * + * @param space The space to allocate. + */ + public void setFractionalSpaceToAllocate(PDRange space) + { + fit.setItem(COSName.A, space); + } + + /** + * This will tell if the icon should scale to fit the annotation bounds. Default: false + * + * @return A flag telling if the icon should scale. + */ + public boolean shouldScaleToFitAnnotation() + { + return fit.getBoolean(COSName.FB, false); + } + + /** + * This will tell the icon to scale. + * + * @param value The flag value. + */ + public void setScaleToFitAnnotation(boolean value) + { + fit.setBoolean(COSName.FB, value); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFJavaScript.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFJavaScript.java new file mode 100644 index 00000000000..a158caccd9f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFJavaScript.java @@ -0,0 +1,169 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.util.LinkedHashMap; +import java.util.Map; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript; + +/** + * This represents an FDF JavaScript dictionary that is part of the FDF document. + * + * @author Ben Litchfield + */ +public class FDFJavaScript implements COSObjectable +{ + private final COSDictionary dictionary; + + /** + * Default constructor. + */ + public FDFJavaScript() + { + dictionary = new COSDictionary(); + } + + /** + * Constructor. + * + * @param javaScript The FDF java script. + */ + public FDFJavaScript(COSDictionary javaScript) + { + dictionary = javaScript; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * This will get the javascript that is executed before the import. + * + * @return Some javascript code. + */ + public String getBefore() + { + COSBase base = dictionary.getDictionaryObject(COSName.BEFORE); + if (base instanceof COSString) + { + return ((COSString) base).getString(); + } + else if (base instanceof COSStream) + { + return ((COSStream) base).toTextString(); + } + else + { + return null; + } + } + + /** + * This will set the javascript code the will get execute before the import. + * + * @param before A reference to some javascript code. + */ + public void setBefore(String before) + { + dictionary.setItem(COSName.BEFORE, new COSString(before)); + } + + /** + * This will get the javascript that is executed after the import. + * + * @return Some javascript code. + */ + public String getAfter() + { + COSBase base = dictionary.getDictionaryObject(COSName.AFTER); + if (base instanceof COSString) + { + return ((COSString) base).getString(); + } + else if (base instanceof COSStream) + { + return ((COSStream) base).toTextString(); + } + else + { + return null; + } + } + + /** + * This will set the javascript code the will get execute after the import. + * + * @param after A reference to some javascript code. + */ + public void setAfter(String after) + { + dictionary.setItem(COSName.AFTER, new COSString(after)); + } + + /** + * Returns the dictionary's "Doc" entry, that is, a map of key value pairs to be added to the document's JavaScript + * name tree. + * + * @return Map of named "JavaScript" dictionaries. + */ + public Map getDoc() + { + Map map = new LinkedHashMap<>(); + COSArray array = (COSArray) dictionary.getDictionaryObject(COSName.DOC); + if (array == null) + { + return null; + } + for (int i = 0; i < array.size(); i++) + { + PDActionFactory.createAction((COSDictionary) array.getObject(i)); + } + return map; + } + + /** + * Sets the dictionary's "Doc" entry. + * + * @param map Map of named "JavaScript" dictionaries. + */ + public void setDoc(Map map) + { + COSArray array = new COSArray(); + for (Map.Entry entry : map.entrySet()) + { + array.add(new COSString(entry.getKey())); + array.add(entry.getValue()); + } + dictionary.setItem(COSName.DOC, array); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFNamedPageReference.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFNamedPageReference.java new file mode 100644 index 00000000000..ea2d2e041ef --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFNamedPageReference.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +/** + * This represents an FDF named page reference that is part of the FDF field. + * + * @author Ben Litchfield + */ +public class FDFNamedPageReference implements COSObjectable +{ + private final COSDictionary ref; + + /** + * Default constructor. + */ + public FDFNamedPageReference() + { + ref = new COSDictionary(); + } + + /** + * Constructor. + * + * @param r The FDF named page reference dictionary. + */ + public FDFNamedPageReference(COSDictionary r) + { + ref = r; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return ref; + } + + /** + * This will get the name of the referenced page. A required parameter. + * + * @return The name of the referenced page. + */ + public String getName() + { + return ref.getString(COSName.NAME); + } + + /** + * This will set the name of the referenced page. + * + * @param name The referenced page name. + */ + public void setName(String name) + { + ref.setString(COSName.NAME, name); + } + + /** + * This will get the file specification of this reference. An optional parameter. + * + * @return The F entry for this dictionary. + * + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFileSpecification() throws IOException + { + return PDFileSpecification.createFS(ref.getDictionaryObject(COSName.F)); + } + + /** + * This will set the file specification for this named page reference. + * + * @param fs The file specification to set. + */ + public void setFileSpecification(PDFileSpecification fs) + { + ref.setItem(COSName.F, fs); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFOptionElement.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFOptionElement.java new file mode 100644 index 00000000000..b18006608b1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFOptionElement.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSString; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents an object that can be used in a Field's Opt entry to represent an available option and a default + * appearance string. + * + * @author Ben Litchfield + */ +public class FDFOptionElement implements COSObjectable +{ + private final COSArray option; + + /** + * Default constructor. + */ + public FDFOptionElement() + { + option = new COSArray(); + option.add(new COSString("")); + option.add(new COSString("")); + } + + /** + * Constructor. + * + * @param o The option element. + */ + public FDFOptionElement(COSArray o) + { + option = o; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSBase getCOSObject() + { + return option; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + public COSArray getCOSArray() + { + return option; + } + + /** + * This will get the string of one of the available options. A required element. + * + * @return An available option. + */ + public String getOption() + { + return ((COSString) option.getObject(0)).getString(); + } + + /** + * This will set the string for an available option. + * + * @param opt One of the available options. + */ + public void setOption(String opt) + { + option.set(0, new COSString(opt)); + } + + /** + * This will get the string of default appearance string. A required element. + * + * @return A default appearance string. + */ + public String getDefaultAppearanceString() + { + return ((COSString) option.getObject(1)).getString(); + } + + /** + * This will set the default appearance string. + * + * @param da The default appearance string. + */ + public void setDefaultAppearanceString(String da) + { + option.set(1, new COSString(da)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFPage.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFPage.java new file mode 100644 index 00000000000..c35574f4ff5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFPage.java @@ -0,0 +1,122 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents an FDF page that is part of the FDF document. + * + * @author Ben Litchfield + */ +public class FDFPage implements COSObjectable +{ + private final COSDictionary page; + + /** + * Default constructor. + */ + public FDFPage() + { + page = new COSDictionary(); + } + + /** + * Constructor. + * + * @param p The FDF page. + */ + public FDFPage(COSDictionary p) + { + page = p; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return page; + } + + /** + * This will get a list of FDFTemplage objects that describe the named pages that serve as templates. + * + * @return A list of templates. + */ + public List getTemplates() + { + List retval = null; + COSArray array = (COSArray) page.getDictionaryObject(COSName.TEMPLATES); + if (array != null) + { + List objects = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) + { + objects.add(new FDFTemplate((COSDictionary) array.getObject(i))); + } + retval = new COSArrayList<>(objects, array); + } + return retval; + } + + /** + * A list of FDFTemplate objects. + * + * @param templates A list of templates for this Page. + */ + public void setTemplates(List templates) + { + page.setItem(COSName.TEMPLATES, COSArrayList.converterToCOSArray(templates)); + } + + /** + * This will get the FDF page info object. + * + * @return The Page info. + */ + public FDFPageInfo getPageInfo() + { + FDFPageInfo retval = null; + COSDictionary dict = page.getCOSDictionary(COSName.INFO); + if (dict != null) + { + retval = new FDFPageInfo(dict); + } + return retval; + } + + /** + * This will set the page info. + * + * @param info The new page info dictionary. + */ + public void setPageInfo(FDFPageInfo info) + { + page.setItem(COSName.INFO, info); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFPageInfo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFPageInfo.java new file mode 100644 index 00000000000..1fc21e61391 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFPageInfo.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import org.apache.pdfbox.cos.COSDictionary; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents an FDF page info that is part of the FDF page. + * + * @author Ben Litchfield + */ +public class FDFPageInfo implements COSObjectable +{ + private final COSDictionary pageInfo; + + /** + * Default constructor. + */ + public FDFPageInfo() + { + pageInfo = new COSDictionary(); + } + + /** + * Constructor. + * + * @param p The FDF page. + */ + public FDFPageInfo(COSDictionary p) + { + pageInfo = p; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return pageInfo; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFTemplate.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFTemplate.java new file mode 100644 index 00000000000..5732f2b2e55 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFTemplate.java @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.fdf; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents an FDF template that is part of the FDF page. + * + * @author Ben Litchfield + */ +public class FDFTemplate implements COSObjectable +{ + private final COSDictionary template; + + /** + * Default constructor. + */ + public FDFTemplate() + { + template = new COSDictionary(); + } + + /** + * Constructor. + * + * @param t The FDF page template. + */ + public FDFTemplate(COSDictionary t) + { + template = t; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return template; + } + + /** + * This is the template reference. + * + * @return The template reference. + */ + public FDFNamedPageReference getTemplateReference() + { + FDFNamedPageReference retval = null; + COSDictionary dict = (COSDictionary) template.getDictionaryObject(COSName.TREF); + if (dict != null) + { + retval = new FDFNamedPageReference(dict); + } + return retval; + } + + /** + * This will set the template reference. + * + * @param tRef The template reference. + */ + public void setTemplateReference(FDFNamedPageReference tRef) + { + template.setItem(COSName.TREF, tRef); + } + + /** + * This will get a list of fields that are part of this template. + * + * @return A list of fields. + */ + public List getFields() + { + List retval = null; + COSArray array = (COSArray) template.getDictionaryObject(COSName.FIELDS); + if (array != null) + { + List fields = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) + { + fields.add(new FDFField((COSDictionary) array.getObject(i))); + } + retval = new COSArrayList<>(fields, array); + } + return retval; + } + + /** + * This will set a list of fields for this template. + * + * @param fields The list of fields to set for this template. + */ + public void setFields(List fields) + { + template.setItem(COSName.FIELDS, COSArrayList.converterToCOSArray(fields)); + } + + /** + * A flag telling if the fields imported from the template may be renamed if there are conflicts. + * + * @return A flag telling if the fields can be renamed. + */ + public boolean shouldRename() + { + return template.getBoolean(COSName.RENAME, false); + } + + /** + * This will set if the fields can be renamed. + * + * @param value The flag value. + */ + public void setRename(boolean value) + { + template.setBoolean(COSName.RENAME, value); + } +} diff --git a/src/org/pdfbox/pdmodel/fdf/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/fdf/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java new file mode 100644 index 00000000000..f77e0369ee3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.ttf.OpenTypeFont; + +/** + * A CIDFontMapping is a kind of FontMapping which allows for an additional TrueTypeFont substitute + * to be provided if a CID font is not available. + * + * @author John Hewson + */ +public final class CIDFontMapping extends FontMapping +{ + private final FontBoxFont ttf; + + public CIDFontMapping(OpenTypeFont font, FontBoxFont fontBoxFont, boolean isFallback) + { + super(font, isFallback); + this.ttf = fontBoxFont; + } + + /** + * Returns a TrueType font when isCIDFont() is true, otherwise null. + */ + public FontBoxFont getTrueTypeFont() + { + return ttf; + } + + /** + * Returns true if this is a CID font. + */ + public boolean isCIDFont() + { + return getFont() != null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDSystemInfo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDSystemInfo.java new file mode 100644 index 00000000000..9fc901751ba --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDSystemInfo.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +/** + * Represents a CIDSystemInfo for the FontMapper API. + * + * @author John Hewson + */ +public final class CIDSystemInfo +{ + private final String registry; + private final String ordering; + private final int supplement; + + CIDSystemInfo(String registry, String ordering, int supplement) + { + this.registry = registry; + this.ordering = ordering; + this.supplement = supplement; + } + + public String getRegistry() + { + return registry; + } + + public String getOrdering() + { + return ordering; + } + + public int getSupplement() + { + return supplement; + } + + @Override + public String toString() + { + return getRegistry() + "-" + getOrdering() + "-" + getSupplement(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java new file mode 100644 index 00000000000..879ca9de3a6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CMapManager.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import org.apache.fontbox.cmap.CMap; +import org.apache.fontbox.cmap.CMapParser; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * CMap resource loader and cache. + */ +final class CMapManager +{ + static Map cMapCache = + Collections.synchronizedMap(new HashMap()); + + private CMapManager() + { + } + + /** + * Fetches the predefined CMap from disk (or cache). + * + * @param cMapName CMap name + * @return The predefined CMap, never null. + * @throws IOException + */ + public static CMap getPredefinedCMap(String cMapName) throws IOException + { + CMap cmap = cMapCache.get(cMapName); + if (cmap != null) + { + return cmap; + } + + CMapParser parser = new CMapParser(); + CMap targetCmap = parser.parsePredefined(cMapName); + + // limit the cache to predefined CMaps + cMapCache.put(targetCmap.getName(), targetCmap); + return targetCmap; + } + + /** + * Parse the given CMap. + * + * @param cMapStream the CMap to be read + * @return the parsed CMap + */ + public static CMap parseCMap(InputStream cMapStream) throws IOException + { + CMap targetCmap = null; + if (cMapStream != null) + { + CMapParser parser = new CMapParser(); + targetCmap = parser.parse(cMapStream); + } + return targetCmap; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java new file mode 100644 index 00000000000..735b129c31f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java @@ -0,0 +1,768 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.security.AccessControlException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.cff.CFFCIDFont; +import org.apache.fontbox.cff.CFFFont; +import org.apache.fontbox.ttf.NamingTable; +import org.apache.fontbox.ttf.OTFParser; +import org.apache.fontbox.ttf.OpenTypeFont; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TrueTypeCollection; +import org.apache.fontbox.ttf.TrueTypeCollection.TrueTypeFontProcessor; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.type1.Type1Font; +import org.apache.fontbox.util.autodetect.FontFileFinder; +import org.apache.pdfbox.util.Charsets; + +/** + * A FontProvider which searches for fonts on the local filesystem. + * + * @author John Hewson + */ +final class FileSystemFontProvider extends FontProvider +{ + private static final Log LOG = LogFactory.getLog(FileSystemFontProvider.class); + + private final List fontInfoList = new ArrayList<>(); + private final FontCache cache; + + private static class FSFontInfo extends FontInfo + { + private final String postScriptName; + private final FontFormat format; + private final CIDSystemInfo cidSystemInfo; + private final int usWeightClass; + private final int sFamilyClass; + private final int ulCodePageRange1; + private final int ulCodePageRange2; + private final int macStyle; + private final PDPanoseClassification panose; + private final File file; + private transient FileSystemFontProvider parent; + + private FSFontInfo(File file, FontFormat format, String postScriptName, + CIDSystemInfo cidSystemInfo, int usWeightClass, int sFamilyClass, + int ulCodePageRange1, int ulCodePageRange2, int macStyle, byte[] panose, + FileSystemFontProvider parent) + { + this.file = file; + this.format = format; + this.postScriptName = postScriptName; + this.cidSystemInfo = cidSystemInfo; + this.usWeightClass = usWeightClass; + this.sFamilyClass = sFamilyClass; + this.ulCodePageRange1 = ulCodePageRange1; + this.ulCodePageRange2 = ulCodePageRange2; + this.macStyle = macStyle; + this.panose = panose != null ? new PDPanoseClassification(panose) : null; + this.parent = parent; + } + + @Override + public String getPostScriptName() + { + return postScriptName; + } + + @Override + public FontFormat getFormat() + { + return format; + } + + @Override + public CIDSystemInfo getCIDSystemInfo() + { + return cidSystemInfo; + } + + /** + * {@inheritDoc} + *

    + * The method returns null if there is there was an error opening the font. + * + */ + @Override + public FontBoxFont getFont() + { + FontBoxFont cached = parent.cache.getFont(this); + if (cached != null) + { + return cached; + } + else + { + FontBoxFont font; + switch (format) + { + case PFB: font = parent.getType1Font(postScriptName, file); break; + case TTF: font = parent.getTrueTypeFont(postScriptName, file); break; + case OTF: font = parent.getOTFFont(postScriptName, file); break; + default: throw new RuntimeException("can't happen"); + } + if (font != null) + { + parent.cache.addFont(this, font); + } + return font; + } + } + + @Override + public int getFamilyClass() + { + return sFamilyClass; + } + + @Override + public int getWeightClass() + { + return usWeightClass; + } + + @Override + public int getCodePageRange1() + { + return ulCodePageRange1; + } + + @Override + public int getCodePageRange2() + { + return ulCodePageRange2; + } + + @Override + public int getMacStyle() + { + return macStyle; + } + + @Override + public PDPanoseClassification getPanose() + { + return panose; + } + + @Override + public String toString() + { + return super.toString() + " " + file; + } + } + + /** + * Represents ignored fonts (i.e. bitmap fonts). + */ + private static final class FSIgnored extends FSFontInfo + { + private FSIgnored(File file, FontFormat format, String postScriptName) + { + super(file, format, postScriptName, null, 0, 0, 0, 0, 0, null, null); + } + } + + /** + * Constructor. + */ + FileSystemFontProvider(FontCache cache) + { + this.cache = cache; + try + { + if (LOG.isTraceEnabled()) + { + LOG.trace("Will search the local system for fonts"); + } + + // scan the local system for font files + List files = new ArrayList<>(); + FontFileFinder fontFileFinder = new FontFileFinder(); + List fonts = fontFileFinder.find(); + for (URI font : fonts) + { + files.add(new File(font)); + } + + if (LOG.isTraceEnabled()) + { + LOG.trace("Found " + files.size() + " fonts on the local system"); + } + + // load cached FontInfo objects + List cachedInfos = loadDiskCache(files); + if (cachedInfos != null && cachedInfos.size() > 0) + { + fontInfoList.addAll(cachedInfos); + } + else + { + LOG.warn("Building on-disk font cache, this may take a while"); + scanFonts(files); + saveDiskCache(); + LOG.warn("Finished building on-disk font cache, found " + + fontInfoList.size() + " fonts"); + } + } + catch (AccessControlException e) + { + LOG.error("Error accessing the file system", e); + } + } + + private void scanFonts(List files) + { + for (File file : files) + { + try + { + if (file.getPath().toLowerCase().endsWith(".ttf") || + file.getPath().toLowerCase().endsWith(".otf")) + { + addTrueTypeFont(file); + } + else if (file.getPath().toLowerCase().endsWith(".ttc") || + file.getPath().toLowerCase().endsWith(".otc")) + { + addTrueTypeCollection(file); + } + else if (file.getPath().toLowerCase().endsWith(".pfb")) + { + addType1Font(file); + } + } + catch (IOException e) + { + LOG.error("Error parsing font " + file.getPath(), e); + } + } + } + + private File getDiskCacheFile() + { + String path = System.getProperty("pdfbox.fontcache"); + if (path == null || !new File(path).isDirectory() || !new File(path).canWrite()) + { + path = System.getProperty("user.home"); + if (path == null || !new File(path).isDirectory() || !new File(path).canWrite()) + { + path = System.getProperty("java.io.tmpdir"); + } + } + return new File(path, ".pdfbox.cache"); + } + + /** + * Saves the font metadata cache to disk. + */ + private void saveDiskCache() + { + File file = null; + try + { + file = getDiskCacheFile(); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) + { + for (FSFontInfo fontInfo : fontInfoList) + { + writeFontInfo(writer, fontInfo); + } + } + catch (IOException e) + { + LOG.warn("Could not write to font cache", e); + LOG.warn("Installed fonts information will have to be reloaded for each start"); + LOG.warn("You can assign a directory to the 'pdfbox.fontcache' property"); + } + + } + catch (SecurityException e) + { + LOG.debug("Couldn't create writer for font cache file", e); + return; + } + } + + private void writeFontInfo(BufferedWriter writer, FSFontInfo fontInfo) throws IOException + { + writer.write(fontInfo.postScriptName.trim()); + writer.write("|"); + writer.write(fontInfo.format.toString()); + writer.write("|"); + if (fontInfo.cidSystemInfo != null) + { + writer.write(fontInfo.cidSystemInfo.getRegistry() + '-' + + fontInfo.cidSystemInfo.getOrdering() + '-' + + fontInfo.cidSystemInfo.getSupplement()); + } + writer.write("|"); + if (fontInfo.usWeightClass > -1) + { + writer.write(Integer.toHexString(fontInfo.usWeightClass)); + } + writer.write("|"); + if (fontInfo.sFamilyClass > -1) + { + writer.write(Integer.toHexString(fontInfo.sFamilyClass)); + } + writer.write("|"); + writer.write(Integer.toHexString(fontInfo.ulCodePageRange1)); + writer.write("|"); + writer.write(Integer.toHexString(fontInfo.ulCodePageRange2)); + writer.write("|"); + if (fontInfo.macStyle > -1) + { + writer.write(Integer.toHexString(fontInfo.macStyle)); + } + writer.write("|"); + if (fontInfo.panose != null) + { + byte[] bytes = fontInfo.panose.getBytes(); + for (int i = 0; i < 10; i ++) + { + String str = Integer.toHexString(bytes[i]); + if (str.length() == 1) + { + writer.write('0'); + } + writer.write(str); + } + } + writer.write("|"); + writer.write(fontInfo.file.getAbsolutePath()); + writer.newLine(); + } + + /** + * Loads the font metadata cache from disk. + */ + private List loadDiskCache(List files) + { + Set pending = new HashSet<>(); + for (File file : files) + { + pending.add(file.getAbsolutePath()); + } + + List results = new ArrayList<>(); + + // Get the disk cache + File file = null; + boolean fileExists = false; + try + { + file = getDiskCacheFile(); + fileExists = file.exists(); + } + catch (SecurityException e) + { + LOG.debug("Error checking for file existence", e); + } + + if (fileExists) + { + try (BufferedReader reader = new BufferedReader(new FileReader(file))) + { + String line; + while ((line = reader.readLine()) != null) + { + String[] parts = line.split("\\|", 10); + if (parts.length < 10) + { + LOG.error("Incorrect line '" + line + "' in font disk cache is skipped"); + continue; + } + + String postScriptName; + FontFormat format; + CIDSystemInfo cidSystemInfo = null; + int usWeightClass = -1; + int sFamilyClass = -1; + int ulCodePageRange1; + int ulCodePageRange2; + int macStyle = -1; + byte[] panose = null; + File fontFile; + + postScriptName = parts[0]; + format = FontFormat.valueOf(parts[1]); + if (parts[2].length() > 0) + { + String[] ros = parts[2].split("-"); + cidSystemInfo = new CIDSystemInfo(ros[0], ros[1], Integer.parseInt(ros[2])); + } + if (parts[3].length() > 0) + { + usWeightClass = (int)Long.parseLong(parts[3], 16); + } + if (parts[4].length() > 0) + { + sFamilyClass = (int)Long.parseLong(parts[4], 16); + } + ulCodePageRange1 = (int)Long.parseLong(parts[5], 16); + ulCodePageRange2 = (int)Long.parseLong(parts[6], 16); + if (parts[7].length() > 0) + { + macStyle = (int)Long.parseLong(parts[7], 16); + } + if (parts[8].length() > 0) + { + panose = new byte[10]; + for (int i = 0; i < 10; i ++) + { + String str = parts[8].substring(i * 2, i * 2 + 2); + int b = Integer.parseInt(str, 16); + panose[i] = (byte)(b & 0xff); + } + } + fontFile = new File(parts[9]); + if (fontFile.exists()) + { + FSFontInfo info = new FSFontInfo(fontFile, format, postScriptName, + cidSystemInfo, usWeightClass, sFamilyClass, ulCodePageRange1, + ulCodePageRange2, macStyle, panose, this); + results.add(info); + } + else + { + LOG.debug("Font file " + fontFile.getAbsolutePath() + " not found, skipped"); + } + pending.remove(fontFile.getAbsolutePath()); + } + } + catch (IOException e) + { + LOG.error("Error loading font cache, will be re-built", e); + return null; + } + } + + if (pending.size() > 0) + { + // re-build the entire cache if we encounter un-cached fonts (could be optimised) + LOG.warn("New fonts found, font cache will be re-built"); + return null; + } + + return results; + } + + /** + * Adds a TTC or OTC to the file cache. To reduce memory, the parsed font is not cached. + */ + private void addTrueTypeCollection(final File ttcFile) throws IOException + { + try (TrueTypeCollection ttc = new TrueTypeCollection(ttcFile)) + { + ttc.processAllFonts(new TrueTypeFontProcessor() + { + @Override + public void process(TrueTypeFont ttf) throws IOException + { + addTrueTypeFontImpl(ttf, ttcFile); + } + }); + } + catch (NullPointerException | IOException e) + { + // NPE due to TTF parser being buggy + LOG.error("Could not load font file: " + ttcFile, e); + } + } + + /** + * Adds an OTF or TTF font to the file cache. To reduce memory, the parsed font is not cached. + */ + private void addTrueTypeFont(File ttfFile) throws IOException + { + try + { + if (ttfFile.getPath().endsWith(".otf")) + { + OTFParser parser = new OTFParser(false, true); + OpenTypeFont otf = parser.parse(ttfFile); + addTrueTypeFontImpl(otf, ttfFile); + } + else + { + TTFParser parser = new TTFParser(false, true); + TrueTypeFont ttf = parser.parse(ttfFile); + addTrueTypeFontImpl(ttf, ttfFile); + } + } + catch (NullPointerException | IOException e) + { + // NPE due to TTF parser being buggy + LOG.error("Could not load font file: " + ttfFile, e); + } + } + + /** + * Adds an OTF or TTF font to the file cache. To reduce memory, the parsed font is not cached. + */ + private void addTrueTypeFontImpl(TrueTypeFont ttf, File file) throws IOException + { + try + { + // read PostScript name, if any + if (ttf.getName() != null && ttf.getName().contains("|")) + { + fontInfoList.add(new FSIgnored(file, FontFormat.TTF, "*skippipeinname*")); + LOG.warn("Skipping font with '|' in name " + ttf.getName() + " in file " + file); + } + else if (ttf.getName() != null) + { + // ignore bitmap fonts + if (ttf.getHeader() == null) + { + fontInfoList.add(new FSIgnored(file, FontFormat.TTF, ttf.getName())); + return; + } + int macStyle = ttf.getHeader().getMacStyle(); + + int sFamilyClass = -1; + int usWeightClass = -1; + int ulCodePageRange1 = 0; + int ulCodePageRange2 = 0; + byte[] panose = null; + // Apple's AAT fonts don't have an OS/2 table + if (ttf.getOS2Windows() != null) + { + sFamilyClass = ttf.getOS2Windows().getFamilyClass(); + usWeightClass = ttf.getOS2Windows().getWeightClass(); + ulCodePageRange1 = (int)ttf.getOS2Windows().getCodePageRange1(); + ulCodePageRange2 = (int)ttf.getOS2Windows().getCodePageRange2(); + panose = ttf.getOS2Windows().getPanose(); + } + + String format; + if (ttf instanceof OpenTypeFont && ((OpenTypeFont)ttf).isPostScript()) + { + format = "OTF"; + CFFFont cff = ((OpenTypeFont)ttf).getCFF().getFont(); + CIDSystemInfo ros = null; + if (cff instanceof CFFCIDFont) + { + CFFCIDFont cidFont = (CFFCIDFont)cff; + String registry = cidFont.getRegistry(); + String ordering = cidFont.getOrdering(); + int supplement = cidFont.getSupplement(); + ros = new CIDSystemInfo(registry, ordering, supplement); + } + fontInfoList.add(new FSFontInfo(file, FontFormat.OTF, ttf.getName(), ros, + usWeightClass, sFamilyClass, ulCodePageRange1, ulCodePageRange2, + macStyle, panose, this)); + } + else + { + CIDSystemInfo ros = null; + if (ttf.getTableMap().containsKey("gcid")) + { + // Apple's AAT fonts have a "gcid" table with CID info + byte[] bytes = ttf.getTableBytes(ttf.getTableMap().get("gcid")); + String reg = new String(bytes, 10, 64, Charsets.US_ASCII); + String registryName = reg.substring(0, reg.indexOf('\0')); + String ord = new String(bytes, 76, 64, Charsets.US_ASCII); + String orderName = ord.substring(0, ord.indexOf('\0')); + int supplementVersion = bytes[140] << 8 & bytes[141]; + ros = new CIDSystemInfo(registryName, orderName, supplementVersion); + } + + format = "TTF"; + fontInfoList.add(new FSFontInfo(file, FontFormat.TTF, ttf.getName(), ros, + usWeightClass, sFamilyClass, ulCodePageRange1, ulCodePageRange2, + macStyle, panose, this)); + } + + if (LOG.isTraceEnabled()) + { + NamingTable name = ttf.getNaming(); + if (name != null) + { + LOG.trace(format +": '" + name.getPostScriptName() + "' / '" + + name.getFontFamily() + "' / '" + + name.getFontSubFamily() + "'"); + } + } + } + else + { + fontInfoList.add(new FSIgnored(file, FontFormat.TTF, "*skipnoname*")); + LOG.warn("Missing 'name' entry for PostScript name in font " + file); + } + } + catch (IOException e) + { + fontInfoList.add(new FSIgnored(file, FontFormat.TTF, "*skipexception*")); + LOG.error("Could not load font file: " + file, e); + } + finally + { + ttf.close(); + } + } + + /** + * Adds a Type 1 font to the file cache. To reduce memory, the parsed font is not cached. + */ + private void addType1Font(File pfbFile) throws IOException + { + try (InputStream input = new FileInputStream(pfbFile)) + { + Type1Font type1 = Type1Font.createWithPFB(input); + if (type1.getName() != null && type1.getName().contains("|")) + { + fontInfoList.add(new FSIgnored(pfbFile, FontFormat.PFB, "*skippipeinname*")); + LOG.warn("Skipping font with '|' in name " + type1.getName() + " in file " + pfbFile); + return; + } + fontInfoList.add(new FSFontInfo(pfbFile, FontFormat.PFB, type1.getName(), + null, -1, -1, 0, 0, -1, null, this)); + + if (LOG.isTraceEnabled()) + { + LOG.trace("PFB: '" + type1.getName() + "' / '" + type1.getFamilyName() + "' / '" + + type1.getWeight() + "'"); + } + } + catch (IOException e) + { + LOG.error("Could not load font file: " + pfbFile, e); + } + } + + private TrueTypeFont getTrueTypeFont(String postScriptName, File file) + { + try + { + TrueTypeFont ttf = readTrueTypeFont(postScriptName, file); + + if (LOG.isDebugEnabled()) + { + LOG.debug("Loaded " + postScriptName + " from " + file); + } + return ttf; + } + catch (NullPointerException | IOException e) + { + // NPE due to TTF parser being buggy + LOG.error("Could not load font file: " + file, e); + } + return null; + } + + private TrueTypeFont readTrueTypeFont(String postScriptName, File file) throws IOException + { + if (file.getName().toLowerCase().endsWith(".ttc")) + { + TrueTypeCollection ttc = new TrueTypeCollection(file); + TrueTypeFont ttf = ttc.getFontByName(postScriptName); + if (ttf == null) + { + ttc.close(); + throw new IOException("Font " + postScriptName + " not found in " + file); + } + return ttf; + } + else + { + TTFParser ttfParser = new TTFParser(false, true); + return ttfParser.parse(file); + } + } + + private OpenTypeFont getOTFFont(String postScriptName, File file) + { + try + { + // todo JH: we don't yet support loading CFF fonts from OTC collections
 + OTFParser parser = new OTFParser(false, true); + OpenTypeFont otf = parser.parse(file); + + if (LOG.isDebugEnabled()) + { + LOG.debug("Loaded " + postScriptName + " from " + file); + } + return otf; + } + catch (IOException e) + { + LOG.error("Could not load font file: " + file, e); + } + return null; + } + + private Type1Font getType1Font(String postScriptName, File file) + { + try (InputStream input = new FileInputStream(file)) + { + Type1Font type1 = Type1Font.createWithPFB(input); + + if (LOG.isDebugEnabled()) + { + LOG.debug("Loaded " + postScriptName + " from " + file); + } + return type1; + } + catch (IOException e) + { + LOG.error("Could not load font file: " + file, e); + } + return null; + } + + @Override + public String toDebugString() + { + StringBuilder sb = new StringBuilder(); + for (FSFontInfo info : fontInfoList) + { + sb.append(info.getFormat()); + sb.append(": "); + sb.append(info.getPostScriptName()); + sb.append(": "); + sb.append(info.file.getPath()); + sb.append('\n'); + } + return sb.toString(); + } + + @Override + public List getFontInfo() + { + return fontInfoList; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontCache.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontCache.java new file mode 100644 index 00000000000..114e95c1426 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontCache.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.lang.ref.SoftReference; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.fontbox.FontBoxFont; + +/** + * An in-memory cache for system fonts. This allows PDFBox to manage caching for a {@link FontProvider}. + * PDFBox is free to purge this cache at will. + * + * @author John Hewson + */ +public final class FontCache +{ + private final Map> cache = new ConcurrentHashMap<>(); + + /** + * Adds the given FontBox font to the cache. + */ + public void addFont(FontInfo info, FontBoxFont font) + { + cache.put(info, new SoftReference<>(font)); + } + + /** + * Returns the FontBox font associated with the given FontInfo. + */ + public FontBoxFont getFont(FontInfo info) + { + SoftReference reference = cache.get(info); + return reference != null ? reference.get() : null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontFormat.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontFormat.java new file mode 100644 index 00000000000..5c5705d96c9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontFormat.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +/** + * Font file format. + * + * @author John Hewson + */ +public enum FontFormat +{ + /** + * TrueType font. + */ + TTF, + + /** + * OpenType font. + */ + OTF, + + /** + * Type 1 (binary) font. + */ + PFB +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontInfo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontInfo.java new file mode 100644 index 00000000000..c228e18b4ea --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontInfo.java @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import org.apache.fontbox.FontBoxFont; + +/** + * Information about a font on the system. + * + * @author John Hewson + */ +public abstract class FontInfo +{ + /** + * Returns the PostScript name of the font. + */ + public abstract String getPostScriptName(); + + /** + * Returns the font's format. + */ + public abstract FontFormat getFormat(); + + /** + * Returns the CIDSystemInfo associated with the font, if any. + */ + public abstract CIDSystemInfo getCIDSystemInfo(); + + /** + * Returns a new FontBox font instance for the font. Implementors of this method must not + * cache the return value of this method unless doing so via the current {@link FontCache}. + */ + public abstract FontBoxFont getFont(); + + /** + * Returns the sFamilyClass field of the "OS/2" table, or -1. + */ + public abstract int getFamilyClass(); + + /** + * Returns the usWeightClass field of the "OS/2" table, or -1. + */ + public abstract int getWeightClass(); + + /** + * Returns the usWeightClass field as a Panose Weight. + */ + final int getWeightClassAsPanose() + { + int usWeightClass = getWeightClass(); + switch (usWeightClass) + { + case -1: return 0; + case 0: return 0; + case 100: return 2; + case 200: return 3; + case 300: return 4; + case 400: return 5; + case 500: return 6; + case 600: return 7; + case 700: return 8; + case 800: return 9; + case 900: return 10; + default: return 0; + } + } + + /** + * Returns the ulCodePageRange1 field of the "OS/2" table, or 0. + */ + public abstract int getCodePageRange1(); + + /** + * Returns the ulCodePageRange2 field of the "OS/2" table, or 0. + */ + public abstract int getCodePageRange2(); + + /** + * Returns the ulCodePageRange1 and ulCodePageRange1 field of the "OS/2" table, or 0. + */ + final long getCodePageRange() + { + long range1 = getCodePageRange1() & 0x00000000ffffffffL; + long range2 = getCodePageRange2() & 0x00000000ffffffffL; + return range2 << 32 | range1; + } + + /** + * Returns the macStyle field of the "head" table, or -1. + */ + public abstract int getMacStyle(); + + /** + * Returns the Panose classification of the font, if any. + */ + public abstract PDPanoseClassification getPanose(); + + // todo: 'post' table for Italic. Also: OS/2 fsSelection for italic/bold. + // todo: ulUnicodeRange too? + + @Override + public String toString() + { + return getPostScriptName() + " (" + getFormat() + + ", mac: 0x" + Integer.toHexString(getMacStyle()) + + ", os/2: 0x" + Integer.toHexString(getFamilyClass()) + + ", cid: " + getCIDSystemInfo() + ")"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java new file mode 100644 index 00000000000..8cf5139115a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.ttf.TrueTypeFont; + +/** + * Font mapper, locates non-embedded fonts. If you implement this then you're responsible for + * caching the fonts. SoftReference<FontBoxFont> is recommended. + * + * @author John Hewson + */ +public interface FontMapper +{ + /** + * Finds a TrueType font with the given PostScript name, or a suitable substitute, or null. + * + * @param fontDescriptor FontDescriptor + */ + FontMapping getTrueTypeFont(String baseFont, PDFontDescriptor fontDescriptor); + + /** + * Finds a font with the given PostScript name, or a suitable substitute, or null. This allows + * any font to be substituted with a PFB, TTF or OTF. + * + * @param fontDescriptor the FontDescriptor of the font to find + */ + FontMapping getFontBoxFont(String baseFont, PDFontDescriptor fontDescriptor); + + /** + * Finds a CFF CID-Keyed font with the given PostScript name, or a suitable substitute, or null. + * This method can also map CJK fonts via their CIDSystemInfo (ROS). + * + * @param fontDescriptor FontDescriptor + * @param cidSystemInfo the CID system info, e.g. "Adobe-Japan1", if any. + */ + CIDFontMapping getCIDFont(String baseFont, PDFontDescriptor fontDescriptor, + PDCIDSystemInfo cidSystemInfo); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapperImpl.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapperImpl.java new file mode 100644 index 00000000000..530d2845d7d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapperImpl.java @@ -0,0 +1,733 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.Set; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.ttf.OpenTypeFont; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.type1.Type1Font; + +/** + * Font mapper, locates non-embedded fonts via a pluggable FontProvider. + * + * @author John Hewson + */ +final class FontMapperImpl implements FontMapper +{ + private static final FontCache fontCache = new FontCache(); // todo: static cache isn't ideal + private FontProvider fontProvider; + private Map fontInfoByName; + private final TrueTypeFont lastResortFont; + + /** Map of PostScript name substitutes, in priority order. */ + private final Map> substitutes = new HashMap<>(); + + FontMapperImpl() + { + // substitutes for standard 14 fonts + substitutes.put("Courier", + Arrays.asList("CourierNew", "CourierNewPSMT", "LiberationMono", "NimbusMonL-Regu")); + substitutes.put("Courier-Bold", + Arrays.asList("CourierNewPS-BoldMT", "CourierNew-Bold", "LiberationMono-Bold", + "NimbusMonL-Bold")); + substitutes.put("Courier-Oblique", + Arrays.asList("CourierNewPS-ItalicMT","CourierNew-Italic", + "LiberationMono-Italic", "NimbusMonL-ReguObli")); + substitutes.put("Courier-BoldOblique", + Arrays.asList("CourierNewPS-BoldItalicMT","CourierNew-BoldItalic", + "LiberationMono-BoldItalic", "NimbusMonL-BoldObli")); + substitutes.put("Helvetica", + Arrays.asList("ArialMT", "Arial", "LiberationSans", "NimbusSanL-Regu")); + substitutes.put("Helvetica-Bold", + Arrays.asList("Arial-BoldMT", "Arial-Bold", "LiberationSans-Bold", + "NimbusSanL-Bold")); + substitutes.put("Helvetica-Oblique", + Arrays.asList("Arial-ItalicMT", "Arial-Italic", "Helvetica-Italic", + "LiberationSans-Italic", "NimbusSanL-ReguItal")); + substitutes.put("Helvetica-BoldOblique", + Arrays.asList("Arial-BoldItalicMT", "Helvetica-BoldItalic", + "LiberationSans-BoldItalic", "NimbusSanL-BoldItal")); + substitutes.put("Times-Roman", + Arrays.asList("TimesNewRomanPSMT", "TimesNewRoman", "TimesNewRomanPS", + "LiberationSerif", "NimbusRomNo9L-Regu")); + substitutes.put("Times-Bold", + Arrays.asList("TimesNewRomanPS-BoldMT", "TimesNewRomanPS-Bold", + "TimesNewRoman-Bold", "LiberationSerif-Bold", + "NimbusRomNo9L-Medi")); + substitutes.put("Times-Italic", + Arrays.asList("TimesNewRomanPS-ItalicMT", "TimesNewRomanPS-Italic", + "TimesNewRoman-Italic", "LiberationSerif-Italic", + "NimbusRomNo9L-ReguItal")); + substitutes.put("Times-BoldItalic", + Arrays.asList("TimesNewRomanPS-BoldItalicMT", "TimesNewRomanPS-BoldItalic", + "TimesNewRoman-BoldItalic", "LiberationSerif-BoldItalic", + "NimbusRomNo9L-MediItal")); + substitutes.put("Symbol", Arrays.asList("Symbol", "SymbolMT", "StandardSymL")); + substitutes.put("ZapfDingbats", Arrays.asList("ZapfDingbatsITC", "Dingbats", "MS-Gothic")); + + // Acrobat also uses alternative names for Standard 14 fonts, which we map to those above + // these include names such as "Arial" and "TimesNewRoman" + for (String baseName : Standard14Fonts.getNames()) + { + if (!substitutes.containsKey(baseName)) + { + String mappedName = Standard14Fonts.getMappedFontName(baseName); + substitutes.put(baseName, copySubstitutes(mappedName)); + } + } + + // ------------------------- + + try + { + String ttfName = "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf"; + InputStream ttfStream = FontMapper.class.getResourceAsStream(ttfName); + if (ttfStream == null) + { + throw new IOException("Error loading resource: " + ttfName); + } + TTFParser ttfParser = new TTFParser(); + lastResortFont = ttfParser.parse(ttfStream); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + // lazy thread safe singleton + private static class DefaultFontProvider + { + private static final FontProvider INSTANCE = new FileSystemFontProvider(fontCache); + } + + /** + * Sets the font service provider. + */ + public synchronized void setProvider(FontProvider fontProvider) + { + fontInfoByName = createFontInfoByName(fontProvider.getFontInfo()); + this.fontProvider = fontProvider; + } + + /** + * Returns the font service provider. Defaults to using FileSystemFontProvider. + */ + public synchronized FontProvider getProvider() + { + if (fontProvider == null) + { + setProvider(DefaultFontProvider.INSTANCE); + } + return fontProvider; + } + + /** + * Returns the font cache associated with this FontMapper. This method is needed by + * FontProvider subclasses. + */ + public FontCache getFontCache() + { + return fontCache; + } + + private Map createFontInfoByName(List fontInfoList) + { + Map map = new LinkedHashMap<>(); + for (FontInfo info : fontInfoList) + { + for (String name : getPostScriptNames(info.getPostScriptName())) + { + map.put(name, info); + } + } + return map; + } + + /** + * Gets alternative names, as seen in some PDFs, e.g. PDFBOX-142. + */ + private Set getPostScriptNames(String postScriptName) + { + Set names = new HashSet<>(); + + // built-in PostScript name + names.add(postScriptName); + + // remove hyphens (e.g. Arial-Black -> ArialBlack) + names.add(postScriptName.replaceAll("-", "")); + + return names; + } + + /** + * Copies a list of font substitutes, adding the original font at the start of the list. + */ + private List copySubstitutes(String postScriptName) + { + return new ArrayList<>(substitutes.get(postScriptName)); + } + + /** + * Adds a top-priority substitute for the given font. + * + * @param match PostScript name of the font to match + * @param replace PostScript name of the font to use as a replacement + */ + public void addSubstitute(String match, String replace) + { + if (!substitutes.containsKey(match)) + { + substitutes.put(match, new ArrayList()); + } + substitutes.get(match).add(replace); + } + + /** + * Returns the substitutes for a given font. + */ + private List getSubstitutes(String postScriptName) + { + List subs = substitutes.get(postScriptName.replaceAll(" ", "")); + if (subs != null) + { + return subs; + } + else + { + return Collections.emptyList(); + } + } + + /** + * Attempts to find a good fallback based on the font descriptor. + */ + private String getFallbackFontName(PDFontDescriptor fontDescriptor) + { + String fontName; + if (fontDescriptor != null) + { + // heuristic detection of bold + boolean isBold = false; + String name = fontDescriptor.getFontName(); + if (name != null) + { + String lower = fontDescriptor.getFontName().toLowerCase(); + isBold = lower.contains("bold") || + lower.contains("black") || + lower.contains("heavy"); + } + + // font descriptor flags should describe the style + if (fontDescriptor.isFixedPitch()) + { + fontName = "Courier"; + if (isBold && fontDescriptor.isItalic()) + { + fontName += "-BoldOblique"; + } + else if (isBold) + { + fontName += "-Bold"; + } + else if (fontDescriptor.isItalic()) + { + fontName += "-Oblique"; + } + } + else if (fontDescriptor.isSerif()) + { + fontName = "Times"; + if (isBold && fontDescriptor.isItalic()) + { + fontName += "-BoldItalic"; + } + else if (isBold) + { + fontName += "-Bold"; + } + else if (fontDescriptor.isItalic()) + { + fontName += "-Italic"; + } + else + { + fontName += "-Roman"; + } + } + else + { + fontName = "Helvetica"; + if (isBold && fontDescriptor.isItalic()) + { + fontName += "-BoldOblique"; + } + else if (isBold) + { + fontName += "-Bold"; + } + else if (fontDescriptor.isItalic()) + { + fontName += "-Oblique"; + } + } + } + else + { + // if there is no FontDescriptor then we just fall back to Times Roman + fontName = "Times-Roman"; + } + return fontName; + } + + /** + * Finds a TrueType font with the given PostScript name, or a suitable substitute, or null. + * + * @param fontDescriptor FontDescriptor + */ + @Override + public FontMapping getTrueTypeFont(String baseFont, + PDFontDescriptor fontDescriptor) + { + TrueTypeFont ttf = (TrueTypeFont)findFont(FontFormat.TTF, baseFont); + if (ttf != null) + { + return new FontMapping<>(ttf, false); + } + else + { + // fallback - todo: i.e. fuzzy match + String fontName = getFallbackFontName(fontDescriptor); + ttf = (TrueTypeFont) findFont(FontFormat.TTF, fontName); + if (ttf == null) + { + // we have to return something here as TTFs aren't strictly required on the system + ttf = lastResortFont; + } + return new FontMapping<>(ttf, true); + } + } + + /** + * Finds a font with the given PostScript name, or a suitable substitute, or null. This allows + * any font to be substituted with a PFB, TTF or OTF. + * + * @param fontDescriptor the FontDescriptor of the font to find + */ + @Override + public FontMapping getFontBoxFont(String baseFont, + PDFontDescriptor fontDescriptor) + { + FontBoxFont font = findFontBoxFont(baseFont); + if (font != null) + { + return new FontMapping<>(font, false); + } + else + { + // fallback - todo: i.e. fuzzy match + String fallbackName = getFallbackFontName(fontDescriptor); + font = findFontBoxFont(fallbackName); + if (font == null) + { + // we have to return something here as TTFs aren't strictly required on the system + font = lastResortFont; + } + return new FontMapping<>(font, true); + } + } + + /** + * Finds a font with the given PostScript name, or a suitable substitute, or null. + * + * @param postScriptName PostScript font name + */ + private FontBoxFont findFontBoxFont(String postScriptName) + { + Type1Font t1 = (Type1Font)findFont(FontFormat.PFB, postScriptName); + if (t1 != null) + { + return t1; + } + + TrueTypeFont ttf = (TrueTypeFont)findFont(FontFormat.TTF, postScriptName); + if (ttf != null) + { + return ttf; + } + + OpenTypeFont otf = (OpenTypeFont) findFont(FontFormat.OTF, postScriptName); + if (otf != null) + { + return otf; + } + + return null; + } + + /** + * Finds a font with the given PostScript name, or a suitable substitute, or null. + * + * @param postScriptName PostScript font name + */ + private FontBoxFont findFont(FontFormat format, String postScriptName) + { + // handle damaged PDFs, see PDFBOX-2884 + if (postScriptName == null) + { + return null; + } + + // make sure the font provider is initialized + if (fontProvider == null) + { + getProvider(); + } + + // first try to match the PostScript name + FontInfo info = getFont(format, postScriptName); + if (info != null) + { + return info.getFont(); + } + + // remove hyphens (e.g. Arial-Black -> ArialBlack) + info = getFont(format, postScriptName.replaceAll("-", "")); + if (info != null) + { + return info.getFont(); + } + + // then try named substitutes + for (String substituteName : getSubstitutes(postScriptName)) + { + info = getFont(format, substituteName); + if (info != null) + { + return info.getFont(); + } + } + + // then try converting Windows names e.g. (ArialNarrow,Bold) -> (ArialNarrow-Bold) + info = getFont(format, postScriptName.replaceAll(",", "-")); + if (info != null) + { + return info.getFont(); + } + + // try appending "-Regular", works for Wingdings on windows + info = getFont(format, postScriptName + "-Regular"); + if (info != null) + { + return info.getFont(); + } + // no matches + return null; + } + + /** + * Finds the named font with the given format. + */ + private FontInfo getFont(FontFormat format, String postScriptName) + { + // strip subset tag (happens when we substitute a corrupt embedded font, see PDFBOX-2642) + if (postScriptName.contains("+")) + { + postScriptName = postScriptName.substring(postScriptName.indexOf('+') + 1); + } + + // look up the PostScript name + FontInfo info = fontInfoByName.get(postScriptName); + if (info != null && info.getFormat() == format) + { + return info; + } + return null; + } + + /** + * Finds a CFF CID-Keyed font with the given PostScript name, or a suitable substitute, or null. + * This method can also map CJK fonts via their CIDSystemInfo (ROS). + * + * @param fontDescriptor FontDescriptor + * @param cidSystemInfo the CID system info, e.g. "Adobe-Japan1", if any. + */ + @Override + public CIDFontMapping getCIDFont(String baseFont, PDFontDescriptor fontDescriptor, + PDCIDSystemInfo cidSystemInfo) + { + // try name match or substitute with OTF + OpenTypeFont otf1 = (OpenTypeFont)findFont(FontFormat.OTF, baseFont); + if (otf1 != null) + { + return new CIDFontMapping(otf1, null, false); + } + + // try name match or substitute with TTF + TrueTypeFont ttf = (TrueTypeFont)findFont(FontFormat.TTF, baseFont); + if (ttf != null) + { + return new CIDFontMapping(null, ttf, false); + } + + if (cidSystemInfo != null) + { + // "In Acrobat 3.0.1 and later, Type 0 fonts that use a CMap whose CIDSystemInfo + // dictionary defines the Adobe-GB1, Adobe-CNS1 Adobe-Japan1, or Adobe-Korea1 character + // collection can also be substituted." - Adobe Supplement to the ISO 32000 + + String collection = cidSystemInfo.getRegistry() + "-" + cidSystemInfo.getOrdering(); + + if (collection.equals("Adobe-GB1") || collection.equals("Adobe-CNS1") || + collection.equals("Adobe-Japan1") || collection.equals("Adobe-Korea1")) + { + // try automatic substitutes via character collection + PriorityQueue queue = getFontMatches(fontDescriptor, cidSystemInfo); + FontMatch bestMatch = queue.poll(); + if (bestMatch != null) + { + FontBoxFont font = bestMatch.info.getFont(); + if (font instanceof OpenTypeFont) + { + return new CIDFontMapping((OpenTypeFont)font, null, true); + } + else if (font != null) + { + return new CIDFontMapping(null, font, true); + } + } + } + } + + // last-resort fallback + return new CIDFontMapping(null, lastResortFont, true); + } + + /** + * Returns a list of matching fonts, scored by suitability. Positive scores indicate matches + * for certain attributes, while negative scores indicate mismatches. Zero scores are neutral. + * + * @param fontDescriptor FontDescriptor, always present. + * @param cidSystemInfo Font's CIDSystemInfo, may be null. + */ + private PriorityQueue getFontMatches(PDFontDescriptor fontDescriptor, + PDCIDSystemInfo cidSystemInfo) + { + PriorityQueue queue = new PriorityQueue<>(20); + + for (FontInfo info : fontInfoByName.values()) + { + // filter by CIDSystemInfo, if given + if (cidSystemInfo != null && !isCharSetMatch(cidSystemInfo, info)) + { + continue; + } + + FontMatch match = new FontMatch(info); + + // Panose is the most reliable + if (fontDescriptor.getPanose() != null && info.getPanose() != null) + { + PDPanoseClassification panose = fontDescriptor.getPanose().getPanose(); + if (panose.getFamilyKind() == info.getPanose().getFamilyKind()) + { + if (panose.getFamilyKind() == 0 && + (info.getPostScriptName().toLowerCase().contains("barcode") || + info.getPostScriptName().startsWith("Code")) && + !probablyBarcodeFont(fontDescriptor)) + { + // PDFBOX-4268: ignore barcode font if we aren't searching for one. + continue; + } + // serifs + if (panose.getSerifStyle() == info.getPanose().getSerifStyle()) + { + // exact match + match.score += 2; + } + else if (panose.getSerifStyle() >= 2 && panose.getSerifStyle() <= 5 && + info.getPanose().getSerifStyle() >= 2 && + info.getPanose().getSerifStyle() <= 5) + { + // cove (serif) + match.score += 1; + } + else if (panose.getSerifStyle() >= 11 && panose.getSerifStyle() <= 13 && + info.getPanose().getSerifStyle() >= 11 && + info.getPanose().getSerifStyle() <= 13) + { + // sans-serif + match.score += 1; + } + else if (panose.getSerifStyle() != 0 && info.getPanose().getSerifStyle() != 0) + { + // mismatch + match.score -= 1; + } + + // weight + int weight = info.getPanose().getWeight(); + int weightClass = info.getWeightClassAsPanose(); + if (Math.abs(weight - weightClass) > 2) + { + // inconsistent data in system font, usWeightClass wins + weight = weightClass; + } + + if (panose.getWeight() == weight) + { + // exact match + match.score += 2; + } + else if (panose.getWeight() > 1 && weight > 1) + { + float dist = Math.abs(panose.getWeight() - weight); + match.score += 1 - dist * 0.5; + } + + // todo: italic + // ... + } + } + else if (fontDescriptor.getFontWeight() > 0 && info.getWeightClass() > 0) + { + // usWeightClass is pretty reliable + float dist = Math.abs(fontDescriptor.getFontWeight() - info.getWeightClass()); + match.score += 1 - (dist / 100) * 0.5; + } + // todo: italic + // ... + + queue.add(match); + } + return queue; + } + + private boolean probablyBarcodeFont(PDFontDescriptor fontDescriptor) + { + String ff = fontDescriptor.getFontFamily(); + if (ff == null) + { + ff = ""; + } + String fn = fontDescriptor.getFontName(); + if (fn == null) + { + fn = ""; + } + return ff.startsWith("Code") || ff.toLowerCase().contains("barcode") || + fn.startsWith("Code") || fn.toLowerCase().contains("barcode"); + } + + /** + * Returns true if the character set described by CIDSystemInfo is present in the given font. + * Only applies to Adobe-GB1, Adobe-CNS1, Adobe-Japan1, Adobe-Korea1, as per the PDF spec. + */ + private boolean isCharSetMatch(PDCIDSystemInfo cidSystemInfo, FontInfo info) + { + if (info.getCIDSystemInfo() != null) + { + return info.getCIDSystemInfo().getRegistry().equals(cidSystemInfo.getRegistry()) && + info.getCIDSystemInfo().getOrdering().equals(cidSystemInfo.getOrdering()); + } + else + { + long codePageRange = info.getCodePageRange(); + + long JIS_JAPAN = 1 << 17; + long CHINESE_SIMPLIFIED = 1 << 18; + long KOREAN_WANSUNG = 1 << 19; + long CHINESE_TRADITIONAL = 1 << 20; + long KOREAN_JOHAB = 1 << 21; + + if (cidSystemInfo.getOrdering().equals("GB1") && + (codePageRange & CHINESE_SIMPLIFIED) == CHINESE_SIMPLIFIED) + { + return true; + } + else if (cidSystemInfo.getOrdering().equals("CNS1") && + (codePageRange & CHINESE_TRADITIONAL) == CHINESE_TRADITIONAL) + { + return true; + } + else if (cidSystemInfo.getOrdering().equals("Japan1") && + (codePageRange & JIS_JAPAN) == JIS_JAPAN) + { + return true; + } + else + { + return cidSystemInfo.getOrdering().equals("Korea1") && + (codePageRange & KOREAN_WANSUNG) == KOREAN_WANSUNG || + (codePageRange & KOREAN_JOHAB) == KOREAN_JOHAB; + } + } + } + + /** + * A potential match for a font substitution. + */ + private static class FontMatch implements Comparable + { + double score; + final FontInfo info; + + FontMatch(FontInfo info) + { + this.info = info; + } + + @Override + public int compareTo(FontMatch match) + { + return Double.compare(match.score, this.score); + } + } + + /** + * For debugging. Prints all matches and returns the best match. + */ + private FontMatch printMatches(PriorityQueue queue) + { + FontMatch bestMatch = queue.peek(); + System.out.println("-------"); + while (!queue.isEmpty()) + { + FontMatch match = queue.poll(); + FontInfo info = match.info; + System.out.println(match.score + " | " + info.getMacStyle() + " " + + info.getFamilyClass() + " " + info.getPanose() + " " + + info.getCIDSystemInfo() + " " + info.getPostScriptName() + " " + + info.getFormat()); + } + System.out.println("-------"); + return bestMatch; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java new file mode 100644 index 00000000000..d75d6804104 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +/** + * FontMapper factory class. + * + * @author John Hewson + */ +public final class FontMappers +{ + private static FontMapper instance; + + private FontMappers() + { + } + + // lazy thread safe singleton + private static class DefaultFontMapper + { + private static final FontMapper INSTANCE = new FontMapperImpl(); + } + + /** + * Returns the singleton FontMapper instance. + */ + public static FontMapper instance() + { + if (instance == null) + { + instance = DefaultFontMapper.INSTANCE; + } + return instance; + } + + /** + * Sets the singleton FontMapper instance. + */ + public static synchronized void set(FontMapper fontMapper) + { + instance = fontMapper; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java new file mode 100644 index 00000000000..a7536a7f8b7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import org.apache.fontbox.FontBoxFont; + +/** + * A font mapping from a PDF font to a FontBox font. + * + * @author John Hewson + */ +public class FontMapping +{ + private final T font; + private final boolean isFallback; + + public FontMapping(T font, boolean isFallback) + { + this.font = font; + this.isFallback = isFallback; + } + + /** + * Returns the mapped, FontBox font. This is never null. + */ + public T getFont() + { + return font; + } + + /** + * Returns true if the mapped font is a fallback, i.e. a substitute based on basic font style, + * such as bold/italic, rather than font name. + */ + public boolean isFallback() + { + return isFallback; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontProvider.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontProvider.java new file mode 100644 index 00000000000..0c685182f24 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontProvider.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.util.List; + +/** + * External font service provider interface. + * + * @author John Hewson + */ +public abstract class FontProvider +{ + /** + * Returns a string containing debugging information. This will be written to the log if no + * suitable fonts are found and no fallback fonts are available. May be null. + */ + public abstract String toDebugString(); + + /** + * Returns a list of information about fonts on the system. + */ + public abstract List getFontInfo(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java new file mode 100644 index 00000000000..9fab519ff0f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java @@ -0,0 +1,409 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * A CIDFont. A CIDFont is a PDF object that contains information about a CIDFont program. Although + * its Type value is Font, a CIDFont is not actually a font. + * + *

    It is not usually necessary to use this class directly, prefer {@link PDType0Font}. + * + * @author Ben Litchfield + */ +public abstract class PDCIDFont implements COSObjectable, PDFontLike, PDVectorFont +{ + protected final PDType0Font parent; + + private Map widths; + private float defaultWidth; + private float averageWidth; + + private final Map verticalDisplacementY = new HashMap<>(); // w1y + private final Map positionVectors = new HashMap<>(); // v + private float[] dw2 = new float[] { 880, -1000 }; + + protected final COSDictionary dict; + private PDFontDescriptor fontDescriptor; + + /** + * Constructor. + * + * @param fontDictionary The font dictionary according to the PDF specification. + */ + PDCIDFont(COSDictionary fontDictionary, PDType0Font parent) throws IOException + { + this.dict = fontDictionary; + this.parent = parent; + readWidths(); + readVerticalDisplacements(); + } + + private void readWidths() + { + widths = new HashMap<>(); + COSBase wBase = dict.getDictionaryObject(COSName.W); + if (wBase instanceof COSArray) + { + COSArray wArray = (COSArray) wBase; + int size = wArray.size(); + int counter = 0; + while (counter < size) + { + COSNumber firstCode = (COSNumber) wArray.getObject(counter++); + COSBase next = wArray.getObject(counter++); + if (next instanceof COSArray) + { + COSArray array = (COSArray) next; + int startRange = firstCode.intValue(); + int arraySize = array.size(); + for (int i = 0; i < arraySize; i++) + { + COSNumber width = (COSNumber) array.getObject(i); + widths.put(startRange + i, width.floatValue()); + } + } + else + { + COSNumber secondCode = (COSNumber) next; + COSNumber rangeWidth = (COSNumber) wArray.getObject(counter++); + int startRange = firstCode.intValue(); + int endRange = secondCode.intValue(); + float width = rangeWidth.floatValue(); + for (int i = startRange; i <= endRange; i++) + { + widths.put(i, width); + } + } + } + } + } + + private void readVerticalDisplacements() + { + // default position vector and vertical displacement vector + COSBase dw2Base = dict.getDictionaryObject(COSName.DW2); + if (dw2Base instanceof COSArray) + { + COSArray dw2Array = (COSArray) dw2Base; + COSBase base0 = dw2Array.getObject(0); + COSBase base1 = dw2Array.getObject(1); + if (base0 instanceof COSNumber && base1 instanceof COSNumber) + { + dw2[0] = ((COSNumber) base0).floatValue(); + dw2[1] = ((COSNumber) base1).floatValue(); + } + } + + // vertical metrics for individual CIDs. + COSBase w2Base = dict.getDictionaryObject(COSName.W2); + if (w2Base instanceof COSArray) + { + COSArray w2Array = (COSArray) w2Base; + for (int i = 0; i < w2Array.size(); i++) + { + COSNumber c = (COSNumber) w2Array.getObject(i); + COSBase next = w2Array.getObject(++i); + if (next instanceof COSArray) + { + COSArray array = (COSArray)next; + for (int j = 0; j < array.size(); j++) + { + int cid = c.intValue() + j / 3; + COSNumber w1y = (COSNumber) array.getObject(j); + COSNumber v1x = (COSNumber) array.getObject(++j); + COSNumber v1y = (COSNumber) array.getObject(++j); + verticalDisplacementY.put(cid, w1y.floatValue()); + positionVectors.put(cid, new Vector(v1x.floatValue(), v1y.floatValue())); + } + } + else + { + int first = c.intValue(); + int last = ((COSNumber) next).intValue(); + COSNumber w1y = (COSNumber) w2Array.getObject(++i); + COSNumber v1x = (COSNumber) w2Array.getObject(++i); + COSNumber v1y = (COSNumber) w2Array.getObject(++i); + for (int cid = first; cid <= last; cid++) + { + verticalDisplacementY.put(cid, w1y.floatValue()); + positionVectors.put(cid, new Vector(v1x.floatValue(), v1y.floatValue())); + } + } + } + } + } + + @Override + public COSDictionary getCOSObject() + { + return dict; + } + + /** + * The PostScript name of the font. + * + * @return The postscript name of the font. + */ + public String getBaseFont() + { + return dict.getNameAsString(COSName.BASE_FONT); + } + + @Override + public String getName() + { + return getBaseFont(); + } + + @Override + public PDFontDescriptor getFontDescriptor() + { + if (fontDescriptor == null) + { + COSDictionary fd = (COSDictionary) dict.getDictionaryObject(COSName.FONT_DESC); + if (fd != null) + { + fontDescriptor = new PDFontDescriptor(fd); + } + } + return fontDescriptor; + } + + @Override + public abstract Matrix getFontMatrix(); + + /** + * Returns the Type 0 font which is the parent of this font. + * + * @return parent Type 0 font + */ + public final PDType0Font getParent() + { + return parent; + } + + @Override + public abstract BoundingBox getBoundingBox() throws IOException; + + /** + * This will get the default width. The default value for the default width is 1000. + * + * @return The default width for the glyphs in this font. + */ + private float getDefaultWidth() + { + if (Float.compare(defaultWidth, 0) == 0) + { + COSBase base = dict.getDictionaryObject(COSName.DW); + if (base instanceof COSNumber) + { + defaultWidth = ((COSNumber) base).floatValue(); + } + else + { + defaultWidth = 1000; + } + } + return defaultWidth; + } + + /** + * Returns the default position vector (v). + * + * @param cid CID + */ + private Vector getDefaultPositionVector(int cid) + { + return new Vector(getWidthForCID(cid) / 2, dw2[0]); + } + + private float getWidthForCID(int cid) + { + Float width = widths.get(cid); + if (width == null) + { + width = getDefaultWidth(); + } + return width; + } + + @Override + public boolean hasExplicitWidth(int code) throws IOException + { + return widths.get(codeToCID(code)) != null; + } + + @Override + public Vector getPositionVector(int code) + { + int cid = codeToCID(code); + Vector v = positionVectors.get(cid); + if (v == null) + { + v = getDefaultPositionVector(cid); + } + return v; + } + + /** + * Returns the y-component of the vertical displacement vector (w1). + * + * @param code character code + * @return w1y + */ + public float getVerticalDisplacementVectorY(int code) + { + int cid = codeToCID(code); + Float w1y = verticalDisplacementY.get(cid); + if (w1y == null) + { + w1y = dw2[1]; + } + return w1y; + } + + @Override + public abstract float getHeight(int code) throws IOException; + + @Override + public float getWidth(int code) throws IOException + { + // these widths are supposed to be consistent with the actual widths given in the CIDFont + // program, but PDFBOX-563 shows that when they are not, Acrobat overrides the embedded + // font widths with the widths given in the font dictionary + return getWidthForCID(codeToCID(code)); + } + + @Override + public abstract float getWidthFromFont(int code) throws IOException; + + @Override + public abstract boolean isEmbedded(); + + @Override + // todo: this method is highly suspicious, the average glyph width is not usually a good metric + public float getAverageFontWidth() + { + if (Float.compare(averageWidth, 0) == 0) + { + float totalWidths = 0.0f; + int characterCount = 0; + if (widths != null) + { + for (Float width : widths.values()) + { + if (width > 0) + { + totalWidths += width; + ++characterCount; + } + } + } + averageWidth = totalWidths / characterCount; + if (averageWidth <= 0 || Float.isNaN(averageWidth)) + { + averageWidth = getDefaultWidth(); + } + } + return averageWidth; + } + + /** + * Returns the CIDSystemInfo, or null if it is missing (which isn't allowed but could happen). + */ + public PDCIDSystemInfo getCIDSystemInfo() + { + COSBase base = dict.getDictionaryObject(COSName.CIDSYSTEMINFO); + if (base instanceof COSDictionary) + { + return new PDCIDSystemInfo((COSDictionary) base); + } + return null; + } + + /** + * Returns the CID for the given character code. If not found then CID 0 is returned. + * + * @param code character code + * @return CID + */ + public abstract int codeToCID(int code); + + /** + * Returns the GID for the given character code. + * + * @param code character code + * @return GID + * @throws java.io.IOException + */ + public abstract int codeToGID(int code) throws IOException; + + public abstract byte[] encodeGlyphId(int glyphId); + + /** + * Encodes the given Unicode code point for use in a PDF content stream. + * Content streams use a multi-byte encoding with 1 to 4 bytes. + * + *

    This method is called when embedding text in PDFs and when filling in fields. + * + * @param unicode Unicode code point. + * @return Array of 1 to 4 PDF content stream bytes. + * @throws IOException If the text could not be encoded. + */ + protected abstract byte[] encode(int unicode) throws IOException; + + final int[] readCIDToGIDMap() throws IOException + { + int[] cid2gid = null; + COSBase map = dict.getDictionaryObject(COSName.CID_TO_GID_MAP); + if (map instanceof COSStream) + { + COSStream stream = (COSStream) map; + + InputStream is = stream.createInputStream(); + byte[] mapAsBytes = IOUtils.toByteArray(is); + IOUtils.closeQuietly(is); + int numberOfInts = mapAsBytes.length / 2; + cid2gid = new int[numberOfInts]; + int offset = 0; + for (int index = 0; index < numberOfInts; index++) + { + int gid = (mapAsBytes[offset] & 0xff) << 8 | mapAsBytes[offset + 1] & 0xff; + cid2gid[index] = gid; + offset += 2; + } + } + return cid2gid; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java new file mode 100644 index 00000000000..c4e224be3e4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java @@ -0,0 +1,486 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.cff.CFFCIDFont; +import org.apache.fontbox.cff.CFFFont; +import org.apache.fontbox.cff.CFFParser; +import org.apache.fontbox.cff.CFFType1Font; +import org.apache.fontbox.cff.Type2CharString; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.util.Matrix; + + +import static org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint; + +/** + * Type 0 CIDFont (CFF). + * + * @author Ben Litchfield + * @author John Hewson + */ +public class PDCIDFontType0 extends PDCIDFont +{ + private static final Log LOG = LogFactory.getLog(PDCIDFontType0.class); + + private final CFFCIDFont cidFont; // Top DICT that uses CIDFont operators + private final FontBoxFont t1Font; // Top DICT that does not use CIDFont operators + + private final Map glyphHeights = new HashMap<>(); + private final boolean isEmbedded; + private final boolean isDamaged; + private final AffineTransform fontMatrixTransform; + private Float avgWidth = null; + private Matrix fontMatrix; + private BoundingBox fontBBox; + private int[] cid2gid = null; + + /** + * Constructor. + * + * @param fontDictionary The font dictionary according to the PDF specification. + * @param parent The parent font. + */ + public PDCIDFontType0(COSDictionary fontDictionary, PDType0Font parent) throws IOException + { + super(fontDictionary, parent); + + PDFontDescriptor fd = getFontDescriptor(); + byte[] bytes = null; + if (fd != null) + { + PDStream ff3Stream = fd.getFontFile3(); + if (ff3Stream != null) + { + bytes = IOUtils.toByteArray(ff3Stream.createInputStream()); + } + } + + boolean fontIsDamaged = false; + CFFFont cffFont = null; + if (bytes != null && bytes.length > 0 && (bytes[0] & 0xff) == '%') + { + // PDFBOX-2642 contains a corrupt PFB font instead of a CFF + LOG.warn("Found PFB but expected embedded CFF font " + fd.getFontName()); + fontIsDamaged = true; + } + else if (bytes != null) + { + CFFParser cffParser = new CFFParser(); + try + { + cffFont = cffParser.parse(bytes, new ByteSource()).get(0); + } + catch (IOException e) + { + LOG.error("Can't read the embedded CFF font " + fd.getFontName(), e); + fontIsDamaged = true; + } + } + + if (cffFont != null) + { + // embedded + if (cffFont instanceof CFFCIDFont) + { + cidFont = (CFFCIDFont)cffFont; + t1Font = null; + } + else + { + cidFont = null; + t1Font = cffFont; + } + cid2gid = readCIDToGIDMap(); + isEmbedded = true; + isDamaged = false; + } + else + { + // find font or substitute + CIDFontMapping mapping = FontMappers.instance() + .getCIDFont(getBaseFont(), getFontDescriptor(), + getCIDSystemInfo()); + FontBoxFont font; + if (mapping.isCIDFont()) + { + cffFont = mapping.getFont().getCFF().getFont(); + if (cffFont instanceof CFFCIDFont) + { + cidFont = (CFFCIDFont) cffFont; + t1Font = null; + font = cidFont; + } + else + { + // PDFBOX-3515: OpenType fonts are loaded as CFFType1Font + CFFType1Font f = (CFFType1Font) cffFont; + cidFont = null; + t1Font = f; + font = f; + } + } + else + { + cidFont = null; + t1Font = mapping.getTrueTypeFont(); + font = t1Font; + } + + if (mapping.isFallback()) + { + LOG.warn("Using fallback " + font.getName() + " for CID-keyed font " + + getBaseFont()); + } + isEmbedded = false; + isDamaged = fontIsDamaged; + } + fontMatrixTransform = getFontMatrix().createAffineTransform(); + fontMatrixTransform.scale(1000, 1000); + } + + @Override + public final Matrix getFontMatrix() + { + if (fontMatrix == null) + { + List numbers; + if (cidFont != null) + { + numbers = cidFont.getFontMatrix(); + } + else + { + try + { + numbers = t1Font.getFontMatrix(); + } + catch (IOException e) + { + LOG.debug("Couldn't get font matrix - returning default value", e); + return new Matrix(0.001f, 0, 0, 0.001f, 0, 0); + } + } + + if (numbers != null && numbers.size() == 6) + { + fontMatrix = new Matrix(numbers.get(0).floatValue(), numbers.get(1).floatValue(), + numbers.get(2).floatValue(), numbers.get(3).floatValue(), + numbers.get(4).floatValue(), numbers.get(5).floatValue()); + } + else + { + fontMatrix = new Matrix(0.001f, 0, 0, 0.001f, 0, 0); + } + } + return fontMatrix; + } + + @Override + public BoundingBox getBoundingBox() + { + if (fontBBox == null) + { + fontBBox = generateBoundingBox(); + } + return fontBBox; + } + + private BoundingBox generateBoundingBox() + { + if (getFontDescriptor() != null) { + PDRectangle bbox = getFontDescriptor().getFontBoundingBox(); + if (bbox != null && (Float.compare(bbox.getLowerLeftX(),0) != 0 || + Float.compare(bbox.getLowerLeftY(),0) != 0 || + Float.compare(bbox.getUpperRightX(),0) != 0 || + Float.compare(bbox.getUpperRightY(),0) != 0)) + { + return new BoundingBox(bbox.getLowerLeftX(), bbox.getLowerLeftY(), + bbox.getUpperRightX(), bbox.getUpperRightY()); + } + } + if (cidFont != null) + { + return cidFont.getFontBBox(); + } + else + { + try + { + return t1Font.getFontBBox(); + } + catch (IOException e) + { + LOG.debug("Couldn't get font bounding box - returning default value", e); + return new BoundingBox(); + } + } + } + + /** + * Returns the embedded CFF CIDFont, or null if the substitute is not a CFF font. + */ + public CFFFont getCFFFont() + { + if (cidFont != null) + { + return cidFont; + } + else if (t1Font instanceof CFFType1Font) + { + return (CFFType1Font)t1Font; + } + else + { + return null; + } + } + + /** + * Returns the embedded or substituted font. + */ + public FontBoxFont getFontBoxFont() + { + if (cidFont != null) + { + return cidFont; + } + else + { + return t1Font; + } + } + + /** + * Returns the Type 2 charstring for the given CID, or null if the substituted font does not + * contain Type 2 charstrings. + * + * @param cid CID + * @throws IOException if the charstring could not be read + */ + public Type2CharString getType2CharString(int cid) throws IOException + { + if (cidFont != null) + { + return cidFont.getType2CharString(cid); + } + else if (t1Font instanceof CFFType1Font) + { + return ((CFFType1Font)t1Font).getType2CharString(cid); + } + else + { + return null; + } + } + + /** + * Returns the name of the glyph with the given character code. This is done by looking up the + * code in the parent font's ToUnicode map and generating a glyph name from that. + */ + private String getGlyphName(int code) throws IOException + { + String unicodes = parent.toUnicode(code); + if (unicodes == null) + { + return ".notdef"; + } + return getUniNameOfCodePoint(unicodes.codePointAt(0)); + } + + @Override + public GeneralPath getPath(int code) throws IOException + { + int cid = codeToCID(code); + if (cid2gid != null && isEmbedded) + { + // PDFBOX-4093: despite being a type 0 font, there is a CIDToGIDMap + cid = cid2gid[cid]; + } + Type2CharString charstring = getType2CharString(cid); + if (charstring != null) + { + return charstring.getPath(); + } + else if (isEmbedded && t1Font instanceof CFFType1Font) + { + return ((CFFType1Font)t1Font).getType2CharString(cid).getPath(); + } + else + { + return t1Font.getPath(getGlyphName(code)); + } + } + + @Override + public GeneralPath getNormalizedPath(int code) throws IOException + { + return getPath(code); + } + + @Override + public boolean hasGlyph(int code) throws IOException + { + int cid = codeToCID(code); + Type2CharString charstring = getType2CharString(cid); + if (charstring != null) + { + return charstring.getGID() != 0; + } + else if (isEmbedded && t1Font instanceof CFFType1Font) + { + return ((CFFType1Font)t1Font).getType2CharString(cid).getGID() != 0; + } + else + { + return t1Font.hasGlyph(getGlyphName(code)); + } + } + + /** + * Returns the CID for the given character code. If not found then CID 0 is returned. + * + * @param code character code + * @return CID + */ + @Override + public int codeToCID(int code) + { + return parent.getCMap().toCID(code); + } + + @Override + public int codeToGID(int code) + { + int cid = codeToCID(code); + if (cidFont != null) + { + // The CIDs shall be used to determine the GID value for the glyph procedure using the + // charset table in the CFF program + return cidFont.getCharset().getGIDForCID(cid); + } + else + { + // The CIDs shall be used directly as GID values + return cid; + } + } + + @Override + public byte[] encode(int unicode) + { + // todo: we can use a known character collection CMap for a CIDFont + // and an Encoding for Type 1-equivalent + throw new UnsupportedOperationException(); + } + + @Override + public byte[] encodeGlyphId(int glyphId) + { + throw new UnsupportedOperationException(); + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + int cid = codeToCID(code); + float width; + if (cidFont != null) + { + width = getType2CharString(cid).getWidth(); + } + else if (isEmbedded && t1Font instanceof CFFType1Font) + { + width = ((CFFType1Font)t1Font).getType2CharString(cid).getWidth(); + } + else + { + width = t1Font.getWidth(getGlyphName(code)); + } + + Point2D p = new Point2D.Float(width, 0); + fontMatrixTransform.transform(p, p); + return (float)p.getX(); + } + + @Override + public boolean isEmbedded() + { + return isEmbedded; + } + + @Override + public boolean isDamaged() + { + return isDamaged; + } + + @Override + public float getHeight(int code) throws IOException + { + int cid = codeToCID(code); + + float height = 0; + if (!glyphHeights.containsKey(cid)) + { + height = (float) getType2CharString(cid).getBounds().getHeight(); + glyphHeights.put(cid, height); + } + return height; + } + + @Override + public float getAverageFontWidth() + { + if (avgWidth == null) + { + avgWidth = getAverageCharacterWidth(); + } + return avgWidth; + } + + // todo: this is a replacement for FontMetrics method + private float getAverageCharacterWidth() + { + // todo: not implemented, highly suspect + return 500; + } + + private class ByteSource implements CFFParser.ByteSource + { + @Override + public byte[] getBytes() throws IOException + { + PDStream ff3Stream = getFontDescriptor().getFontFile3(); + return IOUtils.toByteArray(ff3Stream.createInputStream()); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java new file mode 100644 index 00000000000..169280d6e08 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java @@ -0,0 +1,454 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.cff.Type2CharString; +import org.apache.fontbox.cmap.CMap; +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.GlyphData; +import org.apache.fontbox.ttf.OTFParser; +import org.apache.fontbox.ttf.OpenTypeFont; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.util.Matrix; + +/** + * Type 2 CIDFont (TrueType). + * + * @author Ben Litchfield + */ +public class PDCIDFontType2 extends PDCIDFont +{ + private static final Log LOG = LogFactory.getLog(PDCIDFontType2.class); + + private final TrueTypeFont ttf; + private final int[] cid2gid; + private final boolean isEmbedded; + private final boolean isDamaged; + private final CmapLookup cmap; // may be null + private Matrix fontMatrix; + private BoundingBox fontBBox; + + /** + * Constructor. + * + * @param fontDictionary The font dictionary according to the PDF specification. + * @param parent The parent font. + * @throws IOException + */ + public PDCIDFontType2(COSDictionary fontDictionary, PDType0Font parent) throws IOException + { + this(fontDictionary, parent, null); + } + + /** + * Constructor. + * + * @param fontDictionary The font dictionary according to the PDF specification. + * @param parent The parent font. + * @param trueTypeFont The true type font used to create the parent font + * @throws IOException + */ + public PDCIDFontType2(COSDictionary fontDictionary, PDType0Font parent, TrueTypeFont trueTypeFont) throws IOException + { + super(fontDictionary, parent); + + PDFontDescriptor fd = getFontDescriptor(); + if (trueTypeFont != null) + { + ttf = trueTypeFont; + isEmbedded = true; + isDamaged = false; + } + else + { + boolean fontIsDamaged = false; + TrueTypeFont ttfFont = null; + + PDStream stream = null; + if (fd != null) + { + stream = fd.getFontFile2(); + if (stream == null) + { + stream = fd.getFontFile3(); + } + if (stream == null) + { + // Acrobat looks in FontFile too, even though it is not in the spec, see PDFBOX-2599 + stream = fd.getFontFile(); + } + } + if (stream != null) + { + try + { + // embedded OTF or TTF + OTFParser otfParser = new OTFParser(true); + OpenTypeFont otf = otfParser.parse(stream.createInputStream()); + ttfFont = otf; + + if (otf.isPostScript()) + { + // PDFBOX-3344 contains PostScript outlines instead of TrueType + fontIsDamaged = true; + LOG.warn("Found CFF/OTF but expected embedded TTF font " + fd.getFontName()); + } + + if (otf.hasLayoutTables()) + { + LOG.info("OpenType Layout tables used in font " + getBaseFont() + + " are not implemented in PDFBox and will be ignored"); + } + } + catch (NullPointerException | IOException e) + { + // NPE due to TTF parser being buggy + fontIsDamaged = true; + LOG.warn("Could not read embedded OTF for font " + getBaseFont(), e); + } + } + isEmbedded = ttfFont != null; + isDamaged = fontIsDamaged; + + if (ttfFont == null) + { + ttfFont = findFontOrSubstitute(); + } + ttf = ttfFont; + } + cmap = ttf.getUnicodeCmapLookup(false); + cid2gid = readCIDToGIDMap(); + } + + private TrueTypeFont findFontOrSubstitute() throws IOException + { + TrueTypeFont ttfFont; + + CIDFontMapping mapping = FontMappers.instance() + .getCIDFont(getBaseFont(), getFontDescriptor(), + getCIDSystemInfo()); + if (mapping.isCIDFont()) + { + ttfFont = mapping.getFont(); + } + else + { + ttfFont = (TrueTypeFont)mapping.getTrueTypeFont(); + } + if (mapping.isFallback()) + { + LOG.warn("Using fallback font " + ttfFont.getName() + " for CID-keyed TrueType font " + getBaseFont()); + } + return ttfFont; + } + + @Override + public Matrix getFontMatrix() + { + if (fontMatrix == null) + { + // 1000 upem, this is not strictly true + fontMatrix = new Matrix(0.001f, 0, 0, 0.001f, 0, 0); + } + return fontMatrix; + } + + @Override + public BoundingBox getBoundingBox() throws IOException + { + if (fontBBox == null) + { + fontBBox = generateBoundingBox(); + } + return fontBBox; + } + + private BoundingBox generateBoundingBox() throws IOException + { + if (getFontDescriptor() != null) + { + PDRectangle bbox = getFontDescriptor().getFontBoundingBox(); + if (bbox != null && + (Float.compare(bbox.getLowerLeftX(), 0) != 0 || + Float.compare(bbox.getLowerLeftY(), 0) != 0 || + Float.compare(bbox.getUpperRightX(), 0) != 0 || + Float.compare(bbox.getUpperRightY(), 0) != 0)) + { + return new BoundingBox(bbox.getLowerLeftX(), bbox.getLowerLeftY(), + bbox.getUpperRightX(), bbox.getUpperRightY()); + } + } + return ttf.getFontBBox(); + } + + @Override + public int codeToCID(int code) + { + CMap cMap = parent.getCMap(); + + // Acrobat allows bad PDFs to use Unicode CMaps here instead of CID CMaps, see PDFBOX-1283 + if (!cMap.hasCIDMappings() && cMap.hasUnicodeMappings()) + { + return cMap.toUnicode(code).codePointAt(0); // actually: code -> CID + } + + return cMap.toCID(code); + } + + /** + * Returns the GID for the given character code. + * + * @param code character code + * @return GID + * @throws IOException + */ + @Override + public int codeToGID(int code) throws IOException + { + if (!isEmbedded) + { + // The conforming reader shall select glyphs by translating characters from the + // encoding specified by the predefined CMap to one of the encodings in the TrueType + // font's 'cmap' table. The means by which this is accomplished are implementation- + // dependent. + // omit the CID2GID mapping if the embedded font is replaced by an external font + if (cid2gid != null && !isDamaged) + { + // Acrobat allows non-embedded GIDs - todo: can we find a test PDF for this? + LOG.warn("Using non-embedded GIDs in font " + getName()); + int cid = codeToCID(code); + return cid2gid[cid]; + } + else + { + // fallback to the ToUnicode CMap, test with PDFBOX-1422 and PDFBOX-2560 + String unicode = parent.toUnicode(code); + if (unicode == null) + { + LOG.warn("Failed to find a character mapping for " + code + " in " + getName()); + // Acrobat is willing to use the CID as a GID, even when the font isn't embedded + // see PDFBOX-2599 + return codeToCID(code); + } + else if (unicode.length() > 1) + { + LOG.warn("Trying to map multi-byte character using 'cmap', result will be poor"); + } + + // a non-embedded font always has a cmap (otherwise FontMapper won't load it) + return cmap.getGlyphId(unicode.codePointAt(0)); + } + } + else + { + // If the TrueType font program is embedded, the Type 2 CIDFont dictionary shall contain + // a CIDToGIDMap entry that maps CIDs to the glyph indices for the appropriate glyph + // descriptions in that font program. + + int cid = codeToCID(code); + if (cid2gid != null) + { + // use CIDToGIDMap + if (cid < cid2gid.length) + { + return cid2gid[cid]; + } + else + { + return 0; + } + } + else + { + // "Identity" is the default CIDToGIDMap + if (cid < ttf.getNumberOfGlyphs()) + { + return cid; + } + else + { + // out of range CIDs map to GID 0 + return 0; + } + } + } + } + + @Override + public float getHeight(int code) throws IOException + { + // todo: really we want the BBox, (for text extraction:) + return (ttf.getHorizontalHeader().getAscender() + -ttf.getHorizontalHeader().getDescender()) + / ttf.getUnitsPerEm(); // todo: shouldn't this be the yMax/yMin? + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + int gid = codeToGID(code); + int width = ttf.getAdvanceWidth(gid); + int unitsPerEM = ttf.getUnitsPerEm(); + if (unitsPerEM != 1000) + { + width *= 1000f / unitsPerEM; + } + return width; + } + + @Override + public byte[] encode(int unicode) + { + int cid = -1; + if (isEmbedded) + { + // embedded fonts always use CIDToGIDMap, with Identity as the default + if (parent.getCMap().getName().startsWith("Identity-")) + { + if (cmap != null) + { + cid = cmap.getGlyphId(unicode); + } + } + else + { + // if the CMap is predefined then there will be a UCS-2 CMap + if (parent.getCMapUCS2() != null) + { + cid = parent.getCMapUCS2().toCID(unicode); + } + } + + // otherwise we require an explicit ToUnicode CMap + if (cid == -1) + { + //TODO: invert the ToUnicode CMap? + // see also PDFBOX-4233 + cid = 0; + } + } + else + { + // a non-embedded font always has a cmap (otherwise it we wouldn't load it) + cid = cmap.getGlyphId(unicode); + } + + if (cid == 0) + { + throw new IllegalArgumentException( + String.format("No glyph for U+%04X in font %s", unicode, getName())); + } + + return encodeGlyphId(cid); + } + + @Override + public byte[] encodeGlyphId(int glyphId) + { + // CID is always 2-bytes (16-bit) for TrueType + return new byte[] { (byte)(glyphId >> 8 & 0xff), (byte)(glyphId & 0xff) }; + } + + @Override + public boolean isEmbedded() + { + return isEmbedded; + } + + @Override + public boolean isDamaged() + { + return isDamaged; + } + + /** + * Returns the embedded or substituted TrueType font. May be an OpenType font if the font is + * not embedded. + */ + public TrueTypeFont getTrueTypeFont() + { + return ttf; + } + + @Override + public GeneralPath getPath(int code) throws IOException + { + if (ttf instanceof OpenTypeFont && ((OpenTypeFont)ttf).isPostScript()) + { + // we're not supposed to have CFF fonts inside PDCIDFontType2, but if we do, + // then we treat their CIDs as GIDs, see PDFBOX-3344 + int cid = codeToGID(code); + Type2CharString charstring = ((OpenTypeFont)ttf).getCFF().getFont().getType2CharString(cid); + return charstring.getPath(); + } + else + { + int gid = codeToGID(code); + GlyphData glyph = ttf.getGlyph().getGlyph(gid); + if (glyph != null) + { + return glyph.getPath(); + } + return new GeneralPath(); + } + } + + @Override + public GeneralPath getNormalizedPath(int code) throws IOException + { + boolean hasScaling = ttf.getUnitsPerEm() != 1000; + float scale = 1000f / ttf.getUnitsPerEm(); + int gid = codeToGID(code); + + GeneralPath path = getPath(code); + + // Acrobat only draws GID 0 for embedded CIDFonts, see PDFBOX-2372 + if (gid == 0 && !isEmbedded()) + { + path = null; + } + + if (path == null) + { + // empty glyph (e.g. space, newline) + return new GeneralPath(); + } + else + { + if (hasScaling) + { + path.transform(AffineTransform.getScaleInstance(scale, scale)); + } + return path; + } + } + + @Override + public boolean hasGlyph(int code) throws IOException + { + return codeToGID(code) != 0; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java new file mode 100644 index 00000000000..d29cf64357a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java @@ -0,0 +1,679 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.ttf.GlyphData; +import org.apache.fontbox.ttf.GlyphTable; +import org.apache.fontbox.ttf.HorizontalMetricsTable; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.ttf.VerticalHeaderTable; +import org.apache.fontbox.ttf.VerticalMetricsTable; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * Embedded PDCIDFontType2 builder. Helper class to populate a PDCIDFontType2 and its parent + * PDType0Font from a TTF. + * + * @author Keiji Suzuki + * @author John Hewson + */ +final class PDCIDFontType2Embedder extends TrueTypeEmbedder +{ + + private static final Log LOG = LogFactory.getLog(PDCIDFontType2Embedder.class); + + private final PDDocument document; + private final PDType0Font parent; + private final COSDictionary dict; + private final COSDictionary cidFont; + private final boolean vertical; + + /** + * Creates a new TrueType font embedder for the given TTF as a PDCIDFontType2. + * + * @param document parent document + * @param dict font dictionary + * @param ttf True Type Font + * @param parent parent Type 0 font + * @throws IOException if the TTF could not be read + */ + PDCIDFontType2Embedder(PDDocument document, COSDictionary dict, TrueTypeFont ttf, + boolean embedSubset, PDType0Font parent, boolean vertical) throws IOException + { + super(document, dict, ttf, embedSubset); + this.document = document; + this.dict = dict; + this.parent = parent; + this.vertical = vertical; + + // parent Type 0 font + dict.setItem(COSName.SUBTYPE, COSName.TYPE0); + dict.setName(COSName.BASE_FONT, fontDescriptor.getFontName()); + dict.setItem(COSName.ENCODING, vertical ? COSName.IDENTITY_V : COSName.IDENTITY_H); // CID = GID + + // descendant CIDFont + cidFont = createCIDFont(); + COSArray descendantFonts = new COSArray(); + descendantFonts.add(cidFont); + dict.setItem(COSName.DESCENDANT_FONTS, descendantFonts); + + if (!embedSubset) + { + // build GID -> Unicode map + buildToUnicodeCMap(null); + } + } + + /** + * Rebuild a font subset. + */ + @Override + protected void buildSubset(InputStream ttfSubset, String tag, Map gidToCid) + throws IOException + { + // build CID2GIDMap, because the content stream has been written with the old GIDs + Map cidToGid = new HashMap<>(gidToCid.size()); + for (Map.Entry entry : gidToCid.entrySet()) + { + int newGID = entry.getKey(); + int oldGID = entry.getValue(); + cidToGid.put(oldGID, newGID); + } + // build unicode mapping before subsetting as the subsetted font won't have a cmap + buildToUnicodeCMap(gidToCid); + // build vertical metrics before subsetting as the subsetted font won't have vhea, vmtx + if (vertical) + { + buildVerticalMetrics(cidToGid); + } + // rebuild the relevant part of the font + buildFontFile2(ttfSubset); + addNameTag(tag); + buildWidths(cidToGid); + buildCIDToGIDMap(cidToGid); + buildCIDSet(cidToGid); + } + + private void buildToUnicodeCMap(Map newGIDToOldCID) throws IOException + { + ToUnicodeWriter toUniWriter = new ToUnicodeWriter(); + boolean hasSurrogates = false; + for (int gid = 1, max = ttf.getMaximumProfile().getNumGlyphs(); gid <= max; gid++) + { + // optional CID2GIDMap for subsetting + int cid; + if (newGIDToOldCID != null) + { + if (!newGIDToOldCID.containsKey(gid)) + { + continue; + } + else + { + cid = newGIDToOldCID.get(gid); + } + } + else + { + cid = gid; + } + + // skip composite glyph components that have no code point + List codes = cmapLookup.getCharCodes(cid); // old GID -> Unicode + if (codes != null) + { + // use the first entry even for ambiguous mappings + int codePoint = codes.get(0); + if (codePoint > 0xFFFF) + { + hasSurrogates = true; + } + toUniWriter.add(cid, new String(new int[]{ codePoint }, 0, 1)); + } + } + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + toUniWriter.writeTo(out); + InputStream cMapStream = new ByteArrayInputStream(out.toByteArray()); + + PDStream stream = new PDStream(document, cMapStream, COSName.FLATE_DECODE); + + // surrogate code points, requires PDF 1.5 + if (hasSurrogates) + { + float version = document.getVersion(); + if (version < 1.5) + { + document.setVersion(1.5f); + } + } + + dict.setItem(COSName.TO_UNICODE, stream); + } + + private COSDictionary toCIDSystemInfo(String registry, String ordering, int supplement) + { + COSDictionary info = new COSDictionary(); + info.setString(COSName.REGISTRY, registry); + info.setString(COSName.ORDERING, ordering); + info.setInt(COSName.SUPPLEMENT, supplement); + return info; + } + + private COSDictionary createCIDFont() throws IOException + { + COSDictionary cidFont = new COSDictionary(); + + // Type, Subtype + cidFont.setItem(COSName.TYPE, COSName.FONT); + cidFont.setItem(COSName.SUBTYPE, COSName.CID_FONT_TYPE2); + + // BaseFont + cidFont.setName(COSName.BASE_FONT, fontDescriptor.getFontName()); + + // CIDSystemInfo + COSDictionary info = toCIDSystemInfo("Adobe", "Identity", 0); + cidFont.setItem(COSName.CIDSYSTEMINFO, info); + + // FontDescriptor + cidFont.setItem(COSName.FONT_DESC, fontDescriptor.getCOSObject()); + + // W - widths + buildWidths(cidFont); + + // Vertical metrics + if (vertical) + { + buildVerticalMetrics(cidFont); + } + + // CIDToGIDMap + cidFont.setItem(COSName.CID_TO_GID_MAP, COSName.IDENTITY); + + return cidFont; + } + + private void addNameTag(String tag) throws IOException + { + String name = fontDescriptor.getFontName(); + String newName = tag + name; + + dict.setName(COSName.BASE_FONT, newName); + fontDescriptor.setFontName(newName); + cidFont.setName(COSName.BASE_FONT, newName); + } + + private void buildCIDToGIDMap(Map cidToGid) throws IOException + { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int cidMax = Collections.max(cidToGid.keySet()); + for (int i = 0; i <= cidMax; i++) + { + int gid; + if (cidToGid.containsKey(i)) + { + gid = cidToGid.get(i); + } + else + { + gid = 0; + } + out.write(new byte[] { (byte)(gid >> 8 & 0xff), (byte)(gid & 0xff) }); + } + + InputStream input = new ByteArrayInputStream(out.toByteArray()); + PDStream stream = new PDStream(document, input, COSName.FLATE_DECODE); + + cidFont.setItem(COSName.CID_TO_GID_MAP, stream); + } + + /** + * Builds the CIDSet entry, required by PDF/A. This lists all CIDs in the font, including those + * that don't have a GID. + */ + private void buildCIDSet(Map cidToGid) throws IOException + { + int cidMax = Collections.max(cidToGid.keySet()); + byte[] bytes = new byte[cidMax / 8 + 1]; + for (int cid = 0; cid <= cidMax; cid++) + { + int mask = 1 << 7 - cid % 8; + bytes[cid / 8] |= mask; + } + + InputStream input = new ByteArrayInputStream(bytes); + PDStream stream = new PDStream(document, input, COSName.FLATE_DECODE); + + fontDescriptor.setCIDSet(stream); + } + + /** + * Builds widths with a custom CIDToGIDMap (for embedding font subset). + */ + private void buildWidths(Map cidToGid) throws IOException + { + float scaling = 1000f / ttf.getHeader().getUnitsPerEm(); + + COSArray widths = new COSArray(); + COSArray ws = new COSArray(); + int prev = Integer.MIN_VALUE; + // Use a sorted list to get an optimal width array + Set keys = new TreeSet<>(cidToGid.keySet()); + for (int cid : keys) + { + int gid = cidToGid.get(cid); + long width = Math.round(ttf.getHorizontalMetrics().getAdvanceWidth(gid) * scaling); + if (width == 1000) + { + // skip default width + continue; + } + // c [w1 w2 ... wn] + if (prev != cid - 1) + { + ws = new COSArray(); + widths.add(COSInteger.get(cid)); // c + widths.add(ws); + } + ws.add(COSInteger.get(width)); // wi + prev = cid; + } + cidFont.setItem(COSName.W, widths); + } + + private boolean buildVerticalHeader(COSDictionary cidFont) throws IOException + { + VerticalHeaderTable vhea = ttf.getVerticalHeader(); + if (vhea == null) + { + LOG.warn("Font to be subset is set to vertical, but has no 'vhea' table"); + return false; + } + + float scaling = 1000f / ttf.getHeader().getUnitsPerEm(); + + long v = Math.round(vhea.getAscender() * scaling); + long w1 = Math.round(-vhea.getAdvanceHeightMax() * scaling); + if (v != 880 || w1 != -1000) + { + COSArray cosDw2 = new COSArray(); + cosDw2.add(COSInteger.get(v)); + cosDw2.add(COSInteger.get(w1)); + cidFont.setItem(COSName.DW2, cosDw2); + } + return true; + } + + /** + * Builds vertical metrics with a custom CIDToGIDMap (for embedding font subset). + */ + private void buildVerticalMetrics(Map cidToGid) throws IOException + { + // The "vhea" and "vmtx" tables that specify vertical metrics shall never be used by a conforming + // reader. The only way to specify vertical metrics in PDF shall be by means of the DW2 and W2 + // entries in a CIDFont dictionary. + + if (!buildVerticalHeader(cidFont)) + { + return; + } + + float scaling = 1000f / ttf.getHeader().getUnitsPerEm(); + + VerticalHeaderTable vhea = ttf.getVerticalHeader(); + VerticalMetricsTable vmtx = ttf.getVerticalMetrics(); + GlyphTable glyf = ttf.getGlyph(); + HorizontalMetricsTable hmtx = ttf.getHorizontalMetrics(); + + long v_y = Math.round(vhea.getAscender() * scaling); + long w1 = Math.round(-vhea.getAdvanceHeightMax() * scaling); + + COSArray heights = new COSArray(); + COSArray w2 = new COSArray(); + int prev = Integer.MIN_VALUE; + // Use a sorted list to get an optimal width array + Set keys = new TreeSet<>(cidToGid.keySet()); + for (int cid : keys) + { + // Unlike buildWidths, we look up with cid (not gid) here because this is + // the original TTF, not the rebuilt one. + GlyphData glyph = glyf.getGlyph(cid); + if (glyph == null) + { + continue; + } + long height = Math.round((glyph.getYMaximum() + vmtx.getTopSideBearing(cid)) * scaling); + long advance = Math.round(-vmtx.getAdvanceHeight(cid) * scaling); + if (height == v_y && advance == w1) + { + // skip default metrics + continue; + } + // c [w1_1y v_1x v_1y w1_2y v_2x v_2y ... w1_ny v_nx v_ny] + if (prev != cid - 1) + { + w2 = new COSArray(); + heights.add(COSInteger.get(cid)); // c + heights.add(w2); + } + w2.add(COSInteger.get(advance)); // w1_iy + long width = Math.round(hmtx.getAdvanceWidth(cid) * scaling); + w2.add(COSInteger.get(width / 2)); // v_ix + w2.add(COSInteger.get(height)); // v_iy + prev = cid; + } + cidFont.setItem(COSName.W2, heights); + } + + /** + * Build widths with Identity CIDToGIDMap (for embedding full font). + */ + private void buildWidths(COSDictionary cidFont) throws IOException + { + int cidMax = ttf.getNumberOfGlyphs(); + int[] gidwidths = new int[cidMax * 2]; + for (int cid = 0; cid < cidMax; cid++) + { + gidwidths[cid * 2] = cid; + gidwidths[cid * 2 + 1] = ttf.getHorizontalMetrics().getAdvanceWidth(cid); + } + + cidFont.setItem(COSName.W, getWidths(gidwidths)); + } + + enum State + { + FIRST, BRACKET, SERIAL + } + + private COSArray getWidths(int[] widths) throws IOException + { + if (widths.length == 0) + { + throw new IllegalArgumentException("length of widths must be > 0"); + } + + float scaling = 1000f / ttf.getHeader().getUnitsPerEm(); + + long lastCid = widths[0]; + long lastValue = Math.round(widths[1] * scaling); + + COSArray inner = new COSArray(); + COSArray outer = new COSArray(); + outer.add(COSInteger.get(lastCid)); + + State state = State.FIRST; + + for (int i = 2; i < widths.length; i += 2) + { + long cid = widths[i]; + long value = Math.round(widths[i + 1] * scaling); + + switch (state) + { + case FIRST: + if (cid == lastCid + 1 && value == lastValue) + { + state = State.SERIAL; + } + else if (cid == lastCid + 1) + { + state = State.BRACKET; + inner = new COSArray(); + inner.add(COSInteger.get(lastValue)); + } + else + { + inner = new COSArray(); + inner.add(COSInteger.get(lastValue)); + outer.add(inner); + outer.add(COSInteger.get(cid)); + } + break; + case BRACKET: + if (cid == lastCid + 1 && value == lastValue) + { + state = State.SERIAL; + outer.add(inner); + outer.add(COSInteger.get(lastCid)); + } + else if (cid == lastCid + 1) + { + inner.add(COSInteger.get(lastValue)); + } + else + { + state = State.FIRST; + inner.add(COSInteger.get(lastValue)); + outer.add(inner); + outer.add(COSInteger.get(cid)); + } + break; + case SERIAL: + if (cid != lastCid + 1 || value != lastValue) + { + outer.add(COSInteger.get(lastCid)); + outer.add(COSInteger.get(lastValue)); + outer.add(COSInteger.get(cid)); + state = State.FIRST; + } + break; + } + lastValue = value; + lastCid = cid; + } + + switch (state) + { + case FIRST: + inner = new COSArray(); + inner.add(COSInteger.get(lastValue)); + outer.add(inner); + break; + case BRACKET: + inner.add(COSInteger.get(lastValue)); + outer.add(inner); + break; + case SERIAL: + outer.add(COSInteger.get(lastCid)); + outer.add(COSInteger.get(lastValue)); + break; + } + return outer; + } + + /** + * Build vertical metrics with Identity CIDToGIDMap (for embedding full font). + */ + private void buildVerticalMetrics(COSDictionary cidFont) throws IOException + { + if (!buildVerticalHeader(cidFont)) + { + return; + } + + int cidMax = ttf.getNumberOfGlyphs(); + int[] gidMetrics = new int[cidMax * 4]; + for (int cid = 0; cid < cidMax; cid++) + { + GlyphData glyph = ttf.getGlyph().getGlyph(cid); + if (glyph == null) + { + gidMetrics[cid * 4] = Integer.MIN_VALUE; + } + else + { + gidMetrics[cid * 4] = cid; + gidMetrics[cid * 4 + 1] = ttf.getVerticalMetrics().getAdvanceHeight(cid); + gidMetrics[cid * 4 + 2] = ttf.getHorizontalMetrics().getAdvanceWidth(cid); + gidMetrics[cid * 4 + 3] = glyph.getYMaximum() + ttf.getVerticalMetrics().getTopSideBearing(cid); + } + } + + cidFont.setItem(COSName.W2, getVerticalMetrics(gidMetrics)); + } + + private COSArray getVerticalMetrics(int[] values) throws IOException + { + if (values.length == 0) + { + throw new IllegalArgumentException("length of values must be > 0"); + } + + float scaling = 1000f / ttf.getHeader().getUnitsPerEm(); + + long lastCid = values[0]; + long lastW1Value = Math.round(-values[1] * scaling); + long lastVxValue = Math.round(values[2] * scaling / 2f); + long lastVyValue = Math.round(values[3] * scaling); + + COSArray inner = new COSArray(); + COSArray outer = new COSArray(); + outer.add(COSInteger.get(lastCid)); + + State state = State.FIRST; + + for (int i = 4; i < values.length; i += 4) + { + long cid = values[i]; + if (cid == Integer.MIN_VALUE) + { + // no glyph for this cid + continue; + } + long w1Value = Math.round(-values[i + 1] * scaling); + long vxValue = Math.round(values[i + 2] * scaling / 2); + long vyValue = Math.round(values[i + 3] * scaling); + + switch (state) + { + case FIRST: + if (cid == lastCid + 1 && w1Value == lastW1Value && vxValue == lastVxValue && vyValue == lastVyValue) + { + state = State.SERIAL; + } + else if (cid == lastCid + 1) + { + state = State.BRACKET; + inner = new COSArray(); + inner.add(COSInteger.get(lastW1Value)); + inner.add(COSInteger.get(lastVxValue)); + inner.add(COSInteger.get(lastVyValue)); + } + else + { + inner = new COSArray(); + inner.add(COSInteger.get(lastW1Value)); + inner.add(COSInteger.get(lastVxValue)); + inner.add(COSInteger.get(lastVyValue)); + outer.add(inner); + outer.add(COSInteger.get(cid)); + } + break; + case BRACKET: + if (cid == lastCid + 1 && w1Value == lastW1Value && vxValue == lastVxValue && vyValue == lastVyValue) + { + state = State.SERIAL; + outer.add(inner); + outer.add(COSInteger.get(lastCid)); + } + else if (cid == lastCid + 1) + { + inner.add(COSInteger.get(lastW1Value)); + inner.add(COSInteger.get(lastVxValue)); + inner.add(COSInteger.get(lastVyValue)); + } + else + { + state = State.FIRST; + inner.add(COSInteger.get(lastW1Value)); + inner.add(COSInteger.get(lastVxValue)); + inner.add(COSInteger.get(lastVyValue)); + outer.add(inner); + outer.add(COSInteger.get(cid)); + } + break; + case SERIAL: + if (cid != lastCid + 1 || w1Value != lastW1Value || vxValue != lastVxValue || vyValue != lastVyValue) + { + outer.add(COSInteger.get(lastCid)); + outer.add(COSInteger.get(lastW1Value)); + outer.add(COSInteger.get(lastVxValue)); + outer.add(COSInteger.get(lastVyValue)); + outer.add(COSInteger.get(cid)); + state = State.FIRST; + } + break; + } + lastW1Value = w1Value; + lastVxValue = vxValue; + lastVyValue = vyValue; + lastCid = cid; + } + + switch (state) + { + case FIRST: + inner = new COSArray(); + inner.add(COSInteger.get(lastW1Value)); + inner.add(COSInteger.get(lastVxValue)); + inner.add(COSInteger.get(lastVyValue)); + outer.add(inner); + break; + case BRACKET: + inner.add(COSInteger.get(lastW1Value)); + inner.add(COSInteger.get(lastVxValue)); + inner.add(COSInteger.get(lastVyValue)); + outer.add(inner); + break; + case SERIAL: + outer.add(COSInteger.get(lastCid)); + outer.add(COSInteger.get(lastW1Value)); + outer.add(COSInteger.get(lastVxValue)); + outer.add(COSInteger.get(lastVyValue)); + break; + } + return outer; + } + + /** + * Returns the descendant CIDFont. + */ + public PDCIDFont getCIDFont() throws IOException + { + return new PDCIDFontType2(cidFont, parent, ttf); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDSystemInfo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDSystemInfo.java new file mode 100644 index 00000000000..8724141e698 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDSystemInfo.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * Represents a CIDSystemInfo. + * + * @author John Hewson + */ +public final class PDCIDSystemInfo implements COSObjectable +{ + private final COSDictionary dictionary; + + PDCIDSystemInfo(String registry, String ordering, int supplement) + { + dictionary = new COSDictionary(); + dictionary.setString(COSName.REGISTRY, registry); + dictionary.setString(COSName.ORDERING, ordering); + dictionary.setInt(COSName.SUPPLEMENT, supplement); + } + + PDCIDSystemInfo(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + public String getRegistry() + { + return dictionary.getNameAsString(COSName.REGISTRY); + } + + public String getOrdering() + { + return dictionary.getNameAsString(COSName.ORDERING); + } + + public int getSupplement() + { + return dictionary.getInt(COSName.SUPPLEMENT); + } + + @Override + public COSBase getCOSObject() + { + return dictionary; + } + + @Override + public String toString() + { + return getRegistry() + "-" + getOrdering() + "-" + getSupplement(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java new file mode 100644 index 00000000000..5bc4fa6d2d0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java @@ -0,0 +1,648 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.afm.FontMetrics; +import org.apache.fontbox.cmap.CMap; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * This is the base class for all PDF fonts. + * + * @author Ben Litchfield + */ +public abstract class PDFont implements COSObjectable, PDFontLike +{ + private static final Log LOG = LogFactory.getLog(PDFont.class); + protected static final Matrix DEFAULT_FONT_MATRIX = new Matrix(0.001f, 0, 0, 0.001f, 0, 0); + + protected final COSDictionary dict; + private final CMap toUnicodeCMap; + + /** + * AFM for standard 14 fonts + */ + private final FontMetrics afmStandard14; + + private PDFontDescriptor fontDescriptor; + private List widths; + private float avgFontWidth; + private float fontWidthOfSpace = -1f; + private final Map codeToWidthMap; + + /** + * Constructor for embedding. + */ + PDFont() + { + dict = new COSDictionary(); + dict.setItem(COSName.TYPE, COSName.FONT); + toUnicodeCMap = null; + fontDescriptor = null; + afmStandard14 = null; + codeToWidthMap = new HashMap<>(); + } + + /** + * Constructor for Standard 14. + */ + PDFont(String baseFont) + { + dict = new COSDictionary(); + dict.setItem(COSName.TYPE, COSName.FONT); + toUnicodeCMap = null; + afmStandard14 = Standard14Fonts.getAFM(baseFont); + if (afmStandard14 == null) + { + throw new IllegalArgumentException("No AFM for font " + baseFont); + } + fontDescriptor = PDType1FontEmbedder.buildFontDescriptor(afmStandard14); + // standard 14 fonts may be accessed concurrently, as they are singletons + codeToWidthMap = new ConcurrentHashMap<>(); + } + + /** + * Constructor. + * + * @param fontDictionary Font dictionary. + * + * @throws java.io.IOException + */ + protected PDFont(COSDictionary fontDictionary) throws IOException + { + dict = fontDictionary; + codeToWidthMap = new HashMap<>(); + + // standard 14 fonts use an AFM + afmStandard14 = Standard14Fonts.getAFM(getName()); // may be null (it usually is) + fontDescriptor = loadFontDescriptor(); + toUnicodeCMap = loadUnicodeCmap(); + } + + private PDFontDescriptor loadFontDescriptor() + { + COSDictionary fd = (COSDictionary) dict.getDictionaryObject(COSName.FONT_DESC); + if (fd != null) + { + return new PDFontDescriptor(fd); + } + else if (afmStandard14 != null) + { + // build font descriptor from the AFM + return PDType1FontEmbedder.buildFontDescriptor(afmStandard14); + } + else + { + return null; + } + } + + private CMap loadUnicodeCmap() + { + COSBase toUnicode = dict.getDictionaryObject(COSName.TO_UNICODE); + if (toUnicode == null) + { + return null; + } + CMap cmap = null; + try + { + cmap = readCMap(toUnicode); + if (cmap != null && !cmap.hasUnicodeMappings()) + { + LOG.warn("Invalid ToUnicode CMap in font " + getName()); + String cmapName = cmap.getName() != null ? cmap.getName() : ""; + String ordering = cmap.getOrdering() != null ? cmap.getOrdering() : ""; + COSBase encoding = dict.getDictionaryObject(COSName.ENCODING); + if ((cmapName.contains("Identity") || (ordering.contains("Identity")))// + && (COSName.IDENTITY_H.equals(encoding) + || COSName.IDENTITY_V.equals(encoding))) + { + // assume that if encoding is identity, then the reverse is also true + cmap = CMapManager.getPredefinedCMap(COSName.IDENTITY_H.getName()); + } + } + } + catch (IOException ex) + { + LOG.error("Could not read ToUnicode CMap in font " + getName(), ex); + } + return cmap; + } + + /** + * Returns the AFM if this is a Standard 14 font. + */ + protected final FontMetrics getStandard14AFM() + { + return afmStandard14; + } + + @Override + public PDFontDescriptor getFontDescriptor() + { + return fontDescriptor; + } + + /** + * Sets the font descriptor when embedding a font. + * + * @param fontDescriptor + */ + protected final void setFontDescriptor(PDFontDescriptor fontDescriptor) + { + this.fontDescriptor = fontDescriptor; + } + + /** + * Reads a CMap given a COS Stream or Name. May return null if a predefined CMap does not exist. + * + * @param base COSName or COSStream + * @throws IOException + */ + protected final CMap readCMap(COSBase base) throws IOException + { + if (base instanceof COSName) + { + // predefined CMap + String name = ((COSName)base).getName(); + return CMapManager.getPredefinedCMap(name); + } + else if (base instanceof COSStream) + { + // embedded CMap + InputStream input = null; + try + { + input = ((COSStream)base).createInputStream(); + return CMapManager.parseCMap(input); + } + finally + { + IOUtils.closeQuietly(input); + } + } + else + { + throw new IOException("Expected Name or Stream"); + } + } + + @Override + public COSDictionary getCOSObject() + { + return dict; + } + + @Override + public Vector getPositionVector(int code) + { + throw new UnsupportedOperationException("Horizontal fonts have no position vector"); + } + + /** + * Returns the displacement vector (w0, w1) in text space, for the given character. + * For horizontal text only the x component is used, for vertical text only the y component. + * + * @param code character code + * @return displacement vector + * @throws IOException + */ + public Vector getDisplacement(int code) throws IOException + { + return new Vector(getWidth(code) / 1000, 0); + } + + @Override + public float getWidth(int code) throws IOException + { + Float width = codeToWidthMap.get(code); + if (width != null) + { + return width; + } + + // Acrobat overrides the widths in the font program on the conforming reader's system with + // the widths specified in the font dictionary." (Adobe Supplement to the ISO 32000) + // + // Note: The Adobe Supplement says that the override happens "If the font program is not + // embedded", however PDFBOX-427 shows that it also applies to embedded fonts. + + // Type1, Type1C, Type3 + if (dict.getDictionaryObject(COSName.WIDTHS) != null || dict.containsKey(COSName.MISSING_WIDTH)) + { + int firstChar = dict.getInt(COSName.FIRST_CHAR, -1); + int lastChar = dict.getInt(COSName.LAST_CHAR, -1); + int siz = getWidths().size(); + int idx = code - firstChar; + if (siz > 0 && code >= firstChar && code <= lastChar && idx < siz) + { + width = getWidths().get(idx); + if (width == null) + { + width = 0f; + } + codeToWidthMap.put(code, width); + return width; + } + + PDFontDescriptor fd = getFontDescriptor(); + if (fd != null) + { + // get entry from /MissingWidth entry + width = fd.getMissingWidth(); + codeToWidthMap.put(code, width); + return width; + } + } + + // standard 14 font widths are specified by an AFM + if (isStandard14()) + { + width = getStandard14Width(code); + codeToWidthMap.put(code, width); + return width; + } + + // if there's nothing to override with, then obviously we fall back to the font + width = getWidthFromFont(code); + codeToWidthMap.put(code, width); + return width; + } + + /** + * Returns the glyph width from the AFM if this is a Standard 14 font. + * + * @param code character code + * @return width in 1/1000 text space + */ + protected abstract float getStandard14Width(int code); + + @Override + public abstract float getWidthFromFont(int code) throws IOException; + + @Override + public abstract boolean isEmbedded(); + + @Override + public abstract float getHeight(int code) throws IOException; + + /** + * Encodes the given string for use in a PDF content stream. + * + * @param text Any Unicode text. + * @return Array of PDF content stream bytes. + * @throws IOException If the text could not be encoded. + * @throws IllegalArgumentException if a character isn't supported by the font. + */ + public final byte[] encode(String text) throws IOException + { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offset = 0; + while (offset < text.length()) + { + int codePoint = text.codePointAt(offset); + + // multi-byte encoding with 1 to 4 bytes + byte[] bytes = encode(codePoint); + out.write(bytes); + + offset += Character.charCount(codePoint); + } + return out.toByteArray(); + } + + /** + * Encodes the given Unicode code point for use in a PDF content stream. + * Content streams use a multi-byte encoding with 1 to 4 bytes. + * + *

    This method is called when embedding text in PDFs and when filling in fields. + * + * @param unicode Unicode code point. + * @return Array of 1 to 4 PDF content stream bytes. + * @throws IOException If the text could not be encoded. + * @throws IllegalArgumentException if a character isn't supported by the font. + */ + protected abstract byte[] encode(int unicode) throws IOException; + + /** + * Returns the width of the given Unicode string. + * + * @param text The text to get the width of. + * @return The width of the string in 1/1000 units of text space. + * @throws IOException If there is an error getting the width information. + * @throws IllegalArgumentException if a character isn't supported by the font. + */ + public float getStringWidth(String text) throws IOException + { + byte[] bytes = encode(text); + ByteArrayInputStream in = new ByteArrayInputStream(bytes); + + float width = 0; + while (in.available() > 0) + { + int code = readCode(in); + width += getWidth(code); + } + + return width; + } + + /** + * This will get the average font width for all characters. + * + * @return The width is in 1000 unit of text space, ie 333 or 777 + */ + // todo: this method is highly suspicious, the average glyph width is not usually a good metric + @Override + public float getAverageFontWidth() + { + float average; + if (Float.compare(avgFontWidth, 0.0f) != 0) + { + average = avgFontWidth; + } + else + { + float totalWidth = 0.0f; + float characterCount = 0.0f; + COSArray widths = (COSArray) dict.getDictionaryObject(COSName.WIDTHS); + if (widths != null) + { + for (int i = 0; i < widths.size(); i++) + { + COSNumber fontWidth = (COSNumber) widths.getObject(i); + if (fontWidth.floatValue() > 0) + { + totalWidth += fontWidth.floatValue(); + characterCount += 1; + } + } + } + + if (totalWidth > 0) + { + average = totalWidth / characterCount; + } + else + { + average = 0; + } + avgFontWidth = average; + } + return average; + } + + /** + * Reads a character code from a content stream string. Codes may be up to 4 bytes long. + * + * @param in string stream + * @return character code + * @throws IOException if the CMap or stream cannot be read + */ + public abstract int readCode(InputStream in) throws IOException; + + /** + * Returns the Unicode character sequence which corresponds to the given character code. + * + * @param code character code + * @param customGlyphList a custom glyph list to use instead of the Adobe Glyph List + * @return Unicode character(s) + */ + public String toUnicode(int code, GlyphList customGlyphList) throws IOException + { + return toUnicode(code); + } + + /** + * Returns the Unicode character sequence which corresponds to the given character code. + * + * @param code character code + * @return Unicode character(s) + * @throws IOException + */ + public String toUnicode(int code) throws IOException + { + // if the font dictionary containsName a ToUnicode CMap, use that CMap + if (toUnicodeCMap != null) + { + if (toUnicodeCMap.getName() != null && + toUnicodeCMap.getName().startsWith("Identity-") && + (dict.getDictionaryObject(COSName.TO_UNICODE) instanceof COSName || + !toUnicodeCMap.hasUnicodeMappings())) + { + // handle the undocumented case of using Identity-H/V as a ToUnicode CMap, this + // isn't actually valid as the Identity-x CMaps are code->CID maps, not + // code->Unicode maps. See sample_fonts_solidconvertor.pdf for an example. + // PDFBOX-3123: do this only if the /ToUnicode entry is a name + // PDFBOX-4322: identity streams are OK too + return new String(new char[] { (char) code }); + } + else + { + // proceed as normal + return toUnicodeCMap.toUnicode(code); + } + } + + // if no value has been produced, there is no way to obtain Unicode for the character. + // this behaviour can be overridden is subclasses, but this method *must* return null here + return null; + } + + /** + * This will always return "Font" for fonts. + * + * @return The type of object that this is. + */ + public String getType() + { + return dict.getNameAsString(COSName.TYPE); + } + + /** + * This will get the subtype of font. + */ + public String getSubType() + { + return dict.getNameAsString(COSName.SUBTYPE); + } + + @Override + public abstract String getName(); + + @Override + public abstract BoundingBox getBoundingBox() throws IOException; + + /** + * The widths of the characters. This will be null for the standard 14 fonts. + * + * @return The widths of the characters. + */ + protected final List getWidths() + { + if (widths == null) + { + COSArray array = (COSArray) dict.getDictionaryObject(COSName.WIDTHS); + if (array != null) + { + widths = COSArrayList.convertFloatCOSArrayToList(array); + } + else + { + widths = Collections.emptyList(); + } + } + return widths; + } + + @Override + public Matrix getFontMatrix() + { + return DEFAULT_FONT_MATRIX; + } + + /** + * Determines the width of the space character. + * + * @return the width of the space character + */ + public float getSpaceWidth() + { + if (Float.compare(fontWidthOfSpace, -1f) == 0) + { + COSBase toUnicode = dict.getDictionaryObject(COSName.TO_UNICODE); + try + { + if (toUnicode != null && toUnicodeCMap != null) + { + int spaceMapping = toUnicodeCMap.getSpaceMapping(); + if (spaceMapping > -1) + { + fontWidthOfSpace = getWidth(spaceMapping); + } + } + else + { + fontWidthOfSpace = getWidth(32); + } + + // try to get it from the font itself + if (fontWidthOfSpace <= 0) + { + fontWidthOfSpace = getWidthFromFont(32); + } + // use the average font width as fall back + if (fontWidthOfSpace <= 0) + { + fontWidthOfSpace = getAverageFontWidth(); + } + } + catch (Exception e) + { + LOG.error("Can't determine the width of the space character, assuming 250", e); + fontWidthOfSpace = 250f; + } + } + return fontWidthOfSpace; + } + + /** + * Returns true if the font uses vertical writing mode. + */ + public abstract boolean isVertical(); + + /** + * Returns true if this font is one of the "Standard 14" fonts and receives special handling. + */ + public boolean isStandard14() + { + // this logic is based on Acrobat's behaviour, see PDFBOX-2372 + + // embedded fonts never get special treatment + if (isEmbedded()) + { + return false; + } + + // if the name matches, this is a Standard 14 font + return Standard14Fonts.containsName(getName()); + } + + /** + * Adds the given Unicode point to the subset. + * + * @param codePoint Unicode code point + */ + public abstract void addToSubset(int codePoint); + + /** + * Replaces this font with a subset containing only the given Unicode characters. + * + * @throws IOException if the subset could not be written + */ + public abstract void subset() throws IOException; + + /** + * Returns true if this font will be subset when embedded. + */ + public abstract boolean willBeSubset(); + + @Override + public abstract boolean isDamaged(); + + @Override + public boolean equals(Object other) + { + return other instanceof PDFont && ((PDFont) other).getCOSObject() == this.getCOSObject(); + } + + @Override + public int hashCode() + { + return this.getCOSObject().hashCode(); + } + + @Override + public String toString() + { + return getClass().getSimpleName() + " " + getName(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontDescriptor.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontDescriptor.java new file mode 100644 index 00000000000..e78134a9555 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontDescriptor.java @@ -0,0 +1,861 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * A font descriptor. + * + * @author Ben Litchfield + */ +public final class PDFontDescriptor implements COSObjectable +{ + private static final int FLAG_FIXED_PITCH = 1; + private static final int FLAG_SERIF = 2; + private static final int FLAG_SYMBOLIC = 4; + private static final int FLAG_SCRIPT = 8; + private static final int FLAG_NON_SYMBOLIC = 32; + private static final int FLAG_ITALIC = 64; + private static final int FLAG_ALL_CAP = 65536; + private static final int FLAG_SMALL_CAP = 131072; + private static final int FLAG_FORCE_BOLD = 262144; + + private final COSDictionary dic; + private float xHeight = Float.NEGATIVE_INFINITY; + private float capHeight = Float.NEGATIVE_INFINITY; + private int flags = -1; + + + /** + * Package-private constructor, for embedding. + */ + PDFontDescriptor() + { + dic = new COSDictionary(); + dic.setItem( COSName.TYPE, COSName.FONT_DESC ); + } + + /** + * Creates a PDFontDescriptor from a COS dictionary. + * + * @param desc The wrapped COS Dictionary. + */ + public PDFontDescriptor( COSDictionary desc ) + { + dic = desc; + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isFixedPitch() + { + return isFlagBitOn( FLAG_FIXED_PITCH ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setFixedPitch( boolean flag ) + { + setFlagBit( FLAG_FIXED_PITCH, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isSerif() + { + return isFlagBitOn( FLAG_SERIF ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setSerif( boolean flag ) + { + setFlagBit( FLAG_SERIF, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isSymbolic() + { + return isFlagBitOn( FLAG_SYMBOLIC ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setSymbolic( boolean flag ) + { + setFlagBit( FLAG_SYMBOLIC, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isScript() + { + return isFlagBitOn( FLAG_SCRIPT ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setScript( boolean flag ) + { + setFlagBit( FLAG_SCRIPT, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isNonSymbolic() + { + return isFlagBitOn( FLAG_NON_SYMBOLIC ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setNonSymbolic( boolean flag ) + { + setFlagBit( FLAG_NON_SYMBOLIC, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isItalic() + { + return isFlagBitOn( FLAG_ITALIC ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setItalic( boolean flag ) + { + setFlagBit( FLAG_ITALIC, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isAllCap() + { + return isFlagBitOn( FLAG_ALL_CAP); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setAllCap( boolean flag ) + { + setFlagBit( FLAG_ALL_CAP, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isSmallCap() + { + return isFlagBitOn( FLAG_SMALL_CAP ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setSmallCap( boolean flag ) + { + setFlagBit( FLAG_SMALL_CAP, flag ); + } + + /** + * A convenience method that checks the flag bit. + * + * @return The flag value. + */ + public boolean isForceBold() + { + return isFlagBitOn( FLAG_FORCE_BOLD ); + } + + /** + * A convenience method that sets the flag bit. + * + * @param flag The flag value. + */ + public void setForceBold( boolean flag ) + { + setFlagBit( FLAG_FORCE_BOLD, flag ); + } + + private boolean isFlagBitOn( int bit ) + { + return (getFlags() & bit) != 0; + } + + private void setFlagBit( int bit, boolean value ) + { + int flags = getFlags(); + if( value ) + { + flags = flags | bit; + } + else + { + flags = flags & (~bit); + } + setFlags( flags ); + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dic; + } + + /** + * Get the font name. + * + * @return The name of the font. + */ + public String getFontName() + { + String retval = null; + COSBase base = dic.getDictionaryObject(COSName.FONT_NAME); + if (base instanceof COSName) + { + retval = ((COSName) base).getName(); + } + return retval; + } + + /** + * This will set the font name. + * + * @param fontName The new name for the font. + */ + public void setFontName( String fontName ) + { + COSName name = null; + if( fontName != null ) + { + name = COSName.getPDFName( fontName ); + } + dic.setItem( COSName.FONT_NAME, name ); + } + + /** + * A string representing the preferred font family. + * + * @return The font family. + */ + public String getFontFamily() + { + String retval = null; + COSString name = (COSString)dic.getDictionaryObject( COSName.FONT_FAMILY ); + if( name != null ) + { + retval = name.getString(); + } + return retval; + } + + /** + * This will set the font family. + * + * @param fontFamily The font family. + */ + public void setFontFamily( String fontFamily ) + { + COSString name = null; + if( fontFamily != null ) + { + name = new COSString( fontFamily ); + } + dic.setItem( COSName.FONT_FAMILY, name ); + } + + /** + * The weight of the font. According to the PDF spec "possible values are + * 100, 200, 300, 400, 500, 600, 700, 800 or 900" Where a higher number is + * more weight and appears to be more bold. + * + * @return The font weight. + */ + public float getFontWeight() + { + return dic.getFloat( COSName.FONT_WEIGHT,0 ); + } + + /** + * Set the weight of the font. + * + * @param fontWeight The new weight of the font. + */ + public void setFontWeight( float fontWeight ) + { + dic.setFloat( COSName.FONT_WEIGHT, fontWeight ); + } + + /** + * A string representing the preferred font stretch. + * According to the PDF Spec: + * The font stretch value; it must be one of the following (ordered from + * narrowest to widest): UltraCondensed, ExtraCondensed, Condensed, SemiCondensed, + * Normal, SemiExpanded, Expanded, ExtraExpanded or UltraExpanded. + * + * @return The stretch of the font. + */ + public String getFontStretch() + { + String retval = null; + COSName name = (COSName)dic.getDictionaryObject( COSName.FONT_STRETCH ); + if( name != null ) + { + retval = name.getName(); + } + return retval; + } + + /** + * This will set the font stretch. + * + * @param fontStretch The new stretch for the font. + */ + public void setFontStretch( String fontStretch ) + { + COSName name = null; + if( fontStretch != null ) + { + name = COSName.getPDFName( fontStretch ); + } + dic.setItem( COSName.FONT_STRETCH, name ); + } + + /** + * This will get the font flags. + * + * @return The font flags. + */ + public int getFlags() + { + if (flags == -1) + { + flags = dic.getInt( COSName.FLAGS, 0 ); + } + return flags; + } + + /** + * This will set the font flags. + * + * @param flags The new font flags. + */ + public void setFlags( int flags ) + { + dic.setInt( COSName.FLAGS, flags ); + this.flags = flags; + } + + /** + * This will get the fonts bounding box. + * + * @return The fonts bounding box. + */ + public PDRectangle getFontBoundingBox() + { + COSArray rect = (COSArray)dic.getDictionaryObject( COSName.FONT_BBOX ); + PDRectangle retval = null; + if( rect != null ) + { + retval = new PDRectangle( rect ); + } + return retval; + } + + /** + * Set the fonts bounding box. + * + * @param rect The new bouding box. + */ + public void setFontBoundingBox( PDRectangle rect ) + { + COSArray array = null; + if( rect != null ) + { + array = rect.getCOSArray(); + } + dic.setItem( COSName.FONT_BBOX, array ); + } + + /** + * This will get the italic angle for the font. + * + * @return The italic angle. + */ + public float getItalicAngle() + { + return dic.getFloat( COSName.ITALIC_ANGLE, 0 ); + } + + /** + * This will set the italic angle for the font. + * + * @param angle The new italic angle for the font. + */ + public void setItalicAngle( float angle ) + { + dic.setFloat( COSName.ITALIC_ANGLE, angle ); + } + + /** + * This will get the ascent for the font. + * + * @return The ascent. + */ + public float getAscent() + { + return dic.getFloat( COSName.ASCENT, 0 ); + } + + /** + * This will set the ascent for the font. + * + * @param ascent The new ascent for the font. + */ + public void setAscent( float ascent ) + { + dic.setFloat( COSName.ASCENT, ascent ); + } + + /** + * This will get the descent for the font. + * + * @return The descent. + */ + public float getDescent() + { + return dic.getFloat( COSName.DESCENT, 0 ); + } + + /** + * This will set the descent for the font. + * + * @param descent The new descent for the font. + */ + public void setDescent( float descent ) + { + dic.setFloat( COSName.DESCENT, descent ); + } + + /** + * This will get the leading for the font. + * + * @return The leading. + */ + public float getLeading() + { + return dic.getFloat( COSName.LEADING, 0 ); + } + + /** + * This will set the leading for the font. + * + * @param leading The new leading for the font. + */ + public void setLeading( float leading ) + { + dic.setFloat( COSName.LEADING, leading ); + } + + /** + * This will get the CapHeight for the font. + * + * @return The cap height. + */ + public float getCapHeight() + { + if(Float.compare(capHeight, Float.NEGATIVE_INFINITY) == 0) + { + /* We observed a negative value being returned with + * the Scheherazade font. PDFBOX-429 was logged for this. + * We are not sure if returning the absolute value + * is the correct fix, but it seems to work. */ + capHeight = java.lang.Math.abs(dic.getFloat( COSName.CAP_HEIGHT, 0 )); + } + return capHeight; + } + + + /** + * This will set the cap height for the font. + * + * @param capHeight The new cap height for the font. + */ + public void setCapHeight( float capHeight ) + { + dic.setFloat( COSName.CAP_HEIGHT, capHeight ); + this.capHeight = capHeight; + } + + /** + * This will get the x height for the font. + * + * @return The x height. + */ + public float getXHeight() + { + if(Float.compare(xHeight, Float.NEGATIVE_INFINITY) == 0) + { + /* We observed a negative value being returned with + * the Scheherazade font. PDFBOX-429 was logged for this. + * We are not sure if returning the absolute value + * is the correct fix, but it seems to work. */ + xHeight = java.lang.Math.abs(dic.getFloat( COSName.XHEIGHT, 0 )); + } + return xHeight; + } + + /** + * This will set the x height for the font. + * + * @param xHeight The new x height for the font. + */ + public void setXHeight( float xHeight ) + { + dic.setFloat( COSName.XHEIGHT, xHeight ); + this.xHeight = xHeight; + } + + /** + * This will get the stemV for the font. + * + * @return The stem v value. + */ + public float getStemV() + { + return dic.getFloat( COSName.STEM_V, 0 ); + } + + /** + * This will set the stem V for the font. + * + * @param stemV The new stem v for the font. + */ + public void setStemV( float stemV ) + { + dic.setFloat( COSName.STEM_V, stemV ); + } + + /** + * This will get the stemH for the font. + * + * @return The stem h value. + */ + public float getStemH() + { + return dic.getFloat( COSName.STEM_H, 0 ); + } + + /** + * This will set the stem H for the font. + * + * @param stemH The new stem h for the font. + */ + public void setStemH( float stemH ) + { + dic.setFloat( COSName.STEM_H, stemH ); + } + + /** + * This will get the average width for the font. + * + * @return The average width value. + */ + public float getAverageWidth() + { + return dic.getFloat( COSName.AVG_WIDTH, 0 ); + } + + /** + * This will set the average width for the font. + * + * @param averageWidth The new average width for the font. + */ + public void setAverageWidth( float averageWidth ) + { + dic.setFloat( COSName.AVG_WIDTH, averageWidth ); + } + + /** + * This will get the max width for the font. + * + * @return The max width value. + */ + public float getMaxWidth() + { + return dic.getFloat( COSName.MAX_WIDTH, 0 ); + } + + /** + * This will set the max width for the font. + * + * @param maxWidth The new max width for the font. + */ + public void setMaxWidth( float maxWidth ) + { + dic.setFloat( COSName.MAX_WIDTH, maxWidth ); + } + + /** + * Returns true if widths are present in the font descriptor. + */ + public boolean hasWidths() + { + return dic.containsKey(COSName.WIDTHS) || dic.containsKey(COSName.MISSING_WIDTH); + } + + /** + * Returns true if the missing widths entry is present in the font descriptor. + */ + public boolean hasMissingWidth() + { + return dic.containsKey(COSName.MISSING_WIDTH); + } + + /** + * This will get the missing width for the font from the /MissingWidth dictionary entry. + * + * @return The missing width value, or 0 if there is no such dictionary entry. + */ + public float getMissingWidth() + { + return dic.getFloat( COSName.MISSING_WIDTH, 0 ); + } + + /** + * This will set the missing width for the font. + * + * @param missingWidth The new missing width for the font. + */ + public void setMissingWidth( float missingWidth ) + { + dic.setFloat( COSName.MISSING_WIDTH, missingWidth ); + } + + /** + * This will get the character set for the font. + * + * @return The character set value. + */ + public String getCharSet() + { + String retval = null; + COSString name = (COSString)dic.getDictionaryObject( COSName.CHAR_SET ); + if( name != null ) + { + retval = name.getString(); + } + return retval; + } + + /** + * This will set the character set for the font. + * + * @param charSet The new character set for the font. + */ + public void setCharacterSet( String charSet ) + { + COSString name = null; + if( charSet != null ) + { + name = new COSString( charSet ); + } + dic.setItem( COSName.CHAR_SET, name ); + } + + /** + * A stream containing a Type 1 font program. + * + * @return A stream containing a Type 1 font program. + */ + public PDStream getFontFile() + { + PDStream retval = null; + COSBase obj = dic.getDictionaryObject(COSName.FONT_FILE); + if (obj instanceof COSStream) + { + retval = new PDStream((COSStream) obj); + } + return retval; + } + + /** + * Set the type 1 font program. + * + * @param type1Stream The type 1 stream. + */ + public void setFontFile( PDStream type1Stream ) + { + dic.setItem( COSName.FONT_FILE, type1Stream ); + } + + /** + * A stream containing a true type font program. + * + * @return A stream containing a true type font program. + */ + public PDStream getFontFile2() + { + PDStream retval = null; + COSBase obj = dic.getDictionaryObject(COSName.FONT_FILE2); + if (obj instanceof COSStream) + { + retval = new PDStream((COSStream) obj); + } + return retval; + } + + /** + * Set the true type font program. + * + * @param ttfStream The true type stream. + */ + public void setFontFile2( PDStream ttfStream ) + { + dic.setItem( COSName.FONT_FILE2, ttfStream ); + } + + /** + * A stream containing a font program that is not true type or type 1. + * + * @return A stream containing a font program. + */ + public PDStream getFontFile3() + { + PDStream retval = null; + COSBase obj = dic.getDictionaryObject(COSName.FONT_FILE3); + if (obj instanceof COSStream) + { + retval = new PDStream((COSStream) obj); + } + return retval; + } + + /** + * Set a stream containing a font program that is not true type or type 1. + * + * @param stream The font program stream. + */ + public void setFontFile3( PDStream stream ) + { + dic.setItem( COSName.FONT_FILE3, stream ); + } + + /** + * Get the CIDSet stream. + * + * @return A stream containing a CIDSet. + */ + public PDStream getCIDSet() + { + COSObjectable cidSet = dic.getDictionaryObject(COSName.CID_SET); + if (cidSet instanceof COSStream) + { + return new PDStream((COSStream) cidSet); + } + return null; + } + + /** + * Set a stream containing a CIDSet. + * + * @param stream The font program stream. + */ + public void setCIDSet( PDStream stream ) + { + dic.setItem( COSName.CID_SET, stream ); + } + + /** + * Returns the Panose entry of the Style dictionary, if any. + * + * @return A Panose wrapper object. + */ + public PDPanose getPanose() + { + COSDictionary style = (COSDictionary)dic.getDictionaryObject(COSName.STYLE); + if (style != null) + { + COSString panose = (COSString)style.getDictionaryObject(COSName.PANOSE); + byte[] bytes = panose.getBytes(); + return new PDPanose(bytes); + } + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java new file mode 100644 index 00000000000..569f9557324 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontFactory.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.ResourceCache; + +/** + * Creates the appropriate font subtype based on information in the dictionary. + * @author Ben Litchfield + */ +public final class PDFontFactory +{ + private static final Log LOG = LogFactory.getLog(PDFontFactory.class); + + private PDFontFactory() + { + } + + /** + * Creates a new PDFont instance with the appropriate subclass. + * + * @param dictionary a font dictionary + * @return a PDFont instance, based on the SubType entry of the dictionary + * @throws IOException if something goes wrong + */ + public static PDFont createFont(COSDictionary dictionary) throws IOException + { + return createFont(dictionary, null); + } + + /** + * Creates a new PDFont instance with the appropriate subclass. + * + * @param dictionary a font dictionary + * @param resourceCache resource cache, only useful for type 3 fonts, can be null + * @return a PDFont instance, based on the SubType entry of the dictionary + * @throws IOException if something goes wrong + */ + public static PDFont createFont(COSDictionary dictionary, ResourceCache resourceCache) throws IOException + { + COSName type = dictionary.getCOSName(COSName.TYPE, COSName.FONT); + if (!COSName.FONT.equals(type)) + { + LOG.error("Expected 'Font' dictionary but found '" + type.getName() + "'"); + } + + COSName subType = dictionary.getCOSName(COSName.SUBTYPE); + if (COSName.TYPE1.equals(subType)) + { + COSBase fd = dictionary.getDictionaryObject(COSName.FONT_DESC); + if (fd instanceof COSDictionary && ((COSDictionary) fd).containsKey(COSName.FONT_FILE3)) + { + return new PDType1CFont(dictionary); + } + return new PDType1Font(dictionary); + } + else if (COSName.MM_TYPE1.equals(subType)) + { + COSBase fd = dictionary.getDictionaryObject(COSName.FONT_DESC); + if (fd instanceof COSDictionary && ((COSDictionary) fd).containsKey(COSName.FONT_FILE3)) + { + return new PDType1CFont(dictionary); + } + return new PDMMType1Font(dictionary); + } + else if (COSName.TRUE_TYPE.equals(subType)) + { + return new PDTrueTypeFont(dictionary); + } + else if (COSName.TYPE3.equals(subType)) + { + return new PDType3Font(dictionary, resourceCache); + } + else if (COSName.TYPE0.equals(subType)) + { + return new PDType0Font(dictionary); + } + else if (COSName.CID_FONT_TYPE0.equals(subType)) + { + throw new IllegalArgumentException("Type 0 descendant font not allowed"); + } + else if (COSName.CID_FONT_TYPE2.equals(subType)) + { + throw new IllegalArgumentException("Type 2 descendant font not allowed"); + } + else + { + // assuming Type 1 font (see PDFBOX-1988) because it seems that Adobe Reader does this + // however, we may need more sophisticated logic perhaps looking at the FontFile + LOG.warn("Invalid font subtype '" + subType + "'"); + return new PDType1Font(dictionary); + } + } + + /** + * Creates a new PDCIDFont instance with the appropriate subclass. + * + * @param dictionary descendant font dictionary + * @return a PDCIDFont instance, based on the SubType entry of the dictionary + * @throws IOException if something goes wrong + */ + static PDCIDFont createDescendantFont(COSDictionary dictionary, PDType0Font parent) + throws IOException + { + COSName type = dictionary.getCOSName(COSName.TYPE, COSName.FONT); + if (!COSName.FONT.equals(type)) + { + throw new IllegalArgumentException("Expected 'Font' dictionary but found '" + type.getName() + "'"); + } + + COSName subType = dictionary.getCOSName(COSName.SUBTYPE); + if (COSName.CID_FONT_TYPE0.equals(subType)) + { + return new PDCIDFontType0(dictionary, parent); + } + else if (COSName.CID_FONT_TYPE2.equals(subType)) + { + return new PDCIDFontType2(dictionary, parent); + } + else + { + throw new IOException("Invalid font type: " + type); + } + } + + /** + * Create a default font. + * + * @return a default font + * @throws IOException if something goes wrong + */ + public static PDFont createDefaultFont() throws IOException + { + COSDictionary dict = new COSDictionary(); + dict.setItem(COSName.TYPE, COSName.FONT); + dict.setItem(COSName.SUBTYPE, COSName.TRUE_TYPE); + dict.setString(COSName.BASE_FONT, "Arial"); + return createFont(dict); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java new file mode 100644 index 00000000000..a6dc8172ad4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * A font-like object. + * + * @author John Hewson + */ +public interface PDFontLike +{ + /** + * Returns the name of this font, either the PostScript "BaseName" or the Type 3 "Name". + */ + String getName(); + + /** + * Returns the font descriptor, may be null. + */ + PDFontDescriptor getFontDescriptor(); + + /** + * Returns the font matrix, which represents the transformation from glyph space to text space. + */ + Matrix getFontMatrix(); + + /** + * Returns the font's bounding box. + */ + BoundingBox getBoundingBox() throws IOException; + + /** + * Returns the position vector (v), in text space, for the given character. + * This represents the position of vertical origin relative to horizontal origin, for + * horizontal writing it will always be (0, 0). For vertical writing both x and y are set. + * + * @param code character code + * @return position vector + */ + Vector getPositionVector(int code); + + /** + * Returns the height of the given character, in glyph space. This can be expensive to + * calculate. Results are only approximate.

    + * + * Warning: This method is deprecated in PDFBox 2.0 because there is no meaningful value + * which it can return. The {@link #getWidth(int)} method returns the advance width of a glyph, + * but there is no corresponding advance height. The logical height of a character is the same + * for every character in a font, so if you want that, retrieve the font bbox's height. + * Otherwise if you want the visual bounds of the glyph then call getPath(..) on the appropriate + * PDFont subclass to retrieve the glyph outline as a GeneralPath. + * + * @param code character code + * @deprecated Use + * {@link #getBoundingBox() getBoundingBox()}.{@link BoundingBox#getHeight() getHeight()} + * instead. + */ + @Deprecated + float getHeight(int code) throws IOException; + + /** + * Returns the advance width of the given character, in glyph space.

    + * + * If you want the visual bounds of the glyph then call getPath(..) on the appropriate + * PDFont subclass to retrieve the glyph outline as a GeneralPath instead. + * + * @param code character code + */ + float getWidth(int code) throws IOException; + + /** + * Returns true if the Font dictionary specifies an explicit width for the given glyph. + * This includes Width, W but not default widths entries. + * + * @param code character code + * @throws IOException if the font could not be read + */ + boolean hasExplicitWidth(int code) throws IOException; + + /** + * Returns the width of a glyph in the embedded font file. + * + * @param code character code + * @return width in glyph space + * @throws IOException if the font could not be read + */ + float getWidthFromFont(int code) throws IOException; + + /** + * Returns true if the font file is embedded in the PDF. + */ + boolean isEmbedded(); + + /** + * Returns true if the embedded font file is damaged. + */ + boolean isDamaged(); + + /** + * This will get the average font width for all characters. + * + * @return The width is in 1000 unit of text space, ie 333 or 777 + */ + // todo: this method is highly suspicious, the average glyph width is not usually a good metric + float getAverageFontWidth(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDMMType1Font.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDMMType1Font.java new file mode 100644 index 00000000000..e900bb63488 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDMMType1Font.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import org.apache.pdfbox.cos.COSDictionary; + +import java.io.IOException; + +/** + * Type 1 Multiple Master Font. + * + * @author Ben Litchfield + */ +public class PDMMType1Font extends PDType1Font +{ + /** + * Creates an MMType1Font from a Font dictionary in a PDF. + * + * @param fontDictionary font dictionary + */ + public PDMMType1Font(COSDictionary fontDictionary) throws IOException + { + super(fontDictionary); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanose.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanose.java new file mode 100644 index 00000000000..1c30e05258b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanose.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.util.Arrays; + +/** + * Represents the "Panose" entry of a FontDescriptor's Style dictionary. This is a sequence of 12 + * bytes which contain both the TTF sFamilyClass and PANOSE classification bytes. + * + * @author John Hewson + */ +public class PDPanose +{ + private final byte[] bytes; + + public PDPanose(byte[] bytes) + { + this.bytes = bytes; + } + + /** + * The font family class and subclass ID bytes, given in the sFamilyClass field of the + * “OS/2” table in a TrueType font. + * + * @see http://www.microsoft.com/typography/otspec/ibmfc.htm + */ + public int getFamilyClass() + { + return bytes[0] << 8 | bytes[1]; + } + + /** + * Ten bytes for the PANOSE classification number for the font. + * + * @see http://www.monotype.com/services/pan1 + */ + public PDPanoseClassification getPanose() + { + byte[] panose = Arrays.copyOfRange(bytes, 2, 12); + return new PDPanoseClassification(panose); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanoseClassification.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanoseClassification.java new file mode 100644 index 00000000000..765c17c9a8b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanoseClassification.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +/** + * Represents a 10-byte PANOSE classification. + * + * @author John Hewson + */ +public class PDPanoseClassification +{ + private final byte[] bytes; + + PDPanoseClassification(byte[] bytes) + { + this.bytes = bytes; + } + + public int getFamilyKind() + { + return bytes[0]; + } + + public int getSerifStyle() + { + return bytes[1]; + } + + public int getWeight() + { + return bytes[2]; + } + + public int getProportion() + { + return bytes[3]; + } + + public int getContrast() + { + return bytes[4]; + } + + public int getStrokeVariation() + { + return bytes[5]; + } + + public int getArmStyle() + { + return bytes[6]; + } + + public int getLetterform() + { + return bytes[7]; + } + + public int getMidline() + { + return bytes[8]; + } + + public int getXHeight() + { + return bytes[9]; + } + + public byte[] getBytes() + { + return bytes; + } + + @Override + public String toString() + { + return "{ FamilyKind = " + getFamilyKind() + ", " + + "SerifStyle = " + getSerifStyle() + ", " + + "Weight = " + getWeight() + ", " + + "Proportion = " + getProportion() + ", " + + "Contrast = " + getContrast() + ", " + + "StrokeVariation = " + getStrokeVariation() + ", " + + "ArmStyle = " + getArmStyle() + ", " + + "Letterform = " + getLetterform() + ", " + + "Midline = " + getMidline() + ", " + + "XHeight = " + getXHeight() + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java new file mode 100644 index 00000000000..30c89d5dbeb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java @@ -0,0 +1,451 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.FontBoxFont; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; + +/** + * A simple font. Simple fonts use a PostScript encoding vector. + * + * @author John Hewson + */ +public abstract class PDSimpleFont extends PDFont +{ + private static final Log LOG = LogFactory.getLog(PDSimpleFont.class); + + protected Encoding encoding; + protected GlyphList glyphList; + private Boolean isSymbolic; + private final Set noUnicode = new HashSet<>(); // for logging + + /** + * Constructor for embedding. + */ + PDSimpleFont() + { + super(); + } + + /** + * Constructor for Standard 14. + */ + PDSimpleFont(String baseFont) + { + super(baseFont); + + // assign the glyph list based on the font + if ("ZapfDingbats".equals(baseFont)) + { + glyphList = GlyphList.getZapfDingbats(); + } + else + { + glyphList = GlyphList.getAdobeGlyphList(); + } + } + + /** + * Constructor. + * + * @param fontDictionary Font dictionary. + */ + PDSimpleFont(COSDictionary fontDictionary) throws IOException + { + super(fontDictionary); + } + + /** + * Reads the Encoding from the Font dictionary or the embedded or substituted font file. + * Must be called at the end of any subclass constructors. + * + * @throws IOException if the font file could not be read + */ + protected void readEncoding() throws IOException + { + COSBase encoding = dict.getDictionaryObject(COSName.ENCODING); + if (encoding != null) + { + if (encoding instanceof COSName) + { + COSName encodingName = (COSName)encoding; + this.encoding = Encoding.getInstance(encodingName); + if (this.encoding == null) + { + LOG.warn("Unknown encoding: " + encodingName.getName()); + this.encoding = readEncodingFromFont(); // fallback + } + } + else if (encoding instanceof COSDictionary) + { + COSDictionary encodingDict = (COSDictionary)encoding; + Encoding builtIn = null; + Boolean symbolic = getSymbolicFlag(); + boolean isFlaggedAsSymbolic = symbolic != null && symbolic; + + COSName baseEncoding = encodingDict.getCOSName(COSName.BASE_ENCODING); + + boolean hasValidBaseEncoding = baseEncoding != null && + Encoding.getInstance(baseEncoding) != null; + + if (!hasValidBaseEncoding && isFlaggedAsSymbolic) + { + builtIn = readEncodingFromFont(); + } + + if (symbolic == null) + { + symbolic = false; + } + this.encoding = new DictionaryEncoding(encodingDict, !symbolic, builtIn); + } + } + else + { + this.encoding = readEncodingFromFont(); + } + + // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol" + String standard14Name = Standard14Fonts.getMappedFontName(getName()); + + // assign the glyph list based on the font + if ("ZapfDingbats".equals(standard14Name)) + { + glyphList = GlyphList.getZapfDingbats(); + } + else + { + // StandardEncoding and Symbol are in the AGL + glyphList = GlyphList.getAdobeGlyphList(); + } + } + + /** + * Called by readEncoding() if the encoding needs to be extracted from the font file. + * + * @throws IOException if the font file could not be read. + */ + protected abstract Encoding readEncodingFromFont() throws IOException; + + /** + * Returns the Encoding vector. + */ + public Encoding getEncoding() + { + return encoding; + } + + /** + * Returns the Encoding vector. + */ + public GlyphList getGlyphList() + { + return glyphList; + } + + /** + * Returns true the font is a symbolic (that is, it does not use the Adobe Standard Roman + * character set). + */ + public final boolean isSymbolic() + { + if (isSymbolic == null) + { + Boolean result = isFontSymbolic(); + if (result != null) + { + isSymbolic = result; + } + else + { + // unless we can prove that the font is non-symbolic, we assume that it is not + isSymbolic = true; + } + } + return isSymbolic; + } + + /** + * Internal implementation of isSymbolic, allowing for the fact that the result may be + * indeterminate. + */ + protected Boolean isFontSymbolic() + { + Boolean result = getSymbolicFlag(); + if (result != null) + { + return result; + } + else if (isStandard14()) + { + String mappedName = Standard14Fonts.getMappedFontName(getName()); + return mappedName.equals("Symbol") || mappedName.equals("ZapfDingbats"); + } + else + { + if (encoding == null) + { + // sanity check, should never happen + if (!(this instanceof PDTrueTypeFont)) + { + throw new IllegalStateException("PDFBox bug: encoding should not be null!"); + } + + // TTF without its non-symbolic flag set must be symbolic + return true; + } + else if (encoding instanceof WinAnsiEncoding || + encoding instanceof MacRomanEncoding || + encoding instanceof StandardEncoding) + { + return false; + } + else if (encoding instanceof DictionaryEncoding) + { + // each name in Differences array must also be in the latin character set + for (String name : ((DictionaryEncoding)encoding).getDifferences().values()) + { + if (".notdef".equals(name)) + { + // skip + } + else if (!(WinAnsiEncoding.INSTANCE.contains(name) && + MacRomanEncoding.INSTANCE.contains(name) && + StandardEncoding.INSTANCE.contains(name))) + { + return true; + } + + } + return false; + } + else + { + // we don't know + return null; + } + } + } + + /** + * Returns the value of the symbolic flag, allowing for the fact that the result may be + * indeterminate. + */ + protected final Boolean getSymbolicFlag() + { + if (getFontDescriptor() != null) + { + // fixme: isSymbolic() defaults to false if the flag is missing so we can't trust this + return getFontDescriptor().isSymbolic(); + } + return null; + } + + @Override + public String toUnicode(int code) throws IOException + { + return toUnicode(code, GlyphList.getAdobeGlyphList()); + } + + @Override + public String toUnicode(int code, GlyphList customGlyphList) throws IOException + { + // allow the glyph list to be overridden for the purpose of extracting Unicode + // we only do this when the font's glyph list is the AGL, to avoid breaking Zapf Dingbats + GlyphList unicodeGlyphList; + if (this.glyphList == GlyphList.getAdobeGlyphList()) + { + unicodeGlyphList = customGlyphList; + } + else + { + unicodeGlyphList = this.glyphList; + } + + // first try to use a ToUnicode CMap + String unicode = super.toUnicode(code); + if (unicode != null) + { + return unicode; + } + + // if the font is a "simple font" and uses MacRoman/MacExpert/WinAnsi[Encoding] + // or has Differences with names from only Adobe Standard and/or Symbol, then: + // + // a) Map the character codes to names + // b) Look up the name in the Adobe Glyph List to obtain the Unicode value + + String name = null; + if (encoding != null) + { + name = encoding.getName(code); + unicode = unicodeGlyphList.toUnicode(name); + if (unicode != null) + { + return unicode; + } + } + + // if no value has been produced, there is no way to obtain Unicode for the character. + if (LOG.isWarnEnabled() && !noUnicode.contains(code)) + { + // we keep track of which warnings have been issued, so we don't log multiple times + noUnicode.add(code); + if (name != null) + { + LOG.warn("No Unicode mapping for " + name + " (" + code + ") in font " + + getName()); + } + else + { + LOG.warn("No Unicode mapping for character code " + code + " in font " + + getName()); + } + } + + return null; + } + + @Override + public boolean isVertical() + { + return false; + } + + @Override + protected final float getStandard14Width(int code) + { + if (getStandard14AFM() != null) + { + String nameInAFM = getEncoding().getName(code); + + // the Adobe AFMs don't include .notdef, but Acrobat uses 250, test with PDFBOX-2334 + if (".notdef".equals(nameInAFM)) + { + return 250f; + } + + return getStandard14AFM().getCharacterWidth(nameInAFM); + } + throw new IllegalStateException("No AFM"); + } + + @Override + public boolean isStandard14() + { + // this logic is based on Acrobat's behaviour, see PDFBOX-2372 + // the Encoding entry cannot have Differences if we want "standard 14" font handling + if (getEncoding() instanceof DictionaryEncoding) + { + DictionaryEncoding dictionary = (DictionaryEncoding)getEncoding(); + if (dictionary.getDifferences().size() > 0) + { + // we also require that the differences are actually different, see PDFBOX-1900 with + // the file from PDFBOX-2192 on Windows + Encoding baseEncoding = dictionary.getBaseEncoding(); + for (Map.Entry entry : dictionary.getDifferences().entrySet()) + { + if (!entry.getValue().equals(baseEncoding.getName(entry.getKey()))) + { + return false; + } + } + } + } + return super.isStandard14(); + } + + protected boolean isNonZeroBoundingBox (PDRectangle bbox) + { + return bbox != null && ( + Float.compare(bbox.getLowerLeftX(), 0) != 0 || + Float.compare(bbox.getLowerLeftY(), 0) != 0 || + Float.compare(bbox.getUpperRightX(), 0) != 0 || + Float.compare(bbox.getUpperRightY(), 0) != 0 + ); + } + + /** + * Returns the path for the character with the given name. For some fonts, GIDs may be used + * instead of names when calling this method. + * + * @return glyph path + * @throws IOException if the path could not be read + */ + public abstract GeneralPath getPath(String name) throws IOException; + + /** + * Returns true if the font contains the character with the given name. + * + * @throws IOException if the path could not be read + */ + public abstract boolean hasGlyph(String name) throws IOException; + + /** + * Returns the embedded or system font used for rendering. This is never null. + */ + public abstract FontBoxFont getFontBoxFont(); + + @Override + public void addToSubset(int codePoint) + { + throw new UnsupportedOperationException(); + } + + @Override + public void subset() throws IOException + { + // only TTF subsetting via PDType0Font is currently supported + throw new UnsupportedOperationException(); + } + + @Override + public boolean willBeSubset() + { + return false; + } + + @Override + public boolean hasExplicitWidth(int code) throws IOException + { + if (dict.containsKey(COSName.WIDTHS)) + { + int firstChar = dict.getInt(COSName.FIRST_CHAR, -1); + if (code >= firstChar && code - firstChar < getWidths().size()) + { + return true; + } + } + return false; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java new file mode 100644 index 00000000000..fa0eb98c459 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java @@ -0,0 +1,676 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.ttf.CmapSubtable; +import org.apache.fontbox.ttf.CmapTable; +import org.apache.fontbox.ttf.GlyphData; +import org.apache.fontbox.ttf.PostScriptTable; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.font.encoding.BuiltInEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.pdmodel.font.encoding.MacOSRomanEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding; + + +import static org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint; + +/** + * TrueType font. + * + * @author Ben Litchfield + */ +public class PDTrueTypeFont extends PDSimpleFont implements PDVectorFont +{ + private static final Log LOG = LogFactory.getLog(PDTrueTypeFont.class); + + private static final int START_RANGE_F000 = 0xF000; + private static final int START_RANGE_F100 = 0xF100; + private static final int START_RANGE_F200 = 0xF200; + + private static final Map INVERTED_MACOS_ROMAN = new HashMap<>(250); + static + { + Map codeToName = MacOSRomanEncoding.INSTANCE.getCodeToNameMap(); + for (Map.Entry entry : codeToName.entrySet()) + { + if (!INVERTED_MACOS_ROMAN.containsKey(entry.getValue())) + { + INVERTED_MACOS_ROMAN.put(entry.getValue(), entry.getKey()); + } + } + } + + private final TrueTypeFont ttf; + private final boolean isEmbedded; + private final boolean isDamaged; + private CmapSubtable cmapWinUnicode = null; + private CmapSubtable cmapWinSymbol = null; + private CmapSubtable cmapMacRoman = null; + private boolean cmapInitialized = false; + private Map gidToCode; // for embedding + private BoundingBox fontBBox; + + /** + * Creates a new TrueType font from a Font dictionary. + * + * @param fontDictionary The font dictionary according to the PDF specification. + */ + public PDTrueTypeFont(COSDictionary fontDictionary) throws IOException + { + super(fontDictionary); + + TrueTypeFont ttfFont = null; + boolean fontIsDamaged = false; + if (getFontDescriptor() != null) + { + PDFontDescriptor fd = super.getFontDescriptor(); + PDStream ff2Stream = fd.getFontFile2(); + if (ff2Stream != null) + { + try + { + // embedded + TTFParser ttfParser = new TTFParser(true); + ttfFont = ttfParser.parse(ff2Stream.createInputStream()); + } + catch (NullPointerException | IOException e) + { + // NPE due to TTF parser being buggy + LOG.warn("Could not read embedded TTF for font " + getBaseFont(), e); + fontIsDamaged = true; + } + } + } + isEmbedded = ttfFont != null; + isDamaged = fontIsDamaged; + + // substitute + if (ttfFont == null) + { + FontMapping mapping = FontMappers.instance() + .getTrueTypeFont(getBaseFont(), + getFontDescriptor()); + ttfFont = mapping.getFont(); + + if (mapping.isFallback()) + { + LOG.warn("Using fallback font '" + ttfFont + "' for '" + getBaseFont() + "'"); + } + } + ttf = ttfFont; + readEncoding(); + } + /** + * Creates a new TrueType font for embedding. + */ + private PDTrueTypeFont(PDDocument document, TrueTypeFont ttf, Encoding encoding, + boolean closeTTF) + throws IOException + { + PDTrueTypeFontEmbedder embedder = new PDTrueTypeFontEmbedder(document, dict, ttf, + encoding); + this.encoding = encoding; + this.ttf = ttf; + setFontDescriptor(embedder.getFontDescriptor()); + isEmbedded = true; + isDamaged = false; + glyphList = GlyphList.getAdobeGlyphList(); + if (closeTTF) + { + // the TTF is fully loaded and it is safe to close the underlying data source + ttf.close(); + } + } + + /** + * Loads a TTF to be embedded into a document as a simple font. + * + *

    Note: Simple fonts only support 256 characters. For Unicode support, use + * {@link PDType0Font#load(PDDocument, File)} instead.

    + * + * @param doc The PDF document that will hold the embedded font. + * @param file A TTF file. + * @param encoding The PostScript encoding vector to be used for embedding. + * @return a PDTrueTypeFont instance. + * @throws IOException If there is an error loading the data. + */ + public static PDTrueTypeFont load(PDDocument doc, File file, Encoding encoding) + throws IOException + { + return new PDTrueTypeFont(doc, new TTFParser().parse(file), encoding, true); + } + + /** + * Loads a TTF to be embedded into a document as a simple font. + * + *

    Note: Simple fonts only support 256 characters. For Unicode support, use + * {@link PDType0Font#load(PDDocument, InputStream)} instead.

    + * + * @param doc The PDF document that will hold the embedded font. + * @param input A TTF file stream + * @param encoding The PostScript encoding vector to be used for embedding. + * @return a PDTrueTypeFont instance. + * @throws IOException If there is an error loading the data. + */ + public static PDTrueTypeFont load(PDDocument doc, InputStream input, Encoding encoding) + throws IOException + { + return new PDTrueTypeFont(doc, new TTFParser().parse(input), encoding, true); + } + + /** + * Loads a TTF to be embedded into a document as a simple font. + * + *

    + * Note: Simple fonts only support 256 characters. For Unicode support, use + * {@link PDType0Font#load(PDDocument, InputStream)} instead. + *

    + * + * @param doc The PDF document that will hold the embedded font. + * @param ttf A true type font + * @param encoding The PostScript encoding vector to be used for embedding. + * @return a PDTrueTypeFont instance. + * @throws IOException If there is an error loading the data. + */ + public static PDTrueTypeFont load(PDDocument doc, TrueTypeFont ttf, Encoding encoding) + throws IOException + { + return new PDTrueTypeFont(doc, ttf, encoding, false); + } + + /** + * Returns the PostScript name of the font. + */ + public final String getBaseFont() + { + return dict.getNameAsString(COSName.BASE_FONT); + } + + @Override + protected Encoding readEncodingFromFont() throws IOException + { + if (!isEmbedded() && getStandard14AFM() != null) + { + // read from AFM + return new Type1Encoding(getStandard14AFM()); + } + else + { + // non-symbolic fonts don't have a built-in encoding per se, but there encoding is + // assumed to be StandardEncoding by the PDF spec unless an explicit Encoding is present + // which will override this anyway + if (getSymbolicFlag() != null &&!getSymbolicFlag()) + { + return StandardEncoding.INSTANCE; + } + + // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol" + String standard14Name = Standard14Fonts.getMappedFontName(getName()); + + // likewise, if the font is standard 14 then we know it's Standard Encoding + if (isStandard14() && + !standard14Name.equals("Symbol") && + !standard14Name.equals("ZapfDingbats")) + { + return StandardEncoding.INSTANCE; + } + + // synthesize an encoding, so that getEncoding() is always usable + PostScriptTable post = ttf.getPostScript(); + Map codeToName = new HashMap<>(); + for (int code = 0; code <= 256; code++) + { + int gid = codeToGID(code); + if (gid > 0) + { + String name = null; + if (post != null) + { + name = post.getName(gid); + } + if (name == null) + { + // GID pseudo-name + name = Integer.toString(gid); + } + codeToName.put(code, name); + } + } + return new BuiltInEncoding(codeToName); + } + } + + @Override + public int readCode(InputStream in) throws IOException + { + return in.read(); + } + + @Override + public String getName() + { + return getBaseFont(); + } + + @Override + public BoundingBox getBoundingBox() throws IOException + { + if (fontBBox == null) + { + fontBBox = generateBoundingBox(); + } + return fontBBox; + } + + private BoundingBox generateBoundingBox() throws IOException + { + if (getFontDescriptor() != null) { + PDRectangle bbox = getFontDescriptor().getFontBoundingBox(); + if (bbox != null) + { + return new BoundingBox(bbox.getLowerLeftX(), bbox.getLowerLeftY(), + bbox.getUpperRightX(), bbox.getUpperRightY()); + } + } + return ttf.getFontBBox(); + } + + @Override + public boolean isDamaged() + { + return isDamaged; + } + + /** + * Returns the embedded or substituted TrueType font. + */ + public TrueTypeFont getTrueTypeFont() + { + return ttf; + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + int gid = codeToGID(code); + float width = ttf.getAdvanceWidth(gid); + float unitsPerEM = ttf.getUnitsPerEm(); + if (Float.compare(unitsPerEM, 1000) != 0) + { + width *= 1000f / unitsPerEM; + } + return width; + } + + @Override + public float getHeight(int code) throws IOException + { + int gid = codeToGID(code); + GlyphData glyph = ttf.getGlyph().getGlyph(gid); + if (glyph != null) + { + return glyph.getBoundingBox().getHeight(); + } + return 0; + } + + @Override + protected byte[] encode(int unicode) throws IOException + { + if (encoding != null) + { + if (!encoding.contains(getGlyphList().codePointToName(unicode))) + { + throw new IllegalArgumentException( + String.format("U+%04X is not available in this font's encoding: %s", + unicode, encoding.getEncodingName())); + } + + String name = getGlyphList().codePointToName(unicode); + Map inverted = encoding.getNameToCodeMap(); + + if (!ttf.hasGlyph(name)) + { + // try unicode name + String uniName = getUniNameOfCodePoint(unicode); + if (!ttf.hasGlyph(uniName)) + { + throw new IllegalArgumentException( + String.format("No glyph for U+%04X in font %s", unicode, getName())); + } + } + + int code = inverted.get(name); + return new byte[] { (byte)code }; + } + else + { + // use TTF font's built-in encoding + String name = getGlyphList().codePointToName(unicode); + + if (!ttf.hasGlyph(name)) + { + throw new IllegalArgumentException( + String.format("No glyph for U+%04X in font %s", unicode, getName())); + } + + int gid = ttf.nameToGID(name); + Integer code = getGIDToCode().get(gid); + if (code == null) + { + throw new IllegalArgumentException( + String.format("U+%04X is not available in this font's Encoding", unicode)); + } + + return new byte[] { (byte)(int)code }; + } + } + + /** + * Inverts the font's code -> GID mapping. Any duplicate (GID -> code) mappings will be lost. + */ + protected Map getGIDToCode() throws IOException + { + if (gidToCode != null) + { + return gidToCode; + } + + gidToCode = new HashMap<>(); + for (int code = 0; code <= 255; code++) + { + int gid = codeToGID(code); + if (!gidToCode.containsKey(gid)) + { + gidToCode.put(gid, code); + } + } + return gidToCode; + } + + @Override + public boolean isEmbedded() + { + return isEmbedded; + } + + @Override + public GeneralPath getPath(int code) throws IOException + { + int gid = codeToGID(code); + GlyphData glyph = ttf.getGlyph().getGlyph(gid); + + // some glyphs have no outlines (e.g. space, table, newline) + if (glyph == null) + { + return new GeneralPath(); + } + else + { + return glyph.getPath(); + } + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + // handle glyph names and uniXXXX names + int gid = ttf.nameToGID(name); + if (gid == 0) + { + try + { + // handle GID pseudo-names + gid = Integer.parseInt(name); + if (gid > ttf.getNumberOfGlyphs()) + { + gid = 0; + } + } + catch (NumberFormatException e) + { + gid = 0; + } + } + // I'm assuming .notdef paths are not drawn, as it PDFBOX-2421 + if (gid == 0) + { + return new GeneralPath(); + } + + GlyphData glyph = ttf.getGlyph().getGlyph(gid); + if (glyph != null) + { + return glyph.getPath(); + } + else + { + return new GeneralPath(); + } + } + + @Override + public GeneralPath getNormalizedPath(int code) throws IOException + { + boolean hasScaling = ttf.getUnitsPerEm() != 1000; + float scale = 1000f / ttf.getUnitsPerEm(); + int gid = codeToGID(code); + + GeneralPath path = getPath(code); + + // Acrobat only draws GID 0 for embedded or "Standard 14" fonts, see PDFBOX-2372 + if (gid == 0 && !isEmbedded() && !isStandard14()) + { + path = null; + } + + if (path == null) + { + // empty glyph (e.g. space, newline) + return new GeneralPath(); + } + else + { + if (hasScaling) + { + path.transform(AffineTransform.getScaleInstance(scale, scale)); + } + return path; + } + } + + @Override + public boolean hasGlyph(String name) throws IOException + { + int gid = ttf.nameToGID(name); + return !(gid == 0 || gid >= ttf.getMaximumProfile().getNumGlyphs()); + } + + @Override + public FontBoxFont getFontBoxFont() + { + return ttf; + } + + @Override + public boolean hasGlyph(int code) throws IOException + { + return codeToGID(code) != 0; + } + + /** + * Returns the GID for the given character code. + * + * @param code character code + * @return GID (glyph index) + * @throws java.io.IOException + */ + public int codeToGID(int code) throws IOException + { + extractCmapTable(); + int gid = 0; + + if (!isSymbolic()) // non-symbolic + { + String name = encoding.getName(code); + if (".notdef".equals(name)) + { + return 0; + } + else + { + // (3, 1) - (Windows, Unicode) + if (cmapWinUnicode != null) + { + String unicode = GlyphList.getAdobeGlyphList().toUnicode(name); + if (unicode != null) + { + int uni = unicode.codePointAt(0); + gid = cmapWinUnicode.getGlyphId(uni); + } + } + + // (1, 0) - (Macintosh, Roman) + if (gid == 0 && cmapMacRoman != null) + { + Integer macCode = INVERTED_MACOS_ROMAN.get(name); + if (macCode != null) + { + gid = cmapMacRoman.getGlyphId(macCode); + } + } + + // 'post' table + if (gid == 0) + { + gid = ttf.nameToGID(name); + } + } + } + else // symbolic + { + // (3, 0) - (Windows, Symbol) + if (cmapWinSymbol != null) + { + gid = cmapWinSymbol.getGlyphId(code); + if (code >= 0 && code <= 0xFF) + { + // the CMap may use one of the following code ranges, + // so that we have to add the high byte to get the + // mapped value + if (gid == 0) + { + // F000 - F0FF + gid = cmapWinSymbol.getGlyphId(code + START_RANGE_F000); + } + if (gid == 0) + { + // F100 - F1FF + gid = cmapWinSymbol.getGlyphId(code + START_RANGE_F100); + } + if (gid == 0) + { + // F200 - F2FF + gid = cmapWinSymbol.getGlyphId(code + START_RANGE_F200); + } + } + } + + // (1, 0) - (Mac, Roman) + if (gid == 0 && cmapMacRoman != null) + { + gid = cmapMacRoman.getGlyphId(code); + } + + // PDFBOX-3965: fallback for font has that the symbol flag but isn't + if (gid == 0 && cmapWinUnicode != null && encoding != null) + { + String name = encoding.getName(code); + if (".notdef".equals(name)) + { + return 0; + } + String unicode = GlyphList.getAdobeGlyphList().toUnicode(name); + if (unicode != null) + { + int uni = unicode.codePointAt(0); + gid = cmapWinUnicode.getGlyphId(uni); + } + } + } + + return gid; + } + + /** + * extract all useful "cmap" subtables. + */ + private void extractCmapTable() throws IOException + { + if (cmapInitialized) + { + return; + } + + CmapTable cmapTable = ttf.getCmap(); + if (cmapTable != null) + { + // get all relevant "cmap" subtables + CmapSubtable[] cmaps = cmapTable.getCmaps(); + for (CmapSubtable cmap : cmaps) + { + if (CmapTable.PLATFORM_WINDOWS == cmap.getPlatformId()) + { + if (CmapTable.ENCODING_WIN_UNICODE_BMP == cmap.getPlatformEncodingId()) + { + cmapWinUnicode = cmap; + } + else if (CmapTable.ENCODING_WIN_SYMBOL == cmap.getPlatformEncodingId()) + { + cmapWinSymbol = cmap; + } + } + else if (CmapTable.PLATFORM_MACINTOSH == cmap.getPlatformId() + && CmapTable.ENCODING_MAC_ROMAN == cmap.getPlatformEncodingId()) + { + cmapMacRoman = cmap; + } + } + } + cmapInitialized = true; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java new file mode 100644 index 00000000000..b9cce291916 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import org.apache.fontbox.ttf.HorizontalMetricsTable; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; + +/** + * Embedded PDTrueTypeFont builder. Helper class to populate a PDTrueTypeFont from a TTF. + * + * @author John Hewson + * @author Ben Litchfield + */ +final class PDTrueTypeFontEmbedder extends TrueTypeEmbedder +{ + private final Encoding fontEncoding; + + /** + * Creates a new TrueType font embedder for the given TTF as a PDTrueTypeFont. + * + * @param document The parent document + * @param dict Font dictionary + * @param ttfStream TTF stream + * @param encoding The PostScript encoding vector to be used for embedding. + * @throws IOException if the TTF could not be read + */ + PDTrueTypeFontEmbedder(PDDocument document, COSDictionary dict, TrueTypeFont ttf, + Encoding encoding) throws IOException + { + super(document, dict, ttf, false); + dict.setItem(COSName.SUBTYPE, COSName.TRUE_TYPE); + + GlyphList glyphList = GlyphList.getAdobeGlyphList(); + this.fontEncoding = encoding; + dict.setItem(COSName.ENCODING, encoding.getCOSObject()); + fontDescriptor.setSymbolic(false); + fontDescriptor.setNonSymbolic(true); + + // add the font descriptor + dict.setItem(COSName.FONT_DESC, fontDescriptor); + + // set the glyph widths + setWidths(dict, glyphList); + } + + /** + * Sets the glyph widths in the font dictionary. + */ + private void setWidths(COSDictionary font, GlyphList glyphList) throws IOException + { + float scaling = 1000f / ttf.getHeader().getUnitsPerEm(); + HorizontalMetricsTable hmtx = ttf.getHorizontalMetrics(); + + Map codeToName = getFontEncoding().getCodeToNameMap(); + + int firstChar = Collections.min(codeToName.keySet()); + int lastChar = Collections.max(codeToName.keySet()); + + List widths = new ArrayList<>(lastChar - firstChar + 1); + for (int i = 0; i < lastChar - firstChar + 1; i++) + { + widths.add(0); + } + + // a character code is mapped to a glyph name via the provided font encoding + // afterwards, the glyph name is translated to a glyph ID. + for (Map.Entry entry : codeToName.entrySet()) + { + int code = entry.getKey(); + String name = entry.getValue(); + + if (code >= firstChar && code <= lastChar) + { + String uni = glyphList.toUnicode(name); + int charCode = uni.codePointAt(0); + int gid = cmapLookup.getGlyphId(charCode); + widths.set(entry.getKey() - firstChar, + Math.round(hmtx.getAdvanceWidth(gid) * scaling)); + } + } + + font.setInt(COSName.FIRST_CHAR, firstChar); + font.setInt(COSName.LAST_CHAR, lastChar); + font.setItem(COSName.WIDTHS, COSArrayList.converterToCOSArray(widths)); + } + + /** + * Returns the font's encoding. + */ + public Encoding getFontEncoding() + { + return fontEncoding; + } + + @Override + protected void buildSubset(InputStream ttfSubset, String tag, + Map gidToCid) throws IOException + { + // use PDType0Font instead + throw new UnsupportedOperationException(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java new file mode 100644 index 00000000000..c6f514cd1ab --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java @@ -0,0 +1,625 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.GeneralPath; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.cmap.CMap; +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.ttf.model.GsubData; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * A Composite (Type 0) font. + * + * @author Ben Litchfield + */ +public class PDType0Font extends PDFont implements PDVectorFont +{ + private static final Log LOG = LogFactory.getLog(PDType0Font.class); + + private final PDCIDFont descendantFont; + private final Set noUnicode = new HashSet<>(); + private final GsubData gsubData; + private final CmapLookup cmapLookup; + private CMap cMap, cMapUCS2; + private boolean isCMapPredefined; + private boolean isDescendantCJK; + private PDCIDFontType2Embedder embedder; + private TrueTypeFont ttf; + + /** + * Constructor for reading a Type0 font from a PDF file. + * + * @param fontDictionary The font dictionary according to the PDF specification. + * @throws IOException if the descendant font is missing. + */ + public PDType0Font(COSDictionary fontDictionary) throws IOException + { + super(fontDictionary); + + gsubData = GsubData.NO_DATA_FOUND; + cmapLookup = null; + + COSBase base = dict.getDictionaryObject(COSName.DESCENDANT_FONTS); + if (!(base instanceof COSArray)) + { + throw new IOException("Missing descendant font array"); + } + COSArray descendantFonts = (COSArray) base; + if (descendantFonts.size() == 0) + { + throw new IOException("Descendant font array is empty"); + } + COSBase descendantFontDictBase = descendantFonts.getObject(0); + if (!(descendantFontDictBase instanceof COSDictionary)) + { + throw new IOException("Missing descendant font dictionary"); + } + descendantFont = PDFontFactory.createDescendantFont((COSDictionary) descendantFontDictBase, this); + readEncoding(); + fetchCMapUCS2(); + } + + /** + * Private. Creates a new PDType0Font font for embedding. + * + * @param document + * @param ttf + * @param embedSubset + * @param closeTTF whether to close the ttf parameter after embedding. Must be true when the ttf + * parameter was created in the load() method, false when the ttf parameter was passed to the + * load() method. + * @param vertical + * @throws IOException + */ + private PDType0Font(PDDocument document, TrueTypeFont ttf, boolean embedSubset, + boolean closeTTF, boolean vertical) throws IOException + { + if (vertical) + { + ttf.enableVerticalSubstitutions(); + } + + gsubData = ttf.getGsubData(); + cmapLookup = ttf.getUnicodeCmapLookup(); + + embedder = new PDCIDFontType2Embedder(document, dict, ttf, embedSubset, this, vertical); + descendantFont = embedder.getCIDFont(); + readEncoding(); + fetchCMapUCS2(); + if (closeTTF) + { + if (embedSubset) + { + this.ttf = ttf; + document.registerTrueTypeFontForClosing(ttf); + } + else + { + // the TTF is fully loaded and it is safe to close the underlying data source + ttf.close(); + } + } + } + + /** + * Loads a TTF to be embedded into a document as a Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param file A TrueType font. + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font file. + */ + public static PDType0Font load(PDDocument doc, File file) throws IOException + { + return new PDType0Font(doc, new TTFParser().parse(file), true, true, false); + } + + /** + * Loads a TTF to be embedded into a document as a Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param input An input stream of a TrueType font. It will be closed before returning. + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font stream. + */ + public static PDType0Font load(PDDocument doc, InputStream input) throws IOException + { + return new PDType0Font(doc, new TTFParser().parse(input), true, true, false); + } + + /** + * Loads a TTF to be embedded into a document as a Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param input An input stream of a TrueType font. It will be closed before returning. + * @param embedSubset True if the font will be subset before embedding + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font stream. + */ + public static PDType0Font load(PDDocument doc, InputStream input, boolean embedSubset) + throws IOException + { + return new PDType0Font(doc, new TTFParser().parse(input), embedSubset, true, false); + } + + /** + * Loads a TTF to be embedded into a document as a Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param ttf A TrueType font. + * @param embedSubset True if the font will be subset before embedding + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font stream. + */ + public static PDType0Font load(PDDocument doc, TrueTypeFont ttf, boolean embedSubset) + throws IOException + { + return new PDType0Font(doc, ttf, embedSubset, false, false); + } + + /** + * Loads a TTF to be embedded into a document as a vertical Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param file A TrueType font. + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font file. + */ + public static PDType0Font loadVertical(PDDocument doc, File file) throws IOException + { + return new PDType0Font(doc, new TTFParser().parse(file), true, true, true); + } + + /** + * Loads a TTF to be embedded into a document as a vertical Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param input A TrueType font. + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font stream. + */ + public static PDType0Font loadVertical(PDDocument doc, InputStream input) throws IOException + { + return new PDType0Font(doc, new TTFParser().parse(input), true, true, true); + } + + /** + * Loads a TTF to be embedded into a document as a vertical Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param input A TrueType font. + * @param embedSubset True if the font will be subset before embedding + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font stream. + */ + public static PDType0Font loadVertical(PDDocument doc, InputStream input, boolean embedSubset) + throws IOException + { + return new PDType0Font(doc, new TTFParser().parse(input), embedSubset, true, true); + } + + /** + * Loads a TTF to be embedded into a document as a vertical Type 0 font. + * + * @param doc The PDF document that will hold the embedded font. + * @param ttf A TrueType font. + * @param embedSubset True if the font will be subset before embedding + * @return A Type0 font with a CIDFontType2 descendant. + * @throws IOException If there is an error reading the font stream. + */ + public static PDType0Font loadVertical(PDDocument doc, TrueTypeFont ttf, boolean embedSubset) + throws IOException + { + return new PDType0Font(doc, ttf, embedSubset, false, true); + } + + @Override + public void addToSubset(int codePoint) + { + if (!willBeSubset()) + { + throw new IllegalStateException("This font was created with subsetting disabled"); + } + embedder.addToSubset(codePoint); + } + + public void addGlyphsToSubset(Set glyphIds) + { + if (!willBeSubset()) + { + throw new IllegalStateException("This font was created with subsetting disabled"); + } + embedder.addGlyphIds(glyphIds); + } + + @Override + public void subset() throws IOException + { + if (!willBeSubset()) + { + throw new IllegalStateException("This font was created with subsetting disabled"); + } + embedder.subset(); + if (ttf != null) + { + ttf.close(); + ttf = null; + } + } + + @Override + public boolean willBeSubset() + { + return embedder != null && embedder.needsSubset(); + } + + /** + * Reads the font's Encoding entry, which should be a CMap name/stream. + */ + private void readEncoding() throws IOException + { + COSBase encoding = dict.getDictionaryObject(COSName.ENCODING); + if (encoding instanceof COSName) + { + // predefined CMap + COSName encodingName = (COSName) encoding; + cMap = CMapManager.getPredefinedCMap(encodingName.getName()); + if (cMap != null) + { + isCMapPredefined = true; + } + else + { + throw new IOException("Missing required CMap"); + } + } + else if (encoding != null) + { + cMap = readCMap(encoding); + if (cMap == null) + { + throw new IOException("Missing required CMap"); + } + else if (!cMap.hasCIDMappings()) + { + LOG.warn("Invalid Encoding CMap in font " + getName()); + } + } + + // check if the descendant font is CJK + PDCIDSystemInfo ros = descendantFont.getCIDSystemInfo(); + if (ros != null) + { + isDescendantCJK = "Adobe".equals(ros.getRegistry()) && + ("GB1".equals(ros.getOrdering()) || + "CNS1".equals(ros.getOrdering()) || + "Japan1".equals(ros.getOrdering()) || + "Korea1".equals(ros.getOrdering())); + } + } + + /** + * Fetches the corresponding UCS2 CMap if the font's CMap is predefined. + */ + private void fetchCMapUCS2() throws IOException + { + // if the font is composite and uses a predefined cmap (excluding Identity-H/V) + // or whose descendant CIDFont uses the Adobe-GB1, Adobe-CNS1, Adobe-Japan1, or + // Adobe-Korea1 character collection: + COSName name = dict.getCOSName(COSName.ENCODING); + if (isCMapPredefined && !(name == COSName.IDENTITY_H || name == COSName.IDENTITY_V) || + isDescendantCJK) + { + // a) Map the character code to a CID using the font's CMap + // b) Obtain the ROS from the font's CIDSystemInfo + // c) Construct a second CMap name by concatenating the ROS in the format "R-O-UCS2" + // d) Obtain the CMap with the constructed name + // e) Map the CID according to the CMap from step d), producing a Unicode value + + // todo: not sure how to interpret the PDF spec here, do we always override? or only when Identity-H/V? + String strName = null; + if (isDescendantCJK) + { + strName = descendantFont.getCIDSystemInfo().getRegistry() + "-" + + descendantFont.getCIDSystemInfo().getOrdering() + "-" + + descendantFont.getCIDSystemInfo().getSupplement(); + } + else if (name != null) + { + strName = name.getName(); + } + + // try to find the corresponding Unicode (UC2) CMap + if (strName != null) + { + CMap prdCMap = CMapManager.getPredefinedCMap(strName); + String ucs2Name = prdCMap.getRegistry() + "-" + prdCMap.getOrdering() + "-UCS2"; + cMapUCS2 = CMapManager.getPredefinedCMap(ucs2Name); + } + } + } + + /** + * Returns the PostScript name of the font. + */ + public String getBaseFont() + { + return dict.getNameAsString(COSName.BASE_FONT); + } + + /** + * Returns the descendant font. + */ + public PDCIDFont getDescendantFont() + { + return descendantFont; + } + + /** + * Returns the font's CMap. + */ + public CMap getCMap() + { + return cMap; + } + + /** + * Returns the font's UCS2 CMap, only present this font uses a predefined CMap. + */ + public CMap getCMapUCS2() + { + return cMapUCS2; + } + + @Override + public PDFontDescriptor getFontDescriptor() + { + return descendantFont.getFontDescriptor(); + } + + @Override + public Matrix getFontMatrix() + { + return descendantFont.getFontMatrix(); + } + + @Override + public boolean isVertical() + { + return cMap.getWMode() == 1; + } + + @Override + public float getHeight(int code) throws IOException + { + return descendantFont.getHeight(code); + } + + @Override + protected byte[] encode(int unicode) throws IOException + { + return descendantFont.encode(unicode); + } + + @Override + public boolean hasExplicitWidth(int code) throws IOException + { + return descendantFont.hasExplicitWidth(code); + } + + @Override + public float getAverageFontWidth() + { + return descendantFont.getAverageFontWidth(); + } + + @Override + public Vector getPositionVector(int code) + { + // units are always 1/1000 text space, font matrix is not used, see FOP-2252 + return descendantFont.getPositionVector(code).scale(-1 / 1000f); + } + + @Override + public Vector getDisplacement(int code) throws IOException + { + if (isVertical()) + { + return new Vector(0, descendantFont.getVerticalDisplacementVectorY(code) / 1000f); + } + else + { + return super.getDisplacement(code); + } + } + + @Override + public float getWidth(int code) throws IOException + { + return descendantFont.getWidth(code); + } + + @Override + protected float getStandard14Width(int code) + { + throw new UnsupportedOperationException("not suppported"); + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + return descendantFont.getWidthFromFont(code); + } + + @Override + public boolean isEmbedded() + { + return descendantFont.isEmbedded(); + } + + @Override + public String toUnicode(int code) throws IOException + { + // try to use a ToUnicode CMap + String unicode = super.toUnicode(code); + if (unicode != null) + { + return unicode; + } + + if ((isCMapPredefined || isDescendantCJK) && cMapUCS2 != null) + { + // if the font is composite and uses a predefined cmap (excluding Identity-H/V) then + // or if its decendant font uses Adobe-GB1/CNS1/Japan1/Korea1 + + // a) Map the character code to a character identifier (CID) according to the font?s CMap + int cid = codeToCID(code); + + // e) Map the CID according to the CMap from step d), producing a Unicode value + return cMapUCS2.toUnicode(cid); + } + else + { + if (LOG.isWarnEnabled() && !noUnicode.contains(code)) + { + // if no value has been produced, there is no way to obtain Unicode for the character. + String cid = "CID+" + codeToCID(code); + LOG.warn("No Unicode mapping for " + cid + " (" + code + ") in font " + getName()); + // we keep track of which warnings have been issued, so we don't log multiple times + noUnicode.add(code); + } + return null; + } + } + + @Override + public String getName() + { + return getBaseFont(); + } + + @Override + public BoundingBox getBoundingBox() throws IOException + { + // Will be cached by underlying font + return descendantFont.getBoundingBox(); + } + + @Override + public int readCode(InputStream in) throws IOException + { + return cMap.readCode(in); + } + + /** + * Returns the CID for the given character code. If not found then CID 0 is returned. + * + * @param code character code + * @return CID + */ + public int codeToCID(int code) + { + return descendantFont.codeToCID(code); + } + + /** + * Returns the GID for the given character code. + * + * @param code character code + * @return GID + */ + public int codeToGID(int code) throws IOException + { + return descendantFont.codeToGID(code); + } + + @Override + public boolean isStandard14() + { + return false; + } + + @Override + public boolean isDamaged() + { + return descendantFont.isDamaged(); + } + + @Override + public String toString() + { + String descendant = null; + if (getDescendantFont() != null) + { + descendant = getDescendantFont().getClass().getSimpleName(); + } + return getClass().getSimpleName() + "/" + descendant + ", PostScript name: " + getBaseFont(); + } + + @Override + public GeneralPath getPath(int code) throws IOException + { + return descendantFont.getPath(code); + } + + + @Override + public GeneralPath getNormalizedPath(int code) throws IOException + { + return descendantFont.getNormalizedPath(code); + } + + @Override + public boolean hasGlyph(int code) throws IOException + { + return descendantFont.hasGlyph(code); + } + + public GsubData getGsubData() + { + return gsubData; + } + + public byte[] encodeGlyphId(int glyphId) + { + return descendantFont.encodeGlyphId(glyphId); + } + + public CmapLookup getCmapLookup() + { + return cmapLookup; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java new file mode 100644 index 00000000000..932bfc24894 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java @@ -0,0 +1,430 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.EncodedFont; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.cff.CFFParser; +import org.apache.fontbox.cff.CFFType1Font; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding; +import org.apache.pdfbox.util.Matrix; + + +import static org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint; + +/** + * Type 1-equivalent CFF font. + * + * @author Villu Ruusmann + * @author John Hewson + */ +public class PDType1CFont extends PDSimpleFont implements PDVectorFont +{ + private static final Log LOG = LogFactory.getLog(PDType1CFont.class); + + private final Map glyphHeights = new HashMap<>(); + private final AffineTransform fontMatrixTransform; + private final CFFType1Font cffFont; // embedded font + private final FontBoxFont genericFont; // embedded or system font for rendering + private final boolean isEmbedded; + private final boolean isDamaged; + private Float avgWidth = null; + private Matrix fontMatrix; + private BoundingBox fontBBox; + + /** + * Constructor. + * + * @param fontDictionary the corresponding dictionary + * @throws IOException it something went wrong + */ + public PDType1CFont(COSDictionary fontDictionary) throws IOException + { + super(fontDictionary); + + PDFontDescriptor fd = getFontDescriptor(); + byte[] bytes = null; + if (fd != null) + { + PDStream ff3Stream = fd.getFontFile3(); + if (ff3Stream != null) + { + bytes = IOUtils.toByteArray(ff3Stream.createInputStream()); + if (bytes.length == 0) + { + LOG.error("Invalid data for embedded Type1C font " + getName()); + bytes = null; + } + } + } + + boolean fontIsDamaged = false; + CFFType1Font cffEmbedded = null; + try + { + if (bytes != null) + { + // note: this could be an OpenType file, fortunately CFFParser can handle that + CFFParser cffParser = new CFFParser(); + cffEmbedded = (CFFType1Font)cffParser.parse(bytes, new ByteSource()).get(0); + } + } + catch (IOException e) + { + LOG.error("Can't read the embedded Type1C font " + getName(), e); + fontIsDamaged = true; + } + isDamaged = fontIsDamaged; + cffFont = cffEmbedded; + + if (cffFont != null) + { + genericFont = cffFont; + isEmbedded = true; + } + else + { + FontMapping mapping = FontMappers.instance() + .getFontBoxFont(getBaseFont(), fd); + genericFont = mapping.getFont(); + + if (mapping.isFallback()) + { + LOG.warn("Using fallback font " + genericFont.getName() + " for " + getBaseFont()); + } + isEmbedded = false; + } + readEncoding(); + fontMatrixTransform = getFontMatrix().createAffineTransform(); + fontMatrixTransform.scale(1000, 1000); + } + + @Override + public FontBoxFont getFontBoxFont() + { + return genericFont; + } + + /** + * Returns the PostScript name of the font. + */ + public final String getBaseFont() + { + return dict.getNameAsString(COSName.BASE_FONT); + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + // Acrobat only draws .notdef for embedded or "Standard 14" fonts, see PDFBOX-2372 + if (name.equals(".notdef") && !isEmbedded() && !isStandard14()) + { + return new GeneralPath(); + } + else + { + return genericFont.getPath(name); + } + } + + @Override + public boolean hasGlyph(int code) throws IOException + { + String name = getEncoding().getName(code); + name = getNameInFont(name); + return hasGlyph(name); + } + + @Override + public GeneralPath getPath(int code) throws IOException + { + String name = getEncoding().getName(code); + name = getNameInFont(name); + return getPath(name); + } + + @Override + public GeneralPath getNormalizedPath(int code) throws IOException + { + String name = getEncoding().getName(code); + name = getNameInFont(name); + GeneralPath path = getPath(name); + if (path == null) + { + return getPath(".notdef"); + } + return path; + } + + @Override + public boolean hasGlyph(String name) throws IOException + { + return genericFont.hasGlyph(name); + } + + @Override + public final String getName() + { + return getBaseFont(); + } + + @Override + public BoundingBox getBoundingBox() throws IOException + { + if (fontBBox == null) + { + fontBBox = generateBoundingBox(); + } + return fontBBox; + } + + private BoundingBox generateBoundingBox() throws IOException + { + if (getFontDescriptor() != null) { + PDRectangle bbox = getFontDescriptor().getFontBoundingBox(); + if (isNonZeroBoundingBox(bbox)) + { + return new BoundingBox(bbox.getLowerLeftX(), bbox.getLowerLeftY(), + bbox.getUpperRightX(), bbox.getUpperRightY()); + } + } + return genericFont.getFontBBox(); + } + + //@Override + public String codeToName(int code) + { + return getEncoding().getName(code); + } + + @Override + protected Encoding readEncodingFromFont() throws IOException + { + if (!isEmbedded() && getStandard14AFM() != null) + { + // read from AFM + return new Type1Encoding(getStandard14AFM()); + } + else + { + // extract from Type1 font/substitute + if (genericFont instanceof EncodedFont) + { + return Type1Encoding.fromFontBox(((EncodedFont) genericFont).getEncoding()); + } + else + { + // default (only happens with TTFs) + return StandardEncoding.INSTANCE; + } + } + } + + @Override + public int readCode(InputStream in) throws IOException + { + return in.read(); + } + + @Override + public final Matrix getFontMatrix() + { + if (fontMatrix == null) + { + List numbers = null; + try + { + numbers = genericFont.getFontMatrix(); + } + catch (IOException e) + { + LOG.debug("Couldn't get font matrix - returning default value", e); + fontMatrix = DEFAULT_FONT_MATRIX; + } + + if (numbers != null && numbers.size() == 6) + { + fontMatrix = new Matrix( + numbers.get(0).floatValue(), numbers.get(1).floatValue(), + numbers.get(2).floatValue(), numbers.get(3).floatValue(), + numbers.get(4).floatValue(), numbers.get(5).floatValue()); + } + else + { + return super.getFontMatrix(); + } + } + return fontMatrix; + } + + @Override + public boolean isDamaged() + { + return isDamaged; + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + String name = codeToName(code); + name = getNameInFont(name); + float width = genericFont.getWidth(name); + + Point2D p = new Point2D.Float(width, 0); + fontMatrixTransform.transform(p, p); + return (float)p.getX(); + } + + @Override + public boolean isEmbedded() + { + return isEmbedded; + } + + @Override + public float getHeight(int code) throws IOException + { + String name = codeToName(code); + float height = 0; + if (!glyphHeights.containsKey(name)) + { + height = (float)cffFont.getType1CharString(name).getBounds().getHeight(); // todo: cffFont could be null + glyphHeights.put(name, height); + } + return height; + } + + @Override + protected byte[] encode(int unicode) throws IOException + { + String name = getGlyphList().codePointToName(unicode); + if (!encoding.contains(name)) + { + throw new IllegalArgumentException( + String.format("U+%04X ('%s') is not available in this font's encoding: %s", + unicode, name, encoding.getEncodingName())); + } + + String nameInFont = getNameInFont(name); + + Map inverted = encoding.getNameToCodeMap(); + + if (nameInFont.equals(".notdef") || !genericFont.hasGlyph(nameInFont)) + { + throw new IllegalArgumentException( + String.format("No glyph for U+%04X in font %s", unicode, getName())); + } + + int code = inverted.get(name); + return new byte[] { (byte)code }; + } + + @Override + public float getStringWidth(String string) throws IOException + { + float width = 0; + for (int i = 0; i < string.length(); i++) + { + int codePoint = string.codePointAt(i); + String name = getGlyphList().codePointToName(codePoint); + width += cffFont.getType1CharString(name).getWidth(); + } + return width; + } + + @Override + public float getAverageFontWidth() + { + if (avgWidth == null) + { + avgWidth = getAverageCharacterWidth(); + } + return avgWidth; + } + + /** + * Returns the embedded Type 1-equivalent CFF font. + * + * @return the cffFont + */ + public CFFType1Font getCFFType1Font() + { + return cffFont; + } + + // todo: this is a replacement for FontMetrics method + private float getAverageCharacterWidth() + { + // todo: not implemented, highly suspect + return 500; + } + + /** + * Maps a PostScript glyph name to the name in the underlying font, for example when + * using a TTF font we might map "W" to "uni0057". + */ + private String getNameInFont(String name) throws IOException + { + if (isEmbedded() || genericFont.hasGlyph(name)) + { + return name; + } + else + { + // try unicode name + String unicodes = getGlyphList().toUnicode(name); + if (unicodes != null && unicodes.length() == 1) + { + String uniName = getUniNameOfCodePoint(unicodes.codePointAt(0)); + if (genericFont.hasGlyph(uniName)) + { + return uniName; + } + } + } + return ".notdef"; + } + + private class ByteSource implements CFFParser.ByteSource + { + @Override + public byte[] getBytes() throws IOException + { + PDStream ff3Stream = getFontDescriptor().getFontFile3(); + return IOUtils.toByteArray(ff3Stream.createInputStream()); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java new file mode 100644 index 00000000000..a341edd31b4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java @@ -0,0 +1,709 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.Point2D; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.EncodedFont; +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.type1.DamagedFontException; +import org.apache.fontbox.type1.Type1Font; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.ZapfDingbatsEncoding; +import org.apache.pdfbox.util.Matrix; + + +import static org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint; +import org.apache.pdfbox.pdmodel.font.encoding.SymbolEncoding; + +/** + * A PostScript Type 1 Font. + * + * @author Ben Litchfield + */ +public class PDType1Font extends PDSimpleFont implements PDVectorFont +{ + private static final Log LOG = LogFactory.getLog(PDType1Font.class); + + // todo: replace with enum? or getters? + public static final PDType1Font TIMES_ROMAN = new PDType1Font("Times-Roman"); + public static final PDType1Font TIMES_BOLD = new PDType1Font("Times-Bold"); + public static final PDType1Font TIMES_ITALIC = new PDType1Font("Times-Italic"); + public static final PDType1Font TIMES_BOLD_ITALIC = new PDType1Font("Times-BoldItalic"); + public static final PDType1Font HELVETICA = new PDType1Font("Helvetica"); + public static final PDType1Font HELVETICA_BOLD = new PDType1Font("Helvetica-Bold"); + public static final PDType1Font HELVETICA_OBLIQUE = new PDType1Font("Helvetica-Oblique"); + public static final PDType1Font HELVETICA_BOLD_OBLIQUE = new PDType1Font("Helvetica-BoldOblique"); + public static final PDType1Font COURIER = new PDType1Font("Courier"); + public static final PDType1Font COURIER_BOLD = new PDType1Font("Courier-Bold"); + public static final PDType1Font COURIER_OBLIQUE = new PDType1Font("Courier-Oblique"); + public static final PDType1Font COURIER_BOLD_OBLIQUE = new PDType1Font("Courier-BoldOblique"); + public static final PDType1Font SYMBOL = new PDType1Font("Symbol"); + public static final PDType1Font ZAPF_DINGBATS = new PDType1Font("ZapfDingbats"); + + // alternative names for glyphs which are commonly encountered + private static final Map ALT_NAMES = new HashMap<>(); + private static final int PFB_START_MARKER = 0x80; + + static + { + ALT_NAMES.put("ff", "f_f"); + ALT_NAMES.put("ffi", "f_f_i"); + ALT_NAMES.put("ffl", "f_f_l"); + ALT_NAMES.put("fi", "f_i"); + ALT_NAMES.put("fl", "f_l"); + ALT_NAMES.put("st", "s_t"); + ALT_NAMES.put("IJ", "I_J"); + ALT_NAMES.put("ij", "i_j"); + ALT_NAMES.put("ellipsis", "elipsis"); // misspelled in ArialMT + } + + /** + * embedded font. + */ + private final Type1Font type1font; + + /** + * embedded or system font for rendering. + */ + private final FontBoxFont genericFont; + + private final boolean isEmbedded; + private final boolean isDamaged; + private final AffineTransform fontMatrixTransform; + /** + * to improve encoding speed. + */ + private final Map codeToBytesMap; + private Matrix fontMatrix; + private BoundingBox fontBBox; + + /** + * Creates a Type 1 standard 14 font for embedding. + * + * @param baseFont One of the standard 14 PostScript names + */ + private PDType1Font(String baseFont) + { + super(baseFont); + + dict.setItem(COSName.SUBTYPE, COSName.TYPE1); + dict.setName(COSName.BASE_FONT, baseFont); + switch (baseFont) + { + case "ZapfDingbats": + encoding = ZapfDingbatsEncoding.INSTANCE; + break; + case "Symbol": + encoding = SymbolEncoding.INSTANCE; + break; + default: + encoding = WinAnsiEncoding.INSTANCE; + dict.setItem(COSName.ENCODING, COSName.WIN_ANSI_ENCODING); + break; + } + + // standard 14 fonts may be accessed concurrently, as they are singletons + codeToBytesMap = new ConcurrentHashMap<>(); + + // todo: could load the PFB font here if we wanted to support Standard 14 embedding + type1font = null; + FontMapping mapping = FontMappers.instance() + .getFontBoxFont(getBaseFont(), + getFontDescriptor()); + genericFont = mapping.getFont(); + + if (mapping.isFallback()) + { + String fontName; + try + { + fontName = genericFont.getName(); + } + catch (IOException e) + { + LOG.debug("Couldn't get font name - setting to '?'", e); + fontName = "?"; + } + LOG.warn("Using fallback font " + fontName + " for base font " + getBaseFont()); + } + isEmbedded = false; + isDamaged = false; + fontMatrixTransform = new AffineTransform(); + } + + /** + * Creates a new Type 1 font for embedding. + * + * @param doc PDF document to write to + * @param pfbIn PFB file stream + * @throws IOException + */ + public PDType1Font(PDDocument doc, InputStream pfbIn) throws IOException + { + PDType1FontEmbedder embedder = new PDType1FontEmbedder(doc, dict, pfbIn, null); + encoding = embedder.getFontEncoding(); + glyphList = embedder.getGlyphList(); + type1font = embedder.getType1Font(); + genericFont = embedder.getType1Font(); + isEmbedded = true; + isDamaged = false; + fontMatrixTransform = new AffineTransform(); + codeToBytesMap = new HashMap<>(); + } + + /** + * Creates a new Type 1 font for embedding. + * + * @param doc PDF document to write to + * @param pfbIn PFB file stream + * @param encoding + * @throws IOException + */ + public PDType1Font(PDDocument doc, InputStream pfbIn, Encoding encoding) throws IOException + { + PDType1FontEmbedder embedder = new PDType1FontEmbedder(doc, dict, pfbIn, encoding); + this.encoding = encoding; + glyphList = embedder.getGlyphList(); + type1font = embedder.getType1Font(); + genericFont = embedder.getType1Font(); + isEmbedded = true; + isDamaged = false; + fontMatrixTransform = new AffineTransform(); + codeToBytesMap = new HashMap<>(); + } + + /** + * Creates a Type 1 font from a Font dictionary in a PDF. + * + * @param fontDictionary font dictionary. + * @throws IOException if there was an error initializing the font. + * @throws IllegalArgumentException if /FontFile3 was used. + */ + public PDType1Font(COSDictionary fontDictionary) throws IOException + { + super(fontDictionary); + codeToBytesMap = new HashMap<>(); + + PDFontDescriptor fd = getFontDescriptor(); + Type1Font t1 = null; + boolean fontIsDamaged = false; + if (fd != null) + { + // a Type1 font may contain a Type1C font + PDStream fontFile3 = fd.getFontFile3(); + if (fontFile3 != null) + { + throw new IllegalArgumentException("Use PDType1CFont for FontFile3"); + } + + // or it may contain a PFB + PDStream fontFile = fd.getFontFile(); + if (fontFile != null) + { + try + { + COSStream stream = fontFile.getCOSObject(); + int length1 = stream.getInt(COSName.LENGTH1); + int length2 = stream.getInt(COSName.LENGTH2); + + // repair Length1 and Length2 if necessary + byte[] bytes = fontFile.toByteArray(); + length1 = repairLength1(bytes, length1); + length2 = repairLength2(bytes, length1, length2); + + if (bytes.length > 0 && (bytes[0] & 0xff) == PFB_START_MARKER) + { + // some bad files embed the entire PFB, see PDFBOX-2607 + t1 = Type1Font.createWithPFB(bytes); + } + else + { + // the PFB embedded as two segments back-to-back + byte[] segment1 = Arrays.copyOfRange(bytes, 0, length1); + byte[] segment2 = Arrays.copyOfRange(bytes, length1, length1 + length2); + + // empty streams are simply ignored + if (length1 > 0 && length2 > 0) + { + t1 = Type1Font.createWithSegments(segment1, segment2); + } + } + } + catch (DamagedFontException e) + { + LOG.warn("Can't read damaged embedded Type1 font " + fd.getFontName(), e); + fontIsDamaged = true; + } + catch (IOException e) + { + LOG.error("Can't read the embedded Type1 font " + fd.getFontName(), e); + fontIsDamaged = true; + } + } + } + isEmbedded = t1 != null; + isDamaged = fontIsDamaged; + type1font = t1; + + // find a generic font to use for rendering, could be a .pfb, but might be a .ttf + if (type1font != null) + { + genericFont = type1font; + } + else + { + FontMapping mapping = FontMappers.instance() + .getFontBoxFont(getBaseFont(), fd); + genericFont = mapping.getFont(); + + if (mapping.isFallback()) + { + LOG.warn("Using fallback font " + genericFont.getName() + " for " + getBaseFont()); + } + } + readEncoding(); + fontMatrixTransform = getFontMatrix().createAffineTransform(); + fontMatrixTransform.scale(1000, 1000); + } + + /** + * Some Type 1 fonts have an invalid Length1, which causes the binary segment of the font + * to be truncated, see PDFBOX-2350, PDFBOX-3677. + * + * @param bytes Type 1 stream bytes + * @param length1 Length1 from the Type 1 stream + * @return repaired Length1 value + */ + private int repairLength1(byte[] bytes, int length1) + { + // scan backwards from the end of the first segment to find 'exec' + int offset = Math.max(0, length1 - 4); + if (offset <= 0 || offset > bytes.length - 4) + { + offset = bytes.length - 4; + } + + offset = findBinaryOffsetAfterExec(bytes, offset); + if (offset == 0 && length1 > 0) + { + // 2nd try with brute force + offset = findBinaryOffsetAfterExec(bytes, bytes.length - 4); + } + + if (length1 - offset != 0 && offset > 0) + { + if (LOG.isWarnEnabled()) + { + LOG.warn("Ignored invalid Length1 " + length1 + " for Type 1 font " + getName()); + } + return offset; + } + + return length1; + } + + private static int findBinaryOffsetAfterExec(byte[] bytes, int startOffset) + { + int offset = startOffset; + while (offset > 0) + { + if (bytes[offset + 0] == 'e' + && bytes[offset + 1] == 'x' + && bytes[offset + 2] == 'e' + && bytes[offset + 3] == 'c') + { + offset += 4; + // skip additional CR LF space characters + while (offset < bytes.length && + (bytes[offset] == '\r' || bytes[offset] == '\n' || + bytes[offset] == ' ' || bytes[offset] == '\t')) + { + offset++; + } + break; + } + offset--; + } + return offset; + } + + /** + * Some Type 1 fonts have an invalid Length2, see PDFBOX-3475. A negative /Length2 brings an + * IllegalArgumentException in Arrays.copyOfRange(), a huge value eats up memory because of + * padding. + * + * @param bytes Type 1 stream bytes + * @param length1 Length1 from the Type 1 stream + * @param length2 Length2 from the Type 1 stream + * @return repaired Length2 value + */ + private int repairLength2(byte[] bytes, int length1, int length2) + { + // repair Length2 if necessary + if (length2 < 0 || length2 > bytes.length - length1) + { + LOG.warn("Ignored invalid Length2 " + length2 + " for Type 1 font " + getName()); + return bytes.length - length1; + } + return length2; + } + + /** + * Returns the PostScript name of the font. + */ + public final String getBaseFont() + { + return dict.getNameAsString(COSName.BASE_FONT); + } + + @Override + public float getHeight(int code) throws IOException + { + String name = codeToName(code); + if (getStandard14AFM() != null) + { + String afmName = getEncoding().getName(code); + return getStandard14AFM().getCharacterHeight(afmName); // todo: isn't this the y-advance, not the height? + } + else + { + // todo: should be scaled by font matrix + return (float) genericFont.getPath(name).getBounds().getHeight(); + } + } + + @Override + protected byte[] encode(int unicode) throws IOException + { + byte[] bytes = codeToBytesMap.get(unicode); + if (bytes != null) + { + return bytes; + } + + String name = getGlyphList().codePointToName(unicode); + if (isStandard14()) + { + // genericFont not needed, thus simplified code + // this is important on systems with no installed fonts + if (!encoding.contains(name)) + { + throw new IllegalArgumentException( + String.format("U+%04X ('%s') is not available in this font %s encoding: %s", + unicode, name, getName(), encoding.getEncodingName())); + } + if (".notdef".equals(name)) + { + throw new IllegalArgumentException( + String.format("No glyph for U+%04X in font %s", unicode, getName())); + } + } + else + { + if (!encoding.contains(name)) + { + throw new IllegalArgumentException( + String.format("U+%04X ('%s') is not available in this font %s (generic: %s) encoding: %s", + unicode, name, getName(), genericFont.getName(), encoding.getEncodingName())); + } + + String nameInFont = getNameInFont(name); + + if (".notdef".equals(nameInFont) || !genericFont.hasGlyph(nameInFont)) + { + throw new IllegalArgumentException( + String.format("No glyph for U+%04X in font %s (generic: %s)", unicode, getName(), genericFont.getName())); + } + } + + Map inverted = encoding.getNameToCodeMap(); + int code = inverted.get(name); + bytes = new byte[] { (byte)code }; + codeToBytesMap.put(unicode, bytes); + return bytes; + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + String name = codeToName(code); + + // width of .notdef is ignored for substitutes, see PDFBOX-1900 + if (!isEmbedded && name.equals(".notdef")) + { + return 250; + } + float width = genericFont.getWidth(name); + + Point2D p = new Point2D.Float(width, 0); + fontMatrixTransform.transform(p, p); + return (float)p.getX(); + } + + @Override + public boolean isEmbedded() + { + return isEmbedded; + } + + @Override + public float getAverageFontWidth() + { + if (getStandard14AFM() != null) + { + return getStandard14AFM().getAverageCharacterWidth(); + } + else + { + return super.getAverageFontWidth(); + } + } + + @Override + public int readCode(InputStream in) throws IOException + { + return in.read(); + } + + @Override + protected Encoding readEncodingFromFont() throws IOException + { + if (!isEmbedded() && getStandard14AFM() != null) + { + // read from AFM + return new Type1Encoding(getStandard14AFM()); + } + else + { + // extract from Type1 font/substitute + if (genericFont instanceof EncodedFont) + { + return Type1Encoding.fromFontBox(((EncodedFont) genericFont).getEncoding()); + } + else + { + // default (only happens with TTFs) + return StandardEncoding.INSTANCE; + } + } + } + + /** + * Returns the embedded or substituted Type 1 font, or null if there is none. + */ + public Type1Font getType1Font() + { + return type1font; + } + + @Override + public FontBoxFont getFontBoxFont() + { + return genericFont; + } + + @Override + public String getName() + { + return getBaseFont(); + } + + @Override + public BoundingBox getBoundingBox() throws IOException + { + if (fontBBox == null) + { + fontBBox = generateBoundingBox(); + } + return fontBBox; + } + + private BoundingBox generateBoundingBox() throws IOException + { + if (getFontDescriptor() != null) { + PDRectangle bbox = getFontDescriptor().getFontBoundingBox(); + if (isNonZeroBoundingBox(bbox)) + { + return new BoundingBox(bbox.getLowerLeftX(), bbox.getLowerLeftY(), + bbox.getUpperRightX(), bbox.getUpperRightY()); + } + } + return genericFont.getFontBBox(); + } + + //@Override + public String codeToName(int code) throws IOException + { + String name = getEncoding().getName(code); + return getNameInFont(name); + } + + /** + * Maps a PostScript glyph name to the name in the underlying font, for example when + * using a TTF font we might map "W" to "uni0057". + */ + private String getNameInFont(String name) throws IOException + { + if (isEmbedded() || genericFont.hasGlyph(name)) + { + return name; + } + + // try alternative name + String altName = ALT_NAMES.get(name); + if (altName != null && !name.equals(".notdef") && genericFont.hasGlyph(altName)) + { + return altName; + } + + // try unicode name + String unicodes = getGlyphList().toUnicode(name); + if (unicodes != null && unicodes.length() == 1) + { + String uniName = getUniNameOfCodePoint(unicodes.codePointAt(0)); + if (genericFont.hasGlyph(uniName)) + { + return uniName; + } + // PDFBOX-4017: no postscript table on Windows 10, and the low uni00NN + // names are not found in Symbol font. What works is using the PDF code plus 0xF000 + // while disregarding encoding from the PDF (because of file from PDFBOX-1606, + // makes sense because this segment is about finding the name in a standard font) + //TODO bring up better solution than this + if ("SymbolMT".equals(genericFont.getName())) + { + Integer code = SymbolEncoding.INSTANCE.getNameToCodeMap().get(name); + if (code != null) + { + uniName = getUniNameOfCodePoint(code + 0xF000); + if (genericFont.hasGlyph(uniName)) + { + return uniName; + } + } + } + } + + return ".notdef"; + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + // Acrobat does not draw .notdef for Type 1 fonts, see PDFBOX-2421 + // I suspect that it does do this for embedded fonts though, but this is untested + if (name.equals(".notdef") && !isEmbedded) + { + return new GeneralPath(); + } + else + { + return genericFont.getPath(getNameInFont(name)); + } + } + + @Override + public GeneralPath getPath(int code) throws IOException + { + String name = getEncoding().getName(code); + return getPath(name); + } + + @Override + public GeneralPath getNormalizedPath(int code) throws IOException + { + String name = getEncoding().getName(code); + GeneralPath path = getPath(name); + if (path == null) + { + return getPath(".notdef"); + } + return path; + } + + @Override + public boolean hasGlyph(String name) throws IOException + { + return genericFont.hasGlyph(getNameInFont(name)); + } + + @Override + public boolean hasGlyph(int code) throws IOException + { + return !getEncoding().getName(code).equals(".notdef"); + } + + @Override + public final Matrix getFontMatrix() + { + if (fontMatrix == null) + { + // PDF specified that Type 1 fonts use a 1000upem matrix, but some fonts specify + // their own custom matrix anyway, for example PDFBOX-2298 + List numbers = null; + try + { + numbers = genericFont.getFontMatrix(); + } + catch (IOException e) + { + LOG.debug("Couldn't get font matrix box - returning default value", e); + fontMatrix = DEFAULT_FONT_MATRIX; + } + + if (numbers != null && numbers.size() == 6) + { + fontMatrix = new Matrix( + numbers.get(0).floatValue(), numbers.get(1).floatValue(), + numbers.get(2).floatValue(), numbers.get(3).floatValue(), + numbers.get(4).floatValue(), numbers.get(5).floatValue()); + } + else + { + return super.getFontMatrix(); + } + } + return fontMatrix; + } + + @Override + public boolean isDamaged() + { + return isDamaged; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1FontEmbedder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1FontEmbedder.java new file mode 100644 index 00000000000..62214bb4f64 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1FontEmbedder.java @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import org.apache.fontbox.afm.FontMetrics; +import org.apache.fontbox.pfb.PfbParser; +import org.apache.fontbox.type1.Type1Font; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding; + +/** + * Embedded PDType1Font builder. Helper class to populate a PDType1Font from a PFB and AFM. + * + * @author Michael Niedermair + */ +class PDType1FontEmbedder +{ + private final Encoding fontEncoding; + private final Type1Font type1; + + /** + * This will load a PFB to be embedded into a document. + * + * @param doc The PDF document that will hold the embedded font. + * @param dict The Font dictionary to write to. + * @param pfbStream The pfb input. + * @throws IOException If there is an error loading the data. + */ + PDType1FontEmbedder(PDDocument doc, COSDictionary dict, InputStream pfbStream, + Encoding encoding) throws IOException + { + dict.setItem(COSName.SUBTYPE, COSName.TYPE1); + + // read the pfb + byte[] pfbBytes = IOUtils.toByteArray(pfbStream); + PfbParser pfbParser = new PfbParser(pfbBytes); + type1 = Type1Font.createWithPFB(pfbBytes); + + if (encoding == null) + { + fontEncoding = Type1Encoding.fromFontBox(type1.getEncoding()); + } + else + { + fontEncoding = encoding; + } + + // build font descriptor + PDFontDescriptor fd = buildFontDescriptor(type1); + + PDStream fontStream = new PDStream(doc, pfbParser.getInputStream(), COSName.FLATE_DECODE); + fontStream.getCOSObject().setInt("Length", pfbParser.size()); + for (int i = 0; i < pfbParser.getLengths().length; i++) + { + fontStream.getCOSObject().setInt("Length" + (i + 1), pfbParser.getLengths()[i]); + } + fd.setFontFile(fontStream); + + // set the values + dict.setItem(COSName.FONT_DESC, fd); + dict.setName(COSName.BASE_FONT, type1.getName()); + + // widths + List widths = new ArrayList<>(256); + for (int code = 0; code <= 255; code++) + { + String name = fontEncoding.getName(code); + int width = Math.round(type1.getWidth(name)); + widths.add(width); + } + + dict.setInt(COSName.FIRST_CHAR, 0); + dict.setInt(COSName.LAST_CHAR, 255); + dict.setItem(COSName.WIDTHS, COSArrayList.converterToCOSArray(widths)); + dict.setItem(COSName.ENCODING, encoding); + } + + /** + * Returns a PDFontDescriptor for the given PFB. + */ + static PDFontDescriptor buildFontDescriptor(Type1Font type1) + { + boolean isSymbolic = type1.getEncoding() + instanceof org.apache.fontbox.encoding.BuiltInEncoding; + + PDFontDescriptor fd = new PDFontDescriptor(); + fd.setFontName(type1.getName()); + fd.setFontFamily(type1.getFamilyName()); + fd.setNonSymbolic(!isSymbolic); + fd.setSymbolic(isSymbolic); + fd.setFontBoundingBox(new PDRectangle(type1.getFontBBox())); + fd.setItalicAngle(type1.getItalicAngle()); + fd.setAscent(type1.getFontBBox().getUpperRightY()); + fd.setDescent(type1.getFontBBox().getLowerLeftY()); + fd.setCapHeight(type1.getBlueValues().get(2).floatValue()); + fd.setStemV(0); // for PDF/A + return fd; + } + + + /** + * Returns a PDFontDescriptor for the given AFM. Used only for Standard 14 fonts. + * + * @param metrics AFM + */ + static PDFontDescriptor buildFontDescriptor(FontMetrics metrics) + { + boolean isSymbolic = metrics.getEncodingScheme().equals("FontSpecific"); + + PDFontDescriptor fd = new PDFontDescriptor(); + fd.setFontName(metrics.getFontName()); + fd.setFontFamily(metrics.getFamilyName()); + fd.setNonSymbolic(!isSymbolic); + fd.setSymbolic(isSymbolic); + fd.setFontBoundingBox(new PDRectangle(metrics.getFontBBox())); + fd.setItalicAngle(metrics.getItalicAngle()); + fd.setAscent(metrics.getAscender()); + fd.setDescent(metrics.getDescender()); + fd.setCapHeight(metrics.getCapHeight()); + fd.setXHeight(metrics.getXHeight()); + fd.setAverageWidth(metrics.getAverageCharacterWidth()); + fd.setCharacterSet(metrics.getCharacterSet()); + fd.setStemV(0); // for PDF/A + return fd; + } + + /** + * Returns the font's encoding. + */ + public Encoding getFontEncoding() + { + return fontEncoding; + } + + /** + * Returns the font's glyph list. + */ + public GlyphList getGlyphList() + { + return GlyphList.getAdobeGlyphList(); + } + + /** + * Returns the Type 1 font. + */ + public Type1Font getType1Font() + { + return type1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java new file mode 100644 index 00000000000..40a03ffad4a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java @@ -0,0 +1,189 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.contentstream.PDContentStream; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.util.Matrix; + +/** + * A Type 3 character procedure. This is a standalone PDF content stream. + * + * @author John Hewson + */ +public final class PDType3CharProc implements COSObjectable, PDContentStream +{ + private final PDType3Font font; + private final COSStream charStream; + + public PDType3CharProc(PDType3Font font, COSStream charStream) + { + this.font = font; + this.charStream = charStream; + } + + @Override + public COSStream getCOSObject() + { + return charStream; + } + + public PDType3Font getFont() + { + return font; + } + + public PDStream getContentStream() + { + return new PDStream(charStream); + } + + @Override + public InputStream getContents() throws IOException + { + return charStream.createInputStream(); + } + + @Override + public PDResources getResources() + { + return font.getResources(); + } + + @Override + public PDRectangle getBBox() + { + return font.getFontBBox(); + } + + /** + * Calculate the bounding box of this glyph. This will work only if the first operator in the + * stream is d1. + * + * @return the bounding box of this glyph, or null if the first operator is not d1. + * @throws IOException If an io error occurs while parsing the stream. + */ + public PDRectangle getGlyphBBox() throws IOException + { + List arguments = new ArrayList<>(); + PDFStreamParser parser = new PDFStreamParser(getContents()); + Object token = parser.parseNextToken(); + while (token != null) + { + if (token instanceof COSObject) + { + arguments.add(((COSObject) token).getObject()); + } + else if (token instanceof Operator) + { + if (((Operator) token).getName().equals("d1") && arguments.size() == 6) + { + for (int i = 0; i < 6; ++i) + { + if (!(arguments.get(i) instanceof COSNumber)) + { + return null; + } + } + return new PDRectangle( + ((COSNumber) arguments.get(2)).floatValue(), + ((COSNumber) arguments.get(3)).floatValue(), + ((COSNumber) arguments.get(4)).floatValue() - ((COSNumber) arguments.get(2)).floatValue(), + ((COSNumber) arguments.get(5)).floatValue() - ((COSNumber) arguments.get(3)).floatValue()); + } + else + { + return null; + } + } + else + { + arguments.add((COSBase) token); + } + token = parser.parseNextToken(); + } + return null; + } + + @Override + public Matrix getMatrix() + { + return font.getFontMatrix(); + } + + /** + * Get the width from a type3 charproc stream. + * + * @return the glyph width. + * @throws IOException if the stream could not be read, or did not have d0 or d1 as first + * operator, or if their first argument was not a number. + */ + public float getWidth() throws IOException + { + List arguments = new ArrayList<>(); + PDFStreamParser parser = new PDFStreamParser(getContents()); + Object token = parser.parseNextToken(); + while (token != null) + { + if (token instanceof COSObject) + { + arguments.add(((COSObject) token).getObject()); + } + else if (token instanceof Operator) + { + return parseWidth((Operator) token, arguments); + } + else + { + arguments.add((COSBase) token); + } + token = parser.parseNextToken(); + } + throw new IOException("Unexpected end of stream"); + } + + private float parseWidth(Operator operator, List arguments) throws IOException + { + if (operator.getName().equals("d0") || operator.getName().equals("d1")) + { + COSBase obj = arguments.get(0); + if (obj instanceof COSNumber) + { + return ((COSNumber) obj).floatValue(); + } + throw new IOException("Unexpected argument type: " + obj.getClass().getName()); + } + else + { + throw new IOException("First operator must be d0 or d1"); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java new file mode 100644 index 00000000000..0b38a7094fe --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java @@ -0,0 +1,375 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.fontbox.FontBoxFont; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.ResourceCache; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding; +import org.apache.pdfbox.pdmodel.font.encoding.Encoding; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * A PostScript Type 3 Font. + * + * @author Ben Litchfield + */ +public class PDType3Font extends PDSimpleFont +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDType3Font.class); + + private PDResources resources; + private COSDictionary charProcs; + private Matrix fontMatrix; + private BoundingBox fontBBox; + private final ResourceCache resourceCache; + + /** + * Constructor. + * + * @param fontDictionary The font dictionary according to the PDF specification. + */ + public PDType3Font(COSDictionary fontDictionary) throws IOException + { + this(fontDictionary, null); + } + + /** + * Constructor. + * + * @param fontDictionary The font dictionary according to the PDF specification. + * @param resourceCache Resource cache, can be null. + */ + public PDType3Font(COSDictionary fontDictionary, ResourceCache resourceCache) throws IOException + { + super(fontDictionary); + this.resourceCache = resourceCache; + readEncoding(); + } + + @Override + public String getName() + { + return dict.getNameAsString(COSName.NAME); + } + + @Override + protected final void readEncoding() throws IOException + { + COSBase encodingBase = dict.getDictionaryObject(COSName.ENCODING); + if (encodingBase instanceof COSName) + { + COSName encodingName = (COSName) encodingBase; + encoding = Encoding.getInstance(encodingName); + if (encoding == null) + { + LOG.warn("Unknown encoding: " + encodingName.getName()); + } + } + else if (encodingBase instanceof COSDictionary) + { + encoding = new DictionaryEncoding((COSDictionary) encodingBase); + } + glyphList = GlyphList.getAdobeGlyphList(); + } + + @Override + protected Encoding readEncodingFromFont() throws IOException + { + // Type 3 fonts do not have a built-in encoding + throw new UnsupportedOperationException("not supported for Type 3 fonts"); + } + + @Override + protected Boolean isFontSymbolic() + { + return false; + } + + @Override + public GeneralPath getPath(String name) throws IOException + { + // Type 3 fonts do not use vector paths + throw new UnsupportedOperationException("not supported for Type 3 fonts"); + } + + @Override + public boolean hasGlyph(String name) throws IOException + { + COSBase base = getCharProcs().getDictionaryObject(COSName.getPDFName(name)); + return base instanceof COSStream; + } + + @Override + public FontBoxFont getFontBoxFont() + { + // Type 3 fonts do not use FontBox fonts + throw new UnsupportedOperationException("not supported for Type 3 fonts"); + } + + @Override + public Vector getDisplacement(int code) throws IOException + { + return getFontMatrix().transform(new Vector(getWidth(code), 0)); + } + + @Override + public float getWidth(int code) throws IOException + { + int firstChar = dict.getInt(COSName.FIRST_CHAR, -1); + int lastChar = dict.getInt(COSName.LAST_CHAR, -1); + if (!getWidths().isEmpty() && code >= firstChar && code <= lastChar) + { + Float w = getWidths().get(code - firstChar); + return w == null ? 0 : w; + } + else + { + PDFontDescriptor fd = getFontDescriptor(); + if (fd != null) + { + return fd.getMissingWidth(); + } + else + { + return getWidthFromFont(code); + } + } + } + + @Override + public float getWidthFromFont(int code) throws IOException + { + PDType3CharProc charProc = getCharProc(code); + if (charProc == null || charProc.getContentStream() == null || + charProc.getContentStream().getLength() == 0) + { + return 0; + } + return charProc.getWidth(); + } + + @Override + public boolean isEmbedded() + { + return true; + } + + @Override + public float getHeight(int code) throws IOException + { + PDFontDescriptor desc = getFontDescriptor(); + if (desc != null) + { + // the following values are all more or less accurate at least all are average + // values. Maybe we'll find another way to get those value for every single glyph + // in the future if needed + PDRectangle bbox = desc.getFontBoundingBox(); + float retval = 0; + if (bbox != null) + { + retval = bbox.getHeight() / 2; + } + if (Float.compare(retval, 0) == 0) + { + retval = desc.getCapHeight(); + } + if (Float.compare(retval, 0) == 0) + { + retval = desc.getAscent(); + } + if (Float.compare(retval, 0) == 0) + { + retval = desc.getXHeight(); + if (retval > 0) + { + retval -= desc.getDescent(); + } + } + return retval; + } + return 0; + } + + @Override + protected byte[] encode(int unicode) throws IOException + { + throw new UnsupportedOperationException("Not implemented: Type3"); + } + + @Override + public int readCode(InputStream in) throws IOException + { + return in.read(); + } + + @Override + public Matrix getFontMatrix() + { + if (fontMatrix == null) + { + COSBase base = dict.getDictionaryObject(COSName.FONT_MATRIX); + if (base instanceof COSArray) + { + fontMatrix = new Matrix((COSArray) base); + } + else + { + return super.getFontMatrix(); + } + } + return fontMatrix; + } + + @Override + public boolean isDamaged() + { + // there's no font file to load + return false; + } + + /** + * Returns the optional resources of the type3 stream. + * + * @return the resources bound to be used when parsing the type3 stream + */ + public PDResources getResources() + { + if (resources == null) + { + COSBase base = dict.getDictionaryObject(COSName.RESOURCES); + if (base instanceof COSDictionary) + { + this.resources = new PDResources((COSDictionary) base, resourceCache); + } + } + return resources; + } + + /** + * This will get the fonts bounding box from its dictionary. + * + * @return The fonts bounding box. + */ + public PDRectangle getFontBBox() + { + COSBase base = dict.getDictionaryObject(COSName.FONT_BBOX); + PDRectangle retval = null; + if (base instanceof COSArray) + { + retval = new PDRectangle((COSArray) base); + } + return retval; + } + + @Override + public BoundingBox getBoundingBox() + { + if (fontBBox == null) + { + fontBBox = generateBoundingBox(); + } + return fontBBox; + } + + private BoundingBox generateBoundingBox() + { + PDRectangle rect = getFontBBox(); + if (!isNonZeroBoundingBox(rect)) + { + // Plan B: get the max bounding box of the glyphs + COSDictionary cp = getCharProcs(); + for (COSName name : cp.keySet()) + { + COSBase base = cp.getDictionaryObject(name); + if (base instanceof COSStream) + { + PDType3CharProc charProc = new PDType3CharProc(this, (COSStream) base); + try + { + PDRectangle glyphBBox = charProc.getGlyphBBox(); + if (glyphBBox == null) + { + continue; + } + rect.setLowerLeftX(Math.min(rect.getLowerLeftX(), glyphBBox.getLowerLeftX())); + rect.setLowerLeftY(Math.min(rect.getLowerLeftY(), glyphBBox.getLowerLeftY())); + rect.setUpperRightX(Math.max(rect.getUpperRightX(), glyphBBox.getUpperRightX())); + rect.setUpperRightY(Math.max(rect.getUpperRightY(), glyphBBox.getUpperRightY())); + } + catch (IOException ex) + { + // ignore + LOG.debug("error getting the glyph bounding box - font bounding box will be used", ex); + } + } + } + } + return new BoundingBox(rect.getLowerLeftX(), rect.getLowerLeftY(), + rect.getUpperRightX(), rect.getUpperRightY()); + } + + /** + * Returns the dictionary containing all streams to be used to render the glyphs. + * + * @return the dictionary containing all glyph streams. + */ + public COSDictionary getCharProcs() + { + if (charProcs == null) + { + charProcs = (COSDictionary) dict.getDictionaryObject(COSName.CHAR_PROCS); + } + return charProcs; + } + + /** + * Returns the stream of the glyph for the given character code + * + * @param code character code + * @return the stream to be used to render the glyph + */ + public PDType3CharProc getCharProc(int code) + { + String name = getEncoding().getName(code); + COSBase base = getCharProcs().getDictionaryObject(COSName.getPDFName(name)); + if (base instanceof COSStream) + { + return new PDType3CharProc(this, (COSStream) base); + } + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDVectorFont.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDVectorFont.java new file mode 100644 index 00000000000..40ef5b92cff --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDVectorFont.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.GeneralPath; +import java.io.IOException; + +/** + * A vector outline font, e.g. not Type 3. + * + * @author John Hewson + */ +public interface PDVectorFont +{ + /** + * Returns the glyph path for the given character code. + * + * @param code character code in a PDF. Not to be confused with unicode. + * @throws java.io.IOException if the font could not be read + */ + GeneralPath getPath(int code) throws IOException; + + /** + * Returns the normalized glyph path for the given character code in a PDF. The resulting path + * is normalized to the PostScript 1000 unit square, and fallback glyphs are returned where + * appropriate, e.g. for missing glyphs. + * + * @param code character code in a PDF. Not to be confused with unicode. + * @throws java.io.IOException if the font could not be read + */ + GeneralPath getNormalizedPath(int code) throws IOException; + + /** + * Returns true if this font contains a glyph for the given character code in a PDF. + * + * @param code character code in a PDF. Not to be confused with unicode. + */ + boolean hasGlyph(int code) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/Standard14Fonts.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/Standard14Fonts.java new file mode 100644 index 00000000000..9c1ab7a1521 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/Standard14Fonts.java @@ -0,0 +1,162 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import org.apache.fontbox.afm.AFMParser; +import org.apache.fontbox.afm.FontMetrics; + +/** + * The "Standard 14" PDF fonts, also known as the "base 14" fonts. + * There are 14 font files, but Acrobat uses additional names for compatibility, e.g. Arial. + * + * @author John Hewson + */ +final class Standard14Fonts +{ + private Standard14Fonts() + { + } + + private static final Set STANDARD_14_NAMES = new HashSet<>(34); + private static final Map STANDARD_14_MAPPING = new HashMap<>(34); + private static final Map STANDARD14_AFM_MAP = new HashMap<>(34); + static + { + try + { + addAFM("Courier-Bold"); + addAFM("Courier-BoldOblique"); + addAFM("Courier"); + addAFM("Courier-Oblique"); + addAFM("Helvetica"); + addAFM("Helvetica-Bold"); + addAFM("Helvetica-BoldOblique"); + addAFM("Helvetica-Oblique"); + addAFM("Symbol"); + addAFM("Times-Bold"); + addAFM("Times-BoldItalic"); + addAFM("Times-Italic"); + addAFM("Times-Roman"); + addAFM("ZapfDingbats"); + + // alternative names from Adobe Supplement to the ISO 32000 + addAFM("CourierCourierNew", "Courier"); + addAFM("CourierNew", "Courier"); + addAFM("CourierNew,Italic", "Courier-Oblique"); + addAFM("CourierNew,Bold", "Courier-Bold"); + addAFM("CourierNew,BoldItalic", "Courier-BoldOblique"); + addAFM("Arial", "Helvetica"); + addAFM("Arial,Italic", "Helvetica-Oblique"); + addAFM("Arial,Bold", "Helvetica-Bold"); + addAFM("Arial,BoldItalic", "Helvetica-BoldOblique"); + addAFM("TimesNewRoman", "Times-Roman"); + addAFM("TimesNewRoman,Italic", "Times-Italic"); + addAFM("TimesNewRoman,Bold", "Times-Bold"); + addAFM("TimesNewRoman,BoldItalic", "Times-BoldItalic"); + + // Acrobat treats these fonts as "standard 14" too (at least Acrobat preflight says so) + addAFM("Symbol,Italic", "Symbol"); + addAFM("Symbol,Bold", "Symbol"); + addAFM("Symbol,BoldItalic", "Symbol"); + addAFM("Times", "Times-Roman"); + addAFM("Times,Italic", "Times-Italic"); + addAFM("Times,Bold", "Times-Bold"); + addAFM("Times,BoldItalic", "Times-BoldItalic"); + + // PDFBOX-3457: PDF.js file bug864847.pdf + addAFM("ArialMT", "Helvetica"); + addAFM("Arial-ItalicMT", "Helvetica-Oblique"); + addAFM("Arial-BoldMT", "Helvetica-Bold"); + addAFM("Arial-BoldItalicMT", "Helvetica-BoldOblique"); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + private static void addAFM(String fontName) throws IOException + { + addAFM(fontName, fontName); + } + + private static void addAFM(String fontName, String afmName) throws IOException + { + STANDARD_14_NAMES.add(fontName); + STANDARD_14_MAPPING.put(fontName, afmName); + + if (STANDARD14_AFM_MAP.containsKey(afmName)) + { + STANDARD14_AFM_MAP.put(fontName, STANDARD14_AFM_MAP.get(afmName)); + } + + String resourceName = "/org/apache/pdfbox/resources/afm/" + afmName + ".afm"; + try (InputStream afmStream = PDType1Font.class.getResourceAsStream(resourceName)) + { + if (afmStream == null) + { + throw new IOException(resourceName + " not found"); + } + AFMParser parser = new AFMParser(afmStream); + FontMetrics metric = parser.parse(true); + STANDARD14_AFM_MAP.put(fontName, metric); + } + } + + /** + * Returns the AFM for the given font. + * @param baseName base name of font + */ + public static FontMetrics getAFM(String baseName) + { + return STANDARD14_AFM_MAP.get(baseName); + } + + /** + * Returns true if the given font name a Standard 14 font. + * @param baseName base name of font + */ + public static boolean containsName(String baseName) + { + return STANDARD_14_NAMES.contains(baseName); + } + + /** + * Returns the set of Standard 14 font names, including additional names. + */ + public static Set getNames() + { + return Collections.unmodifiableSet(STANDARD_14_NAMES); + } + + /** + * Returns the name of the actual font which the given font name maps to. + * @param baseName base name of font + */ + public static String getMappedFontName(String baseName) + { + return STANDARD_14_MAPPING.get(baseName); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/Subsetter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/Subsetter.java new file mode 100644 index 00000000000..be4e48d70bf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/Subsetter.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.IOException; + +/** + * Interface for a font subsetter. + */ +interface Subsetter +{ + /** + * Adds the given Unicode code point to this subset. + * + * @param codePoint Unicode code point + */ + void addToSubset(int codePoint); + + /** + * Subset this font now. + * + * @throws IOException if the font could not be read + */ + void subset() throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java new file mode 100644 index 00000000000..bde1ed95a31 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java @@ -0,0 +1,194 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import org.apache.pdfbox.util.Charsets; +import org.apache.pdfbox.util.Hex; + +/** + * Writes ToUnicode Mapping Files. + * + * @author John Hewson + */ +final class ToUnicodeWriter +{ + private final Map cidToUnicode = new TreeMap<>(); + private int wMode; + + /** + * To test corner case of PDFBOX-4302. + */ + static final int MAX_ENTRIES_PER_OPERATOR = 100; + + /** + * Creates a new ToUnicode CMap writer. + */ + ToUnicodeWriter() + { + this.wMode = 0; + } + + /** + * Sets the WMode (writing mode) of this CMap. + * + * @param wMode 1 for vertical, 0 for horizontal (default) + */ + public void setWMode(int wMode) + { + this.wMode = wMode; + } + + /** + * Adds the given CID to Unicode mapping. + * + * @param cid CID + * @param text Unicode text, up to 512 bytes. + */ + public void add(int cid, String text) + { + if (cid < 0 || cid > 0xFFFF) + { + throw new IllegalArgumentException("CID is not valid"); + } + + if (text == null || text.isEmpty()) + { + throw new IllegalArgumentException("Text is null or empty"); + } + + cidToUnicode.put(cid, text); + } + + /** + * Writes the CMap as ASCII to the given output stream. + * + * @param out ASCII output stream + * @throws IOException if the stream could not be written + */ + public void writeTo(OutputStream out) throws IOException + { + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, Charsets.US_ASCII)); + + writeLine(writer, "/CIDInit /ProcSet findresource begin"); + writeLine(writer, "12 dict begin\n"); + + writeLine(writer, "begincmap"); + writeLine(writer, "/CIDSystemInfo"); + writeLine(writer, "<< /Registry (Adobe)"); + writeLine(writer, "/Ordering (UCS)"); + writeLine(writer, "/Supplement 0"); + writeLine(writer, ">> def\n"); + + writeLine(writer, "/CMapName /Adobe-Identity-UCS" + " def"); + writeLine(writer, "/CMapType 2 def\n"); // 2 = ToUnicode + + if (wMode != 0) + { + writeLine(writer, "/WMode /" + wMode + " def"); + } + + // ToUnicode always uses 16-bit CIDs + writeLine(writer, "1 begincodespacerange"); + writeLine(writer, "<0000> "); + writeLine(writer, "endcodespacerange\n"); + + // CID -> Unicode mappings, we use ranges to generate a smaller CMap + List srcFrom = new ArrayList<>(); + List srcTo = new ArrayList<>(); + List dstString = new ArrayList<>(); + + int srcPrev = -1; + String dstPrev = ""; + + int srcCode1 = -1; + + for (Map.Entry entry : cidToUnicode.entrySet()) + { + int cid = entry.getKey(); + String text = entry.getValue(); + + if (cid == srcPrev + 1 && // CID must be last CID + 1 + dstPrev.codePointCount(0, dstPrev.length()) == 1 && // no UTF-16 surrogates + text.codePointAt(0) == dstPrev.codePointAt(0) + 1 && // dstString must be prev + 1 + dstPrev.codePointAt(0) + 1 <= 255 - (cid - srcCode1)) // increment last byte only + { + // extend range + srcTo.set(srcTo.size() - 1, cid); + } + else + { + // begin range + srcCode1 = cid; + srcFrom.add(cid); + srcTo.add(cid); + dstString.add(text); + } + srcPrev = cid; + dstPrev = text; + } + + // limit entries per operator + int batchCount = (int) Math.ceil(srcFrom.size() / + (double) MAX_ENTRIES_PER_OPERATOR); + for (int batch = 0; batch < batchCount; batch++) + { + int count = batch == batchCount - 1 ? + srcFrom.size() - MAX_ENTRIES_PER_OPERATOR * batch : + MAX_ENTRIES_PER_OPERATOR; + writer.write(count + " beginbfrange\n"); + for (int j = 0; j < count; j++) + { + int index = batch * MAX_ENTRIES_PER_OPERATOR + j; + writer.write('<'); + writer.write(Hex.getChars(srcFrom.get(index).shortValue())); + writer.write("> "); + + writer.write('<'); + writer.write(Hex.getChars(srcTo.get(index).shortValue())); + writer.write("> "); + + writer.write('<'); + writer.write(Hex.getCharsUTF16BE(dstString.get(index))); + writer.write(">\n"); + } + writeLine(writer, "endbfrange\n"); + } + + // footer + writeLine(writer, "endcmap"); + writeLine(writer, "CMapName currentdict /CMap defineresource pop"); + writeLine(writer, "end"); + writeLine(writer, "end"); + + writer.flush(); + } + + private void writeLine(BufferedWriter writer, String text) throws IOException + { + writer.write(text); + writer.write('\n'); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java new file mode 100644 index 00000000000..e2cddee2825 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java @@ -0,0 +1,384 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font; + +import java.awt.geom.GeneralPath; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.CmapSubtable; +import org.apache.fontbox.ttf.HeaderTable; +import org.apache.fontbox.ttf.HorizontalHeaderTable; +import org.apache.fontbox.ttf.OS2WindowsMetricsTable; +import org.apache.fontbox.ttf.PostScriptTable; +import org.apache.fontbox.ttf.TTFParser; +import org.apache.fontbox.ttf.TTFSubsetter; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * Common functionality for embedding TrueType fonts. + * + * @author Ben Litchfield + * @author John Hewson + */ +abstract class TrueTypeEmbedder implements Subsetter +{ + private static final int ITALIC = 1; + private static final int OBLIQUE = 512; + private static final String BASE25 = "BCDEFGHIJKLMNOPQRSTUVWXYZ"; + + private final PDDocument document; + protected TrueTypeFont ttf; + protected PDFontDescriptor fontDescriptor; + + /** + * For API backwards compatibility. + * + * @deprecated + */ + @Deprecated + protected final CmapSubtable cmap; + + protected final CmapLookup cmapLookup; + private final Set subsetCodePoints = new HashSet<>(); + private final boolean embedSubset; + + private final Set allGlyphIds = new HashSet<>(); + + /** + * Creates a new TrueType font for embedding. + */ + TrueTypeEmbedder(PDDocument document, COSDictionary dict, TrueTypeFont ttf, + boolean embedSubset) throws IOException + { + this.document = document; + this.embedSubset = embedSubset; + this.ttf = ttf; + fontDescriptor = createFontDescriptor(ttf); + + if (!isEmbeddingPermitted(ttf)) + { + throw new IOException("This font does not permit embedding"); + } + + if (!embedSubset) + { + // full embedding + PDStream stream = new PDStream(document, ttf.getOriginalData(), COSName.FLATE_DECODE); + stream.getCOSObject().setLong(COSName.LENGTH1, ttf.getOriginalDataSize()); + fontDescriptor.setFontFile2(stream); + } + + dict.setName(COSName.BASE_FONT, ttf.getName()); + + // choose a Unicode "cmap" + cmap = ttf.getUnicodeCmap(); + cmapLookup = ttf.getUnicodeCmapLookup(); + } + + public final void buildFontFile2(InputStream ttfStream) throws IOException + { + PDStream stream = new PDStream(document, ttfStream, COSName.FLATE_DECODE); + + // as the stream was closed within the PDStream constructor, we have to recreate it + try (InputStream input = stream.createInputStream()) + { + ttf = new TTFParser().parseEmbedded(input); + if (!isEmbeddingPermitted(ttf)) + { + throw new IOException("This font does not permit embedding"); + } + if (fontDescriptor == null) + { + fontDescriptor = createFontDescriptor(ttf); + } + } + stream.getCOSObject().setLong(COSName.LENGTH1, ttf.getOriginalDataSize()); + fontDescriptor.setFontFile2(stream); + } + + /** + * Returns true if the fsType in the OS/2 table permits embedding. + */ + private boolean isEmbeddingPermitted(TrueTypeFont ttf) throws IOException + { + if (ttf.getOS2Windows() != null) + { + int fsType = ttf.getOS2Windows().getFsType(); + int exclusive = fsType & 0x8; // bits 0-3 are a set of exclusive bits + + if ((exclusive & OS2WindowsMetricsTable.FSTYPE_RESTRICTED) == + OS2WindowsMetricsTable.FSTYPE_RESTRICTED) + { + // restricted License embedding + return false; + } + else if ((exclusive & OS2WindowsMetricsTable.FSTYPE_BITMAP_ONLY) == + OS2WindowsMetricsTable.FSTYPE_BITMAP_ONLY) + { + // bitmap embedding only + return false; + } + } + return true; + } + + /** + * Returns true if the fsType in the OS/2 table permits subsetting. + */ + private boolean isSubsettingPermitted(TrueTypeFont ttf) throws IOException + { + if (ttf.getOS2Windows() != null) + { + int fsType = ttf.getOS2Windows().getFsType(); + if ((fsType & OS2WindowsMetricsTable.FSTYPE_NO_SUBSETTING) == + OS2WindowsMetricsTable.FSTYPE_NO_SUBSETTING) + { + return false; + } + } + return true; + } + + /** + * Creates a new font descriptor dictionary for the given TTF. + */ + private PDFontDescriptor createFontDescriptor(TrueTypeFont ttf) throws IOException + { + PDFontDescriptor fd = new PDFontDescriptor(); + fd.setFontName(ttf.getName()); + + OS2WindowsMetricsTable os2 = ttf.getOS2Windows(); + PostScriptTable post = ttf.getPostScript(); + + // Flags + fd.setFixedPitch(post.getIsFixedPitch() > 0 || + ttf.getHorizontalHeader().getNumberOfHMetrics() == 1); + + int fsSelection = os2.getFsSelection(); + fd.setItalic(((fsSelection & (ITALIC | OBLIQUE)) != 0)); + + switch (os2.getFamilyClass()) + { + case OS2WindowsMetricsTable.FAMILY_CLASS_CLAREDON_SERIFS: + case OS2WindowsMetricsTable.FAMILY_CLASS_FREEFORM_SERIFS: + case OS2WindowsMetricsTable.FAMILY_CLASS_MODERN_SERIFS: + case OS2WindowsMetricsTable.FAMILY_CLASS_OLDSTYLE_SERIFS: + case OS2WindowsMetricsTable.FAMILY_CLASS_SLAB_SERIFS: + fd.setSerif(true); + break; + case OS2WindowsMetricsTable.FAMILY_CLASS_SCRIPTS: + fd.setScript(true); + break; + default: + break; + } + + fd.setFontWeight(os2.getWeightClass()); + + fd.setSymbolic(true); + fd.setNonSymbolic(false); + + // ItalicAngle + fd.setItalicAngle(post.getItalicAngle()); + + // FontBBox + HeaderTable header = ttf.getHeader(); + PDRectangle rect = new PDRectangle(); + float scaling = 1000f / header.getUnitsPerEm(); + rect.setLowerLeftX(header.getXMin() * scaling); + rect.setLowerLeftY(header.getYMin() * scaling); + rect.setUpperRightX(header.getXMax() * scaling); + rect.setUpperRightY(header.getYMax() * scaling); + fd.setFontBoundingBox(rect); + + // Ascent, Descent + HorizontalHeaderTable hHeader = ttf.getHorizontalHeader(); + fd.setAscent(hHeader.getAscender() * scaling); + fd.setDescent(hHeader.getDescender() * scaling); + + // CapHeight, XHeight + if (os2.getVersion() >= 1.2) + { + fd.setCapHeight(os2.getCapHeight() * scaling); + fd.setXHeight(os2.getHeight() * scaling); + } + else + { + GeneralPath capHPath = ttf.getPath("H"); + if (capHPath != null) + { + fd.setCapHeight(Math.round(capHPath.getBounds2D().getMaxY()) * scaling); + } + else + { + // estimate by summing the typographical +ve ascender and -ve descender + fd.setCapHeight((os2.getTypoAscender() + os2.getTypoDescender()) * scaling); + } + GeneralPath xPath = ttf.getPath("x"); + if (xPath != null) + { + fd.setXHeight(Math.round(xPath.getBounds2D().getMaxY()) * scaling); + } + else + { + // estimate by halving the typographical ascender + fd.setXHeight(os2.getTypoAscender() / 2.0f * scaling); + } + } + + // StemV - there's no true TTF equivalent of this, so we estimate it + fd.setStemV(fd.getFontBoundingBox().getWidth() * .13f); + + return fd; + } + + /** + * Returns the FontBox font. + * + * @deprecated + */ + @Deprecated + public TrueTypeFont getTrueTypeFont() + { + return ttf; + } + + /** + * Returns the font descriptor. + */ + public PDFontDescriptor getFontDescriptor() + { + return fontDescriptor; + } + + @Override + public void addToSubset(int codePoint) + { + subsetCodePoints.add(codePoint); + } + + public void addGlyphIds(Set glyphIds) + { + allGlyphIds.addAll(glyphIds); + } + + @Override + public void subset() throws IOException + { + if (!isSubsettingPermitted(ttf)) + { + throw new IOException("This font does not permit subsetting"); + } + + if (!embedSubset) + { + throw new IllegalStateException("Subsetting is disabled"); + } + + // PDF spec required tables (if present), all others will be removed + List tables = new ArrayList<>(); + tables.add("head"); + tables.add("hhea"); + tables.add("loca"); + tables.add("maxp"); + tables.add("cvt "); + tables.add("prep"); + tables.add("glyf"); + tables.add("hmtx"); + tables.add("fpgm"); + // Windows ClearType + tables.add("gasp"); + + // set the GIDs to subset + TTFSubsetter subsetter = new TTFSubsetter(ttf, tables); + subsetter.addAll(subsetCodePoints); + + if (!allGlyphIds.isEmpty()) + { + subsetter.addGlyphIds(allGlyphIds); + } + + // calculate deterministic tag based on the chosen subset + Map gidToCid = subsetter.getGIDMap(); + String tag = getTag(gidToCid); + subsetter.setPrefix(tag); + + // save the subset font + ByteArrayOutputStream out = new ByteArrayOutputStream(); + subsetter.writeToStream(out); + + // re-build the embedded font + buildSubset(new ByteArrayInputStream(out.toByteArray()), tag, gidToCid); + ttf.close(); + } + + /** + * Returns true if the font needs to be subset. + */ + public boolean needsSubset() + { + return embedSubset; + } + + /** + * Rebuild a font subset. + */ + protected abstract void buildSubset(InputStream ttfSubset, String tag, + Map gidToCid) throws IOException; + + /** + * Returns an uppercase 6-character unique tag for the given subset. + */ + public String getTag(Map gidToCid) + { + // deterministic + long num = gidToCid.hashCode(); + + // base25 encode + StringBuilder sb = new StringBuilder(); + do + { + long div = num / 25; + int mod = (int)(num % 25); + sb.append(BASE25.charAt(mod)); + num = div; + } while (num != 0 && sb.length() < 6); + + // pad + while (sb.length() < 6) + { + sb.insert(0, 'A'); + } + + sb.append('+'); + return sb.toString(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/UniUtil.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/UniUtil.java new file mode 100644 index 00000000000..888190c6c15 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/UniUtil.java @@ -0,0 +1,47 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font; + +import java.util.Locale; + +/** + * Utility class for Unicode fallback. + * + * @author Philip Helger + */ +final class UniUtil +{ + private UniUtil() + { + } + + // faster than String.format("uni%04X", codePoint) + static String getUniNameOfCodePoint(int codePoint) + { + String hex = Integer.toString(codePoint, 16).toUpperCase(Locale.US); + switch (hex.length()) + { + case 1: + return "uni000" + hex; + case 2: + return "uni00" + hex; + case 3: + return "uni0" + hex; + default: + return "uni" + hex; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/BuiltInEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/BuiltInEncoding.java new file mode 100644 index 00000000000..406de939f62 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/BuiltInEncoding.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.font.encoding; + +import java.util.Map; +import org.apache.pdfbox.cos.COSBase; + +/** + * A font's built-in encoding. + * + * @author John Hewson + */ +public class BuiltInEncoding extends Encoding +{ + /** + * Constructor. + * + * @param codeToName the given code to name mapping + */ + public BuiltInEncoding(Map codeToName) + { + for (Map.Entry entry : codeToName.entrySet()) + { + add(entry.getKey(), entry.getValue()); + } + } + + @Override + public COSBase getCOSObject() + { + throw new UnsupportedOperationException("Built-in encodings cannot be serialized"); + } + + @Override + public String getEncodingName() + { + return "built-in (TTF)"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java new file mode 100644 index 00000000000..5d03ac1bdd5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java @@ -0,0 +1,185 @@ +/* +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import java.util.HashMap; +import java.util.Map; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; + +/** + * This will perform the encoding from a dictionary. + * + * @author Ben Litchfield + */ +public class DictionaryEncoding extends Encoding +{ + private final COSDictionary encoding; + private final Encoding baseEncoding; + private final Map differences = new HashMap<>(); + + /** + * Creates a new DictionaryEncoding for embedding. + * + * @param baseEncoding + * @param differences + */ + public DictionaryEncoding(COSName baseEncoding, COSArray differences) + { + encoding = new COSDictionary(); + encoding.setItem(COSName.NAME, COSName.ENCODING); + encoding.setItem(COSName.DIFFERENCES, differences); + if (baseEncoding != COSName.STANDARD_ENCODING) + { + encoding.setItem(COSName.BASE_ENCODING, baseEncoding); + this.baseEncoding = Encoding.getInstance(baseEncoding); + } + else + { + this.baseEncoding = Encoding.getInstance(baseEncoding); + } + + if (this.baseEncoding == null) + { + throw new IllegalArgumentException("Invalid encoding: " + baseEncoding); + } + + codeToName.putAll(this.baseEncoding.codeToName); + inverted.putAll(this.baseEncoding.inverted); + applyDifferences(); + } + + /** + * Creates a new DictionaryEncoding for a Type 3 font from a PDF. + * + * @param fontEncoding The Type 3 encoding dictionary. + */ + public DictionaryEncoding(COSDictionary fontEncoding) + { + encoding = fontEncoding; + baseEncoding = null; + applyDifferences(); + } + + /** + * Creates a new DictionaryEncoding from a PDF. + * + * @param fontEncoding The encoding dictionary. + * @param isNonSymbolic True if the font is non-symbolic. False for Type 3 fonts. + * @param builtIn The font's built-in encoding. Null for Type 3 fonts. + */ + public DictionaryEncoding(COSDictionary fontEncoding, boolean isNonSymbolic, Encoding builtIn) + { + encoding = fontEncoding; + + Encoding base = null; + boolean hasBaseEncoding = encoding.containsKey(COSName.BASE_ENCODING); + if (hasBaseEncoding) + { + COSName name = encoding.getCOSName(COSName.BASE_ENCODING); + base = Encoding.getInstance(name); // null when the name is invalid + } + + if (base == null) + { + if (isNonSymbolic) + { + // Otherwise, for a nonsymbolic font, it is StandardEncoding + base = StandardEncoding.INSTANCE; + } + else + { + // and for a symbolic font, it is the font's built-in encoding. + if (builtIn != null) + { + base = builtIn; + } + else + { + // triggering this error indicates a bug in PDFBox. Every font should always have + // a built-in encoding, if not, we parsed it incorrectly. + throw new IllegalArgumentException("Symbolic fonts must have a built-in " + + "encoding"); + } + } + } + baseEncoding = base; + + codeToName.putAll(baseEncoding.codeToName); + inverted.putAll(baseEncoding.inverted); + applyDifferences(); + } + + private void applyDifferences() + { + // now replace with the differences + COSBase base = encoding.getDictionaryObject(COSName.DIFFERENCES); + if (!(base instanceof COSArray)) + { + return; + } + COSArray diffArray = (COSArray) base; + int currentIndex = -1; + for (int i = 0; i < diffArray.size(); i++) + { + COSBase next = diffArray.getObject(i); + if( next instanceof COSNumber) + { + currentIndex = ((COSNumber)next).intValue(); + } + else if( next instanceof COSName ) + { + COSName name = (COSName)next; + overwrite(currentIndex, name.getName()); + this.differences.put(currentIndex, name.getName()); + currentIndex++; + } + } + } + + /** + * Returns the base encoding. Will be null for Type 3 fonts. + */ + public Encoding getBaseEncoding() + { + return baseEncoding; + } + + /** + * Returns the Differences array. + */ + public Map getDifferences() + { + return differences; + } + + @Override + public COSBase getCOSObject() + { + return encoding; + } + + @Override + public String getEncodingName() + { + return baseEncoding.getEncodingName() + " with differences"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java new file mode 100644 index 00000000000..59f5fa1bda5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java @@ -0,0 +1,184 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * A PostScript encoding vector, maps character codes to glyph names. + * + * @author Ben Litchfield + */ +public abstract class Encoding implements COSObjectable +{ + /** + * This will get an encoding by name. May return null. + * + * @param name The name of the encoding to get. + * @return The encoding that matches the name. + */ + public static Encoding getInstance(COSName name) + { + if (COSName.STANDARD_ENCODING.equals(name)) + { + return StandardEncoding.INSTANCE; + } + else if (COSName.WIN_ANSI_ENCODING.equals(name)) + { + return WinAnsiEncoding.INSTANCE; + } + else if (COSName.MAC_ROMAN_ENCODING.equals(name)) + { + return MacRomanEncoding.INSTANCE; + } + else if (COSName.MAC_EXPERT_ENCODING.equals(name)) + { + return MacExpertEncoding.INSTANCE; + } + else + { + return null; + } + } + + protected final Map codeToName = new HashMap<>(250); + protected final Map inverted = new HashMap<>(250); + private Set names; + + /** + * Returns an unmodifiable view of the code -> name mapping. + * + * @return the code -> name map + */ + public Map getCodeToNameMap() + { + return Collections.unmodifiableMap(codeToName); + } + + /** + * Returns an unmodifiable view of the name -> code mapping. More than one name may map to + * the same code. + * + * @return the name -> code map + */ + public Map getNameToCodeMap() + { + return Collections.unmodifiableMap(inverted); + } + + /** + * This will add a character encoding. An already existing mapping is preservered when creating the reverse mapping. + * + * @see #overwrite(int, String) + * + * @param code character code + * @param name PostScript glyph name + */ + protected void add(int code, String name) + { + codeToName.put(code, name); + if (!inverted.containsKey(name)) + { + inverted.put(name, code); + } + } + + /** + * This will add a character encoding. An already existing mapping is overwritten when creating the reverse mapping. + * + * @see Encoding#add(int, String) + * + * @param code character code + * @param name PostScript glyph name + */ + protected void overwrite(int code, String name) + { + // remove existing reverse mapping first + String oldName = codeToName.get(code); + if (oldName != null) + { + Integer oldCode = inverted.get(oldName); + if (oldCode != null && oldCode == code) + { + inverted.remove(oldName); + } + } + inverted.put(name, code); + codeToName.put(code, name); + } + + /** + * Determines if the encoding has a mapping for the given name value. + * + * @param name PostScript glyph name + */ + public boolean contains(String name) + { + // we have to wait until all add() calls are done before building the name cache + // otherwise /Differences won't be accounted for + if (names == null) + { + synchronized(this) + { + // PDFBOX-3404: avoid possibility that one thread ends up with newly created empty map from other thread + Set tmpSet = new HashSet<>(codeToName.values()); + // make sure that assignment is done after initialisation is complete + names = tmpSet; + // note that it might still happen that 'names' is initialized twice, but this is harmless + } + // at this point, names will never be null. + } + return names.contains(name); + } + + /** + * Determines if the encoding has a mapping for the given code value. + * + * @param code character code + */ + public boolean contains(int code) + { + return codeToName.containsKey(code); + } + + /** + * This will take a character code and get the name from the code. + * + * @param code character code + * @return PostScript glyph name + */ + public String getName(int code) + { + String name = codeToName.get(code); + if (name != null) + { + return name; + } + return ".notdef"; + } + + /** + * Returns the name of this encoding. + */ + public abstract String getEncodingName(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java new file mode 100644 index 00000000000..8fc6dc0179f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java @@ -0,0 +1,297 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * PostScript glyph list, maps glyph names to sequences of Unicode characters. + * Instances of GlyphList are immutable. + */ +public final class GlyphList +{ + private static final Log LOG = LogFactory.getLog(GlyphList.class); + + // Adobe Glyph List (AGL) + private static final GlyphList DEFAULT = load("glyphlist.txt", 4281); + + // Zapf Dingbats has its own glyph list + private static final GlyphList ZAPF_DINGBATS = load("zapfdingbats.txt",201); + + /** + * Loads a glyph list from disk. + */ + private static GlyphList load(String filename, int numberOfEntries) + { + String path = "/org/apache/pdfbox/resources/glyphlist/"; + try + { + return new GlyphList(GlyphList.class.getResourceAsStream(path + filename), numberOfEntries); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + static + { + // not supported in PDFBox 2.0, but we issue a warning, see PDFBOX-2379 + try + { + String location = System.getProperty("glyphlist_ext"); + if (location != null) + { + throw new UnsupportedOperationException("glyphlist_ext is no longer supported, " + + "use GlyphList.DEFAULT.addGlyphs(Properties) instead"); + } + } + catch (SecurityException e) // can occur on System.getProperty + { + // PDFBOX-1946 ignore and continue + LOG.debug("Error getting system property 'glyphlist_ext' - ignoring", e); + } + } + + /** + * Returns the Adobe Glyph List (AGL). + */ + public static GlyphList getAdobeGlyphList() + { + return DEFAULT; + } + + /** + * Returns the Zapf Dingbats glyph list. + */ + public static GlyphList getZapfDingbats() + { + return ZAPF_DINGBATS; + } + + // read-only mappings, never modified outside GlyphList's constructor + private final Map nameToUnicode; + private final Map unicodeToName; + + // additional read/write cache for uniXXXX names + private final Map uniNameToUnicodeCache = new ConcurrentHashMap<>(); + + /** + * Creates a new GlyphList from a glyph list file. + * + * @param numberOfEntries number of expected values used to preallocate the correct amount of memory + * @param input glyph list in Adobe format + * @throws IOException if the glyph list could not be read + */ + public GlyphList(InputStream input, int numberOfEntries) throws IOException + { + nameToUnicode = new HashMap<>(numberOfEntries); + unicodeToName = new HashMap<>(numberOfEntries); + loadList(input); + } + + /** + * Creates a new GlyphList from multiple glyph list files. + * + * @param glyphList an existing glyph list to be copied + * @param input glyph list in Adobe format + * @throws IOException if the glyph list could not be read + */ + public GlyphList(GlyphList glyphList, InputStream input) throws IOException + { + nameToUnicode = new HashMap<>(glyphList.nameToUnicode); + unicodeToName = new HashMap<>(glyphList.unicodeToName); + loadList(input); + } + + private void loadList(InputStream input) throws IOException + { + try (BufferedReader in = new BufferedReader(new InputStreamReader(input, "ISO-8859-1"))) + { + while (in.ready()) + { + String line = in.readLine(); + if (line != null && !line.startsWith("#")) + { + String[] parts = line.split(";"); + if (parts.length < 2) + { + throw new IOException("Invalid glyph list entry: " + line); + } + + String name = parts[0]; + String[] unicodeList = parts[1].split(" "); + + if (nameToUnicode.containsKey(name)) + { + LOG.warn("duplicate value for " + name + " -> " + parts[1] + " " + + nameToUnicode.get(name)); + } + + int[] codePoints = new int[unicodeList.length]; + int index = 0; + for (String hex : unicodeList) + { + codePoints[index++] = Integer.parseInt(hex, 16); + } + String string = new String(codePoints, 0 , codePoints.length); + + // forward mapping + nameToUnicode.put(name, string); + + // reverse mapping + // PDFBOX-3884: take the various standard encodings as canonical, + // e.g. tilde over ilde + final boolean forceOverride = + WinAnsiEncoding.INSTANCE.contains(name) || + MacRomanEncoding.INSTANCE.contains(name) || + MacExpertEncoding.INSTANCE.contains(name) || + SymbolEncoding.INSTANCE.contains(name) || + ZapfDingbatsEncoding.INSTANCE.contains(name); + if (!unicodeToName.containsKey(string) || forceOverride) + { + unicodeToName.put(string, name); + } + } + } + } + } + + /** + * Returns the name for the given Unicode code point. + * + * @param codePoint Unicode code point + * @return PostScript glyph name, or ".notdef" + */ + public String codePointToName(int codePoint) + { + String name = unicodeToName.get(new String(new int[] { codePoint }, 0 , 1)); + if (name == null) + { + return ".notdef"; + } + return name; + } + + /** + * Returns the name for a given sequence of Unicode characters. + * + * @param unicodeSequence sequence of Unicode characters + * @return PostScript glyph name, or ".notdef" + */ + public String sequenceToName(String unicodeSequence) + { + String name = unicodeToName.get(unicodeSequence); + if (name == null) + { + return ".notdef"; + } + return name; + } + + /** + * Returns the Unicode character sequence for the given glyph name, or null if there isn't any. + * + * @param name PostScript glyph name + * @return Unicode character(s), or null. + */ + public String toUnicode(String name) + { + if (name == null) + { + return null; + } + + String unicode = nameToUnicode.get(name); + if (unicode != null) + { + return unicode; + } + + // separate read/write cache for thread safety + unicode = uniNameToUnicodeCache.get(name); + if (unicode == null) + { + // test if we have a suffix and if so remove it + if (name.indexOf('.') > 0) + { + unicode = toUnicode(name.substring(0, name.indexOf('.'))); + } + else if (name.startsWith("uni") && name.length() == 7) + { + // test for Unicode name in the format uniXXXX where X is hex + int nameLength = name.length(); + StringBuilder uniStr = new StringBuilder(); + try + { + for (int chPos = 3; chPos + 4 <= nameLength; chPos += 4) + { + int codePoint = Integer.parseInt(name.substring(chPos, chPos + 4), 16); + if (codePoint > 0xD7FF && codePoint < 0xE000) + { + LOG.warn("Unicode character name with disallowed code area: " + name); + } + else + { + uniStr.append((char) codePoint); + } + } + unicode = uniStr.toString(); + } + catch (NumberFormatException nfe) + { + LOG.warn("Not a number in Unicode character name: " + name); + } + } + else if (name.startsWith("u") && name.length() == 5) + { + // test for an alternate Unicode name representation uXXXX + try + { + int codePoint = Integer.parseInt(name.substring(1), 16); + if (codePoint > 0xD7FF && codePoint < 0xE000) + { + LOG.warn("Unicode character name with disallowed code area: " + name); + } + else + { + unicode = String.valueOf((char) codePoint); + } + } + catch (NumberFormatException nfe) + { + LOG.warn("Not a number in Unicode character name: " + name); + } + } + if (unicode != null) + { + // null value not allowed in ConcurrentHashMap + uniNameToUnicodeCache.put(name, unicode); + } + } + return unicode; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacExpertEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacExpertEncoding.java new file mode 100644 index 00000000000..1fa76f05a46 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacExpertEncoding.java @@ -0,0 +1,229 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This is an interface to a text encoder. + */ +public class MacExpertEncoding extends Encoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] MAC_EXPERT_ENCODING_TABLE = { + {0276, "AEsmall"}, + {0207, "Aacutesmall"}, + {0211, "Acircumflexsmall"}, + {047, "Acutesmall"}, + {0212, "Adieresissmall"}, + {0210, "Agravesmall"}, + {0214, "Aringsmall"}, + {0141, "Asmall"}, + {0213, "Atildesmall"}, + {0363, "Brevesmall"}, + {0142, "Bsmall"}, + {0256, "Caronsmall"}, + {0215, "Ccedillasmall"}, + {0311, "Cedillasmall"}, + {0136, "Circumflexsmall"}, + {0143, "Csmall"}, + {0254, "Dieresissmall"}, + {0372, "Dotaccentsmall"}, + {0144, "Dsmall"}, + {0216, "Eacutesmall"}, + {0220, "Ecircumflexsmall"}, + {0221, "Edieresissmall"}, + {0217, "Egravesmall"}, + {0145, "Esmall"}, + {0104, "Ethsmall"}, + {0146, "Fsmall"}, + {0140, "Gravesmall"}, + {0147, "Gsmall"}, + {0150, "Hsmall"}, + {042, "Hungarumlautsmall"}, + {0222, "Iacutesmall"}, + {0224, "Icircumflexsmall"}, + {0225, "Idieresissmall"}, + {0223, "Igravesmall"}, + {0151, "Ismall"}, + {0152, "Jsmall"}, + {0153, "Ksmall"}, + {0302, "Lslashsmall"}, + {0154, "Lsmall"}, + {0364, "Macronsmall"}, + {0155, "Msmall"}, + {0156, "Nsmall"}, + {0226, "Ntildesmall"}, + {0317, "OEsmall"}, + {0227, "Oacutesmall"}, + {0231, "Ocircumflexsmall"}, + {0232, "Odieresissmall"}, + {0362, "Ogoneksmall"}, + {0230, "Ogravesmall"}, + {0277, "Oslashsmall"}, + {0157, "Osmall"}, + {0233, "Otildesmall"}, + {0160, "Psmall"}, + {0161, "Qsmall"}, + {0373, "Ringsmall"}, + {0162, "Rsmall"}, + {0247, "Scaronsmall"}, + {0163, "Ssmall"}, + {0271, "Thornsmall"}, + {0176, "Tildesmall"}, + {0164, "Tsmall"}, + {0234, "Uacutesmall"}, + {0236, "Ucircumflexsmall"}, + {0237, "Udieresissmall"}, + {0235, "Ugravesmall"}, + {0165, "Usmall"}, + {0166, "Vsmall"}, + {0167, "Wsmall"}, + {0170, "Xsmall"}, + {0264, "Yacutesmall"}, + {0330, "Ydieresissmall"}, + {0171, "Ysmall"}, + {0275, "Zcaronsmall"}, + {0172, "Zsmall"}, + {046, "ampersandsmall"}, + {0201, "asuperior"}, + {0365, "bsuperior"}, + {0251, "centinferior"}, + {043, "centoldstyle"}, + {0202, "centsuperior"}, + {072, "colon"}, + {0173, "colonmonetary"}, + {054, "comma"}, + {0262, "commainferior"}, + {0370, "commasuperior"}, + {0266, "dollarinferior"}, + {044, "dollaroldstyle"}, + {045, "dollarsuperior"}, + {0353, "dsuperior"}, + {0245, "eightinferior"}, + {070, "eightoldstyle"}, + {0241, "eightsuperior"}, + {0344, "esuperior"}, + {0326, "exclamdownsmall"}, + {041, "exclamsmall"}, + {0126, "ff"}, + {0131, "ffi"}, + {0132, "ffl"}, + {0127, "fi"}, + {0320, "figuredash"}, + {0114, "fiveeighths"}, + {0260, "fiveinferior"}, + {065, "fiveoldstyle"}, + {0336, "fivesuperior"}, + {0130, "fl"}, + {0242, "fourinferior"}, + {064, "fouroldstyle"}, + {0335, "foursuperior"}, + {057, "fraction"}, + {055, "hyphen"}, + {0137, "hypheninferior"}, + {0321, "hyphensuperior"}, + {0351, "isuperior"}, + {0361, "lsuperior"}, + {0367, "msuperior"}, + {0273, "nineinferior"}, + {071, "nineoldstyle"}, + {0341, "ninesuperior"}, + {0366, "nsuperior"}, + {053, "onedotenleader"}, + {0112, "oneeighth"}, + {0174, "onefitted"}, + {0110, "onehalf"}, + {0301, "oneinferior"}, + {061, "oneoldstyle"}, + {0107, "onequarter"}, + {0332, "onesuperior"}, + {0116, "onethird"}, + {0257, "osuperior"}, + {0133, "parenleftinferior"}, + {050, "parenleftsuperior"}, + {0135, "parenrightinferior"}, + {051, "parenrightsuperior"}, + {056, "period"}, + {0263, "periodinferior"}, + {0371, "periodsuperior"}, + {0300, "questiondownsmall"}, + {077, "questionsmall"}, + {0345, "rsuperior"}, + {0175, "rupiah"}, + {073, "semicolon"}, + {0115, "seveneighths"}, + {0246, "seveninferior"}, + {067, "sevenoldstyle"}, + {0340, "sevensuperior"}, + {0244, "sixinferior"}, + {066, "sixoldstyle"}, + {0337, "sixsuperior"}, + {040, "space"}, + {0352, "ssuperior"}, + {0113, "threeeighths"}, + {0243, "threeinferior"}, + {063, "threeoldstyle"}, + {0111, "threequarters"}, + {075, "threequartersemdash"}, + {0334, "threesuperior"}, + {0346, "tsuperior"}, + {052, "twodotenleader"}, + {0252, "twoinferior"}, + {062, "twooldstyle"}, + {0333, "twosuperior"}, + {0117, "twothirds"}, + {0274, "zeroinferior"}, + {060, "zerooldstyle"}, + {0342, "zerosuperior"} + }; + + /** + * Singleton instance of this class. + */ + public static final MacExpertEncoding INSTANCE = new MacExpertEncoding(); + + /** + * Constructor. + */ + public MacExpertEncoding() + { + for (Object[] encodingEntry : MAC_EXPERT_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } + + @Override + public COSBase getCOSObject() + { + return COSName.MAC_EXPERT_ENCODING; + } + + @Override + public String getEncodingName() + { + return "MacExpertEncoding"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacOSRomanEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacOSRomanEncoding.java new file mode 100644 index 00000000000..b602a8e8708 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacOSRomanEncoding.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; + +/** + * This is the Mac OS Roman encoding, which is similar to the + * MacRomanEncoding with the addition of 15 entries + */ +public class MacOSRomanEncoding extends MacRomanEncoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names + * on top of {@link MacRomanEncoding}. + */ + private static final Object[][] MAC_OS_ROMAN_ENCODING_TABLE = { + {255, "notequal"}, + {260, "infinity"}, + {262, "lessequal"}, + {263, "greaterequal"}, + {266, "partialdiff"}, + {267, "summation"}, + {270, "product"}, + {271, "pi"}, + {272, "integral"}, + {275, "Omega"}, + {303, "radical"}, + {305, "approxequal"}, + {306, "Delta"}, + {327, "lozenge"}, + {333, "Euro"}, + {360, "apple"} + }; + + /** + * Singleton instance of this class. + * + * @since Apache PDFBox 2.0.0 + */ + public static final MacOSRomanEncoding INSTANCE = new MacOSRomanEncoding(); + + /** + * Constructor. + */ + public MacOSRomanEncoding() + { + super(); + + // differences and additions to MacRomanEncoding + for (Object[] encodingEntry : MAC_OS_ROMAN_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + + } + + @Override + public COSBase getCOSObject() + { + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacRomanEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacRomanEncoding.java new file mode 100644 index 00000000000..b895662dfeb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacRomanEncoding.java @@ -0,0 +1,277 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This is an interface to a text encoder. + * + * @author Ben Litchfield + */ +public class MacRomanEncoding extends Encoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] MAC_ROMAN_ENCODING_TABLE = { + {0101, "A"}, + {0256, "AE"}, + {0347, "Aacute"}, + {0345, "Acircumflex"}, + {0200, "Adieresis"}, + {0313, "Agrave"}, + {0201, "Aring"}, + {0314, "Atilde"}, + {0102, "B"}, + {0103, "C"}, + {0202, "Ccedilla"}, + {0104, "D"}, + {0105, "E"}, + {0203, "Eacute"}, + {0346, "Ecircumflex"}, + {0350, "Edieresis"}, + {0351, "Egrave"}, + {0106, "F"}, + {0107, "G"}, + {0110, "H"}, + {0111, "I"}, + {0352, "Iacute"}, + {0353, "Icircumflex"}, + {0354, "Idieresis"}, + {0355, "Igrave"}, + {0112, "J"}, + {0113, "K"}, + {0114, "L"}, + {0115, "M"}, + {0116, "N"}, + {0204, "Ntilde"}, + {0117, "O"}, + {0316, "OE"}, + {0356, "Oacute"}, + {0357, "Ocircumflex"}, + {0205, "Odieresis"}, + {0361, "Ograve"}, + {0257, "Oslash"}, + {0315, "Otilde"}, + {0120, "P"}, + {0121, "Q"}, + {0122, "R"}, + {0123, "S"}, + {0124, "T"}, + {0125, "U"}, + {0362, "Uacute"}, + {0363, "Ucircumflex"}, + {0206, "Udieresis"}, + {0364, "Ugrave"}, + {0126, "V"}, + {0127, "W"}, + {0130, "X"}, + {0131, "Y"}, + {0331, "Ydieresis"}, + {0132, "Z"}, + {0141, "a"}, + {0207, "aacute"}, + {0211, "acircumflex"}, + {0253, "acute"}, + {0212, "adieresis"}, + {0276, "ae"}, + {0210, "agrave"}, + {046, "ampersand"}, + {0214, "aring"}, + {0136, "asciicircum"}, + {0176, "asciitilde"}, + {052, "asterisk"}, + {0100, "at"}, + {0213, "atilde"}, + {0142, "b"}, + {0134, "backslash"}, + {0174, "bar"}, + {0173, "braceleft"}, + {0175, "braceright"}, + {0133, "bracketleft"}, + {0135, "bracketright"}, + {0371, "breve"}, + {0245, "bullet"}, + {0143, "c"}, + {0377, "caron"}, + {0215, "ccedilla"}, + {0374, "cedilla"}, + {0242, "cent"}, + {0366, "circumflex"}, + {072, "colon"}, + {054, "comma"}, + {0251, "copyright"}, + {0333, "currency"}, + {0144, "d"}, + {0240, "dagger"}, + {0340, "daggerdbl"}, + {0241, "degree"}, + {0254, "dieresis"}, + {0326, "divide"}, + {044, "dollar"}, + {0372, "dotaccent"}, + {0365, "dotlessi"}, + {0145, "e"}, + {0216, "eacute"}, + {0220, "ecircumflex"}, + {0221, "edieresis"}, + {0217, "egrave"}, + {070, "eight"}, + {0311, "ellipsis"}, + {0321, "emdash"}, + {0320, "endash"}, + {075, "equal"}, + {041, "exclam"}, + {0301, "exclamdown"}, + {0146, "f"}, + {0336, "fi"}, + {065, "five"}, + {0337, "fl"}, + {0304, "florin"}, + {064, "four"}, + {0332, "fraction"}, + {0147, "g"}, + {0247, "germandbls"}, + {0140, "grave"}, + {076, "greater"}, + {0307, "guillemotleft"}, + {0310, "guillemotright"}, + {0334, "guilsinglleft"}, + {0335, "guilsinglright"}, + {0150, "h"}, + {0375, "hungarumlaut"}, + {055, "hyphen"}, + {0151, "i"}, + {0222, "iacute"}, + {0224, "icircumflex"}, + {0225, "idieresis"}, + {0223, "igrave"}, + {0152, "j"}, + {0153, "k"}, + {0154, "l"}, + {074, "less"}, + {0302, "logicalnot"}, + {0155, "m"}, + {0370, "macron"}, + {0265, "mu"}, + {0156, "n"}, + {071, "nine"}, + {0226, "ntilde"}, + {043, "numbersign"}, + {0157, "o"}, + {0227, "oacute"}, + {0231, "ocircumflex"}, + {0232, "odieresis"}, + {0317, "oe"}, + {0376, "ogonek"}, + {0230, "ograve"}, + {061, "one"}, + {0273, "ordfeminine"}, + {0274, "ordmasculine"}, + {0277, "oslash"}, + {0233, "otilde"}, + {0160, "p"}, + {0246, "paragraph"}, + {050, "parenleft"}, + {051, "parenright"}, + {045, "percent"}, + {056, "period"}, + {0341, "periodcentered"}, + {0344, "perthousand"}, + {053, "plus"}, + {0261, "plusminus"}, + {0161, "q"}, + {077, "question"}, + {0300, "questiondown"}, + {042, "quotedbl"}, + {0343, "quotedblbase"}, + {0322, "quotedblleft"}, + {0323, "quotedblright"}, + {0324, "quoteleft"}, + {0325, "quoteright"}, + {0342, "quotesinglbase"}, + {047, "quotesingle"}, + {0162, "r"}, + {0250, "registered"}, + {0373, "ring"}, + {0163, "s"}, + {0244, "section"}, + {073, "semicolon"}, + {067, "seven"}, + {066, "six"}, + {057, "slash"}, + {040, "space"}, + {0243, "sterling"}, + {0164, "t"}, + {063, "three"}, + {0367, "tilde"}, + {0252, "trademark"}, + {062, "two"}, + {0165, "u"}, + {0234, "uacute"}, + {0236, "ucircumflex"}, + {0237, "udieresis"}, + {0235, "ugrave"}, + {0137, "underscore"}, + {0166, "v"}, + {0167, "w"}, + {0170, "x"}, + {0171, "y"}, + {0330, "ydieresis"}, + {0264, "yen"}, + {0172, "z"}, + {060, "zero"}, + // adding an additional mapping as defined in Appendix D of the pdf spec + {0312, "space"} + }; + + /** + * Singleton instance of this class. + * + * @since Apache PDFBox 1.3.0 + */ + public static final MacRomanEncoding INSTANCE = new MacRomanEncoding(); + + /** + * Constructor. + */ + public MacRomanEncoding() + { + for (Object[] encodingEntry : MAC_ROMAN_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } + + @Override + public COSBase getCOSObject() + { + return COSName.MAC_ROMAN_ENCODING; + } + + @Override + public String getEncodingName() + { + return "MacRomanEncoding"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/StandardEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/StandardEncoding.java new file mode 100644 index 00000000000..ab49f5b6279 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/StandardEncoding.java @@ -0,0 +1,218 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This is an interface to a text encoder. + * + * @author Ben Litchfield + */ +public class StandardEncoding extends Encoding +{ + + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] STANDARD_ENCODING_TABLE = { + {0101, "A"}, + {0341, "AE"}, + {0102, "B"}, + {0103, "C"}, + {0104, "D"}, + {0105, "E"}, + {0106, "F"}, + {0107, "G"}, + {0110, "H"}, + {0111, "I"}, + {0112, "J"}, + {0113, "K"}, + {0114, "L"}, + {0350, "Lslash"}, + {0115, "M"}, + {0116, "N"}, + {0117, "O"}, + {0352, "OE"}, + {0351, "Oslash"}, + {0120, "P"}, + {0121, "Q"}, + {0122, "R"}, + {0123, "S"}, + {0124, "T"}, + {0125, "U"}, + {0126, "V"}, + {0127, "W"}, + {0130, "X"}, + {0131, "Y"}, + {0132, "Z"}, + {0141, "a"}, + {0302, "acute"}, + {0361, "ae"}, + {0046, "ampersand"}, + {0136, "asciicircum"}, + {0176, "asciitilde"}, + {0052, "asterisk"}, + {0100, "at"}, + {0142, "b"}, + {0134, "backslash"}, + {0174, "bar"}, + {0173, "braceleft"}, + {0175, "braceright"}, + {0133, "bracketleft"}, + {0135, "bracketright"}, + {0306, "breve"}, + {0267, "bullet"}, + {0143, "c"}, + {0317, "caron"}, + {0313, "cedilla"}, + {0242, "cent"}, + {0303, "circumflex"}, + {0072, "colon"}, + {0054, "comma"}, + {0250, "currency"}, + {0144, "d"}, + {0262, "dagger"}, + {0263, "daggerdbl"}, + {0310, "dieresis"}, + {0044, "dollar"}, + {0307, "dotaccent"}, + {0365, "dotlessi"}, + {0145, "e"}, + {0070, "eight"}, + {0274, "ellipsis"}, + {0320, "emdash"}, + {0261, "endash"}, + {0075, "equal"}, + {0041, "exclam"}, + {0241, "exclamdown"}, + {0146, "f"}, + {0256, "fi"}, + {0065, "five"}, + {0257, "fl"}, + {0246, "florin"}, + {0064, "four"}, + {0244, "fraction"}, + {0147, "g"}, + {0373, "germandbls"}, + {0301, "grave"}, + {0076, "greater"}, + {0253, "guillemotleft"}, + {0273, "guillemotright"}, + {0254, "guilsinglleft"}, + {0255, "guilsinglright"}, + {0150, "h"}, + {0315, "hungarumlaut"}, + {0055, "hyphen"}, + {0151, "i"}, + {0152, "j"}, + {0153, "k"}, + {0154, "l"}, + {0074, "less"}, + {0370, "lslash"}, + {0155, "m"}, + {0305, "macron"}, + {0156, "n"}, + {0071, "nine"}, + {0043, "numbersign"}, + {0157, "o"}, + {0372, "oe"}, + {0316, "ogonek"}, + {0061, "one"}, + {0343, "ordfeminine"}, + {0353, "ordmasculine"}, + {0371, "oslash"}, + {0160, "p"}, + {0266, "paragraph"}, + {0050, "parenleft"}, + {0051, "parenright"}, + {0045, "percent"}, + {0056, "period"}, + {0264, "periodcentered"}, + {0275, "perthousand"}, + {0053, "plus"}, + {0161, "q"}, + {0077, "question"}, + {0277, "questiondown"}, + {0042, "quotedbl"}, + {0271, "quotedblbase"}, + {0252, "quotedblleft"}, + {0272, "quotedblright"}, + {0140, "quoteleft"}, + {0047, "quoteright"}, + {0270, "quotesinglbase"}, + {0251, "quotesingle"}, + {0162, "r"}, + {0312, "ring"}, + {0163, "s"}, + {0247, "section"}, + {0073, "semicolon"}, + {0067, "seven"}, + {0066, "six"}, + {0057, "slash"}, + {0040, "space"}, + {0243, "sterling"}, + {0164, "t"}, + {0063, "three"}, + {0304, "tilde"}, + {0062, "two"}, + {0165, "u"}, + {0137, "underscore"}, + {0166, "v"}, + {0167, "w"}, + {0170, "x"}, + {0171, "y"}, + {0245, "yen"}, + {0172, "z"}, + {0060, "zero"} + }; + + /** + * Singleton instance of this class. + * + * @since Apache PDFBox 1.3.0 + */ + public static final StandardEncoding INSTANCE = new StandardEncoding(); + + /** + * Constructor. + */ + public StandardEncoding() + { + for (Object[] encodingEntry : STANDARD_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } + + @Override + public COSBase getCOSObject() + { + return COSName.STANDARD_ENCODING; + } + + @Override + public String getEncodingName() + { + return "StandardEncoding"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/SymbolEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/SymbolEncoding.java new file mode 100644 index 00000000000..779b32bf454 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/SymbolEncoding.java @@ -0,0 +1,253 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This is an interface to a text encoder. + */ +public class SymbolEncoding extends Encoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] SYMBOL_ENCODING_TABLE = { + {0101, "Alpha"}, + {0102, "Beta"}, + {0103, "Chi"}, + {0104, "Delta"}, + {0105, "Epsilon"}, + {0110, "Eta"}, + {0240, "Euro"}, + {0107, "Gamma"}, + {0301, "Ifraktur"}, + {0111, "Iota"}, + {0113, "Kappa"}, + {0114, "Lambda"}, + {0115, "Mu"}, + {0116, "Nu"}, + {0127, "Omega"}, + {0117, "Omicron"}, + {0106, "Phi"}, + {0120, "Pi"}, + {0131, "Psi"}, + {0302, "Rfraktur"}, + {0122, "Rho"}, + {0123, "Sigma"}, + {0124, "Tau"}, + {0121, "Theta"}, + {0125, "Upsilon"}, + {0241, "Upsilon1"}, + {0130, "Xi"}, + {0132, "Zeta"}, + {0300, "aleph"}, + {0141, "alpha"}, + {0046, "ampersand"}, + {0320, "angle"}, + {0341, "angleleft"}, + {0361, "angleright"}, + {0273, "approxequal"}, + {0253, "arrowboth"}, + {0333, "arrowdblboth"}, + {0337, "arrowdbldown"}, + {0334, "arrowdblleft"}, + {0336, "arrowdblright"}, + {0335, "arrowdblup"}, + {0257, "arrowdown"}, + {0276, "arrowhorizex"}, + {0254, "arrowleft"}, + {0256, "arrowright"}, + {0255, "arrowup"}, + {0275, "arrowvertex"}, + {0052, "asteriskmath"}, + {0174, "bar"}, + {0142, "beta"}, + {0173, "braceleft"}, + {0175, "braceright"}, + {0354, "bracelefttp"}, + {0355, "braceleftmid"}, + {0356, "braceleftbt"}, + {0374, "bracerighttp"}, + {0375, "bracerightmid"}, + {0376, "bracerightbt"}, + {0357, "braceex"}, + {0133, "bracketleft"}, + {0135, "bracketright"}, + {0351, "bracketlefttp"}, + {0352, "bracketleftex"}, + {0353, "bracketleftbt"}, + {0371, "bracketrighttp"}, + {0372, "bracketrightex"}, + {0373, "bracketrightbt"}, + {0267, "bullet"}, + {0277, "carriagereturn"}, + {0143, "chi"}, + {0304, "circlemultiply"}, + {0305, "circleplus"}, + {0247, "club"}, + {0072, "colon"}, + {0054, "comma"}, + {0100, "congruent"}, + {0343, "copyrightsans"}, + {0323, "copyrightserif"}, + {0260, "degree"}, + {0144, "delta"}, + {0250, "diamond"}, + {0270, "divide"}, + {0327, "dotmath"}, + {0070, "eight"}, + {0316, "element"}, + {0274, "ellipsis"}, + {0306, "emptyset"}, + {0145, "epsilon"}, + {0075, "equal"}, + {0272, "equivalence"}, + {0150, "eta"}, + {0041, "exclam"}, + {0044, "existential"}, + {0065, "five"}, + {0246, "florin"}, + {0064, "four"}, + {0244, "fraction"}, + {0147, "gamma"}, + {0321, "gradient"}, + {0076, "greater"}, + {0263, "greaterequal"}, + {0251, "heart"}, + {0245, "infinity"}, + {0362, "integral"}, + {0363, "integraltp"}, + {0364, "integralex"}, + {0365, "integralbt"}, + {0307, "intersection"}, + {0151, "iota"}, + {0153, "kappa"}, + {0154, "lambda"}, + {0074, "less"}, + {0243, "lessequal"}, + {0331, "logicaland"}, + {0330, "logicalnot"}, + {0332, "logicalor"}, + {0340, "lozenge"}, + {0055, "minus"}, + {0242, "minute"}, + {0155, "mu"}, + {0264, "multiply"}, + {0071, "nine"}, + {0317, "notelement"}, + {0271, "notequal"}, + {0313, "notsubset"}, + {0156, "nu"}, + {0043, "numbersign"}, + {0167, "omega"}, + {0166, "omega1"}, + {0157, "omicron"}, + {0061, "one"}, + {0050, "parenleft"}, + {0051, "parenright"}, + {0346, "parenlefttp"}, + {0347, "parenleftex"}, + {0350, "parenleftbt"}, + {0366, "parenrighttp"}, + {0367, "parenrightex"}, + {0370, "parenrightbt"}, + {0266, "partialdiff"}, + {0045, "percent"}, + {0056, "period"}, + {0136, "perpendicular"}, + {0146, "phi"}, + {0152, "phi1"}, + {0160, "pi"}, + {0053, "plus"}, + {0261, "plusminus"}, + {0325, "product"}, + {0314, "propersubset"}, + {0311, "propersuperset"}, + {0265, "proportional"}, + {0171, "psi"}, + {0077, "question"}, + {0326, "radical"}, + {0140, "radicalex"}, + {0315, "reflexsubset"}, + {0312, "reflexsuperset"}, + {0342, "registersans"}, + {0322, "registerserif"}, + {0162, "rho"}, + {0262, "second"}, + {0073, "semicolon"}, + {0067, "seven"}, + {0163, "sigma"}, + {0126, "sigma1"}, + {0176, "similar"}, + {0066, "six"}, + {0057, "slash"}, + {0040, "space"}, + {0252, "spade"}, + {0047, "suchthat"}, + {0345, "summation"}, + {0164, "tau"}, + {0134, "therefore"}, + {0161, "theta"}, + {0112, "theta1"}, + {0063, "three"}, + {0344, "trademarksans"}, + {0324, "trademarkserif"}, + {0062, "two"}, + {0137, "underscore"}, + {0310, "union"}, + {0042, "universal"}, + {0165, "upsilon"}, + {0303, "weierstrass"}, + {0170, "xi"}, + {0060, "zero"}, + {0172, "zeta"} + }; + + /** + * Singleton instance of this class. + */ + public static final SymbolEncoding INSTANCE = new SymbolEncoding(); + + /** + * Constructor. + */ + public SymbolEncoding() + { + for (Object[] encodingEntry : SYMBOL_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } + + @Override + public COSBase getCOSObject() + { + return COSName.getPDFName("SymbolEncoding"); + } + + @Override + public String getEncodingName() + { + return "SymbolEncoding"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Type1Encoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Type1Encoding.java new file mode 100644 index 00000000000..3b2aff9969f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Type1Encoding.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.fontbox.afm.CharMetric; +import org.apache.fontbox.afm.FontMetrics; +import org.apache.pdfbox.cos.COSBase; + +import java.util.Map; + +/** + * An encoding for a Type 1 font. + */ +public class Type1Encoding extends Encoding +{ + /** + * Creates an encoding from the given FontBox encoding. + * + * @param encoding FontBox encoding + */ + public static Type1Encoding fromFontBox(org.apache.fontbox.encoding.Encoding encoding) + { + // todo: could optimise this by looking for specific subclasses + Map codeToName = encoding.getCodeToNameMap(); + Type1Encoding enc = new Type1Encoding(); + + for (Map.Entry entry : codeToName.entrySet()) + { + enc.add(entry.getKey(), entry.getValue()); + } + + return enc; + } + + /** + * Creates an empty encoding. + */ + public Type1Encoding() + { + } + + /** + * Creates an encoding from the given AFM font metrics. + * + * @param fontMetrics AFM font metrics. + */ + public Type1Encoding(FontMetrics fontMetrics) + { + for (CharMetric nextMetric : fontMetrics.getCharMetrics()) + { + add(nextMetric.getCharacterCode(), nextMetric.getName()); + } + } + + @Override + public COSBase getCOSObject() + { + return null; + } + + @Override + public String getEncodingName() + { + return "built-in (Type 1)"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/WinAnsiEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/WinAnsiEncoding.java new file mode 100644 index 00000000000..fab011a4ff6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/WinAnsiEncoding.java @@ -0,0 +1,297 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This the win ansi encoding. + * + * @author Ben Litchfield + */ +public class WinAnsiEncoding extends Encoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] WIN_ANSI_ENCODING_TABLE = { + {0101, "A"}, + {0306, "AE"}, + {0301, "Aacute"}, + {0302, "Acircumflex"}, + {0304, "Adieresis"}, + {0300, "Agrave"}, + {0305, "Aring"}, + {0303, "Atilde"}, + {0102, "B"}, + {0103, "C"}, + {0307, "Ccedilla"}, + {0104, "D"}, + {0105, "E"}, + {0311, "Eacute"}, + {0312, "Ecircumflex"}, + {0313, "Edieresis"}, + {0310, "Egrave"}, + {0320, "Eth"}, + {0200, "Euro"}, + {0106, "F"}, + {0107, "G"}, + {0110, "H"}, + {0111, "I"}, + {0315, "Iacute"}, + {0316, "Icircumflex"}, + {0317, "Idieresis"}, + {0314, "Igrave"}, + {0112, "J"}, + {0113, "K"}, + {0114, "L"}, + {0115, "M"}, + {0116, "N"}, + {0321, "Ntilde"}, + {0117, "O"}, + {0214, "OE"}, + {0323, "Oacute"}, + {0324, "Ocircumflex"}, + {0326, "Odieresis"}, + {0322, "Ograve"}, + {0330, "Oslash"}, + {0325, "Otilde"}, + {0120, "P"}, + {0121, "Q"}, + {0122, "R"}, + {0123, "S"}, + {0212, "Scaron"}, + {0124, "T"}, + {0336, "Thorn"}, + {0125, "U"}, + {0332, "Uacute"}, + {0333, "Ucircumflex"}, + {0334, "Udieresis"}, + {0331, "Ugrave"}, + {0126, "V"}, + {0127, "W"}, + {0130, "X"}, + {0131, "Y"}, + {0335, "Yacute"}, + {0237, "Ydieresis"}, + {0132, "Z"}, + {0216, "Zcaron"}, + {0141, "a"}, + {0341, "aacute"}, + {0342, "acircumflex"}, + {0264, "acute"}, + {0344, "adieresis"}, + {0346, "ae"}, + {0340, "agrave"}, + {046, "ampersand"}, + {0345, "aring"}, + {0136, "asciicircum"}, + {0176, "asciitilde"}, + {052, "asterisk"}, + {0100, "at"}, + {0343, "atilde"}, + {0142, "b"}, + {0134, "backslash"}, + {0174, "bar"}, + {0173, "braceleft"}, + {0175, "braceright"}, + {0133, "bracketleft"}, + {0135, "bracketright"}, + {0246, "brokenbar"}, + {0225, "bullet"}, + {0143, "c"}, + {0347, "ccedilla"}, + {0270, "cedilla"}, + {0242, "cent"}, + {0210, "circumflex"}, + {072, "colon"}, + {054, "comma"}, + {0251, "copyright"}, + {0244, "currency"}, + {0144, "d"}, + {0206, "dagger"}, + {0207, "daggerdbl"}, + {0260, "degree"}, + {0250, "dieresis"}, + {0367, "divide"}, + {044, "dollar"}, + {0145, "e"}, + {0351, "eacute"}, + {0352, "ecircumflex"}, + {0353, "edieresis"}, + {0350, "egrave"}, + {070, "eight"}, + {0205, "ellipsis"}, + {0227, "emdash"}, + {0226, "endash"}, + {075, "equal"}, + {0360, "eth"}, + {041, "exclam"}, + {0241, "exclamdown"}, + {0146, "f"}, + {065, "five"}, + {0203, "florin"}, + {064, "four"}, + {0147, "g"}, + {0337, "germandbls"}, + {0140, "grave"}, + {076, "greater"}, + {0253, "guillemotleft"}, + {0273, "guillemotright"}, + {0213, "guilsinglleft"}, + {0233, "guilsinglright"}, + {0150, "h"}, + {055, "hyphen"}, + {0151, "i"}, + {0355, "iacute"}, + {0356, "icircumflex"}, + {0357, "idieresis"}, + {0354, "igrave"}, + {0152, "j"}, + {0153, "k"}, + {0154, "l"}, + {074, "less"}, + {0254, "logicalnot"}, + {0155, "m"}, + {0257, "macron"}, + {0265, "mu"}, + {0327, "multiply"}, + {0156, "n"}, + {071, "nine"}, + {0361, "ntilde"}, + {043, "numbersign"}, + {0157, "o"}, + {0363, "oacute"}, + {0364, "ocircumflex"}, + {0366, "odieresis"}, + {0234, "oe"}, + {0362, "ograve"}, + {061, "one"}, + {0275, "onehalf"}, + {0274, "onequarter"}, + {0271, "onesuperior"}, + {0252, "ordfeminine"}, + {0272, "ordmasculine"}, + {0370, "oslash"}, + {0365, "otilde"}, + {0160, "p"}, + {0266, "paragraph"}, + {050, "parenleft"}, + {051, "parenright"}, + {045, "percent"}, + {056, "period"}, + {0267, "periodcentered"}, + {0211, "perthousand"}, + {053, "plus"}, + {0261, "plusminus"}, + {0161, "q"}, + {077, "question"}, + {0277, "questiondown"}, + {042, "quotedbl"}, + {0204, "quotedblbase"}, + {0223, "quotedblleft"}, + {0224, "quotedblright"}, + {0221, "quoteleft"}, + {0222, "quoteright"}, + {0202, "quotesinglbase"}, + {047, "quotesingle"}, + {0162, "r"}, + {0256, "registered"}, + {0163, "s"}, + {0232, "scaron"}, + {0247, "section"}, + {073, "semicolon"}, + {067, "seven"}, + {066, "six"}, + {057, "slash"}, + {040, "space"}, + {0243, "sterling"}, + {0164, "t"}, + {0376, "thorn"}, + {063, "three"}, + {0276, "threequarters"}, + {0263, "threesuperior"}, + {0230, "tilde"}, + {0231, "trademark"}, + {062, "two"}, + {0262, "twosuperior"}, + {0165, "u"}, + {0372, "uacute"}, + {0373, "ucircumflex"}, + {0374, "udieresis"}, + {0371, "ugrave"}, + {0137, "underscore"}, + {0166, "v"}, + {0167, "w"}, + {0170, "x"}, + {0171, "y"}, + {0375, "yacute"}, + {0377, "ydieresis"}, + {0245, "yen"}, + {0172, "z"}, + {0236, "zcaron"}, + {060, "zero"}, + // adding some additional mappings as defined in Appendix D of the pdf spec + {0240, "space"}, + {0255, "hyphen"} + }; + + /** + * Singleton instance of this class. + * + * @since Apache PDFBox 1.3.0 + */ + public static final WinAnsiEncoding INSTANCE = new WinAnsiEncoding(); + + /** + * Constructor. + */ + public WinAnsiEncoding() + { + for (Object[] encodingEntry : WIN_ANSI_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + + // From the PDF specification: + // In WinAnsiEncoding, all unused codes greater than 40 map to the bullet character. + for (int i = 041; i <= 255; i++) + { + if (!codeToName.containsKey(i)) + { + add(i, "bullet"); + } + } + } + + @Override + public COSBase getCOSObject() + { + return COSName.WIN_ANSI_ENCODING; + } + + @Override + public String getEncodingName() + { + return "WinAnsiEncoding"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/ZapfDingbatsEncoding.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/ZapfDingbatsEncoding.java new file mode 100644 index 00000000000..d7ec2953a4b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/ZapfDingbatsEncoding.java @@ -0,0 +1,252 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.font.encoding; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This is an interface to a text encoder. + */ +public class ZapfDingbatsEncoding extends Encoding +{ + + private static final int CHAR_CODE = 0; + private static final int CHAR_NAME = 1; + + /** + * Table of octal character codes and their corresponding names. + */ + private static final Object[][] ZAPFDINGBATS_ENCODING_TABLE = { + {040, "space"}, + {041, "a1"}, + {042, "a2"}, + {043, "a202"}, + {044, "a3"}, + {045, "a4"}, + {046, "a5"}, + {047, "a119"}, + {050, "a118"}, + {051, "a117"}, + {052, "a11"}, + {053, "a12"}, + {054, "a13"}, + {055, "a14"}, + {056, "a15"}, + {057, "a16"}, + {060, "a105"}, + {061, "a17"}, + {062, "a18"}, + {063, "a19"}, + {064, "a20"}, + {065, "a21"}, + {066, "a22"}, + {067, "a23"}, + {070, "a24"}, + {071, "a25"}, + {072, "a26"}, + {073, "a27"}, + {074, "a28"}, + {075, "a6"}, + {076, "a7"}, + {077, "a8"}, + {0100, "a9"}, + {0101, "a10"}, + {0102, "a29"}, + {0103, "a30"}, + {0104, "a31"}, + {0105, "a32"}, + {0106, "a33"}, + {0107, "a34"}, + {0110, "a35"}, + {0111, "a36"}, + {0112, "a37"}, + {0113, "a38"}, + {0114, "a39"}, + {0115, "a40"}, + {0116, "a41"}, + {0117, "a42"}, + {0120, "a43"}, + {0121, "a44"}, + {0122, "a45"}, + {0123, "a46"}, + {0124, "a47"}, + {0125, "a48"}, + {0126, "a49"}, + {0127, "a50"}, + {0130, "a51"}, + {0131, "a52"}, + {0132, "a53"}, + {0133, "a54"}, + {0134, "a55"}, + {0135, "a56"}, + {0136, "a57"}, + {0137, "a58"}, + {0140, "a59"}, + {0141, "a60"}, + {0142, "a61"}, + {0143, "a62"}, + {0144, "a63"}, + {0145, "a64"}, + {0146, "a65"}, + {0147, "a66"}, + {0150, "a67"}, + {0151, "a68"}, + {0152, "a69"}, + {0153, "a70"}, + {0154, "a71"}, + {0155, "a72"}, + {0156, "a73"}, + {0157, "a74"}, + {0160, "a203"}, + {0161, "a75"}, + {0162, "a204"}, + {0163, "a76"}, + {0164, "a77"}, + {0165, "a78"}, + {0166, "a79"}, + {0167, "a81"}, + {0170, "a82"}, + {0171, "a83"}, + {0172, "a84"}, + {0173, "a97"}, + {0174, "a98"}, + {0175, "a99"}, + {0176, "a100"}, + {0241, "a101"}, + {0242, "a102"}, + {0243, "a103"}, + {0244, "a104"}, + {0245, "a106"}, + {0246, "a107"}, + {0247, "a108"}, + {0250, "a112"}, + {0251, "a111"}, + {0252, "a110"}, + {0253, "a109"}, + {0254, "a120"}, + {0255, "a121"}, + {0256, "a122"}, + {0257, "a123"}, + {0260, "a124"}, + {0261, "a125"}, + {0262, "a126"}, + {0263, "a127"}, + {0264, "a128"}, + {0265, "a129"}, + {0266, "a130"}, + {0267, "a131"}, + {0270, "a132"}, + {0271, "a133"}, + {0272, "a134"}, + {0273, "a135"}, + {0274, "a136"}, + {0275, "a137"}, + {0276, "a138"}, + {0277, "a139"}, + {0300, "a140"}, + {0301, "a141"}, + {0302, "a142"}, + {0303, "a143"}, + {0304, "a144"}, + {0305, "a145"}, + {0306, "a146"}, + {0307, "a147"}, + {0310, "a148"}, + {0311, "a149"}, + {0312, "a150"}, + {0313, "a151"}, + {0314, "a152"}, + {0315, "a153"}, + {0316, "a154"}, + {0317, "a155"}, + {0320, "a156"}, + {0321, "a157"}, + {0322, "a158"}, + {0323, "a159"}, + {0324, "a160"}, + {0325, "a161"}, + {0326, "a163"}, + {0327, "a164"}, + {0330, "a196"}, + {0331, "a165"}, + {0332, "a192"}, + {0333, "a166"}, + {0334, "a167"}, + {0335, "a168"}, + {0336, "a169"}, + {0337, "a170"}, + {0340, "a171"}, + {0341, "a172"}, + {0342, "a173"}, + {0343, "a162"}, + {0344, "a174"}, + {0345, "a175"}, + {0346, "a176"}, + {0347, "a177"}, + {0350, "a178"}, + {0351, "a179"}, + {0352, "a193"}, + {0353, "a180"}, + {0354, "a199"}, + {0355, "a181"}, + {0356, "a200"}, + {0357, "a182"}, + {0361, "a201"}, + {0362, "a183"}, + {0363, "a184"}, + {0364, "a197"}, + {0365, "a185"}, + {0366, "a194"}, + {0367, "a198"}, + {0370, "a186"}, + {0371, "a195"}, + {0372, "a187"}, + {0373, "a188"}, + {0374, "a189"}, + {0375, "a190"}, + {0376, "a191"} + }; + + /** + * Singleton instance of this class. + */ + public static final ZapfDingbatsEncoding INSTANCE = new ZapfDingbatsEncoding(); + + /** + * Constructor. + */ + public ZapfDingbatsEncoding() + { + for (Object[] encodingEntry : ZAPFDINGBATS_ENCODING_TABLE) + { + add((Integer) encodingEntry[CHAR_CODE], encodingEntry[CHAR_NAME].toString()); + } + } + + @Override + public COSBase getCOSObject() + { + return COSName.getPDFName("ZapfDingbatsEncoding"); + } + + @Override + public String getEncodingName() + { + return "ZapfDingbatsEncoding"; + } +} diff --git a/src/org/pdfbox/pdmodel/font/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/font/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/package.html diff --git a/src/org/pdfbox/pdmodel/graphics/PDFontSetting.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDFontSetting.java similarity index 85% rename from src/org/pdfbox/pdmodel/graphics/PDFontSetting.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDFontSetting.java index 9384a99ae98..f2a3abb2790 100644 --- a/src/org/pdfbox/pdmodel/graphics/PDFontSetting.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDFontSetting.java @@ -14,18 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.graphics; +package org.apache.pdfbox.pdmodel.graphics; -import org.pdfbox.cos.COSArray; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; -import org.pdfbox.cos.COSFloat; -import org.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; -import org.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.COSObjectable; -import org.pdfbox.pdmodel.font.PDFont; -import org.pdfbox.pdmodel.font.PDFontFactory; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDFontFactory; import java.io.IOException; @@ -33,8 +33,7 @@ * This class represents a font setting used for the graphics state. A font setting is a font and a * font size. Maybe there is a better name for this? * - * @author Ben Litchfield - * @version $Revision: 1.4 $ + * @author Ben Litchfield */ public class PDFontSetting implements COSObjectable { @@ -63,6 +62,7 @@ public PDFontSetting( COSArray fs ) /** * {@inheritDoc} */ + @Override public COSBase getCOSObject() { return fontSetting; @@ -78,7 +78,7 @@ public COSBase getCOSObject() public PDFont getFont() throws IOException { PDFont retval = null; - COSBase font = fontSetting.get( 0 ); + COSBase font = fontSetting.getObject(0); if( font instanceof COSDictionary ) { retval = PDFontFactory.createFont( (COSDictionary)font ); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java new file mode 100644 index 00000000000..f6c92c0c634 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDLineDashPattern.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSInteger; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +import java.util.Arrays; + +/** + * A line dash pattern for stroking paths. + * Instances of PDLineDashPattern are immutable. + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDLineDashPattern implements COSObjectable +{ + private final int phase; + private final float[] array; + + /** + * Creates a new line dash pattern, with no dashes and a phase of 0. + */ + public PDLineDashPattern() + { + array = new float[] { }; + phase = 0; + } + + /** + * Creates a new line dash pattern from a dash array and phase. + * @param array the dash array + * @param phase the phase + */ + public PDLineDashPattern(COSArray array, int phase) + { + this.array = array.toFloatArray(); + this.phase = phase; + } + + @Override + public COSBase getCOSObject() + { + COSArray cos = new COSArray(); + COSArray patternArray = new COSArray(); + patternArray.setFloatArray(array); + cos.add(patternArray); + cos.add(COSInteger.get(phase)); + return cos; + } + + /** + * Returns the dash phase. + * This specifies the distance into the dash pattern at which to start the dash. + * @return the dash phase + */ + public int getPhase() + { + return phase; + } + + /** + * Returns the dash array. + * @return the dash array, never null. + */ + public float[] getDashArray() + { + return array.clone(); + } + + @Override + public String toString() + { + return "PDLineDashPattern{array=" + Arrays.toString(array) + ", phase=" + phase + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDPostScriptXObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDPostScriptXObject.java new file mode 100644 index 00000000000..1c35589b640 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDPostScriptXObject.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; + +/** + * A PostScript XObject. + * Conforming readers may not be able to interpret the PostScript fragments. + * + * @author John Hewson + */ +public class PDPostScriptXObject extends PDXObject +{ + /** + * Creates a PostScript XObject. + * @param stream The XObject stream + */ + public PDPostScriptXObject(COSStream stream) + { + super(stream, COSName.PS); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDXObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDXObject.java new file mode 100644 index 00000000000..e23b8db8d0e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDXObject.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.ResourceCache; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; + +import java.io.IOException; + +/** + * An external object, or "XObject". + * + * @author Ben Litchfield + * @author John Hewson + */ +public class PDXObject implements COSObjectable +{ + private final PDStream stream; + + /** + * Creates a new XObject instance of the appropriate type for the COS stream. + * + * @param base The stream which is wrapped by this XObject. + * @param resources + * @return A new XObject instance. + * @throws java.io.IOException if there is an error creating the XObject. + */ + public static PDXObject createXObject(COSBase base, PDResources resources) throws IOException + { + if (base == null) + { + // TODO throw an exception? + return null; + } + + if (!(base instanceof COSStream)) + { + throw new IOException("Unexpected object type: " + base.getClass().getName()); + } + + COSStream stream = (COSStream)base; + String subtype = stream.getNameAsString(COSName.SUBTYPE); + + if (COSName.IMAGE.getName().equals(subtype)) + { + return new PDImageXObject(new PDStream(stream), resources); + } + else if (COSName.FORM.getName().equals(subtype)) + { + ResourceCache cache = resources != null ? resources.getResourceCache() : null; + COSDictionary group = (COSDictionary)stream.getDictionaryObject(COSName.GROUP); + if (group != null && COSName.TRANSPARENCY.equals(group.getCOSName(COSName.S))) + { + return new PDTransparencyGroup(stream, cache); + } + return new PDFormXObject(stream, cache); + } + else if (COSName.PS.getName().equals(subtype)) + { + return new PDPostScriptXObject(stream); + } + else + { + throw new IOException("Invalid XObject Subtype: " + subtype); + } + } + + /** + * Creates a new XObject from the given stream and subtype. + * @param stream The stream to read. + * @param subtype + */ + protected PDXObject(COSStream stream, COSName subtype) + { + this.stream = new PDStream(stream); + // could be used for writing: + stream.setName(COSName.TYPE, COSName.XOBJECT.getName()); + stream.setName(COSName.SUBTYPE, subtype.getName()); + } + + /** + * Creates a new XObject from the given stream and subtype. + * @param stream The stream to read. + * @param subtype + */ + protected PDXObject(PDStream stream, COSName subtype) + { + this.stream = stream; + // could be used for writing: + stream.getCOSObject().setName(COSName.TYPE, COSName.XOBJECT.getName()); + stream.getCOSObject().setName(COSName.SUBTYPE, subtype.getName()); + } + + /** + * Creates a new XObject of the given subtype for writing. + * @param document The document in which to create the XObject. + * @param subtype The subtype of the new XObject. + */ + protected PDXObject(PDDocument document, COSName subtype) + { + stream = new PDStream(document); + stream.getCOSObject().setName(COSName.TYPE, COSName.XOBJECT.getName()); + stream.getCOSObject().setName(COSName.SUBTYPE, subtype.getName()); + } + + /** + * Returns the stream. + * {@inheritDoc} + */ + @Override + public final COSStream getCOSObject() + { + return stream.getCOSObject(); + } + + /** + * Returns the stream. + * @return The stream for this object. + */ + public final PDStream getStream() + { + return stream; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendComposite.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendComposite.java new file mode 100644 index 00000000000..c1596f0b1fc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendComposite.java @@ -0,0 +1,274 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.blend; + +import java.awt.AlphaComposite; +import java.awt.Composite; +import java.awt.CompositeContext; +import java.awt.RenderingHints; +import java.awt.color.ColorSpace; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * AWT composite for blend modes. + * + * @author Kühn & Weyh Software GmbH + */ +public final class BlendComposite implements Composite +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(BlendComposite.class); + + /** + * Creates a blend composite + * + * @param blendMode Desired blend mode + * @param constantAlpha Constant alpha, must be in the inclusive range + * [0.0...1.0] or it will be clipped. + * @return a blend composite. + */ + public static Composite getInstance(BlendMode blendMode, float constantAlpha) + { + if (constantAlpha < 0) + { + LOG.warn("using 0 instead of incorrect Alpha " + constantAlpha); + constantAlpha = 0; + } + else if (constantAlpha > 1) + { + LOG.warn("using 1 instead of incorrect Alpha " + constantAlpha); + constantAlpha = 1; + } + if (blendMode == BlendMode.NORMAL) + { + return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, constantAlpha); + } + else + { + return new BlendComposite(blendMode, constantAlpha); + } + } + + private final BlendMode blendMode; + private final float constantAlpha; + + private BlendComposite(BlendMode blendMode, float constantAlpha) + { + super(); + this.blendMode = blendMode; + this.constantAlpha = constantAlpha; + } + + @Override + public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, + RenderingHints hints) + { + return new BlendCompositeContext(srcColorModel, dstColorModel, hints); + } + + class BlendCompositeContext implements CompositeContext + { + private final ColorModel srcColorModel; + private final ColorModel dstColorModel; + private final RenderingHints hints; + + BlendCompositeContext(ColorModel srcColorModel, ColorModel dstColorModel, + RenderingHints hints) + { + this.srcColorModel = srcColorModel; + this.dstColorModel = dstColorModel; + this.hints = hints; + } + + @Override + public void dispose() + { + // nothing needed + } + + @Override + public void compose(Raster src, Raster dstIn, WritableRaster dstOut) + { + int x0 = src.getMinX(); + int y0 = src.getMinY(); + int width = Math.min(Math.min(src.getWidth(), dstIn.getWidth()), dstOut.getWidth()); + int height = Math.min(Math.min(src.getHeight(), dstIn.getHeight()), dstOut.getHeight()); + int x1 = x0 + width; + int y1 = y0 + height; + int dstInXShift = dstIn.getMinX() - x0; + int dstInYShift = dstIn.getMinY() - y0; + int dstOutXShift = dstOut.getMinX() - x0; + int dstOutYShift = dstOut.getMinY() - y0; + + ColorSpace srcColorSpace = srcColorModel.getColorSpace(); + int numSrcColorComponents = srcColorModel.getNumColorComponents(); + int numSrcComponents = src.getNumBands(); + boolean srcHasAlpha = (numSrcComponents > numSrcColorComponents); + ColorSpace dstColorSpace = dstColorModel.getColorSpace(); + int numDstColorComponents = dstColorModel.getNumColorComponents(); + int numDstComponents = dstIn.getNumBands(); + boolean dstHasAlpha = (numDstComponents > numDstColorComponents); + + int srcColorSpaceType = srcColorSpace.getType(); + int dstColorSpaceType = dstColorSpace.getType(); + boolean subtractive = (dstColorSpaceType != ColorSpace.TYPE_RGB) + && (dstColorSpaceType != ColorSpace.TYPE_GRAY); + + boolean blendModeIsSeparable = blendMode instanceof SeparableBlendMode; + SeparableBlendMode separableBlendMode = blendModeIsSeparable ? + (SeparableBlendMode) blendMode : null; + NonSeparableBlendMode nonSeparableBlendMode = !blendModeIsSeparable ? + (NonSeparableBlendMode) blendMode : null; + + boolean needsColorConversion = !srcColorSpace.equals(dstColorSpace); + + Object srcPixel = null; + Object dstPixel = null; + float[] srcComponents = new float[numSrcComponents]; + // PDFBOX-3501 let getNormalizedComponents allocate to avoid + // ArrayIndexOutOfBoundsException for bitonal target + float[] dstComponents = null; + + float[] srcColor = new float[numSrcColorComponents]; + float[] srcConverted; + float[] dstConverted; + float[] rgbResult = blendModeIsSeparable ? null : new float[dstHasAlpha ? 4 : 3]; + + for (int y = y0; y < y1; y++) + { + for (int x = x0; x < x1; x++) + { + srcPixel = src.getDataElements(x, y, srcPixel); + dstPixel = dstIn.getDataElements(dstInXShift + x, dstInYShift + y, dstPixel); + + srcComponents = srcColorModel.getNormalizedComponents(srcPixel, srcComponents, + 0); + dstComponents = dstColorModel.getNormalizedComponents(dstPixel, dstComponents, + 0); + + float srcAlpha = srcHasAlpha ? srcComponents[numSrcColorComponents] : 1.0f; + float dstAlpha = dstHasAlpha ? dstComponents[numDstColorComponents] : 1.0f; + + srcAlpha = srcAlpha * constantAlpha; + + float resultAlpha = dstAlpha + srcAlpha - srcAlpha * dstAlpha; + float srcAlphaRatio = (resultAlpha > 0) ? srcAlpha / resultAlpha : 0; + + if (separableBlendMode != null) + { + // convert color + System.arraycopy(srcComponents, 0, srcColor, 0, numSrcColorComponents); + if (needsColorConversion) + { + // TODO - very very slow - Hash results??? + float[] cieXYZ = srcColorSpace.toCIEXYZ(srcColor); + srcConverted = dstColorSpace.fromCIEXYZ(cieXYZ); + } + else + { + srcConverted = srcColor; + } + + for (int k = 0; k < numDstColorComponents; k++) + { + float srcValue = srcConverted[k]; + float dstValue = dstComponents[k]; + + if (subtractive) + { + srcValue = 1 - srcValue; + dstValue = 1 - dstValue; + } + + float value = separableBlendMode.blendChannel(srcValue, dstValue); + value = srcValue + dstAlpha * (value - srcValue); + value = dstValue + srcAlphaRatio * (value - dstValue); + + if (subtractive) + { + value = 1 - value; + } + + dstComponents[k] = value; + } + } + else + { + // Nonseparable blend modes are computed in RGB color space. + // TODO - CMYK color spaces need special treatment. + + if (srcColorSpaceType == ColorSpace.TYPE_RGB) + { + srcConverted = srcComponents; + } + else + { + srcConverted = srcColorSpace.toRGB(srcComponents); + } + + if (dstColorSpaceType == ColorSpace.TYPE_RGB) + { + dstConverted = dstComponents; + } + else + { + dstConverted = dstColorSpace.toRGB(dstComponents); + } + + nonSeparableBlendMode.blend(srcConverted, dstConverted, rgbResult); + + for (int k = 0; k < 3; k++) + { + float srcValue = srcConverted[k]; + float dstValue = dstConverted[k]; + float value = rgbResult[k]; + value = Math.max(Math.min(value, 1.0f), 0.0f); + value = srcValue + dstAlpha * (value - srcValue); + value = dstValue + srcAlphaRatio * (value - dstValue); + rgbResult[k] = value; + } + + if (dstColorSpaceType == ColorSpace.TYPE_RGB) + { + System.arraycopy(rgbResult, 0, dstComponents, 0, dstComponents.length); + } + else + { + float[] temp = dstColorSpace.fromRGB(rgbResult); + System.arraycopy(temp, 0, dstComponents, 0, + Math.min(dstComponents.length, temp.length)); + } + } + + if (dstHasAlpha) + { + dstComponents[numDstColorComponents] = resultAlpha; + } + + dstPixel = dstColorModel.getDataElements(dstComponents, 0, dstPixel); + dstOut.setDataElements(dstOutXShift + x, dstOutYShift + y, dstPixel); + } + } + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java new file mode 100644 index 00000000000..892ea071f90 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java @@ -0,0 +1,434 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.blend; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +import java.util.HashMap; +import java.util.Map; + +/** + * Blend mode. + * + * @author Kühn & Weyh Software GmbH + */ +public abstract class BlendMode +{ + public static final SeparableBlendMode NORMAL = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return srcValue; + } + }; + + public static final SeparableBlendMode COMPATIBLE = NORMAL; + + public static final SeparableBlendMode MULTIPLY = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return srcValue * dstValue; + } + }; + + public static final SeparableBlendMode SCREEN = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return srcValue + dstValue - srcValue * dstValue; + } + }; + + public static final SeparableBlendMode OVERLAY = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return (dstValue <= 0.5) ? 2 * dstValue * srcValue : 2 * (srcValue + dstValue - srcValue + * dstValue) - 1; + } + }; + + public static final SeparableBlendMode DARKEN = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return Math.min(srcValue, dstValue); + } + }; + + public static final SeparableBlendMode LIGHTEN = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return Math.max(srcValue, dstValue); + } + }; + + public static final SeparableBlendMode COLOR_DODGE = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + // See PDF 2.0 specification + if (Float.compare(dstValue,0) == 0) + { + return 0; + } + if (dstValue >= 1 - srcValue) + { + return 1; + } + return dstValue / (1 - srcValue); + } + }; + + public static final SeparableBlendMode COLOR_BURN = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + // See PDF 2.0 specification + if (Float.compare(dstValue, 1) == 0) + { + return 1; + } + if (1 - dstValue >= srcValue) + { + return 0; + } + return 1 - (1 - dstValue) / srcValue; + } + }; + + public static final SeparableBlendMode HARD_LIGHT = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return (srcValue <= 0.5) ? 2 * dstValue * srcValue : + 2 * (srcValue + dstValue - srcValue * dstValue) - 1; + } + }; + + public static final SeparableBlendMode SOFT_LIGHT = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + if (srcValue <= 0.5) + { + return dstValue - (1 - 2 * srcValue) * dstValue * (1 - dstValue); + } + else + { + float d = (dstValue <= 0.25) ? ((16 * dstValue - 12) * dstValue + 4) * dstValue + : (float) Math .sqrt(dstValue); + return dstValue + (2 * srcValue - 1) * (d - dstValue); + } + } + }; + + public static final SeparableBlendMode DIFFERENCE = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return Math.abs(dstValue - srcValue); + } + }; + + public static final SeparableBlendMode EXCLUSION = new SeparableBlendMode() + { + @Override + public float blendChannel(float srcValue, float dstValue) + { + return dstValue + srcValue - 2 * dstValue * srcValue; + } + }; + + public static final NonSeparableBlendMode HUE = new NonSeparableBlendMode() + { + @Override + public void blend(float[] srcValues, float[] dstValues, float[] result) + { + float[] temp = new float[3]; + getSaturationRGB(dstValues, srcValues, temp); + getLuminosityRGB(dstValues, temp, result); + } + }; + + public static final NonSeparableBlendMode SATURATION = new NonSeparableBlendMode() + { + @Override + public void blend(float[] srcValues, float[] dstValues, float[] result) + { + getSaturationRGB(srcValues, dstValues, result); + } + }; + + public static final NonSeparableBlendMode COLOR = new NonSeparableBlendMode() + { + @Override + public void blend(float[] srcValues, float[] dstValues, float[] result) + { + getLuminosityRGB(dstValues, srcValues, result); + } + }; + + public static final NonSeparableBlendMode LUMINOSITY = new NonSeparableBlendMode() + { + @Override + public void blend(float[] srcValues, float[] dstValues, float[] result) + { + getLuminosityRGB(srcValues, dstValues, result); + } + }; + + // these maps *must* come after the BlendMode.* constant declarations, otherwise their values would be null + private static final Map BLEND_MODES = createBlendModeMap(); + private static final Map BLEND_MODE_NAMES = createBlendModeNamesMap(); + + BlendMode() + { + } + + /** + * Determines the blend mode from the BM entry in the COS ExtGState. + * + * @param cosBlendMode name or array + * @return blending mode + */ + public static BlendMode getInstance(COSBase cosBlendMode) + { + BlendMode result = null; + if (cosBlendMode instanceof COSName) + { + result = BLEND_MODES.get(cosBlendMode); + } + else if (cosBlendMode instanceof COSArray) + { + COSArray cosBlendModeArray = (COSArray) cosBlendMode; + for (int i = 0; i < cosBlendModeArray.size(); i++) + { + result = BLEND_MODES.get(cosBlendModeArray.getObject(i)); + if (result != null) + { + break; + } + } + } + + if (result != null) + { + return result; + } + return BlendMode.NORMAL; + } + + /** + * Determines the blend mode name from the BM object. + * + * @param bm Blend mode. + * @return name of blend mode. + */ + public static COSName getCOSName(BlendMode bm) + { + return BLEND_MODE_NAMES.get(bm); + } + + private static int get255Value(float val) + { + return (int) Math.floor(val >= 1.0 ? 255 : val * 255.0); + } + + private static void getSaturationRGB(float[] srcValues, float[] dstValues, float[] result) + { + int minb; + int maxb; + int mins; + int maxs; + int y; + int scale; + int r; + int g; + int b; + + int rd = get255Value(dstValues[0]); + int gd = get255Value(dstValues[1]); + int bd = get255Value(dstValues[2]); + int rs = get255Value(srcValues[0]); + int gs = get255Value(srcValues[1]); + int bs = get255Value(srcValues[2]); + + minb = Math.min(rd, Math.min(gd, bd)); + maxb = Math.max(rd, Math.max(gd, bd)); + if (minb == maxb) + { + /* backdrop has zero saturation, avoid divide by 0 */ + result[0] = gd / 255.0f; + result[1] = gd / 255.0f; + result[2] = gd / 255.0f; + return; + } + + mins = Math.min(rs, Math.min(gs, bs)); + maxs = Math.max(rs, Math.max(gs, bs)); + + scale = ((maxs - mins) << 16) / (maxb - minb); + y = (rd * 77 + gd * 151 + bd * 28 + 0x80) >> 8; + r = y + ((((rd - y) * scale) + 0x8000) >> 16); + g = y + ((((gd - y) * scale) + 0x8000) >> 16); + b = y + ((((bd - y) * scale) + 0x8000) >> 16); + + if (((r | g | b) & 0x100) == 0x100) + { + int scalemin; + int scalemax; + int min; + int max; + + min = Math.min(r, Math.min(g, b)); + max = Math.max(r, Math.max(g, b)); + + if (min < 0) + { + scalemin = (y << 16) / (y - min); + } + else + { + scalemin = 0x10000; + } + + if (max > 255) + { + scalemax = ((255 - y) << 16) / (max - y); + } + else + { + scalemax = 0x10000; + } + + scale = Math.min(scalemin, scalemax); + r = y + (((r - y) * scale + 0x8000) >> 16); + g = y + (((g - y) * scale + 0x8000) >> 16); + b = y + (((b - y) * scale + 0x8000) >> 16); + } + result[0] = r / 255.0f; + result[1] = g / 255.0f; + result[2] = b / 255.0f; + } + + private static void getLuminosityRGB(float[] srcValues, float[] dstValues, float[] result) + { + int delta; + int scale; + int r; + int g; + int b; + int y; + int rd = get255Value(dstValues[0]); + int gd = get255Value(dstValues[1]); + int bd = get255Value(dstValues[2]); + int rs = get255Value(srcValues[0]); + int gs = get255Value(srcValues[1]); + int bs = get255Value(srcValues[2]); + delta = ((rs - rd) * 77 + (gs - gd) * 151 + (bs - bd) * 28 + 0x80) >> 8; + r = rd + delta; + g = gd + delta; + b = bd + delta; + + if (((r | g | b) & 0x100) == 0x100) + { + y = (rs * 77 + gs * 151 + bs * 28 + 0x80) >> 8; + if (delta > 0) + { + int max; + max = Math.max(r, Math.max(g, b)); + scale = max == y ? 0 : ((255 - y) << 16) / (max - y); + } + else + { + int min; + min = Math.min(r, Math.min(g, b)); + scale = y == min ? 0 : (y << 16) / (y - min); + } + r = y + (((r - y) * scale + 0x8000) >> 16); + g = y + (((g - y) * scale + 0x8000) >> 16); + b = y + (((b - y) * scale + 0x8000) >> 16); + } + result[0] = r / 255.0f; + result[1] = g / 255.0f; + result[2] = b / 255.0f; + } + + private static Map createBlendModeMap() + { + Map map = new HashMap<>(13); + map.put(COSName.NORMAL, BlendMode.NORMAL); + // BlendMode.COMPATIBLE should not be used + map.put(COSName.COMPATIBLE, BlendMode.NORMAL); + map.put(COSName.MULTIPLY, BlendMode.MULTIPLY); + map.put(COSName.SCREEN, BlendMode.SCREEN); + map.put(COSName.OVERLAY, BlendMode.OVERLAY); + map.put(COSName.DARKEN, BlendMode.DARKEN); + map.put(COSName.LIGHTEN, BlendMode.LIGHTEN); + map.put(COSName.COLOR_DODGE, BlendMode.COLOR_DODGE); + map.put(COSName.COLOR_BURN, BlendMode.COLOR_BURN); + map.put(COSName.HARD_LIGHT, BlendMode.HARD_LIGHT); + map.put(COSName.SOFT_LIGHT, BlendMode.SOFT_LIGHT); + map.put(COSName.DIFFERENCE, BlendMode.DIFFERENCE); + map.put(COSName.EXCLUSION, BlendMode.EXCLUSION); + map.put(COSName.HUE, BlendMode.HUE); + map.put(COSName.SATURATION, BlendMode.SATURATION); + map.put(COSName.LUMINOSITY, BlendMode.LUMINOSITY); + map.put(COSName.COLOR, BlendMode.COLOR); + return map; + } + + private static Map createBlendModeNamesMap() + { + Map map = new HashMap<>(13); + map.put(BlendMode.NORMAL, COSName.NORMAL); + // BlendMode.COMPATIBLE should not be used + map.put(BlendMode.COMPATIBLE, COSName.NORMAL); + map.put(BlendMode.MULTIPLY, COSName.MULTIPLY); + map.put(BlendMode.SCREEN, COSName.SCREEN); + map.put(BlendMode.OVERLAY, COSName.OVERLAY); + map.put(BlendMode.DARKEN, COSName.DARKEN); + map.put(BlendMode.LIGHTEN, COSName.LIGHTEN); + map.put(BlendMode.COLOR_DODGE, COSName.COLOR_DODGE); + map.put(BlendMode.COLOR_BURN, COSName.COLOR_BURN); + map.put(BlendMode.HARD_LIGHT, COSName.HARD_LIGHT); + map.put(BlendMode.SOFT_LIGHT, COSName.SOFT_LIGHT); + map.put(BlendMode.DIFFERENCE, COSName.DIFFERENCE); + map.put(BlendMode.EXCLUSION, COSName.EXCLUSION); + map.put(BlendMode.HUE, COSName.HUE); + map.put(BlendMode.SATURATION, COSName.SATURATION); + map.put(BlendMode.LUMINOSITY, COSName.LUMINOSITY); + map.put(BlendMode.COLOR, COSName.COLOR); + return map; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/NonSeparableBlendMode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/NonSeparableBlendMode.java new file mode 100644 index 00000000000..1e40abcaaa3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/NonSeparableBlendMode.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.blend; + +/** + * Non-separable blend mode (supports blend function). + * + * @author Kühn & Weyh Software GmbH + */ +public abstract class NonSeparableBlendMode extends BlendMode +{ + NonSeparableBlendMode() + { + } + + public abstract void blend(float[] srcValues, float[] dstValues, float[] result); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/SeparableBlendMode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/SeparableBlendMode.java new file mode 100644 index 00000000000..c525fb79c9b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/SeparableBlendMode.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.blend; + +/** + * Separable blend mode (support blendChannel) + * + * @author Kühn & Weyh Software GmbH + */ +public abstract class SeparableBlendMode extends BlendMode +{ + SeparableBlendMode() + { + } + + public abstract float blendChannel(float srcValue, float dstValue); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEBasedColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEBasedColorSpace.java new file mode 100644 index 00000000000..5d0a603c90e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEBasedColorSpace.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +/** + * CIE-based colour spaces specify colours in a way that is independent of the characteristics + * of any particular output device. They are based on an international standard for colour + * specification created by the Commission Internationale de l'Éclairage (CIE). + * + * @author John Hewson + */ +public abstract class PDCIEBasedColorSpace extends PDColorSpace +{ + // + // WARNING: this method is performance sensitive, modify with care! + // + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + // This method calls toRGB to convert images one pixel at a time. For matrix-based + // CIE color spaces this is fast enough. However, it should not be used with any + // color space which uses an ICC Profile as it will be far too slow. + + int width = raster.getWidth(); + int height = raster.getHeight(); + + BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + WritableRaster rgbRaster = rgbImage.getRaster(); + + // always three components: ABC + float[] abc = new float[3]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, abc); + + // 0..255 -> 0..1 + abc[0] /= 255; + abc[1] /= 255; + abc[2] /= 255; + + float[] rgb = toRGB(abc); + + // 0..1 -> 0..255 + rgb[0] *= 255; + rgb[1] *= 255; + rgb[2] *= 255; + + rgbRaster.setPixel(x, y, rgb); + } + } + + return rgbImage; + } + + @Override + public String toString() + { + return getName(); // TODO return more info + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEDictionaryBasedColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEDictionaryBasedColorSpace.java new file mode 100644 index 00000000000..bc5c6b51e77 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCIEDictionaryBasedColorSpace.java @@ -0,0 +1,181 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.color.ColorSpace; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; + +/** + * CIE-based colour spaces that use a dictionary. + * + * @author Ben Litchfield + * @author John Hewson + */ +public abstract class PDCIEDictionaryBasedColorSpace extends PDCIEBasedColorSpace +{ + protected COSDictionary dictionary; + + private static final ColorSpace CIEXYZ = ColorSpace.getInstance(ColorSpace.CS_CIEXYZ); + + // we need to cache whitepoint values, because using getWhitePoint() + // would create a new default object for each pixel conversion if the original + // PDF didn't have a whitepoint array + protected float wpX = 1; + protected float wpY = 1; + protected float wpZ = 1; + + protected PDCIEDictionaryBasedColorSpace(COSName cosName) + { + array = new COSArray(); + dictionary = new COSDictionary(); + array.add(cosName); + array.add(dictionary); + + fillWhitepointCache(getWhitepoint()); + } + + /** + * Creates a new CalRGB color space using the given COS array. + * + * @param rgb the cos array which represents this color space + */ + protected PDCIEDictionaryBasedColorSpace(COSArray rgb) + { + array = rgb; + dictionary = (COSDictionary) array.getObject(1); + + fillWhitepointCache(getWhitepoint()); + } + + /** + * Tests if the current point is the white point. + * + * @return true if the current point is the white point. + */ + protected boolean isWhitePoint() + { + return Float.compare(wpX, 1) == 0 && + Float.compare(wpY, 1) == 0 && + Float.compare(wpZ, 1) == 0; + } + + private void fillWhitepointCache(PDTristimulus whitepoint) + { + wpX = whitepoint.getX(); + wpY = whitepoint.getY(); + wpZ = whitepoint.getZ(); + } + + protected float[] convXYZtoRGB(float x, float y, float z) + { + // toRGB() malfunctions with negative values + // XYZ must be non-negative anyway: + // http://ninedegreesbelow.com/photography/icc-profile-negative-tristimulus.html + if (x < 0) + { + x = 0; + } + if (y < 0) + { + y = 0; + } + if (z < 0) + { + z = 0; + } + return CIEXYZ.toRGB(new float[] + { + x, y, z + }); + } + + /** + * This will return the whitepoint tristimulus. As this is a required field + * this will never return null. A default of 1,1,1 will be returned if the + * pdf does not have any values yet. + * + * @return the whitepoint tristimulus + */ + public final PDTristimulus getWhitepoint() + { + COSArray wp = (COSArray) dictionary.getDictionaryObject(COSName.WHITE_POINT); + if (wp == null) + { + wp = new COSArray(); + wp.add(new COSFloat(1.0f)); + wp.add(new COSFloat(1.0f)); + wp.add(new COSFloat(1.0f)); + } + return new PDTristimulus(wp); + } + + /** + * This will return the BlackPoint tristimulus. This is an optional field + * but has defaults so this will never return null. A default of 0,0,0 will + * be returned if the pdf does not have any values yet. + * + * @return the blackpoint tristimulus + */ + public final PDTristimulus getBlackPoint() + { + COSArray bp = (COSArray) dictionary.getDictionaryObject(COSName.BLACK_POINT); + if (bp == null) + { + bp = new COSArray(); + bp.add(new COSFloat(0.0f)); + bp.add(new COSFloat(0.0f)); + bp.add(new COSFloat(0.0f)); + } + return new PDTristimulus(bp); + } + + /** + * This will set the whitepoint tristimulus. As this is a required field + * this null should not be passed into this function. + * + * @param whitepoint the whitepoint tristimulus + */ + public void setWhitePoint(PDTristimulus whitepoint) + { + COSBase wpArray = whitepoint.getCOSObject(); + if (wpArray != null) + { + dictionary.setItem(COSName.WHITE_POINT, wpArray); + } + fillWhitepointCache(whitepoint); + } + + /** + * This will set the BlackPoint tristimulus. As this is a required field + * this null should not be passed into this function. + * + * @param blackpoint the BlackPoint tristimulus + */ + public void setBlackPoint(PDTristimulus blackpoint) + { + COSBase bpArray = null; + if (blackpoint != null) + { + bpArray = blackpoint.getCOSObject(); + } + dictionary.setItem(COSName.BLACK_POINT, bpArray); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java new file mode 100644 index 00000000000..369597d2b85 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalGray.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.util.HashMap; +import java.util.Map; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; + +/** + * A CalGray colour space is a special case of a single-component CIE-based + * colour space. + * + * @author John Hewson + * @author Ben Litchfield + */ +public final class PDCalGray extends PDCIEDictionaryBasedColorSpace +{ + private final PDColor initialColor = new PDColor(new float[] { 0 }, this); + + // PDFBOX-4119: cache the results for much improved performance + // cached values MUST be cloned, because they are modified by the caller. + // this can be observed in rendering of PDFBOX-1724 + private final Map map1 = new HashMap<>(); + + /** + * Create a new CalGray color space. + */ + public PDCalGray() + { + super(COSName.CALGRAY); + } + + /** + * Creates a new CalGray color space using the given COS array. + * + * @param array the COS array which represents this color space + */ + public PDCalGray(COSArray array) + { + super(array); + } + + @Override + public String getName() + { + return COSName.CALGRAY.getName(); + } + + @Override + public int getNumberOfComponents() + { + return 1; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + @Override + public float[] toRGB(float[] value) + { + // see implementation of toRGB in PDCalRGB, and PDFBOX-2971 + if (isWhitePoint()) + { + float a = value[0]; + float[] result = map1.get(a); + if (result != null) + { + return result.clone(); + } + float gamma = getGamma(); + float powAG = (float) Math.pow(a, gamma); + result = convXYZtoRGB(powAG, powAG, powAG); + map1.put(a, result.clone()); + return result; + } + else + { + return new float[] { value[0], value[0], value[0] }; + } + } + + /** + * This will get the gamma value. If none is present then the default of 1 + * will be returned. + * + * @return The gamma value. + */ + public float getGamma() + { + float retval = 1.0f; + COSNumber gamma = (COSNumber) dictionary.getDictionaryObject(COSName.GAMMA); + if (gamma != null) + { + retval = gamma.floatValue(); + } + return retval; + } + + /** + * Set the gamma value. + * + * @param value The new gamma value. + */ + public void setGamma(float value) + { + dictionary.setItem(COSName.GAMMA, new COSFloat(value)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java new file mode 100644 index 00000000000..39045293f9e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDCalRGB.java @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.util.Matrix; + +/** + * A CalRGB colour space is a CIE-based colour space with one transformation stage instead of two. + * In this type of space, A, B, and C represent calibrated red, green, and blue colour values. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class PDCalRGB extends PDCIEDictionaryBasedColorSpace +{ + private final PDColor initialColor = new PDColor(new float[] { 0, 0, 0 }, this); + + /** + * Creates a new CalRGB color space. + */ + public PDCalRGB() + { + super(COSName.CALRGB); + } + + /** + * Creates a new CalRGB color space using the given COS array. + * @param rgb the cos array which represents this color space + */ + public PDCalRGB(COSArray rgb) + { + super(rgb); + } + + @Override + public String getName() + { + return COSName.CALRGB.getName(); + } + + @Override + public int getNumberOfComponents() + { + return 3; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, 1, 0, 1, 0, 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + @Override + public float[] toRGB(float[] value) + { + if (isWhitePoint()) + { + float a = value[0]; + float b = value[1]; + float c = value[2]; + + PDGamma gamma = getGamma(); + float powAR = (float)Math.pow(a, gamma.getR()); + float powBG = (float)Math.pow(b, gamma.getG()); + float powCB = (float)Math.pow(c, gamma.getB()); + + float[] matrix = getMatrix(); + float mXA = matrix[0]; + float mYA = matrix[1]; + float mZA = matrix[2]; + float mXB = matrix[3]; + float mYB = matrix[4]; + float mZB = matrix[5]; + float mXC = matrix[6]; + float mYC = matrix[7]; + float mZC = matrix[8]; + + float x = mXA * powAR + mXB * powBG + mXC * powCB; + float y = mYA * powAR + mYB * powBG + mYC * powCB; + float z = mZA * powAR + mZB * powBG + mZC * powCB; + return convXYZtoRGB(x, y, z); + } + else + { + // this is a hack, we simply skip CIE calibration of the RGB value + // this works only with whitepoint D65 (0.9505 1.0 1.089) + // see PDFBOX-2553 + return new float[] { value[0], value[1], value[2] }; + } + } + + /** + * Returns the gamma value. + * If none is present then the default of 1,1,1 will be returned. + * @return the gamma value + */ + public final PDGamma getGamma() + { + COSArray gammaArray = (COSArray) dictionary.getDictionaryObject(COSName.GAMMA); + if (gammaArray == null) + { + gammaArray = new COSArray(); + gammaArray.add(new COSFloat(1.0f)); + gammaArray.add(new COSFloat(1.0f)); + gammaArray.add(new COSFloat(1.0f)); + dictionary.setItem(COSName.GAMMA, gammaArray); + } + return new PDGamma(gammaArray); + } + + /** + * Returns the linear interpretation matrix, which is an array of nine numbers. + * If the underlying dictionary contains null then the identity matrix will be returned. + * @return the linear interpretation matrix + */ + public final float[] getMatrix() + { + COSArray matrix = (COSArray)dictionary.getDictionaryObject(COSName.MATRIX); + if (matrix == null) + { + return new float[] { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; + } + else + { + return matrix.toFloatArray(); + } + } + + /** + * Sets the gamma value. + * @param gamma the new gamma value + */ + public final void setGamma(PDGamma gamma) + { + COSArray gammaArray = null; + if(gamma != null) + { + gammaArray = gamma.getCOSArray(); + } + dictionary.setItem(COSName.GAMMA, gammaArray); + } + + /** + * Sets the linear interpretation matrix. + * Passing in null will clear the matrix. + * @param matrix the new linear interpretation matrix, or null + */ + public final void setMatrix(Matrix matrix) + { + COSArray matrixArray = null; + if(matrix != null) + { + matrixArray = matrix.toCOSArray(); + } + dictionary.setItem(COSName.MATRIX, matrixArray); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java new file mode 100644 index 00000000000..2cc1836de1a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColor.java @@ -0,0 +1,191 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; + +import java.io.IOException; +import java.util.Arrays; + +/** + * A color value, consisting of one or more color components, or for pattern color spaces, + * a name and optional color components. + * Color values are not associated with any given color space. + * + * Instances of PDColor are immutable. + * + * @author John Hewson + */ +public final class PDColor +{ + private final float[] components; + private final COSName patternName; + private final PDColorSpace colorSpace; + + /** + * Creates a PDColor containing the given color value. + * @param array a COS array containing the color value + * @param colorSpace color space in which the color value is defined + */ + public PDColor(COSArray array, PDColorSpace colorSpace) + { + if (array.size() > 0 && array.get(array.size() - 1) instanceof COSName) + { + // color components (optional), for the color of an uncoloured tiling pattern + components = new float[array.size() - 1]; + for (int i = 0; i < array.size() - 1; i++) + { + components[i] = ((COSNumber)array.get(i)).floatValue(); + } + + // pattern name (required) + patternName = (COSName)array.get(array.size() - 1); + } + else + { + // color components only + components = new float[array.size()]; + for (int i = 0; i < array.size(); i++) + { + components[i] = ((COSNumber)array.get(i)).floatValue(); + } + patternName = null; + } + this.colorSpace = colorSpace; + } + + /** + * Creates a PDColor containing the given color component values. + * @param components array of color component values + * @param colorSpace color space in which the components are defined + */ + public PDColor(float[] components, PDColorSpace colorSpace) + { + this.components = components.clone(); + this.patternName = null; + this.colorSpace = colorSpace; + } + + /** + * Creates a PDColor containing the given pattern name. + * @param patternName the name of a pattern in a pattern dictionary + * @param colorSpace color space in which the pattern is defined + */ + public PDColor(COSName patternName, PDColorSpace colorSpace) + { + this.components = new float[0]; + this.patternName = patternName; + this.colorSpace = colorSpace; + } + + /** + * Creates a PDColor containing the given color component values and pattern name. + * @param components array of color component values + * @param patternName the name of a pattern in a pattern dictionary + * @param colorSpace color space in which the pattern/components are defined + */ + public PDColor(float[] components, COSName patternName, PDColorSpace colorSpace) + { + this.components = components.clone(); + this.patternName = patternName; + this.colorSpace = colorSpace; + } + + /** + * Returns the components of this color value. + * @return the components of this color value, never null. + */ + public float[] getComponents() + { + if (colorSpace instanceof PDPattern || colorSpace == null) + { + // colorspace of the pattern color isn't known, so just clone + // null colorspace can happen with empty annotation color + // see PDFBOX-3351-538928-p4.pdf + return components.clone(); + } + // PDFBOX-4279: copyOf instead of clone in case array is too small + return Arrays.copyOf(components, colorSpace.getNumberOfComponents()); + } + + /** + * Returns the pattern name from this color value. + * @return the pattern name from this color value + */ + public COSName getPatternName() + { + return patternName; + } + + /** + * Returns true if this color value is a pattern. + * @return true if this color value is a pattern + */ + public boolean isPattern() + { + return patternName != null; + } + + /** + * Returns the packed RGB value for this color, if any. + * @return RGB + * @throws IOException if the color conversion fails + * @throws IllegalStateException if this color value is a pattern. + */ + public int toRGB() throws IOException + { + float[] floats = colorSpace.toRGB(components); + int r = Math.round(floats[0] * 255); + int g = Math.round(floats[1] * 255); + int b = Math.round(floats[2] * 255); + int rgb = r; + rgb = (rgb << 8) + g; + rgb = (rgb << 8) + b; + return rgb; + } + + /** + * Returns the color component values as a COS array + * @return the color component values as a COS array + */ + public COSArray toCOSArray() + { + COSArray array = new COSArray(); + array.setFloatArray(components); + if (patternName != null) + { + array.add(patternName); + } + return array; + } + + /** + * Returns the color space in which this color value is defined. + */ + public PDColorSpace getColorSpace() + { + return colorSpace; + } + + @Override + public String toString() + { + return "PDColor{components=" + Arrays.toString(components) + ", patternName=" + patternName + ", colorSpace=" + colorSpace + '}'; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java new file mode 100644 index 00000000000..945aa3c34c5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java @@ -0,0 +1,323 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.MissingResourceException; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +import java.awt.Transparency; +import java.awt.image.BufferedImage; +import java.awt.image.ColorConvertOp; +import java.awt.image.ComponentColorModel; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.awt.color.ColorSpace; +import java.awt.image.ColorModel; +import org.apache.pdfbox.pdmodel.ResourceCache; + +/** + * A color space specifies how the colours of graphics objects will be painted on the page. + * + * @author John Hewson + * @author Ben Litchfield + */ +public abstract class PDColorSpace implements COSObjectable +{ + /** + * Creates a color space given a name or array. + * @param colorSpace the color space COS object + * @return a new color space + * @throws IOException if the color space is unknown or cannot be created + */ + public static PDColorSpace create(COSBase colorSpace) throws IOException + { + return create(colorSpace, null); + } + + /** + * Creates a color space given a name or array. Abbreviated device color names are not supported + * here, please replace them first. + * + * @param colorSpace the color space COS object + * @param resources the current resources. + * @return a new color space + * @throws MissingResourceException if the color space is missing in the resources dictionary + * @throws IOException if the color space is unknown or cannot be created + */ + public static PDColorSpace create(COSBase colorSpace, + PDResources resources) + throws IOException + { + return create(colorSpace, resources, false); + } + + /** + * Creates a color space given a name or array. Abbreviated device color names are not supported + * here, please replace them first. This method is for PDFBox internal use only, others should + * use {@link #create(COSBase, PDResources)}. + * + * @param colorSpace the color space COS object + * @param resources the current resources. + * @param wasDefault if current color space was used by a default color space. + * @return a new color space. + * @throws MissingResourceException if the color space is missing in the resources dictionary + * @throws IOException if the color space is unknown or cannot be created. + */ + public static PDColorSpace create(COSBase colorSpace, + PDResources resources, + boolean wasDefault) + throws IOException + { + if (colorSpace instanceof COSObject) + { + return createFromCOSObject((COSObject) colorSpace, resources); + } + else if (colorSpace instanceof COSName) + { + COSName name = (COSName)colorSpace; + + // default color spaces + if (resources != null) + { + COSName defaultName = null; + if (name.equals(COSName.DEVICECMYK) && + resources.hasColorSpace(COSName.DEFAULT_CMYK)) + { + defaultName = COSName.DEFAULT_CMYK; + } + else if (name.equals(COSName.DEVICERGB) && + resources.hasColorSpace(COSName.DEFAULT_RGB)) + { + defaultName = COSName.DEFAULT_RGB; + } + else if (name.equals(COSName.DEVICEGRAY) && + resources.hasColorSpace(COSName.DEFAULT_GRAY)) + { + defaultName = COSName.DEFAULT_GRAY; + } + + if (resources.hasColorSpace(defaultName) && !wasDefault) + { + return resources.getColorSpace(defaultName, true); + } + } + + // built-in color spaces + if (name == COSName.DEVICECMYK) + { + return PDDeviceCMYK.INSTANCE; + } + else if (name == COSName.DEVICERGB) + { + return PDDeviceRGB.INSTANCE; + } + else if (name == COSName.DEVICEGRAY) + { + return PDDeviceGray.INSTANCE; + } + else if (name == COSName.PATTERN) + { + return new PDPattern(resources); + } + else if (resources != null) + { + if (!resources.hasColorSpace(name)) + { + throw new MissingResourceException("Missing color space: " + name.getName()); + } + return resources.getColorSpace(name); + } + else + { + throw new MissingResourceException("Unknown color space: " + name.getName()); + } + } + else if (colorSpace instanceof COSArray) + { + COSArray array = (COSArray)colorSpace; + if (array.size() == 0) + { + throw new IOException("Colorspace array is empty"); + } + COSBase base = array.getObject(0); + if (!(base instanceof COSName)) + { + throw new IOException("First element in colorspace array must be a name"); + } + COSName name = (COSName) base; + + // TODO cache these returned color spaces? + + if (name == COSName.CALGRAY) + { + return new PDCalGray(array); + } + else if (name == COSName.CALRGB) + { + return new PDCalRGB(array); + } + else if (name == COSName.DEVICEN) + { + return new PDDeviceN(array); + } + else if (name == COSName.INDEXED) + { + return new PDIndexed(array, resources); + } + else if (name == COSName.SEPARATION) + { + return new PDSeparation(array); + } + else if (name == COSName.ICCBASED) + { + return PDICCBased.create(array, resources); + } + else if (name == COSName.LAB) + { + return new PDLab(array); + } + else if (name == COSName.PATTERN) + { + if (array.size() == 1) + { + return new PDPattern(resources); + } + else + { + return new PDPattern(resources, PDColorSpace.create(array.get(1))); + } + } + else if (name == COSName.DEVICECMYK || + name == COSName.DEVICERGB || + name == COSName.DEVICEGRAY) + { + // not allowed in an array, but we sometimes encounter these regardless + return create(name, resources, wasDefault); + } + else + { + throw new IOException("Invalid color space kind: " + name); + } + } + else + { + throw new IOException("Expected a name or array but got: " + colorSpace); + } + } + + private static PDColorSpace createFromCOSObject(COSObject colorSpace, PDResources resources) + throws IOException + { + PDColorSpace cs; + if (resources != null && resources.getResourceCache() != null) + { + ResourceCache resourceCache = resources.getResourceCache(); + cs = resourceCache.getColorSpace(colorSpace); + if (cs != null) + { + return cs; + } + } + cs = create(colorSpace.getObject(), resources); + if (resources != null && resources.getResourceCache() != null && cs != null) + { + ResourceCache resourceCache = resources.getResourceCache(); + resourceCache.put(colorSpace, cs); + } + return cs; + } + + // array for the given parameters + protected COSArray array; + + /** + * Returns the name of the color space. + * @return the name of the color space + */ + public abstract String getName(); + + /** + * Returns the number of components in this color space + * @return the number of components in this color space + */ + public abstract int getNumberOfComponents(); + + /** + * Returns the default decode array for this color space. + * @param bitsPerComponent the number of bits per component. + * @return the default decode array + */ + public abstract float[] getDefaultDecode(int bitsPerComponent); + + /** + * Returns the initial color value for this color space. + * @return the initial color value for this color space + */ + public abstract PDColor getInitialColor(); + + /** + * Returns the RGB equivalent of the given color value. + * @param value a color value with component values between 0 and 1 + * @return an array of R,G,B value between 0 and 255 + * @throws IOException if the color conversion fails + */ + public abstract float[] toRGB(float[] value) throws IOException; + + /** + * Returns the (A)RGB equivalent of the given raster. + * @param raster the source raster + * @return an (A)RGB buffered image + * @throws IOException if the color conversion fails + */ + public abstract BufferedImage toRGBImage(WritableRaster raster) throws IOException; + + /** + * Returns the (A)RGB equivalent of the given raster, using the given AWT color space + * to perform the conversion. + * @param raster the source raster + * @param colorSpace the AWT + * @return an (A)RGB buffered image + */ + protected BufferedImage toRGBImageAWT(WritableRaster raster, ColorSpace colorSpace) + { + // + // WARNING: this method is performance sensitive, modify with care! + // + + // ICC Profile color transforms are only fast when performed using ColorConvertOp + ColorModel colorModel = new ComponentColorModel(colorSpace, + false, false, Transparency.OPAQUE, raster.getDataBuffer().getDataType()); + + BufferedImage src = new BufferedImage(colorModel, raster, false, null); + BufferedImage dest = new BufferedImage(raster.getWidth(), raster.getHeight(), + BufferedImage.TYPE_INT_RGB); + ColorConvertOp op = new ColorConvertOp(null); + op.filter(src, dest); + return dest; + } + + @Override + public COSBase getCOSObject() + { + return array; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java new file mode 100644 index 00000000000..aa36a3bb345 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java @@ -0,0 +1,193 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.util.Arrays; + +import org.apache.pdfbox.cos.COSName; + +import java.awt.color.ColorSpace; +import java.awt.color.ICC_ColorSpace; +import java.awt.color.ICC_Profile; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +import java.io.InputStream; + +/** + * Allows colors to be specified according to the subtractive CMYK (cyan, magenta, yellow, black) + * model typical of printers and other paper-based output devices. + * + * @author John Hewson + * @author Ben Litchfield + */ +public class PDDeviceCMYK extends PDDeviceColorSpace +{ + /** The single instance of this class. */ + public static PDDeviceCMYK INSTANCE; + static + { + INSTANCE = new PDDeviceCMYK(); + } + + private final PDColor initialColor = new PDColor(new float[] { 0, 0, 0, 1 }, this); + private volatile ICC_ColorSpace awtColorSpace; + private boolean usePureJavaCMYKConversion = false; + + protected PDDeviceCMYK() + { + } + + /** + * Lazy load the ICC profile, because it's slow. + */ + protected void init() throws IOException + { + // no need to synchronize this check as it is atomic + if (awtColorSpace != null) + { + return; + } + synchronized (this) + { + // we might have been waiting for another thread, so check again + if (awtColorSpace != null) + { + return; + } + // loads the ICC color profile for CMYK + ICC_Profile iccProfile = getICCProfile(); + if (iccProfile == null) + { + throw new IOException("Default CMYK color profile could not be loaded"); + } + awtColorSpace = new ICC_ColorSpace(iccProfile); + + // there is a JVM bug which results in a CMMException which appears to be a race + // condition caused by lazy initialization of the color transform, so we perform + // an initial color conversion while we're still in a static context, see PDFBOX-2184 + awtColorSpace.toRGB(new float[] { 0, 0, 0, 0 }); + usePureJavaCMYKConversion = System + .getProperty("org.apache.pdfbox.rendering.UsePureJavaCMYKConversion") != null; + } + } + + protected ICC_Profile getICCProfile() throws IOException + { + // Adobe Acrobat uses "U.S. Web Coated (SWOP) v2" as the default + // CMYK profile, however it is not available under an open license. + // Instead, the "ISO Coated v2 300% (basICColor)" is used, which + // is an open alternative to the "ISO Coated v2 300% (ECI)" profile. + + String name = "/org/apache/pdfbox/resources/icc/ISOcoated_v2_300_bas.icc"; + + try (InputStream is = PDDeviceCMYK.class.getResourceAsStream(name)) + { + if (is == null) + { + throw new IOException("Error loading resource: " + name); + } + return ICC_Profile.getInstance(is); + } + } + + @Override + public String getName() + { + return COSName.DEVICECMYK.getName(); + } + + @Override + public int getNumberOfComponents() + { + return 4; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, 1, 0, 1, 0, 1, 0, 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + @Override + public float[] toRGB(float[] value) throws IOException + { + init(); + return awtColorSpace.toRGB(value); + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + init(); + return toRGBImageAWT(raster, awtColorSpace); + } + + @Override + protected BufferedImage toRGBImageAWT(WritableRaster raster, ColorSpace colorSpace) + { + if (usePureJavaCMYKConversion) + { + BufferedImage dest = new BufferedImage(raster.getWidth(), raster.getHeight(), + BufferedImage.TYPE_INT_RGB); + ColorSpace destCS = dest.getColorModel().getColorSpace(); + WritableRaster destRaster = dest.getRaster(); + float[] srcValues = new float[4]; + float[] lastValues = new float[] { -1.0f, -1.0f, -1.0f, -1.0f }; + float[] destValues = new float[3]; + int width = raster.getWidth(); + int startX = raster.getMinX(); + int height = raster.getHeight(); + int startY = raster.getMinY(); + for (int x = startX; x < width + startX; x++) + { + for (int y = startY; y < height + startY; y++) + { + raster.getPixel(x, y, srcValues); + // check if the last value can be reused + if (!Arrays.equals(lastValues, srcValues)) + { + for (int k = 0; k < 4; k++) + { + lastValues[k] = srcValues[k]; + srcValues[k] = srcValues[k] / 255f; + } + // use CIEXYZ as intermediate format to optimize the color conversion + destValues = destCS.fromCIEXYZ(colorSpace.toCIEXYZ(srcValues)); + for (int k = 0; k < destValues.length; k++) + { + destValues[k] = destValues[k] * 255f; + } + } + destRaster.setPixel(x, y, destValues); + } + } + return dest; + } + else + { + return super.toRGBImageAWT(raster, colorSpace); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceColorSpace.java new file mode 100644 index 00000000000..eb4f07e50af --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceColorSpace.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * Device colour spaces directly specify colours or shades of gray produced by an output device. + * + * @author John Hewson + */ +public abstract class PDDeviceColorSpace extends PDColorSpace +{ + @Override + public String toString() + { + return getName(); + } + + @Override + public COSBase getCOSObject() + { + return COSName.getPDFName(getName()); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java new file mode 100644 index 00000000000..5c55cf0c088 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSName; + +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +/** + * A color space with black, white, and intermediate shades of gray. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDDeviceGray extends PDDeviceColorSpace +{ + /** The single instance of this class. */ + public static final PDDeviceGray INSTANCE = new PDDeviceGray(); + + private final PDColor initialColor = new PDColor(new float[] { 0 }, this); + + private PDDeviceGray() + { + } + + @Override + public String getName() + { + return COSName.DEVICEGRAY.getName(); + } + + @Override + public int getNumberOfComponents() + { + return 1; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + @Override + public float[] toRGB(float[] value) + { + return new float[] { value[0], value[0], value[0] }; + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + int width = raster.getWidth(); + int height = raster.getHeight(); + + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + + int[] gray = new int[1]; + int[] rgb = new int[3]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, gray); + rgb[0] = gray[0]; + rgb[1] = gray[0]; + rgb[2] = gray[0]; + image.getRaster().setPixel(x, y, rgb); + } + } + + return image; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java new file mode 100644 index 00000000000..02ba23a299b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java @@ -0,0 +1,592 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; + +/** + * DeviceN colour spaces may contain an arbitrary number of colour components. + * DeviceN represents a colour space containing multiple components that correspond to colorants + * of some target device. As with Separation colour spaces, readers are able to approximate the + * colorants if they are not available on the current output device, such as a display + * + * @author John Hewson + * @author Ben Litchfield + */ +public class PDDeviceN extends PDSpecialColorSpace +{ + // array indexes + private static final int COLORANT_NAMES = 1; + private static final int ALTERNATE_CS = 2; + private static final int TINT_TRANSFORM = 3; + private static final int DEVICEN_ATTRIBUTES = 4; + + // fields + private PDColorSpace alternateColorSpace = null; + private PDFunction tintTransform = null; + private PDDeviceNAttributes attributes; + private PDColor initialColor; + + // color conversion cache + private int numColorants; + private int[] colorantToComponent; + private PDColorSpace processColorSpace; + private PDSeparation[] spotColorSpaces; + + /** + * Creates a new DeviceN color space. + */ + public PDDeviceN() + { + array = new COSArray(); + array.add(COSName.DEVICEN); + + // empty placeholder + array.add(COSNull.NULL); + array.add(COSNull.NULL); + array.add(COSNull.NULL); + } + + /** + * Creates a new DeviceN color space from the given COS array. + * @param deviceN an array containing the color space information + */ + public PDDeviceN(COSArray deviceN) throws IOException + { + array = deviceN; + alternateColorSpace = PDColorSpace.create(array.getObject(ALTERNATE_CS)); + tintTransform = PDFunction.create(array.getObject(TINT_TRANSFORM)); + + if (array.size() > DEVICEN_ATTRIBUTES) + { + attributes = new PDDeviceNAttributes((COSDictionary)array.getObject(DEVICEN_ATTRIBUTES)); + } + initColorConversionCache(); + + // set initial color space + int n = getNumberOfComponents(); + float[] initial = new float[n]; + for (int i = 0; i < n; i++) + { + initial[i] = 1; + } + initialColor = new PDColor(initial, this); + } + + // initializes the color conversion cache + private void initColorConversionCache() throws IOException + { + // there's nothing to cache for non-attribute spaces + if (attributes == null) + { + return; + } + + // colorant names + List colorantNames = getColorantNames(); + numColorants = colorantNames.size(); + + // process components + colorantToComponent = new int[numColorants]; + for (int c = 0; c < numColorants; c++) + { + colorantToComponent[c] = -1; + } + + if (attributes.getProcess() != null) + { + List components = attributes.getProcess().getComponents(); + + // map each colorant to the corresponding process component (if any) + for (int c = 0; c < numColorants; c++) + { + colorantToComponent[c] = components.indexOf(colorantNames.get(c)); + } + + // process color space + processColorSpace = attributes.getProcess().getColorSpace(); + } + + // spot colorants + spotColorSpaces = new PDSeparation[numColorants]; + + // spot color spaces + Map spotColorants = attributes.getColorants(); + + // map each colorant to the corresponding spot color space + for (int c = 0; c < numColorants; c++) + { + String name = colorantNames.get(c); + PDSeparation spot = spotColorants.get(name); + if (spot != null) + { + // spot colorant + spotColorSpaces[c] = spot; + + // spot colors may replace process colors with same name + // providing that the subtype is not NChannel. + if (!isNChannel()) + { + colorantToComponent[c] = -1; + } + } + else + { + // process colorant + spotColorSpaces[c] = null; + } + } + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + if (attributes != null) + { + return toRGBWithAttributes(raster); + } + else + { + return toRGBWithTintTransform(raster); + } + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + private BufferedImage toRGBWithAttributes(WritableRaster raster) throws IOException + { + int width = raster.getWidth(); + int height = raster.getHeight(); + + BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + WritableRaster rgbRaster = rgbImage.getRaster(); + + // white background + Graphics2D g = rgbImage.createGraphics(); + g.setBackground(Color.WHITE); + g.clearRect(0, 0, width, height); + g.dispose(); + + // look up each colorant + for (int c = 0; c < numColorants; c++) + { + PDColorSpace componentColorSpace; + if (colorantToComponent[c] >= 0) + { + // process color + componentColorSpace = processColorSpace; + } + else if (spotColorSpaces[c] == null) + { + // TODO this happens in the Altona Visual test, is there a better workaround? + // missing spot color, fallback to using tintTransform + return toRGBWithTintTransform(raster); + } + else + { + // spot color + componentColorSpace = spotColorSpaces[c]; + } + + // copy single-component to its own raster in the component color space + WritableRaster componentRaster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE, + width, height, componentColorSpace.getNumberOfComponents(), new Point(0, 0)); + + int[] samples = new int[numColorants]; + int[] componentSamples = new int[componentColorSpace.getNumberOfComponents()]; + boolean isProcessColorant = colorantToComponent[c] >= 0; + int componentIndex = colorantToComponent[c]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, samples); + if (isProcessColorant) + { + // process color + componentSamples[componentIndex] = samples[c]; + } + else + { + // spot color + componentSamples[0] = samples[c]; + } + componentRaster.setPixel(x, y, componentSamples); + } + } + + // convert single-component raster to RGB + BufferedImage rgbComponentImage = componentColorSpace.toRGBImage(componentRaster); + WritableRaster rgbComponentRaster = rgbComponentImage.getRaster(); + + // combine the RGB component with the RGB composite raster + int[] rgbChannel = new int[3]; + int[] rgbComposite = new int[3]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + rgbComponentRaster.getPixel(x, y, rgbChannel); + rgbRaster.getPixel(x, y, rgbComposite); + + // multiply (blend mode) + rgbChannel[0] = rgbChannel[0] * rgbComposite[0] >> 8; + rgbChannel[1] = rgbChannel[1] * rgbComposite[1] >> 8; + rgbChannel[2] = rgbChannel[2] * rgbComposite[2] >> 8; + + rgbRaster.setPixel(x, y, rgbChannel); + } + } + } + + return rgbImage; + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + private BufferedImage toRGBWithTintTransform(WritableRaster raster) throws IOException + { + // cache color mappings + Map map1 = new HashMap<>(); + String key; + + int width = raster.getWidth(); + int height = raster.getHeight(); + + // use the tint transform to convert the sample into + // the alternate color space (this is usually 1:many) + BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + WritableRaster rgbRaster = rgbImage.getRaster(); + int[] rgb = new int[3]; + int numSrcComponents = getColorantNames().size(); + float[] src = new float[numSrcComponents]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, src); + // use a string representation as key + key = Float.toString(src[0]); + for (int s = 1; s < numSrcComponents; s++) + { + key += "#" + Float.toString(src[s]); + } + int[] pxl = map1.get(key); + if (pxl != null) + { + rgbRaster.setPixel(x, y, pxl); + continue; + } + // scale to 0..1 + for (int s = 0; s < numSrcComponents; s++) + { + src[s] = src[s] / 255; + } + + // convert to alternate color space via tint transform + float[] result = tintTransform.eval(src); + + // convert from alternate color space to RGB + float[] rgbFloat = alternateColorSpace.toRGB(result); + + for (int s = 0; s < 3; s++) + { + // scale to 0..255 + rgb[s] = (int) (rgbFloat[s] * 255f); + } + // must clone because rgb is reused + map1.put(key, rgb.clone()); + + rgbRaster.setPixel(x, y, rgb); + } + } + return rgbImage; + } + + @Override + public float[] toRGB(float[] value) throws IOException + { + if (attributes != null) + { + return toRGBWithAttributes(value); + } + else + { + return toRGBWithTintTransform(value); + } + } + + private float[] toRGBWithAttributes(float[] value) throws IOException + { + float[] rgbValue = new float[] { 1, 1, 1 }; + + // look up each colorant + for (int c = 0; c < numColorants; c++) + { + PDColorSpace componentColorSpace; + if (colorantToComponent[c] >= 0) + { + // process color + componentColorSpace = processColorSpace; + } + else if (spotColorSpaces[c] == null) + { + // TODO this happens in the Altona Visual test, is there a better workaround? + // missing spot color, fallback to using tintTransform + return toRGBWithTintTransform(value); + } + else + { + // spot color + componentColorSpace = spotColorSpaces[c]; + } + + // get the single component + boolean isProcessColorant = colorantToComponent[c] >= 0; + float[] componentSamples = new float[componentColorSpace.getNumberOfComponents()]; + int componentIndex = colorantToComponent[c]; + + if (isProcessColorant) + { + // process color + componentSamples[componentIndex] = value[c]; + } + else + { + // spot color + componentSamples[0] = value[c]; + } + + // convert single component to RGB + float[] rgbComponent = componentColorSpace.toRGB(componentSamples); + + // combine the RGB component value with the RGB composite value + + // multiply (blend mode) + rgbValue[0] *= rgbComponent[0]; + rgbValue[1] *= rgbComponent[1]; + rgbValue[2] *= rgbComponent[2]; + } + + return rgbValue; + } + + private float[] toRGBWithTintTransform(float[] value) throws IOException + { + // use the tint transform to convert the sample into + // the alternate color space (this is usually 1:many) + float[] altValue = tintTransform.eval(value); + + // convert the alternate color space to RGB + return alternateColorSpace.toRGB(altValue); + } + + /** + * Returns true if this color space has the NChannel subtype. + * @return true if subtype is NChannel + */ + public boolean isNChannel() + { + return attributes != null && attributes.isNChannel(); + } + + @Override + public String getName() + { + return COSName.DEVICEN.getName(); + } + + @Override + public final int getNumberOfComponents() + { + return getColorantNames().size(); + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + int n = getNumberOfComponents(); + float[] decode = new float[n * 2]; + for (int i = 0; i < n; i++) + { + decode[i * 2 + 1] = 1; + } + return decode; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + /** + * Returns the list of colorants. + * @return the list of colorants + */ + public List getColorantNames() + { + COSArray names = (COSArray)array.getObject(COLORANT_NAMES); + return COSArrayList.convertCOSNameCOSArrayToList(names); + } + + /** + * Returns the attributes associated with the DeviceN color space. + * @return the DeviceN attributes + */ + public PDDeviceNAttributes getAttributes() + { + return attributes; + } + + /** + * Sets the list of colorants + * @param names the list of colorants + */ + public void setColorantNames(List names) + { + COSArray namesArray = COSArrayList.convertStringListToCOSNameCOSArray(names); + array.set(COLORANT_NAMES, namesArray); + } + + /** + * Sets the color space attributes. + * If null is passed in then all attribute will be removed. + * @param attributes the color space attributes, or null + */ + public void setAttributes(PDDeviceNAttributes attributes) + { + this.attributes = attributes; + if (attributes == null) + { + array.remove(DEVICEN_ATTRIBUTES); + } + else + { + // make sure array is large enough + while (array.size() <= DEVICEN_ATTRIBUTES) + { + array.add(COSNull.NULL); + } + array.set(DEVICEN_ATTRIBUTES, attributes.getCOSDictionary()); + } + } + + /** + * This will get the alternate color space for this separation. + * + * @return The alternate color space. + * + * @throws IOException If there is an error getting the alternate color + * space. + */ + public PDColorSpace getAlternateColorSpace() throws IOException + { + if (alternateColorSpace == null) + { + alternateColorSpace = PDColorSpace.create(array.getObject(ALTERNATE_CS)); + } + return alternateColorSpace; + } + + /** + * This will set the alternate color space. + * + * @param cs The alternate color space. + */ + public void setAlternateColorSpace(PDColorSpace cs) + { + alternateColorSpace = cs; + COSBase space = null; + if (cs != null) + { + space = cs.getCOSObject(); + } + array.set(ALTERNATE_CS, space); + } + + /** + * This will get the tint transform function. + * + * @return The tint transform function. + * + * @throws IOException if there is an error creating the function. + */ + public PDFunction getTintTransform() throws IOException + { + if (tintTransform == null) + { + tintTransform = PDFunction.create(array.getObject(TINT_TRANSFORM)); + } + return tintTransform; + } + + /** + * This will set the tint transform function. + * + * @param tint The tint transform function. + */ + public void setTintTransform(PDFunction tint) + { + tintTransform = tint; + array.set(TINT_TRANSFORM, tint); + } + + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(getName()); + sb.append('{'); + for (String col : getColorantNames()) + { + sb.append('\"'); + sb.append(col); + sb.append("\" "); + } + sb.append(alternateColorSpace.getName()); + sb.append(' '); + sb.append(tintTransform); + sb.append(' '); + if (attributes != null) + { + sb.append(attributes); + } + sb.append('}'); + return sb.toString(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNAttributes.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNAttributes.java new file mode 100644 index 00000000000..56fd14630fd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNAttributes.java @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSDictionaryMap; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Contains additional information about the components of colour space. + * Instead of using the alternate color space and tint transform, conforming readers may use custom + * blending algorithms, along with other information provided in the attributes dictionary. + * + * @author Ben Litchfield + */ +public final class PDDeviceNAttributes +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDDeviceNAttributes.class); + + private final COSDictionary dictionary; + + /** + * Creates a new DeviceN colour space attributes dictionary. + */ + public PDDeviceNAttributes() + { + dictionary = new COSDictionary(); + } + + /** + * Creates a new DeviceN colour space attributes dictionary from the given dictionary. + * @param attributes a dictionary that has all of the attributes + */ + public PDDeviceNAttributes(COSDictionary attributes) + { + dictionary = attributes; + } + + /** + * Returns the underlying COS dictionary. + * @return the dictionary that this object wraps + */ + public COSDictionary getCOSDictionary() + { + return dictionary; + } + + /** + * Returns a map of colorants and their associated Separation color space. + * @return map of colorants to color spaces, never null. + * @throws IOException If there is an error reading a color space + */ + public Map getColorants() throws IOException + { + Map actuals = new HashMap<>(); + COSDictionary colorants = (COSDictionary)dictionary.getDictionaryObject(COSName.COLORANTS); + if(colorants == null) + { + colorants = new COSDictionary(); + dictionary.setItem(COSName.COLORANTS, colorants); + } + for(COSName name : colorants.keySet()) + { + COSBase value = colorants.getDictionaryObject(name); + actuals.put(name.getName(), (PDSeparation)PDColorSpace.create(value)); + } + return new COSDictionaryMap<>(actuals, colorants); + } + + /** + * Returns the DeviceN Process Dictionary, or null if it is missing. + * @return the DeviceN Process Dictionary, or null if it is missing. + */ + public PDDeviceNProcess getProcess() + { + COSDictionary process = (COSDictionary)dictionary.getDictionaryObject(COSName.PROCESS); + if (process == null) + { + return null; + } + return new PDDeviceNProcess(process); + } + + /** + * Returns true if this is an NChannel (PDF 1.6) color space. + * @return true if this is an NChannel color space. + */ + public boolean isNChannel() + { + return "NChannel".equals(dictionary.getNameAsString(COSName.SUBTYPE)); + } + + /** + * Sets the colorant map. + * @param colorants the map of colorants + */ + public void setColorants(Map colorants) + { + COSDictionary colorantDict = null; + if(colorants != null) + { + colorantDict = COSDictionaryMap.convert(colorants); + } + dictionary.setItem(COSName.COLORANTS, colorantDict); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(dictionary.getNameAsString(COSName.SUBTYPE)); + sb.append('{'); + PDDeviceNProcess process = getProcess(); + if (process != null) + { + sb.append(getProcess()); + sb.append(' '); + } + + Map colorants; + try + { + colorants = getColorants(); + sb.append("Colorants{"); + for (Map.Entry col : colorants.entrySet()) + { + sb.append('\"'); + sb.append(col.getKey()); + sb.append("\": "); + sb.append(col.getValue()); + sb.append(' '); + } + sb.append('}'); + } + catch (IOException e) + { + LOG.debug("Couldn't get the colorants information - returning 'ERROR' instead'", e); + sb.append("ERROR"); + } + sb.append('}'); + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNProcess.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNProcess.java new file mode 100644 index 00000000000..0ae62c306cf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceNProcess.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * A DeviceN Process Dictionary + * + * @author John Hewson + */ +public class PDDeviceNProcess +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDDeviceNProcess.class); + + private final COSDictionary dictionary; + + /** + * Creates a new DeviceN Process Dictionary. + */ + public PDDeviceNProcess() + { + dictionary = new COSDictionary(); + } + + /** + * Creates a new DeviceN Process Dictionary from the given attributes. + * @param attributes a DeviceN attributes dictionary + */ + public PDDeviceNProcess(COSDictionary attributes) + { + dictionary = attributes; + } + + /** + * Returns the underlying COS dictionary. + * @return the underlying COS dictionary. + */ + public COSDictionary getCOSDictionary() + { + return dictionary; + } + + /** + * Returns the process color space + * @return the process color space + * @throws IOException if the color space cannot be read + */ + public PDColorSpace getColorSpace() throws IOException + { + COSBase cosColorSpace = dictionary.getDictionaryObject(COSName.COLORSPACE); + if (cosColorSpace == null) + { + return null; // TODO: return a default? + } + return PDColorSpace.create(cosColorSpace); + } + + /** + * Returns the names of the color components. + * @return the names of the color components + */ + public List getComponents() + { + List components = new ArrayList<>(); + COSArray cosComponents = (COSArray)dictionary.getDictionaryObject(COSName.COMPONENTS); + if (cosComponents == null) + { + return components; + } + for (COSBase name : cosComponents) + { + components.add(((COSName)name).getName()); + } + return components; + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder("Process{"); + try + { + sb.append(getColorSpace()); + for (String component : getComponents()) + { + sb.append(" \""); + sb.append(component); + sb.append('\"'); + } + } + catch (IOException e) + { + LOG.debug("Couldn't get the colorants information - returning 'ERROR' instead'", e); + sb.append("ERROR"); + } + sb.append('}'); + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java new file mode 100644 index 00000000000..719bc9aff7d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceRGB.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.color.ColorSpace; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSName; + +/** + * Colours in the DeviceRGB colour space are specified according to the additive + * RGB (red-green-blue) colour model. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDDeviceRGB extends PDDeviceColorSpace +{ + /** This is the single instance of this class. */ + public static final PDDeviceRGB INSTANCE = new PDDeviceRGB(); + + private final PDColor initialColor = new PDColor(new float[] { 0, 0, 0 }, this); + private volatile ColorSpace awtColorSpace; + + private PDDeviceRGB() + { + } + + /** + * Lazy setting of the AWT color space due to JDK race condition. + */ + private void init() + { + // no need to synchronize this check as it is atomic + if (awtColorSpace != null) + { + return; + } + + synchronized (this) + { + // we might have been waiting for another thread, so check again + if (awtColorSpace != null) + { + return; + } + awtColorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB); + + // there is a JVM bug which results in a CMMException which appears to be a race + // condition caused by lazy initialization of the color transform, so we perform + // an initial color conversion while we're still synchronized, see PDFBOX-2184 + awtColorSpace.toRGB(new float[] { 0, 0, 0, 0 }); + } + } + + @Override + public String getName() + { + return COSName.DEVICERGB.getName(); + } + + /** + * {@inheritDoc} + */ + @Override + public int getNumberOfComponents() + { + return 3; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, 1, 0, 1, 0, 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + @Override + public float[] toRGB(float[] value) + { + return value; + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + init(); + + // + // WARNING: this method is performance sensitive, modify with care! + // + // Please read PDFBOX-3854 and PDFBOX-2092 and look at the related commits first. + // The current code returns TYPE_INT_RGB images which prevents slowness due to threads + // blocking each other when TYPE_CUSTOM images are used. + BufferedImage image = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_INT_RGB); + image.setData(raster); + return image; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDGamma.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDGamma.java new file mode 100644 index 00000000000..658cbc6176b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDGamma.java @@ -0,0 +1,128 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * A gamma array, or collection of three floating point parameters used for color operations. + * + * @author Ben Litchfield + */ +public final class PDGamma implements COSObjectable +{ + private COSArray values = null; + + /** + * Creates a new gamma. + * Defaults all values to 0, 0, 0. + */ + public PDGamma() + { + values = new COSArray(); + values.add(new COSFloat(0.0f)); + values.add(new COSFloat(0.0f)); + values.add(new COSFloat(0.0f)); + } + + /** + * Creates a new gamma from a COS array. + * @param array the array containing the XYZ values + */ + public PDGamma(COSArray array) + { + values = array; + } + + /** + * Convert this standard java object to a COS object. + * @return the cos object that matches this Java object + */ + @Override + public COSBase getCOSObject() + { + return values; + } + + /** + * Convert this standard java object to a COS object. + * @return the cos object that matches this Java object + */ + public COSArray getCOSArray() + { + return values; + } + + /** + * Returns the r value of the tristimulus. + * @return the R value. + */ + public float getR() + { + return ((COSNumber)values.get(0)).floatValue(); + } + + /** + * Sets the r value of the tristimulus. + * @param r the r value for the tristimulus + */ + public void setR(float r) + { + values.set(0, new COSFloat(r)); + } + + /** + * Returns the g value of the tristimulus. + * @return the g value + */ + public float getG() + { + return ((COSNumber)values.get(1)).floatValue(); + } + + /** + * Sets the g value of the tristimulus. + * @param g the g value for the tristimulus + */ + public void setG(float g) + { + values.set(1, new COSFloat(g)); + } + + /** + * Returns the b value of the tristimulus. + * @return the B value + */ + public float getB() + { + return ((COSNumber)values.get(2)).floatValue(); + } + + /** + * Sets the b value of the tristimulus. + * @param b he b value for the tristimulus + */ + public void setB(float b) + { + values.set(2, new COSFloat(b)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java new file mode 100644 index 00000000000..9c3c01d1742 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java @@ -0,0 +1,565 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.Color; +import java.awt.Transparency; +import java.awt.color.CMMException; +import java.awt.color.ColorSpace; +import java.awt.color.ICC_ColorSpace; +import java.awt.color.ICC_Profile; +import java.awt.color.ProfileDataException; +import java.awt.image.BufferedImage; +import java.awt.image.ComponentColorModel; +import java.awt.image.DataBuffer; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; +import java.util.StringTokenizer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.util.Charsets; + +/** + * ICCBased color spaces are based on a cross-platform color profile as defined by the + * International Color Consortium (ICC). + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDICCBased extends PDCIEBasedColorSpace +{ + private static final Log LOG = LogFactory.getLog(PDICCBased.class); + + private final PDStream stream; + private int numberOfComponents = -1; + private ICC_Profile iccProfile; + private PDColorSpace alternateColorSpace; + private ICC_ColorSpace awtColorSpace; + private PDColor initialColor; + private boolean isRGB = false; + // allows to force using alternate color space instead of ICC color space for performance + // reasons with LittleCMS (LCMS), see PDFBOX-4309 + // WARNING: do not activate this in a conforming reader + private boolean useOnlyAlternateColorSpace = false; + private static final boolean IS_KCMS; + + static + { + String cmmProperty = System.getProperty("sun.java2d.cmm"); + IS_KCMS = !isMinJdk8() || "sun.java2d.cmm.kcms.KcmsServiceProvider".equals(cmmProperty); + } + + /** + * Creates a new ICC color space with an empty stream. + * @param doc the document to store the ICC data + */ + public PDICCBased(PDDocument doc) + { + array = new COSArray(); + array.add(COSName.ICCBASED); + stream = new PDStream(doc); + array.add(stream); + } + + /** + * Creates a new ICC color space using the PDF array. + * + * @param iccArray the ICC stream object. + * @throws IOException if there is an error reading the ICC profile or if the parameter is + * invalid. + */ + private PDICCBased(COSArray iccArray) throws IOException + { + useOnlyAlternateColorSpace = System + .getProperty("org.apache.pdfbox.rendering.UseAlternateInsteadOfICCColorSpace") != null; + array = iccArray; + stream = new PDStream((COSStream) iccArray.getObject(1)); + loadICCProfile(); + } + + /** + * Creates a new ICC color space using the PDF array, optionally using a resource cache. + * + * @param iccArray the ICC stream object. + * @param resources resources to use as cache, or null for no caching. + * @return an ICC color space. + * @throws IOException if there is an error reading the ICC profile or if the parameter is + * invalid. + */ + public static PDICCBased create(COSArray iccArray, PDResources resources) throws IOException + { + checkArray(iccArray); + COSBase base = iccArray.get(1); + COSObject indirect = null; + if (base instanceof COSObject) + { + indirect = (COSObject) base; + } + if (indirect != null && resources != null && resources.getResourceCache() != null) + { + PDColorSpace space = resources.getResourceCache().getColorSpace(indirect); + if (space != null && space instanceof PDICCBased) + { + return (PDICCBased) space; + } + } + PDICCBased space = new PDICCBased(iccArray); + if (indirect != null && resources != null && resources.getResourceCache() != null) + { + resources.getResourceCache().put(indirect, space); + } + return space; + } + + private static void checkArray(COSArray iccArray) throws IOException + { + if (iccArray.size() < 2) + { + throw new IOException("ICCBased colorspace array must have two elements"); + } + if (!(iccArray.getObject(1) instanceof COSStream)) + { + throw new IOException("ICCBased colorspace array must have a stream as second element"); + } + } + + @Override + public String getName() + { + return COSName.ICCBASED.getName(); + } + + /** + * Get the underlying ICC profile stream. + * @return the underlying ICC profile stream + */ + public PDStream getPDStream() + { + return stream; + } + + /** + * Load the ICC profile, or init alternateColorSpace color space. + */ + private void loadICCProfile() throws IOException + { + if (useOnlyAlternateColorSpace) + { + try + { + fallbackToAlternateColorSpace(null); + return; + } + catch (IOException e) + { + LOG.warn("Error initializing alternate color space: " + e.getLocalizedMessage()); + } + } + try (InputStream input = this.stream.createInputStream()) + { + // if the embedded profile is sRGB then we can use Java's built-in profile, which + // results in a large performance gain as it's our native color space, see PDFBOX-2587 + ICC_Profile profile; + synchronized (LOG) + { + profile = ICC_Profile.getInstance(input); + if (is_sRGB(profile)) + { + isRGB = true; + awtColorSpace = (ICC_ColorSpace) ColorSpace.getInstance(ColorSpace.CS_sRGB); + iccProfile = awtColorSpace.getProfile(); + } + else + { + profile = ensureDisplayProfile(profile); + awtColorSpace = new ICC_ColorSpace(profile); + iccProfile = profile; + } + + // set initial colour + float[] initial = new float[getNumberOfComponents()]; + for (int c = 0; c < getNumberOfComponents(); c++) + { + initial[c] = Math.max(0, getRangeForComponent(c).getMin()); + } + initialColor = new PDColor(initial, this); + + if (IS_KCMS) + { + // do things that trigger a ProfileDataException + // or CMMException due to invalid profiles, see PDFBOX-1295 and PDFBOX-1740 (ü-file) + // or ArrayIndexOutOfBoundsException, see PDFBOX-3610 + // also triggers a ProfileDataException for PDFBOX-3549 with KCMS + new Color(awtColorSpace, new float[getNumberOfComponents()], 1f); + } + else + { + // PDFBOX-4015: this one triggers "CMMException: LCMS error 13" with LCMS + new ComponentColorModel(awtColorSpace, false, false, + Transparency.OPAQUE, DataBuffer.TYPE_BYTE); + } + } + } + catch (ProfileDataException | CMMException | IllegalArgumentException | + ArrayIndexOutOfBoundsException | IOException e) + { + fallbackToAlternateColorSpace(e); + } + } + + private void fallbackToAlternateColorSpace(Exception e) throws IOException + { + awtColorSpace = null; + alternateColorSpace = getAlternateColorSpace(); + if (alternateColorSpace.equals(PDDeviceRGB.INSTANCE)) + { + isRGB = true; + } + if (e != null) + { + LOG.warn("Can't read embedded ICC profile (" + e.getLocalizedMessage() + + "), using alternate color space: " + alternateColorSpace.getName()); + } + initialColor = alternateColorSpace.getInitialColor(); + } + + /** + * Returns true if the given profile is represents sRGB. + */ + private boolean is_sRGB(ICC_Profile profile) + { + byte[] bytes = Arrays.copyOfRange(profile.getData(ICC_Profile.icSigHead), + ICC_Profile.icHdrModel, ICC_Profile.icHdrModel + 7); + String deviceModel = new String(bytes, Charsets.US_ASCII).trim(); + return deviceModel.equals("sRGB"); + } + + // PDFBOX-4114: fix profile that has the wrong display class, + // as done by Harald Kuhr in twelvemonkeys JPEGImageReader.ensureDisplayProfile() + private static ICC_Profile ensureDisplayProfile(ICC_Profile profile) + { + if (profile.getProfileClass() != ICC_Profile.CLASS_DISPLAY) + { + byte[] profileData = profile.getData(); // Need to clone entire profile, due to a OpenJDK bug + + if (profileData[ICC_Profile.icHdrRenderingIntent] == ICC_Profile.icPerceptual) + { + LOG.warn("ICC profile is Perceptual, ignoring, treating as Display class"); + intToBigEndian(ICC_Profile.icSigDisplayClass, profileData, ICC_Profile.icHdrDeviceClass); + return ICC_Profile.getInstance(profileData); + } + } + return profile; + } + + private static void intToBigEndian(int value, byte[] array, int index) + { + array[index] = (byte) (value >> 24); + array[index + 1] = (byte) (value >> 16); + array[index + 2] = (byte) (value >> 8); + array[index + 3] = (byte) (value); + } + + @Override + public float[] toRGB(float[] value) throws IOException + { + if (isRGB) + { + return value; + } + if (awtColorSpace != null) + { + // PDFBOX-2142: clamp bad values + // WARNING: toRGB is very slow when used with LUT-based ICC profiles + return awtColorSpace.toRGB(clampColors(awtColorSpace, value)); + } + else + { + return alternateColorSpace.toRGB(value); + } + } + + private float[] clampColors(ICC_ColorSpace cs, float[] value) + { + float[] result = new float[value.length]; + for (int i = 0; i < value.length; ++i) + { + float minValue = cs.getMinValue(i); + float maxValue = cs.getMaxValue(i); + result[i] = value[i] < minValue ? minValue : (value[i] > maxValue ? maxValue : value[i]); + } + return result; + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + if (awtColorSpace != null) + { + return toRGBImageAWT(raster, awtColorSpace); + } + else + { + return alternateColorSpace.toRGBImage(raster); + } + } + + @Override + public int getNumberOfComponents() + { + if (numberOfComponents < 0) + { + numberOfComponents = stream.getCOSObject().getInt(COSName.N); + } + return numberOfComponents; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + if (awtColorSpace != null) + { + int n = getNumberOfComponents(); + float[] decode = new float[n * 2]; + for (int i = 0; i < n; i++) + { + decode[i * 2] = awtColorSpace.getMinValue(i); + decode[i * 2 + 1] = awtColorSpace.getMaxValue(i); + } + return decode; + } + else + { + return alternateColorSpace.getDefaultDecode(bitsPerComponent); + } + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + /** + * Returns a list of alternate color spaces for non-conforming readers. + * WARNING: Do not use the information in a conforming reader. + * @return A list of alternateColorSpace color spaces. + * @throws IOException If there is an error getting the alternateColorSpace color spaces. + */ + public PDColorSpace getAlternateColorSpace() throws IOException + { + COSBase alternate = stream.getCOSObject().getDictionaryObject(COSName.ALTERNATE); + COSArray alternateArray; + if(alternate == null) + { + alternateArray = new COSArray(); + int numComponents = getNumberOfComponents(); + COSName csName; + switch (numComponents) + { + case 1: + csName = COSName.DEVICEGRAY; + break; + case 3: + csName = COSName.DEVICERGB; + break; + case 4: + csName = COSName.DEVICECMYK; + break; + default: + throw new IOException("Unknown color space number of components:" + numComponents); + } + alternateArray.add(csName); + } + else + { + if(alternate instanceof COSArray) + { + alternateArray = (COSArray)alternate; + } + else if(alternate instanceof COSName) + { + alternateArray = new COSArray(); + alternateArray.add(alternate); + } + else + { + throw new IOException("Error: expected COSArray or COSName and not " + + alternate.getClass().getName()); + } + } + return PDColorSpace.create(alternateArray); + } + + /** + * Returns the range for a certain component number. + * This will never return null. + * If it is not present then the range 0..1 will be returned. + * @param n the component number to get the range for + * @return the range for this component + */ + public PDRange getRangeForComponent(int n) + { + COSArray rangeArray = (COSArray) stream.getCOSObject().getDictionaryObject(COSName.RANGE); + if (rangeArray == null || rangeArray.size() < getNumberOfComponents() * 2) + { + return new PDRange(); // 0..1 + } + return new PDRange(rangeArray, n); + } + + /** + * Returns the metadata stream for this object, or null if there is no metadata stream. + * @return the metadata stream, or null if there is none + */ + public COSStream getMetadata() + { + return (COSStream)stream.getCOSObject().getDictionaryObject(COSName.METADATA); + } + + /** + * Returns the type of the color space in the ICC profile. If the ICC profile is invalid, the + * type of the alternate colorspace is returned, which will be one of + * {@link ColorSpace#TYPE_GRAY TYPE_GRAY}, {@link ColorSpace#TYPE_RGB TYPE_RGB}, + * {@link ColorSpace#TYPE_CMYK TYPE_CMYK}, or -1 if that one is invalid. + * + * @return an ICC color space type. See {@link ColorSpace#getType()} and the static values of + * {@link ColorSpace} for more details. + */ + public int getColorSpaceType() + { + if (iccProfile != null) + { + return iccProfile.getColorSpaceType(); + } + + // if the ICC Profile could not be read + switch (alternateColorSpace.getNumberOfComponents()) + { + case 1: + return ICC_ColorSpace.TYPE_GRAY; + case 3: + return ICC_ColorSpace.TYPE_RGB; + case 4: + return ICC_ColorSpace.TYPE_CMYK; + default: + // should not happen as all ICC color spaces in PDF must have 1,3, or 4 components + return -1; + } + } + + /** + * Sets the number of color components. + * @param n the number of color components + */ + // TODO it's probably not safe to use this + @Deprecated + public void setNumberOfComponents(int n) + { + numberOfComponents = n; + stream.getCOSObject().setInt(COSName.N, n); + } + + /** + * Sets the list of alternateColorSpace color spaces. + * + * @param list the list of color space objects + */ + public void setAlternateColorSpaces(List list) + { + COSArray altArray = null; + if(list != null) + { + altArray = COSArrayList.converterToCOSArray(list); + } + stream.getCOSObject().setItem(COSName.ALTERNATE, altArray); + } + + /** + * Sets the range for this color space. + * @param range the new range for the a component + * @param n the component to set the range for + */ + public void setRangeForComponent(PDRange range, int n) + { + COSArray rangeArray = (COSArray) stream.getCOSObject().getDictionaryObject(COSName.RANGE); + if (rangeArray == null) + { + rangeArray = new COSArray(); + stream.getCOSObject().setItem(COSName.RANGE, rangeArray); + } + // extend range array with default values if needed + while (rangeArray.size() < (n + 1) * 2) + { + rangeArray.add(new COSFloat(0)); + rangeArray.add(new COSFloat(1)); + } + rangeArray.set(n*2, new COSFloat(range.getMin())); + rangeArray.set(n*2+1, new COSFloat(range.getMax())); + } + + /** + * Sets the metadata stream that is associated with this color space. + * @param metadata the new metadata stream + */ + public void setMetadata(COSStream metadata) + { + stream.getCOSObject().setItem(COSName.METADATA, metadata); + } + + @Override + public String toString() + { + return getName() + "{numberOfComponents: " + getNumberOfComponents() + "}"; + } + + private static boolean isMinJdk8() + { + // strategy from lucene-solr/lucene/core/src/java/org/apache/lucene/util/Constants.java + String version = System.getProperty("java.specification.version"); + final StringTokenizer st = new StringTokenizer(version, "."); + try + { + int major = Integer.parseInt(st.nextToken()); + int minor = 0; + if (st.hasMoreTokens()) + { + minor = Integer.parseInt(st.nextToken()); + } + return major > 1 || (major == 1 && minor >= 8); + } + catch (NumberFormatException nfe) + { + // maybe some new numbering scheme in the 22nd century + return true; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java new file mode 100644 index 00000000000..d30c91df834 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java @@ -0,0 +1,307 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.Point; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * An Indexed colour space specifies that an area is to be painted using a colour table + * of arbitrary colours from another color space. + * + * @author John Hewson + * @author Ben Litchfield + */ +public final class PDIndexed extends PDSpecialColorSpace +{ + private final PDColor initialColor = new PDColor(new float[] { 0 }, this); + + private PDColorSpace baseColorSpace = null; + + // cached lookup data + private byte[] lookupData; + private float[][] colorTable; + private int actualMaxIndex; + private int[][] rgbColorTable; + + /** + * Creates a new Indexed color space. + * Default DeviceRGB, hival 255. + */ + public PDIndexed() + { + array = new COSArray(); + array.add(COSName.INDEXED); + array.add(COSName.DEVICERGB); + array.add(COSInteger.get(255)); + array.add(org.apache.pdfbox.cos.COSNull.NULL); + } + + /** + * Creates a new indexed color space from the given PDF array. + * @param indexedArray the array containing the indexed parameters + * @throws java.io.IOException + */ + public PDIndexed(COSArray indexedArray) throws IOException + { + this(indexedArray, null); + } + + /** + * Creates a new indexed color space from the given PDF array. + * @param indexedArray the array containing the indexed parameters + * @param resources the resources, can be null. Allows to use its cache for the colorspace. + * @throws java.io.IOException + */ + public PDIndexed(COSArray indexedArray, PDResources resources) throws IOException + { + array = indexedArray; + // don't call getObject(1), we want to pass a reference if possible + // to profit from caching (PDFBOX-4149) + baseColorSpace = PDColorSpace.create(array.get(1), resources); + readColorTable(); + initRgbColorTable(); + } + + @Override + public String getName() + { + return COSName.INDEXED.getName(); + } + + @Override + public int getNumberOfComponents() + { + return 1; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, (float)Math.pow(2, bitsPerComponent) - 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + private void initRgbColorTable() throws IOException + { + int numBaseComponents = baseColorSpace.getNumberOfComponents(); + + // convert the color table into a 1-row BufferedImage in the base color space, + // using a writable raster for high performance + WritableRaster baseRaster; + try + { + baseRaster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE, + actualMaxIndex + 1, 1, numBaseComponents, new Point(0, 0)); + } + catch (IllegalArgumentException ex) + { + // PDFBOX-4503: when stream is empty or null + throw new IOException(ex); + } + + int[] base = new int[numBaseComponents]; + for (int i = 0, n = actualMaxIndex; i <= n; i++) + { + for (int c = 0; c < numBaseComponents; c++) + { + base[c] = (int)(colorTable[i][c] * 255f); + } + baseRaster.setPixel(i, 0, base); + } + + // convert the base image to RGB + BufferedImage rgbImage = baseColorSpace.toRGBImage(baseRaster); + WritableRaster rgbRaster = rgbImage.getRaster(); + + // build an RGB lookup table from the raster + rgbColorTable = new int[actualMaxIndex + 1][3]; + int[] nil = null; + + for (int i = 0, n = actualMaxIndex; i <= n; i++) + { + rgbColorTable[i] = rgbRaster.getPixel(i, 0, nil); + } + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + @Override + public float[] toRGB(float[] value) + { + if (value.length > 1) + { + throw new IllegalArgumentException("Indexed color spaces must have one color value"); + } + + // scale and clamp input value + int index = Math.round(value[0]); + index = Math.max(index, 0); + index = Math.min(index, actualMaxIndex); + + // lookup rgb + int[] rgb = rgbColorTable[index]; + return new float[] { rgb[0] / 255f, rgb[1] / 255f, rgb[2] / 255f }; + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + // use lookup table + int width = raster.getWidth(); + int height = raster.getHeight(); + + BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + WritableRaster rgbRaster = rgbImage.getRaster(); + + int[] src = new int[1]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, src); + + // lookup + int index = Math.min(src[0], actualMaxIndex); + rgbRaster.setPixel(x, y, rgbColorTable[index]); + } + } + + return rgbImage; + } + + /** + * Returns the base color space. + * @return the base color space. + */ + public PDColorSpace getBaseColorSpace() + { + return baseColorSpace; + } + + // returns "hival" array element + private int getHival() + { + return ((COSNumber) array.getObject(2)).intValue(); + } + + // reads the lookup table data from the array + private byte[] getLookupData() throws IOException + { + if (lookupData == null) + { + COSBase lookupTable = array.getObject(3); + if (lookupTable instanceof COSString) + { + lookupData = ((COSString) lookupTable).getBytes(); + } + else if (lookupTable instanceof COSStream) + { + lookupData = new PDStream((COSStream)lookupTable).toByteArray(); + } + else if (lookupTable == null) + { + lookupData = new byte[0]; + } + else + { + throw new IOException("Error: Unknown type for lookup table " + lookupTable); + } + } + return lookupData; + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + private void readColorTable() throws IOException + { + byte[] lookupData = getLookupData(); + int maxIndex = Math.min(getHival(), 255); + int numComponents = baseColorSpace.getNumberOfComponents(); + + // some tables are too short + if (lookupData.length / numComponents < maxIndex + 1) + { + maxIndex = lookupData.length / numComponents - 1; + } + actualMaxIndex = maxIndex; // TODO "actual" is ugly, tidy this up + + colorTable = new float[maxIndex + 1][numComponents]; + for (int i = 0, offset = 0; i <= maxIndex; i++) + { + for (int c = 0; c < numComponents; c++) + { + colorTable[i][c] = (lookupData[offset] & 0xff) / 255f; + offset++; + } + } + } + + /** + * Sets the base color space. + * @param base the base color space + */ + public void setBaseColorSpace(PDColorSpace base) + { + array.set(1, base.getCOSObject()); + baseColorSpace = base; + } + + /** + * Sets the highest value that is allowed. This cannot be higher than 255. + * @param high the highest value for the lookup table + */ + public void setHighValue(int high) + { + array.set(2, high); + } + + @Override + public String toString() + { + return "Indexed{base:" + baseColorSpace + " " + + "hival:" + getHival() + " " + + "lookup:(" + colorTable.length + " entries)}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDJPXColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDJPXColorSpace.java new file mode 100644 index 00000000000..f1760c637b4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDJPXColorSpace.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSBase; + +import java.awt.color.ColorSpace; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +/** + * A color space embedded in a JPX file. + * This wraps the AWT ColorSpace which is obtained after JAI Image I/O reads a JPX stream. + * + * @author John Hewson + */ +public final class PDJPXColorSpace extends PDColorSpace +{ + private final ColorSpace awtColorSpace; + + /** + * Creates a new JPX color space from the given AWT color space. + * @param colorSpace AWT color space from a JPX image + */ + public PDJPXColorSpace(ColorSpace colorSpace) + { + this.awtColorSpace = colorSpace; + } + + @Override + public String getName() + { + return "JPX"; + } + + @Override + public int getNumberOfComponents() + { + return awtColorSpace.getNumComponents(); + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + int n = getNumberOfComponents(); + float[] decode = new float[n * 2]; + for (int i = 0; i < n; i++) + { + decode[i * 2] = awtColorSpace.getMinValue(i); + decode[i * 2 + 1] = awtColorSpace.getMaxValue(i); + } + return decode; + } + + @Override + public PDColor getInitialColor() + { + throw new UnsupportedOperationException("JPX color spaces don't support drawing"); + } + + @Override + public float[] toRGB(float[] value) + { + throw new UnsupportedOperationException("JPX color spaces don't support drawing"); + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + return toRGBImageAWT(raster, awtColorSpace); + } + + @Override + public COSBase getCOSObject() + { + throw new UnsupportedOperationException("JPX color spaces don't have COS objects"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java new file mode 100644 index 00000000000..38ca50ba416 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDLab.java @@ -0,0 +1,254 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRange; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +/** + * A Lab colour space is a CIE-based ABC colour space with two transformation stages. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDLab extends PDCIEDictionaryBasedColorSpace +{ + private PDColor initialColor; + + /** + * Creates a new Lab color space. + */ + public PDLab() + { + super(COSName.LAB); + } + + /** + * Creates a new Lab color space from a PDF array. + * @param lab the color space array + */ + public PDLab(COSArray lab) + { + super(lab); + } + + @Override + public String getName() + { + return COSName.LAB.getName(); + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + int width = raster.getWidth(); + int height = raster.getHeight(); + + BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + WritableRaster rgbRaster = rgbImage.getRaster(); + + float minA = getARange().getMin(); + float maxA = getARange().getMax(); + float minB = getBRange().getMin(); + float maxB = getBRange().getMax(); + + // always three components: ABC + float[] abc = new float[3]; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, abc); + + // 0..255 -> 0..1 + abc[0] /= 255; + abc[1] /= 255; + abc[2] /= 255; + + // scale to range + abc[0] *= 100; + abc[1] = minA + (abc[1] * (maxA - minA)); + abc[2] = minB + (abc[2] * (maxB - minB)); + + float[] rgb = toRGB(abc); + + // 0..1 -> 0..255 + rgb[0] *= 255; + rgb[1] *= 255; + rgb[2] *= 255; + + rgbRaster.setPixel(x, y, rgb); + } + } + + return rgbImage; + } + + @Override + public float[] toRGB(float[] value) + { + // CIE LAB to RGB, see http://en.wikipedia.org/wiki/Lab_color_space + + // L* + float lstar = (value[0] + 16f) * (1f / 116f); + + // TODO: how to use the blackpoint? scale linearly between black & white? + + // XYZ + float x = wpX * inverse(lstar + value[1] * (1f / 500f)); + float y = wpY * inverse(lstar); + float z = wpZ * inverse(lstar - value[2] * (1f / 200f)); + + return convXYZtoRGB(x, y, z); + } + + // reverse transformation (f^-1) + private float inverse(float x) + { + if (x > 6.0 / 29.0) + { + return x * x * x; + } + else + { + return (108f / 841f) * (x - (4f / 29f)); + } + } + + @Override + public int getNumberOfComponents() + { + return 3; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + PDRange a = getARange(); + PDRange b = getARange(); + return new float[] { 0, 100, a.getMin(), a.getMax(), b.getMin(), b.getMax() }; + } + + @Override + public PDColor getInitialColor() + { + if (initialColor == null) + { + initialColor = new PDColor(new float[] { + 0, + Math.max(0, getARange().getMin()), + Math.max(0, getBRange().getMin()) }, + this); + } + return initialColor; + } + + /** + * creates a range array with default values (-100..100 -100..100). + * @return the new range array. + */ + private COSArray getDefaultRangeArray() + { + COSArray range = new COSArray(); + range.add(new COSFloat(-100)); + range.add(new COSFloat(100)); + range.add(new COSFloat(-100)); + range.add(new COSFloat(100)); + return range; + } + + /** + * This will get the valid range for the "a" component. + * If none is found then the default will be returned, which is -100..100. + * @return the "a" range. + */ + public PDRange getARange() + { + COSArray rangeArray = (COSArray) dictionary.getDictionaryObject(COSName.RANGE); + if (rangeArray == null) + { + rangeArray = getDefaultRangeArray(); + } + return new PDRange(rangeArray, 0); + } + + /** + * This will get the valid range for the "b" component. + * If none is found then the default will be returned, which is -100..100. + * @return the "b" range. + */ + public PDRange getBRange() + { + COSArray rangeArray = (COSArray) dictionary.getDictionaryObject(COSName.RANGE); + if (rangeArray == null) + { + rangeArray = getDefaultRangeArray(); + } + return new PDRange(rangeArray, 1); + } + + /** + * This will set the a range for the "a" component. + * @param range the new range for the "a" component, + * or null if defaults (-100..100) are to be set. + */ + public void setARange(PDRange range) + { + setComponentRangeArray(range, 0); + } + + /** + * This will set the "b" range for this color space. + * @param range the new range for the "b" component, + * or null if defaults (-100..100) are to be set. + */ + public void setBRange(PDRange range) + { + setComponentRangeArray(range, 2); + } + + private void setComponentRangeArray(PDRange range, int index) + { + COSArray rangeArray = (COSArray) dictionary.getDictionaryObject(COSName.RANGE); + if (rangeArray == null) + { + rangeArray = getDefaultRangeArray(); + } + if (range == null) + { + // reset to defaults + rangeArray.set(index, new COSFloat(-100)); + rangeArray.set(index + 1, new COSFloat(100)); + } + else + { + rangeArray.set(index, new COSFloat(range.getMin())); + rangeArray.set(index + 1, new COSFloat(range.getMax())); + } + dictionary.setItem(COSName.RANGE, rangeArray); + initialColor = null; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDOutputIntent.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDOutputIntent.java new file mode 100644 index 00000000000..4c20f9f171e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDOutputIntent.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.color.ICC_Profile; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * An Output Intent describes the colour reproduction characteristics of a possible output + * device or production condition. + * Output intents provide a means for matching the colour characteristics of a PDF document with + * those of a target output device or production environment in which the document will be printed. + * + * @author Guillaume Bailleul + */ +public final class PDOutputIntent implements COSObjectable +{ + private final COSDictionary dictionary; + + public PDOutputIntent(PDDocument doc, InputStream colorProfile) throws IOException + { + dictionary = new COSDictionary(); + dictionary.setItem(COSName.TYPE, COSName.OUTPUT_INTENT); + dictionary.setItem(COSName.S, COSName.GTS_PDFA1); + PDStream destOutputIntent = configureOutputProfile(doc, colorProfile); + dictionary.setItem(COSName.DEST_OUTPUT_PROFILE, destOutputIntent); + } + + public PDOutputIntent(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + @Override + public COSBase getCOSObject() + { + return dictionary; + } + + public COSStream getDestOutputIntent() + { + return (COSStream) dictionary.getDictionaryObject(COSName.DEST_OUTPUT_PROFILE); + } + + public String getInfo() + { + return dictionary.getString(COSName.INFO); + } + + public void setInfo(String value) + { + dictionary.setString(COSName.INFO, value); + } + + public String getOutputCondition() + { + return dictionary.getString(COSName.OUTPUT_CONDITION); + } + + public void setOutputCondition(String value) + { + dictionary.setString(COSName.OUTPUT_CONDITION, value); + } + + public String getOutputConditionIdentifier() + { + return dictionary.getString(COSName.OUTPUT_CONDITION_IDENTIFIER); + } + + public void setOutputConditionIdentifier(String value) + { + dictionary.setString(COSName.OUTPUT_CONDITION_IDENTIFIER, value); + } + + public String getRegistryName() + { + return dictionary.getString(COSName.REGISTRY_NAME); + } + + public void setRegistryName(String value) + { + dictionary.setString(COSName.REGISTRY_NAME, value); + } + + private PDStream configureOutputProfile(PDDocument doc, InputStream colorProfile) + throws IOException + { + ICC_Profile icc = ICC_Profile.getInstance(colorProfile); + PDStream stream = new PDStream(doc, new ByteArrayInputStream(icc.getData()), COSName.FLATE_DECODE); + stream.getCOSObject().setInt(COSName.N, icc.getNumComponents()); + return stream; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java new file mode 100644 index 00000000000..dd2a7f22de1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDPattern.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern; + +/** + * A Pattern color space is either a Tiling pattern or a Shading pattern. + * @author John Hewson + * @author Ben Litchfield + */ +public final class PDPattern extends PDSpecialColorSpace +{ + /** A pattern which leaves no marks on the page. */ + private static PDColor EMPTY_PATTERN = new PDColor(new float[] { }, null); + + private final PDResources resources; + private PDColorSpace underlyingColorSpace; + + /** + * Creates a new pattern color space. + * + * @param resources The current resources. + */ + public PDPattern(PDResources resources) + { + this.resources = resources; + array = new COSArray(); + array.add(COSName.PATTERN); + } + + /** + * Creates a new uncolored tiling pattern color space. + * + * @param resources The current resources. + * @param colorSpace The underlying color space. + */ + public PDPattern(PDResources resources, PDColorSpace colorSpace) + { + this.resources = resources; + this.underlyingColorSpace = colorSpace; + array = new COSArray(); + array.add(COSName.PATTERN); + array.add(colorSpace); + } + + @Override + public String getName() + { + return COSName.PATTERN.getName(); + } + + @Override + public int getNumberOfComponents() + { + throw new UnsupportedOperationException(); + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + throw new UnsupportedOperationException(); + } + + @Override + public PDColor getInitialColor() + { + return EMPTY_PATTERN; + } + + @Override + public float[] toRGB(float[] value) + { + throw new UnsupportedOperationException(); + } + + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + throw new UnsupportedOperationException(); + } + + /** + * Returns the pattern for the given color. + * + * @param color color containing a pattern name + * @return pattern for the given color + * @throws java.io.IOException if the pattern name was not found. + */ + public PDAbstractPattern getPattern(PDColor color) throws IOException + { + PDAbstractPattern pattern = resources.getPattern(color.getPatternName()); + if (pattern == null) + { + throw new IOException("pattern " + color.getPatternName() + " was not found"); + } + else + { + return pattern; + } + } + + /** + * Returns the underlying color space, if this is an uncolored tiling pattern, otherwise null. + */ + public PDColorSpace getUnderlyingColorSpace() + { + return underlyingColorSpace; + } + + @Override + public String toString() + { + return "Pattern"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java new file mode 100644 index 00000000000..caf72f11348 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSeparation.java @@ -0,0 +1,284 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import java.awt.Point; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNull; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; + +/** + * A Separation color space used to specify either additional colorants or for isolating the + * control of individual colour components of a device colour space for a subtractive device. + * When such a space is the current colour space, the current colour shall be a single-component + * value, called a tint, that controls the given colorant or colour components only. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class PDSeparation extends PDSpecialColorSpace +{ + private final PDColor initialColor = new PDColor(new float[] { 1 }, this); + + // array indexes + private static final int COLORANT_NAMES = 1; + private static final int ALTERNATE_CS = 2; + private static final int TINT_TRANSFORM = 3; + + // fields + private PDColorSpace alternateColorSpace = null; + private PDFunction tintTransform = null; + + /** + * Map used to speed up {@link #toRGB(float[])}. Note that this class contains three maps (this + * and the two in {@link #toRGBImage(java.awt.image.WritableRaster) } and {@link #toRGBImage2(java.awt.image.WritableRaster) + * }. The maps use different key intervals. This map here is needed for shading, which produce + * more than 256 different float values, which we cast to int so that the map can work. + */ + private Map toRGBMap = null; + + /** + * Creates a new Separation color space. + */ + public PDSeparation() + { + array = new COSArray(); + array.add(COSName.SEPARATION); + array.add(COSName.getPDFName("")); + // add some placeholder + array.add(COSNull.NULL); + array.add(COSNull.NULL); + } + + /** + * Creates a new Separation color space from a PDF color space array. + * @param separation an array containing all separation information. + * @throws IOException if the color space or the function could not be created. + */ + public PDSeparation(COSArray separation) throws IOException + { + array = separation; + alternateColorSpace = PDColorSpace.create(array.getObject(ALTERNATE_CS)); + tintTransform = PDFunction.create(array.getObject(TINT_TRANSFORM)); + } + + @Override + public String getName() + { + return COSName.SEPARATION.getName(); + } + + @Override + public int getNumberOfComponents() + { + return 1; + } + + @Override + public float[] getDefaultDecode(int bitsPerComponent) + { + return new float[] { 0, 1 }; + } + + @Override + public PDColor getInitialColor() + { + return initialColor; + } + + @Override + public float[] toRGB(float[] value) throws IOException + { + if (toRGBMap == null) + { + toRGBMap = new HashMap<>(); + } + int key = (int) (value[0] * 255); + float[] retval = toRGBMap.get(key); + if (retval != null) + { + return retval; + } + float[] altColor = tintTransform.eval(value); + retval = alternateColorSpace.toRGB(altColor); + toRGBMap.put(key, retval); + return retval; + } + + // + // WARNING: this method is performance sensitive, modify with care! + // + @Override + public BufferedImage toRGBImage(WritableRaster raster) throws IOException + { + if (alternateColorSpace instanceof PDLab) + { + // PDFBOX-3622 - regular converter fails for Lab colorspaces + return toRGBImage2(raster); + } + + // use the tint transform to convert the sample into + // the alternate color space (this is usually 1:many) + WritableRaster altRaster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE, + raster.getWidth(), raster.getHeight(), + alternateColorSpace.getNumberOfComponents(), + new Point(0, 0)); + + int numAltComponents = alternateColorSpace.getNumberOfComponents(); + int width = raster.getWidth(); + int height = raster.getHeight(); + float[] samples = new float[1]; + + Map calculatedValues = new HashMap<>(); + Integer hash; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, samples); + int[] alt = calculatedValues.get(hash = Float.floatToIntBits(samples[0])); + if (alt == null) + { + alt = new int[numAltComponents]; + tintTransform(samples, alt); + calculatedValues.put(hash, alt); + } + altRaster.setPixel(x, y, alt); + } + } + + // convert the alternate color space to RGB + return alternateColorSpace.toRGBImage(altRaster); + } + + // converter that works without using super implementation of toRGBImage() + private BufferedImage toRGBImage2(WritableRaster raster) throws IOException + { + int width = raster.getWidth(); + int height = raster.getHeight(); + BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + WritableRaster rgbRaster = rgbImage.getRaster(); + float[] samples = new float[1]; + + Map calculatedValues = new HashMap<>(); + Integer hash; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + raster.getPixel(x, y, samples); + int[] rgb = calculatedValues.get(hash = Float.floatToIntBits(samples[0])); + if (rgb == null) + { + samples[0] /= 255; + float[] altColor = tintTransform.eval(samples); + float[] fltab = alternateColorSpace.toRGB(altColor); + rgb = new int[3]; + rgb[0] = (int) (fltab[0] * 255); + rgb[1] = (int) (fltab[1] * 255); + rgb[2] = (int) (fltab[2] * 255); + calculatedValues.put(hash, rgb); + } + rgbRaster.setPixel(x, y, rgb); + } + } + return rgbImage; + } + + protected void tintTransform(float[] samples, int[] alt) throws IOException + { + samples[0] /= 255; // 0..1 + float[] result = tintTransform.eval(samples); + for (int s = 0; s < alt.length; s++) + { + // scale to 0..255 + alt[s] = (int) (result[s] * 255); + } + } + + /** + * Returns the colorant name. + * @return the name of the colorant + */ + public PDColorSpace getAlternateColorSpace() + { + return alternateColorSpace; + } + + /** + * Returns the colorant name. + * @return the name of the colorant + */ + public String getColorantName() + { + COSName name = (COSName)array.getObject(COLORANT_NAMES); + return name.getName(); + } + + /** + * Sets the colorant name. + * @param name the name of the colorant + */ + public void setColorantName(String name) + { + array.set(1, COSName.getPDFName(name)); + } + + /** + * Sets the alternate color space. + * @param colorSpace The alternate color space. + */ + public void setAlternateColorSpace(PDColorSpace colorSpace) + { + alternateColorSpace = colorSpace; + COSBase space = null; + if (colorSpace != null) + { + space = colorSpace.getCOSObject(); + } + array.set(ALTERNATE_CS, space); + } + + /** + * Sets the tint transform function. + * @param tint the tint transform function + */ + public void setTintTransform(PDFunction tint) + { + tintTransform = tint; + array.set(TINT_TRANSFORM, tint); + } + + @Override + public String toString() + { + return getName() + "{" + + "\"" + getColorantName() + "\"" + " " + + alternateColorSpace.getName() + " " + + tintTransform + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSpecialColorSpace.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSpecialColorSpace.java new file mode 100644 index 00000000000..30055bb9c9f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDSpecialColorSpace.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSBase; + +/** + * Special colour spaces add features or properties to an underlying colour space. + * + * @author John Hewson + */ +public abstract class PDSpecialColorSpace extends PDColorSpace +{ + @Override + public COSBase getCOSObject() + { + return array; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDTristimulus.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDTristimulus.java new file mode 100644 index 00000000000..8a43a79d6bc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDTristimulus.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.color; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * A tristimulus, or collection of three floating point parameters used for color operations. + * + * @author Ben Litchfield + */ +public final class PDTristimulus implements COSObjectable +{ + private COSArray values = null; + + /** + * Constructor. Defaults all values to 0, 0, 0. + */ + public PDTristimulus() + { + values = new COSArray(); + values.add(new COSFloat(0.0f)); + values.add(new COSFloat(0.0f)); + values.add(new COSFloat(0.0f)); + } + + /** + * Constructor from COS object. + * @param array the array containing the XYZ values + */ + public PDTristimulus(COSArray array) + { + values = array; + } + + /** + * Constructor from COS object. + * @param array the array containing the XYZ values + */ + public PDTristimulus(float[] array) + { + values = new COSArray(); + for(int i=0; i + + + + + + +This package deals with Form XObjects that are stored in a PDF document. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java new file mode 100644 index 00000000000..223fe67ad7d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java @@ -0,0 +1,476 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import javax.imageio.stream.MemoryCacheImageOutputStream; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.io.RandomAccess; +import org.apache.pdfbox.io.RandomAccessBuffer; +import org.apache.pdfbox.io.RandomAccessFile; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; + +/** + * Factory for creating a PDImageXObject containing a CCITT Fax compressed TIFF image. + * + * @author Ben Litchfield + * @author Paul King + */ +public final class CCITTFactory +{ + private CCITTFactory() + { + } + + /** + * Creates a new CCITT group 4 (T6) compressed image XObject from a b/w BufferedImage. This + * compression technique usually results in smaller images than those produced by {@link LosslessFactory#createFromImage(PDDocument, BufferedImage) + * }. + * + * @param document the document to create the image as part of. + * @param image the image. + * @return a new image XObject. + * @throws IOException if there is an error creating the image. + * @throws IllegalArgumentException if the BufferedImage is not a b/w image. + */ + public static PDImageXObject createFromImage(PDDocument document, BufferedImage image) + throws IOException + { + if (image.getType() != BufferedImage.TYPE_BYTE_BINARY && image.getColorModel().getPixelSize() != 1) + { + throw new IllegalArgumentException("Only 1-bit b/w images supported"); + } + + int height = image.getHeight(); + int width = image.getWidth(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try (MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(bos)) + { + for (int y = 0; y < height; ++y) + { + for (int x = 0; x < width; ++x) + { + // flip bit to avoid having to set /BlackIs1 + mcios.writeBits(~(image.getRGB(x, y) & 1), 1); + } + if (mcios.getBitOffset() != 0) + { + mcios.writeBits(0, 8 - mcios.getBitOffset()); + } + } + mcios.flush(); + } + + return prepareImageXObject(document, bos.toByteArray(), width, height, PDDeviceGray.INSTANCE); + } + + /** + * Creates a new CCITT Fax compressed image XObject from a specific image of a TIFF file stored + * in a byte array. Only single-strip CCITT T4 or T6 compressed TIFF files are supported. If + * you're not sure what TIFF files you have, use + * {@link LosslessFactory#createFromImage(PDDocument, BufferedImage) } + * or {@link CCITTFactory#createFromImage(PDDocument, BufferedImage) } + * instead. + * + * @param document the document to create the image as part of. + * @param byteArray the TIFF file in a byte array which contains a suitable CCITT compressed + * image + * @return a new Image XObject + * @throws IOException if there is an error reading the TIFF data. + */ + public static PDImageXObject createFromByteArray(PDDocument document, byte[] byteArray) + throws IOException + { + return createFromByteArray(document, byteArray, 0); + } + + /** + * Creates a new CCITT Fax compressed image XObject from a specific image of a TIFF file stored + * in a byte array. Only single-strip CCITT T4 or T6 compressed TIFF files are supported. If + * you're not sure what TIFF files you have, use + * {@link LosslessFactory#createFromImage(PDDocument, BufferedImage) } + * or {@link CCITTFactory#createFromImage(PDDocument, BufferedImage) } + * instead. + * + * @param document the document to create the image as part of. + * @param byteArray the TIFF file in a byte array which contains a suitable CCITT compressed + * image + * @param number TIFF image number, starting from 0 + * @return a new Image XObject + * @throws IOException if there is an error reading the TIFF data. + */ + public static PDImageXObject createFromByteArray(PDDocument document, byte[] byteArray, int number) + throws IOException + { + try (RandomAccess raf = new RandomAccessBuffer(byteArray)) + { + return createFromRandomAccessImpl(document, raf, number); + } + } + + private static PDImageXObject prepareImageXObject(PDDocument document, + byte[] byteArray, int width, int height, + PDColorSpace initColorSpace) throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + Filter filter = FilterFactory.INSTANCE.getFilter(COSName.CCITTFAX_DECODE); + COSDictionary dict = new COSDictionary(); + dict.setInt(COSName.COLUMNS, width); + dict.setInt(COSName.ROWS, height); + filter.encode(new ByteArrayInputStream(byteArray), baos, dict, 0); + + ByteArrayInputStream encodedByteStream = new ByteArrayInputStream(baos.toByteArray()); + PDImageXObject image = new PDImageXObject(document, encodedByteStream, COSName.CCITTFAX_DECODE, + width, height, 1, initColorSpace); + dict.setInt(COSName.K, -1); + image.getCOSObject().setItem(COSName.DECODE_PARMS, dict); + return image; + } + + /** + * Creates a new CCITT Fax compressed image XObject from the first image of a TIFF file. Only + * single-strip CCITT T4 or T6 compressed TIFF files are supported. If you're not sure what TIFF + * files you have, use + * {@link LosslessFactory#createFromImage(org.apache.pdfbox.pdmodel.PDDocument, java.awt.image.BufferedImage)} + * or {@link CCITTFactory#createFromImage(PDDocument, BufferedImage) } + * instead. + * + * @param document the document to create the image as part of. + * @param file the TIFF file which contains a suitable CCITT compressed image + * @return a new Image XObject + * @throws IOException if there is an error reading the TIFF data. + */ + public static PDImageXObject createFromFile(PDDocument document, File file) + throws IOException + { + return createFromFile(document, file, 0); + } + + /** + * Creates a new CCITT Fax compressed image XObject from a specific image of a TIFF file. Only + * single-strip CCITT T4 or T6 compressed TIFF files are supported. If you're not sure what TIFF + * files you have, use + * {@link LosslessFactory#createFromImage(PDDocument, BufferedImage) } + * or {@link CCITTFactory#createFromImage(PDDocument, BufferedImage) } + * instead. + * + * @param document the document to create the image as part of. + * @param file the TIFF file which contains a suitable CCITT compressed image + * @param number TIFF image number, starting from 0 + * @return a new Image XObject + * @throws IOException if there is an error reading the TIFF data. + */ + public static PDImageXObject createFromFile(PDDocument document, File file, int number) + throws IOException + { + try (RandomAccessFile raf = new RandomAccessFile(file, "r")) + { + return createFromRandomAccessImpl(document, raf, number); + } + } + + /** + * Creates a new CCITT Fax compressed image XObject from a TIFF file. + * + * @param document the document to create the image as part of. + * @param reader the random access TIFF file which contains a suitable CCITT + * compressed image + * @param number TIFF image number, starting from 0 + * @return a new Image XObject, or null if no such page + * @throws IOException if there is an error reading the TIFF data. + */ + private static PDImageXObject createFromRandomAccessImpl(PDDocument document, + RandomAccess reader, + int number) throws IOException + { + COSDictionary decodeParms = new COSDictionary(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + extractFromTiff(reader, bos, decodeParms, number); + if (bos.size() == 0) + { + return null; + } + ByteArrayInputStream encodedByteStream = new ByteArrayInputStream(bos.toByteArray()); + PDImageXObject pdImage = new PDImageXObject(document, + encodedByteStream, + COSName.CCITTFAX_DECODE, + decodeParms.getInt(COSName.COLUMNS), + decodeParms.getInt(COSName.ROWS), + 1, + PDDeviceGray.INSTANCE); + + COSDictionary dict = pdImage.getCOSObject(); + dict.setItem(COSName.DECODE_PARMS, decodeParms); + return pdImage; + } + + // extracts the CCITT stream from the TIFF file + private static void extractFromTiff(RandomAccess reader, OutputStream os, + COSDictionary params, int number) throws IOException + { + try + { + // First check the basic tiff header + reader.seek(0); + char endianess = (char) reader.read(); + if ((char) reader.read() != endianess) + { + throw new IOException("Not a valid tiff file"); + } + // ensure that endianess is either M or I + if (endianess != 'M' && endianess != 'I') + { + throw new IOException("Not a valid tiff file"); + } + int magicNumber = readshort(endianess, reader); + if (magicNumber != 42) + { + throw new IOException("Not a valid tiff file"); + } + + // Relocate to the first set of tags + int address = readlong(endianess, reader); + reader.seek(address); + + // If some higher page number is required, skip this page's tags, + // then read the next page's address + for (int i = 0; i < number; i++) + { + int numtags = readshort(endianess, reader); + if (numtags > 50) + { + throw new IOException("Not a valid tiff file"); + } + reader.seek(address + 2 + numtags * 12); + address = readlong(endianess, reader); + if (address == 0) + { + return; + } + reader.seek(address); + } + + int numtags = readshort(endianess, reader); + + // The number 50 is somewhat arbitary, it just stops us load up junk from somewhere + // and tramping on + if (numtags > 50) + { + throw new IOException("Not a valid tiff file"); + } + + // Loop through the tags, some will convert to items in the params dictionary + // Other point us to where to find the data stream. + // The only param which might change as a result of other TIFF tags is K, so + // we'll deal with that differently. + + // Default value to detect error + int k = -1000; + + int dataoffset = 0; + int datalength = 0; + + for (int i = 0; i < numtags; i++) + { + int tag = readshort(endianess, reader); + int type = readshort(endianess, reader); + int count = readlong(endianess, reader); + int val; + // Note that when the type is shorter than 4 bytes, the rest can be garbage + // and must be ignored. E.g. short (2 bytes) from "01 00 38 32" (little endian) + // is 1, not 842530817 (seen in a real-life TIFF image). + switch (type) + { + case 1: // byte value + val = reader.read(); + reader.read(); + reader.read(); + reader.read(); + break; + case 3: // short value + val = readshort(endianess, reader); + reader.read(); + reader.read(); + break; + default: // long and other types + val = readlong(endianess, reader); + break; + } + switch (tag) + { + case 256: + { + params.setInt(COSName.COLUMNS, val); + break; + } + case 257: + { + params.setInt(COSName.ROWS, val); + break; + } + case 259: + { + if (val == 4) + { + k = -1; + } + if (val == 3) + { + k = 0; + } + break; // T6/T4 Compression + } + case 262: + { + if (val == 1) + { + params.setBoolean(COSName.BLACK_IS_1, true); + } + break; + } + case 266: + { + if (val != 1) + { + throw new IOException("FillOrder " + val + " is not supported"); + } + break; + } + case 273: + { + if (count == 1) + { + dataoffset = val; + } + break; + } + case 274: + { + // http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html + if (val != 1) + { + throw new IOException("Orientation " + val + " is not supported"); + } + break; + } + case 279: + { + if (count == 1) + { + datalength = val; + } + break; + } + case 292: + { + if ((val & 1) != 0) + { + // T4 2D - arbitary positive K value + k = 50; + } + // http://www.awaresystems.be/imaging/tiff/tifftags/t4options.html + if ((val & 4) != 0) + { + throw new IOException("CCITT Group 3 'uncompressed mode' is not supported"); + } + if ((val & 2) != 0) + { + throw new IOException("CCITT Group 3 'fill bits before EOL' is not supported"); + } + break; + } + case 324: + { + if (count == 1) + { + dataoffset = val; + } + break; + } + case 325: + { + if (count == 1) + { + datalength = val; + } + break; + } + default: + { + // do nothing + } + } + } + + if (k == -1000) + { + throw new IOException("First image in tiff is not CCITT T4 or T6 compressed"); + } + if (dataoffset == 0) + { + throw new IOException("First image in tiff is not a single tile/strip"); + } + + params.setInt(COSName.K, k); + + reader.seek(dataoffset); + + byte[] buf = new byte[8192]; + int amountRead; + while ((amountRead = reader.read(buf, 0, Math.min(8192, datalength))) > 0) + { + datalength -= amountRead; + os.write(buf, 0, amountRead); + } + + } + finally + { + os.close(); + } + } + + private static int readshort(char endianess, RandomAccess raf) throws IOException + { + if (endianess == 'I') + { + return raf.read() | (raf.read() << 8); + } + return (raf.read() << 8) | raf.read(); + } + + private static int readlong(char endianess, RandomAccess raf) throws IOException + { + if (endianess == 'I') + { + return raf.read() | (raf.read() << 8) | (raf.read() << 16) | (raf.read() << 24); + } + return (raf.read() << 24) | (raf.read() << 16) | (raf.read() << 8) | raf.read(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java new file mode 100644 index 00000000000..b2a06f3dd17 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java @@ -0,0 +1,407 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Transparency; +import java.awt.color.ColorSpace; +import java.awt.color.ICC_ColorSpace; +import java.awt.image.BufferedImage; +import java.awt.image.ColorConvertOp; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Iterator; +import javax.imageio.IIOImage; +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.ImageTypeSpecifier; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; +import javax.imageio.metadata.IIOMetadata; +import javax.imageio.plugins.jpeg.JPEGImageWriteParam; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.ImageOutputStream; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.filter.MissingImageReaderException; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.w3c.dom.Element; + +/** + * Factory for creating a PDImageXObject containing a JPEG compressed image. + * @author John Hewson + */ +public final class JPEGFactory +{ + private JPEGFactory() + { + } + + /** + * Creates a new JPEG Image XObject from an input stream containing JPEG data. + * + * The input stream data will be preserved and embedded in the PDF file without modification. + * @param document the document where the image will be created + * @param stream a stream of JPEG data + * @return a new Image XObject + * + * @throws IOException if the input stream cannot be read + */ + public static PDImageXObject createFromStream(PDDocument document, InputStream stream) + throws IOException + { + return createFromByteArray(document, IOUtils.toByteArray(stream)); + } + + /** + * Creates a new JPEG Image XObject from a byte array containing JPEG data. + * + * @param document the document where the image will be created + * @param byteArray bytes of JPEG image + * @return a new Image XObject + * + * @throws IOException if the input stream cannot be read + */ + public static PDImageXObject createFromByteArray(PDDocument document, byte[] byteArray) + throws IOException + { + // copy stream + ByteArrayInputStream byteStream = new ByteArrayInputStream(byteArray); + + // read image + Raster raster = readJPEGRaster(byteStream); + byteStream.reset(); + + PDColorSpace colorSpace; + switch (raster.getNumDataElements()) + { + case 1: + colorSpace = PDDeviceGray.INSTANCE; + break; + case 3: + colorSpace = PDDeviceRGB.INSTANCE; + break; + case 4: + colorSpace = PDDeviceCMYK.INSTANCE; + break; + default: + throw new UnsupportedOperationException("number of data elements not supported: " + + raster.getNumDataElements()); + } + + // create PDImageXObject from stream + PDImageXObject pdImage = new PDImageXObject(document, byteStream, + COSName.DCT_DECODE, raster.getWidth(), raster.getHeight(), 8, colorSpace); + + if (colorSpace instanceof PDDeviceCMYK) + { + COSArray decode = new COSArray(); + decode.add(COSInteger.ONE); + decode.add(COSInteger.ZERO); + decode.add(COSInteger.ONE); + decode.add(COSInteger.ZERO); + decode.add(COSInteger.ONE); + decode.add(COSInteger.ZERO); + decode.add(COSInteger.ONE); + decode.add(COSInteger.ZERO); + pdImage.setDecode(decode); + } + + return pdImage; + } + + private static Raster readJPEGRaster(InputStream stream) throws IOException + { + // find suitable image reader + Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); + ImageReader reader = null; + while (readers.hasNext()) + { + reader = readers.next(); + if (reader.canReadRaster()) + { + break; + } + } + + if (reader == null) + { + throw new MissingImageReaderException( + "Cannot read JPEG image: a suitable JAI I/O image filter is not installed"); + } + + try (ImageInputStream iis = ImageIO.createImageInputStream(stream)) + { + reader.setInput(iis); + ImageIO.setUseCache(false); + return reader.readRaster(0, null); + } + finally + { + reader.dispose(); + } + } + + /** + * Creates a new JPEG PDImageXObject from a BufferedImage. + *

    + * Do not read a JPEG image from a stream/file and call this method; you'll get more speed and + * quality by calling {@link #createFromStream(org.apache.pdfbox.pdmodel.PDDocument, + * java.io.InputStream) createFromStream()} instead. + * + * @param document the document where the image will be created + * @param image the BufferedImage to embed + * @return a new Image XObject + * @throws IOException if the JPEG data cannot be written + */ + public static PDImageXObject createFromImage(PDDocument document, BufferedImage image) + throws IOException + { + return createFromImage(document, image, 0.75f); + } + + /** + * Creates a new JPEG PDImageXObject from a BufferedImage and a given quality. + *

    + * Do not read a JPEG image from a stream/file and call this method; you'll get more speed and + * quality by calling {@link #createFromStream(org.apache.pdfbox.pdmodel.PDDocument, + * java.io.InputStream) createFromStream()} instead. + * + * The image will be created with a dpi value of 72 to be stored in metadata. + * @param document the document where the image will be created + * @param image the BufferedImage to embed + * @param quality The desired JPEG compression quality; between 0 (best + * compression) and 1 (best image quality). See + * {@link ImageWriteParam#setCompressionQuality(float)} for more details. + * @return a new Image XObject + * @throws IOException if the JPEG data cannot be written + */ + public static PDImageXObject createFromImage(PDDocument document, BufferedImage image, + float quality) throws IOException + { + return createFromImage(document, image, quality, 72); + } + + /** + * Creates a new JPEG Image XObject from a BufferedImage, a given quality and dpi metadata. + *

    + * Do not read a JPEG image from a stream/file and call this method; you'll get more speed and + * quality by calling {@link #createFromStream(org.apache.pdfbox.pdmodel.PDDocument, + * java.io.InputStream) createFromStream()} instead. + * + * @param document the document where the image will be created + * @param image the BufferedImage to embed + * @param quality The desired JPEG compression quality; between 0 (best + * compression) and 1 (best image quality). See + * {@link ImageWriteParam#setCompressionQuality(float)} for more details. + * @param dpi the desired dpi (resolution) value of the JPEG to be stored in metadata. This + * value has no influence on image content or size. + * @return a new Image XObject + * @throws IOException if the JPEG data cannot be written + */ + public static PDImageXObject createFromImage(PDDocument document, BufferedImage image, + float quality, int dpi) throws IOException + { + return createJPEG(document, image, quality, dpi); + } + + // returns the alpha channel of an image + private static BufferedImage getAlphaImage(BufferedImage image) throws IOException + { + if (!image.getColorModel().hasAlpha()) + { + return null; + } + if (image.getTransparency() == Transparency.BITMASK) + { + throw new UnsupportedOperationException("BITMASK Transparency JPEG compression is not" + + " useful, use LosslessImageFactory instead"); + } + WritableRaster alphaRaster = image.getAlphaRaster(); + if (alphaRaster == null) + { + // happens sometimes (PDFBOX-2654) despite colormodel claiming to have alpha + return null; + } + BufferedImage alphaImage = new BufferedImage(image.getWidth(), image.getHeight(), + BufferedImage.TYPE_BYTE_GRAY); + alphaImage.setData(alphaRaster); + return alphaImage; + } + + // Creates an Image XObject from a BufferedImage using JAI Image I/O + private static PDImageXObject createJPEG(PDDocument document, BufferedImage image, + float quality, int dpi) throws IOException + { + // extract alpha channel (if any) + BufferedImage awtColorImage = getColorImage(image); + BufferedImage awtAlphaImage = getAlphaImage(image); + + // create XObject + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + encodeImageToJPEGStream(awtColorImage, quality, dpi, baos); + ByteArrayInputStream byteStream = new ByteArrayInputStream(baos.toByteArray()); + + PDImageXObject pdImage = new PDImageXObject(document, byteStream, + COSName.DCT_DECODE, awtColorImage.getWidth(), awtColorImage.getHeight(), + awtColorImage.getColorModel().getComponentSize(0), + getColorSpaceFromAWT(awtColorImage)); + + // alpha -> soft mask + if (awtAlphaImage != null) + { + PDImage xAlpha = JPEGFactory.createFromImage(document, awtAlphaImage, quality); + pdImage.getCOSObject().setItem(COSName.SMASK, xAlpha); + } + + return pdImage; + } + + private static ImageWriter getJPEGImageWriter() throws IOException + { + ImageWriter writer = null; + Iterator writers = ImageIO.getImageWritersBySuffix("jpeg"); + while (writers.hasNext()) + { + if (writer != null) + { + writer.dispose(); + } + writer = writers.next(); + if (writer == null) + { + continue; + } + // PDFBOX-3566: avoid CLibJPEGImageWriter, which is not a JPEGImageWriteParam + if (writer.getDefaultWriteParam() instanceof JPEGImageWriteParam) + { + return writer; + } + } + throw new IOException("No ImageWriter found for JPEG format"); + } + + private static void encodeImageToJPEGStream(BufferedImage image, float quality, int dpi, + OutputStream out) throws IOException + { + // encode to JPEG + ImageOutputStream ios = null; + ImageWriter imageWriter = null; + try + { + // find JAI writer + imageWriter = getJPEGImageWriter(); + ios = ImageIO.createImageOutputStream(out); + imageWriter.setOutput(ios); + + // add compression + JPEGImageWriteParam jpegParam = (JPEGImageWriteParam)imageWriter.getDefaultWriteParam(); + jpegParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT); + jpegParam.setCompressionQuality(quality); + + // add metadata + ImageTypeSpecifier imageTypeSpecifier = new ImageTypeSpecifier(image); + IIOMetadata data = imageWriter.getDefaultImageMetadata(imageTypeSpecifier, jpegParam); + Element tree = (Element)data.getAsTree("javax_imageio_jpeg_image_1.0"); + Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0); + jfif.setAttribute("Xdensity", Integer.toString(dpi)); + jfif.setAttribute("Ydensity", Integer.toString(dpi)); + jfif.setAttribute("resUnits", "1"); // 1 = dots/inch + + // write + imageWriter.write(data, new IIOImage(image, null, null), jpegParam); + } + finally + { + // clean up + IOUtils.closeQuietly(out); + if (ios != null) + { + ios.close(); + } + if (imageWriter != null) + { + imageWriter.dispose(); + } + } + } + + // returns a PDColorSpace for a given BufferedImage + private static PDColorSpace getColorSpaceFromAWT(BufferedImage awtImage) + { + if (awtImage.getColorModel().getNumComponents() == 1) + { + // 256 color (gray) JPEG + return PDDeviceGray.INSTANCE; + } + + ColorSpace awtColorSpace = awtImage.getColorModel().getColorSpace(); + if (awtColorSpace instanceof ICC_ColorSpace && !awtColorSpace.isCS_sRGB()) + { + throw new UnsupportedOperationException("ICC color spaces not implemented"); + } + + switch (awtColorSpace.getType()) + { + case ColorSpace.TYPE_RGB: + return PDDeviceRGB.INSTANCE; + case ColorSpace.TYPE_GRAY: + return PDDeviceGray.INSTANCE; + case ColorSpace.TYPE_CMYK: + return PDDeviceCMYK.INSTANCE; + default: + throw new UnsupportedOperationException("color space not implemented: " + + awtColorSpace.getType()); + } + } + + // returns the color channels of an image + private static BufferedImage getColorImage(BufferedImage image) + { + if (!image.getColorModel().hasAlpha()) + { + return image; + } + + if (image.getColorModel().getColorSpace().getType() != ColorSpace.TYPE_RGB) + { + throw new UnsupportedOperationException("only RGB color spaces are implemented"); + } + + // create an RGB image without alpha + //BEWARE: the previous solution in the history + // g.setComposite(AlphaComposite.Src) and g.drawImage() + // didn't work properly for TYPE_4BYTE_ABGR. + // alpha values of 0 result in a black dest pixel!!! + BufferedImage rgbImage = new BufferedImage( + image.getWidth(), + image.getHeight(), + BufferedImage.TYPE_3BYTE_BGR); + return new ColorConvertOp(null).filter(image, rgbImage); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java new file mode 100644 index 00000000000..18b2bf075cb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java @@ -0,0 +1,704 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Transparency; +import java.awt.color.ColorSpace; +import java.awt.color.ICC_ColorSpace; +import java.awt.color.ICC_Profile; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.Raster; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.zip.Deflater; +import java.util.zip.DeflaterOutputStream; +import javax.imageio.stream.MemoryCacheImageOutputStream; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased; + +/** + * Factory for creating a PDImageXObject containing a lossless compressed image. + * + * @author Tilman Hausherr + */ +public final class LosslessFactory +{ + /** + * Internal, only for benchmark purpose + */ + static boolean usePredictorEncoder = true; + + private LosslessFactory() + { + } + + /** + * Creates a new lossless encoded image XObject from a BufferedImage. + *

    + * New for advanced users from 2.0.12 on:
    + * If you created your image with a non standard ICC colorspace, it will be + * preserved. (If you load images in java using ImageIO then no need to read + * this segment) However a new colorspace will be created for each image. So + * if you create a PDF with several such images, consider replacing the + * colorspace with a common object to save space. This is done with + * {@link PDImageXObject#getColorSpace()} and + * {@link PDImageXObject#setColorSpace(org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace) PDImageXObject.setColorSpace()} + * + * @param document the document where the image will be created + * @param image the BufferedImage to embed + * @return a new image XObject + * @throws IOException if something goes wrong + */ + public static PDImageXObject createFromImage(PDDocument document, BufferedImage image) + throws IOException + { + if ((image.getType() == BufferedImage.TYPE_BYTE_GRAY && image.getColorModel().getPixelSize() <= 8) + || (image.getType() == BufferedImage.TYPE_BYTE_BINARY && image.getColorModel().getPixelSize() == 1)) + { + return createFromGrayImage(image, document); + } + else + { + // We try to encode the image with predictor + if (usePredictorEncoder) + { + PDImageXObject pdImageXObject = new PredictorEncoder(document, image).encode(); + if (pdImageXObject != null) + { + if (pdImageXObject.getColorSpace() == PDDeviceRGB.INSTANCE && + pdImageXObject.getBitsPerComponent() < 16 && + image.getWidth() * image.getHeight() <= 50 * 50) + { + // also create classic compressed image, compare sizes + PDImageXObject pdImageXObjectClassic = createFromRGBImage(image, document); + if (pdImageXObjectClassic.getCOSObject().getLength() < + pdImageXObject.getCOSObject().getLength()) + { + pdImageXObject.getCOSObject().close(); + return pdImageXObjectClassic; + } + else + { + pdImageXObjectClassic.getCOSObject().close(); + } + } + return pdImageXObject; + } + } + + // Fallback: We export the image as 8-bit sRGB and might loose color information + return createFromRGBImage(image, document); + } + } + + // grayscale images need one color per sample + private static PDImageXObject createFromGrayImage(BufferedImage image, PDDocument document) + throws IOException + { + int height = image.getHeight(); + int width = image.getWidth(); + int[] rgbLineBuffer = new int[width]; + int bpc = image.getColorModel().getPixelSize(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(((width*bpc/8)+(width*bpc%8 != 0 ? 1:0))*height); + try (MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(baos)) + { + for (int y = 0; y < height; ++y) + { + for (int pixel : image.getRGB(0, y, width, 1, rgbLineBuffer, 0, width)) + { + mcios.writeBits(pixel & 0xFF, bpc); + } + int bitOffset = mcios.getBitOffset(); + if (bitOffset != 0) + { + mcios.writeBits(0, 8 - bitOffset); + } + } + mcios.flush(); + } + return prepareImageXObject(document, baos.toByteArray(), + image.getWidth(), image.getHeight(), bpc, PDDeviceGray.INSTANCE); + } + + private static PDImageXObject createFromRGBImage(BufferedImage image, PDDocument document) throws IOException + { + int height = image.getHeight(); + int width = image.getWidth(); + int[] rgbLineBuffer = new int[width]; + int bpc = 8; + PDDeviceColorSpace deviceColorSpace = PDDeviceRGB.INSTANCE; + byte[] imageData = new byte[width * height * 3]; + int byteIdx = 0; + int alphaByteIdx = 0; + int alphaBitPos = 7; + int transparency = image.getTransparency(); + int apbc = transparency == Transparency.BITMASK ? 1 : 8; + byte[] alphaImageData; + if (transparency != Transparency.OPAQUE) + { + alphaImageData = new byte[((width * apbc / 8) + (width * apbc % 8 != 0 ? 1 : 0)) * height]; + } + else + { + alphaImageData = new byte[0]; + } + for (int y = 0; y < height; ++y) + { + for (int pixel : image.getRGB(0, y, width, 1, rgbLineBuffer, 0, width)) + { + imageData[byteIdx++] = (byte) ((pixel >> 16) & 0xFF); + imageData[byteIdx++] = (byte) ((pixel >> 8) & 0xFF); + imageData[byteIdx++] = (byte) (pixel & 0xFF); + if (transparency != Transparency.OPAQUE) + { + // we have the alpha right here, so no need to do it separately + // as done prior April 2018 + if (transparency == Transparency.BITMASK) + { + // write a bit + alphaImageData[alphaByteIdx] |= ((pixel >> 24) & 1) << alphaBitPos; + if (--alphaBitPos < 0) + { + alphaBitPos = 7; + ++alphaByteIdx; + } + } + else + { + // write a byte + alphaImageData[alphaByteIdx++] = (byte) ((pixel >> 24) & 0xFF); + } + } + } + + // skip boundary if needed + if (transparency == Transparency.BITMASK && alphaBitPos != 7) + { + alphaBitPos = 7; + ++alphaByteIdx; + } + } + PDImageXObject pdImage = prepareImageXObject(document, imageData, + image.getWidth(), image.getHeight(), bpc, deviceColorSpace); + if (transparency != Transparency.OPAQUE) + { + PDImageXObject pdMask = prepareImageXObject(document, alphaImageData, + image.getWidth(), image.getHeight(), apbc, PDDeviceGray.INSTANCE); + pdImage.getCOSObject().setItem(COSName.SMASK, pdMask); + } + return pdImage; + } + + /** + * Create a PDImageXObject using the Flate filter. + * + * @param document The document. + * @param byteArray array with data. + * @param width the image width + * @param height the image height + * @param bitsPerComponent the bits per component + * @param initColorSpace the color space + * @return the newly created PDImageXObject with the data compressed. + * @throws IOException + */ + private static PDImageXObject prepareImageXObject(PDDocument document, + byte [] byteArray, int width, int height, int bitsPerComponent, + PDColorSpace initColorSpace) throws IOException + { + //pre-size the output stream to half of the input + ByteArrayOutputStream baos = new ByteArrayOutputStream(byteArray.length/2); + + Filter filter = FilterFactory.INSTANCE.getFilter(COSName.FLATE_DECODE); + filter.encode(new ByteArrayInputStream(byteArray), baos, new COSDictionary(), 0); + + ByteArrayInputStream encodedByteStream = new ByteArrayInputStream(baos.toByteArray()); + return new PDImageXObject(document, encodedByteStream, COSName.FLATE_DECODE, + width, height, bitsPerComponent, initColorSpace); + } + + private static class PredictorEncoder + { + private final PDDocument document; + private final BufferedImage image; + private final int componentsPerPixel; + private final int transferType; + private final int bytesPerComponent; + private final int bytesPerPixel; + + private final int height; + private final int width; + + private final byte[] dataRawRowNone; + private final byte[] dataRawRowSub; + private final byte[] dataRawRowUp; + private final byte[] dataRawRowAverage; + private final byte[] dataRawRowPaeth; + + final int imageType; + final boolean hasAlpha; + final byte[] alphaImageData; + + final byte[] aValues; + final byte[] cValues; + final byte[] bValues; + final byte[] xValues; + final byte[] tmpResultValues; + + /** + * Initialize the encoder and set all final fields + */ + PredictorEncoder(PDDocument document, BufferedImage image) + { + this.document = document; + this.image = image; + + // The raw count of components per pixel including optional alpha + this.componentsPerPixel = image.getColorModel().getNumComponents(); + this.transferType = image.getRaster().getTransferType(); + this.bytesPerComponent = (transferType == DataBuffer.TYPE_SHORT + || transferType == DataBuffer.TYPE_USHORT) ? 2 : 1; + + // Only the bytes we need in the output (excluding alpha) + this.bytesPerPixel = image.getColorModel().getNumColorComponents() * bytesPerComponent; + + this.height = image.getHeight(); + this.width = image.getWidth(); + this.imageType = image.getType(); + this.hasAlpha = image.getColorModel().getNumComponents() != image.getColorModel() + .getNumColorComponents(); + this.alphaImageData = hasAlpha ? new byte[width * height * bytesPerComponent] : null; + + // The rows have 1-byte encoding marker and width * BYTES_PER_PIXEL pixel-bytes + int dataRowByteCount = width * bytesPerPixel + 1; + this.dataRawRowNone = new byte[dataRowByteCount]; + this.dataRawRowSub = new byte[dataRowByteCount]; + this.dataRawRowUp = new byte[dataRowByteCount]; + this.dataRawRowAverage = new byte[dataRowByteCount]; + this.dataRawRowPaeth = new byte[dataRowByteCount]; + + // Write the encoding markers + dataRawRowNone[0] = 0; + dataRawRowSub[0] = 1; + dataRawRowUp[0] = 2; + dataRawRowAverage[0] = 3; + dataRawRowPaeth[0] = 4; + + // c | b + // ----- + // a | x + // + // x => current pixel + this.aValues = new byte[bytesPerPixel]; + this.cValues = new byte[bytesPerPixel]; + this.bValues = new byte[bytesPerPixel]; + this.xValues = new byte[bytesPerPixel]; + this.tmpResultValues = new byte[bytesPerPixel]; + } + + /** + * Tries to compress the image using a predictor. + * + * @return the image or null if it is not possible to encoded the image (e.g. not supported + * raster format etc.) + */ + PDImageXObject encode() throws IOException + { + Raster imageRaster = image.getRaster(); + final int elementsInRowPerPixel; + + // These variables store a row of the image each, the exact type depends + // on the image encoding. Can be a int[], short[] or byte[] + Object prevRow; + Object transferRow; + + switch (imageType) + { + case BufferedImage.TYPE_CUSTOM: + { + switch (imageRaster.getTransferType()) + { + case DataBuffer.TYPE_USHORT: + elementsInRowPerPixel = componentsPerPixel; + prevRow = new short[width * elementsInRowPerPixel]; + transferRow = new short[width * elementsInRowPerPixel]; + break; + case DataBuffer.TYPE_BYTE: + elementsInRowPerPixel = componentsPerPixel; + prevRow = new byte[width * elementsInRowPerPixel]; + transferRow = new byte[width * elementsInRowPerPixel]; + break; + default: + return null; + } + break; + } + + case BufferedImage.TYPE_3BYTE_BGR: + case BufferedImage.TYPE_4BYTE_ABGR: + { + elementsInRowPerPixel = componentsPerPixel; + prevRow = new byte[width * elementsInRowPerPixel]; + transferRow = new byte[width * elementsInRowPerPixel]; + break; + } + + case BufferedImage.TYPE_INT_BGR: + case BufferedImage.TYPE_INT_ARGB: + case BufferedImage.TYPE_INT_RGB: + { + elementsInRowPerPixel = 1; + prevRow = new int[width * elementsInRowPerPixel]; + transferRow = new int[width * elementsInRowPerPixel]; + break; + } + + default: + // We can not handle this unknown format + return null; + } + + final int elementsInTransferRow = width * elementsInRowPerPixel; + + // pre-size the output stream to half of the maximum size + ByteArrayOutputStream stream = new ByteArrayOutputStream( + height * width * bytesPerPixel / 2); + Deflater deflater = new Deflater(Filter.getCompressionLevel()); + DeflaterOutputStream zip = new DeflaterOutputStream(stream, deflater); + + int alphaPtr = 0; + + for (int rowNum = 0; rowNum < height; rowNum++) + { + imageRaster.getDataElements(0, rowNum, width, 1, transferRow); + + // We start to write at index one, as the predictor marker is in index zero + int writerPtr = 1; + Arrays.fill(aValues, (byte) 0); + Arrays.fill(cValues, (byte) 0); + + final byte[] transferRowByte; + final byte[] prevRowByte; + final int[] transferRowInt; + final int[] prevRowInt; + final short[] transferRowShort; + final short[] prevRowShort; + + if (transferRow instanceof byte[]) + { + transferRowByte = (byte[]) transferRow; + prevRowByte = (byte[]) prevRow; + transferRowInt = prevRowInt = null; + transferRowShort = prevRowShort = null; + } + else if (transferRow instanceof int[]) + { + transferRowInt = (int[]) transferRow; + prevRowInt = (int[]) prevRow; + transferRowShort = prevRowShort = null; + transferRowByte = prevRowByte = null; + } + else + { + // This must be short[] + transferRowShort = (short[]) transferRow; + prevRowShort = (short[]) prevRow; + transferRowInt = prevRowInt = null; + transferRowByte = prevRowByte = null; + } + + for (int indexInTransferRow = 0; indexInTransferRow < elementsInTransferRow; + indexInTransferRow += elementsInRowPerPixel, alphaPtr += bytesPerComponent) + { + // Copy the pixel values into the byte array + if (transferRowByte != null) + { + copyImageBytes(transferRowByte, indexInTransferRow, xValues, alphaImageData, + alphaPtr); + copyImageBytes(prevRowByte, indexInTransferRow, bValues, null, 0); + } + else if (transferRowInt != null) + { + copyIntToBytes(transferRowInt, indexInTransferRow, xValues, alphaImageData, + alphaPtr); + copyIntToBytes(prevRowInt, indexInTransferRow, bValues, null, 0); + } + else + { + // This must be short[] + copyShortsToBytes(transferRowShort, indexInTransferRow, xValues, alphaImageData, alphaPtr); + copyShortsToBytes(prevRowShort, indexInTransferRow, bValues, null, 0); + } + + // Encode the pixel values in the different encodings + int length = xValues.length; + for (int bytePtr = 0; bytePtr < length; bytePtr++) + { + int x = xValues[bytePtr] & 0xFF; + int a = aValues[bytePtr] & 0xFF; + int b = bValues[bytePtr] & 0xFF; + int c = cValues[bytePtr] & 0xFF; + dataRawRowNone[writerPtr] = (byte) x; + dataRawRowSub[writerPtr] = pngFilterSub(x, a); + dataRawRowUp[writerPtr] = pngFilterUp(x, b); + dataRawRowAverage[writerPtr] = pngFilterAverage(x, a, b); + dataRawRowPaeth[writerPtr] = pngFilterPaeth(x, a, b, c); + writerPtr++; + } + + // We shift the values into the prev / upper left values for the next pixel + System.arraycopy(xValues, 0, aValues, 0, bytesPerPixel); + System.arraycopy(bValues, 0, cValues, 0, bytesPerPixel); + } + + byte[] rowToWrite = chooseDataRowToWrite(); + + // Write and compress the row as long it is hot (CPU cache wise) + zip.write(rowToWrite, 0, rowToWrite.length); + + // We swap prev and transfer row, so that we have the prev row for the next row. + Object temp = prevRow; + prevRow = transferRow; + transferRow = temp; + } + zip.close(); + deflater.end(); + + return preparePredictorPDImage(stream, bytesPerComponent * 8); + } + + private void copyIntToBytes(int[] transferRow, int indexInTranferRow, byte[] targetValues, + byte[] alphaImageData, int alphaPtr) + { + int val = transferRow[indexInTranferRow]; + byte b0 = (byte) (val & 0xFF); + byte b1 = (byte) ((val >> 8) & 0xFF); + byte b2 = (byte) ((val >> 16) & 0xFF); + + switch (imageType) + { + case BufferedImage.TYPE_INT_BGR: + targetValues[0] = b0; + targetValues[1] = b1; + targetValues[2] = b2; + break; + + case BufferedImage.TYPE_INT_ARGB: + targetValues[0] = b2; + targetValues[1] = b1; + targetValues[2] = b0; + if (alphaImageData != null) + { + byte b3 = (byte) ((val >> 24) & 0xFF); + alphaImageData[alphaPtr] = b3; + } + break; + case BufferedImage.TYPE_INT_RGB: + targetValues[0] = b2; + targetValues[1] = b1; + targetValues[2] = b0; + break; + } + } + + private void copyImageBytes(byte[] transferRow, int indexInTranferRow, byte[] targetValues, + byte[] alphaImageData, int alphaPtr) + { + System.arraycopy(transferRow, indexInTranferRow, targetValues, 0, targetValues.length); + if (alphaImageData != null) + { + alphaImageData[alphaPtr] = transferRow[indexInTranferRow + targetValues.length]; + } + } + + private static void copyShortsToBytes(short[] transferRow, int indexInTranferRow, + byte[] targetValues, byte[] alphaImageData, int alphaPtr) + { + int itr = indexInTranferRow; + for (int i = 0; i < targetValues.length; i += 2) + { + short val = transferRow[itr++]; + targetValues[i] = (byte) ((val >> 8) & 0xFF); + targetValues[i + 1] = (byte) (val & 0xFF); + } + if (alphaImageData != null) + { + short alpha = transferRow[itr]; + alphaImageData[alphaPtr] = (byte) ((alpha >> 8) & 0xFF); + alphaImageData[alphaPtr + 1] = (byte) (alpha & 0xFF); + } + } + + private PDImageXObject preparePredictorPDImage(ByteArrayOutputStream stream, + int bitsPerComponent) throws IOException + { + int h = image.getHeight(); + int w = image.getWidth(); + + ColorSpace srcCspace = image.getColorModel().getColorSpace(); + PDColorSpace pdColorSpace = srcCspace.getType() != ColorSpace.TYPE_CMYK + ? PDDeviceRGB.INSTANCE : PDDeviceCMYK.INSTANCE; + + // Encode the image profile if the image has one + if (srcCspace instanceof ICC_ColorSpace) + { + ICC_Profile profile = ((ICC_ColorSpace) srcCspace).getProfile(); + // We only encode a color profile if it is not sRGB + if (profile != ICC_Profile.getInstance(ColorSpace.CS_sRGB)) + { + PDICCBased pdProfile = new PDICCBased(document); + try (OutputStream outputStream = pdProfile.getPDStream() + .createOutputStream(COSName.FLATE_DECODE)) + { + outputStream.write(profile.getData()); + } + pdProfile.getPDStream().getCOSObject().setInt(COSName.N, + srcCspace.getNumComponents()); + pdProfile.getPDStream().getCOSObject().setItem(COSName.ALTERNATE, + srcCspace.getType() == ColorSpace.TYPE_CMYK ? + COSName.DEVICECMYK : + COSName.DEVICERGB); + pdColorSpace = pdProfile; + } + } + + PDImageXObject imageXObject = new PDImageXObject(document, + new ByteArrayInputStream(stream.toByteArray()), COSName.FLATE_DECODE, w, + h, bitsPerComponent, pdColorSpace); + + COSDictionary decodeParms = new COSDictionary(); + decodeParms.setItem(COSName.BITS_PER_COMPONENT, COSInteger.get(bitsPerComponent)); + decodeParms.setItem(COSName.PREDICTOR, COSInteger.get(15)); + decodeParms.setItem(COSName.COLUMNS, COSInteger.get(w)); + decodeParms.setItem(COSName.COLORS, COSInteger.get(srcCspace.getNumComponents())); + imageXObject.getCOSObject().setItem(COSName.DECODE_PARMS, decodeParms); + + if (image.getTransparency() != Transparency.OPAQUE) + { + PDImageXObject pdMask = prepareImageXObject(document, alphaImageData, + image.getWidth(), image.getHeight(), 8 * bytesPerComponent, PDDeviceGray.INSTANCE); + imageXObject.getCOSObject().setItem(COSName.SMASK, pdMask); + } + return imageXObject; + } + + /** + * We look which row encoding is the "best" one, ie. has the lowest sum. We don't implement + * anything fancier to choose the right row encoding. This is just the recommend algorithm + * in the spec. The get the perfect encoding you would need to do a brute force check how + * all the different encoded rows compress in the zip stream together. You have would have + * to check 5*image-height permutations... + * + * @return the "best" row encoding of the row encodings + */ + private byte[] chooseDataRowToWrite() + { + byte[] rowToWrite = dataRawRowNone; + long estCompressSum = estCompressSum(dataRawRowNone); + long estCompressSumSub = estCompressSum(dataRawRowSub); + long estCompressSumUp = estCompressSum(dataRawRowUp); + long estCompressSumAvg = estCompressSum(dataRawRowAverage); + long estCompressSumPaeth = estCompressSum(dataRawRowPaeth); + if (estCompressSum > estCompressSumSub) + { + rowToWrite = dataRawRowSub; + estCompressSum = estCompressSumSub; + } + if (estCompressSum > estCompressSumUp) + { + rowToWrite = dataRawRowUp; + estCompressSum = estCompressSumUp; + } + if (estCompressSum > estCompressSumAvg) + { + rowToWrite = dataRawRowAverage; + estCompressSum = estCompressSumAvg; + } + if (estCompressSum > estCompressSumPaeth) + { + rowToWrite = dataRawRowPaeth; + } + return rowToWrite; + } + + /* + * PNG Filters, see https://www.w3.org/TR/PNG-Filters.html + */ + private static byte pngFilterSub(int x, int a) + { + return (byte) ((x & 0xFF) - (a & 0xFF)); + } + + private static byte pngFilterUp(int x, int b) + { + // Same as pngFilterSub, just called with the prior row + return pngFilterSub(x, b); + } + + private static byte pngFilterAverage(int x, int a, int b) + { + return (byte) (x - ((b + a) / 2)); + } + + private static byte pngFilterPaeth(int x, int a, int b, int c) + { + int p = a + b - c; + int pa = Math.abs(p - a); + int pb = Math.abs(p - b); + int pc = Math.abs(p - c); + final int pr; + if (pa <= pb && pa <= pc) + { + pr = a; + } + else if (pb <= pc) + { + pr = b; + } + else + { + pr = c; + } + + int r = x - pr; + return (byte) (r); + } + + private static long estCompressSum(byte[] dataRawRowSub) + { + long sum = 0; + for (byte aDataRawRowSub : dataRawRowSub) + { + // https://www.w3.org/TR/PNG-Encoders.html#E.Filter-selection + sum += Math.abs(aDataRawRowSub); + } + return sum; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java new file mode 100644 index 00000000000..e4fd9a4cbf5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Paint; +import java.awt.Rectangle; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; + +/** + * An image in a PDF document. + * + * @author John Hewson + */ +public interface PDImage extends COSObjectable +{ + /** + * Returns the content of this image as an AWT buffered image with an (A)RGB color space. + * The size of the returned image is the larger of the size of the image itself or its mask. + * @return content of this image as a buffered image. + * @throws IOException + */ + BufferedImage getImage() throws IOException; + + /** + * Returns the content of this image as an AWT buffered image with an (A)RGB colored space. + * Only the subregion specified is rendered, and is subsampled by advancing the specified amount + * of rows and columns in the source image for every resulting pixel. + * + * Note that unlike {@link PDImage#getImage() the unparameterized version}, this method does + * not cache the resulting image. + * @param region The region of the source image to get, or null if the entire image is needed. + * The actual region will be clipped to the dimensions of the source image. + * @param subsampling The amount of rows and columns to advance for every output pixel, a value + * of 1 meaning every pixel will be read + * @return subsampled content of the requested subregion as a buffered image. + * @throws IOException + */ + BufferedImage getImage(Rectangle region, int subsampling) throws IOException; + + /** + * Returns an ARGB image filled with the given paint and using this image as a mask. + * @param paint the paint to fill the visible portions of the image with + * @return a masked image filled with the given paint + * @throws IOException if the image cannot be read + * @throws IllegalStateException if the image is not a stencil. + */ + BufferedImage getStencilImage(Paint paint) throws IOException; + + /** + * Returns an InputStream containing the image data, irrespective of whether this is an + * inline image or an image XObject. + * @return Decoded stream + * @throws IOException if the data could not be read. + */ + InputStream createInputStream() throws IOException; + + /** + * Returns an InputStream containing the image data, irrespective of whether this is an + * inline image or an image XObject. The given filters will not be decoded. + * @param stopFilters A list of filters to stop decoding at. + * @return Decoded stream + * @throws IOException if the data could not be read. + */ + InputStream createInputStream(List stopFilters) throws IOException; + + /** + * Returns an InputStream, passing additional options to each filter. As a side effect, the + * filterSubsampled flag is set in {@link DecodeOptions}. + * + * @param options Additional decoding options passed to the filters used + * @return Decoded stream + * @throws IOException if the data could not be read + */ + InputStream createInputStream(DecodeOptions options) throws IOException; + + /** + * Returns true if the image has no data. + */ + boolean isEmpty(); + + /** + * Returns true if the image is a stencil mask. + */ + boolean isStencil(); + + /** + * Sets whether or not the image is a stencil. + * This corresponds to the {@code ImageMask} entry in the image stream's dictionary. + * @param isStencil True to make the image a stencil. + */ + void setStencil(boolean isStencil); + + /** + * Returns bits per component of this image, or -1 if one has not been set. + */ + int getBitsPerComponent(); + + /** + * Set the number of bits per component. + * @param bitsPerComponent The number of bits per component. + */ + void setBitsPerComponent(int bitsPerComponent); + + /** + * Returns the image's color space. + * @throws IOException If there is an error getting the color space. + */ + PDColorSpace getColorSpace() throws IOException; + + /** + * Sets the color space for this image. + * @param colorSpace The color space for this image. + */ + void setColorSpace(PDColorSpace colorSpace); + + /** + * Returns height of this image, or -1 if one has not been set. + */ + int getHeight(); + + /** + * Sets the height of the image. + * @param height The height of the image. + */ + void setHeight(int height); + + /** + * Returns the width of this image, or -1 if one has not been set. + */ + int getWidth(); + + /** + * Sets the width of the image. + * @param width The width of the image. + */ + void setWidth(int width); + + /** + * Sets the decode array. + * @param decode the new decode array. + */ + void setDecode(COSArray decode); + + /** + * Returns the decode array. + */ + COSArray getDecode(); + + /** + * Returns true if the image should be interpolated when rendered. + */ + boolean getInterpolate(); + + + /** + * Sets the Interpolate flag, true for high-quality image scaling. + */ + void setInterpolate(boolean value); + + /** + * Returns the suffix for this image type, e.g. "jpg" + */ + String getSuffix(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java new file mode 100644 index 00000000000..27a97e02049 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java @@ -0,0 +1,837 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.ref.SoftReference; +import java.util.List; +import javax.imageio.ImageIO; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSInputStream; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.filter.DecodeResult; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDMetadata; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.util.filetypedetector.FileType; +import org.apache.pdfbox.util.filetypedetector.FileTypeDetector; + +/** + * An Image XObject. + * + * @author John Hewson + * @author Ben Litchfield + */ +public final class PDImageXObject extends PDXObject implements PDImage +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDImageXObject.class); + + private SoftReference cachedImage; + private PDColorSpace colorSpace; + + // initialize to MAX_VALUE as we prefer lower subsampling when keeping/replacing cache. + private int cachedImageSubsampling = Integer.MAX_VALUE; + + /** + * current resource dictionary (has color spaces) + */ + private final PDResources resources; + + /** + * Creates an Image XObject in the given document. This constructor is for internal PDFBox use + * and is not for PDF generation. Users who want to create images should look at {@link #createFromFileByExtension(File, PDDocument) + * }. + * + * @param document the current document + * @throws java.io.IOException if there is an error creating the XObject. + */ + public PDImageXObject(PDDocument document) throws IOException + { + this(new PDStream(document), null); + } + + /** + * Creates an Image XObject in the given document using the given filtered stream. This + * constructor is for internal PDFBox use and is not for PDF generation. Users who want to + * create images should look at {@link #createFromFileByExtension(File, PDDocument) }. + * + * @param document the current document + * @param encodedStream an encoded stream of image data + * @param cosFilter the filter or a COSArray of filters + * @param width the image width + * @param height the image height + * @param bitsPerComponent the bits per component + * @param initColorSpace the color space + * @throws IOException if there is an error creating the XObject. + */ + public PDImageXObject(PDDocument document, InputStream encodedStream, + COSBase cosFilter, int width, int height, int bitsPerComponent, + PDColorSpace initColorSpace) throws IOException + { + super(createRawStream(document, encodedStream), COSName.IMAGE); + getCOSObject().setItem(COSName.FILTER, cosFilter); + resources = null; + colorSpace = null; + setBitsPerComponent(bitsPerComponent); + setWidth(width); + setHeight(height); + setColorSpace(initColorSpace); + } + + /** + * Creates an Image XObject with the given stream as its contents and current color spaces. This + * constructor is for internal PDFBox use and is not for PDF generation. Users who want to + * create images should look at {@link #createFromFileByExtension(File, PDDocument) }. + * + * @param stream the XObject stream to read + * @param resources the current resources + * @throws java.io.IOException if there is an error creating the XObject. + */ + public PDImageXObject(PDStream stream, PDResources resources) throws IOException + { + super(stream, COSName.IMAGE); + this.resources = resources; + List filters = stream.getFilters(); + if (filters != null && !filters.isEmpty() && COSName.JPX_DECODE.equals(filters.get(filters.size()-1))) + { + try (COSInputStream is = stream.createInputStream()) + { + DecodeResult decodeResult = is.getDecodeResult(); + stream.getCOSObject().addAll(decodeResult.getParameters()); + this.colorSpace = decodeResult.getJPXColorSpace(); + } + } + } + + /** + * Creates a thumbnail Image XObject from the given COSBase and name. + * @param cosStream the COS stream + * @return an XObject + * @throws IOException if there is an error creating the XObject. + */ + public static PDImageXObject createThumbnail(COSStream cosStream) throws IOException + { + // thumbnails are special, any non-null subtype is treated as being "Image" + PDStream pdStream = new PDStream(cosStream); + return new PDImageXObject(pdStream, null); + } + + /** + * Creates a COS stream from raw (encoded) data. + */ + private static COSStream createRawStream(PDDocument document, InputStream rawInput) + throws IOException + { + COSStream stream = document.getDocument().createCOSStream(); + try (OutputStream output = stream.createRawOutputStream()) + { + IOUtils.copy(rawInput, output); + } + return stream; + } + + /** + * Create a PDImageXObject from an image file, see {@link #createFromFileByExtension(File, PDDocument)} for + * more details. + * + * @param imagePath the image file path. + * @param doc the document that shall use this PDImageXObject. + * @return a PDImageXObject. + * @throws IOException if there is an error when reading the file or creating the + * PDImageXObject, or if the image type is not supported. + */ + public static PDImageXObject createFromFile(String imagePath, PDDocument doc) throws IOException + { + return createFromFileByExtension(new File(imagePath), doc); + } + + /** + * Create a PDImageXObject from an image file. The file format is determined by the file name + * suffix. The following suffixes are supported: jpg, jpeg, tif, tiff, gif, bmp and png. This is + * a convenience method that calls {@link JPEGFactory#createFromStream}, + * {@link CCITTFactory#createFromFile} or {@link ImageIO#read} combined with + * {@link LosslessFactory#createFromImage}. (The later can also be used to create a + * PDImageXObject from a BufferedImage). + * + * @param file the image file. + * @param doc the document that shall use this PDImageXObject. + * @return a PDImageXObject. + * @throws IOException if there is an error when reading the file or creating the + * PDImageXObject. + * @throws IllegalArgumentException if the image type is not supported. + */ + public static PDImageXObject createFromFileByExtension(File file, PDDocument doc) throws IOException + { + String name = file.getName(); + int dot = file.getName().lastIndexOf('.'); + if (dot == -1) + { + throw new IllegalArgumentException("Image type not supported: " + name); + } + String ext = name.substring(dot + 1).toLowerCase(); + if ("jpg".equals(ext) || "jpeg".equals(ext)) + { + try (FileInputStream fis = new FileInputStream(file)) + { + return JPEGFactory.createFromStream(doc, fis); + } + } + if ("tif".equals(ext) || "tiff".equals(ext)) + { + return CCITTFactory.createFromFile(doc, file); + } + if ("gif".equals(ext) || "bmp".equals(ext) || "png".equals(ext)) + { + BufferedImage bim = ImageIO.read(file); + return LosslessFactory.createFromImage(doc, bim); + } + throw new IllegalArgumentException("Image type not supported: " + name); + } + + /** + * Create a PDImageXObject from an image file. The file format is determined by the file + * content. The following file types are supported: jpg, jpeg, tif, tiff, gif, bmp and png. This + * is a convenience method that calls {@link JPEGFactory#createFromStream}, + * {@link CCITTFactory#createFromFile} or {@link ImageIO#read} combined with + * {@link LosslessFactory#createFromImage}. (The later can also be used to create a + * PDImageXObject from a BufferedImage). + * + * @param file the image file. + * @param doc the document that shall use this PDImageXObject. + * @return a PDImageXObject. + * @throws IOException if there is an error when reading the file or creating the + * PDImageXObject. + * @throws IllegalArgumentException if the image type is not supported. + */ + public static PDImageXObject createFromFileByContent(File file, PDDocument doc) throws IOException + { + FileType fileType = null; + try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file))) + { + fileType = FileTypeDetector.detectFileType(bufferedInputStream); + } + catch (IOException e) + { + throw new IOException("Could not determine file type: " + file.getName(), e); + } + if (fileType == null) + { + throw new IllegalArgumentException("Image type not supported: " + file.getName()); + } + + if (fileType.equals(FileType.JPEG)) + { + try (FileInputStream fis = new FileInputStream(file)) + { + return JPEGFactory.createFromStream(doc, fis); + } + } + if (fileType.equals(FileType.TIFF)) + { + try + { + return CCITTFactory.createFromFile(doc, file); + } + catch (IOException ex) + { + LOG.debug("Reading as TIFF failed, setting fileType to PNG", ex); + // Plan B: try reading with ImageIO + // common exception: + // First image in tiff is not CCITT T4 or T6 compressed + fileType = FileType.PNG; + } + } + if (fileType.equals(FileType.BMP) || fileType.equals(FileType.GIF) || fileType.equals(FileType.PNG)) + { + BufferedImage bim = ImageIO.read(file); + return LosslessFactory.createFromImage(doc, bim); + } + throw new IllegalArgumentException("Image type " + fileType + " not supported: " + file.getName()); + } + + /** + * Create a PDImageXObject from bytes of an image file. The file format is determined by the + * file content. The following file types are supported: jpg, jpeg, tif, tiff, gif, bmp and png. + * This is a convenience method that calls {@link JPEGFactory#createFromByteArray}, + * {@link CCITTFactory#createFromFile} or {@link ImageIO#read} combined with + * {@link LosslessFactory#createFromImage}. (The later can also be used to create a + * PDImageXObject from a BufferedImage). + * + * @param byteArray bytes from an image file. + * @param document the document that shall use this PDImageXObject. + * @param name name of image file for exception messages, can be null. + * @return a PDImageXObject. + * @throws IOException if there is an error when reading the file or creating the + * PDImageXObject. + * @throws IllegalArgumentException if the image type is not supported. + */ + public static PDImageXObject createFromByteArray(PDDocument document, byte[] byteArray, String name) throws IOException + { + FileType fileType; + try + { + fileType = FileTypeDetector.detectFileType(byteArray); + } + catch (IOException e) + { + throw new IOException("Could not determine file type: " + name, e); + } + if (fileType == null) + { + throw new IllegalArgumentException("Image type not supported: " + name); + } + + if (fileType.equals(FileType.JPEG)) + { + return JPEGFactory.createFromByteArray(document, byteArray); + } + if (fileType.equals(FileType.TIFF)) + { + try + { + return CCITTFactory.createFromByteArray(document, byteArray); + } + catch (IOException ex) + { + LOG.debug("Reading as TIFF failed, setting fileType to PNG", ex); + // Plan B: try reading with ImageIO + // common exception: + // First image in tiff is not CCITT T4 or T6 compressed + fileType = FileType.PNG; + } + } + if (fileType.equals(FileType.BMP) || fileType.equals(FileType.GIF) || fileType.equals(FileType.PNG)) + { + ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); + BufferedImage bim = ImageIO.read(bais); + return LosslessFactory.createFromImage(document, bim); + } + throw new IllegalArgumentException("Image type " + fileType + " not supported: " + name); + } + + /** + * Returns the metadata associated with this XObject, or null if there is none. + * @return the metadata associated with this object. + */ + public PDMetadata getMetadata() + { + COSStream cosStream = getCOSObject().getCOSStream(COSName.METADATA); + if (cosStream != null) + { + return new PDMetadata(cosStream); + } + return null; + } + + /** + * Sets the metadata associated with this XObject, or null if there is none. + * @param meta the metadata associated with this object + */ + public void setMetadata(PDMetadata meta) + { + getCOSObject().setItem(COSName.METADATA, meta); + } + + /** + * Returns the key of this XObject in the structural parent tree. + * + * @return this object's key the structural parent tree or -1 if there isn't any. + */ + public int getStructParent() + { + return getCOSObject().getInt(COSName.STRUCT_PARENT); + } + + /** + * Sets the key of this XObject in the structural parent tree. + * @param key the new key for this XObject + */ + public void setStructParent(int key) + { + getCOSObject().setInt(COSName.STRUCT_PARENT, key); + } + + /** + * {@inheritDoc} + * The returned images are cached via a SoftReference. + */ + @Override + public BufferedImage getImage() throws IOException + { + return getImage(null, 1); + } + + /** + * {@inheritDoc} + */ + @Override + public BufferedImage getImage(Rectangle region, int subsampling) throws IOException + { + if (region == null && subsampling == cachedImageSubsampling && cachedImage != null) + { + BufferedImage cached = cachedImage.get(); + if (cached != null) + { + return cached; + } + } + // get image as RGB + BufferedImage image = SampledImageReader.getRGBImage(this, region, subsampling, getColorKeyMask()); + + // soft mask (overrides explicit mask) + PDImageXObject softMask = getSoftMask(); + if (softMask != null) + { + float[] matte = extractMatte(softMask); + image = applyMask(image, softMask.getOpaqueImage(), true, matte); + } + else + { + // explicit mask - to be applied only if /ImageMask true + PDImageXObject mask = getMask(); + if (mask != null && mask.isStencil()) + { + image = applyMask(image, mask.getOpaqueImage(), false, null); + } + } + + if (region == null && subsampling <= cachedImageSubsampling) + { + // only cache full-image renders, and prefer lower subsampling frequency, as lower + // subsampling means higher quality and longer render times. + cachedImageSubsampling = subsampling; + cachedImage = new SoftReference<>(image); + } + + return image; + } + + private float[] extractMatte(PDImageXObject softMask) throws IOException + { + COSBase base = softMask.getCOSObject().getItem(COSName.MATTE); + float[] matte = null; + if (base instanceof COSArray) + { + // PDFBOX-4267: process /Matte + // see PDF specification 1.7, 11.6.5.3 Soft-Mask Images + matte = ((COSArray) base).toFloatArray(); + // convert to RGB + matte = getColorSpace().toRGB(matte); + } + return matte; + } + + /** + * {@inheritDoc} + * The returned images are not cached. + */ + @Override + public BufferedImage getStencilImage(Paint paint) throws IOException + { + if (!isStencil()) + { + throw new IllegalStateException("Image is not a stencil"); + } + return SampledImageReader.getStencilImage(this, paint); + } + + /** + * Returns an RGB buffered image containing the opaque image stream without any masks applied. + * If this Image XObject is a mask then the buffered image will contain the raw mask. + * @return the image without any masks applied + * @throws IOException if the image cannot be read + */ + public BufferedImage getOpaqueImage() throws IOException + { + return SampledImageReader.getRGBImage(this, null); + } + + // explicit mask: RGB + Binary -> ARGB + // soft mask: RGB + Gray -> ARGB + private BufferedImage applyMask(BufferedImage image, BufferedImage mask, + boolean isSoft, float[] matte) + throws IOException + { + if (mask == null) + { + return image; + } + + int width = image.getWidth(); + int height = image.getHeight(); + + // scale mask to fit image, or image to fit mask, whichever is larger + if (mask.getWidth() < width || mask.getHeight() < height) + { + mask = scaleImage(mask, width, height); + } + else if (mask.getWidth() > width || mask.getHeight() > height) + { + width = mask.getWidth(); + height = mask.getHeight(); + image = scaleImage(image, width, height); + } + else if (image.getRaster().getPixel(0, 0, (int[]) null).length < 3) + { + // PDFBOX-4470 bitonal image has only one element => copy into RGB + image = scaleImage(image, width, height); + } + + // compose to ARGB + BufferedImage masked = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + WritableRaster src = image.getRaster(); + WritableRaster dest = masked.getRaster(); + WritableRaster alpha = mask.getRaster(); + + float[] rgb = new float[4]; + float[] rgba = new float[4]; + float[] alphaPixel = null; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + src.getPixel(x, y, rgb); + + rgba[0] = rgb[0]; + rgba[1] = rgb[1]; + rgba[2] = rgb[2]; + + alphaPixel = alpha.getPixel(x, y, alphaPixel); + if (isSoft) + { + rgba[3] = alphaPixel[0]; + if (matte != null && Float.compare(alphaPixel[0], 0) != 0) + { + rgba[0] = clampColor(((rgba[0] / 255 - matte[0]) / (alphaPixel[0] / 255) + matte[0]) * 255); + rgba[1] = clampColor(((rgba[1] / 255 - matte[1]) / (alphaPixel[0] / 255) + matte[1]) * 255); + rgba[2] = clampColor(((rgba[2] / 255 - matte[2]) / (alphaPixel[0] / 255) + matte[2]) * 255); + } + } + else + { + rgba[3] = 255 - alphaPixel[0]; + } + + dest.setPixel(x, y, rgba); + } + } + + return masked; + } + + private float clampColor(float color) + { + return color < 0 ? 0 : (color > 255 ? 255 : color); + } + + /** + * High-quality image scaling. + */ + private BufferedImage scaleImage(BufferedImage image, int width, int height) + { + BufferedImage image2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + Graphics2D g = image2.createGraphics(); + if (getInterpolate()) + { + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BICUBIC); + g.setRenderingHint(RenderingHints.KEY_RENDERING, + RenderingHints.VALUE_RENDER_QUALITY); + } + g.drawImage(image, 0, 0, width, height, 0, 0, image.getWidth(), image.getHeight(), null); + g.dispose(); + return image2; + } + + /** + * Returns the Mask Image XObject associated with this image, or null if there is none. + * @return Mask Image XObject + * @throws java.io.IOException + */ + public PDImageXObject getMask() throws IOException + { + COSBase mask = getCOSObject().getDictionaryObject(COSName.MASK); + if (mask instanceof COSArray) + { + // color key mask, no explicit mask to return + return null; + } + else + { + COSStream cosStream = getCOSObject().getCOSStream(COSName.MASK); + if (cosStream != null) + { + // always DeviceGray + return new PDImageXObject(new PDStream(cosStream), null); + } + return null; + } + } + + /** + * Returns the color key mask array associated with this image, or null if there is none. + * @return Mask Image XObject + */ + public COSArray getColorKeyMask() + { + COSBase mask = getCOSObject().getDictionaryObject(COSName.MASK); + if (mask instanceof COSArray) + { + return (COSArray)mask; + } + return null; + } + + /** + * Returns the Soft Mask Image XObject associated with this image, or null if there is none. + * @return the SMask Image XObject, or null. + * @throws java.io.IOException + */ + public PDImageXObject getSoftMask() throws IOException + { + COSStream cosStream = getCOSObject().getCOSStream(COSName.SMASK); + if (cosStream != null) + { + // always DeviceGray + return new PDImageXObject(new PDStream(cosStream), null); + } + return null; + } + + @Override + public int getBitsPerComponent() + { + if (isStencil()) + { + return 1; + } + else + { + return getCOSObject().getInt(COSName.BITS_PER_COMPONENT, COSName.BPC); + } + } + + @Override + public void setBitsPerComponent(int bpc) + { + getCOSObject().setInt(COSName.BITS_PER_COMPONENT, bpc); + } + + @Override + public PDColorSpace getColorSpace() throws IOException + { + if (colorSpace == null) + { + COSBase cosBase = getCOSObject().getItem(COSName.COLORSPACE, COSName.CS); + if (cosBase != null) + { + COSObject indirect = null; + if (cosBase instanceof COSObject && + resources != null && resources.getResourceCache() != null) + { + // PDFBOX-4022: use the resource cache because several images + // might have the same colorspace indirect object. + indirect = (COSObject) cosBase; + colorSpace = resources.getResourceCache().getColorSpace(indirect); + if (colorSpace != null) + { + return colorSpace; + } + } + colorSpace = PDColorSpace.create(cosBase, resources); + if (indirect != null) + { + resources.getResourceCache().put(indirect, colorSpace); + } + } + else if (isStencil()) + { + // stencil mask color space must be gray, it is often missing + return PDDeviceGray.INSTANCE; + } + else + { + // an image without a color space is always broken + throw new IOException("could not determine color space"); + } + } + return colorSpace; + } + + @Override + public InputStream createInputStream() throws IOException + { + return getStream().createInputStream(); + } + + @Override + public InputStream createInputStream(DecodeOptions options) throws IOException + { + return getStream().createInputStream(options); + } + + @Override + public InputStream createInputStream(List stopFilters) throws IOException + { + return getStream().createInputStream(stopFilters); + } + + @Override + public boolean isEmpty() + { + return getStream().getCOSObject().getLength() == 0; + } + + @Override + public void setColorSpace(PDColorSpace cs) + { + getCOSObject().setItem(COSName.COLORSPACE, cs != null ? cs.getCOSObject() : null); + } + + @Override + public int getHeight() + { + return getCOSObject().getInt(COSName.HEIGHT); + } + + @Override + public void setHeight(int h) + { + getCOSObject().setInt(COSName.HEIGHT, h); + } + + @Override + public int getWidth() + { + return getCOSObject().getInt(COSName.WIDTH); + } + + @Override + public void setWidth(int w) + { + getCOSObject().setInt(COSName.WIDTH, w); + } + + @Override + public boolean getInterpolate() + { + return getCOSObject().getBoolean(COSName.INTERPOLATE, false); + } + + @Override + public void setInterpolate(boolean value) + { + getCOSObject().setBoolean(COSName.INTERPOLATE, value); + } + + @Override + public void setDecode(COSArray decode) + { + getCOSObject().setItem(COSName.DECODE, decode); + } + + @Override + public COSArray getDecode() + { + COSBase decode = getCOSObject().getDictionaryObject(COSName.DECODE); + if (decode instanceof COSArray) + { + return (COSArray) decode; + } + return null; + } + + @Override + public boolean isStencil() + { + return getCOSObject().getBoolean(COSName.IMAGE_MASK, false); + } + + @Override + public void setStencil(boolean isStencil) + { + getCOSObject().setBoolean(COSName.IMAGE_MASK, isStencil); + } + + /** + * This will get the suffix for this image type, e.g. jpg/png. + * @return The image suffix or null if not available. + */ + @Override + public String getSuffix() + { + List filters = getStream().getFilters(); + + if (filters == null) + { + return "png"; + } + else if (filters.contains(COSName.DCT_DECODE)) + { + return "jpg"; + } + else if (filters.contains(COSName.JPX_DECODE)) + { + return "jpx"; + } + else if (filters.contains(COSName.CCITTFAX_DECODE)) + { + return "tiff"; + } + else if (filters.contains(COSName.FLATE_DECODE) + || filters.contains(COSName.LZW_DECODE) + || filters.contains(COSName.RUN_LENGTH_DECODE)) + { + return "png"; + } + else if (filters.contains(COSName.JBIG2_DECODE)) + { + return "jb2"; + } + else + { + LOG.warn("getSuffix() returns null, filters: " + filters); + return null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java new file mode 100644 index 00000000000..37f467e6a89 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java @@ -0,0 +1,379 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Paint; +import java.awt.Rectangle; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.filter.DecodeResult; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; + +/** + * An inline image object which uses a special syntax to express the data for a + * small image directly within the content stream. + * + * @author Ben Litchfield + * @author John Hewson + */ +public final class PDInlineImage implements PDImage +{ + // image parameters + private final COSDictionary parameters; + + // the current resources, contains named color spaces + private final PDResources resources; + + // image data + private final byte[] rawData; + private final byte[] decodedData; + + /** + * Creates an inline image from the given parameters and data. + * + * @param parameters the image parameters + * @param data the image data + * @param resources the current resources + * @throws IOException if the stream cannot be decoded + */ + public PDInlineImage(COSDictionary parameters, byte[] data, PDResources resources) + throws IOException + { + this.parameters = parameters; + this.resources = resources; + this.rawData = data; + + DecodeResult decodeResult = null; + List filters = getFilters(); + if (filters == null || filters.isEmpty()) + { + this.decodedData = data; + } + else + { + ByteArrayInputStream in = new ByteArrayInputStream(data); + ByteArrayOutputStream out = new ByteArrayOutputStream(data.length); + for (int i = 0; i < filters.size(); i++) + { + // TODO handling of abbreviated names belongs here, rather than in other classes + out.reset(); + Filter filter = FilterFactory.INSTANCE.getFilter(filters.get(i)); + decodeResult = filter.decode(in, out, parameters, i); + in = new ByteArrayInputStream(out.toByteArray()); + } + this.decodedData = out.toByteArray(); + } + + // repair parameters + if (decodeResult != null) + { + parameters.addAll(decodeResult.getParameters()); + } + } + + @Override + public COSBase getCOSObject() + { + return parameters; + } + + @Override + public int getBitsPerComponent() + { + if (isStencil()) + { + return 1; + } + else + { + return parameters.getInt(COSName.BPC, COSName.BITS_PER_COMPONENT, -1); + } + } + + @Override + public void setBitsPerComponent(int bitsPerComponent) + { + parameters.setInt(COSName.BPC, bitsPerComponent); + } + + @Override + public PDColorSpace getColorSpace() throws IOException + { + COSBase cs = parameters.getDictionaryObject(COSName.CS, COSName.COLORSPACE); + if (cs != null) + { + return createColorSpace(cs); + } + else if (isStencil()) + { + // stencil mask color space must be gray, it is often missing + return PDDeviceGray.INSTANCE; + } + else + { + // an image without a color space is always broken + throw new IOException("could not determine inline image color space"); + } + } + + // deliver the long name of a device colorspace, or the parameter + private COSBase toLongName(COSBase cs) + { + if (COSName.RGB.equals(cs)) + { + return COSName.DEVICERGB; + } + if (COSName.CMYK.equals(cs)) + { + return COSName.DEVICECMYK; + } + if (COSName.G.equals(cs)) + { + return COSName.DEVICEGRAY; + } + return cs; + } + + private PDColorSpace createColorSpace(COSBase cs) throws IOException + { + if (cs instanceof COSName) + { + return PDColorSpace.create(toLongName(cs), resources); + } + + if (cs instanceof COSArray && ((COSArray) cs).size() > 1) + { + COSArray srcArray = (COSArray) cs; + COSBase csType = srcArray.get(0); + if (COSName.I.equals(csType) || COSName.INDEXED.equals(csType)) + { + COSArray dstArray = new COSArray(); + dstArray.addAll(srcArray); + dstArray.set(0, COSName.INDEXED); + dstArray.set(1, toLongName(srcArray.get(1))); + return PDColorSpace.create(dstArray, resources); + } + + throw new IOException("Illegal type of inline image color space: " + csType); + } + + throw new IOException("Illegal type of object for inline image color space: " + cs); + } + + @Override + public void setColorSpace(PDColorSpace colorSpace) + { + COSBase base = null; + if (colorSpace != null) + { + base = colorSpace.getCOSObject(); + } + parameters.setItem(COSName.CS, base); + } + + @Override + public int getHeight() + { + return parameters.getInt(COSName.H, COSName.HEIGHT, -1); + } + + @Override + public void setHeight(int height) + { + parameters.setInt(COSName.H, height); + } + + @Override + public int getWidth() + { + return parameters.getInt(COSName.W, COSName.WIDTH, -1); + } + + @Override + public void setWidth(int width) + { + parameters.setInt(COSName.W, width); + } + + @Override + public boolean getInterpolate() + { + return parameters.getBoolean(COSName.I, COSName.INTERPOLATE, false); + } + + @Override + public void setInterpolate(boolean value) + { + parameters.setBoolean(COSName.I, value); + } + + /** + * Returns a list of filters applied to this stream, or null if there are none. + * + * @return a list of filters applied to this stream + */ + // TODO return an empty list if there are none? + public List getFilters() + { + List names = null; + COSBase filters = parameters.getDictionaryObject(COSName.F, COSName.FILTER); + if (filters instanceof COSName) + { + COSName name = (COSName) filters; + names = new COSArrayList<>(name.getName(), name, parameters, COSName.FILTER); + } + else if (filters instanceof COSArray) + { + names = COSArrayList.convertCOSNameCOSArrayToList((COSArray) filters); + } + return names; + } + + /** + * Sets which filters are applied to this stream. + * + * @param filters the filters to apply to this stream. + */ + public void setFilters(List filters) + { + COSBase obj = COSArrayList.convertStringListToCOSNameCOSArray(filters); + parameters.setItem(COSName.F, obj); + } + + @Override + public void setDecode(COSArray decode) + { + parameters.setItem(COSName.D, decode); + } + + @Override + public COSArray getDecode() + { + return (COSArray) parameters.getDictionaryObject(COSName.D, COSName.DECODE); + } + + @Override + public boolean isStencil() + { + return parameters.getBoolean(COSName.IM, COSName.IMAGE_MASK, false); + } + + @Override + public void setStencil(boolean isStencil) + { + parameters.setBoolean(COSName.IM, isStencil); + } + + @Override + public InputStream createInputStream() throws IOException + { + return new ByteArrayInputStream(decodedData); + } + + @Override + public InputStream createInputStream(DecodeOptions options) throws IOException + { + // Decode options are irrelevant for inline image, as the data is always buffered. + return createInputStream(); + } + + @Override + public InputStream createInputStream(List stopFilters) throws IOException + { + List filters = getFilters(); + ByteArrayInputStream in = new ByteArrayInputStream(rawData); + ByteArrayOutputStream out = new ByteArrayOutputStream(rawData.length); + for (int i = 0; filters != null && i < filters.size(); i++) + { + // TODO handling of abbreviated names belongs here, rather than in other classes + out.reset(); + if (stopFilters.contains(filters.get(i))) + { + break; + } + else + { + Filter filter = FilterFactory.INSTANCE.getFilter(filters.get(i)); + filter.decode(in, out, parameters, i); + in = new ByteArrayInputStream(out.toByteArray()); + } + } + return new ByteArrayInputStream(out.toByteArray()); + } + + @Override + public boolean isEmpty() + { + return decodedData.length == 0; + } + + /** + * Returns the inline image data. + */ + public byte[] getData() + { + return decodedData; + } + + @Override + public BufferedImage getImage() throws IOException + { + return SampledImageReader.getRGBImage(this, null); + } + + @Override + public BufferedImage getImage(Rectangle region, int subsampling) throws IOException + { + return SampledImageReader.getRGBImage(this, region, subsampling, null); + } + + @Override + public BufferedImage getStencilImage(Paint paint) throws IOException + { + if (!isStencil()) + { + throw new IllegalStateException("Image is not a stencil"); + } + return SampledImageReader.getStencilImage(this, paint); + } + + /** + * Returns the suffix for this image type, e.g. jpg/png. + * + * @return The image suffix. + */ + @Override + public String getSuffix() + { + // TODO implement me + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java new file mode 100644 index 00000000000..46efd3c030a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java @@ -0,0 +1,650 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.filter.DecodeOptions; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDIndexed; + +/** + * Reads a sampled image from a PDF file. + * @author John Hewson + */ +final class SampledImageReader +{ + private static final Log LOG = LogFactory.getLog(SampledImageReader.class); + + private SampledImageReader() + { + } + + /** + * Returns an ARGB image filled with the given paint and using the given image as a mask. + * @param paint the paint to fill the visible portions of the image with + * @return a masked image filled with the given paint + * @throws IOException if the image cannot be read + * @throws IllegalStateException if the image is not a stencil. + */ + public static BufferedImage getStencilImage(PDImage pdImage, Paint paint) throws IOException + { + int width = pdImage.getWidth(); + int height = pdImage.getHeight(); + + // compose to ARGB + BufferedImage masked = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = masked.createGraphics(); + + // draw the mask + //g.drawImage(mask, 0, 0, null); + + // fill with paint using src-in + //g.setComposite(AlphaComposite.SrcIn); + g.setPaint(paint); + g.fillRect(0, 0, width, height); + g.dispose(); + + // set the alpha + WritableRaster raster = masked.getRaster(); + + final int[] transparent = new int[4]; + + // avoid getting a BufferedImage for the mask to lessen memory footprint. + // Such masks are always bpc=1 and have no colorspace, but have a decode. + // (see 8.9.6.2 Stencil Masking) + try (InputStream iis = pdImage.createInputStream()) + { + final float[] decode = getDecodeArray(pdImage); + int value = decode[0] < decode[1] ? 1 : 0; + int rowLen = width / 8; + if (width % 8 > 0) + { + rowLen++; + } + byte[] buff = new byte[rowLen]; + for (int y = 0; y < height; y++) + { + int x = 0; + int readLen = iis.read(buff); + for (int r = 0; r < rowLen && r < readLen; r++) + { + int byteValue = buff[r]; + int mask = 128; + int shift = 7; + for (int i = 0; i < 8; i++) + { + int bit = (byteValue & mask) >> shift; + mask >>= 1; + --shift; + if (bit == value) + { + raster.setPixel(x, y, transparent); + } + x++; + if (x == width) + { + break; + } + } + } + if (readLen != rowLen) + { + LOG.warn("premature EOF, image will be incomplete"); + break; + } + } + } + + return masked; + } + + /** + * Returns the content of the given image as an AWT buffered image with an RGB color space. + * If a color key mask is provided then an ARGB image is returned instead. + * This method never returns null. + * @param pdImage the image to read + * @param colorKey an optional color key mask + * @return content of this image as an RGB buffered image + * @throws IOException if the image cannot be read + */ + public static BufferedImage getRGBImage(PDImage pdImage, COSArray colorKey) throws IOException + { + return getRGBImage(pdImage, null, 1, colorKey); + } + + private static Rectangle clipRegion(PDImage pdImage, Rectangle region) + { + if (region == null) + { + return new Rectangle(0, 0, pdImage.getWidth(), pdImage.getHeight()); + } + else + { + int x = Math.max(0, region.x); + int y = Math.max(0, region.y); + int width = Math.min(region.width, pdImage.getWidth() - x); + int height = Math.min(region.height, pdImage.getHeight() - y); + return new Rectangle(x, y, width, height); + } + } + + /** + * Returns the content of the given image as an AWT buffered image with an RGB color space. + * If a color key mask is provided then an ARGB image is returned instead. + * This method never returns null. + * @param pdImage the image to read + * @param region The region of the source image to get, or null if the entire image is needed. + * The actual region will be clipped to the dimensions of the source image. + * @param subsampling The amount of rows and columns to advance for every output pixel, a value + * of 1 meaning every pixel will be read. It must not be larger than the image width or height. + * @param colorKey an optional color key mask + * @return content of this image as an (A)RGB buffered image + * @throws IOException if the image cannot be read + */ + public static BufferedImage getRGBImage(PDImage pdImage, Rectangle region, int subsampling, + COSArray colorKey) throws IOException + { + if (pdImage.isEmpty()) + { + throw new IOException("Image stream is empty"); + } + Rectangle clipped = clipRegion(pdImage, region); + + // get parameters, they must be valid or have been repaired + final PDColorSpace colorSpace = pdImage.getColorSpace(); + final int numComponents = colorSpace.getNumberOfComponents(); + final int width = (int) Math.ceil(clipped.getWidth() / subsampling); + final int height = (int) Math.ceil(clipped.getHeight() / subsampling); + final int bitsPerComponent = pdImage.getBitsPerComponent(); + final float[] decode = getDecodeArray(pdImage); + + if (width <= 0 || height <= 0 || pdImage.getWidth() <= 0 || pdImage.getHeight() <= 0) + { + throw new IOException("image width and height must be positive"); + } + + try + { + if (bitsPerComponent == 1 && colorKey == null && numComponents == 1) + { + return from1Bit(pdImage, clipped, subsampling, width, height); + } + + // An AWT raster must use 8/16/32 bits per component. Images with < 8bpc + // will be unpacked into a byte-backed raster. Images with 16bpc will be reduced + // in depth to 8bpc as they will be drawn to TYPE_INT_RGB images anyway. All code + // in PDColorSpace#toRGBImage expects an 8-bit range, i.e. 0-255. + // Interleaved raster allows chunk-copying for 8-bit images. + WritableRaster raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, + numComponents, new Point(0, 0)); + final float[] defaultDecode = pdImage.getColorSpace().getDefaultDecode(8); + if (bitsPerComponent == 8 && Arrays.equals(decode, defaultDecode) && colorKey == null) + { + // convert image, faster path for non-decoded, non-colormasked 8-bit images + return from8bit(pdImage, raster, clipped, subsampling, width, height); + } + return fromAny(pdImage, raster, colorKey, clipped, subsampling, width, height); + } + catch (NegativeArraySizeException ex) + { + throw new IOException(ex); + } + } + + private static BufferedImage from1Bit(PDImage pdImage, Rectangle clipped, final int subsampling, + final int width, final int height) throws IOException + { + int currentSubsampling = subsampling; + final PDColorSpace colorSpace = pdImage.getColorSpace(); + final float[] decode = getDecodeArray(pdImage); + BufferedImage bim = null; + WritableRaster raster; + byte[] output; + + DecodeOptions options = new DecodeOptions(currentSubsampling); + options.setSourceRegion(clipped); + // read bit stream + try (InputStream iis = pdImage.createInputStream(options)) + { + final int inputWidth; + final int startx; + final int starty; + final int scanWidth; + final int scanHeight; + if (options.isFilterSubsampled()) + { + // Decode options were honored, and so there is no need for additional clipping or subsampling + inputWidth = width; + startx = 0; + starty = 0; + scanWidth = width; + scanHeight = height; + currentSubsampling = 1; + } + else + { + // Decode options not honored, so we need to clip and subsample ourselves. + inputWidth = pdImage.getWidth(); + startx = clipped.x; + starty = clipped.y; + scanWidth = clipped.width; + scanHeight = clipped.height; + } + if (colorSpace instanceof PDDeviceGray) + { + // TYPE_BYTE_GRAY and not TYPE_BYTE_BINARY because this one is handled + // without conversion to RGB by Graphics.drawImage + // this reduces the memory footprint, only one byte per pixel instead of three. + bim = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); + raster = bim.getRaster(); + } + else + { + raster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE, width, height, 1, new Point(0, 0)); + } + output = ((DataBufferByte) raster.getDataBuffer()).getData(); + final boolean isIndexed = colorSpace instanceof PDIndexed; + + int rowLen = inputWidth / 8; + if (inputWidth % 8 > 0) + { + rowLen++; + } + + // read stream + byte value0; + byte value1; + if (isIndexed || decode[0] < decode[1]) + { + value0 = 0; + value1 = (byte) 255; + } + else + { + value0 = (byte) 255; + value1 = 0; + } + byte[] buff = new byte[rowLen]; + int idx = 0; + for (int y = 0; y < starty + scanHeight; y++) + { + int x = 0; + int readLen = iis.read(buff); + if (y < starty || y % currentSubsampling > 0) + { + continue; + } + for (int r = 0; r < rowLen && r < readLen; r++) + { + int value = buff[r]; + int mask = 128; + for (int i = 0; i < 8; i++) + { + if (x >= startx + scanWidth) + { + break; + } + int bit = value & mask; + mask >>= 1; + if (x >= startx && x % currentSubsampling == 0) + { + output[idx++] = bit == 0 ? value0 : value1; + } + x++; + } + } + if (readLen != rowLen) + { + LOG.warn("premature EOF, image will be incomplete"); + break; + } + } + + if (bim != null) + { + return bim; + } + + // use the color space to convert the image to RGB + return colorSpace.toRGBImage(raster); + } + } + + // faster, 8-bit non-decoded, non-colormasked image conversion + private static BufferedImage from8bit(PDImage pdImage, WritableRaster raster, Rectangle clipped, final int subsampling, + final int width, final int height) throws IOException + { + int currentSubsampling = subsampling; + DecodeOptions options = new DecodeOptions(currentSubsampling); + options.setSourceRegion(clipped); + try (InputStream input = pdImage.createInputStream(options)) + { + final int inputWidth; + final int startx; + final int starty; + final int scanWidth; + final int scanHeight; + if (options.isFilterSubsampled()) + { + // Decode options were honored, and so there is no need for additional clipping or subsampling + inputWidth = width; + startx = 0; + starty = 0; + scanWidth = width; + scanHeight = height; + currentSubsampling = 1; + } + else + { + // Decode options not honored, so we need to clip and subsample ourselves. + inputWidth = pdImage.getWidth(); + startx = clipped.x; + starty = clipped.y; + scanWidth = clipped.width; + scanHeight = clipped.height; + } + final int numComponents = pdImage.getColorSpace().getNumberOfComponents(); + // get the raster's underlying byte buffer + byte[] bank = ((DataBufferByte) raster.getDataBuffer()).getData(); + if (startx == 0 && starty == 0 && scanWidth == width && scanHeight == height && currentSubsampling == 1) + { + // we just need to copy all sample data, then convert to RGB image. + long inputResult = input.read(bank); + if (Long.compare(inputResult, width * height * (long) numComponents) != 0) + { + LOG.debug("Tried reading " + width * height * (long) numComponents + " bytes but only " + inputResult + " bytes read"); + } + return pdImage.getColorSpace().toRGBImage(raster); + } + + // either subsampling is required, or reading only part of the image, so its + // not possible to blindly copy all data. + byte[] tempBytes = new byte[numComponents * inputWidth]; + // compromise between memory and time usage: + // reading the whole image consumes too much memory + // reading one pixel at a time makes it slow in our buffering infrastructure + int i = 0; + for (int y = 0; y < starty + scanHeight; ++y) + { + long inputResult = input.read(tempBytes); + + if (Long.compare(inputResult, tempBytes.length) != 0) + { + LOG.debug("Tried reading " + tempBytes.length + " bytes but only " + inputResult + " bytes read"); + } + + if (y < starty || y % currentSubsampling > 0) + { + continue; + } + + if (currentSubsampling == 1) + { + // Not the entire region was requested, but if no subsampling should + // be performed, we can still copy the entire part of this row + System.arraycopy(tempBytes, startx * numComponents, bank, y * inputWidth * numComponents, scanWidth * numComponents); + } + else + { + for (int x = startx; x < startx + scanWidth; x += currentSubsampling) + { + for (int c = 0; c < numComponents; c++) + { + bank[i] = tempBytes[x * numComponents + c]; + ++i; + } + } + } + } + // use the color space to convert the image to RGB + return pdImage.getColorSpace().toRGBImage(raster); + } + } + + // slower, general-purpose image conversion from any image format + private static BufferedImage fromAny(PDImage pdImage, WritableRaster raster, COSArray colorKey, Rectangle clipped, + final int subsampling, final int width, final int height) + throws IOException + { + int currentSubsampling = subsampling; + final PDColorSpace colorSpace = pdImage.getColorSpace(); + final int numComponents = colorSpace.getNumberOfComponents(); + final int bitsPerComponent = pdImage.getBitsPerComponent(); + final float[] decode = getDecodeArray(pdImage); + + DecodeOptions options = new DecodeOptions(currentSubsampling); + options.setSourceRegion(clipped); + // read bit stream + try (ImageInputStream iis = new MemoryCacheImageInputStream(pdImage.createInputStream(options))) + { + final int inputWidth; + final int startx; + final int starty; + final int scanWidth; + final int scanHeight; + if (options.isFilterSubsampled()) + { + // Decode options were honored, and so there is no need for additional clipping or subsampling + inputWidth = width; + startx = 0; + starty = 0; + scanWidth = width; + scanHeight = height; + currentSubsampling = 1; + } + else + { + // Decode options not honored, so we need to clip and subsample ourselves. + inputWidth = pdImage.getWidth(); + startx = clipped.x; + starty = clipped.y; + scanWidth = clipped.width; + scanHeight = clipped.height; + } + final float sampleMax = (float) Math.pow(2, bitsPerComponent) - 1f; + final boolean isIndexed = colorSpace instanceof PDIndexed; + + // init color key mask + float[] colorKeyRanges = null; + BufferedImage colorKeyMask = null; + if (colorKey != null) + { + colorKeyRanges = colorKey.toFloatArray(); + colorKeyMask = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); + } + + // calculate row padding + int padding = 0; + if (inputWidth * numComponents * bitsPerComponent % 8 > 0) + { + padding = 8 - (inputWidth * numComponents * bitsPerComponent % 8); + } + + // read stream + byte[] srcColorValues = new byte[numComponents]; + byte[] alpha = new byte[1]; + for (int y = 0; y < starty + scanHeight; y++) + { + for (int x = 0; x < startx + scanWidth; x++) + { + boolean isMasked = true; + for (int c = 0; c < numComponents; c++) + { + int value = (int)iis.readBits(bitsPerComponent); + + // color key mask requires values before they are decoded + if (colorKeyRanges != null) + { + isMasked &= value >= colorKeyRanges[c * 2] && + value <= colorKeyRanges[c * 2 + 1]; + } + + // decode array + final float dMin = decode[c * 2]; + final float dMax = decode[(c * 2) + 1]; + + // interpolate to domain + float output = dMin + (value * ((dMax - dMin) / sampleMax)); + + if (isIndexed) + { + // indexed color spaces get the raw value, because the TYPE_BYTE + // below cannot be reversed by the color space without it having + // knowledge of the number of bits per component + srcColorValues[c] = (byte)Math.round(output); + } + else + { + // interpolate to TYPE_BYTE + int outputByte = Math.round(((output - Math.min(dMin, dMax)) / + Math.abs(dMax - dMin)) * 255f); + + srcColorValues[c] = (byte)outputByte; + } + } + // only write to output if within requested region and subsample. + if (x >= startx && y >= starty && x % currentSubsampling == 0 && y % currentSubsampling == 0) + { + raster.setDataElements((x - startx) / currentSubsampling, (y - starty) / currentSubsampling, srcColorValues); + + // set alpha channel in color key mask, if any + if (colorKeyMask != null) + { + alpha[0] = (byte)(isMasked ? 255 : 0); + colorKeyMask.getRaster().setDataElements((x - startx) / currentSubsampling, (y - starty) / currentSubsampling, alpha); + } + } + } + + // rows are padded to the nearest byte + iis.readBits(padding); + } + + // use the color space to convert the image to RGB + BufferedImage rgbImage = colorSpace.toRGBImage(raster); + + // apply color mask, if any + if (colorKeyMask != null) + { + return applyColorKeyMask(rgbImage, colorKeyMask); + } + else + { + return rgbImage; + } + } + } + + // color key mask: RGB + Binary -> ARGB + private static BufferedImage applyColorKeyMask(BufferedImage image, BufferedImage mask) + throws IOException + { + int width = image.getWidth(); + int height = image.getHeight(); + + // compose to ARGB + BufferedImage masked = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + + WritableRaster src = image.getRaster(); + WritableRaster dest = masked.getRaster(); + WritableRaster alpha = mask.getRaster(); + + float[] rgb = new float[3]; + float[] rgba = new float[4]; + float[] alphaPixel = null; + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + src.getPixel(x, y, rgb); + + rgba[0] = rgb[0]; + rgba[1] = rgb[1]; + rgba[2] = rgb[2]; + alphaPixel = alpha.getPixel(x, y, alphaPixel); + rgba[3] = 255 - alphaPixel[0]; + + dest.setPixel(x, y, rgba); + } + } + + return masked; + } + + // gets decode array from dictionary or returns default + private static float[] getDecodeArray(PDImage pdImage) throws IOException + { + final COSArray cosDecode = pdImage.getDecode(); + float[] decode = null; + + if (cosDecode != null) + { + int numberOfComponents = pdImage.getColorSpace().getNumberOfComponents(); + if (cosDecode.size() != numberOfComponents * 2) + { + if (pdImage.isStencil() && cosDecode.size() >= 2 + && cosDecode.get(0) instanceof COSNumber + && cosDecode.get(1) instanceof COSNumber) + { + float decode0 = ((COSNumber) cosDecode.get(0)).floatValue(); + float decode1 = ((COSNumber) cosDecode.get(1)).floatValue(); + if (decode0 >= 0 && decode0 <= 1 && decode1 >= 0 && decode1 <= 1) + { + LOG.warn("decode array " + cosDecode + + " not compatible with color space, using the first two entries"); + return new float[] + { + decode0, decode1 + }; + } + } + LOG.error("decode array " + cosDecode + + " not compatible with color space, using default"); + } + else + { + decode = cosDecode.toFloatArray(); + } + } + + // use color space default + if (decode == null) + { + return pdImage.getColorSpace().getDefaultDecode(pdImage.getBitsPerComponent()); + } + + return decode; + } +} diff --git a/src/org/pdfbox/pdmodel/graphics/xobject/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/graphics/xobject/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentGroup.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentGroup.java new file mode 100644 index 00000000000..dc9e634223b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentGroup.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.optionalcontent; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.rendering.RenderDestination; + +/** + * An optional content group (OCG). + */ +public class PDOptionalContentGroup extends PDPropertyList +{ + /** + * Creates a new optional content group (OCG). + * @param name the name of the content group + */ + public PDOptionalContentGroup(String name) + { + this.dict.setItem(COSName.TYPE, COSName.OCG); + setName(name); + } + + /** + * Creates a new instance based on a given {@link COSDictionary}. + * @param dict the dictionary + */ + public PDOptionalContentGroup(COSDictionary dict) + { + super(dict); + if (!dict.getItem(COSName.TYPE).equals(COSName.OCG)) + { + throw new IllegalArgumentException( + "Provided dictionary is not of type '" + COSName.OCG + "'"); + } + } + + /** + * Enumeration for the renderState dictionary entry on the "Export", "View" + * and "Print" dictionary. + */ + public enum RenderState + { + /** The "ON" value. */ + ON(COSName.ON), + /** The "OFF" value. */ + OFF(COSName.OFF); + + private final COSName name; + + private RenderState(COSName value) + { + this.name = value; + } + + /** + * Returns the base state represented by the given {@link COSName}. + * + * @param state the state name + * @return the state enum value + */ + public static RenderState valueOf(COSName state) + { + if (state == null) + { + return null; + } + + return RenderState.valueOf(state.getName().toUpperCase()); + } + + /** + * Returns the PDF name for the state. + * + * @return the name of the state + */ + public COSName getName() + { + return this.name; + } + } + + /** + * Returns the name of the optional content group. + * @return the name + */ + public String getName() + { + return dict.getString(COSName.NAME); + } + + /** + * Sets the name of the optional content group. + * @param name the name + */ + public final void setName(String name) + { + dict.setString(COSName.NAME, name); + } + + //TODO Add support for "Intent" + /** + * @param destination to be rendered + * @return state or null if undefined + */ + public RenderState getRenderState(RenderDestination destination) + { + COSName state = null; + COSDictionary usage = (COSDictionary) dict.getDictionaryObject("Usage"); + if (usage != null) + { + if (RenderDestination.PRINT.equals(destination)) + { + COSDictionary print = (COSDictionary) usage.getDictionaryObject("Print"); + state = print == null ? null : (COSName) print.getDictionaryObject("PrintState"); + } + else if (RenderDestination.VIEW.equals(destination)) + { + COSDictionary view = (COSDictionary) usage.getDictionaryObject("View"); + state = view == null ? null : (COSName) view.getDictionaryObject("ViewState"); + } + // Fallback to export + if (state == null) + { + COSDictionary export = (COSDictionary) usage.getDictionaryObject("Export"); + state = export == null ? null : (COSName) export.getDictionaryObject("ExportState"); + } + } + return state == null ? null : RenderState.valueOf(state); + } + + @Override + public String toString() + { + return super.toString() + " (" + getName() + ")"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentMembershipDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentMembershipDictionary.java new file mode 100644 index 00000000000..e8fe840e1bf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentMembershipDictionary.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.optionalcontent; + +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; + +/** + * An optional content membership dictionary (OCMD). + * + * @author Tilman Hausherr + */ +public class PDOptionalContentMembershipDictionary extends PDPropertyList +{ + /** + * Creates a new optional content membership dictionary (OCMD). + */ + public PDOptionalContentMembershipDictionary() + { + this.dict.setItem(COSName.TYPE, COSName.OCMD); + } + + /** + * Creates a new instance based on a given {@link COSDictionary}. + * @param dict the dictionary + */ + public PDOptionalContentMembershipDictionary(COSDictionary dict) + { + super(dict); + if (!dict.getItem(COSName.TYPE).equals(COSName.OCMD)) + { + throw new IllegalArgumentException( + "Provided dictionary is not of type '" + COSName.OCMD + "'"); + } + } + + /** + * Get a list of optional content groups. + * + * @return List of optional content groups, never null. + */ + public List getOCGs() + { + List list = new ArrayList<>(); + COSBase base = dict.getDictionaryObject(COSName.OCGS); + if (base instanceof COSDictionary) + { + list.add(PDPropertyList.create((COSDictionary) base)); + } + else if (base instanceof COSArray) + { + COSArray ar = (COSArray) base; + for (int i = 0; i < ar.size(); ++i) + { + COSBase elem = ar.getObject(i); + if (elem instanceof COSDictionary) + { + list.add(PDPropertyList.create((COSDictionary) elem)); + } + } + } + return list; + } + + /** + * Set optional content groups as a list. + * + * @param ocgs list of optional content groups to set. + */ + public void setOCGs(List ocgs) + { + COSArray ar = new COSArray(); + for (PDPropertyList prop : ocgs) + { + ar.add(prop); + } + dict.setItem(COSName.OCGS, ar); + } + + /** + * Get the visibility policy name. Valid names are AllOff, AllOn, AnyOff, AnyOn (default). + * + * @return the visibility policy, never null. + */ + public COSName getVisibilityPolicy() + { + return dict.getCOSName(COSName.P, COSName.ANY_ON); + } + + /** + * Sets the visibility policy name. Valid names are AllOff, AllOn, AnyOff, AnyOn (default). + * @param visibilityPolicy + */ + public void setVisibilityPolicy(COSName visibilityPolicy) + { + dict.setItem(COSName.P, visibilityPolicy); + } + + //TODO support /VE some day +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentProperties.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentProperties.java new file mode 100644 index 00000000000..a01b4b944d9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/optionalcontent/PDOptionalContentProperties.java @@ -0,0 +1,443 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.optionalcontent; + +import java.util.ArrayList; +import java.util.Collection; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class represents the optional content properties dictionary. + * + * @since PDF 1.5 + */ +public class PDOptionalContentProperties implements COSObjectable +{ + + /** + * Enumeration for the BaseState dictionary entry on the "D" dictionary. + */ + public enum BaseState + { + + /** The "ON" value. */ + ON(COSName.ON), + /** The "OFF" value. */ + OFF(COSName.OFF), + /** The "Unchanged" value. */ + UNCHANGED(COSName.UNCHANGED); + + private final COSName name; + + private BaseState(COSName value) + { + this.name = value; + } + + /** + * Returns the PDF name for the state. + * @return the name of the state + */ + public COSName getName() + { + return this.name; + } + + /** + * Returns the base state represented by the given {@link COSName}. + * @param state the state name + * @return the state enum value + */ + public static BaseState valueOf(COSName state) + { + if (state == null) + { + return BaseState.ON; + } + return BaseState.valueOf(state.getName().toUpperCase()); + } + + } + + private final COSDictionary dict; + + /** + * Creates a new optional content properties dictionary. + */ + public PDOptionalContentProperties() + { + this.dict = new COSDictionary(); + this.dict.setItem(COSName.OCGS, new COSArray()); + COSDictionary d = new COSDictionary(); + + // Name optional but required for PDF/A-3 + d.setString(COSName.NAME, "Top"); + + this.dict.setItem(COSName.D, d); + } + + /** + * Creates a new instance based on a given {@link COSDictionary}. + * @param props the dictionary + */ + public PDOptionalContentProperties(COSDictionary props) + { + this.dict = props; + } + + /** {@inheritDoc} */ + @Override + public COSBase getCOSObject() + { + return this.dict; + } + + private COSArray getOCGs() + { + COSArray ocgs = this.dict.getCOSArray(COSName.OCGS); + if (ocgs == null) + { + ocgs = new COSArray(); + this.dict.setItem(COSName.OCGS, ocgs); //OCGs is required + } + return ocgs; + } + + private COSDictionary getD() + { + COSBase base = this.dict.getDictionaryObject(COSName.D); + if (base instanceof COSDictionary) + { + return (COSDictionary) base; + } + + COSDictionary d = new COSDictionary(); + + // Name optional but required for PDF/A-3 + d.setString(COSName.NAME, "Top"); + + // D is required + this.dict.setItem(COSName.D, d); + + return d; + } + + /** + * Returns the first optional content group of the given name. + * + * @param name the group name + * @return the optional content group or null, if there is no such group + */ + public PDOptionalContentGroup getGroup(String name) + { + COSArray ocgs = getOCGs(); + for (COSBase o : ocgs) + { + COSDictionary ocg = toDictionary(o); + String groupName = ocg.getString(COSName.NAME); + if (groupName.equals(name)) + { + return new PDOptionalContentGroup(ocg); + } + } + return null; + } + + /** + * Adds an optional content group (OCG). + * @param ocg the optional content group + */ + public void addGroup(PDOptionalContentGroup ocg) + { + COSArray ocgs = getOCGs(); + ocgs.add(ocg.getCOSObject()); + + //By default, add new group to the "Order" entry so it appears in the user interface + COSArray order = (COSArray)getD().getDictionaryObject(COSName.ORDER); + if (order == null) + { + order = new COSArray(); + getD().setItem(COSName.ORDER, order); + } + order.add(ocg); + } + + /** + * Returns the collection of all optional content groups. + * @return the optional content groups + */ + public Collection getOptionalContentGroups() + { + Collection coll = new ArrayList<>(); + COSArray ocgs = getOCGs(); + for (COSBase base : ocgs) + { + coll.add(new PDOptionalContentGroup(toDictionary(base))); + } + return coll; + } + + /** + * Returns the base state for optional content groups. + * @return the base state + */ + public BaseState getBaseState() + { + COSDictionary d = getD(); + COSName name = (COSName)d.getItem(COSName.BASE_STATE); + return BaseState.valueOf(name); + } + + /** + * Sets the base state for optional content groups. + * @param state the base state + */ + public void setBaseState(BaseState state) + { + COSDictionary d = getD(); + d.setItem(COSName.BASE_STATE, state.getName()); + } + + /** + * Lists all optional content group names. + * @return an array of all names + */ + public String[] getGroupNames() + { + COSArray ocgs = (COSArray)dict.getDictionaryObject(COSName.OCGS); + int size = ocgs.size(); + String[] groups = new String[size]; + for (int i = 0; i < size; i++) + { + COSBase obj = ocgs.get(i); + COSDictionary ocg = toDictionary(obj); + groups[i] = ocg.getString(COSName.NAME); + } + return groups; + } + + /** + * Indicates whether a particular optional content group is found in the PDF file. + * @param groupName the group name + * @return true if the group exists, false otherwise + */ + public boolean hasGroup(String groupName) + { + String[] layers = getGroupNames(); + for (String layer : layers) + { + if (layer.equals(groupName)) + { + return true; + } + } + return false; + } + + /** + * Indicates whether at least one optional content group with this name is enabled. + * There may be disabled optional content groups with this name even if this function returns + * true. + * + * @param groupName the group name + * @return true if at least one group is enabled + */ + public boolean isGroupEnabled(String groupName) + { + boolean result = false; + COSArray ocgs = getOCGs(); + for (COSBase o : ocgs) + { + COSDictionary ocg = toDictionary(o); + String name = ocg.getString(COSName.NAME); + if (groupName.equals(name) && isGroupEnabled(new PDOptionalContentGroup(ocg))) + { + result = true; + } + } + return result; + } + + /** + * Indicates whether an optional content group is enabled. + * @param group the group object + * @return true if the group is enabled + */ + public boolean isGroupEnabled(PDOptionalContentGroup group) + { + //TODO handle Optional Content Configuration Dictionaries, + //i.e. OCProperties/Configs + + PDOptionalContentProperties.BaseState baseState = getBaseState(); + boolean enabled = !baseState.equals(BaseState.OFF); + //TODO What to do with BaseState.Unchanged? + + if (group == null) + { + return enabled; + } + + COSDictionary d = getD(); + COSBase base = d.getDictionaryObject(COSName.ON); + if (base instanceof COSArray) + { + for (COSBase o : (COSArray) base) + { + COSDictionary dictionary = toDictionary(o); + if (dictionary == group.getCOSObject()) + { + return true; + } + } + } + + base = d.getDictionaryObject(COSName.OFF); + if (base instanceof COSArray) + { + for (COSBase o : (COSArray) base) + { + COSDictionary dictionary = toDictionary(o); + if (dictionary == group.getCOSObject()) + { + return false; + } + } + } + + return enabled; + } + + private COSDictionary toDictionary(COSBase o) + { + if (o instanceof COSObject) + { + return (COSDictionary)((COSObject)o).getObject(); + } + else + { + return (COSDictionary)o; + } + } + + /** + * Enables or disables all optional content groups with the given name. + * + * @param groupName the group name + * @param enable true to enable, false to disable + * @return true if at least one group with this name already had an on or off setting, false + * otherwise + */ + public boolean setGroupEnabled(String groupName, boolean enable) + { + boolean result = false; + COSArray ocgs = getOCGs(); + for (COSBase o : ocgs) + { + COSDictionary ocg = toDictionary(o); + String name = ocg.getString(COSName.NAME); + if (groupName.equals(name) && setGroupEnabled(new PDOptionalContentGroup(ocg), enable)) + { + result = true; + } + } + return result; + } + + /** + * Enables or disables an optional content group. + * @param group the group object + * @param enable true to enable, false to disable + * @return true if the group already had an on or off setting, false otherwise + */ + public boolean setGroupEnabled(PDOptionalContentGroup group, boolean enable) + { + COSArray on; + COSArray off; + + COSDictionary d = getD(); + COSBase base = d.getDictionaryObject(COSName.ON); + if (!(base instanceof COSArray)) + { + on = new COSArray(); + d.setItem(COSName.ON, on); + } + else + { + on = (COSArray) base; + } + base = d.getDictionaryObject(COSName.OFF); + if (!(base instanceof COSArray)) + { + off = new COSArray(); + d.setItem(COSName.OFF, off); + } + else + { + off = (COSArray) base; + } + + boolean found = false; + if (enable) + { + for (COSBase o : off) + { + COSDictionary groupDictionary = toDictionary(o); + if (groupDictionary == group.getCOSObject()) + { + //enable group + off.remove(o); + on.add(o); + found = true; + break; + } + } + } + else + { + for (COSBase o : on) + { + COSDictionary groupDictionary = toDictionary(o); + if (groupDictionary == group.getCOSObject()) + { + //disable group + on.remove(o); + off.add(o); + found = true; + break; + } + } + } + if (!found) + { + if (enable) + { + on.add(group.getCOSObject()); + } + else + { + off.add(group.getCOSObject()); + } + } + return found; + } +} diff --git a/src/org/pdfbox/pdmodel/graphics/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/graphics/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDAbstractPattern.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDAbstractPattern.java new file mode 100644 index 00000000000..3a6ef00b694 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDAbstractPattern.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.pattern; + +import java.awt.geom.AffineTransform; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.util.Matrix; + +/** + * This class wraps a pattern dictionary. Patterns can be found in resource dictionaries. + */ +public abstract class PDAbstractPattern implements COSObjectable +{ + /** Tiling pattern type. */ + public static final int TYPE_TILING_PATTERN = 1; + + /** Shading pattern type. */ + public static final int TYPE_SHADING_PATTERN = 2; + + /** + * Create the correct PD Model pattern based on the COS base pattern. + * @param dictionary the COS pattern dictionary + * @return the newly created pattern object + * @throws IOException If we are unable to create the PDPattern object. + */ + public static PDAbstractPattern create(COSDictionary dictionary) throws IOException + { + PDAbstractPattern pattern; + int patternType = dictionary.getInt(COSName.PATTERN_TYPE, 0); + switch (patternType) + { + case TYPE_TILING_PATTERN: + pattern = new PDTilingPattern(dictionary); + break; + case TYPE_SHADING_PATTERN: + pattern = new PDShadingPattern(dictionary); + break; + default: + throw new IOException("Error: Unknown pattern type " + patternType); + } + return pattern; + } + + private final COSDictionary patternDictionary; + + /** + * Creates a new Pattern dictionary. + */ + public PDAbstractPattern() + { + patternDictionary = new COSDictionary(); + patternDictionary.setName(COSName.TYPE, COSName.PATTERN.getName()); + } + + /** + * Creates a new Pattern dictionary from the given COS dictionary. + * @param dictionary The COSDictionary for this pattern. + */ + public PDAbstractPattern(COSDictionary dictionary) + { + patternDictionary = dictionary; + } + + /** + * This will get the underlying dictionary. + * @return The dictionary for this pattern. + */ + @Override + public COSDictionary getCOSObject() + { + return patternDictionary; + } + + /** + * This will set the paint type. + * @param paintType The new paint type. + */ + public void setPaintType(int paintType) + { + patternDictionary.setInt(COSName.PAINT_TYPE, paintType); + } + + /** + * This will return the paint type. + * @return The type of object that this is. + */ + public String getType() + { + return COSName.PATTERN.getName(); + } + + /** + * This will set the pattern type. + * @param patternType The new pattern type. + */ + public void setPatternType(int patternType) + { + patternDictionary.setInt(COSName.PATTERN_TYPE, patternType); + } + + /** + * This will return the pattern type. + * @return The pattern type + */ + public abstract int getPatternType(); + + /** + * Returns the pattern matrix, or the identity matrix is none is available. + */ + public Matrix getMatrix() + { + return Matrix.createMatrix(getCOSObject().getDictionaryObject(COSName.MATRIX)); + } + + /** + * Sets the optional Matrix entry for the Pattern. + * @param transform the transformation matrix + */ + public void setMatrix(AffineTransform transform) + { + COSArray matrix = new COSArray(); + double[] values = new double[6]; + transform.getMatrix(values); + for (double v : values) + { + matrix.add(new COSFloat((float)v)); + } + getCOSObject().setItem(COSName.MATRIX, matrix); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPattern.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPattern.java new file mode 100644 index 00000000000..9f29a016477 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDShadingPattern.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.pattern; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBase; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; + +/** + * A shading pattern dictionary. + * + */ +public class PDShadingPattern extends PDAbstractPattern +{ + private PDExtendedGraphicsState extendedGraphicsState; + private PDShading shading; + + /** + * Creates a new shading pattern. + */ + public PDShadingPattern() + { + getCOSObject().setInt(COSName.PATTERN_TYPE, PDAbstractPattern.TYPE_SHADING_PATTERN); + } + + /** + * Creates a new shading pattern from the given COS dictionary. + * @param resourceDictionary The COSDictionary for this pattern resource. + */ + public PDShadingPattern(COSDictionary resourceDictionary) + { + super(resourceDictionary); + } + + @Override + public int getPatternType() + { + return PDAbstractPattern.TYPE_SHADING_PATTERN; + } + + /** + * This will get the external graphics state for this pattern. + * @return The extended graphics state for this pattern. + */ + public PDExtendedGraphicsState getExtendedGraphicsState() + { + if (extendedGraphicsState == null) + { + COSBase base = getCOSObject().getDictionaryObject(COSName.EXT_G_STATE); + if (base instanceof COSDictionary) + { + extendedGraphicsState = new PDExtendedGraphicsState((COSDictionary) base); + } + } + return extendedGraphicsState; + } + + /** + * This will set the external graphics state for this pattern. + * @param extendedGraphicsState The new extended graphics state for this pattern. + */ + public void setExtendedGraphicsState(PDExtendedGraphicsState extendedGraphicsState) + { + this.extendedGraphicsState = extendedGraphicsState; + getCOSObject().setItem(COSName.EXT_G_STATE, extendedGraphicsState); + } + + /** + * This will get the shading resources for this pattern. + * @return The shading resources for this pattern. + * @throws IOException if something went wrong + */ + public PDShading getShading() throws IOException + { + if (shading == null) + { + COSBase base = getCOSObject().getDictionaryObject(COSName.SHADING); + if (base instanceof COSDictionary) + { + shading = PDShading.create((COSDictionary) base); + } + } + return shading; + } + + /** + * This will set the shading resources for this pattern. + * @param shadingResources The new shading resources for this pattern. + */ + public void setShading( PDShading shadingResources ) + { + shading = shadingResources; + getCOSObject().setItem(COSName.SHADING, shadingResources); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java new file mode 100644 index 00000000000..c2d31d41ddc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java @@ -0,0 +1,229 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.pattern; + +import java.io.IOException; +import java.io.InputStream; +import org.apache.pdfbox.contentstream.PDContentStream; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; + +/** + * A tiling pattern dictionary. + * + */ +public class PDTilingPattern extends PDAbstractPattern implements PDContentStream +{ + /** paint type 1 = colored tiling pattern. */ + public static final int PAINT_COLORED = 1; + + /** paint type 2 = uncolored tiling pattern. */ + public static final int PAINT_UNCOLORED = 2; + + /** tiling type 1 = constant spacing.*/ + public static final int TILING_CONSTANT_SPACING = 1; + + /** tiling type 2 = no distortion. */ + public static final int TILING_NO_DISTORTION = 2; + + /** tiling type 3 = constant spacing and faster tiling. */ + public static final int TILING_CONSTANT_SPACING_FASTER_TILING = 3; + + /** + * Creates a new tiling pattern. + */ + public PDTilingPattern() + { + super(new COSStream()); + getCOSObject().setName(COSName.TYPE, COSName.PATTERN.getName()); + getCOSObject().setInt(COSName.PATTERN_TYPE, PDAbstractPattern.TYPE_TILING_PATTERN); + + // Resources required per PDF specification; when missing, pattern is not displayed in Adobe Reader + setResources(new PDResources()); + } + + /** + * Creates a new tiling pattern from the given COS dictionary. + * @param dictionary The COSDictionary for this pattern. + */ + public PDTilingPattern(COSDictionary dictionary) + { + super(dictionary); + } + + @Override + public int getPatternType() + { + return PDAbstractPattern.TYPE_TILING_PATTERN; + } + + /** + * This will set the paint type. + * @param paintType The new paint type. + */ + @Override + public void setPaintType(int paintType) + { + getCOSObject().setInt(COSName.PAINT_TYPE, paintType); + } + + /** + * This will return the paint type. + * @return The paint type + */ + public int getPaintType() + { + return getCOSObject().getInt( COSName.PAINT_TYPE, 0 ); + } + + /** + * This will set the tiling type. + * @param tilingType The new tiling type. + */ + public void setTilingType(int tilingType) + { + getCOSObject().setInt(COSName.TILING_TYPE, tilingType); + } + + /** + * This will return the tiling type. + * @return The tiling type + */ + public int getTilingType() + { + return getCOSObject().getInt( COSName.TILING_TYPE, 0 ); + } + + /** + * This will set the XStep value. + * @param xStep The new XStep value. + */ + public void setXStep(float xStep) + { + getCOSObject().setFloat(COSName.X_STEP, xStep); + } + + /** + * This will return the XStep value. + * @return The XStep value + */ + public float getXStep() + { + return getCOSObject().getFloat(COSName.X_STEP, 0); + } + + /** + * This will set the YStep value. + * @param yStep The new YStep value. + */ + public void setYStep(float yStep) + { + getCOSObject().setFloat(COSName.Y_STEP, yStep); + } + + /** + * This will return the YStep value. + * @return The YStep value + */ + public float getYStep() + { + return getCOSObject().getFloat(COSName.Y_STEP, 0); + } + + public PDStream getContentStream() + { + return new PDStream((COSStream)getCOSObject()); + } + + @Override + public InputStream getContents() throws IOException + { + COSDictionary dict = getCOSObject(); + if (dict instanceof COSStream) + { + return ((COSStream) getCOSObject()).createInputStream(); + } + return null; + } + + /** + * This will get the resources for this pattern. + * This will return null if no resources are available at this level. + * @return The resources for this pattern. + */ + @Override + public PDResources getResources() + { + PDResources retval = null; + COSBase base = getCOSObject().getDictionaryObject(COSName.RESOURCES); + if (base instanceof COSDictionary) + { + retval = new PDResources((COSDictionary) base); + } + return retval; + } + + /** + * This will set the resources for this pattern. + * @param resources The new resources for this pattern. + */ + public final void setResources( PDResources resources ) + { + getCOSObject().setItem(COSName.RESOURCES, resources); + } + + /** + * An array of four numbers in the form coordinate system (see + * below), giving the coordinates of the left, bottom, right, and top edges, + * respectively, of the pattern's bounding box. + * + * @return The BBox of the pattern. + */ + @Override + public PDRectangle getBBox() + { + PDRectangle retval = null; + COSBase base = getCOSObject().getDictionaryObject(COSName.BBOX); + if (base instanceof COSArray) + { + retval = new PDRectangle((COSArray) base); + } + return retval; + } + + /** + * This will set the BBox (bounding box) for this Pattern. + * @param bbox The new BBox for this Pattern. + */ + public void setBBox(PDRectangle bbox) + { + if( bbox == null ) + { + getCOSObject().removeItem( COSName.BBOX ); + } + else + { + getCOSObject().setItem( COSName.BBOX, bbox.getCOSArray() ); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/package.html new file mode 100644 index 00000000000..7e6dbb1cb69 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package deals with patterns which are used instead of colors. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java new file mode 100644 index 00000000000..7cd5f4330c1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java @@ -0,0 +1,291 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.NoninvertibleTransformException; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for axial shading. + * + * Performance improvement done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +public class AxialShadingContext extends ShadingContext implements PaintContext +{ + private static final Log LOG = LogFactory.getLog(AxialShadingContext.class); + + private PDShadingType2 axialShadingType; + + private final float[] coords; + private final float[] domain; + private final boolean[] extend; + private final double x1x0; + private final double y1y0; + private final float d1d0; + private final double denom; + + private final int factor; + private final int[] colorTable; + + private AffineTransform rat; + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param deviceBounds the bounds of the area to paint, in device units + * @throws IOException if there is an error getting the color space or doing color conversion. + */ + public AxialShadingContext(PDShadingType2 shading, ColorModel colorModel, AffineTransform xform, + Matrix matrix, Rectangle deviceBounds) throws IOException + { + super(shading, colorModel, xform, matrix); + this.axialShadingType = shading; + coords = shading.getCoords().toFloatArray(); + + // domain values + if (shading.getDomain() != null) + { + domain = shading.getDomain().toFloatArray(); + } + else + { + // set default values + domain = new float[] { 0, 1 }; + } + // extend values + COSArray extendValues = shading.getExtend(); + if (extendValues != null) + { + extend = new boolean[2]; + extend[0] = ((COSBoolean) extendValues.getObject(0)).getValue(); + extend[1] = ((COSBoolean) extendValues.getObject(1)).getValue(); + } + else + { + // set default values + extend = new boolean[] { false, false }; + } + // calculate some constants to be used in getRaster + x1x0 = coords[2] - coords[0]; + y1y0 = coords[3] - coords[1]; + d1d0 = domain[1] - domain[0]; + denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2); + + try + { + // get inverse transform to be independent of current user / device space + // when handling actual pixels in getRaster() + rat = matrix.createAffineTransform().createInverse(); + rat.concatenate(xform.createInverse()); + } + catch (NoninvertibleTransformException ex) + { + LOG.error(ex.getMessage() + ", matrix: " + matrix, ex); + rat = new AffineTransform(); + } + + // shading space -> device space + AffineTransform shadingToDevice = (AffineTransform)xform.clone(); + shadingToDevice.concatenate(matrix.createAffineTransform()); + + // worst case for the number of steps is opposite diagonal corners, so use that + double dist = Math.sqrt(Math.pow(deviceBounds.getMaxX() - deviceBounds.getMinX(), 2) + + Math.pow(deviceBounds.getMaxY() - deviceBounds.getMinY(), 2)); + factor = (int) Math.ceil(dist); + + // build the color table for the given number of steps + colorTable = calcColorTable(); + } + + /** + * Calculate the color on the axial line and store them in an array. + * + * @return an array, index denotes the relative position, the corresponding + * value is the color on the axial line + * @throws IOException if the color conversion fails. + */ + private int[] calcColorTable() throws IOException + { + int[] map = new int[factor + 1]; + if (factor == 0 || Float.compare(d1d0, 0) == 0) + { + float[] values = axialShadingType.evalFunction(domain[0]); + map[0] = convertToRGB(values); + } + else + { + for (int i = 0; i <= factor; i++) + { + float t = domain[0] + d1d0 * i / factor; + float[] values = axialShadingType.evalFunction(t); + map[i] = convertToRGB(values); + } + } + return map; + } + + @Override + public void dispose() + { + super.dispose(); + axialShadingType = null; + } + + @Override + public ColorModel getColorModel() + { + return super.getColorModel(); + } + + @Override + public Raster getRaster(int x, int y, int w, int h) + { + // create writable raster + WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); + boolean useBackground; + int[] data = new int[w * h * 4]; + for (int j = 0; j < h; j++) + { + for (int i = 0; i < w; i++) + { + useBackground = false; + float[] values = new float[] { x + i, y + j }; + rat.transform(values, 0, values, 0, 1); + double inputValue = x1x0 * (values[0] - coords[0]) + y1y0 * (values[1] - coords[1]); + // TODO this happens if start == end, see PDFBOX-1442 + if (Double.compare(denom, 0) == 0) + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + else + { + inputValue /= denom; + } + // input value is out of range + if (inputValue < 0) + { + // the shading has to be extended if extend[0] == true + if (extend[0]) + { + inputValue = 0; + } + else + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + } + // input value is out of range + else if (inputValue > 1) + { + // the shading has to be extended if extend[1] == true + if (extend[1]) + { + inputValue = 1; + } + else + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + } + int value; + if (useBackground) + { + // use the given backgound color values + value = getRgbBackground(); + } + else + { + int key = (int) (inputValue * factor); + value = colorTable[key]; + } + int index = (j * w + i) * 4; + data[index] = value & 255; + value >>= 8; + data[index + 1] = value & 255; + value >>= 8; + data[index + 2] = value & 255; + data[index + 3] = 255; + } + } + raster.setPixels(0, 0, w, h, data); + return raster; + } + + /** + * Returns the coords values. + */ + public float[] getCoords() + { + return coords; + } + + /** + * Returns the domain values. + */ + public float[] getDomain() + { + return domain; + } + + /** + * Returns the extend values. + */ + public boolean[] getExtend() + { + return extend; + } + + /** + * Returns the function. + * + * @throws java.io.IOException if we were not able to create the function. + */ + public PDFunction getFunction() throws IOException + { + return axialShadingType.getFunction(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java new file mode 100644 index 00000000000..49b69a86ca1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT Paint for axial shading. + * + */ +public class AxialShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(AxialShadingPaint.class); + + /** + * Constructor. + * + * @param shadingType2 the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + AxialShadingPaint(PDShadingType2 shadingType2, Matrix matrix) + { + super(shadingType2, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new AxialShadingContext(shading, cm, xform, matrix, deviceBounds); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsPatch.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsPatch.java new file mode 100644 index 00000000000..127710e9893 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsPatch.java @@ -0,0 +1,217 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.geom.Point2D; +import java.util.List; + +/** + * This class is used to describe a patch for type 6 shading. This was done as + * part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class CoonsPatch extends Patch +{ + /** + * Constructor of a patch for type 6 shading. + * + * @param points 12 control points + * @param color 4 corner colors + */ + protected CoonsPatch(Point2D[] points, float[][] color) + { + super(points, color); + controlPoints = reshapeControlPoints(points); + level = calcLevel(); + listOfTriangles = getTriangles(); + } + + // adjust the 12 control points to 4 groups, each group defines one edge of a patch + private Point2D[][] reshapeControlPoints(Point2D[] points) + { + Point2D[][] fourRows = new Point2D[4][4]; + fourRows[2] = new Point2D[] + { + points[0], points[1], points[2], points[3] + }; // d1 + fourRows[1] = new Point2D[] + { + points[3], points[4], points[5], points[6] + }; // c2 + fourRows[3] = new Point2D[] + { + points[9], points[8], points[7], points[6] + }; // d2 + fourRows[0] = new Point2D[] + { + points[0], points[11], points[10], points[9] + }; // c1 + return fourRows; + } + + // calculate the dividing level from control points + private int[] calcLevel() + { + int[] l = + { + 4, 4 + }; + // if two opposite edges are both lines, there is a possibility to reduce the dividing level + if (isEdgeALine(controlPoints[0]) && isEdgeALine(controlPoints[1])) + { + double lc1 = getLen(controlPoints[0][0], controlPoints[0][3]), + lc2 = getLen(controlPoints[1][0], controlPoints[1][3]); + // determine the dividing level by the lengths of edges + if (lc1 > 800 || lc2 > 800) + { + // keeps init value 4 + } + else if (lc1 > 400 || lc2 > 400) + { + l[0] = 3; + } + else if (lc1 > 200 || lc2 > 200) + { + l[0] = 2; + } + else + { + l[0] = 1; + } + } + + // the other two opposite edges + if (isEdgeALine(controlPoints[2]) && isEdgeALine(controlPoints[3])) + { + double ld1 = getLen(controlPoints[2][0], controlPoints[2][3]), + ld2 = getLen(controlPoints[3][0], controlPoints[3][3]); + if (ld1 > 800 || ld2 > 800) + { + // keeps init value 4 + } + else if (ld1 > 400 || ld2 > 400) + { + l[1] = 3; + } + else if (ld1 > 200 || ld2 > 200) + { + l[1] = 2; + } + else + { + l[1] = 1; + } + } + return l; + } + + // get a list of triangles which compose this coons patch + private List getTriangles() + { + // 4 edges are 4 cubic Bezier curves + CubicBezierCurve eC1 = new CubicBezierCurve(controlPoints[0], level[0]); + CubicBezierCurve eC2 = new CubicBezierCurve(controlPoints[1], level[0]); + CubicBezierCurve eD1 = new CubicBezierCurve(controlPoints[2], level[1]); + CubicBezierCurve eD2 = new CubicBezierCurve(controlPoints[3], level[1]); + CoordinateColorPair[][] patchCC = getPatchCoordinatesColor(eC1, eC2, eD1, eD2); + return getShadedTriangles(patchCC); + } + + @Override + protected Point2D[] getFlag1Edge() + { + return controlPoints[1].clone(); + } + + @Override + protected Point2D[] getFlag2Edge() + { + Point2D[] implicitEdge = new Point2D[4]; + implicitEdge[0] = controlPoints[3][3]; + implicitEdge[1] = controlPoints[3][2]; + implicitEdge[2] = controlPoints[3][1]; + implicitEdge[3] = controlPoints[3][0]; + return implicitEdge; + } + + @Override + protected Point2D[] getFlag3Edge() + { + Point2D[] implicitEdge = new Point2D[4]; + implicitEdge[0] = controlPoints[0][3]; + implicitEdge[1] = controlPoints[0][2]; + implicitEdge[2] = controlPoints[0][1]; + implicitEdge[3] = controlPoints[0][0]; + return implicitEdge; + } + + /* + dividing a patch into a grid, return a matrix of the coordinate and color at the crossing points of the grid, + the rule to calculate the coordinate is defined in page 195 of PDF32000_2008.pdf, the rule to calculate the + cooresponding color is bilinear interpolation + */ + private CoordinateColorPair[][] getPatchCoordinatesColor(CubicBezierCurve c1, CubicBezierCurve c2, CubicBezierCurve d1, CubicBezierCurve d2) + { + Point2D[] curveC1 = c1.getCubicBezierCurve(); + Point2D[] curveC2 = c2.getCubicBezierCurve(); + Point2D[] curveD1 = d1.getCubicBezierCurve(); + Point2D[] curveD2 = d2.getCubicBezierCurve(); + + int numberOfColorComponents = cornerColor[0].length; + int szV = curveD1.length; + int szU = curveC1.length; + + CoordinateColorPair[][] patchCC = new CoordinateColorPair[szV][szU]; + + double stepV = (double) 1 / (szV - 1); + double stepU = (double) 1 / (szU - 1); + double v = -stepV; + for (int i = 0; i < szV; i++) + { + // v and u are the assistant parameters + v += stepV; + double u = -stepU; + for (int j = 0; j < szU; j++) + { + u += stepU; + double scx = (1 - v) * curveC1[j].getX() + v * curveC2[j].getX(); + double scy = (1 - v) * curveC1[j].getY() + v * curveC2[j].getY(); + double sdx = (1 - u) * curveD1[i].getX() + u * curveD2[i].getX(); + double sdy = (1 - u) * curveD1[i].getY() + u * curveD2[i].getY(); + double sbx = (1 - v) * ((1 - u) * controlPoints[0][0].getX() + u * controlPoints[0][3].getX()) + + v * ((1 - u) * controlPoints[1][0].getX() + u * controlPoints[1][3].getX()); + double sby = (1 - v) * ((1 - u) * controlPoints[0][0].getY() + u * controlPoints[0][3].getY()) + + v * ((1 - u) * controlPoints[1][0].getY() + u * controlPoints[1][3].getY()); + + double sx = scx + sdx - sbx; + double sy = scy + sdy - sby; + // the above code in this for loop defines the patch surface (coordinates) + + Point2D tmpC = new Point2D.Double(sx, sy); + + float[] paramSC = new float[numberOfColorComponents]; + for (int ci = 0; ci < numberOfColorComponents; ci++) + { + paramSC[ci] = (float) ((1 - v) * ((1 - u) * cornerColor[0][ci] + u * cornerColor[3][ci]) + + v * ((1 - u) * cornerColor[1][ci] + u * cornerColor[2][ci])); // bilinear interpolation + } + patchCC[i][j] = new CoordinateColorPair(tmpC, paramSC); + } + } + return patchCC; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoordinateColorPair.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoordinateColorPair.java new file mode 100644 index 00000000000..40e6d81d809 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoordinateColorPair.java @@ -0,0 +1,42 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.geom.Point2D; + +/** + * This class is used to store a point's coordinate and its corresponding color. + * This was done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class CoordinateColorPair +{ + final Point2D coordinate; + final float[] color; + + /** + * Constructor. + * + * @param p point + * @param c color + */ + CoordinateColorPair(Point2D p, float[] c) + { + coordinate = p; + color = c.clone(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CubicBezierCurve.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CubicBezierCurve.java new file mode 100644 index 00000000000..9d232686004 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CubicBezierCurve.java @@ -0,0 +1,108 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.geom.Point2D; + +/** + * This class is used to describe the edge of each patch for type 6 shading. + * This was done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class CubicBezierCurve +{ + private final Point2D[] controlPoints; + private final int level; + private final Point2D[] curve; + + /** + * Constructor of CubicBezierCurve + * + * @param ctrlPnts, 4 control points [p0, p1, p2, p3] + * @param l, dividing level, if l = 0, one cubic Bezier curve is divided + * into 2^0 = 1 segments, if l = n, one cubic Bezier curve is divided into + * 2^n segments + */ + CubicBezierCurve(Point2D[] ctrlPnts, int l) + { + controlPoints = ctrlPnts.clone(); + level = l; + curve = getPoints(level); + } + + /** + * Get level parameter + * + * @return level + */ + int getLevel() + { + return level; + } + + // calculate sampled points on the cubic Bezier curve defined by the 4 given control points + private Point2D[] getPoints(int l) + { + if (l < 0) + { + l = 0; + } + int sz = (1 << l) + 1; + Point2D[] res = new Point2D[sz]; + double step = (double) 1 / (sz - 1); + double t = -step; + for (int i = 0; i < sz; i++) + { + t += step; + double tmpX = (1 - t) * (1 - t) * (1 - t) * controlPoints[0].getX() + + 3 * t * (1 - t) * (1 - t) * controlPoints[1].getX() + + 3 * t * t * (1 - t) * controlPoints[2].getX() + + t * t * t * controlPoints[3].getX(); + double tmpY = (1 - t) * (1 - t) * (1 - t) * controlPoints[0].getY() + + 3 * t * (1 - t) * (1 - t) * controlPoints[1].getY() + + 3 * t * t * (1 - t) * controlPoints[2].getY() + + t * t * t * controlPoints[3].getY(); + res[i] = new Point2D.Double(tmpX, tmpY); + } + return res; + } + + /** + * Get sampled points of this cubic Bezier curve. + * + * @return sampled points + */ + Point2D[] getCubicBezierCurve() + { + return curve; + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(); + for (Point2D p : controlPoints) + { + if (sb.length() > 0) + { + sb.append(' '); + } + sb.append(p); + } + return "Cubic Bezier curve{control points p0, p1, p2, p3: " + sb + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java new file mode 100644 index 00000000000..402c3e04334 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.imageio.stream.ImageInputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.util.Matrix; + +/** + * Shades Gouraud triangles for Type4ShadingContext and Type5ShadingContext. + * + * @author Tilman Hausherr + * @author Shaola Ren + */ +abstract class GouraudShadingContext extends TriangleBasedShadingContext +{ + private static final Log LOG = LogFactory.getLog(GouraudShadingContext.class); + + /** + * triangle list. + */ + private List triangleList = new ArrayList<>(); + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @throws IOException if something went wrong + */ + protected GouraudShadingContext(PDShading shading, ColorModel colorModel, AffineTransform xform, + Matrix matrix) throws IOException + { + super(shading, colorModel, xform, matrix); + } + + /** + * Read a vertex from the bit input stream performs interpolations. + * + * @param input bit input stream + * @param maxSrcCoord max value for source coordinate (2^bits-1) + * @param maxSrcColor max value for source color (2^bits-1) + * @param rangeX dest range for X + * @param rangeY dest range for Y + * @param colRangeTab dest range array for colors + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @return a new vertex with the flag and the interpolated values + * @throws IOException if something went wrong + */ + protected Vertex readVertex(ImageInputStream input, long maxSrcCoord, long maxSrcColor, + PDRange rangeX, PDRange rangeY, PDRange[] colRangeTab, + Matrix matrix, AffineTransform xform) throws IOException + { + float[] colorComponentTab = new float[numberOfColorComponents]; + long x = input.readBits(bitsPerCoordinate); + long y = input.readBits(bitsPerCoordinate); + float dstX = interpolate(x, maxSrcCoord, rangeX.getMin(), rangeX.getMax()); + float dstY = interpolate(y, maxSrcCoord, rangeY.getMin(), rangeY.getMax()); + LOG.debug("coord: " + String.format("[%06X,%06X] -> [%f,%f]", x, y, dstX, dstY)); + Point2D p = matrix.transformPoint(dstX, dstY); + xform.transform(p, p); + + for (int n = 0; n < numberOfColorComponents; ++n) + { + int color = (int) input.readBits(bitsPerColorComponent); + colorComponentTab[n] = interpolate(color, maxSrcColor, colRangeTab[n].getMin(), + colRangeTab[n].getMax()); + LOG.debug("color[" + n + "]: " + color + "/" + String.format("%02x", color) + + "-> color[" + n + "]: " + colorComponentTab[n]); + } + + // "Each set of vertex data shall occupy a whole number of bytes. + // If the total number of bits required is not divisible by 8, the last data byte + // for each vertex is padded at the end with extra bits, which shall be ignored." + int bitOffset = input.getBitOffset(); + if (bitOffset != 0) + { + input.readBits(8 - bitOffset); + } + + return new Vertex(p, colorComponentTab); + } + + final void setTriangleList(List triangleList) + { + this.triangleList = triangleList; + } + + @Override + protected Map calcPixelTable(Rectangle deviceBounds) throws IOException + { + Map map = new HashMap<>(); + super.calcPixelTable(triangleList, map, deviceBounds); + return map; + } + + @Override + public void dispose() + { + triangleList = null; + super.dispose(); + } + + /** + * Calculate the interpolation, see p.345 pdf spec 1.7. + * + * @param src src value + * @param srcMax max src value (2^bits-1) + * @param dstMin min dst value + * @param dstMax max dst value + * @return interpolated value + */ + private float interpolate(float src, long srcMax, float dstMin, float dstMax) + { + return dstMin + (src * (dstMax - dstMin) / srcMax); + } + + @Override + protected boolean isDataEmpty() + { + return triangleList.isEmpty(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/IntPoint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/IntPoint.java new file mode 100644 index 00000000000..0db9927d6b9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/IntPoint.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Point; +import java.awt.geom.Point2D; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Point class with faster hashCode() to speed up the rendering of Gouraud shadings. Should only be + * used for maps or sets when all elements are of this type, because the hashCode() method violates + * its general contract "If two objects are equal according to the equals(Object) method, then + * calling the hashCode method on each of the two objects must produce the same" when IntPoint is + * mixed with Point, because IntPoint(x,y) would have a different hashCode than Point(x,y). + * + * @author Tilman Hausherr + */ +class IntPoint extends Point +{ + private static final Log LOG = LogFactory.getLog(IntPoint.class); + + IntPoint(int x, int y) + { + super(x, y); + } + + @Override + public int hashCode() + { + return 89 * (623 + this.x) + this.y; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (obj == null) + { + return false; + } + if (getClass() != obj.getClass()) + { + if (obj instanceof Point2D) + { + // hitting this branch means that the warning on top of the class wasn't read + LOG.error("IntPoint should not be used together with its base class"); + } + return false; + } + final IntPoint other = (IntPoint) obj; + return this.x == other.x && this.y == other.y; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Line.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Line.java new file mode 100644 index 00000000000..78c45b5bba8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Line.java @@ -0,0 +1,131 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Point; +import java.util.HashSet; +import java.util.Set; + +/** + * This class describes a rasterized line. This was done as part of GSoC2014, + * Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class Line +{ + private final Point point0; + private final Point point1; + private final float[] color0; + private final float[] color1; + + protected final Set linePoints; // all the points in this rasterized line + + /** + * Constructor of class Line. + * + * @param p0 one end of a line + * @param p1 the other end of the line + * @param c0 color of point p0 + * @param c1 color of point p1 + */ + Line(Point p0, Point p1, float[] c0, float[] c1) + { + point0 = p0; + point1 = p1; + color0 = c0.clone(); + color1 = c1.clone(); + linePoints = calcLine(point0.x, point0.y, point1.x, point1.y); + } + + /** + * Calculate the points of a line with Bresenham's line algorithm + * Bresenham's + * line algorithm + * + * @param x0 coordinate + * @param y0 coordinate + * @param x1 coordinate + * @param y1 coordinate + * @return all the points on the rasterized line from (x0, y0) to (x1, y1) + */ + private Set calcLine(int x0, int y0, int x1, int y1) + { + Set points = new HashSet<>(3); + int dx = Math.abs(x1 - x0); + int dy = Math.abs(y1 - y0); + int sx = x0 < x1 ? 1 : -1; + int sy = y0 < y1 ? 1 : -1; + int err = dx - dy; + while (true) + { + points.add(new IntPoint(x0, y0)); + if (x0 == x1 && y0 == y1) + { + break; + } + int e2 = 2 * err; + if (e2 > -dy) + { + err -= dy; + x0 += sx; + } + if (e2 < dx) + { + err += dx; + y0 += sy; + } + } + return points; + } + + /** + * Calculate the color of a point on a rasterized line by linear + * interpolation. + * + * @param p target point, p should always be contained in linePoints + * @return color + */ + protected float[] calcColor(Point p) + { + int numberOfColorComponents = color0.length; + float[] pc = new float[numberOfColorComponents]; + if (point0.x == point1.x && point0.y == point1.y) + { + return color0; + } + else if (point0.x == point1.x) + { + float l = point1.y - point0.y; + for (int i = 0; i < numberOfColorComponents; i++) + { + pc[i] = (color0[i] * (point1.y - p.y) / l + + color1[i] * (p.y - point0.y) / l); + } + } + else + { + float l = point1.x - point0.x; + for (int i = 0; i < numberOfColorComponents; i++) + { + pc[i] = (color0[i] * (point1.x - p.x) / l + + color1[i] * (p.x - point0.x) / l); + } + } + return pc; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java new file mode 100644 index 00000000000..5b42cde9bd5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java @@ -0,0 +1,431 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; +import java.io.IOException; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.util.Matrix; + +/** + * A Shading Resource. + * + */ +public abstract class PDShading implements COSObjectable +{ + private final COSDictionary dictionary; + private COSArray background = null; + private PDRectangle bBox = null; + private PDColorSpace colorSpace = null; + private PDFunction function = null; + private PDFunction[] functionArray = null; + + /** + * shading type 1 = function based shading. + */ + public static final int SHADING_TYPE1 = 1; + + /** + * shading type 2 = axial shading. + */ + public static final int SHADING_TYPE2 = 2; + + /** + * shading type 3 = radial shading. + */ + public static final int SHADING_TYPE3 = 3; + + /** + * shading type 4 = Free-Form Gouraud-Shaded Triangle Meshes. + */ + public static final int SHADING_TYPE4 = 4; + + /** + * shading type 5 = Lattice-Form Gouraud-Shaded Triangle Meshes. + */ + public static final int SHADING_TYPE5 = 5; + + /** + * shading type 6 = Coons Patch Meshes. + */ + public static final int SHADING_TYPE6 = 6; + + /** + * shading type 7 = Tensor-Product Patch Meshes. + */ + public static final int SHADING_TYPE7 = 7; + + /** + * Default constructor. + */ + public PDShading() + { + dictionary = new COSDictionary(); + } + + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShading(COSDictionary shadingDictionary) + { + dictionary = shadingDictionary; + } + + /** + * This will get the underlying dictionary. + * + * @return the dictionary for this shading. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * This will return the type. + * + * @return the type of object that this is + */ + public String getType() + { + return COSName.SHADING.getName(); + } + + /** + * This will set the shading type. + * + * @param shadingType the new shading type + */ + public void setShadingType(int shadingType) + { + dictionary.setInt(COSName.SHADING_TYPE, shadingType); + } + + /** + * This will return the shading type. + * + * @return the shading typ + */ + public abstract int getShadingType(); + + /** + * This will set the background. + * + * @param newBackground the new background + */ + public void setBackground(COSArray newBackground) + { + background = newBackground; + dictionary.setItem(COSName.BACKGROUND, newBackground); + } + + /** + * This will return the background. + * + * @return the background + */ + public COSArray getBackground() + { + if (background == null) + { + background = (COSArray) dictionary.getDictionaryObject(COSName.BACKGROUND); + } + return background; + } + + /** + * An array of four numbers in the form coordinate system (see below), + * giving the coordinates of the left, bottom, right, and top edges, + * respectively, of the shading's bounding box. + * + * @return the BBox of the form + */ + public PDRectangle getBBox() + { + if (bBox == null) + { + COSArray array = (COSArray) dictionary.getDictionaryObject(COSName.BBOX); + if (array != null) + { + bBox = new PDRectangle(array); + } + } + return bBox; + } + + /** + * This will set the BBox (bounding box) for this Shading. + * + * @param newBBox the new BBox + */ + public void setBBox(PDRectangle newBBox) + { + bBox = newBBox; + if (bBox == null) + { + dictionary.removeItem(COSName.BBOX); + } + else + { + dictionary.setItem(COSName.BBOX, bBox.getCOSArray()); + } + } + + /** + * This will set the AntiAlias value. + * + * @param antiAlias the new AntiAlias value + */ + public void setAntiAlias(boolean antiAlias) + { + dictionary.setBoolean(COSName.ANTI_ALIAS, antiAlias); + } + + /** + * This will return the AntiAlias value. + * + * @return the AntiAlias value + */ + public boolean getAntiAlias() + { + return dictionary.getBoolean(COSName.ANTI_ALIAS, false); + } + + /** + * This will get the color space or null if none exists. + * + * @return the color space for the shading + * @throws IOException if there is an error getting the color space + */ + public PDColorSpace getColorSpace() throws IOException + { + if (colorSpace == null) + { + COSBase colorSpaceDictionary = dictionary.getDictionaryObject(COSName.CS, COSName.COLORSPACE); + colorSpace = PDColorSpace.create(colorSpaceDictionary); + } + return colorSpace; + } + + /** + * This will set the color space for the shading. + * + * @param colorSpace the color space + */ + public void setColorSpace(PDColorSpace colorSpace) + { + this.colorSpace = colorSpace; + if (colorSpace != null) + { + dictionary.setItem(COSName.COLORSPACE, colorSpace.getCOSObject()); + } + else + { + dictionary.removeItem(COSName.COLORSPACE); + } + } + + /** + * Create the correct PD Model shading based on the COS base shading. + * + * @param shadingDictionary the COS shading dictionary + * @return the newly created shading resources object + * @throws IOException if we are unable to create the PDShading object + */ + public static PDShading create(COSDictionary shadingDictionary) throws IOException + { + PDShading shading = null; + int shadingType = shadingDictionary.getInt(COSName.SHADING_TYPE, 0); + switch (shadingType) + { + case SHADING_TYPE1: + shading = new PDShadingType1(shadingDictionary); + break; + case SHADING_TYPE2: + shading = new PDShadingType2(shadingDictionary); + break; + case SHADING_TYPE3: + shading = new PDShadingType3(shadingDictionary); + break; + case SHADING_TYPE4: + shading = new PDShadingType4(shadingDictionary); + break; + case SHADING_TYPE5: + shading = new PDShadingType5(shadingDictionary); + break; + case SHADING_TYPE6: + shading = new PDShadingType6(shadingDictionary); + break; + case SHADING_TYPE7: + shading = new PDShadingType7(shadingDictionary); + break; + default: + throw new IOException("Error: Unknown shading type " + shadingType); + } + return shading; + } + + /** + * This will set the function for the color conversion. + * + * @param newFunction the new function + */ + public void setFunction(PDFunction newFunction) + { + functionArray = null; + function = newFunction; + getCOSObject().setItem(COSName.FUNCTION, newFunction); + } + + /** + * This will set the functions COSArray for the color conversion. + * + * @param newFunctions the new COSArray containing all functions + */ + public void setFunction(COSArray newFunctions) + { + functionArray = null; + function = null; + getCOSObject().setItem(COSName.FUNCTION, newFunctions); + } + + /** + * This will return the function used to convert the color values. + * + * @return the function + * @throws java.io.IOException if we were not able to create the function. + */ + public PDFunction getFunction() throws IOException + { + if (function == null) + { + COSBase dictionaryFunctionObject = getCOSObject().getDictionaryObject(COSName.FUNCTION); + if (dictionaryFunctionObject != null) + { + function = PDFunction.create(dictionaryFunctionObject); + } + } + return function; + } + + /** + * Provide the function(s) of the shading dictionary as array. + * + * @return an array containing the function(s). + * @throws IOException if we were unable to create a function. + */ + private PDFunction[] getFunctionsArray() throws IOException + { + if (functionArray == null) + { + COSBase functionObject = getCOSObject().getDictionaryObject(COSName.FUNCTION); + if (functionObject instanceof COSDictionary) + { + functionArray = new PDFunction[1]; + functionArray[0] = PDFunction.create(functionObject); + } + else if (functionObject instanceof COSArray) + { + COSArray functionCOSArray = (COSArray) functionObject; + int numberOfFunctions = functionCOSArray.size(); + functionArray = new PDFunction[numberOfFunctions]; + for (int i = 0; i < numberOfFunctions; i++) + { + functionArray[i] = PDFunction.create(functionCOSArray.get(i)); + } + } + else + { + throw new IOException("mandatory /Function element must be a dictionary or an array"); + } + } + return functionArray; + } + + /** + * Convert the input value using the functions of the shading dictionary. + * + * @param inputValue the input value + * @return the output values + * @throws IOException thrown if something went wrong + */ + public float[] evalFunction(float inputValue) throws IOException + { + return evalFunction(new float[] { inputValue }); + } + + /** + * Convert the input values using the functions of the shading dictionary. + * + * @param input the input values + * @return the output values + * @throws IOException thrown if something went wrong + */ + public float[] evalFunction(float[] input) throws IOException + { + PDFunction[] functions = getFunctionsArray(); + int numberOfFunctions = functions.length; + float[] returnValues; + if (numberOfFunctions == 1) + { + returnValues = functions[0].eval(input); + } + else + { + returnValues = new float[numberOfFunctions]; + for (int i = 0; i < numberOfFunctions; i++) + { + float[] newValue = functions[i].eval(input); + returnValues[i] = newValue[0]; + } + } + // From the PDF spec: + // "If the value returned by the function for a given colour component + // is out of range, it shall be adjusted to the nearest valid value." + for (int i = 0; i < returnValues.length; ++i) + { + if (returnValues[i] < 0) + { + returnValues[i] = 0; + } + else if (returnValues[i] > 1) + { + returnValues[i] = 1; + } + } + return returnValues; + } + + /** + * Returns an AWT paint which corresponds to this shading + * + * @param matrix the pattern matrix concatenated with that of the parent content stream, + * this matrix which maps the pattern's internal coordinate system to user space + * @return an AWT Paint instance + */ + public abstract Paint toPaint(Matrix matrix); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType1.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType1.java new file mode 100644 index 00000000000..e7164f57a4e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType1.java @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; +import java.awt.geom.AffineTransform; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for a function based shading. + */ +public class PDShadingType1 extends PDShading +{ + private COSArray domain = null; + + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType1(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE1; + } + + /** + * This will get the optional Matrix of a function based shading. + * + * @return the matrix + */ + public Matrix getMatrix() + { + return Matrix.createMatrix(getCOSObject().getDictionaryObject(COSName.MATRIX)); + } + + /** + * Sets the optional Matrix entry for the function based shading. + * + * @param transform the transformation matrix + */ + public void setMatrix(AffineTransform transform) + { + COSArray matrix = new COSArray(); + double[] values = new double[6]; + transform.getMatrix(values); + for (double v : values) + { + matrix.add(new COSFloat((float) v)); + } + getCOSObject().setItem(COSName.MATRIX, matrix); + } + + /** + * This will get the optional Domain values of a function based shading. + * + * @return the domain values + */ + public COSArray getDomain() + { + if (domain == null) + { + domain = (COSArray) getCOSObject().getDictionaryObject(COSName.DOMAIN); + } + return domain; + } + + /** + * Sets the optional Domain entry for the function based shading. + * + * @param newDomain the domain array + */ + public void setDomain(COSArray newDomain) + { + domain = newDomain; + getCOSObject().setItem(COSName.DOMAIN, newDomain); + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new Type1ShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java new file mode 100644 index 00000000000..106f66c847e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for an axial shading. + */ +public class PDShadingType2 extends PDShading +{ + private COSArray coords = null; + private COSArray domain = null; + private COSArray extend = null; + + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType2(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE2; + } + + /** + * This will get the optional Extend values for this shading. + * + * @return the extend values + */ + public COSArray getExtend() + { + if (extend == null) + { + extend = (COSArray) getCOSObject().getDictionaryObject(COSName.EXTEND); + } + return extend; + } + + /** + * Sets the optional Extend entry for this shading. + * + * @param newExtend the extend array + */ + public void setExtend(COSArray newExtend) + { + extend = newExtend; + getCOSObject().setItem(COSName.EXTEND, newExtend); + } + + /** + * This will get the optional Domain values for this shading. + * + * @return the domain values + */ + public COSArray getDomain() + { + if (domain == null) + { + domain = (COSArray) getCOSObject().getDictionaryObject(COSName.DOMAIN); + } + return domain; + } + + /** + * Sets the optional Domain entry for this shading. + * + * @param newDomain the domain array + */ + public void setDomain(COSArray newDomain) + { + domain = newDomain; + getCOSObject().setItem(COSName.DOMAIN, newDomain); + } + + /** + * This will get the Coords values for this shading. + * + * @return the coordinate values + */ + public COSArray getCoords() + { + if (coords == null) + { + coords = (COSArray) getCOSObject().getDictionaryObject(COSName.COORDS); + } + return coords; + } + + /** + * Sets the Coords entry for this shading. + * + * @param newCoords the coordinates array + */ + public void setCoords(COSArray newCoords) + { + coords = newCoords; + getCOSObject().setItem(COSName.COORDS, newCoords); + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new AxialShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java new file mode 100644 index 00000000000..3f08b47b0ba --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for a radial shading. + */ +public class PDShadingType3 extends PDShadingType2 +{ + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType3(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE3; + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new RadialShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java new file mode 100644 index 00000000000..f739c30a6b5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for a shading type 4 (Free-Form Gouraud-Shaded Triangle Mesh). + */ +public class PDShadingType4 extends PDTriangleBasedShadingType +{ + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType4(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE4; + } + + /** + * The bits per flag of this shading. This will return -1 if one has not + * been set. + * + * @return The number of bits per flag. + */ + public int getBitsPerFlag() + { + return getCOSObject().getInt(COSName.BITS_PER_FLAG, -1); + } + + /** + * Set the number of bits per flag. + * + * @param bitsPerFlag the number of bits per flag + */ + public void setBitsPerFlag(int bitsPerFlag) + { + getCOSObject().setInt(COSName.BITS_PER_FLAG, bitsPerFlag); + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new Type4ShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java new file mode 100644 index 00000000000..c4a5e46b9bc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for a shading type 5 (Lattice-Form Gouraud-Shade Triangle Mesh). + */ +public class PDShadingType5 extends PDTriangleBasedShadingType +{ + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType5(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE5; + } + + /** + * The vertices per row of this shading. This will return -1 if one has not + * been set. + * + * @return the number of vertices per row + */ + public int getVerticesPerRow() + { + return getCOSObject().getInt(COSName.VERTICES_PER_ROW, -1); + } + + /** + * Set the number of vertices per row. + * + * @param verticesPerRow the number of vertices per row + */ + public void setVerticesPerRow(int verticesPerRow) + { + getCOSObject().setInt(COSName.VERTICES_PER_ROW, verticesPerRow); + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new Type5ShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java new file mode 100644 index 00000000000..65be20f0188 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for a shading type 6 (Coons Patch Mesh). + */ +public class PDShadingType6 extends PDShadingType4 +{ + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType6(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE6; + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new Type6ShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java new file mode 100644 index 00000000000..34070a25766 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.util.Matrix; + +/** + * Resources for a shading type 7 (Tensor-Product Patch Mesh). + */ +public class PDShadingType7 extends PDShadingType6 +{ + /** + * Constructor using the given shading dictionary. + * + * @param shadingDictionary the dictionary for this shading + */ + public PDShadingType7(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + @Override + public int getShadingType() + { + return PDShading.SHADING_TYPE7; + } + + @Override + public Paint toPaint(Matrix matrix) + { + return new Type7ShadingPaint(this, matrix); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java new file mode 100644 index 00000000000..73d6eb9d39f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java @@ -0,0 +1,122 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRange; + +/** + * Common resources for shading types 4,5,6 and 7 + */ +abstract class PDTriangleBasedShadingType extends PDShading +{ + // an array of 2^n numbers specifying the linear mapping of sample values + // into the range appropriate for the function's output values. Default + // value: same as the value of Range + private COSArray decode = null; + + PDTriangleBasedShadingType(COSDictionary shadingDictionary) + { + super(shadingDictionary); + } + + /** + * The bits per component of this shading. This will return -1 if one has + * not been set. + * + * @return the number of bits per component + */ + public int getBitsPerComponent() + { + return getCOSObject().getInt(COSName.BITS_PER_COMPONENT, -1); + } + + /** + * Set the number of bits per component. + * + * @param bitsPerComponent the number of bits per component + */ + public void setBitsPerComponent(int bitsPerComponent) + { + getCOSObject().setInt(COSName.BITS_PER_COMPONENT, bitsPerComponent); + } + + /** + * The bits per coordinate of this shading. This will return -1 if one has + * not been set. + * + * @return the number of bits per coordinate + */ + public int getBitsPerCoordinate() + { + return getCOSObject().getInt(COSName.BITS_PER_COORDINATE, -1); + } + + /** + * Set the number of bits per coordinate. + * + * @param bitsPerComponent the number of bits per coordinate + */ + public void setBitsPerCoordinate(int bitsPerComponent) + { + getCOSObject().setInt(COSName.BITS_PER_COORDINATE, bitsPerComponent); + } + + /** + * Returns all decode values as COSArray. + * + * @return the decode array + */ + private COSArray getDecodeValues() + { + if (decode == null) + { + decode = (COSArray) getCOSObject().getDictionaryObject(COSName.DECODE); + } + return decode; + } + + /** + * This will set the decode values. + * + * @param decodeValues the new decode values + */ + public void setDecodeValues(COSArray decodeValues) + { + decode = decodeValues; + getCOSObject().setItem(COSName.DECODE, decodeValues); + } + + /** + * Get the decode for the input parameter. + * + * @param paramNum the function parameter number + * @return the decode parameter range or null if none is set + */ + public PDRange getDecodeForParameter(int paramNum) + { + PDRange retval = null; + COSArray decodeValues = getDecodeValues(); + if (decodeValues != null && decodeValues.size() >= paramNum * 2 + 1) + { + retval = new PDRange(decodeValues, paramNum); + } + return retval; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Patch.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Patch.java new file mode 100644 index 00000000000..bcbbd4c5252 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Patch.java @@ -0,0 +1,232 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.geom.Point2D; +import java.util.ArrayList; +import java.util.List; + +/** + * Patch is extended by CoonsPatch and TensorPatch. This was done as part of + * GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +abstract class Patch +{ + protected Point2D[][] controlPoints; + protected float[][] cornerColor; + + /* + level = {levelU, levelV}, levelU defines the patch's u direction edges should be + divided into 2^levelU parts, level V defines the patch's v direction edges should + be divided into 2^levelV parts + */ + protected int[] level; + protected List listOfTriangles; + + /** + * Constructor of Patch. + * + * @param ctl control points, size is 12 (for type 6 shading) or 16 (for + * type 7 shading) + * @param color 4 corner's colors + */ + Patch(Point2D[] ctl, float[][] color) + { + cornerColor = color.clone(); + } + + /** + * Get the implicit edge for flag = 1. + * + * @return implicit control points + */ + protected abstract Point2D[] getFlag1Edge(); + + /** + * Get the implicit edge for flag = 2. + * + * @return implicit control points + */ + protected abstract Point2D[] getFlag2Edge(); + + /** + * Get the implicit edge for flag = 3. + * + * @return implicit control points + */ + protected abstract Point2D[] getFlag3Edge(); + + /** + * Get the implicit color for flag = 1. + * + * @return color + */ + protected float[][] getFlag1Color() + { + int numberOfColorComponents = cornerColor[0].length; + float[][] implicitCornerColor = new float[2][numberOfColorComponents]; + for (int i = 0; i < numberOfColorComponents; i++) + { + implicitCornerColor[0][i] = cornerColor[1][i]; + implicitCornerColor[1][i] = cornerColor[2][i]; + } + return implicitCornerColor; + } + + /** + * Get implicit color for flag = 2. + * + * @return color + */ + protected float[][] getFlag2Color() + { + int numberOfColorComponents = cornerColor[0].length; + float[][] implicitCornerColor = new float[2][numberOfColorComponents]; + for (int i = 0; i < numberOfColorComponents; i++) + { + implicitCornerColor[0][i] = cornerColor[2][i]; + implicitCornerColor[1][i] = cornerColor[3][i]; + } + return implicitCornerColor; + } + + /** + * Get implicit color for flag = 3. + * + * @return color + */ + protected float[][] getFlag3Color() + { + int numberOfColorComponents = cornerColor[0].length; + float[][] implicitCornerColor = new float[2][numberOfColorComponents]; + for (int i = 0; i < numberOfColorComponents; i++) + { + implicitCornerColor[0][i] = cornerColor[3][i]; + implicitCornerColor[1][i] = cornerColor[0][i]; + } + return implicitCornerColor; + } + + /** + * Calculate the distance from point ps to point pe. + * + * @param ps one end of a line + * @param pe the other end of the line + * @return length of the line + */ + protected double getLen(Point2D ps, Point2D pe) + { + double x = pe.getX() - ps.getX(); + double y = pe.getY() - ps.getY(); + return Math.sqrt(x * x + y * y); + } + + /** + * Whether the for control points are on a line. + * + * @param ctl an edge's control points, the size of ctl is 4 + * @return true when 4 control points are on a line, otherwise false + */ + protected boolean isEdgeALine(Point2D[] ctl) + { + double ctl1 = Math.abs(edgeEquationValue(ctl[1], ctl[0], ctl[3])); + double ctl2 = Math.abs(edgeEquationValue(ctl[2], ctl[0], ctl[3])); + double x = Math.abs(ctl[0].getX() - ctl[3].getX()); + double y = Math.abs(ctl[0].getY() - ctl[3].getY()); + return (ctl1 <= x && ctl2 <= x) || (ctl1 <= y && ctl2 <= y); + } + + /** + * A line from point p1 to point p2 defines an equation, adjust the form of + * the equation to let the rhs equals 0, then calculate the lhs value by + * plugging the coordinate of p in the lhs expression. + * + * @param p target point + * @param p1 one end of a line + * @param p2 the other end of a line + * @return calculated value + */ + protected double edgeEquationValue(Point2D p, Point2D p1, Point2D p2) + { + return (p2.getY() - p1.getY()) * (p.getX() - p1.getX()) - (p2.getX() - p1.getX()) * (p.getY() - p1.getY()); + } + + /** + * An assistant method to accomplish type 6 and type 7 shading. + * + * @param patchCC all the crossing point coordinates and color of a grid + * @return a ShadedTriangle list which can compose the grid patch + */ + protected List getShadedTriangles(CoordinateColorPair[][] patchCC) + { + List list = new ArrayList<>(); + int szV = patchCC.length; + int szU = patchCC[0].length; + for (int i = 1; i < szV; i++) + { + for (int j = 1; j < szU; j++) + { + Point2D p0 = patchCC[i - 1][j - 1].coordinate, p1 = patchCC[i - 1][j].coordinate, p2 = patchCC[i][j].coordinate, + p3 = patchCC[i][j - 1].coordinate; + boolean ll = true; + if (overlaps(p0, p1) || overlaps(p0, p3)) + { + ll = false; + } + else + { + // p0, p1 and p3 are in counter clock wise order, p1 has priority over p0, p3 has priority over p1 + Point2D[] llCorner = + { + p0, p1, p3 + }; + float[][] llColor = + { + patchCC[i - 1][j - 1].color, patchCC[i - 1][j].color, patchCC[i][j - 1].color + }; + ShadedTriangle tmpll = new ShadedTriangle(llCorner, llColor); // lower left triangle + list.add(tmpll); + } + if (ll && (overlaps(p2, p1) || overlaps(p2, p3))) + { + } + else + { + // p3, p1 and p2 are in counter clock wise order, p1 has priority over p3, p2 has priority over p1 + Point2D[] urCorner = + { + p3, p1, p2 + }; + float[][] urColor = + { + patchCC[i][j - 1].color, patchCC[i - 1][j].color, patchCC[i][j].color + }; + ShadedTriangle tmpur = new ShadedTriangle(urCorner, urColor); // upper right triangle + list.add(tmpur); + } + } + } + return list; + } + + // whether two points p0 and p1 are degenerated into one point within the coordinates' accuracy 0.001 + private boolean overlaps(Point2D p0, Point2D p1) + { + return Math.abs(p0.getX() - p1.getX()) < 0.001 && Math.abs(p0.getY() - p1.getY()) < 0.001; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java new file mode 100644 index 00000000000..af8d4d548c0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java @@ -0,0 +1,293 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.image.ColorModel; +import java.io.EOFException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.util.Matrix; + +/** + * This class is extended in Type6ShadingContext and Type7ShadingContext. This + * was done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +abstract class PatchMeshesShadingContext extends TriangleBasedShadingContext +{ + private static final Log LOG = LogFactory.getLog(PatchMeshesShadingContext.class); + + /** + * patch list + */ + private List patchList = new ArrayList<>(); + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param deviceBounds device bounds + * @param controlPoints number of control points, 12 for type 6 shading and 16 for type 7 shading + * @throws IOException if something went wrong + */ + protected PatchMeshesShadingContext(PDShadingType6 shading, ColorModel colorModel, + AffineTransform xform, Matrix matrix, Rectangle deviceBounds, + int controlPoints) throws IOException + { + super(shading, colorModel, xform, matrix); + patchList = collectPatches(shading, xform, matrix, controlPoints); + createPixelTable(deviceBounds); + } + + /** + * Create a patch list from a data stream, the returned list contains all the patches contained + * in the data stream. + * + * @param shadingType the shading type + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param controlPoints number of control points, 12 for type 6 shading and 16 for type 7 shading + * @return the obtained patch list + * @throws IOException when something went wrong + */ + @SuppressWarnings({"squid:S2583","squid:S1166"}) + final List collectPatches(PDShadingType6 shadingType, AffineTransform xform, + Matrix matrix, int controlPoints) throws IOException + { + COSDictionary dict = shadingType.getCOSObject(); + if (!(dict instanceof COSStream)) + { + return Collections.emptyList(); + } + PDRange rangeX = shadingType.getDecodeForParameter(0); + PDRange rangeY = shadingType.getDecodeForParameter(1); + if (Float.compare(rangeX.getMin(), rangeX.getMax()) == 0 || + Float.compare(rangeY.getMin(), rangeY.getMax()) == 0) + { + return Collections.emptyList(); + } + int bitsPerFlag = shadingType.getBitsPerFlag(); + PDRange[] colRange = new PDRange[numberOfColorComponents]; + for (int i = 0; i < numberOfColorComponents; ++i) + { + colRange[i] = shadingType.getDecodeForParameter(2 + i); + if (colRange[i] == null) + { + throw new IOException("Range missing in shading /Decode entry"); + } + } + List list = new ArrayList<>(); + long maxSrcCoord = (long) Math.pow(2, bitsPerCoordinate) - 1; + long maxSrcColor = (long) Math.pow(2, bitsPerColorComponent) - 1; + COSStream cosStream = (COSStream) dict; + + try (ImageInputStream mciis = new MemoryCacheImageInputStream(cosStream.createInputStream())) + { + Point2D[] implicitEdge = new Point2D[4]; + float[][] implicitCornerColor = new float[2][numberOfColorComponents]; + byte flag = 0; + + try + { + flag = (byte) (mciis.readBits(bitsPerFlag) & 3); + } + catch (EOFException ex) + { + LOG.error(ex); + } + + boolean eof = false; + while (!eof) + { + try + { + boolean isFree = (flag == 0); + Patch current = readPatch(mciis, isFree, implicitEdge, implicitCornerColor, + maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, matrix, xform, controlPoints); + if (current == null) + { + break; + } + list.add(current); + flag = (byte) (mciis.readBits(bitsPerFlag) & 3); + switch (flag) + { + case 0: + break; + case 1: + implicitEdge = current.getFlag1Edge(); + implicitCornerColor = current.getFlag1Color(); + break; + case 2: + implicitEdge = current.getFlag2Edge(); + implicitCornerColor = current.getFlag2Color(); + break; + case 3: + implicitEdge = current.getFlag3Edge(); + implicitCornerColor = current.getFlag3Color(); + break; + default: + LOG.warn("bad flag: " + flag); + break; + } + } + catch (EOFException ex) + { + eof = true; + } + } + } + return list; + } + + /** + * Read a single patch from a data stream, a patch contains information of its coordinates and + * color parameters. + * + * @param input the image source data stream + * @param isFree whether this is a free patch + * @param implicitEdge implicit edge when a patch is not free, otherwise it's not used + * @param implicitCornerColor implicit colors when a patch is not free, otherwise it's not used + * @param maxSrcCoord the maximum coordinate value calculated from source data + * @param maxSrcColor the maximum color value calculated from source data + * @param rangeX range for coordinate x + * @param rangeY range for coordinate y + * @param colRange range for color + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param xform transformation for user to device space + * @param controlPoints number of control points, 12 for type 6 shading and 16 for type 7 shading + * @return a single patch + * @throws IOException when something went wrong + */ + protected Patch readPatch(ImageInputStream input, boolean isFree, Point2D[] implicitEdge, + float[][] implicitCornerColor, long maxSrcCoord, long maxSrcColor, + PDRange rangeX, PDRange rangeY, PDRange[] colRange, Matrix matrix, + AffineTransform xform, int controlPoints) throws IOException + { + float[][] color = new float[4][numberOfColorComponents]; + Point2D[] points = new Point2D[controlPoints]; + int pStart = 4, cStart = 2; + if (isFree) + { + pStart = 0; + cStart = 0; + } + else + { + points[0] = implicitEdge[0]; + points[1] = implicitEdge[1]; + points[2] = implicitEdge[2]; + points[3] = implicitEdge[3]; + + for (int i = 0; i < numberOfColorComponents; i++) + { + color[0][i] = implicitCornerColor[0][i]; + color[1][i] = implicitCornerColor[1][i]; + } + } + + try + { + for (int i = pStart; i < controlPoints; i++) + { + long x = input.readBits(bitsPerCoordinate); + long y = input.readBits(bitsPerCoordinate); + float px = interpolate(x, maxSrcCoord, rangeX.getMin(), rangeX.getMax()); + float py = interpolate(y, maxSrcCoord, rangeY.getMin(), rangeY.getMax()); + Point2D p = matrix.transformPoint(px, py); + xform.transform(p, p); + points[i] = p; + } + for (int i = cStart; i < 4; i++) + { + for (int j = 0; j < numberOfColorComponents; j++) + { + long c = input.readBits(bitsPerColorComponent); + color[i][j] = interpolate(c, maxSrcColor, colRange[j].getMin(), + colRange[j].getMax()); + } + } + } + catch (EOFException ex) + { + LOG.debug("EOF", ex); + return null; + } + return generatePatch(points, color); + } + + /** + * Create a patch using control points and 4 corner color values, in + * Type6ShadingContext, a CoonsPatch is returned; in Type6ShadingContext, a + * TensorPatch is returned. + * + * @param points 12 or 16 control points + * @param color 4 corner colors + * @return a patch instance + */ + abstract Patch generatePatch(Point2D[] points, float[][] color); + + /** + * Get a point coordinate on a line by linear interpolation. + */ + private float interpolate(float x, long maxValue, float rangeMin, float rangeMax) + { + return rangeMin + (x / maxValue) * (rangeMax - rangeMin); + } + + @Override + protected Map calcPixelTable(Rectangle deviceBounds) throws IOException + { + Map map = new HashMap<>(); + for (Patch it : patchList) + { + super.calcPixelTable(it.listOfTriangles, map, deviceBounds); + } + return map; + } + + @Override + public void dispose() + { + patchList = null; + super.dispose(); + } + + @Override + protected boolean isDataEmpty() + { + return patchList.isEmpty(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java new file mode 100644 index 00000000000..1058654d21e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java @@ -0,0 +1,375 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.NoninvertibleTransformException; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for radial shading. + * + * Performance improvement done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +public class RadialShadingContext extends ShadingContext implements PaintContext +{ + private static final Log LOG = LogFactory.getLog(RadialShadingContext.class); + + private PDShadingType3 radialShadingType; + + private final float[] coords; + private final float[] domain; + private final boolean[] extend; + private final double x1x0; + private final double y1y0; + private final double r1r0; + private final double r0pow2; + private final float d1d0; + private final double denom; + + private final int factor; + private final int[] colorTable; + + private AffineTransform rat; + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param deviceBounds the bounds of the area to paint, in device units + * @throws IOException if there is an error getting the color space or doing color conversion. + */ + public RadialShadingContext(PDShadingType3 shading, ColorModel colorModel, + AffineTransform xform, Matrix matrix, Rectangle deviceBounds) + throws IOException + { + super(shading, colorModel, xform, matrix); + this.radialShadingType = shading; + coords = shading.getCoords().toFloatArray(); + + // domain values + if (this.radialShadingType.getDomain() != null) + { + domain = shading.getDomain().toFloatArray(); + } + else + { + // set default values + domain = new float[] { 0, 1 }; + } + + // extend values + COSArray extendValues = shading.getExtend(); + if (extendValues != null) + { + extend = new boolean[2]; + extend[0] = ((COSBoolean) extendValues.getObject(0)).getValue(); + extend[1] = ((COSBoolean) extendValues.getObject(1)).getValue(); + } + else + { + // set default values + extend = new boolean[] { false, false }; + } + // calculate some constants to be used in getRaster + x1x0 = coords[3] - coords[0]; + y1y0 = coords[4] - coords[1]; + r1r0 = coords[5] - coords[2]; + r0pow2 = Math.pow(coords[2], 2); + denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2) - Math.pow(r1r0, 2); + d1d0 = domain[1] - domain[0]; + + try + { + // get inverse transform to be independent of current user / device space + // when handling actual pixels in getRaster() + rat = matrix.createAffineTransform().createInverse(); + rat.concatenate(xform.createInverse()); + } + catch (NoninvertibleTransformException ex) + { + LOG.error(ex.getMessage() + ", matrix: " + matrix, ex); + rat = new AffineTransform(); + } + + // shading space -> device space + AffineTransform shadingToDevice = (AffineTransform)xform.clone(); + shadingToDevice.concatenate(matrix.createAffineTransform()); + + // worst case for the number of steps is opposite diagonal corners, so use that + double dist = Math.sqrt(Math.pow(deviceBounds.getMaxX() - deviceBounds.getMinX(), 2) + + Math.pow(deviceBounds.getMaxY() - deviceBounds.getMinY(), 2)); + factor = (int) Math.ceil(dist); + + // build the color table for the given number of steps + colorTable = calcColorTable(); + } + + /** + * Calculate the color on the line that connects two circles' centers and store the result in an + * array. + * + * @return an array, index denotes the relative position, the corresponding value the color + */ + private int[] calcColorTable() throws IOException + { + int[] map = new int[factor + 1]; + if (factor == 0 || Float.compare(d1d0,0) == 0) + { + float[] values = radialShadingType.evalFunction(domain[0]); + map[0] = convertToRGB(values); + } + else + { + for (int i = 0; i <= factor; i++) + { + float t = domain[0] + d1d0 * i / factor; + float[] values = radialShadingType.evalFunction(t); + map[i] = convertToRGB(values); + } + } + return map; + } + + @Override + public void dispose() + { + super.dispose(); + radialShadingType = null; + } + + @Override + public ColorModel getColorModel() + { + return super.getColorModel(); + } + + @Override + public Raster getRaster(int x, int y, int w, int h) + { + // create writable raster + WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); + float inputValue = -1; + boolean useBackground; + int[] data = new int[w * h * 4]; + for (int j = 0; j < h; j++) + { + for (int i = 0; i < w; i++) + { + float[] values = new float[] { x + i, y + j }; + rat.transform(values, 0, values, 0, 1); + useBackground = false; + float[] inputValues = calculateInputValues(values[0], values[1]); + if (Float.isNaN(inputValues[0]) && Float.isNaN(inputValues[1])) + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + else + { + // choose 1 of the 2 values + if (inputValues[0] >= 0 && inputValues[0] <= 1) + { + // both values are in the range -> choose the larger one + if (inputValues[1] >= 0 && inputValues[1] <= 1) + { + inputValue = Math.max(inputValues[0], inputValues[1]); + } + // first value is in the range, the second not -> choose first value + else + { + inputValue = inputValues[0]; + } + } + else + { + // first value is not in the range, + // but the second -> choose second value + if (inputValues[1] >= 0 && inputValues[1] <= 1) + { + inputValue = inputValues[1]; + } + // both are not in the range + else + { + if (extend[0] && extend[1]) + { + inputValue = Math.max(inputValues[0], inputValues[1]); + } + else if (extend[0]) + { + inputValue = inputValues[0]; + } + else if (extend[1]) + { + inputValue = inputValues[1]; + } + else if (getBackground() != null) + { + useBackground = true; + } + else + { + continue; + } + } + } + // input value is out of range + if (inputValue > 1) + { + // extend shading if extend[1] is true and nonzero radius + if (extend[1] && coords[5] > 0) + { + inputValue = 1; + } + else + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + } + // input value is out of range + else if (inputValue < 0) + { + // extend shading if extend[0] is true and nonzero radius + if (extend[0] && coords[2] > 0) + { + inputValue = 0; + } + else + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + } + } + int value; + if (useBackground) + { + // use the given backgound color values + value = getRgbBackground(); + } + else + { + int key = (int) (inputValue * factor); + value = colorTable[key]; + } + int index = (j * w + i) * 4; + data[index] = value & 255; + value >>= 8; + data[index + 1] = value & 255; + value >>= 8; + data[index + 2] = value & 255; + data[index + 3] = 255; + } + } + raster.setPixels(0, 0, w, h, data); + return raster; + } + + private float[] calculateInputValues(double x, double y) + { + // According to Adobes Technical Note #5600 we have to do the following + // + // x0, y0, r0 defines the start circle x1, y1, r1 defines the end circle + // + // The parametric equations for the center and radius of the gradient fill circle moving + // between the start circle and the end circle as a function of s are as follows: + // + // xc(s) = x0 + s * (x1 - x0) yc(s) = y0 + s * (y1 - y0) r(s) = r0 + s * (r1 - r0) + // + // Given a geometric coordinate position (x, y) in or along the gradient fill, the + // corresponding value of s can be determined by solving the quadratic constraint equation: + // + // [x - xc(s)]2 + [y - yc(s)]2 = [r(s)]2 + // + // The following code calculates the 2 possible values of s + // + double p = -(x - coords[0]) * x1x0 - (y - coords[1]) * y1y0 - coords[2] * r1r0; + double q = (Math.pow(x - coords[0], 2) + Math.pow(y - coords[1], 2) - r0pow2); + double root = Math.sqrt(p * p - denom * q); + float root1 = (float) ((-p + root) / denom); + float root2 = (float) ((-p - root) / denom); + if (denom < 0) + { + return new float[] { root1, root2 }; + } + else + { + return new float[] { root2, root1 }; + } + } + + /** + * Returns the coords values. + */ + public float[] getCoords() + { + return coords; + } + + /** + * Returns the domain values. + */ + public float[] getDomain() + { + return domain; + } + + /** + * Returns the extend values. + */ + public boolean[] getExtend() + { + return extend; + } + + /** + * Returns the function. + * + * @throws java.io.IOException if we were not able to create the function. + */ + public PDFunction getFunction() throws IOException + { + return radialShadingType.getFunction(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java new file mode 100644 index 00000000000..cc8e05803b1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT Paint for radial shading. + * + */ +public class RadialShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(RadialShadingPaint.class); + + /** + * Constructor. + * + * @param shading the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + RadialShadingPaint(PDShadingType3 shading, Matrix matrix) + { + super(shading, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new RadialShadingContext(shading, cm, xform, matrix, deviceBounds); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadedTriangle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadedTriangle.java new file mode 100644 index 00000000000..37672a36603 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadedTriangle.java @@ -0,0 +1,269 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Point; +import java.awt.geom.Point2D; +import java.util.HashSet; +import java.util.Set; + +/** + * This is an assistant class for accomplishing type 4, 5, 6 and 7 shading. It + * describes a triangle actually, which is used to compose a patch. It contains + * the degenerated cases, a triangle degenerates to a line or to a point. This + * was done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class ShadedTriangle +{ + protected final Point2D[] corner; // vertices coordinates of a triangle + protected final float[][] color; + private final double area; // area of the triangle + + /* + degree = 3 describes a normal triangle, + degree = 2 when a triangle degenerates to a line, + degree = 1 when a triangle degenerates to a point + */ + private final int degree; + + // describes a rasterized line when a triangle degerates to a line, otherwise null + private final Line line; + + // corner's edge (the opposite edge of a corner) equation value + private final double v0; + private final double v1; + private final double v2; + + /** + * Constructor. + * + * @param p an array of the 3 vertices of a triangle + * @param c an array of color corresponding the vertex array p + */ + ShadedTriangle(Point2D[] p, float[][] c) + { + corner = p.clone(); + color = c.clone(); + area = getArea(p[0], p[1], p[2]); + degree = calcDeg(p); + + if (degree == 2) + { + if (overlaps(corner[1], corner[2]) && !overlaps(corner[0], corner[2])) + { + Point p0 = new Point((int) Math.round(corner[0].getX()), + (int) Math.round(corner[0].getY())); + Point p1 = new Point((int) Math.round(corner[2].getX()), + (int) Math.round(corner[2].getY())); + line = new Line(p0, p1, color[0], color[2]); + } + else + { + Point p0 = new Point((int) Math.round(corner[1].getX()), + (int) Math.round(corner[1].getY())); + Point p1 = new Point((int) Math.round(corner[2].getX()), + (int) Math.round(corner[2].getY())); + line = new Line(p0, p1, color[1], color[2]); + } + } + else + { + line = null; + } + + v0 = edgeEquationValue(p[0], p[1], p[2]); + v1 = edgeEquationValue(p[1], p[2], p[0]); + v2 = edgeEquationValue(p[2], p[0], p[1]); + } + + /** + * Calculate the degree value of a triangle. + * + * @param p 3 vertices coordinates + * @return number of unique points in the 3 vertices of a triangle, 3, 2 or + * 1 + */ + private int calcDeg(Point2D[] p) + { + Set set = new HashSet<>(); + for (Point2D itp : p) + { + Point np = new Point((int) Math.round(itp.getX() * 1000), (int) Math.round(itp.getY() * 1000)); + set.add(np); + } + return set.size(); + } + + public int getDeg() + { + return degree; + } + + /** + * get the boundary of a triangle. + * + * @return {xmin, xmax, ymin, ymax} + */ + public int[] getBoundary() + { + int[] boundary = new int[4]; + int x0 = (int) Math.round(corner[0].getX()); + int x1 = (int) Math.round(corner[1].getX()); + int x2 = (int) Math.round(corner[2].getX()); + int y0 = (int) Math.round(corner[0].getY()); + int y1 = (int) Math.round(corner[1].getY()); + int y2 = (int) Math.round(corner[2].getY()); + + boundary[0] = Math.min(Math.min(x0, x1), x2); + boundary[1] = Math.max(Math.max(x0, x1), x2); + boundary[2] = Math.min(Math.min(y0, y1), y2); + boundary[3] = Math.max(Math.max(y0, y1), y2); + + return boundary; + } + + /** + * Get the line of a triangle. + * + * @return points of the line, or null if this triangle isn't a line + */ + public Line getLine() + { + return line; + } + + /** + * Whether a point is contained in this ShadedTriangle. + * + * @param p the target point + * @return false if p is outside of this triangle, otherwise true + */ + public boolean contains(Point2D p) + { + if (degree == 1) + { + return overlaps(corner[0], p) | overlaps(corner[1], p) | overlaps(corner[2], p); + } + else if (degree == 2) + { + Point tp = new Point((int) Math.round(p.getX()), (int) Math.round(p.getY())); + return line.linePoints.contains(tp); + } + + /* + the following code judges whether a point is contained in a normal triangle, + taking the on edge case as contained + */ + double pv0 = edgeEquationValue(p, corner[1], corner[2]); + /* + if corner[0] and point p are on different sides of line from corner[1] to corner[2], + p is outside of the triangle + */ + if (pv0 * v0 < 0) + { + return false; + } + double pv1 = edgeEquationValue(p, corner[2], corner[0]); + /* + if vertex corner[1] and point p are on different sides of line from corner[2] to corner[0], + p is outside of the triangle + */ + if (pv1 * v1 < 0) + { + return false; + } + double pv2 = edgeEquationValue(p, corner[0], corner[1]); + /* + only left one case: + if corner[1] and point p are on different sides of line from corner[2] to corner[0], + p is outside of the triangle, otherwise p is contained in the triangle + */ + return pv2 * v2 >= 0; // !(pv2 * v2 < 0) + } + + /* + check whether two points overlaps each other, as points' coordinates are + of type double, the coordinates' accuracy used here is 0.001 + */ + private boolean overlaps(Point2D p0, Point2D p1) + { + return Math.abs(p0.getX() - p1.getX()) < 0.001 && Math.abs(p0.getY() - p1.getY()) < 0.001; + } + + /* + two points can define a line equation, adjust the form of the equation to + let the rhs equals 0, calculate the lhs value by plugging the coordinate + of p in the lhs expression + */ + private double edgeEquationValue(Point2D p, Point2D p1, Point2D p2) + { + return (p2.getY() - p1.getY()) * (p.getX() - p1.getX()) + - (p2.getX() - p1.getX()) * (p.getY() - p1.getY()); + } + + // calcuate the area of a triangle + private double getArea(Point2D a, Point2D b, Point2D c) + { + return Math.abs((c.getX() - b.getX()) * (c.getY() - a.getY()) + - (c.getX() - a.getX()) * (c.getY() - b.getY())) / 2.0; + } + + /** + * Calculate the color of a point. + * + * @param p the target point + * @return an array denotes the point's color + */ + public float[] calcColor(Point2D p) + { + int numberOfColorComponents = color[0].length; + float[] pCol = new float[numberOfColorComponents]; + + switch (degree) + { + case 1: + for (int i = 0; i < numberOfColorComponents; i++) + { + // average + pCol[i] = (color[0][i] + color[1][i] + color[2][i]) / 3.0f; + } + break; + case 2: + // linear interpolation + Point tp = new Point((int) Math.round(p.getX()), (int) Math.round(p.getY())); + return line.calcColor(tp); + default: + float aw = (float) (getArea(p, corner[1], corner[2]) / area); + float bw = (float) (getArea(p, corner[2], corner[0]) / area); + float cw = (float) (getArea(p, corner[0], corner[1]) / area); + for (int i = 0; i < numberOfColorComponents; i++) + { + // barycentric interpolation + pCol[i] = color[0][i] * aw + color[1][i] * bw + color[2][i] * cw; + } + break; + } + return pCol; + } + + @Override + public String toString() + { + return corner[0] + " " + corner[1] + " " + corner[2]; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java new file mode 100644 index 00000000000..7700309ba06 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java @@ -0,0 +1,124 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Transparency; +import java.awt.color.ColorSpace; +import java.awt.geom.AffineTransform; +import java.awt.image.ColorModel; +import java.awt.image.ComponentColorModel; +import java.awt.image.DataBuffer; +import java.io.IOException; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.util.Matrix; + +/** + * A base class to handle what is common to all shading types. + * + * @author Shaola Ren + * @author Tilman Hausherr + */ +public abstract class ShadingContext +{ + private float[] background; + private int rgbBackground; + private final PDShading shading; + private ColorModel outputColorModel; + private PDColorSpace shadingColorSpace; + + /** + * Constructor. + * + * @param shading the shading type to be used + * @param cm the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @throws java.io.IOException if there is an error getting the color space + * or doing background color conversion. + */ + public ShadingContext(PDShading shading, ColorModel cm, AffineTransform xform, + Matrix matrix) throws IOException + { + this.shading = shading; + shadingColorSpace = shading.getColorSpace(); + + // create the output color model using RGB+alpha as color space + ColorSpace outputCS = ColorSpace.getInstance(ColorSpace.CS_sRGB); + outputColorModel = new ComponentColorModel(outputCS, true, false, Transparency.TRANSLUCENT, + DataBuffer.TYPE_BYTE); + + // get background values if available + COSArray bg = shading.getBackground(); + if (bg != null) + { + background = bg.toFloatArray(); + rgbBackground = convertToRGB(background); + } + } + + PDColorSpace getShadingColorSpace() + { + return shadingColorSpace; + } + + PDShading getShading() + { + return shading; + } + + float[] getBackground() + { + return background; + } + + int getRgbBackground() + { + return rgbBackground; + } + + /** + * Convert color values from shading colorspace to RGB color values encoded + * into an integer. + * + * @param values color values in shading colorspace. + * @return RGB values encoded in an integer. + * @throws java.io.IOException if the color conversion fails. + */ + final int convertToRGB(float[] values) throws IOException + { + int normRGBValues; + + float[] rgbValues = shadingColorSpace.toRGB(values); + normRGBValues = (int) (rgbValues[0] * 255); + normRGBValues |= (int) (rgbValues[1] * 255) << 8; + normRGBValues |= (int) (rgbValues[2] * 255) << 16; + + return normRGBValues; + } + + ColorModel getColorModel() + { + return outputColorModel; + } + + void dispose() + { + outputColorModel = null; + shadingColorSpace = null; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingPaint.java new file mode 100644 index 00000000000..38b4fafc3d5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingPaint.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Paint; + +import org.apache.pdfbox.util.Matrix; + +/** + * This is base class for all PDShading-Paints to allow other low level libraries access to the + * shading source data. One user of this interface is the PdfBoxGraphics2D-adapter. + * + * @param the actual PDShading class. + */ +public abstract class ShadingPaint implements Paint +{ + protected final T shading; + protected final Matrix matrix; + + ShadingPaint(T shading, Matrix matrix) + { + this.shading = shading; + this.matrix = matrix; + } + + /** + * @return the PDShading of this paint + */ + public T getShading() + { + return shading; + } + + /** + * @return the active Matrix of this paint + */ + public Matrix getMatrix() + { + return matrix; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TensorPatch.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TensorPatch.java new file mode 100644 index 00000000000..6b5cea3819c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TensorPatch.java @@ -0,0 +1,274 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.geom.Point2D; +import java.util.List; + +/** + * This class is used to describe a patch for type 7 shading. This was done as + * part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class TensorPatch extends Patch +{ + /** + * Constructor of a patch for type 7 shading. + * + * @param tcp 16 control points + * @param color 4 corner colors + */ + protected TensorPatch(Point2D[] tcp, float[][] color) + { + super(tcp, color); + controlPoints = reshapeControlPoints(tcp); + level = calcLevel(); + listOfTriangles = getTriangles(); + } + + /* + order the 16 1d points to a square matrix which is as the one described + in p.199 of PDF3200_2008.pdf rotated 90 degrees clockwise + */ + private Point2D[][] reshapeControlPoints(Point2D[] tcp) + { + Point2D[][] square = new Point2D[4][4]; + for (int i = 0; i <= 3; i++) + { + square[0][i] = tcp[i]; + square[3][i] = tcp[9 - i]; + } + for (int i = 1; i <= 2; i++) + { + square[i][0] = tcp[12 - i]; + square[i][2] = tcp[12 + i]; + square[i][3] = tcp[3 + i]; + } + square[1][1] = tcp[12]; + square[2][1] = tcp[15]; + return square; + } + + // calculate the dividing level from the control points + private int[] calcLevel() + { + int[] l = + { + 4, 4 + }; + + Point2D[] ctlC1 = new Point2D[4]; + Point2D[] ctlC2 = new Point2D[4]; + for (int j = 0; j < 4; j++) + { + ctlC1[j] = controlPoints[j][0]; + ctlC2[j] = controlPoints[j][3]; + } + // if two opposite edges are both lines, there is a possibility to reduce the dividing level + if (isEdgeALine(ctlC1) && isEdgeALine(ctlC2)) + { + /* + if any of the 4 inner control points is out of the patch formed by the 4 edges, + keep the high dividing level, + otherwise, determine the dividing level by the lengths of edges + */ + if (isOnSameSideCC(controlPoints[1][1]) || isOnSameSideCC(controlPoints[1][2]) + || isOnSameSideCC(controlPoints[2][1]) || isOnSameSideCC(controlPoints[2][2])) + { + // keep the high dividing level + } + else + { + // length's unit is one pixel in device space + double lc1 = getLen(ctlC1[0], ctlC1[3]), lc2 = getLen(ctlC2[0], ctlC2[3]); + if (lc1 > 800 || lc2 > 800) + { + // keeps init value 4 + } + else if (lc1 > 400 || lc2 > 400) + { + l[0] = 3; + } + else if (lc1 > 200 || lc2 > 200) + { + l[0] = 2; + } + else + { + l[0] = 1; + } + } + } + + // the other two opposite edges + if (isEdgeALine(controlPoints[0]) && isEdgeALine(controlPoints[3])) + { + if (isOnSameSideDD(controlPoints[1][1]) || isOnSameSideDD(controlPoints[1][2]) + || isOnSameSideDD(controlPoints[2][1]) || isOnSameSideDD(controlPoints[2][2])) + { + // keep the high dividing level + } + else + { + double ld1 = getLen(controlPoints[0][0], controlPoints[0][3]); + double ld2 = getLen(controlPoints[3][0], controlPoints[3][3]); + if (ld1 > 800 || ld2 > 800) + { + // keeps init value 4 + } + else if (ld1 > 400 || ld2 > 400) + { + l[1] = 3; + } + else if (ld1 > 200 || ld2 > 200) + { + l[1] = 2; + } + else + { + l[1] = 1; + } + } + } + return l; + } + + // whether a point is on the same side of edge C1 and edge C2 + private boolean isOnSameSideCC(Point2D p) + { + double cc = edgeEquationValue(p, controlPoints[0][0], controlPoints[3][0]) + * edgeEquationValue(p, controlPoints[0][3], controlPoints[3][3]); + return cc > 0; + } + + // whether a point is on the same side of edge D1 and edge D2 + private boolean isOnSameSideDD(Point2D p) + { + double dd = edgeEquationValue(p, controlPoints[0][0], controlPoints[0][3]) + * edgeEquationValue(p, controlPoints[3][0], controlPoints[3][3]); + return dd > 0; + } + + // get a list of triangles which compose this tensor patch + private List getTriangles() + { + CoordinateColorPair[][] patchCC = getPatchCoordinatesColor(); + return getShadedTriangles(patchCC); + } + + @Override + protected Point2D[] getFlag1Edge() + { + Point2D[] implicitEdge = new Point2D[4]; + for (int i = 0; i < 4; i++) + { + implicitEdge[i] = controlPoints[i][3]; + } + return implicitEdge; + } + + @Override + protected Point2D[] getFlag2Edge() + { + Point2D[] implicitEdge = new Point2D[4]; + for (int i = 0; i < 4; i++) + { + implicitEdge[i] = controlPoints[3][3 - i]; + } + return implicitEdge; + } + + @Override + protected Point2D[] getFlag3Edge() + { + Point2D[] implicitEdge = new Point2D[4]; + for (int i = 0; i < 4; i++) + { + implicitEdge[i] = controlPoints[3 - i][0]; + } + return implicitEdge; + } + + /* + dividing a patch into a grid according to level, then calculate the coordinate and color of + each crossing point in the grid, the rule to calculate the coordinate is tensor-product which + is defined in page 119 of PDF32000_2008.pdf, the method to calculate the cooresponding color is + bilinear interpolation + */ + private CoordinateColorPair[][] getPatchCoordinatesColor() + { + int numberOfColorComponents = cornerColor[0].length; + double[][] bernsteinPolyU = getBernsteinPolynomials(level[0]); + int szU = bernsteinPolyU[0].length; + double[][] bernsteinPolyV = getBernsteinPolynomials(level[1]); + int szV = bernsteinPolyV[0].length; + CoordinateColorPair[][] patchCC = new CoordinateColorPair[szV][szU]; + + double stepU = 1.0 / (szU - 1); + double stepV = 1.0 / (szV - 1); + double v = -stepV; + for (int k = 0; k < szV; k++) + { + // v and u are the assistant parameters + v += stepV; + double u = -stepU; + for (int l = 0; l < szU; l++) + { + double tmpx = 0.0; + double tmpy = 0.0; + // these two "for" loops are for the equation to define the patch surface (coordinates) + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + tmpx += controlPoints[i][j].getX() * bernsteinPolyU[i][l] * bernsteinPolyV[j][k]; + tmpy += controlPoints[i][j].getY() * bernsteinPolyU[i][l] * bernsteinPolyV[j][k]; + } + } + Point2D tmpC = new Point2D.Double(tmpx, tmpy); + + u += stepU; + float[] paramSC = new float[numberOfColorComponents]; + for (int ci = 0; ci < numberOfColorComponents; ci++) + { + paramSC[ci] = (float) ((1 - v) * ((1 - u) * cornerColor[0][ci] + u * cornerColor[3][ci]) + + v * ((1 - u) * cornerColor[1][ci] + u * cornerColor[2][ci])); // bilinear interpolation + } + patchCC[k][l] = new CoordinateColorPair(tmpC, paramSC); + } + } + return patchCC; + } + + // Bernstein polynomials which are defined in page 119 of PDF32000_2008.pdf + private double[][] getBernsteinPolynomials(int lvl) + { + int sz = (1 << lvl) + 1; + double[][] poly = new double[4][sz]; + double step = 1.0 / (sz - 1); + double t = -step; + for (int i = 0; i < sz; i++) + { + t += step; + poly[0][i] = (1 - t) * (1 - t) * (1 - t); + poly[1][i] = 3 * t * (1 - t) * (1 - t); + poly[2][i] = 3 * t * t * (1 - t); + poly[3][i] = t * t * t; + } + return poly; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java new file mode 100644 index 00000000000..20079bebb15 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java @@ -0,0 +1,222 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.PaintContext; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * Intermediate class extended by the shading types 4,5,6 and 7 that contains the common methods + * used by these classes. + * + * @author Shaola Ren + * @author Tilman Hausherr + */ +abstract class TriangleBasedShadingContext extends ShadingContext implements PaintContext +{ + private static final Log LOG = LogFactory.getLog(TriangleBasedShadingContext.class); + + protected int bitsPerCoordinate; + protected int bitsPerColorComponent; + protected int numberOfColorComponents; + + private final boolean hasFunction; + + // map of pixels within triangles to their RGB color + private Map pixelTable; + + /** + * Constructor. + * + * @param shading the shading type to be used + * @param cm the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @throws IOException if there is an error getting the color space or doing background color conversion. + */ + TriangleBasedShadingContext(PDShading shading, ColorModel cm, AffineTransform xform, + Matrix matrix) throws IOException + { + super(shading, cm, xform, matrix); + PDTriangleBasedShadingType triangleBasedShadingType = (PDTriangleBasedShadingType) shading; + hasFunction = shading.getFunction() != null; + bitsPerCoordinate = triangleBasedShadingType.getBitsPerCoordinate(); + LOG.debug("bitsPerCoordinate: " + (Math.pow(2, bitsPerCoordinate) - 1)); + bitsPerColorComponent = triangleBasedShadingType.getBitsPerComponent(); + LOG.debug("bitsPerColorComponent: " + bitsPerColorComponent); + numberOfColorComponents = hasFunction ? 1 : getShadingColorSpace().getNumberOfComponents(); + LOG.debug("numberOfColorComponents: " + numberOfColorComponents); + } + + /** + * Creates the pixel table. + */ + protected final void createPixelTable(Rectangle deviceBounds) throws IOException + { + pixelTable = calcPixelTable(deviceBounds); + } + + /** + * Calculate every point and its color and store them in a Hash table. + * + * @return a Hash table which contains all the points' positions and colors of one image + */ + abstract Map calcPixelTable(Rectangle deviceBounds) throws IOException; + + /** + * Get the points from the triangles, calculate their color and add point-color mappings. + */ + protected void calcPixelTable(List triangleList, Map map, + Rectangle deviceBounds) throws IOException + { + for (ShadedTriangle tri : triangleList) + { + int degree = tri.getDeg(); + if (degree == 2) + { + Line line = tri.getLine(); + for (Point p : line.linePoints) + { + map.put(p, evalFunctionAndConvertToRGB(line.calcColor(p))); + } + } + else + { + int[] boundary = tri.getBoundary(); + boundary[0] = Math.max(boundary[0], deviceBounds.x); + boundary[1] = Math.min(boundary[1], deviceBounds.x + deviceBounds.width); + boundary[2] = Math.max(boundary[2], deviceBounds.y); + boundary[3] = Math.min(boundary[3], deviceBounds.y + deviceBounds.height); + for (int x = boundary[0]; x <= boundary[1]; x++) + { + for (int y = boundary[2]; y <= boundary[3]; y++) + { + Point p = new IntPoint(x, y); + if (tri.contains(p)) + { + map.put(p, evalFunctionAndConvertToRGB(tri.calcColor(p))); + } + } + } + + // "fatten" triangle by drawing the borders with Bresenham's line algorithm + // Inspiration: Raph Levien in http://bugs.ghostscript.com/show_bug.cgi?id=219588 + Point p0 = new IntPoint((int) Math.round(tri.corner[0].getX()), + (int) Math.round(tri.corner[0].getY())); + Point p1 = new IntPoint((int) Math.round(tri.corner[1].getX()), + (int) Math.round(tri.corner[1].getY())); + Point p2 = new IntPoint((int) Math.round(tri.corner[2].getX()), + (int) Math.round(tri.corner[2].getY())); + Line l1 = new Line(p0, p1, tri.color[0], tri.color[1]); + Line l2 = new Line(p1, p2, tri.color[1], tri.color[2]); + Line l3 = new Line(p2, p0, tri.color[2], tri.color[0]); + for (Point p : l1.linePoints) + { + map.put(p, evalFunctionAndConvertToRGB(l1.calcColor(p))); + } + for (Point p : l2.linePoints) + { + map.put(p, evalFunctionAndConvertToRGB(l2.calcColor(p))); + } + for (Point p : l3.linePoints) + { + map.put(p, evalFunctionAndConvertToRGB(l3.calcColor(p))); + } + } + } + } + + /** + * Convert color to RGB color value, using function if required, then convert from the shading + * color space to an RGB value, which is encoded into an integer. + */ + private int evalFunctionAndConvertToRGB(float[] values) throws IOException + { + if (hasFunction) + { + values = getShading().evalFunction(values); + } + return convertToRGB(values); + } + + /** + * Returns true if the shading has an empty data stream. + */ + abstract boolean isDataEmpty(); + + @Override + public final ColorModel getColorModel() + { + return super.getColorModel(); + } + + @Override + public void dispose() + { + super.dispose(); + } + + @Override + public final Raster getRaster(int x, int y, int w, int h) + { + WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); + int[] data = new int[w * h * 4]; + if (!isDataEmpty() || getBackground() != null) + { + for (int row = 0; row < h; row++) + { + for (int col = 0; col < w; col++) + { + Point p = new IntPoint(x + col, y + row); + int value; + Integer v = pixelTable.get(p); + if (v != null) + { + value = v; + } + else + { + if (getBackground() == null) + { + continue; + } + value = getRgbBackground(); + } + int index = (row * w + col) * 4; + data[index] = value & 255; + value >>= 8; + data[index + 1] = value & 255; + value >>= 8; + data[index + 2] = value & 255; + data[index + 3] = 255; + } + } + } + raster.setPixels(0, 0, w, h, data); + return raster; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java new file mode 100644 index 00000000000..d2f95bcbfd6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java @@ -0,0 +1,166 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.PaintContext; +import java.awt.geom.AffineTransform; +import java.awt.geom.NoninvertibleTransformException; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for function-based (Type 1) shading. + * + * @author Tilman Hausherr + */ +class Type1ShadingContext extends ShadingContext implements PaintContext +{ + private static final Log LOG = LogFactory.getLog(Type1ShadingContext.class); + + private PDShadingType1 type1ShadingType; + private AffineTransform rat; + private final float[] domain; + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type1ShadingContext(PDShadingType1 shading, ColorModel colorModel, AffineTransform xform, + Matrix matrix) throws IOException + { + super(shading, colorModel, xform, matrix); + this.type1ShadingType = shading; + + // (Optional) An array of four numbers [ xmin xmax ymin ymax ] + // specifying the rectangular domain of coordinates over which the + // color function(s) are defined. Default value: [ 0.0 1.0 0.0 1.0 ]. + if (shading.getDomain() != null) + { + domain = shading.getDomain().toFloatArray(); + } + else + { + domain = new float[] { 0, 1, 0, 1 }; + } + + try + { + // get inverse transform to be independent of + // shading matrix and current user / device space + // when handling actual pixels in getRaster() + rat = shading.getMatrix().createAffineTransform().createInverse(); + rat.concatenate(matrix.createAffineTransform().createInverse()); + rat.concatenate(xform.createInverse()); + } + catch (NoninvertibleTransformException ex) + { + LOG.error(ex.getMessage() + ", matrix: " + matrix, ex); + rat = new AffineTransform(); + } + } + + @Override + public void dispose() + { + super.dispose(); + + type1ShadingType = null; + } + + @Override + public ColorModel getColorModel() + { + return super.getColorModel(); + } + + @Override + public Raster getRaster(int x, int y, int w, int h) + { + WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); + int[] data = new int[w * h * 4]; + for (int j = 0; j < h; j++) + { + for (int i = 0; i < w; i++) + { + int index = (j * w + i) * 4; + boolean useBackground = false; + float[] values = new float[] { x + i, y + j }; + rat.transform(values, 0, values, 0, 1); + if (values[0] < domain[0] || values[0] > domain[1] || + values[1] < domain[2] || values[1] > domain[3]) + { + if (getBackground() == null) + { + continue; + } + useBackground = true; + } + + // evaluate function + if (useBackground) + { + values = getBackground(); + } + else + { + try + { + values = type1ShadingType.evalFunction(values); + } + catch (IOException e) + { + LOG.error("error while processing a function", e); + } + } + + // convert color values from shading color space to RGB + PDColorSpace shadingColorSpace = getShadingColorSpace(); + if (shadingColorSpace != null) + { + try + { + values = shadingColorSpace.toRGB(values); + } + catch (IOException e) + { + LOG.error("error processing color space", e); + } + } + data[index] = (int) (values[0] * 255); + data[index + 1] = (int) (values[1] * 255); + data[index + 2] = (int) (values[2] * 255); + data[index + 3] = 255; + } + } + raster.setPixels(0, 0, w, h, data); + return raster; + } + + public float[] getDomain() + { + return domain; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java new file mode 100644 index 00000000000..e8bb4e08d6a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for function-based (Type 1) shading. + */ +class Type1ShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(Type1ShadingPaint.class); + + /** + * Constructor. + * + * @param shading the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type1ShadingPaint(PDShadingType1 shading, Matrix matrix) + { + super(shading, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new Type1ShadingContext(shading, cm, xform, matrix); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java new file mode 100644 index 00000000000..d023a675063 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java @@ -0,0 +1,175 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.image.ColorModel; +import java.io.EOFException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for Gouraud Triangle Mesh (Type 4) shading. + * + * @author Tilman Hausherr + * @author Shaola Ren + */ +class Type4ShadingContext extends GouraudShadingContext +{ + private static final Log LOG = LogFactory.getLog(Type4ShadingContext.class); + private final int bitsPerFlag; + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param cm the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type4ShadingContext(PDShadingType4 shading, ColorModel cm, AffineTransform xform, + Matrix matrix, Rectangle deviceBounds) throws IOException + { + super(shading, cm, xform, matrix); + LOG.debug("Type4ShadingContext"); + + bitsPerFlag = shading.getBitsPerFlag(); + //TODO handle cases where bitperflag isn't 8 + LOG.debug("bitsPerFlag: " + bitsPerFlag); + setTriangleList(collectTriangles(shading, xform, matrix)); + createPixelTable(deviceBounds); + } + + @SuppressWarnings("squid:S1166") + private List collectTriangles(PDShadingType4 freeTriangleShadingType, AffineTransform xform, Matrix matrix) + throws IOException + { + COSDictionary dict = freeTriangleShadingType.getCOSObject(); + if (!(dict instanceof COSStream)) + { + return Collections.emptyList(); + } + PDRange rangeX = freeTriangleShadingType.getDecodeForParameter(0); + PDRange rangeY = freeTriangleShadingType.getDecodeForParameter(1); + if (Float.compare(rangeX.getMin(), rangeX.getMax()) == 0 || + Float.compare(rangeY.getMin(), rangeY.getMax()) == 0) + { + return Collections.emptyList(); + } + PDRange[] colRange = new PDRange[numberOfColorComponents]; + for (int i = 0; i < numberOfColorComponents; ++i) + { + colRange[i] = freeTriangleShadingType.getDecodeForParameter(2 + i); + } + List list = new ArrayList<>(); + long maxSrcCoord = (long) Math.pow(2, bitsPerCoordinate) - 1; + long maxSrcColor = (long) Math.pow(2, bitsPerColorComponent) - 1; + COSStream stream = (COSStream) dict; + + try (ImageInputStream mciis = new MemoryCacheImageInputStream(stream.createInputStream())) + { + byte flag = (byte) 0; + try + { + flag = (byte) (mciis.readBits(bitsPerFlag) & 3); + } + catch (EOFException ex) + { + LOG.error(ex); + } + + boolean eof = false; + while (!eof) + { + Vertex p0, p1, p2; + Point2D[] ps; + float[][] cs; + int lastIndex; + try + { + switch (flag) + { + case 0: + p0 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, + matrix, xform); + flag = (byte) (mciis.readBits(bitsPerFlag) & 3); + if (flag != 0) + { + LOG.error("bad triangle: " + flag); + } + p1 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, + matrix, xform); + mciis.readBits(bitsPerFlag); + if (flag != 0) + { + LOG.error("bad triangle: " + flag); + } + p2 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, + matrix, xform); + ps = new Point2D[] { p0.point, p1.point, p2.point }; + cs = new float[][] { p0.color, p1.color, p2.color }; + list.add(new ShadedTriangle(ps, cs)); + flag = (byte) (mciis.readBits(bitsPerFlag) & 3); + break; + case 1: + case 2: + lastIndex = list.size() - 1; + if (lastIndex < 0) + { + LOG.error("broken data stream: " + list.size()); + } + else + { + ShadedTriangle preTri = list.get(lastIndex); + p2 = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, + colRange, matrix, xform); + ps = new Point2D[] { flag == 1 ? preTri.corner[1] : preTri.corner[0], + preTri.corner[2], + p2.point }; + cs = new float[][] { flag == 1 ? preTri.color[1] : preTri.color[0], + preTri.color[2], + p2.color }; + list.add(new ShadedTriangle(ps, cs)); + flag = (byte) (mciis.readBits(bitsPerFlag) & 3); + } + break; + default: + LOG.warn("bad flag: " + flag); + break; + } + } + catch (EOFException ex) + { + eof = true; + } + } + } + return list; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java new file mode 100644 index 00000000000..c5ba9c5704c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for Gouraud Triangle Mesh (Type 4) shading. + */ +class Type4ShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(Type4ShadingPaint.class); + + /** + * Constructor. + * + * @param shading the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type4ShadingPaint(PDShadingType4 shading, Matrix matrix) + { + super(shading, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new Type4ShadingContext(shading, cm, xform, matrix, deviceBounds); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java new file mode 100644 index 00000000000..c3d2f93ef29 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.image.ColorModel; +import java.io.EOFException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.imageio.stream.ImageInputStream; +import javax.imageio.stream.MemoryCacheImageInputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.PDRange; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for Gouraud Triangle Lattice (Type 5) shading. + * + * @author Tilman Hausherr + * @author Shaola Ren + */ +class Type5ShadingContext extends GouraudShadingContext +{ + private static final Log LOG = LogFactory.getLog(Type5ShadingContext.class); + + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param cm the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @throws IOException if something went wrong + */ + Type5ShadingContext(PDShadingType5 shading, ColorModel cm, AffineTransform xform, + Matrix matrix, Rectangle deviceBounds) throws IOException + { + super(shading, cm, xform, matrix); + + LOG.debug("Type5ShadingContext"); + + setTriangleList(collectTriangles(shading, xform, matrix)); + createPixelTable(deviceBounds); + } + + @SuppressWarnings("squid:S1166") + private List collectTriangles(PDShadingType5 latticeTriangleShadingType, + AffineTransform xform, Matrix matrix) throws IOException + { + COSDictionary dict = latticeTriangleShadingType.getCOSObject(); + if (!(dict instanceof COSStream)) + { + return Collections.emptyList(); + } + PDRange rangeX = latticeTriangleShadingType.getDecodeForParameter(0); + PDRange rangeY = latticeTriangleShadingType.getDecodeForParameter(1); + if (Float.compare(rangeX.getMin(), rangeX.getMax()) == 0 || + Float.compare(rangeY.getMin(), rangeY.getMax()) == 0) + { + return Collections.emptyList(); + } + int numPerRow = latticeTriangleShadingType.getVerticesPerRow(); + PDRange[] colRange = new PDRange[numberOfColorComponents]; + for (int i = 0; i < numberOfColorComponents; ++i) + { + colRange[i] = latticeTriangleShadingType.getDecodeForParameter(2 + i); + } + List vlist = new ArrayList<>(); + long maxSrcCoord = (long) Math.pow(2, bitsPerCoordinate) - 1; + long maxSrcColor = (long) Math.pow(2, bitsPerColorComponent) - 1; + COSStream cosStream = (COSStream) dict; + + try (ImageInputStream mciis = new MemoryCacheImageInputStream(cosStream.createInputStream())) + { + boolean eof = false; + while (!eof) + { + Vertex p; + try + { + p = readVertex(mciis, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRange, matrix, xform); + vlist.add(p); + } + catch (EOFException ex) + { + eof = true; + } + } + } + int sz = vlist.size(), rowNum = sz / numPerRow; + Vertex[][] latticeArray = new Vertex[rowNum][numPerRow]; + List list = new ArrayList<>(); + if (rowNum < 2) + { + // must have at least two rows; if not, return empty list + return list; + } + for (int i = 0; i < rowNum; i++) + { + for (int j = 0; j < numPerRow; j++) + { + latticeArray[i][j] = vlist.get(i * numPerRow + j); + } + } + + for (int i = 0; i < rowNum - 1; i++) + { + for (int j = 0; j < numPerRow - 1; j++) + { + Point2D[] ps = new Point2D[] { + latticeArray[i][j].point, + latticeArray[i][j + 1].point, + latticeArray[i + 1][j].point }; + + float[][] cs = new float[][] { + latticeArray[i][j].color, + latticeArray[i][j + 1].color, + latticeArray[i + 1][j].color }; + + list.add(new ShadedTriangle(ps, cs)); + + ps = new Point2D[] { + latticeArray[i][j + 1].point, + latticeArray[i + 1][j].point, + latticeArray[i + 1][j + 1].point }; + + cs = new float[][]{ + latticeArray[i][j + 1].color, + latticeArray[i + 1][j].color, + latticeArray[i + 1][j + 1].color }; + + list.add(new ShadedTriangle(ps, cs)); + } + } + return list; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java new file mode 100644 index 00000000000..2c9d62c3f64 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT Paint for Gouraud Triangle Lattice (Type 5) shading. + */ +class Type5ShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(Type5ShadingPaint.class); + + /** + * Constructor. + * + * @param shading the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type5ShadingPaint(PDShadingType5 shading, Matrix matrix) + { + super(shading, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new Type5ShadingContext(shading, cm, xform, matrix, deviceBounds); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java new file mode 100644 index 00000000000..c6e802cad38 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java @@ -0,0 +1,54 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for coons patch meshes (type 6) shading. This was done as + * part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class Type6ShadingContext extends PatchMeshesShadingContext +{ + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param deviceBounds device bounds + * @throws IOException if something went wrong + */ + Type6ShadingContext(PDShadingType6 shading, ColorModel colorModel, AffineTransform xform, + Matrix matrix, Rectangle deviceBounds) throws IOException + { + super(shading, colorModel, xform, matrix, deviceBounds, 12); + } + + @Override + protected Patch generatePatch(Point2D[] points, float[][] color) + { + return new CoonsPatch(points, color); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingPaint.java new file mode 100644 index 00000000000..d023eb67691 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingPaint.java @@ -0,0 +1,71 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT Paint for coons patch meshes (Type 6) shading. This was done as part of + * GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class Type6ShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(Type6ShadingPaint.class); + + /** + * Constructor. + * + * @param shading the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type6ShadingPaint(PDShadingType6 shading, Matrix matrix) + { + super(shading, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new Type6ShadingContext(shading, cm, xform, matrix, deviceBounds); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java new file mode 100644 index 00000000000..2215e26985f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java @@ -0,0 +1,54 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT PaintContext for tensor-product patch meshes (type 7) shading. This was + * done as part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class Type7ShadingContext extends PatchMeshesShadingContext +{ + /** + * Constructor creates an instance to be used for fill operations. + * + * @param shading the shading type to be used + * @param colorModel the color model to be used + * @param xform transformation for user to device space + * @param matrix the pattern matrix concatenated with that of the parent content stream + * @param deviceBounds device bounds + * @throws IOException if something went wrong + */ + Type7ShadingContext(PDShadingType7 shading, ColorModel colorModel, AffineTransform xform, + Matrix matrix, Rectangle deviceBounds) throws IOException + { + super(shading, colorModel, xform, matrix, deviceBounds, 16); + } + + @Override + protected Patch generatePatch(Point2D[] points, float[][] color) + { + return new TensorPatch(points, color); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingPaint.java new file mode 100644 index 00000000000..974436931fb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingPaint.java @@ -0,0 +1,71 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.Color; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.ColorModel; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT Paint for tensor-product patch meshes (Type 7) shading. This was done as + * part of GSoC2014, Tilman Hausherr is the mentor. + * + * @author Shaola Ren + */ +class Type7ShadingPaint extends ShadingPaint +{ + private static final Log LOG = LogFactory.getLog(Type7ShadingPaint.class); + + /** + * Constructor. + * + * @param shading the shading resources + * @param matrix the pattern matrix concatenated with that of the parent content stream + */ + Type7ShadingPaint(PDShadingType7 shading, Matrix matrix) + { + super(shading, matrix); + } + + @Override + public int getTransparency() + { + return 0; + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + try + { + return new Type7ShadingContext(shading, cm, xform, matrix, deviceBounds); + } + catch (IOException e) + { + LOG.error("An error occurred while painting", e); + return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Vertex.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Vertex.java new file mode 100644 index 00000000000..a413c993d6a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Vertex.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.shading; + +import java.awt.geom.Point2D; + +/** + * Vertex for Type 4 and Type 5 shadings. + * + * @author Tilman Hausherr + */ +class Vertex +{ + public Point2D point; + public float[] color; + + Vertex(Point2D p, float[] c) + { + point = p; + color = c.clone(); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(); + for (float f : color) + { + if (sb.length() > 0) + { + sb.append(' '); + } + sb.append(String.format("%3.2f", f)); + } + return "Vertex{ " + point + ", colors=[" + sb + "] }"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/package.html new file mode 100644 index 00000000000..be4744cf695 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/package.html @@ -0,0 +1,25 @@ + + + + + + + + This package deals with shadings which are used for filling instead of a color. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java new file mode 100644 index 00000000000..9b32a252244 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java @@ -0,0 +1,712 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.state; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.PDFontSetting; +import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; + +/** + * An extended graphics state dictionary. + * + * @author Ben Litchfield + */ +public class PDExtendedGraphicsState implements COSObjectable +{ + private final COSDictionary dict; + + /** + * Default constructor, creates blank graphics state. + */ + public PDExtendedGraphicsState() + { + dict = new COSDictionary(); + dict.setItem(COSName.TYPE, COSName.EXT_G_STATE); + } + + /** + * Create a graphics state from an existing dictionary. + * + * @param dictionary The existing graphics state. + */ + public PDExtendedGraphicsState(COSDictionary dictionary) + { + dict = dictionary; + } + + /** + * This will implement the gs operator. + * + * @param gs The state to copy this dictionaries values into. + * + * @throws IOException If there is an error copying font information. + */ + public void copyIntoGraphicsState( PDGraphicsState gs ) throws IOException + { + for( COSName key : dict.keySet() ) + { + if( key.equals( COSName.LW ) ) + { + gs.setLineWidth( defaultIfNull( getLineWidth(), 1 ) ); + } + else if( key.equals( COSName.LC ) ) + { + gs.setLineCap( getLineCapStyle() ); + } + else if( key.equals( COSName.LJ ) ) + { + gs.setLineJoin( getLineJoinStyle() ); + } + else if( key.equals( COSName.ML ) ) + { + gs.setMiterLimit( defaultIfNull( getMiterLimit(), 10 ) ); + } + else if( key.equals( COSName.D ) ) + { + gs.setLineDashPattern( getLineDashPattern() ); + } + else if( key.equals( COSName.RI ) ) + { + gs.setRenderingIntent( getRenderingIntent() ); + } + else if( key.equals( COSName.OPM ) ) + { + gs.setOverprintMode( defaultIfNull( getOverprintMode(), 0 ) ); + } + else if( key.equals( COSName.OP ) ) + { + gs.setOverprint( getStrokingOverprintControl()); + } + else if( key.equals( COSName.OP_NS ) ) + { + gs.setNonStrokingOverprint(getNonStrokingOverprintControl()); + } + else if( key.equals( COSName.FONT ) ) + { + PDFontSetting setting = getFontSetting(); + if (setting != null) + { + gs.getTextState().setFont( setting.getFont() ); + gs.getTextState().setFontSize( setting.getFontSize() ); + } + } + else if( key.equals( COSName.FL ) ) + { + gs.setFlatness( defaultIfNull( getFlatnessTolerance(), 1.0f ) ); + } + else if( key.equals( COSName.SM ) ) + { + gs.setSmoothness( defaultIfNull( getSmoothnessTolerance(), 0 ) ); + } + else if( key.equals( COSName.SA ) ) + { + gs.setStrokeAdjustment( getAutomaticStrokeAdjustment() ); + } + else if( key.equals( COSName.CA ) ) + { + gs.setAlphaConstant( defaultIfNull( getStrokingAlphaConstant(), 1.0f ) ); + } + else if( key.equals( COSName.CA_NS ) ) + { + gs.setNonStrokeAlphaConstant( defaultIfNull( getNonStrokingAlphaConstant(), 1.0f ) ); + } + else if( key.equals( COSName.AIS ) ) + { + gs.setAlphaSource( getAlphaSourceFlag() ); + } + else if( key.equals( COSName.TK ) ) + { + gs.getTextState().setKnockoutFlag( getTextKnockoutFlag() ); + } + else if( key.equals( COSName.SMASK ) ) + { + PDSoftMask softmask = getSoftMask(); + if (softmask != null) + { + // Softmask must know the CTM at the time the ExtGState is activated. Read + // https://bugs.ghostscript.com/show_bug.cgi?id=691157#c7 for a good explanation. + softmask.setInitialTransformationMatrix(gs.getCurrentTransformationMatrix().clone()); + } + gs.setSoftMask(softmask); + } + else if( key.equals( COSName.BM ) ) + { + gs.setBlendMode( getBlendMode() ); + } + else if (key.equals(COSName.TR)) + { + if (dict.containsKey(COSName.TR2)) + { + // "If both TR and TR2 are present in the same graphics state parameter dictionary, + // TR2 shall take precedence." + continue; + } + gs.setTransfer(getTransfer()); + } + else if (key.equals(COSName.TR2)) + { + gs.setTransfer(getTransfer2()); + } + } + } + + /** + * Returns the provided default value in case 'standard' valu + * is null. To be used in cases unboxing may + * lead to a NPE. + * + * @param _value 'standard' value + * @param _default default value + * + * @return 'standard' value if not null + * otherwise default value + */ + private float defaultIfNull( Float _value, float _default ) + { + return _value != null ? _value : _default; + } + + /** + * This will get the underlying dictionary that this class acts on. + * + * @return The underlying dictionary for this class. + */ + @Override + public COSDictionary getCOSObject() + { + return dict; + } + + /** + * This will get the line width. This will return null if there is no line width + * + * @return null or the LW value of the dictionary. + */ + public Float getLineWidth() + { + return getFloatItem( COSName.LW ); + } + + /** + * This will set the line width. + * + * @param width The line width for the object. + */ + public void setLineWidth( Float width ) + { + setFloatItem( COSName.LW, width ); + } + + /** + * This will get the line cap style. + * + * @return null or the LC value of the dictionary. + */ + public int getLineCapStyle() + { + return dict.getInt( COSName.LC ); + } + + /** + * This will set the line cap style for the graphics state. + * + * @param style The new line cap style to set. + */ + public void setLineCapStyle( int style ) + { + dict.setInt(COSName.LC, style); + } + + /** + * This will get the line join style. + * + * @return null or the LJ value in the dictionary. + */ + public int getLineJoinStyle() + { + return dict.getInt( COSName.LJ ); + } + + /** + * This will set the line join style. + * + * @param style The new line join style. + */ + public void setLineJoinStyle( int style ) + { + dict.setInt(COSName.LJ, style); + } + + + /** + * This will get the miter limit. + * + * @return null or the ML value in the dictionary. + */ + public Float getMiterLimit() + { + return getFloatItem( COSName.ML ); + } + + /** + * This will set the miter limit for the graphics state. + * + * @param miterLimit The new miter limit value + */ + public void setMiterLimit( Float miterLimit ) + { + setFloatItem( COSName.ML, miterLimit ); + } + + /** + * This will get the dash pattern. + * + * @return null or the D value in the dictionary. + */ + public PDLineDashPattern getLineDashPattern() + { + PDLineDashPattern retval = null; + COSBase dp = dict.getDictionaryObject( COSName.D ); + if( dp instanceof COSArray && ((COSArray)dp).size() == 2) + { + COSBase dashArray = ((COSArray)dp).getObject(0); + COSBase phase = ((COSArray)dp).getObject(1); + if (dashArray instanceof COSArray && phase instanceof COSNumber) + { + retval = new PDLineDashPattern((COSArray) dashArray, ((COSNumber) phase).intValue()); + } + } + return retval; + } + + /** + * This will set the dash pattern for the graphics state. + * + * @param dashPattern The dash pattern + */ + public void setLineDashPattern( PDLineDashPattern dashPattern ) + { + dict.setItem(COSName.D, dashPattern.getCOSObject()); + } + + /** + * This will get the rendering intent. + * + * @return null or the RI value in the dictionary. + */ + public RenderingIntent getRenderingIntent() + { + String ri = dict.getNameAsString( "RI" ); + if (ri != null) + { + return RenderingIntent.fromString(ri); + } + else + { + return null; + } + } + + /** + * This will set the rendering intent for the graphics state. + * + * @param ri The new rendering intent + */ + public void setRenderingIntent( String ri ) + { + dict.setName("RI", ri); + } + + /** + * This will get the overprint control. + * + * @return The overprint control or null if one has not been set. + */ + public boolean getStrokingOverprintControl() + { + return dict.getBoolean(COSName.OP, false); + } + + /** + * This will get the overprint control(OP). + * + * @param op The overprint control. + */ + public void setStrokingOverprintControl( boolean op ) + { + dict.setBoolean(COSName.OP, op); + } + + /** + * This will get the overprint control for non stroking operations. If this + * value is null then the regular overprint control value will be returned. + * + * @return The overprint control or null if one has not been set. + */ + public boolean getNonStrokingOverprintControl() + { + return dict.getBoolean( COSName.OP_NS, getStrokingOverprintControl() ); + } + + /** + * This will get the overprint control(OP). + * + * @param op The overprint control. + */ + public void setNonStrokingOverprintControl( boolean op ) + { + dict.setBoolean(COSName.OP_NS, op); + } + + /** + * This will get the overprint control mode. + * + * @return The overprint control mode or null if one has not been set. + */ + public Float getOverprintMode() + { + return getFloatItem(COSName.OPM); + } + + /** + * This will get the overprint mode(OPM). + * + * @param overprintMode The overprint mode + */ + public void setOverprintMode( Float overprintMode ) + { + setFloatItem(COSName.OPM, overprintMode); + } + + /** + * This will get the font setting of the graphics state. + * + * @return The font setting. + */ + public PDFontSetting getFontSetting() + { + PDFontSetting setting = null; + COSBase base = dict.getDictionaryObject(COSName.FONT); + if (base instanceof COSArray) + { + COSArray font = (COSArray) base; + setting = new PDFontSetting(font); + } + return setting; + } + + /** + * This will set the font setting for this graphics state. + * + * @param fs The new font setting. + */ + public void setFontSetting( PDFontSetting fs ) + { + dict.setItem(COSName.FONT, fs); + } + + /** + * This will get the flatness tolerance. + * + * @return The flatness tolerance or null if one has not been set. + */ + public Float getFlatnessTolerance() + { + return getFloatItem( COSName.FL ); + } + + /** + * This will get the flatness tolerance. + * + * @param flatness The new flatness tolerance + */ + public void setFlatnessTolerance( Float flatness ) + { + setFloatItem(COSName.FL, flatness); + } + + /** + * This will get the smothness tolerance. + * + * @return The smothness tolerance or null if one has not been set. + */ + public Float getSmoothnessTolerance() + { + return getFloatItem( COSName.SM ); + } + + /** + * This will get the smoothness tolerance. + * + * @param smoothness The new smoothness tolerance + */ + public void setSmoothnessTolerance( Float smoothness ) + { + setFloatItem( COSName.SM, smoothness ); + } + + /** + * This will get the automatic stroke adjustment flag. + * + * @return The automatic stroke adjustment flag or null if one has not been set. + */ + public boolean getAutomaticStrokeAdjustment() + { + return dict.getBoolean(COSName.SA, false); + } + + /** + * This will get the automatic stroke adjustment flag. + * + * @param sa The new automatic stroke adjustment flag. + */ + public void setAutomaticStrokeAdjustment( boolean sa ) + { + dict.setBoolean(COSName.SA, sa); + } + + /** + * This will get the stroking alpha constant. + * + * @return The stroking alpha constant or null if one has not been set. + */ + public Float getStrokingAlphaConstant() + { + return getFloatItem(COSName.CA); + } + + /** + * This will get the stroking alpha constant. + * + * @param alpha The new stroking alpha constant. + */ + public void setStrokingAlphaConstant( Float alpha ) + { + setFloatItem(COSName.CA, alpha); + } + + /** + * This will get the non stroking alpha constant. + * + * @return The non stroking alpha constant or null if one has not been set. + */ + public Float getNonStrokingAlphaConstant() + { + return getFloatItem( COSName.CA_NS ); + } + + /** + * This will get the non stroking alpha constant. + * + * @param alpha The new non stroking alpha constant. + */ + public void setNonStrokingAlphaConstant( Float alpha ) + { + setFloatItem( COSName.CA_NS, alpha ); + } + + /** + * This will get the alpha source flag (“alpha is shape”), that specifies whether the current + * soft mask and alpha constant shall be interpreted as shape values (true) or opacity values + * (false). + * + * @return The alpha source flag. + */ + public boolean getAlphaSourceFlag() + { + return dict.getBoolean(COSName.AIS, false); + } + + /** + * This will get the alpha source flag (“alpha is shape”), that specifies whether the current + * soft mask and alpha constant shall be interpreted as shape values (true) or opacity values + * (false). + * + * @param alpha The alpha source flag. + */ + public void setAlphaSourceFlag( boolean alpha ) + { + dict.setBoolean(COSName.AIS, alpha); + } + + /** + * Returns the blending mode stored in the COS dictionary + * + * @return the blending mode + */ + public BlendMode getBlendMode() + { + return BlendMode.getInstance(dict.getDictionaryObject(COSName.BM)); + } + + /** + * Set the blending mode. + * + * @param bm + */ + public void setBlendMode(BlendMode bm) + { + dict.setItem(COSName.BM, BlendMode.getCOSName(bm)); + } + + /** + * Returns the soft mask stored in the COS dictionary + * + * @return the soft mask or null if there isn't any. + */ + public PDSoftMask getSoftMask() + { + if (!dict.containsKey(COSName.SMASK)) + { + return null; + } + return PDSoftMask.create(dict.getDictionaryObject(COSName.SMASK)); + } + + /** + + /** + * This will get the text knockout flag. + * + * @return The text knockout flag. + */ + public boolean getTextKnockoutFlag() + { + return dict.getBoolean( COSName.TK,true ); + } + + /** + * This will get the text knockout flag. + * + * @param tk The text knockout flag. + */ + public void setTextKnockoutFlag( boolean tk ) + { + dict.setBoolean(COSName.TK, tk); + } + + /** + * This will get a float item from the dictionary. + * + * @param key The key to the item. + * + * @return The value for that item. + */ + private Float getFloatItem( COSName key ) + { + Float retval = null; + + COSBase base = dict.getDictionaryObject(key); + if (base instanceof COSNumber) + { + COSNumber value = (COSNumber) base; + retval = value.floatValue(); + } + return retval; + } + + /** + * This will set a float object. + * + * @param key The key to the data that we are setting. + * @param value The value that we are setting. + */ + private void setFloatItem( COSName key, Float value ) + { + if( value == null ) + { + dict.removeItem(key); + } + else + { + dict.setItem(key, new COSFloat(value)); + } + } + + /** + * This will get the transfer function of the /TR dictionary. + * + * @return The transfer function. According to the PDF specification, this is either a single + * function (which applies to all process colorants) or an array of four functions (which apply + * to the process colorants individually). The name Identity may be used to represent the + * identity function. + */ + public COSBase getTransfer() + { + COSBase base = dict.getDictionaryObject(COSName.TR); + if (base instanceof COSArray && ((COSArray) base).size() != 4) + { + return null; + } + return base; + } + + /** + * This will set the transfer function of the /TR dictionary. + * + * @param transfer The transfer function. According to the PDF specification, this is either a + * single function (which applies to all process colorants) or an array of four functions (which + * apply to the process colorants individually). The name Identity may be used to represent the + * identity function. + */ + public void setTransfer(COSBase transfer) + { + dict.setItem(COSName.TR, transfer); + } + + /** + * This will get the transfer function of the /TR2 dictionary. + * + * @return The transfer function. According to the PDF specification, this is either a single + * function (which applies to all process colorants) or an array of four functions (which apply + * to the process colorants individually). The name Identity may be used to represent the + * identity function, and the name Default denotes the transfer function that was in effect at + * the start of the page. + */ + public COSBase getTransfer2() + { + COSBase base = dict.getDictionaryObject(COSName.TR2); + if (base instanceof COSArray && ((COSArray) base).size() != 4) + { + return null; + } + return base; + } + + /** + * This will set the transfer function of the /TR2 dictionary. + * + * @param transfer2 The transfer function. According to the PDF specification, this is either a + * single function (which applies to all process colorants) or an array of four functions (which + * apply to the process colorants individually). The name Identity may be used to represent the + * identity function, and the name Default denotes the transfer function that was in effect at + * the start of the page. + */ + public void setTransfer2(COSBase transfer2) + { + dict.setItem(COSName.TR2, transfer2); + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java new file mode 100644 index 00000000000..25ce0ce17c6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java @@ -0,0 +1,644 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.state; + +import java.awt.BasicStroke; +import java.awt.Composite; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import org.apache.pdfbox.cos.COSBase; + +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendComposite; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.util.Matrix; + +/** + * The current state of the graphics parameters when executing a content stream. + * + * @author Ben Litchfield + */ +public class PDGraphicsState implements Cloneable +{ + private boolean isClippingPathDirty; + private Area clippingPath; + private Matrix currentTransformationMatrix = new Matrix(); + private PDColor strokingColor = PDDeviceGray.INSTANCE.getInitialColor(); + private PDColor nonStrokingColor = PDDeviceGray.INSTANCE.getInitialColor(); + private PDColorSpace strokingColorSpace = PDDeviceGray.INSTANCE; + private PDColorSpace nonStrokingColorSpace = PDDeviceGray.INSTANCE; + private PDTextState textState = new PDTextState(); + private float lineWidth = 1; + private int lineCap = BasicStroke.CAP_BUTT; + private int lineJoin = BasicStroke.JOIN_MITER; + private float miterLimit = 10; + private PDLineDashPattern lineDashPattern = new PDLineDashPattern(); + private RenderingIntent renderingIntent; + private boolean strokeAdjustment = false; + private BlendMode blendMode = BlendMode.COMPATIBLE; + private PDSoftMask softMask; + private double alphaConstant = 1.0; + private double nonStrokingAlphaConstant = 1.0; + private boolean alphaSource = false; + + // DEVICE-DEPENDENT parameters + private boolean overprint = false; + private boolean nonStrokingOverprint = false; + private double overprintMode = 0; + //black generation + //undercolor removal + private COSBase transfer = null; + //halftone + private double flatness = 1.0; + private double smoothness = 0; + + /** + * Constructor with a given page size to initialize the clipping path. + * @param page the size of the page + */ + public PDGraphicsState(PDRectangle page) + { + clippingPath = new Area(page.toGeneralPath()); + } + + /** + * Get the value of the CTM. + * + * @return The current transformation matrix. + */ + public Matrix getCurrentTransformationMatrix() + { + return currentTransformationMatrix; + } + + /** + * Set the value of the CTM. + * + * @param value The current transformation matrix. + */ + public void setCurrentTransformationMatrix(Matrix value) + { + currentTransformationMatrix = value; + } + + /** + * Get the value of the line width. + * + * @return The current line width. + */ + public float getLineWidth() + { + return lineWidth; + } + + /** + * set the value of the line width. + * + * @param value The current line width. + */ + public void setLineWidth(float value) + { + lineWidth = value; + } + + /** + * Get the value of the line cap. + * + * @return The current line cap. + */ + public int getLineCap() + { + return lineCap; + } + + /** + * set the value of the line cap. + * + * @param value The current line cap. + */ + public void setLineCap(int value) + { + lineCap = value; + } + + /** + * Get the value of the line join. + * + * @return The current line join value. + */ + public int getLineJoin() + { + return lineJoin; + } + + /** + * Get the value of the line join. + * + * @param value The current line join + */ + public void setLineJoin(int value) + { + lineJoin = value; + } + + /** + * Get the value of the miter limit. + * + * @return The current miter limit. + */ + public float getMiterLimit() + { + return miterLimit; + } + + /** + * set the value of the miter limit. + * + * @param value The current miter limit. + */ + public void setMiterLimit(float value) + { + miterLimit = value; + } + + /** + * Get the value of the stroke adjustment parameter. + * + * @return The current stroke adjustment. + */ + public boolean isStrokeAdjustment() + { + return strokeAdjustment; + } + + /** + * set the value of the stroke adjustment. + * + * @param value The value of the stroke adjustment parameter. + */ + public void setStrokeAdjustment(boolean value) + { + strokeAdjustment = value; + } + + /** + * Get the value of the stroke alpha constant property. + * + * @return The value of the stroke alpha constant parameter. + */ + public double getAlphaConstant() + { + return alphaConstant; + } + + /** + * set the value of the stroke alpha constant property. + * + * @param value The value of the stroke alpha constant parameter. + */ + public void setAlphaConstant(double value) + { + alphaConstant = value; + } + + /** + * Get the value of the non-stroke alpha constant property. + * + * @return The value of the non-stroke alpha constant parameter. + */ + public double getNonStrokeAlphaConstant() + { + return nonStrokingAlphaConstant; + } + + /** + * set the value of the non-stroke alpha constant property. + * + * @param value The value of the non-stroke alpha constant parameter. + */ + public void setNonStrokeAlphaConstant(double value) + { + nonStrokingAlphaConstant = value; + } + + /** + * get the value of the stroke alpha source property. + * + * @return The value of the stroke alpha source parameter. + */ + public boolean isAlphaSource() + { + return alphaSource; + } + + /** + * set the value of the alpha source property. + * + * @param value The value of the alpha source parameter. + */ + public void setAlphaSource(boolean value) + { + alphaSource = value; + } + + /** + * returns the current softmask + * + * @return softMask + */ + public PDSoftMask getSoftMask() + { + return softMask; + } + + + /** + * Sets the current soft mask + * + * @param softMask + */ + public void setSoftMask(PDSoftMask softMask) + { + this.softMask = softMask; + } + + /** + * Returns the current blend mode + * + * @return the current blend mode + */ + public BlendMode getBlendMode() + { + return blendMode; + } + + /** + * Sets the blend mode in the current graphics state + * + * @param blendMode + */ + public void setBlendMode(BlendMode blendMode) + { + this.blendMode = blendMode; + } + + /** + * get the value of the overprint property. + * + * @return The value of the overprint parameter. + */ + public boolean isOverprint() + { + return overprint; + } + + /** + * set the value of the overprint property. + * + * @param value The value of the overprint parameter. + */ + public void setOverprint(boolean value) + { + overprint = value; + } + + /** + * get the value of the non stroking overprint property. + * + * @return The value of the non stroking overprint parameter. + */ + public boolean isNonStrokingOverprint() + { + return nonStrokingOverprint; + } + + /** + * set the value of the non stroking overprint property. + * + * @param value The value of the non stroking overprint parameter. + */ + public void setNonStrokingOverprint(boolean value) + { + nonStrokingOverprint = value; + } + + /** + * get the value of the overprint mode property. + * + * @return The value of the overprint mode parameter. + */ + public double getOverprintMode() + { + return overprintMode; + } + + /** + * set the value of the overprint mode property. + * + * @param value The value of the overprint mode parameter. + */ + public void setOverprintMode(double value) + { + overprintMode = value; + } + + /** + * get the value of the flatness property. + * + * @return The value of the flatness parameter. + */ + public double getFlatness() + { + return flatness; + } + + /** + * set the value of the flatness property. + * + * @param value The value of the flatness parameter. + */ + public void setFlatness(double value) + { + flatness = value; + } + + /** + * get the value of the smoothness property. + * + * @return The value of the smoothness parameter. + */ + public double getSmoothness() + { + return smoothness; + } + + /** + * set the value of the smoothness property. + * + * @param value The value of the smoothness parameter. + */ + public void setSmoothness(double value) + { + smoothness = value; + } + + /** + * This will get the graphics text state. + * + * @return The graphics text state. + */ + public PDTextState getTextState() + { + return textState; + } + + /** + * This will set the graphics text state. + * + * @param value The graphics text state. + */ + public void setTextState(PDTextState value) + { + textState = value; + } + + /** + * This will get the current line dash pattern. + * + * @return The line dash pattern. + */ + public PDLineDashPattern getLineDashPattern() + { + return lineDashPattern; + } + + /** + * This will set the current line dash pattern. + * + * @param value The new line dash pattern. + */ + public void setLineDashPattern(PDLineDashPattern value) + { + lineDashPattern = value; + } + + /** + * This will get the rendering intent. + * + * @see PDExtendedGraphicsState + * + * @return The rendering intent + */ + public RenderingIntent getRenderingIntent() + { + return renderingIntent; + } + + /** + * This will set the rendering intent. + * + * @param value The new rendering intent. + */ + public void setRenderingIntent(RenderingIntent value) + { + renderingIntent = value; + } + + @Override + public PDGraphicsState clone() + { + try + { + PDGraphicsState clone = (PDGraphicsState)super.clone(); + clone.textState = textState.clone(); + clone.currentTransformationMatrix = currentTransformationMatrix.clone(); + clone.strokingColor = strokingColor; // immutable + clone.nonStrokingColor = nonStrokingColor; // immutable + clone.lineDashPattern = lineDashPattern; // immutable + clone.clippingPath = clippingPath; // not cloned, see intersectClippingPath + clone.isClippingPathDirty = false; + return clone; + } + catch (CloneNotSupportedException e) + { + // should not happen + throw new RuntimeException(e); + } + } + + /** + * Returns the stroking color. + * + * @return stroking color + */ + public PDColor getStrokingColor() + { + return strokingColor; + } + + /** + * Sets the stroking color. + * + * @param color The new stroking color + */ + public void setStrokingColor(PDColor color) + { + strokingColor = color; + } + + /** + * Returns the non-stroking color. + * + * @return The non-stroking color + */ + public PDColor getNonStrokingColor() + { + return nonStrokingColor; + } + + /** + * Sets the non-stroking color. + * + * @param color The new non-stroking color + */ + public void setNonStrokingColor(PDColor color) + { + nonStrokingColor = color; + } + + /** + * Returns the stroking color space. + * + * @return The stroking color space. + */ + public PDColorSpace getStrokingColorSpace() + { + return strokingColorSpace; + } + + /** + * Sets the stroking color space. + * + * @param colorSpace The new stroking color space. + */ + public void setStrokingColorSpace(PDColorSpace colorSpace) + { + strokingColorSpace = colorSpace; + } + + /** + * Returns the non-stroking color space. + * + * @return The non-stroking color space. + */ + public PDColorSpace getNonStrokingColorSpace() + { + return nonStrokingColorSpace; + } + + /** + * Sets the non-stroking color space. + * + * @param colorSpace The new non-stroking color space. + */ + public void setNonStrokingColorSpace(PDColorSpace colorSpace) + { + nonStrokingColorSpace = colorSpace; + } + + /** + * Modify the current clipping path by intersecting it with the given path. + * @param path path to intersect with the clipping path + */ + public void intersectClippingPath(GeneralPath path) + { + intersectClippingPath(new Area(path)); + } + + /** + * Modify the current clipping path by intersecting it with the given path. + * @param area area to intersect with the clipping path + */ + public void intersectClippingPath(Area area) + { + // lazy cloning of clipping path for performance + if (!isClippingPathDirty) + { + // deep copy (can't use clone() as it performs only a shallow copy) + Area cloned = new Area(); + cloned.add(clippingPath); + clippingPath = cloned; + + isClippingPathDirty = true; + } + + // intersection as usual + clippingPath.intersect(area); + } + + /** + * This will get the current clipping path. Do not modify this Area object! + * + * @return The current clipping path. + */ + public Area getCurrentClippingPath() + { + return clippingPath; + } + + public Composite getStrokingJavaComposite() + { + return BlendComposite.getInstance(blendMode, (float) alphaConstant); + } + + public Composite getNonStrokingJavaComposite() + { + return BlendComposite.getInstance(blendMode, (float) nonStrokingAlphaConstant); + } + + /** + * This will get the transfer function. + * + * @return The transfer function. According to the PDF specification, this is either a single + * function (which applies to all process colorants) or an array of four functions (which apply + * to the process colorants individually). The name Identity may be used to represent the + * identity function, and the name Default denotes the transfer function that was in effect at + * the start of the page. + */ + public COSBase getTransfer() + { + return transfer; + } + + /** + * This will set the transfer function. + * + * @param transfer The transfer function. According to the PDF specification, this is either a + * single function (which applies to all process colorants) or an array of four functions (which + * apply to the process colorants individually). The name Identity may be used to represent the + * identity function, and the name Default denotes the transfer function that was in effect at + * the start of the page. + */ + public void setTransfer(COSBase transfer) + { + this.transfer = transfer; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java new file mode 100644 index 00000000000..1a970d39e40 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDSoftMask.java @@ -0,0 +1,181 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.state; + +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; +import org.apache.pdfbox.util.Matrix; + +/** + * Soft mask. + * + * @author Kühn & Weyh Software GmbH + */ +public final class PDSoftMask implements COSObjectable +{ + /** + * Creates a new soft mask. + * + * @param dictionary SMask + */ + public static PDSoftMask create(COSBase dictionary) + { + if (dictionary instanceof COSName) + { + if (COSName.NONE.equals(dictionary)) + { + return null; + } + else + { + LOG.warn("Invalid SMask " + dictionary); + return null; + } + } + else if (dictionary instanceof COSDictionary) + { + return new PDSoftMask((COSDictionary) dictionary); + } + else + { + LOG.warn("Invalid SMask " + dictionary); + return null; + } + } + + private static final Log LOG = LogFactory.getLog(PDSoftMask.class); + + private final COSDictionary dictionary; + private COSName subType = null; + private PDTransparencyGroup group = null; + private COSArray backdropColor = null; + private PDFunction transferFunction = null; + + /** + * To allow a soft mask to know the CTM at the time of activation of the ExtGState. + */ + private Matrix ctm; + + /** + * Creates a new soft mask. + * + * @param dictionary The soft mask dictionary. + */ + public PDSoftMask(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Returns the subtype of the soft mask (Alpha, Luminosity) - S entry + */ + public COSName getSubType() + { + if (subType == null) + { + subType = (COSName) getCOSObject().getDictionaryObject(COSName.S); + } + return subType; + } + + /** + * Returns the G entry of the soft mask object + * + * @return form containing the transparency group + * @throws IOException + */ + public PDTransparencyGroup getGroup() throws IOException + { + if (group == null) + { + COSBase cosGroup = getCOSObject().getDictionaryObject(COSName.G); + if (cosGroup != null) + { + PDXObject x = PDXObject.createXObject(cosGroup, null); + if (x instanceof PDTransparencyGroup) + { + group = (PDTransparencyGroup) x; + } + } + } + return group; + } + + /** + * Returns the backdrop color. + */ + public COSArray getBackdropColor() + { + if (backdropColor == null) + { + backdropColor = (COSArray) getCOSObject().getDictionaryObject(COSName.BC); + } + return backdropColor; + } + + /** + * Returns the transfer function. + * @throws IOException If we are unable to create the PDFunction object. + */ + public PDFunction getTransferFunction() throws IOException + { + if (transferFunction == null) + { + COSBase cosTF = getCOSObject().getDictionaryObject(COSName.TR); + if (cosTF != null) + { + transferFunction = PDFunction.create(cosTF); + } + } + return transferFunction; + } + + /** + * Set the CTM that is valid at the time the ExtGState was activated. + * + * @param ctm + */ + void setInitialTransformationMatrix(Matrix ctm) + { + this.ctm = ctm; + } + + /** + * Returns the CTM at the time the ExtGState was activated. + * + */ + public Matrix getInitialTransformationMatrix() + { + return ctm; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDTextState.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDTextState.java new file mode 100644 index 00000000000..977ee26950f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDTextState.java @@ -0,0 +1,234 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.state; + +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * This class will hold the current state of the text parameters when executing a + * content stream. + * + * @author Ben Litchfield + */ +public class PDTextState implements Cloneable +{ + private float characterSpacing = 0; + private float wordSpacing = 0; + private float horizontalScaling = 100; + private float leading = 0; + private PDFont font; + private float fontSize; + private RenderingMode renderingMode = RenderingMode.FILL; + private float rise = 0; + private boolean knockout = true; + + /** + * Get the value of the characterSpacing. + * + * @return The current characterSpacing. + */ + public float getCharacterSpacing() + { + return characterSpacing; + } + + /** + * Set the value of the characterSpacing. + * + * @param value The characterSpacing. + */ + public void setCharacterSpacing(float value) + { + characterSpacing = value; + } + + /** + * Get the value of the wordSpacing. + * + * @return The wordSpacing. + */ + public float getWordSpacing() + { + return wordSpacing; + } + + /** + * Set the value of the wordSpacing. + * + * @param value The wordSpacing. + */ + public void setWordSpacing(float value) + { + wordSpacing = value; + } + + /** + * Get the value of the horizontalScaling. The default is 100. This value + * is the percentage value 0-100 and not 0-1. So for mathematical operations + * you will probably need to divide by 100 first. + * + * @return The horizontalScaling. + */ + public float getHorizontalScaling() + { + return horizontalScaling; + } + + /** + * Set the value of the horizontalScaling. + * + * @param value The horizontalScaling. + */ + public void setHorizontalScaling(float value) + { + horizontalScaling = value; + } + + /** + * Get the value of the leading. + * + * @return The leading. + */ + public float getLeading() + { + return leading; + } + + /** + * Set the value of the leading. + * + * @param value The leading. + */ + public void setLeading(float value) + { + leading = value; + } + + /** + * Get the value of the font. + * + * @return The font. + */ + public PDFont getFont() + { + return font; + } + + /** + * Set the value of the font. + * + * @param value The font. + */ + public void setFont(PDFont value) + { + font = value; + } + + /** + * Get the value of the fontSize. + * + * @return The fontSize. + */ + public float getFontSize() + { + return fontSize; + } + + /** + * Set the value of the fontSize. + * + * @param value The fontSize. + */ + public void setFontSize(float value) + { + fontSize = value; + } + + /** + * Get the value of the renderingMode. + * + * @return The renderingMode. + */ + public RenderingMode getRenderingMode() + { + return renderingMode; + } + + /** + * Set the value of the renderingMode. + * + * @param renderingMode The renderingMode. + */ + public void setRenderingMode(RenderingMode renderingMode) + { + this.renderingMode = renderingMode; + } + + /** + * Get the value of the rise. + * + * @return The rise. + */ + public float getRise() + { + return rise; + } + + /** + * Set the value of the rise. + * + * @param value The rise. + */ + public void setRise(float value) + { + rise = value; + } + + /** + * Get the value of the knockout. + * + * @return The knockout. + */ + public boolean getKnockoutFlag() + { + return knockout; + } + + /** + * Set the value of the knockout. + * + * @param value The knockout. + */ + public void setKnockoutFlag(boolean value) + { + knockout = value; + } + + @Override + public PDTextState clone() + { + try + { + return (PDTextState)super.clone(); + } + catch (CloneNotSupportedException e) + { + // should not happen + throw new RuntimeException(e); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/RenderingIntent.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/RenderingIntent.java new file mode 100644 index 00000000000..c2bf6e5c045 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/RenderingIntent.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.graphics.state; + +/** + * Rendering intent. + * + * @author John Hewson + */ +public enum RenderingIntent +{ + /** + * Absolute Colorimetric. + */ + ABSOLUTE_COLORIMETRIC("AbsoluteColorimetric"), + + /** + * Relative Colorimetric. + */ + RELATIVE_COLORIMETRIC("RelativeColorimetric"), + + /** + * Saturation. + */ + SATURATION("Saturation"), + + /** + * Perceptual. + */ + PERCEPTUAL("Perceptual"); + + public static RenderingIntent fromString(String value) + { + for (RenderingIntent instance : RenderingIntent.values()) + { + if (instance.value.equals(value)) + { + return instance; + } + } + // "If a conforming reader does not recognize the specified name, + // it shall use the RelativeColorimetric intent by default." + return RELATIVE_COLORIMETRIC; + } + + private final String value; + + RenderingIntent(String value) + { + this.value = value; + } + + /** + * Returns the string value, as used in a PDF file. + */ + public String stringValue() + { + return value; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/RenderingMode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/RenderingMode.java new file mode 100644 index 00000000000..a0426bc113d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/RenderingMode.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.state; + +/** + * Text Rendering Mode. + * + * @author John Hewson + */ +public enum RenderingMode +{ + /** + * Fill text. + */ + FILL(0), + + /** + * Stroke text. + */ + STROKE(1), + + /** + * Fill, then stroke text. + */ + FILL_STROKE(2), + + /** + * Neither fill nor stroke text (invisible) + */ + NEITHER(3), + + /** + * Fill text and add to path for clipping. + */ + FILL_CLIP(4), + + /** + * Stroke text and add to path for clipping. + */ + STROKE_CLIP(5), + + /** + * Fill, then stroke text and add to path for clipping. + */ + FILL_STROKE_CLIP(6), + + /** + * Add text to path for clipping. + */ + NEITHER_CLIP(7); + + private static final RenderingMode[] VALUES = RenderingMode.values(); + + public static RenderingMode fromInt(int value) + { + return VALUES[value]; + } + + private final int value; + + RenderingMode(int value) + { + this.value = value; + } + + /** + * Returns the integer value of this mode, as used in a PDF file. + */ + public int intValue() + { + return value; + } + + /** + * Returns true is this mode fills text. + */ + public boolean isFill() + { + return this == FILL || + this == FILL_STROKE || + this == FILL_CLIP || + this == FILL_STROKE_CLIP; + } + + /** + * Returns true is this mode strokes text. + */ + public boolean isStroke() + { + return this == STROKE || + this == FILL_STROKE || + this == STROKE_CLIP || + this == FILL_STROKE_CLIP; + } + + /** + * Returns true is this mode clips text. + */ + public boolean isClip() + { + return this == FILL_CLIP || + this == STROKE_CLIP || + this == FILL_STROKE_CLIP || + this == NEITHER_CLIP; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/package.html new file mode 100644 index 00000000000..a213c6a8068 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package deals with graphics states within the PDF document. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/OpenMode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/OpenMode.java new file mode 100644 index 00000000000..ed14bc80284 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/OpenMode.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +/** + * This will specify whether to open the destination document in a new window. + * + * @author Tilman Hausherr + */ +public enum OpenMode +{ + /** + * The viewer application should behave in accordance with the current user preference. + */ + USER_PREFERENCE, + + /** + * Destination document will replace the current document in the same window. + */ + SAME_WINDOW, + + /** + * Open the destination document in a new window. + */ + NEW_WINDOW +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAction.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAction.java new file mode 100644 index 00000000000..bcddc315590 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAction.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.PDDestinationOrAction; + +/** + * This represents an action that can be executed in a PDF document. + * + * @author Ben Litchfield + * @author Panagiotis Toumasis + */ +public abstract class PDAction implements PDDestinationOrAction +{ + /** + * The type of PDF object. + */ + public static final String TYPE = "Action"; + + /** + * The action dictionary. + */ + protected COSDictionary action; + + /** + * Default constructor. + */ + public PDAction() + { + action = new COSDictionary(); + setType( TYPE ); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDAction( COSDictionary a ) + { + action = a; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return action; + } + + /** + * This will get the type of PDF object that the actions dictionary describes. + * If present must be Action for an action dictionary. + * + * @return The Type of PDF object. + */ + public final String getType() + { + return action.getNameAsString( COSName.TYPE ); + } + + /** + * This will set the type of PDF object that the actions dictionary describes. + * If present must be Action for an action dictionary. + * + * @param type The new Type for the PDF object. + */ + protected final void setType(String type) + { + action.setName(COSName.TYPE, type ); + } + + /** + * This will get the type of action that the actions dictionary describes. + * + * @return The S entry of actions dictionary. + */ + public final String getSubType() + { + return action.getNameAsString(COSName.S); + } + + /** + * This will set the type of action that the actions dictionary describes. + * + * @param s The new type of action. + */ + protected final void setSubType(String s) + { + action.setName(COSName.S, s); + } + + /** + * This will get the next action, or sequence of actions, to be performed after this one. + * The value is either a single action dictionary or an array of action dictionaries + * to be performed in order. + * + * @return The Next action or sequence of actions. + */ + public List getNext() + { + List retval = null; + COSBase next = action.getDictionaryObject(COSName.NEXT); + if( next instanceof COSDictionary ) + { + PDAction pdAction = PDActionFactory.createAction( (COSDictionary) next ); + retval = new COSArrayList<>(pdAction, next, action, COSName.NEXT); + } + else if( next instanceof COSArray ) + { + COSArray array = (COSArray)next; + List actions = new ArrayList<>(); + for( int i=0; i( actions, array ); + } + + return retval; + } + + /** + * This will set the next action, or sequence of actions, to be performed after this one. + * The value is either a single action dictionary or an array of action dictionaries + * to be performed in order. + * + * @param next The Next action or sequence of actions. + */ + public void setNext( List next ) + { + action.setItem(COSName.NEXT, COSArrayList.converterToCOSArray(next)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionEmbeddedGoTo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionEmbeddedGoTo.java new file mode 100644 index 00000000000..5e98de22c27 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionEmbeddedGoTo.java @@ -0,0 +1,191 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; + +/** + * This represents a embedded go-to action that can be executed in a PDF document. + * + * @author Ben Litchfield + * @author Panagiotis Toumasis + * @author Tilman Hausherr + */ +public class PDActionEmbeddedGoTo extends PDAction +{ + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "GoToE"; + + /** + * Default constructor. + */ + public PDActionEmbeddedGoTo() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionEmbeddedGoTo(COSDictionary a) + { + super(a); + } + + /** + * This will get the destination to jump to. + * + * @return The D entry of the specific go-to action dictionary. + * + * @throws IOException If there is an error creating the destination. + */ + public PDDestination getDestination() throws IOException + { + return PDDestination.create(getCOSObject().getDictionaryObject(COSName.D)); + } + + /** + * This will set the destination to jump to. + * + * @param d The destination. + * + * @throws IllegalArgumentException if the destination is not a page dictionary object. + */ + public void setDestination(PDDestination d) + { + if (d instanceof PDPageDestination) + { + PDPageDestination pageDest = (PDPageDestination) d; + COSArray destArray = pageDest.getCOSObject(); + if (destArray.size() >= 1) + { + COSBase page = destArray.getObject(0); + if (!(page instanceof COSDictionary)) + { + throw new IllegalArgumentException("Destination of a GoToE action must be " + + "a page dictionary object"); + } + } + } + getCOSObject().setItem(COSName.D, d); + } + + /** + * This will get the file in which the destination is located. + * + * @return The F entry of the specific embedded go-to action dictionary. + * + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(getCOSObject().getDictionaryObject(COSName.F)); + } + + /** + * This will set the file in which the destination is located. + * + * @param fs The file specification. + */ + public void setFile(PDFileSpecification fs) + { + getCOSObject().setItem(COSName.F, fs); + } + + /** + * This will specify whether to open the destination document in a new window, in the same + * window, or behave in accordance with the current user preference. + * + * @return A flag specifying how to open the destination document. + */ + public OpenMode getOpenInNewWindow() + { + if (getCOSObject().getDictionaryObject(COSName.NEW_WINDOW) instanceof COSBoolean) + { + COSBoolean b = (COSBoolean) getCOSObject().getDictionaryObject(COSName.NEW_WINDOW); + return b.getValue() ? OpenMode.NEW_WINDOW : OpenMode.SAME_WINDOW; + } + return OpenMode.USER_PREFERENCE; + } + + /** + * This will specify whether to open the destination document in a new window. + * + * @param value The flag value. + */ + public void setOpenInNewWindow(OpenMode value) + { + if (null == value) + { + getCOSObject().removeItem(COSName.NEW_WINDOW); + return; + } + switch (value) + { + case USER_PREFERENCE: + getCOSObject().removeItem(COSName.NEW_WINDOW); + break; + case SAME_WINDOW: + getCOSObject().setBoolean(COSName.NEW_WINDOW, false); + break; + case NEW_WINDOW: + getCOSObject().setBoolean(COSName.NEW_WINDOW, true); + break; + default: + // shouldn't happen unless the enum type is changed + break; + } + } + + /** + * Get the target directory. + * + * @return the target directory or null if there is none. + */ + public PDTargetDirectory getTargetDirectory() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.T); + if (base instanceof COSDictionary) + { + return new PDTargetDirectory((COSDictionary) base); + } + return null; + } + + /** + * Sets the target directory. + * + * @param targetDirectory + */ + public void setTargetDirectory(PDTargetDirectory targetDirectory) + { + getCOSObject().setItem(COSName.T, targetDirectory); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionFactory.java new file mode 100644 index 00000000000..22d8663b778 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionFactory.java @@ -0,0 +1,106 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * This class will take a dictionary and determine which type of action to create. + * + * @author Ben Litchfield + * + */ +public final class PDActionFactory +{ + /** + * Utility Class. + */ + private PDActionFactory() + { + //utility class + } + + /** + * This will create the correct type of action based on the type specified + * in the dictionary. + * + * @param action An action dictionary. + * + * @return An action of the correct type. + */ + public static PDAction createAction( COSDictionary action ) + { + PDAction retval = null; + if( action != null) + { + String type = action.getNameAsString(COSName.S); + if (type != null) + { + switch (type) + { + case PDActionJavaScript.SUB_TYPE: + retval = new PDActionJavaScript(action); + break; + case PDActionGoTo.SUB_TYPE: + retval = new PDActionGoTo(action); + break; + case PDActionLaunch.SUB_TYPE: + retval = new PDActionLaunch(action); + break; + case PDActionRemoteGoTo.SUB_TYPE: + retval = new PDActionRemoteGoTo(action); + break; + case PDActionURI.SUB_TYPE: + retval = new PDActionURI(action); + break; + case PDActionNamed.SUB_TYPE: + retval = new PDActionNamed(action); + break; + case PDActionSound.SUB_TYPE: + retval = new PDActionSound(action); + break; + case PDActionMovie.SUB_TYPE: + retval = new PDActionMovie(action); + break; + case PDActionImportData.SUB_TYPE: + retval = new PDActionImportData(action); + break; + case PDActionResetForm.SUB_TYPE: + retval = new PDActionResetForm(action); + break; + case PDActionHide.SUB_TYPE: + retval = new PDActionHide(action); + break; + case PDActionSubmitForm.SUB_TYPE: + retval = new PDActionSubmitForm(action); + break; + case PDActionThread.SUB_TYPE: + retval = new PDActionThread(action); + break; + case PDActionEmbeddedGoTo.SUB_TYPE: + retval = new PDActionEmbeddedGoTo(action); + break; + default: + break; + } + } + } + return retval; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionGoTo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionGoTo.java new file mode 100644 index 00000000000..98849eae8a5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionGoTo.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; + +/** + * This represents a go-to action that can be executed in a PDF document. + * + * @author Ben Litchfield + * @author Panagiotis Toumasis + */ +public class PDActionGoTo extends PDAction +{ + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "GoTo"; + + /** + * Default constructor. + */ + public PDActionGoTo() + { + setSubType( SUB_TYPE ); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionGoTo( COSDictionary a ) + { + super( a ); + } + + /** + * This will get the destination to jump to. + * + * @return The D entry of the specific go-to action dictionary. + * + * @throws IOException If there is an error creating the destination. + */ + public PDDestination getDestination() throws IOException + { + return PDDestination.create(getCOSObject().getDictionaryObject(COSName.D)); + } + + /** + * This will set the destination to jump to. + * + * @param d The destination. + * + * @throws IllegalArgumentException if the destination is not a page dictionary object. + */ + public void setDestination( PDDestination d ) + { + if (d instanceof PDPageDestination) + { + PDPageDestination pageDest = (PDPageDestination) d; + COSArray destArray = pageDest.getCOSObject(); + if (destArray.size() >= 1) + { + COSBase page = destArray.getObject(0); + if (!(page instanceof COSDictionary)) + { + throw new IllegalArgumentException("Destination of a GoTo action must be " + + "a page dictionary object"); + } + } + } + getCOSObject().setItem(COSName.D, d); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionHide.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionHide.java new file mode 100644 index 00000000000..2cfe7a1953a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionHide.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * This represents a thread action that can be executed in a PDF document. + * + * @author Evgeniy Muravitskiy + */ +public class PDActionHide extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "Hide"; + + /** + * Default Constructor + */ + public PDActionHide() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor + * + * @param a the action dictionary + */ + public PDActionHide(COSDictionary a) + { + super(a); + } + + /** + * The annotation or annotations to be hidden or shown + * + * @return The T entry of the specific thread action dictionary. + */ + public COSBase getT() + { + // Dictionary, String or Array + return this.action.getDictionaryObject(COSName.T); + } + + /** + * @param t annotation or annotations + */ + public void setT(COSBase t) + { + this.action.setItem(COSName.T, t); + } + + /** + * A flag indicating whether to hide the annotation or show it + * + * @return true if annotation is hidden + */ + public boolean getH() + { + return this.action.getBoolean(COSName.H, true); + } + + /** + * @param h hide flag + */ + public void setH(boolean h) + { + this.action.setItem(COSName.H, COSBoolean.getBoolean(h)); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionImportData.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionImportData.java new file mode 100644 index 00000000000..5e501275a8f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionImportData.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSName; + +/** + * @author Timur Kamalov + */ +public class PDActionImportData extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "ImportData"; + + /** + * Default constructor. + */ + public PDActionImportData() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionImportData(COSDictionary a) + { + super(a); + } + + /** + * This will get the file in which the destination is located. + * + * @return The F entry of the specific Submit-From action dictionary. + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(action.getDictionaryObject(COSName.F)); + } + + /** + * This will set the file in which the destination is located. + * + * @param fs The file specification. + */ + public void setFile(PDFileSpecification fs) + { + action.setItem(COSName.F, fs); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionJavaScript.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionJavaScript.java new file mode 100644 index 00000000000..7cc30e63bdf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionJavaScript.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; + +/** + * This represents a JavaScript action. + * + * @author Michael Schwarzenberger + */ +public class PDActionJavaScript extends PDAction +{ + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "JavaScript"; + + /** + * Constructor #1. + */ + public PDActionJavaScript() + { + setSubType( SUB_TYPE ); + } + + /** + * Constructor. + * + * @param js Some javascript code. + */ + public PDActionJavaScript( String js ) + { + this(); + setAction(js); + } + + /** + * Constructor #2. + * + * @param a The action dictionary. + */ + public PDActionJavaScript(COSDictionary a) + { + super(a); + } + + /** + * @param sAction The JavaScript. + */ + public final void setAction(String sAction) + { + action.setString(COSName.JS, sAction); + } + + /** + * @return The Javascript Code. + */ + public String getAction() + { + COSBase base = action.getDictionaryObject( COSName.JS ); + if (base instanceof COSString) + { + return ((COSString)base).getString(); + } + else if (base instanceof COSStream) + { + return ((COSStream)base).toTextString(); + } + else + { + return null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionLaunch.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionLaunch.java new file mode 100644 index 00000000000..feda96cf14e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionLaunch.java @@ -0,0 +1,255 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSBoolean; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +/** + * This represents a launch action that can be executed in a PDF document. + * + * @author Ben Litchfield + * @author Panagiotis Toumasis + */ +public class PDActionLaunch extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "Launch"; + + /** + * Default constructor. + */ + public PDActionLaunch() + { + setSubType( SUB_TYPE ); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionLaunch( COSDictionary a ) + { + super( a ); + } + + /** + * This will get the application to be launched or the document + * to be opened or printed. It is required if none of the entries + * Win, Mac or Unix is present. If this entry is absent and the + * viewer application does not understand any of the alternative + * entries it should do nothing. + * + * @return The F entry of the specific launch action dictionary. + * + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(getCOSObject().getDictionaryObject(COSName.F)); + } + + /** + * This will set the application to be launched or the document + * to be opened or printed. It is required if none of the entries + * Win, Mac or Unix is present. If this entry is absent and the + * viewer application does not understand any of the alternative + * entries it should do nothing. + * + * @param fs The file specification. + */ + public void setFile( PDFileSpecification fs ) + { + getCOSObject().setItem(COSName.F, fs); + } + + /** + * This will get a dictionary containing Windows-specific launch parameters. + * + * @return The Win entry of of the specific launch action dictionary. + */ + public PDWindowsLaunchParams getWinLaunchParams() + { + COSDictionary win = (COSDictionary)action.getDictionaryObject( "Win" ); + PDWindowsLaunchParams retval = null; + if( win != null ) + { + retval = new PDWindowsLaunchParams( win ); + } + return retval; + } + + /** + * This will set a dictionary containing Windows-specific launch parameters. + * + * @param win The action to be performed. + */ + public void setWinLaunchParams( PDWindowsLaunchParams win ) + { + action.setItem( "Win", win ); + } + + /** + * This will get the file name to be launched or the document to be opened + * or printed, in standard Windows pathname format. If the name string includes + * a backslash character (\), the backslash must itself be preceded by a backslash. + * This value must be a single string; it is not a file specification. + * + * @return The F entry of the specific Windows launch parameter dictionary. + */ + public String getF() + { + return action.getString(COSName.F); + } + + /** + * This will set the file name to be launched or the document to be opened + * or printed, in standard Windows pathname format. If the name string includes + * a backslash character (\), the backslash must itself be preceded by a backslash. + * This value must be a single string; it is not a file specification. + * + * @param f The file name to be launched. + */ + public void setF( String f ) + { + action.setString(COSName.F, f ); + } + + /** + * This will get the string specifying the default directory in standard DOS syntax. + * + * @return The D entry of the specific Windows launch parameter dictionary. + */ + public String getD() + { + return action.getString(COSName.D); + } + + /** + * This will set the string specifying the default directory in standard DOS syntax. + * + * @param d The default directory. + */ + public void setD( String d ) + { + action.setString(COSName.D, d ); + } + + /** + * This will get the string specifying the operation to perform: + * open to open a document + * print to print a document + * If the F entry designates an application instead of a document, this entry + * is ignored and the application is launched. Default value: open. + * + * @return The O entry of the specific Windows launch parameter dictionary. + */ + public String getO() + { + return action.getString(COSName.O); + } + + /** + * This will set the string specifying the operation to perform: + * open to open a document + * print to print a document + * If the F entry designates an application instead of a document, this entry + * is ignored and the application is launched. Default value: open. + * + * @param o The operation to perform. + */ + public void setO( String o ) + { + action.setString(COSName.O, o ); + } + + /** + * This will get a parameter string to be passed to the application designated by the F entry. + * This entry should be omitted if F designates a document. + * + * @return The P entry of the specific Windows launch parameter dictionary. + */ + public String getP() + { + return action.getString(COSName.P); + } + + /** + * This will set a parameter string to be passed to the application designated by the F entry. + * This entry should be omitted if F designates a document. + * + * @param p The parameter string. + */ + public void setP( String p ) + { + action.setString(COSName.P, p ); + } + + /** + * This will specify whether to open the destination document in a new window, in the same + * window, or behave in accordance with the current user preference. + * + * @return A flag specifying how to open the destination document. + */ + public OpenMode getOpenInNewWindow() + { + if (getCOSObject().getDictionaryObject(COSName.NEW_WINDOW) instanceof COSBoolean) + { + COSBoolean b = (COSBoolean) getCOSObject().getDictionaryObject(COSName.NEW_WINDOW); + return b.getValue() ? OpenMode.NEW_WINDOW : OpenMode.SAME_WINDOW; + } + return OpenMode.USER_PREFERENCE; + } + + /** + * This will specify whether to open the destination document in a new window. + * + * @param value The flag value. + */ + public void setOpenInNewWindow(OpenMode value) + { + if (null == value) + { + getCOSObject().removeItem(COSName.NEW_WINDOW); + return; + } + switch (value) + { + case USER_PREFERENCE: + getCOSObject().removeItem(COSName.NEW_WINDOW); + break; + case SAME_WINDOW: + getCOSObject().setBoolean(COSName.NEW_WINDOW, false); + break; + case NEW_WINDOW: + getCOSObject().setBoolean(COSName.NEW_WINDOW, true); + break; + default: + // shouldn't happen unless the enum type is changed + break; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionMovie.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionMovie.java new file mode 100644 index 00000000000..7257b77971a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionMovie.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * @author Timur Kamalov + */ +public class PDActionMovie extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "Movie"; + + /** + * Default constructor. + */ + public PDActionMovie() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionMovie(COSDictionary a) + { + super(a); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionNamed.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionNamed.java new file mode 100644 index 00000000000..b697403d011 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionNamed.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * This represents a named action in a PDF document. + */ +public class PDActionNamed extends PDAction +{ + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "Named"; + + /** + * Default constructor. + */ + public PDActionNamed() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionNamed(COSDictionary a) + { + super(a); + } + + /** + * This will get the name of the action to be performed. + * + * @return The name of the action to be performed. + */ + public String getN() + { + return action.getNameAsString("N"); + } + + /** + * This will set the name of the action to be performed. + * + * @param name The name of the action to be performed. + */ + public void setN(String name) + { + action.setName("N", name); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionRemoteGoTo.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionRemoteGoTo.java new file mode 100644 index 00000000000..2816fc59a30 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionRemoteGoTo.java @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +/** + * This represents a remote go-to action that can be executed in a PDF document. + * + * @author Ben Litchfield + * @author Panagiotis Toumasis + */ +public class PDActionRemoteGoTo extends PDAction +{ + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "GoToR"; + + /** + * Default constructor. + */ + public PDActionRemoteGoTo() + { + setSubType( SUB_TYPE ); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionRemoteGoTo( COSDictionary a ) + { + super( a ); + } + + /** + * This will get the file in which the destination is located. + * + * @return The F entry of the specific remote go-to action dictionary. + * + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS( action.getDictionaryObject( COSName.F ) ); + } + + /** + * This will set the file in which the destination is located. + * + * @param fs The file specification. + */ + public void setFile( PDFileSpecification fs ) + { + action.setItem( COSName.F, fs ); + } + + /** + * This will get the destination to jump to. + * If the value is an array defining an explicit destination, + * its first element must be a page number within the remote + * document rather than an indirect reference to a page object + * in the current document. The first page is numbered 0. + * + * @return The D entry of the specific remote go-to action dictionary. + */ + + // Array or String. + public COSBase getD() + { + return action.getDictionaryObject( COSName.D ); + } + + /** + * This will set the destination to jump to. + * If the value is an array defining an explicit destination, + * its first element must be a page number within the remote + * document rather than an indirect reference to a page object + * in the current document. The first page is numbered 0. + * + * @param d The destination. + */ + + // In case the value is an array. + public void setD( COSBase d ) + { + action.setItem( COSName.D, d ); + } + + /** + * This will specify whether to open the destination document in a new window, in the same + * window, or behave in accordance with the current user preference. + * + * @return A flag specifying how to open the destination document. + */ + public OpenMode getOpenInNewWindow() + { + if (getCOSObject().getDictionaryObject(COSName.NEW_WINDOW) instanceof COSBoolean) + { + COSBoolean b = (COSBoolean) getCOSObject().getDictionaryObject(COSName.NEW_WINDOW); + return b.getValue() ? OpenMode.NEW_WINDOW : OpenMode.SAME_WINDOW; + } + return OpenMode.USER_PREFERENCE; + } + + /** + * This will specify whether to open the destination document in a new window. + * + * @param value The flag value. + */ + public void setOpenInNewWindow(OpenMode value) + { + if (null == value) + { + getCOSObject().removeItem(COSName.NEW_WINDOW); + return; + } + switch (value) + { + case USER_PREFERENCE: + getCOSObject().removeItem(COSName.NEW_WINDOW); + break; + case SAME_WINDOW: + getCOSObject().setBoolean(COSName.NEW_WINDOW, false); + break; + case NEW_WINDOW: + getCOSObject().setBoolean(COSName.NEW_WINDOW, true); + break; + default: + // shouldn't happen unless the enum type is changed + break; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionResetForm.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionResetForm.java new file mode 100644 index 00000000000..07ff0119ff7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionResetForm.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * @author Timur Kamalov + */ +public class PDActionResetForm extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "ResetForm"; + + /** + * Default constructor. + */ + public PDActionResetForm() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionResetForm(COSDictionary a) + { + super(a); + } + + /** + * An array identifying which fields to include in the submission or which to exclude, depending + * on the setting of the Include/Exclude flag in the Flags entry + * + * @return the array of fields + */ + public COSArray getFields() + { + COSBase retval = this.action.getDictionaryObject(COSName.FIELDS); + return retval instanceof COSArray ? (COSArray) retval : null; + } + + /** + * @param array the array of fields + */ + public void setFields(COSArray array) + { + this.action.setItem(COSName.FIELDS, array); + } + + /** + * A set of flags specifying various characteristics of the action + * + * @return the flags + */ + public int getFlags() + { + return this.action.getInt(COSName.FLAGS, 0); + } + + /** + * @param flags the flags + */ + public void setFlags(int flags) + { + this.action.setInt(COSName.FLAGS, flags); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionSound.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionSound.java new file mode 100644 index 00000000000..51c3ee85ab5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionSound.java @@ -0,0 +1,204 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; + +/** + * This represents a Sound action that can be executed in a PDF document. + * + * @author Timur Kamalov + * @author Tilman Hausherr + */ +public class PDActionSound extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "Sound"; + + /** + * Default constructor. + */ + public PDActionSound() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionSound(COSDictionary a) + { + super(a); + } + + /** + * Sets the sound object. + * + * @param sound the sound object defining the sound that shall be played. + */ + public void setSound(COSStream sound) + { + action.setItem(COSName.SOUND, sound); + } + + /** + * Gets the sound object. + * + * @return The sound object defining the sound that shall be played. + */ + public COSStream getSound() + { + COSBase base = action.getDictionaryObject(COSName.SOUND); + if (base instanceof COSStream) + { + return (COSStream) base; + } + return null; + } + + /** + * Gets the volume at which to play the sound, in the range −1.0 to 1.0. + * + * @param volume The volume at which to play the sound, in the range −1.0 to 1.0. + * + * @throws IllegalArgumentException if the volume parameter is outside of the range −1.0 to 1.0. + */ + public void setVolume(float volume) + { + if (volume < -1 || volume > 1) + { + throw new IllegalArgumentException("volume outside of the range −1.0 to 1.0"); + } + action.setFloat(COSName.VOLUME, volume); + } + + /** + * Sets the volume. + * + * @return The volume at which to play the sound, in the range −1.0 to 1.0. Default value: 1.0. + */ + public float getVolume() + { + COSBase base = action.getDictionaryObject(COSName.VOLUME); + if (base instanceof COSNumber) + { + float volume = ((COSNumber) base).floatValue(); + if (volume < -1 || volume > 1) + { + volume = 1; + } + return volume; + } + return 1; + } + + /** + * A flag specifying whether to play the sound synchronously or asynchronously. When true, the + * reader allows no further user interaction other than canceling the sound until the sound has + * been completely played. + * + * @param synchronous Whether to play the sound synchronously (true) or asynchronously (false). + */ + public void setSynchronous(boolean synchronous) + { + action.setBoolean(COSName.SYNCHRONOUS, synchronous); + } + + /** + * Gets the synchronous flag. It specifyes whether to play the sound synchronously or + * asynchronously. When true, the reader allows no further user interaction other than canceling + * the sound until the sound has been completely played. + * + * @return Whether to play the sound synchronously (true) or asynchronously (false, also the + * default). + */ + public boolean getSynchronous() + { + COSBase base = action.getDictionaryObject(COSName.SYNCHRONOUS); + if (base instanceof COSBoolean) + { + return ((COSBoolean) base).getValue(); + } + return false; + } + + /** + * A flag specifying whether to repeat the sound indefinitely. + * + * @param repeat Whether to repeat the sound indefinitely. + */ + public void setRepeat(boolean repeat) + { + action.setBoolean(COSName.REPEAT, repeat); + } + + /** + * Gets whether to repeat the sound indefinitely. + * + * @return Whether to repeat the sound indefinitely (default: false). + */ + public boolean getRepeat() + { + COSBase base = action.getDictionaryObject(COSName.REPEAT); + if (base instanceof COSBoolean) + { + return ((COSBoolean) base).getValue(); + } + return false; + } + + /** + * The flag specifying whether to mix this sound with any other sound already playing. If this + * flag is false, any previously playing sound shall be stopped before starting this sound; this + * can be used to stop a repeating sound (see Repeat). Default value: false. + * + * @param mix whether to mix this sound with any other sound already playing. + * (false). + */ + public void setMix(boolean mix) + { + action.setBoolean(COSName.MIX, mix); + } + + /** + * Gets the flag specifying whether to mix this sound with any other sound already playing. If + * this flag is false, any previously playing sound shall be stopped before starting this sound; + * this can be used to stop a repeating sound (see Repeat). + * + * @return whether to mix this sound with any other sound already playing (default: false). + */ + public boolean getMix() + { + COSBase base = action.getDictionaryObject(COSName.MIX); + if (base instanceof COSBoolean) + { + return ((COSBoolean) base).getValue(); + } + return false; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionSubmitForm.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionSubmitForm.java new file mode 100644 index 00000000000..c3a232c4224 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionSubmitForm.java @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +import java.io.IOException; + +/** + * This represents a Submit-Form action that can be executed in a PDF document. + * + * @author Evgeniy Muravitskiy + */ +public class PDActionSubmitForm extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "SubmitForm"; + + /** + * Default Constructor + */ + public PDActionSubmitForm() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor + * + * @param a the action dictionary + */ + public PDActionSubmitForm(COSDictionary a) + { + super(a); + } + + /** + * This will get the file in which the destination is located. + * + * @return The F entry of the specific Submit-From action dictionary. + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(action.getDictionaryObject(COSName.F)); + } + + /** + * This will set the file in which the destination is located. + * + * @param fs The file specification. + */ + public void setFile(PDFileSpecification fs) + { + action.setItem(COSName.F, fs); + } + + /** + * An array identifying which fields to include in the submission or which to exclude, depending + * on the setting of the Include/Exclude flag in the Flags entry + * + * @return the array of fields + */ + public COSArray getFields() + { + COSBase retval = this.action.getDictionaryObject(COSName.FIELDS); + return retval instanceof COSArray ? (COSArray) retval : null; + } + + /** + * @param array the array of fields + */ + public void setFields(COSArray array) + { + this.action.setItem(COSName.FIELDS, array); + } + + /** + * A set of flags specifying various characteristics of the action + * + * @return the flags + */ + public int getFlags() + { + return this.action.getInt(COSName.FLAGS, 0); + } + + /** + * @param flags the flags + */ + public void setFlags(int flags) + { + this.action.setInt(COSName.FLAGS, flags); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionThread.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionThread.java new file mode 100644 index 00000000000..e369c81af06 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionThread.java @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSName; + +/** + * + * This represents a thread action that can be executed in a PDF document. + * + * @author Evgeniy Muravitskiy + */ +public class PDActionThread extends PDAction +{ + + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "Thread"; + + /** + * Default constructor. + */ + public PDActionThread() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionThread(COSDictionary a) + { + super(a); + } + + /** + * @return The D entry of the specific thread action dictionary. + */ + // Dictionary, Integer or String. + public COSBase getD() + { + return action.getDictionaryObject(COSName.D); + } + + /** + * @param d The destination. + */ + public void setD(COSBase d) + { + action.setItem(COSName.D, d); + } + + /** + * This will get the file in which the destination is located. + * + * @return The F entry of the specific thread action dictionary. + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(action.getDictionaryObject(COSName.F)); + } + + /** + * This will set the file in which the destination is located. + * + * @param fs The file specification. + */ + public void setFile(PDFileSpecification fs) + { + action.setItem(COSName.F, fs); + } + + /** + * @return The B entry of the specific thread action dictionary. + */ + // Dictionary or Integer. + public COSBase getB() + { + return action.getDictionaryObject(COSName.B); + } + + /** + * @param b The destination. + */ + public void setB(COSBase b) + { + action.setItem(COSName.B, b); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java new file mode 100644 index 00000000000..a349c1cb551 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.util.Charsets; + +/** + * This represents a URI action that can be executed in a PDF document. + * + * @author Ben Litchfield + * @author Panagiotis Toumasis + */ +public class PDActionURI extends PDAction +{ + /** + * This type of action this object represents. + */ + public static final String SUB_TYPE = "URI"; + + /** + * Default constructor. + */ + public PDActionURI() + { + setSubType(SUB_TYPE); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDActionURI(COSDictionary a) + { + super(a); + } + + /** + * This will get the uniform resource identifier to resolve. It should be encoded in 7-bit + * ASCII, but UTF-8 and UTF-16 are supported too. + * + * @return The URI entry of the specific URI action dictionary or null if there isn't any. + */ + public String getURI() + { + COSBase base = action.getDictionaryObject(COSName.URI); + if (base instanceof COSString) + { + byte[] bytes = ((COSString) base).getBytes(); + if (bytes.length >= 2) + { + // UTF-16 (BE) + if ((bytes[0] & 0xFF) == 0xFE && (bytes[1] & 0xFF) == 0xFF) + { + return action.getString(COSName.URI); + } + // UTF-16 (LE) + if ((bytes[0] & 0xFF) == 0xFF && (bytes[1] & 0xFF) == 0xFE) + { + return action.getString(COSName.URI); + } + } + return new String(bytes, Charsets.UTF_8); + } + return null; + } + + /** + * This will set the uniform resource identifier to resolve, encoded in + * 7-bit ASCII. + * + * @param uri The uniform resource identifier. + */ + public void setURI(String uri) + { + action.setString(COSName.URI, uri); + } + + /** + * This will specify whether to track the mouse position when the URI is + * resolved. Default value: false. This entry applies only to actions + * triggered by the user's clicking an annotation; it is ignored for actions + * associated with outline items or with a document's OpenAction entry. + * + * @return A flag specifying whether to track the mouse position when the + * URI is resolved. + */ + public boolean shouldTrackMousePosition() + { + return this.action.getBoolean("IsMap", false); + } + + /** + * This will specify whether to track the mouse position when the URI is + * resolved. + * + * @param value The flag value. + */ + public void setTrackMousePosition(boolean value) + { + this.action.setBoolean("IsMap", value); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAdditionalActions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAdditionalActions.java new file mode 100644 index 00000000000..99a42b08f12 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAdditionalActions.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents a dictionary of actions that occur due to events. + * + * @author Ben Litchfield + */ +public class PDAdditionalActions implements COSObjectable +{ + private final COSDictionary actions; + + /** + * Default constructor. + */ + public PDAdditionalActions() + { + actions = new COSDictionary(); + } + + /** + * Constructor. + * + * @param a The action dictionary. + */ + public PDAdditionalActions( COSDictionary a ) + { + actions = a; + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return actions; + } + + /** + * Get the F action. + * + * @return The F action. + */ + public PDAction getF() + { + return PDActionFactory.createAction( (COSDictionary)actions.getDictionaryObject(COSName.F ) ); + } + + /** + * Set the F action. + * + * @param action Get the F action. + */ + public void setF( PDAction action ) + { + actions.setItem( COSName.F, action ); + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/action/PDAnnotationAdditionalActions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAnnotationAdditionalActions.java similarity index 93% rename from src/org/pdfbox/pdmodel/interactive/action/PDAnnotationAdditionalActions.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAnnotationAdditionalActions.java index e3557551172..6b48bbb564f 100644 --- a/src/org/pdfbox/pdmodel/interactive/action/PDAnnotationAdditionalActions.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDAnnotationAdditionalActions.java @@ -14,25 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.action; +package org.apache.pdfbox.pdmodel.interactive.action; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; - -import org.pdfbox.pdmodel.common.COSObjectable; -import org.pdfbox.pdmodel.interactive.action.type.PDAction; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * This class represents an annotation's dictionary of actions * that occur due to events. * - * @author Ben Litchfield - * @author Panagiotis Toumasis (ptoumasis@mail.gr) - * @version $Revision: 1.2 $ + * @author Ben Litchfield + * @author Panagiotis Toumasis */ public class PDAnnotationAdditionalActions implements COSObjectable { - private COSDictionary actions; + private final COSDictionary actions; /** * Default constructor. @@ -57,17 +54,8 @@ public PDAnnotationAdditionalActions( COSDictionary a ) * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject() - { - return actions; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSDictionary getCOSDictionary() + @Override + public COSDictionary getCOSObject() { return actions; } @@ -137,7 +125,7 @@ public void setX( PDAction x ) */ public PDAction getD() { - COSDictionary d = (COSDictionary)actions.getDictionaryObject( "D" ); + COSDictionary d = (COSDictionary)actions.getDictionaryObject( COSName.D ); PDAction retval = null; if( d != null ) { @@ -155,7 +143,7 @@ public PDAction getD() */ public void setD( PDAction d ) { - actions.setItem( "D", d ); + actions.setItem( COSName.D, d ); } /** diff --git a/src/org/pdfbox/pdmodel/interactive/action/PDDocumentCatalogAdditionalActions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDDocumentCatalogAdditionalActions.java similarity index 89% rename from src/org/pdfbox/pdmodel/interactive/action/PDDocumentCatalogAdditionalActions.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDDocumentCatalogAdditionalActions.java index a9c13c33062..a2ff24c8cea 100644 --- a/src/org/pdfbox/pdmodel/interactive/action/PDDocumentCatalogAdditionalActions.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDDocumentCatalogAdditionalActions.java @@ -14,25 +14,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.action; +package org.apache.pdfbox.pdmodel.interactive.action; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; - -import org.pdfbox.pdmodel.common.COSObjectable; -import org.pdfbox.pdmodel.interactive.action.type.PDAction; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * This class represents a document catalog's dictionary of actions * that occur due to events. * - * @author Ben Litchfield - * @author Panagiotis Toumasis (ptoumasis@mail.gr) - * @version $Revision: 1.2 $ + * @author Ben Litchfield + * @author Panagiotis Toumasis */ public class PDDocumentCatalogAdditionalActions implements COSObjectable { - private COSDictionary actions; + private final COSDictionary actions; /** * Default constructor. @@ -57,17 +53,8 @@ public PDDocumentCatalogAdditionalActions( COSDictionary a ) * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject() - { - return actions; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSDictionary getCOSDictionary() + @Override + public COSDictionary getCOSObject() { return actions; } diff --git a/src/org/pdfbox/pdmodel/interactive/action/PDFormFieldAdditionalActions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDFormFieldAdditionalActions.java similarity index 82% rename from src/org/pdfbox/pdmodel/interactive/action/PDFormFieldAdditionalActions.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDFormFieldAdditionalActions.java index 6103681906f..2b8fca51ff4 100644 --- a/src/org/pdfbox/pdmodel/interactive/action/PDFormFieldAdditionalActions.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDFormFieldAdditionalActions.java @@ -14,25 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.action; +package org.apache.pdfbox.pdmodel.interactive.action; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; - -import org.pdfbox.pdmodel.common.COSObjectable; -import org.pdfbox.pdmodel.interactive.action.type.PDAction; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * This class represents a form field's dictionary of actions * that occur due to events. * - * @author Ben Litchfield - * @author Panagiotis Toumasis (ptoumasis@mail.gr) - * @version $Revision: 1.2 $ + * @author Ben Litchfield + * @author Panagiotis Toumasis */ public class PDFormFieldAdditionalActions implements COSObjectable { - private COSDictionary actions; + private final COSDictionary actions; /** * Default constructor. @@ -57,17 +54,8 @@ public PDFormFieldAdditionalActions( COSDictionary a ) * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject() - { - return actions; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSDictionary getCOSDictionary() + @Override + public COSDictionary getCOSObject() { return actions; } @@ -82,7 +70,7 @@ public COSDictionary getCOSDictionary() */ public PDAction getK() { - COSDictionary k = (COSDictionary)actions.getDictionaryObject( "K" ); + COSDictionary k = (COSDictionary) actions.getDictionaryObject(COSName.K); PDAction retval = null; if( k != null ) { @@ -101,7 +89,7 @@ public PDAction getK() */ public void setK( PDAction k ) { - actions.setItem( "K", k ); + actions.setItem(COSName.K, k); } /** @@ -113,7 +101,7 @@ public void setK( PDAction k ) */ public PDAction getF() { - COSDictionary f = (COSDictionary)actions.getDictionaryObject( "F" ); + COSDictionary f = (COSDictionary) actions.getDictionaryObject(COSName.F); PDAction retval = null; if( f != null ) { @@ -131,7 +119,7 @@ public PDAction getF() */ public void setF( PDAction f ) { - actions.setItem( "F", f ); + actions.setItem(COSName.F, f); } /** @@ -144,7 +132,7 @@ public void setF( PDAction f ) */ public PDAction getV() { - COSDictionary v = (COSDictionary)actions.getDictionaryObject( "V" ); + COSDictionary v = (COSDictionary) actions.getDictionaryObject(COSName.V); PDAction retval = null; if( v != null ) { @@ -163,7 +151,7 @@ public PDAction getV() */ public void setV( PDAction v ) { - actions.setItem( "V", v ); + actions.setItem(COSName.V, v); } /** @@ -177,7 +165,7 @@ public void setV( PDAction v ) */ public PDAction getC() { - COSDictionary c = (COSDictionary)actions.getDictionaryObject( "C" ); + COSDictionary c = (COSDictionary) actions.getDictionaryObject(COSName.C); PDAction retval = null; if( c != null ) { @@ -197,6 +185,6 @@ public PDAction getC() */ public void setC( PDAction c ) { - actions.setItem( "C", c ); + actions.setItem(COSName.C, c); } } diff --git a/src/org/pdfbox/pdmodel/interactive/action/PDPageAdditionalActions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDPageAdditionalActions.java similarity index 80% rename from src/org/pdfbox/pdmodel/interactive/action/PDPageAdditionalActions.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDPageAdditionalActions.java index 1e50fdb444a..fbb9396b652 100644 --- a/src/org/pdfbox/pdmodel/interactive/action/PDPageAdditionalActions.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDPageAdditionalActions.java @@ -14,25 +14,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.action; +package org.apache.pdfbox.pdmodel.interactive.action; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; - -import org.pdfbox.pdmodel.common.COSObjectable; -import org.pdfbox.pdmodel.interactive.action.type.PDAction; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * This class represents a page object's dictionary of actions * that occur due to events. * - * @author Ben Litchfield - * @author Panagiotis Toumasis (ptoumasis@mail.gr) - * @version $Revision: 1.2 $ + * @author Ben Litchfield + * @author Panagiotis Toumasis */ public class PDPageAdditionalActions implements COSObjectable { - private COSDictionary actions; + private final COSDictionary actions; /** * Default constructor. @@ -57,17 +54,8 @@ public PDPageAdditionalActions( COSDictionary a ) * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject() - { - return actions; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSDictionary getCOSDictionary() + @Override + public COSDictionary getCOSObject() { return actions; } @@ -82,7 +70,7 @@ public COSDictionary getCOSDictionary() */ public PDAction getO() { - COSDictionary o = (COSDictionary)actions.getDictionaryObject( "O" ); + COSDictionary o = (COSDictionary) actions.getDictionaryObject(COSName.O); PDAction retval = null; if( o != null ) { @@ -101,7 +89,7 @@ public PDAction getO() */ public void setO( PDAction o ) { - actions.setItem( "O", o ); + actions.setItem(COSName.O, o); } /** diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDTargetDirectory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDTargetDirectory.java new file mode 100644 index 00000000000..8d328e36cb5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDTargetDirectory.java @@ -0,0 +1,281 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDNamedDestination; + +/** + * A target dictionary specifying path information to the target document. Each target dictionary + * specifies one element in the full path to the target and may have nested target dictionaries + * specifying additional elements. + * + * @author Tilman Hausherr + */ +public class PDTargetDirectory implements COSObjectable +{ + private final COSDictionary dict; + + /** + * Default constructor, creates target directory. + */ + public PDTargetDirectory() + { + dict = new COSDictionary(); + } + + /** + * Create a target directory from an existing dictionary. + * + * @param dictionary The existing graphics state. + */ + public PDTargetDirectory(COSDictionary dictionary) + { + dict = dictionary; + } + + /** + * This will get the underlying dictionary that this class acts on. + * + * @return The underlying dictionary for this class. + */ + @Override + public COSDictionary getCOSObject() + { + return dict; + } + + /** + * Get the relationship between the current document and the target (which may be an + * intermediate target). + * + * @return the relationship as a name. Valid values are P (the target is the parent of the + * current document) and C (the target is a child of the current document). Invalid values or + * null are also returned. + */ + public COSName getRelationship() + { + COSBase base = dict.getItem(COSName.R); + if (base instanceof COSName) + { + return (COSName) base; + } + return null; + } + + /** + * Set the relationship between the current document and the target (which may be an + * intermediate target). + * + * @param relationship Valid values are P (the target is the parent of the current document) and + * C (the target is a child of the current document). + * + * throws IllegalArgumentException if the parameter is not P or C. + */ + public void setRelationship(COSName relationship) + { + if (!COSName.P.equals(relationship) && !COSName.C.equals(relationship)) + { + throw new IllegalArgumentException("The only valid are P or C, not " + relationship.getName()); + } + dict.setItem(COSName.R, relationship); + } + + /** + * Get the name of the file as found in the EmbeddedFiles name tree. This is only to be used if + * the target is a child of the current document. + * + * @return a filename or null if there is none. + */ + public String getFilename() + { + return dict.getString(COSName.N); + } + + /** + * Sets the name of the file as found in the EmbeddedFiles name tree. This is only to be used if + * the target is a child of the current document. + * + * @param filename a filename or null if the entry is to be deleted. + */ + public void setFilename(String filename) + { + dict.setString(COSName.N, filename); + } + + /** + * Get the target directory. If this entry is absent, the current document is the target file + * containing the destination. + * + * @return the target directory or null if the current document is the target file containing + * the destination. + */ + public PDTargetDirectory getTargetDirectory() + { + COSBase base = dict.getDictionaryObject(COSName.T); + if (base instanceof COSDictionary) + { + return new PDTargetDirectory((COSDictionary) base); + } + return null; + } + + /** + * Sets the target directory. + * + * @param targetDirectory the target directory or null if the current document is the target + * file containing the destination. + */ + public void setTargetDirectory(PDTargetDirectory targetDirectory) + { + dict.setItem(COSName.T, targetDirectory); + } + + /** + * If the value in the /P entry is an integer, this will get the page number (zero-based) in the + * current document containing the file attachment annotation. + * + * @return the zero based page number or -1 if the /P entry value is missing or not a number. + */ + public int getPageNumber() + { + COSBase base = dict.getDictionaryObject(COSName.P); + if (base instanceof COSInteger) + { + return ((COSInteger) base).intValue(); + } + return -1; + } + + /** + * Set the page number (zero-based) in the current document containing the file attachment + * annotation. + * + * @param pageNumber the zero based page number. If this is < 0 then the entry is removed. + */ + public void setPageNumber(int pageNumber) + { + if (pageNumber < 0) + { + dict.removeItem(COSName.P); + } + else + { + dict.setInt(COSName.P, pageNumber); + } + } + + /** + * If the value in the /P entry is a string, this will get a named destination in the current + * document that provides the page number of the file attachment annotation. + * + * @return a named destination or null if the /P entry value is missing or not a string. + */ + public PDNamedDestination getNamedDestination() + { + COSBase base = dict.getDictionaryObject(COSName.P); + if (base instanceof COSString) + { + return new PDNamedDestination((COSString) base); + } + return null; + } + + /** + * This will set a named destination in the current document that provides the page number of + * the file attachment annotation. + * + * @param dest a named destination or null if the entry is to be removed. + */ + public void setNamedDestination(PDNamedDestination dest) + { + if (dest == null) + { + dict.removeItem(COSName.P); + } + else + { + dict.setItem(COSName.P, dest); + } + } + + /** + * If the value in the /A entry is an integer, this will get the index (zero-based) of the + * annotation in the /Annots array of the page specified by the /P entry. + * + * @return the zero based page number or -1 if the /P entry value is missing or not a number. + */ + public int getAnnotationIndex() + { + COSBase base = dict.getDictionaryObject(COSName.A); + if (base instanceof COSInteger) + { + return ((COSInteger) base).intValue(); + } + return -1; + } + + /** + * This will set the index (zero-based) of the annotation in the /Annots array of the page + * specified by the /P entry. + * + * @param index the zero based index. If this is < 0 then the entry is removed. + */ + public void setAnnotationIndex(int index) + { + if (index < 0) + { + dict.removeItem(COSName.A); + } + else + { + dict.setInt(COSName.A, index); + } + } + + /** + * If the value in the /A entry is a string, this will get the value of the /NM entry in the + * annotation dictionary. + * + * @return the /NM value of an annotation dictionary or null if the /A entry value is missing or + * not a string. + */ + public String getAnnotationName() + { + COSBase base = dict.getDictionaryObject(COSName.A); + if (base instanceof COSString) + { + return ((COSString) base).getString(); + } + return null; + } + + /** + * This will get the value of the /NM entry in the annotation dictionary. + * + * @param name the /NM value of an annotation dictionary or null if the entry is to be removed. + */ + public void setAnnotationName(String name) + { + dict.setString(COSName.A, name); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDURIDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDURIDictionary.java new file mode 100644 index 00000000000..ad20eefa436 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDURIDictionary.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.action; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This is the implementation of an URI dictionary. + * + */ +public class PDURIDictionary implements COSObjectable +{ + + private final COSDictionary uriDictionary; + + /** + * Constructor. + * + */ + public PDURIDictionary() + { + this.uriDictionary = new COSDictionary(); + } + + /** + * Constructor. + * + * @param dictionary the corresponding dictionary + */ + public PDURIDictionary(COSDictionary dictionary) + { + this.uriDictionary = dictionary; + } + + /** + * Returns the corresponding dictionary. + * @return the dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.uriDictionary; + } + + /** + * This will get the base URI to be used in resolving relative URI references. + * URI actions within the document may specify URIs in partial form, to be interpreted + * relative to this base address. If no base URI is specified, such partial URIs + * will be interpreted relative to the location of the document itself. + * The use of this entry is parallel to that of the body element <BASE>, as described + * in the HTML 4.01 Specification. + * + * @return The URI entry of the specific URI dictionary. + */ + public String getBase() + { + return this.getCOSObject().getString("Base"); + } + + /** + * This will set the base URI to be used in resolving relative URI references. + * URI actions within the document may specify URIs in partial form, to be interpreted + * relative to this base address. If no base URI is specified, such partial URIs + * will be interpreted relative to the location of the document itself. + * The use of this entry is parallel to that of the body element <BASE>, as described + * in the HTML 4.01 Specification. + * + * @param base The base URI to be used. + */ + public void setBase(String base) + { + this.getCOSObject().setString("Base", base); + } + +} diff --git a/src/org/pdfbox/pdmodel/interactive/action/type/PDWindowsLaunchParams.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDWindowsLaunchParams.java similarity index 77% rename from src/org/pdfbox/pdmodel/interactive/action/type/PDWindowsLaunchParams.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDWindowsLaunchParams.java index c07e2fb9a7a..0b1fa29fd60 100644 --- a/src/org/pdfbox/pdmodel/interactive/action/type/PDWindowsLaunchParams.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDWindowsLaunchParams.java @@ -14,18 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.action.type; +package org.apache.pdfbox.pdmodel.interactive.action; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; -import org.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** - * Launch paramaters for the windows OS. + * Launch parameters for the windows OS. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDWindowsLaunchParams implements COSObjectable { @@ -34,7 +33,7 @@ public class PDWindowsLaunchParams implements COSObjectable */ public static final String OPERATION_OPEN = "open"; /** - * The print operation for the lanuch. + * The print operation for the launch. */ public static final String OPERATION_PRINT = "print"; @@ -66,17 +65,8 @@ public PDWindowsLaunchParams( COSDictionary p ) * * @return The cos object that matches this Java object. */ - public COSBase getCOSObject() - { - return params; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSDictionary getCOSDictionary() + @Override + public COSDictionary getCOSObject() { return params; } @@ -88,7 +78,7 @@ public COSDictionary getCOSDictionary() */ public String getFilename() { - return params.getString( "F" ); + return params.getString( COSName.F ); } /** @@ -98,7 +88,7 @@ public String getFilename() */ public void setFilename( String file ) { - params.setString( "F", file ); + params.setString( COSName.F, file ); } /** @@ -108,7 +98,7 @@ public void setFilename( String file ) */ public String getDirectory() { - return params.getString( "D" ); + return params.getString( COSName.D ); } /** @@ -118,7 +108,7 @@ public String getDirectory() */ public void setDirectory( String dir ) { - params.setString( "D", dir ); + params.setString( COSName.D, dir ); } /** @@ -131,7 +121,7 @@ public void setDirectory( String dir ) */ public String getOperation() { - return params.getString( "O", OPERATION_OPEN ); + return params.getString(COSName.O, OPERATION_OPEN); } /** @@ -141,7 +131,7 @@ public String getOperation() */ public void setOperation( String op ) { - params.setString( "D", op ); + params.setString( COSName.D, op ); } /** @@ -151,7 +141,7 @@ public void setOperation( String op ) */ public String getExecuteParam() { - return params.getString( "P" ); + return params.getString( COSName.P ); } /** @@ -161,6 +151,6 @@ public String getExecuteParam() */ public void setExecuteParam( String param ) { - params.setString( "P", param ); + params.setString( COSName.P, param ); } } diff --git a/src/org/pdfbox/pdmodel/interactive/action/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/action/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/AnnotationFilter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/AnnotationFilter.java new file mode 100644 index 00000000000..f38f6d160bc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/AnnotationFilter.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +/** + * Simple interface allowing the use of an annotation filter visitor. + * + * @author Maxime Veron + * + */ +public interface AnnotationFilter +{ + boolean accept(PDAnnotation annotation); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java new file mode 100644 index 00000000000..10647f836c5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotation.java @@ -0,0 +1,824 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import java.io.IOException; +import java.util.Calendar; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; + +/** + * A PDF annotation. + * + * @author Ben Litchfield + */ +public abstract class PDAnnotation implements COSObjectable +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(PDAnnotation.class); + + /** + * An annotation flag. + */ + private static final int FLAG_INVISIBLE = 1 << 0; + /** + * An annotation flag. + */ + private static final int FLAG_HIDDEN = 1 << 1; + /** + * An annotation flag. + */ + private static final int FLAG_PRINTED = 1 << 2; + /** + * An annotation flag. + */ + private static final int FLAG_NO_ZOOM = 1 << 3; + /** + * An annotation flag. + */ + private static final int FLAG_NO_ROTATE = 1 << 4; + /** + * An annotation flag. + */ + private static final int FLAG_NO_VIEW = 1 << 5; + /** + * An annotation flag. + */ + private static final int FLAG_READ_ONLY = 1 << 6; + /** + * An annotation flag. + */ + private static final int FLAG_LOCKED = 1 << 7; + /** + * An annotation flag. + */ + private static final int FLAG_TOGGLE_NO_VIEW = 1 << 8; + + private final COSDictionary dictionary; + + /** + * Create the correct annotation from the base COS object. + * + * @param base The COS object that is the annotation. + * @return The correctly typed annotation object. + * + * @throws IOException If the annotation type is unknown. + */ + public static PDAnnotation createAnnotation(COSBase base) throws IOException + { + PDAnnotation annot = null; + if (base instanceof COSDictionary) + { + COSDictionary annotDic = (COSDictionary) base; + String subtype = annotDic.getNameAsString(COSName.SUBTYPE); + if (PDAnnotationFileAttachment.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationFileAttachment(annotDic); + } + else if (PDAnnotationLine.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationLine(annotDic); + } + else if (PDAnnotationLink.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationLink(annotDic); + } + else if (PDAnnotationPopup.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationPopup(annotDic); + } + else if (PDAnnotationRubberStamp.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationRubberStamp(annotDic); + } + else if (PDAnnotationSquare.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationSquare(annotDic); + } + else if (PDAnnotationCircle.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationCircle(annotDic); + } + else if (PDAnnotationPolygon.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationPolygon(annotDic); + } + else if (PDAnnotationPolyline.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationPolyline(annotDic); + } + else if (PDAnnotationInk.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationInk(annotDic); + } + else if (PDAnnotationText.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationText(annotDic); + } + else if (PDAnnotationHighlight.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationHighlight(annotDic); + } + else if (PDAnnotationUnderline.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationUnderline(annotDic); + } + else if (PDAnnotationStrikeout.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationStrikeout(annotDic); + } + else if (PDAnnotationSquiggly.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationSquiggly(annotDic); + } + else if (PDAnnotationWidget.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationWidget(annotDic); + } + else if (PDAnnotationFreeText.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationFreeText(annotDic); + } + else if (PDAnnotationCaret.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationCaret(annotDic); + } + else if (PDAnnotationSound.SUB_TYPE.equals(subtype)) + { + annot = new PDAnnotationSound(annotDic); + } + else + { + // TODO not yet implemented: + // Movie, Screen, PrinterMark, TrapNet, Watermark, 3D, Redact + annot = new PDAnnotationUnknown(annotDic); + LOG.debug("Unknown or unsupported annotation subtype " + subtype); + } + } + else + { + throw new IOException("Error: Unknown annotation type " + base); + } + + return annot; + } + + /** + * Constructor. + */ + public PDAnnotation() + { + dictionary = new COSDictionary(); + dictionary.setItem(COSName.TYPE, COSName.ANNOT); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotation(COSDictionary dict) + { + dictionary = dict; + dictionary.setItem(COSName.TYPE, COSName.ANNOT); + } + + /** + * This will set the sub type (and hence appearance, AP taking precedence) For this annotation. See the SUB_TYPE_XXX + * constants for valid values. + * + * @param subType The subtype of the annotation + */ + protected final void setSubtype(String subType) + { + getCOSObject().setName(COSName.SUBTYPE, subType); + } + + /** + * This will retrieve the subtype of the annotation. + * + * @return The subtype of this annotation, see the SUB_TYPE_XXX constants. + */ + public final String getSubtype() + { + return getCOSObject().getNameAsString(COSName.SUBTYPE); + } + + /** + * The annotation rectangle, defining the location of the annotation on the page in default user space units. This + * is usually required and should not return null on valid PDF documents. But where this is a parent form field with + * children, such as radio button collections then the rectangle will be null. + * + * @return The Rect value of this annotation. + */ + public PDRectangle getRectangle() + { + COSArray rectArray = (COSArray) dictionary.getDictionaryObject(COSName.RECT); + PDRectangle rectangle = null; + if (rectArray != null) + { + if (rectArray.size() == 4 && rectArray.getObject(0) instanceof COSNumber + && rectArray.getObject(1) instanceof COSNumber + && rectArray.getObject(2) instanceof COSNumber + && rectArray.getObject(3) instanceof COSNumber) + { + rectangle = new PDRectangle(rectArray); + } + else + { + LOG.warn(rectArray + " is not a rectangle array, returning null"); + } + } + return rectangle; + } + + /** + * This will set the rectangle for this annotation. + * + * @param rectangle The new rectangle values. + */ + public void setRectangle(PDRectangle rectangle) + { + dictionary.setItem(COSName.RECT, rectangle.getCOSArray()); + } + + /** + * This will get the flags for this field. + * + * @return flags The set of flags. + */ + public int getAnnotationFlags() + { + return getCOSObject().getInt(COSName.F, 0); + } + + /** + * This will set the flags for this field. + * + * @param flags The new flags. + */ + public void setAnnotationFlags(int flags) + { + getCOSObject().setInt(COSName.F, flags); + } + + /** + * Interface method for COSObjectable. + * + * @return This object as a standard COS object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Returns the annotations appearance state, which selects the applicable appearance stream from an appearance + * subdictionary. + */ + public COSName getAppearanceState() + { + return getCOSObject().getCOSName(COSName.AS); + } + + /** + * This will set the annotations appearance state name. + * + * @param as The name of the appearance stream. + */ + public void setAppearanceState(String as) + { + getCOSObject().setName(COSName.AS, as); + } + + /** + * This will get the appearance dictionary associated with this annotation. This may return null. + * + * @return This annotations appearance. + */ + public PDAppearanceDictionary getAppearance() + { + COSBase base = dictionary.getDictionaryObject(COSName.AP); + if (base instanceof COSDictionary) + { + return new PDAppearanceDictionary((COSDictionary) base); + } + return null; + } + + /** + * This will set the appearance associated with this annotation. + * + * @param appearance The appearance dictionary for this annotation. + */ + public void setAppearance(PDAppearanceDictionary appearance) + { + dictionary.setItem(COSName.AP, appearance); + } + + /** + * Returns the appearance stream for this annotation, if any. The annotation state is taken into account, if + * present. + */ + public PDAppearanceStream getNormalAppearanceStream() + { + PDAppearanceDictionary appearanceDict = getAppearance(); + if (appearanceDict == null) + { + return null; + } + + PDAppearanceEntry normalAppearance = appearanceDict.getNormalAppearance(); + if (normalAppearance == null) + { + return null; + } + + if (normalAppearance.isSubDictionary()) + { + COSName state = getAppearanceState(); + return normalAppearance.getSubDictionary().get(state); + } + else + { + return normalAppearance.getAppearanceStream(); + } + } + + /** + * Get the invisible flag. + * + * @return The invisible flag. + */ + public boolean isInvisible() + { + return getCOSObject().getFlag(COSName.F, FLAG_INVISIBLE); + } + + /** + * Set the invisible flag. + * + * @param invisible The new invisible flag. + */ + public void setInvisible(boolean invisible) + { + getCOSObject().setFlag(COSName.F, FLAG_INVISIBLE, invisible); + } + + /** + * Get the hidden flag. + * + * @return The hidden flag. + */ + public boolean isHidden() + { + return getCOSObject().getFlag(COSName.F, FLAG_HIDDEN); + } + + /** + * Set the hidden flag. + * + * @param hidden The new hidden flag. + */ + public void setHidden(boolean hidden) + { + getCOSObject().setFlag(COSName.F, FLAG_HIDDEN, hidden); + } + + /** + * Get the printed flag. + * + * @return The printed flag. + */ + public boolean isPrinted() + { + return getCOSObject().getFlag(COSName.F, FLAG_PRINTED); + } + + /** + * Set the printed flag. + * + * @param printed The new printed flag. + */ + public void setPrinted(boolean printed) + { + getCOSObject().setFlag(COSName.F, FLAG_PRINTED, printed); + } + + /** + * Get the noZoom flag. + * + * @return The noZoom flag. + */ + public boolean isNoZoom() + { + return getCOSObject().getFlag(COSName.F, FLAG_NO_ZOOM); + } + + /** + * Set the noZoom flag. + * + * @param noZoom The new noZoom flag. + */ + public void setNoZoom(boolean noZoom) + { + getCOSObject().setFlag(COSName.F, FLAG_NO_ZOOM, noZoom); + } + + /** + * Get the noRotate flag. + * + * @return The noRotate flag. + */ + public boolean isNoRotate() + { + return getCOSObject().getFlag(COSName.F, FLAG_NO_ROTATE); + } + + /** + * Set the noRotate flag. + * + * @param noRotate The new noRotate flag. + */ + public void setNoRotate(boolean noRotate) + { + getCOSObject().setFlag(COSName.F, FLAG_NO_ROTATE, noRotate); + } + + /** + * Get the noView flag. + * + * @return The noView flag. + */ + public boolean isNoView() + { + return getCOSObject().getFlag(COSName.F, FLAG_NO_VIEW); + } + + /** + * Set the noView flag. + * + * @param noView The new noView flag. + */ + public void setNoView(boolean noView) + { + getCOSObject().setFlag(COSName.F, FLAG_NO_VIEW, noView); + } + + /** + * Get the readOnly flag. + * + * @return The readOnly flag. + */ + public boolean isReadOnly() + { + return getCOSObject().getFlag(COSName.F, FLAG_READ_ONLY); + } + + /** + * Set the readOnly flag. + * + * @param readOnly The new readOnly flag. + */ + public void setReadOnly(boolean readOnly) + { + getCOSObject().setFlag(COSName.F, FLAG_READ_ONLY, readOnly); + } + + /** + * Get the locked flag. + * + * @return The locked flag. + */ + public boolean isLocked() + { + return getCOSObject().getFlag(COSName.F, FLAG_LOCKED); + } + + /** + * Set the locked flag. + * + * @param locked The new locked flag. + */ + public void setLocked(boolean locked) + { + getCOSObject().setFlag(COSName.F, FLAG_LOCKED, locked); + } + + /** + * Get the toggleNoView flag. + * + * @return The toggleNoView flag. + */ + public boolean isToggleNoView() + { + return getCOSObject().getFlag(COSName.F, FLAG_TOGGLE_NO_VIEW); + } + + /** + * Set the toggleNoView flag. + * + * @param toggleNoView The new toggleNoView flag. + */ + public void setToggleNoView(boolean toggleNoView) + { + getCOSObject().setFlag(COSName.F, FLAG_TOGGLE_NO_VIEW, toggleNoView); + } + + /** + * Get the "contents" of the field. + * + * @return the value of the contents. + */ + public String getContents() + { + return dictionary.getString(COSName.CONTENTS); + } + + /** + * Set the "contents" of the field. + * + * @param value the value of the contents. + */ + public void setContents(String value) + { + dictionary.setString(COSName.CONTENTS, value); + } + + /** + * This will retrieve the date and time the annotation was modified. + * + * @return the modified date/time (often in date format, but can be an arbitary string). + */ + public String getModifiedDate() + { + return getCOSObject().getString(COSName.M); + } + + /** + * This will set the date and time the annotation was modified. + * + * @param m the date and time the annotation was created. Date values used in a PDF shall + * conform to a standard date format, which closely follows that of the international standard + * ASN.1 (Abstract Syntax Notation One), defined in ISO/IEC 8824. A date shall be a text string + * of the form (D:YYYYMMDDHHmmSSOHH'mm). Alternatively, use + * {@link #setModifiedDate(java.util.Calendar)} + */ + public void setModifiedDate(String m) + { + getCOSObject().setString(COSName.M, m); + } + + /** + * This will set the date and time the annotation was modified. + * + * @param c the date and time the annotation was created. + */ + public void setModifiedDate(Calendar c) + { + getCOSObject().setDate(COSName.M, c); + } + + /** + * This will get the name, a string intended to uniquely identify each annotation within a page. Not to be confused + * with some annotations Name entry which impact the default image drawn for them. + * + * @return The identifying name for the Annotation. + */ + public String getAnnotationName() + { + return getCOSObject().getString(COSName.NM); + } + + /** + * This will set the name, a string intended to uniquely identify each annotation within a page. Not to be confused + * with some annotations Name entry which impact the default image drawn for them. + * + * @param nm The identifying name for the annotation. + */ + public void setAnnotationName(String nm) + { + getCOSObject().setString(COSName.NM, nm); + } + + /** + * This will get the key of this annotation in the structural parent tree. + * + * @return the integer key of the annotation's entry in the structural parent tree or -1 if + * there isn't any. + */ + public int getStructParent() + { + return getCOSObject().getInt(COSName.STRUCT_PARENT); + } + + /** + * This will set the key for this annotation in the structural parent tree. + * + * @param structParent The new key for this annotation. + */ + public void setStructParent(int structParent) + { + getCOSObject().setInt(COSName.STRUCT_PARENT, structParent); + } + + /** + * This will get the optional content group or optional content membership dictionary for the + * annotation. + * + * @return The optional content group or optional content membership dictionary or null if there + * is none. + */ + public PDPropertyList getOptionalContent() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.OC); + if (base instanceof COSDictionary) + { + return PDPropertyList.create((COSDictionary) base); + } + return null; + } + + /** + * Sets the optional content group or optional content membership dictionary for the annotation. + * + * @param oc The optional content group or optional content membership dictionary. + */ + public void setOptionalContent(PDPropertyList oc) + { + getCOSObject().setItem(COSName.OC, oc); + } + + /** + * This will retrieve the border array. If none is available then it will return the default, + * which is [0 0 1]. The array consists of at least three numbers defining the horizontal corner + * radius, vertical corner radius, and border width. The array may have a fourth element, an + * optional dash array defining a pattern of dashes and gaps that shall be used in drawing the + * border. If the array has less than three elements, it will be filled with 0. + * + * @return the border array, never null. + */ + public COSArray getBorder() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.BORDER); + COSArray border; + if (base instanceof COSArray) + { + border = (COSArray) base; + if (border.size() < 3) + { + // create a copy to avoid altering the PDF + COSArray newBorder = new COSArray(); + newBorder.addAll(border); + border = newBorder; + // Adobe Reader behaves as if missing elements are 0. + while (border.size() < 3) + { + border.add(COSInteger.ZERO); + } + } + } + else + { + border = new COSArray(); + border.add(COSInteger.ZERO); + border.add(COSInteger.ZERO); + border.add(COSInteger.ONE); + } + return border; + } + + /** + * This will set the border array. + * + * @param borderArray the border array to set. + */ + public void setBorder(COSArray borderArray) + { + getCOSObject().setItem(COSName.BORDER, borderArray); + } + + /** + * This will set the color used in drawing various elements. As of PDF 1.6 these are : Background of icon when + * closed Title bar of popup window Border of a link annotation + * + * Colour is in DeviceRGB colourspace + * + * @param c colour in the DeviceRGB colourspace + * + */ + public void setColor(PDColor c) + { + getCOSObject().setItem(COSName.C, c.toCOSArray()); + } + + /** + * This will retrieve the color used in drawing various elements. As of PDF 1.6 these are : + *

      + *
    • Background of icon when closed
    • + *
    • Title bar of popup window
    • + *
    • Border of a link annotation
    • + *
    + * + * @return Color object representing the colour + * + */ + public PDColor getColor() + { + return getColor(COSName.C); + } + + protected PDColor getColor(COSName itemName) + { + COSBase c = this.getCOSObject().getItem(itemName); + if (c instanceof COSArray) + { + PDColorSpace colorSpace = null; + switch (((COSArray) c).size()) + { + case 1: + colorSpace = PDDeviceGray.INSTANCE; + break; + case 3: + colorSpace = PDDeviceRGB.INSTANCE; + break; + case 4: + colorSpace = PDDeviceCMYK.INSTANCE; + break; + default: + break; + } + return new PDColor((COSArray) c, colorSpace); + } + return null; + } + + /** + * This will set the corresponding page for this annotation. + * + * @param page is the corresponding page + */ + public void setPage(PDPage page) + { + this.getCOSObject().setItem(COSName.P, page); + } + + /** + * This will retrieve the corresponding page of this annotation. + * + * @return the corresponding page + */ + public PDPage getPage() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.P); + if (base instanceof COSDictionary) + { + return new PDPage((COSDictionary) base); + } + return null; + } + + /** + * Create the appearance entry for this annotation. Not having it may prevent display in some + * viewers. This method is for overriding in subclasses, the default implementation does + * nothing. + * + */ + public void constructAppearances() + { + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationCaret.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationCaret.java new file mode 100644 index 00000000000..29f315aa248 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationCaret.java @@ -0,0 +1,125 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDCaretAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationCaret extends PDAnnotationMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Caret"; + + private PDAppearanceHandler customAppearanceHandler; + + public PDAnnotationCaret() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a Caret annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationCaret(COSDictionary field) + { + super(field); + } + + /** + * This will set the difference between the annotations "outer" rectangle defined by + * /Rect and boundaries of the underlying. + * + *

    This will set an equal difference for all sides

    + * + * @param difference from the annotations /Rect entry + */ + public void setRectDifferences(float difference) { + setRectDifferences(difference, difference, difference, difference); + } + + /** + * This will set the difference between the annotations "outer" rectangle defined by + * /Rect and the border. + * + * @param differenceLeft left difference from the annotations /Rect entry + * @param differenceTop top difference from the annotations /Rect entry + * @param differenceRight right difference from the annotations /Rect entry + * @param differenceBottom bottom difference from the annotations /Rect entry + * + */ + public void setRectDifferences(float differenceLeft, float differenceTop, float differenceRight, float differenceBottom) + { + COSArray margins = new COSArray(); + margins.add(new COSFloat(differenceLeft)); + margins.add(new COSFloat(differenceTop)); + margins.add(new COSFloat(differenceRight)); + margins.add(new COSFloat(differenceBottom)); + getCOSObject().setItem(COSName.RD, margins); + } + + /** + * This will get the margin between the annotations "outer" rectangle defined by + * /Rect and the boundaries of the underlying caret. + * + * @return the differences. If the entry hasn't been set am empty array is returned. + */ + public float[] getRectDifferences() + { + COSBase margin = getCOSObject().getItem(COSName.RD); + if (margin instanceof COSArray) + { + return ((COSArray) margin).toFloatArray(); + } + return new float[]{}; + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDCaretAppearanceHandler appearanceHandler = new PDCaretAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationCircle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationCircle.java new file mode 100644 index 00000000000..2037b6c9b13 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationCircle.java @@ -0,0 +1,73 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDCircleAppearanceHandler; + +/** + * @author Paul King + */ +public class PDAnnotationCircle extends PDAnnotationSquareCircle +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Circle"; + + private PDAppearanceHandler customAppearanceHandler; + + public PDAnnotationCircle() + { + super(SUB_TYPE); + } + + /** + * Creates a circle annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationCircle(COSDictionary field) + { + super(field); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDCircleAppearanceHandler appearanceHandler = new PDCircleAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java new file mode 100644 index 00000000000..2b7c389576c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFileAttachment.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.filespecification.PDFileSpecification; + +/** + * This is the class that represents a file attachment. + * + * @author Ben Litchfield + */ +public class PDAnnotationFileAttachment extends PDAnnotationMarkup +{ + /** + * See get/setAttachmentName. + */ + public static final String ATTACHMENT_NAME_PUSH_PIN = "PushPin"; + /** + * See get/setAttachmentName. + */ + public static final String ATTACHMENT_NAME_GRAPH = "Graph"; + /** + * See get/setAttachmentName. + */ + public static final String ATTACHMENT_NAME_PAPERCLIP = "Paperclip"; + /** + * See get/setAttachmentName. + */ + public static final String ATTACHMENT_NAME_TAG = "Tag"; + + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "FileAttachment"; + + /** + * Constructor. + */ + public PDAnnotationFileAttachment() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a Link annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationFileAttachment(COSDictionary field) + { + super(field); + } + + /** + * Return the attached file. + * + * @return The attached file. + * + * @throws IOException If there is an error creating the file spec. + */ + public PDFileSpecification getFile() throws IOException + { + return PDFileSpecification.createFS(getCOSObject().getDictionaryObject("FS")); + } + + /** + * Set the attached file. + * + * @param file The file that is attached. + */ + public void setFile(PDFileSpecification file) + { + getCOSObject().setItem("FS", file); + } + + /** + * This is the name used to draw the type of attachment. See the ATTACHMENT_NAME_XXX constants. + * + * @return The name that describes the visual cue for the attachment. + */ + public String getAttachmentName() + { + return getCOSObject().getNameAsString(COSName.NAME, ATTACHMENT_NAME_PUSH_PIN); + } + + /** + * Set the name used to draw the attachment icon. See the ATTACHMENT_NAME_XXX constants. + * + * @param name The name of the visual icon to draw. + */ + public void setAttachmentName(String name) + { + getCOSObject().setName(COSName.NAME, name); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFreeText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFreeText.java new file mode 100644 index 00000000000..3d5900b7547 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationFreeText.java @@ -0,0 +1,326 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDFreeTextAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.form.PDVariableText; + +/** + * + * @author Paul King + */ +public class PDAnnotationFreeText extends PDAnnotationMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "FreeText"; + + /** + * A plain free-text annotation, also known as a text box comment. + */ + public static final String IT_FREE_TEXT = "FreeText"; + + /** + * A callout, associated with an area on the page through the callout line specified. + */ + public static final String IT_FREE_TEXT_CALLOUT = "FreeTextCallout"; + + /** + * The annotation is intended to function as a click-to-type or typewriter object. + */ + public static final String IT_FREE_TEXT_TYPE_WRITER = "FreeTextTypeWriter"; + + private PDAppearanceHandler customAppearanceHandler; + + public PDAnnotationFreeText() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a FreeText annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationFreeText(COSDictionary field) + { + super(field); + } + + /** + * Get the default appearance. + * + * @return a string describing the default appearance. + */ + public String getDefaultAppearance() + { + return getCOSObject().getString(COSName.DA); + } + + /** + * Set the default appearance. + * + * @param daValue a string describing the default appearance. + */ + public void setDefaultAppearance(String daValue) + { + getCOSObject().setString(COSName.DA, daValue); + } + + /** + * Get the default style string. + * + * The default style string defines the default style for rich text fields. + * + * @return the DS element of the dictionary object + */ + public String getDefaultStyleString() + { + return getCOSObject().getString(COSName.DS); + } + + /** + * Set the default style string. + * + * Providing null as the value will remove the default style string. + * + * @param defaultStyleString a string describing the default style. + */ + public void setDefaultStyleString(String defaultStyleString) + { + getCOSObject().setString(COSName.DS, defaultStyleString); + } + + /** + * This will get the 'quadding' or justification of the text to be displayed. + *
    + * 0 - Left (default)
    + * 1 - Centered
    + * 2 - Right
    + * Please see the QUADDING_CONSTANTS in {@link PDVariableText }. + * + * @return The justification of the text strings. + */ + public int getQ() + { + return getCOSObject().getInt(COSName.Q, 0); + } + + /** + * This will set the quadding/justification of the text. Please see the QUADDING_CONSTANTS + * in {@link PDVariableText }. + * + * @param q The new text justification. + */ + public void setQ(int q) + { + getCOSObject().setInt(COSName.Q, q); + } + + /** + * This will set the difference between the annotations "outer" rectangle defined by + * /Rect and the border. + * + *

    This will set an equal difference for all sides

    + * + * @param difference from the annotations /Rect entry + */ + public void setRectDifferences(float difference) { + setRectDifferences(difference, difference, difference, difference); + } + + /** + * This will set the difference between the annotations "outer" rectangle defined by + * /Rect and the border. + * + * @param differenceLeft left difference from the annotations /Rect entry + * @param differenceTop top difference from the annotations /Rect entry + * @param differenceRight right difference from the annotations /Rect entry + * @param differenceBottom bottom difference from the annotations /Rect entry + * + */ + public void setRectDifferences(float differenceLeft, float differenceTop, float differenceRight, float differenceBottom) + { + COSArray margins = new COSArray(); + margins.add(new COSFloat(differenceLeft)); + margins.add(new COSFloat(differenceTop)); + margins.add(new COSFloat(differenceRight)); + margins.add(new COSFloat(differenceBottom)); + getCOSObject().setItem(COSName.RD, margins); + } + + /** + * This will get the margin between the annotations "outer" rectangle defined by + * /Rect and the border. + * + * @return the differences. If the entry hasn't been set am empty array is returned. + */ + public float[] getRectDifferences() + { + COSBase margin = getCOSObject().getItem(COSName.RD); + if (margin instanceof COSArray) + { + return ((COSArray) margin).toFloatArray(); + } + return new float[]{}; + } + + /** + * This will set the coordinates of the callout line. (PDF 1.6 and higher) Only relevant if the + * intent is FreeTextCallout. + * + * @param callout An array of four or six numbers specifying a callout line attached to the free + * text annotation. Six numbers [ x1 y1 x2 y2 x3 y3 ] represent the starting, knee point, and + * ending coordinates of the line in default user space, four numbers [ x1 y1 x2 y2 ] represent + * the starting and ending coordinates of the line. + */ + public final void setCallout(float[] callout) + { + COSArray newCallout = new COSArray(); + newCallout.setFloatArray(callout); + getCOSObject().setItem(COSName.CL, newCallout); + } + + /** + * This will get the coordinates of the callout line. (PDF 1.6 and higher) Only relevant if the + * intent is FreeTextCallout. + * + * @return An array of four or six numbers specifying a callout line attached to the free text + * annotation. Six numbers [ x1 y1 x2 y2 x3 y3 ] represent the starting, knee point, and ending + * coordinates of the line in default user space, four numbers [ x1 y1 x2 y2 ] represent the + * starting and ending coordinates of the line. + */ + public float[] getCallout() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.CL); + if (base instanceof COSArray) + { + return ((COSArray) base).toFloatArray(); + } + return null; + } + + /** + * This will set the line ending style. + * + * @param style The new style. + */ + public final void setLineEndingStyle(String style) + { + getCOSObject().setName(COSName.LE, style); + } + + /** + * This will retrieve the line ending style. + * + * @return The line ending style, possible values shown in the LE_ constants section, LE_NONE if + * missing, never null. + */ + public String getLineEndingStyle() + { + return getCOSObject().getNameAsString(COSName.LE, PDAnnotationLine.LE_NONE); + } + + /** + * This will set the border effect dictionary, specifying effects to be applied when drawing the + * line. This is supported by PDF 1.6 and higher. + * + * @param be The border effect dictionary to set. + * + */ + public void setBorderEffect(PDBorderEffectDictionary be) + { + getCOSObject().setItem(COSName.BE, be); + } + + /** + * This will retrieve the border effect dictionary, specifying effects to be applied used in + * drawing the line. + * + * @return The border effect dictionary + */ + public PDBorderEffectDictionary getBorderEffect() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.BE); + if (base instanceof COSDictionary) + { + return new PDBorderEffectDictionary((COSDictionary) base); + } + return null; + } + + /** + * This will set the rectangle difference rectangle. Giving the difference between the + * annotations rectangle and where the drawing occurs. (To take account of any effects applied + * through the BE entry for example) + * + * @param rd the rectangle difference + * + */ + public void setRectDifference(PDRectangle rd) + { + getCOSObject().setItem(COSName.RD, rd); + } + + /** + * This will get the rectangle difference rectangle. Giving the difference between the + * annotations rectangle and where the drawing occurs. (To take account of any effects applied + * through the BE entry for example) + * + * @return the rectangle difference + */ + public PDRectangle getRectDifference() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.RD); + if (base instanceof COSArray) + { + return new PDRectangle((COSArray) base); + } + return null; + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDFreeTextAppearanceHandler appearanceHandler = new PDFreeTextAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationHighlight.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationHighlight.java new file mode 100644 index 00000000000..7a62188f60e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationHighlight.java @@ -0,0 +1,77 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDHighlightAppearanceHandler; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationHighlight extends PDAnnotationTextMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Highlight"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationHighlight() + { + super(SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationHighlight(COSDictionary dict) + { + super(dict); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDHighlightAppearanceHandler appearanceHandler = new PDHighlightAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationInk.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationInk.java new file mode 100644 index 00000000000..c5ae6f3dfc3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationInk.java @@ -0,0 +1,134 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDInkAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationInk extends PDAnnotationMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Ink"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationInk() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationInk(COSDictionary dict) + { + super(dict); + } + + /** + * Sets the paths that make this annotation. + * + * @param inkList An array of arrays, each representing a stroked path. Each array shall be a + * series of alternating horizontal and vertical coordinates. If the parameter is null the entry + * will be removed. + */ + public void setInkList(float[][] inkList) + { + if (inkList == null) + { + getCOSObject().removeItem(COSName.INKLIST); + return; + } + COSArray array = new COSArray(); + for (float[] path : inkList) + { + COSArray innerArray = new COSArray(); + innerArray.setFloatArray(path); + array.add(innerArray); + } + getCOSObject().setItem(COSName.INKLIST, array); + } + + /** + * Get one or more disjoint paths that make this annotation. + * + * @return An array of arrays, each representing a stroked path. Each array shall be a series of + * alternating horizontal and vertical coordinates. + */ + public float[][] getInkList() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.INKLIST); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + float[][] inkList = new float[array.size()][]; + for (int i = 0; i < array.size(); ++i) + { + COSBase base2 = array.getObject(i); + if (base2 instanceof COSArray) + { + inkList[i] = ((COSArray) array.getObject(i)).toFloatArray(); + } + else + { + inkList[i] = new float[0]; + } + } + return inkList; + } + return new float[0][0]; + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDInkAppearanceHandler appearanceHandler = new PDInkAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java new file mode 100644 index 00000000000..26206f8f81a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLine.java @@ -0,0 +1,449 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDLineAppearanceHandler; + +/** + * This is the class that represents a line annotation. Introduced in PDF 1.3 specification + * + * @author Paul King + */ +public class PDAnnotationLine extends PDAnnotationMarkup +{ + private PDAppearanceHandler customAppearanceHandler; + + /* + * The various values for intent (get/setIT, see the PDF 1.6 reference Table 8.22 + */ + + /** + * Constant for annotation intent of Arrow. + */ + public static final String IT_LINE_ARROW = "LineArrow"; + + /** + * Constant for annotation intent of a dimension line. + */ + public static final String IT_LINE_DIMENSION = "LineDimension"; + + /* + * The various values for line ending styles, see the PDF 1.6 reference Table 8.23 + */ + + /** + * Constant for a square line ending. + */ + public static final String LE_SQUARE = "Square"; + + /** + * Constant for a circle line ending. + */ + public static final String LE_CIRCLE = "Circle"; + + /** + * Constant for a diamond line ending. + */ + public static final String LE_DIAMOND = "Diamond"; + + /** + * Constant for a open arrow line ending. + */ + public static final String LE_OPEN_ARROW = "OpenArrow"; + + /** + * Constant for a closed arrow line ending. + */ + public static final String LE_CLOSED_ARROW = "ClosedArrow"; + + /** + * Constant for no line ending. + */ + public static final String LE_NONE = "None"; + + /** + * Constant for a butt line ending. + */ + public static final String LE_BUTT = "Butt"; + + /** + * Constant for a reversed open arrow line ending. + */ + public static final String LE_R_OPEN_ARROW = "ROpenArrow"; + + /** + * Constant for a revered closed arrow line ending. + */ + public static final String LE_R_CLOSED_ARROW = "RClosedArrow"; + + /** + * Constant for a slash line ending. + */ + public static final String LE_SLASH = "Slash"; + + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Line"; + + /** + * Constructor. + */ + public PDAnnotationLine() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + // Dictionary value L is mandatory, fill in with arbitary value + setLine(new float[] { 0, 0, 0, 0 }); + } + + /** + * Creates a Line annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationLine(COSDictionary field) + { + super(field); + } + + /** + * This will set start and end coordinates of the line (or leader line if LL entry is set). + * + * @param l array of 4 floats [x1, y1, x2, y2] line start and end points in default user space. + */ + public void setLine(float[] l) + { + COSArray newL = new COSArray(); + newL.setFloatArray(l); + getCOSObject().setItem(COSName.L, newL); + } + + /** + * This will retrieve the start and end coordinates of the line (or leader line if LL entry is set). + * + * @return array of floats [x1, y1, x2, y2] line start and end points in default user space. + */ + public float[] getLine() + { + COSArray l = (COSArray) getCOSObject().getDictionaryObject(COSName.L); + return l.toFloatArray(); + } + + /** + * This will set the line ending style for the start point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public void setStartPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + COSArray array; + if (!(base instanceof COSArray) || ((COSArray) base).size() == 0) + { + array = new COSArray(); + array.add(COSName.getPDFName(actualStyle)); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + getCOSObject().setItem(COSName.LE, array); + } + else + { + array = (COSArray) base; + array.setName(0, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the start point, possible values shown in the LE_ constants section. + * + * @return The ending style for the start point, LE_NONE if missing, never null. + */ + public String getStartPointEndingStyle() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + if (base instanceof COSArray && ((COSArray) base).size() >= 2) + { + return ((COSArray) base).getName(0, LE_NONE); + } + return LE_NONE; + } + + /** + * This will set the line ending style for the end point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public void setEndPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + COSArray array; + if (!(base instanceof COSArray) || ((COSArray) base).size() < 2) + { + array = new COSArray(); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + array.add(COSName.getPDFName(actualStyle)); + getCOSObject().setItem(COSName.LE, array); + } + else + { + array = (COSArray) base; + array.setName(1, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the end point, possible values shown in the LE_ constants section. + * + * @return The ending style for the end point, LE_NONE if missing, never null. + */ + public String getEndPointEndingStyle() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + if (base instanceof COSArray && ((COSArray) base).size() >= 2) + { + return ((COSArray) base).getName(1, LE_NONE); + } + return LE_NONE; + } + + /** + * This will set interior color of the line endings defined in the LE entry. color is in DeviceRGB color space. + * + * @param ic color in the DeviceRGB color space. + */ + public void setInteriorColor(PDColor ic) + { + getCOSObject().setItem(COSName.IC, ic.toCOSArray()); + } + + /** + * This will retrieve the interior color of the line endings defined in the LE entry. color is in DeviceRGB color + * space. + * + * @return object representing the color. + */ + public PDColor getInteriorColor() + { + return getColor(COSName.IC); + } + + /** + * This will set if the contents are shown as a caption to the line. + * + * @param cap Boolean value. + */ + public void setCaption(boolean cap) + { + getCOSObject().setBoolean(COSName.CAP, cap); + } + + /** + * This will retrieve whether the text specified by the /Contents or /RC entries shall be + * shown as a caption in the appearance of the line. + * + * @return boolean if the contents shall be shown as a caption (default: false). + */ + public boolean hasCaption() + { + return getCOSObject().getBoolean(COSName.CAP, false); + } + + /** + * This will retrieve the length of the leader line. + * + * @return the length of the leader line + */ + public float getLeaderLineLength() + { + return this.getCOSObject().getFloat(COSName.LL, 0); + } + + /** + * This will set the length of the leader line. + * + * @param leaderLineLength length of the leader line + */ + public void setLeaderLineLength(float leaderLineLength) + { + this.getCOSObject().setFloat(COSName.LL, leaderLineLength); + } + + /** + * This will retrieve the length of the leader line extensions. + * + * @return the length of the leader line extensions + */ + public float getLeaderLineExtensionLength() + { + return this.getCOSObject().getFloat(COSName.LLE, 0); + } + + /** + * This will set the length of the leader line extensions. + * + * @param leaderLineExtensionLength length of the leader line extensions + */ + public void setLeaderLineExtensionLength(float leaderLineExtensionLength) + { + this.getCOSObject().setFloat(COSName.LLE, leaderLineExtensionLength); + } + + /** + * This will retrieve the length of the leader line offset. + * + * @return the length of the leader line offset + */ + public float getLeaderLineOffsetLength() + { + return this.getCOSObject().getFloat(COSName.LLO, 0); + } + + /** + * This will set the length of the leader line offset. + * + * @param leaderLineOffsetLength length of the leader line offset + */ + public void setLeaderLineOffsetLength(float leaderLineOffsetLength) + { + this.getCOSObject().setFloat(COSName.LLO, leaderLineOffsetLength); + } + + /** + * This will retrieve the caption positioning. + * + * @return the caption positioning + */ + public String getCaptionPositioning() + { + return this.getCOSObject().getNameAsString(COSName.CP); + } + + /** + * This will set the caption positioning. Allowed values are: "Inline" and "Top" + * + * @param captionPositioning caption positioning + */ + public void setCaptionPositioning(String captionPositioning) + { + this.getCOSObject().setName(COSName.CP, captionPositioning); + } + + /** + * This will set the horizontal offset of the caption. + * + * @param offset the horizontal offset of the caption + */ + public void setCaptionHorizontalOffset(float offset) + { + COSArray array = (COSArray) this.getCOSObject().getDictionaryObject(COSName.CO); + if (array == null) + { + array = new COSArray(); + array.setFloatArray(new float[] { offset, 0.f }); + this.getCOSObject().setItem(COSName.CO, array); + } + else + { + array.set(0, new COSFloat(offset)); + } + } + + /** + * This will retrieve the horizontal offset of the caption. + * + * @return the horizontal offset of the caption + */ + public float getCaptionHorizontalOffset() + { + float retval = 0.f; + COSArray array = (COSArray) this.getCOSObject().getDictionaryObject(COSName.CO); + if (array != null) + { + retval = array.toFloatArray()[0]; + } + + return retval; + } + + /** + * This will set the vertical offset of the caption. + * + * @param offset vertical offset of the caption + */ + public void setCaptionVerticalOffset(float offset) + { + COSArray array = (COSArray) this.getCOSObject().getDictionaryObject(COSName.CO); + if (array == null) + { + array = new COSArray(); + array.setFloatArray(new float[] { 0.f, offset }); + this.getCOSObject().setItem(COSName.CO, array); + } + else + { + array.set(1, new COSFloat(offset)); + } + } + + /** + * This will retrieve the vertical offset of the caption. + * + * @return the vertical offset of the caption + */ + public float getCaptionVerticalOffset() + { + float retval = 0.f; + COSArray array = (COSArray) this.getCOSObject().getDictionaryObject(COSName.CO); + if (array != null) + { + retval = array.toFloatArray()[1]; + } + return retval; + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDLineAppearanceHandler appearanceHandler = new PDLineAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java new file mode 100644 index 00000000000..98ce86a8938 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationLink.java @@ -0,0 +1,259 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionURI; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDLinkAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; + +/** + * This is the class that represents a link annotation. + * + * @author Ben Litchfield + * @author Paul King + */ +public class PDAnnotationLink extends PDAnnotation +{ + + /** + * Constant values of the Text as defined in the PDF 1.6 reference Table 8.19. + */ + public static final String HIGHLIGHT_MODE_NONE = "N"; + /** + * Constant values of the Text as defined in the PDF 1.6 reference Table 8.19. + */ + public static final String HIGHLIGHT_MODE_INVERT = "I"; + /** + * Constant values of the Text as defined in the PDF 1.6 reference Table 8.19. + */ + public static final String HIGHLIGHT_MODE_OUTLINE = "O"; + /** + * Constant values of the Text as defined in the PDF 1.6 reference Table 8.19. + */ + public static final String HIGHLIGHT_MODE_PUSH = "P"; + + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Link"; + + /** + * Custom appearance handler to generate an appearance stream. + */ + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationLink() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a Link annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationLink(COSDictionary field) + { + super(field); + } + + /** + * Get the action to be performed when this annotation is to be activated. Either this or the + * destination entry should be set, but not both. + * + * @return The action to be performed when this annotation is activated. + */ + public PDAction getAction() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.A); + if (base instanceof COSDictionary) + { + return PDActionFactory.createAction((COSDictionary) base); + } + return null; + } + + /** + * Set the annotation action. Either this or the destination entry should be set, but not both. + * + * @param action The annotation action. + * + */ + public void setAction(PDAction action) + { + this.getCOSObject().setItem(COSName.A, action); + } + + /** + * This will set the border style dictionary, specifying the width and dash pattern used in drawing the line. + * + * @param bs the border style dictionary to set. + * + */ + public void setBorderStyle(PDBorderStyleDictionary bs) + { + this.getCOSObject().setItem(COSName.BS, bs); + } + + /** + * This will retrieve the border style dictionary, specifying the width and dash pattern used in + * drawing the line. + * + * @return the border style dictionary. + */ + public PDBorderStyleDictionary getBorderStyle() + { + COSBase bs = getCOSObject().getDictionaryObject(COSName.BS); + if (bs instanceof COSDictionary) + { + return new PDBorderStyleDictionary((COSDictionary) bs); + } + return null; + } + + /** + * Get the destination to be displayed when the annotation is activated. Either this or the + * action entry should be set, but not both. + * + * @return The destination for this annotation. + * + * @throws IOException If there is an error creating the destination. + */ + public PDDestination getDestination() throws IOException + { + COSBase base = getCOSObject().getDictionaryObject(COSName.DEST); + return PDDestination.create(base); + } + + /** + * The new destination value. Either this or the action entry should be set, but not both. + * + * @param dest The updated destination. + */ + public void setDestination(PDDestination dest) + { + getCOSObject().setItem(COSName.DEST, dest); + } + + /** + * Set the highlight mode for when the mouse is depressed. See the HIGHLIGHT_MODE_XXX constants. + * + * @return The string representation of the highlight mode. + */ + public String getHighlightMode() + { + return getCOSObject().getNameAsString(COSName.H, HIGHLIGHT_MODE_INVERT); + } + + /** + * Set the highlight mode. See the HIGHLIGHT_MODE_XXX constants. + * + * @param mode The new highlight mode. + */ + public void setHighlightMode(String mode) + { + getCOSObject().setName(COSName.H, mode); + } + + /** + * This will set the previous URI action, in case it needs to be retrieved at later date. + * + * @param pa The previous URI. + */ + public void setPreviousURI(PDActionURI pa) + { + getCOSObject().setItem("PA", pa); + } + + /** + * This will set the previous URI action, in case it's needed. + * + * @return The previous URI. + */ + public PDActionURI getPreviousURI() + { + COSBase base = getCOSObject().getDictionaryObject("PA"); + if (base instanceof COSDictionary) + { + return new PDActionURI((COSDictionary) base); + } + return null; + } + + /** + * This will set the set of quadpoints which encompass the areas of this annotation which will activate. + * + * @param quadPoints an array representing the set of area covered. + */ + public void setQuadPoints(float[] quadPoints) + { + COSArray newQuadPoints = new COSArray(); + newQuadPoints.setFloatArray(quadPoints); + getCOSObject().setItem(COSName.QUADPOINTS, newQuadPoints); + } + + /** + * This will retrieve the set of quadpoints which encompass the areas of this annotation which will activate. + * + * @return An array of floats representing the quad points. + */ + public float[] getQuadPoints() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.QUADPOINTS); + if (base instanceof COSArray) + { + return ((COSArray) base).toFloatArray(); + } + return null; + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDLinkAppearanceHandler appearanceHandler = new PDLinkAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java new file mode 100644 index 00000000000..d59327ab2c9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationMarkup.java @@ -0,0 +1,330 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import java.io.IOException; +import java.util.Calendar; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; + +/** + * This class represents the additional fields of a Markup type Annotation. See section 12.5.6 of ISO32000-1:2008 + * (starting with page 390) for details on annotation types. + * + * @author Paul King + */ +public class PDAnnotationMarkup extends PDAnnotation +{ + /* + * The various values of the reply type as defined in the PDF 1.7 reference Table 170 + */ + + /** + * Constant for an annotation reply type. + */ + public static final String RT_REPLY = "R"; + + /** + * Constant for an annotation reply type. + */ + public static final String RT_GROUP = "Group"; + + /** + * Constructor. + */ + public PDAnnotationMarkup() + { + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationMarkup(COSDictionary dict) + { + super(dict); + } + + /** + * Retrieve the string used as the title of the popup window shown when open and active (by convention this + * identifies who added the annotation). + * + * @return The title of the popup. + */ + public String getTitlePopup() + { + return getCOSObject().getString(COSName.T); + } + + /** + * Set the string used as the title of the popup window shown when open and active (by convention this identifies + * who added the annotation). + * + * @param t The title of the popup. + */ + public void setTitlePopup(String t) + { + getCOSObject().setString(COSName.T, t); + } + + /** + * This will retrieve the popup annotation used for entering/editing the text for this annotation. + * + * @return the popup annotation. + */ + public PDAnnotationPopup getPopup() + { + COSDictionary popup = (COSDictionary) getCOSObject().getDictionaryObject("Popup"); + if (popup != null) + { + return new PDAnnotationPopup(popup); + } + else + { + return null; + } + } + + /** + * This will set the popup annotation used for entering/editing the text for this annotation. + * + * @param popup the popup annotation. + */ + public void setPopup(PDAnnotationPopup popup) + { + getCOSObject().setItem("Popup", popup); + } + + /** + * This will retrieve the constant opacity value used when rendering the annotation (excluing any popup). + * + * @return the constant opacity value. + */ + public float getConstantOpacity() + { + return getCOSObject().getFloat(COSName.CA, 1); + } + + /** + * This will set the constant opacity value used when rendering the annotation (excluing any popup). + * + * @param ca the constant opacity value. + */ + public void setConstantOpacity(float ca) + { + getCOSObject().setFloat(COSName.CA, ca); + } + + /** + * This will retrieve the rich text stream which is displayed in the popup window. + * + * @return the rich text stream. + */ + public String getRichContents() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.RC); + if (base instanceof COSString) + { + return ((COSString) base).getString(); + } + else if (base instanceof COSStream) + { + return ((COSStream) base).toTextString(); + } + else + { + return null; + } + } + + /** + * This will set the rich text stream which is displayed in the popup window. + * + * @param rc the rich text stream. + */ + public void setRichContents(String rc) + { + getCOSObject().setItem(COSName.RC, new COSString(rc)); + } + + /** + * This will retrieve the date and time the annotation was created. + * + * @return the creation date/time. + */ + public Calendar getCreationDate() + { + return getCOSObject().getDate(COSName.CREATION_DATE); + } + + /** + * This will set the date and time the annotation was created. + * + * @param creationDate the date and time the annotation was created. + */ + public void setCreationDate(Calendar creationDate) + { + getCOSObject().setDate(COSName.CREATION_DATE, creationDate); + } + + /** + * This will retrieve the annotation to which this one is "In Reply To" the actual relationship + * is specified by the RT entry. + * + * @return the other annotation or null if there is none. + * @throws IOException if there is an error creating the other annotation. + */ + public PDAnnotation getInReplyTo() throws IOException + { + COSBase base = getCOSObject().getDictionaryObject("IRT"); + if (base instanceof COSDictionary) + { + return PDAnnotation.createAnnotation(base); + } + return null; + } + + /** + * This will set the annotation to which this one is "In Reply To" the actual relationship is specified by the RT + * entry. + * + * @param irt the annotation this one is "In Reply To". + */ + public void setInReplyTo(PDAnnotation irt) + { + getCOSObject().setItem("IRT", irt); + } + + /** + * This will retrieve the short description of the subject of the annotation. + * + * @return the subject. + */ + public String getSubject() + { + return getCOSObject().getString(COSName.SUBJ); + } + + /** + * This will set the short description of the subject of the annotation. + * + * @param subj short description of the subject. + */ + public void setSubject(String subj) + { + getCOSObject().setString(COSName.SUBJ, subj); + } + + /** + * This will retrieve the Reply Type (relationship) with the annotation in the IRT entry See the RT_* constants for + * the available values. + * + * @return the relationship. + */ + public String getReplyType() + { + return getCOSObject().getNameAsString("RT", RT_REPLY); + } + + /** + * This will set the Reply Type (relationship) with the annotation in the IRT entry See the RT_* constants for the + * available values. + * + * @param rt the reply type. + */ + public void setReplyType(String rt) + { + getCOSObject().setName("RT", rt); + } + + /** + * This will retrieve the intent of the annotation The values and meanings are specific to the actual annotation See + * the IT_* constants for the annotation classes. + * + * @return the intent + */ + public String getIntent() + { + return getCOSObject().getNameAsString(COSName.IT); + } + + /** + * This will set the intent of the annotation The values and meanings are specific to the actual annotation See the + * IT_* constants for the annotation classes. + * + * @param it the intent + */ + public void setIntent(String it) + { + getCOSObject().setName(COSName.IT, it); + } + + /** + * This will return the external data dictionary. + * + * @return the external data dictionary + */ + public PDExternalDataDictionary getExternalData() + { + COSBase exData = this.getCOSObject().getDictionaryObject("ExData"); + if (exData instanceof COSDictionary) + { + return new PDExternalDataDictionary((COSDictionary) exData); + } + return null; + } + + /** + * This will set the external data dictionary. + * + * @param externalData the external data dictionary + */ + public void setExternalData(PDExternalDataDictionary externalData) + { + this.getCOSObject().setItem("ExData", externalData); + } + + /** + * This will set the border style dictionary, specifying the width and dash pattern used in drawing the line. + * + * @param bs the border style dictionary to set. + * + */ + public void setBorderStyle(PDBorderStyleDictionary bs) + { + this.getCOSObject().setItem(COSName.BS, bs); + } + + /** + * This will retrieve the border style dictionary, specifying the width and dash pattern used in drawing the line. + * + * @return the border style dictionary. + */ + public PDBorderStyleDictionary getBorderStyle() + { + COSBase bs = getCOSObject().getDictionaryObject(COSName.BS); + if (bs instanceof COSDictionary) + { + return new PDBorderStyleDictionary((COSDictionary) bs); + } + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPolygon.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPolygon.java new file mode 100644 index 00000000000..2fd0e74b68f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPolygon.java @@ -0,0 +1,195 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDPolygonAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationPolygon extends PDAnnotationMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Polygon"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationPolygon() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationPolygon(COSDictionary dict) + { + super(dict); + } + + // PDF 32000 specification has "the interior color with which to fill the annotation’s line endings" + // but it is the inside of the polygon. + + /** + * This will set interior color. + * + * @param ic color. + */ + public void setInteriorColor(PDColor ic) + { + getCOSObject().setItem(COSName.IC, ic.toCOSArray()); + } + + /** + * This will retrieve the interior color. + * + * @return object representing the color. + */ + public PDColor getInteriorColor() + { + return getColor(COSName.IC); + } + + /** + * This will set the border effect dictionary, specifying effects to be applied when drawing the + * line. This is supported by PDF 1.5 and higher. + * + * @param be The border effect dictionary to set. + * + */ + public void setBorderEffect(PDBorderEffectDictionary be) + { + getCOSObject().setItem(COSName.BE, be); + } + + /** + * This will retrieve the border effect dictionary, specifying effects to be applied used in + * drawing the line. + * + * @return The border effect dictionary + */ + public PDBorderEffectDictionary getBorderEffect() + { + COSDictionary be = (COSDictionary) getCOSObject().getDictionaryObject(COSName.BE); + if (be != null) + { + return new PDBorderEffectDictionary(be); + } + else + { + return null; + } + } + + /** + * This will retrieve the numbers that shall represent the alternating horizontal and vertical + * coordinates. + * + * @return An array of floats representing the alternating horizontal and vertical coordinates. + */ + public float[] getVertices() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.VERTICES); + if (base instanceof COSArray) + { + return ((COSArray) base).toFloatArray(); + } + return null; + } + + /** + * This will set the numbers that shall represent the alternating horizontal and vertical + * coordinates. + * + * @param points an array with the numbers that shall represent the alternating horizontal and + * vertical coordinates. + */ + public void setVertices(float[] points) + { + COSArray ar = new COSArray(); + ar.setFloatArray(points); + getCOSObject().setItem(COSName.VERTICES, ar); + } + + /** + * PDF 2.0: This will retrieve the arrays that shall represent the alternating horizontal + * and vertical coordinates for path building. + * + * @return An array of float arrays, each supplying the operands for a path building operator + * (m, l or c). The first array should have 2 elements, the others should have 2 or 6 elements. + */ + public float[][] getPath() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.PATH); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + float[][] pathArray = new float[array.size()][]; + for (int i = 0; i < array.size(); ++i) + { + COSBase base2 = array.getObject(i); + if (base2 instanceof COSArray) + { + pathArray[i] = ((COSArray) array.getObject(i)).toFloatArray(); + } + else + { + pathArray[i] = new float[0]; + } + } + return pathArray; + } + return null; + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDPolygonAppearanceHandler appearanceHandler = new PDPolygonAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPolyline.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPolyline.java new file mode 100644 index 00000000000..327d1fdca0d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPolyline.java @@ -0,0 +1,208 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDPolylineAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationPolyline extends PDAnnotationMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "PolyLine"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationPolyline() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationPolyline(COSDictionary dict) + { + super(dict); + } + + /** + * This will set the line ending style for the start point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public void setStartPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + COSArray array; + if (!(base instanceof COSArray) || ((COSArray) base).size() == 0) + { + array = new COSArray(); + array.add(COSName.getPDFName(actualStyle)); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + getCOSObject().setItem(COSName.LE, array); + } + else + { + array = (COSArray) base; + array.setName(0, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the start point, possible values shown in the LE_ constants section. + * + * @return The ending style for the start point, LE_NONE if missing, never null. + */ + public String getStartPointEndingStyle() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + if (base instanceof COSArray && ((COSArray) base).size() >= 2) + { + return ((COSArray) base).getName(0, PDAnnotationLine.LE_NONE); + } + return PDAnnotationLine.LE_NONE; + } + + /** + * This will set the line ending style for the end point, see the LE_ constants for the possible values. + * + * @param style The new style. + */ + public void setEndPointEndingStyle(String style) + { + String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style; + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + COSArray array; + if (!(base instanceof COSArray) || ((COSArray) base).size() < 2) + { + array = new COSArray(); + array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); + array.add(COSName.getPDFName(actualStyle)); + getCOSObject().setItem(COSName.LE, array); + } + else + { + array = (COSArray) base; + array.setName(1, actualStyle); + } + } + + /** + * This will retrieve the line ending style for the end point, possible values shown in the LE_ constants section. + * + * @return The ending style for the end point, LE_NONE if missing, never null. + */ + public String getEndPointEndingStyle() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.LE); + if (base instanceof COSArray && ((COSArray) base).size() >= 2) + { + return ((COSArray) base).getName(1, PDAnnotationLine.LE_NONE); + } + return PDAnnotationLine.LE_NONE; + } + + /** + * This will set interior color of the line endings defined in the LE entry. + * + * @param ic color. + */ + public void setInteriorColor(PDColor ic) + { + getCOSObject().setItem(COSName.IC, ic.toCOSArray()); + } + + /** + * This will retrieve the interior color with which to fill the annotation’s line endings. + * + * @return object representing the color. + */ + public PDColor getInteriorColor() + { + return getColor(COSName.IC); + } + + /** + * This will retrieve the numbers that shall represent the alternating horizontal and vertical + * coordinates. + * + * @return An array of floats representing the alternating horizontal and vertical coordinates. + */ + public float[] getVertices() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.VERTICES); + if (base instanceof COSArray) + { + return ((COSArray) base).toFloatArray(); + } + return null; + } + + /** + * This will set the numbers that shall represent the alternating horizontal and vertical + * coordinates. + * + * @param points an array with the numbers that shall represent the alternating horizontal and + * vertical coordinates. + */ + public void setVertices(float[] points) + { + COSArray ar = new COSArray(); + ar.setFloatArray(points); + getCOSObject().setItem(COSName.VERTICES, ar); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDPolylineAppearanceHandler appearanceHandler = new PDPolylineAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java new file mode 100644 index 00000000000..3c77a74ca54 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * This is the class that represents a popup annotation. Introduced in PDF 1.3 specification + * + * @author Paul King + */ +public class PDAnnotationPopup extends PDAnnotation +{ + private static final Log LOG = LogFactory.getLog(PDAnnotationPopup.class); + + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Popup"; + + /** + * Constructor. + */ + public PDAnnotationPopup() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a popup annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationPopup(COSDictionary field) + { + super(field); + } + + /** + * This will set inital state of the annotation, open or closed. + * + * @param open Boolean value, true = open false = closed. + */ + public void setOpen(boolean open) + { + getCOSObject().setBoolean("Open", open); + } + + /** + * This will retrieve the initial state of the annotation, open Or closed (default closed). + * + * @return The initial state, true = open false = closed. + */ + public boolean getOpen() + { + return getCOSObject().getBoolean("Open", false); + } + + /** + * This will set the markup annotation which this popup relates to. + * + * @param annot the markup annotation. + */ + public void setParent(PDAnnotationMarkup annot) + { + getCOSObject().setItem(COSName.PARENT, annot.getCOSObject()); + } + + /** + * This will retrieve the markup annotation which this popup relates to. + * + * @return The parent markup annotation. + */ + public PDAnnotationMarkup getParent() + { + PDAnnotationMarkup am = null; + try + { + am = (PDAnnotationMarkup) PDAnnotation.createAnnotation(getCOSObject() + .getDictionaryObject(COSName.PARENT, COSName.P)); + } + catch (IOException ioe) + { + LOG.debug("An exception while trying to get the parent markup - ignoring", ioe); + // Couldn't construct the annotation, so return null i.e. do nothing + } + return am; + } + +} diff --git a/src/org/pdfbox/pdmodel/interactive/annotation/PDAnnotationRubberStamp.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationRubberStamp.java similarity index 78% rename from src/org/pdfbox/pdmodel/interactive/annotation/PDAnnotationRubberStamp.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationRubberStamp.java index 5ac45951737..93a17bcf6b0 100644 --- a/src/org/pdfbox/pdmodel/interactive/annotation/PDAnnotationRubberStamp.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationRubberStamp.java @@ -14,24 +14,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.annotation; +package org.apache.pdfbox.pdmodel.interactive.annotation; -import org.pdfbox.cos.COSDictionary; -import org.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; /** - * This is the class that represents a rubber stamp annotation. - * Introduced in PDF 1.3 specification + * This is the class that represents a rubber stamp annotation. Introduced in PDF 1.3 specification * * @author Paul King - * @version $Revision: 1.2 $ */ public class PDAnnotationRubberStamp extends PDAnnotationMarkup { /* - * The various values of the rubber stamp as defined in - * the PDF 1.6 reference Table 8.28 + * The various values of the rubber stamp as defined in the PDF 1.6 reference Table 8.28 */ /** @@ -101,40 +98,38 @@ public class PDAnnotationRubberStamp extends PDAnnotationMarkup */ public PDAnnotationRubberStamp() { - super(); - getDictionary().setItem( COSName.SUBTYPE, COSName.getPDFName( SUB_TYPE ) ); + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); } /** - * Creates a Rubber Stamp annotation from a COSDictionary, expected to be - * a correct object definition. + * Creates a Rubber Stamp annotation from a COSDictionary, expected to be a correct object definition. * - * @param field the PDF objet to represent as a field. + * @param field the PDF object to represent as a field. */ public PDAnnotationRubberStamp(COSDictionary field) { - super( field ); + super(field); } /** - * This will set the name (and hence appearance, AP taking precedence) - * For this annotation. See the NAME_XXX constants for valid values. + * This will set the name (and hence appearance, AP taking precedence) For this annotation. See the NAME_XXX + * constants for valid values. * * @param name The name of the rubber stamp. */ - public void setName( String name ) + public void setName(String name) { - getDictionary().setName(COSName.NAME, name); + getCOSObject().setName(COSName.NAME, name); } /** - * This will retrieve the name (and hence appearance, AP taking precedence) - * For this annotation. The default is DRAFT. + * This will retrieve the name (and hence appearance, AP taking precedence) For this annotation. The default is + * DRAFT. * * @return The name of this rubber stamp, see the NAME_XXX constants. */ public String getName() { - return getDictionary().getNameAsString(COSName.NAME, NAME_DRAFT); + return getCOSObject().getNameAsString(COSName.NAME, NAME_DRAFT); } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSound.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSound.java new file mode 100644 index 00000000000..3f127feacb4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSound.java @@ -0,0 +1,74 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDSoundAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationSound extends PDAnnotationMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Sound"; + + private PDAppearanceHandler customAppearanceHandler; + + public PDAnnotationSound() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a sound annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationSound(COSDictionary field) + { + super(field); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDSoundAppearanceHandler appearanceHandler = new PDSoundAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquare.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquare.java new file mode 100644 index 00000000000..9f32d31f300 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquare.java @@ -0,0 +1,74 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDSquareAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationSquare extends PDAnnotationSquareCircle +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Square"; + + private PDAppearanceHandler customAppearanceHandler; + + public PDAnnotationSquare() + { + super(SUB_TYPE); + } + + /** + * Creates a square annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationSquare(COSDictionary field) + { + super(field); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDSquareAppearanceHandler appearanceHandler = new PDSquareAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java new file mode 100644 index 00000000000..341d6369592 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquareCircle.java @@ -0,0 +1,187 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; + +/** + * This is the class that represents a rectangular or elliptical annotation introduced in PDF 1.3 + * specification . + * + * @author Paul King + */ +public abstract class PDAnnotationSquareCircle extends PDAnnotationMarkup +{ + /** + * Creates a Circle or Square annotation of the specified sub type. + * + * @param subType the subtype the annotation represents. + */ + protected PDAnnotationSquareCircle(String subType) + { + setSubtype(subType); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + protected PDAnnotationSquareCircle(COSDictionary dict) + { + super(dict); + } + + @Override + public abstract void constructAppearances(); + + /** + * This will set interior color of the drawn area color is in DeviceRGB colorspace. + * + * @param ic color in the DeviceRGB color space. + * + */ + public void setInteriorColor(PDColor ic) + { + getCOSObject().setItem(COSName.IC, ic.toCOSArray()); + } + + /** + * This will retrieve the interior color of the drawn area color is in DeviceRGB color space. + * + * @return object representing the color. + */ + public PDColor getInteriorColor() + { + return getColor(COSName.IC); + } + + /** + * This will set the border effect dictionary, specifying effects to be applied when drawing the + * line. This is supported by PDF 1.5 and higher. + * + * @param be The border effect dictionary to set. + * + */ + public void setBorderEffect(PDBorderEffectDictionary be) + { + getCOSObject().setItem(COSName.BE, be); + } + + /** + * This will retrieve the border effect dictionary, specifying effects to be applied used in + * drawing the line. + * + * @return The border effect dictionary + */ + public PDBorderEffectDictionary getBorderEffect() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.BE); + if (base instanceof COSDictionary) + { + return new PDBorderEffectDictionary((COSDictionary) base); + } + return null; + } + + /** + * This will set the rectangle difference rectangle. Giving the difference between the + * annotations rectangle and where the drawing occurs. (To take account of any effects applied + * through the BE entry for example) + * + * @param rd the rectangle difference + * + */ + public void setRectDifference(PDRectangle rd) + { + getCOSObject().setItem(COSName.RD, rd); + } + + /** + * This will get the rectangle difference rectangle. Giving the difference between the + * annotations rectangle and where the drawing occurs. (To take account of any effects applied + * through the BE entry for example) + * + * @return the rectangle difference + */ + public PDRectangle getRectDifference() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.RD); + if (base instanceof COSArray) + { + return new PDRectangle((COSArray) base); + } + return null; + } + + /** + * This will set the difference between the annotations "outer" rectangle defined by /Rect and + * the border. + * + *

    + * This will set an equal difference for all sides

    + * + * @param difference from the annotations /Rect entry + */ + public void setRectDifferences(float difference) + { + setRectDifferences(difference, difference, difference, difference); + } + + /** + * This will set the difference between the annotations "outer" rectangle defined by + * /Rect and the border. + * + * @param differenceLeft left difference from the annotations /Rect entry + * @param differenceTop top difference from the annotations /Rect entry + * @param differenceRight right difference from the annotations /Rect entry + * @param differenceBottom bottom difference from the annotations /Rect entry + * + */ + public void setRectDifferences(float differenceLeft, float differenceTop, float differenceRight, float differenceBottom) + { + COSArray margins = new COSArray(); + margins.add(new COSFloat(differenceLeft)); + margins.add(new COSFloat(differenceTop)); + margins.add(new COSFloat(differenceRight)); + margins.add(new COSFloat(differenceBottom)); + getCOSObject().setItem(COSName.RD, margins); + } + + /** + * This will get the differences between the annotations "outer" rectangle defined by + * /Rect and the border. + * + * @return the differences. If the entry hasn't been set am empty array is returned. + */ + public float[] getRectDifferences() + { + COSBase margin = getCOSObject().getItem(COSName.RD); + if (margin instanceof COSArray) + { + return ((COSArray) margin).toFloatArray(); + } + return new float[]{}; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquiggly.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquiggly.java new file mode 100644 index 00000000000..cee582af596 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationSquiggly.java @@ -0,0 +1,77 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDSquigglyAppearanceHandler; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationSquiggly extends PDAnnotationTextMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Squiggly"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationSquiggly() + { + super(SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationSquiggly(COSDictionary dict) + { + super(dict); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDSquigglyAppearanceHandler appearanceHandler = new PDSquigglyAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationStrikeout.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationStrikeout.java new file mode 100644 index 00000000000..8dd69da9783 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationStrikeout.java @@ -0,0 +1,77 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDStrikeoutAppearanceHandler; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationStrikeout extends PDAnnotationTextMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "StrikeOut"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationStrikeout() + { + super(SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationStrikeout(COSDictionary dict) + { + super(dict); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDStrikeoutAppearanceHandler appearanceHandler = new PDStrikeoutAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java new file mode 100644 index 00000000000..4dcf1b9e803 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationText.java @@ -0,0 +1,245 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDTextAppearanceHandler; + +/** + * This is the class that represents a text annotation. + * + * @author Paul King + */ +public class PDAnnotationText extends PDAnnotationMarkup +{ + private PDAppearanceHandler customAppearanceHandler; + + /* + * The various values of the Text as defined in the PDF 1.7 reference Table 172 + */ + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_COMMENT = "Comment"; + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_KEY = "Key"; + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_NOTE = "Note"; + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_HELP = "Help"; + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_NEW_PARAGRAPH = "NewParagraph"; + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_PARAGRAPH = "Paragraph"; + + /** + * Constant for the name of a text annotation. + */ + public static final String NAME_INSERT = "Insert"; + + /** + * Constant for the name of a circle annotation. + */ + public static final String NAME_CIRCLE = "Circle"; + + /** + * Constant for the name of a cross annotation. + */ + public static final String NAME_CROSS = "Cross"; + + /** + * Constant for the name of a star annotation. + */ + public static final String NAME_STAR = "Star"; + + /** + * Constant for the name of a check annotation. + */ + public static final String NAME_CHECK = "Check"; + + /** + * Constant for the name of a right arrow annotation. + */ + public static final String NAME_RIGHT_ARROW = "RightArrow"; + + /** + * Constant for the name of a right pointer annotation. + */ + public static final String NAME_RIGHT_POINTER = "RightPointer"; + + /** + * Constant for the name of a crosshairs annotation. + */ + public static final String NAME_UP_ARROW = "UpArrow"; + + /** + * Constant for the name of a crosshairs annotation. + */ + public static final String NAME_UP_LEFT_ARROW = "UpLeftArrow"; + + /** + * Constant for the name of a crosshairs annotation. + */ + public static final String NAME_CROSS_HAIRS = "CrossHairs"; + + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Text"; + + /** + * Constructor. + */ + public PDAnnotationText() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a Text annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationText(COSDictionary field) + { + super(field); + } + + /** + * This will set initial state of the annotation, open or closed. + * + * @param open Boolean value, true = open false = closed + */ + public void setOpen(boolean open) + { + getCOSObject().setBoolean(COSName.getPDFName("Open"), open); + } + + /** + * This will retrieve the initial state of the annotation, open Or closed (default closed). + * + * @return The initial state, true = open false = closed + */ + public boolean getOpen() + { + return getCOSObject().getBoolean(COSName.getPDFName("Open"), false); + } + + /** + * This will set the name (and hence appearance, AP taking precedence) For this annotation. See the NAME_XXX + * constants for valid values. + * + * @param name The name of the annotation + */ + public void setName(String name) + { + getCOSObject().setName(COSName.NAME, name); + } + + /** + * This will retrieve the name (and hence appearance, AP taking precedence) For this annotation. The default is + * NOTE. + * + * @return The name of this annotation, see the NAME_XXX constants. + */ + public String getName() + { + return getCOSObject().getNameAsString(COSName.NAME, NAME_NOTE); + } + + /** + * This will retrieve the annotation state. + * + * @return the annotation state + */ + public String getState() + { + return this.getCOSObject().getString(COSName.STATE); + } + + /** + * This will set the annotation state. + * + * @param state the annotation state + */ + public void setState(String state) + { + this.getCOSObject().setString(COSName.STATE, state); + } + + /** + * This will retrieve the annotation state model. + * + * @return the annotation state model + */ + public String getStateModel() + { + return this.getCOSObject().getString(COSName.STATE_MODEL); + } + + /** + * This will set the annotation state model. Allowed values are "Marked" and "Review" + * + * @param stateModel the annotation state model + */ + public void setStateModel(String stateModel) + { + this.getCOSObject().setString(COSName.STATE_MODEL, stateModel); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDTextAppearanceHandler appearanceHandler = new PDTextAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationTextMarkup.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationTextMarkup.java new file mode 100644 index 00000000000..d7b8520e890 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationTextMarkup.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; + +/** + * This is the abstract class that represents a text markup annotation introduced in the PDF 1.3 + * specification, except Squiggly lines in 1.4. + * + * @author Paul King + */ +public class PDAnnotationTextMarkup extends PDAnnotationMarkup +{ + /** + * Creates a TextMarkup annotation of the specified sub type. + * + * @param subType the subtype the annotation represents + */ + protected PDAnnotationTextMarkup(String subType) + { + setSubtype(subType); + + // Quad points are required, set an empty array + setQuadPoints(new float[0]); + } + + /** + * Creates a TextMarkup annotation from a COSDictionary, expected to be a correct object definition. + * + * @param field the PDF object to represent as a field. + */ + protected PDAnnotationTextMarkup(COSDictionary field) + { + super(field); + } + + /** + * This will set the set of quadpoints which encompass the areas of this annotation. + * + * @param quadPoints an array representing the set of area covered + */ + public final void setQuadPoints(float[] quadPoints) + { + COSArray newQuadPoints = new COSArray(); + newQuadPoints.setFloatArray(quadPoints); + getCOSObject().setItem(COSName.QUADPOINTS, newQuadPoints); + } + + /** + * This will retrieve the set of quadpoints which encompass the areas of this annotation. + * + * @return An array of floats representing the quad points. + */ + public float[] getQuadPoints() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.QUADPOINTS); + if (base instanceof COSArray) + { + return ((COSArray) base).toFloatArray(); + } + // Should never happen as this is a required item + return null; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnderline.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnderline.java new file mode 100644 index 00000000000..7c3ff134353 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnderline.java @@ -0,0 +1,77 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDUnderlineAppearanceHandler; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler; + +/** + * + * @author Paul King + */ +public class PDAnnotationUnderline extends PDAnnotationTextMarkup +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Underline"; + + private PDAppearanceHandler customAppearanceHandler; + + /** + * Constructor. + */ + public PDAnnotationUnderline() + { + super(SUB_TYPE); + } + + /** + * Constructor. + * + * @param dict The annotations dictionary. + */ + public PDAnnotationUnderline(COSDictionary dict) + { + super(dict); + } + + /** + * Set a custom appearance handler for generating the annotations appearance streams. + * + * @param appearanceHandler + */ + public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler) + { + customAppearanceHandler = appearanceHandler; + } + + @Override + public void constructAppearances() + { + if (customAppearanceHandler == null) + { + PDUnderlineAppearanceHandler appearanceHandler = new PDUnderlineAppearanceHandler(this); + appearanceHandler.generateAppearanceStreams(); + } + else + { + customAppearanceHandler.generateAppearanceStreams(); + } + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnknown.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnknown.java similarity index 84% rename from src/org/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnknown.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnknown.java index 42588e86e90..9e2734b6bcd 100644 --- a/src/org/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnknown.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationUnknown.java @@ -14,27 +14,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.annotation; +package org.apache.pdfbox.pdmodel.interactive.annotation; -import org.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDictionary; /** * This is the class that represents an arbitary Unknown Annotation type. * * @author Paul King - * @version $Revision: 1.1 $ */ public class PDAnnotationUnknown extends PDAnnotation { - /** - * Creates an arbitary annotation from a COSDictionary, expected to be - * a correct object definition for some sort of annotation. + /** + * Creates an arbitary annotation from a COSDictionary, expected to be a correct object definition for some sort of + * annotation. * * @param dic The dictionary which represents this Annotation. */ public PDAnnotationUnknown(COSDictionary dic) { - super( dic ); + super(dic); } } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java new file mode 100644 index 00000000000..c5fba83caac --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationWidget.java @@ -0,0 +1,249 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDAnnotationAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField; + +/** + * This is the class that represents a widget annotation. This represents the + * appearance of a field and manages user interactions. A field may have several + * widget annotations, which may be on several pages. + * + * @author Ben Litchfield + */ +public class PDAnnotationWidget extends PDAnnotation +{ + /** + * The type of annotation. + */ + public static final String SUB_TYPE = "Widget"; + + /** + * Constructor. + */ + public PDAnnotationWidget() + { + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Creates a PDWidget from a COSDictionary, expected to be a correct object definition for a field in PDF. + * + * @param field the PDF object to represent as a field. + */ + public PDAnnotationWidget(COSDictionary field) + { + super(field); + getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE); + } + + /** + * Returns the highlighting mode. Default value: I + *
    + *
    N
    + *
    (None) No highlighting.
    + *
    I
    + *
    (Invert) Invert the contents of the annotation rectangle.
    + *
    O
    + *
    (Outline) Invert the annotation's border.
    + *
    P
    + *
    (Push) Display the annotation's down appearance, if any. If no down appearance is defined, the contents of + * the annotation rectangle shall be offset to appear as if it were pushed below the surface of the page
    + *
    T
    + *
    (Toggle) Same as P (which is preferred).
    + *
    + * + * @return the highlighting mode + */ + public String getHighlightingMode() + { + return this.getCOSObject().getNameAsString(COSName.H, "I"); + } + + /** + * Sets the highlighting mode. + *
    + *
    N
    + *
    (None) No highlighting.
    + *
    I
    + *
    (Invert) Invert the contents of the annotation rectangle.
    + *
    O
    + *
    (Outline) Invert the annotation's border.
    + *
    P
    + *
    (Push) Display the annotation's down appearance, if any. If no down appearance is defined, the contents of + * the annotation rectangle shall be offset to appear as if it were pushed below the surface of the page
    + *
    T
    + *
    (Toggle) Same as P (which is preferred).
    + *
    + * + * @param highlightingMode the highlighting mode the defined values + */ + public void setHighlightingMode(String highlightingMode) + { + if ((highlightingMode == null) || "N".equals(highlightingMode) + || "I".equals(highlightingMode) || "O".equals(highlightingMode) + || "P".equals(highlightingMode) || "T".equals(highlightingMode)) + { + this.getCOSObject().setName(COSName.H, highlightingMode); + } + else + { + throw new IllegalArgumentException("Valid values for highlighting mode are " + + "'N', 'N', 'O', 'P' or 'T'"); + } + } + + /** + * Returns the appearance characteristics dictionary. + * + * @return the appearance characteristics dictionary + */ + public PDAppearanceCharacteristicsDictionary getAppearanceCharacteristics() + { + COSBase mk = this.getCOSObject().getDictionaryObject(COSName.MK); + if (mk instanceof COSDictionary) + { + return new PDAppearanceCharacteristicsDictionary((COSDictionary) mk); + } + return null; + } + + /** + * Sets the appearance characteristics dictionary. + * + * @param appearanceCharacteristics the appearance characteristics dictionary + */ + public void setAppearanceCharacteristics( + PDAppearanceCharacteristicsDictionary appearanceCharacteristics) + { + this.getCOSObject().setItem(COSName.MK, appearanceCharacteristics); + } + + /** + * Get the action to be performed when this annotation is to be activated. + * + * @return The action to be performed when this annotation is activated. + */ + public PDAction getAction() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.A); + if (base instanceof COSDictionary) + { + return PDActionFactory.createAction((COSDictionary) base); + } + return null; + } + + /** + * Set the annotation action. As of PDF 1.6 this is only used for Widget Annotations + * + * @param action The annotation action. + */ + public void setAction(PDAction action) + { + this.getCOSObject().setItem(COSName.A, action); + } + + /** + * Get the additional actions for this field. This will return null if there are no additional actions for this + * field. As of PDF 1.6 this is only used for Widget Annotations. + * + * @return The actions of the field. + */ + public PDAnnotationAdditionalActions getActions() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.AA); + if (base instanceof COSDictionary) + { + return new PDAnnotationAdditionalActions((COSDictionary) base); + } + return null; + } + + /** + * Set the actions of the field. + * + * @param actions The field actions. + */ + public void setActions(PDAnnotationAdditionalActions actions) + { + this.getCOSObject().setItem(COSName.AA, actions); + } + + /** + * This will set the border style dictionary, specifying the width and dash pattern used in drawing the line. + * + * @param bs the border style dictionary to set. + * + */ + public void setBorderStyle(PDBorderStyleDictionary bs) + { + this.getCOSObject().setItem(COSName.BS, bs); + } + + /** + * This will retrieve the border style dictionary, specifying the width and dash pattern used in drawing the line. + * + * @return the border style dictionary. + */ + public PDBorderStyleDictionary getBorderStyle() + { + COSBase bs = getCOSObject().getDictionaryObject(COSName.BS); + if (bs instanceof COSDictionary) + { + return new PDBorderStyleDictionary((COSDictionary) bs); + } + return null; + } + + // TODO where to get acroForm from? + // public PDField getParent() throws IOException + // { + // COSBase parent = this.getCOSObject().getDictionaryObject(COSName.PARENT); + // if (parent instanceof COSDictionary) + // { + // PDAcroForm acroForm = null; + // return PDFieldFactory.createField(acroForm, (COSDictionary) parent); + // } + // return null; + // } + + /** + * Set the parent field of a widget annotation. This is only required if this widget annotation + * is one of multiple children in a field, and not to be set otherwise. You will usually not + * need this, because in most cases, fields have only one widget and share a common dictionary. + * A usage can be found in the CreateMultiWidgetsForm example. + * + * @param field the parent field. + * @throws IllegalArgumentException if setParent() was called for a field that shares a + * dictionary with its only widget. + */ + public void setParent(PDTerminalField field) + { + if (this.getCOSObject().equals(field.getCOSObject())) + { + throw new IllegalArgumentException("setParent() is not to be called for a field that shares a dictionary with its only widget"); + } + this.getCOSObject().setItem(COSName.PARENT, field); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java new file mode 100644 index 00000000000..437c6bd211e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceCharacteristicsDictionary.java @@ -0,0 +1,252 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; + +/** + * This class represents an appearance characteristics dictionary. + * + */ +public class PDAppearanceCharacteristicsDictionary implements COSObjectable +{ + + private final COSDictionary dictionary; + + /** + * Constructor. + * + * @param dict dictionary + */ + public PDAppearanceCharacteristicsDictionary(COSDictionary dict) + { + this.dictionary = dict; + } + + /** + * returns the dictionary. + * + * @return the dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.dictionary; + } + + /** + * This will retrieve the rotation of the annotation widget. It must be a multiple of 90. Default is 0 + * + * @return the rotation + */ + public int getRotation() + { + return this.getCOSObject().getInt(COSName.R, 0); + } + + /** + * This will set the rotation. + * + * @param rotation the rotation as a multiple of 90 + */ + public void setRotation(int rotation) + { + this.getCOSObject().setInt(COSName.R, rotation); + } + + /** + * This will retrieve the border color. + * + * @return the border color. + */ + public PDColor getBorderColour() + { + return getColor(COSName.BC); + } + + /** + * This will set the border color. + * + * @param c the border color + */ + public void setBorderColour(PDColor c) + { + this.getCOSObject().setItem(COSName.BC, c.toCOSArray()); + } + + /** + * This will retrieve the background color. + * + * @return the background color. + */ + public PDColor getBackground() + { + return getColor(COSName.BG); + } + + /** + * This will set the background color. + * + * @param c the background color + */ + public void setBackground(PDColor c) + { + this.getCOSObject().setItem(COSName.BG, c.toCOSArray()); + } + + /** + * This will retrieve the normal caption. + * + * @return the normal caption. + */ + public String getNormalCaption() + { + return this.getCOSObject().getString(COSName.CA); + } + + /** + * This will set the normal caption. + * + * @param caption the normal caption + */ + public void setNormalCaption(String caption) + { + this.getCOSObject().setString(COSName.CA, caption); + } + + /** + * This will retrieve the rollover caption. + * + * @return the rollover caption. + */ + public String getRolloverCaption() + { + return this.getCOSObject().getString(COSName.RC); + } + + /** + * This will set the rollover caption. + * + * @param caption the rollover caption + */ + public void setRolloverCaption(String caption) + { + this.getCOSObject().setString(COSName.RC, caption); + } + + /** + * This will retrieve the alternate caption. + * + * @return the alternate caption. + */ + public String getAlternateCaption() + { + return this.getCOSObject().getString(COSName.AC); + } + + /** + * This will set the alternate caption. + * + * @param caption the alternate caption + */ + public void setAlternateCaption(String caption) + { + this.getCOSObject().setString(COSName.AC, caption); + } + + /** + * This will retrieve the normal icon. + * + * @return the normal icon. + */ + public PDFormXObject getNormalIcon() + { + COSBase i = this.getCOSObject().getDictionaryObject(COSName.I); + if (i instanceof COSStream) + { + return new PDFormXObject((COSStream)i); + } + return null; + } + + /** + * This will retrieve the rollover icon. + * + * @return the rollover icon + */ + public PDFormXObject getRolloverIcon() + { + COSBase i = this.getCOSObject().getDictionaryObject(COSName.RI); + if (i instanceof COSStream) + { + return new PDFormXObject((COSStream)i); + } + return null; + } + + /** + * This will retrieve the alternate icon. + * + * @return the alternate icon. + */ + public PDFormXObject getAlternateIcon() + { + COSBase i = this.getCOSObject().getDictionaryObject(COSName.IX); + if (i instanceof COSStream) + { + return new PDFormXObject((COSStream)i); + } + return null; + } + + private PDColor getColor(COSName itemName) + { + COSBase c = this.getCOSObject().getItem(itemName); + if (c instanceof COSArray) + { + PDColorSpace colorSpace; + switch (((COSArray) c).size()) + { + case 1: + colorSpace = PDDeviceGray.INSTANCE; + break; + case 3: + colorSpace = PDDeviceRGB.INSTANCE; + break; + case 4: + colorSpace = PDDeviceCMYK.INSTANCE; + break; + default: + return null; + } + return new PDColor((COSArray) c, colorSpace); + } + return null; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceDictionary.java new file mode 100644 index 00000000000..d36d94a76c3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceDictionary.java @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * An appearance dictionary specifying how the annotation shall be presented visually on the page. + * + * @author Ben Litchfield + */ +public class PDAppearanceDictionary implements COSObjectable +{ + private final COSDictionary dictionary; + + /** + * Constructor for embedding. + */ + public PDAppearanceDictionary() + { + dictionary = new COSDictionary(); + // the N entry is required. + dictionary.setItem(COSName.N, new COSDictionary()); + } + + /** + * Constructor for reading. + * + * @param dictionary The annotations dictionary. + */ + public PDAppearanceDictionary(COSDictionary dictionary) + { + this.dictionary = dictionary; + } + + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * This will return a list of appearances. In the case where there is only one appearance the map will contain one + * entry whose key is the string "default". + * + * @return A list of key(java.lang.String) value(PDAppearanceStream) pairs + */ + public PDAppearanceEntry getNormalAppearance() + { + COSBase entry = dictionary.getDictionaryObject(COSName.N); + if (entry instanceof COSDictionary) + { + return new PDAppearanceEntry((COSDictionary) entry); + } + return null; + } + + /** + * This will set a list of appearances. If you would like to set the single appearance then you should use the key + * "default", and when the PDF is written back to the filesystem then there will only be one stream. + * + * @param entry appearance stream or subdictionary + */ + public void setNormalAppearance(PDAppearanceEntry entry) + { + dictionary.setItem(COSName.N, entry); + } + + /** + * This will set the normal appearance when there is only one appearance to be shown. + * + * @param ap The appearance stream to show. + */ + public void setNormalAppearance(PDAppearanceStream ap) + { + dictionary.setItem(COSName.N, ap); + } + + /** + * This will return a list of appearances. In the case where there is only one appearance the map will contain one + * entry whose key is the string "default". If there is no rollover appearance then the normal appearance will be + * returned. Which means that this method will never return null. + * + * @return A list of key(java.lang.String) value(PDAppearanceStream) pairs + */ + public PDAppearanceEntry getRolloverAppearance() + { + COSBase entry = dictionary.getDictionaryObject(COSName.R); + if (entry instanceof COSDictionary) + { + return new PDAppearanceEntry((COSDictionary) entry); + } + else + { + return getNormalAppearance(); + } + } + + /** + * This will set a list of appearances. If you would like to set the single appearance then you should use the key + * "default", and when the PDF is written back to the filesystem then there will only be one stream. + * + * @param entry appearance stream or subdictionary + */ + public void setRolloverAppearance(PDAppearanceEntry entry) + { + dictionary.setItem(COSName.R, entry); + } + + /** + * This will set the rollover appearance when there is rollover appearance to be shown. + * + * @param ap The appearance stream to show. + */ + public void setRolloverAppearance(PDAppearanceStream ap) + { + dictionary.setItem(COSName.R, ap); + } + + /** + * This will return a list of appearances. In the case where there is only one appearance the map will contain one + * entry whose key is the string "default". If there is no rollover appearance then the normal appearance will be + * returned. Which means that this method will never return null. + * + * @return A list of key(java.lang.String) value(PDAppearanceStream) pairs + */ + public PDAppearanceEntry getDownAppearance() + { + COSBase entry = dictionary.getDictionaryObject(COSName.D); + if (entry instanceof COSDictionary) + { + return new PDAppearanceEntry((COSDictionary) entry); + } + else + { + return getNormalAppearance(); + } + } + + /** + * This will set a list of appearances. If you would like to set the single appearance then you should use the key + * "default", and when the PDF is written back to the filesystem then there will only be one stream. + * + * @param entry appearance stream or subdictionary + */ + public void setDownAppearance(PDAppearanceEntry entry) + { + dictionary.setItem(COSName.D, entry); + } + + /** + * This will set the down appearance when there is down appearance to be shown. + * + * @param ap The appearance stream to show. + */ + public void setDownAppearance(PDAppearanceStream ap) + { + dictionary.setItem(COSName.D, ap); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceEntry.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceEntry.java new file mode 100644 index 00000000000..75e8bed9416 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceEntry.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import java.util.HashMap; +import java.util.Map; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.common.COSDictionaryMap; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * An entry in an appearance dictionary. May contain either a single appearance stream or an appearance subdictionary. + * + * @author John Hewson + */ +public class PDAppearanceEntry implements COSObjectable +{ + private COSDictionary entry; + + private PDAppearanceEntry() + { + } + + /** + * Constructor for reading. + * + * @param entry + */ + public PDAppearanceEntry(COSDictionary entry) + { + this.entry = entry; + } + + @Override + public COSDictionary getCOSObject() + { + return entry; + } + + /** + * Returns true if this entry is an appearance subdictionary. + */ + public boolean isSubDictionary() + { + return !(this.entry instanceof COSStream); + } + + /** + * Returns true if this entry is an appearance stream. + */ + public boolean isStream() + { + return this.entry instanceof COSStream; + } + + /** + * Returns the entry as an appearance stream. + * + * @throws IllegalStateException if this entry is not an appearance stream + */ + public PDAppearanceStream getAppearanceStream() + { + if (!isStream()) + { + throw new IllegalStateException("This entry is not an appearance stream"); + } + return new PDAppearanceStream((COSStream) entry); + } + + /** + * Returns the entry as an appearance subdictionary. + * + * @throws IllegalStateException if this entry is not an appearance subdictionary + */ + public Map getSubDictionary() + { + if (!isSubDictionary()) + { + throw new IllegalStateException("This entry is not an appearance subdictionary"); + } + + COSDictionary dict = entry; + Map map = new HashMap<>(); + + for (COSName name : dict.keySet()) + { + COSBase value = dict.getDictionaryObject(name); + + // the file from PDFBOX-1599 contains /null as its entry, so we skip non-stream entries + if (value instanceof COSStream) + { + map.put(name, new PDAppearanceStream((COSStream) value)); + } + } + + return new COSDictionaryMap<>(map, dict); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java new file mode 100644 index 00000000000..38aab351660 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceStream.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; + +/** + * An appearance stream is a form XObject, a self-contained content stream that shall be rendered inside the annotation + * rectangle. + * + * @author Ben Litchfield + * @author John Hewson + */ +public class PDAppearanceStream extends PDFormXObject +{ + /** + * Creates a Form XObject for reading. + * + * @param stream The XObject stream + */ + public PDAppearanceStream(COSStream stream) + { + super(stream); + } + + /** + * Creates a Form Image XObject for writing, in the given document. + * + * @param document The current document + */ + public PDAppearanceStream(PDDocument document) + { + super(document); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderEffectDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderEffectDictionary.java new file mode 100644 index 00000000000..7cdbc6d534a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderEffectDictionary.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class represents a PDF /BE entry the border effect dictionary. + * + * @author Paul King + */ +public class PDBorderEffectDictionary implements COSObjectable +{ + + /* + * The various values of the effect applied to the border as defined in the PDF 1.6 reference Table 8.14 + */ + + /** + * Constant for the name for no effect. + */ + public static final String STYLE_SOLID = "S"; + + /** + * Constant for the name of a cloudy effect. + */ + public static final String STYLE_CLOUDY = "C"; + + private final COSDictionary dictionary; + + /** + * Constructor. + */ + public PDBorderEffectDictionary() + { + dictionary = new COSDictionary(); + } + + /** + * Constructor. + * + * @param dict a border style dictionary. + */ + public PDBorderEffectDictionary(COSDictionary dict) + { + dictionary = dict; + } + + /** + * returns the dictionary. + * + * @return the dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * This will set the intensity of the applied effect. + * + * @param i the intensity of the effect values 0 to 2 + */ + public void setIntensity(float i) + { + getCOSObject().setFloat("I", i); + } + + /** + * This will retrieve the intensity of the applied effect. + * + * @return the intensity value 0 to 2 + */ + public float getIntensity() + { + return getCOSObject().getFloat("I", 0); + } + + /** + * This will set the border effect, see the STYLE_* constants for valid values. + * + * @param s the border effect to use + */ + public void setStyle(String s) + { + getCOSObject().setName("S", s); + } + + /** + * This will retrieve the border effect, see the STYLE_* constants for valid values. + * + * @return the effect of the border or {@link #STYLE_SOLID} if none is found. + */ + public String getStyle() + { + return getCOSObject().getNameAsString("S", STYLE_SOLID); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java new file mode 100644 index 00000000000..1e9d9dcda1e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDBorderStyleDictionary.java @@ -0,0 +1,187 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; + +/** + * This class represents a PDF /BS entry the border style dictionary. + * + * @author Paul King + */ +public class PDBorderStyleDictionary implements COSObjectable +{ + + /* + * The various values of the style for the border as defined in the PDF 1.6 reference Table 8.13 + */ + + /** + * Constant for the name of a solid style. + */ + public static final String STYLE_SOLID = "S"; + + /** + * Constant for the name of a dashed style. + */ + public static final String STYLE_DASHED = "D"; + + /** + * Constant for the name of a beveled style. + */ + public static final String STYLE_BEVELED = "B"; + + /** + * Constant for the name of a inset style. + */ + public static final String STYLE_INSET = "I"; + + /** + * Constant for the name of a underline style. + */ + public static final String STYLE_UNDERLINE = "U"; + + private final COSDictionary dictionary; + + /** + * Constructor. + */ + public PDBorderStyleDictionary() + { + dictionary = new COSDictionary(); + } + + /** + * Constructor. + * + * @param dict a border style dictionary. + */ + public PDBorderStyleDictionary(COSDictionary dict) + { + dictionary = dict; + } + + /** + * returns the dictionary. + * + * @return the dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * This will set the border width in points, 0 = no border. + * + * There is a bug in Adobe Reader DC, float values are ignored for text field widgets. As a + * workaround, floats that are integers (e.g. 2.0) are written as integer in the PDF. + *

    + * In Adobe Acrobat DC, the values are shown as "0 = Invisible, 1 = Thin, 2 = Medium, 3 = Thick" + * for widget and link annotations. + * + * @param w float the width in points + */ + public void setWidth(float w) + { + // PDFBOX-3929 workaround + if (Float.compare(w, (int) w) == 0) + { + getCOSObject().setInt(COSName.W, (int) w); + } + else + { + getCOSObject().setFloat(COSName.W, w); + } + } + + /** + * This will retrieve the border width in points, 0 = no border. + * + * @return The width of the border in points. + */ + public float getWidth() + { + if (getCOSObject().getDictionaryObject(COSName.W) instanceof COSName) + { + // replicate Adobe behavior although it contradicts the specification + // https://github.com/mozilla/pdf.js/issues/10385 + return 0; + } + return getCOSObject().getFloat(COSName.W, 1); + } + + /** + * This will set the border style, see the STYLE_* constants for valid values. + * + * @param s the border style to use + */ + public void setStyle(String s) + { + getCOSObject().setName(COSName.S, s); + } + + /** + * This will retrieve the border style, see the STYLE_* constants for valid values. + * + * @return the style of the border + */ + public String getStyle() + { + return getCOSObject().getNameAsString(COSName.S, STYLE_SOLID); + } + + /** + * This will set the dash style used for drawing the border. + * + * @param dashArray the dash style to use + */ + public void setDashStyle(COSArray dashArray) + { + COSArray array = null; + if (dashArray != null) + { + array = dashArray; + } + getCOSObject().setItem(COSName.D, array); + } + + /** + * This will retrieve the dash style used for drawing the border. + * + * @return the dash style of the border + */ + public PDLineDashPattern getDashStyle() + { + COSArray d = (COSArray) getCOSObject().getDictionaryObject(COSName.D); + if (d == null) + { + d = new COSArray(); + d.add(COSInteger.THREE); + getCOSObject().setItem(COSName.D, d); + } + return new PDLineDashPattern(d, 0); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java new file mode 100644 index 00000000000..3e7e6b82dbd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDExternalDataDictionary.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class represents an external data dictionary. + * + */ +public class PDExternalDataDictionary implements COSObjectable +{ + + private final COSDictionary dataDictionary; + + /** + * Constructor. + */ + public PDExternalDataDictionary() + { + this.dataDictionary = new COSDictionary(); + this.dataDictionary.setName(COSName.TYPE, "ExData"); + } + + /** + * Constructor. + * + * @param dictionary Dictionary + */ + public PDExternalDataDictionary(COSDictionary dictionary) + { + this.dataDictionary = dictionary; + } + + /** + * returns the dictionary. + * + * @return the dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.dataDictionary; + } + + /** + * returns the type of the external data dictionary. It must be "ExData", if present + * + * @return the type of the external data dictionary + */ + public String getType() + { + return this.getCOSObject().getNameAsString(COSName.TYPE, "ExData"); + } + + /** + * returns the subtype of the external data dictionary. + * + * @return the subtype of the external data dictionary + */ + public String getSubtype() + { + return this.getCOSObject().getNameAsString(COSName.SUBTYPE); + } + + /** + * This will set the subtype of the external data dictionary. + * + * @param subtype the subtype of the external data dictionary + */ + public void setSubtype(String subtype) + { + this.getCOSObject().setName(COSName.SUBTYPE, subtype); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/AnnotationBorder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/AnnotationBorder.java new file mode 100644 index 00000000000..5e4e9c0909a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/AnnotationBorder.java @@ -0,0 +1,88 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; + +/** + * Class to collect all sort of border info about annotations. + * + * @author Tilman Hausherr + */ +class AnnotationBorder +{ + float[] dashArray = null; + boolean underline = false; + float width = 0; + + // return border info. BorderStyle must be provided as parameter because + // method is not available in the base class + static AnnotationBorder getAnnotationBorder(PDAnnotation annotation, + PDBorderStyleDictionary borderStyle) + { + AnnotationBorder ab = new AnnotationBorder(); + if (borderStyle == null) + { + COSArray border = annotation.getBorder(); + if (border.size() >= 3 && border.getObject(2) instanceof COSNumber) + { + ab.width = ((COSNumber) border.getObject(2)).floatValue(); + } + if (border.size() > 3) + { + COSBase base3 = border.getObject(3); + if (base3 instanceof COSArray) + { + ab.dashArray = ((COSArray) base3).toFloatArray(); + } + } + } + else + { + ab.width = borderStyle.getWidth(); + if (borderStyle.getStyle().equals(PDBorderStyleDictionary.STYLE_DASHED)) + { + ab.dashArray = borderStyle.getDashStyle().getDashArray(); + } + if (borderStyle.getStyle().equals(PDBorderStyleDictionary.STYLE_UNDERLINE)) + { + ab.underline = true; + } + } + if (ab.dashArray != null) + { + boolean allZero = true; + for (float f : ab.dashArray) + { + if (Float.compare(f, 0) != 0) + { + allZero = false; + break; + } + } + if (allZero) + { + ab.dashArray = null; + } + } + return ab; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/CloudyBorder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/CloudyBorder.java new file mode 100644 index 00000000000..7eeaf7790ff --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/CloudyBorder.java @@ -0,0 +1,1105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Ellipse2D; +import java.awt.geom.PathIterator; +import java.awt.geom.Point2D; +import java.io.IOException; +import java.util.ArrayList; + +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; + +/** + * Generates annotation appearances with a cloudy border. + *

    + * Dashed stroke styles are not recommended with cloudy borders. The result would + * not look good because some parts of the arcs are traced twice by the stroked + * path. Actually Acrobat Reader's line style dialog does not allow to choose a + * dashed and a cloudy style at the same time. + */ + +class CloudyBorder +{ + private static final double ANGLE_180_DEG = Math.PI; + private static final double ANGLE_90_DEG = Math.PI / 2; + private static final double ANGLE_34_DEG = Math.toRadians(34); + private static final double ANGLE_30_DEG = Math.toRadians(30); + private static final double ANGLE_12_DEG = Math.toRadians(12); + + private final PDAppearanceContentStream output; + private final PDRectangle annotRect; + private final double intensity; + private final double lineWidth; + private PDRectangle rectWithDiff; + private boolean outputStarted = false; + private double bboxMinX; + private double bboxMinY; + private double bboxMaxX; + private double bboxMaxY; + + /** + * Creates a new CloudyBorder that writes to the specified + * content stream. + * + * @param stream content stream + * @param intensity intensity of cloudy effect (entry I); typically 1.0 or 2.0 + * @param lineWidth line width for annotation border (entry W) + * @param rect annotation rectangle (entry Rect) + */ + CloudyBorder(PDAppearanceContentStream stream, double intensity, + double lineWidth, PDRectangle rect) + { + this.output = stream; + this.intensity = intensity; + this.lineWidth = lineWidth; + this.annotRect = rect; + } + + /** + * Creates a cloudy border for a rectangular annotation. + * The rectangle is specified by the RD entry and the + * Rect entry that was passed in to the constructor. + *

    + * This can be used for Square and FreeText annotations. However, this does + * not produce the text and the callout line for FreeTexts. + * + * @param rd entry RD, or null if the entry does not exist + * @throws IOException If there is an error writing to the stream. + */ + void createCloudyRectangle(PDRectangle rd) throws IOException + { + rectWithDiff = applyRectDiff(rd, lineWidth / 2); + double left = rectWithDiff.getLowerLeftX(); + double bottom = rectWithDiff.getLowerLeftY(); + double right = rectWithDiff.getUpperRightX(); + double top = rectWithDiff.getUpperRightY(); + + cloudyRectangleImpl(left, bottom, right, top, false); + finish(); + } + + /** + * Creates a cloudy border for a Polygon annotation. + * + * @param path polygon path + * @throws IOException If there is an error writing to the stream. + */ + void createCloudyPolygon(float[][] path) throws IOException + { + int n = path.length; + Point2D.Double[] polygon = new Point2D.Double[n]; + + for (int i = 0; i < n; i++) + { + float[] array = path[i]; + if (array.length == 2) + { + polygon[i] = new Point2D.Double(array[0], array[1]); + } + else if (array.length == 6) + { + // TODO Curve segments are not yet supported in cloudy border. + polygon[i] = new Point2D.Double(array[4], array[5]); + } + } + + cloudyPolygonImpl(polygon, false); + finish(); + } + + /** + * Creates a cloudy border for a Circle annotation. + * The ellipse is specified by the RD entry and the + * Rect entry that was passed in to the constructor. + * + * @param rd entry RD, or null if the entry does not exist + * @throws IOException If there is an error writing to the stream. + */ + void createCloudyEllipse(PDRectangle rd) throws IOException + { + rectWithDiff = applyRectDiff(rd, 0); + double left = rectWithDiff.getLowerLeftX(); + double bottom = rectWithDiff.getLowerLeftY(); + double right = rectWithDiff.getUpperRightX(); + double top = rectWithDiff.getUpperRightY(); + + cloudyEllipseImpl(left, bottom, right, top); + finish(); + } + + /** + * Returns the BBox entry (bounding box) for the + * appearance stream form XObject. + * + * @return Bounding box for appearance stream form XObject. + */ + PDRectangle getBBox() + { + return getRectangle(); + } + + /** + * Returns the updated Rect entry for the annotation. + * The rectangle completely contains the cloudy border. + * + * @return Annotation Rect. + */ + PDRectangle getRectangle() + { + return new PDRectangle((float)bboxMinX, (float)bboxMinY, + (float)(bboxMaxX - bboxMinX), (float)(bboxMaxY - bboxMinY)); + } + + /** + * Returns the Matrix entry for the appearance stream form XObject. + * + * @return Matrix for appearance stream form XObject. + */ + AffineTransform getMatrix() + { + return AffineTransform.getTranslateInstance(-bboxMinX, -bboxMinY); + } + + /** + * Returns the updated RD entry for Square and Circle annotations. + * + * @return Annotation RD value. + */ + PDRectangle getRectDifference() + { + if (annotRect == null) + { + float d = (float)lineWidth / 2; + return new PDRectangle(d, d, (float)lineWidth, (float)lineWidth); + } + + PDRectangle re = (rectWithDiff != null) ? rectWithDiff : annotRect; + + float left = re.getLowerLeftX() - (float)bboxMinX; + float bottom = re.getLowerLeftY() - (float)bboxMinY; + float right = (float)bboxMaxX - re.getUpperRightX(); + float top = (float)bboxMaxY - re.getUpperRightY(); + + return new PDRectangle(left, bottom, right - left, top - bottom); + } + + private static double cosine(double dx, double hypot) + { + if (Double.compare(hypot, 0.0) == 0) + { + return 0; + } + return dx / hypot; + } + + private static double sine(double dy, double hypot) + { + if (Double.compare(hypot, 0.0) == 0) + { + return 0; + } + return dy / hypot; + } + + /** + * Cloudy rectangle implementation is based on converting the rectangle + * to a polygon. + */ + private void cloudyRectangleImpl(double left, double bottom, + double right, double top, boolean isEllipse) throws IOException + { + double w = right - left; + double h = top - bottom; + + if (intensity <= 0.0) + { + output.addRect((float)left, (float)bottom, (float)w, (float)h); + bboxMinX = left; + bboxMinY = bottom; + bboxMaxX = right; + bboxMaxY = top; + return; + } + + // Make a polygon with direction equal to the positive angle direction. + Point2D.Double[] polygon; + + if (w < 1.0) + { + polygon = new Point2D.Double[] + { + new Point2D.Double(left, bottom), new Point2D.Double(left, top), + new Point2D.Double(left, bottom) + }; + } + else if (h < 1.0) + { + polygon = new Point2D.Double[] + { + new Point2D.Double(left, bottom), new Point2D.Double(right, bottom), + new Point2D.Double(left, bottom) + }; + } + else + { + polygon = new Point2D.Double[] + { + new Point2D.Double(left, bottom), new Point2D.Double(right, bottom), + new Point2D.Double(right, top), new Point2D.Double(left, top), + new Point2D.Double(left, bottom) + }; + } + + cloudyPolygonImpl(polygon, isEllipse); + } + + /** + * Cloudy polygon implementation. + * + * @param vertices polygon vertices; first and last point must be equal + * @param isEllipse specifies if the polygon represents an ellipse + */ + private void cloudyPolygonImpl(Point2D.Double[] vertices, boolean isEllipse) + throws IOException + { + Point2D.Double[] polygon = removeZeroLengthSegments(vertices); + getPositivePolygon(polygon); + int numPoints = polygon.length; + + if (numPoints < 2) + { + return; + } + if (intensity <= 0.0) + { + moveTo(polygon[0]); + for (int i = 1; i < numPoints; i++) + { + lineTo(polygon[i]); + } + return; + } + + double cloudRadius = isEllipse ? getEllipseCloudRadius() : getPolygonCloudRadius(); + + if (cloudRadius < 0.5) + { + cloudRadius = 0.5; + } + + final double k = Math.cos(ANGLE_34_DEG); + final double advIntermDefault = 2 * k * cloudRadius; + final double advCornerDefault = k * cloudRadius; + double[] array = new double[2]; + double anglePrev = 0; + + // The number of curls per polygon segment is hardly ever an integer, + // so the length of some curls must be adjustable. We adjust the angle + // of the trailing arc of corner curls and the leading arc of the first + // intermediate curl. + // In each polygon segment, we have n intermediate curls plus one half of a + // corner curl at each end. One of the n intermediate curls is adjustable. + // Thus the number of fixed (or unadjusted) intermediate curls is n - 1. + + // Find the adjusted angle `alpha` for the first corner curl. + int n0 = computeParamsPolygon(advIntermDefault, advCornerDefault, k, cloudRadius, + polygon[numPoints - 2].distance(polygon[0]), array); + double alphaPrev = (n0 == 0) ? array[0] : ANGLE_34_DEG; + + for (int j = 0; j + 1 < numPoints; j++) + { + Point2D.Double pt = polygon[j]; + Point2D.Double ptNext = polygon[j + 1]; + double length = pt.distance(ptNext); + if (Double.compare(length, 0.0) == 0) + { + alphaPrev = ANGLE_34_DEG; + continue; + } + + // n is the number of intermediate curls in the current polygon segment. + int n = computeParamsPolygon(advIntermDefault, advCornerDefault, k, + cloudRadius, length, array); + if (n < 0) + { + if (!outputStarted) + { + moveTo(pt); + } + continue; + } + + double alpha = array[0]; + double dx = array[1]; + + double angleCur = Math.atan2(ptNext.y - pt.y, ptNext.x - pt.x); + if (j == 0) + { + Point2D.Double ptPrev = polygon[numPoints - 2]; + anglePrev = Math.atan2(pt.y - ptPrev.y, pt.x - ptPrev.x); + } + + double cos = cosine(ptNext.x - pt.x, length); + double sin = sine(ptNext.y - pt.y, length); + double x = pt.x; + double y = pt.y; + + addCornerCurl(anglePrev, angleCur, cloudRadius, pt.x, pt.y, alpha, + alphaPrev, !outputStarted); + // Proceed to the center point of the first intermediate curl. + double adv = 2 * k * cloudRadius + 2 * dx; + x += adv * cos; + y += adv * sin; + + // Create the first intermediate curl. + int numInterm = n; + if (n >= 1) + { + addFirstIntermediateCurl(angleCur, cloudRadius, alpha, x, y); + x += advIntermDefault * cos; + y += advIntermDefault * sin; + numInterm = n - 1; + } + + // Create one intermediate curl and replicate it along the polygon segment. + Point2D.Double[] template = getIntermediateCurlTemplate(angleCur, cloudRadius); + for (int i = 0; i < numInterm; i++) + { + outputCurlTemplate(template, x, y); + x += advIntermDefault * cos; + y += advIntermDefault * sin; + } + + anglePrev = angleCur; + alphaPrev = (n == 0) ? alpha : ANGLE_34_DEG; + } + } + + /** + * Computes parameters for a cloudy polygon: n, alpha, and dx. + */ + private int computeParamsPolygon(double advInterm, double advCorner, double k, + double r, double length, double[] array) + { + if (Double.compare(length, 0.0) == 0) + { + array[0] = ANGLE_34_DEG; + array[1] = 0; + return -1; + } + + // n is the number of intermediate curls in the current polygon segment + int n = (int) Math.ceil((length - 2 * advCorner) / advInterm); + + // Fitting error along polygon segment + double e = length - (2 * advCorner + n * advInterm); + // Fitting error per each adjustable half curl + double dx = e / 2; + + // Convert fitting error to an angle that can be used to control arcs. + double arg = (k * r + dx) / r; + double alpha = (arg < -1.0 || arg > 1.0) ? 0.0 : Math.acos(arg); + + array[0] = alpha; + array[1] = dx; + return n; + } + + /** + * Creates a corner curl for polygons and ellipses. + */ + private void addCornerCurl(double anglePrev, double angleCur, double radius, + double cx, double cy, double alpha, double alphaPrev, boolean addMoveTo) + throws IOException + { + double a = anglePrev + ANGLE_180_DEG + alphaPrev; + double b = anglePrev + ANGLE_180_DEG + alphaPrev - Math.toRadians(22); + getArcSegment(a, b, cx, cy, radius, radius, null, addMoveTo); + + a = b; + b = angleCur - alpha; + getArc(a, b, radius, radius, cx, cy, null, false); + } + + /** + * Generates the first intermediate curl for a cloudy polygon. + */ + private void addFirstIntermediateCurl(double angleCur, double r, double alpha, + double cx, double cy) throws IOException + { + double a = angleCur + ANGLE_180_DEG; + + getArcSegment(a + alpha, a + alpha - ANGLE_30_DEG, cx, cy, r, r, null, false); + getArcSegment(a + alpha - ANGLE_30_DEG, a + ANGLE_90_DEG, cx, cy, r, r, null, false); + getArcSegment(a + ANGLE_90_DEG, a + ANGLE_180_DEG - ANGLE_34_DEG, + cx, cy, r, r, null, false); + } + + /** + * Returns a template for intermediate curls in a cloudy polygon. + */ + private Point2D.Double[] getIntermediateCurlTemplate(double angleCur, double r) + throws IOException + { + ArrayList points = new ArrayList<>(); + double a = angleCur + ANGLE_180_DEG; + + getArcSegment(a + ANGLE_34_DEG, a + ANGLE_12_DEG, 0, 0, r, r, points, false); + getArcSegment(a + ANGLE_12_DEG, a + ANGLE_90_DEG, 0, 0, r, r, points, false); + getArcSegment(a + ANGLE_90_DEG, a + ANGLE_180_DEG - ANGLE_34_DEG, + 0, 0, r, r, points, false); + + return points.toArray(new Point2D.Double[points.size()]); + } + + /** + * Writes the curl template points to the output and applies translation (x, y). + */ + private void outputCurlTemplate(Point2D.Double[] template, double x, double y) + throws IOException + { + int n = template.length; + int i = 0; + + if ((n % 3) == 1) + { + Point2D.Double a = template[0]; + moveTo(a.x + x, a.y + y); + i++; + } + for (; i + 2 < n; i += 3) + { + Point2D.Double a = template[i]; + Point2D.Double b = template[i + 1]; + Point2D.Double c = template[i + 2]; + curveTo(a.x + x, a.y + y, b.x + x, b.y + y, c.x + x, c.y + y); + } + } + + private PDRectangle applyRectDiff(PDRectangle rd, double min) + { + float rectLeft = annotRect.getLowerLeftX(); + float rectBottom = annotRect.getLowerLeftY(); + float rectRight = annotRect.getUpperRightX(); + float rectTop = annotRect.getUpperRightY(); + + // Normalize + rectLeft = Math.min(rectLeft, rectRight); + rectBottom = Math.min(rectBottom, rectTop); + rectRight = Math.max(rectLeft, rectRight); + rectTop = Math.max(rectBottom, rectTop); + + double rdLeft; + double rdBottom; + double rdRight; + double rdTop; + + if (rd != null) + { + rdLeft = Math.max(rd.getLowerLeftX(), min); + rdBottom = Math.max(rd.getLowerLeftY(), min); + rdRight = Math.max(rd.getUpperRightX(), min); + rdTop = Math.max(rd.getUpperRightY(), min); + } + else + { + rdLeft = min; + rdBottom = min; + rdRight = min; + rdTop = min; + } + + rectLeft += rdLeft; + rectBottom += rdBottom; + rectRight -= rdRight; + rectTop -= rdTop; + + return new PDRectangle(rectLeft, rectBottom, rectRight - rectLeft, rectTop - rectBottom); + } + + private void reversePolygon(Point2D.Double[] points) + { + int len = points.length; + int n = len / 2; + for (int i = 0; i < n; i++) + { + int j = len - i - 1; + Point2D.Double pi = points[i]; + Point2D.Double pj = points[j]; + points[i] = pj; + points[j] = pi; + } + } + + /** + * Makes a polygon whose direction is the same as the positive angle + * direction in the coordinate system. + * The polygon must not intersect itself. + */ + private void getPositivePolygon(Point2D.Double[] points) + { + if (getPolygonDirection(points) < 0) + { + reversePolygon(points); + } + } + + /** + * Returns the direction of the specified polygon. + * A positive value indicates that the polygon's direction is the same as the + * direction of positive angles in the coordinate system. + * A negative value indicates the opposite direction. + * + * The polygon must not intersect itself. A 2-point polygon is not acceptable. + * This is based on the "shoelace formula". + */ + private double getPolygonDirection(Point2D.Double[] points) + { + double a = 0; + int len = points.length; + for (int i = 0; i < len; i++) + { + int j = (i + 1) % len; + a += points[i].x * points[j].y - points[i].y * points[j].x; + } + return a; + } + + /** + * Creates one or more Bézier curves that represent an elliptical arc. + * Angles are in radians. + * The arc will always proceed in the positive angle direction. + * If the argument `out` is null, this writes the results to the instance + * variable `output`. + */ + private void getArc(double startAng, double endAng, double rx, double ry, + double cx, double cy, ArrayList out, boolean addMoveTo) throws IOException + { + final double angleIncr = Math.PI / 2; + double startx = rx * Math.cos(startAng) + cx; + double starty = ry * Math.sin(startAng) + cy; + + double angleTodo = endAng - startAng; + while (angleTodo < 0) + { + angleTodo += 2 * Math.PI; + } + double sweep = angleTodo; + double angleDone = 0; + + if (addMoveTo) + { + if (out != null) + { + out.add(new Point2D.Double(startx, starty)); + } + else + { + moveTo(startx, starty); + } + } + + while (angleTodo > angleIncr) + { + getArcSegment(startAng + angleDone, + startAng + angleDone + angleIncr, cx, cy, rx, ry, out, false); + angleDone += angleIncr; + angleTodo -= angleIncr; + } + + if (angleTodo > 0) + { + getArcSegment(startAng + angleDone, startAng + sweep, cx, cy, rx, ry, out, false); + } + } + + /** + * Creates a single Bézier curve that represents a section of an elliptical + * arc. The sweep angle of the section must not be larger than 90 degrees. + * If argument `out` is null, this writes the results to the instance + * variable `output`. + */ + private void getArcSegment(double startAng, double endAng, double cx, double cy, + double rx, double ry, ArrayList out, boolean addMoveTo) throws IOException + { + // Algorithm is from the FAQ of the news group comp.text.pdf + + double cosA = Math.cos(startAng); + double sinA = Math.sin(startAng); + double cosB = Math.cos(endAng); + double sinB = Math.sin(endAng); + double denom = Math.sin((endAng - startAng) / 2.0); + if (Double.compare(denom, 0.0) == 0) + { + // This can happen only if endAng == startAng. + // The arc sweep angle is zero, so we create no arc at all. + if (addMoveTo) + { + double xs = cx + rx * cosA; + double ys = cy + ry * sinA; + if (out != null) + { + out.add(new Point2D.Double(xs, ys)); + } + else + { + moveTo(xs, ys); + } + } + return; + } + double bcp = 1.333333333 * (1 - Math.cos((endAng - startAng) / 2.0)) / denom; + double p1x = cx + rx * (cosA - bcp * sinA); + double p1y = cy + ry * (sinA + bcp * cosA); + double p2x = cx + rx * (cosB + bcp * sinB); + double p2y = cy + ry * (sinB - bcp * cosB); + double p3x = cx + rx * cosB; + double p3y = cy + ry * sinB; + + if (addMoveTo) + { + double xs = cx + rx * cosA; + double ys = cy + ry * sinA; + if (out != null) + { + out.add(new Point2D.Double(xs, ys)); + } + else + { + moveTo(xs, ys); + } + } + + if (out != null) + { + out.add(new Point2D.Double(p1x, p1y)); + out.add(new Point2D.Double(p2x, p2y)); + out.add(new Point2D.Double(p3x, p3y)); + } + else + { + curveTo(p1x, p1y, p2x, p2y, p3x, p3y); + } + } + + /** + * Flattens an ellipse into a polygon. + */ + private static Point2D.Double[] flattenEllipse(double left, double bottom, + double right, double top) + { + Ellipse2D.Double ellipse = new Ellipse2D.Double(left, bottom, right - left, top - bottom); + final double flatness = 0.50; + PathIterator iterator = ellipse.getPathIterator(null, flatness); + double[] coords = new double[6]; + ArrayList points = new ArrayList<>(); + + while (!iterator.isDone()) + { + switch (iterator.currentSegment(coords)) + { + case PathIterator.SEG_MOVETO: + case PathIterator.SEG_LINETO: + points.add(new Point2D.Double(coords[0], coords[1])); + break; + // Curve segments are not expected because the path iterator is + // flattened. SEG_CLOSE can be ignored. + default: + break; + } + iterator.next(); + } + + int size = points.size(); + final double closeTestLimit = 0.05; + + if (size >= 2 && points.get(size - 1).distance(points.get(0)) > closeTestLimit) + { + points.add(points.get(points.size() - 1)); + } + return points.toArray(new Point2D.Double[points.size()]); + } + + /** + * Cloudy ellipse implementation. + */ + private void cloudyEllipseImpl(final double leftOrig, final double bottomOrig, + final double rightOrig, final double topOrig) throws IOException + { + if (intensity <= 0.0) + { + drawBasicEllipse(leftOrig, bottomOrig, rightOrig, topOrig); + return; + } + + double left = leftOrig; + double bottom = bottomOrig; + double right = rightOrig; + double top = topOrig; + double width = right - left; + double height = top - bottom; + double cloudRadius = getEllipseCloudRadius(); + + // Omit cloudy border if the ellipse is very small. + final double threshold1 = 0.50 * cloudRadius; + if (width < threshold1 && height < threshold1) + { + drawBasicEllipse(left, bottom, right, top); + return; + } + + // Draw a cloudy rectangle instead of an ellipse when the + // width or height is very small. + final double threshold2 = 5; + if ((width < threshold2 && height > 20) || (width > 20 && height < threshold2)) + { + cloudyRectangleImpl(left, bottom, right, top, true); + return; + } + + // Decrease radii (while center point does not move). This makes the + // "tails" of the curls almost touch the ellipse outline. + double radiusAdj = Math.sin(ANGLE_12_DEG) * cloudRadius - 1.50; + if (width > 2 * radiusAdj) + { + left += radiusAdj; + right -= radiusAdj; + } + else + { + double mid = (left + right) / 2; + left = mid - 0.10; + right = mid + 0.10; + } + if (height > 2 * radiusAdj) + { + top -= radiusAdj; + bottom += radiusAdj; + } + else + { + double mid = (top + bottom) / 2; + top = mid + 0.10; + bottom = mid - 0.10; + } + + // Flatten the ellipse into a polygon. The segment lengths of the flattened + // result don't need to be extremely short because the loop below is able to + // interpolate between polygon points when it computes the center points + // at which each curl is placed. + + Point2D.Double[] flatPolygon = flattenEllipse(left, bottom, right, top); + int numPoints = flatPolygon.length; + if (numPoints < 2) + { + return; + } + + double totLen = 0; + for(int i = 1; i < numPoints; i++){ + totLen += flatPolygon[i - 1].distance(flatPolygon[i]); + } + + final double k = Math.cos(ANGLE_34_DEG); + double curlAdvance = 2 * k * cloudRadius; + int n = (int) Math.ceil(totLen / curlAdvance); + if (n < 2) + { + drawBasicEllipse(leftOrig, bottomOrig, rightOrig, topOrig); + return; + } + + curlAdvance = totLen / n; + cloudRadius = curlAdvance / (2 * k); + + if (cloudRadius < 0.5) + { + cloudRadius = 0.5; + curlAdvance = 2 * k * cloudRadius; + } + else if (cloudRadius < 3.0) + { + // Draw a small circle when the scaled radius becomes very small. + // This happens also if intensity is much smaller than 1. + drawBasicEllipse(leftOrig, bottomOrig, rightOrig, topOrig); + return; + } + + // Construct centerPoints array, in which each point is the center point of a curl. + // The length of each centerPoints segment ideally equals curlAdv but that + // is not true in regions where the ellipse curvature is high. + + int centerPointsLength = n; + Point2D.Double[] centerPoints = new Point2D.Double[centerPointsLength]; + int centerPointsIndex = 0; + double lengthRemain = 0; + final double comparisonToler = lineWidth * 0.10; + + for (int i = 0; i + 1 < numPoints; i++) + { + Point2D.Double p1 = flatPolygon[i]; + Point2D.Double p2 = flatPolygon[i + 1]; + double dx = p2.x - p1.x; + double dy = p2.y - p1.y; + double length = p1.distance(p2); + if (Double.compare(length, 0.0) == 0) + { + continue; + } + double lengthTodo = length + lengthRemain; + if (lengthTodo >= curlAdvance - comparisonToler || i == numPoints - 2) + { + double cos = cosine(dx, length); + double sin = sine(dy, length); + double d = curlAdvance - lengthRemain; + do + { + double x = p1.x + d * cos; + double y = p1.y + d * sin; + if (centerPointsIndex < centerPointsLength) + { + centerPoints[centerPointsIndex++] = new Point2D.Double(x, y); + } + lengthTodo -= curlAdvance; + d += curlAdvance; + } + while (lengthTodo >= curlAdvance - comparisonToler); + + lengthRemain = lengthTodo; + if (lengthRemain < 0) + { + lengthRemain = 0; + } + } + else + { + lengthRemain += length; + } + } + + // Note: centerPoints does not repeat the first point as the last point + // to create a "closing" segment. + + // Place a curl at each point of the centerPoints array. + // In regions where the ellipse curvature is high, the centerPoints segments + // are shorter than the actual distance along the ellipse. Thus we must + // again compute arc adjustments like in cloudy polygons. + + numPoints = centerPointsIndex; + double anglePrev = 0; + double alphaPrev = 0; + + for (int i = 0; i < numPoints; i++) + { + int idxNext = i + 1; + if (i + 1 >= numPoints) + { + idxNext = 0; + } + Point2D.Double pt = centerPoints[i]; + Point2D.Double ptNext = centerPoints[idxNext]; + + if (i == 0) + { + Point2D.Double ptPrev = centerPoints[numPoints - 1]; + anglePrev = Math.atan2(pt.y - ptPrev.y, pt.x - ptPrev.x); + alphaPrev = computeParamsEllipse(ptPrev, pt, cloudRadius, curlAdvance); + } + + double angleCur = Math.atan2(ptNext.y - pt.y, ptNext.x - pt.x); + double alpha = computeParamsEllipse(pt, ptNext, cloudRadius, curlAdvance); + + addCornerCurl(anglePrev, angleCur, cloudRadius, pt.x, pt.y, alpha, + alphaPrev, !outputStarted); + + anglePrev = angleCur; + alphaPrev = alpha; + } + } + + /** + * Computes the alpha parameter for an ellipse curl. + */ + private double computeParamsEllipse(Point2D.Double pt, Point2D.Double ptNext, + double r, double curlAdv) + { + double length = pt.distance(ptNext); + if (Double.compare(length, 0.0) == 0) + { + return ANGLE_34_DEG; + } + + double e = length - curlAdv; + double arg = (curlAdv / 2 + e / 2) / r; + return (arg < -1.0 || arg > 1.0) ? 0.0 : Math.acos(arg); + } + + private Point2D.Double[] removeZeroLengthSegments(Point2D.Double[] polygon) + { + int np = polygon.length; + if (np <= 2) + { + return polygon; + } + + final double toler = 0.50; + int npNew = np; + Point2D.Double ptPrev = polygon[0]; + + // Don't remove the last point if it equals the first point. + for (int i = 1; i < np; i++) + { + Point2D.Double pt = polygon[i]; + if (Math.abs(pt.x - ptPrev.x) < toler && Math.abs(pt.y - ptPrev.y) < toler) + { + polygon[i] = null; + npNew--; + } + ptPrev = pt; + } + + if (npNew == np) + { + return polygon; + } + + Point2D.Double[] polygonNew = new Point2D.Double[npNew]; + int j = 0; + for (int i = 0; i < np; i++) + { + Point2D.Double pt = polygon[i]; + if (pt != null) + { + polygonNew[j++] = pt; + } + } + + return polygonNew; + } + + /** + * Draws an ellipse without a cloudy border effect. + */ + private void drawBasicEllipse(double left, double bottom, double right, double top) + throws IOException + { + double rx = Math.abs(right - left) / 2; + double ry = Math.abs(top - bottom) / 2; + double cx = (left + right) / 2; + double cy = (bottom + top) / 2; + getArc(0, 2 * Math.PI, rx, ry, cx, cy, null, true); + } + + private void beginOutput(double x, double y) throws IOException + { + bboxMinX = x; + bboxMinY = y; + bboxMaxX = x; + bboxMaxY = y; + outputStarted = true; + // Set line join to bevel to avoid spikes + output.setLineJoinStyle(2); + } + + private void updateBBox(double x, double y) + { + bboxMinX = Math.min(bboxMinX, x); + bboxMinY = Math.min(bboxMinY, y); + bboxMaxX = Math.max(bboxMaxX, x); + bboxMaxY = Math.max(bboxMaxY, y); + } + + private void moveTo(Point2D.Double p) throws IOException + { + moveTo(p.x, p.y); + } + + private void moveTo(double x, double y) throws IOException + { + if (outputStarted) + { + updateBBox(x, y); + } + else + { + beginOutput(x, y); + } + + output.moveTo((float)x, (float)y); + } + + private void lineTo(Point2D.Double p) throws IOException + { + lineTo(p.x, p.y); + } + + private void lineTo(double x, double y) throws IOException + { + if (outputStarted) + { + updateBBox(x, y); + } + else + { + beginOutput(x, y); + } + + output.lineTo((float)x, (float)y); + } + + private void curveTo(double ax, double ay, double bx, double by, double cx, double cy) + throws IOException + { + updateBBox(ax, ay); + updateBBox(bx, by); + updateBBox(cx, cy); + output.curveTo((float)ax, (float)ay, (float)bx, (float)by, (float)cx, (float)cy); + } + + private void finish() throws IOException + { + if (outputStarted) + { + output.closePath(); + } + + if (lineWidth > 0) + { + double d = lineWidth / 2; + bboxMinX -= d; + bboxMinY -= d; + bboxMaxX += d; + bboxMaxY += d; + } + } + + private double getEllipseCloudRadius() + { + // Equation deduced from Acrobat Reader's appearance streams. Circle + // annotations have a slightly larger radius than Polygons and Squares. + return 4.75 * intensity + 0.5 * lineWidth; + } + + private double getPolygonCloudRadius() + { + // Equation deduced from Acrobat Reader's appearance streams. + return 4 * intensity + 0.5 * lineWidth; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java new file mode 100644 index 00000000000..e3f0e722b39 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java @@ -0,0 +1,532 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.awt.geom.AffineTransform; +import java.io.IOException; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationSquareCircle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; + +/** + * Generic handler to generate the fields appearance. + * + * Individual handler will provide specific implementations for different field + * types. + * + */ +public abstract class PDAbstractAppearanceHandler implements PDAppearanceHandler +{ + private final PDAnnotation annotation; + + /** + * Line ending styles where the line has to be drawn shorter (minus line width). + */ + protected static final Set SHORT_STYLES = createShortStyles(); + + static final double ARROW_ANGLE = Math.toRadians(30); + + /** + * Line ending styles where there is an interior color. + */ + protected static final Set INTERIOR_COLOR_STYLES = createInteriorColorStyles(); + + /** + * Line ending styles where the shape changes its angle, e.g. arrows. + */ + protected static final Set ANGLED_STYLES = createAngledStyles(); + + public PDAbstractAppearanceHandler(PDAnnotation annotation) + { + this.annotation = annotation; + } + + @Override + public abstract void generateNormalAppearance(); + + @Override + public abstract void generateRolloverAppearance(); + + @Override + public abstract void generateDownAppearance(); + + PDAnnotation getAnnotation() + { + return annotation; + } + + PDColor getColor() + { + return annotation.getColor(); + } + + PDRectangle getRectangle() + { + return annotation.getRectangle(); + } + + /** + * Get the annotations appearance dictionary. + * + *

    + * This will get the annotations appearance dictionary. If this is not + * existent an empty appearance dictionary will be created. + * + * @return the annotations appearance dictionary + */ + PDAppearanceDictionary getAppearance() + { + PDAppearanceDictionary appearanceDictionary = annotation.getAppearance(); + if (appearanceDictionary == null) + { + appearanceDictionary = new PDAppearanceDictionary(); + annotation.setAppearance(appearanceDictionary); + } + return appearanceDictionary; + } + + /** + * Get the annotations normal appearance content stream. + * + *

    + * This will get the annotations normal appearance content stream, to 'draw' to. It will be + * uncompressed. + * + * @return the appearance entry representing the normal appearance. + * @throws IOException + */ + PDAppearanceContentStream getNormalAppearanceAsContentStream() throws IOException + { + return getNormalAppearanceAsContentStream(false); + } + + /** + * Get the annotations normal appearance content stream. + * + *

    + * This will get the annotations normal appearance content stream, to 'draw' to. + * + * @param compress whether the content stream is to be compressed. Set this to true when + * creating long content streams. + * @return the appearance entry representing the normal appearance. + * @throws IOException + */ + PDAppearanceContentStream getNormalAppearanceAsContentStream(boolean compress) throws IOException + { + PDAppearanceEntry appearanceEntry = getNormalAppearance(); + return getAppearanceEntryAsContentStream(appearanceEntry, compress); + } + + /** + * Get the annotations down appearance. + * + *

    + * This will get the annotations down appearance. If this is not existent an + * empty appearance entry will be created. + * + * @return the appearance entry representing the down appearance. + */ + PDAppearanceEntry getDownAppearance() + { + PDAppearanceDictionary appearanceDictionary = getAppearance(); + PDAppearanceEntry downAppearanceEntry = appearanceDictionary.getDownAppearance(); + + if (downAppearanceEntry.isSubDictionary()) + { + //TODO replace with "document.getDocument().createCOSStream()" + downAppearanceEntry = new PDAppearanceEntry(new COSStream()); + appearanceDictionary.setDownAppearance(downAppearanceEntry); + } + + return downAppearanceEntry; + } + + /** + * Get the annotations rollover appearance. + * + *

    + * This will get the annotations rollover appearance. If this is not + * existent an empty appearance entry will be created. + * + * @return the appearance entry representing the rollover appearance. + */ + PDAppearanceEntry getRolloverAppearance() + { + PDAppearanceDictionary appearanceDictionary = getAppearance(); + PDAppearanceEntry rolloverAppearanceEntry = appearanceDictionary.getRolloverAppearance(); + + if (rolloverAppearanceEntry.isSubDictionary()) + { + //TODO replace with "document.getDocument().createCOSStream()" + rolloverAppearanceEntry = new PDAppearanceEntry(new COSStream()); + appearanceDictionary.setRolloverAppearance(rolloverAppearanceEntry); + } + + return rolloverAppearanceEntry; + } + + /** + * Get a padded rectangle. + * + *

    Creates a new rectangle with padding applied to each side. + * . + * @param rectangle the rectangle. + * @param padding the padding to apply. + * @return the padded rectangle. + */ + PDRectangle getPaddedRectangle(PDRectangle rectangle, float padding) + { + return new PDRectangle(rectangle.getLowerLeftX() + padding, rectangle.getLowerLeftY() + padding, + rectangle.getWidth() - 2 * padding, rectangle.getHeight() - 2 * padding); + } + + /** + * Get a rectangle enlarged by the differences. + * + *

    + * Creates a new rectangle with differences added to each side. If there are no valid + * differences, then the original rectangle is returned. + * + * @param rectangle the rectangle. + * @param differences the differences to apply. + * @return the padded rectangle. + */ + PDRectangle addRectDifferences(PDRectangle rectangle, float[] differences) + { + if (differences == null || differences.length != 4) + { + return rectangle; + } + + return new PDRectangle(rectangle.getLowerLeftX() - differences[0], + rectangle.getLowerLeftY() - differences[1], + rectangle.getWidth() + differences[0] + differences[2], + rectangle.getHeight() + differences[1] + differences[3]); + } + + /** + * Get a rectangle with the differences applied to each side. + * + *

    + * Creates a new rectangle with differences added to each side. If there are no valid + * differences, then the original rectangle is returned. + * + * @param rectangle the rectangle. + * @param differences the differences to apply. + * @return the padded rectangle. + */ + PDRectangle applyRectDifferences(PDRectangle rectangle, float[] differences) + { + if (differences == null || differences.length != 4) + { + return rectangle; + } + return new PDRectangle(rectangle.getLowerLeftX() + differences[0], + rectangle.getLowerLeftY() + differences[1], + rectangle.getWidth() - differences[0] - differences[2], + rectangle.getHeight() - differences[1] - differences[3]); + } + + void setOpacity(PDAppearanceContentStream contentStream, float opacity) throws IOException + { + if (opacity < 1) + { + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setStrokingAlphaConstant(opacity); + gs.setNonStrokingAlphaConstant(opacity); + + contentStream.setGraphicsStateParameters(gs); + } + } + + /** + * Draw a line ending style. + * + * @param style + * @param cs + * @param x + * @param y + * @param width + * @param hasStroke + * @param hasBackground + * @param ending false if left, true if right of an imagined horizontal line (important for + * arrows). + * + * @throws IOException + */ + void drawStyle(String style, final PDAppearanceContentStream cs, float x, float y, + float width, boolean hasStroke, boolean hasBackground, boolean ending) throws IOException + { + int sign = ending ? -1 : 1; + switch (style) + { + case PDAnnotationLine.LE_OPEN_ARROW: + case PDAnnotationLine.LE_CLOSED_ARROW: + drawArrow(cs, x + sign * width, y, sign * width * 9); + break; + case PDAnnotationLine.LE_BUTT: + cs.moveTo(x, y - width * 3); + cs.lineTo(x, y + width * 3); + break; + case PDAnnotationLine.LE_DIAMOND: + drawDiamond(cs, x, y, width * 3); + break; + case PDAnnotationLine.LE_SQUARE: + cs.addRect(x - width * 3, y - width * 3, width * 6, width * 6); + break; + case PDAnnotationLine.LE_CIRCLE: + drawCircle(cs, x, y, width * 3); + break; + case PDAnnotationLine.LE_R_OPEN_ARROW: + case PDAnnotationLine.LE_R_CLOSED_ARROW: + drawArrow(cs, x + (0 - sign) * width, y, (0 - sign) * width * 9); + break; + case PDAnnotationLine.LE_SLASH: + // the line is 18 x linewidth at an angle of 60° + cs.moveTo(x + (float) (Math.cos(Math.toRadians(60)) * width * 9), + y + (float) (Math.sin(Math.toRadians(60)) * width * 9)); + cs.lineTo(x + (float) (Math.cos(Math.toRadians(240)) * width * 9), + y + (float) (Math.sin(Math.toRadians(240)) * width * 9)); + break; + default: + return; + } + if (PDAnnotationLine.LE_R_CLOSED_ARROW.equals(style) || + PDAnnotationLine.LE_CLOSED_ARROW.equals(style)) + { + cs.closePath(); + } + cs.drawShape(width, hasStroke, + // make sure to only paint a background color (/IC value) + // for interior color styles, even if an /IC value is set. + INTERIOR_COLOR_STYLES.contains(style) ? hasBackground : false); + } + + /** + * Add the two arms of a horizontal arrow. + * + * @param cs Content stream + * @param x + * @param y + * @param len The arm length. Positive goes to the right, negative goes to the left. + * + * @throws IOException If the content stream could not be written + */ + void drawArrow(PDAppearanceContentStream cs, float x, float y, float len) throws IOException + { + // strategy for arrows: angle 30°, arrow arm length = 9 * line width + // cos(angle) = x position + // sin(angle) = y position + // this comes very close to what Adobe is doing + cs.moveTo(x + (float) (Math.cos(ARROW_ANGLE) * len), y + (float) (Math.sin(ARROW_ANGLE) * len)); + cs.lineTo(x, y); + cs.lineTo(x + (float) (Math.cos(ARROW_ANGLE) * len), y - (float) (Math.sin(ARROW_ANGLE) * len)); + } + + /** + * Add a square diamond shape (corner on top) to the path. + * + * @param cs Content stream + * @param x + * @param y + * @param r Radius (to a corner) + * + * @throws IOException If the content stream could not be written + */ + void drawDiamond(PDAppearanceContentStream cs, float x, float y, float r) throws IOException + { + cs.moveTo(x - r, y); + cs.lineTo(x, y + r); + cs.lineTo(x + r, y); + cs.lineTo(x, y - r); + cs.closePath(); + } + + /** + * Add a circle shape to the path in clockwise direction. + * + * @param cs Content stream + * @param x + * @param y + * @param r Radius + * + * @throws IOException If the content stream could not be written. + */ + void drawCircle(PDAppearanceContentStream cs, float x, float y, float r) throws IOException + { + // http://stackoverflow.com/a/2007782/535646 + float magic = r * 0.551784f; + cs.moveTo(x, y + r); + cs.curveTo(x + magic, y + r, x + r, y + magic, x + r, y); + cs.curveTo(x + r, y - magic, x + magic, y - r, x, y - r); + cs.curveTo(x - magic, y - r, x - r, y - magic, x - r, y); + cs.curveTo(x - r, y + magic, x - magic, y + r, x, y + r); + cs.closePath(); + } + + /** + * Add a circle shape to the path in counterclockwise direction. You'll need this e.g. when + * drawing a doughnut shape. See "Nonzero Winding Number Rule" for more information. + * + * @param cs Content stream + * @param x + * @param y + * @param r Radius + * + * @throws IOException If the content stream could not be written. + */ + void drawCircle2(PDAppearanceContentStream cs, float x, float y, float r) throws IOException + { + // http://stackoverflow.com/a/2007782/535646 + float magic = r * 0.551784f; + cs.moveTo(x, y + r); + cs.curveTo(x - magic, y + r, x - r, y + magic, x - r, y); + cs.curveTo(x - r, y - magic, x - magic, y - r, x, y - r); + cs.curveTo(x + magic, y - r, x + r, y - magic, x + r, y); + cs.curveTo(x + r, y + magic, x + magic, y + r, x, y + r); + cs.closePath(); + } + + private static Set createShortStyles() + { + Set shortStyles = new HashSet<>(); + shortStyles.add(PDAnnotationLine.LE_OPEN_ARROW); + shortStyles.add(PDAnnotationLine.LE_CLOSED_ARROW); + shortStyles.add(PDAnnotationLine.LE_SQUARE); + shortStyles.add(PDAnnotationLine.LE_CIRCLE); + shortStyles.add(PDAnnotationLine.LE_DIAMOND); + return Collections.unmodifiableSet(shortStyles); + } + + private static Set createInteriorColorStyles() + { + Set interiorColorStyles = new HashSet<>(); + interiorColorStyles.add(PDAnnotationLine.LE_CLOSED_ARROW); + interiorColorStyles.add(PDAnnotationLine.LE_CIRCLE); + interiorColorStyles.add(PDAnnotationLine.LE_DIAMOND); + interiorColorStyles.add(PDAnnotationLine.LE_R_CLOSED_ARROW); + interiorColorStyles.add(PDAnnotationLine.LE_SQUARE); + return Collections.unmodifiableSet(interiorColorStyles); + } + + private static Set createAngledStyles() + { + Set angledStyles = new HashSet<>(); + angledStyles.add(PDAnnotationLine.LE_CLOSED_ARROW); + angledStyles.add(PDAnnotationLine.LE_OPEN_ARROW); + angledStyles.add(PDAnnotationLine.LE_R_CLOSED_ARROW); + angledStyles.add(PDAnnotationLine.LE_R_OPEN_ARROW); + angledStyles.add(PDAnnotationLine.LE_BUTT); + angledStyles.add(PDAnnotationLine.LE_SLASH); + return Collections.unmodifiableSet(angledStyles); + } + + /** + * Get the annotations normal appearance. + * + *

    + * This will get the annotations normal appearance. If this is not existent + * an empty appearance entry will be created. + * + * @return the appearance entry representing the normal appearance. + */ + private PDAppearanceEntry getNormalAppearance() + { + PDAppearanceDictionary appearanceDictionary = getAppearance(); + PDAppearanceEntry normalAppearanceEntry = appearanceDictionary.getNormalAppearance(); + + if (normalAppearanceEntry == null || normalAppearanceEntry.isSubDictionary()) + { + //TODO replace with "document.getDocument().createCOSStream()" + normalAppearanceEntry = new PDAppearanceEntry(new COSStream()); + appearanceDictionary.setNormalAppearance(normalAppearanceEntry); + } + + return normalAppearanceEntry; + } + + + private PDAppearanceContentStream getAppearanceEntryAsContentStream( + PDAppearanceEntry appearanceEntry, boolean compress) throws IOException + { + PDAppearanceStream appearanceStream = appearanceEntry.getAppearanceStream(); + setTransformationMatrix(appearanceStream); + + // ensure there are resources + PDResources resources = appearanceStream.getResources(); + if (resources == null) + { + resources = new PDResources(); + appearanceStream.setResources(resources); + } + + return new PDAppearanceContentStream(appearanceStream, compress); + } + + private void setTransformationMatrix(PDAppearanceStream appearanceStream) + { + PDRectangle bbox = getRectangle(); + appearanceStream.setBBox(bbox); + AffineTransform transform = AffineTransform.getTranslateInstance(-bbox.getLowerLeftX(), + -bbox.getLowerLeftY()); + appearanceStream.setMatrix(transform); + } + + PDRectangle handleBorderBox(PDAnnotationSquareCircle annotation, float lineWidth) + { + // There are two options. The handling is not part of the PDF specification but + // implementation specific to Adobe Reader + // - if /RD is set the border box is the /Rect entry inset by the respective + // border difference. + // - if /RD is not set the border box is defined by the /Rect entry. The /RD entry will + // be set to be the line width and the /Rect is enlarged by the /RD amount + PDRectangle borderBox; + float[] rectDifferences = annotation.getRectDifferences(); + if (rectDifferences.length == 0) + { + borderBox = getPaddedRectangle(getRectangle(), lineWidth / 2); + // the differences rectangle + annotation.setRectDifferences(lineWidth / 2); + annotation.setRectangle(addRectDifferences(getRectangle(), annotation.getRectDifferences())); + // when the normal appearance stream was generated BBox and Matrix have been set to the + // values of the original /Rect. As the /Rect was changed that needs to be adjusted too. + annotation.getNormalAppearanceStream().setBBox(getRectangle()); + AffineTransform transform = AffineTransform.getTranslateInstance(-getRectangle().getLowerLeftX(), -getRectangle().getLowerLeftY()); + annotation.getNormalAppearanceStream().setMatrix(transform); + } + else + { + borderBox = applyRectDifferences(getRectangle(), rectDifferences); + borderBox = getPaddedRectangle(borderBox, lineWidth / 2); + } + return borderBox; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAppearanceHandler.java new file mode 100644 index 00000000000..0daca006209 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAppearanceHandler.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +public interface PDAppearanceHandler +{ + void generateAppearanceStreams(); + + void generateNormalAppearance(); + + void generateRolloverAppearance(); + + void generateDownAppearance(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java new file mode 100644 index 00000000000..ebb34ad4544 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java @@ -0,0 +1,114 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationCaret; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.util.Matrix; + +/** + * Handler to generate the caret annotations appearance. + * + * @author Tilman Hausherr + */ +public class PDCaretAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDCaretAppearanceHandler.class); + + public PDCaretAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationCaret annotation = (PDAnnotationCaret) getAnnotation(); + try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream()) + { + contentStream.setStrokingColor(getColor()); + contentStream.setNonStrokingColor(getColor()); + + setOpacity(contentStream, annotation.getConstantOpacity()); + + PDRectangle rect = getRectangle(); + PDRectangle bbox = new PDRectangle(rect.getWidth(), rect.getHeight()); + if (!annotation.getCOSObject().containsKey(COSName.RD)) + { + // Adobe creates the /RD entry with a number that is decided + // by dividing the height by 10, with a maximum result of 5. + // That number is then used to enlarge the bbox and the rectangle and added to the + // translation values in the matrix and also used for the line width + // (not here because it has no effect, see comment near fill() ). + // The curves are based on the original rectangle. + float rd = Math.min(rect.getHeight() / 10, 5); + annotation.setRectDifferences(rd); + bbox = new PDRectangle(-rd, -rd, rect.getWidth() + 2 * rd, rect.getHeight() + 2 * rd); + Matrix matrix = annotation.getNormalAppearanceStream().getMatrix(); + matrix.transformPoint(rd, rd); + annotation.getNormalAppearanceStream().setMatrix(matrix.createAffineTransform()); + PDRectangle rect2 = new PDRectangle(rect.getLowerLeftX() - rd, rect.getLowerLeftY() - rd, + rect.getWidth() + 2 * rd, rect.getHeight() + 2 * rd); + annotation.setRectangle(rect2); + } + annotation.getNormalAppearanceStream().setBBox(bbox); + + float halfX = rect.getWidth() / 2; + float halfY = rect.getHeight() / 2; + contentStream.moveTo(0, 0); + contentStream.curveTo(halfX, 0, + halfX, halfY, + halfX, rect.getHeight()); + contentStream.curveTo(halfX, halfY, + halfX, 0, + rect.getWidth(), 0); + contentStream.closePath(); + contentStream.fill(); + // Adobe has an additional stroke, but it has no effect + // because fill "consumes" the path. + } + catch (IOException e) + { + LOG.error(e); + } + } + + @Override + public void generateRolloverAppearance() + { + // TODO to be implemented + } + + @Override + public void generateDownAppearance() + { + // TODO to be implemented + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCircleAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCircleAppearanceHandler.java new file mode 100644 index 00000000000..69607fa7e94 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCircleAppearanceHandler.java @@ -0,0 +1,173 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationCircle; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderEffectDictionary; + +/** + * Handler to generate the circle annotations appearance. + * + */ +public class PDCircleAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDCircleAppearanceHandler.class); + + public PDCircleAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + float lineWidth = getLineWidth(); + PDAnnotationCircle annotation = (PDAnnotationCircle) getAnnotation(); + try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream()) + { + boolean hasStroke = contentStream.setStrokingColorOnDemand(getColor()); + boolean hasBackground = contentStream + .setNonStrokingColorOnDemand(annotation.getInteriorColor()); + + setOpacity(contentStream, annotation.getConstantOpacity()); + + contentStream.setBorderLine(lineWidth, annotation.getBorderStyle(), annotation.getBorder()); + PDBorderEffectDictionary borderEffect = annotation.getBorderEffect(); + + if (borderEffect != null && borderEffect.getStyle().equals(PDBorderEffectDictionary.STYLE_CLOUDY)) + { + CloudyBorder cloudyBorder = new CloudyBorder(contentStream, + borderEffect.getIntensity(), lineWidth, getRectangle()); + cloudyBorder.createCloudyEllipse(annotation.getRectDifference()); + annotation.setRectangle(cloudyBorder.getRectangle()); + annotation.setRectDifference(cloudyBorder.getRectDifference()); + PDAppearanceStream appearanceStream = annotation.getNormalAppearanceStream(); + appearanceStream.setBBox(cloudyBorder.getBBox()); + appearanceStream.setMatrix(cloudyBorder.getMatrix()); + } + else + { + // Acrobat applies a padding to each side of the bbox so the line is completely within + // the bbox. + + PDRectangle borderBox = handleBorderBox(annotation, lineWidth); + + // lower left corner + float x0 = borderBox.getLowerLeftX(); + float y0 = borderBox.getLowerLeftY(); + // upper right corner + float x1 = borderBox.getUpperRightX(); + float y1 = borderBox.getUpperRightY(); + // mid points + float xm = x0 + borderBox.getWidth() / 2; + float ym = y0 + borderBox.getHeight() / 2; + // see http://spencermortensen.com/articles/bezier-circle/ + // the below number was calculated from sampling content streams + // generated using Adobe Reader + float magic = 0.55555417f; + // control point offsets + float vOffset = borderBox.getHeight() / 2 * magic; + float hOffset = borderBox.getWidth() / 2 * magic; + + contentStream.moveTo(xm, y1); + contentStream.curveTo((xm + hOffset), y1, x1, (ym + vOffset), x1, ym); + contentStream.curveTo(x1, (ym - vOffset), (xm + hOffset), y0, xm, y0); + contentStream.curveTo((xm - hOffset), y0, x0, (ym - vOffset), x0, ym); + contentStream.curveTo(x0, (ym + vOffset), (xm - hOffset), y1, xm, y1); + contentStream.closePath(); + } + + contentStream.drawShape(lineWidth, hasStroke, hasBackground); + } + catch (IOException e) + { + LOG.error(e); + } + } + + @Override + public void generateRolloverAppearance() + { + // TODO to be implemented + } + + @Override + public void generateDownAppearance() + { + // TODO to be implemented + } + + /** + * Get the line with of the border. + * + * Get the width of the line used to draw a border around the annotation. + * This may either be specified by the annotation dictionaries Border + * setting or by the W entry in the BS border style dictionary. If both are + * missing the default width is 1. + * + * @return the line width + */ + // TODO: according to the PDF spec the use of the BS entry is annotation + // specific + // so we will leave that to be implemented by individual handlers. + // If at the end all annotations support the BS entry this can be handled + // here and removed from the individual handlers. + float getLineWidth() + { + PDAnnotationMarkup annotation = (PDAnnotationMarkup) getAnnotation(); + + PDBorderStyleDictionary bs = annotation.getBorderStyle(); + + if (bs != null) + { + return bs.getWidth(); + } + + COSArray borderCharacteristics = annotation.getBorder(); + if (borderCharacteristics.size() >= 3) + { + COSBase base = borderCharacteristics.getObject(2); + if (base instanceof COSNumber) + { + return ((COSNumber) base).floatValue(); + } + } + + return 1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java new file mode 100644 index 00000000000..e5af465c03e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDFreeTextAppearanceHandler.java @@ -0,0 +1,439 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fontbox.util.Charsets; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationFreeText; +import static org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine.LE_NONE; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderEffectDictionary; +import static org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAbstractAppearanceHandler.SHORT_STYLES; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.AppearanceStyle; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.PlainText; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.PlainTextFormatter; +import org.apache.pdfbox.util.Matrix; + +public class PDFreeTextAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDFreeTextAppearanceHandler.class); + + public PDFreeTextAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationFreeText annotation = (PDAnnotationFreeText) getAnnotation(); + float[] pathsArray = new float[0]; + if (PDAnnotationFreeText.IT_FREE_TEXT_CALLOUT.equals(annotation.getIntent())) + { + pathsArray = annotation.getCallout(); + if (pathsArray == null || pathsArray.length != 4 && pathsArray.length != 6) + { + pathsArray = new float[0]; + } + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream(true)) + { + // The fill color is the /C entry, there is no /IC entry defined + boolean hasBackground = cs.setNonStrokingColorOnDemand(annotation.getColor()); + setOpacity(cs, annotation.getConstantOpacity()); + + // Adobe uses the last non stroking color from /DA as stroking color! + PDColor strokingColor = extractNonStrokingColor(annotation); + boolean hasStroke = cs.setStrokingColorOnDemand(strokingColor); + + if (ab.dashArray != null) + { + cs.setLineDashPattern(ab.dashArray, 0); + } + cs.setLineWidth(ab.width); + + // draw callout line(s) + // must be done before retangle paint to avoid a line cutting through cloud + // see CTAN-example-Annotations.pdf + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + if (i == 0) + { + if (SHORT_STYLES.contains(annotation.getLineEndingStyle())) + { + // modify coordinate to shorten the segment + // https://stackoverflow.com/questions/7740507/extend-a-line-segment-a-specific-distance + float x1 = pathsArray[2]; + float y1 = pathsArray[3]; + float len = (float) (Math.sqrt(Math.pow(x - x1, 2) + Math.pow(y - y1, 2))); + if (Float.compare(len, 0) != 0) + { + x += (x1 - x) / len * ab.width; + y += (y1 - y) / len * ab.width; + } + } + cs.moveTo(x, y); + } + else + { + cs.lineTo(x, y); + } + } + if (pathsArray.length > 0) + { + cs.stroke(); + } + + // paint the styles here and after line(s) draw, to avoid line crossing a filled shape + if (PDAnnotationFreeText.IT_FREE_TEXT_CALLOUT.equals(annotation.getIntent()) + // check only needed to avoid q cm Q if LE_NONE + && !LE_NONE.equals(annotation.getLineEndingStyle()) + && pathsArray.length >= 4) + { + float x2 = pathsArray[2]; + float y2 = pathsArray[3]; + float x1 = pathsArray[0]; + float y1 = pathsArray[1]; + cs.saveGraphicsState(); + if (ANGLED_STYLES.contains(annotation.getLineEndingStyle())) + { + // do a transform so that first "arm" is imagined flat, + // like in line handler. + // The alternative would be to apply the transform to the + // LE shape coordinates directly, which would be more work + // and produce code difficult to understand + double angle = Math.atan2(y2 - y1, x2 - x1); + cs.transform(Matrix.getRotateInstance(angle, x1, y1)); + } + else + { + cs.transform(Matrix.getTranslateInstance(x1, y1)); + } + drawStyle(annotation.getLineEndingStyle(), cs, 0, 0, ab.width, hasStroke, hasBackground, false); + cs.restoreGraphicsState(); + } + + PDRectangle borderBox; + PDBorderEffectDictionary borderEffect = annotation.getBorderEffect(); + if (borderEffect != null && borderEffect.getStyle().equals(PDBorderEffectDictionary.STYLE_CLOUDY)) + { + // Adobe draws the text with the original rectangle in mind. + // but if there is an /RD, then writing area get smaller. + // do this here because /RD is overwritten in a few lines + borderBox = applyRectDifferences(getRectangle(), annotation.getRectDifferences()); + + //TODO this segment was copied from square handler. Refactor? + CloudyBorder cloudyBorder = new CloudyBorder(cs, + borderEffect.getIntensity(), ab.width, getRectangle()); + cloudyBorder.createCloudyRectangle(annotation.getRectDifference()); + annotation.setRectangle(cloudyBorder.getRectangle()); + annotation.setRectDifference(cloudyBorder.getRectDifference()); + PDAppearanceStream appearanceStream = annotation.getNormalAppearanceStream(); + appearanceStream.setBBox(cloudyBorder.getBBox()); + appearanceStream.setMatrix(cloudyBorder.getMatrix()); + } + else + { + // handle the border box + // + // There are two options. The handling is not part of the PDF specification but + // implementation specific to Adobe Reader + // - if /RD is set the border box is the /Rect entry inset by the respective + // border difference. + // - if /RD is not set then we don't touch /RD etc because Adobe doesn't either. + borderBox = applyRectDifferences(getRectangle(), annotation.getRectDifferences()); + annotation.getNormalAppearanceStream().setBBox(borderBox); + + // note that borderBox is not modified + PDRectangle paddedRectangle = getPaddedRectangle(borderBox, ab.width / 2); + cs.addRect(paddedRectangle.getLowerLeftX(), paddedRectangle.getLowerLeftY(), + paddedRectangle.getWidth(), paddedRectangle.getHeight()); + } + cs.drawShape(ab.width, hasStroke, hasBackground); + + // rotation is an undocumented feature, but Adobe uses it. Examples can be found + // in pdf_commenting_new.pdf file, page 3. + int rotation = annotation.getCOSObject().getInt(COSName.ROTATE, 0); + cs.transform(Matrix.getRotateInstance(Math.toRadians(rotation), 0, 0)); + float xOffset; + float yOffset; + float width = rotation == 90 || rotation == 270 ? borderBox.getHeight() : borderBox.getWidth(); + // strategy to write formatted text is somewhat inspired by + // AppearanceGeneratorHelper.insertGeneratedAppearance() + PDFont font = PDType1Font.HELVETICA; + float clipY; + float clipWidth = width - ab.width * 4; + float clipHeight = rotation == 90 || rotation == 270 ? + borderBox.getWidth() - ab.width * 4 : borderBox.getHeight() - ab.width * 4; + float fontSize = extractFontSize(annotation); + + // value used by Adobe, no idea where it comes from, actual font bbox max y is 0.931 + // gathered by creating an annotation with width 0. + float yDelta = 0.7896f; + switch (rotation) + { + case 180: + xOffset = - borderBox.getUpperRightX() + ab.width * 2; + yOffset = - borderBox.getLowerLeftY() - ab.width * 2 - yDelta * fontSize; + clipY = - borderBox.getUpperRightY() + ab.width * 2; + break; + case 90: + xOffset = borderBox.getLowerLeftY() + ab.width * 2; + yOffset = - borderBox.getLowerLeftX() - ab.width * 2 - yDelta * fontSize; + clipY = - borderBox.getUpperRightX() + ab.width * 2; + break; + case 270: + xOffset = - borderBox.getUpperRightY() + ab.width * 2; + yOffset = borderBox.getUpperRightX() - ab.width * 2 - yDelta * fontSize; + clipY = borderBox.getLowerLeftX() + ab.width * 2; + break; + case 0: + default: + xOffset = borderBox.getLowerLeftX() + ab.width * 2; + yOffset = borderBox.getUpperRightY() - ab.width * 2 - yDelta * fontSize; + clipY = borderBox.getLowerLeftY() + ab.width * 2; + break; + } + + // clip writing area + cs.addRect(xOffset, clipY, clipWidth, clipHeight); + cs.clip(); + + cs.beginText(); + cs.setFont(font, fontSize); + cs.setNonStrokingColor(strokingColor.getComponents()); + AppearanceStyle appearanceStyle = new AppearanceStyle(); + appearanceStyle.setFont(font); + appearanceStyle.setFontSize(fontSize); + PlainTextFormatter formatter = new PlainTextFormatter.Builder(cs) + .style(appearanceStyle) + .text(new PlainText(annotation.getContents())) + .width(width - ab.width * 4) + .wrapLines(true) + .initialOffset(xOffset, yOffset) + // Adobe ignores the /Q + //.textAlign(annotation.getQ()) + .build(); + formatter.format(); + cs.endText(); + + + if (pathsArray.length > 0) + { + PDRectangle rect = getRectangle(); + + // Adjust rectangle + // important to do this after the rectangle has been painted, because the + // final rectangle will be bigger due to callout + // CTAN-example-Annotations.pdf p1 + //TODO in a class structure this should be overridable + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + // arrow length is 9 * width at about 30° => 10 * width seems to be enough + rect.setLowerLeftX(Math.min(minX - ab.width * 10, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - ab.width * 10, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + ab.width * 10, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + ab.width * 10, rect.getUpperRightY())); + annotation.setRectangle(rect); + + // need to set the BBox too, because rectangle modification came later + annotation.getNormalAppearanceStream().setBBox(getRectangle()); + + //TODO when callout is used, /RD should be so that the result is the writable part + } + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + // get the last non stroking color from the /DA entry + private PDColor extractNonStrokingColor(PDAnnotationFreeText annotation) + { + // It could also work with a regular expression, but that should be written so that + // "/LucidaConsole 13.94766 Tf .392 .585 .93 rg" does not produce "2 .585 .93 rg" as result + // Another alternative might be to create a PDDocument and a PDPage with /DA content as /Content, + // process the whole thing and then get the non stroking color. + + PDColor strokingColor = new PDColor(new float[]{0}, PDDeviceGray.INSTANCE); + String defaultAppearance = annotation.getDefaultAppearance(); + if (defaultAppearance == null) + { + return strokingColor; + } + + try + { + // not sure if charset is correct, but we only need numbers and simple characters + PDFStreamParser parser = new PDFStreamParser(defaultAppearance.getBytes(Charsets.US_ASCII)); + COSArray arguments = new COSArray(); + COSArray colors = null; + Operator graphicOp = null; + for (Object token = parser.parseNextToken(); token != null; token = parser.parseNextToken()) + { + if (token instanceof COSObject) + { + arguments.add(((COSObject) token).getObject()); + } + else if (token instanceof Operator) + { + Operator op = (Operator) token; + String name = op.getName(); + if ("g".equals(name) || "rg".equals(name) || "k".equals(name)) + { + graphicOp = op; + colors = arguments; + } + arguments = new COSArray(); + } + else + { + arguments.add((COSBase) token); + } + } + if (graphicOp != null) + { + switch (graphicOp.getName()) + { + case "g": + strokingColor = new PDColor(colors, PDDeviceGray.INSTANCE); + break; + case "rg": + strokingColor = new PDColor(colors, PDDeviceRGB.INSTANCE); + break; + case "k": + strokingColor = new PDColor(colors, PDDeviceCMYK.INSTANCE); + break; + default: + break; + } + } + } + catch (IOException ex) + { + LOG.warn("Problem parsing /DA, will use default black", ex); + } + return strokingColor; + } + + //TODO extractNonStrokingColor and extractFontSize + // might somehow be replaced with PDDefaultAppearanceString, + // which is quite similar. + private float extractFontSize(PDAnnotationFreeText annotation) + { + String defaultAppearance = annotation.getDefaultAppearance(); + if (defaultAppearance == null) + { + return 10; + } + + try + { + // not sure if charset is correct, but we only need numbers and simple characters + PDFStreamParser parser = new PDFStreamParser(defaultAppearance.getBytes(Charsets.US_ASCII)); + COSArray arguments = new COSArray(); + COSArray fontArguments = new COSArray(); + for (Object token = parser.parseNextToken(); token != null; token = parser.parseNextToken()) + { + if (token instanceof COSObject) + { + arguments.add(((COSObject) token).getObject()); + } + else if (token instanceof Operator) + { + Operator op = (Operator) token; + String name = op.getName(); + if ("Tf".equals(name)) + { + fontArguments = arguments; + } + arguments = new COSArray(); + } + else + { + arguments.add((COSBase) token); + } + } + if (fontArguments.size() >= 2) + { + COSBase base = fontArguments.get(1); + if (base instanceof COSNumber) + { + return ((COSNumber) base).floatValue(); + } + } + } + catch (IOException ex) + { + LOG.warn("Problem parsing /DA, will use default 10", ex); + } + return 10; + } + + @Override + public void generateRolloverAppearance() + { + // TODO to be implemented + } + + @Override + public void generateDownAppearance() + { + // TODO to be implemented + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDHighlightAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDHighlightAppearanceHandler.java new file mode 100644 index 00000000000..095a38ad6b7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDHighlightAppearanceHandler.java @@ -0,0 +1,229 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDFormContentStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationHighlight; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; + +/** + * + * @author Tilman Hausherr + */ +public class PDHighlightAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDHighlightAppearanceHandler.class); + + public PDHighlightAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationHighlight annotation = (PDAnnotationHighlight) getAnnotation(); + PDRectangle rect = annotation.getRectangle(); + float[] pathsArray = annotation.getQuadPoints(); + if (pathsArray == null) + { + return; + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + PDColor color = annotation.getColor(); + if (color == null || color.getComponents().length == 0) + { + return; + } + + // Adjust rectangle even if not empty, see PLPDF.com-MarkupAnnotations.pdf + //TODO in a class structure this should be overridable + // this is similar to polyline but different data type + //TODO padding should consider the curves too; needs to know in advance where the curve is + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + + // get the delta used for curves and use it for padding + float maxDelta = 0; + for (int i = 0; i < pathsArray.length / 8; ++i) + { + // one of the two is 0, depending whether the rectangle is + // horizontal or vertical + // if it is diagonal then... uh... + float delta = Math.max((pathsArray[i + 0] - pathsArray[i + 4]) / 4, + (pathsArray[i + 1] - pathsArray[i + 5]) / 4); + maxDelta = Math.max(delta, maxDelta); + } + + rect.setLowerLeftX(Math.min(minX - ab.width / 2 - maxDelta, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - ab.width / 2 - maxDelta, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + ab.width + maxDelta, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + ab.width + maxDelta, rect.getUpperRightY())); + annotation.setRectangle(rect); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + PDExtendedGraphicsState r0 = new PDExtendedGraphicsState(); + PDExtendedGraphicsState r1 = new PDExtendedGraphicsState(); + r0.setAlphaSourceFlag(false); + r0.setStrokingAlphaConstant(annotation.getConstantOpacity()); + r0.setNonStrokingAlphaConstant(annotation.getConstantOpacity()); + r1.setAlphaSourceFlag(false); + r1.setBlendMode(BlendMode.MULTIPLY); + cs.setGraphicsStateParameters(r0); + cs.setGraphicsStateParameters(r1); + //TODO replace with document.getDocument().createCOSStream() + // or call new PDFormXObject(document) + PDFormXObject frm1 = new PDFormXObject(new COSStream()); + PDFormXObject frm2 = new PDFormXObject(new COSStream()); + frm1.setResources(new PDResources()); + try (PDFormContentStream mwfofrmCS = new PDFormContentStream(frm1)) + { + mwfofrmCS.drawForm(frm2); + } + frm1.setBBox(annotation.getRectangle()); + COSDictionary groupDict = new COSDictionary(); + groupDict.setItem(COSName.S, COSName.TRANSPARENCY); + //TODO PDFormXObject.setGroup() is missing + frm1.getCOSObject().setItem(COSName.GROUP, groupDict); + cs.drawForm(frm1); + frm2.setBBox(annotation.getRectangle()); + try (PDFormContentStream frm2CS = new PDFormContentStream(frm2)) + { + frm2CS.setNonStrokingColor(color); + int of = 0; + while (of + 7 < pathsArray.length) + { + // quadpoints spec sequence is incorrect, correct one is (4,5 0,1 2,3 6,7) + // https://stackoverflow.com/questions/9855814/pdf-spec-vs-acrobat-creation-quadpoints + + // for "curvy" highlighting, two Bézier control points are used that seem to have a + // distance of about 1/4 of the height. + // note that curves won't appear if outside of the rectangle + float delta = 0; + if (Float.compare(pathsArray[of + 0], pathsArray[of + 4]) == 0 && + Float.compare(pathsArray[of + 1], pathsArray[of + 3]) == 0 && + Float.compare(pathsArray[of + 2], pathsArray[of + 6]) == 0 && + Float.compare(pathsArray[of + 5], pathsArray[of + 7]) == 0) + { + // horizontal highlight + delta = (pathsArray[of + 1] - pathsArray[of + 5]) / 4; + } + else if (Float.compare(pathsArray[of + 1], pathsArray[of + 5]) == 0 && + Float.compare(pathsArray[of + 0], pathsArray[of + 2]) == 0 && + Float.compare(pathsArray[of + 3], pathsArray[of + 7]) == 0 && + Float.compare(pathsArray[of + 4], pathsArray[of + 6]) == 0) + { + // vertical highlight + delta = (pathsArray[of + 0] - pathsArray[of + 4]) / 4; + } + + frm2CS.moveTo(pathsArray[of + 4], pathsArray[of + 5]); + + if (Float.compare(pathsArray[of + 0], pathsArray[of + 4]) == 0) + { + // horizontal highlight + frm2CS.curveTo(pathsArray[of + 4] - delta, pathsArray[of + 5] + delta, + pathsArray[of + 0] - delta, pathsArray[of + 1] - delta, + pathsArray[of + 0], pathsArray[of + 1]); + } + else if (Float.compare(pathsArray[of + 5], pathsArray[of + 1]) == 0) + { + // vertical highlight + frm2CS.curveTo(pathsArray[of + 4] + delta, pathsArray[of + 5] + delta, + pathsArray[of + 0] - delta, pathsArray[of + 1] + delta, + pathsArray[of + 0], pathsArray[of + 1]); + } + else + { + frm2CS.lineTo(pathsArray[of + 0], pathsArray[of + 1]); + } + frm2CS.lineTo(pathsArray[of + 2], pathsArray[of + 3]); + if (Float.compare(pathsArray[of + 2], pathsArray[of + 6]) == 0) + { + // horizontal highlight + frm2CS.curveTo(pathsArray[of + 2] + delta, pathsArray[of + 3] - delta, + pathsArray[of + 6] + delta, pathsArray[of + 7] + delta, + pathsArray[of + 6], pathsArray[of + 7]); + } + else if (Float.compare(pathsArray[of + 3], pathsArray[of + 7]) == 0) + { + // vertical highlight + frm2CS.curveTo(pathsArray[of + 2] - delta, pathsArray[of + 3] - delta, + pathsArray[of + 6] + delta, pathsArray[of + 7] - delta, + pathsArray[of + 6], pathsArray[of + 7]); + } + else + { + frm2CS.lineTo(pathsArray[of + 6], pathsArray[of + 7]); + } + + frm2CS.fill(); + of += 8; + } + } + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDInkAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDInkAppearanceHandler.java new file mode 100644 index 00000000000..d5c179254cc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDInkAppearanceHandler.java @@ -0,0 +1,111 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationInk; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; + +/** + * Handler to generate the ink annotations appearance. + * + */ +public class PDInkAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDInkAppearanceHandler.class); + + public PDInkAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationInk ink = (PDAnnotationInk) getAnnotation(); + // PDF spec does not mention /Border for ink annotations, but it is used if /BS is not available + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(ink, ink.getBorderStyle()); + PDColor color = ink.getColor(); + if (color == null || color.getComponents().length == 0 || Float.compare(ab.width, 0) == 0) + { + return; + } + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + setOpacity(cs, ink.getConstantOpacity()); + + cs.setStrokingColor(color); + if (ab.dashArray != null) + { + cs.setLineDashPattern(ab.dashArray, 0); + } + cs.setLineWidth(ab.width); + + for (float[] pathArray : ink.getInkList()) + { + int nPoints = pathArray.length / 2; + + // "When drawn, the points shall be connected by straight lines or curves + // in an implementation-dependent way" - we do lines. + for (int i = 0; i < nPoints; ++i) + { + float x = pathArray[i * 2]; + float y = pathArray[i * 2 + 1]; + + if (i == 0) + { + cs.moveTo(x, y); + } + else + { + cs.lineTo(x, y); + } + } + cs.stroke(); + } + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java new file mode 100644 index 00000000000..b5ccaf934da --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java @@ -0,0 +1,337 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import static org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine.LE_NONE; +import static org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAbstractAppearanceHandler.ANGLED_STYLES; +import org.apache.pdfbox.util.Matrix; + +/** + * + */ +public class PDLineAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDLineAppearanceHandler.class); + + static final int FONT_SIZE = 9; + + public PDLineAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationLine annotation = (PDAnnotationLine) getAnnotation(); + PDRectangle rect = annotation.getRectangle(); + float[] pathsArray = annotation.getLine(); + if (pathsArray == null) + { + return; + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + PDColor color = annotation.getColor(); + if (color == null || color.getComponents().length == 0) + { + return; + } + float ll = annotation.getLeaderLineLength(); + float lle = annotation.getLeaderLineExtensionLength(); + float llo = annotation.getLeaderLineOffsetLength(); + + // Adjust rectangle even if not empty, see PLPDF.com-MarkupAnnotations.pdf + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + + // Leader lines + if (ll < 0) + { + // /LLO and /LLE go in the same direction as /LL + llo = -llo; + lle = -lle; + } + + // observed with diagonal line of AnnotationSample.Standard.pdf + // for line endings, very small widths must be treated as size 1. + // However the border of the line ending shapes is not drawn. + float lineEndingSize = (ab.width < 1e-5) ? 1 : ab.width; + + // add/substract with, font height, and arrows + // arrow length is 9 * width at about 30° => 10 * width seems to be enough + // but need to consider /LL, /LLE and /LLO too + //TODO find better way to calculate padding + rect.setLowerLeftX(Math.min(minX - Math.max(lineEndingSize * 10, Math.abs(llo+ll+lle)), rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - Math.max(lineEndingSize * 10, Math.abs(llo+ll+lle)), rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + Math.max(lineEndingSize * 10, Math.abs(llo+ll+lle)), rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + Math.max(lineEndingSize * 10, Math.abs(llo+ll+lle)), rect.getUpperRightY())); + + annotation.setRectangle(rect); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + setOpacity(cs, annotation.getConstantOpacity()); + + // Tested with Adobe Reader: + // text is written first (TODO) + // width 0 is used by Adobe as such (but results in a visible line in rendering) + // empty color array results in an invisible line ("n" operator) but the rest is visible + // empty content is like no caption + + boolean hasStroke = cs.setStrokingColorOnDemand(color); + + if (ab.dashArray != null) + { + cs.setLineDashPattern(ab.dashArray, 0); + } + cs.setLineWidth(ab.width); + + float x1 = pathsArray[0]; + float y1 = pathsArray[1]; + float x2 = pathsArray[2]; + float y2 = pathsArray[3]; + + // if there are leader lines, then the /L coordinates represent + // the endpoints of the leader lines rather than the endpoints of the line itself. + // so for us, llo + ll is the vertical offset for the line. + float y = llo + ll; + + String contents = annotation.getContents(); + if (contents == null) + { + contents = ""; + } + + cs.saveGraphicsState(); + double angle = Math.atan2(y2 - y1, x2 - x1); + cs.transform(Matrix.getRotateInstance(angle, x1, y1)); + float lineLength = (float) Math.sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1))); + + // Leader lines + cs.moveTo(0, llo); + cs.lineTo(0, llo + ll + lle); + cs.moveTo(lineLength, llo); + cs.lineTo(lineLength, llo + ll + lle); + + if (annotation.hasCaption() && !contents.isEmpty()) + { + // Note that Adobe places the text as a caption even if /CP is not set + // when the text is so long that it would cross arrows, but we ignore this for now + // and stick to the specification. + + PDType1Font font = PDType1Font.HELVETICA; + // TODO: support newlines!!!!! + // see https://www.pdfill.com/example/pdf_commenting_new.pdf + float contentLength = 0; + try + { + contentLength = font.getStringWidth(annotation.getContents()) / 1000 * FONT_SIZE; + + //TODO How to decide the size of the font? + // 9 seems to be standard, but if the text doesn't fit, a scaling is done + // see AnnotationSample.Standard.pdf, diagonal line + } + catch (IllegalArgumentException ex) + { + // Adobe Reader displays placeholders instead + LOG.error("line text '" + annotation.getContents() + "' can't be shown", ex); + } + float xOffset = (lineLength - contentLength) / 2; + float yOffset; + + String captionPositioning = annotation.getCaptionPositioning(); + + // draw the line horizontally, using the rotation CTM to get to correct final position + // that's the easiest way to calculate the positions for the line before and after inline caption + if (SHORT_STYLES.contains(annotation.getStartPointEndingStyle())) + { + cs.moveTo(lineEndingSize, y); + } + else + { + cs.moveTo(0, y); + } + if ("Top".equals(captionPositioning)) + { + // this arbitrary number is from Adobe + yOffset = 1.908f; + } + else + { + // Inline + // this arbitrary number is from Adobe + yOffset = -2.6f; + + cs.lineTo(xOffset - lineEndingSize, y); + cs.moveTo(lineLength - xOffset + lineEndingSize, y); + } + if (SHORT_STYLES.contains(annotation.getEndPointEndingStyle())) + { + cs.lineTo(lineLength - lineEndingSize, y); + } + else + { + cs.lineTo(lineLength, y); + } + cs.drawShape(lineEndingSize, hasStroke, false); + + // /CO entry (caption offset) + float captionHorizontalOffset = annotation.getCaptionHorizontalOffset(); + float captionVerticalOffset = annotation.getCaptionVerticalOffset(); + + // check contentLength so we don't show if there was trouble before + if (contentLength > 0) + { + cs.beginText(); + cs.setFont(font, FONT_SIZE); + cs.newLineAtOffset(xOffset + captionHorizontalOffset, + y + yOffset + captionVerticalOffset); + cs.showText(annotation.getContents()); + cs.endText(); + } + + if (Float.compare(captionVerticalOffset, 0) != 0) + { + // Adobe paints vertical bar to the caption + cs.moveTo(0 + lineLength / 2, y); + cs.lineTo(0 + lineLength / 2, y + captionVerticalOffset); + cs.drawShape(lineEndingSize, hasStroke, false); + } + } + else + { + if (SHORT_STYLES.contains(annotation.getStartPointEndingStyle())) + { + cs.moveTo(lineEndingSize, y); + } + else + { + cs.moveTo(0, y); + } + if (SHORT_STYLES.contains(annotation.getEndPointEndingStyle())) + { + cs.lineTo(lineLength - lineEndingSize, y); + } + else + { + cs.lineTo(lineLength, y); + } + cs.drawShape(lineEndingSize, hasStroke, false); + } + cs.restoreGraphicsState(); + + // paint the styles here and not before showing the text, or the text would appear + // with the interior color + boolean hasBackground = cs.setNonStrokingColorOnDemand(annotation.getInteriorColor()); + + // observed with diagonal line of file AnnotationSample.Standard.pdf + // when width is very small, the border of the line ending shapes + // is not drawn. + if (ab.width < 1e-5) + { + hasStroke = false; + } + + // check for LE_NONE only needed to avoid q cm Q for that case + if (!LE_NONE.equals(annotation.getStartPointEndingStyle())) + { + cs.saveGraphicsState(); + if (ANGLED_STYLES.contains(annotation.getStartPointEndingStyle())) + { + cs.transform(Matrix.getRotateInstance(angle, x1, y1)); + drawStyle(annotation.getStartPointEndingStyle(), cs, 0, y, lineEndingSize, hasStroke, hasBackground, false); + } + else + { + // Support of non-angled styles is more difficult than in the other handlers + // because the lines do not always go from (x1,y1) to (x2,y2) due to the leader lines + // when the "y" value above is not 0. + // We use the angle we already know and the distance y to translate to the new coordinate. + float xx1 = x1 - (float) (y * Math.sin(angle)); + float yy1 = y1 + (float) (y * Math.cos(angle)); + drawStyle(annotation.getStartPointEndingStyle(), cs, xx1, yy1, lineEndingSize, hasStroke, hasBackground, false); + } + cs.restoreGraphicsState(); + } + + // check for LE_NONE only needed to avoid q cm Q for that case + if (!LE_NONE.equals(annotation.getEndPointEndingStyle())) + { + // save / restore not needed because it's the last one + if (ANGLED_STYLES.contains(annotation.getEndPointEndingStyle())) + { + cs.transform(Matrix.getRotateInstance(angle, x2, y2)); + drawStyle(annotation.getEndPointEndingStyle(), cs, 0, y, lineEndingSize, hasStroke, hasBackground, true); + } + else + { + // Support of non-angled styles is more difficult than in the other handlers + // because the lines do not always go from (x1,y1) to (x2,y2) due to the leader lines + // when the "y" value above is not 0. + // We use the angle we already know and the distance y to translate to the new coordinate. + float xx2 = x2 - (float) (y * Math.sin(angle)); + float yy2 = y2 + (float) (y * Math.cos(angle)); + drawStyle(annotation.getEndPointEndingStyle(), cs, xx2, yy2, lineEndingSize, hasStroke, hasBackground, true); + } + } + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java new file mode 100644 index 00000000000..af10fa7e2d1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java @@ -0,0 +1,197 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; + +/** + * Handler to generate the link annotations appearance. + * + */ +public class PDLinkAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDLinkAppearanceHandler.class); + + public PDLinkAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationLink annotation = (PDAnnotationLink) getAnnotation(); + if (annotation.getRectangle() == null) + { + // 660402-p1-AnnotationEmptyRect.pdf has /Rect entry with 0 elements + return; + } + + // Adobe doesn't generate an appearance for a link annotation + float lineWidth = getLineWidth(); + try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream()) + { + PDColor color = annotation.getColor(); + if (color == null) + { + // spec is unclear, but black is what Adobe does + color = new PDColor(new float[] { 0 }, PDDeviceGray.INSTANCE); + } + boolean hasStroke = contentStream.setStrokingColorOnDemand(color); + + contentStream.setBorderLine(lineWidth, annotation.getBorderStyle(), annotation.getBorder()); + + // Acrobat applies a padding to each side of the bbox so the line is completely within + // the bbox. + PDRectangle borderEdge = getPaddedRectangle(getRectangle(),lineWidth/2); + + float[] pathsArray = annotation.getQuadPoints(); + + if (pathsArray != null) + { + // QuadPoints shall be ignored if any coordinate in the array lies outside + // the region specified by Rect. + PDRectangle rect = annotation.getRectangle(); + for (int i = 0; i < pathsArray.length / 2; ++i) + { + if (!rect.contains(pathsArray[i * 2], pathsArray[i * 2 + 1])) + { + LOG.warn("At least one /QuadPoints entry (" + + pathsArray[i * 2] + ";" + pathsArray[i * 2 + 1] + + ") is outside of rectangle, " + rect + + ", /QuadPoints are ignored and /Rect is used instead"); + pathsArray = null; + break; + } + } + } + + if (pathsArray == null) + { + // Convert rectangle coordinates as if it was a /QuadPoints entry + pathsArray = new float[8]; + pathsArray[0] = borderEdge.getLowerLeftX(); + pathsArray[1] = borderEdge.getLowerLeftY(); + pathsArray[2] = borderEdge.getUpperRightX(); + pathsArray[3] = borderEdge.getLowerLeftY(); + pathsArray[4] = borderEdge.getUpperRightX(); + pathsArray[5] = borderEdge.getUpperRightY(); + pathsArray[6] = borderEdge.getLowerLeftX(); + pathsArray[7] = borderEdge.getUpperRightY(); + } + + int of = 0; + while (of + 7 < pathsArray.length) + { + if (annotation.getBorderStyle() != null && + annotation.getBorderStyle().getStyle().equals(PDBorderStyleDictionary.STYLE_UNDERLINE)) + { + contentStream.moveTo(pathsArray[of], pathsArray[of + 1]); + contentStream.lineTo(pathsArray[of + 2], pathsArray[of + 3]); + } + else + { + contentStream.moveTo(pathsArray[of], pathsArray[of + 1]); + contentStream.lineTo(pathsArray[of + 2], pathsArray[of + 3]); + contentStream.lineTo(pathsArray[of + 4], pathsArray[of + 5]); + contentStream.lineTo(pathsArray[of + 6], pathsArray[of + 7]); + contentStream.closePath(); + } + of += 8; + } + + contentStream.drawShape(lineWidth, hasStroke, false); + } + catch (IOException e) + { + LOG.error(e); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated for a link annotation + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated for a link annotation + } + + /** + * Get the line with of the border. + * + * Get the width of the line used to draw a border around the annotation. + * This may either be specified by the annotation dictionaries Border + * setting or by the W entry in the BS border style dictionary. If both are + * missing the default width is 1. + * + * @return the line width + */ + // TODO: according to the PDF spec the use of the BS entry is annotation + // specific + // so we will leave that to be implemented by individual handlers. + // If at the end all annotations support the BS entry this can be handled + // here and removed from the individual handlers. + float getLineWidth() + { + PDAnnotationLink annotation = (PDAnnotationLink) getAnnotation(); + + PDBorderStyleDictionary bs = annotation.getBorderStyle(); + + if (bs != null) + { + return bs.getWidth(); + } + + COSArray borderCharacteristics = annotation.getBorder(); + if (borderCharacteristics.size() >= 3) + { + COSBase base = borderCharacteristics.getObject(2); + if (base instanceof COSNumber) + { + return ((COSNumber) base).floatValue(); + } + } + + return 1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java new file mode 100644 index 00000000000..21c5bccb5cb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java @@ -0,0 +1,228 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationPolygon; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderEffectDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; + +/** + * Handler to generate the polygon annotations appearance. + * + */ +public class PDPolygonAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDPolygonAppearanceHandler.class); + + public PDPolygonAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationPolygon annotation = (PDAnnotationPolygon) getAnnotation(); + float lineWidth = getLineWidth(); + PDRectangle rect = annotation.getRectangle(); + + // Adjust rectangle even if not empty + // CTAN-example-Annotations.pdf p2 + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + + float[][] pathArray = getPathArray(annotation); + if (pathArray == null) + { + return; + } + for (int i = 0; i < pathArray.length; ++i) + { + for (int j = 0; j < pathArray[i].length / 2; ++j) + { + float x = pathArray[i][j * 2]; + float y = pathArray[i][j * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + + rect.setLowerLeftX(Math.min(minX - lineWidth, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - lineWidth, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + lineWidth, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + lineWidth, rect.getUpperRightY())); + annotation.setRectangle(rect); + + try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream()) + { + boolean hasStroke = contentStream.setStrokingColorOnDemand(getColor()); + + boolean hasBackground = contentStream + .setNonStrokingColorOnDemand(annotation.getInteriorColor()); + + setOpacity(contentStream, annotation.getConstantOpacity()); + + contentStream.setBorderLine(lineWidth, annotation.getBorderStyle(), annotation.getBorder()); + + PDBorderEffectDictionary borderEffect = annotation.getBorderEffect(); + if (borderEffect != null && borderEffect.getStyle().equals(PDBorderEffectDictionary.STYLE_CLOUDY)) + { + CloudyBorder cloudyBorder = new CloudyBorder(contentStream, + borderEffect.getIntensity(), lineWidth, getRectangle()); + cloudyBorder.createCloudyPolygon(pathArray); + annotation.setRectangle(cloudyBorder.getRectangle()); + PDAppearanceStream appearanceStream = annotation.getNormalAppearanceStream(); + appearanceStream.setBBox(cloudyBorder.getBBox()); + appearanceStream.setMatrix(cloudyBorder.getMatrix()); + } + else + { + // Acrobat applies a padding to each side of the bbox so the line is + // completely within the bbox. + + for (int i = 0; i < pathArray.length; i++) + { + float[] pointsArray = pathArray[i]; + // first array shall be of size 2 and specify the moveto operator + if (i == 0 && pointsArray.length == 2) + { + contentStream.moveTo(pointsArray[0], pointsArray[1]); + } + else + { + // entries of length 2 shall be treated as lineto operator + if (pointsArray.length == 2) + { + contentStream.lineTo(pointsArray[0], pointsArray[1]); + } + else if (pointsArray.length == 6) + { + contentStream.curveTo(pointsArray[0], pointsArray[1], + pointsArray[2], pointsArray[3], + pointsArray[4], pointsArray[5]); + } + } + } + contentStream.closePath(); + } + contentStream.drawShape(lineWidth, hasStroke, hasBackground); + } + catch (IOException e) + { + LOG.error(e); + } + } + + private float[][] getPathArray(PDAnnotationPolygon annotation) + { + // PDF 2.0: Path takes priority over Vertices + float[][] pathArray = annotation.getPath(); + if (pathArray == null) + { + // convert PDF 1.* array to PDF 2.0 array + float[] verticesArray = annotation.getVertices(); + if (verticesArray == null) + { + return null; + } + int points = verticesArray.length / 2; + pathArray = new float[points][2]; + for (int i = 0; i < points; ++i) + { + pathArray[i][0] = verticesArray[i * 2]; + pathArray[i][1] = verticesArray[i * 2 + 1]; + } + } + return pathArray; + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated for a polygon annotation + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated for a polygon annotation + } + + /** + * Get the line with of the border. + * + * Get the width of the line used to draw a border around the annotation. + * This may either be specified by the annotation dictionaries Border + * setting or by the W entry in the BS border style dictionary. If both are + * missing the default width is 1. + * + * @return the line width + */ + // TODO: according to the PDF spec the use of the BS entry is annotation + // specific + // so we will leave that to be implemented by individual handlers. + // If at the end all annotations support the BS entry this can be handled + // here and removed from the individual handlers. + float getLineWidth() + { + PDAnnotationMarkup annotation = (PDAnnotationMarkup) getAnnotation(); + + PDBorderStyleDictionary bs = annotation.getBorderStyle(); + + if (bs != null) + { + return bs.getWidth(); + } + + COSArray borderCharacteristics = annotation.getBorder(); + if (borderCharacteristics.size() >= 3) + { + COSBase base = borderCharacteristics.getObject(2); + if (base instanceof COSNumber) + { + return ((COSNumber) base).floatValue(); + } + } + + return 1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolylineAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolylineAppearanceHandler.java new file mode 100644 index 00000000000..6bb61259938 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolylineAppearanceHandler.java @@ -0,0 +1,255 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationPolyline; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import static org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLine.LE_NONE; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.util.Matrix; + +/** + * Handler to generate the polyline annotations appearance. + * + */ +public class PDPolylineAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDPolylineAppearanceHandler.class); + + public PDPolylineAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationPolyline annotation = (PDAnnotationPolyline) getAnnotation(); + PDRectangle rect = annotation.getRectangle(); + float[] pathsArray = annotation.getVertices(); + if (pathsArray == null || pathsArray.length < 4) + { + return; + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + PDColor color = annotation.getColor(); + if (color == null || color.getComponents().length == 0 || Float.compare(ab.width, 0) == 0) + { + return; + } + + // Adjust rectangle even if not empty + // CTAN-example-Annotations.pdf and pdf_commenting_new.pdf p11 + //TODO in a class structure this should be overridable + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + // arrow length is 9 * width at about 30° => 10 * width seems to be enough + rect.setLowerLeftX(Math.min(minX - ab.width * 10, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - ab.width * 10, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + ab.width * 10, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + ab.width * 10, rect.getUpperRightY())); + annotation.setRectangle(rect); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + boolean hasBackground = cs.setNonStrokingColorOnDemand(annotation.getInteriorColor()); + setOpacity(cs, annotation.getConstantOpacity()); + boolean hasStroke = cs.setStrokingColorOnDemand(color); + + if (ab.dashArray != null) + { + cs.setLineDashPattern(ab.dashArray, 0); + } + cs.setLineWidth(ab.width); + + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + if (i == 0) + { + if (SHORT_STYLES.contains(annotation.getStartPointEndingStyle())) + { + // modify coordinate to shorten the segment + // https://stackoverflow.com/questions/7740507/extend-a-line-segment-a-specific-distance + float x1 = pathsArray[2]; + float y1 = pathsArray[3]; + float len = (float) (Math.sqrt(Math.pow(x - x1, 2) + Math.pow(y - y1, 2))); + if (Float.compare(len, 0) != 0) + { + x += (x1 - x) / len * ab.width; + y += (y1 - y) / len * ab.width; + } + } + cs.moveTo(x, y); + } + else + { + if (i == pathsArray.length / 2 - 1 && + SHORT_STYLES.contains(annotation.getEndPointEndingStyle())) + { + // modify coordinate to shorten the segment + // https://stackoverflow.com/questions/7740507/extend-a-line-segment-a-specific-distance + float x0 = pathsArray[pathsArray.length - 4]; + float y0 = pathsArray[pathsArray.length - 3]; + float len = (float) (Math.sqrt(Math.pow(x0 - x, 2) + Math.pow(y0 - y, 2))); + if (Float.compare(len, 0) != 0) + { + x -= (x - x0) / len * ab.width; + y -= (y - y0) / len * ab.width; + } + } + cs.lineTo(x, y); + } + } + cs.stroke(); + + // do a transform so that first and last "arms" are imagined flat, like in line handler + // the alternative would be to apply the transform to the LE shapes directly, + // which would be more work and produce code difficult to understand + + // paint the styles here and after polyline draw, to avoid line crossing a filled shape + if (!LE_NONE.equals(annotation.getStartPointEndingStyle())) + { + // check only needed to avoid q cm Q if LE_NONE + float x2 = pathsArray[2]; + float y2 = pathsArray[3]; + float x1 = pathsArray[0]; + float y1 = pathsArray[1]; + cs.saveGraphicsState(); + if (ANGLED_STYLES.contains(annotation.getStartPointEndingStyle())) + { + double angle = Math.atan2(y2 - y1, x2 - x1); + cs.transform(Matrix.getRotateInstance(angle, x1, y1)); + } + else + { + cs.transform(Matrix.getTranslateInstance(x1, y1)); + } + drawStyle(annotation.getStartPointEndingStyle(), cs, 0, 0, ab.width, hasStroke, hasBackground, false); + cs.restoreGraphicsState(); + } + + if (!LE_NONE.equals(annotation.getEndPointEndingStyle())) + { + // check only needed to avoid q cm Q if LE_NONE + float x1 = pathsArray[pathsArray.length - 4]; + float y1 = pathsArray[pathsArray.length - 3]; + float x2 = pathsArray[pathsArray.length - 2]; + float y2 = pathsArray[pathsArray.length - 1]; + // save / restore not needed because it's the last one + if (ANGLED_STYLES.contains(annotation.getEndPointEndingStyle())) + { + double angle = Math.atan2(y2 - y1, x2 - x1); + cs.transform(Matrix.getRotateInstance(angle, x2, y2)); + } + else + { + cs.transform(Matrix.getTranslateInstance(x2, y2)); + } + drawStyle(annotation.getEndPointEndingStyle(), cs, 0, 0, ab.width, hasStroke, hasBackground, true); + } + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated for a polyline annotation + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated for a polyline annotation + } + + //TODO DRY, this code is from polygonAppearanceHandler so it's double + + /** + * Get the line with of the border. + * + * Get the width of the line used to draw a border around the annotation. + * This may either be specified by the annotation dictionaries Border + * setting or by the W entry in the BS border style dictionary. If both are + * missing the default width is 1. + * + * @return the line width + */ + // TODO: according to the PDF spec the use of the BS entry is annotation + // specific + // so we will leave that to be implemented by individual handlers. + // If at the end all annotations support the BS entry this can be handled + // here and removed from the individual handlers. + float getLineWidth() + { + PDAnnotationMarkup annotation = (PDAnnotationMarkup) getAnnotation(); + + PDBorderStyleDictionary bs = annotation.getBorderStyle(); + + if (bs != null) + { + return bs.getWidth(); + } + + COSArray borderCharacteristics = annotation.getBorder(); + if (borderCharacteristics.size() >= 3) + { + COSBase base = borderCharacteristics.getObject(2); + if (base instanceof COSNumber) + { + return ((COSNumber) base).floatValue(); + } + } + + return 1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSoundAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSoundAppearanceHandler.java new file mode 100644 index 00000000000..5643d2f598f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSoundAppearanceHandler.java @@ -0,0 +1,56 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; + +public class PDSoundAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDSoundAppearanceHandler.class); + + public PDSoundAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + // TODO to be implemented + } + + @Override + public void generateRolloverAppearance() + { + // TODO to be implemented + } + + @Override + public void generateDownAppearance() + { + // TODO to be implemented + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquareAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquareAppearanceHandler.java new file mode 100644 index 00000000000..08addbbac64 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquareAppearanceHandler.java @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationSquare; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderEffectDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; + +/** + * Handler to generate the square annotations appearance. + * + */ +public class PDSquareAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDSquareAppearanceHandler.class); + + public PDSquareAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + float lineWidth = getLineWidth(); + PDAnnotationSquare annotation = (PDAnnotationSquare) getAnnotation(); + try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream()) + { + boolean hasStroke = contentStream.setStrokingColorOnDemand(getColor()); + boolean hasBackground = contentStream + .setNonStrokingColorOnDemand(annotation.getInteriorColor()); + + setOpacity(contentStream, annotation.getConstantOpacity()); + + contentStream.setBorderLine(lineWidth, annotation.getBorderStyle(), annotation.getBorder()); + PDBorderEffectDictionary borderEffect = annotation.getBorderEffect(); + + if (borderEffect != null && borderEffect.getStyle().equals(PDBorderEffectDictionary.STYLE_CLOUDY)) + { + CloudyBorder cloudyBorder = new CloudyBorder(contentStream, + borderEffect.getIntensity(), lineWidth, getRectangle()); + cloudyBorder.createCloudyRectangle(annotation.getRectDifference()); + annotation.setRectangle(cloudyBorder.getRectangle()); + annotation.setRectDifference(cloudyBorder.getRectDifference()); + PDAppearanceStream appearanceStream = annotation.getNormalAppearanceStream(); + appearanceStream.setBBox(cloudyBorder.getBBox()); + appearanceStream.setMatrix(cloudyBorder.getMatrix()); + } + else + { + PDRectangle borderBox = handleBorderBox(annotation, lineWidth); + + contentStream.addRect(borderBox.getLowerLeftX(), borderBox.getLowerLeftY(), + borderBox.getWidth(), borderBox.getHeight()); + } + + contentStream.drawShape(lineWidth, hasStroke, hasBackground); + } + catch (IOException e) + { + LOG.error(e); + } + } + + @Override + public void generateRolloverAppearance() + { + // TODO to be implemented + } + + @Override + public void generateDownAppearance() + { + // TODO to be implemented + } + + /** + * Get the line with of the border. + * + * Get the width of the line used to draw a border around the annotation. + * This may either be specified by the annotation dictionaries Border + * setting or by the W entry in the BS border style dictionary. If both are + * missing the default width is 1. + * + * @return the line width + */ + // TODO: according to the PDF spec the use of the BS entry is annotation + // specific + // so we will leave that to be implemented by individual handlers. + // If at the end all annotations support the BS entry this can be handled + // here and removed from the individual handlers. + float getLineWidth() + { + PDAnnotationMarkup annotation = (PDAnnotationMarkup) getAnnotation(); + + PDBorderStyleDictionary bs = annotation.getBorderStyle(); + + if (bs != null) + { + return bs.getWidth(); + } + + COSArray borderCharacteristics = annotation.getBorder(); + if (borderCharacteristics.size() >= 3) + { + COSBase base = borderCharacteristics.getObject(2); + if (base instanceof COSNumber) + { + return ((COSNumber) base).floatValue(); + } + } + + return 1; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquigglyAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquigglyAppearanceHandler.java new file mode 100644 index 00000000000..7a54d95d23a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquigglyAppearanceHandler.java @@ -0,0 +1,181 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.awt.geom.AffineTransform; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.PDFormContentStream; +import org.apache.pdfbox.pdmodel.PDPatternContentStream; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationSquiggly; +import org.apache.pdfbox.util.Matrix; + +/** + * + */ +public class PDSquigglyAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDSquigglyAppearanceHandler.class); + + public PDSquigglyAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationSquiggly annotation = (PDAnnotationSquiggly) getAnnotation(); + PDRectangle rect = annotation.getRectangle(); + float[] pathsArray = annotation.getQuadPoints(); + if (pathsArray == null) + { + return; + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + PDColor color = annotation.getColor(); + if (color == null || color.getComponents().length == 0) + { + return; + } + if (Float.compare(ab.width, 0) == 0) + { + // value found in adobe reader + ab.width = 1.5f; + } + + // Adjust rectangle even if not empty, see PLPDF.com-MarkupAnnotations.pdf + //TODO in a class structure this should be overridable + // this is similar to polyline but different data type + // all coordinates (unlike painting) are used because I'm lazy + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + rect.setLowerLeftX(Math.min(minX - ab.width / 2, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - ab.width / 2, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + ab.width / 2, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + ab.width / 2, rect.getUpperRightY())); + annotation.setRectangle(rect); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + setOpacity(cs, annotation.getConstantOpacity()); + + cs.setStrokingColor(color); + + //TODO we ignore dash pattern and line width for now. Do they have any effect? + + + // quadpoints spec is incorrect + // https://stackoverflow.com/questions/9855814/pdf-spec-vs-acrobat-creation-quadpoints + for (int i = 0; i < pathsArray.length / 8; ++i) + { + // Adobe uses a fixed pattern that assumes a height of 40, and it transforms to that height + // horizontally and the same / 1.8 vertically. + // translation apparently based on bottom left, but slightly different in Adobe + //TODO what if the annotation is not horizontal? + float height = pathsArray[i * 8 + 1] - pathsArray[i * 8 + 5]; + cs.transform(new Matrix(height / 40f, 0, 0, height / 40f / 1.8f, pathsArray[i * 8 + 4], pathsArray[i * 8 + 5])); + + // Create form, BBox is mostly fixed, except for the horizontal size which is + // horizontal size divided by the horizontal transform factor from above + // (almost) + PDFormXObject form = new PDFormXObject(new COSStream()); + form.setBBox(new PDRectangle(-0.5f, -0.5f, (pathsArray[i * 8 + 2] - pathsArray[i * 8]) / height * 40f + 0.5f, 13)); + form.setResources(new PDResources()); + form.setMatrix(AffineTransform.getTranslateInstance(0.5f, 0.5f)); + cs.drawForm(form); + try (PDFormContentStream formCS = new PDFormContentStream(form)) + { + PDTilingPattern pattern = new PDTilingPattern(); + pattern.setBBox(new PDRectangle(0, 0, 10, 12)); + pattern.setXStep(10); + pattern.setYStep(13); + pattern.setTilingType(PDTilingPattern.TILING_CONSTANT_SPACING_FASTER_TILING); + pattern.setPaintType(PDTilingPattern.PAINT_UNCOLORED); + try (PDPatternContentStream patternCS = new PDPatternContentStream(pattern)) + { + // from Adobe + patternCS.setLineCapStyle(1); + patternCS.setLineJoinStyle(1); + patternCS.setLineWidth(1); + patternCS.setMiterLimit(10); + patternCS.moveTo(0, 1); + patternCS.lineTo(5, 11); + patternCS.lineTo(10, 1); + patternCS.stroke(); + } + COSName patternName = form.getResources().add(pattern); + PDColorSpace patternColorSpace = new PDPattern(null, PDDeviceRGB.INSTANCE); + PDColor patternColor = new PDColor(color.getComponents(), patternName, patternColorSpace); + formCS.setNonStrokingColor(patternColor); + + // With Adobe, the horizontal size is slightly different, don't know why + formCS.addRect(0, 0, (pathsArray[i * 8 + 2] - pathsArray[i * 8]) / height * 40f, 12); + formCS.fill(); + } + } + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDStrikeoutAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDStrikeoutAppearanceHandler.java new file mode 100644 index 00000000000..a22d3def9be --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDStrikeoutAppearanceHandler.java @@ -0,0 +1,154 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationStrikeout; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; + +/** + * + */ +public class PDStrikeoutAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDStrikeoutAppearanceHandler.class); + + public PDStrikeoutAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationStrikeout annotation = (PDAnnotationStrikeout) getAnnotation(); + PDRectangle rect = annotation.getRectangle(); + float[] pathsArray = annotation.getQuadPoints(); + if (pathsArray == null) + { + return; + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + PDColor color = annotation.getColor(); + if (color == null || color.getComponents().length == 0) + { + return; + } + if (Float.compare(ab.width, 0) == 0) + { + // value found in adobe reader + ab.width = 1.5f; + } + + // Adjust rectangle even if not empty, see PLPDF.com-MarkupAnnotations.pdf + //TODO in a class structure this should be overridable + // this is similar to polyline but different data type + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + rect.setLowerLeftX(Math.min(minX - ab.width / 2, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - ab.width / 2, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + ab.width / 2, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + ab.width / 2, rect.getUpperRightY())); + annotation.setRectangle(rect); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + setOpacity(cs, annotation.getConstantOpacity()); + + cs.setStrokingColor(color); + if (ab.dashArray != null) + { + cs.setLineDashPattern(ab.dashArray, 0); + } + cs.setLineWidth(ab.width); + + // spec is incorrect + // https://stackoverflow.com/questions/9855814/pdf-spec-vs-acrobat-creation-quadpoints + for (int i = 0; i < pathsArray.length / 8; ++i) + { + // get mid point between bounds, substract the line width to approximate what Adobe is doing + // See e.g. CTAN-example-Annotations.pdf and PLPDF.com-MarkupAnnotations.pdf + // and https://bugs.ghostscript.com/show_bug.cgi?id=693664 + // do the math for diagonal annotations with this weird old trick: + // https://stackoverflow.com/questions/7740507/extend-a-line-segment-a-specific-distance + float len0 = (float) (Math.sqrt(Math.pow(pathsArray[i * 8] - pathsArray[i * 8 + 4], 2) + + Math.pow(pathsArray[i * 8 + 1] - pathsArray[i * 8 + 5], 2))); + float x0 = pathsArray[i * 8 + 4]; + float y0 = pathsArray[i * 8 + 5]; + if (Float.compare(len0, 0) != 0) + { + // only if both coordinates are not identical to avoid divide by zero + x0 += (pathsArray[i * 8] - pathsArray[i * 8 + 4]) / len0 * (len0 / 2 - ab.width); + y0 += (pathsArray[i * 8 + 1] - pathsArray[i * 8 + 5]) / len0 * (len0 / 2 - ab.width); + } + float len1 = (float) (Math.sqrt(Math.pow(pathsArray[i * 8 + 2] - pathsArray[i * 8 + 6], 2) + + Math.pow(pathsArray[i * 8 + 3] - pathsArray[i * 8 + 7], 2))); + float x1 = pathsArray[i * 8 + 6]; + float y1 = pathsArray[i * 8 + 7]; + if (Float.compare(len1, 0) != 0) + { + // only if both coordinates are not identical to avoid divide by zero + x1 += (pathsArray[i * 8 + 2] - pathsArray[i * 8 + 6]) / len1 * (len1 / 2 - ab.width); + y1 += (pathsArray[i * 8 + 3] - pathsArray[i * 8 + 7]) / len1 * (len1 / 2 - ab.width); + } + cs.moveTo(x0, y0); + cs.lineTo(x1, y1); + } + cs.stroke(); + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java new file mode 100644 index 00000000000..eb5ac2f3a50 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDTextAppearanceHandler.java @@ -0,0 +1,746 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.PathIterator; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationText; +import org.apache.pdfbox.util.Matrix; + +/** + * + * @author Tilman Hausherr + */ +public class PDTextAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDTextAppearanceHandler.class); + + private static final Set SUPPORTED_NAMES = new HashSet<>(); + + static + { + SUPPORTED_NAMES.add(PDAnnotationText.NAME_NOTE); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_INSERT); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_CROSS); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_HELP); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_CIRCLE); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_PARAGRAPH); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_NEW_PARAGRAPH); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_CHECK); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_STAR); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_RIGHT_ARROW); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_RIGHT_POINTER); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_CROSS_HAIRS); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_UP_ARROW); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_UP_LEFT_ARROW); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_COMMENT); + SUPPORTED_NAMES.add(PDAnnotationText.NAME_KEY); + } + + public PDTextAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationText annotation = (PDAnnotationText) getAnnotation(); + if (!SUPPORTED_NAMES.contains(annotation.getName())) + { + return; + } + + try (PDAppearanceContentStream contentStream = getNormalAppearanceAsContentStream()) + { + PDColor bgColor = getColor(); + if (bgColor == null) + { + // White is used by Adobe when /C entry is missing + contentStream.setNonStrokingColor(1f); + } + else + { + contentStream.setNonStrokingColor(bgColor); + } + // stroking color is always black which is the PDF default + + setOpacity(contentStream, annotation.getConstantOpacity()); + + switch (annotation.getName()) + { + case PDAnnotationText.NAME_NOTE: + drawNote(annotation, contentStream); + break; + case PDAnnotationText.NAME_CROSS: + drawCross(annotation, contentStream); + break; + case PDAnnotationText.NAME_CIRCLE: + drawCircles(annotation, contentStream); + break; + case PDAnnotationText.NAME_INSERT: + drawInsert(annotation, contentStream); + break; + case PDAnnotationText.NAME_HELP: + drawHelp(annotation, contentStream); + break; + case PDAnnotationText.NAME_PARAGRAPH: + drawParagraph(annotation, contentStream); + break; + case PDAnnotationText.NAME_NEW_PARAGRAPH: + drawNewParagraph(annotation, contentStream); + break; + case PDAnnotationText.NAME_STAR: + drawStar(annotation, contentStream); + break; + case PDAnnotationText.NAME_CHECK: + drawCheck(annotation, contentStream); + break; + case PDAnnotationText.NAME_RIGHT_ARROW: + drawRightArrow(annotation, contentStream); + break; + case PDAnnotationText.NAME_RIGHT_POINTER: + drawRightPointer(annotation, contentStream); + break; + case PDAnnotationText.NAME_CROSS_HAIRS: + drawCrossHairs(annotation, contentStream); + break; + case PDAnnotationText.NAME_UP_ARROW: + drawUpArrow(annotation, contentStream); + break; + case PDAnnotationText.NAME_UP_LEFT_ARROW: + drawUpLeftArrow(annotation, contentStream); + break; + case PDAnnotationText.NAME_COMMENT: + drawComment(annotation, contentStream); + break; + case PDAnnotationText.NAME_KEY: + drawKey(annotation, contentStream); + break; + default: + break; + } + } + catch (IOException e) + { + LOG.error(e); + } + } + + private PDRectangle adjustRectAndBBox(PDAnnotationText annotation, float width, float height) + { + // For /Note (other types have different values): + // Adobe takes the left upper bound as anchor, and adjusts the rectangle to 18 x 20. + // Observed with files 007071.pdf, 038785.pdf, 038787.pdf, + // but not with 047745.pdf p133 and 084374.pdf p48, both have the NoZoom flag. + // there the BBox is also set to fixed values, but the rectangle is left untouched. + // When no flags are there, Adobe sets /F 24 = NoZoom NoRotate. + + PDRectangle rect = getRectangle(); + PDRectangle bbox; + if (!annotation.isNoZoom()) + { + rect.setUpperRightX(rect.getLowerLeftX() + width); + rect.setLowerLeftY(rect.getUpperRightY() - height); + annotation.setRectangle(rect); + } + if (!annotation.getCOSObject().containsKey(COSName.F)) + { + // We set these flags because Adobe does so, but PDFBox doesn't support them when rendering. + annotation.setNoRotate(true); + annotation.setNoZoom(true); + } + bbox = new PDRectangle(width, height); + annotation.getNormalAppearanceStream().setBBox(bbox); + return bbox; + } + + private void drawNote(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 18, 20); + contentStream.setMiterLimit(4); + + // get round edge the easy way. Adobe uses 4 lines with 4 arcs of radius 0.785 which is bigger. + contentStream.setLineJoinStyle(1); + + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.61f); // value from Adobe + contentStream.addRect(1, 1, bbox.getWidth() - 2, bbox.getHeight() - 2); + contentStream.moveTo(bbox.getWidth() / 4, bbox.getHeight() / 7 * 2); + contentStream.lineTo(bbox.getWidth() * 3 / 4 - 1, bbox.getHeight() / 7 * 2); + contentStream.moveTo(bbox.getWidth() / 4, bbox.getHeight() / 7 * 3); + contentStream.lineTo(bbox.getWidth() * 3 / 4 - 1, bbox.getHeight() / 7 * 3); + contentStream.moveTo(bbox.getWidth() / 4, bbox.getHeight() / 7 * 4); + contentStream.lineTo(bbox.getWidth() * 3 / 4 - 1, bbox.getHeight() / 7 * 4); + contentStream.moveTo(bbox.getWidth() / 4, bbox.getHeight() / 7 * 5); + contentStream.lineTo(bbox.getWidth() * 3 / 4 - 1, bbox.getHeight() / 7 * 5); + contentStream.fillAndStroke(); + } + + private void drawCircles(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 20); + + // strategy used by Adobe: + // 1) add small circle in white using /ca /CA 0.6 and width 1 + // 2) fill + // 3) add small circle in one direction + // 4) add large circle in other direction + // 5) stroke + fill + // with square width 20 small r = 6.36, large r = 9.756 + + float smallR = 6.36f; + float largeR = 9.756f; + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.saveGraphicsState(); + contentStream.setLineWidth(1); + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setAlphaSourceFlag(false); + gs.setStrokingAlphaConstant(0.6f); + gs.setNonStrokingAlphaConstant(0.6f); + gs.setBlendMode(BlendMode.NORMAL); + contentStream.setGraphicsStateParameters(gs); + contentStream.setNonStrokingColor(1f); + drawCircle(contentStream, bbox.getWidth() / 2, bbox.getHeight() / 2, smallR); + contentStream.fill(); + contentStream.restoreGraphicsState(); + + contentStream.setLineWidth(0.59f); // value from Adobe + drawCircle(contentStream, bbox.getWidth() / 2, bbox.getHeight() / 2, smallR); + drawCircle2(contentStream, bbox.getWidth() / 2, bbox.getHeight() / 2, largeR); + contentStream.fillAndStroke(); + } + + private void drawInsert(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 17, 20); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(0); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + contentStream.moveTo(bbox.getWidth() / 2 - 1, bbox.getHeight() - 2); + contentStream.lineTo(1, 1); + contentStream.lineTo(bbox.getWidth() - 2, 1); + contentStream.closeAndFillAndStroke(); + } + + private void drawCross(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 19, 19); + + // should be a square, but who knows... + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + // small = offset nearest bbox edge + // large = offset second nearest bbox edge + float small = min / 10; + float large = min / 5; + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + contentStream.moveTo(small, large); + contentStream.lineTo(large, small); + contentStream.lineTo(min / 2, min / 2 - small); + contentStream.lineTo(min - large, small); + contentStream.lineTo(min - small, large); + contentStream.lineTo(min / 2 + small, min / 2); + contentStream.lineTo(min - small, min - large); + contentStream.lineTo(min - large, min - small); + contentStream.lineTo(min / 2, min / 2 + small); + contentStream.lineTo(large, min - small); + contentStream.lineTo(small, min - large); + contentStream.lineTo(min / 2 - small, min / 2); + contentStream.closeAndFillAndStroke(); + + // alternatively, this could also be drawn with Zapf Dingbats "a21" + // see DrawStar() + } + + private void drawHelp(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 20); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + // Adobe first fills a white circle with CA ca 0.6, so do we + contentStream.saveGraphicsState(); + contentStream.setLineWidth(1); + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setAlphaSourceFlag(false); + gs.setStrokingAlphaConstant(0.6f); + gs.setNonStrokingAlphaConstant(0.6f); + gs.setBlendMode(BlendMode.NORMAL); + contentStream.setGraphicsStateParameters(gs); + contentStream.setNonStrokingColor(1f); + drawCircle2(contentStream, min / 2, min / 2, min / 2 - 1); + contentStream.fill(); + contentStream.restoreGraphicsState(); + + contentStream.saveGraphicsState(); + // rescale so that "?" fits into circle and move "?" to circle center + // values gathered by trial and error + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 2.25f, 0.001f * min / 2.25f)); + contentStream.transform(Matrix.getTranslateInstance(500, 375)); + + // we get the shape of an Helvetica bold "?" and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.HELVETICA_BOLD.getPath("question"); + addPath(contentStream, path); + contentStream.restoreGraphicsState(); + // draw the outer circle counterclockwise to fill area between circle and "?" + drawCircle2(contentStream, min / 2, min / 2, min / 2 - 1); + contentStream.fillAndStroke(); + } + + private void drawParagraph(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 20); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + // Adobe first fills a white circle with CA ca 0.6, so do we + contentStream.saveGraphicsState(); + contentStream.setLineWidth(1); + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setAlphaSourceFlag(false); + gs.setStrokingAlphaConstant(0.6f); + gs.setNonStrokingAlphaConstant(0.6f); + gs.setBlendMode(BlendMode.NORMAL); + contentStream.setGraphicsStateParameters(gs); + contentStream.setNonStrokingColor(1f); + drawCircle2(contentStream, min / 2, min / 2, min / 2 - 1); + contentStream.fill(); + contentStream.restoreGraphicsState(); + + contentStream.saveGraphicsState(); + // rescale so that "?" fits into circle and move "?" to circle center + // values gathered by trial and error + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 3, 0.001f * min / 3)); + contentStream.transform(Matrix.getTranslateInstance(850, 900)); + + // we get the shape of an Helvetica "?" and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.HELVETICA.getPath("paragraph"); + addPath(contentStream, path); + contentStream.restoreGraphicsState(); + contentStream.fillAndStroke(); + drawCircle(contentStream, min / 2, min / 2, min / 2 - 1); + contentStream.stroke(); + } + + private void drawNewParagraph(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + adjustRectAndBBox(annotation, 13, 20); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(0); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + // small triangle (values from Adobe) + contentStream.moveTo(6.4995f, 20); + contentStream.lineTo(0.295f, 7.287f); + contentStream.lineTo(12.705f, 7.287f); + contentStream.closeAndFillAndStroke(); + + // rescale and translate so that "NP" fits below the triangle + // values gathered by trial and error + contentStream.transform(Matrix.getScaleInstance(0.001f * 4, 0.001f * 4)); + contentStream.transform(Matrix.getTranslateInstance(200, 0)); + addPath(contentStream, PDType1Font.HELVETICA_BOLD.getPath("N")); + contentStream.transform(Matrix.getTranslateInstance(1300, 0)); + addPath(contentStream, PDType1Font.HELVETICA_BOLD.getPath("P")); + contentStream.fill(); + } + + private void drawStar(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 19); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 0.8f, 0.001f * min / 0.8f)); + + // we get the shape of a Zapf Dingbats star (0x2605) and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.ZAPF_DINGBATS.getPath("a35"); + addPath(contentStream, path); + contentStream.fillAndStroke(); + } + + //TODO this is mostly identical to drawStar, except for scale, translation and symbol + // maybe use a table with all values and draw from there + // this could also optionally use outer circle + private void drawCheck(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 19); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 0.8f, 0.001f * min / 0.8f)); + contentStream.transform(Matrix.getTranslateInstance(0, 50)); + + // we get the shape of a Zapf Dingbats check (0x2714) and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.ZAPF_DINGBATS.getPath("a20"); + addPath(contentStream, path); + contentStream.fillAndStroke(); + } + + //TODO this is mostly identical to drawStar, except for scale, translation and symbol + private void drawRightPointer(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 17); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 0.8f, 0.001f * min / 0.8f)); + contentStream.transform(Matrix.getTranslateInstance(0, 50)); + + // we get the shape of a Zapf Dingbats right pointer (0x27A4) and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.ZAPF_DINGBATS.getPath("a174"); + addPath(contentStream, path); + contentStream.fillAndStroke(); + } + + private void drawCrossHairs(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 20); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(0); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.61f); // value from Adobe + + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 1.5f, 0.001f * min / 1.5f)); + contentStream.transform(Matrix.getTranslateInstance(0, 50)); + + // we get the shape of a Symbol crosshair (0x2295) and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.SYMBOL.getPath("circleplus"); + addPath(contentStream, path); + contentStream.fillAndStroke(); + } + + private void drawUpArrow(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + adjustRectAndBBox(annotation, 17, 20); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + contentStream.moveTo(1, 7); + contentStream.lineTo(5, 7); + contentStream.lineTo(5, 1); + contentStream.lineTo(12, 1); + contentStream.lineTo(12, 7); + contentStream.lineTo(16, 7); + contentStream.lineTo(8.5f, 19); + contentStream.closeAndFillAndStroke(); + } + + private void drawUpLeftArrow(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + adjustRectAndBBox(annotation, 17, 17); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + contentStream.transform(Matrix.getRotateInstance(Math.toRadians(45), 8, -4)); + + contentStream.moveTo(1, 7); + contentStream.lineTo(5, 7); + contentStream.lineTo(5, 1); + contentStream.lineTo(12, 1); + contentStream.lineTo(12, 7); + contentStream.lineTo(16, 7); + contentStream.lineTo(8.5f, 19); + contentStream.closeAndFillAndStroke(); + } + + private void drawRightArrow(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + PDRectangle bbox = adjustRectAndBBox(annotation, 20, 20); + + float min = Math.min(bbox.getWidth(), bbox.getHeight()); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(0.59f); // value from Adobe + + // Adobe first fills a white circle with CA ca 0.6, so do we + contentStream.saveGraphicsState(); + contentStream.setLineWidth(1); + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setAlphaSourceFlag(false); + gs.setStrokingAlphaConstant(0.6f); + gs.setNonStrokingAlphaConstant(0.6f); + gs.setBlendMode(BlendMode.NORMAL); + contentStream.setGraphicsStateParameters(gs); + contentStream.setNonStrokingColor(1f); + drawCircle2(contentStream, min / 2, min / 2, min / 2 - 1); + contentStream.fill(); + contentStream.restoreGraphicsState(); + + contentStream.saveGraphicsState(); + // rescale so that the glyph fits into circle and move it to circle center + // values gathered by trial and error + contentStream.transform(Matrix.getScaleInstance(0.001f * min / 1.3f, 0.001f * min / 1.3f)); + contentStream.transform(Matrix.getTranslateInstance(200, 300)); + + // we get the shape of a Zapf Dingbats right arrow (0x2794) and use that one. + // Adobe uses a different font (which one?), or created the shape from scratch. + GeneralPath path = PDType1Font.ZAPF_DINGBATS.getPath("a160"); + addPath(contentStream, path); + contentStream.restoreGraphicsState(); + // surprisingly, this one not counterclockwise. + drawCircle(contentStream, min / 2, min / 2, min / 2 - 1); + contentStream.fillAndStroke(); + } + + private void drawComment(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + adjustRectAndBBox(annotation, 18, 18); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(200); + + // Adobe first fills a white rectangle with CA ca 0.6, so do we + contentStream.saveGraphicsState(); + contentStream.setLineWidth(1); + PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); + gs.setAlphaSourceFlag(false); + gs.setStrokingAlphaConstant(0.6f); + gs.setNonStrokingAlphaConstant(0.6f); + gs.setBlendMode(BlendMode.NORMAL); + contentStream.setGraphicsStateParameters(gs); + contentStream.setNonStrokingColor(1f); + contentStream.addRect(0.3f, 0.3f, 18-0.6f, 18-0.6f); + contentStream.fill(); + contentStream.restoreGraphicsState(); + + contentStream.transform(Matrix.getScaleInstance(0.003f, 0.003f)); + contentStream.transform(Matrix.getTranslateInstance(500, -300)); + + // outer shape was gathered from Font Awesome by "printing" comment.svg + // into a PDF and looking at the content stream + contentStream.moveTo(2549, 5269); + contentStream.curveTo(1307, 5269, 300, 4451, 300, 3441); + contentStream.curveTo(300, 3023, 474, 2640, 764, 2331); + contentStream.curveTo(633, 1985, 361, 1691, 357, 1688); + contentStream.curveTo(299, 1626, 283, 1537, 316, 1459); + contentStream.curveTo(350, 1382, 426, 1332, 510, 1332); + contentStream.curveTo(1051, 1332, 1477, 1558, 1733, 1739); + contentStream.curveTo(1987, 1659, 2261, 1613, 2549, 1613); + contentStream.curveTo(3792, 1613, 4799, 2431, 4799, 3441); + contentStream.curveTo(4799, 4451, 3792, 5269, 2549, 5269); + contentStream.closePath(); + + // can't use addRect: if we did that, we wouldn't get the donut effect + contentStream.moveTo(0.3f / 0.003f - 500, 0.3f / 0.003f + 300); + contentStream.lineTo(0.3f / 0.003f - 500, 0.3f / 0.003f + 300 + 17.4f / 0.003f); + contentStream.lineTo(0.3f / 0.003f - 500 + 17.4f / 0.003f, 0.3f / 0.003f + 300 + 17.4f / 0.003f); + contentStream.lineTo(0.3f / 0.003f - 500 + 17.4f / 0.003f, 0.3f / 0.003f + 300); + + contentStream.closeAndFillAndStroke(); + } + + private void drawKey(PDAnnotationText annotation, final PDAppearanceContentStream contentStream) + throws IOException + { + adjustRectAndBBox(annotation, 13, 18); + + contentStream.setMiterLimit(4); + contentStream.setLineJoinStyle(1); + contentStream.setLineCapStyle(0); + contentStream.setLineWidth(200); + + contentStream.transform(Matrix.getScaleInstance(0.003f, 0.003f)); + contentStream.transform(Matrix.getRotateInstance(Math.toRadians(45), 2500, -800)); + + // shape was gathered from Font Awesome by "printing" key.svg into a PDF + // and looking at the content stream + contentStream.moveTo(4799, 4004); + contentStream.curveTo(4799, 3149, 4107, 2457, 3253, 2457); + contentStream.curveTo(3154, 2457, 3058, 2466, 2964, 2484); + contentStream.lineTo(2753, 2246); + contentStream.curveTo(2713, 2201, 2656, 2175, 2595, 2175); + contentStream.lineTo(2268, 2175); + contentStream.lineTo(2268, 1824); + contentStream.curveTo(2268, 1707, 2174, 1613, 2057, 1613); + contentStream.lineTo(1706, 1613); + contentStream.lineTo(1706, 1261); + contentStream.curveTo(1706, 1145, 1611, 1050, 1495, 1050); + contentStream.lineTo(510, 1050); + contentStream.curveTo(394, 1050, 300, 1145, 300, 1261); + contentStream.lineTo(300, 1947); + contentStream.curveTo(300, 2003, 322, 2057, 361, 2097); + contentStream.lineTo(1783, 3519); + contentStream.curveTo(1733, 3671, 1706, 3834, 1706, 4004); + contentStream.curveTo(1706, 4858, 2398, 5550, 3253, 5550); + contentStream.curveTo(4109, 5550, 4799, 4860, 4799, 4004); + contentStream.closePath(); + contentStream.moveTo(3253, 4425); + contentStream.curveTo(3253, 4192, 3441, 4004, 3674, 4004); + contentStream.curveTo(3907, 4004, 4096, 4192, 4096, 4425); + contentStream.curveTo(4096, 4658, 3907, 4847, 3674, 4847); + contentStream.curveTo(3441, 4847, 3253, 4658, 3253, 4425); + contentStream.fillAndStroke(); + } + + private void addPath(final PDAppearanceContentStream contentStream, GeneralPath path) throws IOException + { + double curX = 0; + double curY = 0; + PathIterator it = path.getPathIterator(new AffineTransform()); + double[] coords = new double[6]; + while (!it.isDone()) + { + int type = it.currentSegment(coords); + switch (type) + { + case PathIterator.SEG_CLOSE: + contentStream.closePath(); + break; + case PathIterator.SEG_CUBICTO: + contentStream.curveTo((float) coords[0], (float) coords[1], (float) coords[2], + (float) coords[3], (float) coords[4], (float) coords[5]); + curX = coords[4]; + curY = coords[5]; + break; + case PathIterator.SEG_QUADTO: + // Convert quadratic Bézier curve to cubic + // https://fontforge.github.io/bezier.html + // CP1 = QP0 + 2/3 *(QP1-QP0) + // CP2 = QP2 + 2/3 *(QP1-QP2) + double cp1x = curX + 2d / 3d * (coords[0] - curX); + double cp1y = curY + 2d / 3d * (coords[1] - curY); + double cp2x = coords[2] + 2d / 3d * (coords[0] - coords[2]); + double cp2y = coords[3] + 2d / 3d * (coords[1] - coords[3]); + contentStream.curveTo((float) cp1x, (float) cp1y, + (float) cp2x, (float) cp2y, + (float) coords[2], (float) coords[3]); + curX = coords[2]; + curY = coords[3]; + break; + case PathIterator.SEG_LINETO: + contentStream.lineTo((float) coords[0], (float) coords[1]); + curX = coords[0]; + curY = coords[1]; + break; + case PathIterator.SEG_MOVETO: + contentStream.moveTo((float) coords[0], (float) coords[1]); + curX = coords[0]; + curY = coords[1]; + break; + default: + break; + } + it.next(); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDUnderlineAppearanceHandler.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDUnderlineAppearanceHandler.java new file mode 100644 index 00000000000..d7c4e284a8e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDUnderlineAppearanceHandler.java @@ -0,0 +1,153 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.annotation.handlers; + +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationUnderline; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; + +/** + * + */ +public class PDUnderlineAppearanceHandler extends PDAbstractAppearanceHandler +{ + private static final Log LOG = LogFactory.getLog(PDUnderlineAppearanceHandler.class); + + public PDUnderlineAppearanceHandler(PDAnnotation annotation) + { + super(annotation); + } + + @Override + public void generateAppearanceStreams() + { + generateNormalAppearance(); + generateRolloverAppearance(); + generateDownAppearance(); + } + + @Override + public void generateNormalAppearance() + { + PDAnnotationUnderline annotation = (PDAnnotationUnderline) getAnnotation(); + PDRectangle rect = annotation.getRectangle(); + float[] pathsArray = annotation.getQuadPoints(); + if (pathsArray == null) + { + return; + } + AnnotationBorder ab = AnnotationBorder.getAnnotationBorder(annotation, annotation.getBorderStyle()); + PDColor color = annotation.getColor(); + if (color == null || color.getComponents().length == 0) + { + return; + } + if (Float.compare(ab.width, 0) == 0) + { + // value found in adobe reader + ab.width = 1.5f; + } + + // Adjust rectangle even if not empty, see PLPDF.com-MarkupAnnotations.pdf + //TODO in a class structure this should be overridable + // this is similar to polyline but different data type + // all coordinates (unlike painting) are used because I'm lazy + float minX = Float.MAX_VALUE; + float minY = Float.MAX_VALUE; + float maxX = Float.MIN_VALUE; + float maxY = Float.MIN_VALUE; + for (int i = 0; i < pathsArray.length / 2; ++i) + { + float x = pathsArray[i * 2]; + float y = pathsArray[i * 2 + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + rect.setLowerLeftX(Math.min(minX - ab.width / 2, rect.getLowerLeftX())); + rect.setLowerLeftY(Math.min(minY - ab.width / 2, rect.getLowerLeftY())); + rect.setUpperRightX(Math.max(maxX + ab.width / 2, rect.getUpperRightX())); + rect.setUpperRightY(Math.max(maxY + ab.width / 2, rect.getUpperRightY())); + annotation.setRectangle(rect); + + try (PDAppearanceContentStream cs = getNormalAppearanceAsContentStream()) + { + setOpacity(cs, annotation.getConstantOpacity()); + + cs.setStrokingColor(color); + if (ab.dashArray != null) + { + cs.setLineDashPattern(ab.dashArray, 0); + } + cs.setLineWidth(ab.width); + + // spec is incorrect + // https://stackoverflow.com/questions/9855814/pdf-spec-vs-acrobat-creation-quadpoints + for (int i = 0; i < pathsArray.length / 8; ++i) + { + // Adobe doesn't use the lower coordinate for the line, it uses lower + delta / 7. + // do the math for diagonal annotations with this weird old trick: + // https://stackoverflow.com/questions/7740507/extend-a-line-segment-a-specific-distance + float len0 = (float) (Math.sqrt(Math.pow(pathsArray[i * 8] - pathsArray[i * 8 + 4], 2) + + Math.pow(pathsArray[i * 8 + 1] - pathsArray[i * 8 + 5], 2))); + float x0 = pathsArray[i * 8 + 4]; + float y0 = pathsArray[i * 8 + 5]; + if (Float.compare(len0, 0) != 0) + { + // only if both coordinates are not identical to avoid divide by zero + x0 += (pathsArray[i * 8] - pathsArray[i * 8 + 4]) / len0 * len0 / 7; + y0 += (pathsArray[i * 8 + 1] - pathsArray[i * 8 + 5]) / len0 * (len0 / 7); + } + float len1 = (float) (Math.sqrt(Math.pow(pathsArray[i * 8 + 2] - pathsArray[i * 8 + 6], 2) + + Math.pow(pathsArray[i * 8 + 3] - pathsArray[i * 8 + 7], 2))); + float x1 = pathsArray[i * 8 + 6]; + float y1 = pathsArray[i * 8 + 7]; + if (Float.compare(len1, 0) != 0) + { + // only if both coordinates are not identical to avoid divide by zero + x1 += (pathsArray[i * 8 + 2] - pathsArray[i * 8 + 6]) / len1 * len1 / 7; + y1 += (pathsArray[i * 8 + 3] - pathsArray[i * 8 + 7]) / len1 * len1 / 7; + } + cs.moveTo(x0, y0); + cs.lineTo(x1, y1); + } + cs.stroke(); + } + catch (IOException ex) + { + LOG.error(ex); + } + } + + @Override + public void generateRolloverAppearance() + { + // No rollover appearance generated + } + + @Override + public void generateDownAppearance() + { + // No down appearance generated + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/AppearanceStyle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/AppearanceStyle.java new file mode 100644 index 00000000000..b2b98181749 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/AppearanceStyle.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.layout; + +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * Define styling attributes to be used for text formatting. + * + */ +public class AppearanceStyle +{ + private PDFont font; + /** + * The font size to be used for text formatting. + * + * Defaulting to 12 to match Acrobats default. + */ + private float fontSize = 12.0f; + + /** + * The leading (distance between lines) to be used for text formatting. + * + * Defaulting to 1.2*fontSize to match Acrobats default. + */ + private float leading = 14.4f; + + /** + * Get the font used for text formatting. + * + * @return the font used for text formatting. + */ + PDFont getFont() + { + return font; + } + + /** + * Set the font to be used for text formatting. + * + * @param font the font to be used. + */ + public void setFont(PDFont font) + { + this.font = font; + } + + /** + * Get the fontSize used for text formatting. + * + * @return the fontSize used for text formatting. + */ + float getFontSize() + { + return fontSize; + } + + /** + * Set the font size to be used for formatting. + * + * @param fontSize the font size. + */ + public void setFontSize(float fontSize) + { + this.fontSize = fontSize; + leading = fontSize * 1.2f; + } + + /** + * Get the leading used for text formatting. + * + * @return the leading used for text formatting. + */ + float getLeading() + { + return leading; + } + + /** + * Set the leading used for text formatting. + * + * @param leading the leading to be used. + */ + void setLeading(float leading) + { + this.leading = leading; + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/PlainText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/PlainText.java new file mode 100644 index 00000000000..16261b3e214 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/PlainText.java @@ -0,0 +1,290 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.layout; + +import java.io.IOException; +import java.text.AttributedString; +import java.text.BreakIterator; +import java.text.AttributedCharacterIterator.Attribute; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * A block of text. + *

    + * A block of text can contain multiple paragraphs which will + * be treated individually within the block placement. + *

    + * + */ +public class PlainText +{ + private static final float FONTSCALE = 1000f; + + private final List paragraphs; + + /** + * Construct the text block from a single value. + * + * Constructs the text block from a single value splitting + * into individual {@link Paragraph} when a new line character is + * encountered. + * + * @param textValue the text block string. + */ + public PlainText(String textValue) + { + List parts = Arrays.asList(textValue.replaceAll("\t", " ").split("\\r\\n|\\n|\\r|\\u2028|\\u2029")); + paragraphs = new ArrayList<>(); + for (String part : parts) + { + // Acrobat prints a space for an empty paragraph + if (part.length() == 0) + { + part = " "; + } + paragraphs.add(new Paragraph(part)); + } + } + + /** + * Construct the text block from a list of values. + * + * Constructs the text block from a list of values treating each + * entry as an individual {@link Paragraph}. + * + * @param listValue the text block string. + */ + public PlainText(List listValue) + { + paragraphs = new ArrayList<>(); + for (String part : listValue) + { + paragraphs.add(new Paragraph(part)); + } + } + + /** + * Get the list of paragraphs. + * + * @return the paragraphs. + */ + List getParagraphs() + { + return paragraphs; + } + + /** + * Attribute keys and attribute values used for text handling. + * + * This is similar to {@link java.awt.font.TextAttribute} but + * handled individually as to avoid a dependency on awt. + * + */ + static class TextAttribute extends Attribute + { + /** + * UID for serializing. + */ + private static final long serialVersionUID = -3138885145941283005L; + + /** + * Attribute width of the text. + */ + public static final Attribute WIDTH = new TextAttribute("width"); + + protected TextAttribute(String name) + { + super(name); + } + + + } + + /** + * A block of text to be formatted as a whole. + *

    + * A block of text can contain multiple paragraphs which will + * be treated individually within the block placement. + *

    + * + */ + static class Paragraph + { + private final String textContent; + + Paragraph(String text) + { + textContent = text; + } + + /** + * Get the paragraph text. + * + * @return the text. + */ + String getText() + { + return textContent; + } + + /** + * Break the paragraph into individual lines. + * + * @param font the font used for rendering the text. + * @param fontSize the fontSize used for rendering the text. + * @param width the width of the box holding the content. + * @return the individual lines. + * @throws IOException + */ + List getLines(PDFont font, float fontSize, float width) throws IOException + { + BreakIterator iterator = BreakIterator.getLineInstance(); + iterator.setText(textContent); + + final float scale = fontSize/FONTSCALE; + + int start = iterator.first(); + int end = iterator.next(); + float lineWidth = 0; + + List textLines = new ArrayList<>(); + Line textLine = new Line(); + + while (end != BreakIterator.DONE) + { + String word = textContent.substring(start,end); + float wordWidth = font.getStringWidth(word) * scale; + + lineWidth = lineWidth + wordWidth; + + // check if the last word would fit without the whitespace ending it + if (lineWidth >= width && Character.isWhitespace(word.charAt(word.length()-1))) + { + float whitespaceWidth = font.getStringWidth(word.substring(word.length()-1)) * scale; + lineWidth = lineWidth - whitespaceWidth; + } + + if (lineWidth >= width) + { + textLine.setWidth(textLine.calculateWidth(font, fontSize)); + textLines.add(textLine); + textLine = new Line(); + lineWidth = font.getStringWidth(word) * scale; + } + + AttributedString as = new AttributedString(word); + as.addAttribute(TextAttribute.WIDTH, wordWidth); + Word wordInstance = new Word(word); + wordInstance.setAttributes(as); + textLine.addWord(wordInstance); + start = end; + end = iterator.next(); + } + textLine.setWidth(textLine.calculateWidth(font, fontSize)); + textLines.add(textLine); + return textLines; + } + } + + /** + * An individual line of text. + */ + static class Line + { + private final List words = new ArrayList<>(); + private float lineWidth; + + float getWidth() + { + return lineWidth; + } + + void setWidth(float width) + { + lineWidth = width; + } + + float calculateWidth(PDFont font, float fontSize) throws IOException + { + final float scale = fontSize/FONTSCALE; + float calculatedWidth = 0f; + for (Word word : words) + { + calculatedWidth = calculatedWidth + + (Float) word.getAttributes().getIterator().getAttribute(TextAttribute.WIDTH); + String text = word.getText(); + if (words.indexOf(word) == words.size() -1 && Character.isWhitespace(text.charAt(text.length()-1))) + { + float whitespaceWidth = font.getStringWidth(text.substring(text.length()-1)) * scale; + calculatedWidth = calculatedWidth - whitespaceWidth; + } + } + return calculatedWidth; + } + + List getWords() + { + return words; + } + + float getInterWordSpacing(float width) + { + return (width - lineWidth)/(words.size()-1); + } + + void addWord(Word word) + { + words.add(word); + } + } + + /** + * An individual word. + * + * A word is defined as a string which must be kept + * on the same line. + */ + static class Word + { + private AttributedString attributedString; + private final String textContent; + + Word(String text) + { + textContent = text; + } + + String getText() + { + return textContent; + } + + AttributedString getAttributes() + { + return attributedString; + } + + void setAttributes(AttributedString as) + { + this.attributedString = as; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/PlainTextFormatter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/PlainTextFormatter.java new file mode 100644 index 00000000000..8c5effaf849 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/layout/PlainTextFormatter.java @@ -0,0 +1,287 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.annotation.layout; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.PlainText.Line; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.PlainText.Paragraph; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.PlainText.TextAttribute; +import org.apache.pdfbox.pdmodel.interactive.annotation.layout.PlainText.Word; + +/** + * TextFormatter to handle plain text formatting for annotation rectangles. + * + * The text formatter will take a single value or an array of values which + * are treated as paragraphs. + */ + +public class PlainTextFormatter +{ + + enum TextAlign + { + LEFT(0), CENTER(1), RIGHT(2), JUSTIFY(4); + + private final int alignment; + + private TextAlign(int alignment) + { + this.alignment = alignment; + } + + int getTextAlign() + { + return alignment; + } + + public static TextAlign valueOf(int alignment) + { + for (TextAlign textAlignment : TextAlign.values()) + { + if (textAlignment.getTextAlign() == alignment) + { + return textAlignment; + } + } + return TextAlign.LEFT; + } + } + + /** + * The scaling factor for font units to PDF units + */ + private static final int FONTSCALE = 1000; + + private final AppearanceStyle appearanceStyle; + private final boolean wrapLines; + private final float width; + + private final PDAppearanceContentStream contents; + private final PlainText textContent; + private final TextAlign textAlignment; + + private float horizontalOffset; + private float verticalOffset; + + public static class Builder + { + + // required parameters + private PDAppearanceContentStream contents; + + // optional parameters + private AppearanceStyle appearanceStyle; + private boolean wrapLines = false; + private float width = 0f; + private PlainText textContent; + private TextAlign textAlignment = TextAlign.LEFT; + + + // initial offset from where to start the position of the first line + private float horizontalOffset = 0f; + private float verticalOffset = 0f; + + public Builder(PDAppearanceContentStream contents) + { + this.contents = contents; + } + + public Builder style(AppearanceStyle appearanceStyle) + { + this.appearanceStyle = appearanceStyle; + return this; + } + + public Builder wrapLines(boolean wrapLines) + { + this.wrapLines = wrapLines; + return this; + } + + public Builder width(float width) + { + this.width = width; + return this; + } + + public Builder textAlign(int alignment) + { + this.textAlignment = TextAlign.valueOf(alignment); + return this; + } + + public Builder textAlign(TextAlign alignment) + { + this.textAlignment = alignment; + return this; + } + + + public Builder text(PlainText textContent) + { + this.textContent = textContent; + return this; + } + + public Builder initialOffset(float horizontalOffset, float verticalOffset) + { + this.horizontalOffset = horizontalOffset; + this.verticalOffset = verticalOffset; + return this; + } + + public PlainTextFormatter build() + { + return new PlainTextFormatter(this); + } + } + + private PlainTextFormatter(Builder builder) + { + appearanceStyle = builder.appearanceStyle; + wrapLines = builder.wrapLines; + width = builder.width; + contents = builder.contents; + textContent = builder.textContent; + textAlignment = builder.textAlignment; + horizontalOffset = builder.horizontalOffset; + verticalOffset = builder.verticalOffset; + } + + /** + * Format the text block. + * + * @throws IOException if there is an error writing to the stream. + */ + public void format() throws IOException + { + if (textContent != null && !textContent.getParagraphs().isEmpty()) + { + boolean isFirstParagraph = true; + for (Paragraph paragraph : textContent.getParagraphs()) + { + if (wrapLines) + { + List lines = paragraph.getLines( + appearanceStyle.getFont(), + appearanceStyle.getFontSize(), + width + ); + processLines(lines, isFirstParagraph); + isFirstParagraph = false; + } + else + { + float startOffset = 0f; + + + float lineWidth = appearanceStyle.getFont().getStringWidth(paragraph.getText()) * + appearanceStyle.getFontSize() / FONTSCALE; + + if (lineWidth < width) + { + switch (textAlignment) + { + case CENTER: + startOffset = (width - lineWidth)/2; + break; + case RIGHT: + startOffset = width - lineWidth; + break; + case JUSTIFY: + default: + startOffset = 0f; + } + } + + contents.newLineAtOffset(horizontalOffset + startOffset, verticalOffset); + contents.showText(paragraph.getText()); + } + } + } + } + + /** + * Process lines for output. + * + * Process lines for an individual paragraph and generate the + * commands for the content stream to show the text. + * + * @param lines the lines to process. + * @throws IOException if there is an error writing to the stream. + */ + private void processLines(List lines, boolean isFirstParagraph) throws IOException + { + float wordWidth; + + float lastPos = 0f; + float startOffset = 0f; + float interWordSpacing = 0f; + + for (Line line : lines) + { + switch (textAlignment) + { + case CENTER: + startOffset = (width - line.getWidth())/2; + break; + case RIGHT: + startOffset = width - line.getWidth(); + break; + case JUSTIFY: + if (lines.indexOf(line) != lines.size() -1) + { + interWordSpacing = line.getInterWordSpacing(width); + } + break; + default: + startOffset = 0f; + } + + float offset = -lastPos + startOffset + horizontalOffset; + + if (lines.indexOf(line) == 0 && isFirstParagraph) + { + contents.newLineAtOffset(offset, verticalOffset); + } + else + { + // keep the last position + verticalOffset = verticalOffset - appearanceStyle.getLeading(); + contents.newLineAtOffset(offset, - appearanceStyle.getLeading()); + } + + lastPos += offset; + + List words = line.getWords(); + for (Word word : words) + { + contents.showText(word.getText()); + wordWidth = (Float) word.getAttributes().getIterator().getAttribute(TextAttribute.WIDTH); + if (words.indexOf(word) != words.size() -1) + { + contents.newLineAtOffset(wordWidth + interWordSpacing, 0f); + lastPos = lastPos + wordWidth + interWordSpacing; + } + } + } + horizontalOffset = horizontalOffset - lastPos; + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/annotation/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/annotation/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/COSFilterInputStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/COSFilterInputStream.java new file mode 100644 index 00000000000..3bb1e0acfef --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/COSFilterInputStream.java @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.io.ByteArrayInputStream; +import java.io.FilterInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.io.IOUtils; + + +public class COSFilterInputStream extends FilterInputStream +{ + /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(COSFilterInputStream.class); + + private final int[] byteRange; + private long position = 0; + + public COSFilterInputStream(InputStream in, int[] byteRange) + { + super(in); + this.byteRange = byteRange; + } + + public COSFilterInputStream(byte[] in, int offset, int length, int[] byteRange) + { + super(new ByteArrayInputStream(in, offset, length)); + this.byteRange = byteRange; + } + + public COSFilterInputStream(byte[] in, int[] byteRange) + { + super(new ByteArrayInputStream(in)); + this.byteRange = byteRange; + } + + @Override + public int read() throws IOException + { + nextAvailable(); + int i = super.read(); + if (i>-1) + { + ++position; + } + return i; + } + + @Override + public int read(byte[] b) throws IOException + { + return read(b,0,b.length); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException + { + if (len == 0) + { + return 0; + } + + int c = read(); + if (c == -1) + { + return -1; + } + b[off] = (byte)c; + + int i = 1; + try + { + for (; i < len; i++) + { + c = read(); + if (c == -1) + { + break; + } + b[off + i] = (byte)c; + } + } + catch (IOException ee) + { + LOG.debug("An exception occured while trying to fill byte[] - ignoring", ee); + } + return i; + } + + private boolean inRange() throws IOException + { + long pos = position; + for (int i = 0; ipos) + { + return true; + } + } + return false; + } + + private void nextAvailable() throws IOException + { + while (!inRange()) + { + ++position; + if(super.read()<0) + { + break; + } + } + } + + public byte[] toByteArray() throws IOException + { + return IOUtils.toByteArray(this); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/ExternalSigningSupport.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/ExternalSigningSupport.java new file mode 100644 index 00000000000..b632d318ca2 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/ExternalSigningSupport.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Interface for external signature creation scenarios. It contains method for retrieving PDF data + * to be sign and setting created CMS signature to the PDF. + * + */ +public interface ExternalSigningSupport +{ + /** + * Get PDF content to be signed. Obtained InputStream must be closed after use. + * + * @return content stream + */ + InputStream getContent() throws IOException; + + /** + * Set CMS signature bytes to PDF. + * + * @param signature CMS signature as byte array + * + * @throws IOException if exception occured during PDF writing + */ + void setSignature(byte[] signature) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDPropBuild.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDPropBuild.java new file mode 100644 index 00000000000..3fea732ffa0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDPropBuild.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * A signature build dictionary as specified in the PDF Signature Build Dictionary Specification. + * + * The signature build properties dictionary provides signature properties for the software + * application that was used to create the signature. + * + * @see + * http://partners.adobe.com/public/developer/en/acrobat/Acrobat_Signature_BuiladDict.pdf + * + * @author Thomas Chojecki + */ +public class PDPropBuild implements COSObjectable +{ + private COSDictionary dictionary; + + /** + * Default constructor. + */ + public PDPropBuild() + { + dictionary = new COSDictionary(); + dictionary.setDirect(true); // the specification claim to use direct objects + } + + /** + * Constructor. + * + * @param dict The signature dictionary. + */ + public PDPropBuild(COSDictionary dict) + { + dictionary = dict; + dictionary.setDirect(true); // the specification claim to use direct objects + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * A build data dictionary for the signature handler that was + * used to create the parent signature. + * + * @return the Filter as PDPropBuildFilter object + */ + public PDPropBuildDataDict getFilter() + { + PDPropBuildDataDict filter = null; + COSDictionary filterDic = (COSDictionary)dictionary.getDictionaryObject(COSName.FILTER); + if (filterDic != null) + { + filter = new PDPropBuildDataDict(filterDic); + } + return filter; + } + + /** + * Set the build data dictionary for the signature handler. + * This entry is optional but is highly recommended for the signatures. + * + * @param filter is the PDPropBuildFilter + */ + public void setPDPropBuildFilter(PDPropBuildDataDict filter) + { + dictionary.setItem(COSName.FILTER, filter); + } + + /** + * A build data dictionary for the PubSec software module + * that was used to create the parent signature. + * + * @return the PubSec as PDPropBuildPubSec object + */ + public PDPropBuildDataDict getPubSec() + { + PDPropBuildDataDict pubSec = null; + COSDictionary pubSecDic = (COSDictionary)dictionary.getDictionaryObject(COSName.PUB_SEC); + if (pubSecDic != null) + { + pubSec = new PDPropBuildDataDict(pubSecDic); + } + return pubSec; + } + + /** + * Set the build data dictionary for the PubSec Software module. + * + * @param pubSec is the PDPropBuildPubSec + */ + public void setPDPropBuildPubSec(PDPropBuildDataDict pubSec) + { + dictionary.setItem(COSName.PUB_SEC, pubSec); + } + + /** + * A build data dictionary for the viewing application software + * module that was used to create the parent signature. + * + * @return the App as PDPropBuildApp object + */ + public PDPropBuildDataDict getApp() + { + PDPropBuildDataDict app = null; + COSDictionary appDic = (COSDictionary)dictionary.getDictionaryObject(COSName.APP); + if (appDic != null) + { + app = new PDPropBuildDataDict(appDic); + } + return app; + } + + /** + * Set the build data dictionary for the viewing application + * software module. + * + * @param app is the PDPropBuildApp + */ + public void setPDPropBuildApp(PDPropBuildDataDict app) + { + dictionary.setItem(COSName.APP, app); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDPropBuildDataDict.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDPropBuildDataDict.java new file mode 100644 index 00000000000..cf709fbe945 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDPropBuildDataDict.java @@ -0,0 +1,303 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * The general property dictionaries from the build property dictionary. + * + * @see PDPropBuild + * @author Thomas Chojecki + */ +public class PDPropBuildDataDict implements COSObjectable +{ + private final COSDictionary dictionary; + + /** + * Default constructor. + */ + public PDPropBuildDataDict() + { + dictionary = new COSDictionary(); + // the specification claim to use direct objects + dictionary.setDirect(true); + } + + /** + * Constructor. + * + * @param dict The signature dictionary. + */ + public PDPropBuildDataDict(COSDictionary dict) + { + dictionary = dict; + // the specification claim to use direct objects + dictionary.setDirect(true); + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * The name of the software module that was used to create the signature. + * @return the name of the software module + */ + public String getName() + { + return dictionary.getNameAsString(COSName.NAME); + } + + /** + * The name of the software module that was used to create the signature. + * + * @param name is the name of the software module + */ + public void setName(String name) + { + dictionary.setName(COSName.NAME, name); + } + + /** + * The build date of the software module. This string is normally produced by the compiler that + * is used to compile the software, for example using the Date and Time preprocessor flags. As + * such, this not likely to be in PDF Date format. + * + * @return the build date of the software module + */ + public String getDate() + { + return dictionary.getString(COSName.DATE); + } + + /** + * The build date of the software module. This string is normally produced by the compiler. + * + * @param date is the build date of the software module + */ + public void setDate(String date) + { + dictionary.setString(COSName.DATE, date); + } + + /** + * A text string indicating the version of the application implementation, as described by the + * Name attribute in this dictionary. When set by Adobe Acrobat, this entry is in + * the format: major.minor.micro (for example 7.0.7). + *

    + * NOTE: Version value is specific for build data dictionary when used as the App + * dictionary in a build properties dictionary. + *

    + * + * @param applicationVersion the application implementation version + */ + public void setVersion(String applicationVersion) + { + dictionary.setString("REx", applicationVersion); + } + + /** + * A text string indicating the version of the application implementation, as described by the + * /Name attribute in this dictionary. When set by Adobe Acrobat, this entry is in + * the format: major.minor.micro (for example 7.0.7). + * + * @return the application implementation version + */ + public String getVersion() + { + return dictionary.getString("REx"); + } + + /** + * The software module revision number, corresponding to the Date attribute. + * + * @return the revision of the software module + */ + public long getRevision() + { + return dictionary.getLong(COSName.R); + } + + /** + * The software module revision number, corresponding to the Date attribute. + * + * @param revision is the software module revision number + */ + public void setRevision(long revision) + { + dictionary.setLong(COSName.R, revision); + } + + /** + * The software module revision number, used to determinate the minimum version of software that + * is required in order to process this signature. + *

    + * NOTE: this entry is deprecated for PDF v1.7 + *

    + * + * @return the revision of the software module + */ + public long getMinimumRevision() + { + return dictionary.getLong(COSName.V); + } + + /** + * The software module revision number, used to determinate the minimum version of software that + * is required in order to process this signature. + *

    + * NOTE: this entry is deprecated for PDF v1.7 + *

    + * + * @param revision is the software module revision number + */ + public void setMinimumRevision(long revision) + { + dictionary.setLong(COSName.V, revision); + } + + /** + * A flag that can be used by the signature handler or software module to + * indicate that this signature was created with unrelease software. + * + * @return true if the software module or signature handler was a pre release. + */ + public boolean getPreRelease() + { + return dictionary.getBoolean(COSName.PRE_RELEASE, false); + } + + /** + * A flag that can be used by the signature handler or software module to + * indicate that this signature was created with unrelease software. + * + * @param preRelease is true if the signature was created with a unrelease + * software, otherwise false. + */ + public void setPreRelease(boolean preRelease) + { + dictionary.setBoolean(COSName.PRE_RELEASE, preRelease); + } + + /** + * Indicates the operating system. The string format isn't specified yet. In its PDF Signature + * Build Dictionary Specifications Adobe differently specifies the value type to store operating + * system string:
      + *
    • Specification for PDF v1.5 specifies type as string;
    • + *
    • Specification for PDF v1.7 specifies type as array and provided example for + * /PropBuild dictionary indicate it as array of names.
    • + *
    + * This method supports both types to retrieve the value. + * + * @return the operating system id or name. + */ + public String getOS() + { + final COSBase cosBase = dictionary.getItem(COSName.OS); + if (cosBase instanceof COSArray) + { + return ((COSArray) cosBase).getName(0); + } + // PDF v1.5 style + return dictionary.getString(COSName.OS); + } + + /** + * Indicates the operating system. The string format isn't specified yet. Value will be stored + * as first item of the array, as specified in PDF Signature Build Dictionary Specification for + * PDF v1.7. + * + * @param os is a string with the system id or name. + */ + public void setOS(String os) + { + if (os == null) + { + dictionary.removeItem(COSName.OS); + } + else + { + COSBase osArray = dictionary.getItem(COSName.OS); + if (!(osArray instanceof COSArray)) + { + osArray = new COSArray(); + osArray.setDirect(true); + dictionary.setItem(COSName.OS, osArray); + } + ((COSArray) osArray).add(0, COSName.getPDFName(os)); + } + } + + /** + * If there is a LegalPDF dictionary in the catalog + * of the PDF file and the NonEmbeddedFonts attribute in this dictionary + * has a non zero value, and the viewing application has a preference + * set to suppress the display of this warning then the value of this + * attribute will be set to true. + * + * @return true if NonEFontNoWarn is set to true + */ + public boolean getNonEFontNoWarn() + { + return dictionary.getBoolean(COSName.NON_EFONT_NO_WARN, true); + } + + /* + * setNonEFontNoWarn missing. Maybe not needed or should be self + * implemented. + * + * Documentation says: + * (Optional; PDF 1.5) If there is a LegalPDF dictionary in the catalog + * of the PDF file and the NonEmbeddedFonts attribute in this dictionary + * has a non zero value, and the viewing application has a preference + * set to suppress the display of this warning then the value of this + * attribute will be set to true. + */ + + /** + * If true, the application was in trusted mode when signing took place. + * + * @return true if the application was in trusted mode while signing. + * default: false + */ + public boolean getTrustedMode() + { + return dictionary.getBoolean(COSName.TRUSTED_MODE, false); + } + + /** + * If true, the application was in trusted mode when signing took place. + * + * @param trustedMode true if the application is in trusted mode. + */ + public void setTrustedMode(boolean trustedMode) + { + dictionary.setBoolean(COSName.TRUSTED_MODE, trustedMode); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValue.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValue.java new file mode 100644 index 00000000000..9bc14576156 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValue.java @@ -0,0 +1,579 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents a pdf signature seed value dictionary. + * + * @author Thomas Chojecki + */ +public class PDSeedValue implements COSObjectable +{ + /** + * A Ff flag. + */ + public static final int FLAG_FILTER = 1; + + /** + * A Ff flag. + */ + public static final int FLAG_SUBFILTER = 1 << 1; + + /** + * A Ff flag. + */ + public static final int FLAG_V = 1 << 2; + + /** + * A Ff flag. + */ + public static final int FLAG_REASON = 1 << 3; + + /** + * A Ff flag. + */ + public static final int FLAG_LEGAL_ATTESTATION = 1 << 4; + + /** + * A Ff flag. + */ + public static final int FLAG_ADD_REV_INFO = 1 << 5; + + /** + * A Ff flag. + */ + public static final int FLAG_DIGEST_METHOD = 1 << 6; + + private final COSDictionary dictionary; + + /** + * Default constructor. + */ + public PDSeedValue() + { + dictionary = new COSDictionary(); + dictionary.setItem(COSName.TYPE, COSName.SV); + dictionary.setDirect(true); // the specification claim to use direct objects + } + + /** + * Constructor. + * + * @param dict The signature dictionary. + */ + public PDSeedValue(COSDictionary dict) + { + dictionary = dict; + dictionary.setDirect(true); // the specification claim to use direct objects + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * + * @return true if the Filter is required + */ + public boolean isFilterRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_FILTER); + } + + /** + * set true if the filter shall be required. + * + * @param flag if true, the specified Filter shall be used when signing. + */ + public void setFilterRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_FILTER, flag); + } + + /** + * + * @return true if the SubFilter is required + */ + public boolean isSubFilterRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_SUBFILTER); + } + + /** + * set true if the subfilter shall be required. + * + * @param flag if true, the first supported SubFilter in the array shall be used when signing. + */ + public void setSubFilterRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_SUBFILTER, flag); + } + + /** + * + * @return true if the DigestMethod is required + */ + public boolean isDigestMethodRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_DIGEST_METHOD); + } + + /** + * set true if the DigestMethod shall be required. + * + * @param flag if true, one digest from the array shall be used. + */ + public void setDigestMethodRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_DIGEST_METHOD, flag); + } + + /** + * + * @return true if the V entry is required + */ + public boolean isVRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_V); + } + + /** + * set true if the V entry shall be required. + * + * @param flag if true, the V entry shall be used. + */ + public void setVRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_V, flag); + } + + /** + * + * @return true if the Reason is required + */ + public boolean isReasonRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_REASON); + } + + /** + * set true if the Reason shall be required. + * + * @param flag if true, the Reason entry shall be used. + */ + public void setReasonRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_REASON, flag); + } + + /** + * + * @return true if the LegalAttestation is required + */ + public boolean isLegalAttestationRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_LEGAL_ATTESTATION); + } + + /** + * set true if the LegalAttestation shall be required. + * + * @param flag if true, the LegalAttestation entry shall be used. + */ + public void setLegalAttestationRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_LEGAL_ATTESTATION, flag); + } + + /** + * + * @return true if the AddRevInfo is required + */ + public boolean isAddRevInfoRequired() + { + return getCOSObject().getFlag( COSName.FF, FLAG_ADD_REV_INFO); + } + + /** + * set true if the AddRevInfo shall be required. + * + * @param flag if true, the AddRevInfo shall be used. + */ + public void setAddRevInfoRequired(boolean flag) + { + getCOSObject().setFlag( COSName.FF, FLAG_ADD_REV_INFO, flag); + } + + /** + * If Filter is not null and the {@link #isFilterRequired()} indicates this entry is a + * required constraint, then the signature handler specified by this entry shall be used when + * signing; otherwise, signing shall not take place. If {@link #isFilterRequired()} indicates + * that this is an optional constraint, this handler may be used if it is available. If it is + * not available, a different handler may be used instead. + * + * @return the filter that shall be used by the signature handler + */ + public String getFilter() + { + return dictionary.getNameAsString(COSName.FILTER); + } + + /** + * (Optional) The signature handler that shall be used to sign the signature field. + * + * @param filter is the filter that shall be used by the signature handler + */ + public void setFilter(COSName filter) + { + dictionary.setItem(COSName.FILTER, filter); + } + + /** + * If SubFilter is not null and the {@link #isSubFilterRequired()} indicates this + * entry is a required constraint, then the first matching encodings shall be used when + * signing; otherwise, signing shall not take place. If {@link #isSubFilterRequired()} + * indicates that this is an optional constraint, then the first matching encoding shall + * be used if it is available. If it is not available, a different encoding may be used + * instead. + * + * @return the subfilter that shall be used by the signature handler + */ + public List getSubFilter() + { + List retval = null; + COSArray fields = (COSArray)dictionary.getDictionaryObject(COSName.SUB_FILTER); + + if (fields != null) + { + List actuals = new ArrayList<>(); + for ( int i = 0; i < fields.size(); i++ ) + { + String element = fields.getName(i); + if (element != null) + { + actuals.add(element); + } + } + retval = new COSArrayList<>(actuals, fields); + } + return retval; + } + + /** + * (Optional) An array of names indicating encodings to use when signing. The first name + * in the array that matches an encoding supported by the signature handler shall be the + * encoding that is actually used for signing. + * + * @param subfilter is the name that shall be used for encoding + */ + public void setSubFilter(List subfilter) + { + dictionary.setItem(COSName.SUB_FILTER, COSArrayList.converterToCOSArray(subfilter)); + } + + /** + * An array of names indicating acceptable digest algorithms to use when + * signing. The value shall be one of SHA1, SHA256, SHA384, + * SHA512, RIPEMD160. The default value is implementation-specific. + * + * @return the digest method that shall be used by the signature handler + */ + public List getDigestMethod() + { + List retval = null; + COSArray fields = (COSArray)dictionary.getDictionaryObject(COSName.DIGEST_METHOD); + + if (fields != null) + { + List actuals = new ArrayList<>(); + for ( int i = 0; i < fields.size(); i++ ) + { + String element = fields.getName(i); + if (element != null) + { + actuals.add(element); + } + } + retval = new COSArrayList<>(actuals, fields); + } + return retval; + } + + /** + *

    (Optional, PDF 1.7) An array of names indicating acceptable digest + * algorithms to use when signing. The value shall be one of SHA1, + * SHA256, SHA384, SHA512, RIPEMD160. The default + * value is implementation-specific.

    + * + *

    This property is only applicable if the digital credential signing contains RSA + * public/privat keys

    + * + * @param digestMethod is a list of possible names of the digests, that should be + * used for signing. + */ + public void setDigestMethod(List digestMethod) + { + // integrity check + for ( COSName cosName : digestMethod ) + { + if (!(cosName.equals(COSName.DIGEST_SHA1) + || cosName.equals(COSName.DIGEST_SHA256) + || cosName.equals(COSName.DIGEST_SHA384) + || cosName.equals(COSName.DIGEST_SHA512) + || cosName.equals(COSName.DIGEST_RIPEMD160))) + { + throw new IllegalArgumentException("Specified digest " + cosName.getName() + " isn't allowed."); + } + } + dictionary.setItem(COSName.DIGEST_METHOD, COSArrayList.converterToCOSArray(digestMethod)); + } + + /** + * The minimum required capability of the signature field seed value + * dictionary parser. A value of 1 specifies that the parser shall be able to + * recognize all seed value dictionary entries in a PDF 1.5 file. A value of 2 + * specifies that it shall be able to recognize all seed value dictionary entries + * specified. + * + * @return the minimum required capability of the signature field seed value + * dictionary parser + */ + public float getV() + { + return dictionary.getFloat(COSName.V); + } + + /** + * (Optional) The minimum required capability of the signature field seed value + * dictionary parser. A value of 1 specifies that the parser shall be able to + * recognize all seed value dictionary entries in a PDF 1.5 file. A value of 2 + * specifies that it shall be able to recognize all seed value dictionary entries + * specified. + * + * @param minimumRequiredCapability is the minimum required capability of the + * signature field seed value dictionary parser + */ + public void setV(float minimumRequiredCapability) + { + dictionary.setFloat(COSName.V, minimumRequiredCapability); + } + + /** + * If the Reasons array is provided and {@link #isReasonRequired()} indicates that + * Reasons is a required constraint, one of the reasons in the array shall be used + * for the signature dictionary; otherwise signing shall not take place. If the + * {@link #isReasonRequired()} indicates Reasons is an optional constraint, one of + * the reasons in the array may be chose or a custom reason can be provided. + * + * @return the reasons that should be used by the signature handler + */ + public List getReasons() + { + List retval = null; + COSArray fields = (COSArray)dictionary.getDictionaryObject(COSName.REASONS); + + if (fields != null) + { + List actuals = new ArrayList<>(); + for ( int i = 0; i < fields.size(); i++ ) + { + String element = fields.getString(i); + if (element != null) + { + actuals.add(element); + } + } + retval = new COSArrayList<>(actuals, fields); + } + return retval; + } + + /** + * (Optional) An array of text strings that specifying possible reasons for signing + * a document. If specified, the reasons supplied in this entry replace those used + * by conforming products. + * + * @param reasons is a list of possible text string that specifying possible reasons + */ + public void setReasons(List reasons) + { + dictionary.setItem(COSName.REASONS, COSArrayList.converterToCOSArray(reasons)); + } + + /** + *

    (Optional; PDF 1.6) A dictionary containing a single entry whose key is P + * and whose value is an integer between 0 and 3. A value of 0 defines the + * signatures as an author signature. The value 1 through 3 shall be used for + * certification signatures and correspond to the value of P in a DocMDP transform + * parameters dictionary.

    + * + *

    If this MDP key is not present or the MDP dictionary does not contain a P + * entry, no rules shall be defined regarding the type of signature or its + * permissions.

    + * + * @return the mdp dictionary as PDSeedValueMDP + */ + public PDSeedValueMDP getMDP() + { + COSDictionary dict = (COSDictionary)dictionary.getDictionaryObject(COSName.MDP); + PDSeedValueMDP mdp = null; + if (dict != null) + { + mdp = new PDSeedValueMDP(dict); + } + return mdp; + } + + /** + *

    (Optional; PDF 1.6) A dictionary containing a single entry whose key is P + * and whose value is an integer between 0 and 3. A value of 0 defines the + * signatures as an author signature. The value 1 through 3 shall be used for + * certification signatures and correspond to the value of P in a DocMDP transform + * parameters dictionary.

    + * + *

    If this MDP key is not present or the MDP dictionary does not contain a P + * entry, no rules shall be defined regarding the type of signature or its + * permissions.

    + * + * @param mdp dictionary + */ + public void setMPD(PDSeedValueMDP mdp) + { + if (mdp != null) + { + dictionary.setItem(COSName.MDP, mdp.getCOSObject()); + } + } + + /** + * (Optional) A certificate seed value dictionary containing information about the certificate + * to be used when signing. + * + * @return dictionary + */ + public PDSeedValueCertificate getSeedValueCertificate() + { + COSBase base = dictionary.getDictionaryObject(COSName.CERT); + PDSeedValueCertificate certificate = null; + if (base instanceof COSDictionary) + { + COSDictionary dict = (COSDictionary) base; + certificate = new PDSeedValueCertificate(dict); + } + return certificate; + } + + /** + * (Optional) A certificate seed value dictionary containing information about the certificate + * to be used when signing. + * + * @param certificate dictionary + */ + public void setSeedValueCertificate(PDSeedValueCertificate certificate) + { + dictionary.setItem(COSName.CERT, certificate); + } + + /** + *

    (Optional; PDF 1.6) A time stamp dictionary containing two entries. URL which + * is a ASCII string specifying the URL to a rfc3161 conform timestamp server and Ff + * to indicate if a timestamp is required or optional.

    + * + * @return the timestamp dictionary as PDSeedValueTimeStamp + */ + public PDSeedValueTimeStamp getTimeStamp() + { + COSDictionary dict = (COSDictionary)dictionary.getDictionaryObject(COSName.TIME_STAMP); + PDSeedValueTimeStamp timestamp = null; + if (dict != null) + { + timestamp = new PDSeedValueTimeStamp(dict); + } + return timestamp; + } + + /** + *

    (Optional; PDF 1.6) A time stamp dictionary containing two entries. URL which + * is a ASCII string specifying the URL to a rfc3161 conform timestamp server and Ff + * to indicate if a timestamp is required or optional.

    + * + * @param timestamp dictionary + */ + public void setTimeStamp(PDSeedValueTimeStamp timestamp) + { + if (timestamp != null) + { + dictionary.setItem(COSName.TIME_STAMP, timestamp.getCOSObject()); + } + } + + /** + * (Optional, PDF 1.6) An array of text strings that specifying possible legal + * attestations. + * + * @return the reasons that should be used by the signature handler + */ + public List getLegalAttestation() + { + List retval = null; + COSArray fields = (COSArray)dictionary.getDictionaryObject(COSName.LEGAL_ATTESTATION); + + if (fields != null) + { + List actuals = new ArrayList<>(); + for ( int i = 0; i < fields.size(); i++ ) + { + String element = fields.getString(i); + if (element != null) + { + actuals.add(element); + } + } + retval = new COSArrayList<>(actuals, fields); + } + return retval; + } + + /** + * (Optional, PDF 1.6) An array of text strings that specifying possible legal + * attestations. + * + * @param legalAttestation is a list of possible text string that specifying possible + * legal attestations. + */ + public void setLegalAttestation(List legalAttestation) + { + dictionary.setItem(COSName.LEGAL_ATTESTATION, COSArrayList.converterToCOSArray(legalAttestation)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueCertificate.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueCertificate.java new file mode 100644 index 00000000000..dce1d9dd7e6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueCertificate.java @@ -0,0 +1,694 @@ +/* + * Copyright 2017 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class represents a certificate seed value dictionary that is in the seed value which puts + * constraints on certificates when signing documents. + * + * @author Hossam Hazem + */ +public class PDSeedValueCertificate implements COSObjectable +{ + /** + * A Ff flag. + */ + public static final int FLAG_SUBJECT = 1; + + /** + * A Ff flag. + */ + public static final int FLAG_ISSUER = 1 << 1; + + /** + * A Ff flag. + */ + public static final int FLAG_OID = 1 << 2; + + /** + * A Ff flag. + */ + public static final int FLAG_SUBJECT_DN = 1 << 3; + + /** + * A Ff flag. + */ + public static final int FLAG_KEY_USAGE = 1 << 5; + + /** + * A Ff flag. + */ + public static final int FLAG_URL = 1 << 6; + private final COSDictionary dictionary; + + /** + * Default constructor. + */ + public PDSeedValueCertificate() + { + this.dictionary = new COSDictionary(); + this.dictionary.setItem(COSName.TYPE, COSName.SV_CERT); + this.dictionary.setDirect(true); + } + + /** + * Constructor. + * + * @param dict The certificate seed value dictionary. + */ + public PDSeedValueCertificate(COSDictionary dict) + { + this.dictionary = dict; + this.dictionary.setDirect(true); + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * + * @return true if the Subject is required + */ + public boolean isSubjectRequired() + { + return this.getCOSObject().getFlag(COSName.FF, FLAG_SUBJECT); + } + + /** + * set true if subject shall be required as a constraint on signature. + * + * @param flag if true, the specified Subject shall be enforced as a constraint. + */ + public void setSubjectRequired(boolean flag) + { + this.getCOSObject().setFlag(COSName.FF, FLAG_SUBJECT, flag); + } + + /** + * + * @return true if the Issuer is required + */ + public boolean isIssuerRequired() + { + return this.getCOSObject().getFlag(COSName.FF, FLAG_ISSUER); + } + + /** + * set true if Issuer shall be required as a constraint on signature. + * + * @param flag if true, the specified Issuer shall be enforced as a constraint. + */ + public void setIssuerRequired(boolean flag) + { + this.getCOSObject().setFlag(COSName.FF, FLAG_ISSUER, flag); + } + + /** + * + * @return true if the OID is required + */ + public boolean isOIDRequired() + { + return this.getCOSObject().getFlag(COSName.FF, FLAG_OID); + } + + /** + * set true if OID shall be required as a constraint on signature. + * + * @param flag if true, the specified OID shall be enforced as a constraint. + */ + public void setOIDRequired(boolean flag) + { + this.getCOSObject().setFlag(COSName.FF, FLAG_OID, flag); + } + + /** + * + * @return true if the Subject DN is required + */ + public boolean isSubjectDNRequired() + { + return this.getCOSObject().getFlag(COSName.FF, FLAG_SUBJECT_DN); + } + + /** + * set true if subject DN shall be required as a constraint on signature. + * + * @param flag if true, the specified Subject DN shall be enforced as a constraint. + */ + public void setSubjectDNRequired(boolean flag) + { + this.getCOSObject().setFlag(COSName.FF, FLAG_SUBJECT_DN, flag); + } + + /** + * + * @return true if the KeyUsage is required + */ + public boolean isKeyUsageRequired() + { + return this.getCOSObject().getFlag(COSName.FF, FLAG_KEY_USAGE); + } + + /** + * set true if KeyUsage shall be required as a constraint on signature. + * + * @param flag if true, the specified KeyUsage shall be enforced as a constraint. + */ + public void setKeyUsageRequired(boolean flag) + { + this.getCOSObject().setFlag(COSName.FF, FLAG_KEY_USAGE, flag); + } + + /** + * + * @return true if the URL is required + */ + public boolean isURLRequired() + { + return this.getCOSObject().getFlag(COSName.FF, FLAG_URL); + } + + /** + * set true if URL shall be required as a constraint on signature. + * + * @param flag if true, the specified URL shall be enforced as a constraint. + */ + public void setURLRequired(boolean flag) + { + this.getCOSObject().setFlag(COSName.FF, FLAG_URL, flag); + } + + /** + * Returns list of byte arrays that contains DER-encoded X.509v3 certificates + */ + public List getSubject() + { + COSBase base = this.dictionary.getDictionaryObject(COSName.SUBJECT); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + return getListOfByteArraysFromCOSArray(array); + } + return null; + } + + /** + * (Optional) A list of byte arrays containing DER-encoded X.509v3 certificates that are + * acceptable for signing. if + * Subject is not null and {@link #isSubjectRequired()} is true then the subject + * constraint is enforced on the subjects in this array subjects. + * + * @param subjects list of byte arrays containing DER-encoded X.509v3 certificates that are + * acceptable for signing. + */ + public void setSubject(List subjects) + { + COSArray array = new COSArray(); + for (byte[] subject : subjects) + { + array.add(new COSString(subject)); + } + this.dictionary.setItem(COSName.SUBJECT, array); + } + + /** + * (Optional) byte array containing DER-encoded X.509v3 certificate that is acceptable for + * signing. works like {@link #setSubject(List)} but one byte array + * + * @param subject byte array containing DER-encoded X.509v3 certificate + */ + public void addSubject(byte[] subject) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.SUBJECT); + COSArray array; + if (base instanceof COSArray) + { + array = (COSArray) base; + } + else + { + array = new COSArray(); + } + COSString string = new COSString(subject); + array.add(string); + this.dictionary.setItem(COSName.SUBJECT, array); + } + + /** + * removes a subject from the list + * + * @param subject byte array containing DER-encoded X.509v3 certificate + */ + public void removeSubject(byte[] subject) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.SUBJECT); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + array.remove(new COSString(subject)); + } + } + + /** + * Returns list of maps that contains subject distinguished names like [(cn: John Doe, o: Doe), + * (cn: John Smith)] both keys are typically of the form 'cn', 'o', 'email', '2.5.4.43'; and + * values are text strings. + */ + public List> getSubjectDN() + { + COSBase base = this.dictionary.getDictionaryObject(COSName.SUBJECT_DN); + if (base instanceof COSArray) + { + COSArray cosArray = (COSArray) base; + List subjectDNList = cosArray.toList(); + List> result = new LinkedList<>(); + for (Object subjectDNItem : subjectDNList) + { + if (subjectDNItem instanceof COSDictionary) + { + COSDictionary subjectDNItemDict = (COSDictionary) subjectDNItem; + Map subjectDNMap = new HashMap<>(); + for (COSName key : subjectDNItemDict.keySet()) + { + subjectDNMap.put(key.getName(), subjectDNItemDict.getString(key)); + } + result.add(subjectDNMap); + } + } + return result; + } + return null; + } + + /** + * (Optional; PDF 1.7) A list of maps, where each map contains key value pairs, that specify the + * Subject Distinguished Name (DN) that must be present within the certificate for it to be + * acceptable for signing. The certificate must at a minimum contain all the attributes + * specified in one of the maps entered. + * + * @param subjectDN list of maps that contains subject distinguished names + */ + public void setSubjectDN(List> subjectDN) + { + List subjectDNDict = new LinkedList<>(); + for (Map subjectDNItem : subjectDN) + { + COSDictionary dict = new COSDictionary(); + for (Map.Entry entry : subjectDNItem.entrySet()) + { + dict.setItem(entry.getKey(), new COSString(entry.getValue())); + } + subjectDNDict.add(dict); + } + this.dictionary.setItem(COSName.SUBJECT_DN, + COSArrayList.converterToCOSArray(subjectDNDict)); + } + + /** + * Returns list of key usages of certificate strings where each string is 9 characters long and + * each character is one of these values {0, 1, X} 0 for must not set, 1 for must set, X for + * don't care. each index in the string represents a key usage: + *
      + *
    1. digitalSignature
    2. + *
    3. non-Repudiation
    4. + *
    5. keyEncipherment
    6. + *
    7. dataEncipherment
    8. + *
    9. keyAgreement
    10. + *
    11. keyCertSign
    12. + *
    13. cRLSign
    14. + *
    15. encipherOnly
    16. + *
    17. decipherOnly
    18. + *
    + */ + public List getKeyUsage() + { + COSBase base = this.dictionary.getDictionaryObject(COSName.KEY_USAGE); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + List keyUsageExtensions = new LinkedList<>(); + for (COSBase item : array) + { + if (item instanceof COSString) + { + keyUsageExtensions.add(((COSString) item).getString()); + } + } + return keyUsageExtensions; + } + return null; + } + + /** + * (Optional; PDF 1.7) A List of ASCII strings, where each string specifies an acceptable + * key-usage extension that must be present in the signing certificate. Multiple strings specify + * a range of acceptable key-usage extensions; where each string 9 characters long and each + * character is one of these values {0, 1, X} 0 for must not set, 1 for must set, X for don't + * care. each index in the string represents a key usage: + *
      + *
    1. digitalSignature
    2. + *
    3. non-Repudiation
    4. + *
    5. keyEncipherment
    6. + *
    7. dataEncipherment
    8. + *
    9. keyAgreement
    10. + *
    11. keyCertSign
    12. + *
    13. cRLSign
    14. + *
    15. encipherOnly
    16. + *
    17. decipherOnly
    18. + *
    + * + * @param keyUsageExtensions list of ASCII strings that consists only of {0, 1, X} + */ + public void setKeyUsage(List keyUsageExtensions) + { + this.dictionary.setItem(COSName.KEY_USAGE, + COSArrayList.converterToCOSArray(keyUsageExtensions)); + } + + /** + * (Optional; PDF 1.7) specifies an acceptable key-usage extension that must be presennt in the + * signing certificate for works like {@link #setKeyUsage(List)} but takes only one string + * + * @param keyUsageExtension String that consist only of {0, 1, X} + */ + public void addKeyUsage(String keyUsageExtension) + { + String allowedChars = "01X"; + for (int c = 0; c < keyUsageExtension.length(); c++) + { + if (allowedChars.indexOf(keyUsageExtension.charAt(c)) == -1) + { + throw new IllegalArgumentException("characters can only be 0, 1, X"); + } + } + COSBase base = this.dictionary.getDictionaryObject(COSName.KEY_USAGE); + COSArray array; + if (base instanceof COSArray) + { + array = (COSArray) base; + } + else + { + array = new COSArray(); + } + COSString string = new COSString(keyUsageExtension); + array.add(string); + this.dictionary.setItem(COSName.KEY_USAGE, array); + } + + /** + * works like {@link #addKeyUsage(String)} but enters each character separately + * + * @param digitalSignature char that is one of {0, 1, X} + * @param nonRepudiation char that is one of {0, 1, X} + * @param keyEncipherment char that is one of {0, 1, X} + * @param dataEncipherment char that is one of {0, 1, X} + * @param keyAgreement char that is one of {0, 1, X} + * @param keyCertSign char that is one of {0, 1, X} + * @param cRLSign char that is one of {0, 1, X} + * @param encipherOnly char that is one of {0, 1, X} + * @param decipherOnly char that is one of {0, 1, X} + */ + public void addKeyUsage(char digitalSignature, char nonRepudiation, char keyEncipherment, + char dataEncipherment, char keyAgreement, char keyCertSign, char cRLSign, + char encipherOnly, char decipherOnly) + { + StringBuilder builder = new StringBuilder(); + builder.append(digitalSignature); + builder.append(nonRepudiation); + builder.append(keyEncipherment); + builder.append(dataEncipherment); + builder.append(keyAgreement); + builder.append(keyCertSign); + builder.append(cRLSign); + builder.append(encipherOnly); + builder.append(decipherOnly); + + addKeyUsage(builder.toString()); + } + + /** + * Removes a key usage extension + * + * @param keyUsageExtension ASCII string that consists of {0, 1, X} + */ + public void removeKeyUsage(String keyUsageExtension) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.KEY_USAGE); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + array.remove(new COSString(keyUsageExtension)); + } + } + + /** + * Returns list of array of bytes of DER-encoded X.509v3 certificates + */ + public List getIssuer() + { + COSBase base = this.dictionary.getDictionaryObject(COSName.ISSUER); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + return getListOfByteArraysFromCOSArray(array); + } + return null; + } + + /** + * (Optional) A list of array of bytes containing DER-encoded X.509v3 certificates of acceptable + * issuers. If the signer’s certificate chains up to any of the specified issuers (either + * directly or indirectly), the certificate is considered acceptable for signing. + * + * @param issuers A list of byte array containing DER-encoded X.509v3 certificates + */ + public void setIssuer(List issuers) + { + COSArray array = new COSArray(); + for (byte[] issuer : issuers) + { + array.add(new COSString(issuer)); + } + this.dictionary.setItem(COSName.ISSUER, array); + } + + /** + * array of bytes containing DER-encoded X.509v3 certificates of acceptable issuers. If the + * signer’s certificate chains up to any of the specified issuers (either directly or + * indirectly), the certificate is considered acceptable for signing. + * + * @param issuer A byte array containing DER-encoded X.509v3 certificate + */ + public void addIssuer(byte[] issuer) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.ISSUER); + COSArray array; + if (base instanceof COSArray) + { + array = (COSArray) base; + } + else + { + array = new COSArray(); + } + COSString string = new COSString(issuer); + array.add(string); + this.dictionary.setItem(COSName.ISSUER, array); + } + + /** + * Removes an issuer from the issuers list + * + * @param issuer A byte array containing DER-encoded X.509v3 certificate + */ + public void removeIssuer(byte[] issuer) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.ISSUER); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + array.remove(new COSString(issuer)); + } + } + + /** + * Returns A list of array of bytes that contain Object Identifiers (OIDs) of the certificate + * policies that must be present in the signing certificate + */ + public List getOID() + { + COSBase base = this.dictionary.getDictionaryObject(COSName.OID); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + return getListOfByteArraysFromCOSArray(array); + } + return null; + } + + /** + * (Optional) A list of byte arrays that contain Object Identifiers (OIDs) of the certificate + * policies that must be present in the signing certificate. This field is only applicable if + * the value of Issuer is not empty. + * + * @param oidByteStrings list of byte arrays that contain OIDs + */ + public void setOID(List oidByteStrings) + { + COSArray array = new COSArray(); + for (byte[] oid : oidByteStrings) + { + array.add(new COSString(oid)); + } + this.dictionary.setItem(COSName.OID, array); + } + + /** + * works like {@link #setOID(List)} but for one object + * + * @param oid + */ + public void addOID(byte[] oid) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.OID); + COSArray array; + if (base instanceof COSArray) + { + array = (COSArray) base; + } + else + { + array = new COSArray(); + } + COSString string = new COSString(oid); + array.add(string); + this.dictionary.setItem(COSName.OID, array); + } + + /** + * removes an OID from the list + * + * @param oid + */ + public void removeOID(byte[] oid) + { + COSBase base = this.dictionary.getDictionaryObject(COSName.OID); + if (base instanceof COSArray) + { + COSArray array = (COSArray) base; + array.remove(new COSString(oid)); + } + } + + /** + * returns String of the URL + */ + public String getURL() + { + return this.dictionary.getString(COSName.URL); + } + + /** + * (Optional) A URL, the use for which is defined by the URLType entry. + * + * @param url String of the URL + */ + public void setURL(String url) + { + this.dictionary.setString(COSName.URL, url); + } + + /** + * A name indicating the usage of the URL entry. There are standard uses and there can be + * implementation-specific use for this URL. The following value specifies a valid standard + * usage: + *
      + *
    • Browser, The URL references content that should be displayed in a web browser to allow + * enrolling for a new credential if a matching credential is not found. The Ff attribute’s URL + * bit is ignored for this usage.
    • + *
    • ASSP, The URL references a signature web service that can be used for server-based + * signing. If the Ff attribute’s URL bit indicates that this is a required constraint, this + * implies that the credential used when signing must come from this server.
    • + *
    + * + * @return string of URL type + */ + public String getURLType() + { + return this.dictionary.getNameAsString(COSName.URL_TYPE); + } + + /** + * (Optional; PDF 1.7) A name indicating the usage of the URL entry. There are standard uses and + * there can be implementation-specific uses for this URL. The following value specifies a valid + * standard usage: + *
      + *
    • Browser, The URL references content that should be displayed in a web browser to allow + * enrolling for a new credential if a matching credential is not found. The Ff attribute’s URL + * bit is ignored for this usage.
    • + *
    • ASSP, The URL references a signature web service that can be used for server-based + * signing. If the Ff attribute’s URL bit indicates that this is a required constraint, this + * implies that the credential used when signing must come from this server.
    • + *
    + * Third parties can extend the use of this attribute with their own attribute values, which + * must conform to the guidelines specified in + * PDF + * Spec 1.7 Appendix E (PDF Name Registry) + * if urlType is not set the default is Browser for URL + * + * @param urlType String of the urlType + */ + public void setURLType(String urlType) + { + this.dictionary.setName(COSName.URL_TYPE, urlType); + } + + private static List getListOfByteArraysFromCOSArray(COSArray array) + { + List result = new LinkedList<>(); + for (COSBase item : array) + { + if (item instanceof COSString) + { + result.add(((COSString) item).getBytes()); + } + } + return result; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueMDP.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueMDP.java new file mode 100644 index 00000000000..ff46f6a1fc6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueMDP.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * This MDP dictionary is a part of the seed value dictionary and define + * if a author signature or a certification signature should be use. + * + * @author Thomas Chojecki + */ +public class PDSeedValueMDP +{ + private final COSDictionary dictionary; + + /** + * Default constructor. + */ + public PDSeedValueMDP() + { + dictionary = new COSDictionary(); + dictionary.setDirect(true); + } + + /** + * Constructor. + * + * @param dict The signature dictionary. + */ + public PDSeedValueMDP(COSDictionary dict) + { + dictionary = dict; + dictionary.setDirect(true); + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Return the P value. + * + * @return the P value + */ + public int getP() + { + return dictionary.getInt(COSName.P); + } + + /** + * Set the P value. + * + * @param p the value to be set as P + */ + public void setP(int p) + { + if (p < 0 || p > 3) + { + throw new IllegalArgumentException("Only values between 0 and 3 nare allowed."); + } + dictionary.setInt(COSName.P, p); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueTimeStamp.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueTimeStamp.java new file mode 100644 index 00000000000..1db7e7ee4d8 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSeedValueTimeStamp.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * If exist, it describe where the signature handler can request a RFC3161 + * timestamp and if it is a must have for the signature. + * + * @author Thomas Chojecki + */ +public class PDSeedValueTimeStamp +{ + private final COSDictionary dictionary; + + /** + * Default constructor. + */ + public PDSeedValueTimeStamp() + { + dictionary = new COSDictionary(); + dictionary.setDirect(true); + } + + /** + * Constructor. + * + * @param dict The signature dictionary. + */ + public PDSeedValueTimeStamp(COSDictionary dict) + { + dictionary = dict; + dictionary.setDirect(true); + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Returns the URL. + * + * @return the URL + */ + public String getURL() + { + return dictionary.getString(COSName.URL); + } + + /** + * Sets the URL. + * @param url the URL to be set as URL + */ + public void setURL(String url) + { + dictionary.setString(COSName.URL, url); + } + + /** + * Indicates if a timestamp is required. + * + * @return true if a timestamp is required + */ + public boolean isTimestampRequired() + { + return dictionary.getInt(COSName.FT, 0) != 0; + } + + /** + * Sets if a timestamp is reuqired or not. + * + * @param flag true if a timestamp is required + */ + public void setTimestampRequired(boolean flag) + { + dictionary.setInt(COSName.FT, flag ? 1 : 0); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java new file mode 100644 index 00000000000..628e0e86718 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/PDSignature.java @@ -0,0 +1,444 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Calendar; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This represents a digital signature that can be attached to a document. To learn more about + * digital signatures, read + * Digital + * Signatures in a PDF by Adobe. + * + * @author Ben Litchfield + * @author Thomas Chojecki + */ +public class PDSignature implements COSObjectable +{ + private final COSDictionary dictionary; + + /** + * A signature filter value. + */ + public static final COSName FILTER_ADOBE_PPKLITE = COSName.ADOBE_PPKLITE; + + /** + * A signature filter value. + */ + public static final COSName FILTER_ENTRUST_PPKEF = COSName.ENTRUST_PPKEF; + + /** + * A signature filter value. + */ + public static final COSName FILTER_CICI_SIGNIT = COSName.CICI_SIGNIT; + + /** + * A signature filter value. + */ + public static final COSName FILTER_VERISIGN_PPKVS = COSName.VERISIGN_PPKVS; + + /** + * A signature subfilter value. + */ + public static final COSName SUBFILTER_ADBE_X509_RSA_SHA1 = COSName.ADBE_X509_RSA_SHA1; + + /** + * A signature subfilter value. + */ + public static final COSName SUBFILTER_ADBE_PKCS7_DETACHED = COSName.ADBE_PKCS7_DETACHED; + + /** + * A signature subfilter value. + */ + public static final COSName SUBFILTER_ETSI_CADES_DETACHED = COSName.getPDFName("ETSI.CAdES.detached"); + + /** + * A signature subfilter value. + */ + public static final COSName SUBFILTER_ADBE_PKCS7_SHA1 = COSName.ADBE_PKCS7_SHA1; + + /** + * Default constructor. + */ + public PDSignature() + { + dictionary = new COSDictionary(); + dictionary.setItem(COSName.TYPE, COSName.SIG); + } + + /** + * Constructor. + * + * @param dict The signature dictionary. + */ + public PDSignature(COSDictionary dict) + { + dictionary = dict; + } + + /** + * Convert this standard java object to a COS dictionary. + * + * @return The COS dictionary that matches this Java object. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Set the dictionary type. + * + * @param type is the dictionary type. + */ + public void setType(COSName type) + { + dictionary.setItem(COSName.TYPE, type); + } + + /** + * Set the filter. + * + * @param filter the filter to be used + */ + public void setFilter(COSName filter) + { + dictionary.setItem(COSName.FILTER, filter); + } + + /** + * Set a subfilter that specify the signature that should be used. + * + * @param subfilter the subfilter that shall be used. + */ + public void setSubFilter(COSName subfilter) + { + dictionary.setItem(COSName.SUB_FILTER, subfilter); + } + + /** + * Sets the name of the person or authority signing the document. According to the PDF + * specification, this value should be used only when it is not possible to extract the name + * from the signature. + * + * @param name the name to be used + */ + public void setName(String name) + { + dictionary.setString(COSName.NAME, name); + } + + /** + * Sets the CPU host name or physical location of the signing. + * + * @param location the location to be used + */ + public void setLocation(String location) + { + dictionary.setString(COSName.LOCATION, location); + } + + /** + * Sets the reason for the signing, such as (I agree...). + * + * @param reason the reason to be used + */ + public void setReason(String reason) + { + dictionary.setString(COSName.REASON, reason); + } + + /** + * Sets the contact info provided by the signer to enable a recipient to contact the signer to + * verify the signature, e.g. a phone number. + * + * @param contactInfo the contact info to be used + */ + public void setContactInfo(String contactInfo) + { + dictionary.setString(COSName.CONTACT_INFO, contactInfo); + } + + /** + * Set the sign date. + * + * @param cal the date to be used as sign date + */ + public void setSignDate(Calendar cal) + { + dictionary.setDate(COSName.M, cal); + } + + /** + * Returns the filter. + * @return the filter + */ + public String getFilter() + { + return dictionary.getNameAsString(COSName.FILTER); + } + + /** + * Returns the subfilter. + * + * @return the subfilter + */ + public String getSubFilter() + { + return dictionary.getNameAsString(COSName.SUB_FILTER); + } + + /** + * Returns the name of the person or authority signing the document. According to the PDF + * specification, this value should be used only when it is not possible to extract the name + * from the signature. + * + * @return the name + */ + public String getName() + { + return dictionary.getString(COSName.NAME); + } + + /** + * Returns the CPU host name or physical location of the signing. + * + * @return the location + */ + public String getLocation() + { + return dictionary.getString(COSName.LOCATION); + } + + /** + * Returns the reason for the signing, such as (I agree...). + * + * @return the reason + */ + public String getReason() + { + return dictionary.getString(COSName.REASON); + } + + /** + * Returns the contact info provided by the signer to enable a recipient to contact the signer + * to verify the signature, e.g. a phone number. + * + * @return the contact info + */ + public String getContactInfo() + { + return dictionary.getString(COSName.CONTACT_INFO); + } + + /** + * Returns the sign date. + * + * @return the sign date + */ + public Calendar getSignDate() + { + return dictionary.getDate(COSName.M); + } + + /** + * Sets the byte range. + * + * @param range the byte range to be used + */ + public void setByteRange(int[] range) + { + if (range.length!=4) + { + return; + } + COSArray ary = new COSArray(); + for ( int i : range ) + { + ary.add(COSInteger.get(i)); + } + + dictionary.setItem(COSName.BYTERANGE, ary); + ary.setDirect(true); + } + + /** + * Read out the byterange from the file. + * + * @return a integer array with the byterange + */ + public int[] getByteRange() + { + COSArray byteRange = (COSArray)dictionary.getDictionaryObject(COSName.BYTERANGE); + int[] ary = new int[byteRange.size()]; + for (int i = 0; i and ) + else if(buffer[c-1]==0x3E || buffer[c-1]==0x29) + { + byteOS.write(buffer, 0, c-1); + } + else + { + byteOS.write(buffer, 0, c); + } + } + fis.close(); + + return COSString.parseHex(byteOS.toString("ISO-8859-1")).getBytes(); + } + + /** + * Sets the contents. + * + * @param bytes contents to be used + */ + public void setContents(byte[] bytes) + { + COSString string = new COSString(bytes); + string.setForceHexForm(true); + dictionary.setItem(COSName.CONTENTS, string); + } + + /** + * Return the signed content of the document. This is not a PDF file, nor is it the PDF file + * before signing, it is the byte sequence made of the input minus the area where the signature + * bytes will be. See "The ByteRange and signature value" in the document + * Digital + * Signatures in a PDF. + * + * @param pdfFile The signed pdf file as InputStream + * @return a byte array containing only the signed part of the content + * @throws IOException if the pdfFile can't be read + */ + public byte[] getSignedContent(InputStream pdfFile) throws IOException + { + try (COSFilterInputStream fis = new COSFilterInputStream(pdfFile, getByteRange())) + { + return fis.toByteArray(); + } + } + + /** + * Return the signed content of the document. This is not a PDF file, nor is it the PDF file + * before signing, it is the byte sequence made of the input minus the area where the signature + * bytes will be. See "The ByteRange and signature value" in the document + * Digital + * Signatures in a PDF. + * + * @param pdfFile The signed pdf file as byte array + * @return a byte array containing only the signed part of the content + * @throws IOException if the pdfFile can't be read + */ + public byte[] getSignedContent(byte[] pdfFile, int offset, int length) throws IOException + { + try (COSFilterInputStream fis = new COSFilterInputStream(pdfFile, offset, length, getByteRange())) + { + return fis.toByteArray(); + } + } + + public byte[] getSignedContent(byte[] pdfFile) throws IOException + { + return getSignedContent(pdfFile, 0, pdfFile.length); + } + /** + * PDF signature build dictionary. Provides informations about the signature handler. + * + * @return the pdf signature build dictionary. + */ + public PDPropBuild getPropBuild() + { + PDPropBuild propBuild = null; + COSDictionary propBuildDic = (COSDictionary)dictionary.getDictionaryObject(COSName.PROP_BUILD); + if (propBuildDic != null) + { + propBuild = new PDPropBuild(propBuildDic); + } + return propBuild; + } + + /** + * PDF signature build dictionary. Provides informations about the signature handler. + * + * @param propBuild the prop build + */ + public void setPropBuild(PDPropBuild propBuild) + { + dictionary.setItem(COSName.PROP_BUILD, propBuild); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface.java new file mode 100644 index 00000000000..4746acd6959 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Providing an interface for accessing necessary functions for signing a PDF document. + * + * @author Thomas Chojecki + */ +public interface SignatureInterface +{ + /** + * Creates a cms signature for the given content + * + * @param content is the content as a (Filter)InputStream + * @return signature as a byte array + */ + byte[] sign(InputStream content) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureOptions.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureOptions.java new file mode 100644 index 00000000000..d7671c68ddd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureOptions.java @@ -0,0 +1,169 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.io.RandomAccessBuffer; +import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.pdfparser.PDFParser; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible.PDVisibleSigProperties; + +/** + * This contains the visual signature as a COSDocument, its preferred size and the page. + */ +public class SignatureOptions implements Closeable +{ + private COSDocument visualSignature; + private int preferredSignatureSize; + private int pageNo; + + // the pdf to be read + // this is done analog to PDDocument + private RandomAccessRead pdfSource = null; + + public static final int DEFAULT_SIGNATURE_SIZE = 0x2500; + + /** + * Creates the default signature options. + */ + public SignatureOptions() + { + pageNo = 0; + } + + /** + * Set the 0-based page number. + * + * @param pageNo the page number + */ + public void setPage(int pageNo) + { + this.pageNo = pageNo; + } + + /** + * Get the 0-based page number. + * + * @return the page number + */ + public int getPage() + { + return pageNo; + } + + /** + * Reads the visual signature from the given file. + * + * @param file the file containing the visual signature + * @throws IOException when something went wrong during parsing + */ + public void setVisualSignature(File file) throws IOException + { + initFromRandomAccessRead(new RandomAccessBufferedFileInputStream(file)); + } + + /** + * Reads the visual signature from the given input stream. + * + * @param is the input stream containing the visual signature + * @throws IOException when something went wrong during parsing + */ + public void setVisualSignature(InputStream is) throws IOException + { + initFromRandomAccessRead(new RandomAccessBuffer(is)); + } + + private void initFromRandomAccessRead(RandomAccessRead rar) throws IOException + { + pdfSource = rar; + PDFParser parser = new PDFParser(pdfSource); + parser.parse(); + visualSignature = parser.getDocument(); + } + + /** + * Reads the visual signature from the given visual signature properties + * + * @param visSignatureProperties the PDVisibleSigProperties object containing the + * visual signature + * + * @throws IOException when something went wrong during parsing + */ + public void setVisualSignature(PDVisibleSigProperties visSignatureProperties) throws IOException + { + setVisualSignature(visSignatureProperties.getVisibleSignature()); + } + + /** + * Get the visual signature. + * + * @return the visual signature + */ + public COSDocument getVisualSignature() + { + return visualSignature; + } + + /** + * Get the preferred size of the signature. + * + * @return the preferred size of the signature in bytes. + */ + public int getPreferredSignatureSize() + { + return preferredSignatureSize; + } + + /** + * Set the preferred size of the signature. + * + * @param size the size of the signature in bytes. Only values above 0 will be considered. + */ + public void setPreferredSignatureSize(int size) + { + if (size > 0) + { + preferredSignatureSize = size; + } + } + + /** + * Closes the visual signature COSDocument, if any. Do not call this before you're saved your + * signed PDF document, or saving will fail because COSStream objects held both by the + * COSDocument and by the signed document would no longer be available. + * + * @throws IOException if the document could not be closed + */ + @Override + public void close() throws IOException + { + if (visualSignature != null) + { + visualSignature.close(); + } + if (pdfSource != null) + { + pdfSource.close(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SigningSupport.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SigningSupport.java new file mode 100644 index 00000000000..6b35025d535 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/SigningSupport.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature; + +import org.apache.pdfbox.pdfwriter.COSWriter; + +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; + +/** + * Class to be used when creating PDF signatures externally. COSWriter is used to obtain data to be + * signed and set the resulted CMS signature. + * + */ +public class SigningSupport implements ExternalSigningSupport, Closeable +{ + private COSWriter cosWriter; + + public SigningSupport(COSWriter cosWriter) + { + this.cosWriter = cosWriter; + } + + @Override + public InputStream getContent() throws IOException + { + return cosWriter.getDataToSign(); + } + + @Override + public void setSignature(byte[] signature) throws IOException + { + cosWriter.writeExternalSignature(signature); + } + + @Override + public void close() throws IOException + { + if (cosWriter != null) + { + try + { + cosWriter.close(); + } + finally + { + cosWriter = null; + } + } + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/digitalsignature/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/digitalsignature/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateBuilder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateBuilder.java new file mode 100644 index 00000000000..7d90ea8627d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateBuilder.java @@ -0,0 +1,287 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible; + +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; + +/** + * That class builds visible signature template which will be added in our PDF document. + * @author Vakhtang Koroghlishvili + */ +public interface PDFTemplateBuilder +{ + /** + * In order to create Affine Transform, using parameters. + * @param affineTransform + */ + void createAffineTransform(AffineTransform affineTransform); + + /** + * Creates specified size page. + * + * @param properties + */ + void createPage(PDVisibleSignDesigner properties); + + /** + * Creates template using page. + * + * @param page + * @throws IOException + */ + void createTemplate(PDPage page) throws IOException; + + /** + * Creates Acro forms in the template. + * + * @param template + */ + void createAcroForm(PDDocument template); + + /** + * Creates signature fields. + * + * @param acroForm + * @throws IOException + */ + void createSignatureField(PDAcroForm acroForm) throws IOException; + + /** + * Creates the signature with the given name and assign it to the signature field parameter and + * assign the page parameter to the widget. + * + * @param pdSignatureField + * @param page + * @param signerName the name of the person or authority signing the document. According to the + * PDF specification, this value should be used only when it is not possible to extract the name + * from the signature. + * @throws IOException + */ + void createSignature(PDSignatureField pdSignatureField, PDPage page, String signerName) + throws IOException; + + /** + * Create AcroForm Dictionary. + * + * @param acroForm + * @param signatureField + * @throws IOException + */ + void createAcroFormDictionary(PDAcroForm acroForm, PDSignatureField signatureField) + throws IOException; + + /** + * Creates SignatureRectangle. + * + * @param signatureField + * @param properties + * @throws IOException + */ + void createSignatureRectangle(PDSignatureField signatureField, + PDVisibleSignDesigner properties) throws IOException; + + /** + * Creates procSetArray of PDF,Text,ImageB,ImageC,ImageI. + */ + void createProcSetArray(); + + /** + * Creates signature image. + * @param template + * @param image + * @throws IOException + */ + void createSignatureImage(PDDocument template, BufferedImage image) throws IOException; + + /** + * An array of four numbers in the form coordinate system, giving the coordinates of the left, + * bottom, right, and top edges, respectively, of the form XObject’s bounding box. These + * boundaries shall be used to clip the form XObject and to determine its size for caching. + * + * @param params + */ + void createFormatterRectangle(int[] params); + + /** + * + * @param template + */ + void createHolderFormStream(PDDocument template); + + /** + * Creates resources of form + */ + void createHolderFormResources(); + + /** + * Creates Form + * + * @param holderFormResources + * @param holderFormStream + * @param bbox + */ + void createHolderForm(PDResources holderFormResources, PDStream holderFormStream, + PDRectangle bbox); + + /** + * Creates appearance dictionary + * + * @param holderForml + * @param signatureField + * @throws IOException + */ + void createAppearanceDictionary(PDFormXObject holderForml, + PDSignatureField signatureField) throws IOException; + + /** + * + * @param template + */ + void createInnerFormStream(PDDocument template); + + /** + * Creates InnerForm + */ + void createInnerFormResource(); + + /** + * + * @param innerFormResources + * @param innerFormStream + * @param bbox + */ + void createInnerForm(PDResources innerFormResources, PDStream innerFormStream, PDRectangle bbox); + + /** + * + * @param innerForm + * @param holderFormResources + */ + void insertInnerFormToHolderResources(PDFormXObject innerForm, + PDResources holderFormResources); + + /** + * + * @param template + */ + void createImageFormStream(PDDocument template); + + /** + * Create resource of image form + */ + void createImageFormResources(); + + /** + * Creates Image form + * + * @param imageFormResources + * @param innerFormResource + * @param imageFormStream + * @param bbox + * @param affineTransform + * @param img + * @throws IOException + */ + void createImageForm(PDResources imageFormResources, PDResources innerFormResource, + PDStream imageFormStream, PDRectangle bbox, AffineTransform affineTransform, + PDImageXObject img) throws IOException; + + /** + * Creates the background layer form (n0). + * + * @param innerFormResource + * @param bbox + * @throws IOException + */ + void createBackgroundLayerForm(PDResources innerFormResource, PDRectangle bbox) + throws IOException; + + /** + * Inject procSetArray + * + * @param innerForm + * @param page + * @param innerFormResources + * @param imageFormResources + * @param holderFormResources + * @param procSet + */ + void injectProcSetArray(PDFormXObject innerForm, PDPage page, + PDResources innerFormResources, PDResources imageFormResources, + PDResources holderFormResources, COSArray procSet); + + /** + * injects appearance streams + * + * @param holderFormStream + * @param innerFormStream + * @param imageFormStream + * @param imageFormName + * @param imageName + * @param innerFormName + * @param properties + * @throws IOException + */ + void injectAppearanceStreams(PDStream holderFormStream, PDStream innerFormStream, + PDStream imageFormStream, COSName imageFormName, COSName imageName, + COSName innerFormName, PDVisibleSignDesigner properties) throws IOException; + + /** + * just to create visible signature + * + * @param template + */ + void createVisualSignature(PDDocument template); + + /** + * adds Widget Dictionary + * + * @param signatureField + * @param holderFormResources + * @throws IOException + */ + void createWidgetDictionary(PDSignatureField signatureField, + PDResources holderFormResources) throws IOException; + + /** + * + * @return - PDF template Structure + */ + PDFTemplateStructure getStructure(); + + /** + * Closes template + * + * @param template + * @throws IOException + */ + void closeTemplate(PDDocument template) throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java new file mode 100644 index 00000000000..ce8b4424d7c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateCreator.java @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible; + +import java.awt.geom.AffineTransform; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdfwriter.COSWriter; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; + +/** + * Class to build PDF template. + * + * @author Vakhtang Koroghlishvili + */ +public class PDFTemplateCreator +{ + private final PDFTemplateBuilder pdfBuilder; + private static final Log LOG = LogFactory.getLog(PDFTemplateCreator.class); + + /** + * Constructor. + * + * @param templateBuilder + */ + public PDFTemplateCreator(PDFTemplateBuilder templateBuilder) + { + pdfBuilder = templateBuilder; + } + + /** + * Returns the PDFTemplateStructure object. + * + */ + public PDFTemplateStructure getPdfStructure() + { + return pdfBuilder.getStructure(); + } + + /** + * Build a PDF with a visible signature step by step, and return it as a stream. + * + * @param properties + * @return InputStream + * @throws IOException + */ + public InputStream buildPDF(PDVisibleSignDesigner properties) throws IOException + { + LOG.info("pdf building has been started"); + PDFTemplateStructure pdfStructure = pdfBuilder.getStructure(); + + // we create array of [Text, ImageB, ImageC, ImageI] + pdfBuilder.createProcSetArray(); + + //create page + pdfBuilder.createPage(properties); + PDPage page = pdfStructure.getPage(); + + //create template + pdfBuilder.createTemplate(page); + PDDocument template = pdfStructure.getTemplate(); + + //create /AcroForm + pdfBuilder.createAcroForm(template); + PDAcroForm acroForm = pdfStructure.getAcroForm(); + + // AcroForm contains signature fields + pdfBuilder.createSignatureField(acroForm); + PDSignatureField pdSignatureField = pdfStructure.getSignatureField(); + + // create signature + //TODO + // The line below has no effect with the CreateVisibleSignature example. + // The signature field is needed as a "holder" for the /AP tree, + // but the /P and /V PDSignatureField entries are ignored by PDDocument.addSignature + pdfBuilder.createSignature(pdSignatureField, page, ""); + + // that is /AcroForm/DR entry + pdfBuilder.createAcroFormDictionary(acroForm, pdSignatureField); + + // create AffineTransform + pdfBuilder.createAffineTransform(properties.getTransform()); + AffineTransform transform = pdfStructure.getAffineTransform(); + + // rectangle, formatter, image. /AcroForm/DR/XObject contains that form + pdfBuilder.createSignatureRectangle(pdSignatureField, properties); + pdfBuilder.createFormatterRectangle(properties.getFormatterRectangleParameters()); + PDRectangle bbox = pdfStructure.getFormatterRectangle(); + pdfBuilder.createSignatureImage(template, properties.getImage()); + + // create form stream, form and resource. + pdfBuilder.createHolderFormStream(template); + PDStream holderFormStream = pdfStructure.getHolderFormStream(); + pdfBuilder.createHolderFormResources(); + PDResources holderFormResources = pdfStructure.getHolderFormResources(); + pdfBuilder.createHolderForm(holderFormResources, holderFormStream, bbox); + + // that is /AP entry the appearance dictionary. + pdfBuilder.createAppearanceDictionary(pdfStructure.getHolderForm(), pdSignatureField); + + // inner form stream, form and resource (hlder form containts inner form) + pdfBuilder.createInnerFormStream(template); + pdfBuilder.createInnerFormResource(); + PDResources innerFormResource = pdfStructure.getInnerFormResources(); + pdfBuilder.createInnerForm(innerFormResource, pdfStructure.getInnerFormStream(), bbox); + PDFormXObject innerForm = pdfStructure.getInnerForm(); + + // inner form must be in the holder form as we wrote + pdfBuilder.insertInnerFormToHolderResources(innerForm, holderFormResources); + + // Image form is in this structure: /AcroForm/DR/FRM/Resources/XObject/n2 + pdfBuilder.createImageFormStream(template); + PDStream imageFormStream = pdfStructure.getImageFormStream(); + pdfBuilder.createImageFormResources(); + PDResources imageFormResources = pdfStructure.getImageFormResources(); + pdfBuilder.createImageForm(imageFormResources, innerFormResource, imageFormStream, bbox, + transform, pdfStructure.getImage()); + + pdfBuilder.createBackgroundLayerForm(innerFormResource, bbox); + + // now inject procSetArray + pdfBuilder.injectProcSetArray(innerForm, page, innerFormResource, imageFormResources, + holderFormResources, pdfStructure.getProcSet()); + + COSName imageFormName = pdfStructure.getImageFormName(); + COSName imageName = pdfStructure.getImageName(); + COSName innerFormName = pdfStructure.getInnerFormName(); + + // now create Streams of AP + pdfBuilder.injectAppearanceStreams(holderFormStream, imageFormStream, imageFormStream, + imageFormName, imageName, innerFormName, properties); + pdfBuilder.createVisualSignature(template); + pdfBuilder.createWidgetDictionary(pdSignatureField, holderFormResources); + + InputStream in = getVisualSignatureAsStream(pdfStructure.getVisualSignature()); + LOG.info("stream returning started, size= " + in.available()); + + // we must close the document + template.close(); + + // return result of the stream + return in; + } + + private InputStream getVisualSignatureAsStream(COSDocument visualSignature) throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (COSWriter writer = new COSWriter(baos)) + { + writer.write(visualSignature); + } + return new ByteArrayInputStream(baos.toByteArray()); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateStructure.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateStructure.java new file mode 100644 index 00000000000..167012fd0da --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDFTemplateStructure.java @@ -0,0 +1,588 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible; + +import java.awt.geom.AffineTransform; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; + +/** + * Structure of PDF document with visible signature. + * + * @author Vakhtang Koroghlishvili + */ +public class PDFTemplateStructure +{ + private PDPage page; + private PDDocument template; + private PDAcroForm acroForm; + private PDSignatureField signatureField; + private PDSignature pdSignature; + private COSDictionary acroFormDictionary; + private PDRectangle signatureRectangle; + private AffineTransform affineTransform; + private COSArray procSet; + private PDImageXObject image; + private PDRectangle formatterRectangle; + private PDStream holderFormStream; + private PDResources holderFormResources; + private PDFormXObject holderForm; + private PDAppearanceDictionary appearanceDictionary; + private PDStream innerFormStream; + private PDResources innerFormResources; + private PDFormXObject innerForm; + private PDStream imageFormStream; + private PDResources imageFormResources; + private List acroFormFields; + private COSName innerFormName; + private COSName imageFormName; + private COSName imageName; + private COSDocument visualSignature; + private PDFormXObject imageForm; + private COSDictionary widgetDictionary; + + // no constructor + + /** + * Returns document page. + * @return the page + */ + public PDPage getPage() + { + return page; + } + + /** + * Sets document page + * @param page + */ + public void setPage(PDPage page) + { + this.page = page; + } + + /** + * Gets PDDocument template. + * This represents a digital signature + * that can be attached to a document + * @return the template + */ + public PDDocument getTemplate() + { + return template; + } + + /** + * Wets PDDocument template. + * This represents a digital signature + * that can be attached to a document + * @param template + */ + public void setTemplate(PDDocument template) + { + this.template = template; + } + + /** + * Gets AcroForm + * @return the AcroForm + */ + public PDAcroForm getAcroForm() + { + return acroForm; + } + + /** + * Sets AcroForm + * @param acroForm + */ + public void setAcroForm(PDAcroForm acroForm) + { + this.acroForm = acroForm; + } + + /** + * Gets Signature field + * @return the signature field + */ + public PDSignatureField getSignatureField() + { + return signatureField; + } + + /** + * Sets signature field + * @param signatureField + */ + public void setSignatureField(PDSignatureField signatureField) + { + this.signatureField = signatureField; + } + + /** + * Gets PDSignature + * @return the signature + */ + public PDSignature getPdSignature() + { + return pdSignature; + } + + /** + * Sets PDSignatureField + * @param pdSignature + */ + public void setPdSignature(PDSignature pdSignature) + { + this.pdSignature = pdSignature; + } + + /** + * Gets Dictionary of AcroForm. Thats /DR + * entry in the AcroForm + * @return the AcroForm's dictionary + */ + public COSDictionary getAcroFormDictionary() + { + return acroFormDictionary; + } + + /** + * Acroform have its Dictionary, so we here set + * the Dictionary which is in this location: + * AcroForm/DR + * @param acroFormDictionary + */ + public void setAcroFormDictionary(COSDictionary acroFormDictionary) + { + this.acroFormDictionary = acroFormDictionary; + } + + /** + * Gets SignatureRectangle + * @return the rectangle for the signature + */ + public PDRectangle getSignatureRectangle() + { + return signatureRectangle; + } + + /** + * Sets SignatureRectangle + * @param signatureRectangle + */ + public void setSignatureRectangle(PDRectangle signatureRectangle) + { + this.signatureRectangle = signatureRectangle; + } + + /** + * Gets AffineTransform + * @return the AffineTransform + */ + public AffineTransform getAffineTransform() + { + return affineTransform; + } + + /** + * Sets AffineTransform + * @param affineTransform + */ + public void setAffineTransform(AffineTransform affineTransform) + { + this.affineTransform = affineTransform; + } + + /** + * Gets ProcSet Array + * @return the PorocSet array + */ + public COSArray getProcSet() + { + return procSet; + } + + /** + * Sets ProcSet Array + * @param procSet + */ + public void setProcSet(COSArray procSet) + { + this.procSet = procSet; + } + + /** + * Gets the image of visible signature + * @return the image making up the visible signature + */ + public PDImageXObject getImage() + { + return image; + } + + /** + * Sets the image of visible signature + * @param image Image XObject + */ + public void setImage(PDImageXObject image) + { + this.image = image; + } + + /** + * Gets formatter rectangle + * @return the formatter rectangle + */ + public PDRectangle getFormatterRectangle() + { + return formatterRectangle; + } + + /** + * Sets formatter rectangle + * @param formatterRectangle + */ + public void setFormatterRectangle(PDRectangle formatterRectangle) + { + this.formatterRectangle = formatterRectangle; + } + + /** + * Sets HolderFormStream + * @return the holder form stream + */ + public PDStream getHolderFormStream() + { + return holderFormStream; + } + + /** + * Sets stream of holder form Stream + * @param holderFormStream + */ + public void setHolderFormStream(PDStream holderFormStream) + { + this.holderFormStream = holderFormStream; + } + + /** + * Gets Holder form. + * That form is here AcroForm/DR/XObject/{holder form name} + * By default, name stars with FRM. We also add number of form + * to the name. + * @return the holder form + */ + public PDFormXObject getHolderForm() + { + return holderForm; + } + + /** + * In the structure, form will be contained by XObject in the AcroForm/DR/ + * @param holderForm + */ + public void setHolderForm(PDFormXObject holderForm) + { + this.holderForm = holderForm; + } + + /** + * Gets Holder form resources + * @return the holder form's resources + */ + public PDResources getHolderFormResources() + { + return holderFormResources; + } + + /** + * Sets holder form resources + * @param holderFormResources + */ + public void setHolderFormResources(PDResources holderFormResources) + { + this.holderFormResources = holderFormResources; + } + + /** + * Gets AppearanceDictionary + * That is /AP entry the appearance dictionary. + * @return the Appearance Dictionary + */ + public PDAppearanceDictionary getAppearanceDictionary() + { + return appearanceDictionary; + } + + /** + * Sets AppearanceDictionary + * That is /AP entry the appearance dictionary. + * @param appearanceDictionary + */ + public void setAppearanceDictionary(PDAppearanceDictionary appearanceDictionary) + { + this.appearanceDictionary = appearanceDictionary; + } + + /** + * Gets Inner form Stream. + * @return the inner form stream + */ + public PDStream getInnerFormStream() + { + return innerFormStream; + } + + /** + * Sets inner form stream + * @param innerFormStream + */ + public void setInnterFormStream(PDStream innerFormStream) + { + this.innerFormStream = innerFormStream; + } + + /** + * Gets inner form Resource + * @return the inner form's resources + */ + public PDResources getInnerFormResources() + { + return innerFormResources; + } + + /** + * Sets inner form resource + * @param innerFormResources + */ + public void setInnerFormResources(PDResources innerFormResources) + { + this.innerFormResources = innerFormResources; + } + + /** + * Gets inner form that is in this location: + * AcroForm/DR/XObject/{holder form name}/Resources/XObject/{inner name} + * By default inner form name starts with "n". Then we add number of form + * to the name. + * @return the inner form + */ + public PDFormXObject getInnerForm() + { + return innerForm; + } + + /** + * sets inner form to this location: + * AcroForm/DR/XObject/{holder form name}/Resources/XObject/{destination} + * @param innerForm + */ + public void setInnerForm(PDFormXObject innerForm) + { + this.innerForm = innerForm; + } + + /** + * Gets name of inner form + * @return the inner forms's name + */ + public COSName getInnerFormName() + { + return innerFormName; + } + + /** + * Sets inner form name + * @param innerFormName + */ + public void setInnerFormName(COSName innerFormName) + { + this.innerFormName = innerFormName; + } + + /** + * Gets Image form stream + * @return the image form's stream + */ + public PDStream getImageFormStream() + { + return imageFormStream; + } + + /** + * Sets image form stream + * @param imageFormStream + */ + public void setImageFormStream(PDStream imageFormStream) + { + this.imageFormStream = imageFormStream; + } + + /** + * Gets image form resources + * @return the image form's resources + */ + public PDResources getImageFormResources() + { + return imageFormResources; + } + + /** + * Sets image form resource + * @param imageFormResources + */ + public void setImageFormResources(PDResources imageFormResources) + { + this.imageFormResources = imageFormResources; + } + + /** + * Gets Image form. Image form is in this structure: + * /AcroForm/DR/{holder form}/Resources/XObject /{inner form} + * /Resources/XObject/{image form name}. + * @return the image form + */ + public PDFormXObject getImageForm() + { + return imageForm; + } + + /** + * Sets Image form. Image form will be in this structure: + * /AcroForm/DR/{holder form}/Resources/XObject /{inner form} + * /Resources/XObject/{image form name}. By default we start + * image form name with "img". Then we add number of image + * form to the form name. + * Sets image form + * @param imageForm + */ + public void setImageForm(PDFormXObject imageForm) + { + this.imageForm = imageForm; + } + + /** + * Gets image form name + * @return the image form's name + */ + public COSName getImageFormName() + { + return imageFormName; + } + + /** + * Sets image form name + * @param imageFormName + */ + public void setImageFormName(COSName imageFormName) + { + this.imageFormName = imageFormName; + } + + /** + * Gets visible signature image name + * @return the visible signature's image name + */ + public COSName getImageName() + { + return imageName; + } + + /** + * Sets visible signature image name + * @param imageName + */ + public void setImageName(COSName imageName) + { + this.imageName = imageName; + } + + /** + * Gets COSDocument of visible Signature. + * @see org.apache.pdfbox.cos.COSDocument + * @return the visual signature + */ + public COSDocument getVisualSignature() + { + return visualSignature; + } + + /** + * + * Sets COSDocument of visible Signature. + * @see org.apache.pdfbox.cos.COSDocument + * @param visualSignature + */ + public void setVisualSignature(COSDocument visualSignature) + { + this.visualSignature = visualSignature; + } + + /** + * Gets acroFormFields + * @return the AcroForm fields + */ + public List getAcroFormFields() + { + return acroFormFields; + } + + /** + * Sets acroFormFields + * @param acroFormFields + */ + public void setAcroFormFields(List acroFormFields) + { + this.acroFormFields = acroFormFields; + } + + /** + * Gets Widget Dictionary. + * + * @return the widget dictionary + */ + public COSDictionary getWidgetDictionary() + { + return widgetDictionary; + } + + /** + * Sets Widget Dictionary. + * + * @param widgetDictionary + */ + public void setWidgetDictionary(COSDictionary widgetDictionary) + { + this.widgetDictionary = widgetDictionary; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java new file mode 100644 index 00000000000..581cd6be1c9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigBuilder.java @@ -0,0 +1,404 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible; + +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.PDStream; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; + +/** + * Implementation of {@link PDFTemplateBuilder}. This builds the signature PDF but doesn't keep the + * elements, these are kept in its PDF template structure. + * + * @author Vakhtang Koroghlishvili + */ +public class PDVisibleSigBuilder implements PDFTemplateBuilder +{ + private final PDFTemplateStructure pdfStructure; + private static final Log LOG = LogFactory.getLog(PDVisibleSigBuilder.class); + + /** + * Constructor, creates PDF template structure. + */ + public PDVisibleSigBuilder() + { + pdfStructure = new PDFTemplateStructure(); + LOG.info("PDF Structure has been created"); + } + + @Override + public void createPage(PDVisibleSignDesigner properties) + { + PDPage page = new PDPage(new PDRectangle(properties.getPageWidth(), + properties.getPageHeight())); + pdfStructure.setPage(page); + LOG.info("PDF page has been created"); + } + + /** + * Creates a PDDocument and adds the page parameter to it and keeps this as a template in the + * PDF template Structure. + * + * @param page + * @throws IOException + */ + @Override + public void createTemplate(PDPage page) throws IOException + { + PDDocument template = new PDDocument(); + template.addPage(page); + pdfStructure.setTemplate(template); + } + + @Override + public void createAcroForm(PDDocument template) + { + PDAcroForm theAcroForm = new PDAcroForm(template); + template.getDocumentCatalog().setAcroForm(theAcroForm); + pdfStructure.setAcroForm(theAcroForm); + LOG.info("AcroForm has been created"); + } + + @Override + public PDFTemplateStructure getStructure() + { + return pdfStructure; + } + + @Override + public void createSignatureField(PDAcroForm acroForm) throws IOException + { + PDSignatureField sf = new PDSignatureField(acroForm); + pdfStructure.setSignatureField(sf); + LOG.info("Signature field has been created"); + } + + @Override + public void createSignature(PDSignatureField pdSignatureField, PDPage page, String signerName) + throws IOException + { + PDSignature pdSignature = new PDSignature(); + PDAnnotationWidget widget = pdSignatureField.getWidgets().get(0); + pdSignatureField.setValue(pdSignature); + widget.setPage(page); + page.getAnnotations().add(widget); + if (!signerName.isEmpty()) + { + pdSignature.setName(signerName); + } + pdfStructure.setPdSignature(pdSignature); + LOG.info("PDSignature has been created"); + } + + @Override + public void createAcroFormDictionary(PDAcroForm acroForm, PDSignatureField signatureField) + throws IOException + { + @SuppressWarnings("unchecked") + List acroFormFields = acroForm.getFields(); + COSDictionary acroFormDict = acroForm.getCOSObject(); + acroForm.setSignaturesExist(true); + acroForm.setAppendOnly(true); + acroFormDict.setDirect(true); + acroFormFields.add(signatureField); + // WTF sylfaen? + acroForm.setDefaultAppearance("/sylfaen 0 Tf 0 g"); + pdfStructure.setAcroFormFields(acroFormFields); + pdfStructure.setAcroFormDictionary(acroFormDict); + LOG.info("AcroForm dictionary has been created"); + } + + @Override + public void createSignatureRectangle(PDSignatureField signatureField, + PDVisibleSignDesigner properties) throws IOException + { + + PDRectangle rect = new PDRectangle(); + rect.setUpperRightX(properties.getxAxis() + properties.getWidth()); + rect.setUpperRightY(properties.getTemplateHeight() - properties.getyAxis()); + rect.setLowerLeftY(properties.getTemplateHeight() - properties.getyAxis() - + properties.getHeight()); + rect.setLowerLeftX(properties.getxAxis()); + signatureField.getWidgets().get(0).setRectangle(rect); + pdfStructure.setSignatureRectangle(rect); + LOG.info("Signature rectangle has been created"); + } + + @Override + public void createAffineTransform(AffineTransform affineTransform) + { + pdfStructure.setAffineTransform(affineTransform); + LOG.info("Matrix has been added"); + } + + @Override + public void createProcSetArray() + { + COSArray procSetArr = new COSArray(); + procSetArr.add(COSName.getPDFName("PDF")); + procSetArr.add(COSName.getPDFName("Text")); + procSetArr.add(COSName.getPDFName("ImageB")); + procSetArr.add(COSName.getPDFName("ImageC")); + procSetArr.add(COSName.getPDFName("ImageI")); + pdfStructure.setProcSet(procSetArr); + LOG.info("ProcSet array has been created"); + } + + @Override + public void createSignatureImage(PDDocument template, BufferedImage image) throws IOException + { + pdfStructure.setImage(LosslessFactory.createFromImage(template, image)); + LOG.info("Visible Signature Image has been created"); + } + + @Override + public void createFormatterRectangle(int[] params) + { + PDRectangle formatterRectangle = new PDRectangle(); + formatterRectangle.setLowerLeftX(Math.min(params[0],params[2])); + formatterRectangle.setLowerLeftY(Math.min(params[1],params[3])); + formatterRectangle.setUpperRightX(Math.max(params[0],params[2])); + formatterRectangle.setUpperRightY(Math.max(params[1],params[3])); + + pdfStructure.setFormatterRectangle(formatterRectangle); + LOG.info("Formatter rectangle has been created"); + } + + @Override + public void createHolderFormStream(PDDocument template) + { + PDStream holderForm = new PDStream(template); + pdfStructure.setHolderFormStream(holderForm); + LOG.info("Holder form stream has been created"); + } + + @Override + public void createHolderFormResources() + { + PDResources holderFormResources = new PDResources(); + pdfStructure.setHolderFormResources(holderFormResources); + LOG.info("Holder form resources have been created"); + + } + + @Override + public void createHolderForm(PDResources holderFormResources, PDStream holderFormStream, + PDRectangle bbox) + { + PDFormXObject holderForm = new PDFormXObject(holderFormStream); + holderForm.setResources(holderFormResources); + holderForm.setBBox(bbox); + holderForm.setFormType(1); + pdfStructure.setHolderForm(holderForm); + LOG.info("Holder form has been created"); + + } + + @Override + public void createAppearanceDictionary(PDFormXObject holderForml, + PDSignatureField signatureField) throws IOException + { + PDAppearanceDictionary appearance = new PDAppearanceDictionary(); + appearance.getCOSObject().setDirect(true); + + PDAppearanceStream appearanceStream = new PDAppearanceStream(holderForml.getCOSObject()); + + appearance.setNormalAppearance(appearanceStream); + signatureField.getWidgets().get(0).setAppearance(appearance); + + pdfStructure.setAppearanceDictionary(appearance); + LOG.info("PDF appearance dictionary has been created"); + } + + @Override + public void createInnerFormStream(PDDocument template) + { + PDStream innerFormStream = new PDStream(template); + pdfStructure.setInnterFormStream(innerFormStream); + LOG.info("Stream of another form (inner form - it will be inside holder form) " + + "has been created"); + } + + @Override + public void createInnerFormResource() + { + PDResources innerFormResources = new PDResources(); + pdfStructure.setInnerFormResources(innerFormResources); + LOG.info("Resources of another form (inner form - it will be inside holder form)" + + "have been created"); + } + + @Override + public void createInnerForm(PDResources innerFormResources, PDStream innerFormStream, + PDRectangle bbox) + { + PDFormXObject innerForm = new PDFormXObject(innerFormStream); + innerForm.setResources(innerFormResources); + innerForm.setBBox(bbox); + innerForm.setFormType(1); + pdfStructure.setInnerForm(innerForm); + LOG.info("Another form (inner form - it will be inside holder form) has been created"); + } + + @Override + public void insertInnerFormToHolderResources(PDFormXObject innerForm, + PDResources holderFormResources) + { + holderFormResources.put(COSName.FRM, innerForm); + pdfStructure.setInnerFormName(COSName.FRM); + LOG.info("Now inserted inner form inside holder form"); + } + + @Override + public void createImageFormStream(PDDocument template) + { + PDStream imageFormStream = new PDStream(template); + pdfStructure.setImageFormStream(imageFormStream); + LOG.info("Created image form stream"); + } + + @Override + public void createImageFormResources() + { + PDResources imageFormResources = new PDResources(); + pdfStructure.setImageFormResources(imageFormResources); + LOG.info("Created image form resources"); + } + + @Override + public void createImageForm(PDResources imageFormResources, PDResources innerFormResource, + PDStream imageFormStream, PDRectangle bbox, AffineTransform at, + PDImageXObject img) throws IOException + { + PDFormXObject imageForm = new PDFormXObject(imageFormStream); + imageForm.setBBox(bbox); + imageForm.setMatrix(at); + imageForm.setResources(imageFormResources); + imageForm.setFormType(1); + + imageFormResources.getCOSObject().setDirect(true); + + COSName imageFormName = COSName.getPDFName("n2"); + innerFormResource.put(imageFormName, imageForm); + COSName imageName = imageFormResources.add(img, "img"); + pdfStructure.setImageForm(imageForm); + pdfStructure.setImageFormName(imageFormName); + pdfStructure.setImageName(imageName); + LOG.info("Created image form"); + } + + @Override + public void createBackgroundLayerForm(PDResources innerFormResource, PDRectangle bbox) + throws IOException + { + // create blank n0 background layer form + PDFormXObject n0Form = new PDFormXObject(pdfStructure.getTemplate().getDocument().createCOSStream()); + n0Form.setBBox(bbox); + n0Form.setResources(new PDResources()); + n0Form.setFormType(1); + innerFormResource.put(COSName.getPDFName("n0"), n0Form); + LOG.info("Created background layer form"); + } + + @Override + public void injectProcSetArray(PDFormXObject innerForm, PDPage page, + PDResources innerFormResources, PDResources imageFormResources, + PDResources holderFormResources, COSArray procSet) + { + innerForm.getResources().getCOSObject().setItem(COSName.PROC_SET, procSet); + page.getCOSObject().setItem(COSName.PROC_SET, procSet); + innerFormResources.getCOSObject().setItem(COSName.PROC_SET, procSet); + imageFormResources.getCOSObject().setItem(COSName.PROC_SET, procSet); + holderFormResources.getCOSObject().setItem(COSName.PROC_SET, procSet); + LOG.info("Inserted ProcSet to PDF"); + } + + @Override + public void injectAppearanceStreams(PDStream holderFormStream, PDStream innerFormStream, + PDStream imageFormStream, COSName imageFormName, + COSName imageName, COSName innerFormName, + PDVisibleSignDesigner properties) throws IOException + { + // Use width and height of BBox as values for transformation matrix. + int width = (int) this.getStructure().getFormatterRectangle().getWidth(); + int height = (int) this.getStructure().getFormatterRectangle().getHeight(); + + String imgFormContent = "q " + width + " 0 0 " + height + " 0 0 cm /" + imageName.getName() + " Do Q\n"; + String holderFormContent = "q 1 0 0 1 0 0 cm /" + innerFormName.getName() + " Do Q\n"; + String innerFormContent = "q 1 0 0 1 0 0 cm /n0 Do Q q 1 0 0 1 0 0 cm /" + imageFormName.getName() + " Do Q\n"; + + appendRawCommands(pdfStructure.getHolderFormStream().createOutputStream(), holderFormContent); + appendRawCommands(pdfStructure.getInnerFormStream().createOutputStream(), innerFormContent); + appendRawCommands(pdfStructure.getImageFormStream().createOutputStream(), imgFormContent); + LOG.info("Injected appearance stream to pdf"); + } + + public void appendRawCommands(OutputStream os, String commands) throws IOException + { + os.write(commands.getBytes("UTF-8")); + os.close(); + } + + @Override + public void createVisualSignature(PDDocument template) + { + pdfStructure.setVisualSignature(template.getDocument()); + LOG.info("Visible signature has been created"); + } + + @Override + public void createWidgetDictionary(PDSignatureField signatureField, + PDResources holderFormResources) throws IOException + { + COSDictionary widgetDict = signatureField.getWidgets().get(0).getCOSObject(); + widgetDict.setNeedToBeUpdated(true); + widgetDict.setItem(COSName.DR, holderFormResources.getCOSObject()); + + pdfStructure.setWidgetDictionary(widgetDict); + LOG.info("WidgetDictionary has been created"); + } + + @Override + public void closeTemplate(PDDocument template) throws IOException + { + template.close(); + pdfStructure.getTemplate().close(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigProperties.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigProperties.java new file mode 100644 index 00000000000..7ddd0e4a6bd --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSigProperties.java @@ -0,0 +1,210 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible; + +import java.io.IOException; +import java.io.InputStream; + +/** + * This builder class is in order to create visible signature properties. + * + * @author Vakhtang Koroghlishvili + */ +public class PDVisibleSigProperties +{ + private String signerName; + private String signerLocation; + private String signatureReason; + private boolean visualSignEnabled; + private int page; + private int preferredSize; + + private InputStream visibleSignature; + private PDVisibleSignDesigner pdVisibleSignature; + + /** + * start building of visible signature + * + * @throws IOException if the output could not be written + */ + public void buildSignature() throws IOException + { + PDFTemplateBuilder builder = new PDVisibleSigBuilder(); + PDFTemplateCreator creator = new PDFTemplateCreator(builder); + setVisibleSignature(creator.buildPDF(getPdVisibleSignature())); + } + + /** + * + * @return - signer name + */ + public String getSignerName() + { + return signerName; + } + + /** + * Sets signer name + * @param signerName + * @return the visible signature properties. + */ + public PDVisibleSigProperties signerName(String signerName) + { + this.signerName = signerName; + return this; + } + + /** + * Gets signer locations + * @return - location + */ + public String getSignerLocation() + { + return signerLocation; + } + + /** + * Sets location + * @param signerLocation + * @return the visible signature properties. + */ + public PDVisibleSigProperties signerLocation(String signerLocation) + { + this.signerLocation = signerLocation; + return this; + } + + /** + * gets reason of signing + * @return the signing reason. + */ + public String getSignatureReason() + { + return signatureReason; + } + + /** + * sets reason of signing + * @param signatureReason + * @return the visible signature properties. + */ + public PDVisibleSigProperties signatureReason(String signatureReason) + { + this.signatureReason = signatureReason; + return this; + } + + /** + * returns your page + * @return the page number. + */ + public int getPage() + { + return page; + } + + /** + * sets page number + * @param page + * @return the visible signature properties. + */ + public PDVisibleSigProperties page(int page) + { + this.page = page; + return this; + } + + /** + * Gets the preferred signature size in bytes. + * + * @return the signature's preferred size. A return value of 0 means to use default. + */ + public int getPreferredSize() + { + return preferredSize; + } + + /** + * Sets the preferred signature size in bytes. + * + * @param preferredSize The preferred signature size in bytes, or 0 to use default. + * @return the visible signature properties. + */ + public PDVisibleSigProperties preferredSize(int preferredSize) + { + this.preferredSize = preferredSize; + return this; + } + + /** + * checks if we need to add visible signature + * @return state if visible signature is needed. + */ + public boolean isVisualSignEnabled() + { + return visualSignEnabled; + } + + /** + * sets visible signature to be added or not + * @param visualSignEnabled + * @return the visible signature properties. + */ + public PDVisibleSigProperties visualSignEnabled(boolean visualSignEnabled) + { + this.visualSignEnabled = visualSignEnabled; + return this; + } + + /** + * this method gets visible signature configuration object + * @return the visible signature configuration. + */ + public PDVisibleSignDesigner getPdVisibleSignature() + { + return pdVisibleSignature; + } + + /** + * Sets visible signature configuration Object + * @param pdVisibleSignature + * @return the visible signature properties. + */ + public PDVisibleSigProperties setPdVisibleSignature(PDVisibleSignDesigner pdVisibleSignature) + { + this.pdVisibleSignature = pdVisibleSignature; + return this; + } + + /** + * returns visible signature configuration object + * @return the input stream representing the visible signature. + */ + public InputStream getVisibleSignature() + { + return visibleSignature; + } + + /** + * sets configuration object of visible signature + * @param visibleSignature + */ + public void setVisibleSignature(InputStream visibleSignature) + { + this.visibleSignature = visibleSignature; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java new file mode 100644 index 00000000000..75b749ddd59 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/PDVisibleSignDesigner.java @@ -0,0 +1,566 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.digitalsignature.visible; + +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import javax.imageio.ImageIO; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; + +/** + * Class for visible signature design properties. Setters use param() instead of setParam() to allow + * chaining. + * + * @author Vakhtang Koroghlishvili + */ +public class PDVisibleSignDesigner +{ + private Float imageWidth; + private Float imageHeight; + private float xAxis; + private float yAxis; + private float pageHeight; + private float pageWidth; + private BufferedImage image; + private String signatureFieldName = "sig"; + private int[] formatterRectangleParameters = { 0, 0, 100, 50 }; + private AffineTransform affineTransform = new AffineTransform(); + private float imageSizeInPercents; + private int rotation = 0; + + /** + * Constructor. + * + * @param filename Path of the PDF file + * @param imageStream image as a stream + * @param page The 1-based page number for which the page size should be calculated. + * @throws IOException + */ + public PDVisibleSignDesigner(String filename, InputStream imageStream, int page) + throws IOException + { + // set visible signature image Input stream + readImageStream(imageStream); + + // calculate height and width of document page + calculatePageSizeFromFile(filename, page); + } + + /** + * Constructor. + * + * @param documentStream Original PDF document as stream + * @param imageStream Image as a stream + * @param page The 1-based page number for which the page size should be calculated. + * @throws IOException + */ + public PDVisibleSignDesigner(InputStream documentStream, InputStream imageStream, int page) + throws IOException + { + // set visible signature image Input stream + readImageStream(imageStream); + + // calculate height and width of document page + calculatePageSizeFromStream(documentStream, page); + } + + /** + * Constructor. + * + * @param document Already created PDDocument of your PDF document. + * @param imageStream Image as a stream. + * @param page The 1-based page number for which the page size should be calculated. + * @throws IOException If we can't read, flush, or can't close stream. + */ + public PDVisibleSignDesigner(PDDocument document, InputStream imageStream, int page) throws IOException + { + readImageStream(imageStream); + calculatePageSize(document, page); + } + + /** + * Constructor. + * + * @param filename Path of the PDF file + * @param image + * @param page The 1-based page number for which the page size should be calculated. + * @throws IOException + */ + public PDVisibleSignDesigner(String filename, BufferedImage image, int page) + throws IOException + { + // set visible signature image + setImage(image); + + // calculate height and width of document page + calculatePageSizeFromFile(filename, page); + } + + /** + * Constructor. + * + * @param documentStream Original PDF document as stream + * @param image + * @param page The 1-based page number for which the page size should be calculated. + * @throws IOException + */ + public PDVisibleSignDesigner(InputStream documentStream, BufferedImage image, int page) + throws IOException + { + // set visible signature image + setImage(image); + + // calculate height and width of document page + calculatePageSizeFromStream(documentStream, page); + } + + /** + * Constructor. + * + * @param document Already created PDDocument of your PDF document. + * @param image + * @param page The 1-based page number for which the page size should be calculated. + */ + public PDVisibleSignDesigner(PDDocument document, BufferedImage image, int page) + { + setImage(image); + calculatePageSize(document, page); + } + + /** + * Constructor usable for signing existing signature fields. + * + * @param imageStream image as a stream + * @throws IOException + */ + public PDVisibleSignDesigner(InputStream imageStream) throws IOException + { + // set visible signature image Input stream + readImageStream(imageStream); + } + + private void calculatePageSizeFromFile(String filename, int page) throws IOException + { + try (PDDocument document = PDDocument.load(new File(filename))) + { + // calculate height and width of document page + calculatePageSize(document, page); + } + } + + private void calculatePageSizeFromStream(InputStream documentStream, int page) throws IOException + { + try (PDDocument document = PDDocument.load(documentStream)) + { + // calculate height and width of document page + calculatePageSize(document, page); + } + } + + /** + * Each page of document can be different sizes. This method calculates the page size based on + * the page media box. + * + * @param document + * @param page The 1-based page number for which the page size should be calculated. + * @throws IllegalArgumentException if the page argument is lower than 0. + */ + private void calculatePageSize(PDDocument document, int page) + { + if (page < 1) + { + throw new IllegalArgumentException("First page of pdf is 1, not " + page); + } + + PDPage firstPage = document.getPage(page - 1); + PDRectangle mediaBox = firstPage.getMediaBox(); + pageHeight(mediaBox.getHeight()); + pageWidth = mediaBox.getWidth(); + imageSizeInPercents = 100; + rotation = firstPage.getRotation() % 360; + } + + /** + * Adjust signature for page rotation. This is optional, call this after all x and y coordinates + * have been set if you want the signature to be positioned regardless of page orientation. + * + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner adjustForRotation() + { + switch (rotation) + { + case 90: + // https://stackoverflow.com/a/34359956/535646 + float temp = yAxis; + yAxis = pageHeight - xAxis - imageWidth; + xAxis = temp; + + affineTransform = new AffineTransform( + 0, imageHeight / imageWidth, -imageWidth / imageHeight, 0, imageWidth, 0); + + temp = imageHeight; + imageHeight = imageWidth; + imageWidth = temp; + break; + + case 180: + float newX = pageWidth - xAxis - imageWidth; + float newY = pageHeight - yAxis - imageHeight; + xAxis = newX; + yAxis = newY; + + affineTransform = new AffineTransform(-1, 0, 0, -1, imageWidth, imageHeight); + break; + + case 270: + temp = xAxis; + xAxis = pageWidth - yAxis - imageHeight; + yAxis = temp; + + affineTransform = new AffineTransform( + 0, -imageHeight / imageWidth, imageWidth / imageHeight, 0, 0, imageHeight); + + temp = imageHeight; + imageHeight = imageWidth; + imageWidth = temp; + break; + + case 0: + default: + break; + } + return this; + } + + /** + * Set the image for the signature. + * + * @param path Path of the image file. + * @return Visible Signature Configuration Object + * @throws IOException + */ + public PDVisibleSignDesigner signatureImage(String path) throws IOException + { + try (InputStream in = new BufferedInputStream(new FileInputStream(path))) + { + readImageStream(in); + } + return this; + } + + /** + * Zoom signature image with some percent. + * + * @param percent increase (positive value) or decrease (negative value) image with x percent. + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner zoom(float percent) + { + imageHeight += (imageHeight * percent) / 100; + imageWidth += (imageWidth * percent) / 100; + formatterRectangleParameters[2] = (int) imageWidth.floatValue(); + formatterRectangleParameters[3] = (int) imageHeight.floatValue(); + return this; + } + + /** + * + * @param x - x coordinate + * @param y - y coordinate + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner coordinates(float x, float y) + { + xAxis(x); + yAxis(y); + return this; + } + + /** + * + * @return xAxis - gets x coordinates + */ + public float getxAxis() + { + return xAxis; + } + + /** + * + * @param xAxis - x coordinate + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner xAxis(float xAxis) + { + this.xAxis = xAxis; + return this; + } + + /** + * + * @return yAxis + */ + public float getyAxis() + { + return yAxis; + } + + /** + * + * @param yAxis + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner yAxis(float yAxis) + { + this.yAxis = yAxis; + return this; + } + + /** + * + * @return signature image width + */ + public float getWidth() + { + return imageWidth; + } + + /** + * + * @param width signature image width + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner width(float width) + { + this.imageWidth = width; + this.formatterRectangleParameters[2] = (int) width; + return this; + } + + /** + * + * @return signature image height + */ + public float getHeight() + { + return imageHeight; + } + + /** + * + * @param height signature image height + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner height(float height) + { + this.imageHeight = height; + this.formatterRectangleParameters[3] = (int) height; + return this; + } + + /** + * + * @return template height + */ + protected float getTemplateHeight() + { + return getPageHeight(); + } + + /** + * + * @param templateHeight + * @return Visible Signature Configuration Object + */ + private PDVisibleSignDesigner pageHeight(float templateHeight) + { + this.pageHeight = templateHeight; + return this; + } + + /** + * + * @return signature field name + */ + public String getSignatureFieldName() + { + return signatureFieldName; + } + + /** + * + * @param signatureFieldName + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner signatureFieldName(String signatureFieldName) + { + this.signatureFieldName = signatureFieldName; + return this; + } + + /** + * + * @return image Image + */ + public BufferedImage getImage() + { + return image; + } + + /** + * Read the image stream of the signature and set height and width. + * + * @param stream stream of your visible signature image + * @throws IOException If we can't read, flush, or close stream of image + */ + private void readImageStream(InputStream stream) throws IOException + { + ImageIO.setUseCache(false); + setImage(ImageIO.read(stream)); + } + + /** + * Set image and its height and width. + * + * @param image + */ + private void setImage(BufferedImage image) + { + this.image = image; + imageHeight = (float) image.getHeight(); + imageWidth = (float) image.getWidth(); + formatterRectangleParameters[2] = image.getWidth(); + formatterRectangleParameters[3] = image.getHeight(); + } + + /** + * @return Affine Transform parameters for PDF Matrix + */ + public AffineTransform getTransform() + { + return affineTransform; + } + + /** + * + * @param affineTransform + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner transform(AffineTransform affineTransform) + { + this.affineTransform = new AffineTransform(affineTransform); + return this; + } + + /** + * + * @return formatter PDRectangle parameters + */ + public int[] getFormatterRectangleParameters() + { + return formatterRectangleParameters; + } + + /** + * Sets formatter PDRectangle + * + * @param formatterRectangleParameters + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner formatterRectangleParameters(int[] formatterRectangleParameters) + { + this.formatterRectangleParameters = formatterRectangleParameters; + return this; + } + + /** + * + * @return page width + */ + public float getPageWidth() + { + return pageWidth; + } + + /** + * + * @param pageWidth pageWidth + * @return Visible Signature Configuration Object + */ + public PDVisibleSignDesigner pageWidth(float pageWidth) + { + this.pageWidth = pageWidth; + return this; + } + + /** + * + * @return page height + */ + public float getPageHeight() + { + return pageHeight; + } + + /** + * get image size in percents + * @return the image size in percent + */ + public float getImageSizeInPercents() + { + return imageSizeInPercents; + } + + /** + * + * @param imageSizeInPercents + */ + public void imageSizeInPercents(float imageSizeInPercents) + { + this.imageSizeInPercents = imageSizeInPercents; + } + + /** + * returns visible signature text + * @return the visible signature's text + */ + public String getSignatureText() + { + throw new UnsupportedOperationException("That method is not yet implemented"); + } + + /** + * + * @param signatureText - adds the text on visible signature + * @return the signature design + */ + public PDVisibleSignDesigner signatureText(String signatureText) + { + throw new UnsupportedOperationException("That method is not yet implemented"); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/package.html new file mode 100644 index 00000000000..cabf72c6a9a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/digitalsignature/visible/package.html @@ -0,0 +1,25 @@ + + + + + + + +This is the visual signature part that help creating the visual representation for the digital signature. + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDDestination.java new file mode 100644 index 00000000000..26d8dc89820 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDDestination.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; + +import org.apache.pdfbox.pdmodel.common.PDDestinationOrAction; + +/** + * This represents a destination in a PDF document. + * + * @author Ben Litchfield + */ +public abstract class PDDestination implements PDDestinationOrAction +{ + + /** + * This will create a new destination depending on the type of COSBase + * that is passed in. + * + * @param base The base level object. + * + * @return A new destination. + * + * @throws IOException If the base cannot be converted to a Destination. + */ + public static PDDestination create( COSBase base ) throws IOException + { + PDDestination retval = null; + if( base == null ) + { + //this is ok, just return null. + } + else if (base instanceof COSArray + && ((COSArray) base).size() > 1 + && ((COSArray) base).getObject(1) instanceof COSName) + { + COSArray array = (COSArray) base; + COSName type = (COSName) array.getObject(1); + String typeString = type.getName(); + switch (typeString) + { + case PDPageFitDestination.TYPE: + case PDPageFitDestination.TYPE_BOUNDED: + retval = new PDPageFitDestination(array); + break; + case PDPageFitHeightDestination.TYPE: + case PDPageFitHeightDestination.TYPE_BOUNDED: + retval = new PDPageFitHeightDestination(array); + break; + case PDPageFitRectangleDestination.TYPE: + retval = new PDPageFitRectangleDestination(array); + break; + case PDPageFitWidthDestination.TYPE: + case PDPageFitWidthDestination.TYPE_BOUNDED: + retval = new PDPageFitWidthDestination(array); + break; + case PDPageXYZDestination.TYPE: + retval = new PDPageXYZDestination(array); + break; + default: + throw new IOException("Unknown destination type: " + type.getName()); + } + } + else if( base instanceof COSString ) + { + retval = new PDNamedDestination( (COSString)base ); + } + else if( base instanceof COSName ) + { + retval = new PDNamedDestination( (COSName)base ); + } + else + { + throw new IOException( "Error: can't convert to Destination " + base ); + } + return retval; + } + +} diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDNamedDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDNamedDestination.java similarity index 84% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDNamedDestination.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDNamedDestination.java index 35f26b5dafe..ad205aa4ad3 100644 --- a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDNamedDestination.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDNamedDestination.java @@ -14,19 +14,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.documentnavigation.destination; +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; import java.io.IOException; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSName; -import org.pdfbox.cos.COSString; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; /** * This represents a destination to a page by referencing it with a name. * - * @author Ben Litchfield - * @version $Revision: 1.3 $ + * @author Ben Litchfield */ public class PDNamedDestination extends PDDestination { @@ -75,6 +74,7 @@ public PDNamedDestination( String dest ) * * @return The cos object that matches this Java object. */ + @Override public COSBase getCOSObject() { return namedDestination; @@ -109,13 +109,7 @@ else if( namedDestination instanceof COSName ) */ public void setNamedDestination( String dest ) throws IOException { - if( namedDestination instanceof COSString ) - { - COSString string = ((COSString)namedDestination); - string.reset(); - string.append( dest.getBytes() ); - } - else if( dest == null ) + if (dest == null) { namedDestination = null; } @@ -124,5 +118,4 @@ else if( dest == null ) namedDestination = new COSString( dest ); } } - } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java new file mode 100644 index 00000000000..1492bd4da4f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageTree; + +/** + * This represents a destination to a page, see subclasses for specific parameters. + * + * @author Ben Litchfield + */ +public abstract class PDPageDestination extends PDDestination +{ + /** + * Storage for the page destination. + */ + protected COSArray array; + + /** + * Constructor to create empty page destination. + * + */ + protected PDPageDestination() + { + array = new COSArray(); + } + + /** + * Constructor to create empty page destination. + * + * @param arr A page destination array. + */ + protected PDPageDestination( COSArray arr ) + { + array = arr; + } + + /** + * This will get the page for this destination. A page destination can either reference a page + * (for a local destination) or a page number (when doing a remote destination to another PDF). + * If this object is referencing by page number then this method will return null and + * {@link #getPageNumber()} should be used. + * + * @return The page for this destination. + */ + public PDPage getPage() + { + PDPage retval = null; + if( array.size() > 0 ) + { + COSBase page = array.getObject( 0 ); + if( page instanceof COSDictionary ) + { + retval = new PDPage( (COSDictionary)page ); + } + } + return retval; + } + + /** + * Set the page for a local destination. For an external destination, call {@link #setPageNumber(int) setPageNumber(int pageNumber)}. + * + * @param page The page for a local destination. + */ + public void setPage( PDPage page ) + { + array.set( 0, page ); + } + + /** + * This will get the page number for this destination. A page destination can either reference a + * page (for a local destination) or a page number (when doing a remote destination to another + * PDF). If this object is referencing by page number then this method will return that number, + * otherwise -1 will be returned. + * + * @return The zero-based page number for this destination. + */ + public int getPageNumber() + { + int retval = -1; + if( array.size() > 0 ) + { + COSBase page = array.getObject( 0 ); + if( page instanceof COSNumber ) + { + retval = ((COSNumber)page).intValue(); + } + } + return retval; + } + + /** + * Returns the page number for this destination, regardless of whether this is a page number or + * a reference to a page. + * + * @see org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem + * @return the 0-based page number, or -1 if the destination type is unknown. + */ + public int retrievePageNumber() + { + int retval = -1; + if (array.size() > 0) + { + COSBase page = array.getObject(0); + if (page instanceof COSNumber) + { + retval = ((COSNumber) page).intValue(); + } + else if (page instanceof COSDictionary) + { + return indexOfPageTree((COSDictionary) page); + } + } + return retval; + } + + // climb up the page tree up to the top to be able to call PageTree.indexOf for a page dictionary + private int indexOfPageTree(COSDictionary pageDict) + { + COSDictionary parent = pageDict; + while (parent.getDictionaryObject(COSName.PARENT, COSName.P) instanceof COSDictionary) + { + parent = (COSDictionary) parent.getDictionaryObject(COSName.PARENT, COSName.P); + } + if (parent.containsKey(COSName.KIDS) && COSName.PAGES.equals(parent.getItem(COSName.TYPE))) + { + // now parent is the highest pages node + PDPageTree pages = new PDPageTree(parent); + return pages.indexOf(new PDPage(pageDict)); + } + return -1; + } + + /** + * Set the page number for a remote destination. For an internal destination, call + * {@link #setPage(PDPage) setPage(PDPage page)}. + * + * @param pageNumber The page for a remote destination. + */ + public void setPageNumber( int pageNumber ) + { + array.set( 0, pageNumber ); + } + + /** + * Convert this standard java object to a COS object. + * + * @return The cos object that matches this Java object. + */ + @Override + public COSArray getCOSObject() + { + return array; + } + +} diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitDestination.java similarity index 92% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitDestination.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitDestination.java index 1c798063a6c..3145d60cec6 100644 --- a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitDestination.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitDestination.java @@ -14,16 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.documentnavigation.destination; +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; -import org.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSArray; /** * This represents a destination to a page and the page contents will be magnified to just * fit on the screen. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDPageFitDestination extends PDPageDestination { diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitHeightDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitHeightDestination.java similarity index 91% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitHeightDestination.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitHeightDestination.java index dd065c4f2fb..ae1dff9978b 100644 --- a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitHeightDestination.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitHeightDestination.java @@ -14,17 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.documentnavigation.destination; +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; -import org.pdfbox.cos.COSArray; -import org.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSArray; /** * This represents a destination to a page at a x location and the height is magnified * to just fit on the screen. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDPageFitHeightDestination extends PDPageDestination { @@ -80,7 +78,7 @@ public void setLeft( int x ) array.growToSize( 3 ); if( x == -1 ) { - array.set( 2, (COSBase)null ); + array.set(2, null); } else { diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitRectangleDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitRectangleDestination.java similarity index 90% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitRectangleDestination.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitRectangleDestination.java index 480c8438cdb..bd26f97751b 100644 --- a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitRectangleDestination.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitRectangleDestination.java @@ -14,17 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.documentnavigation.destination; +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; -import org.pdfbox.cos.COSArray; -import org.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSArray; /** * This represents a destination to a page at a y location and the width is magnified * to just fit on the screen. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDPageFitRectangleDestination extends PDPageDestination { @@ -76,7 +74,7 @@ public void setLeft( int x ) array.growToSize( 3 ); if( x == -1 ) { - array.set( 2, (COSBase)null ); + array.set(2, null); } else { @@ -105,7 +103,7 @@ public void setBottom( int y ) array.growToSize( 6 ); if( y == -1 ) { - array.set( 3, (COSBase)null ); + array.set(3, null); } else { @@ -134,7 +132,7 @@ public void setRight( int x ) array.growToSize( 6 ); if( x == -1 ) { - array.set( 4, (COSBase)null ); + array.set(4, null); } else { @@ -164,7 +162,7 @@ public void setTop( int y ) array.growToSize( 6 ); if( y == -1 ) { - array.set( 5, (COSBase)null ); + array.set(5, null); } else { diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitWidthDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitWidthDestination.java similarity index 91% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitWidthDestination.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitWidthDestination.java index f5a62fc54d1..098c69abd6b 100644 --- a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitWidthDestination.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageFitWidthDestination.java @@ -14,17 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.documentnavigation.destination; +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; -import org.pdfbox.cos.COSArray; -import org.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSArray; /** * This represents a destination to a page at a y location and the width is magnified * to just fit on the screen. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDPageFitWidthDestination extends PDPageDestination { @@ -82,7 +80,7 @@ public void setTop( int y ) array.growToSize( 3 ); if( y == -1 ) { - array.set( 2, (COSBase)null ); + array.set(2, null); } else { diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageXYZDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageXYZDestination.java new file mode 100644 index 00000000000..b12deba20a4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageXYZDestination.java @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; + +/** + * This represents a destination to a page at an x,y coordinate with a zoom setting. + * The default x,y,z will be whatever is the current value in the viewer application and + * are not required. + * + * @author Ben Litchfield + */ +public class PDPageXYZDestination extends PDPageDestination +{ + /** + * The type of this destination. + */ + protected static final String TYPE = "XYZ"; + + /** + * Default constructor. + * + */ + public PDPageXYZDestination() + { + super(); + array.growToSize(5); + array.setName( 1, TYPE ); + } + + /** + * Constructor from an existing destination array. + * + * @param arr The destination array. + */ + public PDPageXYZDestination( COSArray arr ) + { + super( arr ); + } + + /** + * Get the left x coordinate. Return values of 0 or -1 imply that the current x-coordinate + * will be used. + * + * @return The left x coordinate. + */ + public int getLeft() + { + return array.getInt( 2 ); + } + + /** + * Set the left x-coordinate, values 0 or -1 imply that the current x-coordinate + * will be used. + * @param x The left x coordinate. + */ + public void setLeft( int x ) + { + array.growToSize( 3 ); + if( x == -1 ) + { + array.set(2, null); + } + else + { + array.setInt( 2, x ); + } + } + + /** + * Get the top y coordinate. Return values of 0 or -1 imply that the current y-coordinate + * will be used. + * + * @return The top y coordinate. + */ + public int getTop() + { + return array.getInt( 3 ); + } + + /** + * Set the top y-coordinate, values 0 or -1 imply that the current y-coordinate + * will be used. + * @param y The top ycoordinate. + */ + public void setTop( int y ) + { + array.growToSize( 4 ); + if( y == -1 ) + { + array.set(3, null); + } + else + { + array.setInt( 3, y ); + } + } + + /** + * Get the zoom value. Return values of 0 or -1 imply that the current zoom + * will be used. + * + * @return The zoom value for the page. + */ + public float getZoom() + { + COSBase obj = array.getObject(4); + if (obj instanceof COSNumber) + { + return ((COSNumber) obj).floatValue(); + } + return -1; + } + + /** + * Set the zoom value for the page, values 0 or -1 imply that the current zoom + * will be used. + * @param zoom The zoom value. + */ + public void setZoom( float zoom ) + { + array.growToSize( 5 ); + if( Float.compare(zoom, -1) == 0) + { + array.set(4, null); + } + else + { + array.set( 4, new COSFloat(zoom) ); + } + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/destination/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDDocumentOutline.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDDocumentOutline.java new file mode 100644 index 00000000000..d6af9d6e6f7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDDocumentOutline.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * This represents an outline in a pdf document. + * + * @author Ben Litchfield + */ +public final class PDDocumentOutline extends PDOutlineNode +{ + + /** + * Default Constructor. + */ + public PDDocumentOutline() + { + getCOSObject().setName(COSName.TYPE, COSName.OUTLINES.getName()); + } + + /** + * Constructor for an existing document outline. + * + * @param dic The storage dictionary. + */ + public PDDocumentOutline( COSDictionary dic ) + { + super( dic ); + getCOSObject().setName(COSName.TYPE, COSName.OUTLINES.getName()); + } + + @Override + public boolean isNodeOpen() + { + return true; + } + + @Override + public void openNode() + { + // The root of the outline hierarchy is not an OutlineItem and cannot be opened or closed + } + + @Override + public void closeNode() + { + // The root of the outline hierarchy is not an OutlineItem and cannot be opened or closed + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java new file mode 100644 index 00000000000..fcc159712c5 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItem.java @@ -0,0 +1,404 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline; + +import java.awt.Color; +import java.io.IOException; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionFactory; +import org.apache.pdfbox.pdmodel.interactive.action.PDAction; +import org.apache.pdfbox.pdmodel.interactive.action.PDActionGoTo; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDNamedDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageXYZDestination; + +/** + * This represents an outline item in a pdf document. The items at each level of the hierarchy form an iterable linked + * list, chained together through their Prev and Next entries. + * + * @author Ben Litchfield + */ +public final class PDOutlineItem extends PDOutlineNode +{ + private static final int ITALIC_FLAG = 1; + private static final int BOLD_FLAG = 2; + + /** + * Default Constructor. + */ + public PDOutlineItem() + { + super(); + } + + /** + * Constructor for an existing outline item. + * + * @param dic The storage dictionary. + */ + public PDOutlineItem( COSDictionary dic ) + { + super( dic ); + } + + /** + * Insert a single sibling after this node. + * + * @param newSibling The item to insert. + * @throws IllegalArgumentException if the given sibling node is part of a list + * (i.e. if it has a previous or a next sibling) + */ + public void insertSiblingAfter(PDOutlineItem newSibling) + { + requireSingleNode(newSibling); + PDOutlineNode parent = getParent(); + newSibling.setParent(parent); + PDOutlineItem next = getNextSibling(); + setNextSibling(newSibling); + newSibling.setPreviousSibling(this); + if (next != null) + { + newSibling.setNextSibling(next); + next.setPreviousSibling(newSibling); + } + else if (parent != null) + { + getParent().setLastChild(newSibling); + } + updateParentOpenCountForAddedChild(newSibling); + } + + /** + * Insert a single sibling before this node. + * + * @param newSibling The item to insert. + * @throws IllegalArgumentException if the given sibling node is part of a list + * (i.e. if it has a previous or a next sibling) + */ + public void insertSiblingBefore(PDOutlineItem newSibling) + { + requireSingleNode(newSibling); + PDOutlineNode parent = getParent(); + newSibling.setParent(parent); + PDOutlineItem previous = getPreviousSibling(); + setPreviousSibling(newSibling); + newSibling.setNextSibling(this); + if (previous != null) + { + previous.setNextSibling(newSibling); + newSibling.setPreviousSibling(previous); + } + else if (parent != null) + { + getParent().setFirstChild(newSibling); + } + updateParentOpenCountForAddedChild(newSibling); + } + + /** + * Return the previous sibling or null if there is no sibling. + * + * @return The previous sibling. + */ + public PDOutlineItem getPreviousSibling() + { + return getOutlineItem(COSName.PREV); + } + + /** + * Set the previous sibling, this will be maintained by this class. + * + * @param outlineNode The new previous sibling. + */ + void setPreviousSibling(PDOutlineNode outlineNode) + { + getCOSObject().setItem(COSName.PREV, outlineNode); + } + + /** + * @return The next sibling or null if there is no next sibling. + */ + public PDOutlineItem getNextSibling() + { + return getOutlineItem(COSName.NEXT); + } + + /** + * Set the next sibling, this will be maintained by this class. + * + * @param outlineNode The new next sibling. + */ + void setNextSibling(PDOutlineNode outlineNode) + { + getCOSObject().setItem(COSName.NEXT, outlineNode); + } + + /** + * Get the title of this node. + * + * @return The title of this node. + */ + public String getTitle() + { + return getCOSObject().getString(COSName.TITLE); + } + + /** + * Set the title for this node. + * + * @param title The new title for this node. + */ + public void setTitle(String title) + { + getCOSObject().setString(COSName.TITLE, title); + } + + /** + * Get the page destination of this node. + * + * @return The page destination of this node. + * @throws IOException If there is an error creating the destination. + */ + public PDDestination getDestination() throws IOException + { + return PDDestination.create(getCOSObject().getDictionaryObject(COSName.DEST)); + } + + /** + * Set the page destination for this node. + * + * @param dest The new page destination for this node. + */ + public void setDestination(PDDestination dest) + { + getCOSObject().setItem(COSName.DEST, dest); + } + + /** + * A convenience method that will create an XYZ destination using only the defaults. + * + * @param page The page to refer to. + */ + public void setDestination(PDPage page) + { + PDPageXYZDestination dest = null; + if( page != null ) + { + dest = new PDPageXYZDestination(); + dest.setPage( page ); + } + setDestination( dest ); + } + + /** + * This method will attempt to find the page in this PDF document that this outline points to. + * If the outline does not point to anything then this method will return null. If the outline + * is an action that is not a GoTo action then this method will also return null. + * + * @param doc The document to get the page from. + * + * @return The page that this outline will go to when activated or null if it does not point to + * anything. + * @throws IOException If there is an error when trying to find the page. + */ + public PDPage findDestinationPage(PDDocument doc) throws IOException + { + PDDestination dest = getDestination(); + if (dest == null) + { + PDAction outlineAction = getAction(); + if (outlineAction instanceof PDActionGoTo) + { + dest = ((PDActionGoTo) outlineAction).getDestination(); + } + } + if (dest == null) + { + return null; + } + + PDPageDestination pageDestination = null; + if (dest instanceof PDNamedDestination) + { + pageDestination = doc.getDocumentCatalog().findNamedDestinationPage((PDNamedDestination) dest); + if (pageDestination == null) + { + return null; + } + } + else if (dest instanceof PDPageDestination) + { + pageDestination = (PDPageDestination) dest; + } + else + { + throw new IOException("Error: Unknown destination type " + dest); + } + + PDPage page = pageDestination.getPage(); + if (page == null) + { + // Malformed PDF: local destinations must have a page object, + // not a page number, these are meant for remote destinations. + int pageNumber = pageDestination.getPageNumber(); + if (pageNumber != -1) + { + page = doc.getPage(pageNumber); + } + } + return page; + } + + /** + * Get the action of this node. + * + * @return The action of this node. + */ + public PDAction getAction() + { + return PDActionFactory.createAction((COSDictionary) getCOSObject().getDictionaryObject(COSName.A)); + } + + /** + * Set the action for this node. + * + * @param action The new action for this node. + */ + public void setAction( PDAction action ) + { + getCOSObject().setItem(COSName.A, action); + } + + /** + * Get the structure element of this node. + * + * @return The structure element of this node. + */ + public PDStructureElement getStructureElement() + { + PDStructureElement se = null; + COSDictionary dic = (COSDictionary) getCOSObject().getDictionaryObject(COSName.SE); + if( dic != null ) + { + se = new PDStructureElement( dic ); + } + return se; + } + + /** + * Set the structure element for this node. + * + * @param structureElement The new structure element for this node. + */ + public void setStructureElement( PDStructureElement structureElement ) + { + getCOSObject().setItem(COSName.SE, structureElement); + } + + /** + * Get the RGB text color of this node. Default is black and this method + * will never return null. + * + * @return The structure element of this node. + */ + public PDColor getTextColor() + { + COSArray csValues = (COSArray) getCOSObject().getDictionaryObject(COSName.C); + if( csValues == null ) + { + csValues = new COSArray(); + csValues.growToSize( 3, new COSFloat( 0 ) ); + getCOSObject().setItem( COSName.C, csValues ); + } + return new PDColor(csValues, PDDeviceRGB.INSTANCE); + } + + /** + * Set the RGB text color for this node. + * + * @param textColor The text color for this node. + */ + public void setTextColor( PDColor textColor ) + { + getCOSObject().setItem( COSName.C, textColor.toCOSArray() ); + } + + /** + * Set the RGB text color for this node. + * + * @param textColor The text color for this node. + */ + public void setTextColor( Color textColor ) + { + COSArray array = new COSArray(); + array.add( new COSFloat( textColor.getRed()/255f)); + array.add( new COSFloat( textColor.getGreen()/255f)); + array.add( new COSFloat( textColor.getBlue()/255f)); + getCOSObject().setItem( COSName.C, array ); + } + + /** + * A flag telling if the text should be italic. + * + * @return The italic flag. + */ + public boolean isItalic() + { + return getCOSObject().getFlag( COSName.F, ITALIC_FLAG ); + } + + /** + * Set the italic property of the text. + * + * @param italic The new italic flag. + */ + public void setItalic( boolean italic ) + { + getCOSObject().setFlag( COSName.F, ITALIC_FLAG, italic ); + } + + /** + * A flag telling if the text should be bold. + * + * @return The bold flag. + */ + public boolean isBold() + { + return getCOSObject().getFlag( COSName.F, BOLD_FLAG ); + } + + /** + * Set the bold property of the text. + * + * @param bold The new bold flag. + */ + public void setBold( boolean bold ) + { + getCOSObject().setFlag( COSName.F, BOLD_FLAG, bold ); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItemIterator.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItemIterator.java new file mode 100644 index 00000000000..5c7675af5ea --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineItemIterator.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline; + +import java.util.Iterator; + +/** + * Iterator over the linked list of {@link PDOutlineItem} siblings. + * + * @author Andrea Vacondio + * + */ +class PDOutlineItemIterator implements Iterator +{ + private PDOutlineItem currentItem; + private final PDOutlineItem startingItem; + + PDOutlineItemIterator(PDOutlineItem startingItem) + { + this.startingItem = startingItem; + } + + @Override + public boolean hasNext() + { + return startingItem != null + && (currentItem == null || (currentItem.getNextSibling() != null && !startingItem + .equals(currentItem.getNextSibling()))); + } + + @Override + public PDOutlineItem next() + { + if (currentItem == null) + { + currentItem = startingItem; + } + else + { + currentItem = currentItem.getNextSibling(); + } + return currentItem; + } + + @Override + public void remove() + { + throw new UnsupportedOperationException(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java new file mode 100644 index 00000000000..e810d34863b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java @@ -0,0 +1,320 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline; + +import java.util.Iterator; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDDictionaryWrapper; + +/** + * Base class for a node in the outline of a PDF document. + * + * @author Ben Litchfield + */ +public abstract class PDOutlineNode extends PDDictionaryWrapper +{ + + /** + * Default Constructor. + */ + public PDOutlineNode() + { + super(); + } + + /** + * @param dict The dictionary storage. + */ + public PDOutlineNode(COSDictionary dict) + { + super(dict); + } + + /** + * @return The parent of this node or null if there is no parent. + */ + PDOutlineNode getParent() + { + COSBase base = getCOSObject().getDictionaryObject(COSName.PARENT); + if (base instanceof COSDictionary) + { + COSDictionary parent = (COSDictionary) base; + if (COSName.OUTLINES.equals(parent.getCOSName(COSName.TYPE))) + { + return new PDDocumentOutline(parent); + } + return new PDOutlineItem(parent); + } + return null; + } + + void setParent(PDOutlineNode parent) + { + getCOSObject().setItem(COSName.PARENT, parent); + } + + /** + * Adds the given node to the bottom of the children list. + * + * @param newChild The node to add. + * @throws IllegalArgumentException if the given node is part of a list (i.e. if it has a previous or a next + * sibling) + */ + public void addLast(PDOutlineItem newChild) + { + requireSingleNode(newChild); + append(newChild); + updateParentOpenCountForAddedChild(newChild); + } + + /** + * Adds the given node to the top of the children list. + * + * @param newChild The node to add. + * @throws IllegalArgumentException if the given node is part of a list (i.e. if it has a previous or a next + * sibling) + */ + public void addFirst(PDOutlineItem newChild) + { + requireSingleNode(newChild); + prepend(newChild); + updateParentOpenCountForAddedChild(newChild); + } + + /** + * @param node + * @throws IllegalArgumentException if the given node is part of a list (i.e. if it has a previous or a next + * sibling) + */ + void requireSingleNode(PDOutlineItem node) + { + if (node.getNextSibling() != null || node.getPreviousSibling() != null) + { + throw new IllegalArgumentException("A single node with no siblings is required"); + } + } + + /** + * Appends the child to the linked list of children. This method only adjust pointers but doesn't take care of the + * Count key in the parent hierarchy. + * + * @param newChild + */ + private void append(PDOutlineItem newChild) + { + newChild.setParent(this); + if (!hasChildren()) + { + setFirstChild(newChild); + } + else + { + PDOutlineItem previousLastChild = getLastChild(); + previousLastChild.setNextSibling(newChild); + newChild.setPreviousSibling(previousLastChild); + } + setLastChild(newChild); + } + + /** + * Prepends the child to the linked list of children. This method only adjust pointers but doesn't take care of the + * Count key in the parent hierarchy. + * + * @param newChild + */ + private void prepend(PDOutlineItem newChild) + { + newChild.setParent(this); + if (!hasChildren()) + { + setLastChild(newChild); + } + else + { + PDOutlineItem previousFirstChild = getFirstChild(); + newChild.setNextSibling(previousFirstChild); + previousFirstChild.setPreviousSibling(newChild); + } + setFirstChild(newChild); + } + + void updateParentOpenCountForAddedChild(PDOutlineItem newChild) + { + int delta = 1; + if (newChild.isNodeOpen()) + { + delta += newChild.getOpenCount(); + } + newChild.updateParentOpenCount(delta); + } + + /** + * @return true if the node has at least one child + */ + public boolean hasChildren() + { + return getFirstChild() != null; + } + + PDOutlineItem getOutlineItem(COSName name) + { + COSBase base = getCOSObject().getDictionaryObject(name); + if (base instanceof COSDictionary) + { + return new PDOutlineItem((COSDictionary) base); + } + return null; + } + + /** + * @return The first child or null if there is no child. + */ + public PDOutlineItem getFirstChild() + { + return getOutlineItem(COSName.FIRST); + } + + /** + * Set the first child, this will be maintained by this class. + * + * @param outlineNode The new first child. + */ + void setFirstChild(PDOutlineNode outlineNode) + { + getCOSObject().setItem(COSName.FIRST, outlineNode); + } + + /** + * @return The last child or null if there is no child. + */ + public PDOutlineItem getLastChild() + { + return getOutlineItem(COSName.LAST); + } + + /** + * Set the last child, this will be maintained by this class. + * + * @param outlineNode The new last child. + */ + void setLastChild(PDOutlineNode outlineNode) + { + getCOSObject().setItem(COSName.LAST, outlineNode); + } + + /** + * Get the number of open nodes or a negative number if this node is closed. + * See PDF Reference 32000-1:2008 table 152 and 153 for more details. This + * value is updated as you append children and siblings. + * + * @return The Count attribute of the outline dictionary. + */ + public int getOpenCount() + { + return getCOSObject().getInt(COSName.COUNT, 0); + } + + /** + * Set the open count. This number is automatically managed for you when you add items to the outline. + * + * @param openCount The new open count. + */ + void setOpenCount(int openCount) + { + getCOSObject().setInt(COSName.COUNT, openCount); + } + + /** + * This will set this node to be open when it is shown in the viewer. By default, when a new node is created it will + * be closed. This will do nothing if the node is already open. + */ + public void openNode() + { + //if the node is already open then do nothing. + if( !isNodeOpen() ) + { + switchNodeCount(); + } + } + + /** + * Close this node. + * + */ + public void closeNode() + { + if (isNodeOpen()) + { + switchNodeCount(); + } + } + + private void switchNodeCount() + { + int openCount = getOpenCount(); + setOpenCount(-openCount); + updateParentOpenCount(-openCount); + } + + /** + * @return true if this node count is greater than zero, false otherwise. + */ + public boolean isNodeOpen() + { + return getOpenCount() > 0; + } + + /** + * The count parameter needs to be updated when you add, remove, open or close outline items. + * + * @param delta The amount to update by. + */ + void updateParentOpenCount(int delta) + { + PDOutlineNode parent = getParent(); + if (parent != null) + { + if (parent.isNodeOpen()) + { + parent.setOpenCount(parent.getOpenCount() + delta); + parent.updateParentOpenCount(delta); + } + else + { + parent.setOpenCount(parent.getOpenCount() - delta); + } + } + } + + /** + * @return An {@link Iterable} view of the items children + */ + public Iterable children() + { + return new Iterable() + { + @Override + public Iterator iterator() + { + return new PDOutlineItemIterator(getFirstChild()); + } + }; + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/outline/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/outline/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/package.html diff --git a/src/org/pdfbox/pdmodel/interactive/documentnavigation/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/documentnavigation/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java new file mode 100644 index 00000000000..dc2825d4c65 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java @@ -0,0 +1,819 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdfwriter.ContentStreamWriter; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary; +import org.apache.pdfbox.util.Matrix; + +/** + * Create the AcroForms field appearance helper. + * + * @author Stephan Gerhard + * @author Ben Litchfield + */ +class AppearanceGeneratorHelper +{ + private static final Log LOG = LogFactory.getLog(AppearanceGeneratorHelper.class); + + private static final Operator BMC = Operator.getOperator("BMC"); + private static final Operator EMC = Operator.getOperator("EMC"); + + private final PDVariableText field; + + private PDDefaultAppearanceString defaultAppearance; + private String value; + + /** + * The highlight color + * + * The color setting is used by Adobe to display the highlight box for selected entries in a list box. + * + * Regardless of other settings in an existing appearance stream Adobe will always use this value. + */ + private static final int[] HIGHLIGHT_COLOR = {153,193,215}; + + /** + * The scaling factor for font units to PDF units + */ + private static final int FONTSCALE = 1000; + + /** + * The default font size used for multiline text + */ + private static final float DEFAULT_FONT_SIZE = 12; + + /** + * The default padding applied by Acrobat to the fields bbox. + */ + private static final float DEFAULT_PADDING = 0.5f; + + /** + * Constructs a COSAppearance from the given field. + * + * @param field the field which you wish to control the appearance of + * @throws IOException + */ + AppearanceGeneratorHelper(PDVariableText field) throws IOException + { + this.field = field; + validateAndEnsureAcroFormResources(); + + this.defaultAppearance = field.getDefaultAppearanceString(); + } + + /* + * Adobe Reader/Acrobat are adding resources which are at the field/widget level + * to the AcroForm level. + */ + private void validateAndEnsureAcroFormResources() { + // add font resources which might be available at the field + // level but are not at the AcroForm level to the AcroForm + // to match Adobe Reader/Acrobat behavior + if (field.getAcroForm().getDefaultResources() == null) + { + return; + } + + PDResources acroFormResources = field.getAcroForm().getDefaultResources(); + + for (PDAnnotationWidget widget : field.getWidgets()) + { + if (widget.getNormalAppearanceStream() != null && widget.getNormalAppearanceStream().getResources() != null) + { + PDResources widgetResources = widget.getNormalAppearanceStream().getResources(); + for (COSName fontResourceName : widgetResources.getFontNames()) + { + try + { + if (acroFormResources.getFont(fontResourceName) == null) + { + LOG.debug("Adding font resource " + fontResourceName + " from widget to AcroForm"); + acroFormResources.put(fontResourceName, widgetResources.getFont(fontResourceName)); + } + } + catch (IOException e) + { + LOG.warn("Unable to match field level font with AcroForm font", e); + } + } + } + } + } + + + /** + * This is the public method for setting the appearance stream. + * + * @param apValue the String value which the appearance should represent + * @throws IOException If there is an error creating the stream. + */ + public void setAppearanceValue(String apValue) throws IOException + { + value = apValue; + + // Treat multiline field values in single lines as single lime values. + // This is in line with how Adobe Reader behaves when enetring text + // interactively but NOT how it behaves when the field value has been + // set programmatically and Reader is forced to generate the appearance + // using PDAcroForm.setNeedAppearances + // see PDFBOX-3911 + if (field instanceof PDTextField && !((PDTextField) field).isMultiline()) + { + value = apValue.replaceAll("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]", " "); + } + + for (PDAnnotationWidget widget : field.getWidgets()) + { + // some fields have the /Da at the widget level if the + // widgets differ in layout. + PDDefaultAppearanceString acroFormAppearance = defaultAppearance; + + if (widget.getCOSObject().getDictionaryObject(COSName.DA) != null) + { + defaultAppearance = getWidgetDefaultAppearanceString(widget); + } + + PDRectangle rect = widget.getRectangle(); + if (rect == null) + { + widget.getCOSObject().removeItem(COSName.AP); + LOG.warn("widget of field " + field.getFullyQualifiedName() + " has no rectangle, no appearance stream created"); + continue; + } + + PDFormFieldAdditionalActions actions = field.getActions(); + + // in case all tests fail the field will be formatted by acrobat + // when it is opened. See FreedomExpressions.pdf for an example of this. + if (actions == null || actions.getF() == null || + widget.getCOSObject().getDictionaryObject(COSName.AP) != null) + { + PDAppearanceDictionary appearanceDict = widget.getAppearance(); + if (appearanceDict == null) + { + appearanceDict = new PDAppearanceDictionary(); + widget.setAppearance(appearanceDict); + } + + PDAppearanceEntry appearance = appearanceDict.getNormalAppearance(); + // TODO support appearances other than "normal" + + PDAppearanceStream appearanceStream; + if (appearance != null && appearance.isStream()) + { + appearanceStream = appearance.getAppearanceStream(); + } + else + { + appearanceStream = prepareNormalAppearanceStream(widget); + + appearanceDict.setNormalAppearance(appearanceStream); + // TODO support appearances other than "normal" + } + + /* + * Adobe Acrobat always recreates the complete appearance stream if there is an appearance characteristics + * entry (the widget dictionaries MK entry). In addition if there is no content yet also create the appearance + * stream from the entries. + * + */ + if (widget.getAppearanceCharacteristics() != null || appearanceStream.getContentStream().getLength() == 0) + { + initializeAppearanceContent(widget, appearanceStream); + } + + setAppearanceContent(widget, appearanceStream); + } + + // restore the field level appearance + defaultAppearance = acroFormAppearance; + } + } + + private PDAppearanceStream prepareNormalAppearanceStream(PDAnnotationWidget widget) + { + PDAppearanceStream appearanceStream = new PDAppearanceStream(field.getAcroForm().getDocument()); + + // Calculate the entries for the bounding box and the transformation matrix + // settings for the appearance stream + int rotation = resolveRotation(widget); + PDRectangle rect = widget.getRectangle(); + Matrix matrix = Matrix.getRotateInstance(Math.toRadians(rotation), 0, 0); + Point2D.Float point2D = matrix.transformPoint(rect.getWidth(), rect.getHeight()); + + PDRectangle bbox = new PDRectangle(Math.abs((float) point2D.getX()), Math.abs((float) point2D.getY())); + appearanceStream.setBBox(bbox); + + AffineTransform at = calculateMatrix(bbox, rotation); + if (!at.isIdentity()) + { + appearanceStream.setMatrix(at); + } + appearanceStream.setFormType(1); + appearanceStream.setResources(new PDResources()); + return appearanceStream; + } + + private PDDefaultAppearanceString getWidgetDefaultAppearanceString(PDAnnotationWidget widget) throws IOException + { + COSString da = (COSString) widget.getCOSObject().getDictionaryObject(COSName.DA); + PDResources dr = field.getAcroForm().getDefaultResources(); + return new PDDefaultAppearanceString(da, dr); + } + + private int resolveRotation(PDAnnotationWidget widget) + { + PDAppearanceCharacteristicsDictionary characteristicsDictionary = widget.getAppearanceCharacteristics(); + if (characteristicsDictionary != null) + { + // 0 is the default value if the R key doesn't exist + return characteristicsDictionary.getRotation(); + } + return 0; + } + + /** + * Initialize the content of the appearance stream. + * + * Get settings like border style, border width and colors to be used to draw a rectangle and background color + * around the widget + * + * @param widget the field widget + * @param appearanceStream the appearance stream to be used + * @throws IOException in case we can't write to the appearance stream + */ + private void initializeAppearanceContent(PDAnnotationWidget widget, PDAppearanceStream appearanceStream) throws IOException + { + try (ByteArrayOutputStream output = new ByteArrayOutputStream(); + PDAppearanceContentStream contents = new PDAppearanceContentStream(appearanceStream, output)) + { + + PDAppearanceCharacteristicsDictionary appearanceCharacteristics = widget.getAppearanceCharacteristics(); + + // TODO: support more entries like patterns, etc. + if (appearanceCharacteristics != null) + { + PDColor backgroundColour = appearanceCharacteristics.getBackground(); + if (backgroundColour != null) + { + contents.setNonStrokingColor(backgroundColour); + PDRectangle bbox = resolveBoundingBox(widget, appearanceStream); + contents.addRect(bbox.getLowerLeftX(),bbox.getLowerLeftY(),bbox.getWidth(), bbox.getHeight()); + contents.fill(); + } + + float lineWidth = 0f; + PDColor borderColour = appearanceCharacteristics.getBorderColour(); + if (borderColour != null) + { + contents.setStrokingColor(borderColour); + lineWidth = 1f; + } + PDBorderStyleDictionary borderStyle = widget.getBorderStyle(); + if (borderStyle != null && borderStyle.getWidth() > 0) + { + lineWidth = borderStyle.getWidth(); + } + + if (lineWidth > 0 && borderColour != null) + { + if (Float.compare(lineWidth, 1) != 0) + { + contents.setLineWidth(lineWidth); + } + PDRectangle bbox = resolveBoundingBox(widget, appearanceStream); + PDRectangle clipRect = applyPadding(bbox, Math.max(DEFAULT_PADDING, lineWidth/2)); + contents.addRect(clipRect.getLowerLeftX(),clipRect.getLowerLeftY(),clipRect.getWidth(), clipRect.getHeight()); + contents.closeAndStroke(); + } + } + + writeToStream(output.toByteArray(), appearanceStream); + + } + } + + /** + * Parses an appearance stream into tokens. + */ + private List tokenize(PDAppearanceStream appearanceStream) throws IOException + { + PDFStreamParser parser = new PDFStreamParser(appearanceStream.getContents()); + parser.parse(); + return parser.getTokens(); + } + + /** + * Constructs and sets new contents for given appearance stream. + */ + private void setAppearanceContent(PDAnnotationWidget widget, + PDAppearanceStream appearanceStream) throws IOException + { + // first copy any needed resources from the document’s DR dictionary into + // the stream’s Resources dictionary + defaultAppearance.copyNeededResourcesTo(appearanceStream); + + // then replace the existing contents of the appearance stream from /Tx BMC + // to the matching EMC + try (ByteArrayOutputStream output = new ByteArrayOutputStream()) + { + ContentStreamWriter writer = new ContentStreamWriter(output); + + List tokens = tokenize(appearanceStream); + int bmcIndex = tokens.indexOf(BMC); + if (bmcIndex == -1) + { + // append to existing stream + writer.writeTokens(tokens); + writer.writeTokens(COSName.TX, BMC); + } + else + { + // prepend content before BMC + writer.writeTokens(tokens.subList(0, bmcIndex + 1)); + } + + // insert field contents + insertGeneratedAppearance(widget, appearanceStream, output); + + int emcIndex = tokens.indexOf(EMC); + if (emcIndex == -1) + { + // append EMC + writer.writeTokens(EMC); + } + else + { + // append contents after EMC + writer.writeTokens(tokens.subList(emcIndex, tokens.size())); + } + writeToStream(output.toByteArray(), appearanceStream); + } + } + + /** + * Generate and insert text content and clipping around it. + */ + private void insertGeneratedAppearance(PDAnnotationWidget widget, + PDAppearanceStream appearanceStream, + OutputStream output) throws IOException + { + try (PDAppearanceContentStream contents = new PDAppearanceContentStream(appearanceStream, output)) + { + PDRectangle bbox = resolveBoundingBox(widget, appearanceStream); + + // Acrobat calculates the left and right padding dependent on the offset of the border edge + // This calculation works for forms having been generated by Acrobat. + // The minimum distance is always 1f even if there is no rectangle being drawn around. + float borderWidth = 0; + if (widget.getBorderStyle() != null) + { + borderWidth = widget.getBorderStyle().getWidth(); + } + PDRectangle clipRect = applyPadding(bbox, Math.max(1f, borderWidth)); + PDRectangle contentRect = applyPadding(clipRect, Math.max(1f, borderWidth)); + + contents.saveGraphicsState(); + + // Acrobat always adds a clipping path + contents.addRect(clipRect.getLowerLeftX(), clipRect.getLowerLeftY(), + clipRect.getWidth(), clipRect.getHeight()); + contents.clip(); + + // get the font + PDFont font = defaultAppearance.getFont(); + if (font == null) + { + throw new IllegalArgumentException("font is null, check whether /DA entry is incomplete or incorrect"); + } + if (font.getName().contains("+")) + { + LOG.warn("Font '" + defaultAppearance.getFontName().getName() + + "' of field '" + field.getFullyQualifiedName() + + "' contains subsetted font '" + font.getName() + "'"); + LOG.warn("This may bring trouble with PDField.setValue(), PDAcroForm.flatten() or " + + "PDAcroForm.refreshAppearances()"); + LOG.warn("You should replace this font with a non-subsetted font:"); + LOG.warn("PDFont font = PDType0Font.load(doc, new FileInputStream(fontfile), false);"); + LOG.warn("acroForm.getDefaultResources().put(COSName.getPDFName(\"" + + defaultAppearance.getFontName().getName() + "\", font);"); + } + // calculate the fontSize (because 0 = autosize) + float fontSize = defaultAppearance.getFontSize(); + + if (Float.compare(fontSize, 0) == 0) + { + fontSize = calculateFontSize(font, contentRect); + } + + // for a listbox generate the highlight rectangle for the selected + // options + if (field instanceof PDListBox) + { + insertGeneratedListboxSelectionHighlight(contents, appearanceStream, font, fontSize); + } + + // start the text output + contents.beginText(); + + // write font and color from the /DA string, with the calculated font size + defaultAppearance.writeTo(contents, fontSize); + + // calculate the y-position of the baseline + float y; + + // calculate font metrics at font size + float fontScaleY = fontSize / FONTSCALE; + float fontBoundingBoxAtSize = font.getBoundingBox().getHeight() * fontScaleY; + float fontCapAtSize = font.getFontDescriptor().getCapHeight() * fontScaleY; + float fontDescentAtSize = font.getFontDescriptor().getDescent() * fontScaleY; + + if (field instanceof PDTextField && ((PDTextField) field).isMultiline()) + { + y = contentRect.getUpperRightY() - fontBoundingBoxAtSize; + } + else + { + // Adobe shows the text 'shiftet up' in case the caps don't fit into the clipping area + if (fontCapAtSize > clipRect.getHeight()) + { + y = clipRect.getLowerLeftY() + -fontDescentAtSize; + } + else + { + // calculate the position based on the content rectangle + y = clipRect.getLowerLeftY() + (clipRect.getHeight() - fontCapAtSize) / 2; + + // check to ensure that ascents and descents fit + if (y - clipRect.getLowerLeftY() < -fontDescentAtSize) { + + float fontDescentBased = -fontDescentAtSize + contentRect.getLowerLeftY(); + float fontCapBased = contentRect.getHeight() - contentRect.getLowerLeftY() - fontCapAtSize; + + y = Math.min(fontDescentBased, Math.max(y, fontCapBased)); + } + } + } + + // show the text + float x = contentRect.getLowerLeftX(); + + // special handling for comb boxes as these are like table cells with individual + // chars + if (shallComb()) + { + insertGeneratedCombAppearance(contents, appearanceStream, font, fontSize); + } + else if (field instanceof PDListBox) + { + insertGeneratedListboxAppearance(contents, appearanceStream, contentRect, font, fontSize); + } + else + { + PlainText textContent = new PlainText(value); + AppearanceStyle appearanceStyle = new AppearanceStyle(); + appearanceStyle.setFont(font); + appearanceStyle.setFontSize(fontSize); + + // Adobe Acrobat uses the font's bounding box for the leading between the lines + appearanceStyle.setLeading(font.getBoundingBox().getHeight() * fontScaleY); + + PlainTextFormatter formatter = new PlainTextFormatter + .Builder(contents) + .style(appearanceStyle) + .text(textContent) + .width(contentRect.getWidth()) + .wrapLines(isMultiLine()) + .initialOffset(x, y) + .textAlign(field.getQ()) + .build(); + formatter.format(); + } + + contents.endText(); + contents.restoreGraphicsState(); + } + } + + private AffineTransform calculateMatrix(PDRectangle bbox, int rotation) + { + if (rotation == 0) + { + return new AffineTransform(); + } + float tx = 0, ty = 0; + switch (rotation) + { + case 90: + tx = bbox.getUpperRightY(); + break; + case 180: + tx = bbox.getUpperRightY(); + ty = bbox.getUpperRightX(); + break; + case 270: + ty = bbox.getUpperRightX(); + break; + default: + break; + } + Matrix matrix = Matrix.getRotateInstance(Math.toRadians(rotation), tx, ty); + return matrix.createAffineTransform(); + } + + private boolean isMultiLine() + { + return field instanceof PDTextField && ((PDTextField) field).isMultiline(); + } + + /** + * Determine if the appearance shall provide a comb output. + * + *

    + * May be set only if the MaxLen entry is present in the text field dictionary + * and if the Multiline, Password, and FileSelect flags are clear. + * If set, the field shall be automatically divided into as many equally spaced positions, + * or combs, as the value of MaxLen, and the text is laid out into those combs. + *

    + * + * @return the comb state + */ + private boolean shallComb() + { + return field instanceof PDTextField && + ((PDTextField) field).isComb() && + !((PDTextField) field).isMultiline() && + !((PDTextField) field).isPassword() && + !((PDTextField) field).isFileSelect(); + } + + /** + * Generate the appearance for comb fields. + * + * @param contents the content stream to write to + * @param appearanceStream the appearance stream used + * @param font the font to be used + * @param fontSize the font size to be used + * @throws IOException + */ + private void insertGeneratedCombAppearance(PDAppearanceContentStream contents, PDAppearanceStream appearanceStream, + PDFont font, float fontSize) throws IOException + { + + // TODO: Currently the quadding is not taken into account + // so the comb is always filled from left to right. + + int maxLen = ((PDTextField) field).getMaxLen(); + int numChars = Math.min(value.length(), maxLen); + + PDRectangle paddingEdge = applyPadding(appearanceStream.getBBox(), 1); + + float combWidth = appearanceStream.getBBox().getWidth() / maxLen; + float ascentAtFontSize = font.getFontDescriptor().getAscent() / FONTSCALE * fontSize; + float baselineOffset = paddingEdge.getLowerLeftY() + + (appearanceStream.getBBox().getHeight() - ascentAtFontSize)/2; + + float prevCharWidth = 0f; + + float xOffset = combWidth / 2; + + for (int i = 0; i < numChars; i++) + { + String combString = value.substring(i, i+1); + float currCharWidth = font.getStringWidth(combString) / FONTSCALE * fontSize/2; + + xOffset = xOffset + prevCharWidth/2 - currCharWidth/2; + + contents.newLineAtOffset(xOffset, baselineOffset); + contents.showText(combString); + + baselineOffset = 0; + prevCharWidth = currCharWidth; + xOffset = combWidth; + } + } + + private void insertGeneratedListboxSelectionHighlight(PDAppearanceContentStream contents, PDAppearanceStream appearanceStream, + PDFont font, float fontSize) throws IOException + { + List indexEntries = ((PDListBox) field).getSelectedOptionsIndex(); + List values = ((PDListBox) field).getValue(); + List options = ((PDListBox) field).getOptionsExportValues(); + + if (!values.isEmpty() && !options.isEmpty() && indexEntries.isEmpty()) + { + // create indexEntries from options + indexEntries = new ArrayList<>(); + for (String v : values) + { + indexEntries.add(options.indexOf(v)); + } + } + + // The first entry which shall be presented might be adjusted by the optional TI key + // If this entry is present the first entry to be displayed is the keys value otherwise + // display starts with the first entry in Opt. + int topIndex = ((PDListBox) field).getTopIndex(); + + float highlightBoxHeight = font.getBoundingBox().getHeight() * fontSize / FONTSCALE; + + // the padding area + PDRectangle paddingEdge = applyPadding(appearanceStream.getBBox(), 1); + + for (int selectedIndex : indexEntries) + { + contents.setNonStrokingColor(HIGHLIGHT_COLOR[0], HIGHLIGHT_COLOR[1], HIGHLIGHT_COLOR[2]); + + contents.addRect(paddingEdge.getLowerLeftX(), + paddingEdge.getUpperRightY() - highlightBoxHeight * (selectedIndex - topIndex + 1) + 2, + paddingEdge.getWidth(), + highlightBoxHeight); + contents.fill(); + } + contents.setNonStrokingColor(0); + } + + + private void insertGeneratedListboxAppearance(PDAppearanceContentStream contents, PDAppearanceStream appearanceStream, + PDRectangle contentRect, PDFont font, float fontSize) throws IOException + { + contents.setNonStrokingColor(0); + + int q = field.getQ(); + + if (q == PDVariableText.QUADDING_CENTERED || q == PDVariableText.QUADDING_RIGHT) + { + float fieldWidth = appearanceStream.getBBox().getWidth(); + float stringWidth = (font.getStringWidth(value) / FONTSCALE) * fontSize; + float adjustAmount = fieldWidth - stringWidth - 4; + + if (q == PDVariableText.QUADDING_CENTERED) + { + adjustAmount = adjustAmount / 2.0f; + } + + contents.newLineAtOffset(adjustAmount, 0); + } + else if (q != PDVariableText.QUADDING_LEFT) + { + throw new IOException("Error: Unknown justification value:" + q); + } + + List options = ((PDListBox) field).getOptionsDisplayValues(); + int numOptions = options.size(); + + float yTextPos = contentRect.getUpperRightY(); + + int topIndex = ((PDListBox) field).getTopIndex(); + + for (int i = topIndex; i < numOptions; i++) + { + + if (i == topIndex) + { + yTextPos = yTextPos - font.getFontDescriptor().getAscent() / FONTSCALE * fontSize; + } + else + { + yTextPos = yTextPos - font.getBoundingBox().getHeight() / FONTSCALE * fontSize; + contents.beginText(); + } + + contents.newLineAtOffset(contentRect.getLowerLeftX(), yTextPos); + contents.showText(options.get(i)); + + if (i != (numOptions - 1)) + { + contents.endText(); + } + } + } + + /** + * Writes the stream to the actual stream in the COSStream. + * + * @throws IOException If there is an error writing to the stream + */ + private void writeToStream(byte[] data, PDAppearanceStream appearanceStream) throws IOException + { + try (OutputStream out = appearanceStream.getCOSObject().createOutputStream()) + { + out.write(data); + } + } + + /** + * My "not so great" method for calculating the fontsize. It does not work superb, but it + * handles ok. + * + * @return the calculated font-size + * @throws IOException If there is an error getting the font information. + */ + private float calculateFontSize(PDFont font, PDRectangle contentRect) throws IOException + { + float fontSize = defaultAppearance.getFontSize(); + + // zero is special, it means the text is auto-sized + if (Float.compare(fontSize, 0) == 0) + { + if (isMultiLine()) + { + // Acrobat defaults to 12 for multiline text with size 0 + return DEFAULT_FONT_SIZE; + } + else + { + float yScalingFactor = FONTSCALE * font.getFontMatrix().getScaleY(); + float xScalingFactor = FONTSCALE * font.getFontMatrix().getScaleX(); + + // fit width + float width = font.getStringWidth(value) * font.getFontMatrix().getScaleX(); + float widthBasedFontSize = contentRect.getWidth() / width * xScalingFactor; + + // fit height + float height = (font.getFontDescriptor().getCapHeight() + + -font.getFontDescriptor().getDescent()) * font.getFontMatrix().getScaleY(); + if (height <= 0) + { + height = font.getBoundingBox().getHeight() * font.getFontMatrix().getScaleY(); + } + + float heightBasedFontSize = contentRect.getHeight() / height * yScalingFactor; + + return Math.min(heightBasedFontSize, widthBasedFontSize); + } + } + return fontSize; + } + + /** + * Resolve the bounding box. + * + * @param fieldWidget the annotation widget. + * @param appearanceStream the annotations appearance stream. + * @return the resolved boundingBox. + */ + private PDRectangle resolveBoundingBox(PDAnnotationWidget fieldWidget, + PDAppearanceStream appearanceStream) + { + PDRectangle boundingBox = appearanceStream.getBBox(); + if (boundingBox == null) + { + boundingBox = fieldWidget.getRectangle().createRetranslatedRectangle(); + } + return boundingBox; + } + + /** + * Apply padding to a box. + * + * @param box box + * @return the padded box. + */ + private PDRectangle applyPadding(PDRectangle box, float padding) + { + return new PDRectangle(box.getLowerLeftX() + padding, + box.getLowerLeftY() + padding, + box.getWidth() - 2 * padding, + box.getHeight() - 2 * padding); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceStyle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceStyle.java new file mode 100644 index 00000000000..49f583dc85d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceStyle.java @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * Define styling attributes to be used for text formatting. + * + */ +class AppearanceStyle +{ + private PDFont font; + /** + * The font size to be used for text formatting. + * + * Defaulting to 12 to match Acrobats default. + */ + private float fontSize = 12.0f; + + /** + * The leading (distance between lines) to be used for text formatting. + * + * Defaulting to 1.2*fontSize to match Acrobats default. + */ + private float leading = 14.4f; + + /** + * Get the font used for text formatting. + * + * @return the font used for text formatting. + */ + PDFont getFont() + { + return font; + } + + /** + * Set the font to be used for text formatting. + * + * @param font the font to be used. + */ + void setFont(PDFont font) + { + this.font = font; + } + + /** + * Get the fontSize used for text formatting. + * + * @return the fontSize used for text formatting. + */ + float getFontSize() + { + return fontSize; + } + + /** + * Set the font size to be used for formatting. + * + * @param fontSize the font size. + */ + void setFontSize(float fontSize) + { + this.fontSize = fontSize; + leading = fontSize * 1.2f; + } + + /** + * Get the leading used for text formatting. + * + * @return the leading used for text formatting. + */ + float getLeading() + { + return leading; + } + + /** + * Set the leading used for text formatting. + * + * @param leading the leading to be used. + */ + void setLeading(float leading) + { + this.leading = leading; + } +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/FieldUtils.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/FieldUtils.java new file mode 100644 index 00000000000..6ca800bb45c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/FieldUtils.java @@ -0,0 +1,197 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSString; + +/** + * A set of utility methods to help with common AcroForm form and field related functions. + */ +public final class FieldUtils +{ + + /** + * An implementation of a basic key value pair. + * + * This implementation is used to help sorting the content of + * field option entries with an array of two-element arrays as + * used by choice fields. + * + */ + static class KeyValue + { + private final String key; + private final String value; + + KeyValue(final String theKey, final String theValue) + { + this.key = theKey; + this.value = theValue; + } + + public String getKey() + { + return this.key; + } + + public String getValue() + { + return this.value; + } + + @Override + public String toString() + { + return "(" + this.key + ", " + this.value + ")"; + } + } + + /** + * Comparator to sort KeyValue by key. + */ + static class KeyValueKeyComparator implements Serializable, Comparator + { + + private static final long serialVersionUID = 6715364290007167694L; + + @Override + public int compare(KeyValue o1, KeyValue o2) + { + return o1.key.compareTo(o2.key); + } + } + + /** + * Comparator to sort KeyValue by value. + */ + static class KeyValueValueComparator implements Serializable, Comparator + { + + private static final long serialVersionUID = -3984095679894798265L; + + @Override + public int compare(KeyValue o1, KeyValue o2) + { + return o1.value.compareTo(o2.value); + } + } + + /** + * Constructor. + */ + private FieldUtils() + { + } + + /** + * Return two related lists as a single list with key value pairs. + * + * @param key the key elements + * @param value the value elements + * @return a sorted list of KeyValue elements. + */ + static List toKeyValueList(List key, List value) + { + List list = new ArrayList<>(); + for(int i =0; i pairs) + { + Collections.sort(pairs, new FieldUtils.KeyValueValueComparator()); + } + + /** + * Sort two related lists simultaneously by the elements in the value parameter. + * + * @param pairs a list of KeyValue elements + */ + static void sortByKey(List pairs) + { + Collections.sort(pairs, new FieldUtils.KeyValueKeyComparator()); + } + + /** + * Return either one of a list which can have two-element arrays entries. + *

    + * Some entries in a dictionary can either be an array of elements + * or an array of two-element arrays. This method will either return + * the elements in the array or in case of two-element arrays, the element + * designated by the pair index + *

    + *

    + * An {@link IllegalArgumentException} will be thrown if the items contain + * two-element arrays and the index is not 0 or 1. + *

    + * + * @param items the array of elements or two-element arrays + * @param pairIdx the index into the two-element array + * @return a List of single elements + */ + static List getPairableItems(COSBase items, int pairIdx) + { + if (pairIdx < 0 || pairIdx > 1) + { + throw new IllegalArgumentException("Only 0 and 1 are allowed as an index into two-element arrays"); + } + + if (items instanceof COSString) + { + List array = new ArrayList<>(); + array.add(((COSString) items).getString()); + return array; + } + else if (items instanceof COSArray) + { + List entryList = new ArrayList<>(); + for (COSBase entry : (COSArray) items) + { + if (entry instanceof COSString) + { + entryList.add(((COSString) entry).getString()); + } + else if (entry instanceof COSArray) + { + COSArray cosArray = (COSArray) entry; + if (cosArray.size() >= pairIdx +1 && cosArray.get(pairIdx) instanceof COSString) + { + entryList.add(((COSString) cosArray.get(pairIdx)).getString()); + } + } + } + return entryList; + } + return Collections.emptyList(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java new file mode 100644 index 00000000000..1431acc9d55 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java @@ -0,0 +1,869 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.fdf.FDFCatalog; +import org.apache.pdfbox.pdmodel.fdf.FDFDictionary; +import org.apache.pdfbox.pdmodel.fdf.FDFDocument; +import org.apache.pdfbox.pdmodel.fdf.FDFField; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; +import org.apache.pdfbox.util.Matrix; + +/** + * An interactive form, also known as an AcroForm. + * + * @author Ben Litchfield + */ +public final class PDAcroForm implements COSObjectable +{ + private static final Log LOG = LogFactory.getLog(PDAcroForm.class); + + private static final int FLAG_SIGNATURES_EXIST = 1; + private static final int FLAG_APPEND_ONLY = 1 << 1; + + private final PDDocument document; + private final COSDictionary dictionary; + + private Map fieldCache; + + /** + * Constructor. + * + * @param doc The document that this form is part of. + */ + public PDAcroForm(PDDocument doc) + { + document = doc; + dictionary = new COSDictionary(); + dictionary.setItem(COSName.FIELDS, new COSArray()); + } + + /** + * Constructor. Side effect: /Helv and /ZaDb fonts added with update mark. + * + * @param doc The document that this form is part of. + * @param form The existing acroForm. + */ + public PDAcroForm(PDDocument doc, COSDictionary form) + { + document = doc; + dictionary = form; + verifyOrCreateDefaults(); + } + + /* + * Verify that there are default entries for required + * properties. + * + * If these are missing create default entries similar to + * Adobe Reader / Adobe Acrobat + * + */ + private void verifyOrCreateDefaults() + { + final String adobeDefaultAppearanceString = "/Helv 0 Tf 0 g "; + + // DA entry is required + if (getDefaultAppearance().length() == 0) + { + setDefaultAppearance(adobeDefaultAppearanceString); + dictionary.setNeedToBeUpdated(true); + } + + // DR entry is required + PDResources defaultResources = getDefaultResources(); + if (defaultResources == null) + { + defaultResources = new PDResources(); + setDefaultResources(defaultResources); + dictionary.setNeedToBeUpdated(true); + } + + // PDFBOX-3732: Adobe Acrobat uses Helvetica as a default font and + // stores that under the name '/Helv' in the resources dictionary + // Zapf Dingbats is included per default for check boxes and + // radio buttons as /ZaDb. + // PDFBOX-4393: the two fonts are added by Adobe when signing + // and this breaks a previous signature. (Might be an Adobe bug) + COSDictionary fontDict = defaultResources.getCOSObject().getCOSDictionary(COSName.FONT); + if (fontDict == null) + { + fontDict = new COSDictionary(); + defaultResources.getCOSObject().setItem(COSName.FONT, fontDict); + } + if (!fontDict.containsKey(COSName.HELV)) + { + defaultResources.put(COSName.HELV, PDType1Font.HELVETICA); + defaultResources.getCOSObject().setNeedToBeUpdated(true); + fontDict.setNeedToBeUpdated(true); + } + if (!fontDict.containsKey(COSName.ZA_DB)) + { + defaultResources.put(COSName.ZA_DB, PDType1Font.ZAPF_DINGBATS); + defaultResources.getCOSObject().setNeedToBeUpdated(true); + fontDict.setNeedToBeUpdated(true); + } + } + + /** + * This will get the document associated with this form. + * + * @return The PDF document. + */ + PDDocument getDocument() + { + return document; + } + + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * This method will import an entire FDF document into the PDF document + * that this acroform is part of. + * + * @param fdf The FDF document to import. + * + * @throws IOException If there is an error doing the import. + */ + public void importFDF(FDFDocument fdf) throws IOException + { + List fields = fdf.getCatalog().getFDF().getFields(); + if (fields != null) + { + for (FDFField field : fields) + { + FDFField fdfField = field; + PDField docField = getField(fdfField.getPartialFieldName()); + if (docField != null) + { + docField.importFDF(fdfField); + } + } + } + } + + /** + * This will export all FDF form data. + * + * @return An FDF document used to export the document. + * @throws IOException If there is an error when exporting the document. + */ + public FDFDocument exportFDF() throws IOException + { + FDFDocument fdf = new FDFDocument(); + FDFCatalog catalog = fdf.getCatalog(); + FDFDictionary fdfDict = new FDFDictionary(); + catalog.setFDF(fdfDict); + + List fdfFields = new ArrayList<>(); + List fields = getFields(); + for (PDField field : fields) + { + fdfFields.add(field.exportFDF()); + } + + fdfDict.setID(document.getDocument().getDocumentID()); + + if (!fdfFields.isEmpty()) + { + fdfDict.setFields(fdfFields); + } + return fdf; + } + + /** + * This will flatten all form fields. + * + *

    Flattening a form field will take the current appearance and make that part + * of the pages content stream. All form fields and annotations associated are removed.

    + * + *

    Invisible and hidden fields will be skipped and will not become part of the + * page content stream

    + * + *

    The appearances for the form fields widgets will not be generated

    + * + * @throws IOException + */ + public void flatten() throws IOException + { + // for dynamic XFA forms there is no flatten as this would mean to do a rendering + // from the XFA content into a static PDF. + if (xfaIsDynamic()) + { + LOG.warn("Flatten for a dynamix XFA form is not supported"); + return; + } + + List fields = new ArrayList<>(); + for (PDField field: getFieldTree()) + { + fields.add(field); + } + flatten(fields, false); + } + + + /** + * This will flatten the specified form fields. + * + *

    Flattening a form field will take the current appearance and make that part + * of the pages content stream. All form fields and annotations associated are removed.

    + * + *

    Invisible and hidden fields will be skipped and will not become part of the + * page content stream

    + * + * @param fields + * @param refreshAppearances if set to true the appearances for the form field widgets will be updated + * @throws IOException + */ + public void flatten(List fields, boolean refreshAppearances) throws IOException + { + // Nothing to flatten if there are no fields provided + if (fields.isEmpty()) + { + return; + } + + if (!refreshAppearances && getNeedAppearances()) + { + LOG.warn("acroForm.getNeedAppearances() returns true, " + + "visual field appearances may not have been set"); + LOG.warn("call acroForm.refreshAppearances() or " + + "use the flatten() method with refreshAppearances parameter"); + } + + // for dynamic XFA forms there is no flatten as this would mean to do a rendering + // from the XFA content into a static PDF. + if (xfaIsDynamic()) + { + LOG.warn("Flatten for a dynamix XFA form is not supported"); + return; + } + + // refresh the appearances if set + if (refreshAppearances) + { + refreshAppearances(fields); + } + + // indicates if the original content stream + // has been wrapped in a q...Q pair. + boolean isContentStreamWrapped; + + // the content stream to write to + PDPageContentStream contentStream; + + Map> pagesWidgetsMap = buildPagesWidgetsMap(fields); + + // preserve all non widget annotations + for (PDPage page : document.getPages()) + { + Map widgetsForPageMap = pagesWidgetsMap.get(page.getCOSObject()); + isContentStreamWrapped = false; + + List annotations = new ArrayList<>(); + + for (PDAnnotation annotation: page.getAnnotations()) + { + if (widgetsForPageMap != null && widgetsForPageMap.get(annotation.getCOSObject()) == null) + { + annotations.add(annotation); + } + else if (!annotation.isInvisible() && !annotation.isHidden() && annotation.getNormalAppearanceStream() != null) + { + if (!isContentStreamWrapped) + { + contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, true, true); + isContentStreamWrapped = true; + } + else + { + contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, true); + } + + PDAppearanceStream appearanceStream = annotation.getNormalAppearanceStream(); + + PDFormXObject fieldObject = new PDFormXObject(appearanceStream.getCOSObject()); + + contentStream.saveGraphicsState(); + + // translate the appearance stream to the widget location if there is + // not already a transformation in place + boolean needsTranslation = resolveNeedsTranslation(appearanceStream); + + // scale the appearance stream - mainly needed for images + // in buttons and signatures + boolean needsScaling = resolveNeedsScaling(appearanceStream); + + Matrix transformationMatrix = new Matrix(); + boolean transformed = false; + + if (needsTranslation) + { + transformationMatrix.translate(annotation.getRectangle().getLowerLeftX(), + annotation.getRectangle().getLowerLeftY()); + transformed = true; + } + + if (needsScaling) + { + PDRectangle bbox = appearanceStream.getBBox(); + PDRectangle fieldRect = annotation.getRectangle(); + + if (Float.compare(bbox.getWidth() - fieldRect.getWidth(), 0) != 0 && + Float.compare(bbox.getHeight() - fieldRect.getHeight(), 0) != 0) + { + float xScale = fieldRect.getWidth() / bbox.getWidth(); + float yScale = fieldRect.getHeight() / bbox.getHeight(); + Matrix scalingMatrix = Matrix.getScaleInstance(xScale, yScale); + transformationMatrix.concatenate(scalingMatrix); + transformed = true; + } + } + + if (transformed) + { + contentStream.transform(transformationMatrix); + } + + contentStream.drawForm(fieldObject); + contentStream.restoreGraphicsState(); + contentStream.close(); + } + } + page.setAnnotations(annotations); + } + + // remove the fields + removeFields(fields); + + // remove XFA for hybrid forms + dictionary.removeItem(COSName.XFA); + + } + + /** + * Refreshes the appearance streams and appearance dictionaries for + * the widget annotations of all fields. + * + * @throws IOException + */ + public void refreshAppearances() throws IOException + { + for (PDField field : getFieldTree()) + { + if (field instanceof PDTerminalField) + { + ((PDTerminalField) field).constructAppearances(); + } + } + } + + /** + * Refreshes the appearance streams and appearance dictionaries for + * the widget annotations of the specified fields. + * + * @param fields + * @throws IOException + */ + public void refreshAppearances(List fields) throws IOException + { + for (PDField field : fields) + { + if (field instanceof PDTerminalField) + { + ((PDTerminalField) field).constructAppearances(); + } + } + } + + + /** + * This will return all of the documents root fields. + * + * A field might have children that are fields (non-terminal field) or does not + * have children which are fields (terminal fields). + * + * The fields within an AcroForm are organized in a tree structure. The documents root fields + * might either be terminal fields, non-terminal fields or a mixture of both. Non-terminal fields + * mark branches which contents can be retrieved using {@link PDNonTerminalField#getChildren()}. + * + * @return A list of the documents root fields, never null. If there are no fields then this + * method returns an empty list. + */ + public List getFields() + { + COSArray cosFields = (COSArray) dictionary.getDictionaryObject(COSName.FIELDS); + if (cosFields == null) + { + return Collections.emptyList(); + } + List pdFields = new ArrayList<>(); + for (int i = 0; i < cosFields.size(); i++) + { + COSDictionary element = (COSDictionary) cosFields.getObject(i); + if (element != null) + { + PDField field = PDField.fromDictionary(this, element, null); + if (field != null) + { + pdFields.add(field); + } + } + } + return new COSArrayList<>(pdFields, cosFields); + } + + /** + * Set the documents root fields. + * + * @param fields The fields that are part of the documents root fields. + */ + public void setFields(List fields) + { + dictionary.setItem(COSName.FIELDS, COSArrayList.converterToCOSArray(fields)); + } + + /** + * Returns an iterator which walks all fields in the field tree, in order. + */ + public Iterator getFieldIterator() + { + return new PDFieldTree(this).iterator(); + } + + /** + * Return the field tree representing all form fields + */ + public PDFieldTree getFieldTree() + { + return new PDFieldTree(this); + } + + /** + * This will tell this form to cache the fields into a Map structure + * for fast access via the getField method. The default is false. You would + * want this to be false if you were changing the COSDictionary behind the scenes, + * otherwise setting this to true is acceptable. + * + * @param cache A boolean telling if we should cache the fields. + */ + public void setCacheFields(boolean cache) + { + if (cache) + { + fieldCache = new HashMap<>(); + + for (PDField field : getFieldTree()) + { + fieldCache.put(field.getFullyQualifiedName(), field); + } + } + else + { + fieldCache = null; + } + } + + /** + * This will tell if this acro form is caching the fields. + * + * @return true if the fields are being cached. + */ + public boolean isCachingFields() + { + return fieldCache != null; + } + + /** + * This will get a field by name, possibly using the cache if setCache is true. + * + * @param fullyQualifiedName The name of the field to get. + * @return The field with that name of null if one was not found. + */ + public PDField getField(String fullyQualifiedName) + { + // get the field from the cache if there is one. + if (fieldCache != null) + { + return fieldCache.get(fullyQualifiedName); + } + + // get the field from the field tree + for (PDField field : getFieldTree()) + { + if (field.getFullyQualifiedName().equals(fullyQualifiedName)) + { + return field; + } + } + + return null; + } + + /** + * Get the default appearance. + * + * @return the DA element of the dictionary object + */ + public String getDefaultAppearance() + { + return dictionary.getString(COSName.DA,""); + } + + /** + * Set the default appearance. + * + * @param daValue a string describing the default appearance + */ + public void setDefaultAppearance(String daValue) + { + dictionary.setString(COSName.DA, daValue); + } + + /** + * True if the viewing application should construct the appearances of all field widgets. + * The default value is false. + * + * @return the value of NeedAppearances, false if the value isn't set + */ + public boolean getNeedAppearances() + { + return dictionary.getBoolean(COSName.NEED_APPEARANCES, false); + } + + /** + * Set the NeedAppearances value. If this is false, PDFBox will create appearances for all field + * widget. + * + * @param value the value for NeedAppearances + */ + public void setNeedAppearances(Boolean value) + { + dictionary.setBoolean(COSName.NEED_APPEARANCES, value); + } + + /** + * This will get the default resources for the AcroForm. + * + * @return The default resources or null if their is none. + */ + public PDResources getDefaultResources() + { + PDResources retval = null; + COSBase base = dictionary.getDictionaryObject(COSName.DR); + if (base instanceof COSDictionary) + { + retval = new PDResources((COSDictionary) base, document.getResourceCache()); + } + return retval; + } + + /** + * This will set the default resources for the acroform. + * + * @param dr The new default resources. + */ + public void setDefaultResources(PDResources dr) + { + dictionary.setItem(COSName.DR, dr); + } + + /** + * This will tell if the AcroForm has XFA content. + * + * @return true if the AcroForm is an XFA form + */ + public boolean hasXFA() + { + return dictionary.containsKey(COSName.XFA); + } + + /** + * This will tell if the AcroForm is a dynamic XFA form. + * + * @return true if the AcroForm is a dynamic XFA form + */ + public boolean xfaIsDynamic() + { + return hasXFA() && getFields().isEmpty(); + } + + /** + * Get the XFA resource, the XFA resource is only used for PDF 1.5+ forms. + * + * @return The xfa resource or null if it does not exist. + */ + public PDXFAResource getXFA() + { + PDXFAResource xfa = null; + COSBase base = dictionary.getDictionaryObject(COSName.XFA); + if (base != null) + { + xfa = new PDXFAResource(base); + } + return xfa; + } + + /** + * Set the XFA resource, this is only used for PDF 1.5+ forms. + * + * @param xfa The xfa resource. + */ + public void setXFA(PDXFAResource xfa) + { + dictionary.setItem(COSName.XFA, xfa); + } + + /** + * This will get the document-wide default value for the quadding/justification of variable text + * fields. + *

    + * 0 - Left(default)
    + * 1 - Centered
    + * 2 - Right
    + * See the QUADDING constants of {@link PDVariableText}. + * + * @return The justification of the variable text fields. + */ + public int getQ() + { + int retval = 0; + COSNumber number = (COSNumber)dictionary.getDictionaryObject(COSName.Q); + if (number != null) + { + retval = number.intValue(); + } + return retval; + } + + /** + * This will set the document-wide default value for the quadding/justification of variable text + * fields. See the QUADDING constants of {@link PDVariableText}. + * + * @param q The justification of the variable text fields. + */ + public void setQ(int q) + { + dictionary.setInt(COSName.Q, q); + } + + /** + * Determines if SignaturesExist is set. + * + * @return true if the document contains at least one signature. + */ + public boolean isSignaturesExist() + { + return dictionary.getFlag(COSName.SIG_FLAGS, FLAG_SIGNATURES_EXIST); + } + + /** + * Set the SignaturesExist bit. + * + * @param signaturesExist The value for SignaturesExist. + */ + public void setSignaturesExist(boolean signaturesExist) + { + dictionary.setFlag(COSName.SIG_FLAGS, FLAG_SIGNATURES_EXIST, signaturesExist); + } + + /** + * Determines if AppendOnly is set. + * + * @return true if the document contains signatures that may be invalidated if the file is saved. + */ + public boolean isAppendOnly() + { + return dictionary.getFlag(COSName.SIG_FLAGS, FLAG_APPEND_ONLY); + } + + /** + * Set the AppendOnly bit. + * + * @param appendOnly The value for AppendOnly. + */ + public void setAppendOnly(boolean appendOnly) + { + dictionary.setFlag(COSName.SIG_FLAGS, FLAG_APPEND_ONLY, appendOnly); + } + + /** + * Check if there is a translation needed to place the annotations content. + * + * @param appearanceStream + * @return the need for a translation transformation. + */ + private boolean resolveNeedsTranslation(PDAppearanceStream appearanceStream) + { + // a field without specific settings typically needs to be translated + // to the correct position + boolean needsTranslation = true; + + PDResources resources = appearanceStream.getResources(); + if (resources != null && resources.getXObjectNames().iterator().hasNext()) + { + + Iterator xObjectNames = resources.getXObjectNames().iterator(); + + while (xObjectNames.hasNext()) + { + try + { + // if the BBox of the PDFormXObject does not start at 0,0 + // there is no need do translate as this is done by the BBox definition. + PDXObject xObject = resources.getXObject(xObjectNames.next()); + if (xObject instanceof PDFormXObject) + { + PDRectangle bbox = ((PDFormXObject)xObject).getBBox(); + float llX = bbox.getLowerLeftX(); + float llY = bbox.getLowerLeftY(); + if (Float.compare(llX, 0) != 0 && Float.compare(llY, 0) != 0) + { + needsTranslation = false; + } + } + } + catch (IOException e) + { + // we can safely ignore the exception here + // as this might only cause a misplacement + LOG.debug("Couldn't resolve possible need for translation - ignoring, content might be misplaced", e); + } + } + return needsTranslation; + } + + return true; + } + + /** + * Check if there needs to be a scaling transformation applied. + * + * @param appearanceStream + * @return the need for a scaling transformation. + */ + private boolean resolveNeedsScaling(PDAppearanceStream appearanceStream) + { + // Check if there is a transformation within the XObjects content + PDResources resources = appearanceStream.getResources(); + return resources != null && resources.getXObjectNames().iterator().hasNext(); + } + + private Map> buildPagesWidgetsMap(List fields) + { + Map> pagesAnnotationsMap = new HashMap<>(); + boolean hasMissingPageRef = false; + + for (PDField field : fields) + { + List widgets = field.getWidgets(); + for (PDAnnotationWidget widget : widgets) + { + PDPage pageForWidget = widget.getPage(); + if (pageForWidget != null) + { + if (pagesAnnotationsMap.get(pageForWidget.getCOSObject()) == null) + { + Map widgetsForPage = new HashMap<>(); + widgetsForPage.put(widget.getCOSObject(), widget); + pagesAnnotationsMap.put(pageForWidget.getCOSObject(), widgetsForPage); + } + else + { + Map widgetsForPage = pagesAnnotationsMap.get(pageForWidget.getCOSObject()); + widgetsForPage.put(widget.getCOSObject(), widget); + } + } + else + { + hasMissingPageRef = true; + } + } + } + + // TODO: if there is a widget with a missing page reference + // we'd need to build the map reverse i.e. form the annotations to the + // widget. But this will be much slower so will be omitted for now. + if (hasMissingPageRef) + { + LOG.warn("There has been a widget with a missing page reference. Please report to the PDFBox project"); + } + + return pagesAnnotationsMap; + } + + private void removeFields(List fields) + { + for (PDField field : fields) { + if (field.getParent() == null) + { + COSArray cosFields = (COSArray) dictionary.getDictionaryObject(COSName.FIELDS); + for (int i=0; iOff is the default value which will also be returned if the + * value hasn't been set at all. + * + * @return A non-null string. + */ + public String getValue() + { + COSBase value = getInheritableAttribute(COSName.V); + if (value instanceof COSName) + { + return ((COSName)value).getName(); + } + else + { + // Off is the default value if there is nothing else set. + // See PDF Spec. + return "Off"; + } + } + + /** + * Set the selected option given its name, and try to update the visual appearance. + * + * @param value Name of option to select + * @throws IOException if the value could not be set + * @throws IllegalArgumentException if the value is not a valid option. + */ + @Override + public void setValue(String value) throws IOException + { + checkValue(value); + + // if there are export values/an Opt entry there is a different + // approach to setting the value + boolean hasExportValues = getExportValues().size() > 0; + + if (hasExportValues) { + updateByOption(value); + } + else + { + updateByValue(value); + } + + applyChange(); + } + + + /** + * Returns the default value, if any. + * + * @return A non-null string. + */ + public String getDefaultValue() + { + COSBase value = getInheritableAttribute(COSName.DV); + if (value instanceof COSName) + { + return ((COSName)value).getName(); + } + else + { + return ""; + } + } + + /** + * Sets the default value. + * + * @param value Name of option to select + * @throws IllegalArgumentException if the value is not a valid option. + */ + public void setDefaultValue(String value) + { + checkValue(value); + getCOSObject().setName(COSName.DV, value); + } + + @Override + public String getValueAsString() + { + return getValue(); + } + + + /** + * This will get the (optional) export values. + * + *

    The export values are defined in the field dictionaries /Opt key.

    + * + *

    The option values are used to define the export values + * for the field to + *

      + *
    • hold values in non-Latin writing systems as name objects, which represent the field value, are limited + * to PDFDocEncoding + *
    • + *
    • allow radio buttons having the same export value to be handled independently + *
    • + *
    + * + * @return List containing all possible export values. If there is no /Opt entry an empty list will be returned. + * + * @see #getOnValues() + */ + public List getExportValues() + { + COSBase value = getInheritableAttribute(COSName.OPT); + + if (value instanceof COSString) + { + List array = new ArrayList<>(); + array.add(((COSString) value).getString()); + return array; + } + else if (value instanceof COSArray) + { + return COSArrayList.convertCOSStringCOSArrayToList((COSArray)value); + } + return Collections.emptyList(); + } + + /** + * This will set the export values. + * + * @see #getExportValues() + * @param values List containing all possible export values. Supplying null or an empty list will remove the Opt entry. + */ + public void setExportValues(List values) + { + COSArray cosValues; + if (values != null && !values.isEmpty()) + { + cosValues = COSArrayList.convertStringListToCOSStringCOSArray(values); + getCOSObject().setItem(COSName.OPT, cosValues); + } + else + { + getCOSObject().removeItem(COSName.OPT); + } + } + + @Override + void constructAppearances() throws IOException + { + List exportValues = getExportValues(); + if (exportValues.size() > 0) + { + // the value is the index value of the option. So we need to get that + // and use it to set the value + try + { + int optionsIndex = Integer.parseInt(getValue()); + if (optionsIndex < exportValues.size()) + { + updateByOption(exportValues.get(optionsIndex)); + } + } catch (NumberFormatException e) + { + // silently ignore that + // and don't update the appearance + } + } + else + { + updateByValue(getValue()); + } + } + + /** + * Get the values to set individual buttons within a group to the on state. + * + *

    The On value could be an arbitrary string as long as it is within the limitations of + * a PDF name object. The Off value shall always be 'Off'. If not set or not part of the normal + * appearance keys 'Off' is the default

    + * + * @return the potential values setting the check box to the On state. + * If an empty Set is returned there is no appearance definition. + */ + public Set getOnValues() + { + // we need a set as the field can appear multiple times + Set onValues = new LinkedHashSet<>(); + + if (getExportValues().size() > 0) + { + onValues.addAll(getExportValues()); + return onValues; + } + + List widgets = this.getWidgets(); + for (PDAnnotationWidget widget : widgets) + { + onValues.add(getOnValueForWidget(widget)); + } + return onValues; + } + + /* + * Get the on value for an individual widget by it's index. + */ + private String getOnValue(int index) + { + List widgets = this.getWidgets(); + if (index < widgets.size()) + { + return getOnValueForWidget(widgets.get(index)); + } + return ""; + } + + /* + * Get the on value for an individual widget. + */ + private String getOnValueForWidget(PDAnnotationWidget widget) + { + PDAppearanceDictionary apDictionary = widget.getAppearance(); + if (apDictionary != null) + { + PDAppearanceEntry normalAppearance = apDictionary.getNormalAppearance(); + if (normalAppearance != null) + { + Set entries = normalAppearance.getSubDictionary().keySet(); + for (COSName entry : entries) + { + if (COSName.Off.compareTo(entry) != 0) + { + return entry.getName(); + } + } + } + } + return ""; + } + + /** + * Checks value. + * + * @param value Name of radio button to select + * @throws IllegalArgumentException if the value is not a valid option. + */ + void checkValue(String value) throws IllegalArgumentException + { + Set onValues = getOnValues(); + if (COSName.Off.getName().compareTo(value) != 0 && !onValues.contains(value)) + { + throw new IllegalArgumentException("value '" + value + + "' is not a valid option for the field " + getFullyQualifiedName() + + ", valid values are: " + onValues + " and " + COSName.Off.getName()); + } + } + + private void updateByValue(String value) + { + getCOSObject().setName(COSName.V, value); + // update the appearance state (AS) + for (PDAnnotationWidget widget : getWidgets()) + { + if (widget.getAppearance() == null) + { + continue; + } + PDAppearanceEntry appearanceEntry = widget.getAppearance().getNormalAppearance(); + if (appearanceEntry.getCOSObject().containsKey(value)) + { + widget.setAppearanceState(value); + } + else + { + widget.setAppearanceState(COSName.Off.getName()); + } + } + } + + private void updateByOption(String value) + { + List widgets = getWidgets(); + List options = getExportValues(); + + if (widgets.size() != options.size()) + { + throw new IllegalArgumentException("The number of options doesn't match the number of widgets"); + } + + if (value.equals(COSName.Off.getName())) + { + updateByValue(value); + } + else + { + // the value is the index of the matching option + int optionsIndex = options.indexOf(value); + + // get the values the options are pointing to as + // this might not be numerical + // see PDFBOX-3682 + if (optionsIndex != -1) + { + updateByValue(getOnValue(optionsIndex)); + } + } + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckBox.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckBox.java new file mode 100644 index 00000000000..f0aec3e031e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDCheckBox.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.Set; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry; + +/** + * A check box toggles between two states, on and off. + * + * @author Ben Litchfield + * @author sug + */ +public final class PDCheckBox extends PDButton +{ + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDCheckBox(PDAcroForm acroForm) + { + super(acroForm); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDCheckBox(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * This will tell if this radio button is currently checked or not. + * This is equivalent to calling {@link #getValue()}. + * + * @return true If this field is checked. + */ + public boolean isChecked() + { + return getValue().compareTo(getOnValue()) == 0; + } + + /** + * Checks the check box. + * + * @throws IOException if the appearance couldn't be generated. + */ + public void check() throws IOException + { + setValue(getOnValue()); + } + + /** + * Unchecks the check box. + * + * @throws IOException if the appearance couldn't be generated. + */ + public void unCheck() throws IOException + { + setValue(COSName.Off.getName()); + } + + /** + * Get the value which sets the check box to the On state. + * + *

    The On value should be 'Yes' but other values are possible + * so we need to look for that. On the other hand the Off value shall + * always be 'Off'. If not set or not part of the normal appearance keys + * 'Off' is the default

    + * + * @return the value setting the check box to the On state. + * If an empty string is returned there is no appearance definition. + */ + public String getOnValue() + { + PDAnnotationWidget widget = this.getWidgets().get(0); + PDAppearanceDictionary apDictionary = widget.getAppearance(); + + String onValue = ""; + if (apDictionary != null) + { + PDAppearanceEntry normalAppearance = apDictionary.getNormalAppearance(); + if (normalAppearance != null) + { + Set entries = normalAppearance.getSubDictionary().keySet(); + for (COSName entry : entries) + { + if (COSName.Off.compareTo(entry) != 0) + { + onValue = entry.getName(); + } + } + } + } + return onValue; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java new file mode 100644 index 00000000000..7d3d5298f00 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java @@ -0,0 +1,494 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.interactive.form.FieldUtils.KeyValue; + +/** + * A choice field contains several text items, one or more of which shall be selected as the field + * value. + * + * @author sug + * @author John Hewson + */ +public abstract class PDChoice extends PDVariableText +{ + static final int FLAG_COMBO = 1 << 17; + + private static final int FLAG_SORT = 1 << 19; + private static final int FLAG_MULTI_SELECT = 1 << 21; + private static final int FLAG_DO_NOT_SPELL_CHECK = 1 << 22; + private static final int FLAG_COMMIT_ON_SEL_CHANGE = 1 << 26; + + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDChoice(PDAcroForm acroForm) + { + super(acroForm); + getCOSObject().setItem(COSName.FT, COSName.CH); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDChoice(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * This will get the option values "Opt". + * + *

    + * For a choice field the options array can either be an array + * of text strings or an array of a two-element arrays.
    + * The method always only returns either the text strings or, + * in case of two-element arrays, an array of the first element of + * the two-element arrays + *

    + *

    + * Use {@link #getOptionsExportValues()} and {@link #getOptionsDisplayValues()} + * to get the entries of two-element arrays. + *

    + * + * @return List containing the export values. + */ + public List getOptions() + { + COSBase values = getCOSObject().getDictionaryObject(COSName.OPT); + return FieldUtils.getPairableItems(values, 0); + } + + /** + * This will set the display values - the 'Opt' key. + * + *

    + * The Opt array specifies the list of options in the choice field either + * as an array of text strings representing the display value + * or as an array of a two-element array where the + * first element is the export value and the second the display value. + *

    + *

    + * To set both the export and the display value use {@link #setOptions(List, List)} + *

    + * + * @param displayValues List containing all possible options. + */ + public void setOptions(List displayValues) + { + if (displayValues != null && !displayValues.isEmpty()) + { + if (isSort()) + { + Collections.sort(displayValues); + } + getCOSObject().setItem(COSName.OPT, COSArrayList.convertStringListToCOSStringCOSArray(displayValues)); + } + else + { + getCOSObject().removeItem(COSName.OPT); + } + } + + /** + * This will set the display and export values - the 'Opt' key. + * + *

    + * This will set both, the export value and the display value + * of the choice field. If either one of the parameters is null or an + * empty list is supplied the options will + * be removed. + *

    + *

    + * An {@link IllegalArgumentException} will be thrown if the + * number of items in the list differ. + *

    + * + * @see #setOptions(List) + * @param exportValues List containing all possible export values. + * @param displayValues List containing all possible display values. + */ + public void setOptions(List exportValues, List displayValues) + { + if (exportValues != null && displayValues != null && !exportValues.isEmpty() && !displayValues.isEmpty()) + { + if (exportValues.size() != displayValues.size()) + { + throw new IllegalArgumentException( + "The number of entries for exportValue and displayValue shall be the same."); + } + else + { + List keyValuePairs = FieldUtils.toKeyValueList(exportValues, displayValues); + + if (isSort()) + { + FieldUtils.sortByValue(keyValuePairs); + } + + COSArray options = new COSArray(); + for (int i = 0; i + * For options with an array of text strings the display value and export value + * are the same.
    + * For options with an array of two-element arrays the display value is the + * second entry in the two-element array. + *

    + * + * @return List containing all the display values. + */ + public List getOptionsDisplayValues() + { + COSBase values = getCOSObject().getDictionaryObject(COSName.OPT); + return FieldUtils.getPairableItems(values, 1); + } + + /** + * This will get the export values from the options. + * + *

    + * For options with an array of text strings the display value and export value + * are the same.
    + * For options with an array of two-element arrays the export value is the + * first entry in the two-element array. + *

    + * + * @return List containing all export values. + */ + public List getOptionsExportValues() + { + return getOptions(); + } + + /** + * This will get the indices of the selected options - the 'I' key. + *

    + * This is only needed if a choice field allows multiple selections and + * two different items have the same export value or more than one values + * is selected. + *

    + *

    The indices are zero-based

    + * + * @return List containing the indices of all selected options. + */ + public List getSelectedOptionsIndex() + { + COSBase value = getCOSObject().getDictionaryObject(COSName.I); + if (value instanceof COSArray) + { + return COSArrayList.convertIntegerCOSArrayToList((COSArray) value); + } + return Collections.emptyList(); + } + + /** + * This will set the indices of the selected options - the 'I' key. + *

    + * This method is preferred over {@link #setValue(List)} for choice fields which + *

      + *
    • do support multiple selections
    • + *
    • have export values with the same value
    • + *
    + *

    + * Setting the index will set the value too. + * + * @param values List containing the indices of all selected options. + */ + public void setSelectedOptionsIndex(List values) + { + if (values != null && !values.isEmpty()) + { + if (!isMultiSelect()) + { + throw new IllegalArgumentException( + "Setting the indices is not allowed for choice fields not allowing multiple selections."); + } + getCOSObject().setItem(COSName.I, COSArrayList.converterToCOSArray(values)); + } + else + { + getCOSObject().removeItem(COSName.I); + } + } + + /** + * Determines if Sort is set. + * + *

    + * If set, the field’s option items shall be sorted alphabetically. + * The sorting has to be done when writing the PDF. PDF Readers are supposed to + * display the options in the order in which they occur in the Opt array. + *

    + * + * @return true if the options are sorted. + */ + public boolean isSort() + { + return getCOSObject().getFlag(COSName.FF, FLAG_SORT); + } + + /** + * Set the Sort bit. + * + * @see #isSort() + * @param sort The value for Sort. + */ + public void setSort(boolean sort) + { + getCOSObject().setFlag(COSName.FF, FLAG_SORT, sort); + } + + /** + * Determines if MultiSelect is set. + * + * @return true if multi select is allowed. + */ + public boolean isMultiSelect() + { + return getCOSObject().getFlag(COSName.FF, FLAG_MULTI_SELECT); + } + + /** + * Set the MultiSelect bit. + * + * @param multiSelect The value for MultiSelect. + */ + public void setMultiSelect(boolean multiSelect) + { + getCOSObject().setFlag(COSName.FF, FLAG_MULTI_SELECT, multiSelect); + } + + /** + * Determines if DoNotSpellCheck is set. + * + * @return true if spell checker is disabled. + */ + public boolean isDoNotSpellCheck() + { + return getCOSObject().getFlag(COSName.FF, FLAG_DO_NOT_SPELL_CHECK); + } + + /** + * Set the DoNotSpellCheck bit. + * + * @param doNotSpellCheck The value for DoNotSpellCheck. + */ + public void setDoNotSpellCheck(boolean doNotSpellCheck) + { + getCOSObject().setFlag(COSName.FF, FLAG_DO_NOT_SPELL_CHECK, doNotSpellCheck); + } + + /** + * Determines if CommitOnSelChange is set. + * + * @return true if value shall be committed as soon as a selection is made. + */ + public boolean isCommitOnSelChange() + { + return getCOSObject().getFlag(COSName.FF, FLAG_COMMIT_ON_SEL_CHANGE); + } + + /** + * Set the CommitOnSelChange bit. + * + * @param commitOnSelChange The value for CommitOnSelChange. + */ + public void setCommitOnSelChange(boolean commitOnSelChange) + { + getCOSObject().setFlag(COSName.FF, FLAG_COMMIT_ON_SEL_CHANGE, commitOnSelChange); + } + + /** + * Determines if Combo is set. + * + * @return true if value the choice is a combo box.. + */ + public boolean isCombo() + { + return getCOSObject().getFlag(COSName.FF, FLAG_COMBO); + } + + /** + * Set the Combo bit. + * + * @param combo The value for Combo. + */ + public void setCombo(boolean combo) + { + getCOSObject().setFlag(COSName.FF, FLAG_COMBO, combo); + } + + /** + * Set the selected value of this field, and try to update the visual appearance. + * + * @param value The name of the selected item. + * @throws IOException if the value could not be set + */ + @Override + public void setValue(String value) throws IOException + { + getCOSObject().setString(COSName.V, value); + + // remove I key for single valued choice field + setSelectedOptionsIndex(null); + + applyChange(); + } + + /** + * Sets the default value of this field. + * + * @param value The name of the selected item. + */ + public void setDefaultValue(String value) + { + getCOSObject().setString(COSName.DV, value); + } + + /** + * Sets the entry "V" to the given values. Requires {@link #isMultiSelect()} to be true. + * + * @param values the list of values + * @throws IOException if the appearance couldn't be generated. + */ + public void setValue(List values) throws IOException + { + if (values != null && !values.isEmpty()) + { + if (!isMultiSelect()) + { + throw new IllegalArgumentException("The list box does not allow multiple selections."); + } + if (!getOptions().containsAll(values)) + { + throw new IllegalArgumentException("The values are not contained in the selectable options."); + } + getCOSObject().setItem(COSName.V, COSArrayList.convertStringListToCOSStringCOSArray(values)); + updateSelectedOptionsIndex(values); + } + else + { + getCOSObject().removeItem(COSName.V); + getCOSObject().removeItem(COSName.I); + } + applyChange(); + } + + /** + * Returns the selected values, or an empty List. This list always contains a single item + * unless {@link #isMultiSelect()} is true. + * + * @return A non-null string. + */ + public List getValue() + { + return getValueFor(COSName.V); + } + + /** + * Returns the default values, or an empty List. This list always contains a single item + * unless {@link #isMultiSelect()} is true. + * + * @return A non-null string. + */ + public List getDefaultValue() + { + return getValueFor(COSName.DV); + } + + /** + * Returns the selected values, or an empty List, for the given key. + */ + private List getValueFor(COSName name) + { + COSBase value = getCOSObject().getDictionaryObject(name); + if (value instanceof COSString) + { + List array = new ArrayList<>(); + array.add(((COSString) value).getString()); + return array; + } + else if (value instanceof COSArray) + { + return COSArrayList.convertCOSStringCOSArrayToList((COSArray)value); + } + return Collections.emptyList(); + } + + @Override + public String getValueAsString() + { + return Arrays.toString(getValue().toArray()); + } + + /** + * Update the 'I' key based on values set. + */ + private void updateSelectedOptionsIndex(List values) + { + List options = getOptions(); + List indices = new ArrayList<>(); + + for (String value : values) + { + indices.add(options.indexOf(value)); + } + + // Indices have to be "... array of integers, sorted in ascending order ..." + Collections.sort(indices); + setSelectedOptionsIndex(indices); + } + + @Override + abstract void constructAppearances() throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java new file mode 100644 index 00000000000..4f3e9018108 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDComboBox.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A combo box consisting of a drop-down list. + * May be accompanied by an editable text box in which non-predefined values may be entered. + * + * @author John Hewson + */ +public final class PDComboBox extends PDChoice +{ + private static final int FLAG_EDIT = 1 << 18; + + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDComboBox(PDAcroForm acroForm) + { + super(acroForm); + setCombo(true); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDComboBox(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * Determines if Edit is set. + * + * @return true if the combo box shall include an editable text box as well as a drop-down list. + */ + public boolean isEdit() + { + return getCOSObject().getFlag(COSName.FF, FLAG_EDIT); + } + + /** + * Set the Edit bit. + * + * @param edit The value for Edit. + */ + public void setEdit(boolean edit) + { + getCOSObject().setFlag(COSName.FF, FLAG_EDIT, edit); + } + + @Override + void constructAppearances() throws IOException + { + AppearanceGeneratorHelper apHelper; + apHelper = new AppearanceGeneratorHelper(this); + List values = getValue(); + + if (!values.isEmpty()) + { + apHelper.setAppearanceValue(values.get(0)); + } + else + { + apHelper.setAppearanceValue(""); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDDefaultAppearanceString.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDDefaultAppearanceString.java new file mode 100644 index 00000000000..82a45de31b7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDDefaultAppearanceString.java @@ -0,0 +1,329 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSObject; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdfparser.PDFStreamParser; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; + +/** + * Represents a default appearance string, as found in the /DA entry of free text annotations. + * + *

    The default appearance string (DA) contains any graphics state or text state operators needed + * to establish the graphics state parameters, such as text size and colour, for displaying the + * field’s variable text. Only operators that are allowed within text objects shall occur in this + * string. + * + * Note: This class is not yet public, as its API is still unstable. + */ +class PDDefaultAppearanceString +{ + /** + * The default font size used by Acrobat. + */ + private static final float DEFAULT_FONT_SIZE = 12; + + private final PDResources defaultResources; + + private COSName fontName; + private PDFont font; + private float fontSize = DEFAULT_FONT_SIZE; + private PDColor fontColor; + + /** + * Constructor for reading an existing DA string. + * + * @param defaultResources DR entry + * @param defaultAppearance DA entry + * @throws IOException If the DA could not be parsed + */ + PDDefaultAppearanceString(COSString defaultAppearance, PDResources defaultResources) throws IOException + { + if (defaultAppearance == null) + { + throw new IllegalArgumentException("/DA is a required entry"); + } + + if (defaultResources == null) + { + throw new IllegalArgumentException("/DR is a required entry"); + } + + this.defaultResources = defaultResources; + processAppearanceStringOperators(defaultAppearance.getBytes()); + } + + /** + * Processes the operators of the given content stream. + * + * @param content the content to parse. + * @throws IOException if there is an error reading or parsing the content stream. + */ + private void processAppearanceStringOperators(byte[] content) throws IOException + { + List arguments = new ArrayList<>(); + PDFStreamParser parser = new PDFStreamParser(content); + Object token = parser.parseNextToken(); + while (token != null) + { + if (token instanceof COSObject) + { + arguments.add(((COSObject) token).getObject()); + } + else if (token instanceof Operator) + { + processOperator((Operator) token, arguments); + arguments = new ArrayList<>(); + } + else + { + arguments.add((COSBase) token); + } + token = parser.parseNextToken(); + } + } + + /** + * This is used to handle an operation. + * + * @param operator The operation to perform. + * @param operands The list of arguments. + * @throws IOException If there is an error processing the operation. + */ + private void processOperator(Operator operator, List operands) throws IOException + { + switch (operator.getName()) + { + case "Tf": + processSetFont(operands); + break; + case "g": + case "rg": + case "k": + processSetFontColor(operands); + break; + default: + break; + } + } + + /** + * Process the set font and font size operator. + * + * @param operands the font name and size + * @throws IOException in case there are missing operators or the font is not within the resources + */ + private void processSetFont(List operands) throws IOException + { + if (operands.size() < 2) + { + throw new IOException("Missing operands for set font operator " + Arrays.toString(operands.toArray())); + } + + COSBase base0 = operands.get(0); + COSBase base1 = operands.get(1); + if (!(base0 instanceof COSName)) + { + return; + } + if (!(base1 instanceof COSNumber)) + { + return; + } + COSName fontName = (COSName) base0; + + PDFont font = defaultResources.getFont(fontName); + float fontSize = ((COSNumber) base1).floatValue(); + + // todo: handle cases where font == null with special mapping logic (see PDFBOX-2661) + if (font == null) + { + throw new IOException("Could not find font: /" + fontName.getName()); + } + setFontName(fontName); + setFont(font); + setFontSize(fontSize); + } + + /** + * Process the font color operator. + * + * This is assumed to be an RGB color. + * + * @param operands the color components + * @throws IOException in case of the color components not matching + */ + private void processSetFontColor(List operands) throws IOException + { + PDColorSpace colorSpace; + + switch (operands.size()) + { + case 1: + colorSpace = PDDeviceGray.INSTANCE; + break; + case 3: + colorSpace = PDDeviceRGB.INSTANCE; + break; + case 4: + colorSpace = PDDeviceCMYK.INSTANCE; + break; + default: + throw new IOException("Missing operands for set non stroking color operator " + Arrays.toString(operands.toArray())); + } + COSArray array = new COSArray(); + array.addAll(operands); + setFontColor(new PDColor(array, colorSpace)); + } + + /** + * Get the font name + * + * @return the font name to use for resource lookup + */ + COSName getFontName() + { + return fontName; + } + + /** + * Set the font name. + * + * @param fontName the font name to use for resource lookup + */ + void setFontName(COSName fontName) + { + this.fontName = fontName; + } + + /** + * Returns the font. + */ + PDFont getFont() throws IOException + { + return font; + } + + /** + * Set the font. + * + * @param font the font to use. + */ + void setFont(PDFont font) + { + this.font = font; + } + + /** + * Returns the font size. + */ + public float getFontSize() + { + return fontSize; + } + + /** + * Set the font size. + * + * @param fontSize the font size. + */ + void setFontSize(float fontSize) + { + this.fontSize = fontSize; + } + + /** + * Returns the font color + */ + PDColor getFontColor() + { + return fontColor; + } + + /** + * Set the font color. + * + * @param fontColor the fontColor to use. + */ + void setFontColor(PDColor fontColor) + { + this.fontColor = fontColor; + } + + /** + * Write font name, font size and color from the /DA string to the given content stream. + * + * @param contents The content stream. + * @param zeroFontSize The calculated font size to use if the /DA string has a size 0 + * (autosize). Otherwise the size from the /DA string is used. + */ + void writeTo(PDAppearanceContentStream contents, float zeroFontSize) throws IOException + { + float fontSize = getFontSize(); + if (Float.compare(fontSize, 0) == 0) + { + fontSize = zeroFontSize; + } + contents.setFont(getFont(), fontSize); + + if (getFontColor() != null) + { + contents.setNonStrokingColor(getFontColor()); + } + } + + /** + * Copies any needed resources from the document’s DR dictionary into the stream’s Resources + * dictionary. Resources with the same name shall be left intact. + */ + void copyNeededResourcesTo(PDAppearanceStream appearanceStream) throws IOException + { + // make sure we have resources + PDResources streamResources = appearanceStream.getResources(); + if (streamResources == null) + { + streamResources = new PDResources(); + appearanceStream.setResources(streamResources); + } + + if (streamResources.getFont(fontName) == null) + { + streamResources.put(fontName, getFont()); + } + + // todo: other kinds of resource... + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java new file mode 100644 index 00000000000..285be228969 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java @@ -0,0 +1,476 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.fdf.FDFField; +import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; + +/** + * A field in an interactive form. + */ +public abstract class PDField implements COSObjectable +{ + private static final int FLAG_READ_ONLY = 1; + private static final int FLAG_REQUIRED = 1 << 1; + private static final int FLAG_NO_EXPORT = 1 << 2; + + private final PDAcroForm acroForm; + private final PDNonTerminalField parent; + private final COSDictionary dictionary; + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + */ + PDField(PDAcroForm acroForm) + { + this(acroForm, new COSDictionary(), null); + } + + /** + * Constructor. + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDField(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + this.acroForm = acroForm; + this.dictionary = field; + this.parent = parent; + } + + /** + * Creates a COSField subclass from the given COS field. This is for reading fields from PDFs. + * + * @param form the form that the field is part of + * @param field the dictionary representing a field element + * @param parent the parent node of the node to be created, or null if root. + * @return a new PDField instance + */ + static PDField fromDictionary(PDAcroForm form, COSDictionary field, PDNonTerminalField parent) + { + return PDFieldFactory.createField(form, field, parent); + } + + /** + * Returns the given attribute, inheriting from parent nodes if necessary. + * + * @param key the key to look up + * @return COS value for the given key + */ + protected COSBase getInheritableAttribute(COSName key) + { + if (dictionary.containsKey(key)) + { + return dictionary.getDictionaryObject(key); + } + else if (parent != null) + { + return parent.getInheritableAttribute(key); + } + else + { + return acroForm.getCOSObject().getDictionaryObject(key); + } + } + + /** + * Get the FT entry of the field. This is a read only field and is set depending on the actual type. The field type + * is an inheritable attribute. + * + * @return The Field type. + * + */ + public abstract String getFieldType(); + + /** + * Returns a string representation of the "V" entry, or an empty string. + * + * @return The list of widget annotations. + */ + public abstract String getValueAsString(); + + /** + * Sets the value of the field. + * + * @param value the new field value. + * + * @throws IOException if the value could not be set + */ + public abstract void setValue(String value) throws IOException; + + + /** + * Returns the widget annotations associated with this field. + * + * For {@link PDNonTerminalField} the list will be empty as non terminal fields + * have no visual representation in the form. + * + * @return a List of {@link PDAnnotationWidget} annotations. Be aware that this list is + * not backed by the actual widget collection of the field, so adding or deleting has no + * effect on the PDF document. For {@link PDTerminalField} you'd have to call + * {@link PDTerminalField#setWidgets(java.util.List) setWidgets()} with the modified list. + */ + public abstract List getWidgets(); + + /** + * sets the field to be read-only. + * + * @param readonly The new flag for readonly. + */ + public void setReadOnly(boolean readonly) + { + dictionary.setFlag(COSName.FF, FLAG_READ_ONLY, readonly); + } + + /** + * + * @return true if the field is readonly + */ + public boolean isReadOnly() + { + return dictionary.getFlag(COSName.FF, FLAG_READ_ONLY); + } + + /** + * sets the flag whether the field is to be required to have a value at the time it is exported + * by a submit-form action. + * + * @param required The new flag for required. + */ + public void setRequired(boolean required) + { + dictionary.setFlag(COSName.FF, FLAG_REQUIRED, required); + } + + /** + * @return true if the field is required to have a value at the time it is exported by a + * submit-form action. + */ + public boolean isRequired() + { + return dictionary.getFlag(COSName.FF, FLAG_REQUIRED); + } + + /** + * sets the field to be not exported. + * + * @param noExport The new flag for noExport. + */ + public void setNoExport(boolean noExport) + { + dictionary.setFlag(COSName.FF, FLAG_NO_EXPORT, noExport); + } + + /** + * + * @return true if the field is not to be exported. + */ + public boolean isNoExport() + { + return dictionary.getFlag(COSName.FF, FLAG_NO_EXPORT); + } + + /** + * This will get the flags for this field. + * + * @return flags The set of flags. + */ + public abstract int getFieldFlags(); + + /** + * This will set the flags for this field. + * + * @param flags The new flags. + */ + public void setFieldFlags(int flags) + { + dictionary.setInt(COSName.FF, flags); + } + + /** + * Get the additional actions for this field. This will return null if there + * are no additional actions for this field. + * + * @return The actions of the field. + */ + public PDFormFieldAdditionalActions getActions() + { + COSDictionary aa = (COSDictionary) dictionary.getDictionaryObject(COSName.AA); + if (aa != null) + { + return new PDFormFieldAdditionalActions(aa); + } + return null; + } + + /** + * This will import a fdf field from a fdf document. + * + * @param fdfField The fdf field to import. + * @throws IOException If there is an error importing the data for this field. + */ + void importFDF(FDFField fdfField) throws IOException + { + COSBase fieldValue = fdfField.getCOSValue(); + + if (fieldValue != null && this instanceof PDTerminalField) + { + PDTerminalField currentField = (PDTerminalField) this; + + if (fieldValue instanceof COSName) + { + currentField.setValue(((COSName) fieldValue).getName()); + } + else if (fieldValue instanceof COSString) + { + currentField.setValue(((COSString) fieldValue).getString()); + } + else if (fieldValue instanceof COSStream) + { + currentField.setValue(((COSStream) fieldValue).toTextString()); + } + else if (fieldValue instanceof COSArray && this instanceof PDChoice) + { + ((PDChoice) this).setValue(COSArrayList.convertCOSStringCOSArrayToList((COSArray) fieldValue)); + } + else + { + throw new IOException("Error:Unknown type for field import" + fieldValue); + } + } + else if (fieldValue != null) + { + dictionary.setItem(COSName.V, fieldValue); + } + + Integer ff = fdfField.getFieldFlags(); + if (ff != null) + { + setFieldFlags(ff); + } + else + { + // these are suppose to be ignored if the Ff is set. + Integer setFf = fdfField.getSetFieldFlags(); + int fieldFlags = getFieldFlags(); + + if (setFf != null) + { + int setFfInt = setFf; + fieldFlags = fieldFlags | setFfInt; + setFieldFlags(fieldFlags); + } + + Integer clrFf = fdfField.getClearFieldFlags(); + if (clrFf != null) + { + // we have to clear the bits of the document fields for every bit that is + // set in this field. + // + // Example: + // docFf = 1011 + // clrFf = 1101 + // clrFfValue = 0010; + // newValue = 1011 & 0010 which is 0010 + int clrFfValue = clrFf; + clrFfValue ^= 0xFFFFFFFF; + fieldFlags = fieldFlags & clrFfValue; + setFieldFlags(fieldFlags); + } + } + } + + /** + * Exports this field and its children as FDF. + */ + abstract FDFField exportFDF() throws IOException; + + /** + * Get the parent field to this field, or null if none exists. + * + * @return The parent field. + */ + public PDNonTerminalField getParent() + { + return parent; + } + + /** + * This will find one of the child elements. The name array are the components of the name to search down the tree + * of names. The nameIndex is where to start in that array. This method is called recursively until it finds the end + * point based on the name array. + * + * @param name An array that picks the path to the field. + * @param nameIndex The index into the array. + * @return The field at the endpoint or null if none is found. + */ + PDField findKid(String[] name, int nameIndex) + { + PDField retval = null; + COSArray kids = (COSArray) dictionary.getDictionaryObject(COSName.KIDS); + if (kids != null) + { + for (int i = 0; retval == null && i < kids.size(); i++) + { + COSDictionary kidDictionary = (COSDictionary) kids.getObject(i); + if (name[nameIndex].equals(kidDictionary.getString(COSName.T))) + { + retval = PDField.fromDictionary(acroForm, kidDictionary, + (PDNonTerminalField)this); + if (retval != null && name.length > nameIndex + 1) + { + retval = retval.findKid(name, nameIndex + 1); + } + } + } + } + return retval; + } + + /** + * This will get the acroform that this field is part of. + * + * @return The form this field is on. + */ + public PDAcroForm getAcroForm() + { + return acroForm; + } + + /** + * This will get the dictionary associated with this field. + * + * @return the dictionary that this class wraps. + */ + @Override + public COSDictionary getCOSObject() + { + return dictionary; + } + + /** + * Returns the partial name of the field. + * + * @return the name of the field + */ + public String getPartialName() + { + return dictionary.getString(COSName.T); + } + /** + * This will set the partial name of the field. + * + * @param name The new name for the field. + */ + public void setPartialName(String name) + { + dictionary.setString(COSName.T, name); + } + + /** + * Returns the fully qualified name of the field, which is a concatenation of the names of all the parents fields. + * + * @return the name of the field + */ + public String getFullyQualifiedName() + { + String finalName = getPartialName(); + String parentName = parent != null ? parent.getFullyQualifiedName() : null; + if (parentName != null) + { + if (finalName != null) + { + finalName = parentName + "." + finalName; + } + else + { + finalName = parentName; + } + } + return finalName; + } + + /** + * Gets the alternate name of the field ("shall be used in place of the actual field name + * wherever the field shall be identified in the user interface (such as in error or status + * messages referring to the field)"). + * + * @return the alternate name of the field + */ + public String getAlternateFieldName() + { + return dictionary.getString(COSName.TU); + } + + /** + * This will set the alternate name of the field ("shall be used in place of the actual field + * name wherever the field shall be identified in the user interface (such as in error or status + * messages referring to the field)"). The text appears as a tool tip in Adobe Reader. Because + * of the usage for error or status messages, it should be different for each field. + * + * @param alternateFieldName the alternate name of the field. + */ + public void setAlternateFieldName(String alternateFieldName) + { + dictionary.setString(COSName.TU, alternateFieldName); + } + + /** + * Gets the mapping name of the field. + * + * The mapping name shall be used when exporting interactive form field + * data from the document. + * + * @return the mapping name of the field + */ + public String getMappingName() + { + return dictionary.getString(COSName.TM); + } + + /** + * This will set the mapping name of the field. + * + * @param mappingName the mapping name of the field + */ + public void setMappingName(String mappingName) + { + dictionary.setString(COSName.TM, mappingName); + } + + @Override + public String toString() + { + return getFullyQualifiedName() + "{type: " + getClass().getSimpleName() + " value: " + + getInheritableAttribute(COSName.V) + "}"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java new file mode 100644 index 00000000000..5d2500622f4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java @@ -0,0 +1,143 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.interactive.form; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A PDField factory. + */ +final class PDFieldFactory +{ + + private static final String FIELD_TYPE_TEXT = "Tx"; + private static final String FIELD_TYPE_BUTTON = "Btn"; + private static final String FIELD_TYPE_CHOICE = "Ch"; + private static final String FIELD_TYPE_SIGNATURE = "Sig"; + + private PDFieldFactory() + { + } + + /** + * Creates a COSField subclass from the given field. + * + * @param form the form that the field is part of + * @param field the dictionary representing a field element + * @param parent the parent node of the node to be created + * @return the corresponding PDField instance + */ + static PDField createField(PDAcroForm form, COSDictionary field, PDNonTerminalField parent) + { + String fieldType = findFieldType(field); + + // Test if we have a non terminal field first as it might have + // properties which do apply to other fields + // A non terminal fields has Kids entries which do have + // a field name (other than annotations) + if (field.containsKey(COSName.KIDS)) + { + COSArray kids = (COSArray) field.getDictionaryObject(COSName.KIDS); + if (kids != null && kids.size() > 0) + { + for (int i = 0; i < kids.size(); i++) + { + COSBase kid = kids.getObject(i); + if (kid instanceof COSDictionary && ((COSDictionary) kid).getString(COSName.T) != null) + { + return new PDNonTerminalField(form, field, parent); + } + } + } + } + + if (FIELD_TYPE_CHOICE.equals(fieldType)) + { + return createChoiceSubType(form, field, parent); + } + else if (FIELD_TYPE_TEXT.equals(fieldType)) + { + return new PDTextField(form, field, parent); + } + else if (FIELD_TYPE_SIGNATURE.equals(fieldType)) + { + return new PDSignatureField(form, field, parent); + } + else if (FIELD_TYPE_BUTTON.equals(fieldType)) + { + return createButtonSubType(form, field, parent); + } + else + { + // an erroneous non-field object, see PDFBOX-2885 + return null; + } + } + + private static PDField createChoiceSubType(PDAcroForm form, COSDictionary field, + PDNonTerminalField parent) + { + int flags = field.getInt(COSName.FF, 0); + if ((flags & PDChoice.FLAG_COMBO) != 0) + { + return new PDComboBox(form, field, parent); + } + else + { + return new PDListBox(form, field, parent); + } + } + + private static PDField createButtonSubType(PDAcroForm form, COSDictionary field, + PDNonTerminalField parent) + { + int flags = field.getInt(COSName.FF, 0); + // BJL: I have found that the radio flag bit is not always set + // and that sometimes there is just a kids dictionary. + // so, if there is a kids dictionary then it must be a radio button group. + if ((flags & PDButton.FLAG_RADIO) != 0) + { + return new PDRadioButton(form, field, parent); + } + else if ((flags & PDButton.FLAG_PUSHBUTTON) != 0) + { + return new PDPushButton(form, field, parent); + } + else + { + return new PDCheckBox(form, field, parent); + } + } + + private static String findFieldType(COSDictionary dic) + { + String retval = dic.getNameAsString(COSName.FT); + if (retval == null) + { + COSBase base = dic.getDictionaryObject(COSName.PARENT, COSName.P); + if (base instanceof COSDictionary) + { + retval = findFieldType((COSDictionary) base); + } + } + return retval; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTree.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTree.java new file mode 100644 index 00000000000..b614f5f1ac4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldTree.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.util.ArrayDeque; +import java.util.Iterator; +import java.util.Queue; + +import java.util.List; +import java.util.NoSuchElementException; + +/** + * The field tree. + */ +public class PDFieldTree implements Iterable +{ + private final PDAcroForm acroForm; + + /** + * Constructor for reading. + * + * @param acroForm the AcroForm containing the fields. + */ + public PDFieldTree(PDAcroForm acroForm) + { + if (acroForm == null) + { + throw new IllegalArgumentException("root cannot be null"); + } + this.acroForm = acroForm; + } + + /** + * Returns an iterator which walks all fields in the tree, in order. + */ + @Override + public Iterator iterator() + { + return new FieldIterator(acroForm); + } + + /** + * Iterator which walks all fields in the tree, in order. + */ + private static final class FieldIterator implements Iterator + { + private final Queue queue = new ArrayDeque<>(); + + private FieldIterator(PDAcroForm form) + { + List fields = form.getFields(); + for (PDField field : fields) + { + enqueueKids(field); + } + } + + @Override + public boolean hasNext() + { + return !queue.isEmpty(); + } + + @Override + public PDField next() + { + if(!hasNext()){ + throw new NoSuchElementException(); + } + + return queue.poll(); + } + + @Override + public void remove() + { + throw new UnsupportedOperationException(); + } + + private void enqueueKids(PDField node) + { + queue.add(node); + if (node instanceof PDNonTerminalField) + { + List kids = ((PDNonTerminalField) node).getChildren(); + for (PDField kid : kids) + { + enqueueKids(kid); + } + } + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java new file mode 100644 index 00000000000..f7c08493206 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDListBox.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A scrollable list box. Contains several text items, one or more of which shall be selected as the + * field value. + * + * @author John Hewson + */ +public final class PDListBox extends PDChoice +{ + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDListBox(PDAcroForm acroForm) + { + super(acroForm); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDListBox(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * This will get the top index "TI" value. + * + * @return the top index, default value 0. + */ + public int getTopIndex() + { + return getCOSObject().getInt(COSName.TI, 0); + } + + /** + * This will set top index "TI" value. + * + * @param topIndex the value for the top index, null will remove the value. + */ + public void setTopIndex(Integer topIndex) + { + if (topIndex != null) + { + getCOSObject().setInt(COSName.TI, topIndex); + } + else + { + getCOSObject().removeItem(COSName.TI); + } + } + + @Override + void constructAppearances() throws IOException + { + AppearanceGeneratorHelper apHelper; + apHelper = new AppearanceGeneratorHelper(this); + apHelper.setAppearanceValue(""); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java new file mode 100644 index 00000000000..d4be453689c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java @@ -0,0 +1,268 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.fdf.FDFField; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; + +/** + * A non terminal field in an interactive form. + * + * A non terminal field is a node in the fields tree node whose descendants + * are fields. + * + * The attributes such as FT (field type) or V (field value) do not logically + * belong to the non terminal field but are inheritable attributes + * for descendant terminal fields. + */ +public class PDNonTerminalField extends PDField +{ + private static final Log LOG = LogFactory.getLog(PDNonTerminalField.class); + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + */ + public PDNonTerminalField(PDAcroForm acroForm) + { + super(acroForm); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node to be created + */ + PDNonTerminalField(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + @Override + public int getFieldFlags() + { + int retval = 0; + COSInteger ff = (COSInteger) getCOSObject().getDictionaryObject(COSName.FF); + if (ff != null) + { + retval = ff.intValue(); + } + // There is no need to look up the parent hierarchy within a non terminal field + return retval; + } + + @Override + void importFDF(FDFField fdfField) throws IOException + { + super.importFDF(fdfField); + + List fdfKids = fdfField.getKids(); + List children = getChildren(); + for (int i = 0; fdfKids != null && i < fdfKids.size(); i++) + { + for (COSObjectable pdKid : children) + { + if (pdKid instanceof PDField) + { + PDField pdChild = (PDField) pdKid; + FDFField fdfChild = fdfKids.get(i); + String fdfName = fdfChild.getPartialFieldName(); + if (fdfName != null && fdfName.equals(pdChild.getPartialName())) + { + pdChild.importFDF(fdfChild); + } + } + } + } + } + + @Override + FDFField exportFDF() throws IOException + { + FDFField fdfField = new FDFField(); + fdfField.setPartialFieldName(getPartialName()); + fdfField.setValue(getValue()); + + List children = getChildren(); + List fdfChildren = new ArrayList<>(); + for (PDField child : children) + { + fdfChildren.add(child.exportFDF()); + } + fdfField.setKids(fdfChildren); + + return fdfField; + } + + /** + * Returns this field's children. These may be either terminal or non-terminal fields. + * + * @return the list of child fields. Be aware that this list is not backed by the + * children of the field, so adding or deleting has no effect on the PDF document until you call + * {@link #setChildren(java.util.List) setChildren()} with the modified list. + */ + public List getChildren() + { + //TODO: why not return a COSArrayList like in PDPage.getAnnotations() ? + + List children = new ArrayList<>(); + COSArray kids = (COSArray)getCOSObject().getDictionaryObject(COSName.KIDS); + for (int i = 0; i < kids.size(); i++) + { + COSBase kid = kids.getObject(i); + if (kid instanceof COSDictionary) + { + if (kid.getCOSObject() == this.getCOSObject()) + { + LOG.warn("Child field is same object as parent"); + continue; + } + PDField field = PDField.fromDictionary(getAcroForm(), (COSDictionary) kid, this); + if (field != null) + { + children.add(field); + } + } + } + return children; + } + + /** + * Sets the child fields. + * + * @param children The list of child fields. + */ + public void setChildren(List children) + { + COSArray kidsArray = COSArrayList.converterToCOSArray(children); + getCOSObject().setItem(COSName.KIDS, kidsArray); + } + + /** + * {@inheritDoc} + * + *

    Note: while non-terminal fields do inherit field values, this method returns + * the local value, without inheritance. + */ + @Override + public String getFieldType() + { + return getCOSObject().getNameAsString(COSName.FT); + } + + /** + * Returns the COSBase value of the "V" entry. + * + *

    Note: while non-terminal fields do inherit field values, this method returns + * the local value, without inheritance. + */ + public COSBase getValue() + { + return getCOSObject().getDictionaryObject(COSName.V); + } + + /** + * {@inheritDoc} + * + *

    Note: while non-terminal fields do inherit field values, this method returns + * the local value, without inheritance. + */ + @Override + public String getValueAsString() + { + COSBase fieldValue = getCOSObject().getDictionaryObject(COSName.V); + return fieldValue != null ? fieldValue.toString() : ""; + } + + /** + * Sets the value of this field. This may be of any kind which is valid for this field's + * children. + * + *

    Note: while non-terminal fields do inherit field values, this method returns + * the local value, without inheritance. + * @param object + * @throws java.io.IOException + */ + public void setValue(COSBase object) throws IOException + { + getCOSObject().setItem(COSName.V, object); + // todo: propagate change event to children? + // todo: construct appearances of children? + } + + /** + * Sets the plain text value of this field. + * + * @param value Plain text + * @throws IOException if the value could not be set + */ + @Override + public void setValue(String value) throws IOException + { + getCOSObject().setString(COSName.V, value); + // todo: propagate change event to children? + // todo: construct appearances of children? + } + + /** + * Returns the default value of this field. This may be of any kind which is valid for this field's + * children. + * + *

    Note: while non-terminal fields do inherit field values, this method returns + * the local value, without inheritance. + */ + public COSBase getDefaultValue() + { + return getCOSObject().getDictionaryObject(COSName.DV); + } + + /** + * Sets the default of this field. This may be of any kind which is valid for this field's + * children. + * + *

    Note: while non-terminal fields do inherit field values, this method returns + * the local value, without inheritance. + * @param value + */ + public void setDefaultValue(COSBase value) + { + getCOSObject().setItem(COSName.V, value); + } + + @Override + public List getWidgets() + { + List emptyList = Collections.emptyList(); + return Collections.unmodifiableList(emptyList); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java new file mode 100644 index 00000000000..58566c39b49 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDPushButton.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; + +import org.apache.pdfbox.cos.COSDictionary; + +/** + * A pushbutton is a purely interactive control that responds immediately to user + * input without retaining a permanent value. + * + * @author sug + */ +public class PDPushButton extends PDButton +{ + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDPushButton(PDAcroForm acroForm) + { + super(acroForm); + setPushButton(true); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDPushButton(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + @Override + public List getExportValues() + { + return Collections.emptyList(); + } + + @Override + public void setExportValues(List values) + { + if (values != null && !values.isEmpty()) + { + throw new IllegalArgumentException("A PDPushButton shall not use the Opt entry in the field dictionary"); + } + } + + @Override + public String getValue() + { + return ""; + } + + @Override + public String getDefaultValue() + { + return ""; + } + + @Override + public String getValueAsString() + { + return getValue(); + } + + @Override + void constructAppearances() throws IOException + { + // TODO: add appearance handler to generate/update appearance + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java new file mode 100644 index 00000000000..358100ea26e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * Radio button fields contain a set of related buttons that can each be on or off. + * + * @author sug + */ +public final class PDRadioButton extends PDButton +{ + /** + * A Ff flag. + */ + private static final int FLAG_NO_TOGGLE_TO_OFF = 1 << 14; + + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDRadioButton(PDAcroForm acroForm) + { + super(acroForm); + setRadioButton(true); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDRadioButton(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * From the PDF Spec
    + * If set, a group of radio buttons within a radio button field that use the same value for the on state will turn + * on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually + * exclusive (the same behavior as HTML radio buttons). + * + * @param radiosInUnison The new flag for radiosInUnison. + */ + public void setRadiosInUnison(boolean radiosInUnison) + { + getCOSObject().setFlag(COSName.FF, FLAG_RADIOS_IN_UNISON, radiosInUnison); + } + + /** + * + * @return true If the flag is set for radios in unison. + */ + public boolean isRadiosInUnison() + { + return getCOSObject().getFlag(COSName.FF, FLAG_RADIOS_IN_UNISON); + } + + /** + * This will get the selected export values. + *

    + * A RadioButton might have an export value to allow field values + * which can not be encoded as PDFDocEncoding or for the same export value + * being assigned to multiple RadioButtons in a group.
    + * To define an export value the RadioButton must define options {@link #setExportValues(List)} + * which correspond to the individual items within the RadioButton.

    + *

    + * The method will either return the corresponding values from the options entry or in case there + * is no such entry the fields value

    + * + * @return the export value of the field. + */ + public List getSelectedExportValues() + { + Set onValues = getOnValues(); + List exportValues = getExportValues(); + List selectedExportValues = new ArrayList<>(); + if (exportValues.isEmpty()) + { + selectedExportValues.add(getValue()); + return selectedExportValues; + } + else + { + String fieldValue = getValue(); + int idx = 0; + for (String onValue : onValues) + { + if (onValue.compareTo(fieldValue) == 0) + { + selectedExportValues.add(exportValues.get(idx)); + } + } + return selectedExportValues; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java new file mode 100644 index 00000000000..024e07a894d --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDSignatureField.java @@ -0,0 +1,240 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSeedValue; +import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; + +/** + * A signature field is a form field that contains a digital signature. + * + * @author Ben Litchfield + * @author Thomas Chojecki + */ +public class PDSignatureField extends PDTerminalField +{ + private static final Log LOG = LogFactory.getLog(PDSignatureField.class); + + /** + * @see PDTerminalField#PDTerminalField(PDAcroForm) + * + * @param acroForm The acroForm for this field. + */ + public PDSignatureField(PDAcroForm acroForm) + { + super(acroForm); + getCOSObject().setItem(COSName.FT, COSName.SIG); + getWidgets().get(0).setLocked(true); + getWidgets().get(0).setPrinted(true); + setPartialName(generatePartialName()); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node to be created + */ + PDSignatureField(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * Generate a unique name for the signature. + * + * @return the signature's unique name + */ + private String generatePartialName() + { + String fieldName = "Signature"; + Set sigNames = new HashSet<>(); + for (PDField field : getAcroForm().getFieldTree()) + { + if(field instanceof PDSignatureField) + { + sigNames.add(field.getPartialName()); + } + } + int i = 1; + while(sigNames.contains(fieldName+i)) + { + ++i; + } + return fieldName+i; + } + + /** + * Add a signature dictionary to the signature field. + * + * @param value is the PDSignatureField + * @deprecated Use {@link #setValue(PDSignature)} instead. + */ + @Deprecated + public void setSignature(PDSignature value) throws IOException + { + setValue(value); + } + + /** + * Get the signature dictionary. + * + * @return the signature dictionary + * + */ + public PDSignature getSignature() + { + return getValue(); + } + + /** + * Sets the value of this field to be the given signature. + * + * @param value is the PDSignatureField + */ + public void setValue(PDSignature value) throws IOException + { + getCOSObject().setItem(COSName.V, value); + applyChange(); + } + + /** + * This will throw an UnsupportedOperationException if used as the signature fields + * value can't be set using a String + * + * @param value the plain text value. + * + * @throws UnsupportedOperationException in all cases! + */ + @Override + public void setValue(String value) throws UnsupportedOperationException + { + throw new UnsupportedOperationException("Signature fields don't support setting the value as String " + + "- use setValue(PDSignature value) instead"); + } + + + /** + * Sets the default value of this field to be the given signature. + * + * @param value is the PDSignatureField + */ + public void setDefaultValue(PDSignature value) + { + getCOSObject().setItem(COSName.DV, value); + } + + /** + * Returns the signature contained in this field. + * + * @return A signature dictionary. + */ + public PDSignature getValue() + { + COSBase value = getCOSObject().getDictionaryObject(COSName.V); + if (value instanceof COSDictionary) + { + return new PDSignature((COSDictionary)value); + } + return null; + } + + /** + * Returns the default value, if any. + * + * @return A signature dictionary. + */ + public PDSignature getDefaultValue() + { + COSBase value = getCOSObject().getDictionaryObject(COSName.DV); + if (value == null) + { + return null; + } + return new PDSignature((COSDictionary)value); + } + + @Override + public String getValueAsString() + { + PDSignature signature = getValue(); + return signature != null ? signature.toString() : ""; + } + + /** + *

    (Optional; PDF 1.5) A seed value dictionary containing information + * that constrains the properties of a signature that is applied to the + * field.

    + * + * @return the seed value dictionary as PDSeedValue + */ + public PDSeedValue getSeedValue() + { + COSDictionary dict = (COSDictionary) getCOSObject().getDictionaryObject(COSName.SV); + PDSeedValue sv = null; + if (dict != null) + { + sv = new PDSeedValue(dict); + } + return sv; + } + + /** + *

    (Optional; PDF 1.) A seed value dictionary containing information + * that constrains the properties of a signature that is applied to the + * field.

    + * + * @param sv is the seed value dictionary as PDSeedValue + */ + public void setSeedValue(PDSeedValue sv) + { + if (sv != null) + { + getCOSObject().setItem(COSName.SV, sv); + } + } + + @Override + void constructAppearances() throws IOException + { + PDAnnotationWidget widget = this.getWidgets().get(0); + if (widget != null) + { + // check if the signature is visible + if (widget.getRectangle() == null || + Float.compare(widget.getRectangle().getHeight(), 0) == 0 && Float.compare(widget.getRectangle().getWidth(), 0) == 0 || + widget.isNoView() || widget.isHidden()) + { + return; + } + + // TODO: implement appearance generation for signatures + LOG.warn("Appearance generation for signature fields not yet implemented - you need to generate/update that manually"); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java new file mode 100644 index 00000000000..c5ad3ef79f9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSArrayList; +import org.apache.pdfbox.pdmodel.fdf.FDFField; +import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; + +/** + * A field in an interactive form. + * Fields may be one of four types: button, text, choice, or signature. + * + * @author sug + */ +public abstract class PDTerminalField extends PDField +{ + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + */ + protected PDTerminalField(PDAcroForm acroForm) + { + super(acroForm); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDTerminalField(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * Set the actions of the field. + * + * @param actions The field actions. + */ + public void setActions(PDFormFieldAdditionalActions actions) + { + getCOSObject().setItem(COSName.AA, actions); + } + + @Override + public int getFieldFlags() + { + int retval = 0; + COSInteger ff = (COSInteger) getCOSObject().getDictionaryObject(COSName.FF); + if (ff != null) + { + retval = ff.intValue(); + } + else if (getParent() != null) + { + retval = getParent().getFieldFlags(); + } + return retval; + } + + @Override + public String getFieldType() + { + String fieldType = getCOSObject().getNameAsString(COSName.FT); + if (fieldType == null && getParent() != null) + { + fieldType = getParent().getFieldType(); + } + return fieldType; + } + + @Override + public void importFDF(FDFField fdfField) throws IOException + { + super.importFDF(fdfField); + + PDAnnotationWidget widget = getWidgets().get(0); // fixme: ignores multiple widgets + if (widget != null) + { + int annotFlags = widget.getAnnotationFlags(); + Integer f = fdfField.getWidgetFieldFlags(); + if (f != null) + { + widget.setAnnotationFlags(f); + } + else + { + // these are suppose to be ignored if the F is set. + Integer setF = fdfField.getSetWidgetFieldFlags(); + if (setF != null) + { + annotFlags = annotFlags | setF; + widget.setAnnotationFlags(annotFlags); + } + + Integer clrF = fdfField.getClearWidgetFieldFlags(); + if (clrF != null) + { + // we have to clear the bits of the document fields for every bit that is + // set in this field. + // + // Example: + // docF = 1011 + // clrF = 1101 + // clrFValue = 0010; + // newValue = 1011 & 0010 which is 0010 + int clrFValue = clrF; + clrFValue ^= 0xFFFFFFFFL; + annotFlags = annotFlags & clrFValue; + widget.setAnnotationFlags(annotFlags); + } + } + } + } + + @Override + FDFField exportFDF() throws IOException + { + FDFField fdfField = new FDFField(); + fdfField.setPartialFieldName(getPartialName()); + fdfField.setValue(getCOSObject().getDictionaryObject(COSName.V)); + + // fixme: the old code which was here assumed that Kids were PDField instances, + // which is never true. They're annotation widgets. + + return fdfField; + } + + /** + * Returns the widget annotations associated with this field. + * + * @return The list of widget annotations. Be aware that this list is not backed by the + * actual widget collection of the field, so adding or deleting has no effect on the PDF + * document until you call {@link #setWidgets(java.util.List) setWidgets()} with the modified + * list. + */ + @Override + public List getWidgets() + { + List widgets = new ArrayList<>(); + COSArray kids = (COSArray)getCOSObject().getDictionaryObject(COSName.KIDS); + if (kids == null) + { + // the field itself is a widget + widgets.add(new PDAnnotationWidget(getCOSObject())); + } + else if (kids.size() > 0) + { + // there are multiple widgets + for (int i = 0; i < kids.size(); i++) + { + COSBase kid = kids.getObject(i); + if (kid instanceof COSDictionary) + { + widgets.add(new PDAnnotationWidget((COSDictionary)kid)); + } + } + } + return widgets; + } + + /** + * Sets the field's widget annotations. + * + * @param children The list of widget annotations. + */ + public void setWidgets(List children) + { + COSArray kidsArray = COSArrayList.converterToCOSArray(children); + getCOSObject().setItem(COSName.KIDS, kidsArray); + for (PDAnnotationWidget widget : children) + { + widget.getCOSObject().setItem(COSName.PARENT, this); + } + } + + /** + * This will get the single associated widget that is part of this field. This occurs when the + * Widget is embedded in the fields dictionary. Sometimes there are multiple sub widgets + * associated with this field, in which case you want to use getWidgets(). If the kids entry is + * specified, then the first entry in that list will be returned. + * + * @return The widget that is associated with this field. + * @deprecated Fields may have more than one widget, call {@link #getWidgets()} instead. + */ + @Deprecated + public PDAnnotationWidget getWidget() + { + return getWidgets().get(0); + } + + /** + * Applies a value change to the field. Generates appearances if required and raises events. + * + * @throws IOException if the appearance couldn't be generated + */ + protected final void applyChange() throws IOException + { + constructAppearances(); + // if we supported JavaScript we would raise a field changed event here + } + + /** + * Constructs appearance streams and appearance dictionaries for all widget annotations. + * Subclasses should not call this method directly but via {@link #applyChange()}. + * + * @throws IOException if the appearance couldn't be generated + */ + abstract void constructAppearances() throws IOException; +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java new file mode 100644 index 00000000000..0c054f000a3 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTextField.java @@ -0,0 +1,264 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * A text field is a box or space for text fill-in data typically entered from a keyboard. + * The text may be restricted to a single line or may be permitted to span multiple lines + * + * @author sug + */ +public final class PDTextField extends PDVariableText +{ + private static final int FLAG_MULTILINE = 1 << 12; + private static final int FLAG_PASSWORD = 1 << 13; + private static final int FLAG_FILE_SELECT = 1 << 20; + private static final int FLAG_DO_NOT_SPELL_CHECK = 1 << 22; + private static final int FLAG_DO_NOT_SCROLL = 1 << 23; + private static final int FLAG_COMB = 1 << 24; + private static final int FLAG_RICH_TEXT = 1 << 25; + + /** + * @see PDField#PDField(PDAcroForm) + * + * @param acroForm The acroform. + */ + public PDTextField(PDAcroForm acroForm) + { + super(acroForm); + getCOSObject().setItem(COSName.FT, COSName.TX); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDTextField(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * @return true if the field is multiline + */ + public boolean isMultiline() + { + return getCOSObject().getFlag(COSName.FF, FLAG_MULTILINE); + } + + /** + * Set the multiline bit. + * + * @param multiline The value for the multiline. + */ + public void setMultiline(boolean multiline) + { + getCOSObject().setFlag(COSName.FF, FLAG_MULTILINE, multiline); + } + + /** + * @return true if the field is a password field. + */ + public boolean isPassword() + { + return getCOSObject().getFlag(COSName.FF, FLAG_PASSWORD); + } + + /** + * Set the password bit. + * + * @param password The value for the password. + */ + public void setPassword(boolean password) + { + getCOSObject().setFlag(COSName.FF, FLAG_PASSWORD, password); + } + + /** + * @return true if the field is a file select field. + */ + public boolean isFileSelect() + { + return getCOSObject().getFlag(COSName.FF, FLAG_FILE_SELECT); + } + + /** + * Set the file select bit. + * + * @param fileSelect The value for the fileSelect. + */ + public void setFileSelect(boolean fileSelect) + { + getCOSObject().setFlag(COSName.FF, FLAG_FILE_SELECT, fileSelect); + } + + /** + * @return true if the field is not suppose to spell check. + */ + public boolean doNotSpellCheck() + { + return getCOSObject().getFlag(COSName.FF, FLAG_DO_NOT_SPELL_CHECK); + } + + /** + * Set the doNotSpellCheck bit. + * + * @param doNotSpellCheck The value for the doNotSpellCheck. + */ + public void setDoNotSpellCheck(boolean doNotSpellCheck) + { + getCOSObject().setFlag(COSName.FF, FLAG_DO_NOT_SPELL_CHECK, doNotSpellCheck); + } + + /** + * @return true if the field is not suppose to scroll. + */ + public boolean doNotScroll() + { + return getCOSObject().getFlag(COSName.FF, FLAG_DO_NOT_SCROLL); + } + + /** + * Set the doNotScroll bit. + * + * @param doNotScroll The value for the doNotScroll. + */ + public void setDoNotScroll(boolean doNotScroll) + { + getCOSObject().setFlag(COSName.FF, FLAG_DO_NOT_SCROLL, doNotScroll); + } + + /** + * @return true if the field is not suppose to comb the text display. + */ + public boolean isComb() + { + return getCOSObject().getFlag(COSName.FF, FLAG_COMB); + } + + /** + * Set the comb bit. + * + * @param comb The value for the comb. + */ + public void setComb(boolean comb) + { + getCOSObject().setFlag(COSName.FF, FLAG_COMB, comb); + } + + /** + * @return true if the field is a rich text field. + */ + public boolean isRichText() + { + return getCOSObject().getFlag(COSName.FF, FLAG_RICH_TEXT); + } + + /** + * Set the richText bit. + * + * @param richText The value for the richText. + */ + public void setRichText(boolean richText) + { + getCOSObject().setFlag(COSName.FF, FLAG_RICH_TEXT, richText); + } + + /** + * Returns the maximum number of characters of the text field. + * + * @return the maximum number of characters, returns -1 if the value isn't present + */ + public int getMaxLen() + { + return getCOSObject().getInt(COSName.MAX_LEN); + } + + /** + * Sets the maximum number of characters of the text field. + * + * @param maxLen the maximum number of characters + */ + public void setMaxLen(int maxLen) + { + getCOSObject().setInt(COSName.MAX_LEN, maxLen); + } + + /** + * Set the plain text value of this field, and try to update the visual appearance. + * + * @param value Plain text + * @throws IOException if the value could not be set + */ + @Override + public void setValue(String value) throws IOException + { + getCOSObject().setString(COSName.V, value); + applyChange(); + } + + /** + * Sets the default value of this field. + * + * @param value Plain text + */ + public void setDefaultValue(String value) + { + getCOSObject().setString(COSName.DV, value); + } + + /** + * Returns the value of this field, or an empty string. + * + * @return A non-null string. + */ + public String getValue() + { + return getStringOrStream(getInheritableAttribute(COSName.V)); + } + + /** + * Returns the default value of this field, or an empty string. + * + * @return A non-null string. + */ + public String getDefaultValue() + { + return getStringOrStream(getInheritableAttribute(COSName.DV)); + } + + @Override + public String getValueAsString() + { + return getValue(); + } + + @Override + void constructAppearances() throws IOException + { + AppearanceGeneratorHelper apHelper; + apHelper = new AppearanceGeneratorHelper(this); + apHelper.setAppearanceValue(getValue()); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java new file mode 100644 index 00000000000..c6841c4455e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDVariableText.java @@ -0,0 +1,246 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSNumber; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.PDResources; + +/** + * Base class for fields which use "Variable Text". + * These fields construct an appearance stream dynamically at viewing time. + * + * @author Ben Litchfield + */ +public abstract class PDVariableText extends PDTerminalField +{ + public static final int QUADDING_LEFT = 0; + public static final int QUADDING_CENTERED = 1; + public static final int QUADDING_RIGHT = 2; + + /** + * @see PDTerminalField#PDTerminalField(PDAcroForm) + * + * @param acroForm The acroform. + */ + PDVariableText(PDAcroForm acroForm) + { + super(acroForm); + } + + /** + * Constructor. + * + * @param acroForm The form that this field is part of. + * @param field the PDF object to represent as a field. + * @param parent the parent node of the node + */ + PDVariableText(PDAcroForm acroForm, COSDictionary field, PDNonTerminalField parent) + { + super(acroForm, field, parent); + } + + /** + * Get the default appearance. + * + * This is an inheritable attribute. + * + * The default appearance contains a set of default graphics and text operators + * to define the field’s text size and color. + * + * @return the DA element of the dictionary object + */ + public String getDefaultAppearance() + { + COSString defaultAppearance = (COSString) getInheritableAttribute(COSName.DA); + return defaultAppearance.getString(); + } + + /** + * Get the default appearance. + * + * This is an inheritable attribute. + * + * The default appearance contains a set of default graphics and text operators + * to define the field’s text size and color. + * + * @return the DA element of the dictionary object + */ + PDDefaultAppearanceString getDefaultAppearanceString() throws IOException + { + COSString da = (COSString) getInheritableAttribute(COSName.DA); + PDResources dr = getAcroForm().getDefaultResources(); + return new PDDefaultAppearanceString(da, dr); + } + + /** + * Set the default appearance. + * + * This will set the local default appearance for the variable text field only, not + * affecting a default appearance in the parent hierarchy. + * + * Providing null as the value will remove the local default appearance. + *

    + * This method can also be used to change the font of a field, by replacing the font name from + * this string with another font name found in the AcroForm default resources before + * calling {@link #setValue(java.lang.String) setValue(String)}, see also + * this + * stackoverflow answer. For example, "/Helv 10 Tf 0 g" can be replaced with "/F1 10 Tf 0 + * g". Performance may go down (see + * PDFBOX-4508) if this is done + * for many fields and with a very large font (e.g. ArialUni); to avoid this, save and reload + * the file after changing all fields. + * + * @param daValue a string describing the default appearance + */ + public void setDefaultAppearance(String daValue) + { + getCOSObject().setString(COSName.DA, daValue); + } + + /** + * Get the default style string. + * + * The default style string defines the default style for + * rich text fields. + * + * @return the DS element of the dictionary object + */ + public String getDefaultStyleString() + { + COSString defaultStyleString = (COSString) getCOSObject().getDictionaryObject(COSName.DS); + return defaultStyleString.getString(); + } + + /** + * Set the default style string. + * + * Providing null as the value will remove the default style string. + * + * @param defaultStyleString a string describing the default style. + */ + public void setDefaultStyleString(String defaultStyleString) + { + if (defaultStyleString != null) + { + getCOSObject().setItem(COSName.DS, new COSString(defaultStyleString)); + } + else + { + getCOSObject().removeItem(COSName.DS); + } + } + + /** + * This will get the 'quadding' or justification of the text to be displayed. + * + * This is an inheritable attribute. + *
    + * 0 - Left (default)
    + * 1 - Centered
    + * 2 - Right
    + * Please see the QUADDING_CONSTANTS. + * + * @return The justification of the text strings. + */ + public int getQ() + { + int retval = 0; + + COSNumber number = (COSNumber)getInheritableAttribute(COSName.Q); + + if (number != null) + { + retval = number.intValue(); + } + return retval; + } + + /** + * This will set the quadding/justification of the text. See QUADDING constants. + * + * @param q The new text justification. + */ + public void setQ(int q) + { + getCOSObject().setInt(COSName.Q, q); + } + + /** + * Get the fields rich text value. + * + * @return the rich text value string + */ + public String getRichTextValue() + { + return getStringOrStream(getInheritableAttribute(COSName.RV)); + } + + /** + * Set the fields rich text value. + * + *

    + * Setting the rich text value will not generate the appearance + * for the field. + *
    + * You can set {@link PDAcroForm#setNeedAppearances(Boolean)} to + * signal a conforming reader to generate the appearance stream. + *

    + * + * Providing null as the value will remove the default style string. + * + * @param richTextValue a rich text string + */ + public void setRichTextValue(String richTextValue) + { + if (richTextValue != null) + { + getCOSObject().setItem(COSName.RV, new COSString(richTextValue)); + } + else + { + getCOSObject().removeItem(COSName.RV); + } + } + + /** + * Get a text as text stream. + * + * Some dictionary entries allow either a text or a text stream. + * + * @param base the potential text or text stream + * @return the text stream + */ + protected final String getStringOrStream(COSBase base) + { + if (base instanceof COSString) + { + return ((COSString)base).getString(); + } + else if (base instanceof COSStream) + { + return ((COSStream)base).toTextString(); + } + return ""; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDXFAResource.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDXFAResource.java new file mode 100644 index 00000000000..53a7244c031 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDXFAResource.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.w3c.dom.Document; + +/** + * An XML Forms Architecture (XFA) resource. + * + * @author Ben Litchfield + */ +public final class PDXFAResource implements COSObjectable +{ + + private final COSBase xfa; + + /** + * Constructor. + * + * @param xfaBase The xfa resource. + */ + public PDXFAResource(COSBase xfaBase) + { + xfa = xfaBase; + } + + /** + * {@inheritDoc} + */ + @Override + public COSBase getCOSObject() + { + return xfa; + } + + + /** + * Get the XFA content as byte array. + * + * The XFA is either a stream containing the entire XFA resource + * or an array specifying individual packets that together make + * up the XFA resource. + * + * A packet is a pair of a string and stream. The string contains + * the name of the XML element and the stream contains the complete + * text of this XML element. Each packet represents a complete XML + * element, with the exception of the first and last packet, + * which specify begin and end tags for the xdp:xdp element. + * [IS0 32000-1:2008: 12.7.8] + * + * @return the XFA content + * @throws IOException + */ + public byte[] getBytes() throws IOException + { + // handle the case if the XFA is split into individual parts + if (this.getCOSObject() instanceof COSArray) + { + return getBytesFromPacket((COSArray) this.getCOSObject()); + } + else if (xfa.getCOSObject() instanceof COSStream) + { + return getBytesFromStream((COSStream) this.getCOSObject()); + } + return new byte[0]; + } + + /* + * Read all bytes from a packet + */ + private static byte[] getBytesFromPacket(final COSArray cosArray) throws IOException + { + try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) + { + for (int i = 1; i < cosArray.size(); i += 2) + { + COSBase cosObj = cosArray.getObject(i); + if (cosObj instanceof COSStream) + { + baos.write(getBytesFromStream((COSStream) cosObj.getCOSObject())); + } + } + return baos.toByteArray(); + } + } + + /* + * Read all bytes from a COSStream + */ + private static byte[] getBytesFromStream(final COSStream stream) throws IOException + { + try (final InputStream is = stream.createInputStream()) + { + return IOUtils.toByteArray(is); + } + } + + /** + * Get the XFA content as W3C document. + * + * @see #getBytes() + * + * @return the XFA content + * + * @throws IOException if something went wrong when reading the XFA content. + * + */ + public Document getDocument() throws IOException + { + return org.apache.pdfbox.util.XMLUtil // + .parse(new ByteArrayInputStream(this.getBytes()), true); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainText.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainText.java new file mode 100644 index 00000000000..f0ec1c193bf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainText.java @@ -0,0 +1,290 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.text.AttributedString; +import java.text.BreakIterator; +import java.text.AttributedCharacterIterator.Attribute; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.pdfbox.pdmodel.font.PDFont; + +/** + * A block of text. + *

    + * A block of text can contain multiple paragraphs which will + * be treated individually within the block placement. + *

    + * + */ +class PlainText +{ + private static final float FONTSCALE = 1000f; + + private final List paragraphs; + + /** + * Construct the text block from a single value. + * + * Constructs the text block from a single value splitting + * into individual {@link Paragraph} when a new line character is + * encountered. + * + * @param textValue the text block string. + */ + PlainText(String textValue) + { + List parts = Arrays.asList(textValue.replaceAll("\t", " ").split("\\r\\n|\\n|\\r|\\u2028|\\u2029")); + paragraphs = new ArrayList<>(); + for (String part : parts) + { + // Acrobat prints a space for an empty paragraph + if (part.length() == 0) + { + part = " "; + } + paragraphs.add(new Paragraph(part)); + } + } + + /** + * Construct the text block from a list of values. + * + * Constructs the text block from a list of values treating each + * entry as an individual {@link Paragraph}. + * + * @param listValue the text block string. + */ + PlainText(List listValue) + { + paragraphs = new ArrayList<>(); + for (String part : listValue) + { + paragraphs.add(new Paragraph(part)); + } + } + + /** + * Get the list of paragraphs. + * + * @return the paragraphs. + */ + List getParagraphs() + { + return paragraphs; + } + + /** + * Attribute keys and attribute values used for text handling. + * + * This is similar to {@link java.awt.font.TextAttribute} but + * handled individually as to avoid a dependency on awt. + * + */ + static class TextAttribute extends Attribute + { + /** + * UID for serializing. + */ + private static final long serialVersionUID = -3138885145941283005L; + + /** + * Attribute width of the text. + */ + public static final Attribute WIDTH = new TextAttribute("width"); + + protected TextAttribute(String name) + { + super(name); + } + + + } + + /** + * A block of text to be formatted as a whole. + *

    + * A block of text can contain multiple paragraphs which will + * be treated individually within the block placement. + *

    + * + */ + static class Paragraph + { + private final String textContent; + + Paragraph(String text) + { + textContent = text; + } + + /** + * Get the paragraph text. + * + * @return the text. + */ + String getText() + { + return textContent; + } + + /** + * Break the paragraph into individual lines. + * + * @param font the font used for rendering the text. + * @param fontSize the fontSize used for rendering the text. + * @param width the width of the box holding the content. + * @return the individual lines. + * @throws IOException + */ + List getLines(PDFont font, float fontSize, float width) throws IOException + { + BreakIterator iterator = BreakIterator.getLineInstance(); + iterator.setText(textContent); + + final float scale = fontSize/FONTSCALE; + + int start = iterator.first(); + int end = iterator.next(); + float lineWidth = 0; + + List textLines = new ArrayList<>(); + Line textLine = new Line(); + + while (end != BreakIterator.DONE) + { + String word = textContent.substring(start,end); + float wordWidth = font.getStringWidth(word) * scale; + + lineWidth = lineWidth + wordWidth; + + // check if the last word would fit without the whitespace ending it + if (lineWidth >= width && Character.isWhitespace(word.charAt(word.length()-1))) + { + float whitespaceWidth = font.getStringWidth(word.substring(word.length()-1)) * scale; + lineWidth = lineWidth - whitespaceWidth; + } + + if (lineWidth >= width) + { + textLine.setWidth(textLine.calculateWidth(font, fontSize)); + textLines.add(textLine); + textLine = new Line(); + lineWidth = font.getStringWidth(word) * scale; + } + + AttributedString as = new AttributedString(word); + as.addAttribute(TextAttribute.WIDTH, wordWidth); + Word wordInstance = new Word(word); + wordInstance.setAttributes(as); + textLine.addWord(wordInstance); + start = end; + end = iterator.next(); + } + textLine.setWidth(textLine.calculateWidth(font, fontSize)); + textLines.add(textLine); + return textLines; + } + } + + /** + * An individual line of text. + */ + static class Line + { + private final List words = new ArrayList<>(); + private float lineWidth; + + float getWidth() + { + return lineWidth; + } + + void setWidth(float width) + { + lineWidth = width; + } + + float calculateWidth(PDFont font, float fontSize) throws IOException + { + final float scale = fontSize/FONTSCALE; + float calculatedWidth = 0f; + for (Word word : words) + { + calculatedWidth = calculatedWidth + + (Float) word.getAttributes().getIterator().getAttribute(TextAttribute.WIDTH); + String text = word.getText(); + if (words.indexOf(word) == words.size() -1 && Character.isWhitespace(text.charAt(text.length()-1))) + { + float whitespaceWidth = font.getStringWidth(text.substring(text.length()-1)) * scale; + calculatedWidth = calculatedWidth - whitespaceWidth; + } + } + return calculatedWidth; + } + + List getWords() + { + return words; + } + + float getInterWordSpacing(float width) + { + return (width - lineWidth)/(words.size()-1); + } + + void addWord(Word word) + { + words.add(word); + } + } + + /** + * An individual word. + * + * A word is defined as a string which must be kept + * on the same line. + */ + static class Word + { + private AttributedString attributedString; + private final String textContent; + + Word(String text) + { + textContent = text; + } + + String getText() + { + return textContent; + } + + AttributedString getAttributes() + { + return attributedString; + } + + void setAttributes(AttributedString as) + { + this.attributedString = as; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java new file mode 100644 index 00000000000..efa7741d1e0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java @@ -0,0 +1,287 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.form; + +import java.io.IOException; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDAppearanceContentStream; +import org.apache.pdfbox.pdmodel.interactive.form.PlainText.Line; +import org.apache.pdfbox.pdmodel.interactive.form.PlainText.Paragraph; +import org.apache.pdfbox.pdmodel.interactive.form.PlainText.TextAttribute; +import org.apache.pdfbox.pdmodel.interactive.form.PlainText.Word; + +/** + * TextFormatter to handle plain text formatting. + * + * The text formatter will take a single value or an array of values which + * are treated as paragraphs. + */ + +class PlainTextFormatter +{ + + enum TextAlign + { + LEFT(0), CENTER(1), RIGHT(2), JUSTIFY(4); + + private final int alignment; + + private TextAlign(int alignment) + { + this.alignment = alignment; + } + + int getTextAlign() + { + return alignment; + } + + public static TextAlign valueOf(int alignment) + { + for (TextAlign textAlignment : TextAlign.values()) + { + if (textAlignment.getTextAlign() == alignment) + { + return textAlignment; + } + } + return TextAlign.LEFT; + } + } + + /** + * The scaling factor for font units to PDF units + */ + private static final int FONTSCALE = 1000; + + private final AppearanceStyle appearanceStyle; + private final boolean wrapLines; + private final float width; + + private final PDAppearanceContentStream contents; + private final PlainText textContent; + private final TextAlign textAlignment; + + private float horizontalOffset; + private float verticalOffset; + + static class Builder + { + + // required parameters + private PDAppearanceContentStream contents; + + // optional parameters + private AppearanceStyle appearanceStyle; + private boolean wrapLines = false; + private float width = 0f; + private PlainText textContent; + private TextAlign textAlignment = TextAlign.LEFT; + + + // initial offset from where to start the position of the first line + private float horizontalOffset = 0f; + private float verticalOffset = 0f; + + Builder(PDAppearanceContentStream contents) + { + this.contents = contents; + } + + Builder style(AppearanceStyle appearanceStyle) + { + this.appearanceStyle = appearanceStyle; + return this; + } + + Builder wrapLines(boolean wrapLines) + { + this.wrapLines = wrapLines; + return this; + } + + Builder width(float width) + { + this.width = width; + return this; + } + + Builder textAlign(int alignment) + { + this.textAlignment = TextAlign.valueOf(alignment); + return this; + } + + Builder textAlign(TextAlign alignment) + { + this.textAlignment = alignment; + return this; + } + + + Builder text(PlainText textContent) + { + this.textContent = textContent; + return this; + } + + Builder initialOffset(float horizontalOffset, float verticalOffset) + { + this.horizontalOffset = horizontalOffset; + this.verticalOffset = verticalOffset; + return this; + } + + PlainTextFormatter build() + { + return new PlainTextFormatter(this); + } + } + + private PlainTextFormatter(Builder builder) + { + appearanceStyle = builder.appearanceStyle; + wrapLines = builder.wrapLines; + width = builder.width; + contents = builder.contents; + textContent = builder.textContent; + textAlignment = builder.textAlignment; + horizontalOffset = builder.horizontalOffset; + verticalOffset = builder.verticalOffset; + } + + /** + * Format the text block. + * + * @throws IOException if there is an error writing to the stream. + */ + public void format() throws IOException + { + if (textContent != null && !textContent.getParagraphs().isEmpty()) + { + boolean isFirstParagraph = true; + for (Paragraph paragraph : textContent.getParagraphs()) + { + if (wrapLines) + { + List lines = paragraph.getLines( + appearanceStyle.getFont(), + appearanceStyle.getFontSize(), + width + ); + processLines(lines, isFirstParagraph); + isFirstParagraph = false; + } + else + { + float startOffset = 0f; + + + float lineWidth = appearanceStyle.getFont().getStringWidth(paragraph.getText()) * + appearanceStyle.getFontSize() / FONTSCALE; + + if (lineWidth < width) + { + switch (textAlignment) + { + case CENTER: + startOffset = (width - lineWidth)/2; + break; + case RIGHT: + startOffset = width - lineWidth; + break; + case JUSTIFY: + default: + startOffset = 0f; + } + } + + contents.newLineAtOffset(horizontalOffset + startOffset, verticalOffset); + contents.showText(paragraph.getText()); + } + } + } + } + + /** + * Process lines for output. + * + * Process lines for an individual paragraph and generate the + * commands for the content stream to show the text. + * + * @param lines the lines to process. + * @throws IOException if there is an error writing to the stream. + */ + private void processLines(List lines, boolean isFirstParagraph) throws IOException + { + float wordWidth; + + float lastPos = 0f; + float startOffset = 0f; + float interWordSpacing = 0f; + + for (Line line : lines) + { + switch (textAlignment) + { + case CENTER: + startOffset = (width - line.getWidth())/2; + break; + case RIGHT: + startOffset = width - line.getWidth(); + break; + case JUSTIFY: + if (lines.indexOf(line) != lines.size() -1) + { + interWordSpacing = line.getInterWordSpacing(width); + } + break; + default: + startOffset = 0f; + } + + float offset = -lastPos + startOffset + horizontalOffset; + + if (lines.indexOf(line) == 0 && isFirstParagraph) + { + contents.newLineAtOffset(offset, verticalOffset); + } + else + { + // keep the last position + verticalOffset = verticalOffset - appearanceStyle.getLeading(); + contents.newLineAtOffset(offset, - appearanceStyle.getLeading()); + } + + lastPos += offset; + + List words = line.getWords(); + for (Word word : words) + { + contents.showText(word.getText()); + wordWidth = (Float) word.getAttributes().getIterator().getAttribute(TextAttribute.WIDTH); + if (words.indexOf(word) != words.size() -1) + { + contents.newLineAtOffset(wordWidth + interWordSpacing, 0f); + lastPos = lastPos + wordWidth + interWordSpacing; + } + } + } + horizontalOffset = horizontalOffset - lastPos; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/package.html new file mode 100644 index 00000000000..a901b5f5cee --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/package.html @@ -0,0 +1,25 @@ + + + + + + + +The interactive package contains classes for handling Interactive Forms, also known as "AcroForms". + + diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java new file mode 100644 index 00000000000..b9bd4cf4881 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDMeasureDictionary.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.measurement; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class represents a measure dictionary. + * + */ +public class PDMeasureDictionary implements COSObjectable +{ + /** + * The type of the dictionary. + */ + public static final String TYPE = "Measure"; + + private final COSDictionary measureDictionary; + + /** + * Constructor. + */ + protected PDMeasureDictionary() + { + this.measureDictionary = new COSDictionary(); + this.getCOSObject().setName(COSName.TYPE, TYPE); + } + + /** + * Constructor. + * + * @param dictionary the corresponding dictionary + */ + public PDMeasureDictionary(COSDictionary dictionary) + { + this.measureDictionary = dictionary; + } + + /** + * This will return the corresponding dictionary. + * + * @return the measure dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.measureDictionary; + } + + /** + * This will return the type of the measure dictionary. + * It must be "Measure" + * + * @return the type + */ + public String getType() + { + return TYPE; + } + + /** + * returns the subtype of the measure dictionary. + * @return the subtype of the measure data dictionary + */ + + public String getSubtype() + { + return this.getCOSObject().getNameAsString(COSName.SUBTYPE, + PDRectlinearMeasureDictionary.SUBTYPE); + } + + /** + * This will set the subtype of the measure dictionary. + * @param subtype the subtype of the measure dictionary + */ + protected void setSubtype(String subtype) + { + this.getCOSObject().setName(COSName.SUBTYPE, subtype); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java new file mode 100644 index 00000000000..1abbf83f0cc --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDNumberFormatDictionary.java @@ -0,0 +1,323 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.measurement; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This class represents a number format dictionary. + * + */ +public class PDNumberFormatDictionary implements COSObjectable +{ + + /** + * The type of the dictionary. + */ + public static final String TYPE = "NumberFormat"; + + /** + * Constant indicating that the label specified by U is a suffix to the value. + */ + public static final String LABEL_SUFFIX_TO_VALUE = "S"; + /** + * Constant indicating that the label specified by U is a postfix to the value. + */ + public static final String LABEL_PREFIX_TO_VALUE = "P"; + + /** + * Constant for showing a fractional value as decimal to the precision specified by the D entry. + */ + public static final String FRACTIONAL_DISPLAY_DECIMAL = "D"; + /** + * Constant for showing a fractional value as a fraction with denominator specified by the D entry. + */ + public static final String FRACTIONAL_DISPLAY_FRACTION = "F"; + /** + * Constant for showing a fractional value without fractional part; round to the nearest whole unit. + */ + public static final String FRACTIONAL_DISPLAY_ROUND = "R"; + /** + * Constant for showing a fractional value without fractional part; truncate to achieve whole units. + */ + public static final String FRACTIONAL_DISPLAY_TRUNCATE = "T"; + + private COSDictionary numberFormatDictionary; + + /** + * Constructor. + */ + public PDNumberFormatDictionary() + { + this.numberFormatDictionary = new COSDictionary(); + this.numberFormatDictionary.setName(COSName.TYPE, TYPE); + } + + /** + * Constructor. + * + * @param dictionary the corresponding dictionary + */ + public PDNumberFormatDictionary(COSDictionary dictionary) + { + this.numberFormatDictionary = dictionary; + } + + /** + * This will return the dictionary. + * + * @return the number format dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.numberFormatDictionary; + } + + /** + * This will return the type of the number format dictionary. + * It must be "NumberFormat" + * + * @return the type + */ + public String getType() + { + return TYPE; + } + + /** + * This will return the label for the units. + * + * @return the label for the units + */ + public String getUnits() + { + return this.getCOSObject().getString("U"); + } + + /** + * This will set the label for the units. + * + * @param units the label for the units + */ + public void setUnits(String units) + { + this.getCOSObject().setString("U", units); + } + + /** + * This will return the conversion factor. + * + * @return the conversion factor + */ + public float getConversionFactor() + { + return this.getCOSObject().getFloat("C"); + } + + /** + * This will set the conversion factor. + * + * @param conversionFactor the conversion factor + */ + public void setConversionFactor(float conversionFactor) + { + this.getCOSObject().setFloat("C", conversionFactor); + } + + /** + * This will return the value for the manner to display a fractional value. + * + * @return the manner to display a fractional value + */ + public String getFractionalDisplay() + { + return this.getCOSObject().getString("F", FRACTIONAL_DISPLAY_DECIMAL); + } + + /** + * This will set the value for the manner to display a fractional value. + * Allowed values are "D", "F", "R" and "T" + * @param fractionalDisplay the manner to display a fractional value + */ + public void setFractionalDisplay(String fractionalDisplay) + { + if ((fractionalDisplay == null) + || FRACTIONAL_DISPLAY_DECIMAL.equals(fractionalDisplay) + || FRACTIONAL_DISPLAY_FRACTION.equals(fractionalDisplay) + || FRACTIONAL_DISPLAY_ROUND.equals(fractionalDisplay) + || FRACTIONAL_DISPLAY_TRUNCATE.equals(fractionalDisplay)) + { + this.getCOSObject().setString("F", fractionalDisplay); + } + else + { + throw new IllegalArgumentException("Value must be \"D\", \"F\", \"R\", or \"T\", (or null)."); + } + } + + /** + * This will return the precision or denominator of a fractional amount. + * + * @return the precision or denominator + */ + public int getDenominator() + { + return this.getCOSObject().getInt("D"); + } + + /** + * This will set the precision or denominator of a fractional amount. + * + * @param denominator the precision or denominator + */ + public void setDenominator(int denominator) + { + this.getCOSObject().setInt("D", denominator); + } + + /** + * This will return the value indication if the denominator of the fractional value is reduced/truncated . + * + * @return fd + */ + public boolean isFD() + { + return this.getCOSObject().getBoolean("FD", false); + } + + /** + * This will set the value indication if the denominator of the fractional value is reduced/truncated . + * The denominator may not be reduced/truncated if true + * @param fd fd + */ + public void setFD(boolean fd) + { + this.getCOSObject().setBoolean("FD", fd); + } + + /** + * This will return the text to be used between orders of thousands in display of numerical values. + * + * @return thousands separator + */ + public String getThousandsSeparator() + { + return this.getCOSObject().getString("RT", ","); + } + + /** + * This will set the text to be used between orders of thousands in display of numerical values. + * + * @param thousandsSeparator thousands separator + */ + public void setThousandsSeparator(String thousandsSeparator) + { + this.getCOSObject().setString("RT", thousandsSeparator); + } + + /** + * This will return the text to be used as the decimal point in displaying numerical values. + * + * @return decimal separator + */ + public String getDecimalSeparator() + { + return this.getCOSObject().getString("RD", "."); + } + + /** + * This will set the text to be used as the decimal point in displaying numerical values. + * + * @param decimalSeparator decimal separator + */ + public void setDecimalSeparator(String decimalSeparator) + { + this.getCOSObject().setString("RD", decimalSeparator); + } + + /** + * This will return the text to be concatenated to the left of the label specified by U. + * @return label prefix + */ + public String getLabelPrefixString() + { + return this.getCOSObject().getString("PS", " "); + } + + /** + * This will set the text to be concatenated to the left of the label specified by U. + * @param labelPrefixString label prefix + */ + public void setLabelPrefixString(String labelPrefixString) + { + this.getCOSObject().setString("PS", labelPrefixString); + } + + /** + * This will return the text to be concatenated after the label specified by U. + * + * @return label suffix + */ + public String getLabelSuffixString() + { + return this.getCOSObject().getString("SS", " "); + } + + /** + * This will set the text to be concatenated after the label specified by U. + * + * @param labelSuffixString label suffix + */ + public void setLabelSuffixString(String labelSuffixString) + { + this.getCOSObject().setString("SS", labelSuffixString); + } + + /** + * This will return a value indicating the ordering of the label specified by U to the calculated unit value. + * + * @return label position + */ + public String getLabelPositionToValue() + { + return this.getCOSObject().getString("O", LABEL_SUFFIX_TO_VALUE); + } + + /** + * This will set the value indicating the ordering of the label specified by U to the calculated unit value. + * Possible values are "S" and "P" + * + * @param labelPositionToValue label position + */ + public void setLabelPositionToValue(String labelPositionToValue) + { + if ((labelPositionToValue == null) + || LABEL_PREFIX_TO_VALUE.equals(labelPositionToValue) + || LABEL_SUFFIX_TO_VALUE.equals(labelPositionToValue)) + { + this.getCOSObject().setString("O", labelPositionToValue); + } + else + { + throw new IllegalArgumentException("Value must be \"S\", or \"P\" (or null)."); + } + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java new file mode 100644 index 00000000000..40720ba2445 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDRectlinearMeasureDictionary.java @@ -0,0 +1,342 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.measurement; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +/** + * This class represents a rectlinear measure dictionary. + * + */ +public class PDRectlinearMeasureDictionary extends PDMeasureDictionary +{ + + /** + * The subtype of the rectlinear measure dictionary. + */ + public static final String SUBTYPE = "RL"; + + /** + * Constructor. + */ + public PDRectlinearMeasureDictionary() + { + this.setSubtype(SUBTYPE); + } + + /** + * Constructor. + * + * @param dictionary the corresponding dictionary + */ + public PDRectlinearMeasureDictionary(COSDictionary dictionary) + { + super(dictionary); + } + + /** + * This will return the scale ration. + * + * @return the scale ratio. + */ + public String getScaleRatio() + { + return this.getCOSObject().getString(COSName.R); + } + + /** + * This will set the scale ration. + * + * @param scaleRatio the scale ratio. + */ + public void setScaleRatio(String scaleRatio) + { + this.getCOSObject().setString(COSName.R, scaleRatio); + } + + /** + * This will return the changes along the x-axis. + * + * @return changes along the x-axis + */ + public PDNumberFormatDictionary[] getChangeXs() + { + COSArray x = (COSArray)this.getCOSObject().getDictionaryObject("X"); + if (x != null) + { + PDNumberFormatDictionary[] retval = + new PDNumberFormatDictionary[x.size()]; + for (int i = 0; i < x.size(); i++) + { + COSDictionary dic = (COSDictionary) x.get(i); + retval[i] = new PDNumberFormatDictionary(dic); + } + return retval; + } + return null; + } + + /** + * This will set the changes along the x-axis. + * + * @param changeXs changes along the x-axis + */ + public void setChangeXs(PDNumberFormatDictionary[] changeXs) + { + COSArray array = new COSArray(); + for (PDNumberFormatDictionary changeX : changeXs) + { + array.add(changeX); + } + this.getCOSObject().setItem("X", array); + } + + /** + * This will return the changes along the y-axis. + * + * @return changes along the y-axis + */ + public PDNumberFormatDictionary[] getChangeYs() + { + COSArray y = (COSArray)this.getCOSObject().getDictionaryObject("Y"); + if (y != null) + { + PDNumberFormatDictionary[] retval = + new PDNumberFormatDictionary[y.size()]; + for (int i = 0; i < y.size(); i++) + { + COSDictionary dic = (COSDictionary) y.get(i); + retval[i] = new PDNumberFormatDictionary(dic); + } + return retval; + } + return null; + } + + /** + * This will set the changes along the y-axis. + * + * @param changeYs changes along the y-axis + */ + public void setChangeYs(PDNumberFormatDictionary[] changeYs) + { + COSArray array = new COSArray(); + for (PDNumberFormatDictionary changeY : changeYs) + { + array.add(changeY); + } + this.getCOSObject().setItem("Y", array); + } + + /** + * This will return the distances. + * + * @return distances + */ + public PDNumberFormatDictionary[] getDistances() + { + COSArray d = (COSArray)this.getCOSObject().getDictionaryObject("D"); + if (d != null) + { + PDNumberFormatDictionary[] retval = + new PDNumberFormatDictionary[d.size()]; + for (int i = 0; i < d.size(); i++) + { + COSDictionary dic = (COSDictionary) d.get(i); + retval[i] = new PDNumberFormatDictionary(dic); + } + return retval; + } + return null; + } + + /** + * This will set the distances. + * + * @param distances distances + */ + public void setDistances(PDNumberFormatDictionary[] distances) + { + COSArray array = new COSArray(); + for (PDNumberFormatDictionary distance : distances) + { + array.add(distance); + } + this.getCOSObject().setItem("D", array); + } + + /** + * This will return the areas. + * + * @return areas + */ + public PDNumberFormatDictionary[] getAreas() + { + COSArray a = (COSArray)this.getCOSObject().getDictionaryObject(COSName.A); + if (a != null) + { + PDNumberFormatDictionary[] retval = + new PDNumberFormatDictionary[a.size()]; + for (int i = 0; i < a.size(); i++) + { + COSDictionary dic = (COSDictionary) a.get(i); + retval[i] = new PDNumberFormatDictionary(dic); + } + return retval; + } + return null; + } + + /** + * This will set the areas. + * + * @param areas areas + */ + public void setAreas(PDNumberFormatDictionary[] areas) + { + COSArray array = new COSArray(); + for (PDNumberFormatDictionary area : areas) + { + array.add(area); + } + this.getCOSObject().setItem(COSName.A, array); + } + + /** + * This will return the angles. + * + * @return angles + */ + public PDNumberFormatDictionary[] getAngles() + { + COSArray t = (COSArray)this.getCOSObject().getDictionaryObject("T"); + if (t != null) + { + PDNumberFormatDictionary[] retval = + new PDNumberFormatDictionary[t.size()]; + for (int i = 0; i < t.size(); i++) + { + COSDictionary dic = (COSDictionary) t.get(i); + retval[i] = new PDNumberFormatDictionary(dic); + } + return retval; + } + return null; + } + + /** + * This will set the angles. + * + * @param angles angles + */ + public void setAngles(PDNumberFormatDictionary[] angles) + { + COSArray array = new COSArray(); + for (PDNumberFormatDictionary angle : angles) + { + array.add(angle); + } + this.getCOSObject().setItem("T", array); + } + + /** + * This will return the sloaps of a line. + * + * @return the sloaps of a line + */ + public PDNumberFormatDictionary[] getLineSloaps() + { + COSArray s = (COSArray)this.getCOSObject().getDictionaryObject("S"); + if (s != null) + { + PDNumberFormatDictionary[] retval = + new PDNumberFormatDictionary[s.size()]; + for (int i = 0; i < s.size(); i++) + { + COSDictionary dic = (COSDictionary) s.get(i); + retval[i] = new PDNumberFormatDictionary(dic); + } + return retval; + } + return null; + } + + /** + * This will set the sloaps of a line. + * + * @param lineSloaps the sloaps of a line + */ + public void setLineSloaps(PDNumberFormatDictionary[] lineSloaps) + { + COSArray array = new COSArray(); + for (PDNumberFormatDictionary lineSloap : lineSloaps) + { + array.add(lineSloap); + } + this.getCOSObject().setItem("S", array); + } + + /** + * This will return the origin of the coordinate system. + * + * @return the origin + */ + public float[] getCoordSystemOrigin() + { + COSArray o = (COSArray)this.getCOSObject().getDictionaryObject("O"); + if (o != null) + { + return o.toFloatArray(); + } + return null; + } + + /** + * This will set the origin of the coordinate system. + * + * @param coordSystemOrigin the origin + */ + public void setCoordSystemOrigin(float[] coordSystemOrigin) + { + COSArray array = new COSArray(); + array.setFloatArray(coordSystemOrigin); + this.getCOSObject().setItem("O", array); + } + + /** + * This will return the CYX factor. + * + * @return CYX factor + */ + public float getCYX() + { + return this.getCOSObject().getFloat("CYX"); + } + + /** + * This will set the CYX factor. + * + * @param cyx CYX factor + */ + public void setCYX(float cyx) + { + this.getCOSObject().setFloat("CYX", cyx); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java new file mode 100644 index 00000000000..4958d208639 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/PDViewportDictionary.java @@ -0,0 +1,150 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.measurement; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; + +/** + * This class represents a viewport dictionary. + * + */ +public class PDViewportDictionary implements COSObjectable +{ + + /** + * The type of this object. + */ + public static final String TYPE = "Viewport"; + + private final COSDictionary viewportDictionary; + + /** + * Constructor. + */ + public PDViewportDictionary() + { + this.viewportDictionary = new COSDictionary(); + } + + /** + * Constructor. + * + * @param dictionary the dictionary + */ + public PDViewportDictionary(COSDictionary dictionary) + { + this.viewportDictionary = dictionary; + } + + /** + * This will return the corresponding dictionary. + * + * @return the viewport dictionary + */ + @Override + public COSDictionary getCOSObject() + { + return this.viewportDictionary; + } + + /** + * Returns the type of the viewport dictionary. + * It must be "Viewport" + * @return the type of the external data dictionary + */ + + public String getType() + { + return TYPE; + } + + /** + * This will retrieve the rectangle specifying the location of the viewport. + * + * @return the location + */ + public PDRectangle getBBox() + { + COSBase bbox = this.getCOSObject().getDictionaryObject(COSName.BBOX); + if (bbox instanceof COSArray) + { + return new PDRectangle((COSArray) bbox); + } + return null; + } + + /** + * This will set the rectangle specifying the location of the viewport. + * + * @param rectangle the rectangle specifying the location. + */ + public void setBBox(PDRectangle rectangle) + { + this.getCOSObject().setItem(COSName.BBOX, rectangle); + } + + /** + * This will retrieve the name of the viewport. + * + * @return the name of the viewport + */ + public String getName() + { + return this.getCOSObject().getNameAsString(COSName.NAME); + } + + /** + * This will set the name of the viewport. + * + * @param name the name of the viewport + */ + public void setName(String name) + { + this.getCOSObject().setName(COSName.NAME, name); + } + + /** + * This will retrieve the measure dictionary. + * + * @return the measure dictionary + */ + public PDMeasureDictionary getMeasure() + { + COSBase base = this.getCOSObject().getDictionaryObject(COSName.MEASURE); + if (base instanceof COSDictionary) + { + return new PDMeasureDictionary((COSDictionary) base); + } + return null; + } + + /** + * This will set the measure dictionary. + * + * @param measure the measure dictionary + */ + public void setMeasure(PDMeasureDictionary measure) + { + this.getCOSObject().setItem(COSName.MEASURE, measure); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html new file mode 100644 index 00000000000..1b91e603e55 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/measurement/package.html @@ -0,0 +1,25 @@ + + + + + + + +The measurement package contains classes that work with elements specifying measure properties. + + diff --git a/src/org/pdfbox/pdmodel/interactive/pagenavigation/PDThread.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDThread.java similarity index 84% rename from src/org/pdfbox/pdmodel/interactive/pagenavigation/PDThread.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDThread.java index f1ab4da0307..4020ea5ec8b 100644 --- a/src/org/pdfbox/pdmodel/interactive/pagenavigation/PDThread.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDThread.java @@ -14,19 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.pagenavigation; +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSDictionary; -import org.pdfbox.pdmodel.PDDocumentInformation; -import org.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.common.COSObjectable; /** * This a single thread in a PDF document. * - * @author Ben Litchfield - * @version $Revision: 1.2 $ + * @author Ben Litchfield */ public class PDThread implements COSObjectable { @@ -59,17 +57,8 @@ public PDThread() * * @return The underlying info dictionary. */ - public COSDictionary getDictionary() - { - return thread; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSBase getCOSObject() + @Override + public COSDictionary getCOSObject() { return thread; } diff --git a/src/org/pdfbox/pdmodel/interactive/pagenavigation/PDThreadBead.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDThreadBead.java similarity index 86% rename from src/org/pdfbox/pdmodel/interactive/pagenavigation/PDThreadBead.java rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDThreadBead.java index fb2ae0bdaf1..306c50d7ebe 100644 --- a/src/org/pdfbox/pdmodel/interactive/pagenavigation/PDThreadBead.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDThreadBead.java @@ -14,28 +14,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pdfbox.pdmodel.interactive.pagenavigation; +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; -import org.pdfbox.cos.COSArray; -import org.pdfbox.cos.COSBase; -import org.pdfbox.cos.COSDictionary; -import org.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; -import org.pdfbox.pdmodel.PDPage; -import org.pdfbox.pdmodel.common.COSObjectable; -import org.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDRectangle; /** * This a single bead in a thread in a PDF document. * - * @author Ben Litchfield - * @version $Revision: 1.4 $ + * @author Ben Litchfield */ public class PDThreadBead implements COSObjectable { - private COSDictionary bead; + private final COSDictionary bead; /** * Constructor that is used for a preexisting dictionary. @@ -64,17 +62,8 @@ public PDThreadBead() * * @return The underlying info dictionary. */ - public COSDictionary getDictionary() - { - return bead; - } - - /** - * Convert this standard java object to a COS object. - * - * @return The cos object that matches this Java object. - */ - public COSBase getCOSObject() + @Override + public COSDictionary getCOSObject() { return bead; } @@ -123,7 +112,7 @@ public PDThreadBead getNextBead() * * @param next The next bead. */ - protected void setNextBead( PDThreadBead next ) + protected final void setNextBead( PDThreadBead next ) { bead.setItem( "N", next ); } @@ -144,7 +133,7 @@ public PDThreadBead getPreviousBead() * * @param previous The previous bead. */ - protected void setPreviousBead( PDThreadBead previous ) + protected final void setPreviousBead( PDThreadBead previous ) { bead.setItem( "V", previous ); } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransition.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransition.java new file mode 100644 index 00000000000..530b734284e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransition.java @@ -0,0 +1,189 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSBoolean; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.common.PDDictionaryWrapper; + +/** + * Represents a page transition as defined in paragraph 12.4.4.1 of PDF 32000-1:2008 + * + * @author Andrea Vacondio + * + */ +public final class PDTransition extends PDDictionaryWrapper +{ + + /** + * creates a new transition with default "replace" style {@link PDTransitionStyle#R} + */ + public PDTransition() + { + this(PDTransitionStyle.R); + } + + /** + * creates a new transition with the given style. + * + * @param style + */ + public PDTransition(PDTransitionStyle style) + { + super(); + getCOSObject().setName(COSName.TYPE, COSName.TRANS.getName()); + getCOSObject().setName(COSName.S, style.name()); + } + + /** + * creates a new transition for an existing dictionary + * + * @param dictionary + */ + public PDTransition(COSDictionary dictionary) + { + super(dictionary); + } + + /** + * @return the style for this transition + * @see PDTransitionStyle#valueOf(String) + */ + public String getStyle() + { + return getCOSObject().getNameAsString(COSName.S, PDTransitionStyle.R.name()); + } + + /** + * @return The dimension in which the specified transition effect shall occur or the default + * {@link PDTransitionDimension#H} if no dimension is found. + * @see PDTransitionDimension + */ + public String getDimension() + { + return getCOSObject().getNameAsString(COSName.DM, PDTransitionDimension.H.name()); + } + + /** + * Sets the dimension in which the specified transition effect shall occur. Only for {@link PDTransitionStyle#Split} + * and {@link PDTransitionStyle#Blinds}. + */ + public void setDimension(PDTransitionDimension dimension) + { + getCOSObject().setName(COSName.DM, dimension.name()); + } + + /** + * @return The direction of motion for the specified transition effect or the default {@link PDTransitionMotion#I} + * if no motion is found. + * @see PDTransitionMotion + */ + public String getMotion() + { + return getCOSObject().getNameAsString(COSName.M, PDTransitionMotion.I.name()); + } + + /** + * Sets the direction of motion for the specified transition effect. Only for {@link PDTransitionStyle#Split}, + * {@link PDTransitionStyle#Blinds} and {@link PDTransitionStyle#Fly}. + */ + public void setMotion(PDTransitionMotion motion) + { + getCOSObject().setName(COSName.M, motion.name()); + } + + /** + * @return the direction in which the specified transition effect shall moves. It can be either a {@link COSInteger} + * or {@link COSName#NONE}. Default to {@link COSInteger#ZERO} + * @see PDTransitionDirection + */ + public COSBase getDirection() + { + COSBase item = getCOSObject().getItem(COSName.DI); + if (item == null) + { + return COSInteger.ZERO; + } + return item; + } + + /** + * Sets the direction in which the specified transition effect shall moves. Only for {@link PDTransitionStyle#Wipe}, + * {@link PDTransitionStyle#Glitter}, {@link PDTransitionStyle#Fly}, {@link PDTransitionStyle#Cover}, + * {@link PDTransitionStyle#Uncover} and {@link PDTransitionStyle#Push}. + */ + public void setDirection(PDTransitionDirection direction) + { + getCOSObject().setItem(COSName.DI, direction.getCOSBase()); + } + + /** + * @return The duration in seconds of the transition effect or the default 1 if no duration is found. + */ + public float getDuration() + { + return getCOSObject().getFloat(COSName.D, 1); + } + + /** + * @param duration The duration of the transition effect, in seconds. + */ + public void setDuration(float duration) + { + getCOSObject().setItem(COSName.D, new COSFloat(duration)); + } + + /** + * @return The starting or ending scale at which the changes shall be drawn or the default 1 if no scale is found. + * Only for {@link PDTransitionStyle#Fly}. + */ + public float getFlyScale() + { + return getCOSObject().getFloat(COSName.SS, 1); + } + + /** + * @param scale The starting or ending scale at which the changes shall be drawn. Only for + * {@link PDTransitionStyle#Fly}. + */ + public void setFlyScale(float scale) + { + getCOSObject().setItem(COSName.SS, new COSFloat(scale)); + } + + /** + * @return true if the area that shall be flown in is rectangular and opaque. Default is false. Only for + * {@link PDTransitionStyle#Fly}. + */ + public boolean isFlyAreaOpaque() + { + return getCOSObject().getBoolean(COSName.B, false); + } + + /** + * @param opaque If true, the area that shall be flown in is rectangular and opaque. Only for + * {@link PDTransitionStyle#Fly}. + */ + public void setFlyAreaOpaque(boolean opaque) + { + getCOSObject().setItem(COSName.B, COSBoolean.getBoolean(opaque)); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionDimension.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionDimension.java new file mode 100644 index 00000000000..fdc597a5c6e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionDimension.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; + +/** + * The dimension in which the specified transition effect shall occur. Only for {@link PDTransitionStyle#Split} and + * {@link PDTransitionStyle#Blinds}. + * + * @author Andrea Vacondio + * + */ +public enum PDTransitionDimension +{ + /** + * Horizontal + */ + H, + /** + * Vertical + */ + V + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionDirection.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionDirection.java new file mode 100644 index 00000000000..22030633d26 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionDirection.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSName; + +/** + * The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting + * from a left-to-right direction. Only for {@link PDTransitionStyle#Wipe}, {@link PDTransitionStyle#Glitter}, + * {@link PDTransitionStyle#Fly}, {@link PDTransitionStyle#Cover}, {@link PDTransitionStyle#Uncover} and + * {@link PDTransitionStyle#Push}. + * + * @author Andrea Vacondio + * + */ +public enum PDTransitionDirection +{ + LEFT_TO_RIGHT(0), + /** + * Relevant only for the Wipe transition + */ + BOTTOM_TO_TOP(90), + /** + * Relevant only for the Wipe transition + */ + RIGHT_TO_LEFT(180), TOP_TO_BOTTOM(270), + /** + * Relevant only for the Glitter transition + */ + TOP_LEFT_TO_BOTTOM_RIGHT(315), + /** + * Relevant only for the Fly transition when the value of SS is not 1.0 + */ + NONE(0) + { + @Override + public COSBase getCOSBase() + { + return COSName.NONE; + } + }; + + private final int degrees; + + private PDTransitionDirection(int degrees) + { + this.degrees = degrees; + } + + /** + * @return the value for this direction + */ + public COSBase getCOSBase() + { + return COSInteger.get(degrees); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionMotion.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionMotion.java new file mode 100644 index 00000000000..5a53402df2b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionMotion.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; + +/** + * The direction of motion for the specified transition effect. Only for {@link PDTransitionStyle#Split}, + * {@link PDTransitionStyle#Blinds} and {@link PDTransitionStyle#Fly}. + * + * @author Andrea Vacondio + * + */ +public enum PDTransitionMotion +{ + /** + * Inward from the edges of the page + */ + I, + /** + * Outward from the center of the page + */ + O +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionStyle.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionStyle.java new file mode 100644 index 00000000000..a9d8d9b3239 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/PDTransitionStyle.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.pagenavigation; + +/** + * The transition style that shall be used when moving to the page from another during a presentation. Ref. table 162 + * PDF32000-1:2008 + * + * @author Andrea Vacondio + * + */ +public enum PDTransitionStyle +{ + Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade +} diff --git a/src/org/pdfbox/pdmodel/interactive/pagenavigation/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/pagenavigation/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/pagenavigation/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/viewerpreferences/PDViewerPreferences.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/viewerpreferences/PDViewerPreferences.java new file mode 100644 index 00000000000..452abbaccab --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/viewerpreferences/PDViewerPreferences.java @@ -0,0 +1,434 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.interactive.viewerpreferences; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; + +import org.apache.pdfbox.pdmodel.common.COSObjectable; + +/** + * This is the document viewing preferences. + * + * @author Ben Litchfield + */ +public class PDViewerPreferences implements COSObjectable +{ + + /** + * Enumeration containing all valid values for NonFullScreenPageMode. + */ + public enum NON_FULL_SCREEN_PAGE_MODE + { + /** + * From PDF Reference: "Neither document outline nor thumbnail images visible". + */ + UseNone, + /** + * From PDF Reference: "Document outline visible". + */ + UseOutlines, + /** + * From PDF Reference: "Thumbnail images visible". + */ + UseThumbs, + /** + * From PDF Reference: "Optional content group panel visible". + */ + UseOC + } + + /** + * Enumeration containing all valid values for ReadingDirection. + */ + public enum READING_DIRECTION + { + /** + * left to right. + */ + L2R, + /** + * right to left. + */ + R2L + } + + /** + * Enumeration containing all valid values for boundaries. + */ + public enum BOUNDARY + { + /** + * use media box as boundary. + */ + MediaBox, + /** + * use crop box as boundary. + */ + CropBox, + /** + * use bleed box as boundary. + */ + BleedBox, + /** + * use trim box as boundary. + */ + TrimBox, + /** + * use art box as boundary. + */ + ArtBox + } + + /** + * Enumeration containing all valid values for duplex. + */ + public enum DUPLEX + { + /** + * simplex printing. + */ + Simplex, + /** + * duplex printing, flip at short edge. + */ + DuplexFlipShortEdge, + /** + * duplex printing, flip at long edge. + */ + DuplexFlipLongEdge + } + + /** + * Enumeration containing all valid values for printscaling. + */ + public enum PRINT_SCALING + { + /** + * no scaling. + */ + None, + /** + * use app default. + */ + AppDefault + } + + private final COSDictionary prefs; + + /** + * Constructor that is used for a preexisting dictionary. + * + * @param dic The underlying dictionary. + */ + public PDViewerPreferences( COSDictionary dic ) + { + prefs = dic; + } + + /** + * This will get the underlying dictionary that this object wraps. + * + * @return The underlying info dictionary. + */ + @Override + public COSDictionary getCOSObject() + { + return prefs; + } + + /** + * Get the toolbar preference. + * + * @return the toolbar preference. + */ + public boolean hideToolbar() + { + return prefs.getBoolean( COSName.HIDE_TOOLBAR, false ); + } + + /** + * Set the toolbar preference. + * + * @param value Set the toolbar preference. + */ + public void setHideToolbar( boolean value ) + { + prefs.setBoolean( COSName.HIDE_TOOLBAR, value ); + } + + /** + * Get the menubar preference. + * + * @return the menubar preference. + */ + public boolean hideMenubar() + { + return prefs.getBoolean( COSName.HIDE_MENUBAR, false ); + } + + /** + * Set the menubar preference. + * + * @param value Set the menubar preference. + */ + public void setHideMenubar( boolean value ) + { + prefs.setBoolean( COSName.HIDE_MENUBAR, value ); + } + + /** + * Get the window UI preference. + * + * @return the window UI preference. + */ + public boolean hideWindowUI() + { + return prefs.getBoolean( COSName.HIDE_WINDOWUI, false ); + } + + /** + * Set the window UI preference. + * + * @param value Set the window UI preference. + */ + public void setHideWindowUI( boolean value ) + { + prefs.setBoolean( COSName.HIDE_WINDOWUI, value ); + } + + /** + * Get the fit window preference. + * + * @return the fit window preference. + */ + public boolean fitWindow() + { + return prefs.getBoolean( COSName.FIT_WINDOW, false ); + } + + /** + * Set the fit window preference. + * + * @param value Set the fit window preference. + */ + public void setFitWindow( boolean value ) + { + prefs.setBoolean( COSName.FIT_WINDOW, value ); + } + + /** + * Get the center window preference. + * + * @return the center window preference. + */ + public boolean centerWindow() + { + return prefs.getBoolean( COSName.CENTER_WINDOW, false ); + } + + /** + * Set the center window preference. + * + * @param value Set the center window preference. + */ + public void setCenterWindow( boolean value ) + { + prefs.setBoolean( COSName.CENTER_WINDOW, value ); + } + + /** + * Get the display doc title preference. + * + * @return the display doc title preference. + */ + public boolean displayDocTitle() + { + return prefs.getBoolean( COSName.DISPLAY_DOC_TITLE, false ); + } + + /** + * Set the display doc title preference. + * + * @param value Set the display doc title preference. + */ + public void setDisplayDocTitle( boolean value ) + { + prefs.setBoolean( COSName.DISPLAY_DOC_TITLE, value ); + } + + /** + * Get the non full screen page mode preference. + * + * @return the non full screen page mode preference. + */ + public String getNonFullScreenPageMode() + { + return prefs.getNameAsString( COSName.NON_FULL_SCREEN_PAGE_MODE, + NON_FULL_SCREEN_PAGE_MODE.UseNone.toString()); + } + + /** + * Set the non full screen page mode preference. + * + * @param value Set the non full screen page mode preference. + */ + public void setNonFullScreenPageMode( NON_FULL_SCREEN_PAGE_MODE value ) + { + prefs.setName( COSName.NON_FULL_SCREEN_PAGE_MODE, value.toString() ); + } + + /** + * Get the reading direction preference. + * + * @return the reading direction preference. + */ + public String getReadingDirection() + { + return prefs.getNameAsString( COSName.DIRECTION, READING_DIRECTION.L2R.toString()); + } + + /** + * Set the reading direction preference. + * + * @param value Set the reading direction preference. + */ + public void setReadingDirection( READING_DIRECTION value ) + { + prefs.setName( COSName.DIRECTION, value.toString() ); + } + + /** + * Get the ViewArea preference. See BOUNDARY enumeration. + * + * @return the ViewArea preference. + */ + public String getViewArea() + { + return prefs.getNameAsString( COSName.VIEW_AREA, BOUNDARY.CropBox.toString()); + } + + /** + * Set the ViewArea preference. See BOUNDARY enumeration. + * + * @param value Set the ViewArea preference. + */ + public void setViewArea( BOUNDARY value ) + { + prefs.setName( COSName.VIEW_AREA, value.toString() ); + } + + /** + * Get the ViewClip preference. See BOUNDARY enumeration. + * + * @return the ViewClip preference. + */ + public String getViewClip() + { + return prefs.getNameAsString( COSName.VIEW_CLIP, BOUNDARY.CropBox.toString()); + } + + /** + * Set the ViewClip preference. See BOUNDARY enumeration. + * + * @param value Set the ViewClip preference. + */ + public void setViewClip( BOUNDARY value ) + { + prefs.setName( COSName.VIEW_CLIP, value.toString() ); + } + + /** + * Get the PrintArea preference. See BOUNDARY enumeration. + * + * @return the PrintArea preference. + */ + public String getPrintArea() + { + return prefs.getNameAsString( COSName.PRINT_AREA, BOUNDARY.CropBox.toString()); + } + + /** + * Set the PrintArea preference. See BOUNDARY enumeration. + * + * @param value Set the PrintArea preference. + */ + public void setPrintArea( BOUNDARY value ) + { + prefs.setName( COSName.PRINT_AREA, value.toString() ); + } + + /** + * Get the PrintClip preference. See BOUNDARY enumeration. + * + * @return the PrintClip preference. + */ + public String getPrintClip() + { + return prefs.getNameAsString( COSName.PRINT_CLIP, BOUNDARY.CropBox.toString()); + } + + /** + * Set the PrintClip preference. See BOUNDARY enumeration. + * + * @param value Set the PrintClip preference. + */ + public void setPrintClip( BOUNDARY value ) + { + prefs.setName( COSName.PRINT_CLIP, value.toString() ); + } + + /** + * Get the Duplex preference. See DUPLEX enumeration. + * + * @return the Duplex preference. + */ + public String getDuplex() + { + return prefs.getNameAsString( COSName.DUPLEX ); + } + + /** + * Set the Duplex preference. See DUPLEX enumeration. + * + * @param value Set the Duplex preference. + */ + public void setDuplex( DUPLEX value ) + { + prefs.setName( COSName.DUPLEX, value.toString() ); + } + + /** + * Get the PrintScaling preference. See PRINT_SCALING enumeration. + * + * @return the PrintScaling preference. + */ + public String getPrintScaling() + { + return prefs.getNameAsString( COSName.PRINT_SCALING , PRINT_SCALING.AppDefault.toString()); + } + + /** + * Set the PrintScaling preference. See PRINT_SCALING enumeration. + * + * @param value Set the PrintScaling preference. + */ + public void setPrintScaling( PRINT_SCALING value ) + { + prefs.setName( COSName.PRINT_SCALING, value.toString() ); + } +} diff --git a/src/org/pdfbox/pdmodel/interactive/viewerpreferences/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/viewerpreferences/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/interactive/viewerpreferences/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/viewerpreferences/package.html diff --git a/src/org/pdfbox/pdmodel/package.html b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/package.html similarity index 100% rename from src/org/pdfbox/pdmodel/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/pdmodel/package.html diff --git a/pdfbox/src/main/java/org/apache/pdfbox/printing/Orientation.java b/pdfbox/src/main/java/org/apache/pdfbox/printing/Orientation.java new file mode 100644 index 00000000000..f20ba4b9e21 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/printing/Orientation.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.printing; + +/** + * Orientation of printed pages. + * + * @author John Hewson + */ +public enum Orientation +{ + /** Automatically select the orientation of each page based on its aspect ratio. */ + AUTO, + + /** Print all pages as landscape. */ + LANDSCAPE, + + /** Print all pages as portrait. */ + PORTRAIT +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java b/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java new file mode 100644 index 00000000000..5a56b29b301 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java @@ -0,0 +1,223 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.printing; + +import java.awt.RenderingHints; +import java.awt.print.Book; +import java.awt.print.PageFormat; +import java.awt.print.Paper; +import java.awt.print.Printable; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; + +/** + * Prints a PDF document using its original paper size. + * + * @author John Hewson + */ +public final class PDFPageable extends Book +{ + private final PDDocument document; + private final boolean showPageBorder; + private final float dpi; + private final Orientation orientation; + private boolean subsamplingAllowed = false; + private RenderingHints renderingHints = null; + + /** + * Creates a new PDFPageable. + * + * @param document the document to print + */ + public PDFPageable(PDDocument document) + { + this(document, Orientation.AUTO, false, 0); + } + + /** + * Creates a new PDFPageable with the given page orientation. + * + * @param document the document to print + * @param orientation page orientation policy + */ + public PDFPageable(PDDocument document, Orientation orientation) + { + this(document, orientation, false, 0); + } + + /** + * Creates a new PDFPageable with the given page orientation and with optional page borders + * shown. The image will be rasterized at the given DPI before being sent to the printer. + * + * @param document the document to print + * @param orientation page orientation policy + * @param showPageBorder true if page borders are to be printed + */ + public PDFPageable(PDDocument document, Orientation orientation, boolean showPageBorder) + { + this(document, orientation, showPageBorder, 0); + } + + /** + * Creates a new PDFPageable with the given page orientation and with optional page borders + * shown. The image will be rasterized at the given DPI before being sent to the printer. + * + * @param document the document to print + * @param orientation page orientation policy + * @param showPageBorder true if page borders are to be printed + * @param dpi if non-zero then the image will be rasterized at the given DPI + */ + public PDFPageable(PDDocument document, Orientation orientation, boolean showPageBorder, + float dpi) + { + this.document = document; + this.orientation = orientation; + this.showPageBorder = showPageBorder; + this.dpi = dpi; + } + + /** + * Get the rendering hints. + * + * @return the rendering hints or null if none are set. + */ + public RenderingHints getRenderingHints() + { + return renderingHints; + } + + /** + * Set the rendering hints. Use this to influence rendering quality and speed. If you don't set + * them yourself or pass null, PDFBox will decide at runtime depending on the + * destination. + * + * @param renderingHints + */ + public void setRenderingHints(RenderingHints renderingHints) + { + this.renderingHints = renderingHints; + } + + /** + * Value indicating if the renderer is allowed to subsample images before drawing, according to + * image dimensions and requested scale. + * + * Subsampling may be faster and less memory-intensive in some cases, but it may also lead to + * loss of quality, especially in images with high spatial frequency. + * + * @return true if subsampling of images is allowed, false otherwise. + */ + public boolean isSubsamplingAllowed() + { + return subsamplingAllowed; + } + + /** + * Sets a value instructing the renderer whether it is allowed to subsample images before + * drawing. The subsampling frequency is determined according to image size and requested scale. + * + * Subsampling may be faster and less memory-intensive in some cases, but it may also lead to + * loss of quality, especially in images with high spatial frequency. + * + * @param subsamplingAllowed The new value indicating if subsampling is allowed. + */ + public void setSubsamplingAllowed(boolean subsamplingAllowed) + { + this.subsamplingAllowed = subsamplingAllowed; + } + + @Override + public int getNumberOfPages() + { + return document.getNumberOfPages(); + } + + /** + * {@inheritDoc} + * + * Returns the actual physical size of the pages in the PDF file. May not fit the local printer. + */ + @Override + public PageFormat getPageFormat(int pageIndex) + { + PDPage page = document.getPage(pageIndex); + PDRectangle mediaBox = PDFPrintable.getRotatedMediaBox(page); + PDRectangle cropBox = PDFPrintable.getRotatedCropBox(page); + + // Java does not seem to understand landscape paper sizes, i.e. where width > height, it + // always crops the imageable area as if the page were in portrait. I suspect that this is + // a JDK bug but it might be by design, see PDFBOX-2922. + // + // As a workaround, we normalise all Page(s) to be portrait, then flag them as landscape in + // the PageFormat. + Paper paper; + boolean isLandscape; + if (mediaBox.getWidth() > mediaBox.getHeight()) + { + // rotate + paper = new Paper(); + paper.setSize(mediaBox.getHeight(), mediaBox.getWidth()); + paper.setImageableArea(cropBox.getLowerLeftY(), cropBox.getLowerLeftX(), + cropBox.getHeight(), cropBox.getWidth()); + isLandscape = true; + } + else + { + paper = new Paper(); + paper.setSize(mediaBox.getWidth(), mediaBox.getHeight()); + paper.setImageableArea(cropBox.getLowerLeftX(), cropBox.getLowerLeftY(), + cropBox.getWidth(), cropBox.getHeight()); + isLandscape = false; + } + + PageFormat format = new PageFormat(); + format.setPaper(paper); + + // auto portrait/landscape + switch (orientation) + { + case AUTO: + format.setOrientation(isLandscape ? PageFormat.LANDSCAPE : PageFormat.PORTRAIT); + break; + case LANDSCAPE: + format.setOrientation(PageFormat.LANDSCAPE); + break; + case PORTRAIT: + format.setOrientation(PageFormat.PORTRAIT); + break; + default: + break; + } + + return format; + } + + @Override + public Printable getPrintable(int i) + { + if (i >= getNumberOfPages()) + { + throw new IndexOutOfBoundsException(i + " >= " + getNumberOfPages()); + } + PDFPrintable printable = new PDFPrintable(document, Scaling.ACTUAL_SIZE, showPageBorder, dpi); + printable.setSubsamplingAllowed(subsamplingAllowed); + printable.setRenderingHints(renderingHints); + return printable; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java b/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java new file mode 100644 index 00000000000..bf4983c61cf --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java @@ -0,0 +1,317 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.printing; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.awt.print.PageFormat; +import java.awt.print.Printable; +import java.awt.print.PrinterException; +import java.awt.print.PrinterIOException; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.rendering.RenderDestination; + +/** + * Prints pages from a PDF document using any page size or scaling mode. + * + * @author John Hewson + */ +public final class PDFPrintable implements Printable +{ + private final PDDocument document; + private final PDFRenderer renderer; + + private final boolean showPageBorder; + private final Scaling scaling; + private final float dpi; + private final boolean center; + private boolean subsamplingAllowed = false; + private RenderingHints renderingHints = null; + + /** + * Creates a new PDFPrintable. + * + * @param document the document to print + */ + public PDFPrintable(PDDocument document) + { + this(document, Scaling.SHRINK_TO_FIT); + } + + /** + * Creates a new PDFPrintable with the given page scaling. + * + * @param document the document to print + * @param scaling page scaling policy + */ + public PDFPrintable(PDDocument document, Scaling scaling) + { + this(document, scaling, false, 0); + } + + /** + * Creates a new PDFPrintable with the given page scaling and with optional page borders shown. + * + * @param document the document to print + * @param scaling page scaling policy + * @param showPageBorder true if page borders are to be printed + */ + public PDFPrintable(PDDocument document, Scaling scaling, boolean showPageBorder) + { + this(document, scaling, showPageBorder, 0); + } + + /** + * Creates a new PDFPrintable with the given page scaling and with optional page borders shown. + * The image will be rasterized at the given DPI before being sent to the printer. + * + * @param document the document to print + * @param scaling page scaling policy + * @param showPageBorder true if page borders are to be printed + * @param dpi if non-zero then the image will be rasterized at the given DPI + */ + public PDFPrintable(PDDocument document, Scaling scaling, boolean showPageBorder, float dpi) + { + this(document, scaling, showPageBorder, dpi, true); + } + + /** + * Creates a new PDFPrintable with the given page scaling and with optional page borders shown. + * The image will be rasterized at the given DPI before being sent to the printer. + * + * @param document the document to print + * @param scaling page scaling policy + * @param showPageBorder true if page borders are to be printed + * @param dpi if non-zero then the image will be rasterized at the given DPI + * @param center true if the content is to be centered on the page (otherwise top-left). + */ + public PDFPrintable(PDDocument document, Scaling scaling, boolean showPageBorder, float dpi, + boolean center) + { + this.document = document; + this.renderer = new PDFRenderer(document); + this.scaling = scaling; + this.showPageBorder = showPageBorder; + this.dpi = dpi; + this.center = center; + } + + /** + * Value indicating if the renderer is allowed to subsample images before drawing, according to + * image dimensions and requested scale. + * + * Subsampling may be faster and less memory-intensive in some cases, but it may also lead to + * loss of quality, especially in images with high spatial frequency. + * + * @return true if subsampling of images is allowed, false otherwise. + */ + public boolean isSubsamplingAllowed() + { + return subsamplingAllowed; + } + + /** + * Sets a value instructing the renderer whether it is allowed to subsample images before + * drawing. The subsampling frequency is determined according to image size and requested scale. + * + * Subsampling may be faster and less memory-intensive in some cases, but it may also lead to + * loss of quality, especially in images with high spatial frequency. + * + * @param subsamplingAllowed The new value indicating if subsampling is allowed. + */ + public void setSubsamplingAllowed(boolean subsamplingAllowed) + { + this.subsamplingAllowed = subsamplingAllowed; + } + + /** + * Get the rendering hints. + * + * @return the rendering hints or null if none are set. + */ + public RenderingHints getRenderingHints() + { + return renderingHints; + } + + /** + * Set the rendering hints. Use this to influence rendering quality and speed. If you don't set + * them yourself or pass null, PDFBox will decide at runtime depending on the + * destination. + * + * @param renderingHints + */ + public void setRenderingHints(RenderingHints renderingHints) + { + this.renderingHints = renderingHints; + } + + @Override + public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) + throws PrinterException + { + if (pageIndex < 0 || pageIndex >= document.getNumberOfPages()) + { + return NO_SUCH_PAGE; + } + try + { + Graphics2D graphics2D = (Graphics2D)graphics; + + PDPage page = document.getPage(pageIndex); + PDRectangle cropBox = getRotatedCropBox(page); + + // the imageable area is the area within the page margins + final double imageableWidth = pageFormat.getImageableWidth(); + final double imageableHeight = pageFormat.getImageableHeight(); + + double scale = 1; + if (scaling != Scaling.ACTUAL_SIZE) + { + // scale to fit + double scaleX = imageableWidth / cropBox.getWidth(); + double scaleY = imageableHeight / cropBox.getHeight(); + scale = Math.min(scaleX, scaleY); + + // only shrink to fit when enabled + if (scale > 1 && scaling == Scaling.SHRINK_TO_FIT) + { + scale = 1; + } + + // only stretch to fit when enabled + if (scale < 1 && scaling == Scaling.STRETCH_TO_FIT) + { + scale = 1; + } + } + + // set the graphics origin to the origin of the imageable area (i.e the margins) + graphics2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); + + // center on page + if (center) + { + graphics2D.translate((imageableWidth - cropBox.getWidth() * scale) / 2, + (imageableHeight - cropBox.getHeight() * scale) / 2); + } + + // rasterize to bitmap (optional) + Graphics2D printerGraphics = null; + BufferedImage image = null; + if (dpi > 0) + { + float dpiScale = dpi / 72; + image = new BufferedImage((int)(imageableWidth * dpiScale / scale), + (int)(imageableHeight * dpiScale / scale), + BufferedImage.TYPE_INT_ARGB); + + printerGraphics = graphics2D; + graphics2D = image.createGraphics(); + + // rescale + printerGraphics.scale(scale / dpiScale, scale / dpiScale); + scale = dpiScale; + } + + // draw to graphics using PDFRender + AffineTransform transform = (AffineTransform)graphics2D.getTransform().clone(); + graphics2D.setBackground(Color.WHITE); + renderer.setSubsamplingAllowed(subsamplingAllowed); + renderer.setRenderingHints(renderingHints); + renderer.renderPageToGraphics(pageIndex, graphics2D, (float) scale, (float) scale, RenderDestination.PRINT); + + // draw crop box + if (showPageBorder) + { + graphics2D.setTransform(transform); + graphics2D.setClip(0, 0, (int)imageableWidth, (int)imageableHeight); + graphics2D.scale(scale, scale); + graphics2D.setColor(Color.GRAY); + graphics2D.setStroke(new BasicStroke(0.5f)); + graphics.drawRect(0, 0, (int)cropBox.getWidth(), (int)cropBox.getHeight()); + } + + // draw rasterized bitmap (optional) + if (printerGraphics != null) + { + printerGraphics.setBackground(Color.WHITE); + printerGraphics.clearRect(0, 0, image.getWidth(), image.getHeight()); + printerGraphics.drawImage(image, 0, 0, null); + graphics2D.dispose(); + } + + return PAGE_EXISTS; + } + catch (IOException e) + { + throw new PrinterIOException(e); + } + } + + /** + * This will find the CropBox with rotation applied, for this page by looking up the hierarchy + * until it finds them. + * + * @return The CropBox at this level in the hierarchy. + */ + static PDRectangle getRotatedCropBox(PDPage page) + { + PDRectangle cropBox = page.getCropBox(); + int rotationAngle = page.getRotation(); + if (rotationAngle == 90 || rotationAngle == 270) + { + return new PDRectangle(cropBox.getLowerLeftY(), cropBox.getLowerLeftX(), + cropBox.getHeight(), cropBox.getWidth()); + } + else + { + return cropBox; + } + } + + /** + * This will find the MediaBox with rotation applied, for this page by looking up the hierarchy + * until it finds them. + * + * @return The MediaBox at this level in the hierarchy. + */ + static PDRectangle getRotatedMediaBox(PDPage page) + { + PDRectangle mediaBox = page.getMediaBox(); + int rotationAngle = page.getRotation(); + if (rotationAngle == 90 || rotationAngle == 270) + { + return new PDRectangle(mediaBox.getLowerLeftY(), mediaBox.getLowerLeftX(), + mediaBox.getHeight(), mediaBox.getWidth()); + } + else + { + return mediaBox; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/printing/Scaling.java b/pdfbox/src/main/java/org/apache/pdfbox/printing/Scaling.java new file mode 100644 index 00000000000..c006743b646 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/printing/Scaling.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.printing; + +/** + * Scale of the image on printed pages. + * + * @author John Hewson + */ +public enum Scaling +{ + /** Print the image at 100% scale. */ + ACTUAL_SIZE, + + /** Shrink the image to fit the page, if needed. */ + SHRINK_TO_FIT, + + /** Stretch the image to fill the page, if needed. */ + STRETCH_TO_FIT, + + /** Stretch or shrink the image to fill the page, as needed. */ + SCALE_TO_FIT +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java new file mode 100644 index 00000000000..c84f168d0f9 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.geom.GeneralPath; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.font.PDFontLike; +import org.apache.pdfbox.pdmodel.font.PDSimpleFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDVectorFont; + +/** + * A simple glyph outline cache. + * + * @author John Hewson + */ +final class GlyphCache +{ + private static final Log LOG = LogFactory.getLog(GlyphCache.class); + + private final PDVectorFont font; + private final Map cache = new HashMap<>(); + + GlyphCache(PDVectorFont font) + { + this.font = font; + } + + public GeneralPath getPathForCharacterCode(int code) + { + GeneralPath path = cache.get(code); + if (path != null) + { + return path; + } + + try + { + if (!font.hasGlyph(code)) + { + String fontName = ((PDFontLike) font).getName(); + if (font instanceof PDType0Font) + { + int cid = ((PDType0Font) font).codeToCID(code); + String cidHex = String.format("%04x", cid); + LOG.warn("No glyph for code " + code + " (CID " + cidHex + ") in font " + fontName); + } + else if (font instanceof PDSimpleFont) + { + LOG.warn("No glyph for code " + code + " in " + font.getClass().getSimpleName() + + " " + fontName + " (embedded or system font used: " + + ((PDSimpleFont) font).getFontBoxFont().getName() + ")"); + PDSimpleFont simpleFont = (PDSimpleFont) font; + if (code == 10 && simpleFont.isStandard14()) + { + // PDFBOX-4001 return empty path for line feed on std14 + path = new GeneralPath(); + cache.put(code, path); + return path; + } + } + else + { + LOG.warn("No glyph for code " + code + " in font " + fontName); + } + } + + path = font.getNormalizedPath(code); + cache.put(code, path); + return path; + } + catch (IOException e) + { + // todo: escalate this error? + LOG.error("Glyph rendering failed", e); + return new GeneralPath(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/GroupGraphics.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/GroupGraphics.java new file mode 100644 index 00000000000..d85d7db923c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/GroupGraphics.java @@ -0,0 +1,728 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.Color; +import java.awt.Composite; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.Image; +import java.awt.Paint; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.awt.image.BufferedImageOp; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferInt; +import java.awt.image.ImageObserver; +import java.awt.image.RenderedImage; +import java.awt.image.renderable.RenderableImage; +import java.text.AttributedCharacterIterator; +import java.util.Map; + +/** + * Graphics implementation for non-isolated transparency groups. + *

    + * Non-isolated groups require that the group backdrop (copied from parent group or + * page) is used as the initial contents of the image to which the group is rendered. + * This allows blend modes to blend the group contents with the graphics behind + * the group. Finally when the group rendering is done, backdrop removal must be + * computed (see {@link #removeBackdrop(java.awt.image.BufferedImage, int, int) removeBackdrop}). + * It ensures the backdrop is not rendered twice on the parent but it leaves the + * effects of blend modes. + *

    + * This class renders the group contents to two images. groupImage is + * initialized with the backdrop and group contents are drawn over it. + * groupAlphaImage is initially fully transparent and it accumulates + * the total alpha of the group contents excluding backdrop. + *

    + * If a non-isolated group uses only the blend mode Normal, it can be optimized + * and rendered like an isolated group; backdrop usage and removal are not needed. + */ + +class GroupGraphics extends Graphics2D +{ + private final BufferedImage groupImage; + private final BufferedImage groupAlphaImage; + private final Graphics2D groupG2D; + private final Graphics2D alphaG2D; + + GroupGraphics(BufferedImage groupImage, Graphics2D groupGraphics) + { + this.groupImage = groupImage; + this.groupG2D = groupGraphics; + this.groupAlphaImage = new BufferedImage(groupImage.getWidth(), groupImage.getHeight(), + BufferedImage.TYPE_INT_ARGB); + this.alphaG2D = groupAlphaImage.createGraphics(); + } + + private GroupGraphics(BufferedImage groupImage, Graphics2D groupGraphics, + BufferedImage groupAlphaImage, Graphics2D alphaGraphics) + { + this.groupImage = groupImage; + this.groupG2D = groupGraphics; + this.groupAlphaImage = groupAlphaImage; + this.alphaG2D = alphaGraphics; + } + + @Override + public void clearRect(int x, int y, int width, int height) + { + groupG2D.clearRect(x, y, width, height); + alphaG2D.clearRect(x, y, width, height); + } + + @Override + public void clipRect(int x, int y, int width, int height) + { + groupG2D.clipRect(x, y, width, height); + alphaG2D.clipRect(x, y, width, height); + } + + @Override + public void copyArea(int x, int y, int width, int height, int dx, int dy) + { + groupG2D.copyArea(x, y, width, height, dx, dy); + alphaG2D.copyArea(x, y, width, height, dx, dy); + } + + @Override + public Graphics create() + { + Graphics g = groupG2D.create(); + Graphics a = alphaG2D.create(); + if (g instanceof Graphics2D && a instanceof Graphics2D) + { + return new GroupGraphics(groupImage, (Graphics2D)g, groupAlphaImage, (Graphics2D)a); + } + throw new UnsupportedOperationException(); + } + + @Override + public void dispose() + { + groupG2D.dispose(); + alphaG2D.dispose(); + } + + @Override + public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) + { + groupG2D.drawArc(x, y, width, height, startAngle, arcAngle); + alphaG2D.drawArc(x, y, width, height, startAngle, arcAngle); + } + + @Override + public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) + { + groupG2D.drawImage(img, x, y, bgcolor, observer); + return alphaG2D.drawImage(img, x, y, bgcolor, observer); + } + + @Override + public boolean drawImage(Image img, int x, int y, ImageObserver observer) + { + groupG2D.drawImage(img, x, y, observer); + return alphaG2D.drawImage(img, x, y, observer); + } + + @Override + public boolean drawImage(Image img, int x, int y, int width, int height, + Color bgcolor, ImageObserver observer) + { + groupG2D.drawImage(img, x, y, width, height, bgcolor, observer); + return alphaG2D.drawImage(img, x, y, width, height, bgcolor, observer); + } + + @Override + public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) + { + groupG2D.drawImage(img, x, y, width, height, observer); + return alphaG2D.drawImage(img, x, y, width, height, observer); + } + + @Override + public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, + int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) + { + groupG2D.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer); + return alphaG2D.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer); + } + + @Override + public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, + int sy1, int sx2, int sy2, ImageObserver observer) + { + groupG2D.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer); + return alphaG2D.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer); + } + + @Override + public void drawLine(int x1, int y1, int x2, int y2) + { + groupG2D.drawLine(x1, y1, x2, y2); + alphaG2D.drawLine(x1, y1, x2, y2); + } + + @Override + public void drawOval(int x, int y, int width, int height) + { + groupG2D.drawOval(x, y, width, height); + alphaG2D.drawOval(x, y, width, height); + } + + @Override + public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) + { + groupG2D.drawPolygon(xPoints, yPoints, nPoints); + alphaG2D.drawPolygon(xPoints, yPoints, nPoints); + } + + @Override + public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) + { + groupG2D.drawPolyline(xPoints, yPoints, nPoints); + alphaG2D.drawPolyline(xPoints, yPoints, nPoints); + } + + @Override + public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) + { + groupG2D.drawRoundRect(x, y, width, height, arcWidth, arcHeight); + alphaG2D.drawRoundRect(x, y, width, height, arcWidth, arcHeight); + } + + @Override + public void drawString(AttributedCharacterIterator iterator, int x, int y) + { + groupG2D.drawString(iterator, x, y); + alphaG2D.drawString(iterator, x, y); + } + + @Override + public void drawString(String str, int x, int y) + { + groupG2D.drawString(str, x, y); + alphaG2D.drawString(str, x, y); + } + + @Override + public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) + { + groupG2D.fillArc(x, y, width, height, startAngle, arcAngle); + alphaG2D.fillArc(x, y, width, height, startAngle, arcAngle); + } + + @Override + public void fillOval(int x, int y, int width, int height) + { + groupG2D.fillOval(x, y, width, height); + alphaG2D.fillOval(x, y, width, height); + } + + @Override + public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) + { + groupG2D.fillPolygon(xPoints, yPoints, nPoints); + alphaG2D.fillPolygon(xPoints, yPoints, nPoints); + } + + @Override + public void fillRect(int x, int y, int width, int height) + { + groupG2D.fillRect(x, y, width, height); + alphaG2D.fillRect(x, y, width, height); + } + + @Override + public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) + { + groupG2D.fillRoundRect(x, y, width, height, arcWidth, arcHeight); + alphaG2D.fillRoundRect(x, y, width, height, arcWidth, arcHeight); + } + + @Override + public Shape getClip() + { + return groupG2D.getClip(); + } + + @Override + public Rectangle getClipBounds() + { + return groupG2D.getClipBounds(); + } + + @Override + public Color getColor() + { + return groupG2D.getColor(); + } + + @Override + public Font getFont() + { + return groupG2D.getFont(); + } + + @Override + public FontMetrics getFontMetrics(Font f) + { + return groupG2D.getFontMetrics(f); + } + + @Override + public void setClip(int x, int y, int width, int height) + { + groupG2D.setClip(x, y, width, height); + alphaG2D.setClip(x, y, width, height); + } + + @Override + public void setClip(Shape clip) + { + groupG2D.setClip(clip); + alphaG2D.setClip(clip); + } + + @Override + public void setColor(Color c) + { + groupG2D.setColor(c); + alphaG2D.setColor(c); + } + + @Override + public void setFont(Font font) + { + groupG2D.setFont(font); + alphaG2D.setFont(font); + } + + @Override + public void setPaintMode() + { + groupG2D.setPaintMode(); + alphaG2D.setPaintMode(); + } + + @Override + public void setXORMode(Color c1) + { + groupG2D.setXORMode(c1); + alphaG2D.setXORMode(c1); + } + + @Override + public void translate(int x, int y) + { + groupG2D.translate(x, y); + alphaG2D.translate(x, y); + } + + @Override + public void addRenderingHints(Map hints) + { + groupG2D.addRenderingHints(hints); + alphaG2D.addRenderingHints(hints); + } + + @Override + public void clip(Shape s) + { + groupG2D.clip(s); + alphaG2D.clip(s); + } + + @Override + public void draw(Shape s) + { + groupG2D.draw(s); + alphaG2D.draw(s); + } + + @Override + public void drawGlyphVector(GlyphVector g, float x, float y) + { + groupG2D.drawGlyphVector(g, x, y); + alphaG2D.drawGlyphVector(g, x, y); + } + + @Override + public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) + { + groupG2D.drawImage(img, op, x, y); + alphaG2D.drawImage(img, op, x, y); + } + + @Override + public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) + { + groupG2D.drawImage(img, xform, obs); + return alphaG2D.drawImage(img, xform, obs); + } + + @Override + public void drawRenderableImage(RenderableImage img, AffineTransform xform) + { + groupG2D.drawRenderableImage(img, xform); + alphaG2D.drawRenderableImage(img, xform); + } + + @Override + public void drawRenderedImage(RenderedImage img, AffineTransform xform) + { + groupG2D.drawRenderedImage(img, xform); + alphaG2D.drawRenderedImage(img, xform); + } + + @Override + public void drawString(AttributedCharacterIterator iterator, float x, float y) + { + groupG2D.drawString(iterator, x, y); + alphaG2D.drawString(iterator, x, y); + } + + @Override + public void drawString(String str, float x, float y) + { + groupG2D.drawString(str, x, y); + alphaG2D.drawString(str, x, y); + } + + @Override + public void fill(Shape s) + { + groupG2D.fill(s); + alphaG2D.fill(s); + } + + @Override + public Color getBackground() + { + return groupG2D.getBackground(); + } + + @Override + public Composite getComposite() + { + return groupG2D.getComposite(); + } + + @Override + public GraphicsConfiguration getDeviceConfiguration() + { + return groupG2D.getDeviceConfiguration(); + } + + @Override + public FontRenderContext getFontRenderContext() + { + return groupG2D.getFontRenderContext(); + } + + @Override + public Paint getPaint() + { + return groupG2D.getPaint(); + } + + @Override + public Object getRenderingHint(RenderingHints.Key hintKey) + { + return groupG2D.getRenderingHint(hintKey); + } + + @Override + public RenderingHints getRenderingHints() + { + return groupG2D.getRenderingHints(); + } + + @Override + public Stroke getStroke() + { + return groupG2D.getStroke(); + } + + @Override + public AffineTransform getTransform() + { + return groupG2D.getTransform(); + } + + @Override + public boolean hit(Rectangle rect, Shape s, boolean onStroke) + { + return groupG2D.hit(rect, s, onStroke); + } + + @Override + public void rotate(double theta) + { + groupG2D.rotate(theta); + alphaG2D.rotate(theta); + } + + @Override + public void rotate(double theta, double x, double y) + { + groupG2D.rotate(theta, x, y); + alphaG2D.rotate(theta, x, y); + } + + @Override + public void scale(double sx, double sy) + { + groupG2D.scale(sx, sy); + alphaG2D.scale(sx, sy); + } + + @Override + public void setBackground(Color color) + { + groupG2D.setBackground(color); + alphaG2D.setBackground(color); + } + + @Override + public void setComposite(Composite comp) + { + groupG2D.setComposite(comp); + alphaG2D.setComposite(comp); + } + + @Override + public void setPaint(Paint paint) + { + groupG2D.setPaint(paint); + alphaG2D.setPaint(paint); + } + + @Override + public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) + { + groupG2D.setRenderingHint(hintKey, hintValue); + alphaG2D.setRenderingHint(hintKey, hintValue); + } + + @Override + public void setRenderingHints(Map hints) + { + groupG2D.setRenderingHints(hints); + alphaG2D.setRenderingHints(hints); + } + + @Override + public void setStroke(Stroke s) + { + groupG2D.setStroke(s); + alphaG2D.setStroke(s); + } + + @Override + public void setTransform(AffineTransform tx) + { + groupG2D.setTransform(tx); + alphaG2D.setTransform(tx); + } + + @Override + public void shear(double shx, double shy) + { + groupG2D.shear(shx, shy); + alphaG2D.shear(shx, shy); + } + + @Override + public void transform(AffineTransform tx) + { + groupG2D.transform(tx); + alphaG2D.transform(tx); + } + + @Override + public void translate(double tx, double ty) + { + groupG2D.translate(tx, ty); + alphaG2D.translate(tx, ty); + } + + /** + * Computes backdrop removal. + * The backdrop removal equation is given in section 11.4.4 in the PDF 32000-1:2008 + * standard. It returns the final color C for each pixel in the group:
    + * C = Cn + (Cn - C0) * (alpha0 / alphagn - alpha0)
    + * where
    + * Cn is the group color including backdrop (read from groupImage),
    + * C0 is the backdrop color,
    + * alpha0 is the backdrop alpha,
    + * alphagn is the group alpha excluding backdrop (read the + * alpha channel from groupAlphaImage)
    + *

    + * The alpha of the result is equal to alphagn, i.e., the alpha + * channel of groupAlphaImage. + *

    + * The backdrop image may be much larger than groupImage if, + * for example, the current page is used as the backdrop. Only a specific rectangular + * region of backdrop is used in the backdrop removal: upper-left corner + * is at (offsetX, offsetY); width and height are equal to those of + * groupImage. + * + * @param backdrop group backdrop + * @param offsetX backdrop left X coordinate + * @param offsetY backdrop upper Y coordinate + */ + void removeBackdrop(BufferedImage backdrop, int offsetX, int offsetY) + { + int groupWidth = groupImage.getWidth(); + int groupHeight = groupImage.getHeight(); + int backdropWidth = backdrop.getWidth(); + int backdropHeight = backdrop.getHeight(); + int groupType = groupImage.getType(); + int groupAlphaType = groupAlphaImage.getType(); + int backdropType = backdrop.getType(); + DataBuffer groupDataBuffer = groupImage.getRaster().getDataBuffer(); + DataBuffer groupAlphaDataBuffer = groupAlphaImage.getRaster().getDataBuffer(); + DataBuffer backdropDataBuffer = backdrop.getRaster().getDataBuffer(); + + if (groupType == BufferedImage.TYPE_INT_ARGB && + groupAlphaType == BufferedImage.TYPE_INT_ARGB && + (backdropType == BufferedImage.TYPE_INT_ARGB || backdropType == BufferedImage.TYPE_INT_RGB) && + groupDataBuffer instanceof DataBufferInt && + groupAlphaDataBuffer instanceof DataBufferInt && + backdropDataBuffer instanceof DataBufferInt) + { + // Optimized computation for int[] buffers. + + int[] groupData = ((DataBufferInt)groupDataBuffer).getData(); + int[] groupAlphaData = ((DataBufferInt)groupAlphaDataBuffer).getData(); + int[] backdropData = ((DataBufferInt)backdropDataBuffer).getData(); + boolean backdropHasAlpha = backdropType == BufferedImage.TYPE_INT_ARGB; + + for (int y = 0; y < groupHeight; y++) + { + for (int x = 0; x < groupWidth; x++) + { + int index = x + y * groupWidth; + + // alphagn is the total alpha of the group contents excluding backdrop. + int alphagn = (groupAlphaData[index] >> 24) & 0xFF; + if (alphagn == 0) + { + // Avoid division by 0 and set the result to fully transparent. + groupData[index] = 0; + continue; + } + + int backdropX = x + offsetX; + int backdropY = y + offsetY; + int backdropRGB; // color of backdrop pixel + float alpha0; // alpha of backdrop pixel + + if (backdropX >= 0 && backdropX < backdropWidth && + backdropY >= 0 && backdropY < backdropHeight) + { + backdropRGB = backdropData[backdropX + backdropY * backdropWidth]; + alpha0 = backdropHasAlpha ? ((backdropRGB >> 24) & 0xFF) : 255; + } + else + { + // Backdrop pixel is out of bounds. Use a transparent value. + backdropRGB = 0; + alpha0 = 0; + } + + // Alpha factor alpha0 / alphagn - alpha0 is in range 0.0-1.0. + float alphaFactor = alpha0 / (float)alphagn - alpha0 / 255.0f; + int groupRGB = groupData[index]; // color of group pixel + + // Compute backdrop removal for RGB components. + int r = backdropRemoval(groupRGB, backdropRGB, 16, alphaFactor); + int g = backdropRemoval(groupRGB, backdropRGB, 8, alphaFactor); + int b = backdropRemoval(groupRGB, backdropRGB, 0, alphaFactor); + + // Copy the result back to groupImage. The alpha of the result + // is equal to alphagn. + groupData[index] = (alphagn << 24) | (r << 16) | (g << 8) | b; + } + } + } + else + { + // Non-optimized computation for other types of color spaces and pixel buffers. + + for (int y = 0; y < groupHeight; y++) + { + for (int x = 0; x < groupWidth; x++) + { + int alphagn = (groupAlphaImage.getRGB(x, y) >> 24) & 0xFF; + if (alphagn == 0) + { + groupImage.setRGB(x, y, 0); + continue; + } + + int backdropX = x + offsetX; + int backdropY = y + offsetY; + int backdropRGB; + float alpha0; + if (backdropX >= 0 && backdropX < backdropWidth && + backdropY >= 0 && backdropY < backdropHeight) + { + backdropRGB = backdrop.getRGB(backdropX, backdropY); + alpha0 = (backdropRGB >> 24) & 0xFF; + } + else + { + backdropRGB = 0; + alpha0 = 0; + } + + int groupRGB = groupImage.getRGB(x, y); + float alphaFactor = alpha0 / alphagn - alpha0 / 255.0f; + + int r = backdropRemoval(groupRGB, backdropRGB, 16, alphaFactor); + int g = backdropRemoval(groupRGB, backdropRGB, 8, alphaFactor); + int b = backdropRemoval(groupRGB, backdropRGB, 0, alphaFactor); + + groupImage.setRGB(x, y, (alphagn << 24) | (r << 16) | (g << 8) | b); + } + } + } + } + + /** + * Computes the backdrop removal equation. + * C = Cn + (Cn - C0) * (alpha0 / alphagn - alpha0) + */ + private int backdropRemoval(int groupRGB, int backdropRGB, int shift, float alphaFactor) + { + float cn = (groupRGB >> shift) & 0xFF; + float c0 = (backdropRGB >> shift) & 0xFF; + int c = Math.round(cn + (cn - c0) * alphaFactor); + return (c < 0) ? 0 : (c > 255 ? 255 : c); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/ImageType.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/ImageType.java new file mode 100644 index 00000000000..46a070da86c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/ImageType.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.image.BufferedImage; + +/** + * Image type for rendering. + */ +public enum ImageType +{ + /** Black or white. */ + BINARY + { + @Override + int toBufferedImageType() + { + return BufferedImage.TYPE_BYTE_BINARY; + } + }, + + /** Shades of gray */ + GRAY + { + @Override + int toBufferedImageType() + { + return BufferedImage.TYPE_BYTE_GRAY; + } + }, + + /** Red, Green, Blue */ + RGB + { + @Override + int toBufferedImageType() + { + return BufferedImage.TYPE_INT_RGB; + } + }, + + /** Alpha, Red, Green, Blue */ + ARGB + { + @Override + int toBufferedImageType() + { + return BufferedImage.TYPE_INT_ARGB; + } + }; + + abstract int toBufferedImageType(); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java new file mode 100644 index 00000000000..9484a358916 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java @@ -0,0 +1,608 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.Color; +import java.awt.DisplayMode; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentProperties; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.interactive.annotation.AnnotationFilter; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; + +/** + * Renders a PDF document to an AWT BufferedImage. + * This class may be overridden in order to perform custom rendering. + * + * @author John Hewson + */ +public class PDFRenderer +{ + private static final Log LOG = LogFactory.getLog(PDFRenderer.class); + + protected final PDDocument document; + // TODO keep rendering state such as caches here + + /** + * Default annotations filter, returns all annotations + */ + private AnnotationFilter annotationFilter = new AnnotationFilter() + { + @Override + public boolean accept(PDAnnotation annotation) + { + return true; + } + }; + + private boolean subsamplingAllowed = false; + + private RenderDestination defaultDestination; + + private RenderingHints renderingHints = null; + + private BufferedImage pageImage; + + private static boolean kcmsLogged = false; + + /** + * Creates a new PDFRenderer. + * @param document the document to render + */ + public PDFRenderer(PDDocument document) + { + this.document = document; + + if (!kcmsLogged) + { + suggestKCMS(); + kcmsLogged = true; + } + } + + /** + * Return the AnnotationFilter. + * + * @return the AnnotationFilter + */ + public AnnotationFilter getAnnotationsFilter() + { + return annotationFilter; + } + + /** + * Set the AnnotationFilter. + * + *

    Allows to only render annotation accepted by the filter. + * + * @param annotationsFilter the AnnotationFilter + */ + public void setAnnotationsFilter(AnnotationFilter annotationsFilter) + { + this.annotationFilter = annotationsFilter; + } + + /** + * Value indicating if the renderer is allowed to subsample images before drawing, according to + * image dimensions and requested scale. + * + * Subsampling may be faster and less memory-intensive in some cases, but it may also lead to + * loss of quality, especially in images with high spatial frequency. + * + * @return true if subsampling of images is allowed, false otherwise. + */ + public boolean isSubsamplingAllowed() + { + return subsamplingAllowed; + } + + /** + * Sets a value instructing the renderer whether it is allowed to subsample images before + * drawing. The subsampling frequency is determined according to image size and requested scale. + * + * Subsampling may be faster and less memory-intensive in some cases, but it may also lead to + * loss of quality, especially in images with high spatial frequency. + * + * @param subsamplingAllowed The new value indicating if subsampling is allowed. + */ + public void setSubsamplingAllowed(boolean subsamplingAllowed) + { + this.subsamplingAllowed = subsamplingAllowed; + } + + /** + * @return the defaultDestination + */ + public RenderDestination getDefaultDestination() + { + return defaultDestination; + } + + /** + * @param defaultDestination the defaultDestination to set + */ + public void setDefaultDestination(RenderDestination defaultDestination) + { + this.defaultDestination = defaultDestination; + } + + /** + * Get the rendering hints. + * + * @return the rendering hints or null if none are set. + */ + public RenderingHints getRenderingHints() + { + return renderingHints; + } + + /** + * Set the rendering hints. Use this to influence rendering quality and speed. If you don't set + * them yourself or pass null, PDFBox will decide at runtime depending on the + * destination. + * + * @param renderingHints + */ + public void setRenderingHints(RenderingHints renderingHints) + { + this.renderingHints = renderingHints; + } + + /** + * Returns the given page as an RGB image at 72 DPI + * @param pageIndex the zero-based index of the page to be converted. + * @return the rendered page image + * @throws IOException if the PDF cannot be read + */ + public BufferedImage renderImage(int pageIndex) throws IOException + { + return renderImage(pageIndex, 1); + } + + /** + * Returns the given page as an RGB image at the given scale. + * A scale of 1 will render at 72 DPI. + * @param pageIndex the zero-based index of the page to be converted + * @param scale the scaling factor, where 1 = 72 DPI + * @return the rendered page image + * @throws IOException if the PDF cannot be read + */ + public BufferedImage renderImage(int pageIndex, float scale) throws IOException + { + return renderImage(pageIndex, scale, ImageType.RGB); + } + + /** + * Returns the given page as an RGB image at the given DPI. + * @param pageIndex the zero-based index of the page to be converted + * @param dpi the DPI (dots per inch) to render at + * @return the rendered page image + * @throws IOException if the PDF cannot be read + */ + public BufferedImage renderImageWithDPI(int pageIndex, float dpi) throws IOException + { + return renderImage(pageIndex, dpi / 72f, ImageType.RGB); + } + + /** + * Returns the given page as an RGB image at the given DPI. + * @param pageIndex the zero-based index of the page to be converted + * @param dpi the DPI (dots per inch) to render at + * @param imageType the type of image to return + * @return the rendered page image + * @throws IOException if the PDF cannot be read + */ + public BufferedImage renderImageWithDPI(int pageIndex, float dpi, ImageType imageType) + throws IOException + { + return renderImage(pageIndex, dpi / 72f, imageType); + } + + /** + * Returns the given page as an RGB or ARGB image at the given scale. + * @param pageIndex the zero-based index of the page to be converted + * @param scale the scaling factor, where 1 = 72 DPI + * @param imageType the type of image to return + * @return the rendered page image + * @throws IOException if the PDF cannot be read + */ + public BufferedImage renderImage(int pageIndex, float scale, ImageType imageType) + throws IOException + { + return renderImage(pageIndex, scale, imageType, + defaultDestination == null ? RenderDestination.EXPORT : defaultDestination); + } + + /** + * Returns the given page as an RGB or ARGB image at the given scale. + * @param pageIndex the zero-based index of the page to be converted + * @param scale the scaling factor, where 1 = 72 DPI + * @param imageType the type of image to return + * @param destination controlling visibility of optional content groups + * @return the rendered page image + * @throws IOException if the PDF cannot be read + */ + public BufferedImage renderImage(int pageIndex, float scale, ImageType imageType, RenderDestination destination) + throws IOException + { + PDPage page = document.getPage(pageIndex); + + PDRectangle cropbBox = page.getCropBox(); + float widthPt = cropbBox.getWidth(); + float heightPt = cropbBox.getHeight(); + + // PDFBOX-4306 avoid single blank pixel line on the right or on the bottom + int widthPx = (int) Math.max(Math.floor(widthPt * scale), 1); + int heightPx = (int) Math.max(Math.floor(heightPt * scale), 1); + + // PDFBOX-4518 the maximum size (w*h) of a buffered image is limited to Integer.MAX_VALUE + if ((long) widthPx * (long) heightPx > Integer.MAX_VALUE) + { + throw new IOException("Maximum size of image exceeded (w * h * scale) = "// + + widthPt + " * " + heightPt + " * " + scale + " > " + Integer.MAX_VALUE); + } + + int rotationAngle = page.getRotation(); + + int bimType = imageType.toBufferedImageType(); + if (imageType != ImageType.ARGB && hasBlendMode(page)) + { + // PDFBOX-4095: if the PDF has blending on the top level, draw on transparent background + // Inpired from PDF.js: if a PDF page uses any blend modes other than Normal, + // PDF.js renders everything on a fully transparent RGBA canvas. + // Finally when the page has been rendered, PDF.js draws the RGBA canvas on a white canvas. + bimType = BufferedImage.TYPE_INT_ARGB; + } + + // swap width and height + BufferedImage image; + if (rotationAngle == 90 || rotationAngle == 270) + { + image = new BufferedImage(heightPx, widthPx, bimType); + } + else + { + image = new BufferedImage(widthPx, heightPx, bimType); + } + + pageImage = image; + + // use a transparent background if the image type supports alpha + Graphics2D g = image.createGraphics(); + if (image.getType() == BufferedImage.TYPE_INT_ARGB) + { + g.setBackground(new Color(0, 0, 0, 0)); + } + else + { + g.setBackground(Color.WHITE); + } + g.clearRect(0, 0, image.getWidth(), image.getHeight()); + + transform(g, page, scale, scale); + + // the end-user may provide a custom PageDrawer + RenderingHints actualRenderingHints = + renderingHints == null ? createDefaultRenderingHints(g) : renderingHints; + PageDrawerParameters parameters = new PageDrawerParameters(this, page, subsamplingAllowed, + destination, actualRenderingHints); + PageDrawer drawer = createPageDrawer(parameters); + drawer.drawPage(g, page.getCropBox()); + + g.dispose(); + + if (image.getType() != imageType.toBufferedImageType()) + { + // PDFBOX-4095: draw temporary transparent image on white background + BufferedImage newImage = + new BufferedImage(image.getWidth(), image.getHeight(), imageType.toBufferedImageType()); + Graphics2D dstGraphics = newImage.createGraphics(); + dstGraphics.setBackground(Color.WHITE); + dstGraphics.clearRect(0, 0, image.getWidth(), image.getHeight()); + dstGraphics.drawImage(image, 0, 0, null); + dstGraphics.dispose(); + image = newImage; + } + + return image; + } + + /** + * Renders a given page to an AWT Graphics2D instance. + * @param pageIndex the zero-based index of the page to be converted + * @param graphics the Graphics2D on which to draw the page + * @throws IOException if the PDF cannot be read + */ + public void renderPageToGraphics(int pageIndex, Graphics2D graphics) throws IOException + { + renderPageToGraphics(pageIndex, graphics, 1); + } + + /** + * Renders a given page to an AWT Graphics2D instance. + * @param pageIndex the zero-based index of the page to be converted + * @param graphics the Graphics2D on which to draw the page + * @param scale the scale to draw the page at + * @throws IOException if the PDF cannot be read + */ + public void renderPageToGraphics(int pageIndex, Graphics2D graphics, float scale) + throws IOException + { + renderPageToGraphics(pageIndex, graphics, scale, scale); + } + + /** + * Renders a given page to an AWT Graphics2D instance. + * + * @param pageIndex the zero-based index of the page to be converted + * @param graphics the Graphics2D on which to draw the page + * @param scaleX the scale to draw the page at for the x-axis + * @param scaleY the scale to draw the page at for the y-axis + * @throws IOException if the PDF cannot be read + */ + public void renderPageToGraphics(int pageIndex, Graphics2D graphics, float scaleX, float scaleY) + throws IOException + { + renderPageToGraphics(pageIndex, graphics, scaleX, scaleY, + defaultDestination == null ? RenderDestination.VIEW : defaultDestination); + } + + /** + * Renders a given page to an AWT Graphics2D instance. + * + * @param pageIndex the zero-based index of the page to be converted + * @param graphics the Graphics2D on which to draw the page + * @param scaleX the scale to draw the page at for the x-axis + * @param scaleY the scale to draw the page at for the y-axis + * @param destination controlling visibility of optional content groups + * @throws IOException if the PDF cannot be read + */ + public void renderPageToGraphics(int pageIndex, Graphics2D graphics, float scaleX, float scaleY, RenderDestination destination) + throws IOException + { + PDPage page = document.getPage(pageIndex); + // TODO need width/wight calculations? should these be in PageDrawer? + + transform(graphics, page, scaleX, scaleY); + + PDRectangle cropBox = page.getCropBox(); + graphics.clearRect(0, 0, (int) cropBox.getWidth(), (int) cropBox.getHeight()); + + // the end-user may provide a custom PageDrawer + RenderingHints actualRenderingHints = + renderingHints == null ? createDefaultRenderingHints(graphics) : renderingHints; + PageDrawerParameters parameters = new PageDrawerParameters(this, page, subsamplingAllowed, + destination, actualRenderingHints); + PageDrawer drawer = createPageDrawer(parameters); + drawer.drawPage(graphics, cropBox); + } + + /** + * Indicates whether an optional content group is enabled. + * @param group the group + * @return true if the group is enabled + */ + public boolean isGroupEnabled(PDOptionalContentGroup group) + { + PDOptionalContentProperties ocProperties = document.getDocumentCatalog().getOCProperties(); + return ocProperties == null || ocProperties.isGroupEnabled(group); + } + + // scale rotate translate + private void transform(Graphics2D graphics, PDPage page, float scaleX, float scaleY) + { + graphics.scale(scaleX, scaleY); + + // TODO should we be passing the scale to PageDrawer rather than messing with Graphics? + int rotationAngle = page.getRotation(); + PDRectangle cropBox = page.getCropBox(); + + if (rotationAngle != 0) + { + float translateX = 0; + float translateY = 0; + switch (rotationAngle) + { + case 90: + translateX = cropBox.getHeight(); + break; + case 270: + translateY = cropBox.getWidth(); + break; + case 180: + translateX = cropBox.getWidth(); + translateY = cropBox.getHeight(); + break; + default: + break; + } + graphics.translate(translateX, translateY); + graphics.rotate(Math.toRadians(rotationAngle)); + } + } + + private boolean isBitonal(Graphics2D graphics) + { + GraphicsConfiguration deviceConfiguration = graphics.getDeviceConfiguration(); + if (deviceConfiguration == null) + { + return false; + } + GraphicsDevice device = deviceConfiguration.getDevice(); + if (device == null) + { + return false; + } + DisplayMode displayMode = device.getDisplayMode(); + if (displayMode == null) + { + return false; + } + return displayMode.getBitDepth() == 1; + } + + private RenderingHints createDefaultRenderingHints(Graphics2D graphics) + { + RenderingHints r = new RenderingHints(null); + r.put(RenderingHints.KEY_INTERPOLATION, isBitonal(graphics) ? + RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR : + RenderingHints.VALUE_INTERPOLATION_BICUBIC); + r.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + r.put(RenderingHints.KEY_ANTIALIASING, isBitonal(graphics) ? + RenderingHints.VALUE_ANTIALIAS_OFF : + RenderingHints.VALUE_ANTIALIAS_ON); + return r; + } + + /** + * Returns a new PageDrawer instance, using the given parameters. May be overridden. + */ + protected PageDrawer createPageDrawer(PageDrawerParameters parameters) throws IOException + { + PageDrawer pageDrawer = new PageDrawer(parameters); + pageDrawer.setAnnotationFilter(annotationFilter); + return pageDrawer; + } + + private boolean hasBlendMode(PDPage page) + { + // check the current resources for blend modes + PDResources resources = page.getResources(); + if (resources == null) + { + return false; + } + for (COSName name : resources.getExtGStateNames()) + { + PDExtendedGraphicsState extGState = resources.getExtGState(name); + if (extGState == null) + { + // can happen if key exists but no value + // see PDFBOX-3950-23EGDHXSBBYQLKYOKGZUOVYVNE675PRD.pdf + continue; + } + BlendMode blendMode = extGState.getBlendMode(); + if (blendMode != BlendMode.NORMAL) + { + return true; + } + } + return false; + } + + /** + * Returns the image to which the current page is being rendered. + * May be null if the page is rendered to a Graphics2D object + * instead of a BufferedImage. + */ + BufferedImage getPageImage() + { + return pageImage; + } + + private static void suggestKCMS() + { + String cmmProperty = System.getProperty("sun.java2d.cmm"); + if (isMinJdk8() && !"sun.java2d.cmm.kcms.KcmsServiceProvider".equals(cmmProperty)) + { + try + { + // Make sure that class exists + Class.forName("sun.java2d.cmm.kcms.KcmsServiceProvider"); + + String version = System.getProperty("java.version"); + if (version == null || + isGoodVersion(version, "1.8.0_(\\d+)", 191) || + isGoodVersion(version, "9.0.(\\d+)", 4)) + { + return; + } + LOG.info("Your current java version is: " + version); + LOG.info("To get higher rendering speed on old java 1.8 or 9 versions,"); + LOG.info(" update to the latest 1.8 or 9 version (>= 1.8.0_191 or >= 9.0.4),"); + LOG.info(" or"); + LOG.info(" use the option -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider"); + LOG.info(" or call System.setProperty(\"sun.java2d.cmm\", \"sun.java2d.cmm.kcms.KcmsServiceProvider\")"); + } + catch (ClassNotFoundException e) + { + // KCMS not available + } + } + } + + private static boolean isGoodVersion(String version, String regex, int min) + { + Matcher matcher = Pattern.compile(regex).matcher(version); + if (matcher.matches() && matcher.groupCount() >= 1) + { + try + { + int v = Integer.parseInt(matcher.group(1)); + if (v >= min) + { + // LCMS no longer bad + return true; + } + } + catch (NumberFormatException ex) + { + return true; + } + } + return false; + } + + private static boolean isMinJdk8() + { + // strategy from lucene-solr/lucene/core/src/java/org/apache/lucene/util/Constants.java + String version = System.getProperty("java.specification.version"); + final StringTokenizer st = new StringTokenizer(version, "."); + try + { + int major = Integer.parseInt(st.nextToken()); + int minor = 0; + if (st.hasMoreTokens()) + { + minor = Integer.parseInt(st.nextToken()); + } + return major > 1 || (major == 1 && minor >= 8); + } + catch (NumberFormatException nfe) + { + // maybe some new numbering scheme in the 22nd century + return true; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java new file mode 100644 index 00000000000..b2db6fa3be1 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java @@ -0,0 +1,1833 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsDevice; +import java.awt.Paint; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.TexturePaint; +import java.awt.Transparency; +import java.awt.color.ColorSpace; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.awt.geom.PathIterator; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.ComponentColorModel; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Stack; +import java.util.StringTokenizer; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.pdmodel.font.PDVectorFont; +import org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.blend.BlendMode; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; +import org.apache.pdfbox.pdmodel.graphics.color.PDICCBased; +import org.apache.pdfbox.pdmodel.graphics.color.PDPattern; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDTransparencyGroup; +import org.apache.pdfbox.pdmodel.graphics.image.PDImage; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup.RenderState; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentMembershipDictionary; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDAbstractPattern; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDShadingPattern; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.state.PDSoftMask; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; +import org.apache.pdfbox.pdmodel.interactive.annotation.AnnotationFilter; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationUnknown; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; + +/** + * Paints a page in a PDF document to a Graphics context. May be subclassed to provide custom + * rendering. + * + *

    + * If you want to do custom graphics processing rather than Graphics2D rendering, then you should + * subclass {@link PDFGraphicsStreamEngine} instead. Subclassing PageDrawer is only suitable for + * cases where the goal is to render onto a {@link Graphics2D} surface. In that case you'll also + * have to subclass {@link PDFRenderer} and modify + * {@link PDFRenderer#createPageDrawer(PageDrawerParameters)}. + * + * @author Ben Litchfield + */ +public class PageDrawer extends PDFGraphicsStreamEngine +{ + private static final Log LOG = LogFactory.getLog(PageDrawer.class); + + // parent document renderer - note: this is needed for not-yet-implemented resource caching + private final PDFRenderer renderer; + + private final boolean subsamplingAllowed; + + // the graphics device to draw to, xform is the initial transform of the device (i.e. DPI) + private Graphics2D graphics; + private AffineTransform xform; + + // the page box to draw (usually the crop box but may be another) + private PDRectangle pageSize; + + // whether image of a transparency group must be flipped + // needed when in a tiling pattern + private boolean flipTG = false; + + // clipping winding rule used for the clipping path + private int clipWindingRule = -1; + private GeneralPath linePath = new GeneralPath(); + + // last clipping path + private Area lastClip; + + // shapes of glyphs being drawn to be used for clipping + private List textClippings; + + // glyph caches + private final Map glyphCaches = new HashMap<>(); + + private final TilingPaintFactory tilingPaintFactory = new TilingPaintFactory(this); + + private final Stack transparencyGroupStack = new Stack<>(); + + // if greater zero the content is hidden and wil not be rendered + private int nestedHiddenOCGCount; + + private final RenderDestination destination; + private final RenderingHints renderingHints; + + static final int JAVA_VERSION = PageDrawer.getJavaVersion(); + + /** + * Default annotations filter, returns all annotations + */ + private AnnotationFilter annotationFilter = new AnnotationFilter() + { + @Override + public boolean accept(PDAnnotation annotation) + { + return true; + } + }; + + /** + * Constructor. + * + * @param parameters Parameters for page drawing. + * @throws IOException If there is an error loading properties from the file. + */ + public PageDrawer(PageDrawerParameters parameters) throws IOException + { + super(parameters.getPage()); + this.renderer = parameters.getRenderer(); + this.subsamplingAllowed = parameters.isSubsamplingAllowed(); + this.destination = parameters.getDestination(); + this.renderingHints = parameters.getRenderingHints(); + } + + /** + * Return the AnnotationFilter. + * + * @return the AnnotationFilter + */ + public AnnotationFilter getAnnotationFilter() + { + return annotationFilter; + } + + /** + * Set the AnnotationFilter. + * + *

    Allows to only render annotation accepted by the filter. + * + * @param annotationFilter the AnnotationFilter + */ + public void setAnnotationFilter(AnnotationFilter annotationFilter) + { + this.annotationFilter = annotationFilter; + } + + /** + * Returns the parent renderer. + */ + public final PDFRenderer getRenderer() + { + return renderer; + } + + /** + * Returns the underlying Graphics2D. May be null if drawPage has not yet been called. + */ + protected final Graphics2D getGraphics() + { + return graphics; + } + + /** + * Returns the current line path. This is reset to empty after each fill/stroke. + */ + protected final GeneralPath getLinePath() + { + return linePath; + } + + /** + * Sets high-quality rendering hints on the current Graphics2D. + */ + private void setRenderingHints() + { + graphics.addRenderingHints(renderingHints); + } + + /** + * Draws the page to the requested context. + * + * @param g The graphics context to draw onto. + * @param pageSize The size of the page to draw. + * @throws IOException If there is an IO error while drawing the page. + */ + public void drawPage(Graphics g, PDRectangle pageSize) throws IOException + { + graphics = (Graphics2D) g; + xform = graphics.getTransform(); + this.pageSize = pageSize; + + setRenderingHints(); + + graphics.translate(0, pageSize.getHeight()); + graphics.scale(1, -1); + + // adjust for non-(0,0) crop box + graphics.translate(-pageSize.getLowerLeftX(), -pageSize.getLowerLeftY()); + + processPage(getPage()); + + for (PDAnnotation annotation : getPage().getAnnotations(annotationFilter)) + { + showAnnotation(annotation); + } + + graphics = null; + } + + /** + * Draws the pattern stream to the requested context. + * + * @param g The graphics context to draw onto. + * @param pattern The tiling pattern to be used. + * @param colorSpace color space for this tiling. + * @param color color for this tiling. + * @param patternMatrix the pattern matrix + * @throws IOException If there is an IO error while drawing the page. + */ + void drawTilingPattern(Graphics2D g, PDTilingPattern pattern, PDColorSpace colorSpace, + PDColor color, Matrix patternMatrix) throws IOException + { + Graphics2D oldGraphics = graphics; + graphics = g; + + GeneralPath oldLinePath = linePath; + linePath = new GeneralPath(); + int oldClipWindingRule = clipWindingRule; + clipWindingRule = -1; + + Area oldLastClip = lastClip; + lastClip = null; + + boolean oldFlipTG = flipTG; + flipTG = true; + + setRenderingHints(); + processTilingPattern(pattern, color, colorSpace, patternMatrix); + + flipTG = oldFlipTG; + graphics = oldGraphics; + linePath = oldLinePath; + lastClip = oldLastClip; + clipWindingRule = oldClipWindingRule; + } + + private float clampColor(float color) + { + return color < 0 ? 0 : (color > 1 ? 1 : color); + } + + /** + * Returns an AWT paint for the given PDColor. + * + * @param color The color to get a paint for. This can be an actual color or a pattern. + * @throws IOException + */ + protected Paint getPaint(PDColor color) throws IOException + { + PDColorSpace colorSpace = color.getColorSpace(); + if (!(colorSpace instanceof PDPattern)) + { + float[] rgb = colorSpace.toRGB(color.getComponents()); + return new Color(clampColor(rgb[0]), clampColor(rgb[1]), clampColor(rgb[2])); + } + else + { + PDPattern patternSpace = (PDPattern)colorSpace; + PDAbstractPattern pattern = patternSpace.getPattern(color); + if (pattern instanceof PDTilingPattern) + { + PDTilingPattern tilingPattern = (PDTilingPattern) pattern; + + if (tilingPattern.getPaintType() == PDTilingPattern.PAINT_COLORED) + { + // colored tiling pattern + return tilingPaintFactory.create(tilingPattern, null, null, xform); + } + else + { + // uncolored tiling pattern + return tilingPaintFactory.create(tilingPattern, + patternSpace.getUnderlyingColorSpace(), color, xform); + } + } + else + { + PDShadingPattern shadingPattern = (PDShadingPattern)pattern; + PDShading shading = shadingPattern.getShading(); + if (shading == null) + { + LOG.error("shadingPattern is null, will be filled with transparency"); + return new Color(0,0,0,0); + } + return shading.toPaint(Matrix.concatenate(getInitialMatrix(), + shadingPattern.getMatrix())); + + } + } + } + + // sets the clipping path using caching for performance, we track lastClip manually because + // Graphics2D#getClip() returns a new object instead of the same one passed to setClip + private void setClip() + { + Area clippingPath = getGraphicsState().getCurrentClippingPath(); + if (clippingPath != lastClip) + { + graphics.setClip(clippingPath); + lastClip = clippingPath; + } + } + + @Override + public void beginText() throws IOException + { + setClip(); + beginTextClip(); + } + + @Override + public void endText() throws IOException + { + endTextClip(); + } + + /** + * Begin buffering the text clipping path, if any. + */ + private void beginTextClip() + { + // buffer the text clippings because they represents a single clipping area + textClippings = new ArrayList<>(); + } + + /** + * End buffering the text clipping path, if any. + */ + private void endTextClip() + { + PDGraphicsState state = getGraphicsState(); + RenderingMode renderingMode = state.getTextState().getRenderingMode(); + + // apply the buffered clip as one area + if (renderingMode.isClip() && !textClippings.isEmpty()) + { + // PDFBOX-4150: this is much faster than using textClippingArea.add(new Area(glyph)) + // https://stackoverflow.com/questions/21519007/fast-union-of-shapes-in-java + GeneralPath path = new GeneralPath(); + for (Shape shape : textClippings) + { + path.append(shape, false); + } + state.intersectClippingPath(path); + textClippings = new ArrayList<>(); + + // PDFBOX-3681: lastClip needs to be reset, because after intersection it is still the same + // object, thus setClip() would believe that it is cached. + lastClip = null; + } + } + + @Override + protected void showFontGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + AffineTransform at = textRenderingMatrix.createAffineTransform(); + at.concatenate(font.getFontMatrix().createAffineTransform()); + + // create cache if it does not exist + PDVectorFont vectorFont = ((PDVectorFont)font); + GlyphCache cache = glyphCaches.get(font); + if (cache == null) + { + cache = new GlyphCache(vectorFont); + glyphCaches.put(font, cache); + } + + GeneralPath path = cache.getPathForCharacterCode(code); + drawGlyph(path, font, code, displacement, at); + } + + /** + * Renders a glyph. + * + * @param path the GeneralPath for the glyph + * @param font the font + * @param code character code + * @param displacement the glyph's displacement (advance) + * @param at the transformation + * @throws IOException if something went wrong + */ + private void drawGlyph(GeneralPath path, PDFont font, int code, Vector displacement, AffineTransform at) throws IOException + { + PDGraphicsState state = getGraphicsState(); + RenderingMode renderingMode = state.getTextState().getRenderingMode(); + + if (path != null) + { + // Stretch non-embedded glyph if it does not match the height/width contained in the PDF. + // Vertical fonts have zero X displacement, so the following code scales to 0 if we don't skip it. + // TODO: How should vertical fonts be handled? + if (!font.isEmbedded() && !font.isVertical() && !font.isStandard14() && font.hasExplicitWidth(code)) + { + float fontWidth = font.getWidthFromFont(code); + if (fontWidth > 0 && // ignore spaces + Math.abs(fontWidth - displacement.getX() * 1000) > 0.0001) + { + float pdfWidth = displacement.getX() * 1000; + at.scale(pdfWidth / fontWidth, 1); + } + } + + // render glyph + Shape glyph = at.createTransformedShape(path); + + if (renderingMode.isFill()) + { + graphics.setComposite(state.getNonStrokingJavaComposite()); + graphics.setPaint(getNonStrokingPaint()); + setClip(); + if (isContentRendered()) + { + graphics.fill(glyph); + } + } + + if (renderingMode.isStroke()) + { + graphics.setComposite(state.getStrokingJavaComposite()); + graphics.setPaint(getStrokingPaint()); + graphics.setStroke(getStroke()); + setClip(); + if (isContentRendered()) + { + graphics.draw(glyph); + } + } + + if (renderingMode.isClip()) + { + textClippings.add(glyph); + } + } + } + + @Override + protected void showType3Glyph(Matrix textRenderingMatrix, PDType3Font font, int code, + String unicode, Vector displacement) throws IOException + { + PDGraphicsState state = getGraphicsState(); + RenderingMode renderingMode = state.getTextState().getRenderingMode(); + if (!RenderingMode.NEITHER.equals(renderingMode)) + { + super.showType3Glyph(textRenderingMatrix, font, code, unicode, displacement); + } + } + + @Override + public void appendRectangle(Point2D p0, Point2D p1, Point2D p2, Point2D p3) + { + // to ensure that the path is created in the right direction, we have to create + // it by combining single lines instead of creating a simple rectangle + linePath.moveTo((float) p0.getX(), (float) p0.getY()); + linePath.lineTo((float) p1.getX(), (float) p1.getY()); + linePath.lineTo((float) p2.getX(), (float) p2.getY()); + linePath.lineTo((float) p3.getX(), (float) p3.getY()); + + // close the subpath instead of adding the last line so that a possible set line + // cap style isn't taken into account at the "beginning" of the rectangle + linePath.closePath(); + } + + //TODO: move soft mask apply to getPaint()? + private Paint applySoftMaskToPaint(Paint parentPaint, PDSoftMask softMask) throws IOException + { + if (softMask == null || softMask.getGroup() == null) + { + return parentPaint; + } + PDColor backdropColor = null; + if (COSName.LUMINOSITY.equals(softMask.getSubType())) + { + COSArray backdropColorArray = softMask.getBackdropColor(); + PDTransparencyGroup form = softMask.getGroup(); + PDColorSpace colorSpace = form.getGroup().getColorSpace(form.getResources()); + if (colorSpace != null && backdropColorArray != null) + { + backdropColor = new PDColor(backdropColorArray, colorSpace); + } + } + TransparencyGroup transparencyGroup = new TransparencyGroup(softMask.getGroup(), true, + softMask.getInitialTransformationMatrix(), backdropColor); + BufferedImage image = transparencyGroup.getImage(); + if (image == null) + { + // Adobe Reader ignores empty softmasks instead of using bc color + // sample file: PDFJS-6967_reduced_outside_softmask.pdf + return parentPaint; + } + BufferedImage gray = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY); + if (COSName.ALPHA.equals(softMask.getSubType())) + { + gray.setData(image.getAlphaRaster()); + } + else if (COSName.LUMINOSITY.equals(softMask.getSubType())) + { + Graphics g = gray.getGraphics(); + g.drawImage(image, 0, 0, null); + g.dispose(); + } + else + { + throw new IOException("Invalid soft mask subtype."); + } + gray = adjustImage(gray); + + Rectangle2D tpgBounds = transparencyGroup.getBounds(); + adjustRectangle(tpgBounds); + return new SoftMask(parentPaint, gray, tpgBounds, backdropColor, softMask.getTransferFunction()); + } + + // this adjusts the rectangle to the rotated image to put the soft mask at the correct position + //TODO after all transparency problems have been solved: + // 1. shouldn't this be done in transparencyGroup.getBounds() ? + // 2. change transparencyGroup.getBounds() to getOrigin(), because size isn't used in SoftMask + // 3. Is it possible to create the softmask and transparency group in the correct rotation? + // (needs rendering identity testing before committing!) + private void adjustRectangle(Rectangle2D r) + { + Matrix m = new Matrix(xform); + float scaleX = Math.abs(m.getScalingFactorX()); + float scaleY = Math.abs(m.getScalingFactorY()); + + AffineTransform adjustedTransform = new AffineTransform(xform); + adjustedTransform.scale(1.0 / scaleX, 1.0 / scaleY); + r.setRect(adjustedTransform.createTransformedShape(r).getBounds2D()); + } + + // returns the image adjusted for applySoftMaskToPaint(). + private BufferedImage adjustImage(BufferedImage gray) throws IOException + { + AffineTransform at = new AffineTransform(xform); + Matrix m = new Matrix(at); + at.scale(1.0 / Math.abs(m.getScalingFactorX()), 1.0 / Math.abs(m.getScalingFactorY())); + + Rectangle originalBounds = new Rectangle(gray.getWidth(), gray.getHeight()); + Rectangle2D transformedBounds = at.createTransformedShape(originalBounds).getBounds2D(); + at.preConcatenate(AffineTransform.getTranslateInstance(-transformedBounds.getMinX(), + -transformedBounds.getMinY())); + + int width = (int) Math.ceil(transformedBounds.getWidth()); + int height = (int) Math.ceil(transformedBounds.getHeight()); + BufferedImage transformedGray = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); + + Graphics2D g2 = (Graphics2D) transformedGray.getGraphics(); + g2.drawImage(gray, at, null); + g2.dispose(); + return transformedGray; + } + + // returns the stroking AWT Paint + private Paint getStrokingPaint() throws IOException + { + return applySoftMaskToPaint( + getPaint(getGraphicsState().getStrokingColor()), + getGraphicsState().getSoftMask()); + } + + // returns the non-stroking AWT Paint + private Paint getNonStrokingPaint() throws IOException + { + return applySoftMaskToPaint( + getPaint(getGraphicsState().getNonStrokingColor()), + getGraphicsState().getSoftMask()); + } + + // create a new stroke based on the current CTM and the current stroke + private BasicStroke getStroke() + { + PDGraphicsState state = getGraphicsState(); + + // apply the CTM + float lineWidth = transformWidth(state.getLineWidth()); + + // minimum line width as used by Adobe Reader + if (lineWidth < 0.25) + { + lineWidth = 0.25f; + } + + PDLineDashPattern dashPattern = state.getLineDashPattern(); + float phaseStart = dashPattern.getPhase(); + float[] dashArray = getDashArray(dashPattern); + phaseStart = transformWidth(phaseStart); + + // empty dash array is illegal + // avoid also infinite and NaN values (PDFBOX-3360) + if (dashArray.length == 0 || Float.isInfinite(phaseStart) || Float.isNaN(phaseStart)) + { + dashArray = null; + } + else + { + for (int i = 0; i < dashArray.length; ++i) + { + if (Float.isInfinite(dashArray[i]) || Float.isNaN(dashArray[i])) + { + dashArray = null; + break; + } + } + } + return new BasicStroke(lineWidth, state.getLineCap(), state.getLineJoin(), + state.getMiterLimit(), dashArray, phaseStart); + } + + private float[] getDashArray(PDLineDashPattern dashPattern) + { + float[] dashArray = dashPattern.getDashArray(); + if (JAVA_VERSION < 10) + { + float scalingFactorX = new Matrix(xform).getScalingFactorX(); + for (int i = 0; i < dashArray.length; ++i) + { + // apply the CTM + float w = transformWidth(dashArray[i]); + // minimum line dash width avoids JVM crash, + // see PDFBOX-2373, PDFBOX-2929, PDFBOX-3204, PDFBOX-3813 + // also avoid 0 in array like "[ 0 1000 ] 0 d", see PDFBOX-3724 + if (scalingFactorX < 0.5f) + { + // PDFBOX-4492 + dashArray[i] = Math.max(w, 0.2f); + } + else + { + dashArray[i] = Math.max(w, 0.062f); + } + } + } + else + { + for (int i = 0; i < dashArray.length; ++i) + { + // apply the CTM + dashArray[i] = transformWidth(dashArray[i]); + } + } + return dashArray; + } + + @Override + public void strokePath() throws IOException + { + graphics.setComposite(getGraphicsState().getStrokingJavaComposite()); + graphics.setPaint(getStrokingPaint()); + graphics.setStroke(getStroke()); + setClip(); + //TODO bbox of shading pattern should be used here? (see fillPath) + if (isContentRendered()) + { + graphics.draw(linePath); + } + linePath.reset(); + } + + @Override + public void fillPath(int windingRule) throws IOException + { + graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite()); + graphics.setPaint(getNonStrokingPaint()); + setClip(); + linePath.setWindingRule(windingRule); + + // disable anti-aliasing for rectangular paths, this is a workaround to avoid small stripes + // which occur when solid fills are used to simulate piecewise gradients, see PDFBOX-2302 + // note that we ignore paths with a width/height under 1 as these are fills used as strokes, + // see PDFBOX-1658 for an example + Rectangle2D bounds = linePath.getBounds2D(); + boolean noAntiAlias = isRectangular(linePath) && bounds.getWidth() > 1 && + bounds.getHeight() > 1; + if (noAntiAlias) + { + graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_OFF); + } + + Shape shape; + if (!(graphics.getPaint() instanceof Color)) + { + // apply clip to path to avoid oversized device bounds in shading contexts (PDFBOX-2901) + Area area = new Area(linePath); + area.intersect(new Area(graphics.getClip())); + intersectShadingBBox(getGraphicsState().getNonStrokingColor(), area); + shape = area; + } + else + { + shape = linePath; + } + if (isContentRendered()) + { + graphics.fill(shape); + } + + linePath.reset(); + + if (noAntiAlias) + { + // JDK 1.7 has a bug where rendering hints are reset by the above call to + // the setRenderingHint method, so we re-set all hints, see PDFBOX-2302 + setRenderingHints(); + } + } + + // checks whether this is a shading pattern and if yes, + // get the transformed BBox and intersect with current paint area + // need to do it here and not in shading getRaster() because it may have been rotated + private void intersectShadingBBox(PDColor color, Area area) throws IOException + { + if (color.getColorSpace() instanceof PDPattern) + { + PDColorSpace colorSpace = color.getColorSpace(); + PDAbstractPattern pat = ((PDPattern) colorSpace).getPattern(color); + if (pat instanceof PDShadingPattern) + { + PDShading shading = ((PDShadingPattern) pat).getShading(); + PDRectangle bbox = shading.getBBox(); + if (bbox != null) + { + Matrix m = Matrix.concatenate(getInitialMatrix(), pat.getMatrix()); + Area bboxArea = new Area(bbox.transform(m)); + area.intersect(bboxArea); + } + } + } + } + + /** + * Returns true if the given path is rectangular. + */ + private boolean isRectangular(GeneralPath path) + { + PathIterator iter = path.getPathIterator(null); + double[] coords = new double[6]; + int count = 0; + int[] xs = new int[4]; + int[] ys = new int[4]; + while (!iter.isDone()) + { + switch(iter.currentSegment(coords)) + { + case PathIterator.SEG_MOVETO: + if (count == 0) + { + xs[count] = (int)Math.floor(coords[0]); + ys[count] = (int)Math.floor(coords[1]); + } + else + { + return false; + } + count++; + break; + + case PathIterator.SEG_LINETO: + if (count < 4) + { + xs[count] = (int)Math.floor(coords[0]); + ys[count] = (int)Math.floor(coords[1]); + } + else + { + return false; + } + count++; + break; + + case PathIterator.SEG_CUBICTO: + return false; + + case PathIterator.SEG_CLOSE: + break; + } + iter.next(); + } + + if (count == 4) + { + return xs[0] == xs[1] || xs[0] == xs[2] || + ys[0] == ys[1] || ys[0] == ys[3]; + } + return false; + } + + /** + * Fills and then strokes the path. + * + * @param windingRule The winding rule this path will use. + * @throws IOException If there is an IO error while filling the path. + */ + @Override + public void fillAndStrokePath(int windingRule) throws IOException + { + // TODO can we avoid cloning the path? + GeneralPath path = (GeneralPath)linePath.clone(); + fillPath(windingRule); + linePath = path; + strokePath(); + } + + @Override + public void clip(int windingRule) + { + // the clipping path will not be updated until the succeeding painting operator is called + clipWindingRule = windingRule; + } + + @Override + public void moveTo(float x, float y) + { + linePath.moveTo(x, y); + } + + @Override + public void lineTo(float x, float y) + { + linePath.lineTo(x, y); + } + + @Override + public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) + { + linePath.curveTo(x1, y1, x2, y2, x3, y3); + } + + @Override + public Point2D getCurrentPoint() + { + return linePath.getCurrentPoint(); + } + + @Override + public void closePath() + { + linePath.closePath(); + } + + @Override + public void endPath() + { + if (clipWindingRule != -1) + { + linePath.setWindingRule(clipWindingRule); + getGraphicsState().intersectClippingPath(linePath); + + // PDFBOX-3836: lastClip needs to be reset, because after intersection it is still the same + // object, thus setClip() would believe that it is cached. + lastClip = null; + + clipWindingRule = -1; + } + linePath.reset(); + } + + @Override + public void drawImage(PDImage pdImage) throws IOException + { + Matrix ctm = getGraphicsState().getCurrentTransformationMatrix(); + AffineTransform at = ctm.createAffineTransform(); + + if (!pdImage.getInterpolate()) + { + boolean isScaledUp = pdImage.getWidth() < Math.round(at.getScaleX()) || + pdImage.getHeight() < Math.round(at.getScaleY()); + + // if the image is scaled down, we use smooth interpolation, eg PDFBOX-2364 + // only when scaled up do we use nearest neighbour, eg PDFBOX-2302 / mori-cvpr01.pdf + // stencils are excluded from this rule (see survey.pdf) + if (isScaledUp || pdImage.isStencil()) + { + graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); + } + } + + if (pdImage.isStencil()) + { + if (getGraphicsState().getNonStrokingColor().getColorSpace() instanceof PDPattern) + { + // The earlier code for stencils (see "else") doesn't work with patterns because the + // CTM is not taken into consideration. + // this code is based on the fact that it is easily possible to draw the mask and + // the paint at the correct place with the existing code, but not in one step. + // Thus what we do is to draw both in separate images, then combine the two and draw + // the result. + // Note that the device scale is not used. In theory, some patterns can get better + // at higher resolutions but the stencil would become more and more "blocky". + // If anybody wants to do this, have a look at the code in showTransparencyGroup(). + + // draw the paint + Paint paint = getNonStrokingPaint(); + Rectangle2D unitRect = new Rectangle2D.Float(0, 0, 1, 1); + Rectangle2D bounds = at.createTransformedShape(unitRect).getBounds2D(); + BufferedImage renderedPaint = + new BufferedImage((int) Math.ceil(bounds.getWidth()), + (int) Math.ceil(bounds.getHeight()), + BufferedImage.TYPE_INT_ARGB); + Graphics2D g = (Graphics2D) renderedPaint.getGraphics(); + g.translate(-bounds.getMinX(), -bounds.getMinY()); + g.setPaint(paint); + g.fill(bounds); + g.dispose(); + + // draw the mask + BufferedImage mask = pdImage.getImage(); + BufferedImage renderedMask = new BufferedImage((int) Math.ceil(bounds.getWidth()), + (int) Math.ceil(bounds.getHeight()), + BufferedImage.TYPE_INT_RGB); + g = (Graphics2D) renderedMask.getGraphics(); + g.translate(-bounds.getMinX(), -bounds.getMinY()); + AffineTransform imageTransform = new AffineTransform(at); + imageTransform.scale(1.0 / mask.getWidth(), -1.0 / mask.getHeight()); + imageTransform.translate(0, -mask.getHeight()); + g.drawImage(mask, imageTransform, null); + g.dispose(); + + // apply the mask + final int[] transparent = new int[4]; + int[] alphaPixel = null; + WritableRaster raster = renderedPaint.getRaster(); + WritableRaster alpha = renderedMask.getRaster(); + int h = renderedMask.getRaster().getHeight(); + int w = renderedMask.getRaster().getWidth(); + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + alphaPixel = alpha.getPixel(x, y, alphaPixel); + if (alphaPixel[0] == 255) + { + raster.setPixel(x, y, transparent); + } + } + } + + // draw the image + setClip(); + graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite()); + if (isContentRendered()) + { + graphics.drawImage(renderedPaint, + AffineTransform.getTranslateInstance(bounds.getMinX(), bounds.getMinY()), + null); + } + } + else + { + // fill the image with stenciled paint + BufferedImage image = pdImage.getStencilImage(getNonStrokingPaint()); + + // draw the image + drawBufferedImage(image, at); + } + } + else + { + if (subsamplingAllowed) + { + int subsampling = getSubsampling(pdImage, at); + // draw the subsampled image + drawBufferedImage(pdImage.getImage(null, subsampling), at); + } + else + { + // subsampling not allowed, draw the image + drawBufferedImage(pdImage.getImage(), at); + } + } + + if (!pdImage.getInterpolate()) + { + // JDK 1.7 has a bug where rendering hints are reset by the above call to + // the setRenderingHint method, so we re-set all hints, see PDFBOX-2302 + setRenderingHints(); + } + } + + /** + * Calculated the subsampling frequency for a given PDImage based on the current transformation + * and its calculated transform + * + * @param pdImage PDImage to be drawn + * @param at Transform that will be applied to the image when drawing + * @return The rounded-down ratio of image pixels to drawn pixels. Returned value will always be + * >=1. + */ + private int getSubsampling(PDImage pdImage, AffineTransform at) + { + // calculate subsampling according to the resulting image size + double scale = Math.abs(at.getDeterminant() * xform.getDeterminant()); + + int subsampling = (int) Math.floor(Math.sqrt(pdImage.getWidth() * pdImage.getHeight() / scale)); + if (subsampling > 8) + { + subsampling = 8; + } + if (subsampling < 1) + { + subsampling = 1; + } + if (subsampling > pdImage.getWidth() || subsampling > pdImage.getHeight()) + { + // For very small images it is possible that the subsampling would imply 0 size. + // To avoid problems, the subsampling is set to no less than the smallest dimension. + subsampling = Math.min(pdImage.getWidth(), pdImage.getHeight()); + } + return subsampling; + } + + private void drawBufferedImage(BufferedImage image, AffineTransform at) throws IOException + { + graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite()); + setClip(); + AffineTransform imageTransform = new AffineTransform(at); + PDSoftMask softMask = getGraphicsState().getSoftMask(); + if( softMask != null ) + { + imageTransform.scale(1, -1); + imageTransform.translate(0, -1); + Paint awtPaint = new TexturePaint(image, + new Rectangle2D.Double(imageTransform.getTranslateX(), imageTransform.getTranslateY(), + imageTransform.getScaleX(), imageTransform.getScaleY())); + awtPaint = applySoftMaskToPaint(awtPaint, softMask); + graphics.setPaint(awtPaint); + Rectangle2D unitRect = new Rectangle2D.Float(0, 0, 1, 1); + if (isContentRendered()) + { + graphics.fill(at.createTransformedShape(unitRect)); + } + } + else + { + COSBase transfer = getGraphicsState().getTransfer(); + if (transfer instanceof COSArray || transfer instanceof COSDictionary) + { + image = applyTransferFunction(image, transfer); + } + + int width = image.getWidth(); + int height = image.getHeight(); + imageTransform.scale(1.0 / width, -1.0 / height); + imageTransform.translate(0, -height); + if (isContentRendered()) + { + graphics.drawImage(image, imageTransform, null); + } + } + } + + private BufferedImage applyTransferFunction(BufferedImage image, COSBase transfer) throws IOException + { + BufferedImage bim; + if (image.getColorModel().hasAlpha()) + { + bim = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); + } + else + { + bim = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); + } + + // prepare transfer functions (either one per color or one for all) + // and maps (actually arrays[256] to be faster) to avoid calculating values several times + Integer rMap[], gMap[], bMap[]; + PDFunction rf, gf, bf; + if (transfer instanceof COSArray) + { + COSArray ar = (COSArray) transfer; + rf = PDFunction.create(ar.getObject(0)); + gf = PDFunction.create(ar.getObject(1)); + bf = PDFunction.create(ar.getObject(2)); + rMap = new Integer[256]; + gMap = new Integer[256]; + bMap = new Integer[256]; + } + else + { + rf = PDFunction.create(transfer); + gf = rf; + bf = rf; + rMap = new Integer[256]; + gMap = rMap; + bMap = rMap; + } + + // apply the transfer function to each color, but keep alpha + float[] input = new float[1]; + for (int x = 0; x < image.getWidth(); ++x) + { + for (int y = 0; y < image.getHeight(); ++y) + { + int rgb = image.getRGB(x, y); + int ri = (rgb >> 16) & 0xFF; + int gi = (rgb >> 8) & 0xFF; + int bi = rgb & 0xFF; + int ro, go, bo; + if (rMap[ri] != null) + { + ro = rMap[ri]; + } + else + { + input[0] = (ri & 0xFF) / 255f; + ro = (int) (rf.eval(input)[0] * 255); + rMap[ri] = ro; + } + if (gMap[gi] != null) + { + go = gMap[gi]; + } + else + { + input[0] = (gi & 0xFF) / 255f; + go = (int) (gf.eval(input)[0] * 255); + gMap[gi] = go; + } + if (bMap[bi] != null) + { + bo = bMap[bi]; + } + else + { + input[0] = (bi & 0xFF) / 255f; + bo = (int) (bf.eval(input)[0] * 255); + bMap[bi] = bo; + } + bim.setRGB(x, y, (rgb & 0xFF000000) | (ro << 16) | (go << 8) | bo); + } + } + return bim; + } + + @Override + public void shadingFill(COSName shadingName) throws IOException + { + PDShading shading = getResources().getShading(shadingName); + if (shading == null) + { + LOG.error("shading " + shadingName + " does not exist in resources dictionary"); + return; + } + Matrix ctm = getGraphicsState().getCurrentTransformationMatrix(); + Paint paint = shading.toPaint(ctm); + paint = applySoftMaskToPaint(paint, getGraphicsState().getSoftMask()); + + graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite()); + graphics.setPaint(paint); + graphics.setClip(null); + lastClip = null; + + // get the transformed BBox and intersect with current clipping path + // need to do it here and not in shading getRaster() because it may have been rotated + PDRectangle bbox = shading.getBBox(); + Area area; + if (bbox != null) + { + area = new Area(bbox.transform(ctm)); + area.intersect(getGraphicsState().getCurrentClippingPath()); + } + else + { + area = getGraphicsState().getCurrentClippingPath(); + } + if (isContentRendered()) + { + graphics.fill(area); + } + } + + @Override + public void showAnnotation(PDAnnotation annotation) throws IOException + { + lastClip = null; + int deviceType = -1; + if (graphics.getDeviceConfiguration() != null && + graphics.getDeviceConfiguration().getDevice() != null) + { + deviceType = graphics.getDeviceConfiguration().getDevice().getType(); + } + if (deviceType == GraphicsDevice.TYPE_PRINTER && !annotation.isPrinted()) + { + return; + } + if (deviceType == GraphicsDevice.TYPE_RASTER_SCREEN && annotation.isNoView()) + { + return; + } + if (annotation.isHidden()) + { + return; + } + if (annotation.isInvisible() && annotation instanceof PDAnnotationUnknown) + { + // "If set, do not display the annotation if it does not belong to one + // of the standard annotation types and no annotation handler is available." + return; + } + //TODO support NoZoom, example can be found in p5 of PDFBOX-2348 + + if (isHiddenOCG(annotation.getOptionalContent())) + { + return; + } + + PDAppearanceDictionary appearance = annotation.getAppearance(); + if (appearance == null || appearance.getNormalAppearance() == null) + { + // TODO: Improve memory consumption by passing a ScratchFile + annotation.constructAppearances(); + } + if (annotation.isNoRotate() && getCurrentPage().getRotation() != 0) + { + PDRectangle rect = annotation.getRectangle(); + AffineTransform savedTransform = graphics.getTransform(); + // "The upper-left corner of the annotation remains at the same point in + // default user space; the annotation pivots around that point." + graphics.rotate(Math.toRadians(getCurrentPage().getRotation()), + rect.getLowerLeftX(), rect.getUpperRightY()); + super.showAnnotation(annotation); + graphics.setTransform(savedTransform); + } + else + { + super.showAnnotation(annotation); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void showForm(PDFormXObject form) throws IOException + { + if (isContentRendered()) + { + super.showForm(form); + } + } + + @Override + public void showTransparencyGroup(PDTransparencyGroup form) throws IOException + { + if (!isContentRendered()) + { + return; + } + TransparencyGroup group + = new TransparencyGroup(form, false, getGraphicsState().getCurrentTransformationMatrix(), null); + BufferedImage image = group.getImage(); + if (image == null) + { + // image is empty, don't bother + return; + } + + graphics.setComposite(getGraphicsState().getNonStrokingJavaComposite()); + setClip(); + + // both the DPI xform and the CTM were already applied to the group, so all we do + // here is draw it directly onto the Graphics2D device at the appropriate position + PDRectangle bbox = group.getBBox(); + AffineTransform prev = graphics.getTransform(); + + Matrix m = new Matrix(xform); + float xScale = Math.abs(m.getScalingFactorX()); + float yScale = Math.abs(m.getScalingFactorY()); + + AffineTransform transform = new AffineTransform(xform); + transform.scale(1.0 / xScale, 1.0 / yScale); + graphics.setTransform(transform); + + // adjust bbox (x,y) position at the initial scale + cropbox + float x = bbox.getLowerLeftX() - pageSize.getLowerLeftX(); + float y = pageSize.getUpperRightY() - bbox.getUpperRightY(); + + if (flipTG) + { + graphics.translate(0, image.getHeight()); + graphics.scale(1, -1); + } + else + { + graphics.translate(x * xScale, y * yScale); + } + + PDSoftMask softMask = getGraphicsState().getSoftMask(); + if (softMask != null) + { + Paint awtPaint = new TexturePaint(image, + new Rectangle2D.Float(0, 0, image.getWidth(), image.getHeight())); + awtPaint = applySoftMaskToPaint(awtPaint, softMask); + graphics.setPaint(awtPaint); + if (isContentRendered()) + { + graphics.fill( + new Rectangle2D.Float(0, 0, bbox.getWidth() * xScale, bbox.getHeight() * yScale)); + } + } + else + { + if (isContentRendered()) + { + graphics.drawImage(image, null, null); + } + } + + graphics.setTransform(prev); + } + + /** + * Transparency group. + **/ + private final class TransparencyGroup + { + private final BufferedImage image; + private final PDRectangle bbox; + + private final int minX; + private final int minY; + private final int maxX; + private final int maxY; + private final int width; + private final int height; + private final float scaleX; + private final float scaleY; + + /** + * Creates a buffered image for a transparency group result. + * + * @param form the transparency group of the form or soft mask. + * @param isSoftMask true if this is a soft mask. + * @param ctm the relevant current transformation matrix. For soft masks, this is the CTM at + * the time the soft mask is set (not at the time the soft mask is used for fill/stroke!), + * for forms, this is the CTM at the time the form is invoked. + * @param backdropColor the color according to the /bc entry to be used for luminosity soft + * masks. + * @throws IOException + */ + private TransparencyGroup(PDTransparencyGroup form, boolean isSoftMask, Matrix ctm, + PDColor backdropColor) throws IOException + { + Graphics2D g2dOriginal = graphics; + Area lastClipOriginal = lastClip; + + // get the CTM x Form Matrix transform + Matrix transform = Matrix.concatenate(ctm, form.getMatrix()); + + // transform the bbox + GeneralPath transformedBox = form.getBBox().transform(transform); + + // clip the bbox to prevent giant bboxes from consuming all memory + Area clip = (Area)getGraphicsState().getCurrentClippingPath().clone(); + clip.intersect(new Area(transformedBox)); + Rectangle2D clipRect = clip.getBounds2D(); + Matrix m = new Matrix(xform); + scaleX = Math.abs(m.getScalingFactorX()); + scaleY = Math.abs(m.getScalingFactorY()); + if (clipRect.isEmpty()) + { + image = null; + bbox = null; + minX = 0; + minY = 0; + maxX = 0; + maxY = 0; + width = 0; + height = 0; + return; + } + this.bbox = new PDRectangle((float)clipRect.getX(), (float)clipRect.getY(), + (float)clipRect.getWidth(), (float)clipRect.getHeight()); + + // apply the underlying Graphics2D device's DPI transform + AffineTransform dpiTransform = AffineTransform.getScaleInstance(scaleX, scaleY); + Rectangle2D bounds = dpiTransform.createTransformedShape(clip.getBounds2D()).getBounds2D(); + + minX = (int) Math.floor(bounds.getMinX()); + minY = (int) Math.floor(bounds.getMinY()); + maxX = (int) Math.floor(bounds.getMaxX()) + 1; + maxY = (int) Math.floor(bounds.getMaxY()) + 1; + + width = maxX - minX; + height = maxY - minY; + + // FIXME - color space + if (isGray(form.getGroup().getColorSpace(form.getResources()))) + { + image = create2ByteGrayAlphaImage(width, height); + } + else + { + image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + } + + boolean needsBackdrop = !isSoftMask && !form.getGroup().isIsolated() && + hasBlendMode(form, new HashSet()); + BufferedImage backdropImage = null; + // Position of this group in parent group's coordinates + int backdropX = 0; + int backdropY = 0; + if (needsBackdrop) + { + if (transparencyGroupStack.isEmpty()) + { + // Use the current page as the parent group. + backdropImage = renderer.getPageImage(); + needsBackdrop = backdropImage != null; + backdropX = minX; + backdropY = (backdropImage != null) ? (backdropImage.getHeight() - maxY) : 0; + } + else + { + TransparencyGroup parentGroup = transparencyGroupStack.peek(); + backdropImage = parentGroup.image; + backdropX = minX - parentGroup.minX; + backdropY = parentGroup.maxY - maxY; + } + } + + Graphics2D g = image.createGraphics(); + if (needsBackdrop) + { + // backdropImage must be included in group image but not in group alpha. + g.drawImage(backdropImage, 0, 0, width, height, + backdropX, backdropY, backdropX + width, backdropY + height, null); + g = new GroupGraphics(image, g); + } + if (isSoftMask && backdropColor != null) + { + // "If the subtype is Luminosity, the transparency group XObject G shall be + // composited with a fully opaque backdrop whose colour is everywhere defined + // by the soft-mask dictionary's BC entry." + g.setBackground(new Color(backdropColor.toRGB())); + g.clearRect(0, 0, width, height); + } + + // flip y-axis + g.translate(0, image.getHeight()); + g.scale(1, -1); + + boolean oldFlipTG = flipTG; + flipTG = false; + + // apply device transform (DPI) + // the initial translation is ignored, because we're not writing into the initial graphics device + g.transform(dpiTransform); + + AffineTransform xformOriginal = xform; + xform = AffineTransform.getScaleInstance(scaleX, scaleY); + PDRectangle pageSizeOriginal = pageSize; + pageSize = new PDRectangle(minX / scaleX, + minY / scaleY, + (float) bounds.getWidth() / scaleX, + (float) bounds.getHeight() / scaleY); + int clipWindingRuleOriginal = clipWindingRule; + clipWindingRule = -1; + GeneralPath linePathOriginal = linePath; + linePath = new GeneralPath(); + + // adjust the origin + g.translate(-clipRect.getX(), -clipRect.getY()); + + graphics = g; + setRenderingHints(); + try + { + if (isSoftMask) + { + processSoftMask(form); + } + else + { + transparencyGroupStack.push(this); + processTransparencyGroup(form); + if (!transparencyGroupStack.isEmpty()) + { + transparencyGroupStack.pop(); + } + } + } + finally + { + flipTG = oldFlipTG; + lastClip = lastClipOriginal; + graphics.dispose(); + graphics = g2dOriginal; + clipWindingRule = clipWindingRuleOriginal; + linePath = linePathOriginal; + pageSize = pageSizeOriginal; + xform = xformOriginal; + } + + if (needsBackdrop) + { + ((GroupGraphics) g).removeBackdrop(backdropImage, backdropX, backdropY); + } + } + + // http://stackoverflow.com/a/21181943/535646 + private BufferedImage create2ByteGrayAlphaImage(int width, int height) + { + /** + * gray + alpha + */ + int[] bandOffsets = new int[] {1, 0}; + int bands = bandOffsets.length; + + /** + * Color Model used for raw GRAY + ALPHA + */ + final ColorModel CM_GRAY_ALPHA + = new ComponentColorModel( + ColorSpace.getInstance(ColorSpace.CS_GRAY), + true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); + + // Init data buffer of type byte + DataBuffer buffer = new DataBufferByte(width * height * bands); + + // Wrap the data buffer in a raster + WritableRaster raster = + Raster.createInterleavedRaster(buffer, width, height, + width * bands, bands, bandOffsets, new Point(0, 0)); + + // Create a custom BufferedImage with the raster and a suitable color model + return new BufferedImage(CM_GRAY_ALPHA, raster, false, null); + } + + private boolean isGray(PDColorSpace colorSpace) + { + if (colorSpace instanceof PDDeviceGray) + { + return true; + } + if (colorSpace instanceof PDICCBased) + { + try + { + return ((PDICCBased) colorSpace).getAlternateColorSpace() instanceof PDDeviceGray; + } + catch (IOException ex) + { + LOG.debug("Couldn't get an alternate ColorSpace", ex); + return false; + } + } + return false; + } + + public BufferedImage getImage() + { + return image; + } + + public PDRectangle getBBox() + { + return bbox; + } + + public Rectangle2D getBounds() + { + Point2D size = new Point2D.Double(pageSize.getWidth(), pageSize.getHeight()); + // apply the underlying Graphics2D device's DPI transform and y-axis flip + AffineTransform dpiTransform = AffineTransform.getScaleInstance(scaleX, scaleY); + size = dpiTransform.transform(size, size); + // Flip y + return new Rectangle2D.Double(minX - pageSize.getLowerLeftX() * scaleX, + size.getY() - minY - height + pageSize.getLowerLeftY() * scaleY, + width, height); + } + } + + private boolean hasBlendMode(PDTransparencyGroup group, Set groupsDone) + { + if (groupsDone.contains(group.getCOSObject())) + { + // The group was already processed. Avoid endless recursion. + return false; + } + groupsDone.add(group.getCOSObject()); + + PDResources resources = group.getResources(); + if (resources == null) + { + return false; + } + for (COSName name : resources.getExtGStateNames()) + { + PDExtendedGraphicsState extGState = resources.getExtGState(name); + if (extGState == null) + { + continue; + } + BlendMode blendMode = extGState.getBlendMode(); + if (blendMode != BlendMode.NORMAL) + { + return true; + } + } + + // Recursively process nested transparency groups + for (COSName name : resources.getXObjectNames()) + { + PDXObject xObject; + try + { + xObject = resources.getXObject(name); + } + catch (IOException ex) + { + continue; + } + if (xObject instanceof PDTransparencyGroup && + hasBlendMode((PDTransparencyGroup)xObject, groupsDone)) + { + return true; + } + } + + return false; + } + + /** + * {@inheritDoc} + */ + @Override + public void beginMarkedContentSequence(COSName tag, COSDictionary properties) + { + if (nestedHiddenOCGCount > 0) + { + nestedHiddenOCGCount++; + return; + } + if (tag == null || getPage().getResources() == null) + { + return; + } + if (isHiddenOCG(getPage().getResources().getProperties(tag))) + { + nestedHiddenOCGCount = 1; + } + } + + /** + * {@inheritDoc} + */ + @Override + public void endMarkedContentSequence() + { + if (nestedHiddenOCGCount > 0) + { + nestedHiddenOCGCount--; + } + } + + private boolean isContentRendered() + { + return nestedHiddenOCGCount <= 0; + } + + private boolean isHiddenOCG(PDPropertyList propertyList) + { + if (propertyList instanceof PDOptionalContentGroup) + { + PDOptionalContentGroup group = (PDOptionalContentGroup) propertyList; + RenderState printState = group.getRenderState(destination); + if (printState == null) + { + if (!getRenderer().isGroupEnabled(group)) + { + return true; + } + } + else if (RenderState.OFF.equals(printState)) + { + return true; + } + } + else if (propertyList instanceof PDOptionalContentMembershipDictionary) + { + return isHiddenOCMD((PDOptionalContentMembershipDictionary) propertyList); + } + return false; + } + + private boolean isHiddenOCMD(PDOptionalContentMembershipDictionary ocmd) + { + if (ocmd.getCOSObject().getCOSArray(COSName.VE) != null) + { + // support seems to be optional, and is approximated by /P and /OCGS + LOG.info("/VE entry ignored in Optional Content Membership Dictionary"); + } + List visibles = new ArrayList<>(); + for (PDPropertyList prop : ocmd.getOCGs()) + { + visibles.add(!isHiddenOCG(prop)); + } + COSName visibilityPolicy = ocmd.getVisibilityPolicy(); + if (COSName.ANY_OFF.equals(visibilityPolicy)) + { + for (boolean visible : visibles) + { + if (!visible) + { + return true; + } + } + return false; + } + if (COSName.ALL_ON.equals(visibilityPolicy)) + { + for (boolean visible : visibles) + { + if (!visible) + { + return true; + } + } + return false; + } + if (COSName.ALL_OFF.equals(visibilityPolicy)) + { + for (boolean visible : visibles) + { + if (visible) + { + return false; + } + } + return true; + } + // AnyOn is default + for (boolean visible : visibles) + { + if (visible) + { + return false; + } + } + return true; + } + + private static int getJavaVersion() + { + // strategy from lucene-solr/lucene/core/src/java/org/apache/lucene/util/Constants.java + String version = System.getProperty("java.specification.version"); + final StringTokenizer st = new StringTokenizer(version, "."); + try + { + int major = Integer.parseInt(st.nextToken()); + int minor = 0; + if (st.hasMoreTokens()) + { + minor = Integer.parseInt(st.nextToken()); + } + return major == 1 ? minor : major; + } + catch (NumberFormatException nfe) + { + // maybe some new numbering scheme in the 22nd century + return 0; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java new file mode 100644 index 00000000000..31cd8d09d13 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.rendering; + +import java.awt.RenderingHints; + +import org.apache.pdfbox.pdmodel.PDPage; + +/** + * Parameters for a PageDrawer. This class ensures allows PDFRenderer and PageDrawer to share + * private implementation data in a future-proof manner, while still allowing end-users to create + * their own subclasses of PageDrawer. + * + * @author John Hewson + */ +public final class PageDrawerParameters +{ + private final PDFRenderer renderer; + private final PDPage page; + private final boolean subsamplingAllowed; + private final RenderDestination destination; + private final RenderingHints renderingHints; + + /** + * Package-private constructor. + */ + PageDrawerParameters(PDFRenderer renderer, PDPage page, boolean subsamplingAllowed, + RenderDestination destination, RenderingHints renderingHints) + { + this.renderer = renderer; + this.page = page; + this.subsamplingAllowed = subsamplingAllowed; + this.destination = destination; + this.renderingHints = renderingHints; + } + + /** + * Returns the page. + */ + public PDPage getPage() + { + return page; + } + + /** + * Returns the renderer. + */ + PDFRenderer getRenderer() + { + return renderer; + } + + /** + * Returns whether to allow subsampling of images. + */ + public boolean isSubsamplingAllowed() + { + return subsamplingAllowed; + } + + /** + * @return the destination + */ + public RenderDestination getDestination() + { + return this.destination; + } + + /** + * @return the rendering hints. + */ + public RenderingHints getRenderingHints() + { + return renderingHints; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/RenderDestination.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/RenderDestination.java new file mode 100644 index 00000000000..455d393cf58 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/RenderDestination.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.rendering; + +/** + * Optional content groups are visible depending on the render purpose. + */ +public enum RenderDestination +{ + /** graphics export */ + EXPORT, + /** viewing */ + VIEW, + /** printing */ + PRINT +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/SoftMask.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/SoftMask.java new file mode 100644 index 00000000000..9fb8498e313 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/SoftMask.java @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.rendering; + +import java.awt.Color; +import java.awt.Paint; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; +import java.io.IOException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.pdmodel.common.function.PDFunction; +import org.apache.pdfbox.pdmodel.common.function.PDFunctionTypeIdentity; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; + +/** + * A Paint which applies a soft mask to an underlying Paint. + * + * @author Petr Slaby + * @author John Hewson + * @author Matthias Bläsing + * @author Tilman Hausherr + */ +class SoftMask implements Paint +{ + + private static final Log LOG = LogFactory.getLog(SoftMask.class); + + private static final ColorModel ARGB_COLOR_MODEL = + new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).getColorModel(); + + private final Paint paint; + private final BufferedImage mask; + private final Rectangle2D bboxDevice; + private int bc = 0; + private final PDFunction transferFunction; + + /** + * Creates a new soft mask paint. + * + * @param paint underlying paint. + * @param mask soft mask + * @param bboxDevice bbox of the soft mask in the underlying Graphics2D device space + * @param backdropColor the color to be used outside the transparency group’s bounding box; if + * null, black will be used. + * @param transferFunction the transfer function, may be null. + */ + SoftMask(Paint paint, BufferedImage mask, Rectangle2D bboxDevice, PDColor backdropColor, PDFunction transferFunction) + { + this.paint = paint; + this.mask = mask; + this.bboxDevice = bboxDevice; + if (transferFunction instanceof PDFunctionTypeIdentity) + { + this.transferFunction = null; + } + else + { + this.transferFunction = transferFunction; + } + if (backdropColor != null) + { + try + { + Color color = new Color(backdropColor.toRGB()); + // http://stackoverflow.com/a/25463098/535646 + bc = (299 * color.getRed() + 587 * color.getGreen() + 114 * color.getBlue()) / 1000; + } + catch (IOException ex) + { + // keep default + LOG.debug("Couldn't convert backdropColor to RGB - keeping default", ex); + } + } + } + + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, + Rectangle2D userBounds, AffineTransform xform, + RenderingHints hints) + { + PaintContext ctx = paint.createContext(cm, deviceBounds, userBounds, xform, hints); + return new SoftPaintContext(ctx); + } + + @Override + public int getTransparency() + { + return TRANSLUCENT; + } + + private class SoftPaintContext implements PaintContext + { + private final PaintContext context; + + SoftPaintContext(PaintContext context) + { + this.context = context; + } + + @Override + public ColorModel getColorModel() + { + return ARGB_COLOR_MODEL; + } + + @Override + public Raster getRaster(int x1, int y1, int w, int h) + { + Raster raster = context.getRaster(x1, y1, w, h); + ColorModel rasterCM = context.getColorModel(); + float[] input = null; + Float[] map = null; + + if (transferFunction != null) + { + map = new Float[256]; + input = new float[1]; + } + + // buffer + WritableRaster output = getColorModel().createCompatibleWritableRaster(w, h); + + // the soft mask has its own bbox + x1 = x1 - (int)bboxDevice.getX(); + y1 = y1 - (int)bboxDevice.getY(); + + int[] gray = new int[4]; + Object pixelInput = null; + int[] pixelOutput = new int[4]; + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + pixelInput = raster.getDataElements(x, y, pixelInput); + + pixelOutput[0] = rasterCM.getRed(pixelInput); + pixelOutput[1] = rasterCM.getGreen(pixelInput); + pixelOutput[2] = rasterCM.getBlue(pixelInput); + pixelOutput[3] = rasterCM.getAlpha(pixelInput); + + // get the alpha value from the gray mask, if within mask bounds + gray[0] = 0; + if (x1 + x >= 0 && y1 + y >= 0 && x1 + x < mask.getWidth() && y1 + y < mask.getHeight()) + { + mask.getRaster().getPixel(x1 + x, y1 + y, gray); + int g = gray[0]; + if (transferFunction != null) + { + // apply transfer function + try + { + if (map[g] != null) + { + // was calculated before + pixelOutput[3] = Math.round(pixelOutput[3] * map[g]); + } + else + { + // calculate and store in map + input[0] = g / 255f; + float f = transferFunction.eval(input)[0]; + map[g] = f; + pixelOutput[3] = Math.round(pixelOutput[3] * f); + } + } + catch (IOException ex) + { + // ignore exception, treat as outside + LOG.debug("Couldn't apply transferFunction - treating as outside", ex); + pixelOutput[3] = Math.round(pixelOutput[3] * (bc / 255f)); + } + } + else + { + pixelOutput[3] = Math.round(pixelOutput[3] * (g / 255f)); + } + } + else + { + pixelOutput[3] = Math.round(pixelOutput[3] * (bc / 255f)); + } + output.setPixel(x, y, pixelOutput); + } + } + + return output; + } + + @Override + public void dispose() + { + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java new file mode 100644 index 00000000000..2fda626d57c --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaint.java @@ -0,0 +1,242 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.PaintContext; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.TexturePaint; +import java.awt.Transparency; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; +import org.apache.pdfbox.util.Matrix; + +/** + * AWT Paint for a tiling pattern, which consists of a small repeating graphical figure. + * + * @author John Hewson + */ +class TilingPaint implements Paint +{ + private static final Log LOG = LogFactory.getLog(TilingPaint.class); + private final Paint paint; + private final Matrix patternMatrix; + private static final int MAXEDGE; + private static final String DEFAULTMAXEDGE = "3000"; + + static + { + String s = System.getProperty("pdfbox.rendering.tilingpaint.maxedge", DEFAULTMAXEDGE); + int val; + try + { + val = Integer.parseInt(s); + } + catch (NumberFormatException ex) + { + LOG.error("Default will be used", ex); + val = Integer.parseInt(DEFAULTMAXEDGE); + } + MAXEDGE = val; + } + + /** + * Creates a new colored tiling Paint, i.e. one that has its own colors. + * + * @param drawer renderer to render the page + * @param pattern tiling pattern dictionary + * @param xform device scale transform + * + * @throws java.io.IOException if something goes wrong while drawing the pattern + */ + TilingPaint(PageDrawer drawer, PDTilingPattern pattern, AffineTransform xform) + throws IOException + { + this(drawer, pattern, null, null, xform); + } + + /** + * Creates a new tiling Paint. The parameters color and colorSpace must be null for a colored + * tiling Paint (because it has its own colors), and non null for an uncolored tiling Paint. + * + * @param drawer renderer to render the page + * @param pattern tiling pattern dictionary + * @param colorSpace color space for this tiling + * @param color color for this tiling + * @param xform device scale transform + * + * @throws java.io.IOException if something goes wrong while drawing the pattern + */ + TilingPaint(PageDrawer drawer, PDTilingPattern pattern, PDColorSpace colorSpace, + PDColor color, AffineTransform xform) throws IOException + { + // pattern space -> user space + patternMatrix = Matrix.concatenate(drawer.getInitialMatrix(), pattern.getMatrix()); + Rectangle2D anchorRect = getAnchorRect(pattern); + paint = new TexturePaint(getImage(drawer, pattern, colorSpace, color, xform, anchorRect), anchorRect); + } + + /** + * Not called in TexturePaint subclasses, which is why we wrap TexturePaint. + */ + @Override + public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, + AffineTransform xform, RenderingHints hints) + { + AffineTransform xformPattern = (AffineTransform)xform.clone(); + + // applies the pattern matrix with scaling removed + AffineTransform patternNoScale = patternMatrix.createAffineTransform(); + patternNoScale.scale(1 / patternMatrix.getScalingFactorX(), + 1 / patternMatrix.getScalingFactorY()); + xformPattern.concatenate(patternNoScale); + + return paint.createContext(cm, deviceBounds, userBounds, xformPattern, hints); + } + + /** + * Returns the pattern image in parent stream coordinates. + */ + private BufferedImage getImage(PageDrawer drawer, PDTilingPattern pattern, PDColorSpace colorSpace, + PDColor color, AffineTransform xform, Rectangle2D anchorRect) throws IOException + { + float width = (float) Math.abs(anchorRect.getWidth()); + float height = (float) Math.abs(anchorRect.getHeight()); + + // device scale transform (i.e. DPI) (see PDFBOX-1466.pdf) + Matrix xformMatrix = new Matrix(xform); + float xScale = Math.abs(xformMatrix.getScalingFactorX()); + float yScale = Math.abs(xformMatrix.getScalingFactorY()); + width *= xScale; + height *= yScale; + + int rasterWidth = Math.max(1, ceiling(width)); + int rasterHeight = Math.max(1, ceiling(height)); + + BufferedImage image = new BufferedImage(rasterWidth, rasterHeight, BufferedImage.TYPE_INT_ARGB); + + Graphics2D graphics = image.createGraphics(); + + // flip a -ve YStep around its own axis (see gs-bugzilla694385.pdf) + if (pattern.getYStep() < 0) + { + graphics.translate(0, rasterHeight); + graphics.scale(1, -1); + } + + // flip a -ve XStep around its own axis + if (pattern.getXStep() < 0) + { + graphics.translate(rasterWidth, 0); + graphics.scale(-1, 1); + } + + // device scale transform (i.e. DPI) + graphics.scale(xScale, yScale); + + // apply only the scaling from the pattern transform, doing scaling here improves the + // image quality and prevents large scale-down factors from creating huge tiling cells. + Matrix newPatternMatrix; + newPatternMatrix = Matrix.getScaleInstance( + Math.abs(patternMatrix.getScalingFactorX()), + Math.abs(patternMatrix.getScalingFactorY())); + + // move origin to (0,0) + newPatternMatrix.concatenate( + Matrix.getTranslateInstance(-pattern.getBBox().getLowerLeftX(), + -pattern.getBBox().getLowerLeftY())); + + // render using PageDrawer + drawer.drawTilingPattern(graphics, pattern, colorSpace, color, newPatternMatrix); + graphics.dispose(); + + return image; + } + + /** + * Returns the closest integer which is larger than the given number. + * Uses BigDecimal to avoid floating point error which would cause gaps in the tiling. + */ + private static int ceiling(double num) + { + BigDecimal decimal = new BigDecimal(num); + decimal = decimal.setScale(5, RoundingMode.CEILING); // 5 decimal places of accuracy + return decimal.intValue(); + } + + @Override + public int getTransparency() + { + return Transparency.TRANSLUCENT; + } + + /** + * Returns the anchor rectangle, which includes the XStep/YStep and scaling. + */ + private Rectangle2D getAnchorRect(PDTilingPattern pattern) + { + float xStep = pattern.getXStep(); + if (Float.compare(xStep, 0) == 0) + { + xStep = pattern.getBBox().getWidth(); + } + + float yStep = pattern.getYStep(); + if (Float.compare(yStep, 0) == 0) + { + yStep = pattern.getBBox().getHeight(); + } + + float xScale = patternMatrix.getScalingFactorX(); + float yScale = patternMatrix.getScalingFactorY(); + float width = xStep * xScale; + float height = yStep * yScale; + + if (Math.abs(width * height) > MAXEDGE * MAXEDGE) + { + // PDFBOX-3653: prevent huge sizes + LOG.info("Pattern surface is too large, will be clipped"); + LOG.info("width: " + width + ", height: " + height); + LOG.info("XStep: " + xStep + ", YStep: " + yStep); + LOG.info("bbox: " + pattern.getBBox()); + LOG.info("pattern matrix: " + pattern.getMatrix()); + LOG.info("concatenated matrix: " + patternMatrix); + width = Math.min(MAXEDGE, Math.abs(width)) * Math.signum(width); + height = Math.min(MAXEDGE, Math.abs(height)) * Math.signum(height); + //TODO better solution needed + } + + // returns the anchor rect with scaling applied + PDRectangle anchor = pattern.getBBox(); + return new Rectangle2D.Float(anchor.getLowerLeftX() * xScale, + anchor.getLowerLeftY() * yScale, + width, height); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaintFactory.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaintFactory.java new file mode 100644 index 00000000000..5ae4d102c20 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/TilingPaintFactory.java @@ -0,0 +1,164 @@ +/* + * Copyright 2017 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.rendering; + +import java.awt.Paint; +import java.awt.geom.AffineTransform; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.util.Map; +import java.util.WeakHashMap; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.pdmodel.graphics.color.PDColor; +import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace; +import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; +import org.apache.pdfbox.util.Matrix; + +/** + * Factory class to cache TilingPaint generation. + * + * @author Tilman Hausherr + */ +class TilingPaintFactory +{ + private static final Log LOG = LogFactory.getLog(TilingPaintFactory.class); + + private final PageDrawer drawer; + private final Map> weakCache + = new WeakHashMap<>(); + + TilingPaintFactory(PageDrawer drawer) + { + this.drawer = drawer; + } + + Paint create(PDTilingPattern pattern, PDColorSpace colorSpace, + PDColor color, AffineTransform xform) throws IOException + { + Paint paint = null; + TilingPaintParameter tilingPaintParameter + = new TilingPaintParameter(drawer.getInitialMatrix(), pattern.getCOSObject(), colorSpace, color, xform); + WeakReference weakRef = weakCache.get(tilingPaintParameter); + if (weakRef != null) + { + // PDFBOX-4058: additional WeakReference makes gc work better + paint = weakRef.get(); + } + if (paint == null) + { + paint = new TilingPaint(drawer, pattern, colorSpace, color, xform); + weakCache.put(tilingPaintParameter, new WeakReference<>(paint)); + } + return paint; + } + + // class to characterize a TilingPaint object. It is important that TilingPaint does not + // keep any objects from this class, so that the weak cache works. + private static class TilingPaintParameter + { + private final Matrix matrix; + private final COSDictionary patternDict; + private final PDColorSpace colorSpace; + private final PDColor color; + private final AffineTransform xform; + + private TilingPaintParameter(Matrix matrix, COSDictionary patternDict, PDColorSpace colorSpace, + PDColor color, AffineTransform xform) + { + this.matrix = matrix.clone(); + this.patternDict = patternDict; + this.colorSpace = colorSpace; + this.color = color; + this.xform = xform; + } + + // this may not catch all equals, but at least those related to one resource dictionary. + // it isn't needed to investigate further because matrix or transform would be different anyway. + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (!(obj instanceof TilingPaintParameter)) + { + return false; + } + final TilingPaintParameter other = (TilingPaintParameter) obj; + if (this.matrix != other.matrix && (this.matrix == null || !this.matrix.equals(other.matrix))) + { + return false; + } + if (this.patternDict != other.patternDict && (this.patternDict == null || !this.patternDict.equals(other.patternDict))) + { + return false; + } + if (this.colorSpace != other.colorSpace && (this.colorSpace == null || !this.colorSpace.equals(other.colorSpace))) + { + return false; + } + if (this.color == null && other.color != null) + { + return false; + } + if (this.color != null && other.color == null) + { + return false; + } + if (this.color != null && this.color.getColorSpace() != other.color.getColorSpace()) + { + return false; + } + try + { + if (this.color != other.color && this.color.toRGB() != other.color.toRGB()) + { + return false; + } + } + catch (IOException ex) + { + LOG.debug("Couldn't convert color to RGB - treating as not equal", ex); + return false; + } + return !(this.xform != other.xform && (this.xform == null || !this.xform.equals(other.xform))); + } + + @Override + public int hashCode() + { + int hash = 7; + hash = 23 * hash + (this.matrix != null ? this.matrix.hashCode() : 0); + hash = 23 * hash + (this.patternDict != null ? this.patternDict.hashCode() : 0); + hash = 23 * hash + (this.colorSpace != null ? this.colorSpace.hashCode() : 0); + hash = 23 * hash + (this.color != null ? this.color.hashCode() : 0); + hash = 23 * hash + (this.xform != null ? this.xform.hashCode() : 0); + return hash; + } + + @Override + public String toString() + { + return "TilingPaintParameter{" + "matrix=" + matrix + ", pattern=" + patternDict + + ", colorSpace=" + colorSpace + ", color=" + color + ", xform=" + xform + '}'; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java b/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java new file mode 100644 index 00000000000..ebb5b312a1b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java @@ -0,0 +1,349 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.text; + +import java.io.InputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.contentstream.PDFStreamEngine; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.font.encoding.GlyphList; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDCIDFont; +import org.apache.pdfbox.pdmodel.font.PDCIDFontType2; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDSimpleFont; +import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDType3Font; +import org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState; + +import java.io.IOException; + +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.fontbox.util.BoundingBox; +import org.apache.pdfbox.util.Matrix; +import org.apache.pdfbox.util.Vector; +import org.apache.pdfbox.contentstream.operator.DrawObject; +import org.apache.pdfbox.contentstream.operator.state.Concatenate; +import org.apache.pdfbox.contentstream.operator.state.Restore; +import org.apache.pdfbox.contentstream.operator.state.Save; +import org.apache.pdfbox.contentstream.operator.state.SetGraphicsStateParameters; +import org.apache.pdfbox.contentstream.operator.state.SetMatrix; +import org.apache.pdfbox.contentstream.operator.text.BeginText; +import org.apache.pdfbox.contentstream.operator.text.EndText; +import org.apache.pdfbox.contentstream.operator.text.SetFontAndSize; +import org.apache.pdfbox.contentstream.operator.text.SetTextHorizontalScaling; +import org.apache.pdfbox.contentstream.operator.text.ShowTextAdjusted; +import org.apache.pdfbox.contentstream.operator.text.ShowTextLine; +import org.apache.pdfbox.contentstream.operator.text.ShowTextLineAndSpace; +import org.apache.pdfbox.contentstream.operator.text.MoveText; +import org.apache.pdfbox.contentstream.operator.text.MoveTextSetLeading; +import org.apache.pdfbox.contentstream.operator.text.NextLine; +import org.apache.pdfbox.contentstream.operator.text.SetCharSpacing; +import org.apache.pdfbox.contentstream.operator.text.SetTextLeading; +import org.apache.pdfbox.contentstream.operator.text.SetTextRenderingMode; +import org.apache.pdfbox.contentstream.operator.text.SetTextRise; +import org.apache.pdfbox.contentstream.operator.text.SetWordSpacing; +import org.apache.pdfbox.contentstream.operator.text.ShowText; +import org.apache.pdfbox.pdmodel.font.PDFontDescriptor; + +/** + * LEGACY text calculations which are known to be incorrect but are depended on by PDFTextStripper. + * + * This class exists only so that we don't break the code of users who have their own subclasses + * of PDFTextStripper. It replaces the good implementation of showGlyph in PDFStreamEngine, with + * a bad implementation which is backwards compatible. + * + * DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper. + * THIS CODE IS DELIBERATELY INCORRECT, USE PDFStreamEngine INSTEAD. + */ +class LegacyPDFStreamEngine extends PDFStreamEngine +{ + private static final Log LOG = LogFactory.getLog(LegacyPDFStreamEngine.class); + + private int pageRotation; + private PDRectangle pageSize; + private Matrix translateMatrix; + private final GlyphList glyphList; + + /** + * Constructor. + */ + LegacyPDFStreamEngine() throws IOException + { + addOperator(new BeginText()); + addOperator(new Concatenate()); + addOperator(new DrawObject()); // special text version + addOperator(new EndText()); + addOperator(new SetGraphicsStateParameters()); + addOperator(new Save()); + addOperator(new Restore()); + addOperator(new NextLine()); + addOperator(new SetCharSpacing()); + addOperator(new MoveText()); + addOperator(new MoveTextSetLeading()); + addOperator(new SetFontAndSize()); + addOperator(new ShowText()); + addOperator(new ShowTextAdjusted()); + addOperator(new SetTextLeading()); + addOperator(new SetMatrix()); + addOperator(new SetTextRenderingMode()); + addOperator(new SetTextRise()); + addOperator(new SetWordSpacing()); + addOperator(new SetTextHorizontalScaling()); + addOperator(new ShowTextLine()); + addOperator(new ShowTextLineAndSpace()); + + // load additional glyph list for Unicode mapping + String path = "/org/apache/pdfbox/resources/glyphlist/additional.txt"; + try (InputStream input = GlyphList.class.getResourceAsStream(path)) + { + glyphList = new GlyphList(GlyphList.getAdobeGlyphList(), input); + } + } + + /** + * This will initialize and process the contents of the stream. + * + * @param page the page to process + * @throws java.io.IOException if there is an error accessing the stream. + */ + @Override + public void processPage(PDPage page) throws IOException + { + this.pageRotation = page.getRotation(); + this.pageSize = page.getCropBox(); + + if (Float.compare(pageSize.getLowerLeftX(), 0) == 0 && Float.compare(pageSize.getLowerLeftY(), 0) == 0) + { + translateMatrix = null; + } + else + { + // translation matrix for cropbox + translateMatrix = Matrix.getTranslateInstance(-pageSize.getLowerLeftX(), -pageSize.getLowerLeftY()); + } + super.processPage(page); + } + + /** + * This method was originally written by Ben Litchfield for PDFStreamEngine. + */ + @Override + protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode, + Vector displacement) throws IOException + { + // + // legacy calculations which were previously in PDFStreamEngine + // + // DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper. + // THIS CODE IS DELIBERATELY INCORRECT + // + + PDGraphicsState state = getGraphicsState(); + Matrix ctm = state.getCurrentTransformationMatrix(); + float fontSize = state.getTextState().getFontSize(); + float horizontalScaling = state.getTextState().getHorizontalScaling() / 100f; + Matrix textMatrix = getTextMatrix(); + + BoundingBox bbox = font.getBoundingBox(); + if (bbox.getLowerLeftY() < Short.MIN_VALUE) + { + // PDFBOX-2158 and PDFBOX-3130 + // files by Salmat eSolutions / ClibPDF Library + bbox.setLowerLeftY(- (bbox.getLowerLeftY() + 65536)); + } + // 1/2 the bbox is used as the height todo: why? + float glyphHeight = bbox.getHeight() / 2; + + // sometimes the bbox has very high values, but CapHeight is OK + PDFontDescriptor fontDescriptor = font.getFontDescriptor(); + if (fontDescriptor != null) + { + float capHeight = fontDescriptor.getCapHeight(); + if (Float.compare(capHeight, 0) != 0 && + (capHeight < glyphHeight || Float.compare(glyphHeight, 0) == 0)) + { + glyphHeight = capHeight; + } + // PDFBOX-3464, PDFBOX-4480, PDFBOX-4553: + // sometimes even CapHeight has very high value, but Ascent and Descent are ok + float ascent = fontDescriptor.getAscent(); + float descent = fontDescriptor.getDescent(); + if (capHeight > ascent && ascent > 0 && descent < 0 && + ((ascent - descent) / 2 < glyphHeight || Float.compare(glyphHeight, 0) == 0)) + { + glyphHeight = (ascent - descent) / 2; + } + } + + // transformPoint from glyph space -> text space + float height; + if (font instanceof PDType3Font) + { + height = font.getFontMatrix().transformPoint(0, glyphHeight).y; + } + else + { + height = glyphHeight / 1000; + } + + float displacementX = displacement.getX(); + // the sorting algorithm is based on the width of the character. As the displacement + // for vertical characters doesn't provide any suitable value for it, we have to + // calculate our own + if (font.isVertical()) + { + displacementX = font.getWidth(code) / 1000; + // there may be an additional scaling factor for true type fonts + TrueTypeFont ttf = null; + if (font instanceof PDTrueTypeFont) + { + ttf = ((PDTrueTypeFont)font).getTrueTypeFont(); + } + else if (font instanceof PDType0Font) + { + PDCIDFont cidFont = ((PDType0Font)font).getDescendantFont(); + if (cidFont instanceof PDCIDFontType2) + { + ttf = ((PDCIDFontType2)cidFont).getTrueTypeFont(); + } + } + if (ttf != null && ttf.getUnitsPerEm() != 1000) + { + displacementX *= 1000f / ttf.getUnitsPerEm(); + } + } + + // + // legacy calculations which were previously in PDFStreamEngine + // + // DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper. + // THIS CODE IS DELIBERATELY INCORRECT + // + + // (modified) combined displacement, this is calculated *without* taking the character + // spacing and word spacing into account, due to legacy code in TextStripper + float tx = displacementX * fontSize * horizontalScaling; + float ty = displacement.getY() * fontSize; + + // (modified) combined displacement matrix + Matrix td = Matrix.getTranslateInstance(tx, ty); + + // (modified) text rendering matrix + Matrix nextTextRenderingMatrix = td.multiply(textMatrix).multiply(ctm); // text space -> device space + float nextX = nextTextRenderingMatrix.getTranslateX(); + float nextY = nextTextRenderingMatrix.getTranslateY(); + + // (modified) width and height calculations + float dxDisplay = nextX - textRenderingMatrix.getTranslateX(); + float dyDisplay = height * textRenderingMatrix.getScalingFactorY(); + + // + // start of the original method + // + + // Note on variable names. There are three different units being used in this code. + // Character sizes are given in glyph units, text locations are initially given in text + // units, and we want to save the data in display units. The variable names should end with + // Text or Disp to represent if the values are in text or disp units (no glyph units are + // saved). + + float glyphSpaceToTextSpaceFactor = 1 / 1000f; + if (font instanceof PDType3Font) + { + glyphSpaceToTextSpaceFactor = font.getFontMatrix().getScaleX(); + } + + float spaceWidthText = 0; + try + { + // to avoid crash as described in PDFBOX-614, see what the space displacement should be + spaceWidthText = font.getSpaceWidth() * glyphSpaceToTextSpaceFactor; + } + catch (Exception exception) + { + LOG.warn(exception, exception); + } + + if (Float.compare(spaceWidthText, 0) == 0) + { + spaceWidthText = font.getAverageFontWidth() * glyphSpaceToTextSpaceFactor; + // the average space width appears to be higher than necessary so make it smaller + spaceWidthText *= .80f; + } + if (Float.compare(spaceWidthText, 0) == 0) + { + spaceWidthText = 1.0f; // if could not find font, use a generic value + } + + // the space width has to be transformed into display units + float spaceWidthDisplay = spaceWidthText * textRenderingMatrix.getScalingFactorX(); + + // use our additional glyph list for Unicode mapping + unicode = font.toUnicode(code, glyphList); + + // when there is no Unicode mapping available, Acrobat simply coerces the character code + // into Unicode, so we do the same. Subclasses of PDFStreamEngine don't necessarily want + // this, which is why we leave it until this point in PDFTextStreamEngine. + if (unicode == null) + { + if (font instanceof PDSimpleFont) + { + char c = (char) code; + unicode = new String(new char[] { c }); + } + else + { + // Acrobat doesn't seem to coerce composite font's character codes, instead it + // skips them. See the "allah2.pdf" TestTextStripper file. + return; + } + } + + // adjust for cropbox if needed + Matrix translatedTextRenderingMatrix; + if (translateMatrix == null) + { + translatedTextRenderingMatrix = textRenderingMatrix; + } + else + { + translatedTextRenderingMatrix = Matrix.concatenate(translateMatrix, textRenderingMatrix); + nextX -= pageSize.getLowerLeftX(); + nextY -= pageSize.getLowerLeftY(); + } + + processTextPosition(new TextPosition(pageRotation, pageSize.getWidth(), + pageSize.getHeight(), translatedTextRenderingMatrix, nextX, nextY, + Math.abs(dyDisplay), dxDisplay, + Math.abs(spaceWidthDisplay), unicode, new int[] { code } , font, fontSize, + (int)(fontSize * textMatrix.getScalingFactorX()))); + } + + /** + * A method provided as an event interface to allow a subclass to perform some specific + * functionality when text needs to be processed. + * + * @param text The text to be processed. + */ + protected void processTextPosition(TextPosition text) + { + // subclasses can override to provide specific functionality + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java b/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java new file mode 100644 index 00000000000..2fce0df3a86 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java @@ -0,0 +1,230 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.text; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Stack; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDMarkedContent; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.contentstream.operator.markedcontent.BeginMarkedContentSequence; +import org.apache.pdfbox.contentstream.operator.markedcontent.BeginMarkedContentSequenceWithProperties; +import org.apache.pdfbox.contentstream.operator.markedcontent.DrawObject; +import org.apache.pdfbox.contentstream.operator.markedcontent.EndMarkedContentSequence; + +/** + * This is an stream engine to extract the marked content of a pdf. + * + * @author Johannes Koch + */ +public class PDFMarkedContentExtractor extends LegacyPDFStreamEngine +{ + private final boolean suppressDuplicateOverlappingText = true; + private final List markedContents = new ArrayList<>(); + private final Stack currentMarkedContents = new Stack<>(); + private final Map> characterListMapping = new HashMap<>(); + + /** + * Instantiate a new PDFTextStripper object. + */ + public PDFMarkedContentExtractor() throws IOException + { + this(null); + } + + /** + * Constructor. Will apply encoding-specific conversions to the output text. + * + * @param encoding The encoding that the output will be written in. + */ + public PDFMarkedContentExtractor(String encoding) throws IOException + { + addOperator(new BeginMarkedContentSequenceWithProperties()); + addOperator(new BeginMarkedContentSequence()); + addOperator(new EndMarkedContentSequence()); + addOperator(new DrawObject()); + // todo: DP - Marked Content Point + // todo: MP - Marked Content Point with Properties + } + + /** + * This will determine of two floating point numbers are within a specified variance. + * + * @param first The first number to compare to. + * @param second The second number to compare to. + * @param variance The allowed variance. + */ + private boolean within( float first, float second, float variance ) + { + return second > first - variance && second < first + variance; + } + + @Override + public void beginMarkedContentSequence(COSName tag, COSDictionary properties) + { + PDMarkedContent markedContent = PDMarkedContent.create(tag, properties); + if (this.currentMarkedContents.isEmpty()) + { + this.markedContents.add(markedContent); + } + else + { + PDMarkedContent currentMarkedContent = + this.currentMarkedContents.peek(); + if (currentMarkedContent != null) + { + currentMarkedContent.addMarkedContent(markedContent); + } + } + this.currentMarkedContents.push(markedContent); + } + + @Override + public void endMarkedContentSequence() + { + if (!this.currentMarkedContents.isEmpty()) + { + this.currentMarkedContents.pop(); + } + } + + public void xobject(PDXObject xobject) + { + if (!this.currentMarkedContents.isEmpty()) + { + this.currentMarkedContents.peek().addXObject(xobject); + } + } + + /** + * This will process a TextPosition object and add the + * text to the list of characters on a page. It takes care of + * overlapping text. + * + * @param text The text to process. + */ + @Override + protected void processTextPosition( TextPosition text ) + { + boolean showCharacter = true; + if( this.suppressDuplicateOverlappingText ) + { + showCharacter = false; + String textCharacter = text.getUnicode(); + float textX = text.getX(); + float textY = text.getY(); + List sameTextCharacters = this.characterListMapping.get( textCharacter ); + if( sameTextCharacters == null ) + { + sameTextCharacters = new ArrayList<>(); + this.characterListMapping.put( textCharacter, sameTextCharacters ); + } + + // RDD - Here we compute the value that represents the end of the rendered + // text. This value is used to determine whether subsequent text rendered + // on the same line overwrites the current text. + // + // We subtract any positive padding to handle cases where extreme amounts + // of padding are applied, then backed off (not sure why this is done, but there + // are cases where the padding is on the order of 10x the character width, and + // the TJ just backs up to compensate after each character). Also, we subtract + // an amount to allow for kerning (a percentage of the width of the last + // character). + // + boolean suppressCharacter = false; + float tolerance = (text.getWidth()/textCharacter.length())/3.0f; + for (TextPosition sameTextCharacter : sameTextCharacters) + { + TextPosition character = sameTextCharacter; + String charCharacter = character.getUnicode(); + float charX = character.getX(); + float charY = character.getY(); + //only want to suppress + if( charCharacter != null && + //charCharacter.equals( textCharacter ) && + within( charX, textX, tolerance ) && + within( charY, + textY, + tolerance ) ) + { + suppressCharacter = true; + break; + } + } + if( !suppressCharacter ) + { + sameTextCharacters.add( text ); + showCharacter = true; + } + } + + if( showCharacter ) + { + List textList = new ArrayList<>(); + + /* In the wild, some PDF encoded documents put diacritics (accents on + * top of characters) into a separate Tj element. When displaying them + * graphically, the two chunks get overlayed. With text output though, + * we need to do the overlay. This code recombines the diacritic with + * its associated character if the two are consecutive. + */ + if(textList.isEmpty()) + { + textList.add(text); + } + else + { + /* test if we overlap the previous entry. + * Note that we are making an assumption that we need to only look back + * one TextPosition to find what we are overlapping. + * This may not always be true. */ + TextPosition previousTextPosition = textList.get(textList.size()-1); + if(text.isDiacritic() && previousTextPosition.contains(text)) + { + previousTextPosition.mergeDiacritic(text); + } + /* If the previous TextPosition was the diacritic, merge it into this + * one and remove it from the list. */ + else if(previousTextPosition.isDiacritic() && text.contains(previousTextPosition)) + { + text.mergeDiacritic(previousTextPosition); + textList.remove(textList.size()-1); + textList.add(text); + } + else + { + textList.add(text); + } + } + if (!this.currentMarkedContents.isEmpty()) + { + this.currentMarkedContents.peek().addText(text); + } + } + } + + public List getMarkedContents() + { + return this.markedContents; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java b/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java new file mode 100644 index 00000000000..53ac14d4002 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java @@ -0,0 +1,2126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.text; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.io.StringWriter; +import java.io.Writer; +import java.text.Bidi; +import java.text.Normalizer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.SortedSet; +import java.util.StringTokenizer; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.regex.Pattern; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageTree; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; +import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDThreadBead; +import org.apache.pdfbox.util.QuickSort; + +/** + * This class will take a pdf document and strip out all of the text and ignore the formatting and such. Please note; it + * is up to clients of this class to verify that a specific user has the correct permissions to extract text from the + * PDF document. + * + * The basic flow of this process is that we get a document and use a series of processXXX() functions that work on + * smaller and smaller chunks of the page. Eventually, we fully process each page and then print it. + * + * @author Ben Litchfield + */ +public class PDFTextStripper extends LegacyPDFStreamEngine +{ + private static float defaultIndentThreshold = 2.0f; + private static float defaultDropThreshold = 2.5f; + + private static final Log LOG = LogFactory.getLog(PDFTextStripper.class); + + // enable the ability to set the default indent/drop thresholds + // with -D system properties: + // pdftextstripper.indent + // pdftextstripper.drop + static + { + String strDrop = null, strIndent = null; + try + { + String className = PDFTextStripper.class.getSimpleName().toLowerCase(); + String prop = className + ".indent"; + strIndent = System.getProperty(prop); + prop = className + ".drop"; + strDrop = System.getProperty(prop); + } + catch (SecurityException e) + { + // PDFBOX-1946 when run in an applet + // ignore and use default + LOG.debug("Couldn't read system properties - using defaults", e); + } + if (strIndent != null && strIndent.length() > 0) + { + try + { + defaultIndentThreshold = Float.parseFloat(strIndent); + } + catch (NumberFormatException nfe) + { + // ignore and use default + } + } + if (strDrop != null && strDrop.length() > 0) + { + try + { + defaultDropThreshold = Float.parseFloat(strDrop); + } + catch (NumberFormatException nfe) + { + // ignore and use default + } + } + } + + /** + * The platform's line separator. + */ + protected final String LINE_SEPARATOR = System.getProperty("line.separator"); + + private String lineSeparator = LINE_SEPARATOR; + private String wordSeparator = " "; + private String paragraphStart = ""; + private String paragraphEnd = ""; + private String pageStart = ""; + private String pageEnd = LINE_SEPARATOR; + private String articleStart = ""; + private String articleEnd = ""; + + private int currentPageNo = 0; + private int startPage = 1; + private int endPage = Integer.MAX_VALUE; + private PDOutlineItem startBookmark = null; + + // 1-based bookmark pages + private int startBookmarkPageNumber = -1; + private int endBookmarkPageNumber = -1; + + private PDOutlineItem endBookmark = null; + private boolean suppressDuplicateOverlappingText = true; + private boolean shouldSeparateByBeads = true; + private boolean sortByPosition = false; + private boolean addMoreFormatting = false; + + private float indentThreshold = defaultIndentThreshold; + private float dropThreshold = defaultDropThreshold; + + // we will need to estimate where to add spaces, these are used to help guess + private float spacingTolerance = .5f; + private float averageCharTolerance = .3f; + + private List beadRectangles = null; + + /** + * The charactersByArticle is used to extract text by article divisions. For example a PDF that has two columns like + * a newspaper, we want to extract the first column and then the second column. In this example the PDF would have 2 + * beads(or articles), one for each column. The size of the charactersByArticle would be 5, because not all text on + * the screen will fall into one of the articles. The five divisions are shown below + * + * Text before first article + * first article text + * text between first article and second article + * second article text + * text after second article + * + * Most PDFs won't have any beads, so charactersByArticle will contain a single entry. + */ + protected ArrayList> charactersByArticle = new ArrayList<>(); + + private Map>> characterListMapping = new HashMap<>(); + + protected PDDocument document; + protected Writer output; + + /** + * True if we started a paragraph but haven't ended it yet. + */ + private boolean inParagraph; + + /** + * Instantiate a new PDFTextStripper object. + * + * @throws IOException If there is an error loading the properties. + */ + public PDFTextStripper() throws IOException + { + } + + /** + * This will return the text of a document. See writeText.
    + * NOTE: The document must not be encrypted when coming into this method. + * + * @param doc The document to get the text from. + * @return The text of the PDF document. + * @throws IOException if the doc state is invalid or it is encrypted. + */ + public String getText(PDDocument doc) throws IOException + { + StringWriter outputStream = new StringWriter(); + writeText(doc, outputStream); + return outputStream.toString(); + } + + private void resetEngine() + { + currentPageNo = 0; + document = null; + if (charactersByArticle != null) + { + charactersByArticle.clear(); + } + if (characterListMapping != null) + { + characterListMapping.clear(); + } + } + + /** + * This will take a PDDocument and write the text of that document to the print writer. + * + * @param doc The document to get the data from. + * @param outputStream The location to put the text. + * + * @throws IOException If the doc is in an invalid state. + */ + public void writeText(PDDocument doc, Writer outputStream) throws IOException + { + resetEngine(); + document = doc; + output = outputStream; + if (getAddMoreFormatting()) + { + paragraphEnd = lineSeparator; + pageStart = lineSeparator; + articleStart = lineSeparator; + articleEnd = lineSeparator; + } + startDocument(document); + processPages(document.getPages()); + endDocument(document); + } + + /** + * This will process all of the pages and the text that is in them. + * + * @param pages The pages object in the document. + * + * @throws IOException If there is an error parsing the text. + */ + protected void processPages(PDPageTree pages) throws IOException + { + PDPage startBookmarkPage = startBookmark == null ? null + : startBookmark.findDestinationPage(document); + if (startBookmarkPage != null) + { + startBookmarkPageNumber = pages.indexOf(startBookmarkPage) + 1; + } + else + { + // -1 = undefined + startBookmarkPageNumber = -1; + } + + PDPage endBookmarkPage = endBookmark == null ? null + : endBookmark.findDestinationPage(document); + if (endBookmarkPage != null) + { + endBookmarkPageNumber = pages.indexOf(endBookmarkPage) + 1; + } + else + { + // -1 = undefined + endBookmarkPageNumber = -1; + } + + if (startBookmarkPageNumber == -1 && startBookmark != null && endBookmarkPageNumber == -1 + && endBookmark != null + && startBookmark.getCOSObject() == endBookmark.getCOSObject()) + { + // this is a special case where both the start and end bookmark + // are the same but point to nothing. In this case + // we will not extract any text. + startBookmarkPageNumber = 0; + endBookmarkPageNumber = 0; + } + + for (PDPage page : pages) + { + currentPageNo++; + if (page.hasContents()) + { + processPage(page); + } + } + } + + /** + * This method is available for subclasses of this class. It will be called before processing of the document start. + * + * @param document The PDF document that is being processed. + * @throws IOException If an IO error occurs. + */ + protected void startDocument(PDDocument document) throws IOException + { + // no default implementation, but available for subclasses + } + + /** + * This method is available for subclasses of this class. It will be called after processing of the document + * finishes. + * + * @param document The PDF document that is being processed. + * @throws IOException If an IO error occurs. + */ + protected void endDocument(PDDocument document) throws IOException + { + // no default implementation, but available for subclasses + } + + /** + * This will process the contents of a page. + * + * @param page The page to process. + * + * @throws IOException If there is an error processing the page. + */ + @Override + public void processPage(PDPage page) throws IOException + { + if (currentPageNo >= startPage && currentPageNo <= endPage + && (startBookmarkPageNumber == -1 || currentPageNo >= startBookmarkPageNumber) + && (endBookmarkPageNumber == -1 || currentPageNo <= endBookmarkPageNumber)) + { + startPage(page); + + int numberOfArticleSections = 1; + if (shouldSeparateByBeads) + { + fillBeadRectangles(page); + numberOfArticleSections += beadRectangles.size() * 2; + } + int originalSize = charactersByArticle.size(); + charactersByArticle.ensureCapacity(numberOfArticleSections); + int lastIndex = Math.max(numberOfArticleSections, originalSize); + for (int i = 0; i < lastIndex; i++) + { + if (i < originalSize) + { + charactersByArticle.get(i).clear(); + } + else + { + if (numberOfArticleSections < originalSize) + { + charactersByArticle.remove(i); + } + else + { + charactersByArticle.add(new ArrayList()); + } + } + } + characterListMapping.clear(); + super.processPage(page); + writePage(); + endPage(page); + } + } + + private void fillBeadRectangles(PDPage page) + { + beadRectangles = new ArrayList<>(); + for (PDThreadBead bead : page.getThreadBeads()) + { + if (bead == null) + { + // can't skip, because of null entry handling in processTextPosition() + beadRectangles.add(null); + continue; + } + + PDRectangle rect = bead.getRectangle(); + + // bead rectangle is in PDF coordinates (y=0 is bottom), + // glyphs are in image coordinates (y=0 is top), + // so we must flip + PDRectangle mediaBox = page.getMediaBox(); + float upperRightY = mediaBox.getUpperRightY() - rect.getLowerLeftY(); + float lowerLeftY = mediaBox.getUpperRightY() - rect.getUpperRightY(); + rect.setLowerLeftY(lowerLeftY); + rect.setUpperRightY(upperRightY); + + // adjust for cropbox + PDRectangle cropBox = page.getCropBox(); + if (Float.compare(cropBox.getLowerLeftX(), 0) != 0 || Float.compare(cropBox.getLowerLeftY(), 0) != 0) + { + rect.setLowerLeftX(rect.getLowerLeftX() - cropBox.getLowerLeftX()); + rect.setLowerLeftY(rect.getLowerLeftY() - cropBox.getLowerLeftY()); + rect.setUpperRightX(rect.getUpperRightX() - cropBox.getLowerLeftX()); + rect.setUpperRightY(rect.getUpperRightY() - cropBox.getLowerLeftY()); + } + + beadRectangles.add(rect); + } + } + + /** + * Start a new article, which is typically defined as a column on a single page (also referred to as a bead). This + * assumes that the primary direction of text is left to right. Default implementation is to do nothing. Subclasses + * may provide additional information. + * + * @throws IOException If there is any error writing to the stream. + */ + protected void startArticle() throws IOException + { + startArticle(true); + } + + /** + * Start a new article, which is typically defined as a column on a single page (also referred to as a bead). + * Default implementation is to do nothing. Subclasses may provide additional information. + * + * @param isLTR true if primary direction of text is left to right. + * @throws IOException If there is any error writing to the stream. + */ + protected void startArticle(boolean isLTR) throws IOException + { + output.write(getArticleStart()); + } + + /** + * End an article. Default implementation is to do nothing. Subclasses may provide additional information. + * + * @throws IOException If there is any error writing to the stream. + */ + protected void endArticle() throws IOException + { + output.write(getArticleEnd()); + } + + /** + * Start a new page. Default implementation is to do nothing. Subclasses may provide additional information. + * + * @param page The page we are about to process. + * + * @throws IOException If there is any error writing to the stream. + */ + protected void startPage(PDPage page) throws IOException + { + // default is to do nothing + } + + /** + * End a page. Default implementation is to do nothing. Subclasses may provide additional information. + * + * @param page The page we are about to process. + * + * @throws IOException If there is any error writing to the stream. + */ + protected void endPage(PDPage page) throws IOException + { + // default is to do nothing + } + + private static final float END_OF_LAST_TEXT_X_RESET_VALUE = -1; + private static final float MAX_Y_FOR_LINE_RESET_VALUE = -Float.MAX_VALUE; + private static final float EXPECTED_START_OF_NEXT_WORD_X_RESET_VALUE = -Float.MAX_VALUE; + private static final float MAX_HEIGHT_FOR_LINE_RESET_VALUE = -1; + private static final float MIN_Y_TOP_FOR_LINE_RESET_VALUE = Float.MAX_VALUE; + private static final float LAST_WORD_SPACING_RESET_VALUE = -1; + + /** + * This will print the text of the processed page to "output". It will estimate, based on the coordinates of the + * text, where newlines and word spacings should be placed. The text will be sorted only if that feature was + * enabled. + * + * @throws IOException If there is an error writing the text. + */ + protected void writePage() throws IOException + { + float maxYForLine = MAX_Y_FOR_LINE_RESET_VALUE; + float minYTopForLine = MIN_Y_TOP_FOR_LINE_RESET_VALUE; + float endOfLastTextX = END_OF_LAST_TEXT_X_RESET_VALUE; + float lastWordSpacing = LAST_WORD_SPACING_RESET_VALUE; + float maxHeightForLine = MAX_HEIGHT_FOR_LINE_RESET_VALUE; + PositionWrapper lastPosition = null; + PositionWrapper lastLineStartPosition = null; + + boolean startOfPage = true; // flag to indicate start of page + boolean startOfArticle; + if (charactersByArticle.size() > 0) + { + writePageStart(); + } + + for (List textList : charactersByArticle) + { + if (getSortByPosition()) + { + TextPositionComparator comparator = new TextPositionComparator(); + + // because the TextPositionComparator is not transitive, but + // JDK7+ enforces transitivity on comparators, we need to use + // a custom quicksort implementation (which is slower, unfortunately). + QuickSort.sort(textList, comparator); + } + + startArticle(); + startOfArticle = true; + + // Now cycle through to print the text. + // We queue up a line at a time before we print so that we can convert + // the line from presentation form to logical form (if needed). + List line = new ArrayList<>(); + + Iterator textIter = textList.iterator(); + // PDF files don't always store spaces. We will need to guess where we should add + // spaces based on the distances between TextPositions. Historically, this was done + // based on the size of the space character provided by the font. In general, this + // worked but there were cases where it did not work. Calculating the average character + // width and using that as a metric works better in some cases but fails in some cases + // where the spacing worked. So we use both. NOTE: Adobe reader also fails on some of + // these examples. + + // Keeps track of the previous average character width + float previousAveCharWidth = -1; + while (textIter.hasNext()) + { + TextPosition position = textIter.next(); + PositionWrapper current = new PositionWrapper(position); + String characterValue = position.getUnicode(); + + // Resets the average character width when we see a change in font + // or a change in the font size + if (lastPosition != null && + (position.getFont() != lastPosition.getTextPosition().getFont() || + Float.compare(position.getFontSize(),lastPosition.getTextPosition().getFontSize()) != 0)) + { + previousAveCharWidth = -1; + } + + float positionX; + float positionY; + float positionWidth; + float positionHeight; + + // If we are sorting, then we need to use the text direction + // adjusted coordinates, because they were used in the sorting. + if (getSortByPosition()) + { + positionX = position.getXDirAdj(); + positionY = position.getYDirAdj(); + positionWidth = position.getWidthDirAdj(); + positionHeight = position.getHeightDir(); + } + else + { + positionX = position.getX(); + positionY = position.getY(); + positionWidth = position.getWidth(); + positionHeight = position.getHeight(); + } + + // The current amount of characters in a word + int wordCharCount = position.getIndividualWidths().length; + + // Estimate the expected width of the space based on the + // space character with some margin. + float wordSpacing = position.getWidthOfSpace(); + float deltaSpace; + if (Float.compare(wordSpacing, 0) == 0 || Float.isNaN(wordSpacing)) + { + deltaSpace = Float.MAX_VALUE; + } + else + { + if (lastWordSpacing < 0) + { + deltaSpace = wordSpacing * getSpacingTolerance(); + } + else + { + deltaSpace = (wordSpacing + lastWordSpacing) / 2f * getSpacingTolerance(); + } + } + + // Estimate the expected width of the space based on the average character width + // with some margin. This calculation does not make a true average (average of + // averages) but we found that it gave the best results after numerous experiments. + // Based on experiments we also found that .3 worked well. + float averageCharWidth; + if (previousAveCharWidth < 0) + { + averageCharWidth = positionWidth / wordCharCount; + } + else + { + averageCharWidth = (previousAveCharWidth + positionWidth / wordCharCount) / 2f; + } + float deltaCharWidth = averageCharWidth * getAverageCharTolerance(); + + // Compares the values obtained by the average method and the wordSpacing method + // and picks the smaller number. + float expectedStartOfNextWordX = EXPECTED_START_OF_NEXT_WORD_X_RESET_VALUE; + if (Float.compare(endOfLastTextX, END_OF_LAST_TEXT_X_RESET_VALUE) != 0) + { + expectedStartOfNextWordX = endOfLastTextX + Math.min(deltaSpace, deltaCharWidth); + } + + if (lastPosition != null) + { + if (startOfArticle) + { + lastPosition.setArticleStart(); + startOfArticle = false; + } + // RDD - Here we determine whether this text object is on the current + // line. We use the lastBaselineFontSize to handle the superscript + // case, and the size of the current font to handle the subscript case. + // Text must overlap with the last rendered baseline text by at least + // a small amount in order to be considered as being on the same line. + + // XXX BC: In theory, this check should really check if the next char is in + // full range seen in this line. This is what I tried to do with minYTopForLine, + // but this caused a lot of regression test failures. So, I'm leaving it be for + // now + if (!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine)) + { + writeLine(normalize(line)); + line.clear(); + lastLineStartPosition = handleLineSeparation(current, lastPosition, + lastLineStartPosition, maxHeightForLine); + expectedStartOfNextWordX = EXPECTED_START_OF_NEXT_WORD_X_RESET_VALUE; + maxYForLine = MAX_Y_FOR_LINE_RESET_VALUE; + maxHeightForLine = MAX_HEIGHT_FOR_LINE_RESET_VALUE; + minYTopForLine = MIN_Y_TOP_FOR_LINE_RESET_VALUE; + } + // test if our TextPosition starts after a new word would be expected to start + if (Float.compare(expectedStartOfNextWordX, EXPECTED_START_OF_NEXT_WORD_X_RESET_VALUE) != 0 + && expectedStartOfNextWordX < positionX && + // only bother adding a space if the last character was not a space + lastPosition.getTextPosition().getUnicode() != null + && !lastPosition.getTextPosition().getUnicode().endsWith(" ")) + { + line.add(LineItem.getWordSeparator()); + } + } + if (positionY >= maxYForLine) + { + maxYForLine = positionY; + } + // RDD - endX is what PDF considers to be the x coordinate of the + // end position of the text. We use it in computing our metrics below. + endOfLastTextX = positionX + positionWidth; + + // add it to the list + if (characterValue != null) + { + if (startOfPage && lastPosition == null) + { + writeParagraphStart();// not sure this is correct for RTL? + } + line.add(new LineItem(position)); + } + maxHeightForLine = Math.max(maxHeightForLine, positionHeight); + minYTopForLine = Math.min(minYTopForLine, positionY - positionHeight); + lastPosition = current; + if (startOfPage) + { + lastPosition.setParagraphStart(); + lastPosition.setLineStart(); + lastLineStartPosition = lastPosition; + startOfPage = false; + } + lastWordSpacing = wordSpacing; + previousAveCharWidth = averageCharWidth; + } + // print the final line + if (line.size() > 0) + { + writeLine(normalize(line)); + writeParagraphEnd(); + } + endArticle(); + } + writePageEnd(); + } + + private boolean overlap(float y1, float height1, float y2, float height2) + { + return within(y1, y2, .1f) || y2 <= y1 && y2 >= y1 - height1 + || y1 <= y2 && y1 >= y2 - height2; + } + + /** + * Write the line separator value to the output stream. + * + * @throws IOException If there is a problem writing out the line separator to the document. + */ + protected void writeLineSeparator() throws IOException + { + output.write(getLineSeparator()); + } + + /** + * Write the word separator value to the output stream. + * + * @throws IOException If there is a problem writing out the word separator to the document. + */ + protected void writeWordSeparator() throws IOException + { + output.write(getWordSeparator()); + } + + /** + * Write the string in TextPosition to the output stream. + * + * @param text The text to write to the stream. + * @throws IOException If there is an error when writing the text. + */ + protected void writeCharacters(TextPosition text) throws IOException + { + output.write(text.getUnicode()); + } + + /** + * Write a Java string to the output stream. The default implementation will ignore the textPositions + * and just calls {@link #writeString(String)}. + * + * @param text The text to write to the stream. + * @param textPositions The TextPositions belonging to the text. + * @throws IOException If there is an error when writing the text. + */ + protected void writeString(String text, List textPositions) throws IOException + { + writeString(text); + } + + /** + * Write a Java string to the output stream. + * + * @param text The text to write to the stream. + * @throws IOException If there is an error when writing the text. + */ + protected void writeString(String text) throws IOException + { + output.write(text); + } + + /** + * This will determine of two floating point numbers are within a specified variance. + * + * @param first The first number to compare to. + * @param second The second number to compare to. + * @param variance The allowed variance. + */ + private boolean within(float first, float second, float variance) + { + return second < first + variance && second > first - variance; + } + + /** + * This will process a TextPosition object and add the text to the list of characters on a page. It takes care of + * overlapping text. + * + * @param text The text to process. + */ + @Override + protected void processTextPosition(TextPosition text) + { + boolean showCharacter = true; + if (suppressDuplicateOverlappingText) + { + showCharacter = false; + String textCharacter = text.getUnicode(); + float textX = text.getX(); + float textY = text.getY(); + TreeMap> sameTextCharacters = characterListMapping + .get(textCharacter); + if (sameTextCharacters == null) + { + sameTextCharacters = new TreeMap<>(); + characterListMapping.put(textCharacter, sameTextCharacters); + } + // RDD - Here we compute the value that represents the end of the rendered + // text. This value is used to determine whether subsequent text rendered + // on the same line overwrites the current text. + // + // We subtract any positive padding to handle cases where extreme amounts + // of padding are applied, then backed off (not sure why this is done, but there + // are cases where the padding is on the order of 10x the character width, and + // the TJ just backs up to compensate after each character). Also, we subtract + // an amount to allow for kerning (a percentage of the width of the last + // character). + boolean suppressCharacter = false; + float tolerance = text.getWidth() / textCharacter.length() / 3.0f; + + SortedMap> xMatches = sameTextCharacters.subMap(textX - tolerance, + textX + tolerance); + for (TreeSet xMatch : xMatches.values()) + { + SortedSet yMatches = xMatch.subSet(textY - tolerance, textY + tolerance); + if (!yMatches.isEmpty()) + { + suppressCharacter = true; + break; + } + } + if (!suppressCharacter) + { + TreeSet ySet = sameTextCharacters.get(textX); + if (ySet == null) + { + ySet = new TreeSet<>(); + sameTextCharacters.put(textX, ySet); + } + ySet.add(textY); + showCharacter = true; + } + } + if (showCharacter) + { + // if we are showing the character then we need to determine which article it belongs to + int foundArticleDivisionIndex = -1; + int notFoundButFirstLeftAndAboveArticleDivisionIndex = -1; + int notFoundButFirstLeftArticleDivisionIndex = -1; + int notFoundButFirstAboveArticleDivisionIndex = -1; + float x = text.getX(); + float y = text.getY(); + if (shouldSeparateByBeads) + { + for (int i = 0; i < beadRectangles.size() && foundArticleDivisionIndex == -1; i++) + { + PDRectangle rect = beadRectangles.get(i); + if (rect != null) + { + if (rect.contains(x, y)) + { + foundArticleDivisionIndex = i * 2 + 1; + } + else if ((x < rect.getLowerLeftX() || y < rect.getUpperRightY()) + && notFoundButFirstLeftAndAboveArticleDivisionIndex == -1) + { + notFoundButFirstLeftAndAboveArticleDivisionIndex = i * 2; + } + else if (x < rect.getLowerLeftX() + && notFoundButFirstLeftArticleDivisionIndex == -1) + { + notFoundButFirstLeftArticleDivisionIndex = i * 2; + } + else if (y < rect.getUpperRightY() + && notFoundButFirstAboveArticleDivisionIndex == -1) + { + notFoundButFirstAboveArticleDivisionIndex = i * 2; + } + } + else + { + foundArticleDivisionIndex = 0; + } + } + } + else + { + foundArticleDivisionIndex = 0; + } + int articleDivisionIndex; + if (foundArticleDivisionIndex != -1) + { + articleDivisionIndex = foundArticleDivisionIndex; + } + else if (notFoundButFirstLeftAndAboveArticleDivisionIndex != -1) + { + articleDivisionIndex = notFoundButFirstLeftAndAboveArticleDivisionIndex; + } + else if (notFoundButFirstLeftArticleDivisionIndex != -1) + { + articleDivisionIndex = notFoundButFirstLeftArticleDivisionIndex; + } + else if (notFoundButFirstAboveArticleDivisionIndex != -1) + { + articleDivisionIndex = notFoundButFirstAboveArticleDivisionIndex; + } + else + { + articleDivisionIndex = charactersByArticle.size() - 1; + } + + List textList = charactersByArticle.get(articleDivisionIndex); + + // In the wild, some PDF encoded documents put diacritics (accents on + // top of characters) into a separate Tj element. When displaying them + // graphically, the two chunks get overlayed. With text output though, + // we need to do the overlay. This code recombines the diacritic with + // its associated character if the two are consecutive. + if (textList.isEmpty()) + { + textList.add(text); + } + else + { + // test if we overlap the previous entry. + // Note that we are making an assumption that we need to only look back + // one TextPosition to find what we are overlapping. + // This may not always be true. */ + TextPosition previousTextPosition = textList.get(textList.size() - 1); + if (text.isDiacritic() && previousTextPosition.contains(text)) + { + previousTextPosition.mergeDiacritic(text); + } + // If the previous TextPosition was the diacritic, merge it into this + // one and remove it from the list. + else if (previousTextPosition.isDiacritic() && text.contains(previousTextPosition)) + { + text.mergeDiacritic(previousTextPosition); + textList.remove(textList.size() - 1); + textList.add(text); + } + else + { + textList.add(text); + } + } + } + } + + /** + * This is the page that the text extraction will start on. The pages start at page 1. For example in a 5 page PDF + * document, if the start page is 1 then all pages will be extracted. If the start page is 4 then pages 4 and 5 will + * be extracted. The default value is 1. + * + * @return Value of property startPage. + */ + public int getStartPage() + { + return startPage; + } + + /** + * This will set the first page to be extracted by this class. + * + * @param startPageValue New value of 1-based startPage property. + */ + public void setStartPage(int startPageValue) + { + startPage = startPageValue; + } + + /** + * This will get the last page that will be extracted. This is inclusive, for example if a 5 page PDF an endPage + * value of 5 would extract the entire document, an end page of 2 would extract pages 1 and 2. This defaults to + * Integer.MAX_VALUE such that all pages of the pdf will be extracted. + * + * @return Value of property endPage. + */ + public int getEndPage() + { + return endPage; + } + + /** + * This will set the last page to be extracted by this class. + * + * @param endPageValue New value of 1-based endPage property. + */ + public void setEndPage(int endPageValue) + { + endPage = endPageValue; + } + + /** + * Set the desired line separator for output text. The line.separator system property is used if the line separator + * preference is not set explicitly using this method. + * + * @param separator The desired line separator string. + */ + public void setLineSeparator(String separator) + { + lineSeparator = separator; + } + + /** + * This will get the line separator. + * + * @return The desired line separator string. + */ + public String getLineSeparator() + { + return lineSeparator; + } + + /** + * This will get the word separator. + * + * @return The desired word separator string. + */ + public String getWordSeparator() + { + return wordSeparator; + } + + /** + * Set the desired word separator for output text. The PDFBox text extraction algorithm will output a space + * character if there is enough space between two words. By default a space character is used. If you need and + * accurate count of characters that are found in a PDF document then you might want to set the word separator to + * the empty string. + * + * @param separator The desired page separator string. + */ + public void setWordSeparator(String separator) + { + wordSeparator = separator; + } + + /** + * @return Returns the suppressDuplicateOverlappingText. + */ + public boolean getSuppressDuplicateOverlappingText() + { + return suppressDuplicateOverlappingText; + } + + /** + * Get the current page number that is being processed. + * + * @return A 1 based number representing the current page. + */ + protected int getCurrentPageNo() + { + return currentPageNo; + } + + /** + * The output stream that is being written to. + * + * @return The stream that output is being written to. + */ + protected Writer getOutput() + { + return output; + } + + /** + * Character strings are grouped by articles. It is quite common that there will only be a single article. This + * returns a List that contains List objects, the inner lists will contain TextPosition objects. + * + * @return A double List of TextPositions for all text strings on the page. + */ + protected List> getCharactersByArticle() + { + return charactersByArticle; + } + + /** + * By default the text stripper will attempt to remove text that overlapps each other. Word paints the same + * character several times in order to make it look bold. By setting this to false all text will be extracted, which + * means that certain sections will be duplicated, but better performance will be noticed. + * + * @param suppressDuplicateOverlappingTextValue The suppressDuplicateOverlappingText to set. + */ + public void setSuppressDuplicateOverlappingText(boolean suppressDuplicateOverlappingTextValue) + { + suppressDuplicateOverlappingText = suppressDuplicateOverlappingTextValue; + } + + /** + * This will tell if the text stripper should separate by beads. + * + * @return If the text will be grouped by beads. + */ + public boolean getSeparateByBeads() + { + return shouldSeparateByBeads; + } + + /** + * Set if the text stripper should group the text output by a list of beads. The default value is true! + * + * @param aShouldSeparateByBeads The new grouping of beads. + */ + public void setShouldSeparateByBeads(boolean aShouldSeparateByBeads) + { + shouldSeparateByBeads = aShouldSeparateByBeads; + } + + /** + * Get the bookmark where text extraction should end, inclusive. Default is null. + * + * @return The ending bookmark. + */ + public PDOutlineItem getEndBookmark() + { + return endBookmark; + } + + /** + * Set the bookmark where the text extraction should stop. + * + * @param aEndBookmark The ending bookmark. + */ + public void setEndBookmark(PDOutlineItem aEndBookmark) + { + endBookmark = aEndBookmark; + } + + /** + * Get the bookmark where text extraction should start, inclusive. Default is null. + * + * @return The starting bookmark. + */ + public PDOutlineItem getStartBookmark() + { + return startBookmark; + } + + /** + * Set the bookmark where text extraction should start, inclusive. + * + * @param aStartBookmark The starting bookmark. + */ + public void setStartBookmark(PDOutlineItem aStartBookmark) + { + startBookmark = aStartBookmark; + } + + /** + * This will tell if the text stripper should add some more text formatting. + * + * @return true if some more text formatting will be added + */ + public boolean getAddMoreFormatting() + { + return addMoreFormatting; + } + + /** + * There will some additional text formatting be added if addMoreFormatting is set to true. Default is false. + * + * @param newAddMoreFormatting Tell PDFBox to add some more text formatting + */ + public void setAddMoreFormatting(boolean newAddMoreFormatting) + { + addMoreFormatting = newAddMoreFormatting; + } + + /** + * This will tell if the text stripper should sort the text tokens before writing to the stream. + * + * @return true If the text tokens will be sorted before being written. + */ + public boolean getSortByPosition() + { + return sortByPosition; + } + + /** + * The order of the text tokens in a PDF file may not be in the same as they appear visually on the screen. For + * example, a PDF writer may write out all text by font, so all bold or larger text, then make a second pass and + * write out the normal text.
    + * The default is to not sort by position.
    + *
    + * A PDF writer could choose to write each character in a different order. By default PDFBox does not sort + * the text tokens before processing them due to performance reasons. + * + * @param newSortByPosition Tell PDFBox to sort the text positions. + */ + public void setSortByPosition(boolean newSortByPosition) + { + sortByPosition = newSortByPosition; + } + + /** + * Get the current space width-based tolerance value that is being used to estimate where spaces in text should be + * added. Note that the default value for this has been determined from trial and error. + * + * @return The current tolerance / scaling factor + */ + public float getSpacingTolerance() + { + return spacingTolerance; + } + + /** + * Set the space width-based tolerance value that is used to estimate where spaces in text should be added. Note + * that the default value for this has been determined from trial and error. Setting this value larger will reduce + * the number of spaces added. + * + * @param spacingToleranceValue tolerance / scaling factor to use + */ + public void setSpacingTolerance(float spacingToleranceValue) + { + spacingTolerance = spacingToleranceValue; + } + + /** + * Get the current character width-based tolerance value that is being used to estimate where spaces in text should + * be added. Note that the default value for this has been determined from trial and error. + * + * @return The current tolerance / scaling factor + */ + public float getAverageCharTolerance() + { + return averageCharTolerance; + } + + /** + * Set the character width-based tolerance value that is used to estimate where spaces in text should be added. Note + * that the default value for this has been determined from trial and error. Setting this value larger will reduce + * the number of spaces added. + * + * @param averageCharToleranceValue average tolerance / scaling factor to use + */ + public void setAverageCharTolerance(float averageCharToleranceValue) + { + averageCharTolerance = averageCharToleranceValue; + } + + /** + * returns the multiple of whitespace character widths for the current text which the current line start can be + * indented from the previous line start beyond which the current line start is considered to be a paragraph start. + * + * @return the number of whitespace character widths to use when detecting paragraph indents. + */ + public float getIndentThreshold() + { + return indentThreshold; + } + + /** + * sets the multiple of whitespace character widths for the current text which the current line start can be + * indented from the previous line start beyond which the current line start is considered to be a paragraph start. + * The default value is 2.0. + * + * @param indentThresholdValue the number of whitespace character widths to use when detecting paragraph indents. + */ + public void setIndentThreshold(float indentThresholdValue) + { + indentThreshold = indentThresholdValue; + } + + /** + * the minimum whitespace, as a multiple of the max height of the current characters beyond which the current line + * start is considered to be a paragraph start. + * + * @return the character height multiple for max allowed whitespace between lines in the same paragraph. + */ + public float getDropThreshold() + { + return dropThreshold; + } + + /** + * sets the minimum whitespace, as a multiple of the max height of the current characters beyond which the current + * line start is considered to be a paragraph start. The default value is 2.5. + * + * @param dropThresholdValue the character height multiple for max allowed whitespace between lines in the same + * paragraph. + */ + public void setDropThreshold(float dropThresholdValue) + { + dropThreshold = dropThresholdValue; + } + + /** + * Returns the string which will be used at the beginning of a paragraph. + * + * @return the paragraph start string + */ + public String getParagraphStart() + { + return paragraphStart; + } + + /** + * Sets the string which will be used at the beginning of a paragraph. + * + * @param s the paragraph start string + */ + public void setParagraphStart(String s) + { + paragraphStart = s; + } + + /** + * Returns the string which will be used at the end of a paragraph. + * + * @return the paragraph end string + */ + public String getParagraphEnd() + { + return paragraphEnd; + } + + /** + * Sets the string which will be used at the end of a paragraph. + * + * @param s the paragraph end string + */ + public void setParagraphEnd(String s) + { + paragraphEnd = s; + } + + /** + * Returns the string which will be used at the beginning of a page. + * + * @return the page start string + */ + public String getPageStart() + { + return pageStart; + } + + /** + * Sets the string which will be used at the beginning of a page. + * + * @param pageStartValue the page start string + */ + public void setPageStart(String pageStartValue) + { + pageStart = pageStartValue; + } + + /** + * Returns the string which will be used at the end of a page. + * + * @return the page end string + */ + public String getPageEnd() + { + return pageEnd; + } + + /** + * Sets the string which will be used at the end of a page. + * + * @param pageEndValue the page end string + */ + public void setPageEnd(String pageEndValue) + { + pageEnd = pageEndValue; + } + + /** + * Returns the string which will be used at the beginning of an article. + * + * @return the article start string + */ + public String getArticleStart() + { + return articleStart; + } + + /** + * Sets the string which will be used at the beginning of an article. + * + * @param articleStartValue the article start string + */ + public void setArticleStart(String articleStartValue) + { + articleStart = articleStartValue; + } + + /** + * Returns the string which will be used at the end of an article. + * + * @return the article end string + */ + public String getArticleEnd() + { + return articleEnd; + } + + /** + * Sets the string which will be used at the end of an article. + * + * @param articleEndValue the article end string + */ + public void setArticleEnd(String articleEndValue) + { + articleEnd = articleEndValue; + } + + /** + * handles the line separator for a new line given the specified current and previous TextPositions. + * + * @param current the current text position + * @param lastPosition the previous text position + * @param lastLineStartPosition the last text position that followed a line separator. + * @param maxHeightForLine max height for positions since lastLineStartPosition + * @return start position of the last line + * @throws IOException if something went wrong + */ + private PositionWrapper handleLineSeparation(PositionWrapper current, + PositionWrapper lastPosition, PositionWrapper lastLineStartPosition, + float maxHeightForLine) throws IOException + { + current.setLineStart(); + isParagraphSeparation(current, lastPosition, lastLineStartPosition, maxHeightForLine); + lastLineStartPosition = current; + if (current.isParagraphStart()) + { + if (lastPosition.isArticleStart()) + { + if (lastPosition.isLineStart()) + { + writeLineSeparator(); + } + writeParagraphStart(); + } + else + { + writeLineSeparator(); + writeParagraphSeparator(); + } + } + else + { + writeLineSeparator(); + } + return lastLineStartPosition; + } + + /** + * tests the relationship between the last text position, the current text position and the last text position that + * followed a line separator to decide if the gap represents a paragraph separation. This should only be + * called for consecutive text positions that first pass the line separation test. + *

    + * This base implementation tests to see if the lastLineStartPosition is null OR if the current vertical position + * has dropped below the last text vertical position by at least 2.5 times the current text height OR if the current + * horizontal position is indented by at least 2 times the current width of a space character. + *

    + *

    + * This also attempts to identify text that is indented under a hanging indent. + *

    + *

    + * This method sets the isParagraphStart and isHangingIndent flags on the current position object. + *

    + * + * @param position the current text position. This may have its isParagraphStart or isHangingIndent flags set upon + * return. + * @param lastPosition the previous text position (should not be null). + * @param lastLineStartPosition the last text position that followed a line separator, or null. + * @param maxHeightForLine max height for text positions since lasLineStartPosition. + */ + private void isParagraphSeparation(PositionWrapper position, PositionWrapper lastPosition, + PositionWrapper lastLineStartPosition, float maxHeightForLine) + { + boolean result = false; + if (lastLineStartPosition == null) + { + result = true; + } + else + { + float yGap = Math.abs(position.getTextPosition().getYDirAdj() + - lastPosition.getTextPosition().getYDirAdj()); + float newYVal = multiplyFloat(getDropThreshold(), maxHeightForLine); + // do we need to flip this for rtl? + float xGap = position.getTextPosition().getXDirAdj() + - lastLineStartPosition.getTextPosition().getXDirAdj(); + float newXVal = multiplyFloat(getIndentThreshold(), + position.getTextPosition().getWidthOfSpace()); + float positionWidth = multiplyFloat(0.25f, position.getTextPosition().getWidth()); + + if (yGap > newYVal) + { + result = true; + } + else if (xGap > newXVal) + { + // text is indented, but try to screen for hanging indent + if (!lastLineStartPosition.isParagraphStart()) + { + result = true; + } + else + { + position.setHangingIndent(); + } + } + else if (xGap < -position.getTextPosition().getWidthOfSpace()) + { + // text is left of previous line. Was it a hanging indent? + if (!lastLineStartPosition.isParagraphStart()) + { + result = true; + } + } + else if (Math.abs(xGap) < positionWidth) + { + // current horizontal position is within 1/4 a char of the last + // linestart. We'll treat them as lined up. + if (lastLineStartPosition.isHangingIndent()) + { + position.setHangingIndent(); + } + else if (lastLineStartPosition.isParagraphStart()) + { + // check to see if the previous line looks like + // any of a number of standard list item formats + Pattern liPattern = matchListItemPattern(lastLineStartPosition); + if (liPattern != null) + { + Pattern currentPattern = matchListItemPattern(position); + if (liPattern == currentPattern) + { + result = true; + } + } + } + } + } + if (result) + { + position.setParagraphStart(); + } + } + + private float multiplyFloat(float value1, float value2) + { + // multiply 2 floats and truncate the resulting value to 3 decimal places + // to avoid wrong results when comparing with another float + return Math.round(value1 * value2 * 1000) / 1000f; + } + + /** + * writes the paragraph separator string to the output. + * + * @throws IOException if something went wrong + */ + protected void writeParagraphSeparator() throws IOException + { + writeParagraphEnd(); + writeParagraphStart(); + } + + /** + * Write something (if defined) at the start of a paragraph. + * + * @throws IOException if something went wrong + */ + protected void writeParagraphStart() throws IOException + { + if (inParagraph) + { + writeParagraphEnd(); + inParagraph = false; + } + output.write(getParagraphStart()); + inParagraph = true; + } + + /** + * Write something (if defined) at the end of a paragraph. + * + * @throws IOException if something went wrong + */ + protected void writeParagraphEnd() throws IOException + { + if (!inParagraph) + { + writeParagraphStart(); + } + output.write(getParagraphEnd()); + inParagraph = false; + } + + /** + * Write something (if defined) at the start of a page. + * + * @throws IOException if something went wrong + */ + protected void writePageStart() throws IOException + { + output.write(getPageStart()); + } + + /** + * Write something (if defined) at the end of a page. + * + * @throws IOException if something went wrong + */ + protected void writePageEnd() throws IOException + { + output.write(getPageEnd()); + } + + /** + * returns the list item Pattern object that matches the text at the specified PositionWrapper or null if the text + * does not match such a pattern. The list of Patterns tested against is given by the {@link #getListItemPatterns()} + * method. To add to the list, simply override that method (if sub-classing) or explicitly supply your own list + * using {@link #setListItemPatterns(List)}. + * + * @param pw position + * @return the matching pattern + */ + private Pattern matchListItemPattern(PositionWrapper pw) + { + TextPosition tp = pw.getTextPosition(); + String txt = tp.getUnicode(); + return matchPattern(txt, getListItemPatterns()); + } + + /** + * a list of regular expressions that match commonly used list item formats, i.e. bullets, numbers, letters, Roman + * numerals, etc. Not meant to be comprehensive. + */ + private static final String[] LIST_ITEM_EXPRESSIONS = { "\\.", "\\d+\\.", "\\[\\d+\\]", + "\\d+\\)", "[A-Z]\\.", "[a-z]\\.", "[A-Z]\\)", "[a-z]\\)", "[IVXL]+\\.", + "[ivxl]+\\.", }; + + private List listOfPatterns = null; + + /** + * use to supply a different set of regular expression patterns for matching list item starts. + * + * @param patterns list of patterns + */ + protected void setListItemPatterns(List patterns) + { + listOfPatterns = patterns; + } + + /** + * returns a list of regular expression Patterns representing different common list item formats. For example + * numbered items of form: + *
      + *
    1. some text
    2. + *
    3. more text
    4. + *
    + * or + *
      + *
    • some text
    • + *
    • more text
    • + *
    + * etc., all begin with some character pattern. The pattern "\\d+\." (matches "1.", "2.", ...) or "\[\\d+\]" + * (matches "[1]", "[2]", ...). + *

    + * This method returns a list of such regular expression Patterns. + * + * @return a list of Pattern objects. + */ + protected List getListItemPatterns() + { + if (listOfPatterns == null) + { + listOfPatterns = new ArrayList<>(); + for (String expression : LIST_ITEM_EXPRESSIONS) + { + Pattern p = Pattern.compile(expression); + listOfPatterns.add(p); + } + } + return listOfPatterns; + } + + /** + * iterates over the specified list of Patterns until it finds one that matches the specified string. Then returns + * the Pattern. + *

    + * Order of the supplied list of patterns is important as most common patterns should come first. Patterns should be + * strict in general, and all will be used with case sensitivity on. + *

    + * + * @param string the string to be searched + * @param patterns list of patterns + * @return matching pattern + */ + protected static Pattern matchPattern(String string, List patterns) + { + for (Pattern p : patterns) + { + if (p.matcher(string).matches()) + { + return p; + } + } + return null; + } + + /** + * Write a list of string containing a whole line of a document. + * + * @param line a list with the words of the given line + * @throws IOException if something went wrong + */ + private void writeLine(List line) + throws IOException + { + int numberOfStrings = line.size(); + for (int i = 0; i < numberOfStrings; i++) + { + WordWithTextPositions word = line.get(i); + writeString(word.getText(), word.getTextPositions()); + if (i < numberOfStrings - 1) + { + writeWordSeparator(); + } + } + } + + /** + * Normalize the given list of TextPositions. + * + * @param line list of TextPositions + * @return a list of strings, one string for every word + */ + private List normalize(List line) + { + List normalized = new LinkedList<>(); + StringBuilder lineBuilder = new StringBuilder(); + List wordPositions = new ArrayList<>(); + + for (LineItem item : line) + { + lineBuilder = normalizeAdd(normalized, lineBuilder, wordPositions, item); + } + + if (lineBuilder.length() > 0) + { + normalized.add(createWord(lineBuilder.toString(), wordPositions)); + } + return normalized; + } + + /** + * Handles the LTR and RTL direction of the given words. The whole implementation stands and falls with the given + * word. If the word is a full line, the results will be the best. If the word contains of single words or + * characters, the order of the characters in a word or words in a line may wrong, due to RTL and LTR marks and + * characters! + * + * Based on http://www.nesterovsky-bros.com/weblog/2013/07/28/VisualToLogicalConversionInJava.aspx + * + * @param word The word that shall be processed + * @return new word with the correct direction of the containing characters + */ + private String handleDirection(String word) + { + Bidi bidi = new Bidi(word, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); + + // if there is pure LTR text no need to process further + if (!bidi.isMixed() && bidi.getBaseLevel() == Bidi.DIRECTION_LEFT_TO_RIGHT) + { + return word; + } + + // collect individual bidi information + int runCount = bidi.getRunCount(); + byte[] levels = new byte[runCount]; + Integer[] runs = new Integer[runCount]; + + for (int i = 0; i < runCount; i++) + { + levels[i] = (byte)bidi.getRunLevel(i); + runs[i] = i; + } + + // reorder individual parts based on their levels + Bidi.reorderVisually(levels, 0, runs, 0, runCount); + + // collect the parts based on the direction within the run + StringBuilder result = new StringBuilder(); + + for (int i = 0; i < runCount; i++) + { + int index = runs[i]; + int start = bidi.getRunStart(index); + int end = bidi.getRunLimit(index); + + int level = levels[index]; + + if ((level & 1) != 0) + { + while (--end >= start) + { + char character = word.charAt(end); + if (Character.isMirrored(word.codePointAt(end))) + { + if (MIRRORING_CHAR_MAP.containsKey(character)) + { + result.append(MIRRORING_CHAR_MAP.get(character)); + } + else + { + result.append(character); + } + } + else + { + result.append(character); + } + } + } + else + { + result.append(word, start, end); + } + } + + return result.toString(); + } + + private static final Map MIRRORING_CHAR_MAP = new HashMap<>(); + + static + { + String path = "/org/apache/pdfbox/resources/text/BidiMirroring.txt"; + try (InputStream input = PDFTextStripper.class.getResourceAsStream(path)) + { + if (input != null) + { + parseBidiFile(input); + } + else + { + LOG.warn("Could not find '" + path + "', mirroring char map will be empty: "); + } + + } + catch (IOException e) + { + LOG.warn("Could not parse BidiMirroring.txt, mirroring char map will be empty: " + + e.getMessage(), e); + } + } + + /** + * This method parses the bidi file provided as inputstream. + * + * @param inputStream - The bidi file as inputstream + * @throws IOException if any line could not be read by the LineNumberReader + */ + private static void parseBidiFile(InputStream inputStream) throws IOException + { + LineNumberReader rd = new LineNumberReader(new InputStreamReader(inputStream)); + + do + { + String s = rd.readLine(); + if (s == null) + { + break; + } + + int comment = s.indexOf('#'); // ignore comments + if (comment != -1) + { + s = s.substring(0, comment); + } + + if (s.length() < 2) + { + continue; + } + + StringTokenizer st = new StringTokenizer(s, ";"); + int nFields = st.countTokens(); + Character[] fields = new Character[nFields]; + for (int i = 0; i < nFields; i++) + { + fields[i] = (char) Integer.parseInt(st.nextToken().trim(), 16); + } + + if (fields.length == 2) + { + // initialize the MIRRORING_CHAR_MAP + MIRRORING_CHAR_MAP.put(fields[0], fields[1]); + } + } + while (true); + } + + /** + * Used within {@link #normalize(List)} to create a single {@link WordWithTextPositions} entry. + */ + private WordWithTextPositions createWord(String word, List wordPositions) + { + return new WordWithTextPositions(normalizeWord(word), wordPositions); + } + + /** + * Normalize certain Unicode characters. For example, convert the single "fi" ligature to "f" and "i". Also + * normalises Arabic and Hebrew presentation forms. + * + * @param word Word to normalize + * @return Normalized word + */ + private String normalizeWord(String word) + { + StringBuilder builder = null; + int p = 0; + int q = 0; + int strLength = word.length(); + for (; q < strLength; q++) + { + // We only normalize if the codepoint is in a given range. + // Otherwise, NFKC converts too many things that would cause + // confusion. For example, it converts the micro symbol in + // extended Latin to the value in the Greek script. We normalize + // the Unicode Alphabetic and Arabic A&B Presentation forms. + char c = word.charAt(q); + if (0xFB00 <= c && c <= 0xFDFF || 0xFE70 <= c && c <= 0xFEFF) + { + if (builder == null) + { + builder = new StringBuilder(strLength * 2); + } + builder.append(word.substring(p, q)); + // Some fonts map U+FDF2 differently than the Unicode spec. + // They add an extra U+0627 character to compensate. + // This removes the extra character for those fonts. + if (c == 0xFDF2 && q > 0 + && (word.charAt(q - 1) == 0x0627 || word.charAt(q - 1) == 0xFE8D)) + { + builder.append("\u0644\u0644\u0647"); + } + else + { + // Trim because some decompositions have an extra space, such as U+FC5E + builder.append(Normalizer + .normalize(word.substring(q, q + 1), Normalizer.Form.NFKC).trim()); + } + p = q + 1; + } + } + if (builder == null) + { + return handleDirection(word); + } + else + { + builder.append(word.substring(p, q)); + return handleDirection(builder.toString()); + } + } + + /** + * Used within {@link #normalize(List)} to handle a {@link TextPosition}. + * + * @return The StringBuilder that must be used when calling this method. + */ + private StringBuilder normalizeAdd(List normalized, + StringBuilder lineBuilder, List wordPositions, LineItem item) + { + if (item.isWordSeparator()) + { + normalized.add( + createWord(lineBuilder.toString(), new ArrayList<>(wordPositions))); + lineBuilder = new StringBuilder(); + wordPositions.clear(); + } + else + { + TextPosition text = item.getTextPosition(); + lineBuilder.append(text.getUnicode()); + wordPositions.add(text); + } + return lineBuilder; + } + + /** + * internal marker class. Used as a place holder in a line of TextPositions. + */ + private static final class LineItem + { + public static LineItem WORD_SEPARATOR = new LineItem(); + + public static LineItem getWordSeparator() + { + return WORD_SEPARATOR; + } + + private final TextPosition textPosition; + + private LineItem() + { + textPosition = null; + } + + LineItem(TextPosition textPosition) + { + this.textPosition = textPosition; + } + + public TextPosition getTextPosition() + { + return textPosition; + } + + public boolean isWordSeparator() + { + return textPosition == null; + } + } + + /** + * Internal class that maps strings to lists of {@link TextPosition} arrays. Note that the number of entries in that + * list may differ from the number of characters in the string due to normalization. + * + * @author Axel Dörfler + */ + private static final class WordWithTextPositions + { + String text; + List textPositions; + + WordWithTextPositions(String word, List positions) + { + text = word; + textPositions = positions; + } + + public String getText() + { + return text; + } + + public List getTextPositions() + { + return textPositions; + } + } + + /** + * wrapper of TextPosition that adds flags to track status as linestart and paragraph start positions. + *

    + * This is implemented as a wrapper since the TextPosition class doesn't provide complete access to its state fields + * to subclasses. Also, conceptually TextPosition is immutable while these flags need to be set post-creation so it + * makes sense to put these flags in this separate class. + *

    + * + * @author m.martinez@ll.mit.edu + */ + private static final class PositionWrapper + { + private boolean isLineStart = false; + private boolean isParagraphStart = false; + private boolean isPageBreak = false; + private boolean isHangingIndent = false; + private boolean isArticleStart = false; + + private TextPosition position = null; + + /** + * Constructs a PositionWrapper around the specified TextPosition object. + * + * @param position the text position. + */ + PositionWrapper(TextPosition position) + { + this.position = position; + } + + /** + * Returns the underlying TextPosition object. + * + * @return the text position + */ + public TextPosition getTextPosition() + { + return position; + } + + public boolean isLineStart() + { + return isLineStart; + } + + /** + * Sets the isLineStart() flag to true. + */ + public void setLineStart() + { + this.isLineStart = true; + } + + public boolean isParagraphStart() + { + return isParagraphStart; + } + + /** + * sets the isParagraphStart() flag to true. + */ + public void setParagraphStart() + { + this.isParagraphStart = true; + } + + public boolean isArticleStart() + { + return isArticleStart; + } + + /** + * Sets the isArticleStart() flag to true. + */ + public void setArticleStart() + { + this.isArticleStart = true; + } + + public boolean isPageBreak() + { + return isPageBreak; + } + + /** + * Sets the isPageBreak() flag to true. + */ + public void setPageBreak() + { + this.isPageBreak = true; + } + + public boolean isHangingIndent() + { + return isHangingIndent; + } + + /** + * Sets the isHangingIndent() flag to true. + */ + public void setHangingIndent() + { + this.isHangingIndent = true; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripperByArea.java b/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripperByArea.java new file mode 100644 index 00000000000..4c0096019eb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripperByArea.java @@ -0,0 +1,167 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.text; + +import java.awt.geom.Rectangle2D; +import java.io.IOException; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.pdfbox.pdmodel.PDPage; + +/** + * This will extract text from a specified region in the PDF. + * + * @author Ben Litchfield + */ +public class PDFTextStripperByArea extends PDFTextStripper +{ + private final List regions = new ArrayList<>(); + private final Map regionArea = new HashMap<>(); + private final Map>> regionCharacterList + = new HashMap<>(); + private final Map regionText = new HashMap<>(); + + /** + * Constructor. + * @throws IOException If there is an error loading properties. + */ + public PDFTextStripperByArea() throws IOException + { + super.setShouldSeparateByBeads(false); + } + + /** + * This method does nothing in this derived class, because beads and regions are incompatible. Beads are + * ignored when stripping by area. + * + * @param aShouldSeparateByBeads The new grouping of beads. + */ + @Override + public final void setShouldSeparateByBeads(boolean aShouldSeparateByBeads) + { + } + + /** + * Add a new region to group text by. + * + * @param regionName The name of the region. + * @param rect The rectangle area to retrieve the text from. + */ + public void addRegion( String regionName, Rectangle2D rect ) + { + regions.add( regionName ); + regionArea.put( regionName, rect ); + } + + /** + * Delete a region to group text by. If the region does not exist, this method does nothing. + * + * @param regionName The name of the region to delete. + */ + public void removeRegion(String regionName) + { + regions.remove(regionName); + regionArea.remove(regionName); + } + + /** + * Get the list of regions that have been setup. + * + * @return A list of java.lang.String objects to identify the region names. + */ + public List getRegions() + { + return regions; + } + + /** + * Get the text for the region, this should be called after extractRegions(). + * + * @param regionName The name of the region to get the text from. + * @return The text that was identified in that region. + */ + public String getTextForRegion( String regionName ) + { + StringWriter text = regionText.get( regionName ); + return text.toString(); + } + + /** + * Process the page to extract the region text. + * + * @param page The page to extract the regions from. + * @throws IOException If there is an error while extracting text. + */ + public void extractRegions( PDPage page ) throws IOException + { + for (String region : regions) + { + setStartPage(getCurrentPageNo()); + setEndPage(getCurrentPageNo()); + //reset the stored text for the region so this class + //can be reused. + String regionName = region; + ArrayList> regionCharactersByArticle = new ArrayList<>(); + regionCharactersByArticle.add( new ArrayList() ); + regionCharacterList.put( regionName, regionCharactersByArticle ); + regionText.put( regionName, new StringWriter() ); + } + + if( page.hasContents() ) + { + processPage( page ); + } + } + + + /** + * {@inheritDoc} + */ + @Override + protected void processTextPosition( TextPosition text ) + { + for (String region : regionArea.keySet()) + { + Rectangle2D rect = regionArea.get( region ); + if( rect.contains( text.getX(), text.getY() ) ) + { + charactersByArticle = regionCharacterList.get( region ); + super.processTextPosition( text ); + } + } + } + + + /** + * This will print the processed page text to the output stream. + * + * @throws IOException If there is an error writing the text. + */ + @Override + protected void writePage() throws IOException + { + for (String region : regionArea.keySet()) + { + charactersByArticle = regionCharacterList.get( region ); + output = regionText.get( region ); + super.writePage(); + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java b/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java new file mode 100644 index 00000000000..747efdc792f --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/text/TextPosition.java @@ -0,0 +1,874 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.text; + +import java.text.Normalizer; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.util.Matrix; + +/** + * This represents a string and a position on the screen of those characters. + * + * @author Ben Litchfield + */ +public final class TextPosition +{ + private static final Log LOG = LogFactory.getLog(TextPosition.class); + + private static final Map DIACRITICS = createDiacritics(); + + // text matrix for the start of the text object, coordinates are in display units + // and have not been adjusted + private final Matrix textMatrix; + + // ending X and Y coordinates in display units + private final float endX; + private final float endY; + + private final float maxHeight; // maximum height of text, in display units + private final int rotation; // 0, 90, 180, 270 degrees of page rotation + private final float x; + private final float y; + private final float pageHeight; + private final float pageWidth; + + private final float widthOfSpace; // width of a space, in display units + + private final int[] charCodes; // internal PDF character codes + private final PDFont font; + private final float fontSize; + private final int fontSizePt; + + // mutable + private float[] widths; + private String unicode; + private float direction = -1; + + /** + * Constructor. + * + * @param pageRotation rotation of the page that the text is located in + * @param pageWidth width of the page that the text is located in + * @param pageHeight height of the page that the text is located in + * @param textMatrix text rendering matrix for start of text (in display units) + * @param endX x coordinate of the end position + * @param endY y coordinate of the end position + * @param maxHeight Maximum height of text (in display units) + * @param individualWidth The width of the given character/string. (in text units) + * @param spaceWidth The width of the space character. (in display units) + * @param unicode The string of Unicode characters to be displayed. + * @param charCodes An array of the internal PDF character codes for the glyphs in this text. + * @param font The current font for this text position. + * @param fontSize The new font size. + * @param fontSizeInPt The font size in pt units (see {@link #getFontSizeInPt()} for details). + */ + public TextPosition(int pageRotation, float pageWidth, float pageHeight, Matrix textMatrix, + float endX, float endY, float maxHeight, float individualWidth, + float spaceWidth, String unicode, int[] charCodes, PDFont font, + float fontSize, int fontSizeInPt) + { + this.textMatrix = textMatrix; + + this.endX = endX; + this.endY = endY; + + int rotationAngle = pageRotation; + this.rotation = rotationAngle; + + this.maxHeight = maxHeight; + this.pageHeight = pageHeight; + this.pageWidth = pageWidth; + + this.widths = new float[] { individualWidth }; + this.widthOfSpace = spaceWidth; + this.unicode = unicode; + this.charCodes = charCodes; + this.font = font; + this.fontSize = fontSize; + this.fontSizePt = fontSizeInPt; + + x = getXRot(rotationAngle); + if (rotationAngle == 0 || rotationAngle == 180) + { + y = this.pageHeight - getYLowerLeftRot(rotationAngle); + } + else + { + y = this.pageWidth - getYLowerLeftRot(rotationAngle); + } + } + + // Adds non-decomposing diacritics to the hash with their related combining character. + // These are values that the unicode spec claims are equivalent but are not mapped in the form + // NFKC normalization method. Determined by going through the Combining Diacritical Marks + // section of the Unicode spec and identifying which characters are not mapped to by the + // normalization. + private static Map createDiacritics() + { + Map map = new HashMap<>(31); + map.put(0x0060, "\u0300"); + map.put(0x02CB, "\u0300"); + map.put(0x0027, "\u0301"); + map.put(0x02B9, "\u0301"); + map.put(0x02CA, "\u0301"); + map.put(0x005e, "\u0302"); + map.put(0x02C6, "\u0302"); + map.put(0x007E, "\u0303"); + map.put(0x02C9, "\u0304"); + map.put(0x00B0, "\u030A"); + map.put(0x02BA, "\u030B"); + map.put(0x02C7, "\u030C"); + map.put(0x02C8, "\u030D"); + map.put(0x0022, "\u030E"); + map.put(0x02BB, "\u0312"); + map.put(0x02BC, "\u0313"); + map.put(0x0486, "\u0313"); + map.put(0x055A, "\u0313"); + map.put(0x02BD, "\u0314"); + map.put(0x0485, "\u0314"); + map.put(0x0559, "\u0314"); + map.put(0x02D4, "\u031D"); + map.put(0x02D5, "\u031E"); + map.put(0x02D6, "\u031F"); + map.put(0x02D7, "\u0320"); + map.put(0x02B2, "\u0321"); + map.put(0x02CC, "\u0329"); + map.put(0x02B7, "\u032B"); + map.put(0x02CD, "\u0331"); + map.put(0x005F, "\u0332"); + map.put(0x204E, "\u0359"); + return map; + } + + /** + * Return the string of characters stored in this object. The length can be different than the + * CharacterCodes length e.g. if ligatures are used ("fi", "fl", "ffl") where one glyph + * represents several unicode characters. + * + * @return The string on the screen. + */ + public String getUnicode() + { + return unicode; + } + + /** + * Return the internal PDF character codes of the glyphs in this text. + * + * @return an array of internal PDF character codes + */ + public int[] getCharacterCodes() + { + return charCodes; + } + + /** + * The matrix containing the starting text position and scaling. Despite the name, it is not the + * text matrix set by the "Tm" operator, it is really the effective text rendering matrix (which + * is dependent on the current transformation matrix (set by the "cm" operator), the text matrix + * (set by the "Tm" operator), the font size (set by the "Tf" operator) and the page cropbox). + * + * @return The Matrix containing the starting text position + */ + public Matrix getTextMatrix() + { + return textMatrix; + } + + /** + * Return the direction/orientation of the string in this object based on its text matrix. + * @return The direction of the text (0, 90, 180, or 270) + */ + public float getDir() + { + if (direction < 0) + { + float a = textMatrix.getScaleY(); + float b = textMatrix.getShearY(); + float c = textMatrix.getShearX(); + float d = textMatrix.getScaleX(); + + // 12 0 left to right + // 0 12 + if (a > 0 && Math.abs(b) < d && Math.abs(c) < a && d > 0) + { + direction = 0; + } + // -12 0 right to left (upside down) + // 0 -12 + else if (a < 0 && Math.abs(b) < Math.abs(d) && Math.abs(c) < Math.abs(a) && d < 0) + { + direction = 180; + } + // 0 12 up + // -12 0 + else if (Math.abs(a) < Math.abs(c) && b > 0 && c < 0 && Math.abs(d) < b) + { + direction = 90; + } + // 0 -12 down + // 12 0 + else if (Math.abs(a) < c && b < 0 && c > 0 && Math.abs(d) < Math.abs(b)) + { + direction = 270; + } + else + { + direction = 0; + } + } + return direction; + } + + /** + * Return the X starting coordinate of the text, adjusted by the given rotation amount. + * The rotation adjusts where the 0,0 location is relative to the text. + * + * @param rotation Rotation to apply (0, 90, 180, or 270). 0 will perform no adjustments. + * @return X coordinate + */ + private float getXRot(float rotation) + { + if (Float.compare(rotation, 0) == 0) + { + return textMatrix.getTranslateX(); + } + else if (Float.compare(rotation, 90) == 0) + { + return textMatrix.getTranslateY(); + } + else if (Float.compare(rotation, 180) == 0) + { + return pageWidth - textMatrix.getTranslateX(); + } + else if (Float.compare(rotation, 270) == 0) + { + return pageHeight - textMatrix.getTranslateY(); + } + return 0; + } + + /** + * This will get the page rotation adjusted x position of the character. + * This is adjusted based on page rotation so that the upper left is 0,0. + * + * @return The x coordinate of the character. + */ + public float getX() + { + return x; + } + + /** + * This will get the text direction adjusted x position of the character. + * This is adjusted based on text direction so that the first character + * in that direction is in the upper left at 0,0. + * + * @return The x coordinate of the text. + */ + public float getXDirAdj() + { + return getXRot(getDir()); + } + + /** + * This will get the y position of the character with 0,0 in lower left. + * This will be adjusted by the given rotation. + * + * @param rotation Rotation to apply to text to adjust the 0,0 location (0,90,180,270) + * @return The y coordinate of the text + */ + private float getYLowerLeftRot(float rotation) + { + if (Float.compare(rotation, 0) == 0) + { + return textMatrix.getTranslateY(); + } + else if (Float.compare(rotation, 90) == 0) + { + return pageWidth - textMatrix.getTranslateX(); + } + else if (Float.compare(rotation, 180) == 0) + { + return pageHeight - textMatrix.getTranslateY(); + } + else if (Float.compare(rotation, 270) == 0) + { + return textMatrix.getTranslateX(); + } + return 0; + } + + /** + * This will get the y position of the text, adjusted so that 0,0 is upper left and it is + * adjusted based on the page rotation. + * + * @return The adjusted y coordinate of the character. + */ + public float getY() + { + return y; + } + + /** + * This will get the y position of the text, adjusted so that 0,0 is upper left and it is + * adjusted based on the text direction. + * + * @return The adjusted y coordinate of the character. + */ + public float getYDirAdj() + { + float dir = getDir(); + // some PDFBox code assumes that the 0,0 point is in upper left, not lower left + if (Float.compare(dir, 0) == 0 || Float.compare(dir, 180) == 0) + { + return pageHeight - getYLowerLeftRot(dir); + } + else + { + return pageWidth - getYLowerLeftRot(dir); + } + } + + /** + * Get the length or width of the text, based on a given rotation. + * + * @param rotation Rotation that was used to determine coordinates (0,90,180,270) + * @return Width of text in display units + */ + private float getWidthRot(float rotation) + { + if (Float.compare(rotation, 90) == 0 || Float.compare(rotation, 270) == 0) + { + return Math.abs(endY - textMatrix.getTranslateY()); + } + else + { + return Math.abs(endX - textMatrix.getTranslateX()); + } + } + + /** + * This will get the width of the string when page rotation adjusted coordinates are used. + * + * @return The width of the text in display units. + */ + public float getWidth() + { + return getWidthRot(rotation); + } + + /** + * This will get the width of the string when text direction adjusted coordinates are used. + * + * @return The width of the text in display units. + */ + public float getWidthDirAdj() + { + return getWidthRot(getDir()); + } + + /** + * This will get the maximum height of all characters in this string. + * + * @return The maximum height of all characters in this string. + */ + public float getHeight() + { + return maxHeight; + } + + /** + * This will get the maximum height of all characters in this string. + * + * @return The maximum height of all characters in this string. + */ + public float getHeightDir() + { + // this is not really a rotation-dependent calculation, but this is defined for symmetry + return maxHeight; + } + + /** + * This will get the font size that has been set with the "Tf" operator (Set text font and + * size). When the text is rendered, it may appear bigger or smaller depending on the current + * transformation matrix (set by the "cm" operator) and the text matrix (set by the "Tm" + * operator). + * + * @return The font size. + */ + public float getFontSize() + { + return fontSize; + } + + /** + * This will get the font size in pt. To get this size we have to multiply the font size from + * {@link #getFontSize() getFontSize()} with the text matrix (set by the "Tm" operator) + * horizontal scaling factor and truncate the result to integer. The actual rendering may appear + * bigger or smaller depending on the current transformation matrix (set by the "cm" operator). + * To get the size in rendering, use {@link #getXScale() getXScale()}. + * + * @return The font size in pt. + */ + public float getFontSizeInPt() + { + return fontSizePt; + } + + /** + * This will get the font for the text being drawn. + * + * @return The font size. + */ + public PDFont getFont() + { + return font; + } + + /** + * This will get the width of a space character. This is useful for some algorithms such as the + * text stripper, that need to know the width of a space character. + * + * @return The width of a space character. + */ + public float getWidthOfSpace() + { + return widthOfSpace; + } + + /** + * This will get the X scaling factor. This is dependent on the current transformation matrix + * (set by the "cm" operator), the text matrix (set by the "Tm" operator) and the font size (set + * by the "Tf" operator). + * + * @return The X scaling factor. + */ + public float getXScale() + { + return textMatrix.getScalingFactorX(); + } + + /** + * This will get the Y scaling factor. This is dependent on the current transformation matrix + * (set by the "cm" operator), the text matrix (set by the "Tm" operator) and the font size (set + * by the "Tf" operator). + * + * @return The Y scaling factor. + */ + public float getYScale() + { + return textMatrix.getScalingFactorY(); + } + + /** + * Get the widths of each individual character. + * + * @return An array that has the same length as the CharacterCodes array. + */ + public float[] getIndividualWidths() + { + return widths; + } + + /** + * Determine if this TextPosition logically contains another (i.e. they overlap and should be + * rendered on top of each other). + * + * @param tp2 The other TestPosition to compare against + * @return True if tp2 is contained in the bounding box of this text. + */ + public boolean contains(TextPosition tp2) + { + double thisXstart = getXDirAdj(); + double thisWidth = getWidthDirAdj(); + double thisXend = thisXstart + thisWidth; + + double tp2Xstart = tp2.getXDirAdj(); + double tp2Xend = tp2Xstart + tp2.getWidthDirAdj(); + + // no X overlap at all so return as soon as possible + if (tp2Xend <= thisXstart || tp2Xstart >= thisXend) + { + return false; + } + + // no Y overlap at all so return as soon as possible. Note: 0.0 is in the upper left and + // y-coordinate is top of TextPosition + double thisYstart = getYDirAdj(); + double tp2Ystart = tp2.getYDirAdj(); + if (tp2Ystart + tp2.getHeightDir() < thisYstart || + tp2Ystart > thisYstart + getHeightDir()) + { + return false; + } + // we're going to calculate the percentage of overlap, if its less than a 15% x-coordinate + // overlap then we'll return false because its negligible, .15 was determined by trial and + // error in the regression test files + else if (tp2Xstart > thisXstart && tp2Xend > thisXend) + { + double overlap = thisXend - tp2Xstart; + double overlapPercent = overlap/thisWidth; + return overlapPercent > .15; + } + else if (tp2Xstart < thisXstart && tp2Xend < thisXend) + { + double overlap = tp2Xend - thisXstart; + double overlapPercent = overlap/thisWidth; + return overlapPercent > .15; + } + return true; + } + + /** + * Merge a single character TextPosition into the current object. This is to be used only for + * cases where we have a diacritic that overlaps an existing TextPosition. In a graphical + * display, we could overlay them, but for text extraction we need to merge them. Use the + * contains() method to test if two objects overlap. + * + * @param diacritic TextPosition to merge into the current TextPosition. + */ + public void mergeDiacritic(TextPosition diacritic) + { + if (diacritic.getUnicode().length() > 1) + { + return; + } + + float diacXStart = diacritic.getXDirAdj(); + float diacXEnd = diacXStart + diacritic.widths[0]; + + float currCharXStart = getXDirAdj(); + + int strLen = unicode.length(); + boolean wasAdded = false; + + for (int i = 0; i < strLen && !wasAdded; i++) + { + if (i >= widths.length) + { + LOG.info("diacritic " + diacritic.getUnicode() + " on ligature " + unicode + + " is not supported yet and is ignored (PDFBOX-2831)"); + break; + } + float currCharXEnd = currCharXStart + widths[i]; + + // this is the case where there is an overlap of the diacritic character with the + // current character and the previous character. If no previous character, just append + // the diacritic after the current one + if (diacXStart < currCharXStart && diacXEnd <= currCharXEnd) + { + if (i == 0) + { + insertDiacritic(i, diacritic); + } + else + { + float distanceOverlapping1 = diacXEnd - currCharXStart; + float percentage1 = distanceOverlapping1/widths[i]; + + float distanceOverlapping2 = currCharXStart - diacXStart; + float percentage2 = distanceOverlapping2/widths[i - 1]; + + if (percentage1 >= percentage2) + { + insertDiacritic(i, diacritic); + } + else + { + insertDiacritic(i - 1, diacritic); + } + } + wasAdded = true; + } + // diacritic completely covers this character and therefore we assume that this is the + // character the diacritic belongs to + else if (diacXStart < currCharXStart && diacXEnd > currCharXEnd) + { + insertDiacritic(i, diacritic); + wasAdded = true; + } + // otherwise, The diacritic modifies this character because its completely + // contained by the character width + else if (diacXStart >= currCharXStart && diacXEnd <= currCharXEnd) + { + insertDiacritic(i, diacritic); + wasAdded = true; + } + // last character in the TextPosition so we add diacritic to the end + else if (diacXStart >= currCharXStart && diacXEnd > currCharXEnd && i == strLen - 1) + { + insertDiacritic(i, diacritic); + wasAdded = true; + } + + // couldn't find anything useful so we go to the next character in the TextPosition + currCharXStart += widths[i]; + } + } + + /** + * Inserts the diacritic TextPosition to the str of this TextPosition and updates the widths + * array to include the extra character width. + * + * @param i current character + * @param diacritic The diacritic TextPosition + */ + private void insertDiacritic(int i, TextPosition diacritic) + { + StringBuilder sb = new StringBuilder(); + sb.append(unicode.substring(0, i)); + + float[] widths2 = new float[widths.length + 1]; + System.arraycopy(widths, 0, widths2, 0, i); + + // Unicode combining diacritics always go after the base character, regardless of whether + // the string is in presentation order or logical order + sb.append(unicode.charAt(i)); + widths2[i] = widths[i]; + sb.append(combineDiacritic(diacritic.getUnicode())); + widths2[i + 1] = 0; + + // get the rest of the string + sb.append(unicode.substring(i + 1, unicode.length())); + System.arraycopy(widths, i + 1, widths2, i + 2, widths.length - i - 1); + + unicode = sb.toString(); + widths = widths2; + } + + /** + * Combine the diacritic, for example, convert non-combining diacritic characters to their + * combining counterparts. + * + * @param str String to normalize + * @return Normalized string + */ + private String combineDiacritic(String str) + { + // Unicode contains special combining forms of the diacritic characters which we want to use + int codePoint = str.codePointAt(0); + + // convert the characters not defined in the Unicode spec + if (DIACRITICS.containsKey(codePoint)) + { + return DIACRITICS.get(codePoint); + } + else + { + return Normalizer.normalize(str, Normalizer.Form.NFKC).trim(); + } + } + + /** + * @return True if the current character is a diacritic char. + */ + public boolean isDiacritic() + { + String text = this.getUnicode(); + if (text.length() != 1) + { + return false; + } + if ("ー".equals(text)) + { + // PDFBOX-3833: ー is not a real diacritic like ¨ or ˆ, it just changes the + // pronunciation of the previous sound, and is printed after the previous glyph + // http://www.japanesewithanime.com/2017/04/prolonged-sound-mark.html + // Ignoring it as diacritic avoids trouble if it slightly overlaps with the next glyph. + return false; + } + int type = Character.getType(text.charAt(0)); + return type == Character.NON_SPACING_MARK || + type == Character.MODIFIER_SYMBOL || + type == Character.MODIFIER_LETTER; + + } + + /** + * Show the string data for this text position. + * + * @return A human readable form of this object. + */ + @Override + public String toString() + { + return getUnicode(); + } + + /** + * This will get the x coordinate of the end position. This is the unadjusted value passed into + * the constructor. + * + * @return The unadjusted x coordinate of the end position + */ + public float getEndX() + { + return endX; + } + + /** + * This will get the y coordinate of the end position. This is the unadjusted value passed into + * the constructor. + * + * @return The unadjusted y coordinate of the end position + */ + public float getEndY() + { + return endY; + } + + /** + * This will get the rotation of the page that the text is located in. This is the unadjusted + * value passed into the constructor. + * + * @return The unadjusted rotation of the page that the text is located in + */ + public int getRotation() + { + return rotation; + } + + /** + * This will get the height of the page that the text is located in. This is the unadjusted + * value passed into the constructor. + * + * @return The unadjusted height of the page that the text is located in + */ + public float getPageHeight() + { + return pageHeight; + } + + /** + * This will get the width of the page that the text is located in. This is the unadjusted value + * passed into the constructor. + * + * @return The unadjusted width of the page that the text is located in + */ + public float getPageWidth() + { + return pageWidth; + } + + @Override + public boolean equals(Object o) + { + if (this == o) + { + return true; + } + if (!(o instanceof TextPosition)) + { + return false; + } + + TextPosition that = (TextPosition) o; + + if (Float.compare(that.endX, endX) != 0) + { + return false; + } + if (Float.compare(that.endY, endY) != 0) + { + return false; + } + if (Float.compare(that.maxHeight, maxHeight) != 0) + { + return false; + } + if (rotation != that.rotation) + { + return false; + } + if (Float.compare(that.x, x) != 0) + { + return false; + } + if (Float.compare(that.y, y) != 0) + { + return false; + } + if (Float.compare(that.pageHeight, pageHeight) != 0) + { + return false; + } + if (Float.compare(that.pageWidth, pageWidth) != 0) + { + return false; + } + if (Float.compare(that.widthOfSpace, widthOfSpace) != 0) + { + return false; + } + if (Float.compare(that.fontSize, fontSize) != 0) + { + return false; + } + if (fontSizePt != that.fontSizePt) + { + return false; + } + if (Float.compare(that.direction, direction) != 0) + { + return false; + } + if (textMatrix != null ? !textMatrix.equals(that.textMatrix) : that.textMatrix != null) + { + return false; + } + if (!Arrays.equals(charCodes, that.charCodes)) + { + return false; + } + if (font != null ? !font.equals(that.font) : that.font != null) + { + return false; + } + if (!Arrays.equals(widths, that.widths)) + { + return false; + } + return unicode != null ? unicode.equals(that.unicode) : that.unicode == null; + + } + + @Override + public int hashCode() + { + int result = textMatrix != null ? textMatrix.hashCode() : 0; + result = 31 * result + Float.floatToIntBits(endX); + result = 31 * result + Float.floatToIntBits(endY); + result = 31 * result + Float.floatToIntBits(maxHeight); + result = 31 * result + rotation; + result = 31 * result + Float.floatToIntBits(x); + result = 31 * result + Float.floatToIntBits(y); + result = 31 * result + Float.floatToIntBits(pageHeight); + result = 31 * result + Float.floatToIntBits(pageWidth); + result = 31 * result + Float.floatToIntBits(widthOfSpace); + result = 31 * result + Arrays.hashCode(charCodes); + result = 31 * result + (font != null ? font.hashCode() : 0); + result = 31 * result + Float.floatToIntBits(fontSize); + result = 31 * result + fontSizePt; + return result; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/text/TextPositionComparator.java b/pdfbox/src/main/java/org/apache/pdfbox/text/TextPositionComparator.java new file mode 100644 index 00000000000..afbc1112cd4 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/text/TextPositionComparator.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.text; + +import java.util.Comparator; + +/** + * This class is a comparator for TextPosition operators. It handles + * pages with text in different directions by grouping the text based + * on direction and sorting in that direction. This allows continuous text + * in a given direction to be more easily grouped together. + * + * @author Ben Litchfield + */ +public class TextPositionComparator implements Comparator +{ + @Override + public int compare(TextPosition pos1, TextPosition pos2) + { + // only compare text that is in the same direction + int cmp1 = Float.compare(pos1.getDir(), pos2.getDir()); + if (cmp1 != 0) + { + return cmp1; + } + + // get the text direction adjusted coordinates + float x1 = pos1.getXDirAdj(); + float x2 = pos2.getXDirAdj(); + + float pos1YBottom = pos1.getYDirAdj(); + float pos2YBottom = pos2.getYDirAdj(); + + // note that the coordinates have been adjusted so 0,0 is in upper left + float pos1YTop = pos1YBottom - pos1.getHeightDir(); + float pos2YTop = pos2YBottom - pos2.getHeightDir(); + + float yDifference = Math.abs(pos1YBottom - pos2YBottom); + + // we will do a simple tolerance comparison + if (yDifference < .1 || + pos2YBottom >= pos1YTop && pos2YBottom <= pos1YBottom || + pos1YBottom >= pos2YTop && pos1YBottom <= pos2YBottom) + { + return Float.compare(x1, x2); + } + else if (pos1YBottom < pos2YBottom) + { + return -1; + } + else + { + return 1; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/Charsets.java b/pdfbox/src/main/java/org/apache/pdfbox/util/Charsets.java new file mode 100644 index 00000000000..c11037ebc64 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/Charsets.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.util; + +import java.nio.charset.Charset; + +/** + * Utility class providing common Charsets used in PDFBox. + * + * @author John Hewson + */ +public final class Charsets +{ + private Charsets() {} + + /*** ASCII charset */ + public static final Charset US_ASCII = Charset.forName("US-ASCII"); + + /*** UTF-16BE charset */ + public static final Charset UTF_16BE = Charset.forName("UTF-16BE"); + + /*** UTF-16LE charset */ + public static final Charset UTF_16LE = Charset.forName("UTF-16LE"); + + /*** ISO-8859-1 charset */ + public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); + + /*** Windows-1252 charset */ + public static final Charset WINDOWS_1252 = Charset.forName("Windows-1252"); + + /*** UTF-8 charset */ + public static final Charset UTF_8 = Charset.forName("UTF-8"); +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/DateConverter.java b/pdfbox/src/main/java/org/apache/pdfbox/util/DateConverter.java new file mode 100644 index 00000000000..a53287045ce --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/DateConverter.java @@ -0,0 +1,738 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Locale; +import java.util.SimpleTimeZone; +import java.util.TimeZone; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.apache.pdfbox.cos.COSString; + +/* + * Date format is described in PDF Reference 1.7 section 3.8.2 + * (www.adobe.com/devnet/acrobat/pdfs/pdf_reference_1-7.pdf) + * and also in PDF 32000-1:2008 + * (http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf)) + * although the latter inexplicably omits the trailing apostrophe. + * + * The interpretation of dates without timezones is unclear. + * The code below assumes that such dates are in UTC+00 (aka GMT). + * This is in keeping with the PDF Reference's assertion that: + * numerical fields default to zero values. + * However, the Reference does go on to make the cryptic remark: + * If no UT information is specified, the relationship of the specified + * time to UT is considered to be unknown. Whether or not the time + * zone is known, the rest of the date should be specified in local time. + * I understand this to refer to _creating_ a pdf date value. That is, + * code that can get the wall clock time and cannot get the timezone + * should write the wall clock time with a time zone of zero. + * When _parsing_ a PDF date, the statement talks about "the rest of the date" + * being local time, thus explicitly excluding the use of the local time + * for the time zone. +*/ + +/** + * Converts dates to strings and back using the PDF date standard + * in section 3.8.2 of PDF Reference 1.7. + * + * @author Ben Litchfield + * @author Fred Hansen + * + * TODO Move members of this class elsewhere for shared use in pdfbox and xmpbox. + */ +public final class DateConverter +{ + private static final Log LOG = LogFactory.getLog(DateConverter.class); + + private DateConverter() + { + } + + // milliseconds/1000 = seconds; seconds / 60 = minutes; minutes/60 = hours + private static final int MINUTES_PER_HOUR = 60; + private static final int SECONDS_PER_MINUTE = 60; + private static final int MILLIS_PER_MINUTE = SECONDS_PER_MINUTE*1000; + private static final int MILLIS_PER_HOUR = MINUTES_PER_HOUR * MILLIS_PER_MINUTE; + private static final int HALF_DAY = 12 * MINUTES_PER_HOUR * MILLIS_PER_MINUTE, DAY = 2*HALF_DAY; + + /* + * The Date format is supposed to be the PDF_DATE_FORMAT, but other + * forms appear. These lists offer alternatives to be tried + * if parseBigEndianDate fails. + * + * The time zone offset generally trails the date string, so it is processed + * separately with parseTZoffset. (This does not preclude having time + * zones in the elements below; one does.) + * + * Alas, SimpleDateFormat is badly non-reentrant -- it modifies its + * calendar field (PDFBox-402), so these lists are strings to create + * SimpleDate format as needed. + * + * Some past entries have been elided because they duplicate existing + * entries. See the API for SimpleDateFormat, which says + * "For parsing, the number of pattern letters is ignored + * unless it's needed to separate two adjacent fields." + * + * toCalendar(String, String[]) tests to see that the entire input text + * has been consumed. Therefore the ordering of formats is important. + * If one format begins with the entirety of another, the longer + * must precede the other in the list. + * + * HH is for 0-23 hours and hh for 1-12 hours; an "a" field must follow "hh" + * Where year is yy, four digit years are accepted + * and two digit years are converted to four digits in the range + * [thisyear-79...thisyear+20] + */ + private static final String[] ALPHA_START_FORMATS = + { + "EEEE, dd MMM yy hh:mm:ss a", + "EEEE, MMM dd, yy hh:mm:ss a", + "EEEE, MMM dd, yy 'at' hh:mma", // Acrobat Net Distiller 1.0 for Windows + "EEEE, MMM dd, yy", // Acrobat Distiller 1.0.2 for Macintosh && PDFBOX-465 + "EEEE MMM dd, yy HH:mm:ss", // ECMP5 + "EEEE MMM dd HH:mm:ss z yy", // GNU Ghostscript 7.0.7 + "EEEE MMM dd HH:mm:ss yy", // GNU Ghostscript 7.0.7 variant + }; + + private static final String[] DIGIT_START_FORMATS = + { + "dd MMM yy HH:mm:ss", // for 26 May 2000 11:25:00 + "dd MMM yy HH:mm", // for 26 May 2000 11:25 + "yyyy MMM d", // ambiguity resolved only by omitting time + "yyyymmddhh:mm:ss", // test case "200712172:2:3" + "H:m M/d/yy", // test case "9:47 5/12/2008" + "M/d/yy HH:mm:ss", + "M/d/yy HH:mm", + "M/d/yy", + + // proposed rule that is unreachable due to "dd MMM yy HH:mm:ss" + // "yyyy MMM d HH:mm:ss", + + // rules made unreachable by "M/d/yy HH:mm:ss" "M/d/yy HH:mm" "M/d/yy", + // (incoming digit strings do not mark themselves as y, m, or d!) + // "d/MM/yyyy HH:mm:ss", // PDFBOX-164 and PDFBOX-170 + // "M/dd/yyyy hh:mm:ss", + // "MM/d/yyyy hh:mm:ss", + // "M/d/yyyy HH:mm:ss", + // "M/dd/yyyy", + // "MM/d/yyyy", + // "M/d/yyyy", + // "M/d/yyyy HH:mm:ss", + // "M/d/yy HH:mm:ss", + // subsumed by big-endian parse + // "yyyy-MM-dd'T'HH:mm:ss", + // "yyyy-MM-dd'T'HH:mm:ss", + // "yyyymmdd hh:mm:ss", + // "yyyymmdd", + // "yyyymmddX''00''", // covers 24 cases + // (orignally the above ended with '+00''00'''; + // the first apostrophe quoted the plus, + // '' mapped to a single ', and the ''' was invalid) + }; + + /** + * Converts a Calendar to a string formatted as: + * D:yyyyMMddHHmmss#hh'mm' where # is Z, +, or -. + * + * @param cal The date to convert to a string. May be null. + * The DST_OFFSET is included when computing the output time zone. + * + * @return The date as a String to be used in a PDF document, + * or null if the cal value is null + */ + public static String toString(Calendar cal) + { + if (cal == null) + { + return null; + } + String offset = formatTZoffset(cal.get(Calendar.ZONE_OFFSET) + + cal.get(Calendar.DST_OFFSET), "'"); + return String.format(Locale.US, "D:" + + "%1$4tY%1$2tm%1$2td" // yyyyMMdd + + "%1$2tH%1$2tM%1$2tS" // HHmmss + + "%2$s" // time zone + + "'", // trailing apostrophe + cal, offset); + } + + /** + * Converts the date to ISO 8601 string format: + * yyyy-mm-ddThh:MM:ss#hh:mm (where '#" is '+' or '-'). + * + * @param cal The date to convert. Must not be null. + * The DST_OFFSET is included in the output value. + * + * @return The date represented as an ISO 8601 string. + */ + public static String toISO8601(Calendar cal) + { + String offset = formatTZoffset(cal.get(Calendar.ZONE_OFFSET) + + cal.get(Calendar.DST_OFFSET), ":"); + return String.format(Locale.US, + "%1$4tY" // yyyy + + "-%1$2tm" // -mm (%tm adds one to cal month value) + + "-%1$2td" // -dd (%tm adds one to cal month value) + + "T" // T + + "%1$2tH:%1$2tM:%1$2tS" // HHmmss + + "%2$s", // time zone + cal, offset); + } + + /* + * Constrain a timezone offset to the range [-14:00 thru +14:00]. + * by adding or subtracting multiples of a full day. + */ + private static int restrainTZoffset(long proposedOffset) + { + if (proposedOffset <= 14 * MILLIS_PER_HOUR && proposedOffset >= -14 * MILLIS_PER_HOUR) + { + // https://www.w3.org/TR/xmlschema-2/#dateTime-timezones + // Timezones between 14:00 and -14:00 are valid + return (int) proposedOffset; + } + // Constrain a timezone offset to the range [-11:59 thru +12:00]. + proposedOffset = ((proposedOffset + HALF_DAY) % DAY + DAY) % DAY; + if (proposedOffset == 0) + { + return HALF_DAY; + } + // 0 <= proposedOffset < DAY + proposedOffset = (proposedOffset - HALF_DAY) % HALF_DAY; + // -HALF_DAY < proposedOffset < HALF_DAY + return (int)proposedOffset; + } + + /* + * Formats a time zone offset as #hh^mm + * where # is + or -, hh is hours, ^ is a separator, and mm is minutes. + * Any separator may be specified by the second argument; + * the usual values are ":" (ISO 8601), "" (RFC 822), and "'" (PDF). + * The returned value is constrained to the range -11:59 ... 11:59. + * For offset of 0 millis, the String returned is "+00^00", never "Z". + * To get a "general" offset in form GMT#hh:mm, write + * "GMT"+DateConverter.formatTZoffset(offset, ":"); + * + * Take thought in choosing the source for the millis value. + * It can come from calendarValue.getTimeZone() or from + * calendarValue.get(Calendar.ZONE_OFFSET). If a TimeZone was created + * from a valid time zone ID, then it may have a daylight savings rule. + * (As of July 4, 2013, the data base at http://www.iana.org/time-zones + * recognized 629 time zone regions. But a TimeZone created as + * new SimpleTimeZone(millisOffset, "ID"), + * will not have a daylight savings rule. (Not even if there is a + * known time zone with the given ID. To get the TimeZone named "xDT" + * with its DST rule, use an ID of EST5EDT, CST6CDT, MST7MDT, or PST8PDT. + * + * When parsing PDF dates, the incoming values DOES NOT have a TIMEZONE value. + * At most it has an OFFSET value like -04'00'. It is generally impossible to + * determine what TIMEZONE corresponds to a given OFFSET. If the date is + * in the summer when daylight savings is in effect, an offset of -0400 + * might correspond to any one of the 38 regions (of 53) with standard time + * offset -0400 and no daylight saving. Or it might correspond to + * any one of the 31 regions (out of 43) that observe daylight savings + * and have standard time offset of -0500. + * + * If a Calendar has not been assigned a TimeZone with setTimeZone(), + * it will have by default the local TIMEZONE, not just the OFFSET. In the + * USA, this TimeZone will have a daylight savings rule. + * + * The offset assigned with calVal.set(Calendar.ZONE_OFFSET) differs + * from the offset in the TimeZone set by Calendar.setTimeZone(). Example: + * Suppose my local TimeZone is America/New_York. It has an offset of -05'00'. + * And suppose I set a GregorianCalendar's ZONE_OFFSET to -07'00' + * calVal = new GregorianCalendar(); // TimeZone is the local default + * calVal.set(Calendar.ZONE_OFFSET, -7* MILLIS_PER_HOUR); + * Four different offsets can be computed from calVal: + * calVal.get(Calendar.ZONE_OFFSET) => -07:00 + * calVal.get(Calendar.ZONE_OFFSET) + calVal.get(Calendar.DST_OFFSET) => -06:00 + * calVal.getTimeZone().getRawOffset() => -05:00 + * calVal.getTimeZone().getOffset(calVal.getTimeInMillis()) => -04:00 + * + * Which is correct??? I dunno, though setTimeZone() does seem to affect + * ZONE_OFFSET, and not vice versa. One cannot even test whether TimeZone + * or ZONE_OFFSET has been set; both have been set by initialization code. + * TimeZone is initialized to the local default time zone + * and ZONE_OFFSET is set from it. + * + * My choice in this DateConverter class has been to set the + * initial TimeZone of a GregorianCalendar to GMT. Thereafter + * the TimeZone is modified with {@link #adjustTimeZoneNicely}. + * + * package-private for testing + */ + static String formatTZoffset(long millis, String sep) + { + SimpleDateFormat sdf = new SimpleDateFormat("Z"); // #hhmm + sdf.setTimeZone(new SimpleTimeZone(restrainTZoffset(millis),"unknown")); + String tz = sdf.format(new Date()); + return tz.substring(0,3) + sep + tz.substring(3); + } + + /* + * Parses an integer from a string, starting at and advancing a ParsePosition. + * Returns The integer that was at the given parse position, or the remedy value + * if no digits were found. + * + * The ParsePosition will be incremented by the number of digits found, but no + * more than maxlen. That is, the ParsePosition will advance across at most + * maxlen initial digits in text. The error index is ignored and unchanged. + * + * maxlen is the maximum length of the integer to parse, usually 2, but 4 for + * year fields. If the field of length maxlen begins with a digit, but contains + * a non-digit, no error is signaled and the integer value is returned. + */ + private static int parseTimeField(String text, ParsePosition where, int maxlen, int remedy) + { + if (text == null) + { + return remedy; + } + // it would seem that DecimalFormat.parse() would be simpler; + // but that class blithely ignores setMaximumIntegerDigits + int retval = 0; + int index = where.getIndex(); + int limit = index + Math.min(maxlen, text.length()-index); + for (; index < limit; index++) + { + // convert digit to integer + int cval = text.charAt(index) - '0'; + // test to see if we got a digit + if (cval < 0 || cval > 9) + { + // no digit at index + break; + } + // append the digit to the return value + retval = retval * 10 + cval; + } + if (index == where.getIndex()) + { + return remedy; + } + where.setIndex(index); + return retval; + } + + /* + * Advances the ParsePosition past any and all the characters that match + * those in the optionals list. In particular, a space will skip all spaces. + * + * The start value is incremented by the number of optionals found. The error + * index is ignored and unchanged. + * + * Returns the last non-space character passed over (even if space is not in + * the optionals list.) + */ + private static char skipOptionals(String text, ParsePosition where, String optionals) + { + char retval = ' ', currch; + while (text != null && where.getIndex() < text.length() && + optionals.indexOf((currch = text.charAt(where.getIndex()))) >= 0) + { + retval = (currch != ' ') ? currch : retval; + where.setIndex(where.getIndex() + 1); + } + return retval; + } + + /* + * If the victim string is at the given position in the text, this method + * advances the position past that string. + * + * `where` is the initial position to look at. After return, this will have + * been incremented by the length of the victim if it was found. The error + * index is ignored and unchanged. + */ + private static boolean skipString(String text, String victim, ParsePosition where) + { + if (text.startsWith(victim, where.getIndex())) + { + where.setIndex(where.getIndex()+victim.length()); + return true; + } + return false; + } + + /* + * Construct a new GregorianCalendar and set defaults. + * Locale is ENGLISH. + * TimeZone is "UTC" (zero offset and no DST). + * Parsing is NOT lenient. Milliseconds are zero. + * + * package-private for testing + */ + static GregorianCalendar newGreg() + { + GregorianCalendar retCal = new GregorianCalendar(Locale.ENGLISH); + retCal.setTimeZone(new SimpleTimeZone(0, "UTC")); + retCal.setLenient(false); + retCal.set(Calendar.MILLISECOND, 0); + return retCal; + } + + /* + * Install a TimeZone on a GregorianCalendar without changing the + * hours value. A plain GregorianCalendat.setTimeZone() + * adjusts the Calendar.HOUR value to compensate. This is *BAD* + * (not to say *EVIL*) when we have already set the time. + */ + private static void adjustTimeZoneNicely(GregorianCalendar cal, TimeZone tz) + { + cal.setTimeZone(tz); + int offset = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / + MILLIS_PER_MINUTE; + cal.add(Calendar.MINUTE, -offset); + } + + /* + * Parses the end of a date string for a time zone and, if one is found, + * sets the time zone of the GregorianCalendar. Otherwise the calendar + * time zone is unchanged. + * + * The text is parsed as + * (Z|GMT|UTC)? [+- ]* h [': ]? m '? + * where the leading String is optional, h is two digits by default, + * but may be a single digit if followed by one of space, apostrophe, + * colon, or the end of string. Similarly, m is one or two digits. + * This scheme accepts the format of PDF, RFC 822, and ISO8601. + * If none of these applies (as for a time zone name), we try + * TimeZone.getTimeZone(). + * + * Scanning begins at where.index. After success, the returned index + * is that of the next character after the recognized string. + * + * package-private for testing + */ + static boolean parseTZoffset(String text, GregorianCalendar cal, + ParsePosition initialWhere) + { + ParsePosition where = new ParsePosition(initialWhere.getIndex()); + TimeZone tz = new SimpleTimeZone(0, "GMT"); + int tzHours, tzMin; + char sign = skipOptionals(text, where, "Z+- "); + boolean hadGMT = (sign == 'Z' || skipString(text, "GMT", where) || + skipString(text, "UTC", where)); + sign = (!hadGMT) ? sign : skipOptionals(text, where, "+- "); + + tzHours = parseTimeField(text, where, 2, -999); + skipOptionals(text, where, "\': "); + tzMin = parseTimeField(text, where, 2, 0); + skipOptionals(text, where, "\' "); + + if (tzHours != -999) + { + // we parsed a time zone in default format + int hrSign = (sign == '-' ? -1 : 1); + tz.setRawOffset(restrainTZoffset(hrSign * (tzHours * MILLIS_PER_HOUR + tzMin * + (long) MILLIS_PER_MINUTE))); + updateZoneId(tz); + } + else if ( ! hadGMT) + { + // try to process as a name; "GMT" or "UTC" has already been processed + String tzText = text.substring(initialWhere.getIndex()).trim(); + tz = TimeZone.getTimeZone(tzText); + // getTimeZone returns "GMT" for unknown ids + if ("GMT".equals(tz.getID())) + { + // no timezone in text, cal amd initialWhere are unchanged + return false; + } + else + { + // we got a tz by name; use it + where.setIndex(text.length()); + } + } + adjustTimeZoneNicely(cal, tz); + initialWhere.setIndex(where.getIndex()); + return true; + } + + /** + * Update the zone ID based on the raw offset. This is either GMT, GMT+hh:mm or GMT-hh:mm, where + * n is between 1 and 14. The highest negative hour is -14, the highest positive hour is 12. + * Zones that don't fit in this schema are set to zone ID "unknown". + * + * @param tz the time zone to update. + */ + private static void updateZoneId(TimeZone tz) + { + int offset = tz.getRawOffset(); + char pm = '+'; + if (offset < 0) + { + pm = '-'; + offset = -offset; + } + int hh = offset / 3600000; + int mm = offset % 3600000 / 60000; + if (offset == 0) + { + tz.setID("GMT"); + } + else if (pm == '+' && hh <= 12) + { + tz.setID(String.format(Locale.US, "GMT+%02d:%02d", hh, mm)); + } + else if (pm == '-' && hh <= 14) + { + tz.setID(String.format(Locale.US, "GMT-%02d:%02d", hh, mm)); + } + else + { + tz.setID("unknown"); + } + } + + /* + * Parses a big-endian date: year month day hour min sec. + * The year must be four digits. Other fields may be adjacent + * and delimited by length or they may follow appropriate delimiters. + * year [ -/]* month [ -/]* dayofmonth [ T]* hour [:] min [:] sec [.secFraction] + * If any numeric field is omitted, all following fields must also be omitted. + * No time zone is processed. + * + * Ambiguous dates can produce unexpected results. For example: + * 1970 12 23:08 will parse as 1970 December 23 00:08:00 + * + * The parse begins at `where, on return the index + * is advanced to just beyond the last character processed. + * The error index is ignored and unchanged. + */ + private static GregorianCalendar parseBigEndianDate(String text, + ParsePosition initialWhere) + { + ParsePosition where = new ParsePosition(initialWhere.getIndex()); + int year = parseTimeField(text, where, 4, 0); + if (where.getIndex() != 4 + initialWhere.getIndex()) + { + return null; + } + skipOptionals(text, where, "/- "); + int month = parseTimeField(text, where, 2, 1) - 1; // Calendar months are 0...11 + skipOptionals(text, where, "/- "); + int day = parseTimeField(text, where, 2, 1); + skipOptionals(text, where, " T"); + int hour = parseTimeField(text, where, 2, 0); + skipOptionals(text, where, ": "); + int minute = parseTimeField(text, where, 2, 0); + skipOptionals(text, where, ": "); + int second = parseTimeField(text, where, 2, 0); + char nextC = skipOptionals(text, where, "."); + if (nextC == '.') + { + // fractions of a second: skip upto 19 digits + parseTimeField(text, where, 19, 0); + } + + GregorianCalendar dest = newGreg(); + try + { + dest.set(year, month, day, hour, minute, second); + // trigger limit tests + dest.getTimeInMillis(); + } + catch (IllegalArgumentException ill) + { + LOG.debug("Couldn't parse arguments text:" + text + " initialWhere:" + initialWhere, ill); + return null; + } + initialWhere.setIndex(where.getIndex()); + skipOptionals(text, initialWhere, " "); + // dest has at least a year value + return dest; + } + + /* + * See if text can be parsed as a date according to any of a list of + * formats. The time zone may be included as part of the format, or + * omitted in favor of later testing for a trailing time zone. + * + * The parse starts at `where`, upon return it will have been + * incremented to refer to the next non-space character after the date. + * If no date was found, the value is unchanged. + * The error index is ignored and unchanged. + * + * If there is a failure to find a date, or the GregorianCalendar + * for the date that was found. Unless a time zone was + * part of the format, the time zone will be GMT+0 + */ + private static GregorianCalendar parseSimpleDate(String text, String[] fmts, + ParsePosition initialWhere) + { + for(String fmt : fmts) + { + ParsePosition where = new ParsePosition(initialWhere.getIndex()); + SimpleDateFormat sdf = new SimpleDateFormat(fmt, Locale.ENGLISH); + GregorianCalendar retCal = newGreg(); + sdf.setCalendar(retCal); + if (sdf.parse(text, where) != null) + { + initialWhere.setIndex(where.getIndex()); + skipOptionals(text, initialWhere, " "); + return retCal; + } + } + return null; + } + + /* + * Parses a String to see if it begins with a date, and if so, + * returns that date. The date must be strictly correct--no + * field may exceed the appropriate limit. + * (That is, the Calendar has setLenient(false).) + * Skips initial spaces, but does NOT check for "D:" + * + * The scan first tries parseBigEndianDate and parseTZoffset + * and then tries parseSimpleDate with appropriate formats, + * again followed by parseTZoffset. If at any stage the entire + * text is consumed, that date value is returned immediately. + * Otherwise the date that consumes the longest initial part + * of the text is returned. + * + * - PDF format dates are among those recognized by parseBigEndianDate. + * - The formats tried are alphaStartFormats or digitStartFormat and + * any listed in the value of moreFmts. + */ + private static Calendar parseDate(String text, ParsePosition initialWhere) + { + if (text == null || text.isEmpty()) + { + return null; + } + + // remember longestr date string + int longestLen = -999999; + // theorem: the above value will never be used + // proof: longestLen is only used if longestDate is not null + + GregorianCalendar longestDate = null; // null says no date found yet + int whereLen; // tempcopy of where.getIndex() + + ParsePosition where = new ParsePosition(initialWhere.getIndex()); + // check for null (throws exception) and trim off surrounding spaces + skipOptionals(text, where, " "); + int startPosition = where.getIndex(); + + // try big-endian parse + GregorianCalendar retCal = parseBigEndianDate(text, where); + // check for success and a timezone + if (retCal != null && (where.getIndex() == text.length() || + parseTZoffset(text, retCal, where))) + { + // if text is fully consumed, return the date else remember it and its length + whereLen = where.getIndex(); + if (whereLen == text.length()) + { + initialWhere.setIndex(whereLen); + return retCal; + } + longestLen = whereLen; + longestDate = retCal; + } + + // try one of the sets of standard formats + where.setIndex(startPosition); + String [] formats + = Character.isDigit(text.charAt(startPosition)) + ? DIGIT_START_FORMATS + : ALPHA_START_FORMATS; + retCal = parseSimpleDate(text, formats, where); + // check for success and a timezone + if (retCal != null && + (where.getIndex() == text.length() || + parseTZoffset(text, retCal, where))) + { + // if text is fully consumed, return the date else remember it and its length + whereLen = where.getIndex(); + if (whereLen == text.length()) + { + initialWhere.setIndex(whereLen); + return retCal; + } + if (whereLen > longestLen) + { + longestLen = whereLen; + longestDate = retCal; + } + } + + if (longestDate != null) + { + initialWhere.setIndex(longestLen); + return longestDate; + } + return retCal; + } + + /** + * Returns the Calendar for a given COS string containing a date, + * or {@code null} if it cannot be parsed. + * + * The returned value will have 0 for DST_OFFSET. + * + * @param text A COS string containing a date. + * @return The Calendar that the text string represents, or {@code null} if it cannot be parsed. + */ + public static Calendar toCalendar(COSString text) + { + if (text == null) + { + return null; + } + return toCalendar(text.getString()); + } + + /** + * Returns the Calendar for a given string containing a date, + * or {@code null} if it cannot be parsed. + * + * The returned value will have 0 for DST_OFFSET. + * + * @param text A COS string containing a date. + * @return The Calendar that the text string represents, or {@code null} if it cannot be parsed. + */ + public static Calendar toCalendar(String text) + { + if (text == null || text.trim().isEmpty()) + { + return null; + } + + ParsePosition where = new ParsePosition(0); + skipOptionals(text, where, " "); + skipString(text, "D:", where); + Calendar calendar = parseDate(text, where); + + if (calendar == null || where.getIndex() != text.length()) + { + // the date string is invalid + return null; + } + return calendar; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/Hex.java b/pdfbox/src/main/java/org/apache/pdfbox/util/Hex.java new file mode 100644 index 00000000000..5dd429116ea --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/Hex.java @@ -0,0 +1,257 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.reflect.Method; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Utility functions for hex encoding. + * + * @author John Hewson + */ +public final class Hex +{ + private static final Log LOG = LogFactory.getLog(Hex.class); + + /** + * for hex conversion. + * + * https://stackoverflow.com/questions/2817752/java-code-to-convert-byte-to-hexadecimal + * + */ + private static final byte[] HEX_BYTES = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; + private static final char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; + + private Hex() {} + + /** + * Returns a hex string of the given byte. + */ + public static String getString(byte b) + { + char[] chars = new char[]{HEX_CHARS[getHighNibble(b)], HEX_CHARS[getLowNibble(b)]}; + return new String(chars); + } + + /** + * Returns a hex string of the given byte array. + */ + public static String getString(byte[] bytes) + { + StringBuilder string = new StringBuilder(bytes.length * 2); + for (byte b : bytes) + { + string.append(HEX_CHARS[getHighNibble(b)]).append(HEX_CHARS[getLowNibble(b)]); + } + return string.toString(); + } + + /** + * Returns the bytes corresponding to the ASCII hex encoding of the given byte. + */ + public static byte[] getBytes(byte b) + { + return new byte[]{HEX_BYTES[getHighNibble(b)], HEX_BYTES[getLowNibble(b)]}; + } + + /** + * Returns the bytes corresponding to the ASCII hex encoding of the given bytes. + */ + public static byte[] getBytes(byte[] bytes) + { + byte[] asciiBytes = new byte[bytes.length*2]; + for(int i=0; i< bytes.length; i++) + { + asciiBytes[i*2] = HEX_BYTES[getHighNibble(bytes[i])]; + asciiBytes[i*2+1] = HEX_BYTES[getLowNibble(bytes[i])]; + } + return asciiBytes; + } + + /** + * Returns the characters corresponding to the ASCII hex encoding of the given short. + */ + public static char[] getChars(short num) + { + char[] hex = new char[4]; + hex[0] = HEX_CHARS[(num >> 12) & 0x0F]; + hex[1] = HEX_CHARS[(num >> 8) & 0x0F]; + hex[2] = HEX_CHARS[(num >> 4) & 0x0F]; + hex[3] = HEX_CHARS[num & 0x0F]; + return hex; + } + + /** + * Takes the characters in the given string, convert it to bytes in UTF16-BE format + * and build a char array that corresponds to the ASCII hex encoding of the resulting + * bytes. + * + * Example: + *
    +     *   getCharsUTF16BE("ab") == new char[]{'0','0','6','1','0','0','6','2'}
    +     * 
    + * + * @param text The string to convert + * @return The string converted to hex + */ + public static char[] getCharsUTF16BE(String text) + { + // Note that the internal representation of string in Java is already UTF-16. Therefore + // we do not need to use an encoder to convert the string to its byte representation. + char[] hex = new char[text.length()*4]; + + for (int stringIdx = 0, charIdx = 0; stringIdx < text.length(); stringIdx++) + { + char c = text.charAt(stringIdx); + hex[charIdx++] = HEX_CHARS[(c >> 12) & 0x0F]; + hex[charIdx++] = HEX_CHARS[(c >> 8) & 0x0F]; + hex[charIdx++] = HEX_CHARS[(c >> 4) & 0x0F]; + hex[charIdx++] = HEX_CHARS[c & 0x0F]; + } + + return hex; + } + + /** + * Writes the given byte as hex value to the given output stream. + * @param b the byte to be written + * @param output the output stream to be written to + * @throws IOException exception if anything went wrong + */ + public static void writeHexByte(byte b, OutputStream output) throws IOException + { + output.write(HEX_BYTES[getHighNibble(b)]); + output.write(HEX_BYTES[getLowNibble(b)]); + } + + /** + * Writes the given byte array as hex value to the given output stream. + * @param bytes the byte array to be written + * @param output the output stream to be written to + * @throws IOException exception if anything went wrong + */ + public static void writeHexBytes(byte[] bytes, OutputStream output) throws IOException + { + for (byte b : bytes) + { + writeHexByte(b, output); + } + } + + /** + * Get the high nibble of the given byte. + * + * @param b the given byte + * @return the high nibble + */ + private static int getHighNibble(byte b) + { + return (b & 0xF0) >> 4; + } + + /** + * Get the low nibble of the given byte. + * + * @param b the given byte + * @return the low nibble + */ + private static int getLowNibble(byte b) + { + return b & 0x0F; + } + + /** + * Decode a base64 String. + * + * @param base64Value a base64 encoded String. + * + * @return the decoded String as a byte array. + * + * @throws IllegalArgumentException if this isn't a base64 encoded string. + */ + public static byte[] decodeBase64(String base64Value) + { + // https://stackoverflow.com/questions/469695/decode-base64-data-in-java + try + { + // jdk8 and higher? java.util.Base64.getDecoder().decode() + Class b64Class = Class.forName("java.util.Base64"); + Method getDecoderMethod = b64Class.getMethod("getDecoder"); + Object base64Decoder = getDecoderMethod.invoke(b64Class); + Method decodeMethod = base64Decoder.getClass().getMethod("decode", String.class); + return (byte[]) decodeMethod.invoke(base64Decoder, base64Value.replaceAll("\\s", "")); + } + catch (ReflectiveOperationException | SecurityException ex) + { + LOG.debug(ex); + } + try + { + // up to java7? javax.xml.bind.DatatypeConverter.parseBase64Binary() + Class datatypeConverterClass = Class.forName("javax.xml.bind.DatatypeConverter"); + Method parseBase64BinaryMethod = datatypeConverterClass.getMethod("parseBase64Binary", String.class); + return (byte[]) parseBase64BinaryMethod.invoke(null, base64Value); + } + catch (ReflectiveOperationException | SecurityException ex) + { + LOG.debug(ex); + } + LOG.error("Can't decode base64 value, try adding javax.xml.bind:jaxb-api to your build"); + return new byte[0]; + } + + /** + * Decodes a hex String into a byte array. + * + * @param s A String with ASCII hex. + * @return decoded byte array. + * @throws IOException + */ + public static byte[] decodeHex(String s) throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int i = 0; + while (i < s.length() - 1) + { + if (s.charAt(i) == '\n' || s.charAt(i) == '\r') + { + ++i; + } + else + { + String hexByte = s.substring(i, i + 2); + try + { + baos.write(Integer.parseInt(hexByte, 16)); // Byte.parseByte won't work with "9C" + } + catch (NumberFormatException ex) + { + LOG.error("Can't parse " + hexByte + ", aborting decode", ex); + break; + } + i += 2; + } + } + return baos.toByteArray(); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java b/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java new file mode 100644 index 00000000000..5b138fb43e6 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java @@ -0,0 +1,755 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSFloat; +import org.apache.pdfbox.cos.COSNumber; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.util.Arrays; +import org.apache.pdfbox.cos.COSBase; + +/** + * This class will be used for matrix manipulation. + * + * @author Ben Litchfield + */ +public final class Matrix implements Cloneable +{ + static final float[] DEFAULT_SINGLE = + { + 1,0,0, // a b 0 sx hy 0 note: hx and hy are reversed vs. the PDF spec as we use + 0,1,0, // c d 0 = hx sy 0 AffineTransform's definition x and y shear + 0,0,1 // tx ty 1 tx ty 1 + }; + + private final float[] single; + + /** + * Constructor. This produces an identity matrix. + */ + public Matrix() + { + single = new float[DEFAULT_SINGLE.length]; + System.arraycopy(DEFAULT_SINGLE, 0, single, 0, DEFAULT_SINGLE.length); + } + + /** + * Creates a matrix from a 6-element (a b c d e f) COS array. + * + * @param array + */ + public Matrix(COSArray array) + { + single = new float[DEFAULT_SINGLE.length]; + single[0] = ((COSNumber)array.getObject(0)).floatValue(); + single[1] = ((COSNumber)array.getObject(1)).floatValue(); + single[3] = ((COSNumber)array.getObject(2)).floatValue(); + single[4] = ((COSNumber)array.getObject(3)).floatValue(); + single[6] = ((COSNumber)array.getObject(4)).floatValue(); + single[7] = ((COSNumber)array.getObject(5)).floatValue(); + single[8] = 1; + } + + /** + * Creates a transformation matrix with the given 6 elements. Transformation matrices are + * discussed in 8.3.3, "Common Transformations" and 8.3.4, "Transformation Matrices" of the PDF + * specification. For simple purposes (rotate, scale, translate) it is recommended to use the + * static methods below. + * + * @see Matrix#getRotateInstance(double, float, float) + * @see Matrix#getScaleInstance(float, float) + * @see Matrix#getTranslateInstance(float, float) + * + * @param a the X coordinate scaling element (m00) of the 3x3 matrix + * @param b the Y coordinate shearing element (m10) of the 3x3 matrix + * @param c the X coordinate shearing element (m01) of the 3x3 matrix + * @param d the Y coordinate scaling element (m11) of the 3x3 matrix + * @param e the X coordinate translation element (m02) of the 3x3 matrix + * @param f the Y coordinate translation element (m12) of the 3x3 matrix + */ + public Matrix(float a, float b, float c, float d, float e, float f) + { + single = new float[DEFAULT_SINGLE.length]; + single[0] = a; + single[1] = b; + single[3] = c; + single[4] = d; + single[6] = e; + single[7] = f; + single[8] = 1; + } + + /** + * Creates a matrix with the same elements as the given AffineTransform. + * @param at + */ + public Matrix(AffineTransform at) + { + single = new float[DEFAULT_SINGLE.length]; + System.arraycopy(DEFAULT_SINGLE, 0, single, 0, DEFAULT_SINGLE.length); + single[0] = (float)at.getScaleX(); + single[1] = (float)at.getShearY(); + single[3] = (float)at.getShearX(); + single[4] = (float)at.getScaleY(); + single[6] = (float)at.getTranslateX(); + single[7] = (float)at.getTranslateY(); + } + + /** + * Convenience method to be used when creating a matrix from unverified data. If the parameter + * is a COSArray with at least six numbers, a Matrix object is created from the first six + * numbers and returned. If not, then the identity Matrix is returned. + * + * @param base a COS object, preferably a COSArray with six numbers. + * + * @return a Matrix object. + */ + public static Matrix createMatrix(COSBase base) + { + if (!(base instanceof COSArray)) + { + return new Matrix(); + } + COSArray array = (COSArray) base; + if (array.size() < 6) + { + return new Matrix(); + } + for (int i = 0; i < 6; ++i) + { + if (!(array.getObject(i) instanceof COSNumber)) + { + return new Matrix(); + } + } + return new Matrix(array); + } + + /** + * This method resets the numbers in this Matrix to the original values, which are + * the values that a newly constructed Matrix would have. + * + * @deprecated This method will be removed. + */ + @Deprecated + public void reset() + { + System.arraycopy(DEFAULT_SINGLE, 0, single, 0, DEFAULT_SINGLE.length); + } + + /** + * Create an affine transform from this matrix's values. + * + * @return An affine transform with this matrix's values. + */ + public AffineTransform createAffineTransform() + { + return new AffineTransform( + single[0], single[1], // m00 m10 = scaleX shearY + single[3], single[4], // m01 m11 = shearX scaleY + single[6], single[7] ); // m02 m12 = tx ty + } + + /** + * Set the values of the matrix from the AffineTransform. + * + * @param af The transform to get the values from. + * @deprecated Use the {@link #Matrix(AffineTransform)} constructor instead. + */ + @Deprecated + public void setFromAffineTransform( AffineTransform af ) + { + single[0] = (float)af.getScaleX(); + single[1] = (float)af.getShearY(); + single[3] = (float)af.getShearX(); + single[4] = (float)af.getScaleY(); + single[6] = (float)af.getTranslateX(); + single[7] = (float)af.getTranslateY(); + } + + /** + * This will get a matrix value at some point. + * + * @param row The row to get the value from. + * @param column The column to get the value from. + * + * @return The value at the row/column position. + */ + public float getValue( int row, int column ) + { + return single[row*3+column]; + } + + /** + * This will set a value at a position. + * + * @param row The row to set the value at. + * @param column the column to set the value at. + * @param value The value to set at the position. + */ + public void setValue( int row, int column, float value ) + { + single[row*3+column] = value; + } + + /** + * Return a single dimension array of all values in the matrix. + * + * @return The values of this matrix. + */ + public float[][] getValues() + { + float[][] retval = new float[3][3]; + retval[0][0] = single[0]; + retval[0][1] = single[1]; + retval[0][2] = single[2]; + retval[1][0] = single[3]; + retval[1][1] = single[4]; + retval[1][2] = single[5]; + retval[2][0] = single[6]; + retval[2][1] = single[7]; + retval[2][2] = single[8]; + return retval; + } + + /** + * Return a single dimension array of all values in the matrix. + * + * @return The values ot this matrix. + * @deprecated Use {@link #getValues()} instead. + */ + @Deprecated + public double[][] getValuesAsDouble() + { + double[][] retval = new double[3][3]; + retval[0][0] = single[0]; + retval[0][1] = single[1]; + retval[0][2] = single[2]; + retval[1][0] = single[3]; + retval[1][1] = single[4]; + retval[1][2] = single[5]; + retval[2][0] = single[6]; + retval[2][1] = single[7]; + retval[2][2] = single[8]; + return retval; + } + + /** + * Concatenates (premultiplies) the given matrix to this matrix. + * + * @param matrix The matrix to concatenate. + */ + public void concatenate(Matrix matrix) + { + matrix.multiply(this, this); + } + + /** + * Translates this matrix by the given vector. + * + * @param vector 2D vector + */ + public void translate(Vector vector) + { + Matrix m = Matrix.getTranslateInstance(vector.getX(), vector.getY()); + concatenate(m); + } + + /** + * Translates this matrix by the given ammount. + * + * @param tx x-translation + * @param ty y-translation + */ + public void translate(float tx, float ty) + { + Matrix m = Matrix.getTranslateInstance(tx, ty); + concatenate(m); + } + + /** + * Scales this matrix by the given factors. + * + * @param sx x-scale + * @param sy y-scale + */ + public void scale(float sx, float sy) + { + Matrix m = Matrix.getScaleInstance(sx, sy); + concatenate(m); + } + + /** + * Rotares this matrix by the given factors. + * + * @param theta The angle of rotation measured in radians + */ + public void rotate(double theta) + { + Matrix m = Matrix.getRotateInstance(theta, 0, 0); + concatenate(m); + } + + /** + * This will take the current matrix and multiply it with a matrix that is passed in. + * + * @param b The matrix to multiply by. + * + * @return The result of the two multiplied matrices. + */ + public Matrix multiply( Matrix b ) + { + return this.multiply(b, new Matrix()); + } + + /** + * This method multiplies this Matrix with the specified other Matrix, storing the product in the specified + * result Matrix. By reusing Matrix instances like this, multiplication chains can be executed without having + * to create many temporary Matrix objects. + *

    + * It is allowed to have (other == this) or (result == this) or indeed (other == result) but if this is done, + * the backing float[] matrix values may be copied in order to ensure a correct product. + * + * @param other the second operand Matrix in the multiplication + * @param result the Matrix instance into which the result should be stored. If result is null, a new Matrix + * instance is created. + * @return the product of the two matrices. + */ + public Matrix multiply( Matrix other, Matrix result ) + { + if (result == null) + { + result = new Matrix(); + } + + if (other != null && other.single != null) + { + // the operands + float[] thisOperand = this.single; + float[] otherOperand = other.single; + + // We're multiplying 2 sets of floats together to produce a third, but we allow + // any of these float[] instances to be the same objects. + // There is the possibility then to overwrite one of the operands with result values + // and therefore corrupt the result. + + // If either of these operands are the same float[] instance as the result, then + // they need to be copied. + + if (this == result) + { + final float[] thisOrigVals = new float[this.single.length]; + System.arraycopy(this.single, 0, thisOrigVals, 0, this.single.length); + + thisOperand = thisOrigVals; + } + if (other == result) + { + final float[] otherOrigVals = new float[other.single.length]; + System.arraycopy(other.single, 0, otherOrigVals, 0, other.single.length); + + otherOperand = otherOrigVals; + } + + result.single[0] = thisOperand[0] * otherOperand[0] + + thisOperand[1] * otherOperand[3] + + thisOperand[2] * otherOperand[6]; + result.single[1] = thisOperand[0] * otherOperand[1] + + thisOperand[1] * otherOperand[4] + + thisOperand[2] * otherOperand[7]; + result.single[2] = thisOperand[0] * otherOperand[2] + + thisOperand[1] * otherOperand[5] + + thisOperand[2] * otherOperand[8]; + result.single[3] = thisOperand[3] * otherOperand[0] + + thisOperand[4] * otherOperand[3] + + thisOperand[5] * otherOperand[6]; + result.single[4] = thisOperand[3] * otherOperand[1] + + thisOperand[4] * otherOperand[4] + + thisOperand[5] * otherOperand[7]; + result.single[5] = thisOperand[3] * otherOperand[2] + + thisOperand[4] * otherOperand[5] + + thisOperand[5] * otherOperand[8]; + result.single[6] = thisOperand[6] * otherOperand[0] + + thisOperand[7] * otherOperand[3] + + thisOperand[8] * otherOperand[6]; + result.single[7] = thisOperand[6] * otherOperand[1] + + thisOperand[7] * otherOperand[4] + + thisOperand[8] * otherOperand[7]; + result.single[8] = thisOperand[6] * otherOperand[2] + + thisOperand[7] * otherOperand[5] + + thisOperand[8] * otherOperand[8]; + } + + return result; + } + + /** + * Transforms the given point by this matrix. + * + * @param point point to transform + */ + public void transform(Point2D point) + { + float x = (float)point.getX(); + float y = (float)point.getY(); + float a = single[0]; + float b = single[1]; + float c = single[3]; + float d = single[4]; + float e = single[6]; + float f = single[7]; + point.setLocation(x * a + y * c + e, x * b + y * d + f); + } + + /** + * Transforms the given point by this matrix. + * + * @param x x-coordinate + * @param y y-coordinate + */ + public Point2D.Float transformPoint(float x, float y) + { + float a = single[0]; + float b = single[1]; + float c = single[3]; + float d = single[4]; + float e = single[6]; + float f = single[7]; + return new Point2D.Float(x * a + y * c + e, x * b + y * d + f); + } + + /** + * Transforms the given point by this matrix. + * + * @param vector 2D vector + */ + public Vector transform(Vector vector) + { + float a = single[0]; + float b = single[1]; + float c = single[3]; + float d = single[4]; + float e = single[6]; + float f = single[7]; + float x = vector.getX(); + float y = vector.getY(); + return new Vector(x * a + y * c + e, x * b + y * d + f); + } + + /** + * Create a new matrix with just the scaling operators. + * + * @return A new matrix with just the scaling operators. + * @deprecated This method is due to be removed, please contact us if you make use of it. + */ + @Deprecated + public Matrix extractScaling() + { + Matrix matrix = new Matrix(); + matrix.single[0] = this.single[0]; + matrix.single[4] = this.single[4]; + return matrix; + } + + /** + * Convenience method to create a scaled instance. + * + * @param sx The xscale operator. + * @param sy The yscale operator. + * @return A new matrix with just the x/y scaling + */ + public static Matrix getScaleInstance(float sx, float sy) + { + Matrix matrix = new Matrix(); + matrix.single[0] = sx; + matrix.single[4] = sy; + return matrix; + } + + /** + * Create a new matrix with just the translating operators. + * + * @return A new matrix with just the translating operators. + * @deprecated This method is due to be removed, please contact us if you make use of it. + */ + @Deprecated + public Matrix extractTranslating() + { + Matrix matrix = new Matrix(); + matrix.single[6] = this.single[6]; + matrix.single[7] = this.single[7]; + return matrix; + } + + /** + * Convenience method to create a translating instance. + * + * @param tx The x translating operator. + * @param ty The y translating operator. + * @return A new matrix with just the x/y translating. + * @deprecated Use {@link #getTranslateInstance} instead. + */ + @Deprecated + public static Matrix getTranslatingInstance(float tx, float ty) + { + return getTranslateInstance(tx, ty); + } + + /** + * Convenience method to create a translating instance. + * + * @param tx The x translating operator. + * @param ty The y translating operator. + * @return A new matrix with just the x/y translating. + */ + public static Matrix getTranslateInstance(float tx, float ty) + { + Matrix matrix = new Matrix(); + matrix.single[6] = tx; + matrix.single[7] = ty; + return matrix; + } + + /** + * Convenience method to create a rotated instance. + * + * @param theta The angle of rotation measured in radians + * @param tx The x translation. + * @param ty The y translation. + * @return A new matrix with the rotation and the x/y translating. + */ + public static Matrix getRotateInstance(double theta, float tx, float ty) + { + float cosTheta = (float)Math.cos(theta); + float sinTheta = (float)Math.sin(theta); + + Matrix matrix = new Matrix(); + matrix.single[0] = cosTheta; + matrix.single[1] = sinTheta; + matrix.single[3] = -sinTheta; + matrix.single[4] = cosTheta; + matrix.single[6] = tx; + matrix.single[7] = ty; + return matrix; + } + + /** + * Produces a copy of the first matrix, with the second matrix concatenated. + * + * @param a The matrix to copy. + * @param b The matrix to concatenate. + */ + public static Matrix concatenate(Matrix a, Matrix b) + { + Matrix copy = a.clone(); + copy.concatenate(b); + return copy; + } + + /** + * Clones this object. + * @return cloned matrix as an object. + */ + @Override + public Matrix clone() + { + Matrix clone = new Matrix(); + System.arraycopy( single, 0, clone.single, 0, 9 ); + return clone; + } + + /** + * Returns the x-scaling factor of this matrix. This is calculated from the scale and shear. + * + * @return The x-scaling factor. + */ + public float getScalingFactorX() + { + float xScale = single[0]; + + /** + * BM: if the trm is rotated, the calculation is a little more complicated + * + * The rotation matrix multiplied with the scaling matrix is: + * ( x 0 0) ( cos sin 0) ( x*cos x*sin 0) + * ( 0 y 0) * (-sin cos 0) = (-y*sin y*cos 0) + * ( 0 0 1) ( 0 0 1) ( 0 0 1) + * + * So, if you want to deduce x from the matrix you take + * M(0,0) = x*cos and M(0,1) = x*sin and use the theorem of Pythagoras + * + * sqrt(M(0,0)^2+M(0,1)^2) = + * sqrt(x2*cos2+x2*sin2) = + * sqrt(x2*(cos2+sin2)) = <- here is the trick cos2+sin2 is one + * sqrt(x2) = + * abs(x) + */ + if( !(Float.compare(single[1], 0.0f) == 0 && Float.compare(single[3], 0.0f) ==0) ) + { + xScale = (float)Math.sqrt(Math.pow(single[0], 2)+ + Math.pow(single[1], 2)); + } + return xScale; + } + + /** + * Returns the y-scaling factor of this matrix. This is calculated from the scale and shear. + * + * @return The y-scaling factor. + */ + public float getScalingFactorY() + { + float yScale = single[4]; + if( !(Float.compare(single[1], 0.0f) == 0 && Float.compare(single[3], 0.0f) == 0) ) + { + yScale = (float)Math.sqrt(Math.pow(single[3], 2)+ + Math.pow(single[4], 2)); + } + return yScale; + } + + /** + * Returns the x-scaling element of this matrix. + * + * @see #getScalingFactorX() + */ + public float getScaleX() + { + return single[0]; + } + + /** + * Returns the y-shear element of this matrix. + */ + public float getShearY() + { + return single[1]; + } + + /** + * Returns the x-shear element of this matrix. + */ + public float getShearX() + { + return single[3]; + } + + /** + * Returns the y-scaling element of this matrix. + * + * @see #getScalingFactorY() + */ + public float getScaleY() + { + return single[4]; + } + + /** + * Returns the x-translation element of this matrix. + */ + public float getTranslateX() + { + return single[6]; + } + + /** + * Returns the y-translation element of this matrix. + */ + public float getTranslateY() + { + return single[7]; + } + + /** + * Get the x position in the matrix. This method is deprecated as it is incorrectly named. + * + * @return The x-position. + * @deprecated Use {@link #getTranslateX} instead + */ + @Deprecated + public float getXPosition() + { + return single[6]; + } + + /** + * Get the y position. This method is deprecated as it is incorrectly named. + * + * @return The y position. + * @deprecated Use {@link #getTranslateY} instead + */ + @Deprecated + public float getYPosition() + { + return single[7]; + } + + /** + * Returns a COS array which represents this matrix. + */ + public COSArray toCOSArray() + { + COSArray array = new COSArray(); + array.add(new COSFloat(single[0])); + array.add(new COSFloat(single[1])); + array.add(new COSFloat(single[3])); + array.add(new COSFloat(single[4])); + array.add(new COSFloat(single[6])); + array.add(new COSFloat(single[7])); + return array; + } + + @Override + public String toString() + { + String sb = "" + "[" + + single[0] + "," + + single[1] + "," + + single[3] + "," + + single[4] + "," + + single[6] + "," + + single[7] + "]"; + return sb; + } + + @Override + public int hashCode() + { + return Arrays.hashCode(single); + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (obj == null) + { + return false; + } + if (getClass() != obj.getClass()) + { + return false; + } + return Arrays.equals(this.single, ((Matrix) obj).single); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/NumberFormatUtil.java b/pdfbox/src/main/java/org/apache/pdfbox/util/NumberFormatUtil.java new file mode 100644 index 00000000000..e9f33dd118a --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/NumberFormatUtil.java @@ -0,0 +1,174 @@ +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +/** + * This class contains methods to format numbers. + * + * @author Michael Doswald + */ +public class NumberFormatUtil +{ + /** + * Maximum number of fraction digits supported by the format methods + */ + private static final int MAX_FRACTION_DIGITS = 5; + + /** + * Contains the power of ten values for fast lookup in the format methods + */ + private static final long[] POWER_OF_TENS; + private static final int[] POWER_OF_TENS_INT; + + static + { + POWER_OF_TENS = new long[19]; + POWER_OF_TENS[0] = 1; + + for (int exp = 1; exp < POWER_OF_TENS.length; exp++) + { + POWER_OF_TENS[exp] = POWER_OF_TENS[exp - 1] * 10; + } + + POWER_OF_TENS_INT = new int[10]; + POWER_OF_TENS_INT[0] = 1; + + for (int exp = 1; exp < POWER_OF_TENS_INT.length; exp++) + { + POWER_OF_TENS_INT[exp] = POWER_OF_TENS_INT[exp - 1] * 10; + } + } + + private NumberFormatUtil() + { + } + + /** + * Fast variant to format a floating point value to a ASCII-string. The format will fail if the + * value is greater than {@link Long#MAX_VALUE}, smaller or equal to {@link Long#MIN_VALUE}, is + * {@link Float#NaN}, infinite or the number of requested fraction digits is greater than + * {@link #MAX_FRACTION_DIGITS}. + * + * When the number contains more fractional digits than {@code maxFractionDigits} the value will + * be rounded. Rounding is done to the nearest possible value, with the tie breaking rule of + * rounding away from zero. + * + * @param value The float value to format + * @param maxFractionDigits The maximum number of fraction digits used + * @param asciiBuffer The output buffer to write the formatted value to + * + * @return The number of bytes used in the buffer or {@code -1} if formatting failed + */ + public static int formatFloatFast(float value, int maxFractionDigits, byte[] asciiBuffer) + { + if (Float.isNaN(value) || + Float.isInfinite(value) || + value > Long.MAX_VALUE || + value <= Long.MIN_VALUE || + maxFractionDigits > MAX_FRACTION_DIGITS) + { + return -1; + } + + int offset = 0; + long integerPart = (long) value; + + //handle sign + if (value < 0) + { + asciiBuffer[offset++] = '-'; + integerPart = -integerPart; + } + + //extract fraction part + long fractionPart = (long) ((Math.abs((double)value) - integerPart) * POWER_OF_TENS[maxFractionDigits] + 0.5d); + + //Check for rounding to next integer + if (fractionPart >= POWER_OF_TENS[maxFractionDigits]) { + integerPart++; + fractionPart -= POWER_OF_TENS[maxFractionDigits]; + } + + //format integer part + offset = formatPositiveNumber(integerPart, getExponent(integerPart), false, asciiBuffer, offset); + + if (fractionPart > 0 && maxFractionDigits > 0) + { + asciiBuffer[offset++] = '.'; + offset = formatPositiveNumber(fractionPart, maxFractionDigits - 1, true, asciiBuffer, offset); + } + + return offset; + } + + /** + * Formats a positive integer number starting with the digit at {@code 10^exp}. + * + * @param number The number to format + * @param exp The start digit + * @param omitTrailingZeros Whether the formatting should stop if only trailing zeros are left. + * This is needed e.g. when formatting fractions of a number. + * @param asciiBuffer The buffer to write the ASCII digits to + * @param startOffset The start offset into the buffer to start writing + * + * @return The offset into the buffer which contains the first byte that was not filled by the + * method + */ + private static int formatPositiveNumber(long number, int exp, boolean omitTrailingZeros, byte[] asciiBuffer, int startOffset) + { + int offset = startOffset; + long remaining = number; + + while (remaining > Integer.MAX_VALUE && (!omitTrailingZeros || remaining > 0)) + { + long digit = remaining / POWER_OF_TENS[exp]; + remaining -= (digit * POWER_OF_TENS[exp]); + + asciiBuffer[offset++] = (byte) ('0' + digit); + exp--; + } + + //If the remaining fits into an integer, use int arithmetic as it is faster + int remainingInt = (int) remaining; + while (exp >= 0 && (!omitTrailingZeros || remainingInt > 0)) + { + int digit = remainingInt / POWER_OF_TENS_INT[exp]; + remainingInt -= (digit * POWER_OF_TENS_INT[exp]); + + asciiBuffer[offset++] = (byte) ('0' + digit); + exp--; + } + + return offset; + } + + /** + * Returns the highest exponent of 10 where {@code 10^exp < number} for numbers > 0 + */ + private static int getExponent(long number) + { + for (int exp = 0; exp < (POWER_OF_TENS.length - 1); exp++) + { + if (number < POWER_OF_TENS[exp + 1]) + { + return exp; + } + } + + return POWER_OF_TENS.length - 1; + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/QuickSort.java b/pdfbox/src/main/java/org/apache/pdfbox/util/QuickSort.java new file mode 100644 index 00000000000..13823b9206b --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/QuickSort.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +import java.util.ArrayDeque; +import java.util.Comparator; +import java.util.Deque; +import java.util.List; + +/** + * see http://de.wikipedia.org/wiki/Quicksort. + * + * @author Uwe Pachler + * @author Manuel Aristaran + */ +public final class QuickSort +{ + + private QuickSort() + { + } + + private static final Comparator OBJCOMP = new Comparator() + { + @Override + public int compare(Comparable object1, Comparable object2) + { + return object1.compareTo(object2); + } + }; + + /** + * Sorts the given list using the given comparator. + * + * @param type of the objects to be sorted. + * @param list list to be sorted + * @param cmp comparator used to compare the objects within the list + */ + public static void sort(List list, Comparator cmp) + { + int size = list.size(); + if (size < 2) + { + return; + } + quicksort(list, cmp); + } + + /** + * Sorts the given list using compareTo as comparator. + * + * @param type of the objects to be sorted. + * @param list list to be sorted + */ + public static void sort(List list) + { + sort(list, (Comparator) OBJCOMP); + } + + private static void quicksort(List list, Comparator cmp) + { + Deque stack = new ArrayDeque<>(); + stack.push(0); + stack.push(list.size()); + while (!stack.isEmpty()) + { + int right = stack.pop(); + int left = stack.pop(); + if (right - left < 2) + { + continue; + } + int p = left + ((right - left) / 2); + p = partition(list, cmp, p, left, right); + + stack.push(p + 1); + stack.push(right); + + stack.push(left); + stack.push(p); + } + } + + private static int partition(List list, Comparator cmp, int p, int start, int end) + { + int l = start; + int h = end - 2; + T piv = list.get(p); + swap(list, p, end - 1); + + while (l < h) + { + if (cmp.compare(list.get(l), piv) <= 0) + { + l++; + } + else if (cmp.compare(piv, list.get(h)) <= 0) + { + h--; + } + else + { + swap(list, l, h); + } + } + int idx = h; + if (cmp.compare(list.get(h), piv) < 0) + { + idx++; + } + swap(list, end - 1, idx); + return idx; + } + + private static void swap(List list, int i, int j) + { + T tmp = list.get(i); + list.set(i, list.get(j)); + list.set(j, tmp); + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/SmallMap.java b/pdfbox/src/main/java/org/apache/pdfbox/util/SmallMap.java new file mode 100644 index 00000000000..a4a5d996cd7 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/SmallMap.java @@ -0,0 +1,388 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Map implementation with a smallest possible memory usage. + * It should only be used for maps with small number of items + * (e.g. <30) since most operations have an O(n) complexity. + * Thus it should be used in cases with large number of map + * objects, each having only few items. + * + *

    null is not supported for keys or values.

    + */ +public class SmallMap implements Map +{ + /** + * stores key-value pair as 2 objects; key first; in case of empty map this might be null + */ + private Object[] mapArr; + + /** Creates empty map. */ + public SmallMap() + { + } + + /** Creates map filled with entries from provided map. */ + public SmallMap(Map initMap) + { + putAll(initMap); + } + + /** + * Returns index of key within map-array or -1 + * if key is not found (or key is null). + */ + private int findKey(Object key) + { + if (isEmpty() || (key==null)) + { + return -1; + } + + for ( int aIdx = 0; aIdx < mapArr.length; aIdx+=2 ) + { + if (key.equals(mapArr[aIdx])) + { + return aIdx; + } + } + + return -1; + } + + /** + * Returns index of value within map-array or -1 + * if value is not found (or value is null). + */ + private int findValue(Object value) + { + if (isEmpty() || (value==null)) + { + return -1; + } + + for ( int aIdx = 1; aIdx < mapArr.length; aIdx+=2 ) + { + if (value.equals(mapArr[aIdx])) + { + return aIdx; + } + } + + return -1; + } + + @Override + public int size() + { + return mapArr == null ? 0 : mapArr.length >> 1; + } + + @Override + public boolean isEmpty() + { + return (mapArr == null) || (mapArr.length == 0); + } + + @Override + public boolean containsKey(Object key) + { + return findKey(key) >= 0; + } + + @Override + public boolean containsValue(Object value) + { + return findValue(value) >= 0; + } + + @SuppressWarnings("unchecked") + @Override + public V get(Object key) + { + int kIdx = findKey(key); + + return kIdx < 0 ? null : (V) mapArr[kIdx+1]; + } + + @Override + public V put(K key, V value) + { + if ((key == null) || (value == null)) + { + throw new NullPointerException( "Key or value must not be null."); + } + + if (mapArr == null) + { + mapArr = new Object[] { key, value }; + return null; + } + else + { + int kIdx = findKey(key); + + if (kIdx < 0) + { + // key unknown + int oldLen = mapArr.length; + Object[] newMapArr = new Object[oldLen+2]; + System.arraycopy(mapArr, 0, newMapArr, 0, oldLen); + newMapArr[oldLen] = key; + newMapArr[oldLen+1] = value; + mapArr = newMapArr; + return null; + } + else + { + // key exists; replace value + @SuppressWarnings("unchecked") + V oldValue = (V) mapArr[kIdx+1]; + mapArr[kIdx+1] = value; + return oldValue; + } + } + } + + @Override + public V remove(Object key) + { + int kIdx = findKey(key); + + if (kIdx < 0) + { + // not found + return null; + } + + @SuppressWarnings("unchecked") + V oldValue = (V) mapArr[kIdx+1]; + int oldLen = mapArr.length; + + if (oldLen == 2) + { + // was last entry + mapArr = null; + } + else + { + Object[] newMapArr = new Object[oldLen-2]; + System.arraycopy(mapArr, 0, newMapArr, 0, kIdx); + System.arraycopy(mapArr, kIdx+2, newMapArr, kIdx, oldLen - kIdx - 2); + mapArr = newMapArr; + } + + return oldValue; + } + + @Override + public final void putAll(Map otherMap) + { + if ((mapArr == null) || (mapArr.length == 0)) + { + // existing map is empty + mapArr = new Object[otherMap.size() << 1]; + int aIdx = 0; + for (Entry entry : otherMap.entrySet()) + { + if ((entry.getKey() == null) || (entry.getValue() == null)) + { + throw new NullPointerException( "Key or value must not be null."); + } + + mapArr[aIdx++] = entry.getKey(); + mapArr[aIdx++] = entry.getValue(); + } + } + else + { + int oldLen = mapArr.length; + // first increase array size to hold all to put entries as if they have unknown keys + // reduce after adding all to the required size + Object[] newMapArr = new Object[oldLen+(otherMap.size() << 1)]; + System.arraycopy(mapArr, 0, newMapArr, 0, oldLen); + + int newIdx = oldLen; + for (Entry entry : otherMap.entrySet()) + { + if ((entry.getKey() == null) || (entry.getValue() == null)) + { + throw new NullPointerException( "Key or value must not be null."); + } + + int existKeyIdx = findKey(entry.getKey()); + + if (existKeyIdx >= 0) + { + // existing key + newMapArr[existKeyIdx+1] = entry.getValue(); + } + else + { + // new key + newMapArr[newIdx++] = entry.getKey(); + newMapArr[newIdx++] = entry.getValue(); + } + } + + if (newIdx < newMapArr.length) + { + Object[] reducedMapArr = new Object[newIdx]; + System.arraycopy(newMapArr, 0, reducedMapArr, 0, newIdx); + newMapArr = reducedMapArr; + } + + mapArr = newMapArr; + } + } + + @Override + public void clear() + { + mapArr = null; + } + + /** + * Returns a set view of the keys contained in this map. + * + *

    The current implementation does not allow changes to the + * returned key set (which would have to be reflected in the + * underlying map.

    + */ + @SuppressWarnings("unchecked") + @Override + public Set keySet() + { + if (isEmpty()) + { + return Collections.emptySet(); + } + + Set keys = new LinkedHashSet<>(); + for (int kIdx = 0; kIdx < mapArr.length; kIdx+=2) + { + keys.add((K)mapArr[kIdx]); + } + return Collections.unmodifiableSet( keys ); + } + + /** + * Returns a collection of the values contained in this map. + * + *

    The current implementation does not allow changes to the + * returned collection (which would have to be reflected in the + * underlying map.

    + */ + @SuppressWarnings("unchecked") + @Override + public Collection values() + { + if (isEmpty()) + { + return Collections.emptySet(); + } + + List values = new ArrayList<>(mapArr.length >> 1); + for (int vIdx = 1; vIdx < mapArr.length; vIdx+=2) + { + values.add((V)mapArr[vIdx]); + } + return Collections.unmodifiableList( values ); + } + + private class SmallMapEntry implements Entry + { + private final int keyIdx; + + SmallMapEntry(int keyInMapIdx) + { + keyIdx = keyInMapIdx; + } + + @SuppressWarnings("unchecked") + @Override + public K getKey() + { + return (K)mapArr[keyIdx]; + } + + @SuppressWarnings("unchecked") + @Override + public V getValue() + { + return (V)mapArr[keyIdx+1]; + } + + @Override + public V setValue(V value) + { + if (value == null) + { + throw new NullPointerException( "Key or value must not be null."); + } + + V oldValue = getValue(); + mapArr[keyIdx+1] = value; + return oldValue; + } + + @Override + public int hashCode() + { + return getKey().hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof SmallMap.SmallMapEntry)) + { + return false; + } + @SuppressWarnings("unchecked") + SmallMapEntry other = (SmallMapEntry) obj; + + return getKey().equals(other.getKey()) && getValue().equals(other.getValue()); + } + } + + @Override + public Set> entrySet() + { + if (isEmpty()) + { + return Collections.emptySet(); + } + + Set> entries = new LinkedHashSet<>(); + for (int kIdx = 0; kIdx < mapArr.length; kIdx+=2) + { + entries.add(new SmallMapEntry(kIdx)); + } + return Collections.unmodifiableSet( entries ); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/Vector.java b/pdfbox/src/main/java/org/apache/pdfbox/util/Vector.java new file mode 100644 index 00000000000..c99aca1c41e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/Vector.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +/** + * A 2D vector. + * + * @author John Hewson + */ +public final class Vector +{ + private final float x, y; + + public Vector(float x, float y) + { + this.x = x; + this.y = y; + } + + /** + * Returns the x magnitude. + */ + public float getX() + { + return x; + } + + /** + * Returns the y magnitude. + */ + public float getY() + { + return y; + } + + /** + * Returns a new vector scaled by both x and y. + * + * @param sxy x and y scale + */ + public Vector scale(float sxy) + { + return new Vector(x * sxy, y * sxy); + } + + @Override + public String toString() + { + return "(" + x + ", " + y + ")"; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/Version.java b/pdfbox/src/main/java/org/apache/pdfbox/util/Version.java new file mode 100644 index 00000000000..3bb255fff0e --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/Version.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.util; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Exposes PDFBox version. + */ +public final class Version +{ + private static final Log LOG = LogFactory.getLog(Version.class); + + private static final String PDFBOX_VERSION_PROPERTIES = + "/org/apache/pdfbox/resources/version.properties"; + + private Version() + { + // static helper + } + + /** + * Returns the version of PDFBox. + */ + public static String getVersion() + { + try (InputStream is = Version.class.getResourceAsStream(PDFBOX_VERSION_PROPERTIES)) + { + if (is == null) + { + return null; + } + Properties properties = new Properties(); + properties.load(is); + return properties.getProperty("pdfbox.version", null); + } + catch (IOException io) + { + LOG.debug("Unable to read version from properties - returning null", io); + return null; + } + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/XMLUtil.java b/pdfbox/src/main/java/org/apache/pdfbox/util/XMLUtil.java new file mode 100644 index 00000000000..2710bd3f4f0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/XMLUtil.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util; + +import java.io.InputStream; +import java.io.IOException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.FactoryConfigurationError; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; +import org.xml.sax.SAXException; + +/** + * This class with handle some simple XML operations. + * + * @author Ben Litchfield + */ +public final class XMLUtil +{ + /** + * Utility class, should not be instantiated. + * + */ + private XMLUtil() + { + } + + /** + * This will parse an XML stream and create a DOM document. + * + * @param is The stream to get the XML from. + * @return The DOM document. + * @throws IOException It there is an error creating the dom. + */ + public static Document parse(InputStream is) throws IOException + { + return parse(is, false); + } + + /** + * This will parse an XML stream and create a DOM document. + * + * @param is The stream to get the XML from. + * @param nsAware activates namespace awareness of the parser + * @return The DOM document. + * @throws IOException It there is an error creating the dom. + */ + public static Document parse(InputStream is, boolean nsAware) throws IOException + { + try + { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + builderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + builderFactory.setFeature("http://xml.org/sax/features/external-general-entities", + false); + builderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", + false); + builderFactory.setFeature( + "http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + builderFactory.setXIncludeAware(false); + builderFactory.setExpandEntityReferences(false); + builderFactory.setNamespaceAware(nsAware); + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + return builder.parse(is); + } + catch (FactoryConfigurationError | ParserConfigurationException | SAXException e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * This will get the text value of an element. + * + * @param node The node to get the text value for. + * @return The text of the node. + */ + public static String getNodeValue(Element node) + { + StringBuilder sb = new StringBuilder(); + NodeList children = node.getChildNodes(); + int numNodes = children.getLength(); + for (int i = 0; i < numNodes; i++) + { + Node next = children.item(i); + if (next instanceof Text) + { + sb.append(next.getNodeValue()); + } + } + return sb.toString(); + } + +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/ByteTrie.java b/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/ByteTrie.java new file mode 100644 index 00000000000..ed57a4635c0 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/ByteTrie.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util.filetypedetector; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Drew Noakes + * + * code taken from https://github.com/drewnoakes/metadata-extractor + * + * 2016-01-04 + * + * latest commit number 73f1a48 + * + * Stores values using a prefix tree (aka 'trie', i.e. reTRIEval data structure). + * + * @param the type of value to store for byte sequences + */ +class ByteTrie +{ + /** + * A node in the trie. Has children and may have an associated value. + */ + static class ByteTrieNode + { + private final Map> children = new HashMap<>(); + private T value = null; + + public void setValue(T value) + { + if (this.value != null) + { + throw new IllegalStateException("Value already set for this trie node"); + } + this.value = value; + } + + public T getValue() + { + return value; + } + } + + private final ByteTrieNode root = new ByteTrieNode<>(); + private int maxDepth; + + /** + * Return the most specific value stored for this byte sequence. If not found, returns + * null or a default values as specified by calling + * {@link ByteTrie#setDefaultValue}. + * @param bytes + * @return + */ + public T find(byte[] bytes) + { + ByteTrieNode node = root; + T val = node.getValue(); + for (byte b : bytes) + { + ByteTrieNode child = node.children.get(b); + if (child == null) + { + break; + } + node = child; + if (node.getValue() != null) + { + val = node.getValue(); + } + } + return val; + } + + /** + * Store the given value at the specified path. + * @param value + * @param parts + */ + public void addPath(T value, byte[]... parts) + { + int depth = 0; + ByteTrieNode node = root; + for (byte[] part : parts) + { + for (byte b : part) + { + ByteTrieNode child = node.children.get(b); + if (child == null) + { + child = new ByteTrieNode<>(); + node.children.put(b, child); + } + node = child; + depth++; + } + } + node.setValue(value); + maxDepth = Math.max(maxDepth, depth); + } + + /** + * Sets the default value to use in {@link ByteTrie#find(byte[])} when no path matches. + * @param defaultValue + */ + public void setDefaultValue(T defaultValue) + { + root.setValue(defaultValue); + } + + /** + * Gets the maximum depth stored in this trie. + * @return + */ + public int getMaxDepth() + { + return maxDepth; + } +} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/FileType.java b/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/FileType.java new file mode 100644 index 00000000000..3da1faa91eb --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/FileType.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util.filetypedetector; + +/** + * @author Drew Noakes + * + * code taken from https://github.com/drewnoakes/metadata-extractor + * + * 2016-01-04 + * + * latest commit number 73f1a48 + * + * Enumeration of supported image file formats. + */ +public enum FileType +{ + UNKNOWN, + JPEG, + TIFF, + PSD, + PNG, + BMP, + GIF, + ICO, + PCX, + RIFF, + + /** Sony camera raw. */ + ARW, + /** Canon camera raw, version 1. */ + CRW, + /** Canon camera raw, version 2. */ + CR2, + /** Nikon camera raw. */ + NEF, + /** Olympus camera raw. */ + ORF, + /** FujiFilm camera raw. */ + RAF, + /** Panasonic camera raw. */ + RW2 +} \ No newline at end of file diff --git a/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/FileTypeDetector.java b/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/FileTypeDetector.java new file mode 100644 index 00000000000..8ba522d7814 --- /dev/null +++ b/pdfbox/src/main/java/org/apache/pdfbox/util/filetypedetector/FileTypeDetector.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.util.filetypedetector; + +import java.io.BufferedInputStream; +import java.io.IOException; + +import org.apache.pdfbox.util.Charsets; + +/** + * @author Drew Noakes + * + * code taken from https://github.com/drewnoakes/metadata-extractor + * + * 2016-01-04 + * + * latest commit number 73f1a48 + * + * Examines the a file's first bytes and estimates the file's type. + */ +public final class FileTypeDetector +{ + private static final ByteTrie root; + + static + { + root = new ByteTrie<>(); + root.setDefaultValue(FileType.UNKNOWN); + + // https://en.wikipedia.org/wiki/List_of_file_signatures + + root.addPath(FileType.JPEG, new byte[]{(byte)0xff, (byte)0xd8}); + root.addPath(FileType.TIFF, "II".getBytes(Charsets.ISO_8859_1), new byte[]{0x2a, 0x00}); + root.addPath(FileType.TIFF, "MM".getBytes(Charsets.ISO_8859_1), new byte[]{0x00, 0x2a}); + root.addPath(FileType.PSD, "8BPS".getBytes(Charsets.ISO_8859_1)); + root.addPath(FileType.PNG, new byte[]{(byte)0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52}); + // TODO technically there are other very rare magic numbers for OS/2 BMP files... + root.addPath(FileType.BMP, "BM".getBytes(Charsets.ISO_8859_1)); + root.addPath(FileType.GIF, "GIF87a".getBytes(Charsets.ISO_8859_1)); + root.addPath(FileType.GIF, "GIF89a".getBytes(Charsets.ISO_8859_1)); + root.addPath(FileType.ICO, new byte[]{0x00, 0x00, 0x01, 0x00}); + // multiple PCX versions, explicitly listed + root.addPath(FileType.PCX, new byte[]{0x0A, 0x00, 0x01}); + root.addPath(FileType.PCX, new byte[]{0x0A, 0x02, 0x01}); + root.addPath(FileType.PCX, new byte[]{0x0A, 0x03, 0x01}); + root.addPath(FileType.PCX, new byte[]{0x0A, 0x05, 0x01}); + root.addPath(FileType.RIFF, "RIFF".getBytes(Charsets.ISO_8859_1)); + + // https://github.com/drewnoakes/metadata-extractor/issues/217 + // root.addPath(FileType.ARW, "II".getBytes(Charsets.ISO_8859_1), new byte[]{0x2a, 0x00, 0x08, 0x00}) + root.addPath(FileType.CRW, "II".getBytes(Charsets.ISO_8859_1), new byte[]{0x1a, 0x00, 0x00, 0x00}, "HEAPCCDR".getBytes(Charsets.ISO_8859_1)); + root.addPath(FileType.CR2, "II".getBytes(Charsets.ISO_8859_1), new byte[]{0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x43, 0x52}); + root.addPath(FileType.NEF, "MM".getBytes(Charsets.ISO_8859_1), new byte[]{0x00, 0x2a, 0x00, 0x00, 0x00, (byte)0x80, 0x00}); + root.addPath(FileType.ORF, "IIRO".getBytes(Charsets.ISO_8859_1), new byte[]{(byte)0x08, 0x00}); + root.addPath(FileType.ORF, "IIRS".getBytes(Charsets.ISO_8859_1), new byte[]{(byte)0x08, 0x00}); + root.addPath(FileType.RAF, "FUJIFILMCCD-RAW".getBytes(Charsets.ISO_8859_1)); + root.addPath(FileType.RW2, "II".getBytes(Charsets.ISO_8859_1), new byte[]{0x55, 0x00}); + } + + private FileTypeDetector() throws Exception + { + } + + /** + * Examines the a file's first bytes and estimates the file's type. + *

    + * Requires a {@link BufferedInputStream} in order to mark and reset the stream to the position + * at which it was provided to this method once completed. + *

    + * Requires the stream to contain at least eight bytes. + * + * @param inputStream a buffered input stream of the file to examine. + * @return the file type. + * @throws IOException if an IO error occurred or the input stream ended unexpectedly. + */ + public static FileType detectFileType(final BufferedInputStream inputStream) throws IOException + { + if (!inputStream.markSupported()) + { + throw new IOException("Stream must support mark/reset"); + } + + int maxByteCount = root.getMaxDepth(); + + inputStream.mark(maxByteCount); + + byte[] bytes = new byte[maxByteCount]; + int bytesRead = inputStream.read(bytes); + + if (bytesRead == -1) + { + throw new IOException("Stream ended before file's magic number could be determined."); + } + + inputStream.reset(); + + //noinspection ConstantConditions + return root.find(bytes); + } + + public static FileType detectFileType(final byte[] fileBytes) throws IOException + { + return root.find(fileBytes); + } +} diff --git a/src/org/pdfbox/util/package.html b/pdfbox/src/main/java/org/apache/pdfbox/util/package.html similarity index 100% rename from src/org/pdfbox/util/package.html rename to pdfbox/src/main/java/org/apache/pdfbox/util/package.html diff --git a/pdfbox/src/main/javadoc/overview.html b/pdfbox/src/main/javadoc/overview.html new file mode 100644 index 00000000000..0256e0dcab7 --- /dev/null +++ b/pdfbox/src/main/javadoc/overview.html @@ -0,0 +1,25 @@ + + + +

    The Apache PDFBox™ API Documentation.

    + +

    Apache PDFBox is a Java library to work with +PDF documents.

    + \ No newline at end of file diff --git a/Resources/afm/Courier-Bold.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-Bold.afm similarity index 97% rename from Resources/afm/Courier-Bold.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-Bold.afm index d25d776f5a7..2011decb92e 100644 --- a/Resources/afm/Courier-Bold.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-Bold.afm @@ -1,342 +1,684 @@ -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 1997 -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 AdobeStandardEncoding -CapHeight 562 -XHeight 439 -Ascender 629 -Descender -157 -StdHW 84 -StdVW 106 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ; -C 165 ; WX 600 ; N yen ; B 10 0 590 562 ; -C 166 ; WX 600 ; N florin ; B -30 -131 572 616 ; -C 167 ; WX 600 ; N section ; B 83 -70 517 580 ; -C 168 ; WX 600 ; N currency ; B 54 49 546 517 ; -C 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ; -C 174 ; WX 600 ; N fi ; B 12 0 593 626 ; -C 175 ; WX 600 ; N fl ; B 12 0 593 626 ; -C 177 ; WX 600 ; N endash ; B 65 203 535 313 ; -C 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ; -C 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ; -C 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ; -C 183 ; WX 600 ; N bullet ; B 140 132 460 430 ; -C 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ; -C 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ; -C 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ; -C 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ; -C 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ; -C 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ; -C 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ; -C 193 ; WX 600 ; N grave ; B 132 508 395 661 ; -C 194 ; WX 600 ; N acute ; B 205 508 468 661 ; -C 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ; -C 196 ; WX 600 ; N tilde ; B 89 493 512 636 ; -C 197 ; WX 600 ; N macron ; B 88 505 512 585 ; -C 198 ; WX 600 ; N breve ; B 83 468 517 631 ; -C 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ; -C 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ; -C 202 ; WX 600 ; N ring ; B 198 481 402 678 ; -C 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ; -C 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ; -C 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ; -C 207 ; WX 600 ; N caron ; B 103 493 497 667 ; -C 208 ; WX 600 ; N emdash ; B -10 203 610 313 ; -C 225 ; WX 600 ; N AE ; B -29 0 602 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ; -C 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ; -C 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ; -C 234 ; WX 600 ; N OE ; B -25 0 595 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ; -C 241 ; WX 600 ; N ae ; B -4 -15 601 454 ; -C 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ; -C 248 ; WX 600 ; N lslash ; B 77 0 523 626 ; -C 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ; -C 250 ; WX 600 ; N oe ; B -18 -15 611 454 ; -C 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ; -C -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ; -C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ; -C -1 ; WX 600 ; N divide ; B 71 16 529 500 ; -C -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ; -C -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ; -C -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ; -C -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ; -C -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ; -C -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ; -C -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ; -C -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ; -C -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ; -C -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ; -C -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ; -C -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ; -C -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ; -C -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ; -C -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ; -C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ; -C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ; -C -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ; -C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ; -C -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ; -C -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ; -C -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ; -C -1 ; WX 600 ; N multiply ; B 81 39 520 478 ; -C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ; -C -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ; -C -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ; -C -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ; -C -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ; -C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ; -C -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ; -C -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ; -C -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ; -C -1 ; WX 600 ; N Eth ; B 30 0 594 562 ; -C -1 ; 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 -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ; -C -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ; -C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ; -C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ; -C -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ; -C -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ; -C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; -C -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ; -C -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ; -C -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ; -C -1 ; WX 600 ; N mu ; B -1 -142 569 439 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B -9 230 749 562 ; -C -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ; -C -1 ; 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 -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ; -C -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ; -C -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ; -C -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ; -C -1 ; 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 -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ; -C -1 ; 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 -1 ; WX 600 ; N degree ; B 86 243 474 616 ; -C -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ; -C -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ; -C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ; -C -1 ; 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 -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ; -C -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ; -C -1 ; WX 600 ; N Aring ; B -9 0 609 801 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ; -C -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ; -C -1 ; 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 -1 ; WX 600 ; N eth ; B 58 -27 543 626 ; -C -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ; -C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ; -C -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ; -C -1 ; WX 600 ; N imacron ; B 77 0 523 585 ; -C -1 ; 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:00 1997 + +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 AdobeStandardEncoding + +CapHeight 562 + +XHeight 439 + +Ascender 629 + +Descender -157 + +StdHW 84 + +StdVW 106 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ; + +C 165 ; WX 600 ; N yen ; B 10 0 590 562 ; + +C 166 ; WX 600 ; N florin ; B -30 -131 572 616 ; + +C 167 ; WX 600 ; N section ; B 83 -70 517 580 ; + +C 168 ; WX 600 ; N currency ; B 54 49 546 517 ; + +C 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ; + +C 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ; + +C 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ; + +C 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ; + +C 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ; + +C 174 ; WX 600 ; N fi ; B 12 0 593 626 ; + +C 175 ; WX 600 ; N fl ; B 12 0 593 626 ; + +C 177 ; WX 600 ; N endash ; B 65 203 535 313 ; + +C 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ; + +C 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ; + +C 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ; + +C 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ; + +C 183 ; WX 600 ; N bullet ; B 140 132 460 430 ; + +C 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ; + +C 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ; + +C 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ; + +C 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ; + +C 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ; + +C 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ; + +C 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ; + +C 193 ; WX 600 ; N grave ; B 132 508 395 661 ; + +C 194 ; WX 600 ; N acute ; B 205 508 468 661 ; + +C 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ; + +C 196 ; WX 600 ; N tilde ; B 89 493 512 636 ; + +C 197 ; WX 600 ; N macron ; B 88 505 512 585 ; + +C 198 ; WX 600 ; N breve ; B 83 468 517 631 ; + +C 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ; + +C 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ; + +C 202 ; WX 600 ; N ring ; B 198 481 402 678 ; + +C 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ; + +C 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ; + +C 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ; + +C 207 ; WX 600 ; N caron ; B 103 493 497 667 ; + +C 208 ; WX 600 ; N emdash ; B -10 203 610 313 ; + +C 225 ; WX 600 ; N AE ; B -29 0 602 562 ; + +C 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ; + +C 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ; + +C 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ; + +C 234 ; WX 600 ; N OE ; B -25 0 595 562 ; + +C 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ; + +C 241 ; WX 600 ; N ae ; B -4 -15 601 454 ; + +C 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ; + +C 248 ; WX 600 ; N lslash ; B 77 0 523 626 ; + +C 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ; + +C 250 ; WX 600 ; N oe ; B -18 -15 611 454 ; + +C 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ; + +C -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ; + +C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ; + +C -1 ; WX 600 ; N divide ; B 71 16 529 500 ; + +C -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ; + +C -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ; + +C -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ; + +C -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ; + +C -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ; + +C -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ; + +C -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ; + +C -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ; + +C -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ; + +C -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ; + +C -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ; + +C -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ; + +C -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ; + +C -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ; + +C -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ; + +C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ; + +C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ; + +C -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ; + +C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ; + +C -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ; + +C -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ; + +C -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ; + +C -1 ; WX 600 ; N multiply ; B 81 39 520 478 ; + +C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ; + +C -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ; + +C -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ; + +C -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ; + +C -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ; + +C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ; + +C -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ; + +C -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ; + +C -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ; + +C -1 ; WX 600 ; N Eth ; B 30 0 594 562 ; + +C -1 ; 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 -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ; + +C -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ; + +C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ; + +C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ; + +C -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ; + +C -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ; + +C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; + +C -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ; + +C -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ; + +C -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ; + +C -1 ; WX 600 ; N mu ; B -1 -142 569 439 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B -9 230 749 562 ; + +C -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ; + +C -1 ; 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 -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ; + +C -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ; + +C -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ; + +C -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ; + +C -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ; + +C -1 ; 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 -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ; + +C -1 ; 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 -1 ; WX 600 ; N degree ; B 86 243 474 616 ; + +C -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ; + +C -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ; + +C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ; + +C -1 ; 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 -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ; + +C -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ; + +C -1 ; WX 600 ; N Aring ; B -9 0 609 801 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ; + +C -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ; + +C -1 ; 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 -1 ; WX 600 ; N eth ; B 58 -27 543 626 ; + +C -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ; + +C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ; + +C -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ; + +C -1 ; WX 600 ; N imacron ; B 77 0 523 585 ; + +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; + +EndCharMetrics + +EndFontMetrics + diff --git a/Resources/afm/Courier-BoldOblique.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-BoldOblique.afm similarity index 97% rename from Resources/afm/Courier-BoldOblique.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-BoldOblique.afm index 9f365eeca6c..5e18f8521d6 100644 --- a/Resources/afm/Courier-BoldOblique.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-BoldOblique.afm @@ -1,342 +1,684 @@ -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 1997 -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 003.000 -Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -EncodingScheme AdobeStandardEncoding -CapHeight 562 -XHeight 439 -Ascender 629 -Descender -157 -StdHW 84 -StdVW 106 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ; -C 165 ; WX 600 ; N yen ; B 98 0 710 562 ; -C 166 ; WX 600 ; N florin ; B -57 -131 702 616 ; -C 167 ; WX 600 ; N section ; B 74 -70 620 580 ; -C 168 ; WX 600 ; N currency ; B 77 49 644 517 ; -C 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ; -C 174 ; WX 600 ; N fi ; B 12 0 644 626 ; -C 175 ; WX 600 ; N fl ; B 12 0 644 626 ; -C 177 ; WX 600 ; N endash ; B 108 203 602 313 ; -C 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ; -C 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ; -C 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ; -C 183 ; WX 600 ; N bullet ; B 196 132 523 430 ; -C 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ; -C 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ; -C 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ; -C 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ; -C 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ; -C 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ; -C 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ; -C 193 ; WX 600 ; N grave ; B 272 508 503 661 ; -C 194 ; WX 600 ; N acute ; B 312 508 609 661 ; -C 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ; -C 196 ; WX 600 ; N tilde ; B 199 493 643 636 ; -C 197 ; WX 600 ; N macron ; B 195 505 637 585 ; -C 198 ; WX 600 ; N breve ; B 217 468 652 631 ; -C 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ; -C 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ; -C 202 ; WX 600 ; N ring ; B 319 481 528 678 ; -C 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ; -C 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ; -C 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ; -C 207 ; WX 600 ; N caron ; B 238 493 633 667 ; -C 208 ; WX 600 ; N emdash ; B 33 203 677 313 ; -C 225 ; WX 600 ; N AE ; B -29 0 708 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ; -C 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ; -C 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ; -C 234 ; WX 600 ; N OE ; B 26 0 701 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ; -C 241 ; WX 600 ; N ae ; B 21 -15 652 454 ; -C 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ; -C 248 ; WX 600 ; N lslash ; B 77 0 587 626 ; -C 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ; -C 250 ; WX 600 ; N oe ; B 18 -15 662 454 ; -C 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ; -C -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ; -C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ; -C -1 ; WX 600 ; N divide ; B 114 16 596 500 ; -C -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ; -C -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ; -C -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ; -C -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ; -C -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ; -C -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ; -C -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ; -C -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ; -C -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ; -C -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ; -C -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ; -C -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ; -C -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ; -C -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ; -C -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ; -C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ; -C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ; -C -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ; -C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ; -C -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ; -C -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ; -C -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ; -C -1 ; WX 600 ; N multiply ; B 104 39 606 478 ; -C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ; -C -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ; -C -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ; -C -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ; -C -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ; -C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ; -C -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ; -C -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ; -C -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ; -C -1 ; WX 600 ; N Eth ; B 30 0 664 562 ; -C -1 ; 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 -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ; -C -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ; -C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ; -C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ; -C -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ; -C -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ; -C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; -C -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ; -C -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ; -C -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ; -C -1 ; WX 600 ; N mu ; B 49 -142 592 439 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B 86 230 869 562 ; -C -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ; -C -1 ; 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 -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ; -C -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ; -C -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ; -C -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ; -C -1 ; 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 -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ; -C -1 ; 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 -1 ; WX 600 ; N degree ; B 173 243 570 616 ; -C -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ; -C -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ; -C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ; -C -1 ; 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 -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ; -C -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ; -C -1 ; WX 600 ; N Aring ; B -9 0 632 801 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ; -C -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ; -C -1 ; 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 -1 ; WX 600 ; N eth ; B 93 -27 661 626 ; -C -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ; -C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ; -C -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ; -C -1 ; WX 600 ; N imacron ; B 77 0 575 585 ; -C -1 ; 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 1997 + +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 003.000 + +Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. + +EncodingScheme AdobeStandardEncoding + +CapHeight 562 + +XHeight 439 + +Ascender 629 + +Descender -157 + +StdHW 84 + +StdVW 106 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ; + +C 165 ; WX 600 ; N yen ; B 98 0 710 562 ; + +C 166 ; WX 600 ; N florin ; B -57 -131 702 616 ; + +C 167 ; WX 600 ; N section ; B 74 -70 620 580 ; + +C 168 ; WX 600 ; N currency ; B 77 49 644 517 ; + +C 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ; + +C 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ; + +C 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ; + +C 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ; + +C 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ; + +C 174 ; WX 600 ; N fi ; B 12 0 644 626 ; + +C 175 ; WX 600 ; N fl ; B 12 0 644 626 ; + +C 177 ; WX 600 ; N endash ; B 108 203 602 313 ; + +C 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ; + +C 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ; + +C 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ; + +C 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ; + +C 183 ; WX 600 ; N bullet ; B 196 132 523 430 ; + +C 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ; + +C 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ; + +C 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ; + +C 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ; + +C 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ; + +C 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ; + +C 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ; + +C 193 ; WX 600 ; N grave ; B 272 508 503 661 ; + +C 194 ; WX 600 ; N acute ; B 312 508 609 661 ; + +C 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ; + +C 196 ; WX 600 ; N tilde ; B 199 493 643 636 ; + +C 197 ; WX 600 ; N macron ; B 195 505 637 585 ; + +C 198 ; WX 600 ; N breve ; B 217 468 652 631 ; + +C 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ; + +C 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ; + +C 202 ; WX 600 ; N ring ; B 319 481 528 678 ; + +C 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ; + +C 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ; + +C 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ; + +C 207 ; WX 600 ; N caron ; B 238 493 633 667 ; + +C 208 ; WX 600 ; N emdash ; B 33 203 677 313 ; + +C 225 ; WX 600 ; N AE ; B -29 0 708 562 ; + +C 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ; + +C 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ; + +C 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ; + +C 234 ; WX 600 ; N OE ; B 26 0 701 562 ; + +C 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ; + +C 241 ; WX 600 ; N ae ; B 21 -15 652 454 ; + +C 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ; + +C 248 ; WX 600 ; N lslash ; B 77 0 587 626 ; + +C 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ; + +C 250 ; WX 600 ; N oe ; B 18 -15 662 454 ; + +C 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ; + +C -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ; + +C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ; + +C -1 ; WX 600 ; N divide ; B 114 16 596 500 ; + +C -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ; + +C -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ; + +C -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ; + +C -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ; + +C -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ; + +C -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ; + +C -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ; + +C -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ; + +C -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ; + +C -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ; + +C -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ; + +C -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ; + +C -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ; + +C -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ; + +C -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ; + +C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ; + +C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ; + +C -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ; + +C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ; + +C -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ; + +C -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ; + +C -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ; + +C -1 ; WX 600 ; N multiply ; B 104 39 606 478 ; + +C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ; + +C -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ; + +C -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ; + +C -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ; + +C -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ; + +C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ; + +C -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ; + +C -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ; + +C -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ; + +C -1 ; WX 600 ; N Eth ; B 30 0 664 562 ; + +C -1 ; 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 -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ; + +C -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ; + +C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ; + +C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ; + +C -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ; + +C -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ; + +C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; + +C -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ; + +C -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ; + +C -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ; + +C -1 ; WX 600 ; N mu ; B 49 -142 592 439 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B 86 230 869 562 ; + +C -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ; + +C -1 ; 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 -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ; + +C -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ; + +C -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ; + +C -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ; + +C -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ; + +C -1 ; 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 -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ; + +C -1 ; 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 -1 ; WX 600 ; N degree ; B 173 243 570 616 ; + +C -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ; + +C -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ; + +C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ; + +C -1 ; 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 -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ; + +C -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ; + +C -1 ; WX 600 ; N Aring ; B -9 0 632 801 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ; + +C -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ; + +C -1 ; 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 -1 ; WX 600 ; N eth ; B 93 -27 661 626 ; + +C -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ; + +C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ; + +C -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ; + +C -1 ; WX 600 ; N imacron ; B 77 0 575 585 ; + +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; + +EndCharMetrics + +EndFontMetrics + diff --git a/Resources/afm/Courier-Oblique.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-Oblique.afm similarity index 97% rename from Resources/afm/Courier-Oblique.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-Oblique.afm index acacb3dd5de..52a2edddd93 100644 --- a/Resources/afm/Courier-Oblique.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier-Oblique.afm @@ -1,342 +1,684 @@ -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: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 AdobeStandardEncoding -CapHeight 562 -XHeight 426 -Ascender 629 -Descender -157 -StdHW 51 -StdVW 51 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ; -C 165 ; WX 600 ; N yen ; B 120 0 693 562 ; -C 166 ; WX 600 ; N florin ; B -26 -143 671 622 ; -C 167 ; WX 600 ; N section ; B 104 -78 590 580 ; -C 168 ; WX 600 ; N currency ; B 94 58 628 506 ; -C 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ; -C 174 ; WX 600 ; N fi ; B 3 0 619 629 ; -C 175 ; WX 600 ; N fl ; B 3 0 619 629 ; -C 177 ; WX 600 ; N endash ; B 124 231 586 285 ; -C 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ; -C 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ; -C 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ; -C 183 ; WX 600 ; N bullet ; B 224 130 485 383 ; -C 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ; -C 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ; -C 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ; -C 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ; -C 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ; -C 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ; -C 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ; -C 193 ; WX 600 ; N grave ; B 294 497 484 672 ; -C 194 ; WX 600 ; N acute ; B 348 497 612 672 ; -C 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ; -C 196 ; WX 600 ; N tilde ; B 212 489 629 606 ; -C 197 ; WX 600 ; N macron ; B 232 525 600 565 ; -C 198 ; WX 600 ; N breve ; B 279 501 576 609 ; -C 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ; -C 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ; -C 202 ; WX 600 ; N ring ; B 332 463 500 627 ; -C 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ; -C 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ; -C 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ; -C 207 ; WX 600 ; N caron ; B 262 492 614 669 ; -C 208 ; WX 600 ; N emdash ; B 49 231 661 285 ; -C 225 ; WX 600 ; N AE ; B 3 0 655 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ; -C 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ; -C 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ; -C 234 ; WX 600 ; N OE ; B 59 0 672 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ; -C 241 ; WX 600 ; N ae ; B 41 -15 626 441 ; -C 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ; -C 248 ; WX 600 ; N lslash ; B 95 0 587 629 ; -C 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ; -C 250 ; WX 600 ; N oe ; B 54 -15 615 441 ; -C 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ; -C -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ; -C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ; -C -1 ; WX 600 ; N divide ; B 136 48 573 467 ; -C -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ; -C -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ; -C -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ; -C -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ; -C -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ; -C -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ; -C -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ; -C -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ; -C -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ; -C -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ; -C -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ; -C -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ; -C -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ; -C -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ; -C -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ; -C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ; -C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ; -C -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ; -C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ; -C -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ; -C -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ; -C -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ; -C -1 ; WX 600 ; N multiply ; B 103 43 607 470 ; -C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ; -C -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ; -C -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ; -C -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ; -C -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ; -C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ; -C -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ; -C -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ; -C -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ; -C -1 ; WX 600 ; N Eth ; B 43 0 645 562 ; -C -1 ; 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 -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ; -C -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ; -C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ; -C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ; -C -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ; -C -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ; -C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; -C -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ; -C -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ; -C -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ; -C -1 ; WX 600 ; N mu ; B 72 -157 572 426 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B 75 263 742 562 ; -C -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ; -C -1 ; 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 -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ; -C -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ; -C -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ; -C -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ; -C -1 ; 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 -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ; -C -1 ; 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 -1 ; WX 600 ; N degree ; B 214 269 576 622 ; -C -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ; -C -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ; -C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ; -C -1 ; 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 -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ; -C -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ; -C -1 ; WX 600 ; N Aring ; B 3 0 607 750 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ; -C -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ; -C -1 ; 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 -1 ; WX 600 ; N eth ; B 102 -15 639 629 ; -C -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ; -C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ; -C -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ; -C -1 ; WX 600 ; N imacron ; B 95 0 543 565 ; -C -1 ; 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: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 AdobeStandardEncoding + +CapHeight 562 + +XHeight 426 + +Ascender 629 + +Descender -157 + +StdHW 51 + +StdVW 51 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ; + +C 165 ; WX 600 ; N yen ; B 120 0 693 562 ; + +C 166 ; WX 600 ; N florin ; B -26 -143 671 622 ; + +C 167 ; WX 600 ; N section ; B 104 -78 590 580 ; + +C 168 ; WX 600 ; N currency ; B 94 58 628 506 ; + +C 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ; + +C 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ; + +C 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ; + +C 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ; + +C 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ; + +C 174 ; WX 600 ; N fi ; B 3 0 619 629 ; + +C 175 ; WX 600 ; N fl ; B 3 0 619 629 ; + +C 177 ; WX 600 ; N endash ; B 124 231 586 285 ; + +C 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ; + +C 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ; + +C 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ; + +C 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ; + +C 183 ; WX 600 ; N bullet ; B 224 130 485 383 ; + +C 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ; + +C 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ; + +C 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ; + +C 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ; + +C 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ; + +C 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ; + +C 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ; + +C 193 ; WX 600 ; N grave ; B 294 497 484 672 ; + +C 194 ; WX 600 ; N acute ; B 348 497 612 672 ; + +C 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ; + +C 196 ; WX 600 ; N tilde ; B 212 489 629 606 ; + +C 197 ; WX 600 ; N macron ; B 232 525 600 565 ; + +C 198 ; WX 600 ; N breve ; B 279 501 576 609 ; + +C 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ; + +C 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ; + +C 202 ; WX 600 ; N ring ; B 332 463 500 627 ; + +C 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ; + +C 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ; + +C 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ; + +C 207 ; WX 600 ; N caron ; B 262 492 614 669 ; + +C 208 ; WX 600 ; N emdash ; B 49 231 661 285 ; + +C 225 ; WX 600 ; N AE ; B 3 0 655 562 ; + +C 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ; + +C 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ; + +C 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ; + +C 234 ; WX 600 ; N OE ; B 59 0 672 562 ; + +C 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ; + +C 241 ; WX 600 ; N ae ; B 41 -15 626 441 ; + +C 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ; + +C 248 ; WX 600 ; N lslash ; B 95 0 587 629 ; + +C 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ; + +C 250 ; WX 600 ; N oe ; B 54 -15 615 441 ; + +C 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ; + +C -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ; + +C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ; + +C -1 ; WX 600 ; N divide ; B 136 48 573 467 ; + +C -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ; + +C -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ; + +C -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ; + +C -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ; + +C -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ; + +C -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ; + +C -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ; + +C -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ; + +C -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ; + +C -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ; + +C -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ; + +C -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ; + +C -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ; + +C -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ; + +C -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ; + +C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ; + +C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ; + +C -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ; + +C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ; + +C -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ; + +C -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ; + +C -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ; + +C -1 ; WX 600 ; N multiply ; B 103 43 607 470 ; + +C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ; + +C -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ; + +C -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ; + +C -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ; + +C -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ; + +C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ; + +C -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ; + +C -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ; + +C -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ; + +C -1 ; WX 600 ; N Eth ; B 43 0 645 562 ; + +C -1 ; 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 -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ; + +C -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ; + +C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ; + +C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ; + +C -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ; + +C -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ; + +C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; + +C -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ; + +C -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ; + +C -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ; + +C -1 ; WX 600 ; N mu ; B 72 -157 572 426 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B 75 263 742 562 ; + +C -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ; + +C -1 ; 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 -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ; + +C -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ; + +C -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ; + +C -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ; + +C -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ; + +C -1 ; 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 -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ; + +C -1 ; 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 -1 ; WX 600 ; N degree ; B 214 269 576 622 ; + +C -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ; + +C -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ; + +C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ; + +C -1 ; 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 -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ; + +C -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ; + +C -1 ; WX 600 ; N Aring ; B 3 0 607 750 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ; + +C -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ; + +C -1 ; 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 -1 ; WX 600 ; N eth ; B 102 -15 639 629 ; + +C -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ; + +C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ; + +C -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ; + +C -1 ; WX 600 ; N imacron ; B 95 0 543 565 ; + +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; + +EndCharMetrics + +EndFontMetrics + diff --git a/Resources/afm/Courier.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier.afm similarity index 97% rename from Resources/afm/Courier.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier.afm index be84b6b9b00..5d5399bcc2f 100644 --- a/Resources/afm/Courier.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Courier.afm @@ -1,342 +1,684 @@ -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 AdobeStandardEncoding -CapHeight 562 -XHeight 426 -Ascender 629 -Descender -157 -StdHW 51 -StdVW 51 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ; -C 165 ; WX 600 ; N yen ; B 26 0 574 562 ; -C 166 ; WX 600 ; N florin ; B 4 -143 539 622 ; -C 167 ; WX 600 ; N section ; B 113 -78 488 580 ; -C 168 ; WX 600 ; N currency ; B 73 58 527 506 ; -C 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ; -C 174 ; WX 600 ; N fi ; B 3 0 597 629 ; -C 175 ; WX 600 ; N fl ; B 3 0 597 629 ; -C 177 ; WX 600 ; N endash ; B 75 231 525 285 ; -C 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ; -C 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ; -C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ; -C 183 ; WX 600 ; N bullet ; B 172 130 428 383 ; -C 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ; -C 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ; -C 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ; -C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ; -C 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ; -C 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ; -C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ; -C 193 ; WX 600 ; N grave ; B 151 497 378 672 ; -C 194 ; WX 600 ; N acute ; B 242 497 469 672 ; -C 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ; -C 196 ; WX 600 ; N tilde ; B 105 489 503 606 ; -C 197 ; WX 600 ; N macron ; B 120 525 480 565 ; -C 198 ; WX 600 ; N breve ; B 153 501 447 609 ; -C 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ; -C 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ; -C 202 ; WX 600 ; N ring ; B 218 463 382 627 ; -C 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ; -C 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ; -C 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ; -C 207 ; WX 600 ; N caron ; B 124 492 476 669 ; -C 208 ; WX 600 ; N emdash ; B 0 231 600 285 ; -C 225 ; WX 600 ; N AE ; B 3 0 550 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ; -C 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ; -C 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ; -C 234 ; WX 600 ; N OE ; B 7 0 567 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ; -C 241 ; WX 600 ; N ae ; B 19 -15 570 441 ; -C 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ; -C 248 ; WX 600 ; N lslash ; B 95 0 505 629 ; -C 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ; -C 250 ; WX 600 ; N oe ; B 19 -15 559 441 ; -C 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ; -C -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ; -C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ; -C -1 ; WX 600 ; N divide ; B 87 48 513 467 ; -C -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ; -C -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ; -C -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ; -C -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ; -C -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ; -C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ; -C -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ; -C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ; -C -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ; -C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ; -C -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ; -C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ; -C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ; -C -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ; -C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ; -C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ; -C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ; -C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ; -C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ; -C -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ; -C -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ; -C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ; -C -1 ; WX 600 ; N multiply ; B 87 43 515 470 ; -C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ; -C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ; -C -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ; -C -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ; -C -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ; -C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ; -C -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ; -C -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ; -C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ; -C -1 ; WX 600 ; N Eth ; B 30 0 574 562 ; -C -1 ; 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 -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ; -C -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ; -C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ; -C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ; -C -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ; -C -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ; -C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; -C -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ; -C -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ; -C -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ; -C -1 ; WX 600 ; N mu ; B 21 -157 562 426 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B -23 263 623 562 ; -C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ; -C -1 ; 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 -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ; -C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ; -C -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ; -C -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ; -C -1 ; 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 -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ; -C -1 ; 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 -1 ; WX 600 ; N degree ; B 123 269 477 622 ; -C -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ; -C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ; -C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ; -C -1 ; 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 -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ; -C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ; -C -1 ; WX 600 ; N Aring ; B 3 0 597 750 ; -C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ; -C -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ; -C -1 ; 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 -1 ; WX 600 ; N eth ; B 62 -15 538 629 ; -C -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ; -C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ; -C -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ; -C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ; -C -1 ; 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 AdobeStandardEncoding + +CapHeight 562 + +XHeight 426 + +Ascender 629 + +Descender -157 + +StdHW 51 + +StdVW 51 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ; + +C 165 ; WX 600 ; N yen ; B 26 0 574 562 ; + +C 166 ; WX 600 ; N florin ; B 4 -143 539 622 ; + +C 167 ; WX 600 ; N section ; B 113 -78 488 580 ; + +C 168 ; WX 600 ; N currency ; B 73 58 527 506 ; + +C 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ; + +C 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ; + +C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ; + +C 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ; + +C 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ; + +C 174 ; WX 600 ; N fi ; B 3 0 597 629 ; + +C 175 ; WX 600 ; N fl ; B 3 0 597 629 ; + +C 177 ; WX 600 ; N endash ; B 75 231 525 285 ; + +C 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ; + +C 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ; + +C 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ; + +C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ; + +C 183 ; WX 600 ; N bullet ; B 172 130 428 383 ; + +C 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ; + +C 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ; + +C 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ; + +C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ; + +C 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ; + +C 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ; + +C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ; + +C 193 ; WX 600 ; N grave ; B 151 497 378 672 ; + +C 194 ; WX 600 ; N acute ; B 242 497 469 672 ; + +C 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ; + +C 196 ; WX 600 ; N tilde ; B 105 489 503 606 ; + +C 197 ; WX 600 ; N macron ; B 120 525 480 565 ; + +C 198 ; WX 600 ; N breve ; B 153 501 447 609 ; + +C 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ; + +C 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ; + +C 202 ; WX 600 ; N ring ; B 218 463 382 627 ; + +C 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ; + +C 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ; + +C 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ; + +C 207 ; WX 600 ; N caron ; B 124 492 476 669 ; + +C 208 ; WX 600 ; N emdash ; B 0 231 600 285 ; + +C 225 ; WX 600 ; N AE ; B 3 0 550 562 ; + +C 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ; + +C 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ; + +C 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ; + +C 234 ; WX 600 ; N OE ; B 7 0 567 562 ; + +C 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ; + +C 241 ; WX 600 ; N ae ; B 19 -15 570 441 ; + +C 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ; + +C 248 ; WX 600 ; N lslash ; B 95 0 505 629 ; + +C 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ; + +C 250 ; WX 600 ; N oe ; B 19 -15 559 441 ; + +C 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ; + +C -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ; + +C -1 ; 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 -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ; + +C -1 ; WX 600 ; N divide ; B 87 48 513 467 ; + +C -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ; + +C -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ; + +C -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ; + +C -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ; + +C -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ; + +C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ; + +C -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ; + +C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ; + +C -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ; + +C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ; + +C -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ; + +C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ; + +C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ; + +C -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ; + +C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ; + +C -1 ; 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 -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ; + +C -1 ; 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 -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ; + +C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ; + +C -1 ; 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 -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ; + +C -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ; + +C -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ; + +C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ; + +C -1 ; WX 600 ; N multiply ; B 87 43 515 470 ; + +C -1 ; 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 -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ; + +C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ; + +C -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ; + +C -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ; + +C -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ; + +C -1 ; 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 -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ; + +C -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ; + +C -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ; + +C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ; + +C -1 ; WX 600 ; N Eth ; B 30 0 574 562 ; + +C -1 ; 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 -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ; + +C -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ; + +C -1 ; 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 -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ; + +C -1 ; 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 -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ; + +C -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ; + +C -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ; + +C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; + +C -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ; + +C -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ; + +C -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ; + +C -1 ; WX 600 ; N mu ; B 21 -157 562 426 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N trademark ; B -23 263 623 562 ; + +C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ; + +C -1 ; 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 -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ; + +C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ; + +C -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ; + +C -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ; + +C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ; + +C -1 ; 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 -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ; + +C -1 ; 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 -1 ; WX 600 ; N degree ; B 123 269 477 622 ; + +C -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ; + +C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ; + +C -1 ; 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 -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ; + +C -1 ; 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 -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ; + +C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ; + +C -1 ; WX 600 ; N Aring ; B 3 0 597 750 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ; + +C -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ; + +C -1 ; 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 -1 ; WX 600 ; N eth ; B 62 -15 538 629 ; + +C -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ; + +C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ; + +C -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ; + +C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ; + +C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; + +EndCharMetrics + +EndFontMetrics + diff --git a/Resources/afm/Helvetica-Bold.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-Bold.afm similarity index 96% rename from Resources/afm/Helvetica-Bold.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-Bold.afm index 0d410494a54..150c198b6b3 100644 --- a/Resources/afm/Helvetica-Bold.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-Bold.afm @@ -1,2827 +1,5654 @@ -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 AdobeStandardEncoding -CapHeight 718 -XHeight 532 -Ascender 718 -Descender -207 -StdHW 118 -StdVW 140 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ; -C 165 ; WX 556 ; N yen ; B -9 0 565 698 ; -C 166 ; WX 556 ; N florin ; B -10 -210 516 737 ; -C 167 ; WX 556 ; N section ; B 34 -184 522 727 ; -C 168 ; WX 556 ; N currency ; B -3 76 559 636 ; -C 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ; -C 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ; -C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ; -C 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ; -C 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ; -C 174 ; WX 611 ; N fi ; B 10 0 542 727 ; -C 175 ; WX 611 ; N fl ; B 10 0 542 727 ; -C 177 ; WX 556 ; N endash ; B 0 227 556 333 ; -C 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ; -C 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ; -C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ; -C 183 ; WX 350 ; N bullet ; B 10 194 340 524 ; -C 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ; -C 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ; -C 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ; -C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ; -C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ; -C 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ; -C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ; -C 193 ; WX 333 ; N grave ; B -23 604 225 750 ; -C 194 ; WX 333 ; N acute ; B 108 604 356 750 ; -C 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ; -C 196 ; WX 333 ; N tilde ; B -17 610 350 737 ; -C 197 ; WX 333 ; N macron ; B -6 604 339 678 ; -C 198 ; WX 333 ; N breve ; B -2 604 335 750 ; -C 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ; -C 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ; -C 202 ; WX 333 ; N ring ; B 59 568 275 776 ; -C 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ; -C 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ; -C 207 ; WX 333 ; N caron ; B -10 604 343 750 ; -C 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ; -C 225 ; WX 1000 ; N AE ; B 5 0 954 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ; -C 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ; -C 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ; -C 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ; -C 241 ; WX 889 ; N ae ; B 29 -14 858 546 ; -C 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ; -C 248 ; WX 278 ; N lslash ; B -18 0 296 718 ; -C 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ; -C 250 ; WX 944 ; N oe ; B 34 -14 912 546 ; -C 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ; -C -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ; -C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ; -C -1 ; WX 584 ; N divide ; B 40 -42 544 548 ; -C -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ; -C -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ; -C -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ; -C -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ; -C -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ; -C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ; -C -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ; -C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ; -C -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ; -C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ; -C -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ; -C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ; -C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ; -C -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ; -C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ; -C -1 ; 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 -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ; -C -1 ; 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 -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ; -C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ; -C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ; -C -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ; -C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; -C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ; -C -1 ; WX 584 ; N multiply ; B 40 1 545 505 ; -C -1 ; 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 -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ; -C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ; -C -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ; -C -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ; -C -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ; -C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ; -C -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ; -C -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ; -C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; -C -1 ; WX 722 ; N Eth ; B -5 0 685 718 ; -C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ; -C -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ; -C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ; -C -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ; -C -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ; -C -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ; -C -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ; -C -1 ; WX 611 ; N mu ; B 66 -207 545 532 ; -C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ; -C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ; -C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; -C -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ; -C -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ; -C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 57 426 343 712 ; -C -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ; -C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ; -C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ; -C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ; -C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; -C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ; -C -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ; -C -1 ; 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 -1 ; WX 611 ; N eth ; B 34 -14 578 737 ; -C -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ; -C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ; -C -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ; -C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ; -C -1 ; 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: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 AdobeStandardEncoding + +CapHeight 718 + +XHeight 532 + +Ascender 718 + +Descender -207 + +StdHW 118 + +StdVW 140 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ; + +C 165 ; WX 556 ; N yen ; B -9 0 565 698 ; + +C 166 ; WX 556 ; N florin ; B -10 -210 516 737 ; + +C 167 ; WX 556 ; N section ; B 34 -184 522 727 ; + +C 168 ; WX 556 ; N currency ; B -3 76 559 636 ; + +C 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ; + +C 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ; + +C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ; + +C 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ; + +C 174 ; WX 611 ; N fi ; B 10 0 542 727 ; + +C 175 ; WX 611 ; N fl ; B 10 0 542 727 ; + +C 177 ; WX 556 ; N endash ; B 0 227 556 333 ; + +C 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ; + +C 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ; + +C 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ; + +C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ; + +C 183 ; WX 350 ; N bullet ; B 10 194 340 524 ; + +C 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ; + +C 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ; + +C 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ; + +C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ; + +C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ; + +C 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ; + +C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ; + +C 193 ; WX 333 ; N grave ; B -23 604 225 750 ; + +C 194 ; WX 333 ; N acute ; B 108 604 356 750 ; + +C 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ; + +C 196 ; WX 333 ; N tilde ; B -17 610 350 737 ; + +C 197 ; WX 333 ; N macron ; B -6 604 339 678 ; + +C 198 ; WX 333 ; N breve ; B -2 604 335 750 ; + +C 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ; + +C 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ; + +C 202 ; WX 333 ; N ring ; B 59 568 275 776 ; + +C 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ; + +C 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ; + +C 207 ; WX 333 ; N caron ; B -10 604 343 750 ; + +C 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ; + +C 225 ; WX 1000 ; N AE ; B 5 0 954 718 ; + +C 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ; + +C 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ; + +C 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ; + +C 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ; + +C 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ; + +C 241 ; WX 889 ; N ae ; B 29 -14 858 546 ; + +C 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ; + +C 248 ; WX 278 ; N lslash ; B -18 0 296 718 ; + +C 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ; + +C 250 ; WX 944 ; N oe ; B 34 -14 912 546 ; + +C 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ; + +C -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ; + +C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ; + +C -1 ; WX 584 ; N divide ; B 40 -42 544 548 ; + +C -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ; + +C -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ; + +C -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ; + +C -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ; + +C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ; + +C -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ; + +C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ; + +C -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ; + +C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ; + +C -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ; + +C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ; + +C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ; + +C -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ; + +C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ; + +C -1 ; 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 -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ; + +C -1 ; 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 -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ; + +C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ; + +C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ; + +C -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ; + +C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; + +C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ; + +C -1 ; WX 584 ; N multiply ; B 40 1 545 505 ; + +C -1 ; 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 -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ; + +C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ; + +C -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ; + +C -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ; + +C -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ; + +C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ; + +C -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ; + +C -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; + +C -1 ; WX 722 ; N Eth ; B -5 0 685 718 ; + +C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ; + +C -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ; + +C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ; + +C -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ; + +C -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ; + +C -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ; + +C -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ; + +C -1 ; WX 611 ; N mu ; B 66 -207 545 532 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ; + +C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ; + +C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ; + +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; + +C -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ; + +C -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ; + +C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 57 426 343 712 ; + +C -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ; + +C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ; + +C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ; + +C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ; + +C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ; + +C -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ; + +C -1 ; 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 -1 ; WX 611 ; N eth ; B 34 -14 578 737 ; + +C -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ; + +C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ; + +C -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ; + +C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ; + +C -1 ; 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 + diff --git a/Resources/afm/Helvetica-BoldOblique.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-BoldOblique.afm similarity index 96% rename from Resources/afm/Helvetica-BoldOblique.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-BoldOblique.afm index 16845aecaef..ff021a540c9 100644 --- a/Resources/afm/Helvetica-BoldOblique.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-BoldOblique.afm @@ -1,2827 +1,5654 @@ -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 AdobeStandardEncoding -CapHeight 718 -XHeight 532 -Ascender 718 -Descender -207 -StdHW 118 -StdVW 140 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ; -C 165 ; WX 556 ; N yen ; B 60 0 713 698 ; -C 166 ; WX 556 ; N florin ; B -50 -210 669 737 ; -C 167 ; WX 556 ; N section ; B 61 -184 598 727 ; -C 168 ; WX 556 ; N currency ; B 27 76 680 636 ; -C 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ; -C 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ; -C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ; -C 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ; -C 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ; -C 174 ; WX 611 ; N fi ; B 87 0 696 727 ; -C 175 ; WX 611 ; N fl ; B 87 0 695 727 ; -C 177 ; WX 556 ; N endash ; B 48 227 627 333 ; -C 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ; -C 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ; -C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ; -C 183 ; WX 350 ; N bullet ; B 83 194 420 524 ; -C 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ; -C 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ; -C 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ; -C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ; -C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ; -C 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ; -C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ; -C 193 ; WX 333 ; N grave ; B 136 604 353 750 ; -C 194 ; WX 333 ; N acute ; B 236 604 515 750 ; -C 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ; -C 196 ; WX 333 ; N tilde ; B 113 610 507 737 ; -C 197 ; WX 333 ; N macron ; B 122 604 483 678 ; -C 198 ; WX 333 ; N breve ; B 156 604 494 750 ; -C 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ; -C 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ; -C 202 ; WX 333 ; N ring ; B 200 568 420 776 ; -C 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ; -C 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ; -C 207 ; WX 333 ; N caron ; B 149 604 502 750 ; -C 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ; -C 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ; -C 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ; -C 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ; -C 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ; -C 241 ; WX 889 ; N ae ; B 56 -14 923 546 ; -C 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ; -C 248 ; WX 278 ; N lslash ; B 40 0 407 718 ; -C 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ; -C 250 ; WX 944 ; N oe ; B 82 -14 977 546 ; -C 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ; -C -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ; -C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ; -C -1 ; WX 584 ; N divide ; B 82 -42 610 548 ; -C -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ; -C -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ; -C -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ; -C -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ; -C -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ; -C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ; -C -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ; -C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ; -C -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ; -C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ; -C -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ; -C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ; -C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ; -C -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ; -C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ; -C -1 ; 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 -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ; -C -1 ; 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 -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ; -C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ; -C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ; -C -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ; -C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; -C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ; -C -1 ; WX 584 ; N multiply ; B 57 1 635 505 ; -C -1 ; 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 -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ; -C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ; -C -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ; -C -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ; -C -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ; -C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ; -C -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ; -C -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ; -C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ; -C -1 ; WX 722 ; N Eth ; B 62 0 777 718 ; -C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ; -C -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ; -C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ; -C -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ; -C -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ; -C -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ; -C -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ; -C -1 ; WX 611 ; N mu ; B 22 -207 658 532 ; -C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ; -C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ; -C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ; -C -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ; -C -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ; -C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 175 426 467 712 ; -C -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ; -C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ; -C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ; -C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ; -C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; -C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ; -C -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ; -C -1 ; 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 -1 ; WX 611 ; N eth ; B 82 -14 670 737 ; -C -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ; -C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ; -C -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ; -C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ; -C -1 ; 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 AdobeStandardEncoding + +CapHeight 718 + +XHeight 532 + +Ascender 718 + +Descender -207 + +StdHW 118 + +StdVW 140 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ; + +C 165 ; WX 556 ; N yen ; B 60 0 713 698 ; + +C 166 ; WX 556 ; N florin ; B -50 -210 669 737 ; + +C 167 ; WX 556 ; N section ; B 61 -184 598 727 ; + +C 168 ; WX 556 ; N currency ; B 27 76 680 636 ; + +C 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ; + +C 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ; + +C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ; + +C 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ; + +C 174 ; WX 611 ; N fi ; B 87 0 696 727 ; + +C 175 ; WX 611 ; N fl ; B 87 0 695 727 ; + +C 177 ; WX 556 ; N endash ; B 48 227 627 333 ; + +C 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ; + +C 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ; + +C 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ; + +C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ; + +C 183 ; WX 350 ; N bullet ; B 83 194 420 524 ; + +C 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ; + +C 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ; + +C 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ; + +C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ; + +C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ; + +C 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ; + +C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ; + +C 193 ; WX 333 ; N grave ; B 136 604 353 750 ; + +C 194 ; WX 333 ; N acute ; B 236 604 515 750 ; + +C 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ; + +C 196 ; WX 333 ; N tilde ; B 113 610 507 737 ; + +C 197 ; WX 333 ; N macron ; B 122 604 483 678 ; + +C 198 ; WX 333 ; N breve ; B 156 604 494 750 ; + +C 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ; + +C 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ; + +C 202 ; WX 333 ; N ring ; B 200 568 420 776 ; + +C 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ; + +C 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ; + +C 207 ; WX 333 ; N caron ; B 149 604 502 750 ; + +C 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ; + +C 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ; + +C 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ; + +C 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ; + +C 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ; + +C 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ; + +C 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ; + +C 241 ; WX 889 ; N ae ; B 56 -14 923 546 ; + +C 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ; + +C 248 ; WX 278 ; N lslash ; B 40 0 407 718 ; + +C 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ; + +C 250 ; WX 944 ; N oe ; B 82 -14 977 546 ; + +C 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ; + +C -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ; + +C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ; + +C -1 ; WX 584 ; N divide ; B 82 -42 610 548 ; + +C -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ; + +C -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ; + +C -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ; + +C -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ; + +C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ; + +C -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ; + +C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ; + +C -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ; + +C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ; + +C -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ; + +C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ; + +C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ; + +C -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ; + +C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ; + +C -1 ; 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 -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ; + +C -1 ; 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 -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ; + +C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ; + +C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ; + +C -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ; + +C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; + +C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ; + +C -1 ; WX 584 ; N multiply ; B 57 1 635 505 ; + +C -1 ; 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 -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ; + +C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ; + +C -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ; + +C -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ; + +C -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ; + +C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ; + +C -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ; + +C -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ; + +C -1 ; WX 722 ; N Eth ; B 62 0 777 718 ; + +C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ; + +C -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ; + +C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ; + +C -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ; + +C -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ; + +C -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ; + +C -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ; + +C -1 ; WX 611 ; N mu ; B 22 -207 658 532 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ; + +C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ; + +C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ; + +C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ; + +C -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ; + +C -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ; + +C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 175 426 467 712 ; + +C -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ; + +C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ; + +C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ; + +C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ; + +C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ; + +C -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ; + +C -1 ; 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 -1 ; WX 611 ; N eth ; B 82 -14 670 737 ; + +C -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ; + +C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ; + +C -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ; + +C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ; + +C -1 ; 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 + diff --git a/Resources/afm/Helvetica-Oblique.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-Oblique.afm similarity index 96% rename from Resources/afm/Helvetica-Oblique.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-Oblique.afm index 57bf4721dc7..170da91e619 100644 --- a/Resources/afm/Helvetica-Oblique.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica-Oblique.afm @@ -1,3051 +1,6102 @@ -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 AdobeStandardEncoding -CapHeight 718 -XHeight 523 -Ascender 718 -Descender -207 -StdHW 76 -StdVW 88 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ; -C 165 ; WX 556 ; N yen ; B 81 0 699 688 ; -C 166 ; WX 556 ; N florin ; B -52 -207 654 737 ; -C 167 ; WX 556 ; N section ; B 76 -191 584 737 ; -C 168 ; WX 556 ; N currency ; B 60 99 646 603 ; -C 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ; -C 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ; -C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ; -C 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ; -C 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ; -C 174 ; WX 500 ; N fi ; B 86 0 587 728 ; -C 175 ; WX 500 ; N fl ; B 86 0 585 728 ; -C 177 ; WX 556 ; N endash ; B 51 240 623 313 ; -C 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ; -C 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ; -C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ; -C 183 ; WX 350 ; N bullet ; B 91 202 413 517 ; -C 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ; -C 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ; -C 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ; -C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ; -C 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ; -C 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ; -C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ; -C 193 ; WX 333 ; N grave ; B 170 593 337 734 ; -C 194 ; WX 333 ; N acute ; B 248 593 475 734 ; -C 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ; -C 196 ; WX 333 ; N tilde ; B 125 606 490 722 ; -C 197 ; WX 333 ; N macron ; B 143 627 468 684 ; -C 198 ; WX 333 ; N breve ; B 167 595 476 731 ; -C 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ; -C 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ; -C 202 ; WX 333 ; N ring ; B 214 572 402 756 ; -C 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ; -C 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ; -C 207 ; WX 333 ; N caron ; B 177 593 468 734 ; -C 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ; -C 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ; -C 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ; -C 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ; -C 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ; -C 241 ; WX 889 ; N ae ; B 61 -15 909 538 ; -C 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ; -C 248 ; WX 222 ; N lslash ; B 41 0 347 718 ; -C 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ; -C 250 ; WX 944 ; N oe ; B 83 -15 964 538 ; -C 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ; -C -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ; -C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ; -C -1 ; WX 584 ; N divide ; B 85 -19 606 524 ; -C -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ; -C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; -C -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ; -C -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ; -C -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ; -C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ; -C -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ; -C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ; -C -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ; -C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ; -C -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ; -C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ; -C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ; -C -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ; -C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ; -C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ; -C -1 ; 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 -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ; -C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ; -C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ; -C -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ; -C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; -C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ; -C -1 ; WX 584 ; N multiply ; B 50 0 642 506 ; -C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ; -C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ; -C -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ; -C -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ; -C -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ; -C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ; -C -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ; -C -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ; -C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ; -C -1 ; WX 722 ; N Eth ; B 69 0 764 718 ; -C -1 ; 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 -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ; -C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; -C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ; -C -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ; -C -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ; -C -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ; -C -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ; -C -1 ; WX 556 ; N mu ; B 24 -207 600 523 ; -C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ; -C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ; -C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ; -C -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ; -C -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ; -C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 169 411 468 703 ; -C -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ; -C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ; -C -1 ; 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 -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ; -C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; -C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; -C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ; -C -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ; -C -1 ; 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 -1 ; WX 556 ; N eth ; B 81 -15 617 737 ; -C -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ; -C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ; -C -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ; -C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ; -C -1 ; 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: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 AdobeStandardEncoding + +CapHeight 718 + +XHeight 523 + +Ascender 718 + +Descender -207 + +StdHW 76 + +StdVW 88 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ; + +C 165 ; WX 556 ; N yen ; B 81 0 699 688 ; + +C 166 ; WX 556 ; N florin ; B -52 -207 654 737 ; + +C 167 ; WX 556 ; N section ; B 76 -191 584 737 ; + +C 168 ; WX 556 ; N currency ; B 60 99 646 603 ; + +C 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ; + +C 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ; + +C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ; + +C 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ; + +C 174 ; WX 500 ; N fi ; B 86 0 587 728 ; + +C 175 ; WX 500 ; N fl ; B 86 0 585 728 ; + +C 177 ; WX 556 ; N endash ; B 51 240 623 313 ; + +C 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ; + +C 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ; + +C 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ; + +C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ; + +C 183 ; WX 350 ; N bullet ; B 91 202 413 517 ; + +C 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ; + +C 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ; + +C 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ; + +C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ; + +C 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ; + +C 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ; + +C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ; + +C 193 ; WX 333 ; N grave ; B 170 593 337 734 ; + +C 194 ; WX 333 ; N acute ; B 248 593 475 734 ; + +C 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ; + +C 196 ; WX 333 ; N tilde ; B 125 606 490 722 ; + +C 197 ; WX 333 ; N macron ; B 143 627 468 684 ; + +C 198 ; WX 333 ; N breve ; B 167 595 476 731 ; + +C 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ; + +C 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ; + +C 202 ; WX 333 ; N ring ; B 214 572 402 756 ; + +C 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ; + +C 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ; + +C 207 ; WX 333 ; N caron ; B 177 593 468 734 ; + +C 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ; + +C 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ; + +C 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ; + +C 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ; + +C 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ; + +C 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ; + +C 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ; + +C 241 ; WX 889 ; N ae ; B 61 -15 909 538 ; + +C 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ; + +C 248 ; WX 222 ; N lslash ; B 41 0 347 718 ; + +C 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ; + +C 250 ; WX 944 ; N oe ; B 83 -15 964 538 ; + +C 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ; + +C -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ; + +C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ; + +C -1 ; WX 584 ; N divide ; B 85 -19 606 524 ; + +C -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ; + +C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; + +C -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ; + +C -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ; + +C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ; + +C -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ; + +C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ; + +C -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ; + +C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ; + +C -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ; + +C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ; + +C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ; + +C -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ; + +C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ; + +C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ; + +C -1 ; 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 -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ; + +C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ; + +C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ; + +C -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ; + +C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; + +C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ; + +C -1 ; WX 584 ; N multiply ; B 50 0 642 506 ; + +C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ; + +C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ; + +C -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ; + +C -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ; + +C -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ; + +C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ; + +C -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ; + +C -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ; + +C -1 ; WX 722 ; N Eth ; B 69 0 764 718 ; + +C -1 ; 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 -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ; + +C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; + +C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ; + +C -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ; + +C -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ; + +C -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ; + +C -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ; + +C -1 ; WX 556 ; N mu ; B 24 -207 600 523 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ; + +C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ; + +C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ; + +C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ; + +C -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ; + +C -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ; + +C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 169 411 468 703 ; + +C -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ; + +C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ; + +C -1 ; 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 -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ; + +C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; + +C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ; + +C -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ; + +C -1 ; 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 -1 ; WX 556 ; N eth ; B 81 -15 617 737 ; + +C -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ; + +C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ; + +C -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ; + +C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ; + +C -1 ; 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 + diff --git a/Resources/afm/Helvetica.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica.afm similarity index 96% rename from Resources/afm/Helvetica.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica.afm index 9492d8fc418..e695b91ebdb 100644 --- a/Resources/afm/Helvetica.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Helvetica.afm @@ -1,3051 +1,6102 @@ -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 AdobeStandardEncoding -CapHeight 718 -XHeight 523 -Ascender 718 -Descender -207 -StdHW 76 -StdVW 88 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ; -C 165 ; WX 556 ; N yen ; B 3 0 553 688 ; -C 166 ; WX 556 ; N florin ; B -11 -207 501 737 ; -C 167 ; WX 556 ; N section ; B 43 -191 512 737 ; -C 168 ; WX 556 ; N currency ; B 28 99 528 603 ; -C 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ; -C 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ; -C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ; -C 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ; -C 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ; -C 174 ; WX 500 ; N fi ; B 14 0 434 728 ; -C 175 ; WX 500 ; N fl ; B 14 0 432 728 ; -C 177 ; WX 556 ; N endash ; B 0 240 556 313 ; -C 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ; -C 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ; -C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ; -C 183 ; WX 350 ; N bullet ; B 18 202 333 517 ; -C 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ; -C 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ; -C 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ; -C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ; -C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ; -C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ; -C 193 ; WX 333 ; N grave ; B 14 593 211 734 ; -C 194 ; WX 333 ; N acute ; B 122 593 319 734 ; -C 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ; -C 196 ; WX 333 ; N tilde ; B -4 606 337 722 ; -C 197 ; WX 333 ; N macron ; B 10 627 323 684 ; -C 198 ; WX 333 ; N breve ; B 13 595 321 731 ; -C 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ; -C 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ; -C 202 ; WX 333 ; N ring ; B 75 572 259 756 ; -C 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ; -C 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ; -C 207 ; WX 333 ; N caron ; B 21 593 312 734 ; -C 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ; -C 225 ; WX 1000 ; N AE ; B 8 0 951 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ; -C 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ; -C 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ; -C 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ; -C 241 ; WX 889 ; N ae ; B 36 -15 847 538 ; -C 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ; -C 248 ; WX 222 ; N lslash ; B -20 0 242 718 ; -C 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ; -C 250 ; WX 944 ; N oe ; B 35 -15 902 538 ; -C 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ; -C -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ; -C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ; -C -1 ; WX 584 ; N divide ; B 39 -19 545 524 ; -C -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ; -C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; -C -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ; -C -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ; -C -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ; -C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ; -C -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ; -C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ; -C -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ; -C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ; -C -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ; -C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ; -C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ; -C -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ; -C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ; -C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ; -C -1 ; 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 -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ; -C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ; -C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ; -C -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ; -C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; -C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ; -C -1 ; WX 584 ; N multiply ; B 39 0 545 506 ; -C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ; -C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ; -C -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ; -C -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ; -C -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ; -C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ; -C -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ; -C -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ; -C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ; -C -1 ; WX 722 ; N Eth ; B 0 0 674 718 ; -C -1 ; 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 -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ; -C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; -C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ; -C -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ; -C -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ; -C -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ; -C -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ; -C -1 ; WX 556 ; N mu ; B 68 -207 489 523 ; -C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ; -C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ; -C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ; -C -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ; -C -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ; -C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 54 411 346 703 ; -C -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ; -C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ; -C -1 ; 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 -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ; -C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; -C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; -C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ; -C -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ; -C -1 ; 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 -1 ; WX 556 ; N eth ; B 35 -15 522 737 ; -C -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ; -C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ; -C -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ; -C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ; -C -1 ; 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 AdobeStandardEncoding + +CapHeight 718 + +XHeight 523 + +Ascender 718 + +Descender -207 + +StdHW 76 + +StdVW 88 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ; + +C 165 ; WX 556 ; N yen ; B 3 0 553 688 ; + +C 166 ; WX 556 ; N florin ; B -11 -207 501 737 ; + +C 167 ; WX 556 ; N section ; B 43 -191 512 737 ; + +C 168 ; WX 556 ; N currency ; B 28 99 528 603 ; + +C 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ; + +C 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ; + +C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ; + +C 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ; + +C 174 ; WX 500 ; N fi ; B 14 0 434 728 ; + +C 175 ; WX 500 ; N fl ; B 14 0 432 728 ; + +C 177 ; WX 556 ; N endash ; B 0 240 556 313 ; + +C 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ; + +C 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ; + +C 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ; + +C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ; + +C 183 ; WX 350 ; N bullet ; B 18 202 333 517 ; + +C 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ; + +C 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ; + +C 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ; + +C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ; + +C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ; + +C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ; + +C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ; + +C 193 ; WX 333 ; N grave ; B 14 593 211 734 ; + +C 194 ; WX 333 ; N acute ; B 122 593 319 734 ; + +C 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ; + +C 196 ; WX 333 ; N tilde ; B -4 606 337 722 ; + +C 197 ; WX 333 ; N macron ; B 10 627 323 684 ; + +C 198 ; WX 333 ; N breve ; B 13 595 321 731 ; + +C 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ; + +C 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ; + +C 202 ; WX 333 ; N ring ; B 75 572 259 756 ; + +C 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ; + +C 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ; + +C 207 ; WX 333 ; N caron ; B 21 593 312 734 ; + +C 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ; + +C 225 ; WX 1000 ; N AE ; B 8 0 951 718 ; + +C 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ; + +C 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ; + +C 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ; + +C 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ; + +C 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ; + +C 241 ; WX 889 ; N ae ; B 36 -15 847 538 ; + +C 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ; + +C 248 ; WX 222 ; N lslash ; B -20 0 242 718 ; + +C 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ; + +C 250 ; WX 944 ; N oe ; B 35 -15 902 538 ; + +C 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ; + +C -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ; + +C -1 ; 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 -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ; + +C -1 ; WX 584 ; N divide ; B 39 -19 545 524 ; + +C -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ; + +C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; + +C -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ; + +C -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ; + +C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ; + +C -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ; + +C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ; + +C -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ; + +C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ; + +C -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ; + +C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ; + +C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ; + +C -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ; + +C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ; + +C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ; + +C -1 ; 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 -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ; + +C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ; + +C -1 ; 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 -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ; + +C -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ; + +C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; + +C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ; + +C -1 ; WX 584 ; N multiply ; B 39 0 545 506 ; + +C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ; + +C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ; + +C -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ; + +C -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ; + +C -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ; + +C -1 ; 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 -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ; + +C -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ; + +C -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ; + +C -1 ; WX 722 ; N Eth ; B 0 0 674 718 ; + +C -1 ; 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 -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ; + +C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; + +C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ; + +C -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ; + +C -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ; + +C -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ; + +C -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ; + +C -1 ; WX 556 ; N mu ; B 68 -207 489 523 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ; + +C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ; + +C -1 ; 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 -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ; + +C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ; + +C -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ; + +C -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ; + +C -1 ; 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 -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 54 411 346 703 ; + +C -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ; + +C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ; + +C -1 ; 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 -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ; + +C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; + +C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ; + +C -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ; + +C -1 ; 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 -1 ; WX 556 ; N eth ; B 35 -15 522 737 ; + +C -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ; + +C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ; + +C -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ; + +C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ; + +C -1 ; 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 + diff --git a/licenses/adobe/AFM_License.html b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/MustRead.html similarity index 100% rename from licenses/adobe/AFM_License.html rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/MustRead.html diff --git a/Resources/afm/Symbol.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Symbol.afm similarity index 97% rename from Resources/afm/Symbol.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Symbol.afm index 524cfb6f9fe..dd8bf918cf2 100644 --- a/Resources/afm/Symbol.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Symbol.afm @@ -1,213 +1,426 @@ -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, 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 + diff --git a/Resources/afm/Times-Bold.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Bold.afm similarity index 96% rename from Resources/afm/Times-Bold.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Bold.afm index ee718a224f7..eb1919b3cf7 100644 --- a/Resources/afm/Times-Bold.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Bold.afm @@ -1,2588 +1,5176 @@ -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 AdobeStandardEncoding -CapHeight 676 -XHeight 461 -Ascender 683 -Descender -217 -StdHW 44 -StdVW 139 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ; -C 165 ; WX 500 ; N yen ; B -64 0 547 676 ; -C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ; -C 167 ; WX 500 ; N section ; B 57 -132 443 691 ; -C 168 ; WX 500 ; N currency ; B -26 61 526 613 ; -C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ; -C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ; -C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ; -C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ; -C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ; -C 174 ; WX 556 ; N fi ; B 14 0 536 691 ; -C 175 ; WX 556 ; N fl ; B 14 0 536 691 ; -C 177 ; WX 500 ; N endash ; B 0 181 500 271 ; -C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ; -C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ; -C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ; -C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ; -C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ; -C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ; -C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ; -C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ; -C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ; -C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ; -C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ; -C 193 ; WX 333 ; N grave ; B 8 528 246 713 ; -C 194 ; WX 333 ; N acute ; B 86 528 324 713 ; -C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ; -C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ; -C 197 ; WX 333 ; N macron ; B 1 565 331 637 ; -C 198 ; WX 333 ; N breve ; B 15 528 318 691 ; -C 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ; -C 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ; -C 202 ; WX 333 ; N ring ; B 60 527 273 740 ; -C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ; -C 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ; -C 207 ; WX 333 ; N caron ; B -2 528 335 704 ; -C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ; -C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ; -C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ; -C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ; -C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ; -C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ; -C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ; -C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ; -C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ; -C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ; -C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ; -C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ; -C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ; -C -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ; -C -1 ; 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 -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ; -C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ; -C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ; -C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ; -C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ; -C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ; -C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ; -C -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ; -C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ; -C -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ; -C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ; -C -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ; -C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ; -C -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ; -C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ; -C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ; -C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ; -C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ; -C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ; -C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ; -C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ; -C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ; -C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ; -C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ; -C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; -C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ; -C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ; -C -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ; -C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ; -C -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ; -C -1 ; 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 -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ; -C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; -C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; -C -1 ; 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 -1 ; 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 -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; -C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ; -C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ; -C -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ; -C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ; -C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ; -C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ; -C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ; -C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ; -C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ; -C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ; -C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ; -C -1 ; 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 -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; -C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ; -C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ; -C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 57 402 343 688 ; -C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ; -C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ; -C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ; -C -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ; -C -1 ; WX 722 ; N Aring ; B 9 0 689 935 ; -C -1 ; 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 -1 ; 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 -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ; -C -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ; -C -1 ; 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 -1 ; WX 500 ; N eth ; B 25 -14 476 691 ; -C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ; -C -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ; -C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ; -C -1 ; WX 278 ; N imacron ; B -8 0 272 637 ; -C -1 ; 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 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 AdobeStandardEncoding + +CapHeight 676 + +XHeight 461 + +Ascender 683 + +Descender -217 + +StdHW 44 + +StdVW 139 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ; + +C 165 ; WX 500 ; N yen ; B -64 0 547 676 ; + +C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ; + +C 167 ; WX 500 ; N section ; B 57 -132 443 691 ; + +C 168 ; WX 500 ; N currency ; B -26 61 526 613 ; + +C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ; + +C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ; + +C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ; + +C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ; + +C 174 ; WX 556 ; N fi ; B 14 0 536 691 ; + +C 175 ; WX 556 ; N fl ; B 14 0 536 691 ; + +C 177 ; WX 500 ; N endash ; B 0 181 500 271 ; + +C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ; + +C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ; + +C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ; + +C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ; + +C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ; + +C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ; + +C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ; + +C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ; + +C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ; + +C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ; + +C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ; + +C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ; + +C 193 ; WX 333 ; N grave ; B 8 528 246 713 ; + +C 194 ; WX 333 ; N acute ; B 86 528 324 713 ; + +C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ; + +C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ; + +C 197 ; WX 333 ; N macron ; B 1 565 331 637 ; + +C 198 ; WX 333 ; N breve ; B 15 528 318 691 ; + +C 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ; + +C 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ; + +C 202 ; WX 333 ; N ring ; B 60 527 273 740 ; + +C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ; + +C 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ; + +C 207 ; WX 333 ; N caron ; B -2 528 335 704 ; + +C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ; + +C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ; + +C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ; + +C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ; + +C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ; + +C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ; + +C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ; + +C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ; + +C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ; + +C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ; + +C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ; + +C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ; + +C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ; + +C -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ; + +C -1 ; 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 -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ; + +C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ; + +C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ; + +C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ; + +C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ; + +C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ; + +C -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ; + +C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ; + +C -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ; + +C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ; + +C -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ; + +C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ; + +C -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ; + +C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ; + +C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ; + +C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ; + +C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ; + +C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ; + +C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ; + +C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ; + +C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ; + +C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ; + +C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ; + +C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; + +C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ; + +C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ; + +C -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ; + +C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ; + +C -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ; + +C -1 ; 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 -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ; + +C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; + +C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; + +C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ; + +C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ; + +C -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ; + +C -1 ; 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 -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ; + +C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ; + +C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ; + +C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ; + +C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ; + +C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ; + +C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ; + +C -1 ; 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 -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ; + +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; + +C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ; + +C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ; + +C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 57 402 343 688 ; + +C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ; + +C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ; + +C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ; + +C -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ; + +C -1 ; WX 722 ; N Aring ; B 9 0 689 935 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ; + +C -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ; + +C -1 ; 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 -1 ; WX 500 ; N eth ; B 25 -14 476 691 ; + +C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ; + +C -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ; + +C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ; + +C -1 ; WX 278 ; N imacron ; B -8 0 272 637 ; + +C -1 ; 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 + diff --git a/Resources/afm/Times-BoldItalic.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-BoldItalic.afm similarity index 96% rename from Resources/afm/Times-BoldItalic.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-BoldItalic.afm index 6da5178f904..58830dac856 100644 --- a/Resources/afm/Times-BoldItalic.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-BoldItalic.afm @@ -1,2384 +1,4768 @@ -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 AdobeStandardEncoding -CapHeight 669 -XHeight 462 -Ascender 683 -Descender -217 -StdHW 42 -StdVW 121 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ; -C 165 ; WX 500 ; N yen ; B 33 0 628 669 ; -C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ; -C 167 ; WX 500 ; N section ; B 36 -143 459 685 ; -C 168 ; WX 500 ; N currency ; B -26 34 526 586 ; -C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ; -C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ; -C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ; -C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ; -C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ; -C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ; -C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ; -C 177 ; WX 500 ; N endash ; B -40 178 477 269 ; -C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ; -C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ; -C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ; -C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ; -C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ; -C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ; -C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ; -C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ; -C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ; -C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ; -C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ; -C 193 ; WX 333 ; N grave ; B 85 516 297 697 ; -C 194 ; WX 333 ; N acute ; B 139 516 379 697 ; -C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ; -C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ; -C 197 ; WX 333 ; N macron ; B 51 553 393 623 ; -C 198 ; WX 333 ; N breve ; B 71 516 387 678 ; -C 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ; -C 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ; -C 202 ; WX 333 ; N ring ; B 127 516 340 729 ; -C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ; -C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ; -C 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ; -C 207 ; WX 333 ; N caron ; B 79 516 411 690 ; -C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ; -C 225 ; WX 944 ; N AE ; B -64 0 918 669 ; -C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ; -C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ; -C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ; -C 234 ; WX 944 ; N OE ; B 23 -8 946 677 ; -C 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ; -C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ; -C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ; -C 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ; -C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ; -C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ; -C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ; -C -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ; -C -1 ; 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 -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ; -C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ; -C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ; -C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ; -C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ; -C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ; -C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ; -C -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ; -C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ; -C -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ; -C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ; -C -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ; -C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ; -C -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ; -C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ; -C -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ; -C -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ; -C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ; -C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ; -C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ; -C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ; -C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ; -C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ; -C -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ; -C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; -C -1 ; 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 -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ; -C -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ; -C -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ; -C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ; -C -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ; -C -1 ; 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 -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ; -C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; -C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; -C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; -C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ; -C -1 ; 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 -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ; -C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ; -C -1 ; 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 -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ; -C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ; -C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ; -C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ; -C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ; -C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ; -C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ; -C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ; -C -1 ; 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 -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; -C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ; -C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ; -C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 83 397 369 683 ; -C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ; -C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ; -C -1 ; 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 -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ; -C -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ; -C -1 ; WX 667 ; N Aring ; B -67 0 593 921 ; -C -1 ; 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 -1 ; 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 -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ; -C -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ; -C -1 ; 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 -1 ; WX 500 ; N eth ; B -3 -13 454 699 ; -C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ; -C -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ; -C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ; -C -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ; -C -1 ; 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 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 AdobeStandardEncoding + +CapHeight 669 + +XHeight 462 + +Ascender 683 + +Descender -217 + +StdHW 42 + +StdVW 121 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ; + +C 165 ; WX 500 ; N yen ; B 33 0 628 669 ; + +C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ; + +C 167 ; WX 500 ; N section ; B 36 -143 459 685 ; + +C 168 ; WX 500 ; N currency ; B -26 34 526 586 ; + +C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ; + +C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ; + +C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ; + +C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ; + +C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ; + +C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ; + +C 177 ; WX 500 ; N endash ; B -40 178 477 269 ; + +C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ; + +C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ; + +C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ; + +C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ; + +C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ; + +C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ; + +C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ; + +C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ; + +C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ; + +C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ; + +C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ; + +C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ; + +C 193 ; WX 333 ; N grave ; B 85 516 297 697 ; + +C 194 ; WX 333 ; N acute ; B 139 516 379 697 ; + +C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ; + +C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ; + +C 197 ; WX 333 ; N macron ; B 51 553 393 623 ; + +C 198 ; WX 333 ; N breve ; B 71 516 387 678 ; + +C 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ; + +C 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ; + +C 202 ; WX 333 ; N ring ; B 127 516 340 729 ; + +C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ; + +C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ; + +C 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ; + +C 207 ; WX 333 ; N caron ; B 79 516 411 690 ; + +C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ; + +C 225 ; WX 944 ; N AE ; B -64 0 918 669 ; + +C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ; + +C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ; + +C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ; + +C 234 ; WX 944 ; N OE ; B 23 -8 946 677 ; + +C 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ; + +C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ; + +C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ; + +C 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ; + +C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ; + +C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ; + +C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ; + +C -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ; + +C -1 ; 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 -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ; + +C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ; + +C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ; + +C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ; + +C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ; + +C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ; + +C -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ; + +C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ; + +C -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ; + +C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ; + +C -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ; + +C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ; + +C -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ; + +C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ; + +C -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ; + +C -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ; + +C -1 ; 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 -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ; + +C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ; + +C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ; + +C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ; + +C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ; + +C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ; + +C -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ; + +C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; + +C -1 ; 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 -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ; + +C -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ; + +C -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ; + +C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ; + +C -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ; + +C -1 ; 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 -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ; + +C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; + +C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; + +C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ; + +C -1 ; 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 -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ; + +C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ; + +C -1 ; 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 -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ; + +C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ; + +C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ; + +C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ; + +C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ; + +C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ; + +C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ; + +C -1 ; 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 -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ; + +C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; + +C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ; + +C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ; + +C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 83 397 369 683 ; + +C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ; + +C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ; + +C -1 ; 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 -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ; + +C -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ; + +C -1 ; WX 667 ; N Aring ; B -67 0 593 921 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ; + +C -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ; + +C -1 ; 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 -1 ; WX 500 ; N eth ; B -3 -13 454 699 ; + +C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ; + +C -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ; + +C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ; + +C -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ; + +C -1 ; 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 + diff --git a/Resources/afm/Times-Italic.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Italic.afm similarity index 96% rename from Resources/afm/Times-Italic.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Italic.afm index 8de6e42de19..2b9341f7390 100644 --- a/Resources/afm/Times-Italic.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Italic.afm @@ -1,2667 +1,5334 @@ -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 AdobeStandardEncoding -CapHeight 653 -XHeight 441 -Ascender 683 -Descender -217 -StdHW 32 -StdVW 76 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ; -C 165 ; WX 500 ; N yen ; B 27 0 603 653 ; -C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ; -C 167 ; WX 500 ; N section ; B 53 -162 461 666 ; -C 168 ; WX 500 ; N currency ; B -22 53 522 597 ; -C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ; -C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ; -C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ; -C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ; -C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ; -C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ; -C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ; -C 177 ; WX 500 ; N endash ; B -6 197 505 243 ; -C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ; -C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ; -C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; -C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ; -C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ; -C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ; -C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ; -C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ; -C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ; -C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ; -C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ; -C 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ; -C 193 ; WX 333 ; N grave ; B 121 492 311 664 ; -C 194 ; WX 333 ; N acute ; B 180 494 403 664 ; -C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ; -C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ; -C 197 ; WX 333 ; N macron ; B 99 532 411 583 ; -C 198 ; WX 333 ; N breve ; B 117 492 418 650 ; -C 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ; -C 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ; -C 202 ; WX 333 ; N ring ; B 155 492 355 691 ; -C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ; -C 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ; -C 207 ; WX 333 ; N caron ; B 121 492 426 661 ; -C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ; -C 225 ; WX 889 ; N AE ; B -27 0 911 653 ; -C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ; -C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ; -C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ; -C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ; -C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ; -C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ; -C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ; -C 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ; -C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ; -C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ; -C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ; -C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ; -C -1 ; 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 -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ; -C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ; -C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ; -C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ; -C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ; -C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ; -C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ; -C -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ; -C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ; -C -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ; -C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ; -C -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ; -C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ; -C -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ; -C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ; -C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ; -C -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ; -C -1 ; 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 -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ; -C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ; -C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ; -C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ; -C -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ; -C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ; -C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ; -C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ; -C -1 ; 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 -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ; -C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ; -C -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ; -C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ; -C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ; -C -1 ; 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 -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ; -C -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ; -C -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ; -C -1 ; 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 -1 ; 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 -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ; -C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ; -C -1 ; 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 -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ; -C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ; -C -1 ; 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 -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ; -C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ; -C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ; -C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ; -C -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ; -C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ; -C -1 ; 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 -1 ; 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 -1 ; WX 980 ; N trademark ; B 30 247 957 653 ; -C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ; -C -1 ; 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 -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ; -C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ; -C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ; -C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 101 390 387 676 ; -C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ; -C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ; -C -1 ; 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 -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ; -C -1 ; 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 -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ; -C -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ; -C -1 ; WX 611 ; N Aring ; B -51 0 564 883 ; -C -1 ; 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 -1 ; 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 -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ; -C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ; -C -1 ; 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 -1 ; WX 500 ; N eth ; B 27 -11 482 683 ; -C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ; -C -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ; -C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ; -C -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ; -C -1 ; 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: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 AdobeStandardEncoding + +CapHeight 653 + +XHeight 441 + +Ascender 683 + +Descender -217 + +StdHW 32 + +StdVW 76 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ; + +C 165 ; WX 500 ; N yen ; B 27 0 603 653 ; + +C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ; + +C 167 ; WX 500 ; N section ; B 53 -162 461 666 ; + +C 168 ; WX 500 ; N currency ; B -22 53 522 597 ; + +C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ; + +C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ; + +C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ; + +C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ; + +C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ; + +C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ; + +C 177 ; WX 500 ; N endash ; B -6 197 505 243 ; + +C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ; + +C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ; + +C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; + +C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ; + +C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ; + +C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ; + +C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ; + +C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ; + +C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ; + +C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ; + +C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ; + +C 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ; + +C 193 ; WX 333 ; N grave ; B 121 492 311 664 ; + +C 194 ; WX 333 ; N acute ; B 180 494 403 664 ; + +C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ; + +C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ; + +C 197 ; WX 333 ; N macron ; B 99 532 411 583 ; + +C 198 ; WX 333 ; N breve ; B 117 492 418 650 ; + +C 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ; + +C 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ; + +C 202 ; WX 333 ; N ring ; B 155 492 355 691 ; + +C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ; + +C 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ; + +C 207 ; WX 333 ; N caron ; B 121 492 426 661 ; + +C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ; + +C 225 ; WX 889 ; N AE ; B -27 0 911 653 ; + +C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ; + +C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ; + +C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ; + +C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ; + +C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ; + +C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ; + +C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ; + +C 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ; + +C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ; + +C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ; + +C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ; + +C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ; + +C -1 ; 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 -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ; + +C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ; + +C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ; + +C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ; + +C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ; + +C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ; + +C -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ; + +C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ; + +C -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ; + +C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ; + +C -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ; + +C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ; + +C -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ; + +C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ; + +C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ; + +C -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ; + +C -1 ; 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 -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ; + +C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ; + +C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ; + +C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ; + +C -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ; + +C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ; + +C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ; + +C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ; + +C -1 ; 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 -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ; + +C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ; + +C -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ; + +C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ; + +C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ; + +C -1 ; 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 -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ; + +C -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ; + +C -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ; + +C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ; + +C -1 ; 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 -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ; + +C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ; + +C -1 ; 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 -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ; + +C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ; + +C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ; + +C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ; + +C -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ; + +C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 980 ; N trademark ; B 30 247 957 653 ; + +C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ; + +C -1 ; 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 -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ; + +C -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ; + +C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ; + +C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ; + +C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 101 390 387 676 ; + +C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ; + +C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ; + +C -1 ; 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 -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ; + +C -1 ; 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 -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ; + +C -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ; + +C -1 ; WX 611 ; N Aring ; B -51 0 564 883 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ; + +C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ; + +C -1 ; 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 -1 ; WX 500 ; N eth ; B 27 -11 482 683 ; + +C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ; + +C -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ; + +C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ; + +C -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ; + +C -1 ; 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 + diff --git a/Resources/afm/Times-Roman.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Roman.afm similarity index 96% rename from Resources/afm/Times-Roman.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Roman.afm index 26806693538..d0cb874e415 100644 --- a/Resources/afm/Times-Roman.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/Times-Roman.afm @@ -1,2419 +1,4838 @@ -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.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 AdobeStandardEncoding -CapHeight 662 -XHeight 450 -Ascender 683 -Descender -217 -StdHW 28 -StdVW 84 -StartCharMetrics 315 -C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; -C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; -C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; -C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; -C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; -C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; -C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; -C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; -C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; -C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; -C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; -C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; -C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; -C 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ; -C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; -C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; -C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; -C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; -C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; -C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; -C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; -C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; -C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; -C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ; -C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; -C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; -C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; -C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; -C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; -C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; -C 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ; -C 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ; -C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; -C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; -C 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ; -C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; -C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; -C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; -C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; -C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; -C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; -C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; -C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; -C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; -C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; -C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; -C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; -C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; -C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; -C -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ; -C -1 ; 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 -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ; -C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; -C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; -C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; -C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; -C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; -C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; -C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ; -C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; -C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ; -C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ; -C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ; -C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; -C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ; -C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; -C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ; -C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; -C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ; -C -1 ; 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 -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; -C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; -C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ; -C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ; -C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; -C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; -C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; -C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; -C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ; -C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; -C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; -C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; -C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ; -C -1 ; 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 -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; -C -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ; -C -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ; -C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ; -C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; -C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; -C -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ; -C -1 ; 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 -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; -C -1 ; 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 -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ; -C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; -C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; -C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; -C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ; -C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; -C -1 ; 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 -1 ; 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 -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; -C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ; -C -1 ; 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 -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ; -C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; -C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; -C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; -C -1 ; 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 -1 ; WX 400 ; N degree ; B 57 390 343 676 ; -C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; -C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; -C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; -C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; -C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ; -C -1 ; WX 722 ; N Aring ; B 15 0 706 898 ; -C -1 ; 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 -1 ; 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 -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; -C -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ; -C -1 ; 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 -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; -C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; -C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ; -C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; -C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ; -C -1 ; 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, 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.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 AdobeStandardEncoding + +CapHeight 662 + +XHeight 450 + +Ascender 683 + +Descender -217 + +StdHW 28 + +StdVW 84 + +StartCharMetrics 315 + +C 32 ; 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 39 ; 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 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 96 ; 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 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; + +C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; + +C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; + +C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; + +C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; + +C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; + +C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; + +C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; + +C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; + +C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; + +C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; + +C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; + +C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; + +C 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ; + +C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; + +C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; + +C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; + +C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; + +C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; + +C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; + +C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; + +C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; + +C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; + +C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; + +C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ; + +C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; + +C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; + +C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; + +C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; + +C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; + +C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; + +C 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ; + +C 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ; + +C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; + +C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; + +C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; + +C 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ; + +C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; + +C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; + +C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; + +C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; + +C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; + +C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; + +C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; + +C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; + +C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; + +C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; + +C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; + +C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; + +C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; + +C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; + +C -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ; + +C -1 ; 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 -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ; + +C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; + +C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; + +C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; + +C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; + +C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; + +C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; + +C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ; + +C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; + +C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ; + +C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ; + +C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ; + +C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; + +C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ; + +C -1 ; 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 -1 ; 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 -1 ; 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 -1 ; 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 -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; + +C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ; + +C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; + +C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ; + +C -1 ; 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 -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; + +C -1 ; 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 -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; + +C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ; + +C -1 ; 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 -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ; + +C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; + +C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; + +C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; + +C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; + +C -1 ; 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 -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ; + +C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; + +C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; + +C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; + +C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ; + +C -1 ; 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 -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; + +C -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ; + +C -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; + +C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ; + +C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; + +C -1 ; 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 -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; + +C -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ; + +C -1 ; 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 -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; + +C -1 ; 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 -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ; + +C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; + +C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; + +C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; + +C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; + +C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; + +C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ; + +C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; + +C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ; + +C -1 ; 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 -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; + +C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ; + +C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; + +C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; + +C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; + +C -1 ; 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 -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; + +C -1 ; 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 -1 ; WX 400 ; N degree ; B 57 390 343 676 ; + +C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; + +C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; + +C -1 ; 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 -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; + +C -1 ; 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 -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; + +C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ; + +C -1 ; WX 722 ; N Aring ; B 15 0 706 898 ; + +C -1 ; 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 -1 ; 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 -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; + +C -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ; + +C -1 ; 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 -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; + +C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; + +C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ; + +C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; + +C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ; + +C -1 ; 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 + diff --git a/Resources/afm/ZapfDingbats.afm b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/ZapfDingbats.afm similarity index 97% rename from Resources/afm/ZapfDingbats.afm rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/ZapfDingbats.afm index dc5662e2cc7..40828706c72 100644 --- a/Resources/afm/ZapfDingbats.afm +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/afm/ZapfDingbats.afm @@ -1,225 +1,450 @@ -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 +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 + diff --git a/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/additional.txt b/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/additional.txt new file mode 100644 index 00000000000..72ea294d9b5 --- /dev/null +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/additional.txt @@ -0,0 +1,146 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Format: Semicolon-delimited fields: +# (1) glyph name +# (2) Unicode scalar value +# +# These mappings are missing in glyphlist.txt +# +angbracketleft;3008 +angbracketright;3009 +circlecopyrt;00A9 +controlNULL;0000 +# +# TeX-related mappings using named values +# +angbracketleftbig;2329 +angbracketleftBig;2329 +angbracketleftbigg;2329 +angbracketleftBigg;2329 +angbracketrightBig;232A +angbracketrightbig;232A +angbracketrightBigg;232A +angbracketrightbigg;232A +arrowhookleft;21AA +arrowhookright;21A9 +arrowlefttophalf;21BC +arrowleftbothalf;21BD +arrownortheast;2197 +arrownorthwest;2196 +arrowrighttophalf;21C0 +arrowrightbothalf;21C1 +arrowsoutheast;2198 +arrowsouthwest;2199 +backslashbig;2216 +backslashBig;2216 +backslashBigg;2216 +backslashbigg;2216 +bardbl;2016 +bracehtipdownleft;FE37 +bracehtipdownright;FE37 +bracehtipupleft;FE38 +bracehtipupright;FE38 +braceleftBig;007B +braceleftbig;007B +braceleftbigg;007B +braceleftBigg;007B +bracerightBig;007D +bracerightbig;007D +bracerightbigg;007D +bracerightBigg;007D +bracketleftbig;005B +bracketleftBig;005B +bracketleftbigg;005B +bracketleftBigg;005B +bracketrightBig;005D +bracketrightbig;005D +bracketrightbigg;005D +bracketrightBigg;005D +ceilingleftbig;2308 +ceilingleftBig;2308 +ceilingleftBigg;2308 +ceilingleftbigg;2308 +ceilingrightbig;2309 +ceilingrightBig;2309 +ceilingrightbigg;2309 +ceilingrightBigg;2309 +circledotdisplay;2299 +circledottext;2299 +circlemultiplydisplay;2297 +circlemultiplytext;2297 +circleplusdisplay;2295 +circleplustext;2295 +contintegraldisplay;222E +contintegraltext;222E +coproductdisplay;2210 +coproducttext;2210 +floorleftBig;230A +floorleftbig;230A +floorleftbigg;230A +floorleftBigg;230A +floorrightbig;230B +floorrightBig;230B +floorrightBigg;230B +floorrightbigg;230B +hatwide;0302 +hatwider;0302 +hatwidest;0302 +intercal;1D40 +integraldisplay;222B +integraltext;222B +intersectiondisplay;22C2 +intersectiontext;22C2 +logicalanddisplay;2227 +logicalandtext;2227 +logicalordisplay;2228 +logicalortext;2228 +parenleftBig;0028 +parenleftbig;0028 +parenleftBigg;0028 +parenleftbigg;0028 +parenrightBig;0029 +parenrightbig;0029 +parenrightBigg;0029 +parenrightbigg;0029 +prime;2032 +productdisplay;220F +producttext;220F +radicalbig;221A +radicalBig;221A +radicalBigg;221A +radicalbigg;221A +radicalbt;221A +radicaltp;221A +radicalvertex;221A +slashbig;002F +slashBig;002F +slashBigg;002F +slashbigg;002F +summationdisplay;2211 +summationtext;2211 +tildewide;02DC +tildewider;02DC +tildewidest;02DC +uniondisplay;22C3 +unionmultidisplay;228E +unionmultitext;228E +unionsqdisplay;2294 +unionsqtext;2294 +uniontext;22C3 +vextenddouble;2225 +vextendsingle;2223 +#END \ No newline at end of file diff --git a/Resources/glyphlist.txt b/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/glyphlist.txt similarity index 97% rename from Resources/glyphlist.txt rename to pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/glyphlist.txt index 0881a86f159..2937b420033 100644 --- a/Resources/glyphlist.txt +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/glyphlist.txt @@ -1,12 +1,48 @@ +# ----------------------------------------------------------- +# Copyright 1997, 1998, 2002, 2007, 2010 Adobe Systems Incorporated. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe Systems Incorporated nor the names +# of its contributors may be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- # Name: Adobe Glyph List # Table version: 2.0 # Date: September 20, 2002 +# URL: http://sourceforge.net/adobe/aglfn/ # -# See http://partners.adobe.com/asn/developer/typeforum/unicodegn.html +# Format: two semicolon-delimited fields: +# (1) glyph name--upper/lowercase letters and digits +# (2) Unicode scalar value--four uppercase hexadecimal digits # -# Format: Semicolon-delimited fields: -# (1) glyph name -# (2) Unicode scalar value A;0041 AE;00C6 AEacute;01FC @@ -1092,11 +1128,9 @@ anbopomofo;3122 angbopomofo;3124 angkhankhuthai;0E5A angle;2220 -angbracketleft;3008 anglebracketleft;3008 anglebracketleftvertical;FE3F anglebracketright;3009 -angbracketright;3009 anglebracketrightvertical;FE40 angleleft;2329 angleright;232A @@ -1390,7 +1424,6 @@ cieuckorean;3148 cieucparenkorean;3208 cieucuparenkorean;321C circle;25CB -circlecopyrt;00A9 circlemultiply;2297 circleot;2299 circleplus;2295 @@ -1460,7 +1493,6 @@ controlGS;001D controlHT;0009 controlLF;000A controlNAK;0015 -controlNULL;0000 controlRS;001E controlSI;000F controlSO;000E @@ -4292,6 +4324,4 @@ zretroflexhook;0290 zstroke;01B6 zuhiragana;305A zukatakana;30BA -#--end - - +#END diff --git a/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/zapfdingbats.txt b/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/zapfdingbats.txt new file mode 100644 index 00000000000..69e12818710 --- /dev/null +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/glyphlist/zapfdingbats.txt @@ -0,0 +1,248 @@ +# ----------------------------------------------------------- +# Copyright 2002, 2010 Adobe Systems Incorporated. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe Systems Incorporated nor the names +# of its contributors may be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: ITC Zapf Dingbats Glyph List +# Table version: 2.0 +# Date: September 20, 2002 +# URL: http://sourceforge.net/adobe/aglfn/ +# +# Format: two semicolon-delimited fields: +# (1) glyph name--upper/lowercase letters and digits +# (2) Unicode scalar value--four uppercase hexadecimal digits +# +a100;275E +a101;2761 +a102;2762 +a103;2763 +a104;2764 +a105;2710 +a106;2765 +a107;2766 +a108;2767 +a109;2660 +a10;2721 +a110;2665 +a111;2666 +a112;2663 +a117;2709 +a118;2708 +a119;2707 +a11;261B +a120;2460 +a121;2461 +a122;2462 +a123;2463 +a124;2464 +a125;2465 +a126;2466 +a127;2467 +a128;2468 +a129;2469 +a12;261E +a130;2776 +a131;2777 +a132;2778 +a133;2779 +a134;277A +a135;277B +a136;277C +a137;277D +a138;277E +a139;277F +a13;270C +a140;2780 +a141;2781 +a142;2782 +a143;2783 +a144;2784 +a145;2785 +a146;2786 +a147;2787 +a148;2788 +a149;2789 +a14;270D +a150;278A +a151;278B +a152;278C +a153;278D +a154;278E +a155;278F +a156;2790 +a157;2791 +a158;2792 +a159;2793 +a15;270E +a160;2794 +a161;2192 +a162;27A3 +a163;2194 +a164;2195 +a165;2799 +a166;279B +a167;279C +a168;279D +a169;279E +a16;270F +a170;279F +a171;27A0 +a172;27A1 +a173;27A2 +a174;27A4 +a175;27A5 +a176;27A6 +a177;27A7 +a178;27A8 +a179;27A9 +a17;2711 +a180;27AB +a181;27AD +a182;27AF +a183;27B2 +a184;27B3 +a185;27B5 +a186;27B8 +a187;27BA +a188;27BB +a189;27BC +a18;2712 +a190;27BD +a191;27BE +a192;279A +a193;27AA +a194;27B6 +a195;27B9 +a196;2798 +a197;27B4 +a198;27B7 +a199;27AC +a19;2713 +a1;2701 +a200;27AE +a201;27B1 +a202;2703 +a203;2750 +a204;2752 +a205;276E +a206;2770 +a20;2714 +a21;2715 +a22;2716 +a23;2717 +a24;2718 +a25;2719 +a26;271A +a27;271B +a28;271C +a29;2722 +a2;2702 +a30;2723 +a31;2724 +a32;2725 +a33;2726 +a34;2727 +a35;2605 +a36;2729 +a37;272A +a38;272B +a39;272C +a3;2704 +a40;272D +a41;272E +a42;272F +a43;2730 +a44;2731 +a45;2732 +a46;2733 +a47;2734 +a48;2735 +a49;2736 +a4;260E +a50;2737 +a51;2738 +a52;2739 +a53;273A +a54;273B +a55;273C +a56;273D +a57;273E +a58;273F +a59;2740 +a5;2706 +a60;2741 +a61;2742 +a62;2743 +a63;2744 +a64;2745 +a65;2746 +a66;2747 +a67;2748 +a68;2749 +a69;274A +a6;271D +a70;274B +a71;25CF +a72;274D +a73;25A0 +a74;274F +a75;2751 +a76;25B2 +a77;25BC +a78;25C6 +a79;2756 +a7;271E +a81;25D7 +a82;2758 +a83;2759 +a84;275A +a85;276F +a86;2771 +a87;2772 +a88;2773 +a89;2768 +a8;271F +a90;2769 +a91;276C +a92;276D +a93;276A +a94;276B +a95;2774 +a96;2775 +a97;275B +a98;275C +a99;275D +a9;2720 +space;0020 +#END diff --git a/pdfbox/src/main/resources/org/apache/pdfbox/resources/icc/ISOcoated_v2_300_bas.icc b/pdfbox/src/main/resources/org/apache/pdfbox/resources/icc/ISOcoated_v2_300_bas.icc new file mode 100644 index 00000000000..71faa91f962 Binary files /dev/null and b/pdfbox/src/main/resources/org/apache/pdfbox/resources/icc/ISOcoated_v2_300_bas.icc differ diff --git a/pdfbox/src/main/resources/org/apache/pdfbox/resources/text/BidiMirroring.txt b/pdfbox/src/main/resources/org/apache/pdfbox/resources/text/BidiMirroring.txt new file mode 100644 index 00000000000..fbc60f1ab6b --- /dev/null +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/text/BidiMirroring.txt @@ -0,0 +1,604 @@ +# BidiMirroring-8.0.0.txt +# Date: 2015-01-20, 18:30:00 GMT [KW, LI] +# +# Bidi_Mirroring_Glyph Property +# +# This file is an informative contributory data file in the +# Unicode Character Database. +# +# Copyright (c) 1991-2015 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# This data file lists characters that have the Bidi_Mirrored=Yes property +# value, for which there is another Unicode character that typically has a glyph +# that is the mirror image of the original character's glyph. +# +# The repertoire covered by the file is Unicode 8.0.0. +# +# The file contains a list of lines with mappings from one code point +# to another one for character-based mirroring. +# Note that for "real" mirroring, a rendering engine needs to select +# appropriate alternative glyphs, and that many Unicode characters do not +# have a mirror-image Unicode character. +# +# Each mapping line contains two fields, separated by a semicolon (';'). +# Each of the two fields contains a code point represented as a +# variable-length hexadecimal value with 4 to 6 digits. +# A comment indicates where the characters are "BEST FIT" mirroring. +# +# Code points for which Bidi_Mirrored=Yes, but for which no appropriate +# characters exist with mirrored glyphs, are +# listed as comments at the end of the file. +# +# Formally, the default value of the Bidi_Mirroring_Glyph property +# for each code point is , unless a mapping to +# some other character is specified in this data file. When a code +# point has the default value for the Bidi_Mirroring_Glyph property, +# that means that no other character exists whose glyph is suitable +# for character-based mirroring. +# +# For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm, +# at http://www.unicode.org/unicode/reports/tr9/ +# +# This file was originally created by Markus Scherer. +# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler, +# and for subsequent versions by Ken Whistler and Laurentiu Iancu. +# +# ############################################################ +# +# Property: Bidi_Mirroring_Glyph +# +# @missing: 0000..10FFFF; + +0028; 0029 # LEFT PARENTHESIS +0029; 0028 # RIGHT PARENTHESIS +003C; 003E # LESS-THAN SIGN +003E; 003C # GREATER-THAN SIGN +005B; 005D # LEFT SQUARE BRACKET +005D; 005B # RIGHT SQUARE BRACKET +007B; 007D # LEFT CURLY BRACKET +007D; 007B # RIGHT CURLY BRACKET +00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0F3A; 0F3B # TIBETAN MARK GUG RTAGS GYON +0F3B; 0F3A # TIBETAN MARK GUG RTAGS GYAS +0F3C; 0F3D # TIBETAN MARK ANG KHANG GYON +0F3D; 0F3C # TIBETAN MARK ANG KHANG GYAS +169B; 169C # OGHAM FEATHER MARK +169C; 169B # OGHAM REVERSED FEATHER MARK +2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +2045; 2046 # LEFT SQUARE BRACKET WITH QUILL +2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL +207D; 207E # SUPERSCRIPT LEFT PARENTHESIS +207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS +208D; 208E # SUBSCRIPT LEFT PARENTHESIS +208E; 208D # SUBSCRIPT RIGHT PARENTHESIS +2208; 220B # ELEMENT OF +2209; 220C # NOT AN ELEMENT OF +220A; 220D # SMALL ELEMENT OF +220B; 2208 # CONTAINS AS MEMBER +220C; 2209 # DOES NOT CONTAIN AS MEMBER +220D; 220A # SMALL CONTAINS AS MEMBER +2215; 29F5 # DIVISION SLASH +223C; 223D # TILDE OPERATOR +223D; 223C # REVERSED TILDE +2243; 22CD # ASYMPTOTICALLY EQUAL TO +2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF +2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO +2254; 2255 # COLON EQUALS +2255; 2254 # EQUALS COLON +2264; 2265 # LESS-THAN OR EQUAL TO +2265; 2264 # GREATER-THAN OR EQUAL TO +2266; 2267 # LESS-THAN OVER EQUAL TO +2267; 2266 # GREATER-THAN OVER EQUAL TO +2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO +2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO +226A; 226B # MUCH LESS-THAN +226B; 226A # MUCH GREATER-THAN +226E; 226F # [BEST FIT] NOT LESS-THAN +226F; 226E # [BEST FIT] NOT GREATER-THAN +2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO +2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO +2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO +2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO +2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO +2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO +2276; 2277 # LESS-THAN OR GREATER-THAN +2277; 2276 # GREATER-THAN OR LESS-THAN +2278; 2279 # [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN +2279; 2278 # [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN +227A; 227B # PRECEDES +227B; 227A # SUCCEEDS +227C; 227D # PRECEDES OR EQUAL TO +227D; 227C # SUCCEEDS OR EQUAL TO +227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO +227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO +2280; 2281 # [BEST FIT] DOES NOT PRECEDE +2281; 2280 # [BEST FIT] DOES NOT SUCCEED +2282; 2283 # SUBSET OF +2283; 2282 # SUPERSET OF +2284; 2285 # [BEST FIT] NOT A SUBSET OF +2285; 2284 # [BEST FIT] NOT A SUPERSET OF +2286; 2287 # SUBSET OF OR EQUAL TO +2287; 2286 # SUPERSET OF OR EQUAL TO +2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO +2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO +228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO +228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO +228F; 2290 # SQUARE IMAGE OF +2290; 228F # SQUARE ORIGINAL OF +2291; 2292 # SQUARE IMAGE OF OR EQUAL TO +2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO +2298; 29B8 # CIRCLED DIVISION SLASH +22A2; 22A3 # RIGHT TACK +22A3; 22A2 # LEFT TACK +22A6; 2ADE # ASSERTION +22A8; 2AE4 # TRUE +22A9; 2AE3 # FORCES +22AB; 2AE5 # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22B0; 22B1 # PRECEDES UNDER RELATION +22B1; 22B0 # SUCCEEDS UNDER RELATION +22B2; 22B3 # NORMAL SUBGROUP OF +22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP +22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO +22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO +22B6; 22B7 # ORIGINAL OF +22B7; 22B6 # IMAGE OF +22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT +22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT +22CB; 22CC # LEFT SEMIDIRECT PRODUCT +22CC; 22CB # RIGHT SEMIDIRECT PRODUCT +22CD; 2243 # REVERSED TILDE EQUALS +22D0; 22D1 # DOUBLE SUBSET +22D1; 22D0 # DOUBLE SUPERSET +22D6; 22D7 # LESS-THAN WITH DOT +22D7; 22D6 # GREATER-THAN WITH DOT +22D8; 22D9 # VERY MUCH LESS-THAN +22D9; 22D8 # VERY MUCH GREATER-THAN +22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN +22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN +22DC; 22DD # EQUAL TO OR LESS-THAN +22DD; 22DC # EQUAL TO OR GREATER-THAN +22DE; 22DF # EQUAL TO OR PRECEDES +22DF; 22DE # EQUAL TO OR SUCCEEDS +22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL +22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL +22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO +22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO +22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO +22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO +22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO +22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO +22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO +22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO +22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF +22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP +22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO +22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS +22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS +22F2; 22FA # ELEMENT OF WITH LONG HORIZONTAL STROKE +22F3; 22FB # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22F4; 22FC # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22F6; 22FD # ELEMENT OF WITH OVERBAR +22F7; 22FE # SMALL ELEMENT OF WITH OVERBAR +22FA; 22F2 # CONTAINS WITH LONG HORIZONTAL STROKE +22FB; 22F3 # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22FC; 22F4 # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22FD; 22F6 # CONTAINS WITH OVERBAR +22FE; 22F7 # SMALL CONTAINS WITH OVERBAR +2308; 2309 # LEFT CEILING +2309; 2308 # RIGHT CEILING +230A; 230B # LEFT FLOOR +230B; 230A # RIGHT FLOOR +2329; 232A # LEFT-POINTING ANGLE BRACKET +232A; 2329 # RIGHT-POINTING ANGLE BRACKET +2768; 2769 # MEDIUM LEFT PARENTHESIS ORNAMENT +2769; 2768 # MEDIUM RIGHT PARENTHESIS ORNAMENT +276A; 276B # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B; 276A # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C; 276D # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D; 276C # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E; 276F # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F; 276E # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770; 2771 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771; 2770 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772; 2773 # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT +2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT +27C3; 27C4 # OPEN SUBSET +27C4; 27C3 # OPEN SUPERSET +27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER +27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER +27C8; 27C9 # REVERSE SOLIDUS PRECEDING SUBSET +27C9; 27C8 # SUPERSET PRECEDING SOLIDUS +27CB; 27CD # MATHEMATICAL RISING DIAGONAL +27CD; 27CB # MATHEMATICAL FALLING DIAGONAL +27D5; 27D6 # LEFT OUTER JOIN +27D6; 27D5 # RIGHT OUTER JOIN +27DD; 27DE # LONG RIGHT TACK +27DE; 27DD # LONG LEFT TACK +27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK +27E3; 27E2 # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK +27E4; 27E5 # WHITE SQUARE WITH LEFTWARDS TICK +27E5; 27E4 # WHITE SQUARE WITH RIGHTWARDS TICK +27E6; 27E7 # MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7; 27E6 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8; 27E9 # MATHEMATICAL LEFT ANGLE BRACKET +27E9; 27E8 # MATHEMATICAL RIGHT ANGLE BRACKET +27EA; 27EB # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB; 27EA # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC; 27ED # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED; 27EC # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE; 27EF # MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF; 27EE # MATHEMATICAL RIGHT FLATTENED PARENTHESIS +2983; 2984 # LEFT WHITE CURLY BRACKET +2984; 2983 # RIGHT WHITE CURLY BRACKET +2985; 2986 # LEFT WHITE PARENTHESIS +2986; 2985 # RIGHT WHITE PARENTHESIS +2987; 2988 # Z NOTATION LEFT IMAGE BRACKET +2988; 2987 # Z NOTATION RIGHT IMAGE BRACKET +2989; 298A # Z NOTATION LEFT BINDING BRACKET +298A; 2989 # Z NOTATION RIGHT BINDING BRACKET +298B; 298C # LEFT SQUARE BRACKET WITH UNDERBAR +298C; 298B # RIGHT SQUARE BRACKET WITH UNDERBAR +298D; 2990 # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E; 298F # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F; 298E # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990; 298D # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991; 2992 # LEFT ANGLE BRACKET WITH DOT +2992; 2991 # RIGHT ANGLE BRACKET WITH DOT +2993; 2994 # LEFT ARC LESS-THAN BRACKET +2994; 2993 # RIGHT ARC GREATER-THAN BRACKET +2995; 2996 # DOUBLE LEFT ARC GREATER-THAN BRACKET +2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET +2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET +2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET +29B8; 2298 # CIRCLED REVERSE SOLIDUS +29C0; 29C1 # CIRCLED LESS-THAN +29C1; 29C0 # CIRCLED GREATER-THAN +29C4; 29C5 # SQUARED RISING DIAGONAL SLASH +29C5; 29C4 # SQUARED FALLING DIAGONAL SLASH +29CF; 29D0 # LEFT TRIANGLE BESIDE VERTICAL BAR +29D0; 29CF # VERTICAL BAR BESIDE RIGHT TRIANGLE +29D1; 29D2 # BOWTIE WITH LEFT HALF BLACK +29D2; 29D1 # BOWTIE WITH RIGHT HALF BLACK +29D4; 29D5 # TIMES WITH LEFT HALF BLACK +29D5; 29D4 # TIMES WITH RIGHT HALF BLACK +29D8; 29D9 # LEFT WIGGLY FENCE +29D9; 29D8 # RIGHT WIGGLY FENCE +29DA; 29DB # LEFT DOUBLE WIGGLY FENCE +29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE +29F5; 2215 # REVERSE SOLIDUS OPERATOR +29F8; 29F9 # BIG SOLIDUS +29F9; 29F8 # BIG REVERSE SOLIDUS +29FC; 29FD # LEFT-POINTING CURVED ANGLE BRACKET +29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET +2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS +2A2C; 2A2B # MINUS SIGN WITH RISING DOTS +2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE +2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE +2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE +2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE +2A3C; 2A3D # INTERIOR PRODUCT +2A3D; 2A3C # RIGHTHAND INTERIOR PRODUCT +2A64; 2A65 # Z NOTATION DOMAIN ANTIRESTRICTION +2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION +2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE +2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE +2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO +2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO +2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE +2A80; 2A7F # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE +2A81; 2A82 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE +2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE +2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT +2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT +2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN +2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN +2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL +2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL +2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL +2A94; 2A93 # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL +2A95; 2A96 # SLANTED EQUAL TO OR LESS-THAN +2A96; 2A95 # SLANTED EQUAL TO OR GREATER-THAN +2A97; 2A98 # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE +2A98; 2A97 # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE +2A99; 2A9A # DOUBLE-LINE EQUAL TO OR LESS-THAN +2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN +2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN +2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN +2AA1; 2AA2 # DOUBLE NESTED LESS-THAN +2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN +2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE +2AA7; 2AA6 # GREATER-THAN CLOSED BY CURVE +2AA8; 2AA9 # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL +2AA9; 2AA8 # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL +2AAA; 2AAB # SMALLER THAN +2AAB; 2AAA # LARGER THAN +2AAC; 2AAD # SMALLER THAN OR EQUAL TO +2AAD; 2AAC # LARGER THAN OR EQUAL TO +2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN +2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN +2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN +2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN +2ABB; 2ABC # DOUBLE PRECEDES +2ABC; 2ABB # DOUBLE SUCCEEDS +2ABD; 2ABE # SUBSET WITH DOT +2ABE; 2ABD # SUPERSET WITH DOT +2ABF; 2AC0 # SUBSET WITH PLUS SIGN BELOW +2AC0; 2ABF # SUPERSET WITH PLUS SIGN BELOW +2AC1; 2AC2 # SUBSET WITH MULTIPLICATION SIGN BELOW +2AC2; 2AC1 # SUPERSET WITH MULTIPLICATION SIGN BELOW +2AC3; 2AC4 # SUBSET OF OR EQUAL TO WITH DOT ABOVE +2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE +2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN +2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN +2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR +2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR +2ACF; 2AD0 # CLOSED SUBSET +2AD0; 2ACF # CLOSED SUPERSET +2AD1; 2AD2 # CLOSED SUBSET OR EQUAL TO +2AD2; 2AD1 # CLOSED SUPERSET OR EQUAL TO +2AD3; 2AD4 # SUBSET ABOVE SUPERSET +2AD4; 2AD3 # SUPERSET ABOVE SUBSET +2AD5; 2AD6 # SUBSET ABOVE SUBSET +2AD6; 2AD5 # SUPERSET ABOVE SUPERSET +2ADE; 22A6 # SHORT LEFT TACK +2AE3; 22A9 # DOUBLE VERTICAL BAR LEFT TURNSTILE +2AE4; 22A8 # VERTICAL BAR DOUBLE LEFT TURNSTILE +2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE +2AEC; 2AED # DOUBLE STROKE NOT SIGN +2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN +2AF7; 2AF8 # TRIPLE NESTED LESS-THAN +2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN +2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO +2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO +2E02; 2E03 # LEFT SUBSTITUTION BRACKET +2E03; 2E02 # RIGHT SUBSTITUTION BRACKET +2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET +2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET +2E09; 2E0A # LEFT TRANSPOSITION BRACKET +2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET +2E0C; 2E0D # LEFT RAISED OMISSION BRACKET +2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET +2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET +2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET +2E20; 2E21 # LEFT VERTICAL BAR WITH QUILL +2E21; 2E20 # RIGHT VERTICAL BAR WITH QUILL +2E22; 2E23 # TOP LEFT HALF BRACKET +2E23; 2E22 # TOP RIGHT HALF BRACKET +2E24; 2E25 # BOTTOM LEFT HALF BRACKET +2E25; 2E24 # BOTTOM RIGHT HALF BRACKET +2E26; 2E27 # LEFT SIDEWAYS U BRACKET +2E27; 2E26 # RIGHT SIDEWAYS U BRACKET +2E28; 2E29 # LEFT DOUBLE PARENTHESIS +2E29; 2E28 # RIGHT DOUBLE PARENTHESIS +3008; 3009 # LEFT ANGLE BRACKET +3009; 3008 # RIGHT ANGLE BRACKET +300A; 300B # LEFT DOUBLE ANGLE BRACKET +300B; 300A # RIGHT DOUBLE ANGLE BRACKET +300C; 300D # [BEST FIT] LEFT CORNER BRACKET +300D; 300C # [BEST FIT] RIGHT CORNER BRACKET +300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET +300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET +3010; 3011 # LEFT BLACK LENTICULAR BRACKET +3011; 3010 # RIGHT BLACK LENTICULAR BRACKET +3014; 3015 # LEFT TORTOISE SHELL BRACKET +3015; 3014 # RIGHT TORTOISE SHELL BRACKET +3016; 3017 # LEFT WHITE LENTICULAR BRACKET +3017; 3016 # RIGHT WHITE LENTICULAR BRACKET +3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET +3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET +301A; 301B # LEFT WHITE SQUARE BRACKET +301B; 301A # RIGHT WHITE SQUARE BRACKET +FE59; FE5A # SMALL LEFT PARENTHESIS +FE5A; FE59 # SMALL RIGHT PARENTHESIS +FE5B; FE5C # SMALL LEFT CURLY BRACKET +FE5C; FE5B # SMALL RIGHT CURLY BRACKET +FE5D; FE5E # SMALL LEFT TORTOISE SHELL BRACKET +FE5E; FE5D # SMALL RIGHT TORTOISE SHELL BRACKET +FE64; FE65 # SMALL LESS-THAN SIGN +FE65; FE64 # SMALL GREATER-THAN SIGN +FF08; FF09 # FULLWIDTH LEFT PARENTHESIS +FF09; FF08 # FULLWIDTH RIGHT PARENTHESIS +FF1C; FF1E # FULLWIDTH LESS-THAN SIGN +FF1E; FF1C # FULLWIDTH GREATER-THAN SIGN +FF3B; FF3D # FULLWIDTH LEFT SQUARE BRACKET +FF3D; FF3B # FULLWIDTH RIGHT SQUARE BRACKET +FF5B; FF5D # FULLWIDTH LEFT CURLY BRACKET +FF5D; FF5B # FULLWIDTH RIGHT CURLY BRACKET +FF5F; FF60 # FULLWIDTH LEFT WHITE PARENTHESIS +FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS +FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET +FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET + +# The following characters have no appropriate mirroring character. +# For these characters it is up to the rendering system +# to provide mirrored glyphs. + +# 2140; DOUBLE-STRUCK N-ARY SUMMATION +# 2201; COMPLEMENT +# 2202; PARTIAL DIFFERENTIAL +# 2203; THERE EXISTS +# 2204; THERE DOES NOT EXIST +# 2211; N-ARY SUMMATION +# 2216; SET MINUS +# 221A; SQUARE ROOT +# 221B; CUBE ROOT +# 221C; FOURTH ROOT +# 221D; PROPORTIONAL TO +# 221F; RIGHT ANGLE +# 2220; ANGLE +# 2221; MEASURED ANGLE +# 2222; SPHERICAL ANGLE +# 2224; DOES NOT DIVIDE +# 2226; NOT PARALLEL TO +# 222B; INTEGRAL +# 222C; DOUBLE INTEGRAL +# 222D; TRIPLE INTEGRAL +# 222E; CONTOUR INTEGRAL +# 222F; SURFACE INTEGRAL +# 2230; VOLUME INTEGRAL +# 2231; CLOCKWISE INTEGRAL +# 2232; CLOCKWISE CONTOUR INTEGRAL +# 2233; ANTICLOCKWISE CONTOUR INTEGRAL +# 2239; EXCESS +# 223B; HOMOTHETIC +# 223E; INVERTED LAZY S +# 223F; SINE WAVE +# 2240; WREATH PRODUCT +# 2241; NOT TILDE +# 2242; MINUS TILDE +# 2244; NOT ASYMPTOTICALLY EQUAL TO +# 2245; APPROXIMATELY EQUAL TO +# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO +# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +# 2248; ALMOST EQUAL TO +# 2249; NOT ALMOST EQUAL TO +# 224A; ALMOST EQUAL OR EQUAL TO +# 224B; TRIPLE TILDE +# 224C; ALL EQUAL TO +# 225F; QUESTIONED EQUAL TO +# 2260; NOT EQUAL TO +# 2262; NOT IDENTICAL TO +# 228C; MULTISET +# 22A7; MODELS +# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE +# 22AC; DOES NOT PROVE +# 22AD; NOT TRUE +# 22AE; DOES NOT FORCE +# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +# 22B8; MULTIMAP +# 22BE; RIGHT ANGLE WITH ARC +# 22BF; RIGHT TRIANGLE +# 22F5; ELEMENT OF WITH DOT ABOVE +# 22F8; ELEMENT OF WITH UNDERBAR +# 22F9; ELEMENT OF WITH TWO HORIZONTAL STROKES +# 22FF; Z NOTATION BAG MEMBERSHIP +# 2320; TOP HALF INTEGRAL +# 2321; BOTTOM HALF INTEGRAL +# 27C0; THREE DIMENSIONAL ANGLE +# 27CC; LONG DIVISION +# 27D3; LOWER RIGHT CORNER WITH DOT +# 27D4; UPPER LEFT CORNER WITH DOT +# 27DC; LEFT MULTIMAP +# 299B; MEASURED ANGLE OPENING LEFT +# 299C; RIGHT ANGLE VARIANT WITH SQUARE +# 299D; MEASURED RIGHT ANGLE WITH DOT +# 299E; ANGLE WITH S INSIDE +# 299F; ACUTE ANGLE +# 29A0; SPHERICAL ANGLE OPENING LEFT +# 29A1; SPHERICAL ANGLE OPENING UP +# 29A2; TURNED ANGLE +# 29A3; REVERSED ANGLE +# 29A4; ANGLE WITH UNDERBAR +# 29A5; REVERSED ANGLE WITH UNDERBAR +# 29A6; OBLIQUE ANGLE OPENING UP +# 29A7; OBLIQUE ANGLE OPENING DOWN +# 29A8; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT +# 29A9; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT +# 29AA; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT +# 29AB; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT +# 29AC; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP +# 29AD; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP +# 29AE; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN +# 29AF; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN +# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT +# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT +# 29C9; TWO JOINED SQUARES +# 29CE; RIGHT TRIANGLE ABOVE LEFT TRIANGLE +# 29DC; INCOMPLETE INFINITY +# 29E1; INCREASES AS +# 29E3; EQUALS SIGN AND SLANTED PARALLEL +# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE +# 29E5; IDENTICAL TO AND SLANTED PARALLEL +# 29E8; DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK +# 29E9; DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK +# 29F4; RULE-DELAYED +# 29F6; SOLIDUS WITH OVERBAR +# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE +# 2A0A; MODULO TWO SUM +# 2A0B; SUMMATION WITH INTEGRAL +# 2A0C; QUADRUPLE INTEGRAL OPERATOR +# 2A0D; FINITE PART INTEGRAL +# 2A0E; INTEGRAL WITH DOUBLE STROKE +# 2A0F; INTEGRAL AVERAGE WITH SLASH +# 2A10; CIRCULATION FUNCTION +# 2A11; ANTICLOCKWISE INTEGRATION +# 2A12; LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE +# 2A13; LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE +# 2A14; LINE INTEGRATION NOT INCLUDING THE POLE +# 2A15; INTEGRAL AROUND A POINT OPERATOR +# 2A16; QUATERNION INTEGRAL OPERATOR +# 2A17; INTEGRAL WITH LEFTWARDS ARROW WITH HOOK +# 2A18; INTEGRAL WITH TIMES SIGN +# 2A19; INTEGRAL WITH INTERSECTION +# 2A1A; INTEGRAL WITH UNION +# 2A1B; INTEGRAL WITH OVERBAR +# 2A1C; INTEGRAL WITH UNDERBAR +# 2A1E; LARGE LEFT TRIANGLE OPERATOR +# 2A1F; Z NOTATION SCHEMA COMPOSITION +# 2A20; Z NOTATION SCHEMA PIPING +# 2A21; Z NOTATION SCHEMA PROJECTION +# 2A24; PLUS SIGN WITH TILDE ABOVE +# 2A26; PLUS SIGN WITH TILDE BELOW +# 2A29; MINUS SIGN WITH COMMA ABOVE +# 2A3E; Z NOTATION RELATIONAL COMPOSITION +# 2A57; SLOPING LARGE OR +# 2A58; SLOPING LARGE AND +# 2A6A; TILDE OPERATOR WITH DOT ABOVE +# 2A6B; TILDE OPERATOR WITH RISING DOTS +# 2A6C; SIMILAR MINUS SIMILAR +# 2A6D; CONGRUENT WITH DOT ABOVE +# 2A6F; ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT +# 2A70; APPROXIMATELY EQUAL OR EQUAL TO +# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR +# 2A74; DOUBLE COLON EQUAL +# 2A7B; LESS-THAN WITH QUESTION MARK ABOVE +# 2A7C; GREATER-THAN WITH QUESTION MARK ABOVE +# 2A85; LESS-THAN OR APPROXIMATE +# 2A86; GREATER-THAN OR APPROXIMATE +# 2A87; LESS-THAN AND SINGLE-LINE NOT EQUAL TO +# 2A88; GREATER-THAN AND SINGLE-LINE NOT EQUAL TO +# 2A89; LESS-THAN AND NOT APPROXIMATE +# 2A8A; GREATER-THAN AND NOT APPROXIMATE +# 2A8D; LESS-THAN ABOVE SIMILAR OR EQUAL +# 2A8E; GREATER-THAN ABOVE SIMILAR OR EQUAL +# 2A8F; LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN +# 2A90; GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN +# 2A9D; SIMILAR OR LESS-THAN +# 2A9E; SIMILAR OR GREATER-THAN +# 2A9F; SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN +# 2AA0; SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN +# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR +# 2AB1; PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO +# 2AB2; SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO +# 2AB5; PRECEDES ABOVE NOT EQUAL TO +# 2AB6; SUCCEEDS ABOVE NOT EQUAL TO +# 2AB7; PRECEDES ABOVE ALMOST EQUAL TO +# 2AB8; SUCCEEDS ABOVE ALMOST EQUAL TO +# 2AB9; PRECEDES ABOVE NOT ALMOST EQUAL TO +# 2ABA; SUCCEEDS ABOVE NOT ALMOST EQUAL TO +# 2AC7; SUBSET OF ABOVE TILDE OPERATOR +# 2AC8; SUPERSET OF ABOVE TILDE OPERATOR +# 2AC9; SUBSET OF ABOVE ALMOST EQUAL TO +# 2ACA; SUPERSET OF ABOVE ALMOST EQUAL TO +# 2ACB; SUBSET OF ABOVE NOT EQUAL TO +# 2ACC; SUPERSET OF ABOVE NOT EQUAL TO +# 2ADC; FORKING +# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE +# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL +# 2AEE; DOES NOT DIVIDE WITH REVERSED NEGATION SLASH +# 2AF3; PARALLEL WITH TILDE OPERATOR +# 2AFB; TRIPLE SOLIDUS BINARY RELATION +# 2AFD; DOUBLE SOLIDUS OPERATOR +# 1D6DB; MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +# 1D715; MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +# 1D74F; MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +# 1D789; MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +# 1D7C3; MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL + +# EOF diff --git a/pdfbox/src/main/resources/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf b/pdfbox/src/main/resources/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf new file mode 100644 index 00000000000..626dd9364f1 Binary files /dev/null and b/pdfbox/src/main/resources/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf differ diff --git a/pdfbox/src/main/resources/org/apache/pdfbox/resources/version.properties b/pdfbox/src/main/resources/org/apache/pdfbox/resources/version.properties new file mode 100644 index 00000000000..5650c32a3f5 --- /dev/null +++ b/pdfbox/src/main/resources/org/apache/pdfbox/resources/version.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +pdfbox.version=${project.version} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/ParallelParameterized.java b/pdfbox/src/test/java/org/apache/pdfbox/ParallelParameterized.java new file mode 100644 index 00000000000..22a7fc9e376 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/ParallelParameterized.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox; + +import org.junit.runners.Parameterized; +import org.junit.runners.model.RunnerScheduler; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * Runs Parameterized JUnit tests in parallel. + * + * @see {http://goo.gl/lkigES} + */ +public class ParallelParameterized extends Parameterized +{ + private static class FixedThreadPoolScheduler implements RunnerScheduler + { + private final ExecutorService executorService; + private final long timeoutSeconds; + + FixedThreadPoolScheduler(long timeoutSeconds) + { + this.timeoutSeconds = timeoutSeconds; + int cores = Runtime.getRuntime().availableProcessors(); + + // for debugging + System.out.println("JDK: " + System.getProperty("java.runtime.name")); + System.out.println("Version: " + System.getProperty("java.specification.version")); + + // workaround Open JDK 6 bug which causes CMMException: Invalid profile data + if (System.getProperty("java.runtime.name").equals("OpenJDK Runtime Environment") && + System.getProperty("java.specification.version").equals("1.6")) + { + cores = 1; + } + + executorService = Executors.newFixedThreadPool(cores); + } + + @Override + public void finished() + { + executorService.shutdown(); + try + { + executorService.awaitTermination(timeoutSeconds, TimeUnit.SECONDS); + } + catch (InterruptedException exc) + { + throw new RuntimeException(exc); + } + } + + @Override public void schedule(Runnable childStatement) + { + executorService.submit(childStatement); + } + } + + public ParallelParameterized(Class c) throws Throwable + { + super(c); + long timeoutSeconds = Long.MAX_VALUE; + if (c.getSimpleName().equals("TestRendering")) + { + timeoutSeconds = 30; + } + setScheduler(new FixedThreadPoolScheduler(timeoutSeconds)); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/COSObjectKeyTest.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/COSObjectKeyTest.java new file mode 100644 index 00000000000..7e7f536cf9e --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/COSObjectKeyTest.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class COSObjectKeyTest +{ + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void compareToInputNotNullOutputZero() + { + // Arrange + final COSObjectKey objectUnderTest = new COSObjectKey(0L, 0); + final COSObjectKey other = new COSObjectKey(0L, 0); + + // Act + final int retval = objectUnderTest.compareTo(other); + + // Assert result + Assert.assertEquals(0, retval); + } + + @Test + public void compareToInputNotNullOutputPositive() + { + // Arrange + final COSObjectKey objectUnderTest = new COSObjectKey(0L, 0); + final COSObjectKey other = new COSObjectKey(-9_223_372_036_854_775_808L, 0); + + // Act + final int retval = objectUnderTest.compareTo(other); + + // Assert result + Assert.assertEquals(1, retval); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/PDFDocEncodingTest.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/PDFDocEncodingTest.java new file mode 100644 index 00000000000..aefbb5072c5 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/PDFDocEncodingTest.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +/** + * Test for PDFDocEncoding. + * + */ +public class PDFDocEncodingTest +{ + + static List deviations = new ArrayList<>(); + + static + { + // all deviations (based on the table in ISO 32000-1:2008) + // block 1 + deviations.add(String.valueOf('\u02D8')); // BREVE + deviations.add(String.valueOf('\u02C7')); // CARON + deviations.add(String.valueOf('\u02C6')); // MODIFIER LETTER CIRCUMFLEX ACCENT + deviations.add(String.valueOf('\u02D9')); // DOT ABOVE + deviations.add(String.valueOf('\u02DD')); // DOUBLE ACUTE ACCENT + deviations.add(String.valueOf('\u02DB')); // OGONEK + deviations.add(String.valueOf('\u02DA')); // RING ABOVE + deviations.add(String.valueOf('\u02DC')); // SMALL TILDE + // block 2 + deviations.add(String.valueOf('\u2022')); // BULLET + deviations.add(String.valueOf('\u2020')); // DAGGER + deviations.add(String.valueOf('\u2021')); // DOUBLE DAGGER + deviations.add(String.valueOf('\u2026')); // HORIZONTAL ELLIPSIS + deviations.add(String.valueOf('\u2014')); // EM DASH + deviations.add(String.valueOf('\u2013')); // EN DASH + deviations.add(String.valueOf('\u0192')); // LATIN SMALL LETTER SCRIPT F + deviations.add(String.valueOf('\u2044')); // FRACTION SLASH (solidus) + deviations.add(String.valueOf('\u2039')); // SINGLE LEFT-POINTING ANGLE QUOTATION MARK + deviations.add(String.valueOf('\u203A')); // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + deviations.add(String.valueOf('\u2212')); // MINUS SIGN + deviations.add(String.valueOf('\u2030')); // PER MILLE SIGN + deviations.add(String.valueOf('\u201E')); // DOUBLE LOW-9 QUOTATION MARK (quotedblbase) + deviations.add(String.valueOf('\u201C')); // LEFT DOUBLE QUOTATION MARK (quotedblleft) + deviations.add(String.valueOf('\u201D')); // RIGHT DOUBLE QUOTATION MARK (quotedblright) + deviations.add(String.valueOf('\u2018')); // LEFT SINGLE QUOTATION MARK (quoteleft) + deviations.add(String.valueOf('\u2019')); // RIGHT SINGLE QUOTATION MARK (quoteright) + deviations.add(String.valueOf('\u201A')); // SINGLE LOW-9 QUOTATION MARK (quotesinglbase) + deviations.add(String.valueOf('\u2122')); // TRADE MARK SIGN + deviations.add(String.valueOf('\uFB01')); // LATIN SMALL LIGATURE FI + deviations.add(String.valueOf('\uFB02')); // LATIN SMALL LIGATURE FL + deviations.add(String.valueOf('\u0141')); // LATIN CAPITAL LETTER L WITH STROKE + deviations.add(String.valueOf('\u0152')); // LATIN CAPITAL LIGATURE OE + deviations.add(String.valueOf('\u0160')); // LATIN CAPITAL LETTER S WITH CARON + deviations.add(String.valueOf('\u0178')); // LATIN CAPITAL LETTER Y WITH DIAERESIS + deviations.add(String.valueOf('\u017D')); // LATIN CAPITAL LETTER Z WITH CARON + deviations.add(String.valueOf('\u0131')); // LATIN SMALL LETTER DOTLESS I + deviations.add(String.valueOf('\u0142')); // LATIN SMALL LETTER L WITH STROKE + deviations.add(String.valueOf('\u0153')); // LATIN SMALL LIGATURE OE + deviations.add(String.valueOf('\u0161')); // LATIN SMALL LETTER S WITH CARON + deviations.add(String.valueOf('\u017E')); // LATIN SMALL LETTER Z WITH CARON + deviations.add(String.valueOf('\u20AC')); // EURO SIGN + // end of deviations + } + + @Test + public void testDeviations() + { + for (String deviation: deviations) + { + COSString cosString = new COSString(deviation); + assertEquals(cosString.getString(), deviation); + } + } + + /** + * PDFBOX-3864: Test that chars smaller than 256 which are NOT part of PDFDocEncoding are + * handled correctly. + * + * @throws IOException + */ + @Test + public void testPDFBox3864() throws IOException + { + for (int i = 0; i < 256; i++) + { + String hex = String.format("FEFF%04X", i); + COSString cs1 = COSString.parseHex(hex); + COSString cs2 = new COSString(cs1.getString()); + assertEquals(cs1, cs2); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSBase.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSBase.java new file mode 100644 index 00000000000..7af0854512c --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSBase.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import junit.framework.TestCase; + +import java.io.IOException; + +/** + * Test class for {@link COSBase}. + */ +public abstract class TestCOSBase extends TestCase +{ + /** The COSBase abstraction of the object being tested. */ + protected COSBase testCOSBase; + + /** + * Tests getCOSObject() - tests that the underlying object is returned. + */ + public void testGetCOSObject() + { + assertEquals(testCOSBase, testCOSBase.getCOSObject()); + } + + /** + * Test accept() - tests the interface for visiting a document at the COS level. + */ + public abstract void testAccept() throws IOException; + + /** + * Tests isDirect() and setDirect() - tests the getter/setter methods. + */ + public void testIsSetDirect() + { + testCOSBase.setDirect(true); + assertTrue(testCOSBase.isDirect()); + testCOSBase.setDirect(false); + assertFalse(testCOSBase.isDirect()); + } + + /** + * A simple utility function to compare two byte arrays. + * @param byteArr1 the expected byte array + * @param byteArr2 the byte array being compared + */ + protected void testByteArrays(byte[] byteArr1, byte[] byteArr2) + { + assertEquals(byteArr1.length, byteArr1.length); + for (int i = 0; i < byteArr1.length; i++) + { + assertEquals(byteArr1[i], byteArr2[i]); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSFloat.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSFloat.java new file mode 100644 index 00000000000..3f4f497d6c2 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSFloat.java @@ -0,0 +1,339 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Random; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.pdfbox.pdfwriter.COSWriter; + +/** + * Tests {@link COSFloat}. + */ +public class TestCOSFloat extends TestCOSNumber +{ + @Override + public void setUp() + { + try + { + testCOSBase = COSNumber.get("1.1"); + } + catch (IOException e) + { + fail("Failed to create a COSNumber in setUp()"); + } + } + + /** + * Base class to run looped tests with float numbers. + * + * To use it, derive a class and just implement runTest(). Then either call + * runTests for a series of random and pseudorandom tests, or runTest to + * test with corner values. + */ + abstract class BaseTester + { + private int low = -100000; + private int high = 300000; + private int step = 20000; + + public void setLoop(int low, int high, int step) + { + this.low = low; + this.high = high; + this.step = step; + } + + // deterministic and non-deterministic test + public void runTests() + { + // deterministic test + loop(123456); + + // non-deterministic test + loop(System.currentTimeMillis()); + } + + // look through a series of pseudorandom tests influenced by a seed + private void loop(long seed) + { + Random rnd = new Random(seed); + for (int i = low; i < high; i += step) + { + float num = i * rnd.nextFloat(); + try + { + runTest(num); + } + catch (AssertionError a) + { + fail("num = " + num + ", seed = " + seed); + } + } + } + + abstract void runTest(float num); + + } + + /** + * Tests equals() - ensures that the Object.equals() contract is obeyed. + * These are tested over a range of arbitrary values to ensure Consistency, + * Reflexivity, Symmetry, Transitivity and non-nullity. + */ + public void testEquals() + { + new BaseTester() + { + @Override + void runTest(float num) + { + COSFloat test1 = new COSFloat(num); + COSFloat test2 = new COSFloat(num); + COSFloat test3 = new COSFloat(num); + // Reflexive (x == x) + assertTrue(test1.equals(test1)); + // Symmetric is preserved ( x==y then y==x) + assertTrue(test2.equals(test3)); + assertTrue(test1.equals(test2)); + // Transitive (if x==y && y==z then x==z) + assertTrue(test1.equals(test2)); + assertTrue(test2.equals(test3)); + assertTrue(test1.equals(test3)); + + float nf = Float.intBitsToFloat(Float.floatToIntBits(num) + 1); + COSFloat test4 = new COSFloat(nf); + assertFalse(test4.equals(test1)); + } + }.runTests(); + } + + class HashCodeTester extends BaseTester + { + + @Override + void runTest(float num) + { + COSFloat test1 = new COSFloat(num); + COSFloat test2 = new COSFloat(num); + assertEquals(test1.hashCode(), test2.hashCode()); + + float nf = Float.intBitsToFloat(Float.floatToIntBits(num) + 1); + COSFloat test3 = new COSFloat(nf); + assertFalse(test3.hashCode() == test1.hashCode()); + } + } + + /** + * Tests hashCode() - ensures that the Object.hashCode() contract is obeyed + * over a range of arbitrary values. + */ + public void testHashCode() + { + new HashCodeTester().runTests(); + } + + class FloatValueTester extends BaseTester + { + + @Override + void runTest(float num) + { + COSFloat testFloat = new COSFloat(num); + assertEquals(num, testFloat.floatValue()); + } + + } + + @Override + public void testFloatValue() + { + new FloatValueTester().runTests(); + } + + class DoubleValueTester extends BaseTester + { + + @Override + void runTest(float num) + { + COSFloat testFloat = new COSFloat(num); + // compare the string representation instead of the numeric values + // as the cast from float to double adds some more fraction digits + assertEquals(Float.toString(num), Double.toString(testFloat.doubleValue())); + } + + } + + @Override + public void testDoubleValue() + { + new DoubleValueTester().runTests(); + } + + class IntValueTester extends BaseTester + { + + @Override + void runTest(float num) + { + COSFloat testFloat = new COSFloat(num); + assertEquals((int) num, testFloat.intValue()); + } + + } + + @Override + public void testIntValue() + { + new IntValueTester().runTests(); + } + + class LongValueTester extends BaseTester + { + + @Override + void runTest(float num) + { + COSFloat testFloat = new COSFloat(num); + assertEquals((long) num, testFloat.longValue()); + } + + } + + @Override + public void testLongValue() + { + new LongValueTester().runTests(); + } + + class AcceptTester extends BaseTester + { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + COSWriter visitor = new COSWriter(outStream); + + @Override + void runTest(float num) + { + try + { + COSFloat cosFloat = new COSFloat(num); + cosFloat.accept(visitor); + assertEquals(floatToString(cosFloat.floatValue()), outStream.toString("ISO-8859-1")); + testByteArrays(floatToString(num).getBytes("ISO-8859-1"), outStream.toByteArray()); + outStream.reset(); + } + catch (IOException e) + { + fail("Failed to write " + num + " exception: " + e.getMessage()); + } + } + + } + + @Override + public void testAccept() + { + new AcceptTester().runTests(); + } + + class WritePDFTester extends BaseTester + { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + + WritePDFTester() + { + setLoop(-1000, 3000, 200); + } + + @Override + void runTest(float num) + { + try + { + COSFloat cosFloat = new COSFloat(num); + cosFloat.writePDF(outStream); + assertEquals(floatToString(cosFloat.floatValue()), outStream.toString("ISO-8859-1")); + assertEquals(floatToString(num), outStream.toString("ISO-8859-1")); + testByteArrays(floatToString(num).getBytes("ISO-8859-1"), outStream.toByteArray()); + outStream.reset(); + } + catch (IOException e) + { + fail("Failed to write " + num + " exception: " + e.getMessage()); + } + } + + } + + /** + * Tests writePDF() - this method takes an {@link java.io.OutputStream} and writes + * this object to it. + */ + public void testWritePDF() + { + WritePDFTester writePDFTester = new WritePDFTester(); + writePDFTester.runTests(); + + // test a corner case as described in PDFBOX-1778 + writePDFTester.runTest(0.000000000000000000000000000000001f); + } + + public void testDoubleNegative() throws IOException + { + // PDFBOX-4289 + COSFloat cosFloat = new COSFloat("--16.33"); + assertEquals(-16.33f, cosFloat.floatValue()); + } + + private String floatToString(float value) + { + // use a BigDecimal as intermediate state to avoid + // a floating point string representation of the float value + return removeTrailingNull(new BigDecimal(String.valueOf(value)).toPlainString()); + } + + private String removeTrailingNull(String value) + { + // remove fraction digit "0" only + if (value.indexOf('.') > -1 && !value.endsWith(".0")) + { + while (value.endsWith("0") && !value.endsWith(".0")) + { + value = value.substring(0,value.length()-1); + } + } + return value; + } + + /** + * This will get the suite of test that this class holds. + * + * @return All of the tests that this class holds. + */ + public static Test suite() + { + return new TestSuite(TestCOSFloat.class); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java new file mode 100644 index 00000000000..0731f934a94 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSInteger.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.pdfbox.pdfwriter.COSWriter; + +/** + * A test case for COSInteger + * + * @author Koch + */ +public class TestCOSInteger extends TestCOSNumber +{ + @Override + public void setUp() + { + try + { + testCOSBase = COSNumber.get("0"); + } + catch (IOException e) + { + fail("Failed to create a COSNumber in setUp()"); + } + } + + /** + * Tests equals() - ensures that the Object.equals() contract is obeyed. These are tested over + * a range of arbitrary values to ensure Consistency, Reflexivity, Symmetry, Transitivity and + * non-nullity. + */ + public void testEquals() + { + // Consistency + for (int i = -1000; i < 3000; i += 200) + { + COSInteger test1 = COSInteger.get(i); + COSInteger test2 = COSInteger.get(i); + COSInteger test3 = COSInteger.get(i); + // Reflexive (x == x) + assertTrue(test1.equals(test1)); + // Symmetric is preserved ( x==y then y===x) + assertTrue(test2.equals(test1)); + assertTrue(test1.equals(test2)); + // Transitive (if x==y && y==z then x===z) + assertTrue(test1.equals(test2)); + assertTrue(test2.equals(test3)); + assertTrue(test1.equals(test3)); + // Non-nullity + assertFalse(test1 == null); + assertFalse(test2 == null); + assertFalse(test3 == null); + + COSInteger test4 = COSInteger.get(i + 1); + assertFalse(test4.equals(test1)); + } + } + + /** + * Tests hashCode() - ensures that the Object.hashCode() contract is obeyed over a range of + * arbitrary values. + */ + public void testHashCode() + { + for (int i = -1000; i < 3000; i += 200) + { + COSInteger test1 = COSInteger.get(i); + COSInteger test2 = COSInteger.get(i); + assertEquals(test1.hashCode(), test2.hashCode()); + + COSInteger test3 = COSInteger.get(i + 1); + assertFalse(test3.hashCode() == test1.hashCode()); + } + } + + @Override + public void testFloatValue() + { + for (int i = -1000; i < 3000; i += 200) + { + assertEquals((float) i, COSInteger.get(i).floatValue()); + } + } + + @Override + public void testDoubleValue() + { + for (int i = -1000; i < 3000; i += 200) + { + assertEquals((double) i, COSInteger.get(i).doubleValue()); + } + } + + @Override + public void testIntValue() + { + for (int i = -1000; i < 3000; i += 200) + { + assertEquals(i, COSInteger.get(i).intValue()); + } + } + + @Override + public void testLongValue() + { + for (int i = -1000; i < 3000; i += 200) + { + assertEquals((long) i, COSInteger.get(i).longValue()); + } + } + + @Override + public void testAccept() + { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + COSWriter visitor = new COSWriter(outStream); + int index = 0; + try + { + for (int i = -1000; i < 3000; i += 200) + { + index = i; + COSInteger cosInt = COSInteger.get(i); + cosInt.accept(visitor); + testByteArrays(String.valueOf(i).getBytes("ISO-8859-1"), outStream.toByteArray()); + outStream.reset(); + } + } + catch (Exception e) + { + fail("Failed to write " + index + " exception: " + e.getMessage()); + } + } + + /** + * Tests writePDF() - this method takes an {@link java.io.OutputStream} and writes this object to it. + */ + public void testWritePDF() + { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + int index = 0; + try + { + for (int i = -1000; i < 3000; i += 200) + { + index = i; + COSInteger cosInt = COSInteger.get(i); + cosInt.writePDF(outStream); + testByteArrays(String.valueOf(i).getBytes("ISO-8859-1"), outStream.toByteArray()); + outStream.reset(); + } + } + catch (Exception e) + { + fail("Failed to write " + index + " exception: " + e.getMessage()); + } + } + + /** + * This will get the suite of test that this class holds. + * + * @return All of the tests that this class holds. + */ + public static Test suite() + { + return new TestSuite(TestCOSInteger.class); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSName.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSName.java new file mode 100644 index 00000000000..07aa762ad20 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSName.java @@ -0,0 +1,54 @@ +/* + * Copyright 2018 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.junit.Assert; +import org.junit.Test; + +public class TestCOSName +{ + /** + * PDFBOX-4076: Check that characters outside of US_ASCII are not replaced with "?". + * + * @throws IOException + */ + @Test + public void PDFBox4076() throws IOException + { + String special = "中国你好!"; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + try (PDDocument document = new PDDocument()) + { + PDPage page = new PDPage(); + document.addPage(page); + document.getDocumentCatalog().getCOSObject().setString(COSName.getPDFName(special), special); + + document.save(baos); + } + try (PDDocument document = PDDocument.load(baos.toByteArray())) + { + COSDictionary catalogDict = document.getDocumentCatalog().getCOSObject(); + Assert.assertTrue(catalogDict.containsKey(special)); + Assert.assertEquals(special, catalogDict.getString(special)); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java new file mode 100644 index 00000000000..86d4b084b0c --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSNumber.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import java.io.IOException; + +/** + * Test class for {@link COSNumber} + */ +public abstract class TestCOSNumber extends TestCOSBase +{ + /** + * Test floatValue() - test that the correct float value is returned. + */ + public abstract void testFloatValue(); + + /** + * Test doubleValue() - test that the correct double value is returned. + */ + public abstract void testDoubleValue(); + + /** + * Test intValue() - test that the correct int value is returned. + */ + public abstract void testIntValue(); + + /** + * Test longValue() - test that the correct long value is returned. + */ + public abstract void testLongValue(); + + /** + * Tests get() - tests a static constructor for COSNumber classes. + */ + public void testGet() + { + try + { + // Ensure the basic static numbers are recognized + assertEquals(COSInteger.ZERO, COSNumber.get("0")); + assertEquals(COSInteger.ONE, COSNumber.get("1")); + assertEquals(COSInteger.TWO, COSNumber.get("2")); + assertEquals(COSInteger.THREE, COSNumber.get("3")); + // Test some arbitrary ints + assertEquals(COSInteger.get(100), COSNumber.get("100")); + assertEquals(COSInteger.get(256), COSNumber.get("256")); + assertEquals(COSInteger.get(-1000), COSNumber.get("-1000")); + assertEquals(COSInteger.get(2000), COSNumber.get("+2000")); + // Some arbitrary floats + assertEquals(new COSFloat(1.1f), COSNumber.get("1.1")); + assertEquals(new COSFloat(100f), COSNumber.get("100.0")); + assertEquals(new COSFloat(-100.001f), COSNumber.get("-100.001")); + // according to the specs the exponential shall not be used + // but obviously there some + assertNotNull(COSNumber.get("-2e-006")); + assertNotNull(COSNumber.get("-8e+05")); + try + { + assertEquals("Null Value...", COSNumber.get(null)); + fail("Failed to throw a NullPointerException"); + } + catch (NullPointerException e) + { + // PASS + } + + } + catch (IOException e) + { + fail("Failed to convert a number " + e.getMessage()); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSStream.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSStream.java new file mode 100644 index 00000000000..d7f3ab4cf35 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSStream.java @@ -0,0 +1,184 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; + +import junit.framework.TestCase; + +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.io.IOUtils; + +public class TestCOSStream extends TestCase +{ + /** + * Tests encoding of a stream without any filter applied. + * + * @throws IOException + */ + public void testUncompressedStreamEncode() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + COSStream stream = createStream(testString, null); + validateEncoded(stream, testString); + } + + /** + * Tests decoding of a stream without any filter applied. + * + * @throws IOException + */ + public void testUncompressedStreamDecode() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + COSStream stream = createStream(testString, null); + validateDecoded(stream, testString); + } + + /** + * Tests encoding of a stream with one filter applied. + * + * @throws IOException + */ + public void testCompressedStream1Encode() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + byte[] testStringEncoded = encodeData(testString, COSName.FLATE_DECODE); + COSStream stream = createStream(testString, COSName.FLATE_DECODE); + validateEncoded(stream, testStringEncoded); + } + + /** + * Tests decoding of a stream with one filter applied. + * + * @throws IOException + */ + public void testCompressedStream1Decode() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + byte[] testStringEncoded = encodeData(testString, COSName.FLATE_DECODE); + COSStream stream = new COSStream(); + + try (OutputStream output = stream.createRawOutputStream()) + { + output.write(testStringEncoded); + } + + stream.setItem(COSName.FILTER, COSName.FLATE_DECODE); + validateDecoded(stream, testString); + } + + /** + * Tests encoding of a stream with 2 filters applied. + * + * @throws IOException + */ + public void testCompressedStream2Encode() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + byte[] testStringEncoded = encodeData(testString, COSName.FLATE_DECODE); + testStringEncoded = encodeData(testStringEncoded, COSName.ASCII85_DECODE); + + COSArray filters = new COSArray(); + filters.add(COSName.ASCII85_DECODE); + filters.add(COSName.FLATE_DECODE); + + COSStream stream = createStream(testString, filters); + validateEncoded(stream, testStringEncoded); + } + + /** + * Tests decoding of a stream with 2 filters applied. + * + * @throws IOException + */ + public void testCompressedStream2Decode() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + byte[] testStringEncoded = encodeData(testString, COSName.FLATE_DECODE); + testStringEncoded = encodeData(testStringEncoded, COSName.ASCII85_DECODE); + COSStream stream = new COSStream(); + + COSArray filters = new COSArray(); + filters.add(COSName.ASCII85_DECODE); + filters.add(COSName.FLATE_DECODE); + stream.setItem(COSName.FILTER, filters); + + try (OutputStream output = stream.createRawOutputStream()) + { + output.write(testStringEncoded); + } + + validateDecoded(stream, testString); + } + + /** + * Tests tests that encoding is done correctly even if the the stream is closed twice. + * Closeable.close() allows streams to be closed multiple times. The second and subsequent + * close() calls should have no effect. + * + * @throws IOException + */ + public void testCompressedStreamDoubleClose() throws IOException + { + byte[] testString = "This is a test string to be used as input for TestCOSStream".getBytes("ASCII"); + byte[] testStringEncoded = encodeData(testString, COSName.FLATE_DECODE); + COSStream stream = new COSStream(); + OutputStream output = stream.createOutputStream(COSName.FLATE_DECODE); + output.write(testString); + output.close(); + output.close(); + validateEncoded(stream, testStringEncoded); + } + + private byte[] encodeData(byte[] original, COSName filter) throws IOException + { + Filter encodingFilter = FilterFactory.INSTANCE.getFilter(filter); + ByteArrayOutputStream encoded = new ByteArrayOutputStream(); + encodingFilter.encode(new ByteArrayInputStream(original), encoded, new COSDictionary(), 0); + return encoded.toByteArray(); + } + + private COSStream createStream(byte[] testString, COSBase filters) throws IOException + { + COSStream stream = new COSStream(); + try (OutputStream output = stream.createOutputStream(filters)) + { + output.write(testString); + } + return stream; + } + + private void validateEncoded(COSStream stream, byte[] expected) throws IOException + { + byte[] decoded = IOUtils.toByteArray(stream.createRawInputStream()); + stream.close(); + assertTrue("Encoded data doesn't match input", Arrays.equals(expected, decoded)); + } + + private void validateDecoded(COSStream stream, byte[] expected) throws IOException + { + byte[] encoded = IOUtils.toByteArray(stream.createInputStream()); + stream.close(); + assertTrue("Decoded data doesn't match input", Arrays.equals(expected, encoded)); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSString.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSString.java new file mode 100644 index 00000000000..e2b8c255971 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSString.java @@ -0,0 +1,367 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.cos; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Arrays; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.pdfbox.pdfwriter.COSWriter; + +/** + * This will test all of the filters in the PDFBox system. + * + * Ben Litchfield + */ +public class TestCOSString extends TestCOSBase +{ + private static final String ESC_CHAR_STRING = + "( test#some) escaped< \\chars>!~1239857 "; + private static final String ESC_CHAR_STRING_PDF_FORMAT = + "\\( test#some\\) escaped< \\\\chars>!~1239857 "; + + /** + * This will get the suite of test that this class holds. + * + * @return All of the tests that this class holds. + */ + public static Test suite() + { + return new TestSuite(TestCOSString.class); + } + + @Override + public void setUp() + { + testCOSBase = new COSString("test cos string"); + } + + /** + * infamous main method. + * + * @param args The command line arguments. + */ + public static void main(String[] args) + { + String[] arg = {TestCOSString.class.getName()}; + junit.textui.TestRunner.main(arg); + } + + /** + * Test setForceHexForm() and setForceLiteralForm() - tests these two methods do enforce the + * different String output forms within PDF. + */ + public void testSetForceHexLiteralForm() + { + String inputString = "Test with a text and a few numbers 1, 2 and 3"; + String pdfHex = "<" + createHex(inputString) + ">"; + COSString cosStr = new COSString(inputString); + cosStr.setForceHexForm(true); + writePDFTests(pdfHex, cosStr); + + COSString escStr = new COSString(ESC_CHAR_STRING); + writePDFTests("(" + ESC_CHAR_STRING_PDF_FORMAT + ")", escStr); + escStr.setForceHexForm(true); + // Escape characters not escaped in hex version + writePDFTests("<" + createHex(ESC_CHAR_STRING) + ">", escStr); + } + + /** + * Helper method for testing writePDF(). + * + * @param expected the String expected when writePDF() is invoked + * @param testSubj the test subject + */ + private void writePDFTests(String expected, COSString testSubj) + { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + try + { + COSWriter.writeString(testSubj, outStream); + } + catch (IOException e) + { + fail("IOException: " + e.getMessage()); + } + assertEquals(expected, outStream.toString()); + } + + /** + * Test parseHex() - tests that the proper String is created from a hex string input. + */ + public void testFromHex() + { + String expected = "Quick and simple test"; + String hexForm = createHex(expected); + try + { + COSString test1 = COSString.parseHex(hexForm); + writePDFTests("(" + expected + ")", test1); + COSString test2 = COSString.parseHex(createHex(ESC_CHAR_STRING)); + writePDFTests("(" + ESC_CHAR_STRING_PDF_FORMAT + ")", test2); + } + catch (IOException e) + { + fail("IOException thrown: " + e.getMessage()); + } + try + { + COSString.parseHex(hexForm + "xx"); + fail("Should have thrown an IOException here"); + } + catch (IOException e) + { + // PASS + } + } + + private String createHex(String str) + { + StringBuilder sb = new StringBuilder(); + for (char c : str.toCharArray()) + { + sb.append(Integer.toString(c, 16)); + } + return sb.toString().toUpperCase(); + } + + /** + * Tests getHex() - ensure the hex String returned is properly formatted. + */ + public void testGetHex() + { + String expected = "Test subject for testing getHex"; + COSString test1 = new COSString(expected); + String hexForm = createHex(expected); + assertEquals(hexForm, test1.toHexString()); + COSString escCS = new COSString(ESC_CHAR_STRING); + // Not sure whether the escaped characters should be escaped or not, presumably since + // writePDF() gives you the proper formatted text, getHex() should ONLY convert to hex. + assertEquals(createHex(ESC_CHAR_STRING), escCS.toHexString()); + } + + /** + * Test testGetString() - ensure getString() are returned in the correct format. + */ + public void testGetString() + { + try + { + String testStr = "Test subject for getString()"; + COSString test1 = new COSString(testStr); + assertEquals(testStr, test1.getString()); + + COSString hexStr = COSString.parseHex(createHex(testStr)); + assertEquals(testStr, hexStr.getString()); + + COSString escapedString = new COSString(ESC_CHAR_STRING); + assertEquals(ESC_CHAR_STRING, escapedString.getString()); + + testStr = "Line1\nLine2\nLine3\n"; + COSString lineFeedString = new COSString(testStr); + assertEquals(testStr, lineFeedString.getString()); + } + catch (IOException e) + { + fail("IOException thrown: " + e.getMessage()); + } + } + + /** + * Test getBytes() - again not much to test, just ensure the proper byte array is returned. + */ + public void testGetBytes() + { + COSString str = new COSString(ESC_CHAR_STRING); + testByteArrays(ESC_CHAR_STRING.getBytes(), str.getBytes()); + } + + /** + * Tests writePDF() - tests that the string is in PDF format. + */ + public void testWritePDF() + { + // This has been tested quite thorougly above but do a couple tests anyway + COSString testSubj = new COSString(ESC_CHAR_STRING); + writePDFTests("(" + ESC_CHAR_STRING_PDF_FORMAT + ")", testSubj); + String textString = "This is just an arbitrary piece of text for testing"; + COSString testSubj2 = new COSString(textString); + writePDFTests("(" + textString + ")", testSubj2); + } + + /** + * This will test all of the filters in the system. + * + * @throws IOException If there is an exception while encoding. + */ + public void testUnicode() throws IOException + { + String theString = "\u4e16"; + COSString string = new COSString(theString); + assertTrue(string.getString().equals(theString)); + + String textAscii = "This is some regular text. It should all be expressable in ASCII"; + /** En français où les choses sont accentués. En español, así */ + String text8Bit = "En fran\u00e7ais o\u00f9 les choses sont accentu\u00e9s. En espa\u00f1ol, as\u00ed"; + /** をクリックしてく */ + String textHighBits = "\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f"; + + // Testing the getString method + COSString stringAscii = new COSString( textAscii ); + assertEquals( stringAscii.getString(), textAscii ); + + COSString string8Bit = new COSString( text8Bit ); + assertEquals( string8Bit.getString(), text8Bit ); + + COSString stringHighBits = new COSString( textHighBits ); + assertEquals( stringHighBits.getString(), textHighBits ); + + + // Testing the getBytes method + // The first two strings should be stored as ISO-8859-1 because they only contain chars in the range 0..255 + assertEquals(textAscii, new String(stringAscii.getBytes(), "ISO-8859-1")); + // likewise for the 8bit characters. + assertEquals(text8Bit, new String(string8Bit.getBytes(), "ISO-8859-1")); + + // The japanese text contains high bits so must be stored as big endian UTF-16 + assertEquals(textHighBits, new String(stringHighBits.getBytes(), "UnicodeBig")); + + + // Test the writePDF method to ensure that the Strings are correct when written into PDF. + ByteArrayOutputStream out = new ByteArrayOutputStream(); + COSWriter.writeString(stringAscii, out); + assertEquals("(" + textAscii + ")", new String(out.toByteArray(), "ASCII")); + + out.reset(); + COSWriter.writeString(string8Bit, out); + StringBuffer hex = new StringBuffer(); + for(char c : text8Bit.toCharArray()) + { + hex.append( Integer.toHexString(c).toUpperCase() ); + } + assertEquals("<"+hex.toString()+">", new String(out.toByteArray(), "ASCII")); + + out.reset(); + COSWriter.writeString(stringHighBits, out); + hex = new StringBuffer(); + hex.append("FEFF"); // Byte Order Mark + for(char c : textHighBits.toCharArray()) + { + hex.append( Integer.toHexString(c).toUpperCase() ); + } + assertEquals("<"+hex.toString()+">", new String(out.toByteArray(), "ASCII")); + } + + @Override + public void testAccept() throws IOException + { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + ICOSVisitor visitor = new COSWriter(outStream); + COSString testSubj = new COSString(ESC_CHAR_STRING); + testSubj.accept(visitor); + assertEquals("(" + ESC_CHAR_STRING_PDF_FORMAT + ")", outStream.toString()); + outStream.reset(); + testSubj.setForceHexForm(true); + testSubj.accept(visitor); + assertEquals("<" + createHex(ESC_CHAR_STRING) + ">", outStream.toString()); + } + + /** + * Tests equals(Object) - ensure that the Object.equals() contract is obeyed. + */ + public void testEquals() + { + // Check all these several times for consistency + for (int i = 0; i < 10; i++) + { + // Reflexive + COSString x1 = new COSString("Test"); + assertTrue(x1.equals(x1)); + + // Symmetry i.e. if x == y then y == x + COSString y1 = new COSString("Test"); + assertTrue(x1.equals(y1)); + assertTrue(y1.equals(x1)); + COSString x2 = new COSString("Test"); + x2.setForceHexForm(true); + // also if x != y then y != x + assertFalse(x1.equals(x2)); + assertFalse(x2.equals(x1)); + + // Transitive if x == y && y == z then x == z + COSString z1 = new COSString("Test"); + assertTrue(x1.equals(y1)); + assertTrue(y1.equals(z1)); + assertTrue(x1.equals(z1)); + // Test the negative as well if x1 == y1 && y1 != x2 then x1 != x2 + assertTrue(x1.equals(y1)); + assertFalse(y1.equals(x2)); + assertFalse(x1.equals(x2)); + + // Non-nullity + assertFalse(x1 == null); + assertFalse(y1 == null); + assertFalse(z1 == null); + assertFalse(x2 == null); + } + } + + /** + * Test hashCode() - tests that the Object.hashCode() contract is obeyed. + */ + public void testHashCode() + { + COSString str1 = new COSString("Test1"); + COSString str2 = new COSString("Test2"); + assertFalse(str1.hashCode() == str2.hashCode()); + COSString str3 = new COSString("Test1"); + assertTrue(str1.hashCode() == str3.hashCode()); + str3.setForceHexForm(true); + assertFalse(str1.hashCode() == str3.hashCode()); + } + + /** + * Test testCompareFromHexString() - tests that Strings created from hex + * compare correctly (PDFBOX-2401) + */ + public void testCompareFromHexString() throws IOException + { + COSString test1 = COSString.parseHex("000000FF000000"); + COSString test2 = COSString.parseHex("000000FF00FFFF"); + assertEquals(test1, test1); + assertEquals(test2, test2); + assertFalse(test1.toHexString().equals(test2.toHexString())); + assertFalse(Arrays.equals(test1.getBytes(), test2.getBytes())); + assertFalse(test1.equals(test2)); + assertFalse(test2.equals(test1)); + assertFalse(test1.getString().equals(test2.getString())); + } + + /** + * PDFBOX-3881: Test that if String has only the BOM, that it be an empty string. + * + * @throws IOException + */ + public void testEmptyStringWithBOM() throws IOException + { + assertTrue(COSString.parseHex("FEFF").getString().isEmpty()); + assertTrue(COSString.parseHex("FFFE").getString().isEmpty()); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSUpdateInfo.java b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSUpdateInfo.java new file mode 100644 index 00000000000..7522cfa7ea8 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/cos/TestCOSUpdateInfo.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.cos; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +import org.junit.Test; + +/** + * Test class for {@link COSUpdateInfo}. + */ +public class TestCOSUpdateInfo +{ + + /** + * Tests isNeedToBeUpdate() and setNeedToBeUpdate() - tests the getter/setter methods. + */ + @Test + public void testIsSetNeedToBeUpdate() + { + // COSDictionary + COSUpdateInfo testCOSDictionary = new COSDictionary(); + testCOSDictionary.setNeedToBeUpdated(true); + assertTrue(testCOSDictionary.isNeedToBeUpdated()); + testCOSDictionary.setNeedToBeUpdated(false); + assertFalse(testCOSDictionary.isNeedToBeUpdated()); + + // COSObject + COSUpdateInfo testCOSObject; + testCOSObject = new COSObject(null); + testCOSObject.setNeedToBeUpdated(true); + assertTrue(testCOSObject.isNeedToBeUpdated()); + testCOSObject.setNeedToBeUpdated(false); + assertFalse(testCOSObject.isNeedToBeUpdated()); + } + +} diff --git a/src/test/pdfbox/cos/package.html b/pdfbox/src/test/java/org/apache/pdfbox/cos/package.html similarity index 100% rename from src/test/pdfbox/cos/package.html rename to pdfbox/src/test/java/org/apache/pdfbox/cos/package.html diff --git a/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java b/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java new file mode 100644 index 00000000000..0cbd9a75c98 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java @@ -0,0 +1,321 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.encryption; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Collection; + +import javax.crypto.Cipher; + +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; +import org.apache.pdfbox.pdmodel.encryption.PublicKeyProtectionPolicy; +import org.apache.pdfbox.pdmodel.encryption.PublicKeyRecipient; +import org.apache.pdfbox.text.PDFTextStripper; + +import org.junit.After; +import org.junit.Assert; +import static org.junit.Assert.fail; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +/** + * Tests for public key encryption. These tests are not perfect - to be sure, encrypt a file by + * using a certificate exported from your digital id in Adobe Reader, and then open that file with + * Adobe Reader. Do this with every key length. + * + * @author Ben Litchfield + */ +@RunWith(Parameterized.class) +public class TestPublicKeyEncryption +{ + private final File testResultsDir = new File("target/test-output/crypto"); + + private AccessPermission permission1; + private AccessPermission permission2; + + private PublicKeyRecipient recipient1; + private PublicKeyRecipient recipient2; + + private String keyStore1; + private String keyStore2; + + private String password1; + private String password2; + + /** + * Simple test document that gets encrypted by the test cases. + */ + private PDDocument document; + + private String text; + private String producer; + + @Parameterized.Parameter + public int keyLength; + + /** + * Values for keyLength test parameter. + * + * @return + */ + @Parameterized.Parameters + public static Collection keyLengths() + { + return Arrays.asList(40, 128, 256); + } + + public TestPublicKeyEncryption() + { + testResultsDir.mkdirs(); + } + + /** + * {@inheritDoc} + */ + @Before + public void setUp() throws Exception + { + if (Cipher.getMaxAllowedKeyLength("AES") != Integer.MAX_VALUE) + { + // we need strong encryption for these tests + fail("JCE unlimited strength jurisdiction policy files are not installed"); + } + + permission1 = new AccessPermission(); + permission1.setCanAssembleDocument(false); + permission1.setCanExtractContent(false); + permission1.setCanExtractForAccessibility(true); + permission1.setCanFillInForm(false); + permission1.setCanModify(false); + permission1.setCanModifyAnnotations(false); + permission1.setCanPrint(false); + permission1.setCanPrintDegraded(false); + + permission2 = new AccessPermission(); + permission2.setCanAssembleDocument(false); + permission2.setCanExtractContent(false); + permission2.setCanExtractForAccessibility(true); + permission2.setCanFillInForm(false); + permission2.setCanModify(false); + permission2.setCanModifyAnnotations(false); + permission2.setCanPrint(true); // it is true now ! + permission2.setCanPrintDegraded(false); + + recipient1 = getRecipient("test1.der", permission1); + recipient2 = getRecipient("test2.der", permission2); + + password1 = "test1"; + password2 = "test2"; + + keyStore1 = "test1.pfx"; + keyStore2 = "test2.pfx"; + + document = PDDocument.load(new File(this.getClass().getResource("test.pdf").toURI())); + text = new PDFTextStripper().getText(document); + producer = document.getDocumentInformation().getProducer(); + document.setVersion(1.7f); + } + + /** + * {@inheritDoc} + */ + @After + public void tearDown() throws Exception + { + document.close(); + } + + /** + * Protect a document with certificate 1 and try to open it with + * certificate 2 and catch the exception. + * + * @throws Exception If there is an unexpected error during the test. + */ + @Test + public void testProtectionError() throws Exception + { + PublicKeyProtectionPolicy policy = new PublicKeyProtectionPolicy(); + policy.addRecipient(recipient1); + policy.setEncryptionKeyLength(keyLength); + document.protect(policy); + + PDDocument encryptedDoc = null; + try + { + File file = save("testProtectionError"); + encryptedDoc = reload(file, password2, getKeyStore(keyStore2)); + Assert.assertTrue(encryptedDoc.isEncrypted()); + fail("No exception when using an incorrect decryption key"); + } + catch (IOException ex) + { + String msg = ex.getMessage(); + Assert.assertTrue("not the expected exception: " + msg, + msg.contains("serial-#: rid 2 vs. cert 3")); + } + finally + { + if (encryptedDoc != null) + { + encryptedDoc.close(); + } + } + } + + + /** + * Protect a document with a public certificate and try to open it + * with the corresponding private certificate. + * + * @throws Exception If there is an unexpected error during the test. + */ + @Test + public void testProtection() throws Exception + { + PublicKeyProtectionPolicy policy = new PublicKeyProtectionPolicy(); + policy.addRecipient(recipient1); + policy.setEncryptionKeyLength(keyLength); + document.protect(policy); + + File file = save("testProtection"); + try (PDDocument encryptedDoc = reload(file, password1, getKeyStore(keyStore1))) + { + Assert.assertTrue(encryptedDoc.isEncrypted()); + + AccessPermission permission = encryptedDoc.getCurrentAccessPermission(); + Assert.assertFalse(permission.canAssembleDocument()); + Assert.assertFalse(permission.canExtractContent()); + Assert.assertTrue(permission.canExtractForAccessibility()); + Assert.assertFalse(permission.canFillInForm()); + Assert.assertFalse(permission.canModify()); + Assert.assertFalse(permission.canModifyAnnotations()); + Assert.assertFalse(permission.canPrint()); + Assert.assertFalse(permission.canPrintDegraded()); + } + } + + + /** + * Protect the document for 2 recipients and try to open it. + * + * @throws Exception If there is an error during the test. + */ + @Test + public void testMultipleRecipients() throws Exception + { + PublicKeyProtectionPolicy policy = new PublicKeyProtectionPolicy(); + policy.addRecipient(recipient1); + policy.addRecipient(recipient2); + policy.setEncryptionKeyLength(keyLength); + document.protect(policy); + + // open first time + File file = save("testMultipleRecipients"); + try (PDDocument encryptedDoc1 = reload(file, password1, getKeyStore(keyStore1))) + { + AccessPermission permission = encryptedDoc1.getCurrentAccessPermission(); + Assert.assertFalse(permission.canAssembleDocument()); + Assert.assertFalse(permission.canExtractContent()); + Assert.assertTrue(permission.canExtractForAccessibility()); + Assert.assertFalse(permission.canFillInForm()); + Assert.assertFalse(permission.canModify()); + Assert.assertFalse(permission.canModifyAnnotations()); + Assert.assertFalse(permission.canPrint()); + Assert.assertFalse(permission.canPrintDegraded()); + } + + // open second time + try (PDDocument encryptedDoc2 = reload(file, password2, getKeyStore(keyStore2))) + { + AccessPermission permission = encryptedDoc2.getCurrentAccessPermission(); + Assert.assertFalse(permission.canAssembleDocument()); + Assert.assertFalse(permission.canExtractContent()); + Assert.assertTrue(permission.canExtractForAccessibility()); + Assert.assertFalse(permission.canFillInForm()); + Assert.assertFalse(permission.canModify()); + Assert.assertFalse(permission.canModifyAnnotations()); + Assert.assertTrue(permission.canPrint()); + Assert.assertFalse(permission.canPrintDegraded()); + } + } + + /** + * Reloads the given document from a file and check some contents. + * + * @param file input file + * @param decryptionPassword password to be used to decrypt the doc + * @param keyStore password to be used to decrypt the doc + * @return reloaded document + * @throws Exception if + */ + private PDDocument reload(File file, String decryptionPassword, InputStream keyStore) + throws IOException, NoSuchAlgorithmException + { + PDDocument doc2 = PDDocument.load(file, decryptionPassword, + keyStore, null, MemoryUsageSetting.setupMainMemoryOnly()); + Assert.assertEquals("Extracted text is different", + text, + new PDFTextStripper().getText(doc2)); + Assert.assertEquals("Producer is different", + producer, + doc2.getDocumentInformation().getProducer()); + return doc2; + } + + /** + * Returns a recipient specification with the given access permissions + * and an X.509 certificate read from the given classpath resource. + * + * @param certificate X.509 certificate resource, relative to this class + * @param permission access permissions + * @return recipient specification + * @throws Exception if the certificate could not be read + */ + private PublicKeyRecipient getRecipient(String certificate, AccessPermission permission) throws Exception + { + try (InputStream input = TestPublicKeyEncryption.class.getResourceAsStream(certificate)) + { + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + PublicKeyRecipient recipient = new PublicKeyRecipient(); + recipient.setPermission(permission); + recipient.setX509((X509Certificate) factory.generateCertificate(input)); + return recipient; + } + } + + private InputStream getKeyStore(String name) + { + return TestPublicKeyEncryption.class.getResourceAsStream(name); + } + + private File save(String name) throws IOException + { + File file = new File(testResultsDir, name + "-" + keyLength + "bit.pdf"); + document.save(file); + return file; + } +} \ No newline at end of file diff --git a/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestSymmetricKeyEncryption.java b/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestSymmetricKeyEncryption.java new file mode 100644 index 00000000000..6af1a0df4c7 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestSymmetricKeyEncryption.java @@ -0,0 +1,480 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.encryption; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import javax.crypto.Cipher; +import junit.framework.TestCase; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; +import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; +import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; +import org.apache.pdfbox.pdmodel.encryption.AccessPermission; +import org.apache.pdfbox.pdmodel.encryption.PDEncryption; +import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy; +import org.apache.pdfbox.pdmodel.encryption.StandardSecurityHandler; +import org.apache.pdfbox.pdmodel.graphics.image.ValidateXImage; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.util.Charsets; +import org.junit.Assert; + +/** + * Tests for symmetric key encryption. + * + * IMPORTANT! When making changes in the encryption / decryption methods, do + * also check whether the six generated encrypted files (to be found in + * pdfbox/target/test-output/crypto and named *encrypted.pdf) can be opened with + * Adobe Reader by providing the owner password and the user password. + * + * @author Ralf Hauser + * @author Tilman Hausherr + * + */ +public class TestSymmetricKeyEncryption extends TestCase +{ + /** + * Logger instance. + */ + private static final Log LOG = LogFactory.getLog(TestSymmetricKeyEncryption.class); + + private final File testResultsDir = new File("target/test-output/crypto"); + + private AccessPermission permission; + + static final String USERPASSWORD = "1234567890abcdefghijk1234567890abcdefghijk"; + static final String OWNERPASSWORD = "abcdefghijk1234567890abcdefghijk1234567890"; + + /** + * {@inheritDoc} + */ + @Override + protected void setUp() throws Exception + { + testResultsDir.mkdirs(); + + if (Cipher.getMaxAllowedKeyLength("AES") != Integer.MAX_VALUE) + { + // we need strong encryption for these tests + fail("JCE unlimited strength jurisdiction policy files are not installed"); + } + + permission = new AccessPermission(); + permission.setCanAssembleDocument(false); + permission.setCanExtractContent(false); + permission.setCanExtractForAccessibility(true); + permission.setCanFillInForm(false); + permission.setCanModify(false); + permission.setCanModifyAnnotations(false); + permission.setCanPrint(true); + permission.setCanPrintDegraded(false); + permission.setReadOnly(); + } + + /** + * Test that permissions work as intended: the user psw ("user") is enough + * to open the PDF with possibly restricted rights, the owner psw ("owner") + * gives full permissions. The 3 files of this test were created by Maruan + * Sahyoun, NOT with PDFBox, but with Adobe Acrobat to ensure "the gold + * standard". The restricted permissions prevent printing and text + * extraction. In the 128 and 256 bit encrypted files, AssembleDocument, + * ExtractForAccessibility and PrintDegraded are also disabled. + */ + public void testPermissions() throws Exception + { + AccessPermission fullAP = new AccessPermission(); + AccessPermission restrAP = new AccessPermission(); + restrAP.setCanPrint(false); + restrAP.setCanExtractContent(false); + restrAP.setCanModify(false); + + byte[] inputFileAsByteArray = getFileResourceAsByteArray("PasswordSample-40bit.pdf"); + checkPerms(inputFileAsByteArray, "owner", fullAP); + checkPerms(inputFileAsByteArray, "user", restrAP); + try + { + checkPerms(inputFileAsByteArray, "", null); + fail("wrong password not detected"); + } + catch (IOException ex) + { + assertEquals("Cannot decrypt PDF, the password is incorrect", ex.getMessage()); + } + + restrAP.setCanAssembleDocument(false); + restrAP.setCanExtractForAccessibility(false); + restrAP.setCanPrintDegraded(false); + + inputFileAsByteArray = getFileResourceAsByteArray("PasswordSample-128bit.pdf"); + checkPerms(inputFileAsByteArray, "owner", fullAP); + checkPerms(inputFileAsByteArray, "user", restrAP); + try + { + checkPerms(inputFileAsByteArray, "", null); + fail("wrong password not detected"); + } + catch (IOException ex) + { + assertEquals("Cannot decrypt PDF, the password is incorrect", ex.getMessage()); + } + + inputFileAsByteArray = getFileResourceAsByteArray("PasswordSample-256bit.pdf"); + checkPerms(inputFileAsByteArray, "owner", fullAP); + checkPerms(inputFileAsByteArray, "user", restrAP); + try + { + checkPerms(inputFileAsByteArray, "", null); + fail("wrong password not detected"); + } + catch (IOException ex) + { + assertEquals("Cannot decrypt PDF, the password is incorrect", ex.getMessage()); + } + } + + private void checkPerms(byte[] inputFileAsByteArray, String password, + AccessPermission expectedPermissions) throws IOException + { + PDDocument doc = PDDocument.load(inputFileAsByteArray, password); + + AccessPermission currentAccessPermission = doc.getCurrentAccessPermission(); + + // check permissions + assertEquals(expectedPermissions.isOwnerPermission(), currentAccessPermission.isOwnerPermission()); + if (!expectedPermissions.isOwnerPermission()) + { + assertEquals(true, currentAccessPermission.isReadOnly()); + } + assertEquals(expectedPermissions.canAssembleDocument(), currentAccessPermission.canAssembleDocument()); + assertEquals(expectedPermissions.canExtractContent(), currentAccessPermission.canExtractContent()); + assertEquals(expectedPermissions.canExtractForAccessibility(), currentAccessPermission.canExtractForAccessibility()); + assertEquals(expectedPermissions.canFillInForm(), currentAccessPermission.canFillInForm()); + assertEquals(expectedPermissions.canModify(), currentAccessPermission.canModify()); + assertEquals(expectedPermissions.canModifyAnnotations(), currentAccessPermission.canModifyAnnotations()); + assertEquals(expectedPermissions.canPrint(), currentAccessPermission.canPrint()); + assertEquals(expectedPermissions.canPrintDegraded(), currentAccessPermission.canPrintDegraded()); + + new PDFRenderer(doc).renderImage(0); + + doc.close(); + } + + /** + * Protect a document with a key and try to reopen it with that key and compare. + * + * @throws Exception If there is an unexpected error during the test. + */ + public void testProtection() throws Exception + { + byte[] inputFileAsByteArray = getFileResourceAsByteArray("Acroform-PDFBOX-2333.pdf"); + int sizePriorToEncryption = inputFileAsByteArray.length; + + testSymmEncrForKeySize(40, false, sizePriorToEncryption, inputFileAsByteArray, + USERPASSWORD, OWNERPASSWORD, permission); + + testSymmEncrForKeySize(128, false, sizePriorToEncryption, inputFileAsByteArray, + USERPASSWORD, OWNERPASSWORD, permission); + + testSymmEncrForKeySize(128, true, sizePriorToEncryption, inputFileAsByteArray, + USERPASSWORD, OWNERPASSWORD, permission); + + testSymmEncrForKeySize(256, true, sizePriorToEncryption, inputFileAsByteArray, + USERPASSWORD, OWNERPASSWORD, permission); + } + + /** + * PDFBOX-4308: test that index colorspace table string doesn't get + * corrupted when encrypting. This happened because the colorspace was + * referenced twice, once in the resources dictionary and once in an image + * in the resources dictionary, and when saving the PDF the string was saved + * twice, once as a direct object and once as an indirect object (both from + * the same java object). Encryption used the wrong object number and/or the + * object was encrypted twice. + * + * @throws IOException + */ + public void testPDFBox4308() throws IOException + { + byte[] inputFileAsByteArray; + try (InputStream is = new FileInputStream("target/pdfs/PDFBOX-4308.pdf")) + { + inputFileAsByteArray = IOUtils.toByteArray(is); + } + int sizePriorToEncryption = inputFileAsByteArray.length; + + testSymmEncrForKeySize(40, false, sizePriorToEncryption, inputFileAsByteArray, + USERPASSWORD, OWNERPASSWORD, permission); + } + + /** + * Protect a document with an embedded PDF with a key and try to reopen it + * with that key and compare. + * + * @throws Exception If there is an unexpected error during the test. + */ + public void testProtectionInnerAttachment() throws Exception + { + String testFileName = "preEnc_20141025_105451.pdf"; + byte[] inputFileWithEmbeddedFileAsByteArray = getFileResourceAsByteArray(testFileName); + + int sizeOfFileWithEmbeddedFile = inputFileWithEmbeddedFileAsByteArray.length; + + File extractedEmbeddedFile + = extractEmbeddedFile(new ByteArrayInputStream(inputFileWithEmbeddedFileAsByteArray), "innerFile.pdf"); + + testSymmEncrForKeySizeInner(40, false, sizeOfFileWithEmbeddedFile, + inputFileWithEmbeddedFileAsByteArray, extractedEmbeddedFile, USERPASSWORD, OWNERPASSWORD); + + testSymmEncrForKeySizeInner(128, false, sizeOfFileWithEmbeddedFile, + inputFileWithEmbeddedFileAsByteArray, extractedEmbeddedFile, USERPASSWORD, OWNERPASSWORD); + + testSymmEncrForKeySizeInner(128, true, sizeOfFileWithEmbeddedFile, + inputFileWithEmbeddedFileAsByteArray, extractedEmbeddedFile, USERPASSWORD, OWNERPASSWORD); + + testSymmEncrForKeySizeInner(256, true, sizeOfFileWithEmbeddedFile, + inputFileWithEmbeddedFileAsByteArray, extractedEmbeddedFile, USERPASSWORD, OWNERPASSWORD); + } + + /** + * PDFBOX-4453: verify that identical encrypted strings are really decrypted each. + * + * @throws IOException + */ + public void testPDFBox4453() throws IOException + { + final int TESTCOUNT = 1000; + File file = new File(testResultsDir,"PDFBOX-4453.pdf"); + try (PDDocument doc = new PDDocument()) + { + doc.addPage(new PDPage()); + for (int i = 0; i < TESTCOUNT; ++i) + { + // strings must be in different dictionaries so that the actual + // encryption key changes + COSDictionary dict = new COSDictionary(); + doc.getPage(0).getCOSObject().setItem(COSName.getPDFName("_Test-" + i), dict); + // need two different keys so that there are both encrypted and decrypted COSStrings + // with value "0" + dict.setString("key1", "3"); + dict.setString("key2", "0"); + } + + //RC4-40 + StandardProtectionPolicy spp = + new StandardProtectionPolicy("12345", "", new AccessPermission()); + spp.setEncryptionKeyLength(40); + spp.setPreferAES(false); + doc.protect(spp); + doc.save(file); + } + + try (PDDocument doc = PDDocument.load(file)) + { + Assert.assertTrue(doc.isEncrypted()); + for (int i = 0; i < TESTCOUNT; ++i) + { + COSDictionary dict = + doc.getPage(0).getCOSObject().getCOSDictionary(COSName.getPDFName("_Test-" + i)); + Assert.assertEquals("3", dict.getString("key1")); + Assert.assertEquals("0", dict.getString("key2")); + } + } + } + + private void testSymmEncrForKeySize(int keyLength, boolean preferAES, + int sizePriorToEncr, byte[] inputFileAsByteArray, + String userpassword, String ownerpassword, + AccessPermission permission) throws IOException + { + PDDocument document = PDDocument.load(inputFileAsByteArray); + String prefix = "Simple-"; + int numSrcPages = document.getNumberOfPages(); + PDFRenderer pdfRenderer = new PDFRenderer(document); + List srcImgTab = new ArrayList<>(); + List srcContentStreamTab = new ArrayList<>(); + for (int i = 0; i < numSrcPages; ++i) + { + srcImgTab.add(pdfRenderer.renderImage(i)); + InputStream unfilteredStream = document.getPage(i).getContents(); + byte[] bytes = IOUtils.toByteArray(unfilteredStream); + unfilteredStream.close(); + srcContentStreamTab.add(bytes); + } + + PDDocument encryptedDoc = encrypt(keyLength, preferAES, sizePriorToEncr, document, + prefix, permission, userpassword, ownerpassword); + + Assert.assertEquals(numSrcPages, encryptedDoc.getNumberOfPages()); + pdfRenderer = new PDFRenderer(encryptedDoc); + for (int i = 0; i < encryptedDoc.getNumberOfPages(); ++i) + { + // compare rendering + BufferedImage bim = pdfRenderer.renderImage(i); + ValidateXImage.checkIdent(bim, srcImgTab.get(i)); + + // compare content streams + InputStream unfilteredStream = encryptedDoc.getPage(i).getContents(); + byte[] bytes = IOUtils.toByteArray(unfilteredStream); + unfilteredStream.close(); + Assert.assertArrayEquals("content stream of page " + i + " not identical", + srcContentStreamTab.get(i), + bytes); + } + + File pdfFile = new File(testResultsDir, prefix + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + "-decrypted.pdf"); + encryptedDoc.setAllSecurityToBeRemoved(true); + encryptedDoc.save(pdfFile); + encryptedDoc.close(); + } + + // encrypt with keylength and permission, save, check sizes before and after encryption + // reopen, decrypt and return document + private PDDocument encrypt(int keyLength, boolean preferAES, int sizePriorToEncr, + PDDocument doc, String prefix, AccessPermission permission, + String userpassword, String ownerpassword) throws IOException + { + StandardProtectionPolicy spp = new StandardProtectionPolicy(ownerpassword, userpassword, + permission); + spp.setEncryptionKeyLength(keyLength); + spp.setPreferAES(preferAES); + + // This must have no effect and should only log a warning. + doc.setAllSecurityToBeRemoved(true); + + doc.protect(spp); + + File pdfFile = new File(testResultsDir, prefix + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + "-encrypted.pdf"); + + doc.save(pdfFile); + doc.close(); + long sizeEncrypted = pdfFile.length(); + Assert.assertTrue(keyLength + + "-bit " + (preferAES ? "AES" : "RC4") + " encrypted pdf should not have same size as plain one", + sizeEncrypted != sizePriorToEncr); + + // test with owner password => full permissions + PDDocument encryptedDoc = PDDocument.load(pdfFile, ownerpassword); + Assert.assertTrue(encryptedDoc.isEncrypted()); + Assert.assertTrue(encryptedDoc.getCurrentAccessPermission().isOwnerPermission()); + + // Older encryption allows to get the user password when the owner password is known + PDEncryption encryption = encryptedDoc.getEncryption(); + int revision = encryption.getRevision(); + if (revision < 5) + { + StandardSecurityHandler standardSecurityHandler = new StandardSecurityHandler(); + int keyLengthInBytes = encryption.getVersion() == 1 ? 5 : encryption.getLength() / 8; + byte[] computedUserPassword = standardSecurityHandler.getUserPassword( + ownerpassword.getBytes(Charsets.ISO_8859_1), + encryption.getOwnerKey(), + revision, + keyLengthInBytes); + Assert.assertEquals(userpassword.substring(0, 32), new String(computedUserPassword, Charsets.ISO_8859_1)); + } + + encryptedDoc.close(); + + // test with user password => restricted permissions + encryptedDoc = PDDocument.load(pdfFile, userpassword); + Assert.assertTrue(encryptedDoc.isEncrypted()); + Assert.assertFalse(encryptedDoc.getCurrentAccessPermission().isOwnerPermission()); + + assertEquals(permission.getPermissionBytes(), encryptedDoc.getCurrentAccessPermission().getPermissionBytes()); + + return encryptedDoc; + } + + // extract the embedded file, saves it, and return the extracted saved file + private File extractEmbeddedFile(InputStream pdfInputStream, String name) throws IOException + { + PDDocument docWithEmbeddedFile; + docWithEmbeddedFile = PDDocument.load(pdfInputStream); + PDDocumentCatalog catalog = docWithEmbeddedFile.getDocumentCatalog(); + PDDocumentNameDictionary names = catalog.getNames(); + PDEmbeddedFilesNameTreeNode embeddedFiles = names.getEmbeddedFiles(); + Map embeddedFileNames = embeddedFiles.getNames(); + Assert.assertEquals(1, embeddedFileNames.size()); + Map.Entry entry = embeddedFileNames.entrySet().iterator().next(); + LOG.info("Processing embedded file " + entry.getKey() + ":"); + PDComplexFileSpecification complexFileSpec = entry.getValue(); + PDEmbeddedFile embeddedFile = complexFileSpec.getEmbeddedFile(); + + File resultFile = new File(testResultsDir, name); + FileOutputStream fos = new FileOutputStream(resultFile); + InputStream is = embeddedFile.createInputStream(); + IOUtils.copy(is, fos); + fos.close(); + is.close(); + + LOG.info(" size: " + embeddedFile.getSize()); + assertEquals(embeddedFile.getSize(), resultFile.length()); + + return resultFile; + } + + private void testSymmEncrForKeySizeInner(int keyLength, boolean preferAES, + int sizePriorToEncr, byte[] inputFileWithEmbeddedFileAsByteArray, + File embeddedFilePriorToEncryption, + String userpassword, String ownerpassword) throws IOException + { + PDDocument document = PDDocument.load(inputFileWithEmbeddedFileAsByteArray); + PDDocument encryptedDoc = encrypt(keyLength, preferAES, sizePriorToEncr, document, "ContainsEmbedded-", permission, userpassword, ownerpassword); + + File decryptedFile = new File(testResultsDir, "DecryptedContainsEmbedded-" + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + ".pdf"); + encryptedDoc.setAllSecurityToBeRemoved(true); + encryptedDoc.save(decryptedFile); + + File extractedEmbeddedFile = extractEmbeddedFile(new FileInputStream(decryptedFile), "decryptedInnerFile-" + keyLength + "-bit-" + (preferAES ? "AES" : "RC4") + ".pdf"); + + Assert.assertEquals(keyLength + "-bit " + (preferAES ? "AES" : "RC4") + " decrypted inner attachment pdf should have same size as plain one", + embeddedFilePriorToEncryption.length(), extractedEmbeddedFile.length()); + + // compare the two embedded files + Assert.assertArrayEquals( + getFileAsByteArray(embeddedFilePriorToEncryption), + getFileAsByteArray(extractedEmbeddedFile)); + encryptedDoc.close(); + } + + private byte[] getFileResourceAsByteArray(String testFileName) throws IOException + { + return IOUtils.toByteArray(TestSymmetricKeyEncryption.class.getResourceAsStream(testFileName)); + } + + private byte[] getFileAsByteArray(File f) throws IOException + { + return Files.readAllBytes(f.toPath()); + } +} diff --git a/src/test/pdfbox/encryption/package.html b/pdfbox/src/test/java/org/apache/pdfbox/encryption/package.html similarity index 100% rename from src/test/pdfbox/encryption/package.html rename to pdfbox/src/test/java/org/apache/pdfbox/encryption/package.html diff --git a/pdfbox/src/test/java/org/apache/pdfbox/filter/PredictorTest.java b/pdfbox/src/test/java/org/apache/pdfbox/filter/PredictorTest.java new file mode 100644 index 00000000000..a3fb028cb3e --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/filter/PredictorTest.java @@ -0,0 +1,88 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import static org.apache.pdfbox.filter.Predictor.getBitSeq; +import static org.apache.pdfbox.filter.Predictor.calcSetBitSeq; +import org.junit.Assert; +import org.junit.Test; + +/** + * + * @author Tilman Hausherr + */ +public class PredictorTest +{ + /** + * Test of getBitSeq method, of class Predictor. + */ + @Test + public void testGetBitSeq() + { + Assert.assertEquals(Integer.parseInt("11111111", 2), getBitSeq(Integer.parseInt("11111111", 2), 0, 8)); + Assert.assertEquals(Integer.parseInt("00000000", 2), getBitSeq(Integer.parseInt("00000000", 2), 0, 8)); + Assert.assertEquals(Integer.parseInt("1", 2), getBitSeq(Integer.parseInt("11111111", 2), 0, 1)); + Assert.assertEquals(Integer.parseInt("0", 2), getBitSeq(Integer.parseInt("00000000", 2), 0, 1)); + Assert.assertEquals(Integer.parseInt("001", 2), getBitSeq(Integer.parseInt("00110001", 2), 0, 3)); + Assert.assertEquals(Integer.parseInt("10101010", 2), getBitSeq(Integer.parseInt("10101010", 2), 0, 8)); + Assert.assertEquals(Integer.parseInt("10", 2), getBitSeq(Integer.parseInt("10101010", 2), 0, 2)); + Assert.assertEquals(Integer.parseInt("01", 2), getBitSeq(Integer.parseInt("10101010", 2), 1, 2)); + Assert.assertEquals(Integer.parseInt("10", 2), getBitSeq(Integer.parseInt("10101010", 2), 2, 2)); + Assert.assertEquals(Integer.parseInt("101", 2), getBitSeq(Integer.parseInt("10101010", 2), 3, 3)); + Assert.assertEquals(Integer.parseInt("1010101", 2), getBitSeq(Integer.parseInt("10101010", 2), 1, 7)); + Assert.assertEquals(Integer.parseInt("01", 2), getBitSeq(Integer.parseInt("10101010", 2), 3, 2)); + Assert.assertEquals(Integer.parseInt("00110001", 2), getBitSeq(Integer.parseInt("00110001", 2), 0, 8)); + Assert.assertEquals(Integer.parseInt("10001", 2), getBitSeq(Integer.parseInt("00110001", 2), 0, 5)); + Assert.assertEquals(Integer.parseInt("0011", 2), getBitSeq(Integer.parseInt("00110001", 2), 4, 4)); + Assert.assertEquals(Integer.parseInt("110", 2), getBitSeq(Integer.parseInt("00110001", 2), 3, 3)); + Assert.assertEquals(Integer.parseInt("00", 2), getBitSeq(Integer.parseInt("00110001", 2), 6, 2)); + Assert.assertEquals(Integer.parseInt("1111", 2), getBitSeq(Integer.parseInt("11110000", 2), 4, 4)); + Assert.assertEquals(Integer.parseInt("11", 2), getBitSeq(Integer.parseInt("11110000", 2), 6, 2)); + Assert.assertEquals(Integer.parseInt("0000", 2), getBitSeq(Integer.parseInt("11110000", 2), 0, 4)); + } + + /** + * Test of calcSetBitSeq method, of class Predictor. + */ + @Test + public void testCalcSetBitSeq() + { + Assert.assertEquals(Integer.parseInt("00000000", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 8, 0)); + Assert.assertEquals(Integer.parseInt("00000001", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 8, 1)); + Assert.assertEquals(Integer.parseInt("11111111", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 1, 1)); + Assert.assertEquals(Integer.parseInt("11111101", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 2, 1)); + Assert.assertEquals(Integer.parseInt("11111001", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 3, 1)); + Assert.assertEquals(Integer.parseInt("00000001", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 0, 2, 1)); + Assert.assertEquals(Integer.parseInt("11110001", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 4, 1)); + Assert.assertEquals(Integer.parseInt("11100011", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 1, 4, 1)); + Assert.assertEquals(Integer.parseInt("00000010", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 1, 1, 1)); + Assert.assertEquals(Integer.parseInt("11111111", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 7, 1, 1)); + Assert.assertEquals(Integer.parseInt("01111111", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 7, 1, 0)); + Assert.assertEquals(Integer.parseInt("10000000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 7, 1, 1)); + Assert.assertEquals(Integer.parseInt("00000000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 7, 1, 0)); + Assert.assertEquals(Integer.parseInt("01000000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 6, 1, 1)); + Assert.assertEquals(Integer.parseInt("00000000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 6, 1, 0)); + Assert.assertEquals(Integer.parseInt("00110000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 3, 3, 6)); + Assert.assertEquals(Integer.parseInt("01100000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 4, 3, 6)); + Assert.assertEquals(Integer.parseInt("11000000", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 5, 3, 6)); + Assert.assertEquals(Integer.parseInt("11111111", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 0, 8, 0xFF)); + Assert.assertEquals(Integer.parseInt("11111111", 2), calcSetBitSeq(Integer.parseInt("11111111", 2), 0, 8, 0xFF)); + Assert.assertEquals(0x7E, calcSetBitSeq(0xA5, 0, 8, 0xD9 + 0xA5)); + + // check truncation + Assert.assertEquals(Integer.parseInt("00000010", 2), calcSetBitSeq(Integer.parseInt("00000000", 2), 1, 1, 3)); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/filter/TestFilters.java b/pdfbox/src/test/java/org/apache/pdfbox/filter/TestFilters.java new file mode 100644 index 00000000000..6fdb57f410e --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/filter/TestFilters.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.filter; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.Random; + +import junit.framework.TestCase; + +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; + +/** + * This will test all of the filters in the PDFBox system. + */ +public class TestFilters extends TestCase +{ + /** + * This will test all of the filters in the system. There will be COUNT + * of deterministic tests and COUNT of non-deterministic tests, see also + * the discussion in PDFBOX-1977. + * + * @throws IOException If there is an exception while encoding. + */ + public void testFilters() throws IOException + { + final int COUNT = 10; + Random rd = new Random(123456); + for (int iter = 0; iter < COUNT * 2; iter++) + { + long seed; + if (iter < COUNT) + { + // deterministic seed + seed = rd.nextLong(); + } + else + { + // non-deterministic seed + seed = new Random().nextLong(); + } + boolean success = false; + try + { + final Random random = new Random(seed); + final int numBytes = 10000 + random.nextInt(20000); + byte[] original = new byte[numBytes]; + + int upto = 0; + while(upto < numBytes) + { + final int left = numBytes - upto; + if (random.nextBoolean() || left < 2) + { + // Fill w/ pseudo-random bytes: + final int end = upto + Math.min(left, 10+random.nextInt(100)); + while(upto < end) + { + original[upto++] = (byte) random.nextInt(); + } + } + else + { + // Fill w/ very predictable bytes: + final int end = upto + Math.min(left, 2+random.nextInt(10)); + final byte value = (byte) random.nextInt(4); + while(upto < end) + { + original[upto++] = value; + } + } + } + + for( Filter filter : FilterFactory.INSTANCE.getAllFilters() ) + { + // Skip filters that don't currently support roundtripping + if( filter instanceof DCTFilter || + filter instanceof CCITTFaxFilter || + filter instanceof JPXFilter || + filter instanceof JBIG2Filter || + filter instanceof RunLengthDecodeFilter ) + { + continue; + } + + checkEncodeDecode(filter, original); + } + success = true; + } + finally + { + if (!success) + { + System.err.println("NOTE: test failed with seed=" + seed); + } + } + } + } + + /** + * This will test the use of identity filter to decode stream and string. + * This test threw an IOException before the correction. + * + * @throws IOException + */ + public void testPDFBOX4517() throws IOException + { + PDDocument.load(new File("target/pdfs/PDFBOX-4517-cryptfilter.pdf"), + "userpassword1234"); + } + + /** + * This will test the LZW filter with the sequence that failed in PDFBOX-1777. + * To check that the test itself is legit, revert LZWFilter.java to rev 1571801, + * which should fail this test. + * + * @throws IOException + */ + public void testPDFBOX1777() throws IOException + { + Filter lzwFilter = FilterFactory.INSTANCE.getFilter(COSName.LZW_DECODE); + byte[] byteArray = IOUtils.toByteArray(this.getClass().getResourceAsStream("PDFBOX-1777.bin")); + checkEncodeDecode(lzwFilter, byteArray); + } + + private void checkEncodeDecode(Filter filter, byte[] original) throws IOException + { + ByteArrayOutputStream encoded = new ByteArrayOutputStream(); + filter.encode(new ByteArrayInputStream(original), encoded, new COSDictionary()); + ByteArrayOutputStream decoded = new ByteArrayOutputStream(); + filter.decode(new ByteArrayInputStream(encoded.toByteArray()), + decoded, new COSDictionary(), 0); + + assertTrue( + "Data that is encoded and then decoded through " + + filter.getClass() + " does not match the original data", + Arrays.equals(original, decoded.toByteArray())); + } +} diff --git a/src/test/pdfbox/filter/package.html b/pdfbox/src/test/java/org/apache/pdfbox/filter/package.html similarity index 100% rename from src/test/pdfbox/filter/package.html rename to pdfbox/src/test/java/org/apache/pdfbox/filter/package.html diff --git a/pdfbox/src/test/java/org/apache/pdfbox/io/TestIOUtils.java b/pdfbox/src/test/java/org/apache/pdfbox/io/TestIOUtils.java new file mode 100644 index 00000000000..fc156bdab93 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/io/TestIOUtils.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.pdfbox.io; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.TestCase; + +/** + * This is a unit test for {@link IOUtils}. + */ +public class TestIOUtils extends TestCase +{ + + /** + * Tests {@link IOUtils#populateBuffer(java.io.InputStream, byte[]). + * @throws IOException if an I/O error occursn + */ + public void testPopulateBuffer() throws IOException + { + byte[] data = "Hello World!".getBytes(); + byte[] buffer = new byte[data.length]; + long count = IOUtils.populateBuffer(new ByteArrayInputStream(data), buffer); + assertEquals(12, count); + + buffer = new byte[data.length - 2]; //Buffer too small + InputStream in = new ByteArrayInputStream(data); + count = IOUtils.populateBuffer(in, buffer); + assertEquals(10, count); + byte[] leftOver = IOUtils.toByteArray(in); + assertEquals(2, leftOver.length); + + buffer = new byte[data.length + 2]; //Buffer too big + in = new ByteArrayInputStream(data); + count = IOUtils.populateBuffer(in, buffer); + assertEquals(12, count); + assertEquals(-1, in.read()); //EOD reached + } + +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessBuffer.java b/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessBuffer.java new file mode 100644 index 00000000000..dd9ef50ae4a --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessBuffer.java @@ -0,0 +1,330 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.io; + +import java.io.IOException; + +import junit.framework.TestCase; + +/** + * This is a unit test for {@link RandomAccessBuffer}. + * + */ +public class TestRandomAccessBuffer extends TestCase +{ + + private static final int CHUNK_SIZE = 1024; + + /** + * This test checks two corner cases where the last read ends + * exactly at the end of a chunck (remainingBytes == 0) + * @throws IOException + */ + public void testRemainingByteZero() throws IOException + { + RandomAccessBuffer buffer = new RandomAccessBuffer(); + byte[] byteArray = new byte[CHUNK_SIZE + 2]; + // fill the second chunk with "1" + for (int i = 0; i < 2; i++) + { + byteArray[CHUNK_SIZE + i] = 1; + } + buffer.write(byteArray); + buffer.seek(CHUNK_SIZE - 2); + // read the last bytes of the first chunk + buffer.read(byteArray, 0, 2); + // read the last 2 bytes of the buffer/the first bytes of the second chunk + buffer.read(byteArray, 0, 2); + // check the values read from the second chunk + assertEquals(2, byteArray[0]+byteArray[1]); + buffer.close(); + + buffer = new RandomAccessBuffer(); + byteArray = new byte[2*CHUNK_SIZE + 2]; + // fill the second chunk with "1" + for (int i = 0; i < CHUNK_SIZE; i++) + { + byteArray[CHUNK_SIZE + i] = 1; + } + // fill the third chunk with "2" + for (int i = 0; i < 2; i++) + { + byteArray[2*CHUNK_SIZE + i] = 2; + } + buffer.write(byteArray); + buffer.seek(700); + byte[] bytesRead = new byte[1348]; + buffer.read(bytesRead, 0, bytesRead.length); + assertEquals(2, buffer.read()); + buffer.close(); + } + + /** + * Test the {@link RandomAccessBuffer#read()} + * and {@link RandomAccessBuffer#write(int)} method. + * + * @throws IOException is thrown if something went wrong. + */ + public void testSimpleReadWrite() throws IOException + { + // create a buffer filled with 10 figures from 0 to 9 + RandomAccessBuffer buffer = new RandomAccessBuffer(); + for ( int i=0;i < 10;i++ ) + { + buffer.write(i); + } + // jump back to the beginning of the buffer + buffer.seek(0); + // sum up all figures, the result should be 45 + int result = 0; + for ( int i=0;i < 10;i++ ) + { + result += buffer.read(); + } + assertEquals(45, result); + buffer.close(); + } + + /** + * Test the {@link RandomAccessBuffer#read(byte[], int, int)} + * and {@link RandomAccessBuffer#write(byte[])} method. + * + * @throws IOException is thrown if something went wrong. + */ + public void testSimpleArrayReadWrite() throws IOException + { + // create an array filled with 10 figures from 0 to 9 + byte[] byteArray = new byte[10]; + for ( byte i=0;i < 10;i++ ) + { + byteArray[i] = i; + } + // create an empty buffer and write the array to it + RandomAccessBuffer buffer = new RandomAccessBuffer(); + buffer.write(byteArray); + // jump back to the beginning of the buffer + buffer.seek(0); + // read the buffer byte after byte and sum up all figures, + // the result should be 45 + int result = 0; + for ( int i=0;i < 10;i++ ) + { + result += buffer.read(); + } + assertEquals(45, result); + // jump back to the beginning of the buffer + buffer.seek(0); + // read the buffer to an array and sum up all figures, + // the result should be 45 + buffer.read(byteArray, 0, byteArray.length); + result = 0; + for ( int i=0;i < 10;i++ ) + { + result += byteArray[i]; + } + assertEquals(45, result); + buffer.close(); + } + + /** + * Test the {@link RandomAccessBuffer#read(byte[], int, int)} + * and {@link RandomAccessBuffer#write(byte[])} method using + * a couple of data to create more than one chunk. + * + * @throws IOException is thrown if something went wrong. + */ + public void testArrayReadWrite() throws IOException + { + // create an array filled with 1024 * "0", 1024 * "1" and 100 * "2" + byte[] byteArray = new byte[ 2 * CHUNK_SIZE + 100]; + for (int i = CHUNK_SIZE;i < 2 * CHUNK_SIZE; i++) + { + byteArray[i] = 1; + } + for (int i = 2 * CHUNK_SIZE; i < 2 * CHUNK_SIZE + 100; i++) + { + byteArray[i] = 2; + } + // write the array to a buffer + RandomAccessBuffer buffer = new RandomAccessBuffer(); + buffer.write(byteArray); + // jump to the beginning + buffer.seek(0); + // the first byte should be "0" + assertEquals(0, buffer.read()); + + // jump to the last byte of the first chunk, it should be "0" + buffer.seek(CHUNK_SIZE - 1); + assertEquals(0, buffer.read()); + + // jump to the first byte of the second chunk, it should be "1" + buffer.seek(CHUNK_SIZE); + assertEquals(1, buffer.read()); + + // jump to the end-5 of the first chunk + buffer.seek(CHUNK_SIZE - 5); + // read the last 5 bytes from the first and the first 5 bytes + // from the second chunk and sum them up. The result should be "5" + byteArray = new byte[10]; + buffer.read(byteArray,0, byteArray.length); + int result = 0; + for ( int i=0;i < 10;i++ ) + { + result += byteArray[i]; + } + assertEquals(5, result); + + // jump to the end-5 of the second chunk + buffer.seek(2 * CHUNK_SIZE - 5); + // read the last 5 bytes from the second and the first 5 bytes + // from the third chunk and sum them up. The result should be "15" + byteArray = new byte[10]; + buffer.read(byteArray); + result = 0; + for ( int i=0;i < 10;i++ ) + { + result += byteArray[i]; + } + assertEquals(15, result); + buffer.close(); + } + + /** + * Test if overwriting works. + * + * @throws IOException is thrown if something went wrong. + */ + public void testOverwrite() throws IOException + { + // create a buffer filled with 1024 * "0" and 100 * "1" + byte[] byteArray = new byte[ CHUNK_SIZE + 100]; + RandomAccessBuffer buffer = new RandomAccessBuffer(); + for (int i = CHUNK_SIZE;i < CHUNK_SIZE + 100; i++) + { + byteArray[i] = 1; + } + buffer.write(byteArray); + + // jump to the end-5 of the first chunk + buffer.seek(CHUNK_SIZE - 5); + // read the last 5 bytes from the first and the first 5 bytes + // from the second chunk and sum them up. The result should be "5" + byteArray = new byte[10]; + buffer.read(byteArray,0, byteArray.length); + int result = 0; + for ( int i=0;i < 10;i++ ) + { + result += byteArray[i]; + } + assertEquals(5, result); + + // jump to the end-5 of the first chunk + buffer.seek(CHUNK_SIZE - 5); + // write 5 "2" and 5 "3" to the buffer + for ( int i=0;i < 5;i++ ) + { + buffer.write(2); + } + for ( int i=0;i < 5;i++ ) + { + buffer.write(3); + } + // jump to the end-5 of the first chunk + buffer.seek(CHUNK_SIZE - 5); + // read the last 5 bytes from the first and the first 5 bytes + // from the second chunk and sum them up. The result should be "25" + byteArray = new byte[10]; + buffer.read(byteArray,0, byteArray.length); + result = 0; + for ( int i=0;i < 10;i++ ) + { + result += byteArray[i]; + } + assertEquals(25, result); + buffer.close(); + } + + /** + * Test if seeking beyond EOF works. + * + * @throws IOException is thrown if something went wrong. + */ + public void testSeekBeyondEOF() throws IOException + { + // create a buffer filled with 10 figures from 0 to 9 + RandomAccessBuffer buffer = new RandomAccessBuffer(); + for ( int i=0;i < 10;i++ ) + { + buffer.write(i); + } + // jump back to the beginning of the buffer + buffer.seek(0); + // jump beyond EOF + buffer.seek(20); + // try to read + assertEquals(-1, buffer.read()); + // check EOF + assertTrue(buffer.isEOF()); + buffer.close(); + } + + public void testPDFBOX1490() throws Exception + { + // create a buffer filled with 1024 * "0" + byte[] byteArray = new byte[ CHUNK_SIZE-1]; + RandomAccessBuffer buffer = new RandomAccessBuffer(); + buffer.write(byteArray); + // fill the first buffer until the end + buffer.write(0); + // seek the current == last position in the first buffer chunk + buffer.seek(buffer.getPosition()); + buffer.close(); + } + + public void testPDFBOX2969() throws Exception + { + // create buffer with non-default chunk size + // by providing an array with unusual size + // (larger than RandomAccessBuffer.DEFAULT_CHUNK_SIZE) + int chunkSize = (CHUNK_SIZE << 4) + 3; + byte[] byteArray = new byte[chunkSize]; + + RandomAccessBuffer buffer = new RandomAccessBuffer(byteArray); + + // fill completely + for (int i = 0; i < chunkSize; i++) + { + buffer.write(1); + } + + // create clone + RandomAccessBuffer bufferClone = buffer.clone(); + + // read all from both + buffer.seek(0); + int bufRead = buffer.read(new byte[(int)buffer.length()]); + + bufferClone.seek(0); + int bufCloneRead = bufferClone.read(new byte[(int)bufferClone.length()]); + + assertEquals(bufRead, bufCloneRead); + + buffer.close(); + bufferClone.close(); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessOutputStream.java b/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessOutputStream.java new file mode 100644 index 00000000000..ad6453e3a5b --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessOutputStream.java @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.io; + +import java.io.File; +import java.io.IOException; +import junit.framework.TestCase; + +/** + * This is a unit test for RandomAccessOutputStream. + * + * @author Fredrik Kjellberg + */ +public class TestRandomAccessOutputStream extends TestCase +{ + private final File testResultsDir = new File("target/test-output"); + + @Override + protected void setUp() throws Exception + { + super.setUp(); + testResultsDir.mkdirs(); + } + + public void testWrite() throws IOException + { + RandomAccessOutputStream out; + byte[] buffer; + + File file = new File(testResultsDir, "raf-outputstream.bin"); + + file.delete(); + + RandomAccessFile raFile = new RandomAccessFile(file, "rw"); + + // Test single byte writes + buffer = createDataSequence(16, 10); + out = new RandomAccessOutputStream(raFile); + for (byte b : buffer) + { + out.write(b); + } + assertEquals(16, raFile.length()); + assertEquals(16, raFile.getPosition()); + out.close(); + + // Test no write + out = new RandomAccessOutputStream(raFile); + assertEquals(16, raFile.length()); + assertEquals(16, raFile.getPosition()); + out.close(); + + // Test buffer writes + buffer = createDataSequence(8, 30); + out = new RandomAccessOutputStream(raFile); + out.write(buffer); + assertEquals(24, raFile.length()); + assertEquals(24, raFile.getPosition()); + out.close(); + + // Test partial buffer writes + buffer = createDataSequence(16, 50); + out = new RandomAccessOutputStream(raFile); + out.write(buffer, 8, 4); + out.write(buffer, 4, 2); + assertEquals(30, raFile.length()); + assertEquals(30, raFile.getPosition()); + out.close(); + + // Verify written data + buffer = new byte[(int) raFile.length()]; + raFile.seek(0); + assertEquals(buffer.length, raFile.read(buffer, 0, buffer.length)); + assertEquals(10, buffer[0]); + assertEquals(11, buffer[1]); + assertEquals(25, buffer[15]); + + assertEquals(30, buffer[16]); + assertEquals(31, buffer[17]); + assertEquals(37, buffer[23]); + + assertEquals(58, buffer[24]); + assertEquals(59, buffer[25]); + assertEquals(60, buffer[26]); + assertEquals(61, buffer[27]); + assertEquals(54, buffer[28]); + assertEquals(55, buffer[29]); + + // Cleanup + raFile.close(); + file.delete(); + } + + protected byte[] createDataSequence(int length, int firstByteValue) + { + byte[] buffer = new byte[length]; + for (int i = 0; i < buffer.length; i++) + { + buffer[i] = (byte) (firstByteValue + i); + } + + return buffer; + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/io/package.html b/pdfbox/src/test/java/org/apache/pdfbox/io/package.html new file mode 100644 index 00000000000..5b58b11bda3 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/io/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains test cases for I/O-related classes. + + diff --git a/pdfbox/src/test/java/org/apache/pdfbox/it/gsub/GsubWorkerForBengaliTest.java b/pdfbox/src/test/java/org/apache/pdfbox/it/gsub/GsubWorkerForBengaliTest.java new file mode 100644 index 00000000000..0a7b9e60c72 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/it/gsub/GsubWorkerForBengaliTest.java @@ -0,0 +1,262 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.it.gsub; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.fontbox.ttf.CmapLookup; +import org.apache.fontbox.ttf.gsub.GsubWorker; +import org.apache.fontbox.ttf.gsub.GsubWorkerFactory; +import org.apache.fontbox.ttf.gsub.GsubWorkerForBengali; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +/** + * Integration test for {@link GsubWorkerForBengali}. Has various combinations of glyphs to test + * proper working of the GSUB system. + * + * @author Palash Ray + * + */ +public class GsubWorkerForBengaliTest +{ + + private static final String LOHIT_BENGALI_TTF = "/org/apache/pdfbox/ttf/Lohit-Bengali.ttf"; + + private CmapLookup cmapLookup; + private GsubWorker gsubWorkerForBengali; + + @Before + public void init() throws IOException + { + try (PDDocument doc = new PDDocument()) + { + PDType0Font font = PDType0Font.load(doc, + GsubWorkerForBengaliTest.class.getResourceAsStream(LOHIT_BENGALI_TTF), true); + + cmapLookup = font.getCmapLookup(); + gsubWorkerForBengali = new GsubWorkerFactory().getGsubWorker(cmapLookup, font.getGsubData()); + } + } + + @Test + public void testApplyTransforms_simple_hosshoi_kar() + { + // given + List glyphsAfterGsub = Arrays.asList(56, 102, 91); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("আমি")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_ja_phala() + { + // given + List glyphsAfterGsub = Arrays.asList(89, 156, 101, 97); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("ব্যাস")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_e_kar() + { + // given + List glyphsAfterGsub = Arrays.asList(438, 89, 94, 101); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("বেলা")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_o_kar() + { + // given + List glyphsAfterGsub = Arrays.asList(108, 89, 101, 97); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("বোস")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Ignore + public void testApplyTransforms_o_kar_repeated_1_not_working_yet() + { + // given + List glyphsAfterGsub = Arrays.asList(108, 96, 101, 108, 94, 101); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("ষোলো")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Ignore + public void testApplyTransforms_o_kar_repeated_2_not_working_yet() + { + // given + List glyphsAfterGsub = Arrays.asList(108, 73, 101, 108, 77, 101); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("ছোটো")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_ou_kar() + { + // given + List glyphsAfterGsub = Arrays.asList(108, 91, 114, 94); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("মৌল")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_oi_kar() + { + // given + List glyphsAfterGsub = Arrays.asList(439, 89, 93); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("বৈর")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_kha_e_murddhana_swa_e_khiwa() + { + // given + List glyphsAfterGsub = Arrays.asList(167, 103, 438, 93, 93); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("ক্ষীরের")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_ra_phala() + { + // given + List glyphsAfterGsub = Arrays.asList(274, 82); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("দ্রুত")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_ref() + { + // given + List glyphsAfterGsub = Arrays.asList(85, 104, 440, 82); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("ধুর্ত")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_ra_e_hosshu() + { + // given + List glyphsAfterGsub = Arrays.asList(352, 108, 87, 101); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("রুপো")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_la_e_la_e() + { + // given + List glyphsAfterGsub = Arrays.asList(67, 108, 369, 101, 94); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("কল্লোল")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + @Test + public void testApplyTransforms_khanda_ta() + { + // given + List glyphsAfterGsub = Arrays.asList(98, 78, 101, 113); + + // when + List result = gsubWorkerForBengali.applyTransforms(getGlyphIds("হঠাৎ")); + + // then + assertEquals(glyphsAfterGsub, result); + } + + private List getGlyphIds(String word) + { + List originalGlyphIds = new ArrayList<>(); + + for (char unicodeChar : word.toCharArray()) + { + int glyphId = cmapLookup.getGlyphId(unicodeChar); + assertTrue(glyphId > 0); + originalGlyphIds.add(glyphId); + } + + return originalGlyphIds; + } + +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/it/gsub/package.html b/pdfbox/src/test/java/org/apache/pdfbox/it/gsub/package.html new file mode 100644 index 00000000000..3dae997b7a8 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/it/gsub/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains integration tests for GlyphSubstitutionTable for various languages. + + diff --git a/pdfbox/src/test/java/org/apache/pdfbox/it/package.html b/pdfbox/src/test/java/org/apache/pdfbox/it/package.html new file mode 100644 index 00000000000..a72ba31202e --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/it/package.html @@ -0,0 +1,25 @@ + + + + + + + +This package contains integration tests for pdfbox. + + diff --git a/pdfbox/src/test/java/org/apache/pdfbox/multipdf/MergeAcroFormsTest.java b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/MergeAcroFormsTest.java new file mode 100644 index 00000000000..805cfc01b64 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/MergeAcroFormsTest.java @@ -0,0 +1,201 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.multipdf.PDFMergerUtility.AcroFormMergeMode; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.junit.Before; +import org.junit.Test; + +/** + * Test merging different PDFs with AcroForms. + * + * + */ +public class MergeAcroFormsTest +{ + private static final File IN_DIR = new File("src/test/resources/org/apache/pdfbox/multipdf"); + private static final File OUT_DIR = new File("target/test-output/merge/"); + private static final File TARGET_PDF_DIR = new File("target/pdfs"); + + @Before + public void setUp() + { + OUT_DIR.mkdirs(); + } + + /* + * Test LegacyMode merge + */ + @Test + public void testLegacyModeMerge() throws IOException + { + PDFMergerUtility merger = new PDFMergerUtility(); + File toBeMerged = new File(IN_DIR,"AcroFormForMerge.pdf"); + File pdfOutput = new File(OUT_DIR,"PDFBoxLegacyMerge-SameMerged.pdf"); + merger.setDestinationFileName(pdfOutput.getAbsolutePath()); + merger.addSource(toBeMerged); + merger.addSource(toBeMerged); + merger.mergeDocuments(null); + merger.setAcroFormMergeMode(AcroFormMergeMode.PDFBOX_LEGACY_MODE); + + try (PDDocument compliantDocument = PDDocument.load(new File(IN_DIR,"PDFBoxLegacyMerge-SameMerged.pdf")); + PDDocument toBeCompared = PDDocument.load(new File(OUT_DIR,"PDFBoxLegacyMerge-SameMerged.pdf"))) + { + PDAcroForm compliantAcroForm = compliantDocument.getDocumentCatalog().getAcroForm(); + PDAcroForm toBeComparedAcroForm = toBeCompared.getDocumentCatalog().getAcroForm(); + + assertEquals("There shall be the same number of root fields", + compliantAcroForm.getFields().size(), + toBeComparedAcroForm.getFields().size()); + + for (PDField compliantField : compliantAcroForm.getFieldTree()) + { + assertNotNull("There shall be a field with the same FQN", toBeComparedAcroForm.getField(compliantField.getFullyQualifiedName())); + PDField toBeComparedField = toBeComparedAcroForm.getField(compliantField.getFullyQualifiedName()); + compareFieldProperties(compliantField, toBeComparedField); + } + + for (PDField toBeComparedField : toBeComparedAcroForm.getFieldTree()) + { + assertNotNull("There shall be a field with the same FQN", compliantAcroForm.getField(toBeComparedField.getFullyQualifiedName())); + PDField compliantField = compliantAcroForm.getField(toBeComparedField.getFullyQualifiedName()); + compareFieldProperties(toBeComparedField, compliantField); + } + } + } + + private void compareFieldProperties(PDField sourceField, PDField toBeComapredField) + { + // List of keys for comparison + // Don't include too complex properties such as AP as this will fail the test because + // of a stack overflow when + final String[] keys = {"FT", "T", "TU", "TM", "Ff", "V", "DV", "Opts", "TI", "I", "Rect", "DA", }; + + COSDictionary sourceFieldCos = sourceField.getCOSObject(); + COSDictionary toBeComparedCos = toBeComapredField.getCOSObject(); + + for (String key : keys) + { + COSBase sourceBase = sourceFieldCos.getDictionaryObject(key); + COSBase toBeComparedBase = toBeComparedCos.getDictionaryObject(key); + + if (sourceBase != null) + { + assertEquals("The content of the field properties shall be the same",sourceBase.toString(), toBeComparedBase.toString()); + } + else + { + assertNull("If the source property is null the compared property shall be null too", toBeComparedBase); + } + } + } + + + /* + * PDFBOX-1031 Ensure that after merging the PDFs there is an Annots entry per page. + */ + @Test + public void testAnnotsEntry() throws IOException { + + // Merge the PDFs form PDFBOX-1031 + PDFMergerUtility merger = new PDFMergerUtility(); + + File f1 = new File(TARGET_PDF_DIR, "PDFBOX-1031-1.pdf"); + File f2 = new File(TARGET_PDF_DIR, "PDFBOX-1031-2.pdf"); + File pdfOutput = new File(OUT_DIR,"PDFBOX-1031.pdf"); + + try (InputStream is1 = new FileInputStream(f1); + InputStream is2 = new FileInputStream(f2)) + { + + merger.setDestinationFileName(pdfOutput.getAbsolutePath()); + merger.addSource(is1); + merger.addSource(is2); + merger.mergeDocuments(null); + } + + // Test merge result + try (PDDocument mergedPDF = PDDocument.load(pdfOutput)) + { + assertEquals("There shall be 2 pages", 2, mergedPDF.getNumberOfPages()); + + assertNotNull("There shall be an /Annots entry for the first page", mergedPDF.getPage(0).getCOSObject().getDictionaryObject(COSName.ANNOTS)); + assertEquals("There shall be 1 annotation for the first page", 1, mergedPDF.getPage(0).getAnnotations().size()); + + assertNotNull("There shall be an /Annots entry for the second page", mergedPDF.getPage(1).getCOSObject().getDictionaryObject(COSName.ANNOTS)); + assertEquals("There shall be 1 annotation for the second page", 1, mergedPDF.getPage(0).getAnnotations().size()); + } + } + + /* + * PDFBOX-1100 Ensure that after merging the PDFs there is an AP and V entry. + */ + @Test + public void testAPEntry() throws IOException { + + File file1 = new File(TARGET_PDF_DIR, "PDFBOX-1100-1.pdf"); + File file2 = new File(TARGET_PDF_DIR, "PDFBOX-1100-2.pdf"); + // Merge the PDFs form PDFBOX-1100 + PDFMergerUtility merger = new PDFMergerUtility(); + + File pdfOutput = new File(OUT_DIR,"PDFBOX-1100.pdf"); + + try (InputStream is1 = new FileInputStream(file1); + InputStream is2 = new FileInputStream(file2)) + { + merger.setDestinationFileName(pdfOutput.getAbsolutePath()); + merger.addSource(is1); + merger.addSource(is2); + merger.mergeDocuments(null); + } + + // Test merge result + try (PDDocument mergedPDF = PDDocument.load(pdfOutput)) + { + assertEquals("There shall be 2 pages", 2, mergedPDF.getNumberOfPages()); + + PDAcroForm acroForm = mergedPDF.getDocumentCatalog().getAcroForm(); + + PDField formField = acroForm.getField("Testfeld"); + assertNotNull("There shall be an /AP entry for the field", formField.getCOSObject().getDictionaryObject(COSName.AP)); + assertNotNull("There shall be a /V entry for the field", formField.getCOSObject().getDictionaryObject(COSName.V)); + + formField = acroForm.getField("Testfeld2"); + assertNotNull("There shall be an /AP entry for the field", formField.getCOSObject().getDictionaryObject(COSName.AP)); + assertNotNull("There shall be a /V entry for the field", formField.getCOSObject().getDictionaryObject(COSName.V)); + } + } + + + +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/multipdf/MergeAnnotationsTest.java b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/MergeAnnotationsTest.java new file mode 100644 index 00000000000..958700e64df --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/MergeAnnotationsTest.java @@ -0,0 +1,129 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentNameDestinationDictionary; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.junit.Before; +import org.junit.Test; + +/** + * Test merging different PDFs with Annotations. + */ +public class MergeAnnotationsTest +{ + private static final File OUT_DIR = new File("target/test-output/merge/"); + private static final File TARGET_PDF_DIR = new File("target/pdfs"); + + @Before + public void setUp() + { + OUT_DIR.mkdirs(); + } + + /* + * PDFBOX-1065 Ensure that after merging the PDFs there are all link + * annotations and they point to the correct page. + */ + @Test + public void testLinkAnnotations() throws IOException { + + // Merge the PDFs from PDFBOX-1065 + PDFMergerUtility merger = new PDFMergerUtility(); + File file1 = new File(TARGET_PDF_DIR, "PDFBOX-1065-1.pdf"); + File file2 = new File(TARGET_PDF_DIR, "PDFBOX-1065-2.pdf"); + + try (InputStream is1 = new FileInputStream(file1); + InputStream is2 = new FileInputStream(file2)) { + + File pdfOutput = new File(OUT_DIR, "PDFBOX-1065.pdf"); + merger.setDestinationFileName(pdfOutput.getAbsolutePath()); + merger.addSource(is1); + merger.addSource(is2); + merger.mergeDocuments(null); + + // Test merge result + PDDocument mergedPDF = PDDocument.load(pdfOutput); + assertEquals("There shall be 6 pages", 6, mergedPDF.getNumberOfPages()); + + PDDocumentNameDestinationDictionary destinations = mergedPDF.getDocumentCatalog().getDests(); + + // Each document has 3 annotations with 2 entries in the /Dests dictionary per annotation. One for the + // source and one for the target. + assertEquals("There shall be 12 entries", 12, destinations.getCOSObject().entrySet().size()); + + List sourceAnnotations01 = mergedPDF.getPage(0).getAnnotations(); + List sourceAnnotations02 = mergedPDF.getPage(3).getAnnotations(); + + List targetAnnotations01 = mergedPDF.getPage(2).getAnnotations(); + List targetAnnotations02 = mergedPDF.getPage(5).getAnnotations(); + + // Test for the first set of annotations to be merged an linked correctly + assertEquals("There shall be 3 source annotations at the first page", 3, sourceAnnotations01.size()); + assertEquals("There shall be 3 source annotations at the third page", 3, targetAnnotations01.size()); + assertTrue("The annotations shall match to each other", testAnnotationsMatch(sourceAnnotations01, targetAnnotations01)); + + // Test for the second set of annotations to be merged an linked correctly + assertEquals("There shall be 3 source annotations at the first page", 3, sourceAnnotations02.size()); + assertEquals("There shall be 3 source annotations at the third page", 3, targetAnnotations02.size()); + assertTrue("The annotations shall match to each other", testAnnotationsMatch(sourceAnnotations02, targetAnnotations02)); + + mergedPDF.close(); + } + } + + /* + * Source and target annotations are línked by name with the target annotation's name + * being the source annotation's name prepended with 'annoRef_' + */ + private boolean testAnnotationsMatch(List sourceAnnots, List targetAnnots) + { + Map targetAnnotsByName = new HashMap<>(); + COSName destinationName; + + // fill the map with the annotations destination name + for (PDAnnotation targetAnnot : targetAnnots) + { + destinationName = (COSName) targetAnnot.getCOSObject().getDictionaryObject(COSName.DEST); + targetAnnotsByName.put(destinationName.getName(), targetAnnot); + } + + // try to lookup the target annotation for the source annotation by destination name + for (PDAnnotation sourceAnnot : sourceAnnots) + { + destinationName = (COSName) sourceAnnot.getCOSObject().getDictionaryObject(COSName.DEST); + if (targetAnnotsByName.get("annoRef_" + destinationName.getName()) == null) + { + return false; + } + } + return true; + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFCloneUtilityTest.java b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFCloneUtilityTest.java new file mode 100644 index 00000000000..d4440ae277d --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFCloneUtilityTest.java @@ -0,0 +1,104 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.awt.Color; +import java.io.File; +import java.io.IOException; +import junit.framework.TestCase; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; + +/** + * Test suite for PDFCloneUtility, see PDFBOX-2052. + * + * @author Cornelis Hoeflake + * @author Tilman Hausherr + */ +public class PDFCloneUtilityTest extends TestCase +{ + /** + * original (minimal) test from PDFBOX-2052. + * + * @throws IOException + */ + public void testClonePDFWithCosArrayStream() throws IOException + { + try (PDDocument srcDoc = new PDDocument(); + PDDocument dstDoc = new PDDocument()) + { + + PDPage pdPage = new PDPage(); + srcDoc.addPage(pdPage); + new PDPageContentStream(srcDoc, pdPage, AppendMode.APPEND, true).close(); + new PDPageContentStream(srcDoc, pdPage, AppendMode.APPEND, true).close(); + new PDFCloneUtility(dstDoc).cloneForNewDocument(pdPage.getCOSObject()); + } + } + + /** + * broader test that saves to a real PDF document. + * + * @throws IOException + */ + public void testClonePDFWithCosArrayStream2() throws IOException + { + final String TESTDIR = "target/test-output/clone/"; + final String CLONESRC = "clone-src.pdf"; + final String CLONEDST = "clone-dst.pdf"; + + new File(TESTDIR).mkdirs(); + + PDDocument srcDoc = new PDDocument(); + PDPage pdPage = new PDPage(); + srcDoc.addPage(pdPage); + try (PDPageContentStream pdPageContentStream1 = new PDPageContentStream(srcDoc, pdPage, AppendMode.APPEND, false)) + { + pdPageContentStream1.setNonStrokingColor(Color.black); + pdPageContentStream1.addRect(100, 600, 300, 100); + pdPageContentStream1.fill(); + } + try (PDPageContentStream pdPageContentStream2 = new PDPageContentStream(srcDoc, pdPage, AppendMode.APPEND, false)) + { + pdPageContentStream2.setNonStrokingColor(Color.red); + pdPageContentStream2.addRect(100, 500, 300, 100); + pdPageContentStream2.fill(); + } + try (PDPageContentStream pdPageContentStream3 = new PDPageContentStream(srcDoc, pdPage, AppendMode.APPEND, false)) + { + pdPageContentStream3.setNonStrokingColor(Color.yellow); + pdPageContentStream3.addRect(100, 400, 300, 100); + pdPageContentStream3.fill(); + } + + srcDoc.save(TESTDIR + CLONESRC); + PDFMergerUtility merger = new PDFMergerUtility(); + PDDocument dstDoc = new PDDocument(); + + // this calls PDFCloneUtility.cloneForNewDocument(), + // which would fail before the fix in PDFBOX-2052 + merger.appendDocument(dstDoc, srcDoc); + + // save and reload PDF, so that one can see that the files are legit + dstDoc.save(TESTDIR + CLONEDST); + PDDocument.load(new File(TESTDIR + CLONESRC)).close(); + PDDocument.load(new File(TESTDIR + CLONESRC), (String)null).close(); + PDDocument.load(new File(TESTDIR + CLONEDST)).close(); + PDDocument.load(new File(TESTDIR + CLONEDST), (String)null).close(); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java new file mode 100644 index 00000000000..0333c762fbb --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java @@ -0,0 +1,930 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.nio.file.Files; +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import junit.framework.TestCase; +import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.fail; +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSObject; + +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageTree; +import org.apache.pdfbox.pdmodel.common.COSObjectable; +import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; +import org.apache.pdfbox.pdmodel.common.PDNumberTreeNode; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination; +import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitDestination; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.rendering.PDFRenderer; + +/** + * Test suite for PDFMergerUtility. + * + * @author Maruan Sahyoun (PDF files) + * @author Tilman Hausherr (code) + */ +public class PDFMergerUtilityTest extends TestCase +{ + final String SRCDIR = "src/test/resources/input/merge/"; + final String TARGETTESTDIR = "target/test-output/merge/"; + private static final File TARGETPDFDIR = new File("target/pdfs"); + final int DPI = 96; + + @Override + protected void setUp() throws Exception + { + super.setUp(); + + new File(TARGETTESTDIR).mkdirs(); + if (!new File(TARGETTESTDIR).exists()) + { + throw new IOException("could not create output directory"); + } + } + + + + /** + * Tests whether the merge of two PDF files with identically named but + * different global resources works. The two PDF files have two fonts each + * named /TT1 and /TT0 that are Arial and Courier and vice versa in the + * second file. Revisions before 1613017 fail this test because global + * resources were merged which made trouble when resources of the same kind + * had the same name. + * + * @throws IOException if something goes wrong. + */ + public void testPDFMergerUtility() throws IOException + { + checkMergeIdentical("PDFBox.GlobalResourceMergeTest.Doc01.decoded.pdf", + "PDFBox.GlobalResourceMergeTest.Doc02.decoded.pdf", + "GlobalResourceMergeTestResult.pdf", + MemoryUsageSetting.setupMainMemoryOnly()); + + // once again, with scratch file + checkMergeIdentical("PDFBox.GlobalResourceMergeTest.Doc01.decoded.pdf", + "PDFBox.GlobalResourceMergeTest.Doc02.decoded.pdf", + "GlobalResourceMergeTestResult2.pdf", + MemoryUsageSetting.setupTempFileOnly()); + } + + /** + * Tests whether the merge of two PDF files with JPEG and CCITT works. A few revisions before + * 1704911 this test failed because the clone utility attempted to decode and re-encode the + * streams, see PDFBOX-2893 on 23.9.2015. + * + * @throws IOException if something goes wrong. + */ + public void testJpegCcitt() throws IOException + { + checkMergeIdentical("jpegrgb.pdf", + "multitiff.pdf", + "JpegMultiMergeTestResult.pdf", + MemoryUsageSetting.setupMainMemoryOnly()); + + // once again, with scratch file + checkMergeIdentical("jpegrgb.pdf", + "multitiff.pdf", + "JpegMultiMergeTestResult.pdf", + MemoryUsageSetting.setupTempFileOnly()); + } + + // see PDFBOX-2893 + public void testPDFMergerUtility2() throws IOException + { + checkMergeIdentical("PDFBox.GlobalResourceMergeTest.Doc01.pdf", + "PDFBox.GlobalResourceMergeTest.Doc02.pdf", + "GlobalResourceMergeTestResult.pdf", + MemoryUsageSetting.setupMainMemoryOnly()); + + // once again, with scratch file + checkMergeIdentical("PDFBox.GlobalResourceMergeTest.Doc01.pdf", + "PDFBox.GlobalResourceMergeTest.Doc02.pdf", + "GlobalResourceMergeTestResult2.pdf", + MemoryUsageSetting.setupTempFileOnly()); + } + + /** + * PDFBOX-3972: Test that OpenAction page destination isn't lost after merge. + * + * @throws IOException + */ + public void testPDFMergerOpenAction() throws IOException + { + try (PDDocument doc1 = new PDDocument()) + { + doc1.addPage(new PDPage()); + doc1.addPage(new PDPage()); + doc1.addPage(new PDPage()); + doc1.save(new File(TARGETTESTDIR,"MergerOpenActionTest1.pdf")); + } + + PDPageDestination dest; + try (PDDocument doc2 = new PDDocument()) + { + doc2.addPage(new PDPage()); + doc2.addPage(new PDPage()); + doc2.addPage(new PDPage()); + dest = new PDPageFitDestination(); + dest.setPage(doc2.getPage(1)); + doc2.getDocumentCatalog().setOpenAction(dest); + doc2.save(new File(TARGETTESTDIR,"MergerOpenActionTest2.pdf")); + } + + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + pdfMergerUtility.addSource(new File(TARGETTESTDIR, "MergerOpenActionTest1.pdf")); + pdfMergerUtility.addSource(new File(TARGETTESTDIR, "MergerOpenActionTest2.pdf")); + pdfMergerUtility.setDestinationFileName(TARGETTESTDIR + "MergerOpenActionTestResult.pdf"); + pdfMergerUtility.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); + + try (PDDocument mergedDoc = PDDocument.load(new File(TARGETTESTDIR, "MergerOpenActionTestResult.pdf"))) + { + PDDocumentCatalog documentCatalog = mergedDoc.getDocumentCatalog(); + dest = (PDPageDestination) documentCatalog.getOpenAction(); + assertEquals(4, documentCatalog.getPages().indexOf(dest.getPage())); + } + } + + /** + * PDFBOX-3999: check that page entries in the structure tree only reference pages from the page + * tree, i.e. that no orphan pages exist. + * + * @throws IOException + */ + public void testStructureTreeMerge() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3999-GeneralForbearance.pdf")); + + ElementCounter elementCounter = new ElementCounter(); + elementCounter.walk(src.getDocumentCatalog().getStructureTreeRoot().getK()); + int singleCnt = elementCounter.cnt; + int singleSetSize = elementCounter.set.size(); + assertEquals(134, singleCnt); + assertEquals(134, singleSetSize); + + PDDocument dst = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3999-GeneralForbearance.pdf")); + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-merged.pdf")); + dst.close(); + + PDDocument doc = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-merged.pdf")); + + // Assume that the merged tree has double element count + elementCounter = new ElementCounter(); + elementCounter.walk(doc.getDocumentCatalog().getStructureTreeRoot().getK()); + assertEquals(singleCnt * 2, elementCounter.cnt); + assertEquals(singleSetSize * 2, elementCounter.set.size()); + checkForPageOrphans(doc); + + doc.close(); + } + + /** + * PDFBOX-3999: check that no streams are kept from the source document by the destination + * document, despite orphan annotations remaining in the structure tree. + * + * @throws IOException + */ + public void testStructureTreeMerge2() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument doc = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3999-GeneralForbearance.pdf")); + doc.getDocumentCatalog().getAcroForm().flatten(); + doc.save(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-flattened.pdf")); + + ElementCounter elementCounter = new ElementCounter(); + elementCounter.walk(doc.getDocumentCatalog().getStructureTreeRoot().getK()); + int singleCnt = elementCounter.cnt; + int singleSetSize = elementCounter.set.size(); + assertEquals(134, singleCnt); + assertEquals(134, singleSetSize); + + doc.close(); + + PDDocument src = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-flattened.pdf")); + PDDocument dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-flattened.pdf")); + pdfMergerUtility.appendDocument(dst, src); + // before solving PDFBOX-3999, the close() below brought + // IOException: COSStream has been closed and cannot be read. + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-flattened-merged.pdf")); + dst.close(); + + doc = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-3999-GeneralForbearance-flattened-merged.pdf")); + + checkForPageOrphans(doc); + + // Assume that the merged tree has double element count + elementCounter = new ElementCounter(); + elementCounter.walk(doc.getDocumentCatalog().getStructureTreeRoot().getK()); + assertEquals(singleCnt * 2, elementCounter.cnt); + assertEquals(singleSetSize * 2, elementCounter.set.size()); + + doc.close(); + } + + /** + * PDFBOX-4408: Check that /StructParents values from pages and /StructParent values from + * annotations are found in the /ParentTree. + * + * @throws IOException + */ + public void testStructureTreeMerge3() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4408.pdf")); + + ElementCounter elementCounter = new ElementCounter(); + elementCounter.walk(src.getDocumentCatalog().getStructureTreeRoot().getK()); + int singleCnt = elementCounter.cnt; + int singleSetSize = elementCounter.set.size(); + assertEquals(25, singleCnt); + assertEquals(25, singleSetSize); + + PDDocument dst = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4408.pdf")); + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4408-merged.pdf")); + dst.close(); + + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4408-merged.pdf")); + + // Assume that the merged tree has double element count + elementCounter = new ElementCounter(); + elementCounter.walk(dst.getDocumentCatalog().getStructureTreeRoot().getK()); + assertEquals(singleCnt * 2, elementCounter.cnt); + assertEquals(singleSetSize * 2, elementCounter.set.size()); + + checkWithNumberTree(dst); + checkForPageOrphans(dst); + dst.close(); + checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4408-merged.pdf")); + } + + /** + * PDFBOX-4417: Same as the previous tests, but this one failed when the previous tests + * succeeded because of more bugs with cloning. + * + * @throws IOException + */ + public void testStructureTreeMerge4() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(SRCDIR, "PDFBOX-4417-001031.pdf")); + + ElementCounter elementCounter = new ElementCounter(); + elementCounter.walk(src.getDocumentCatalog().getStructureTreeRoot().getK()); + int singleCnt = elementCounter.cnt; + int singleSetSize = elementCounter.set.size(); + assertEquals(104, singleCnt); + assertEquals(104, singleSetSize); + + PDDocument dst = PDDocument.load(new File(SRCDIR, "PDFBOX-4417-001031.pdf")); + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4417-001031-merged.pdf")); + dst.close(); + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4417-001031-merged.pdf")); + + // Assume that the merged tree has double element count + elementCounter = new ElementCounter(); + elementCounter.walk(dst.getDocumentCatalog().getStructureTreeRoot().getK()); + assertEquals(singleCnt * 2, elementCounter.cnt); + assertEquals(singleSetSize * 2, elementCounter.set.size()); + + checkWithNumberTree(dst); + checkForPageOrphans(dst); + dst.close(); + checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4417-001031-merged.pdf")); + } + + /** + * PDFBOX-4417: Same as the previous tests, but this one failed when the previous tests + * succeeded because the /K tree started with two dictionaries and not with an array. + * + * @throws IOException + */ + public void testStructureTreeMerge5() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(SRCDIR, "PDFBOX-4417-054080.pdf")); + + ElementCounter elementCounter = new ElementCounter(); + elementCounter.walk(src.getDocumentCatalog().getStructureTreeRoot().getK()); + int singleCnt = elementCounter.cnt; + int singleSetSize = elementCounter.set.size(); + + PDDocument dst = PDDocument.load(new File(SRCDIR, "PDFBOX-4417-054080.pdf")); + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4417-054080-merged.pdf")); + dst.close(); + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4417-054080-merged.pdf")); + checkWithNumberTree(dst); + checkForPageOrphans(dst); + + // Assume that the merged tree has double element count + elementCounter = new ElementCounter(); + elementCounter.walk(dst.getDocumentCatalog().getStructureTreeRoot().getK()); + assertEquals(singleCnt * 2, elementCounter.cnt); + assertEquals(singleSetSize * 2, elementCounter.set.size()); + + dst.close(); + + checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4417-054080-merged.pdf")); + } + + /** + * PDFBOX-4418: test merging PDFs where ParentTree have a hierarchy. + * + * @throws IOException + */ + public void testStructureTreeMerge6() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4418-000671.pdf")); + + PDStructureTreeRoot structureTreeRoot = src.getDocumentCatalog().getStructureTreeRoot(); + PDNumberTreeNode parentTree = structureTreeRoot.getParentTree(); + Map numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + assertEquals(381, numberTreeAsMap.size()); + assertEquals(743, Collections.max(numberTreeAsMap.keySet()) + 1); + assertEquals(0, (int) Collections.min(numberTreeAsMap.keySet())); + assertEquals(743, structureTreeRoot.getParentTreeNextKey()); + + PDDocument dst = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4418-000314.pdf")); + + structureTreeRoot = dst.getDocumentCatalog().getStructureTreeRoot(); + parentTree = structureTreeRoot.getParentTree(); + numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + assertEquals(7, numberTreeAsMap.size()); + assertEquals(328, Collections.max(numberTreeAsMap.keySet()) + 1); + assertEquals(321, (int) Collections.min(numberTreeAsMap.keySet())); + // ParentTreeNextKey should be 321 but PDF has a higher value + assertEquals(408, structureTreeRoot.getParentTreeNextKey()); + + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4418-merged.pdf")); + dst.close(); + + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4418-merged.pdf")); + checkWithNumberTree(dst); + checkForPageOrphans(dst); + + structureTreeRoot = dst.getDocumentCatalog().getStructureTreeRoot(); + parentTree = structureTreeRoot.getParentTree(); + numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + assertEquals(381+7, numberTreeAsMap.size()); + assertEquals(408+743, Collections.max(numberTreeAsMap.keySet()) + 1); + assertEquals(321, (int) Collections.min(numberTreeAsMap.keySet())); + assertEquals(408+743, structureTreeRoot.getParentTreeNextKey()); + dst.close(); + + checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4418-merged.pdf")); + } + + /** + * PDFBOX-4423: test merging a PDF where a widget has no StructParent. + * + * @throws IOException + */ + public void testStructureTreeMerge7() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4423-000746.pdf")); + + PDStructureTreeRoot structureTreeRoot = src.getDocumentCatalog().getStructureTreeRoot(); + PDNumberTreeNode parentTree = structureTreeRoot.getParentTree(); + Map numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + assertEquals(33, numberTreeAsMap.size()); + assertEquals(64, Collections.max(numberTreeAsMap.keySet()) + 1); + assertEquals(31, (int) Collections.min(numberTreeAsMap.keySet())); + assertEquals(126, structureTreeRoot.getParentTreeNextKey()); + + PDDocument dst = new PDDocument(); + + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4423-merged.pdf")); + dst.close(); + + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4423-merged.pdf")); + checkWithNumberTree(dst); + checkForPageOrphans(dst); + + structureTreeRoot = dst.getDocumentCatalog().getStructureTreeRoot(); + parentTree = structureTreeRoot.getParentTree(); + numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + assertEquals(33, numberTreeAsMap.size()); + assertEquals(64, Collections.max(numberTreeAsMap.keySet()) + 1); + assertEquals(31, (int) Collections.min(numberTreeAsMap.keySet())); + assertEquals(64, structureTreeRoot.getParentTreeNextKey()); + dst.close(); + + checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4423-merged.pdf")); + } + + /** + * PDFBOX-4009: Test that ParentTreeNextKey is recalculated correctly. + */ + public void testMissingParentTreeNextKey() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4418-000314.pdf")); + PDDocument dst = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4418-000314.pdf")); + // existing numbers are 321..327; ParentTreeNextKey is 408. + // After deletion, it is recalculated in the merge 328. + // That value is added to all numbers of the destination, + // so the new numbers should be 321+328..327+328, i.e. 649..655, + // and this ParentTreeNextKey is 656 at the end. + dst.getDocumentCatalog().getStructureTreeRoot().getCOSObject().removeItem(COSName.PARENT_TREE_NEXT_KEY); + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4418-000314-merged.pdf")); + dst.close(); + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4418-000314-merged.pdf")); + assertEquals(656, dst.getDocumentCatalog().getStructureTreeRoot().getParentTreeNextKey()); + dst.close(); + } + + /** + * PDFBOX-4416: Test merging of /IDTree + *
    + * PDFBOX-4009: test merging to empty destination + * + * @throws IOException + */ + public void testStructureTreeMergeIDTree() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(SRCDIR, "PDFBOX-4417-001031.pdf")); + PDDocument dst = PDDocument.load(new File(SRCDIR, "PDFBOX-4417-054080.pdf")); + + PDNameTreeNode srcIDTree = src.getDocumentCatalog().getStructureTreeRoot().getIDTree(); + Map srcIDTreeMap = PDFMergerUtility.getIDTreeAsMap(srcIDTree); + PDNameTreeNode dstIDTree = dst.getDocumentCatalog().getStructureTreeRoot().getIDTree(); + Map dstIDTreeMap = PDFMergerUtility.getIDTreeAsMap(dstIDTree); + int expectedTotal = srcIDTreeMap.size() + dstIDTreeMap.size(); + assertEquals(192, expectedTotal); + + // PDFBOX-4009, test that empty dest doc still merges structure tree + // (empty dest doc is used in command line app) + PDDocument emptyDest = new PDDocument(); + pdfMergerUtility.appendDocument(emptyDest, src); + src.close(); + src = emptyDest; + assertEquals(4, src.getDocumentCatalog().getStructureTreeRoot().getParentTreeNextKey()); + + pdfMergerUtility.appendDocument(dst, src); + src.close(); + dst.save(new File(TARGETTESTDIR, "PDFBOX-4416-IDTree-merged.pdf")); + dst.close(); + dst = PDDocument.load(new File(TARGETTESTDIR, "PDFBOX-4416-IDTree-merged.pdf")); + checkWithNumberTree(dst); + checkForPageOrphans(dst); + + dstIDTree = dst.getDocumentCatalog().getStructureTreeRoot().getIDTree(); + dstIDTreeMap = PDFMergerUtility.getIDTreeAsMap(dstIDTree); + assertEquals(expectedTotal, dstIDTreeMap.size()); + + dst.close(); + checkStructTreeRootCount(new File(TARGETTESTDIR, "PDFBOX-4416-IDTree-merged.pdf")); + } + + /** + * PDFBOX-4429: merge into destination that has /StructParent(s) entries in the destination file + * but no structure tree. + * + * @throws IOException + */ + public void testMergeBogusStructParents1() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4408.pdf")); + PDDocument dst = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4408.pdf")); + dst.getDocumentCatalog().setStructureTreeRoot(null); + dst.getPage(0).setStructParents(9999); + dst.getPage(0).getAnnotations().get(0).setStructParent(9998); + pdfMergerUtility.appendDocument(dst, src); + checkWithNumberTree(dst); + checkForPageOrphans(dst); + src.close(); + dst.close(); + } + + /** + * PDFBOX-4429: merge into destination that has /StructParent(s) entries in the source file but + * no structure tree. + * + * @throws IOException + */ + public void testMergeBogusStructParents2() throws IOException + { + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + PDDocument src = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4408.pdf")); + PDDocument dst = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4408.pdf")); + src.getDocumentCatalog().setStructureTreeRoot(null); + src.getPage(0).setStructParents(9999); + src.getPage(0).getAnnotations().get(0).setStructParent(9998); + pdfMergerUtility.appendDocument(dst, src); + checkWithNumberTree(dst); + checkForPageOrphans(dst); + src.close(); + dst.close(); + } + + /** + * Test of the parent tree. Didn't work before PDFBOX-4003 because of incompatible class for + * PDNumberTreeNode. + * + * @throws IOException + */ + public void testParentTree() throws IOException + { + PDDocument doc = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3999-GeneralForbearance.pdf")); + PDStructureTreeRoot structureTreeRoot = doc.getDocumentCatalog().getStructureTreeRoot(); + PDNumberTreeNode parentTree = structureTreeRoot.getParentTree(); + parentTree.getValue(0); + Map numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + assertEquals(31, numberTreeAsMap.size()); + assertEquals(31, Collections.max(numberTreeAsMap.keySet()) + 1); + assertEquals(0, (int) Collections.min(numberTreeAsMap.keySet())); + assertEquals(31, structureTreeRoot.getParentTreeNextKey()); + doc.close(); + } + + // PDFBOX-4417: check for multiple /StructTreeRoot entries that was due to + // incorrect merging of /K entries + private void checkStructTreeRootCount(File file) throws IOException + { + int count = 0; + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) + { + String line; + while ((line = br.readLine()) != null) + { + if (line.equals("/Type /StructTreeRoot")) + { + ++count; + } + } + } + assertEquals(1, count); + } + + /** + * PDFBOX-4408: Check that /StructParents values from pages and /StructParent values from + * annotations are found in the /ParentTree. + * + * @param document + */ + void checkWithNumberTree(PDDocument document) throws IOException + { + PDDocumentCatalog documentCatalog = document.getDocumentCatalog(); + PDNumberTreeNode parentTree = documentCatalog.getStructureTreeRoot().getParentTree(); + Map numberTreeAsMap = PDFMergerUtility.getNumberTreeAsMap(parentTree); + Set keySet = numberTreeAsMap.keySet(); + PDAcroForm acroForm = documentCatalog.getAcroForm(); + if (acroForm != null) + { + for (PDField field : acroForm.getFieldTree()) + { + for (PDAnnotationWidget widget : field.getWidgets()) + { + if (widget.getStructParent() >= 0) + { + assertTrue("field '" + field.getFullyQualifiedName() + "' /StructParent " + + widget.getStructParent() + " missing in /ParentTree", + keySet.contains(widget.getStructParent())); + } + } + } + } + for (PDPage page : document.getPages()) + { + if (page.getStructParents() >= 0) + { + assertTrue(keySet.contains(page.getStructParents())); + } + for (PDAnnotation ann : page.getAnnotations()) + { + if (ann.getStructParent() >= 0) + { + assertTrue("/StructParent " + ann.getStructParent() + " missing in /ParentTree", + keySet.contains(ann.getStructParent())); + } + } + } + + // might also test image and form dictionaries... + } + + /** + * PDFBOX-4383: Test that file can be deleted after merge. + * + * @throws IOException + */ + public void testFileDeletion() throws IOException + { + File outFile = new File(TARGETTESTDIR, "PDFBOX-4383-result.pdf"); + + File inFile1 = new File(TARGETTESTDIR, "PDFBOX-4383-src1.pdf"); + File inFile2 = new File(TARGETTESTDIR, "PDFBOX-4383-src2.pdf"); + + createSimpleFile(inFile1); + createSimpleFile(inFile2); + + try (OutputStream out = new FileOutputStream(outFile)) + { + PDFMergerUtility merger = new PDFMergerUtility(); + merger.setDestinationStream(out); + + merger.addSource(inFile1); + merger.addSource(inFile2); + + merger.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); + } + + Files.delete(inFile1.toPath()); + Files.delete(inFile2.toPath()); + Files.delete(outFile.toPath()); + } + + private void checkForPageOrphans(PDDocument doc) throws IOException + { + // check for orphan pages in the StructTreeRoot/K, StructTreeRoot/ParentTree and + // StructTreeRoot/IDTree trees. + PDPageTree pageTree = doc.getPages(); + PDStructureTreeRoot structureTreeRoot = doc.getDocumentCatalog().getStructureTreeRoot(); + checkElement(pageTree, structureTreeRoot.getParentTree().getCOSObject()); + checkElement(pageTree, structureTreeRoot.getK()); + checkForIDTreeOrphans(pageTree, structureTreeRoot); + } + + private void checkForIDTreeOrphans(PDPageTree pageTree, PDStructureTreeRoot structureTreeRoot) + throws IOException + { + PDNameTreeNode idTree = structureTreeRoot.getIDTree(); + if (idTree == null) + { + return; + } + Map map = PDFMergerUtility.getIDTreeAsMap(idTree); + for (PDStructureElement element : map.values()) + { + if (element.getPage() != null) + { + checkForPage(pageTree, element); + } + if (!element.getKids().isEmpty()) + { + checkElement(pageTree, element.getCOSObject().getDictionaryObject(COSName.K)); + } + } + } + + private void createSimpleFile(File file) throws IOException + { + try (PDDocument doc = new PDDocument()) + { + doc.addPage(new PDPage()); + doc.save(file); + } + } + + private class ElementCounter + { + int cnt = 0; + Set set = new HashSet<>(); + + void walk(COSBase base) + { + if (base instanceof COSArray) + { + for (COSBase base2 : (COSArray) base) + { + if (base2 instanceof COSObject) + { + base2 = ((COSObject) base2).getObject(); + } + walk(base2); + } + } + else if (base instanceof COSDictionary) + { + COSDictionary kdict = (COSDictionary) base; + if (kdict.containsKey(COSName.PG)) + { + ++cnt; + set.add(kdict); + } + if (kdict.containsKey(COSName.K)) + { + walk(kdict.getDictionaryObject(COSName.K)); + } + } + } + } + + // Each element can be an array, a dictionary or a number. + // See PDF specification Table 37 - Entries in a number tree node dictionary + // See PDF specification Table 322 - Entries in the structure tree root + // See PDF specification Table 323 - Entries in a structure element dictionary + // See PDF specification Table 325 – Entries in an object reference dictionary + // example of file with /Kids: 000153.pdf 000208.pdf 000314.pdf 000359.pdf 000671.pdf + // from digitalcorpora site + private void checkElement(PDPageTree pageTree, COSBase base) throws IOException + { + if (base instanceof COSArray) + { + for (COSBase base2 : (COSArray) base) + { + if (base2 instanceof COSObject) + { + base2 = ((COSObject) base2).getObject(); + } + checkElement(pageTree, base2); + } + } + else if (base instanceof COSDictionary) + { + COSDictionary kdict = (COSDictionary) base; + if (kdict.containsKey(COSName.PG)) + { + PDStructureElement structureElement = new PDStructureElement(kdict); + checkForPage(pageTree, structureElement); + } + if (kdict.containsKey(COSName.K)) + { + checkElement(pageTree, kdict.getDictionaryObject(COSName.K)); + return; + } + + // if we're in a number tree, check /Nums and /Kids + if (kdict.containsKey(COSName.KIDS)) + { + checkElement(pageTree, kdict.getDictionaryObject(COSName.KIDS)); + } + else if (kdict.containsKey(COSName.NUMS)) + { + checkElement(pageTree, kdict.getDictionaryObject(COSName.NUMS)); + } + + // if we're an object reference dictionary (/OBJR), check the obj + if (kdict.containsKey(COSName.OBJ)) + { + COSDictionary obj = (COSDictionary) kdict.getDictionaryObject(COSName.OBJ); + COSBase type = obj.getDictionaryObject(COSName.TYPE); + if (COSName.ANNOT.equals(type)) + { + PDAnnotation annotation = PDAnnotation.createAnnotation(obj); + PDPage page = annotation.getPage(); + if (page != null) + { + if (pageTree.indexOf(page) == -1) + { + COSBase item = kdict.getItem(COSName.OBJ); + if (item instanceof COSObject) + { + assertTrue("Annotation page is not in the page tree: " + item, pageTree.indexOf(page) != -1); + } + else + { + // don't display because of stack overflow + assertTrue("Annotation page is not in the page tree", pageTree.indexOf(page) != -1); + } + } + } + } + else + { + //TODO needs to be investigated. Specification mentions + // "such as an XObject or an annotation" + fail("Other type: " + type); + } + } + } + } + + // checks that the result file of a merge has the same rendering as the two source files + private void checkMergeIdentical(String filename1, String filename2, String mergeFilename, + MemoryUsageSetting memUsageSetting) + throws IOException + { + int src1PageCount; + BufferedImage[] src1ImageTab; + try (PDDocument srcDoc1 = PDDocument.load(new File(SRCDIR, filename1), (String) null)) + { + src1PageCount = srcDoc1.getNumberOfPages(); + PDFRenderer src1PdfRenderer = new PDFRenderer(srcDoc1); + src1ImageTab = new BufferedImage[src1PageCount]; + for (int page = 0; page < src1PageCount; ++page) + { + src1ImageTab[page] = src1PdfRenderer.renderImageWithDPI(page, DPI); + } + } + + int src2PageCount; + BufferedImage[] src2ImageTab; + try (PDDocument srcDoc2 = PDDocument.load(new File(SRCDIR, filename2), (String) null)) + { + src2PageCount = srcDoc2.getNumberOfPages(); + PDFRenderer src2PdfRenderer = new PDFRenderer(srcDoc2); + src2ImageTab = new BufferedImage[src2PageCount]; + for (int page = 0; page < src2PageCount; ++page) + { + src2ImageTab[page] = src2PdfRenderer.renderImageWithDPI(page, DPI); + } + } + + PDFMergerUtility pdfMergerUtility = new PDFMergerUtility(); + pdfMergerUtility.addSource(new File(SRCDIR, filename1)); + pdfMergerUtility.addSource(new File(SRCDIR, filename2)); + pdfMergerUtility.setDestinationFileName(TARGETTESTDIR + mergeFilename); + pdfMergerUtility.mergeDocuments(memUsageSetting); + + try (PDDocument mergedDoc = PDDocument.load(new File(TARGETTESTDIR, mergeFilename), (String) null)) + { + PDFRenderer mergePdfRenderer = new PDFRenderer(mergedDoc); + int mergePageCount = mergedDoc.getNumberOfPages(); + assertEquals(src1PageCount + src2PageCount, mergePageCount); + for (int page = 0; page < src1PageCount; ++page) + { + BufferedImage bim = mergePdfRenderer.renderImageWithDPI(page, DPI); + checkImagesIdentical(bim, src1ImageTab[page]); + } + for (int page = 0; page < src2PageCount; ++page) + { + int mergePage = page + src1PageCount; + BufferedImage bim = mergePdfRenderer.renderImageWithDPI(mergePage, DPI); + checkImagesIdentical(bim, src2ImageTab[page]); + } + } + } + + private void checkImagesIdentical(BufferedImage bim1, BufferedImage bim2) + { + assertEquals(bim1.getHeight(), bim2.getHeight()); + assertEquals(bim1.getWidth(), bim2.getWidth()); + int w = bim1.getWidth(); + int h = bim1.getHeight(); + for (int i = 0; i < w; ++i) + { + for (int j = 0; j < h; ++j) + { + assertEquals(bim1.getRGB(i, j), bim2.getRGB(i, j)); + } + } + } + + private void checkForPage(PDPageTree pageTree, PDStructureElement structureElement) + { + PDPage page = structureElement.getPage(); + if (page != null) + { + assertTrue("Page is not in the page tree", pageTree.indexOf(page) != -1); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PageExtractorTest.java b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PageExtractorTest.java new file mode 100644 index 00000000000..9f14381031d --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PageExtractorTest.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.io.File; +import junit.framework.TestCase; +import org.apache.pdfbox.pdmodel.PDDocument; + +/** + * Test suite for PageExtractor. + * + * This is just some simple tests based on a test document. It merely ensures + * that the correct number of pages are extracted as this is virtually the only + * thing which could go wrong when coping pages from one PDF to a new one. + * + * @author Adam Nichols + */ +public class PageExtractorTest extends TestCase +{ + + public PageExtractorTest(String testName) + { + super(testName); + } + + @Override + protected void setUp() throws Exception + { + } + + @Override + protected void tearDown() throws Exception + { + } + + private void closeDoc(PDDocument doc) + { + if(doc != null) + { + try + { + doc.close(); + } + catch(Exception e) + { + /* Can't do much about this... */ + } + } + } + + /** + * Test of extract method, of class org.apache.pdfbox.util.PageExtractor. + */ + public void testExtract() throws Exception + { + PDDocument sourcePdf = null; + PDDocument result = null; + try + { + // this should work for most users + sourcePdf = PDDocument.load(new File("src/test/resources/input/cweb.pdf")); + PageExtractor instance = new PageExtractor(sourcePdf); + result = instance.extract(); + assertEquals(sourcePdf.getNumberOfPages(), result.getNumberOfPages()); + closeDoc(result); + + instance = new PageExtractor(sourcePdf, 1, 1); + result = instance.extract(); + assertEquals(1, result.getNumberOfPages()); + closeDoc(result); + + instance = new PageExtractor(sourcePdf, 1, 5); + result = instance.extract(); + assertEquals(5, result.getNumberOfPages()); + closeDoc(result); + + instance = new PageExtractor(sourcePdf, 5, 10); + result = instance.extract(); + assertEquals(6, result.getNumberOfPages()); + closeDoc(result); + + instance = new PageExtractor(sourcePdf, 2, 1); + result = instance.extract(); + assertEquals(0, result.getNumberOfPages()); + closeDoc(result); + } + finally + { + closeDoc(sourcePdf); + closeDoc(result); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/multipdf/TestLayerUtility.java b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/TestLayerUtility.java new file mode 100644 index 00000000000..ee5fb7cc850 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/multipdf/TestLayerUtility.java @@ -0,0 +1,191 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.multipdf; + +import java.awt.Color; +import java.awt.geom.AffineTransform; +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup; +import org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentProperties; +import org.apache.pdfbox.util.Matrix; + +/** + * Tests the {@link org.apache.pdfbox.multipdf.LayerUtility} class. + * + */ +public class TestLayerUtility extends TestCase +{ + + private final File testResultsDir = new File("target/test-output"); + + /** {@inheritDoc} */ + @Override + protected void setUp() throws Exception + { + super.setUp(); + testResultsDir.mkdirs(); + } + + /** + * Tests layer import. + * @throws Exception if an error occurs + */ + public void testLayerImport() throws Exception + { + File mainPDF = createMainPDF(); + File overlay1 = createOverlay1(); + File targetFile = new File(testResultsDir, "text-with-form-overlay.pdf"); + + try (PDDocument targetDoc = PDDocument.load(mainPDF); + PDDocument overlay1Doc = PDDocument.load(overlay1)) + { + LayerUtility layerUtil = new LayerUtility(targetDoc); + PDFormXObject form = layerUtil.importPageAsForm(overlay1Doc, 0); + PDPage targetPage = targetDoc.getPage(0); + layerUtil.wrapInSaveRestore(targetPage); + AffineTransform at = new AffineTransform(); + layerUtil.appendFormAsLayer(targetPage, form, at, "overlay"); + + targetDoc.save(targetFile.getAbsolutePath()); + } + + try (PDDocument doc = PDDocument.load(targetFile)) + { + PDDocumentCatalog catalog = doc.getDocumentCatalog(); + + //OCGs require PDF 1.5 or later + assertEquals(1.5f, doc.getVersion()); + + PDPage page = doc.getPage(0); + PDOptionalContentGroup ocg = (PDOptionalContentGroup) page.getResources() + .getProperties(COSName.getPDFName("oc1")); + assertNotNull(ocg); + assertEquals("overlay", ocg.getName()); + + PDOptionalContentProperties ocgs = catalog.getOCProperties(); + PDOptionalContentGroup overlay = ocgs.getGroup("overlay"); + assertEquals(ocg.getName(), overlay.getName()); + } + } + + private File createMainPDF() throws IOException + { + File targetFile = new File(testResultsDir, "text-doc.pdf"); + try (PDDocument doc = new PDDocument()) + { + //Create new page + PDPage page = new PDPage(); + doc.addPage(page); + PDResources resources = page.getResources(); + if( resources == null ) + { + resources = new PDResources(); + page.setResources( resources ); + } + + final String[] text = new String[] { + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer fermentum lacus in eros", + "condimentum eget tristique risus viverra. Sed ac sem et lectus ultrices placerat. Nam", + "fringilla tincidunt nulla id euismod. Vivamus eget mauris dui. Mauris luctus ullamcorper", + "leo, et laoreet diam suscipit et. Nulla viverra commodo sagittis. Integer vitae rhoncus velit.", + "Mauris porttitor ipsum in est sagittis non luctus purus molestie. Sed placerat aliquet", + "vulputate." + }; + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false)) + { + //Setup page content stream and paint background/title + PDFont font = PDType1Font.HELVETICA_BOLD; + contentStream.beginText(); + contentStream.newLineAtOffset(50, 720); + contentStream.setFont(font, 14); + contentStream.showText("Simple test document with text."); + contentStream.endText(); + font = PDType1Font.HELVETICA; + contentStream.beginText(); + int fontSize = 12; + contentStream.setFont(font, fontSize); + contentStream.newLineAtOffset(50, 700); + for (String line : text) + { + contentStream.newLineAtOffset(0, -fontSize * 1.2f); + contentStream.showText(line); + } + contentStream.endText(); + } + doc.save(targetFile.getAbsolutePath()); + } + return targetFile; + } + + private File createOverlay1() throws IOException + { + File targetFile = new File(testResultsDir, "overlay1.pdf"); + try (PDDocument doc = new PDDocument()) + { + //Create new page + PDPage page = new PDPage(); + doc.addPage(page); + PDResources resources = page.getResources(); + if( resources == null ) + { + resources = new PDResources(); + page.setResources( resources ); + } + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.OVERWRITE, false)) + { + //Setup page content stream and paint background/title + PDFont font = PDType1Font.HELVETICA_BOLD; + contentStream.setNonStrokingColor(Color.LIGHT_GRAY); + contentStream.beginText(); + float fontSize = 96; + contentStream.setFont(font, fontSize); + String text = "OVERLAY"; + //float sw = font.getStringWidth(text); + //Too bad, base 14 fonts don't return character metrics. + PDRectangle crop = page.getCropBox(); + float cx = crop.getWidth() / 2f; + float cy = crop.getHeight() / 2f; + Matrix transform = new Matrix(); + transform.translate(cx, cy); + transform.rotate(Math.toRadians(45)); + transform.translate(-190 /* sw/2 */, 0); + contentStream.setTextMatrix(transform); + contentStream.showText(text); + contentStream.endText(); + } + doc.save(targetFile.getAbsolutePath()); + } + return targetFile; + } +} diff --git a/src/test/pdfbox/package.html b/pdfbox/src/test/java/org/apache/pdfbox/package.html similarity index 100% rename from src/test/pdfbox/package.html rename to pdfbox/src/test/java/org/apache/pdfbox/package.html diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/EndstreamOutputStreamTest.java b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/EndstreamOutputStreamTest.java new file mode 100644 index 00000000000..52a69438424 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/EndstreamOutputStreamTest.java @@ -0,0 +1,140 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdfparser; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Map; +import org.apache.pdfbox.io.IOUtils; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; +import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; +import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; +import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; +import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; +import org.junit.Assert; +import org.junit.Test; + +/** + * + * @author Tilman Hausherr + */ +public class EndstreamOutputStreamTest +{ + @Test + public void testEndstreamOutputStream() throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + EndstreamOutputStream feos = new EndstreamOutputStream(baos); + byte[] tab1 = {1, 2, 3, 4}; + byte[] tab2 = {5, 6, 7, '\r', '\n'}; + byte[] tab3 = {8, 9, '\r', '\n'}; + feos.write(tab1, 0, tab1.length); + feos.write(tab2, 0, tab2.length); + feos.write(tab3, 0, tab3.length); + feos.flush(); + byte[] expectedResult1 = { 1, 2, 3, 4, 5, 6, 7, '\r', '\n', 8, 9}; + Assert.assertArrayEquals(expectedResult1, baos.toByteArray()); + + baos = new ByteArrayOutputStream(); + feos = new EndstreamOutputStream(baos); + byte[] tab4 = {1, 2, 3, 4}; + byte[] tab5 = {5, 6, 7, '\r' }; + byte[] tab6 = {8, 9, '\n'}; + feos.write(tab4, 0, tab4.length); + feos.write(tab5, 0, tab5.length); + feos.write(tab6, 0, tab6.length); + feos.flush(); + byte[] expectedResult2 = { 1, 2, 3, 4, 5, 6, 7, '\r', 8, 9}; + Assert.assertArrayEquals(expectedResult2, baos.toByteArray()); + + baos = new ByteArrayOutputStream(); + feos = new EndstreamOutputStream(baos); + byte[] tab7 = {1, 2, 3, 4, '\r'}; + byte[] tab8 = {'\n', 5, 6, 7, '\n' }; + byte[] tab9 = {8, 9, '\r'}; // final CR is not to be discarded + feos.write(tab7, 0, tab7.length); + feos.write(tab8, 0, tab8.length); + feos.write(tab9, 0, tab9.length); + feos.flush(); + byte[] expectedResult3 = { 1, 2, 3, 4, '\r', '\n', 5, 6, 7, '\n', 8, 9, '\r'}; + Assert.assertArrayEquals(expectedResult3, baos.toByteArray()); + + baos = new ByteArrayOutputStream(); + feos = new EndstreamOutputStream(baos); + byte[] tab10 = {1, 2, 3, 4, '\r'}; + byte[] tab11 = {'\n', 5, 6, 7, '\r' }; + byte[] tab12 = {8, 9, '\r'}; + byte[] tab13 = {'\n'}; // final CR LF across buffers + feos.write(tab10, 0, tab10.length); + feos.write(tab11, 0, tab11.length); + feos.write(tab12, 0, tab12.length); + feos.write(tab13, 0, tab13.length); + feos.flush(); + byte[] expectedResult4 = { 1, 2, 3, 4, '\r', '\n', 5, 6, 7, '\r', 8, 9}; + Assert.assertArrayEquals(expectedResult4, baos.toByteArray()); + + baos = new ByteArrayOutputStream(); + feos = new EndstreamOutputStream(baos); + byte[] tab14 = {1, 2, 3, 4, '\r'}; + byte[] tab15 = {'\n', 5, 6, 7, '\r' }; + byte[] tab16 = {8, 9, '\n'}; + byte[] tab17 = {'\r'}; // final CR is not to be discarded + feos.write(tab14, 0, tab14.length); + feos.write(tab15, 0, tab15.length); + feos.write(tab16, 0, tab16.length); + feos.write(tab17, 0, tab17.length); + feos.flush(); + byte[] expectedResult5 = { 1, 2, 3, 4, '\r', '\n', 5, 6, 7, '\r', 8, 9, '\n', '\r'}; + Assert.assertArrayEquals(expectedResult5, baos.toByteArray()); + } + + @Test + public void testPDFBox2079EmbeddedFile() throws IOException + { + // there should be 17660 bytes in the zip file. + // in PDFBox 1.8.5, windows newline is appended to the byte stream + // yielding 17662 bytes, which causes a problem for ZipFile in Java 1.6 + + // Modification of embedded_zip.pdf for 2.0: + // /Length entry removed to force usage of EndstreamOutputStream + try (PDDocument doc = PDDocument.load( + new File("src/test/resources/org/apache/pdfbox/pdfparser", "embedded_zip.pdf"))) + { + PDDocumentCatalog catalog = doc.getDocumentCatalog(); + PDDocumentNameDictionary names = catalog.getNames(); + PDEmbeddedFilesNameTreeNode node = names.getEmbeddedFiles(); + Map map = node.getNames(); + Assert.assertEquals(1, map.size()); + PDComplexFileSpecification spec = map.get("My first attachment"); + PDEmbeddedFile file = spec.getEmbeddedFile(); + InputStream input = file.createInputStream(); + File d = new File("target/test-output"); + d.mkdirs(); + File f = new File(d, spec.getFile()); + try (OutputStream os = new FileOutputStream(f)) + { + IOUtils.copy(input, os); + } + Assert.assertEquals(17660, f.length()); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/PDFStreamParserTest.java b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/PDFStreamParserTest.java new file mode 100644 index 00000000000..6b234a82b6a --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/PDFStreamParserTest.java @@ -0,0 +1,124 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfparser; + +import java.io.IOException; +import java.util.List; +import junit.framework.TestCase; +import org.apache.pdfbox.contentstream.operator.Operator; +import org.apache.pdfbox.contentstream.operator.OperatorName; + +import static org.junit.Assert.assertArrayEquals; + +/** + * Tests for PDFStreamParser. + * + * @author Tilman Hausherr + */ +public class PDFStreamParserTest extends TestCase +{ + + /** + * Tests for inline images, whether the EI is correctly identified as + * ending. To test hasNoFollowingBinData(), the amount of data after EI nust + * be at least PDFStreamParser.MAX_BIN_CHAR_TEST_LENGTH + * + * @throws IOException + */ + public void testInlineImages() throws IOException + { + testInlineImage2ops("ID\n12345EI Q", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC", "12345", "EMC"); + testInlineImage2ops("ID\n12345EI Q ", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC ", "12345", "EMC"); + testInlineImage2ops("ID\n12345EI Q", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC", "12345", "EMC"); + testInlineImage2ops("ID\n12345EI Q ", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC ", "12345", "EMC"); + + testInlineImage2ops("ID\n12345EI \000Q", "12345", "Q"); + + testInlineImage2ops("ID\n12345EI Q ", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC ", "12345", "EMC"); + + testInlineImage1op("ID\n12345EI", "12345"); + testInlineImage1op("ID\n12345EI ", "12345"); + + testInlineImage2ops("ID\n12345EI Q ", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC ", "12345", "EMC"); + testInlineImage2ops("ID\n12345EI Q", "12345", "Q"); + testInlineImage2ops("ID\n12345EI EMC", "12345", "EMC"); + + testInlineImage1op("ID\n12EI5EI", "12EI5"); + testInlineImage1op("ID\n12EI5EI ", "12EI5"); + testInlineImage1op("ID\n12EI5EIQEI", "12EI5EIQ"); + testInlineImage2ops("ID\n12EI5EIQEI Q", "12EI5EIQ", "Q"); + testInlineImage2ops("ID\n12EI5EI Q", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI Q ", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI EMC", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI EMC ", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI Q", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI Q ", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI EMC", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI EMC ", "12EI5", "EMC"); + + // MAX_BIN_CHAR_TEST_LENGTH is currently 10, test boundaries + // 1234567890 + testInlineImage2ops("ID\n12EI5EI EMC ", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI EMC ", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI EMC ", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI EMC ", "12EI5", "EMC"); + testInlineImage2ops("ID\n12EI5EI Q ", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI Q ", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI Q ", "12EI5", "Q"); + testInlineImage2ops("ID\n12EI5EI Q ", "12EI5", "Q"); + } + + // checks whether there are two operators, one inline image and the named operator + private void testInlineImage2ops(String s, String imageDataString, String opName) throws IOException + { + List tokens = parseTokenString(s); + + assertEquals(2, tokens.size()); + + assertEquals(OperatorName.BEGIN_INLINE_IMAGE_DATA, ((Operator) tokens.get(0)).getName()); + assertEquals(imageDataString.length(), ((Operator) tokens.get(0)).getImageData().length); + assertArrayEquals(imageDataString.getBytes(), ((Operator) tokens.get(0)).getImageData()); + + assertEquals(opName, ((Operator) tokens.get(1)).getName()); + } + + // checks whether there is one operator, one inline image + private void testInlineImage1op(String s, String imageDataString) throws IOException + { + List tokens = parseTokenString(s); + + assertEquals(1, tokens.size()); + + assertEquals(OperatorName.BEGIN_INLINE_IMAGE_DATA, ((Operator) tokens.get(0)).getName()); + assertEquals(imageDataString.length(), ((Operator) tokens.get(0)).getImageData().length); + assertArrayEquals(imageDataString.getBytes(), ((Operator) tokens.get(0)).getImageData()); + } + + // parse string and return list of tokens + private List parseTokenString(String s) throws IOException + { + PDFStreamParser pdfStreamParser = new PDFStreamParser(s.getBytes()); + pdfStreamParser.parse(); + return pdfStreamParser.getTokens(); + } + +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java new file mode 100644 index 00000000000..fa7047d7e4f --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/TestPDFParser.java @@ -0,0 +1,353 @@ +/***************************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +package org.apache.pdfbox.pdfparser; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.net.URISyntaxException; + +import org.apache.pdfbox.cos.COSDocument; +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream; +import org.apache.pdfbox.io.RandomAccessRead; +import org.apache.pdfbox.io.ScratchFile; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.rendering.PDFRenderer; +import org.apache.pdfbox.util.DateConverter; +import org.junit.Before; +import org.junit.Test; + +public class TestPDFParser +{ + private static final String PATH_OF_PDF = "src/test/resources/input/yaddatest.pdf"; + private static final File tmpDirectory = new File(System.getProperty("java.io.tmpdir")); + private static final File TARGETPDFDIR = new File("target/pdfs"); + + private int numberOfTmpFiles = 0; + + /** + * Initialize the number of tmp file before the test + * + * @throws Exception + */ + @Before + public void setUp() throws Exception + { + numberOfTmpFiles = getNumberOfTempFile(); + } + + /** + * Count the number of temporary files + * + * @return + */ + private int getNumberOfTempFile() + { + int result = 0; + File[] tmpPdfs = tmpDirectory.listFiles(new FilenameFilter() + { + @Override + public boolean accept(File dir, String name) + { + return name.startsWith(COSParser.TMP_FILE_PREFIX) + && name.endsWith("pdf"); + } + }); + + if (tmpPdfs != null) + { + result = tmpPdfs.length; + } + + return result; + } + + @Test + public void testPDFParserFile() throws IOException + { + executeParserTest(new RandomAccessBufferedFileInputStream(new File(PATH_OF_PDF)), MemoryUsageSetting.setupMainMemoryOnly()); + } + + @Test + public void testPDFParserInputStream() throws IOException + { + executeParserTest(new RandomAccessBufferedFileInputStream(new FileInputStream(PATH_OF_PDF)), MemoryUsageSetting.setupMainMemoryOnly()); + } + + @Test + public void testPDFParserFileScratchFile() throws IOException + { + executeParserTest(new RandomAccessBufferedFileInputStream(new File(PATH_OF_PDF)), MemoryUsageSetting.setupTempFileOnly()); + } + + @Test + public void testPDFParserInputStreamScratchFile() throws IOException + { + executeParserTest(new RandomAccessBufferedFileInputStream(new FileInputStream(PATH_OF_PDF)), MemoryUsageSetting.setupTempFileOnly()); + } + + @Test + public void testPDFParserMissingCatalog() throws IOException, URISyntaxException + { + // PDFBOX-3060 + PDDocument.load(new File(TestPDFParser.class.getResource("MissingCatalog.pdf").toURI())).close(); + } + + /** + * Test whether /Info dictionary is retrieved correctly when rebuilding the trailer of a corrupt + * file. An incorrect algorithm would result in an outline dictionary being mistaken for an + * /Info. + * + * @throws IOException + */ + @Test + public void testPDFBox3208() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR,"PDFBOX-3208-L33MUTT2SVCWGCS6UIYL5TH3PNPXHIS6.pdf"))) + { + PDDocumentInformation di = doc.getDocumentInformation(); + assertEquals("Liquent Enterprise Services", di.getAuthor()); + assertEquals("Liquent services server", di.getCreator()); + assertEquals("Amyuni PDF Converter version 4.0.0.9", di.getProducer()); + assertEquals("", di.getKeywords()); + assertEquals("", di.getSubject()); + assertEquals("892B77DE781B4E71A1BEFB81A51A5ABC_20140326022424.docx", di.getTitle()); + assertEquals(DateConverter.toCalendar("D:20140326142505-02'00'"), di.getCreationDate()); + assertEquals(DateConverter.toCalendar("20140326172513Z"), di.getModificationDate()); + } + } + + /** + * Test whether the /Info is retrieved correctly when rebuilding the trailer of a corrupt file, + * despite the /Info dictionary not having a modification date. + * + * @throws IOException + */ + @Test + public void testPDFBox3940() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR,"PDFBOX-3940-079977.pdf"))) + { + PDDocumentInformation di = doc.getDocumentInformation(); + assertEquals("Unknown", di.getAuthor()); + assertEquals("C:REGULA~1IREGSFR_EQ_EM.WP", di.getCreator()); + assertEquals("Acrobat PDFWriter 3.02 for Windows", di.getProducer()); + assertEquals("", di.getKeywords()); + assertEquals("", di.getSubject()); + assertEquals("C:REGULA~1IREGSFR_EQ_EM.PDF", di.getTitle()); + assertEquals(DateConverter.toCalendar("Tuesday, July 28, 1998 4:00:09 PM"), di.getCreationDate()); + } + } + + /** + * PDFBOX-3783: test parsing of file with trash after %%EOF. + * + * @throws IOException + */ + @Test + public void testPDFBox3783() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR,"PDFBOX-3783-72GLBIGUC6LB46ELZFBARRJTLN4RBSQM.pdf")).close(); + } + + /** + * PDFBOX-3785, PDFBOX-3957: + * Test whether truncated file with several revisions has correct page count. + * + * @throws IOException + */ + @Test + public void testPDFBox3785() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR,"PDFBOX-3785-202097.pdf"))) + { + assertEquals(11, doc.getNumberOfPages()); + } + } + + /** + * PDFBOX-3947: test parsing of file with broken object stream. + * + * @throws IOException + */ + @Test + public void testPDFBox3947() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3947-670064.pdf")).close(); + } + + /** + * PDFBOX-3948: test parsing of file with object stream containing some unexpected newlines. + * + * @throws IOException + */ + @Test + public void testPDFBox3948() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3948-EUWO6SQS5TM4VGOMRD3FLXZHU35V2CP2.pdf")).close(); + } + + /** + * PDFBOX-3949: test parsing of file with incomplete object stream. + * + * @throws IOException + */ + @Test + public void testPDFBox3949() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3949-MKFYUGZWS3OPXLLVU2Z4LWCTVA5WNOGF.pdf")).close(); + } + + /** + * PDFBOX-3950: test parsing and rendering of truncated file with missing pages. + * + * @throws IOException + */ + @Test + public void testPDFBox3950() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3950-23EGDHXSBBYQLKYOKGZUOVYVNE675PRD.pdf"))) + { + assertEquals(4, doc.getNumberOfPages()); + PDFRenderer renderer = new PDFRenderer(doc); + for (int i = 0; i < doc.getNumberOfPages(); ++i) + { + try + { + renderer.renderImage(i); + } + catch (IOException ex) + { + if (i == 3 && ex.getMessage().equals("Missing descendant font array")) + { + continue; + } + throw ex; + } + } + } + } + + /** + * PDFBOX-3951: test parsing of truncated file. + * + * @throws IOException + */ + @Test + public void testPDFBox3951() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3951-FIHUZWDDL2VGPOE34N6YHWSIGSH5LVGZ.pdf"))) + { + assertEquals(143, doc.getNumberOfPages()); + } + } + + /** + * PDFBOX-3964: test parsing of broken file. + * + * @throws IOException + */ + @Test + public void testPDFBox3964() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-3964-c687766d68ac766be3f02aaec5e0d713_2.pdf"))) + { + assertEquals(10, doc.getNumberOfPages()); + } + } + + /** + * Test whether /Info dictionary is retrieved correctly in brute force search for the + * Info/Catalog dictionaries. + * + * @throws IOException + */ + @Test + public void testPDFBox3977() throws IOException + { + try (PDDocument doc = PDDocument.load(new File(TARGETPDFDIR,"PDFBOX-3977-63NGFQRI44HQNPIPEJH5W2TBM6DJZWMI.pdf"))) + { + PDDocumentInformation di = doc.getDocumentInformation(); + assertEquals("QuarkXPress(tm) 6.52", di.getCreator()); + assertEquals("Acrobat Distiller 7.0 pour Macintosh", di.getProducer()); + assertEquals("Fich sal Fabr corr1 (Page 6)", di.getTitle()); + assertEquals(DateConverter.toCalendar("D:20070608151915+02'00'"), di.getCreationDate()); + assertEquals(DateConverter.toCalendar("D:20080604152122+02'00'"), di.getModificationDate()); + } + } + + /** + * Test parsing the "genko_oc_shiryo1.pdf" file, which is susceptible to regression. + * + * @throws IOException + */ + @Test + public void testParseGenko() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR, "genko_oc_shiryo1.pdf")).close(); + } + + /** + * Test parsing the file from PDFBOX-4338, which brought an + * ArrayIndexOutOfBoundsException before the bug was fixed. + * + * @throws IOException + */ + @Test + public void testPDFBox4338() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4338.pdf")).close(); + } + + /** + * Test parsing the file from PDFBOX-4339, which brought a + * NullPointerException before the bug was fixed. + * + * @throws IOException + */ + @Test + public void testPDFBox4339() throws IOException + { + PDDocument.load(new File(TARGETPDFDIR, "PDFBOX-4339.pdf")).close(); + } + + private void executeParserTest(RandomAccessRead source, MemoryUsageSetting memUsageSetting) throws IOException + { + ScratchFile scratchFile = new ScratchFile(memUsageSetting); + PDFParser pdfParser = new PDFParser(source, scratchFile); + pdfParser.parse(); + try (COSDocument doc = pdfParser.getDocument()) + { + assertNotNull(doc); + } + source.close(); + // number tmp file must be the same + assertEquals(numberOfTmpFiles, getNumberOfTempFile()); + } + +} diff --git a/src/test/pdfbox/pdfparser/package.html b/pdfbox/src/test/java/org/apache/pdfbox/pdfparser/package.html similarity index 100% rename from src/test/pdfbox/pdfparser/package.html rename to pdfbox/src/test/java/org/apache/pdfbox/pdfparser/package.html diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdfwriter/COSWriterTest.java b/pdfbox/src/test/java/org/apache/pdfbox/pdfwriter/COSWriterTest.java new file mode 100644 index 00000000000..004a2b79927 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdfwriter/COSWriterTest.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfwriter; + +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.junit.Test; + +public class COSWriterTest +{ + /** + * PDFBOX-4241: check whether the output stream is closed twice. + * + * @throws IOException + */ + @Test + public void testPDFBox4241() throws IOException + { + try (PDDocument doc = new PDDocument()) + { + + PDPage page = new PDPage(); + doc.addPage(page); + doc.save(new BufferedOutputStream(new ByteArrayOutputStream(1024) + { + private boolean open = true; + + @Override + public void close() throws IOException + { + //Thread.dumpStack(); + + open = false; + super.close(); + } + + @Override + public void flush() throws IOException + { + if (!open) + { + throw new IOException("Stream already closed"); + } + + //Thread.dumpStack(); + } + })); + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdfwriter/COSWriterXRefEntryTest.java b/pdfbox/src/test/java/org/apache/pdfbox/pdfwriter/COSWriterXRefEntryTest.java new file mode 100644 index 00000000000..88a04050aff --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdfwriter/COSWriterXRefEntryTest.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdfwriter; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class COSWriterXRefEntryTest +{ + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void compareToInputNullOutputNegative() + { + // Arrange + final COSWriterXRefEntry objectUnderTest = new COSWriterXRefEntry(0L, null, null); + final COSWriterXRefEntry obj = null; + + // Act + final int retval = objectUnderTest.compareTo(obj); + + // Assert result + Assert.assertEquals(-1, retval); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/PageLayoutTest.java b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/PageLayoutTest.java new file mode 100644 index 00000000000..14e19487c9c --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/PageLayoutTest.java @@ -0,0 +1,65 @@ +/* + * Copyright 2016 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; +import static org.junit.Assert.assertEquals; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class PageLayoutTest +{ + /** + * @author Tilman Hausherr + * + * Test for completeness (PDFBOX-3362). + */ + @Test + public void testValues() + { + Set pageLayoutSet = EnumSet.noneOf(PageLayout.class); + Set stringSet = new HashSet<>(); + for (PageLayout pl : PageLayout.values()) + { + String s = pl.stringValue(); + stringSet.add(s); + pageLayoutSet.add(PageLayout.fromString(s)); + } + assertEquals(PageLayout.values().length, pageLayoutSet.size()); + assertEquals(PageLayout.values().length, stringSet.size()); + } + + /** + * @author John Bergqvist + */ + @Rule public ExpectedException thrown = ExpectedException.none(); + @Test + public void fromStringInputNotNullOutputIllegalArgumentException() + { + + // Arrange + final String value = "SinglePag"; + + // Act + thrown.expect(IllegalArgumentException.class); + PageLayout.fromString(value); + + // Method is not expected to return due to exception thrown + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/PageModeTest.java b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/PageModeTest.java new file mode 100644 index 00000000000..7781ab9c275 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/PageModeTest.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class PageModeTest +{ + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void fromStringInputNotNullOutputNotNull() + { + // Arrange + final String value = "FullScreen"; + + // Act + final PageMode retval = PageMode.fromString(value); + + // Assert result + Assert.assertEquals(PageMode.FULL_SCREEN, retval); + } + + @Test + public void fromStringInputNotNullOutputNotNull2() + { + // Arrange + final String value = "UseThumbs"; + + // Act + final PageMode retval = PageMode.fromString(value); + + // Assert result + Assert.assertEquals(PageMode.USE_THUMBS, retval); + } + + @Test + public void fromStringInputNotNullOutputNotNull3() + { + // Arrange + final String value = "UseOC"; + + // Act + final PageMode retval = PageMode.fromString(value); + + // Assert result + Assert.assertEquals(PageMode.USE_OPTIONAL_CONTENT, retval); + } + + @Test + public void fromStringInputNotNullOutputNotNull4() + { + // Arrange + final String value = "UseNone"; + + // Act + final PageMode retval = PageMode.fromString(value); + + // Assert result + Assert.assertEquals(PageMode.USE_NONE, retval); + } + + @Test + public void fromStringInputNotNullOutputNotNull5() + { + // Arrange + final String value = "UseAttachments"; + + // Act + final PageMode retval = PageMode.fromString(value); + + // Assert result + Assert.assertEquals(PageMode.USE_ATTACHMENTS, retval); + } + + @Test + public void fromStringInputNotNullOutputNotNull6() + { + // Arrange + final String value = "UseOutlines"; + + // Act + final PageMode retval = PageMode.fromString(value); + + // Assert result + Assert.assertEquals(PageMode.USE_OUTLINES, retval); + } + + @Test + public void fromStringInputNotNullOutputIllegalArgumentException() + { + // Arrange + final String value = ""; + + // Act + thrown.expect(IllegalArgumentException.class); + PageMode.fromString(value); + + // Method is not expected to return due to exception thrown + } + + @Test + public void fromStringInputNotNullOutputIllegalArgumentException2() + { + // Arrange + final String value = "Dulacb`ecj"; + + // Act + thrown.expect(IllegalArgumentException.class); + PageMode.fromString(value); + + // Method is not expected to return due to exception thrown + } + + @Test + public void stringValueOutputNotNull() + { + // Arrange + final PageMode objectUnderTest = PageMode.USE_OPTIONAL_CONTENT; + + // Act + final String retval = objectUnderTest.stringValue(); + + // Assert result + Assert.assertEquals("UseOC", retval); + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java new file mode 100644 index 00000000000..7d87af912f4 --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestFDF.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URISyntaxException; +import java.util.List; +import junit.framework.TestCase; +import org.apache.pdfbox.pdmodel.fdf.FDFDocument; +import org.apache.pdfbox.pdmodel.fdf.FDFField; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; + +/** + * This will test the FDF algorithms in PDFBox. + * + * @author Ben Litchfield + * @author Tilman Hausherr + * + */ +public class TestFDF extends TestCase +{ + /** + * Test load two simple fdf files with two fields. One of the files does not have a + * /Type/Catalog entry, which isn't required anyway (PDFBOX-3639). + * + * @throws URISyntaxException + * @throws IOException + */ + public void testLoad2() throws URISyntaxException, IOException + { + checkFields("/org/apache/pdfbox/pdfparser/withcatalog.fdf"); + checkFields("/org/apache/pdfbox/pdfparser/nocatalog.fdf"); + } + + private void checkFields(String name) throws IOException, URISyntaxException + { + try (FDFDocument fdf = FDFDocument.load(new File(TestFDF.class.getResource(name).toURI()))) + { + fdf.saveXFDF(new PrintWriter(new ByteArrayOutputStream())); + + List fields = fdf.getCatalog().getFDF().getFields(); + + assertEquals(2, fields.size()); + assertEquals("Field1", fields.get(0).getPartialFieldName()); + assertEquals("Field2", fields.get(1).getPartialFieldName()); + assertEquals("Test1", fields.get(0).getValue()); + assertEquals("Test2", fields.get(1).getValue()); + + try (PDDocument pdf = PDDocument.load(new File(TestFDF.class.getResource("/org/apache/pdfbox/pdfparser/SimpleForm2Fields.pdf").toURI()))) + { + PDAcroForm acroForm = pdf.getDocumentCatalog().getAcroForm(); + acroForm.importFDF(fdf); + assertEquals("Test1", acroForm.getField("Field1").getValueAsString()); + assertEquals("Test2", acroForm.getField("Field2").getValueAsString()); + } + } + } +} diff --git a/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocument.java b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocument.java new file mode 100644 index 00000000000..3c181d6187d --- /dev/null +++ b/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDDocument.java @@ -0,0 +1,216 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.util.Arrays; +import java.util.Locale; + +import org.apache.pdfbox.io.IOUtils; + +import junit.framework.TestCase; + +/** + * Testcase introduced with PDFBOX-1581. + * + */ +public class TestPDDocument extends TestCase +{ + private final File testResultsDir = new File("target/test-output"); + + @Override + protected void setUp() throws Exception + { + super.setUp(); + testResultsDir.mkdirs(); + } + + /** + * Test document save/load using a stream. + * @throws IOException if something went wrong + */ + public void testSaveLoadStream() throws IOException + { + // Create PDF with one blank page + PDDocument document = new PDDocument(); + document.addPage(new PDPage()); + + // Save + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + document.save(baos); + document.close(); + + // Verify content + byte[] pdf = baos.toByteArray(); + assertTrue(pdf.length > 200); + assertEquals("%PDF-1.4", new String(Arrays.copyOfRange(pdf, 0, 8), "UTF-8")); + assertEquals("%%EOF\n", new String(Arrays.copyOfRange(pdf, pdf.length - 6, pdf.length), "UTF-8")); + + // Load + PDDocument loadDoc = PDDocument.load(new ByteArrayInputStream(pdf)); + assertEquals(1, loadDoc.getNumberOfPages()); + loadDoc.close(); + } + + /** + * Test document save/load using a file. + * @throws IOException if something went wrong + */ + public void testSaveLoadFile() throws IOException + { + // Create PDF with one blank page + PDDocument document = new PDDocument(); + document.addPage(new PDPage()); + + // Save + File targetFile = new File(testResultsDir, "pddocument-saveloadfile.pdf"); + document.save(targetFile); + document.close(); + + // Verify content + assertTrue(targetFile.length() > 200); + InputStream in = new FileInputStream(targetFile); + byte[] pdf = IOUtils.toByteArray(in); + in.close(); + assertTrue(pdf.length > 200); + assertEquals("%PDF-1.4", new String(Arrays.copyOfRange(pdf, 0, 8), "UTF-8")); + assertEquals("%%EOF\n", new String(Arrays.copyOfRange(pdf, pdf.length - 6, pdf.length), "UTF-8")); + + // Load + PDDocument loadDoc = PDDocument.load(targetFile); + assertEquals(1, loadDoc.getNumberOfPages()); + loadDoc.close(); + } + + /** + * Test get/setVersion. + * @throws IOException if something went wrong + */ + public void testVersions() throws IOException + { + PDDocument document = new PDDocument(); + // test default version + assertEquals(1.4f, document.getVersion()); + assertEquals(1.4f, document.getDocument().getVersion()); + assertEquals("1.4", document.getDocumentCatalog().getVersion()); + // force downgrading version (header) + document.getDocument().setVersion(1.3f); + document.getDocumentCatalog().setVersion(null); + // test new version (header) + assertEquals(1.3f, document.getVersion()); + assertEquals(1.3f, document.getDocument().getVersion()); + assertNull(document.getDocumentCatalog().getVersion()); + document.close(); + + // check if version downgrade is denied + document = new PDDocument(); + document.setVersion(1.3f); + // all versions shall have their default value + assertEquals(1.4f, document.getVersion()); + assertEquals(1.4f, document.getDocument().getVersion()); + assertEquals("1.4", document.getDocumentCatalog().getVersion()); + + // check version upgrade + document.setVersion(1.5f); + // overall version has to be 1.5f + assertEquals(1.5f, document.getVersion()); + // header version has to be unchanged + assertEquals(1.4f, document.getDocument().getVersion()); + // catalog version version has to be 1.5 + assertEquals("1.5", document.getDocumentCatalog().getVersion()); + document.close(); + } + + /** + * Test whether a bad file can be deleted after load() failed. + * + * @throws java.io.FileNotFoundException + */ + public void testDeleteBadFile() throws FileNotFoundException + { + File f = new File("test.pdf"); + PrintWriter pw = new PrintWriter(new FileOutputStream(f)); + pw.write("